ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZGM5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCkBAIC0wLDAgKzEsMjk0IEBACisKK1RoaXMgaXMgYSBicmllZiBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgaW4gLi9saW51eC9Eb2N1bWVudGF0aW9uIGFuZCB3aGF0Cit0aGV5IGNvbnRhaW4uIElmIHlvdSBhZGQgYSBkb2N1bWVudGF0aW9uIGZpbGUsIHBsZWFzZSBsaXN0IGl0IGhlcmUgaW4KK2FscGhhYmV0aWNhbCBvcmRlciBhcyB3ZWxsLCBvciByaXNrIGJlaW5nIGh1bnRlZCBkb3duIGxpa2UgYSByYWJpZCBkb2cuCitQbGVhc2UgdHJ5IGFuZCBrZWVwIHRoZSBkZXNjcmlwdGlvbnMgc21hbGwgZW5vdWdoIHRvIGZpdCBvbiBvbmUgbGluZS4KKwkJCQkJCQkgVGhhbmtzIC0tIFBhdWwgRy4KKworRm9sbG93aW5nIHRyYW5zbGF0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBXV1c6CisKKyAgIC0gSmFwYW5lc2UsIG1haW50YWluZWQgYnkgdGhlIEpGIFByb2plY3QgKEpGQGxpbnV4Lm9yLmpwKSwgYXQKKyAgICAgaHR0cDovL3d3dy5saW51eC5vci5qcC9KRi8KKworMDAtSU5ERVgKKwktIHRoaXMgZmlsZS4KK0JLLXVzYWdlLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiBCaXRLZWVwZXIuCitCVUctSFVOVElORworCS0gYnJ1dGUgZm9yY2UgbWV0aG9kIG9mIGRvaW5nIGJpbmFyeSBzZWFyY2ggb2YgcGF0Y2hlcyB0byBmaW5kIGJ1Zy4KK0NoYW5nZXMKKwktIGxpc3Qgb2YgY2hhbmdlcyB0aGF0IGJyZWFrIG9sZGVyIHNvZnR3YXJlIHBhY2thZ2VzLgorQ29kaW5nU3R5bGUKKwktIGhvdyB0aGUgYm9zcyBsaWtlcyB0aGUgQyBjb2RlIGluIHRoZSBrZXJuZWwgdG8gbG9vay4KK0RNQS1BUEkudHh0CisJLSBETUEgQVBJLCBwY2lfIEFQSSAmIGV4dGVuc2lvbnMgZm9yIG5vbi1jb25zaXN0ZW50IG1lbW9yeSBtYWNoaW5lcy4KK0RNQS1tYXBwaW5nLnR4dAorCS0gaW5mbyBmb3IgUENJIGRyaXZlcnMgdXNpbmcgRE1BIHBvcnRhYmx5IGFjcm9zcyBhbGwgcGxhdGZvcm1zLgorRG9jQm9vay8KKwktIGRpcmVjdG9yeSB3aXRoIERvY0Jvb2sgdGVtcGxhdGVzIGV0Yy4gZm9yIGtlcm5lbCBkb2N1bWVudGF0aW9uLgorSU8tbWFwcGluZy50eHQKKwktIGhvdyB0byBhY2Nlc3MgSS9PIG1hcHBlZCBtZW1vcnkgZnJvbSB3aXRoaW4gZGV2aWNlIGRyaXZlcnMuCitJUE1JLnR4dAorCS0gaW5mbyBvbiBMaW51eCBJbnRlbGxpZ2VudCBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSAoSVBNSSkgRHJpdmVyLgorSVJRLWFmZmluaXR5LnR4dAorCS0gaG93IHRvIHNlbGVjdCB3aGljaCBDUFUocykgaGFuZGxlIHdoaWNoIGludGVycnVwdCBldmVudHMgb24gU01QLgorTWFuYWdlbWVudFN0eWxlCisJLSBob3cgdG8gKGF0dGVtcHQgdG8pIG1hbmFnZSBrZXJuZWwgaGFja2Vycy4KK01TSS1IT1dUTy50eHQKKwktIHRoZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSkgRHJpdmVyIEd1aWRlIEhPV1RPIGFuZCBGQVEuCitSQ1UvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIFJDVSAocmVhZC1jb3B5IHVwZGF0ZSkuCitSRUFETUUuREFDOTYwCisJLSBpbmZvIG9uIE15bGV4IERBQzk2MC9EQUMxMTAwIFBDSSBSQUlEIENvbnRyb2xsZXIgRHJpdmVyIGZvciBMaW51eC4KK1NBSy50eHQKKwktIGluZm8gb24gU2VjdXJlIEF0dGVudGlvbiBLZXlzLgorU3VibWl0dGluZ0RyaXZlcnMKKwktIHByb2NlZHVyZSB0byBnZXQgYSBuZXcgZHJpdmVyIHNvdXJjZSBpbmNsdWRlZCBpbnRvIHRoZSBrZXJuZWwgdHJlZS4KK1N1Ym1pdHRpbmdQYXRjaGVzCisJLSBwcm9jZWR1cmUgdG8gZ2V0IGEgc291cmNlIHBhdGNoIGluY2x1ZGVkIGludG8gdGhlIGtlcm5lbCB0cmVlLgorVkdBLXNvZnRjdXJzb3IudHh0CisJLSBob3cgdG8gY2hhbmdlIHlvdXIgVkdBIGN1cnNvciBmcm9tIGEgYmxpbmtpbmcgdW5kZXJzY29yZS4KK2FybS8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gYWJvdXQgTGludXggb24gdGhlIEFSTSBhcmNoaXRlY3R1cmUuCitiYXNpY19wcm9maWxpbmcudHh0CisJLSBiYXNpYyBpbnN0cnVjdGlvbnMgZm9yIHRob3NlIHdobyB3YW50cyB0byBwcm9maWxlIExpbnV4IGtlcm5lbC4KK2JpbmZtdF9taXNjLnR4dAorCS0gaW5mbyBvbiB0aGUga2VybmVsIHN1cHBvcnQgZm9yIGV4dHJhIGJpbmFyeSBmb3JtYXRzLgorYmxvY2svCisJLSBpbmZvIG9uIHRoZSBCbG9jayBJL08gKEJJTykgbGF5ZXIuCitjYWNoZXRsYi50eHQKKwktIGRlc2NyaWJlcyB0aGUgY2FjaGUvVExCIGZsdXNoaW5nIGludGVyZmFjZXMgTGludXggdXNlcy4KK2NjaXNzLnR4dAorCS0gaW5mbywgbWFqb3IvbWlub3IgIydzIGZvciBDb21wYXEncyBTTUFSVCBBcnJheSBDb250cm9sbGVycy4KK2Nkcm9tLworCS0gZGlyZWN0b3J5IHdpdGggaW5mb3JtYXRpb24gb24gdGhlIENELVJPTSBkcml2ZXJzIHRoYXQgTGludXggaGFzLgorY2xpLXN0aS1yZW1vdmFsLnR4dAorCS0gY2xpKCkvc3RpKCkgcmVtb3ZhbCBndWlkZS4KK2NvbXB1dG9uZS50eHQKKwktIGluZm8gb24gQ29tcHV0b25lIEludGVsbGlwb3J0IElJL1BsdXMgTXVsdGlwb3J0IFNlcmlhbCBEcml2ZXIuCitjcHFhcnJheS50eHQKKwktIGluZm8gb24gdXNpbmcgQ29tcGFxJ3MgU01BUlQyIEludGVsbGlnZW50IERpc2sgQXJyYXkgQ29udHJvbGxlcnMuCitjcHUtZnJlcS8KKwktIGluZm8gb24gQ1BVIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSBzY2FsaW5nLgorY3Jpcy8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gYWJvdXQgTGludXggb24gQ1JJUyBhcmNoaXRlY3R1cmUuCitjcnlwdG8vCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHRoZSBDcnlwdG8gQVBJLgorZGVidWdnaW5nLW1vZHVsZXMudHh0CisJLSBzb21lIG5vdGVzIG9uIGRlYnVnZ2luZyBtb2R1bGVzIGFmdGVyIExpbnV4IDIuNi4zLgorZGV2aWNlLW1hcHBlci8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gRGV2aWNlIE1hcHBlci4KK2RldmljZXMudHh0CisJLSBwbGFpbiBBU0NJSSBsaXN0aW5nIG9mIGFsbCB0aGUgbm9kZXMgaW4gL2Rldi8gd2l0aCBtYWpvciBtaW5vciAjJ3MuCitkaWdpZXBjYS50eHQKKwktIGluZm8gb24gRGlnaSBJbnRsLiB7UEMsUENJLEVJU0F9WHggYW5kIFhlbSBzZXJpZXMgY2FyZHMuCitkbm90aWZ5LnR4dAorCS0gaW5mbyBhYm91dCBkaXJlY3Rvcnkgbm90aWZpY2F0aW9uIGluIExpbnV4LgorZHJpdmVyLW1vZGVsLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBkcml2ZXIgbW9kZWwuCitkdmIvCisJLSBpbmZvIG9uIExpbnV4IERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0IChEVkIpIHN1YnN5c3RlbS4KK2Vhcmx5LXVzZXJzcGFjZS8KKwktIGluZm8gYWJvdXQgaW5pdHJhbWZzLCBrbGliYywgYW5kIHVzZXJzcGFjZSBlYXJseSBkdXJpbmcgYm9vdC4KK2Vpc2EudHh0CisJLSBpbmZvIG9uIEVJU0EgYnVzIHN1cHBvcnQuCitleGNlcHRpb24udHh0CisJLSBob3cgTGludXggdjIuMiBoYW5kbGVzIGV4Y2VwdGlvbnMgd2l0aG91dCB2ZXJpZnlfYXJlYSBldGMuCitmYi8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGhlIGZyYW1lIGJ1ZmZlciBncmFwaGljcyBhYnN0cmFjdGlvbiBsYXllci4KK2ZpbGVzeXN0ZW1zLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiB0aGUgdmFyaW91cyBmaWxlc3lzdGVtcyB0aGF0IExpbnV4IHN1cHBvcnRzLgorZmlybXdhcmVfY2xhc3MvCisJLSByZXF1ZXN0X2Zpcm13YXJlKCkgaG90cGx1ZyBpbnRlcmZhY2UgaW5mby4KK2Zsb3BweS50eHQKKwktIG5vdGVzIGFuZCBkcml2ZXIgb3B0aW9ucyBmb3IgdGhlIGZsb3BweSBkaXNrIGRyaXZlci4KK2Z0YXBlLnR4dAorCS0gbm90ZXMgYWJvdXQgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIuCitoYXllcy1lc3AudHh0CisJLSBpbmZvIG9uIHVzaW5nIHRoZSBIYXllcyBFU1Agc2VyaWFsIGRyaXZlci4KK2hpZ2h1aWQudHh0CisJLSBub3RlcyBvbiB0aGUgY2hhbmdlIGZyb20gMTYgYml0IHRvIDMyIGJpdCB1c2VyL2dyb3VwIElEcy4KK2hwZXQudHh0CisJLSBIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciBEcml2ZXIgZm9yIExpbnV4LgoraHdfcmFuZG9tLnR4dAorCS0gaW5mbyBvbiBMaW51eCBzdXBwb3J0IGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBpbiBpOHh4IGNoaXBzZXRzLgoraTJjLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCB0aGUgSTJDIGJ1cy9wcm90b2NvbCAoMiB3aXJlLCBrSHogc3BlZWQpLgoraTJvLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCB0aGUgTGludXggSTJPIHN1YnN5c3RlbS4KK2kzODYvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIGFib3V0IExpbnV4IG9uIEludGVsIDMyIGJpdCBhcmNoaXRlY3R1cmUuCitpYTY0LworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBvbiBJbnRlbCA2NCBiaXQgYXJjaGl0ZWN0dXJlLgoraWRlLnR4dAorCS0gaW1wb3J0YW50IGluZm8gZm9yIHVzZXJzIG9mIEFUQSBkZXZpY2VzIChJREUvRUlERSBkaXNrcyBhbmQgQ0QtUk9NUykuCitpbml0cmQudHh0CisJLSBob3cgdG8gdXNlIHRoZSBSQU0gZGlzayBhcyBhbiBpbml0aWFsL3RlbXBvcmFyeSByb290IGZpbGVzeXN0ZW0uCitpbnB1dC8KKwktIGluZm8gb24gTGludXggaW5wdXQgZGV2aWNlIHN1cHBvcnQuCitpb19vcmRlcmluZy50eHQKKwktIGluZm8gb24gb3JkZXJpbmcgSS9PIHdyaXRlcyB0byBtZW1vcnktbWFwcGVkIGFkZHJlc3Nlcy4KK2lvY3RsLW51bWJlci50eHQKKwktIGhvdyB0byBpbXBsZW1lbnQgYW5kIHJlZ2lzdGVyIGRldmljZS9kcml2ZXIgaW9jdGwgY2FsbHMuCitpb3N0YXRzLnR4dAorCS0gaW5mbyBvbiBJL08gc3RhdGlzdGljcyBMaW51eCBrZXJuZWwgcHJvdmlkZXMuCitpc2FwbnAudHh0CisJLSBpbmZvIG9uIExpbnV4IElTQSBQbHVnICYgUGxheSBzdXBwb3J0LgoraXNkbi8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGhlIExpbnV4IElTRE4gc3VwcG9ydCwgYW5kIHN1cHBvcnRlZCBjYXJkcy4KK2phdmEudHh0CisJLSBpbmZvIG9uIHRoZSBpbi1rZXJuZWwgYmluYXJ5IHN1cHBvcnQgZm9yIEphdmEodG0pLgora2J1aWxkLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuCitrZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0CisJLSBtaW5pIEhvd1RvIG9uIGdlbmVyYXRpb24gYW5kIGxvY2F0aW9uIG9mIGtlcm5lbCBkb2N1bWVudGF0aW9uIGZpbGVzLgora2VybmVsLWRvY3MudHh0CisJLSBsaXN0aW5nIG9mIHZhcmlvdXMgV1dXICsgYm9va3MgdGhhdCBkb2N1bWVudCBrZXJuZWwgaW50ZXJuYWxzLgora2VybmVsLXBhcmFtZXRlcnMudHh0CisJLSBzdW1tYXJ5IGxpc3Rpbmcgb2YgY29tbWFuZCBsaW5lIC8gYm9vdCBwcm9tcHQgYXJncyBmb3IgdGhlIGtlcm5lbC4KK2tvYmplY3QudHh0CisJLSBpbmZvIG9mIHRoZSBrb2JqZWN0IGluZnJhc3RydWN0dXJlIG9mIHRoZSBMaW51eCBrZXJuZWwuCitsYXB0b3AtbW9kZS50eHQKKwktIEhvdyB0byBjb25zZXJ2ZSBiYXR0ZXJ5IHBvd2VyIHVzaW5nIGxhcHRvcC1tb2RlLgorbGRtLnR4dAorCS0gYSBicmllZiBkZXNjcmlwdGlvbiBvZiBMRE0gKFdpbmRvd3MgRHluYW1pYyBEaXNrcykuCitsb2Nrcy50eHQKKwktIGluZm8gb24gZmlsZSBsb2NraW5nIGltcGxlbWVudGF0aW9ucywgZmxvY2soKSB2cy4gZmNudGwoKSwgZXRjLgorbG9nby5naWYKKwktIEZ1bGwgY29sb3VyIEdJRiBpbWFnZSBvZiBMaW51eCBsb2dvIChwZW5ndWluKS4KK2xvZ28udHh0CisJLSBJbmZvIG9uIGNyZWF0b3Igb2YgYWJvdmUgbG9nbyAmIHNpdGUgdG8gZ2V0IGFkZGl0aW9uYWwgaW1hZ2VzIGZyb20uCittNjhrLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBvbiBNb3Rvcm9sYSA2OGsgYXJjaGl0ZWN0dXJlLgorbWFnaWMtbnVtYmVyLnR4dAorCS0gbGlzdCBvZiBtYWdpYyBudW1iZXJzIHVzZWQgdG8gbWFyay9wcm90ZWN0IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuCittYW5kYXRvcnkudHh0CisJLSBpbmZvIG9uIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiBTeXMgViBtYW5kYXRvcnkgZmlsZSBsb2NraW5nLgorbWNhLnR4dAorCS0gaW5mbyBvbiBzdXBwb3J0aW5nIE1pY3JvIENoYW5uZWwgQXJjaGl0ZWN0dXJlIChlLmcuIFBTLzIpIHN5c3RlbXMuCittZC50eHQKKwktIGluZm8gb24gYm9vdCBhcmd1bWVudHMgZm9yIHRoZSBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlci4KK21lbW9yeS50eHQKKwktIGluZm8gb24gdHlwaWNhbCBMaW51eCBtZW1vcnkgcHJvYmxlbXMuCittaXBzLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBvbiBNSVBTIGFyY2hpdGVjdHVyZS4KK21vbm8udHh0CisJLSBob3cgdG8gZXhlY3V0ZSBNb25vLWJhc2VkIC5ORVQgYmluYXJpZXMgd2l0aCB0aGUgaGVscCBvZiBCSU5GTVRfTUlTQy4KK21veGEtc21hcnRpbworCS0gaW5mbyBvbiBpbnN0YWxsaW5nL3VzaW5nIE1veGEgbXVsdGlwb3J0IHNlcmlhbCBkcml2ZXIuCittdHJyLnR4dAorCS0gaG93IHRvIHVzZSBQUHJvIE1lbW9yeSBUeXBlIFJhbmdlIFJlZ2lzdGVycyB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS4KK25iZC50eHQKKwktIGluZm8gb24gYSBUQ1AgaW1wbGVtZW50YXRpb24gb2YgYSBuZXR3b3JrIGJsb2NrIGRldmljZS4KK25ldHdvcmtpbmcvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHZhcmlvdXMgYXNwZWN0cyBvZiBuZXR3b3JraW5nIHdpdGggTGludXguCituZnNyb290LnR4dAorCS0gc2hvcnQgZ3VpZGUgb24gc2V0dGluZyB1cCBhIGRpc2tsZXNzIGJveCB3aXRoIE5GUyByb290IGZpbGVzeXN0ZW0uCitubWlfd2F0Y2hkb2cudHh0CisJLSBpbmZvIG9uIE5NSSB3YXRjaGRvZyBmb3IgU01QIHN5c3RlbXMuCitudW1hc3RhdC50eHQKKwktIGluZm8gb24gaG93IHRvIHJlYWQgTnVtYSBwb2xpY3kgaGl0L21pc3Mgc3RhdGlzdGljcyBpbiBzeXNmcy4KK29vcHMtdHJhY2luZy50eHQKKwktIGhvdyB0byBkZWNvZGUgdGhvc2UgbmFzdHkgaW50ZXJuYWwga2VybmVsIGVycm9yIGR1bXAgbWVzc2FnZXMuCitwYXJpZGUudHh0CisJLSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyYWxsZWwgcG9ydCBJREUgc3Vic3lzdGVtLgorcGFyaXNjLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiB1c2luZyBMaW51eCBvbiBQQS1SSVNDIGFyY2hpdGVjdHVyZS4KK3BhcnBvcnQudHh0CisJLSBob3cgdG8gdXNlIHRoZSBwYXJhbGxlbC1wb3J0IGRyaXZlci4KK3BhcnBvcnQtbG93bGV2ZWwudHh0CisJLSBkZXNjcmlwdGlvbiBhbmQgdXNhZ2Ugb2YgdGhlIGxvdyBsZXZlbCBwYXJhbGxlbCBwb3J0IGZ1bmN0aW9ucy4KK3BjaS50eHQKKwktIGluZm8gb24gdGhlIFBDSSBzdWJzeXN0ZW0gZm9yIGRldmljZSBkcml2ZXIgYXV0aG9ycy4KK3BtLnR4dAorCS0gaW5mbyBvbiBMaW51eCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCitwbnAudHh0CisJLSBMaW51eCBQbHVnIGFuZCBQbGF5IGRvY3VtZW50YXRpb24uCitwb3dlci8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gTGludXggUENJIHBvd2VyIG1hbmFnZW1lbnQuCitwb3dlcnBjLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiB1c2luZyBMaW51eCB3aXRoIHRoZSBQb3dlclBDLgorcHJlZW1wdC1sb2NraW5nLnR4dAorCS0gaW5mbyBvbiBsb2NraW5nIHVuZGVyIGEgcHJlZW1wdGl2ZSBrZXJuZWwuCityYW1kaXNrLnR4dAorCS0gc2hvcnQgZ3VpZGUgb24gaG93IHRvIHNldCB1cCBhbmQgdXNlIHRoZSBSQU0gZGlzay4KK3Jpc2NvbTgudHh0CisJLSBub3RlcyBvbiB1c2luZyB0aGUgUklTQ29tLzggbXVsdGktcG9ydCBzZXJpYWwgZHJpdmVyLgorcm9ja2V0LnR4dAorCS0gaW5mbyBvbiB0aGUgQ29tdHJvbCBSb2NrZXRQb3J0IG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyLgorcnBjLWNhY2hlLnR4dAorCS0gaW50cm9kdWN0aW9uIHRvIHRoZSBjYWNoaW5nIG1lY2hhbmlzbXMgaW4gdGhlIHN1bnJwYyBsYXllci4KK3J0Yy50eHQKKwktIG5vdGVzIG9uIGhvdyB0byB1c2UgdGhlIFJlYWwgVGltZSBDbG9jayAoYWthIENNT1MgY2xvY2spIGRyaXZlci4KK3MzOTAvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHVzaW5nIExpbnV4IG9uIHRoZSBJQk0gUzM5MC4KK3NjaGVkLWNvZGluZy50eHQKKwktIHJlZmVyZW5jZSBmb3IgdmFyaW91cyBzY2hlZHVsZXItcmVsYXRlZCBtZXRob2RzIGluIHRoZSBPKDEpIHNjaGVkdWxlci4KK3NjaGVkLWRlc2lnbi50eHQKKwktIGdvYWxzLCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMaW51eCBPKDEpIHNjaGVkdWxlci4KK3NjaGVkLWRvbWFpbnMudHh0CisJLSBpbmZvcm1hdGlvbiBvbiBzY2hlZHVsaW5nIGRvbWFpbnMuCitzY2hlZC1zdGF0cy50eHQKKwktIGluZm9ybWF0aW9uIG9uIHNjaGVkc3RhdHMgKExpbnV4IFNjaGVkdWxlciBTdGF0aXN0aWNzKS4KK3Njc2kvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIExpbnV4IHNjc2kgc3VwcG9ydC4KK3NlcmlhbC8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGhlIGxvdyBsZXZlbCBzZXJpYWwgQVBJLgorc2VyaWFsLWNvbnNvbGUudHh0CisJLSBob3cgdG8gc2V0IHVwIExpbnV4IHdpdGggYSBzZXJpYWwgbGluZSBjb25zb2xlIGFzIHRoZSBkZWZhdWx0Lgorc2dpLXZpc3dzLnR4dAorCS0gc2hvcnQgYmx1cmIgb24gdGhlIFNHSSBWaXN1YWwgV29ya3N0YXRpb25zLgorc2gvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHBvcnRpbmcgTGludXggdG8gYSBuZXcgYXJjaGl0ZWN0dXJlLgorc21hcnQtY29uZmlnLnR4dAorCS0gZGVzY3JpcHRpb24gb2YgdGhlIFNtYXJ0IENvbmZpZyBtYWtlZmlsZSBmZWF0dXJlLgorc21wLnR4dAorCS0gYSBmZXcgbm90ZXMgb24gc3ltbWV0cmljIG11bHRpLXByb2Nlc3NpbmcuCitzb255cGkudHh0CisJLSBpbmZvIG9uIExpbnV4IFNvbnkgUHJvZ3JhbW1hYmxlIEkvTyBEZXZpY2Ugc3VwcG9ydC4KK3NvdW5kLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiBzb3VuZCBjYXJkIHN1cHBvcnQuCitzcGFyYy8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdXNpbmcgTGludXggb24gU3BhcmMgYXJjaGl0ZWN0dXJlLgorc3BlY2lhbGl4LnR4dAorCS0gaW5mbyBvbiBoYXJkd2FyZS9kcml2ZXIgZm9yIHNwZWNpYWxpeCBJTzgrIG11bHRpcG9ydCBzZXJpYWwgY2FyZC4KK3NwaW5sb2Nrcy50eHQKKwktIGluZm8gb24gdXNpbmcgc3BpbmxvY2tzIHRvIHByb3ZpZGUgZXhjbHVzaXZlIGFjY2VzcyBpbiBrZXJuZWwuCitzdGFsbGlvbi50eHQKKwktIGluZm8gb24gdXNpbmcgdGhlIFN0YWxsaW9uIG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyLgorc3ZnYS50eHQKKwktIHNob3J0IGd1aWRlIG9uIHNlbGVjdGluZyB2aWRlbyBtb2RlcyBhdCBib290IHZpYSBWR0EgQklPUy4KK3N4LnR4dAorCS0gaW5mbyBvbiB0aGUgU3BlY2lhbGl4IFNYL1NJIG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyLgorc3lzY3RsLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiB0aGUgL3Byb2Mvc3lzLyogZmlsZXMuCitzeXNycS50eHQKKwktIGluZm8gb24gdGhlIG1hZ2ljIFN5c1JxIGtleS4KK3RlbGVwaG9ueS8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGVsZXBob255IChlLmcuIHZvaWNlIG92ZXIgSVApIHN1cHBvcnQuCit0aW1lX2ludGVycG9sYXRvcnMudHh0CisJLSBpbmZvIG9uIHRpbWUgaW50ZXJwb2xhdG9ycy4KK3RpcGFyLnR4dAorCS0gaW5mb3JtYXRpb24gYWJvdXQgUGFyYWxsZWwgbGluayBjYWJsZSBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgaGFuZGhlbGRzLgordHR5LnR4dAorCS0gZ3VpZGUgdG8gdGhlIGxvY2tpbmcgcG9saWNpZXMgb2YgdGhlIHR0eSBsYXllci4KK3VuaWNvZGUudHh0CisJLSBpbmZvIG9uIHRoZSBVbmljb2RlIGNoYXJhY3Rlci9mb250IG1hcHBpbmcgdXNlZCBpbiBMaW51eC4KK3VtbC8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm9tYXRpb24gYWJvdXQgVXNlciBNb2RlIExpbnV4LgordXNiLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyByZWdhcmRpbmcgdGhlIFVuaXZlcnNhbCBTZXJpYWwgQnVzLgordmlkZW80bGludXgvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIHJlZ2FyZGluZyB2aWRlby9UVi9yYWRpbyBjYXJkcyBhbmQgbGludXguCit2bS8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGhlIExpbnV4IHZtIGNvZGUuCit2b3lhZ2VyLnR4dAorCS0gZ3VpZGUgdG8gcnVubmluZyBMaW51eCBvbiB0aGUgVm95YWdlciBhcmNoaXRlY3R1cmUuCit3YXRjaGRvZy8KKwktIGhvdyB0byBhdXRvLXJlYm9vdCBMaW51eCBpZiBpdCBoYXMgImZhbGxlbiBhbmQgY2FuJ3QgZ2V0IHVwIi4gOy0pCit4ODZfNjQvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIExpbnV4IHN1cHBvcnQgZm9yIEFNRCB4ODYtNjQgKEhhbW1lcikgbWFjaGluZXMuCit4dGVybS1saW51eC54cG0KKwktIFhQTSBpbWFnZSBvZiBwZW5ndWluIGxvZ28gKHNlZSBsb2dvLnR4dCkgc2l0dGluZyBvbiBhbiB4dGVybS4KK3pvcnJvLnR4dAorCS0gaW5mbyBvbiB3cml0aW5nIGRyaXZlcnMgZm9yIFpvcnJvIGJ1cyBkZXZpY2VzIGZvdW5kIG9uIEFtaWdhcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlLzAwLUlOREVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzY4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlLzAwLUlOREVYCkBAIC0wLDAgKzEsNTEgQEAKK2JrLWtlcm5lbC1ob3d0by50eHQ6IERlc2NyaXB0aW9uIG9mIGtlcm5lbCB3b3JrZmxvdyB1bmRlciBCaXRLZWVwZXIKKworYmstbWFrZS1zdW06IENyZWF0ZSBzdW1tYXJ5IG9mIGNoYW5nZXNldHMgaW4gb25lIHJlcG9zaXRvcnkgYW5kIG5vdAorYW5vdGhlciwgdHlwaWNhbGx5IGluIHByZXBhcmF0aW9uIHRvIGJlIHNlbnQgdG8gYW4gdXBzdHJlYW0gbWFpbnRhaW5lci4KK1R5cGljYWwgdXNhZ2U6CisJY2QgbXktdXBkYXRlZC1yZXBvCisJYmstbWFrZS1zdW0gfi9yZXBvL29yaWdpbmFsLXJlcG8KKwltdiAvdG1wL2xpbnVzLnR4dCAuLi9vcmlnaW5hbC1yZXBvLnR4dAorCitia3NlbmQ6IENyZWF0ZSByZWFkYWJsZSB0ZXh0IG91dHB1dCBjb250YWluaW5nIHN1bW1hcnkgb2YgY2hhbmdlcywgR05VCitwYXRjaCBvZiB0aGUgY2hhbmdlcywgYW5kIEJLIG1ldGFkYXRhIG9mIGNoYW5nZXMgKGFzIG5lZWRlZCBmb3IgcHJvcGVyCitpbXBvcnRpbmcgaW50byBCaXRLZWVwZXIgYnkgYW4gdXBzdHJlYW0gbWFpbnRhaW5lcikuICBUaGlzIG91dHB1dCBpcworc3VpdGFibGUgZm9yIGVtYWlsaW5nIEJpdEtlZXBlciBjaGFuZ2VzLiAgVGhlIHJlY2lwaWVudCBvZiB0aGlzIG91dHB1dAorbWF5IHBpcGUgaXQgZGlyZWN0bHkgdG8gJ2JrIHJlY2VpdmUnLgorCitiejY0d3JhcDogaGVscGVyIHNjcmlwdC4gVW5jb21wcmVzc2VkIGlucHV0IGlzIHBpcGVkIHRvIHRoaXMgc2NyaXB0LAord2hpY2ggY29tcHJlc3NlcyBpdHMgaW5wdXQsIGFuZCB0aGVuIG91dHB1dHMgdGhlIHV1LS9iYXNlNjQtZW5jb2RlZAordmVyc2lvbiBvZiB0aGUgY29tcHJlc3NlZCBpbnB1dC4KKworY3Bjc2V0OiBDb3B5IGNoYW5nZXNldCBiZXR3ZWVuIHVucmVsYXRlZCByZXBvc2l0b3JpZXMuCitBdHRlbXB0cyB0byBwcmVzZXJ2ZSBjaGFuZ2VzZXQgdXNlciwgdXNlciBhZGRyZXNzLCBkZXNjcmlwdGlvbiwgaW4KK2FkZGl0aW9uIHRvIHRoZSBjaGFuZ2VzZXQgKHRoZSBwYXRjaCkgaXRzZWxmLgorVHlwaWNhbCB1c2FnZToKKwljZCBteS11cGRhdGVkLXJlcG8KKwliayBjaGFuZ2VzCSMgbG9va2luZyBmb3IgYSBjaGFuZ2VzZXQuLi4KKwljcGNzZXQgMS4xNTExIC4gLi4vYW5vdGhlci1yZXBvCisKK2NzZXRzLXRvLXBhdGNoZXM6IFByb2R1Y2VzIGEgZGVsdGEgb2YgdHdvIEJLIHJlcG9zaXRvcmllcywgaW4gdGhlIGZvcm0KK29mIGluZGl2aWR1YWwgZmlsZXMsIGVhY2ggY29udGFpbmluZyBhIHNpbmdsZSBjc2V0IGFzIGEgR05VIHBhdGNoLgorT3V0cHV0IGlzIHNldmVyYWwgZmlsZXMsIGVhY2ggd2l0aCB0aGUgZmlsZW5hbWUgIi90bXAvcmV2LSRSRVYucGF0Y2giCitUeXBpY2FsIHVzYWdlOgorCWNkIG15LXVwZGF0ZWQtcmVwbworCWJrIGNoYW5nZXMgLUwgfi9yZXBvL29yaWdpbmFsLXJlcG8gMj4mMSB8IFwKKwkJcGVybCBjc2V0cy10by1wYXRjaGVzCisKK2NzZXQtdG8tbGludXM6IFByb2R1Y2VzIGEgZGVsdGEgb2YgdHdvIEJLIHJlcG9zaXRvcmllcywgaW4gdGhlIGZvcm0gb2YKK2NoYW5nZXNldCBkZXNjcmlwdGlvbnMsIHdpdGggJ2RpZmZzdGF0JyBvdXRwdXQgY3JlYXRlZCBmb3IgZWFjaAoraW5kaXZpZHVhbCBjaGFuZ3NldC4KK1R5cGljYWwgdXNhZ2U6CisJY2QgbXktdXBkYXRlZC1yZXBvCisJYmsgY2hhbmdlcyAtTCB+L3JlcG8vb3JpZ2luYWwtcmVwbyAyPiYxIHwgXAorCQlwZXJsIGNzZXQtdG8tbGludXMgPiBzdW1tYXJ5LnR4dAorCitnY2FwYXRjaDogIEdlbmVyYXRlcyBwYXRjaCBjb250YWluaW5nIGNoYW5nZXMgaW4gbG9jYWwgcmVwb3NpdG9yeS4KK1R5cGljYWwgdXNhZ2U6CisJY2QgbXktdXBkYXRlZC1yZXBvCisJZ2NhcGF0Y2ggPiBmb28ucGF0Y2gKKwordW5iejY0d3JhcDogUmV2ZXJzZSBhbiBlbmNvZGVkLCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtIGNyZWF0ZWQgYnkKK2J6NjR3cmFwIGludG8gYW4gdW5jb21wcmVzc2VkLCB0eXBpY2FsbHkgdGV4dC9wbGFpbiBvdXRwdXQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmsta2VybmVsLWhvd3RvLnR4dCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmsta2VybmVsLWhvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I5MDc1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9iay1rZXJuZWwtaG93dG8udHh0CkBAIC0wLDAgKzEsMjgzIEBACisKKwkJICAgRG9pbmcgdGhlIEJLIFRoaW5nLCBQZW5ndWluLVN0eWxlCisKKworCisKK1RoaXMgc2V0IG9mIG5vdGVzIGlzIGludGVuZGVkIG1haW5seSBmb3Iga2VybmVsIGRldmVsb3BlcnMsIG9jY2FzaW9uYWwKK29yIGZ1bGwtdGltZSwgYnV0IHN5c2FkbWlucyBhbmQgcG93ZXIgdXNlcnMgbWF5IGZpbmQgcGFydHMgb2YgaXQgdXNlZnVsCithcyB3ZWxsLiAgSXQgYXNzdW1lcyBhdCBsZWFzdCBhIGJhc2ljIGZhbWlsaWFyaXR5IHdpdGggQ1ZTLCBib3RoIGF0IGEKK3VzZXIgbGV2ZWwgKHVzZSBvbiB0aGUgY21kIGxpbmUpIGFuZCBhdCBhIGhpZ2hlciBsZXZlbCAoY2xpZW50LXNlcnZlciBtb2RlbCkuCitEdWUgdG8gdGhlIGF1dGhvcidzIGJhY2tncm91bmQsIGFuIG9wZXJhdGlvbiBtYXkgYmUgZGVzY3JpYmVkIGluIHRlcm1zCitvZiBDVlMsIG9yIGluIHRlcm1zIG9mIGhvdyB0aGF0IG9wZXJhdGlvbiBkaWZmZXJzIGZyb20gQ1ZTLgorCitUaGlzIGlzIC1ub3QtIGludGVuZGVkIHRvIGJlIEJpdEtlZXBlciBkb2N1bWVudGF0aW9uLiAgQWx3YXlzIHJ1bgorImJrIGhlbHAgPGNvbW1hbmQ+IiBvciBpbiBYICJiayBoZWxwdG9vbCA8Y29tbWFuZD4iIGZvciByZWZlcmVuY2UKK2RvY3VtZW50YXRpb24uCisKKworQml0S2VlcGVyIENvbmNlcHRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIHRydWUgbmF0dXJlIG9mIHRoZSBJbnRlcm5ldCBpdHNlbGYsIEJpdEtlZXBlciBpcyBhIGRpc3RyaWJ1dGVkCitzeXN0ZW0uICBXaGVuIGFwcGxpZWQgdG8gcmV2aXNpb24gY29udHJvbCwgdGhpcyBtZWFucyBkb2luZyBhd2F5IHdpdGgKK2NsaWVudC1zZXJ2ZXIsIGFuZCBjaGFuZ2luZyB0byBhIHBhcmVudC1jaGlsZCBtb2RlbC4uLiBlc3NlbnRpYWxseQorcGVlci10by1wZWVyLiAgT24gdGhlIGRldmVsb3BlcidzIGVuZCwgdGhpcyBhbHNvIHJlcHJlc2VudHMgYQorZnVuZGFtZW50YWwgZGlzcnVwdGlvbiBpbiB0aGUgc3RhbmRhcmQgd29ya2Zsb3cgb2YgY2hhbmdlcywgY29tbWl0cywKK2FuZCBtZXJnZXMuICBZb3Ugd2lsbCBuZWVkIHRvIHRha2UgYSBmZXcgbWludXRlcyB0byB0aGluayBhYm91dAoraG93IHRvIGJlc3Qgd29yayB1bmRlciBCaXRLZWVwZXIsIGFuZCByZS1vcHRpbWl6ZSB0aGluZ3MgYSBiaXQuCitJbiBzb21lIHNlbnNlIGl0IGlzIGEgYml0IHJhZGljYWwsIGJlY2F1c2UgaXQgbWlnaHQgZGVzY3JpYmVkIGFzCit0b3NzaW5nIGNoYW5nZXMgb3V0IGludG8gYSBtYWVsc3Ryb20gYW5kIGhhdmluZyB0aGVtIG1hZ2ljYWxseQorbGFuZCBhdCB0aGUgcmlnaHQgZGVzdGluYXRpb24uLi4gYnV0IEknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4KKworTGV0J3Mgc3RhcnQgd2l0aCB0aGlzIHByb2dyZXNzaW9uOgorRWFjaCBCaXRLZWVwZXIgc291cmNlIHRyZWUgb24gZGlzayBpcyBhIHJlcG9zaXRvcnkgdW50byBpdHNlbGYuCitFYWNoIHJlcG9zaXRvcnkgaGFzIGEgcGFyZW50IChleGNlcHQgdGhlIHJvb3Qvb3JpZ2luYWwsIG9mIGNvdXJzZSkuCitFYWNoIHJlcG9zaXRvcnkgY29udGFpbnMgYSBzZXQgb2YgYSBjaGFuZ2VzZXRzICgiY3NldHMiKS4KK0VhY2ggY3NldCBpcyBvbmUgb3IgbW9yZSBjaGFuZ2VkIGZpbGVzLCBidW5kbGVkIHRvZ2V0aGVyLgorCitFYWNoIHRyZWUgaXMgYSByZXBvc2l0b3J5LCBzbyBhbGwgY2hhbmdlcyBhcmUgY2hlY2tlZCBpbnRvIHRoZSBsb2NhbAordHJlZS4gIFdoZW4gYSBjaGFuZ2UgaXMgY2hlY2tlZCBpbiwgYWxsIG1vZGlmaWVkIGZpbGVzIGFyZSBncm91cGVkCitpbnRvIGEgbG9naWNhbCB1bml0LCB0aGUgY2hhbmdlc2V0LiAgSW50ZXJuYWxseSwgQksgbGlua3MgdGhlc2UKK2NoYW5nZXNldHMgaW4gYSB0cmVlLCByZXByZXNlbnRpbmcgdmFyaW91cyBjb252ZXJnaW5nIGFuZCBkaXZlcmdpbmcKK2xpbmVzIG9mIGRldmVsb3BtZW50LiAgVGhlc2UgY2hhbmdlc2V0cyBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YKK3RoZSBCSyBzeXN0ZW0uCisKK0FmdGVyIHRoZSBjb25jZXB0IG9mIGNoYW5nZXNldHMsIHRoZSBuZXh0IHRoaW5nIHlvdSBuZWVkIHRvIGdldCB1c2VkCit0byBpcyBoYXZpbmcgbXVsdGlwbGUgY29waWVzIG9mIHNvdXJjZSB0cmVlcyBseWluZyBhcm91bmQuICBUaGlzIC1yZWFsbHktCit0YWtlcyBzb21lIGdldHRpbmcgdXNlZCB0bywgZm9yIHNvbWUgcGVvcGxlLiAgU2VwYXJhdGUgc291cmNlIHRyZWVzCithcmUgdGhlIG1lYW5zIGluIEJpdEtlZXBlciBieSB3aGljaCB5b3UgZGVsaW5lYXRlIHBhcmFsbGVsIGxpbmVzCitvZiBkZXZlbG9wbWVudCwgYm90aCBtaW5vciBhbmQgbWFqb3IuICBXaGF0IHdvdWxkIGJlIGJyYW5jaGVzIGluCitDVlMgYmVjb21lIHNlcGFyYXRlIHNvdXJjZSB0cmVlcywgb3IgImNsb25lcyIgaW4gQml0S2VlcGVyIFtoZWgsCitvciBTdGFyIFdhcnNdIHRlcm1pbm9sb2d5LgorCitDbG9uZXMgYW5kIGNoYW5nZXNldHMgYXJlIHRoZSB0b29scyBmcm9tIHdoaWNoIG1vc3Qgb2YgdGhlIHBvd2VyIG9mCitCaXRLZWVwZXIgaXMgZGVyaXZlZC4gIEFzIG1lbnRpb25lZCBlYXJsaWVyLCBlYWNoIGNsb25lIGhhcyBhIHBhcmVudCwKK3RoZSB0cmVlIHVzZWQgYXMgdGhlIHNvdXJjZSB3aGVuIHRoZSBuZXcgY2xvbmUgd2FzIGNyZWF0ZWQuICBJbiBhCitDVlMtbGlrZSBzZXR1cCwgdGhlIHBhcmVudCB3b3VsZCBiZSBhIHJlbW90ZSBzZXJ2ZXIgb24gdGhlIEludGVybmV0LAorYW5kIHRoZSBjaGlsZCBpcyB5b3VyIGxvY2FsIGNsb25lIG9mIHRoYXQgdHJlZS4KKworT25jZSB5b3UgaGF2ZSBlc3RhYmxpc2hlZCBhIGNvbW1vbiBiYXNlbGluZSBiZXR3ZWVuIHR3byBzb3VyY2UgdHJlZXMgLS0KK2EgY29tbW9uIHBhcmVudCAtLSB0aGVuIHlvdSBjYW4gbWVyZ2UgY2hhbmdlc2V0cyBiZXR3ZWVuIHRob3NlIHR3bwordHJlZXMgd2l0aCBlYXNlLiAgTWVyZ2luZyBjaGFuZ2VzIGludG8gYSB0cmVlIGlzIGNhbGxlZCBhICJwdWxsIiwgYW5kCitpcyBhbmFsYWdvdXMgdG8gJ2N2cyB1cGRhdGUnLiAgQSBwdWxsIGRvd25sb2FkcyBhbGwgdGhlIGNoYW5nZXNldHMgaW4KK3RoZSByZW1vdGUgdHJlZSB5b3UgZG8gbm90IGhhdmUsIGFuZCBtZXJnZXMgdGhlbS4gIFNlbmRpbmcgY2hhbmdlcyBpbgorb25lIHRyZWUgdG8gYW5vdGhlciB0cmVlIGlzIGNhbGxlZCBhICJwdXNoIi4gIFB1c2ggc2VuZHMgYWxsIGNoYW5nZXMKK2luIHRoZSBsb2NhbCB0cmVlIHRoZSByZW1vdGUgZG9lcyBub3QgeWV0IGhhdmUsIGFuZCBtZXJnZXMgdGhlbS4KKworRnJvbSB0aGVzZSBjb25jZXB0cyBjb21lIHNvbWUgaW5pdGlhbCBjb21tYW5kIGV4YW1wbGVzOgorCisxKSBiayBjbG9uZSAtcSBodHRwOi8vbGludXguYmtiaXRzLm5ldC9saW51eC0yLjUgbGludXMtMi41CitEb3dubG9hZCBhIDIuNSBzdG9jayBrZXJuZWwgdHJlZSwgbmFtaW5nIGl0ICJsaW51cy0yLjUiIGluIHRoZSBsb2NhbCBkaXIuCitUaGUgIi1xIiBkaXNhYmxlcyBsaXN0aW5nIGV2ZXJ5IHNpbmdsZSBmaWxlIGFzIGl0IGlzIGRvd25sb2FkZWQuCisKKzIpIGJrIGNsb25lIC1xbCBsaW51cy0yLjUgYWxwaGEtMi41CitDcmVhdGUgYSBzZXBhcmF0ZSBzb3VyY2UgdHJlZSBmb3IgdGhlIEFscGhhIEFYUCBhcmNoaXRlY3R1cmUuCitUaGUgIi1sIiB1c2VzIGhhcmQgbGlua3MgaW5zdGVhZCBvZiBjb3B5aW5nIGRhdGEsIHNpbmNlIGJvdGggdHJlZXMgYXJlCitvbiB0aGUgbG9jYWwgZGlzay4gIFlvdSBjYW4gYWxzbyByZXBsYWNlIHRoZSBhYm92ZSB3aXRoICJiayBsY2xvbmUgLXEgLi4uIgorCitZb3Ugb25seSBjbG9uZSBhIHRyZWUgLW9uY2UtLiAgQWZ0ZXIgY2xvbmluZyB0aGUgdHJlZSBsaXZlcyBhIGxvbmcgdGltZQorb24gZGlzaywgYmVpbmcgdXBkYXRpbmcgYnkgcHVzaGVzIGFuZCBwdWxscy4KKworMykgY2QgYWxwaGEtMi41IDsgYmsgcHVsbCBodHRwOi8vZ2tlcm5lbC5ia2JpdHMubmV0L2FscGhhLTIuNQorRG93bmxvYWQgY2hhbmdlcyBpbiAiYWxwaGEtMi41IiByZXBvc2l0b3J5IHdoaWNoIGFyZSBub3QgcHJlc2VudAoraW4gdGhlIGxvY2FsIHJlcG9zaXRvcnksIGFuZCBtZXJnZSB0aGVtIGludG8gdGhlIHNvdXJjZSB0cmVlLgorCis0KSBiayAtciBjbyAtcQorQmVjYXVzZSBldmVyeSB0cmVlIGlzIGEgcmVwb3NpdG9yeSwgZmlsZXMgbXVzdCBiZSBjaGVja2VkIG91dCBiZWZvcmUKK3RoZXkgd2lsbCBiZSBpbiB0aGVpciBzdGFuZGFyZCBwbGFjZXMgaW4gdGhlIHNvdXJjZSB0cmVlLgorCis1KQliayB2aSBmcy9pbm9kZS5jCQkJCSMgZXhhbXBsZSBjaGFuZ2UuLi4KKwliayBjaXRvb2wJCQkJCSMgY2hlY2tpbiwgdXNpbmcgWCB0b29sCisJYmsgcHVzaCBiazovL2drZXJuZWxAYmtiaXRzLm5ldC9hbHBoYS0yLjUJIyB1cGxvYWQgY2hhbmdlCitUeXBpY2FsIGV4YW1wbGUgb2YgYSBCSyBzZXF1ZW5jZSB0aGF0IHdvdWxkIHJlcGxhY2UgdGhlIGFuYWxhZ291cyBDVlMKK3NpdHVhdGlvbiwKKwl2aSBmcy9pbm9kZS5jCisJY3ZzIGNvbW1pdAorCitBcyB0aGlzIGlzIGp1c3Qgc3VwcG9zZWQgdG8gYmUgYSBxdWljayBCSyBpbnRybywgZm9yIG1vcmUgaW4tZGVwdGgKK3R1dG9yaWFscywgbGl2ZSB3b3JraW5nIGRlbW9zLCBhbmQgZG9jcywgc2VlIGh0dHA6Ly93d3cuYml0a2VlcGVyLmNvbS8KKworCisKK0JLIGFuZCBLZXJuZWwgRGV2ZWxvcG1lbnQgV29ya2Zsb3cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0N1cnJlbnRseSB0aGUgbGF0ZXN0IDIuNSB0cmVlIGlzIGF2YWlsYWJsZSB2aWEgImJrIGNsb25lICRVUkwiCithbmQgImJrIHB1bGwgJFVSTCIgYXQgaHR0cDovL2xpbnV4LmJrYml0cy5uZXQvbGludXgtMi41CitUaGlzIHNob3VsZCBjaGFuZ2UgaW4gYSBmZXcgd2Vla3MgdG8gYSBrZXJuZWwub3JnIFVSTC4KKworCitBIGJpZyBwYXJ0IG9mIHVzaW5nIEJpdEtlZXBlciBpcyBvcmdhbml6aW5nIHRoZSB2YXJpb3VzIHRyZWVzIHlvdSBoYXZlCitvbiB5b3VyIGxvY2FsIGRpc2ssIGFuZCBvcmdhbml6aW5nIHRoZSBmbG93IG9mIGNoYW5nZXMgYW1vbmcgdGhvc2UKK3RyZWVzLCBhbmQgcmVtb3RlIHRyZWVzLiAgSWYgb25lIHdlcmUgdG8gZ3JhcGggdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbgorYSBkZXNpcmVkIEJLIHNldHVwLCB5b3UgYXJlIGxpa2VseSB0byBzZWUgYSBmZXctbWFueS1mZXcgZ3JhcGgsIGxpa2UKK3RoaXM6CisKKwkJICAgIGxpbnV4LTIuNQorCQkgICAgICAgIHwKKwkgICAgICAgbWVyZ2UtdG8tbGludXMtMi41CisJCSAvICAgIHwgICAgICB8CisJICAgICAgICAvICAgICB8ICAgICAgfAorCXZtLWhhY2tzICBidWdmaXhlcyAgZmlsZXN5cyAgIHBlcnNvbmFsLWhhY2tzCisJICAgICAgXAkgICAgICB8CSAgICAgfAkJLworCSAgICAgICBcICAgICAgfCAgICAgIHwgICAgICAgICAvCisJCVwgICAgIHwgICAgICB8ICAgICAgICAvCisJICAgICAgICAgdGVzdGluZy1hbmQtdmFsaWRhdGlvbgorCitTaW5jZSBhICJiayBwdXNoIiBzZW5kcyBhbGwgY2hhbmdlcyBub3QgaW4gdGhlIHRhcmdldCB0cmVlLCBhbmQKK3NpbmNlIGEgImJrIHB1bGwiIHJlY2VpdmVzIGFsbCBjaGFuZ2VzIG5vdCBpbiB0aGUgc291cmNlIHRyZWUsIHlvdSB3YW50Cit0byBtYWtlIHN1cmUgeW91IGFyZSBvbmx5IHB1c2hpbmcgc3BlY2lmaWMgY2hhbmdlcyB0byB0aGUgZGVzaXJlZCB0cmVlLAorbm90IGFsbCBjaGFuZ2VzIGZyb20gInBlZXIgcGFyZW50IiB0cmVlcy4gIEZvciBleGFtcGxlLCBwdXNoaW5nIGEgY2hhbmdlCitmcm9tIHRoZSB0ZXN0aW5nLWFuZC12YWxpZGF0aW9uIHRyZWUgd291bGQgcHJvYmFibHkgYmUgYSBiYWQgaWRlYSwKK2JlY2F1c2UgaXQgd2lsbCBwdXNoIGFsbCBjaGFuZ2VzIGZyb20gdm0taGFja3MsIGJ1Z2ZpeGVzLCBmaWxlc3lzLCBhbmQKK3BlcnNvbmFsLWhhY2tzIHRyZWVzIGludG8gdGhlIHRhcmdldCB0cmVlLgorCitPbmUgd291bGQgdHlwaWNhbGx5IHdvcmsgb24gb25seSBvbmUgInRoZW1lIiBhdCBhIHRpbWUsIGVpdGhlcgordm0taGFja3Mgb3IgYnVnZml4ZXMgb3IgZmlsZXN5cywga2VlcGluZyB0aG9zZSBjaGFuZ2VzIGlzb2xhdGVkIGluCit0aGVpciBvd24gdHJlZSBkdXJpbmcgZGV2ZWxvcG1lbnQsIGFuZCBvbmx5IG1lcmdlIHRoZSBpc29sYXRlZCB3aXRoCitvdGhlciBjaGFuZ2VzIHdoZW4gZ29pbmcgdXBzdHJlYW0gKHRvIExpbnVzIG9yIG90aGVyIG1haW50YWluZXJzKSBvcgorZG93bnN0cmVhbSAodG8geW91ciAidW5pb24iIHRyZWVzLCBsaWtlIHRlc3RpbmctYW5kLXZhbGlkYXRpb24gYWJvdmUpLgorCitJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBzb21lIG9mIHRoaXMgc2VwYXJhdGlvbiBpcyBub3QganVzdCByZWNvbW1lbmRlZAorcHJhY3RpY2UsIGl0J3MgYWN0dWFsbHkgW2ZvciBub3ddIC1lbmZvcmNlZC0gYnkgQml0S2VlcGVyLiAgQml0S2VlcGVyCityZXF1aXJlcyB0aGF0IGNoYW5nZXNldHMgbWFpbnRhaW4gYSBjZXJ0YWluIG9yZGVyLCB3aGljaCBpcyB0aGUgcmVhc29uCit0aGF0ICJiayBwdXNoIiBzZW5kcyBhbGwgbG9jYWwgY2hhbmdlc2V0cyB0aGUgcmVtb3RlIGRvZXNuJ3QgaGF2ZS4gIFRoaXMKK3NlcGFyYXRpb24gbWF5IGxvb2sgbGlrZSBhIGxvdCBvZiB3YXN0ZWQgZGlzayBzcGFjZSBhdCBmaXJzdCwgYnV0IGl0CitoZWxwcyB3aGVuIHR3byB1bnJlbGF0ZWQgY2hhbmdlcyBtYXkgInBvbGx1dGUiIHRoZSBzYW1lIGFyZWEgb2YgY29kZSwgb3IKK2Rvbid0IGZvbGxvdyB0aGUgc2FtZSBwYWNlIG9mIGRldmVsb3BtZW50LCBvciBhbnkgb3RoZXIgb2YgdGhlIHN0YW5kYXJkCityZWFzb25zIHdoeSBvbmUgY3JlYXRlcyBhIGRldmVsb3BtZW50IGJyYW5jaC4KKworU21hbGwgZGV2ZWxvcG1lbnQgYnJhbmNoZXMgKGNsb25lcykgd2lsbCBhcHBlYXIgYW5kIGRpc2FwcGVhcjoKKworCS0tLS0tLS0tIEEgLS0tLS0tLS0tIEIgLS0tLS0tLS0tIEMgLS0tLS0tLS0tIEQgLS0tLS0tLQorCSAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLworCQkgICAtLS0tLXNob3J0LXRlcm0gZGV2ZWwgYnJhbmNoLS0tLS0KKworV2hpbGUgbG9uZy10ZXJtIGJyYW5jaGVzIHdpbGwgcGFyYWxsZWwgYSB0cmVlIChvciB0cmVlcyksIHdpdGggcGVyaW9kCittZXJnZSBwb2ludHMuICBJbiB0aGlzIGZpcnN0IGV4YW1wbGUsIHdlIHB1bGwgZnJvbSBhIHRyZWUgKHB1bGxzLAorIlwiKSBwZXJpb2RpY2FsbHksIHN1Y2ggYXMgd2hhdCBvY2N1cnMgd2hlbiB0cmFja2luZyBjaGFuZ2VzIGluIGEKK3ZlbmRvciB0cmVlLCBuZXZlciBwdXNoaW5nIGNoYW5nZXMgYmFjayB1cCB0aGUgbGluZToKKworCS0tLS0tLS0tIEEgLS0tLS0tLS0tIEIgLS0tLS0tLS0tIEMgLS0tLS0tLS0tIEQgLS0tLS0tLQorCSAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICBcCisJICAgICAgICAgICAtLS0tbG9uZy10ZXJtIGRldmVsIGJyYW5jaC0tLS0tLS0tLS0tLS0tLS0tCisKK0FuZCB0aGVuIGEgbW9yZSBjb21tb24gY2FzZSBpbiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQsIGEgbG9uZyB0ZXJtCiticmFuY2ggd2l0aCBwZXJpb2RpYyBtZXJnZXMgYmFjayBpbnRvIHRoZSB0cmVlIChwdXNoZXMsICIvIik6CisKKwktLS0tLS0tLSBBIC0tLS0tLS0tLSBCIC0tLS0tLS0tLSBDIC0tLS0tLS0tLSBEIC0tLS0tLS0KKwkgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgIC8gXAorCSAgICAgICAgICAgLS0tLWxvbmctdGVybSBkZXZlbCBicmFuY2gtLS0tLS0tLS0tLS0tLS0tLQorCisKKworCisKK1N1Ym1pdHRpbmcgQ2hhbmdlcyB0byBMaW51cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSdzIGEgYml0IG9mIGFuIGFydCwgb3Igc3R5bGUsIG9mIHN1Ym1pdHRpbmcgY2hhbmdlcyB0byBMaW51cy4KK1NpbmNlIExpbnVzJ3MgdHJlZSBpcyBub3cgKHlvdSBtaWdodCBzYXkpIGZ1bGx5IGludGVncmF0ZWQgaW50byB0aGUKK2Rpc3RyaWJ1dGVkIEJpdEtlZXBlciBzeXN0ZW0sIHRoZXJlIGFyZSBzZXZlcmFsIHByZXJlcXVpc2l0ZXMgdG8KK3Byb3Blcmx5IHN1Ym1pdHRpbmcgYSBCaXRLZWVwZXIgY2hhbmdlLiAgQWxsIHRoZXNlIHByZXJlcSdzIGFyZSBqdXN0CitnZW5lcmFsIGNsZWFubGluZXNzIG9mIEJLIHVzYWdlLCBzbyBhcyBwZW9wbGUgYmVjb21lIGV4cGVydHMgYXQgQkssIGZlZWwKK2ZyZWUgdG8gb3B0aW1pemUgdGhpcyBwcm9jZXNzIGZ1cnRoZXIgKGFzc3VtaW5nIExpbnVzIGFncmVlcywgb2YKK2NvdXJzZSkuCisKKworCiswKSBNYWtlIHN1cmUgeW91ciB0cmVlIHdhcyBvcmlnaW5hbGx5IGNsb25lZCBmcm9tIHRoZSBsaW51eC0yLjUgdHJlZQorY3JlYXRlZCBieSBMaW51cy4gIElmIHlvdXIgdHJlZSBkb2VzIG5vdCBoYXZlIHRoaXMgYXMgaXRzIGFuY2VzdG9yLCBpdAoraXMgaW1wb3NzaWJsZSB0byByZWxpYWJseSBleGNoYW5nZSBjaGFuZ2VzZXRzLgorCisKKworMSkgUGF5IGF0dGVudGlvbiB0byB5b3VyIGNvbW1pdCB0ZXh0LiAgVGhlIGNvbW1pdCBtZXNzYWdlIHRoYXQKK2FjY29tcGFuaWVzIGVhY2ggY2hhbmdlc2V0IHlvdSBzdWJtaXQgd2lsbCBsaXZlIG9uIGZvcmV2ZXIgaW4gaGlzdG9yeSwKK2FuZCBpcyB1c2VkIGJ5IExpbnVzIHRvIGFjY3VyYXRlbHkgc3VtbWFyaXplIHRoZSBjaGFuZ2VzIGluIGVhY2gKK3ByZS1wYXRjaC4gIFJlbWVtYmVyIHRoYXQgdGhlcmUgaXMgbm8gY29udGV4dCwgc28KKwkiZml4IGZvciBuZXcgc2NoZWR1bGVyIGNoYW5nZXMiCit3b3VsZCBiZSB0b28gdmFndWUsIGJ1dAorCSJmaXggbWlwczY0IGFyY2ggZm9yIG5ldyBzY2hlZHVsZXIgc3dpdGNoX3RvKCksIFRJRl94eHggc2VtYW50aWNzIgord291bGQgYmUgbXVjaCBiZXR0ZXIuCisKK1lvdSBjYW4gYW5kIHNob3VsZCB1c2UgdGhlIGNvbW1hbmQgImJrIGNvbW1lbnQgLUM8cmV2PiIgdG8gdXBkYXRlIHRoZQorY29tbWl0IHRleHQsIGFuZCBpbXByb3ZlIGl0IGFmdGVyIHRoZSBmYWN0LiAgVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IKK2RldmVsb3BtZW50OiBwb29yLCBxdWljayBkZXNjcmlwdGlvbnMgZHVyaW5nIGRldmVsb3BtZW50LCB3aGljaCBnZXQKK2NsZWFuZWQgdXAgdXNpbmcgImJrIGNvbW1lbnQiIGJlZm9yZSBpc3N1aW5nIHRoZSAiYmsgcHVzaCIgdG8gc3VibWl0IHRoZQorY2hhbmdlcy4KKworCisKKzIpIEluY2x1ZGUgYW4gSW50ZXJuZXQtYXZhaWxhYmxlIFVSTCBmb3IgTGludXMgdG8gcHVsbCBmcm9tLCBzdWNoIGFzCisKKwlQdWxsIGZyb206ICBodHRwOi8vZ2tlcm5lbC5ia2JpdHMubmV0L25ldC1kcml2ZXJzLTIuNQorCisKKworMykgSW5jbHVkZSBhIHN1bW1hcnkgYW5kICJkaWZmc3RhdCAtcDEiIG9mIGVhY2ggY2hhbmdlc2V0IHRoYXQgd2lsbCBiZQorZG93bmxvYWRlZCwgd2hlbiBMaW51cyBpc3N1ZXMgYSAiYmsgcHVsbCIuICBUaGUgYXV0aG9yIGF1dG8tZ2VuZXJhdGVzCit0aGVzZSBzdW1tYXJpZXMgdXNpbmcgImJrIGNoYW5nZXMgLUwgPHBhcmVudD4iLCB0byBvYnRhaW4gYSBsaXN0aW5nCitvZiBhbGwgdGhlIHBlbmRpbmctdG8tc2VuZCBjaGFuZ2VzZXRzLCBhbmQgdGhlaXIgY29tbWl0IG1lc3NhZ2VzLgorCitJdCBpcyBpbXBvcnRhbnQgdG8gc2hvdyBMaW51cyB3aGF0IGhlIHdpbGwgYmUgZG93bmxvYWRpbmcgd2hlbiBoZSBpc3N1ZXMKK2EgImJrIHB1bGwiLCB0byByZWR1Y2UgdGhlIHRpbWUgcmVxdWlyZWQgdG8gc2lmdCB0aGUgY2hhbmdlcyBvbmNlIHRoZXkKK2FyZSBkb3dubG9hZGVkIHRvIExpbnVzJ3MgbG9jYWwgbWFjaGluZS4KKworSU1QT1JUQU5UIE5PVEU6ICBPbmUgb2YgdGhlIGZlYXR1cmVzIG9mIEJLIGlzIHRoYXQgeW91ciByZXBvc2l0b3J5IGRvZXMKK25vdCBoYXZlIHRvIGJlIHVwIHRvIGRhdGUsIGluIG9yZGVyIGZvciBMaW51cyB0byByZWNlaXZlIHlvdXIgY2hhbmdlcy4KK0l0IGlzIGNvbnNpZGVyZWQgYSBjb3VydGVzeSB0byBrZWVwIHlvdXIgcmVwb3NpdG9yeSBmYWlybHkgcmVjZW50LCB0bworbGVzc2VuIGFueSBwb3RlbnRpYWwgbWVyZ2Ugd29yayBMaW51cyBtYXkgbmVlZCB0byBkby4KKworCis0KSBTcGxpdCB1cCB5b3VyIGNoYW5nZXMuICBFYWNoIG1haW50YWluZXI8LT5MaW51cyBzaXR1YXRpb24gaXMgbGlrZWx5Cit0byBiZSBzbGlnaHRseSBkaWZmZXJlbnQgaGVyZSwgc28gdGFrZSB0aGlzIGp1c3QgYXMgZ2VuZXJhbCBhZHZpY2UuICBUaGUKK2F1dGhvciBzcGxpdHMgdXAgY2hhbmdlcyBhY2NvcmRpbmcgdG8gInRoZW1lcyIgd2hlbiBtZXJnaW5nIHdpdGggTGludXMuCitTaW11bHRhbmVvdXMgcHVzaGVzIGZyb20gbG9jYWwgZGV2ZWxvcG1lbnQgZ28gdG8gc3BlY2lhbCB0cmVlcyB3aGljaAorZXhpc3Qgc29sZWx5IHRvIGhvdXNlIGNoYW5nZXMgInF1ZXVlZCIgZm9yIExpbnVzLiAgRXhhbXBsZSBvZiB0aGUgdHJlZXM6CisKKwluZXQtZHJpdmVycy0yLjUgLS0gb24tZ29pbmcgbmV0IGRyaXZlciBtYWludGVuYW5jZQorCXZtLTIuNSAtLSBWTS1yZWxhdGVkIGNoYW5nZXMKKwlmcy0yLjUgLS0gZmlsZXN5c3RlbS1yZWxhdGVkIGNoYW5nZXMKKworTGludXMgdGhlbiBoYXMgbXVjaCBtb3JlIGZyZWVkb20gZm9yIHB1bGxpbmcgY2hhbmdlcy4gIEhlIGNvdWxkIChmb3IKK2V4YW1wbGUpIGlzc3VlIGEgImJrIHB1bGwiIG9uIHZtLTIuNSBhbmQgZnMtMi41IHRyZWVzLCB0byBtZXJnZSB0aGVpcgorY2hhbmdlcywgYnV0IGhvbGQgb2ZmIG5ldC1kcml2ZXJzLTIuNSBiZWNhdXNlIG9mIGEgY2hhbmdlIHRoYXQgbmVlZHMKK21vcmUgZGlzY3Vzc2lvbi4KKworT3RoZXIgbWFpbnRhaW5lcnMgbWF5IGZpbmQgdGhhdCBhIHNpbmdsZSBsaW51cy1wdWxsLWZyb20gdHJlZSBpcworYWRlcXVhdGUgZm9yIHBhc3NpbmcgQksgY2hhbmdlc2V0cyB0byBoaW0uCisKKworCitGcmVxdWVudGx5IEFuc3dlcmVkIFF1ZXN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIEhvdyBkbyBJIGNoYW5nZSB0aGUgZS1tYWlsIGFkZHJlc3Mgc2hvd24gaW4gdGhlIGNoYW5nZWxvZz8KK0EuIFdoZW4geW91IHJ1biAiYmsgY2l0b29sIiBvciAiYmsgY29tbWl0Iiwgc2V0IGVudmlyb25tZW50CisgICB2YXJpYWJsZXMgQktfVVNFUiBhbmQgQktfSE9TVCB0byB0aGUgZGVzaXJlZCB1c2VybmFtZQorICAgYW5kIGhvc3QvZG9tYWluIG5hbWUuCisKKworMikgSG93IGRvIEkgdXNlIHRhZ3MgLyBnZXQgYSBkaWZmIGJldHdlZW4gdHdvIGtlcm5lbCB2ZXJzaW9ucz8KK0EuIFBhc3MgdGhlIHRhZ3MgTGludXMgdXNlcyB0byAnYmsgZXhwb3J0Jy4KKworQ2hhbmdlU2V0cyBhcmUgaW4gYSBmb3J3YXJkLXByb2dyZXNzaW5nIG9yZGVyLCBzbyBpdCdzIHByZXR0eSBlYXN5Cit0byBnZXQgYSBzbmFwc2hvdCBzdGFydGluZyBhbmQgZW5kaW5nIGF0IGFueSB0d28gcG9pbnRzIGluIHRpbWUuCitMaW51cyBwdXRzIHRhZ3Mgb24gZWFjaCByZWxlYXNlIGFuZCBwcmUtcmVsZWFzZSwgc28geW91IGNvdWxkIHVzZQordGhlc2UgdHdvIGV4YW1wbGVzOgorCisgICAgYmsgZXhwb3J0IC10cGF0Y2ggLWhkdSAtcnYyLjUuNCx2Mi41LjUgfCBsZXNzCisgICAgICAgICMgY3JlYXRlcyBwYXRjaC0yLjUuNSBlc3NlbnRpYWxseQorICAgIGJrIGV4cG9ydCAtdHBhdGNoIC1kdSAtcnYyLjUuNS1wcmUxLHYyLjUuNSB8IGxlc3MKKyAgICAgICAgIyBjaGFuZ2VzIGZyb20gcHJlMSB0byBmaW5hbAorCitBIHRhZyBpcyBqdXN0IGFuIGFsaWFzIGZvciBhIHNwZWNpZmljIGNoYW5nZXNldC4uLiBhbmQgc2luY2UgY2hhbmdlc2V0cworYXJlIG9yZGVyZWQsIGEgdGFnIGlzIHRodXMgYSBtYXJrZXIgZm9yIGEgc3BlY2lmaWMgcG9pbnQgaW4gdGltZSAob3IKK3NwZWNpZmljIHN0YXRlIG9mIHRoZSB0cmVlKS4KKworCiszKSBJcyB0aGVyZSBhbiBlYXN5IHdheSB0byBnZW5lcmF0ZSBPbmUgQmlnIFBhdGNoIHZlcnN1cyBtYWlubGluZSwKKyAgIGZvciBteSBsb25nLWxpdmVkIGtlcm5lbCBicmFuY2g/CitBLiBZZXMuICBUaGlzIHJlcXVpcmVzIEJLIDMueCwgdGhvdWdoLgorCisJYmsgZXhwb3J0IC10cGF0Y2ggLXJgYmsgcmVwb2djYSBiazovL2xpbnV4LmJrYml0cy5uZXQvbGludXgtMi41YCwrCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmstbWFrZS1zdW0gYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2JrLW1ha2Utc3VtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4Y2E0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2JrLW1ha2Utc3VtCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaCAtZQorIyBESVI9JEhPTUUvQksvYXhwLTIuNQorIyBjZCAkRElSCisKK0xJTlVTX1JFUE89JDEKK0RJUkJBU0U9YGJhc2VuYW1lICRQV0RgCisKK3sKK2NhdCA8PEVPVAorUGxlYXNlIGRvIGEKKworCWJrIHB1bGwgYms6Ly9na2VybmVsLmJrYml0cy5uZXQvJERJUkJBU0UKKworVGhpcyB3aWxsIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzOgorCitFT1QKKworYmsgZXhwb3J0IC10cGF0Y2ggLWhkdSAtcmBiayByZXBvZ2NhICRMSU5VU19SRVBPYCwrIHwgZGlmZnN0YXQgLXAxIDI+L2Rldi9udWxsCisKK2NhdCA8PEVPVAorCit0aHJvdWdoIHRoZXNlIENoYW5nZVNldHM6CisKK0VPVAorCitiayBjaGFuZ2VzIC1MIC1kJyR1bmxlc3MoOk1FUkdFOil7Q2hhbmdlU2V0fDpDU0VUUkVWOlxufScgJExJTlVTX1JFUE8gfAorYmsgLVIgcHJzIC1oIC1kJyR1bmxlc3MoOk1FUkdFOil7PDpQOkA6SE9TVDo+ICg6RDogOkk6KVxuJGVhY2goOkM6KXsgICAoOkM6KVxufVxufScgLQorCit9ID4gL3RtcC9saW51cy50eHQKKworY2F0IDw8RU9UCitNYWlsIHRleHQgaW4gL3RtcC9saW51cy50eHQ7IHBsZWFzZSBjaGVjayBhbmQgc2VuZCB1c2luZyB5b3VyIGZhdm91cml0ZQorbWFpbGVyLgorRU9UCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2Jrc2VuZCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmtzZW5kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzNmNhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2Jrc2VuZApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKyMgQSBzY3JpcHQgdG8gZm9ybWF0IEJLIGNoYW5nZXNldCBvdXRwdXQgaW4gYSBtYW5uZXIgdGhhdCBpcyBlYXN5IHRvIHJlYWQuCisjIEFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQHR1cmJvbGFicy5jb20+ICAxMy8wMi8yMDAyCisjCisjIEFkZCBkaWZmc3RhdCBvdXRwdXQgYWZ0ZXIgQ2hhbmdlbG9nIDxhZGlsZ2VyQHR1cmJvbGFicy5jb20+ICAgMjEvMDIvMjAwMgorCitQUk9HPWJrc2VuZAorCit1c2FnZSgpIHsKKwllY2hvICJ1c2FnZTogJFBST0cgLXI8cmV2PiIKKwllY2hvIC1lICJcdHdoZXJlIDxyZXY+IGlzIG9mIHRoZSBmb3JtICcxLjIzJywgJzEuMjMuLicsICcxLjIzLi4xLjI3JywiCisJZWNobyAtZSAiXHRvciAnKycgdG8gaW5kaWNhdGUgdGhlIG1vc3QgcmVjZW50IHJldmlzaW9uIgorCisJZXhpdCAxCit9CisKK2Nhc2UgJDEgaW4KKy1yKSBSRVY9JDI7IHNoaWZ0IDs7CistciopIFJFVj1gZWNobyAkMSB8IHNlZCAncy9eLXIvLydgIDs7CisqKSBlY2hvICIkUFJPRzogbm8gcmV2aXNpb24gZ2l2ZW4sIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRoYXQiOzsKK2VzYWMKKworWyAteiAiJFJFViIgXSAmJiB1c2FnZQorCitlY2hvICJZb3UgY2FuIGltcG9ydCB0aGlzIGNoYW5nZXNldCBpbnRvIEJLIGJ5IHBpcGluZyB0aGlzIHdob2xlIG1lc3NhZ2UgdG86IgorZWNobyAiJ3wgYmsgcmVjZWl2ZSBbcGF0aCB0byByZXBvc2l0b3J5XScgb3IgYXBwbHkgdGhlIHBhdGNoIGFzIHVzdWFsLiIKKworU0VQPSJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIgorZWNobyAtZSAkU0VQCitlbnYgUEFHRVI9L2Jpbi9jYXQgYmsgY2hhbmdlcyAtciRSRVYKK2VjaG8KK2JrIGV4cG9ydCAtdHBhdGNoIC1kdSAtaCAtciRSRVYgfCBkaWZmc3RhdAorZWNobzsgZWNobworYmsgZXhwb3J0IC10cGF0Y2ggLWR1IC1oIC1yJFJFVgorZWNobyAtZSAkU0VQCitiayBzZW5kIC13Z3ppcF91dSAtciRSRVYgLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9iejY0d3JhcCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYno2NHdyYXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmU3ODA4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYno2NHdyYXAKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisKKyMgYno2NHdyYXAgLSB0aGUgc2VuZGluZyBzaWRlIG9mIGEgYnppcDIgfCBiYXNlNjQgc3RyZWFtCisjIEFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQGNsdXN0ZXJmcy5jb20+ICAgSmFuIDIwMDIKKworCitQQVRIPSRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluOi91c3IvZnJlZXdhcmUvYmluCisKKyMgQSBwcm9ncmFtIHRvIGdlbmVyYXRlIGJhc2U2NCBlbmNvZGluZyBvbiBzdGRvdXQKK0JBU0U2NF9FTkNPREU9InV1ZW5jb2RlIC1tIC9kZXYvc3Rkb3V0IgorQkFTRTY0X0JFR0lOPQorQkFTRTY0X0VORD0KKworQlpJUD1OTworQkFTRTY0PU5PCisKKyMgVGVzdCBpZiB3ZSBoYXZlIHRoZSBiemlwIHByb2dyYW0gaW5zdGFsbGVkCitiemlwMiAtYyAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSAmJiBCWklQPVlFUworCisjIFRlc3QgaWYgdXVlbmNvZGUgY2FuIGhhbmRsZSB0aGUgLW0gKE1JTUUpIGVuY29kaW5nIG9wdGlvbgorJEJBU0U2NF9FTkNPREUgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSAmJiBCQVNFNjQ9WUVTCisKK2lmIFsgJEJBU0U2NCA9IE5PIF07IHRoZW4KKwlCQVNFNjRfRU5DT0RFPW1pbWVuY29kZQorCUJBU0U2NF9CRUdJTj0iYmVnaW4tYmFzZTY0IDY0NCAtIgorCUJBU0U2NF9FTkQ9Ij09PT0iCisKKwkkQkFTRTY0X0VOQ09ERSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxICYmIEJBU0U2ND1ZRVMKK2ZpCisKK2lmIFsgJEJaSVAgPSBOTyAtbyAkQkFTRTY0ID0gTk8gXTsgdGhlbgorCWVjaG8gIiQwOiBjYW4ndCB1c2UgYno2NCBlbmNvZGluZzogYnppcDI9JEJaSVAsICRCQVNFNjRfRU5DT0RFPSRCQVNFNjQiCisJZXhpdCAxCitmaQorCisjIFNhZGx5LCBtaW1lbmNvZGUgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgZ29vZCAiYmVnaW4iIGFuZCAiZW5kIiBtYXJrZXJzCisjIGxpa2UgdXVlbmNvZGUgZG9lcywgYW5kIGl0IGlzIHBpY2t5IGFib3V0IGdldHRpbmcgdGhlIHJpZ2h0IHN0YXJ0L2VuZCBvZgorIyB0aGUgYmFzZTY0IHN0cmVhbSwgc28gd2UgaGFuZGxlIHRoaXMgaW50ZXJuYWxseS4KK2VjaG8gIiRCQVNFNjRfQkVHSU4iCitiemlwMiAtOSB8ICRCQVNFNjRfRU5DT0RFCitlY2hvICIkQkFTRTY0X0VORCIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvY3Bjc2V0IGIvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9jcGNzZXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjhmYWNhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvY3Bjc2V0CkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorIworIyBQdXJwb3NlOiBDb3B5IGNoYW5nZXNldCBwYXRjaCBhbmQgZGVzY3JpcHRpb24gZnJvbSBvbmUKKyMJICAgcmVwb3NpdG9yeSB0byBhbm90aGVyLCB1bnJlbGF0ZWQgb25lLgorIworIyB1c2FnZTogIGNwY3NldCBbcmV2aXNpb25dIFtmcm9tLXJlcG9zaXRvcnldIFt0by1yZXBvc2l0b3J5XQorIworCitSRVY9JDEKK0ZST009JDIKK1RPPSQzCitUTVBGPS90bXAvY3Bjc2V0LiQkCisKK3JtIC1mICRUTVBGKgorCitDV0RfU0FWRT1gcHdkYAorY2QgJEZST00KK2JrIGNoYW5nZXMgLXIkUkVWCQkJfAlcCisJZ3JlcCAtdiAnXkNoYW5nZVNldCcJCXwJXAorCXNlZCAtZSAncy9eICAvL2cnID4gJFRNUEYubG9nCisKK1VTRVJIT1NUPWBiayBjaGFuZ2VzIC1yJFJFViB8IGdyZXAgJ15DaGFuZ2VTZXQnIHwgYXdrICd7cHJpbnQgJDR9J2AKK2V4cG9ydCBCS19VU0VSPWBlY2hvICRVU0VSSE9TVCB8IGF3ayAnLUZAJyAne3ByaW50ICQxfSdgCitleHBvcnQgQktfSE9TVD1gZWNobyAkVVNFUkhPU1QgfCBhd2sgJy1GQCcgJ3twcmludCAkMn0nYAorCitiayBleHBvcnQgLXRwYXRjaCAtaGR1IC1yJFJFViA+ICRUTVBGLnBhdGNoICYmIFwKK2NkICRDV0RfU0FWRSAmJiBcCitjZCAkVE8gJiYgXAorYmsgaW1wb3J0IC10cGF0Y2ggLUNGUiAteSJgY2F0ICRUTVBGLmxvZ2AiICRUTVBGLnBhdGNoIC4gJiYgXAorYmsgY29tbWl0IC15ImBjYXQgJFRNUEYubG9nYCIKKworcm0gLWYgJFRNUEYqCisKK2VjaG8gY2hhbmdlc2V0ICRSRVYgY29waWVkLgorZWNobyAiIgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXQtdG8tbGludXMgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXQtdG8tbGludXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI4YTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvY3NldC10by1saW51cwpAQCAtMCwwICsxLDQ5IEBACisjIS91c3IvYmluL3BlcmwgLXcKKwordXNlIHN0cmljdDsKKworbXkgKCRsaHMsICRyZXYsICR0bXAsICRyaHMsICRzKTsKK215IEBjc2V0X3RleHQgPSAoKTsKK215IEBwaXBlX3RleHQgPSAoKTsKK215ICRoYXZlX2NzZXQgPSAwOworCit3aGlsZSAoPD4pIHsKKwluZXh0IGlmIC9eLS0tLzsKKworCWlmICgoJGxocywgJHRtcCwgJHJocykgPSAoL14oQ2hhbmdlU2V0XEApKFteLF0rKSgsIC4qKSQvKSkgeworCQkmY3NldF9yZXYgaWYgKCRoYXZlX2NzZXQpOworCisJCSRyZXYgPSAkdG1wOworCQkkaGF2ZV9jc2V0ID0gMTsKKworCQlwdXNoKEBjc2V0X3RleHQsICRfKTsKKwl9CisKKwllbHNpZiAoJGhhdmVfY3NldCkgeworCQlwdXNoKEBjc2V0X3RleHQsICRfKTsKKwl9Cit9CismY3NldF9yZXYgaWYgKCRoYXZlX2NzZXQpOworZXhpdCgwKTsKKworCitzdWIgY3NldF9yZXYgeworCW15ICRlbXB0eV9jc2V0ID0gMDsKKworCW9wZW4gUElQRSwgImJrIGV4cG9ydCAtdHBhdGNoIC1oZHUgLXIgJHJldiB8IGRpZmZzdGF0IC1wMSAyPi9kZXYvbnVsbCB8IiBvciBkaWU7CisJd2hpbGUgKCRzID0gPFBJUEU+KSB7CisJCSRlbXB0eV9jc2V0ID0gMSBpZiAoJHMgPX4gLzAgZmlsZXMgY2hhbmdlZC8pOworCQlwdXNoKEBwaXBlX3RleHQsICRzKTsKKwl9CisJY2xvc2UoUElQRSk7CisKKwlpZiAoISAkZW1wdHlfY3NldCkgeworCQlwcmludCBAY3NldF90ZXh0OworCQlwcmludCBAcGlwZV90ZXh0OworCQlwcmludCAiXG5cbiI7CisJfQorCisJQHBpcGVfdGV4dCA9ICgpOworCUBjc2V0X3RleHQgPSAoKTsKK30KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9jc2V0cy10by1wYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9jc2V0cy10by1wYXRjaGVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyYjgxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXRzLXRvLXBhdGNoZXMKQEAgLTAsMCArMSw0NCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBzdHJpY3Q7CisKK215ICgkbGhzLCAkcmV2LCAkdG1wLCAkcmhzLCAkcyk7CitteSBAY3NldF90ZXh0ID0gKCk7CitteSBAcGlwZV90ZXh0ID0gKCk7CitteSAkaGF2ZV9jc2V0ID0gMDsKKword2hpbGUgKDw+KSB7CisJbmV4dCBpZiAvXi0tLS87CisKKwlpZiAoKCRsaHMsICR0bXAsICRyaHMpID0gKC9eKENoYW5nZVNldFxAKShbXixdKykoLCAuKikkLykpIHsKKwkJJmNzZXRfcmV2IGlmICgkaGF2ZV9jc2V0KTsKKworCQkkcmV2ID0gJHRtcDsKKwkJJGhhdmVfY3NldCA9IDE7CisKKwkJcHVzaChAY3NldF90ZXh0LCAkXyk7CisJfQorCisJZWxzaWYgKCRoYXZlX2NzZXQpIHsKKwkJcHVzaChAY3NldF90ZXh0LCAkXyk7CisJfQorfQorJmNzZXRfcmV2IGlmICgkaGF2ZV9jc2V0KTsKK2V4aXQoMCk7CisKKworc3ViIGNzZXRfcmV2IHsKKwlteSAkZW1wdHlfY3NldCA9IDA7CisKKwlzeXN0ZW0oImJrIGV4cG9ydCAtdHBhdGNoIC1kdSAtciAkcmV2ID4gL3RtcC9yZXYtJHJldi5wYXRjaCIpOworCisJaWYgKCEgJGVtcHR5X2NzZXQpIHsKKwkJcHJpbnQgQGNzZXRfdGV4dDsKKwkJcHJpbnQgQHBpcGVfdGV4dDsKKwkJcHJpbnQgIlxuXG4iOworCX0KKworCUBwaXBlX3RleHQgPSAoKTsKKwlAY3NldF90ZXh0ID0gKCk7Cit9CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvZ2NhcGF0Y2ggYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2djYXBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhZWIxN2RjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9nY2FwYXRjaApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorIworIyBQdXJwb3NlOiBHZW5lcmF0ZSBHTlUgZGlmZiBvZiBsb2NhbCBjaGFuZ2VzIHZlcnN1cyBjYW5vbmljYWwgdG9wLW9mLXRyZWUKKyMKKyMgVXNhZ2U6IGdjYXBhdGNoID4gZm9vLnBhdGNoCisjCisKK2JrIGV4cG9ydCAtdHBhdGNoIC1oZHUgLXJgYmsgcmVwb2djYSBiazovL2xpbnV4LmJrYml0cy5uZXQvbGludXgtMi41YCwrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL3VuYno2NHdyYXAgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL3VuYno2NHdyYXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGZjM2U3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvdW5iejY0d3JhcApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKworIyB1bmJ6NjR3cmFwIC0gdGhlIHJlY2VpdmluZyBzaWRlIG9mIGEgYnppcDIgfCBiYXNlNjQgc3RyZWFtCisjIEFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQGNsdXN0ZXJmcy5jb20+ICAgSmFuIDIwMDIKKworIyBTYWRseSwgbWltZW5jb2RlIGRvZXMgbm90IGFwcGVhciB0byBoYXZlIGdvb2QgImJlZ2luIiBhbmQgImVuZCIgbWFya2VycworIyBsaWtlIHV1ZW5jb2RlIGRvZXMsIGFuZCBpdCBpcyBwaWNreSBhYm91dCBnZXR0aW5nIHRoZSByaWdodCBzdGFydC9lbmQgb2YKKyMgdGhlIGJhc2U2NCBzdHJlYW0sIHNvIHdlIGhhbmRsZSB0aGlzIGV4cGxpY2l0bHkgaGVyZS4KKworUEFUSD0kUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2ZyZWV3YXJlL2JpbgorCitpZiBtaW1lbmNvZGUgLXUgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KKwlTSE9XPQorCXdoaWxlIHJlYWQgTElORTsgZG8KKwkJY2FzZSAkTElORSBpbgorCQliZWdpbi1iYXNlNjQqKSBTSE9XPVlFUyA7OworCQk9PT09KSBTSE9XPSA7OworCQkqKSBbICIkU0hPVyIgXSAmJiBlY2hvICIkTElORSIgOzsKKwkJZXNhYworCWRvbmUgfCBtaW1lbmNvZGUgLXUgfCBidW56aXAyCisJZXhpdCAkPworZWxzZQorCWNhdCAtIHwgdXVkZWNvZGUgLW8gL2Rldi9zdGRvdXQgfCBidW56aXAyCisJZXhpdCAkPworZmkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQlVHLUhVTlRJTkcgYi9Eb2N1bWVudGF0aW9uL0JVRy1IVU5USU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjkyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JVRy1IVU5USU5HCkBAIC0wLDAgKzEsOTIgQEAKK1tTYXQgTWFyICAyIDEwOjMyOjMzIFBTVCAxOTk2IEtFUk5FTF9CVUctSE9XVE8gbG1Ac2dpLmNvbSAoTGFycnkgTWNWb3kpXQorCitUaGlzIGlzIGhvdyB0byB0cmFjayBkb3duIGEgYnVnIGlmIHlvdSBrbm93IG5vdGhpbmcgYWJvdXQga2VybmVsIGhhY2tpbmcuICAKK0l0J3MgYSBicnV0ZSBmb3JjZSBhcHByb2FjaCBidXQgaXQgd29ya3MgcHJldHR5IHdlbGwuCisKK1lvdSBuZWVkOgorCisgICAgICAgIC4gQSByZXByb2R1Y2libGUgYnVnIC0gaXQgaGFzIHRvIGhhcHBlbiBwcmVkaWN0YWJseSAoc29ycnkpCisgICAgICAgIC4gQWxsIHRoZSBrZXJuZWwgdGFyIGZpbGVzIGZyb20gYSByZXZpc2lvbiB0aGF0IHdvcmtlZCB0byB0aGUKKyAgICAgICAgICByZXZpc2lvbiB0aGF0IGRvZXNuJ3QKKworWW91IHdpbGwgdGhlbiBkbzoKKworICAgICAgICAuIFJlYnVpbGQgYSByZXZpc2lvbiB0aGF0IHlvdSBiZWxpZXZlIHdvcmtzLCBpbnN0YWxsLCBhbmQgdmVyaWZ5IHRoYXQuCisgICAgICAgIC4gRG8gYSBiaW5hcnkgc2VhcmNoIG92ZXIgdGhlIGtlcm5lbHMgdG8gZmlndXJlIG91dCB3aGljaCBvbmUKKyAgICAgICAgICBpbnRyb2R1Y2VkIHRoZSBidWcuICBJLmUuLCBzdXBwb3NlIDEuMy4yOCBkaWRuJ3QgaGF2ZSB0aGUgYnVnLCBidXQgCisgICAgICAgICAgeW91IGtub3cgdGhhdCAxLjMuNjkgZG9lcy4gIFBpY2sgYSBrZXJuZWwgaW4gdGhlIG1pZGRsZSBhbmQgYnVpbGQKKyAgICAgICAgICB0aGF0LCBsaWtlIDEuMy41MC4gIEJ1aWxkICYgdGVzdDsgaWYgaXQgd29ya3MsIHBpY2sgdGhlIG1pZCBwb2ludAorICAgICAgICAgIGJldHdlZW4gLjUwIGFuZCAuNjksIGVsc2UgdGhlIG1pZCBwb2ludCBiZXR3ZWVuIC4yOCBhbmQgLjUwLgorICAgICAgICAuIFlvdSdsbCBuYXJyb3cgaXQgZG93biB0byB0aGUga2VybmVsIHRoYXQgaW50cm9kdWNlZCB0aGUgYnVnLiAgWW91CisgICAgICAgICAgY2FuIHByb2JhYmx5IGRvIGJldHRlciB0aGFuIHRoaXMgYnV0IGl0IGdldHMgdHJpY2t5LiAgCisKKyAgICAgICAgLiBOYXJyb3cgaXQgZG93biB0byBhIHN1YmRpcmVjdG9yeQorCisgICAgICAgICAgLSBDb3B5IGtlcm5lbCB0aGF0IHdvcmtzIGludG8gInRlc3QiLiAgTGV0J3Mgc2F5IHRoYXQgMy42MiB3b3JrcywKKyAgICAgICAgICAgIGJ1dCAzLjYzIGRvZXNuJ3QuICBTbyB5b3UgZGlmZiAtciB0aG9zZSB0d28ga2VybmVscyBhbmQgY29tZQorICAgICAgICAgICAgdXAgd2l0aCBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCBjaGFuZ2VkLiAgRm9yIGVhY2ggb2YgdGhvc2UKKyAgICAgICAgICAgIGRpcmVjdG9yaWVzOgorCisgICAgICAgICAgICAgICAgQ29weSB0aGUgbm9uLXdvcmtpbmcgZGlyZWN0b3J5IG5leHQgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgYXMgImRpci42MyIuICAKKyAgICAgICAgICAgICAgICBPbmUgZGlyZWN0b3J5IGF0IHRpbWUsIHRyeSBtb3ZpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvCisgICAgICAgICAgICAgICAgImRpci42MiIgYW5kIG12IGRpci42MyBkaXIidGltZSwgdHJ5IAorCisgICAgICAgICAgICAgICAgICAgICAgICBtdiBkaXIgZGlyLjYyCisgICAgICAgICAgICAgICAgICAgICAgICBtdiBkaXIuNjMgZGlyCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5kIGRpciAtbmFtZSAnKi5bb2FdJyAtcHJpbnQgfCB4YXJncyBybSAtZgorCisgICAgICAgICAgICAgICAgQW5kIHRoZW4gcmVidWlsZCBhbmQgcmV0ZXN0LiAgQXNzdW1pbmcgdGhhdCBhbGwgcmVsYXRlZAorICAgICAgICAgICAgICAgIGNoYW5nZXMgd2VyZSBjb250YWluZWQgaW4gdGhlIHN1YiBkaXJlY3RvcnksIHRoaXMgc2hvdWxkIAorICAgICAgICAgICAgICAgIGlzb2xhdGUgdGhlIGNoYW5nZSB0byBhIGRpcmVjdG9yeS4gIAorCisgICAgICAgICAgICAgICAgUHJvYmxlbXM6IGNoYW5nZXMgaW4gaGVhZGVyIGZpbGVzIG1heSBoYXZlIG9jY3VycmVkOyBJJ3ZlCisgICAgICAgICAgICAgICAgZm91bmQgaW4gbXkgY2FzZSB0aGF0IHRoZXkgd2VyZSBzZWxmIGV4cGxhbmF0b3J5IC0geW91IG1heSAKKyAgICAgICAgICAgICAgICBvciBtYXkgbm90IHdhbnQgdG8gZ2l2ZSB1cCB3aGVuIHRoYXQgaGFwcGVucy4KKworICAgICAgICAuIE5hcnJvdyBpdCBkb3duIHRvIGEgZmlsZQorCisgICAgICAgICAgLSBZb3UgY2FuIGFwcGx5IHRoZSBzYW1lIHRlY2huaXF1ZSB0byBlYWNoIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwKKyAgICAgICAgICAgIGhvcGluZyB0aGF0IHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZSBhcmUgc2VsZiBjb250YWluZWQuICAKKyAgICAgICAgICAgIAorICAgICAgICAuIE5hcnJvdyBpdCBkb3duIHRvIGEgcm91dGluZQorCisgICAgICAgICAgLSBZb3UgY2FuIHRha2UgdGhlIG9sZCBmaWxlIGFuZCB0aGUgbmV3IGZpbGUgYW5kIG1hbnVhbGx5IGNyZWF0ZQorICAgICAgICAgICAgYSBtZXJnZWQgZmlsZSB0aGF0IGhhcworCisgICAgICAgICAgICAgICAgI2lmZGVmIFZFUjYyCisgICAgICAgICAgICAgICAgcm91dGluZSgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgcm91dGluZSgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBBbmQgdGhlbiB3YWxrIHRocm91Z2ggdGhhdCBmaWxlLCBvbmUgcm91dGluZSBhdCBhIHRpbWUgYW5kCisgICAgICAgICAgICBwcmVmaXggaXQgd2l0aAorCisgICAgICAgICAgICAgICAgI2RlZmluZSBWRVI2MgorICAgICAgICAgICAgICAgIC8qIGJvdGggcm91dGluZXMgaGVyZSAqLworICAgICAgICAgICAgICAgICN1bmRlZiBWRVI2MgorCisgICAgICAgICAgICBUaGVuIHJlY29tcGlsZSwgcmV0ZXN0LCBtb3ZlIHRoZSBpZmRlZnMgdW50aWwgeW91IGZpbmQgdGhlIG9uZQorICAgICAgICAgICAgdGhhdCBtYWtlcyB0aGUgZGlmZmVyZW5jZS4KKworRmluYWxseSwgeW91IHRha2UgYWxsIHRoZSBpbmZvIHRoYXQgeW91IGhhdmUsIGtlcm5lbCByZXZpc2lvbnMsIGJ1ZworZGVzY3JpcHRpb24sIHRoZSBleHRlbnQgdG8gd2hpY2ggeW91IGhhdmUgbmFycm93ZWQgaXQgZG93biwgYW5kIHBhc3MgCit0aGF0IG9mZiB0byB3aG9tZXZlciB5b3UgYmVsaWV2ZSBpcyB0aGUgbWFpbnRhaW5lciBvZiB0aGF0IHNlY3Rpb24uCitBIHBvc3QgdG8gbGludXguZGV2Lmtlcm5lbCBpc24ndCBzdWNoIGEgYmFkIGlkZWEgaWYgeW91J3ZlIGRvbmUgc29tZQord29yayB0byBuYXJyb3cgaXQgZG93bi4KKworSWYgeW91IGdldCBpdCBkb3duIHRvIGEgcm91dGluZSwgeW91J2xsIHByb2JhYmx5IGdldCBhIGZpeCBpbiAyNCBob3Vycy4KKworTXkgYXBvbG9naWVzIHRvIExpbnVzIGFuZCB0aGUgb3RoZXIga2VybmVsIGhhY2tlcnMgZm9yIGRlc2NyaWJpbmcgdGhpcworYnJ1dGUgZm9yY2UgYXBwcm9hY2gsIGl0J3MgaGFyZGx5IHdoYXQgYSBrZXJuZWwgaGFja2VyIHdvdWxkIGRvLiAgSG93ZXZlciwKK2l0IGRvZXMgd29yayBhbmQgaXQgbGV0cyBub24taGFja2VycyBoZWxwIGZpeCBidWdzLiAgQW5kIGl0IGlzIGNvb2wKK2JlY2F1c2UgTGludXggc25hcHNob3RzIHdpbGwgbGV0IHlvdSBkbyB0aGlzIC0gc29tZXRoaW5nIHRoYXQgeW91IGNhbid0CitkbyB3aXRoIHZlbmRvciBzdXBwbGllZCByZWxlYXNlcy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzIGIvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYTZhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKQEAgLTAsMCArMSw0MTAgQEAKK0ludHJvCis9PT09PQorCitUaGlzIGRvY3VtZW50IGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSBsaXN0IG9mIHRoZSBtaW5pbXVtIGxldmVscyBvZgorc29mdHdhcmUgbmVjZXNzYXJ5IHRvIHJ1biB0aGUgMi42IGtlcm5lbHMsIGFzIHdlbGwgYXMgcHJvdmlkZSBicmllZgoraW5zdHJ1Y3Rpb25zIHJlZ2FyZGluZyBhbnkgb3RoZXIgIkdvdGNoYXMiIHVzZXJzIG1heSBlbmNvdW50ZXIgd2hlbgordHJ5aW5nIGxpZmUgb24gdGhlIEJsZWVkaW5nIEVkZ2UuICBJZiB1cGdyYWRpbmcgZnJvbSBhIHByZS0yLjQueAora2VybmVsLCBwbGVhc2UgY29uc3VsdCB0aGUgQ2hhbmdlcyBmaWxlIGluY2x1ZGVkIHdpdGggMi40Lngga2VybmVscyBmb3IKK2FkZGl0aW9uYWwgaW5mb3JtYXRpb247IG1vc3Qgb2YgdGhhdCBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSByZXBlYXRlZAoraGVyZS4gIEJhc2ljYWxseSwgdGhpcyBkb2N1bWVudCBhc3N1bWVzIHRoYXQgeW91ciBzeXN0ZW0gaXMgYWxyZWFkeQorZnVuY3Rpb25hbCBhbmQgcnVubmluZyBhdCBsZWFzdCAyLjQueCBrZXJuZWxzLgorCitUaGlzIGRvY3VtZW50IGlzIG9yaWdpbmFsbHkgYmFzZWQgb24gbXkgIkNoYW5nZXMiIGZpbGUgZm9yIDIuMC54IGtlcm5lbHMKK2FuZCB0aGVyZWZvcmUgb3dlcyBjcmVkaXQgdG8gdGhlIHNhbWUgcGVvcGxlIGFzIHRoYXQgZmlsZSAoSmFyZWQgTWF1Y2gsCitBeGVsIEJvbGR0LCBBbGVzc2FuZHJvIFNpZ2FsYSwgYW5kIGNvdW50bGVzcyBvdGhlciB1c2VycyBhbGwgb3ZlciB0aGUKKyduZXQpLgorCitUaGUgbGF0ZXN0IHJldmlzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIGluIHZhcmlvdXMgZm9ybWF0cywgY2FuIGFsd2F5cworYmUgZm91bmQgYXQgPGh0dHA6Ly9jeWJlcmJ1enouZ2F0ZWNoLmVkdS9rYWJvb20vbGludXgvQ2hhbmdlcy0yLjQvPi4KKworRmVlbCBmcmVlIHRvIHRyYW5zbGF0ZSB0aGlzIGRvY3VtZW50LiAgSWYgeW91IGRvIHNvLCBwbGVhc2Ugc2VuZCBtZSBhCitVUkwgdG8geW91ciB0cmFuc2xhdGlvbiBmb3IgaW5jbHVzaW9uIGluIGZ1dHVyZSByZXZpc2lvbnMgb2YgdGhpcworZG9jdW1lbnQuCisKK1Ntb3RyaXRlIGZpbGUgPGh0dHA6Ly9vYmxvbS5ybmMucnUvbGludXgva2VybmVsL0NoYW5nZXMucnU+LCB5YXZseWF1c2hpc3lhCitydXNza2ltIHBlcmV2b2RvbSBkYW5ub2dvIGRvY3VtZW50YS4KKworVmlzaXRlIDxodHRwOi8vd3d3Mi5hZGkudWFtLmVzL35lbmRlci90ZWNuaWNvLz4gcGFyYSBvYnRlbmVyIGxhIHRyYWR1Y2Np824KK2FsIGVzcGHxb2wgZGUgZXN0ZSBkb2N1bWVudG8gZW4gdmFyaW9zIGZvcm1hdG9zLgorCitFaW5lIGRldXRzY2hlIFZlcnNpb24gZGllc2VyIERhdGVpIGZpbmRlbiBTaWUgdW50ZXIKKzxodHRwOi8vd3d3LnN0ZWZhbi13aW50ZXIuZGUvQ2hhbmdlcy0yLjQuMC50eHQ+LgorCitMYXN0IHVwZGF0ZWQ6IE9jdG9iZXIgMjl0aCwgMjAwMgorCitDaHJpcyBSaWNrZXIgKGthYm9vbUBnYXRlY2guZWR1IG9yIGNocmlzLnJpY2tlckBnZW5ldGljcy51dGFoLmVkdSkuCisKK0N1cnJlbnQgTWluaW1hbCBSZXF1aXJlbWVudHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBncmFkZSB0byBhdCAqbGVhc3QqIHRoZXNlIHNvZnR3YXJlIHJldmlzaW9ucyBiZWZvcmUgdGhpbmtpbmcgeW91J3ZlCitlbmNvdW50ZXJlZCBhIGJ1ZyEgIElmIHlvdSdyZSB1bnN1cmUgd2hhdCB2ZXJzaW9uIHlvdSdyZSBjdXJyZW50bHkKK3J1bm5pbmcsIHRoZSBzdWdnZXN0ZWQgY29tbWFuZCBzaG91bGQgdGVsbCB5b3UuCisKK0FnYWluLCBrZWVwIGluIG1pbmQgdGhhdCB0aGlzIGxpc3QgYXNzdW1lcyB5b3UgYXJlIGFscmVhZHkKK2Z1bmN0aW9uYWxseSBydW5uaW5nIGEgTGludXggMi40IGtlcm5lbC4gIEFsc28sIG5vdCBhbGwgdG9vbHMgYXJlCituZWNlc3Nhcnkgb24gYWxsIHN5c3RlbXM7IG9idmlvdXNseSwgaWYgeW91IGRvbid0IGhhdmUgYW55IFBDTUNJQSAoUEMKK0NhcmQpIGhhcmR3YXJlLCBmb3IgZXhhbXBsZSwgeW91IHByb2JhYmx5IG5lZWRuJ3QgY29uY2VybiB5b3Vyc2VsZgord2l0aCBwY21jaWEtY3MuCisKK28gIEdudSBDICAgICAgICAgICAgICAgICAgMi45NS4zICAgICAgICAgICAgICAgICAgIyBnY2MgLS12ZXJzaW9uCitvICBHbnUgbWFrZSAgICAgICAgICAgICAgIDMuNzkuMSAgICAgICAgICAgICAgICAgICMgbWFrZSAtLXZlcnNpb24KK28gIGJpbnV0aWxzICAgICAgICAgICAgICAgMi4xMiAgICAgICAgICAgICAgICAgICAgIyBsZCAtdgorbyAgdXRpbC1saW51eCAgICAgICAgICAgICAyLjEwbyAgICAgICAgICAgICAgICAgICAjIGZkZm9ybWF0IC0tdmVyc2lvbgorbyAgbW9kdWxlLWluaXQtdG9vbHMgICAgICAwLjkuMTAgICAgICAgICAgICAgICAgICAjIGRlcG1vZCAtVgorbyAgZTJmc3Byb2dzICAgICAgICAgICAgICAxLjI5ICAgICAgICAgICAgICAgICAgICAjIHR1bmUyZnMKK28gIGpmc3V0aWxzICAgICAgICAgICAgICAgMS4xLjMgICAgICAgICAgICAgICAgICAgIyBmc2NrLmpmcyAtVgorbyAgcmVpc2VyZnNwcm9ncyAgICAgICAgICAzLjYuMyAgICAgICAgICAgICAgICAgICAjIHJlaXNlcmZzY2sgLVYgMj4mMXxncmVwIHJlaXNlcmZzcHJvZ3MKK28gIHhmc3Byb2dzICAgICAgICAgICAgICAgMi42LjAgICAgICAgICAgICAgICAgICAgIyB4ZnNfZGIgLVYKK28gIHBjbWNpYS1jcyAgICAgICAgICAgICAgMy4xLjIxICAgICAgICAgICAgICAgICAgIyBjYXJkbWdyIC1WCitvICBxdW90YS10b29scyAgICAgICAgICAgIDMuMDkgICAgICAgICAgICAgICAgICAgICMgcXVvdGEgLVYKK28gIFBQUCAgICAgICAgICAgICAgICAgICAgMi40LjAgICAgICAgICAgICAgICAgICAgIyBwcHBkIC0tdmVyc2lvbgorbyAgaXNkbjRrLXV0aWxzICAgICAgICAgICAzLjFwcmUxICAgICAgICAgICAgICAgICAjIGlzZG5jdHJsIDI+JjF8Z3JlcCB2ZXJzaW9uCitvICBuZnMtdXRpbHMgICAgICAgICAgICAgIDEuMC41ICAgICAgICAgICAgICAgICAgICMgc2hvd21vdW50IC0tdmVyc2lvbgorbyAgcHJvY3BzICAgICAgICAgICAgICAgICAzLjIuMCAgICAgICAgICAgICAgICAgICAjIHBzIC0tdmVyc2lvbgorbyAgb3Byb2ZpbGUgICAgICAgICAgICAgICAwLjUuMyAgICAgICAgICAgICAgICAgICAjIG9wcm9maWxlZCAtLXZlcnNpb24KKworS2VybmVsIGNvbXBpbGF0aW9uCis9PT09PT09PT09PT09PT09PT0KKworR0NDCistLS0KKworVGhlIGdjYyB2ZXJzaW9uIHJlcXVpcmVtZW50cyBtYXkgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgQ1BVIGluIHlvdXIKK2NvbXB1dGVyLiBUaGUgbmV4dCBwYXJhZ3JhcGggYXBwbGllcyB0byB1c2VycyBvZiB4ODYgQ1BVcywgYnV0IG5vdAorbmVjZXNzYXJpbHkgdG8gdXNlcnMgb2Ygb3RoZXIgQ1BVcy4gVXNlcnMgb2Ygb3RoZXIgQ1BVcyBzaG91bGQgb2J0YWluCitpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBnY2MgdmVyc2lvbiByZXF1aXJlbWVudHMgZnJvbSBhbm90aGVyIHNvdXJjZS4KKworVGhlIHJlY29tbWVuZGVkIGNvbXBpbGVyIGZvciB0aGUga2VybmVsIGlzIGdjYyAyLjk1LnggKHggPj0gMyksIGFuZCBpdAorc2hvdWxkIGJlIHVzZWQgd2hlbiB5b3UgbmVlZCBhYnNvbHV0ZSBzdGFiaWxpdHkuIFlvdSBtYXkgdXNlIGdjYyAzLjAueAoraW5zdGVhZCBpZiB5b3Ugd2lzaCwgYWx0aG91Z2ggaXQgbWF5IGNhdXNlIHByb2JsZW1zLiBMYXRlciB2ZXJzaW9ucyBvZiBnY2MgCitoYXZlIG5vdCByZWNlaXZlZCBtdWNoIHRlc3RpbmcgZm9yIExpbnV4IGtlcm5lbCBjb21waWxhdGlvbiwgYW5kIHRoZXJlIGFyZSAKK2FsbW9zdCBjZXJ0YWlubHkgYnVncyAobWFpbmx5LCBidXQgbm90IGV4Y2x1c2l2ZWx5LCBpbiB0aGUga2VybmVsKSB0aGF0Cit3aWxsIG5lZWQgdG8gYmUgZml4ZWQgaW4gb3JkZXIgdG8gdXNlIHRoZXNlIGNvbXBpbGVycy4gSW4gYW55IGNhc2UsIHVzaW5nCitwZ2NjIGluc3RlYWQgb2YgcGxhaW4gZ2NjIGlzIGp1c3QgYXNraW5nIGZvciB0cm91YmxlLgorCitUaGUgUmVkIEhhdCBnY2MgMi45NiBjb21waWxlciBzdWJ0cmVlIGNhbiBhbHNvIGJlIHVzZWQgdG8gYnVpbGQgdGhpcyB0cmVlLgorWW91IHNob3VsZCBlbnN1cmUgeW91IHVzZSBnY2MtMi45Ni03NCBvciBsYXRlci4gZ2NjLTIuOTYtNTQgd2lsbCBub3QgYnVpbGQKK3RoZSBrZXJuZWwgY29ycmVjdGx5LgorCitJbiBhZGRpdGlvbiwgcGxlYXNlIHBheSBhdHRlbnRpb24gdG8gY29tcGlsZXIgb3B0aW1pemF0aW9uLiAgQW55dGhpbmcKK2dyZWF0ZXIgdGhhbiAtTzIgbWF5IG5vdCBiZSB3aXNlLiAgU2ltaWxhcmx5LCBpZiB5b3UgY2hvb3NlIHRvIHVzZSBnY2MtMi45NS54CitvciBkZXJpdmF0aXZlcywgYmUgc3VyZSBub3QgdG8gdXNlIC1mc3RyaWN0LWFsaWFzaW5nICh3aGljaCwgZGVwZW5kaW5nIG9uCit5b3VyIHZlcnNpb24gb2YgZ2NjIDIuOTUueCwgbWF5IG5lY2Vzc2l0YXRlIHVzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nKS4KKworTWFrZQorLS0tLQorCitZb3Ugd2lsbCBuZWVkIEdudSBtYWtlIDMuNzkuMSBvciBsYXRlciB0byBidWlsZCB0aGUga2VybmVsLgorCitCaW51dGlscworLS0tLS0tLS0KKworTGludXggb24gSUEtMzIgaGFzIHJlY2VudGx5IHN3aXRjaGVkIGZyb20gdXNpbmcgYXM4NiB0byB1c2luZyBnYXMgZm9yCithc3NlbWJsaW5nIHRoZSAxNi1iaXQgYm9vdCBjb2RlLCByZW1vdmluZyB0aGUgbmVlZCBmb3IgYXM4NiB0byBjb21waWxlCit5b3VyIGtlcm5lbC4gIFRoaXMgY2hhbmdlIGRvZXMsIGhvd2V2ZXIsIG1lYW4gdGhhdCB5b3UgbmVlZCBhIHJlY2VudAorcmVsZWFzZSBvZiBiaW51dGlscy4KKworU3lzdGVtIHV0aWxpdGllcworPT09PT09PT09PT09PT09PQorCitBcmNoaXRlY3R1cmFsIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZXZGUyBoYXMgYmVlbiBvYnNvbGV0ZWQgaW4gZmF2b3VyIG9mIHVkZXYKKyhodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnLykKKworMzItYml0IFVJRCBzdXBwb3J0IGlzIG5vdyBpbiBwbGFjZS4gIEhhdmUgZnVuIQorCitMaW51eCBkb2N1bWVudGF0aW9uIGZvciBmdW5jdGlvbnMgaXMgdHJhbnNpdGlvbmluZyB0byBpbmxpbmUKK2RvY3VtZW50YXRpb24gdmlhIHNwZWNpYWxseS1mb3JtYXR0ZWQgY29tbWVudHMgbmVhciB0aGVpcgorZGVmaW5pdGlvbnMgaW4gdGhlIHNvdXJjZS4gIFRoZXNlIGNvbW1lbnRzIGNhbiBiZSBjb21iaW5lZCB3aXRoIHRoZQorU0dNTCB0ZW1wbGF0ZXMgaW4gdGhlIERvY3VtZW50YXRpb24vRG9jQm9vayBkaXJlY3RvcnkgdG8gbWFrZSBEb2NCb29rCitmaWxlcywgd2hpY2ggY2FuIHRoZW4gYmUgY29udmVydGVkIGJ5IERvY0Jvb2sgc3R5bGVzaGVldHMgdG8gUG9zdFNjcmlwdCwKK0hUTUwsIFBERiBmaWxlcywgYW5kIHNldmVyYWwgb3RoZXIgZm9ybWF0cy4gIEluIG9yZGVyIHRvIGNvbnZlcnQgZnJvbQorRG9jQm9vayBmb3JtYXQgdG8gYSBmb3JtYXQgb2YgeW91ciBjaG9pY2UsIHlvdSdsbCBuZWVkIHRvIGluc3RhbGwgSmFkZSBhcword2VsbCBhcyB0aGUgZGVzaXJlZCBEb2NCb29rIHN0eWxlc2hlZXRzLgorCitVdGlsLWxpbnV4CistLS0tLS0tLS0tCisKK05ldyB2ZXJzaW9ucyBvZiB1dGlsLWxpbnV4IHByb3ZpZGUgKmZkaXNrIHN1cHBvcnQgZm9yIGxhcmdlciBkaXNrcywKK3N1cHBvcnQgbmV3IG9wdGlvbnMgdG8gbW91bnQsIHJlY29nbml6ZSBtb3JlIHN1cHBvcnRlZCBwYXJ0aXRpb24KK3R5cGVzLCBoYXZlIGEgZmRmb3JtYXQgd2hpY2ggd29ya3Mgd2l0aCAyLjQga2VybmVscywgYW5kIHNpbWlsYXIgZ29vZGllcy4KK1lvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVwZ3JhZGUuCisKK0tzeW1vb3BzCistLS0tLS0tLQorCitJZiB0aGUgdW50aGlua2FibGUgaGFwcGVucyBhbmQgeW91ciBrZXJuZWwgb29wc2VzLCB5b3UnbGwgbmVlZCBhIDIuNAordmVyc2lvbiBvZiBrc3ltb29wcyB0byBkZWNvZGUgdGhlIHJlcG9ydDsgc2VlIFJFUE9SVElORy1CVUdTIGluIHRoZQorcm9vdCBvZiB0aGUgTGludXggc291cmNlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitNb2R1bGUtSW5pdC1Ub29scworLS0tLS0tLS0tLS0tLS0tLS0KKworQSBuZXcgbW9kdWxlIGxvYWRlciBpcyBub3cgaW4gdGhlIGtlcm5lbCB0aGF0IHJlcXVpcmVzIG1vZHVsZS1pbml0LXRvb2xzCit0byB1c2UuICBJdCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdGhlIDIuNC54IHNlcmllcyBrZXJuZWxzLgorCitNa2luaXRyZAorLS0tLS0tLS0KKworVGhlc2UgY2hhbmdlcyB0byB0aGUgL2xpYi9tb2R1bGVzIGZpbGUgdHJlZSBsYXlvdXQgYWxzbyByZXF1aXJlIHRoYXQKK21raW5pdHJkIGJlIHVwZ3JhZGVkLgorCitFMmZzcHJvZ3MKKy0tLS0tLS0tLQorCitUaGUgbGF0ZXN0IHZlcnNpb24gb2YgZTJmc3Byb2dzIGZpeGVzIHNldmVyYWwgYnVncyBpbiBmc2NrIGFuZAorZGVidWdmcy4gIE9idmlvdXNseSwgaXQncyBhIGdvb2QgaWRlYSB0byB1cGdyYWRlLgorCitKRlN1dGlscworLS0tLS0tLS0KKworVGhlIGpmc3V0aWxzIHBhY2thZ2UgY29udGFpbnMgdGhlIHV0aWxpdGllcyBmb3IgdGhlIGZpbGUgc3lzdGVtLgorVGhlIGZvbGxvd2luZyB1dGlsaXRpZXMgYXJlIGF2YWlsYWJsZToKK28gZnNjay5qZnMgLSBpbml0aWF0ZSByZXBsYXkgb2YgdGhlIHRyYW5zYWN0aW9uIGxvZywgYW5kIGNoZWNrCisgIGFuZCByZXBhaXIgYSBKRlMgZm9ybWF0dGVkIHBhcnRpdGlvbi4KK28gbWtmcy5qZnMgLSBjcmVhdGUgYSBKRlMgZm9ybWF0dGVkIHBhcnRpdGlvbi4KK28gb3RoZXIgZmlsZSBzeXN0ZW0gdXRpbGl0aWVzIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiB0aGlzIHBhY2thZ2UuCisKK1JlaXNlcmZzcHJvZ3MKKy0tLS0tLS0tLS0tLS0KKworVGhlIHJlaXNlcmZzcHJvZ3MgcGFja2FnZSBzaG91bGQgYmUgdXNlZCBmb3IgcmVpc2VyZnMtMy42LngKKyhMaW51eCBrZXJuZWxzIDIuNC54KS4gSXQgaXMgYSBjb21iaW5lZCBwYWNrYWdlIGFuZCBjb250YWlucyB3b3JraW5nCit2ZXJzaW9ucyBvZiBta3JlaXNlcmZzLCByZXNpemVfcmVpc2VyZnMsIGRlYnVncmVpc2VyZnMgYW5kCityZWlzZXJmc2NrLiBUaGVzZSB1dGlscyB3b3JrIG9uIGJvdGggaTM4NiBhbmQgYWxwaGEgcGxhdGZvcm1zLgorCitYZnNwcm9ncworLS0tLS0tLS0KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHhmc3Byb2dzIGNvbnRhaW5zIG1rZnMueGZzLCB4ZnNfZGIsIGFuZCB0aGUKK3hmc19yZXBhaXIgdXRpbGl0aWVzLCBhbW9uZyBvdGhlcnMsIGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uICBJdCBpcworYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IGFuZCBhbnkgdmVyc2lvbiBmcm9tIDIuMC4wIG9ud2FyZCBzaG91bGQKK3dvcmsgY29ycmVjdGx5IHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZSBYRlMga2VybmVsIGNvZGUgKDIuNi4wIG9yCitsYXRlciBpcyByZWNvbW1lbmRlZCwgZHVlIHRvIHNvbWUgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzKS4KKworCitQY21jaWEtY3MKKy0tLS0tLS0tLQorCitQQ01DSUEgKFBDIENhcmQpIHN1cHBvcnQgaXMgbm93IHBhcnRpYWxseSBpbXBsZW1lbnRlZCBpbiB0aGUgbWFpbgora2VybmVsIHNvdXJjZS4gIFBheSBhdHRlbnRpb24gd2hlbiB5b3UgcmVjb21waWxlIHlvdXIga2VybmVsIDstKS4KK0Fsc28sIGJlIHN1cmUgdG8gdXBncmFkZSB0byB0aGUgbGF0ZXN0IHBjbWNpYS1jcyByZWxlYXNlLgorCitRdW90YS10b29scworLS0tLS0tLS0tLS0KKworU3VwcG9ydCBmb3IgMzIgYml0IHVpZCdzIGFuZCBnaWQncyBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UKK3RoZSBuZXdlciB2ZXJzaW9uIDIgcXVvdGEgZm9ybWF0LiAgUXVvdGEtdG9vbHMgdmVyc2lvbiAzLjA3IGFuZAorbmV3ZXIgaGFzIHRoaXMgc3VwcG9ydC4gIFVzZSB0aGUgcmVjb21tZW5kZWQgdmVyc2lvbiBvciBuZXdlcgorZnJvbSB0aGUgdGFibGUgYWJvdmUuCisKK0ludGVsIElBMzIgbWljcm9jb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGRyaXZlciBoYXMgYmVlbiBhZGRlZCB0byBhbGxvdyB1cGRhdGluZyBvZiBJbnRlbCBJQTMyIG1pY3JvY29kZSwKK2FjY2Vzc2libGUgYXMgYm90aCBhIGRldmZzIHJlZ3VsYXIgZmlsZSBhbmQgYXMgYSBub3JtYWwgKG1pc2MpCitjaGFyYWN0ZXIgZGV2aWNlLiAgSWYgeW91IGFyZSBub3QgdXNpbmcgZGV2ZnMgeW91IG1heSBuZWVkIHRvOgorCitta2RpciAvZGV2L2NwdQorbWtub2QgL2Rldi9jcHUvbWljcm9jb2RlIGMgMTAgMTg0CitjaG1vZCAwNjQ0IC9kZXYvY3B1L21pY3JvY29kZQorCithcyByb290IGJlZm9yZSB5b3UgY2FuIHVzZSB0aGlzLiAgWW91J2xsIHByb2JhYmx5IGFsc28gd2FudCB0bworZ2V0IHRoZSB1c2VyLXNwYWNlIG1pY3JvY29kZV9jdGwgdXRpbGl0eSB0byB1c2Ugd2l0aCB0aGlzLgorCitQb3dlcnR3ZWFrCistLS0tLS0tLS0tCisKK0lmIHlvdSBhcmUgcnVubmluZyB2MC4xLjE3IG9yIGVhcmxpZXIsIHlvdSBzaG91bGQgdXBncmFkZSB0bwordmVyc2lvbiB2MC45OS4wIG9yIGhpZ2hlci4gUnVubmluZyBvbGQgdmVyc2lvbnMgbWF5IGNhdXNlIHByb2JsZW1zCit3aXRoIHByb2dyYW1zIHVzaW5nIHNoYXJlZCBtZW1vcnkuCisKK3VkZXYKKy0tLS0KK3VkZXYgaXMgYSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gZm9yIHBvcHVsYXRpbmcgL2RldiBkeW5hbWljYWxseSB3aXRoCitvbmx5IGVudHJpZXMgZm9yIGRldmljZXMgYWN0dWFsbHkgcHJlc2VudC4gdWRldiByZXBsYWNlcyBkZXZmcy4KKworTmV0d29ya2luZworPT09PT09PT09PQorCitHZW5lcmFsIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgaGF2ZSBhZHZhbmNlZCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gbmVlZHMsIHlvdSBzaG91bGQgcHJvYmFibHkKK2NvbnNpZGVyIHVzaW5nIHRoZSBuZXR3b3JrIHRvb2xzIGZyb20gaXAtcm91dGUyLgorCitQYWNrZXQgRmlsdGVyIC8gTkFUCistLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcGFja2V0IGZpbHRlcmluZyBhbmQgTkFUIGNvZGUgdXNlcyB0aGUgc2FtZSB0b29scyBsaWtlIHRoZSBwcmV2aW91cyAyLjQueAora2VybmVsIHNlcmllcyAoaXB0YWJsZXMpLiAgSXQgc3RpbGwgaW5jbHVkZXMgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgbW9kdWxlcworZm9yIDIuMi54LXN0eWxlIGlwY2hhaW5zIGFuZCAyLjAueC1zdHlsZSBpcGZ3YWRtLgorCitQUFAKKy0tLQorCitUaGUgUFBQIGRyaXZlciBoYXMgYmVlbiByZXN0cnVjdHVyZWQgdG8gc3VwcG9ydCBtdWx0aWxpbmsgYW5kIHRvCitlbmFibGUgaXQgdG8gb3BlcmF0ZSBvdmVyIGRpdmVyc2UgbWVkaWEgbGF5ZXJzLiAgSWYgeW91IHVzZSBQUFAsCit1cGdyYWRlIHBwcGQgdG8gYXQgbGVhc3QgMi40LjAuCisKK0lmIHlvdSBhcmUgbm90IHVzaW5nIGRldmZzLCB5b3UgbXVzdCBoYXZlIHRoZSBkZXZpY2UgZmlsZSAvZGV2L3BwcAord2hpY2ggY2FuIGJlIG1hZGUgYnk6CisKK21rbm9kIC9kZXYvcHBwIGMgMTA4IDAKKworYXMgcm9vdC4KKworSWYgeW91IHVzZSBkZXZmc2QgYW5kIGJ1aWxkIHBwcCBzdXBwb3J0IGFzIG1vZHVsZXMsIHlvdSB3aWxsIG5lZWQKK3RoZSBmb2xsb3dpbmcgaW4geW91ciAvZXRjL2RldmZzZC5jb25mIGZpbGU6CisKK0xPT0tVUAlQUFAJTU9ETE9BRAorCitJc2RuNGstdXRpbHMKKy0tLS0tLS0tLS0tLQorCitEdWUgdG8gY2hhbmdlcyBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBwaG9uZSBudW1iZXIgZmllbGQsIGlzZG40ay11dGlscworbmVlZHMgdG8gYmUgcmVjb21waWxlZCBvciAocHJlZmVyYWJseSkgdXBncmFkZWQuCisKK05GUy11dGlscworLS0tLS0tLS0tCisKK0luIDIuNCBhbmQgZWFybGllciBrZXJuZWxzLCB0aGUgbmZzIHNlcnZlciBuZWVkZWQgdG8ga25vdyBhYm91dCBhbnkKK2NsaWVudCB0aGF0IGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gYWNjZXNzIGZpbGVzIHZpYSBORlMuICBUaGlzCitpbmZvcm1hdGlvbiB3b3VsZCBiZSBnaXZlbiB0byB0aGUga2VybmVsIGJ5ICJtb3VudGQiIHdoZW4gdGhlIGNsaWVudAorbW91bnRlZCB0aGUgZmlsZXN5c3RlbSwgb3IgYnkgImV4cG9ydGZzIiBhdCBzeXN0ZW0gc3RhcnR1cC4gIGV4cG9ydGZzCit3b3VsZCB0YWtlIGluZm9ybWF0aW9uIGFib3V0IGFjdGl2ZSBjbGllbnRzIGZyb20gL3Zhci9saWIvbmZzL3JtdGFiLgorCitUaGlzIGFwcHJvYWNoIGlzIHF1aXRlIGZyYWdpbGUgYXMgaXQgZGVwZW5kcyBvbiBybXRhYiBiZWluZyBjb3JyZWN0Cit3aGljaCBpcyBub3QgYWx3YXlzIGVhc3ksIHBhcnRpY3VsYXJseSB3aGVuIHRyeWluZyB0byBpbXBsZW1lbnQKK2ZhaWwtb3Zlci4gIEV2ZW4gd2hlbiB0aGUgc3lzdGVtIGlzIHdvcmtpbmcgd2VsbCwgcm10YWIgc3VmZmVycyBmcm9tCitnZXR0aW5nIGxvdHMgb2Ygb2xkIGVudHJpZXMgdGhhdCBuZXZlciBnZXQgcmVtb3ZlZC4KKworV2l0aCAyLjYgd2UgaGF2ZSB0aGUgb3B0aW9uIG9mIGhhdmluZyB0aGUga2VybmVsIHRlbGwgbW91bnRkIHdoZW4gaXQKK2dldHMgYSByZXF1ZXN0IGZyb20gYW4gdW5rbm93biBob3N0LCBhbmQgbW91bnRkIGNhbiBnaXZlIGFwcHJvcHJpYXRlCitleHBvcnQgaW5mb3JtYXRpb24gdG8gdGhlIGtlcm5lbC4gIFRoaXMgcmVtb3ZlcyB0aGUgZGVwZW5kZW5jeSBvbgorcm10YWIgYW5kIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBvbmx5IG5lZWRzIHRvIGtub3cgYWJvdXQgY3VycmVudGx5CithY3RpdmUgY2xpZW50cy4KKworVG8gZW5hYmxlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIHlvdSBuZWVkIHRvOgorCisgIG1vdW50IC10IG5mc2QgbmZzZCAvcHJvYy9mcy9uZnMKKworYmVmb3JlIHJ1bm5pbmcgZXhwb3J0ZnMgb3IgbW91bnRkLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgTkZTCitzZXJ2aWNlcyBiZSBwcm90ZWN0ZWQgZnJvbSB0aGUgaW50ZXJuZXQtYXQtbGFyZ2UgYnkgYSBmaXJld2FsbCB3aGVyZQordGhhdCBpcyBwb3NzaWJsZS4KKworR2V0dGluZyB1cGRhdGVkIHNvZnR3YXJlCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworS2VybmVsIGNvbXBpbGF0aW9uCisqKioqKioqKioqKioqKioqKioKKworZ2NjIDIuOTUuMworLS0tLS0tLS0tLQorbyAgPGZ0cDovL2Z0cC5nbnUub3JnL2dudS9nY2MvZ2NjLTIuOTUuMy50YXIuZ3o+CisKK01ha2UKKy0tLS0KK28gIDxmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbWFrZS8+CisKK0JpbnV0aWxzCistLS0tLS0tLQorbyAgPGZ0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC9kZXZlbC9iaW51dGlscy8+CisKK1N5c3RlbSB1dGlsaXRpZXMKKyoqKioqKioqKioqKioqKioKKworVXRpbC1saW51eAorLS0tLS0tLS0tLQorbyAgPGZ0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4Lz4KKworS3N5bW9vcHMKKy0tLS0tLS0tCitvICA8ZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9rc3ltb29wcy92Mi40Lz4KKworTW9kdWxlLUluaXQtVG9vbHMKKy0tLS0tLS0tLS0tLS0tLS0tCitvICA8ZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvcnVzdHkvbW9kdWxlcy8+CisKK01raW5pdHJkCistLS0tLS0tLQorbyAgPGZ0cDovL3Jhd2hpZGUucmVkaGF0LmNvbS9wdWIvcmF3aGlkZS9TUlBNUy9TUlBNUy8+CisKK0UyZnNwcm9ncworLS0tLS0tLS0tCitvICA8aHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9lMmZzcHJvZ3MvZTJmc3Byb2dzLTEuMjkudGFyLmd6PgorCitKRlN1dGlscworLS0tLS0tLS0KK28gIDxodHRwOi8vamZzLnNvdXJjZWZvcmdlLm5ldC8+CisKK1JlaXNlcmZzcHJvZ3MKKy0tLS0tLS0tLS0tLS0KK28gIDxodHRwOi8vd3d3Lm5hbWVzeXMuY29tL3B1Yi9yZWlzZXJmc3Byb2dzL3JlaXNlcmZzcHJvZ3MtMy42LjMudGFyLmd6PgorCitYZnNwcm9ncworLS0tLS0tLS0KK28gIDxmdHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvZG93bmxvYWQvPgorCitQY21jaWEtY3MKKy0tLS0tLS0tLQorbyAgPGZ0cDovL3BjbWNpYS1jcy5zb3VyY2Vmb3JnZS5uZXQvcHViL3BjbWNpYS1jcy9wY21jaWEtY3MtMy4xLjIxLnRhci5nej4KKworUXVvdGEtdG9vbHMKKy0tLS0tLS0tLS0KK28gIDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4cXVvdGEvPgorCitKYWRlCistLS0tCitvICA8ZnRwOi8vZnRwLmpjbGFyay5jb20vcHViL2phZGUvamFkZS0xLjIuMS50YXIuZ3o+CisKK0RvY0Jvb2sgU3R5bGVzaGVldHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK28gIDxodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL2Rzc3NsLz4KKworSW50ZWwgUDYgbWljcm9jb2RlCistLS0tLS0tLS0tLS0tLS0tLS0KK28gIDxodHRwOi8vd3d3LnVyYmFubXl0aC5vcmcvbWljcm9jb2RlLz4KKworUG93ZXJ0d2VhaworLS0tLS0tLS0tLQorbyAgPGh0dHA6Ly9wb3dlcnR3ZWFrLnNvdXJjZWZvcmdlLm5ldC8+CisKK3VkZXYKKy0tLS0KK28gPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvdWRldi5odG1sPgorCitOZXR3b3JraW5nCisqKioqKioqKioqCisKK1BQUAorLS0tCitvICA8ZnRwOi8vZnRwLnNhbWJhLm9yZy9wdWIvcHBwL3BwcC0yLjQuMC50YXIuZ3o+CisKK0lzZG40ay11dGlscworLS0tLS0tLS0tLS0tCitvICA8ZnRwOi8vZnRwLmlzZG40bGludXguZGUvcHViL2lzZG40bGludXgvdXRpbHMvaXNkbjRrLXV0aWxzLnYzLjFwcmUxLnRhci5nej4KKworTkZTLXV0aWxzCistLS0tLS0tLS0KK28gIDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD0xND4KKworSXB0YWJsZXMKKy0tLS0tLS0tCitvICA8aHR0cDovL3d3dy5pcHRhYmxlcy5vcmcvZG93bmxvYWRzLmh0bWw+CisKK0lwLXJvdXRlMgorLS0tLS0tLS0tCitvICA8ZnRwOi8vZnRwLnR1eC5vcmcvcHViL25ldC9pcC1yb3V0aW5nL2lwcm91dGUyLTIuMi40LW5vdy1zczk5MTAyMy50YXIuZ3o+CisKK09Qcm9maWxlCistLS0tLS0tLQorbyAgPGh0dHA6Ly9vcHJvZmlsZS5zZi5uZXQvZG93bmxvYWQvPgorCitORlMtVXRpbHMKKy0tLS0tLS0tLQorbyAgPGh0dHA6Ly9uZnMuc291cmNlZm9yZ2UubmV0Lz4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZSBiL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1YjM5NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKQEAgLTAsMCArMSw0MzEgQEAKKworCQlMaW51eCBrZXJuZWwgY29kaW5nIHN0eWxlCisKK1RoaXMgaXMgYSBzaG9ydCBkb2N1bWVudCBkZXNjcmliaW5nIHRoZSBwcmVmZXJyZWQgY29kaW5nIHN0eWxlIGZvciB0aGUKK2xpbnV4IGtlcm5lbC4gIENvZGluZyBzdHlsZSBpcyB2ZXJ5IHBlcnNvbmFsLCBhbmQgSSB3b24ndCBfZm9yY2VfIG15Cit2aWV3cyBvbiBhbnlib2R5LCBidXQgdGhpcyBpcyB3aGF0IGdvZXMgZm9yIGFueXRoaW5nIHRoYXQgSSBoYXZlIHRvIGJlCithYmxlIHRvIG1haW50YWluLCBhbmQgSSdkIHByZWZlciBpdCBmb3IgbW9zdCBvdGhlciB0aGluZ3MgdG9vLiAgUGxlYXNlCithdCBsZWFzdCBjb25zaWRlciB0aGUgcG9pbnRzIG1hZGUgaGVyZS4KKworRmlyc3Qgb2ZmLCBJJ2Qgc3VnZ2VzdCBwcmludGluZyBvdXQgYSBjb3B5IG9mIHRoZSBHTlUgY29kaW5nIHN0YW5kYXJkcywKK2FuZCBOT1QgcmVhZCBpdC4gIEJ1cm4gdGhlbSwgaXQncyBhIGdyZWF0IHN5bWJvbGljIGdlc3R1cmUuCisKK0FueXdheSwgaGVyZSBnb2VzOgorCisKKwkgCUNoYXB0ZXIgMTogSW5kZW50YXRpb24KKworVGFicyBhcmUgOCBjaGFyYWN0ZXJzLCBhbmQgdGh1cyBpbmRlbnRhdGlvbnMgYXJlIGFsc28gOCBjaGFyYWN0ZXJzLgorVGhlcmUgYXJlIGhlcmV0aWMgbW92ZW1lbnRzIHRoYXQgdHJ5IHRvIG1ha2UgaW5kZW50YXRpb25zIDQgKG9yIGV2ZW4gMiEpCitjaGFyYWN0ZXJzIGRlZXAsIGFuZCB0aGF0IGlzIGFraW4gdG8gdHJ5aW5nIHRvIGRlZmluZSB0aGUgdmFsdWUgb2YgUEkgdG8KK2JlIDMuCisKK1JhdGlvbmFsZTogVGhlIHdob2xlIGlkZWEgYmVoaW5kIGluZGVudGF0aW9uIGlzIHRvIGNsZWFybHkgZGVmaW5lIHdoZXJlCithIGJsb2NrIG9mIGNvbnRyb2wgc3RhcnRzIGFuZCBlbmRzLiAgRXNwZWNpYWxseSB3aGVuIHlvdSd2ZSBiZWVuIGxvb2tpbmcKK2F0IHlvdXIgc2NyZWVuIGZvciAyMCBzdHJhaWdodCBob3VycywgeW91J2xsIGZpbmQgaXQgYSBsb3QgZWFzaWVyIHRvIHNlZQoraG93IHRoZSBpbmRlbnRhdGlvbiB3b3JrcyBpZiB5b3UgaGF2ZSBsYXJnZSBpbmRlbnRhdGlvbnMuCisKK05vdywgc29tZSBwZW9wbGUgd2lsbCBjbGFpbSB0aGF0IGhhdmluZyA4LWNoYXJhY3RlciBpbmRlbnRhdGlvbnMgbWFrZXMKK3RoZSBjb2RlIG1vdmUgdG9vIGZhciB0byB0aGUgcmlnaHQsIGFuZCBtYWtlcyBpdCBoYXJkIHRvIHJlYWQgb24gYQorODAtY2hhcmFjdGVyIHRlcm1pbmFsIHNjcmVlbi4gIFRoZSBhbnN3ZXIgdG8gdGhhdCBpcyB0aGF0IGlmIHlvdSBuZWVkCittb3JlIHRoYW4gMyBsZXZlbHMgb2YgaW5kZW50YXRpb24sIHlvdSdyZSBzY3Jld2VkIGFueXdheSwgYW5kIHNob3VsZCBmaXgKK3lvdXIgcHJvZ3JhbS4KKworSW4gc2hvcnQsIDgtY2hhciBpbmRlbnRzIG1ha2UgdGhpbmdzIGVhc2llciB0byByZWFkLCBhbmQgaGF2ZSB0aGUgYWRkZWQKK2JlbmVmaXQgb2Ygd2FybmluZyB5b3Ugd2hlbiB5b3UncmUgbmVzdGluZyB5b3VyIGZ1bmN0aW9ucyB0b28gZGVlcC4KK0hlZWQgdGhhdCB3YXJuaW5nLgorCitEb24ndCBwdXQgbXVsdGlwbGUgc3RhdGVtZW50cyBvbiBhIHNpbmdsZSBsaW5lIHVubGVzcyB5b3UgaGF2ZQorc29tZXRoaW5nIHRvIGhpZGU6CisKKwlpZiAoY29uZGl0aW9uKSBkb190aGlzOworCSAgZG9fc29tZXRoaW5nX2V2ZXJ5dGltZTsKKworT3V0c2lkZSBvZiBjb21tZW50cywgZG9jdW1lbnRhdGlvbiBhbmQgZXhjZXB0IGluIEtjb25maWcsIHNwYWNlcyBhcmUgbmV2ZXIKK3VzZWQgZm9yIGluZGVudGF0aW9uLCBhbmQgdGhlIGFib3ZlIGV4YW1wbGUgaXMgZGVsaWJlcmF0ZWx5IGJyb2tlbi4KKworR2V0IGEgZGVjZW50IGVkaXRvciBhbmQgZG9uJ3QgbGVhdmUgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzLgorCisKKwkJQ2hhcHRlciAyOiBCcmVha2luZyBsb25nIGxpbmVzIGFuZCBzdHJpbmdzCisKK0NvZGluZyBzdHlsZSBpcyBhbGwgYWJvdXQgcmVhZGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eSB1c2luZyBjb21tb25seQorYXZhaWxhYmxlIHRvb2xzLgorCitUaGUgbGltaXQgb24gdGhlIGxlbmd0aCBvZiBsaW5lcyBpcyA4MCBjb2x1bW5zIGFuZCB0aGlzIGlzIGEgaGFyZCBsaW1pdC4KKworU3RhdGVtZW50cyBsb25nZXIgdGhhbiA4MCBjb2x1bW5zIHdpbGwgYmUgYnJva2VuIGludG8gc2Vuc2libGUgY2h1bmtzLgorRGVzY2VuZGFudHMgYXJlIGFsd2F5cyBzdWJzdGFudGlhbGx5IHNob3J0ZXIgdGhhbiB0aGUgcGFyZW50IGFuZCBhcmUgcGxhY2VkCitzdWJzdGFudGlhbGx5IHRvIHRoZSByaWdodC4gVGhlIHNhbWUgYXBwbGllcyB0byBmdW5jdGlvbiBoZWFkZXJzIHdpdGggYSBsb25nCithcmd1bWVudCBsaXN0LiBMb25nIHN0cmluZ3MgYXJlIGFzIHdlbGwgYnJva2VuIGludG8gc2hvcnRlciBzdHJpbmdzLgorCit2b2lkIGZ1bihpbnQgYSwgaW50IGIsIGludCBjKQoreworCWlmIChjb25kaXRpb24pCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgdGhpcyBpcyBhIGxvbmcgcHJpbnRrIHdpdGggIgorCQkJCQkJIjMgcGFyYW1ldGVycyBhOiAldSBiOiAldSAiCisJCQkJCQkiYzogJXUgXG4iLCBhLCBiLCBjKTsKKwllbHNlCisJCW5leHRfc3RhdGVtZW50OworfQorCisJCUNoYXB0ZXIgMzogUGxhY2luZyBCcmFjZXMKKworVGhlIG90aGVyIGlzc3VlIHRoYXQgYWx3YXlzIGNvbWVzIHVwIGluIEMgc3R5bGluZyBpcyB0aGUgcGxhY2VtZW50IG9mCiticmFjZXMuICBVbmxpa2UgdGhlIGluZGVudCBzaXplLCB0aGVyZSBhcmUgZmV3IHRlY2huaWNhbCByZWFzb25zIHRvCitjaG9vc2Ugb25lIHBsYWNlbWVudCBzdHJhdGVneSBvdmVyIHRoZSBvdGhlciwgYnV0IHRoZSBwcmVmZXJyZWQgd2F5LCBhcworc2hvd24gdG8gdXMgYnkgdGhlIHByb3BoZXRzIEtlcm5pZ2hhbiBhbmQgUml0Y2hpZSwgaXMgdG8gcHV0IHRoZSBvcGVuaW5nCiticmFjZSBsYXN0IG9uIHRoZSBsaW5lLCBhbmQgcHV0IHRoZSBjbG9zaW5nIGJyYWNlIGZpcnN0LCB0aHVzbHk6CisKKwlpZiAoeCBpcyB0cnVlKSB7CisJCXdlIGRvIHkKKwl9CisKK0hvd2V2ZXIsIHRoZXJlIGlzIG9uZSBzcGVjaWFsIGNhc2UsIG5hbWVseSBmdW5jdGlvbnM6IHRoZXkgaGF2ZSB0aGUKK29wZW5pbmcgYnJhY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLCB0aHVzOgorCisJaW50IGZ1bmN0aW9uKGludCB4KQorCXsKKwkJYm9keSBvZiBmdW5jdGlvbgorCX0KKworSGVyZXRpYyBwZW9wbGUgYWxsIG92ZXIgdGhlIHdvcmxkIGhhdmUgY2xhaW1lZCB0aGF0IHRoaXMgaW5jb25zaXN0ZW5jeQoraXMgLi4uICB3ZWxsIC4uLiAgaW5jb25zaXN0ZW50LCBidXQgYWxsIHJpZ2h0LXRoaW5raW5nIHBlb3BsZSBrbm93IHRoYXQKKyhhKSBLJlIgYXJlIF9yaWdodF8gYW5kIChiKSBLJlIgYXJlIHJpZ2h0LiAgQmVzaWRlcywgZnVuY3Rpb25zIGFyZQorc3BlY2lhbCBhbnl3YXkgKHlvdSBjYW4ndCBuZXN0IHRoZW0gaW4gQykuCisKK05vdGUgdGhhdCB0aGUgY2xvc2luZyBicmFjZSBpcyBlbXB0eSBvbiBhIGxpbmUgb2YgaXRzIG93biwgX2V4Y2VwdF8gaW4KK3RoZSBjYXNlcyB3aGVyZSBpdCBpcyBmb2xsb3dlZCBieSBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgc2FtZSBzdGF0ZW1lbnQsCitpZSBhICJ3aGlsZSIgaW4gYSBkby1zdGF0ZW1lbnQgb3IgYW4gImVsc2UiIGluIGFuIGlmLXN0YXRlbWVudCwgbGlrZQordGhpczoKKworCWRvIHsKKwkJYm9keSBvZiBkby1sb29wCisJfSB3aGlsZSAoY29uZGl0aW9uKTsKKworYW5kCisKKwlpZiAoeCA9PSB5KSB7CisJCS4uCisJfSBlbHNlIGlmICh4ID4geSkgeworCQkuLi4KKwl9IGVsc2UgeworCQkuLi4uCisJfQorCitSYXRpb25hbGU6IEsmUi4KKworQWxzbywgbm90ZSB0aGF0IHRoaXMgYnJhY2UtcGxhY2VtZW50IGFsc28gbWluaW1pemVzIHRoZSBudW1iZXIgb2YgZW1wdHkKKyhvciBhbG1vc3QgZW1wdHkpIGxpbmVzLCB3aXRob3V0IGFueSBsb3NzIG9mIHJlYWRhYmlsaXR5LiAgVGh1cywgYXMgdGhlCitzdXBwbHkgb2YgbmV3LWxpbmVzIG9uIHlvdXIgc2NyZWVuIGlzIG5vdCBhIHJlbmV3YWJsZSByZXNvdXJjZSAodGhpbmsKKzI1LWxpbmUgdGVybWluYWwgc2NyZWVucyBoZXJlKSwgeW91IGhhdmUgbW9yZSBlbXB0eSBsaW5lcyB0byBwdXQKK2NvbW1lbnRzIG9uLgorCisKKwkJQ2hhcHRlciA0OiBOYW1pbmcKKworQyBpcyBhIFNwYXJ0YW4gbGFuZ3VhZ2UsIGFuZCBzbyBzaG91bGQgeW91ciBuYW1pbmcgYmUuICBVbmxpa2UgTW9kdWxhLTIKK2FuZCBQYXNjYWwgcHJvZ3JhbW1lcnMsIEMgcHJvZ3JhbW1lcnMgZG8gbm90IHVzZSBjdXRlIG5hbWVzIGxpa2UKK1RoaXNWYXJpYWJsZUlzQVRlbXBvcmFyeUNvdW50ZXIuICBBIEMgcHJvZ3JhbW1lciB3b3VsZCBjYWxsIHRoYXQKK3ZhcmlhYmxlICJ0bXAiLCB3aGljaCBpcyBtdWNoIGVhc2llciB0byB3cml0ZSwgYW5kIG5vdCB0aGUgbGVhc3QgbW9yZQorZGlmZmljdWx0IHRvIHVuZGVyc3RhbmQuCisKK0hPV0VWRVIsIHdoaWxlIG1peGVkLWNhc2UgbmFtZXMgYXJlIGZyb3duZWQgdXBvbiwgZGVzY3JpcHRpdmUgbmFtZXMgZm9yCitnbG9iYWwgdmFyaWFibGVzIGFyZSBhIG11c3QuICBUbyBjYWxsIGEgZ2xvYmFsIGZ1bmN0aW9uICJmb28iIGlzIGEKK3Nob290aW5nIG9mZmVuc2UuCisKK0dMT0JBTCB2YXJpYWJsZXMgKHRvIGJlIHVzZWQgb25seSBpZiB5b3UgX3JlYWxseV8gbmVlZCB0aGVtKSBuZWVkIHRvCitoYXZlIGRlc2NyaXB0aXZlIG5hbWVzLCBhcyBkbyBnbG9iYWwgZnVuY3Rpb25zLiAgSWYgeW91IGhhdmUgYSBmdW5jdGlvbgordGhhdCBjb3VudHMgdGhlIG51bWJlciBvZiBhY3RpdmUgdXNlcnMsIHlvdSBzaG91bGQgY2FsbCB0aGF0CisiY291bnRfYWN0aXZlX3VzZXJzKCkiIG9yIHNpbWlsYXIsIHlvdSBzaG91bGQgX25vdF8gY2FsbCBpdCAiY250dXNyKCkiLgorCitFbmNvZGluZyB0aGUgdHlwZSBvZiBhIGZ1bmN0aW9uIGludG8gdGhlIG5hbWUgKHNvLWNhbGxlZCBIdW5nYXJpYW4KK25vdGF0aW9uKSBpcyBicmFpbiBkYW1hZ2VkIC0gdGhlIGNvbXBpbGVyIGtub3dzIHRoZSB0eXBlcyBhbnl3YXkgYW5kIGNhbgorY2hlY2sgdGhvc2UsIGFuZCBpdCBvbmx5IGNvbmZ1c2VzIHRoZSBwcm9ncmFtbWVyLiAgTm8gd29uZGVyIE1pY3JvU29mdAorbWFrZXMgYnVnZ3kgcHJvZ3JhbXMuCisKK0xPQ0FMIHZhcmlhYmxlIG5hbWVzIHNob3VsZCBiZSBzaG9ydCwgYW5kIHRvIHRoZSBwb2ludC4gIElmIHlvdSBoYXZlCitzb21lIHJhbmRvbSBpbnRlZ2VyIGxvb3AgY291bnRlciwgaXQgc2hvdWxkIHByb2JhYmx5IGJlIGNhbGxlZCAiaSIuCitDYWxsaW5nIGl0ICJsb29wX2NvdW50ZXIiIGlzIG5vbi1wcm9kdWN0aXZlLCBpZiB0aGVyZSBpcyBubyBjaGFuY2Ugb2YgaXQKK2JlaW5nIG1pcy11bmRlcnN0b29kLiAgU2ltaWxhcmx5LCAidG1wIiBjYW4gYmUganVzdCBhYm91dCBhbnkgdHlwZSBvZgordmFyaWFibGUgdGhhdCBpcyB1c2VkIHRvIGhvbGQgYSB0ZW1wb3JhcnkgdmFsdWUuCisKK0lmIHlvdSBhcmUgYWZyYWlkIHRvIG1peCB1cCB5b3VyIGxvY2FsIHZhcmlhYmxlIG5hbWVzLCB5b3UgaGF2ZSBhbm90aGVyCitwcm9ibGVtLCB3aGljaCBpcyBjYWxsZWQgdGhlIGZ1bmN0aW9uLWdyb3d0aC1ob3Jtb25lLWltYmFsYW5jZSBzeW5kcm9tZS4KK1NlZSBuZXh0IGNoYXB0ZXIuCisKKworCQlDaGFwdGVyIDU6IEZ1bmN0aW9ucworCitGdW5jdGlvbnMgc2hvdWxkIGJlIHNob3J0IGFuZCBzd2VldCwgYW5kIGRvIGp1c3Qgb25lIHRoaW5nLiAgVGhleSBzaG91bGQKK2ZpdCBvbiBvbmUgb3IgdHdvIHNjcmVlbmZ1bHMgb2YgdGV4dCAodGhlIElTTy9BTlNJIHNjcmVlbiBzaXplIGlzIDgweDI0LAorYXMgd2UgYWxsIGtub3cpLCBhbmQgZG8gb25lIHRoaW5nIGFuZCBkbyB0aGF0IHdlbGwuCisKK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGZ1bmN0aW9uIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlCitjb21wbGV4aXR5IGFuZCBpbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGF0IGZ1bmN0aW9uLiAgU28sIGlmIHlvdSBoYXZlIGEKK2NvbmNlcHR1YWxseSBzaW1wbGUgZnVuY3Rpb24gdGhhdCBpcyBqdXN0IG9uZSBsb25nIChidXQgc2ltcGxlKQorY2FzZS1zdGF0ZW1lbnQsIHdoZXJlIHlvdSBoYXZlIHRvIGRvIGxvdHMgb2Ygc21hbGwgdGhpbmdzIGZvciBhIGxvdCBvZgorZGlmZmVyZW50IGNhc2VzLCBpdCdzIE9LIHRvIGhhdmUgYSBsb25nZXIgZnVuY3Rpb24uCisKK0hvd2V2ZXIsIGlmIHlvdSBoYXZlIGEgY29tcGxleCBmdW5jdGlvbiwgYW5kIHlvdSBzdXNwZWN0IHRoYXQgYQorbGVzcy10aGFuLWdpZnRlZCBmaXJzdC15ZWFyIGhpZ2gtc2Nob29sIHN0dWRlbnQgbWlnaHQgbm90IGV2ZW4KK3VuZGVyc3RhbmQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgYWxsIGFib3V0LCB5b3Ugc2hvdWxkIGFkaGVyZSB0byB0aGUKK21heGltdW0gbGltaXRzIGFsbCB0aGUgbW9yZSBjbG9zZWx5LiAgVXNlIGhlbHBlciBmdW5jdGlvbnMgd2l0aAorZGVzY3JpcHRpdmUgbmFtZXMgKHlvdSBjYW4gYXNrIHRoZSBjb21waWxlciB0byBpbi1saW5lIHRoZW0gaWYgeW91IHRoaW5rCitpdCdzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCBhbmQgaXQgd2lsbCBwcm9iYWJseSBkbyBhIGJldHRlciBqb2Igb2YgaXQKK3RoYW4geW91IHdvdWxkIGhhdmUgZG9uZSkuCisKK0Fub3RoZXIgbWVhc3VyZSBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZiBsb2NhbCB2YXJpYWJsZXMuICBUaGV5CitzaG91bGRuJ3QgZXhjZWVkIDUtMTAsIG9yIHlvdSdyZSBkb2luZyBzb21ldGhpbmcgd3JvbmcuICBSZS10aGluayB0aGUKK2Z1bmN0aW9uLCBhbmQgc3BsaXQgaXQgaW50byBzbWFsbGVyIHBpZWNlcy4gIEEgaHVtYW4gYnJhaW4gY2FuCitnZW5lcmFsbHkgZWFzaWx5IGtlZXAgdHJhY2sgb2YgYWJvdXQgNyBkaWZmZXJlbnQgdGhpbmdzLCBhbnl0aGluZyBtb3JlCithbmQgaXQgZ2V0cyBjb25mdXNlZC4gIFlvdSBrbm93IHlvdSdyZSBicmlsbGlhbnQsIGJ1dCBtYXliZSB5b3UnZCBsaWtlCit0byB1bmRlcnN0YW5kIHdoYXQgeW91IGRpZCAyIHdlZWtzIGZyb20gbm93LgorCisKKwkJQ2hhcHRlciA2OiBDZW50cmFsaXplZCBleGl0aW5nIG9mIGZ1bmN0aW9ucworCitBbGJlaXQgZGVwcmVjYXRlZCBieSBzb21lIHBlb3BsZSwgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIGdvdG8gc3RhdGVtZW50IGlzCit1c2VkIGZyZXF1ZW50bHkgYnkgY29tcGlsZXJzIGluIGZvcm0gb2YgdGhlIHVuY29uZGl0aW9uYWwganVtcCBpbnN0cnVjdGlvbi4KKworVGhlIGdvdG8gc3RhdGVtZW50IGNvbWVzIGluIGhhbmR5IHdoZW4gYSBmdW5jdGlvbiBleGl0cyBmcm9tIG11bHRpcGxlCitsb2NhdGlvbnMgYW5kIHNvbWUgY29tbW9uIHdvcmsgc3VjaCBhcyBjbGVhbnVwIGhhcyB0byBiZSBkb25lLgorCitUaGUgcmF0aW9uYWxlIGlzOgorCistIHVuY29uZGl0aW9uYWwgc3RhdGVtZW50cyBhcmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIGZvbGxvdworLSBuZXN0aW5nIGlzIHJlZHVjZWQKKy0gZXJyb3JzIGJ5IG5vdCB1cGRhdGluZyBpbmRpdmlkdWFsIGV4aXQgcG9pbnRzIHdoZW4gbWFraW5nCisgICAgbW9kaWZpY2F0aW9ucyBhcmUgcHJldmVudGVkCistIHNhdmVzIHRoZSBjb21waWxlciB3b3JrIHRvIG9wdGltaXplIHJlZHVuZGFudCBjb2RlIGF3YXkgOykKKworaW50IGZ1bihpbnQgKQoreworCWludCByZXN1bHQgPSAwOworCWNoYXIgKmJ1ZmZlciA9IGttYWxsb2MoU0laRSk7CisKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvbmRpdGlvbjEpIHsKKwkJd2hpbGUgKGxvb3AxKSB7CisJCQkuLi4KKwkJfQorCQlyZXN1bHQgPSAxOworCQlnb3RvIG91dDsKKwl9CisJLi4uCitvdXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisJCUNoYXB0ZXIgNzogQ29tbWVudGluZworCitDb21tZW50cyBhcmUgZ29vZCwgYnV0IHRoZXJlIGlzIGFsc28gYSBkYW5nZXIgb2Ygb3Zlci1jb21tZW50aW5nLiAgTkVWRVIKK3RyeSB0byBleHBsYWluIEhPVyB5b3VyIGNvZGUgd29ya3MgaW4gYSBjb21tZW50OiBpdCdzIG11Y2ggYmV0dGVyIHRvCit3cml0ZSB0aGUgY29kZSBzbyB0aGF0IHRoZSBfd29ya2luZ18gaXMgb2J2aW91cywgYW5kIGl0J3MgYSB3YXN0ZSBvZgordGltZSB0byBleHBsYWluIGJhZGx5IHdyaXR0ZW4gY29kZS4KKworR2VuZXJhbGx5LCB5b3Ugd2FudCB5b3VyIGNvbW1lbnRzIHRvIHRlbGwgV0hBVCB5b3VyIGNvZGUgZG9lcywgbm90IEhPVy4KK0Fsc28sIHRyeSB0byBhdm9pZCBwdXR0aW5nIGNvbW1lbnRzIGluc2lkZSBhIGZ1bmN0aW9uIGJvZHk6IGlmIHRoZQorZnVuY3Rpb24gaXMgc28gY29tcGxleCB0aGF0IHlvdSBuZWVkIHRvIHNlcGFyYXRlbHkgY29tbWVudCBwYXJ0cyBvZiBpdCwKK3lvdSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayB0byBjaGFwdGVyIDUgZm9yIGEgd2hpbGUuICBZb3UgY2FuIG1ha2UKK3NtYWxsIGNvbW1lbnRzIHRvIG5vdGUgb3Igd2FybiBhYm91dCBzb21ldGhpbmcgcGFydGljdWxhcmx5IGNsZXZlciAob3IKK3VnbHkpLCBidXQgdHJ5IHRvIGF2b2lkIGV4Y2Vzcy4gIEluc3RlYWQsIHB1dCB0aGUgY29tbWVudHMgYXQgdGhlIGhlYWQKK29mIHRoZSBmdW5jdGlvbiwgdGVsbGluZyBwZW9wbGUgd2hhdCBpdCBkb2VzLCBhbmQgcG9zc2libHkgV0hZIGl0IGRvZXMKK2l0LgorCisKKwkJQ2hhcHRlciA4OiBZb3UndmUgbWFkZSBhIG1lc3Mgb2YgaXQKKworVGhhdCdzIE9LLCB3ZSBhbGwgZG8uICBZb3UndmUgcHJvYmFibHkgYmVlbiB0b2xkIGJ5IHlvdXIgbG9uZy10aW1lIFVuaXgKK3VzZXIgaGVscGVyIHRoYXQgIkdOVSBlbWFjcyIgYXV0b21hdGljYWxseSBmb3JtYXRzIHRoZSBDIHNvdXJjZXMgZm9yCit5b3UsIGFuZCB5b3UndmUgbm90aWNlZCB0aGF0IHllcywgaXQgZG9lcyBkbyB0aGF0LCBidXQgdGhlIGRlZmF1bHRzIGl0Cit1c2VzIGFyZSBsZXNzIHRoYW4gZGVzaXJhYmxlIChpbiBmYWN0LCB0aGV5IGFyZSB3b3JzZSB0aGFuIHJhbmRvbQordHlwaW5nIC0gYW4gaW5maW5pdGUgbnVtYmVyIG9mIG1vbmtleXMgdHlwaW5nIGludG8gR05VIGVtYWNzIHdvdWxkIG5ldmVyCittYWtlIGEgZ29vZCBwcm9ncmFtKS4KKworU28sIHlvdSBjYW4gZWl0aGVyIGdldCByaWQgb2YgR05VIGVtYWNzLCBvciBjaGFuZ2UgaXQgdG8gdXNlIHNhbmVyCit2YWx1ZXMuICBUbyBkbyB0aGUgbGF0dGVyLCB5b3UgY2FuIHN0aWNrIHRoZSBmb2xsb3dpbmcgaW4geW91ciAuZW1hY3MgZmlsZToKKworKGRlZnVuIGxpbnV4LWMtbW9kZSAoKQorICAiQyBtb2RlIHdpdGggYWRqdXN0ZWQgZGVmYXVsdHMgZm9yIHVzZSB3aXRoIHRoZSBMaW51eCBrZXJuZWwuIgorICAoaW50ZXJhY3RpdmUpCisgIChjLW1vZGUpCisgIChjLXNldC1zdHlsZSAiSyZSIikKKyAgKHNldHEgdGFiLXdpZHRoIDgpCisgIChzZXRxIGluZGVudC10YWJzLW1vZGUgdCkKKyAgKHNldHEgYy1iYXNpYy1vZmZzZXQgOCkpCisKK1RoaXMgd2lsbCBkZWZpbmUgdGhlIE0teCBsaW51eC1jLW1vZGUgY29tbWFuZC4gIFdoZW4gaGFja2luZyBvbiBhCittb2R1bGUsIGlmIHlvdSBwdXQgdGhlIHN0cmluZyAtKi0gbGludXgtYyAtKi0gc29tZXdoZXJlIG9uIHRoZSBmaXJzdAordHdvIGxpbmVzLCB0aGlzIG1vZGUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGludm9rZWQuIEFsc28sIHlvdSBtYXkgd2FudAordG8gYWRkCisKKyhzZXRxIGF1dG8tbW9kZS1hbGlzdCAoY29ucyAnKCIvdXNyL3NyYy9saW51eC4qLy4qXFwuW2NoXSQiIC4gbGludXgtYy1tb2RlKQorCQkJYXV0by1tb2RlLWFsaXN0KSkKKwordG8geW91ciAuZW1hY3MgZmlsZSBpZiB5b3Ugd2FudCB0byBoYXZlIGxpbnV4LWMtbW9kZSBzd2l0Y2hlZCBvbgorYXV0b21hZ2ljYWxseSB3aGVuIHlvdSBlZGl0IHNvdXJjZSBmaWxlcyB1bmRlciAvdXNyL3NyYy9saW51eC4KKworQnV0IGV2ZW4gaWYgeW91IGZhaWwgaW4gZ2V0dGluZyBlbWFjcyB0byBkbyBzYW5lIGZvcm1hdHRpbmcsIG5vdAorZXZlcnl0aGluZyBpcyBsb3N0OiB1c2UgImluZGVudCIuCisKK05vdywgYWdhaW4sIEdOVSBpbmRlbnQgaGFzIHRoZSBzYW1lIGJyYWluLWRlYWQgc2V0dGluZ3MgdGhhdCBHTlUgZW1hY3MKK2hhcywgd2hpY2ggaXMgd2h5IHlvdSBuZWVkIHRvIGdpdmUgaXQgYSBmZXcgY29tbWFuZCBsaW5lIG9wdGlvbnMuCitIb3dldmVyLCB0aGF0J3Mgbm90IHRvbyBiYWQsIGJlY2F1c2UgZXZlbiB0aGUgbWFrZXJzIG9mIEdOVSBpbmRlbnQKK3JlY29nbml6ZSB0aGUgYXV0aG9yaXR5IG9mIEsmUiAodGhlIEdOVSBwZW9wbGUgYXJlbid0IGV2aWwsIHRoZXkgYXJlCitqdXN0IHNldmVyZWx5IG1pc2d1aWRlZCBpbiB0aGlzIG1hdHRlciksIHNvIHlvdSBqdXN0IGdpdmUgaW5kZW50IHRoZQorb3B0aW9ucyAiLWtyIC1pOCIgKHN0YW5kcyBmb3IgIksmUiwgOCBjaGFyYWN0ZXIgaW5kZW50cyIpLCBvciB1c2UKKyJzY3JpcHRzL0xpbmRlbnQiLCB3aGljaCBpbmRlbnRzIGluIHRoZSBsYXRlc3Qgc3R5bGUuCisKKyJpbmRlbnQiIGhhcyBhIGxvdCBvZiBvcHRpb25zLCBhbmQgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIGNvbW1lbnQKK3JlLWZvcm1hdHRpbmcgeW91IG1heSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBtYW4gcGFnZS4gIEJ1dAorcmVtZW1iZXI6ICJpbmRlbnQiIGlzIG5vdCBhIGZpeCBmb3IgYmFkIHByb2dyYW1taW5nLgorCisKKwkJQ2hhcHRlciA5OiBDb25maWd1cmF0aW9uLWZpbGVzCisKK0ZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGFyY2gveHh4L0tjb25maWcsIGFuZCBhbGwgdGhlIEtjb25maWcgZmlsZXMpLAorc29tZXdoYXQgZGlmZmVyZW50IGluZGVudGF0aW9uIGlzIHVzZWQuCisKK0hlbHAgdGV4dCBpcyBpbmRlbnRlZCB3aXRoIDIgc3BhY2VzLgorCitpZiBDT05GSUdfRVhQRVJJTUVOVEFMCisJdHJpc3RhdGUgQ09ORklHX0JPT00KKwlkZWZhdWx0IG4KKwloZWxwCisJICBBcHBseSBuaXRyb2dseWNlcmluZSBpbnNpZGUgdGhlIGtleWJvYXJkIChEQU5HRVJPVVMpCisJYm9vbCBDT05GSUdfQ0hFRVIKKwlkZXBlbmRzIG9uIENPTkZJR19CT09NCisJZGVmYXVsdCB5CisJaGVscAorCSAgT3V0cHV0IG5pY2UgbWVzc2FnZXMgd2hlbiB5b3UgZXhwbG9kZQorZW5kaWYKKworR2VuZXJhbGx5LCBDT05GSUdfRVhQRVJJTUVOVEFMIHNob3VsZCBzdXJyb3VuZCBhbGwgb3B0aW9ucyBub3QgY29uc2lkZXJlZAorc3RhYmxlLiBBbGwgb3B0aW9ucyB0aGF0IGFyZSBrbm93biB0byB0cmFzaCBkYXRhIChleHBlcmltZW50YWwgd3JpdGUtCitzdXBwb3J0IGZvciBmaWxlLXN5c3RlbXMsIGZvciBpbnN0YW5jZSkgc2hvdWxkIGJlIGRlbm90ZWQgKERBTkdFUk9VUyksIG90aGVyCitleHBlcmltZW50YWwgb3B0aW9ucyBzaG91bGQgYmUgZGVub3RlZCAoRVhQRVJJTUVOVEFMKS4KKworCisJCUNoYXB0ZXIgMTA6IERhdGEgc3RydWN0dXJlcworCitEYXRhIHN0cnVjdHVyZXMgdGhhdCBoYXZlIHZpc2liaWxpdHkgb3V0c2lkZSB0aGUgc2luZ2xlLXRocmVhZGVkCitlbnZpcm9ubWVudCB0aGV5IGFyZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgaW4gc2hvdWxkIGFsd2F5cyBoYXZlCityZWZlcmVuY2UgY291bnRzLiAgSW4gdGhlIGtlcm5lbCwgZ2FyYmFnZSBjb2xsZWN0aW9uIGRvZXNuJ3QgZXhpc3QgKGFuZAorb3V0c2lkZSB0aGUga2VybmVsIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBzbG93IGFuZCBpbmVmZmljaWVudCksIHdoaWNoCittZWFucyB0aGF0IHlvdSBhYnNvbHV0ZWx5IF9oYXZlXyB0byByZWZlcmVuY2UgY291bnQgYWxsIHlvdXIgdXNlcy4KKworUmVmZXJlbmNlIGNvdW50aW5nIG1lYW5zIHRoYXQgeW91IGNhbiBhdm9pZCBsb2NraW5nLCBhbmQgYWxsb3dzIG11bHRpcGxlCit1c2VycyB0byBoYXZlIGFjY2VzcyB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgaW4gcGFyYWxsZWwgLSBhbmQgbm90IGhhdmluZwordG8gd29ycnkgYWJvdXQgdGhlIHN0cnVjdHVyZSBzdWRkZW5seSBnb2luZyBhd2F5IGZyb20gdW5kZXIgdGhlbSBqdXN0CitiZWNhdXNlIHRoZXkgc2xlcHQgb3IgZGlkIHNvbWV0aGluZyBlbHNlIGZvciBhIHdoaWxlLgorCitOb3RlIHRoYXQgbG9ja2luZyBpcyBfbm90XyBhIHJlcGxhY2VtZW50IGZvciByZWZlcmVuY2UgY291bnRpbmcuCitMb2NraW5nIGlzIHVzZWQgdG8ga2VlcCBkYXRhIHN0cnVjdHVyZXMgY29oZXJlbnQsIHdoaWxlIHJlZmVyZW5jZQorY291bnRpbmcgaXMgYSBtZW1vcnkgbWFuYWdlbWVudCB0ZWNobmlxdWUuICBVc3VhbGx5IGJvdGggYXJlIG5lZWRlZCwgYW5kCit0aGV5IGFyZSBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCBlYWNoIG90aGVyLgorCitNYW55IGRhdGEgc3RydWN0dXJlcyBjYW4gaW5kZWVkIGhhdmUgdHdvIGxldmVscyBvZiByZWZlcmVuY2UgY291bnRpbmcsCit3aGVuIHRoZXJlIGFyZSB1c2VycyBvZiBkaWZmZXJlbnQgImNsYXNzZXMiLiAgVGhlIHN1YmNsYXNzIGNvdW50IGNvdW50cwordGhlIG51bWJlciBvZiBzdWJjbGFzcyB1c2VycywgYW5kIGRlY3JlbWVudHMgdGhlIGdsb2JhbCBjb3VudCBqdXN0IG9uY2UKK3doZW4gdGhlIHN1YmNsYXNzIGNvdW50IGdvZXMgdG8gemVyby4KKworRXhhbXBsZXMgb2YgdGhpcyBraW5kIG9mICJtdWx0aS1sZXZlbC1yZWZlcmVuY2UtY291bnRpbmciIGNhbiBiZSBmb3VuZCBpbgorbWVtb3J5IG1hbmFnZW1lbnQgKCJzdHJ1Y3QgbW1fc3RydWN0IjogbW1fdXNlcnMgYW5kIG1tX2NvdW50KSwgYW5kIGluCitmaWxlc3lzdGVtIGNvZGUgKCJzdHJ1Y3Qgc3VwZXJfYmxvY2siOiBzX2NvdW50IGFuZCBzX2FjdGl2ZSkuCisKK1JlbWVtYmVyOiBpZiBhbm90aGVyIHRocmVhZCBjYW4gZmluZCB5b3VyIGRhdGEgc3RydWN0dXJlLCBhbmQgeW91IGRvbid0CitoYXZlIGEgcmVmZXJlbmNlIGNvdW50IG9uIGl0LCB5b3UgYWxtb3N0IGNlcnRhaW5seSBoYXZlIGEgYnVnLgorCisKKwkJQ2hhcHRlciAxMTogTWFjcm9zLCBFbnVtcywgSW5saW5lIGZ1bmN0aW9ucyBhbmQgUlRMCisKK05hbWVzIG9mIG1hY3JvcyBkZWZpbmluZyBjb25zdGFudHMgYW5kIGxhYmVscyBpbiBlbnVtcyBhcmUgY2FwaXRhbGl6ZWQuCisKKyNkZWZpbmUgQ09OU1RBTlQgMHgxMjM0NQorCitFbnVtcyBhcmUgcHJlZmVycmVkIHdoZW4gZGVmaW5pbmcgc2V2ZXJhbCByZWxhdGVkIGNvbnN0YW50cy4KKworQ0FQSVRBTElaRUQgbWFjcm8gbmFtZXMgYXJlIGFwcHJlY2lhdGVkIGJ1dCBtYWNyb3MgcmVzZW1ibGluZyBmdW5jdGlvbnMKK21heSBiZSBuYW1lZCBpbiBsb3dlciBjYXNlLgorCitHZW5lcmFsbHksIGlubGluZSBmdW5jdGlvbnMgYXJlIHByZWZlcmFibGUgdG8gbWFjcm9zIHJlc2VtYmxpbmcgZnVuY3Rpb25zLgorCitNYWNyb3Mgd2l0aCBtdWx0aXBsZSBzdGF0ZW1lbnRzIHNob3VsZCBiZSBlbmNsb3NlZCBpbiBhIGRvIC0gd2hpbGUgYmxvY2s6CisKKyNkZWZpbmUgbWFjcm9mdW4oYSwgYiwgYykgCQkJXAorCWRvIHsJCQkJCVwKKwkJaWYgKGEgPT0gNSkJCQlcCisJCQlkb190aGlzKGIsIGMpOwkJXAorCX0gd2hpbGUgKDApCisKK1RoaW5ncyB0byBhdm9pZCB3aGVuIHVzaW5nIG1hY3JvczoKKworMSkgbWFjcm9zIHRoYXQgYWZmZWN0IGNvbnRyb2wgZmxvdzoKKworI2RlZmluZSBGT08oeCkJCQkJCVwKKwlkbyB7CQkJCQlcCisJCWlmIChibGFoKHgpIDwgMCkJCVwKKwkJCXJldHVybiAtRUJVR0dFUkVEOwlcCisJfSB3aGlsZSgwKQorCitpcyBhIF92ZXJ5XyBiYWQgaWRlYS4gIEl0IGxvb2tzIGxpa2UgYSBmdW5jdGlvbiBjYWxsIGJ1dCBleGl0cyB0aGUgImNhbGxpbmciCitmdW5jdGlvbjsgZG9uJ3QgYnJlYWsgdGhlIGludGVybmFsIHBhcnNlcnMgb2YgdGhvc2Ugd2hvIHdpbGwgcmVhZCB0aGUgY29kZS4KKworMikgbWFjcm9zIHRoYXQgZGVwZW5kIG9uIGhhdmluZyBhIGxvY2FsIHZhcmlhYmxlIHdpdGggYSBtYWdpYyBuYW1lOgorCisjZGVmaW5lIEZPTyh2YWwpIGJhcihpbmRleCwgdmFsKQorCittaWdodCBsb29rIGxpa2UgYSBnb29kIHRoaW5nLCBidXQgaXQncyBjb25mdXNpbmcgYXMgaGVsbCB3aGVuIG9uZSByZWFkcyB0aGUKK2NvZGUgYW5kIGl0J3MgcHJvbmUgdG8gYnJlYWthZ2UgZnJvbSBzZWVtaW5nbHkgaW5ub2NlbnQgY2hhbmdlcy4KKworMykgbWFjcm9zIHdpdGggYXJndW1lbnRzIHRoYXQgYXJlIHVzZWQgYXMgbC12YWx1ZXM6IEZPTyh4KSA9IHk7IHdpbGwKK2JpdGUgeW91IGlmIHNvbWVib2R5IGUuZy4gdHVybnMgRk9PIGludG8gYW4gaW5saW5lIGZ1bmN0aW9uLgorCis0KSBmb3JnZXR0aW5nIGFib3V0IHByZWNlZGVuY2U6IG1hY3JvcyBkZWZpbmluZyBjb25zdGFudHMgdXNpbmcgZXhwcmVzc2lvbnMKK211c3QgZW5jbG9zZSB0aGUgZXhwcmVzc2lvbiBpbiBwYXJlbnRoZXNlcy4gQmV3YXJlIG9mIHNpbWlsYXIgaXNzdWVzIHdpdGgKK21hY3JvcyB1c2luZyBwYXJhbWV0ZXJzLgorCisjZGVmaW5lIENPTlNUQU5UIDB4NDAwMAorI2RlZmluZSBDT05TVEVYUCAoQ09OU1RBTlQgfCAzKQorCitUaGUgY3BwIG1hbnVhbCBkZWFscyB3aXRoIG1hY3JvcyBleGhhdXN0aXZlbHkuIFRoZSBnY2MgaW50ZXJuYWxzIG1hbnVhbCBhbHNvCitjb3ZlcnMgUlRMIHdoaWNoIGlzIHVzZWQgZnJlcXVlbnRseSB3aXRoIGFzc2VtYmx5IGxhbmd1YWdlIGluIHRoZSBrZXJuZWwuCisKKworCQlDaGFwdGVyIDEyOiBQcmludGluZyBrZXJuZWwgbWVzc2FnZXMKKworS2VybmVsIGRldmVsb3BlcnMgbGlrZSB0byBiZSBzZWVuIGFzIGxpdGVyYXRlLiBEbyBtaW5kIHRoZSBzcGVsbGluZworb2Yga2VybmVsIG1lc3NhZ2VzIHRvIG1ha2UgYSBnb29kIGltcHJlc3Npb24uIERvIG5vdCB1c2UgY3JpcHBsZWQKK3dvcmRzIGxpa2UgImRvbnQiIGFuZCB1c2UgImRvIG5vdCIgb3IgImRvbid0IiBpbnN0ZWFkLgorCitLZXJuZWwgbWVzc2FnZXMgZG8gbm90IGhhdmUgdG8gYmUgdGVybWluYXRlZCB3aXRoIGEgcGVyaW9kLgorCitQcmludGluZyBudW1iZXJzIGluIHBhcmVudGhlc2VzICglZCkgYWRkcyBubyB2YWx1ZSBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuCisKKworCQlDaGFwdGVyIDEzOiBSZWZlcmVuY2VzCisKK1RoZSBDIFByb2dyYW1taW5nIExhbmd1YWdlLCBTZWNvbmQgRWRpdGlvbgorYnkgQnJpYW4gVy4gS2VybmlnaGFuIGFuZCBEZW5uaXMgTS4gUml0Y2hpZS4KK1ByZW50aWNlIEhhbGwsIEluYy4sIDE5ODguCitJU0JOIDAtMTMtMTEwMzYyLTggKHBhcGVyYmFjayksIDAtMTMtMTEwMzcwLTkgKGhhcmRiYWNrKS4KK1VSTDogaHR0cDovL2NtLmJlbGwtbGFicy5jb20vY20vY3MvY2Jvb2svCisKK1RoZSBQcmFjdGljZSBvZiBQcm9ncmFtbWluZworYnkgQnJpYW4gVy4gS2VybmlnaGFuIGFuZCBSb2IgUGlrZS4KK0FkZGlzb24tV2VzbGV5LCBJbmMuLCAxOTk5LgorSVNCTiAwLTIwMS02MTU4Ni1YLgorVVJMOiBodHRwOi8vY20uYmVsbC1sYWJzLmNvbS9jbS9jcy90cG9wLworCitHTlUgbWFudWFscyAtIHdoZXJlIGluIGNvbXBsaWFuY2Ugd2l0aCBLJlIgYW5kIHRoaXMgdGV4dCAtIGZvciBjcHAsIGdjYywKK2djYyBpbnRlcm5hbHMgYW5kIGluZGVudCwgYWxsIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZworCitXRzE0IGlzIHRoZSBpbnRlcm5hdGlvbmFsIHN0YW5kYXJkaXphdGlvbiB3b3JraW5nIGdyb3VwIGZvciB0aGUgcHJvZ3JhbW1pbmcKK2xhbmd1YWdlIEMsIFVSTDogaHR0cDovL3N0ZC5ka3V1Zy5kay9KVEMxL1NDMjIvV0cxNC8KKworLS0KK0xhc3QgdXBkYXRlZCBvbiAxNiBGZWJydWFyeSAyMDA0IGJ5IGEgY29tbXVuaXR5IGVmZm9ydCBvbiBMS01MLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dCBiL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlM2NkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKQEAgLTAsMCArMSw1MjYgQEAKKyAgICAgICAgICAgICAgIER5bmFtaWMgRE1BIG1hcHBpbmcgdXNpbmcgdGhlIGdlbmVyaWMgZGV2aWNlCisgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIEphbWVzIEUuSi4gQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tPgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgRE1BIEFQSS4gIEZvciBhIG1vcmUgZ2VudGxlIGludHJvZHVjdGlvbgorcGhyYXNlZCBpbiB0ZXJtcyBvZiB0aGUgcGNpXyBlcXVpdmFsZW50cyAoYW5kIGFjdHVhbCBleGFtcGxlcykgc2VlCitETUEtbWFwcGluZy50eHQKKworVGhpcyBBUEkgaXMgc3BsaXQgaW50byB0d28gcGllY2VzLiAgUGFydCBJIGRlc2NyaWJlcyB0aGUgQVBJIGFuZCB0aGUKK2NvcnJlc3BvbmRpbmcgcGNpXyBBUEkuICBQYXJ0IElJIGRlc2NyaWJlcyB0aGUgZXh0ZW5zaW9ucyB0byB0aGUgQVBJCitmb3Igc3VwcG9ydGluZyBub24tY29uc2lzdGVudCBtZW1vcnkgbWFjaGluZXMuICBVbmxlc3MgeW91IGtub3cgdGhhdAoreW91ciBkcml2ZXIgYWJzb2x1dGVseSBoYXMgdG8gc3VwcG9ydCBub24tY29uc2lzdGVudCBwbGF0Zm9ybXMgKHRoaXMKK2lzIHVzdWFsbHkgb25seSBsZWdhY3kgcGxhdGZvcm1zKSB5b3Ugc2hvdWxkIG9ubHkgdXNlIHRoZSBBUEkKK2Rlc2NyaWJlZCBpbiBwYXJ0IEkuCisKK1BhcnQgSSAtIHBjaV8gYW5kIGRtYV8gRXF1aXZhbGVudCBBUEkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGdldCB0aGUgcGNpXyBBUEksIHlvdSBtdXN0ICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KK1RvIGdldCB0aGUgZG1hXyBBUEksIHlvdSBtdXN0ICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisKK1BhcnQgSWEgLSBVc2luZyBsYXJnZSBkbWEtY29oZXJlbnQgYnVmZmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgKgorZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGludCBmbGFnKQordm9pZCAqCitwY2lfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSkKKworQ29uc2lzdGVudCBtZW1vcnkgaXMgbWVtb3J5IGZvciB3aGljaCBhIHdyaXRlIGJ5IGVpdGhlciB0aGUgZGV2aWNlIG9yCit0aGUgcHJvY2Vzc29yIGNhbiBpbW1lZGlhdGVseSBiZSByZWFkIGJ5IHRoZSBwcm9jZXNzb3Igb3IgZGV2aWNlCit3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dCBjYWNoaW5nIGVmZmVjdHMuCisKK1RoaXMgcm91dGluZSBhbGxvY2F0ZXMgYSByZWdpb24gb2YgPHNpemU+IGJ5dGVzIG9mIGNvbnNpc3RlbnQgbWVtb3J5LgoraXQgYWxzbyByZXR1cm5zIGEgPGRtYV9oYW5kbGU+IHdoaWNoIG1heSBiZSBjYXN0IHRvIGFuIHVuc2lnbmVkCitpbnRlZ2VyIHRoZSBzYW1lIHdpZHRoIGFzIHRoZSBidXMgYW5kIHVzZWQgYXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MKK2Jhc2Ugb2YgdGhlIHJlZ2lvbi4KKworUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgcmVnaW9uIChpbiB0aGUgcHJvY2Vzc29yJ3MgdmlydHVhbAorYWRkcmVzcyBzcGFjZSkgb3IgTlVMTCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuCisKK05vdGU6IGNvbnNpc3RlbnQgbWVtb3J5IGNhbiBiZSBleHBlbnNpdmUgb24gc29tZSBwbGF0Zm9ybXMsIGFuZCB0aGUKK21pbmltdW0gYWxsb2NhdGlvbiBsZW5ndGggbWF5IGJlIGFzIGJpZyBhcyBhIHBhZ2UsIHNvIHlvdSBzaG91bGQKK2NvbnNvbGlkYXRlIHlvdXIgcmVxdWVzdHMgZm9yIGNvbnNpc3RlbnQgbWVtb3J5IGFzIG11Y2ggYXMgcG9zc2libGUuCitUaGUgc2ltcGxlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gdXNlIHRoZSBkbWFfcG9vbCBjYWxscyAoc2VlIGJlbG93KS4KKworVGhlIGZsYWcgcGFyYW1ldGVyIChkbWFfYWxsb2NfY29oZXJlbnQgb25seSkgYWxsb3dzIHRoZSBjYWxsZXIgdG8KK3NwZWNpZnkgdGhlIEdGUF8gZmxhZ3MgKHNlZSBrbWFsbG9jKSBmb3IgdGhlIGFsbG9jYXRpb24gKHRoZQoraW1wbGVtZW50YXRpb24gbWF5IGNob3NlIHRvIGlnbm9yZSBmbGFncyB0aGF0IGFmZmVjdCB0aGUgbG9jYXRpb24gb2YKK3RoZSByZXR1cm5lZCBtZW1vcnksIGxpa2UgR0ZQX0RNQSkuICBGb3IgcGNpX2FsbG9jX2NvbnNpc3RlbnQsIHlvdQorbXVzdCBhc3N1bWUgR0ZQX0FUT01JQyBiZWhhdmlvdXIuCisKK3ZvaWQKK2RtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyCisJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit2b2lkCitwY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkcgorCQkJICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQorCitGcmVlIHRoZSByZWdpb24gb2YgY29uc2lzdGVudCBtZW1vcnkgeW91IHByZXZpb3VzbHkgYWxsb2NhdGVkLiAgZGV2LAorc2l6ZSBhbmQgZG1hX2hhbmRsZSBtdXN0IGFsbCBiZSB0aGUgc2FtZSBhcyB0aG9zZSBwYXNzZWQgaW50byB0aGUKK2NvbnNpc3RlbnQgYWxsb2NhdGUuICBjcHVfYWRkciBtdXN0IGJlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcmV0dXJuZWQgYnkKK3RoZSBjb25zaXN0ZW50IGFsbG9jYXRlCisKKworUGFydCBJYiAtIFVzaW5nIHNtYWxsIGRtYS1jb2hlcmVudCBidWZmZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gZ2V0IHRoaXMgcGFydCBvZiB0aGUgZG1hXyBBUEksIHlvdSBtdXN0ICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisKK01hbnkgZHJpdmVycyBuZWVkIGxvdHMgb2Ygc21hbGwgZG1hLWNvaGVyZW50IG1lbW9yeSByZWdpb25zIGZvciBETUEKK2Rlc2NyaXB0b3JzIG9yIEkvTyBidWZmZXJzLiAgUmF0aGVyIHRoYW4gYWxsb2NhdGluZyBpbiB1bml0cyBvZiBhIHBhZ2UKK29yIG1vcmUgdXNpbmcgZG1hX2FsbG9jX2NvaGVyZW50KCksIHlvdSBjYW4gdXNlIERNQSBwb29scy4gIFRoZXNlIHdvcmsKK211Y2ggbGlrZSBhIGttZW1fY2FjaGVfdCwgZXhjZXB0IHRoYXQgdGhleSB1c2UgdGhlIGRtYS1jb2hlcmVudCBhbGxvY2F0b3IKK25vdCBfX2dldF9mcmVlX3BhZ2VzKCkuICBBbHNvLCB0aGV5IHVuZGVyc3RhbmQgY29tbW9uIGhhcmR3YXJlIGNvbnN0cmFpbnRzCitmb3IgYWxpZ25tZW50LCBsaWtlIHF1ZXVlIGhlYWRzIG5lZWRpbmcgdG8gYmUgYWxpZ25lZCBvbiBOIGJ5dGUgYm91bmRhcmllcy4KKworCisJc3RydWN0IGRtYV9wb29sICoKKwlkbWFfcG9vbF9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRldmljZSAqZGV2LAorCQkJc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IGFsbG9jKTsKKworCXN0cnVjdCBwY2lfcG9vbCAqCisJcGNpX3Bvb2xfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwY2lfZGV2aWNlICpkZXYsCisJCQlzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBzaXplX3QgYWxsb2MpOworCitUaGUgcG9vbCBjcmVhdGUoKSByb3V0aW5lcyBpbml0aWFsaXplIGEgcG9vbCBvZiBkbWEtY29oZXJlbnQgYnVmZmVycworZm9yIHVzZSB3aXRoIGEgZ2l2ZW4gZGV2aWNlLiAgSXQgbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHdoaWNoCitjYW4gc2xlZXAuCisKK1RoZSAibmFtZSIgaXMgZm9yIGRpYWdub3N0aWNzIChsaWtlIGEga21lbV9jYWNoZV90IG5hbWUpOyBkZXYgYW5kIHNpemUKK2FyZSBsaWtlIHdoYXQgeW91J2QgcGFzcyB0byBkbWFfYWxsb2NfY29oZXJlbnQoKS4gIFRoZSBkZXZpY2UncyBoYXJkd2FyZQorYWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciB0aGlzIHR5cGUgb2YgZGF0YSBpcyAiYWxpZ24iICh3aGljaCBpcyBleHByZXNzZWQKK2luIGJ5dGVzLCBhbmQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3bykuICBJZiB5b3VyIGRldmljZSBoYXMgbm8gYm91bmRhcnkKK2Nyb3NzaW5nIHJlc3RyaWN0aW9ucywgcGFzcyAwIGZvciBhbGxvYzsgcGFzc2luZyA0MDk2IHNheXMgbWVtb3J5IGFsbG9jYXRlZAorZnJvbSB0aGlzIHBvb2wgbXVzdCBub3QgY3Jvc3MgNEtCeXRlIGJvdW5kYXJpZXMuCisKKworCXZvaWQgKmRtYV9wb29sX2FsbG9jKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwgaW50IGdmcF9mbGFncywKKwkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpOworCisJdm9pZCAqcGNpX3Bvb2xfYWxsb2Moc3RydWN0IHBjaV9wb29sICpwb29sLCBpbnQgZ2ZwX2ZsYWdzLAorCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSk7CisKK1RoaXMgYWxsb2NhdGVzIG1lbW9yeSBmcm9tIHRoZSBwb29sOyB0aGUgcmV0dXJuZWQgbWVtb3J5IHdpbGwgbWVldCB0aGUgc2l6ZQorYW5kIGFsaWdubWVudCByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGF0IGNyZWF0aW9uIHRpbWUuICBQYXNzIEdGUF9BVE9NSUMgdG8KK3ByZXZlbnQgYmxvY2tpbmcsIG9yIGlmIGl0J3MgcGVybWl0dGVkIChub3QgaW5faW50ZXJydXB0LCBub3QgaG9sZGluZyBTTVAgbG9ja3MpCitwYXNzIEdGUF9LRVJORUwgdG8gYWxsb3cgYmxvY2tpbmcuICBMaWtlIGRtYV9hbGxvY19jb2hlcmVudCgpLCB0aGlzIHJldHVybnMKK3R3byB2YWx1ZXM6ICBhbiBhZGRyZXNzIHVzYWJsZSBieSB0aGUgY3B1LCBhbmQgdGhlIGRtYSBhZGRyZXNzIHVzYWJsZSBieSB0aGUKK3Bvb2wncyBkZXZpY2UuCisKKworCXZvaWQgZG1hX3Bvb2xfZnJlZShzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2wsIHZvaWQgKnZhZGRyLAorCQkJZG1hX2FkZHJfdCBhZGRyKTsKKworCXZvaWQgcGNpX3Bvb2xfZnJlZShzdHJ1Y3QgcGNpX3Bvb2wgKnBvb2wsIHZvaWQgKnZhZGRyLAorCQkJZG1hX2FkZHJfdCBhZGRyKTsKKworVGhpcyBwdXRzIG1lbW9yeSBiYWNrIGludG8gdGhlIHBvb2wuICBUaGUgcG9vbCBpcyB3aGF0IHdhcyBwYXNzZWQgdG8KK3RoZSB0aGUgcG9vbCBhbGxvY2F0aW9uIHJvdXRpbmU7IHRoZSBjcHUgYW5kIGRtYSBhZGRyZXNzZXMgYXJlIHdoYXQKK3dlcmUgcmV0dXJuZWQgd2hlbiB0aGF0IHJvdXRpbmUgYWxsb2NhdGVkIHRoZSBtZW1vcnkgYmVpbmcgZnJlZWQuCisKKworCXZvaWQgZG1hX3Bvb2xfZGVzdHJveShzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2wpOworCisJdm9pZCBwY2lfcG9vbF9kZXN0cm95KHN0cnVjdCBwY2lfcG9vbCAqcG9vbCk7CisKK1RoZSBwb29sIGRlc3Ryb3koKSByb3V0aW5lcyBmcmVlIHRoZSByZXNvdXJjZXMgb2YgdGhlIHBvb2wuICBUaGV5IG11c3QgYmUKK2NhbGxlZCBpbiBhIGNvbnRleHQgd2hpY2ggY2FuIHNsZWVwLiAgTWFrZSBzdXJlIHlvdSd2ZSBmcmVlZCBhbGwgYWxsb2NhdGVkCittZW1vcnkgYmFjayB0byB0aGUgcG9vbCBiZWZvcmUgeW91IGRlc3Ryb3kgaXQuCisKKworUGFydCBJYyAtIERNQSBhZGRyZXNzaW5nIGxpbWl0YXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW50CitkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCitpbnQKK3BjaV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCisKK0NoZWNrcyB0byBzZWUgaWYgdGhlIGRldmljZSBjYW4gc3VwcG9ydCBETUEgdG8gdGhlIG1lbW9yeSBkZXNjcmliZWQgYnkKK21hc2suCisKK1JldHVybnM6IDEgaWYgaXQgY2FuIGFuZCAwIGlmIGl0IGNhbid0LgorCitOb3RlczogVGhpcyByb3V0aW5lIG1lcmVseSB0ZXN0cyB0byBzZWUgaWYgdGhlIG1hc2sgaXMgcG9zc2libGUuICBJdAord29uJ3QgY2hhbmdlIHRoZSBjdXJyZW50IG1hc2sgc2V0dGluZ3MuICBJdCBpcyBtb3JlIGludGVuZGVkIGFzIGFuCitpbnRlcm5hbCBBUEkgZm9yIHVzZSBieSB0aGUgcGxhdGZvcm0gdGhhbiBhbiBleHRlcm5hbCBBUEkgZm9yIHVzZSBieQorZHJpdmVyIHdyaXRlcnMuCisKK2ludAorZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCitpbnQKK3BjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXZpY2UgKmRldiwgdTY0IG1hc2spCisKK0NoZWNrcyB0byBzZWUgaWYgdGhlIG1hc2sgaXMgcG9zc2libGUgYW5kIHVwZGF0ZXMgdGhlIGRldmljZQorcGFyYW1ldGVycyBpZiBpdCBpcy4KKworUmV0dXJuczogMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGlmIG5vdC4KKwordTY0CitkbWFfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KQorCitBZnRlciBzZXR0aW5nIHRoZSBtYXNrIHdpdGggZG1hX3NldF9tYXNrKCksIHRoaXMgQVBJIHJldHVybnMgdGhlCithY3R1YWwgbWFzayAod2l0aGluIHRoYXQgYWxyZWFkeSBzZXQpIHRoYXQgdGhlIHBsYXRmb3JtIGFjdHVhbGx5CityZXF1aXJlcyB0byBvcGVyYXRlIGVmZmljaWVudGx5LiAgVXN1YWxseSB0aGlzIG1lYW5zIHRoZSByZXR1cm5lZCBtYXNrCitpcyB0aGUgbWluaW11bSByZXF1aXJlZCB0byBjb3ZlciBhbGwgb2YgbWVtb3J5LiAgRXhhbWluaW5nIHRoZQorcmVxdWlyZWQgbWFzayBnaXZlcyBkcml2ZXJzIHdpdGggdmFyaWFibGUgZGVzY3JpcHRvciBzaXplcyB0aGUKK29wcG9ydHVuaXR5IHRvIHVzZSBzbWFsbGVyIGRlc2NyaXB0b3JzIGFzIG5lY2Vzc2FyeS4KKworUmVxdWVzdGluZyB0aGUgcmVxdWlyZWQgbWFzayBkb2VzIG5vdCBhbHRlciB0aGUgY3VycmVudCBtYXNrLiAgSWYgeW91Cit3aXNoIHRvIHRha2UgYWR2YW50YWdlIG9mIGl0LCB5b3Ugc2hvdWxkIGlzc3VlIGFub3RoZXIgZG1hX3NldF9tYXNrKCkKK2NhbGwgdG8gbG93ZXIgdGhlIG1hc2sgYWdhaW4uCisKKworUGFydCBJZCAtIFN0cmVhbWluZyBETUEgbWFwcGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RtYV9hZGRyX3QKK2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLAorCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCitkbWFfYWRkcl90CitwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgaW50IGRpcmVjdGlvbikKKworTWFwcyBhIHBpZWNlIG9mIHByb2Nlc3NvciB2aXJ0dWFsIG1lbW9yeSBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgYnkgdGhlCitkZXZpY2UgYW5kIHJldHVybnMgdGhlIHBoeXNpY2FsIGhhbmRsZSBvZiB0aGUgbWVtb3J5LgorCitUaGUgZGlyZWN0aW9uIGZvciBib3RoIGFwaSdzIG1heSBiZSBjb252ZXJ0ZWQgZnJlZWx5IGJ5IGNhc3RpbmcuCitIb3dldmVyIHRoZSBkbWFfIEFQSSB1c2VzIGEgc3Ryb25nbHkgdHlwZWQgZW51bWVyYXRvciBmb3IgaXRzCitkaXJlY3Rpb246CisKK0RNQV9OT05FCQk9IFBDSV9ETUFfTk9ORQkJbm8gZGlyZWN0aW9uICh1c2VkIGZvcgorCQkJCQkJZGVidWdnaW5nKQorRE1BX1RPX0RFVklDRQkJPSBQQ0lfRE1BX1RPREVWSUNFCWRhdGEgaXMgZ29pbmcgZnJvbSB0aGUKKwkJCQkJCW1lbW9yeSB0byB0aGUgZGV2aWNlCitETUFfRlJPTV9ERVZJQ0UJCT0gUENJX0RNQV9GUk9NREVWSUNFCWRhdGEgaXMgY29taW5nIGZyb20KKwkJCQkJCXRoZSBkZXZpY2UgdG8gdGhlCisJCQkJCQltZW1vcnkKK0RNQV9CSURJUkVDVElPTkFMCT0gUENJX0RNQV9CSURJUkVDVElPTkFMCWRpcmVjdGlvbiBpc24ndCBrbm93bgorCitOb3RlczogIE5vdCBhbGwgbWVtb3J5IHJlZ2lvbnMgaW4gYSBtYWNoaW5lIGNhbiBiZSBtYXBwZWQgYnkgdGhpcworQVBJLiAgRnVydGhlciwgcmVnaW9ucyB0aGF0IGFwcGVhciB0byBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgaW4KK2tlcm5lbCB2aXJ0dWFsIHNwYWNlIG1heSBub3QgYmUgY29udGlndW91cyBhcyBwaHlzaWNhbCBtZW1vcnkuICBTaW5jZQordGhpcyBBUEkgZG9lcyBub3QgcHJvdmlkZSBhbnkgc2NhdHRlci9nYXRoZXIgY2FwYWJpbGl0eSwgaXQgd2lsbCBmYWlsCitpZiB0aGUgdXNlciB0cmllcyB0byBtYXAgYSBub24gcGh5c2ljYWxseSBjb250aWd1b3VzIHBpZWNlIG9mIG1lbW9yeS4KK0ZvciB0aGlzIHJlYXNvbiwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBtZW1vcnkgbWFwcGVkIGJ5IHRoaXMgQVBJIGJlCitvYnRhaW5lZCBvbmx5IGZyb20gc291cmNlcyB3aGljaCBndWFyYW50ZWUgdG8gYmUgcGh5c2ljYWxseSBjb250aWd1b3VzCisobGlrZSBrbWFsbG9jKS4KKworRnVydGhlciwgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBtdXN0IGJlIHdpdGhpbiB0aGUKK2RtYV9tYXNrIG9mIHRoZSBkZXZpY2UgKHRoZSBkbWFfbWFzayByZXByZXNlbnRzIGEgYml0IG1hc2sgb2YgdGhlCithZGRyZXNzYWJsZSByZWdpb24gZm9yIHRoZSBkZXZpY2UuICBpLmUuIGlmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mCit0aGUgbWVtb3J5IGFuZGVkIHdpdGggdGhlIGRtYV9tYXNrIGlzIHN0aWxsIGVxdWFsIHRvIHRoZSBwaHlzaWNhbAorYWRkcmVzcywgdGhlbiB0aGUgZGV2aWNlIGNhbiBwZXJmb3JtIERNQSB0byB0aGUgbWVtb3J5KS4gIEluIG9yZGVyIHRvCitlbnN1cmUgdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBrbWFsbG9jIGlzIHdpdGhpbiB0aGUgZG1hX21hc2ssCit0aGUgZHJpdmVyIG1heSBzcGVjaWZ5IHZhcmlvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGZsYWdzIHRvIHJlc3RyaWN0Cit0aGUgcGh5c2ljYWwgbWVtb3J5IHJhbmdlIG9mIHRoZSBhbGxvY2F0aW9uIChlLmcuIG9uIHg4NiwgR0ZQX0RNQQorZ3VhcmFudGVlcyB0byBiZSB3aXRoaW4gdGhlIGZpcnN0IDE2TWIgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIG1lbW9yeSwKK2FzIHJlcXVpcmVkIGJ5IElTQSBkZXZpY2VzKS4KKworTm90ZSBhbHNvIHRoYXQgdGhlIGFib3ZlIGNvbnN0cmFpbnRzIG9uIHBoeXNpY2FsIGNvbnRpZ3VpdHkgYW5kCitkbWFfbWFzayBtYXkgbm90IGFwcGx5IGlmIHRoZSBwbGF0Zm9ybSBoYXMgYW4gSU9NTVUgKGEgZGV2aWNlIHdoaWNoCitzdXBwbGllcyBhIHBoeXNpY2FsIHRvIHZpcnR1YWwgbWFwcGluZyBiZXR3ZWVuIHRoZSBJL08gbWVtb3J5IGJ1cyBhbmQKK3RoZSBkZXZpY2UpLiAgSG93ZXZlciwgdG8gYmUgcG9ydGFibGUsIGRldmljZSBkcml2ZXIgd3JpdGVycyBtYXkgKm5vdCoKK2Fzc3VtZSB0aGF0IHN1Y2ggYW4gSU9NTVUgZXhpc3RzLgorCitXYXJuaW5nczogIE1lbW9yeSBjb2hlcmVuY3kgb3BlcmF0ZXMgYXQgYSBncmFudWxhcml0eSBjYWxsZWQgdGhlIGNhY2hlCitsaW5lIHdpZHRoLiAgSW4gb3JkZXIgZm9yIG1lbW9yeSBtYXBwZWQgYnkgdGhpcyBBUEkgdG8gb3BlcmF0ZQorY29ycmVjdGx5LCB0aGUgbWFwcGVkIHJlZ2lvbiBtdXN0IGJlZ2luIGV4YWN0bHkgb24gYSBjYWNoZSBsaW5lCitib3VuZGFyeSBhbmQgZW5kIGV4YWN0bHkgb24gb25lICh0byBwcmV2ZW50IHR3byBzZXBhcmF0ZWx5IG1hcHBlZAorcmVnaW9ucyBmcm9tIHNoYXJpbmcgYSBzaW5nbGUgY2FjaGUgbGluZSkuICBTaW5jZSB0aGUgY2FjaGUgbGluZSBzaXplCittYXkgbm90IGJlIGtub3duIGF0IGNvbXBpbGUgdGltZSwgdGhlIEFQSSB3aWxsIG5vdCBlbmZvcmNlIHRoaXMKK3JlcXVpcmVtZW50LiAgVGhlcmVmb3JlLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGRyaXZlciB3cml0ZXJzIHdobworZG9uJ3QgdGFrZSBzcGVjaWFsIGNhcmUgdG8gZGV0ZXJtaW5lIHRoZSBjYWNoZSBsaW5lIHNpemUgYXQgcnVuIHRpbWUKK29ubHkgbWFwIHZpcnR1YWwgcmVnaW9ucyB0aGF0IGJlZ2luIGFuZCBlbmQgb24gcGFnZSBib3VuZGFyaWVzICh3aGljaAorYXJlIGd1YXJhbnRlZWQgYWxzbyB0byBiZSBjYWNoZSBsaW5lIGJvdW5kYXJpZXMpLgorCitETUFfVE9fREVWSUNFIHN5bmNocm9uaXNhdGlvbiBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGxhc3QgbW9kaWZpY2F0aW9uCitvZiB0aGUgbWVtb3J5IHJlZ2lvbiBieSB0aGUgc29mdHdhcmUgYW5kIGJlZm9yZSBpdCBpcyBoYW5kZWQgb2ZmIHRvCit0aGUgZHJpdmVyLiAgT25jZSB0aGlzIHByaW1pdGl2ZSBpcyB1c2VkLiAgTWVtb3J5IGNvdmVyZWQgYnkgdGhpcworcHJpbWl0aXZlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHJlYWQgb25seSBieSB0aGUgZGV2aWNlLiAgSWYgdGhlIGRldmljZQorbWF5IHdyaXRlIHRvIGl0IGF0IGFueSBwb2ludCwgaXQgc2hvdWxkIGJlIERNQV9CSURJUkVDVElPTkFMIChzZWUKK2JlbG93KS4KKworRE1BX0ZST01fREVWSUNFIHN5bmNocm9uaXNhdGlvbiBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBkcml2ZXIKK2FjY2Vzc2VzIGRhdGEgdGhhdCBtYXkgYmUgY2hhbmdlZCBieSB0aGUgZGV2aWNlLiAgVGhpcyBtZW1vcnkgc2hvdWxkCitiZSB0cmVhdGVkIGFzIHJlYWQgb25seSBieSB0aGUgZHJpdmVyLiAgSWYgdGhlIGRyaXZlciBuZWVkcyB0byB3cml0ZQordG8gaXQgYXQgYW55IHBvaW50LCBpdCBzaG91bGQgYmUgRE1BX0JJRElSRUNUSU9OQUwgKHNlZSBiZWxvdykuCisKK0RNQV9CSURJUkVDVElPTkFMIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmc6IGl0IG1lYW5zIHRoYXQgdGhlIGRyaXZlcgoraXNuJ3Qgc3VyZSBpZiB0aGUgbWVtb3J5IHdhcyBtb2RpZmllZCBiZWZvcmUgYmVpbmcgaGFuZGVkIG9mZiB0byB0aGUKK2RldmljZSBhbmQgYWxzbyBpc24ndCBzdXJlIGlmIHRoZSBkZXZpY2Ugd2lsbCBhbHNvIG1vZGlmeSBpdC4gIFRodXMsCit5b3UgbXVzdCBhbHdheXMgc3luYyBiaWRpcmVjdGlvbmFsIG1lbW9yeSB0d2ljZTogb25jZSBiZWZvcmUgdGhlCittZW1vcnkgaXMgaGFuZGVkIG9mZiB0byB0aGUgZGV2aWNlICh0byBtYWtlIHN1cmUgYWxsIG1lbW9yeSBjaGFuZ2VzCithcmUgZmx1c2hlZCBmcm9tIHRoZSBwcm9jZXNzb3IpIGFuZCBvbmNlIGJlZm9yZSB0aGUgZGF0YSBtYXkgYmUKK2FjY2Vzc2VkIGFmdGVyIGJlaW5nIHVzZWQgYnkgdGhlIGRldmljZSAodG8gbWFrZSBzdXJlIGFueSBwcm9jZXNzb3IKK2NhY2hlIGxpbmVzIGFyZSB1cGRhdGVkIHdpdGggZGF0YSB0aGF0IHRoZSBkZXZpY2UgbWF5IGhhdmUgY2hhbmdlZC4KKwordm9pZAorZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZAorcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCSBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKKworVW5tYXBzIHRoZSByZWdpb24gcHJldmlvdXNseSBtYXBwZWQuICBBbGwgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGluCittdXN0IGJlIGlkZW50aWNhbCB0byB0aG9zZSBwYXNzZWQgaW4gKGFuZCByZXR1cm5lZCkgYnkgdGhlIG1hcHBpbmcKK0FQSS4KKworZG1hX2FkZHJfdAorZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCitkbWFfYWRkcl90CitwY2lfbWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3ZvaWQKK2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQKK3BjaV91bm1hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKKwkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCisKK0FQSSBmb3IgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGZvciBwYWdlcy4gIEFsbCB0aGUgbm90ZXMgYW5kIHdhcm5pbmdzCitmb3IgdGhlIG90aGVyIG1hcHBpbmcgQVBJcyBhcHBseSBoZXJlLiAgQWxzbywgYWx0aG91Z2ggdGhlIDxvZmZzZXQ+CithbmQgPHNpemU+IHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkIHRvIGRvIHBhcnRpYWwgcGFnZSBtYXBwaW5nLCBpdCBpcworcmVjb21tZW5kZWQgdGhhdCB5b3UgbmV2ZXIgdXNlIHRoZXNlIHVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB0aGUKK2NhY2hlIHdpZHRoIGlzLgorCitpbnQKK2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCisKK2ludAorcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCisKK0luIHNvbWUgY2lyY3Vtc3RhbmNlcyBkbWFfbWFwX3NpbmdsZSBhbmQgZG1hX21hcF9wYWdlIHdpbGwgZmFpbCB0byBjcmVhdGUKK2EgbWFwcGluZy4gQSBkcml2ZXIgY2FuIGNoZWNrIGZvciB0aGVzZSBlcnJvcnMgYnkgdGVzdGluZyB0aGUgcmV0dXJuZWQKK2RtYSBhZGRyZXNzIHdpdGggZG1hX21hcHBpbmdfZXJyb3IoKS4gQSBub24gemVybyByZXR1cm4gdmFsdWUgbWVhbnMgdGhlIG1hcHBpbmcKK2NvdWxkIG5vdCBiZSBjcmVhdGVkIGFuZCB0aGUgZHJpdmVyIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiAoZWcKK3JlZHVjZSBjdXJyZW50IERNQSBtYXBwaW5nIHVzYWdlIG9yIGRlbGF5IGFuZCB0cnkgYWdhaW4gbGF0ZXIpLgorCitpbnQKK2RtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoraW50CitwY2lfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCisKK01hcHMgYSBzY2F0dGVyIGdhdGhlciBsaXN0IGZyb20gdGhlIGJsb2NrIGxheWVyLgorCitSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIHNlZ21lbnRzIG1hcHBlZCAodGhpcyBtYXkgYmUgc2hvcnRlZAordGhhbiA8bmVudHM+IHBhc3NlZCBpbiBpZiB0aGUgYmxvY2sgbGF5ZXIgZGV0ZXJtaW5lcyB0aGF0IHNvbWUKK2VsZW1lbnRzIG9mIHRoZSBzY2F0dGVyL2dhdGhlciBsaXN0IGFyZSBwaHlzaWNhbGx5IGFkamFjZW50IGFuZCB0aHVzCittYXkgYmUgbWFwcGVkIHdpdGggYSBzaW5nbGUgZW50cnkpLgorCitQbGVhc2Ugbm90ZSB0aGF0IHRoZSBzZyBjYW5ub3QgYmUgbWFwcGVkIGFnYWluIGlmIGl0IGhhcyBiZWVuIG1hcHBlZCBvbmNlLgorVGhlIG1hcHBpbmcgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIGRlc3Ryb3kgaW5mb3JtYXRpb24gaW4gdGhlIHNnLgorCitBcyB3aXRoIHRoZSBvdGhlciBtYXBwaW5nIGludGVyZmFjZXMsIGRtYV9tYXBfc2cgY2FuIGZhaWwuIFdoZW4gaXQKK2RvZXMsIDAgaXMgcmV0dXJuZWQgYW5kIGEgZHJpdmVyIG11c3QgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24uIEl0IGlzCitjcml0aWNhbCB0aGF0IHRoZSBkcml2ZXIgZG8gc29tZXRoaW5nLCBpbiB0aGUgY2FzZSBvZiBhIGJsb2NrIGRyaXZlcgorYWJvcnRpbmcgdGhlIHJlcXVlc3Qgb3IgZXZlbiBvb3BzaW5nIGlzIGJldHRlciB0aGFuIGRvaW5nIG5vdGhpbmcgYW5kCitjb3JydXB0aW5nIHRoZSBmaWxlc3lzdGVtLgorCit2b2lkCitkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKKwkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQKK3BjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCisKK3VubWFwIHRoZSBwcmV2aW91c2x5IG1hcHBlZCBzY2F0dGVyL2dhdGhlciBsaXN0LiAgQWxsIHRoZSBwYXJhbWV0ZXJzCittdXN0IGJlIHRoZSBzYW1lIGFzIHRob3NlIGFuZCBwYXNzZWQgaW4gdG8gdGhlIHNjYXR0ZXIvZ2F0aGVyIG1hcHBpbmcKK0FQSS4KKworTm90ZTogPG5lbnRzPiBtdXN0IGJlIHRoZSBudW1iZXIgeW91IHBhc3NlZCBpbiwgKm5vdCogdGhlIG51bWJlciBvZgorcGh5c2ljYWwgZW50cmllcyByZXR1cm5lZC4KKwordm9pZAorZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZAorcGNpX2RtYV9zeW5jX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQordm9pZAorZG1hX3N5bmNfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit2b2lkCitwY2lfZG1hX3N5bmNfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKKworc3luY2hyb25pc2UgYSBzaW5nbGUgY29udGlndW91cyBvciBzY2F0dGVyL2dhdGhlciBtYXBwaW5nLiAgQWxsIHRoZQorcGFyYW1ldGVycyBtdXN0IGJlIHRoZSBzYW1lIGFzIHRob3NlIHBhc3NlZCBpbnRvIHRoZSBzaW5nbGUgbWFwcGluZworQVBJLgorCitOb3RlczogIFlvdSBtdXN0IGRvIHRoaXM6CisKKy0gQmVmb3JlIHJlYWRpbmcgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4gYnkgRE1BIGZyb20gdGhlIGRldmljZQorICAodXNlIHRoZSBETUFfRlJPTV9ERVZJQ0UgZGlyZWN0aW9uKQorLSBBZnRlciB3cml0aW5nIHZhbHVlcyB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgZGV2aWNlIHVzaW5nIERNQQorICAodXNlIHRoZSBETUFfVE9fREVWSUNFKSBkaXJlY3Rpb24KKy0gYmVmb3JlICphbmQqIGFmdGVyIGhhbmRpbmcgbWVtb3J5IHRvIHRoZSBkZXZpY2UgaWYgdGhlIG1lbW9yeSBpcworICBETUFfQklESVJFQ1RJT05BTAorCitTZWUgYWxzbyBkbWFfbWFwX3NpbmdsZSgpLgorCisKK1BhcnQgSUkgLSBBZHZhbmNlZCBkbWFfIHVzYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXYXJuaW5nOiBUaGVzZSBwaWVjZXMgb2YgdGhlIERNQSBBUEkgaGF2ZSBubyBQQ0kgZXF1aXZhbGVudC4gIFRoZXkKK3Nob3VsZCBhbHNvIG5vdCBiZSB1c2VkIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcywgc2luY2UgdGhleSBjYXRlciBmb3IKK3VubGlrZWx5IGNvcm5lciBjYXNlcyB0aGF0IGRvbid0IGJlbG9uZyBpbiB1c3VhbCBkcml2ZXJzLgorCitJZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZCBob3cgY2FjaGUgbGluZSBjb2hlcmVuY3kgd29ya3MgYmV0d2VlbiBhCitwcm9jZXNzb3IgYW5kIGFuIEkvTyBkZXZpY2UsIHlvdSBzaG91bGQgbm90IGJlIHVzaW5nIHRoaXMgcGFydCBvZiB0aGUKK0FQSSBhdCBhbGwuCisKK3ZvaWQgKgorZG1hX2FsbG9jX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgICAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgaW50IGZsYWcpCisKK0lkZW50aWNhbCB0byBkbWFfYWxsb2NfY29oZXJlbnQoKSBleGNlcHQgdGhhdCB0aGUgcGxhdGZvcm0gd2lsbAorY2hvb3NlIHRvIHJldHVybiBlaXRoZXIgY29uc2lzdGVudCBvciBub24tY29uc2lzdGVudCBtZW1vcnkgYXMgaXQgc2VlcworZml0LiAgQnkgdXNpbmcgdGhpcyBBUEksIHlvdSBhcmUgZ3VhcmFudGVlaW5nIHRvIHRoZSBwbGF0Zm9ybSB0aGF0IHlvdQoraGF2ZSBhbGwgdGhlIGNvcnJlY3QgYW5kIG5lY2Vzc2FyeSBzeW5jIHBvaW50cyBmb3IgdGhpcyBtZW1vcnkgaW4gdGhlCitkcml2ZXIgc2hvdWxkIGl0IGNob29zZSB0byByZXR1cm4gbm9uLWNvbnNpc3RlbnQgbWVtb3J5LgorCitOb3RlOiB3aGVyZSB0aGUgcGxhdGZvcm0gY2FuIHJldHVybiBjb25zaXN0ZW50IG1lbW9yeSwgaXQgd2lsbAorZ3VhcmFudGVlIHRoYXQgdGhlIHN5bmMgcG9pbnRzIGJlY29tZSBub3BzLgorCitXYXJuaW5nOiAgSGFuZGxpbmcgbm9uLWNvbnNpc3RlbnQgbWVtb3J5IGlzIGEgcmVhbCBwYWluLiAgWW91IHNob3VsZAorb25seSBldmVyIHVzZSB0aGlzIEFQSSBpZiB5b3UgcG9zaXRpdmVseSBrbm93IHlvdXIgZHJpdmVyIHdpbGwgYmUKK3JlcXVpcmVkIHRvIHdvcmsgb24gb25lIG9mIHRoZSByYXJlICh1c3VhbGx5IG5vbi1QQ0kpIGFyY2hpdGVjdHVyZXMKK3RoYXQgc2ltcGx5IGNhbm5vdCBtYWtlIGNvbnNpc3RlbnQgbWVtb3J5LgorCit2b2lkCitkbWFfZnJlZV9ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKKworZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBub25jb25zaXN0ZW50IEFQSS4gIEFsbCBwYXJhbWV0ZXJzIG11c3QKK2JlIGlkZW50aWNhbCB0byB0aG9zZSBwYXNzZWQgaW4gKGFuZCByZXR1cm5lZCBieQorZG1hX2FsbG9jX25vbmNvaGVyZW50KCkpLgorCitpbnQKK2RtYV9pc19jb25zaXN0ZW50KGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKKworcmV0dXJucyB0cnVlIGlmIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSB0aGUgZG1hX2hhbmRsZSBpcyBhY3R1YWxseQorY29uc2lzdGVudC4KKworaW50CitkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQorCityZXR1cm5zIHRoZSBwcm9jZXNzb3IgY2FjaGUgYWxpZ25tZW50LiAgVGhpcyBpcyB0aGUgYWJzb2x1dGUgbWluaW11bQorYWxpZ25tZW50ICphbmQqIHdpZHRoIHRoYXQgeW91IG11c3Qgb2JzZXJ2ZSB3aGVuIGVpdGhlciBtYXBwaW5nCittZW1vcnkgb3IgZG9pbmcgcGFydGlhbCBmbHVzaGVzLgorCitOb3RlczogVGhpcyBBUEkgbWF5IHJldHVybiBhIG51bWJlciAqbGFyZ2VyKiB0aGFuIHRoZSBhY3R1YWwgY2FjaGUKK2xpbmUsIGJ1dCBpdCB3aWxsIGd1YXJhbnRlZSB0aGF0IG9uZSBvciBtb3JlIGNhY2hlIGxpbmVzIGZpdCBleGFjdGx5CitpbnRvIHRoZSB3aWR0aCByZXR1cm5lZCBieSB0aGlzIGNhbGwuICBJdCB3aWxsIGFsc28gYWx3YXlzIGJlIGEgcG93ZXIKK29mIHR3byBmb3IgZWFzeSBhbGlnbm1lbnQKKwordm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKworZG9lcyBhIHBhcnRpYWwgc3luYy4gIHN0YXJ0aW5nIGF0IG9mZnNldCBhbmQgY29udGludWluZyBmb3Igc2l6ZS4gIFlvdQorbXVzdCBiZSBjYXJlZnVsIHRvIG9ic2VydmUgdGhlIGNhY2hlIGFsaWdubWVudCBhbmQgd2lkdGggd2hlbiBkb2luZworYW55dGhpbmcgbGlrZSB0aGlzLiAgWW91IG11c3QgYWxzbyBiZSBleHRyYSBjYXJlZnVsIGFib3V0IGFjY2Vzc2luZworbWVtb3J5IHlvdSBpbnRlbmQgdG8gc3luYyBwYXJ0aWFsbHkuCisKK3ZvaWQKK2RtYV9jYWNoZV9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCitEbyBhIHBhcnRpYWwgc3luYyBvZiBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIGJ5CitkbWFfYWxsb2Nfbm9uY29oZXJlbnQoKSwgc3RhcnRpbmcgYXQgdmlydHVhbCBhZGRyZXNzIHZhZGRyIGFuZAorY29udGludWluZyBvbiBmb3Igc2l6ZS4gIEFnYWluLCB5b3UgKm11c3QqIG9ic2VydmUgdGhlIGNhY2hlIGxpbmUKK2JvdW5kYXJpZXMgd2hlbiBkb2luZyB0aGlzLgorCitpbnQKK2RtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsCisJCQkgICAgZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUsIGludAorCQkJICAgIGZsYWdzKQorCisKK0RlY2xhcmUgcmVnaW9uIG9mIG1lbW9yeSB0byBiZSBoYW5kZWQgb3V0IGJ5IGRtYV9hbGxvY19jb2hlcmVudCB3aGVuCitpdCdzIGFza2VkIGZvciBjb2hlcmVudCBtZW1vcnkgZm9yIHRoaXMgZGV2aWNlLgorCitidXNfYWRkciBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0byB3aGljaCB0aGUgbWVtb3J5IGlzIGN1cnJlbnRseQorYXNzaWduZWQgaW4gdGhlIGJ1cyByZXNwb25kaW5nIHJlZ2lvbiAodGhpcyB3aWxsIGJlIHVzZWQgYnkgdGhlCitwbGF0Zm9ybSB0byBwZXJmb3JtIHRoZSBtYXBwaW5nKQorCitkZXZpY2VfYWRkciBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlIHByb2dyYW1tZWQKK3dpdGggYWN0dWFsbHkgdG8gYWRkcmVzcyB0aGlzIG1lbW9yeSAodGhpcyB3aWxsIGJlIGhhbmRlZCBvdXQgYXMgdGhlCitkbWFfYWRkcl90IGluIGRtYV9hbGxvY19jb2hlcmVudCgpKQorCitzaXplIGlzIHRoZSBzaXplIG9mIHRoZSBhcmVhIChtdXN0IGJlIG11bHRpcGxlcyBvZiBQQUdFX1NJWkUpLgorCitmbGFncyBjYW4gYmUgb3InZCB0b2dldGhlciBhbmQgYXJlCisKK0RNQV9NRU1PUllfTUFQIC0gcmVxdWVzdCB0aGF0IHRoZSBtZW1vcnkgcmV0dXJuZWQgZnJvbQorZG1hX2FsbG9jX2NvaGVyZW50KCkgYmUgZGlyZWN0bHkgd3JpdGVhYmxlLgorCitETUFfTUVNT1JZX0lPIC0gcmVxdWVzdCB0aGF0IHRoZSBtZW1vcnkgcmV0dXJuZWQgZnJvbQorZG1hX2FsbG9jX2NvaGVyZW50KCkgYmUgYWRkcmVzc2FibGUgdXNpbmcgcmVhZC93cml0ZS9tZW1jcHlfdG9pbyBldGMuCisKK09uZSBvciBib3RoIG9mIHRoZXNlIGZsYWdzIG11c3QgYmUgcHJlc2VudAorCitETUFfTUVNT1JZX0lOQ0xVREVTX0NISUxEUkVOIC0gbWFrZSB0aGUgZGVjbGFyZWQgbWVtb3J5IGJlIGFsbG9jYXRlZCBieQorZG1hX2FsbG9jX2NvaGVyZW50IG9mIGFueSBjaGlsZCBkZXZpY2VzIG9mIHRoaXMgb25lIChmb3IgbWVtb3J5IHJlc2lkaW5nCitvbiBhIGJyaWRnZSkuCisKK0RNQV9NRU1PUllfRVhDTFVTSVZFIC0gb25seSBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGUgZGVjbGFyZWQgcmVnaW9ucy4gCitEbyBub3QgYWxsb3cgZG1hX2FsbG9jX2NvaGVyZW50KCkgdG8gZmFsbCBiYWNrIHRvIHN5c3RlbSBtZW1vcnkgd2hlbgoraXQncyBvdXQgb2YgbWVtb3J5IGluIHRoZSBkZWNsYXJlZCByZWdpb24uCisKK1RoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBlaXRoZXIgRE1BX01FTU9SWV9NQVAgb3IgRE1BX01FTU9SWV9JTyBhbmQKK211c3QgY29ycmVzcG9uZCB0byBhIHBhc3NlZCBpbiBmbGFnIChpLmUuIG5vIHJldHVybmluZyBETUFfTUVNT1JZX0lPCitpZiBvbmx5IERNQV9NRU1PUllfTUFQIHdlcmUgcGFzc2VkIGluKSBmb3Igc3VjY2VzcyBvciB6ZXJvIGZvcgorZmFpbHVyZS4KKworTm90ZSwgZm9yIERNQV9NRU1PUllfSU8gcmV0dXJucywgYWxsIHN1YnNlcXVlbnQgbWVtb3J5IHJldHVybmVkIGJ5CitkbWFfYWxsb2NfY29oZXJlbnQoKSBtYXkgbm8gbG9uZ2VyIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LCBidXQgaW5zdGVhZAorbXVzdCBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgY29ycmVjdCBidXMgZnVuY3Rpb25zLiAgSWYgeW91ciBkcml2ZXIKK2lzbid0IHByZXBhcmVkIHRvIGhhbmRsZSB0aGlzIGNvbnRpbmdlbmN5LCBpdCBzaG91bGQgbm90IHNwZWNpZnkKK0RNQV9NRU1PUllfSU8gaW4gdGhlIGlucHV0IGZsYWdzLgorCitBcyBhIHNpbXBsaWZpY2F0aW9uIGZvciB0aGUgcGxhdGZvcm1zLCBvbmx5ICpvbmUqIHN1Y2ggcmVnaW9uIG9mCittZW1vcnkgbWF5IGJlIGRlY2xhcmVkIHBlciBkZXZpY2UuCisKK0ZvciByZWFzb25zIG9mIGVmZmljaWVuY3ksIG1vc3QgcGxhdGZvcm1zIGNob29zZSB0byB0cmFjayB0aGUgZGVjbGFyZWQKK3JlZ2lvbiBvbmx5IGF0IHRoZSBncmFudWxhcml0eSBvZiBhIHBhZ2UuICBGb3Igc21hbGxlciBhbGxvY2F0aW9ucywKK3lvdSBzaG91bGQgdXNlIHRoZSBkbWFfcG9vbCgpIEFQSS4KKwordm9pZAorZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldikKKworUmVtb3ZlIHRoZSBtZW1vcnkgcmVnaW9uIHByZXZpb3VzbHkgZGVjbGFyZWQgZnJvbSB0aGUgc3lzdGVtLiAgVGhpcworQVBJIHBlcmZvcm1zICpubyogaW4tdXNlIGNoZWNraW5nIGZvciB0aGlzIHJlZ2lvbiBhbmQgd2lsbCByZXR1cm4KK3VuY29uZGl0aW9uYWxseSBoYXZpbmcgcmVtb3ZlZCBhbGwgdGhlIHJlcXVpcmVkIHN0cnVjdHVyZXMuICBJdCBpcyB0aGUKK2RyaXZlcnMgam9iIHRvIGVuc3VyZSB0aGF0IG5vIHBhcnRzIG9mIHRoaXMgbWVtb3J5IHJlZ2lvbiBhcmUKK2N1cnJlbnRseSBpbiB1c2UuCisKK3ZvaWQgKgorZG1hX21hcmtfZGVjbGFyZWRfbWVtb3J5X29jY3VwaWVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKQorCitUaGlzIGlzIHVzZWQgdG8gb2NjdXB5IHNwZWNpZmljIHJlZ2lvbnMgb2YgdGhlIGRlY2xhcmVkIHNwYWNlCisoZG1hX2FsbG9jX2NvaGVyZW50KCkgd2lsbCBoYW5kIG91dCB0aGUgZmlyc3QgZnJlZSByZWdpb24gaXQgZmluZHMpLgorCitkZXZpY2VfYWRkciBpcyB0aGUgKmRldmljZSogYWRkcmVzcyBvZiB0aGUgcmVnaW9uIHJlcXVlc3RlZAorCitzaXplIGlzIHRoZSBzaXplIChhbmQgc2hvdWxkIGJlIGEgcGFnZSBzaXplZCBtdWx0aXBsZSkuCisKK1RoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBlaXRoZXIgYSBwb2ludGVyIHRvIHRoZSBwcm9jZXNzb3IgdmlydHVhbAorYWRkcmVzcyBvZiB0aGUgbWVtb3J5LCBvciBhbiBlcnJvciAodmlhIFBUUl9FUlIoKSkgaWYgYW55IHBhcnQgb2YgdGhlCityZWdpb24gaXMgb2NjdXBpZWQuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGFjMzdmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKQEAgLTAsMCArMSw4ODEgQEAKKwkJCUR5bmFtaWMgRE1BIG1hcHBpbmcKKwkJCT09PT09PT09PT09PT09PT09PT0KKworCQkgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPgorCQkgUmljaGFyZCBIZW5kZXJzb24gPHJ0aEBjeWdudXMuY29tPgorCQkgIEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBETUEgbWFwcGluZyBzeXN0ZW0gaW4gdGVybXMgb2YgdGhlIHBjaV8KK0FQSS4gIEZvciBhIHNpbWlsYXIgQVBJIHRoYXQgd29ya3MgZm9yIGdlbmVyaWMgZGV2aWNlcywgc2VlCitETUEtQVBJLnR4dC4KKworTW9zdCBvZiB0aGUgNjRiaXQgcGxhdGZvcm1zIGhhdmUgc3BlY2lhbCBoYXJkd2FyZSB0aGF0IHRyYW5zbGF0ZXMgYnVzCithZGRyZXNzZXMgKERNQSBhZGRyZXNzZXMpIGludG8gcGh5c2ljYWwgYWRkcmVzc2VzLiAgVGhpcyBpcyBzaW1pbGFyIHRvCitob3cgcGFnZSB0YWJsZXMgYW5kL29yIGEgVExCIHRyYW5zbGF0ZXMgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwKK2FkZHJlc3NlcyBvbiBhIENQVS4gIFRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgZS5nLiBQQ0kgZGV2aWNlcyBjYW4KK2FjY2VzcyB3aXRoIGEgU2luZ2xlIEFkZHJlc3MgQ3ljbGUgKDMyYml0IERNQSBhZGRyZXNzKSBhbnkgcGFnZSBpbiB0aGUKKzY0Yml0IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuICBQcmV2aW91c2x5IGluIExpbnV4IHRob3NlIDY0Yml0CitwbGF0Zm9ybXMgaGFkIHRvIHNldCBhcnRpZmljaWFsIGxpbWl0cyBvbiB0aGUgbWF4aW11bSBSQU0gc2l6ZSBpbiB0aGUKK3N5c3RlbSwgc28gdGhhdCB0aGUgdmlydF90b19idXMoKSBzdGF0aWMgc2NoZW1lIHdvcmtzICh0aGUgRE1BIGFkZHJlc3MKK3RyYW5zbGF0aW9uIHRhYmxlcyB3ZXJlIHNpbXBseSBmaWxsZWQgb24gYm9vdHVwIHRvIG1hcCBlYWNoIGJ1cworYWRkcmVzcyB0byB0aGUgcGh5c2ljYWwgcGFnZSBfX3BhKGJ1c190b192aXJ0KCkpKS4KKworU28gdGhhdCBMaW51eCBjYW4gdXNlIHRoZSBkeW5hbWljIERNQSBtYXBwaW5nLCBpdCBuZWVkcyBzb21lIGhlbHAgZnJvbSB0aGUKK2RyaXZlcnMsIG5hbWVseSBpdCBoYXMgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhhdCBETUEgYWRkcmVzc2VzIHNob3VsZCBiZQorbWFwcGVkIG9ubHkgZm9yIHRoZSB0aW1lIHRoZXkgYXJlIGFjdHVhbGx5IHVzZWQgYW5kIHVubWFwcGVkIGFmdGVyIHRoZSBETUEKK3RyYW5zZmVyLgorCitUaGUgZm9sbG93aW5nIEFQSSB3aWxsIHdvcmsgb2YgY291cnNlIGV2ZW4gb24gcGxhdGZvcm1zIHdoZXJlIG5vIHN1Y2gKK2hhcmR3YXJlIGV4aXN0cywgc2VlIGUuZy4gaW5jbHVkZS9hc20taTM4Ni9wY2kuaCBmb3IgaG93IGl0IGlzIGltcGxlbWVudGVkIG9uCit0b3Agb2YgdGhlIHZpcnRfdG9fYnVzIGludGVyZmFjZS4KKworRmlyc3Qgb2YgYWxsLCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKK2lzIGluIHlvdXIgZHJpdmVyLiBUaGlzIGZpbGUgd2lsbCBvYnRhaW4gZm9yIHlvdSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKK2RtYV9hZGRyX3QgKHdoaWNoIGNhbiBob2xkIGFueSB2YWxpZCBETUEgYWRkcmVzcyBmb3IgdGhlIHBsYXRmb3JtKQordHlwZSB3aGljaCBzaG91bGQgYmUgdXNlZCBldmVyeXdoZXJlIHlvdSBob2xkIGEgRE1BIChidXMpIGFkZHJlc3MKK3JldHVybmVkIGZyb20gdGhlIERNQSBtYXBwaW5nIGZ1bmN0aW9ucy4KKworCQkJIFdoYXQgbWVtb3J5IGlzIERNQSdhYmxlPworCitUaGUgZmlyc3QgcGllY2Ugb2YgaW5mb3JtYXRpb24geW91IG11c3Qga25vdyBpcyB3aGF0IGtlcm5lbCBtZW1vcnkgY2FuCitiZSB1c2VkIHdpdGggdGhlIERNQSBtYXBwaW5nIGZhY2lsaXRpZXMuICBUaGVyZSBoYXMgYmVlbiBhbiB1bndyaXR0ZW4KK3NldCBvZiBydWxlcyByZWdhcmRpbmcgdGhpcywgYW5kIHRoaXMgdGV4dCBpcyBhbiBhdHRlbXB0IHRvIGZpbmFsbHkKK3dyaXRlIHRoZW0gZG93bi4KKworSWYgeW91IGFjcXVpcmVkIHlvdXIgbWVtb3J5IHZpYSB0aGUgcGFnZSBhbGxvY2F0b3IKKyhpLmUuIF9fZ2V0X2ZyZWVfcGFnZSooKSkgb3IgdGhlIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvcnMKKyhpLmUuIGttYWxsb2MoKSBvciBrbWVtX2NhY2hlX2FsbG9jKCkpIHRoZW4geW91IG1heSBETUEgdG8vZnJvbQordGhhdCBtZW1vcnkgdXNpbmcgdGhlIGFkZHJlc3NlcyByZXR1cm5lZCBmcm9tIHRob3NlIHJvdXRpbmVzLgorCitUaGlzIG1lYW5zIHNwZWNpZmljYWxseSB0aGF0IHlvdSBtYXkgX25vdF8gdXNlIHRoZSBtZW1vcnkvYWRkcmVzc2VzCityZXR1cm5lZCBmcm9tIHZtYWxsb2MoKSBmb3IgRE1BLiAgSXQgaXMgcG9zc2libGUgdG8gRE1BIHRvIHRoZQorX3VuZGVybHlpbmdfIG1lbW9yeSBtYXBwZWQgaW50byBhIHZtYWxsb2MoKSBhcmVhLCBidXQgdGhpcyByZXF1aXJlcword2Fsa2luZyBwYWdlIHRhYmxlcyB0byBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kIHRoZW4KK3RyYW5zbGF0aW5nIGVhY2ggb2YgdGhvc2UgcGFnZXMgYmFjayB0byBhIGtlcm5lbCBhZGRyZXNzIHVzaW5nCitzb21ldGhpbmcgbGlrZSBfX3ZhKCkuICBbIEVESVQ6IFVwZGF0ZSB0aGlzIHdoZW4gd2UgaW50ZWdyYXRlCitHZXJkIEtub3JyJ3MgZ2VuZXJpYyBjb2RlIHdoaWNoIGRvZXMgdGhpcy4gXQorCitUaGlzIHJ1bGUgYWxzbyBtZWFucyB0aGF0IHlvdSBtYXkgbm90IHVzZSBrZXJuZWwgaW1hZ2UgYWRkcmVzc2VzCisoaWUuIGl0ZW1zIGluIHRoZSBrZXJuZWwncyBkYXRhL3RleHQvYnNzIHNlZ21lbnQsIG9yIHlvdXIgZHJpdmVyJ3MpCitub3IgbWF5IHlvdSB1c2Uga2VybmVsIHN0YWNrIGFkZHJlc3NlcyBmb3IgRE1BLiAgQm90aCBvZiB0aGVzZSBpdGVtcworbWlnaHQgYmUgbWFwcGVkIHNvbWV3aGVyZSBlbnRpcmVseSBkaWZmZXJlbnQgdGhhbiB0aGUgcmVzdCBvZiBwaHlzaWNhbAorbWVtb3J5LgorCitBbHNvLCB0aGlzIG1lYW5zIHRoYXQgeW91IGNhbm5vdCB0YWtlIHRoZSByZXR1cm4gb2YgYSBrbWFwKCkKK2NhbGwgYW5kIERNQSB0by9mcm9tIHRoYXQuICBUaGlzIGlzIHNpbWlsYXIgdG8gdm1hbGxvYygpLgorCitXaGF0IGFib3V0IGJsb2NrIEkvTyBhbmQgbmV0d29ya2luZyBidWZmZXJzPyAgVGhlIGJsb2NrIEkvTyBhbmQKK25ldHdvcmtpbmcgc3Vic3lzdGVtcyBtYWtlIHN1cmUgdGhhdCB0aGUgYnVmZmVycyB0aGV5IHVzZSBhcmUgdmFsaWQKK2ZvciB5b3UgdG8gRE1BIGZyb20vdG8uCisKKwkJCURNQSBhZGRyZXNzaW5nIGxpbWl0YXRpb25zCisKK0RvZXMgeW91ciBkZXZpY2UgaGF2ZSBhbnkgRE1BIGFkZHJlc3NpbmcgbGltaXRhdGlvbnM/ICBGb3IgZXhhbXBsZSwgaXMKK3lvdXIgZGV2aWNlIG9ubHkgY2FwYWJsZSBvZiBkcml2aW5nIHRoZSBsb3cgb3JkZXIgMjQtYml0cyBvZiBhZGRyZXNzCitvbiB0aGUgUENJIGJ1cyBmb3IgU0FDIERNQSB0cmFuc2ZlcnM/ICBJZiBzbywgeW91IG5lZWQgdG8gaW5mb3JtIHRoZQorUENJIGxheWVyIG9mIHRoaXMgZmFjdC4KKworQnkgZGVmYXVsdCwgdGhlIGtlcm5lbCBhc3N1bWVzIHRoYXQgeW91ciBkZXZpY2UgY2FuIGFkZHJlc3MgdGhlIGZ1bGwKKzMyLWJpdHMgaW4gYSBTQUMgY3ljbGUuICBGb3IgYSA2NC1iaXQgREFDIGNhcGFibGUgZGV2aWNlLCB0aGlzIG5lZWRzCit0byBiZSBpbmNyZWFzZWQuICBBbmQgZm9yIGEgZGV2aWNlIHdpdGggbGltaXRhdGlvbnMsIGFzIGRpc2N1c3NlZCBpbgordGhlIHByZXZpb3VzIHBhcmFncmFwaCwgaXQgbmVlZHMgdG8gYmUgZGVjcmVhc2VkLgorCitwY2lfYWxsb2NfY29uc2lzdGVudCgpIGJ5IGRlZmF1bHQgd2lsbCByZXR1cm4gMzItYml0IERNQSBhZGRyZXNzZXMuCitQQ0ktWCBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIFBDSS1YIGRldmljZXMgdG8gc3VwcG9ydCA2NC1iaXQKK2FkZHJlc3NpbmcgKERBQykgZm9yIGFsbCB0cmFuc2FjdGlvbnMuIEFuZCBhdCBsZWFzdCBvbmUgcGxhdGZvcm0gKFNHSQorU04yKSByZXF1aXJlcyA2NC1iaXQgY29uc2lzdGVudCBhbGxvY2F0aW9ucyB0byBvcGVyYXRlIGNvcnJlY3RseSB3aGVuCit0aGUgSU8gYnVzIGlzIGluIFBDSS1YIG1vZGUuIFRoZXJlZm9yZSwgbGlrZSB3aXRoIHBjaV9zZXRfZG1hX21hc2soKSwKK2l0J3MgZ29vZCBwcmFjdGljZSB0byBjYWxsIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpIHRvIHNldCB0aGUKK2FwcHJvcHJpYXRlIG1hc2sgZXZlbiBpZiB5b3VyIGRldmljZSBvbmx5IHN1cHBvcnRzIDMyLWJpdCBETUEKKyhkZWZhdWx0KSBhbmQgZXNwZWNpYWxseSBpZiBpdCdzIGEgUENJLVggZGV2aWNlLgorCitGb3IgY29ycmVjdCBvcGVyYXRpb24sIHlvdSBtdXN0IGludGVycm9nYXRlIHRoZSBQQ0kgbGF5ZXIgaW4geW91cgorZGV2aWNlIHByb2JlIHJvdXRpbmUgdG8gc2VlIGlmIHRoZSBQQ0kgY29udHJvbGxlciBvbiB0aGUgbWFjaGluZSBjYW4KK3Byb3Blcmx5IHN1cHBvcnQgdGhlIERNQSBhZGRyZXNzaW5nIGxpbWl0YXRpb24geW91ciBkZXZpY2UgaGFzLiAgSXQgaXMKK2dvb2Qgc3R5bGUgdG8gZG8gdGhpcyBldmVuIGlmIHlvdXIgZGV2aWNlIGhvbGRzIHRoZSBkZWZhdWx0IHNldHRpbmcsCitiZWNhdXNlIHRoaXMgc2hvd3MgdGhhdCB5b3UgZGlkIHRoaW5rIGFib3V0IHRoZXNlIGlzc3VlcyB3cnQuIHlvdXIKK2RldmljZS4KKworVGhlIHF1ZXJ5IGlzIHBlcmZvcm1lZCB2aWEgYSBjYWxsIHRvIHBjaV9zZXRfZG1hX21hc2soKToKKworCWludCBwY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgZGV2aWNlX21hc2spOworCitUaGUgcXVlcnkgZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMgaXMgcGVyZm9ybWVkIHZpYSBhIGEgY2FsbCB0bworcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKCk6CisKKwlpbnQgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgZGV2aWNlX21hc2spOworCitIZXJlLCBwZGV2IGlzIGEgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBzdHJ1Y3Qgb2YgeW91ciBkZXZpY2UsIGFuZAorZGV2aWNlX21hc2sgaXMgYSBiaXQgbWFzayBkZXNjcmliaW5nIHdoaWNoIGJpdHMgb2YgYSBQQ0kgYWRkcmVzcyB5b3VyCitkZXZpY2Ugc3VwcG9ydHMuICBJdCByZXR1cm5zIHplcm8gaWYgeW91ciBjYXJkIGNhbiBwZXJmb3JtIERNQQorcHJvcGVybHkgb24gdGhlIG1hY2hpbmUgZ2l2ZW4gdGhlIGFkZHJlc3MgbWFzayB5b3UgcHJvdmlkZWQuCisKK0lmIGl0IHJldHVybnMgbm9uLXplcm8sIHlvdXIgZGV2aWNlIGNhbiBub3QgcGVyZm9ybSBETUEgcHJvcGVybHkgb24KK3RoaXMgcGxhdGZvcm0sIGFuZCBhdHRlbXB0aW5nIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGluIHVuZGVmaW5lZAorYmVoYXZpb3IuICBZb3UgbXVzdCBlaXRoZXIgdXNlIGEgZGlmZmVyZW50IG1hc2ssIG9yIG5vdCB1c2UgRE1BLgorCitUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIGZhaWx1cmUgY2FzZSwgeW91IGhhdmUgdGhyZWUgb3B0aW9uczoKKworMSkgVXNlIGFub3RoZXIgRE1BIG1hc2ssIGlmIHBvc3NpYmxlIChzZWUgYmVsb3cpLgorMikgVXNlIHNvbWUgbm9uLURNQSBtb2RlIGZvciBkYXRhIHRyYW5zZmVyLCBpZiBwb3NzaWJsZS4KKzMpIElnbm9yZSB0aGlzIGRldmljZSBhbmQgZG8gbm90IGluaXRpYWxpemUgaXQuCisKK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91ciBkcml2ZXIgcHJpbnQgYSBrZXJuZWwgS0VSTl9XQVJOSU5HIG1lc3NhZ2UKK3doZW4geW91IGVuZCB1cCBwZXJmb3JtaW5nIGVpdGhlciAjMiBvciAjMy4gIEluIHRoaXMgbWFubmVyLCBpZiBhIHVzZXIKK29mIHlvdXIgZHJpdmVyIHJlcG9ydHMgdGhhdCBwZXJmb3JtYW5jZSBpcyBiYWQgb3IgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdAorZXZlbiBkZXRlY3RlZCwgeW91IGNhbiBhc2sgdGhlbSBmb3IgdGhlIGtlcm5lbCBtZXNzYWdlcyB0byBmaW5kIG91dAorZXhhY3RseSB3aHkuCisKK1RoZSBzdGFuZGFyZCAzMi1iaXQgYWRkcmVzc2luZyBQQ0kgZGV2aWNlIHdvdWxkIGRvIHNvbWV0aGluZyBsaWtlCit0aGlzOgorCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJteWRldjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGlnbm9yZV90aGlzX2RldmljZTsKKwl9CisKK0Fub3RoZXIgY29tbW9uIHNjZW5hcmlvIGlzIGEgNjQtYml0IGNhcGFibGUgZGV2aWNlLiAgVGhlIGFwcHJvYWNoCitoZXJlIGlzIHRvIHRyeSBmb3IgNjQtYml0IERBQyBhZGRyZXNzaW5nLCBidXQgYmFjayBkb3duIHRvIGEKKzMyLWJpdCBtYXNrIHNob3VsZCB0aGF0IGZhaWwuICBUaGUgUENJIHBsYXRmb3JtIGNvZGUgbWF5IGZhaWwgdGhlCis2NC1iaXQgbWFzayBub3QgYmVjYXVzZSB0aGUgcGxhdGZvcm0gaXMgbm90IGNhcGFibGUgb2YgNjQtYml0CithZGRyZXNzaW5nLiAgUmF0aGVyLCBpdCBtYXkgZmFpbCBpbiB0aGlzIGNhc2Ugc2ltcGx5IGJlY2F1c2UKKzMyLWJpdCBTQUMgYWRkcmVzc2luZyBpcyBkb25lIG1vcmUgZWZmaWNpZW50bHkgdGhhbiBEQUMgYWRkcmVzc2luZy4KK1NwYXJjNjQgaXMgb25lIHBsYXRmb3JtIHdoaWNoIGJlaGF2ZXMgaW4gdGhpcyB3YXkuCisKK0hlcmUgaXMgaG93IHlvdSB3b3VsZCBoYW5kbGUgYSA2NC1iaXQgY2FwYWJsZSBkZXZpY2Ugd2hpY2ggY2FuIGRyaXZlCithbGwgNjQtYml0cyB3aGVuIGFjY2Vzc2luZyBzdHJlYW1pbmcgRE1BOgorCisJaW50IHVzaW5nX2RhYzsKKworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpIHsKKwkJdXNpbmdfZGFjID0gMTsKKwl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCQl1c2luZ19kYWMgPSAwOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJteWRldjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGlnbm9yZV90aGlzX2RldmljZTsKKwl9CisKK0lmIGEgY2FyZCBpcyBjYXBhYmxlIG9mIHVzaW5nIDY0LWJpdCBjb25zaXN0ZW50IGFsbG9jYXRpb25zIGFzIHdlbGwsCit0aGUgY2FzZSB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworCWludCB1c2luZ19kYWMsIGNvbnNpc3RlbnRfdXNpbmdfZGFjOworCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgeworCQl1c2luZ19kYWMgPSAxOworCSAgIAljb25zaXN0ZW50X3VzaW5nX2RhYyA9IDE7CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJfSBlbHNlIGlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJdXNpbmdfZGFjID0gMDsKKwkJY29uc2lzdGVudF91c2luZ19kYWMgPSAwOworCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJteWRldjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGlnbm9yZV90aGlzX2RldmljZTsKKwl9CisKK3BjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpIHdpbGwgYWx3YXlzIGJlIGFibGUgdG8gc2V0IHRoZSBzYW1lIG9yIGEKK3NtYWxsZXIgbWFzayBhcyBwY2lfc2V0X2RtYV9tYXNrKCkuIEhvd2V2ZXIgZm9yIHRoZSByYXJlIGNhc2UgdGhhdCBhCitkZXZpY2UgZHJpdmVyIG9ubHkgdXNlcyBjb25zaXN0ZW50IGFsbG9jYXRpb25zLCBvbmUgd291bGQgaGF2ZSB0bworY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpLgorCitJZiB5b3VyIDY0LWJpdCBkZXZpY2UgaXMgZ29pbmcgdG8gYmUgYW4gZW5vcm1vdXMgY29uc3VtZXIgb2YgRE1BCittYXBwaW5ncywgdGhpcyBjYW4gYmUgcHJvYmxlbWF0aWMgc2luY2UgdGhlIERNQSBtYXBwaW5ncyBhcmUgYQorZmluaXRlIHJlc291cmNlIG9uIG1hbnkgcGxhdGZvcm1zLiAgUGxlYXNlIHNlZSB0aGUgIkRBQyBBZGRyZXNzaW5nCitmb3IgQWRkcmVzcyBTcGFjZSBIdW5ncnkgRGV2aWNlcyIgc2VjdGlvbiBuZWFyIHRoZSBlbmQgb2YgdGhpcworZG9jdW1lbnQgZm9yIGhvdyB0byBoYW5kbGUgdGhpcyBjYXNlLgorCitGaW5hbGx5LCBpZiB5b3VyIGRldmljZSBjYW4gb25seSBkcml2ZSB0aGUgbG93IDI0LWJpdHMgb2YKK2FkZHJlc3MgZHVyaW5nIFBDSSBidXMgbWFzdGVyaW5nIHlvdSBtaWdodCBkbyBzb21ldGhpbmcgbGlrZToKKworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4MDBmZmZmZmYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJteWRldjogMjQtYml0IERNQSBhZGRyZXNzaW5nIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJZ290byBpZ25vcmVfdGhpc19kZXZpY2U7CisJfQorCitXaGVuIHBjaV9zZXRfZG1hX21hc2soKSBpcyBzdWNjZXNzZnVsLCBhbmQgcmV0dXJucyB6ZXJvLCB0aGUgUENJIGxheWVyCitzYXZlcyBhd2F5IHRoaXMgbWFzayB5b3UgaGF2ZSBwcm92aWRlZC4gIFRoZSBQQ0kgbGF5ZXIgd2lsbCB1c2UgdGhpcworaW5mb3JtYXRpb24gbGF0ZXIgd2hlbiB5b3UgbWFrZSBETUEgbWFwcGluZ3MuCisKK1RoZXJlIGlzIGEgY2FzZSB3aGljaCB3ZSBhcmUgYXdhcmUgb2YgYXQgdGhpcyB0aW1lLCB3aGljaCBpcyB3b3J0aAorbWVudGlvbmluZyBpbiB0aGlzIGRvY3VtZW50YXRpb24uICBJZiB5b3VyIGRldmljZSBzdXBwb3J0cyBtdWx0aXBsZQorZnVuY3Rpb25zIChmb3IgZXhhbXBsZSBhIHNvdW5kIGNhcmQgcHJvdmlkZXMgcGxheWJhY2sgYW5kIHJlY29yZAorZnVuY3Rpb25zKSBhbmQgdGhlIHZhcmlvdXMgZGlmZmVyZW50IGZ1bmN0aW9ucyBoYXZlIF9kaWZmZXJlbnRfCitETUEgYWRkcmVzc2luZyBsaW1pdGF0aW9ucywgeW91IG1heSB3aXNoIHRvIHByb2JlIGVhY2ggbWFzayBhbmQKK29ubHkgcHJvdmlkZSB0aGUgZnVuY3Rpb25hbGl0eSB3aGljaCB0aGUgbWFjaGluZSBjYW4gaGFuZGxlLiAgSXQKK2lzIGltcG9ydGFudCB0aGF0IHRoZSBsYXN0IGNhbGwgdG8gcGNpX3NldF9kbWFfbWFzaygpIGJlIGZvciB0aGUgCittb3N0IHNwZWNpZmljIG1hc2suCisKK0hlcmUgaXMgcHNldWRvLWNvZGUgc2hvd2luZyBob3cgdGhpcyBtaWdodCBiZSBkb25lOgorCisJI2RlZmluZSBQTEFZQkFDS19BRERSRVNTX0JJVFMJRE1BXzMyQklUX01BU0sKKwkjZGVmaW5lIFJFQ09SRF9BRERSRVNTX0JJVFMJMHgwMGZmZmZmZgorCisJc3RydWN0IG15X3NvdW5kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwkuLi4KKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgUExBWUJBQ0tfQUREUkVTU19CSVRTKSkgeworCQljYXJkLT5wbGF5YmFja19lbmFibGVkID0gMTsKKwl9IGVsc2UgeworCQljYXJkLT5wbGF5YmFja19lbmFibGVkID0gMDsKKwkJcHJpbnRrKEtFUk5fV0FSTiAiJXM6IFBsYXliYWNrIGRpc2FibGVkIGR1ZSB0byBETUEgbGltaXRhdGlvbnMuXG4iLAorCQkgICAgICAgY2FyZC0+bmFtZSk7CisJfQorCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBSRUNPUkRfQUREUkVTU19CSVRTKSkgeworCQljYXJkLT5yZWNvcmRfZW5hYmxlZCA9IDE7CisJfSBlbHNlIHsKKwkJY2FyZC0+cmVjb3JkX2VuYWJsZWQgPSAwOworCQlwcmludGsoS0VSTl9XQVJOICIlczogUmVjb3JkIGRpc2FibGVkIGR1ZSB0byBETUEgbGltaXRhdGlvbnMuXG4iLAorCQkgICAgICAgY2FyZC0+bmFtZSk7CisJfQorCitBIHNvdW5kIGNhcmQgd2FzIHVzZWQgYXMgYW4gZXhhbXBsZSBoZXJlIGJlY2F1c2UgdGhpcyBnZW5yZSBvZiBQQ0kKK2RldmljZXMgc2VlbXMgdG8gYmUgbGl0dGVyZWQgd2l0aCBJU0EgY2hpcHMgZ2l2ZW4gYSBQQ0kgZnJvbnQgZW5kLAorYW5kIHRodXMgcmV0YWluaW5nIHRoZSAxNk1CIERNQSBhZGRyZXNzaW5nIGxpbWl0YXRpb25zIG9mIElTQS4KKworCQkJVHlwZXMgb2YgRE1BIG1hcHBpbmdzCisKK1RoZXJlIGFyZSB0d28gdHlwZXMgb2YgRE1BIG1hcHBpbmdzOgorCistIENvbnNpc3RlbnQgRE1BIG1hcHBpbmdzIHdoaWNoIGFyZSB1c3VhbGx5IG1hcHBlZCBhdCBkcml2ZXIKKyAgaW5pdGlhbGl6YXRpb24sIHVubWFwcGVkIGF0IHRoZSBlbmQgYW5kIGZvciB3aGljaCB0aGUgaGFyZHdhcmUgc2hvdWxkCisgIGd1YXJhbnRlZSB0aGF0IHRoZSBkZXZpY2UgYW5kIHRoZSBDUFUgY2FuIGFjY2VzcyB0aGUgZGF0YQorICBpbiBwYXJhbGxlbCBhbmQgd2lsbCBzZWUgdXBkYXRlcyBtYWRlIGJ5IGVhY2ggb3RoZXIgd2l0aG91dCBhbnkKKyAgZXhwbGljaXQgc29mdHdhcmUgZmx1c2hpbmcuCisKKyAgVGhpbmsgb2YgImNvbnNpc3RlbnQiIGFzICJzeW5jaHJvbm91cyIgb3IgImNvaGVyZW50Ii4KKworICBUaGUgY3VycmVudCBkZWZhdWx0IGlzIHRvIHJldHVybiBjb25zaXN0ZW50IG1lbW9yeSBpbiB0aGUgbG93IDMyCisgIGJpdHMgb2YgdGhlIFBDSSBidXMgc3BhY2UuICBIb3dldmVyLCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgeW91CisgIHNob3VsZCBzZXQgdGhlIGNvbnNpc3RlbnQgbWFzayBldmVuIGlmIHRoaXMgZGVmYXVsdCBpcyBmaW5lIGZvciB5b3VyCisgIGRyaXZlci4KKworICBHb29kIGV4YW1wbGVzIG9mIHdoYXQgdG8gdXNlIGNvbnNpc3RlbnQgbWFwcGluZ3MgZm9yIGFyZToKKworCS0gTmV0d29yayBjYXJkIERNQSByaW5nIGRlc2NyaXB0b3JzLgorCS0gU0NTSSBhZGFwdGVyIG1haWxib3ggY29tbWFuZCBkYXRhIHN0cnVjdHVyZXMuCisJLSBEZXZpY2UgZmlybXdhcmUgbWljcm9jb2RlIGV4ZWN1dGVkIG91dCBvZgorCSAgbWFpbiBtZW1vcnkuCisKKyAgVGhlIGludmFyaWFudCB0aGVzZSBleGFtcGxlcyBhbGwgcmVxdWlyZSBpcyB0aGF0IGFueSBDUFUgc3RvcmUKKyAgdG8gbWVtb3J5IGlzIGltbWVkaWF0ZWx5IHZpc2libGUgdG8gdGhlIGRldmljZSwgYW5kIHZpY2UKKyAgdmVyc2EuICBDb25zaXN0ZW50IG1hcHBpbmdzIGd1YXJhbnRlZSB0aGlzLgorCisgIElNUE9SVEFOVDogQ29uc2lzdGVudCBETUEgbWVtb3J5IGRvZXMgbm90IHByZWNsdWRlIHRoZSB1c2FnZSBvZgorICAgICAgICAgICAgIHByb3BlciBtZW1vcnkgYmFycmllcnMuICBUaGUgQ1BVIG1heSByZW9yZGVyIHN0b3JlcyB0bworCSAgICAgY29uc2lzdGVudCBtZW1vcnkganVzdCBhcyBpdCBtYXkgbm9ybWFsIG1lbW9yeS4gIEV4YW1wbGU6CisJICAgICBpZiBpdCBpcyBpbXBvcnRhbnQgZm9yIHRoZSBkZXZpY2UgdG8gc2VlIHRoZSBmaXJzdCB3b3JkCisJICAgICBvZiBhIGRlc2NyaXB0b3IgdXBkYXRlZCBiZWZvcmUgdGhlIHNlY29uZCwgeW91IG11c3QgZG8KKwkgICAgIHNvbWV0aGluZyBsaWtlOgorCisJCWRlc2MtPndvcmQwID0gYWRkcmVzczsKKwkJd21iKCk7CisJCWRlc2MtPndvcmQxID0gREVTQ19WQUxJRDsKKworICAgICAgICAgICAgIGluIG9yZGVyIHRvIGdldCBjb3JyZWN0IGJlaGF2aW9yIG9uIGFsbCBwbGF0Zm9ybXMuCisKKy0gU3RyZWFtaW5nIERNQSBtYXBwaW5ncyB3aGljaCBhcmUgdXN1YWxseSBtYXBwZWQgZm9yIG9uZSBETUEgdHJhbnNmZXIsCisgIHVubWFwcGVkIHJpZ2h0IGFmdGVyIGl0ICh1bmxlc3MgeW91IHVzZSBwY2lfZG1hX3N5bmNfKiBiZWxvdykgYW5kIGZvciB3aGljaAorICBoYXJkd2FyZSBjYW4gb3B0aW1pemUgZm9yIHNlcXVlbnRpYWwgYWNjZXNzZXMuCisKKyAgVGhpcyBvZiAic3RyZWFtaW5nIiBhcyAiYXN5bmNocm9ub3VzIiBvciAib3V0c2lkZSB0aGUgY29oZXJlbmN5CisgIGRvbWFpbiIuCisKKyAgR29vZCBleGFtcGxlcyBvZiB3aGF0IHRvIHVzZSBzdHJlYW1pbmcgbWFwcGluZ3MgZm9yIGFyZToKKworCS0gTmV0d29ya2luZyBidWZmZXJzIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGJ5IGEgZGV2aWNlLgorCS0gRmlsZXN5c3RlbSBidWZmZXJzIHdyaXR0ZW4vcmVhZCBieSBhIFNDU0kgZGV2aWNlLgorCisgIFRoZSBpbnRlcmZhY2VzIGZvciB1c2luZyB0aGlzIHR5cGUgb2YgbWFwcGluZyB3ZXJlIGRlc2lnbmVkIGluCisgIHN1Y2ggYSB3YXkgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjYW4gbWFrZSB3aGF0ZXZlciBwZXJmb3JtYW5jZQorICBvcHRpbWl6YXRpb25zIHRoZSBoYXJkd2FyZSBhbGxvd3MuICBUbyB0aGlzIGVuZCwgd2hlbiB1c2luZworICBzdWNoIG1hcHBpbmdzIHlvdSBtdXN0IGJlIGV4cGxpY2l0IGFib3V0IHdoYXQgeW91IHdhbnQgdG8gaGFwcGVuLgorCitOZWl0aGVyIHR5cGUgb2YgRE1BIG1hcHBpbmcgaGFzIGFsaWdubWVudCByZXN0cmljdGlvbnMgdGhhdCBjb21lCitmcm9tIFBDSSwgYWx0aG91Z2ggc29tZSBkZXZpY2VzIG1heSBoYXZlIHN1Y2ggcmVzdHJpY3Rpb25zLgorCisJCSBVc2luZyBDb25zaXN0ZW50IERNQSBtYXBwaW5ncy4KKworVG8gYWxsb2NhdGUgYW5kIG1hcCBsYXJnZSAoUEFHRV9TSVpFIG9yIHNvKSBjb25zaXN0ZW50IERNQSByZWdpb25zLAoreW91IHNob3VsZCBkbzoKKworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKworCWNwdV9hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBzaXplLCAmZG1hX2hhbmRsZSk7CisKK3doZXJlIGRldiBpcyBhIHN0cnVjdCBwY2lfZGV2ICouIFlvdSBzaG91bGQgcGFzcyBOVUxMIGZvciBQQ0kgbGlrZSBidXNlcword2hlcmUgZGV2aWNlcyBkb24ndCBoYXZlIHN0cnVjdCBwY2lfZGV2IChsaWtlIElTQSwgRUlTQSkuICBUaGlzIG1heSBiZQorY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LiAKKworVGhpcyBhcmd1bWVudCBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgRE1BIHRyYW5zbGF0aW9ucyBtYXkgYmUgYnVzCitzcGVjaWZpYyAoYW5kIG9mdGVuIGlzIHByaXZhdGUgdG8gdGhlIGJ1cyB3aGljaCB0aGUgZGV2aWNlIGlzIGF0dGFjaGVkCit0bykuCisKK1NpemUgaXMgdGhlIGxlbmd0aCBvZiB0aGUgcmVnaW9uIHlvdSB3YW50IHRvIGFsbG9jYXRlLCBpbiBieXRlcy4KKworVGhpcyByb3V0aW5lIHdpbGwgYWxsb2NhdGUgUkFNIGZvciB0aGF0IHJlZ2lvbiwgc28gaXQgYWN0cyBzaW1pbGFybHkgdG8KK19fZ2V0X2ZyZWVfcGFnZXMgKGJ1dCB0YWtlcyBzaXplIGluc3RlYWQgb2YgYSBwYWdlIG9yZGVyKS4gIElmIHlvdXIKK2RyaXZlciBuZWVkcyByZWdpb25zIHNpemVkIHNtYWxsZXIgdGhhbiBhIHBhZ2UsIHlvdSBtYXkgcHJlZmVyIHVzaW5nCit0aGUgcGNpX3Bvb2wgaW50ZXJmYWNlLCBkZXNjcmliZWQgYmVsb3cuCisKK1RoZSBjb25zaXN0ZW50IERNQSBtYXBwaW5nIGludGVyZmFjZXMsIGZvciBub24tTlVMTCBkZXYsIHdpbGwgYnkKK2RlZmF1bHQgcmV0dXJuIGEgRE1BIGFkZHJlc3Mgd2hpY2ggaXMgU0FDIChTaW5nbGUgQWRkcmVzcyBDeWNsZSkKK2FkZHJlc3NhYmxlLiAgRXZlbiBpZiB0aGUgZGV2aWNlIGluZGljYXRlcyAodmlhIFBDSSBkbWEgbWFzaykgdGhhdCBpdAorbWF5IGFkZHJlc3MgdGhlIHVwcGVyIDMyLWJpdHMgYW5kIHRodXMgcGVyZm9ybSBEQUMgY3ljbGVzLCBjb25zaXN0ZW50CithbGxvY2F0aW9uIHdpbGwgb25seSByZXR1cm4gPiAzMi1iaXQgUENJIGFkZHJlc3NlcyBmb3IgRE1BIGlmIHRoZQorY29uc2lzdGVudCBkbWEgbWFzayBoYXMgYmVlbiBleHBsaWNpdGx5IGNoYW5nZWQgdmlhCitwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soKS4gIFRoaXMgaXMgdHJ1ZSBvZiB0aGUgcGNpX3Bvb2wgaW50ZXJmYWNlCithcyB3ZWxsLgorCitwY2lfYWxsb2NfY29uc2lzdGVudCByZXR1cm5zIHR3byB2YWx1ZXM6IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgd2hpY2ggeW91CitjYW4gdXNlIHRvIGFjY2VzcyBpdCBmcm9tIHRoZSBDUFUgYW5kIGRtYV9oYW5kbGUgd2hpY2ggeW91IHBhc3MgdG8gdGhlCitjYXJkLgorCitUaGUgY3B1IHJldHVybiBhZGRyZXNzIGFuZCB0aGUgRE1BIGJ1cyBtYXN0ZXIgYWRkcmVzcyBhcmUgYm90aAorZ3VhcmFudGVlZCB0byBiZSBhbGlnbmVkIHRvIHRoZSBzbWFsbGVzdCBQQUdFX1NJWkUgb3JkZXIgd2hpY2gKK2lzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcmVxdWVzdGVkIHNpemUuICBUaGlzIGludmFyaWFudAorZXhpc3RzIChmb3IgZXhhbXBsZSkgdG8gZ3VhcmFudGVlIHRoYXQgaWYgeW91IGFsbG9jYXRlIGEgY2h1bmsKK3doaWNoIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byA2NCBraWxvYnl0ZXMsIHRoZSBleHRlbnQgb2YgdGhlCitidWZmZXIgeW91IHJlY2VpdmUgd2lsbCBub3QgY3Jvc3MgYSA2NEsgYm91bmRhcnkuCisKK1RvIHVubWFwIGFuZCBmcmVlIHN1Y2ggYSBETUEgcmVnaW9uLCB5b3UgY2FsbDoKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CisKK3doZXJlIGRldiwgc2l6ZSBhcmUgdGhlIHNhbWUgYXMgaW4gdGhlIGFib3ZlIGNhbGwgYW5kIGNwdV9hZGRyIGFuZAorZG1hX2hhbmRsZSBhcmUgdGhlIHZhbHVlcyBwY2lfYWxsb2NfY29uc2lzdGVudCByZXR1cm5lZCB0byB5b3UuCitUaGlzIGZ1bmN0aW9uIG1heSBub3QgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgorCitJZiB5b3VyIGRyaXZlciBuZWVkcyBsb3RzIG9mIHNtYWxsZXIgbWVtb3J5IHJlZ2lvbnMsIHlvdSBjYW4gd3JpdGUKK2N1c3RvbSBjb2RlIHRvIHN1YmRpdmlkZSBwYWdlcyByZXR1cm5lZCBieSBwY2lfYWxsb2NfY29uc2lzdGVudCwKK29yIHlvdSBjYW4gdXNlIHRoZSBwY2lfcG9vbCBBUEkgdG8gZG8gdGhhdC4gIEEgcGNpX3Bvb2wgaXMgbGlrZQorYSBrbWVtX2NhY2hlLCBidXQgaXQgdXNlcyBwY2lfYWxsb2NfY29uc2lzdGVudCBub3QgX19nZXRfZnJlZV9wYWdlcy4KK0Fsc28sIGl0IHVuZGVyc3RhbmRzIGNvbW1vbiBoYXJkd2FyZSBjb25zdHJhaW50cyBmb3IgYWxpZ25tZW50LAorbGlrZSBxdWV1ZSBoZWFkcyBuZWVkaW5nIHRvIGJlIGFsaWduZWQgb24gTiBieXRlIGJvdW5kYXJpZXMuCisKK0NyZWF0ZSBhIHBjaV9wb29sIGxpa2UgdGhpczoKKworCXN0cnVjdCBwY2lfcG9vbCAqcG9vbDsKKworCXBvb2wgPSBwY2lfcG9vbF9jcmVhdGUobmFtZSwgZGV2LCBzaXplLCBhbGlnbiwgYWxsb2MpOworCitUaGUgIm5hbWUiIGlzIGZvciBkaWFnbm9zdGljcyAobGlrZSBhIGttZW1fY2FjaGUgbmFtZSk7IGRldiBhbmQgc2l6ZQorYXJlIGFzIGFib3ZlLiAgVGhlIGRldmljZSdzIGhhcmR3YXJlIGFsaWdubWVudCByZXF1aXJlbWVudCBmb3IgdGhpcwordHlwZSBvZiBkYXRhIGlzICJhbGlnbiIgKHdoaWNoIGlzIGV4cHJlc3NlZCBpbiBieXRlcywgYW5kIG11c3QgYmUgYQorcG93ZXIgb2YgdHdvKS4gIElmIHlvdXIgZGV2aWNlIGhhcyBubyBib3VuZGFyeSBjcm9zc2luZyByZXN0cmljdGlvbnMsCitwYXNzIDAgZm9yIGFsbG9jOyBwYXNzaW5nIDQwOTYgc2F5cyBtZW1vcnkgYWxsb2NhdGVkIGZyb20gdGhpcyBwb29sCittdXN0IG5vdCBjcm9zcyA0S0J5dGUgYm91bmRhcmllcyAoYnV0IGF0IHRoYXQgdGltZSBpdCBtYXkgYmUgYmV0dGVyIHRvCitnbyBmb3IgcGNpX2FsbG9jX2NvbnNpc3RlbnQgZGlyZWN0bHkgaW5zdGVhZCkuCisKK0FsbG9jYXRlIG1lbW9yeSBmcm9tIGEgcGNpIHBvb2wgbGlrZSB0aGlzOgorCisJY3B1X2FkZHIgPSBwY2lfcG9vbF9hbGxvYyhwb29sLCBmbGFncywgJmRtYV9oYW5kbGUpOworCitmbGFncyBhcmUgU0xBQl9LRVJORUwgaWYgYmxvY2tpbmcgaXMgcGVybWl0dGVkIChub3QgaW5faW50ZXJydXB0IG5vcgoraG9sZGluZyBTTVAgbG9ja3MpLCBTTEFCX0FUT01JQyBvdGhlcndpc2UuICBMaWtlIHBjaV9hbGxvY19jb25zaXN0ZW50LAordGhpcyByZXR1cm5zIHR3byB2YWx1ZXMsIGNwdV9hZGRyIGFuZCBkbWFfaGFuZGxlLgorCitGcmVlIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgZnJvbSBhIHBjaV9wb29sIGxpa2UgdGhpczoKKworCXBjaV9wb29sX2ZyZWUocG9vbCwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOworCit3aGVyZSBwb29sIGlzIHdoYXQgeW91IHBhc3NlZCB0byBwY2lfcG9vbF9hbGxvYywgYW5kIGNwdV9hZGRyIGFuZAorZG1hX2hhbmRsZSBhcmUgdGhlIHZhbHVlcyBwY2lfcG9vbF9hbGxvYyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbgorbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KKworRGVzdHJveSBhIHBjaV9wb29sIGJ5IGNhbGxpbmc6CisKKwlwY2lfcG9vbF9kZXN0cm95KHBvb2wpOworCitNYWtlIHN1cmUgeW91J3ZlIGNhbGxlZCBwY2lfcG9vbF9mcmVlIGZvciBhbGwgbWVtb3J5IGFsbG9jYXRlZAorZnJvbSBhIHBvb2wgYmVmb3JlIHlvdSBkZXN0cm95IHRoZSBwb29sLiBUaGlzIGZ1bmN0aW9uIG1heSBub3QKK2JlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KKworCQkJRE1BIERpcmVjdGlvbgorCitUaGUgaW50ZXJmYWNlcyBkZXNjcmliZWQgaW4gc3Vic2VxdWVudCBwb3J0aW9ucyBvZiB0aGlzIGRvY3VtZW50Cit0YWtlIGEgRE1BIGRpcmVjdGlvbiBhcmd1bWVudCwgd2hpY2ggaXMgYW4gaW50ZWdlciBhbmQgdGFrZXMgb24KK29uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworIFBDSV9ETUFfQklESVJFQ1RJT05BTAorIFBDSV9ETUFfVE9ERVZJQ0UKKyBQQ0lfRE1BX0ZST01ERVZJQ0UKKyBQQ0lfRE1BX05PTkUKKworT25lIHNob3VsZCBwcm92aWRlIHRoZSBleGFjdCBETUEgZGlyZWN0aW9uIGlmIHlvdSBrbm93IGl0LgorCitQQ0lfRE1BX1RPREVWSUNFIG1lYW5zICJmcm9tIG1haW4gbWVtb3J5IHRvIHRoZSBQQ0kgZGV2aWNlIgorUENJX0RNQV9GUk9NREVWSUNFIG1lYW5zICJmcm9tIHRoZSBQQ0kgZGV2aWNlIHRvIG1haW4gbWVtb3J5IgorSXQgaXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgZGF0YSBtb3ZlcyBkdXJpbmcgdGhlIERNQQordHJhbnNmZXIuCisKK1lvdSBhcmUgX3N0cm9uZ2x5XyBlbmNvdXJhZ2VkIHRvIHNwZWNpZnkgdGhpcyBhcyBwcmVjaXNlbHkKK2FzIHlvdSBwb3NzaWJseSBjYW4uCisKK0lmIHlvdSBhYnNvbHV0ZWx5IGNhbm5vdCBrbm93IHRoZSBkaXJlY3Rpb24gb2YgdGhlIERNQSB0cmFuc2ZlciwKK3NwZWNpZnkgUENJX0RNQV9CSURJUkVDVElPTkFMLiAgSXQgbWVhbnMgdGhhdCB0aGUgRE1BIGNhbiBnbyBpbgorZWl0aGVyIGRpcmVjdGlvbi4gIFRoZSBwbGF0Zm9ybSBndWFyYW50ZWVzIHRoYXQgeW91IG1heSBsZWdhbGx5CitzcGVjaWZ5IHRoaXMsIGFuZCB0aGF0IGl0IHdpbGwgd29yaywgYnV0IHRoaXMgbWF5IGJlIGF0IHRoZQorY29zdCBvZiBwZXJmb3JtYW5jZSBmb3IgZXhhbXBsZS4KKworVGhlIHZhbHVlIFBDSV9ETUFfTk9ORSBpcyB0byBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcuICBPbmUgY2FuCitob2xkIHRoaXMgaW4gYSBkYXRhIHN0cnVjdHVyZSBiZWZvcmUgeW91IGNvbWUgdG8ga25vdyB0aGUKK3ByZWNpc2UgZGlyZWN0aW9uLCBhbmQgdGhpcyB3aWxsIGhlbHAgY2F0Y2ggY2FzZXMgd2hlcmUgeW91cgorZGlyZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGhhcyBmYWlsZWQgdG8gc2V0IHRoaW5ncyB1cCBwcm9wZXJseS4KKworQW5vdGhlciBhZHZhbnRhZ2Ugb2Ygc3BlY2lmeWluZyB0aGlzIHZhbHVlIHByZWNpc2VseSAob3V0c2lkZSBvZgorcG90ZW50aWFsIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMgb2Ygc3VjaCkgaXMgZm9yIGRlYnVnZ2luZy4KK1NvbWUgcGxhdGZvcm1zIGFjdHVhbGx5IGhhdmUgYSB3cml0ZSBwZXJtaXNzaW9uIGJvb2xlYW4gd2hpY2ggRE1BCittYXBwaW5ncyBjYW4gYmUgbWFya2VkIHdpdGgsIG11Y2ggbGlrZSBwYWdlIHByb3RlY3Rpb25zIGluIHRoZSB1c2VyCitwcm9ncmFtIGFkZHJlc3Mgc3BhY2UuICBTdWNoIHBsYXRmb3JtcyBjYW4gYW5kIGRvIHJlcG9ydCBlcnJvcnMgaW4gdGhlCitrZXJuZWwgbG9ncyB3aGVuIHRoZSBQQ0kgY29udHJvbGxlciBoYXJkd2FyZSBkZXRlY3RzIHZpb2xhdGlvbiBvZiB0aGUKK3Blcm1pc3Npb24gc2V0dGluZy4KKworT25seSBzdHJlYW1pbmcgbWFwcGluZ3Mgc3BlY2lmeSBhIGRpcmVjdGlvbiwgY29uc2lzdGVudCBtYXBwaW5ncworaW1wbGljaXRseSBoYXZlIGEgZGlyZWN0aW9uIGF0dHJpYnV0ZSBzZXR0aW5nIG9mCitQQ0lfRE1BX0JJRElSRUNUSU9OQUwuCisKK1RoZSBTQ1NJIHN1YnN5c3RlbSBwcm92aWRlcyBtZWNoYW5pc21zIGZvciB5b3UgdG8gZWFzaWx5IG9idGFpbgordGhlIGRpcmVjdGlvbiB0byB1c2UsIGluIHRoZSBTQ1NJIGNvbW1hbmQ6CisKKwlzY3NpX3RvX3BjaV9kbWFfZGlyKFNDU0lfRElSRUNUSU9OKQorCitXaGVyZSBTQ1NJX0RJUkVDVElPTiBpcyBvYnRhaW5lZCBmcm9tIHRoZSAnc2NfZGF0YV9kaXJlY3Rpb24nCittZW1iZXIgb2YgdGhlIFNDU0kgY29tbWFuZCB5b3VyIGRyaXZlciBpcyB3b3JraW5nIG9uLiAgVGhlCittZW50aW9uZWQgaW50ZXJmYWNlIGFib3ZlIHJldHVybnMgYSB2YWx1ZSBzdWl0YWJsZSBmb3IgcGFzc2luZworaW50byB0aGUgc3RyZWFtaW5nIERNQSBtYXBwaW5nIGludGVyZmFjZXMgYmVsb3cuCisKK0ZvciBOZXR3b3JraW5nIGRyaXZlcnMsIGl0J3MgYSByYXRoZXIgc2ltcGxlIGFmZmFpci4gIEZvciB0cmFuc21pdAorcGFja2V0cywgbWFwL3VubWFwIHRoZW0gd2l0aCB0aGUgUENJX0RNQV9UT0RFVklDRSBkaXJlY3Rpb24KK3NwZWNpZmllci4gIEZvciByZWNlaXZlIHBhY2tldHMsIGp1c3QgdGhlIG9wcG9zaXRlLCBtYXAvdW5tYXAgdGhlbQord2l0aCB0aGUgUENJX0RNQV9GUk9NREVWSUNFIGRpcmVjdGlvbiBzcGVjaWZpZXIuCisKKwkJICBVc2luZyBTdHJlYW1pbmcgRE1BIG1hcHBpbmdzCisKK1RoZSBzdHJlYW1pbmcgRE1BIG1hcHBpbmcgcm91dGluZXMgY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdAorY29udGV4dC4gIFRoZXJlIGFyZSB0d28gdmVyc2lvbnMgb2YgZWFjaCBtYXAvdW5tYXAsIG9uZSB3aGljaCB3aWxsCittYXAvdW5tYXAgYSBzaW5nbGUgbWVtb3J5IHJlZ2lvbiwgYW5kIG9uZSB3aGljaCB3aWxsIG1hcC91bm1hcCBhCitzY2F0dGVybGlzdC4KKworVG8gbWFwIGEgc2luZ2xlIHJlZ2lvbiwgeW91IGRvOgorCisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBteWRldi0+cGRldjsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJdm9pZCAqYWRkciA9IGJ1ZmZlci0+cHRyOworCXNpemVfdCBzaXplID0gYnVmZmVyLT5sZW47CisKKwlkbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCithbmQgdG8gdW5tYXAgaXQ6CisKKwlwY2lfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKKworWW91IHNob3VsZCBjYWxsIHBjaV91bm1hcF9zaW5nbGUgd2hlbiB0aGUgRE1BIGFjdGl2aXR5IGlzIGZpbmlzaGVkLCBlLmcuCitmcm9tIHRoZSBpbnRlcnJ1cHQgd2hpY2ggdG9sZCB5b3UgdGhhdCB0aGUgRE1BIHRyYW5zZmVyIGlzIGRvbmUuCisKK1VzaW5nIGNwdSBwb2ludGVycyBsaWtlIHRoaXMgZm9yIHNpbmdsZSBtYXBwaW5ncyBoYXMgYSBkaXNhZHZhbnRhZ2UsCit5b3UgY2Fubm90IHJlZmVyZW5jZSBISUdITUVNIG1lbW9yeSBpbiB0aGlzIHdheS4gIFRodXMsIHRoZXJlIGlzIGEKK21hcC91bm1hcCBpbnRlcmZhY2UgcGFpciBha2luIHRvIHBjaV97bWFwLHVubWFwfV9zaW5nbGUuICBUaGVzZQoraW50ZXJmYWNlcyBkZWFsIHdpdGggcGFnZS9vZmZzZXQgcGFpcnMgaW5zdGVhZCBvZiBjcHUgcG9pbnRlcnMuCitTcGVjaWZpY2FsbHk6CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG15ZGV2LT5wZGV2OworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ1ZmZlci0+cGFnZTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGJ1ZmZlci0+b2Zmc2V0OworCXNpemVfdCBzaXplID0gYnVmZmVyLT5sZW47CisKKwlkbWFfaGFuZGxlID0gcGNpX21hcF9wYWdlKGRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXJlY3Rpb24pOworCisJLi4uCisKKwlwY2lfdW5tYXBfcGFnZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CisKK0hlcmUsICJvZmZzZXQiIG1lYW5zIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgZ2l2ZW4gcGFnZS4KKworV2l0aCBzY2F0dGVybGlzdHMsIHlvdSBtYXAgYSByZWdpb24gZ2F0aGVyZWQgZnJvbSBzZXZlcmFsIHJlZ2lvbnMgYnk6CisKKwlpbnQgaSwgY291bnQgPSBwY2lfbWFwX3NnKGRldiwgc2dsaXN0LCBuZW50cywgZGlyZWN0aW9uKTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCisJZm9yIChpID0gMCwgc2cgPSBzZ2xpc3Q7IGkgPCBjb3VudDsgaSsrLCBzZysrKSB7CisJCWh3X2FkZHJlc3NbaV0gPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCWh3X2xlbltpXSA9IHNnX2RtYV9sZW4oc2cpOworCX0KKword2hlcmUgbmVudHMgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzZ2xpc3QuCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHRvIG1lcmdlIHNldmVyYWwgY29uc2VjdXRpdmUgc2dsaXN0IGVudHJpZXMKK2ludG8gb25lIChlLmcuIGlmIERNQSBtYXBwaW5nIGlzIGRvbmUgd2l0aCBQQUdFX1NJWkUgZ3JhbnVsYXJpdHksIGFueQorY29uc2VjdXRpdmUgc2dsaXN0IGVudHJpZXMgY2FuIGJlIG1lcmdlZCBpbnRvIG9uZSBwcm92aWRlZCB0aGUgZmlyc3Qgb25lCitlbmRzIGFuZCB0aGUgc2Vjb25kIG9uZSBzdGFydHMgb24gYSBwYWdlIGJvdW5kYXJ5IC0gaW4gZmFjdCB0aGlzIGlzIGEgaHVnZQorYWR2YW50YWdlIGZvciBjYXJkcyB3aGljaCBlaXRoZXIgY2Fubm90IGRvIHNjYXR0ZXItZ2F0aGVyIG9yIGhhdmUgdmVyeQorbGltaXRlZCBudW1iZXIgb2Ygc2NhdHRlci1nYXRoZXIgZW50cmllcykgYW5kIHJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIKK29mIHNnIGVudHJpZXMgaXQgbWFwcGVkIHRoZW0gdG8uIE9uIGZhaWx1cmUgMCBpcyByZXR1cm5lZC4KKworVGhlbiB5b3Ugc2hvdWxkIGxvb3AgY291bnQgdGltZXMgKG5vdGU6IHRoaXMgY2FuIGJlIGxlc3MgdGhhbiBuZW50cyB0aW1lcykKK2FuZCB1c2Ugc2dfZG1hX2FkZHJlc3MoKSBhbmQgc2dfZG1hX2xlbigpIG1hY3JvcyB3aGVyZSB5b3UgcHJldmlvdXNseQorYWNjZXNzZWQgc2ctPmFkZHJlc3MgYW5kIHNnLT5sZW5ndGggYXMgc2hvd24gYWJvdmUuCisKK1RvIHVubWFwIGEgc2NhdHRlcmxpc3QsIGp1c3QgY2FsbDoKKworCXBjaV91bm1hcF9zZyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CisKK0FnYWluLCBtYWtlIHN1cmUgRE1BIGFjdGl2aXR5IGhhcyBhbHJlYWR5IGZpbmlzaGVkLgorCitQTEVBU0UgTk9URTogIFRoZSAnbmVudHMnIGFyZ3VtZW50IHRvIHRoZSBwY2lfdW5tYXBfc2cgY2FsbCBtdXN0IGJlCisgICAgICAgICAgICAgIHRoZSBfc2FtZV8gb25lIHlvdSBwYXNzZWQgaW50byB0aGUgcGNpX21hcF9zZyBjYWxsLAorCSAgICAgIGl0IHNob3VsZCBfTk9UXyBiZSB0aGUgJ2NvdW50JyB2YWx1ZSBfcmV0dXJuZWRfIGZyb20gdGhlCisgICAgICAgICAgICAgIHBjaV9tYXBfc2cgY2FsbC4KKworRXZlcnkgcGNpX21hcF97c2luZ2xlLHNnfSBjYWxsIHNob3VsZCBoYXZlIGl0cyBwY2lfdW5tYXBfe3NpbmdsZSxzZ30KK2NvdW50ZXJwYXJ0LCBiZWNhdXNlIHRoZSBidXMgYWRkcmVzcyBzcGFjZSBpcyBhIHNoYXJlZCByZXNvdXJjZSAoYWx0aG91Z2gKK2luIHNvbWUgcG9ydHMgdGhlIG1hcHBpbmcgaXMgcGVyIGVhY2ggQlVTIHNvIGxlc3MgZGV2aWNlcyBjb250ZW5kIGZvciB0aGUKK3NhbWUgYnVzIGFkZHJlc3Mgc3BhY2UpIGFuZCB5b3UgY291bGQgcmVuZGVyIHRoZSBtYWNoaW5lIHVudXNhYmxlIGJ5IGVhdGluZworYWxsIGJ1cyBhZGRyZXNzZXMuCisKK0lmIHlvdSBuZWVkIHRvIHVzZSB0aGUgc2FtZSBzdHJlYW1pbmcgRE1BIHJlZ2lvbiBtdWx0aXBsZSB0aW1lcyBhbmQgdG91Y2gKK3RoZSBkYXRhIGluIGJldHdlZW4gdGhlIERNQSB0cmFuc2ZlcnMsIHRoZSBidWZmZXIgbmVlZHMgdG8gYmUgc3luY2VkCitwcm9wZXJseSBpbiBvcmRlciBmb3IgdGhlIGNwdSBhbmQgZGV2aWNlIHRvIHNlZSB0aGUgbW9zdCB1cHRvZGF0ZSBhbmQKK2NvcnJlY3QgY29weSBvZiB0aGUgRE1BIGJ1ZmZlci4KKworU28sIGZpcnN0bHksIGp1c3QgbWFwIGl0IHdpdGggcGNpX21hcF97c2luZ2xlLHNnfSwgYW5kIGFmdGVyIGVhY2ggRE1BCit0cmFuc2ZlciBjYWxsIGVpdGhlcjoKKworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CisKK29yOgorCisJcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXJlY3Rpb24pOworCithcyBhcHByb3ByaWF0ZS4KKworVGhlbiwgaWYgeW91IHdpc2ggdG8gbGV0IHRoZSBkZXZpY2UgZ2V0IGF0IHRoZSBETUEgYXJlYSBhZ2FpbiwKK2ZpbmlzaCBhY2Nlc3NpbmcgdGhlIGRhdGEgd2l0aCB0aGUgY3B1LCBhbmQgdGhlbiBiZWZvcmUgYWN0dWFsbHkKK2dpdmluZyB0aGUgYnVmZmVyIHRvIHRoZSBoYXJkd2FyZSBjYWxsIGVpdGhlcjoKKworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CisKK29yOgorCisJcGNpX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UoZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXJlY3Rpb24pOworCithcyBhcHByb3ByaWF0ZS4KKworQWZ0ZXIgdGhlIGxhc3QgRE1BIHRyYW5zZmVyIGNhbGwgb25lIG9mIHRoZSBETUEgdW5tYXAgcm91dGluZXMKK3BjaV91bm1hcF97c2luZ2xlLHNnfS4gSWYgeW91IGRvbid0IHRvdWNoIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IHBjaV9tYXBfKgorY2FsbCB0aWxsIHBjaV91bm1hcF8qLCB0aGVuIHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgdGhlIHBjaV9kbWFfc3luY18qCityb3V0aW5lcyBhdCBhbGwuCisKK0hlcmUgaXMgcHNldWRvIGNvZGUgd2hpY2ggc2hvd3MgYSBzaXR1YXRpb24gaW4gd2hpY2ggeW91IHdvdWxkIG5lZWQKK3RvIHVzZSB0aGUgcGNpX2RtYV9zeW5jXyooKSBpbnRlcmZhY2VzLgorCisJbXlfY2FyZF9zZXR1cF9yZWNlaXZlX2J1ZmZlcihzdHJ1Y3QgbXlfY2FyZCAqY3AsIGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKKwl7CisJCWRtYV9hZGRyX3QgbWFwcGluZzsKKworCQltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoY3AtPnBkZXYsIGJ1ZmZlciwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCWNwLT5yeF9idWYgPSBidWZmZXI7CisJCWNwLT5yeF9sZW4gPSBsZW47CisJCWNwLT5yeF9kbWEgPSBtYXBwaW5nOworCisJCWdpdmVfcnhfYnVmX3RvX2NhcmQoY3ApOworCX0KKworCS4uLgorCisJbXlfY2FyZF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZpZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisJeworCQlzdHJ1Y3QgbXlfY2FyZCAqY3AgPSBkZXZpZDsKKworCQkuLi4KKwkJaWYgKHJlYWRfY2FyZF9zdGF0dXMoY3ApID09IFJYX0JVRl9UUkFOU0ZFUlJFRCkgeworCQkJc3RydWN0IG15X2NhcmRfaGVhZGVyICpocDsKKworCQkJLyogRXhhbWluZSB0aGUgaGVhZGVyIHRvIHNlZSBpZiB3ZSB3aXNoCisJCQkgKiB0byBhY2NlcHQgdGhlIGRhdGEuICBCdXQgc3luY2hyb25pemUKKwkJCSAqIHRoZSBETUEgdHJhbnNmZXIgd2l0aCB0aGUgQ1BVIGZpcnN0CisJCQkgKiBzbyB0aGF0IHdlIHNlZSB1cGRhdGVkIGNvbnRlbnRzLgorCQkJICovCisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoY3AtPnBkZXYsIGNwLT5yeF9kbWEsCisJCQkJCQkgICAgY3AtPnJ4X2xlbiwKKwkJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCQkvKiBOb3cgaXQgaXMgc2FmZSB0byBleGFtaW5lIHRoZSBidWZmZXIuICovCisJCQlocCA9IChzdHJ1Y3QgbXlfY2FyZF9oZWFkZXIgKikgY3AtPnJ4X2J1ZjsKKwkJCWlmIChoZWFkZXJfaXNfb2soaHApKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjcC0+cGRldiwgY3AtPnJ4X2RtYSwgY3AtPnJ4X2xlbiwKKwkJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCXBhc3NfdG9fdXBwZXJfbGF5ZXJzKGNwLT5yeF9idWYpOworCQkJCW1ha2VfYW5kX3NldHVwX25ld19yeF9idWYoY3ApOworCQkJfSBlbHNlIHsKKwkJCQkvKiBKdXN0IHN5bmMgdGhlIGJ1ZmZlciBhbmQgZ2l2ZSBpdCBiYWNrCisJCQkJICogdG8gdGhlIGNhcmQuCisJCQkJICovCisJCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNwLT5wZGV2LAorCQkJCQkJCSAgICAgICBjcC0+cnhfZG1hLAorCQkJCQkJCSAgICAgICBjcC0+cnhfbGVuLAorCQkJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCWdpdmVfcnhfYnVmX3RvX2NhcmQoY3ApOworCQkJfQorCQl9CisJfQorCitEcml2ZXJzIGNvbnZlcnRlZCBmdWxseSB0byB0aGlzIGludGVyZmFjZSBzaG91bGQgbm90IHVzZSB2aXJ0X3RvX2J1cyBhbnkKK2xvbmdlciwgbm9yIHNob3VsZCB0aGV5IHVzZSBidXNfdG9fdmlydC4gU29tZSBkcml2ZXJzIGhhdmUgdG8gYmUgY2hhbmdlZCBhCitsaXR0bGUgYml0LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGxvbmdlciBhbiBlcXVpdmFsZW50IHRvIGJ1c190b192aXJ0IGluIHRoZQorZHluYW1pYyBETUEgbWFwcGluZyBzY2hlbWUgLSB5b3UgaGF2ZSB0byBhbHdheXMgc3RvcmUgdGhlIERNQSBhZGRyZXNzZXMKK3JldHVybmVkIGJ5IHRoZSBwY2lfYWxsb2NfY29uc2lzdGVudCwgcGNpX3Bvb2xfYWxsb2MsIGFuZCBwY2lfbWFwX3NpbmdsZQorY2FsbHMgKHBjaV9tYXBfc2cgc3RvcmVzIHRoZW0gaW4gdGhlIHNjYXR0ZXJsaXN0IGl0c2VsZiBpZiB0aGUgcGxhdGZvcm0KK3N1cHBvcnRzIGR5bmFtaWMgRE1BIG1hcHBpbmcgaW4gaGFyZHdhcmUpIGluIHlvdXIgZHJpdmVyIHN0cnVjdHVyZXMgYW5kL29yCitpbiB0aGUgY2FyZCByZWdpc3RlcnMuCisKK0FsbCBQQ0kgZHJpdmVycyBzaG91bGQgYmUgdXNpbmcgdGhlc2UgaW50ZXJmYWNlcyB3aXRoIG5vIGV4Y2VwdGlvbnMuCitJdCBpcyBwbGFubmVkIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIHZpcnRfdG9fYnVzKCkgYW5kIGJ1c190b192aXJ0KCkgYXMKK3RoZXkgYXJlIGVudGlyZWx5IGRlcHJlY2F0ZWQuICBTb21lIHBvcnRzIGFscmVhZHkgZG8gbm90IHByb3ZpZGUgdGhlc2UKK2FzIGl0IGlzIGltcG9zc2libGUgdG8gY29ycmVjdGx5IHN1cHBvcnQgdGhlbS4KKworCQk2NC1iaXQgRE1BIGFuZCBEQUMgY3ljbGUgc3VwcG9ydAorCitEbyB5b3UgdW5kZXJzdGFuZCBhbGwgb2YgdGhlIHRleHQgYWJvdmU/ICBHcmVhdCwgdGhlbiB5b3UgYWxyZWFkeQora25vdyBob3cgdG8gdXNlIDY0LWJpdCBETUEgYWRkcmVzc2luZyB1bmRlciBMaW51eC4gIFNpbXBseSBtYWtlCit0aGUgYXBwcm9wcmlhdGUgcGNpX3NldF9kbWFfbWFzaygpIGNhbGxzIGJhc2VkIHVwb24geW91ciBjYXJkcworY2FwYWJpbGl0aWVzLCB0aGVuIHVzZSB0aGUgbWFwcGluZyBBUElzIGFib3ZlLgorCitJdCBpcyB0aGF0IHNpbXBsZS4KKworV2VsbCwgbm90IGZvciBzb21lIG9kZCBkZXZpY2VzLiAgU2VlIHRoZSBuZXh0IHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uCithYm91dCB0aGF0LgorCisJREFDIEFkZHJlc3NpbmcgZm9yIEFkZHJlc3MgU3BhY2UgSHVuZ3J5IERldmljZXMKKworVGhlcmUgZXhpc3RzIGEgY2xhc3Mgb2YgZGV2aWNlcyB3aGljaCBkbyBub3QgbWVzaCB3ZWxsIHdpdGggdGhlIFBDSQorRE1BIG1hcHBpbmcgQVBJLiAgQnkgZGVmaW5pdGlvbiB0aGVzZSAibWFwcGluZ3MiIGFyZSBhIGZpbml0ZQorcmVzb3VyY2UuICBUaGUgbnVtYmVyIG9mIHRvdGFsIGF2YWlsYWJsZSBtYXBwaW5ncyBwZXIgYnVzIGlzIHBsYXRmb3JtCitzcGVjaWZpYywgYnV0IHRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgcmVhc29uYWJsZSBhbW91bnQuCisKK1doYXQgaXMgInJlYXNvbmFibGUiPyAgUmVhc29uYWJsZSBtZWFucyB0aGF0IG5ldHdvcmtpbmcgYW5kIGJsb2NrIEkvTworZGV2aWNlcyBuZWVkIG5vdCB3b3JyeSBhYm91dCB1c2luZyB0b28gbWFueSBtYXBwaW5ncy4KKworQXMgYW4gZXhhbXBsZSBvZiBhIHByb2JsZW1hdGljIGRldmljZSwgY29uc2lkZXIgY29tcHV0ZSBjbHVzdGVyIGNhcmRzLgorVGhleSBjYW4gcG90ZW50aWFsbHkgbmVlZCB0byBhY2Nlc3MgZ2lnYWJ5dGVzIG9mIG1lbW9yeSBhdCBvbmNlIHZpYQorRE1BLiAgRHluYW1pYyBtYXBwaW5ncyBhcmUgdW5zdWl0YWJsZSBmb3IgdGhpcyBraW5kIG9mIGFjY2VzcyBwYXR0ZXJuLgorCitUbyB0aGlzIGVuZCB3ZSd2ZSBwcm92aWRlZCBhIHNtYWxsIEFQSSBieSB3aGljaCBhIGRldmljZSBkcml2ZXIKK21heSB1c2UgREFDIGN5Y2xlcyB0byBkaXJlY3RseSBhZGRyZXNzIGFsbCBvZiBwaHlzaWNhbCBtZW1vcnkuCitOb3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IHRoaXMsIGJ1dCBtb3N0IGRvLiAgSXQgaXMgZWFzeSB0byBkZXRlcm1pbmUKK3doZXRoZXIgdGhlIHBsYXRmb3JtIHdpbGwgd29yayBwcm9wZXJseSBhdCBwcm9iZSB0aW1lLgorCitGaXJzdCwgdW5kZXJzdGFuZCB0aGF0IHRoZXJlIG1heSBiZSBhIFNFVkVSRSBwZXJmb3JtYW5jZSBwZW5hbHR5IGZvcgordXNpbmcgdGhlc2UgaW50ZXJmYWNlcyBvbiBzb21lIHBsYXRmb3Jtcy4gIFRoZXJlZm9yZSwgeW91IE1VU1Qgb25seQordXNlIHRoZXNlIGludGVyZmFjZXMgaWYgaXQgaXMgYWJzb2x1dGVseSByZXF1aXJlZC4gICU5OSBvZiBkZXZpY2VzIGNhbgordXNlIHRoZSBub3JtYWwgQVBJcyB3aXRob3V0IGFueSBwcm9ibGVtcy4KKworTm90ZSB0aGF0IGZvciBzdHJlYW1pbmcgdHlwZSBtYXBwaW5ncyB5b3UgbXVzdCBlaXRoZXIgdXNlIHRoZXNlCitpbnRlcmZhY2VzLCBvciB0aGUgZHluYW1pYyBtYXBwaW5nIGludGVyZmFjZXMgYWJvdmUuICBZb3UgbWF5IG5vdCBtaXgKK3VzYWdlIG9mIGJvdGggZm9yIHRoZSBzYW1lIGRldmljZS4gIFN1Y2ggYW4gYWN0IGlzIGlsbGVnYWwgYW5kIGlzCitndWFyYW50ZWVkIHRvIHB1dCBhIGJhbmFuYSBpbiB5b3VyIHRhaWxwaXBlLgorCitIb3dldmVyLCBjb25zaXN0ZW50IG1hcHBpbmdzIG1heSBpbiBmYWN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAordGhlc2UgaW50ZXJmYWNlcy4gIFJlbWVtYmVyIHRoYXQsIGFzIGRlZmluZWQsIGNvbnNpc3RlbnQgbWFwcGluZ3MgYXJlCithbHdheXMgZ29pbmcgdG8gYmUgU0FDIGFkZHJlc3NhYmxlLgorCitUaGUgZmlyc3QgdGhpbmcgeW91ciBkcml2ZXIgbmVlZHMgdG8gZG8gaXMgcXVlcnkgdGhlIFBDSSBwbGF0Zm9ybQorbGF5ZXIgd2l0aCB5b3VyIGRldmljZXMgREFDIGFkZHJlc3NpbmcgY2FwYWJpbGl0aWVzOgorCisJaW50IHBjaV9kYWNfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgbWFzayk7CisKK1RoaXMgcm91dGluZSBiZWhhdmVzIGlkZW50aWNhbGx5IHRvIHBjaV9zZXRfZG1hX21hc2suICBZb3UgbWF5IG5vdAordXNlIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlcyBpZiB0aGlzIHJvdXRpbmUgZmFpbHMuCisKK05leHQsIERNQSBhZGRyZXNzZXMgdXNpbmcgdGhpcyBBUEkgYXJlIGtlcHQgdHJhY2sgb2YgdXNpbmcgdGhlCitkbWE2NF9hZGRyX3QgdHlwZS4gIEl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmlnIGVub3VnaCB0byBob2xkIGFueQorREFDIGFkZHJlc3MgdGhlIHBsYXRmb3JtIGxheWVyIHdpbGwgZ2l2ZSB0byB5b3UgZnJvbSB0aGUgZm9sbG93aW5nCityb3V0aW5lcy4gIElmIHlvdSBoYXZlIGNvbnNpc3RlbnQgbWFwcGluZ3MgYXMgd2VsbCwgeW91IHN0aWxsCit1c2UgcGxhaW4gZG1hX2FkZHJfdCB0byBrZWVwIHRyYWNrIG9mIHRob3NlLgorCitBbGwgbWFwcGluZ3Mgb2J0YWluZWQgaGVyZSB3aWxsIGJlIGRpcmVjdC4gIFRoZSBtYXBwaW5ncyBhcmUgbm90Cit0cmFuc2xhdGVkLCBhbmQgdGhpcyBpcyB0aGUgcHVycG9zZSBvZiB0aGlzIGRpYWxlY3Qgb2YgdGhlIERNQSBBUEkuCisKK0FsbCByb3V0aW5lcyB3b3JrIHdpdGggcGFnZS9vZmZzZXQgcGFpcnMuICBUaGlzIGlzIHRoZSBfT05MWV8gd2F5IHRvIAorcG9ydGFibHkgcmVmZXIgdG8gYW55IHBpZWNlIG9mIG1lbW9yeS4gIElmIHlvdSBoYXZlIGEgY3B1IHBvaW50ZXIKKyh3aGljaCBtYXkgYmUgdmFsaWRseSBETUEnZCB0b28pIHlvdSBtYXkgZWFzaWx5IG9idGFpbiB0aGUgcGFnZQorYW5kIG9mZnNldCB1c2luZyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocHRyKTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHB0cik7CisKK0hlcmUgYXJlIHRoZSBpbnRlcmZhY2VzOgorCisJZG1hNjRfYWRkcl90IHBjaV9kYWNfcGFnZV90b19kbWEoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgaW50IGRpcmVjdGlvbik7CisKK1RoZSBEQUMgYWRkcmVzcyBmb3IgdGhlIHR1cGxlIFBBR0UvT0ZGU0VUIGFyZSByZXR1cm5lZC4gIFRoZSBkaXJlY3Rpb24KK2FyZ3VtZW50IGlzIHRoZSBzYW1lIGFzIGZvciBwY2lfe21hcCx1bm1hcH1fc2luZ2xlKCkuICBUaGUgc2FtZSBydWxlcworZm9yIGNwdS9kZXZpY2UgYWNjZXNzIGFwcGx5IGhlcmUgYXMgZm9yIHRoZSBzdHJlYW1pbmcgbWFwcGluZworaW50ZXJmYWNlcy4gIFRvIHJlaXRlcmF0ZToKKworCVRoZSBjcHUgbWF5IHRvdWNoIHRoZSBidWZmZXIgYmVmb3JlIHBjaV9kYWNfcGFnZV90b19kbWEuCisJVGhlIGRldmljZSBtYXkgdG91Y2ggdGhlIGJ1ZmZlciBhZnRlciBwY2lfZGFjX3BhZ2VfdG9fZG1hCisJaXMgbWFkZSwgYnV0IHRoZSBjcHUgbWF5IE5PVC4KKworV2hlbiB0aGUgRE1BIHRyYW5zZmVyIGlzIGNvbXBsZXRlLCBpbnZva2U6CisKKwl2b2lkIHBjaV9kYWNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSAgICAgZG1hNjRfYWRkcl90IGRtYV9hZGRyLAorCQkJCQkgICAgIHNpemVfdCBsZW4sIGludCBkaXJlY3Rpb24pOworCitUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIENQVSBsb29rcyBhdCB0aGUgYnVmZmVyIGFnYWluLgorVGhpcyBpbnRlcmZhY2UgYmVoYXZlcyBpZGVudGljYWxseSB0byBwY2lfZG1hX3N5bmNfe3NpbmdsZSxzZ31fZm9yX2NwdSgpLgorCitBbmQgbGlrZXdpc2UsIGlmIHlvdSB3aXNoIHRvIGxldCB0aGUgZGV2aWNlIGdldCBiYWNrIGF0IHRoZSBidWZmZXIgYWZ0ZXIKK3RoZSBjcHUgaGFzIHJlYWQvd3JpdHRlbiBpdCwgaW52b2tlOgorCisJdm9pZCBwY2lfZGFjX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkJZG1hNjRfYWRkcl90IGRtYV9hZGRyLAorCQkJCQkJc2l6ZV90IGxlbiwgaW50IGRpcmVjdGlvbik7CisKK2JlZm9yZSBsZXR0aW5nIHRoZSBkZXZpY2UgYWNjZXNzIHRoZSBETUEgYXJlYSBhZ2Fpbi4KKworSWYgeW91IG5lZWQgdG8gZ2V0IGJhY2sgdG8gdGhlIFBBR0UvT0ZGU0VUIHR1cGxlIGZyb20gYSBkbWE2NF9hZGRyX3QKK3RoZSBmb2xsb3dpbmcgaW50ZXJmYWNlcyBhcmUgcHJvdmlkZWQ6CisKKwlzdHJ1Y3QgcGFnZSAqcGNpX2RhY19kbWFfdG9fcGFnZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJIGRtYTY0X2FkZHJfdCBkbWFfYWRkcik7CisJdW5zaWduZWQgbG9uZyBwY2lfZGFjX2RtYV90b19vZmZzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSAgICBkbWE2NF9hZGRyX3QgZG1hX2FkZHIpOworCitUaGlzIGlzIHBvc3NpYmxlIHdpdGggdGhlIERBQyBpbnRlcmZhY2VzIHB1cmVseSBiZWNhdXNlIHRoZXkgYXJlCitub3QgdHJhbnNsYXRlZCBpbiBhbnkgd2F5LgorCisJCU9wdGltaXppbmcgVW5tYXAgU3RhdGUgU3BhY2UgQ29uc3VtcHRpb24KKworT24gbWFueSBwbGF0Zm9ybXMsIHBjaV91bm1hcF97c2luZ2xlLHBhZ2V9KCkgaXMgc2ltcGx5IGEgbm9wLgorVGhlcmVmb3JlLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBtYXBwaW5nIGFkZHJlc3MgYW5kIGxlbmd0aCBpcyBhIHdhc3RlCitvZiBzcGFjZS4gIEluc3RlYWQgb2YgZmlsbGluZyB5b3VyIGRyaXZlcnMgdXAgd2l0aCBpZmRlZnMgYW5kIHRoZSBsaWtlCit0byAid29yayBhcm91bmQiIHRoaXMgKHdoaWNoIHdvdWxkIGRlZmVhdCB0aGUgd2hvbGUgcHVycG9zZSBvZiBhCitwb3J0YWJsZSBBUEkpIHRoZSBmb2xsb3dpbmcgZmFjaWxpdGllcyBhcmUgcHJvdmlkZWQuCisKK0FjdHVhbGx5LCBpbnN0ZWFkIG9mIGRlc2NyaWJpbmcgdGhlIG1hY3JvcyBvbmUgYnkgb25lLCB3ZSdsbAordHJhbnNmb3JtIHNvbWUgZXhhbXBsZSBjb2RlLgorCisxKSBVc2UgREVDTEFSRV9QQ0lfVU5NQVBfe0FERFIsTEVOfSBpbiBzdGF0ZSBzYXZpbmcgc3RydWN0dXJlcy4KKyAgIEV4YW1wbGUsIGJlZm9yZToKKworCXN0cnVjdCByaW5nX3N0YXRlIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJZG1hX2FkZHJfdCBtYXBwaW5nOworCQlfX3UzMiBsZW47CisJfTsKKworICAgYWZ0ZXI6CisKKwlzdHJ1Y3QgcmluZ19zdGF0ZSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCURFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwcGluZykKKwkJREVDTEFSRV9QQ0lfVU5NQVBfTEVOKGxlbikKKwl9OworCisgICBOT1RFOiBETyBOT1QgcHV0IGEgc2VtaWNvbG9uIGF0IHRoZSBlbmQgb2YgdGhlIERFQ0xBUkVfKigpCisgICAgICAgICBtYWNyby4KKworMikgVXNlIHBjaV91bm1hcF97YWRkcixsZW59X3NldCB0byBzZXQgdGhlc2UgdmFsdWVzLgorICAgRXhhbXBsZSwgYmVmb3JlOgorCisJcmluZ3AtPm1hcHBpbmcgPSBGT087CisJcmluZ3AtPmxlbiA9IEJBUjsKKworICAgYWZ0ZXI6CisKKwlwY2lfdW5tYXBfYWRkcl9zZXQocmluZ3AsIG1hcHBpbmcsIEZPTyk7CisJcGNpX3VubWFwX2xlbl9zZXQocmluZ3AsIGxlbiwgQkFSKTsKKworMykgVXNlIHBjaV91bm1hcF97YWRkcixsZW59IHRvIGFjY2VzcyB0aGVzZSB2YWx1ZXMuCisgICBFeGFtcGxlLCBiZWZvcmU6CisKKwlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHJpbmdwLT5tYXBwaW5nLCByaW5ncC0+bGVuLAorCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKyAgIGFmdGVyOgorCisJcGNpX3VubWFwX3NpbmdsZShwZGV2LAorCQkJIHBjaV91bm1hcF9hZGRyKHJpbmdwLCBtYXBwaW5nKSwKKwkJCSBwY2lfdW5tYXBfbGVuKHJpbmdwLCBsZW4pLAorCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisKK0l0IHJlYWxseSBzaG91bGQgYmUgc2VsZi1leHBsYW5hdG9yeS4gIFdlIHRyZWF0IHRoZSBBRERSIGFuZCBMRU4KK3NlcGFyYXRlbHksIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgZm9yIGFuIGltcGxlbWVudGF0aW9uIHRvIG9ubHkKK25lZWQgdGhlIGFkZHJlc3MgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgdW5tYXAgb3BlcmF0aW9uLgorCisJCQlQbGF0Zm9ybSBJc3N1ZXMKKworSWYgeW91IGFyZSBqdXN0IHdyaXRpbmcgZHJpdmVycyBmb3IgTGludXggYW5kIGRvIG5vdCBtYWludGFpbgorYW4gYXJjaGl0ZWN0dXJlIHBvcnQgZm9yIHRoZSBrZXJuZWwsIHlvdSBjYW4gc2FmZWx5IHNraXAgZG93bgordG8gIkNsb3NpbmciLgorCisxKSBTdHJ1Y3Qgc2NhdHRlcmxpc3QgcmVxdWlyZW1lbnRzLgorCisgICBTdHJ1Y3Qgc2NhdHRlcmxpc3QgbXVzdCBjb250YWluLCBhdCBhIG1pbmltdW0sIHRoZSBmb2xsb3dpbmcKKyAgIG1lbWJlcnM6CisKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBsZW5ndGg7CisKKyAgIFRoZSBiYXNlIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGJ5IGEgInBhZ2Urb2Zmc2V0IiBwYWlyLgorCisgICBQcmV2aW91cyB2ZXJzaW9ucyBvZiBzdHJ1Y3Qgc2NhdHRlcmxpc3QgY29udGFpbmVkIGEgInZvaWQgKmFkZHJlc3MiCisgICBmaWVsZCB0aGF0IHdhcyBzb21ldGltZXMgdXNlZCBpbnN0ZWFkIG9mIHBhZ2Urb2Zmc2V0LiAgQXMgb2YgTGludXgKKyAgIDIuNS4sIHBhZ2Urb2Zmc2V0IGlzIGFsd2F5cyB1c2VkLCBhbmQgdGhlICJhZGRyZXNzIiBmaWVsZCBoYXMgYmVlbgorICAgZGVsZXRlZC4KKworMikgTW9yZSB0byBjb21lLi4uCisKKwkJCUhhbmRsaW5nIEVycm9ycworCitETUEgYWRkcmVzcyBzcGFjZSBpcyBsaW1pdGVkIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyBhbmQgYW4gYWxsb2NhdGlvbgorZmFpbHVyZSBjYW4gYmUgZGV0ZXJtaW5lZCBieToKKworLSBjaGVja2luZyBpZiBwY2lfYWxsb2NfY29uc2lzdGVudCByZXR1cm5zIE5VTEwgb3IgcGNpX21hcF9zZyByZXR1cm5zIDAKKworLSBjaGVja2luZyB0aGUgcmV0dXJuZWQgZG1hX2FkZHJfdCBvZiBwY2lfbWFwX3NpbmdsZSBhbmQgcGNpX21hcF9wYWdlCisgIGJ5IHVzaW5nIHBjaV9kbWFfbWFwcGluZ19lcnJvcigpOgorCisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCisJZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9oYW5kbGUpKSB7CisJCS8qCisJCSAqIHJlZHVjZSBjdXJyZW50IERNQSBtYXBwaW5nIHVzYWdlLAorCQkgKiBkZWxheSBhbmQgdHJ5IGFnYWluIGxhdGVyIG9yCisJCSAqIHJlc2V0IGRyaXZlci4KKwkJICovCisJfQorCisJCQkgICBDbG9zaW5nCisKK1RoaXMgZG9jdW1lbnQsIGFuZCB0aGUgQVBJIGl0c2VsZiwgd291bGQgbm90IGJlIGluIGl0J3MgY3VycmVudAorZm9ybSB3aXRob3V0IHRoZSBmZWVkYmFjayBhbmQgc3VnZ2VzdGlvbnMgZnJvbSBudW1lcm91cyBpbmRpdmlkdWFscy4KK1dlIHdvdWxkIGxpa2UgdG8gc3BlY2lmaWNhbGx5IG1lbnRpb24sIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIsIHRoZQorZm9sbG93aW5nIHBlb3BsZToKKworCVJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+CisJTGVvIERhZ3VtIDxkYWd1bUBiYXJyZWwuZW5nci5zZ2kuY29tPgorCVJhbGYgQmFlY2hsZSA8cmFsZkBvc3Muc2dpLmNvbT4KKwlHcmFudCBHcnVuZGxlciA8Z3J1bmRsZXJAY3VwLmhwLmNvbT4KKwlKYXkgRXN0YWJyb29rIDxKYXkuRXN0YWJyb29rQGNvbXBhcS5jb20+CisJVGhvbWFzIFNhaWxlciA8c2FpbGVyQGlmZS5lZS5ldGh6LmNoPgorCUFuZHJlYSBBcmNhbmdlbGkgPGFuZHJlYUBzdXNlLmRlPgorCUplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjEwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTAsMCArMSwxOTUgQEAKKyMjIworIyBUaGlzIG1ha2VmaWxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLAorIyBwcmltYXJpbHkgYmFzZWQgb24gaW4tbGluZSBjb21tZW50cyBpbiB2YXJpb3VzIHNvdXJjZSBmaWxlcy4KKyMgU2VlIERvY3VtZW50YXRpb24va2VybmVsLWRvYy1uYW5vLUhPV1RPLnR4dCBmb3IgaW5zdHJ1Y3Rpb24gaW4gaG93CisjIHRvIGR1Y3VtZW50IHRoZSBTUkMgLSBhbmQgaG93IHRvIHJlYWQgaXQuCisjIFRvIGFkZCBhIG5ldyBib29rIHRoZSBvbmx5IHN0ZXAgcmVxdWlyZWQgaXMgdG8gYWRkIHRoZSBib29rIHRvIHRoZQorIyBsaXN0IG9mIERPQ0JPT0tTLgorCitET0NCT09LUyA6PSB3YW5ib29rLnhtbCB6ODUzMGJvb2sueG1sIG1jYWJvb2sueG1sIHZpZGVvYm9vay54bWwgXAorCSAgICBrZXJuZWwtaGFja2luZy54bWwga2VybmVsLWxvY2tpbmcueG1sIHZpYS1hdWRpby54bWwgXAorCSAgICBkZXZpY2Vpb2Jvb2sueG1sIHByb2Nmcy1ndWlkZS54bWwgdHVsaXAtdXNlci54bWwgXAorCSAgICB3cml0aW5nX3VzYl9kcml2ZXIueG1sIHNjc2lkcml2ZXJzLnhtbCBzaXM5MDAueG1sIFwKKwkgICAga2VybmVsLWFwaS54bWwgam91cm5hbC1hcGkueG1sIGxzbS54bWwgdXNiLnhtbCBcCisJICAgIGdhZGdldC54bWwgbGliYXRhLnhtbCBtdGRuYW5kLnhtbCBsaWJycy54bWwKKworIyMjCisjIFRoZSBidWlsZCBwcm9jZXNzIGlzIGFzIGZvbGxvd3MgKHRhcmdldHMpOgorIyAgICAgICAgICAgICAgKHhtbGRvY3MpCisjIGZpbGUudG1wbCAtLT4gZmlsZS54bWwgKy0tPiBmaWxlLnBzICAgKHBzZG9jcykKKyMgICAgICAgICAgICAgICAgICAgICAgICArLS0+IGZpbGUucGRmICAocGRmZG9jcykKKyMgICAgICAgICAgICAgICAgICAgICAgICArLS0+IERJUj1maWxlICAoaHRtbGRvY3MpCisjICAgICAgICAgICAgICAgICAgICAgICAgKy0tPiBtYW4vICAgICAgKG1hbmRvY3MpCisKKyMjIworIyBUaGUgdGFyZ2V0cyB0aGF0IG1heSBiZSB1c2VkLgorLlBIT05ZOgl4bWxkb2NzIHNnbWxkb2NzIHBzZG9jcyBwZGZkb2NzIGh0bWxkb2NzIG1hbmRvY3MgaW5zdGFsbG1hbmRvY3MKKworQk9PS1MgOj0gJChhZGRwcmVmaXggJChvYmopLywkKERPQ0JPT0tTKSkKK3htbGRvY3M6ICQoQk9PS1MpCitzZ21sZG9jczogeG1sZG9jcworCitQUyA6PSAkKHBhdHN1YnN0ICUueG1sLCAlLnBzLCAkKEJPT0tTKSkKK3BzZG9jczogJChQUykKKworUERGIDo9ICQocGF0c3Vic3QgJS54bWwsICUucGRmLCAkKEJPT0tTKSkKK3BkZmRvY3M6ICQoUERGKQorCitIVE1MIDo9ICQocGF0c3Vic3QgJS54bWwsICUuaHRtbCwgJChCT09LUykpCitodG1sZG9jczogJChIVE1MKQorCitNQU4gOj0gJChwYXRzdWJzdCAlLnhtbCwgJS45LCAkKEJPT0tTKSkKK21hbmRvY3M6ICQoTUFOKQorCitpbnN0YWxsbWFuZG9jczogbWFuZG9jcworCSQoTUFLRU1BTikgaW5zdGFsbCBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFuCisKKyMjIworI0V4dGVybmFsIHByb2dyYW1zIHVzZWQKK0tFUk5FTERPQyA9IHNjcmlwdHMva2VybmVsLWRvYworRE9DUFJPQyAgID0gc2NyaXB0cy9iYXNpYy9kb2Nwcm9jCitTUExJVE1BTiAgPSAkKFBFUkwpICQoc3JjdHJlZSkvc2NyaXB0cy9zcGxpdC1tYW4KK01BS0VNQU4gICA9ICQoUEVSTCkgJChzcmN0cmVlKS9zY3JpcHRzL21ha2VtYW4KKworIyMjCisjIERPQ1BST0MgaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOgorIyAxKSBUbyBnZW5lcmF0ZSBhIGRlcGVuZGVuY3kgbGlzdCBmb3IgYSAudG1wbCBmaWxlCisjIDIpIFRvIHByZXByb2Nlc3MgYSAudG1wbCBmaWxlIGFuZCBjYWxsIGtlcm5lbC1kb2Mgd2l0aAorIyAgICAgYXBwcm9wcmlhdGUgcGFyYW1ldGVycy4KKyMgVGhlIGZvbGxvd2luZyBydWxlcyBhcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgLnhtbCBkb2N1bWVudGF0aW9uCisjIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoZSBmaW5hbCB0YXJnZXRzLiAocHMsIHBkZiwgaHRtbCkuCitxdWlldF9jbWRfZG9jcHJvYyA9IERPQ1BST0MgJEAKKyAgICAgIGNtZF9kb2Nwcm9jID0gU1JDVFJFRT0kKHNyY3RyZWUpLyAkKERPQ1BST0MpIGRvYyAkPCA+JEAKK2RlZmluZSBydWxlX2RvY3Byb2MKKwlzZXQgLWU7CQkJCQkJCQlcCisgICAgICAgICQoaWYgJCgkKHF1aWV0KWNtZF8kKDEpKSxlY2hvICcgICQoJChxdWlldCljbWRfJCgxKSknOykgCVwKKyAgICAgICAgJChjbWRfJCgxKSk7IAkJCQkJCQlcCisgICAgICAgICggCQkJCQkJCQlcCisgICAgICAgICAgZWNobyAnY21kXyRAIDo9ICQoY21kXyQoMSkpJzsgCQkJCVwKKyAgICAgICAgICBlY2hvICRAOiBgU1JDVFJFRT0kKHNyY3RyZWUpICQoRE9DUFJPQykgZGVwZW5kICQ8YDsgCQlcCisgICAgICAgICkgPiAkKGRpciAkQCkuJChub3RkaXIgJEApLmNtZAorZW5kZWYKKworJS54bWw6ICUudG1wbCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX3J1bGUsZG9jcHJvYykKKworIyMjCisjUmVhZCBpbiBhbGwgc2F2ZWQgZGVwZW5kZW5jeSBmaWxlcyAKK2NtZF9maWxlcyA6PSAkKHdpbGRjYXJkICQoZm9yZWFjaCBmLCQoQk9PS1MpLCQoZGlyICQoZikpLiQobm90ZGlyICQoZikpLmNtZCkpCisKK2lmbmVxICgkKGNtZF9maWxlcyksKQorICBpbmNsdWRlICQoY21kX2ZpbGVzKQorZW5kaWYKKworIyMjCisjIENoYW5nZXMgaW4ga2VybmVsLWRvYyBmb3JjZSBhIHJlYnVpbGQgb2YgYWxsIGRvY3VtZW50YXRpb24KKyQoQk9PS1MpOiAkKEtFUk5FTERPQykKKworIyMjCisjIHByb2NmcyBndWlkZSB1c2VzIGEgLmMgZmlsZSBhcyBleGFtcGxlIGNvZGUuCisjIFRoaXMgcmVxdWlyZXMgYW4gZXhwbGljaXQgZGVwZW5kZW5jeQorQy1wcm9jZnMtZXhhbXBsZSA9IHByb2Nmc19leGFtcGxlLnhtbAorQy1wcm9jZnMtZXhhbXBsZTIgPSAkKGFkZHByZWZpeCAkKG9iaikvLCQoQy1wcm9jZnMtZXhhbXBsZSkpCiskKG9iaikvcHJvY2ZzLWd1aWRlLnhtbDogJChDLXByb2Nmcy1leGFtcGxlMikKKworIyMjCisjIFJ1bGVzIHRvIGdlbmVyYXRlIHBvc3RzY3JpcHQsIFBERiBhbmQgSFRNTAorIyBkYjJodG1sIGNyZWF0ZXMgYSBkaXJlY3RvcnkuIEdlbmVyYXRlIGEgaHRtbCBmaWxlIHVzZWQgZm9yIHRpbWVzdGFtcAorCitxdWlldF9jbWRfZGIycHMgPSBEQjJQUyAgICRACisgICAgICBjbWRfZGIycHMgPSBkYjJwcyAtbyAkKGRpciAkQCkgJDwKKyUucHMgOiAlLnhtbAorCUAod2hpY2ggZGIycHMgPiAvZGV2L251bGwgMj4mMSkgfHwgXAorCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgRG9jQm9vayBzdHlsZXNoZWV0cyAqKioiOyBcCisJICBleGl0IDEpCisJJChjYWxsIGNtZCxkYjJwcykKKworcXVpZXRfY21kX2RiMnBkZiA9IERCMlBERiAgJEAKKyAgICAgIGNtZF9kYjJwZGYgPSBkYjJwZGYgLW8gJChkaXIgJEApICQ8CislLnBkZiA6ICUueG1sCisJQCh3aGljaCBkYjJwZGYgPiAvZGV2L251bGwgMj4mMSkgfHwgXAorCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgRG9jQm9vayBzdHlsZXNoZWV0cyAqKioiOyBcCisJICBleGl0IDEpCisJJChjYWxsIGNtZCxkYjJwZGYpCisKK3F1aWV0X2NtZF9kYjJodG1sID0gREIySFRNTCAkQAorICAgICAgY21kX2RiMmh0bWwgPSBkYjJodG1sIC1vICQocGF0c3Vic3QgJS5odG1sLCUsJEApICQ8ICYmCQkgICAgICBcCisJCWVjaG8gJzxhIEhSRUY9IiQocGF0c3Vic3QgJS5odG1sLCUsJChub3RkaXIgJEApKS9ib29rMS5odG1sIj4gXAorICAgICAgICAgR290byAkKHBhdHN1YnN0ICUuaHRtbCwlLCQobm90ZGlyICRAKSk8L2E+PHA+JyA+ICRACisKKyUuaHRtbDoJJS54bWwKKwlAKHdoaWNoIGRiMmh0bWwgPiAvZGV2L251bGwgMj4mMSkgfHwgXAorCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgRG9jQm9vayBzdHlsZXNoZWV0cyAqKioiOyBcCisJICBleGl0IDEpCisJQHJtIC1yZiAkQCAkKHBhdHN1YnN0ICUuaHRtbCwlLCRAKQorCSQoY2FsbCBjbWQsZGIyaHRtbCkKKwlAaWYgWyAhIC16ICIkKFBORy0kKGJhc2VuYW1lICQobm90ZGlyICRAKSkpIiBdOyB0aGVuIFwKKyAgICAgICAgICAgIGNwICQoUE5HLSQoYmFzZW5hbWUgJChub3RkaXIgJEApKSkgJChwYXRzdWJzdCAlLmh0bWwsJSwkQCk7IGZpCisKKyMjIworIyBSdWxlIHRvIGdlbmVyYXRlIG1hbiBmaWxlcyAtIG91dHB1dCBpcyBwbGFjZWQgaW4gdGhlIG1hbiBzdWJkaXJlY3RvcnkKKworJS45OgklLnhtbAoraWZuZXEgKCQoS0JVSUxEX1NSQyksKQorCSQoUSlta2RpciAtcCAkKG9ianRyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYW4KK2VuZGlmCisJJChTUExJVE1BTikgJDwgJChvYmp0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFuICIkKFZFUlNJT04pLiQoUEFUQ0hMRVZFTCkuJChTVUJMRVZFTCkiCisJJChNQUtFTUFOKSBjb252ZXJ0ICQob2JqdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbiAkPAorCisjIyMKKyMgUnVsZXMgdG8gZ2VuZXJhdGUgcG9zdHNjcmlwdHMgYW5kIFBORyBpbWdhZ2VzIGZyb20gLmZpZyBmb3JtYXQgZmlsZXMKK3F1aWV0X2NtZF9maWcyZXBzID0gRklHMkVQUyAkQAorICAgICAgY21kX2ZpZzJlcHMgPSBmaWcyZGV2IC1MZXBzICQ8ICRACisKKyUuZXBzOiAlLmZpZworCUAod2hpY2ggZmlnMmRldiA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCB0cmFuc2ZpZyAqKioiOyBcCisJICBleGl0IDEpCisJJChjYWxsIGNtZCxmaWcyZXBzKQorCitxdWlldF9jbWRfZmlnMnBuZyA9IEZJRzJQTkcgJEAKKyAgICAgIGNtZF9maWcycG5nID0gZmlnMmRldiAtTHBuZyAkPCAkQAorCislLnBuZzogJS5maWcKKwlAKHdoaWNoIGZpZzJkZXYgPiAvZGV2L251bGwgMj4mMSkgfHwgXAorCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgdHJhbnNmaWcgKioqIjsgXAorCSAgZXhpdCAxKQorCSQoY2FsbCBjbWQsZmlnMnBuZykKKworIyMjCisjIFJ1bGUgdG8gY29udmVydCBhIC5jIGZpbGUgdG8gaW5saW5lIFhNTCBkb2N1bWVudGF0aW9uCislLnhtbDogJS5jCisJQGVjaG8gJyAgR0VOICAgICAkQCcKKwlAKCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgZWNobyAiPHByb2dyYW1saXN0aW5nPiI7ICAgXAorCSAgIGV4cGFuZCAtLXRhYnM9OCA8ICQ8IHwgICAgIFwKKwkgICBzZWQgLWUgInMvJi9cXCZhbXA7L2ciICAgICBcCisJICAgICAgIC1lICJzLzwvXFwmbHQ7L2ciICAgICAgXAorCSAgICAgICAtZSAicy8+L1xcJmd0Oy9nIjsgICAgIFwKKwkgICBlY2hvICI8L3Byb2dyYW1saXN0aW5nPiIpICA+ICRACisKKyMjIworIyBIZWxwIHRhcmdldHMgYXMgdXNlZCBieSB0aGUgdG9wLWxldmVsIG1ha2VmaWxlCitkb2NoZWxwOgorCUBlY2hvICAnICBMaW51eCBrZXJuZWwgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbiBpbiBkaWZmZXJlbnQgZm9ybWF0czonCisJQGVjaG8gICcgIHhtbGRvY3MgKFhNTCBEb2NCb29rKSwgcHNkb2NzIChQb3N0c2NyaXB0KSwgcGRmZG9jcyAoUERGKScKKwlAZWNobyAgJyAgaHRtbGRvY3MgKEhUTUwpLCBtYW5kb2NzIChtYW4gcGFnZXMsIHVzZSBpbnN0YWxsbWFuZG9jcyB0byBpbnN0YWxsKScKKworIyMjCisjIFRlbXBvcmFyeSBmaWxlcyBsZWZ0IGJ5IHZhcmlvdXMgdG9vbHMKK2NsZWFuLWZpbGVzIDo9ICQoRE9DQk9PS1MpIFwKKwkkKHBhdHN1YnN0ICUueG1sLCAlLmR2aSwgICQoRE9DQk9PS1MpKSBcCisJJChwYXRzdWJzdCAlLnhtbCwgJS5hdXgsICAkKERPQ0JPT0tTKSkgXAorCSQocGF0c3Vic3QgJS54bWwsICUudGV4LCAgJChET0NCT09LUykpIFwKKwkkKHBhdHN1YnN0ICUueG1sLCAlLmxvZywgICQoRE9DQk9PS1MpKSBcCisJJChwYXRzdWJzdCAlLnhtbCwgJS5vdXQsICAkKERPQ0JPT0tTKSkgXAorCSQocGF0c3Vic3QgJS54bWwsICUucHMsICAgJChET0NCT09LUykpIFwKKwkkKHBhdHN1YnN0ICUueG1sLCAlLnBkZiwgICQoRE9DQk9PS1MpKSBcCisJJChwYXRzdWJzdCAlLnhtbCwgJS5odG1sLCAkKERPQ0JPT0tTKSkgXAorCSQocGF0c3Vic3QgJS54bWwsICUuOSwgICAgJChET0NCT09LUykpIFwKKwkkKEMtcHJvY2ZzLWV4YW1wbGUpCisKK2NsZWFuLWRpcnMgOj0gJChwYXRzdWJzdCAlLnhtbCwlLCQoRE9DQk9PS1MpKQorCisjbWFuIHB1dCBmaWxlcyBpbiBtYW4gc3ViZGlyIC0gdHJhdmVyc2UgZG93bgorc3ViZGlyLSA6PSBtYW4vCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0MWYyZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2Vpb2Jvb2sudG1wbApAQCAtMCwwICsxLDM0MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJEb2luZ0lPIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5CdXMtSW5kZXBlbmRlbnQgRGV2aWNlIEFjY2Vzc2VzPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5NYXR0aGV3PC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+V2lsY294PC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+bWF0dGhld0B3aWwuY3g8L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5BbGFuPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+Q294PC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+YWxhbkByZWRoYXQuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMTwveWVhcj4KKyAgIDxob2xkZXI+TWF0dGhldyBXaWxjb3g8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisJTGludXggcHJvdmlkZXMgYW4gQVBJIHdoaWNoIGFic3RyYWN0cyBwZXJmb3JtaW5nIElPIGFjcm9zcyBhbGwgYnVzc2VzCisJYW5kIGRldmljZXMsIGFsbG93aW5nIGRldmljZSBkcml2ZXJzIHRvIGJlIHdyaXR0ZW4gaW5kZXBlbmRlbnRseSBvZgorCWJ1cyB0eXBlLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iYnVncyI+CisgICAgIDx0aXRsZT5Lbm93biBCdWdzIEFuZCBBc3N1bXB0aW9uczwvdGl0bGU+CisgIDxwYXJhPgorCU5vbmUuCQorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibW1pbyI+CisgICAgPHRpdGxlPk1lbW9yeSBNYXBwZWQgSU88L3RpdGxlPgorICAgIDxzZWN0MT4KKyAgICAgIDx0aXRsZT5HZXR0aW5nIEFjY2VzcyB0byB0aGUgRGV2aWNlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorCVRoZSBtb3N0IHdpZGVseSBzdXBwb3J0ZWQgZm9ybSBvZiBJTyBpcyBtZW1vcnkgbWFwcGVkIElPLgorCVRoYXQgaXMsIGEgcGFydCBvZiB0aGUgQ1BVJ3MgYWRkcmVzcyBzcGFjZSBpcyBpbnRlcnByZXRlZAorCW5vdCBhcyBhY2Nlc3NlcyB0byBtZW1vcnksIGJ1dCBhcyBhY2Nlc3NlcyB0byBhIGRldmljZS4gIFNvbWUKKwlhcmNoaXRlY3R1cmVzIGRlZmluZSBkZXZpY2VzIHRvIGJlIGF0IGEgZml4ZWQgYWRkcmVzcywgYnV0IG1vc3QKKwloYXZlIHNvbWUgbWV0aG9kIG9mIGRpc2NvdmVyaW5nIGRldmljZXMuICBUaGUgUENJIGJ1cyB3YWxrIGlzIGEKKwlnb29kIGV4YW1wbGUgb2Ygc3VjaCBhIHNjaGVtZS4JVGhpcyBkb2N1bWVudCBkb2VzIG5vdCBjb3ZlciBob3cKKwl0byByZWNlaXZlIHN1Y2ggYW4gYWRkcmVzcywgYnV0IGFzc3VtZXMgeW91IGFyZSBzdGFydGluZyB3aXRoIG9uZS4KKwlQaHlzaWNhbCBhZGRyZXNzZXMgYXJlIG9mIHR5cGUgdW5zaWduZWQgbG9uZy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVRoaXMgYWRkcmVzcyBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkuICBJbnN0ZWFkLCB0byBnZXQgYW4KKwlhZGRyZXNzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgZGVzY3JpYmVkCisJYmVsb3csIHlvdSBzaG91bGQgY2FsbCA8ZnVuY3Rpb24+aW9yZW1hcDwvZnVuY3Rpb24+LgorCUFuIGFkZHJlc3Mgc3VpdGFibGUgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlIHdpbGwgYmUgcmV0dXJuZWQgdG8geW91LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlBZnRlciB5b3UndmUgZmluaXNoZWQgdXNpbmcgdGhlIGRldmljZSAoc2F5LCBpbiB5b3VyIG1vZHVsZSdzCisJZXhpdCByb3V0aW5lKSwgY2FsbCA8ZnVuY3Rpb24+aW91bm1hcDwvZnVuY3Rpb24+IGluIG9yZGVyIHRvIHJldHVybgorCXRoZSBhZGRyZXNzIHNwYWNlIHRvIHRoZSBrZXJuZWwuICBNb3N0IGFyY2hpdGVjdHVyZXMgYWxsb2NhdGUgbmV3CisJYWRkcmVzcyBzcGFjZSBlYWNoIHRpbWUgeW91IGNhbGwgPGZ1bmN0aW9uPmlvcmVtYXA8L2Z1bmN0aW9uPiwgYW5kCisJdGhleSBjYW4gcnVuIG91dCB1bmxlc3MgeW91IGNhbGwgPGZ1bmN0aW9uPmlvdW5tYXA8L2Z1bmN0aW9uPi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPkFjY2Vzc2luZyB0aGUgZGV2aWNlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorCVRoZSBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UgbW9zdCB1c2VkIGJ5IGRyaXZlcnMgaXMgcmVhZGluZyBhbmQKKwl3cml0aW5nIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIG9uIHRoZSBkZXZpY2UuCUxpbnV4IHByb3ZpZGVzCisJaW50ZXJmYWNlcyB0byByZWFkIGFuZCB3cml0ZSA4LWJpdCwgMTYtYml0LCAzMi1iaXQgYW5kIDY0LWJpdAorCXF1YW50aXRpZXMuICBEdWUgdG8gYSBoaXN0b3JpY2FsIGFjY2lkZW50LCB0aGVzZSBhcmUgbmFtZWQgYnl0ZSwKKwl3b3JkLCBsb25nIGFuZCBxdWFkIGFjY2Vzc2VzLiAgQm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3NlcyBhcmUKKwlzdXBwb3J0ZWQ7IHRoZXJlIGlzIG5vIHByZWZldGNoIHN1cHBvcnQgYXQgdGhpcyB0aW1lLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlUaGUgZnVuY3Rpb25zIGFyZSBuYW1lZCA8ZnVuY3Rpb24+cmVhZGI8L2Z1bmN0aW9uPiwKKwk8ZnVuY3Rpb24+cmVhZHc8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPnJlYWRsPC9mdW5jdGlvbj4sCisJPGZ1bmN0aW9uPnJlYWRxPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5yZWFkYl9yZWxheGVkPC9mdW5jdGlvbj4sCisJPGZ1bmN0aW9uPnJlYWR3X3JlbGF4ZWQ8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPnJlYWRsX3JlbGF4ZWQ8L2Z1bmN0aW9uPiwKKwk8ZnVuY3Rpb24+cmVhZHFfcmVsYXhlZDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+d3JpdGViPC9mdW5jdGlvbj4sCisJPGZ1bmN0aW9uPndyaXRldzwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+d3JpdGVsPC9mdW5jdGlvbj4gYW5kCisJPGZ1bmN0aW9uPndyaXRlcTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlTb21lIGRldmljZXMgKHN1Y2ggYXMgZnJhbWVidWZmZXJzKSB3b3VsZCBsaWtlIHRvIHVzZSBsYXJnZXIKKwl0cmFuc2ZlcnMgdGhhbiA4IGJ5dGVzIGF0IGEgdGltZS4gIEZvciB0aGVzZSBkZXZpY2VzLCB0aGUKKwk8ZnVuY3Rpb24+bWVtY3B5X3RvaW88L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPm1lbWNweV9mcm9taW88L2Z1bmN0aW9uPgorCWFuZCA8ZnVuY3Rpb24+bWVtc2V0X2lvPC9mdW5jdGlvbj4gZnVuY3Rpb25zIGFyZSBwcm92aWRlZC4KKwlEbyBub3QgdXNlIG1lbXNldCBvciBtZW1jcHkgb24gSU8gYWRkcmVzc2VzOyB0aGV5CisJYXJlIG5vdCBndWFyYW50ZWVkIHRvIGNvcHkgZGF0YSBpbiBvcmRlci4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisJVGhlIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB0byBiZSBvcmRlcmVkLiBUaGF0IGlzIHRoZQorCWNvbXBpbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gcmVvcmRlciB0aGUgSS9PIHNlcXVlbmNlLiBXaGVuIHRoZSAKKwlvcmRlcmluZyBjYW4gYmUgY29tcGlsZXIgb3B0aW1pc2VkLCB5b3UgY2FuIHVzZSA8ZnVuY3Rpb24+CisJX19yZWFkYjwvZnVuY3Rpb24+IGFuZCBmcmllbmRzIHRvIGluZGljYXRlIHRoZSByZWxheGVkIG9yZGVyaW5nLiBVc2UgCisJdGhpcyB3aXRoIGNhcmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVdoaWxlIHRoZSBiYXNpYyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgdG8gYmUgc3luY2hyb25vdXMgd2l0aCByZXNwZWN0CisJdG8gZWFjaCBvdGhlciBhbmQgb3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlciB0aGUgYnVzc2VzIHRoZQorCWRldmljZXMgc2l0IG9uIG1heSB0aGVtc2VsdmVzIGhhdmUgYXN5bmNocm9uaWNpdHkuIEluIHBhcnRpY3VsYXIgbWFueQorCWF1dGhvcnMgYXJlIGJ1cm5lZCBieSB0aGUgZmFjdCB0aGF0IFBDSSBidXMgd3JpdGVzIGFyZSBwb3N0ZWQKKwlhc3luY2hyb25vdXNseS4gQSBkcml2ZXIgYXV0aG9yIG11c3QgaXNzdWUgYSByZWFkIGZyb20gdGhlIHNhbWUKKwlkZXZpY2UgdG8gZW5zdXJlIHRoYXQgd3JpdGVzIGhhdmUgb2NjdXJyZWQgaW4gdGhlIHNwZWNpZmljIGNhc2VzIHRoZQorCWF1dGhvciBjYXJlcy4gVGhpcyBraW5kIG9mIHByb3BlcnR5IGNhbm5vdCBiZSBoaWRkZW4gZnJvbSBkcml2ZXIKKwl3cml0ZXJzIGluIHRoZSBBUEkuICBJbiBzb21lIGNhc2VzLCB0aGUgcmVhZCB1c2VkIHRvIGZsdXNoIHRoZSBkZXZpY2UKKwltYXkgYmUgZXhwZWN0ZWQgdG8gZmFpbCAoaWYgdGhlIGNhcmQgaXMgcmVzZXR0aW5nLCBmb3IgZXhhbXBsZSkuICBJbgorCXRoYXQgY2FzZSwgdGhlIHJlYWQgc2hvdWxkIGJlIGRvbmUgZnJvbSBjb25maWcgc3BhY2UsIHdoaWNoIGlzCisJZ3VhcmFudGVlZCB0byBzb2Z0LWZhaWwgaWYgdGhlIGNhcmQgZG9lc24ndCByZXNwb25kLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgZmx1c2hpbmcgYSB3cml0ZSB0byBhIGRldmljZSB3aGVuCisJdGhlIGRyaXZlciB3b3VsZCBsaWtlIHRvIGVuc3VyZSB0aGUgd3JpdGUncyBlZmZlY3RzIGFyZSB2aXNpYmxlIHByaW9yCisJdG8gY29udGludWluZyBleGVjdXRpb24uCisgICAgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBpbmxpbmUgdm9pZAorcWxhMTI4MF9kaXNhYmxlX2ludHJzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX3JlZyAqcmVnOworCisJcmVnID0gaGEtPmlvYmFzZTsKKwkvKiBkaXNhYmxlIHJpc2MgYW5kIGhvc3QgaW50ZXJydXB0cyAqLworCVdSVF9SRUdfV09SRCgmYW1wO3JlZy0+aWN0cmwsIDApOworCS8qCisJICogVGhlIGZvbGxvd2luZyByZWFkIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGFib3ZlIHdyaXRlCisJICogaGFzIGJlZW4gcmVjZWl2ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgd2UgcmV0dXJuIGZyb20gdGhpcworCSAqIGZ1bmN0aW9uLgorCSAqLworCVJEX1JFR19XT1JEKCZhbXA7cmVnLT5pY3RybCk7CisJaGEtPmZsYWdzLmludHNfZW5hYmxlZCA9IDA7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT4KKwlJbiBhZGRpdGlvbiB0byB3cml0ZSBwb3N0aW5nLCBvbiBzb21lIGxhcmdlIG11bHRpcHJvY2Vzc2luZyBzeXN0ZW1zCisJKGUuZy4gU0dJIENoYWxsZW5nZSwgT3JpZ2luIGFuZCBBbHRpeCBtYWNoaW5lcykgcG9zdGVkIHdyaXRlcyB3b24ndAorCWJlIHN0cm9uZ2x5IG9yZGVyZWQgY29taW5nIGZyb20gZGlmZmVyZW50IENQVXMuICBUaHVzIGl0J3MgaW1wb3J0YW50CisJdG8gcHJvcGVybHkgcHJvdGVjdCBwYXJ0cyBvZiB5b3VyIGRyaXZlciB0aGF0IGRvIG1lbW9yeS1tYXBwZWQgd3JpdGVzCisJd2l0aCBsb2NrcyBhbmQgdXNlIHRoZSA8ZnVuY3Rpb24+bW1pb3diPC9mdW5jdGlvbj4gdG8gbWFrZSBzdXJlIHRoZXkKKwlhcnJpdmUgaW4gdGhlIG9yZGVyIGludGVuZGVkLiAgSXNzdWluZyBhIHJlZ3VsYXIgPGZ1bmN0aW9uPnJlYWRYCisJPC9mdW5jdGlvbj4gd2lsbCBhbHNvIGVuc3VyZSB3cml0ZSBvcmRlcmluZywgYnV0IHNob3VsZCBvbmx5IGJlIHVzZWQKKwl3aGVuIHRoZSBkcml2ZXIgaGFzIHRvIGJlIHN1cmUgdGhhdCB0aGUgd3JpdGUgaGFzIGFjdHVhbGx5IGFycml2ZWQKKwlhdCB0aGUgZGV2aWNlIChub3QgdGhhdCBpdCdzIHNpbXBseSBvcmRlcmVkIHdpdGggcmVzcGVjdCB0byBvdGhlcgorCXdyaXRlcyksIHNpbmNlIGEgZnVsbCA8ZnVuY3Rpb24+cmVhZFg8L2Z1bmN0aW9uPiBpcyBhIHJlbGF0aXZlbHkKKwlleHBlbnNpdmUgb3BlcmF0aW9uLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlHZW5lcmFsbHksIG9uZSBzaG91bGQgdXNlIDxmdW5jdGlvbj5tbWlvd2I8L2Z1bmN0aW9uPiBwcmlvciB0bworCXJlbGVhc2luZyBhIHNwaW5sb2NrIHRoYXQgcHJvdGVjdHMgcmVnaW9ucyB1c2luZyA8ZnVuY3Rpb24+d3JpdGViCisJPC9mdW5jdGlvbj4gb3Igc2ltaWxhciBmdW5jdGlvbnMgdGhhdCBhcmVuJ3Qgc3Vycm91bmRlZCBieSA8ZnVuY3Rpb24+CisJcmVhZGI8L2Z1bmN0aW9uPiBjYWxscywgd2hpY2ggd2lsbCBlbnN1cmUgb3JkZXJpbmcgYW5kIGZsdXNoaW5nLiAgVGhlCisJZm9sbG93aW5nIHBzZXVkb2NvZGUgaWxsdXN0cmF0ZXMgd2hhdCBtaWdodCBvY2N1ciBpZiB3cml0ZSBvcmRlcmluZworCWlzbid0IGd1YXJhbnRlZWQgdmlhIDxmdW5jdGlvbj5tbWlvd2I8L2Z1bmN0aW9uPiBvciBvbmUgb2YgdGhlCisJPGZ1bmN0aW9uPnJlYWRYPC9mdW5jdGlvbj4gZnVuY3Rpb25zLgorICAgICAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CitDUFUgQTogIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2X2xvY2ssIGZsYWdzKQorQ1BVIEE6ICAuLi4KK0NQVSBBOiAgd3JpdGVsKG5ld3ZhbCwgcmluZ19wdHIpOworQ1BVIEE6ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2X2xvY2ssIGZsYWdzKQorICAgICAgICAuLi4KK0NQVSBCOiAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXZfbG9jaywgZmxhZ3MpCitDUFUgQjogIHdyaXRlbChuZXd2YWwyLCByaW5nX3B0cik7CitDUFUgQjogIC4uLgorQ1BVIEI6ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2X2xvY2ssIGZsYWdzKQorPC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgPHBhcmE+CisJSW4gdGhlIGNhc2UgYWJvdmUsIG5ld3ZhbDIgY291bGQgYmUgd3JpdHRlbiB0byByaW5nX3B0ciBiZWZvcmUKKwluZXd2YWwuICBGaXhpbmcgaXQgaXMgZWFzeSB0aG91Z2g6CisgICAgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK0NQVSBBOiAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXZfbG9jaywgZmxhZ3MpCitDUFUgQTogIC4uLgorQ1BVIEE6ICB3cml0ZWwobmV3dmFsLCByaW5nX3B0cik7CitDUFUgQTogIG1taW93YigpOyAvKiBlbnN1cmUgbm8gb3RoZXIgd3JpdGVzIGJlYXQgdXMgdG8gdGhlIGRldmljZSAqLworQ1BVIEE6ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2X2xvY2ssIGZsYWdzKQorICAgICAgICAuLi4KK0NQVSBCOiAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXZfbG9jaywgZmxhZ3MpCitDUFUgQjogIHdyaXRlbChuZXd2YWwyLCByaW5nX3B0cik7CitDUFUgQjogIC4uLgorQ1BVIEI6ICBtbWlvd2IoKTsKK0NQVSBCOiAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldl9sb2NrLCBmbGFncykKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgIDxwYXJhPgorCVNlZSB0ZzMuYyBmb3IgYSByZWFsIHdvcmxkIGV4YW1wbGUgb2YgaG93IHRvIHVzZSA8ZnVuY3Rpb24+bW1pb3diCisJPC9mdW5jdGlvbj4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisJUENJIG9yZGVyaW5nIHJ1bGVzIGFsc28gZ3VhcmFudGVlIHRoYXQgUElPIHJlYWQgcmVzcG9uc2VzIGFycml2ZQorCWFmdGVyIGFueSBvdXRzdGFuZGluZyBETUEgd3JpdGVzIGZyb20gdGhhdCBidXMsIHNpbmNlIGZvciBzb21lIGRldmljZXMKKwl0aGUgcmVzdWx0IG9mIGEgPGZ1bmN0aW9uPnJlYWRiPC9mdW5jdGlvbj4gY2FsbCBtYXkgc2lnbmFsIHRvIHRoZQorCWRyaXZlciB0aGF0IGEgRE1BIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlLiAgSW4gbWFueSBjYXNlcywgaG93ZXZlciwKKwl0aGUgZHJpdmVyIG1heSB3YW50IHRvIGluZGljYXRlIHRoYXQgdGhlIG5leHQKKwk8ZnVuY3Rpb24+cmVhZGI8L2Z1bmN0aW9uPiBjYWxsIGhhcyBubyByZWxhdGlvbiB0byBhbnkgcHJldmlvdXMgRE1BCisJd3JpdGVzIHBlcmZvcm1lZCBieSB0aGUgZGV2aWNlLiAgVGhlIGRyaXZlciBjYW4gdXNlCisJPGZ1bmN0aW9uPnJlYWRiX3JlbGF4ZWQ8L2Z1bmN0aW9uPiBmb3IgdGhlc2UgY2FzZXMsIGFsdGhvdWdoIG9ubHkKKwlzb21lIHBsYXRmb3JtcyB3aWxsIGhvbm9yIHRoZSByZWxheGVkIHNlbWFudGljcy4gIFVzaW5nIHRoZSByZWxheGVkCisJcmVhZCBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9uCisJcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBpdC4gIFRoZSBxbGEyeHh4IGRyaXZlciBwcm92aWRlcyBleGFtcGxlcworCW9mIGhvdyB0byB1c2UgPGZ1bmN0aW9uPnJlYWRYX3JlbGF4ZWQ8L2Z1bmN0aW9uPi4gIEluIG1hbnkgY2FzZXMsCisJYSBtYWpvcml0eSBvZiB0aGUgZHJpdmVyJ3MgPGZ1bmN0aW9uPnJlYWRYPC9mdW5jdGlvbj4gY2FsbHMgY2FuCisJc2FmZWx5IGJlIGNvbnZlcnRlZCB0byA8ZnVuY3Rpb24+cmVhZFhfcmVsYXhlZDwvZnVuY3Rpb24+IGNhbGxzLCBzaW5jZQorCW9ubHkgYSBmZXcgd2lsbCBpbmRpY2F0ZSBvciBkZXBlbmQgb24gRE1BIGNvbXBsZXRpb24uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT4KKyAgICAgIDx0aXRsZT5JU0EgbGVnYWN5IGZ1bmN0aW9uczwvdGl0bGU+CisgICAgICA8cGFyYT4KKwlPbiBvbGRlciBrZXJuZWxzICgyLjIgYW5kIGVhcmxpZXIpIHRoZSBJU0EgYnVzIGNvdWxkIGJlIHJlYWQgb3IKKwl3cml0dGVuIHdpdGggdGhlc2UgZnVuY3Rpb25zIGFuZCB3aXRob3V0IGlvcmVtYXAgYmVpbmcgdXNlZC4gVGhpcyBpcworCW5vIGxvbmdlciB0cnVlIGluIExpbnV4IDIuNC4gQSBzZXQgb2YgZXF1aXZhbGVudCBmdW5jdGlvbnMgZXhpc3QgZm9yCisJZWFzeSBsZWdhY3kgZHJpdmVyIHBvcnRpbmcuIFRoZSBmdW5jdGlvbnMgYXZhaWxhYmxlIGFyZSBwcmVmaXhlZAorCXdpdGggJ2lzYV8nIGFuZCBhcmUgPGZ1bmN0aW9uPmlzYV9yZWFkYjwvZnVuY3Rpb24+LAorCTxmdW5jdGlvbj5pc2Ffd3JpdGViPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5pc2FfcmVhZHc8L2Z1bmN0aW9uPiwgCisJPGZ1bmN0aW9uPmlzYV93cml0ZXc8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmlzYV9yZWFkbDwvZnVuY3Rpb24+LAorCTxmdW5jdGlvbj5pc2Ffd3JpdGVsPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5pc2FfbWVtY3B5X2Zyb21pbzwvZnVuY3Rpb24+CisJYW5kIDxmdW5jdGlvbj5pc2FfbWVtY3B5X3RvaW88L2Z1bmN0aW9uPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisJVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgdXNlZCBpbiBuZXcgZHJpdmVycywgYW5kIHdpbGwKKwlldmVudHVhbGx5IGJlIGdvaW5nIGF3YXkuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXI+CisgICAgPHRpdGxlPlBvcnQgU3BhY2UgQWNjZXNzZXM8L3RpdGxlPgorICAgIDxzZWN0MT4KKyAgICAgIDx0aXRsZT5Qb3J0IFNwYWNlIEV4cGxhaW5lZDwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorCUFub3RoZXIgZm9ybSBvZiBJTyBjb21tb25seSBzdXBwb3J0ZWQgaXMgUG9ydCBTcGFjZS4gIFRoaXMgaXMgYQorCXJhbmdlIG9mIGFkZHJlc3NlcyBzZXBhcmF0ZSB0byB0aGUgbm9ybWFsIG1lbW9yeSBhZGRyZXNzIHNwYWNlLgorCUFjY2VzcyB0byB0aGVzZSBhZGRyZXNzZXMgaXMgZ2VuZXJhbGx5IG5vdCBhcyBmYXN0IGFzIGFjY2Vzc2VzCisJdG8gdGhlIG1lbW9yeSBtYXBwZWQgYWRkcmVzc2VzLCBhbmQgaXQgYWxzbyBoYXMgYSBwb3RlbnRpYWxseQorCXNtYWxsZXIgYWRkcmVzcyBzcGFjZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisJVW5saWtlIG1lbW9yeSBtYXBwZWQgSU8sIG5vIHByZXBhcmF0aW9uIGlzIHJlcXVpcmVkCisJdG8gYWNjZXNzIHBvcnQgc3BhY2UuCisgICAgICA8L3BhcmE+CisKKyAgICA8L3NlY3QxPgorICAgIDxzZWN0MT4KKyAgICAgIDx0aXRsZT5BY2Nlc3NpbmcgUG9ydCBTcGFjZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKwlBY2Nlc3NlcyB0byB0aGlzIHNwYWNlIGFyZSBwcm92aWRlZCB0aHJvdWdoIGEgc2V0IG9mIGZ1bmN0aW9ucworCXdoaWNoIGFsbG93IDgtYml0LCAxNi1iaXQgYW5kIDMyLWJpdCBhY2Nlc3NlczsgYWxzbworCWtub3duIGFzIGJ5dGUsIHdvcmQgYW5kIGxvbmcuICBUaGVzZSBmdW5jdGlvbnMgYXJlCisJPGZ1bmN0aW9uPmluYjwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+aW53PC9mdW5jdGlvbj4sCisJPGZ1bmN0aW9uPmlubDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+b3V0YjwvZnVuY3Rpb24+LAorCTxmdW5jdGlvbj5vdXR3PC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5vdXRsPC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVNvbWUgdmFyaWFudHMgYXJlIHByb3ZpZGVkIGZvciB0aGVzZSBmdW5jdGlvbnMuICBTb21lIGRldmljZXMKKwlyZXF1aXJlIHRoYXQgYWNjZXNzZXMgdG8gdGhlaXIgcG9ydHMgYXJlIHNsb3dlZCBkb3duLiAgVGhpcworCWZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQgYnkgYXBwZW5kaW5nIGEgPGZ1bmN0aW9uPl9wPC9mdW5jdGlvbj4KKwl0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gIFRoZXJlIGFyZSBhbHNvIGVxdWl2YWxlbnRzIHRvIG1lbWNweS4KKwlUaGUgPGZ1bmN0aW9uPmluczwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+b3V0czwvZnVuY3Rpb24+CisJZnVuY3Rpb25zIGNvcHkgYnl0ZXMsIHdvcmRzIG9yIGxvbmdzIHRvIHRoZSBnaXZlbiBwb3J0LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CishRWluY2x1ZGUvYXNtLWkzODYvaW8uaAorICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzQ0NDI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCkBAIC0wLDAgKzEsNzUyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9IlVTQi1HYWRnZXQtQVBJIj4KKyAgPGJvb2tpbmZvPgorICAgIDx0aXRsZT5VU0IgR2FkZ2V0IEFQSSBmb3IgTGludXg8L3RpdGxlPgorICAgIDxkYXRlPjIwIEF1Z3VzdCAyMDA0PC9kYXRlPgorICAgIDxlZGl0aW9uPjIwIEF1Z3VzdCAyMDA0PC9lZGl0aW9uPgorICAKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICAgPHBhcmE+CisJIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorCSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisJIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorCSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisJIHZlcnNpb24uCisgICAgICAgPC9wYXJhPgorCSAgCisgICAgICAgPHBhcmE+CisJIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKwkgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorCSB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisJIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICA8L3BhcmE+CisJICAKKyAgICAgICA8cGFyYT4KKwkgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisJIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKwkgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKwkgTUEgMDIxMTEtMTMwNyBVU0EKKyAgICAgICA8L3BhcmE+CisJICAKKyAgICAgICA8cGFyYT4KKwkgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisJIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgICAgICA8L3BhcmE+CisgICAgPC9sZWdhbG5vdGljZT4KKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+MjAwMy0yMDA0PC95ZWFyPgorICAgICAgPGhvbGRlcj5EYXZpZCBCcm93bmVsbDwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorCisgICAgPGF1dGhvcj4KKyAgICAgIDxmaXJzdG5hbWU+RGF2aWQ8L2ZpcnN0bmFtZT4gCisgICAgICA8c3VybmFtZT5Ccm93bmVsbDwvc3VybmFtZT4KKyAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgPGFkZHJlc3M+PGVtYWlsPmRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ8L2VtYWlsPjwvYWRkcmVzcz4KKyAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgPC9hdXRob3I+CisgIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKzxjaGFwdGVyPjx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCis8cGFyYT5UaGlzIGRvY3VtZW50IHByZXNlbnRzIGEgTGludXgtVVNCICJHYWRnZXQiCitrZXJuZWwgbW9kZQorQVBJLCBmb3IgdXNlIHdpdGhpbiBwZXJpcGhlcmFscyBhbmQgb3RoZXIgVVNCIGRldmljZXMKK3RoYXQgZW1iZWQgTGludXguCitJdCBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgQVBJIHN0cnVjdHVyZSwKK2FuZCBzaG93cyBob3cgdGhhdCBmaXRzIGludG8gYSBzeXN0ZW0gZGV2ZWxvcG1lbnQgcHJvamVjdC4KK1RoaXMgaXMgdGhlIGZpcnN0IHN1Y2ggQVBJIHJlbGVhc2VkIG9uIExpbnV4IHRvIGFkZHJlc3MKK2EgbnVtYmVyIG9mIGltcG9ydGFudCBwcm9ibGVtcywgaW5jbHVkaW5nOiA8L3BhcmE+CisKKzxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPlN1cHBvcnRzIFVTQiAyLjAsIGZvciBoaWdoIHNwZWVkIGRldmljZXMgd2hpY2gKKwljYW4gc3RyZWFtIGRhdGEgYXQgc2V2ZXJhbCBkb3plbiBtZWdhYnl0ZXMgcGVyIHNlY29uZC4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+SGFuZGxlcyBkZXZpY2VzIHdpdGggZG96ZW5zIG9mIGVuZHBvaW50cyBqdXN0IGFzCisJd2VsbCBhcyBvbmVzIHdpdGgganVzdCB0d28gZml4ZWQtZnVuY3Rpb24gb25lcy4gIEdhZGdldCBkcml2ZXJzCisJY2FuIGJlIHdyaXR0ZW4gc28gdGhleSdyZSBlYXN5IHRvIHBvcnQgdG8gbmV3IGhhcmR3YXJlLgorCTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5GbGV4aWJsZSBlbm91Z2ggdG8gZXhwb3NlIG1vcmUgY29tcGxleCBVU0IgZGV2aWNlCisJY2FwYWJpbGl0aWVzIHN1Y2ggYXMgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMsIG11bHRpcGxlIGludGVyZmFjZXMsCisJY29tcG9zaXRlIGRldmljZXMsCisJYW5kIGFsdGVybmF0ZSBpbnRlcmZhY2Ugc2V0dGluZ3MuCisJPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlVTQiAiT24tVGhlLUdvIiAoT1RHKSBzdXBwb3J0LCBpbiBjb25qdW5jdGlvbgorCXdpdGggdXBkYXRlcyB0byB0aGUgTGludXgtVVNCIGhvc3Qgc2lkZS4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+U2hhcmluZyBkYXRhIHN0cnVjdHVyZXMgYW5kIEFQSSBtb2RlbHMgd2l0aCB0aGUKKwlMaW51eC1VU0IgaG9zdCBzaWRlIEFQSS4gIFRoaXMgaGVscHMgdGhlIE9URyBzdXBwb3J0LCBhbmQKKwlsb29rcyBmb3J3YXJkIHRvIG1vcmUtc3ltbWV0cmljIGZyYW1ld29ya3MgKHdoZXJlIHRoZSBzYW1lCisJSS9PIG1vZGVsIGlzIHVzZWQgYnkgYm90aCBob3N0IGFuZCBkZXZpY2Ugc2lkZSBkcml2ZXJzKS4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+TWluaW1hbGlzdCwgc28gaXQncyBlYXNpZXIgdG8gc3VwcG9ydCBuZXcgZGV2aWNlCisJY29udHJvbGxlciBoYXJkd2FyZS4gIEkvTyBwcm9jZXNzaW5nIGRvZXNuJ3QgaW1wbHkgbGFyZ2UKKwlkZW1hbmRzIGZvciBtZW1vcnkgb3IgQ1BVIHJlc291cmNlcy4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCisKKzxwYXJhPk1vc3QgTGludXggZGV2ZWxvcGVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSB0aGlzIEFQSSwgc2luY2UgdGhleQoraGF2ZSBVU0IgImhvc3QiIGhhcmR3YXJlIGluIGEgUEMsIHdvcmtzdGF0aW9uLCBvciBzZXJ2ZXIuCitMaW51eCB1c2VycyB3aXRoIGVtYmVkZGVkIHN5c3RlbXMgYXJlIG1vcmUgbGlrZWx5IHRvCitoYXZlIFVTQiBwZXJpcGhlcmFsIGhhcmR3YXJlLgorVG8gZGlzdGluZ3Vpc2ggZHJpdmVycyBydW5uaW5nIGluc2lkZSBzdWNoIGhhcmR3YXJlIGZyb20gdGhlCittb3JlIGZhbWlsaWFyIExpbnV4ICJVU0IgZGV2aWNlIGRyaXZlcnMiLAord2hpY2ggYXJlIGhvc3Qgc2lkZSBwcm94aWVzIGZvciB0aGUgcmVhbCBVU0IgZGV2aWNlcywKK2EgZGlmZmVyZW50IHRlcm0gaXMgdXNlZDoKK3RoZSBkcml2ZXJzIGluc2lkZSB0aGUgcGVyaXBoZXJhbHMgYXJlICJVU0IgZ2FkZ2V0IGRyaXZlcnMiLgorSW4gVVNCIHByb3RvY29sIGludGVyYWN0aW9ucywgdGhlIGRldmljZSBkcml2ZXIgaXMgdGhlIG1hc3RlcgorKG9yICJjbGllbnQgZHJpdmVyIikKK2FuZCB0aGUgZ2FkZ2V0IGRyaXZlciBpcyB0aGUgc2xhdmUgKG9yICJmdW5jdGlvbiBkcml2ZXIiKS4KKzwvcGFyYT4KKworPHBhcmE+VGhlIGdhZGdldCBBUEkgcmVzZW1ibGVzIHRoZSBob3N0IHNpZGUgTGludXgtVVNCIEFQSSBpbiB0aGF0IGJvdGgKK3VzZSBxdWV1ZXMgb2YgcmVxdWVzdCBvYmplY3RzIHRvIHBhY2thZ2UgSS9PIGJ1ZmZlcnMsIGFuZCB0aG9zZSByZXF1ZXN0cworbWF5IGJlIHN1Ym1pdHRlZCBvciBjYW5jZWxlZC4KK1RoZXkgc2hhcmUgY29tbW9uIGRlZmluaXRpb25zIGZvciB0aGUgc3RhbmRhcmQgVVNCCis8ZW1waGFzaXM+Q2hhcHRlciA5PC9lbXBoYXNpcz4gbWVzc2FnZXMsIHN0cnVjdHVyZXMsIGFuZCBjb25zdGFudHMuCitBbHNvLCBib3RoIEFQSXMgYmluZCBhbmQgdW5iaW5kIGRyaXZlcnMgdG8gZGV2aWNlcy4KK1RoZSBBUElzIGRpZmZlciBpbiBkZXRhaWwsIHNpbmNlIHRoZSBob3N0IHNpZGUncyBjdXJyZW50CitVUkIgZnJhbWV3b3JrIGV4cG9zZXMgYSBudW1iZXIgb2YgaW1wbGVtZW50YXRpb24gZGV0YWlscworYW5kIGFzc3VtcHRpb25zIHRoYXQgYXJlIGluYXBwcm9wcmlhdGUgZm9yIGEgZ2FkZ2V0IEFQSS4KK1doaWxlIHRoZSBtb2RlbCBmb3IgY29udHJvbCB0cmFuc2ZlcnMgYW5kIGNvbmZpZ3VyYXRpb24KK21hbmFnZW1lbnQgaXMgbmVjZXNzYXJpbHkgZGlmZmVyZW50IChvbmUgc2lkZSBpcyBhIGhhcmR3YXJlLW5ldXRyYWwgbWFzdGVyLAordGhlIG90aGVyIGlzIGEgaGFyZHdhcmUtYXdhcmUgc2xhdmUpLCB0aGUgZW5kcG9pbnQgSS8wIEFQSSB1c2VkIGhlcmUKK3Nob3VsZCBhbHNvIGJlIHVzYWJsZSBmb3IgYW4gb3ZlcmhlYWQtcmVkdWNlZCBob3N0IHNpZGUgQVBJLgorPC9wYXJhPgorCis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJzdHJ1Y3R1cmUiPjx0aXRsZT5TdHJ1Y3R1cmUgb2YgR2FkZ2V0IERyaXZlcnM8L3RpdGxlPgorCis8cGFyYT5BIHN5c3RlbSBydW5uaW5nIGluc2lkZSBhIFVTQiBwZXJpcGhlcmFsCitub3JtYWxseSBoYXMgYXQgbGVhc3QgdGhyZWUgbGF5ZXJzIGluc2lkZSB0aGUga2VybmVsIHRvIGhhbmRsZQorVVNCIHByb3RvY29sIHByb2Nlc3NpbmcsIGFuZCBtYXkgaGF2ZSBhZGRpdGlvbmFsIGxheWVycyBpbgordXNlciBzcGFjZSBjb2RlLgorVGhlICJnYWRnZXQiIEFQSSBpcyB1c2VkIGJ5IHRoZSBtaWRkbGUgbGF5ZXIgdG8gaW50ZXJhY3QKK3dpdGggdGhlIGxvd2VzdCBsZXZlbCAod2hpY2ggZGlyZWN0bHkgaGFuZGxlcyBoYXJkd2FyZSkuCis8L3BhcmE+CisKKzxwYXJhPkluIExpbnV4LCBmcm9tIHRoZSBib3R0b20gdXAsIHRoZXNlIGxheWVycyBhcmU6Cis8L3BhcmE+CisKKzx2YXJpYWJsZWxpc3Q+CisKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICA8dGVybT48ZW1waGFzaXM+VVNCIENvbnRyb2xsZXIgRHJpdmVyPC9lbXBoYXNpcz48L3Rlcm0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+VGhpcyBpcyB0aGUgbG93ZXN0IHNvZnR3YXJlIGxldmVsLgorCUl0IGlzIHRoZSBvbmx5IGxheWVyIHRoYXQgdGFsa3MgdG8gaGFyZHdhcmUsCisJdGhyb3VnaCByZWdpc3RlcnMsIGZpZm9zLCBkbWEsIGlycXMsIGFuZCB0aGUgbGlrZS4KKwlUaGUgPGZpbGVuYW1lPiZsdDtsaW51eC91c2JfZ2FkZ2V0LmgmZ3Q7PC9maWxlbmFtZT4gQVBJIGFic3RyYWN0cworCXRoZSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZW5kcG9pbnQgaGFyZHdhcmUuCisJVGhhdCBoYXJkd2FyZSBpcyBleHBvc2VkIHRocm91Z2ggZW5kcG9pbnQgb2JqZWN0cywgd2hpY2ggYWNjZXB0CisJc3RyZWFtcyBvZiBJTi9PVVQgYnVmZmVycywgYW5kIHRocm91Z2ggY2FsbGJhY2tzIHRoYXQgaW50ZXJhY3QKKwl3aXRoIGdhZGdldCBkcml2ZXJzLgorCVNpbmNlIG5vcm1hbCBVU0IgZGV2aWNlcyBvbmx5IGhhdmUgb25lIHVwc3RyZWFtCisJcG9ydCwgdGhleSBvbmx5IGhhdmUgb25lIG9mIHRoZXNlIGRyaXZlcnMuCisJVGhlIGNvbnRyb2xsZXIgZHJpdmVyIGNhbiBzdXBwb3J0IGFueSBudW1iZXIgb2YgZGlmZmVyZW50CisJZ2FkZ2V0IGRyaXZlcnMsIGJ1dCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSB1c2VkIGF0IGEgdGltZS4KKwk8L3BhcmE+CisKKwk8cGFyYT5FeGFtcGxlcyBvZiBzdWNoIGNvbnRyb2xsZXIgaGFyZHdhcmUgaW5jbHVkZQorCXRoZSBQQ0ktYmFzZWQgTmV0Q2hpcCAyMjgwIFVTQiAyLjAgaGlnaCBzcGVlZCBjb250cm9sbGVyLAorCXRoZSBTQS0xMXgwIG9yIFBYQS0yNXggVURDIChmb3VuZCB3aXRoaW4gbWFueSBQREFzKSwKKwlhbmQgYSB2YXJpZXR5IG9mIG90aGVyIHByb2R1Y3RzLgorCTwvcGFyYT4KKworCTwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlbXBoYXNpcz5HYWRnZXQgRHJpdmVyPC9lbXBoYXNpcz48L3Rlcm0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+VGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHRoaXMgZHJpdmVyIGltcGxlbWVudHMgaGFyZHdhcmUtbmV1dHJhbAorCVVTQiBmdW5jdGlvbnMsIHVzaW5nIGNhbGxzIHRvIHRoZSBjb250cm9sbGVyIGRyaXZlci4KKwlCZWNhdXNlIHN1Y2ggaGFyZHdhcmUgdmFyaWVzIHdpZGVseSBpbiBjYXBhYmlsaXRpZXMgYW5kIHJlc3RyaWN0aW9ucywKKwlhbmQgaXMgdXNlZCBpbiBlbWJlZGRlZCBlbnZpcm9ubWVudHMgd2hlcmUgc3BhY2UgaXMgYXQgYSBwcmVtaXVtLAorCXRoZSBnYWRnZXQgZHJpdmVyIGlzIG9mdGVuIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lCisJdG8gd29yayB3aXRoIGVuZHBvaW50cyBzdXBwb3J0ZWQgYnkgb25lIHBhcnRpY3VsYXIgY29udHJvbGxlci4KKwlHYWRnZXQgZHJpdmVycyBtYXkgYmUgcG9ydGFibGUgdG8gc2V2ZXJhbCBkaWZmZXJlbnQgY29udHJvbGxlcnMsCisJdXNpbmcgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCisJKFJlY2VudCBrZXJuZWxzIHN1YnN0YW50aWFsbHkgc2ltcGxpZnkgdGhlIHdvcmsgaW52b2x2ZWQgaW4KKwlzdXBwb3J0aW5nIG5ldyBoYXJkd2FyZSwgYnkgPGVtcGhhc2lzPmF1dG9jb25maWd1cmluZzwvZW1waGFzaXM+CisJZW5kcG9pbnRzIGF1dG9tYXRpY2FsbHkgZm9yIG1hbnkgYnVsay1vcmllbnRlZCBkcml2ZXJzLikKKwlHYWRnZXQgZHJpdmVyIHJlc3BvbnNpYmlsaXRpZXMgaW5jbHVkZToKKwk8L3BhcmE+CisJPGl0ZW1pemVkbGlzdD4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsaW5nIHNldHVwIHJlcXVlc3RzIChlcDAgcHJvdG9jb2wgcmVzcG9uc2VzKQorCQlwb3NzaWJseSBpbmNsdWRpbmcgY2xhc3Mtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eQorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPnJldHVybmluZyBjb25maWd1cmF0aW9uIGFuZCBzdHJpbmcgZGVzY3JpcHRvcnMKKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJICAgIDxsaXN0aXRlbT48cGFyYT4ocmUpc2V0dGluZyBjb25maWd1cmF0aW9ucyBhbmQgaW50ZXJmYWNlCisJCWFsdHNldHRpbmdzLCBpbmNsdWRpbmcgZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIGVuZHBvaW50cworCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsaW5nIGxpZmUgY3ljbGUgZXZlbnRzLCBzdWNoIGFzIG1hbmFnaW5nCisJCWJpbmRpbmdzIHRvIGhhcmR3YXJlLAorCQlVU0Igc3VzcGVuZC9yZXN1bWUsIHJlbW90ZSB3YWtldXAsCisJCWFuZCBkaXNjb25uZWN0aW9uIGZyb20gdGhlIFVTQiBob3N0LgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPm1hbmFnaW5nIElOIGFuZCBPVVQgdHJhbnNmZXJzIG9uIGFsbCBjdXJyZW50bHkKKwkJZW5hYmxlZCBlbmRwb2ludHMKKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC9pdGVtaXplZGxpc3Q+CisKKwk8cGFyYT4KKwlTdWNoIGRyaXZlcnMgbWF5IGJlIG1vZHVsZXMgb2YgcHJvcHJpZXRhcnkgY29kZSwgYWx0aG91Z2gKKwl0aGF0IGFwcHJvYWNoIGlzIGRpc2NvdXJhZ2VkIGluIHRoZSBMaW51eCBjb21tdW5pdHkuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlbXBoYXNpcz5VcHBlciBMZXZlbDwvZW1waGFzaXM+PC90ZXJtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPk1vc3QgZ2FkZ2V0IGRyaXZlcnMgaGF2ZSBhbiB1cHBlciBib3VuZGFyeSB0aGF0IGNvbm5lY3RzCisJdG8gc29tZSBMaW51eCBkcml2ZXIgb3IgZnJhbWV3b3JrIGluIExpbnV4LgorCVRocm91Z2ggdGhhdCBib3VuZGFyeSBmbG93cyB0aGUgZGF0YSB3aGljaCB0aGUgZ2FkZ2V0IGRyaXZlcgorCXByb2R1Y2VzIGFuZC9vciBjb25zdW1lcyB0aHJvdWdoIHByb3RvY29sIHRyYW5zZmVycyBvdmVyIFVTQi4KKwlFeGFtcGxlcyBpbmNsdWRlOgorCTwvcGFyYT4KKwk8aXRlbWl6ZWRsaXN0PgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+dXNlciBtb2RlIGNvZGUsIHVzaW5nIGdlbmVyaWMgKGdhZGdldGZzKQorCSAgICAgICAgb3IgYXBwbGljYXRpb24gc3BlY2lmaWMgZmlsZXMgaW4KKwkJPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPm5ldHdvcmtpbmcgc3Vic3lzdGVtIChmb3IgbmV0d29yayBnYWRnZXRzLAorCQlsaWtlIHRoZSBDREMgRXRoZXJuZXQgTW9kZWwgZ2FkZ2V0IGRyaXZlcikKKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJICAgIDxsaXN0aXRlbT48cGFyYT5kYXRhIGNhcHR1cmUgZHJpdmVycywgcGVyaGFwcyB2aWRlbzRMaW51eCBvcgorCQkgYSBzY2FubmVyIGRyaXZlcjsgb3IgdGVzdCBhbmQgbWVhc3VyZW1lbnQgaGFyZHdhcmUuCisJCSA8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPmlucHV0IHN1YnN5c3RlbSAoZm9yIEhJRCBnYWRnZXRzKQorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPnNvdW5kIHN1YnN5c3RlbSAoZm9yIGF1ZGlvIGdhZGdldHMpCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+ZmlsZSBzeXN0ZW0gKGZvciBQVFAgZ2FkZ2V0cykKKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJICAgIDxsaXN0aXRlbT48cGFyYT5ibG9jayBpL28gc3Vic3lzdGVtIChmb3IgdXNiLXN0b3JhZ2UgZ2FkZ2V0cykKKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJICAgIDxsaXN0aXRlbT48cGFyYT4uLi4gYW5kIG1vcmUgPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC9pdGVtaXplZGxpc3Q+CisJPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVtcGhhc2lzPkFkZGl0aW9uYWwgTGF5ZXJzPC9lbXBoYXNpcz48L3Rlcm0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+T3RoZXIgbGF5ZXJzIG1heSBleGlzdC4KKwlUaGVzZSBjb3VsZCBpbmNsdWRlIGtlcm5lbCBsYXllcnMsIHN1Y2ggYXMgbmV0d29yayBwcm90b2NvbCBzdGFja3MsCisJYXMgd2VsbCBhcyB1c2VyIG1vZGUgYXBwbGljYXRpb25zIGJ1aWxkaW5nIG9uIHN0YW5kYXJkIFBPU0lYCisJc3lzdGVtIGNhbGwgQVBJcyBzdWNoIGFzCisJPGVtcGhhc2lzPm9wZW4oKTwvZW1waGFzaXM+LCA8ZW1waGFzaXM+Y2xvc2UoKTwvZW1waGFzaXM+LAorCTxlbXBoYXNpcz5yZWFkKCk8L2VtcGhhc2lzPiBhbmQgPGVtcGhhc2lzPndyaXRlKCk8L2VtcGhhc2lzPi4KKwlPbiBuZXdlciBzeXN0ZW1zLCBQT1NJWCBBc3luYyBJL08gY2FsbHMgbWF5IGJlIGFuIG9wdGlvbi4KKwlTdWNoIHVzZXIgbW9kZSBjb2RlIHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIHN1YmplY3QgdG8KKwl0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKworPC92YXJpYWJsZWxpc3Q+CisKKzxwYXJhPk9URy1jYXBhYmxlIHN5c3RlbXMgd2lsbCBhbHNvIG5lZWQgdG8gaW5jbHVkZSBhIHN0YW5kYXJkIExpbnV4LVVTQgoraG9zdCBzaWRlIHN0YWNrLAord2l0aCA8ZW1waGFzaXM+dXNiY29yZTwvZW1waGFzaXM+LAorb25lIG9yIG1vcmUgPGVtcGhhc2lzPkhvc3QgQ29udHJvbGxlciBEcml2ZXJzPC9lbXBoYXNpcz4gKEhDRHMpLAorPGVtcGhhc2lzPlVTQiBEZXZpY2UgRHJpdmVyczwvZW1waGFzaXM+IHRvIHN1cHBvcnQKK3RoZSBPVEcgIlRhcmdldGVkIFBlcmlwaGVyYWwgTGlzdCIsCithbmQgc28gZm9ydGguCitUaGVyZSB3aWxsIGFsc28gYmUgYW4gPGVtcGhhc2lzPk9URyBDb250cm9sbGVyIERyaXZlcjwvZW1waGFzaXM+LAord2hpY2ggaXMgdmlzaWJsZSB0byBnYWRnZXQgYW5kIGRldmljZSBkcml2ZXIgZGV2ZWxvcGVycyBvbmx5IGluZGlyZWN0bHkuCitUaGF0IGhlbHBzIHRoZSBob3N0IGFuZCBkZXZpY2Ugc2lkZSBVU0IgY29udHJvbGxlcnMgaW1wbGVtZW50IHRoZQordHdvIG5ldyBPVEcgcHJvdG9jb2xzIChITlAgYW5kIFNSUCkuCitSb2xlcyBzd2l0Y2ggKGhvc3QgdG8gcGVyaXBoZXJhbCwgb3IgdmljZSB2ZXJzYSkgdXNpbmcgSE5QCitkdXJpbmcgVVNCIHN1c3BlbmQgcHJvY2Vzc2luZywgYW5kIFNSUCBjYW4gYmUgdmlld2VkIGFzIGEKK21vcmUgYmF0dGVyeS1mcmllbmRseSBraW5kIG9mIGRldmljZSB3YWtldXAgcHJvdG9jb2wuCis8L3BhcmE+CisKKzxwYXJhPk92ZXIgdGltZSwgcmV1c2FibGUgdXRpbGl0aWVzIGFyZSBldm9sdmluZyB0byBoZWxwIG1ha2Ugc29tZQorZ2FkZ2V0IGRyaXZlciB0YXNrcyBzaW1wbGVyLgorRm9yIGV4YW1wbGUsIGJ1aWxkaW5nIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMgZnJvbSB2ZWN0b3JzIG9mCitkZXNjcmlwdG9ycyBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIGludGVyZmFjZXMgYW5kIGVuZHBvaW50cyBpcworbm93IGF1dG9tYXRlZCwgYW5kIG1hbnkgZHJpdmVycyBub3cgdXNlIGF1dG9jb25maWd1cmF0aW9uIHRvCitjaG9vc2UgaGFyZHdhcmUgZW5kcG9pbnRzIGFuZCBpbml0aWFsaXplIHRoZWlyIGRlc2NyaXB0b3JzLgorCitBIHBvdGVudGlhbCBleGFtcGxlIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QKK2lzIGNvZGUgaW1wbGVtZW50aW5nIHN0YW5kYXJkIFVTQi1JRiBwcm90b2NvbHMgZm9yCitISUQsIG5ldHdvcmtpbmcsIHN0b3JhZ2UsIG9yIGF1ZGlvIGNsYXNzZXMuCitTb21lIGRldmVsb3BlcnMgYXJlIGludGVyZXN0ZWQgaW4gS0RCIG9yIEtHREIgaG9va3MsIHRvIGxldAordGFyZ2V0IGhhcmR3YXJlIGJlIHJlbW90ZWx5IGRlYnVnZ2VkLgorTW9zdCBzdWNoIFVTQiBwcm90b2NvbCBjb2RlIGRvZXNuJ3QgbmVlZCB0byBiZSBoYXJkd2FyZS1zcGVjaWZpYywKK2FueSBtb3JlIHRoYW4gbmV0d29yayBwcm90b2NvbHMgbGlrZSBYMTEsIEhUVFAsIG9yIE5GUyBhcmUuCitTdWNoIGdhZGdldC1zaWRlIGludGVyZmFjZSBkcml2ZXJzIHNob3VsZCBldmVudHVhbGx5IGJlIGNvbWJpbmVkLAordG8gaW1wbGVtZW50IGNvbXBvc2l0ZSBkZXZpY2VzLgorPC9wYXJhPgorCis8L2NoYXB0ZXI+CisKKworPGNoYXB0ZXIgaWQ9ImFwaSI+PHRpdGxlPktlcm5lbCBNb2RlIEdhZGdldCBBUEk8L3RpdGxlPgorCis8cGFyYT5HYWRnZXQgZHJpdmVycyBkZWNsYXJlIHRoZW1zZWx2ZXMgdGhyb3VnaCBhCis8ZW1waGFzaXM+c3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyPC9lbXBoYXNpcz4sIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvcgorbW9zdCBwYXJ0cyBvZiBlbnVtZXJhdGlvbiBmb3IgYSA8ZW1waGFzaXM+c3RydWN0IHVzYl9nYWRnZXQ8L2VtcGhhc2lzPi4KK1RoZSByZXNwb25zZSB0byBhIHNldF9jb25maWd1cmF0aW9uIHVzdWFsbHkgaW52b2x2ZXMKK2VuYWJsaW5nIG9uZSBvciBtb3JlIG9mIHRoZSA8ZW1waGFzaXM+c3RydWN0IHVzYl9lcDwvZW1waGFzaXM+IG9iamVjdHMKK2V4cG9zZWQgYnkgdGhlIGdhZGdldCwgYW5kIHN1Ym1pdHRpbmcgb25lIG9yIG1vcmUKKzxlbXBoYXNpcz5zdHJ1Y3QgdXNiX3JlcXVlc3Q8L2VtcGhhc2lzPiBidWZmZXJzIHRvIHRyYW5zZmVyIGRhdGEuCitVbmRlcnN0YW5kIHRob3NlIGZvdXIgZGF0YSB0eXBlcywgYW5kIHRoZWlyIG9wZXJhdGlvbnMsIGFuZAoreW91IHdpbGwgdW5kZXJzdGFuZCBob3cgdGhpcyBBUEkgd29ya3MuCis8L3BhcmE+IAorCis8bm90ZT48dGl0bGU+SW5jb21wbGV0ZSBEYXRhIFR5cGUgRGVzY3JpcHRpb25zPC90aXRsZT4KKworPHBhcmE+VGhpcyBkb2N1bWVudGF0aW9uIHdhcyBwcmVwYXJlZCB1c2luZyB0aGUgc3RhbmRhcmQgTGludXgKK2tlcm5lbCA8ZmlsZW5hbWU+ZG9jcHJvYzwvZmlsZW5hbWU+IHRvb2wsIHdoaWNoIHR1cm5zIHRleHQKK2FuZCBpbi1jb2RlIGNvbW1lbnRzIGludG8gU0dNTCBEb2NCb29rIGFuZCB0aGVuIGludG8gdXNhYmxlCitmb3JtYXRzIHN1Y2ggYXMgSFRNTCBvciBQREYuCitPdGhlciB0aGFuIHRoZSAiQ2hhcHRlciA5IiBkYXRhIHR5cGVzLCBtb3N0IG9mIHRoZSBzaWduaWZpY2FudAorZGF0YSB0eXBlcyBhbmQgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaGVyZS4KKzwvcGFyYT4KKworPHBhcmE+SG93ZXZlciwgZG9jcHJvYyBkb2VzIG5vdCB1bmRlcnN0YW5kIGFsbCB0aGUgQyBjb25zdHJ1Y3RzCit0aGF0IGFyZSB1c2VkLCBzbyBzb21lIHJlbGV2YW50IGluZm9ybWF0aW9uIGlzIGxpa2VseSBvbWl0dGVkIGZyb20KK3doYXQgeW91IGFyZSByZWFkaW5nLiAgCitPbmUgZXhhbXBsZSBvZiBzdWNoIGluZm9ybWF0aW9uIGlzIGVuZHBvaW50IGF1dG9jb25maWd1cmF0aW9uLgorWW91J2xsIGhhdmUgdG8gcmVhZCB0aGUgaGVhZGVyIGZpbGUsIGFuZCB1c2UgZXhhbXBsZSBzb3VyY2UKK2NvZGUgKHN1Y2ggYXMgdGhhdCBmb3IgIkdhZGdldCBaZXJvIiksIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIEFQSS4KKzwvcGFyYT4KKworPHBhcmE+VGhlIHBhcnQgb2YgdGhlIEFQSSBpbXBsZW1lbnRpbmcgc29tZSBiYXNpYworZHJpdmVyIGNhcGFiaWxpdGllcyBpcyBzcGVjaWZpYyB0byB0aGUgdmVyc2lvbiBvZiB0aGUKK0xpbnV4IGtlcm5lbCB0aGF0J3MgaW4gdXNlLgorVGhlIDIuNiBrZXJuZWwgaW5jbHVkZXMgYSA8ZW1waGFzaXM+ZHJpdmVyIG1vZGVsPC9lbXBoYXNpcz4KK2ZyYW1ld29yayB0aGF0IGhhcyBubyBhbmFsb2d1ZSBvbiBlYXJsaWVyIGtlcm5lbHM7CitzbyB0aG9zZSBwYXJ0cyBvZiB0aGUgZ2FkZ2V0IEFQSSBhcmUgbm90IGZ1bGx5IHBvcnRhYmxlLgorKFRoZXkgYXJlIGltcGxlbWVudGVkIG9uIDIuNCBrZXJuZWxzLCBidXQgaW4gYSBkaWZmZXJlbnQgd2F5LikKK1RoZSBkcml2ZXIgbW9kZWwgc3RhdGUgaXMgYW5vdGhlciBwYXJ0IG9mIHRoaXMgQVBJIHRoYXQgaXMKK2lnbm9yZWQgYnkgdGhlIGtlcm5lbGRvYyB0b29scy4KKzwvcGFyYT4KKzwvbm90ZT4KKworPHBhcmE+VGhlIGNvcmUgQVBJIGRvZXMgbm90IGV4cG9zZQorZXZlcnkgcG9zc2libGUgaGFyZHdhcmUgZmVhdHVyZSwgb25seSB0aGUgbW9zdCB3aWRlbHkgYXZhaWxhYmxlIG9uZXMuCitUaGVyZSBhcmUgc2lnbmlmaWNhbnQgaGFyZHdhcmUgZmVhdHVyZXMsIHN1Y2ggYXMgZGV2aWNlLXRvLWRldmljZSBETUEKKyh3aXRob3V0IHRlbXBvcmFyeSBzdG9yYWdlIGluIGEgbWVtb3J5IGJ1ZmZlcikKK3RoYXQgd291bGQgYmUgYWRkZWQgdXNpbmcgaGFyZHdhcmUtc3BlY2lmaWMgQVBJcy4KKzwvcGFyYT4KKworPHBhcmE+VGhpcyBBUEkgYWxsb3dzIGRyaXZlcnMgdG8gdXNlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRvIGhhbmRsZQorZW5kcG9pbnQgY2FwYWJpbGl0aWVzIG9mIGRpZmZlcmVudCBoYXJkd2FyZSwgYnV0IGRvZXNuJ3QgcmVxdWlyZSB0aGF0LgorSGFyZHdhcmUgdGVuZHMgdG8gaGF2ZSBhcmJpdHJhcnkgcmVzdHJpY3Rpb25zLCByZWxhdGluZyB0bwordHJhbnNmZXIgdHlwZXMsIGFkZHJlc3NpbmcsIHBhY2tldCBzaXplcywgYnVmZmVyaW5nLCBhbmQgYXZhaWxhYmlsaXR5LgorQXMgYSBydWxlLCBzdWNoIGRpZmZlcmVuY2VzIG9ubHkgbWF0dGVyIGZvciAiZW5kcG9pbnQgemVybyIgbG9naWMKK3RoYXQgaGFuZGxlcyBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudC4KK1RoZSBBUEkgc3VwcG9ydHMgbGltaXRlZCBydW4tdGltZQorZGV0ZWN0aW9uIG9mIGNhcGFiaWxpdGllcywgdGhyb3VnaCBuYW1pbmcgY29udmVudGlvbnMgZm9yIGVuZHBvaW50cy4KK01hbnkgZHJpdmVycyB3aWxsIGJlIGFibGUgdG8gYXQgbGVhc3QgcGFydGlhbGx5IGF1dG9jb25maWd1cmUKK3RoZW1zZWx2ZXMuCitJbiBwYXJ0aWN1bGFyLCBkcml2ZXIgaW5pdCBzZWN0aW9ucyB3aWxsIG9mdGVuIGhhdmUgZW5kcG9pbnQKK2F1dG9jb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgc2NhbnMgdGhlIGhhcmR3YXJlJ3MgbGlzdCBvZiBlbmRwb2ludHMKK3RvIGZpbmQgb25lcyBtYXRjaGluZyB0aGUgZHJpdmVyIHJlcXVpcmVtZW50cworKHJlbHlpbmcgb24gdGhvc2UgY29udmVudGlvbnMpLCB0byBlbGltaW5hdGUgc29tZSBvZiB0aGUgbW9zdAorY29tbW9uIHJlYXNvbnMgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLgorPC9wYXJhPgorCis8cGFyYT5MaWtlIHRoZSBMaW51eC1VU0IgaG9zdCBzaWRlIEFQSSwgdGhpcyBBUEkgZXhwb3NlcwordGhlICJjaHVua3kiIG5hdHVyZSBvZiBVU0IgbWVzc2FnZXM6ICBJL08gcmVxdWVzdHMgYXJlIGluIHRlcm1zCitvZiBvbmUgb3IgbW9yZSAicGFja2V0cyIsIGFuZCBwYWNrZXQgYm91bmRhcmllcyBhcmUgdmlzaWJsZSB0byBkcml2ZXJzLgorQ29tcGFyZWQgdG8gUlMtMjMyIHNlcmlhbCBwcm90b2NvbHMsIFVTQiByZXNlbWJsZXMKK3N5bmNocm9ub3VzIHByb3RvY29scyBsaWtlIEhETEMKKyhOIGJ5dGVzIHBlciBmcmFtZSwgbXVsdGlwb2ludCBhZGRyZXNzaW5nLCBob3N0IGFzIHRoZSBwcmltYXJ5CitzdGF0aW9uIGFuZCBkZXZpY2VzIGFzIHNlY29uZGFyeSBzdGF0aW9ucykKK21vcmUgdGhhbiBhc3luY2hyb25vdXMgb25lcworKHR0eSBzdHlsZTogIDggZGF0YSBiaXRzIHBlciBmcmFtZSwgbm8gcGFyaXR5LCBvbmUgc3RvcCBiaXQpLgorU28gZm9yIGV4YW1wbGUgdGhlIGNvbnRyb2xsZXIgZHJpdmVycyB3b24ndCBidWZmZXIKK3R3byBzaW5nbGUgYnl0ZSB3cml0ZXMgaW50byBhIHNpbmdsZSB0d28tYnl0ZSBVU0IgSU4gcGFja2V0LAorYWx0aG91Z2ggZ2FkZ2V0IGRyaXZlcnMgbWF5IGRvIHNvIHdoZW4gdGhleSBpbXBsZW1lbnQKK3Byb3RvY29scyB3aGVyZSBwYWNrZXQgYm91bmRhcmllcyAoYW5kICJzaG9ydCBwYWNrZXRzIikKK2FyZSBub3Qgc2lnbmlmaWNhbnQuCis8L3BhcmE+CisKKzxzZWN0MSBpZD0ibGlmZWN5Y2xlIj48dGl0bGU+RHJpdmVyIExpZmUgQ3ljbGU8L3RpdGxlPgorCis8cGFyYT5HYWRnZXQgZHJpdmVycyBtYWtlIGVuZHBvaW50IEkvTyByZXF1ZXN0cyB0byBoYXJkd2FyZSB3aXRob3V0CituZWVkaW5nIHRvIGtub3cgbWFueSBkZXRhaWxzIG9mIHRoZSBoYXJkd2FyZSwgYnV0IGRyaXZlcgorc2V0dXAvY29uZmlndXJhdGlvbiBjb2RlIG5lZWRzIHRvIGhhbmRsZSBzb21lIGRpZmZlcmVuY2VzLgorVXNlIHRoZSBBUEkgbGlrZSB0aGlzOgorPC9wYXJhPgorCis8b3JkZXJlZGxpc3QgbnVtZXJhdGlvbj0nYXJhYmljJz4KKworPGxpc3RpdGVtPjxwYXJhPlJlZ2lzdGVyIGEgZHJpdmVyIGZvciB0aGUgcGFydGljdWxhciBkZXZpY2Ugc2lkZQordXNiIGNvbnRyb2xsZXIgaGFyZHdhcmUsCitzdWNoIGFzIHRoZSBuZXQyMjgwIG9uIFBDSSAoVVNCIDIuMCksCitzYTExeDAgb3IgcHhhMjV4IGFzIGZvdW5kIGluIExpbnV4IFBEQXMsCithbmQgc28gb24uCitBdCB0aGlzIHBvaW50IHRoZSBkZXZpY2UgaXMgbG9naWNhbGx5IGluIHRoZSBVU0IgY2g5IGluaXRpYWwgc3RhdGUKKygiYXR0YWNoZWQiKSwgZHJhd2luZyBubyBwb3dlciBhbmQgbm90IHVzYWJsZQorKHNpbmNlIGl0IGRvZXMgbm90IHlldCBzdXBwb3J0IGVudW1lcmF0aW9uKS4KK0FueSBob3N0IHNob3VsZCBub3Qgc2VlIHRoZSBkZXZpY2UsIHNpbmNlIGl0J3Mgbm90CithY3RpdmF0ZWQgdGhlIGRhdGEgbGluZSBwdWxsdXAgdXNlZCBieSB0aGUgaG9zdCB0bworZGV0ZWN0IGEgZGV2aWNlLCBldmVuIGlmIFZCVVMgcG93ZXIgaXMgYXZhaWxhYmxlLgorPC9wYXJhPjwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT48cGFyYT5SZWdpc3RlciBhIGdhZGdldCBkcml2ZXIgdGhhdCBpbXBsZW1lbnRzIHNvbWUgaGlnaGVyIGxldmVsCitkZXZpY2UgZnVuY3Rpb24uICBUaGF0IHdpbGwgdGhlbiBiaW5kKCkgdG8gYSB1c2JfZ2FkZ2V0LCB3aGljaAorYWN0aXZhdGVzIHRoZSBkYXRhIGxpbmUgcHVsbHVwIHNvbWV0aW1lIGFmdGVyIGRldGVjdGluZyBWQlVTLgorPC9wYXJhPjwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT48cGFyYT5UaGUgaGFyZHdhcmUgZHJpdmVyIGNhbiBub3cgc3RhcnQgZW51bWVyYXRpbmcuCitUaGUgc3RlcHMgaXQgaGFuZGxlcyBhcmUgdG8gYWNjZXB0IFVTQiBwb3dlciBhbmQgc2V0X2FkZHJlc3MgcmVxdWVzdHMuCitPdGhlciBzdGVwcyBhcmUgaGFuZGxlZCBieSB0aGUgZ2FkZ2V0IGRyaXZlci4KK0lmIHRoZSBnYWRnZXQgZHJpdmVyIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIGhvc3Qgc3RhcnRzIHRvCitlbnVtZXJhdGUsIHN0ZXBzIGJlZm9yZSBzdGVwIDcgYXJlIHNraXBwZWQuCis8L3BhcmE+PC9saXN0aXRlbT4KKworPGxpc3RpdGVtPjxwYXJhPlRoZSBnYWRnZXQgZHJpdmVyJ3Mgc2V0dXAoKSBjYWxsIHJldHVybnMgdXNiIGRlc2NyaXB0b3JzLAorYmFzZWQgYm90aCBvbiB3aGF0IHRoZSBidXMgaW50ZXJmYWNlIGhhcmR3YXJlIHByb3ZpZGVzIGFuZCBvbiB0aGUKK2Z1bmN0aW9uYWxpdHkgYmVpbmcgaW1wbGVtZW50ZWQuCitUaGF0IGNhbiBpbnZvbHZlIGFsdGVybmF0ZSBzZXR0aW5ncyBvciBjb25maWd1cmF0aW9ucywKK3VubGVzcyB0aGUgaGFyZHdhcmUgcHJldmVudHMgc3VjaCBvcGVyYXRpb24uCitGb3IgT1RHIGRldmljZXMsIGVhY2ggY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIGluY2x1ZGVzCithbiBPVEcgZGVzY3JpcHRvci4KKzwvcGFyYT48L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+PHBhcmE+VGhlIGdhZGdldCBkcml2ZXIgaGFuZGxlcyB0aGUgbGFzdCBzdGVwIG9mIGVudW1lcmF0aW9uLAord2hlbiB0aGUgVVNCIGhvc3QgaXNzdWVzIGEgc2V0X2NvbmZpZ3VyYXRpb24gY2FsbC4KK0l0IGVuYWJsZXMgYWxsIGVuZHBvaW50cyB1c2VkIGluIHRoYXQgY29uZmlndXJhdGlvbiwKK3dpdGggYWxsIGludGVyZmFjZXMgaW4gdGhlaXIgZGVmYXVsdCBzZXR0aW5ncy4KK1RoYXQgaW52b2x2ZXMgdXNpbmcgYSBsaXN0IG9mIHRoZSBoYXJkd2FyZSdzIGVuZHBvaW50cywgZW5hYmxpbmcgZWFjaAorZW5kcG9pbnQgYWNjb3JkaW5nIHRvIGl0cyBkZXNjcmlwdG9yLgorSXQgbWF5IGFsc28gaW52b2x2ZSB1c2luZyA8ZnVuY3Rpb24+dXNiX2dhZGdldF92YnVzX2RyYXc8L2Z1bmN0aW9uPgordG8gbGV0IG1vcmUgcG93ZXIgYmUgZHJhd24gZnJvbSBWQlVTLCBhcyBhbGxvd2VkIGJ5IHRoYXQgY29uZmlndXJhdGlvbi4KK0ZvciBPVEcgZGV2aWNlcywgc2V0dGluZyBhIGNvbmZpZ3VyYXRpb24gbWF5IGFsc28gaW52b2x2ZSByZXBvcnRpbmcKK0hOUCBjYXBhYmlsaXRpZXMgdGhyb3VnaCBhIHVzZXIgaW50ZXJmYWNlLgorPC9wYXJhPjwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT48cGFyYT5EbyByZWFsIHdvcmsgYW5kIHBlcmZvcm0gZGF0YSB0cmFuc2ZlcnMsIHBvc3NpYmx5IGludm9sdmluZworY2hhbmdlcyB0byBpbnRlcmZhY2Ugc2V0dGluZ3Mgb3Igc3dpdGNoaW5nIHRvIG5ldyBjb25maWd1cmF0aW9ucywgdW50aWwgdGhlCitkZXZpY2UgaXMgZGlzY29ubmVjdCgpZWQgZnJvbSB0aGUgaG9zdC4KK1F1ZXVlIGFueSBudW1iZXIgb2YgdHJhbnNmZXIgcmVxdWVzdHMgdG8gZWFjaCBlbmRwb2ludC4KK0l0IG1heSBiZSBzdXNwZW5kZWQgYW5kIHJlc3VtZWQgc2V2ZXJhbCB0aW1lcyBiZWZvcmUgYmVpbmcgZGlzY29ubmVjdGVkLgorT24gZGlzY29ubmVjdCwgdGhlIGRyaXZlcnMgZ28gYmFjayB0byBzdGVwIDMgKGFib3ZlKS4KKzwvcGFyYT48L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+PHBhcmE+V2hlbiB0aGUgZ2FkZ2V0IGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQsCit0aGUgZHJpdmVyIHVuYmluZCgpIGNhbGxiYWNrIGlzIGlzc3VlZC4gIFRoYXQgbGV0cyB0aGUgY29udHJvbGxlcgorZHJpdmVyIGJlIHVubG9hZGVkLgorPC9wYXJhPjwvbGlzdGl0ZW0+CisKKzwvb3JkZXJlZGxpc3Q+CisKKzxwYXJhPkRyaXZlcnMgd2lsbCBub3JtYWxseSBiZSBhcnJhbmdlZCBzbyB0aGF0IGp1c3QgbG9hZGluZyB0aGUKK2dhZGdldCBkcml2ZXIgbW9kdWxlIChvciBzdGF0aWNhbGx5IGxpbmtpbmcgaXQgaW50byBhIExpbnV4IGtlcm5lbCkKK2FsbG93cyB0aGUgcGVyaXBoZXJhbCBkZXZpY2UgdG8gYmUgZW51bWVyYXRlZCwgYnV0IHNvbWUgZHJpdmVycword2lsbCBkZWZlciBlbnVtZXJhdGlvbiB1bnRpbCBzb21lIGhpZ2hlciBsZXZlbCBjb21wb25lbnQgKGxpa2UKK2EgdXNlciBtb2RlIGRhZW1vbikgZW5hYmxlcyBpdC4KK05vdGUgdGhhdCBhdCB0aGlzIGxvd2VzdCBsZXZlbCB0aGVyZSBhcmUgbm8gcG9saWNpZXMgYWJvdXQgaG93CitlcDAgY29uZmlndXJhdGlvbiBsb2dpYyBpcyBpbXBsZW1lbnRlZCwKK2V4Y2VwdCB0aGF0IGl0IHNob3VsZCBvYmV5IFVTQiBzcGVjaWZpY2F0aW9ucy4KK1N1Y2ggaXNzdWVzIGFyZSBpbiB0aGUgZG9tYWluIG9mIGdhZGdldCBkcml2ZXJzLAoraW5jbHVkaW5nIGtub3dpbmcgYWJvdXQgaW1wbGVtZW50YXRpb24gY29uc3RyYWludHMKK2ltcG9zZWQgYnkgc29tZSBVU0IgY29udHJvbGxlcnMKK29yIHVuZGVyc3RhbmRpbmcgdGhhdCBjb21wb3NpdGUgZGV2aWNlcyBtaWdodCBoYXBwZW4gdG8KK2JlIGJ1aWx0IGJ5IGludGVncmF0aW5nIHJldXNhYmxlIGNvbXBvbmVudHMuCis8L3BhcmE+CisKKzxwYXJhPk5vdGUgdGhhdCB0aGUgbGlmZWN5Y2xlIGFib3ZlIGNhbiBiZSBzbGlnaHRseSBkaWZmZXJlbnQKK2ZvciBPVEcgZGV2aWNlcy4KK090aGVyIHRoYW4gcHJvdmlkaW5nIGFuIGFkZGl0aW9uYWwgT1RHIGRlc2NyaXB0b3IgaW4gZWFjaAorY29uZmlndXJhdGlvbiwgb25seSB0aGUgSE5QLXJlbGF0ZWQgZGlmZmVyZW5jZXMgYXJlIHBhcnRpY3VsYXJseQordmlzaWJsZSB0byBkcml2ZXIgY29kZS4KK1RoZXkgaW52b2x2ZSByZXBvcnRpbmcgcmVxdWlyZW1lbnRzIGR1cmluZyB0aGUgU0VUX0NPTkZJR1VSQVRJT04KK3JlcXVlc3QsIGFuZCB0aGUgb3B0aW9uIHRvIGludm9rZSBITlAgZHVyaW5nIHNvbWUgc3VzcGVuZCBjYWxsYmFja3MuCitBbHNvLCBTUlAgY2hhbmdlcyB0aGUgc2VtYW50aWNzIG9mCis8ZnVuY3Rpb24+dXNiX2dhZGdldF93YWtldXA8L2Z1bmN0aW9uPgorc2xpZ2h0bHkuCis8L3BhcmE+CisKKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iY2g5Ij48dGl0bGU+VVNCIDIuMCBDaGFwdGVyIDkgVHlwZXMgYW5kIENvbnN0YW50czwvdGl0bGU+CisKKzxwYXJhPkdhZGdldCBkcml2ZXJzCityZWx5IG9uIGNvbW1vbiBVU0Igc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzCitkZWZpbmVkIGluIHRoZQorPGZpbGVuYW1lPiZsdDtsaW51eC91c2JfY2g5LmgmZ3Q7PC9maWxlbmFtZT4KK2hlYWRlciBmaWxlLCB3aGljaCBpcyBzdGFuZGFyZCBpbiBMaW51eCAyLjYga2VybmVscy4KK1RoZXNlIGFyZSB0aGUgc2FtZSB0eXBlcyBhbmQgY29uc3RhbnRzIHVzZWQgYnkgaG9zdAorc2lkZSBkcml2ZXJzIChhbmQgdXNiY29yZSkuCis8L3BhcmE+CisKKyFJaW5jbHVkZS9saW51eC91c2JfY2g5LmgKKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iY29yZSI+PHRpdGxlPkNvcmUgT2JqZWN0cyBhbmQgTWV0aG9kczwvdGl0bGU+CisKKzxwYXJhPlRoZXNlIGFyZSBkZWNsYXJlZCBpbgorPGZpbGVuYW1lPiZsdDtsaW51eC91c2JfZ2FkZ2V0LmgmZ3Q7PC9maWxlbmFtZT4sCithbmQgYXJlIHVzZWQgYnkgZ2FkZ2V0IGRyaXZlcnMgdG8gaW50ZXJhY3Qgd2l0aAorVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXJzLgorPC9wYXJhPgorCisJPCEtLSB5ZWVjaCwgdGhpcyBpcyB1Z2x5IGluIG5zZ21scyBQREYgb3V0cHV0LgorCisJICAgICB0aGUgUERGIGJvb2ttYXJrIGFuZCByZWZlbnRyeSBvdXRwdXQgbmVzdGluZyBpcyB3cm9uZywKKwkgICAgIGFuZCB0aGUgbWVtYmVyL2FyZ3VtZW50IGRvY3VtZW50YXRpb24gaW5kZW50cyB1Z2x5LgorCisJICAgICBwbHVzIHNvbWV0aGluZyAoZG9jcHJvYz8pIGFkZHMgd2hpdGVzcGFjZSBiZWZvcmUgdGhlCisJICAgICBkZXNjcmlwdGl2ZSBwYXJhZ3JhcGggdGV4dCwgc28gaXQgY2FuJ3QgbGluZSB1cCByaWdodAorCSAgICAgdW5sZXNzIHRoZSBleHBsYW5hdGlvbnMgYXJlIHRyaXZpYWwuCisJICAtLT4KKworIUlpbmNsdWRlL2xpbnV4L3VzYl9nYWRnZXQuaAorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ1dGlscyI+PHRpdGxlPk9wdGlvbmFsIFV0aWxpdGllczwvdGl0bGU+CisKKzxwYXJhPlRoZSBjb3JlIEFQSSBpcyBzdWZmaWNpZW50IGZvciB3cml0aW5nIGEgVVNCIEdhZGdldCBEcml2ZXIsCitidXQgc29tZSBvcHRpb25hbCB1dGlsaXRpZXMgYXJlIHByb3ZpZGVkIHRvIHNpbXBsaWZ5IGNvbW1vbiB0YXNrcy4KK1RoZXNlIHV0aWxpdGllcyBpbmNsdWRlIGVuZHBvaW50IGF1dG9jb25maWd1cmF0aW9uLgorPC9wYXJhPgorCishRWRyaXZlcnMvdXNiL2dhZGdldC91c2JzdHJpbmcuYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMKKzwhLS0gIUVkcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jIC0tPgorPC9zZWN0MT4KKworPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0iY29udHJvbGxlcnMiPjx0aXRsZT5QZXJpcGhlcmFsIENvbnRyb2xsZXIgRHJpdmVyczwvdGl0bGU+CisKKzxwYXJhPlRoZSBmaXJzdCBoYXJkd2FyZSBzdXBwb3J0aW5nIHRoaXMgQVBJIHdhcyB0aGUgTmV0Q2hpcCAyMjgwCitjb250cm9sbGVyLCB3aGljaCBzdXBwb3J0cyBVU0IgMi4wIGhpZ2ggc3BlZWQgYW5kIGlzIGJhc2VkIG9uIFBDSS4KK1RoaXMgaXMgdGhlIDxmaWxlbmFtZT5uZXQyMjgwPC9maWxlbmFtZT4gZHJpdmVyIG1vZHVsZS4KK1RoZSBkcml2ZXIgc3VwcG9ydHMgTGludXgga2VybmVsIHZlcnNpb25zIDIuNCBhbmQgMi42OworY29udGFjdCBOZXRDaGlwIFRlY2hub2xvZ2llcyBmb3IgZGV2ZWxvcG1lbnQgYm9hcmRzIGFuZCBwcm9kdWN0CitpbmZvcm1hdGlvbi4KKzwvcGFyYT4gCisKKzxwYXJhPk90aGVyIGhhcmR3YXJlIHdvcmtpbmcgaW4gdGhlICJnYWRnZXQiIGZyYW1ld29yayBpbmNsdWRlczoKK0ludGVsJ3MgUFhBIDI1eCBhbmQgSVhQNDJ4IHNlcmllcyBwcm9jZXNzb3JzCisoPGZpbGVuYW1lPnB4YTJ4eF91ZGM8L2ZpbGVuYW1lPiksCitUb3NoaWJhIFRDODZjMDAxICJHb2t1LVMiICg8ZmlsZW5hbWU+Z29rdV91ZGM8L2ZpbGVuYW1lPiksCitSZW5lc2FzIFNINzcwNS83NzI3ICg8ZmlsZW5hbWU+c2hfdWRjPC9maWxlbmFtZT4pLAorTWVkaWFRIDExeHggKDxmaWxlbmFtZT5tcTExeHhfdWRjPC9maWxlbmFtZT4pLAorSHluaXggSE1TMzBDNzIwMiAoPGZpbGVuYW1lPmg3MjAyX3VkYzwvZmlsZW5hbWU+KSwKK05hdGlvbmFsIDkzMDMvNCAoPGZpbGVuYW1lPm45NjA0X3VkYzwvZmlsZW5hbWU+KSwKK1RleGFzIEluc3RydW1lbnRzIE9NQVAgKDxmaWxlbmFtZT5vbWFwX3VkYzwvZmlsZW5hbWU+KSwKK1NoYXJwIExIN0E0MHggKDxmaWxlbmFtZT5saDdhNDB4X3VkYzwvZmlsZW5hbWU+KSwKK2FuZCBtb3JlLgorTW9zdCBvZiB0aG9zZSBhcmUgZnVsbCBzcGVlZCBjb250cm9sbGVycy4KKzwvcGFyYT4KKworPHBhcmE+QXQgdGhpcyB3cml0aW5nLCB0aGVyZSBhcmUgcGVvcGxlIGF0IHdvcmsgb24gZHJpdmVycyBpbgordGhpcyBmcmFtZXdvcmsgZm9yIHNldmVyYWwgb3RoZXIgVVNCIGRldmljZSBjb250cm9sbGVycywKK3dpdGggcGxhbnMgdG8gbWFrZSBtYW55IG9mIHRoZW0gYmUgd2lkZWx5IGF2YWlsYWJsZS4KKzwvcGFyYT4KKworPCEtLSAhRWRyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgLS0+CisKKzxwYXJhPkEgcGFydGlhbCBVU0Igc2ltdWxhdG9yLAordGhlIDxmaWxlbmFtZT5kdW1teV9oY2Q8L2ZpbGVuYW1lPiBkcml2ZXIsIGlzIGF2YWlsYWJsZS4KK0l0IGNhbiBhY3QgbGlrZSBhIG5ldDIyODAsIGEgcHhhMjV4LCBvciBhbiBzYTExeDAgaW4gdGVybXMKK29mIGF2YWlsYWJsZSBlbmRwb2ludHMgYW5kIGRldmljZSBzcGVlZHM7IGFuZCBpdCBzaW11bGF0ZXMKK2NvbnRyb2wsIGJ1bGssIGFuZCB0byBzb21lIGV4dGVudCBpbnRlcnJ1cHQgdHJhbnNmZXJzLgorVGhhdCBsZXRzIHlvdSBkZXZlbG9wIHNvbWUgcGFydHMgb2YgYSBnYWRnZXQgZHJpdmVyIG9uIGEgbm9ybWFsIFBDLAord2l0aG91dCBhbnkgc3BlY2lhbCBoYXJkd2FyZSwgYW5kIHBlcmhhcHMgd2l0aCB0aGUgYXNzaXN0YW5jZQorb2YgdG9vbHMgc3VjaCBhcyBHREIgcnVubmluZyB3aXRoIFVzZXIgTW9kZSBMaW51eC4KK0F0IGxlYXN0IG9uZSBwZXJzb24gaGFzIGV4cHJlc3NlZCBpbnRlcmVzdCBpbiBhZGFwdGluZyB0aGF0CithcHByb2FjaCwgaG9va2luZyBpdCB1cCB0byBhIHNpbXVsYXRvciBmb3IgYSBtaWNyb2NvbnRyb2xsZXIuCitTdWNoIHNpbXVsYXRvcnMgY2FuIGhlbHAgZGVidWcgc3Vic3lzdGVtcyB3aGVyZSB0aGUgcnVudGltZSBoYXJkd2FyZQoraXMgdW5mcmllbmRseSB0byBzb2Z0d2FyZSBkZXZlbG9wbWVudCwgb3IgaXMgbm90IHlldCBhdmFpbGFibGUuCis8L3BhcmE+CisKKzxwYXJhPlN1cHBvcnQgZm9yIG90aGVyIGNvbnRyb2xsZXJzIGlzIGV4cGVjdGVkIHRvIGJlIGRldmVsb3BlZAorYW5kIGNvbnRyaWJ1dGVkCitvdmVyIHRpbWUsIGFzIHRoaXMgZHJpdmVyIGZyYW1ld29yayBldm9sdmVzLgorPC9wYXJhPgorCis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJnYWRnZXQiPjx0aXRsZT5HYWRnZXQgRHJpdmVyczwvdGl0bGU+CisKKzxwYXJhPkluIGFkZGl0aW9uIHRvIDxlbXBoYXNpcz5HYWRnZXQgWmVybzwvZW1waGFzaXM+CisodXNlZCBwcmltYXJpbHkgZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50IHdpdGggZHJpdmVycworZm9yIHVzYiBjb250cm9sbGVyIGhhcmR3YXJlKSwgb3RoZXIgZ2FkZ2V0IGRyaXZlcnMgZXhpc3QuCis8L3BhcmE+CisKKzxwYXJhPlRoZXJlJ3MgYW4gPGVtcGhhc2lzPmV0aGVybmV0PC9lbXBoYXNpcz4gZ2FkZ2V0Citkcml2ZXIsIHdoaWNoIGltcGxlbWVudHMgb25lIG9mIHRoZSBtb3N0IHVzZWZ1bAorPGVtcGhhc2lzPkNvbW11bmljYXRpb25zIERldmljZSBDbGFzczwvZW1waGFzaXM+IChDREMpIG1vZGVscy4gIAorT25lIG9mIHRoZSBzdGFuZGFyZHMgZm9yIGNhYmxlIG1vZGVtIGludGVyb3BlcmFiaWxpdHkgZXZlbgorc3BlY2lmaWVzIHRoZSB1c2Ugb2YgdGhpcyBldGhlcm5ldCBtb2RlbCBhcyBvbmUgb2YgdHdvCittYW5kYXRvcnkgb3B0aW9ucy4KK0dhZGdldHMgdXNpbmcgdGhpcyBjb2RlIGxvb2sgdG8gYSBVU0IgaG9zdCBhcyBpZiB0aGV5J3JlCithbiBFdGhlcm5ldCBhZGFwdGVyLgorSXQgcHJvdmlkZXMgYWNjZXNzIHRvIGEgbmV0d29yayB3aGVyZSB0aGUgZ2FkZ2V0J3MgQ1BVIGlzIG9uZSBob3N0LAord2hpY2ggY291bGQgZWFzaWx5IGJlIGJyaWRnaW5nLCByb3V0aW5nLCBvciBmaXJld2FsbGluZworYWNjZXNzIHRvIG90aGVyIG5ldHdvcmtzLgorU2luY2Ugc29tZSBoYXJkd2FyZSBjYW4ndCBmdWxseSBpbXBsZW1lbnQgdGhlIENEQyBFdGhlcm5ldAorcmVxdWlyZW1lbnRzLCB0aGlzIGRyaXZlciBhbHNvIGltcGxlbWVudHMgYSAiZ29vZCBwYXJ0cyBvbmx5Igorc3Vic2V0IG9mIENEQyBFdGhlcm5ldC4KKyhUaGF0IHN1YnNldCBkb2Vzbid0IGFkdmVydGlzZSBpdHNlbGYgYXMgQ0RDIEV0aGVybmV0LAordG8gYXZvaWQgY3JlYXRpbmcgcHJvYmxlbXMuKQorPC9wYXJhPgorCis8cGFyYT5TdXBwb3J0IGZvciBNaWNyb3NvZnQncyA8ZW1waGFzaXM+Uk5ESVM8L2VtcGhhc2lzPgorcHJvdG9jb2wgaGFzIGJlZW4gY29udHJpYnV0ZWQgYnkgUGVuZ3V0cm9uaXggYW5kIEF1ZXJzd2FsZCBHbWJILgorVGhpcyBpcyBsaWtlIENEQyBFdGhlcm5ldCwgYnV0IGl0IHJ1bnMgb24gbW9yZSBzbGlnaHRseSBVU0IgaGFyZHdhcmUKKyhidXQgbGVzcyB0aGFuIHRoZSBDREMgc3Vic2V0KS4KK0hvd2V2ZXIsIGl0cyBtYWluIGNsYWltIHRvIGZhbWUgaXMgYmVpbmcgYWJsZSB0byBjb25uZWN0IGRpcmVjdGx5IHRvCityZWNlbnQgdmVyc2lvbnMgb2YgV2luZG93cywgdXNpbmcgZHJpdmVycyB0aGF0IE1pY3Jvc29mdCBidW5kbGVzCithbmQgc3VwcG9ydHMsIG1ha2luZyBpdCBtdWNoIHNpbXBsZXIgdG8gbmV0d29yayB3aXRoIFdpbmRvd3MuCis8L3BhcmE+CisKKzxwYXJhPlRoZXJlIGlzIGFsc28gc3VwcG9ydCBmb3IgdXNlciBtb2RlIGdhZGdldCBkcml2ZXJzLAordXNpbmcgPGVtcGhhc2lzPmdhZGdldGZzPC9lbXBoYXNpcz4uCitUaGlzIHByb3ZpZGVzIGEgPGVtcGhhc2lzPlVzZXIgTW9kZSBBUEk8L2VtcGhhc2lzPiB0aGF0IHByZXNlbnRzCitlYWNoIGVuZHBvaW50IGFzIGEgc2luZ2xlIGZpbGUgZGVzY3JpcHRvci4gIEkvTyBpcyBkb25lIHVzaW5nCitub3JtYWwgPGVtcGhhc2lzPnJlYWQoKTwvZW1waGFzaXM+IGFuZCA8ZW1waGFzaXM+cmVhZCgpPC9lbXBoYXNpcz4gY2FsbHMuCitGYW1pbGlhciB0b29scyBsaWtlIEdEQiBhbmQgcHRocmVhZHMgY2FuIGJlIHVzZWQgdG8KK2RldmVsb3AgYW5kIGRlYnVnIHVzZXIgbW9kZSBkcml2ZXJzLCBzbyB0aGF0IG9uY2UgYSByb2J1c3QKK2NvbnRyb2xsZXIgZHJpdmVyIGlzIGF2YWlsYWJsZSBtYW55IGFwcGxpY2F0aW9ucyBmb3IgaXQKK3dvbid0IHJlcXVpcmUgbmV3IGtlcm5lbCBtb2RlIHNvZnR3YXJlLgorTGludXggMi42IDxlbXBoYXNpcz5Bc3luYyBJL08gKEFJTyk8L2VtcGhhc2lzPgorc3VwcG9ydCBpcyBhdmFpbGFibGUsIHNvIHRoYXQgdXNlciBtb2RlIHNvZnR3YXJlCitjYW4gc3RyZWFtIGRhdGEgd2l0aCBvbmx5IHNsaWdodGx5IG1vcmUgb3ZlcmhlYWQKK3RoYW4gYSBrZXJuZWwgZHJpdmVyLgorPC9wYXJhPgorCis8cGFyYT5UaGVyZSdzIGEgVVNCIE1hc3MgU3RvcmFnZSBjbGFzcyBkcml2ZXIsIHdoaWNoIHByb3ZpZGVzCithIGRpZmZlcmVudCBzb2x1dGlvbiBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIHN5c3RlbXMgc3VjaAorYXMgTVMtV2luZG93cyBhbmQgTWFjT1MuCitUaGF0IDxlbXBoYXNpcz5GaWxlLWJhY2tlZCBTdG9yYWdlPC9lbXBoYXNpcz4gZHJpdmVyIHVzZXMgYQorZmlsZSBvciBibG9jayBkZXZpY2UgYXMgYmFja2luZyBzdG9yZSBmb3IgYSBkcml2ZSwKK2xpa2UgdGhlIDxmaWxlbmFtZT5sb29wPC9maWxlbmFtZT4gZHJpdmVyLgorVGhlIFVTQiBob3N0IHVzZXMgdGhlIEJCQiwgQ0IsIG9yIENCSSB2ZXJzaW9ucyBvZiB0aGUgbWFzcworc3RvcmFnZSBjbGFzcyBzcGVjaWZpY2F0aW9uLCB1c2luZyB0cmFuc3BhcmVudCBTQ1NJIGNvbW1hbmRzCit0byBhY2Nlc3MgdGhlIGRhdGEgZnJvbSB0aGUgYmFja2luZyBzdG9yZS4KKzwvcGFyYT4KKworPHBhcmE+VGhlcmUncyBhICJzZXJpYWwgbGluZSIgZHJpdmVyLCB1c2VmdWwgZm9yIFRUWSBzdHlsZQorb3BlcmF0aW9uIG92ZXIgVVNCLgorVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoYXQgZHJpdmVyIHN1cHBvcnRzIENEQyBBQ00gc3R5bGUKK29wZXJhdGlvbiwgbGlrZSBhIFVTQiBtb2RlbSwgYW5kIHNvIG9uIG1vc3QgaGFyZHdhcmUgaXQgY2FuCitpbnRlcm9wZXJhdGUgZWFzaWx5IHdpdGggTVMtV2luZG93cy4KK09uZSBpbnRlcmVzdGluZyB1c2Ugb2YgdGhhdCBkcml2ZXIgaXMgaW4gYm9vdCBmaXJtd2FyZSAobGlrZSBhIEJJT1MpLAord2hpY2ggY2FuIHNvbWV0aW1lcyB1c2UgdGhhdCBtb2RlbCB3aXRoIHZlcnkgc21hbGwgc3lzdGVtcyB3aXRob3V0CityZWFsIHNlcmlhbCBsaW5lcy4KKzwvcGFyYT4KKworPHBhcmE+U3VwcG9ydCBmb3Igb3RoZXIga2luZHMgb2YgZ2FkZ2V0IGlzIGV4cGVjdGVkIHRvCitiZSBkZXZlbG9wZWQgYW5kIGNvbnRyaWJ1dGVkCitvdmVyIHRpbWUsIGFzIHRoaXMgZHJpdmVyIGZyYW1ld29yayBldm9sdmVzLgorPC9wYXJhPgorCis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJvdGciPjx0aXRsZT5VU0IgT24tVGhlLUdPIChPVEcpPC90aXRsZT4KKworPHBhcmE+VVNCIE9URyBzdXBwb3J0IG9uIExpbnV4IDIuNiB3YXMgaW5pdGlhbGx5IGRldmVsb3BlZAorYnkgVGV4YXMgSW5zdHJ1bWVudHMgZm9yCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9tYXAuY29tIj5PTUFQPC91bGluaz4gMTZ4eCBhbmQgMTd4eAorc2VyaWVzIHByb2Nlc3NvcnMuCitPdGhlciBPVEcgc3lzdGVtcyBzaG91bGQgd29yayBpbiBzaW1pbGFyIHdheXMsIGJ1dCB0aGUKK2hhcmR3YXJlIGxldmVsIGRldGFpbHMgY291bGQgYmUgdmVyeSBkaWZmZXJlbnQuCis8L3BhcmE+IAorCis8cGFyYT5TeXN0ZW1zIG5lZWQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgc3VwcG9ydCB0byBpbXBsZW1lbnQgT1RHLAorbm90YWJseSBpbmNsdWRpbmcgYSBzcGVjaWFsIDxlbXBoYXNpcz5NaW5pLUFCPC9lbXBoYXNpcz4gamFjaworYW5kIGFzc29jaWF0ZWQgdHJhbnNjaWV2ZXIgdG8gc3VwcG9ydCA8ZW1waGFzaXM+RHVhbC1Sb2xlPC9lbXBoYXNpcz4KK29wZXJhdGlvbjoKK3RoZXkgY2FuIGFjdCBlaXRoZXIgYXMgYSBob3N0LCB1c2luZyB0aGUgc3RhbmRhcmQKK0xpbnV4LVVTQiBob3N0IHNpZGUgZHJpdmVyIHN0YWNrLAorb3IgYXMgYSBwZXJpcGhlcmFsLCB1c2luZyB0aGlzICJnYWRnZXQiIGZyYW1ld29yay4KK1RvIGRvIHRoYXQsIHRoZSBzeXN0ZW0gc29mdHdhcmUgcmVsaWVzIG9uIHNtYWxsIGFkZGl0aW9ucwordG8gdGhvc2UgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcywKK2FuZCBvbiBhIG5ldyBpbnRlcm5hbCBjb21wb25lbnQgKGhlcmUgY2FsbGVkIGFuICJPVEcgQ29udHJvbGxlciIpCithZmZlY3Rpbmcgd2hpY2ggZHJpdmVyIHN0YWNrIGNvbm5lY3RzIHRvIHRoZSBPVEcgcG9ydC4KK0luIGVhY2ggcm9sZSwgdGhlIHN5c3RlbSBjYW4gcmUtdXNlIHRoZSBleGlzdGluZyBwb29sIG9mCitoYXJkd2FyZS1uZXV0cmFsIGRyaXZlcnMsIGxheWVyZWQgb24gdG9wIG9mIHRoZSBjb250cm9sbGVyCitkcml2ZXIgaW50ZXJmYWNlcyAoPGVtcGhhc2lzPnVzYl9idXM8L2VtcGhhc2lzPiBvcgorPGVtcGhhc2lzPnVzYl9nYWRnZXQ8L2VtcGhhc2lzPikuCitTdWNoIGRyaXZlcnMgbmVlZCBhdCBtb3N0IG1pbm9yIGNoYW5nZXMsIGFuZCBtb3N0IG9mIHRoZSBjYWxscworYWRkZWQgdG8gc3VwcG9ydCBPVEcgY2FuIGFsc28gYmVuZWZpdCBub24tT1RHIHByb2R1Y3RzLgorPC9wYXJhPgorCis8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5HYWRnZXQgZHJpdmVycyB0ZXN0IHRoZSA8ZW1waGFzaXM+aXNfb3RnPC9lbXBoYXNpcz4KKwlmbGFnLCBhbmQgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlCisJYW4gT1RHIGRlc2NyaXB0b3IgaW4gZWFjaCBvZiB0aGVpciBjb25maWd1cmF0aW9ucy4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+R2FkZ2V0IGRyaXZlcnMgbWF5IG5lZWQgY2hhbmdlcyB0byBzdXBwb3J0IHRoZQorCXR3byBuZXcgT1RHIHByb3RvY29scywgZXhwb3NlZCBpbiBuZXcgZ2FkZ2V0IGF0dHJpYnV0ZXMKKwlzdWNoIGFzIDxlbXBoYXNpcz5iX2hucF9lbmFibGU8L2VtcGhhc2lzPiBmbGFnLgorCUhOUCBzdXBwb3J0IHNob3VsZCBiZSByZXBvcnRlZCB0aHJvdWdoIGEgdXNlciBpbnRlcmZhY2UKKwkodHdvIExFRHMgY291bGQgc3VmZmljZSksIGFuZCBpcyB0cmlnZ2VyZWQgaW4gc29tZSBjYXNlcworCXdoZW4gdGhlIGhvc3Qgc3VzcGVuZHMgdGhlIHBlcmlwaGVyYWwuCisJU1JQIHN1cHBvcnQgY2FuIGJlIHVzZXItaW5pdGlhdGVkIGp1c3QgbGlrZSByZW1vdGUgd2FrZXVwLAorCXByb2JhYmx5IGJ5IHByZXNzaW5nIHRoZSBzYW1lIGJ1dHRvbi4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+T24gdGhlIGhvc3Qgc2lkZSwgVVNCIGRldmljZSBkcml2ZXJzIG5lZWQKKwl0byBiZSB0YXVnaHQgdG8gdHJpZ2dlciBITlAgYXQgYXBwcm9wcmlhdGUgbW9tZW50cywgdXNpbmcKKwk8ZnVuY3Rpb24+dXNiX3N1c3BlbmRfZGV2aWNlKCk8L2Z1bmN0aW9uPi4KKwlUaGF0IGFsc28gY29uc2VydmVzIGJhdHRlcnkgcG93ZXIsIHdoaWNoIGlzIHVzZWZ1bCBldmVuCisJZm9yIG5vbi1PVEcgY29uZmlndXJhdGlvbnMuCisJPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkFsc28gb24gdGhlIGhvc3Qgc2lkZSwgYSBkcml2ZXIgbXVzdCBzdXBwb3J0IHRoZQorCU9URyAiVGFyZ2V0ZWQgUGVyaXBoZXJhbCBMaXN0Ii4gIFRoYXQncyBqdXN0IGEgd2hpdGVsaXN0LAorCXVzZWQgdG8gcmVqZWN0IHBlcmlwaGVyYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCBhIGdpdmVuCisJTGludXggT1RHIGhvc3QuCisJPGVtcGhhc2lzPlRoaXMgd2hpdGVsaXN0IGlzIHByb2R1Y3Qtc3BlY2lmaWM7CisJZWFjaCBwcm9kdWN0IG11c3QgbW9kaWZ5IDxmaWxlbmFtZT5vdGdfd2hpdGVsaXN0Lmg8L2ZpbGVuYW1lPgorCXRvIG1hdGNoIGl0cyBpbnRlcm9wZXJhYmlsaXR5IHNwZWNpZmljYXRpb24uCisJPC9lbXBoYXNpcz4KKwk8L3BhcmE+CisJPHBhcmE+Tm9uLU9URyBMaW51eCBob3N0cywgbGlrZSBQQ3MgYW5kIHdvcmtzdGF0aW9ucywKKwlub3JtYWxseSBoYXZlIHNvbWUgc29sdXRpb24gZm9yIGFkZGluZyBkcml2ZXJzLCBzbyB0aGF0CisJcGVyaXBoZXJhbHMgdGhhdCBhcmVuJ3QgcmVjb2duaXplZCBjYW4gZXZlbnR1YWxseSBiZSBzdXBwb3J0ZWQuCisJVGhhdCBhcHByb2FjaCBpcyB1bnJlYXNvbmFibGUgZm9yIGNvbnN1bWVyIHByb2R1Y3RzIHRoYXQgbWF5CisJbmV2ZXIgaGF2ZSB0aGVpciBmaXJtd2FyZSB1cGdyYWRlZCwgYW5kIHdoZXJlIGl0J3MgdXN1YWxseQorCXVucmVhbGlzdGljIHRvIGV4cGVjdCB0cmFkaXRpb25hbCBQQy93b3Jrc3RhdGlvbi9zZXJ2ZXIga2luZHMKKwlvZiBzdXBwb3J0IG1vZGVsIHRvIHdvcmsuCisJRm9yIGV4YW1wbGUsIGl0J3Mgb2Z0ZW4gaW1wcmFjdGljYWwgdG8gY2hhbmdlIGRldmljZSBmaXJtd2FyZQorCW9uY2UgdGhlIHByb2R1Y3QgaGFzIGJlZW4gZGlzdHJpYnV0ZWQsIHNvIGRyaXZlciBidWdzIGNhbid0CisJbm9ybWFsbHkgYmUgZml4ZWQgaWYgdGhleSdyZSBmb3VuZCBhZnRlciBzaGlwbWVudC4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCis8cGFyYT4KK0FkZGl0aW9uYWwgY2hhbmdlcyBhcmUgbmVlZGVkIGJlbG93IHRob3NlIGhhcmR3YXJlLW5ldXRyYWwKKzxlbXBoYXNpcz51c2JfYnVzPC9lbXBoYXNpcz4gYW5kIDxlbXBoYXNpcz51c2JfZ2FkZ2V0PC9lbXBoYXNpcz4KK2RyaXZlciBpbnRlcmZhY2VzOyB0aG9zZSBhcmVuJ3QgZGlzY3Vzc2VkIGhlcmUgaW4gYW55IGRldGFpbC4KK1Rob3NlIGFmZmVjdCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBmb3IgZWFjaCBVU0IgSG9zdCBvciBQZXJpcGhlcmFsCitjb250cm9sbGVyLCBhbmQgaG93IHRoZSBIQ0QgaW5pdGlhbGl6ZXMgKHNpbmNlIE9URyBjYW4gYmUgYWN0aXZlIG9ubHkKK29uIGEgc2luZ2xlIHBvcnQpLgorVGhleSBhbHNvIGludm9sdmUgd2hhdCBtYXkgYmUgY2FsbGVkIGFuIDxlbXBoYXNpcz5PVEcgQ29udHJvbGxlcgorRHJpdmVyPC9lbXBoYXNpcz4sIG1hbmFnaW5nIHRoZSBPVEcgdHJhbnNjZWl2ZXIgYW5kIHRoZSBPVEcgc3RhdGUKK21hY2hpbmUgbG9naWMgYXMgd2VsbCBhcyBtdWNoIG9mIHRoZSByb290IGh1YiBiZWhhdmlvciBmb3IgdGhlCitPVEcgcG9ydC4KK1RoZSBPVEcgY29udHJvbGxlciBkcml2ZXIgbmVlZHMgdG8gYWN0aXZhdGUgYW5kIGRlYWN0aXZhdGUgVVNCCitjb250cm9sbGVycyBkZXBlbmRpbmcgb24gdGhlIHJlbGV2YW50IGRldmljZSByb2xlLgorU29tZSByZWxhdGVkIGNoYW5nZXMgd2VyZSBuZWVkZWQgaW5zaWRlIHVzYmNvcmUsIHNvIHRoYXQgaXQKK2NhbiBpZGVudGlmeSBPVEctY2FwYWJsZSBkZXZpY2VzIGFuZCByZXNwb25kIGFwcHJvcHJpYXRlbHkKK3RvIEhOUCBvciBTUlAgcHJvdG9jb2xzLgorPC9wYXJhPiAKKworPC9jaGFwdGVyPgorCis8L2Jvb2s+Cis8IS0tCisJdmltOnN5bnRheD1zZ21sOnN3PTQKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2pvdXJuYWwtYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svam91cm5hbC1hcGkudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWY2ZjQzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2pvdXJuYWwtYXBpLnRtcGwKQEAgLTAsMCArMSwzMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iTGludXhKQkRBUEkiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlRoZSBMaW51eCBKb3VybmFsbGluZyBBUEk8L3RpdGxlPgorICA8YXV0aG9yZ3JvdXA+CisgIDxhdXRob3I+CisgICAgIDxmaXJzdG5hbWU+Um9nZXI8L2ZpcnN0bmFtZT4KKyAgICAgPHN1cm5hbWU+R2FtbWFuczwvc3VybmFtZT4KKyAgICAgPGFmZmlsaWF0aW9uPgorICAgICA8YWRkcmVzcz4KKyAgICAgIDxlbWFpbD5yZ2FtbWFuc0Bjb21wdXRlci1zdXJnZXJ5LmNvLnVrPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICAgIDwvYXV0aG9yPiAKKyAgPC9hdXRob3Jncm91cD4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5TdGVwaGVuPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+VHdlZWRpZTwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPnNjdEByZWRoYXQuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMjwveWVhcj4KKyAgIDxob2xkZXI+Um9nZXIgR2FtbWFuczwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJPdmVydmlldyI+CisgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgIDxzZWN0MT4KKyAgICAgPHRpdGxlPkRldGFpbHM8L3RpdGxlPgorPHBhcmE+CitUaGUgam91cm5hbGxpbmcgbGF5ZXIgaXMgIGVhc3kgdG8gdXNlLiBZb3UgbmVlZCB0byAKK2ZpcnN0IG9mIGFsbCBjcmVhdGUgYSBqb3VybmFsX3QgZGF0YSBzdHJ1Y3R1cmUuIFRoZXJlIGFyZQordHdvIGNhbGxzIHRvIGRvIHRoaXMgZGVwZW5kZW50IG9uIGhvdyB5b3UgZGVjaWRlIHRvIGFsbG9jYXRlIHRoZSBwaHlzaWNhbAorbWVkaWEgb24gd2hpY2ggdGhlIGpvdXJuYWwgcmVzaWRlcy4gVGhlIGpvdXJuYWxfaW5pdF9pbm9kZSgpIGNhbGwgCitpcyBmb3Igam91cm5hbHMgc3RvcmVkIGluIGZpbGVzeXN0ZW0gaW5vZGVzLCBvciB0aGUgam91cm5hbF9pbml0X2RldigpCitjYWxsIGNhbiBiZSB1c2UgZm9yIGpvdXJuYWwgc3RvcmVkIG9uIGEgcmF3IGRldmljZSAoaW4gYSBjb250aW51b3VzIHJhbmdlIAorb2YgYmxvY2tzKS4gQSBqb3VybmFsX3QgaXMgYSB0eXBlZGVmIGZvciBhIHN0cnVjdCBwb2ludGVyLCBzbyB3aGVuCit5b3UgYXJlIGZpbmFsbHkgZmluaXNoZWQgbWFrZSBzdXJlIHlvdSBjYWxsIGpvdXJuYWxfZGVzdHJveSgpIG9uIGl0Cit0byBmcmVlIHVwIGFueSB1c2VkIGtlcm5lbCBtZW1vcnkuCis8L3BhcmE+CisKKzxwYXJhPgorT25jZSB5b3UgaGF2ZSBnb3QgeW91ciBqb3VybmFsX3Qgb2JqZWN0IHlvdSBuZWVkIHRvICdtb3VudCcgb3IgbG9hZCB0aGUgam91cm5hbAorZmlsZSwgdW5sZXNzIG9mIGNvdXJzZSB5b3UgaGF2ZW4ndCBpbml0aWFsaXNlZCBpdCB5ZXQgLSBpbiB3aGljaCBjYXNlIHlvdQorbmVlZCB0byBjYWxsIGpvdXJuYWxfY3JlYXRlKCkuCis8L3BhcmE+CisKKzxwYXJhPgorTW9zdCBvZiB0aGUgdGltZSBob3dldmVyIHlvdXIgam91cm5hbCBmaWxlIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY3JlYXRlZCwgYnV0CitiZWZvcmUgeW91IGxvYWQgaXQgeW91IG11c3QgY2FsbCBqb3VybmFsX3dpcGUoKSB0byBlbXB0eSB0aGUgam91cm5hbCBmaWxlLgorSGFuZyBvbiwgeW91IHNheSAsIHdoYXQgaWYgdGhlIGZpbGVzeXN0ZW0gd2Fzbid0IGNsZWFubHkgdW1vdW50KCknZCAuIFdlbGwsIGl0IGlzIHRoZSAKK2pvYiBvZiB0aGUgY2xpZW50IGZpbGUgc3lzdGVtIHRvIGRldGVjdCB0aGlzIGFuZCBza2lwIHRoZSBjYWxsIHRvIGpvdXJuYWxfd2lwZSgpLgorPC9wYXJhPgorCis8cGFyYT4KK0luIGVpdGhlciBjYXNlIHRoZSBuZXh0IGNhbGwgc2hvdWxkIGJlIHRvIGpvdXJuYWxfbG9hZCgpIHdoaWNoIHByZXBhcmVzIHRoZQoram91cm5hbCBmaWxlIGZvciB1c2UuIE5vdGUgdGhhdCBqb3VybmFsX3dpcGUoLi4sMCkgY2FsbHMgam91cm5hbF9za2lwX3JlY292ZXJ5KCkgCitmb3IgeW91IGlmIGl0IGRldGVjdHMgYW55IG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucyBpbiB0aGUgam91cm5hbCBhbmQgc2ltaWxhcmx5Citqb3VybmFsX2xvYWQoKSB3aWxsIGNhbGwgam91cm5hbF9yZWNvdmVyKCkgaWYgbmVjZXNzYXJ5LgorSSB3b3VsZCBhZHZpc2UgcmVhZGluZyBmcy9leHQzL3N1cGVyLmMgZm9yIGV4YW1wbGVzIG9uIHRoaXMgc3RhZ2UuCitbUkdHOiBXaHkgaXMgdGhlIGpvdXJuYWxfd2lwZSgpIGNhbGwgbmVjZXNzYXJ5IC0gZG9lc24ndCB0aGlzIG5lZWRsZXNzbHkgCitjb21wbGljYXRlIHRoZSBBUEkuIE9yIGlzbid0IGEgZ29vZCBpZGVhIGZvciB0aGUgam91cm5hbCBsYXllciB0byBoaWRlIAorZGlydHkgbW91bnRzIGZyb20gdGhlIGNsaWVudCBmc10KKzwvcGFyYT4KKworPHBhcmE+CitOb3cgeW91IGNhbiBnbyBhaGVhZCBhbmQgc3RhcnQgbW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIAorZmlsZXN5c3RlbS4gQWxtb3N0LgorPC9wYXJhPgorCisKKzxwYXJhPgorCitZb3Ugc3RpbGwgbmVlZCB0byBhY3R1YWxseSBqb3VybmFsIHlvdXIgZmlsZXN5c3RlbSBjaGFuZ2VzLCB0aGlzCitpcyBkb25lIGJ5IHdyYXBwaW5nIHRoZW0gaW50byB0cmFuc2FjdGlvbnMuIEFkZGl0aW9uYWxseSB5b3UKK2Fsc28gbmVlZCB0byB3cmFwIHRoZSBtb2RpZmljYXRpb24gb2YgZWFjaCBvZiB0aGUgdGhlIGJ1ZmZlcnMKK3dpdGggY2FsbHMgdG8gdGhlIGpvdXJuYWwgbGF5ZXIsIHNvIGl0IGtub3dzIHdoYXQgdGhlIG1vZGlmaWNhdGlvbnMKK3lvdSBhcmUgYWN0dWFsbHkgbWFraW5nIGFyZS4gVG8gZG8gdGhpcyB1c2UgIGpvdXJuYWxfc3RhcnQoKSB3aGljaAorcmV0dXJucyBhIHRyYW5zYWN0aW9uIGhhbmRsZS4KKzwvcGFyYT4KKworPHBhcmE+Citqb3VybmFsX3N0YXJ0KCkKK2FuZCBpdHMgY291bnRlcnBhcnQgam91cm5hbF9zdG9wKCksIHdoaWNoIGluZGljYXRlcyB0aGUgZW5kIG9mIGEgdHJhbnNhY3Rpb24KK2FyZSBuZXN0YWJsZSBjYWxscywgc28geW91IGNhbiByZWVudGVyIGEgdHJhbnNhY3Rpb24gaWYgbmVjZXNzYXJ5LAorYnV0IHJlbWVtYmVyIHlvdSBtdXN0IGNhbGwgam91cm5hbF9zdG9wKCkgdGhlIHNhbWUgbnVtYmVyIG9mIHRpbWVzIGFzCitqb3VybmFsX3N0YXJ0KCkgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQgKG9yIG1vcmUgYWNjdXJhdGVseQorbGVhdmVzIHRoZSB0aGUgdXBkYXRlIHBoYXNlKS4gRXh0My9WRlMgbWFrZXMgdXNlIG9mIHRoaXMgZmVhdHVyZSB0byBzaW1wbGlmeSAKK3F1b3RhIHN1cHBvcnQuCis8L3BhcmE+CisKKzxwYXJhPgorSW5zaWRlIGVhY2ggdHJhbnNhY3Rpb24geW91IG5lZWQgdG8gd3JhcCB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUKK2luZGl2aWR1YWwgYnVmZmVycyAoYmxvY2tzKS4gQmVmb3JlIHlvdSBzdGFydCB0byBtb2RpZnkgYSBidWZmZXIgeW91CituZWVkIHRvIGNhbGwgam91cm5hbF9nZXRfe2NyZWF0ZSx3cml0ZSx1bmRvfV9hY2Nlc3MoKSBhcyBhcHByb3ByaWF0ZSwKK3RoaXMgYWxsb3dzIHRoZSBqb3VybmFsbGluZyBsYXllciB0byBjb3B5IHRoZSB1bm1vZGlmaWVkIGRhdGEgaWYgaXQKK25lZWRzIHRvLiBBZnRlciBhbGwgdGhlIGJ1ZmZlciBtYXkgYmUgcGFydCBvZiBhIHByZXZpb3VzbHkgdW5jb21taXR0ZWQKK3RyYW5zYWN0aW9uLiAKK0F0IHRoaXMgcG9pbnQgeW91IGFyZSBhdCBsYXN0IHJlYWR5IHRvIG1vZGlmeSBhIGJ1ZmZlciwgYW5kIG9uY2UKK3lvdSBhcmUgaGF2ZSBkb25lIHNvIHlvdSBuZWVkIHRvIGNhbGwgam91cm5hbF9kaXJ0eV97bWV0YSx9ZGF0YSgpLgorT3IgaWYgeW91J3ZlIGFza2VkIGZvciBhY2Nlc3MgdG8gYSBidWZmZXIgeW91IG5vdyBrbm93IGlzIG5vdyBsb25nZXIgCityZXF1aXJlZCB0byBiZSBwdXNoZWQgYmFjayBvbiB0aGUgZGV2aWNlIHlvdSBjYW4gY2FsbCBqb3VybmFsX2ZvcmdldCgpCitpbiBtdWNoIHRoZSBzYW1lIHdheSBhcyB5b3UgbWlnaHQgaGF2ZSB1c2VkIGJmb3JnZXQoKSBpbiB0aGUgcGFzdC4KKzwvcGFyYT4KKworPHBhcmE+CitBIGpvdXJuYWxfZmx1c2goKSBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIHRvIGNvbW1pdCBhbmQgY2hlY2twb2ludAorYWxsIHlvdXIgdHJhbnNhY3Rpb25zLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZW4gYXQgdW1vdW50IHRpbWUgLCBpbiB5b3VyIHB1dF9zdXBlcigpICgyLjQpIG9yIHdyaXRlX3N1cGVyKCkgKDIuNSkKK3lvdSBjYW4gdGhlbiBjYWxsIGpvdXJuYWxfZGVzdHJveSgpIHRvIGNsZWFuIHVwIHlvdXIgaW4tY29yZSBqb3VybmFsIG9iamVjdC4KKzwvcGFyYT4KKworCis8cGFyYT4KK1VuZm9ydHVuYXRlbHkgdGhlcmUgYSBjb3VwbGUgb2Ygd2F5cyB0aGUgam91cm5hbCBsYXllciBjYW4gY2F1c2UgYSBkZWFkbG9jay4KK1RoZSBmaXJzdCB0aGluZyB0byBub3RlIGlzIHRoYXQgZWFjaCB0YXNrIGNhbiBvbmx5IGhhdmUKK2Egc2luZ2xlIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9uIGF0IGFueSBvbmUgdGltZSwgcmVtZW1iZXIgbm90aGluZworY29tbWl0cyB1bnRpbCB0aGUgb3V0ZXJtb3N0IGpvdXJuYWxfc3RvcCgpLiBUaGlzIG1lYW5zCit5b3UgbXVzdCBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24gYXQgdGhlIGVuZCBvZiBlYWNoIGZpbGUvaW5vZGUvYWRkcmVzcworZXRjLiBvcGVyYXRpb24geW91IHBlcmZvcm0sIHNvIHRoYXQgdGhlIGpvdXJuYWxsaW5nIHN5c3RlbSBpc24ndCByZS1lbnRlcmVkCitvbiBhbm90aGVyIGpvdXJuYWwuIFNpbmNlIHRyYW5zYWN0aW9ucyBjYW4ndCBiZSBuZXN0ZWQvYmF0Y2hlZCAKK2Fjcm9zcyBkaWZmZXJpbmcgam91cm5hbHMsIGFuZCBhbm90aGVyIGZpbGVzeXN0ZW0gb3RoZXIgdGhhbgoreW91cnMgKHNheSBleHQzKSBtYXkgYmUgbW9kaWZpZWQgaW4gYSBsYXRlciBzeXNjYWxsLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBzZWNvbmQgY2FzZSB0byBiZWFyIGluIG1pbmQgaXMgdGhhdCBqb3VybmFsX3N0YXJ0KCkgY2FuIAorYmxvY2sgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlIGluIHRoZSBqb3VybmFsIGZvciB5b3VyIHRyYW5zYWN0aW9uIAorKGJhc2VkIG9uIHRoZSBwYXNzZWQgbmJsb2NrcyBwYXJhbSkgLSB3aGVuIGl0IGJsb2NrcyBpdCBtZXJlbHkoISkgbmVlZHMgdG8KK3dhaXQgZm9yIHRyYW5zYWN0aW9ucyB0byBjb21wbGV0ZSBhbmQgYmUgY29tbWl0dGVkIGZyb20gb3RoZXIgdGFza3MsIAorc28gZXNzZW50aWFsbHkgd2UgYXJlIHdhaXRpbmcgZm9yIGpvdXJuYWxfc3RvcCgpLiBTbyB0byBhdm9pZCAKK2RlYWRsb2NrcyB5b3UgbXVzdCB0cmVhdCBqb3VybmFsX3N0YXJ0L3N0b3AoKSBhcyBpZiB0aGV5Cit3ZXJlIHNlbWFwaG9yZXMgYW5kIGluY2x1ZGUgdGhlbSBpbiB5b3VyIHNlbWFwaG9yZSBvcmRlcmluZyBydWxlcyB0byBwcmV2ZW50IAorZGVhZGxvY2tzLiBOb3RlIHRoYXQgam91cm5hbF9leHRlbmQoKSBoYXMgc2ltaWxhciBibG9ja2luZyBiZWhhdmlvdXIgdG8KK2pvdXJuYWxfc3RhcnQoKSBzbyB5b3UgY2FuIGRlYWRsb2NrIGhlcmUganVzdCBhcyBlYXNpbHkgYXMgb24gam91cm5hbF9zdGFydCgpLgorPC9wYXJhPgorCis8cGFyYT4KK1RyeSB0byByZXNlcnZlIHRoZSByaWdodCBudW1iZXIgb2YgYmxvY2tzIHRoZSBmaXJzdCB0aW1lLiA7LSkuIFRoaXMgd2lsbAorYmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB5b3UgYXJlIGdvaW5nIHRvIHRvdWNoIGluIHRoaXMgdHJhbnNhY3Rpb24uCitJIGFkdmlzZSBoYXZpbmcgYSBsb29rIGF0IGF0IGxlYXN0IGV4dDNfamJkLmggdG8gc2VlIHRoZSBiYXNpcyBvbiB3aGljaCAKK2V4dDMgdXNlcyB0byBtYWtlIHRoZXNlIGRlY2lzaW9ucy4KKzwvcGFyYT4KKworPHBhcmE+CitBbm90aGVyIHdyaWdnbGUgdG8gd2F0Y2ggb3V0IGZvciBpcyB5b3VyIG9uLWRpc2sgYmxvY2sgYWxsb2NhdGlvbiBzdHJhdGVneS4KK3doeT8gQmVjYXVzZSwgaWYgeW91IHVuZG8gYSBkZWxldGUsIHlvdSBuZWVkIHRvIGVuc3VyZSB5b3UgaGF2ZW4ndCByZXVzZWQgYW55CitvZiB0aGUgZnJlZWQgYmxvY2tzIGluIGEgbGF0ZXIgdHJhbnNhY3Rpb24uIE9uZSBzaW1wbGUgd2F5IG9mIGRvaW5nIHRoaXMKK2lzIG1ha2Ugc3VyZSBhbnkgYmxvY2tzIHlvdSBhbGxvY2F0ZSBvbmx5IGhhdmUgY2hlY2twb2ludGVkIHRyYW5zYWN0aW9ucworbGlzdGVkIGFnYWluc3QgdGhlbS4gRXh0MyBkb2VzIHRoaXMgaW4gZXh0M190ZXN0X2FsbG9jYXRhYmxlKCkuIAorPC9wYXJhPgorCis8cGFyYT4KK0xvY2sgaXMgYWxzbyBwcm92aWRpbmcgdGhyb3VnaCBqb3VybmFsX3t1bix9bG9ja191cGRhdGVzKCksCitleHQzIHVzZXMgdGhpcyB3aGVuIGl0IHdhbnRzIGEgd2luZG93IHdpdGggYSBjbGVhbiBhbmQgc3RhYmxlIGZzIGZvciBhIG1vbWVudC4KK2VnLiAKKzwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorCisJam91cm5hbF9sb2NrX3VwZGF0ZXMoKSAvL3N0b3AgbmV3IHN0dWZmIGhhcHBlbmluZy4uCisJam91cm5hbF9mbHVzaCgpICAgICAgICAvLyBjaGVja3BvaW50IGV2ZXJ5dGhpbmcuCisJLi5kbyBzdHVmZiBvbiBzdGFibGUgZnMKKwlqb3VybmFsX3VubG9ja191cGRhdGVzKCkgLy8gY2Fycnkgb24gd2l0aCBmaWxlc3lzdGVtIHVzZS4KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzxwYXJhPgorVGhlIG9wcG9ydHVuaXRpZXMgZm9yIGFidXNlIGFuZCBET1MgYXR0YWNrcyB3aXRoIHRoaXMgc2hvdWxkIGJlIG9idmlvdXMsCitpZiB5b3UgYWxsb3cgdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSB0byB0cmlnZ2VyIGNvZGVwYXRocyBjb250YWluaW5nIHRoZXNlCitjYWxscy4KKzwvcGFyYT4KKworPHBhcmE+CitBIG5ldyBmZWF0dXJlIG9mIGpiZCBzaW5jZSAyLjUuMjUgaXMgY29tbWl0IGNhbGxiYWNrcyB3aXRoIHRoZSBuZXcKK2pvdXJuYWxfY2FsbGJhY2tfc2V0KCkgZnVuY3Rpb24geW91IGNhbiBub3cgYXNrIHRoZSBqb3VybmFsbGluZyBsYXllcgordG8gY2FsbCB5b3UgYmFjayB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5hbGx5IGNvbW1pdHRlZCB0byBkaXNrLCBzbyB0aGF0Cit5b3UgY2FuIGRvIHNvbWUgb2YgeW91ciBvd24gbWFuYWdlbWVudC4gVGhlIGtleSB0byB0aGlzIGlzIHRoZSBqb3VybmFsX2NhbGxiYWNrCitzdHJ1Y3QsIHRoaXMgbWFpbnRhaW5zIHRoZSBpbnRlcm5hbCBjYWxsYmFjayBpbmZvcm1hdGlvbiBidXQgeW91IGNhbgorZXh0ZW5kIGl0IGxpa2UgdGhpczotCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisJc3RydWN0ICBteWZzX2NhbGxiYWNrX3MgeworCQkvL0RhdGEgc3RydWN0dXJlIGVsZW1lbnQgcmVxdWlyZWQgYnkgamJkLi4KKwkJc3RydWN0IGpvdXJuYWxfY2FsbGJhY2sgZm9yX2piZDsKKwkJLy8gU3R1ZmYgZm9yIG15ZnMgYWxsb2NhdGVkIHRvZ2V0aGVyLgorCQlteWZzX2lub2RlKiAgICBpX2NvbW1pdGVkOworCQorCX0KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzxwYXJhPgordGhpcyB3b3VsZCBiZSB1c2VmdWwgaWYgeW91IG5lZWRlZCB0byBrbm93IHdoZW4gZGF0YSB3YXMgY29tbWl0dGVkIHRvIGEgCitwYXJ0aWN1bGFyIGlub2RlLgorPC9wYXJhPgorCis8L3NlY3QxPgorCis8c2VjdDE+Cis8dGl0bGU+U3VtbWFyeTwvdGl0bGU+Cis8cGFyYT4KK1VzaW5nIHRoZSBqb3VybmFsIGlzIGEgbWF0dGVyIG9mIHdyYXBwaW5nIHRoZSBkaWZmZXJlbnQgY29udGV4dCBjaGFuZ2VzLAorYmVpbmcgZWFjaCBtb3VudCwgZWFjaCBtb2RpZmljYXRpb24gKHRyYW5zYWN0aW9uKSBhbmQgZWFjaCBjaGFuZ2VkIGJ1ZmZlcgordG8gdGVsbCB0aGUgam91cm5hbGxpbmcgbGF5ZXIgYWJvdXQgdGhlbS4KKzwvcGFyYT4KKworPHBhcmE+CitIZXJlIGlzIGEgc29tZSBwc2V1ZG8gY29kZSB0byBnaXZlIHlvdSBhbiBpZGVhIG9mIGhvdyBpdCB3b3JrcywgYXMKK2FuIGV4YW1wbGUuCis8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKyAgam91cm5hbF90KiBteV9qbnJsID0gam91cm5hbF9jcmVhdGUoKTsKKyAgam91cm5hbF9pbml0X3tkZXYsaW5vZGV9KGpucmwsLi4uKQorICBpZiAoY2xlYW4pIGpvdXJuYWxfd2lwZSgpOworICBqb3VybmFsX2xvYWQoKTsKKworICAgZm9yZWFjaCh0cmFuc2FjdGlvbikgeyAvKnRyYW5zYWN0aW9ucyBtdXN0IGJlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN5c2NhbGwgcmV0dXJucyB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vyc3BhY2UqLworCisgICAgICAgICAgaGFuZGxlX3QgKiB4Y3Q9am91cm5hbF9zdGFydChteV9qbnJsKTsKKyAgICAgICAgICBmb3JlYWNoKGJoKSB7CisgICAgICAgICAgICAgICAgam91cm5hbF9nZXRfe2NyZWF0ZSx3cml0ZSx1bmRvfV9hY2Nlc3MoeGFjdCxiaCk7CisgICAgICAgICAgICAgICAgaWYgKCBteWZzX21vZGlmeShiaCkgKSB7IC8qIHJldHVybnMgdHJ1ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYWtlcyBjaGFuZ2VzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3VybmFsX2RpcnR5X3ttZXRhLH1kYXRhKHhhY3QsYmgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3VybmFsX2ZvcmdldChiaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBqb3VybmFsX3N0b3AoeGN0KTsKKyAgIH0KKyAgIGpvdXJuYWxfZGVzdHJveShteV9qcm5sKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3QxPgorCis8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImFkdCI+CisgICAgIDx0aXRsZT5EYXRhIFR5cGVzPC90aXRsZT4KKyAgICAgPHBhcmE+CQorCVRoZSBqb3VybmFsbGluZyBsYXllciB1c2VzIHR5cGVkZWZzIHRvICdoaWRlJyB0aGUgY29uY3JldGUgZGVmaW5pdGlvbnMKKwlvZiB0aGUgc3RydWN0dXJlcyB1c2VkLiBBcyBhIGNsaWVudCBvZiB0aGUgSkJEIGxheWVyIHlvdSBjYW4KKwlqdXN0IHJlbHkgb24gdGhlIHVzaW5nIHRoZSBwb2ludGVyIGFzIGEgbWFnaWMgY29va2llICBvZiBzb21lIHNvcnQuCisJCisJT2J2aW91c2x5IHRoZSBoaWRpbmcgaXMgbm90IGVuZm9yY2VkIGFzIHRoaXMgaXMgJ0MnLgorCTwvcGFyYT4KKwk8c2VjdDE+PHRpdGxlPlN0cnVjdHVyZXM8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L2piZC5oCisJPC9zZWN0MT4KKzwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iY2FsbHMiPgorICAgICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4KKyAgICAgPHBhcmE+CQorCVRoZSBmdW5jdGlvbnMgaGVyZSBhcmUgc3BsaXQgaW50byB0d28gZ3JvdXBzIHRob3NlIHRoYXQKKwlhZmZlY3QgYSBqb3VybmFsIGFzIGEgd2hvbGUsIGFuZCB0aG9zZSB3aGljaCBhcmUgdXNlZCB0bworCW1hbmFnZSB0cmFuc2FjdGlvbnMKKzwvcGFyYT4KKwk8c2VjdDE+PHRpdGxlPkpvdXJuYWwgTGV2ZWw8L3RpdGxlPgorIUVmcy9qYmQvam91cm5hbC5jCishRWZzL2piZC9yZWNvdmVyeS5jCisJPC9zZWN0MT4KKwk8c2VjdDE+PHRpdGxlPlRyYW5zYXNjdGlvbiBMZXZlbDwvdGl0bGU+CishRWZzL2piZC90cmFuc2FjdGlvbi5jCQorCTwvc2VjdDE+Cis8L2NoYXB0ZXI+Cis8Y2hhcHRlcj4KKyAgICAgPHRpdGxlPlNlZSBhbHNvPC90aXRsZT4KKwk8cGFyYT4KKwk8Y2l0YXRpb24+CisJICAgPHVsaW5rIHVybD0iZnRwOi8vZnRwLnVrLmxpbnV4Lm9yZy9wdWIvbGludXgvc2N0L2ZzL2pmcy9qb3VybmFsLWRlc2lnbi5wcy5neiI+CisJICAgCUpvdXJuYWxpbmcgdGhlIExpbnV4IGV4dDJmcyBGaWxlc3lzdGVtLExpbnV4RXhwbyA5OCwgU3RlcGhlbiBUd2VlZGllCisJICAgPC91bGluaz4KKwkgICA8L2NpdGF0aW9uPgorCSAgIDwvcGFyYT4KKwkgICA8cGFyYT4KKwkgICA8Y2l0YXRpb24+CisJICAgPHVsaW5rIHVybD0iaHR0cDovL29sc3RyYW5zLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL09MUzIwMDAtZXh0My9PTFMyMDAwLWV4dDMuaHRtbCI+CisJICAgCUV4dDMgSm91cm5hbGxpbmcgRmlsZVN5c3RlbSAsIE9MUyAyMDAwLCBEci4gU3RlcGhlbiBUd2VlZGllCisJICAgPC91bGluaz4KKwkgICA8L2NpdGF0aW9uPgorCSAgIDwvcGFyYT4KKzwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkMjBjOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKQEAgLTAsMCArMSwzNDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iTGludXhLZXJuZWxBUEkiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlRoZSBMaW51eCBLZXJuZWwgQVBJPC90aXRsZT4KKyAgCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0iQmFzaWNzIj4KKyAgICAgPHRpdGxlPkRyaXZlciBCYXNpY3M8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkRyaXZlciBFbnRyeSBhbmQgRXhpdCBwb2ludHM8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L2luaXQuaAorICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+QXRvbWljIGFuZCBwb2ludGVyIG1hbmlwdWxhdGlvbjwvdGl0bGU+CishSWluY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKKyFJaW5jbHVkZS9hc20taTM4Ni91bmFsaWduZWQuaAorICAgICA8L3NlY3QxPgorCis8IS0tIEZJWE1FOgorICBrZXJuZWwvc2NoZWQuYyBoYXMgbm8gZG9jcywgd2hpY2ggc3R1ZmZzIHVwIHRoZSBzZ21sLiAgQ29tbWVudAorICBvdXQgdW50aWwgc29tZWJvZHkgYWRkcyBkb2NzLiAgS0FPCisgICAgIDxzZWN0MT48dGl0bGU+RGVsYXlpbmcsIHNjaGVkdWxpbmcsIGFuZCB0aW1lciByb3V0aW5lczwvdGl0bGU+CitYIUVrZXJuZWwvc2NoZWQuYworICAgICA8L3NlY3QxPgorS0FPIC0tPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImFkdCI+CisgICAgIDx0aXRsZT5EYXRhIFR5cGVzPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Eb3VibHkgTGlua2VkIExpc3RzPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9saXN0LmgKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJsaWJjIj4KKyAgICAgPHRpdGxlPkJhc2ljIEMgTGlicmFyeSBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgIDxwYXJhPgorICAgICAgIFdoZW4gd3JpdGluZyBkcml2ZXJzLCB5b3UgY2Fubm90IGluIGdlbmVyYWwgdXNlIHJvdXRpbmVzIHdoaWNoIGFyZQorICAgICAgIGZyb20gdGhlIEMgTGlicmFyeS4gIFNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gZm91bmQgZ2VuZXJhbGx5CisgICAgICAgdXNlZnVsIGFuZCB0aGV5IGFyZSBsaXN0ZWQgYmVsb3cuICBUaGUgYmVoYXZpb3VyIG9mIHRoZXNlIGZ1bmN0aW9ucworICAgICAgIG1heSB2YXJ5IHNsaWdodGx5IGZyb20gdGhvc2UgZGVmaW5lZCBieSBBTlNJLCBhbmQgdGhlc2UgZGV2aWF0aW9ucworICAgICAgIGFyZSBub3RlZCBpbiB0aGUgdGV4dC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxzZWN0MT48dGl0bGU+U3RyaW5nIENvbnZlcnNpb25zPC90aXRsZT4KKyFJbGliL3ZzcHJpbnRmLmMKKyFFbGliL3ZzcHJpbnRmLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5TdHJpbmcgTWFuaXB1bGF0aW9uPC90aXRsZT4KKyFJbGliL3N0cmluZy5jCishRWxpYi9zdHJpbmcuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkJpdCBPcGVyYXRpb25zPC90aXRsZT4KKyFJaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaAorICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9Im1tIj4KKyAgICAgPHRpdGxlPk1lbW9yeSBNYW5hZ2VtZW50IGluIExpbnV4PC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5UaGUgU2xhYiBDYWNoZTwvdGl0bGU+CishRW1tL3NsYWIuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPlVzZXIgU3BhY2UgTWVtb3J5IEFjY2VzczwvdGl0bGU+CishSWluY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oCishSWFyY2gvaTM4Ni9saWIvdXNlcmNvcHkuYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImtmaWZvIj4KKyAgICAgPHRpdGxlPkZJRk8gQnVmZmVyPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5rZmlmbyBpbnRlcmZhY2U8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L2tmaWZvLmgKKyFFa2VybmVsL2tmaWZvLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwcm9jIj4KKyAgICAgPHRpdGxlPlRoZSBwcm9jIGZpbGVzeXN0ZW08L3RpdGxlPgorIAorICAgICA8c2VjdDE+PHRpdGxlPnN5c2N0bCBpbnRlcmZhY2U8L3RpdGxlPgorIUVrZXJuZWwvc3lzY3RsLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJkZWJ1Z2ZzIj4KKyAgICAgPHRpdGxlPlRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW08L3RpdGxlPgorIAorICAgICA8c2VjdDE+PHRpdGxlPmRlYnVnZnMgaW50ZXJmYWNlPC90aXRsZT4KKyFFZnMvZGVidWdmcy9pbm9kZS5jCishRWZzL2RlYnVnZnMvZmlsZS5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0idmZzIj4KKyAgICAgPHRpdGxlPlRoZSBMaW51eCBWRlM8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPlRoZSBEaXJlY3RvcnkgQ2FjaGU8L3RpdGxlPgorIUVmcy9kY2FjaGUuYworIUlpbmNsdWRlL2xpbnV4L2RjYWNoZS5oCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+SW5vZGUgSGFuZGxpbmc8L3RpdGxlPgorIUVmcy9pbm9kZS5jCishRWZzL2JhZF9pbm9kZS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+UmVnaXN0cmF0aW9uIGFuZCBTdXBlcmJsb2NrczwvdGl0bGU+CishRWZzL3N1cGVyLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5GaWxlIExvY2tzPC90aXRsZT4KKyFFZnMvbG9ja3MuYworIUlmcy9sb2Nrcy5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibmV0Y29yZSI+CisgICAgIDx0aXRsZT5MaW51eCBOZXR3b3JraW5nPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Tb2NrZXQgQnVmZmVyIEZ1bmN0aW9uczwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvc2tidWZmLmgKKyFFbmV0L2NvcmUvc2tidWZmLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Tb2NrZXQgRmlsdGVyPC90aXRsZT4KKyFFbmV0L2NvcmUvZmlsdGVyLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5HZW5lcmljIE5ldHdvcmsgU3RhdGlzdGljczwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKKyFFbmV0L2NvcmUvZ2VuX3N0YXRzLmMKKyFFbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibmV0ZGV2Ij4KKyAgICAgPHRpdGxlPk5ldHdvcmsgZGV2aWNlIHN1cHBvcnQ8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkRyaXZlciBTdXBwb3J0PC90aXRsZT4KKyFFbmV0L2NvcmUvZGV2LmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT44MzkwIEJhc2VkIE5ldHdvcmsgQ2FyZHM8L3RpdGxlPgorIUVkcml2ZXJzL25ldC84MzkwLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5TeW5jaHJvbm91cyBQUFA8L3RpdGxlPgorIUVkcml2ZXJzL25ldC93YW4vc3luY3BwcC5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibW9kbG9hZCI+CisgICAgIDx0aXRsZT5Nb2R1bGUgU3VwcG9ydDwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+TW9kdWxlIExvYWRpbmc8L3RpdGxlPgorIUVrZXJuZWwva21vZC5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+SW50ZXIgTW9kdWxlIHN1cHBvcnQ8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgUmVmZXIgdG8gdGhlIGZpbGUga2VybmVsL21vZHVsZS5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+Cis8IS0tIEZJWE1FOiBSZW1vdmVkIGZvciBub3cgc2luY2Ugbm8gc3RydWN0dXJlZCBjb21tZW50cyBpbiBzb3VyY2UKK1ghRWtlcm5lbC9tb2R1bGUuYworLS0+CisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iaGFyZHdhcmUiPgorICAgICA8dGl0bGU+SGFyZHdhcmUgSW50ZXJmYWNlczwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+SW50ZXJydXB0IEhhbmRsaW5nPC90aXRsZT4KKyFJYXJjaC9pMzg2L2tlcm5lbC9pcnEuYworICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+TVRSUiBIYW5kbGluZzwvdGl0bGU+CishRWFyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+UENJIFN1cHBvcnQgTGlicmFyeTwvdGl0bGU+CishRWRyaXZlcnMvcGNpL3BjaS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+UENJIEhvdHBsdWcgU3VwcG9ydCBMaWJyYXJ5PC90aXRsZT4KKyFFZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5NQ0EgQXJjaGl0ZWN0dXJlPC90aXRsZT4KKwk8c2VjdDI+PHRpdGxlPk1DQSBEZXZpY2UgRnVuY3Rpb25zPC90aXRsZT4KKyAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFJlZmVyIHRvIHRoZSBmaWxlIGFyY2gvaTM4Ni9rZXJuZWwvbWNhLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgIDwvcGFyYT4KKzwhLS0gRklYTUU6IFJlbW92ZWQgZm9yIG5vdyBzaW5jZSBubyBzdHJ1Y3R1cmVkIGNvbW1lbnRzIGluIHNvdXJjZQorWCFFYXJjaC9pMzg2L2tlcm5lbC9tY2EuYworLS0+CisJPC9zZWN0Mj4KKwk8c2VjdDI+PHRpdGxlPk1DQSBCdXMgRE1BPC90aXRsZT4KKyFJaW5jbHVkZS9hc20taTM4Ni9tY2FfZG1hLmgKKwk8L3NlY3QyPgorICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImRldmZzIj4KKyAgICAgPHRpdGxlPlRoZSBEZXZpY2UgRmlsZSBTeXN0ZW08L3RpdGxlPgorIUVmcy9kZXZmcy9iYXNlLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJzZWN1cml0eSI+CisgICAgIDx0aXRsZT5TZWN1cml0eSBGcmFtZXdvcms8L3RpdGxlPgorIUVzZWN1cml0eS9zZWN1cml0eS5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0icG1mdW5jcyI+CisgICAgIDx0aXRsZT5Qb3dlciBNYW5hZ2VtZW50PC90aXRsZT4KKyFFa2VybmVsL3Bvd2VyL3BtLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJibGtkZXYiPgorICAgICA8dGl0bGU+QmxvY2sgRGV2aWNlczwvdGl0bGU+CishRWRyaXZlcnMvYmxvY2svbGxfcndfYmxrLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJtaXNjZGV2Ij4KKyAgICAgPHRpdGxlPk1pc2NlbGxhbmVvdXMgRGV2aWNlczwvdGl0bGU+CishRWRyaXZlcnMvY2hhci9taXNjLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJ2aWRkZXYiPgorICAgICA8dGl0bGU+VmlkZW80TGludXg8L3RpdGxlPgorIUVkcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJzbmRkZXYiPgorICAgICA8dGl0bGU+U291bmQgRGV2aWNlczwvdGl0bGU+CishRXNvdW5kL3NvdW5kX2NvcmUuYworPCEtLSBGSVhNRTogUmVtb3ZlZCBmb3Igbm93IHNpbmNlIG5vIHN0cnVjdHVyZWQgY29tbWVudHMgaW4gc291cmNlCitYIUlzb3VuZC9zb3VuZF9maXJtd2FyZS5jCistLT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJ1YXJ0MTZ4NTAiPgorICAgICA8dGl0bGU+MTZ4NTAgVUFSVCBEcml2ZXI8L3RpdGxlPgorIUVkcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCishRWRyaXZlcnMvc2VyaWFsLzgyNTAuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9Ino4NTIzMCI+CisgICAgIDx0aXRsZT5aODUyMzAgU3VwcG9ydCBMaWJyYXJ5PC90aXRsZT4KKyFFZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZmJkZXYiPgorICAgICA8dGl0bGU+RnJhbWUgQnVmZmVyIExpYnJhcnk8L3RpdGxlPgorCisgICAgIDxwYXJhPgorICAgICAgIFRoZSBmcmFtZSBidWZmZXIgZHJpdmVycyBkZXBlbmQgaGVhdmlseSBvbiBmb3VyIGRhdGEgc3RydWN0dXJlcy4gIAorICAgICAgIFRoZXNlIHN0cnVjdHVyZXMgYXJlIGRlY2xhcmVkIGluIGluY2x1ZGUvbGludXgvZmIuaC4gIFRoZXkgYXJlIAorICAgICAgIGZiX2luZm8sIGZiX3Zhcl9zY3JlZW5pbmZvLCBmYl9maXhfc2NyZWVuaW5mbyBhbmQgZmJfbW9ub3NwZWNzLiAKKyAgICAgICBUaGUgbGFzdCB0aHJlZSBjYW4gYmUgbWFkZSBhdmFpbGFibGUgdG8gYW5kIGZyb20gdXNlcmxhbmQuIAorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICAgZmJfaW5mbyBkZWZpbmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgcGFydGljdWxhciB2aWRlbyBjYXJkLiAKKyAgICAgICBJbnNpZGUgZmJfaW5mbywgdGhlcmUgZXhpc3RzIGEgZmJfb3BzIHN0cnVjdHVyZSB3aGljaCBpcyBhIAorICAgICAgIGNvbGxlY3Rpb24gb2YgbmVlZGVkIGZ1bmN0aW9ucyB0byBtYWtlIGZiZGV2IGFuZCBmYmNvbiB3b3JrLgorICAgICAgIGZiX2luZm8gaXMgb25seSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwuCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgICBmYl92YXJfc2NyZWVuaW5mbyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBmZWF0dXJlcyBvZiBhIHZpZGVvIGNhcmQgCisgICAgICAgdGhhdCBhcmUgdXNlciBkZWZpbmVkLiAgV2l0aCBmYl92YXJfc2NyZWVuaW5mbywgdGhpbmdzIHN1Y2ggYXMKKyAgICAgICBkZXB0aCBhbmQgdGhlIHJlc29sdXRpb24gbWF5IGJlIGRlZmluZWQuCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgICBUaGUgbmV4dCBzdHJ1Y3R1cmUgaXMgZmJfZml4X3NjcmVlbmluZm8uIFRoaXMgZGVmaW5lcyB0aGUgCisgICAgICAgcHJvcGVydGllcyBvZiBhIGNhcmQgdGhhdCBhcmUgY3JlYXRlZCB3aGVuIGEgbW9kZSBpcyBzZXQgYW5kIGNhbid0IAorICAgICAgIGJlIGNoYW5nZWQgb3RoZXJ3aXNlLiAgQSBnb29kIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIAorICAgICAgIGZyYW1lIGJ1ZmZlciBtZW1vcnkuICBUaGlzICJsb2NrcyIgdGhlIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGJ1ZmZlcgorICAgICAgIG1lbW9yeSwgc28gdGhhdCBpdCBjYW5ub3QgYmUgY2hhbmdlZCBvciBtb3ZlZC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIFRoZSBsYXN0IHN0cnVjdHVyZSBpcyBmYl9tb25vc3BlY3MuIEluIHRoZSBvbGQgQVBJLCB0aGVyZSB3YXMgCisgICAgICAgbGl0dGxlIGltcG9ydGFuY2UgZm9yIGZiX21vbm9zcGVjcy4gVGhpcyBhbGxvd2VkIGZvciBmb3JiaWRkZW4gdGhpbmdzIAorICAgICAgIHN1Y2ggYXMgc2V0dGluZyBhIG1vZGUgb2YgODAweDYwMCBvbiBhIGZpeCBmcmVxdWVuY3kgbW9uaXRvci4gV2l0aCAKKyAgICAgICB0aGUgbmV3IEFQSSwgZmJfbW9ub3NwZWNzIHByZXZlbnRzIHN1Y2ggdGhpbmdzLCBhbmQgaWYgdXNlZCAKKyAgICAgICBjb3JyZWN0bHksIGNhbiBwcmV2ZW50IGEgbW9uaXRvciBmcm9tIGJlaW5nIGNvb2tlZC4gIGZiX21vbm9zcGVjcworICAgICAgIHdpbGwgbm90IGJlIHVzZWZ1bCB1bnRpbCBrZXJuZWxzIDIuNS54LgorICAgICA8L3BhcmE+CisKKyAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgTWVtb3J5PC90aXRsZT4KKyFFZHJpdmVycy92aWRlby9mYm1lbS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIENvbnNvbGU8L3RpdGxlPgorIUVkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBDb2xvcm1hcDwvdGl0bGU+CishRWRyaXZlcnMvdmlkZW8vZmJjbWFwLmMKKyAgICAgPC9zZWN0MT4KKzwhLS0gRklYTUU6CisgIGRyaXZlcnMvdmlkZW8vZmJnZW4uYyBoYXMgbm8gZG9jcywgd2hpY2ggc3R1ZmZzIHVwIHRoZSBzZ21sLiAgQ29tbWVudAorICBvdXQgdW50aWwgc29tZWJvZHkgYWRkcyBkb2NzLiAgS0FPCisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIEdlbmVyaWMgRnVuY3Rpb25zPC90aXRsZT4KK1ghSWRyaXZlcnMvdmlkZW8vZmJnZW4uYworICAgICA8L3NlY3QxPgorS0FPIC0tPgorICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBWaWRlbyBNb2RlIERhdGFiYXNlPC90aXRsZT4KKyFJZHJpdmVycy92aWRlby9tb2RlZGIuYworIUVkcml2ZXJzL3ZpZGVvL21vZGVkYi5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIE1hY2ludG9zaCBWaWRlbyBNb2RlIERhdGFiYXNlPC90aXRsZT4KKyFJZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIEZvbnRzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgIFJlZmVyIHRvIHRoZSBmaWxlIGRyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+Cis8IS0tIEZJWE1FOiBSZW1vdmVkIGZvciBub3cgc2luY2Ugbm8gc3RydWN0dXJlZCBjb21tZW50cyBpbiBzb3VyY2UKK1ghSWRyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCistLT4KKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWhhY2tpbmcudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWE5ZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwKQEAgLTAsMCArMSwxMzQ5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9ImxrLWhhY2tpbmctZ3VpZGUiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlVucmVsaWFibGUgR3VpZGUgVG8gSGFja2luZyBUaGUgTGludXggS2VybmVsPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5QYXVsPC9maXJzdG5hbWU+CisgICAgPG90aGVybmFtZT5SdXN0eTwvb3RoZXJuYW1lPgorICAgIDxzdXJuYW1lPlJ1c3NlbGw8L3N1cm5hbWU+CisgICAgPGFmZmlsaWF0aW9uPgorICAgICA8YWRkcmVzcz4KKyAgICAgIDxlbWFpbD5ydXN0eUBydXN0Y29ycC5jb20uYXU8L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDAxPC95ZWFyPgorICAgPGhvbGRlcj5SdXN0eSBSdXNzZWxsPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKyAgIAorICAgPHBhcmE+CisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgCisgICA8cGFyYT4KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgCisgICA8cGFyYT4KKyAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisKKyAgPHJlbGVhc2VpbmZvPgorICAgVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZSBvZiB0aGlzIGRvY3VtZW50IGFzIHBhcnQgb2YgdGhlIGtlcm5lbCB0YXJiYWxsLgorICA8L3JlbGVhc2VpbmZvPgorCisgPC9ib29raW5mbz4KKworIDx0b2M+PC90b2M+CisKKyA8Y2hhcHRlciBpZD0iaW50cm9kdWN0aW9uIj4KKyAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgV2VsY29tZSwgZ2VudGxlIHJlYWRlciwgdG8gUnVzdHkncyBVbnJlbGlhYmxlIEd1aWRlIHRvIExpbnV4CisgICBLZXJuZWwgSGFja2luZy4gIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjb21tb24gcm91dGluZXMgYW5kCisgICBnZW5lcmFsIHJlcXVpcmVtZW50cyBmb3Iga2VybmVsIGNvZGU6IGl0cyBnb2FsIGlzIHRvIHNlcnZlIGFzIGEKKyAgIHByaW1lciBmb3IgTGludXgga2VybmVsIGRldmVsb3BtZW50IGZvciBleHBlcmllbmNlZCBDCisgICBwcm9ncmFtbWVycy4gIEkgYXZvaWQgaW1wbGVtZW50YXRpb24gZGV0YWlsczogdGhhdCdzIHdoYXQgdGhlCisgICBjb2RlIGlzIGZvciwgYW5kIEkgaWdub3JlIHdob2xlIHRyYWN0cyBvZiB1c2VmdWwgcm91dGluZXMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICBCZWZvcmUgeW91IHJlYWQgdGhpcywgcGxlYXNlIHVuZGVyc3RhbmQgdGhhdCBJIG5ldmVyIHdhbnRlZCB0bworICAgd3JpdGUgdGhpcyBkb2N1bWVudCwgYmVpbmcgZ3Jvc3NseSB1bmRlci1xdWFsaWZpZWQsIGJ1dCBJIGFsd2F5cworICAgd2FudGVkIHRvIHJlYWQgaXQsIGFuZCB0aGlzIHdhcyB0aGUgb25seSB3YXkuICBJIGhvcGUgaXQgd2lsbAorICAgZ3JvdyBpbnRvIGEgY29tcGVuZGl1bSBvZiBiZXN0IHByYWN0aWNlLCBjb21tb24gc3RhcnRpbmcgcG9pbnRzCisgICBhbmQgcmFuZG9tIGluZm9ybWF0aW9uLgorICA8L3BhcmE+CisgPC9jaGFwdGVyPgorCisgPGNoYXB0ZXIgaWQ9ImJhc2ljLXBsYXllcnMiPgorICA8dGl0bGU+VGhlIFBsYXllcnM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQXQgYW55IHRpbWUgZWFjaCBvZiB0aGUgQ1BVcyBpbiBhIHN5c3RlbSBjYW4gYmU6CisgIDwvcGFyYT4KKworICA8aXRlbWl6ZWRsaXN0PgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwcm9jZXNzLCBzZXJ2aW5nIGEgaGFyZHdhcmUgaW50ZXJydXB0OworICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgcHJvY2Vzcywgc2VydmluZyBhIHNvZnRpcnEsIHRhc2tsZXQgb3IgYmg7CisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBydW5uaW5nIGluIGtlcm5lbCBzcGFjZSwgYXNzb2NpYXRlZCB3aXRoIGEgcHJvY2VzczsKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIHJ1bm5pbmcgYSBwcm9jZXNzIGluIHVzZXIgc3BhY2UuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgPC9pdGVtaXplZGxpc3Q+CisKKyAgPHBhcmE+CisgICBUaGVyZSBpcyBhIHN0cmljdCBvcmRlcmluZyBiZXR3ZWVuIHRoZXNlOiBvdGhlciB0aGFuIHRoZSBsYXN0CisgICBjYXRlZ29yeSAodXNlcnNwYWNlKSBlYWNoIGNhbiBvbmx5IGJlIHByZS1lbXB0ZWQgYnkgdGhvc2UgYWJvdmUuCisgICBGb3IgZXhhbXBsZSwgd2hpbGUgYSBzb2Z0aXJxIGlzIHJ1bm5pbmcgb24gYSBDUFUsIG5vIG90aGVyCisgICBzb2Z0aXJxIHdpbGwgcHJlLWVtcHQgaXQsIGJ1dCBhIGhhcmR3YXJlIGludGVycnVwdCBjYW4uICBIb3dldmVyLAorICAgYW55IG90aGVyIENQVXMgaW4gdGhlIHN5c3RlbSBleGVjdXRlIGluZGVwZW5kZW50bHkuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdlJ2xsIHNlZSBhIG51bWJlciBvZiB3YXlzIHRoYXQgdGhlIHVzZXIgY29udGV4dCBjYW4gYmxvY2sKKyAgIGludGVycnVwdHMsIHRvIGJlY29tZSB0cnVseSBub24tcHJlZW1wdGFibGUuCisgIDwvcGFyYT4KKyAgCisgIDxzZWN0MSBpZD0iYmFzaWNzLXVzZXJjb250ZXh0Ij4KKyAgIDx0aXRsZT5Vc2VyIENvbnRleHQ8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBVc2VyIGNvbnRleHQgaXMgd2hlbiB5b3UgYXJlIGNvbWluZyBpbiBmcm9tIGEgc3lzdGVtIGNhbGwgb3IKKyAgICBvdGhlciB0cmFwOiB5b3UgY2FuIHNsZWVwLCBhbmQgeW91IG93biB0aGUgQ1BVIChleGNlcHQgZm9yCisgICAgaW50ZXJydXB0cykgdW50aWwgeW91IGNhbGwgPGZ1bmN0aW9uPnNjaGVkdWxlKCk8L2Z1bmN0aW9uPi4gIAorICAgIEluIG90aGVyIHdvcmRzLCB1c2VyIGNvbnRleHQgKHVubGlrZSB1c2Vyc3BhY2UpIGlzIG5vdCBwcmUtZW1wdGFibGUuCisgICA8L3BhcmE+CisKKyAgIDxub3RlPgorICAgIDxwYXJhPgorICAgICBZb3UgYXJlIGFsd2F5cyBpbiB1c2VyIGNvbnRleHQgb24gbW9kdWxlIGxvYWQgYW5kIHVubG9hZCwKKyAgICAgYW5kIG9uIG9wZXJhdGlvbnMgb24gdGhlIGJsb2NrIGRldmljZSBsYXllci4KKyAgICA8L3BhcmE+CisgICA8L25vdGU+CisKKyAgIDxwYXJhPgorICAgIEluIHVzZXIgY29udGV4dCwgdGhlIDx2YXJuYW1lPmN1cnJlbnQ8L3Zhcm5hbWU+IHBvaW50ZXIgKGluZGljYXRpbmcgCisgICAgdGhlIHRhc2sgd2UgYXJlIGN1cnJlbnRseSBleGVjdXRpbmcpIGlzIHZhbGlkLCBhbmQKKyAgICA8ZnVuY3Rpb24+aW5faW50ZXJydXB0KCk8L2Z1bmN0aW9uPgorICAgICg8ZmlsZW5hbWU+aW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDwvZmlsZW5hbWU+KSBpcyA8cmV0dXJudmFsdWU+ZmFsc2UKKyAgICA8L3JldHVybnZhbHVlPi4gIAorICAgPC9wYXJhPgorCisgICA8Y2F1dGlvbj4KKyAgICA8cGFyYT4KKyAgICAgQmV3YXJlIHRoYXQgaWYgeW91IGhhdmUgaW50ZXJydXB0cyBvciBib3R0b20gaGFsdmVzIGRpc2FibGVkIAorICAgICAoc2VlIGJlbG93KSwgPGZ1bmN0aW9uPmluX2ludGVycnVwdCgpPC9mdW5jdGlvbj4gd2lsbCByZXR1cm4gYSAKKyAgICAgZmFsc2UgcG9zaXRpdmUuCisgICAgPC9wYXJhPgorICAgPC9jYXV0aW9uPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iYmFzaWNzLWhhcmRpcnFzIj4KKyAgIDx0aXRsZT5IYXJkd2FyZSBJbnRlcnJ1cHRzIChIYXJkIElSUXMpPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgVGltZXIgdGlja3MsIDxoYXJkd2FyZT5uZXR3b3JrIGNhcmRzPC9oYXJkd2FyZT4gYW5kIAorICAgIDxoYXJkd2FyZT5rZXlib2FyZDwvaGFyZHdhcmU+IGFyZSBleGFtcGxlcyBvZiByZWFsCisgICAgaGFyZHdhcmUgd2hpY2ggcHJvZHVjZSBpbnRlcnJ1cHRzIGF0IGFueSB0aW1lLiAgVGhlIGtlcm5lbCBydW5zCisgICAgaW50ZXJydXB0IGhhbmRsZXJzLCB3aGljaCBzZXJ2aWNlcyB0aGUgaGFyZHdhcmUuICBUaGUga2VybmVsCisgICAgZ3VhcmFudGVlcyB0aGF0IHRoaXMgaGFuZGxlciBpcyBuZXZlciByZS1lbnRlcmVkOiBpZiBhbm90aGVyCisgICAgaW50ZXJydXB0IGFycml2ZXMsIGl0IGlzIHF1ZXVlZCAob3IgZHJvcHBlZCkuICBCZWNhdXNlIGl0CisgICAgZGlzYWJsZXMgaW50ZXJydXB0cywgdGhpcyBoYW5kbGVyIGhhcyB0byBiZSBmYXN0OiBmcmVxdWVudGx5IGl0CisgICAgc2ltcGx5IGFja25vd2xlZGdlcyB0aGUgaW50ZXJydXB0LCBtYXJrcyBhIGBzb2Z0d2FyZSBpbnRlcnJ1cHQnCisgICAgZm9yIGV4ZWN1dGlvbiBhbmQgZXhpdHMuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFlvdSBjYW4gdGVsbCB5b3UgYXJlIGluIGEgaGFyZHdhcmUgaW50ZXJydXB0LCBiZWNhdXNlIAorICAgIDxmdW5jdGlvbj5pbl9pcnEoKTwvZnVuY3Rpb24+IHJldHVybnMgPHJldHVybnZhbHVlPnRydWU8L3JldHVybnZhbHVlPi4gIAorICAgPC9wYXJhPgorICAgPGNhdXRpb24+CisgICAgPHBhcmE+CisgICAgIEJld2FyZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZSBpZiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAKKyAgICAgKHNlZSBiZWxvdykuCisgICAgPC9wYXJhPgorICAgPC9jYXV0aW9uPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iYmFzaWNzLXNvZnRpcnFzIj4KKyAgIDx0aXRsZT5Tb2Z0d2FyZSBJbnRlcnJ1cHQgQ29udGV4dDogQm90dG9tIEhhbHZlcywgVGFza2xldHMsIHNvZnRpcnFzPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgV2hlbmV2ZXIgYSBzeXN0ZW0gY2FsbCBpcyBhYm91dCB0byByZXR1cm4gdG8gdXNlcnNwYWNlLCBvciBhCisgICAgaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIgZXhpdHMsIGFueSBgc29mdHdhcmUgaW50ZXJydXB0cycKKyAgICB3aGljaCBhcmUgbWFya2VkIHBlbmRpbmcgKHVzdWFsbHkgYnkgaGFyZHdhcmUgaW50ZXJydXB0cykgYXJlCisgICAgcnVuICg8ZmlsZW5hbWU+a2VybmVsL3NvZnRpcnEuYzwvZmlsZW5hbWU+KS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgTXVjaCBvZiB0aGUgcmVhbCBpbnRlcnJ1cHQgaGFuZGxpbmcgd29yayBpcyBkb25lIGhlcmUuICBFYXJseSBpbgorICAgIHRoZSB0cmFuc2l0aW9uIHRvIDxhY3JvbnltPlNNUDwvYWNyb255bT4sIHRoZXJlIHdlcmUgb25seSBgYm90dG9tIAorICAgIGhhbHZlcycgKEJIcyksIHdoaWNoIGRpZG4ndCB0YWtlIGFkdmFudGFnZSBvZiBtdWx0aXBsZSBDUFVzLiAgU2hvcnRseSAKKyAgICBhZnRlciB3ZSBzd2l0Y2hlZCBmcm9tIHdpbmQtdXAgY29tcHV0ZXJzIG1hZGUgb2YgbWF0Y2gtc3RpY2tzIGFuZCBzbm90LAorICAgIHdlIGFiYW5kb25lZCB0aGlzIGxpbWl0YXRpb24uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDwvZmlsZW5hbWU+IGxpc3RzIHRoZQorICAgIGRpZmZlcmVudCBCSCdzLiAgTm8gbWF0dGVyIGhvdyBtYW55IENQVXMgeW91IGhhdmUsIG5vIHR3byBCSHMgd2lsbCBydW4gYXQgCisgICAgdGhlIHNhbWUgdGltZS4gVGhpcyBtYWRlIHRoZSB0cmFuc2l0aW9uIHRvIFNNUCBzaW1wbGVyLCBidXQgc3Vja3MgaGFyZCBmb3IKKyAgICBzY2FsYWJsZSBwZXJmb3JtYW5jZS4gIEEgdmVyeSBpbXBvcnRhbnQgYm90dG9tIGhhbGYgaXMgdGhlIHRpbWVyCisgICAgQkggKDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC90aW1lci5oPC9maWxlbmFtZT4pOiB5b3UKKyAgICBjYW4gcmVnaXN0ZXIgdG8gaGF2ZSBpdCBjYWxsIGZ1bmN0aW9ucyBmb3IgeW91IGluIGEgZ2l2ZW4gbGVuZ3RoIG9mIHRpbWUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDIuMy40MyBpbnRyb2R1Y2VkIHNvZnRpcnFzLCBhbmQgcmUtaW1wbGVtZW50ZWQgdGhlIChub3cKKyAgICBkZXByZWNhdGVkKSBCSHMgdW5kZXJuZWF0aCB0aGVtLiAgU29mdGlycXMgYXJlIGZ1bGx5LVNNUAorICAgIHZlcnNpb25zIG9mIEJIczogdGhleSBjYW4gcnVuIG9uIGFzIG1hbnkgQ1BVcyBhdCBvbmNlIGFzCisgICAgcmVxdWlyZWQuICBUaGlzIG1lYW5zIHRoZXkgbmVlZCB0byBkZWFsIHdpdGggYW55IHJhY2VzIGluIHNoYXJlZAorICAgIGRhdGEgdXNpbmcgdGhlaXIgb3duIGxvY2tzLiAgQSBiaXRtYXNrIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZgorICAgIHdoaWNoIGFyZSBlbmFibGVkLCBzbyB0aGUgMzIgYXZhaWxhYmxlIHNvZnRpcnFzIHNob3VsZCBub3QgYmUKKyAgICB1c2VkIHVwIGxpZ2h0bHkuICAoPGVtcGhhc2lzPlllczwvZW1waGFzaXM+LCBwZW9wbGUgd2lsbAorICAgIG5vdGljZSkuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIHRhc2tsZXRzICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg8L2ZpbGVuYW1lPikKKyAgICBhcmUgbGlrZSBzb2Z0aXJxcywgZXhjZXB0IHRoZXkgYXJlIGR5bmFtaWNhbGx5LXJlZ2lzdHJhYmxlIChtZWFuaW5nIHlvdSAKKyAgICBjYW4gaGF2ZSBhcyBtYW55IGFzIHlvdSB3YW50KSwgYW5kIHRoZXkgYWxzbyBndWFyYW50ZWUgdGhhdCBhbnkgdGFza2xldCAKKyAgICB3aWxsIG9ubHkgcnVuIG9uIG9uZSBDUFUgYXQgYW55IHRpbWUsIGFsdGhvdWdoIGRpZmZlcmVudCB0YXNrbGV0cyBjYW4gCisgICAgcnVuIHNpbXVsdGFuZW91c2x5ICh1bmxpa2UgZGlmZmVyZW50IEJIcykuICAKKyAgIDwvcGFyYT4KKyAgIDxjYXV0aW9uPgorICAgIDxwYXJhPgorICAgICBUaGUgbmFtZSBgdGFza2xldCcgaXMgbWlzbGVhZGluZzogdGhleSBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBgdGFza3MnLCAKKyAgICAgYW5kIHByb2JhYmx5IG1vcmUgdG8gZG8gd2l0aCBzb21lIGJhZCB2b2RrYSBBbGV4ZXkgS3V6bmV0c292IGhhZCBhdCB0aGUgCisgICAgIHRpbWUuCisgICAgPC9wYXJhPgorICAgPC9jYXV0aW9uPgorCisgICA8cGFyYT4KKyAgICBZb3UgY2FuIHRlbGwgeW91IGFyZSBpbiBhIHNvZnRpcnEgKG9yIGJvdHRvbSBoYWxmLCBvciB0YXNrbGV0KQorICAgIHVzaW5nIHRoZSA8ZnVuY3Rpb24+aW5fc29mdGlycSgpPC9mdW5jdGlvbj4gbWFjcm8gCisgICAgKDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDwvZmlsZW5hbWU+KS4KKyAgIDwvcGFyYT4KKyAgIDxjYXV0aW9uPgorICAgIDxwYXJhPgorICAgICBCZXdhcmUgdGhhdCB0aGlzIHdpbGwgcmV0dXJuIGEgZmFsc2UgcG9zaXRpdmUgaWYgYSBiaCBsb2NrIChzZWUgYmVsb3cpCisgICAgIGlzIGhlbGQuCisgICAgPC9wYXJhPgorICAgPC9jYXV0aW9uPgorICA8L3NlY3QxPgorIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJiYXNpYy1ydWxlcyI+CisgIDx0aXRsZT5Tb21lIEJhc2ljIFJ1bGVzPC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5ObyBtZW1vcnkgcHJvdGVjdGlvbjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgSWYgeW91IGNvcnJ1cHQgbWVtb3J5LCB3aGV0aGVyIGluIHVzZXIgY29udGV4dCBvcgorICAgICAgaW50ZXJydXB0IGNvbnRleHQsIHRoZSB3aG9sZSBtYWNoaW5lIHdpbGwgY3Jhc2guICBBcmUgeW91CisgICAgICBzdXJlIHlvdSBjYW4ndCBkbyB3aGF0IHlvdSB3YW50IGluIHVzZXJzcGFjZT8KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5ObyBmbG9hdGluZyBwb2ludCBvciA8YWNyb255bT5NTVg8L2Fjcm9ueW0+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUgPGFjcm9ueW0+RlBVPC9hY3JvbnltPiBjb250ZXh0IGlzIG5vdCBzYXZlZDsgZXZlbiBpbiB1c2VyCisgICAgICBjb250ZXh0IHRoZSA8YWNyb255bT5GUFU8L2Fjcm9ueW0+IHN0YXRlIHByb2JhYmx5IHdvbid0CisgICAgICBjb3JyZXNwb25kIHdpdGggdGhlIGN1cnJlbnQgcHJvY2VzczogeW91IHdvdWxkIG1lc3Mgd2l0aCBzb21lCisgICAgICB1c2VyIHByb2Nlc3MnIDxhY3JvbnltPkZQVTwvYWNyb255bT4gc3RhdGUuICBJZiB5b3UgcmVhbGx5IHdhbnQKKyAgICAgIHRvIGRvIHRoaXMsIHlvdSB3b3VsZCBoYXZlIHRvIGV4cGxpY2l0bHkgc2F2ZS9yZXN0b3JlIHRoZSBmdWxsCisgICAgICA8YWNyb255bT5GUFU8L2Fjcm9ueW0+IHN0YXRlIChhbmQgYXZvaWQgY29udGV4dCBzd2l0Y2hlcykuICBJdAorICAgICAgaXMgZ2VuZXJhbGx5IGEgYmFkIGlkZWE7IHVzZSBmaXhlZCBwb2ludCBhcml0aG1ldGljIGZpcnN0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPkEgcmlnaWQgc3RhY2sgbGltaXQ8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBrZXJuZWwgc3RhY2sgaXMgYWJvdXQgNksgaW4gMi4yIChmb3IgbW9zdAorICAgICAgYXJjaGl0ZWN0dXJlczogaXQncyBhYm91dCAxNEsgb24gdGhlIEFscGhhKSwgYW5kIHNoYXJlZAorICAgICAgd2l0aCBpbnRlcnJ1cHRzIHNvIHlvdSBjYW4ndCB1c2UgaXQgYWxsLiAgQXZvaWQgZGVlcAorICAgICAgcmVjdXJzaW9uIGFuZCBodWdlIGxvY2FsIGFycmF5cyBvbiB0aGUgc3RhY2sgKGFsbG9jYXRlCisgICAgICB0aGVtIGR5bmFtaWNhbGx5IGluc3RlYWQpLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPlRoZSBMaW51eCBrZXJuZWwgaXMgcG9ydGFibGU8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIExldCdzIGtlZXAgaXQgdGhhdCB3YXkuICBZb3VyIGNvZGUgc2hvdWxkIGJlIDY0LWJpdCBjbGVhbiwKKyAgICAgIGFuZCBlbmRpYW4taW5kZXBlbmRlbnQuICBZb3Ugc2hvdWxkIGFsc28gbWluaW1pemUgQ1BVCisgICAgICBzcGVjaWZpYyBzdHVmZiwgZS5nLiBpbmxpbmUgYXNzZW1ibHkgc2hvdWxkIGJlIGNsZWFubHkKKyAgICAgIGVuY2Fwc3VsYXRlZCBhbmQgbWluaW1pemVkIHRvIGVhc2UgcG9ydGluZy4gIEdlbmVyYWxseSBpdAorICAgICAgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydCBvZgorICAgICAgdGhlIGtlcm5lbCB0cmVlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0iaW9jdGxzIj4KKyAgPHRpdGxlPmlvY3RsczogTm90IHdyaXRpbmcgYSBuZXcgc3lzdGVtIGNhbGw8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQSBzeXN0ZW0gY2FsbCBnZW5lcmFsbHkgbG9va3MgbGlrZSB0aGlzCisgIDwvcGFyYT4KKworICA8cHJvZ3JhbWxpc3Rpbmc+Cithc21saW5rYWdlIGxvbmcgc3lzX215Y2FsbChpbnQgYXJnKQoreworICAgICAgICByZXR1cm4gMDsgCit9CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBGaXJzdCwgaW4gbW9zdCBjYXNlcyB5b3UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBuZXcgc3lzdGVtIGNhbGwuCisgICBZb3UgY3JlYXRlIGEgY2hhcmFjdGVyIGRldmljZSBhbmQgaW1wbGVtZW50IGFuIGFwcHJvcHJpYXRlIGlvY3RsCisgICBmb3IgaXQuICBUaGlzIGlzIG11Y2ggbW9yZSBmbGV4aWJsZSB0aGFuIHN5c3RlbSBjYWxscywgZG9lc24ndCBoYXZlCisgICB0byBiZSBlbnRlcmVkIGluIGV2ZXJ5IGFyY2hpdGVjdHVyZSdzCisgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3VuaXN0ZC5oPC9maWxlbmFtZT4gYW5kCisgICA8ZmlsZW5hbWU+YXJjaC9rZXJuZWwvZW50cnkuUzwvZmlsZW5hbWU+IGZpbGUsIGFuZCBpcyBtdWNoIG1vcmUKKyAgIGxpa2VseSB0byBiZSBhY2NlcHRlZCBieSBMaW51cy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSWYgYWxsIHlvdXIgcm91dGluZSBkb2VzIGlzIHJlYWQgb3Igd3JpdGUgc29tZSBwYXJhbWV0ZXIsIGNvbnNpZGVyCisgICBpbXBsZW1lbnRpbmcgYSA8ZnVuY3Rpb24+c3lzY3RsPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGluc3RlYWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEluc2lkZSB0aGUgaW9jdGwgeW91J3JlIGluIHVzZXIgY29udGV4dCB0byBhIHByb2Nlc3MuICBXaGVuIGEKKyAgIGVycm9yIG9jY3VycyB5b3UgcmV0dXJuIGEgbmVnYXRlZCBlcnJubyAoc2VlCisgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvZXJybm8uaDwvZmlsZW5hbWU+KSwKKyAgIG90aGVyd2lzZSB5b3UgcmV0dXJuIDxyZXR1cm52YWx1ZT4wPC9yZXR1cm52YWx1ZT4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEFmdGVyIHlvdSBzbGVwdCB5b3Ugc2hvdWxkIGNoZWNrIGlmIGEgc2lnbmFsIG9jY3VycmVkOiB0aGUKKyAgIFVuaXgvTGludXggd2F5IG9mIGhhbmRsaW5nIHNpZ25hbHMgaXMgdG8gdGVtcG9yYXJpbHkgZXhpdCB0aGUKKyAgIHN5c3RlbSBjYWxsIHdpdGggdGhlIDxjb25zdGFudD4tRVJFU1RBUlRTWVM8L2NvbnN0YW50PiBlcnJvci4gIFRoZQorICAgc3lzdGVtIGNhbGwgZW50cnkgY29kZSB3aWxsIHN3aXRjaCBiYWNrIHRvIHVzZXIgY29udGV4dCwgcHJvY2VzcworICAgdGhlIHNpZ25hbCBoYW5kbGVyIGFuZCB0aGVuIHlvdXIgc3lzdGVtIGNhbGwgd2lsbCBiZSByZXN0YXJ0ZWQKKyAgICh1bmxlc3MgdGhlIHVzZXIgZGlzYWJsZWQgdGhhdCkuICBTbyB5b3Ugc2hvdWxkIGJlIHByZXBhcmVkIHRvCisgICBwcm9jZXNzIHRoZSByZXN0YXJ0LCBlLmcuIGlmIHlvdSdyZSBpbiB0aGUgbWlkZGxlIG9mIG1hbmlwdWxhdGluZworICAgc29tZSBkYXRhIHN0cnVjdHVyZS4KKyAgPC9wYXJhPgorCisgIDxwcm9ncmFtbGlzdGluZz4KK2lmIChzaWduYWxfcGVuZGluZygpKSAKKyAgICAgICAgcmV0dXJuIC1FUkVTVEFSVFNZUzsKKyAgPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIElmIHlvdSdyZSBkb2luZyBsb25nZXIgY29tcHV0YXRpb25zOiBmaXJzdCB0aGluayB1c2Vyc3BhY2UuIElmIHlvdQorICAgPGVtcGhhc2lzPnJlYWxseTwvZW1waGFzaXM+IHdhbnQgdG8gZG8gaXQgaW4ga2VybmVsIHlvdSBzaG91bGQKKyAgIHJlZ3VsYXJseSBjaGVjayBpZiB5b3UgbmVlZCB0byBnaXZlIHVwIHRoZSBDUFUgKHJlbWVtYmVyIHRoZXJlIGlzCisgICBjb29wZXJhdGl2ZSBtdWx0aXRhc2tpbmcgcGVyIENQVSkuICBJZGlvbToKKyAgPC9wYXJhPgorCisgIDxwcm9ncmFtbGlzdGluZz4KK2NvbmRfcmVzY2hlZCgpOyAvKiBXaWxsIHNsZWVwICovIAorICA8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgQSBzaG9ydCBub3RlIG9uIGludGVyZmFjZSBkZXNpZ246IHRoZSBVTklYIHN5c3RlbSBjYWxsIG1vdHRvIGlzCisgICAiUHJvdmlkZSBtZWNoYW5pc20gbm90IHBvbGljeSIuCisgIDwvcGFyYT4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0iZGVhZGxvY2stcmVjaXBlcyI+CisgIDx0aXRsZT5SZWNpcGVzIGZvciBEZWFkbG9jazwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBZb3UgY2Fubm90IGNhbGwgYW55IHJvdXRpbmVzIHdoaWNoIG1heSBzbGVlcCwgdW5sZXNzOgorICA8L3BhcmE+CisgIDxpdGVtaXplZGxpc3Q+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIFlvdSBhcmUgaW4gdXNlciBjb250ZXh0LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgWW91IGRvIG5vdCBvd24gYW55IHNwaW5sb2Nrcy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIFlvdSBoYXZlIGludGVycnVwdHMgZW5hYmxlZCAoYWN0dWFsbHksIEFuZGkgS2xlZW4gc2F5cworICAgICB0aGF0IHRoZSBzY2hlZHVsaW5nIGNvZGUgd2lsbCBlbmFibGUgdGhlbSBmb3IgeW91LCBidXQKKyAgICAgdGhhdCdzIHByb2JhYmx5IG5vdCB3aGF0IHlvdSB3YW50ZWQpLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorCisgIDxwYXJhPgorICAgTm90ZSB0aGF0IHNvbWUgZnVuY3Rpb25zIG1heSBzbGVlcCBpbXBsaWNpdGx5OiBjb21tb24gb25lcyBhcmUKKyAgIHRoZSB1c2VyIHNwYWNlIGFjY2VzcyBmdW5jdGlvbnMgKCpfdXNlcikgYW5kIG1lbW9yeSBhbGxvY2F0aW9uCisgICBmdW5jdGlvbnMgd2l0aG91dCA8c3ltYm9sPkdGUF9BVE9NSUM8L3N5bWJvbD4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFlvdSB3aWxsIGV2ZW50dWFsbHkgbG9jayB1cCB5b3VyIGJveCBpZiB5b3UgYnJlYWsgdGhlc2UgcnVsZXMuICAKKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgUmVhbGx5LgorICA8L3BhcmE+CisgPC9jaGFwdGVyPgorCisgPGNoYXB0ZXIgaWQ9ImNvbW1vbi1yb3V0aW5lcyI+CisgIDx0aXRsZT5Db21tb24gUm91dGluZXM8L3RpdGxlPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMtcHJpbnRrIj4KKyAgIDx0aXRsZT4KKyAgICA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9rZXJuZWwuaDwvZmlsZW5hbWU+CisgICA8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPiBmZWVkcyBrZXJuZWwgbWVzc2FnZXMgdG8gdGhlCisgICAgY29uc29sZSwgZG1lc2csIGFuZCB0aGUgc3lzbG9nIGRhZW1vbi4gIEl0IGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisgICAgYW5kIHJlcG9ydGluZyBlcnJvcnMsIGFuZCBjYW4gYmUgdXNlZCBpbnNpZGUgaW50ZXJydXB0IGNvbnRleHQsCisgICAgYnV0IHVzZSB3aXRoIGNhdXRpb246IGEgbWFjaGluZSB3aGljaCBoYXMgaXRzIGNvbnNvbGUgZmxvb2RlZCB3aXRoCisgICAgcHJpbnRrIG1lc3NhZ2VzIGlzIHVudXNhYmxlLiAgSXQgdXNlcyBhIGZvcm1hdCBzdHJpbmcgbW9zdGx5CisgICAgY29tcGF0aWJsZSB3aXRoIEFOU0kgQyBwcmludGYsIGFuZCBDIHN0cmluZyBjb25jYXRlbmF0aW9uIHRvIGdpdmUKKyAgICBpdCBhIGZpcnN0ICJwcmlvcml0eSIgYXJndW1lbnQ6CisgICA8L3BhcmE+CisKKyAgIDxwcm9ncmFtbGlzdGluZz4KK3ByaW50ayhLRVJOX0lORk8gImkgPSAldVxuIiwgaSk7CisgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICA8cGFyYT4KKyAgICBTZWUgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oPC9maWxlbmFtZT47CisgICAgZm9yIG90aGVyIEtFUk5fIHZhbHVlczsgdGhlc2UgYXJlIGludGVycHJldGVkIGJ5IHN5c2xvZyBhcyB0aGUKKyAgICBsZXZlbC4gIFNwZWNpYWwgY2FzZTogZm9yIHByaW50aW5nIGFuIElQIGFkZHJlc3MgdXNlCisgICA8L3BhcmE+CisKKyAgIDxwcm9ncmFtbGlzdGluZz4KK19fdTMyIGlwYWRkcmVzczsKK3ByaW50ayhLRVJOX0lORk8gIm15IGlwOiAlZC4lZC4lZC4lZFxuIiwgTklQUVVBRChpcGFkZHJlc3MpKTsKKyAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgIDxwYXJhPgorICAgIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+IGludGVybmFsbHkgdXNlcyBhIDFLIGJ1ZmZlciBhbmQgZG9lcworICAgIG5vdCBjYXRjaCBvdmVycnVucy4gIE1ha2Ugc3VyZSB0aGF0IHdpbGwgYmUgZW5vdWdoLgorICAgPC9wYXJhPgorCisgICA8bm90ZT4KKyAgICA8cGFyYT4KKyAgICAgWW91IHdpbGwga25vdyB3aGVuIHlvdSBhcmUgYSByZWFsIGtlcm5lbCBoYWNrZXIKKyAgICAgd2hlbiB5b3Ugc3RhcnQgdHlwb2luZyBwcmludGYgYXMgcHJpbnRrIGluIHlvdXIgdXNlciBwcm9ncmFtcyA6KQorICAgIDwvcGFyYT4KKyAgIDwvbm90ZT4KKworICAgPCEtLS0gRnJvbSB0aGUgTGlvbnMgYm9vayByZWFkZXIgZGVwYXJ0bWVudCAtLT4gCisKKyAgIDxub3RlPgorICAgIDxwYXJhPgorICAgICBBbm90aGVyIHNpZGVub3RlOiB0aGUgb3JpZ2luYWwgVW5peCBWZXJzaW9uIDYgc291cmNlcyBoYWQgYQorICAgICBjb21tZW50IG9uIHRvcCBvZiBpdHMgcHJpbnRmIGZ1bmN0aW9uOiAiUHJpbnRmIHNob3VsZCBub3QgYmUKKyAgICAgdXNlZCBmb3IgY2hpdC1jaGF0Ii4gIFlvdSBzaG91bGQgZm9sbG93IHRoYXQgYWR2aWNlLgorICAgIDwvcGFyYT4KKyAgIDwvbm90ZT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InJvdXRpbmVzLWNvcHkiPgorICAgPHRpdGxlPgorICAgIDxmdW5jdGlvbj5jb3B5X1t0by9mcm9tXV91c2VyKCk8L2Z1bmN0aW9uPgorICAgIC8KKyAgICA8ZnVuY3Rpb24+Z2V0X3VzZXIoKTwvZnVuY3Rpb24+CisgICAgLworICAgIDxmdW5jdGlvbj5wdXRfdXNlcigpPC9mdW5jdGlvbj4KKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3VhY2Nlc3MuaDwvZmlsZW5hbWU+CisgICA8L3RpdGxlPiAgCisKKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5bU0xFRVBTXTwvZW1waGFzaXM+CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxmdW5jdGlvbj5wdXRfdXNlcigpPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5nZXRfdXNlcigpPC9mdW5jdGlvbj4KKyAgICBhcmUgdXNlZCB0byBnZXQgYW5kIHB1dCBzaW5nbGUgdmFsdWVzIChzdWNoIGFzIGFuIGludCwgY2hhciwgb3IKKyAgICBsb25nKSBmcm9tIGFuZCB0byB1c2Vyc3BhY2UuICBBIHBvaW50ZXIgaW50byB1c2Vyc3BhY2Ugc2hvdWxkCisgICAgbmV2ZXIgYmUgc2ltcGx5IGRlcmVmZXJlbmNlZDogZGF0YSBzaG91bGQgYmUgY29waWVkIHVzaW5nIHRoZXNlCisgICAgcm91dGluZXMuICBCb3RoIHJldHVybiA8Y29uc3RhbnQ+LUVGQVVMVDwvY29uc3RhbnQ+IG9yIDAuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICA8ZnVuY3Rpb24+Y29weV90b191c2VyKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICA8ZnVuY3Rpb24+Y29weV9mcm9tX3VzZXIoKTwvZnVuY3Rpb24+IGFyZSBtb3JlIGdlbmVyYWw6IHRoZXkgY29weQorICAgIGFuIGFyYml0cmFyeSBhbW91bnQgb2YgZGF0YSB0byBhbmQgZnJvbSB1c2Vyc3BhY2UuCisgICAgPGNhdXRpb24+CisgICAgIDxwYXJhPgorICAgICAgVW5saWtlIDxmdW5jdGlvbj5wdXRfdXNlcigpPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+Z2V0X3VzZXIoKTwvZnVuY3Rpb24+LCB0aGV5IHJldHVybiB0aGUgYW1vdW50IG9mCisgICAgICB1bmNvcGllZCBkYXRhIChpZS4gPHJldHVybnZhbHVlPjA8L3JldHVybnZhbHVlPiBzdGlsbCBtZWFucworICAgICAgc3VjY2VzcykuCisgICAgIDwvcGFyYT4KKyAgICA8L2NhdXRpb24+CisgICAgW1llcywgdGhpcyBtb3JvbmljIGludGVyZmFjZSBtYWtlcyBtZSBjcmluZ2UuICBQbGVhc2Ugc3VibWl0IGEKKyAgICBwYXRjaCBhbmQgYmVjb21lIG15IGhlcm8gLS1SUi5dCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBUaGUgZnVuY3Rpb25zIG1heSBzbGVlcCBpbXBsaWNpdGx5LiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKKyAgICBvdXRzaWRlIHVzZXIgY29udGV4dCAoaXQgbWFrZXMgbm8gc2Vuc2UpLCB3aXRoIGludGVycnVwdHMKKyAgICBkaXNhYmxlZCwgb3IgYSBzcGlubG9jayBoZWxkLgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMta21hbGxvYyI+CisgICA8dGl0bGU+PGZ1bmN0aW9uPmttYWxsb2MoKTwvZnVuY3Rpb24+LzxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4KKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvc2xhYi5oPC9maWxlbmFtZT48L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICA8ZW1waGFzaXM+W01BWSBTTEVFUDogU0VFIEJFTE9XXTwvZW1waGFzaXM+CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGR5bmFtaWNhbGx5IHJlcXVlc3QgcG9pbnRlci1hbGlnbmVkCisgICAgY2h1bmtzIG9mIG1lbW9yeSwgbGlrZSBtYWxsb2MgYW5kIGZyZWUgZG8gaW4gdXNlcnNwYWNlLCBidXQKKyAgICA8ZnVuY3Rpb24+a21hbGxvYygpPC9mdW5jdGlvbj4gdGFrZXMgYW4gZXh0cmEgZmxhZyB3b3JkLgorICAgIEltcG9ydGFudCB2YWx1ZXM6CisgICA8L3BhcmE+CisKKyAgIDx2YXJpYWJsZWxpc3Q+CisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+CisgICAgICA8Y29uc3RhbnQ+CisgICAgICAgR0ZQX0tFUk5FTAorICAgICAgPC9jb25zdGFudD4KKyAgICAgPC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBNYXkgc2xlZXAgYW5kIHN3YXAgdG8gZnJlZSBtZW1vcnkuIE9ubHkgYWxsb3dlZCBpbiB1c2VyCisgICAgICAgY29udGV4dCwgYnV0IGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhbGxvY2F0ZSBtZW1vcnkuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgICAgCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+CisgICAgICA8Y29uc3RhbnQ+CisgICAgICAgR0ZQX0FUT01JQworICAgICAgPC9jb25zdGFudD4KKyAgICAgPC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBEb24ndCBzbGVlcC4gTGVzcyByZWxpYWJsZSB0aGFuIDxjb25zdGFudD5HRlBfS0VSTkVMPC9jb25zdGFudD4sCisgICAgICAgYnV0IG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gWW91IHNob3VsZAorICAgICAgIDxlbXBoYXNpcz5yZWFsbHk8L2VtcGhhc2lzPiBoYXZlIGEgZ29vZCBvdXQtb2YtbWVtb3J5CisgICAgICAgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ3kuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgICAgCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+CisgICAgICA8Y29uc3RhbnQ+CisgICAgICAgR0ZQX0RNQQorICAgICAgPC9jb25zdGFudD4KKyAgICAgPC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBBbGxvY2F0ZSBJU0EgRE1BIGxvd2VyIHRoYW4gMTZNQi4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGF0CisgICAgICAgaXMgeW91IGRvbid0IG5lZWQgaXQuICBWZXJ5IHVucmVsaWFibGUuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgICA8L3ZhcmlhYmxlbGlzdD4KKworICAgPHBhcmE+CisgICAgSWYgeW91IHNlZSBhIDxlcnJvcm5hbWU+a21lbV9ncm93OiBDYWxsZWQgbm9uYXRvbWljYWxseSBmcm9tIGludAorICAgIDwvZXJyb3JuYW1lPiB3YXJuaW5nIG1lc3NhZ2UgeW91IGNhbGxlZCBhIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uCisgICAgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCB3aXRob3V0IDxjb25zdGFudD5HRlBfQVRPTUlDPC9jb25zdGFudD4uCisgICAgWW91IHNob3VsZCByZWFsbHkgZml4IHRoYXQuICBSdW4sIGRvbid0IHdhbGsuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIElmIHlvdSBhcmUgYWxsb2NhdGluZyBhdCBsZWFzdCA8Y29uc3RhbnQ+UEFHRV9TSVpFPC9jb25zdGFudD4KKyAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2FzbS9wYWdlLmg8L2ZpbGVuYW1lPikgYnl0ZXMsCisgICAgY29uc2lkZXIgdXNpbmcgPGZ1bmN0aW9uPl9fZ2V0X2ZyZWVfcGFnZXMoKTwvZnVuY3Rpb24+CisKKyAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L21tLmg8L2ZpbGVuYW1lPikuICBJdAorICAgIHRha2VzIGFuIG9yZGVyIGFyZ3VtZW50ICgwIGZvciBwYWdlIHNpemVkLCAxIGZvciBkb3VibGUgcGFnZSwgMgorICAgIGZvciBmb3VyIHBhZ2VzIGV0Yy4pIGFuZCB0aGUgc2FtZSBtZW1vcnkgcHJpb3JpdHkgZmxhZyB3b3JkIGFzCisgICAgYWJvdmUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIElmIHlvdSBhcmUgYWxsb2NhdGluZyBtb3JlIHRoYW4gYSBwYWdlIHdvcnRoIG9mIGJ5dGVzIHlvdSBjYW4gdXNlCisgICAgPGZ1bmN0aW9uPnZtYWxsb2MoKTwvZnVuY3Rpb24+LiAgSXQnbGwgYWxsb2NhdGUgdmlydHVhbCBtZW1vcnkgaW4KKyAgICB0aGUga2VybmVsIG1hcC4gIFRoaXMgYmxvY2sgaXMgbm90IGNvbnRpZ3VvdXMgaW4gcGh5c2ljYWwgbWVtb3J5LAorICAgIGJ1dCB0aGUgPGFjcm9ueW0+TU1VPC9hY3JvbnltPiBtYWtlcyBpdCBsb29rIGxpa2UgaXQgaXMgZm9yIHlvdQorICAgIChzbyBpdCdsbCBvbmx5IGxvb2sgY29udGlndW91cyB0byB0aGUgQ1BVcywgbm90IHRvIGV4dGVybmFsIGRldmljZQorICAgIGRyaXZlcnMpLiAgSWYgeW91IHJlYWxseSBuZWVkIGxhcmdlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkKKyAgICBmb3Igc29tZSB3ZWlyZCBkZXZpY2UsIHlvdSBoYXZlIGEgcHJvYmxlbTogaXQgaXMgcG9vcmx5IHN1cHBvcnRlZAorICAgIGluIExpbnV4IGJlY2F1c2UgYWZ0ZXIgc29tZSB0aW1lIG1lbW9yeSBmcmFnbWVudGF0aW9uIGluIGEgcnVubmluZworICAgIGtlcm5lbCBtYWtlcyBpdCBoYXJkLiAgVGhlIGJlc3Qgd2F5IGlzIHRvIGFsbG9jYXRlIHRoZSBibG9jayBlYXJseQorICAgIGluIHRoZSBib290IHByb2Nlc3MgdmlhIHRoZSA8ZnVuY3Rpb24+YWxsb2NfYm9vdG1lbSgpPC9mdW5jdGlvbj4KKyAgICByb3V0aW5lLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBCZWZvcmUgaW52ZW50aW5nIHlvdXIgb3duIGNhY2hlIG9mIG9mdGVuLXVzZWQgb2JqZWN0cyBjb25zaWRlcgorICAgIHVzaW5nIGEgc2xhYiBjYWNoZSBpbgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9zbGFiLmg8L2ZpbGVuYW1lPgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMtY3VycmVudCI+CisgICA8dGl0bGU+PGZ1bmN0aW9uPmN1cnJlbnQ8L2Z1bmN0aW9uPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vY3VycmVudC5oPC9maWxlbmFtZT48L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGlzIGdsb2JhbCB2YXJpYWJsZSAocmVhbGx5IGEgbWFjcm8pIGNvbnRhaW5zIGEgcG9pbnRlciB0bworICAgIHRoZSBjdXJyZW50IHRhc2sgc3RydWN0dXJlLCBzbyBpcyBvbmx5IHZhbGlkIGluIHVzZXIgY29udGV4dC4KKyAgICBGb3IgZXhhbXBsZSwgd2hlbiBhIHByb2Nlc3MgbWFrZXMgYSBzeXN0ZW0gY2FsbCwgdGhpcyB3aWxsCisgICAgcG9pbnQgdG8gdGhlIHRhc2sgc3RydWN0dXJlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MuICBJdCBpcworICAgIDxlbXBoYXNpcz5ub3QgTlVMTDwvZW1waGFzaXM+IGluIGludGVycnVwdCBjb250ZXh0LgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMtdWRlbGF5Ij4KKyAgIDx0aXRsZT48ZnVuY3Rpb24+dWRlbGF5KCk8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+bWRlbGF5KCk8L2Z1bmN0aW9uPgorICAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL2RlbGF5Lmg8L2ZpbGVuYW1lPgorICAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvZGVsYXkuaDwvZmlsZW5hbWU+CisgICA8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGUgPGZ1bmN0aW9uPnVkZWxheSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yIHNtYWxsIHBhdXNlcy4KKyAgICBEbyBub3QgdXNlIGxhcmdlIHZhbHVlcyB3aXRoIDxmdW5jdGlvbj51ZGVsYXkoKTwvZnVuY3Rpb24+IGFzIHlvdSByaXNrCisgICAgb3ZlcmZsb3cgLSB0aGUgaGVscGVyIGZ1bmN0aW9uIDxmdW5jdGlvbj5tZGVsYXkoKTwvZnVuY3Rpb24+IGlzIHVzZWZ1bAorICAgIGhlcmUsIG9yIGV2ZW4gY29uc2lkZXIgPGZ1bmN0aW9uPnNjaGVkdWxlX3RpbWVvdXQoKTwvZnVuY3Rpb24+LgorICAgPC9wYXJhPiAKKyAgPC9zZWN0MT4KKyAKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy1lbmRpYW4iPgorICAgPHRpdGxlPjxmdW5jdGlvbj5jcHVfdG9fYmUzMigpPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmJlMzJfdG9fY3B1KCk8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+Y3B1X3RvX2xlMzIoKTwvZnVuY3Rpb24+LzxmdW5jdGlvbj5sZTMyX3RvX2NwdSgpPC9mdW5jdGlvbj4KKyAgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaDwvZmlsZW5hbWU+CisgICA8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGUgPGZ1bmN0aW9uPmNwdV90b19iZTMyKCk8L2Z1bmN0aW9uPiBmYW1pbHkgKHdoZXJlIHRoZSAiMzIiIGNhbgorICAgIGJlIHJlcGxhY2VkIGJ5IDY0IG9yIDE2LCBhbmQgdGhlICJiZSIgY2FuIGJlIHJlcGxhY2VkIGJ5ICJsZSIpIGFyZQorICAgIHRoZSBnZW5lcmFsIHdheSB0byBkbyBlbmRpYW4gY29udmVyc2lvbnMgaW4gdGhlIGtlcm5lbDogdGhleQorICAgIHJldHVybiB0aGUgY29udmVydGVkIHZhbHVlLiAgQWxsIHZhcmlhdGlvbnMgc3VwcGx5IHRoZSByZXZlcnNlIGFzCisgICAgd2VsbDogPGZ1bmN0aW9uPmJlMzJfdG9fY3B1KCk8L2Z1bmN0aW9uPiwgZXRjLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGVyZSBhcmUgdHdvIG1ham9yIHZhcmlhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zOiB0aGUgcG9pbnRlcgorICAgIHZhcmlhdGlvbiwgc3VjaCBhcyA8ZnVuY3Rpb24+Y3B1X3RvX2JlMzJwKCk8L2Z1bmN0aW9uPiwgd2hpY2ggdGFrZQorICAgIGEgcG9pbnRlciB0byB0aGUgZ2l2ZW4gdHlwZSwgYW5kIHJldHVybiB0aGUgY29udmVydGVkIHZhbHVlLiAgVGhlCisgICAgb3RoZXIgdmFyaWF0aW9uIGlzIHRoZSAiaW4tc2l0dSIgZmFtaWx5LCBzdWNoIGFzCisgICAgPGZ1bmN0aW9uPmNwdV90b19iZTMycygpPC9mdW5jdGlvbj4sIHdoaWNoIGNvbnZlcnQgdmFsdWUgcmVmZXJyZWQKKyAgICB0byBieSB0aGUgcG9pbnRlciwgYW5kIHJldHVybiB2b2lkLgorICAgPC9wYXJhPiAKKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InJvdXRpbmVzLWxvY2FsLWlycXMiPgorICAgPHRpdGxlPjxmdW5jdGlvbj5sb2NhbF9pcnFfc2F2ZSgpPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmxvY2FsX2lycV9yZXN0b3JlKCk8L2Z1bmN0aW9uPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vc3lzdGVtLmg8L2ZpbGVuYW1lPgorICAgPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgVGhlc2Ugcm91dGluZXMgZGlzYWJsZSBoYXJkIGludGVycnVwdHMgb24gdGhlIGxvY2FsIENQVSwgYW5kCisgICAgcmVzdG9yZSB0aGVtLiAgVGhleSBhcmUgcmVlbnRyYW50OyBzYXZpbmcgdGhlIHByZXZpb3VzIHN0YXRlIGluCisgICAgdGhlaXIgb25lIDx2YXJuYW1lPnVuc2lnbmVkIGxvbmcgZmxhZ3M8L3Zhcm5hbWU+IGFyZ3VtZW50LiAgSWYgeW91CisgICAga25vdyB0aGF0IGludGVycnVwdHMgYXJlIGVuYWJsZWQsIHlvdSBjYW4gc2ltcGx5IHVzZQorICAgIDxmdW5jdGlvbj5sb2NhbF9pcnFfZGlzYWJsZSgpPC9mdW5jdGlvbj4gYW5kCisgICAgPGZ1bmN0aW9uPmxvY2FsX2lycV9lbmFibGUoKTwvZnVuY3Rpb24+LgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMtc29mdGlycXMiPgorICAgPHRpdGxlPjxmdW5jdGlvbj5sb2NhbF9iaF9kaXNhYmxlKCk8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+bG9jYWxfYmhfZW5hYmxlKCk8L2Z1bmN0aW9uPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgPHBhcmE+CisgICAgVGhlc2Ugcm91dGluZXMgZGlzYWJsZSBzb2Z0IGludGVycnVwdHMgb24gdGhlIGxvY2FsIENQVSwgYW5kCisgICAgcmVzdG9yZSB0aGVtLiAgVGhleSBhcmUgcmVlbnRyYW50OyBpZiBzb2Z0IGludGVycnVwdHMgd2VyZQorICAgIGRpc2FibGVkIGJlZm9yZSwgdGhleSB3aWxsIHN0aWxsIGJlIGRpc2FibGVkIGFmdGVyIHRoaXMgcGFpcgorICAgIG9mIGZ1bmN0aW9ucyBoYXMgYmVlbiBjYWxsZWQuICBUaGV5IHByZXZlbnQgc29mdGlycXMsIHRhc2tsZXRzCisgICAgYW5kIGJvdHRvbSBoYWx2ZXMgZnJvbSBydW5uaW5nIG9uIHRoZSBjdXJyZW50IENQVS4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InJvdXRpbmVzLXByb2Nlc3NvcmlkcyI+CisgICA8dGl0bGU+PGZ1bmN0aW9uPnNtcF9wcm9jZXNzb3JfaWQ8L2Z1bmN0aW9uPigpCisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2FzbS9zbXAuaDwvZmlsZW5hbWU+PC90aXRsZT4KKyAgIAorICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPnNtcF9wcm9jZXNzb3JfaWQoKTwvZnVuY3Rpb24+IHJldHVybnMgdGhlIGN1cnJlbnQKKyAgICBwcm9jZXNzb3IgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIDxzeW1ib2w+TlJfQ1BVUzwvc3ltYm9sPiAodGhlCisgICAgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyBzdXBwb3J0ZWQgYnkgTGludXgsIGN1cnJlbnRseSAzMikuICBUaGVzZQorICAgIHZhbHVlcyBhcmUgbm90IG5lY2Vzc2FyaWx5IGNvbnRpbnVvdXMuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy1pbml0Ij4KKyAgIDx0aXRsZT48dHlwZT5fX2luaXQ8L3R5cGU+Lzx0eXBlPl9fZXhpdDwvdHlwZT4vPHR5cGU+X19pbml0ZGF0YTwvdHlwZT4KKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvaW5pdC5oPC9maWxlbmFtZT48L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBBZnRlciBib290LCB0aGUga2VybmVsIGZyZWVzIHVwIGEgc3BlY2lhbCBzZWN0aW9uOyBmdW5jdGlvbnMKKyAgICBtYXJrZWQgd2l0aCA8dHlwZT5fX2luaXQ8L3R5cGU+IGFuZCBkYXRhIHN0cnVjdHVyZXMgbWFya2VkIHdpdGgKKyAgICA8dHlwZT5fX2luaXRkYXRhPC90eXBlPiBhcmUgZHJvcHBlZCBhZnRlciBib290IGlzIGNvbXBsZXRlICh3aXRoaW4KKyAgICBtb2R1bGVzIHRoaXMgZGlyZWN0aXZlIGlzIGN1cnJlbnRseSBpZ25vcmVkKS4gIDx0eXBlPl9fZXhpdDwvdHlwZT4KKyAgICBpcyB1c2VkIHRvIGRlY2xhcmUgYSBmdW5jdGlvbiB3aGljaCBpcyBvbmx5IHJlcXVpcmVkIG9uIGV4aXQ6IHRoZQorICAgIGZ1bmN0aW9uIHdpbGwgYmUgZHJvcHBlZCBpZiB0aGlzIGZpbGUgaXMgbm90IGNvbXBpbGVkIGFzIGEgbW9kdWxlLgorICAgIFNlZSB0aGUgaGVhZGVyIGZpbGUgZm9yIHVzZS4gTm90ZSB0aGF0IGl0IG1ha2VzIG5vIHNlbnNlIGZvciBhIGZ1bmN0aW9uCisgICAgbWFya2VkIHdpdGggPHR5cGU+X19pbml0PC90eXBlPiB0byBiZSBleHBvcnRlZCB0byBtb2R1bGVzIHdpdGggCisgICAgPGZ1bmN0aW9uPkVYUE9SVF9TWU1CT0woKTwvZnVuY3Rpb24+IC0gdGhpcyB3aWxsIGJyZWFrLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICBTdGF0aWMgZGF0YSBzdHJ1Y3R1cmVzIG1hcmtlZCBhcyA8dHlwZT5fX2luaXRkYXRhPC90eXBlPiBtdXN0IGJlIGluaXRpYWxpc2VkCisgICAoYXMgb3Bwb3NlZCB0byBvcmRpbmFyeSBzdGF0aWMgZGF0YSB3aGljaCBpcyB6ZXJvZWQgQlNTKSBhbmQgY2Fubm90IGJlIAorICAgPHR5cGU+Y29uc3Q8L3R5cGU+LgorICAgPC9wYXJhPiAKKworICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMtaW5pdC1hZ2FpbiI+CisgICA8dGl0bGU+PGZ1bmN0aW9uPl9faW5pdGNhbGwoKTwvZnVuY3Rpb24+LzxmdW5jdGlvbj5tb2R1bGVfaW5pdCgpPC9mdW5jdGlvbj4KKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvaW5pdC5oPC9maWxlbmFtZT48L3RpdGxlPgorICAgPHBhcmE+CisgICAgTWFueSBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB3ZWxsIHNlcnZlZCBhcyBhIG1vZHVsZQorICAgIChkeW5hbWljYWxseS1sb2FkYWJsZSBwYXJ0cyBvZiB0aGUga2VybmVsKS4gIFVzaW5nIHRoZQorICAgIDxmdW5jdGlvbj5tb2R1bGVfaW5pdCgpPC9mdW5jdGlvbj4gYW5kCisgICAgPGZ1bmN0aW9uPm1vZHVsZV9leGl0KCk8L2Z1bmN0aW9uPiBtYWNyb3MgaXQgaXMgZWFzeSB0byB3cml0ZSBjb2RlCisgICAgd2l0aG91dCAjaWZkZWZzIHdoaWNoIGNhbiBvcGVyYXRlIGJvdGggYXMgYSBtb2R1bGUgb3IgYnVpbHQgaW50bworICAgIHRoZSBrZXJuZWwuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSA8ZnVuY3Rpb24+bW9kdWxlX2luaXQoKTwvZnVuY3Rpb24+IG1hY3JvIGRlZmluZXMgd2hpY2gKKyAgICBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgYXQgbW9kdWxlIGluc2VydGlvbiB0aW1lIChpZiB0aGUgZmlsZSBpcworICAgIGNvbXBpbGVkIGFzIGEgbW9kdWxlKSwgb3IgYXQgYm9vdCB0aW1lOiBpZiB0aGUgZmlsZSBpcyBub3QKKyAgICBjb21waWxlZCBhcyBhIG1vZHVsZSB0aGUgPGZ1bmN0aW9uPm1vZHVsZV9pbml0KCk8L2Z1bmN0aW9uPiBtYWNybworICAgIGJlY29tZXMgZXF1aXZhbGVudCB0byA8ZnVuY3Rpb24+X19pbml0Y2FsbCgpPC9mdW5jdGlvbj4sIHdoaWNoCisgICAgdGhyb3VnaCBsaW5rZXIgbWFnaWMgZW5zdXJlcyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgb24gYm9vdC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgdG8gY2F1c2UKKyAgICBtb2R1bGUgbG9hZGluZyB0byBmYWlsICh1bmZvcnR1bmF0ZWx5LCB0aGlzIGhhcyBubyBlZmZlY3QgaWYKKyAgICB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCkuICBGb3IgbW9kdWxlcywgdGhpcyBpcworICAgIGNhbGxlZCBpbiB1c2VyIGNvbnRleHQsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLCBhbmQgdGhlCisgICAga2VybmVsIGxvY2sgaGVsZCwgc28gaXQgY2FuIHNsZWVwLgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorICAKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy1tb2R1bGVleGl0Ij4KKyAgIDx0aXRsZT4gPGZ1bmN0aW9uPm1vZHVsZV9leGl0KCk8L2Z1bmN0aW9uPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9pbml0Lmg8L2ZpbGVuYW1lPiA8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCBtb2R1bGUgcmVtb3ZhbAorICAgIHRpbWUgKG9yIG5ldmVyLCBpbiB0aGUgY2FzZSBvZiB0aGUgZmlsZSBjb21waWxlZCBpbnRvIHRoZQorICAgIGtlcm5lbCkuICBJdCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBtb2R1bGUgdXNhZ2UgY291bnQgaGFzCisgICAgcmVhY2hlZCB6ZXJvLiAgVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBzbGVlcCwgYnV0IGNhbm5vdCBmYWlsOgorICAgIGV2ZXJ5dGhpbmcgbXVzdCBiZSBjbGVhbmVkIHVwIGJ5IHRoZSB0aW1lIGl0IHJldHVybnMuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyA8IS0tIGFkZCBpbmZvIG9uIG5ldy1zdHlsZSBtb2R1bGUgcmVmY291bnRpbmcgaGVyZSAtLT4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0icXVldWVzIj4KKyAgPHRpdGxlPldhaXQgUXVldWVzCisgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvd2FpdC5oPC9maWxlbmFtZT4KKyAgPC90aXRsZT4KKyAgPHBhcmE+CisgICA8ZW1waGFzaXM+W1NMRUVQU108L2VtcGhhc2lzPgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIHdhaXQgcXVldWUgaXMgdXNlZCB0byB3YWl0IGZvciBzb21lb25lIHRvIHdha2UgeW91IHVwIHdoZW4gYQorICAgY2VydGFpbiBjb25kaXRpb24gaXMgdHJ1ZS4gIFRoZXkgbXVzdCBiZSB1c2VkIGNhcmVmdWxseSB0byBlbnN1cmUKKyAgIHRoZXJlIGlzIG5vIHJhY2UgY29uZGl0aW9uLiAgWW91IGRlY2xhcmUgYQorICAgPHR5cGU+d2FpdF9xdWV1ZV9oZWFkX3Q8L3R5cGU+LCBhbmQgdGhlbiBwcm9jZXNzZXMgd2hpY2ggd2FudCB0bworICAgd2FpdCBmb3IgdGhhdCBjb25kaXRpb24gZGVjbGFyZSBhIDx0eXBlPndhaXRfcXVldWVfdDwvdHlwZT4KKyAgIHJlZmVycmluZyB0byB0aGVtc2VsdmVzLCBhbmQgcGxhY2UgdGhhdCBpbiB0aGUgcXVldWUuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InF1ZXVlLWRlY2xhcmluZyI+CisgICA8dGl0bGU+RGVjbGFyaW5nPC90aXRsZT4KKyAgIAorICAgPHBhcmE+CisgICAgWW91IGRlY2xhcmUgYSA8dHlwZT53YWl0X3F1ZXVlX2hlYWRfdDwvdHlwZT4gdXNpbmcgdGhlCisgICAgPGZ1bmN0aW9uPkRFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKCk8L2Z1bmN0aW9uPiBtYWNybywgb3IgdXNpbmcgdGhlCisgICAgPGZ1bmN0aW9uPmluaXRfd2FpdHF1ZXVlX2hlYWQoKTwvZnVuY3Rpb24+IHJvdXRpbmUgaW4geW91cgorICAgIGluaXRpYWxpemF0aW9uIGNvZGUuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIAorICA8c2VjdDEgaWQ9InF1ZXVlLXdhaXRxdWV1ZSI+CisgICA8dGl0bGU+UXVldWluZzwvdGl0bGU+CisgICAKKyAgIDxwYXJhPgorICAgIFBsYWNpbmcgeW91cnNlbGYgaW4gdGhlIHdhaXRxdWV1ZSBpcyBmYWlybHkgY29tcGxleCwgYmVjYXVzZSB5b3UKKyAgICBtdXN0IHB1dCB5b3Vyc2VsZiBpbiB0aGUgcXVldWUgYmVmb3JlIGNoZWNraW5nIHRoZSBjb25kaXRpb24uCisgICAgVGhlcmUgaXMgYSBtYWNybyB0byBkbyB0aGlzOgorICAgIDxmdW5jdGlvbj53YWl0X2V2ZW50X2ludGVycnVwdGlibGUoKTwvZnVuY3Rpb24+CisKKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvc2NoZWQuaDwvZmlsZW5hbWU+IFRoZQorICAgIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSB3YWl0IHF1ZXVlIGhlYWQsIGFuZCB0aGUgc2Vjb25kIGlzIGFuCisgICAgZXhwcmVzc2lvbiB3aGljaCBpcyBldmFsdWF0ZWQ7IHRoZSBtYWNybyByZXR1cm5zCisgICAgPHJldHVybnZhbHVlPjA8L3JldHVybnZhbHVlPiB3aGVuIHRoaXMgZXhwcmVzc2lvbiBpcyB0cnVlLCBvcgorICAgIDxyZXR1cm52YWx1ZT4tRVJFU1RBUlRTWVM8L3JldHVybnZhbHVlPiBpZiBhIHNpZ25hbCBpcyByZWNlaXZlZC4KKyAgICBUaGUgPGZ1bmN0aW9uPndhaXRfZXZlbnQoKTwvZnVuY3Rpb24+IHZlcnNpb24gaWdub3JlcyBzaWduYWxzLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICBEbyBub3QgdXNlIHRoZSA8ZnVuY3Rpb24+c2xlZXBfb24oKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGZhbWlseSAtCisgICBpdCBpcyB2ZXJ5IGVhc3kgdG8gYWNjaWRlbnRhbGx5IGludHJvZHVjZSByYWNlczsgYWxtb3N0IGNlcnRhaW5seQorICAgb25lIG9mIHRoZSA8ZnVuY3Rpb24+d2FpdF9ldmVudCgpPC9mdW5jdGlvbj4gZmFtaWx5IHdpbGwgZG8sIG9yIGEKKyAgIGxvb3AgYXJvdW5kIDxmdW5jdGlvbj5zY2hlZHVsZV90aW1lb3V0KCk8L2Z1bmN0aW9uPi4gSWYgeW91IGNob29zZQorICAgdG8gbG9vcCBhcm91bmQgPGZ1bmN0aW9uPnNjaGVkdWxlX3RpbWVvdXQoKTwvZnVuY3Rpb24+IHJlbWVtYmVyCisgICB5b3UgbXVzdCBzZXQgdGhlIHRhc2sgc3RhdGUgKHdpdGggCisgICA8ZnVuY3Rpb24+c2V0X2N1cnJlbnRfc3RhdGUoKTwvZnVuY3Rpb24+KSBvbiBlYWNoIGl0ZXJhdGlvbiB0byBhdm9pZAorICAgYnVzeS1sb29waW5nLgorICAgPC9wYXJhPgorIAorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icXVldWUtd2FraW5nIj4KKyAgIDx0aXRsZT5XYWtpbmcgVXAgUXVldWVkIFRhc2tzPC90aXRsZT4KKyAgIAorICAgPHBhcmE+CisgICAgQ2FsbCA8ZnVuY3Rpb24+d2FrZV91cCgpPC9mdW5jdGlvbj4KKworICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9zY2hlZC5oPC9maWxlbmFtZT47LAorICAgIHdoaWNoIHdpbGwgd2FrZSB1cCBldmVyeSBwcm9jZXNzIGluIHRoZSBxdWV1ZS4gIFRoZSBleGNlcHRpb24gaXMKKyAgICBpZiBvbmUgaGFzIDxjb25zdGFudD5UQVNLX0VYQ0xVU0lWRTwvY29uc3RhbnQ+IHNldCwgaW4gd2hpY2ggY2FzZQorICAgIHRoZSByZW1haW5kZXIgb2YgdGhlIHF1ZXVlIHdpbGwgbm90IGJlIHdva2VuLgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJhdG9taWMtb3BzIj4KKyAgPHRpdGxlPkF0b21pYyBPcGVyYXRpb25zPC90aXRsZT4KKworICA8cGFyYT4KKyAgIENlcnRhaW4gb3BlcmF0aW9ucyBhcmUgZ3VhcmFudGVlZCBhdG9taWMgb24gYWxsIHBsYXRmb3Jtcy4gIFRoZQorICAgZmlyc3QgY2xhc3Mgb2Ygb3BlcmF0aW9ucyB3b3JrIG9uIDx0eXBlPmF0b21pY190PC90eXBlPgorCisgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL2F0b21pYy5oPC9maWxlbmFtZT47IHRoaXMKKyAgIGNvbnRhaW5zIGEgc2lnbmVkIGludGVnZXIgKGF0IGxlYXN0IDI0IGJpdHMgbG9uZyksIGFuZCB5b3UgbXVzdCB1c2UKKyAgIHRoZXNlIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIG9yIHJlYWQgYXRvbWljX3QgdmFyaWFibGVzLgorICAgPGZ1bmN0aW9uPmF0b21pY19yZWFkKCk8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5hdG9taWNfc2V0KCk8L2Z1bmN0aW9uPiBnZXQgYW5kIHNldCB0aGUgY291bnRlciwKKyAgIDxmdW5jdGlvbj5hdG9taWNfYWRkKCk8L2Z1bmN0aW9uPiwKKyAgIDxmdW5jdGlvbj5hdG9taWNfc3ViKCk8L2Z1bmN0aW9uPiwKKyAgIDxmdW5jdGlvbj5hdG9taWNfaW5jKCk8L2Z1bmN0aW9uPiwKKyAgIDxmdW5jdGlvbj5hdG9taWNfZGVjKCk8L2Z1bmN0aW9uPiwgYW5kCisgICA8ZnVuY3Rpb24+YXRvbWljX2RlY19hbmRfdGVzdCgpPC9mdW5jdGlvbj4gKHJldHVybnMKKyAgIDxyZXR1cm52YWx1ZT50cnVlPC9yZXR1cm52YWx1ZT4gaWYgaXQgd2FzIGRlY3JlbWVudGVkIHRvIHplcm8pLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBZZXMuICBJdCByZXR1cm5zIDxyZXR1cm52YWx1ZT50cnVlPC9yZXR1cm52YWx1ZT4gKGkuZS4gIT0gMCkgaWYgdGhlCisgICBhdG9taWMgdmFyaWFibGUgaXMgemVyby4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc2xvd2VyIHRoYW4gbm9ybWFsIGFyaXRobWV0aWMsIGFuZAorICAgc28gc2hvdWxkIG5vdCBiZSB1c2VkIHVubmVjZXNzYXJpbHkuICBPbiBzb21lIHBsYXRmb3JtcyB0aGV5CisgICBhcmUgbXVjaCBzbG93ZXIsIGxpa2UgMzItYml0IFNwYXJjIHdoZXJlIHRoZXkgdXNlIGEgc3BpbmxvY2suCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBzZWNvbmQgY2xhc3Mgb2YgYXRvbWljIG9wZXJhdGlvbnMgaXMgYXRvbWljIGJpdCBvcGVyYXRpb25zIG9uIGEKKyAgIDx0eXBlPmxvbmc8L3R5cGU+LCBkZWZpbmVkIGluCisKKyAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9iaXRvcHMuaDwvZmlsZW5hbWU+LiAgVGhlc2UKKyAgIG9wZXJhdGlvbnMgZ2VuZXJhbGx5IHRha2UgYSBwb2ludGVyIHRvIHRoZSBiaXQgcGF0dGVybiwgYW5kIGEgYml0CisgICBudW1iZXI6IDAgaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4KKyAgIDxmdW5jdGlvbj5zZXRfYml0KCk8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmNsZWFyX2JpdCgpPC9mdW5jdGlvbj4KKyAgIGFuZCA8ZnVuY3Rpb24+Y2hhbmdlX2JpdCgpPC9mdW5jdGlvbj4gc2V0LCBjbGVhciwgYW5kIGZsaXAgdGhlCisgICBnaXZlbiBiaXQuICA8ZnVuY3Rpb24+dGVzdF9hbmRfc2V0X2JpdCgpPC9mdW5jdGlvbj4sCisgICA8ZnVuY3Rpb24+dGVzdF9hbmRfY2xlYXJfYml0KCk8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj50ZXN0X2FuZF9jaGFuZ2VfYml0KCk8L2Z1bmN0aW9uPiBkbyB0aGUgc2FtZSB0aGluZywKKyAgIGV4Y2VwdCByZXR1cm4gdHJ1ZSBpZiB0aGUgYml0IHdhcyBwcmV2aW91c2x5IHNldDsgdGhlc2UgYXJlCisgICBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciB2ZXJ5IHNpbXBsZSBsb2NraW5nLgorICA8L3BhcmE+CisgIAorICA8cGFyYT4KKyAgIEl0IGlzIHBvc3NpYmxlIHRvIGNhbGwgdGhlc2Ugb3BlcmF0aW9ucyB3aXRoIGJpdCBpbmRpY2VzIGdyZWF0ZXIKKyAgIHRoYW4gQklUU19QRVJfTE9ORy4gIFRoZSByZXN1bHRpbmcgYmVoYXZpb3IgaXMgc3RyYW5nZSBvbiBiaWctZW5kaWFuCisgICBwbGF0Zm9ybXMgdGhvdWdoIHNvIGl0IGlzIGEgZ29vZCBpZGVhIG5vdCB0byBkbyB0aGlzLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBOb3RlIHRoYXQgdGhlIG9yZGVyIG9mIGJpdHMgZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBhbmQgaW4KKyAgIHBhcnRpY3VsYXIsIHRoZSBiaXRmaWVsZCBwYXNzZWQgdG8gdGhlc2Ugb3BlcmF0aW9ucyBtdXN0IGJlIGF0CisgICBsZWFzdCBhcyBsYXJnZSBhcyBhIDx0eXBlPmxvbmc8L3R5cGU+LgorICA8L3BhcmE+CisgPC9jaGFwdGVyPgorCisgPGNoYXB0ZXIgaWQ9InN5bWJvbHMiPgorICA8dGl0bGU+U3ltYm9sczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBXaXRoaW4gdGhlIGtlcm5lbCBwcm9wZXIsIHRoZSBub3JtYWwgbGlua2luZyBydWxlcyBhcHBseQorICAgKGllLiB1bmxlc3MgYSBzeW1ib2wgaXMgZGVjbGFyZWQgdG8gYmUgZmlsZSBzY29wZSB3aXRoIHRoZQorICAgPHR5cGU+c3RhdGljPC90eXBlPiBrZXl3b3JkLCBpdCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUKKyAgIGtlcm5lbCkuICBIb3dldmVyLCBmb3IgbW9kdWxlcywgYSBzcGVjaWFsIGV4cG9ydGVkIHN5bWJvbCB0YWJsZSBpcworICAga2VwdCB3aGljaCBsaW1pdHMgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUga2VybmVsIHByb3Blci4gIE1vZHVsZXMKKyAgIGNhbiBhbHNvIGV4cG9ydCBzeW1ib2xzLgorICA8L3BhcmE+CisKKyAgPHNlY3QxIGlkPSJzeW0tZXhwb3J0c3ltYm9scyI+CisgICA8dGl0bGU+PGZ1bmN0aW9uPkVYUE9SVF9TWU1CT0woKTwvZnVuY3Rpb24+CisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L21vZHVsZS5oPC9maWxlbmFtZT48L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGlzIGlzIHRoZSBjbGFzc2ljIG1ldGhvZCBvZiBleHBvcnRpbmcgYSBzeW1ib2wsIGFuZCBpdCB3b3JrcworICAgIGZvciBib3RoIG1vZHVsZXMgYW5kIG5vbi1tb2R1bGVzLiAgSW4gdGhlIGtlcm5lbCBhbGwgdGhlc2UKKyAgICBkZWNsYXJhdGlvbnMgYXJlIG9mdGVuIGJ1bmRsZWQgaW50byBhIHNpbmdsZSBmaWxlIHRvIGhlbHAKKyAgICBnZW5rc3ltcyAod2hpY2ggc2VhcmNoZXMgc291cmNlIGZpbGVzIGZvciB0aGVzZSBkZWNsYXJhdGlvbnMpLgorICAgIFNlZSB0aGUgY29tbWVudCBvbiBnZW5rc3ltcyBhbmQgTWFrZWZpbGVzIGJlbG93LgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic3ltLWV4cG9ydHN5bWJvbHMtZ3BsIj4KKyAgIDx0aXRsZT48ZnVuY3Rpb24+RVhQT1JUX1NZTUJPTF9HUEwoKTwvZnVuY3Rpb24+CisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L21vZHVsZS5oPC9maWxlbmFtZT48L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBTaW1pbGFyIHRvIDxmdW5jdGlvbj5FWFBPUlRfU1lNQk9MKCk8L2Z1bmN0aW9uPiBleGNlcHQgdGhhdCB0aGUKKyAgICBzeW1ib2xzIGV4cG9ydGVkIGJ5IDxmdW5jdGlvbj5FWFBPUlRfU1lNQk9MX0dQTCgpPC9mdW5jdGlvbj4gY2FuCisgICAgb25seSBiZSBzZWVuIGJ5IG1vZHVsZXMgd2l0aCBhCisgICAgPGZ1bmN0aW9uPk1PRFVMRV9MSUNFTlNFKCk8L2Z1bmN0aW9uPiB0aGF0IHNwZWNpZmllcyBhIEdQTAorICAgIGNvbXBhdGlibGUgbGljZW5zZS4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0iY29udmVudGlvbnMiPgorICA8dGl0bGU+Um91dGluZXMgYW5kIENvbnZlbnRpb25zPC90aXRsZT4KKworICA8c2VjdDEgaWQ9ImNvbnZlbnRpb25zLWRvdWJsZWxpbmtlZGxpc3QiPgorICAgPHRpdGxlPkRvdWJsZS1saW5rZWQgbGlzdHMKKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvbGlzdC5oPC9maWxlbmFtZT48L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGVyZSBhcmUgdGhyZWUgc2V0cyBvZiBsaW5rZWQtbGlzdCByb3V0aW5lcyBpbiB0aGUga2VybmVsCisgICAgaGVhZGVycywgYnV0IHRoaXMgb25lIHNlZW1zIHRvIGJlIHdpbm5pbmcgb3V0IChhbmQgTGludXMgaGFzCisgICAgdXNlZCBpdCkuICBJZiB5b3UgZG9uJ3QgaGF2ZSBzb21lIHBhcnRpY3VsYXIgcHJlc3NpbmcgbmVlZCBmb3IKKyAgICBhIHNpbmdsZSBsaXN0LCBpdCdzIGEgZ29vZCBjaG9pY2UuICBJbiBmYWN0LCBJIGRvbid0IGNhcmUKKyAgICB3aGV0aGVyIGl0J3MgYSBnb29kIGNob2ljZSBvciBub3QsIGp1c3QgdXNlIGl0IHNvIHdlIGNhbiBnZXQKKyAgICByaWQgb2YgdGhlIG90aGVycy4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImNvbnZlbnRpb24tcmV0dXJucyI+CisgICA8dGl0bGU+UmV0dXJuIENvbnZlbnRpb25zPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgRm9yIGNvZGUgY2FsbGVkIGluIHVzZXIgY29udGV4dCwgaXQncyB2ZXJ5IGNvbW1vbiB0byBkZWZ5IEMKKyAgICBjb252ZW50aW9uLCBhbmQgcmV0dXJuIDxyZXR1cm52YWx1ZT4wPC9yZXR1cm52YWx1ZT4gZm9yIHN1Y2Nlc3MsCisgICAgYW5kIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyCisgICAgKGVnLiA8cmV0dXJudmFsdWU+LUVGQVVMVDwvcmV0dXJudmFsdWU+KSBmb3IgZmFpbHVyZS4gIFRoaXMgY2FuIGJlCisgICAgdW5pbnR1aXRpdmUgYXQgZmlyc3QsIGJ1dCBpdCdzIGZhaXJseSB3aWRlc3ByZWFkIGluIHRoZSBuZXR3b3JraW5nCisgICAgY29kZSwgZm9yIGV4YW1wbGUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBmaWxlc3lzdGVtIGNvZGUgdXNlcyA8ZnVuY3Rpb24+RVJSX1BUUigpPC9mdW5jdGlvbj4KKworICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9mcy5oPC9maWxlbmFtZT47IHRvCisgICAgZW5jb2RlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIGludG8gYSBwb2ludGVyLCBhbmQKKyAgICA8ZnVuY3Rpb24+SVNfRVJSKCk8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPlBUUl9FUlIoKTwvZnVuY3Rpb24+CisgICAgdG8gZ2V0IGl0IGJhY2sgb3V0IGFnYWluOiBhdm9pZHMgYSBzZXBhcmF0ZSBwb2ludGVyIHBhcmFtZXRlciBmb3IKKyAgICB0aGUgZXJyb3IgbnVtYmVyLiAgSWNreSwgYnV0IGluIGEgZ29vZCB3YXkuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJjb252ZW50aW9ucy1ib3JrZWRjb21waWxlIj4KKyAgIDx0aXRsZT5CcmVha2luZyBDb21waWxhdGlvbjwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIExpbnVzIGFuZCB0aGUgb3RoZXIgZGV2ZWxvcGVycyBzb21ldGltZXMgY2hhbmdlIGZ1bmN0aW9uIG9yCisgICAgc3RydWN0dXJlIG5hbWVzIGluIGRldmVsb3BtZW50IGtlcm5lbHM7IHRoaXMgaXMgbm90IGRvbmUganVzdCB0bworICAgIGtlZXAgZXZlcnlvbmUgb24gdGhlaXIgdG9lczogaXQgcmVmbGVjdHMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UKKyAgICAoZWcuIGNhbiBubyBsb25nZXIgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBvbiwgb3IgZG9lcyBleHRyYQorICAgIGNoZWNrcywgb3IgZG9lc24ndCBkbyBjaGVja3Mgd2hpY2ggd2VyZSBjYXVnaHQgYmVmb3JlKS4gIFVzdWFsbHkKKyAgICB0aGlzIGlzIGFjY29tcGFuaWVkIGJ5IGEgZmFpcmx5IGNvbXBsZXRlIG5vdGUgdG8gdGhlIGxpbnV4LWtlcm5lbAorICAgIG1haWxpbmcgbGlzdDsgc2VhcmNoIHRoZSBhcmNoaXZlLiAgU2ltcGx5IGRvaW5nIGEgZ2xvYmFsIHJlcGxhY2UKKyAgICBvbiB0aGUgZmlsZSB1c3VhbGx5IG1ha2VzIHRoaW5ncyA8ZW1waGFzaXM+d29yc2U8L2VtcGhhc2lzPi4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImNvbnZlbnRpb25zLWluaXRpYWxpc2luZyI+CisgICA8dGl0bGU+SW5pdGlhbGl6aW5nIHN0cnVjdHVyZSBtZW1iZXJzPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgVGhlIHByZWZlcnJlZCBtZXRob2Qgb2YgaW5pdGlhbGl6aW5nIHN0cnVjdHVyZXMgaXMgdG8gdXNlCisgICAgZGVzaWduYXRlZCBpbml0aWFsaXNlcnMsIGFzIGRlZmluZWQgYnkgSVNPIEM5OSwgZWc6CisgICA8L3BhcmE+CisgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG9wdF9mb3BzID0geworICAgICAgICAub3BlbiAgICAgICAgICAgICAgID0gb3B0X29wZW4sCisgICAgICAgIC5yZWxlYXNlICAgICAgICAgICAgPSBvcHRfcmVsZWFzZSwKKyAgICAgICAgLmlvY3RsICAgICAgICAgICAgICA9IG9wdF9pb2N0bCwKKyAgICAgICAgLmNoZWNrX21lZGlhX2NoYW5nZSA9IG9wdF9tZWRpYV9jaGFuZ2UsCit9OworICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgIDxwYXJhPgorICAgIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBncmVwIGZvciwgYW5kIG1ha2VzIGl0IGNsZWFyIHdoaWNoCisgICAgc3RydWN0dXJlIGZpZWxkcyBhcmUgc2V0LiAgWW91IHNob3VsZCBkbyB0aGlzIGJlY2F1c2UgaXQgbG9va3MKKyAgICBjb29sLgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iY29udmVudGlvbnMtZ251LWV4dG5zIj4KKyAgIDx0aXRsZT5HTlUgRXh0ZW5zaW9uczwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIEdOVSBFeHRlbnNpb25zIGFyZSBleHBsaWNpdGx5IGFsbG93ZWQgaW4gdGhlIExpbnV4IGtlcm5lbC4KKyAgICBOb3RlIHRoYXQgc29tZSBvZiB0aGUgbW9yZSBjb21wbGV4IG9uZXMgYXJlIG5vdCB2ZXJ5IHdlbGwKKyAgICBzdXBwb3J0ZWQsIGR1ZSB0byBsYWNrIG9mIGdlbmVyYWwgdXNlLCBidXQgdGhlIGZvbGxvd2luZyBhcmUKKyAgICBjb25zaWRlcmVkIHN0YW5kYXJkIChzZWUgdGhlIEdDQyBpbmZvIHBhZ2Ugc2VjdGlvbiAiQworICAgIEV4dGVuc2lvbnMiIGZvciBtb3JlIGRldGFpbHMgLSBZZXMsIHJlYWxseSB0aGUgaW5mbyBwYWdlLCB0aGUKKyAgICBtYW4gcGFnZSBpcyBvbmx5IGEgc2hvcnQgc3VtbWFyeSBvZiB0aGUgc3R1ZmYgaW4gaW5mbyk6CisgICA8L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBJbmxpbmUgZnVuY3Rpb25zCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTdGF0ZW1lbnQgZXhwcmVzc2lvbnMgKGllLiB0aGUgKHsgYW5kIH0pIGNvbnN0cnVjdHMpLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgRGVjbGFyaW5nIGF0dHJpYnV0ZXMgb2YgYSBmdW5jdGlvbiAvIHZhcmlhYmxlIC8gdHlwZQorICAgICAgKF9fYXR0cmlidXRlX18pCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICB0eXBlb2YKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFplcm8gbGVuZ3RoIGFycmF5cworICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTWFjcm8gdmFyYXJncworICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgQXJpdGhtZXRpYyBvbiB2b2lkIHBvaW50ZXJzCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBOb24tQ29uc3RhbnQgaW5pdGlhbGl6ZXJzCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBBc3NlbWJsZXIgSW5zdHJ1Y3Rpb25zIChub3Qgb3V0c2lkZSBhcmNoLyBhbmQgaW5jbHVkZS9hc20vKQorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgRnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncyAoX19GVU5DVElPTl9fKQorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgX19idWlsdGluX2NvbnN0YW50X3AoKQorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICA8cGFyYT4KKyAgICBCZSB3YXJ5IHdoZW4gdXNpbmcgbG9uZyBsb25nIGluIHRoZSBrZXJuZWwsIHRoZSBjb2RlIGdjYyBnZW5lcmF0ZXMgZm9yCisgICAgaXQgaXMgaG9ycmlibGUgYW5kIHdvcnNlOiBkaXZpc2lvbiBhbmQgbXVsdGlwbGljYXRpb24gZG9lcyBub3Qgd29yaworICAgIG9uIGkzODYgYmVjYXVzZSB0aGUgR0NDIHJ1bnRpbWUgZnVuY3Rpb25zIGZvciBpdCBhcmUgbWlzc2luZyBmcm9tCisgICAgdGhlIGtlcm5lbCBlbnZpcm9ubWVudC4KKyAgIDwvcGFyYT4KKworICAgIDwhLS0gRklYTUU6IGFkZCBhIG5vdGUgYWJvdXQgQU5TSSBhbGlhc2luZyBjbGVhbm5lc3MgLS0+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJjb252ZW50aW9ucy1jcGx1c3BsdXMiPgorICAgPHRpdGxlPkMrKzwvdGl0bGU+CisgICAKKyAgIDxwYXJhPgorICAgIFVzaW5nIEMrKyBpbiB0aGUga2VybmVsIGlzIHVzdWFsbHkgYSBiYWQgaWRlYSwgYmVjYXVzZSB0aGUKKyAgICBrZXJuZWwgZG9lcyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IHJ1bnRpbWUgZW52aXJvbm1lbnQKKyAgICBhbmQgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIG5vdCB0ZXN0ZWQgZm9yIGl0LiAgSXQgaXMgc3RpbGwKKyAgICBwb3NzaWJsZSwgYnV0IG5vdCByZWNvbW1lbmRlZC4gIElmIHlvdSByZWFsbHkgd2FudCB0byBkbworICAgIHRoaXMsIGZvcmdldCBhYm91dCBleGNlcHRpb25zIGF0IGxlYXN0LgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iY29udmVudGlvbnMtaWZkZWYiPgorICAgPHRpdGxlPiZudW07aWY8L3RpdGxlPgorICAgCisgICA8cGFyYT4KKyAgICBJdCBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBjbGVhbmVyIHRvIHVzZSBtYWNyb3MgaW4gaGVhZGVyIGZpbGVzCisgICAgKG9yIGF0IHRoZSB0b3Agb2YgLmMgZmlsZXMpIHRvIGFic3RyYWN0IGF3YXkgZnVuY3Rpb25zIHJhdGhlciB0aGFuCisgICAgdXNpbmcgYCNpZicgcHJlLXByb2Nlc3NvciBzdGF0ZW1lbnRzIHRocm91Z2hvdXQgdGhlIHNvdXJjZSBjb2RlLgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJzdWJtaXR0aW5nIj4KKyAgPHRpdGxlPlB1dHRpbmcgWW91ciBTdHVmZiBpbiB0aGUgS2VybmVsPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEluIG9yZGVyIHRvIGdldCB5b3VyIHN0dWZmIGludG8gc2hhcGUgZm9yIG9mZmljaWFsIGluY2x1c2lvbiwgb3IKKyAgIGV2ZW4gdG8gbWFrZSBhIG5lYXQgcGF0Y2gsIHRoZXJlJ3MgYWRtaW5pc3RyYXRpdmUgd29yayB0byBiZQorICAgZG9uZToKKyAgPC9wYXJhPgorICA8aXRlbWl6ZWRsaXN0PgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBGaWd1cmUgb3V0IHdob3NlIHBvbmQgeW91J3ZlIGJlZW4gcGlzc2luZyBpbi4gIExvb2sgYXQgdGhlIHRvcCBvZgorICAgICB0aGUgc291cmNlIGZpbGVzLCBpbnNpZGUgdGhlIDxmaWxlbmFtZT5NQUlOVEFJTkVSUzwvZmlsZW5hbWU+CisgICAgIGZpbGUsIGFuZCBsYXN0IG9mIGFsbCBpbiB0aGUgPGZpbGVuYW1lPkNSRURJVFM8L2ZpbGVuYW1lPiBmaWxlLgorICAgICBZb3Ugc2hvdWxkIGNvb3JkaW5hdGUgd2l0aCB0aGlzIHBlcnNvbiB0byBtYWtlIHN1cmUgeW91J3JlIG5vdAorICAgICBkdXBsaWNhdGluZyBlZmZvcnQsIG9yIHRyeWluZyBzb21ldGhpbmcgdGhhdCdzIGFscmVhZHkgYmVlbgorICAgICByZWplY3RlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgTWFrZSBzdXJlIHlvdSBwdXQgeW91ciBuYW1lIGFuZCBFTWFpbCBhZGRyZXNzIGF0IHRoZSB0b3Agb2YKKyAgICAgYW55IGZpbGVzIHlvdSBjcmVhdGUgb3IgbWFuZ2xlIHNpZ25pZmljYW50bHkuICBUaGlzIGlzIHRoZQorICAgICBmaXJzdCBwbGFjZSBwZW9wbGUgd2lsbCBsb29rIHdoZW4gdGhleSBmaW5kIGEgYnVnLCBvciB3aGVuCisgICAgIDxlbXBoYXNpcz50aGV5PC9lbXBoYXNpcz4gd2FudCB0byBtYWtlIGEgY2hhbmdlLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgVXN1YWxseSB5b3Ugd2FudCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB5b3VyIGtlcm5lbCBoYWNrLgorICAgICBFZGl0IDxmaWxlbmFtZT5Db25maWcuaW48L2ZpbGVuYW1lPiBpbiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5CisgICAgIChidXQgdW5kZXIgPGZpbGVuYW1lPmFyY2gvPC9maWxlbmFtZT4gaXQncyBjYWxsZWQKKyAgICAgPGZpbGVuYW1lPmNvbmZpZy5pbjwvZmlsZW5hbWU+KS4gIFRoZSBDb25maWcgTGFuZ3VhZ2UgdXNlZCBpcyBub3QKKyAgICAgYmFzaCwgZXZlbiB0aG91Z2ggaXQgbG9va3MgbGlrZSBiYXNoOyB0aGUgc2FmZSB3YXkgaXMgdG8gdXNlIG9ubHkKKyAgICAgdGhlIGNvbnN0cnVjdHMgdGhhdCB5b3UgYWxyZWFkeSBzZWUgaW4KKyAgICAgPGZpbGVuYW1lPkNvbmZpZy5pbjwvZmlsZW5hbWU+IGZpbGVzIChzZWUKKyAgICAgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0PC9maWxlbmFtZT4pLgorICAgICBJdCdzIGdvb2QgdG8gcnVuICJtYWtlIHhjb25maWciIGF0IGxlYXN0IG9uY2UgdG8gdGVzdCAoYmVjYXVzZQorICAgICBpdCdzIHRoZSBvbmx5IG9uZSB3aXRoIGEgc3RhdGljIHBhcnNlcikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFZhcmlhYmxlcyB3aGljaCBjYW4gYmUgWSBvciBOIHVzZSA8dHlwZT5ib29sPC90eXBlPiBmb2xsb3dlZCBieSBhCisgICAgIHRhZ2xpbmUgYW5kIHRoZSBjb25maWcgZGVmaW5lIG5hbWUgKHdoaWNoIG11c3Qgc3RhcnQgd2l0aAorICAgICBDT05GSUdfKS4gIFRoZSA8dHlwZT50cmlzdGF0ZTwvdHlwZT4gZnVuY3Rpb24gaXMgdGhlIHNhbWUsIGJ1dAorICAgICBhbGxvd3MgdGhlIGFuc3dlciBNICh3aGljaCBkZWZpbmVzCisgICAgIDxzeW1ib2w+Q09ORklHX2Zvb19NT0RVTEU8L3N5bWJvbD4gaW4geW91ciBzb3VyY2UsIGluc3RlYWQgb2YKKyAgICAgPHN5bWJvbD5DT05GSUdfRk9PPC9zeW1ib2w+KSBpZiA8c3ltYm9sPkNPTkZJR19NT0RVTEVTPC9zeW1ib2w+CisgICAgIGlzIGVuYWJsZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFlvdSBtYXkgd2VsbCB3YW50IHRvIG1ha2UgeW91ciBDT05GSUcgb3B0aW9uIG9ubHkgdmlzaWJsZSBpZgorICAgICA8c3ltYm9sPkNPTkZJR19FWFBFUklNRU5UQUw8L3N5bWJvbD4gaXMgZW5hYmxlZDogdGhpcyBzZXJ2ZXMgYXMgYQorICAgICB3YXJuaW5nIHRvIHVzZXJzLiAgVGhlcmUgbWFueSBvdGhlciBmYW5jeSB0aGluZ3MgeW91IGNhbiBkbzogc2VlCisgICAgIHRoZSB2YXJpb3VzIDxmaWxlbmFtZT5Db25maWcuaW48L2ZpbGVuYW1lPiBmaWxlcyBmb3IgaWRlYXMuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBFZGl0IHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPjogdGhlIENPTkZJRyB2YXJpYWJsZXMgYXJlCisgICAgIGV4cG9ydGVkIGhlcmUgc28geW91IGNhbiBjb25kaXRpb25hbGl6ZSBjb21waWxhdGlvbiB3aXRoIGBpZmVxJy4KKyAgICAgSWYgeW91ciBmaWxlIGV4cG9ydHMgc3ltYm9scyB0aGVuIGFkZCB0aGUgbmFtZXMgdG8KKyAgICAgPHZhcm5hbWU+ZXhwb3J0LW9ianM8L3Zhcm5hbWU+IHNvIHRoYXQgZ2Vua3N5bXMgd2lsbCBmaW5kIHRoZW0uCisgICAgIDxjYXV0aW9uPgorICAgICAgPHBhcmE+CisgICAgICAgVGhlcmUgaXMgYSByZXN0cmljdGlvbiBvbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0aGF0IG9iamVjdHMKKyAgICAgICB3aGljaCBleHBvcnQgc3ltYm9scyBtdXN0IGhhdmUgZ2xvYmFsbHkgdW5pcXVlIG5hbWVzLgorICAgICAgIElmIHlvdXIgb2JqZWN0IGRvZXMgbm90IGhhdmUgYSBnbG9iYWxseSB1bmlxdWUgbmFtZSB0aGVuIHRoZQorICAgICAgIHN0YW5kYXJkIGZpeCBpcyB0byBtb3ZlIHRoZQorICAgICAgIDxmdW5jdGlvbj5FWFBPUlRfU1lNQk9MKCk8L2Z1bmN0aW9uPiBzdGF0ZW1lbnRzIHRvIHRoZWlyIG93bgorICAgICAgIG9iamVjdCB3aXRoIGEgdW5pcXVlIG5hbWUuCisgICAgICAgVGhpcyBpcyB3aHkgc2V2ZXJhbCBzeXN0ZW1zIGhhdmUgc2VwYXJhdGUgZXhwb3J0aW5nIG9iamVjdHMsCisgICAgICAgdXN1YWxseSBzdWZmaXhlZCB3aXRoIGtzeW1zLgorICAgICAgPC9wYXJhPgorICAgICA8L2NhdXRpb24+CisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBEb2N1bWVudCB5b3VyIG9wdGlvbiBpbiBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwLiAgTWVudGlvbgorICAgICBpbmNvbXBhdGliaWxpdGllcyBhbmQgaXNzdWVzIGhlcmUuICA8ZW1waGFzaXM+IERlZmluaXRlbHkKKyAgICAgPC9lbXBoYXNpcz4gZW5kIHlvdXIgZGVzY3JpcHRpb24gd2l0aCA8cXVvdGU+IGlmIGluIGRvdWJ0LCBzYXkgTgorICAgICA8L3F1b3RlPiAob3IsIG9jY2FzaW9uYWxseSwgYFknKTsgdGhpcyBpcyBmb3IgcGVvcGxlIHdobyBoYXZlIG5vCisgICAgIGlkZWEgd2hhdCB5b3UgYXJlIHRhbGtpbmcgYWJvdXQuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBQdXQgeW91cnNlbGYgaW4gPGZpbGVuYW1lPkNSRURJVFM8L2ZpbGVuYW1lPiBpZiB5b3UndmUgZG9uZQorICAgICBzb21ldGhpbmcgbm90ZXdvcnRoeSwgdXN1YWxseSBiZXlvbmQgYSBzaW5nbGUgZmlsZSAoeW91ciBuYW1lCisgICAgIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgZmlsZXMgYW55d2F5KS4KKyAgICAgPGZpbGVuYW1lPk1BSU5UQUlORVJTPC9maWxlbmFtZT4gbWVhbnMgeW91IHdhbnQgdG8gYmUgY29uc3VsdGVkCisgICAgIHdoZW4gY2hhbmdlcyBhcmUgbWFkZSB0byBhIHN1YnN5c3RlbSwgYW5kIGhlYXIgYWJvdXQgYnVnczsgaXQKKyAgICAgaW1wbGllcyBhIG1vcmUtdGhhbi1wYXNzaW5nIGNvbW1pdG1lbnQgdG8gc29tZSBwYXJ0IG9mIHRoZSBjb2RlLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgICAKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgRmluYWxseSwgZG9uJ3QgZm9yZ2V0IHRvIHJlYWQgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXM8L2ZpbGVuYW1lPgorICAgICBhbmQgcG9zc2libHkgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnM8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0iY2FudHJpcHMiPgorICA8dGl0bGU+S2VybmVsIENhbnRyaXBzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFNvbWUgZmF2b3JpdGVzIGZyb20gYnJvd3NpbmcgdGhlIHNvdXJjZS4gIEZlZWwgZnJlZSB0byBhZGQgdG8gdGhpcworICAgbGlzdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvYnJsb2NrLmg6PC9maWxlbmFtZT4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CitleHRlcm4gaW5saW5lIHZvaWQgYnJfcmVhZF9sb2NrIChlbnVtIGJybG9ja19pbmRpY2VzIGlkeCkKK3sKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBjYXVzZXMgYSBsaW5rLXRpbWUgYnVnIG1lc3NhZ2UgaWYgYW4KKyAgICAgICAgICogaW52YWxpZCBpbmRleCBpcyB1c2VkOgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGlkeCA+PSBfX0JSX0VORCkKKyAgICAgICAgICAgICAgICBfX2JyX2xvY2tfdXNhZ2VfYnVnKCk7CisKKyAgICAgICAgcmVhZF9sb2NrKCZhbXA7X19icmxvY2tfYXJyYXlbc21wX3Byb2Nlc3Nvcl9pZCgpXVtpZHhdKTsKK30KKyAgPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIDxmaWxlbmFtZT5pbmNsdWRlL2xpbnV4L2ZzLmg8L2ZpbGVuYW1lPjoKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisvKgorICogS2VybmVsIHBvaW50ZXJzIGhhdmUgcmVkdW5kYW50IGluZm9ybWF0aW9uLCBzbyB3ZSBjYW4gdXNlIGEKKyAqIHNjaGVtZSB3aGVyZSB3ZSBjYW4gcmV0dXJuIGVpdGhlciBhbiBlcnJvciBjb2RlIG9yIGEgZGVudHJ5CisgKiBwb2ludGVyIHdpdGggdGhlIHNhbWUgcmV0dXJuIHZhbHVlLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGEgcGVyLWFyY2hpdGVjdHVyZSB0aGluZywgdG8gYWxsb3cgZGlmZmVyZW50CisgKiBlcnJvciBhbmQgcG9pbnRlciBkZWNpc2lvbnMuCisgKi8KKyAjZGVmaW5lIEVSUl9QVFIoZXJyKSAgICAoKHZvaWQgKikoKGxvbmcpKGVycikpKQorICNkZWZpbmUgUFRSX0VSUihwdHIpICAgICgobG9uZykocHRyKSkKKyAjZGVmaW5lIElTX0VSUihwdHIpICAgICAoKHVuc2lnbmVkIGxvbmcpKHB0cikgPiAodW5zaWduZWQgbG9uZykoLTEwMDApKQorPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIDxmaWxlbmFtZT5pbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaDo8L2ZpbGVuYW1lPgorICA8L3BhcmE+CisKKyAgPHByb2dyYW1saXN0aW5nPgorI2RlZmluZSBjb3B5X3RvX3VzZXIodG8sZnJvbSxuKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIF9fY29uc3RhbnRfY29weV90b191c2VyKCh0byksKGZyb20pLChuKSkgOiAgICAgXAorICAgICAgICAgX19nZW5lcmljX2NvcHlfdG9fdXNlcigodG8pLChmcm9tKSwobikpKQorICA8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgPGZpbGVuYW1lPmFyY2gvc3BhcmMva2VybmVsL2hlYWQuUzo8L2ZpbGVuYW1lPgorICA8L3BhcmE+CisKKyAgPHByb2dyYW1saXN0aW5nPgorLyoKKyAqIFN1biBwZW9wbGUgY2FuJ3Qgc3BlbGwgd29ydGggZGFtbi4gImNvbXBhdGFiaWxpdHkiIGluZGVlZC4KKyAqIEF0IGxlYXN0IHdlICprbm93KiB3ZSBjYW4ndCBzcGVsbCwgYW5kIHVzZSBhIHNwZWxsLWNoZWNrZXIuCisgKi8KKworLyogVWgsIGFjdHVhbGx5IExpbnVzIGl0IGlzIEkgd2hvIGNhbm5vdCBzcGVsbC4gVG9vIG11Y2ggbXVya3kKKyAqIFNwYXJjIGFzc2VtYmx5IHdpbGwgZG8gdGhpcyB0byB5YS4KKyAqLworQ19MQUJFTChjcHV0eXB2YXIpOgorICAgICAgICAuYXNjaXogImNvbXBhdGFiaWxpdHkiCisKKy8qIFRlc3RlZCBvbiBTUy01LCBTUy0xMC4gUHJvYmFibHkgc29tZW9uZSBhdCBTdW4gYXBwbGllZCBhIHNwZWxsLWNoZWNrZXIuICovCisgICAgICAgIC5hbGlnbiA0CitDX0xBQkVMKGNwdXR5cHZhcl9zdW40bSk6CisgICAgICAgIC5hc2NpeiAiY29tcGF0aWJsZSIKKyAgPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIDxmaWxlbmFtZT5hcmNoL3NwYXJjL2xpYi9jaGVja3N1bS5TOjwvZmlsZW5hbWU+CisgIDwvcGFyYT4KKworICA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIC8qIFN1biwgeW91IGp1c3QgY2FuJ3QgYmVhdCBtZSwgeW91IGp1c3QgY2FuJ3QuICBTdG9wIHRyeWluZywKKyAgICAgICAgICogZ2l2ZSB1cC4gIEknbSBzZXJpb3VzLCBJIGFtIGdvaW5nIHRvIGtpY2sgdGhlIGxpdmluZyBzaGl0CisgICAgICAgICAqIG91dCBvZiB5b3UsIGdhbWUgb3ZlciwgbGlnaHRzIG91dC4KKyAgICAgICAgICovCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgPC9jaGFwdGVyPgorCisgPGNoYXB0ZXIgaWQ9ImNyZWRpdHMiPgorICA8dGl0bGU+VGhhbmtzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoYW5rcyB0byBBbmRpIEtsZWVuIGZvciB0aGUgaWRlYSwgYW5zd2VyaW5nIG15IHF1ZXN0aW9ucywgZml4aW5nCisgICBteSBtaXN0YWtlcywgZmlsbGluZyBjb250ZW50LCBldGMuICBQaGlsaXBwIFJ1bXBmIGZvciBtb3JlIHNwZWxsaW5nCisgICBhbmQgY2xhcml0eSBmaXhlcywgYW5kIHNvbWUgZXhjZWxsZW50IG5vbi1vYnZpb3VzIHBvaW50cy4gIFdlcm5lcgorICAgQWxtZXNiZXJnZXIgZm9yIGdpdmluZyBtZSBhIGdyZWF0IHN1bW1hcnkgb2YKKyAgIDxmdW5jdGlvbj5kaXNhYmxlX2lycSgpPC9mdW5jdGlvbj4sIGFuZCBKZXMgU29yZW5zZW4gYW5kIEFuZHJlYQorICAgQXJjYW5nZWxpIGFkZGVkIGNhdmVhdHMuIE1pY2hhZWwgRWxpemFiZXRoIENoYXN0YWluIGZvciBjaGVja2luZworICAgYW5kIGFkZGluZyB0byB0aGUgQ29uZmlndXJlIHNlY3Rpb24uIDwhLS0gUnVzdHkgaW5zaXN0ZWQgb24gdGhpcworICAgYml0OyBJIGRpZG4ndCBkbyBpdCEgLS0+IFRlbHNhIEd3eW5uZSBmb3IgdGVhY2hpbmcgbWUgRG9jQm9vay4gCisgIDwvcGFyYT4KKyA8L2NoYXB0ZXI+Cis8L2Jvb2s+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkYzJkZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsCkBAIC0wLDAgKzEsMjA4OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJMS0xvY2tpbmdHdWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+VW5yZWxpYWJsZSBHdWlkZSBUbyBMb2NraW5nPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5SdXN0eTwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPlJ1c3NlbGw8L3N1cm5hbWU+CisgICAgPGFmZmlsaWF0aW9uPgorICAgICA8YWRkcmVzcz4KKyAgICAgIDxlbWFpbD5ydXN0eUBydXN0Y29ycC5jb20uYXU8L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDAzPC95ZWFyPgorICAgPGhvbGRlcj5SdXN0eSBSdXNzZWxsPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworIDx0b2M+PC90b2M+CisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgIDxwYXJhPgorICAgICBXZWxjb21lLCB0byBSdXN0eSdzIFJlbWFya2FibHkgVW5yZWxpYWJsZSBHdWlkZSB0byBLZXJuZWwKKyAgICAgTG9ja2luZyBpc3N1ZXMuICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgbG9ja2luZyBzeXN0ZW1zIGluCisgICAgIHRoZSBMaW51eCBLZXJuZWwgaW4gMi42LgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgIFdpdGggdGhlIHdpZGUgYXZhaWxhYmlsaXR5IG9mIEh5cGVyVGhyZWFkaW5nLCBhbmQgPGZpcnN0dGVybQorICAgICBsaW5rZW5kPSJnbG9zcy1wcmVlbXB0aW9uIj5wcmVlbXB0aW9uIDwvZmlyc3R0ZXJtPiBpbiB0aGUgTGludXgKKyAgICAgS2VybmVsLCBldmVyeW9uZSBoYWNraW5nIG9uIHRoZSBrZXJuZWwgbmVlZHMgdG8ga25vdyB0aGUKKyAgICAgZnVuZGFtZW50YWxzIG9mIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGZvcgorICAgICA8Zmlyc3R0ZXJtIGxpbmtlbmQ9Imdsb3NzLXNtcCI+PGFjcm9ueW0+U01QPC9hY3JvbnltPjwvZmlyc3R0ZXJtPi4KKyAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgICA8Y2hhcHRlciBpZD0icmFjZXMiPgorICAgIDx0aXRsZT5UaGUgUHJvYmxlbSBXaXRoIENvbmN1cnJlbmN5PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIChTa2lwIHRoaXMgaWYgeW91IGtub3cgd2hhdCBhIFJhY2UgQ29uZGl0aW9uIGlzKS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBJbiBhIG5vcm1hbCBwcm9ncmFtLCB5b3UgY2FuIGluY3JlbWVudCBhIGNvdW50ZXIgbGlrZSBzbzoKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPgorICAgICAgdmVyeV9pbXBvcnRhbnRfY291bnQrKzsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIGlzIHdoYXQgdGhleSB3b3VsZCBleHBlY3QgdG8gaGFwcGVuOgorICAgIDwvcGFyYT4KKworICAgIDx0YWJsZT4KKyAgICAgPHRpdGxlPkV4cGVjdGVkIFJlc3VsdHM8L3RpdGxlPgorCisgICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorCisgICAgICA8dGhlYWQ+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5Pkluc3RhbmNlIDE8L2VudHJ5PgorICAgICAgICA8ZW50cnk+SW5zdGFuY2UgMjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorCisgICAgICA8dGJvZHk+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PnJlYWQgdmVyeV9pbXBvcnRhbnRfY291bnQgKDUpPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PmFkZCAxICg2KTwvZW50cnk+CisgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT53cml0ZSB2ZXJ5X2ltcG9ydGFudF9jb3VudCAoNik8L2VudHJ5PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PnJlYWQgdmVyeV9pbXBvcnRhbnRfY291bnQgKDYpPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PmFkZCAxICg3KTwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgIDxlbnRyeT53cml0ZSB2ZXJ5X2ltcG9ydGFudF9jb3VudCAoNyk8L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgPC90Ym9keT4KKworICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHBhcmE+CisgICAgIFRoaXMgaXMgd2hhdCBtaWdodCBoYXBwZW46CisgICAgPC9wYXJhPgorCisgICAgPHRhYmxlPgorICAgICA8dGl0bGU+UG9zc2libGUgUmVzdWx0czwvdGl0bGU+CisKKyAgICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICAgICA8dGhlYWQ+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5Pkluc3RhbmNlIDE8L2VudHJ5PgorICAgICAgICA8ZW50cnk+SW5zdGFuY2UgMjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorCisgICAgICA8dGJvZHk+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PnJlYWQgdmVyeV9pbXBvcnRhbnRfY291bnQgKDUpPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgIDxlbnRyeT5yZWFkIHZlcnlfaW1wb3J0YW50X2NvdW50ICg1KTwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PmFkZCAxICg2KTwvZW50cnk+CisgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICA8ZW50cnk+YWRkIDEgKDYpPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+d3JpdGUgdmVyeV9pbXBvcnRhbnRfY291bnQgKDYpPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgIDxlbnRyeT53cml0ZSB2ZXJ5X2ltcG9ydGFudF9jb3VudCAoNik8L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgPC90Ym9keT4KKyAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDxzZWN0MSBpZD0icmFjZS1jb25kaXRpb24iPgorICAgIDx0aXRsZT5SYWNlIENvbmRpdGlvbnMgYW5kIENyaXRpY2FsIFJlZ2lvbnM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBvdmVybGFwLCB3aGVyZSB0aGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlCisgICAgICByZWxhdGl2ZSB0aW1pbmcgb2YgbXVsdGlwbGUgdGFza3MsIGlzIGNhbGxlZCBhIDxmaXJzdHRlcm0+cmFjZSBjb25kaXRpb248L2ZpcnN0dGVybT4uCisgICAgICBUaGUgcGllY2Ugb2YgY29kZSBjb250YWluaW5nIHRoZSBjb25jdXJyZW5jeSBpc3N1ZSBpcyBjYWxsZWQgYQorICAgICAgPGZpcnN0dGVybT5jcml0aWNhbCByZWdpb248L2ZpcnN0dGVybT4uICBBbmQgZXNwZWNpYWxseSBzaW5jZSBMaW51eCBzdGFydGluZyBydW5uaW5nCisgICAgICBvbiBTTVAgbWFjaGluZXMsIHRoZXkgYmVjYW1lIG9uZSBvZiB0aGUgbWFqb3IgaXNzdWVzIGluIGtlcm5lbAorICAgICAgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBQcmVlbXB0aW9uIGNhbiBoYXZlIHRoZSBzYW1lIGVmZmVjdCwgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZQorICAgICAgQ1BVOiBieSBwcmVlbXB0aW5nIG9uZSB0YXNrIGR1cmluZyB0aGUgY3JpdGljYWwgcmVnaW9uLCB3ZSBoYXZlCisgICAgICBleGFjdGx5IHRoZSBzYW1lIHJhY2UgY29uZGl0aW9uLiAgSW4gdGhpcyBjYXNlIHRoZSB0aHJlYWQgd2hpY2gKKyAgICAgIHByZWVtcHRzIG1pZ2h0IHJ1biB0aGUgY3JpdGljYWwgcmVnaW9uIGl0c2VsZi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgc29sdXRpb24gaXMgdG8gcmVjb2duaXplIHdoZW4gdGhlc2Ugc2ltdWx0YW5lb3VzIGFjY2Vzc2VzCisgICAgICBvY2N1ciwgYW5kIHVzZSBsb2NrcyB0byBtYWtlIHN1cmUgdGhhdCBvbmx5IG9uZSBpbnN0YW5jZSBjYW4KKyAgICAgIGVudGVyIHRoZSBjcml0aWNhbCByZWdpb24gYXQgYW55IHRpbWUuICBUaGVyZSBhcmUgbWFueQorICAgICAgZnJpZW5kbHkgcHJpbWl0aXZlcyBpbiB0aGUgTGludXgga2VybmVsIHRvIGhlbHAgeW91IGRvIHRoaXMuCisgICAgICBBbmQgdGhlbiB0aGVyZSBhcmUgdGhlIHVuZnJpZW5kbHkgcHJpbWl0aXZlcywgYnV0IEknbGwgcHJldGVuZAorICAgICAgdGhleSBkb24ndCBleGlzdC4KKyAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJsb2NrcyI+CisgICA8dGl0bGU+TG9ja2luZyBpbiB0aGUgTGludXggS2VybmVsPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgIElmIEkgY291bGQgZ2l2ZSB5b3Ugb25lIHBpZWNlIG9mIGFkdmljZTogbmV2ZXIgc2xlZXAgd2l0aCBhbnlvbmUKKyAgICAgY3JhemllciB0aGFuIHlvdXJzZWxmLiAgQnV0IGlmIEkgaGFkIHRvIGdpdmUgeW91IGFkdmljZSBvbgorICAgICBsb2NraW5nOiA8ZW1waGFzaXM+a2VlcCBpdCBzaW1wbGU8L2VtcGhhc2lzPi4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgIEJlIHJlbHVjdGFudCB0byBpbnRyb2R1Y2UgbmV3IGxvY2tzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgU3RyYW5nZWx5IGVub3VnaCwgdGhpcyBsYXN0IG9uZSBpcyB0aGUgZXhhY3QgcmV2ZXJzZSBvZiBteSBhZHZpY2Ugd2hlbgorICAgICB5b3UgPGVtcGhhc2lzPmhhdmU8L2VtcGhhc2lzPiBzbGVwdCB3aXRoIHNvbWVvbmUgY3JhemllciB0aGFuIHlvdXJzZWxmLgorICAgICBBbmQgeW91IHNob3VsZCB0aGluayBhYm91dCBnZXR0aW5nIGEgYmlnIGRvZy4KKyAgIDwvcGFyYT4KKworICAgPHNlY3QxIGlkPSJsb2NrLWludHJvIj4KKyAgIDx0aXRsZT5Ud28gTWFpbiBUeXBlcyBvZiBLZXJuZWwgTG9ja3M6IFNwaW5sb2NrcyBhbmQgU2VtYXBob3JlczwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgICBUaGVyZSBhcmUgdHdvIG1haW4gdHlwZXMgb2Yga2VybmVsIGxvY2tzLiAgVGhlIGZ1bmRhbWVudGFsIHR5cGUKKyAgICAgaXMgdGhlIHNwaW5sb2NrIAorICAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2FzbS9zcGlubG9jay5oPC9maWxlbmFtZT4pLAorICAgICB3aGljaCBpcyBhIHZlcnkgc2ltcGxlIHNpbmdsZS1ob2xkZXIgbG9jazogaWYgeW91IGNhbid0IGdldCB0aGUgCisgICAgIHNwaW5sb2NrLCB5b3Uga2VlcCB0cnlpbmcgKHNwaW5uaW5nKSB1bnRpbCB5b3UgY2FuLiAgU3BpbmxvY2tzIGFyZSAKKyAgICAgdmVyeSBzbWFsbCBhbmQgZmFzdCwgYW5kIGNhbiBiZSB1c2VkIGFueXdoZXJlLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgIFRoZSBzZWNvbmQgdHlwZSBpcyBhIHNlbWFwaG9yZQorICAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaDwvZmlsZW5hbWU+KTogaXQKKyAgICAgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBob2xkZXIgYXQgYW55IHRpbWUgKHRoZSBudW1iZXIgZGVjaWRlZCBhdAorICAgICBpbml0aWFsaXphdGlvbiB0aW1lKSwgYWx0aG91Z2ggaXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGFzIGEKKyAgICAgc2luZ2xlLWhvbGRlciBsb2NrIChhIG11dGV4KS4gIElmIHlvdSBjYW4ndCBnZXQgYSBzZW1hcGhvcmUsCisgICAgIHlvdXIgdGFzayB3aWxsIHB1dCBpdHNlbGYgb24gdGhlIHF1ZXVlLCBhbmQgYmUgd29rZW4gdXAgd2hlbiB0aGUKKyAgICAgc2VtYXBob3JlIGlzIHJlbGVhc2VkLiAgVGhpcyBtZWFucyB0aGUgQ1BVIHdpbGwgZG8gc29tZXRoaW5nCisgICAgIGVsc2Ugd2hpbGUgeW91IGFyZSB3YWl0aW5nLCBidXQgdGhlcmUgYXJlIG1hbnkgY2FzZXMgd2hlbiB5b3UKKyAgICAgc2ltcGx5IGNhbid0IHNsZWVwIChzZWUgPHhyZWYgbGlua2VuZD0ic2xlZXBpbmctdGhpbmdzIi8+KSwgYW5kIHNvCisgICAgIGhhdmUgdG8gdXNlIGEgc3BpbmxvY2sgaW5zdGVhZC4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgICBOZWl0aGVyIHR5cGUgb2YgbG9jayBpcyByZWN1cnNpdmU6IHNlZQorICAgICA8eHJlZiBsaW5rZW5kPSJkZWFkbG9jayIvPi4KKyAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisgCisgICA8c2VjdDEgaWQ9InVuaXByb2Nlc3NvciI+CisgICAgPHRpdGxlPkxvY2tzIGFuZCBVbmlwcm9jZXNzb3IgS2VybmVsczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIEZvciBrZXJuZWxzIGNvbXBpbGVkIHdpdGhvdXQgPHN5bWJvbD5DT05GSUdfU01QPC9zeW1ib2w+LCBhbmQKKyAgICAgIHdpdGhvdXQgPHN5bWJvbD5DT05GSUdfUFJFRU1QVDwvc3ltYm9sPiBzcGlubG9ja3MgZG8gbm90IGV4aXN0IGF0CisgICAgICBhbGwuICBUaGlzIGlzIGFuIGV4Y2VsbGVudCBkZXNpZ24gZGVjaXNpb246IHdoZW4gbm8tb25lIGVsc2UgY2FuCisgICAgICBydW4gYXQgdGhlIHNhbWUgdGltZSwgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGhhdmUgYSBsb2NrLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRob3V0IDxzeW1ib2w+Q09ORklHX1NNUDwvc3ltYm9sPiwKKyAgICAgIGJ1dCA8c3ltYm9sPkNPTkZJR19QUkVFTVBUPC9zeW1ib2w+IGlzIHNldCwgdGhlbiBzcGlubG9ja3MKKyAgICAgIHNpbXBseSBkaXNhYmxlIHByZWVtcHRpb24sIHdoaWNoIGlzIHN1ZmZpY2llbnQgdG8gcHJldmVudCBhbnkKKyAgICAgIHJhY2VzLiAgRm9yIG1vc3QgcHVycG9zZXMsIHdlIGNhbiB0aGluayBvZiBwcmVlbXB0aW9uIGFzCisgICAgICBlcXVpdmFsZW50IHRvIFNNUCwgYW5kIG5vdCB3b3JyeSBhYm91dCBpdCBzZXBhcmF0ZWx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgWW91IHNob3VsZCBhbHdheXMgdGVzdCB5b3VyIGxvY2tpbmcgY29kZSB3aXRoIDxzeW1ib2w+Q09ORklHX1NNUDwvc3ltYm9sPgorICAgICAgYW5kIDxzeW1ib2w+Q09ORklHX1BSRUVNUFQ8L3N5bWJvbD4gZW5hYmxlZCwgZXZlbiBpZiB5b3UgZG9uJ3QgaGF2ZSBhbiBTTVAgdGVzdCBib3gsIGJlY2F1c2UgaXQKKyAgICAgIHdpbGwgc3RpbGwgY2F0Y2ggc29tZSBraW5kcyBvZiBsb2NraW5nIGJ1Z3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBTZW1hcGhvcmVzIHN0aWxsIGV4aXN0LCBiZWNhdXNlIHRoZXkgYXJlIHJlcXVpcmVkIGZvcgorICAgICAgc3luY2hyb25pemF0aW9uIGJldHdlZW4gPGZpcnN0dGVybSBsaW5rZW5kPSJnbG9zcy11c2VyY29udGV4dCI+dXNlciAKKyAgICAgIGNvbnRleHRzPC9maXJzdHRlcm0+LCBhcyB3ZSB3aWxsIHNlZSBiZWxvdy4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJ1c2VyY29udGV4dGxvY2tpbmciPgorICAgICA8dGl0bGU+TG9ja2luZyBPbmx5IEluIFVzZXIgQ29udGV4dDwvdGl0bGU+CisKKyAgICAgPHBhcmE+CisgICAgICAgSWYgeW91IGhhdmUgYSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBvbmx5IGV2ZXIgYWNjZXNzZWQgZnJvbQorICAgICAgIHVzZXIgY29udGV4dCwgdGhlbiB5b3UgY2FuIHVzZSBhIHNpbXBsZSBzZW1hcGhvcmUKKyAgICAgICAoPGZpbGVuYW1lPmxpbnV4L2FzbS9zZW1hcGhvcmUuaDwvZmlsZW5hbWU+KSB0byBwcm90ZWN0IGl0LiAgVGhpcyAKKyAgICAgICBpcyB0aGUgbW9zdCB0cml2aWFsIGNhc2U6IHlvdSBpbml0aWFsaXplIHRoZSBzZW1hcGhvcmUgdG8gdGhlIG51bWJlciAKKyAgICAgICBvZiByZXNvdXJjZXMgYXZhaWxhYmxlICh1c3VhbGx5IDEpLCBhbmQgY2FsbAorICAgICAgIDxmdW5jdGlvbj5kb3duX2ludGVycnVwdGlibGUoKTwvZnVuY3Rpb24+IHRvIGdyYWIgdGhlIHNlbWFwaG9yZSwgYW5kIAorICAgICAgIDxmdW5jdGlvbj51cCgpPC9mdW5jdGlvbj4gdG8gcmVsZWFzZSBpdC4gIFRoZXJlIGlzIGFsc28gYSAKKyAgICAgICA8ZnVuY3Rpb24+ZG93bigpPC9mdW5jdGlvbj4sIHdoaWNoIHNob3VsZCBiZSBhdm9pZGVkLCBiZWNhdXNlIGl0IAorICAgICAgIHdpbGwgbm90IHJldHVybiBpZiBhIHNpZ25hbCBpcyByZWNlaXZlZC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIEV4YW1wbGU6IDxmaWxlbmFtZT5saW51eC9uZXQvY29yZS9uZXRmaWx0ZXIuYzwvZmlsZW5hbWU+IGFsbG93cyAKKyAgICAgICByZWdpc3RyYXRpb24gb2YgbmV3IDxmdW5jdGlvbj5zZXRzb2Nrb3B0KCk8L2Z1bmN0aW9uPiBhbmQgCisgICAgICAgPGZ1bmN0aW9uPmdldHNvY2tvcHQoKTwvZnVuY3Rpb24+IGNhbGxzLCB3aXRoCisgICAgICAgPGZ1bmN0aW9uPm5mX3JlZ2lzdGVyX3NvY2tvcHQoKTwvZnVuY3Rpb24+LiAgUmVnaXN0cmF0aW9uIGFuZCAKKyAgICAgICBkZS1yZWdpc3RyYXRpb24gYXJlIG9ubHkgZG9uZSBvbiBtb2R1bGUgbG9hZCBhbmQgdW5sb2FkIChhbmQgYm9vdCAKKyAgICAgICB0aW1lLCB3aGVyZSB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSksIGFuZCB0aGUgbGlzdCBvZiByZWdpc3RyYXRpb25zIAorICAgICAgIGlzIG9ubHkgY29uc3VsdGVkIGZvciBhbiB1bmtub3duIDxmdW5jdGlvbj5zZXRzb2Nrb3B0KCk8L2Z1bmN0aW9uPgorICAgICAgIG9yIDxmdW5jdGlvbj5nZXRzb2Nrb3B0KCk8L2Z1bmN0aW9uPiBzeXN0ZW0gY2FsbC4gIFRoZSAKKyAgICAgICA8dmFybmFtZT5uZl9zb2Nrb3B0X211dGV4PC92YXJuYW1lPiBpcyBwZXJmZWN0IHRvIHByb3RlY3QgdGhpcywKKyAgICAgICBlc3BlY2lhbGx5IHNpbmNlIHRoZSBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IGNhbGxzIG1heSB3ZWxsCisgICAgICAgc2xlZXAuCisgICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0ibG9jay11c2VyLWJoIj4KKyAgICA8dGl0bGU+TG9ja2luZyBCZXR3ZWVuIFVzZXIgQ29udGV4dCBhbmQgU29mdGlycXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBJZiBhIDxmaXJzdHRlcm0gbGlua2VuZD0iZ2xvc3Mtc29mdGlycSI+c29mdGlycTwvZmlyc3R0ZXJtPiBzaGFyZXMKKyAgICAgIGRhdGEgd2l0aCB1c2VyIGNvbnRleHQsIHlvdSBoYXZlIHR3byBwcm9ibGVtcy4gIEZpcnN0bHksIHRoZSBjdXJyZW50IAorICAgICAgdXNlciBjb250ZXh0IGNhbiBiZSBpbnRlcnJ1cHRlZCBieSBhIHNvZnRpcnEsIGFuZCBzZWNvbmRseSwgdGhlCisgICAgICBjcml0aWNhbCByZWdpb24gY291bGQgYmUgZW50ZXJlZCBmcm9tIGFub3RoZXIgQ1BVLiAgVGhpcyBpcyB3aGVyZQorICAgICAgPGZ1bmN0aW9uPnNwaW5fbG9ja19iaCgpPC9mdW5jdGlvbj4gCisgICAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmg8L2ZpbGVuYW1lPikgaXMKKyAgICAgIHVzZWQuICBJdCBkaXNhYmxlcyBzb2Z0aXJxcyBvbiB0aGF0IENQVSwgdGhlbiBncmFicyB0aGUgbG9jay4KKyAgICAgIDxmdW5jdGlvbj5zcGluX3VubG9ja19iaCgpPC9mdW5jdGlvbj4gZG9lcyB0aGUgcmV2ZXJzZS4gIChUaGUKKyAgICAgICdfYmgnIHN1ZmZpeCBpcyBhIGhpc3RvcmljYWwgcmVmZXJlbmNlIHRvICJCb3R0b20gSGFsdmVzIiwgdGhlCisgICAgICBvbGQgbmFtZSBmb3Igc29mdHdhcmUgaW50ZXJydXB0cy4gIEl0IHNob3VsZCByZWFsbHkgYmUKKyAgICAgIGNhbGxlZCBzcGluX2xvY2tfc29mdGlycSgpJyBpbiBhIHBlcmZlY3Qgd29ybGQpLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyB1c2UgPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnEoKTwvZnVuY3Rpb24+CisgICAgICBvciA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycXNhdmUoKTwvZnVuY3Rpb24+IGhlcmUsIHdoaWNoIHN0b3AKKyAgICAgIGhhcmR3YXJlIGludGVycnVwdHMgYXMgd2VsbDogc2VlIDx4cmVmIGxpbmtlbmQ9ImhhcmRpcnEtY29udGV4dCIvPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgd29ya3MgcGVyZmVjdGx5IGZvciA8Zmlyc3R0ZXJtIGxpbmtlbmQ9Imdsb3NzLXVwIj48YWNyb255bT5VUAorICAgICAgPC9hY3JvbnltPjwvZmlyc3R0ZXJtPiBhcyB3ZWxsOiB0aGUgc3BpbiBsb2NrIHZhbmlzaGVzLCBhbmQgdGhpcyBtYWNybyAKKyAgICAgIHNpbXBseSBiZWNvbWVzIDxmdW5jdGlvbj5sb2NhbF9iaF9kaXNhYmxlKCk8L2Z1bmN0aW9uPgorICAgICAgKDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDwvZmlsZW5hbWU+KSwgd2hpY2gKKyAgICAgIHByb3RlY3RzIHlvdSBmcm9tIHRoZSBzb2Z0aXJxIGJlaW5nIHJ1bi4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QxPgorCisgICA8c2VjdDEgaWQ9ImxvY2stdXNlci10YXNrbGV0Ij4KKyAgICA8dGl0bGU+TG9ja2luZyBCZXR3ZWVuIFVzZXIgQ29udGV4dCBhbmQgVGFza2xldHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgYWJvdmUsIGJlY2F1c2UgPGZpcnN0dGVybQorICAgICAgbGlua2VuZD0iZ2xvc3MtdGFza2xldCI+dGFza2xldHM8L2ZpcnN0dGVybT4gYXJlIGFjdHVhbGx5IHJ1bgorICAgICAgZnJvbSBhIHNvZnRpcnEuCisgICAgPC9wYXJhPgorICAgPC9zZWN0MT4KKworICAgPHNlY3QxIGlkPSJsb2NrLXVzZXItdGltZXJzIj4KKyAgICA8dGl0bGU+TG9ja2luZyBCZXR3ZWVuIFVzZXIgQ29udGV4dCBhbmQgVGltZXJzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhpcywgdG9vLCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGFib3ZlLCBiZWNhdXNlIDxmaXJzdHRlcm0KKyAgICAgIGxpbmtlbmQ9Imdsb3NzLXRpbWVycyI+dGltZXJzPC9maXJzdHRlcm0+IGFyZSBhY3R1YWxseSBydW4gZnJvbQorICAgICAgYSBzb2Z0aXJxLiAgRnJvbSBhIGxvY2tpbmcgcG9pbnQgb2YgdmlldywgdGFza2xldHMgYW5kIHRpbWVycworICAgICAgYXJlIGlkZW50aWNhbC4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QxPgorCisgICA8c2VjdDEgaWQ9ImxvY2stdGFza2xldHMiPgorICAgIDx0aXRsZT5Mb2NraW5nIEJldHdlZW4gVGFza2xldHMvVGltZXJzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgU29tZXRpbWVzIGEgdGFza2xldCBvciB0aW1lciBtaWdodCB3YW50IHRvIHNoYXJlIGRhdGEgd2l0aAorICAgICAgYW5vdGhlciB0YXNrbGV0IG9yIHRpbWVyLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0ibG9jay10YXNrbGV0cy1zYW1lIj4KKyAgICAgPHRpdGxlPlRoZSBTYW1lIFRhc2tsZXQvVGltZXI8L3RpdGxlPgorICAgICA8cGFyYT4KKyAgICAgICBTaW5jZSBhIHRhc2tsZXQgaXMgbmV2ZXIgcnVuIG9uIHR3byBDUFVzIGF0IG9uY2UsIHlvdSBkb24ndAorICAgICAgIG5lZWQgdG8gd29ycnkgYWJvdXQgeW91ciB0YXNrbGV0IGJlaW5nIHJlZW50cmFudCAocnVubmluZworICAgICAgIHR3aWNlIGF0IG9uY2UpLCBldmVuIG9uIFNNUC4KKyAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDIgaWQ9ImxvY2stdGFza2xldHMtZGlmZmVyZW50Ij4KKyAgICAgPHRpdGxlPkRpZmZlcmVudCBUYXNrbGV0cy9UaW1lcnM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAgICAgICBJZiBhbm90aGVyIHRhc2tsZXQvdGltZXIgd2FudHMKKyAgICAgICB0byBzaGFyZSBkYXRhIHdpdGggeW91ciB0YXNrbGV0IG9yIHRpbWVyICwgeW91IHdpbGwgYm90aCBuZWVkIHRvIHVzZQorICAgICAgIDxmdW5jdGlvbj5zcGluX2xvY2soKTwvZnVuY3Rpb24+IGFuZAorICAgICAgIDxmdW5jdGlvbj5zcGluX3VubG9jaygpPC9mdW5jdGlvbj4gY2FsbHMuICAKKyAgICAgICA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2JoKCk8L2Z1bmN0aW9uPiBpcworICAgICAgIHVubmVjZXNzYXJ5IGhlcmUsIGFzIHlvdSBhcmUgYWxyZWFkeSBpbiBhIHRhc2tsZXQsIGFuZAorICAgICAgIG5vbmUgd2lsbCBiZSBydW4gb24gdGhlIHNhbWUgQ1BVLgorICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKyAgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0ibG9jay1zb2Z0aXJxcyI+CisgICAgPHRpdGxlPkxvY2tpbmcgQmV0d2VlbiBTb2Z0aXJxczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIE9mdGVuIGEgc29mdGlycSBtaWdodAorICAgICAgd2FudCB0byBzaGFyZSBkYXRhIHdpdGggaXRzZWxmIG9yIGEgdGFza2xldC90aW1lci4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdDIgaWQ9ImxvY2stc29mdGlycXMtc2FtZSI+CisgICAgIDx0aXRsZT5UaGUgU2FtZSBTb2Z0aXJxPC90aXRsZT4KKworICAgICA8cGFyYT4KKyAgICAgICBUaGUgc2FtZSBzb2Z0aXJxIGNhbiBydW4gb24gdGhlIG90aGVyIENQVXM6IHlvdSBjYW4gdXNlIGEKKyAgICAgICBwZXItQ1BVIGFycmF5IChzZWUgPHhyZWYgbGlua2VuZD0icGVyLWNwdSIvPikgZm9yIGJldHRlcgorICAgICAgIHBlcmZvcm1hbmNlLiAgSWYgeW91J3JlIGdvaW5nIHNvIGZhciBhcyB0byB1c2UgYSBzb2Z0aXJxLAorICAgICAgIHlvdSBwcm9iYWJseSBjYXJlIGFib3V0IHNjYWxhYmxlIHBlcmZvcm1hbmNlIGVub3VnaAorICAgICAgIHRvIGp1c3RpZnkgdGhlIGV4dHJhIGNvbXBsZXhpdHkuCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgICBZb3UnbGwgbmVlZCB0byB1c2UgPGZ1bmN0aW9uPnNwaW5fbG9jaygpPC9mdW5jdGlvbj4gYW5kIAorICAgICAgIDxmdW5jdGlvbj5zcGluX3VubG9jaygpPC9mdW5jdGlvbj4gZm9yIHNoYXJlZCBkYXRhLgorICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ibG9jay1zb2Z0aXJxcy1kaWZmZXJlbnQiPgorICAgICA8dGl0bGU+RGlmZmVyZW50IFNvZnRpcnFzPC90aXRsZT4KKworICAgICA8cGFyYT4KKyAgICAgICBZb3UnbGwgbmVlZCB0byB1c2UgPGZ1bmN0aW9uPnNwaW5fbG9jaygpPC9mdW5jdGlvbj4gYW5kCisgICAgICAgPGZ1bmN0aW9uPnNwaW5fdW5sb2NrKCk8L2Z1bmN0aW9uPiBmb3Igc2hhcmVkIGRhdGEsIHdoZXRoZXIgaXQKKyAgICAgICBiZSBhIHRpbWVyLCB0YXNrbGV0LCBkaWZmZXJlbnQgc29mdGlycSBvciB0aGUgc2FtZSBvciBhbm90aGVyCisgICAgICAgc29mdGlycTogYW55IG9mIHRoZW0gY291bGQgYmUgcnVubmluZyBvbiBhIGRpZmZlcmVudCBDUFUuCisgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJoYXJkaXJxLWNvbnRleHQiPgorICAgPHRpdGxlPkhhcmQgSVJRIENvbnRleHQ8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICAgSGFyZHdhcmUgaW50ZXJydXB0cyB1c3VhbGx5IGNvbW11bmljYXRlIHdpdGggYQorICAgICB0YXNrbGV0IG9yIHNvZnRpcnEuICBGcmVxdWVudGx5IHRoaXMgaW52b2x2ZXMgcHV0dGluZyB3b3JrIGluIGEKKyAgICAgcXVldWUsIHdoaWNoIHRoZSBzb2Z0aXJxIHdpbGwgdGFrZSBvdXQuCisgICA8L3BhcmE+CisKKyAgIDxzZWN0MSBpZD0iaGFyZGlycS1zb2Z0aXJxIj4KKyAgICA8dGl0bGU+TG9ja2luZyBCZXR3ZWVuIEhhcmQgSVJRIGFuZCBTb2Z0aXJxcy9UYXNrbGV0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIGEgaGFyZHdhcmUgaXJxIGhhbmRsZXIgc2hhcmVzIGRhdGEgd2l0aCBhIHNvZnRpcnEsIHlvdSBoYXZlCisgICAgICB0d28gY29uY2VybnMuICBGaXJzdGx5LCB0aGUgc29mdGlycSBwcm9jZXNzaW5nIGNhbiBiZQorICAgICAgaW50ZXJydXB0ZWQgYnkgYSBoYXJkd2FyZSBpbnRlcnJ1cHQsIGFuZCBzZWNvbmRseSwgdGhlCisgICAgICBjcml0aWNhbCByZWdpb24gY291bGQgYmUgZW50ZXJlZCBieSBhIGhhcmR3YXJlIGludGVycnVwdCBvbgorICAgICAgYW5vdGhlciBDUFUuICBUaGlzIGlzIHdoZXJlIDxmdW5jdGlvbj5zcGluX2xvY2tfaXJxKCk8L2Z1bmN0aW9uPiBpcyAKKyAgICAgIHVzZWQuICBJdCBpcyBkZWZpbmVkIHRvIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGF0IGNwdSwgdGhlbiBncmFiIAorICAgICAgdGhlIGxvY2suIDxmdW5jdGlvbj5zcGluX3VubG9ja19pcnEoKTwvZnVuY3Rpb24+IGRvZXMgdGhlIHJldmVyc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgaXJxIGhhbmRsZXIgZG9lcyBub3QgdG8gdXNlCisgICAgICA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycSgpPC9mdW5jdGlvbj4sIGJlY2F1c2UgdGhlIHNvZnRpcnEgY2Fubm90CisgICAgICBydW4gd2hpbGUgdGhlIGlycSBoYW5kbGVyIGlzIHJ1bm5pbmc6IGl0IGNhbiB1c2UKKyAgICAgIDxmdW5jdGlvbj5zcGluX2xvY2soKTwvZnVuY3Rpb24+LCB3aGljaCBpcyBzbGlnaHRseSBmYXN0ZXIuICBUaGUKKyAgICAgIG9ubHkgZXhjZXB0aW9uIHdvdWxkIGJlIGlmIGEgZGlmZmVyZW50IGhhcmR3YXJlIGlycSBoYW5kbGVyIHVzZXMKKyAgICAgIHRoZSBzYW1lIGxvY2s6IDxmdW5jdGlvbj5zcGluX2xvY2tfaXJxKCk8L2Z1bmN0aW9uPiB3aWxsIHN0b3AKKyAgICAgIHRoYXQgZnJvbSBpbnRlcnJ1cHRpbmcgdXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIHdvcmtzIHBlcmZlY3RseSBmb3IgVVAgYXMgd2VsbDogdGhlIHNwaW4gbG9jayB2YW5pc2hlcywKKyAgICAgIGFuZCB0aGlzIG1hY3JvIHNpbXBseSBiZWNvbWVzIDxmdW5jdGlvbj5sb2NhbF9pcnFfZGlzYWJsZSgpPC9mdW5jdGlvbj4KKyAgICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3NtcC5oPC9maWxlbmFtZT4pLCB3aGljaAorICAgICAgcHJvdGVjdHMgeW91IGZyb20gdGhlIHNvZnRpcnEvdGFza2xldC9CSCBiZWluZyBydW4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycXNhdmUoKTwvZnVuY3Rpb24+IAorICAgICAgKDxmaWxlbmFtZT5pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmg8L2ZpbGVuYW1lPikgaXMgYSB2YXJpYW50CisgICAgICB3aGljaCBzYXZlcyB3aGV0aGVyIGludGVycnVwdHMgd2VyZSBvbiBvciBvZmYgaW4gYSBmbGFncyB3b3JkLAorICAgICAgd2hpY2ggaXMgcGFzc2VkIHRvIDxmdW5jdGlvbj5zcGluX3VubG9ja19pcnFyZXN0b3JlKCk8L2Z1bmN0aW9uPi4gIFRoaXMKKyAgICAgIG1lYW5zIHRoYXQgdGhlIHNhbWUgY29kZSBjYW4gYmUgdXNlZCBpbnNpZGUgYW4gaGFyZCBpcnEgaGFuZGxlciAod2hlcmUKKyAgICAgIGludGVycnVwdHMgYXJlIGFscmVhZHkgb2ZmKSBhbmQgaW4gc29mdGlycXMgKHdoZXJlIHRoZSBpcnEKKyAgICAgIGRpc2FibGluZyBpcyByZXF1aXJlZCkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBOb3RlIHRoYXQgc29mdGlycXMgKGFuZCBoZW5jZSB0YXNrbGV0cyBhbmQgdGltZXJzKSBhcmUgcnVuIG9uCisgICAgICByZXR1cm4gZnJvbSBoYXJkd2FyZSBpbnRlcnJ1cHRzLCBzbworICAgICAgPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnEoKTwvZnVuY3Rpb24+IGFsc28gc3RvcHMgdGhlc2UuICBJbiB0aGF0CisgICAgICBzZW5zZSwgPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnFzYXZlKCk8L2Z1bmN0aW9uPiBpcyB0aGUgbW9zdAorICAgICAgZ2VuZXJhbCBhbmQgcG93ZXJmdWwgbG9ja2luZyBmdW5jdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgIDwvc2VjdDE+CisgICA8c2VjdDEgaWQ9ImhhcmRpcnEtaGFyZGlycSI+CisgICAgPHRpdGxlPkxvY2tpbmcgQmV0d2VlbiBUd28gSGFyZCBJUlEgSGFuZGxlcnM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgSXQgaXMgcmFyZSB0byBoYXZlIHRvIHNoYXJlIGRhdGEgYmV0d2VlbiB0d28gSVJRIGhhbmRsZXJzLCBidXQKKyAgICAgIGlmIHlvdSBkbywgPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnFzYXZlKCk8L2Z1bmN0aW9uPiBzaG91bGQgYmUKKyAgICAgIHVzZWQ6IGl0IGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB3aGV0aGVyIGFsbCBpbnRlcnJ1cHRzIGFyZQorICAgICAgZGlzYWJsZWQgaW5zaWRlIGlycSBoYW5kbGVycyB0aGVtc2VsdmVzLgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJjaGVhdHNoZWV0Ij4KKyAgIDx0aXRsZT5DaGVhdCBTaGVldCBGb3IgTG9ja2luZzwvdGl0bGU+CisgICA8cGFyYT4KKyAgICAgUGV0ZSBaYWl0Y2V2IGdpdmVzIHRoZSBmb2xsb3dpbmcgc3VtbWFyeToKKyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+CisgICAgICAgICAgSWYgeW91IGFyZSBpbiBhIHByb2Nlc3MgY29udGV4dCAoYW55IHN5c2NhbGwpIGFuZCB3YW50IHRvCisJbG9jayBvdGhlciBwcm9jZXNzIG91dCwgdXNlIGEgc2VtYXBob3JlLiAgWW91IGNhbiB0YWtlIGEgc2VtYXBob3JlCisJYW5kIHNsZWVwICg8ZnVuY3Rpb24+Y29weV9mcm9tX3VzZXIqKDwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPmttYWxsb2MoeCxHRlBfS0VSTkVMKTwvZnVuY3Rpb24+KS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+CisJT3RoZXJ3aXNlICg9PSBkYXRhIGNhbiBiZSB0b3VjaGVkIGluIGFuIGludGVycnVwdCksIHVzZQorCTxmdW5jdGlvbj5zcGluX2xvY2tfaXJxc2F2ZSgpPC9mdW5jdGlvbj4gYW5kCisJPGZ1bmN0aW9uPnNwaW5fdW5sb2NrX2lycXJlc3RvcmUoKTwvZnVuY3Rpb24+LgorCTwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+CisJQXZvaWQgaG9sZGluZyBzcGlubG9jayBmb3IgbW9yZSB0aGFuIDUgbGluZXMgb2YgY29kZSBhbmQKKwlhY3Jvc3MgYW55IGZ1bmN0aW9uIGNhbGwgKGV4Y2VwdCBhY2Nlc3NvcnMgbGlrZQorCTxmdW5jdGlvbj5yZWFkYjwvZnVuY3Rpb24+KS4KKwk8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICA8c2VjdDEgaWQ9Im1pbmltdW0tbG9jay1yZXFpcmVtZW50cyI+CisgICA8dGl0bGU+VGFibGUgb2YgTWluaW11bSBSZXF1aXJlbWVudHM8L3RpdGxlPgorCisgICA8cGFyYT4gVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgPGVtcGhhc2lzPm1pbmltdW08L2VtcGhhc2lzPgorCWxvY2tpbmcgcmVxdWlyZW1lbnRzIGJldHdlZW4gdmFyaW91cyBjb250ZXh0cy4gIEluIHNvbWUgY2FzZXMsCisJdGhlIHNhbWUgY29udGV4dCBjYW4gb25seSBiZSBydW5uaW5nIG9uIG9uZSBDUFUgYXQgYSB0aW1lLCBzbworCW5vIGxvY2tpbmcgaXMgcmVxdWlyZWQgZm9yIHRoYXQgY29udGV4dCAoZWcuIGEgcGFydGljdWxhcgorCXRocmVhZCBjYW4gb25seSBydW4gb24gb25lIENQVSBhdCBhIHRpbWUsIGJ1dCBpZiBpdCBuZWVkcworCXNoYXJlcyBkYXRhIHdpdGggYW5vdGhlciB0aHJlYWQsIGxvY2tpbmcgaXMgcmVxdWlyZWQpLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisJUmVtZW1iZXIgdGhlIGFkdmljZSBhYm92ZTogeW91IGNhbiBhbHdheXMgdXNlCisJPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnFzYXZlKCk8L2Z1bmN0aW9uPiwgd2hpY2ggaXMgYSBzdXBlcnNldAorCW9mIGFsbCBvdGhlciBzcGlubG9jayBwcmltaXRpdmVzLgorICAgPC9wYXJhPgorICAgPHRhYmxlPgorPHRpdGxlPlRhYmxlIG9mIExvY2tpbmcgUmVxdWlyZW1lbnRzPC90aXRsZT4KKzx0Z3JvdXAgY29scz0iMTEiPgorPHRib2R5PgorPHJvdz4KKzxlbnRyeT48L2VudHJ5PgorPGVudHJ5PklSUSBIYW5kbGVyIEE8L2VudHJ5PgorPGVudHJ5PklSUSBIYW5kbGVyIEI8L2VudHJ5PgorPGVudHJ5PlNvZnRpcnEgQTwvZW50cnk+Cis8ZW50cnk+U29mdGlycSBCPC9lbnRyeT4KKzxlbnRyeT5UYXNrbGV0IEE8L2VudHJ5PgorPGVudHJ5PlRhc2tsZXQgQjwvZW50cnk+Cis8ZW50cnk+VGltZXIgQTwvZW50cnk+Cis8ZW50cnk+VGltZXIgQjwvZW50cnk+Cis8ZW50cnk+VXNlciBDb250ZXh0IEE8L2VudHJ5PgorPGVudHJ5PlVzZXIgQ29udGV4dCBCPC9lbnRyeT4KKzwvcm93PgorCis8cm93PgorPGVudHJ5PklSUSBIYW5kbGVyIEE8L2VudHJ5PgorPGVudHJ5Pk5vbmU8L2VudHJ5PgorPC9yb3c+CisKKzxyb3c+Cis8ZW50cnk+SVJRIEhhbmRsZXIgQjwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycXNhdmU8L2VudHJ5PgorPGVudHJ5Pk5vbmU8L2VudHJ5PgorPC9yb3c+CisKKzxyb3c+Cis8ZW50cnk+U29mdGlycSBBPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPC9yb3c+CisKKzxyb3c+Cis8ZW50cnk+U29mdGlycSBCPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz4KKzxlbnRyeT5UYXNrbGV0IEE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5Ob25lPC9lbnRyeT4KKzwvcm93PgorCis8cm93PgorPGVudHJ5PlRhc2tsZXQgQjwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+Tm9uZTwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz4KKzxlbnRyeT5UaW1lciBBPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5Pk5vbmU8L2VudHJ5PgorPC9yb3c+CisKKzxyb3c+Cis8ZW50cnk+VGltZXIgQjwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5Pk5vbmU8L2VudHJ5PgorPC9yb3c+CisKKzxyb3c+Cis8ZW50cnk+VXNlciBDb250ZXh0IEE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgorPGVudHJ5Pk5vbmU8L2VudHJ5PgorPC9yb3c+CisKKzxyb3c+Cis8ZW50cnk+VXNlciBDb250ZXh0IEI8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgorPGVudHJ5PmRvd25faW50ZXJydXB0aWJsZTwvZW50cnk+Cis8ZW50cnk+Tm9uZTwvZW50cnk+Cis8L3Jvdz4KKworPC90Ym9keT4KKzwvdGdyb3VwPgorPC90YWJsZT4KKzwvc2VjdDE+Cis8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9IkV4YW1wbGVzIj4KKyAgIDx0aXRsZT5Db21tb24gRXhhbXBsZXM8L3RpdGxlPgorICAgIDxwYXJhPgorTGV0J3Mgc3RlcCB0aHJvdWdoIGEgc2ltcGxlIGV4YW1wbGU6IGEgY2FjaGUgb2YgbnVtYmVyIHRvIG5hbWUKK21hcHBpbmdzLiAgVGhlIGNhY2hlIGtlZXBzIGEgY291bnQgb2YgaG93IG9mdGVuIGVhY2ggb2YgdGhlIG9iamVjdHMgaXMKK3VzZWQsIGFuZCB3aGVuIGl0IGdldHMgZnVsbCwgdGhyb3dzIG91dCB0aGUgbGVhc3QgdXNlZCBvbmUuCisKKyAgICA8L3BhcmE+CisKKyAgIDxzZWN0MSBpZD0iZXhhbXBsZXMtdXNlcmNvbnRleHQiPgorICAgIDx0aXRsZT5BbGwgSW4gVXNlciBDb250ZXh0PC90aXRsZT4KKyAgICA8cGFyYT4KK0ZvciBvdXIgZmlyc3QgZXhhbXBsZSwgd2UgYXNzdW1lIHRoYXQgYWxsIG9wZXJhdGlvbnMgYXJlIGluIHVzZXIKK2NvbnRleHQgKGllLiBmcm9tIHN5c3RlbSBjYWxscyksIHNvIHdlIGNhbiBzbGVlcC4gIFRoaXMgbWVhbnMgd2UgY2FuCit1c2UgYSBzZW1hcGhvcmUgdG8gcHJvdGVjdCB0aGUgY2FjaGUgYW5kIGFsbCB0aGUgb2JqZWN0cyB3aXRoaW4KK2l0LiAgSGVyZSdzIHRoZSBjb2RlOgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4KKyNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CisjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OworI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OworI2luY2x1ZGUgJmx0O2FzbS9zZW1hcGhvcmUuaCZndDsKKyNpbmNsdWRlICZsdDthc20vZXJybm8uaCZndDsKKworc3RydWN0IG9iamVjdAoreworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisgICAgICAgIGludCBpZDsKKyAgICAgICAgY2hhciBuYW1lWzMyXTsKKyAgICAgICAgaW50IHBvcHVsYXJpdHk7Cit9OworCisvKiBQcm90ZWN0cyB0aGUgY2FjaGUsIGNhY2hlX251bSwgYW5kIHRoZSBvYmplY3RzIHdpdGhpbiBpdCAqLworc3RhdGljIERFQ0xBUkVfTVVURVgoY2FjaGVfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGNhY2hlKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FjaGVfbnVtID0gMDsKKyNkZWZpbmUgTUFYX0NBQ0hFX1NJWkUgMTAKKworLyogTXVzdCBiZSBob2xkaW5nIGNhY2hlX2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0ICpfX2NhY2hlX2ZpbmQoaW50IGlkKQoreworICAgICAgICBzdHJ1Y3Qgb2JqZWN0ICppOworCisgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJmFtcDtjYWNoZSwgbGlzdCkKKyAgICAgICAgICAgICAgICBpZiAoaS0mZ3Q7aWQgPT0gaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGktJmd0O3BvcHVsYXJpdHkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIE11c3QgYmUgaG9sZGluZyBjYWNoZV9sb2NrICovCitzdGF0aWMgdm9pZCBfX2NhY2hlX2RlbGV0ZShzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisgICAgICAgIEJVR19PTighb2JqKTsKKyAgICAgICAgbGlzdF9kZWwoJmFtcDtvYmotJmd0O2xpc3QpOworICAgICAgICBrZnJlZShvYmopOworICAgICAgICBjYWNoZV9udW0tLTsKK30KKworLyogTXVzdCBiZSBob2xkaW5nIGNhY2hlX2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fY2FjaGVfYWRkKHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKyAgICAgICAgbGlzdF9hZGQoJmFtcDtvYmotJmd0O2xpc3QsICZhbXA7Y2FjaGUpOworICAgICAgICBpZiAoKytjYWNoZV9udW0gPiBNQVhfQ0FDSEVfU0laRSkgeworICAgICAgICAgICAgICAgIHN0cnVjdCBvYmplY3QgKmksICpvdXRjYXN0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZhbXA7Y2FjaGUsIGxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3V0Y2FzdCB8fCBpLSZndDtwb3B1bGFyaXR5ICZsdDsgb3V0Y2FzdC0mZ3Q7cG9wdWxhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Y2FzdCA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF9fY2FjaGVfZGVsZXRlKG91dGNhc3QpOworICAgICAgICB9Cit9CisKK2ludCBjYWNoZV9hZGQoaW50IGlkLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgICAgICBzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKyAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jKHNpemVvZigqb2JqKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgc3RybGNweShvYmotJmd0O25hbWUsIG5hbWUsIHNpemVvZihvYmotJmd0O25hbWUpKTsKKyAgICAgICAgb2JqLSZndDtpZCA9IGlkOworICAgICAgICBvYmotJmd0O3BvcHVsYXJpdHkgPSAwOworCisgICAgICAgIGRvd24oJmFtcDtjYWNoZV9sb2NrKTsKKyAgICAgICAgX19jYWNoZV9hZGQob2JqKTsKKyAgICAgICAgdXAoJmFtcDtjYWNoZV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2FjaGVfZGVsZXRlKGludCBpZCkKK3sKKyAgICAgICAgZG93bigmYW1wO2NhY2hlX2xvY2spOworICAgICAgICBfX2NhY2hlX2RlbGV0ZShfX2NhY2hlX2ZpbmQoaWQpKTsKKyAgICAgICAgdXAoJmFtcDtjYWNoZV9sb2NrKTsKK30KKworaW50IGNhY2hlX2ZpbmQoaW50IGlkLCBjaGFyICpuYW1lKQoreworICAgICAgICBzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisgICAgICAgIGludCByZXQgPSAtRU5PRU5UOworCisgICAgICAgIGRvd24oJmFtcDtjYWNoZV9sb2NrKTsKKyAgICAgICAgb2JqID0gX19jYWNoZV9maW5kKGlkKTsKKyAgICAgICAgaWYgKG9iaikgeworICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgc3RyY3B5KG5hbWUsIG9iai0mZ3Q7bmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgdXAoJmFtcDtjYWNoZV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KK05vdGUgdGhhdCB3ZSBhbHdheXMgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNhY2hlX2xvY2sgd2hlbiB3ZSBhZGQsCitkZWxldGUsIG9yIGxvb2sgdXAgdGhlIGNhY2hlOiBib3RoIHRoZSBjYWNoZSBpbmZyYXN0cnVjdHVyZSBpdHNlbGYgYW5kCit0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdHMgYXJlIHByb3RlY3RlZCBieSB0aGUgbG9jay4gIEluIHRoaXMgY2FzZQoraXQncyBlYXN5LCBzaW5jZSB3ZSBjb3B5IHRoZSBkYXRhIGZvciB0aGUgdXNlciwgYW5kIG5ldmVyIGxldCB0aGVtCithY2Nlc3MgdGhlIG9iamVjdHMgZGlyZWN0bHkuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorVGhlcmUgaXMgYSBzbGlnaHQgKGFuZCBjb21tb24pIG9wdGltaXphdGlvbiBoZXJlOiBpbgorPGZ1bmN0aW9uPmNhY2hlX2FkZDwvZnVuY3Rpb24+IHdlIHNldCB1cCB0aGUgZmllbGRzIG9mIHRoZSBvYmplY3QKK2JlZm9yZSBncmFiYmluZyB0aGUgbG9jay4gIFRoaXMgaXMgc2FmZSwgYXMgbm8tb25lIGVsc2UgY2FuIGFjY2VzcyBpdAordW50aWwgd2UgcHV0IGl0IGluIGNhY2hlLgorICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgICA8c2VjdDEgaWQ9ImV4YW1wbGVzLWludGVycnVwdCI+CisgICAgPHRpdGxlPkFjY2Vzc2luZyBGcm9tIEludGVycnVwdCBDb250ZXh0PC90aXRsZT4KKyAgICA8cGFyYT4KK05vdyBjb25zaWRlciB0aGUgY2FzZSB3aGVyZSA8ZnVuY3Rpb24+Y2FjaGVfZmluZDwvZnVuY3Rpb24+IGNhbiBiZQorY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQ6IGVpdGhlciBhIGhhcmR3YXJlIGludGVycnVwdCBvciBhCitzb2Z0aXJxLiAgQW4gZXhhbXBsZSB3b3VsZCBiZSBhIHRpbWVyIHdoaWNoIGRlbGV0ZXMgb2JqZWN0IGZyb20gdGhlCitjYWNoZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CitUaGUgY2hhbmdlIGlzIHNob3duIGJlbG93LCBpbiBzdGFuZGFyZCBwYXRjaCBmb3JtYXQ6IHRoZQorPHN5bWJvbD4tPC9zeW1ib2w+IGFyZSBsaW5lcyB3aGljaCBhcmUgdGFrZW4gYXdheSwgYW5kIHRoZQorPHN5bWJvbD4rPC9zeW1ib2w+IGFyZSBsaW5lcyB3aGljaCBhcmUgYWRkZWQuCisgICAgPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorLS0tIGNhY2hlLmMudXNlcmNvbnRleHQJMjAwMy0xMi0wOSAxMzo1ODo1NC4wMDAwMDAwMDAgKzExMDAKKysrKyBjYWNoZS5jLmludGVycnVwdAkyMDAzLTEyLTA5IDE0OjA3OjQ5LjAwMDAwMDAwMCArMTEwMAorQEAgLTEyLDcgKzEyLDcgQEAKKyAgICAgICAgIGludCBwb3B1bGFyaXR5OworIH07CisKKy1zdGF0aWMgREVDTEFSRV9NVVRFWChjYWNoZV9sb2NrKTsKKytzdGF0aWMgc3BpbmxvY2tfdCBjYWNoZV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworIHN0YXRpYyBMSVNUX0hFQUQoY2FjaGUpOworIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FjaGVfbnVtID0gMDsKKyAjZGVmaW5lIE1BWF9DQUNIRV9TSVpFIDEwCitAQCAtNTUsNiArNTUsNyBAQAorIGludCBjYWNoZV9hZGQoaW50IGlkLCBjb25zdCBjaGFyICpuYW1lKQorIHsKKyAgICAgICAgIHN0cnVjdCBvYmplY3QgKm9iajsKKysgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICAgICAgIGlmICgob2JqID0ga21hbGxvYyhzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKK0BAIC02MywzMCArNjQsMzMgQEAKKyAgICAgICAgIG9iai0mZ3Q7aWQgPSBpZDsKKyAgICAgICAgIG9iai0mZ3Q7cG9wdWxhcml0eSA9IDA7CisKKy0gICAgICAgIGRvd24oJmFtcDtjYWNoZV9sb2NrKTsKKysgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworICAgICAgICAgX19jYWNoZV9hZGQob2JqKTsKKy0gICAgICAgIHVwKCZhbXA7Y2FjaGVfbG9jayk7CisrICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworICAgICAgICAgcmV0dXJuIDA7CisgfQorCisgdm9pZCBjYWNoZV9kZWxldGUoaW50IGlkKQorIHsKKy0gICAgICAgIGRvd24oJmFtcDtjYWNoZV9sb2NrKTsKKysgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisrCisrICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgIF9fY2FjaGVfZGVsZXRlKF9fY2FjaGVfZmluZChpZCkpOworLSAgICAgICAgdXAoJmFtcDtjYWNoZV9sb2NrKTsKKysgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgfQorCisgaW50IGNhY2hlX2ZpbmQoaW50IGlkLCBjaGFyICpuYW1lKQorIHsKKyAgICAgICAgIHN0cnVjdCBvYmplY3QgKm9iajsKKyAgICAgICAgIGludCByZXQgPSAtRU5PRU5UOworKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworLSAgICAgICAgZG93bigmYW1wO2NhY2hlX2xvY2spOworKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICBvYmogPSBfX2NhY2hlX2ZpbmQoaWQpOworICAgICAgICAgaWYgKG9iaikgeworICAgICAgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgICAgICBzdHJjcHkobmFtZSwgb2JqLSZndDtuYW1lKTsKKyAgICAgICAgIH0KKy0gICAgICAgIHVwKCZhbXA7Y2FjaGVfbG9jayk7CisrICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworICAgICAgICAgcmV0dXJuIHJldDsKKyB9Cis8L3Byb2dyYW1saXN0aW5nPgorCisgICAgPHBhcmE+CitOb3RlIHRoYXQgdGhlIDxmdW5jdGlvbj5zcGluX2xvY2tfaXJxc2F2ZTwvZnVuY3Rpb24+IHdpbGwgdHVybiBvZmYKK2ludGVycnVwdHMgaWYgdGhleSBhcmUgb24sIG90aGVyd2lzZSBkb2VzIG5vdGhpbmcgKGlmIHdlIGFyZSBhbHJlYWR5CitpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciksIGhlbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc2FmZSB0byBjYWxsIGZyb20KK2FueSBjb250ZXh0LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KK1VuZm9ydHVuYXRlbHksIDxmdW5jdGlvbj5jYWNoZV9hZGQ8L2Z1bmN0aW9uPiBjYWxscworPGZ1bmN0aW9uPmttYWxsb2M8L2Z1bmN0aW9uPiB3aXRoIHRoZSA8c3ltYm9sPkdGUF9LRVJORUw8L3N5bWJvbD4KK2ZsYWcsIHdoaWNoIGlzIG9ubHkgbGVnYWwgaW4gdXNlciBjb250ZXh0LiAgSSBoYXZlIGFzc3VtZWQgdGhhdAorPGZ1bmN0aW9uPmNhY2hlX2FkZDwvZnVuY3Rpb24+IGlzIHN0aWxsIG9ubHkgY2FsbGVkIGluIHVzZXIgY29udGV4dCwKK290aGVyd2lzZSB0aGlzIHNob3VsZCBiZWNvbWUgYSBwYXJhbWV0ZXIgdG8KKzxmdW5jdGlvbj5jYWNoZV9hZGQ8L2Z1bmN0aW9uPi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgICA8c2VjdDEgaWQ9ImV4YW1wbGVzLXJlZmNudCI+CisgICAgPHRpdGxlPkV4cG9zaW5nIE9iamVjdHMgT3V0c2lkZSBUaGlzIEZpbGU8L3RpdGxlPgorICAgIDxwYXJhPgorSWYgb3VyIG9iamVjdHMgY29udGFpbmVkIG1vcmUgaW5mb3JtYXRpb24sIGl0IG1pZ2h0IG5vdCBiZSBzdWZmaWNpZW50Cit0byBjb3B5IHRoZSBpbmZvcm1hdGlvbiBpbiBhbmQgb3V0OiBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSBtaWdodCB3YW50Cit0byBrZWVwIHBvaW50ZXJzIHRvIHRoZXNlIG9iamVjdHMsIGZvciBleGFtcGxlLCByYXRoZXIgdGhhbiBsb29raW5nIHVwCit0aGUgaWQgZXZlcnkgdGltZS4gIFRoaXMgcHJvZHVjZXMgdHdvIHByb2JsZW1zLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KK1RoZSBmaXJzdCBwcm9ibGVtIGlzIHRoYXQgd2UgdXNlIHRoZSA8c3ltYm9sPmNhY2hlX2xvY2s8L3N5bWJvbD4gdG8KK3Byb3RlY3Qgb2JqZWN0czogd2UnZCBuZWVkIHRvIG1ha2UgdGhpcyBub24tc3RhdGljIHNvIHRoZSByZXN0IG9mIHRoZQorY29kZSBjYW4gdXNlIGl0LiAgVGhpcyBtYWtlcyBsb2NraW5nIHRyaWNraWVyLCBhcyBpdCBpcyBubyBsb25nZXIgYWxsCitpbiBvbmUgcGxhY2UuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorVGhlIHNlY29uZCBwcm9ibGVtIGlzIHRoZSBsaWZldGltZSBwcm9ibGVtOiBpZiBhbm90aGVyIHN0cnVjdHVyZSBrZWVwcworYSBwb2ludGVyIHRvIGFuIG9iamVjdCwgaXQgcHJlc3VtYWJseSBleHBlY3RzIHRoYXQgcG9pbnRlciB0byByZW1haW4KK3ZhbGlkLiAgVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBvbmx5IGd1YXJhbnRlZWQgd2hpbGUgeW91IGhvbGQgdGhlCitsb2NrLCBvdGhlcndpc2Ugc29tZW9uZSBtaWdodCBjYWxsIDxmdW5jdGlvbj5jYWNoZV9kZWxldGU8L2Z1bmN0aW9uPgorYW5kIGV2ZW4gd29yc2UsIGFkZCBhbm90aGVyIG9iamVjdCwgcmUtdXNpbmcgdGhlIHNhbWUgYWRkcmVzcy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CitBcyB0aGVyZSBpcyBvbmx5IG9uZSBsb2NrLCB5b3UgY2FuJ3QgaG9sZCBpdCBmb3JldmVyOiBuby1vbmUgZWxzZSB3b3VsZAorZ2V0IGFueSB3b3JrIGRvbmUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byB1c2UgYSByZWZlcmVuY2UgY291bnQ6IGV2ZXJ5b25lIHdobworaGFzIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IGluY3JlYXNlcyBpdCB3aGVuIHRoZXkgZmlyc3QgZ2V0IHRoZQorb2JqZWN0LCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB3aGVuIHRoZXkncmUgZmluaXNoZWQgd2l0aCBpdC4KK1dob2V2ZXIgZHJvcHMgaXQgdG8gemVybyBrbm93cyBpdCBpcyB1bnVzZWQsIGFuZCBjYW4gYWN0dWFsbHkgZGVsZXRlIGl0LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KK0hlcmUgaXMgdGhlIGNvZGU6CisgICAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CistLS0gY2FjaGUuYy5pbnRlcnJ1cHQJMjAwMy0xMi0wOSAxNDoyNTo0My4wMDAwMDAwMDAgKzExMDAKKysrKyBjYWNoZS5jLnJlZmNudAkyMDAzLTEyLTA5IDE0OjMzOjA1LjAwMDAwMDAwMCArMTEwMAorQEAgLTcsNiArNyw3IEBACisgc3RydWN0IG9iamVjdAorIHsKKyAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKysgICAgICAgIHVuc2lnbmVkIGludCByZWZjbnQ7CisgICAgICAgICBpbnQgaWQ7CisgICAgICAgICBjaGFyIG5hbWVbMzJdOworICAgICAgICAgaW50IHBvcHVsYXJpdHk7CitAQCAtMTcsNiArMTgsMzUgQEAKKyBzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlX251bSA9IDA7CisgI2RlZmluZSBNQVhfQ0FDSEVfU0laRSAxMAorCisrc3RhdGljIHZvaWQgX19vYmplY3RfcHV0KHN0cnVjdCBvYmplY3QgKm9iaikKKyt7CisrICAgICAgICBpZiAoLS1vYmotJmd0O3JlZmNudCA9PSAwKQorKyAgICAgICAgICAgICAgICBrZnJlZShvYmopOworK30KKysKKytzdGF0aWMgdm9pZCBfX29iamVjdF9nZXQoc3RydWN0IG9iamVjdCAqb2JqKQorK3sKKysgICAgICAgIG9iai0mZ3Q7cmVmY250Kys7CisrfQorKworK3ZvaWQgb2JqZWN0X3B1dChzdHJ1Y3Qgb2JqZWN0ICpvYmopCisreworKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKysKKysgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworKyAgICAgICAgX19vYmplY3RfcHV0KG9iaik7CisrICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworK30KKysKKyt2b2lkIG9iamVjdF9nZXQoc3RydWN0IG9iamVjdCAqb2JqKQorK3sKKysgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisrCisrICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKysgICAgICAgIF9fb2JqZWN0X2dldChvYmopOworKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyt9CisrCisgLyogTXVzdCBiZSBob2xkaW5nIGNhY2hlX2xvY2sgKi8KKyBzdGF0aWMgc3RydWN0IG9iamVjdCAqX19jYWNoZV9maW5kKGludCBpZCkKKyB7CitAQCAtMzUsNiArNjUsNyBAQAorIHsKKyAgICAgICAgIEJVR19PTighb2JqKTsKKyAgICAgICAgIGxpc3RfZGVsKCZhbXA7b2JqLSZndDtsaXN0KTsKKysgICAgICAgIF9fb2JqZWN0X3B1dChvYmopOworICAgICAgICAgY2FjaGVfbnVtLS07CisgfQorCitAQCAtNjMsNiArOTQsNyBAQAorICAgICAgICAgc3RybGNweShvYmotJmd0O25hbWUsIG5hbWUsIHNpemVvZihvYmotJmd0O25hbWUpKTsKKyAgICAgICAgIG9iai0mZ3Q7aWQgPSBpZDsKKyAgICAgICAgIG9iai0mZ3Q7cG9wdWxhcml0eSA9IDA7CisrICAgICAgICBvYmotJmd0O3JlZmNudCA9IDE7IC8qIFRoZSBjYWNoZSBob2xkcyBhIHJlZmVyZW5jZSAqLworCisgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgIF9fY2FjaGVfYWRkKG9iaik7CitAQCAtNzksMTggKzExMSwxNSBAQAorICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyB9CisKKy1pbnQgY2FjaGVfZmluZChpbnQgaWQsIGNoYXIgKm5hbWUpCisrc3RydWN0IG9iamVjdCAqY2FjaGVfZmluZChpbnQgaWQpCisgeworICAgICAgICAgc3RydWN0IG9iamVjdCAqb2JqOworLSAgICAgICAgaW50IHJldCA9IC1FTk9FTlQ7CisgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgIG9iaiA9IF9fY2FjaGVfZmluZChpZCk7CistICAgICAgICBpZiAob2JqKSB7CistICAgICAgICAgICAgICAgIHJldCA9IDA7CistICAgICAgICAgICAgICAgIHN0cmNweShuYW1lLCBvYmotJmd0O25hbWUpOworLSAgICAgICAgfQorKyAgICAgICAgaWYgKG9iaikKKysgICAgICAgICAgICAgICAgX19vYmplY3RfZ2V0KG9iaik7CisgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworLSAgICAgICAgcmV0dXJuIHJldDsKKysgICAgICAgIHJldHVybiBvYmo7CisgfQorPC9wcm9ncmFtbGlzdGluZz4KKworPHBhcmE+CitXZSBlbmNhcHN1bGF0ZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGluIHRoZSBzdGFuZGFyZCAnZ2V0JyBhbmQgJ3B1dCcKK2Z1bmN0aW9ucy4gIE5vdyB3ZSBjYW4gcmV0dXJuIHRoZSBvYmplY3QgaXRzZWxmIGZyb20KKzxmdW5jdGlvbj5jYWNoZV9maW5kPC9mdW5jdGlvbj4gd2hpY2ggaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCB0aGUgdXNlcgorY2FuIG5vdyBzbGVlcCBob2xkaW5nIHRoZSBvYmplY3QgKGVnLiB0bworPGZ1bmN0aW9uPmNvcHlfdG9fdXNlcjwvZnVuY3Rpb24+IHRvIG5hbWUgdG8gdXNlcnNwYWNlKS4KKzwvcGFyYT4KKzxwYXJhPgorVGhlIG90aGVyIHBvaW50IHRvIG5vdGUgaXMgdGhhdCBJIHNhaWQgYSByZWZlcmVuY2Ugc2hvdWxkIGJlIGhlbGQgZm9yCitldmVyeSBwb2ludGVyIHRvIHRoZSBvYmplY3Q6IHRodXMgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyAxIHdoZW4gZmlyc3QKK2luc2VydGVkIGludG8gdGhlIGNhY2hlLiAgSW4gc29tZSB2ZXJzaW9ucyB0aGUgZnJhbWV3b3JrIGRvZXMgbm90IGhvbGQKK2EgcmVmZXJlbmNlIGNvdW50LCBidXQgdGhleSBhcmUgbW9yZSBjb21wbGljYXRlZC4KKzwvcGFyYT4KKworICAgPHNlY3QyIGlkPSJleGFtcGxlcy1yZWZjbnQtYXRvbWljIj4KKyAgICA8dGl0bGU+VXNpbmcgQXRvbWljIE9wZXJhdGlvbnMgRm9yIFRoZSBSZWZlcmVuY2UgQ291bnQ8L3RpdGxlPgorPHBhcmE+CitJbiBwcmFjdGljZSwgPHR5cGU+YXRvbWljX3Q8L3R5cGU+IHdvdWxkIHVzdWFsbHkgYmUgdXNlZCBmb3IKKzxzdHJ1Y3RmaWVsZD5yZWZjbnQ8L3N0cnVjdGZpZWxkPi4gIFRoZXJlIGFyZSBhIG51bWJlciBvZiBhdG9taWMKK29wZXJhdGlvbnMgZGVmaW5lZCBpbgorCis8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL2F0b21pYy5oPC9maWxlbmFtZT46IHRoZXNlIGFyZQorZ3VhcmFudGVlZCB0byBiZSBzZWVuIGF0b21pY2FsbHkgZnJvbSBhbGwgQ1BVcyBpbiB0aGUgc3lzdGVtLCBzbyBubworbG9jayBpcyByZXF1aXJlZC4gIEluIHRoaXMgY2FzZSwgaXQgaXMgc2ltcGxlciB0aGFuIHVzaW5nIHNwaW5sb2NrcywKK2FsdGhvdWdoIGZvciBhbnl0aGluZyBub24tdHJpdmlhbCB1c2luZyBzcGlubG9ja3MgaXMgY2xlYXJlci4gIFRoZQorPGZ1bmN0aW9uPmF0b21pY19pbmM8L2Z1bmN0aW9uPiBhbmQKKzxmdW5jdGlvbj5hdG9taWNfZGVjX2FuZF90ZXN0PC9mdW5jdGlvbj4gYXJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKK3N0YW5kYXJkIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9wZXJhdG9ycywgYW5kIHRoZSBsb2NrIGlzIG5vIGxvbmdlcgordXNlZCB0byBwcm90ZWN0IHRoZSByZWZlcmVuY2UgY291bnQgaXRzZWxmLgorPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CistLS0gY2FjaGUuYy5yZWZjbnQJMjAwMy0xMi0wOSAxNTowMDozNS4wMDAwMDAwMDAgKzExMDAKKysrKyBjYWNoZS5jLnJlZmNudC1hdG9taWMJMjAwMy0xMi0xMSAxNTo0OTo0Mi4wMDAwMDAwMDAgKzExMDAKK0BAIC03LDcgKzcsNyBAQAorIHN0cnVjdCBvYmplY3QKKyB7CisgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CistICAgICAgICB1bnNpZ25lZCBpbnQgcmVmY250OworKyAgICAgICAgYXRvbWljX3QgcmVmY250OworICAgICAgICAgaW50IGlkOworICAgICAgICAgY2hhciBuYW1lWzMyXTsKKyAgICAgICAgIGludCBwb3B1bGFyaXR5OworQEAgLTE4LDMzICsxOCwxNSBAQAorIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FjaGVfbnVtID0gMDsKKyAjZGVmaW5lIE1BWF9DQUNIRV9TSVpFIDEwCisKKy1zdGF0aWMgdm9pZCBfX29iamVjdF9wdXQoc3RydWN0IG9iamVjdCAqb2JqKQorLXsKKy0gICAgICAgIGlmICgtLW9iai0mZ3Q7cmVmY250ID09IDApCistICAgICAgICAgICAgICAgIGtmcmVlKG9iaik7CistfQorLQorLXN0YXRpYyB2b2lkIF9fb2JqZWN0X2dldChzdHJ1Y3Qgb2JqZWN0ICpvYmopCisteworLSAgICAgICAgb2JqLSZndDtyZWZjbnQrKzsKKy19CistCisgdm9pZCBvYmplY3RfcHV0KHN0cnVjdCBvYmplY3QgKm9iaikKKyB7CistICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworLQorLSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CistICAgICAgICBfX29iamVjdF9wdXQob2JqKTsKKy0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisrICAgICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO29iai0mZ3Q7cmVmY250KSkKKysgICAgICAgICAgICAgICAga2ZyZWUob2JqKTsKKyB9CisKKyB2b2lkIG9iamVjdF9nZXQoc3RydWN0IG9iamVjdCAqb2JqKQorIHsKKy0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CistCistICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKy0gICAgICAgIF9fb2JqZWN0X2dldChvYmopOworLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKysgICAgICAgIGF0b21pY19pbmMoJmFtcDtvYmotJmd0O3JlZmNudCk7CisgfQorCisgLyogTXVzdCBiZSBob2xkaW5nIGNhY2hlX2xvY2sgKi8KK0BAIC02NSw3ICs0Nyw3IEBACisgeworICAgICAgICAgQlVHX09OKCFvYmopOworICAgICAgICAgbGlzdF9kZWwoJmFtcDtvYmotJmd0O2xpc3QpOworLSAgICAgICAgX19vYmplY3RfcHV0KG9iaik7CisrICAgICAgICBvYmplY3RfcHV0KG9iaik7CisgICAgICAgICBjYWNoZV9udW0tLTsKKyB9CisKK0BAIC05NCw3ICs3Niw3IEBACisgICAgICAgICBzdHJsY3B5KG9iai0mZ3Q7bmFtZSwgbmFtZSwgc2l6ZW9mKG9iai0mZ3Q7bmFtZSkpOworICAgICAgICAgb2JqLSZndDtpZCA9IGlkOworICAgICAgICAgb2JqLSZndDtwb3B1bGFyaXR5ID0gMDsKKy0gICAgICAgIG9iai0mZ3Q7cmVmY250ID0gMTsgLyogVGhlIGNhY2hlIGhvbGRzIGEgcmVmZXJlbmNlICovCisrICAgICAgICBhdG9taWNfc2V0KCZhbXA7b2JqLSZndDtyZWZjbnQsIDEpOyAvKiBUaGUgY2FjaGUgaG9sZHMgYSByZWZlcmVuY2UgKi8KKworICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICBfX2NhY2hlX2FkZChvYmopOworQEAgLTExOSw3ICsxMDEsNyBAQAorICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICBvYmogPSBfX2NhY2hlX2ZpbmQoaWQpOworICAgICAgICAgaWYgKG9iaikKKy0gICAgICAgICAgICAgICAgX19vYmplY3RfZ2V0KG9iaik7CisrICAgICAgICAgICAgICAgIG9iamVjdF9nZXQob2JqKTsKKyAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICByZXR1cm4gb2JqOworIH0KKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3QyPgorPC9zZWN0MT4KKworICAgPHNlY3QxIGlkPSJleGFtcGxlcy1sb2NrLXBlci1vYmoiPgorICAgIDx0aXRsZT5Qcm90ZWN0aW5nIFRoZSBPYmplY3RzIFRoZW1zZWx2ZXM8L3RpdGxlPgorICAgIDxwYXJhPgorSW4gdGhlc2UgZXhhbXBsZXMsIHdlIGFzc3VtZWQgdGhhdCB0aGUgb2JqZWN0cyAoZXhjZXB0IHRoZSByZWZlcmVuY2UKK2NvdW50cykgbmV2ZXIgY2hhbmdlZCBvbmNlIHRoZXkgYXJlIGNyZWF0ZWQuICBJZiB3ZSB3YW50ZWQgdG8gYWxsb3cKK3RoZSBuYW1lIHRvIGNoYW5nZSwgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXM6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+CitZb3UgY2FuIG1ha2UgPHN5bWJvbD5jYWNoZV9sb2NrPC9zeW1ib2w+IG5vbi1zdGF0aWMsIGFuZCB0ZWxsIHBlb3BsZQordG8gZ3JhYiB0aGF0IGxvY2sgYmVmb3JlIGNoYW5naW5nIHRoZSBuYW1lIGluIGFueSBvYmplY3QuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorWW91IGNhbiBwcm92aWRlIGEgPGZ1bmN0aW9uPmNhY2hlX29ial9yZW5hbWU8L2Z1bmN0aW9uPiB3aGljaCBncmFicwordGhpcyBsb2NrIGFuZCBjaGFuZ2VzIHRoZSBuYW1lIGZvciB0aGUgY2FsbGVyLCBhbmQgdGVsbCBldmVyeW9uZSB0bwordXNlIHRoYXQgZnVuY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorWW91IGNhbiBtYWtlIHRoZSA8c3ltYm9sPmNhY2hlX2xvY2s8L3N5bWJvbD4gcHJvdGVjdCBvbmx5IHRoZSBjYWNoZQoraXRzZWxmLCBhbmQgdXNlIGFub3RoZXIgbG9jayB0byBwcm90ZWN0IHRoZSBuYW1lLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICA8cGFyYT4KK1RoZW9yZXRpY2FsbHksIHlvdSBjYW4gbWFrZSB0aGUgbG9ja3MgYXMgZmluZS1ncmFpbmVkIGFzIG9uZSBsb2NrIGZvcgorZXZlcnkgZmllbGQsIGZvciBldmVyeSBvYmplY3QuICBJbiBwcmFjdGljZSwgdGhlIG1vc3QgY29tbW9uIHZhcmlhbnRzCithcmU6Cis8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4KK09uZSBsb2NrIHdoaWNoIHByb3RlY3RzIHRoZSBpbmZyYXN0cnVjdHVyZSAodGhlIDxzeW1ib2w+Y2FjaGU8L3N5bWJvbD4KK2xpc3QgaW4gdGhpcyBleGFtcGxlKSBhbmQgYWxsIHRoZSBvYmplY3RzLiAgVGhpcyBpcyB3aGF0IHdlIGhhdmUgZG9uZQorc28gZmFyLgorCTwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorT25lIGxvY2sgd2hpY2ggcHJvdGVjdHMgdGhlIGluZnJhc3RydWN0dXJlIChpbmNsdWRpbmcgdGhlIGxpc3QKK3BvaW50ZXJzIGluc2lkZSB0aGUgb2JqZWN0cyksIGFuZCBvbmUgbG9jayBpbnNpZGUgdGhlIG9iamVjdCB3aGljaAorcHJvdGVjdHMgdGhlIHJlc3Qgb2YgdGhhdCBvYmplY3QuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorTXVsdGlwbGUgbG9ja3MgdG8gcHJvdGVjdCB0aGUgaW5mcmFzdHJ1Y3R1cmUgKGVnLiBvbmUgbG9jayBwZXIgaGFzaAorY2hhaW4pLCBwb3NzaWJseSB3aXRoIGEgc2VwYXJhdGUgcGVyLW9iamVjdCBsb2NrLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorCis8cGFyYT4KK0hlcmUgaXMgdGhlICJsb2NrLXBlci1vYmplY3QiIGltcGxlbWVudGF0aW9uOgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorLS0tIGNhY2hlLmMucmVmY250LWF0b21pYwkyMDAzLTEyLTExIDE1OjUwOjU0LjAwMDAwMDAwMCArMTEwMAorKysrIGNhY2hlLmMucGVyb2JqZWN0bG9jawkyMDAzLTEyLTExIDE3OjE1OjAzLjAwMDAwMDAwMCArMTEwMAorQEAgLTYsMTEgKzYsMTcgQEAKKworIHN0cnVjdCBvYmplY3QKKyB7CisrICAgICAgICAvKiBUaGVzZSB0d28gcHJvdGVjdGVkIGJ5IGNhY2hlX2xvY2suICovCisgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisrICAgICAgICBpbnQgcG9wdWxhcml0eTsKKysKKyAgICAgICAgIGF0b21pY190IHJlZmNudDsKKysKKysgICAgICAgIC8qIERvZXNuJ3QgY2hhbmdlIG9uY2UgY3JlYXRlZC4gKi8KKyAgICAgICAgIGludCBpZDsKKysKKysgICAgICAgIHNwaW5sb2NrX3QgbG9jazsgLyogUHJvdGVjdHMgdGhlIG5hbWUgKi8KKyAgICAgICAgIGNoYXIgbmFtZVszMl07CistICAgICAgICBpbnQgcG9wdWxhcml0eTsKKyB9OworCisgc3RhdGljIHNwaW5sb2NrX3QgY2FjaGVfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK0BAIC03Nyw2ICs4NCw3IEBACisgICAgICAgICBvYmotJmd0O2lkID0gaWQ7CisgICAgICAgICBvYmotJmd0O3BvcHVsYXJpdHkgPSAwOworICAgICAgICAgYXRvbWljX3NldCgmYW1wO29iai0mZ3Q7cmVmY250LCAxKTsgLyogVGhlIGNhY2hlIGhvbGRzIGEgcmVmZXJlbmNlICovCisrICAgICAgICBzcGluX2xvY2tfaW5pdCgmYW1wO29iai0mZ3Q7bG9jayk7CisKKyAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworICAgICAgICAgX19jYWNoZV9hZGQob2JqKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzxwYXJhPgorTm90ZSB0aGF0IEkgZGVjaWRlIHRoYXQgdGhlIDxzdHJ1Y3RmaWVsZD5wb3B1bGFyaXR5PC9zdHJ1Y3RmaWVsZD4KK2NvdW50IHNob3VsZCBiZSBwcm90ZWN0ZWQgYnkgdGhlIDxzeW1ib2w+Y2FjaGVfbG9jazwvc3ltYm9sPiByYXRoZXIKK3RoYW4gdGhlIHBlci1vYmplY3QgbG9jazogdGhpcyBpcyBiZWNhdXNlIGl0IChsaWtlIHRoZQorPHN0cnVjdG5hbWU+c3RydWN0IGxpc3RfaGVhZDwvc3RydWN0bmFtZT4gaW5zaWRlIHRoZSBvYmplY3QpIGlzCitsb2dpY2FsbHkgcGFydCBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUuICBUaGlzIHdheSwgSSBkb24ndCBuZWVkIHRvIGdyYWIKK3RoZSBsb2NrIG9mIGV2ZXJ5IG9iamVjdCBpbiA8ZnVuY3Rpb24+X19jYWNoZV9hZGQ8L2Z1bmN0aW9uPiB3aGVuCitzZWVraW5nIHRoZSBsZWFzdCBwb3B1bGFyLgorPC9wYXJhPgorCis8cGFyYT4KK0kgYWxzbyBkZWNpZGVkIHRoYXQgdGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IG1lbWJlciBpcwordW5jaGFuZ2VhYmxlLCBzbyBJIGRvbid0IG5lZWQgdG8gZ3JhYiBlYWNoIG9iamVjdCBsb2NrIGluCis8ZnVuY3Rpb24+X19jYWNoZV9maW5kKCk8L2Z1bmN0aW9uPiB0byBleGFtaW5lIHRoZQorPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD46IHRoZSBvYmplY3QgbG9jayBpcyBvbmx5IHVzZWQgYnkgYQorY2FsbGVyIHdobyB3YW50cyB0byByZWFkIG9yIHdyaXRlIHRoZSA8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+CitmaWVsZC4KKzwvcGFyYT4KKworPHBhcmE+CitOb3RlIGFsc28gdGhhdCBJIGFkZGVkIGEgY29tbWVudCBkZXNjcmliaW5nIHdoYXQgZGF0YSB3YXMgcHJvdGVjdGVkIGJ5Cit3aGljaCBsb2Nrcy4gIFRoaXMgaXMgZXh0cmVtZWx5IGltcG9ydGFudCwgYXMgaXQgZGVzY3JpYmVzIHRoZSBydW50aW1lCitiZWhhdmlvciBvZiB0aGUgY29kZSwgYW5kIGNhbiBiZSBoYXJkIHRvIGdhaW4gZnJvbSBqdXN0IHJlYWRpbmcuICBBbmQKK2FzIEFsYW4gQ294IHNheXMsIDxxdW90ZT5Mb2NrIGRhdGEsIG5vdCBjb2RlPC9xdW90ZT4uCis8L3BhcmE+Cis8L3NlY3QxPgorPC9jaGFwdGVyPgorCisgICA8Y2hhcHRlciBpZD0iY29tbW9uLXByb2JsZW1zIj4KKyAgICA8dGl0bGU+Q29tbW9uIFByb2JsZW1zPC90aXRsZT4KKyAgICA8c2VjdDEgaWQ9ImRlYWRsb2NrIj4KKyAgICA8dGl0bGU+RGVhZGxvY2s6IFNpbXBsZSBhbmQgQWR2YW5jZWQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGVyZSBpcyBhIGNvZGluZyBidWcgd2hlcmUgYSBwaWVjZSBvZiBjb2RlIHRyaWVzIHRvIGdyYWIgYQorICAgICAgc3BpbmxvY2sgdHdpY2U6IGl0IHdpbGwgc3BpbiBmb3JldmVyLCB3YWl0aW5nIGZvciB0aGUgbG9jayB0bworICAgICAgYmUgcmVsZWFzZWQgKHNwaW5sb2Nrcywgcndsb2NrcyBhbmQgc2VtYXBob3JlcyBhcmUgbm90CisgICAgICByZWN1cnNpdmUgaW4gTGludXgpLiAgVGhpcyBpcyB0cml2aWFsIHRvIGRpYWdub3NlOiBub3QgYQorICAgICAgc3RheS11cC1maXZlLW5pZ2h0cy10YWxrLXRvLWZsdWZmeS1jb2RlLWJ1bm5pZXMga2luZCBvZgorICAgICAgcHJvYmxlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEZvciBhIHNsaWdodGx5IG1vcmUgY29tcGxleCBjYXNlLCBpbWFnaW5lIHlvdSBoYXZlIGEgcmVnaW9uCisgICAgICBzaGFyZWQgYnkgYSBzb2Z0aXJxIGFuZCB1c2VyIGNvbnRleHQuICBJZiB5b3UgdXNlIGEKKyAgICAgIDxmdW5jdGlvbj5zcGluX2xvY2soKTwvZnVuY3Rpb24+IGNhbGwgdG8gcHJvdGVjdCBpdCwgaXQgaXMgCisgICAgICBwb3NzaWJsZSB0aGF0IHRoZSB1c2VyIGNvbnRleHQgd2lsbCBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgc29mdGlycQorICAgICAgd2hpbGUgaXQgaG9sZHMgdGhlIGxvY2ssIGFuZCB0aGUgc29mdGlycSB3aWxsIHRoZW4gc3BpbgorICAgICAgZm9yZXZlciB0cnlpbmcgdG8gZ2V0IHRoZSBzYW1lIGxvY2suCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBCb3RoIG9mIHRoZXNlIGFyZSBjYWxsZWQgZGVhZGxvY2ssIGFuZCBhcyBzaG93biBhYm92ZSwgaXQgY2FuCisgICAgICBvY2N1ciBldmVuIHdpdGggYSBzaW5nbGUgQ1BVIChhbHRob3VnaCBub3Qgb24gVVAgY29tcGlsZXMsCisgICAgICBzaW5jZSBzcGlubG9ja3MgdmFuaXNoIG9uIGtlcm5lbCBjb21waWxlcyB3aXRoIAorICAgICAgPHN5bWJvbD5DT05GSUdfU01QPC9zeW1ib2w+PW4uIFlvdSdsbCBzdGlsbCBnZXQgZGF0YSBjb3JydXB0aW9uIAorICAgICAgaW4gdGhlIHNlY29uZCBleGFtcGxlKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgY29tcGxldGUgbG9ja3VwIGlzIGVhc3kgdG8gZGlhZ25vc2U6IG9uIFNNUCBib3hlcyB0aGUKKyAgICAgIHdhdGNoZG9nIHRpbWVyIG9yIGNvbXBpbGluZyB3aXRoIDxzeW1ib2w+REVCVUdfU1BJTkxPQ0tTPC9zeW1ib2w+IHNldAorICAgICAgKDxmaWxlbmFtZT5pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmg8L2ZpbGVuYW1lPikgd2lsbCBzaG93IHRoaXMgdXAgCisgICAgICBpbW1lZGlhdGVseSB3aGVuIGl0IGhhcHBlbnMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBBIG1vcmUgY29tcGxleCBwcm9ibGVtIGlzIHRoZSBzby1jYWxsZWQgJ2RlYWRseSBlbWJyYWNlJywKKyAgICAgIGludm9sdmluZyB0d28gb3IgbW9yZSBsb2Nrcy4gIFNheSB5b3UgaGF2ZSBhIGhhc2ggdGFibGU6IGVhY2gKKyAgICAgIGVudHJ5IGluIHRoZSB0YWJsZSBpcyBhIHNwaW5sb2NrLCBhbmQgYSBjaGFpbiBvZiBoYXNoZWQKKyAgICAgIG9iamVjdHMuICBJbnNpZGUgYSBzb2Z0aXJxIGhhbmRsZXIsIHlvdSBzb21ldGltZXMgd2FudCB0bworICAgICAgYWx0ZXIgYW4gb2JqZWN0IGZyb20gb25lIHBsYWNlIGluIHRoZSBoYXNoIHRvIGFub3RoZXI6IHlvdQorICAgICAgZ3JhYiB0aGUgc3BpbmxvY2sgb2YgdGhlIG9sZCBoYXNoIGNoYWluIGFuZCB0aGUgc3BpbmxvY2sgb2YKKyAgICAgIHRoZSBuZXcgaGFzaCBjaGFpbiwgYW5kIGRlbGV0ZSB0aGUgb2JqZWN0IGZyb20gdGhlIG9sZCBvbmUsCisgICAgICBhbmQgaW5zZXJ0IGl0IGluIHRoZSBuZXcgb25lLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhlcmUgYXJlIHR3byBwcm9ibGVtcyBoZXJlLiAgRmlyc3QsIGlmIHlvdXIgY29kZSBldmVyCisgICAgICB0cmllcyB0byBtb3ZlIHRoZSBvYmplY3QgdG8gdGhlIHNhbWUgY2hhaW4sIGl0IHdpbGwgZGVhZGxvY2sKKyAgICAgIHdpdGggaXRzZWxmIGFzIGl0IHRyaWVzIHRvIGxvY2sgaXQgdHdpY2UuICBTZWNvbmRseSwgaWYgdGhlCisgICAgICBzYW1lIHNvZnRpcnEgb24gYW5vdGhlciBDUFUgaXMgdHJ5aW5nIHRvIG1vdmUgYW5vdGhlciBvYmplY3QKKyAgICAgIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbiwgdGhlIGZvbGxvd2luZyBjb3VsZCBoYXBwZW46CisgICAgPC9wYXJhPgorCisgICAgPHRhYmxlPgorICAgICA8dGl0bGU+Q29uc2VxdWVuY2VzPC90aXRsZT4KKworICAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKworICAgICAgPHRoZWFkPgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5DUFUgMTwvZW50cnk+CisgICAgICAgIDxlbnRyeT5DUFUgMjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorCisgICAgICA8dGJvZHk+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PkdyYWIgbG9jayBBIC0mZ3Q7IE9LPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PkdyYWIgbG9jayBCIC0mZ3Q7IE9LPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+R3JhYiBsb2NrIEIgLSZndDsgc3BpbjwvZW50cnk+CisgICAgICAgIDxlbnRyeT5HcmFiIGxvY2sgQSAtJmd0OyBzcGluPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGJvZHk+CisgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSB0d28gQ1BVcyB3aWxsIHNwaW4gZm9yZXZlciwgd2FpdGluZyBmb3IgdGhlIG90aGVyIHRvIGdpdmUgdXAKKyAgICAgIHRoZWlyIGxvY2suICBJdCB3aWxsIGxvb2ssIHNtZWxsLCBhbmQgZmVlbCBsaWtlIGEgY3Jhc2guCisgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDEgaWQ9InRlY2hzLWRlYWRsb2NrLXByZXZlbnQiPgorICAgICA8dGl0bGU+UHJldmVudGluZyBEZWFkbG9jazwvdGl0bGU+CisKKyAgICAgPHBhcmE+CisgICAgICAgVGV4dGJvb2tzIHdpbGwgdGVsbCB5b3UgdGhhdCBpZiB5b3UgYWx3YXlzIGxvY2sgaW4gdGhlIHNhbWUKKyAgICAgICBvcmRlciwgeW91IHdpbGwgbmV2ZXIgZ2V0IHRoaXMga2luZCBvZiBkZWFkbG9jay4gIFByYWN0aWNlCisgICAgICAgd2lsbCB0ZWxsIHlvdSB0aGF0IHRoaXMgYXBwcm9hY2ggZG9lc24ndCBzY2FsZTogd2hlbiBJCisgICAgICAgY3JlYXRlIGEgbmV3IGxvY2ssIEkgZG9uJ3QgdW5kZXJzdGFuZCBlbm91Z2ggb2YgdGhlIGtlcm5lbAorICAgICAgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaW4gdGhlIDUwMDAgbG9jayBoaWVyYXJjaHkgaXQgd2lsbCBmaXQuCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgICBUaGUgYmVzdCBsb2NrcyBhcmUgZW5jYXBzdWxhdGVkOiB0aGV5IG5ldmVyIGdldCBleHBvc2VkIGluCisgICAgICAgaGVhZGVycywgYW5kIGFyZSBuZXZlciBoZWxkIGFyb3VuZCBjYWxscyB0byBub24tdHJpdmlhbAorICAgICAgIGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBzYW1lIGZpbGUuICBZb3UgY2FuIHJlYWQgdGhyb3VnaCB0aGlzCisgICAgICAgY29kZSBhbmQgc2VlIHRoYXQgaXQgd2lsbCBuZXZlciBkZWFkbG9jaywgYmVjYXVzZSBpdCBuZXZlcgorICAgICAgIHRyaWVzIHRvIGdyYWIgYW5vdGhlciBsb2NrIHdoaWxlIGl0IGhhcyB0aGF0IG9uZS4gIFBlb3BsZQorICAgICAgIHVzaW5nIHlvdXIgY29kZSBkb24ndCBldmVuIG5lZWQgdG8ga25vdyB5b3UgYXJlIHVzaW5nIGEKKyAgICAgICBsb2NrLgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICAgQSBjbGFzc2ljIHByb2JsZW0gaGVyZSBpcyB3aGVuIHlvdSBwcm92aWRlIGNhbGxiYWNrcyBvcgorICAgICAgIGhvb2tzOiBpZiB5b3UgY2FsbCB0aGVzZSB3aXRoIHRoZSBsb2NrIGhlbGQsIHlvdSByaXNrIHNpbXBsZQorICAgICAgIGRlYWRsb2NrLCBvciBhIGRlYWRseSBlbWJyYWNlICh3aG8ga25vd3Mgd2hhdCB0aGUgY2FsbGJhY2sKKyAgICAgICB3aWxsIGRvPykuICBSZW1lbWJlciwgdGhlIG90aGVyIHByb2dyYW1tZXJzIGFyZSBvdXQgdG8gZ2V0CisgICAgICAgeW91LCBzbyBkb24ndCBkbyB0aGlzLgorICAgICA8L3BhcmE+CisKKyAgICA8c2VjdDIgaWQ9InRlY2hzLWRlYWRsb2NrLW92ZXJwcmV2ZW50Ij4KKyAgICAgPHRpdGxlPk92ZXJ6ZWFsb3VzIFByZXZlbnRpb24gT2YgRGVhZGxvY2tzPC90aXRsZT4KKworICAgICA8cGFyYT4KKyAgICAgICBEZWFkbG9ja3MgYXJlIHByb2JsZW1hdGljLCBidXQgbm90IGFzIGJhZCBhcyBkYXRhCisgICAgICAgY29ycnVwdGlvbi4gIENvZGUgd2hpY2ggZ3JhYnMgYSByZWFkIGxvY2ssIHNlYXJjaGVzIGEgbGlzdCwKKyAgICAgICBmYWlscyB0byBmaW5kIHdoYXQgaXQgd2FudHMsIGRyb3BzIHRoZSByZWFkIGxvY2ssIGdyYWJzIGEKKyAgICAgICB3cml0ZSBsb2NrIGFuZCBpbnNlcnRzIHRoZSBvYmplY3QgaGFzIGEgcmFjZSBjb25kaXRpb24uCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgICBJZiB5b3UgZG9uJ3Qgc2VlIHdoeSwgcGxlYXNlIHN0YXkgdGhlIGZ1Y2sgYXdheSBmcm9tIG15IGNvZGUuCisgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0icmFjaW5nLXRpbWVycyI+CisgICAgPHRpdGxlPlJhY2luZyBUaW1lcnM6IEEgS2VybmVsIFBhc3RpbWU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaW1lcnMgY2FuIHByb2R1Y2UgdGhlaXIgb3duIHNwZWNpYWwgcHJvYmxlbXMgd2l0aCByYWNlcy4KKyAgICAgIENvbnNpZGVyIGEgY29sbGVjdGlvbiBvZiBvYmplY3RzIChsaXN0LCBoYXNoLCBldGMpIHdoZXJlIGVhY2gKKyAgICAgIG9iamVjdCBoYXMgYSB0aW1lciB3aGljaCBpcyBkdWUgdG8gZGVzdHJveSBpdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHlvdSB3YW50IHRvIGRlc3Ryb3kgdGhlIGVudGlyZSBjb2xsZWN0aW9uIChzYXkgb24gbW9kdWxlCisgICAgICByZW1vdmFsKSwgeW91IG1pZ2h0IGRvIHRoZSBmb2xsb3dpbmc6CisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPgorICAgICAgICAvKiBUSElTIENPREUgQkFEIEJBRCBCQUQgQkFEOiBJRiBJVCBXQVMgQU5ZIFdPUlNFIElUIFdPVUxEIFVTRQorICAgICAgICAgICBIVU5HQVJJQU4gTk9UQVRJT04gKi8KKyAgICAgICAgc3Bpbl9sb2NrX2JoKCZhbXA7bGlzdF9sb2NrKTsKKworICAgICAgICB3aGlsZSAobGlzdCkgeworICAgICAgICAgICAgICAgIHN0cnVjdCBmb28gKm5leHQgPSBsaXN0LSZndDtuZXh0OworICAgICAgICAgICAgICAgIGRlbF90aW1lcigmYW1wO2xpc3QtJmd0O3RpbWVyKTsKKyAgICAgICAgICAgICAgICBrZnJlZShsaXN0KTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIHNwaW5fdW5sb2NrX2JoKCZhbXA7bGlzdF9sb2NrKTsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgPHBhcmE+CisgICAgICBTb29uZXIgb3IgbGF0ZXIsIHRoaXMgd2lsbCBjcmFzaCBvbiBTTVAsIGJlY2F1c2UgYSB0aW1lciBjYW4KKyAgICAgIGhhdmUganVzdCBnb25lIG9mZiBiZWZvcmUgdGhlIDxmdW5jdGlvbj5zcGluX2xvY2tfYmgoKTwvZnVuY3Rpb24+LAorICAgICAgYW5kIGl0IHdpbGwgb25seSBnZXQgdGhlIGxvY2sgYWZ0ZXIgd2UKKyAgICAgIDxmdW5jdGlvbj5zcGluX3VubG9ja19iaCgpPC9mdW5jdGlvbj4sIGFuZCB0aGVuIHRyeSB0byBmcmVlCisgICAgICB0aGUgZWxlbWVudCAod2hpY2ggaGFzIGFscmVhZHkgYmVlbiBmcmVlZCEpLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhpcyBjYW4gYmUgYXZvaWRlZCBieSBjaGVja2luZyB0aGUgcmVzdWx0IG9mCisgICAgICA8ZnVuY3Rpb24+ZGVsX3RpbWVyKCk8L2Z1bmN0aW9uPjogaWYgaXQgcmV0dXJucworICAgICAgPHJldHVybnZhbHVlPjE8L3JldHVybnZhbHVlPiwgdGhlIHRpbWVyIGhhcyBiZWVuIGRlbGV0ZWQuCisgICAgICBJZiA8cmV0dXJudmFsdWU+MDwvcmV0dXJudmFsdWU+LCBpdCBtZWFucyAoaW4gdGhpcworICAgICAgY2FzZSkgdGhhdCBpdCBpcyBjdXJyZW50bHkgcnVubmluZywgc28gd2UgY2FuIGRvOgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgICAgICAgcmV0cnk6CisgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2JoKCZhbXA7bGlzdF9sb2NrKTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChsaXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZm9vICpuZXh0ID0gbGlzdC0mZ3Q7bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVsX3RpbWVyKCZhbXA7bGlzdC0mZ3Q7dGltZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdpdmUgdGltZXIgYSBjaGFuY2UgdG8gZGVsZXRlIHRoaXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfYmgoJmFtcDtsaXN0X2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbmV4dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19iaCgmYW1wO2xpc3RfbG9jayk7CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgorICAgICAgQW5vdGhlciBjb21tb24gcHJvYmxlbSBpcyBkZWxldGluZyB0aW1lcnMgd2hpY2ggcmVzdGFydAorICAgICAgdGhlbXNlbHZlcyAoYnkgY2FsbGluZyA8ZnVuY3Rpb24+YWRkX3RpbWVyKCk8L2Z1bmN0aW9uPiBhdCB0aGUgZW5kCisgICAgICBvZiB0aGVpciB0aW1lciBmdW5jdGlvbikuICBCZWNhdXNlIHRoaXMgaXMgYSBmYWlybHkgY29tbW9uIGNhc2UKKyAgICAgIHdoaWNoIGlzIHByb25lIHRvIHJhY2VzLCB5b3Ugc2hvdWxkIHVzZSA8ZnVuY3Rpb24+ZGVsX3RpbWVyX3N5bmMoKTwvZnVuY3Rpb24+CisgICAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L3RpbWVyLmg8L2ZpbGVuYW1lPikKKyAgICAgIHRvIGhhbmRsZSB0aGlzIGNhc2UuICBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHRpbWVyCisgICAgICBoYWQgdG8gYmUgZGVsZXRlZCBiZWZvcmUgd2UgZmluYWxseSBzdG9wcGVkIGl0IGZyb20gYWRkaW5nIGl0c2VsZiBiYWNrCisgICAgICBpbi4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QxPgorCisgIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJFZmZpY2llbmN5Ij4KKyAgICA8dGl0bGU+TG9ja2luZyBTcGVlZDwvdGl0bGU+CisKKyAgICA8cGFyYT4KK1RoZXJlIGFyZSB0aHJlZSBtYWluIHRoaW5ncyB0byB3b3JyeSBhYm91dCB3aGVuIGNvbnNpZGVyaW5nIHNwZWVkIG9mCitzb21lIGNvZGUgd2hpY2ggZG9lcyBsb2NraW5nLiAgRmlyc3QgaXMgY29uY3VycmVuY3k6IGhvdyBtYW55IHRoaW5ncworYXJlIGdvaW5nIHRvIGJlIHdhaXRpbmcgd2hpbGUgc29tZW9uZSBlbHNlIGlzIGhvbGRpbmcgYSBsb2NrLiAgU2Vjb25kCitpcyB0aGUgdGltZSB0YWtlbiB0byBhY3R1YWxseSBhY3F1aXJlIGFuZCByZWxlYXNlIGFuIHVuY29udGVuZGVkIGxvY2suCitUaGlyZCBpcyB1c2luZyBmZXdlciwgb3Igc21hcnRlciBsb2Nrcy4gIEknbSBhc3N1bWluZyB0aGF0IHRoZSBsb2NrIGlzCit1c2VkIGZhaXJseSBvZnRlbjogb3RoZXJ3aXNlLCB5b3Ugd291bGRuJ3QgYmUgY29uY2VybmVkIGFib3V0CitlZmZpY2llbmN5LgorPC9wYXJhPgorICAgIDxwYXJhPgorQ29uY3VycmVuY3kgZGVwZW5kcyBvbiBob3cgbG9uZyB0aGUgbG9jayBpcyB1c3VhbGx5IGhlbGQ6IHlvdSBzaG91bGQKK2hvbGQgdGhlIGxvY2sgZm9yIGFzIGxvbmcgYXMgbmVlZGVkLCBidXQgbm8gbG9uZ2VyLiAgSW4gdGhlIGNhY2hlCitleGFtcGxlLCB3ZSBhbHdheXMgY3JlYXRlIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgbG9jayBoZWxkLCBhbmQgdGhlbgorZ3JhYiB0aGUgbG9jayBvbmx5IHdoZW4gd2UgYXJlIHJlYWR5IHRvIGluc2VydCBpdCBpbiB0aGUgbGlzdC4KKzwvcGFyYT4KKyAgICA8cGFyYT4KK0FjcXVpc2l0aW9uIHRpbWVzIGRlcGVuZCBvbiBob3cgbXVjaCBkYW1hZ2UgdGhlIGxvY2sgb3BlcmF0aW9ucyBkbyB0bwordGhlIHBpcGVsaW5lIChwaXBlbGluZSBzdGFsbHMpIGFuZCBob3cgbGlrZWx5IGl0IGlzIHRoYXQgdGhpcyBDUFUgd2FzCit0aGUgbGFzdCBvbmUgdG8gZ3JhYiB0aGUgbG9jayAoaWUuIGlzIHRoZSBsb2NrIGNhY2hlLWhvdCBmb3IgdGhpcworQ1BVKTogb24gYSBtYWNoaW5lIHdpdGggbW9yZSBDUFVzLCB0aGlzIGxpa2VsaWhvb2QgZHJvcHMgZmFzdC4KK0NvbnNpZGVyIGEgNzAwTUh6IEludGVsIFBlbnRpdW0gSUlJOiBhbiBpbnN0cnVjdGlvbiB0YWtlcyBhYm91dCAwLjducywKK2FuIGF0b21pYyBpbmNyZW1lbnQgdGFrZXMgYWJvdXQgNThucywgYSBsb2NrIHdoaWNoIGlzIGNhY2hlLWhvdCBvbgordGhpcyBDUFUgdGFrZXMgMTYwbnMsIGFuZCBhIGNhY2hlbGluZSB0cmFuc2ZlciBmcm9tIGFub3RoZXIgQ1BVIHRha2VzCithbiBhZGRpdGlvbmFsIDE3MCB0byAzNjBucy4gIChUaGVzZSBmaWd1cmVzIGZyb20gUGF1bCBNY0tlbm5leSdzCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxpbnV4am91cm5hbC5jb20vYXJ0aWNsZS5waHA/c2lkPTY5OTMiPiBMaW51eAorSm91cm5hbCBSQ1UgYXJ0aWNsZTwvdWxpbms+KS4KKzwvcGFyYT4KKyAgICA8cGFyYT4KK1RoZXNlIHR3byBhaW1zIGNvbmZsaWN0OiBob2xkaW5nIGEgbG9jayBmb3IgYSBzaG9ydCB0aW1lIG1pZ2h0IGJlIGRvbmUKK2J5IHNwbGl0dGluZyBsb2NrcyBpbnRvIHBhcnRzIChzdWNoIGFzIGluIG91ciBmaW5hbCBwZXItb2JqZWN0LWxvY2sKK2V4YW1wbGUpLCBidXQgdGhpcyBpbmNyZWFzZXMgdGhlIG51bWJlciBvZiBsb2NrIGFjcXVpc2l0aW9ucywgYW5kIHRoZQorcmVzdWx0cyBhcmUgb2Z0ZW4gc2xvd2VyIHRoYW4gaGF2aW5nIGEgc2luZ2xlIGxvY2suICBUaGlzIGlzIGFub3RoZXIKK3JlYXNvbiB0byBhZHZvY2F0ZSBsb2NraW5nIHNpbXBsaWNpdHkuCis8L3BhcmE+CisgICAgPHBhcmE+CitUaGUgdGhpcmQgY29uY2VybiBpcyBhZGRyZXNzZWQgYmVsb3c6IHRoZXJlIGFyZSBzb21lIG1ldGhvZHMgdG8gcmVkdWNlCit0aGUgYW1vdW50IG9mIGxvY2tpbmcgd2hpY2ggbmVlZHMgdG8gYmUgZG9uZS4KKzwvcGFyYT4KKworICA8c2VjdDEgaWQ9ImVmZmljaWVuY3ktcndsb2NrcyI+CisgICA8dGl0bGU+UmVhZC9Xcml0ZSBMb2NrIFZhcmlhbnRzPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgICBCb3RoIHNwaW5sb2NrcyBhbmQgc2VtYXBob3JlcyBoYXZlIHJlYWQvd3JpdGUgdmFyaWFudHM6CisgICAgICA8dHlwZT5yd2xvY2tfdDwvdHlwZT4gYW5kIDxzdHJ1Y3RuYW1lPnN0cnVjdCByd19zZW1hcGhvcmU8L3N0cnVjdG5hbWU+LgorICAgICAgVGhlc2UgZGl2aWRlIHVzZXJzIGludG8gdHdvIGNsYXNzZXM6IHRoZSByZWFkZXJzIGFuZCB0aGUgd3JpdGVycy4gIElmCisgICAgICB5b3UgYXJlIG9ubHkgcmVhZGluZyB0aGUgZGF0YSwgeW91IGNhbiBnZXQgYSByZWFkIGxvY2ssIGJ1dCB0byB3cml0ZSB0bworICAgICAgdGhlIGRhdGEgeW91IG5lZWQgdGhlIHdyaXRlIGxvY2suICBNYW55IHBlb3BsZSBjYW4gaG9sZCBhIHJlYWQgbG9jaywKKyAgICAgIGJ1dCBhIHdyaXRlciBtdXN0IGJlIHNvbGUgaG9sZGVyLgorICAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgICBJZiB5b3VyIGNvZGUgZGl2aWRlcyBuZWF0bHkgYWxvbmcgcmVhZGVyL3dyaXRlciBsaW5lcyAoYXMgb3VyCisgICAgICBjYWNoZSBjb2RlIGRvZXMpLCBhbmQgdGhlIGxvY2sgaXMgaGVsZCBieSByZWFkZXJzIGZvcgorICAgICAgc2lnbmlmaWNhbnQgbGVuZ3RocyBvZiB0aW1lLCB1c2luZyB0aGVzZSBsb2NrcyBjYW4gaGVscC4gIFRoZXkKKyAgICAgIGFyZSBzbGlnaHRseSBzbG93ZXIgdGhhbiB0aGUgbm9ybWFsIGxvY2tzIHRob3VnaCwgc28gaW4gcHJhY3RpY2UKKyAgICAgIDx0eXBlPnJ3bG9ja190PC90eXBlPiBpcyBub3QgdXN1YWxseSB3b3J0aHdoaWxlLgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0iZWZmaWNpZW5jeS1yZWFkLWNvcHktdXBkYXRlIj4KKyAgICA8dGl0bGU+QXZvaWRpbmcgTG9ja3M6IFJlYWQgQ29weSBVcGRhdGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGVyZSBpcyBhIHNwZWNpYWwgbWV0aG9kIG9mIHJlYWQvd3JpdGUgbG9ja2luZyBjYWxsZWQgUmVhZCBDb3B5CisgICAgICBVcGRhdGUuICBVc2luZyBSQ1UsIHRoZSByZWFkZXJzIGNhbiBhdm9pZCB0YWtpbmcgYSBsb2NrCisgICAgICBhbHRvZ2V0aGVyOiBhcyB3ZSBleHBlY3Qgb3VyIGNhY2hlIHRvIGJlIHJlYWQgbW9yZSBvZnRlbiB0aGFuCisgICAgICB1cGRhdGVkIChvdGhlcndpc2UgdGhlIGNhY2hlIGlzIGEgd2FzdGUgb2YgdGltZSksIGl0IGlzIGEKKyAgICAgIGNhbmRpZGF0ZSBmb3IgdGhpcyBvcHRpbWl6YXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBIb3cgZG8gd2UgZ2V0IHJpZCBvZiByZWFkIGxvY2tzPyAgR2V0dGluZyByaWQgb2YgcmVhZCBsb2NrcworICAgICAgbWVhbnMgdGhhdCB3cml0ZXJzIG1heSBiZSBjaGFuZ2luZyB0aGUgbGlzdCB1bmRlcm5lYXRoIHRoZQorICAgICAgcmVhZGVycy4gIFRoYXQgaXMgYWN0dWFsbHkgcXVpdGUgc2ltcGxlOiB3ZSBjYW4gcmVhZCBhIGxpbmtlZAorICAgICAgbGlzdCB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIGFkZGVkIGlmIHRoZSB3cml0ZXIgYWRkcyB0aGUKKyAgICAgIGVsZW1lbnQgdmVyeSBjYXJlZnVsbHkuICBGb3IgZXhhbXBsZSwgYWRkaW5nCisgICAgICA8c3ltYm9sPm5ldzwvc3ltYm9sPiB0byBhIHNpbmdsZSBsaW5rZWQgbGlzdCBjYWxsZWQKKyAgICAgIDxzeW1ib2w+bGlzdDwvc3ltYm9sPjoKKyAgICA8L3BhcmE+CisKKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIG5ldy0mZ3Q7bmV4dCA9IGxpc3QtJmd0O25leHQ7CisgICAgICAgIHdtYigpOworICAgICAgICBsaXN0LSZndDtuZXh0ID0gbmV3OworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSA8ZnVuY3Rpb24+d21iKCk8L2Z1bmN0aW9uPiBpcyBhIHdyaXRlIG1lbW9yeSBiYXJyaWVyLiAgSXQKKyAgICAgIGVuc3VyZXMgdGhhdCB0aGUgZmlyc3Qgb3BlcmF0aW9uIChzZXR0aW5nIHRoZSBuZXcgZWxlbWVudCdzCisgICAgICA8c3ltYm9sPm5leHQ8L3N5bWJvbD4gcG9pbnRlcikgaXMgY29tcGxldGUgYW5kIHdpbGwgYmUgc2VlbiBieQorICAgICAgYWxsIENQVXMsIGJlZm9yZSB0aGUgc2Vjb25kIG9wZXJhdGlvbiBpcyAocHV0dGluZyB0aGUgbmV3CisgICAgICBlbGVtZW50IGludG8gdGhlIGxpc3QpLiAgVGhpcyBpcyBpbXBvcnRhbnQsIHNpbmNlIG1vZGVybgorICAgICAgY29tcGlsZXJzIGFuZCBtb2Rlcm4gQ1BVcyBjYW4gYm90aCByZW9yZGVyIGluc3RydWN0aW9ucyB1bmxlc3MKKyAgICAgIHRvbGQgb3RoZXJ3aXNlOiB3ZSB3YW50IGEgcmVhZGVyIHRvIGVpdGhlciBub3Qgc2VlIHRoZSBuZXcKKyAgICAgIGVsZW1lbnQgYXQgYWxsLCBvciBzZWUgdGhlIG5ldyBlbGVtZW50IHdpdGggdGhlCisgICAgICA8c3ltYm9sPm5leHQ8L3N5bWJvbD4gcG9pbnRlciBjb3JyZWN0bHkgcG9pbnRpbmcgYXQgdGhlIHJlc3Qgb2YKKyAgICAgIHRoZSBsaXN0LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBhIGZ1bmN0aW9uIHRvIGRvIHRoaXMgZm9yIHN0YW5kYXJkCisgICAgICA8c3RydWN0bmFtZT5zdHJ1Y3QgbGlzdF9oZWFkPC9zdHJ1Y3RuYW1lPiBsaXN0czoKKyAgICAgIDxmdW5jdGlvbj5saXN0X2FkZF9yY3UoKTwvZnVuY3Rpb24+CisgICAgICAoPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvbGlzdC5oPC9maWxlbmFtZT4pLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFJlbW92aW5nIGFuIGVsZW1lbnQgZnJvbSB0aGUgbGlzdCBpcyBldmVuIHNpbXBsZXI6IHdlIHJlcGxhY2UKKyAgICAgIHRoZSBwb2ludGVyIHRvIHRoZSBvbGQgZWxlbWVudCB3aXRoIGEgcG9pbnRlciB0byBpdHMgc3VjY2Vzc29yLAorICAgICAgYW5kIHJlYWRlcnMgd2lsbCBlaXRoZXIgc2VlIGl0LCBvciBza2lwIG92ZXIgaXQuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgICAgICAgbGlzdC0mZ3Q7bmV4dCA9IG9sZC0mZ3Q7bmV4dDsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgVGhlcmUgaXMgPGZ1bmN0aW9uPmxpc3RfZGVsX3JjdSgpPC9mdW5jdGlvbj4KKyAgICAgICg8ZmlsZW5hbWU+aW5jbHVkZS9saW51eC9saXN0Lmg8L2ZpbGVuYW1lPikgd2hpY2ggZG9lcyB0aGlzICh0aGUKKyAgICAgIG5vcm1hbCB2ZXJzaW9uIHBvaXNvbnMgdGhlIG9sZCBvYmplY3QsIHdoaWNoIHdlIGRvbid0IHdhbnQpLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSByZWFkZXIgbXVzdCBhbHNvIGJlIGNhcmVmdWw6IHNvbWUgQ1BVcyBjYW4gbG9vayB0aHJvdWdoIHRoZQorICAgICAgPHN5bWJvbD5uZXh0PC9zeW1ib2w+IHBvaW50ZXIgdG8gc3RhcnQgcmVhZGluZyB0aGUgY29udGVudHMgb2YKKyAgICAgIHRoZSBuZXh0IGVsZW1lbnQgZWFybHksIGJ1dCBkb24ndCByZWFsaXplIHRoYXQgdGhlIHByZS1mZXRjaGVkCisgICAgICBjb250ZW50cyBpcyB3cm9uZyB3aGVuIHRoZSA8c3ltYm9sPm5leHQ8L3N5bWJvbD4gcG9pbnRlciBjaGFuZ2VzCisgICAgICB1bmRlcm5lYXRoIHRoZW0uICBPbmNlIGFnYWluLCB0aGVyZSBpcyBhCisgICAgICA8ZnVuY3Rpb24+bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKTwvZnVuY3Rpb24+CisgICAgICAoPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvbGlzdC5oPC9maWxlbmFtZT4pIHRvIGhlbHAgeW91LiAgT2YKKyAgICAgIGNvdXJzZSwgd3JpdGVycyBjYW4ganVzdCB1c2UKKyAgICAgIDxmdW5jdGlvbj5saXN0X2Zvcl9lYWNoX2VudHJ5KCk8L2Z1bmN0aW9uPiwgc2luY2UgdGhlcmUgY2Fubm90CisgICAgICBiZSB0d28gc2ltdWx0YW5lb3VzIHdyaXRlcnMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgT3VyIGZpbmFsIGRpbGVtbWEgaXMgdGhpczogd2hlbiBjYW4gd2UgYWN0dWFsbHkgZGVzdHJveSB0aGUKKyAgICAgIHJlbW92ZWQgZWxlbWVudD8gIFJlbWVtYmVyLCBhIHJlYWRlciBtaWdodCBiZSBzdGVwcGluZyB0aHJvdWdoCisgICAgICB0aGlzIGVsZW1lbnQgaW4gdGhlIGxpc3QgcmlnaHQgbm93OiBpdCB3ZSBmcmVlIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgIHRoZSA8c3ltYm9sPm5leHQ8L3N5bWJvbD4gcG9pbnRlciBjaGFuZ2VzLCB0aGUgcmVhZGVyIHdpbGwganVtcAorICAgICAgb2ZmIGludG8gZ2FyYmFnZSBhbmQgY3Jhc2guICBXZSBuZWVkIHRvIHdhaXQgdW50aWwgd2Uga25vdyB0aGF0CisgICAgICBhbGwgdGhlIHJlYWRlcnMgd2hvIHdlcmUgdHJhdmVyc2luZyB0aGUgbGlzdCB3aGVuIHdlIGRlbGV0ZWQgdGhlCisgICAgICBlbGVtZW50IGFyZSBmaW5pc2hlZC4gIFdlIHVzZSA8ZnVuY3Rpb24+Y2FsbF9yY3UoKTwvZnVuY3Rpb24+IHRvCisgICAgICByZWdpc3RlciBhIGNhbGxiYWNrIHdoaWNoIHdpbGwgYWN0dWFsbHkgZGVzdHJveSB0aGUgb2JqZWN0IG9uY2UKKyAgICAgIHRoZSByZWFkZXJzIGFyZSBmaW5pc2hlZC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBCdXQgaG93IGRvZXMgUmVhZCBDb3B5IFVwZGF0ZSBrbm93IHdoZW4gdGhlIHJlYWRlcnMgYXJlCisgICAgICBmaW5pc2hlZD8gIFRoZSBtZXRob2QgaXMgdGhpczogZmlyc3RseSwgdGhlIHJlYWRlcnMgYWx3YXlzCisgICAgICB0cmF2ZXJzZSB0aGUgbGlzdCBpbnNpZGUKKyAgICAgIDxmdW5jdGlvbj5yY3VfcmVhZF9sb2NrKCk8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+cmN1X3JlYWRfdW5sb2NrKCk8L2Z1bmN0aW9uPgorICAgICAgcGFpcnM6IHRoZXNlIHNpbXBseSBkaXNhYmxlIHByZWVtcHRpb24gc28gdGhlIHJlYWRlciB3b24ndCBnbyB0bworICAgICAgc2xlZXAgd2hpbGUgcmVhZGluZyB0aGUgbGlzdC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBSQ1UgdGhlbiB3YWl0cyB1bnRpbCBldmVyeSBvdGhlciBDUFUgaGFzIHNsZXB0IGF0IGxlYXN0IG9uY2U6CisgICAgICBzaW5jZSByZWFkZXJzIGNhbm5vdCBzbGVlcCwgd2Uga25vdyB0aGF0IGFueSByZWFkZXJzIHdoaWNoIHdlcmUKKyAgICAgIHRyYXZlcnNpbmcgdGhlIGxpc3QgZHVyaW5nIHRoZSBkZWxldGlvbiBhcmUgZmluaXNoZWQsIGFuZCB0aGUKKyAgICAgIGNhbGxiYWNrIGlzIHRyaWdnZXJlZC4gIFRoZSByZWFsIFJlYWQgQ29weSBVcGRhdGUgY29kZSBpcyBhCisgICAgICBsaXR0bGUgbW9yZSBvcHRpbWl6ZWQgdGhhbiB0aGlzLCBidXQgdGhpcyBpcyB0aGUgZnVuZGFtZW50YWwKKyAgICAgIGlkZWEuCisgICAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CistLS0gY2FjaGUuYy5wZXJvYmplY3Rsb2NrCTIwMDMtMTItMTEgMTc6MTU6MDMuMDAwMDAwMDAwICsxMTAwCisrKysgY2FjaGUuYy5yY3VwZGF0ZQkyMDAzLTEyLTExIDE3OjU1OjE0LjAwMDAwMDAwMCArMTEwMAorQEAgLTEsMTUgKzEsMTggQEAKKyAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OworICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CisgI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OworKyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OworICNpbmNsdWRlICZsdDthc20vc2VtYXBob3JlLmgmZ3Q7CisgI2luY2x1ZGUgJmx0O2FzbS9lcnJuby5oJmd0OworCisgc3RydWN0IG9iamVjdAorIHsKKy0gICAgICAgIC8qIFRoZXNlIHR3byBwcm90ZWN0ZWQgYnkgY2FjaGVfbG9jay4gKi8KKysgICAgICAgIC8qIFRoaXMgaXMgcHJvdGVjdGVkIGJ5IFJDVSAqLworICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworICAgICAgICAgaW50IHBvcHVsYXJpdHk7CisKKysgICAgICAgIHN0cnVjdCByY3VfaGVhZCByY3U7CisrCisgICAgICAgICBhdG9taWNfdCByZWZjbnQ7CisKKyAgICAgICAgIC8qIERvZXNuJ3QgY2hhbmdlIG9uY2UgY3JlYXRlZC4gKi8KK0BAIC00MCw3ICs0Myw3IEBACisgeworICAgICAgICAgc3RydWN0IG9iamVjdCAqaTsKKworLSAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmYW1wO2NhY2hlLCBsaXN0KSB7CisrICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpLCAmYW1wO2NhY2hlLCBsaXN0KSB7CisgICAgICAgICAgICAgICAgIGlmIChpLSZndDtpZCA9PSBpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgIGktJmd0O3BvcHVsYXJpdHkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKK0BAIC00OSwxOSArNTIsMjUgQEAKKyAgICAgICAgIHJldHVybiBOVUxMOworIH0KKworKy8qIEZpbmFsIGRpc2NhcmQgZG9uZSBvbmNlIHdlIGtub3cgbm8gcmVhZGVycyBhcmUgbG9va2luZy4gKi8KKytzdGF0aWMgdm9pZCBjYWNoZV9kZWxldGVfcmN1KHZvaWQgKmFyZykKKyt7CisrICAgICAgICBvYmplY3RfcHV0KGFyZyk7CisrfQorKworIC8qIE11c3QgYmUgaG9sZGluZyBjYWNoZV9sb2NrICovCisgc3RhdGljIHZvaWQgX19jYWNoZV9kZWxldGUoc3RydWN0IG9iamVjdCAqb2JqKQorIHsKKyAgICAgICAgIEJVR19PTighb2JqKTsKKy0gICAgICAgIGxpc3RfZGVsKCZhbXA7b2JqLSZndDtsaXN0KTsKKy0gICAgICAgIG9iamVjdF9wdXQob2JqKTsKKysgICAgICAgIGxpc3RfZGVsX3JjdSgmYW1wO29iai0mZ3Q7bGlzdCk7CisgICAgICAgICBjYWNoZV9udW0tLTsKKysgICAgICAgIGNhbGxfcmN1KCZhbXA7b2JqLSZndDtyY3UsIGNhY2hlX2RlbGV0ZV9yY3UsIG9iaik7CisgfQorCisgLyogTXVzdCBiZSBob2xkaW5nIGNhY2hlX2xvY2sgKi8KKyBzdGF0aWMgdm9pZCBfX2NhY2hlX2FkZChzdHJ1Y3Qgb2JqZWN0ICpvYmopCisgeworLSAgICAgICAgbGlzdF9hZGQoJmFtcDtvYmotJmd0O2xpc3QsICZhbXA7Y2FjaGUpOworKyAgICAgICAgbGlzdF9hZGRfcmN1KCZhbXA7b2JqLSZndDtsaXN0LCAmYW1wO2NhY2hlKTsKKyAgICAgICAgIGlmICgrK2NhY2hlX251bSA+IE1BWF9DQUNIRV9TSVpFKSB7CisgICAgICAgICAgICAgICAgIHN0cnVjdCBvYmplY3QgKmksICpvdXRjYXN0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmYW1wO2NhY2hlLCBsaXN0KSB7CitAQCAtODUsNiArOTQsNyBAQAorICAgICAgICAgb2JqLSZndDtwb3B1bGFyaXR5ID0gMDsKKyAgICAgICAgIGF0b21pY19zZXQoJmFtcDtvYmotJmd0O3JlZmNudCwgMSk7IC8qIFRoZSBjYWNoZSBob2xkcyBhIHJlZmVyZW5jZSAqLworICAgICAgICAgc3Bpbl9sb2NrX2luaXQoJmFtcDtvYmotJmd0O2xvY2spOworKyAgICAgICAgSU5JVF9SQ1VfSEVBRCgmYW1wO29iai0mZ3Q7cmN1KTsKKworICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICBfX2NhY2hlX2FkZChvYmopOworQEAgLTEwNCwxMiArMTE0LDExIEBACisgc3RydWN0IG9iamVjdCAqY2FjaGVfZmluZChpbnQgaWQpCisgeworICAgICAgICAgc3RydWN0IG9iamVjdCAqb2JqOworLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworLSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisrICAgICAgICByY3VfcmVhZF9sb2NrKCk7CisgICAgICAgICBvYmogPSBfX2NhY2hlX2ZpbmQoaWQpOworICAgICAgICAgaWYgKG9iaikKKyAgICAgICAgICAgICAgICAgb2JqZWN0X2dldChvYmopOworLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKysgICAgICAgIHJjdV9yZWFkX3VubG9jaygpOworICAgICAgICAgcmV0dXJuIG9iajsKKyB9Cis8L3Byb2dyYW1saXN0aW5nPgorCis8cGFyYT4KK05vdGUgdGhhdCB0aGUgcmVhZGVyIHdpbGwgYWx0ZXIgdGhlCis8c3RydWN0ZmllbGQ+cG9wdWxhcml0eTwvc3RydWN0ZmllbGQ+IG1lbWJlciBpbgorPGZ1bmN0aW9uPl9fY2FjaGVfZmluZCgpPC9mdW5jdGlvbj4sIGFuZCBub3cgaXQgZG9lc24ndCBob2xkIGEgbG9jay4KK09uZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBtYWtlIGl0IGFuIDx0eXBlPmF0b21pY190PC90eXBlPiwgYnV0IGZvcgordGhpcyB1c2FnZSwgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgcmFjZXM6IGFuIGFwcHJveGltYXRlIHJlc3VsdCBpcworZ29vZCBlbm91Z2gsIHNvIEkgZGlkbid0IGNoYW5nZSBpdC4KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgcmVzdWx0IGlzIHRoYXQgPGZ1bmN0aW9uPmNhY2hlX2ZpbmQoKTwvZnVuY3Rpb24+IHJlcXVpcmVzIG5vCitzeW5jaHJvbml6YXRpb24gd2l0aCBhbnkgb3RoZXIgZnVuY3Rpb25zLCBzbyBpcyBhbG1vc3QgYXMgZmFzdCBvbiBTTVAKK2FzIGl0IHdvdWxkIGJlIG9uIFVQLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZXJlIGlzIGEgZnVydGh1ciBvcHRpbWl6YXRpb24gcG9zc2libGUgaGVyZTogcmVtZW1iZXIgb3VyIG9yaWdpbmFsCitjYWNoZSBjb2RlLCB3aGVyZSB0aGVyZSB3ZXJlIG5vIHJlZmVyZW5jZSBjb3VudHMgYW5kIHRoZSBjYWxsZXIgc2ltcGx5CitoZWxkIHRoZSBsb2NrIHdoZW5ldmVyIHVzaW5nIHRoZSBvYmplY3Q/ICBUaGlzIGlzIHN0aWxsIHBvc3NpYmxlOiBpZgoreW91IGhvbGQgdGhlIGxvY2ssIG5vb25lIGNhbiBkZWxldGUgdGhlIG9iamVjdCwgc28geW91IGRvbid0IG5lZWQgdG8KK2dldCBhbmQgcHV0IHRoZSByZWZlcmVuY2UgY291bnQuCis8L3BhcmE+CisKKzxwYXJhPgorTm93LCBiZWNhdXNlIHRoZSAncmVhZCBsb2NrJyBpbiBSQ1UgaXMgc2ltcGx5IGRpc2FibGluZyBwcmVlbXB0aW9uLCBhCitjYWxsZXIgd2hpY2ggYWx3YXlzIGhhcyBwcmVlbXB0aW9uIGRpc2FibGVkIGJldHdlZW4gY2FsbGluZworPGZ1bmN0aW9uPmNhY2hlX2ZpbmQoKTwvZnVuY3Rpb24+IGFuZAorPGZ1bmN0aW9uPm9iamVjdF9wdXQoKTwvZnVuY3Rpb24+IGRvZXMgbm90IG5lZWQgdG8gYWN0dWFsbHkgZ2V0IGFuZAorcHV0IHRoZSByZWZlcmVuY2UgY291bnQ6IHdlIGNvdWxkIGV4cG9zZQorPGZ1bmN0aW9uPl9fY2FjaGVfZmluZCgpPC9mdW5jdGlvbj4gYnkgbWFraW5nIGl0IG5vbi1zdGF0aWMsIGFuZAorc3VjaCBjYWxsZXJzIGNvdWxkIHNpbXBseSBjYWxsIHRoYXQuCis8L3BhcmE+Cis8cGFyYT4KK1RoZSBiZW5lZml0IGhlcmUgaXMgdGhhdCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIG5vdCB3cml0dGVuIHRvOiB0aGUKK29iamVjdCBpcyBub3QgYWx0ZXJlZCBpbiBhbnkgd2F5LCB3aGljaCBpcyBtdWNoIGZhc3RlciBvbiBTTVAKK21hY2hpbmVzIGR1ZSB0byBjYWNoaW5nLgorPC9wYXJhPgorICA8L3NlY3QxPgorCisgICA8c2VjdDEgaWQ9InBlci1jcHUiPgorICAgIDx0aXRsZT5QZXItQ1BVIERhdGE8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBBbm90aGVyIHRlY2huaXF1ZSBmb3IgYXZvaWRpbmcgbG9ja2luZyB3aGljaCBpcyB1c2VkIGZhaXJseQorICAgICAgd2lkZWx5IGlzIHRvIGR1cGxpY2F0ZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBDUFUuICBGb3IgZXhhbXBsZSwKKyAgICAgIGlmIHlvdSB3YW50ZWQgdG8ga2VlcCBhIGNvdW50IG9mIGEgY29tbW9uIGNvbmRpdGlvbiwgeW91IGNvdWxkCisgICAgICB1c2UgYSBzcGluIGxvY2sgYW5kIGEgc2luZ2xlIGNvdW50ZXIuICBOaWNlIGFuZCBzaW1wbGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB0aGF0IHdhcyB0b28gc2xvdyAoaXQncyB1c3VhbGx5IG5vdCwgYnV0IGlmIHlvdSd2ZSBnb3QgYQorICAgICAgcmVhbGx5IGJpZyBtYWNoaW5lIHRvIHRlc3Qgb24gYW5kIGNhbiBzaG93IHRoYXQgaXQgaXMpLCB5b3UKKyAgICAgIGNvdWxkIGluc3RlYWQgdXNlIGEgY291bnRlciBmb3IgZWFjaCBDUFUsIHRoZW4gbm9uZSBvZiB0aGVtIG5lZWQKKyAgICAgIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgU2VlIDxmdW5jdGlvbj5ERUZJTkVfUEVSX0NQVSgpPC9mdW5jdGlvbj4sCisgICAgICA8ZnVuY3Rpb24+Z2V0X2NwdV92YXIoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnB1dF9jcHVfdmFyKCk8L2Z1bmN0aW9uPgorICAgICAgKDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9wZXJjcHUuaDwvZmlsZW5hbWU+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIE9mIHBhcnRpY3VsYXIgdXNlIGZvciBzaW1wbGUgcGVyLWNwdSBjb3VudGVycyBpcyB0aGUKKyAgICAgIDx0eXBlPmxvY2FsX3Q8L3R5cGU+IHR5cGUsIGFuZCB0aGUKKyAgICAgIDxmdW5jdGlvbj5jcHVfbG9jYWxfaW5jKCk8L2Z1bmN0aW9uPiBhbmQgcmVsYXRlZCBmdW5jdGlvbnMsCisgICAgICB3aGljaCBhcmUgbW9yZSBlZmZpY2llbnQgdGhhbiBzaW1wbGUgY29kZSBvbiBzb21lIGFyY2hpdGVjdHVyZXMKKyAgICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL2xvY2FsLmg8L2ZpbGVuYW1lPikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc2ltcGxlLCByZWxpYWJsZSB3YXkgb2YgZ2V0dGluZyBhbiBleGFjdAorICAgICAgdmFsdWUgb2Ygc3VjaCBhIGNvdW50ZXIsIHdpdGhvdXQgaW50cm9kdWNpbmcgbW9yZSBsb2Nrcy4gIFRoaXMKKyAgICAgIGlzIG5vdCBhIHByb2JsZW0gZm9yIHNvbWUgdXNlcy4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QxPgorCisgICA8c2VjdDEgaWQ9Im1vc3RseS1oYXJkaXJxIj4KKyAgICA8dGl0bGU+RGF0YSBXaGljaCBNb3N0bHkgVXNlZCBCeSBBbiBJUlEgSGFuZGxlcjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIGRhdGEgaXMgYWx3YXlzIGFjY2Vzc2VkIGZyb20gd2l0aGluIHRoZSBzYW1lIElSUSBoYW5kbGVyLCB5b3UKKyAgICAgIGRvbid0IG5lZWQgYSBsb2NrIGF0IGFsbDogdGhlIGtlcm5lbCBhbHJlYWR5IGd1YXJhbnRlZXMgdGhhdCB0aGUKKyAgICAgIGlycSBoYW5kbGVyIHdpbGwgbm90IHJ1biBzaW11bHRhbmVvdXNseSBvbiBtdWx0aXBsZSBDUFVzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIE1hbmZyZWQgU3ByYXVsIHBvaW50cyBvdXQgdGhhdCB5b3UgY2FuIHN0aWxsIGRvIHRoaXMsIGV2ZW4gaWYKKyAgICAgIHRoZSBkYXRhIGlzIHZlcnkgb2NjYXNpb25hbGx5IGFjY2Vzc2VkIGluIHVzZXIgY29udGV4dCBvcgorICAgICAgc29mdGlycXMvdGFza2xldHMuICBUaGUgaXJxIGhhbmRsZXIgZG9lc24ndCB1c2UgYSBsb2NrLCBhbmQKKyAgICAgIGFsbCBvdGhlciBhY2Nlc3NlcyBhcmUgZG9uZSBhcyBzbzoKKyAgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKwlzcGluX2xvY2soJmFtcDtsb2NrKTsKKwlkaXNhYmxlX2lycShpcnEpOworCS4uLgorCWVuYWJsZV9pcnEoaXJxKTsKKwlzcGluX3VubG9jaygmYW1wO2xvY2spOworPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSA8ZnVuY3Rpb24+ZGlzYWJsZV9pcnEoKTwvZnVuY3Rpb24+IHByZXZlbnRzIHRoZSBpcnEgaGFuZGxlcgorICAgICAgZnJvbSBydW5uaW5nIChhbmQgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaCBpZiBpdCdzIGN1cnJlbnRseQorICAgICAgcnVubmluZyBvbiBvdGhlciBDUFVzKS4gIFRoZSBzcGlubG9jayBwcmV2ZW50cyBhbnkgb3RoZXIKKyAgICAgIGFjY2Vzc2VzIGhhcHBlbmluZyBhdCB0aGUgc2FtZSB0aW1lLiAgTmF0dXJhbGx5LCB0aGlzIGlzIHNsb3dlcgorICAgICAgdGhhbiBqdXN0IGEgPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnEoKTwvZnVuY3Rpb24+IGNhbGwsIHNvIGl0CisgICAgICBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoaXMgdHlwZSBvZiBhY2Nlc3MgaGFwcGVucyBleHRyZW1lbHkKKyAgICAgIHJhcmVseS4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0ic2xlZXBpbmctdGhpbmdzIj4KKyAgICA8dGl0bGU+V2hhdCBGdW5jdGlvbnMgQXJlIFNhZmUgVG8gQ2FsbCBGcm9tIEludGVycnVwdHM/PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgTWFueSBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbCBzbGVlcCAoaWUuIGNhbGwgc2NoZWR1bGUoKSkKKyAgICAgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHk6IHlvdSBjYW4gbmV2ZXIgY2FsbCB0aGVtIHdoaWxlIGhvbGRpbmcgYQorICAgICAgc3BpbmxvY2ssIG9yIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4gIFRoaXMgYWxzbyBtZWFucyB5b3UgbmVlZAorICAgICAgdG8gYmUgaW4gdXNlciBjb250ZXh0OiBjYWxsaW5nIHRoZW0gZnJvbSBhbiBpbnRlcnJ1cHQgaXMgaWxsZWdhbC4KKyAgICA8L3BhcmE+CisKKyAgIDxzZWN0MSBpZD0ic2xlZXBpbmciPgorICAgIDx0aXRsZT5Tb21lIEZ1bmN0aW9ucyBXaGljaCBTbGVlcDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBtb3N0IGNvbW1vbiBvbmVzIGFyZSBsaXN0ZWQgYmVsb3csIGJ1dCB5b3UgdXN1YWxseSBoYXZlIHRvCisgICAgICByZWFkIHRoZSBjb2RlIHRvIGZpbmQgb3V0IGlmIG90aGVyIGNhbGxzIGFyZSBzYWZlLiAgSWYgZXZlcnlvbmUKKyAgICAgIGVsc2Ugd2hvIGNhbGxzIGl0IGNhbiBzbGVlcCwgeW91IHByb2JhYmx5IG5lZWQgdG8gYmUgYWJsZSB0bworICAgICAgc2xlZXAsIHRvby4gIEluIHBhcnRpY3VsYXIsIHJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24KKyAgICAgIGZ1bmN0aW9ucyB1c3VhbGx5IGV4cGVjdCB0byBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQsIGFuZCBjYW4KKyAgICAgIHNsZWVwLgorICAgIDwvcGFyYT4KKworICAgIDxpdGVtaXplZGxpc3Q+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBY2Nlc3NlcyB0byAKKyAgICAgICAgPGZpcnN0dGVybSBsaW5rZW5kPSJnbG9zcy11c2Vyc3BhY2UiPnVzZXJzcGFjZTwvZmlyc3R0ZXJtPjoKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZnVuY3Rpb24+Y29weV9mcm9tX3VzZXIoKTwvZnVuY3Rpb24+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGZ1bmN0aW9uPmNvcHlfdG9fdXNlcigpPC9mdW5jdGlvbj4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZnVuY3Rpb24+Z2V0X3VzZXIoKTwvZnVuY3Rpb24+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGZ1bmN0aW9uPiBwdXRfdXNlcigpPC9mdW5jdGlvbj4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgPC9saXN0aXRlbT4KKworICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPmttYWxsb2MoR0ZQX0tFUk5FTCk8L2Z1bmN0aW9uPgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorCisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgPGZ1bmN0aW9uPmRvd25faW50ZXJydXB0aWJsZSgpPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+ZG93bigpPC9mdW5jdGlvbj4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRoZXJlIGlzIGEgPGZ1bmN0aW9uPmRvd25fdHJ5bG9jaygpPC9mdW5jdGlvbj4gd2hpY2ggY2FuIGJlCisgICAgICAgdXNlZCBpbnNpZGUgaW50ZXJydXB0IGNvbnRleHQsIGFzIGl0IHdpbGwgbm90IHNsZWVwLgorICAgICAgIDxmdW5jdGlvbj51cCgpPC9mdW5jdGlvbj4gd2lsbCBhbHNvIG5ldmVyIHNsZWVwLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPC9zZWN0MT4KKworICAgPHNlY3QxIGlkPSJkb250LXNsZWVwIj4KKyAgICA8dGl0bGU+U29tZSBGdW5jdGlvbnMgV2hpY2ggRG9uJ3QgU2xlZXA8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgIFNvbWUgZnVuY3Rpb25zIGFyZSBzYWZlIHRvIGNhbGwgZnJvbSBhbnkgY29udGV4dCwgb3IgaG9sZGluZworICAgICBhbG1vc3QgYW55IGxvY2suCisgICAgPC9wYXJhPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisJPGZ1bmN0aW9uPnByaW50aygpPC9mdW5jdGlvbj4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisJPGZ1bmN0aW9uPmFkZF90aW1lcigpPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5kZWxfdGltZXIoKTwvZnVuY3Rpb24+CisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InJlZmVyZW5jZXMiPgorICAgPHRpdGxlPkZ1cnRoZXIgcmVhZGluZzwvdGl0bGU+CisKKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgICA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi9zcGlubG9ja3MudHh0PC9maWxlbmFtZT46IAorICAgICAgIExpbnVzIFRvcnZhbGRzJyBzcGlubG9ja2luZyB0dXRvcmlhbCBpbiB0aGUga2VybmVsIHNvdXJjZXMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgICBVbml4IFN5c3RlbXMgZm9yIE1vZGVybiBBcmNoaXRlY3R1cmVzOiBTeW1tZXRyaWMKKyAgICAgICBNdWx0aXByb2Nlc3NpbmcgYW5kIENhY2hpbmcgZm9yIEtlcm5lbCBQcm9ncmFtbWVyczoKKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIEN1cnQgU2NoaW1tZWwncyB2ZXJ5IGdvb2QgaW50cm9kdWN0aW9uIHRvIGtlcm5lbCBsZXZlbAorICAgICAgIGxvY2tpbmcgKG5vdCB3cml0dGVuIGZvciBMaW51eCwgYnV0IG5lYXJseSBldmVyeXRoaW5nCisgICAgICAgYXBwbGllcykuICBUaGUgYm9vayBpcyBleHBlbnNpdmUsIGJ1dCByZWFsbHkgd29ydGggZXZlcnkKKyAgICAgICBwZW5ueSB0byB1bmRlcnN0YW5kIFNNUCBsb2NraW5nLiBbSVNCTjogMDIwMTYzMzM4OF0KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJ0aGFua3MiPgorICAgIDx0aXRsZT5UaGFua3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGFua3MgdG8gVGVsc2EgR3d5bm5lIGZvciBEb2NCb29raW5nLCBuZWF0ZW5pbmcgYW5kIGFkZGluZworICAgICAgc3R5bGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGFua3MgdG8gTWFydGluIFBvb2wsIFBoaWxpcHAgUnVtcGYsIFN0ZXBoZW4gUm90aHdlbGwsIFBhdWwKKyAgICAgIE1hY2tlcnJhcywgUnVlZGkgQXNjaHdhbmRlbiwgQWxhbiBDb3gsIE1hbmZyZWQgU3ByYXVsLCBUaW0KKyAgICAgIFdhdWdoLCBQZXRlIFphaXRjZXYsIEphbWVzIE1vcnJpcywgUm9iZXJ0IExvdmUsIFBhdWwgTWNLZW5uZXksCisgICAgICBKb2huIEFzaGJ5IGZvciBwcm9vZnJlYWRpbmcsIGNvcnJlY3RpbmcsIGZsYW1pbmcsIGNvbW1lbnRpbmcuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGFua3MgdG8gdGhlIGNhYmFsIGZvciBoYXZpbmcgbm8gaW5mbHVlbmNlIG9uIHRoaXMgZG9jdW1lbnQuCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGdsb3NzYXJ5IGlkPSJnbG9zc2FyeSI+CisgICA8dGl0bGU+R2xvc3Nhcnk8L3RpdGxlPgorCisgICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3MtcHJlZW1wdGlvbiI+CisgICAgPGdsb3NzdGVybT5wcmVlbXB0aW9uPC9nbG9zc3Rlcm0+CisgICAgIDxnbG9zc2RlZj4KKyAgICAgIDxwYXJhPgorICAgICAgICBQcmlvciB0byAyLjUsIG9yIHdoZW4gPHN5bWJvbD5DT05GSUdfUFJFRU1QVDwvc3ltYm9sPiBpcworICAgICAgICB1bnNldCwgcHJvY2Vzc2VzIGluIHVzZXIgY29udGV4dCBpbnNpZGUgdGhlIGtlcm5lbCB3b3VsZCBub3QKKyAgICAgICAgcHJlZW1wdCBlYWNoIG90aGVyIChpZS4geW91IGhhZCB0aGF0IENQVSB1bnRpbCB5b3UgaGF2ZSBpdCB1cCwKKyAgICAgICAgZXhjZXB0IGZvciBpbnRlcnJ1cHRzKS4gIFdpdGggdGhlIGFkZGl0aW9uIG9mCisgICAgICAgIDxzeW1ib2w+Q09ORklHX1BSRUVNUFQ8L3N5bWJvbD4gaW4gMi41LjQsIHRoaXMgY2hhbmdlZDogd2hlbgorICAgICAgICBpbiB1c2VyIGNvbnRleHQsIGhpZ2hlciBwcmlvcml0eSB0YXNrcyBjYW4gImN1dCBpbiI6IHNwaW5sb2NrcworICAgICAgICB3ZXJlIGNoYW5nZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uLCBldmVuIG9uIFVQLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLWJoIj4KKyAgICA8Z2xvc3N0ZXJtPmJoPC9nbG9zc3Rlcm0+CisgICAgIDxnbG9zc2RlZj4KKyAgICAgIDxwYXJhPgorICAgICAgICBCb3R0b20gSGFsZjogZm9yIGhpc3RvcmljYWwgcmVhc29ucywgZnVuY3Rpb25zIHdpdGgKKyAgICAgICAgJ19iaCcgaW4gdGhlbSBvZnRlbiBub3cgcmVmZXIgdG8gYW55IHNvZnR3YXJlIGludGVycnVwdCwgZS5nLgorICAgICAgICA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2JoKCk8L2Z1bmN0aW9uPiBibG9ja3MgYW55IHNvZnR3YXJlIGludGVycnVwdCAKKyAgICAgICAgb24gdGhlIGN1cnJlbnQgQ1BVLiAgQm90dG9tIGhhbHZlcyBhcmUgZGVwcmVjYXRlZCwgYW5kIHdpbGwgCisgICAgICAgIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgYnkgdGFza2xldHMuICBPbmx5IG9uZSBib3R0b20gaGFsZiB3aWxsIGJlIAorICAgICAgICBydW5uaW5nIGF0IGFueSB0aW1lLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLWh3aW50ZXJydXB0Ij4KKyAgICA8Z2xvc3N0ZXJtPkhhcmR3YXJlIEludGVycnVwdCAvIEhhcmR3YXJlIElSUTwvZ2xvc3N0ZXJtPgorICAgIDxnbG9zc2RlZj4KKyAgICAgPHBhcmE+CisgICAgICAgSGFyZHdhcmUgaW50ZXJydXB0IHJlcXVlc3QuICA8ZnVuY3Rpb24+aW5faXJxKCk8L2Z1bmN0aW9uPiByZXR1cm5zIAorICAgICAgIDxyZXR1cm52YWx1ZT50cnVlPC9yZXR1cm52YWx1ZT4gaW4gYSBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAgPC9wYXJhPgorICAgIDwvZ2xvc3NkZWY+CisgICA8L2dsb3NzZW50cnk+CisKKyAgIDxnbG9zc2VudHJ5IGlkPSJnbG9zcy1pbnRlcnJ1cHRjb250ZXh0Ij4KKyAgICA8Z2xvc3N0ZXJtPkludGVycnVwdCBDb250ZXh0PC9nbG9zc3Rlcm0+CisgICAgPGdsb3NzZGVmPgorICAgICA8cGFyYT4KKyAgICAgICBOb3QgdXNlciBjb250ZXh0OiBwcm9jZXNzaW5nIGEgaGFyZHdhcmUgaXJxIG9yIHNvZnR3YXJlIGlycS4KKyAgICAgICBJbmRpY2F0ZWQgYnkgdGhlIDxmdW5jdGlvbj5pbl9pbnRlcnJ1cHQoKTwvZnVuY3Rpb24+IG1hY3JvIAorICAgICAgIHJldHVybmluZyA8cmV0dXJudmFsdWU+dHJ1ZTwvcmV0dXJudmFsdWU+LgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLXNtcCI+CisgICAgPGdsb3NzdGVybT48YWNyb255bT5TTVA8L2Fjcm9ueW0+PC9nbG9zc3Rlcm0+CisgICAgPGdsb3NzZGVmPgorICAgICA8cGFyYT4KKyAgICAgICBTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc29yOiBrZXJuZWxzIGNvbXBpbGVkIGZvciBtdWx0aXBsZS1DUFUKKyAgICAgICBtYWNoaW5lcy4gIChDT05GSUdfU01QPXkpLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLXNvZnRpcnEiPgorICAgIDxnbG9zc3Rlcm0+U29mdHdhcmUgSW50ZXJydXB0IC8gc29mdGlycTwvZ2xvc3N0ZXJtPgorICAgIDxnbG9zc2RlZj4KKyAgICAgPHBhcmE+CisgICAgICAgU29mdHdhcmUgaW50ZXJydXB0IGhhbmRsZXIuICA8ZnVuY3Rpb24+aW5faXJxKCk8L2Z1bmN0aW9uPiByZXR1cm5zCisgICAgICAgPHJldHVybnZhbHVlPmZhbHNlPC9yZXR1cm52YWx1ZT47IDxmdW5jdGlvbj5pbl9zb2Z0aXJxKCk8L2Z1bmN0aW9uPgorICAgICAgIHJldHVybnMgPHJldHVybnZhbHVlPnRydWU8L3JldHVybnZhbHVlPi4gIFRhc2tsZXRzIGFuZCBzb2Z0aXJxcworCWJvdGggZmFsbCBpbnRvIHRoZSBjYXRlZ29yeSBvZiAnc29mdHdhcmUgaW50ZXJydXB0cycuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICAgU3RyaWN0bHkgc3BlYWtpbmcgYSBzb2Z0aXJxIGlzIG9uZSBvZiB1cCB0byAzMiBlbnVtZXJhdGVkIHNvZnR3YXJlCisgICAgICAgaW50ZXJydXB0cyB3aGljaCBjYW4gcnVuIG9uIG11bHRpcGxlIENQVXMgYXQgb25jZS4KKyAgICAgICBTb21ldGltZXMgdXNlZCB0byByZWZlciB0byB0YXNrbGV0cyBhcworICAgICAgIHdlbGwgKGllLiBhbGwgc29mdHdhcmUgaW50ZXJydXB0cykuCisgICAgIDwvcGFyYT4KKyAgICA8L2dsb3NzZGVmPgorICAgPC9nbG9zc2VudHJ5PgorCisgICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3MtdGFza2xldCI+CisgICAgPGdsb3NzdGVybT50YXNrbGV0PC9nbG9zc3Rlcm0+CisgICAgPGdsb3NzZGVmPgorICAgICA8cGFyYT4KKyAgICAgICBBIGR5bmFtaWNhbGx5LXJlZ2lzdHJhYmxlIHNvZnR3YXJlIGludGVycnVwdCwKKyAgICAgICB3aGljaCBpcyBndWFyYW50ZWVkIHRvIG9ubHkgcnVuIG9uIG9uZSBDUFUgYXQgYSB0aW1lLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLXRpbWVycyI+CisgICAgPGdsb3NzdGVybT50aW1lcjwvZ2xvc3N0ZXJtPgorICAgIDxnbG9zc2RlZj4KKyAgICAgPHBhcmE+CisgICAgICAgQSBkeW5hbWljYWxseS1yZWdpc3RyYWJsZSBzb2Z0d2FyZSBpbnRlcnJ1cHQsIHdoaWNoIGlzIHJ1biBhdAorICAgICAgIChvciBjbG9zZSB0bykgYSBnaXZlbiB0aW1lLiAgV2hlbiBydW5uaW5nLCBpdCBpcyBqdXN0IGxpa2UgYQorICAgICAgIHRhc2tsZXQgKGluIGZhY3QsIHRoZXkgYXJlIGNhbGxlZCBmcm9tIHRoZSBUSU1FUl9TT0ZUSVJRKS4KKyAgICAgPC9wYXJhPgorICAgIDwvZ2xvc3NkZWY+CisgICA8L2dsb3NzZW50cnk+CisKKyAgIDxnbG9zc2VudHJ5IGlkPSJnbG9zcy11cCI+CisgICAgPGdsb3NzdGVybT48YWNyb255bT5VUDwvYWNyb255bT48L2dsb3NzdGVybT4KKyAgICA8Z2xvc3NkZWY+CisgICAgIDxwYXJhPgorICAgICAgIFVuaS1Qcm9jZXNzb3I6IE5vbi1TTVAuICAoQ09ORklHX1NNUD1uKS4KKyAgICAgPC9wYXJhPgorICAgIDwvZ2xvc3NkZWY+CisgICA8L2dsb3NzZW50cnk+CisKKyAgIDxnbG9zc2VudHJ5IGlkPSJnbG9zcy11c2VyY29udGV4dCI+CisgICAgPGdsb3NzdGVybT5Vc2VyIENvbnRleHQ8L2dsb3NzdGVybT4KKyAgICA8Z2xvc3NkZWY+CisgICAgIDxwYXJhPgorICAgICAgIFRoZSBrZXJuZWwgZXhlY3V0aW5nIG9uIGJlaGFsZiBvZiBhIHBhcnRpY3VsYXIgcHJvY2VzcyAoaWUuIGEKKyAgICAgICBzeXN0ZW0gY2FsbCBvciB0cmFwKSBvciBrZXJuZWwgdGhyZWFkLiAgWW91IGNhbiB0ZWxsIHdoaWNoCisgICAgICAgcHJvY2VzcyB3aXRoIHRoZSA8c3ltYm9sPmN1cnJlbnQ8L3N5bWJvbD4gbWFjcm8uKSAgTm90IHRvCisgICAgICAgYmUgY29uZnVzZWQgd2l0aCB1c2Vyc3BhY2UuICBDYW4gYmUgaW50ZXJydXB0ZWQgYnkgc29mdHdhcmUgb3IKKyAgICAgICBoYXJkd2FyZSBpbnRlcnJ1cHRzLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLXVzZXJzcGFjZSI+CisgICAgPGdsb3NzdGVybT5Vc2Vyc3BhY2U8L2dsb3NzdGVybT4KKyAgICA8Z2xvc3NkZWY+CisgICAgIDxwYXJhPgorICAgICAgIEEgcHJvY2VzcyBleGVjdXRpbmcgaXRzIG93biBjb2RlIG91dHNpZGUgdGhlIGtlcm5lbC4KKyAgICAgPC9wYXJhPgorICAgIDwvZ2xvc3NkZWY+CisgICA8L2dsb3NzZW50cnk+ICAgICAgCisKKyAgPC9nbG9zc2FyeT4KKzwvYm9vaz4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMmZjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKQEAgLTAsMCArMSwyODIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0ibGliYXRhRGV2R3VpZGUiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPmxpYkFUQSBEZXZlbG9wZXIncyBHdWlkZTwvdGl0bGU+CisgIAorICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+SmVmZjwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPkdhcnppazwvc3VybmFtZT4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDAzPC95ZWFyPgorICAgPGhvbGRlcj5KZWZmIEdhcnppazwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE9wZW4KKyAgIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAxLjEgdGhhdCBjYW4gYmUgZm91bmQgYXQKKyAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvb3NsLTEuMS50eHQiPmh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvb3NsLTEuMS50eHQ8L3VsaW5rPiBhbmQgaXMgaW5jbHVkZWQgaGVyZWluCisgICBieSByZWZlcmVuY2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAgIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIikgYXMgZGlzdHJpYnV0ZWQKKyAgIGluIHRoZSBrZXJuZWwgc291cmNlIENPUFlJTkcgZmlsZSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZgorICAgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93CisgICB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAgIHRoZSBPU0wsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kCisgICByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuCisgICBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgICB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE9TTCBvciB0aGUgR1BMLgorICAgPC9wYXJhPgorCisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0ibGliYXRhVGhhbmtzIj4KKyAgICAgPHRpdGxlPlRoYW5rczwvdGl0bGU+CisgIDxwYXJhPgorICBUaGUgYnVsayBvZiB0aGUgQVRBIGtub3dsZWRnZSBjb21lcyB0aGFua3MgdG8gbG9uZyBjb252ZXJzYXRpb25zIHdpdGgKKyAgQW5kcmUgSGVkcmljayAod3d3LmxpbnV4LWlkZS5vcmcpLgorICA8L3BhcmE+CisgIDxwYXJhPgorICBUaGFua3MgdG8gQWxhbiBDb3ggZm9yIHBvaW50aW5nIG91dCBzaW1pbGFyaXRpZXMgCisgIGJldHdlZW4gU0FUQSBhbmQgU0NTSSwgYW5kIGluIGdlbmVyYWwgZm9yIG1vdGl2YXRpb24gdG8gaGFjayBvbgorICBsaWJhdGEuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIGxpYmF0YSdzIGRldmljZSBkZXRlY3Rpb24KKyAgbWV0aG9kLCBhdGFfcGlvX2RldmNoaywgYW5kIGluIGdlbmVyYWwgYWxsIHRoZSBlYXJseSBwcm9iaW5nIHdhcworICBiYXNlZCBvbiBleHRlbnNpdmUgc3R1ZHkgb2YgSGFsZSBMYW5kaXMncyBwcm9iZS9yZXNldCBjb2RlIGluIGhpcworICBBVEFEUlZSIGRyaXZlciAod3d3LmF0YS1hdGFwaS5jb20pLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibGliYXRhRHJpdmVyQXBpIj4KKyAgICAgPHRpdGxlPmxpYmF0YSBEcml2ZXIgQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPgorICAgICAgICA8dGl0bGU+c3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnM8L3RpdGxlPgorCisJPHByb2dyYW1saXN0aW5nPgordm9pZCAoKnBvcnRfZGlzYWJsZSkgKHN0cnVjdCBhdGFfcG9ydCAqKTsKKwk8L3Byb2dyYW1saXN0aW5nPgorCisJPHBhcmE+CisJQ2FsbGVkIGZyb20gYXRhX2J1c19wcm9iZSgpIGFuZCBhdGFfYnVzX3Jlc2V0KCkgZXJyb3IgcGF0aHMsCisJYXMgd2VsbCBhcyB3aGVuIHVucmVnaXN0ZXJpbmcgZnJvbSB0aGUgU0NTSSBtb2R1bGUgKHJtbW9kLCBob3QKKwl1bnBsdWcpLgorCTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KK3ZvaWQgKCpkZXZfY29uZmlnKSAoc3RydWN0IGF0YV9wb3J0ICosIHN0cnVjdCBhdGFfZGV2aWNlICopOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlDYWxsZWQgYWZ0ZXIgSURFTlRJRlkgW1BBQ0tFVF0gREVWSUNFIGlzIGlzc3VlZCB0byBlYWNoIGRldmljZQorCWZvdW5kLiAgVHlwaWNhbGx5IHVzZWQgdG8gYXBwbHkgZGV2aWNlLXNwZWNpZmljIGZpeHVwcyBwcmlvciB0bworCWlzc3VlIG9mIFNFVCBGRUFUVVJFUyAtIFhGRVIgTU9ERSwgYW5kIHByaW9yIHRvIG9wZXJhdGlvbi4KKwk8L3BhcmE+CisKKwk8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkICgqc2V0X3Bpb21vZGUpIChzdHJ1Y3QgYXRhX3BvcnQgKiwgc3RydWN0IGF0YV9kZXZpY2UgKik7Cit2b2lkICgqc2V0X2RtYW1vZGUpIChzdHJ1Y3QgYXRhX3BvcnQgKiwgc3RydWN0IGF0YV9kZXZpY2UgKik7Cit2b2lkICgqcG9zdF9zZXRfbW9kZSkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlIb29rcyBjYWxsZWQgcHJpb3IgdG8gdGhlIGlzc3VlIG9mIFNFVCBGRUFUVVJFUyAtIFhGRVIgTU9ERQorCWNvbW1hbmQuICBkZXYtPnBpb19tb2RlIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgd2hlbgorCS0+c2V0X3Bpb21vZGUoKSBpcyBjYWxsZWQsIGFuZCBkZXYtPmRtYV9tb2RlIGlzIGd1YXJhbnRlZWQgdG8gYmUKKwl2YWxpZCB3aGVuIC0+c2V0X2RtYW1vZGUoKSBpcyBjYWxsZWQuICAtPnBvc3Rfc2V0X21vZGUoKSBpcworCWNhbGxlZCB1bmNvbmRpdGlvbmFsbHksIGFmdGVyIHRoZSBTRVQgRkVBVFVSRVMgLSBYRkVSIE1PREUKKwljb21tYW5kIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuCisJPC9wYXJhPgorCisJPHBhcmE+CisJLT5zZXRfcGlvbW9kZSgpIGlzIGFsd2F5cyBjYWxsZWQgKGlmIHByZXNlbnQpLCBidXQKKwktPnNldF9kbWFfbW9kZSgpIGlzIG9ubHkgY2FsbGVkIGlmIERNQSBpcyBwb3NzaWJsZS4KKwk8L3BhcmE+CisKKwk8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkICgqdGZfbG9hZCkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKK3ZvaWQgKCp0Zl9yZWFkKSAoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwktPnRmX2xvYWQoKSBpcyBjYWxsZWQgdG8gbG9hZCB0aGUgZ2l2ZW4gdGFza2ZpbGUgaW50byBoYXJkd2FyZQorCXJlZ2lzdGVycyAvIERNQSBidWZmZXJzLiAgLT50Zl9yZWFkKCkgaXMgY2FsbGVkIHRvIHJlYWQgdGhlCisJaGFyZHdhcmUgcmVnaXN0ZXJzIC8gRE1BIGJ1ZmZlcnMsIHRvIG9idGFpbiB0aGUgY3VycmVudCBzZXQgb2YKKwl0YXNrZmlsZSByZWdpc3RlciB2YWx1ZXMuCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordm9pZCAoKmV4ZWNfY29tbWFuZCkoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwljYXVzZXMgYW4gQVRBIGNvbW1hbmQsIHByZXZpb3VzbHkgbG9hZGVkIHdpdGgKKwktPnRmX2xvYWQoKSwgdG8gYmUgaW5pdGlhdGVkIGluIGhhcmR3YXJlLgorCTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KK3U4ICAgKCpjaGVja19zdGF0dXMpKHN0cnVjdCBhdGFfcG9ydCAqYXApOwordm9pZCAoKmRldl9zZWxlY3QpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlSZWFkcyB0aGUgU3RhdHVzIEFUQSBzaGFkb3cgcmVnaXN0ZXIgZnJvbSBoYXJkd2FyZS4gIE9uIHNvbWUKKwloYXJkd2FyZSwgdGhpcyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQKKwljb25kaXRpb24uCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordm9pZCAoKmRldl9zZWxlY3QpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlJc3N1ZXMgdGhlIGxvdy1sZXZlbCBoYXJkd2FyZSBjb21tYW5kKHMpIHRoYXQgY2F1c2VzIG9uZSBvZiBOCisJaGFyZHdhcmUgZGV2aWNlcyB0byBiZSBjb25zaWRlcmVkICdzZWxlY3RlZCcgKGFjdGl2ZSBhbmQKKwlhdmFpbGFibGUgZm9yIHVzZSkgb24gdGhlIEFUQSBidXMuCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordm9pZCAoKnBoeV9yZXNldCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlUaGUgdmVyeSBmaXJzdCBzdGVwIGluIHRoZSBwcm9iZSBwaGFzZS4gIEFjdGlvbnMgdmFyeSBkZXBlbmRpbmcKKwlvbiB0aGUgYnVzIHR5cGUsIHR5cGljYWxseS4gIEFmdGVyIHdha2luZyB1cCB0aGUgZGV2aWNlIGFuZCBwcm9iaW5nCisJZm9yIGRldmljZSBwcmVzZW5jZSAoUEFUQSBhbmQgU0FUQSksIHR5cGljYWxseSBhIHNvZnQgcmVzZXQKKwkoU1JTVCkgd2lsbCBiZSBwZXJmb3JtZWQuICBEcml2ZXJzIHR5cGljYWxseSB1c2UgdGhlIGhlbHBlcgorCWZ1bmN0aW9ucyBhdGFfYnVzX3Jlc2V0KCkgb3Igc2F0YV9waHlfcmVzZXQoKSBmb3IgdGhpcyBob29rLgorCTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KK3ZvaWQgKCpibWRtYV9zZXR1cCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwordm9pZCAoKmJtZG1hX3N0YXJ0KSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCVdoZW4gc2V0dGluZyB1cCBhbiBJREUgQk1ETUEgdHJhbnNhY3Rpb24sIHRoZXNlIGhvb2tzIGFybQorCSgtPmJtZG1hX3NldHVwKSBhbmQgZmlyZSAoLT5ibWRtYV9zdGFydCkgdGhlIGhhcmR3YXJlJ3MgRE1BCisJZW5naW5lLgorCTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KK3ZvaWQgKCpxY19wcmVwKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitpbnQgKCpxY19pc3N1ZSkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlIaWdoZXItbGV2ZWwgaG9va3MsIHRoZXNlIHR3byBob29rcyBjYW4gcG90ZW50aWFsbHkgc3VwZXJjZWRlCisJc2V2ZXJhbCBvZiB0aGUgYWJvdmUgdGFza2ZpbGUvRE1BIGVuZ2luZSBob29rcy4gIC0+cWNfcHJlcCBpcworCWNhbGxlZCBhZnRlciB0aGUgYnVmZmVycyBoYXZlIGJlZW4gRE1BLW1hcHBlZCwgYW5kIGlzIHR5cGljYWxseQorCXVzZWQgdG8gcG9wdWxhdGUgdGhlIGhhcmR3YXJlJ3MgRE1BIHNjYXR0ZXItZ2F0aGVyIHRhYmxlLgorCU1vc3QgZHJpdmVycyB1c2UgdGhlIHN0YW5kYXJkIGF0YV9xY19wcmVwKCkgaGVscGVyIGZ1bmN0aW9uLCBidXQKKwltb3JlIGFkdmFuY2VkIGRyaXZlcnMgcm9sbCB0aGVpciBvd24uCisJPC9wYXJhPgorCTxwYXJhPgorCS0+cWNfaXNzdWUgaXMgdXNlZCB0byBtYWtlIGEgY29tbWFuZCBhY3RpdmUsIG9uY2UgdGhlIGhhcmR3YXJlCisJYW5kIFMvRyB0YWJsZXMgaGF2ZSBiZWVuIHByZXBhcmVkLiAgSURFIEJNRE1BIGRyaXZlcnMgdXNlIHRoZQorCWhlbHBlciBmdW5jdGlvbiBhdGFfcWNfaXNzdWVfcHJvdCgpIGZvciB0YXNrZmlsZSBwcm90b2NvbC1iYXNlZAorCWRpc3BhdGNoLiAgTW9yZSBhZHZhbmNlZCBkcml2ZXJzIHJvbGwgdGhlaXIgb3duIC0+cWNfaXNzdWUKKwlpbXBsZW1lbnRhdGlvbiwgdXNpbmcgdGhpcyBhcyB0aGUgImlzc3VlIG5ldyBBVEEgY29tbWFuZCB0bworCWhhcmR3YXJlIiBob29rLgorCTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KK3ZvaWQgKCplbmdfdGltZW91dCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlUaGlzIGlzIGEgaGlnaCBsZXZlbCBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiwgY2FsbGVkIGZyb20gdGhlCisJZXJyb3IgaGFuZGxpbmcgdGhyZWFkLCB3aGVuIGEgY29tbWFuZCB0aW1lcyBvdXQuCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgoraXJxcmV0dXJuX3QgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwordm9pZCAoKmlycV9jbGVhcikgKHN0cnVjdCBhdGFfcG9ydCAqKTsKKwk8L3Byb2dyYW1saXN0aW5nPgorCisJPHBhcmE+CisJLT5pcnFfaGFuZGxlciBpcyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmUgcmVnaXN0ZXJlZCB3aXRoCisJdGhlIHN5c3RlbSwgYnkgbGliYXRhLiAgLT5pcnFfY2xlYXIgaXMgY2FsbGVkIGR1cmluZyBwcm9iZSBqdXN0CisJYmVmb3JlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyByZWdpc3RlcmVkLCB0byBiZSBzdXJlIGhhcmR3YXJlCisJaXMgcXVpZXQuCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordTMyICgqc2NyX3JlYWQpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKK3ZvaWQgKCpzY3Jfd3JpdGUpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLAorICAgICAgICAgICAgICAgICAgIHUzMiB2YWwpOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlSZWFkIGFuZCB3cml0ZSBzdGFuZGFyZCBTQVRBIHBoeSByZWdpc3RlcnMuICBDdXJyZW50bHkgb25seSB1c2VkCisJaWYgLT5waHlfcmVzZXQgaG9vayBjYWxsZWQgdGhlIHNhdGFfcGh5X3Jlc2V0KCkgaGVscGVyIGZ1bmN0aW9uLgorCTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KK2ludCAoKnBvcnRfc3RhcnQpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3ZvaWQgKCpwb3J0X3N0b3ApIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3ZvaWQgKCpob3N0X3N0b3ApIChzdHJ1Y3QgYXRhX2hvc3Rfc2V0ICpob3N0X3NldCk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCS0+cG9ydF9zdGFydCgpIGlzIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGVhY2gKKwlwb3J0IGFyZSBpbml0aWFsaXplZC4gIFR5cGljYWxseSB0aGlzIGlzIHVzZWQgdG8gYWxsb2MgcGVyLXBvcnQKKwlETUEgYnVmZmVycyAvIHRhYmxlcyAvIHJpbmdzLCBlbmFibGUgRE1BIGVuZ2luZXMsIGFuZCBzaW1pbGFyCisJdGFza3MuICAKKwk8L3BhcmE+CisJPHBhcmE+CisJLT5ob3N0X3N0b3AoKSBpcyBjYWxsZWQgd2hlbiB0aGUgcm1tb2Qgb3IgaG90IHVucGx1ZyBwcm9jZXNzCisJYmVnaW5zLiAgVGhlIGhvb2sgbXVzdCBzdG9wIGFsbCBoYXJkd2FyZSBpbnRlcnJ1cHRzLCBETUEKKwllbmdpbmVzLCBldGMuCisJPC9wYXJhPgorCTxwYXJhPgorCS0+cG9ydF9zdG9wKCkgaXMgY2FsbGVkIGFmdGVyIC0+aG9zdF9zdG9wKCkuICBJdCdzIHNvbGUgZnVuY3Rpb24KKwlpcyB0byByZWxlYXNlIERNQS9tZW1vcnkgcmVzb3VyY2VzLCBub3cgdGhhdCB0aGV5IGFyZSBubyBsb25nZXIKKwlhY3RpdmVseSBiZWluZyB1c2VkLgorCTwvcGFyYT4KKworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImxpYmF0YUV4dCI+CisgICAgIDx0aXRsZT5saWJhdGEgTGlicmFyeTwvdGl0bGU+CishRWRyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibGliYXRhSW50Ij4KKyAgICAgPHRpdGxlPmxpYmF0YSBDb3JlIEludGVybmFsczwvdGl0bGU+CishSWRyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibGliYXRhU2NzaUludCI+CisgICAgIDx0aXRsZT5saWJhdGEgU0NTSSB0cmFuc2xhdGlvbi9lbXVsYXRpb248L3RpdGxlPgorIUVkcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYworIUlkcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9IlBpaXhJbnQiPgorICAgICA8dGl0bGU+YXRhX3BpaXggSW50ZXJuYWxzPC90aXRsZT4KKyFJZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJTSUxJbnQiPgorICAgICA8dGl0bGU+c2F0YV9zaWwgSW50ZXJuYWxzPC90aXRsZT4KKyFJZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKKyAgPC9jaGFwdGVyPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGlicnMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJycy50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjM5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGlicnMudG1wbApAQCAtMCwwICsxLDI4OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJSZWVkLVNvbG9tb24tTGlicmFyeS1HdWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+UmVlZC1Tb2xvbW9uIExpYnJhcnkgUHJvZ3JhbW1pbmcgSW50ZXJmYWNlPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5UaG9tYXM8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5HbGVpeG5lcjwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPnRnbHhAbGludXRyb25peC5kZTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDQ8L3llYXI+CisgICA8aG9sZGVyPlRob21hcyBHbGVpeG5lcjwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgIAlUaGUgZ2VuZXJpYyBSZWVkLVNvbG9tb24gTGlicmFyeSBwcm92aWRlcyBlbmNvZGluZywgZGVjb2RpbmcKKwlhbmQgZXJyb3IgY29ycmVjdGlvbiBmdW5jdGlvbnMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIAlSZWVkLVNvbG9tb24gY29kZXMgYXJlIHVzZWQgaW4gY29tbXVuaWNhdGlvbiBhbmQgc3RvcmFnZQorCWFwcGxpY2F0aW9ucyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIAorICA8L3BhcmE+CisgIDxwYXJhPgorICAJVGhpcyBkb2N1bWVudGF0aW9uIGlzIHByb3ZpZGVkIGZvciBkZXZlbG9wZXJzIHdobyB3YW50IHRvIHV0aWxpemUKKwl0aGUgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBsaWJyYXJ5LgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgCisgIDxjaGFwdGVyIGlkPSJidWdzIj4KKyAgICAgPHRpdGxlPktub3duIEJ1Z3MgQW5kIEFzc3VtcHRpb25zPC90aXRsZT4KKyAgPHBhcmE+CisJTm9uZS4JCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJ1c2FnZSI+CisgICAgIAk8dGl0bGU+VXNhZ2U8L3RpdGxlPgorCTxwYXJhPgorCQlUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgZXhhbXBsZXMgaG93IHRvIHVzZSB0aGUgbGlicmFyeS4KKwk8L3BhcmE+CisJPHNlY3QxPgorCQk8dGl0bGU+SW5pdGlhbGl6aW5nPC90aXRsZT4KKwkJPHBhcmE+CisJCQlUaGUgaW5pdCBmdW5jdGlvbiBpbml0X3JzIHJldHVybnMgYSBwb2ludGVyIHRvIGEKKwkJCXJzIGRlY29kZXIgc3RydWN0dXJlLCB3aGljaCBob2xkcyB0aGUgbmVjZXNzYXJ5CisJCQlpbmZvcm1hdGlvbiBmb3IgZW5jb2RpbmcsIGRlY29kaW5nIGFuZCBlcnJvciBjb3JyZWN0aW9uCisJCQl3aXRoIHRoZSBnaXZlbiBwb2x5bm9taWFsLiBJdCBlaXRoZXIgdXNlcyBhbiBleGlzdGluZworCQkJbWF0Y2hpbmcgZGVjb2RlciBvciBjcmVhdGVzIGEgbmV3IG9uZS4gT24gY3JlYXRpb24gYWxsCisJCQl0aGUgbG9va3VwIHRhYmxlcyBmb3IgZmFzdCBlbi9kZWNvZGluZyBhcmUgY3JlYXRlZC4KKwkJCVRoZSBmdW5jdGlvbiBtYXkgdGFrZSBhIHdoaWxlLCBzbyBtYWtlIHN1cmUgbm90IHRvIAorCQkJY2FsbCBpdCBpbiBjcml0aWNhbCBjb2RlIHBhdGhzLgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KKy8qIHRoZSBSZWVkIFNvbG9tb24gY29udHJvbCBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcnNfY29udHJvbCAqcnNfZGVjb2RlcjsKKworLyogU3ltYm9sc2l6ZSBpcyAxMCAoYml0cykKKyAqIFByaW1pdHZlIHBvbHlub21pYWwgaXMgeF4xMCt4XjMrMQorICogZmlyc3QgY29uc2VjdXRpdmUgcm9vdCBpcyAwCisgKiBwcmltaXR2ZSBlbGVtZW50IHRvIGdlbmVyYXRlIHJvb3RzID0gMQorICogZ2VuZXJhdG9yIHBvbGlub21pYWwgZGVncmVlIChudW1iZXIgb2Ygcm9vdHMpID0gNgorICovCityc19kZWNvZGVyID0gaW5pdF9ycyAoMTAsIDB4NDA5LCAwLCAxLCA2KTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPkVuY29kaW5nPC90aXRsZT4KKwkJPHBhcmE+CisJCQlUaGUgZW5jb2RlciBjYWxjdWxhdGVzIHRoZSBSZWVkLVNvbG9tb24gY29kZSBvdmVyCisJCQl0aGUgZ2l2ZW4gZGF0YSBsZW5ndGggYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIAorCQkJdGhlIHBhcml0eSBidWZmZXIuIE5vdGUgdGhhdCB0aGUgcGFyaXR5IGJ1ZmZlciBtdXN0CisJCQliZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyB0aGUgZW5jb2Rlci4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCVRoZSBleHBhbmRlZCBkYXRhIGNhbiBiZSBpbnZlcnRlZCBvbiB0aGUgZmx5IGJ5CisJCQlwcm92aWRpbmcgYSBub24gemVybyBpbnZlcnNpb24gbWFzay4gVGhlIGV4cGFuZGVkIGRhdGEgaXMKKwkJCVhPUidlZCB3aXRoIHRoZSBtYXNrLiBUaGlzIGlzIHVzZWQgZS5nLiBmb3IgRkxBU0gKKwkJCUVDQywgd2hlcmUgdGhlIGFsbCAweEZGIGlzIGludmVydGVkIHRvIGFuIGFsbCAweDAwLgorCQkJVGhlIFJlZWQtU29sb21vbiBjb2RlIGZvciBhbGwgMHgwMCBpcyBhbGwgMHgwMC4gVGhlCisJCQljb2RlIGlzIGludmVydGVkIGJlZm9yZSBzdG9yaW5nIHRvIEZMQVNIIHNvIGl0IGlzIDB4RkYKKwkJCXRvby4gVGhpcyBwcmV2ZW50J3MgdGhhdCByZWFkaW5nIGZyb20gYW4gZXJhc2VkIEZMQVNICisJCQlyZXN1bHRzIGluIEVDQyBlcnJvcnMuCisJCTwvcGFyYT4KKwkJPHBhcmE+CisJCQlUaGUgZGF0YWJ5dGVzIGFyZSBleHBhbmRlZCB0byB0aGUgZ2l2ZW4gc3ltYm9sIHNpemUKKwkJCW9uIHRoZSBmbHkuIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGVuY29kaW5nIGNvbnRpbnVvdXMKKwkJCWJpdHN0cmVhbXMgd2l0aCBhIHN5bWJvbCBzaXplICE9IDggYXQgdGhlIG1vbWVudC4gSWYKKwkJCWl0IGlzIG5lY2Vzc2FyeSBpdCBzaG91bGQgYmUgbm90IGEgYmlnIGRlYWwgdG8gaW1wbGVtZW50CisJCQlzdWNoIGZ1bmN0aW9uYWxpdHkuCisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorLyogUGFyaXR5IGJ1ZmZlci4gU2l6ZSA9IG51bWJlciBvZiByb290cyAqLwordWludDE2X3QgcGFyWzZdOworLyogSW5pdGlhbGl6ZSB0aGUgcGFyaXR5IGJ1ZmZlciAqLworbWVtc2V0KHBhciwgMCwgc2l6ZW9mKHBhcikpOworLyogRW5jb2RlIDUxMiBieXRlIGluIGRhdGE4LiBTdG9yZSBwYXJpdHkgaW4gYnVmZmVyIHBhciAqLworZW5jb2RlX3JzOCAocnNfZGVjb2RlciwgZGF0YTgsIDUxMiwgcGFyLCAwKTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPkRlY29kaW5nPC90aXRsZT4KKwkJPHBhcmE+CisJCQlUaGUgZGVjb2RlciBjYWxjdWxhdGVzIHRoZSBzeW5kcm9tZSBvdmVyCisJCQl0aGUgZ2l2ZW4gZGF0YSBsZW5ndGggYW5kIHRoZSByZWNlaXZlZCBwYXJpdHkgc3ltYm9scworCQkJYW5kIGNvcnJlY3RzIGVycm9ycyBpbiB0aGUgZGF0YS4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCUlmIGEgc3luZHJvbWUgaXMgYXZhaWxhYmxlIGZyb20gYSBoYXJkd2FyZSBkZWNvZGVyCisJCQl0aGVuIHRoZSBzeW5kcm9tZSBjYWxjdWxhdGlvbiBpcyBza2lwcGVkLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJVGhlIGNvcnJlY3Rpb24gb2YgdGhlIGRhdGEgYnVmZmVyIGNhbiBiZSBzdXBwcmVzc2VkCisJCQlieSBwcm92aWRpbmcgYSBjb3JyZWN0aW9uIHBhdHRlcm4gYnVmZmVyIGFuZCBhbiBlcnJvcgorCQkJbG9jYXRpb24gYnVmZmVyIHRvIHRoZSBkZWNvZGVyLiBUaGUgZGVjb2RlciBzdG9yZXMgdGhlCisJCQljYWxjdWxhdGVkIGVycm9yIGxvY2F0aW9uIGFuZCB0aGUgY29ycmVjdGlvbiBiaXRtYXNrCisJCQlpbiB0aGUgZ2l2ZW4gYnVmZmVycy4gVGhpcyBpcyB1c2VmdWwgZm9yIGhhcmR3YXJlCisJCQlkZWNvZGVycyB3aGljaCB1c2UgYSB3ZWlyZCBiaXQgb3JkZXJpbmcgc2NoZW1lLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJVGhlIGRhdGFieXRlcyBhcmUgZXhwYW5kZWQgdG8gdGhlIGdpdmVuIHN5bWJvbCBzaXplCisJCQlvbiB0aGUgZmx5LiBUaGVyZSBpcyBubyBzdXBwb3J0IGZvciBkZWNvZGluZyBjb250aW51b3VzCisJCQliaXRzdHJlYW1zIHdpdGggYSBzeW1ib2xzaXplICE9IDggYXQgdGhlIG1vbWVudC4gSWYKKwkJCWl0IGlzIG5lY2Vzc2FyeSBpdCBzaG91bGQgYmUgbm90IGEgYmlnIGRlYWwgdG8gaW1wbGVtZW50CisJCQlzdWNoIGZ1bmN0aW9uYWxpdHkuCisJCTwvcGFyYT4KKwkJCisJCTxzZWN0Mj4KKwkJPHRpdGxlPgorCQkJRGVjb2Rpbmcgd2l0aCBzeW5kcm9tZSBjYWxjdWxhdGlvbiwgZGlyZWN0IGRhdGEgY29ycmVjdGlvbgorCQk8L3RpdGxlPgorCQk8cHJvZ3JhbWxpc3Rpbmc+CisvKiBQYXJpdHkgYnVmZmVyLiBTaXplID0gbnVtYmVyIG9mIHJvb3RzICovCit1aW50MTZfdCBwYXJbNl07Cit1aW50OF90ICBkYXRhWzUxMl07CitpbnQgbnVtZXJyOworLyogUmVjZWl2ZSBkYXRhICovCisuLi4uLgorLyogUmVjZWl2ZSBwYXJpdHkgKi8KKy4uLi4uCisvKiBEZWNvZGUgNTEyIGJ5dGUgaW4gZGF0YTguKi8KK251bWVyciA9IGRlY29kZV9yczggKHJzX2RlY29kZXIsIGRhdGE4LCBwYXIsIDUxMiwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCk7CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJCTwvc2VjdDI+CisKKwkJPHNlY3QyPgorCQk8dGl0bGU+CisJCQlEZWNvZGluZyB3aXRoIHN5bmRyb21lIGdpdmVuIGJ5IGhhcmR3YXJlIGRlY29kZXIsIGRpcmVjdCBkYXRhIGNvcnJlY3Rpb24KKwkJPC90aXRsZT4KKwkJPHByb2dyYW1saXN0aW5nPgorLyogUGFyaXR5IGJ1ZmZlci4gU2l6ZSA9IG51bWJlciBvZiByb290cyAqLwordWludDE2X3QgcGFyWzZdLCBzeW5bNl07Cit1aW50OF90ICBkYXRhWzUxMl07CitpbnQgbnVtZXJyOworLyogUmVjZWl2ZSBkYXRhICovCisuLi4uLgorLyogUmVjZWl2ZSBwYXJpdHkgKi8KKy4uLi4uCisvKiBHZXQgc3luZHJvbWUgZnJvbSBoYXJkd2FyZSBkZWNvZGVyICovCisuLi4uLgorLyogRGVjb2RlIDUxMiBieXRlIGluIGRhdGE4LiovCitudW1lcnIgPSBkZWNvZGVfcnM4IChyc19kZWNvZGVyLCBkYXRhOCwgcGFyLCA1MTIsIHN5biwgMCwgTlVMTCwgMCwgTlVMTCk7CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJCTwvc2VjdDI+CisKKwkJPHNlY3QyPgorCQk8dGl0bGU+CisJCQlEZWNvZGluZyB3aXRoIHN5bmRyb21lIGdpdmVuIGJ5IGhhcmR3YXJlIGRlY29kZXIsIG5vIGRpcmVjdCBkYXRhIGNvcnJlY3Rpb24uCisJCTwvdGl0bGU+CisJCTxwYXJhPgorCQkJTm90ZTogSXQncyBub3QgbmVjZXNzYXJ5IHRvIGdpdmUgZGF0YSBhbmQgcmVjZWl2ZWQgcGFyaXR5IHRvIHRoZSBkZWNvZGVyLgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KKy8qIFBhcml0eSBidWZmZXIuIFNpemUgPSBudW1iZXIgb2Ygcm9vdHMgKi8KK3VpbnQxNl90IHBhcls2XSwgc3luWzZdLCBjb3JyWzhdOwordWludDhfdCAgZGF0YVs1MTJdOworaW50IG51bWVyciwgZXJycG9zWzhdOworLyogUmVjZWl2ZSBkYXRhICovCisuLi4uLgorLyogUmVjZWl2ZSBwYXJpdHkgKi8KKy4uLi4uCisvKiBHZXQgc3luZHJvbWUgZnJvbSBoYXJkd2FyZSBkZWNvZGVyICovCisuLi4uLgorLyogRGVjb2RlIDUxMiBieXRlIGluIGRhdGE4LiovCitudW1lcnIgPSBkZWNvZGVfcnM4IChyc19kZWNvZGVyLCBOVUxMLCBOVUxMLCA1MTIsIHN5biwgMCwgZXJycG9zLCAwLCBjb3JyKTsKK2ZvciAoaSA9IDA7IGkgJmx0OyBudW1lcnI7IGkrKykgeworCWRvX2Vycm9yX2NvcnJlY3Rpb25faW5feW91cl9idWZmZXIoZXJycG9zW2ldLCBjb3JyW2ldKTsKK30KKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPC9zZWN0Mj4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPkNsZWFudXA8L3RpdGxlPgorCQk8cGFyYT4KKwkJCVRoZSBmdW5jdGlvbiBmcmVlX3JzIGZyZWVzIHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzLAorCQkJaWYgdGhlIGNhbGxlciBpcyB0aGUgbGFzdCB1c2VyIG9mIHRoZSBkZWNvZGVyLgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KKy8qIFJlbGVhc2UgcmVzb3VyY2VzICovCitmcmVlX3JzKHJzX2RlY29kZXIpOworCQk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdDE+CisKKyAgPC9jaGFwdGVyPgorCQorICA8Y2hhcHRlciBpZD0ic3RydWN0cyI+CisgICAgIDx0aXRsZT5TdHJ1Y3R1cmVzPC90aXRsZT4KKyAgICAgPHBhcmE+CisgICAgIFRoaXMgY2hhcHRlciBjb250YWlucyB0aGUgYXV0b2dlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9mIHRoZSBzdHJ1Y3R1cmVzIHdoaWNoIGFyZQorICAgICB1c2VkIGluIHRoZSBSZWVkLVNvbG9tb24gTGlicmFyeSBhbmQgYXJlIHJlbGV2YW50IGZvciBhIGRldmVsb3Blci4KKyAgICAgPC9wYXJhPgorIUlpbmNsdWRlL2xpbnV4L3JzbGliLmgKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICBUaGlzIGNoYXB0ZXIgY29udGFpbnMgdGhlIGF1dG9nZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvZiB0aGUgUmVlZC1Tb2xvbW9uIGZ1bmN0aW9ucworICAgICB3aGljaCBhcmUgZXhwb3J0ZWQuCisgICAgIDwvcGFyYT4KKyFFbGliL3JlZWRfc29sb21vbi9yZWVkX3NvbG9tb24uYworICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0iY3JlZGl0cyI+CisgICAgIDx0aXRsZT5DcmVkaXRzPC90aXRsZT4KKwk8cGFyYT4KKwkJVGhlIGxpYnJhcnkgY29kZSBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHdhcyB3cml0dGVuIGJ5IFBoaWwgS2Fybi4KKwk8L3BhcmE+CisJPHByb2dyYW1saXN0aW5nPgorCQlDb3B5cmlnaHQgMjAwMiwgUGhpbCBLYXJuLCBLQTlRCisgCQlNYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpCisJPC9wcm9ncmFtbGlzdGluZz4KKwk8cGFyYT4KKwkJVGhlIHdyYXBwZXIgZnVuY3Rpb25zIGFuZCBpbnRlcmZhY2VzIGFyZSB3cml0dGVuIGJ5IFRob21hcyBHbGVpeG5lcgorCTwvcGFyYT4KKwk8cGFyYT4KKwkJTWFueSB1c2VycyBoYXZlIHByb3ZpZGVkIGJ1Z2ZpeGVzLCBpbXByb3ZlbWVudHMgYW5kIGhlbHBpbmcgaGFuZHMgZm9yIHRlc3RpbmcuCisJCVRoYW5rcyBhIGxvdC4KKwk8L3BhcmE+CisJPHBhcmE+CisJCVRoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBkb2N1bWVudDoKKwk8L3BhcmE+CisJPHBhcmE+CisJCVRob21hcyBHbGVpeG5lcjxlbWFpbD50Z2x4QGxpbnV0cm9uaXguZGU8L2VtYWlsPgorCTwvcGFyYT4KKyAgPC9jaGFwdGVyPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xzbS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xzbS50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MzgyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbHNtLnRtcGwKQEAgLTAsMCArMSwyNjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYXJ0aWNsZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8YXJ0aWNsZSBjbGFzcz0id2hpdGVwYXBlciIgaWQ9IkxpbnV4U2VjdXJpdHlNb2R1bGUiIGxhbmc9ImVuIj4KKyA8YXJ0aWNsZWluZm8+CisgPHRpdGxlPkxpbnV4IFNlY3VyaXR5IE1vZHVsZXM6ICBHZW5lcmFsIFNlY3VyaXR5IEhvb2tzIGZvciBMaW51eDwvdGl0bGU+CisgPGF1dGhvcmdyb3VwPgorIDxhdXRob3I+CisgPGZpcnN0bmFtZT5TdGVwaGVuPC9maXJzdG5hbWU+IAorIDxzdXJuYW1lPlNtYWxsZXk8L3N1cm5hbWU+CisgPGFmZmlsaWF0aW9uPgorIDxvcmduYW1lPk5BSSBMYWJzPC9vcmduYW1lPgorIDxhZGRyZXNzPjxlbWFpbD5zc21hbGxleUBuYWkuY29tPC9lbWFpbD48L2FkZHJlc3M+CisgPC9hZmZpbGlhdGlvbj4KKyA8L2F1dGhvcj4KKyA8YXV0aG9yPgorIDxmaXJzdG5hbWU+VGltb3RoeTwvZmlyc3RuYW1lPiAKKyA8c3VybmFtZT5GcmFzZXI8L3N1cm5hbWU+CisgPGFmZmlsaWF0aW9uPgorIDxvcmduYW1lPk5BSSBMYWJzPC9vcmduYW1lPgorIDxhZGRyZXNzPjxlbWFpbD50ZnJhc2VyQG5haS5jb208L2VtYWlsPjwvYWRkcmVzcz4KKyA8L2FmZmlsaWF0aW9uPgorIDwvYXV0aG9yPgorIDxhdXRob3I+CisgPGZpcnN0bmFtZT5DaHJpczwvZmlyc3RuYW1lPiAKKyA8c3VybmFtZT5WYW5jZTwvc3VybmFtZT4KKyA8YWZmaWxpYXRpb24+CisgPG9yZ25hbWU+TkFJIExhYnM8L29yZ25hbWU+CisgPGFkZHJlc3M+PGVtYWlsPmN2YW5jZUBuYWkuY29tPC9lbWFpbD48L2FkZHJlc3M+CisgPC9hZmZpbGlhdGlvbj4KKyA8L2F1dGhvcj4KKyA8L2F1dGhvcmdyb3VwPgorIDwvYXJ0aWNsZWluZm8+CisKKzxzZWN0MT48dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPHBhcmE+CitJbiBNYXJjaCAyMDAxLCB0aGUgTmF0aW9uYWwgU2VjdXJpdHkgQWdlbmN5IChOU0EpIGdhdmUgYSBwcmVzZW50YXRpb24KK2Fib3V0IFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4IChTRUxpbnV4KSBhdCB0aGUgMi41IExpbnV4IEtlcm5lbAorU3VtbWl0LiAgU0VMaW51eCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBmbGV4aWJsZSBhbmQgZmluZS1ncmFpbmVkCitub25kaXNjcmV0aW9uYXJ5IGFjY2VzcyBjb250cm9scyBpbiB0aGUgTGludXgga2VybmVsLCBvcmlnaW5hbGx5CitpbXBsZW1lbnRlZCBhcyBpdHMgb3duIHBhcnRpY3VsYXIga2VybmVsIHBhdGNoLiAgU2V2ZXJhbCBvdGhlcgorc2VjdXJpdHkgcHJvamVjdHMgKGUuZy4gUlNCQUMsIE1lZHVzYSkgaGF2ZSBhbHNvIGRldmVsb3BlZCBmbGV4aWJsZQorYWNjZXNzIGNvbnRyb2wgYXJjaGl0ZWN0dXJlcyBmb3IgdGhlIExpbnV4IGtlcm5lbCwgYW5kIHZhcmlvdXMKK3Byb2plY3RzIGhhdmUgZGV2ZWxvcGVkIHBhcnRpY3VsYXIgYWNjZXNzIGNvbnRyb2wgbW9kZWxzIGZvciBMaW51eAorKGUuZy4gTElEUywgRFRFLCBTdWJEb21haW4pLiAgRWFjaCBwcm9qZWN0IGhhcyBkZXZlbG9wZWQgYW5kCittYWludGFpbmVkIGl0cyBvd24ga2VybmVsIHBhdGNoIHRvIHN1cHBvcnQgaXRzIHNlY3VyaXR5IG5lZWRzLgorPC9wYXJhPgorCis8cGFyYT4KK0luIHJlc3BvbnNlIHRvIHRoZSBOU0EgcHJlc2VudGF0aW9uLCBMaW51cyBUb3J2YWxkcyBtYWRlIGEgc2V0IG9mCityZW1hcmtzIHRoYXQgZGVzY3JpYmVkIGEgc2VjdXJpdHkgZnJhbWV3b3JrIGhlIHdvdWxkIGJlIHdpbGxpbmcgdG8KK2NvbnNpZGVyIGZvciBpbmNsdXNpb24gaW4gdGhlIG1haW5zdHJlYW0gTGludXgga2VybmVsLiAgSGUgZGVzY3JpYmVkIGEKK2dlbmVyYWwgZnJhbWV3b3JrIHRoYXQgd291bGQgcHJvdmlkZSBhIHNldCBvZiBzZWN1cml0eSBob29rcyB0bworY29udHJvbCBvcGVyYXRpb25zIG9uIGtlcm5lbCBvYmplY3RzIGFuZCBhIHNldCBvZiBvcGFxdWUgc2VjdXJpdHkKK2ZpZWxkcyBpbiBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBtYWludGFpbmluZyBzZWN1cml0eSBhdHRyaWJ1dGVzLgorVGhpcyBmcmFtZXdvcmsgY291bGQgdGhlbiBiZSB1c2VkIGJ5IGxvYWRhYmxlIGtlcm5lbCBtb2R1bGVzIHRvCitpbXBsZW1lbnQgYW55IGRlc2lyZWQgbW9kZWwgb2Ygc2VjdXJpdHkuICBMaW51cyBhbHNvIHN1Z2dlc3RlZCB0aGUKK3Bvc3NpYmlsaXR5IG9mIG1pZ3JhdGluZyB0aGUgTGludXggY2FwYWJpbGl0aWVzIGNvZGUgaW50byBzdWNoIGEKK21vZHVsZS4KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgTGludXggU2VjdXJpdHkgTW9kdWxlcyAoTFNNKSBwcm9qZWN0IHdhcyBzdGFydGVkIGJ5IFdpcmVYIHRvCitkZXZlbG9wIHN1Y2ggYSBmcmFtZXdvcmsuICBMU00gaXMgYSBqb2ludCBkZXZlbG9wbWVudCBlZmZvcnQgYnkKK3NldmVyYWwgc2VjdXJpdHkgcHJvamVjdHMsIGluY2x1ZGluZyBJbW11bml4LCBTRUxpbnV4LCBTR0kgYW5kIEphbnVzLAorYW5kIHNldmVyYWwgaW5kaXZpZHVhbHMsIGluY2x1ZGluZyBHcmVnIEtyb2FoLUhhcnRtYW4gYW5kIEphbWVzCitNb3JyaXMsIHRvIGRldmVsb3AgYSBMaW51eCBrZXJuZWwgcGF0Y2ggdGhhdCBpbXBsZW1lbnRzIHRoaXMKK2ZyYW1ld29yay4gIFRoZSBwYXRjaCBpcyBjdXJyZW50bHkgdHJhY2tpbmcgdGhlIDIuNCBzZXJpZXMgYW5kIGlzCit0YXJnZXRlZCBmb3IgaW50ZWdyYXRpb24gaW50byB0aGUgMi41IGRldmVsb3BtZW50IHNlcmllcy4gIFRoaXMKK3RlY2huaWNhbCByZXBvcnQgcHJvdmlkZXMgYW4gb3ZlcnZpZXcgb2YgdGhlIGZyYW1ld29yayBhbmQgdGhlIGV4YW1wbGUKK2NhcGFiaWxpdGllcyBzZWN1cml0eSBtb2R1bGUgcHJvdmlkZWQgYnkgdGhlIExTTSBrZXJuZWwgcGF0Y2guCis8L3BhcmE+CisKKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iZnJhbWV3b3JrIj48dGl0bGU+TFNNIEZyYW1ld29yazwvdGl0bGU+CisKKzxwYXJhPgorVGhlIExTTSBrZXJuZWwgcGF0Y2ggcHJvdmlkZXMgYSBnZW5lcmFsIGtlcm5lbCBmcmFtZXdvcmsgdG8gc3VwcG9ydAorc2VjdXJpdHkgbW9kdWxlcy4gIEluIHBhcnRpY3VsYXIsIHRoZSBMU00gZnJhbWV3b3JrIGlzIHByaW1hcmlseQorZm9jdXNlZCBvbiBzdXBwb3J0aW5nIGFjY2VzcyBjb250cm9sIG1vZHVsZXMsIGFsdGhvdWdoIGZ1dHVyZQorZGV2ZWxvcG1lbnQgaXMgbGlrZWx5IHRvIGFkZHJlc3Mgb3RoZXIgc2VjdXJpdHkgbmVlZHMgc3VjaCBhcworYXVkaXRpbmcuICBCeSBpdHNlbGYsIHRoZSBmcmFtZXdvcmsgZG9lcyBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbAorc2VjdXJpdHk7IGl0IG1lcmVseSBwcm92aWRlcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBzZWN1cml0eQorbW9kdWxlcy4gIFRoZSBMU00ga2VybmVsIHBhdGNoIGFsc28gbW92ZXMgbW9zdCBvZiB0aGUgY2FwYWJpbGl0aWVzCitsb2dpYyBpbnRvIGFuIG9wdGlvbmFsIHNlY3VyaXR5IG1vZHVsZSwgd2l0aCB0aGUgc3lzdGVtIGRlZmF1bHRpbmcKK3RvIHRoZSB0cmFkaXRpb25hbCBzdXBlcnVzZXIgbG9naWMuICBUaGlzIGNhcGFiaWxpdGllcyBtb2R1bGUKK2lzIGRpc2N1c3NlZCBmdXJ0aGVyIGluIDx4cmVmIGxpbmtlbmQ9ImNhcCIvPi4KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgTFNNIGtlcm5lbCBwYXRjaCBhZGRzIHNlY3VyaXR5IGZpZWxkcyB0byBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzCithbmQgaW5zZXJ0cyBjYWxscyB0byBob29rIGZ1bmN0aW9ucyBhdCBjcml0aWNhbCBwb2ludHMgaW4gdGhlIGtlcm5lbAorY29kZSB0byBtYW5hZ2UgdGhlIHNlY3VyaXR5IGZpZWxkcyBhbmQgdG8gcGVyZm9ybSBhY2Nlc3MgY29udHJvbC4gIEl0CithbHNvIGFkZHMgZnVuY3Rpb25zIGZvciByZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBzZWN1cml0eQorbW9kdWxlcywgYW5kIGFkZHMgYSBnZW5lcmFsIDxmdW5jdGlvbj5zZWN1cml0eTwvZnVuY3Rpb24+IHN5c3RlbSBjYWxsCit0byBzdXBwb3J0IG5ldyBzeXN0ZW0gY2FsbHMgZm9yIHNlY3VyaXR5LWF3YXJlIGFwcGxpY2F0aW9ucy4KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgTFNNIHNlY3VyaXR5IGZpZWxkcyBhcmUgc2ltcGx5IDx0eXBlPnZvaWQqPC90eXBlPiBwb2ludGVycy4gIEZvcgorcHJvY2VzcyBhbmQgcHJvZ3JhbSBleGVjdXRpb24gc2VjdXJpdHkgaW5mb3JtYXRpb24sIHNlY3VyaXR5IGZpZWxkcword2VyZSBhZGRlZCB0byA8c3RydWN0bmFtZT5zdHJ1Y3QgdGFza19zdHJ1Y3Q8L3N0cnVjdG5hbWU+IGFuZCAKKzxzdHJ1Y3RuYW1lPnN0cnVjdCBsaW51eF9iaW5wcm08L3N0cnVjdG5hbWU+LiAgRm9yIGZpbGVzeXN0ZW0gc2VjdXJpdHkKK2luZm9ybWF0aW9uLCBhIHNlY3VyaXR5IGZpZWxkIHdhcyBhZGRlZCB0byAKKzxzdHJ1Y3RuYW1lPnN0cnVjdCBzdXBlcl9ibG9jazwvc3RydWN0bmFtZT4uICBGb3IgcGlwZSwgZmlsZSwgYW5kIHNvY2tldAorc2VjdXJpdHkgaW5mb3JtYXRpb24sIHNlY3VyaXR5IGZpZWxkcyB3ZXJlIGFkZGVkIHRvIAorPHN0cnVjdG5hbWU+c3RydWN0IGlub2RlPC9zdHJ1Y3RuYW1lPiBhbmQgCis8c3RydWN0bmFtZT5zdHJ1Y3QgZmlsZTwvc3RydWN0bmFtZT4uICBGb3IgcGFja2V0IGFuZCBuZXR3b3JrIGRldmljZSBzZWN1cml0eQoraW5mb3JtYXRpb24sIHNlY3VyaXR5IGZpZWxkcyB3ZXJlIGFkZGVkIHRvCis8c3RydWN0bmFtZT5zdHJ1Y3Qgc2tfYnVmZjwvc3RydWN0bmFtZT4gYW5kCis8c3RydWN0bmFtZT5zdHJ1Y3QgbmV0X2RldmljZTwvc3RydWN0bmFtZT4uICBGb3IgU3lzdGVtIFYgSVBDIHNlY3VyaXR5CitpbmZvcm1hdGlvbiwgc2VjdXJpdHkgZmllbGRzIHdlcmUgYWRkZWQgdG8KKzxzdHJ1Y3RuYW1lPnN0cnVjdCBrZXJuX2lwY19wZXJtPC9zdHJ1Y3RuYW1lPiBhbmQKKzxzdHJ1Y3RuYW1lPnN0cnVjdCBtc2dfbXNnPC9zdHJ1Y3RuYW1lPjsgYWRkaXRpb25hbGx5LCB0aGUgZGVmaW5pdGlvbnMKK2ZvciA8c3RydWN0bmFtZT5zdHJ1Y3QgbXNnX21zZzwvc3RydWN0bmFtZT4sIDxzdHJ1Y3RuYW1lPnN0cnVjdCAKK21zZ19xdWV1ZTwvc3RydWN0bmFtZT4sIGFuZCA8c3RydWN0bmFtZT5zdHJ1Y3QgCitzaG1pZF9rZXJuZWw8L3N0cnVjdG5hbWU+IHdlcmUgbW92ZWQgdG8gaGVhZGVyIGZpbGVzCisoPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvbXNnLmg8L2ZpbGVuYW1lPiBhbmQKKzxmaWxlbmFtZT5pbmNsdWRlL2xpbnV4L3NobS5oPC9maWxlbmFtZT4gYXMgYXBwcm9wcmlhdGUpIHRvIGFsbG93Cit0aGUgc2VjdXJpdHkgbW9kdWxlcyB0byB1c2UgdGhlc2UgZGVmaW5pdGlvbnMuCis8L3BhcmE+CisKKzxwYXJhPgorRWFjaCBMU00gaG9vayBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBnbG9iYWwgdGFibGUsCitzZWN1cml0eV9vcHMuIFRoaXMgdGFibGUgaXMgYQorPHN0cnVjdG5hbWU+c2VjdXJpdHlfb3BlcmF0aW9uczwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGFzIGRlZmluZWQgYnkKKzxmaWxlbmFtZT5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg8L2ZpbGVuYW1lPi4gIERldGFpbGVkIGRvY3VtZW50YXRpb24KK2ZvciBlYWNoIGhvb2sgaXMgaW5jbHVkZWQgaW4gdGhpcyBoZWFkZXIgZmlsZS4gIEF0IHByZXNlbnQsIHRoaXMKK3N0cnVjdHVyZSBjb25zaXN0cyBvZiBhIGNvbGxlY3Rpb24gb2Ygc3Vic3RydWN0dXJlcyB0aGF0IGdyb3VwIHJlbGF0ZWQKK2hvb2tzIGJhc2VkIG9uIHRoZSBrZXJuZWwgb2JqZWN0IChlLmcuIHRhc2ssIGlub2RlLCBmaWxlLCBza19idWZmLAorZXRjKSBhcyB3ZWxsIGFzIHNvbWUgdG9wLWxldmVsIGhvb2sgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHN5c3RlbQorb3BlcmF0aW9ucy4gIFRoaXMgc3RydWN0dXJlIGlzIGxpa2VseSB0byBiZSBmbGF0dGVuZWQgaW4gdGhlIGZ1dHVyZQorZm9yIHBlcmZvcm1hbmNlLiAgVGhlIHBsYWNlbWVudCBvZiB0aGUgaG9vayBjYWxscyBpbiB0aGUga2VybmVsIGNvZGUKK2lzIGRlc2NyaWJlZCBieSB0aGUgImNhbGxlZDoiIGxpbmVzIGluIHRoZSBwZXItaG9vayBkb2N1bWVudGF0aW9uIGluCit0aGUgaGVhZGVyIGZpbGUuICBUaGUgaG9vayBjYWxscyBjYW4gYWxzbyBiZSBlYXNpbHkgZm91bmQgaW4gdGhlCitrZXJuZWwgY29kZSBieSBsb29raW5nIGZvciB0aGUgc3RyaW5nICJzZWN1cml0eV9vcHMtPiIuCisKKzwvcGFyYT4KKworPHBhcmE+CitMaW51cyBtZW50aW9uZWQgcGVyLXByb2Nlc3Mgc2VjdXJpdHkgaG9va3MgaW4gaGlzIG9yaWdpbmFsIHJlbWFya3MgYXMgYQorcG9zc2libGUgYWx0ZXJuYXRpdmUgdG8gZ2xvYmFsIHNlY3VyaXR5IGhvb2tzLiAgSG93ZXZlciwgaWYgTFNNIHdlcmUKK3RvIHN0YXJ0IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHBlci1wcm9jZXNzIGhvb2tzLCB0aGVuIHRoZSBiYXNlCitmcmFtZXdvcmsgd291bGQgaGF2ZSB0byBkZWFsIHdpdGggaG93IHRvIGhhbmRsZSBvcGVyYXRpb25zIHRoYXQKK2ludm9sdmUgbXVsdGlwbGUgcHJvY2Vzc2VzIChlLmcuIGtpbGwpLCBzaW5jZSBlYWNoIHByb2Nlc3MgbWlnaHQgaGF2ZQoraXRzIG93biBob29rIGZvciBjb250cm9sbGluZyB0aGUgb3BlcmF0aW9uLiAgVGhpcyB3b3VsZCByZXF1aXJlIGEKK2dlbmVyYWwgbWVjaGFuaXNtIGZvciBjb21wb3NpbmcgaG9va3MgaW4gdGhlIGJhc2UgZnJhbWV3b3JrLgorQWRkaXRpb25hbGx5LCBMU00gd291bGQgc3RpbGwgbmVlZCBnbG9iYWwgaG9va3MgZm9yIG9wZXJhdGlvbnMgdGhhdAoraGF2ZSBubyBwcm9jZXNzIGNvbnRleHQgKGUuZy4gbmV0d29yayBpbnB1dCBvcGVyYXRpb25zKS4KK0NvbnNlcXVlbnRseSwgTFNNIHByb3ZpZGVzIGdsb2JhbCBzZWN1cml0eSBob29rcywgYnV0IGEgc2VjdXJpdHkKK21vZHVsZSBpcyBmcmVlIHRvIGltcGxlbWVudCBwZXItcHJvY2VzcyBob29rcyAod2hlcmUgdGhhdCBtYWtlcyBzZW5zZSkKK2J5IHN0b3JpbmcgYSBzZWN1cml0eV9vcHMgdGFibGUgaW4gZWFjaCBwcm9jZXNzJyBzZWN1cml0eSBmaWVsZCBhbmQKK3RoZW4gaW52b2tpbmcgdGhlc2UgcGVyLXByb2Nlc3MgaG9va3MgZnJvbSB0aGUgZ2xvYmFsIGhvb2tzLgorVGhlIHByb2JsZW0gb2YgY29tcG9zaXRpb24gaXMgdGh1cyBkZWZlcnJlZCB0byB0aGUgbW9kdWxlLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBnbG9iYWwgc2VjdXJpdHlfb3BzIHRhYmxlIGlzIGluaXRpYWxpemVkIHRvIGEgc2V0IG9mIGhvb2sKK2Z1bmN0aW9ucyBwcm92aWRlZCBieSBhIGR1bW15IHNlY3VyaXR5IG1vZHVsZSB0aGF0IHByb3ZpZGVzCit0cmFkaXRpb25hbCBzdXBlcnVzZXIgbG9naWMuICBBIDxmdW5jdGlvbj5yZWdpc3Rlcl9zZWN1cml0eTwvZnVuY3Rpb24+CitmdW5jdGlvbiAoaW4gPGZpbGVuYW1lPnNlY3VyaXR5L3NlY3VyaXR5LmM8L2ZpbGVuYW1lPikgaXMgcHJvdmlkZWQgdG8KK2FsbG93IGEgc2VjdXJpdHkgbW9kdWxlIHRvIHNldCBzZWN1cml0eV9vcHMgdG8gcmVmZXIgdG8gaXRzIG93biBob29rCitmdW5jdGlvbnMsIGFuZCBhbiA8ZnVuY3Rpb24+dW5yZWdpc3Rlcl9zZWN1cml0eTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzCitwcm92aWRlZCB0byByZXZlcnQgc2VjdXJpdHlfb3BzIHRvIHRoZSBkdW1teSBtb2R1bGUgaG9va3MuICBUaGlzCittZWNoYW5pc20gaXMgdXNlZCB0byBzZXQgdGhlIHByaW1hcnkgc2VjdXJpdHkgbW9kdWxlLCB3aGljaCBpcworcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgZmluYWwgZGVjaXNpb24gZm9yIGVhY2ggaG9vay4KKzwvcGFyYT4KKworPHBhcmE+CitMU00gYWxzbyBwcm92aWRlcyBhIHNpbXBsZSBtZWNoYW5pc20gZm9yIHN0YWNraW5nIGFkZGl0aW9uYWwgc2VjdXJpdHkKK21vZHVsZXMgd2l0aCB0aGUgcHJpbWFyeSBzZWN1cml0eSBtb2R1bGUuICBJdCBkZWZpbmVzCis8ZnVuY3Rpb24+cmVnaXN0ZXJfc2VjdXJpdHk8L2Z1bmN0aW9uPiBhbmQKKzxmdW5jdGlvbj51bnJlZ2lzdGVyX3NlY3VyaXR5PC9mdW5jdGlvbj4gaG9va3MgaW4gdGhlCis8c3RydWN0bmFtZT5zZWN1cml0eV9vcGVyYXRpb25zPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgYW5kIHByb3ZpZGVzCis8ZnVuY3Rpb24+bW9kX3JlZ19zZWN1cml0eTwvZnVuY3Rpb24+IGFuZAorPGZ1bmN0aW9uPm1vZF91bnJlZ19zZWN1cml0eTwvZnVuY3Rpb24+IGZ1bmN0aW9ucyB0aGF0IGludm9rZSB0aGVzZQoraG9va3MgYWZ0ZXIgcGVyZm9ybWluZyBzb21lIHNhbml0eSBjaGVja2luZy4gIEEgc2VjdXJpdHkgbW9kdWxlIGNhbgorY2FsbCB0aGVzZSBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gc3RhY2sgd2l0aCBvdGhlciBtb2R1bGVzLiAgSG93ZXZlciwKK3RoZSBhY3R1YWwgZGV0YWlscyBvZiBob3cgdGhpcyBzdGFja2luZyBpcyBoYW5kbGVkIGFyZSBkZWZlcnJlZCB0byB0aGUKK21vZHVsZSwgd2hpY2ggY2FuIGltcGxlbWVudCB0aGVzZSBob29rcyBpbiBhbnkgd2F5IGl0IHdpc2hlcworKGluY2x1ZGluZyBhbHdheXMgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGl0IGRvZXMgbm90IHdpc2ggdG8gc3VwcG9ydAorc3RhY2tpbmcpLiAgSW4gdGhpcyBtYW5uZXIsIExTTSBhZ2FpbiBkZWZlcnMgdGhlIHByb2JsZW0gb2YKK2NvbXBvc2l0aW9uIHRvIHRoZSBtb2R1bGUuCis8L3BhcmE+CisKKzxwYXJhPgorQWx0aG91Z2ggdGhlIExTTSBob29rcyBhcmUgb3JnYW5pemVkIGludG8gc3Vic3RydWN0dXJlcyBiYXNlZCBvbgora2VybmVsIG9iamVjdCwgYWxsIG9mIHRoZSBob29rcyBjYW4gYmUgdmlld2VkIGFzIGZhbGxpbmcgaW50byB0d28KK21ham9yIGNhdGVnb3JpZXM6IGhvb2tzIHRoYXQgYXJlIHVzZWQgdG8gbWFuYWdlIHRoZSBzZWN1cml0eSBmaWVsZHMKK2FuZCBob29rcyB0aGF0IGFyZSB1c2VkIHRvIHBlcmZvcm0gYWNjZXNzIGNvbnRyb2wuICBFeGFtcGxlcyBvZiB0aGUKK2ZpcnN0IGNhdGVnb3J5IG9mIGhvb2tzIGluY2x1ZGUgdGhlCis8ZnVuY3Rpb24+YWxsb2Nfc2VjdXJpdHk8L2Z1bmN0aW9uPiBhbmQKKzxmdW5jdGlvbj5mcmVlX3NlY3VyaXR5PC9mdW5jdGlvbj4gaG9va3MgZGVmaW5lZCBmb3IgZWFjaCBrZXJuZWwgZGF0YQorc3RydWN0dXJlIHRoYXQgaGFzIGEgc2VjdXJpdHkgZmllbGQuICBUaGVzZSBob29rcyBhcmUgdXNlZCB0byBhbGxvY2F0ZQorYW5kIGZyZWUgc2VjdXJpdHkgc3RydWN0dXJlcyBmb3Iga2VybmVsIG9iamVjdHMuICBUaGUgZmlyc3QgY2F0ZWdvcnkKK29mIGhvb2tzIGFsc28gaW5jbHVkZXMgaG9va3MgdGhhdCBzZXQgaW5mb3JtYXRpb24gaW4gdGhlIHNlY3VyaXR5CitmaWVsZCBhZnRlciBhbGxvY2F0aW9uLCBzdWNoIGFzIHRoZSA8ZnVuY3Rpb24+cG9zdF9sb29rdXA8L2Z1bmN0aW9uPgoraG9vayBpbiA8c3RydWN0bmFtZT5zdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfb3BzPC9zdHJ1Y3RuYW1lPi4gIFRoaXMgaG9vaworaXMgdXNlZCB0byBzZXQgc2VjdXJpdHkgaW5mb3JtYXRpb24gZm9yIGlub2RlcyBhZnRlciBzdWNjZXNzZnVsIGxvb2t1cAorb3BlcmF0aW9ucy4gIEFuIGV4YW1wbGUgb2YgdGhlIHNlY29uZCBjYXRlZ29yeSBvZiBob29rcyBpcyB0aGUKKzxmdW5jdGlvbj5wZXJtaXNzaW9uPC9mdW5jdGlvbj4gaG9vayBpbiAKKzxzdHJ1Y3RuYW1lPnN0cnVjdCBpbm9kZV9zZWN1cml0eV9vcHM8L3N0cnVjdG5hbWU+LiAgVGhpcyBob29rIGNoZWNrcworcGVybWlzc2lvbiB3aGVuIGFjY2Vzc2luZyBhbiBpbm9kZS4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPHNlY3QxIGlkPSJjYXAiPjx0aXRsZT5MU00gQ2FwYWJpbGl0aWVzIE1vZHVsZTwvdGl0bGU+CisKKzxwYXJhPgorVGhlIExTTSBrZXJuZWwgcGF0Y2ggbW92ZXMgbW9zdCBvZiB0aGUgZXhpc3RpbmcgUE9TSVguMWUgY2FwYWJpbGl0aWVzCitsb2dpYyBpbnRvIGFuIG9wdGlvbmFsIHNlY3VyaXR5IG1vZHVsZSBzdG9yZWQgaW4gdGhlIGZpbGUKKzxmaWxlbmFtZT5zZWN1cml0eS9jYXBhYmlsaXR5LmM8L2ZpbGVuYW1lPi4gIFRoaXMgY2hhbmdlIGFsbG93cwordXNlcnMgd2hvIGRvIG5vdCB3YW50IHRvIHVzZSBjYXBhYmlsaXRpZXMgdG8gb21pdCB0aGlzIGNvZGUgZW50aXJlbHkKK2Zyb20gdGhlaXIga2VybmVsLCBpbnN0ZWFkIHVzaW5nIHRoZSBkdW1teSBtb2R1bGUgZm9yIHRyYWRpdGlvbmFsCitzdXBlcnVzZXIgbG9naWMgb3IgYW55IG90aGVyIG1vZHVsZSB0aGF0IHRoZXkgZGVzaXJlLiAgVGhpcyBjaGFuZ2UKK2Fsc28gYWxsb3dzIHRoZSBkZXZlbG9wZXJzIG9mIHRoZSBjYXBhYmlsaXRpZXMgbG9naWMgdG8gbWFpbnRhaW4gYW5kCitlbmhhbmNlIHRoZWlyIGNvZGUgbW9yZSBmcmVlbHksIHdpdGhvdXQgbmVlZGluZyB0byBpbnRlZ3JhdGUgcGF0Y2hlcworYmFjayBpbnRvIHRoZSBiYXNlIGtlcm5lbC4KKzwvcGFyYT4KKworPHBhcmE+CitJbiBhZGRpdGlvbiB0byBtb3ZpbmcgdGhlIGNhcGFiaWxpdGllcyBsb2dpYywgdGhlIExTTSBrZXJuZWwgcGF0Y2gKK2NvdWxkIG1vdmUgdGhlIGNhcGFiaWxpdHktcmVsYXRlZCBmaWVsZHMgZnJvbSB0aGUga2VybmVsIGRhdGEKK3N0cnVjdHVyZXMgaW50byB0aGUgbmV3IHNlY3VyaXR5IGZpZWxkcyBtYW5hZ2VkIGJ5IHRoZSBzZWN1cml0eQorbW9kdWxlcy4gIEhvd2V2ZXIsIGF0IHByZXNlbnQsIHRoZSBMU00ga2VybmVsIHBhdGNoIGxlYXZlcyB0aGUKK2NhcGFiaWxpdHkgZmllbGRzIGluIHRoZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLiAgSW4gaGlzIG9yaWdpbmFsCityZW1hcmtzLCBMaW51cyBzdWdnZXN0ZWQgdGhhdCB0aGlzIG1pZ2h0IGJlIHByZWZlcmFibGUgc28gdGhhdCBvdGhlcgorc2VjdXJpdHkgbW9kdWxlcyBjYW4gYmUgZWFzaWx5IHN0YWNrZWQgd2l0aCB0aGUgY2FwYWJpbGl0aWVzIG1vZHVsZQord2l0aG91dCBuZWVkaW5nIHRvIGNoYWluIG11bHRpcGxlIHNlY3VyaXR5IHN0cnVjdHVyZXMgb24gdGhlIHNlY3VyaXR5IGZpZWxkLgorSXQgYWxzbyBhdm9pZHMgaW1wb3NpbmcgZXh0cmEgb3ZlcmhlYWQgb24gdGhlIGNhcGFiaWxpdGllcyBtb2R1bGUKK3RvIG1hbmFnZSB0aGUgc2VjdXJpdHkgZmllbGRzLiAgSG93ZXZlciwgdGhlIExTTSBmcmFtZXdvcmsgY291bGQKK2NlcnRhaW5seSBzdXBwb3J0IHN1Y2ggYSBtb3ZlIGlmIGl0IGlzIGRldGVybWluZWQgdG8gYmUgZGVzaXJhYmxlLAord2l0aCBvbmx5IGEgZmV3IGFkZGl0aW9uYWwgY2hhbmdlcyBkZXNjcmliZWQgYmVsb3cuCis8L3BhcmE+CisKKzxwYXJhPgorQXQgcHJlc2VudCwgdGhlIGNhcGFiaWxpdGllcyBsb2dpYyBmb3IgY29tcHV0aW5nIHByb2Nlc3MgY2FwYWJpbGl0aWVzCitvbiA8ZnVuY3Rpb24+ZXhlY3ZlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5zZXQqdWlkPC9mdW5jdGlvbj4sCitjaGVja2luZyBjYXBhYmlsaXRpZXMgZm9yIGEgcGFydGljdWxhciBwcm9jZXNzLCBzYXZpbmcgYW5kIGNoZWNraW5nCitjYXBhYmlsaXRpZXMgZm9yIG5ldGxpbmsgbWVzc2FnZXMsIGFuZCBoYW5kbGluZyB0aGUKKzxmdW5jdGlvbj5jYXBnZXQ8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmNhcHNldDwvZnVuY3Rpb24+IHN5c3RlbQorY2FsbHMgaGF2ZSBiZWVuIG1vdmVkIGludG8gdGhlIGNhcGFiaWxpdGllcyBtb2R1bGUuICBUaGVyZSBhcmUgc3RpbGwgYQorZmV3IGxvY2F0aW9ucyBpbiB0aGUgYmFzZSBrZXJuZWwgd2hlcmUgY2FwYWJpbGl0eS1yZWxhdGVkIGZpZWxkcyBhcmUKK2RpcmVjdGx5IGV4YW1pbmVkIG9yIG1vZGlmaWVkLCBidXQgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgTFNNCitwYXRjaCBkb2VzIGFsbG93IGEgc2VjdXJpdHkgbW9kdWxlIHRvIGNvbXBsZXRlbHkgcmVwbGFjZSB0aGUKK2Fzc2lnbm1lbnQgYW5kIHRlc3Rpbmcgb2YgY2FwYWJpbGl0aWVzLiAgVGhlc2UgZmV3IGxvY2F0aW9ucyB3b3VsZAorbmVlZCB0byBiZSBjaGFuZ2VkIGlmIHRoZSBjYXBhYmlsaXR5LXJlbGF0ZWQgZmllbGRzIHdlcmUgbW92ZWQgaW50bwordGhlIHNlY3VyaXR5IGZpZWxkLiAgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2Yga25vd24gbG9jYXRpb25zIHRoYXQKK3N0aWxsIHBlcmZvcm0gc3VjaCBkaXJlY3QgZXhhbWluYXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mCitjYXBhYmlsaXR5LXJlbGF0ZWQgZmllbGRzOgorPGl0ZW1pemVkbGlzdD4KKzxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZnMvb3Blbi5jPC9maWxlbmFtZT46PGZ1bmN0aW9uPnN5c19hY2Nlc3M8L2Z1bmN0aW9uPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5mcy9sb2NrZC9ob3N0LmM8L2ZpbGVuYW1lPjo8ZnVuY3Rpb24+bmxtX2JpbmRfaG9zdDwvZnVuY3Rpb24+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmZzL25mc2QvYXV0aC5jPC9maWxlbmFtZT46PGZ1bmN0aW9uPm5mc2Rfc2V0dXNlcjwvZnVuY3Rpb24+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmZzL3Byb2MvYXJyYXkuYzwvZmlsZW5hbWU+OjxmdW5jdGlvbj50YXNrX2NhcDwvZnVuY3Rpb24+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPC9hcnRpY2xlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbi9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYW4vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiN2VhMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYW4vTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACisjIFJ1bGVzIGFyZSBwdXQgaW4gRG9jdW1lbnRhdGlvbi9Eb2NCb29rCisKK2NsZWFuLWZpbGVzIDo9ICouOS5neiAqLnNnbWwgbWFucGFnZS5saW5rcyBtYW5wYWdlLnJlZnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tY2Fib29rLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWNhYm9vay50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNjdmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWNhYm9vay50bXBsCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9Ik1DQUd1aWRlIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5NQ0EgRHJpdmVyIFByb2dyYW1taW5nIEludGVyZmFjZTwvdGl0bGU+CisgIAorICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+QWxhbjwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPkNveDwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmFsYW5AcmVkaGF0LmNvbTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+RGF2aWQ8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5XZWluZWhhbGw8L3N1cm5hbWU+CisgICA8L2F1dGhvcj4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5DaHJpczwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPkJlYXVyZWdhcmQ8L3N1cm5hbWU+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMDwveWVhcj4KKyAgIDxob2xkZXI+QWxhbiBDb3g8L2hvbGRlcj4KKyAgIDxob2xkZXI+RGF2aWQgV2VpbmVoYWxsPC9ob2xkZXI+CisgICA8aG9sZGVyPkNocmlzIEJlYXVyZWdhcmQ8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisJVGhlIE1DQSBidXMgZnVuY3Rpb25zIHByb3ZpZGUgYSBnZW5lcmFsaXNlZCBpbnRlcmZhY2UgdG8gZmluZCBNQ0EKKwlidXMgY2FyZHMsIHRvIGNsYWltIHRoZW0gZm9yIGEgZHJpdmVyLCBhbmQgdG8gcmVhZCBhbmQgbWFuaXB1bGF0ZSBQT1MgCisJcmVnaXN0ZXJzIHdpdGhvdXQgYmVpbmcgYXdhcmUgb2YgdGhlIG1vdGhlcmJvYXJkIGludGVybmFscyBvciAKKwljZXJ0YWluIGRlZXAgbWFnaWMgc3BlY2lmaWMgdG8gb25ib2FyZCBkZXZpY2VzLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZSBiYXNpYyBpbnRlcmZhY2UgdG8gdGhlIE1DQSBidXMgZGV2aWNlcyBpcyB0aGUgc2xvdC4gRWFjaCBzbG90CisJaXMgbnVtYmVyZWQgYW5kIHZpcnR1YWwgc2xvdCBudW1iZXJzIGFyZSBhc3NpZ25lZCB0byB0aGUgaW50ZXJuYWwKKwlkZXZpY2VzLiBVc2luZyBhIHBjaV9kZXYgYXMgb3RoZXIgYnVzc2VzIGRvIGRvZXMgbm90IHJlYWxseSBtYWtlCisJc2Vuc2UgaW4gdGhlIE1DQSBjb250ZXh0IGFzIHRoZSBNQ0EgYnVzIHJlc291cmNlcyByZXF1aXJlIGNhcmQKKwlzcGVjaWZpYyBpbnRlcnByZXRhdGlvbi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlGaW5hbGx5IHRoZSBNQ0EgYnVzIGZ1bmN0aW9ucyBwcm92aWRlIGEgcGFyYWxsZWwgc2V0IG9mIERNQQorCWZ1bmN0aW9ucyBtaW1pY2luZyB0aGUgSVNBIGJ1cyBETUEgZnVuY3Rpb25zIGFzIGNsb3NlbHkgYXMgcG9zc2libGUsCisJYWx0aG91Z2ggYWxzbyBzdXBwb3J0aW5nIHRoZSBhZGRpdGlvbmFsIERNQSBmdW5jdGlvbmFsaXR5IG9uIHRoZQorCU1DQSBidXMgY29udHJvbGxlcnMuCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iYnVncyI+CisgICAgIDx0aXRsZT5Lbm93biBCdWdzIEFuZCBBc3N1bXB0aW9uczwvdGl0bGU+CisgIDxwYXJhPgorCU5vbmUuCQorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0icHViZnVuY3Rpb25zIj4KKyAgICAgPHRpdGxlPlB1YmxpYyBGdW5jdGlvbnMgUHJvdmlkZWQ8L3RpdGxlPgorIUVhcmNoL2kzODYva2VybmVsL21jYS5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZG1hZnVuY3Rpb25zIj4KKyAgICAgPHRpdGxlPkRNQSBGdW5jdGlvbnMgUHJvdmlkZWQ8L3RpdGxlPgorIUlpbmNsdWRlL2FzbS1pMzg2L21jYV9kbWEuaAorICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDYzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCkBAIC0wLDAgKzEsMTMyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJNVEQtTkFORC1HdWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+TVREIE5BTkQgRHJpdmVyIFByb2dyYW1taW5nIEludGVyZmFjZTwvdGl0bGU+CisgIAorICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+VGhvbWFzPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+R2xlaXhuZXI8L3N1cm5hbWU+CisgICAgPGFmZmlsaWF0aW9uPgorICAgICA8YWRkcmVzcz4KKyAgICAgIDxlbWFpbD50Z2x4QGxpbnV0cm9uaXguZGU8L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDA0PC95ZWFyPgorICAgPGhvbGRlcj5UaG9tYXMgR2xlaXhuZXI8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0iaW50cm8iPgorICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAJVGhlIGdlbmVyaWMgTkFORCBkcml2ZXIgc3VwcG9ydHMgYWxtb3N0IGFsbCBOQU5EIGFuZCBBRy1BTkQgYmFzZWQKKwljaGlwcyBhbmQgY29ubmVjdHMgdGhlbSB0byB0aGUgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorCXN1YnN5c3RlbSBvZiB0aGUgTGludXggS2VybmVsLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAJVGhpcyBkb2N1bWVudGF0aW9uIGlzIHByb3ZpZGVkIGZvciBkZXZlbG9wZXJzIHdobyB3YW50IHRvIGltcGxlbWVudAorCWJvYXJkIGRyaXZlcnMgb3IgZmlsZXN5c3RlbSBkcml2ZXJzIHN1aXRhYmxlIGZvciBOQU5EIGRldmljZXMuCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorICAKKyAgPGNoYXB0ZXIgaWQ9ImJ1Z3MiPgorICAgICA8dGl0bGU+S25vd24gQnVncyBBbmQgQXNzdW1wdGlvbnM8L3RpdGxlPgorICA8cGFyYT4KKwlOb25lLgkKKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImRvY2hpbnRzIj4KKyAgICAgPHRpdGxlPkRvY3VtZW50YXRpb24gaGludHM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAgICAgVGhlIGZ1bmN0aW9uIGFuZCBzdHJ1Y3R1cmUgZG9jcyBhcmUgYXV0b2dlbmVyYXRlZC4gRWFjaCBmdW5jdGlvbiBhbmQgCisgICAgIHN0cnVjdCBtZW1iZXIgaGFzIGEgc2hvcnQgZGVzY3JpcHRpb24gd2hpY2ggaXMgbWFya2VkIHdpdGggYW4gW1hYWF0gaWRlbnRpZmllci4KKyAgICAgVGhlIGZvbGxvd2luZyBjaGFwdGVycyBleHBsYWluIHRoZSBtZWFuaW5nIG9mIHRob3NlIGlkZW50aWZpZXJzLgorICAgICA8L3BhcmE+CisgICAgIDxzZWN0MT4gICAKKwk8dGl0bGU+RnVuY3Rpb24gaWRlbnRpZmllcnMgW1hYWF08L3RpdGxlPgorICAgICAJPHBhcmE+CisJVGhlIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggW1hYWF0gaWRlbnRpZmllcnMgaW4gdGhlIHNob3J0CisJY29tbWVudC4gVGhlIGlkZW50aWZpZXJzIGV4cGxhaW4gdGhlIHVzYWdlIGFuZCBzY29wZSBvZiB0aGUKKwlmdW5jdGlvbnMuIEZvbGxvd2luZyBpZGVudGlmaWVycyBhcmUgdXNlZDoKKyAgICAgCTwvcGFyYT4KKwk8aXRlbWl6ZWRsaXN0PgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJICAJW01URCBJbnRlcmZhY2VdPC9wYXJhPjxwYXJhPgorCQlUaGVzZSBmdW5jdGlvbnMgcHJvdmlkZSB0aGUgaW50ZXJmYWNlIHRvIHRoZSBNVEQga2VybmVsIEFQSS4gCisJCVRoZXkgYXJlIG5vdCByZXBsYWNhYmxlIGFuZCBwcm92aWRlIGZ1bmN0aW9uYWxpdHkKKwkJd2hpY2ggaXMgY29tcGxldGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJICAJW05BTkQgSW50ZXJmYWNlXTwvcGFyYT48cGFyYT4KKwkJVGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgcHJvdmlkZSB0aGUgaW50ZXJmYWNlIHRvIHRoZSBOQU5EIGtlcm5lbCBBUEkuIAorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCSAgCVtHRU5FUklDXTwvcGFyYT48cGFyYT4KKwkJR2VuZXJpYyBmdW5jdGlvbnMgYXJlIG5vdCByZXBsYWNhYmxlIGFuZCBwcm92aWRlIGZ1bmN0aW9uYWxpdHkKKwkJd2hpY2ggaXMgY29tcGxldGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJICAJW0RFRkFVTFRdPC9wYXJhPjxwYXJhPgorCQlEZWZhdWx0IGZ1bmN0aW9ucyBwcm92aWRlIGhhcmR3YXJlIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBzdWl0YWJsZQorCQlmb3IgbW9zdCBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGVzZSBmdW5jdGlvbnMgY2FuIGJlIHJlcGxhY2VkIGJ5IHRoZQorCQlib2FyZCBkcml2ZXIgaWYgbmVjY2VjYXJ5LiBUaG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB2aWEgcG9pbnRlcnMgaW4gdGhlCisJCU5BTkQgY2hpcCBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUuIFRoZSBib2FyZCBkcml2ZXIgY2FuIHNldCB0aGUgZnVuY3Rpb25zIHdoaWNoCisJCXNob3VsZCBiZSByZXBsYWNlZCBieSBib2FyZCBkZXBlbmRlbmQgZnVuY3Rpb25zIGJlZm9yZSBjYWxsaW5nIG5hbmRfc2NhbigpLgorCQlJZiB0aGUgZnVuY3Rpb24gcG9pbnRlciBpcyBOVUxMIG9uIGVudHJ5IHRvIG5hbmRfc2NhbigpIHRoZW4gdGhlIHBvaW50ZXIKKwkJaXMgc2V0IHRvIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIHdoaWNoIGlzIHN1aXRhYmxlIGZvciB0aGUgZGV0ZWN0ZWQgY2hpcCB0eXBlLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L2l0ZW1pemVkbGlzdD4KKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPiAgIAorCTx0aXRsZT5TdHJ1Y3QgbWVtYmVyIGlkZW50aWZpZXJzIFtYWFhdPC90aXRsZT4KKyAgICAgCTxwYXJhPgorCVRoZSBzdHJ1Y3QgbWVtYmVycyBhcmUgbWFya2VkIHdpdGggW1hYWF0gaWRlbnRpZmllcnMgaW4gdGhlIAorCWNvbW1lbnQuIFRoZSBpZGVudGlmaWVycyBleHBsYWluIHRoZSB1c2FnZSBhbmQgc2NvcGUgb2YgdGhlCisJbWVtYmVycy4gRm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkOgorICAgICAJPC9wYXJhPgorCTxpdGVtaXplZGxpc3Q+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkgIAlbSU5URVJOXTwvcGFyYT48cGFyYT4KKwkJVGhlc2UgbWVtYmVycyBhcmUgZm9yIE5BTkQgZHJpdmVyIGludGVybmFsIHVzZSBvbmx5IGFuZCBtdXN0IG5vdCBiZQorCQltb2RpZmllZC4gTW9zdCBvZiB0aGVzZSB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgY2hpcCBnZW9tZXRyeQorCQlpbmZvcm1hdGlvbiB3aGljaCBpcyBldmFsdWF0ZWQgZHVyaW5nIG5hbmRfc2NhbigpLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCSAgCVtSRVBMQUNFQUJMRV08L3BhcmE+PHBhcmE+CisJCVJlcGxhY2VhYmxlIG1lbWJlcnMgaG9sZCBoYXJkd2FyZSByZWxhdGVkIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgCisJCXByb3ZpZGVkIGJ5IHRoZSBib2FyZCBkcml2ZXIuIFRoZSBib2FyZCBkcml2ZXIgY2FuIHNldCB0aGUgZnVuY3Rpb25zIHdoaWNoCisJCXNob3VsZCBiZSByZXBsYWNlZCBieSBib2FyZCBkZXBlbmRlbmQgZnVuY3Rpb25zIGJlZm9yZSBjYWxsaW5nIG5hbmRfc2NhbigpLgorCQlJZiB0aGUgZnVuY3Rpb24gcG9pbnRlciBpcyBOVUxMIG9uIGVudHJ5IHRvIG5hbmRfc2NhbigpIHRoZW4gdGhlIHBvaW50ZXIKKwkJaXMgc2V0IHRvIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIHdoaWNoIGlzIHN1aXRhYmxlIGZvciB0aGUgZGV0ZWN0ZWQgY2hpcCB0eXBlLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCSAgCVtCT0FSRFNQRUNJRklDXTwvcGFyYT48cGFyYT4KKwkJQm9hcmQgc3BlY2lmaWMgbWVtYmVycyBob2xkIGhhcmR3YXJlIHJlbGF0ZWQgaW5mb3JtYXRpb24gd2hpY2ggbXVzdAorCQliZSBwcm92aWRlZCBieSB0aGUgYm9hcmQgZHJpdmVyLiBUaGUgYm9hcmQgZHJpdmVyIG11c3Qgc2V0IHRoZSBmdW5jdGlvbgorCQlwb2ludGVycyBhbmQgZGF0YWZpZWxkcyBiZWZvcmUgY2FsbGluZyBuYW5kX3NjYW4oKS4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkgIAlbT1BUSU9OQUxdPC9wYXJhPjxwYXJhPgorCQlPcHRpb25hbCBtZW1iZXJzIGNhbiBob2xkIGluZm9ybWF0aW9uIHJlbGV2YW50IGZvciB0aGUgYm9hcmQgZHJpdmVyLiBUaGUKKwkJZ2VuZXJpYyBOQU5EIGRyaXZlciBjb2RlIGRvZXMgbm90IHVzZSB0aGlzIGluZm9ybWF0aW9uLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L2l0ZW1pemVkbGlzdD4KKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPiAgIAorCisgIDxjaGFwdGVyIGlkPSJiYXNpY2JvYXJkZHJpdmVyIj4KKyAgICAgCTx0aXRsZT5CYXNpYyBib2FyZCBkcml2ZXI8L3RpdGxlPgorCTxwYXJhPgorCQlGb3IgbW9zdCBib2FyZHMgaXQgd2lsbCBiZSBzdWZmaWNpZW50IHRvIHByb3ZpZGUganVzdCB0aGUKKwkJYmFzaWMgZnVuY3Rpb25zIGFuZCBmaWxsIG91dCBzb21lIHJlYWxseSBib2FyZCBkZXBlbmRlbmQKKwkJbWVtYmVycyBpbiB0aGUgbmFuZCBjaGlwIGRlc2NyaXB0aW9uIHN0cnVjdHVyZS4KKwkJU2VlIGRyaXZlcnMvbXRkL25hbmQvc2tlbGV0b24gZm9yIHJlZmVyZW5jZS4KKwk8L3BhcmE+CisJPHNlY3QxPgorCQk8dGl0bGU+QmFzaWMgZGVmaW5lczwvdGl0bGU+CisJCTxwYXJhPgorCQkJQXQgbGVhc3QgeW91IGhhdmUgdG8gcHJvdmlkZSBhIG10ZCBzdHJ1Y3R1cmUgYW5kCisJCQlhIHN0b3JhZ2UgZm9yIHRoZSBpb3JlbWFwJ2VkIGNoaXAgYWRkcmVzcy4KKwkJCVlvdSBjYW4gYWxsb2NhdGUgdGhlIG10ZCBzdHJ1Y3R1cmUgdXNpbmcga21hbGxvYworCQkJb3IgeW91IGNhbiBhbGxvY2F0ZSBpdCBzdGF0aWNhbGx5LgorCQkJSW4gY2FzZSBvZiBzdGF0aWMgYWxsb2NhdGlvbiB5b3UgaGF2ZSB0byBhbGxvY2F0ZQorCQkJYSBuYW5kX2NoaXAgc3RydWN0dXJlIHRvby4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCUttYWxsb2MgYmFzZWQgZXhhbXBsZQorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmJvYXJkX210ZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhc2VhZGRyOworCQk8L3Byb2dyYW1saXN0aW5nPgorCQk8cGFyYT4KKwkJCVN0YXRpYyBleGFtcGxlCisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHN0cnVjdCBtdGRfaW5mbyBib2FyZF9tdGQ7CitzdGF0aWMgc3RydWN0IG5hbmRfY2hpcCBib2FyZF9jaGlwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFzZWFkZHI7CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9zZWN0MT4KKwk8c2VjdDE+CisJCTx0aXRsZT5QYXJ0aXRpb24gZGVmaW5lczwvdGl0bGU+CisJCTxwYXJhPgorCQkJSWYgeW91IHdhbnQgdG8gZGl2aWRlIHlvdXIgZGV2aWNlIGludG8gcGFyaXRpdGlvbnMsIHRoZW4KKwkJCWVuYWJsZSB0aGUgY29uZmlndXJhdGlvbiBzd2l0Y2ggQ09ORklHX01URF9QQVJJVElPTlMgYW5kIGRlZmluZQorCQkJYSBwYXJpdGlvbmluZyBzY2hlbWUgc3VpdGFibGUgdG8geW91ciBib2FyZC4KKwkJPC9wYXJhPgorCQk8cHJvZ3JhbWxpc3Rpbmc+CisjZGVmaW5lIE5VTV9QQVJUSVRJT05TIDIKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0geworCXsgLm5hbWUgPSAiRmxhc2ggcGFydGl0aW9uIDEiLAorCSAgLm9mZnNldCA9ICAwLAorCSAgLnNpemUgPSAgICA4ICogMTAyNCAqIDEwMjQgfSwKKwl7IC5uYW1lID0gIkZsYXNoIHBhcnRpdGlvbiAyIiwKKwkgIC5vZmZzZXQgPSAgTVREUEFSVF9PRlNfTkVYVCwKKwkgIC5zaXplID0gICAgTVREUEFSVF9TSVpfRlVMTCB9LAorfTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPkhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb248L3RpdGxlPgorCQk8cGFyYT4KKwkJCVRoZSBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9uIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgCisJCQljb250cm9sIHBpbnMgb2YgdGhlIE5BTkQgY2hpcChzKS4gCisJCQlUaGUgYWNjZXNzIGNhbiBiZSBkb25lIGJ5IEdQSU8gcGlucyBvciBieSBhZGRyZXNzIGxpbmVzLgorCQkJSWYgeW91IHVzZSBhZGRyZXNzIGxpbmVzLCBtYWtlIHN1cmUgdGhhdCB0aGUgdGltaW5nCisJCQlyZXF1aXJlbWVudHMgYXJlIG1ldC4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCTxlbXBoYXNpcz5HUElPIGJhc2VkIGV4YW1wbGU8L2VtcGhhc2lzPgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyB2b2lkIGJvYXJkX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3sKKwlzd2l0Y2goY21kKXsKKwkJY2FzZSBOQU5EX0NUTF9TRVRDTEU6IC8qIFNldCBDTEUgcGluIGhpZ2ggKi8gYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSQ0xFOiAvKiBTZXQgQ0xFIHBpbiBsb3cgKi8gYnJlYWs7CisJCWNhc2UgTkFORF9DVExfU0VUQUxFOiAvKiBTZXQgQUxFIHBpbiBoaWdoICovIGJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUkFMRTogLyogU2V0IEFMRSBwaW4gbG93ICovIGJyZWFrOworCQljYXNlIE5BTkRfQ1RMX1NFVE5DRTogLyogU2V0IG5DRSBwaW4gbG93ICovIGJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUk5DRTogLyogU2V0IG5DRSBwaW4gaGlnaCAqLyBicmVhazsKKwl9Cit9CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJCTxwYXJhPgorCQkJPGVtcGhhc2lzPkFkZHJlc3MgbGluZXMgYmFzZWQgZXhhbXBsZS48L2VtcGhhc2lzPiBJdCdzIGFzc3VtZWQgdGhhdCB0aGUKKwkJCW5DRSBwaW4gaXMgZHJpdmVuIGJ5IGEgY2hpcCBzZWxlY3QgZGVjb2Rlci4KKwkJPC9wYXJhPgorCQk8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgdm9pZCBib2FyZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopIG10ZC0+cHJpdjsKKwlzd2l0Y2goY21kKXsKKwkJY2FzZSBOQU5EX0NUTF9TRVRDTEU6IHRoaXMtPklPX0FERFJfVyB8PSBDTEVfQURSUl9CSVQ7ICBicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9DTFJDTEU6IHRoaXMtPklPX0FERFJfVyAmYW1wOz0gfkNMRV9BRFJSX0JJVDsgYnJlYWs7CisJCWNhc2UgTkFORF9DVExfU0VUQUxFOiB0aGlzLT5JT19BRERSX1cgfD0gQUxFX0FEUlJfQklUOyAgYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSQUxFOiB0aGlzLT5JT19BRERSX1cgJmFtcDs9IH5BTEVfQURSUl9CSVQ7IGJyZWFrOworCX0KK30KKwkJPC9wcm9ncmFtbGlzdGluZz4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPkRldmljZSByZWFkeSBmdW5jdGlvbjwvdGl0bGU+CisJCTxwYXJhPgorCQkJSWYgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBoYXMgdGhlIHJlYWR5IGJ1c3kgcGluIG9mIHRoZSBOQU5EIGNoaXAgY29ubmVjdGVkIHRvIGEKKwkJCUdQSU8gb3Igb3RoZXIgYWNjZXNpYmxlIEkvTyBwaW4sIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIGJhY2sgdGhlIHN0YXRlIG9mIHRoZQorCQkJcGluLiBUaGUgZnVuY3Rpb24gaGFzIG5vIGFyZ3VtZW50cyBhbmQgc2hvdWxkIHJldHVybiAwLCBpZiB0aGUgZGV2aWNlIGlzIGJ1c3kgKFIvQiBwaW4gCisJCQlpcyBsb3cpIGFuZCAxLCBpZiB0aGUgZGV2aWNlIGlzIHJlYWR5IChSL0IgcGluIGlzIGhpZ2gpLgorCQkJSWYgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBkb2VzIG5vdCBnaXZlIGFjY2VzcyB0byB0aGUgcmVhZHkgYnVzeSBwaW4sIHRoZW4KKwkJCXRoZSBmdW5jdGlvbiBtdXN0IG5vdCBiZSBkZWZpbmVkIGFuZCB0aGUgZnVuY3Rpb24gcG9pbnRlciB0aGlzLT5kZXZfcmVhZHkgaXMgc2V0IHRvIE5VTEwuCQkKKwkJPC9wYXJhPgorCTwvc2VjdDE+CisJPHNlY3QxPgorCQk8dGl0bGU+SW5pdCBmdW5jdGlvbjwvdGl0bGU+CisJCTxwYXJhPgorCQkJVGhlIGluaXQgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBhbmQgc2V0cyB1cCBhbGwgdGhlIGJvYXJkCisJCQlzcGVjaWZpYyBwYXJhbWV0ZXJzIGFuZCBmdW5jdGlvbiBwb2ludGVycy4gV2hlbiBldmVyeXRoaW5nCisJCQlpcyBzZXQgdXAgbmFuZF9zY2FuKCkgaXMgY2FsbGVkLiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvCisJCQlkZXRlY3QgYW5kIGlkZW50aWZ5IHRoZW4gY2hpcC4gSWYgYSBjaGlwIGlzIGZvdW5kIGFsbCB0aGUKKwkJCWludGVybmFsIGRhdGEgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhY2NvcmRpbmdseS4KKwkJCVRoZSBzdHJ1Y3R1cmUocykgaGF2ZSB0byBiZSB6ZXJvZWQgb3V0IGZpcnN0IGFuZCB0aGVuIGZpbGxlZCB3aXRoIHRoZSBuZWNjZWNhcnkgCisJCQlpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlLgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KK2ludCBfX2luaXQgYm9hcmRfaW5pdCAodm9pZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOworCWludCBlcnIgPSAwOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJYm9hcmRfbXRkID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvYXJkX210ZCkgeworCQlwcmludGsgKCJVbmFibGUgdG8gYWxsb2NhdGUgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KKwltZW1zZXQgKChjaGFyICopIGJvYXJkX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCisJLyogbWFwIHBoeXNpY2FsIGFkcmVzcyAqLworCWJhc2VhZGRyID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChDSElQX1BIWVNJQ0FMX0FERFJFU1MsIDEwMjQpOworCWlmKCFiYXNlYWRkcil7CisJCXByaW50aygiSW9yZW1hcCB0byBhY2Nlc3MgTkFORCBjaGlwIGZhaWxlZFxuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gb3V0X210ZDsKKwl9CisKKwkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCk7CisJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KKwlib2FyZF9tdGQtPnByaXYgPSB0aGlzOworCisJLyogU2V0IGFkZHJlc3Mgb2YgTkFORCBJTyBsaW5lcyAqLworCXRoaXMtPklPX0FERFJfUiA9IGJhc2VhZGRyOworCXRoaXMtPklPX0FERFJfVyA9IGJhc2VhZGRyOworCS8qIFJlZmVyZW5jZSBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9uICovCisJdGhpcy0+aHdjb250cm9sID0gYm9hcmRfaHdjb250cm9sOworCS8qIFNldCBjb21tYW5kIGRlbGF5IHRpbWUsIHNlZSBkYXRhc2hlZXQgZm9yIGNvcnJlY3QgdmFsdWUgKi8KKwl0aGlzLT5jaGlwX2RlbGF5ID0gQ0hJUF9ERVBFTkRFTkRfQ09NTUFORF9ERUxBWTsKKwkvKiBBc3NpZ24gdGhlIGRldmljZSByZWFkeSBmdW5jdGlvbiwgaWYgYXZhaWxhYmxlICovCisJdGhpcy0+ZGV2X3JlYWR5ID0gYm9hcmRfZGV2X3JlYWR5OworCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCisJLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJaWYgKG5hbmRfc2NhbiAoYm9hcmRfbXRkLCAxKSkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0X2lvcjsKKwl9CisJCisJYWRkX210ZF9wYXJ0aXRpb25zKGJvYXJkX210ZCwgcGFydGl0aW9uX2luZm8sIE5VTV9QQVJUSVRJT05TKTsKKwlnb3RvIG91dDsKKworb3V0X2lvcjoKKwlpb3VubWFwKCh2b2lkICopYmFzZWFkZHIpOworb3V0X210ZDoKKwlrZnJlZSAoYm9hcmRfbXRkKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorbW9kdWxlX2luaXQoYm9hcmRfaW5pdCk7CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9zZWN0MT4KKwk8c2VjdDE+CisJCTx0aXRsZT5FeGl0IGZ1bmN0aW9uPC90aXRsZT4KKwkJPHBhcmE+CisJCQlUaGUgZXhpdCBmdW5jdGlvbiBpcyBvbmx5IG5lY2NlY2FyeSBpZiB0aGUgZHJpdmVyIGlzCisJCQljb21waWxlZCBhcyBhIG1vZHVsZS4gSXQgcmVsZWFzZXMgYWxsIHJlc291cmNlcyB3aGljaAorCQkJYXJlIGhlbGQgYnkgdGhlIGNoaXAgZHJpdmVyIGFuZCB1bnJlZ2lzdGVycyB0aGUgcGFydGl0aW9ucworCQkJaW4gdGhlIE1URCBsYXllci4KKwkJPC9wYXJhPgorCQk8cHJvZ3JhbWxpc3Rpbmc+CisjaWZkZWYgTU9EVUxFCitzdGF0aWMgdm9pZCBfX2V4aXQgYm9hcmRfY2xlYW51cCAodm9pZCkKK3sKKwkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KKwluYW5kX3JlbGVhc2UgKGJvYXJkX210ZCk7CisKKwkvKiB1bm1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KKwlpb3VubWFwKCh2b2lkICopYmFzZWFkZHIpOworCQorCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCisJa2ZyZWUgKGJvYXJkX210ZCk7Cit9Cittb2R1bGVfZXhpdChib2FyZF9jbGVhbnVwKTsKKyNlbmRpZgorCQk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iYm9hcmRkcml2ZXJzYWR2YW5jZWQiPgorICAgICAJPHRpdGxlPkFkdmFuY2VkIGJvYXJkIGRyaXZlciBmdW5jdGlvbnM8L3RpdGxlPgorCTxwYXJhPgorCQlUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBOQU5ECisJCWRyaXZlci4gRm9yIGEgbGlzdCBvZiBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGJvYXJkCisJCWRyaXZlciBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIG5hbmRfY2hpcCBzdHJ1Y3R1cmUuCisJPC9wYXJhPgorCTxzZWN0MT4KKwkJPHRpdGxlPk11bHRpcGxlIGNoaXAgY29udHJvbDwvdGl0bGU+CisJCTxwYXJhPgorCQkJVGhlIG5hbmQgZHJpdmVyIGNhbiBjb250cm9sIGNoaXAgYXJyYXlzLiBUaGVyZWZvciB0aGUKKwkJCWJvYXJkIGRyaXZlciBtdXN0IHByb3ZpZGUgYW4gb3duIHNlbGVjdF9jaGlwIGZ1bmN0aW9uLiBUaGlzCisJCQlmdW5jdGlvbiBtdXN0IChkZSlzZWxlY3QgdGhlIHJlcXVlc3RlZCBjaGlwLgorCQkJVGhlIGZ1bmN0aW9uIHBvaW50ZXIgaW4gdGhlIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgbXVzdAorCQkJYmUgc2V0IGJlZm9yZSBjYWxsaW5nIG5hbmRfc2NhbigpLiBUaGUgbWF4Y2hpcCBwYXJhbWV0ZXIKKwkJCW9mIG5hbmRfc2NhbigpIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoaXBzIHRvCisJCQlzY2FuIGZvci4gTWFrZSBzdXJlIHRoYXQgdGhlIHNlbGVjdF9jaGlwIGZ1bmN0aW9uIGNhbgorCQkJaGFuZGxlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGNoaXBzLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJVGhlIG5hbmQgZHJpdmVyIGNvbmNhdGVuYXRlcyB0aGUgY2hpcHMgdG8gb25lIHZpcnR1YWwKKwkJCWNoaXAgYW5kIHByb3ZpZGVzIHRoaXMgdmlydHVhbCBjaGlwIHRvIHRoZSBNVEQgbGF5ZXIuCisJCTwvcGFyYT4KKwkJPHBhcmE+CisJCQk8ZW1waGFzaXM+Tm90ZTogVGhlIGRyaXZlciBjYW4gb25seSBoYW5kbGUgbGluZWFyIGNoaXAgYXJyYXlzCisJCQlvZiBlcXVhbGx5IHNpemVkIGNoaXBzLiBUaGVyZSBpcyBubyBzdXBwb3J0IGZvcgorCQkJcGFyYWxsZWwgYXJyYXlzIHdoaWNoIGV4dGVuZCB0aGUgYnVzd2lkdGguPC9lbXBoYXNpcz4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCTxlbXBoYXNpcz5HUElPIGJhc2VkIGV4YW1wbGU8L2VtcGhhc2lzPgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyB2b2lkIGJvYXJkX3NlbGVjdF9jaGlwIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCit7CisJLyogRGVzZWxlY3QgYWxsIGNoaXBzLCBzZXQgYWxsIG5DRSBwaW5zIGhpZ2ggKi8KKwlHUElPKEJPQVJEX05BTkRfTkNFKSB8PSAweGZmOwkKKwlpZiAoY2hpcCA+PSAwKQorCQlHUElPKEJPQVJEX05BTkRfTkNFKSAmYW1wOz0gfiAoMSAmbHQ7Jmx0OyBjaGlwKTsKK30KKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPHBhcmE+CisJCQk8ZW1waGFzaXM+QWRkcmVzcyBsaW5lcyBiYXNlZCBleGFtcGxlLjwvZW1waGFzaXM+CisJCQlJdHMgYXNzdW1lZCB0aGF0IHRoZSBuQ0UgcGlucyBhcmUgY29ubmVjdGVkIHRvIGFuCisJCQlhZGRyZXNzIGRlY29kZXIuCisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHZvaWQgYm9hcmRfc2VsZWN0X2NoaXAgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgbXRkLT5wcml2OworCQorCS8qIERlc2VsZWN0IGFsbCBjaGlwcyAqLworCXRoaXMtPklPX0FERFJfUiAmYW1wOz0gfkJPQVJEX05BTkRfQUREUl9NQVNLOworCXRoaXMtPklPX0FERFJfVyAmYW1wOz0gfkJPQVJEX05BTkRfQUREUl9NQVNLOworCXN3aXRjaCAoY2hpcCkgeworCWNhc2UgMDoKKwkJdGhpcy0+SU9fQUREUl9SIHw9IEJPQVJEX05BTkRfQUREUl9DSElQMDsKKwkJdGhpcy0+SU9fQUREUl9XIHw9IEJPQVJEX05BTkRfQUREUl9DSElQMDsKKwkJYnJlYWs7CisJLi4uLgkKKwljYXNlIG46CisJCXRoaXMtPklPX0FERFJfUiB8PSBCT0FSRF9OQU5EX0FERFJfQ0hJUG47CisJCXRoaXMtPklPX0FERFJfVyB8PSBCT0FSRF9OQU5EX0FERFJfQ0hJUG47CisJCWJyZWFrOworCX0JCit9CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9zZWN0MT4KKwk8c2VjdDE+CisJCTx0aXRsZT5IYXJkd2FyZSBFQ0Mgc3VwcG9ydDwvdGl0bGU+CisJCTxzZWN0Mj4KKwkJCTx0aXRsZT5GdW5jdGlvbnMgYW5kIGNvbnN0YW50czwvdGl0bGU+CisJCQk8cGFyYT4KKwkJCQlUaGUgbmFuZCBkcml2ZXIgc3VwcG9ydHMgdGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mCisJCQkJaGFyZHdhcmUgRUNDLgorCQkJCTxpdGVtaXplZGxpc3Q+CisJCQkJPGxpc3RpdGVtPjxwYXJhPk5BTkRfRUNDX0hXM18yNTY8L3BhcmE+PHBhcmE+CisJCQkJSGFyZHdhcmUgRUNDIGdlbmVyYXRvciBwcm92aWRpbmcgMyBieXRlcyBFQ0MgcGVyCisJCQkJMjU2IGJ5dGUuCisJCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5OQU5EX0VDQ19IVzNfNTEyPC9wYXJhPjxwYXJhPgorCQkJCUhhcmR3YXJlIEVDQyBnZW5lcmF0b3IgcHJvdmlkaW5nIDMgYnl0ZXMgRUNDIHBlcgorCQkJCTUxMiBieXRlLgorCQkJCTwvcGFyYT4JPC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+TkFORF9FQ0NfSFc2XzUxMjwvcGFyYT48cGFyYT4KKwkJCQlIYXJkd2FyZSBFQ0MgZ2VuZXJhdG9yIHByb3ZpZGluZyA2IGJ5dGVzIEVDQyBwZXIKKwkJCQk1MTIgYnl0ZS4KKwkJCQk8L3BhcmE+CTwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPk5BTkRfRUNDX0hXOF81MTI8L3BhcmE+PHBhcmE+CisJCQkJSGFyZHdhcmUgRUNDIGdlbmVyYXRvciBwcm92aWRpbmcgNiBieXRlcyBFQ0MgcGVyCisJCQkJNTEyIGJ5dGUuCisJCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJCTwvaXRlbWl6ZWRsaXN0PgorCQkJCUlmIHlvdXIgaGFyZHdhcmUgZ2VuZXJhdG9yIGhhcyBhIGRpZmZlcmVudCBmdW5jdGlvbmFsaXR5CisJCQkJYWRkIGl0IGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiBuYW5kX2Jhc2UuYworCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJVGhlIGJvYXJkIGRyaXZlciBtdXN0IHByb3ZpZGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKwkJCQk8aXRlbWl6ZWRsaXN0PgorCQkJCTxsaXN0aXRlbT48cGFyYT5lbmFibGVfaHdlY2M8L3BhcmE+PHBhcmE+CisJCQkJVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHJlYWRpbmcgLyB3cml0aW5nIHRvCisJCQkJdGhlIGNoaXAuIFJlc2V0IG9yIGluaXRpYWxpemUgdGhlIGhhcmR3YXJlIGdlbmVyYXRvcgorCQkJCWluIHRoaXMgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhbgorCQkJCWFyZ3VtZW50IHdoaWNoIGxldCB5b3UgZGlzdGluZ3Vpc2ggYmV0d2VlbiByZWFkIAorCQkJCWFuZCB3cml0ZSBvcGVyYXRpb25zLgorCQkJCTwvcGFyYT4JPC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+Y2FsY3VsYXRlX2VjYzwvcGFyYT48cGFyYT4KKwkJCQlUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciByZWFkIC8gd3JpdGUgZnJvbSAvIHRvCisJCQkJdGhlIGNoaXAuIFRyYW5zZmVyIHRoZSBFQ0MgZnJvbSB0aGUgaGFyZHdhcmUgdG8KKwkJCQl0aGUgYnVmZmVyLiBJZiB0aGUgb3B0aW9uIE5BTkRfSFdFQ0NfU1lORFJPTUUgaXMgc2V0CisJCQkJdGhlbiB0aGUgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gd3JpdGUuIFNlZSBiZWxvdy4KKwkJCQk8L3BhcmE+CTwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPmNvcnJlY3RfZGF0YTwvcGFyYT48cGFyYT4KKwkJCQlJbiBjYXNlIG9mIGFuIEVDQyBlcnJvciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IKKwkJCQllcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24uIFJldHVybiAxIHJlc3BlY3RpdmVseSAyCisJCQkJaW4gY2FzZSB0aGUgZXJyb3IgY2FuIGJlIGNvcnJlY3RlZC4gSWYgdGhlIGVycm9yIGlzCisJCQkJbm90IGNvcnJlY3RhYmxlIHJldHVybiAtMS4gSWYgeW91ciBoYXJkd2FyZSBnZW5lcmF0b3IKKwkJCQltYXRjaGVzIHRoZSBkZWZhdWx0IGFsZ29yaXRobSBvZiB0aGUgbmFuZF9lY2Mgc29mdHdhcmUKKwkJCQlnZW5lcmF0b3IgdGhlbiB1c2UgdGhlIGNvcnJlY3Rpb24gZnVuY3Rpb24gcHJvdmlkZWQKKwkJCQlieSBuYW5kX2VjYyBpbnN0ZWFkIG9mIGltcGxlbWVudGluZyBkdXBsaWNhdGVkIGNvZGUuCisJCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJCTwvaXRlbWl6ZWRsaXN0PgorCQkJPC9wYXJhPgorCQk8L3NlY3QyPgorCQk8c2VjdDI+CisJCTx0aXRsZT5IYXJkd2FyZSBFQ0Mgd2l0aCBzeW5kcm9tZSBjYWxjdWxhdGlvbjwvdGl0bGU+CisJCQk8cGFyYT4KKwkJCQlNYW55IGhhcmR3YXJlIEVDQyBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZSBSZWVkLVNvbG9tb24KKwkJCQljb2RlcyBhbmQgY2FsY3VsYXRlIGFuIGVycm9yIHN5bmRyb21lIG9uIHJlYWQuIFRoZSBzeW5kcm9tZQorCQkJCW11c3QgYmUgY29udmVydGVkIHRvIGEgc3RhbmRhcmQgUmVlZC1Tb2xvbW9uIHN5bmRyb21lCisJCQkJYmVmb3JlIGNhbGxpbmcgdGhlIGVycm9yIGNvcnJlY3Rpb24gY29kZSBpbiB0aGUgZ2VuZXJpYworCQkJCVJlZWQtU29sb21vbiBsaWJyYXJ5LgorCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJVGhlIEVDQyBieXRlcyBtdXN0IGJlIHBsYWNlZCBpbW1pZGlhdGVseSBhZnRlciB0aGUgZGF0YQorCQkJCWJ5dGVzIGluIG9yZGVyIHRvIG1ha2UgdGhlIHN5bmRyb21lIGdlbmVyYXRvciB3b3JrLiBUaGlzCisJCQkJaXMgY29udHJhcnkgdG8gdGhlIHVzdWFsIGxheW91dCB1c2VkIGJ5IHNvZnR3YXJlIEVDQy4gVGhlCisJCQkJc2VwZXJhdGlvbiBvZiBkYXRhIGFuZCBvdXQgb2YgYmFuZCBhcmVhIGlzIG5vdCBsb25nZXIKKwkJCQlwb3NzaWJsZS4gVGhlIG5hbmQgZHJpdmVyIGNvZGUgaGFuZGxlcyB0aGlzIGxheW91dCBhbmQKKwkJCQl0aGUgcmVtYWluaW5nIGZyZWUgYnl0ZXMgaW4gdGhlIG9vYiBhcmVhIGFyZSBtYW5hZ2VkIGJ5IAorCQkJCXRoZSBhdXRvcGxhY2VtZW50IGNvZGUuIFByb3ZpZGUgYSBtYXRjaGluZyBvb2ItbGF5b3V0CisJCQkJaW4gdGhpcyBjYXNlLiBTZWUgcnRzX2Zyb200LmMgYW5kIGRpc2tvbmNoaXAuYyBmb3IgCisJCQkJaW1wbGVtZW50YXRpb24gcmVmZXJlbmNlLiBJbiB0aG9zZSBjYXNlcyB3ZSBtdXN0IGFsc28KKwkJCQl1c2UgYmFkIGJsb2NrIHRhYmxlcyBvbiBGTEFTSCwgYmVjYXVzZSB0aGUgRUNDIGxheW91dCBpcworCQkJCWludGVyZmVycmluZyB3aXRoIHRoZSBiYWQgYmxvY2sgbWFya2VyIHBvc2l0aW9ucy4KKwkJCQlTZWUgYmFkIGJsb2NrIHRhYmxlIHN1cHBvcnQgZm9yIGRldGFpbHMuCisJCQk8L3BhcmE+CisJCTwvc2VjdDI+CisJPC9zZWN0MT4KKwk8c2VjdDE+CisJCTx0aXRsZT5CYWQgYmxvY2sgdGFibGUgc3VwcG9ydDwvdGl0bGU+CisJCTxwYXJhPgorCQkJTW9zdCBOQU5EIGNoaXBzIG1hcmsgdGhlIGJhZCBibG9ja3MgYXQgYSBkZWZpbmVkCisJCQlwb3NpdGlvbiBpbiB0aGUgc3BhcmUgYXJlYS4gVGhvc2UgYmxvY2tzIG11c3QgCisJCQlub3QgYmUgZXJhc2VkIHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzIGFzIHRoZSBiYWQgCisJCQlibG9jayBpbmZvcm1hdGlvbiB3b3VsZCBiZSBsb3N0LgorCQkJSXQgaXMgcG9zc2libGUgdG8gY2hlY2sgdGhlIGJhZCBibG9jayBtYXJrIGVhY2gKKwkJCXRpbWUgd2hlbiB0aGUgYmxvY2tzIGFyZSBhY2Nlc3NlZCBieSByZWFkaW5nIHRoZQorCQkJc3BhcmUgYXJlYSBvZiB0aGUgZmlyc3QgcGFnZSBpbiB0aGUgYmxvY2suIFRoaXMKKwkJCWlzIHRpbWUgY29uc3VtaW5nIHNvIGEgYmFkIGJsb2NrIHRhYmxlIGlzIHVzZWQuCisJCTwvcGFyYT4KKwkJPHBhcmE+CisJCQlUaGUgbmFuZCBkcml2ZXIgc3VwcG9ydHMgdmFyaW91cyB0eXBlcyBvZiBiYWQgYmxvY2sKKwkJCXRhYmxlcy4KKwkJCTxpdGVtaXplZGxpc3Q+CisJCQk8bGlzdGl0ZW0+PHBhcmE+UGVyIGRldmljZTwvcGFyYT48cGFyYT4KKwkJCVRoZSBiYWQgYmxvY2sgdGFibGUgY29udGFpbnMgYWxsIGJhZCBibG9jayBpbmZvcm1hdGlvbgorCQkJb2YgdGhlIGRldmljZSB3aGljaCBjYW4gY29uc2lzdCBvZiBtdWx0aXBsZSBjaGlwcy4KKwkJCTwvcGFyYT4JPC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT5QZXIgY2hpcDwvcGFyYT48cGFyYT4KKwkJCUEgYmFkIGJsb2NrIHRhYmxlIGlzIHVzZWQgcGVyIGNoaXAgYW5kIGNvbnRhaW5zIHRoZQorCQkJYmFkIGJsb2NrIGluZm9ybWF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgY2hpcC4KKwkJCTwvcGFyYT4JPC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT5GaXhlZCBvZmZzZXQ8L3BhcmE+PHBhcmE+CisJCQlUaGUgYmFkIGJsb2NrIHRhYmxlIGlzIGxvY2F0ZWQgYXQgYSBmaXhlZCBvZmZzZXQKKwkJCWluIHRoZSBjaGlwIChkZXZpY2UpLiBUaGlzIGFwcGxpZXMgdG8gdmFyaW91cworCQkJRGlza09uQ2hpcCBkZXZpY2VzLgorCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPkF1dG9tYXRpYyBwbGFjZWQ8L3BhcmE+PHBhcmE+CisJCQlUaGUgYmFkIGJsb2NrIHRhYmxlIGlzIGF1dG9tYXRpY2FsbHkgcGxhY2VkIGFuZAorCQkJZGV0ZWN0ZWQgZWl0aGVyIGF0IHRoZSBlbmQgb3IgYXQgdGhlIGJlZ2lubmluZworCQkJb2YgYSBjaGlwIChkZXZpY2UpCisJCQk8L3BhcmE+CTwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+TWlycm9yZWQgdGFibGVzPC9wYXJhPjxwYXJhPgorCQkJVGhlIGJhZCBibG9jayB0YWJsZSBpcyBtaXJyb3JlZCBvbiB0aGUgY2hpcCAoZGV2aWNlKSB0bworCQkJYWxsb3cgdXBkYXRlcyBvZiB0aGUgYmFkIGJsb2NrIHRhYmxlIHdpdGhvdXQgZGF0YSBsb3NzLgorCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJPC9pdGVtaXplZGxpc3Q+CisJCTwvcGFyYT4KKwkJPHBhcmE+CQorCQkJbmFuZF9zY2FuKCkgY2FsbHMgdGhlIGZ1bmN0aW9uIG5hbmRfZGVmYXVsdF9iYnQoKS4gCisJCQluYW5kX2RlZmF1bHRfYmJ0KCkgc2VsZWN0cyBhcHByb3ByaWF0ZSBkZWZhdWx0CisJCQliYWQgYmxvY2sgdGFibGUgZGVzcmlwdG9ycyBkZXBlbmRpbmcgb24gdGhlIGNoaXAgaW5mb3JtYXRpb24KKwkJCXdoaWNoIHdhcyByZXRyaWV2ZWQgYnkgbmFuZF9zY2FuKCkuCisJCTwvcGFyYT4KKwkJPHBhcmE+CisJCQlUaGUgc3RhbmRhcmQgcG9saWN5IGlzIHNjYW5uaW5nIHRoZSBkZXZpY2UgZm9yIGJhZCAKKwkJCWJsb2NrcyBhbmQgYnVpbGQgYSByYW0gYmFzZWQgYmFkIGJsb2NrIHRhYmxlIHdoaWNoCisJCQlhbGxvd3MgZmFzdGVyIGFjY2VzcyB0aGFuIGFsd2F5cyBjaGVja2luZyB0aGUKKwkJCWJhZCBibG9jayBpbmZvcm1hdGlvbiBvbiB0aGUgZmxhc2ggY2hpcCBpdHNlbGYuCisJCTwvcGFyYT4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPkZsYXNoIGJhc2VkIHRhYmxlczwvdGl0bGU+CisJCQk8cGFyYT4KKwkJCQlJdCBtYXkgYmUgZGVzaXJlZCBvciBuZWNjZWNhcnkgdG8ga2VlcCBhIGJhZCBibG9jayB0YWJsZSBpbiBGTEFTSC4gCisJCQkJRm9yIEFHLUFORCBjaGlwcyB0aGlzIGlzIG1hbmRhdG9yeSwgYXMgdGhleSBoYXZlIG5vIGZhY3RvcnkgbWFya2VkCisJCQkJYmFkIGJsb2Nrcy4gVGhleSBoYXZlIGZhY3RvcnkgbWFya2VkIGdvb2QgYmxvY2tzLiBUaGUgbWFya2VyIHBhdHRlcm4KKwkJCQlpcyBlcmFzZWQgd2hlbiB0aGUgYmxvY2sgaXMgZXJhc2VkIHRvIGJlIHJldXNlZC4gU28gaW4gY2FzZSBvZgorCQkJCXBvd2VybG9zcyBiZWZvcmUgd3JpdGluZyB0aGUgcGF0dGVybiBiYWNrIHRvIHRoZSBjaGlwIHRoaXMgYmxvY2sgCisJCQkJd291bGQgYmUgbG9zdCBhbmQgYWRkZWQgdG8gdGhlIGJhZCBibG9ja3MuIFRoZXJlZm9yIHdlIHNjYW4gdGhlIAorCQkJCWNoaXAocykgd2hlbiB3ZSBkZXRlY3QgdGhlbSB0aGUgZmlyc3QgdGltZSBmb3IgZ29vZCBibG9ja3MgYW5kIAorCQkJCXN0b3JlIHRoaXMgaW5mb3JtYXRpb24gaW4gYSBiYWQgYmxvY2sgdGFibGUgYmVmb3JlIGVyYXNpbmcgYW55IAorCQkJCW9mIHRoZSBibG9ja3MuCisJCQk8L3BhcmE+CisJCQk8cGFyYT4KKwkJCQlUaGUgYmxvY2tzIGluIHdoaWNoIHRoZSB0YWJsZXMgYXJlIHN0b3JlZCBhcmUgcHJvY3RldGVkIGFnYWluc3QKKwkJCQlhY2NpZGVudGFsIGFjY2VzcyBieSBtYXJraW5nIHRoZW0gYmFkIGluIHRoZSBtZW1vcnkgYmFkIGJsb2NrCisJCQkJdGFibGUuIFRoZSBiYWQgYmxvY2sgdGFibGUgbWFuYWdtZW50IGZ1bmN0aW9ucyBhcmUgYWxsb3dlZAorCQkJCXRvIGNpcmN1bXZlcm50IHRoaXMgcHJvdGVjdGlvbi4KKwkJCTwvcGFyYT4KKwkJCTxwYXJhPgorCQkJCVRoZSBzaW1wbGVzdCB3YXkgdG8gYWN0aXZhdGUgdGhlIEZMQVNIIGJhc2VkIGJhZCBibG9jayB0YWJsZSBzdXBwb3J0IAorCQkJCWlzIHRvIHNldCB0aGUgb3B0aW9uIE5BTkRfVVNFX0ZMQVNIX0JCVCBpbiB0aGUgb3B0aW9uIGZpZWxkIG9mCisJCQkJdGhlIG5hbmQgY2hpcCBzdHJ1Y3R1cmUgYmVmb3JlIGNhbGxpbmcgbmFuZF9zY2FuKCkuIEZvciBBRy1BTkQKKwkJCQljaGlwcyBpcyB0aGlzIGRvbmUgYnkgZGVmYXVsdC4KKwkJCQlUaGlzIGFjdGl2YXRlcyB0aGUgZGVmYXVsdCBGTEFTSCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgZnVuY3Rpb25hbGl0eSAKKwkJCQlvZiB0aGUgTkFORCBkcml2ZXIuIFRoZSBkZWZhdWx0IGJhZCBibG9jayB0YWJsZSBvcHRpb25zIGFyZQorCQkJCTxpdGVtaXplZGxpc3Q+CisJCQkJPGxpc3RpdGVtPjxwYXJhPlN0b3JlIGJhZCBibG9jayB0YWJsZSBwZXIgY2hpcDwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5Vc2UgMiBiaXRzIHBlciBibG9jazwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5BdXRvbWF0aWMgcGxhY2VtZW50IGF0IHRoZSBlbmQgb2YgdGhlIGNoaXA8L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+VXNlIG1pcnJvcmVkIHRhYmxlcyB3aXRoIHZlcnNpb24gbnVtYmVyczwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5SZXNlcnZlIDQgYmxvY2tzIGF0IHRoZSBlbmQgb2YgdGhlIGNoaXA8L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8L2l0ZW1pemVkbGlzdD4KKwkJCTwvcGFyYT4KKwkJPC9zZWN0Mj4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPlVzZXIgZGVmaW5lZCB0YWJsZXM8L3RpdGxlPgorCQkJPHBhcmE+CisJCQkJVXNlciBkZWZpbmVkIHRhYmxlcyBhcmUgY3JlYXRlZCBieSBmaWxsaW5nIG91dCBhIAorCQkJCW5hbmRfYmJ0X2Rlc2NyIHN0cnVjdHVyZSBhbmQgc3RvcmluZyB0aGUgcG9pbnRlciBpbiB0aGUKKwkJCQluYW5kX2NoaXAgc3RydWN0dXJlIG1lbWJlciBiYnRfdGQgYmVmb3JlIGNhbGxpbmcgbmFuZF9zY2FuKCkuIAorCQkJCUlmIGEgbWlycm9yIHRhYmxlIGlzIG5lY2NlY2FyeSBhIHNlY29uZCBzdHJ1Y3R1cmUgbXVzdCBiZQorCQkJCWNyZWF0ZWQgYW5kIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSBtdXN0IGJlIHN0b3JlZAorCQkJCWluIGJidF9tZCBpbnNpZGUgdGhlIG5hbmRfY2hpcCBzdHJ1Y3R1cmUuIElmIHRoZSBiYnRfbWQgCisJCQkJbWVtYmVyIGlzIHNldCB0byBOVUxMIHRoZW4gb25seSB0aGUgbWFpbiB0YWJsZSBpcyB1c2VkCisJCQkJYW5kIG5vIHNjYW4gZm9yIHRoZSBtaXJyb3JlZCB0YWJsZSBpcyBwZXJmb3JtZWQuCisJCQk8L3BhcmE+CisJCQk8cGFyYT4KKwkJCQlUaGUgbW9zdCBpbXBvcnRhbnQgZmllbGQgaW4gdGhlIG5hbmRfYmJ0X2Rlc2NyIHN0cnVjdHVyZQorCQkJCWlzIHRoZSBvcHRpb25zIGZpZWxkLiBUaGUgb3B0aW9ucyBkZWZpbmUgbW9zdCBvZiB0aGUgCisJCQkJdGFibGUgcHJvcGVydGllcy4gVXNlIHRoZSBwcmVkZWZpbmVkIGNvbnN0YW50cyBmcm9tCisJCQkJbmFuZC5oIHRvIGRlZmluZSB0aGUgb3B0aW9ucy4KKwkJCQk8aXRlbWl6ZWRsaXN0PgorCQkJCTxsaXN0aXRlbT48cGFyYT5OdW1iZXIgb2YgYml0cyBwZXIgYmxvY2s8L3BhcmE+CisJCQkJPHBhcmE+VGhlIHN1cHBvcnRlZCBudW1iZXIgb2YgYml0cyBpcyAxLCAyLCA0LCA4LjwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5UYWJsZSBwZXIgY2hpcDwvcGFyYT4KKwkJCQk8cGFyYT5TZXR0aW5nIHRoZSBjb25zdGFudCBOQU5EX0JCVF9QRVJDSElQIHNlbGVjdHMgdGhhdAorCQkJCWEgYmFkIGJsb2NrIHRhYmxlIGlzIG1hbmFnZWQgZm9yIGVhY2ggY2hpcCBpbiBhIGNoaXAgYXJyYXkuCisJCQkJSWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCB0aGVuIGEgcGVyIGRldmljZSBiYWQgYmxvY2sgdGFibGUKKwkJCQlpcyB1c2VkLjwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5UYWJsZSBsb2NhdGlvbiBpcyBhYnNvbHV0ZTwvcGFyYT4KKwkJCQk8cGFyYT5Vc2UgdGhlIG9wdGlvbiBjb25zdGFudCBOQU5EX0JCVF9BQlNQQUdFIGFuZAorCQkJCWRlZmluZSB0aGUgYWJzb2x1dGUgcGFnZSBudW1iZXIgd2hlcmUgdGhlIGJhZCBibG9jaworCQkJCXRhYmxlIHN0YXJ0cyBpbiB0aGUgZmllbGQgcGFnZXMuIElmIHlvdSBoYXZlIHNlbGVjdGVkIGJhZCBibG9jaworCQkJCXRhYmxlcyBwZXIgY2hpcCBhbmQgeW91IGhhdmUgYSBtdWx0aSBjaGlwIGFycmF5IHRoZW4gdGhlIHN0YXJ0IHBhZ2UKKwkJCQltdXN0IGJlIGdpdmVuIGZvciBlYWNoIGNoaXAgaW4gdGhlIGNoaXAgYXJyYXkuIE5vdGU6IHRoZXJlIGlzIG5vIHNjYW4KKwkJCQlmb3IgYSB0YWJsZSBpZGVudCBwYXR0ZXJuIHBlcmZvcm1lZCwgc28gdGhlIGZpZWxkcyAKKwkJCQlwYXR0ZXJuLCB2ZXJvZmZzLCBvZmZzLCBsZW4gY2FuIGJlIGxlZnQgdW5pbml0aWFsaXplZDwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5UYWJsZSBsb2NhdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGRldGVjdGVkPC9wYXJhPgorCQkJCTxwYXJhPlRoZSB0YWJsZSBjYW4gZWl0aGVyIGJlIGxvY2F0ZWQgaW4gdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGdvb2QKKwkJCQlibG9ja3Mgb2YgdGhlIGNoaXAgKGRldmljZSkuIFNldCBOQU5EX0JCVF9MQVNUQkxPQ0sgdG8gcGxhY2UKKwkJCQl0aGUgYmFkIGJsb2NrIHRhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIGNoaXAgKGRldmljZSkuIFRoZQorCQkJCWJhZCBibG9jayB0YWJsZXMgYXJlIG1hcmtlZCBhbmQgaWRlbnRpZmllZCBieSBhIHBhdHRlcm4gd2hpY2gKKwkJCQlpcyBzdG9yZWQgaW4gdGhlIHNwYXJlIGFyZWEgb2YgdGhlIGZpcnN0IHBhZ2UgaW4gdGhlIGJsb2NrIHdoaWNoCisJCQkJaG9sZHMgdGhlIGJhZCBibG9jayB0YWJsZS4gU3RvcmUgYSBwb2ludGVyIHRvIHRoZSBwYXR0ZXJuICAKKwkJCQlpbiB0aGUgcGF0dGVybiBmaWVsZC4gRnVydGhlciB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuIGhhcyB0byBiZSAKKwkJCQlzdG9yZWQgaW4gbGVuIGFuZCB0aGUgb2Zmc2V0IGluIHRoZSBzcGFyZSBhcmVhIG11c3QgYmUgZ2l2ZW4KKwkJCQlpbiB0aGUgb2ZmcyBtZW1iZXIgb2YgdGhlIG5hbmRfYmJ0X2Rlc2NyIHN0dWN0dXJlLiBGb3IgbWlycm9yZWQKKwkJCQliYWQgYmxvY2sgdGFibGVzIGRpZmZlcmVudCBwYXR0ZXJucyBhcmUgbWFuZGF0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5UYWJsZSBjcmVhdGlvbjwvcGFyYT4KKwkJCQk8cGFyYT5TZXQgdGhlIG9wdGlvbiBOQU5EX0JCVF9DUkVBVEUgdG8gZW5hYmxlIHRoZSB0YWJsZSBjcmVhdGlvbgorCQkJCWlmIG5vIHRhYmxlIGNhbiBiZSBmb3VuZCBkdXJpbmcgdGhlIHNjYW4uIFVzdWFsbHkgdGhpcyBpcyBkb25lIG9ubHkgCisJCQkJb25jZSBpZiBhIG5ldyBjaGlwIGlzIGZvdW5kLiA8L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+VGFibGUgd3JpdGUgc3VwcG9ydDwvcGFyYT4KKwkJCQk8cGFyYT5TZXQgdGhlIG9wdGlvbiBOQU5EX0JCVF9XUklURSB0byBlbmFibGUgdGhlIHRhYmxlIHdyaXRlIHN1cHBvcnQuCisJCQkJVGhpcyBhbGxvd3MgdGhlIHVwZGF0ZSBvZiB0aGUgYmFkIGJsb2NrIHRhYmxlKHMpIGluIGNhc2UgYSBibG9jayBoYXMKKwkJCQl0byBiZSBtYXJrZWQgYmFkIGR1ZSB0byB3ZWFyLiBUaGUgTVREIGludGVyZmFjZSBmdW5jdGlvbiBibG9ja19tYXJrYmFkCisJCQkJaXMgY2FsbGluZyB0aGUgdXBkYXRlIGZ1bmN0aW9uIG9mIHRoZSBiYWQgYmxvY2sgdGFibGUuIElmIHRoZSB3cml0ZQorCQkJCXN1cHBvcnQgaXMgZW5hYmxlZCB0aGVuIHRoZSB0YWJsZSBpcyB1cGRhdGVkIG9uIEZMQVNILjwvcGFyYT4KKwkJCQk8cGFyYT4KKwkJCQlOb3RlOiBXcml0ZSBzdXBwb3J0IHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgZm9yIG1pcnJvcmVkIHRhYmxlcyB3aXRoCisJCQkJdmVyc2lvbiBjb250cm9sLgorCQkJCTwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5UYWJsZSB2ZXJzaW9uIGNvbnRyb2w8L3BhcmE+CisJCQkJPHBhcmE+U2V0IHRoZSBvcHRpb24gTkFORF9CQlRfVkVSU0lPTiB0byBlbmFibGUgdGhlIHRhYmxlIHZlcnNpb24gY29udHJvbC4KKwkJCQlJdCdzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbmFibGUgdGhpcyBmb3IgbWlycm9yZWQgdGFibGVzIHdpdGggd3JpdGUKKwkJCQlzdXBwb3J0LiBJdCBtYWtlcyBzdXJlIHRoYXQgdGhlIHJpc2sgb2YgbG9vc2luZyB0aGUgYmFkIGJsb2NrCisJCQkJdGFibGUgaW5mb3JtYXRpb24gaXMgcmVkdWNlZCB0byB0aGUgbG9zcyBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisJCQkJb25lIHdvcm4gb3V0IGJsb2NrIHdoaWNoIHNob3VsZCBiZSBtYXJrZWQgYmFkLiBUaGUgdmVyc2lvbiBpcyBzdG9yZWQgaW4KKwkJCQk0IGNvbnNlY3V0aXZlIGJ5dGVzIGluIHRoZSBzcGFyZSBhcmVhIG9mIHRoZSBkZXZpY2UuIFRoZSBwb3NpdGlvbiBvZgorCQkJCXRoZSB2ZXJzaW9uIG51bWJlciBpcyBkZWZpbmVkIGJ5IHRoZSBtZW1iZXIgdmVyb2ZmcyBpbiB0aGUgYmFkIGJsb2NrIHRhYmxlCisJCQkJZGVzY3JpcHRvci48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+U2F2ZSBibG9jayBjb250ZW50cyBvbiB3cml0ZTwvcGFyYT4KKwkJCQk8cGFyYT4KKwkJCQlJbiBjYXNlIHRoYXQgdGhlIGJsb2NrIHdoaWNoIGhvbGRzIHRoZSBiYWQgYmxvY2sgdGFibGUgZG9lcyBjb250YWluCisJCQkJb3RoZXIgdXNlZnVsIGluZm9ybWF0aW9uLCBzZXQgdGhlIG9wdGlvbiBOQU5EX0JCVF9TQVZFQ09OVEVOVC4gV2hlbgorCQkJCXRoZSBiYWQgYmxvY2sgdGFibGUgaXMgd3JpdHRlbiB0aGVuIHRoZSB3aG9sZSBibG9jayBpcyByZWFkIHRoZSBiYWQKKwkJCQlibG9jayB0YWJsZSBpcyB1cGRhdGVkIGFuZCB0aGUgYmxvY2sgaXMgZXJhc2VkIGFuZCBldmVyeXRoaW5nIGlzIAorCQkJCXdyaXR0ZW4gYmFjay4gSWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCBvbmx5IHRoZSBiYWQgYmxvY2sgdGFibGUKKwkJCQlpcyB3cml0dGVuIGFuZCBldmVyeXRoaW5nIGVsc2UgaW4gdGhlIGJsb2NrIGlzIGlnbm9yZWQgYW5kIGVyYXNlZC4KKwkJCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrczwvcGFyYT4KKwkJCQk8cGFyYT4KKwkJCQlGb3IgYXV0b21hdGljIHBsYWNlbWVudCBzb21lIGJsb2NrcyBtdXN0IGJlIHJlc2VydmVkIGZvcgorCQkJCWJhZCBibG9jayB0YWJsZSBzdG9yYWdlLiBUaGUgbnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrcyBpcyBkZWZpbmVkIAorCQkJCWluIHRoZSBtYXhibG9ja3MgbWVtYmVyIG9mIHRoZSBiYWJkIGJsb2NrIHRhYmxlIGRlc2NyaXB0aW9uIHN0cnVjdHVyZS4KKwkJCQlSZXNlcnZpbmcgNCBibG9ja3MgZm9yIG1pcnJvcmVkIHRhYmxlcyBzaG91bGQgYmUgYSByZWFzb25hYmxlIG51bWJlci4gCisJCQkJVGhpcyBhbHNvIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB3aGljaCBhcmUgc2Nhbm5lZCBmb3IgdGhlIGJhZAorCQkJCWJsb2NrIHRhYmxlIGlkZW50IHBhdHRlcm4uCisJCQkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPC9pdGVtaXplZGxpc3Q+CisJCQk8L3BhcmE+CisJCTwvc2VjdDI+CisJPC9zZWN0MT4KKwk8c2VjdDE+CisJCTx0aXRsZT5TcGFyZSBhcmVhIChhdXRvKXBsYWNlbWVudDwvdGl0bGU+CisJCTxwYXJhPgorCQkJVGhlIG5hbmQgZHJpdmVyIGltcGxlbWVudHMgZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMgZm9yCisJCQlwbGFjZW1lbnQgb2YgZmlsZXN5c3RlbSBkYXRhIGluIHRoZSBzcGFyZSBhcmVhLCAKKwkJCTxpdGVtaXplZGxpc3Q+CisJCQk8bGlzdGl0ZW0+PHBhcmE+UGxhY2VtZW50IGRlZmluZWQgYnkgZnMgZHJpdmVyPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+QXV0b21hdGljIHBsYWNlbWVudDwvcGFyYT48L2xpc3RpdGVtPgorCQkJPC9pdGVtaXplZGxpc3Q+CisJCQlUaGUgZGVmYXVsdCBwbGFjZW1lbnQgZnVuY3Rpb24gaXMgYXV0b21hdGljIHBsYWNlbWVudC4gVGhlCisJCQluYW5kIGRyaXZlciBoYXMgYnVpbHQgaW4gZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lcyBmb3IgdGhlCisJCQl2YXJpb3VzIGNoaXB0eXBlcy4gSWYgZHVlIHRvIGhhcmR3YXJlIEVDQyBmdW5jdGlvbmFsaXR5IHRoZQorCQkJZGVmYXVsdCBwbGFjZW1lbnQgZG9lcyBub3QgZml0IHRoZW4gdGhlIGJvYXJkIGRyaXZlciBjYW4KKwkJCXByb3ZpZGUgYSBvd24gcGxhY2VtZW50IHNjaGVtZS4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCUZpbGUgc3lzdGVtIGRyaXZlcnMgY2FuIHByb3ZpZGUgYSBvd24gcGxhY2VtZW50IHNjaGVtZSB3aGljaAorCQkJaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUuCisJCTwvcGFyYT4KKwkJPHBhcmE+CisJCQlQbGFjZW1lbnQgc2NoZW1lcyBhcmUgZGVmaW5lZCBieSBhIG5hbmRfb29iaW5mbyBzdHJ1Y3R1cmUKKwkgICAgIAkJPHByb2dyYW1saXN0aW5nPgorc3RydWN0IG5hbmRfb29iaW5mbyB7CisJaW50CXVzZWVjYzsKKwlpbnQJZWNjYnl0ZXM7CisJaW50CWVjY3Bvc1syNF07CisJaW50CW9vYmZyZWVbOF1bMl07Cit9OworCSAgICAgCQk8L3Byb2dyYW1saXN0aW5nPgorCQkJPGl0ZW1pemVkbGlzdD4KKwkJCTxsaXN0aXRlbT48cGFyYT51c2VlY2M8L3BhcmE+PHBhcmE+CisJCQkJVGhlIHVzZWVjYyBtZW1iZXIgY29udHJvbHMgdGhlIGVjYyBhbmQgcGxhY2VtZW50IGZ1bmN0aW9uLiBUaGUgaGVhZGVyCisJCQkJZmlsZSBpbmNsdWRlL210ZC9tdGQtYWJpLmggY29udGFpbnMgY29uc3RhbnRzIHRvIHNlbGVjdCBlY2MgYW5kCisJCQkJcGxhY2VtZW50LiBNVERfTkFOREVDQ19PRkYgc3dpdGNoZXMgb2ZmIHRoZSBlY2MgY29tcGxldGUuIFRoaXMgaXMKKwkJCQlub3QgcmVjb21tZW5kZWQgYW5kIGF2YWlsYWJsZSBmb3IgdGVzdGluZyBhbmQgZGlhZ25vc2lzIG9ubHkuCisJCQkJTVREX05BTkRFQ0NfUExBQ0Ugc2VsZWN0cyBjYWxsZXIgZGVmaW5lZCBwbGFjZW1lbnQsIE1URF9OQU5ERUNDX0FVVE9QTEFDRQorCQkJCXNlbGVjdHMgYXV0b21hdGljIHBsYWNlbWVudC4KKwkJCTwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPmVjY2J5dGVzPC9wYXJhPjxwYXJhPgorCQkJCVRoZSBlY2NieXRlcyBtZW1iZXIgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIgcGFnZS4KKwkJCTwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPmVjY3BvczwvcGFyYT48cGFyYT4KKwkJCQlUaGUgZWNjcG9zIGFycmF5IGhvbGRzIHRoZSBieXRlIG9mZnNldHMgaW4gdGhlIHNwYXJlIGFyZWEgd2hlcmUKKwkJCQl0aGUgZWNjIGNvZGVzIGFyZSBwbGFjZWQuCisJCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT5vb2JmcmVlPC9wYXJhPjxwYXJhPgorCQkJCVRoZSBvb2JmcmVlIGFycmF5IGRlZmluZXMgdGhlIGFyZWFzIGluIHRoZSBzcGFyZSBhcmVhIHdoaWNoIGNhbiBiZQorCQkJCXVzZWQgZm9yIGF1dG9tYXRpYyBwbGFjZW1lbnQuIFRoZSBpbmZvcm1hdGlvbiBpcyBnaXZlbiBpbiB0aGUgZm9ybWF0CisJCQkJe29mZnNldCwgc2l6ZX0uIG9mZnNldCBkZWZpbmVzIHRoZSBzdGFydCBvZiB0aGUgdXNhYmxlIGFyZWEsIHNpemUgdGhlCisJCQkJbGVuZ3RoIGluIGJ5dGVzLiBNb3JlIHRoYW4gb25lIGFyZWEgY2FuIGJlIGRlZmluZWQuIFRoZSBsaXN0IGlzIHRlcm1pbmF0ZWQKKwkJCQlieSBhbiB7MCwgMH0gZW50cnkuCisJCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkJCTwvaXRlbWl6ZWRsaXN0PgorCQk8L3BhcmE+CisJCTxzZWN0Mj4KKwkJCTx0aXRsZT5QbGFjZW1lbnQgZGVmaW5lZCBieSBmcyBkcml2ZXI8L3RpdGxlPgorCQkJPHBhcmE+CisJCQkJVGhlIGNhbGxpbmcgZnVuY3Rpb24gcHJvdmlkZXMgYSBwb2ludGVyIHRvIGEgbmFuZF9vb2JpbmZvCisJCQkJc3RydWN0dXJlIHdoaWNoIGRlZmluZXMgdGhlIGVjYyBwbGFjZW1lbnQuIEZvciB3cml0ZXMgdGhlCisJCQkJY2FsbGVyIG11c3QgcHJvdmlkZSBhIHNwYXJlIGFyZWEgYnVmZmVyIGFsb25nIHdpdGggdGhlCisJCQkJZGF0YSBidWZmZXIuIFRoZSBzcGFyZSBhcmVhIGJ1ZmZlciBzaXplIGlzIChudW1iZXIgb2YgcGFnZXMpICoKKwkJCQkoc2l6ZSBvZiBzcGFyZSBhcmVhKS4gRm9yIHJlYWRzIHRoZSBidWZmZXIgc2l6ZSBpcworCQkJCShudW1iZXIgb2YgcGFnZXMpICogKChzaXplIG9mIHNwYXJlIGFyZWEpICsgKG51bWJlciBvZiBlY2MKKwkJCQlzdGVwcyBwZXIgcGFnZSkgKiBzaXplb2YgKGludCkpLiBUaGUgZHJpdmVyIHN0b3JlcyB0aGUKKwkJCQlyZXN1bHQgb2YgdGhlIGVjYyBjaGVjayBmb3IgZWFjaCB0dXBsZSBpbiB0aGUgc3BhcmUgYnVmZmVyLgorCQkJCVRoZSBzdG9yYWdlIHNlcXVlbmNlIGlzIAorCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJJmx0O3NwYXJlIGRhdGEgcGFnZSAwJmd0OyZsdDtlY2MgcmVzdWx0IDAmZ3Q7Li4uJmx0O2VjYyByZXN1bHQgbiZndDsKKwkJCTwvcGFyYT4KKwkJCTxwYXJhPgorCQkJCS4uLgorCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJJmx0O3NwYXJlIGRhdGEgcGFnZSBuJmd0OyZsdDtlY2MgcmVzdWx0IDAmZ3Q7Li4uJmx0O2VjYyByZXN1bHQgbiZndDsKKwkJCTwvcGFyYT4KKwkJCTxwYXJhPgorCQkJCVRoaXMgaXMgYSBsZWdhY3kgbW9kZSB1c2VkIGJ5IFlBRkZTMS4KKwkJCTwvcGFyYT4KKwkJCTxwYXJhPgorCQkJCUlmIHRoZSBzcGFyZSBhcmVhIGJ1ZmZlciBpcyBOVUxMIHRoZW4gb25seSB0aGUgRUNDIHBsYWNlbWVudCBpcworCQkJCWRvbmUgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBzY2hlbWUgaW4gdGhlIG5hbmRfb29iaW5mbyBzdHJ1Y3R1cmUuCisJCQk8L3BhcmE+CisJCTwvc2VjdDI+CisJCTxzZWN0Mj4KKwkJCTx0aXRsZT5BdXRvbWF0aWMgcGxhY2VtZW50PC90aXRsZT4KKwkJCTxwYXJhPgorCQkJCUF1dG9tYXRpYyBwbGFjZW1lbnQgdXNlcyB0aGUgYnVpbHQgaW4gZGVmYXVsdHMgdG8gcGxhY2UgdGhlCisJCQkJZWNjIGJ5dGVzIGluIHRoZSBzcGFyZSBhcmVhLiBJZiBmaWxlc3lzdGVtIGRhdGEgaGF2ZSB0byBiZSBzdG9yZWQgLworCQkJCXJlYWQgaW50byB0aGUgc3BhcmUgYXJlYSB0aGVuIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIG11c3QgcHJvdmlkZSBhCisJCQkJYnVmZmVyLiBUaGUgYnVmZmVyIHNpemUgcGVyIHBhZ2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb29iZnJlZSBhcnJheSBpbgorCQkJCXRoZSBuYW5kX29vYmluZm8gc3RydWN0dXJlLgorCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJSWYgdGhlIHNwYXJlIGFyZWEgYnVmZmVyIGlzIE5VTEwgdGhlbiBvbmx5IHRoZSBFQ0MgcGxhY2VtZW50IGlzCisJCQkJZG9uZSBhY2NvcmRpbmcgdG8gdGhlIGRlZmF1bHQgYnVpbHRpbiBzY2hlbWUuCisJCQk8L3BhcmE+CisJCTwvc2VjdDI+CisJCTxzZWN0Mj4KKwkJCTx0aXRsZT5Vc2VyIHNwYWNlIHBsYWNlbWVudCBzZWxlY3Rpb248L3RpdGxlPgorCQk8cGFyYT4KKwkJCUFsbCBub24gZWNjIGZ1bmN0aW9ucyBsaWtlIG10ZC0+cmVhZCBhbmQgbXRkLT53cml0ZSB1c2UgYW4gaW50ZXJuYWwgCisJCQlzdHJ1Y3R1cmUsIHdoaWNoIGNhbiBiZSBzZXQgYnkgYW4gaW9jdGwuIFRoaXMgc3RydWN0dXJlIGlzIHByZXNldCAKKwkJCXRvIHRoZSBhdXRvcGxhY2VtZW50IGRlZmF1bHQuCisJICAgICAJCTxwcm9ncmFtbGlzdGluZz4KKwlpb2N0bCAoZmQsIE1FTVNFVE9PQlNFTCwgb29ic2VsKTsKKwkgICAgIAkJPC9wcm9ncmFtbGlzdGluZz4KKwkJCW9vYnNlbCBpcyBhIHBvaW50ZXIgdG8gYSB1c2VyIHN1cHBsaWVkIHN0cnVjdHVyZSBvZiB0eXBlCisJCQluYW5kX29vYmNvbmZpZy4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJlIG11c3QgbWF0Y2ggdGhlIAorCQkJY3JpdGVyaWEgb2YgdGhlIGZpbGVzeXN0ZW0sIHdoaWNoIHdpbGwgYmUgdXNlZC4gU2VlIGFuIGV4YW1wbGUgaW4gdXRpbHMvbmFuZHdyaXRlLmMuCisJCTwvcGFyYT4KKwkJPC9zZWN0Mj4KKwk8L3NlY3QxPgkKKwk8c2VjdDE+CisJCTx0aXRsZT5TcGFyZSBhcmVhIGF1dG9wbGFjZW1lbnQgZGVmYXVsdCBzY2hlbWVzPC90aXRsZT4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPjI1NiBieXRlIHBhZ2VzaXplPC90aXRsZT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMyI+PHRib2R5PgorPHJvdz4KKzxlbnRyeT5PZmZzZXQ8L2VudHJ5PgorPGVudHJ5PkNvbnRlbnQ8L2VudHJ5PgorPGVudHJ5PkNvbW1lbnQ8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDA8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDA8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDA8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDE8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDE8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDE8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDI8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDI8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDI8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDM8L2VudHJ5PgorPGVudHJ5PkF1dG9wbGFjZSAwPC9lbnRyeT4KKzxlbnRyeT48L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDQ8L2VudHJ5PgorPGVudHJ5PkF1dG9wbGFjZSAxPC9lbnRyeT4KKzxlbnRyeT48L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDU8L2VudHJ5PgorPGVudHJ5PkJhZCBibG9jayBtYXJrZXI8L2VudHJ5PgorPGVudHJ5PklmIGFueSBiaXQgaW4gdGhpcyBieXRlIGlzIHplcm8sIHRoZW4gdGhpcyBibG9jayBpcyBiYWQuCitUaGlzIGFwcGxpZXMgb25seSB0byB0aGUgZmlyc3QgcGFnZSBpbiBhIGJsb2NrLiBJbiB0aGUgcmVtYWluaW5nCitwYWdlcyB0aGlzIGJ5dGUgaXMgcmVzZXJ2ZWQ8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDY8L2VudHJ5PgorPGVudHJ5PkF1dG9wbGFjZSAyPC9lbnRyeT4KKzxlbnRyeT48L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDc8L2VudHJ5PgorPGVudHJ5PkF1dG9wbGFjZSAzPC9lbnRyeT4KKzxlbnRyeT48L2VudHJ5PgorPC9yb3c+Cis8L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKwkJPC9zZWN0Mj4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPjUxMiBieXRlIHBhZ2VzaXplPC90aXRsZT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMyI+PHRib2R5PgorPHJvdz4KKzxlbnRyeT5PZmZzZXQ8L2VudHJ5PgorPGVudHJ5PkNvbnRlbnQ8L2VudHJ5PgorPGVudHJ5PkNvbW1lbnQ8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDA8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDA8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIGxvd2VyIDI1NiBCeXRlIGRhdGEgaW4KK3RoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMSBvZiB0aGUgbG93ZXIgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMjwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMjwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgbG93ZXIgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMzwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMzwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgdXBwZXIgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwNDwvZW50cnk+Cis8ZW50cnk+cmVzZXJ2ZWQ8L2VudHJ5PgorPGVudHJ5PnJlc2VydmVkPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDA1PC9lbnRyeT4KKzxlbnRyeT5CYWQgYmxvY2sgbWFya2VyPC9lbnRyeT4KKzxlbnRyeT5JZiBhbnkgYml0IGluIHRoaXMgYnl0ZSBpcyB6ZXJvLCB0aGVuIHRoaXMgYmxvY2sgaXMgYmFkLgorVGhpcyBhcHBsaWVzIG9ubHkgdG8gdGhlIGZpcnN0IHBhZ2UgaW4gYSBibG9jay4gSW4gdGhlIHJlbWFpbmluZworcGFnZXMgdGhpcyBieXRlIGlzIHJlc2VydmVkPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDA2PC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSA0PC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAxIG9mIHRoZSB1cHBlciAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDA3PC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSA1PC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAyIG9mIHRoZSB1cHBlciAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDA4IC0gMHgwRjwvZW50cnk+Cis8ZW50cnk+QXV0b3BsYWNlIDAgLSA3PC9lbnRyeT4KKzxlbnRyeT48L2VudHJ5PgorPC9yb3c+Cis8L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKwkJPC9zZWN0Mj4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPjIwNDggYnl0ZSBwYWdlc2l6ZTwvdGl0bGU+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjMiPjx0Ym9keT4KKzxyb3c+Cis8ZW50cnk+T2Zmc2V0PC9lbnRyeT4KKzxlbnRyeT5Db250ZW50PC9lbnRyeT4KKzxlbnRyeT5Db21tZW50PC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDAwPC9lbnRyeT4KKzxlbnRyeT5CYWQgYmxvY2sgbWFya2VyPC9lbnRyeT4KKzxlbnRyeT5JZiBhbnkgYml0IGluIHRoaXMgYnl0ZSBpcyB6ZXJvLCB0aGVuIHRoaXMgYmxvY2sgaXMgYmFkLgorVGhpcyBhcHBsaWVzIG9ubHkgdG8gdGhlIGZpcnN0IHBhZ2UgaW4gYSBibG9jay4gSW4gdGhlIHJlbWFpbmluZworcGFnZXMgdGhpcyBieXRlIGlzIHJlc2VydmVkPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDAxPC9lbnRyeT4KKzxlbnRyeT5SZXNlcnZlZDwvZW50cnk+Cis8ZW50cnk+UmVzZXJ2ZWQ8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDItMHgyNzwvZW50cnk+Cis8ZW50cnk+QXV0b3BsYWNlIDAgLSAzNzwvZW50cnk+Cis8ZW50cnk+PC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDI4PC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAwPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAwIG9mIHRoZSBmaXJzdCAyNTYgQnl0ZSBkYXRhIGluCit0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4Mjk8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDE8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIGZpcnN0IDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MkE8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDI8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDIgb2YgdGhlIGZpcnN0IDI1NiBCeXRlcyBkYXRhIGluCit0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MkI8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDM8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIHNlY29uZCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDJDPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSA0PC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAxIG9mIHRoZSBzZWNvbmQgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgyRDwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgNTwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgc2Vjb25kIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MkU8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDY8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIHRoaXJkIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MkY8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDc8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIHRoaXJkIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MzA8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDg8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDIgb2YgdGhlIHRoaXJkIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MzE8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDk8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIGZvdXJ0aCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDMyPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxMDwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMSBvZiB0aGUgZm91cnRoIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MzM8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDExPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAyIG9mIHRoZSBmb3VydGggMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzNDwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTI8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIGZpZnRoIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MzU8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDEzPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAxIG9mIHRoZSBmaWZ0aCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDM2PC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxNDwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgZmlmdGggMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzNzwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTU8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIHNpeHQgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzODwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTY8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIHNpeHQgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzOTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTc8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDIgb2YgdGhlIHNpeHQgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzQTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTg8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIHNldmVudGggMjU2IEJ5dGVzIG9mCitkYXRhIGluIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzQjwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTk8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIHNldmVudGggMjU2IEJ5dGVzIG9mCitkYXRhIGluIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzQzwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMjA8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDIgb2YgdGhlIHNldmVudGggMjU2IEJ5dGVzIG9mCitkYXRhIGluIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzRDwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMjE8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIGVpZ3RoIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4M0U8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDIyPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAxIG9mIHRoZSBlaWd0aCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDNGPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAyMzwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgZWlndGggMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCQk8L3NlY3QyPgorICAgICAJPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJmaWxlc3lzdGVtcyI+CisgICAgIAk8dGl0bGU+RmlsZXN5c3RlbSBzdXBwb3J0PC90aXRsZT4KKwk8cGFyYT4KKwkJVGhlIE5BTkQgZHJpdmVyIHByb3ZpZGVzIGFsbCBuZWNjZWNhcnkgZnVuY3Rpb25zIGZvciBhCisJCWZpbGVzeXN0ZW0gdmlhIHRoZSBNVEQgaW50ZXJmYWNlLgorCTwvcGFyYT4KKwk8cGFyYT4KKwkJRmlsZXN5c3RlbXMgbXVzdCBiZSBhd2FyZSBvZiB0aGUgTkFORCBwZWN1bGFyaXRpZXMgYW5kCisJCXJlc3RyaWN0aW9ucy4gT25lIG1ham9yIHJlc3RyaWN0aW9ucyBvZiBOQU5EIEZsYXNoIGlzLCB0aGF0IHlvdSBjYW5ub3QgCisJCXdyaXRlIGFzIG9mdGVuIGFzIHlvdSB3YW50IHRvIGEgcGFnZS4gVGhlIGNvbnNlY3V0aXZlIHdyaXRlcyB0byBhIHBhZ2UsIAorCQliZWZvcmUgZXJhc2luZyBpdCBhZ2FpbiwgYXJlIHJlc3RyaWN0ZWQgdG8gMS0zIHdyaXRlcywgZGVwZW5kaW5nIG9uIHRoZSAKKwkJbWFudWZhY3R1cmVycyBzcGVjaWZpY2F0aW9ucy4gVGhpcyBhcHBsaWVzIHNpbWlsYXIgdG8gdGhlIHNwYXJlIGFyZWEuIAorCTwvcGFyYT4KKwk8cGFyYT4KKwkJVGhlcmVmb3IgTkFORCBhd2FyZSBmaWxlc3lzdGVtcyBtdXN0IGVpdGhlciB3cml0ZSBpbiBwYWdlIHNpemUgY2h1bmtzCisJCW9yIGhvbGQgYSB3cml0ZWJ1ZmZlciB0byBjb2xsZWN0IHNtYWxsZXIgd3JpdGVzIHVudGlsIHRoZXkgc3VtIHVwIHRvIAorCQlwYWdlc2l6ZS4gQXZhaWxhYmxlIE5BTkQgYXdhcmUgZmlsZXN5c3RlbXM6IEpGRlMyLCBZQUZGUy4gCQkKKwk8L3BhcmE+CisJPHBhcmE+CisJCVRoZSBzcGFyZSBhcmVhIHVzYWdlIHRvIHN0b3JlIGZpbGVzeXN0ZW0gZGF0YSBpcyBjb250cm9sbGVkIGJ5CisJCXRoZSBzcGFyZSBhcmVhIHBsYWNlbWVudCBmdW5jdGlvbmFsaXR5IHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBvbmUKKwkJb2YgdGhlIGVhcmxpZXIgY2hhcHRlcnMuCisJPC9wYXJhPgorICA8L2NoYXB0ZXI+CQorICA8Y2hhcHRlciBpZD0idG9vbHMiPgorICAgICAJPHRpdGxlPlRvb2xzPC90aXRsZT4KKwk8cGFyYT4KKwkJVGhlIE1URCBwcm9qZWN0IHByb3ZpZGVzIGEgY291cGxlIG9mIGhlbHBmdWwgdG9vbHMgdG8gaGFuZGxlIE5BTkQgRmxhc2guCisJCTxpdGVtaXplZGxpc3Q+CisJCTxsaXN0aXRlbT48cGFyYT5mbGFzaGVyYXNlLCBmbGFzaGVyYXNlYWxsOiBFcmFzZSBhbmQgZm9ybWF0IEZMQVNIIHBhcnRpdGlvbnM8L3BhcmE+PC9saXN0aXRlbT4KKwkJPGxpc3RpdGVtPjxwYXJhPm5hbmR3cml0ZTogd3JpdGUgZmlsZXN5c3RlbSBpbWFnZXMgdG8gTkFORCBGTEFTSDwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+bmFuZGR1bXA6IGR1bXAgdGhlIGNvbnRlbnRzIG9mIGEgTkFORCBGTEFTSCBwYXJ0aXRpb25zPC9wYXJhPjwvbGlzdGl0ZW0+CisJCTwvaXRlbWl6ZWRsaXN0PgorCTwvcGFyYT4KKwk8cGFyYT4KKwkJVGhlc2UgdG9vbHMgYXJlIGF3YXJlIG9mIHRoZSBOQU5EIHJlc3RyaWN0aW9ucy4gUGxlYXNlIHVzZSB0aG9zZSB0b29scworCQlpbnN0ZWFkIG9mIGNvbXBsYWluaW5nIGFib3V0IGVycm9ycyB3aGljaCBhcmUgY2F1c2VkIGJ5IG5vbiBOQU5EIGF3YXJlCisJCWFjY2VzcyBtZXRob2RzLgorCTwvcGFyYT4KKyAgPC9jaGFwdGVyPgkKKworICA8Y2hhcHRlciBpZD0iZGVmaW5lcyI+CisgICAgIDx0aXRsZT5Db25zdGFudHM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgY29uc3RhbnRzIHdoaWNoIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBhIGRyaXZlciBkZXZlbG9wZXIuCisgICAgIDwvcGFyYT4KKyAgICAgPHNlY3QxPiAgIAorCTx0aXRsZT5DaGlwIG9wdGlvbiBjb25zdGFudHM8L3RpdGxlPgorICAgICAJPHNlY3QyPiAgIAorCQk8dGl0bGU+Q29uc3RhbnRzIGZvciBjaGlwIGlkIHRhYmxlPC90aXRsZT4KKyAgICAgCQk8cGFyYT4KKwkJVGhlc2UgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIG5hbmQuaC4gVGhleSBhcmUgb3JlZCB0b2dldGhlciB0byBkZXNjcmliZQorCQl0aGUgY2hpcCBmdW5jdGlvbmFsaXR5LgorICAgICAJCTxwcm9ncmFtbGlzdGluZz4KKy8qIENoaXAgY2FuIG5vdCBhdXRvIGluY3JlbWVudCBwYWdlcyAqLworI2RlZmluZSBOQU5EX05PX0FVVE9JTkNSCTB4MDAwMDAwMDEKKy8qIEJ1c3dpdGRoIGlzIDE2IGJpdCAqLworI2RlZmluZSBOQU5EX0JVU1dJRFRIXzE2CTB4MDAwMDAwMDIKKy8qIERldmljZSBzdXBwb3J0cyBwYXJ0aWFsIHByb2dyYW1taW5nIHdpdGhvdXQgcGFkZGluZyAqLworI2RlZmluZSBOQU5EX05PX1BBRERJTkcJCTB4MDAwMDAwMDQKKy8qIENoaXAgaGFzIGNhY2hlIHByb2dyYW0gZnVuY3Rpb24gKi8KKyNkZWZpbmUgTkFORF9DQUNIRVBSRwkJMHgwMDAwMDAwOAorLyogQ2hpcCBoYXMgY29weSBiYWNrIGZ1bmN0aW9uICovCisjZGVmaW5lIE5BTkRfQ09QWUJBQ0sJCTB4MDAwMDAwMTAKKy8qIEFORCBDaGlwIHdoaWNoIGhhcyA0IGJhbmtzIGFuZCBhIGNvbmZ1c2luZyBwYWdlIC8gYmxvY2sgCisgKiBhc3NpZ25tZW50LiBTZWUgUmVuZXNhcyBkYXRhc2hlZXQgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgTkFORF9JU19BTkQJCTB4MDAwMDAwMjAKKy8qIENoaXAgaGFzIGEgYXJyYXkgb2YgNCBwYWdlcyB3aGljaCBjYW4gYmUgcmVhZCB3aXRob3V0CisgKiBhZGRpdGlvbmFsIHJlYWR5IC9idXN5IHdhaXRzICovCisjZGVmaW5lIE5BTkRfNFBBR0VfQVJSQVkJMHgwMDAwMDA0MCAKKwkJPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgCQk8L3BhcmE+CisgICAgIAk8L3NlY3QyPgorICAgICAJPHNlY3QyPiAgIAorCQk8dGl0bGU+Q29uc3RhbnRzIGZvciBydW50aW1lIG9wdGlvbnM8L3RpdGxlPgorICAgICAJCTxwYXJhPgorCQlUaGVzZSBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gbmFuZC5oLiBUaGV5IGFyZSBvcmVkIHRvZ2V0aGVyIHRvIGRlc2NyaWJlCisJCXRoZSBmdW5jdGlvbmFsaXR5LgorICAgICAJCTxwcm9ncmFtbGlzdGluZz4KKy8qIFVzZSBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZS4gVGhpcyBvcHRpb24gaXMgcGFyc2VkIGJ5IHRoZQorICogZGVmYXVsdCBiYWQgYmxvY2sgdGFibGUgZnVuY3Rpb24gKG5hbmRfZGVmYXVsdF9iYnQpLiAqLworI2RlZmluZSBOQU5EX1VTRV9GTEFTSF9CQlQJMHgwMDAxMDAwMAorLyogVGhlIGh3IGVjYyBnZW5lcmF0b3IgcHJvdmlkZXMgYSBzeW5kcm9tZSBpbnN0ZWFkIGEgZWNjIHZhbHVlIG9uIHJlYWQgCisgKiBUaGlzIGNhbiBvbmx5IHdvcmsgaWYgd2UgaGF2ZSB0aGUgZWNjIGJ5dGVzIGRpcmVjdGx5IGJlaGluZCB0aGUgCisgKiBkYXRhIGJ5dGVzLiBBcHBsaWVzIGZvciBET0MgYW5kIEFHLUFORCBSZW5lc2FzIEhXIFJlZWQgU29sb21vbiBnZW5lcmF0b3JzICovCisjZGVmaW5lIE5BTkRfSFdFQ0NfU1lORFJPTUUJMHgwMDAyMDAwMAorCQk8L3Byb2dyYW1saXN0aW5nPgorICAgICAJCTwvcGFyYT4KKyAgICAgCTwvc2VjdDI+CisgICAgIDwvc2VjdDE+CQorCisgICAgIDxzZWN0MT4gICAKKwk8dGl0bGU+RUNDIHNlbGVjdGlvbiBjb25zdGFudHM8L3RpdGxlPgorCTxwYXJhPgorCVVzZSB0aGVzZSBjb25zdGFudHMgdG8gc2VsZWN0IHRoZSBFQ0MgYWxnb3JpdGhtLgorICAJPHByb2dyYW1saXN0aW5nPgorLyogTm8gRUNDLiBVc2FnZSBpcyBub3QgcmVjb21tZW5kZWQgISAqLworI2RlZmluZSBOQU5EX0VDQ19OT05FCQkwCisvKiBTb2Z0d2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLworI2RlZmluZSBOQU5EX0VDQ19TT0ZUCQkxCisvKiBIYXJkd2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLworI2RlZmluZSBOQU5EX0VDQ19IVzNfMjU2CTIKKy8qIEhhcmR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciA1MTIgQnl0ZSBkYXRhICovCisjZGVmaW5lIE5BTkRfRUNDX0hXM181MTIJMworLyogSGFyZHdhcmUgRUNDIDYgYnl0ZSBFQ0MgcGVyIDUxMiBCeXRlIGRhdGEgKi8KKyNkZWZpbmUgTkFORF9FQ0NfSFc2XzUxMgk0CisvKiBIYXJkd2FyZSBFQ0MgNiBieXRlIEVDQyBwZXIgNTEyIEJ5dGUgZGF0YSAqLworI2RlZmluZSBOQU5EX0VDQ19IVzhfNTEyCTYKKwk8L3Byb2dyYW1saXN0aW5nPgorCTwvcGFyYT4KKyAgICAgPC9zZWN0MT4JCisKKyAgICAgPHNlY3QxPiAgIAorCTx0aXRsZT5IYXJkd2FyZSBjb250cm9sIHJlbGF0ZWQgY29uc3RhbnRzPC90aXRsZT4KKwk8cGFyYT4KKwlUaGVzZSBjb25zdGFudHMgZGVzY3JpYmUgdGhlIHJlcXVlc3RlZCBoYXJkd2FyZSBhY2Nlc3MgZnVuY3Rpb24gd2hlbgorCXRoZSBib2FyZHNwZWNpZmljIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gaXMgY2FsbGVkCisgIAk8cHJvZ3JhbWxpc3Rpbmc+CisvKiBTZWxlY3QgdGhlIGNoaXAgYnkgc2V0dGluZyBuQ0UgdG8gbG93ICovCisjZGVmaW5lIE5BTkRfQ1RMX1NFVE5DRSAJMQorLyogRGVzZWxlY3QgdGhlIGNoaXAgYnkgc2V0dGluZyBuQ0UgdG8gaGlnaCAqLworI2RlZmluZSBOQU5EX0NUTF9DTFJOQ0UJCTIKKy8qIFNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCBieSBzZXR0aW5nIENMRSB0byBoaWdoICovCisjZGVmaW5lIE5BTkRfQ1RMX1NFVENMRQkJMworLyogRGVzZWxlY3QgdGhlIGNvbW1hbmQgbGF0Y2ggYnkgc2V0dGluZyBDTEUgdG8gbG93ICovCisjZGVmaW5lIE5BTkRfQ1RMX0NMUkNMRQkJNAorLyogU2VsZWN0IHRoZSBhZGRyZXNzIGxhdGNoIGJ5IHNldHRpbmcgQUxFIHRvIGhpZ2ggKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUQUxFCQk1CisvKiBEZXNlbGVjdCB0aGUgYWRkcmVzcyBsYXRjaCBieSBzZXR0aW5nIEFMRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfQ0xSQUxFCQk2CisvKiBTZXQgd3JpdGUgcHJvdGVjdGlvbiBieSBzZXR0aW5nIFdQIHRvIGhpZ2guIE5vdCB1c2VkISAqLworI2RlZmluZSBOQU5EX0NUTF9TRVRXUAkJNworLyogQ2xlYXIgd3JpdGUgcHJvdGVjdGlvbiBieSBzZXR0aW5nIFdQIHRvIGxvdy4gTm90IHVzZWQhICovCisjZGVmaW5lIE5BTkRfQ1RMX0NMUldQCQk4CisJPC9wcm9ncmFtbGlzdGluZz4KKwk8L3BhcmE+CisgICAgIDwvc2VjdDE+CQorCisgICAgIDxzZWN0MT4gICAKKwk8dGl0bGU+QmFkIGJsb2NrIHRhYmxlIHJlbGF0ZWQgY29uc3RhbnRzPC90aXRsZT4KKwk8cGFyYT4KKwlUaGVzZSBjb25zdGFudHMgZGVzY3JpYmUgdGhlIG9wdGlvbnMgdXNlZCBmb3IgYmFkIGJsb2NrCisJdGFibGUgZGVzY3JpcHRvcnMuCisgIAk8cHJvZ3JhbWxpc3Rpbmc+CisvKiBPcHRpb25zIGZvciB0aGUgYmFkIGJsb2NrIHRhYmxlIGRlc2NyaXB0b3JzICovCisKKy8qIFRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHBlciBibG9jayBpbiB0aGUgYmJ0IG9uIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUgTkFORF9CQlRfTlJCSVRTX01TSwkweDAwMDAwMDBGCisjZGVmaW5lIE5BTkRfQkJUXzFCSVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTkFORF9CQlRfMkJJVAkJMHgwMDAwMDAwMgorI2RlZmluZSBOQU5EX0JCVF80QklUCQkweDAwMDAwMDA0CisjZGVmaW5lIE5BTkRfQkJUXzhCSVQJCTB4MDAwMDAwMDgKKy8qIFRoZSBiYWQgYmxvY2sgdGFibGUgaXMgaW4gdGhlIGxhc3QgZ29vZCBibG9jayBvZiB0aGUgZGV2aWNlICovCisjZGVmaW5lCU5BTkRfQkJUX0xBU1RCTE9DSwkweDAwMDAwMDEwCisvKiBUaGUgYmJ0IGlzIGF0IHRoZSBnaXZlbiBwYWdlLCBlbHNlIHdlIG11c3Qgc2NhbiBmb3IgdGhlIGJidCAqLworI2RlZmluZSBOQU5EX0JCVF9BQlNQQUdFCTB4MDAwMDAwMjAKKy8qIFRoZSBiYnQgaXMgYXQgdGhlIGdpdmVuIHBhZ2UsIGVsc2Ugd2UgbXVzdCBzY2FuIGZvciB0aGUgYmJ0ICovCisjZGVmaW5lIE5BTkRfQkJUX1NFQVJDSAkJMHgwMDAwMDA0MAorLyogYmJ0IGlzIHN0b3JlZCBwZXIgY2hpcCBvbiBtdWx0aWNoaXAgZGV2aWNlcyAqLworI2RlZmluZSBOQU5EX0JCVF9QRVJDSElQCTB4MDAwMDAwODAKKy8qIGJidCBoYXMgYSB2ZXJzaW9uIGNvdW50ZXIgYXQgb2Zmc2V0IHZlcm9mZnMgKi8KKyNkZWZpbmUgTkFORF9CQlRfVkVSU0lPTgkweDAwMDAwMTAwCisvKiBDcmVhdGUgYSBiYnQgaWYgbm9uZSBheGlzdHMgKi8KKyNkZWZpbmUgTkFORF9CQlRfQ1JFQVRFCQkweDAwMDAwMjAwCisvKiBTZWFyY2ggZ29vZCAvIGJhZCBwYXR0ZXJuIHRocm91Z2ggYWxsIHBhZ2VzIG9mIGEgYmxvY2sgKi8KKyNkZWZpbmUgTkFORF9CQlRfU0NBTkFMTFBBR0VTCTB4MDAwMDA0MDAKKy8qIFNjYW4gYmxvY2sgZW1wdHkgZHVyaW5nIGdvb2QgLyBiYWQgYmxvY2sgc2NhbiAqLworI2RlZmluZSBOQU5EX0JCVF9TQ0FORU1QVFkJMHgwMDAwMDgwMAorLyogV3JpdGUgYmJ0IGlmIG5lY2NlY2FyeSAqLworI2RlZmluZSBOQU5EX0JCVF9XUklURQkJMHgwMDAwMTAwMAorLyogUmVhZCBhbmQgd3JpdGUgYmFjayBibG9jayBjb250ZW50cyB3aGVuIHdyaXRpbmcgYmJ0ICovCisjZGVmaW5lIE5BTkRfQkJUX1NBVkVDT05URU5UCTB4MDAwMDIwMDAKKwk8L3Byb2dyYW1saXN0aW5nPgorCTwvcGFyYT4KKyAgICAgPC9zZWN0MT4JCisKKyAgPC9jaGFwdGVyPgorICAJCisgIDxjaGFwdGVyIGlkPSJzdHJ1Y3RzIj4KKyAgICAgPHRpdGxlPlN0cnVjdHVyZXM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAgICAgVGhpcyBjaGFwdGVyIGNvbnRhaW5zIHRoZSBhdXRvZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb2YgdGhlIHN0cnVjdHVyZXMgd2hpY2ggYXJlCisgICAgIHVzZWQgaW4gdGhlIE5BTkQgZHJpdmVyIGFuZCBtaWdodCBiZSByZWxldmFudCBmb3IgYSBkcml2ZXIgZGV2ZWxvcGVyLiBFYWNoICAKKyAgICAgc3RydWN0IG1lbWJlciBoYXMgYSBzaG9ydCBkZXNjcmlwdGlvbiB3aGljaCBpcyBtYXJrZWQgd2l0aCBhbiBbWFhYXSBpZGVudGlmaWVyLgorICAgICBTZWUgdGhlIGNoYXB0ZXIgIkRvY3VtZW50YXRpb24gaGludHMiIGZvciBhbiBleHBsYW5hdGlvbi4KKyAgICAgPC9wYXJhPgorIUlpbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICBUaGlzIGNoYXB0ZXIgY29udGFpbnMgdGhlIGF1dG9nZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvZiB0aGUgTkFORCBrZXJuZWwgQVBJIGZ1bmN0aW9ucworICAgICAgd2hpY2ggYXJlIGV4cG9ydGVkLiBFYWNoIGZ1bmN0aW9uIGhhcyBhIHNob3J0IGRlc2NyaXB0aW9uIHdoaWNoIGlzIG1hcmtlZCB3aXRoIGFuIFtYWFhdIGlkZW50aWZpZXIuCisgICAgIFNlZSB0aGUgY2hhcHRlciAiRG9jdW1lbnRhdGlvbiBoaW50cyIgZm9yIGFuIGV4cGxhbmF0aW9uLgorICAgICA8L3BhcmE+CishRWRyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKyFFZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCishRWRyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYworICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0iaW50ZnVuY3Rpb25zIj4KKyAgICAgPHRpdGxlPkludGVybmFsIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICBUaGlzIGNoYXB0ZXIgY29udGFpbnMgdGhlIGF1dG9nZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvZiB0aGUgTkFORCBkcml2ZXIgaW50ZXJuYWwgZnVuY3Rpb25zLgorICAgICBFYWNoIGZ1bmN0aW9uIGhhcyBhIHNob3J0IGRlc2NyaXB0aW9uIHdoaWNoIGlzIG1hcmtlZCB3aXRoIGFuIFtYWFhdIGlkZW50aWZpZXIuCisgICAgIFNlZSB0aGUgY2hhcHRlciAiRG9jdW1lbnRhdGlvbiBoaW50cyIgZm9yIGFuIGV4cGxhbmF0aW9uLgorICAgICBUaGUgZnVuY3Rpb25zIG1hcmtlZCB3aXRoIFtERUZBVUxUXSBtaWdodCBiZSByZWxldmFudCBmb3IgYSBib2FyZCBkcml2ZXIgZGV2ZWxvcGVyLgorICAgICA8L3BhcmE+CishSWRyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKyFJZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCishSWRyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImNyZWRpdHMiPgorICAgICA8dGl0bGU+Q3JlZGl0czwvdGl0bGU+CisJPHBhcmE+CisJCVRoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhlIE5BTkQgZHJpdmVyOgorCQk8b3JkZXJlZGxpc3Q+CisJCQk8bGlzdGl0ZW0+PHBhcmE+U3RldmVuIEouIEhpbGw8ZW1haWw+c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbTwvZW1haWw+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+RGF2aWQgV29vZGhvdXNlPGVtYWlsPmR3bXcyQGluZnJhZGVhZC5vcmc8L2VtYWlsPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPlRob21hcyBHbGVpeG5lcjxlbWFpbD50Z2x4QGxpbnV0cm9uaXguZGU8L2VtYWlsPjwvcGFyYT48L2xpc3RpdGVtPgorCQk8L29yZGVyZWRsaXN0PgorCQlBIGxvdCBvZiB1c2VycyBoYXZlIHByb3ZpZGVkIGJ1Z2ZpeGVzLCBpbXByb3ZlbWVudHMgYW5kIGhlbHBpbmcgaGFuZHMgZm9yIHRlc3RpbmcuCisJCVRoYW5rcyBhIGxvdC4KKwk8L3BhcmE+CisJPHBhcmE+CisJCVRoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBkb2N1bWVudDoKKwkJPG9yZGVyZWRsaXN0PgorCQkJPGxpc3RpdGVtPjxwYXJhPlRob21hcyBHbGVpeG5lcjxlbWFpbD50Z2x4QGxpbnV0cm9uaXguZGU8L2VtYWlsPjwvcGFyYT48L2xpc3RpdGVtPgorCQk8L29yZGVyZWRsaXN0PgorCTwvcGFyYT4KKyAgPC9jaGFwdGVyPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmcy1ndWlkZS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmcy1ndWlkZS50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2FkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzLWd1aWRlLnRtcGwKQEAgLTAsMCArMSw1OTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFsKKzwhRU5USVRZIHByb2Nmc2V4YW1wbGUgU1lTVEVNICJwcm9jZnNfZXhhbXBsZS54bWwiPgorXT4KKworPGJvb2sgaWQ9IkxLUHJvY2ZzR3VpZGUiPgorICA8Ym9va2luZm8+CisgICAgPHRpdGxlPkxpbnV4IEtlcm5lbCBQcm9jZnMgR3VpZGU8L3RpdGxlPgorCisgICAgPGF1dGhvcmdyb3VwPgorICAgICAgPGF1dGhvcj4KKwk8Zmlyc3RuYW1lPkVyaWs8L2ZpcnN0bmFtZT4KKwk8b3RoZXJuYW1lPihKLkEuSy4pPC9vdGhlcm5hbWU+CisJPHN1cm5hbWU+TW91dzwvc3VybmFtZT4KKwk8YWZmaWxpYXRpb24+CisJICA8b3JnbmFtZT5EZWxmdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3k8L29yZ25hbWU+CisJICA8b3JnZGl2PkZhY3VsdHkgb2YgSW5mb3JtYXRpb24gVGVjaG5vbG9neSBhbmQgU3lzdGVtczwvb3JnZGl2PgorCSAgPGFkZHJlc3M+CisgICAgICAgICAgICA8ZW1haWw+Si5BLksuTW91d0BpdHMudHVkZWxmdC5ubDwvZW1haWw+CisgICAgICAgICAgICA8cG9iPlBPIEJPWCA1MDMxPC9wb2I+CisgICAgICAgICAgICA8cG9zdGNvZGU+MjYwMCBHQTwvcG9zdGNvZGU+CisgICAgICAgICAgICA8Y2l0eT5EZWxmdDwvY2l0eT4KKyAgICAgICAgICAgIDxjb3VudHJ5PlRoZSBOZXRoZXJsYW5kczwvY291bnRyeT4KKyAgICAgICAgICA8L2FkZHJlc3M+CisJPC9hZmZpbGlhdGlvbj4KKyAgICAgIDwvYXV0aG9yPgorICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICA8cmV2aGlzdG9yeT4KKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjEuMCZuYnNwOzwvcmV2bnVtYmVyPgorCTxkYXRlPk1heSAzMCwgMjAwMTwvZGF0ZT4KKwk8cmV2cmVtYXJrPkluaXRpYWwgcmV2aXNpb24gcG9zdGVkIHRvIGxpbnV4LWtlcm5lbDwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjEuMSZuYnNwOzwvcmV2bnVtYmVyPgorCTxkYXRlPkp1bmUgMywgMjAwMTwvZGF0ZT4KKwk8cmV2cmVtYXJrPlJldmlzZWQgYWZ0ZXIgY29tbWVudHMgZnJvbSBsaW51eC1rZXJuZWw8L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPjIwMDE8L3llYXI+CisgICAgICA8aG9sZGVyPkVyaWsgTW91dzwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorCisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CisgICAgICAgIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgICAgdmVyc2lvbi4KKyAgICAgIDwvcGFyYT4KKyAgICAgIAorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgICAgIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgICA8L3BhcmE+CisgICAgICAKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgICAgPC9wYXJhPgorICAgICAgCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorICA8L2Jvb2tpbmZvPgorCisKKworCisgIDx0b2M+CisgIDwvdG9jPgorCisKKworCisgIDxwcmVmYWNlPgorICAgIDx0aXRsZT5QcmVmYWNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIHVzZSBvZiB0aGUgcHJvY2ZzIGZpbGUgc3lzdGVtIGZyb20KKyAgICAgIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaGUgaWRlYSB0byB3cml0ZSB0aGlzIGd1aWRlIGNhbWUgdXAgb24KKyAgICAgIHRoZSAja2VybmVsbmV3YmllcyBJUkMgY2hhbm5lbCAoc2VlIDx1bGluaworICAgICAgdXJsPSJodHRwOi8vd3d3Lmtlcm5lbG5ld2JpZXMub3JnLyI+aHR0cDovL3d3dy5rZXJuZWxuZXdiaWVzLm9yZy88L3VsaW5rPiksCisgICAgICB3aGVuIEplZmYgR2FyemlrIGV4cGxhaW5lZCB0aGUgdXNlIG9mIHByb2NmcyBhbmQgZm9yd2FyZGVkIG1lIGEKKyAgICAgIG1lc3NhZ2UgQWxleGFuZGVyIFZpcm8gd3JvdGUgdG8gdGhlIGxpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QuIEkKKyAgICAgIGFncmVlZCB0byB3cml0ZSBpdCB1cCBuaWNlbHksIHNvIGhlcmUgaXQgaXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJJ2QgbGlrZSB0byB0aGFuayBKZWZmIEdhcnppaworICAgICAgPGVtYWlsPmpnYXJ6aWtAcG9ib3guY29tPC9lbWFpbD4gYW5kIEFsZXhhbmRlciBWaXJvCisgICAgICA8ZW1haWw+dmlyb0BwYXJjZWxmYXJjZS5saW51eC50aGVwbGFuZXQuY28udWs8L2VtYWlsPiBmb3IgdGhlaXIgaW5wdXQsCisgICAgICBUaW0gV2F1Z2ggPGVtYWlsPnR3YXVnaEByZWRoYXQuY29tPC9lbWFpbD4gZm9yIGhpcyA8dWxpbmsKKyAgICAgIHVybD0iaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL3R3YXVnaC9kb2Nib29rL3NlbGZkb2Nib29rLyI+U2VsZmRvY2Jvb2s8L3VsaW5rPiwKKyAgICAgIGFuZCBNYXJjIEpvb3NlbiA8ZW1haWw+bWFyY2pAaGlzdG9yaWEuZXQudHVkZWxmdC5ubDwvZW1haWw+IGZvcgorICAgICAgcHJvb2ZyZWFkaW5nLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhpcyBkb2N1bWVudGF0aW9uIHdhcyB3cml0dGVuIHdoaWxlIHdvcmtpbmcgb24gdGhlIExBUlQKKyAgICAgIGNvbXB1dGluZyBib2FyZCAoPHVsaW5rCisgICAgICB1cmw9Imh0dHA6Ly93d3cubGFydC50dWRlbGZ0Lm5sLyI+aHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvPC91bGluaz4pLAorICAgICAgd2hpY2ggaXMgc3BvbnNvcmVkIGJ5IHRoZSBNb2JpbGUgTXVsdGktbWVkaWEgQ29tbXVuaWNhdGlvbnMKKyAgICAgICg8dWxpbmsKKyAgICAgIHVybD0iaHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC8iPmh0dHA6Ly93d3cubW1jLnR1ZGVsZnQubmwvPC91bGluaz4pCisgICAgICBhbmQgVWJpcXVpdG91cyBDb21tdW5pY2F0aW9ucyAoPHVsaW5rCisgICAgICB1cmw9Imh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvIj5odHRwOi8vd3d3LnViaWNvbS50dWRlbGZ0Lm5sLzwvdWxpbms+KQorICAgICAgcHJvamVjdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBFcmlrCisgICAgPC9wYXJhPgorICA8L3ByZWZhY2U+CisKKworCisKKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij4vcHJvYzwvZmlsZW5hbWU+IGZpbGUgc3lzdGVtCisgICAgICAocHJvY2ZzKSBpcyBhIHNwZWNpYWwgZmlsZSBzeXN0ZW0gaW4gdGhlIGxpbnV4IGtlcm5lbC4gSXQncyBhCisgICAgICB2aXJ0dWFsIGZpbGUgc3lzdGVtOiBpdCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2sgZGV2aWNlCisgICAgICBidXQgZXhpc3RzIG9ubHkgaW4gbWVtb3J5LiBUaGUgZmlsZXMgaW4gdGhlIHByb2NmcyBhcmUgdGhlcmUgdG8KKyAgICAgIGFsbG93IHVzZXJsYW5kIHByb2dyYW1zIGFjY2VzcyB0byBjZXJ0YWluIGluZm9ybWF0aW9uIGZyb20gdGhlCisgICAgICBrZXJuZWwgKGxpa2UgcHJvY2VzcyBpbmZvcm1hdGlvbiBpbiA8ZmlsZW5hbWUKKyAgICAgIGNsYXNzPSJkaXJlY3RvcnkiPi9wcm9jL1swLTldKy88L2ZpbGVuYW1lPiksIGJ1dCBhbHNvIGZvciBkZWJ1ZworICAgICAgcHVycG9zZXMgKGxpa2UgPGZpbGVuYW1lPi9wcm9jL2tzeW1zPC9maWxlbmFtZT4pLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIHVzZSBvZiB0aGUgcHJvY2ZzIGZpbGUgc3lzdGVtIGZyb20KKyAgICAgIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJdCBzdGFydHMgYnkgaW50cm9kdWNpbmcgYWxsIHJlbGV2YW50CisgICAgICBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmaWxlcyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtLiBBZnRlciB0aGF0CisgICAgICBpdCBzaG93cyBob3cgdG8gY29tbXVuaWNhdGUgd2l0aCB1c2VybGFuZCwgYW5kIHNvbWUgdGlwcyBhbmQKKyAgICAgIHRyaWNrcyB3aWxsIGJlIHBvaW50ZWQgb3V0LiBGaW5hbGx5IGEgY29tcGxldGUgZXhhbXBsZSB3aWxsIGJlCisgICAgICBzaG93bi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIE5vdGUgdGhhdCB0aGUgZmlsZXMgaW4gPGZpbGVuYW1lCisgICAgICBjbGFzcz0iZGlyZWN0b3J5Ij4vcHJvYy9zeXM8L2ZpbGVuYW1lPiBhcmUgc3lzY3RsIGZpbGVzOiB0aGV5CisgICAgICBkb24ndCBiZWxvbmcgdG8gcHJvY2ZzIGFuZCBhcmUgZ292ZXJuZWQgYnkgYSBjb21wbGV0ZWx5CisgICAgICBkaWZmZXJlbnQgQVBJIGRlc2NyaWJlZCBpbiB0aGUgS2VybmVsIEFQSSBib29rLgorICAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisKKworCisgIDxjaGFwdGVyIGlkPSJtYW5hZ2luZyI+CisgICAgPHRpdGxlPk1hbmFnaW5nIHByb2NmcyBlbnRyaWVzPC90aXRsZT4KKyAgICAKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IHZhcmlvdXMga2VybmVsCisgICAgICBjb21wb25lbnRzIHVzZSB0byBwb3B1bGF0ZSB0aGUgcHJvY2ZzIHdpdGggZmlsZXMsIHN5bWxpbmtzLAorICAgICAgZGV2aWNlIG5vZGVzLCBhbmQgZGlyZWN0b3JpZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBBIG1pbm9yIG5vdGUgYmVmb3JlIHdlIHN0YXJ0OiBpZiB5b3Ugd2FudCB0byB1c2UgYW55IG9mIHRoZQorICAgICAgcHJvY2ZzIGZ1bmN0aW9ucywgYmUgc3VyZSB0byBpbmNsdWRlIHRoZSBjb3JyZWN0IGhlYWRlciBmaWxlISAKKyAgICAgIFRoaXMgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZmlyc3QgbGluZXMgaW4geW91ciBjb2RlOgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4KKyNpbmNsdWRlICZsdDtsaW51eC9wcm9jX2ZzLmgmZ3Q7CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKworCisKKworICAgIDxzZWN0MSBpZD0icmVndWxhcmZpbGUiPgorICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgcmVndWxhciBmaWxlPC90aXRsZT4KKyAgICAgIAorICAgICAgPGZ1bmNzeW5vcHNpcz4KKwk8ZnVuY3Byb3RvdHlwZT4KKwkgIDxmdW5jZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSogPGZ1bmN0aW9uPmNyZWF0ZV9wcm9jX2VudHJ5PC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJICA8cGFyYW1kZWY+Y29uc3QgY2hhciogPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5tb2RlX3QgPHBhcmFtZXRlcj5tb2RlPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8L2Z1bmNwcm90b3R5cGU+CisgICAgICA8L2Z1bmNzeW5vcHNpcz4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHJlZ3VsYXIgZmlsZSB3aXRoIHRoZSBuYW1lCisgICAgICAgIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPiwgZmlsZSBtb2RlCisgICAgICAgIDxwYXJhbWV0ZXI+bW9kZTwvcGFyYW1ldGVyPiBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+LiBUbyBjcmVhdGUgYSBmaWxlIGluIHRoZSByb290IG9mCisgICAgICAgIHRoZSBwcm9jZnMsIHVzZSA8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+IGFzCisgICAgICAgIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+IHBhcmFtZXRlci4gV2hlbiBzdWNjZXNzZnVsLCB0aGUKKyAgICAgICAgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmcmVzaGx5IGNyZWF0ZWQKKyAgICAgICAgPHN0cnVjdG5hbWU+c3RydWN0IHByb2NfZGlyX2VudHJ5PC9zdHJ1Y3RuYW1lPjsgb3RoZXJ3aXNlIGl0CisgICAgICAgIHdpbGwgcmV0dXJuIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4uIDx4cmVmCisgICAgICAgIGxpbmtlbmQ9InVzZXJsYW5kIi8+IGRlc2NyaWJlcyBob3cgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoCisgICAgICAgIHJlZ3VsYXIgZmlsZXMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3RlIHRoYXQgaXQgaXMgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCB0aGF0IHlvdSBjYW4gcGFzcyBhCisgICAgICAgIHBhdGggdGhhdCBzcGFucyBtdWx0aXBsZSBkaXJlY3Rvcmllcy4gRm9yIGV4YW1wbGUKKyAgICAgICAgPGZ1bmN0aW9uPmNyZWF0ZV9wcm9jX2VudHJ5PC9mdW5jdGlvbj4oPHBhcmFtZXRlcj4iZHJpdmVycy92aWEwL2luZm8iPC9wYXJhbWV0ZXI+KQorICAgICAgICB3aWxsIGNyZWF0ZSB0aGUgPGZpbGVuYW1lIGNsYXNzPSJkaXJlY3RvcnkiPnZpYTA8L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkgaWYgbmVjZXNzYXJ5LCB3aXRoIHN0YW5kYXJkCisgICAgICAgIDxjb25zdGFudD4wNzU1PC9jb25zdGFudD4gcGVybWlzc2lvbnMuCisgICAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHlvdSBvbmx5IHdhbnQgdG8gYmUgYWJsZSB0byByZWFkIHRoZSBmaWxlLCB0aGUgZnVuY3Rpb24KKyAgICAgIDxmdW5jdGlvbj5jcmVhdGVfcHJvY19yZWFkX2VudHJ5PC9mdW5jdGlvbj4gZGVzY3JpYmVkIGluIDx4cmVmCisgICAgICBsaW5rZW5kPSJjb252ZW5pZW5jZSIvPiBtYXkgYmUgdXNlZCB0byBjcmVhdGUgYW5kIGluaXRpYWxpc2UKKyAgICAgIHRoZSBwcm9jZnMgZW50cnkgaW4gb25lIHNpbmdsZSBjYWxsLgorICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisKKworCisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgc3ltbGluazwvdGl0bGU+CisKKyAgICAgIDxmdW5jc3lub3BzaXM+CisJPGZ1bmNwcm90b3R5cGU+CisJICA8ZnVuY2RlZj5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqCisJICA8ZnVuY3Rpb24+cHJvY19zeW1saW5rPC9mdW5jdGlvbj48L2Z1bmNkZWY+IDxwYXJhbWRlZj5jb25zdAorCSAgY2hhciogPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqCisJICA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+IDxwYXJhbWRlZj5jb25zdAorCSAgY2hhciogPHBhcmFtZXRlcj5kZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8L2Z1bmNwcm90b3R5cGU+CisgICAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICAgIAorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY3JlYXRlcyBhIHN5bWxpbmsgaW4gdGhlIHByb2NmcyBkaXJlY3RvcnkKKyAgICAgICAgPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj4gdGhhdCBwb2ludHMgZnJvbQorICAgICAgICA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4gdG8KKyAgICAgICAgPHBhcmFtZXRlcj5kZXN0PC9wYXJhbWV0ZXI+LiBUaGlzIHRyYW5zbGF0ZXMgaW4gdXNlcmxhbmQgdG8KKyAgICAgICAgPGxpdGVyYWw+bG4gLXM8L2xpdGVyYWw+IDxwYXJhbWV0ZXI+ZGVzdDwvcGFyYW1ldGVyPgorICAgICAgICA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT4KKyAgICAgIDx0aXRsZT5DcmVhdGluZyBhIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICAKKyAgICAgIDxmdW5jc3lub3BzaXM+CisJPGZ1bmNwcm90b3R5cGU+CisJICA8ZnVuY2RlZj5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIDxmdW5jdGlvbj5wcm9jX21rZGlyPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJICA8cGFyYW1kZWY+Y29uc3QgY2hhciogPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8L2Z1bmNwcm90b3R5cGU+CisgICAgICA8L2Z1bmNzeW5vcHNpcz4KKworICAgICAgPHBhcmE+CisgICAgICAgIENyZWF0ZSBhIGRpcmVjdG9yeSA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4gaW4gdGhlIHByb2NmcworICAgICAgICBkaXJlY3RvcnkgPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworCisKKworICAgIDxzZWN0MT4KKyAgICAgIDx0aXRsZT5SZW1vdmluZyBhbiBlbnRyeTwvdGl0bGU+CisgICAgICAKKyAgICAgIDxmdW5jc3lub3BzaXM+CisJPGZ1bmNwcm90b3R5cGU+CisJICA8ZnVuY2RlZj52b2lkIDxmdW5jdGlvbj5yZW1vdmVfcHJvY19lbnRyeTwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCSAgPHBhcmFtZGVmPmNvbnN0IGNoYXIqIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPC9mdW5jcHJvdG90eXBlPgorICAgICAgPC9mdW5jc3lub3BzaXM+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBSZW1vdmVzIHRoZSBlbnRyeSA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4gaW4gdGhlIGRpcmVjdG9yeQorICAgICAgICA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPiBmcm9tIHRoZSBwcm9jZnMuIEVudHJpZXMgYXJlCisgICAgICAgIHJlbW92ZWQgYnkgdGhlaXIgPGVtcGhhc2lzPm5hbWU8L2VtcGhhc2lzPiwgbm90IGJ5IHRoZQorICAgICAgICA8c3RydWN0bmFtZT5zdHJ1Y3QgcHJvY19kaXJfZW50cnk8L3N0cnVjdG5hbWU+IHJldHVybmVkIGJ5IHRoZQorICAgICAgICB2YXJpb3VzIGNyZWF0ZSBmdW5jdGlvbnMuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QKKyAgICAgICAgcmVjdXJzaXZlbHkgcmVtb3ZlIGVudHJpZXMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBCZSBzdXJlIHRvIGZyZWUgdGhlIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZW50cnkgZnJvbQorICAgICAgICB0aGUgPHN0cnVjdG5hbWU+c3RydWN0IHByb2NfZGlyX2VudHJ5PC9zdHJ1Y3RuYW1lPiBiZWZvcmUKKyAgICAgICAgPGZ1bmN0aW9uPnJlbW92ZV9wcm9jX2VudHJ5PC9mdW5jdGlvbj4gaXMgY2FsbGVkICh0aGF0IGlzOiBpZgorICAgICAgICB0aGVyZSB3YXMgc29tZSA8c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+IGFsbG9jYXRlZCwgb2YKKyAgICAgICAgY291cnNlKS4gU2VlIDx4cmVmIGxpbmtlbmQ9InVzaW5nZGF0YSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICBvbiB1c2luZyB0aGUgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBlbnRyeS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKworCisKKyAgPGNoYXB0ZXIgaWQ9InVzZXJsYW5kIj4KKyAgICA8dGl0bGU+Q29tbXVuaWNhdGluZyB3aXRoIHVzZXJsYW5kPC90aXRsZT4KKyAgICAKKyAgICA8cGFyYT4KKyAgICAgICBJbnN0ZWFkIG9mIHJlYWRpbmcgKG9yIHdyaXRpbmcpIGluZm9ybWF0aW9uIGRpcmVjdGx5IGZyb20KKyAgICAgICBrZXJuZWwgbWVtb3J5LCBwcm9jZnMgd29ya3Mgd2l0aCA8ZW1waGFzaXM+Y2FsbCBiYWNrCisgICAgICAgZnVuY3Rpb25zPC9lbXBoYXNpcz4gZm9yIGZpbGVzOiBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIHdoZW4KKyAgICAgICBhIHNwZWNpZmljIGZpbGUgaXMgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBTdWNoIGZ1bmN0aW9ucyBoYXZlCisgICAgICAgdG8gYmUgaW5pdGlhbGlzZWQgYWZ0ZXIgdGhlIHByb2NmcyBmaWxlIGlzIGNyZWF0ZWQgYnkgc2V0dGluZworICAgICAgIHRoZSA8c3RydWN0ZmllbGQ+cmVhZF9wcm9jPC9zdHJ1Y3RmaWVsZD4gYW5kL29yCisgICAgICAgPHN0cnVjdGZpZWxkPndyaXRlX3Byb2M8L3N0cnVjdGZpZWxkPiBmaWVsZHMgaW4gdGhlCisgICAgICAgPHN0cnVjdG5hbWU+c3RydWN0IHByb2NfZGlyX2VudHJ5Kjwvc3RydWN0bmFtZT4gdGhhdCB0aGUKKyAgICAgICBmdW5jdGlvbiA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfZW50cnk8L2Z1bmN0aW9uPiByZXR1cm5lZDoKKyAgICA8L3BhcmE+CisKKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdHJ1Y3QgcHJvY19kaXJfZW50cnkqIGVudHJ5OworCitlbnRyeS0+cmVhZF9wcm9jID0gcmVhZF9wcm9jX2ZvbzsKK2VudHJ5LT53cml0ZV9wcm9jID0gd3JpdGVfcHJvY19mb287CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgorICAgICAgSWYgeW91IG9ubHkgd2FudCB0byB1c2UgYSB0aGUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5yZWFkX3Byb2M8L3N0cnVjdGZpZWxkPiwgdGhlIGZ1bmN0aW9uCisgICAgICA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfcmVhZF9lbnRyeTwvZnVuY3Rpb24+IGRlc2NyaWJlZCBpbiA8eHJlZgorICAgICAgbGlua2VuZD0iY29udmVuaWVuY2UiLz4gbWF5IGJlIHVzZWQgdG8gY3JlYXRlIGFuZCBpbml0aWFsaXNlIHRoZQorICAgICAgcHJvY2ZzIGVudHJ5IGluIG9uZSBzaW5nbGUgY2FsbC4KKyAgICA8L3BhcmE+CisKKworCisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPlJlYWRpbmcgZGF0YTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcmVhZCBmdW5jdGlvbiBpcyBhIGNhbGwgYmFjayBmdW5jdGlvbiB0aGF0IGFsbG93cyB1c2VybGFuZAorICAgICAgICBwcm9jZXNzZXMgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGtlcm5lbC4gVGhlIHJlYWQgZnVuY3Rpb24KKyAgICAgICAgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxmdW5jc3lub3BzaXM+CisJPGZ1bmNwcm90b3R5cGU+CisJICA8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPnJlYWRfZnVuYzwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCSAgPHBhcmFtZGVmPmNoYXIqIDxwYXJhbWV0ZXI+cGFnZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+Y2hhcioqIDxwYXJhbWV0ZXI+c3RhcnQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPm9mZl90IDxwYXJhbWV0ZXI+b2ZmPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+aW50KiA8cGFyYW1ldGVyPmVvZjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+dm9pZCogPHBhcmFtZXRlcj5kYXRhPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8L2Z1bmNwcm90b3R5cGU+CisgICAgICA8L2Z1bmNzeW5vcHNpcz4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSByZWFkIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBpdHMgaW5mb3JtYXRpb24gaW50byB0aGUKKyAgICAgICAgPHBhcmFtZXRlcj5wYWdlPC9wYXJhbWV0ZXI+LiBGb3IgcHJvcGVyIHVzZSwgdGhlIGZ1bmN0aW9uCisgICAgICAgIHNob3VsZCBzdGFydCB3cml0aW5nIGF0IGFuIG9mZnNldCBvZgorICAgICAgICA8cGFyYW1ldGVyPm9mZjwvcGFyYW1ldGVyPiBpbiA8cGFyYW1ldGVyPnBhZ2U8L3BhcmFtZXRlcj4gYW5kCisgICAgICAgIHdyaXRlIGF0IG1vc3QgPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPiBieXRlcywgYnV0IGJlY2F1c2UKKyAgICAgICAgbW9zdCByZWFkIGZ1bmN0aW9ucyBhcmUgcXVpdGUgc2ltcGxlIGFuZCBvbmx5IHJldHVybiBhIHNtYWxsCisgICAgICAgIGFtb3VudCBvZiBpbmZvcm1hdGlvbiwgdGhlc2UgdHdvIHBhcmFtZXRlcnMgYXJlIHVzdWFsbHkKKyAgICAgICAgaWdub3JlZCAoaXQgYnJlYWtzIHBhZ2VycyBsaWtlIDxsaXRlcmFsPm1vcmU8L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0ZXJhbD5sZXNzPC9saXRlcmFsPiwgYnV0IDxsaXRlcmFsPmNhdDwvbGl0ZXJhbD4gc3RpbGwKKyAgICAgICAgd29ya3MpLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgdGhlIDxwYXJhbWV0ZXI+b2ZmPC9wYXJhbWV0ZXI+IGFuZAorICAgICAgICA8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+IHBhcmFtZXRlcnMgYXJlIHByb3Blcmx5IHVzZWQsCisgICAgICAgIDxwYXJhbWV0ZXI+ZW9mPC9wYXJhbWV0ZXI+IHNob3VsZCBiZSB1c2VkIHRvIHNpZ25hbCB0aGF0IHRoZQorICAgICAgICBlbmQgb2YgdGhlIGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBieSB3cml0aW5nCisgICAgICAgIDxsaXRlcmFsPjE8L2xpdGVyYWw+IHRvIHRoZSBtZW1vcnkgbG9jYXRpb24KKyAgICAgICAgPHBhcmFtZXRlcj5lb2Y8L3BhcmFtZXRlcj4gcG9pbnRzIHRvLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHBhcmFtZXRlciA8cGFyYW1ldGVyPnN0YXJ0PC9wYXJhbWV0ZXI+IGRvZXNuJ3Qgc2VlbSB0byBiZQorICAgICAgICB1c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwuIFRoZSA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHNpbmdsZSBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yCisgICAgICAgIHNldmVyYWwgZmlsZXMsIHNlZSA8eHJlZiBsaW5rZW5kPSJ1c2luZ2RhdGEiLz4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPnJlYWRfZnVuYzwvZnVuY3Rpb24+IGZ1bmN0aW9uIG11c3QgcmV0dXJuIHRoZQorICAgICAgICBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbnRvIHRoZSA8cGFyYW1ldGVyPnBhZ2U8L3BhcmFtZXRlcj4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8eHJlZiBsaW5rZW5kPSJleGFtcGxlIi8+IHNob3dzIGhvdyB0byB1c2UgYSByZWFkIGNhbGwgYmFjaworICAgICAgICBmdW5jdGlvbi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisKKworCisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPldyaXRpbmcgZGF0YTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgd3JpdGUgY2FsbCBiYWNrIGZ1bmN0aW9uIGFsbG93cyBhIHVzZXJsYW5kIHByb2Nlc3MgdG8gd3JpdGUKKyAgICAgICAgZGF0YSB0byB0aGUga2VybmVsLCBzbyBpdCBoYXMgc29tZSBraW5kIG9mIGNvbnRyb2wgb3ZlciB0aGUKKyAgICAgICAga2VybmVsLiBUaGUgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxmdW5jc3lub3BzaXM+CisJPGZ1bmNwcm90b3R5cGU+CisJICA8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPndyaXRlX2Z1bmM8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwkgIDxwYXJhbWRlZj5zdHJ1Y3QgZmlsZSogPHBhcmFtZXRlcj5maWxlPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5jb25zdCBjaGFyKiA8cGFyYW1ldGVyPmJ1ZmZlcjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+dW5zaWduZWQgbG9uZyA8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj52b2lkKiA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTwvZnVuY3Byb3RvdHlwZT4KKyAgICAgIDwvZnVuY3N5bm9wc2lzPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHdyaXRlIGZ1bmN0aW9uIHNob3VsZCByZWFkIDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4KKyAgICAgICAgYnl0ZXMgYXQgbWF4aW11bSBmcm9tIHRoZSA8cGFyYW1ldGVyPmJ1ZmZlcjwvcGFyYW1ldGVyPi4gTm90ZQorICAgICAgICB0aGF0IHRoZSA8cGFyYW1ldGVyPmJ1ZmZlcjwvcGFyYW1ldGVyPiBkb2Vzbid0IGxpdmUgaW4gdGhlCisgICAgICAgIGtlcm5lbCdzIG1lbW9yeSBzcGFjZSwgc28gaXQgc2hvdWxkIGZpcnN0IGJlIGNvcGllZCB0byBrZXJuZWwKKyAgICAgICAgc3BhY2Ugd2l0aCA8ZnVuY3Rpb24+Y29weV9mcm9tX3VzZXI8L2Z1bmN0aW9uPi4gVGhlCisgICAgICAgIDxwYXJhbWV0ZXI+ZmlsZTwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgaXMgdXN1YWxseQorICAgICAgICBpZ25vcmVkLiA8eHJlZiBsaW5rZW5kPSJ1c2luZ2RhdGEiLz4gc2hvd3MgaG93IHRvIHVzZSB0aGUKKyAgICAgICAgPHBhcmFtZXRlcj5kYXRhPC9wYXJhbWV0ZXI+IHBhcmFtZXRlci4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFnYWluLCA8eHJlZiBsaW5rZW5kPSJleGFtcGxlIi8+IHNob3dzIGhvdyB0byB1c2UgdGhpcyBjYWxsIGJhY2sKKyAgICAgICAgZnVuY3Rpb24uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworCisKKworICAgIDxzZWN0MSBpZD0idXNpbmdkYXRhIj4KKyAgICAgIDx0aXRsZT5BIHNpbmdsZSBjYWxsIGJhY2sgZm9yIG1hbnkgZmlsZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgIFdoZW4gYSBsYXJnZSBudW1iZXIgb2YgYWxtb3N0IGlkZW50aWNhbCBmaWxlcyBpcyB1c2VkLCBpdCdzCisgICAgICAgICBxdWl0ZSBpbmNvbnZlbmllbnQgdG8gdXNlIGEgc2VwYXJhdGUgY2FsbCBiYWNrIGZ1bmN0aW9uIGZvcgorICAgICAgICAgZWFjaCBmaWxlLiBBIGJldHRlciBhcHByb2FjaCBpcyB0byBoYXZlIGEgc2luZ2xlIGNhbGwgYmFjaworICAgICAgICAgZnVuY3Rpb24gdGhhdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gdGhlIGZpbGVzIGJ5IHVzaW5nIHRoZQorICAgICAgICAgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiA8c3RydWN0bmFtZT5zdHJ1Y3QKKyAgICAgICAgIHByb2NfZGlyX2VudHJ5PC9zdHJ1Y3RuYW1lPi4gRmlyc3Qgb2YgYWxsLCB0aGUKKyAgICAgICAgIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaGFzIHRvIGJlIGluaXRpYWxpc2VkOgorICAgICAgPC9wYXJhPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdHJ1Y3QgcHJvY19kaXJfZW50cnkqIGVudHJ5Oworc3RydWN0IG15X2ZpbGVfZGF0YSAqZmlsZV9kYXRhOworCitmaWxlX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXlfZmlsZV9kYXRhKSwgR0ZQX0tFUk5FTCk7CitlbnRyeS0+ZGF0YSA9IGZpbGVfZGF0YTsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgIAorICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgYSA8dHlwZT52b2lkCisgICAgICAgICAgKjwvdHlwZT4sIHNvIGl0IGNhbiBiZSBpbml0aWFsaXNlZCB3aXRoIGFueXRoaW5nLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm93IHRoYXQgdGhlIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgc2V0LCB0aGUKKyAgICAgICAgPGZ1bmN0aW9uPnJlYWRfcHJvYzwvZnVuY3Rpb24+IGFuZAorICAgICAgICA8ZnVuY3Rpb24+d3JpdGVfcHJvYzwvZnVuY3Rpb24+IGNhbiB1c2UgaXQgdG8gZGlzdGluZ3Vpc2gKKyAgICAgICAgYmV0d2VlbiBmaWxlcyBiZWNhdXNlIHRoZXkgZ2V0IGl0IHBhc3NlZCBpbnRvIHRoZWlyCisgICAgICAgIDxwYXJhbWV0ZXI+ZGF0YTwvcGFyYW1ldGVyPiBwYXJhbWV0ZXI6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2ludCBmb29fcmVhZF9mdW5jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKyAgICAgICAgaW50IGxlbjsKKworICAgICAgICBpZihkYXRhID09IGZpbGVfZGF0YSkgeworICAgICAgICAgICAgICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgdGhpcyBmaWxlICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogbm9ybWFsIHByb2Nlc3NpbmcgKi8KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsZW47Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQmUgc3VyZSB0byBmcmVlIHRoZSA8c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+IGRhdGEgZmllbGQKKyAgICAgICAgd2hlbiByZW1vdmluZyB0aGUgcHJvY2ZzIGVudHJ5LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworCisKKworICA8Y2hhcHRlciBpZD0idGlwcyI+CisgICAgPHRpdGxlPlRpcHMgYW5kIHRyaWNrczwvdGl0bGU+CisKKworCisKKyAgICA8c2VjdDEgaWQ9ImNvbnZlbmllbmNlIj4KKyAgICAgIDx0aXRsZT5Db252ZW5pZW5jZSBmdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICA8ZnVuY3N5bm9wc2lzPgorCTxmdW5jcHJvdG90eXBlPgorCSAgPGZ1bmNkZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfcmVhZF9lbnRyeTwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCSAgPHBhcmFtZGVmPmNvbnN0IGNoYXIqIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+bW9kZV90IDxwYXJhbWV0ZXI+bW9kZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+cmVhZF9wcm9jX3QqIDxwYXJhbWV0ZXI+cmVhZF9wcm9jPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj52b2lkKiA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTwvZnVuY3Byb3RvdHlwZT4KKyAgICAgIDwvZnVuY3N5bm9wc2lzPgorICAgICAgCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgcmVndWxhciBmaWxlIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5CisgICAgICAgIGFzIDxmdW5jdGlvbj5jcmVhdGVfcHJvY19lbnRyeTwvZnVuY3Rpb24+IGZyb20gPHhyZWYKKyAgICAgICAgbGlua2VuZD0icmVndWxhcmZpbGUiLz4gZG9lcywgYnV0IGFsc28gYWxsb3dzIHRvIHNldCB0aGUgcmVhZAorICAgICAgICBmdW5jdGlvbiA8cGFyYW1ldGVyPnJlYWRfcHJvYzwvcGFyYW1ldGVyPiBpbiBvbmUgY2FsbC4gVGhpcworICAgICAgICBmdW5jdGlvbiBjYW4gc2V0IHRoZSA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj4gYXMgd2VsbCwgbGlrZQorICAgICAgICBleHBsYWluZWQgaW4gPHhyZWYgbGlua2VuZD0idXNpbmdkYXRhIi8+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKworCisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPk1vZHVsZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgcHJvY2ZzIGlzIGJlaW5nIHVzZWQgZnJvbSB3aXRoaW4gYSBtb2R1bGUsIGJlIHN1cmUgdG8gc2V0CisgICAgICAgIHRoZSA8c3RydWN0ZmllbGQ+b3duZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiB0aGUKKyAgICAgICAgPHN0cnVjdG5hbWU+c3RydWN0IHByb2NfZGlyX2VudHJ5PC9zdHJ1Y3RuYW1lPiB0bworICAgICAgICA8Y29uc3RhbnQ+VEhJU19NT0RVTEU8L2NvbnN0YW50Pi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorc3RydWN0IHByb2NfZGlyX2VudHJ5KiBlbnRyeTsKKworZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvc2VjdDE+CisKKworCisKKyAgICA8c2VjdDE+CisgICAgICA8dGl0bGU+TW9kZSBhbmQgb3duZXJzaGlwPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gY2hhbmdlIHRoZSBtb2RlIGFuZC9vciBvd25lcnNoaXAgb2YKKyAgICAgICAgYSBwcm9jZnMgZW50cnkuIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBhY2hpZXZlCisgICAgICAgIHRoYXQ6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSogZW50cnk7CisKK2VudHJ5LT5tb2RlID0gIFNfSVdVU1IgfFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USDsKK2VudHJ5LT51aWQgPSAwOworZW50cnktPmdpZCA9IDEwMDsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKworCisKKyAgPGNoYXB0ZXIgaWQ9ImV4YW1wbGUiPgorICAgIDx0aXRsZT5FeGFtcGxlPC90aXRsZT4KKworICAgIDwhLS0gYmUgY2FyZWZ1bCB3aXRoIHRoZSBleGFtcGxlIGNvZGU6IGl0IHNob3VsZG4ndCBiZSB3aWRlciB0aGFuCisgICAgYXBwcm94LiA2MCBjb2x1bW5zLCBvciBvdGhlcndpc2UgaXQgd29uJ3QgZml0IHByb3Blcmx5IG9uIGEgcGFnZQorICAgIC0tPgorCismcHJvY2ZzZXhhbXBsZTsKKworICA8L2NoYXB0ZXI+Cis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjQwODQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIHByb2Nmc19leGFtcGxlLmM6IGFuIGV4YW1wbGUgcHJvYyBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCkKKyAqCisgKiBUaGlzIGZpbGUgYWNjb21wYW5pZXMgdGhlIHByb2Nmcy1ndWlkZSBpbiB0aGUgTGludXgga2VybmVsCisgKiBzb3VyY2UuIEl0cyBtYWluIHVzZSBpcyB0byBkZW1vbnN0cmF0ZSB0aGUgY29uY2VwdHMgYW5kCisgKiBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBndWlkZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGhhcyBiZWVuIGRldmVsb3BlZCB3aGlsZSB3b3JraW5nIG9uIHRoZSBMQVJUCisgKiBjb21wdXRpbmcgYm9hcmQgKGh0dHA6Ly93d3cubGFydC50dWRlbGZ0Lm5sLyksIHdoaWNoIGlzCisgKiBzcG9uc29yZWQgYnkgdGhlIE1vYmlsZSBNdWx0aS1tZWRpYSBDb21tdW5pY2F0aW9ucworICogKGh0dHA6Ly93d3cubW1jLnR1ZGVsZnQubmwvKSBhbmQgVWJpcXVpdG91cyBDb21tdW5pY2F0aW9ucyAKKyAqIChodHRwOi8vd3d3LnViaWNvbS50dWRlbGZ0Lm5sLykgcHJvamVjdHMuCisgKgorICogVGhlIGF1dGhvciBjYW4gYmUgcmVhY2hlZCBhdDoKKyAqCisgKiAgRXJpayBNb3V3CisgKiAgSW5mb3JtYXRpb24gYW5kIENvbW11bmljYXRpb24gVGhlb3J5IEdyb3VwCisgKiAgRmFjdWx0eSBvZiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IGFuZCBTeXN0ZW1zCisgKiAgRGVsZnQgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5CisgKiAgUC5PLiBCb3ggNTAzMQorICogIDI2MDAgR0EgRGVsZnQKKyAqICBUaGUgTmV0aGVybGFuZHMKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgKiBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICogdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLAorICogU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKworI2RlZmluZSBNT0RVTEVfVkVSUyAiMS4wIgorI2RlZmluZSBNT0RVTEVfTkFNRSAicHJvY2ZzX2V4YW1wbGUiCisKKyNkZWZpbmUgRk9PQkFSX0xFTiA4CisKK3N0cnVjdCBmYl9kYXRhX3QgeworCWNoYXIgbmFtZVtGT09CQVJfTEVOICsgMV07CisJY2hhciB2YWx1ZVtGT09CQVJfTEVOICsgMV07Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmV4YW1wbGVfZGlyLCAqZm9vX2ZpbGUsCisJKmJhcl9maWxlLCAqamlmZmllc19maWxlLCAqc3ltbGluazsKKworCitzdHJ1Y3QgZmJfZGF0YV90IGZvb19kYXRhLCBiYXJfZGF0YTsKKworCitzdGF0aWMgaW50IHByb2NfcmVhZF9qaWZmaWVzKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwKKwkJCSAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCQkgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICJqaWZmaWVzID0gJWxkXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGppZmZpZXMpOworCisJcmV0dXJuIGxlbjsKK30KKworCitzdGF0aWMgaW50IHByb2NfcmVhZF9mb29iYXIoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAorCQkJICAgIG9mZl90IG9mZiwgaW50IGNvdW50LCAKKwkJCSAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBmYl9kYXRhX3QgKmZiX2RhdGEgPSAoc3RydWN0IGZiX2RhdGFfdCAqKWRhdGE7CisKKwkvKiBET04nVCBETyBUSEFUIC0gYnVmZmVyIG92ZXJydW5zIGFyZSBiYWQgKi8KKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlcyA9ICclcydcbiIsIAorCQkgICAgICBmYl9kYXRhLT5uYW1lLCBmYl9kYXRhLT52YWx1ZSk7CisKKwlyZXR1cm4gbGVuOworfQorCisKK3N0YXRpYyBpbnQgcHJvY193cml0ZV9mb29iYXIoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgZmJfZGF0YV90ICpmYl9kYXRhID0gKHN0cnVjdCBmYl9kYXRhX3QgKilkYXRhOworCisJaWYoY291bnQgPiBGT09CQVJfTEVOKQorCQlsZW4gPSBGT09CQVJfTEVOOworCWVsc2UKKwkJbGVuID0gY291bnQ7CisKKwlpZihjb3B5X2Zyb21fdXNlcihmYl9kYXRhLT52YWx1ZSwgYnVmZmVyLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZiX2RhdGEtPnZhbHVlW2xlbl0gPSAnXDAnOworCisJcmV0dXJuIGxlbjsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3Byb2Nmc19leGFtcGxlKHZvaWQpCit7CisJaW50IHJ2ID0gMDsKKworCS8qIGNyZWF0ZSBkaXJlY3RvcnkgKi8KKwlleGFtcGxlX2RpciA9IHByb2NfbWtkaXIoTU9EVUxFX05BTUUsIE5VTEwpOworCWlmKGV4YW1wbGVfZGlyID09IE5VTEwpIHsKKwkJcnYgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJCisJZXhhbXBsZV9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CisJCisJLyogY3JlYXRlIGppZmZpZXMgdXNpbmcgY29udmVuaWVuY2UgZnVuY3Rpb24gKi8KKwlqaWZmaWVzX2ZpbGUgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJqaWZmaWVzIiwgCisJCQkJCSAgICAgIDA0NDQsIGV4YW1wbGVfZGlyLCAKKwkJCQkJICAgICAgcHJvY19yZWFkX2ppZmZpZXMsCisJCQkJCSAgICAgIE5VTEwpOworCWlmKGppZmZpZXNfZmlsZSA9PSBOVUxMKSB7CisJCXJ2ICA9IC1FTk9NRU07CisJCWdvdG8gbm9famlmZmllczsKKwl9CisKKwlqaWZmaWVzX2ZpbGUtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkvKiBjcmVhdGUgZm9vIGFuZCBiYXIgZmlsZXMgdXNpbmcgc2FtZSBjYWxsYmFjaworCSAqIGZ1bmN0aW9ucyAKKwkgKi8KKwlmb29fZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJmb28iLCAwNjQ0LCBleGFtcGxlX2Rpcik7CisJaWYoZm9vX2ZpbGUgPT0gTlVMTCkgeworCQlydiA9IC1FTk9NRU07CisJCWdvdG8gbm9fZm9vOworCX0KKworCXN0cmNweShmb29fZGF0YS5uYW1lLCAiZm9vIik7CisJc3RyY3B5KGZvb19kYXRhLnZhbHVlLCAiZm9vIik7CisJZm9vX2ZpbGUtPmRhdGEgPSAmZm9vX2RhdGE7CisJZm9vX2ZpbGUtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9mb29iYXI7CisJZm9vX2ZpbGUtPndyaXRlX3Byb2MgPSBwcm9jX3dyaXRlX2Zvb2JhcjsKKwlmb29fZmlsZS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkJCisJYmFyX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeSgiYmFyIiwgMDY0NCwgZXhhbXBsZV9kaXIpOworCWlmKGJhcl9maWxlID09IE5VTEwpIHsKKwkJcnYgPSAtRU5PTUVNOworCQlnb3RvIG5vX2JhcjsKKwl9CisKKwlzdHJjcHkoYmFyX2RhdGEubmFtZSwgImJhciIpOworCXN0cmNweShiYXJfZGF0YS52YWx1ZSwgImJhciIpOworCWJhcl9maWxlLT5kYXRhID0gJmJhcl9kYXRhOworCWJhcl9maWxlLT5yZWFkX3Byb2MgPSBwcm9jX3JlYWRfZm9vYmFyOworCWJhcl9maWxlLT53cml0ZV9wcm9jID0gcHJvY193cml0ZV9mb29iYXI7CisJYmFyX2ZpbGUtPm93bmVyID0gVEhJU19NT0RVTEU7CisJCQorCS8qIGNyZWF0ZSBzeW1saW5rICovCisJc3ltbGluayA9IHByb2Nfc3ltbGluaygiamlmZmllc190b28iLCBleGFtcGxlX2RpciwgCisJCQkgICAgICAgImppZmZpZXMiKTsKKwlpZihzeW1saW5rID09IE5VTEwpIHsKKwkJcnYgPSAtRU5PTUVNOworCQlnb3RvIG5vX3N5bWxpbms7CisJfQorCisJc3ltbGluay0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIGV2ZXJ5dGhpbmcgT0sgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlcyAlcyBpbml0aWFsaXNlZFxuIiwKKwkgICAgICAgTU9EVUxFX05BTUUsIE1PRFVMRV9WRVJTKTsKKwlyZXR1cm4gMDsKKworbm9fc3ltbGluazoKKwlyZW1vdmVfcHJvY19lbnRyeSgidHR5IiwgZXhhbXBsZV9kaXIpOworbm9fdHR5OgorCXJlbW92ZV9wcm9jX2VudHJ5KCJiYXIiLCBleGFtcGxlX2Rpcik7Citub19iYXI6CisJcmVtb3ZlX3Byb2NfZW50cnkoImZvbyIsIGV4YW1wbGVfZGlyKTsKK25vX2ZvbzoKKwlyZW1vdmVfcHJvY19lbnRyeSgiamlmZmllcyIsIGV4YW1wbGVfZGlyKTsKK25vX2ppZmZpZXM6CQkJICAgICAgCisJcmVtb3ZlX3Byb2NfZW50cnkoTU9EVUxFX05BTUUsIE5VTEwpOworb3V0OgorCXJldHVybiBydjsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9wcm9jZnNfZXhhbXBsZSh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KCJqaWZmaWVzX3RvbyIsIGV4YW1wbGVfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgidHR5IiwgZXhhbXBsZV9kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJiYXIiLCBleGFtcGxlX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoImZvbyIsIGV4YW1wbGVfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiamlmZmllcyIsIGV4YW1wbGVfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeShNT0RVTEVfTkFNRSwgTlVMTCk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcyAlcyByZW1vdmVkXG4iLAorCSAgICAgICBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOworfQorCisKK21vZHVsZV9pbml0KGluaXRfcHJvY2ZzX2V4YW1wbGUpOworbW9kdWxlX2V4aXQoY2xlYW51cF9wcm9jZnNfZXhhbXBsZSk7CisKK01PRFVMRV9BVVRIT1IoIkVyaWsgTW91dyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJwcm9jZnMgZXhhbXBsZXMiKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9zY3NpZHJpdmVycy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2lkcml2ZXJzLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1OGU2NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9zY3NpZHJpdmVycy50bXBsCkBAIC0wLDAgKzEsMTkzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9InNjc2lkcml2ZXJzIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5TQ1NJIFN1YnN5c3RlbSBJbnRlcmZhY2VzPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5Eb3VnbGFzPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+R2lsYmVydDwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmRnaWxiZXJ0QGludGVybG9nLmNvbTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisgIDxwdWJkYXRlPjIwMDMtMDgtMTE8L3B1YmRhdGU+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDI8L3llYXI+CisgICA8eWVhcj4yMDAzPC95ZWFyPgorICAgPGhvbGRlcj5Eb3VnbGFzIEdpbGJlcnQ8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKworIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICA8cGFyYT4KK1RoaXMgZG9jdW1lbnQgb3V0bGluZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBMaW51eCBzY3NpIG1pZCBsZXZlbAorYW5kIGxvd2VyIGxldmVsIGRyaXZlcnMuIExvd2VyIGxldmVsIGRyaXZlcnMgYXJlIHZhcmlvdXNseSBjYWxsZWQgSEJBCisoaG9zdCBidXMgYWRhcHRlcikgZHJpdmVycywgaG9zdCBkcml2ZXJzIChIRCkgb3IgcHNldWRvIGFkYXB0ZXIgZHJpdmVycy4KK1RoZSBsYXR0ZXIgYWxsdWRlcyB0byB0aGUgZmFjdCB0aGF0IGEgbG93ZXIgbGV2ZWwgZHJpdmVyIG1heSBiZSBhCiticmlkZ2UgdG8gYW5vdGhlciBJTyBzdWJzeXN0ZW0gKGFuZCB0aGUgImlkZS1zY3NpIiBkcml2ZXIgaXMgYW4gZXhhbXBsZQorb2YgdGhpcykuIFRoZXJlIGNhbiBiZSBtYW55IGxvd2VyIGxldmVsIGRyaXZlcnMgYWN0aXZlIGluIGEgcnVubmluZworc3lzdGVtLCBidXQgb25seSBvbmUgcGVyIGhhcmR3YXJlIHR5cGUuIEZvciBleGFtcGxlLCB0aGUgYWljN3h4eCBkcml2ZXIKK2NvbnRyb2xzIGFkYXB0ZWMgY29udHJvbGxlcnMgYmFzZWQgb24gdGhlIDd4eHggY2hpcCBzZXJpZXMuIE1vc3QgbG93ZXIKK2xldmVsIGRyaXZlcnMgY2FuIGNvbnRyb2wgb25lIG9yIG1vcmUgc2NzaSBob3N0cyAoYS5rLmEuIHNjc2kgaW5pdGlhdG9ycykuCisgIDwvcGFyYT4KKzxwYXJhPgorVGhpcyBkb2N1bWVudCBjYW4gYmVlbiBmb3VuZCBpbiBhbiBBU0NJSSB0ZXh0IGZpbGUgaW4gdGhlIGxpbnV4IGtlcm5lbCAKK3NvdXJjZTogPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dDwvZmlsZW5hbWU+IC4KK0l0IGN1cnJlbnRseSBob2xkIGEgbGl0dGxlIG1vcmUgaW5mb3JtYXRpb24gdGhhbiB0aGlzIGRvY3VtZW50LiBUaGUKKzxmaWxlbmFtZT5kcml2ZXJzL3Njc2kvaG9zdHMuaDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Citkcml2ZXJzL3Njc2kvc2NzaS5oPC9maWxlbmFtZT4gaGVhZGVycyBjb250YWluIGRlc2NyaXB0aW9ucyBvZiBtZW1iZXJzCitvZiBpbXBvcnRhbnQgc3RydWN0dXJlcyBmb3IgdGhlIHNjc2kgc3Vic3lzdGVtLgorPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImRyaXZlci1zdHJ1Y3QiPgorICAgICAgPHRpdGxlPkRyaXZlciBzdHJ1Y3R1cmU8L3RpdGxlPgorICA8cGFyYT4KK1RyYWRpdGlvbmFsbHkgYSBsb3dlciBsZXZlbCBkcml2ZXIgZm9yIHRoZSBzY3NpIHN1YnN5c3RlbSBoYXMgYmVlbgorYXQgbGVhc3QgdHdvIGZpbGVzIGluIHRoZSBkcml2ZXJzL3Njc2kgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgYQorZHJpdmVyIGNhbGxlZCAieHl6IiBoYXMgYSBoZWFkZXIgZmlsZSAieHl6LmgiIGFuZCBhIHNvdXJjZSBmaWxlCisieHl6LmMiLiBbQWN0dWFsbHkgdGhlcmUgaXMgbm8gZ29vZCByZWFzb24gd2h5IHRoaXMgY291bGRuJ3QgYWxsCitiZSBpbiBvbmUgZmlsZS5dIFNvbWUgZHJpdmVycyB0aGF0IGhhdmUgYmVlbiBwb3J0ZWQgdG8gc2V2ZXJhbCBvcGVyYXRpbmcKK3N5c3RlbXMgKGUuZy4gYWljN3h4eCB3aGljaCBoYXMgc2VwYXJhdGUgIGZpbGVzIGZvciBnZW5lcmljIGFuZAorT1Mtc3BlY2lmaWMgY29kZSkgaGF2ZSBtb3JlIHRoYW4gdHdvIGZpbGVzLiBTdWNoIGRyaXZlcnMgdGVuZCB0byBoYXZlCit0aGVpciBvd24gZGlyZWN0b3J5IHVuZGVyIHRoZSBkcml2ZXJzL3Njc2kgZGlyZWN0b3J5LgorICA8L3BhcmE+CisgIDxwYXJhPgorc2NzaV9tb2R1bGUuYyBpcyBub3JtYWxseSBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIGEgbG93ZXIKK2xldmVsIGRyaXZlci4gRm9yIGl0IHRvIHdvcmsgYSBkZWNsYXJhdGlvbiBsaWtlIHRoaXMgaXMgbmVlZGVkIGJlZm9yZQoraXQgaXMgaW5jbHVkZWQ6Cis8cHJvZ3JhbWxpc3Rpbmc+CisgICAgc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSBEUklWRVJfVEVNUExBVEU7CisgICAgLyogRFJJVkVSX1RFTVBMQVRFIHNob3VsZCBjb250YWluIHBvaW50ZXJzIHRvIHN1cHBvcnRlZCBpbnRlcmZhY2UKKyAgICAgICBmdW5jdGlvbnMuIFNjc2lfSG9zdF9UZW1wbGF0ZSBpcyBkZWZpbmVkIGhvc3RzLmggKi8KKyAgICAjaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvcGFyYT4KKyAgPHBhcmE+CitUaGUgc2NzaV9tb2R1bGUuYyBhc3N1bWVzIHRoZSBuYW1lICJkcml2ZXJfdGVtcGxhdGUiIGlzIGFwcHJvcHJpYXRlbHkKK2RlZmluZWQuIEl0IGNvbnRhaW5zIDIgZnVuY3Rpb25zOgorPG9yZGVyZWRsaXN0PgorPGxpc3RpdGVtPjxwYXJhPgorICAgICBpbml0X3RoaXNfc2NzaV9kcml2ZXIoKSBjYWxsZWQgZHVyaW5nIGJ1aWx0aW4gYW5kIG1vZHVsZSBkcml2ZXIKKyAgICAgaW5pdGlhbGl6YXRpb246IGludm9rZXMgbWlkIGxldmVsJ3Mgc2NzaV9yZWdpc3Rlcl9ob3N0KCkKKzwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPgorICAgICBleGl0X3RoaXNfc2NzaV9kcml2ZXIoKSBjYWxsZWQgZHVyaW5nIGNsb3NlZG93bjogaW52b2tlcworICAgICBtaWQgbGV2ZWwncyBzY3NpX3VucmVnaXN0ZXJfaG9zdCgpCis8L3BhcmE+PC9saXN0aXRlbT4KKzwvb3JkZXJlZGxpc3Q+CisgIDwvcGFyYT4KKzxwYXJhPgorV2hlbiBhIG5ldywgbG93ZXIgbGV2ZWwgZHJpdmVyIGlzIGJlaW5nIGFkZGVkIHRvIExpbnV4LCB0aGUgZm9sbG93aW5nIAorZmlsZXMgKGFsbCBmb3VuZCBpbiB0aGUgZHJpdmVycy9zY3NpIGRpcmVjdG9yeSkgd2lsbCBuZWVkIHNvbWUgYXR0ZW50aW9uOiAKK01ha2VmaWxlLCBDb25maWcuaGVscCBhbmQgQ29uZmlnLmluIC4gSXQgaXMgcHJvYmFibHkgYmVzdCB0byBsb29rIGF0IHdoYXQgCithbiBleGlzdGluZyBsb3dlciBsZXZlbCBkcml2ZXIgZG9lcyBpbiB0aGlzIHJlZ2FyZC4KKzwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJpbnRmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+SW50ZXJmYWNlIEZ1bmN0aW9uczwvdGl0bGU+CishRURvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dAorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImxvY2tzIj4KKyAgICAgPHRpdGxlPkxvY2tzPC90aXRsZT4KKzxwYXJhPgorRWFjaCBTY3NpX0hvc3QgaW5zdGFuY2UgaGFzIGEgc3Bpbl9sb2NrIGNhbGxlZCBTY3NpX0hvc3Q6OmRlZmF1bHRfbG9jaword2hpY2ggaXMgaW5pdGlhbGl6ZWQgaW4gc2NzaV9yZWdpc3RlcigpIFtmb3VuZCBpbiBob3N0cy5jXS4gV2l0aGluIHRoZQorc2FtZSBmdW5jdGlvbiB0aGUgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgcG9pbnRlciBpcyBpbml0aWFsaXplZCB0byBwb2ludAorYXQgZGVmYXVsdF9sb2NrIHdpdGggdGhlIHNjc2lfYXNzaWduX2xvY2soKSBmdW5jdGlvbi4gVGhlcmVhZnRlcgorbG9jayBhbmQgdW5sb2NrIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZSBtaWQgbGV2ZWwgdXNlIHRoZQorU2NzaV9Ib3N0Ojpob3N0X2xvY2sgcG9pbnRlci4KKzwvcGFyYT4KKzxwYXJhPgorTG93ZXIgbGV2ZWwgZHJpdmVycyBjYW4gb3ZlcnJpZGUgdGhlIHVzZSBvZiBTY3NpX0hvc3Q6OmRlZmF1bHRfbG9jayBieQordXNpbmcgc2NzaV9hc3NpZ25fbG9jaygpLiBUaGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkgdG8gZG8gdGhpcyB3b3VsZAorYmUgaW4gdGhlIGRldGVjdCgpIGZ1bmN0aW9uIGFmdGVyIGl0IGhhcyBpbnZva2VkIHNjc2lfcmVnaXN0ZXIoKS4gSXQKK2NvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgY29hcnNlciBncmFpbiBsb2NrIChlLmcuIHBlciBkcml2ZXIpIG9yIGEKK2xvY2sgb2YgZXF1YWwgZ3JhbnVsYXJpdHkgKGkuZS4gcGVyIGhvc3QpLiBVc2luZyBmaW5lciBncmFpbiBsb2NrcworKGUuZy4gcGVyIHNjc2kgZGV2aWNlKSBtYXkgYmUgcG9zc2libGUgYnkganVnZ2xpbmcgbG9ja3MgaW4KK3F1ZXVlY29tbWFuZCgpLgorPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImNoYW5nZXMiPgorICAgICA8dGl0bGU+Q2hhbmdlcyBzaW5jZSBsayAyLjQgc2VyaWVzPC90aXRsZT4KKzxwYXJhPgoraW9fcmVxdWVzdF9sb2NrIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHNldmVyYWwgZmluZXIgZ3JhaW5lZCBsb2Nrcy4gVGhlIGxvY2sKK3JlbGV2YW50IHRvIGxvd2VyIGxldmVsIGRyaXZlcnMgaXMgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgYW5kIHRoZXJlIGlzIG9uZQorcGVyIHNjc2kgaG9zdC4KKzwvcGFyYT4KKzxwYXJhPgorVGhlIG9sZGVyIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbSBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIG1lYW5zIHRoZQorbG93ZXIgbGV2ZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhYm9ydCgpIGFuZCByZXNldCgpIGhhdmUgYmVlbiByZW1vdmVkLgorPC9wYXJhPgorPHBhcmE+CitJbiB0aGUgMi40IHNlcmllcyB0aGUgc2NzaSBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiBkZXNjcmlwdGlvbnMgd2VyZQorYWdncmVnYXRlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9ucyBmcm9tIGFsbCBvdGhlciBMaW51eAorc3Vic3lzdGVtcyBpbiB0aGUgRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscCBmaWxlLiBJbiB0aGUgMi41IHNlcmllcywKK3RoZSBzY3NpIHN1YnN5c3RlbSBub3cgaGFzIGl0cyBvd24gKG11Y2ggc21hbGxlcikgZHJpdmVycy9zY3NpL0NvbmZpZy5oZWxwCitmaWxlLgorPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImNyZWRpdHMiPgorICAgICA8dGl0bGU+Q3JlZGl0czwvdGl0bGU+Cis8cGFyYT4KK1RoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBkb2N1bWVudDoKKzxvcmRlcmVkbGlzdD4KKzxsaXN0aXRlbT48cGFyYT4KK01pa2UgQW5kZXJzb24gPGVtYWlsPmFuZG1pa2VAdXMuaWJtLmNvbTwvZW1haWw+Cis8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT4KK0phbWVzIEJvdHRvbWxleSA8ZW1haWw+SmFtZXMuQm90dG9tbGV5QHN0ZWVsZXllLmNvbTwvZW1haWw+Cis8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT4KK1BhdHJpY2sgTWFuc2ZpZWxkIDxlbWFpbD5wYXRtYW5zQHVzLmlibS5jb208L2VtYWlsPgorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L29yZGVyZWRsaXN0PgorPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9zaXM5MDAudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9zaXM5MDAudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzJjYmFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3NpczkwMC50bXBsCkBAIC0wLDAgKzEsNTg1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9IlNpUzkwMEd1aWRlIj4KKworPGJvb2tpbmZvPgorCis8dGl0bGU+U2lTIDkwMC83MDE2IEZhc3QgRXRoZXJuZXQgRGV2aWNlIERyaXZlcjwvdGl0bGU+CisKKzxhdXRob3Jncm91cD4KKzxhdXRob3I+Cis8Zmlyc3RuYW1lPk9sbGllPC9maXJzdG5hbWU+Cis8c3VybmFtZT5MaG88L3N1cm5hbWU+Cis8L2F1dGhvcj4KKworPGF1dGhvcj4KKzxmaXJzdG5hbWU+TGVpIENodW48L2ZpcnN0bmFtZT4KKzxzdXJuYW1lPkNoYW5nPC9zdXJuYW1lPgorPC9hdXRob3I+Cis8L2F1dGhvcmdyb3VwPgorCis8ZWRpdGlvbj5Eb2N1bWVudCBSZXZpc2lvbjogMC4zIGZvciBTaVM5MDAgZHJpdmVyIHYxLjA2ICZhbXA7IHYxLjA3PC9lZGl0aW9uPgorPHB1YmRhdGU+Tm92ZW1iZXIgMTYsIDIwMDA8L3B1YmRhdGU+CisKKzxjb3B5cmlnaHQ+CisgPHllYXI+MTk5OTwveWVhcj4KKyA8aG9sZGVyPlNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycC48L2hvbGRlcj4KKzwvY29weXJpZ2h0PgorCis8bGVnYWxub3RpY2U+CisgPHBhcmE+CisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKwlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKwlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKwlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIDwvcGFyYT4KKworIDxwYXJhPgorCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwlGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgPC9wYXJhPgorPC9sZWdhbG5vdGljZT4KKworPGFic3RyYWN0PgorPHBhcmE+CitUaGlzIGRvY3VtZW50IGdpdmVzIHNvbWUgaW5mb3JtYXRpb24gb24gaW5zdGFsbGF0aW9uIGFuZCB1c2FnZSBvZiBTaVMgOTAwLzcwMTYKK2RldmljZSBkcml2ZXIgdW5kZXIgTGludXguCis8L3BhcmE+Cis8L2Fic3RyYWN0PgorCis8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCis8Y2hhcHRlciBpZD0iaW50cm8iPgorIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCis8cGFyYT4KK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSByZXZpc2lvbiAxLjA2IGFuZCAxLjA3IG9mIFNpUyA5MDAvNzAxNiBGYXN0IEV0aGVybmV0IAorZGV2aWNlIGRyaXZlciB1bmRlciBMaW51eC4gVGhlIGRyaXZlciBpcyBkZXZlbG9wZWQgYnkgU2lsaWNvbiBJbnRlZ3JhdGVkCitTeXN0ZW0gQ29ycC4gYW5kIGRpc3RyaWJ1dGVkIGZyZWVseSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCitUaGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBhcyBhIGxvYWRhYmxlIG1vZHVsZSBhbmQgdXNlZCB1bmRlciBMaW51eCBrZXJuZWwgCit2ZXJzaW9uIDIuMi54LiAocmV2LiAxLjA2KQorV2l0aCBtaW5pbWFsIGNoYW5nZXMsIHRoZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB1bmRlciAyLjMueCBhbmQgMi40Lngga2VybmVsIAorKHJldi4gMS4wNyksIHBsZWFzZSBzZWUgCis8eHJlZiBsaW5rZW5kPSJpbnN0YWxsIi8+LiBJZiB5b3UgYXJlIGludGVuZGVkIHRvCit1c2UgdGhlIGRyaXZlciBmb3IgZWFybGllciBrZXJuZWxzLCB5b3UgYXJlIG9uIHlvdXIgb3duLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBkcml2ZXIgaXMgdGVzdGVkIHdpdGggdXN1YWwgVENQL0lQIGFwcGxpY2F0aW9ucyBpbmNsdWRpbmcKK0ZUUCwgVGVsbmV0LCBOZXRzY2FwZSBldGMuIGFuZCBpcyB1c2VkIGNvbnN0YW50bHkgYnkgdGhlIGRldmVsb3BlcnMuCis8L3BhcmE+CisKKzxwYXJhPgorUGxlYXNlIHNlbmQgYWxsIGNvbW1lbnRzL2ZpeGVzL3F1ZXN0aW9ucyB0bworPHVsaW5rIHVybD0ibWFpbHRvOmxjY2hhbmdAc2lzLmNvbS50dyI+TGVpLUNodW4gQ2hhbmc8L3VsaW5rPi4KKzwvcGFyYT4KKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9ImNoYW5nZXMiPgorIDx0aXRsZT5DaGFuZ2VzPC90aXRsZT4KKworPHBhcmE+CitDaGFuZ2VzIG1hZGUgaW4gUmV2aXNpb24gMS4wNworCis8b3JkZXJlZGxpc3Q+Cis8bGlzdGl0ZW0+Cis8cGFyYT4KK1NlcGFyYXRpb24gb2Ygc2lzOTAwLmMgYW5kIHNpczkwMC5oIGluIG9yZGVyIHRvIG1vdmUgbW9zdCAKK2NvbnN0YW50IGRlZmluaXRpb24gdG8gc2lzOTAwLmggKG1hbnkgb2YgdGhvc2UgY29uc3RhbnRzIHdlcmUKK2NvcnJlY3RlZCkKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorQ2xlYW4gdXAgUENJIGRldGVjdGlvbiwgdGhlIHBjaS1zY2FuIGZyb20gRG9uYWxkIEJlY2tlciB3ZXJlIG5vdCB1c2VkLAoranVzdCBzaW1wbGUgcGNpJmxvd2JhcjtmaW5kJmxvd2JhcjsqLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitNSUkgZGV0ZWN0aW9uIGlzIG1vZGlmaWVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbWlpIHRyYW5zY2VpdmVyLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitCdWdzIGluIHJlYWQmbG93YmFyO2VlcHJvbSwgbWRpbyZsb3diYXI7KiB3ZXJlIHJlbW92ZWQuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK0xvdCBvZiBzaXM5MDAgaXJyZWxldmFudCBjb21tZW50cyB3ZXJlIHJlbW92ZWQvY2hhbmdlZCBhbmQKK21vcmUgY29tbWVudHMgd2VyZSBhZGRlZCB0byByZWZsZWN0IHRoZSByZWFsIHNpdHVhdGlvbi4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorQ2xlYW4gdXAgb2YgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1lc3MgaW4gYnVmZmVyIAorZGVzY3JpcHRvcnMuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK0JldHRlciB0cmFuc21pdC9yZWNlaXZlIGVycm9yIGhhbmRsaW5nLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitUaGUgZHJpdmVyIG5vdyB1c2VzIHplcm8tY29weSBzaW5nbGUgYnVmZmVyIG1hbmFnZW1lbnQKK3NjaGVtZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitOYW1lcyBvZiB2YXJpYWJsZXMgd2VyZSBjaGFuZ2VkIHRvIGJlIG1vcmUgY29uc2lzdGVudC4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorQ2xlYW4gdXAgb2YgYXVvLW5lZ290aWF0aW9uIGFuZCB0aW1lciBjb2RlLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitBdXRvbWF0aWMgZGV0ZWN0aW9uIGFuZCBjaGFuZ2Ugb2YgUEhZIG9uIHRoZSBmbHkuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK0J1ZyBpbiBtYWMgcHJvYmluZyBmaXhlZC4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorRml4IDYzMEUgZXF1YWxpZXIgcHJvYmxlbSBieSBtb2RpZnlpbmcgdGhlIGVxdWFsaXplciB3b3JrYXJvdW5kIHJ1bGUuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK1N1cHBvcnQgZm9yIElDUzE4OTMgMTAvMTAwIEludGVyYXRlZCBQSFljZWl2ZXIuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK1N1cHBvcnQgZm9yIG1lZGlhIHNlbGVjdCBieSBpZmNvbmZpZy4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorQWRkZWQga2VybmVsLWRvYyBleHRyYXRhYmxlIGRvY3VtZW50YXRpb24uCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8L29yZGVyZWRsaXN0PgorPC9wYXJhPgorPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0idGVzdGVkIj4KKyA8dGl0bGU+VGVzdGVkIEVudmlyb25tZW50PC90aXRsZT4KKworPHBhcmE+CitUaGlzIGRyaXZlciBpcyBkZXZlbG9wZWQgb24gdGhlIGZvbGxvd2luZyBoYXJkd2FyZQorCis8aXRlbWl6ZWRsaXN0PgorPGxpc3RpdGVtPgorCis8cGFyYT4KK0ludGVsIENlbGVyb24gNTAwIHdpdGggU2lTIDYzMCAocmV2IDAyKSBjaGlwc2V0Cis8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCis8cGFyYT4KK1NpUyA5MDAgKHJldiAwMSkgYW5kIFNpUyA3MDE2LzcwMTQgRmFzdCBFdGhlcm5ldCBDYXJkCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8L2l0ZW1pemVkbGlzdD4KKworYW5kIHRlc3RlZCB3aXRoIHRoZXNlIHNvZnR3YXJlIGVudmlyb25tZW50cworCis8aXRlbWl6ZWRsaXN0PgorPGxpc3RpdGVtPgorCis8cGFyYT4KK1JlZCBIYXQgTGludXggdmVyc2lvbiA2LjIKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+CisKKzxwYXJhPgorTGludXgga2VybmVsIHZlcnNpb24gMi40LjAKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+CisKKzxwYXJhPgorTmV0c2NhcGUgdmVyc2lvbiA0LjYKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+CisKKzxwYXJhPgorTmNGVFAgMy4wLjAgYmV0YSAxOAorPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKworPHBhcmE+CitTYW1iYSB2ZXJzaW9uIDIuMC4zCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8L2l0ZW1pemVkbGlzdD4KKworPC9wYXJhPgorCis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJmaWxlcyI+Cis8dGl0bGU+RmlsZXMgaW4gVGhpcyBQYWNrYWdlPC90aXRsZT4KKworPHBhcmE+CitJbiB0aGUgcGFja2FnZSB5b3UgY2FuIGZpbmQgdGhlc2UgZmlsZXM6Cis8L3BhcmE+CisKKzxwYXJhPgorPHZhcmlhYmxlbGlzdD4KKworPHZhcmxpc3RlbnRyeT4KKzx0ZXJtPnNpczkwMC5jPC90ZXJtPgorPGxpc3RpdGVtPgorPHBhcmE+CitEcml2ZXIgc291cmNlIGZpbGUgaW4gQyAKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+Cis8L3Zhcmxpc3RlbnRyeT4KKworPHZhcmxpc3RlbnRyeT4KKzx0ZXJtPnNpczkwMC5oPC90ZXJtPgorPGxpc3RpdGVtPgorPHBhcmE+CitIZWFkZXIgZmlsZSBmb3Igc2lzOTAwLmMKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+Cis8L3Zhcmxpc3RlbnRyeT4KKworPHZhcmxpc3RlbnRyeT4KKzx0ZXJtPnNpczkwMC5zZ21sPC90ZXJtPgorPGxpc3RpdGVtPgorPHBhcmE+CitEb2NCb29rIFNHTUwgc291cmNlIG9mIHRoZSBkb2N1bWVudAorPC9wYXJhPgorPC9saXN0aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorPHRlcm0+c2lzOTAwLnR4dDwvdGVybT4KKzxsaXN0aXRlbT4KKzxwYXJhPgorRHJpdmVyIGRvY3VtZW50IGluIHBsYWluIHRleHQKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+Cis8L3Zhcmxpc3RlbnRyeT4KKworPC92YXJpYWJsZWxpc3Q+Cis8L3BhcmE+Cis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJpbnN0YWxsIj4KKyA8dGl0bGU+SW5zdGFsbGF0aW9uPC90aXRsZT4KKworPHBhcmE+CitTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnAuIGlzIGNvb3BlcmF0aW5nIGNsb3NlbHkgd2l0aCBjb3JlIExpbnV4IEtlcm5lbAorZGV2ZWxvcGVycy4gVGhlIHJldmlzaW9ucyBvZiBTaVMgOTAwIGRyaXZlciBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhlIHVzdWFsbCBjaGFubmVscworZm9yIGtlcm5lbCB0YXIgZmlsZXMgYW5kIHBhdGNoZXMuIFRob3NlIGtlcm5lbCB0YXIgZmlsZXMgZm9yIG9mZmljaWFsIGtlcm5lbCBhbmQKK3BhdGNoZXMgZm9yIGtlcm5lbCBwcmUtcmVsZWFzZSBjYW4gYmUgZG93bmxvYWQgYXQgCis8dWxpbmsgdXJsPSJodHRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC8iPm9mZmljaWFsIGtlcm5lbCBmdHAgc2l0ZTwvdWxpbms+CithbmQgaXRzIG1pcnJvcnMuCitUaGUgMS4wNiByZXZpc2lvbiBjYW4gYmUgZm91bmQgaW4ga2VybmVsIHZlcnNpb24gbGF0ZXIgdGhhbiAyLjMuMTUgYW5kIHByZS0yLjIuMTQsIAorYW5kIDEuMDcgcmV2aXNpb24gY2FuIGJlIGZvdW5kIGluIGtlcm5lbCB2ZXJzaW9uIDIuNC4wLgorSWYgeW91IGhhdmUgbm8gcHJpb3IgZXhwZXJpZW5jZSBpbiBuZXR3b3JraW5nIHVuZGVyIExpbnV4LCBwbGVhc2UgcmVhZAorPHVsaW5rIHVybD0iaHR0cDovL3d3dy50bGRwLm9yZy8iPkV0aGVybmV0IEhPV1RPPC91bGluaz4gYW5kCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnRsZHAub3JnLyI+TmV0d29ya2luZyBIT1dUTzwvdWxpbms+IGF2YWlsYWJsZSBmcm9tCitMaW51eCBEb2N1bWVudGF0aW9uIFByb2plY3QgKExEUCkuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIGRyaXZlciBpcyBidW5kbGVkIGluIHJlbGVhc2UgbGF0ZXIgdGhhbiAyLjIuMTEgYW5kIDIuMy4xNSBzbyB0aGlzIAoraXMgdGhlIG1vc3QgZWFzeSBjYXNlLiAKK0JlIHN1cmUgeW91IGhhdmUgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2VzIGZvciBjb21waWxpbmcga2VybmVsIHNvdXJjZS4KK1Rob3NlIHBhY2thZ2VzIGFyZSBsaXN0ZWQgaW4gRG9jdW1lbnQvQ2hhbmdlcyBpbiBrZXJuZWwgc291cmNlIAorZGlzdHJpYnV0aW9uLiBJZiB5b3UgaGF2ZSB0byBpbnN0YWxsIHRoZSBkcml2ZXIgb3RoZXIgdGhhbiB0aG9zZSBidW5kbGVkCitpbiBrZXJuZWwgcmVsZWFzZSwgeW91IHNob3VsZCBoYXZlIHlvdXIgZHJpdmVyIGZpbGUgCis8ZmlsZW5hbWU+c2lzOTAwLmM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnNpczkwMC5oPC9maWxlbmFtZT4gCitjb3BpZWQgaW50byA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+L3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQvPC9maWxlbmFtZT4gZmlyc3QuCitUaGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlIHdheXMgdG8gaW5zdGFsbCB0aGUgZHJpdmVyCis8L3BhcmE+CisKKzxzZWN0MT4KKzx0aXRsZT5CdWlsZGluZyB0aGUgZHJpdmVyIGFzIGxvYWRhYmxlIG1vZHVsZTwvdGl0bGU+CisKKzxwYXJhPgorVG8gYnVpbGQgdGhlIGRyaXZlciBhcyBhIGxvYWRhYmxlIGtlcm5lbCBtb2R1bGUgeW91IGhhdmUgdG8gcmVjb25maWd1cmUKK3RoZSBrZXJuZWwgdG8gYWN0aXZhdGUgbmV0d29yayBzdXBwb3J0IGJ5Cis8L3BhcmE+CisKKzxwYXJhPjxzY3JlZW4+CittYWtlIG1lbnVjb25maWcKKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+CitDaG9vc2UgPHF1b3RlPkxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0ICAtLS0+PC9xdW90ZT4sIAordGhlbiBzZWxlY3QgPHF1b3RlPkVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydDwvcXVvdGU+LgorPC9wYXJhPgorCis8cGFyYT4KK0Nob29zZSA8cXVvdGU+TmV0d29yayBEZXZpY2UgU3VwcG9ydCAgLS0tPjwvcXVvdGU+LCBzZWxlY3QgCis8cXVvdGU+RXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpPC9xdW90ZT4uCitUaGVuIHNlbGVjdCA8cXVvdGU+RUlTQSwgVkxCLCBQQ0kgYW5kIG9uIGJvYXJkIGNvbnRyb2xsZXJzPC9xdW90ZT4sIAorYW5kIGNob29zZSA8cXVvdGU+U2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydDwvcXVvdGU+IAordG8gPHF1b3RlPk08L3F1b3RlPi4KKzwvcGFyYT4KKworPHBhcmE+CitBZnRlciByZWNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwsIHlvdSBjYW4gbWFrZSB0aGUgZHJpdmVyIG1vZHVsZSBieQorPC9wYXJhPgorCis8cGFyYT48c2NyZWVuPgorbWFrZSBtb2R1bGVzCis8L3NjcmVlbj48L3BhcmE+CisKKzxwYXJhPgorVGhlIGRyaXZlciBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCBubyBlcnJvcnMuIEFmdGVyIGNvbXBpbGluZyB0aGUgZHJpdmVyLAordGhlIGRyaXZlciBjYW4gYmUgaW5zdGFsbGVkIHRvIHByb3BlciBwbGFjZSBieQorPC9wYXJhPgorCis8cGFyYT48c2NyZWVuPgorbWFrZSBtb2R1bGVzX2luc3RhbGwKKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+CitMb2FkIHRoZSBkcml2ZXIgaW50byBrZXJuZWwgYnkKKzwvcGFyYT4KKworPHBhcmE+PHNjcmVlbj4KK2luc21vZCBzaXM5MDAKKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+CitXaGVuIGxvYWRpbmcgdGhlIGRyaXZlciBpbnRvIG1lbW9yeSwgc29tZSBpbmZvcm1hdGlvbiBtZXNzYWdlIGNhbiBiZSB2aWV3IGJ5Cis8L3BhcmE+CisKKzxwYXJhPgorPHNjcmVlbj4KK2RtZXNnCis8L3NjcmVlbj4KKworb3IKKworPHNjcmVlbj4KK2NhdCAvdmFyL2xvZy9tZXNzYWdlCis8L3NjcmVlbj4KKzwvcGFyYT4KKworPHBhcmE+CitJZiB0aGUgZHJpdmVyIGlzIGxvYWRlZCBwcm9wZXJseSB5b3Ugd2lsbCBoYXZlIG1lc3NhZ2VzIHNpbWlsYXIgdG8gdGhpczoKKzwvcGFyYT4KKworPHBhcmE+PHNjcmVlbj4KK3NpczkwMC5jOiB2MS4wNy4wNiAgMTEvMDcvMjAwMAorZXRoMDogU2lTIDkwMCBQQ0kgRmFzdCBFdGhlcm5ldCBhdCAweGQwMDAsIElSUSAxMCwgMDA6MDA6ZTg6ODM6N2Y6YTQuCitldGgwOiBTaVMgOTAwIEludGVybmFsIE1JSSBQSFkgdHJhbnNjZWl2ZXIgZm91bmQgYXQgYWRkcmVzcyAxLgorZXRoMDogVXNpbmcgU2lTIDkwMCBJbnRlcm5hbCBNSUkgUEhZIGFzIGRlZmF1bHQKKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+CitzaG93aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgYW5kIHRoZSByZXN1bHRzIG9mIHByb2Jpbmcgcm91dGluZS4KKzwvcGFyYT4KKworPHBhcmE+CitPbmNlIHRoZSBkcml2ZXIgaXMgbG9hZGVkLCBuZXR3b3JrIGNhbiBiZSBicm91Z2h0IHVwIGJ5Cis8L3BhcmE+CisKKzxwYXJhPjxzY3JlZW4+Cisvc2Jpbi9pZmNvbmZpZyBldGgwIElQQUREUiBicm9hZGNhc3QgQlJPQURDQVNUIG5ldG1hc2sgTkVUTUFTSyBtZWRpYSBUWVBFCis8L3NjcmVlbj48L3BhcmE+CisKKzxwYXJhPgord2hlcmUgSVBBRERSLCBCUk9BRENBU1QsIE5FVE1BU0sgYXJlIHlvdXIgSVAgYWRkcmVzcywgYnJvYWRjYXN0IGFkZHJlc3MgYW5kCituZXRtYXNrIHJlc3BlY3RpdmVseS4gVFlQRSBpcyB1c2VkIHRvIHNldCBtZWRpdW0gdHlwZSB1c2VkIGJ5IHRoZSBkZXZpY2UuIAorVHlwaWNhbCB2YWx1ZXMgYXJlICIxMGJhc2VUIih0d2lzdGVkLXBhaXIgMTBNYnBzIEV0aGVybmV0KSBvciAiMTAwYmFzZVQiCisodHdpc3RlZC1wYWlyIDEwME1icHMgRXRoZXJuZXQpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29uZmlndXJlIAorbmV0d29yayBpbnRlcmZhY2UsIHBsZWFzZSByZWZlciB0byAgCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnRsZHAub3JnLyI+TmV0d29ya2luZyBIT1dUTzwvdWxpbms+LgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBsaW5rIHN0YXR1cyBpcyBhbHNvIHNob3duIGJ5IGtlcm5lbCBtZXNzYWdlcy4gRm9yIGV4YW1wbGUsIGFmdGVyIHRoZQorbmV0d29yayBpbnRlcmZhY2UgaXMgYWN0aXZhdGVkLCB5b3UgbWF5IGhhdmUgdGhlIG1lc3NhZ2U6Cis8L3BhcmE+CisKKzxwYXJhPjxzY3JlZW4+CitldGgwOiBNZWRpYSBMaW5rIE9uIDEwMG1icHMgZnVsbC1kdXBsZXgKKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+CitJZiB5b3UgdHJ5IHRvIHVucGx1ZyB0aGUgdHdpc3QgcGFpciAoVFApIGNhYmxlIHlvdSB3aWxsIGdldAorPC9wYXJhPgorCis8cGFyYT48c2NyZWVuPgorZXRoMDogTWVkaWEgTGluayBPZmYKKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+CitpbmRpY2F0aW5nIHRoYXQgdGhlIGxpbmsgaXMgZmFpbGVkLgorPC9wYXJhPgorPC9zZWN0MT4KKworPHNlY3QxPgorPHRpdGxlPkJ1aWxkaW5nIHRoZSBkcml2ZXIgaW50byBrZXJuZWw8L3RpdGxlPgorCis8cGFyYT4KK0lmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGRyaXZlciBpbnRvIGtlcm5lbCwgY2hvb3NlIDxxdW90ZT5ZPC9xdW90ZT4gCityYXRoZXIgdGhhbiA8cXVvdGU+TTwvcXVvdGU+IG9uIAorPHF1b3RlPlNpUyA5MDAvNzAxNiBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIHN1cHBvcnQ8L3F1b3RlPiAKK3doZW4gY29uZmlndXJpbmcgdGhlIGtlcm5lbC4gQnVpbGQgdGhlIGtlcm5lbCBpbWFnZSBpbiB0aGUgdXN1YWwgd2F5Cis8L3BhcmE+CisKKzxwYXJhPjxzY3JlZW4+CittYWtlIGNsZWFuCisKK21ha2UgYnpsaWxvCis8L3NjcmVlbj48L3BhcmE+CisKKzxwYXJhPgorTmV4dCB0aW1lIHRoZSBzeXN0ZW0gcmVib290LCB5b3UgaGF2ZSB0aGUgZHJpdmVyIGluIG1lbW9yeS4KKzwvcGFyYT4KKworPC9zZWN0MT4KKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9InByb2JsZW1zIj4KKyA8dGl0bGU+S25vd24gUHJvYmxlbXMgYW5kIEJ1Z3M8L3RpdGxlPgorCis8cGFyYT4KK1RoZXJlIGFyZSBzb21lIGtub3duIHByb2JsZW1zIGFuZCBidWdzLiBJZiB5b3UgZmluZCBhbnkgb3RoZXIgYnVncyBwbGVhc2UgCittYWlsIHRvIDx1bGluayB1cmw9Im1haWx0bzpsY2NoYW5nQHNpcy5jb20udHciPmxjY2hhbmdAc2lzLmNvbS50dzwvdWxpbms+CisKKzxvcmRlcmVkbGlzdD4KKworPGxpc3RpdGVtPgorPHBhcmE+CitBTTc5QzkwMSBIb21lUE5BIFBIWSBpcyBub3QgdGhvcm91Z2hseSB0ZXN0ZWQsIHRoZXJlIG1heSBiZSBzb21lIAorYnVncyBpbiB0aGUgPHF1b3RlPm9uIHRoZSBmbHk8L3F1b3RlPiBjaGFuZ2Ugb2YgdHJhbnNjZWl2ZXIuIAorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitBIGJ1ZyBpcyBoaWRkZW4gc29tZXdoZXJlIGluIHRoZSByZWNlaXZlIGJ1ZmZlciBtYW5hZ2VtZW50IGNvZGUsIAordGhlIGJ1ZyBjYXVzZXMgTlVMTCBwb2ludGVyIHJlZmVyZW5jZSBpbiB0aGUga2VybmVsLiBUaGlzIGZhdWx0IGlzIAorY2F1Z2h0IGJlZm9yZSBiYWQgdGhpbmdzIGhhcHBlbiBhbmQgcmVwb3J0ZWQgd2l0aCB0aGUgbWVzc2FnZToKKworPGNvbXB1dGVyb3V0cHV0PgorZXRoMDogTlVMTCBwb2ludGVyIGVuY291bnRlcmVkIGluIFJ4IHJpbmcsIHNraXBwaW5nIAorPC9jb21wdXRlcm91dHB1dD4KKword2hpY2ggY2FuIGJlIHZpZXdlZCB3aXRoIDxsaXRlcmFsIHJlbWFwPSJ0dCI+ZG1lc2c8L2xpdGVyYWw+IG9yCis8bGl0ZXJhbCByZW1hcD0idHQiPmNhdCAvdmFyL2xvZy9tZXNzYWdlPC9saXRlcmFsPi4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorVGhlIG1lZGlhIHR5cGUgY2hhbmdlIGZyb20gMTBNYnBzIHRvIDEwME1icHMgdHdpc3RlZC1wYWlyIGV0aGVybmV0IAorYnkgaWZjb25maWcgY2F1c2VzIHRoZSBtZWRpYSBsaW5rIGRvd24uCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8L29yZGVyZWRsaXN0PgorPC9wYXJhPgorPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0iUkhpc3RvcnkiPgorIDx0aXRsZT5SZXZpc2lvbiBIaXN0b3J5PC90aXRsZT4KKworPHBhcmE+Cis8aXRlbWl6ZWRsaXN0PgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK05vdmVtYmVyIDEzLCAyMDAwLCBSZXZpc2lvbiAxLjA3LCBzZXZlbnRoIHJlbGVhc2UsIDYzMEUgcHJvYmxlbSBmaXhlZCAKK2FuZCBmdXJ0aGVyIGNsZWFuIHVwLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitOb3ZlbWJlciA0LCAxOTk5LCBSZXZpc2lvbiAxLjA2LCBTZWNvbmQgcmVsZWFzZSwgbG90cyBvZiBjbGVhbiB1cAorYW5kIG9wdGltaXphdGlvbi4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorQXVndXN0IDgsIDE5OTksIFJldmlzaW9uIDEuMDUsIEluaXRpYWwgUHVibGljIFJlbGVhc2UKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzwvaXRlbWl6ZWRsaXN0PgorPC9wYXJhPgorPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0iYWNrbm93bGVkZ2VtZW50cyI+CisgPHRpdGxlPkFja25vd2xlZGdlbWVudHM8L3RpdGxlPgorCis8cGFyYT4KK1RoaXMgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IGRlcml2ZWQgZm9ybSAKKzx1bGluayB1cmw9Im1haWx0bzpiZWNrZXJAY2VzZGlzMS5nc2ZjLm5hc2EuZ292Ij5Eb25hbGQgQmVja2VyPC91bGluaz4ncworPHVsaW5rIHVybD0iZnRwOi8vY2VzZGlzLmdzZmMubmFzYS5nb3YvcHViL2xpbnV4L2RyaXZlcnMva2Vybi0yLjMvcGNpLXNrZWxldG9uLmMiCis+cGNpLXNrZWxldG9uPC91bGluaz4gYW5kCis8dWxpbmsgdXJsPSJmdHA6Ly9jZXNkaXMuZ3NmYy5uYXNhLmdvdi9wdWIvbGludXgvZHJpdmVycy9rZXJuLTIuMy9ydGw4MTM5LmMiCis+cnRsODEzOTwvdWxpbms+IGRyaXZlcnMuIERvbmFsZCBhbHNvIHByb3ZpZGVkIHZhcmlvdXMgc3VnZ2VzdGlvbgorcmVnYXJkZWQgd2l0aCBpbXByb3ZlbWVudHMgbWFkZSBpbiByZXZpc2lvbiAxLjA2LgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSAxLjA1IHJldmlzaW9uIHdhcyBjcmVhdGVkIGJ5IAorPHVsaW5rIHVybD0ibWFpbHRvOmNtaHVhbmdAc2lzLmNvbS50dyI+SmltIEh1YW5nPC91bGluaz4sIEFNRCA3OWM5MDEKK3N1cHBvcnQgd2FzIGFkZGVkIGJ5IDx1bGluayB1cmw9Im1haWx0bzpsY3NAc2lzLmNvbS50dyI+Q2hpbi1TaGFuIExpPC91bGluaz4uCis8L3BhcmE+Cis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJmdW5jdGlvbnMiPgorPHRpdGxlPkxpc3Qgb2YgRnVuY3Rpb25zPC90aXRsZT4KKyFJZHJpdmVycy9uZXQvc2lzOTAwLmMKKzwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3R1bGlwLXVzZXIudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMGQ3YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLnRtcGwKQEAgLTAsMCArMSwzMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iVHVsaXBVc2VyR3VpZGUiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlR1bGlwIERyaXZlciBVc2VyJ3MgR3VpZGU8L3RpdGxlPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPkplZmY8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5HYXJ6aWs8L3N1cm5hbWU+CisgICAgPGFmZmlsaWF0aW9uPgorICAgICA8YWRkcmVzcz4KKyAgICAgIDxlbWFpbD5qZ2FyemlrQHBvYm94LmNvbTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDE8L3llYXI+CisgICA8aG9sZGVyPkplZmYgR2FyemlrPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworIDx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKzxwYXJhPgorVGhlIFR1bGlwIEV0aGVybmV0IENhcmQgRHJpdmVyCitpcyBtYWludGFpbmVkIGJ5IEplZmYgR2FyemlrICg8ZW1haWw+amdhcnppa0Bwb2JveC5jb208L2VtYWlsPikuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIFR1bGlwIGRyaXZlciB3YXMgZGV2ZWxvcGVkIGJ5IERvbmFsZCBCZWNrZXIgYW5kIGNoYW5nZWQgYnkKK0plZmYgR2FyemlrLCBUYWthc2hpIE1hbmFiZSBhbmQgYSBjYXN0IG9mIHRob3VzYW5kcy4KKzwvcGFyYT4KKworPHBhcmE+CitGb3IgMi40LnggYW5kIGxhdGVyIGtlcm5lbHMsIHRoZSBMaW51eCBUdWxpcCBkcml2ZXIgaXMgYXZhaWxhYmxlIGF0Cis8dWxpbmsgdXJsPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3R1bGlwLyI+aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90dWxpcC88L3VsaW5rPgorPC9wYXJhPgorCis8cGFyYT4KKwlUaGlzIGRyaXZlciBpcyBmb3IgdGhlIERpZ2l0YWwgIlR1bGlwIiBFdGhlcm5ldCBhZGFwdGVyIGludGVyZmFjZS4KKwlJdCBzaG91bGQgd29yayB3aXRoIG1vc3QgREVDIDIxKjQqLWJhc2VkIGNoaXBzL2V0aGVyY2FyZHMsIGFzIHdlbGwgYXMKKwl3aXRoIHdvcmstYWxpa2UgY2hpcHMgZnJvbSBMaXRlLU9uIChQTklDKSBhbmQgTWFjcm9uaXggKE1YSUMpIGFuZCBBU0lYLgorPC9wYXJhPgorCis8cGFyYT4KKyAgICAgICAgVGhlIG9yaWdpbmFsIGF1dGhvciBtYXkgYmUgcmVhY2hlZCBhcyBiZWNrZXJAc2N5bGQuY29tLCBvciBDL08KKyAgICAgICAgU2N5bGQgQ29tcHV0aW5nIENvcnBvcmF0aW9uLAorICAgICAgICA0MTAgU2V2ZXJuIEF2ZS4sIFN1aXRlIDIxMCwKKyAgICAgICAgQW5uYXBvbGlzIE1EIDIxNDAzCis8L3BhcmE+CisKKzxwYXJhPgorCUFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gRG9uYWxkIEJlY2tlcidzIHR1bGlwLmMKKwlpcyBhdmFpbGFibGUgYXQgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay90dWxpcC5odG1sIj5odHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL3R1bGlwLmh0bWw8L3VsaW5rPgorPC9wYXJhPgorCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZHJ2ci1jb21wYXQiPgorICAgIDx0aXRsZT5Ecml2ZXIgQ29tcGF0aWJpbGl0eTwvdGl0bGU+CisKKzxwYXJhPgorVGhpcyBkZXZpY2UgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB0aGUgREVDY2hpcCAiVHVsaXAiLCBEaWdpdGFsJ3MKK3NpbmdsZS1jaGlwIGV0aGVybmV0IGNvbnRyb2xsZXJzIGZvciBQQ0kgKG5vdyBvd25lZCBieSBJbnRlbCkuCitTdXBwb3J0ZWQgbWVtYmVycyBvZiB0aGUgZmFtaWx5CithcmUgdGhlIDIxMDQwLCAyMTA0MSwgMjExNDAsIDIxMTQwQSwgMjExNDIsIGFuZCAyMTE0My4gIFNpbWlsYXIgd29yay1hbGlrZQorY2hpcHMgZnJvbSBMaXRlLU9uLCBNYWNyb25pY3MsIEFTSVgsIENvbXBleCBhbmQgb3RoZXIgbGlzdGVkIGJlbG93IGFyZSBhbHNvCitzdXBwb3J0ZWQuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlc2UgY2hpcHMgYXJlIHVzZWQgb24gYXQgbGVhc3QgMTQwIHVuaXF1ZSBQQ0kgYm9hcmQgZGVzaWducy4gIFRoZSBncmVhdAorbnVtYmVyIG9mIGNoaXBzIGFuZCBib2FyZCBkZXNpZ25zIHN1cHBvcnRlZCBpcyB0aGUgcmVhc29uIGZvciB0aGUKK2RyaXZlciBzaXplIGFuZCBjb21wbGV4aXR5LiAgQWxtb3N0IG9mIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgaXMgaW4gdGhlCitib2FyZCBjb25maWd1cmF0aW9uIGFuZCBtZWRpYSBzZWxlY3Rpb24gY29kZS4gIFRoZXJlIGlzIHZlcnkgbGl0dGxlCitpbmNyZWFzaW5nIGluIHRoZSBvcGVyYXRpb25hbCBjcml0aWNhbCBwYXRoIGxlbmd0aC4KKzwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJib2FyZC1zZXR0aW5ncyI+CisgICAgPHRpdGxlPkJvYXJkLXNwZWNpZmljIFNldHRpbmdzPC90aXRsZT4KKworPHBhcmE+CitQQ0kgYnVzIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgYnkgdGhlIHN5c3RlbSBhdCBib290IHRpbWUsIHNvIG5vIGp1bXBlcnMKK25lZWQgdG8gYmUgc2V0IG9uIHRoZSBib2FyZC4gIFRoZSBzeXN0ZW0gQklPUyBwcmVmZXJhYmx5IHNob3VsZCBhc3NpZ24gdGhlCitQQ0kgSU5UQSBzaWduYWwgdG8gYW4gb3RoZXJ3aXNlIHVudXNlZCBzeXN0ZW0gSVJRIGxpbmUuCis8L3BhcmE+CisKKzxwYXJhPgorU29tZSBib2FyZHMgaGF2ZSBFRVBST01zIHRhYmxlcyB3aXRoIGRlZmF1bHQgbWVkaWEgZW50cnkuICBUaGUgZmFjdG9yeSBkZWZhdWx0CitpcyB1c3VhbGx5ICJhdXRvc2VsZWN0Ii4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgb3ZlcnJpZGRlbiB3aGVuIHVzaW5nCit0cmFuc2NlaXZlciBjb25uZWN0aW9ucyB3aXRob3V0IGxpbmsgYmVhdCBlLmcuIDEwYmFzZTIgb3IgQVVJLCBvciAocmFyZWx5ISkKK2ZvciBmb3JjaW5nIGZ1bGwtZHVwbGV4IHdoZW4gdXNlZCB3aXRoIG9sZCBsaW5rIHBhcnRuZXJzIHRoYXQgZG8gbm90IGRvCithdXRvbmVnb3RpYXRpb24uCis8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZHJpdmVyLW9wZXJhdGlvbiI+CisgICAgPHRpdGxlPkRyaXZlciBPcGVyYXRpb248L3RpdGxlPgorCis8c2VjdDE+PHRpdGxlPlJpbmcgYnVmZmVyczwvdGl0bGU+CisKKzxwYXJhPgorVGhlIFR1bGlwIGNhbiB1c2UgZWl0aGVyIHJpbmcgYnVmZmVycyBvciBsaXN0cyBvZiBUeCBhbmQgUnggZGVzY3JpcHRvcnMuCitUaGlzIGRyaXZlciB1c2VzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHJpbmdzIG9mIFJ4IGFuZCBUeCBkZXNjcmlwdG9ycywgc2V0IGF0Citjb21waWxlIHRpbWUgYnkgUlgvVFhfUklOR19TSVpFLiAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgYWxsb2NhdGVzIHNrYnVmZnMKK2ZvciB0aGUgUnggcmluZyBidWZmZXJzIGF0IG9wZW4oKSB0aW1lIGFuZCBwYXNzZXMgdGhlIHNrYi0+ZGF0YSBmaWVsZCB0byB0aGUKK1R1bGlwIGFzIHJlY2VpdmUgZGF0YSBidWZmZXJzLiAgV2hlbiBhbiBpbmNvbWluZyBmcmFtZSBpcyBsZXNzIHRoYW4KK1JYX0NPUFlCUkVBSyBieXRlcyBsb25nLCBhIGZyZXNoIHNrYnVmZiBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBmcmFtZSBpcworY29waWVkIHRvIHRoZSBuZXcgc2tidWZmLiAgV2hlbiB0aGUgaW5jb21pbmcgZnJhbWUgaXMgbGFyZ2VyLCB0aGUgc2tidWZmIGlzCitwYXNzZWQgZGlyZWN0bHkgdXAgdGhlIHByb3RvY29sIHN0YWNrIGFuZCByZXBsYWNlZCBieSBhIG5ld2x5IGFsbG9jYXRlZAorc2tidWZmLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBSWF9DT1BZQlJFQUsgdmFsdWUgaXMgY2hvc2VuIHRvIHRyYWRlLW9mZiB0aGUgbWVtb3J5IHdhc3RlZCBieQordXNpbmcgYSBmdWxsLXNpemVkIHNrYnVmZiBmb3Igc21hbGwgZnJhbWVzIHZzLiB0aGUgY29weWluZyBjb3N0cyBvZiBsYXJnZXIKK2ZyYW1lcy4gIEZvciBzbWFsbCBmcmFtZXMgdGhlIGNvcHlpbmcgY29zdCBpcyBuZWdsaWdpYmxlIChlc3AuIGNvbnNpZGVyaW5nCit0aGF0IHdlIGFyZSBwcmUtbG9hZGluZyB0aGUgY2FjaGUgd2l0aCBpbW1lZGlhdGVseSB1c2VmdWwgaGVhZGVyCitpbmZvcm1hdGlvbikuICBGb3IgbGFyZ2UgZnJhbWVzIHRoZSBjb3B5aW5nIGNvc3QgaXMgbm9uLXRyaXZpYWwsIGFuZCB0aGUKK2xhcmdlciBjb3B5IG1pZ2h0IGZsdXNoIHRoZSBjYWNoZSBvZiB1c2VmdWwgZGF0YS4gIEEgc3VidGxlIGFzcGVjdCBvZiB0aGlzCitjaG9pY2UgaXMgdGhhdCB0aGUgVHVsaXAgb25seSByZWNlaXZlcyBpbnRvIGxvbmd3b3JkIGFsaWduZWQgYnVmZmVycywgdGh1cwordGhlIElQIGhlYWRlciBhdCBvZmZzZXQgMTQgaXNuJ3QgbG9uZ3dvcmQgYWxpZ25lZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgorQ29waWVkIGZyYW1lcyBhcmUgcHV0IGludG8gdGhlIG5ldyBza2J1ZmYgYXQgYW4gb2Zmc2V0IG9mICIrMiIsIHRodXMgY29weWluZworaGFzIHRoZSBiZW5lZmljaWFsIGVmZmVjdCBvZiBhbGlnbmluZyB0aGUgSVAgaGVhZGVyIGFuZCBwcmVsb2FkaW5nIHRoZQorY2FjaGUuCis8L3BhcmE+CisKKzwvc2VjdDE+CisKKzxzZWN0MT48dGl0bGU+U3luY2hyb25pemF0aW9uPC90aXRsZT4KKzxwYXJhPgorVGhlIGRyaXZlciBydW5zIGFzIHR3byBpbmRlcGVuZGVudCwgc2luZ2xlLXRocmVhZGVkIGZsb3dzIG9mIGNvbnRyb2wuICBPbmUKK2lzIHRoZSBzZW5kLXBhY2tldCByb3V0aW5lLCB3aGljaCBlbmZvcmNlcyBzaW5nbGUtdGhyZWFkZWQgdXNlIGJ5IHRoZQorZGV2LT50YnVzeSBmbGFnLiAgVGhlIG90aGVyIHRocmVhZCBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdoaWNoIGlzIHNpbmdsZQordGhyZWFkZWQgYnkgdGhlIGhhcmR3YXJlIGFuZCBvdGhlciBzb2Z0d2FyZS4KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgc2VuZCBwYWNrZXQgdGhyZWFkIGhhcyBwYXJ0aWFsIGNvbnRyb2wgb3ZlciB0aGUgVHggcmluZyBhbmQgJ2Rldi0+dGJ1c3knCitmbGFnLiAgSXQgc2V0cyB0aGUgdGJ1c3kgZmxhZyB3aGVuZXZlciBpdCdzIHF1ZXVpbmcgYSBUeCBwYWNrZXQuIElmIHRoZSBuZXh0CitxdWV1ZSBzbG90IGlzIGVtcHR5LCBpdCBjbGVhcnMgdGhlIHRidXN5IGZsYWcgd2hlbiBmaW5pc2hlZCBvdGhlcndpc2UgaXQgc2V0cwordGhlICd0cC0+dHhfZnVsbCcgZmxhZy4KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgaW50ZXJydXB0IGhhbmRsZXIgaGFzIGV4Y2x1c2l2ZSBjb250cm9sIG92ZXIgdGhlIFJ4IHJpbmcgYW5kIHJlY29yZHMgc3RhdHMKK2Zyb20gdGhlIFR4IHJpbmcuICAoVGhlIFR4LWRvbmUgaW50ZXJydXB0IGNhbid0IGJlIHNlbGVjdGl2ZWx5IHR1cm5lZCBvZmYsIHNvCit3ZSBjYW4ndCBhdm9pZCB0aGUgaW50ZXJydXB0IG92ZXJoZWFkIGJ5IGhhdmluZyB0aGUgVHggcm91dGluZSByZWFwIHRoZSBUeAorc3RhdHMuKQkgQWZ0ZXIgcmVhcGluZyB0aGUgc3RhdHMsIGl0IG1hcmtzIHRoZSBxdWV1ZSBlbnRyeSBhcyBlbXB0eSBieSBzZXR0aW5nCit0aGUgJ2Jhc2UnIHRvIHplcm8uCSBJZmYgdGhlICd0cC0+dHhfZnVsbCcgZmxhZyBpcyBzZXQsIGl0IGNsZWFycyBib3RoIHRoZQordHhfZnVsbCBhbmQgdGJ1c3kgZmxhZ3MuCis8L3BhcmE+CisKKzwvc2VjdDE+CisKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJlcnJhdGEiPgorICAgIDx0aXRsZT5FcnJhdGE8L3RpdGxlPgorCis8cGFyYT4KK1RoZSBvbGQgREVDIGRhdGFib29rcyB3ZXJlIGxpZ2h0IG9uIGRldGFpbHMuCitUaGUgMjEwNDAgZGF0YWJvb2sgY2xhaW1zIHRoYXQgQ1NSMTMsIENTUjE0LCBhbmQgQ1NSMTUgc2hvdWxkIGVhY2ggYmUgdGhlIGxhc3QKK3JlZ2lzdGVyIG9mIHRoZSBzZXQgQ1NSMTItMTUgd3JpdHRlbi4gIEhtbW0sIG5vdyBob3cgaXMgdGhhdCBwb3NzaWJsZT8KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgREVDIFNST00gZm9ybWF0IGlzIHZlcnkgYmFkbHkgZGVzaWduZWQgbm90IHByZWNpc2VseSBkZWZpbmVkLCBsZWFkaW5nIHRvCitwYXJ0IG9mIHRoZSBtZWRpYSBzZWxlY3Rpb24ganVua2hlYXAgYmVsb3cuICBTb21lIGJvYXJkcyBkbyBub3QgaGF2ZSBFRVBST00KK21lZGlhIHRhYmxlcyBhbmQgbmVlZCB0byBiZSBwYXRjaGVkIHVwLiAgV29yc2UsIG90aGVyIGJvYXJkcyB1c2UgdGhlIERFQworZGVzaWduIGtpdCBtZWRpYSB0YWJsZSB3aGVuIGl0IGlzbid0IGNvcnJlY3QgZm9yIHRoZWlyIGJvYXJkLgorPC9wYXJhPgorCis8cGFyYT4KK1dlIGNhbm5vdCB1c2UgTUlJIGludGVycnVwdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBkZWZpbmVkIEdQSU8gcGluIHRvIGF0dGFjaAordGhlbS4gIFRoZSBNSUkgdHJhbnNjZWl2ZXIgc3RhdHVzIGlzIHBvbGxlZCB1c2luZyBhbiBrZXJuZWwgdGltZXIuCis8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iY2hhbmdlbG9nIj4KKyAgICA8dGl0bGU+RHJpdmVyIENoYW5nZSBIaXN0b3J5PC90aXRsZT4KKworICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuMTQgKEZlYnJ1YXJ5IDIwLCAyMDAxKTwvdGl0bGU+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+Rml4IFBOSUMgcHJvYmxlbXMgKE1hbmZyZWQgU3ByYXVsKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgbmV3IFBDSSBpZCBmb3IgQWNjdG9uIGNvbWV0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlN1cHBvcnQgRGF2aWNvbSB0dWxpcHM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+Rml4IG9vcHMgaW4gZWVwcm9tIHBhcnNpbmc8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+RW5hYmxlIHdvcmthcm91bmRzIGZvciBlYXJseSBQQ0kgY2hpcHNldHM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+SUE2NCwgaHBwYSBjc3IwIHN1cHBvcnQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydCBtZWRpYSB0eXBlcyA1LCA2PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkludGVycHJldCBhIGJpdCBtb3JlIG9mIHRoZSAyMTE0MiBTUk9NIGV4dGVuZGVkIG1lZGlhIHR5cGUgMzwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgbWlzc2luZyBkZWxheSBpbiBlZXByb20gcmVhZGluZzwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjExIChOb3ZlbWJlciAzLCAyMDAwKTwvdGl0bGU+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+RWxpbWluYXRlIGV4dHJhIGJ1cyBhY2Nlc3NlcyB3aGVuIHNoYXJpbmcgaW50ZXJydXB0cyAocHJ1bXBmKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5CYXJyaWVyIGZvbGxvd2luZyBvd25lcnNoaXAgZGVzY3JpcHRvciBiaXQgZmxpcCAocHJ1bXBmKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5FbmRpYW5uZXNzIGZpeGVzIGZvciA+MTQgYWRkcmVzc2VzIGluIHNldHVwIGZyYW1lcyAocHJ1bXBmKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXBvcnQgbGluayBiZWF0IHRvIGtlcm5lbC91c2Vyc3BhY2UgdmlhIG5ldGlmX2NhcnJpZXJfKi4gKGt1em5ldCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+QmV0dGVyIHNwaW5sb2NraW5nIGluIHNldF9yeF9tb2RlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5GaXggSS9PIHJlc291cmNlIHJlcXVlc3QgZmFpbHVyZSBlcnJvciBtZXNzYWdlcyAoRGF2ZU0gY2F0Y2gpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkhhbmRsZSBETUEgYWxsb2NhdGlvbiBmYWlsdXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjEwIChTZXB0ZW1iZXIgNiwgMjAwMCk8L3RpdGxlPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPlNpbXBsZSBpbnRlcnJ1cHQgbWl0aWdhdGlvbiAodmlhIGphbWFsKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5Nb3JlIFBDSSBpZHM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS45IChBdWd1c3QgMTEsIDIwMDApPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5Nb3JlIFBDSSBpZHM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS44IChKdWx5IDEzLCAyMDAwKTwvdGl0bGU+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+Q29ycmVjdCBzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbiBmb3IgZHVtbXkgZnJhbWUgaW5kZXg8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlIG91dGRhdGVkIHJlZmVyZW5jZXMgdG8gc3RydWN0IGVuZXRfc3RhdGlzdGljczwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjcgKEp1bmUgMTcsIDIwMDApPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5UaW1lciBjbGVhbnVwcyAoQW5kcmV3IE1vcnRvbik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+QWxwaGEgY29tcGlsZSBmaXggKHNvbWVib2R5Pyk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS42IChNYXkgMzEsIDIwMDApPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXZlcnQgMjExNDMtcmVsYXRlZCBzdXBwb3J0IGZsYWcgcGF0Y2g8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIEhQUEEvbWVkaWEtdGFibGUgZGVidWdnaW5nIHByaW50azwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjUgKE1heSAzMCwgMjAwMCk8L3RpdGxlPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPkhQUEEgc3VwcG9ydCAod2lsbHlAcHVmZmluZ3JvdXApPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkNTUjYgYml0cyBhbmQgdHVsaXAuaCBjbGVhbnVwIChDaHJpcyBTbWl0aCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+SW1wcm92ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYSBiaXQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGRlbGF5IGFmdGVyIENTUjEzIHdyaXRlIGluIHQyMTE0Ml9zdGFydF9ud2F5PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlbW92ZSB1bnVzZWQgRVRIRVJfU1RBVFMgY29kZTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5Db252ZXJ0ICdleHRlcm4gaW5saW5lJyB0byAnc3RhdGljIGlubGluZScgaW4gdHVsaXAuaCAoQ2hyaXMgU21pdGgpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlVwZGF0ZSBEUzIxMTQzIHN1cHBvcnQgZmxhZ3MgaW4gdHVsaXBfY2hpcF9pbmZvW108L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIHNwaW5fbG9ja19pcnEsIG5vdCBfaXJxc2F2ZS9yZXN0b3JlLCBpbiB0dWxpcF9zdGFydF94bWl0KCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGxvY2tpbmcgdG8gc2V0X3J4X21vZGUoKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5GaXggcmFjZSB3aXRoIGNoaXAgc2V0dGluZyBEZXNjT3duZWQgYml0IChIYWwgTXVycmF5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXF1ZXN0IDEwMCUgb2YgUElPIGFuZCBNTUlPIHJlc291cmNlIHNwYWNlIGFzc2lnbmVkIHRvIGNhcmQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlIGVycm9yIG1lc3NhZ2UgZnJvbSBwY2lfZW5hYmxlX2RldmljZSBmYWlsdXJlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNC4zIChBcHJpbCAxNCwgMjAwMCk8L3RpdGxlPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPm1vZF90aW1lciBmaXggKEhhbCBNdXJyYXkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlBOSUMyIHJlc3VzY2l0YXRpb24gKENocmlzIFNtaXRoKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjQuMiAoTWFyY2ggMjEsIDIwMDApPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5GaXggMjEwNDEgQ1NSNywgQ1NSMTMvMTQvMTUgaGFuZGxpbmc8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+TWVyZ2Ugc29tZSBQQ0kgaWRzIGZyb20gdHVsaXAgMC45MXg8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+TWVyZ2Ugc29tZSBIQVNfeHh4IGZsYWdzIGFuZCBmbGFnIHNldHRpbmdzIGZyb20gdHVsaXAgMC45MXg8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+YXNtL2lvLmggZml4IChzdWJtaXR0ZWQgYnkgbWFueSkgYW5kIGNsZWFudXA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+cy9IQVNfTldBWTE0My9IQVNfTldBWS88L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xlYW51cCAyMTA0MSBtb2RlIHJlcG9ydGluZzwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5TbWFsbCBjb2RlIGNsZWFudXBzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNC4xIChNYXJjaCAxOCwgMjAwMCk8L3RpdGxlPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPkZpbmlzaCBQQ0kgRE1BIGNvbnZlcnNpb24gKGRhdmVtKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5EbyBub3QgbmV0aWZfc3RhcnRfcXVldWUoKSBhdCBlbmQgb2YgdHVsaXBfdHhfdGltZW91dCgpIChrdXpuZXQpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlBDSSBETUEgZml4IChrdXpuZXQpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPmVlcHJvbS5jIGNvZGUgY2xlYW51cDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgWGlyY29tIFR1bGlwIGNydWQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2VmMGJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsCkBAIC0wLDAgKzEsOTc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9IkxpbnV4LVVTQi1BUEkiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlRoZSBMaW51eC1VU0IgSG9zdCBTaWRlIEFQSTwvdGl0bGU+CisgIAorICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKzxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgPHRpdGxlPkludHJvZHVjdGlvbiB0byBVU0Igb24gTGludXg8L3RpdGxlPgorCisgICAgPHBhcmE+QSBVbml2ZXJzYWwgU2VyaWFsIEJ1cyAoVVNCKSBpcyB1c2VkIHRvIGNvbm5lY3QgYSBob3N0LAorICAgIHN1Y2ggYXMgYSBQQyBvciB3b3Jrc3RhdGlvbiwgdG8gYSBudW1iZXIgb2YgcGVyaXBoZXJhbAorICAgIGRldmljZXMuICBVU0IgdXNlcyBhIHRyZWUgc3RydWN0dXJlLCB3aXRoIHRoZSBob3N0IGF0IHRoZQorICAgIHJvb3QgKHRoZSBzeXN0ZW0ncyBtYXN0ZXIpLCBodWJzIGFzIGludGVyaW9yIG5vZGVzLCBhbmQKKyAgICBwZXJpcGhlcmFsIGRldmljZXMgYXMgbGVhdmVzIChhbmQgc2xhdmVzKS4KKyAgICBNb2Rlcm4gUENzIHN1cHBvcnQgc2V2ZXJhbCBzdWNoIHRyZWVzIG9mIFVTQiBkZXZpY2VzLCB1c3VhbGx5CisgICAgb25lIFVTQiAyLjAgdHJlZSAoNDgwIE1iaXQvc2VjIGVhY2gpIHdpdGgKKyAgICBhIGZldyBVU0IgMS4xIHRyZWVzICgxMiBNYml0L3NlYyBlYWNoKSB0aGF0IGFyZSB1c2VkIHdoZW4geW91CisgICAgY29ubmVjdCBhIFVTQiAxLjEgZGV2aWNlIGRpcmVjdGx5IHRvIHRoZSBtYWNoaW5lJ3MgInJvb3QgaHViIi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT5UaGF0IG1hc3Rlci9zbGF2ZSBhc3ltbWV0cnkgd2FzIGRlc2lnbmVkIGluIHBhcnQgZm9yCisgICAgZWFzZSBvZiB1c2UuICBJdCBpcyBub3QgcGh5c2ljYWxseSBwb3NzaWJsZSB0byBhc3NlbWJsZQorICAgIChsZWdhbCkgVVNCIGNhYmxlcyBpbmNvcnJlY3RseTogIGFsbCB1cHN0cmVhbSAidG8tdGhlLWhvc3QiCisgICAgY29ubmVjdG9ycyBhcmUgdGhlIHJlY3Rhbmd1bGFyIHR5cGUsIG1hdGNoaW5nIHRoZSBzb2NrZXRzIG9uCisgICAgcm9vdCBodWJzLCBhbmQgdGhlIGRvd25zdHJlYW0gdHlwZSBhcmUgdGhlIHNxdWFyaXNoIHR5cGUKKyAgICAob3IgdGhleSBhcmUgYnVpbHQgaW4gdG8gdGhlIHBlcmlwaGVyYWwpLgorICAgIFNvZnR3YXJlIGRvZXNuJ3QgbmVlZCB0byBkZWFsIHdpdGggZGlzdHJpYnV0ZWQgYXV0b2NvbmZpZ3VyYXRpb24KKyAgICBzaW5jZSB0aGUgcHJlLWRlc2lnbmF0ZWQgbWFzdGVyIG5vZGUgbWFuYWdlcyBhbGwgdGhhdC4KKyAgICBBdCB0aGUgZWxlY3RyaWNhbCBsZXZlbCwgYnVzIHByb3RvY29sIG92ZXJoZWFkIGlzIHJlZHVjZWQgYnkKKyAgICBlbGltaW5hdGluZyBhcmJpdHJhdGlvbiBhbmQgbW92aW5nIHNjaGVkdWxpbmcgaW50byBob3N0IHNvZnR3YXJlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPlVTQiAxLjAgd2FzIGFubm91bmNlZCBpbiBKYW51YXJ5IDE5OTYsIGFuZCB3YXMgcmV2aXNlZAorICAgIGFzIFVTQiAxLjEgKHdpdGggaW1wcm92ZW1lbnRzIGluIGh1YiBzcGVjaWZpY2F0aW9uIGFuZAorICAgIHN1cHBvcnQgZm9yIGludGVycnVwdC1vdXQgdHJhbnNmZXJzKSBpbiBTZXB0ZW1iZXIgMTk5OC4KKyAgICBVU0IgMi4wIHdhcyByZWxlYXNlZCBpbiBBcHJpbCAyMDAwLCBpbmNsdWRpbmcgaGlnaCBzcGVlZAorICAgIHRyYW5zZmVycyBhbmQgdHJhbnNhY3Rpb24gdHJhbnNsYXRpbmcgaHVicyAodXNlZCBmb3IgVVNCIDEuMQorICAgIGFuZCAxLjAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+VVNCIHN1cHBvcnQgd2FzIGFkZGVkIHRvIExpbnV4IGVhcmx5IGluIHRoZSAyLjIga2VybmVsIHNlcmllcworICAgIHNob3J0bHkgYmVmb3JlIHRoZSAyLjMgZGV2ZWxvcG1lbnQgZm9ya2VkIG9mZi4gIFVwZGF0ZXMKKyAgICBmcm9tIDIuMyB3ZXJlIHJlZ3VsYXJseSBmb2xkZWQgYmFjayBpbnRvIDIuMiByZWxlYXNlcywgYnJpbmdpbmcKKyAgICBuZXcgZmVhdHVyZXMgc3VjaCBhcyA8ZmlsZW5hbWU+L3NiaW4vaG90cGx1ZzwvZmlsZW5hbWU+IHN1cHBvcnQsCisgICAgbW9yZSBkcml2ZXJzLCBhbmQgbW9yZSByb2J1c3RuZXNzLgorICAgIFRoZSAyLjUga2VybmVsIHNlcmllcyBjb250aW51ZWQgc3VjaCBpbXByb3ZlbWVudHMsIGFuZCBhbHNvCisgICAgd29ya2VkIG9uIFVTQiAyLjAgc3VwcG9ydCwKKyAgICBoaWdoZXIgcGVyZm9ybWFuY2UsCisgICAgYmV0dGVyIGNvbnNpc3RlbmN5IGJldHdlZW4gaG9zdCBjb250cm9sbGVyIGRyaXZlcnMsCisgICAgQVBJIHNpbXBsaWZpY2F0aW9uICh0byBtYWtlIGJ1Z3MgbGVzcyBsaWtlbHkpLAorICAgIGFuZCBwcm92aWRpbmcgaW50ZXJuYWwgImtlcm5lbGRvYyIgZG9jdW1lbnRhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT5MaW51eCBjYW4gcnVuIGluc2lkZSBVU0IgZGV2aWNlcyBhcyB3ZWxsIGFzIG9uCisgICAgdGhlIGhvc3RzIHRoYXQgY29udHJvbCB0aGUgZGV2aWNlcy4KKyAgICBCZWNhdXNlIHRoZSBMaW51eCAyLnggVVNCIHN1cHBvcnQgZXZvbHZlZCB0byBzdXBwb3J0IG1hc3MgbWFya2V0CisgICAgcGxhdGZvcm1zIHN1Y2ggYXMgQXBwbGUgTWFjaW50b3NoIG9yIFBDLWNvbXBhdGlibGUgc3lzdGVtcywKKyAgICBpdCBkaWRuJ3QgYWRkcmVzcyBkZXNpZ24gY29uY2VybnMgZm9yIHRob3NlIHR5cGVzIG9mIFVTQiBzeXN0ZW1zLgorICAgIFNvIGl0IGNhbid0IGJlIHVzZWQgaW5zaWRlIG1hc3MtbWFya2V0IFBEQXMsIG9yIG90aGVyIHBlcmlwaGVyYWxzLgorICAgIFVTQiBkZXZpY2UgZHJpdmVycyBydW5uaW5nIGluc2lkZSB0aG9zZSBMaW51eCBwZXJpcGhlcmFscworICAgIGRvbid0IGRvIHRoZSBzYW1lIHRoaW5ncyBhcyB0aGUgb25lcyBydW5uaW5nIGluc2lkZSBob3N0cywKKyAgICBhbmQgc28gdGhleSd2ZSBiZWVuIGdpdmVuIGEgZGlmZmVyZW50IG5hbWU6CisgICAgdGhleSdyZSBjYWxsZWQgPGVtcGhhc2lzPmdhZGdldCBkcml2ZXJzPC9lbXBoYXNpcz4uCisgICAgVGhpcyBkb2N1bWVudCBkb2VzIG5vdCBwcmVzZW50IGdhZGdldCBkcml2ZXJzLgorICAgIDwvcGFyYT4KKworICAgIDwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9Imhvc3QiPgorICAgIDx0aXRsZT5VU0IgSG9zdC1TaWRlIEFQSSBNb2RlbDwvdGl0bGU+CisKKyAgICA8cGFyYT5XaXRoaW4gdGhlIGtlcm5lbCwKKyAgICBob3N0LXNpZGUgZHJpdmVycyBmb3IgVVNCIGRldmljZXMgdGFsayB0byB0aGUgInVzYmNvcmUiIEFQSXMuCisgICAgVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBwdWJsaWMgInVzYmNvcmUiIEFQSXMsIHRhcmdldHRlZCBhdCB0d28gZGlmZmVyZW50CisgICAgbGF5ZXJzIG9mIFVTQiBkcml2ZXIuICBUaG9zZSBhcmUKKyAgICA8ZW1waGFzaXM+Z2VuZXJhbCBwdXJwb3NlPC9lbXBoYXNpcz4gZHJpdmVycywgZXhwb3NlZCB0aHJvdWdoCisgICAgZHJpdmVyIGZyYW1ld29ya3Mgc3VjaCBhcyBibG9jaywgY2hhcmFjdGVyLCBvciBuZXR3b3JrIGRldmljZXM7CisgICAgYW5kIGRyaXZlcnMgdGhhdCBhcmUgPGVtcGhhc2lzPnBhcnQgb2YgdGhlIGNvcmU8L2VtcGhhc2lzPiwKKyAgICB3aGljaCBhcmUgaW52b2x2ZWQgaW4gbWFuYWdpbmcgYSBVU0IgYnVzLgorICAgIFN1Y2ggY29yZSBkcml2ZXJzIGluY2x1ZGUgdGhlIDxlbXBoYXNpcz5odWI8L2VtcGhhc2lzPiBkcml2ZXIsCisgICAgd2hpY2ggbWFuYWdlcyB0cmVlcyBvZiBVU0IgZGV2aWNlcywgYW5kIHNldmVyYWwgZGlmZmVyZW50IGtpbmRzCisgICAgb2YgPGVtcGhhc2lzPmhvc3QgY29udHJvbGxlciBkcml2ZXIgKEhDRCk8L2VtcGhhc2lzPiwKKyAgICB3aGljaCBjb250cm9sIGluZGl2aWR1YWwgYnVzc2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBkZXZpY2UgbW9kZWwgc2VlbiBieSBVU0IgZHJpdmVycyBpcyByZWxhdGl2ZWx5IGNvbXBsZXguCisgICAgPC9wYXJhPgorICAgICAKKyAgICA8aXRlbWl6ZWRsaXN0PgorCisJPGxpc3RpdGVtPjxwYXJhPlVTQiBzdXBwb3J0cyBmb3VyIGtpbmRzIG9mIGRhdGEgdHJhbnNmZXIKKwkoY29udHJvbCwgYnVsaywgaW50ZXJydXB0LCBhbmQgaXNvY2hyb25vdXMpLiAgVHdvIHRyYW5zZmVyCisJdHlwZXMgdXNlIGJhbmR3aWR0aCBhcyBpdCdzIGF2YWlsYWJsZSAoY29udHJvbCBhbmQgYnVsayksCisJd2hpbGUgdGhlIG90aGVyIHR3byB0eXBlcyBvZiB0cmFuc2ZlciAoaW50ZXJydXB0IGFuZCBpc29jaHJvbm91cykKKwlhcmUgc2NoZWR1bGVkIHRvIHByb3ZpZGUgZ3VhcmFudGVlZCBiYW5kd2lkdGguCisJPC9wYXJhPjwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+PHBhcmE+VGhlIGRldmljZSBkZXNjcmlwdGlvbiBtb2RlbCBpbmNsdWRlcyBvbmUgb3IgbW9yZQorCSJjb25maWd1cmF0aW9ucyIgcGVyIGRldmljZSwgb25seSBvbmUgb2Ygd2hpY2ggaXMgYWN0aXZlIGF0IGEgdGltZS4KKwlEZXZpY2VzIHRoYXQgYXJlIGNhcGFibGUgb2YgaGlnaCBzcGVlZCBvcGVyYXRpb24gbXVzdCBhbHNvIHN1cHBvcnQKKwlmdWxsIHNwZWVkIGNvbmZpZ3VyYXRpb25zLCBhbG9uZyB3aXRoIGEgd2F5IHRvIGFzayBhYm91dCB0aGUKKwkib3RoZXIgc3BlZWQiIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgdXNlZC4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT48cGFyYT5Db25maWd1cmF0aW9ucyBoYXZlIG9uZSBvciBtb3JlICJpbnRlcmZhY2UiLCBlYWNoCisJb2Ygd2hpY2ggbWF5IGhhdmUgImFsdGVybmF0ZSBzZXR0aW5ncyIuICBJbnRlcmZhY2VzIG1heSBiZQorCXN0YW5kYXJkaXplZCBieSBVU0IgIkNsYXNzIiBzcGVjaWZpY2F0aW9ucywgb3IgbWF5IGJlIHNwZWNpZmljIHRvCisJYSB2ZW5kb3Igb3IgZGV2aWNlLjwvcGFyYT4KKworCTxwYXJhPlVTQiBkZXZpY2UgZHJpdmVycyBhY3R1YWxseSBiaW5kIHRvIGludGVyZmFjZXMsIG5vdCBkZXZpY2VzLgorCVRoaW5rIG9mIHRoZW0gYXMgImludGVyZmFjZSBkcml2ZXJzIiwgdGhvdWdoIHlvdQorCW1heSBub3Qgc2VlIG1hbnkgZGV2aWNlcyB3aGVyZSB0aGUgZGlzdGluY3Rpb24gaXMgaW1wb3J0YW50LgorCTxlbXBoYXNpcz5Nb3N0IFVTQiBkZXZpY2VzIGFyZSBzaW1wbGUsIHdpdGggb25seSBvbmUgY29uZmlndXJhdGlvbiwKKwlvbmUgaW50ZXJmYWNlLCBhbmQgb25lIGFsdGVybmF0ZSBzZXR0aW5nLjwvZW1waGFzaXM+CisJPC9wYXJhPjwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+PHBhcmE+SW50ZXJmYWNlcyBoYXZlIG9uZSBvciBtb3JlICJlbmRwb2ludHMiLCBlYWNoIG9mCisJd2hpY2ggc3VwcG9ydHMgb25lIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBkYXRhIHRyYW5zZmVyIHN1Y2ggYXMKKwkiYnVsayBvdXQiIG9yICJpbnRlcnJ1cHQgaW4iLiAgVGhlIGVudGlyZSBjb25maWd1cmF0aW9uIG1heSBoYXZlCisJdXAgdG8gc2l4dGVlbiBlbmRwb2ludHMgaW4gZWFjaCBkaXJlY3Rpb24sIGFsbG9jYXRlZCBhcyBuZWVkZWQKKwlhbW9uZyBhbGwgdGhlIGludGVyZmFjZXMuCisJPC9wYXJhPjwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+PHBhcmE+RGF0YSB0cmFuc2ZlciBvbiBVU0IgaXMgcGFja2V0aXplZDsgZWFjaCBlbmRwb2ludAorCWhhcyBhIG1heGltdW0gcGFja2V0IHNpemUuCisJRHJpdmVycyBtdXN0IG9mdGVuIGJlIGF3YXJlIG9mIGNvbnZlbnRpb25zIHN1Y2ggYXMgZmxhZ2dpbmcgdGhlIGVuZAorCW9mIGJ1bGsgdHJhbnNmZXJzIHVzaW5nICJzaG9ydCIgKGluY2x1ZGluZyB6ZXJvIGxlbmd0aCkgcGFja2V0cy4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT48cGFyYT5UaGUgTGludXggVVNCIEFQSSBzdXBwb3J0cyBzeW5jaHJvbm91cyBjYWxscyBmb3IKKwljb250cm9sIGFuZCBidWxrIG1lc3NhZ2luZy4KKwlJdCBhbHNvIHN1cHBvcnRzIGFzeW5jaG5vdXMgY2FsbHMgZm9yIGFsbCBraW5kcyBvZiBkYXRhIHRyYW5zZmVyLAorCXVzaW5nIHJlcXVlc3Qgc3RydWN0dXJlcyBjYWxsZWQgIlVSQnMiIChVU0IgUmVxdWVzdCBCbG9ja3MpLgorCTwvcGFyYT48L2xpc3RpdGVtPgorCisgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICA8cGFyYT5BY2NvcmRpbmdseSwgdGhlIFVTQiBDb3JlIEFQSSBleHBvc2VkIHRvIGRldmljZSBkcml2ZXJzCisgICAgY292ZXJzIHF1aXRlIGEgbG90IG9mIHRlcnJpdG9yeS4gIFlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnN1bHQKKyAgICB0aGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uLCBhdmFpbGFibGUgb25saW5lIGZyb20gd3d3LnVzYi5vcmcgYXQKKyAgICBubyBjb3N0LCBhcyB3ZWxsIGFzIGNsYXNzIG9yIGRldmljZSBzcGVjaWZpY2F0aW9ucy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgb25seSBob3N0LXNpZGUgZHJpdmVycyB0aGF0IGFjdHVhbGx5IHRvdWNoIGhhcmR3YXJlCisgICAgKHJlYWRpbmcvd3JpdGluZyByZWdpc3RlcnMsIGhhbmRsaW5nIElSUXMsIGFuZCBzbyBvbikgYXJlIHRoZSBIQ0RzLgorICAgIEluIHRoZW9yeSwgYWxsIEhDRHMgcHJvdmlkZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGhlIHNhbWUKKyAgICBBUEkuICBJbiBwcmFjdGljZSwgdGhhdCdzIGJlY29taW5nIG1vcmUgdHJ1ZSBvbiB0aGUgMi41IGtlcm5lbHMsCisgICAgYnV0IHRoZXJlIGFyZSBzdGlsbCBkaWZmZXJlbmNlcyB0aGF0IGNyb3AgdXAgZXNwZWNpYWxseSB3aXRoCisgICAgZmF1bHQgaGFuZGxpbmcuICBEaWZmZXJlbnQgY29udHJvbGxlcnMgZG9uJ3QgbmVjZXNzYXJpbHkgcmVwb3J0CisgICAgdGhlIHNhbWUgYXNwZWN0cyBvZiBmYWlsdXJlcywgYW5kIHJlY292ZXJ5IGZyb20gZmF1bHRzIChpbmNsdWRpbmcKKyAgICBzb2Z0d2FyZS1pbmR1Y2VkIG9uZXMgbGlrZSB1bmxpbmtpbmcgYW4gVVJCKSBpc24ndCB5ZXQgZnVsbHkKKyAgICBjb25zaXN0ZW50LgorICAgIERldmljZSBkcml2ZXIgYXV0aG9ycyBzaG91bGQgbWFrZSBhIHBvaW50IG9mIGRvaW5nIGRpc2Nvbm5lY3QKKyAgICB0ZXN0aW5nICh3aGlsZSB0aGUgZGV2aWNlIGlzIGFjdGl2ZSkgd2l0aCBlYWNoIGRpZmZlcmVudCBob3N0CisgICAgY29udHJvbGxlciBkcml2ZXIsIHRvIG1ha2Ugc3VyZSBkcml2ZXJzIGRvbid0IGhhdmUgYnVncyBvZgorICAgIHRoZWlyIG93biBhcyB3ZWxsIGFzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZW4ndCByZWx5aW5nIG9uIHNvbWUKKyAgICBIQ0Qtc3BlY2lmaWMgYmVoYXZpb3IuCisgICAgKFlvdSB3aWxsIG5lZWQgZXh0ZXJuYWwgVVNCIDEuMSBhbmQvb3IKKyAgICBVU0IgMi4wIGh1YnMgdG8gcGVyZm9ybSBhbGwgdGhvc2UgdGVzdHMuKQorICAgIDwvcGFyYT4KKworICAgIDwvY2hhcHRlcj4KKworPGNoYXB0ZXI+PHRpdGxlPlVTQi1TdGFuZGFyZCBUeXBlczwvdGl0bGU+CisKKyAgICA8cGFyYT5JbiA8ZmlsZW5hbWU+Jmx0O2xpbnV4L3VzYl9jaDkuaCZndDs8L2ZpbGVuYW1lPiB5b3Ugd2lsbCBmaW5kCisgICAgdGhlIFVTQiBkYXRhIHR5cGVzIGRlZmluZWQgaW4gY2hhcHRlciA5IG9mIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAgICBUaGVzZSBkYXRhIHR5cGVzIGFyZSB1c2VkIHRocm91Z2hvdXQgVVNCLCBhbmQgaW4gQVBJcyBpbmNsdWRpbmcKKyAgICB0aGlzIGhvc3Qgc2lkZSBBUEksIGdhZGdldCBBUElzLCBhbmQgdXNiZnMuCisgICAgPC9wYXJhPgorCishSWluY2x1ZGUvbGludXgvdXNiX2NoOS5oCisKKyAgICA8L2NoYXB0ZXI+CisKKzxjaGFwdGVyPjx0aXRsZT5Ib3N0LVNpZGUgRGF0YSBUeXBlcyBhbmQgTWFjcm9zPC90aXRsZT4KKworICAgIDxwYXJhPlRoZSBob3N0IHNpZGUgQVBJIGV4cG9zZXMgc2V2ZXJhbCBsYXllcnMgdG8gZHJpdmVycywgc29tZSBvZgorICAgIHdoaWNoIGFyZSBtb3JlIG5lY2Vzc2FyeSB0aGFuIG90aGVycy4KKyAgICBUaGVzZSBzdXBwb3J0IGxpZmVjeWNsZSBtb2RlbHMgZm9yIGhvc3Qgc2lkZSBkcml2ZXJzCisgICAgYW5kIGRldmljZXMsIGFuZCBzdXBwb3J0IHBhc3NpbmcgYnVmZmVycyB0aHJvdWdoIHVzYmNvcmUgdG8KKyAgICBzb21lIEhDRCB0aGF0IHBlcmZvcm1zIHRoZSBJL08gZm9yIHRoZSBkZXZpY2UgZHJpdmVyLgorICAgIDwvcGFyYT4KKworCishSWluY2x1ZGUvbGludXgvdXNiLmgKKworICAgIDwvY2hhcHRlcj4KKworICAgIDxjaGFwdGVyPjx0aXRsZT5VU0IgQ29yZSBBUElzPC90aXRsZT4KKworICAgIDxwYXJhPlRoZXJlIGFyZSB0d28gYmFzaWMgSS9PIG1vZGVscyBpbiB0aGUgVVNCIEFQSS4KKyAgICBUaGUgbW9zdCBlbGVtZW50YWwgb25lIGlzIGFzeW5jaHJvbm91czogIGRyaXZlcnMgc3VibWl0IHJlcXVlc3RzCisgICAgaW4gdGhlIGZvcm0gb2YgYW4gVVJCLCBhbmQgdGhlIFVSQidzIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAgICBoYW5kbGUgdGhlIG5leHQgc3RlcC4KKyAgICBBbGwgVVNCIHRyYW5zZmVyIHR5cGVzIHN1cHBvcnQgdGhhdCBtb2RlbCwgYWx0aG91Z2ggdGhlcmUKKyAgICBhcmUgc3BlY2lhbCBjYXNlcyBmb3IgY29udHJvbCBVUkJzICh3aGljaCBhbHdheXMgaGF2ZSBzZXR1cAorICAgIGFuZCBzdGF0dXMgc3RhZ2VzLCBidXQgbWF5IG5vdCBoYXZlIGEgZGF0YSBzdGFnZSkgYW5kCisgICAgaXNvY2hyb25vdXMgVVJCcyAod2hpY2ggYWxsb3cgbGFyZ2UgcGFja2V0cyBhbmQgaW5jbHVkZQorICAgIHBlci1wYWNrZXQgZmF1bHQgcmVwb3J0cykuCisgICAgQnVpbHQgb24gdG9wIG9mIHRoYXQgaXMgc3luY2hyb25vdXMgQVBJIHN1cHBvcnQsIHdoZXJlIGEKKyAgICBkcml2ZXIgY2FsbHMgYSByb3V0aW5lIHRoYXQgYWxsb2NhdGVzIG9uZSBvciBtb3JlIFVSQnMsCisgICAgc3VibWl0cyB0aGVtLCBhbmQgd2FpdHMgdW50aWwgdGhleSBjb21wbGV0ZS4KKyAgICBUaGVyZSBhcmUgc3luY2hyb25vdXMgd3JhcHBlcnMgZm9yIHNpbmdsZS1idWZmZXIgY29udHJvbAorICAgIGFuZCBidWxrIHRyYW5zZmVycyAod2hpY2ggYXJlIGF3a3dhcmQgdG8gdXNlIGluIHNvbWUKKyAgICBkcml2ZXIgZGlzY29ubmVjdCBzY2VuYXJpb3MpLCBhbmQgZm9yIHNjYXR0ZXJsaXN0IGJhc2VkCisgICAgc3RyZWFtaW5nIGkvbyAoYnVsayBvciBpbnRlcnJ1cHQpLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPlVTQiBkcml2ZXJzIG5lZWQgdG8gcHJvdmlkZSBidWZmZXJzIHRoYXQgY2FuIGJlCisgICAgdXNlZCBmb3IgRE1BLCBhbHRob3VnaCB0aGV5IGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgdG8KKyAgICBwcm92aWRlIHRoZSBETUEgbWFwcGluZyB0aGVtc2VsdmVzLgorICAgIFRoZXJlIGFyZSBBUElzIHRvIHVzZSB1c2VkIHdoZW4gYWxsb2NhdGluZyBETUEgYnVmZmVycywKKyAgICB3aGljaCBjYW4gcHJldmVudCB1c2Ugb2YgYm91bmNlIGJ1ZmZlcnMgb24gc29tZSBzeXN0ZW1zLgorICAgIEluIHNvbWUgY2FzZXMsIGRyaXZlcnMgbWF5IGJlIGFibGUgdG8gcmVseSBvbiA2NGJpdCBETUEKKyAgICB0byBlbGltaW5hdGUgYW5vdGhlciBraW5kIG9mIGJvdW5jZSBidWZmZXIuCisgICAgPC9wYXJhPgorCishRWRyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKyFFZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKyFFZHJpdmVycy91c2IvY29yZS9maWxlLmMKKyFFZHJpdmVycy91c2IvY29yZS91c2IuYworIUVkcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXI+PHRpdGxlPkhvc3QgQ29udHJvbGxlciBBUElzPC90aXRsZT4KKworICAgIDxwYXJhPlRoZXNlIEFQSXMgYXJlIG9ubHkgZm9yIHVzZSBieSBob3N0IGNvbnRyb2xsZXIgZHJpdmVycywKKyAgICBtb3N0IG9mIHdoaWNoIGltcGxlbWVudCBzdGFuZGFyZCByZWdpc3RlciBpbnRlcmZhY2VzIHN1Y2ggYXMKKyAgICBFSENJLCBPSENJLCBvciBVSENJLgorICAgIFVIQ0kgd2FzIG9uZSBvZiB0aGUgZmlyc3QgaW50ZXJmYWNlcywgZGVzaWduZWQgYnkgSW50ZWwgYW5kCisgICAgYWxzbyB1c2VkIGJ5IFZJQTsgaXQgZG9lc24ndCBkbyBtdWNoIGluIGhhcmR3YXJlLgorICAgIE9IQ0kgd2FzIGRlc2lnbmVkIGxhdGVyLCB0byBoYXZlIHRoZSBoYXJkd2FyZSBkbyBtb3JlIHdvcmsKKyAgICAoYmlnZ2VyIHRyYW5zZmVycywgdHJhY2tpbmcgcHJvdG9jb2wgc3RhdGUsIGFuZCBzbyBvbikuCisgICAgRUhDSSB3YXMgZGVzaWduZWQgd2l0aCBVU0IgMi4wOyBpdHMgZGVzaWduIGhhcyBmZWF0dXJlcyB0aGF0CisgICAgcmVzZW1ibGUgT0hDSSAoaGFyZHdhcmUgZG9lcyBtdWNoIG1vcmUgd29yaykgYXMgd2VsbCBhcworICAgIFVIQ0kgKHNvbWUgcGFydHMgb2YgSVNPIHN1cHBvcnQsIFREIGxpc3QgcHJvY2Vzc2luZykuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+VGhlcmUgYXJlIGhvc3QgY29udHJvbGxlcnMgb3RoZXIgdGhhbiB0aGUgImJpZyB0aHJlZSIsCisgICAgYWx0aG91Z2ggbW9zdCBQQ0kgYmFzZWQgY29udHJvbGxlcnMgKGFuZCBhIGZldyBub24tUENJIGJhc2VkCisgICAgb25lcykgdXNlIG9uZSBvZiB0aG9zZSBpbnRlcmZhY2VzLgorICAgIE5vdCBhbGwgaG9zdCBjb250cm9sbGVycyB1c2UgRE1BOyBzb21lIHVzZSBQSU8sIGFuZCB0aGVyZQorICAgIGlzIGFsc28gYSBzaW11bGF0b3IuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIHNhbWUgYmFzaWMgQVBJcyBhcmUgYXZhaWxhYmxlIHRvIGRyaXZlcnMgZm9yIGFsbAorICAgIHRob3NlIGNvbnRyb2xsZXJzLiAgCisgICAgRm9yIGhpc3RvcmljYWwgcmVhc29ucyB0aGV5IGFyZSBpbiB0d28gbGF5ZXJzOgorICAgIDxzdHJ1Y3RuYW1lPnN0cnVjdCB1c2JfYnVzPC9zdHJ1Y3RuYW1lPiBpcyBhIHJhdGhlciB0aGluCisgICAgbGF5ZXIgdGhhdCBiZWNhbWUgYXZhaWxhYmxlIGluIHRoZSAyLjIga2VybmVscywgd2hpbGUKKyAgICA8c3RydWN0bmFtZT5zdHJ1Y3QgdXNiX2hjZDwvc3RydWN0bmFtZT4gaXMgYSBtb3JlIGZlYXR1cmVmdWwKKyAgICBsYXllciAoYXZhaWxhYmxlIGluIGxhdGVyIDIuNCBrZXJuZWxzIGFuZCBpbiAyLjUpIHRoYXQKKyAgICBsZXRzIEhDRHMgc2hhcmUgY29tbW9uIGNvZGUsIHRvIHNocmluayBkcml2ZXIgc2l6ZQorICAgIGFuZCBzaWduaWZpY2FudGx5IHJlZHVjZSBoY2Qtc3BlY2lmaWMgYmVoYXZpb3JzLgorICAgIDwvcGFyYT4KKworIUVkcml2ZXJzL3VzYi9jb3JlL2hjZC5jCishRWRyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCishRWRyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKKyAgICA8L2NoYXB0ZXI+CisKKyAgICA8Y2hhcHRlcj4KKwk8dGl0bGU+VGhlIFVTQiBGaWxlc3lzdGVtICh1c2Jmcyk8L3RpdGxlPgorCisJPHBhcmE+VGhpcyBjaGFwdGVyIHByZXNlbnRzIHRoZSBMaW51eCA8ZW1waGFzaXM+dXNiZnM8L2VtcGhhc2lzPi4KKwlZb3UgbWF5IHByZWZlciB0byBhdm9pZCB3cml0aW5nIG5ldyBrZXJuZWwgY29kZSBmb3IgeW91cgorCVVTQiBkcml2ZXI7IHRoYXQncyB0aGUgcHJvYmxlbSB0aGF0IHVzYmZzIHNldCBvdXQgdG8gc29sdmUuCisJVXNlciBtb2RlIGRldmljZSBkcml2ZXJzIGFyZSB1c3VhbGx5IHBhY2thZ2VkIGFzIGFwcGxpY2F0aW9ucworCW9yIGxpYnJhcmllcywgYW5kIG1heSB1c2UgdXNiZnMgdGhyb3VnaCBzb21lIHByb2dyYW1taW5nIGxpYnJhcnkKKwl0aGF0IHdyYXBzIGl0LiAgU3VjaCBsaWJyYXJpZXMgaW5jbHVkZQorCTx1bGluayB1cmw9Imh0dHA6Ly9saWJ1c2Iuc291cmNlZm9yZ2UubmV0Ij5saWJ1c2I8L3VsaW5rPgorCWZvciBDL0MrKywgYW5kCisJPHVsaW5rIHVybD0iaHR0cDovL2pVU0Iuc291cmNlZm9yZ2UubmV0Ij5qVVNCPC91bGluaz4gZm9yIEphdmEuCisJPC9wYXJhPgorCisJPG5vdGU+PHRpdGxlPlVuZmluaXNoZWQ8L3RpdGxlPgorCSAgICA8cGFyYT5UaGlzIHBhcnRpY3VsYXIgZG9jdW1lbnRhdGlvbiBpcyBpbmNvbXBsZXRlLAorCSAgICBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byB0aGUgYXN5bmNocm9ub3VzIG1vZGUuCisJICAgIEFzIG9mIGtlcm5lbCAyLjUuNjYgdGhlIGNvZGUgYW5kIHRoaXMgKG5ldykgZG9jdW1lbnRhdGlvbgorCSAgICBuZWVkIHRvIGJlIGNyb3NzLXJldmlld2VkLgorCSAgICA8L3BhcmE+CisJICAgIDwvbm90ZT4KKworCTxwYXJhPkNvbmZpZ3VyZSB1c2JmcyBpbnRvIExpbnV4IGtlcm5lbHMgYnkgZW5hYmxpbmcgdGhlCisJPGVtcGhhc2lzPlVTQiBmaWxlc3lzdGVtPC9lbXBoYXNpcz4gb3B0aW9uIChDT05GSUdfVVNCX0RFVklDRUZTKSwKKwlhbmQgeW91IGdldCBiYXNpYyBzdXBwb3J0IGZvciB1c2VyIG1vZGUgVVNCIGRldmljZSBkcml2ZXJzLgorCVVudGlsIHJlbGF0aXZlbHkgcmVjZW50bHkgaXQgd2FzIG9mdGVuIChjb25mdXNpbmdseSkgY2FsbGVkCisJPGVtcGhhc2lzPnVzYmRldmZzPC9lbXBoYXNpcz4gYWx0aG91Z2ggaXQgd2Fzbid0IHNvbHZpbmcgd2hhdAorCTxlbXBoYXNpcz5kZXZmczwvZW1waGFzaXM+IHdhcy4KKwlFdmVyeSBVU0IgZGV2aWNlIHdpbGwgYXBwZWFyIGluIHVzYmZzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3IKKwlub3QgaXQgaGFzIGEga2VybmVsIGRyaXZlcjsgYnV0IG9ubHkgZGV2aWNlcyB3aXRoIGtlcm5lbCBkcml2ZXJzCisJc2hvdyB1cCBpbiBkZXZmcy4KKwk8L3BhcmE+CisKKwk8c2VjdDE+CisJICAgIDx0aXRsZT5XaGF0IGZpbGVzIGFyZSBpbiAidXNiZnMiPzwvdGl0bGU+CisKKwkgICAgPHBhcmE+Q29udmVudGlvbmFsbHkgbW91bnRlZCBhdAorCSAgICA8ZmlsZW5hbWU+L3Byb2MvYnVzL3VzYjwvZmlsZW5hbWU+LCB1c2JmcyAKKwkgICAgZmVhdHVyZXMgaW5jbHVkZToKKwkgICAgPGl0ZW1pemVkbGlzdD4KKwkJPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4vcHJvYy9idXMvdXNiL2RldmljZXM8L2ZpbGVuYW1lPgorCQkgICAgLi4uIGEgdGV4dCBmaWxlCisJCSAgICBzaG93aW5nIGVhY2ggb2YgdGhlIFVTQiBkZXZpY2VzIG9uIGtub3duIHRvIHRoZSBrZXJuZWwsCisJCSAgICBhbmQgdGhlaXIgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycy4KKwkJICAgIFlvdSBjYW4gYWxzbyBwb2xsKCkgdGhpcyB0byBsZWFybiBhYm91dCBuZXcgZGV2aWNlcy4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPi9wcm9jL2J1cy91c2IvQkJCL0RERDwvZmlsZW5hbWU+CisJCSAgICAuLi4gbWFnaWMgZmlsZXMKKwkJICAgIGV4cG9zaW5nIHRoZSBlYWNoIGRldmljZSdzIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMsIGFuZAorCQkgICAgc3VwcG9ydGluZyBhIHNlcmllcyBvZiBpb2N0bHMgZm9yIG1ha2luZyBkZXZpY2UgcmVxdWVzdHMsCisJCSAgICBpbmNsdWRpbmcgSS9PIHRvIGRldmljZXMuICAoUHVyZWx5IGZvciBhY2Nlc3MgYnkgcHJvZ3JhbXMuKQorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisJICAgIDwvaXRlbWl6ZWRsaXN0PgorCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+IEVhY2ggYnVzIGlzIGdpdmVuIGEgbnVtYmVyIChCQkIpIGJhc2VkIG9uIHdoZW4gaXQgd2FzCisJICAgIGVudW1lcmF0ZWQ7IHdpdGhpbiBlYWNoIGJ1cywgZWFjaCBkZXZpY2UgaXMgZ2l2ZW4gYSBzaW1pbGFyCisJICAgIG51bWJlciAoREREKS4KKwkgICAgVGhvc2UgQkJCL0RERCBwYXRocyBhcmUgbm90ICJzdGFibGUiIGlkZW50aWZpZXJzOworCSAgICBleHBlY3QgdGhlbSB0byBjaGFuZ2UgZXZlbiBpZiB5b3UgYWx3YXlzIGxlYXZlIHRoZSBkZXZpY2VzCisJICAgIHBsdWdnZWQgaW4gdG8gdGhlIHNhbWUgaHViIHBvcnQuCisJICAgIDxlbXBoYXNpcz5Eb24ndCBldmVuIHRoaW5rIG9mIHNhdmluZyB0aGVzZSBpbiBhcHBsaWNhdGlvbgorCSAgICBjb25maWd1cmF0aW9uIGZpbGVzLjwvZW1waGFzaXM+CisJICAgIFN0YWJsZSBpZGVudGlmaWVycyBhcmUgYXZhaWxhYmxlLCBmb3IgdXNlciBtb2RlIGFwcGxpY2F0aW9ucworCSAgICB0aGF0IHdhbnQgdG8gdXNlIHRoZW0uICBISUQgYW5kIG5ldHdvcmtpbmcgZGV2aWNlcyBleHBvc2UKKwkgICAgdGhlc2Ugc3RhYmxlIElEcywgc28gdGhhdCBmb3IgZXhhbXBsZSB5b3UgY2FuIGJlIHN1cmUgdGhhdAorCSAgICB5b3UgdG9sZCB0aGUgcmlnaHQgVVBTIHRvIHBvd2VyIGRvd24gaXRzIHNlY29uZCBzZXJ2ZXIuCisJICAgICJ1c2JmcyIgZG9lc24ndCAoeWV0KSBleHBvc2UgdGhvc2UgSURzLgorCSAgICA8L3BhcmE+CisKKwk8L3NlY3QxPgorCisJPHNlY3QxPgorCSAgICA8dGl0bGU+TW91bnRpbmcgYW5kIEFjY2VzcyBDb250cm9sPC90aXRsZT4KKworCSAgICA8cGFyYT5UaGVyZSBhcmUgYSBudW1iZXIgb2YgbW91bnQgb3B0aW9ucyBmb3IgdXNiZnMsIHdoaWNoIHdpbGwKKwkgICAgYmUgb2YgbW9zdCBpbnRlcmVzdCB0byB5b3UgaWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKwkgICAgYWNjZXNzIGNvbnRyb2wgcG9saWN5LgorCSAgICBUaGF0IHBvbGljeSBpcyB0aGF0IG9ubHkgcm9vdCBtYXkgcmVhZCBvciB3cml0ZSBkZXZpY2UgZmlsZXMKKwkgICAgKDxmaWxlbmFtZT4vcHJvYy9idXMvQkJCL0RERDwvZmlsZW5hbWU+KSBhbHRob3VnaCBhbnlvbmUgbWF5IHJlYWQKKwkgICAgdGhlIDxmaWxlbmFtZT5kZXZpY2VzPC9maWxlbmFtZT4KKwkgICAgb3IgPGZpbGVuYW1lPmRyaXZlcnM8L2ZpbGVuYW1lPiBmaWxlcy4KKwkgICAgSS9PIHJlcXVlc3RzIHRvIHRoZSBkZXZpY2UgYWxzbyBuZWVkIHRoZSBDQVBfU1lTX1JBV0lPIGNhcGFiaWxpdHksCisJICAgIDwvcGFyYT4KKworCSAgICA8cGFyYT5UaGUgc2lnbmlmaWNhbmNlIG9mIHRoYXQgaXMgdGhhdCBieSBkZWZhdWx0LCBhbGwgdXNlciBtb2RlCisJICAgIGRldmljZSBkcml2ZXJzIG5lZWQgc3VwZXItdXNlciBwcml2aWxlZ2VzLgorCSAgICBZb3UgY2FuIGNoYW5nZSBtb2RlcyBvciBvd25lcnNoaXAgaW4gYSBkcml2ZXIgc2V0dXAKKwkgICAgd2hlbiB0aGUgZGV2aWNlIGhvdHBsdWdzLCBvciBtYXllIGp1c3Qgc3RhcnQgdGhlCisJICAgIGRyaXZlciByaWdodCB0aGVuLCBhcyBhIHByaXZpbGVnZWQgc2VydmVyIChvciBzb21lIGFjdGl2aXR5CisJICAgIHdpdGhpbiBvbmUpLgorCSAgICBUaGF0J3MgdGhlIG1vc3Qgc2VjdXJlIGFwcHJvYWNoIGZvciBtdWx0aS11c2VyIHN5c3RlbXMsCisJICAgIGJ1dCBmb3Igc2luZ2xlIHVzZXIgc3lzdGVtcyAoInRydXN0ZWQiIGJ5IHRoYXQgdXNlcikKKwkgICAgaXQncyBtb3JlIGNvbnZlbmllbnQganVzdCB0byBncmFudCBldmVyeW9uZSBhbGwgYWNjZXNzCisJICAgICh1c2luZyB0aGUgPGVtcGhhc2lzPmRldm1vZGU9MDY2NjwvZW1waGFzaXM+IG9wdGlvbikKKwkgICAgc28gdGhlIGRyaXZlciBjYW4gc3RhcnQgd2hlbmV2ZXIgaXQncyBuZWVkZWQuCisJICAgIDwvcGFyYT4KKworCSAgICA8cGFyYT5UaGUgbW91bnQgb3B0aW9ucyBmb3IgdXNiZnMsIHVzYWJsZSBpbiAvZXRjL2ZzdGFiIG9yCisJICAgIGluIGNvbW1hbmQgbGluZSBpbnZvY2F0aW9ucyBvZiA8ZW1waGFzaXM+bW91bnQ8L2VtcGhhc2lzPiwgYXJlOgorCisJICAgIDx2YXJpYWJsZWxpc3Q+CisJCTx2YXJsaXN0ZW50cnk+CisJCSAgICA8dGVybT48ZW1waGFzaXM+YnVzZ2lkPC9lbXBoYXNpcz49Tk5OTk48L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+Q29udHJvbHMgdGhlIEdJRCB1c2VkIGZvciB0aGUKKwkJICAgIC9wcm9jL2J1cy91c2IvQkJCCisJCSAgICBkaXJlY3Rvcmllcy4gIChEZWZhdWx0OiAwKTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPjxlbXBoYXNpcz5idXNtb2RlPC9lbXBoYXNpcz49TU1NPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHRoZSBmaWxlIG1vZGUgdXNlZCBmb3IgdGhlCisJCSAgICAvcHJvYy9idXMvdXNiL0JCQgorCQkgICAgZGlyZWN0b3JpZXMuICAoRGVmYXVsdDogMDU1NSkKKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPjxlbXBoYXNpcz5idXN1aWQ8L2VtcGhhc2lzPj1OTk5OTjwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Db250cm9scyB0aGUgVUlEIHVzZWQgZm9yIHRoZQorCQkgICAgL3Byb2MvYnVzL3VzYi9CQkIKKwkJICAgIGRpcmVjdG9yaWVzLiAgKERlZmF1bHQ6IDApPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT48ZW1waGFzaXM+ZGV2Z2lkPC9lbXBoYXNpcz49Tk5OTk48L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+Q29udHJvbHMgdGhlIEdJRCB1c2VkIGZvciB0aGUKKwkJICAgIC9wcm9jL2J1cy91c2IvQkJCL0RERAorCQkgICAgZmlsZXMuICAoRGVmYXVsdDogMCk8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKwkJPHZhcmxpc3RlbnRyeT48dGVybT48ZW1waGFzaXM+ZGV2bW9kZTwvZW1waGFzaXM+PU1NTTwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Db250cm9scyB0aGUgZmlsZSBtb2RlIHVzZWQgZm9yIHRoZQorCQkgICAgL3Byb2MvYnVzL3VzYi9CQkIvRERECisJCSAgICBmaWxlcy4gIChEZWZhdWx0OiAwNjQ0KTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPjxlbXBoYXNpcz5kZXZ1aWQ8L2VtcGhhc2lzPj1OTk5OTjwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Db250cm9scyB0aGUgVUlEIHVzZWQgZm9yIHRoZQorCQkgICAgL3Byb2MvYnVzL3VzYi9CQkIvRERECisJCSAgICBmaWxlcy4gIChEZWZhdWx0OiAwKTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+PGVtcGhhc2lzPmxpc3RnaWQ8L2VtcGhhc2lzPj1OTk5OTjwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Db250cm9scyB0aGUgR0lEIHVzZWQgZm9yIHRoZQorCQkgICAgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIGFuZCBkcml2ZXJzIGZpbGVzLgorCQkgICAgKERlZmF1bHQ6IDApPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+PGVtcGhhc2lzPmxpc3Rtb2RlPC9lbXBoYXNpcz49TU1NPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHRoZSBmaWxlIG1vZGUgdXNlZCBmb3IgdGhlCisJCSAgICAvcHJvYy9idXMvdXNiL2RldmljZXMgYW5kIGRyaXZlcnMgZmlsZXMuCisJCSAgICAoRGVmYXVsdDogMDQ0NCk8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKwkJPHZhcmxpc3RlbnRyeT48dGVybT48ZW1waGFzaXM+bGlzdHVpZDwvZW1waGFzaXM+PU5OTk5OPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHRoZSBVSUQgdXNlZCBmb3IgdGhlCisJCSAgICAvcHJvYy9idXMvdXNiL2RldmljZXMgYW5kIGRyaXZlcnMgZmlsZXMuCisJCSAgICAoRGVmYXVsdDogMCk8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKwkgICAgPC92YXJpYWJsZWxpc3Q+CisKKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPk5vdGUgdGhhdCBtYW55IExpbnV4IGRpc3RyaWJ1dGlvbnMgaGFyZC13aXJlIHRoZSBtb3VudCBvcHRpb25zCisJICAgIGZvciB1c2JmcyBpbiB0aGVpciBpbml0IHNjcmlwdHMsIHN1Y2ggYXMKKwkgICAgPGZpbGVuYW1lPi9ldGMvcmMuZC9yYy5zeXNpbml0PC9maWxlbmFtZT4sCisJICAgIHJhdGhlciB0aGFuIG1ha2luZyBpdCBlYXN5IHRvIHNldCB0aGlzIHBlci1zeXN0ZW0KKwkgICAgcG9saWN5IGluIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4uCisJICAgIDwvcGFyYT4KKworCTwvc2VjdDE+CisKKwk8c2VjdDE+CisJICAgIDx0aXRsZT4vcHJvYy9idXMvdXNiL2RldmljZXM8L3RpdGxlPgorCisJICAgIDxwYXJhPlRoaXMgZmlsZSBpcyBoYW5keSBmb3Igc3RhdHVzIHZpZXdpbmcgdG9vbHMgaW4gdXNlcgorCSAgICBtb2RlLCB3aGljaCBjYW4gc2NhbiB0aGUgdGV4dCBmb3JtYXQgYW5kIGlnbm9yZSBtb3N0IG9mIGl0LgorCSAgICBNb3JlIGRldGFpbGVkIGRldmljZSBzdGF0dXMgKGluY2x1ZGluZyBjbGFzcyBhbmQgdmVuZG9yCisJICAgIHN0YXR1cykgaXMgYXZhaWxhYmxlIGZyb20gZGV2aWNlLXNwZWNpZmljIGZpbGVzLgorCSAgICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgZm9ybWF0IG9mIHRoaXMgZmlsZSwKKwkgICAgc2VlIHRoZQorCSAgICA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi91c2IvcHJvY191c2JfaW5mby50eHQ8L2ZpbGVuYW1lPgorCSAgICBmaWxlIGluIHlvdXIgTGludXgga2VybmVsIHNvdXJjZXMuCisJICAgIDwvcGFyYT4KKworCSAgICA8cGFyYT5PdGhlcndpc2UgdGhlIG1haW4gdXNlIGZvciB0aGlzIGZpbGUgZnJvbSBwcm9ncmFtcworCSAgICBpcyB0byBwb2xsKCkgaXQgdG8gZ2V0IG5vdGlmaWNhdGlvbnMgb2YgdXNiIGRldmljZXMKKwkgICAgYXMgdGhleSdyZSBwbHVnZ2VkIG9yIHVucGx1Z2dlZC4KKwkgICAgVG8gc2VlIHdoYXQgY2hhbmdlZCwgeW91J2QgbmVlZCB0byByZWFkIHRoZSBmaWxlIGFuZAorCSAgICBjb21wYXJlICJiZWZvcmUiIGFuZCAiYWZ0ZXIiIGNvbnRlbnRzLCBzY2FuIHRoZSBmaWxlc3lzdGVtLAorCSAgICBvciBzZWUgaXRzIGhvdHBsdWcgZXZlbnQuCisJICAgIDwvcGFyYT4KKworCTwvc2VjdDE+CisKKwk8c2VjdDE+CisJICAgIDx0aXRsZT4vcHJvYy9idXMvdXNiL0JCQi9EREQ8L3RpdGxlPgorCisJICAgIDxwYXJhPlVzZSB0aGVzZSBmaWxlcyBpbiBvbmUgb2YgdGhlc2UgYmFzaWMgd2F5czoKKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPjxlbXBoYXNpcz5UaGV5IGNhbiBiZSByZWFkLDwvZW1waGFzaXM+CisJICAgIHByb2R1Y2luZyBmaXJzdCB0aGUgZGV2aWNlIGRlc2NyaXB0b3IKKwkgICAgKDE4IGJ5dGVzKSBhbmQgdGhlbiB0aGUgZGVzY3JpcHRvcnMgZm9yIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisJICAgIFNlZSB0aGUgVVNCIDIuMCBzcGVjIGZvciBkZXRhaWxzIGFib3V0IHRob3NlIGJpbmFyeSBkYXRhIGZvcm1hdHMuCisJICAgIFlvdSdsbCBuZWVkIHRvIGNvbnZlcnQgbW9zdCBtdWx0aWJ5dGUgdmFsdWVzIGZyb20gbGl0dGxlIGVuZGlhbgorCSAgICBmb3JtYXQgdG8geW91ciBuYXRpdmUgaG9zdCBieXRlIG9yZGVyLCBhbHRob3VnaCBhIGZldyBvZiB0aGUKKwkgICAgZmllbGRzIGluIHRoZSBkZXZpY2UgZGVzY3JpcHRvciAoYm90aCBvZiB0aGUgQkNELWVuY29kZWQgZmllbGRzLAorCSAgICBhbmQgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMpIHdpbGwgYmUgYnl0ZXN3YXBwZWQgZm9yIHlvdS4KKwkgICAgTm90ZSB0aGF0IGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMgaW5jbHVkZSBkZXNjcmlwdG9ycyBmb3IKKwkgICAgaW50ZXJmYWNlcywgYWx0c2V0dGluZ3MsIGVuZHBvaW50cywgYW5kIG1heWJlIGFkZGl0aW9uYWwKKwkgICAgY2xhc3MgZGVzY3JpcHRvcnMuCisJICAgIDwvcGFyYT4KKworCSAgICA8cGFyYT48ZW1waGFzaXM+UGVyZm9ybSBVU0Igb3BlcmF0aW9uczwvZW1waGFzaXM+IHVzaW5nIAorCSAgICA8ZW1waGFzaXM+aW9jdGwoKTwvZW1waGFzaXM+IHJlcXVlc3RzIHRvIG1ha2UgZW5kcG9pbnQgSS9PCisJICAgIHJlcXVlc3RzIChzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5KSBvciBtYW5hZ2UKKwkgICAgdGhlIGRldmljZS4KKwkgICAgVGhlc2UgcmVxdWVzdHMgbmVlZCB0aGUgQ0FQX1NZU19SQVdJTyBjYXBhYmlsaXR5LAorCSAgICBhcyB3ZWxsIGFzIGZpbGVzeXN0ZW0gYWNjZXNzIHBlcm1pc3Npb25zLgorCSAgICBPbmx5IG9uZSBpb2N0bCByZXF1ZXN0IGNhbiBiZSBtYWRlIG9uIG9uZSBvZiB0aGVzZQorCSAgICBkZXZpY2UgZmlsZXMgYXQgYSB0aW1lLgorCSAgICBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGFyZSBzeW5jaHJvbm91c2x5IHJlYWRpbmcgYW4gZW5kcG9pbnQKKwkgICAgZnJvbSBvbmUgdGhyZWFkLCB5b3Ugd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byBhIGRpZmZlcmVudAorCSAgICBlbmRwb2ludCBmcm9tIGFub3RoZXIgdGhyZWFkIHVudGlsIHRoZSByZWFkIGNvbXBsZXRlcy4KKwkgICAgVGhpcyB3b3JrcyBmb3IgPGVtcGhhc2lzPmhhbGYgZHVwbGV4PC9lbXBoYXNpcz4gcHJvdG9jb2xzLAorCSAgICBidXQgb3RoZXJ3aXNlIHlvdSdkIHVzZSBhc3luY2hyb25vdXMgaS9vIHJlcXVlc3RzLiAKKwkgICAgPC9wYXJhPgorCisJICAgIDwvc2VjdDE+CisKKworCTxzZWN0MT4KKwkgICAgPHRpdGxlPkxpZmUgQ3ljbGUgb2YgVXNlciBNb2RlIERyaXZlcnM8L3RpdGxlPgorCisJICAgIDxwYXJhPlN1Y2ggYSBkcml2ZXIgZmlyc3QgbmVlZHMgdG8gZmluZCBhIGRldmljZSBmaWxlCisJICAgIGZvciBhIGRldmljZSBpdCBrbm93cyBob3cgdG8gaGFuZGxlLgorCSAgICBNYXliZSBpdCB3YXMgdG9sZCBhYm91dCBpdCBiZWNhdXNlIGEKKwkgICAgPGZpbGVuYW1lPi9zYmluL2hvdHBsdWc8L2ZpbGVuYW1lPiBldmVudCBoYW5kbGluZyBhZ2VudAorCSAgICBjaG9zZSB0aGF0IGRyaXZlciB0byBoYW5kbGUgdGhlIG5ldyBkZXZpY2UuCisJICAgIE9yIG1heWJlIGl0J3MgYW4gYXBwbGljYXRpb24gdGhhdCBzY2FucyBhbGwgdGhlCisJICAgIC9wcm9jL2J1cy91c2IgZGV2aWNlIGZpbGVzLCBhbmQgaWdub3JlcyBtb3N0IGRldmljZXMuCisJICAgIEluIGVpdGhlciBjYXNlLCBpdCBzaG91bGQgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGFsbAorCSAgICB0aGUgZGVzY3JpcHRvcnMgZnJvbSB0aGUgZGV2aWNlIGZpbGUsCisJICAgIGFuZCBjaGVjayB0aGVtIGFnYWluc3Qgd2hhdCBpdCBrbm93cyBob3cgdG8gaGFuZGxlLgorCSAgICBJdCBtaWdodCBqdXN0IHJlamVjdCBldmVyeXRoaW5nIGV4Y2VwdCBhIHBhcnRpY3VsYXIKKwkgICAgdmVuZG9yIGFuZCBwcm9kdWN0IElELCBvciBuZWVkIGEgbW9yZSBjb21wbGV4IHBvbGljeS4KKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPk5ldmVyIGFzc3VtZSB0aGVyZSB3aWxsIG9ubHkgYmUgb25lIHN1Y2ggZGV2aWNlCisJICAgIG9uIHRoZSBzeXN0ZW0gYXQgYSB0aW1lIQorCSAgICBJZiB5b3VyIGNvZGUgY2FuJ3QgaGFuZGxlIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGF0CisJICAgIGEgdGltZSwgYXQgbGVhc3QgZGV0ZWN0IHdoZW4gdGhlcmUncyBtb3JlIHRoYW4gb25lLCBhbmQKKwkgICAgaGF2ZSB5b3VyIHVzZXJzIGNob29zZSB3aGljaCBkZXZpY2UgdG8gdXNlLgorCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+T25jZSB5b3VyIHVzZXIgbW9kZSBkcml2ZXIga25vd3Mgd2hhdCBkZXZpY2UgdG8gdXNlLAorCSAgICBpdCBpbnRlcmFjdHMgd2l0aCBpdCBpbiBlaXRoZXIgb2YgdHdvIHN0eWxlcy4KKwkgICAgVGhlIHNpbXBsZSBzdHlsZSBpcyB0byBtYWtlIG9ubHkgY29udHJvbCByZXF1ZXN0czsgc29tZQorCSAgICBkZXZpY2VzIGRvbid0IG5lZWQgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucyB0aGFuIHRob3NlLgorCSAgICAoQW4gZXhhbXBsZSBtaWdodCBiZSBzb2Z0d2FyZSB1c2luZyB2ZW5kb3Itc3BlY2lmaWMgY29udHJvbAorCSAgICByZXF1ZXN0cyBmb3Igc29tZSBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIHRhc2tzLAorCSAgICB3aXRoIGEga2VybmVsIGRyaXZlciBmb3IgdGhlIHJlc3QuKQorCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+TW9yZSBsaWtlbHksIHlvdSBuZWVkIGEgbW9yZSBjb21wbGV4IHN0eWxlIGRyaXZlcjoKKwkgICAgb25lIHVzaW5nIG5vbi1jb250cm9sIGVuZHBvaW50cywgcmVhZGluZyBvciB3cml0aW5nIGRhdGEKKwkgICAgYW5kIGNsYWltaW5nIGV4Y2x1c2l2ZSB1c2Ugb2YgYW4gaW50ZXJmYWNlLgorCSAgICA8ZW1waGFzaXM+QnVsazwvZW1waGFzaXM+IHRyYW5zZmVycyBhcmUgZWFzaWVzdCB0byB1c2UsCisJICAgIGJ1dCBvbmx5IHRoZWlyIHNpYmxpbmcgPGVtcGhhc2lzPmludGVycnVwdDwvZW1waGFzaXM+IHRyYW5zZmVycyAKKwkgICAgd29yayB3aXRoIGxvdyBzcGVlZCBkZXZpY2VzLgorCSAgICBCb3RoIGludGVycnVwdCBhbmQgPGVtcGhhc2lzPmlzb2Nocm9ub3VzPC9lbXBoYXNpcz4gdHJhbnNmZXJzCisJICAgIG9mZmVyIHNlcnZpY2UgZ3VhcmFudGVlcyBiZWNhdXNlIHRoZWlyIGJhbmR3aWR0aCBpcyByZXNlcnZlZC4KKwkgICAgU3VjaCAicGVyaW9kaWMiIHRyYW5zZmVycyBhcmUgYXdrd2FyZCB0byB1c2UgdGhyb3VnaCB1c2JmcywKKwkgICAgdW5sZXNzIHlvdSdyZSB1c2luZyB0aGUgYXN5bmNocm9ub3VzIGNhbGxzLiAgSG93ZXZlciwgaW50ZXJydXB0CisJICAgIHRyYW5zZmVycyBjYW4gYWxzbyBiZSB1c2VkIGluIGEgc3luY2hyb25vdXMgIm9uZSBzaG90IiBzdHlsZS4KKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPllvdXIgdXNlci1tb2RlIGRyaXZlciBzaG91bGQgbmV2ZXIgbmVlZCB0byB3b3JyeQorCSAgICBhYm91dCBjbGVhbmluZyB1cCByZXF1ZXN0IHN0YXRlIHdoZW4gdGhlIGRldmljZSBpcworCSAgICBkaXNjb25uZWN0ZWQsIGFsdGhvdWdoIGl0IHNob3VsZCBjbG9zZSBpdHMgb3BlbiBmaWxlCisJICAgIGRlc2NyaXB0b3JzIGFzIHNvb24gYXMgaXQgc3RhcnRzIHNlZWluZyB0aGUgRU5PREVWCisJICAgIGVycm9ycy4KKwkgICAgPC9wYXJhPgorCisJICAgIDwvc2VjdDE+CisKKwk8c2VjdDE+PHRpdGxlPlRoZSBpb2N0bCgpIFJlcXVlc3RzPC90aXRsZT4KKworCSAgICA8cGFyYT5UbyB1c2UgdGhlc2UgaW9jdGxzLCB5b3UgbmVlZCB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcKKwkgICAgaGVhZGVycyBpbiB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtOgorPHByb2dyYW1saXN0aW5nPiNpbmNsdWRlICZsdDtsaW51eC91c2IuaCZndDsKKyNpbmNsdWRlICZsdDtsaW51eC91c2JkZXZpY2VfZnMuaCZndDsKKyNpbmNsdWRlICZsdDthc20vYnl0ZW9yZGVyLmgmZ3Q7PC9wcm9ncmFtbGlzdGluZz4KKwkgICAgVGhlIHN0YW5kYXJkIFVTQiBkZXZpY2UgbW9kZWwgcmVxdWVzdHMsIGZyb20gIkNoYXB0ZXIgOSIgb2YKKwkgICAgdGhlIFVTQiAyLjAgc3BlY2lmaWNhdGlvbiwgYXJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgZnJvbQorCSAgICB0aGUgPGZpbGVuYW1lPiZsdDtsaW51eC91c2JfY2g5LmgmZ3Q7PC9maWxlbmFtZT4gaGVhZGVyLgorCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+VW5sZXNzIG5vdGVkIG90aGVyd2lzZSwgdGhlIGlvY3RsIHJlcXVlc3RzCisJICAgIGRlc2NyaWJlZCBoZXJlIHdpbGwKKwkgICAgdXBkYXRlIHRoZSBtb2RpZmljYXRpb24gdGltZSBvbiB0aGUgdXNiZnMgZmlsZSB0byB3aGljaAorCSAgICB0aGV5IGFyZSBhcHBsaWVkICh1bmxlc3MgdGhleSBmYWlsKS4KKwkgICAgQSByZXR1cm4gb2YgemVybyBpbmRpY2F0ZXMgc3VjY2Vzczsgb3RoZXJ3aXNlLCBhCisJICAgIHN0YW5kYXJkIFVTQiBlcnJvciBjb2RlIGlzIHJldHVybmVkLiAgKFRoZXNlIGFyZQorCSAgICBkb2N1bWVudGVkIGluCisJICAgIDxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL3VzYi9lcnJvci1jb2Rlcy50eHQ8L2ZpbGVuYW1lPgorCSAgICBpbiB5b3VyIGtlcm5lbCBzb3VyY2VzLikKKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPkVhY2ggb2YgdGhlc2UgZmlsZXMgbXVsdGlwbGV4ZXMgYWNjZXNzIHRvIHNldmVyYWwKKwkgICAgSS9PIHN0cmVhbXMsIG9uZSBwZXIgZW5kcG9pbnQuCisJICAgIEVhY2ggZGV2aWNlIGhhcyBvbmUgY29udHJvbCBlbmRwb2ludCAoZW5kcG9pbnQgemVybykKKwkgICAgd2hpY2ggc3VwcG9ydHMgYSBsaW1pdGVkIFJQQyBzdHlsZSBSUEMgYWNjZXNzLgorCSAgICBEZXZpY2VzIGFyZSBjb25maWd1cmVkCisJICAgIGJ5IGtodWJkIChpbiB0aGUga2VybmVsKSBzZXR0aW5nIGEgZGV2aWNlLXdpZGUKKwkgICAgPGVtcGhhc2lzPmNvbmZpZ3VyYXRpb248L2VtcGhhc2lzPiB0aGF0IGFmZmVjdHMgdGhpbmdzCisJICAgIGxpa2UgcG93ZXIgY29uc3VtcHRpb24gYW5kIGJhc2ljIGZ1bmN0aW9uYWxpdHkuCisJICAgIFRoZSBlbmRwb2ludHMgYXJlIHBhcnQgb2YgVVNCIDxlbXBoYXNpcz5pbnRlcmZhY2VzPC9lbXBoYXNpcz4sCisJICAgIHdoaWNoIG1heSBoYXZlIDxlbXBoYXNpcz5hbHRzZXR0aW5nczwvZW1waGFzaXM+CisJICAgIGFmZmVjdGluZyB0aGluZ3MgbGlrZSB3aGljaCBlbmRwb2ludHMgYXJlIGF2YWlsYWJsZS4KKwkgICAgTWFueSBkZXZpY2VzIG9ubHkgaGF2ZSBhIHNpbmdsZSBjb25maWd1cmF0aW9uIGFuZCBpbnRlcmZhY2UsCisJICAgIHNvIGRyaXZlcnMgZm9yIHRoZW0gd2lsbCBpZ25vcmUgY29uZmlndXJhdGlvbnMgYW5kIGFsdHNldHRpbmdzLgorCSAgICA8L3BhcmE+CisKKworCSAgICA8c2VjdDI+CisJCTx0aXRsZT5NYW5hZ2VtZW50L1N0YXR1cyBSZXF1ZXN0czwvdGl0bGU+CisKKwkJPHBhcmE+QSBudW1iZXIgb2YgdXNiZnMgcmVxdWVzdHMgZG9uJ3QgZGVhbCB2ZXJ5IGRpcmVjdGx5CisJCXdpdGggZGV2aWNlIEkvTy4KKwkJVGhleSBtb3N0bHkgcmVsYXRlIHRvIGRldmljZSBtYW5hZ2VtZW50IGFuZCBzdGF0dXMuCisJCVRoZXNlIGFyZSBhbGwgc3luY2hyb25vdXMgcmVxdWVzdHMuCisJCTwvcGFyYT4KKworCQk8dmFyaWFibGVsaXN0PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfQ0xBSU1JTlRFUkZBQ0U8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+VGhpcyBpcyB1c2VkIHRvIGZvcmNlIHVzYmZzIHRvCisJCSAgICBjbGFpbSBhIHNwZWNpZmljIGludGVyZmFjZSwKKwkJICAgIHdoaWNoIGhhcyBub3QgcHJldmlvdXNseSBiZWVuIGNsYWltZWQgYnkgdXNiZnMgb3IgYW55IG90aGVyCisJCSAgICBrZXJuZWwgZHJpdmVyLgorCQkgICAgVGhlIGlvY3RsIHBhcmFtZXRlciBpcyBhbiBpbnRlZ2VyIGhvbGRpbmcgdGhlIG51bWJlciBvZgorCQkgICAgdGhlIGludGVyZmFjZSAoYkludGVyZmFjZU51bWJlciBmcm9tIGRlc2NyaXB0b3IpLgorCQkgICAgPC9wYXJhPjxwYXJhPgorCQkgICAgTm90ZSB0aGF0IGlmIHlvdXIgZHJpdmVyIGRvZXNuJ3QgY2xhaW0gYW4gaW50ZXJmYWNlCisJCSAgICBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBvbmUgb2YgaXRzIGVuZHBvaW50cywgYW5kIG5vCisJCSAgICBvdGhlciBkcml2ZXIgaGFzIGJvdW5kIHRvIGl0LCB0aGVuIHRoZSBpbnRlcmZhY2UgaXMKKwkJICAgIGF1dG9tYXRpY2FsbHkgY2xhaW1lZCBieSB1c2Jmcy4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIFRoaXMgY2xhaW0gd2lsbCBiZSByZWxlYXNlZCBieSBhIFJFTEVBU0VJTlRFUkZBQ0UgaW9jdGwsCisJCSAgICBvciBieSBjbG9zaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuCisJCSAgICBGaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG5vdCB1cGRhdGVkIGJ5IHRoaXMgcmVxdWVzdC4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfQ09OTkVDVElORk88L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+U2F5cyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgbG93c3BlZWQuCisJCSAgICBUaGUgaW9jdGwgcGFyYW1ldGVyIHBvaW50cyB0byBhIHN0cnVjdHVyZSBsaWtlIHRoaXM6Cis8cHJvZ3JhbWxpc3Rpbmc+c3RydWN0IHVzYmRldmZzX2Nvbm5lY3RpbmZvIHsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgZGV2bnVtOworICAgICAgICB1bnNpZ25lZCBjaGFyICBzbG93OworfTsgPC9wcm9ncmFtbGlzdGluZz4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjxwYXJhPgorCQkgICAgPGVtcGhhc2lzPllvdSBjYW4ndCB0ZWxsIHdoZXRoZXIgYSAibm90IHNsb3ciCisJCSAgICBkZXZpY2UgaXMgY29ubmVjdGVkIGF0IGhpZ2ggc3BlZWQgKDQ4MCBNQml0L3NlYykKKwkJICAgIG9yIGp1c3QgZnVsbCBzcGVlZCAoMTIgTUJpdC9zZWMpLjwvZW1waGFzaXM+CisJCSAgICBZb3Ugc2hvdWxkIGtub3cgdGhlIGRldm51bSB2YWx1ZSBhbHJlYWR5LAorCQkgICAgaXQncyB0aGUgREREIHZhbHVlIG9mIHRoZSBkZXZpY2UgZmlsZSBuYW1lLgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19HRVREUklWRVI8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUga2VybmVsIGRyaXZlcgorCQkgICAgYm91bmQgdG8gYSBnaXZlbiBpbnRlcmZhY2UgKGEgc3RyaW5nKS4gIFBhcmFtZXRlcgorCQkgICAgaXMgYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlLCB3aGljaCBpcyBtb2RpZmllZDoKKzxwcm9ncmFtbGlzdGluZz5zdHJ1Y3QgdXNiZGV2ZnNfZ2V0ZHJpdmVyIHsKKyAgICAgICAgdW5zaWduZWQgaW50ICBpbnRlcmZhY2U7CisgICAgICAgIGNoYXIgICAgICAgICAgZHJpdmVyW1VTQkRFVkZTX01BWERSSVZFUk5BTUUgKyAxXTsKK307PC9wcm9ncmFtbGlzdGluZz4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19JT0NUTDwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5QYXNzZXMgYSByZXF1ZXN0IGZyb20gdXNlcnNwYWNlIHRocm91Z2gKKwkJICAgIHRvIGEga2VybmVsIGRyaXZlciB0aGF0IGhhcyBhbiBpb2N0bCBlbnRyeSBpbiB0aGUKKwkJICAgIDxlbXBoYXNpcz5zdHJ1Y3QgdXNiX2RyaXZlcjwvZW1waGFzaXM+IGl0IHJlZ2lzdGVyZWQuCis8cHJvZ3JhbWxpc3Rpbmc+c3RydWN0IHVzYmRldmZzX2lvY3RsIHsKKyAgICAgICAgaW50ICAgICBpZm5vOworICAgICAgICBpbnQgICAgIGlvY3RsX2NvZGU7CisgICAgICAgIHZvaWQgICAgKmRhdGE7Cit9OworCisvKiB1c2VyIG1vZGUgY2FsbCBsb29rcyBsaWtlIHRoaXMuCisgKiAncmVxdWVzdCcgYmVjb21lcyB0aGUgZHJpdmVyLT5pb2N0bCgpICdjb2RlJyBwYXJhbWV0ZXIuCisgKiB0aGUgc2l6ZSBvZiAncGFyYW0nIGlzIGVuY29kZWQgaW4gJ3JlcXVlc3QnLCBhbmQgdGhhdCBkYXRhCisgKiBpcyBjb3BpZWQgdG8gb3IgZnJvbSB0aGUgZHJpdmVyLT5pb2N0bCgpICdidWYnIHBhcmFtZXRlci4KKyAqLworc3RhdGljIGludAordXNiZGV2X2lvY3RsIChpbnQgZmQsIGludCBpZm5vLCB1bnNpZ25lZCByZXF1ZXN0LCB2b2lkICpwYXJhbSkKK3sKKyAgICAgICAgc3RydWN0IHVzYmRldmZzX2lvY3RsCXdyYXBwZXI7CisKKyAgICAgICAgd3JhcHBlci5pZm5vID0gaWZubzsKKyAgICAgICAgd3JhcHBlci5pb2N0bF9jb2RlID0gcmVxdWVzdDsKKyAgICAgICAgd3JhcHBlci5kYXRhID0gcGFyYW07CisKKyAgICAgICAgcmV0dXJuIGlvY3RsIChmZCwgVVNCREVWRlNfSU9DVEwsICZhbXA7d3JhcHBlcik7Cit9IDwvcHJvZ3JhbWxpc3Rpbmc+CisJCSAgICBGaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG5vdCB1cGRhdGVkIGJ5IHRoaXMgcmVxdWVzdC4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIFRoaXMgcmVxdWVzdCBsZXRzIGtlcm5lbCBkcml2ZXJzIHRhbGsgdG8gdXNlciBtb2RlIGNvZGUKKwkJICAgIHRocm91Z2ggZmlsZXN5c3RlbSBvcGVyYXRpb25zIGV2ZW4gd2hlbiB0aGV5IGRvbid0IGNyZWF0ZQorCQkgICAgYSBjaGFyYWN0b3Igb3IgYmxvY2sgc3BlY2lhbCBkZXZpY2UuCisJCSAgICBJdCdzIGFsc28gYmVlbiB1c2VkIHRvIGRvIHRoaW5ncyBsaWtlIGFzayBkZXZpY2VzIHdoYXQKKwkJICAgIGRldmljZSBzcGVjaWFsIGZpbGUgc2hvdWxkIGJlIHVzZWQuCisJCSAgICBUd28gcHJlLWRlZmluZWQgaW9jdGxzIGFyZSB1c2VkCisJCSAgICB0byBkaXNjb25uZWN0IGFuZCByZWNvbm5lY3Qga2VybmVsIGRyaXZlcnMsIHNvCisJCSAgICB0aGF0IHVzZXIgbW9kZSBjb2RlIGNhbiBjb21wbGV0ZWx5IG1hbmFnZSBiaW5kaW5nCisJCSAgICBhbmQgY29uZmlndXJhdGlvbiBvZiBkZXZpY2VzLgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19SRUxFQVNFSU5URVJGQUNFPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPlRoaXMgaXMgdXNlZCB0byByZWxlYXNlIHRoZSBjbGFpbSB1c2JmcworCQkgICAgbWFkZSBvbiBpbnRlcmZhY2UsIGVpdGhlciBpbXBsaWNpdGx5IG9yIGJlY2F1c2Ugb2YgYQorCQkgICAgVVNCREVWRlNfQ0xBSU1JTlRFUkZBQ0UgY2FsbCwgYmVmb3JlIHRoZSBmaWxlCisJCSAgICBkZXNjcmlwdG9yIGlzIGNsb3NlZC4KKwkJICAgIFRoZSBpb2N0bCBwYXJhbWV0ZXIgaXMgYW4gaW50ZWdlciBob2xkaW5nIHRoZSBudW1iZXIgb2YKKwkJICAgIHRoZSBpbnRlcmZhY2UgKGJJbnRlcmZhY2VOdW1iZXIgZnJvbSBkZXNjcmlwdG9yKTsKKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjx3YXJuaW5nPjxwYXJhPgorCQkgICAgPGVtcGhhc2lzPk5vIHNlY3VyaXR5IGNoZWNrIGlzIG1hZGUgdG8gZW5zdXJlCisJCSAgICB0aGF0IHRoZSB0YXNrIHdoaWNoIG1hZGUgdGhlIGNsYWltIGlzIHRoZSBvbmUKKwkJICAgIHdoaWNoIGlzIHJlbGVhc2luZyBpdC4KKwkJICAgIFRoaXMgbWVhbnMgdGhhdCB1c2VyIG1vZGUgZHJpdmVyIG1heSBpbnRlcmZlcmUKKwkJICAgIG90aGVyIG9uZXMuICA8L2VtcGhhc2lzPgorCQkgICAgPC9wYXJhPjwvd2FybmluZz48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfUkVTRVRFUDwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5SZXNldHMgdGhlIGRhdGEgdG9nZ2xlIHZhbHVlIGZvciBhbiBlbmRwb2ludAorCQkgICAgKGJ1bGsgb3IgaW50ZXJydXB0KSB0byBEQVRBMC4KKwkJICAgIFRoZSBpb2N0bCBwYXJhbWV0ZXIgaXMgYW4gaW50ZWdlciBlbmRwb2ludCBudW1iZXIKKwkJICAgICgxIHRvIDE1LCBhcyBpZGVudGlmaWVkIGluIHRoZSBlbmRwb2ludCBkZXNjcmlwdG9yKSwKKwkJICAgIHdpdGggVVNCX0RJUl9JTiBhZGRlZCBpZiB0aGUgZGV2aWNlJ3MgZW5kcG9pbnQgc2VuZHMKKwkJICAgIGRhdGEgdG8gdGhlIGhvc3QuCisJCSAgICA8L3BhcmE+PHdhcm5pbmc+PHBhcmE+CisJCSAgICA8ZW1waGFzaXM+QXZvaWQgdXNpbmcgdGhpcyByZXF1ZXN0LgorCQkgICAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQuPC9lbXBoYXNpcz4KKwkJICAgIFVzaW5nIGl0IHR5cGljYWxseSBtZWFucyB0aGUgZGV2aWNlIGFuZCBkcml2ZXIgd2lsbCBsb3NlCisJCSAgICB0b2dnbGUgc3luY2hyb25pemF0aW9uLiAgSWYgeW91IHJlYWxseSBsb3N0IHN5bmNocm9uaXphdGlvbiwKKwkJICAgIHlvdSBsaWtlbHkgbmVlZCB0byBjb21wbGV0ZWx5IGhhbmRzaGFrZSB3aXRoIHRoZSBkZXZpY2UsCisJCSAgICB1c2luZyBhIHJlcXVlc3QgbGlrZSBDTEVBUl9IQUxUCisJCSAgICBvciBTRVRfSU5URVJGQUNFLgorCQkgICAgPC9wYXJhPjwvd2FybmluZz48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTwvdmFyaWFibGVsaXN0PgorCisJCTwvc2VjdDI+CisKKwkgICAgPHNlY3QyPgorCQk8dGl0bGU+U3luY2hyb25vdXMgSS9PIFN1cHBvcnQ8L3RpdGxlPgorCisJCTxwYXJhPlN5bmNocm9ub3VzIHJlcXVlc3RzIGludm9sdmUgdGhlIGtlcm5lbCBibG9ja2luZworCQl1bnRpbCB1bnRpbCB0aGUgdXNlciBtb2RlIHJlcXVlc3QgY29tcGxldGVzLCBlaXRoZXIgYnkKKwkJZmluaXNoaW5nIHN1Y2Nlc3NmdWxseSBvciBieSByZXBvcnRpbmcgYW4gZXJyb3IuCisJCUluIG1vc3QgY2FzZXMgdGhpcyBpcyB0aGUgc2ltcGxlc3Qgd2F5IHRvIHVzZSB1c2JmcywKKwkJYWx0aG91Z2ggYXMgbm90ZWQgYWJvdmUgaXQgZG9lcyBwcmV2ZW50IHBlcmZvcm1pbmcgSS9PCisJCXRvIG1vcmUgdGhhbiBvbmUgZW5kcG9pbnQgYXQgYSB0aW1lLgorCQk8L3BhcmE+CisKKwkJPHZhcmlhYmxlbGlzdD4KKworCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPlVTQkRFVkZTX0JVTEs8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+SXNzdWVzIGEgYnVsayByZWFkIG9yIHdyaXRlIHJlcXVlc3QgdG8gdGhlCisJCSAgICBkZXZpY2UuCisJCSAgICBUaGUgaW9jdGwgcGFyYW1ldGVyIGlzIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZToKKzxwcm9ncmFtbGlzdGluZz5zdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyIHsKKyAgICAgICAgdW5zaWduZWQgaW50ICBlcDsKKyAgICAgICAgdW5zaWduZWQgaW50ICBsZW47CisgICAgICAgIHVuc2lnbmVkIGludCAgdGltZW91dDsgLyogaW4gbWlsbGlzZWNvbmRzICovCisgICAgICAgIHZvaWQgICAgICAgICAgKmRhdGE7Cit9OzwvcHJvZ3JhbWxpc3Rpbmc+CisJCSAgICA8L3BhcmE+PHBhcmE+VGhlICJlcCIgdmFsdWUgaWRlbnRpZmllcyBhCisJCSAgICBidWxrIGVuZHBvaW50IG51bWJlciAoMSB0byAxNSwgYXMgaWRlbnRpZmllZCBpbiBhbiBlbmRwb2ludAorCQkgICAgZGVzY3JpcHRvciksCisJCSAgICBtYXNrZWQgd2l0aCBVU0JfRElSX0lOIHdoZW4gcmVmZXJyaW5nIHRvIGFuIGVuZHBvaW50IHdoaWNoCisJCSAgICBzZW5kcyBkYXRhIHRvIHRoZSBob3N0IGZyb20gdGhlIGRldmljZS4KKwkJICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYnVmZmVyIGlzIGlkZW50aWZpZWQgYnkgImxlbiI7CisJCSAgICBSZWNlbnQga2VybmVscyBzdXBwb3J0IHJlcXVlc3RzIHVwIHRvIGFib3V0IDEyOEtCeXRlcy4KKwkJICAgIDxlbXBoYXNpcz5GSVhNRSBzYXkgaG93IHJlYWQgbGVuZ3RoIGlzIHJldHVybmVkLAorCQkgICAgYW5kIGhvdyBzaG9ydCByZWFkcyBhcmUgaGFuZGxlZC48L2VtcGhhc2lzPi4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfQ0xFQVJfSEFMVDwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5DbGVhcnMgZW5kcG9pbnQgaGFsdCAoc3RhbGwpIGFuZAorCQkgICAgcmVzZXRzIHRoZSBlbmRwb2ludCB0b2dnbGUuICBUaGlzIGlzIG9ubHkKKwkJICAgIG1lYW5pbmdmdWwgZm9yIGJ1bGsgb3IgaW50ZXJydXB0IGVuZHBvaW50cy4KKwkJICAgIFRoZSBpb2N0bCBwYXJhbWV0ZXIgaXMgYW4gaW50ZWdlciBlbmRwb2ludCBudW1iZXIKKwkJICAgICgxIHRvIDE1LCBhcyBpZGVudGlmaWVkIGluIGFuIGVuZHBvaW50IGRlc2NyaXB0b3IpLAorCQkgICAgbWFza2VkIHdpdGggVVNCX0RJUl9JTiB3aGVuIHJlZmVycmluZyB0byBhbiBlbmRwb2ludCB3aGljaAorCQkgICAgc2VuZHMgZGF0YSB0byB0aGUgaG9zdCBmcm9tIHRoZSBkZXZpY2UuCisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICBVc2UgdGhpcyBvbiBidWxrIG9yIGludGVycnVwdCBlbmRwb2ludHMgd2hpY2ggaGF2ZQorCQkgICAgc3RhbGxlZCwgcmV0dXJuaW5nIDxlbXBoYXNpcz4tRVBJUEU8L2VtcGhhc2lzPiBzdGF0dXMKKwkJICAgIHRvIGEgZGF0YSB0cmFuc2ZlciByZXF1ZXN0LgorCQkgICAgRG8gbm90IGlzc3VlIHRoZSBjb250cm9sIHJlcXVlc3QgZGlyZWN0bHksIHNpbmNlCisJCSAgICB0aGF0IGNvdWxkIGludmFsaWRhdGUgdGhlIGhvc3QncyByZWNvcmQgb2YgdGhlCisJCSAgICBkYXRhIHRvZ2dsZS4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfQ09OVFJPTDwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Jc3N1ZXMgYSBjb250cm9sIHJlcXVlc3QgdG8gdGhlIGRldmljZS4KKwkJICAgIFRoZSBpb2N0bCBwYXJhbWV0ZXIgcG9pbnRzIHRvIGEgc3RydWN0dXJlIGxpa2UgdGhpczoKKzxwcm9ncmFtbGlzdGluZz5zdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyIHsKKyAgICAgICAgX191OCAgIGJSZXF1ZXN0VHlwZTsKKyAgICAgICAgX191OCAgIGJSZXF1ZXN0OworICAgICAgICBfX3UxNiAgd1ZhbHVlOworICAgICAgICBfX3UxNiAgd0luZGV4OworICAgICAgICBfX3UxNiAgd0xlbmd0aDsKKyAgICAgICAgX191MzIgIHRpbWVvdXQ7ICAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyAgICAgICAgdm9pZCAgICpkYXRhOworfTs8L3Byb2dyYW1saXN0aW5nPgorCQkgICAgPC9wYXJhPjxwYXJhPgorCQkgICAgVGhlIGZpcnN0IGVpZ2h0IGJ5dGVzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSB0aGUgY29udGVudHMKKwkJICAgIG9mIHRoZSBTRVRVUCBwYWNrZXQgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlOyBzZWUgdGhlCisJCSAgICBVU0IgMi4wIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisJCSAgICBUaGUgYlJlcXVlc3RUeXBlIHZhbHVlIGlzIGNvbXBvc2VkIGJ5IGNvbWJpbmluZyBhCisJCSAgICBVU0JfVFlQRV8qIHZhbHVlLCBhIFVTQl9ESVJfKiB2YWx1ZSwgYW5kIGEKKwkJICAgIFVTQl9SRUNJUF8qIHZhbHVlIChmcm9tCisJCSAgICA8ZW1waGFzaXM+Jmx0O2xpbnV4L3VzYi5oJmd0OzwvZW1waGFzaXM+KS4KKwkJICAgIElmIHdMZW5ndGggaXMgbm9uemVybywgaXQgZGVzY3JpYmVzIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKwkJICAgIGJ1ZmZlciwgd2hpY2ggaXMgZWl0aGVyIHdyaXR0ZW4gdG8gdGhlIGRldmljZQorCQkgICAgKFVTQl9ESVJfT1VUKSBvciByZWFkIGZyb20gdGhlIGRldmljZSAoVVNCX0RJUl9JTikuCisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICBBdCB0aGlzIHdyaXRpbmcsIHlvdSBjYW4ndCB0cmFuc2ZlciBtb3JlIHRoYW4gNCBLQnl0ZXMKKwkJICAgIG9mIGRhdGEgdG8gb3IgZnJvbSBhIGRldmljZTsgdXNiZnMgaGFzIGEgbGltaXQsIGFuZAorCQkgICAgc29tZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVycyBoYXZlIGEgbGltaXQuCisJCSAgICAoVGhhdCdzIG5vdCB1c3VhbGx5IGEgcHJvYmxlbS4pCisJCSAgICA8ZW1waGFzaXM+QWxzbzwvZW1waGFzaXM+IHRoZXJlJ3Mgbm8gd2F5IHRvIHNheSBpdCdzCisJCSAgICBub3QgT0sgdG8gZ2V0IGEgc2hvcnQgcmVhZCBiYWNrIGZyb20gdGhlIGRldmljZS4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfUkVTRVQ8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+RG9lcyBhIFVTQiBsZXZlbCBkZXZpY2UgcmVzZXQuCisJCSAgICBUaGUgaW9jdGwgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisJCSAgICBBZnRlciB0aGUgcmVzZXQsIHRoaXMgcmViaW5kcyBhbGwgZGV2aWNlIGludGVyZmFjZXMuCisJCSAgICBGaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG5vdCB1cGRhdGVkIGJ5IHRoaXMgcmVxdWVzdC4KKwkJICAgIDwvcGFyYT48d2FybmluZz48cGFyYT4KKwkJICAgIDxlbXBoYXNpcz5Bdm9pZCB1c2luZyB0aGlzIGNhbGw8L2VtcGhhc2lzPgorCQkgICAgdW50aWwgc29tZSB1c2Jjb3JlIGJ1Z3MgZ2V0IGZpeGVkLAorCQkgICAgc2luY2UgaXQgZG9lcyBub3QgZnVsbHkgc3luY2hyb25pemUgZGV2aWNlLCBpbnRlcmZhY2UsCisJCSAgICBhbmQgZHJpdmVyIChub3QganVzdCB1c2Jmcykgc3RhdGUuCisJCSAgICA8L3BhcmE+PC93YXJuaW5nPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisJICAgIAorCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPlVTQkRFVkZTX1NFVElOVEVSRkFDRTwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5TZXRzIHRoZSBhbHRlcm5hdGUgc2V0dGluZyBmb3IgYW4KKwkJICAgIGludGVyZmFjZS4gIFRoZSBpb2N0bCBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGEKKwkJICAgIHN0cnVjdHVyZSBsaWtlIHRoaXM6Cis8cHJvZ3JhbWxpc3Rpbmc+c3RydWN0IHVzYmRldmZzX3NldGludGVyZmFjZSB7CisgICAgICAgIHVuc2lnbmVkIGludCAgaW50ZXJmYWNlOworICAgICAgICB1bnNpZ25lZCBpbnQgIGFsdHNldHRpbmc7Cit9OyA8L3Byb2dyYW1saXN0aW5nPgorCQkgICAgRmlsZSBtb2RpZmljYXRpb24gdGltZSBpcyBub3QgdXBkYXRlZCBieSB0aGlzIHJlcXVlc3QuCisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICBUaG9zZSBzdHJ1Y3QgbWVtYmVycyBhcmUgZnJvbSBzb21lIGludGVyZmFjZSBkZXNjcmlwdG9yCisJCSAgICBhcHBseWluZyB0byB0aGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKwkJICAgIFRoZSBpbnRlcmZhY2UgbnVtYmVyIGlzIHRoZSBiSW50ZXJmYWNlTnVtYmVyIHZhbHVlLCBhbmQKKwkJICAgIHRoZSBhbHRzZXR0aW5nIG51bWJlciBpcyB0aGUgYkFsdGVybmF0ZVNldHRpbmcgdmFsdWUuCisJCSAgICAoVGhpcyByZXNldHMgZWFjaCBlbmRwb2ludCBpbiB0aGUgaW50ZXJmYWNlLikKKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfU0VUQ09ORklHVVJBVElPTjwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Jc3N1ZXMgdGhlCisJCSAgICA8ZnVuY3Rpb24+dXNiX3NldF9jb25maWd1cmF0aW9uPC9mdW5jdGlvbj4gY2FsbAorCQkgICAgZm9yIHRoZSBkZXZpY2UuCisJCSAgICBUaGUgcGFyYW1ldGVyIGlzIGFuIGludGVnZXIgaG9sZGluZyB0aGUgbnVtYmVyIG9mCisJCSAgICBhIGNvbmZpZ3VyYXRpb24gKGJDb25maWd1cmF0aW9uVmFsdWUgZnJvbSBkZXNjcmlwdG9yKS4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjx3YXJuaW5nPjxwYXJhPgorCQkgICAgPGVtcGhhc2lzPkF2b2lkIHVzaW5nIHRoaXMgY2FsbDwvZW1waGFzaXM+CisJCSAgICB1bnRpbCBzb21lIHVzYmNvcmUgYnVncyBnZXQgZml4ZWQsCisJCSAgICBzaW5jZSBpdCBkb2VzIG5vdCBmdWxseSBzeW5jaHJvbml6ZSBkZXZpY2UsIGludGVyZmFjZSwKKwkJICAgIGFuZCBkcml2ZXIgKG5vdCBqdXN0IHVzYmZzKSBzdGF0ZS4KKwkJICAgIDwvcGFyYT48L3dhcm5pbmc+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCQk8L3ZhcmlhYmxlbGlzdD4KKwkgICAgPC9zZWN0Mj4KKworCSAgICA8c2VjdDI+CisJCTx0aXRsZT5Bc3luY2hyb25vdXMgSS9PIFN1cHBvcnQ8L3RpdGxlPgorCisJCTxwYXJhPkFzIG1lbnRpb25lZCBhYm92ZSwgdGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgaXQgbWF5IGJlCisJCWltcG9ydGFudCB0byBpbml0aWF0ZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgZnJvbSB1c2VyIG1vZGUgY29kZS4KKwkJVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBwZXJpb2RpYyB0cmFuc2ZlcnMKKwkJKGludGVycnVwdCBhbmQgaXNvY2hyb25vdXMpLCBidXQgaXQgY2FuIGJlIHVzZWQgZm9yIG90aGVyCisJCWtpbmRzIG9mIFVTQiByZXF1ZXN0cyB0b28uCisJCUluIHN1Y2ggY2FzZXMsIHRoZSBhc3luY2hyb25vdXMgcmVxdWVzdHMgZGVzY3JpYmVkIGhlcmUKKwkJYXJlIGVzc2VudGlhbC4gIFJhdGhlciB0aGFuIHN1Ym1pdHRpbmcgb25lIHJlcXVlc3QgYW5kIGhhdmluZworCQl0aGUga2VybmVsIGJsb2NrIHVudGlsIGl0IGNvbXBsZXRlcywgdGhlIGJsb2NraW5nIGlzIHNlcGFyYXRlLgorCQk8L3BhcmE+CisKKwkJPHBhcmE+VGhlc2UgcmVxdWVzdHMgYXJlIHBhY2thZ2VkIGludG8gYSBzdHJ1Y3R1cmUgdGhhdAorCQlyZXNlbWJsZXMgdGhlIFVSQiB1c2VkIGJ5IGtlcm5lbCBkZXZpY2UgZHJpdmVycy4KKwkJKE5vIFBPU0lYIEFzeW5jIEkvTyBzdXBwb3J0IGhlcmUsIHNvcnJ5LikKKwkJSXQgaWRlbnRpZmllcyB0aGUgZW5kcG9pbnQgdHlwZSAoVVNCREVWRlNfVVJCX1RZUEVfKiksCisJCWVuZHBvaW50IChudW1iZXIsIG1hc2tlZCB3aXRoIFVTQl9ESVJfSU4gYXMgYXBwcm9wcmlhdGUpLAorCQlidWZmZXIgYW5kIGxlbmd0aCwgYW5kIGEgdXNlciAiY29udGV4dCIgdmFsdWUgc2VydmluZyB0bworCQl1bmlxdWVseSBpZGVudGlmeSBlYWNoIHJlcXVlc3QuCisJCShJdCdzIHVzdWFsbHkgYSBwb2ludGVyIHRvIHBlci1yZXF1ZXN0IGRhdGEuKQorCQlGbGFncyBjYW4gbW9kaWZ5IHJlcXVlc3RzIChub3QgYXMgbWFueSBhcyBzdXBwb3J0ZWQgZm9yCisJCWtlcm5lbCBkcml2ZXJzKS4KKwkJPC9wYXJhPgorCisJCTxwYXJhPkVhY2ggcmVxdWVzdCBjYW4gc3BlY2lmeSBhIHJlYWx0aW1lIHNpZ25hbCBudW1iZXIKKwkJKGJldHdlZW4gU0lHUlRNSU4gYW5kIFNJR1JUTUFYLCBpbmNsdXNpdmUpIHRvIHJlcXVlc3QgYQorCQlzaWduYWwgYmUgc2VudCB3aGVuIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy4KKwkJPC9wYXJhPgorCisJCTxwYXJhPldoZW4gdXNiZnMgcmV0dXJucyB0aGVzZSB1cmJzLCB0aGUgc3RhdHVzIHZhbHVlCisJCWlzIHVwZGF0ZWQsIGFuZCB0aGUgYnVmZmVyIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQuCisJCUV4Y2VwdCBmb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzLCB0aGUgYWN0dWFsX2xlbmd0aCBpcworCQl1cGRhdGVkIHRvIHNheSBob3cgbWFueSBieXRlcyB3ZXJlIHRyYW5zZmVycmVkOyBpZiB0aGUKKwkJVVNCREVWRlNfVVJCX0RJU0FCTEVfU1BEIGZsYWcgaXMgc2V0CisJCSgic2hvcnQgcGFja2V0cyBhcmUgbm90IE9LIiksIGlmIGZld2VyIGJ5dGVzIHdlcmUgcmVhZAorCQl0aGFuIHdlcmUgcmVxdWVzdGVkIHRoZW4geW91IGdldCBhbiBlcnJvciByZXBvcnQuCisJCTwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPnN0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MgeworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9sZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKK307CisKK3N0cnVjdCB1c2JkZXZmc191cmIgeworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgICB0eXBlOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgICBlbmRwb2ludDsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlcjsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2xlbmd0aDsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX2xlbmd0aDsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZnJhbWU7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl9vZl9wYWNrZXRzOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb3VudDsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgc2lnbnI7CisgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c2VyY29udGV4dDsKKyAgICAgICAgc3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyAgaXNvX2ZyYW1lX2Rlc2NbXTsKK307PC9wcm9ncmFtbGlzdGluZz4KKworCQk8cGFyYT4gRm9yIHRoZXNlIGFzeW5jaHJvbm91cyByZXF1ZXN0cywgdGhlIGZpbGUgbW9kaWZpY2F0aW9uCisJCXRpbWUgcmVmbGVjdHMgd2hlbiB0aGUgcmVxdWVzdCB3YXMgaW5pdGlhdGVkLgorCQlUaGlzIGNvbnRyYXN0cyB3aXRoIHRoZWlyIHVzZSB3aXRoIHRoZSBzeW5jaHJvbm91cyByZXF1ZXN0cywKKwkJd2hlcmUgaXQgcmVmbGVjdHMgd2hlbiByZXF1ZXN0cyBjb21wbGV0ZS4KKwkJPC9wYXJhPgorCisJCTx2YXJpYWJsZWxpc3Q+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19ESVNDQVJEVVJCPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPgorCQkgICAgPGVtcGhhc2lzPlRCUzwvZW1waGFzaXM+CisJCSAgICBGaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG5vdCB1cGRhdGVkIGJ5IHRoaXMgcmVxdWVzdC4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfRElTQ1NJR05BTDwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT4KKwkJICAgIDxlbXBoYXNpcz5UQlM8L2VtcGhhc2lzPgorCQkgICAgRmlsZSBtb2RpZmljYXRpb24gdGltZSBpcyBub3QgdXBkYXRlZCBieSB0aGlzIHJlcXVlc3QuCisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICA8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPlVTQkRFVkZTX1JFQVBVUkI8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICA8ZW1waGFzaXM+VEJTPC9lbXBoYXNpcz4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjxwYXJhPgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19SRUFQVVJCTkRFTEFZPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPgorCQkgICAgPGVtcGhhc2lzPlRCUzwvZW1waGFzaXM+CisJCSAgICBGaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG5vdCB1cGRhdGVkIGJ5IHRoaXMgcmVxdWVzdC4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfU1VCTUlUVVJCPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPgorCQkgICAgPGVtcGhhc2lzPlRCUzwvZW1waGFzaXM+CisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICA8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCQk8L3ZhcmlhYmxlbGlzdD4KKwkgICAgPC9zZWN0Mj4KKworCTwvc2VjdDE+CisKKyAgICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KKzwhLS0gdmltOnN5bnRheD1zZ21sOnN3PTQKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpYS1hdWRpby50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpYS1hdWRpby50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZTY0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlhLWF1ZGlvLnRtcGwKQEAgLTAsMCArMSw1OTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iVmlhQXVkaW9HdWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+VmlhIDY4NiBBdWRpbyBEcml2ZXIgZm9yIExpbnV4PC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5KZWZmPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+R2FyemlrPC9zdXJuYW1lPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjE5OTktMjAwMTwveWVhcj4KKyAgIDxob2xkZXI+SmVmZiBHYXJ6aWs8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgIAlUaGUgVmlhIFZUODJDNjg2QSAic3VwZXIgc291dGhicmlkZ2UiIGNoaXBzIGNvbnRhaW4KKwlBQzk3LWNvbXBhdGlibGUgYXVkaW8gbG9naWMgd2hpY2ggZmVhdHVyZXMgZHVhbCAxNi1iaXQgc3RlcmVvCisJUENNIHNvdW5kIGNoYW5uZWxzIChmdWxsIGR1cGxleCksIHBsdXMgYSB0aGlyZCBQQ00gY2hhbm5lbCBpbnRlbmRlZCBmb3IgdXNlCisJaW4gaGFyZHdhcmUtYXNzaXN0ZWQgRk0gc3ludGhlc2lzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAJVGhlIGN1cnJlbnQgTGludXgga2VybmVsIGF1ZGlvIGRyaXZlciBmb3IgdGhpcyBmYW1pbHkgb2YgY2hpcHMKKwlzdXBwb3J0cyBhdWRpbyBwbGF5YmFjayBhbmQgcmVjb3JkaW5nLCBidXQgaGFyZHdhcmUtYXNzaXN0ZWQKKwlGTSBmZWF0dXJlcywgYW5kIGhhcmR3YXJlIGJ1ZmZlciBkaXJlY3QtYWNjZXNzIChtbWFwKQorCXN1cHBvcnQgYXJlIG5vdCB5ZXQgYXZhaWxhYmxlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAJVGhpcyBkcml2ZXIgc3VwcG9ydHMgYW55IExpbnV4IGtlcm5lbCB2ZXJzaW9uIGFmdGVyIDIuNC4xMC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byB0aGUgbWFpbGluZyBsaXN0IDxlbWFpbD5saW51eC12aWFAZ3RmLm9yZzwvZW1haWw+LgorCVRvIHN1YnNjcmliZSwgZS1tYWlsIDxlbWFpbD5tYWpvcmRvbW9AZ3RmLm9yZzwvZW1haWw+IHdpdGgKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisJc3Vic2NyaWJlIGxpbnV4LXZpYQorICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKwlpbiB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0iaW5zdGFsbCI+CisgICAgICA8dGl0bGU+RHJpdmVyIEluc3RhbGxhdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAJVG8gdXNlIHRoaXMgYXVkaW8gZHJpdmVyLCBzZWxlY3QgdGhlCisJQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWCBvcHRpb24gaW4gdGhlIHNlY3Rpb24gU291bmQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLgorCUZvbGxvdyB0aGUgdXN1YWwga2VybmVsIHByb2NlZHVyZXMgZm9yIHJlYnVpbGRpbmcgdGhlIGtlcm5lbCwKKwlvciBidWlsZGluZyBhbmQgaW5zdGFsbGluZyBkcml2ZXIgbW9kdWxlcy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgCVRvIG1ha2UgdGhpcyBkcml2ZXIgdGhlIGRlZmF1bHQgYXVkaW8gZHJpdmVyLCB5b3UgY2FuIGFkZCB0aGUKKwlmb2xsb3dpbmcgdG8geW91ciAvZXRjL2NvbmYubW9kdWxlcyBmaWxlOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKwlhbGlhcyBzb3VuZCB2aWE4MmN4eHhfYXVkaW8KKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgIAlOb3RlIHRoYXQgc291bmRjb3JlIGFuZCBhYzk3X2NvZGVjIHN1cHBvcnQgbW9kdWxlcworCWFyZSBhbHNvIHJlcXVpcmVkIGZvciB3b3JraW5nIGF1ZGlvLCBpbiBhZGRpdGlvbiB0bworCXRoZSB2aWE4MmN4eHhfYXVkaW8gbW9kdWxlIGl0c2VsZi4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0icmVwb3J0YnVnIj4KKyAgICAgIDx0aXRsZT5TdWJtaXR0aW5nIGEgYnVnIHJlcG9ydDwvdGl0bGU+CisgIDxzZWN0MSBpZD0iYnVncmVwZGVzYyI+PHRpdGxlPkRlc2NyaXB0aW9uIG9mIHByb2JsZW08L3RpdGxlPgorICA8cGFyYT4KKwlEZXNjcmliZSB0aGUgYXBwbGljYXRpb24geW91IHdlcmUgdXNpbmcgdG8gcGxheS9yZWNvcmQgc291bmQsIGFuZCBob3cKKwl0byByZXByb2R1Y2UgdGhlIHByb2JsZW0uCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJidWdyZXBkaWFnIj48dGl0bGU+RGlhZ25vc3RpYyBvdXRwdXQ8L3RpdGxlPgorICA8cGFyYT4KKwlPYnRhaW4gdGhlIHZpYS1hdWRpby1kaWFnIGRpYWdub3N0aWNzIHByb2dyYW0gZnJvbQorCWh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvZ2tlcm5lbC8gYW5kIHByb3ZpZGUgYSBkdW1wIG9mIHRoZQorCWF1ZGlvIGNoaXAncyByZWdpc3RlcnMgd2hpbGUgdGhlIHByb2JsZW0gaXMgb2NjdXJyaW5nLiAgU2FtcGxlIGNvbW1hbmQgbGluZToKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisJLi92aWEtYXVkaW8tZGlhZyAtYXBzID4gZGlhZy1vdXRwdXQudHh0CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0iYnVncmVwZGVidWciPjx0aXRsZT5Ecml2ZXIgZGVidWcgb3V0cHV0PC90aXRsZT4KKyAgPHBhcmE+CisJRGVmaW5lIDxjb25zdGFudD5WSUFfREVCVUc8L2NvbnN0YW50PiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkcml2ZXIsIHRoZW4gY2FwdHVyZSBhbmQgZW1haWwKKwl0aGUga2VybmVsIGxvZyBvdXRwdXQuICBUaGlzIGNhbiBiZSB2aWV3ZWQgaW4gdGhlIHN5c3RlbSBrZXJuZWwgbG9nIChpZgorCWVuYWJsZWQpLCBvciB2aWEgdGhlIGRtZXNnIHByb2dyYW0uICBTYW1wbGUgY29tbWFuZCBsaW5lOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKwlkbWVzZyA+IC90bXAvZG1lc2ctb3V0cHV0LnR4dAorICA8L3Byb2dyYW1saXN0aW5nPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9ImJ1Z3JlcHByaW50ayI+PHRpdGxlPkJpZ2dlciBrZXJuZWwgbWVzc2FnZSBidWZmZXI8L3RpdGxlPgorICA8cGFyYT4KKwlJZiB5b3Ugd2lzaCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGRpc3BsYXllZCBieSBkbWVzZywgdGhlbgorCWNoYW5nZSB0aGUgPGNvbnN0YW50PkxPR19CVUZfTEVOPC9jb25zdGFudD4gbWFjcm8gYXQgdGhlIHRvcCBvZiBsaW51eC9rZXJuZWwvcHJpbnRrLmMsIHJlY29tcGlsZQorCXlvdXIga2VybmVsLCBhbmQgcGFzcyB0aGUgPGNvbnN0YW50PkxPR19CVUZfTEVOPC9jb25zdGFudD4gdmFsdWUgdG8gZG1lc2cuICBTYW1wbGUgY29tbWFuZCBsaW5lIHdpdGgKKwk8Y29uc3RhbnQ+TE9HX0JVRl9MRU48L2NvbnN0YW50PiA9PSAzMjc2ODoKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisJZG1lc2cgLXMgMzI3NjggPiAvdG1wL2RtZXNnLW91dHB1dC50eHQKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICAKKyAgPGNoYXB0ZXIgaWQ9ImJ1Z3MiPgorICAgICA8dGl0bGU+S25vd24gQnVncyBBbmQgQXNzdW1wdGlvbnM8L3RpdGxlPgorICA8cGFyYT4KKyAgPHZhcmlhYmxlbGlzdD4KKyAgICA8dmFybGlzdGVudHJ5Pjx0ZXJtPkxvdyB2b2x1bWU8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorCVZvbHVtZSB0b28gbG93IG9uIG1hbnkgc3lzdGVtcy4gIFdvcmthcm91bmQ6ICB1c2UgbWl4ZXIgcHJvZ3JhbQorCXN1Y2ggYXMgeG1peGVyIHRvIGluY3JlYXNlIHZvbHVtZS4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKwkKKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InRoYW5rcyI+CisgICAgICA8dGl0bGU+VGhhbmtzPC90aXRsZT4KKyAgPHBhcmE+CisJVmlhIGZvciBwcm92aWRpbmcgZS1tYWlsIHN1cHBvcnQsIHNwZWNzLCBhbmQgTkRBJ2Qgc291cmNlIGNvZGUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJTWFuZHJha2VTb2Z0IGZvciBwcm92aWRpbmcgaGFja2luZyB0aW1lLgorICA8L3BhcmE+CisgIDxwYXJhPgorCUFDOTcgbWl4ZXIgaW50ZXJmYWNlIGZpeGVzIGFuZCBkZWJ1Z2dpbmcgYnkgUm9uIENlbWVyIDxlbWFpbD5yb25jZW1lckBndGUubmV0PC9lbWFpbD4uCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJUnVpIFNvdXNhIDxlbWFpbD5ydWkuc291c2FAY29uZXhhbnQuY29tPC9lbWFpbD4sIGZvciBidWdmaXhpbmcKKwlNTUFQIHN1cHBvcnQsIGFuZCBzZXZlcmFsIG90aGVyIG5vdGFibGUgZml4ZXMgdGhhdCByZXN1bHRlZCBmcm9tCisJaGlzIGhhcmQgd29yayBhbmQgdGVzdGluZy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlBZHJpYW4gQ294IDxlbWFpbD5hZHJpYW5AaHVtYm9sZHQuY28udWs8L2VtYWlsPiwgZm9yIGJ1Z2ZpeGluZworCU1NQVAgc3VwcG9ydCwgYW5kIHNldmVyYWwgb3RoZXIgbm90YWJsZSBmaXhlcyB0aGF0IHJlc3VsdGVkIGZyb20KKwloaXMgaGFyZCB3b3JrIGFuZCB0ZXN0aW5nLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAJVGhvbWFzIFNhaWxlciBmb3IgZnVydGhlciBidWdmaXhlcy4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0ibm90ZXMiPgorICAgICA8dGl0bGU+UmFuZG9tIE5vdGVzPC90aXRsZT4KKyAgPHBhcmE+CisJVHdvIC9wcm9jIHBzZXVkby1maWxlcyBwcm92aWRlIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uICBUaGlzIGlzIGdlbmVyYWxseQorCW5vdCB1c2VmdWwgdG8gbW9zdCB1c2Vycy4gIFBvd2VyIHVzZXJzIGNhbiBkaXNhYmxlIENPTkZJR19TT1VORF9WSUE4MkNYWFhfUFJPQ0ZTLAorCWFuZCByZW1vdmUgdGhlIC9wcm9jIHN1cHBvcnQgY29kZS4gIE9uY2UKKwl2ZXJzaW9uIDIuMC4wIGlzIHJlbGVhc2VkLCB0aGUgL3Byb2Mgc3VwcG9ydCBjb2RlIHdpbGwgYmUgZGlzYWJsZWQgYnkKKwlkZWZhdWx0LiAgQXZhaWxhYmxlIC9wcm9jIHBzZXVkby1maWxlczoKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisJL3Byb2MvZHJpdmVyL3ZpYS8wL2luZm8KKwkvcHJvYy9kcml2ZXIvdmlhLzAvYWM5NworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKwlUaGlzIGRyaXZlciBieSBkZWZhdWx0IHN1cHBvcnRzIGFsbCBQQ0kgYXVkaW8gZGV2aWNlcyB3aGljaCByZXBvcnQKKwlhIHZlbmRvciBpZCBvZiAweDExMDYsIGFuZCBhIGRldmljZSBpZCBvZiAweDMwNTguICBTdWJzeXN0ZW0gdmVuZG9yCisJYW5kIGRldmljZSBpZHMgYXJlIG5vdCBleGFtaW5lZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlHTlUgaW5kZW50IGZvcm1hdHRpbmcgb3B0aW9uczoKKyAgPHByb2dyYW1saXN0aW5nPgorLWtyIC1pOCAtdHM4IC1iciAtY2UgLWJhcCAtc29iIC1sODAgLXBjcyAtY3MgLXNzIC1icyAtZGkxIC1uYmMgLWxwIC1wc2wKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlWaWEgaGFzIGdyYWNpb3VzbHkgZG9uYXRlZCBlLW1haWwgc3VwcG9ydCBhbmQgc291cmNlIGNvZGUgdG8gaGVscCBmdXJ0aGVyCisJdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgZHJpdmVyLiAgVGhlaXIgYXNzaXN0YW5jZSBoYXMgYmVlbiBpbnZhbHVhYmxlCisJaW4gdGhlIGRlc2lnbiBhbmQgY29kaW5nIG9mIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgdGhpcyBkcml2ZXIuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIFZpYSBhdWRpbyBjaGlwIGFwcGFyZW50bHkgcHJvdmlkZXMgYSBzZWNvbmQgUENNIHNjYXR0ZXItZ2F0aGVyCisJRE1BIGNoYW5uZWwganVzdCBmb3IgRk0gZGF0YSwgYnV0IGRvZXMgbm90IGhhdmUgYSBmdWxsIGhhcmR3YXJlIE1JREkKKwlwcm9jZXNzb3IuICBJIGhhdmVuJ3QgcHV0IG11Y2ggdGhvdWdodCB0b3dhcmRzIGEgc29sdXRpb24gaGVyZSwgYnV0IGl0CisJbWlnaHQgaW52b2x2ZSB1c2luZyBTb2Z0T1NTIG1pZGkgd2F2ZSB0YWJsZSwgb3Igc2ltcGx5IGRpc2FibGluZyBNSURJCisJc3VwcG9ydCBhbHRvZ2V0aGVyIGFuZCB1c2luZyB0aGUgRk0gUENNIGNoYW5uZWwgYXMgYSBzZWNvbmQgKGlucHV0PyBvdXRwdXQ/KQorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iY2hhbmdlbG9nIj4KKyAgICAgIDx0aXRsZT5Ecml2ZXIgQ2hhbmdlTG9nPC90aXRsZT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTkxIj48dGl0bGU+CitWZXJzaW9uIDEuOS4xCis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIERTUCByZWFkL3dyaXRlIGJ1Z2ZpeGVzIGZyb20gVGhvbWFzIFNhaWxlci4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgQWRkIG5ldyBQQ0kgaWQgZm9yIHNpbmdsZS1jaGFubmVsIHVzZSBvZiBWaWEgODIzMy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgT3RoZXIgYnVnIGZpeGVzLCB0d2Vha3MsIG5ldyBpb2N0bHMuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0idmVyc2lvbjExMTUiPjx0aXRsZT4KK1ZlcnNpb24gMS4xLjE1Cis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFN1cHBvcnQgZm9yIHZhcmlhYmxlIGZyYWdtZW50IHNpemUgYW5kIHZhcmlhYmxlIGZyYWdtZW50IG51bWJlciAoUnVpCisgICAgU291c2EpCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIEZpeGVzIGZvciB0aGUgU1BFRUQsIFNURVJFTywgQ0hBTk5FTFMsIEZNVCBpb2N0bHMgd2hlbiBpbiByZWFkICZhbXA7CisgICAgd3JpdGUgbW9kZSAoUnVpIFNvdXNhKQorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBNbWFwZWQgc291bmQgaXMgbm93IGZ1bGx5IGZ1bmN0aW9uYWwuIChSdWkgU291c2EpCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIE1ha2Ugc3VyZSB0byBlbmFibGUgUENJIGRldmljZSBiZWZvcmUgcmVhZGluZyBhbnkgb2YgaXRzIFBDSQorICAgIGNvbmZpZyBpbmZvcm1hdGlvbi4gKGZpeGVzIHBvdGVudGlhbCBob3RwbHVnIHByb2JsZW1zKQorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBDbGVhbiB1cCBjb2RlIGEgYml0IGFuZCBhZGQgbW9yZSBpbnRlcm5hbCBmdW5jdGlvbiBkb2N1bWVudGF0aW9uLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBBQzk3IGNvZGVjIGFjY2VzcyBmaXhlcyAoQWRyaWFuIENveCkKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgQmlnIGVuZGlhbiBmaXhlcyAoQWRyaWFuIENveCkKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgTUlESSBzdXBwb3J0IChBZHJpYW4gQ294KQorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBEZXRlY3QgYW5kIHJlcG9ydCBsb2NrZWQtcmF0ZSBBQzk3IGNvZGVjcy4gIElmIHlvdXIgaGFyZHdhcmUgb25seQorICAgIHN1cHBvcnRzIDQ4S2h6IChsb2NrZWQgcmF0ZSksIHRoZW4geW91ciByZWNvcmRpbmcvcGxheWJhY2sgc29mdHdhcmUKKyAgICBtdXN0IHVwc2FtcGxlIG9yIGRvd25zYW1wbGUgYWNjb3JkaW5nbHkuICBUaGUgaGFyZHdhcmUgY2Fubm90IGRvIGl0LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBVc2UgbmV3IHBjaV9yZXF1ZXN0X3JlZ2lvbnMgYW5kIHBjaV9kaXNhYmxlX2RldmljZSBmdW5jdGlvbnMgaW4KKyAgICBrZXJuZWwgMi40LjYuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0idmVyc2lvbjExMTQiPjx0aXRsZT4KK1ZlcnNpb24gMS4xLjE0Cis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFVzZSBWTV9SRVNFUlZFIHdoZW4gYXZhaWxhYmxlLCB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgcGFnZSBmYXVsdHMuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgPC9pdGVtaXplZGxpc3Q+Cis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InZlcnNpb24xMTEyIj48dGl0bGU+CitWZXJzaW9uIDEuMS4xMgorPC90aXRsZT4KKyAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBtbWFwIGJ1ZyBmaXhlcyBmcm9tIExpbnVzLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTExMSI+PHRpdGxlPgorVmVyc2lvbiAxLjEuMTEKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgTWFueSBtb3JlIGJ1ZyBmaXhlcy4gIG1tYXAgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgbWF5IHN0aWxsIGJlIGJ1Z2d5LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBVc2VzIG5ldyBhbmQgc3BpZmZ5IG1ldGhvZCBvZiBtbWFwJ2luZyB0aGUgRE1BIGJ1ZmZlciwgYmFzZWQKKyAgICBvbiBhIHN1Z2dlc3Rpb24gZnJvbSBMaW51cy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0idmVyc2lvbjExMTAiPjx0aXRsZT4KK1ZlcnNpb24gMS4xLjEwCis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIE1hbnkgYnVnIGZpeGVzLiAgbW1hcCBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBtYXkgc3RpbGwgYmUgYnVnZ3kuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgPC9pdGVtaXplZGxpc3Q+Cis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InZlcnNpb24xMTkiPjx0aXRsZT4KK1ZlcnNpb24gMS4xLjkKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgUmVkZXNpZ24gYW5kIHJld3JpdGUgYXVkaW8gcGxheWJhY2sgaW1wbGVtZW50YXRpb24uICAoZmFzdGVyIGFuZCBzbWFsbGVyLCBob3BlZnVsbHkpCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIEltcGxlbWVudCByZWNvcmRpbmcgYW5kIGZ1bGwgZHVwbGV4IChEU1BfQ0FQX0RVUExFWCkgc3VwcG9ydC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgTWFrZSBwcm9jZnMgc3VwcG9ydCBvcHRpb25hbC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgUXVpY2sgaW50ZXJydXB0IHN0YXR1cyBjaGVjaywgdG8gbGVzc2VuIG92ZXJoZWFkIGluIGludGVycnVwdAorICAgIHNoYXJpbmcgc2l0dWF0aW9ucy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgQWRkIG1tYXAoMikgc3VwcG9ydC4gIERpc2FibGVkIGZvciBub3csIGl0IGlzIHN0aWxsIGJ1Z2d5IGFuZCBleHBlcmltZW50YWwuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFN1cnJvdW5kIGFsbCBzeXNjYWxscyB3aXRoIGEgc2VtYXBob3JlIGZvciBjaGVhcCBhbmQgZWFzeSBTTVAgcHJvdGVjdGlvbi4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgRml4IGJ1ZyBpbiBjaGFubmVsIHNodXRkb3duIChoYXJkd2FyZSBjaGFubmVsIHJlc2V0KSBjb2RlLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBSZW1vdmUgdW5uZWNlc3Nhcnkgc3BpbmxvY2tzIChiZXR0ZXIgcGVyZm9ybWFuY2UpLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBFbGltaW5hdGUgInVua25vd24gQUZNVCIgbWVzc2FnZSBieSB1c2luZyBhIGRpZmZlcmVudCBtZXRob2QKKyAgICBvZiBzZWxlY3RpbmcgdGhlIGJlc3QgQUZNVF94eHggc291bmQgc2FtcGxlIGZvcm1hdCBmb3IgdXNlLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBTdXBwb3J0IGZvciByZWFsdGltZSBoYXJkd2FyZSBwb2ludGVyIHBvc2l0aW9uIHJlcG9ydGluZworICAgIChEU1BfQ0FQX1JFQUxUSU1FLCBTTkRDVExfRFNQX0dFVHhQVFIgaW9jdGxzKQorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBTdXBwb3J0IGZvciBjYXB0dXJlL3BsYXliYWNrIHRyaWdnZXJpbmcKKyAgICAoRFNQX0NBUF9UUklHR0VSLCBTTkRDVExfRFNQX1NFVFRSSUdHRVIgaW9jdGxzKQorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBTTkRDVExfRFNQX1NFVERVUExFWCBhbmQgU05EQ1RMX0RTUF9QT1NUIGlvY3RscyBub3cgaGFuZGxlZC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgUmV3cml0ZSBvcGVuKDIpIGFuZCBjbG9zZSgyKSBsb2dpYyB0byBhbGxvdyBvbmx5IG9uZSB1c2VyIGF0CisgICAgYSB0aW1lLiAgQWxsIG90aGVyIG9wZW4oMikgYXR0ZW1wdHMgd2lsbCBzbGVlcCB1bnRpbCB0aGV5IHN1Y2NlZWQuCisgICAgRklYTUU6IG9wZW4oT19SRE9OTFkpIGFuZCBvcGVuKE9fV1JPTkxZKSBzaG91bGQgYmUgYWxsb3dlZCB0byBzdWNjZWVkLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBSZXZpZXdlZCBjb2RlIHRvIGVuc3VyZSB0aGF0IFNNUCBhbmQgbXVsdGlwbGUgYXVkaW8gZGV2aWNlcworICAgIGFyZSBmdWxseSBzdXBwb3J0ZWQuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0idmVyc2lvbjExOCI+PHRpdGxlPgorVmVyc2lvbiAxLjEuOAorPC90aXRsZT4KKyAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAJQ2xlYW4gdXAgaW50ZXJydXB0IGhhbmRsZXIgb3V0cHV0LiAgRml4ZXMgdGhlIGZvbGxvd2luZyBrZXJuZWwgZXJyb3IgbWVzc2FnZToKKyAgICA8L3BhcmE+CisgIAk8cHJvZ3JhbWxpc3Rpbmc+CisJdW5oYW5kbGVkIGludGVycnVwdCAuLi4KKyAgCTwvcHJvZ3JhbWxpc3Rpbmc+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgCUNvbnZlcnQgZG9jdW1lbnRhdGlvbiB0byBEb2NCb29rLCBzbyB0aGF0IFBERiwgSFRNTCBhbmQgUG9zdFNjcmlwdCAoLnBzKSBvdXRwdXQgaXMgcmVhZGlseQorCWF2YWlsYWJsZS4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTE3Ij48dGl0bGU+CitWZXJzaW9uIDEuMS43Cis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorIEZpeCBtb2R1bGUgdW5sb2FkIGJ1ZyB3aGVyZSBtaXhlciBkZXZpY2UgbGVmdCByZWdpc3RlcmVkCisgIGFmdGVyIGRyaXZlciBleGl0CisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgPC9pdGVtaXplZGxpc3Q+Cis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InZlcnNpb24xMTYiPjx0aXRsZT4KK1ZlcnNpb24gMS4xLjYKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgUmV3cml0ZSB2aWFfc2V0X3JhdGUgdG8gbWltaWMgQUxTQSBiYXNpYyBBQzk3IHJhdGUgc2V0dGluZworICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgUmVtb3ZlIG11Y2ggZGVhZCBjb2RlCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyBDb21wbGV0ZSBzcGluX2xvY2tfaXJxc2F2ZSAtPiBzcGluX2xvY2tfaXJxIGNvbnZlcnNpb24gaW4gdmlhX2RzcF9pb2N0bAorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgRml4IGJ1aWxkIHByb2JsZW0gaW4gdmlhX2RzcF9pb2N0bAorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgT3B0aW1pemUgaW5jbHVkZWQgaGVhZGVycyB0byBlbGltaW5hdGUgaGVhZGVycyBmb3VuZCBpbiBsaW51eC9zb3VuZAorCTwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTE1Ij48dGl0bGU+CitWZXJzaW9uIDEuMS41Cis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorIERpc2FibGUgc29tZSBvdmVybHktdmVyYm9zZSBkZWJ1Z2dpbmcgY29kZQorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgUmVtb3ZlIHVubmVjZXNzYXJ5IHNvdW5kIGxvY2tzCisgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorIEZpeCBzb21lIGlvY3RscyBmb3IgYmV0dGVyIHRpbWUgcmVzb2x1dGlvbgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgQmVnaW4gc3Bpbl9sb2NrX2lycXNhdmUgLT4gc3Bpbl9sb2NrX2lycSBjb252ZXJzaW9uIGluIHZpYV9kc3BfaW9jdGwKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0idmVyc2lvbjExNCI+PHRpdGxlPgorVmVyc2lvbiAxLjEuNAorPC90aXRsZT4KKyAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyBDb21wbGV0ZWQgcmV3cml0ZSBvZiBkcml2ZXIuICBFbGltaW5hdGVkIFNvdW5kQmxhc3RlciBjb21wYXRpYmlsaXR5CisgIGNvbXBsZXRlbHksIGFuZCBub3cgdXNlcyB0aGUgbXVjaC1mYXN0ZXIgc2NhdHRlci1nYXRoZXIgRE1BIGVuZ2luZS4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKyAgPC9jaGFwdGVyPgorICAKKyAgPGNoYXB0ZXIgaWQ9ImludGZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5JbnRlcm5hbCBGdW5jdGlvbnM8L3RpdGxlPgorIUlzb3VuZC9vc3MvdmlhODJjeHh4X2F1ZGlvLmMKKyAgPC9jaGFwdGVyPgorCis8L2Jvb2s+CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpZGVvYm9vay50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpZGVvYm9vay50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzZjODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlkZW9ib29rLnRtcGwKQEAgLTAsMCArMSwxNjYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9IlY0TEd1aWRlIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5WaWRlbzRMaW51eCBQcm9ncmFtbWluZzwvdGl0bGU+CisgIAorICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+QWxhbjwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPkNveDwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmFsYW5AcmVkaGF0LmNvbTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDA8L3llYXI+CisgICA8aG9sZGVyPkFsYW4gQ294PC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0iaW50cm8iPgorICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgICAgICBQYXJ0cyBvZiB0aGlzIGRvY3VtZW50IGZpcnN0IGFwcGVhcmVkIGluIExpbnV4IE1hZ2F6aW5lIHVuZGVyIGEKKyAgICAgICAgbmluZXR5IGRheSBleGNsdXNpdml0eS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVmlkZW80TGludXggaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIGNvbW1vbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UKKyAgICAgICAgZm9yIHRoZSBtYW55IFRWIGFuZCBjYXB0dXJlIGNhcmRzIG5vdyBvbiB0aGUgbWFya2V0LCBhcyB3ZWxsIGFzCisgICAgICAgIHBhcmFsbGVsIHBvcnQgYW5kIFVTQiB2aWRlbyBjYW1lcmFzLiBSYWRpbywgdGVsZXRleHQgZGVjb2RlcnMgYW5kCisgICAgICAgIHZlcnRpY2FsIGJsYW5raW5nIGRhdGEgaW50ZXJmYWNlcyBhcmUgYWxzbyBwcm92aWRlZC4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJyYWRpbyI+CisgICAgICAgIDx0aXRsZT5SYWRpbyBEZXZpY2VzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBhIHdpZGUgdmFyaWV0eSBvZiByYWRpbyBpbnRlcmZhY2VzIGF2YWlsYWJsZSBmb3IgUEMncywgYW5kIHRoZXNlCisgICAgICAgIGFyZSBnZW5lcmFsbHkgdmVyeSBzaW1wbGUgdG8gcHJvZ3JhbS4gVGhlIGJpZ2dlc3QgcHJvYmxlbSB3aXRoIHN1cHBvcnRpbmcKKyAgICAgICAgc3VjaCBkZXZpY2VzIGlzIG5vcm1hbGx5IGV4dHJhY3RpbmcgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSB2ZW5kb3IuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSByYWRpbyBpbnRlcmZhY2Ugc3VwcG9ydHMgYSBzaW1wbGUgc2V0IG9mIGNvbnRyb2wgaW9jdGxzIHN0YW5kYXJkaXNlZAorICAgICAgICBhY3Jvc3MgYWxsIHJhZGlvIGFuZCB0diBpbnRlcmZhY2VzLiBJdCBkb2VzIG5vdCBzdXBwb3J0IHJlYWQgb3Igd3JpdGUsIHdoaWNoCisgICAgICAgIGFyZSB1c2VkIGZvciB2aWRlbyBzdHJlYW1zLiBUaGUgcmVhc29uIHJhZGlvIGNhcmRzIGRvIG5vdCBhbGxvdyB5b3UgdG8gcmVhZAorICAgICAgICB0aGUgYXVkaW8gc3RyZWFtIGludG8gYW4gYXBwbGljYXRpb24gaXMgdGhhdCB3aXRob3V0IGV4Y2VwdGlvbiB0aGV5IHByb3ZpZGUKKyAgICAgICAgYSBjb25uZWN0aW9uIG9uIHRvIGEgc291bmRjYXJkLiBTb3VuZGNhcmRzIGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHJhZGlvCisgICAgICAgIGRhdGEganVzdCBmaW5lLiAKKyAgPC9wYXJhPgorICA8c2VjdDEgaWQ9InJlZ2lzdGVycmFkaW8iPgorICA8dGl0bGU+UmVnaXN0ZXJpbmcgUmFkaW8gRGV2aWNlczwvdGl0bGU+CisgIDxwYXJhPgorICAgICAgICBUaGUgVmlkZW80bGludXggY29yZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHJlZ2lzdGVyaW5nIGRldmljZXMuIFRoZQorICAgICAgICBmaXJzdCBzdGVwIGluIHdyaXRpbmcgb3VyIHJhZGlvIGNhcmQgZHJpdmVyIGlzIHRvIHJlZ2lzdGVyIGl0LgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBteV9yYWRpbworeworICAgICAgICAiTXkgcmFkaW8iLAorICAgICAgICBWSURfVFlQRV9UVU5FUiwKKyAgICAgICAgVklEX0hBUkRXQVJFX01ZUkFESU8sCisgICAgICAgIHJhZGlvX29wZW4uCisgICAgICAgIHJhZGlvX2Nsb3NlLAorICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyByZWFkICovCisgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAvKiBubyB3cml0ZSAqLworICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyBwb2xsICovCisgICAgICAgIHJhZGlvX2lvY3RsLAorICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyBzcGVjaWFsIGluaXQgZnVuY3Rpb24gKi8KKyAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAvKiBubyBwcml2YXRlIGRhdGEgKi8KK307CisKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhpcyBkZWNsYXJlcyBvdXIgdmlkZW80bGludXggZGV2aWNlIGRyaXZlciBpbnRlcmZhY2UuIFRoZSBWSURfVFlQRV8gdmFsdWUKKyAgICAgICAgZGVmaW5lcyB3aGF0IGtpbmQgb2YgYW4gaW50ZXJmYWNlIHdlIGFyZSwgYW5kIGRlZmluZXMgYmFzaWMgY2FwYWJpbGl0aWVzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgb25seSBkZWZpbmVkIHZhbHVlIHJlbGV2YW50IGZvciBhIHJhZGlvIGNhcmQgaXMgVklEX1RZUEVfVFVORVIgd2hpY2gKKyAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBjYW4gYmUgdHVuZWQuIENsZWFybHkgb3VyIHJhZGlvIGlzIGdvaW5nIHRvIGhhdmUgc29tZQorICAgICAgICB3YXkgdG8gY2hhbmdlIGNoYW5uZWwgc28gaXQgaXMgdHVuZWFibGUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBWSURfSEFSRFdBUkVfIHR5cGVzIGFyZSB1bmlxdWUgdG8gZWFjaCBkZXZpY2UuIE51bWJlcnMgYXJlIGFzc2lnbmVkIGJ5CisgICAgICAgIDxlbWFpbD5hbGFuQHJlZGhhdC5jb208L2VtYWlsPiB3aGVuIGRldmljZSBkcml2ZXJzIGFyZSBnb2luZyB0byBiZSByZWxlYXNlZC4gVW50aWwgdGhlbiB5b3UKKyAgICAgICAgY2FuIHB1bGwgYSBzdWl0YWJseSBsYXJnZSBudW1iZXIgb3V0IG9mIHlvdXIgaGF0IGFuZCB1c2UgaXQuIDEwMDAwIHNob3VsZCBiZQorICAgICAgICBzYWZlIGZvciBhIHZlcnkgbG9uZyB0aW1lIGV2ZW4gYWxsb3dpbmcgZm9yIHRoZSBodWdlIG51bWJlciBvZiB2ZW5kb3JzCisgICAgICAgIG1ha2luZyBuZXcgYW5kIGRpZmZlcmVudCByYWRpbyBjYXJkcyBhdCB0aGUgbW9tZW50LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBXZSBkZWNsYXJlIGFuIG9wZW4gYW5kIGNsb3NlIHJvdXRpbmUsIGJ1dCB3ZSBkbyBub3QgbmVlZCByZWFkIG9yIHdyaXRlLAorICAgICAgICB3aGljaCBhcmUgdXNlZCB0byByZWFkIGFuZCB3cml0ZSB2aWRlbyBkYXRhIHRvIG9yIGZyb20gdGhlIGNhcmQgaXRzZWxmLiBBcworICAgICAgICB3ZSBoYXZlIG5vIHJlYWQgb3Igd3JpdGUgdGhlcmUgaXMgbm8gcG9sbCBmdW5jdGlvbi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIHByaXZhdGUgaW5pdGlhbGlzZSBmdW5jdGlvbiBpcyBydW4gd2hlbiB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuIEluCisgICAgICAgIHRoaXMgZHJpdmVyIHdlJ3ZlIGFscmVhZHkgZG9uZSBhbGwgdGhlIHdvcmsgbmVlZGVkLiBUaGUgZmluYWwgcG9pbnRlciBpcyBhCisgICAgICAgIHByaXZhdGUgZGF0YSBwb2ludGVyIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGRldmljZSBkcml2ZXIgdG8gYXR0YWNoIGFuZAorICAgICAgICByZXRyaWV2ZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcy4gV2Ugc2V0IHRoaXMgZmllbGQgInByaXYiIHRvIE5VTEwgZm9yCisgICAgICAgIHRoZSBtb21lbnQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIEhhdmluZyB0aGUgc3RydWN0dXJlIGRlZmluZWQgaXMgYWxsIHZlcnkgd2VsbCBidXQgd2Ugbm93IG5lZWQgdG8gcmVnaXN0ZXIgaXQKKyAgICAgICAgd2l0aCB0aGUga2VybmVsLiAKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIGludCBpbyA9IDB4MzIwOworCitpbnQgX19pbml0IG15cmFkaW9faW5pdChzdHJ1Y3QgdmlkZW9faW5pdCAqdikKK3sKKyAgICAgICAgaWYoIXJlcXVlc3RfcmVnaW9uKGlvLCBNWV9JT19TSVpFLCAibXlyYWRpbyIpKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIAorICAgICAgICAgICAgICAgICAgICAibXlyYWRpbzogcG9ydCAweCUwM1ggaXMgaW4gdXNlLlxuIiwgaW8pOworICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgIH0KKworICAgICAgICBpZih2aWRlb19kZXZpY2VfcmVnaXN0ZXIoJmFtcDtteV9yYWRpbywgVkZMX1RZUEVfUkFESU8pPT0tMSkgeworICAgICAgICAgICAgICAgIHJlbGVhc2VfcmVnaW9uKGlvLCBNWV9JT19TSVpFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQkJCisgICAgICAgIHJldHVybiAwOworfQorCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgZmlyc3Qgc3RhZ2Ugb2YgdGhlIGluaXRpYWxpc2F0aW9uLCBhcyBpcyBub3JtYWxseSB0aGUgY2FzZSwgaXMgdG8gY2hlY2sgCisgICAgICAgIHRoYXQgdGhlIEkvTyBzcGFjZSB3ZSBhcmUgYWJvdXQgdG8gZmlkZGxlIHdpdGggZG9lc24ndCBiZWxvbmcgdG8gc29tZSBvdGhlciAKKyAgICAgICAgZHJpdmVyLiBJZiBpdCBpcyB3ZSBsZWF2ZSB3ZWxsIGFsb25lLiBJZiB0aGUgdXNlciBnaXZlcyB0aGUgYWRkcmVzcyBvZiB0aGUgCisgICAgICAgIHdyb25nIGRldmljZSB0aGVuIHdlIHdpbGwgc3BvdCB0aGlzLiBUaGVzZSBwb2xpY2llcyB3aWxsIGdlbmVyYWxseSBhdm9pZCAKKyAgICAgICAgY3Jhc2hpbmcgdGhlIG1hY2hpbmUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIE5vdyB3ZSBhc2sgdGhlIFZpZGVvNExpbnV4IGxheWVyIHRvIHJlZ2lzdGVyIHRoZSBkZXZpY2UgZm9yIHVzLiBXZSBoYW5kIGl0CisgICAgICAgIG91ciBjYXJlZnVsbHkgZGVzaWduZWQgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSBhbmQgYWxzbyB0ZWxsIGl0IHdoaWNoIGdyb3VwCisgICAgICAgIG9mIGRldmljZXMgd2Ugd2FudCBpdCByZWdpc3RlcmVkIHdpdGguIEluIHRoaXMgY2FzZSBWRkxfVFlQRV9SQURJTy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIHR5cGVzIGF2YWlsYWJsZSBhcmUKKyAgPC9wYXJhPgorICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5EZXZpY2UgVHlwZXM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIzIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorICAgICAgICA8ZW50cnk+VkZMX1RZUEVfUkFESU88L2VudHJ5PjxlbnRyeT4vZGV2L3JhZGlve259PC9lbnRyeT48ZW50cnk+CisKKyAgICAgICAgUmFkaW8gZGV2aWNlcyBhcmUgYXNzaWduZWQgaW4gdGhpcyBibG9jay4gQXMgd2l0aCBhbGwgb2YgdGhlc2UKKyAgICAgICAgc2VsZWN0aW9ucyB0aGUgYWN0dWFsIG51bWJlciBhc3NpZ25tZW50IGlzIGRvbmUgYnkgdGhlIHZpZGVvIGxheWVyCisgICAgICAgIGFjY29yZGlqbmcgdG8gd2hhdCBpcyBmcmVlLjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZGTF9UWVBFX0dSQUJCRVI8L2VudHJ5PjxlbnRyeT4vZGV2L3ZpZGVve259PC9lbnRyeT48ZW50cnk+CisgICAgICAgIFZpZGVvIGNhcHR1cmUgZGV2aWNlcyBhbmQgYWxzbyAtLSBjb3VudGVyLWludHVpdGl2ZWx5IGZvciB0aGUgbmFtZSAtLQorICAgICAgICBoYXJkd2FyZSB2aWRlbyBwbGF5YmFjayBkZXZpY2VzIHN1Y2ggYXMgTVBFRzIgY2FyZHMuPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VkZMX1RZUEVfVkJJPC9lbnRyeT48ZW50cnk+L2Rldi92Yml7bn08L2VudHJ5PjxlbnRyeT4KKyAgICAgICAgVGhlIFZCSSBkZXZpY2VzIGNhcHR1cmUgdGhlIGhpZGRlbiBsaW5lcyBvbiBhIHRlbGV2aXNpb24gcGljdHVyZQorICAgICAgICB0aGF0IGNhcnJ5IGZ1cnRoZXIgaW5mb3JtYXRpb24gbGlrZSBjbG9zZWQgY2FwdGlvbiBkYXRhLCB0ZWxldGV4dAorICAgICAgICAocHJpbWFyaWx5IGluIEV1cm9wZSkgYW5kIG5vdyBJbnRlcmNhc3QgYW5kIHRoZSBBVFZFQyBpbnRlcm5ldAorICAgICAgICB0ZWxldmlzaW9uIGVuY29kaW5ncy48L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5WRkxfVFlQRV9WVFg8L2VudHJ5PjxlbnRyeT4vZGV2L3Z0eFtufTwvZW50cnk+PGVudHJ5PgorICAgICAgICBWVFggaXMgJ1ZpZGVvdGV4dCcgYWxzbyBrbm93biBhcyAnVGVsZXRleHQnLiBUaGlzIGlzIGEgc3lzdGVtIGZvcgorICAgICAgICBzZW5kaW5nIG51bWJlcmVkLCA0MHgyNSwgbW9zdGx5IHRleHR1YWwgcGFnZSBpbWFnZXMgb3ZlciB0aGUgaGlkZGVuCisgICAgICAgIGxpbmVzLiBVbmxpa2UgdGhlIC9kZXYvdmJpIGludGVyZmFjZXMsIHRoaXMgaXMgZm9yICdzbWFydCcgZGVjb2RlciAKKyAgICAgICAgY2hpcHMuIChUaGUgdXNlIG9mIHRoZSB3b3JkIHNtYXJ0IGhlcmUgaGFzIHRvIGJlIHRha2VuIGluIGNvbnRleHQsCisgICAgICAgIHRoZSBzbWFydGVzdCB0ZWxldGV4dCBjaGlwcyBhcmUgZmFpcmx5IGR1bWIgcGllY2VzIG9mIHRlY2hub2xvZ3kpLgorCTwvZW50cnk+CisgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8cGFyYT4KKyAgICAgICAgV2UgYXJlIG1vc3QgZGVmaW5pdGVseSBhIHJhZGlvLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBGaW5hbGx5IHdlIGFsbG9jYXRlIG91ciBJL08gc3BhY2Ugc28gdGhhdCBub2JvZHkgdHJlYWRzIG9uIHVzIGFuZCByZXR1cm4gMAorICAgICAgICB0byBzaWduaWZ5IGdlbmVyYWwgaGFwcGluZXNzIHdpdGggdGhlIHN0YXRlIG9mIHRoZSB1bml2ZXJzZS4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9Im9wZW5yYWRpbyI+CisgIDx0aXRsZT5PcGVuaW5nIEFuZCBDbG9zaW5nIFRoZSBSYWRpbzwvdGl0bGU+CisKKyAgPHBhcmE+CisgICAgICAgIFRoZSBmdW5jdGlvbnMgd2UgZGVjbGFyZWQgaW4gb3VyIHZpZGVvX2RldmljZSBhcmUgbW9zdGx5IHZlcnkgc2ltcGxlLgorICAgICAgICBGaXJzdGx5IHdlIGNhbiBkcm9wIGluIHdoYXQgaXMgYmFzaWNhbGx5IHN0YW5kYXJkIGNvZGUgZm9yIG9wZW4gYW5kIGNsb3NlLiAKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIGludCB1c2VycyA9IDA7CisKK3N0YXRpYyBpbnQgcmFkaW9fb3BlbihzdHVjdCB2aWRlb19kZXZpY2UgKmRldiwgaW50IGZsYWdzKQoreworICAgICAgICBpZih1c2VycykKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICB1c2VycysrOworICAgICAgICByZXR1cm4gMDsKK30KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgQXQgb3BlbiB0aW1lIHdlIG5lZWQgdG8gZG8gbm90aGluZyBidXQgY2hlY2sgaWYgc29tZW9uZSBlbHNlIGlzIGFsc28gdXNpbmcKKyAgICAgICAgdGhlIHJhZGlvIGNhcmQuIElmIG5vYm9keSBpcyB1c2luZyBpdCB3ZSBtYWtlIGEgbm90ZSB0aGF0IHdlIGFyZSB1c2luZyBpdCwKKyAgICAgICAgdGhlbiB3ZSBlbnN1cmUgdGhhdCBub2JvZHkgdW5sb2FkcyBvdXIgZHJpdmVyIG9uIHVzLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgaW50IHJhZGlvX2Nsb3NlKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldikKK3sKKyAgICAgICAgdXNlcnMtLTsKK30KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgQXQgY2xvc2UgdGltZSB3ZSBzaW1wbHkgbmVlZCB0byByZWR1Y2UgdGhlIHVzZXIgY291bnQgYW5kIGFsbG93IHRoZSBtb2R1bGUKKyAgICAgICAgdG8gYmVjb21lIHVubG9hZGFibGUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIElmIHlvdSBhcmUgc2hhcnAgeW91IHdpbGwgaGF2ZSBub3RpY2VkIG5laXRoZXIgdGhlIG9wZW4gbm9yIHRoZSBjbG9zZQorICAgICAgICByb3V0aW5lcyBhdHRlbXB0IHRvIHJlc2V0IG9yIGNoYW5nZSB0aGUgcmFkaW8gc2V0dGluZ3MuIFRoaXMgaXMgaW50ZW50aW9uYWwuCisgICAgICAgIEl0IGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBzZXQgdXAgdGhlIHJhZGlvIGFuZCBleGl0LiBJdCBhdm9pZHMgYSB1c2VyCisgICAgICAgIGhhdmluZyB0byBsZWF2ZSBhbiBhcHBsaWNhdGlvbiBydW5uaW5nIGFsbCB0aGUgdGltZSBqdXN0IHRvIGxpc3RlbiB0byB0aGUKKyAgICAgICAgcmFkaW8uIAorICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0iaW9jdGxyYWRpbyI+CisgIDx0aXRsZT5UaGUgSW9jdGwgSW50ZXJmYWNlPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICAgIFRoaXMgbGVhdmVzIHRoZSBpb2N0bCByb3V0aW5lLCB3aXRob3V0IHdoaWNoIHRoZSBkcml2ZXIgd2lsbCBub3QgYmUKKyAgICAgICAgdGVycmlibHkgdXNlZnVsIHRvIGFueW9uZS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIGludCByYWRpb19pb2N0bChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKyAgICAgICAgc3dpdGNoKGNtZCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0NBUDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSB2OworICAgICAgICAgICAgICAgICAgICAgICAgdi50eXBlID0gVklEX1RZUEVfVFVORVI7CisgICAgICAgICAgICAgICAgICAgICAgICB2LmNoYW5uZWxzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuYXVkaW9zID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4d2lkdGggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdi5taW53aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2Lm1heGhlaWdodCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2Lm1pbmhlaWdodCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiTXkgUmFkaW8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7diwgc2l6ZW9mKHYpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFZJRElPQ0dDQVAgaXMgdGhlIGZpcnN0IGlvY3RsIGFsbCB2aWRlbzRsaW51eCBkZXZpY2VzIG11c3Qgc3VwcG9ydC4gSXQKKyAgICAgICAgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbnMgdG8gZmluZCBvdXQgd2hhdCBzb3J0IG9mIGEgY2FyZCB0aGV5IGhhdmUgZm91bmQgYW5kCisgICAgICAgIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGV5IHdhbnQgdG8gZG8gYWJvdXQgaXQuIFRoZSBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZSBhcmUKKyAgPC9wYXJhPgorICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSBmaWVsZHM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorICAgICAgICA8ZW50cnk+bmFtZTwvZW50cnk+PGVudHJ5PlRoZSBkZXZpY2UgdGV4dCBuYW1lLiBUaGlzIGlzIGludGVuZGVkIGZvciB0aGUgdXNlci48L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5jaGFubmVsczwvZW50cnk+PGVudHJ5PlRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNoYW5uZWxzIHlvdSBjYW4gdHVuZSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBjYXJkLiBJdCBjb3VsZCBldmVuIGJ5IHplcm8gZm9yIGEgY2FyZCB0aGF0IGhhcworICAgICAgICAgICAgICAgICAgICAgICAgbm8gdHVuaW5nIGNhcGFiaWxpdHkuIEZvciBvdXIgc2ltcGxlIEZNIHJhZGlvIGl0IGlzIDEuIAorICAgICAgICAgICAgICAgICAgICAgICAgQW4gQU0vRk0gcmFkaW8gd291bGQgcmVwb3J0IDIuPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+YXVkaW9zPC9lbnRyeT48ZW50cnk+VGhlIG51bWJlciBvZiBhdWRpbyBpbnB1dHMgb24gdGhpcyBkZXZpY2UuIEZvciBvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvIHRoZXJlIGlzIG9ubHkgb25lIGF1ZGlvIGlucHV0LjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5Pm1pbndpZHRoLG1pbmhlaWdodDwvZW50cnk+PGVudHJ5PlRoZSBzbWFsbGVzdCBzaXplIHRoZSBjYXJkIGlzIGNhcGFibGUgb2YgY2FwdHVyaW5nCisJCSAgICAgICAgaW1hZ2VzIGluLiBXZSBzZXQgdGhlc2UgdG8gemVyby4gUmFkaW9zIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZSBwaWN0dXJlczwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5Pm1heHdpZHRoLG1heGhlaWdodDwvZW50cnk+PGVudHJ5PlRoZSBsYXJnZXN0IGltYWdlIHNpemUgdGhlIGNhcmQgaXMgY2FwYWJsZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJpbmcuIEZvciBvdXIgcmFkaW8gd2UgcmVwb3J0IDAuCisJCQkJPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+dHlwZTwvZW50cnk+PGVudHJ5PlRoaXMgcmVwb3J0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyB0aGUgZmllbGQgd2UgZmlsbGVkIGluIGluIHRoZSBzdHJ1Y3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2RldmljZSB3aGVuIHJlZ2lzdGVyaW5nLjwvZW50cnk+CisgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8cGFyYT4KKyAgICAgICAgSGF2aW5nIGZpbGxlZCBpbiB0aGUgZmllbGRzLCB3ZSB1c2UgY29weV90b191c2VyIHRvIGNvcHkgdGhlIHN0cnVjdHVyZSBpbnRvCisgICAgICAgIHRoZSB1c2VycyBidWZmZXIuIElmIHRoZSBjb3B5IGZhaWxzIHdlIHJldHVybiBhbiBFRkFVTFQgdG8gdGhlIGFwcGxpY2F0aW9uCisgICAgICAgIHNvIHRoYXQgaXQga25vd3MgaXQgdHJpZWQgdG8gZmVlZCB1cyBnYXJiYWdlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgbmV4dCBwYWlyIG9mIGlvY3RsIG9wZXJhdGlvbnMgc2VsZWN0IHdoaWNoIHR1bmVyIGlzIHRvIGJlIHVzZWQgYW5kIGxldAorICAgICAgICB0aGUgYXBwbGljYXRpb24gZmluZCB0aGUgdHVuZXIgcHJvcGVydGllcy4gV2UgaGF2ZSBvbmx5IGEgc2luZ2xlIEZNIGJhbmQKKyAgICAgICAgdHVuZXIgaW4gb3VyIGV4YW1wbGUgZGV2aWNlLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHVFVORVI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3R1bmVyIHY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSE9MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2LnR1bmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYucmFuZ2Vsb3c9KDg3KjE2MDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYucmFuZ2VoaWdoPSgxMDgqMTYwMDApOworICAgICAgICAgICAgICAgICAgICAgICAgdi5mbGFncyA9IFZJREVPX1RVTkVSX0xPVzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYubW9kZSA9IFZJREVPX01PREVfQVVUTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuc2lnbmFsID0gMHhGRkZGOworICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHYubmFtZSwgIkZNIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkhPTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgVklESU9DR1RVTkVSIGlvY3RsIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcXVlcnkgYSB0dW5lci4gVGhlIGFwcGxpY2F0aW9uCisgICAgICAgIHNldHMgdGhlIHR1bmVyIGZpZWxkIHRvIHRoZSB0dW5lciBudW1iZXIgaXQgd2lzaGVzIHRvIHF1ZXJ5LiBUaGUgcXVlcnkgZG9lcworICAgICAgICBub3QgY2hhbmdlIHRoZSB0dW5lciB0aGF0IGlzIGJlaW5nIHVzZWQsIGl0IG1lcmVseSBlbnF1aXJlcyBhYm91dCB0aGUgdHVuZXIKKyAgICAgICAgaW4gcXVlc3Rpb24uCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFdlIGhhdmUgZXhhY3RseSBvbmUgdHVuZXIgc28gYWZ0ZXIgY29weWluZyB0aGUgdXNlciBidWZmZXIgdG8gb3VyIHRlbXBvcmFyeQorICAgICAgICBzdHJ1Y3R1cmUgd2UgY29tcGxhaW4gaWYgdGhleSBhc2tlZCBmb3IgYSB0dW5lciBvdGhlciB0aGFuIHR1bmVyIDAuIAorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgdmlkZW9fdHVuZXIgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkcworICA8L3BhcmE+CisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb190dW5lciBmaWVsZHM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorICAgICAgICA8ZW50cnk+aW50IHR1bmVyPC9lbnRyeT48ZW50cnk+VGhlIG51bWJlciBvZiB0aGUgdHVuZXIgaW4gcXVlc3Rpb248L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PmNoYXIgbmFtZVszMl08L2VudHJ5PjxlbnRyeT5BIHRleHQgZGVzY3JpcHRpb24gb2YgdGhpcyB0dW5lci4gIkZNIiB3aWxsIGRvIGZpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGludGVuZGVkIGZvciB0aGUgYXBwbGljYXRpb24uPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT51MzIgZmxhZ3M8L2VudHJ5PgorICAgICAgICA8ZW50cnk+VHVuZXIgY2FwYWJpbGl0eSBmbGFnczwvZW50cnk+CisgICA8L3Jvdz4KKyAgIDxyb3c+CisgICAgICAgIDxlbnRyeT51MTYgbW9kZTwvZW50cnk+PGVudHJ5PlRoZSBjdXJyZW50IHJlY2VwdGlvbiBtb2RlPC9lbnRyeT4KKworICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PnUxNiBzaWduYWw8L2VudHJ5PjxlbnRyeT5UaGUgc2lnbmFsIHN0cmVuZ3RoIHNjYWxlZCBiZXR3ZWVuIDAgYW5kIDY1NTM1LiBJZgorICAgICAgICAgICAgICAgICAgICAgICAgYSBkZXZpY2UgY2Fubm90IHRlbGwgdGhlIHNpZ25hbCBzdHJlbmd0aCBpdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCA2NTUzNS4gTWFueSBzaW1wbGUgY2FyZHMgY29udGFpbiBvbmx5IGEgCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwvbm8gc2lnbmFsIGJpdC4gU3VjaCBjYXJkcyB3aWxsIHJlcG9ydCBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDAgb3IgNjU1MzUuPC9lbnRyeT4KKworICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PnUzMiByYW5nZWxvdywgcmFuZ2VoaWdoPC9lbnRyeT48ZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmFuZ2Ugb2YgZnJlcXVlbmNpZXMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbworICAgICAgICAgICAgICAgICAgICAgICAgb3IgVFYuIEl0IGlzIHNjYWxlZCBhY2NvcmRpbmcgdG8gdGhlIFZJREVPX1RVTkVSX0xPVworICAgICAgICAgICAgICAgICAgICAgICAgZmxhZy48L2VudHJ5PgorCisgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb190dW5lciBmbGFnczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisJPGVudHJ5PlZJREVPX1RVTkVSX1BBTDwvZW50cnk+PGVudHJ5PkEgUEFMIFRWIHR1bmVyPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VklERU9fVFVORVJfTlRTQzwvZW50cnk+PGVudHJ5PkFuIE5UU0MgKFVTKSBUViB0dW5lcjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX1NFQ0FNPC9lbnRyeT48ZW50cnk+QSBTRUNBTSAoRnJlbmNoKSBUViB0dW5lcjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX0xPVzwvZW50cnk+PGVudHJ5PgorICAgICAgICAgICAgIFRoZSB0dW5lciBmcmVxdWVuY3kgaXMgc2NhbGVkIGluIDEvMTZ0aCBvZiBhIEtIegorICAgICAgICAgICAgIHN0ZXBzLiBJZiBub3QgaXQgaXMgaW4gMS8xNnRoIG9mIGEgTUh6IHN0ZXBzCisJPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VklERU9fVFVORVJfTk9STTwvZW50cnk+PGVudHJ5PlRoZSB0dW5lciBjYW4gc2V0IGl0cyBmb3JtYXQ8L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5WSURFT19UVU5FUl9TVEVSRU9fT048L2VudHJ5PjxlbnRyeT5UaGUgdHVuZXIgaXMgY3VycmVudGx5IHJlY2VpdmluZyBhIHN0ZXJlbyBzaWduYWw8L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgIDx0YWJsZSBmcmFtZT0iYWxsIj48dGl0bGU+c3RydWN0IHZpZGVvX3R1bmVyIG1vZGVzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgPHRib2R5PgorICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9QQUw8L2VudHJ5PjxlbnRyeT5QQUwgRm9ybWF0PC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfTlRTQzwvZW50cnk+PGVudHJ5Pk5UU0MgRm9ybWF0IChVU0EpPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfU0VDQU08L2VudHJ5PjxlbnRyeT5GcmVuY2ggRm9ybWF0PC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfQVVUTzwvZW50cnk+PGVudHJ5PkEgZGV2aWNlIHRoYXQgZG9lcyBub3QgbmVlZCB0byBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWIGZvcm1hdCBzd2l0Y2hpbmc8L2VudHJ5PgorICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8cGFyYT4KKyAgICAgICAgVGhlIHNldHRpbmdzIGZvciB0aGUgcmFkaW8gY2FyZCBhcmUgdGh1cyBmYWlybHkgc2ltcGxlLiBXZSByZXBvcnQgdGhhdCB3ZQorICAgICAgICBhcmUgYSB0dW5lciBjYWxsZWQgIkZNIiBmb3IgRk0gcmFkaW8uIEluIG9yZGVyIHRvIGdldCB0aGUgYmVzdCB0dW5pbmcKKyAgICAgICAgcmVzb2x1dGlvbiB3ZSByZXBvcnQgVklERU9fVFVORVJfTE9XIGFuZCBzZWxlY3QgdHVuaW5nIHRvIDEvMTZ0aCBvZiBLSHouIEl0cworICAgICAgICB1bmxpa2VseSBvdXIgY2FyZCBjYW4gZG8gdGhhdCByZXNvbHV0aW9uIGJ1dCBpdCBpcyBhIGZhaXIgYmV0IHRoZSBjYXJkIGNhbgorICAgICAgICBkbyBiZXR0ZXIgdGhhbiAxLzE2dGggb2YgYSBNSHouIFZJREVPX1RVTkVSX0xPVyBpcyBhcHByb3ByaWF0ZSB0byBhbG1vc3QgYWxsCisgICAgICAgIHJhZGlvIHVzYWdlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBXZSByZXBvcnQgdGhhdCB0aGUgdHVuZXIgYXV0b21hdGljYWxseSBoYW5kbGVzIGRlY2lkaW5nIHdoYXQgZm9ybWF0IGl0IGlzCisgICAgICAgIHJlY2VpdmluZyAtIHRydWUgZW5vdWdoIGFzIGl0IG9ubHkgaGFuZGxlcyBGTSByYWRpby4gT3VyIGV4YW1wbGUgY2FyZCBpcworICAgICAgICBhbHNvIGluY2FwYWJsZSBvZiBkZXRlY3Rpbmcgc3RlcmVvIG9yIHNpZ25hbCBzdHJlbmd0aHMgc28gaXQgcmVwb3J0cyBhCisgICAgICAgIHN0cmVuZ3RoIG9mIDB4RkZGRiAobWF4aW11bSkgYW5kIG5vIHN0ZXJlbyBkZXRlY3RlZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVG8gZmluaXNoIG9mZiB3ZSBzZXQgdGhlIHJhbmdlIHRoYXQgY2FuIGJlIHR1bmVkIHRvIGJlIDg3LTEwOE1oeiwgdGhlIG5vcm1hbAorICAgICAgICBGTSBicm9hZGNhc3QgcmFkaW8gcmFuZ2UuIEl0IGlzIGltcG9ydGFudCB0byBmaW5kIG91dCB3aGF0IHRoZSBjYXJkIGlzCisgICAgICAgIGFjdHVhbGx5IGNhcGFibGUgb2YgdHVuaW5nLiBJdCBpcyBlYXN5IGVub3VnaCB0byBzaW1wbHkgdXNlIHRoZSBGTSBicm9hZGNhc3QKKyAgICAgICAgcmFuZ2UuIFVuZm9ydHVuYXRlbHkgaWYgeW91IGRvIHRoaXMgeW91IHdpbGwgZGlzY292ZXIgdGhlIEZNIGJyb2FkY2FzdAorICAgICAgICByYW5nZXMgaW4gdGhlIFVTQSwgRXVyb3BlIGFuZCBKYXBhbiBhcmUgYWxsIHN1YnRseSBkaWZmZXJlbnQgYW5kIHNvbWUgdXNlcnMKKyAgICAgICAgY2Fubm90IHJlY2VpdmUgYWxsIHRoZSBzdGF0aW9ucyB0aGV5IHdpc2guCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBhbHNvIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IHRoZSB0dW5lciBpdCB3aXNoZXMgdG8gdXNlLiBJbgorICAgICAgICBvdXIgY2FzZSwgd2l0aCBhIHNpbmdsZSB0dW5lciB0aGlzIGlzIHJhdGhlciBzaW1wbGUgdG8gYXJyYW5nZS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NUVU5FUjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fdHVuZXIgdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYudHVuZXIgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFdlIGNvcHkgdGhlIHVzZXIgc3VwcGxpZWQgc3RydWN0dXJlIGludG8ga2VybmVsIG1lbW9yeSBzbyB3ZSBjYW4gZXhhbWluZSBpdC4gCisgICAgICAgIElmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhIHR1bmVyIG90aGVyIHRoYW4gemVybyB3ZSByZWplY3QgdGhlIHJlcXVlc3QuIElmIAorICAgICAgICB0aGV5IHdhbnRlZCB0dW5lciAwIHRoZW4sIHN1cnByaXNpbmdseSBlbm91Z2gsIHRoYXQgaXMgdGhlIGN1cnJlbnQgdHVuZXIgYWxyZWFkeS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIG5leHQgdHdvIGlvY3RscyB3ZSBuZWVkIHRvIHByb3ZpZGUgYXJlIHRvIGdldCBhbmQgc2V0IHRoZSBmcmVxdWVuY3kgb2YKKyAgICAgICAgdGhlIHJhZGlvLiBUaGVzZSBib3RoIHVzZSBhbiB1bnNpZ25lZCBsb25nIGFyZ3VtZW50IHdoaWNoIGlzIHRoZSBmcmVxdWVuY3kuCisgICAgICAgIFRoZSBzY2FsZSBvZiB0aGUgZnJlcXVlbmN5IGRlcGVuZHMgb24gdGhlIFZJREVPX1RVTkVSX0xPVyBmbGFnIGFzIEkKKyAgICAgICAgbWVudGlvbmVkIGVhcmxpZXIgb24uIFNpbmNlIHdlIGhhdmUgVklERU9fVFVORVJfTE9XIHNldCB0aGlzIHdpbGwgYmUgaW4KKyAgICAgICAgMS8xNnRocyBvZiBhIEtIei4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGN1cnJlbnRfZnJlcTsKKworCisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dGUkVROgorICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjdXJyZW50X2ZyZXEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFF1ZXJ5aW5nIHRoZSBmcmVxdWVuY3kgaW4gb3VyIGNhc2UgaXMgcmVsYXRpdmVseSBzaW1wbGUuIE91ciByYWRpbyBjYXJkIGlzCisgICAgICAgIHRvbyBkdW1iIHRvIGxldCB1cyBxdWVyeSB0aGUgc2lnbmFsIHN0cmVuZ3RoIHNvIHdlIHJlbWVtYmVyIG91ciBzZXR0aW5nIGlmIAorICAgICAgICB3ZSBrbm93IGl0LiBBbGwgd2UgaGF2ZSB0byBkbyBpcyBjb3B5IGl0IHRvIHRoZSB1c2VyLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTRlJFUToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZnJlcTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKGFyZywgJmFtcDtmcmVxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSE9MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihoYXJkd2FyZV9zZXRfZnJlcShmcmVxKSZsdDswKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZnJlcSA9IGZyZXE7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFNldHRpbmcgdGhlIGZyZXF1ZW5jeSBpcyBhIGxpdHRsZSBtb3JlIGNvbXBsZXguIFdlIGJlZ2luIGJ5IGNvcHlpbmcgdGhlCisgICAgICAgIGRlc2lyZWQgZnJlcXVlbmN5IGludG8ga2VybmVsIHNwYWNlLiBOZXh0IHdlIGNhbGwgYSBoYXJkd2FyZSBzcGVjaWZpYyByb3V0aW5lCisgICAgICAgIHRvIHNldCB0aGUgcmFkaW8gdXAuIFRoaXMgbWlnaHQgYmUgYXMgc2ltcGxlIGFzIHNvbWUgc2NhbGluZyBhbmQgYSBmZXcKKyAgICAgICAgd3JpdGVzIHRvIGFuIEkvTyBwb3J0LiBGb3IgbW9zdCByYWRpbyBjYXJkcyBpdCB0dXJucyBvdXQgYSBnb29kIGRlYWwgbW9yZQorICAgICAgICBjb21wbGljYXRlZCBhbmQgbWF5IGludm9sdmUgcHJvZ3JhbW1pbmcgdGhpbmdzIGxpa2UgYSBwaGFzZSBsb2NrZWQgbG9vcCBvbgorICAgICAgICB0aGUgY2FyZC4gVGhpcyBpcyB3aGF0IGRvY3VtZW50YXRpb24gaXMgZm9yLiAKKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIGZpbmFsIHNldCBvZiBvcGVyYXRpb25zIHdlIG5lZWQgdG8gcHJvdmlkZSBmb3Igb3VyIHJhZGlvIGFyZSB0aGUgCisgICAgICAgIHZvbHVtZSBjb250cm9scy4gTm90IGFsbCByYWRpbyBjYXJkcyBjYW4gZXZlbiBkbyB2b2x1bWUgY29udHJvbC4gQWZ0ZXIgYWxsCisgICAgICAgIHRoZXJlIGlzIGEgcGVyZmVjdGx5IGdvb2Qgdm9sdW1lIGNvbnRyb2wgb24gdGhlIHNvdW5kIGNhcmQuIFdlIHdpbGwgYXNzdW1lCisgICAgICAgIG91ciByYWRpbyBjYXJkIGhhcyBhIHNpbXBsZSA0IHN0ZXAgdm9sdW1lIGNvbnRyb2wuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSB0d28gaW9jdGxzIHdpdGggYXVkaW8gd2UgbmVlZCB0byBzdXBwb3J0CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCitzdGF0aWMgaW50IGN1cnJlbnRfdm9sdW1lPTA7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dBVURJTzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuYXVkaW8gIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICB2LnZvbHVtZSA9IDE2Mzg0KmN1cnJlbnRfdm9sdW1lOworICAgICAgICAgICAgICAgICAgICAgICAgdi5zdGVwID0gMTYzODQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiUmFkaW8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYubW9kZSA9IFZJREVPX1NPVU5EX01PTk87CisgICAgICAgICAgICAgICAgICAgICAgICB2LmJhbGFuY2UgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdi5iYXNlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYudHJlYmxlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZy4gJmFtcDt2LCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgTXVjaCBsaWtlIHRoZSB0dW5lciB3ZSBzdGFydCBieSBjb3B5aW5nIHRoZSB1c2VyIHN0cnVjdHVyZSBpbnRvIGtlcm5lbAorICAgICAgICBzcGFjZS4gQWdhaW4gd2UgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFza2VkIGZvciBhIHZhbGlkIGF1ZGlvIGlucHV0LiBXZSBoYXZlCisgICAgICAgIG9ubHkgaW5wdXQgMCBhbmQgd2UgcHVudCBpZiB0aGV5IGFzayBmb3IgYW5vdGhlciBpbnB1dC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlbiB3ZSBmaWxsIGluIHRoZSB2aWRlb19hdWRpbyBzdHJ1Y3R1cmUuIFRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0CisgIDwvcGFyYT4KKyAgIDx0YWJsZSBmcmFtZT0iYWxsIj48dGl0bGU+c3RydWN0IHZpZGVvX2F1ZGlvIGZpZWxkczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisgICA8ZW50cnk+YXVkaW88L2VudHJ5PjxlbnRyeT5UaGUgaW5wdXQgdGhlIHVzZXIgd2lzaGVzIHRvIHF1ZXJ5PC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+dm9sdW1lPC9lbnRyeT48ZW50cnk+VGhlIHZvbHVtZSBzZXR0aW5nIG9uIGEgc2NhbGUgb2YgMC02NTUzNTwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgPGVudHJ5PmJhc2U8L2VudHJ5PjxlbnRyeT5UaGUgYmFzZSBsZXZlbCBvbiBhIHNjYWxlIG9mIDAtNjU1MzU8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT50cmVibGU8L2VudHJ5PjxlbnRyeT5UaGUgdHJlYmxlIGxldmVsIG9uIGEgc2NhbGUgb2YgMC02NTUzNTwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgPGVudHJ5PmZsYWdzPC9lbnRyeT48ZW50cnk+VGhlIGZlYXR1cmVzIHRoaXMgYXVkaW8gZGV2aWNlIHN1cHBvcnRzCisgICA8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT5uYW1lPC9lbnRyeT48ZW50cnk+QSB0ZXh0IG5hbWUgdG8gZGlzcGxheSB0byB0aGUgdXNlci4gV2UgcGlja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAiUmFkaW8iIGFzIGl0IGV4cGxhaW5zIHRoaW5ncyBxdWl0ZSBuaWNlbHkuPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+bW9kZTwvZW50cnk+PGVudHJ5PlRoZSBjdXJyZW50IHJlY2VwdGlvbiBtb2RlIGZvciB0aGUgYXVkaW8KKworICAgICAgICAgICAgICAgIFdlIHJlcG9ydCBNT05PIGJlY2F1c2Ugb3VyIGNhcmQgaXMgdG9vIHN0dXBpZCB0byBrbm93IGlmIGl0IGlzIGluCisgICAgICAgICAgICAgICAgbW9ubyBvciBzdGVyZW8uIAorICAgPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+YmFsYW5jZTwvZW50cnk+PGVudHJ5PlRoZSBzdGVyZW8gYmFsYW5jZSBvbiBhIHNjYWxlIG9mIDAtNjU1MzUsIDMyNzY4IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBtaWRkbGUuPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+c3RlcDwvZW50cnk+PGVudHJ5PlRoZSBzdGVwIGJ5IHdoaWNoIHRoZSB2b2x1bWUgY29udHJvbCBqdW1wcy4gVGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBoZWxwIG1ha2UgaXQgZWFzeSBmb3IgYXBwbGljYXRpb25zIHRvIHNldCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlciBiZWhhdmlvdXIuPC9lbnRyeT4KKyAgIDwvcm93PgorICAgPC90Ym9keT4KKyAgIDwvdGdyb3VwPgorICAgPC90YWJsZT4KKworICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fYXVkaW8gZmxhZ3M8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19BVURJT19NVVRFPC9lbnRyeT48ZW50cnk+VGhlIGF1ZGlvIGlzIGN1cnJlbnRseSBtdXRlZC4gV2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBmYWtlIHRoaXMgaW4gb3VyIGRyaXZlciBidXQgd2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2Ugbm90IHRvIGJvdGhlci48L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fQVVESU9fTVVUQUJMRTwvZW50cnk+PGVudHJ5PlRoZSBpbnB1dCBoYXMgYSBtdXRlIG9wdGlvbjwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19BVURJT19UUkVCTEU8L2VudHJ5PjxlbnRyeT5UaGUgIGlucHV0IGhhcyBhIHRyZWJsZSBjb250cm9sPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX0FVRElPX0JBU1M8L2VudHJ5PjxlbnRyeT5UaGUgaW5wdXQgaGFzIGEgYmFzZSBjb250cm9sPC9lbnRyeT4KKyAgIDwvcm93PgorICAgPC90Ym9keT4KKyAgIDwvdGdyb3VwPgorICAgPC90YWJsZT4KKworICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fYXVkaW8gbW9kZXM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19TT1VORF9NT05PPC9lbnRyeT48ZW50cnk+TW9ubyBzb3VuZDwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19TT1VORF9TVEVSRU88L2VudHJ5PjxlbnRyeT5TdGVyZW8gc291bmQ8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fU09VTkRfTEFORzE8L2VudHJ5PjxlbnRyeT5BbHRlcm5hdGl2ZSBsYW5ndWFnZSAxIChUViBzcGVjaWZpYyk8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fU09VTkRfTEFORzI8L2VudHJ5PjxlbnRyeT5BbHRlcm5hdGl2ZSBsYW5ndWFnZSAyIChUViBzcGVjaWZpYyk8L2VudHJ5PgorICAgPC9yb3c+CisgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+CisgICA8L3RhYmxlPgorICA8cGFyYT4KKyAgICAgICAgSGF2aW5nIGZpbGxlZCBpbiB0aGUgc3RydWN0dXJlIHdlIGNvcHkgaXQgYmFjayB0byB1c2VyIHNwYWNlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgVklESU9DU0FVRElPIGlvY3RsIGFsbG93cyB0aGUgdXNlciB0byBzZXQgdGhlIGF1ZGlvIHBhcmFtZXRlcnMgaW4gdGhlCisgICAgICAgIHZpZGVvX2F1ZGlvIHN0cnVjdHVyZS4gVGhlIGRyaXZlciBkb2VzIGl0cyBiZXN0IHRvIGhvbm91ciB0aGUgcmVxdWVzdC4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NBVURJTzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuYXVkaW8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92b2x1bWUgPSB2LzE2Mzg0OworICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X3ZvbHVtZShjdXJyZW50X3ZvbHVtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIEluIG91ciBjYXNlIHRoZXJlIGlzIHZlcnkgbGl0dGxlIHRoYXQgdGhlIHVzZXIgY2FuIHNldC4gVGhlIHZvbHVtZSBpcworICAgICAgICBiYXNpY2FsbHkgdGhlIGxpbWl0LiBOb3RlIHRoYXQgd2UgY291bGQgcHJldGVuZCB0byBoYXZlIGEgbXV0ZSBmZWF0dXJlCisgICAgICAgIGJ5IHJld3JpdGluZyB0aGlzIHRvIAorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU0FVRElPOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19hdWRpbyB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5hdWRpbykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZvbHVtZSA9IHYvMTYzODQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2LmZsYWdzJmFtcDtWSURFT19BVURJT19NVVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zZXRfdm9sdW1lKDApOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zZXRfdm9sdW1lKGN1cnJlbnRfdm9sdW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbXV0ZWQgPSB2LmZsYWdzICZhbXA7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJREVPX0FVRElPX01VVEU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFRoaXMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRvIHRoZSBWSURJT0NHQVVESU8gY29kZSB0byByZXBvcnQgdGhlCisgICAgICAgIHN0YXRlIG9mIHRoZSBtdXRlIGZsYWcgd2Ugc2F2ZSBhbmQgdG8gcmVwb3J0IHRoZSBjYXJkIGhhcyBhIG11dGUgZnVuY3Rpb24sCisgICAgICAgIHdpbGwgYWxsb3cgYXBwbGljYXRpb25zIHRvIHVzZSBhIG11dGUgZmFjaWxpdHkgd2l0aCB0aGlzIGNhcmQuIEl0IGlzCisgICAgICAgIHF1ZXN0aW9uYWJsZSB3aGV0aGVyIHRoaXMgaXMgYSBnb29kIGlkZWEgaG93ZXZlci4gVXNlciBhcHBsaWNhdGlvbnMgY2FuIGFscmVhZHkKKyAgICAgICAgZmFrZSB0aGlzIHRoZW1zZWx2ZXMgYW5kIGtlcm5lbCBzcGFjZSBpcyBwcmVjaW91cy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgV2Ugbm93IGhhdmUgYSB3b3JraW5nIHJhZGlvIGlvY3RsIGhhbmRsZXIuIFNvIHdlIGp1c3Qgd3JhcCB1cCB0aGUgZnVuY3Rpb24KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworICAgICAgICB9CisgICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIGFuZCBwYXNzIHRoZSBWaWRlbzRMaW51eCBsYXllciBiYWNrIGFuIGVycm9yIHNvIHRoYXQgaXQga25vd3Mgd2UgZGlkIG5vdAorICAgICAgICB1bmRlcnN0YW5kIHRoZSByZXF1ZXN0IHdlIGdvdCBwYXNzZWQuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJtb2RyYWRpbyI+CisgIDx0aXRsZT5Nb2R1bGUgV3JhcHBlcjwvdGl0bGU+CisgIDxwYXJhPgorICAgICAgICBGaW5hbGx5IHdlIGFkZCBpbiB0aGUgdXN1YWwgbW9kdWxlIHdyYXBwaW5nIGFuZCB0aGUgZHJpdmVyIGlzIGRvbmUuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisjaWZuZGVmIE1PRFVMRQorCitzdGF0aWMgaW50IGlvID0gMHgzMDA7CisKKyNlbHNlCisKK3N0YXRpYyBpbnQgaW8gPSAtMTsKKworI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIkFsYW4gQ294Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciBhbiBpbWFnaW5hcnkgcmFkaW8gY2FyZC4iKTsKK21vZHVsZV9wYXJhbShpbywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgY2FyZC4iKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQoreworICAgICAgICBpZihpbz09LTEpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgCisgICAgICAgICAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisgICAgICAgIHJldHVybiBteXJhZGlvX2luaXQoTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwKHZvaWQpCit7CisgICAgICAgIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZhbXA7bXlfcmFkaW8pOworICAgICAgICByZWxlYXNlX3JlZ2lvbihpbywgTVlfSU9fU0laRSk7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoY2xlYW51cCk7CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgZXhhbXBsZSB3ZSBzZXQgdGhlIElPIGJhc2UgYnkgZGVmYXVsdCBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8KKyAgICAgICAgdGhlIGtlcm5lbDogeW91IGNhbiBzdGlsbCBzZXQgaXQgdXNpbmcgIm15X3JhZGlvLmlycSIgaWYgdGhpcyBmaWxlIGlzIGNhbGxlZCA8ZmlsZW5hbWU+bXlfcmFkaW8uYzwvZmlsZW5hbWU+LiBGb3IgdGhlIG1vZHVsZSB3ZSByZXF1aXJlIHRoZQorICAgICAgICB1c2VyIHNldHMgdGhlIHBhcmFtZXRlci4gV2Ugc2V0IGlvIHRvIGEgbm9uc2Vuc2UgcG9ydCAoLTEpIHNvIHRoYXQgd2UgY2FuCisgICAgICAgIHRlbGwgaWYgdGhlIHVzZXIgc3VwcGxpZWQgYW4gaW8gcGFyYW1ldGVyIG9yIG5vdC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgV2UgdXNlIE1PRFVMRV8gZGVmaW5lcyB0byBnaXZlIGFuIGF1dGhvciBmb3IgdGhlIGNhcmQgZHJpdmVyIGFuZCBhCisgICAgICAgIGRlc2NyaXB0aW9uLiBXZSBhbHNvIHVzZSB0aGVtIHRvIGRlY2xhcmUgdGhhdCBpbyBpcyBhbiBpbnRlZ2VyIGFuZCBpdCBpcyB0aGUKKyAgICAgICAgYWRkcmVzcyBvZiB0aGUgY2FyZCwgYW5kIGNhbiBiZSByZWFkIGJ5IGFueW9uZSBmcm9tIHN5c2ZzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgY2xlYW4tdXAgcm91dGluZSB1bnJlZ2lzdGVycyB0aGUgdmlkZW9fZGV2aWNlIHdlIHJlZ2lzdGVyZWQsIGFuZCBmcmVlcworICAgICAgICB1cCB0aGUgSS9PIHNwYWNlLiBOb3RlIHRoYXQgdGhlIHVucmVnaXN0ZXIgdGFrZXMgdGhlIGFjdHVhbCB2aWRlb19kZXZpY2UKKyAgICAgICAgc3RydWN0dXJlIGFzIGl0cyBhcmd1bWVudC4gVW5saWtlIHRoZSBmaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIHdoaWNoIGNhbiBiZQorICAgICAgICBzaGFyZWQgYnkgYWxsIGluc3RhbmNlcyBvZiBhIGRldmljZSBhIHZpZGVvX2RldmljZSBzdHJ1Y3R1cmUgYXMgYW4gYWN0dWFsCisgICAgICAgIGluc3RhbmNlIG9mIHRoZSBkZXZpY2UuIElmIHlvdSBhcmUgcmVnaXN0ZXJpbmcgbXVsdGlwbGUgcmFkaW8gZGV2aWNlcyB5b3UKKyAgICAgICAgbmVlZCB0byBmaWxsIGluIG9uZSBzdHJ1Y3R1cmUgcGVyIGRldmljZSAobW9zdCBsaWtlbHkgYnkgc2V0dGluZyB1cCBhCisgICAgICAgIHRlbXBsYXRlIGFuZCBjb3B5aW5nIGl0IHRvIGVhY2ggb2YgdGhlIGFjdHVhbCBkZXZpY2Ugc3RydWN0dXJlcykuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj4KKyAgICAgICAgPHRpdGxlPlZpZGVvIENhcHR1cmUgRGV2aWNlczwvdGl0bGU+CisgIDxzZWN0MSBpZD0iaW50cm92aWQiPgorICA8dGl0bGU+VmlkZW8gQ2FwdHVyZSBEZXZpY2UgVHlwZXM8L3RpdGxlPgorICA8cGFyYT4KKyAgICAgICAgVGhlIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyBzaGFyZSB0aGUgc2FtZSBpbnRlcmZhY2VzIGFzIHJhZGlvIGRldmljZXMuIEluCisgICAgICAgIG9yZGVyIHRvIGV4cGxhaW4gdGhlIHZpZGVvIGNhcHR1cmUgaW50ZXJmYWNlIEkgd2lsbCB1c2UgdGhlIGV4YW1wbGUgb2YgYQorICAgICAgICBjYW1lcmEgdGhhdCBoYXMgbm8gdHVuZXJzIG9yIGF1ZGlvIGlucHV0LiBUaGlzIGtlZXBzIHRoZSBleGFtcGxlIHJlbGF0aXZlbHkKKyAgICAgICAgY2xlYW4uIFRvIGdldCBib3RoIGNvbWJpbmUgdGhlIHR3byBkcml2ZXIgZXhhbXBsZXMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFZpZGVvIGNhcHR1cmUgZGV2aWNlcyBkaXZpZGUgaW50byBmb3VyIGNhdGVnb3JpZXMuIEEgbGl0dGxlIHRlY2hub2xvZ3kKKyAgICAgICAgYmFja2dyb3VuZGVyLiBGdWxsIG1vdGlvbiB2aWRlbyBldmVuIGF0IHRlbGV2aXNpb24gcmVzb2x1dGlvbiAod2hpY2ggaXMKKyAgICAgICAgYWN0dWFsbHkgZmFpcmx5IGxvdykgaXMgcHJldHR5IHJlc291cmNlLWludGVuc2l2ZS4gWW91IGFyZSBjb250aW51YWxseQorICAgICAgICBwYXNzaW5nIG1lZ2FieXRlcyBvZiBkYXRhIGV2ZXJ5IHNlY29uZCBmcm9tIHRoZSBjYXB0dXJlIGNhcmQgdG8gdGhlIGRpc3BsYXkuIAorICAgICAgICBzZXZlcmFsIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMgaGF2ZSBlbWVyZ2VkIGJlY2F1c2UgY29weWluZyB0aGlzIHRocm91Z2ggdGhlIAorICAgICAgICBwcm9jZXNzb3IgYW5kIHRoZSB1c2VyIHByb2dyYW0gaXMgYSBwYXJ0aWN1bGFybHkgYmFkIGlkZWEgLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgZmlyc3QgaXMgdG8gYWRkIHRoZSB0ZWxldmlzaW9uIGltYWdlIG9udG8gdGhlIHZpZGVvIG91dHB1dCBkaXJlY3RseS4KKyAgICAgICAgVGhpcyBpcyBhbHNvIGhvdyBzb21lIDNEIGNhcmRzIHdvcmsuIFRoZXNlIGJhc2ljIGNhcmRzIGNhbiBnZW5lcmFsbHkgZHJvcCB0aGUKKyAgICAgICAgdmlkZW8gaW50byBhbnkgY2hvc2VuIHJlY3RhbmdsZSBvZiB0aGUgZGlzcGxheS4gQ2FyZHMgbGlrZSB0aGlzLCB3aGljaAorICAgICAgICBpbmNsdWRlIG1vc3QgbXBlZzEgY2FyZHMgdGhhdCB1c2VkIHRoZSBmZWF0dXJlIGNvbm5lY3RvciwgIGFyZW4ndCB2ZXJ5CisgICAgICAgIGZyaWVuZGx5IGluIGEgd2luZG93aW5nIGVudmlyb25tZW50LiBUaGV5IGRvbid0IHVuZGVyc3RhbmQgd2luZG93cyBvcgorICAgICAgICBjbGlwcGluZy4gVGhlIHZpZGVvIHdpbmRvdyBpcyBhbHdheXMgb24gdGhlIHRvcCBvZiB0aGUgZGlzcGxheS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgQ2hyb21hIGtleWluZyBpcyBhIHRlY2huaXF1ZSB1c2VkIGJ5IGNhcmRzIHRvIGdldCBhcm91bmQgdGhpcy4gSXQgaXMgYW4gb2xkCisgICAgICAgIHRlbGV2aXNpb24gbWl4aW5nIHRyaWNrIHdoZXJlIHlvdSBtYXJrIGFsbCB0aGUgYXJlYXMgeW91IHdpc2ggdG8gcmVwbGFjZQorICAgICAgICB3aXRoIGEgc2luZ2xlIGNsZWFyIGNvbG91ciB0aGF0IGlzbid0IHVzZWQgaW4gdGhlIGltYWdlIC0gVFYgcGVvcGxlIHVzZSBhbgorICAgICAgICBpbmNyZWRpYmx5IGJyaWdodCBibHVlIHdoaWxlIGNvbXB1dGluZyBwZW9wbGUgb2Z0ZW4gdXNlIGEgcGFydGljdWxhcmx5CisgICAgICAgIHZpcnVsZW50IHB1cnBsZS4gQnJpZ2h0IGJsdWUgb2NjdXJzIG9uIHRoZSBkZXNrdG9wLiBBbnlvbmUgd2l0aCB2aXJ1bGVudAorICAgICAgICBwdXJwbGUgd2luZG93cyBoYXMgYW5vdGhlciBwcm9ibGVtIGJlc2lkZXMgdGhlaXIgVFYgb3ZlcmxheS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIHRoaXJkIGFwcHJvYWNoIGlzIHRvIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FwdHVyZSBjYXJkIHRvIHRoZSB2aWRlbworICAgICAgICBjYXJkLCBidXQgdG8gZG8gaXQgZGlyZWN0bHkgYWNyb3NzIHRoZSBQQ0kgYnVzLiBUaGlzIHJlbGlldmVzIHRoZSBwcm9jZXNzb3IKKyAgICAgICAgZnJvbSBkb2luZyB0aGUgd29yayBidXQgZG9lcyByZXF1aXJlIHNvbWUgc21hcnRuZXNzIG9uIHRoZSBwYXJ0IG9mIHRoZSB2aWRlbworICAgICAgICBjYXB0dXJlIGNoaXAsIGFzIHdlbGwgYXMgYSBzdWl0YWJsZSB2aWRlbyBjYXJkLiBQcm9ncmFtbWluZyB0aGlzIGtpbmQgb2YKKyAgICAgICAgY2FyZCBhbmQgbW9yZSBzbyBkZWJ1Z2dpbmcgaXQgY2FuIGJlIGV4dHJlbWVseSB0cmlja3kuIFRoZXJlIGFyZSBzb21lIHF1aXRlCisgICAgICAgIGNvbXBsaWNhdGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBkaXNwbGF5IGFuZCB5b3UgbWF5IGFsc28gaGF2ZSB0byBjb3BlIHdpdGgKKyAgICAgICAgdmFyaW91cyBjaGlwc2V0IGJ1Z3MgdGhhdCBzaG93IHVwIHdoZW4gUENJIGNhcmRzIHN0YXJ0IHRhbGtpbmcgdG8gZWFjaAorICAgICAgICBvdGhlci4gCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRvIGtlZXAgb3VyIGV4YW1wbGUgZmFpcmx5IHNpbXBsZSB3ZSB3aWxsIGFzc3VtZSBhIGNhcmQgdGhhdCBzdXBwb3J0cworICAgICAgICBvdmVybGF5aW5nIGEgZmxhdCByZWN0YW5ndWxhciBpbWFnZSBvbnRvIHRoZSBmcmFtZSBidWZmZXIgb3V0cHV0LCBhbmQgd2hpY2gKKyAgICAgICAgY2FuIGFsc28gY2FwdHVyZSBzdHVmZiBpbnRvIHByb2Nlc3NvciBtZW1vcnkuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJyZWd2aWQiPgorICA8dGl0bGU+UmVnaXN0ZXJpbmcgVmlkZW8gQ2FwdHVyZSBEZXZpY2VzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICAgIFRoaXMgdGltZSB3ZSBuZWVkIHRvIGFkZCBtb3JlIGZ1bmN0aW9ucyBmb3Igb3VyIGNhbWVyYSBkZXZpY2UuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbXlfY2FtZXJhCit7CisgICAgICAgICJNeSBDYW1lcmEiLAorICAgICAgICBWSURfVFlQRV9PVkVSTEFZfFZJRF9UWVBFX1NDQUxFU3xcCisgICAgICAgIFZJRF9UWVBFX0NBUFRVUkV8VklEX1RZUEVfQ0hST01BS0VZLAorICAgICAgICBWSURfSEFSRFdBUkVfTVlDQU1FUkEsCisgICAgICAgIGNhbWVyYV9vcGVuLgorICAgICAgICBjYW1lcmFfY2xvc2UsCisgICAgICAgIGNhbWVyYV9yZWFkLCAgICAgIC8qIG5vIHJlYWQgKi8KKyAgICAgICAgTlVMTCwgICAgICAgICAgICAgLyogbm8gd3JpdGUgKi8KKyAgICAgICAgY2FtZXJhX3BvbGwsICAgICAgLyogbm8gcG9sbCAqLworICAgICAgICBjYW1lcmFfaW9jdGwsCisgICAgICAgIE5VTEwsICAgICAgICAgICAgIC8qIG5vIHNwZWNpYWwgaW5pdCBmdW5jdGlvbiAqLworICAgICAgICBOVUxMICAgICAgICAgICAgICAvKiBubyBwcml2YXRlIGRhdGEgKi8KK307CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBXZSBuZWVkIGEgcmVhZCgpIGZ1bmN0aW9uIHdoaWNoIGlzIHVzZWQgZm9yIGNhcHR1cmluZyBkYXRhIGZyb20KKyAgICAgICAgdGhlIGNhcmQsIGFuZCB3ZSBuZWVkIGEgcG9sbCBmdW5jdGlvbiBzbyB0aGF0IGEgZHJpdmVyIGNhbiB3YWl0IGZvciB0aGUgbmV4dAorICAgICAgICBmcmFtZSB0byBiZSBjYXB0dXJlZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgV2UgdXNlIHRoZSBleHRyYSB2aWRlbyBjYXBhYmlsaXR5IGZsYWdzIHRoYXQgZGlkIG5vdCBhcHBseSB0byB0aGUKKyAgICAgICAgcmFkaW8gaW50ZXJmYWNlLiBUaGUgdmlkZW8gcmVsYXRlZCBmbGFncyBhcmUKKyAgPC9wYXJhPgorICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5DYXB0dXJlIENhcGFiaWxpdGllczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+Cis8ZW50cnk+VklEX1RZUEVfQ0FQVFVSRTwvZW50cnk+PGVudHJ5PldlIHN1cHBvcnQgaW1hZ2UgY2FwdHVyZTwvZW50cnk+Cis8L3Jvdz48cm93PgorPGVudHJ5PlZJRF9UWVBFX1RFTEVURVhUPC9lbnRyeT48ZW50cnk+QSB0ZWxldGV4dCBjYXB0dXJlIGRldmljZSAodmJpe25dKTwvZW50cnk+Cis8L3Jvdz48cm93PgorPGVudHJ5PlZJRF9UWVBFX09WRVJMQVk8L2VudHJ5PjxlbnRyeT5UaGUgaW1hZ2UgY2FuIGJlIGRpcmVjdGx5IG92ZXJsYWlkIG9udG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIGJ1ZmZlcjwvZW50cnk+Cis8L3Jvdz48cm93PgorPGVudHJ5PlZJRF9UWVBFX0NIUk9NQUtFWTwvZW50cnk+PGVudHJ5PkNocm9tYWtleSBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgd2hpY2ggcGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGltYWdlIHRvIGRpc3BsYXk8L2VudHJ5PgorPC9yb3c+PHJvdz4KKzxlbnRyeT5WSURfVFlQRV9DTElQUElORzwvZW50cnk+PGVudHJ5Pkl0IGlzIHBvc3NpYmxlIHRvIGdpdmUgdGhlIGJvYXJkIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGVzIHRvIGRyYXcgYXJvdW5kLiA8L2VudHJ5PgorPC9yb3c+PHJvdz4KKzxlbnRyeT5WSURfVFlQRV9GUkFNRVJBTTwvZW50cnk+PGVudHJ5PlRoZSB2aWRlbyBjYXB0dXJlIGdvZXMgaW50byB0aGUgdmlkZW8gbWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY3R1YWxseSBjaGFuZ2VzIGl0LiBBcHBsaWNhdGlvbnMgbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBrbm93IHRoaXMgc28gdGhleSBjYW4gY2xlYW4gdXAgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQ8L2VudHJ5PgorPC9yb3c+PHJvdz4KKzxlbnRyeT5WSURfVFlQRV9TQ0FMRVM8L2VudHJ5PjxlbnRyeT5UaGUgaW1hZ2UgY2FuIGJlIHNjYWxlZCB0byB2YXJpb3VzIHNpemVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBiZWluZyBhIHNpbmdsZSBmaXhlZCBzaXplLjwvZW50cnk+Cis8L3Jvdz48cm93PgorPGVudHJ5PlZJRF9UWVBFX01PTk9DSFJPTUU8L2VudHJ5PjxlbnRyeT5UaGUgY2FwdHVyZSB3aWxsIGJlIG1vbm9jaHJvbWUuIFRoaXMgaXNuJ3QgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSBhbnN3ZXIgdG8gdGhlIHF1ZXN0aW9uIHNpbmNlIGEgbW9ubworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEgb24gYSBjb2xvdXIgY2FwdHVyZSBjYXJkIHdpbGwgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSBtb25vIG91dHB1dC48L2VudHJ5PgorPC9yb3c+PHJvdz4KKzxlbnRyeT5WSURfVFlQRV9TVUJDQVBUVVJFPC9lbnRyeT48ZW50cnk+VGhlIGNhcmQgYWxsb3dzIG9ubHkgcGFydCBvZiBpdHMgZmllbGQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyB0byBiZSBjYXB0dXJlZC4gVGhpcyBlbmFibGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB0byBhdm9pZCBjb3B5aW5nIGFsbCBvZiBhIGxhcmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIGludG8gbWVtb3J5IHdoZW4gb25seSBzb21lIHNlY3Rpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQuPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDxwYXJhPgorICAgICAgICBXZSBzZXQgVklEX1RZUEVfQ0FQVFVSRSBzbyB0aGF0IHdlIGFyZSBzZWVuIGFzIGEgY2FwdHVyZSBjYXJkLAorICAgICAgICBWSURfVFlQRV9DSFJPTUFLRVkgc28gdGhlIGFwcGxpY2F0aW9uIGtub3dzIGl0IGlzIHRpbWUgdG8gZHJhdyBpbiB2aXJ1bGVudAorICAgICAgICBwdXJwbGUsIGFuZCBWSURfVFlQRV9TQ0FMRVMgYmVjYXVzZSB3ZSBjYW4gYmUgcmVzaXplZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgT3VyIHNldHVwIGlzIGZhaXJseSBzaW1pbGFyLiBUaGlzIHRpbWUgd2UgYWxzbyB3YW50IGFuIGludGVycnVwdCBsaW5lCisgICAgICAgIGZvciB0aGUgJ2ZyYW1lIGNhcHR1cmVkJyBzaWduYWwuIE5vdCBhbGwgY2FyZHMgaGF2ZSB0aGlzIHNvIHNvbWUgb2YgdGhlbQorICAgICAgICBjYW5ub3QgaGFuZGxlIHBvbGwoKS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIGludCBpbyA9IDB4MzIwOworc3RhdGljIGludCBpcnEgPSAxMTsKKworaW50IF9faW5pdCBteWNhbWVyYV9pbml0KHN0cnVjdCB2aWRlb19pbml0ICp2KQoreworICAgICAgICBpZighcmVxdWVzdF9yZWdpb24oaW8sIE1ZX0lPX1NJWkUsICJteWNhbWVyYSIpKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIAorICAgICAgICAgICAgICAgICAgICAgICJteWNhbWVyYTogcG9ydCAweCUwM1ggaXMgaW4gdXNlLlxuIiwgaW8pOworICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgIH0KKworICAgICAgICBpZih2aWRlb19kZXZpY2VfcmVnaXN0ZXIoJmFtcDtteV9jYW1lcmEsIAorICAgICAgICAgICAgVkZMX1RZUEVfR1JBQkJFUik9PS0xKSB7CisgICAgICAgICAgICAgICAgcmVsZWFzZV9yZWdpb24oaW8sIE1ZX0lPX1NJWkUpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIGxpdHRsZSBjaGFuZ2VkIGZyb20gdGhlIG5lZWRzIG9mIHRoZSByYWRpbyBjYXJkLiBXZSBzcGVjaWZ5CisgICAgICAgIFZGTF9UWVBFX0dSQUJCRVIgdGhpcyB0aW1lIGFzIHdlIHdhbnQgdG8gYmUgYWxsb2NhdGVkIGEgL2Rldi92aWRlbyBuYW1lLgorICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0ib3B2aWQiPgorICA8dGl0bGU+T3BlbmluZyBBbmQgQ2xvc2luZyBUaGUgQ2FwdHVyZSBEZXZpY2U8L3RpdGxlPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIGludCB1c2VycyA9IDA7CisKK3N0YXRpYyBpbnQgY2FtZXJhX29wZW4oc3R1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIGludCBmbGFncykKK3sKKyAgICAgICAgaWYodXNlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAgICAgaWYocmVxdWVzdF9pcnEoaXJxLCBjYW1lcmFfaXJxLCAwLCAiY2FtZXJhIiwgZGV2KSZsdDswKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgIHVzZXJzKys7CisgICAgICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgY2FtZXJhX2Nsb3NlKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldikKK3sKKyAgICAgICAgdXNlcnMtLTsKKyAgICAgICAgZnJlZV9pcnEoaXJxLCBkZXYpOworfQorICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhlIG9wZW4gYW5kIGNsb3NlIHJvdXRpbmVzIGFyZSBhbHNvIHF1aXRlIHNpbWlsYXIuIFRoZSBvbmx5IHJlYWwgY2hhbmdlIGlzCisgICAgICAgIHRoYXQgd2Ugbm93IHJlcXVlc3QgYW4gaW50ZXJydXB0IGZvciB0aGUgY2FtZXJhIGRldmljZSBpbnRlcnJ1cHQgbGluZS4gSWYgd2UKKyAgICAgICAgY2Fubm90IGdldCB0aGUgaW50ZXJydXB0IHdlIHJlcG9ydCBFQlVTWSB0byB0aGUgYXBwbGljYXRpb24gYW5kIGdpdmUgdXAuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJpcnF2aWQiPgorICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsaW5nPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICAgIE91ciBleGFtcGxlIGhhbmRsZXIgaXMgZm9yIGFuIElTQSBidXMgZGV2aWNlLiBJZiBpdCB3YXMgUENJIHlvdSB3b3VsZCBiZQorICAgICAgICBhYmxlIHRvIHNoYXJlIHRoZSBpbnRlcnJ1cHQgYW5kIHdvdWxkIGhhdmUgc2V0IFNBX1NISVJRIHRvIGluZGljYXRlIGEgCisgICAgICAgIHNoYXJlZCBJUlEuIFdlIHBhc3MgdGhlIGRldmljZSBwb2ludGVyIGFzIHRoZSBpbnRlcnJ1cHQgcm91dGluZSBhcmd1bWVudC4gV2UKKyAgICAgICAgZG9uJ3QgbmVlZCB0byBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgb25lIGNhcmQgYnV0IGRvaW5nIHRoaXMgd2lsbCBtYWtlIGl0CisgICAgICAgIGVhc2llciB0byB1cGdyYWRlIHRoZSBkcml2ZXIgZm9yIG11bHRpcGxlIGRldmljZXMgaW4gdGhlIGZ1dHVyZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgT3VyIGludGVycnVwdCByb3V0aW5lIG5lZWRzIHRvIGRvIGxpdHRsZSBpZiB3ZSBhc3N1bWUgdGhlIGNhcmQgY2FuIHNpbXBseQorICAgICAgICBxdWV1ZSBvbmUgZnJhbWUgdG8gYmUgcmVhZCBhZnRlciBpdCBjYXB0dXJlcyBpdC4gCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKK3N0YXRpYyBzdHJ1Y3Qgd2FpdF9xdWV1ZSAqY2FwdHVyZV93YWl0Oworc3RhdGljIGludCBjYXB0dXJlX3JlYWR5ID0gMDsKKworc3RhdGljIHZvaWQgY2FtZXJhX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAgICAgY2FwdHVyZV9yZWFkeT0xOworICAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmFtcDtjYXB0dXJlX3dhaXQpOworfQorICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhlIGludGVycnVwdCBoYW5kbGVyIGlzIG5pY2UgYW5kIHNpbXBsZSBmb3IgdGhpcyBjYXJkIGFzIHdlIGFyZSBhc3N1bWluZworICAgICAgICB0aGUgY2FyZCBpcyBidWZmZXJpbmcgdGhlIGZyYW1lIGZvciB1cy4gVGhpcyBtZWFucyB3ZSBoYXZlIGxpdHRsZSB0byBkbyBidXQKKyAgICAgICAgd2FrZSB1cCAgICAgICAgYW55Ym9keSBpbnRlcmVzdGVkLiBXZSBhbHNvIHNldCBhIGNhcHR1cmVfcmVhZHkgZmxhZywgYXMgd2UgbWF5CisgICAgICAgIGNhcHR1cmUgYSBmcmFtZSBiZWZvcmUgYW4gYXBwbGljYXRpb24gbmVlZHMgaXQuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGtub3cKKyAgICAgICAgdGhhdCBhIGZyYW1lIGlzIHJlYWR5LiBJZiB3ZSBoYWQgdG8gY29sbGVjdCB0aGUgZnJhbWUgb24gdGhlIGludGVycnVwdCBsaWZlCisgICAgICAgIHdvdWxkIGJlIG1vcmUgY29tcGxleC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIHR3byBuZXcgcm91dGluZXMgd2UgbmVlZCB0byBzdXBwbHkgYXJlIGNhbWVyYV9yZWFkIHdoaWNoIHJldHVybnMgYQorICAgICAgICBmcmFtZSwgYW5kIGNhbWVyYV9wb2xsIHdoaWNoIHdhaXRzIGZvciBhIGZyYW1lIHRvIGJlY29tZSByZWFkeS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIGludCBjYW1lcmFfcG9sbChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIAorCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZSAqd2FpdCkKK3sKKyAgICAgICAgcG9sbF93YWl0KGZpbGUsICZhbXA7Y2FwdHVyZV93YWl0LCB3YWl0KTsKKyAgICAgICAgaWYoY2FwdHVyZV9yZWFkKQorICAgICAgICAgICAgICAgIHJldHVybiBQT0xMSU58UE9MTFJETk9STTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIE91ciB3YWl0IHF1ZXVlIGZvciBwb2xsaW5nIGlzIHRoZSBjYXB0dXJlX3dhaXQgcXVldWUuIFRoaXMgd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgdGFzayB0byBiZSB3b2tlbiB1cCBieSBvdXIgY2FtZXJhX2lycSByb3V0aW5lLiBXZSBjaGVjayBjYXB0dXJlX3JlYWQgdG8gc2VlCisgICAgICAgIGlmIHRoZXJlIGlzIGFuIGltYWdlIHByZXNlbnQgYW5kIGlmIHNvIHJlcG9ydCB0aGF0IGl0IGlzIHJlYWRhYmxlLgorICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0icmR2aWQiPgorICA8dGl0bGU+UmVhZGluZyBUaGUgVmlkZW8gSW1hZ2U8L3RpdGxlPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIGxvbmcgY2FtZXJhX3JlYWQoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisgICAgICAgIHN0cnVjdCB3YWl0X3F1ZXVlIHdhaXQgPSB7IGN1cnJlbnQsIE5VTEwgfTsKKyAgICAgICAgdTggKnB0cjsKKyAgICAgICAgaW50IGxlbjsKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgYWRkX3dhaXRfcXVldWUoJmFtcDtjYXB0dXJlX3dhaXQsICZhbXA7d2FpdCk7CisKKyAgICAgICAgd2hpbGUoIWNhcHR1cmVfcmVhZHkpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihmaWxlLT5mbGFncyZhbXA7T19OREVMQVkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJmFtcDtjYXB0dXJlX3dhaXQsICZhbXA7d2FpdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVdPVUxEQkxPQ0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZhbXA7Y2FwdHVyZV93YWl0LCAmYW1wO3dhaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2hlZHVsZSgpOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworICAgICAgICB9CisgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZhbXA7Y2FwdHVyZV93YWl0LCAmYW1wO3dhaXQpOworICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHdlIGhhdmUgdG8gZG8gaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdhaXRzIHVudGlsCisgICAgICAgIHRoZSBuZXh0IGZyYW1lIGlzIHJlYWR5LiBUaGUgY29kZSBoZXJlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG1vdXNlIGNvZGUKKyAgICAgICAgd2UgdXNlZCBlYXJsaWVyIGluIHRoaXMgY2hhcHRlci4gSXQgaXMgb25lIG9mIHRoZSBjb21tb24gYnVpbGRpbmcgYmxvY2tzIG9mCisgICAgICAgIExpbnV4IGRldmljZSBkcml2ZXIgY29kZSBhbmQgcHJvYmFibHkgb25lIHdoaWNoIHlvdSB3aWxsIGZpbmQgb2NjdXJzIGluIGFueQorICAgICAgICBkcml2ZXJzIHlvdSB3cml0ZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgV2Ugd2FpdCBmb3IgYSBmcmFtZSB0byBiZSByZWFkeSwgb3IgZm9yIGEgc2lnbmFsIHRvIGludGVycnVwdCBvdXIgd2FpdGluZy4gSWYgYQorICAgICAgICBzaWduYWwgb2NjdXJzIHdlIG5lZWQgdG8gcmV0dXJuIGZyb20gdGhlIHN5c3RlbSBjYWxsIHNvIHRoYXQgdGhlIHNpZ25hbCBjYW4KKyAgICAgICAgYmUgc2VudCB0byB0aGUgYXBwbGljYXRpb24gaXRzZWxmLiBXZSBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBhY3R1YWxseQorICAgICAgICB3YW50ZWQgdG8gYXZvaWQgd2FpdGluZyAtIGllICBpZiB0aGV5IGFyZSB1c2luZyBub24tYmxvY2tpbmcgSS9PIGFuZCBoYXZlIG90aGVyIHRoaW5ncyAKKyAgICAgICAgdG8gZ2V0IG9uIHdpdGguCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIE5leHQgd2UgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSB1c2VyIGFwcGxpY2F0aW9uLiBUaGlzIGlzIHJhcmVseQorICAgICAgICBhcyBlYXN5IGFzIG91ciBleGFtcGxlIG1ha2VzIG91dC4gV2Ugd2lsbCBhZGQgY2FwdHVyZV93LCBhbmQgY2FwdHVyZV9oIGhlcmUKKyAgICAgICAgdG8gaG9sZCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgY2FwdHVyZWQgaW1hZ2UuIFdlIGFzc3VtZSB0aGUgY2FyZCBvbmx5CisgICAgICAgIHN1cHBvcnRzIDI0Yml0IFJHQiBmb3Igbm93LgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisKKyAgICAgICAgY2FwdHVyZV9yZWFkeSA9IDA7CisKKyAgICAgICAgcHRyPSh1OCAqKWJ1ZjsKKyAgICAgICAgbGVuID0gY2FwdHVyZV93ICogMyAqIGNhcHR1cmVfaDsgLyogMjRiaXQgUkdCICovCisKKyAgICAgICAgaWYobGVuPmNvdW50KQorICAgICAgICAgICAgICAgIGxlbj1jb3VudDsgIC8qIERvZXNuJ3QgYWxsIGZpdCAqLworCisgICAgICAgIGZvcihpPTA7IGkmbHQ7bGVuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXRfdXNlcihpbmIoaW8rSU1BR0VfREFUQSksIHB0cik7CisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgIH0KKworICAgICAgICBoYXJkd2FyZV9yZXN0YXJ0X2NhcHR1cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIGk7Cit9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIEZvciBhIHJlYWwgaGFyZHdhcmUgZGV2aWNlIHlvdSB3b3VsZCB0cnkgdG8gYXZvaWQgdGhlIGxvb3Agd2l0aCBwdXRfdXNlcigpLgorICAgICAgICBFYWNoIGNhbGwgdG8gcHV0X3VzZXIoKSBoYXMgYSB0aW1lIG92ZXJoZWFkIGNoZWNraW5nIHdoZXRoZXIgdGhlIGFjY2Vzc2VzIHRvIHVzZXIKKyAgICAgICAgc3BhY2UgYXJlIGFsbG93ZWQuIEl0IHdvdWxkIGJlIGJldHRlciB0byByZWFkIGEgbGluZSBpbnRvIGEgdGVtcG9yYXJ5IGJ1ZmZlcgorICAgICAgICB0aGVuIGNvcHkgdGhpcyB0byB1c2VyIHNwYWNlIGluIG9uZSBnby4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgSGF2aW5nIGNhcHR1cmVkIHRoZSBpbWFnZSBhbmQgcHV0IGl0IGludG8gdXNlciBzcGFjZSB3ZSBjYW4ga2ljayB0aGUgY2FyZCB0bworICAgICAgICBnZXQgdGhlIG5leHQgZnJhbWUgYWNxdWlyZWQuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJpb2N2aWQiPgorICA8dGl0bGU+VmlkZW8gSW9jdGwgSGFuZGxpbmc8L3RpdGxlPgorICA8cGFyYT4KKyAgICAgICAgQXMgd2l0aCB0aGUgcmFkaW8gZHJpdmVyIHRoZSBtYWpvciBjb250cm9sIGludGVyZmFjZSBpcyB2aWEgdGhlIGlvY3RsKCkKKyAgICAgICAgZnVuY3Rpb24uIFZpZGVvIGNhcHR1cmUgZGV2aWNlcyBzdXBwb3J0IHRoZSBzYW1lIHR1bmVyIGNhbGxzIGFzIGEgcmFkaW8KKyAgICAgICAgZGV2aWNlIGFuZCBhbHNvIHN1cHBvcnQgYWRkaXRpb25hbCBjYWxscyB0byBjb250cm9sIGhvdyB0aGUgdmlkZW8gZnVuY3Rpb25zCisgICAgICAgIGFyZSBoYW5kbGVkLiBJbiB0aGlzIHNpbXBsZSBleGFtcGxlIHRoZSBjYXJkIGhhcyBubyB0dW5lcnMgdG8gYXZvaWQgbWFraW5nCisgICAgICAgIHRoZSBjb2RlIGNvbXBsZXguIAorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisKK3N0YXRpYyBpbnQgY2FtZXJhX2lvY3RsKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworICAgICAgICBzd2l0Y2goY21kKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHQ0FQOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IHY7CisgICAgICAgICAgICAgICAgICAgICAgICB2LnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJRF9UWVBFX0NIUk9NQUtFWXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURfVFlQRV9TQ0FMRVN8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklEX1RZUEVfT1ZFUkxBWTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuY2hhbm5lbHMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgdi5hdWRpb3MgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdi5tYXh3aWR0aCA9IDY0MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYubWlud2lkdGggPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4aGVpZ2h0ID0gNDgwOworICAgICAgICAgICAgICAgICAgICAgICAgdi5taW5oZWlnaHQgPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2Lm5hbWUsICJNeSBDYW1lcmEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7diwgc2l6ZW9mKHYpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGlvY3RsIHdlIG11c3Qgc3VwcG9ydCBhbmQgd2hpY2ggYWxsIHZpZGVvIGNhcHR1cmUgYW5kIHJhZGlvCisgICAgICAgIGRldmljZXMgYXJlIHJlcXVpcmVkIHRvIHN1cHBvcnQgaXMgVklESU9DR0NBUC4gVGhpcyBiZWhhdmVzIGV4YWN0bHkgdGhlIHNhbWUKKyAgICAgICAgYXMgd2l0aCBhIHJhZGlvIGRldmljZS4gVGhpcyB0aW1lLCBob3dldmVyLCB3ZSByZXBvcnQgdGhlIGV4dHJhIGNhcGFiaWxpdGllcworICAgICAgICB3ZSBvdXRsaW5lZCBlYXJsaWVyIG9uIHdoZW4gZGVmaW5pbmcgb3VyIHZpZGVvX2RldiBzdHJ1Y3R1cmUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFdlIG5vdyBzZXQgdGhlIHZpZGVvIGZsYWdzIHNheWluZyB0aGF0IHdlIHN1cHBvcnQgb3ZlcmxheSwgY2FwdHVyZSwKKyAgICAgICAgc2NhbGluZyBhbmQgY2hyb21ha2V5LiBXZSBhbHNvIHJlcG9ydCBzaXplIGxpbWl0cyAtIG91ciBzbWFsbGVzdCBpbWFnZSBpcworICAgICAgICAxNngxNiBwaXhlbHMsIG91ciBsYXJnZXN0IGlzIDY0MHg0ODAuIAorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgd2UgcmVwb3J0IG5vIGF1ZGlvIGFuZCBubyB0dW5pbmcgY2FwYWJpbGl0aWVzIGF0IGFsbC4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+ICAgICAgICAKKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0NIQU46CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2NoYW5uZWwgdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuY2hhbm5lbCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuZmxhZ3MgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdi50dW5lcnMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdi50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisgICAgICAgICAgICAgICAgICAgICAgICB2Lm5vcm0gPSBWSURFT19NT0RFX0FVVE87CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiQ2FtZXJhIElucHV0Iik7YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFRoaXMgZm9sbG93cyB3aGF0IGlzIHZlcnkgbXVjaCB0aGUgc3RhbmRhcmQgd2F5IGFuIGlvY3RsIGhhbmRsZXIgbG9va3MKKyAgICAgICAgaW4gTGludXguIFdlIGNvcHkgdGhlIGRhdGEgaW50byBhIGtlcm5lbCBzcGFjZSB2YXJpYWJsZSBhbmQgd2UgY2hlY2sgdGhhdCB0aGUKKyAgICAgICAgcmVxdWVzdCBpcyB2YWxpZCAoaW4gdGhpcyBjYXNlIHRoYXQgdGhlIGlucHV0IGlzIDApLiBGaW5hbGx5IHdlIGNvcHkgdGhlCisgICAgICAgIGNhbWVyYSBpbmZvIGJhY2sgdG8gdGhlIHVzZXIuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBWSURJT0NHQ0hBTiBpb2N0bCBhbGxvd3MgYSB1c2VyIHRvIGFzayBhYm91dCB2aWRlbyBjaGFubmVscyAodGhhdCBpcworICAgICAgICBpbnB1dHMgdG8gdGhlIHZpZGVvIGNhcmQpLiBPdXIgZXhhbXBsZSBjYXJkIGhhcyBhIHNpbmdsZSBjYW1lcmEgaW5wdXQuIFRoZQorICAgICAgICBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZSBhcmUKKyAgPC9wYXJhPgorICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2hhbm5lbCBmaWVsZHM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorCisgICA8ZW50cnk+Y2hhbm5lbDwvZW50cnk+PGVudHJ5PlRoZSBjaGFubmVsIG51bWJlciB3ZSBhcmUgc2VsZWN0aW5nPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+bmFtZTwvZW50cnk+PGVudHJ5PlRoZSBuYW1lIGZvciB0aGlzIGNoYW5uZWwuIFRoaXMgaXMgaW50ZW5kZWQKKyAgICAgICAgICAgICAgICAgICB0byBkZXNjcmliZSB0aGUgcG9ydCB0byB0aGUgdXNlci4KKyAgICAgICAgICAgICAgICAgICBBcHByb3ByaWF0ZSBuYW1lcyBhcmUgdGhlcmVmb3JlIHRoaW5ncyBsaWtlCisgICAgICAgICAgICAgICAgICAgIkNhbWVyYSIgIlNDQVJUIGlucHV0IjwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgPGVudHJ5PmZsYWdzPC9lbnRyeT48ZW50cnk+Q2hhbm5lbCBwcm9wZXJ0aWVzPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+dHlwZTwvZW50cnk+PGVudHJ5PklucHV0IHR5cGU8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT5ub3JtPC9lbnRyeT48ZW50cnk+VGhlIGN1cnJlbnQgdGVsZXZpc2lvbiBlbmNvZGluZyBiZWluZyB1c2VkCisgICAgICAgICAgICAgICAgICAgaWYgcmVsZXZhbnQgZm9yIHRoaXMgY2hhbm5lbC4KKyAgICA8L2VudHJ5PgorICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb19jaGFubmVsIGZsYWdzPC90aXRsZT4KKyAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgICA8dGJvZHk+CisgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX1ZDX1RVTkVSPC9lbnRyeT48ZW50cnk+Q2hhbm5lbCBoYXMgYSB0dW5lci48L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX1ZDX0FVRElPPC9lbnRyeT48ZW50cnk+Q2hhbm5lbCBoYXMgYXVkaW8uPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2hhbm5lbCB0eXBlczwvdGl0bGU+CisgICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICAgPHRib2R5PgorICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5WSURFT19UWVBFX1RWPC9lbnRyeT48ZW50cnk+VGVsZXZpc2lvbiBpbnB1dC48L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX1RZUEVfQ0FNRVJBPC9lbnRyeT48ZW50cnk+Rml4ZWQgY2FtZXJhIGlucHV0LjwvZW50cnk+CisgICA8L3Jvdz48cm93PgorCTxlbnRyeT4wPC9lbnRyeT48ZW50cnk+VHlwZSBpcyB1bmtub3duLjwvZW50cnk+CisgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBmcmFtZT0iYWxsIj48dGl0bGU+c3RydWN0IHZpZGVvX2NoYW5uZWwgbm9ybXM8L3RpdGxlPgorICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgIDx0Ym9keT4KKyAgICA8cm93PgorICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9QQUw8L2VudHJ5PjxlbnRyeT5QQUwgZW5jb2RlZCBUZWxldmlzaW9uPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5WSURFT19NT0RFX05UU0M8L2VudHJ5PjxlbnRyeT5OVFNDIChVUykgZW5jb2RlZCBUZWxldmlzaW9uPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5WSURFT19NT0RFX1NFQ0FNPC9lbnRyeT48ZW50cnk+U0VDQU0gKEZyZW5jaCkgVGVsZXZpc2lvbiA8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX01PREVfQVVUTzwvZW50cnk+PGVudHJ5PkF1dG9tYXRpYyBzd2l0Y2hpbmcsIG9yIGZvcm1hdCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXR0ZXI8L2VudHJ5PgorICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgVklESU9DU0NIQU4gaW9jdGwgYWxsb3dzIGEgdXNlciB0byBjaGFuZ2UgY2hhbm5lbCBhbmQgdG8KKyAgICAgICAgcmVxdWVzdCB0aGUgbm9ybSBpcyBjaGFuZ2VkIC0gZm9yIGV4YW1wbGUgdG8gc3dpdGNoIGJldHdlZW4gYSBQQUwgb3IgYW4gTlRTQworICAgICAgICBmb3JtYXQgY2FtZXJhLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTQ0hBTjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5jaGFubmVsICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5ub3JtICE9IFZJREVPX01PREVfQVVUTykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2FsbCBpbiBvdXIgZHJpdmVyIGlzIHJlbWFya2FibHkgZWFzeS4gQmVjYXVzZSB3ZQorICAgICAgICBhcmUgYXNzdW1pbmcgZml4ZWQgZm9ybWF0IGhhcmR3YXJlIHdlIG5lZWQgb25seSBjaGVjayB0aGF0IHRoZSB1c2VyIGhhcyBub3QKKyAgICAgICAgdHJpZWQgdG8gY2hhbmdlIGFueXRoaW5nLiAKKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIHVzZXIgYWxzbyBuZWVkcyB0byBiZSBhYmxlIHRvIGNvbmZpZ3VyZSBhbmQgYWRqdXN0IHRoZSBwaWN0dXJlIHRoZXkgYXJlCisgICAgICAgIHNlZWluZy4gVGhpcyBpcyBtdWNoIGxpa2UgYWRqdXN0aW5nIGEgdGVsZXZpc2lvbiBzZXQuIEEgdXNlciBhcHBsaWNhdGlvbgorICAgICAgICBhbHNvIG5lZWRzIHRvIGtub3cgdGhlIHBhbGV0dGUgYmVpbmcgdXNlZCBzbyB0aGF0IGl0IGtub3dzIGhvdyB0byBkaXNwbGF5CisgICAgICAgIHRoZSBpbWFnZSB0aGF0IGhhcyBiZWVuIGNhcHR1cmVkLiBUaGUgVklESU9DR1BJQ1QgYW5kIFZJRElPQ1NQSUNUIGlvY3RsCisgICAgICAgIGNhbGxzIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbi4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR1BJQ1QKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2OworICAgICAgICAgICAgICAgICAgICAgICAgdi5icmlnaHRuZXNzID0gaGFyZHdhcmVfYnJpZ2h0bmVzcygpOworICAgICAgICAgICAgICAgICAgICAgICAgdi5odWUgPSBoYXJkd2FyZV9odWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuY29sb3VyID0gaGFyZHdhcmVfc2F0dXJhdGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgdi5jb250cmFzdCA9IGhhcmR3YXJlX2JyaWdodG5lc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBzZXR0YWJsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgdi53aGl0ZW5lc3MgPSAzMjc2ODsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuZGVwdGggPSAyNDsgICAgICAgICAgIC8qIDI0Yml0ICovCisgICAgICAgICAgICAgICAgICAgICAgICB2LnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKCZhbXA7diwgYXJnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHYpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhlIGJyaWdodG5lc3MsIGh1ZSwgY29sb3IsIGFuZCBjb250cmFzdCBwcm92aWRlIHRoZSBwaWN0dXJlIGNvbnRyb2xzIHRoYXQKKyAgICAgICAgYXJlIGFraW4gdG8gYSBjb252ZW50aW9uYWwgdGVsZXZpc2lvbi4gV2hpdGVuZXNzIHByb3ZpZGVzIGFkZGl0aW9uYWwKKyAgICAgICAgY29udHJvbCBmb3IgZ3JleXNjYWxlIGltYWdlcy4gQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgc2NhbGVkIGJldHdlZW4gMC02NTUzNQorICAgICAgICBhbmQgaGF2ZSAzMjc2OCBhcyB0aGUgbWlkIHBvaW50IHNldHRpbmcuIFRoZSBzY2FsaW5nIG1lYW5zIHRoYXQgYXBwbGljYXRpb25zCisgICAgICAgIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBjYXBhYmlsaXR5IHJhbmdlIG9mIHRoZSBoYXJkd2FyZSBidXQgY2FuIGxldAorICAgICAgICBpdCBtYWtlIGEgYmVzdCBlZmZvcnQgYXR0ZW1wdC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgT3VyIGRlcHRoIGlzIDI0LCBhcyB0aGlzIGlzIGluIGJpdHMuIFdlIHdpbGwgYmUgcmV0dXJuaW5nIFJHQjI0IGZvcm1hdC4gVGhpcworICAgICAgICBoYXMgb25lIGJ5dGUgb2YgcmVkLCB0aGVuIG9uZSBvZiBncmVlbiwgdGhlbiBvbmUgb2YgYmx1ZS4gVGhpcyB0aGVuIHJlcGVhdHMKKyAgICAgICAgZm9yIGV2ZXJ5IG90aGVyIHBpeGVsIGluIHRoZSBpbWFnZS4gVGhlIG90aGVyIGNvbW1vbiBmb3JtYXRzIHRoZSBpbnRlcmZhY2UgCisgICAgICAgIGRlZmluZXMgYXJlCisgIDwvcGFyYT4KKyAgIDx0YWJsZSBmcmFtZT0iYWxsIj48dGl0bGU+RnJhbWVidWZmZXIgRW5jb2RpbmdzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgPHRib2R5PgorICAgPHJvdz4KKyAgIDxlbnRyeT5HUkVZPC9lbnRyeT48ZW50cnk+TGluZWFyIGdyZXlzY2FsZS4gVGhpcyBpcyBmb3Igc2ltcGxlIGNhbWVyYXMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbGlrZTwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgPGVudHJ5PlJHQjU2NTwvZW50cnk+PGVudHJ5PlRoZSB0b3AgNSBiaXRzIGhvbGQgMzIgcmVkIGxldmVscywgdGhlIG5leHQgc2l4IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgZ3JlZW4gYW5kIHRoZSBsb3cgNSBiaXRzIGhvbGQgYmx1ZS4gPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+UkdCNTU1PC9lbnRyeT48ZW50cnk+VGhlIHRvcCBiaXQgaXMgY2xlYXIuIFRoZSByZWQgZ3JlZW4gYW5kIGJsdWUgbGV2ZWxzCisgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIG9jY3VweSBmaXZlIGJpdHMuPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDxwYXJhPgorICAgICAgICBBZGRpdGlvbmFsIG1vZGVzIGFyZSBzdXBwb3J0IGZvciBZVVYgY2FwdHVyZSBmb3JtYXRzLiBUaGVzZSBhcmUgY29tbW9uIGZvcgorICAgICAgICBUViBhbmQgdmlkZW8gY29uZmVyZW5jaW5nIGFwcGxpY2F0aW9ucy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIFZJRElPQ1NQSUNUIGlvY3RsIGFsbG93cyBhIHVzZXIgdG8gc2V0IHNvbWUgb2YgdGhlIHBpY3R1cmUgcGFyYW1ldGVycy4KKyAgICAgICAgRXhhY3RseSB3aGljaCBvbmVzIGFyZSBzdXBwb3J0ZWQgZGVwZW5kcyBoZWF2aWx5IG9uIHRoZSBjYXJkIGl0c2VsZi4gSXQgaXMKKyAgICAgICAgcG9zc2libGUgdG8gc3VwcG9ydCBtYW55IG1vZGVzIGFuZCBlZmZlY3RzIGluIHNvZnR3YXJlLiBJbiBnZW5lcmFsIGRvaW5nCisgICAgICAgIHRoaXMgaW4gdGhlIGtlcm5lbCBpcyBhIGJhZCBpZGVhLiBWaWRlbyBjYXB0dXJlIGlzIGEgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlCisgICAgICAgIGFwcGxpY2F0aW9uIGFuZCB0aGUgcHJvZ3JhbXMgY2FuIG9mdGVuIGRvIGJldHRlciBpZiB0aGV5IGFyZW4ndCBiZWluZworICAgICAgICAnaGVscGVkJyBieSBhbiBvdmVya2VlbiBkcml2ZXIgd3JpdGVyLiBUaHVzIGZvciBvdXIgZGV2aWNlIHdlIHdpbGwgcmVwb3J0CisgICAgICAgIFJHQjI0IG9ubHkgYW5kIHJlZnVzZSB0byBhbGxvdyBhIGNoYW5nZS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU1BJQ1Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3BpY3R1cmUgdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuZGVwdGghPTI0IHx8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkdCMjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX2JyaWdodG5lc3Modi5icmlnaHRuZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9oYXJkd2FyZV9odWUodi5odWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX3NhdHVyYXRpb24odi5jb2xvdXIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX2JyaWdodG5lc3Modi5jb250cmFzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgV2UgY2hlY2sgdGhlIHVzZXIgaGFzIG5vdCB0cmllZCB0byBjaGFuZ2UgdGhlIHBhbGV0dGUgb3IgdGhlIGRlcHRoLiBXZSBkbworICAgICAgICBub3Qgd2FudCB0byBjYXJyeSBvdXQgc29tZSBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlbiByZXR1cm4gYW4gZXJyb3IuIFRoaXMgbWF5CisgICAgICAgIGNvbmZ1c2UgdGhlIGFwcGxpY2F0aW9uIHdoaWNoIHdpbGwgYmUgYXNzdW1pbmcgbm8gY2hhbmdlIG9jY3VycmVkLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBJbiBtdWNoIHRoZSBzYW1lIHdheSBhcyB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIHNldCB0aGUgcGljdHVyZSBjb250cm9scyB0bworICAgICAgICBnZXQgdGhlIHJpZ2h0IGNhcHR1cmUgaW1hZ2VzLCBtYW55IGNhcmRzIG5lZWQgdG8ga25vdyB3aGF0IHRoZXkgYXJlCisgICAgICAgIGRpc3BsYXlpbmcgb250byB3aGVuIGdlbmVyYXRpbmcgb3ZlcmxheSBvdXRwdXQuIEluIHNvbWUgY2FzZXMgZ2V0dGluZyB0aGlzCisgICAgICAgIHdyb25nIGV2ZW4gbWFrZXMgYSBuYXN0eSBtZXNzIG9yIG1heSBjcmFzaCB0aGUgY29tcHV0ZXIuIEZvciB0aGF0IHJlYXNvbgorICAgICAgICB0aGUgVklESU9DU0JVRiBpb2N0bCB1c2VkIHRvIHNldCB1cCB0aGUgZnJhbWUgYnVmZmVyIGluZm9ybWF0aW9uIG1heSB3ZWxsCisgICAgICAgIG9ubHkgYmUgdXNhYmxlIGJ5IHJvb3QuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFdlIHdpbGwgYXNzdW1lIG91ciBjYXJkIGlzIG9uZSBvZiB0aGUgb2xkIElTQSBkZXZpY2VzIHdpdGggZmVhdHVyZSBjb25uZWN0b3IKKyAgICAgICAgYW5kIG9ubHkgc3VwcG9ydHMgYSBjb3VwbGUgb2Ygc3RhbmRhcmQgdmlkZW8gbW9kZXMuIFZlcnkgY29tbW9uIGZvciBvbGRlcgorICAgICAgICBjYXJkcyBhbHRob3VnaCB0aGUgUENJIGRldmljZXMgYXJlIHdheSBzbWFydGVyIHRoYW4gdGhpcy4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIHN0cnVjdCB2aWRlb19idWZmZXIgY2FwdHVyZV9mYjsKKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0ZCVUY6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjYXB0dXJlX2ZiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNhcHR1cmVfZmIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBXZSBrZWVwIHRoZSBmcmFtZSBidWZmZXIgaW5mb3JtYXRpb24gaW4gdGhlIGZvcm1hdCB0aGUgaW9jdGwgdXNlcy4gVGhpcworICAgICAgICBtYWtlcyBpdCBuaWNlIGFuZCBlYXN5IHRvIHdvcmsgd2l0aCBpbiB0aGUgaW9jdGwgY2FsbHMuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTRkJVRjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYnVmZmVyIHY7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2LndpZHRoIT0zMjAgJmFtcDsmYW1wOyB2LndpZHRoIT02NDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5oZWlnaHQhPTIwMCAmYW1wOyZhbXA7IHYuaGVpZ2h0IT0yNDAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgdi5oZWlnaHQhPTQwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IHYuaGVpZ2h0ICE9NDgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYW1wO2NhcHR1cmVfZmIsICZhbXA7diwgc2l6ZW9mKHYpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF9mYigmYW1wO3YpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhlIGNhcGFibGUoKSBmdW5jdGlvbiBjaGVja3MgYSB1c2VyIGhhcyB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eS4gVGhlIExpbnV4CisgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0gaGFzIGEgc2V0IG9mIGFib3V0IDMwIGNhcGFiaWxpdGllcyBpbmRpY2F0aW5nIHByaXZpbGVnZWQKKyAgICAgICAgYWNjZXNzIHRvIHNlcnZpY2VzLiBUaGUgZGVmYXVsdCBzZXQgdXAgZ2l2ZXMgdGhlIHN1cGVydXNlciAodWlkIDApIGFsbCBvZgorICAgICAgICB0aGVtIGFuZCBub2JvZHkgZWxzZSBoYXMgYW55LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBXZSBjaGVjayB0aGF0IHRoZSB1c2VyIGhhcyB0aGUgU1lTX0FETUlOIGNhcGFiaWxpdHksIHRoYXQgaXMgdGhleSBhcmUKKyAgICAgICAgYWxsb3dlZCB0byBvcGVyYXRlIGFzIHRoZSBtYWNoaW5lIGFkbWluaXN0cmF0b3IuIFdlIGRvbid0IHdhbnQgYW55b25lIGJ1dAorICAgICAgICB0aGUgYWRtaW5pc3RyYXRvciBtYWtpbmcgYSBtZXNzIG9mIHRoZSBkaXNwbGF5LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBOZXh0IHdlIGNoZWNrIGZvciBzdGFuZGFyZCBQQyB2aWRlbyBtb2RlcyAoMzIwIG9yIDY0MCB3aWRlIHdpdGggZWl0aGVyCisgICAgICAgIEVHQSBvciBWR0EgZGVwdGhzKS4gSWYgdGhlIG1vZGUgaXMgbm90IGEgc3RhbmRhcmQgdmlkZW8gbW9kZSB3ZSByZWplY3QgaXQgYXMKKyAgICAgICAgbm90IHN1cHBvcnRlZCBieSBvdXIgY2FyZC4gSWYgdGhlIG1vZGUgaXMgYWNjZXB0YWJsZSB3ZSBzYXZlIGl0IHNvIHRoYXQKKyAgICAgICAgVklESU9DRkJVRiB3aWxsIGdpdmUgdGhlIHJpZ2h0IGFuc3dlciBuZXh0IHRpbWUgaXQgaXMgY2FsbGVkLiAgVGhlCisgICAgICAgIGhhcmR3YXJlX3NldF9mYigpIGZ1bmN0aW9uIGlzIHNvbWUgdW5kZXNjcmliZWQgY2FyZCBzcGVjaWZpYyBmdW5jdGlvbiB0bworICAgICAgICBwcm9ncmFtIHRoZSBjYXJkIGZvciB0aGUgZGVzaXJlZCBtb2RlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBCZWZvcmUgdGhlIGRyaXZlciBjYW4gZGlzcGxheSBhbiBvdmVybGF5IHdpbmRvdyBpdCBuZWVkcyB0byBrbm93IHdoZXJlIHRoZQorICAgICAgICB3aW5kb3cgc2hvdWxkIGJlIHBsYWNlZCwgYW5kIGFsc28gaG93IGxhcmdlIGl0IHNob3VsZCBiZS4gSWYgdGhlIGNhcmQKKyAgICAgICAgc3VwcG9ydHMgY2xpcHBpbmcgaXQgbmVlZHMgdG8ga25vdyB3aGljaCByZWN0YW5nbGVzIHRvIG9taXQgZnJvbSB0aGUKKyAgICAgICAgZGlzcGxheS4gVGhlIHZpZGVvX3dpbmRvdyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgd2F5IHRoZSBpbWFnZSAKKyAgICAgICAgc2hvdWxkIGJlIGRpc3BsYXllZC4gCisgICA8L3BhcmE+CisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb193aW5kb3cgZmllbGRzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgPHRib2R5PgorICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PndpZHRoPC9lbnRyeT48ZW50cnk+VGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgZGVzaXJlZCBpbWFnZS4gVGhlIGNhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heSB1c2UgYSBzbWFsbGVyIHNpemUgaWYgdGhpcyBzaXplIGlzIG5vdCBhdmFpbGFibGU8L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5oZWlnaHQ8L2VudHJ5PjxlbnRyeT5UaGUgaGVpZ2h0IG9mIHRoZSBpbWFnZS4gVGhlIGNhcmQgbWF5IHVzZSBhIHNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgaWYgdGhpcyBzaXplIGlzIG5vdCBhdmFpbGFibGUuPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+eDwvZW50cnk+PGVudHJ5PiAgIFRoZSBYIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBvZiB0aGUgd2luZG93LiBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiBwaXhlbHMgcmVsYXRpdmUgdG8gdGhlIGxlZnQgaGFuZCBlZGdlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGljdHVyZS4gTm90IGFsbCBjYXJkcyBjYW4gZGlzcGxheSBpbWFnZXMgYWxpZ25lZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBpeGVsIGJvdW5kYXJ5LiBJZiB0aGUgcG9zaXRpb24gaXMgdW5zdWl0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNhcmQgYWRqdXN0cyB0aGUgaW1hZ2UgcmlnaHQgYW5kIHJlZHVjZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC48L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT55PC9lbnRyeT48ZW50cnk+ICAgVGhlIFkgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IG9mIHRoZSB3aW5kb3cuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNvdW50ZWQgaW4gcGl4ZWxzIHJlbGF0aXZlIHRvIHRoZSB0b3AgZWRnZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY3R1cmUuIEFzIHdpdGggdGhlIHdpZHRoIGlmIHRoZSBjYXJkIGNhbm5vdAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSAgc3RhcnRpbmcgb24gdGhpcyBsaW5lIGl0IHdpbGwgYWRqdXN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PmNocm9tYWtleTwvZW50cnk+PGVudHJ5PlRoZSBjb2xvdXIgKGV4cHJlc3NlZCBpbiBSR0IzMiBmb3JtYXQpIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNocm9tYWtleSBjb2xvdXIgaWYgY2hyb21hIGtleWluZyBpcyBiZWluZyB1c2VkLiA8L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5jbGlwczwvZW50cnk+PGVudHJ5PkFuIGFycmF5IG9mIHJlY3RhbmdsZXMgdGhhdCBtdXN0IG5vdCBiZSBkcmF3bgorCQkJb3Zlci48L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5jbGlwY291bnQ8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIGNsaXBzIGluIHRoaXMgYXJyYXkuPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgICAgPHBhcmE+CisgICAgICAgIEVhY2ggY2xpcCBpcyBhIHN0cnVjdCB2aWRlb19jbGlwIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkcworICAgPC9wYXJhPgorICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT52aWRlb19jbGlwIGZpZWxkczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisgICAgICAgIDxlbnRyeT54LCB5PC9lbnRyeT48ZW50cnk+Q28tb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBkaXNwbGF5PC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+d2lkdGgsIGhlaWdodDwvZW50cnk+PGVudHJ5PldpZHRoIGFuZCBoZWlnaHQgaW4gcGl4ZWxzPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+bmV4dDwvZW50cnk+PGVudHJ5PkEgc3BhcmUgZmllbGQgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byB1c2U8L2VudHJ5PgorICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRyaXZlciBpcyByZXF1aXJlZCB0byBlbnN1cmUgaXQgYWx3YXlzIGRyYXdzIGluIHRoZSBhcmVhIHJlcXVlc3RlZCBvciBhICAgICAgICBzbWFsbGVyIGFyZWEsIGFuZCB0aGF0IGl0IG5ldmVyIGRyYXdzIGluIGFueSBvZiB0aGUgYXJlYXMgdGhhdCBhcmUgY2xpcHBlZC4KKyAgICAgICAgVGhpcyBtYXkgd2VsbCBtZWFuIGl0IGhhcyB0byBsZWF2ZSBhbG9uZS4gc21hbGwgYXJlYXMgdGhlIGFwcGxpY2F0aW9uIHdpc2hlZCB0byBiZQorICAgICAgICBkcmF3bi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgT3VyIGV4YW1wbGUgY2FyZCB1c2VzIGNocm9tYWtleSBzbyBkb2VzIG5vdCBoYXZlIHRvIGFkZHJlc3MgbW9zdCBvZiB0aGUKKyAgICAgICAgY2xpcHBpbmcuICBXZSB3aWxsIGFkZCBhIHZpZGVvX3dpbmRvdyBzdHJ1Y3R1cmUgdG8gb3VyIGdsb2JhbCB2YXJpYWJsZXMgdG8KKyAgICAgICAgcmVtZW1iZXIgb3VyIHBhcmFtZXRlcnMsIGFzIHdlIGRpZCB3aXRoIHRoZSBmcmFtZSBidWZmZXIuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dXSU46CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjYXB0dXJlX3dpbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNhcHR1cmVfd2luKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NXSU46CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3dpbmRvdyB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi53aWR0aCAmZ3Q7IDY0MCB8fCB2LmhlaWdodCAmZ3Q7IDQ4MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2LndpZHRoICZsdDsgMTYgfHwgdi5oZWlnaHQgJmx0OyAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zZXRfa2V5KHYuY2hyb21ha2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF93aW5kb3codik7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmFtcDtjYXB0dXJlX3dpbiwgJmFtcDt2LCBzaXplb2YodikpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZV93ID0gdi53aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVfaCA9IHYuaGVpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIENocm9tYWtleSBvdXIgc2V0dXAgaXMgZmFpcmx5IHNpbXBsZS4gTW9zdGx5IHdlIGhhdmUgdG8KKyAgICAgICAgY2hlY2sgdGhlIHZhbHVlcyBhcmUgc2FuZSBhbmQgbG9hZCB0aGVtIGludG8gdGhlIGNhcHR1cmUgY2FyZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgV2l0aCBhbGwgdGhlIHNldHVwIGRvbmUgd2UgY2FuIG5vdyB0dXJuIG9uIHRoZSBhY3R1YWwgY2FwdHVyZS9vdmVybGF5LiBUaGlzCisgICAgICAgIGlzIGRvbmUgd2l0aCB0aGUgVklESU9DQ0FQVFVSRSBpb2N0bC4gVGhpcyB0YWtlcyBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50CisgICAgICAgIHdoZXJlIDAgaXMgb24gYW5kIDEgaXMgb2ZmLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NDQVBUVVJFOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoZ2V0X3VzZXIodiwgKGludCAqKWFyZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodj09MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfY2FwdHVyZV9vZmYoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FwdHVyZV9mYi53aWR0aCA9PSAwIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY2FwdHVyZV93ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX2NhcHR1cmVfb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBXZSBncmFiIHRoZSBmbGFnIGZyb20gdXNlciBzcGFjZSBhbmQgZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlIGFjY29yZGluZyB0bworICAgICAgICBpdHMgdmFsdWUuIFRoZXJlIGlzIG9uZSBzbWFsbCBjb3JuZXIgY2FzZSB3ZSBoYXZlIHRvIGNvbnNpZGVyIGhlcmUuIFN1cHBvc2UKKyAgICAgICAgdGhhdCB0aGUgY2FwdHVyZSB3YXMgcmVxdWVzdGVkIGJlZm9yZSB0aGUgdmlkZW8gd2luZG93IG9yIHRoZSBmcmFtZSBidWZmZXIKKyAgICAgICAgaGFkIGJlZW4gc2V0IHVwLiBJbiB0aG9zZSBjYXNlcyB0aGVyZSB3aWxsIGJlIHVuY29uZmlndXJlZCBmaWVsZHMgaW4gb3VyCisgICAgICAgIGNhcmQgZGF0YSwgYXMgd2VsbCBhcyB1bmNvbmZpZ3VyZWQgaGFyZHdhcmUgc2V0dGluZ3MuIFdlIGNoZWNrIGZvciB0aGlzIGNhc2UgYW5kCisgICAgICAgIHJldHVybiBhbiBlcnJvciBpZiB0aGUgZnJhbWUgYnVmZmVyIG9yIHRoZSBjYXB0dXJlIHdpbmRvdyB3aWR0aCBpcyB6ZXJvLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7CisgICAgICAgIH0KK30KKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisKKyAgICAgICAgV2UgZG9uJ3QgbmVlZCB0byBzdXBwb3J0IGFueSBvdGhlciBpb2N0bHMsIHNvIGlmIHdlIGdldCB0aGlzIGZhciwgaXQgaXMgdGltZQorICAgICAgICB0byB0ZWxsIHRoZSB2aWRlbyBsYXllciB0aGF0IHdlIGRvbid0IG5vdyB3aGF0IHRoZSB1c2VyIGlzIHRhbGtpbmcgYWJvdXQuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJlbmR2aWQiPgorICA8dGl0bGU+T3RoZXIgRnVuY3Rpb25hbGl0eTwvdGl0bGU+CisgIDxwYXJhPgorICAgICAgICBUaGUgVmlkZW80TGludXggbGF5ZXIgc3VwcG9ydHMgYWRkaXRpb25hbCBmZWF0dXJlcywgaW5jbHVkaW5nIGEgaGlnaAorICAgICAgICBwZXJmb3JtYW5jZSBtbWFwKCkgYmFzZWQgY2FwdHVyZSBtb2RlIGFuZCBjYXB0dXJpbmcgcGFydCBvZiB0aGUgaW1hZ2UuIAorICAgICAgICBUaGVzZSBmZWF0dXJlcyBhcmUgb3V0IG9mIHRoZSBzY29wZSBvZiB0aGUgYm9vay4gIFlvdSBzaG91bGQgaG93ZXZlciBoYXZlIGVub3VnaCAKKyAgICAgICAgZXhhbXBsZSBjb2RlIHRvIGltcGxlbWVudCBtb3N0IHNpbXBsZSB2aWRlbzRsaW51eCBkZXZpY2VzIGZvciByYWRpbyBhbmQgVFYKKyAgICAgICAgY2FyZHMuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iYnVncyI+CisgICAgIDx0aXRsZT5Lbm93biBCdWdzIEFuZCBBc3N1bXB0aW9uczwvdGl0bGU+CisgIDxwYXJhPgorICA8dmFyaWFibGVsaXN0PgorICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+TXVsdGlwbGUgT3BlbnM8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICAgICBUaGUgZHJpdmVyIGFzc3VtZXMgbXVsdGlwbGUgb3BlbnMgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLiBBIGRyaXZlcgorICAgICAgICBjYW4gd29yayBhcm91bmQgdGhpcyBidXQgbm90IGNsZWFubHkuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5Pjx0ZXJtPkFQSSBEZWZpY2llbmNpZXM8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICAgICBUaGUgZXhpc3RpbmcgQVBJIHBvb3JseSByZWZsZWN0cyBjb21wcmVzc2lvbiBjYXBhYmxlIGRldmljZXMuIFRoZXJlCisgICAgICAgIGFyZSBwbGFucyBhZm9vdCB0byBtZXJnZSBWNEwsIFY0TDIgYW5kIHNvbWUgb3RoZXIgaWRlYXMgaW50byBhCisgICAgICAgIGJldHRlciBpbnRlcmZhY2UuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVsaXN0PgorCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CishRWRyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYworICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay93YW5ib29rLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd2FuYm9vay50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZWJjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd2FuYm9vay50bXBsCkBAIC0wLDAgKzEsOTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iV0FOR3VpZGUiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlN5bmNocm9ub3VzIFBQUCBhbmQgQ2lzY28gSERMQyBQcm9ncmFtbWluZyBHdWlkZTwvdGl0bGU+CisgIAorICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+QWxhbjwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPkNveDwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmFsYW5AcmVkaGF0LmNvbTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDA8L3llYXI+CisgICA8aG9sZGVyPkFsYW4gQ294PC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0iaW50cm8iPgorICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorCVRoZSBzeW5jcHBwIGRyaXZlcnMgaW4gTGludXggcHJvdmlkZSBhIGZhaXJseSBjb21wbGV0ZSAKKwlpbXBsZW1lbnRhdGlvbiBvZiBDaXNjbyBIRExDIGFuZCBhIG1pbmltYWwgaW1wbGVtZW50YXRpb24gb2YKKwlQUFAuIFRoZSBsb25nZXIgdGVybSBnb2FsIGlzIHRvIHN3aXRjaCB0aGUgUFBQIGxheWVyIHRvIHRoZQorCWdlbmVyaWMgUFBQIGludGVyZmFjZSB0aGF0IGlzIG5ldyBpbiBMaW51eCAyLjMueC4gVGhlIEFQSSBzaG91bGQKKwlyZW1haW4gdW5jaGFuZ2VkIHdoZW4gdGhpcyBpcyBkb25lLCBidXQgc3VwcG9ydCB3aWxsIHRoZW4gYmUKKwlhdmFpbGFibGUgZm9yIElQWCwgY29tcHJlc3Npb24gYW5kIG90aGVyIFBQUCBmZWF0dXJlcworICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9ImJ1Z3MiPgorICAgICA8dGl0bGU+S25vd24gQnVncyBBbmQgQXNzdW1wdGlvbnM8L3RpdGxlPgorICA8cGFyYT4KKyAgPHZhcmlhYmxlbGlzdD4KKyAgICA8dmFybGlzdGVudHJ5Pjx0ZXJtPlBQUCBpcyBtaW5pbWFsPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKwlUaGUgY3VycmVudCBQUFAgaW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYywgYWx0aG91Z2ggc3VmZmljaWVudAorCWZvciBtb3N0IHdhbiB1c2FnZXMuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5Pjx0ZXJtPkNpc2NvIEhETEMgUXVpcmtzPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKwlDdXJyZW50bHkgd2UgZG8gbm90IGVuZCBhbGwgcGFja2V0cyB3aXRoIHRoZSBjb3JyZWN0IENpc2NvIG11bHRpY2FzdAorCW9yIHVuaWNhc3QgZmxhZ3MuIE5vdGhpbmcgYXBwZWFycyB0byBtaW5kIHRvbyBtdWNoIGJ1dCB0aGlzIHNob3VsZAorCWJlIGNvcnJlY3RlZC4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxpc3Q+CisJCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CishRWRyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMKKyAgPC9jaGFwdGVyPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZ191c2JfZHJpdmVyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZ191c2JfZHJpdmVyLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmM2JmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nX3VzYl9kcml2ZXIudG1wbApAQCAtMCwwICsxLDQxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJVU0JEZXZpY2VEcml2ZXIiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPldyaXRpbmcgVVNCIERldmljZSBEcml2ZXJzPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5HcmVnPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+S3JvYWgtSGFydG1hbjwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmdyZWdAa3JvYWguY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMS0yMDAyPC95ZWFyPgorICAgPGhvbGRlcj5HcmVnIEtyb2FoLUhhcnRtYW48L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhcnRpY2xlIHB1Ymxpc2hlZCBpbiAKKyAgICAgTGludXggSm91cm5hbCBNYWdhemluZSwgT2N0b2JlciAyMDAxLCBJc3N1ZSA5MC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICBUaGUgTGludXggVVNCIHN1YnN5c3RlbSBoYXMgZ3Jvd24gZnJvbSBzdXBwb3J0aW5nIG9ubHkgdHdvIGRpZmZlcmVudAorICAgICAgdHlwZXMgb2YgZGV2aWNlcyBpbiB0aGUgMi4yLjcga2VybmVsIChtaWNlIGFuZCBrZXlib2FyZHMpLCB0byBvdmVyIDIwCisgICAgICBkaWZmZXJlbnQgdHlwZXMgb2YgZGV2aWNlcyBpbiB0aGUgMi40IGtlcm5lbC4gTGludXggY3VycmVudGx5IHN1cHBvcnRzCisgICAgICBhbG1vc3QgYWxsIFVTQiBjbGFzcyBkZXZpY2VzIChzdGFuZGFyZCB0eXBlcyBvZiBkZXZpY2VzIGxpa2Uga2V5Ym9hcmRzLAorICAgICAgbWljZSwgbW9kZW1zLCBwcmludGVycyBhbmQgc3BlYWtlcnMpIGFuZCBhbiBldmVyLWdyb3dpbmcgbnVtYmVyIG9mCisgICAgICB2ZW5kb3Itc3BlY2lmaWMgZGV2aWNlcyAoc3VjaCBhcyBVU0IgdG8gc2VyaWFsIGNvbnZlcnRlcnMsIGRpZ2l0YWwKKyAgICAgIGNhbWVyYXMsIEV0aGVybmV0IGRldmljZXMgYW5kIE1QMyBwbGF5ZXJzKS4gRm9yIGEgZnVsbCBsaXN0IG9mIHRoZQorICAgICAgZGlmZmVyZW50IFVTQiBkZXZpY2VzIGN1cnJlbnRseSBzdXBwb3J0ZWQsIHNlZSBSZXNvdXJjZXMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICBUaGUgcmVtYWluaW5nIGtpbmRzIG9mIFVTQiBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgc3VwcG9ydCBvbiBMaW51eCBhcmUKKyAgICAgIGFsbW9zdCBhbGwgdmVuZG9yLXNwZWNpZmljIGRldmljZXMuIEVhY2ggdmVuZG9yIGRlY2lkZXMgdG8gaW1wbGVtZW50IGEKKyAgICAgIGN1c3RvbSBwcm90b2NvbCB0byB0YWxrIHRvIHRoZWlyIGRldmljZSwgc28gYSBjdXN0b20gZHJpdmVyIHVzdWFsbHkgbmVlZHMKKyAgICAgIHRvIGJlIGNyZWF0ZWQuIFNvbWUgdmVuZG9ycyBhcmUgb3BlbiB3aXRoIHRoZWlyIFVTQiBwcm90b2NvbHMgYW5kIGhlbHAKKyAgICAgIHdpdGggdGhlIGNyZWF0aW9uIG9mIExpbnV4IGRyaXZlcnMsIHdoaWxlIG90aGVycyBkbyBub3QgcHVibGlzaCB0aGVtLCBhbmQKKyAgICAgIGRldmVsb3BlcnMgYXJlIGZvcmNlZCB0byByZXZlcnNlLWVuZ2luZWVyLiBTZWUgUmVzb3VyY2VzIGZvciBzb21lIGxpbmtzCisgICAgICB0byBoYW5keSByZXZlcnNlLWVuZ2luZWVyaW5nIHRvb2xzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgQmVjYXVzZSBlYWNoIGRpZmZlcmVudCBwcm90b2NvbCBjYXVzZXMgYSBuZXcgZHJpdmVyIHRvIGJlIGNyZWF0ZWQsIEkgaGF2ZQorICAgICAgd3JpdHRlbiBhIGdlbmVyaWMgVVNCIGRyaXZlciBza2VsZXRvbiwgbW9kZWxlZCBhZnRlciB0aGUgcGNpLXNrZWxldG9uLmMKKyAgICAgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSB1cG9uIHdoaWNoIG1hbnkgUENJIG5ldHdvcmsgZHJpdmVycyBoYXZlCisgICAgICBiZWVuIGJhc2VkLiBUaGlzIFVTQiBza2VsZXRvbiBjYW4gYmUgZm91bmQgYXQgZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKKyAgICAgIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEluIHRoaXMgYXJ0aWNsZSBJIHdpbGwgd2FsayB0aHJvdWdoIHRoZSBiYXNpY3MKKyAgICAgIG9mIHRoZSBza2VsZXRvbiBkcml2ZXIsIGV4cGxhaW5pbmcgdGhlIGRpZmZlcmVudCBwaWVjZXMgYW5kIHdoYXQgbmVlZHMgdG8KKyAgICAgIGJlIGRvbmUgdG8gY3VzdG9taXplIGl0IHRvIHlvdXIgc3BlY2lmaWMgZGV2aWNlLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iYmFzaWNzIj4KKyAgICAgIDx0aXRsZT5MaW51eCBVU0IgQmFzaWNzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIHdyaXRlIGEgTGludXggVVNCIGRyaXZlciwgcGxlYXNlIGJlY29tZSBmYW1pbGlhciB3aXRoCisgICAgICB0aGUgVVNCIHByb3RvY29sIHNwZWNpZmljYXRpb24uIEl0IGNhbiBiZSBmb3VuZCwgYWxvbmcgd2l0aCBtYW55IG90aGVyCisgICAgICB1c2VmdWwgZG9jdW1lbnRzLCBhdCB0aGUgVVNCIGhvbWUgcGFnZSAoc2VlIFJlc291cmNlcykuIEFuIGV4Y2VsbGVudAorICAgICAgaW50cm9kdWN0aW9uIHRvIHRoZSBMaW51eCBVU0Igc3Vic3lzdGVtIGNhbiBiZSBmb3VuZCBhdCB0aGUgVVNCIFdvcmtpbmcKKyAgICAgIERldmljZXMgTGlzdCAoc2VlIFJlc291cmNlcykuIEl0IGV4cGxhaW5zIGhvdyB0aGUgTGludXggVVNCIHN1YnN5c3RlbSBpcworICAgICAgc3RydWN0dXJlZCBhbmQgaW50cm9kdWNlcyB0aGUgcmVhZGVyIHRvIHRoZSBjb25jZXB0IG9mIFVTQiB1cmJzLCB3aGljaAorICAgICAgYXJlIGVzc2VudGlhbCB0byBVU0IgZHJpdmVycy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgIFRoZSBmaXJzdCB0aGluZyBhIExpbnV4IFVTQiBkcml2ZXIgbmVlZHMgdG8gZG8gaXMgcmVnaXN0ZXIgaXRzZWxmIHdpdGgKKyAgICAgIHRoZSBMaW51eCBVU0Igc3Vic3lzdGVtLCBnaXZpbmcgaXQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBkZXZpY2VzCisgICAgICB0aGUgZHJpdmVyIHN1cHBvcnRzIGFuZCB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB3aGVuIGEgZGV2aWNlIHN1cHBvcnRlZAorICAgICAgYnkgdGhlIGRyaXZlciBpcyBpbnNlcnRlZCBvciByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQWxsIG9mIHRoaXMKKyAgICAgIGluZm9ybWF0aW9uIGlzIHBhc3NlZCB0byB0aGUgVVNCIHN1YnN5c3RlbSBpbiB0aGUgdXNiX2RyaXZlciBzdHJ1Y3R1cmUuCisgICAgICBUaGUgc2tlbGV0b24gZHJpdmVyIGRlY2xhcmVzIGEgdXNiX2RyaXZlciBhczoKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2tlbF9kcml2ZXIgPSB7CisgICAgICAgIC5uYW1lICAgICAgICA9ICJza2VsZXRvbiIsCisgICAgICAgIC5wcm9iZSAgICAgICA9IHNrZWxfcHJvYmUsCisgICAgICAgIC5kaXNjb25uZWN0ICA9IHNrZWxfZGlzY29ubmVjdCwKKyAgICAgICAgLmZvcHMgICAgICAgID0gJmFtcDtza2VsX2ZvcHMsCisgICAgICAgIC5taW5vciAgICAgICA9IFVTQl9TS0VMX01JTk9SX0JBU0UsCisgICAgICAgIC5pZF90YWJsZSAgICA9IHNrZWxfdGFibGUsCit9OworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgIFRoZSB2YXJpYWJsZSBuYW1lIGlzIGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBkcml2ZXIuIEl0IGlzIHVzZWQgaW4KKyAgICAgIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgcHJpbnRlZCB0byB0aGUgc3lzdGVtIGxvZy4gVGhlIHByb2JlIGFuZAorICAgICAgZGlzY29ubmVjdCBmdW5jdGlvbiBwb2ludGVycyBhcmUgY2FsbGVkIHdoZW4gYSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZQorICAgICAgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhlIGlkX3RhYmxlIHZhcmlhYmxlIGlzIGVpdGhlciBzZWVuIG9yIHJlbW92ZWQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICBUaGUgZm9wcyBhbmQgbWlub3IgdmFyaWFibGVzIGFyZSBvcHRpb25hbC4gTW9zdCBVU0IgZHJpdmVycyBob29rIGludG8KKyAgICAgIGFub3RoZXIga2VybmVsIHN1YnN5c3RlbSwgc3VjaCBhcyB0aGUgU0NTSSwgbmV0d29yayBvciBUVFkgc3Vic3lzdGVtLgorICAgICAgVGhlc2UgdHlwZXMgb2YgZHJpdmVycyByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggdGhlIG90aGVyIGtlcm5lbAorICAgICAgc3Vic3lzdGVtLCBhbmQgYW55IHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGFyZSBwcm92aWRlZCB0aHJvdWdoIHRoYXQKKyAgICAgIGludGVyZmFjZS4gQnV0IGZvciBkcml2ZXJzIHRoYXQgZG8gbm90IGhhdmUgYSBtYXRjaGluZyBrZXJuZWwgc3Vic3lzdGVtLAorICAgICAgc3VjaCBhcyBNUDMgcGxheWVycyBvciBzY2FubmVycywgYSBtZXRob2Qgb2YgaW50ZXJhY3Rpbmcgd2l0aCB1c2VyIHNwYWNlCisgICAgICBpcyBuZWVkZWQuIFRoZSBVU0Igc3Vic3lzdGVtIHByb3ZpZGVzIGEgd2F5IHRvIHJlZ2lzdGVyIGEgbWlub3IgZGV2aWNlCisgICAgICBudW1iZXIgYW5kIGEgc2V0IG9mIGZpbGVfb3BlcmF0aW9ucyBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGVuYWJsZSB0aGlzCisgICAgICB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGUgc2tlbGV0b24gZHJpdmVyIG5lZWRzIHRoaXMga2luZCBvZiBpbnRlcmZhY2UsCisgICAgICBzbyBpdCBwcm92aWRlcyBhIG1pbm9yIHN0YXJ0aW5nIG51bWJlciBhbmQgYSBwb2ludGVyIHRvIGl0cworICAgICAgZmlsZV9vcGVyYXRpb25zIGZ1bmN0aW9ucy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgIFRoZSBVU0IgZHJpdmVyIGlzIHRoZW4gcmVnaXN0ZXJlZCB3aXRoIGEgY2FsbCB0byB1c2JfcmVnaXN0ZXIsIHVzdWFsbHkgaW4KKyAgICAgIHRoZSBkcml2ZXIncyBpbml0IGZ1bmN0aW9uLCBhcyBzaG93biBoZXJlOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBpbnQgX19pbml0IHVzYl9za2VsX2luaXQodm9pZCkKK3sKKyAgICAgICAgaW50IHJlc3VsdDsKKworICAgICAgICAvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisgICAgICAgIHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYW1wO3NrZWxfZHJpdmVyKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmbHQ7IDApIHsKKyAgICAgICAgICAgICAgICBlcnIoJnF1b3Q7dXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlICZxdW90O19fRklMRV9fICZxdW90O2RyaXZlci4mcXVvdDsKKyAgICAgICAgICAgICAgICAgICAgJnF1b3Q7RXJyb3IgbnVtYmVyICVkJnF1b3Q7LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworfQorbW9kdWxlX2luaXQodXNiX3NrZWxfaW5pdCk7CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgV2hlbiB0aGUgZHJpdmVyIGlzIHVubG9hZGVkIGZyb20gdGhlIHN5c3RlbSwgaXQgbmVlZHMgdG8gdW5yZWdpc3RlcgorICAgICAgaXRzZWxmIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0uIFRoaXMgaXMgZG9uZSB3aXRoIHRoZSB1c2JfdW5yZWdpc3RlcgorICAgICAgZnVuY3Rpb246CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHZvaWQgX19leGl0IHVzYl9za2VsX2V4aXQodm9pZCkKK3sKKyAgICAgICAgLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisgICAgICAgIHVzYl9kZXJlZ2lzdGVyKCZhbXA7c2tlbF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodXNiX3NrZWxfZXhpdCk7CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICBUbyBlbmFibGUgdGhlIGxpbnV4LWhvdHBsdWcgc3lzdGVtIHRvIGxvYWQgdGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IHdoZW4KKyAgICAgdGhlIGRldmljZSBpcyBwbHVnZ2VkIGluLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBNT0RVTEVfREVWSUNFX1RBQkxFLiBUaGUKKyAgICAgZm9sbG93aW5nIGNvZGUgdGVsbHMgdGhlIGhvdHBsdWcgc2NyaXB0cyB0aGF0IHRoaXMgbW9kdWxlIHN1cHBvcnRzIGEKKyAgICAgc2luZ2xlIGRldmljZSB3aXRoIGEgc3BlY2lmaWMgdmVuZG9yIGFuZCBwcm9kdWN0IElEOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBza2VsX3RhYmxlIFtdID0geworICAgICAgICB7IFVTQl9ERVZJQ0UoVVNCX1NLRUxfVkVORE9SX0lELCBVU0JfU0tFTF9QUk9EVUNUX0lEKSB9LAorICAgICAgICB7IH0gICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHNrZWxfdGFibGUpOworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgVGhlcmUgYXJlIG90aGVyIG1hY3JvcyB0aGF0IGNhbiBiZSB1c2VkIGluIGRlc2NyaWJpbmcgYSB1c2JfZGV2aWNlX2lkIGZvcgorICAgICBkcml2ZXJzIHRoYXQgc3VwcG9ydCBhIHdob2xlIGNsYXNzIG9mIFVTQiBkcml2ZXJzLiBTZWUgdXNiLmggZm9yIG1vcmUKKyAgICAgaW5mb3JtYXRpb24gb24gdGhpcy4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImRldmljZSI+CisgICAgICA8dGl0bGU+RGV2aWNlIG9wZXJhdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgICBXaGVuIGEgZGV2aWNlIGlzIHBsdWdnZWQgaW50byB0aGUgVVNCIGJ1cyB0aGF0IG1hdGNoZXMgdGhlIGRldmljZSBJRAorICAgICBwYXR0ZXJuIHRoYXQgeW91ciBkcml2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBVU0IgY29yZSwgdGhlIHByb2JlIGZ1bmN0aW9uCisgICAgIGlzIGNhbGxlZC4gVGhlIHVzYl9kZXZpY2Ugc3RydWN0dXJlLCBpbnRlcmZhY2UgbnVtYmVyIGFuZCB0aGUgaW50ZXJmYWNlIElECisgICAgIGFyZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBpbnQgc2tlbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgIFRoZSBkcml2ZXIgbm93IG5lZWRzIHRvIHZlcmlmeSB0aGF0IHRoaXMgZGV2aWNlIGlzIGFjdHVhbGx5IG9uZSB0aGF0IGl0CisgICAgIGNhbiBhY2NlcHQuIElmIHNvLCBpdCByZXR1cm5zIDAuCisgICAgIElmIG5vdCwgb3IgaWYgYW55IGVycm9yIG9jY3VycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuIGVycm9yY29kZQorICAgICAoc3VjaCBhcyA8bGl0ZXJhbD4tRU5PTUVNPC9saXRlcmFsPiBvciA8bGl0ZXJhbD4tRU5PREVWPC9saXRlcmFsPikKKyAgICAgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24uCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgIEluIHRoZSBza2VsZXRvbiBkcml2ZXIsIHdlIGRldGVybWluZSB3aGF0IGVuZCBwb2ludHMgYXJlIG1hcmtlZCBhcyBidWxrLWluCisgICAgIGFuZCBidWxrLW91dC4gV2UgY3JlYXRlIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgc2VudCBhbmQKKyAgICAgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLCBhbmQgYSBVU0IgdXJiIHRvIHdyaXRlIGRhdGEgdG8gdGhlIGRldmljZSBpcworICAgICBpbml0aWFsaXplZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgQ29udmVyc2VseSwgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgVVNCIGJ1cywgdGhlIGRpc2Nvbm5lY3QKKyAgICAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGRldmljZSBwb2ludGVyLiBUaGUgZHJpdmVyIG5lZWRzIHRvIGNsZWFuIGFueQorICAgICBwcml2YXRlIGRhdGEgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYXQgdGhpcyB0aW1lIGFuZCB0byBzaHV0IGRvd24gYW55CisgICAgIHBlbmRpbmcgdXJicyB0aGF0IGFyZSBpbiB0aGUgVVNCIHN5c3RlbS4gVGhlIGRyaXZlciBhbHNvIHVucmVnaXN0ZXJzCisgICAgIGl0c2VsZiBmcm9tIHRoZSBkZXZmcyBzdWJzeXN0ZW0gd2l0aCB0aGUgY2FsbDoKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisvKiByZW1vdmUgb3VyIGRldmZzIG5vZGUgKi8KK2RldmZzX3VucmVnaXN0ZXIoc2tlbC0+ZGV2ZnMpOworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgTm93IHRoYXQgdGhlIGRldmljZSBpcyBwbHVnZ2VkIGludG8gdGhlIHN5c3RlbSBhbmQgdGhlIGRyaXZlciBpcyBib3VuZCB0bworICAgICB0aGUgZGV2aWNlLCBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgZmlsZV9vcGVyYXRpb25zIHN0cnVjdHVyZSB0aGF0CisgICAgIHdlcmUgcGFzc2VkIHRvIHRoZSBVU0Igc3Vic3lzdGVtIHdpbGwgYmUgY2FsbGVkIGZyb20gYSB1c2VyIHByb2dyYW0gdHJ5aW5nCisgICAgIHRvIHRhbGsgdG8gdGhlIGRldmljZS4gVGhlIGZpcnN0IGZ1bmN0aW9uIGNhbGxlZCB3aWxsIGJlIG9wZW4sIGFzIHRoZQorICAgICBwcm9ncmFtIHRyaWVzIHRvIG9wZW4gdGhlIGRldmljZSBmb3IgSS9PLiBXZSBpbmNyZW1lbnQgb3VyIHByaXZhdGUgdXNhZ2UKKyAgICAgY291bnQgYW5kIHNhdmUgb2ZmIGEgcG9pbnRlciB0byBvdXIgaW50ZXJuYWwgc3RydWN0dXJlIGluIHRoZSBmaWxlCisgICAgIHN0cnVjdHVyZS4gVGhpcyBpcyBkb25lIHNvIHRoYXQgZnV0dXJlIGNhbGxzIHRvIGZpbGUgb3BlcmF0aW9ucyB3aWxsCisgICAgIGVuYWJsZSB0aGUgZHJpdmVyIHRvIGRldGVybWluZSB3aGljaCBkZXZpY2UgdGhlIHVzZXIgaXMgYWRkcmVzc2luZy4gIEFsbAorICAgICBvZiB0aGlzIGlzIGRvbmUgd2l0aCB0aGUgZm9sbG93aW5nIGNvZGU6CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCBmb3IgdGhlIG1vZHVsZSAqLworKytza2VsLT5vcGVuX2NvdW50OworCisvKiBzYXZlIG91ciBvYmplY3QgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLworZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgQWZ0ZXIgdGhlIG9wZW4gZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgcmVhZCBhbmQgd3JpdGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQKKyAgICAgdG8gcmVjZWl2ZSBhbmQgc2VuZCBkYXRhIHRvIHRoZSBkZXZpY2UuIEluIHRoZSBza2VsX3dyaXRlIGZ1bmN0aW9uLCB3ZQorICAgICByZWNlaXZlIGEgcG9pbnRlciB0byBzb21lIGRhdGEgdGhhdCB0aGUgdXNlciB3YW50cyB0byBzZW5kIHRvIHRoZSBkZXZpY2UKKyAgICAgYW5kIHRoZSBzaXplIG9mIHRoZSBkYXRhLiBUaGUgZnVuY3Rpb24gZGV0ZXJtaW5lcyBob3cgbXVjaCBkYXRhIGl0IGNhbgorICAgICBzZW5kIHRvIHRoZSBkZXZpY2UgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIHdyaXRlIHVyYiBpdCBoYXMgY3JlYXRlZCAodGhpcworICAgICBzaXplIGRlcGVuZHMgb24gdGhlIHNpemUgb2YgdGhlIGJ1bGsgb3V0IGVuZCBwb2ludCB0aGF0IHRoZSBkZXZpY2UgaGFzKS4KKyAgICAgVGhlbiBpdCBjb3BpZXMgdGhlIGRhdGEgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZSwgcG9pbnRzIHRoZSB1cmIgdG8KKyAgICAgdGhlIGRhdGEgYW5kIHN1Ym1pdHMgdGhlIHVyYiB0byB0aGUgVVNCIHN1YnN5c3RlbS4gIFRoaXMgY2FuIGJlIHNob3duIGluCisgICAgIGhlIGZvbGxvd2luZyBjb2RlOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKy8qIHdlIGNhbiBvbmx5IHdyaXRlIGFzIG11Y2ggYXMgMSB1cmIgd2lsbCBob2xkICovCitieXRlc193cml0dGVuID0gKGNvdW50ID4gc2tlbC0+YnVsa19vdXRfc2l6ZSkgPyBza2VsLT5idWxrX291dF9zaXplIDogY291bnQ7CisKKy8qIGNvcHkgdGhlIGRhdGEgZnJvbSB1c2VyIHNwYWNlIGludG8gb3VyIHVyYiAqLworY29weV9mcm9tX3VzZXIoc2tlbC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZmZlciwgYnl0ZXNfd3JpdHRlbik7CisKKy8qIHNldCB1cCBvdXIgdXJiICovCit1c2JfZmlsbF9idWxrX3VyYihza2VsLT53cml0ZV91cmIsCisgICAgICAgICAgICAgICAgICBza2VsLT5kZXYsCisgICAgICAgICAgICAgICAgICB1c2Jfc25kYnVsa3BpcGUoc2tlbC0+ZGV2LCBza2VsLT5idWxrX291dF9lbmRwb2ludEFkZHIpLAorICAgICAgICAgICAgICAgICAgc2tlbC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisgICAgICAgICAgICAgICAgICBieXRlc193cml0dGVuLAorICAgICAgICAgICAgICAgICAgc2tlbF93cml0ZV9idWxrX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgc2tlbCk7CisKKy8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KK3Jlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNrZWwtPndyaXRlX3VyYik7CitpZiAocmVzdWx0KSB7CisgICAgICAgIGVycigmcXVvdDtGYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkJnF1b3Q7LCByZXN1bHQpOworfQorICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgV2hlbiB0aGUgd3JpdGUgdXJiIGlzIGZpbGxlZCB1cCB3aXRoIHRoZSBwcm9wZXIgaW5mb3JtYXRpb24gdXNpbmcgdGhlCisgICAgIHVzYl9maWxsX2J1bGtfdXJiIGZ1bmN0aW9uLCB3ZSBwb2ludCB0aGUgdXJiJ3MgY29tcGxldGlvbiBjYWxsYmFjayB0byBjYWxsIG91cgorICAgICBvd24gc2tlbF93cml0ZV9idWxrX2NhbGxiYWNrIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZQorICAgICB1cmIgaXMgZmluaXNoZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgaW4KKyAgICAgaW50ZXJydXB0IGNvbnRleHQsIHNvIGNhdXRpb24gbXVzdCBiZSB0YWtlbiBub3QgdG8gZG8gdmVyeSBtdWNoIHByb2Nlc3NpbmcKKyAgICAgYXQgdGhhdCB0aW1lLiBPdXIgaW1wbGVtZW50YXRpb24gb2Ygc2tlbF93cml0ZV9idWxrX2NhbGxiYWNrIG1lcmVseQorICAgICByZXBvcnRzIGlmIHRoZSB1cmIgd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb3Igbm90IGFuZCB0aGVuIHJldHVybnMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgIFRoZSByZWFkIGZ1bmN0aW9uIHdvcmtzIGEgYml0IGRpZmZlcmVudGx5IGZyb20gdGhlIHdyaXRlIGZ1bmN0aW9uIGluIHRoYXQKKyAgICAgd2UgZG8gbm90IHVzZSBhbiB1cmIgdG8gdHJhbnNmZXIgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIGRyaXZlci4KKyAgICAgSW5zdGVhZCB3ZSBjYWxsIHRoZSB1c2JfYnVsa19tc2cgZnVuY3Rpb24sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlbmQgb3IKKyAgICAgcmVjZWl2ZSBkYXRhIGZyb20gYSBkZXZpY2Ugd2l0aG91dCBoYXZpbmcgdG8gY3JlYXRlIHVyYnMgYW5kIGhhbmRsZQorICAgICB1cmIgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbnMuIFdlIGNhbGwgdGhlIHVzYl9idWxrX21zZyBmdW5jdGlvbiwKKyAgICAgZ2l2aW5nIGl0IGEgYnVmZmVyIGludG8gd2hpY2ggdG8gcGxhY2UgYW55IGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlCisgICAgIGFuZCBhIHRpbWVvdXQgdmFsdWUuIElmIHRoZSB0aW1lb3V0IHBlcmlvZCBleHBpcmVzIHdpdGhvdXQgcmVjZWl2aW5nIGFueQorICAgICBkYXRhIGZyb20gdGhlIGRldmljZSwgdGhlIGZ1bmN0aW9uIHdpbGwgZmFpbCBhbmQgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UuCisgICAgIFRoaXMgY2FuIGJlIHNob3duIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKy8qIGRvIGFuIGltbWVkaWF0ZSBidWxrIHJlYWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgZGV2aWNlICovCityZXR2YWwgPSB1c2JfYnVsa19tc2cgKHNrZWwtPmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlIChza2VsLT5kZXYsCisgICAgICAgICAgICAgICAgICAgICAgIHNrZWwtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2tlbC0+YnVsa19pbl9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNrZWwtPmJ1bGtfaW5fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFtcDtjb3VudCwgSFoqMTApOworLyogaWYgdGhlIHJlYWQgd2FzIHN1Y2Nlc3NmdWwsIGNvcHkgdGhlIGRhdGEgdG8gdXNlciBzcGFjZSAqLworaWYgKCFyZXR2YWwpIHsKKyAgICAgICAgaWYgKGNvcHlfdG9fdXNlciAoYnVmZmVyLCBza2VsLT5idWxrX2luX2J1ZmZlciwgY291bnQpKQorICAgICAgICAgICAgICAgIHJldHZhbCA9IC1FRkFVTFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBjb3VudDsKK30KKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgIFRoZSB1c2JfYnVsa19tc2cgZnVuY3Rpb24gY2FuIGJlIHZlcnkgdXNlZnVsIGZvciBkb2luZyBzaW5nbGUgcmVhZHMgb3IKKyAgICAgd3JpdGVzIHRvIGEgZGV2aWNlOyBob3dldmVyLCBpZiB5b3UgbmVlZCB0byByZWFkIG9yIHdyaXRlIGNvbnN0YW50bHkgdG8gYQorICAgICBkZXZpY2UsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHNldCB1cCB5b3VyIG93biB1cmJzIGFuZCBzdWJtaXQgdGhlbSB0byB0aGUKKyAgICAgVVNCIHN1YnN5c3RlbS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgV2hlbiB0aGUgdXNlciBwcm9ncmFtIHJlbGVhc2VzIHRoZSBmaWxlIGhhbmRsZSB0aGF0IGl0IGhhcyBiZWVuIHVzaW5nIHRvCisgICAgIHRhbGsgdG8gdGhlIGRldmljZSwgdGhlIHJlbGVhc2UgZnVuY3Rpb24gaW4gdGhlIGRyaXZlciBpcyBjYWxsZWQuIEluIHRoaXMKKyAgICAgZnVuY3Rpb24gd2UgZGVjcmVtZW50IG91ciBwcml2YXRlIHVzYWdlIGNvdW50IGFuZCB3YWl0IGZvciBwb3NzaWJsZQorICAgICBwZW5kaW5nIHdyaXRlczoKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50IGZvciB0aGUgZGV2aWNlICovCistLXNrZWwtPm9wZW5fY291bnQ7CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICBPbmUgb2YgdGhlIG1vcmUgZGlmZmljdWx0IHByb2JsZW1zIHRoYXQgVVNCIGRyaXZlcnMgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZQorICAgICBzbW9vdGhseSBpcyB0aGUgZmFjdCB0aGF0IHRoZSBVU0IgZGV2aWNlIG1heSBiZSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSBhdAorICAgICBhbnkgcG9pbnQgaW4gdGltZSwgZXZlbiBpZiBhIHByb2dyYW0gaXMgY3VycmVudGx5IHRhbGtpbmcgdG8gaXQuIEl0IG5lZWRzCisgICAgIHRvIGJlIGFibGUgdG8gc2h1dCBkb3duIGFueSBjdXJyZW50IHJlYWRzIGFuZCB3cml0ZXMgYW5kIG5vdGlmeSB0aGUKKyAgICAgdXNlci1zcGFjZSBwcm9ncmFtcyB0aGF0IHRoZSBkZXZpY2UgaXMgbm8gbG9uZ2VyIHRoZXJlLiBUaGUgZm9sbG93aW5nCisgICAgIGNvZGUgKGZ1bmN0aW9uIDxmdW5jdGlvbj5za2VsX2RlbGV0ZTwvZnVuY3Rpb24+KQorICAgICBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byBkbyB0aGlzOiA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBpbmxpbmUgdm9pZCBza2VsX2RlbGV0ZSAoc3RydWN0IHVzYl9za2VsICpkZXYpCit7CisgICAgaWYgKGRldi0+YnVsa19pbl9idWZmZXIgIT0gTlVMTCkKKyAgICAgICAga2ZyZWUgKGRldi0+YnVsa19pbl9idWZmZXIpOworICAgIGlmIChkZXYtPmJ1bGtfb3V0X2J1ZmZlciAhPSBOVUxMKQorICAgICAgICB1c2JfYnVmZmVyX2ZyZWUgKGRldi0+dWRldiwgZGV2LT5idWxrX291dF9zaXplLAorICAgICAgICAgICAgZGV2LT5idWxrX291dF9idWZmZXIsCisgICAgICAgICAgICBkZXYtPndyaXRlX3VyYi0+dHJhbnNmZXJfZG1hKTsKKyAgICBpZiAoZGV2LT53cml0ZV91cmIgIT0gTlVMTCkKKyAgICAgICAgdXNiX2ZyZWVfdXJiIChkZXYtPndyaXRlX3VyYik7CisgICAga2ZyZWUgKGRldik7Cit9CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICBJZiBhIHByb2dyYW0gY3VycmVudGx5IGhhcyBhbiBvcGVuIGhhbmRsZSB0byB0aGUgZGV2aWNlLCB3ZSByZXNldCB0aGUgZmxhZworICAgICA8bGl0ZXJhbD5kZXZpY2VfcHJlc2VudDwvbGl0ZXJhbD4uIEZvcgorICAgICBldmVyeSByZWFkLCB3cml0ZSwgcmVsZWFzZSBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgZXhwZWN0IGEgZGV2aWNlIHRvIGJlCisgICAgIHByZXNlbnQsIHRoZSBkcml2ZXIgZmlyc3QgY2hlY2tzIHRoaXMgZmxhZyB0byBzZWUgaWYgdGhlIGRldmljZSBpcworICAgICBzdGlsbCBwcmVzZW50LiBJZiBub3QsIGl0IHJlbGVhc2VzIHRoYXQgdGhlIGRldmljZSBoYXMgZGlzYXBwZWFyZWQsIGFuZCBhCisgICAgIC1FTk9ERVYgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXItc3BhY2UgcHJvZ3JhbS4gV2hlbiB0aGUgcmVsZWFzZQorICAgICBmdW5jdGlvbiBpcyBldmVudHVhbGx5IGNhbGxlZCwgaXQgZGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBubyBkZXZpY2UKKyAgICAgYW5kIGlmIG5vdCwgaXQgZG9lcyB0aGUgY2xlYW51cCB0aGF0IHRoZSBza2VsX2Rpc2Nvbm5lY3QKKyAgICAgZnVuY3Rpb24gbm9ybWFsbHkgZG9lcyBpZiB0aGVyZSBhcmUgbm8gb3BlbiBmaWxlcyBvbiB0aGUgZGV2aWNlIChzZWUKKyAgICAgTGlzdGluZyA1KS4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImlzbyI+CisgICAgICA8dGl0bGU+SXNvY2hyb25vdXMgRGF0YTwvdGl0bGU+CisgIDxwYXJhPgorICAgICBUaGlzIHVzYi1za2VsZXRvbiBkcml2ZXIgZG9lcyBub3QgaGF2ZSBhbnkgZXhhbXBsZXMgb2YgaW50ZXJydXB0IG9yCisgICAgIGlzb2Nocm9ub3VzIGRhdGEgYmVpbmcgc2VudCB0byBvciBmcm9tIHRoZSBkZXZpY2UuIEludGVycnVwdCBkYXRhIGlzIHNlbnQKKyAgICAgYWxtb3N0IGV4YWN0bHkgYXMgYnVsayBkYXRhIGlzLCB3aXRoIGEgZmV3IG1pbm9yIGV4Y2VwdGlvbnMuICBJc29jaHJvbm91cworICAgICBkYXRhIHdvcmtzIGRpZmZlcmVudGx5IHdpdGggY29udGludW91cyBzdHJlYW1zIG9mIGRhdGEgYmVpbmcgc2VudCB0byBvcgorICAgICBmcm9tIHRoZSBkZXZpY2UuIFRoZSBhdWRpbyBhbmQgdmlkZW8gY2FtZXJhIGRyaXZlcnMgYXJlIHZlcnkgZ29vZCBleGFtcGxlcworICAgICBvZiBkcml2ZXJzIHRoYXQgaGFuZGxlIGlzb2Nocm9ub3VzIGRhdGEgYW5kIHdpbGwgYmUgdXNlZnVsIGlmIHlvdSBhbHNvCisgICAgIG5lZWQgdG8gZG8gdGhpcy4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0iQ29uY2x1c2lvbiI+CisgICAgICA8dGl0bGU+Q29uY2x1c2lvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgICBXcml0aW5nIExpbnV4IFVTQiBkZXZpY2UgZHJpdmVycyBpcyBub3QgYSBkaWZmaWN1bHQgdGFzayBhcyB0aGUKKyAgICAgdXNiLXNrZWxldG9uIGRyaXZlciBzaG93cy4gVGhpcyBkcml2ZXIsIGNvbWJpbmVkIHdpdGggdGhlIG90aGVyIGN1cnJlbnQKKyAgICAgVVNCIGRyaXZlcnMsIHNob3VsZCBwcm92aWRlIGVub3VnaCBleGFtcGxlcyB0byBoZWxwIGEgYmVnaW5uaW5nIGF1dGhvcgorICAgICBjcmVhdGUgYSB3b3JraW5nIGRyaXZlciBpbiBhIG1pbmltYWwgYW1vdW50IG9mIHRpbWUuIFRoZSBsaW51eC11c2ItZGV2ZWwKKyAgICAgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGFsc28gY29udGFpbiBhIGxvdCBvZiBoZWxwZnVsIGluZm9ybWF0aW9uLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0icmVzb3VyY2VzIj4KKyAgICAgIDx0aXRsZT5SZXNvdXJjZXM8L3RpdGxlPgorICA8cGFyYT4KKyAgICAgVGhlIExpbnV4IFVTQiBQcm9qZWN0OiA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmciPmh0dHA6Ly93d3cubGludXgtdXNiLm9yZy88L3VsaW5rPgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICBMaW51eCBIb3RwbHVnIFByb2plY3Q6IDx1bGluayB1cmw9Imh0dHA6Ly9saW51eC1ob3RwbHVnLnNvdXJjZWZvcmdlLm5ldCI+aHR0cDovL2xpbnV4LWhvdHBsdWcuc291cmNlZm9yZ2UubmV0LzwvdWxpbms+CisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgIExpbnV4IFVTQiBXb3JraW5nIERldmljZXMgTGlzdDogPHVsaW5rIHVybD0iaHR0cDovL3d3dy5xYmlrLmNoL3VzYi9kZXZpY2VzIj5odHRwOi8vd3d3LnFiaWsuY2gvdXNiL2RldmljZXMvPC91bGluaz4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgbGludXgtdXNiLWRldmVsIE1haWxpbmcgTGlzdCBBcmNoaXZlczogPHVsaW5rIHVybD0iaHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/bD1saW51eC11c2ItZGV2ZWwiPmh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9bGludXgtdXNiLWRldmVsPC91bGluaz4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgUHJvZ3JhbW1pbmcgR3VpZGUgZm9yIExpbnV4IFVTQiBEZXZpY2UgRHJpdmVyczogPHVsaW5rIHVybD0iaHR0cDovL3VzYi5jcy50dW0uZWR1L3VzYmRvYyI+aHR0cDovL3VzYi5jcy50dW0uZWR1L3VzYmRvYzwvdWxpbms+CisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgIFVTQiBIb21lIFBhZ2U6IDx1bGluayB1cmw9Imh0dHA6Ly93d3cudXNiLm9yZyI+aHR0cDovL3d3dy51c2Iub3JnPC91bGluaz4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay96ODUzMGJvb2sudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay96ODUzMGJvb2sudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTA3ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3o4NTMwYm9vay50bXBsCkBAIC0wLDAgKzEsMzg1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9Ilo4NTIzMEd1aWRlIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5aODUzMCBQcm9ncmFtbWluZyBHdWlkZTwvdGl0bGU+CisgIAorICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+QWxhbjwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPkNveDwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmFsYW5AcmVkaGF0LmNvbTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDA8L3llYXI+CisgICA8aG9sZGVyPkFsYW4gQ294PC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0iaW50cm8iPgorICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorCVRoZSBaODV4MzAgZmFtaWx5IHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cyBjb250cm9sbGVyIGNoaXBzIGFyZQorCXVzZWQgb24gYSBsYXJnZSBudW1iZXIgb2YgY2hlYXAgbmV0d29yayBpbnRlcmZhY2UgY2FyZHMuIFRoZQorCWtlcm5lbCBwcm92aWRlcyBhIGNvcmUgaW50ZXJmYWNlIGxheWVyIHRoYXQgaXMgZGVzaWduZWQgdG8gbWFrZQorCWl0IGVhc3kgdG8gcHJvdmlkZSBXQU4gc2VydmljZXMgdXNpbmcgdGhpcyBjaGlwLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZSBjdXJyZW50IGRyaXZlciBvbmx5IHN1cHBvcnQgc3luY2hyb25vdXMgb3BlcmF0aW9uLiBNZXJnaW5nIHRoZQorCWFzeW5jaHJvbm91cyBkcml2ZXIgc3VwcG9ydCBpbnRvIHRoaXMgY29kZSB0byBhbGxvdyBhbnkgWjg1eDMwCisJZGV2aWNlIHRvIGJlIHVzZWQgYXMgYm90aCBhIHR0eSBpbnRlcmZhY2UgYW5kIGFzIGEgc3luY2hyb25vdXMgCisJY29udHJvbGxlciBpcyBhIHByb2plY3QgZm9yIExpbnV4IHBvc3QgdGhlIDIuNCByZWxlYXNlCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIHN1cHBvcnQgY29kZSBoYW5kbGVzIG1vc3QgY29tbW9uIGNhcmQgY29uZmlndXJhdGlvbnMgYW5kCisJc3VwcG9ydHMgcnVubmluZyBib3RoIENpc2NvIEhETEMgYW5kIFN5bmNocm9ub3VzIFBQUC4gV2l0aCBleHRyYQorCWdsdWUgdGhlIGZyYW1lIHJlbGF5IGFuZCBYLjI1IHByb3RvY29scyBjYW4gYWxzbyBiZSB1c2VkIHdpdGggdGhpcworCWRyaXZlci4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlcj4KKyAJPHRpdGxlPkRyaXZlciBNb2RlczwvdGl0bGU+CisgIDxwYXJhPgorCVRoZSBaODUyMzAgZHJpdmVyIGxheWVyIGNhbiBkcml2ZSBaODUzMCwgWjg1QzMwIGFuZCBaODUyMzAgZGV2aWNlcworCWluIHRocmVlIGRpZmZlcmVudCBtb2Rlcy4gRWFjaCBtb2RlIGNhbiBiZSBhcHBsaWVkIHRvIGFuIGluZGl2aWR1YWwKKwljaGFubmVsIG9uIHRoZSBjaGlwIChlYWNoIGNoaXAgaGFzIHR3byBjaGFubmVscykuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIFBJTyBzeW5jaHJvbm91cyBtb2RlIHN1cHBvcnRzIHRoZSBtb3N0IGNvbW1vbiBaODUzMCB3aXJpbmcuIEhlcmUKKwl0aGUgY2hpcCBpcyBpbnRlcmZhY2UgdG8gdGhlIEkvTyBhbmQgaW50ZXJydXB0IGZhY2lsaXRpZXMgb2YgdGhlCisJaG9zdCBtYWNoaW5lIGJ1dCBub3QgdG8gdGhlIERNQSBzdWJzeXN0ZW0uIFdoZW4gcnVubmluZyBQSU8gdGhlCisJWjg1MzAgaGFzIGV4dHJlbWVseSB0aWdodCB0aW1pbmcgcmVxdWlyZW1lbnRzLiBEb2luZyBoaWdoIHNwZWVkcywKKwlldmVuIHdpdGggYSBaODUyMzAgd2lsbCBiZSB0cmlja3kuIFR5cGljYWxseSB5b3Ugc2hvdWxkIGV4cGVjdCB0bworCWFjaGlldmUgYXQgYmVzdCA5NjAwIGJhdWQgd2l0aCBhIFo4QzUzMCBhbmQgNjRLYml0cyB3aXRoIGEgWjg1MjMwLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZSBETUEgbW9kZSBzdXBwb3J0cyB0aGUgY2hpcCB3aGVuIGl0IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGR1YWwgRE1BCisJY2hhbm5lbHMgb24gYW4gSVNBIGJ1cy4gVGhlIGJldHRlciBjYXJkcyB0ZW5kIHRvIHN1cHBvcnQgdGhpcyBtb2RlCisJb2Ygb3BlcmF0aW9uIGZvciBhIHNpbmdsZSBjaGFubmVsLiBXaXRoIERNQSBydW5uaW5nIHRoZSBaODUyMzAgdG9wcworCW91dCB3aGVuIGl0IHN0YXJ0cyB0byBoaXQgSVNBIERNQSBjb25zdHJhaW50cyBhdCBhYm91dCA1MTJLYml0cy4gSXQKKwlpcyB3b3J0aCBub3RpbmcgaGVyZSB0aGF0IG1hbnkgUEMgbWFjaGluZXMgaGFuZyBvciBjcmFzaCB3aGVuIHRoZQorCWNoaXAgaXMgZHJpdmVuIGZhc3QgZW5vdWdoIHRvIGhvbGQgdGhlIElTQSBidXMgc29saWQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVHJhbnNtaXQgRE1BIG1vZGUgdXNlcyBhIHNpbmdsZSBETUEgY2hhbm5lbC4gVGhlIERNQSBjaGFubmVsIGlzIHVzZWQKKwlmb3IgdHJhbnNtaXNzaW9uIGFzIHRoZSB0cmFuc21pdCBGSUZPIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVjZWl2ZQorCUZJRk8uIGl0IGdpdmVzIGJldHRlciBwZXJmb3JtYW5jZSB0aGFuIHB1cmUgUElPIG1vZGUgYnV0IGlzIG5vd2hlcmUKKwluZWFyIGFzIGlkZWFsIGFzIHB1cmUgRE1BIG1vZGUuIAorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlcj4KKyAJPHRpdGxlPlVzaW5nIHRoZSBaODUyMzAgZHJpdmVyPC90aXRsZT4KKyAgPHBhcmE+CisJVGhlIFo4NTIzMCBkcml2ZXIgcHJvdmlkZXMgdGhlIGJhY2sgZW5kIGludGVyZmFjZSB0byB5b3VyIGJvYXJkLiBUbworCWNvbmZpZ3VyZSBhIFo4NTMwIGludGVyZmFjZSB5b3UgbmVlZCB0byBkZXRlY3QgdGhlIGJvYXJkIGFuZCB0byAKKwlpZGVudGlmeSBpdHMgcG9ydHMgYW5kIGludGVycnVwdCByZXNvdXJjZXMuIEl0IGlzIGFsc28geW91ciBwcm9ibGVtCisJdG8gdmVyaWZ5IHRoZSByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlIYXZpbmcgaWRlbnRpZmllZCB0aGUgY2hpcCB5b3UgbmVlZCB0byBmaWxsIGluIGEgc3RydWN0IHo4NTMwX2RldiwKKwl3aGljaCBkZXNjcmliZXMgZWFjaCBjaGlwLiBUaGlzIG9iamVjdCBtdXN0IGV4aXN0IHVudGlsIHlvdSBmaW5hbGx5CisJc2h1dGRvd24gdGhlIGJvYXJkLiBGaXJzdGx5IHplcm8gdGhlIGFjdGl2ZSBmaWVsZC4gVGhpcyBlbnN1cmVzIAorCW5vdGhpbmcgZ29lcyBvZmYgd2l0aG91dCB5b3UgaW50ZW5kaW5nIGl0LiBUaGUgaXJxIGZpZWxkIHNob3VsZAorCWJlIHNldCB0byB0aGUgaW50ZXJydXB0IG51bWJlciBvZiB0aGUgY2hpcC4gKEVhY2ggY2hpcCBoYXMgYSBzaW5nbGUKKwlpbnRlcnJ1cHQgc291cmNlIHJhdGhlciB0aGFuIGVhY2ggY2hhbm5lbCkuIFlvdSBhcmUgcmVzcG9uc2libGUKKwlmb3IgYWxsb2NhdGluZyB0aGUgaW50ZXJydXB0IGxpbmUuIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBzaG91bGQgYmUKKwlzZXQgdG8gPGZ1bmN0aW9uPno4NTMwX2ludGVycnVwdDwvZnVuY3Rpb24+LiBUaGUgZGV2aWNlIGlkIHNob3VsZAorCWJlIHNldCB0byB0aGUgejg1MzBfZGV2IHN0cnVjdHVyZSBwb2ludGVyLiBXaGV0aGVyIHRoZSBpbnRlcnJ1cHQgY2FuCisJYmUgc2hhcmVkIG9yIG5vdCBpcyBib2FyZCBkZXBlbmRlbnQsIGFuZCB1cCB0byB5b3UgdG8gaW5pdGlhbGlzZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgc3RydWN0dXJlIGhvbGRzIHR3byBjaGFubmVsIHN0cnVjdHVyZXMuIAorCUluaXRpYWxpc2UgY2hhbkEuY3RybGlvIGFuZCBjaGFuQS5kYXRhaW8gd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUKKwljb250cm9sIGFuZCBkYXRhIHBvcnRzLiBZb3UgY2FuIG9yIHRoaXMgd2l0aCBaODUzMF9QT1JUX1NMRUVQIHRvCisJaW5kaWNhdGUgeW91ciBpbnRlcmZhY2UgbmVlZHMgdGhlIDV1UyBkZWxheSBmb3IgY2hpcCBzZXR0bGluZyBkb25lCisJaW4gc29mdHdhcmUuIFRoZSBQT1JUX1NMRUVQIG9wdGlvbiBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMuIE90aGVyCisJZmxhZ3MgbWF5IGJlY29tZSBhdmFpbGFibGUgb24gZnV0dXJlIHBsYXRmb3JtcywgZWcgZm9yIE1NSU8uCisJSW5pdGlhbGlzZSB0aGUgY2hhbkEuaXJxcyB0byAmYW1wO3o4NTMwX25vcCB0byBzdGFydCB0aGUgY2hpcCB1cAorCWFzIGRpc2FibGVkIGFuZCBkaXNjYXJkaW5nIGludGVycnVwdCBldmVudHMuIFRoaXMgZW5zdXJlcyB0aGF0CisJc3RyYXkgaW50ZXJydXB0cyB3aWxsIGJlIG1vcHBlZCB1cCBhbmQgbm90IGhhbmcgdGhlIGJ1cy4gU2V0CisJY2hhbkEuZGV2IHRvIHBvaW50IHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGl0c2VsZi4gVGhlCisJcHJpdmF0ZSBhbmQgbmFtZSBmaWVsZCB5b3UgbWF5IHVzZSBhcyB5b3Ugd2lzaC4gVGhlIHByaXZhdGUgZmllbGQKKwlpcyB1bnVzZWQgYnkgdGhlIFo4NTIzMCBsYXllci4gVGhlIG5hbWUgaXMgdXNlZCBmb3IgZXJyb3IgcmVwb3J0aW5nCisJYW5kIGl0IG1heSB0aHVzIG1ha2Ugc2Vuc2UgdG8gbWFrZSBpdCBtYXRjaCB0aGUgbmV0d29yayBuYW1lLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVJlcGVhdCB0aGUgc2FtZSBvcGVyYXRpb24gd2l0aCB0aGUgQiBjaGFubmVsIGlmIHlvdXIgY2hpcCBoYXMKKwlib3RoIGNoYW5uZWxzIHdpcmVkIHRvIHNvbWV0aGluZyB1c2VmdWwuIFRoaXMgaXNuJ3QgYWx3YXlzIHRoZQorCWNhc2UuIElmIGl0IGlzIG5vdCB3aXJlZCB0aGVuIHRoZSBJL08gdmFsdWVzIGRvIG5vdCBtYXR0ZXIsIGJ1dAorCXlvdSBtdXN0IGluaXRpYWxpc2UgY2hhbkIuZGV2LgorICA8L3BhcmE+CisgIDxwYXJhPgorCUlmIHlvdXIgYm9hcmQgaGFzIERNQSBmYWNpbGl0aWVzIHRoZW4gaW5pdGlhbGlzZSB0aGUgdHhkbWEgYW5kCisJcnhkbWEgZmllbGRzIGZvciB0aGUgcmVsZXZhbnQgY2hhbm5lbHMuIFlvdSBtdXN0IGFsc28gYWxsb2NhdGUgdGhlCisJSVNBIERNQSBjaGFubmVscyBhbmQgZG8gYW55IG5lY2Vzc2FyeSBib2FyZCBsZXZlbCBpbml0aWFsaXNhdGlvbgorCXRvIGNvbmZpZ3VyZSB0aGVtLiBUaGUgbG93IGxldmVsIGRyaXZlciB3aWxsIGRvIHRoZSBaODUzMCBhbmQKKwlETUEgY29udHJvbGxlciBwcm9ncmFtbWluZyBidXQgbm90IGJvYXJkIHNwZWNpZmljIG1hZ2ljLgorICA8L3BhcmE+CisgIDxwYXJhPgorCUhhdmluZyBpbml0aWFsaXNlZCB0aGUgZGV2aWNlIHlvdSBjYW4gdGhlbiBjYWxsCisJPGZ1bmN0aW9uPno4NTMwX2luaXQ8L2Z1bmN0aW9uPi4gVGhpcyB3aWxsIHByb2JlIHRoZSBjaGlwIGFuZCAKKwlyZXNldCBpdCBpbnRvIGEga25vd24gc3RhdGUuIEFuIGlkZW50aWZpY2F0aW9uIHNlcXVlbmNlIGlzIHRoZW4KKwlydW4gdG8gaWRlbnRpZnkgdGhlIGNoaXAgdHlwZS4gSWYgdGhlIGNoZWNrcyBmYWlsIHRvIHBhc3MgdGhlCisJZnVuY3Rpb24gcmV0dXJucyBhIG5vbiB6ZXJvIGVycm9yIGNvZGUuIFR5cGljYWxseSB0aGlzIGluZGljYXRlcworCXRoYXQgdGhlIHBvcnQgZ2l2ZW4gaXMgbm90IHZhbGlkLiBBZnRlciB0aGlzIGNhbGwgdGhlCisJdHlwZSBmaWVsZCBvZiB0aGUgejg1MzBfZGV2IHN0cnVjdHVyZSBpcyBpbml0aWFsaXNlZCB0byBlaXRoZXIKKwlaODUzMCwgWjg1QzMwIG9yIFo4NTIzMCBhY2NvcmRpbmcgdG8gdGhlIGNoaXAgZm91bmQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJT25jZSB5b3UgaGF2ZSBjYWxsZWQgejg1MzBfaW5pdCB5b3UgY2FuIGFsc28gbWFrZSB1c2Ugb2YgdGhlIHV0aWxpdHkKKwlmdW5jdGlvbiA8ZnVuY3Rpb24+ejg1MzBfZGVzY3JpYmU8L2Z1bmN0aW9uPi4gVGhpcyBwcm92aWRlcyBhIAorCWNvbnNpc3RlbnQgcmVwb3J0aW5nIGZvcm1hdCBmb3IgdGhlIFo4NTMwIGRldmljZXMsIGFuZCBhbGxvd3MgYWxsCisJdGhlIGRyaXZlcnMgdG8gcHJvdmlkZSBjb25zaXN0ZW50IHJlcG9ydGluZy4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXI+CisgCTx0aXRsZT5BdHRhY2hpbmcgTmV0d29yayBJbnRlcmZhY2VzPC90aXRsZT4KKyAgPHBhcmE+CisJSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmYWNpbGl0aWVzIG9mIHRoZSBkcml2ZXIsCisJdGhlbiB5b3UgbmVlZCB0byBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBlYWNoIGNoYW5uZWwgdGhhdCBpcworCXByZXNlbnQgYW5kIGluIHVzZS4gSW4gYWRkaXRpb24gdG8gdXNlIHRoZSBTeW5jUFBQIGFuZCBDaXNjbyBIRExDCisJeW91IG5lZWQgdG8gZm9sbG93IHNvbWUgYWRkaXRpb25hbCBwbHVtYmluZyBydWxlcy4gVGhleSBtYXkgc2VlbSAKKwljb21wbGV4IGJ1dCBhIGxvb2sgYXQgdGhlIGV4YW1wbGUgaG9zdGVzc19zdjExIGRyaXZlciBzaG91bGQKKwlyZWFzc3VyZSB5b3UuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIG5ldHdvcmsgZGV2aWNlIHVzZWQgZm9yIGVhY2ggY2hhbm5lbCBzaG91bGQgYmUgcG9pbnRlZCB0byBieQorCXRoZSBuZXRkZXZpY2UgZmllbGQgb2YgZWFjaCBjaGFubmVsLiBUaGUgZGV2LSZndDsgcHJpdiBmaWVsZCBvZiB0aGUKKwluZXR3b3JrIGRldmljZSBwb2ludHMgdG8geW91ciBwcml2YXRlIGRhdGEgLSB5b3Ugd2lsbCBuZWVkIHRvIGJlCisJYWJsZSB0byBmaW5kIHlvdXIgcHBwIGRldmljZSBmcm9tIHRoaXMuIEluIGFkZGl0aW9uIHRvIHVzZSB0aGUKKwlzeW5jIHBwcCBsYXllciB0aGUgcHJpdmF0ZSBkYXRhIG11c3Qgc3RhcnQgd2l0aCBhIHZvaWQgKiBwb2ludGVyCisJdG8gdGhlIHN5bmNwcHAgc3RydWN0dXJlcy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgd2F5IG1vc3QgZHJpdmVycyBhcHByb2FjaCB0aGlzIHBhcnRpY3VsYXIgcHJvYmxlbSBpcyB0bworCWNyZWF0ZSBhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBaODUzMCBkZXZpY2UgZGVmaW5pdGlvbiBhbmQKKwlwdXQgdGhhdCBhbmQgdGhlIHN5bmNwcHAgcG9pbnRlciBpbnRvIHRoZSBwcml2YXRlIGZpZWxkIG9mCisJdGhlIG5ldHdvcmsgZGV2aWNlLiBUaGUgbmV0d29yayBkZXZpY2UgZmllbGRzIG9mIHRoZSBjaGFubmVscworCXRoZW4gcG9pbnQgYmFjayB0byB0aGUgbmV0d29yayBkZXZpY2VzLiBUaGUgcHBwX2RldmljZSBjYW4gYWxzbworCWJlIHB1dCBpbiB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgY29udmVuaWVudGx5LgorICA8L3BhcmE+CisgIDxwYXJhPgorCUlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgc3luY2hyb25vdXMgcHBwIHRoZW4geW91IG5lZWQgdG8gYXR0YWNoCisJdGhlIHN5bmNwcHAgbGF5ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlLiBZb3Ugc2hvdWxkIGRvIHRoaXMgYmVmb3JlCisJeW91IHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZS4gVGhlCisJPGZ1bmN0aW9uPnNwcHBfYXR0YWNoPC9mdW5jdGlvbj4gcmVxdWlyZXMgdGhhdCB0aGUgZmlyc3Qgdm9pZCAqCisJcG9pbnRlciBpbiB5b3VyIHByaXZhdGUgZGF0YSBpcyBwb2ludGluZyB0byBhbiBlbXB0eSBzdHJ1Y3QKKwlwcHBfZGV2aWNlLiBUaGUgZnVuY3Rpb24gZmlsbHMgaW4gdGhlIGluaXRpYWwgZGF0YSBmb3IgdGhlCisJcHBwL2hkbGMgbGF5ZXIuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJQmVmb3JlIHlvdSByZWdpc3RlciB5b3VyIG5ldHdvcmsgZGV2aWNlIHlvdSB3aWxsIGFsc28gbmVlZCB0bworCXByb3ZpZGUgc3VpdGFibGUgaGFuZGxlcnMgZm9yIG1vc3Qgb2YgdGhlIG5ldHdvcmsgZGV2aWNlIGNhbGxiYWNrcy4gCisJU2VlIHRoZSBuZXR3b3JrIGRldmljZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcy4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXI+CisgCTx0aXRsZT5Db25maWd1cmluZyBBbmQgQWN0aXZhdGluZyBUaGUgUG9ydDwvdGl0bGU+CisgIDxwYXJhPgorCVRoZSBaODUyMzAgZHJpdmVyIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgYW5kIHRhYmxlcyB0byBsb2FkIHRoZQorCXBvcnQgcmVnaXN0ZXJzIG9uIHRoZSBaODUzMCBjaGlwcy4gV2hlbiBwcm9ncmFtbWluZyB0aGUgcmVnaXN0ZXIKKwlzZXR0aW5ncyBmb3IgYSBjaGFubmVsIGJlIGF3YXJlIHRoYXQgdGhlIGRvY3VtZW50YXRpb24gcmVjb21tZW5kcworCWluaXRpYWxpc2F0aW9uIG9yZGVycy4gU3RyYW5nZSB0aGluZ3MgaGFwcGVuIHdoZW4gdGhlc2UgYXJlIG5vdAorCWZvbGxvd2VkLiAKKyAgPC9wYXJhPgorICA8cGFyYT4KKwk8ZnVuY3Rpb24+ejg1MzBfY2hhbm5lbF9sb2FkPC9mdW5jdGlvbj4gdGFrZXMgYW4gYXJyYXkgb2YKKwlwYWlycyBvZiBpbml0aWFsaXNhdGlvbiB2YWx1ZXMgaW4gYW4gYXJyYXkgb2YgdTggdHlwZS4gVGhlIGZpcnN0CisJdmFsdWUgaXMgdGhlIFo4NTMwIHJlZ2lzdGVyIG51bWJlci4gQWRkIDE2IHRvIGluZGljYXRlIHRoZSBhbHRlcm5hdGUKKwlyZWdpc3RlciBiYW5rIG9uIHRoZSBsYXRlciBjaGlwcy4gVGhlIGFycmF5IGlzIHRlcm1pbmF0ZWQgYnkgYSAyNTUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIGRyaXZlciBwcm92aWRlcyBhIHBhaXIgb2YgcHVibGljIHRhYmxlcy4gVGhlCisJejg1MzBfaGRsY19raWxvc3RyZWFtIHRhYmxlIGlzIGZvciB0aGUgVUsgJ0tpbG9zdHJlYW0nIHNlcnZpY2UgYW5kCisJYWxzbyBoYXBwZW5zIHRvIGNvdmVyIG1vc3Qgb3RoZXIgZW5kIGhvc3QgY29uZmlndXJhdGlvbnMuIFRoZQorCXo4NTMwX2hkbGNfa2lsb3N0cmVhbV84NTIzMCB0YWJsZSBpcyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIHVzaW5nCisJdGhlIGVuaGFuY2VtZW50cyBvZiB0aGUgODUyMzAgY2hpcC4gVGhlIGNvbmZpZ3VyYXRpb24gbG9hZGVkIGlzCisJc3RhbmRhcmQgTlJaIGVuY29kZWQgc3luY2hyb25vdXMgZGF0YSB3aXRoIEhETEMgYml0c3R1ZmZpbmcuIEFsbAorCW9mIHRoZSB0aW1pbmcgaXMgdGFrZW4gZnJvbSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVdoZW4gd3JpdGluZyB5b3VyIG93biB0YWJsZXMgYmUgYXdhcmUgdGhhdCB0aGUgZHJpdmVyIGludGVybmFsbHkKKwl0cmFja3MgcmVnaXN0ZXIgdmFsdWVzLiBJdCBtYXkgbmVlZCB0byByZWxvYWQgdmFsdWVzLiBZb3Ugc2hvdWxkCisJdGhlcmVmb3JlIGJlIHN1cmUgdG8gc2V0IHJlZ2lzdGVycyAxLTcsIDktMTEsIDE0IGFuZCAxNSBpbiBhbGwKKwljb25maWd1cmF0aW9ucy4gV2hlcmUgdGhlIHJlZ2lzdGVyIHNldHRpbmdzIGRlcGVuZCBvbiBETUEgc2VsZWN0aW9uCisJdGhlIGRyaXZlciB3aWxsIHVwZGF0ZSB0aGUgYml0cyBpdHNlbGYgd2hlbiB5b3Ugb3BlbiBvciBjbG9zZS4KKwlMb2FkaW5nIGEgbmV3IHRhYmxlIHdpdGggdGhlIGludGVyZmFjZSBvcGVuIGlzIG5vdCByZWNvbW1lbmRlZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGVyZSBhcmUgdGhyZWUgc3RhbmRhcmQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBjb3JlCisJY29kZS4gSW4gUElPIG1vZGUgdGhlIGludGVyZmFjZSBpcyBwcm9ncmFtbWVkIHVwIHRvIHVzZQorCWludGVycnVwdCBkcml2ZW4gUElPLiBUaGlzIHBsYWNlcyBoaWdoIGRlbWFuZHMgb24gdGhlIGhvc3QgcHJvY2Vzc29yCisJdG8gYXZvaWQgbGF0ZW5jeS4gVGhlIGRyaXZlciBpcyB3cml0dGVuIHRvIHRha2UgYWNjb3VudCBvZiBsYXRlbmN5CisJaXNzdWVzIGJ1dCBpdCBjYW5ub3QgYXZvaWQgbGF0ZW5jaWVzIGNhdXNlZCBieSBvdGhlciBkcml2ZXJzLAorCW5vdGFibHkgSURFIGluIFBJTyBtb2RlLiBCZWNhdXNlIHRoZSBkcml2ZXJzIGFsbG9jYXRlIGJ1ZmZlcnMgeW91CisJbXVzdCBhbHNvIHByZXZlbnQgTVRVIGNoYW5nZXMgd2hpbGUgdGhlIHBvcnQgaXMgb3Blbi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlPbmNlIHRoZSBwb3J0IGlzIG9wZW4gaXQgd2lsbCBjYWxsIHRoZSByeF9mdW5jdGlvbiBvZiBlYWNoIGNoYW5uZWwKKwl3aGVuZXZlciBhIGNvbXBsZXRlZCBwYWNrZXQgYXJyaXZlZC4gVGhpcyBpcyBpbnZva2VkIGZyb20KKwlpbnRlcnJ1cHQgY29udGV4dCBhbmQgcGFzc2VzIHlvdSB0aGUgY2hhbm5lbCBhbmQgYSBuZXR3b3JrCQorCWJ1ZmZlciAoc3RydWN0IHNrX2J1ZmYpIGhvbGRpbmcgdGhlIGRhdGEuIFRoZSBkYXRhIGluY2x1ZGVzCisJdGhlIENSQyBieXRlcyBzbyBtb3N0IHVzZXJzIHdpbGwgd2FudCB0byB0cmltIHRoZSBsYXN0IHR3bworCWJ5dGVzIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBkYXRhLiBUaGlzIGZ1bmN0aW9uIGlzIHZlcnkgdGltaW5nCisJY3JpdGljYWwuIFdoZW4geW91IHdpc2ggdG8gc2ltcGx5IGRpc2NhcmQgZGF0YSB0aGUgc3VwcG9ydAorCWNvZGUgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uIDxmdW5jdGlvbj56ODUzMF9udWxsX3J4PC9mdW5jdGlvbj4KKwl0byBkaXNjYXJkIHRoZSBkYXRhLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRvIGFjdGl2ZSBQSU8gbW9kZSBzZW5kaW5nIGFuZCByZWNlaXZpbmcgdGhlIDxmdW5jdGlvbj4KKwl6ODUzMF9zeW5jX29wZW48L2Z1bmN0aW9uPiBpcyBjYWxsZWQuIFRoaXMgZXhwZWN0cyB0byBiZSBwYXNzZWQKKwl0aGUgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBjaGFubmVsLiBUeXBpY2FsbHkgdGhpcyBpcyBjYWxsZWQgZnJvbQorCXlvdXIgbmV0d29yayBkZXZpY2Ugb3BlbiBjYWxsYmFjay4gT24gYSBmYWlsdXJlIGEgbm9uIHplcm8gZXJyb3IKKwlzdGF0dXMgaXMgcmV0dXJuZWQuIFRoZSA8ZnVuY3Rpb24+ejg1MzBfc3luY19jbG9zZTwvZnVuY3Rpb24+IAorCWZ1bmN0aW9uIHNodXRzIGRvd24gYSBQSU8gY2hhbm5lbC4gVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSAKKwljaGFubmVsIGlzIG9wZW5lZCBhZ2FpbglhbmQgYmVmb3JlIHRoZSBkcml2ZXIgc2h1dHMgZG93biAKKwlhbmQgdW5sb2Fkcy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgaWRlYWwgbW9kZSBvZiBvcGVyYXRpb24gaXMgZHVhbCBjaGFubmVsIERNQSBtb2RlLiBIZXJlIHRoZQorCWtlcm5lbCBkcml2ZXIgd2lsbCBjb25maWd1cmUgdGhlIGJvYXJkIGZvciBETUEgaW4gYm90aCBkaXJlY3Rpb25zLgorCVRoZSBkcml2ZXIgYWxzbyBoYW5kbGVzIElTQSBETUEgaXNzdWVzIHN1Y2ggYXMgY29udHJvbGxlcgorCXByb2dyYW1taW5nIGFuZCB0aGUgbWVtb3J5IHJhbmdlIGxpbWl0IGZvciB5b3UuIFRoaXMgbW9kZSBpcworCWFjdGl2YXRlZCBieSBjYWxsaW5nIHRoZSA8ZnVuY3Rpb24+ejg1MzBfc3luY19kbWFfb3BlbjwvZnVuY3Rpb24+CisJZnVuY3Rpb24uIE9uIGZhaWx1cmUgYSBub24gemVybyBlcnJvciB2YWx1ZSBpcyByZXR1cm5lZC4KKwlPbmNlIHRoaXMgbW9kZSBpcyBhY3RpdmF0ZWQgaXQgY2FuIGJlIHNodXQgZG93biBieSBjYWxsaW5nIHRoZQorCTxmdW5jdGlvbj56ODUzMF9zeW5jX2RtYV9jbG9zZTwvZnVuY3Rpb24+LiBZb3UgbXVzdCBjYWxsIHRoZSBjbG9zZQorCWZ1bmN0aW9uIG1hdGNoaW5nIHRoZSBvcGVuIG1vZGUgeW91IHVzZWQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIGZpbmFsIHN1cHBvcnRlZCBtb2RlIHVzZXMgYSBzaW5nbGUgRE1BIGNoYW5uZWwgdG8gZHJpdmUgdGhlCisJdHJhbnNtaXQgc2lkZS4gQXMgdGhlIFo4NUMzMCBoYXMgYSBsYXJnZXIgRklGTyBvbiB0aGUgcmVjZWl2ZQorCWNoYW5uZWwJdGhpcyB0ZW5kcyB0byBpbmNyZWFzZSB0aGUgbWF4aW11bSBzcGVlZCBhIGxpdHRsZS4gCisJVGhpcyBpcyBhY3RpdmF0ZWQgYnkgY2FsbGluZyB0aGUgPGZ1bmN0aW9uPno4NTMwX3N5bmNfdHhkbWFfb3BlbgorCTwvZnVuY3Rpb24+LiBUaGlzIHJldHVybnMgYSBub24gemVybyBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIFRoZQorCTxmdW5jdGlvbj56ODUzMF9zeW5jX3R4ZG1hX2Nsb3NlPC9mdW5jdGlvbj4gZnVuY3Rpb24gY2xvc2VzIGRvd24KKwl0aGUgWjg1MzAgaW50ZXJmYWNlIGZyb20gdGhpcyBtb2RlLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlcj4KKyAJPHRpdGxlPk5ldHdvcmsgTGF5ZXIgRnVuY3Rpb25zPC90aXRsZT4KKyAgPHBhcmE+CisJVGhlIFo4NTMwIGxheWVyIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBxdWV1ZSBwYWNrZXRzIGZvcgorCXRyYW5zbWlzc2lvbi4gVGhlIGRyaXZlciBpbnRlcm5hbGx5IGJ1ZmZlcnMgdGhlIGZyYW1lIGN1cnJlbnRseQorCWJlaW5nIHRyYW5zbWl0dGVkIGFuZCBvbmUgZnVydGhlciBmcmFtZSAoaW4gb3JkZXIgdG8ga2VlcCBiYWNrCisJdG8gYmFjayB0cmFuc21pc3Npb24gcnVubmluZykuIEFueSBmdXJ0aGVyIGJ1ZmZlcmluZyBpcyB1cCB0bworCXRoZSBjYWxsZXIuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIGZ1bmN0aW9uIDxmdW5jdGlvbj56ODUzMF9xdWV1ZV94bWl0PC9mdW5jdGlvbj4gdGFrZXMgYSBuZXR3b3JrCisJYnVmZmVyIGluIHNrX2J1ZmYgZm9ybWF0IGFuZCBxdWV1ZXMgaXQgZm9yIHRyYW5zbWlzc2lvbi4gVGhlCisJY2FsbGVyIG11c3QgcHJvdmlkZSB0aGUgZW50aXJlIHBhY2tldCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlCisJYml0c3R1ZmZpbmcgYW5kIENSQy4gVGhpcyBpcyBub3JtYWxseSBkb25lIGJ5IHRoZSBjYWxsZXIgdmlhCisJdGhlIHN5bmNwcHAgaW50ZXJmYWNlIGxheWVyLiBJdCByZXR1cm5zIDAgaWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiAKKyAgICAgICAgcXVldWVkIGFuZCBub24gemVybyB2YWx1ZXMgIGZvciBxdWV1ZSBmdWxsLiBJZiB0aGUgZnVuY3Rpb24gYWNjZXB0cyAKKwl0aGUgYnVmZmVyIGl0IGJlY29tZXMgcHJvcGVydHkgb2YgdGhlIFo4NTMwIGxheWVyIGFuZCB0aGUgY2FsbGVyIAorCXNob3VsZCBub3QgZnJlZSBpdC4gCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIGZ1bmN0aW9uIDxmdW5jdGlvbj56ODUzMF9nZXRfc3RhdHM8L2Z1bmN0aW9uPiByZXR1cm5zIGEgcG9pbnRlcgorCXRvIGFuIGludGVybmFsbHkgbWFpbnRhaW5lZCBwZXIgaW50ZXJmYWNlIHN0YXRpc3RpY3MgYmxvY2suIFRoaXMKKwlwcm92aWRlcyBtb3N0IG9mIHRoZSBpbnRlcmZhY2UgY29kZSBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBuZXR3b3JrCisJbGF5ZXIgZ2V0X3N0YXRzIGNhbGxiYWNrLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlcj4KKyAgICAgPHRpdGxlPlBvcnRpbmcgVGhlIFo4NTMwIERyaXZlcjwvdGl0bGU+CisgIDxwYXJhPgorCVRoZSBaODUzMCBkcml2ZXIgaXMgd3JpdHRlbiB0byBiZSBwb3J0YWJsZS4gSW4gRE1BIG1vZGUgaXQgbWFrZXMKKwlhc3N1bXB0aW9ucyBhYm91dCB0aGUgdXNlIG9mIElTQSBETUEuIFRoZXNlIGFyZSBwcm9iYWJseSB3YXJyYW50ZWQKKwlpbiBtb3N0IGNhc2VzIGFzIHRoZSBaODUyMzAgaW4gcGFydGljdWxhciB3YXMgZGVzaWduZWQgdG8gZ2x1ZSB0byBQQworCXR5cGUgbWFjaGluZXMuIFRoZSBQSU8gbW9kZSBtYWtlcyBubyByZWFsIGFzc3VtcHRpb25zLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVNob3VsZCB5b3UgbmVlZCB0byByZXRhcmdldCB0aGUgWjg1MzAgZHJpdmVyIHRvIGFub3RoZXIgYXJjaGl0ZWN0dXJlCisJdGhlIG9ubHkgY29kZSB0aGF0IHNob3VsZCBuZWVkIGNoYW5naW5nIGFyZSB0aGUgcG9ydCBJL08gZnVuY3Rpb25zLgorCUF0IHRoZSBtb21lbnQgdGhlc2UgYXNzdW1lIFBDIEkvTyBwb3J0IGFjY2Vzc2VzLiBUaGlzIG1heSBub3QgYmUKKwlhcHByb3ByaWF0ZSBmb3IgYWxsIHBsYXRmb3Jtcy4gUmVwbGFjaW5nIAorCTxmdW5jdGlvbj56ODUzMF9yZWFkX3BvcnQ8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPno4NTMwX3dyaXRlX3BvcnQKKwk8L2Z1bmN0aW9uPiBpcyBpbnRlbmRlZCB0byBiZSBhbGwgdGhhdCBpcyByZXF1aXJlZCB0byBwb3J0IHRoaXMKKwlkcml2ZXIgbGF5ZXIuCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJidWdzIj4KKyAgICAgPHRpdGxlPktub3duIEJ1Z3MgQW5kIEFzc3VtcHRpb25zPC90aXRsZT4KKyAgPHBhcmE+CisgIDx2YXJpYWJsZWxpc3Q+CisgICAgPHZhcmxpc3RlbnRyeT48dGVybT5JbnRlcnJ1cHQgTG9ja2luZzwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisJVGhlIGxvY2tpbmcgaW4gdGhlIGRyaXZlciBpcyBkb25lIHZpYSB0aGUgZ2xvYmFsIGNsaS9zdGkgbG9jay4gVGhpcworCW1ha2VzIGZvciByZWxhdGl2ZWx5IHBvb3IgU01QIHBlcmZvcm1hbmNlLiBTd2l0Y2hpbmcgdGhpcyB0byB1c2UgYQorCXBlciBkZXZpY2Ugc3BpbiBsb2NrIHdvdWxkIHByb2JhYmx5IG1hdGVyaWFsbHkgaW1wcm92ZSBwZXJmb3JtYW5jZS4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+T2NjYXNpb25hbCBGYWlsdXJlczwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisJV2UgaGF2ZSByZXBvcnRzIG9mIG9jY2FzaW9uYWwgZmFpbHVyZXMgd2hlbiBydW4gZm9yIHZlcnkgbG9uZworCXBlcmlvZHMgb2YgdGltZSBhbmQgdGhlIGRyaXZlciBzdGFydHMgdG8gcmVjZWl2ZSBqdW5rIGZyYW1lcy4gQXQKKwl0aGUgbW9tZW50IHRoZSBjYXVzZSBvZiB0aGlzIGlzIG5vdCBjbGVhci4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxpc3Q+CisJCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CishRWRyaXZlcnMvbmV0L3dhbi96ODUyMzAuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImludGZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5JbnRlcm5hbCBGdW5jdGlvbnM8L3RpdGxlPgorIUlkcml2ZXJzL25ldC93YW4vejg1MjMwLmMKKyAgPC9jaGFwdGVyPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmVkYjYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dApAQCAtMCwwICsxLDIwOCBAQAorWyBOT1RFOiBUaGUgdmlydF90b19idXMoKSBhbmQgYnVzX3RvX3ZpcnQoKSBmdW5jdGlvbnMgaGF2ZSBiZWVuCisJc3VwZXJzZWRlZCBieSB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGUgUENJIERNQQorCWludGVyZmFjZSAoc2VlIERvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0KS4gIFRoZXkgY29udGludWUKKwl0byBiZSBkb2N1bWVudGVkIGJlbG93IGZvciBoaXN0b3JpY2FsIHB1cnBvc2VzLCBidXQgbmV3IGNvZGUKKwltdXN0IG5vdCB1c2UgdGhlbS4gLS1kYXZpZG0gMDAvMTIvMTIgXQorCitbIFRoaXMgaXMgYSBtYWlsIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gYSBxdWVyeSBvbiBJTyBtYXBwaW5nLCB0aHVzIHRoZQorICBzdHJhbmdlIGZvcm1hdCBmb3IgYSAiZG9jdW1lbnQiIF0KKworVGhlIEFIQS0xNTQyIGlzIGEgYnVzLW1hc3RlciBkZXZpY2UsIGFuZCB5b3VyIHBhdGNoIG1ha2VzIHRoZSBkcml2ZXIgZ2l2ZSB0aGUKK2NvbnRyb2xsZXIgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcnMsIHdoaWNoIGlzIGNvcnJlY3Qgb24geDg2CisoYmVjYXVzZSBhbGwgYnVzIG1hc3RlciBkZXZpY2VzIHNlZSB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmdzIGRpcmVjdGx5KS4gCisKK0hvd2V2ZXIsIG9uIG1hbnkgc2V0dXBzLCB0aGVyZSBhcmUgYWN0dWFsbHkgX3RocmVlXyBkaWZmZXJlbnQgd2F5cyBvZiBsb29raW5nCithdCBtZW1vcnkgYWRkcmVzc2VzLCBhbmQgaW4gdGhpcyBjYXNlIHdlIGFjdHVhbGx5IHdhbnQgdGhlIHRoaXJkLCB0aGUKK3NvLWNhbGxlZCAiYnVzIGFkZHJlc3MiLiAKKworRXNzZW50aWFsbHksIHRoZSB0aHJlZSB3YXlzIG9mIGFkZHJlc3NpbmcgbWVtb3J5IGFyZSAodGhpcyBpcyAicmVhbCBtZW1vcnkiLAordGhhdCBpcywgbm9ybWFsIFJBTS0tc2VlIGxhdGVyIGFib3V0IG90aGVyIGRldGFpbHMpOiAKKworIC0gQ1BVIHVudHJhbnNsYXRlZC4gIFRoaXMgaXMgdGhlICJwaHlzaWNhbCIgYWRkcmVzcy4gIFBoeXNpY2FsIGFkZHJlc3MgCisgICAwIGlzIHdoYXQgdGhlIENQVSBzZWVzIHdoZW4gaXQgZHJpdmVzIHplcm9lcyBvbiB0aGUgbWVtb3J5IGJ1cy4KKworIC0gQ1BVIHRyYW5zbGF0ZWQgYWRkcmVzcy4gVGhpcyBpcyB0aGUgInZpcnR1YWwiIGFkZHJlc3MsIGFuZCBpcyAKKyAgIGNvbXBsZXRlbHkgaW50ZXJuYWwgdG8gdGhlIENQVSBpdHNlbGYgd2l0aCB0aGUgQ1BVIGRvaW5nIHRoZSBhcHByb3ByaWF0ZQorICAgdHJhbnNsYXRpb25zIGludG8gIkNQVSB1bnRyYW5zbGF0ZWQiLiAKKworIC0gYnVzIGFkZHJlc3MuIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgbWVtb3J5IGFzIHNlZW4gYnkgT1RIRVIgZGV2aWNlcywgCisgICBub3QgdGhlIENQVS4gTm93LCBpbiB0aGVvcnkgdGhlcmUgY291bGQgYmUgbWFueSBkaWZmZXJlbnQgYnVzIAorICAgYWRkcmVzc2VzLCB3aXRoIGVhY2ggZGV2aWNlIHNlZWluZyBtZW1vcnkgaW4gc29tZSBkZXZpY2Utc3BlY2lmaWMgd2F5LCBidXQKKyAgIGhhcHBpbHkgbW9zdCBoYXJkd2FyZSBkZXNpZ25lcnMgYXJlbid0IGFjdHVhbGx5IGFjdGl2ZWx5IHRyeWluZyB0byBtYWtlCisgICB0aGluZ3MgYW55IG1vcmUgY29tcGxleCB0aGFuIG5lY2Vzc2FyeSwgc28geW91IGNhbiBhc3N1bWUgdGhhdCBhbGwgCisgICBleHRlcm5hbCBoYXJkd2FyZSBzZWVzIHRoZSBtZW1vcnkgdGhlIHNhbWUgd2F5LiAKKworTm93LCBvbiBub3JtYWwgUENzIHRoZSBidXMgYWRkcmVzcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBwaHlzaWNhbAorYWRkcmVzcywgYW5kIHRoaW5ncyBhcmUgdmVyeSBzaW1wbGUgaW5kZWVkLiBIb3dldmVyLCB0aGV5IGFyZSB0aGF0IHNpbXBsZQorYmVjYXVzZSB0aGUgbWVtb3J5IGFuZCB0aGUgZGV2aWNlcyBzaGFyZSB0aGUgc2FtZSBhZGRyZXNzIHNwYWNlLCBhbmQgdGhhdCBpcworbm90IGdlbmVyYWxseSBuZWNlc3NhcmlseSB0cnVlIG9uIG90aGVyIFBDSS9JU0Egc2V0dXBzLiAKKworTm93LCBqdXN0IGFzIGFuIGV4YW1wbGUsIG9uIHRoZSBQUmVQIChQb3dlclBDIFJlZmVyZW5jZSBQbGF0Zm9ybSksIHRoZSAKK0NQVSBzZWVzIGEgbWVtb3J5IG1hcCBzb21ldGhpbmcgbGlrZSB0aGlzICh0aGlzIGlzIGZyb20gbWVtb3J5KToKKworCTAtMiBHQgkJInJlYWwgbWVtb3J5IgorCTIgR0ItMyBHQgkic3lzdGVtIElPIiAoaW5iL291dCBhbmQgc2ltaWxhciBhY2Nlc3NlcyBvbiB4ODYpCisJMyBHQi00IEdCIAkiSU8gbWVtb3J5IiAoc2hhcmVkIG1lbW9yeSBvdmVyIHRoZSBJTyBidXMpCisKK05vdywgdGhhdCBsb29rcyBzaW1wbGUgZW5vdWdoLiBIb3dldmVyLCB3aGVuIHlvdSBsb29rIGF0IHRoZSBzYW1lIHRoaW5nIGZyb20KK3RoZSB2aWV3cG9pbnQgb2YgdGhlIGRldmljZXMsIHlvdSBoYXZlIHRoZSByZXZlcnNlLCBhbmQgdGhlIHBoeXNpY2FsIG1lbW9yeQorYWRkcmVzcyAwIGFjdHVhbGx5IHNob3dzIHVwIGFzIGFkZHJlc3MgMiBHQiBmb3IgYW55IElPIG1hc3Rlci4KKworU28gd2hlbiB0aGUgQ1BVIHdhbnRzIGFueSBidXMgbWFzdGVyIHRvIHdyaXRlIHRvIHBoeXNpY2FsIG1lbW9yeSAwLCBpdCAKK2hhcyB0byBnaXZlIHRoZSBtYXN0ZXIgYWRkcmVzcyAweDgwMDAwMDAwIGFzIHRoZSBtZW1vcnkgYWRkcmVzcy4KKworU28sIGZvciBleGFtcGxlLCBkZXBlbmRpbmcgb24gaG93IHRoZSBrZXJuZWwgaXMgYWN0dWFsbHkgbWFwcGVkIG9uIHRoZSAKK1BQQywgeW91IGNhbiBlbmQgdXAgd2l0aCBhIHNldHVwIGxpa2UgdGhpczoKKworIHBoeXNpY2FsIGFkZHJlc3M6CTAKKyB2aXJ0dWFsIGFkZHJlc3M6CTB4QzAwMDAwMDAKKyBidXMgYWRkcmVzczoJCTB4ODAwMDAwMDAKKword2hlcmUgYWxsIHRoZSBhZGRyZXNzZXMgYWN0dWFsbHkgcG9pbnQgdG8gdGhlIHNhbWUgdGhpbmcuICBJdCdzIGp1c3Qgc2VlbiAKK3Rocm91Z2ggZGlmZmVyZW50IHRyYW5zbGF0aW9ucy4uCisKK1NpbWlsYXJseSwgb24gdGhlIEFscGhhLCB0aGUgbm9ybWFsIHRyYW5zbGF0aW9uIGlzCisKKyBwaHlzaWNhbCBhZGRyZXNzOgkwCisgdmlydHVhbCBhZGRyZXNzOgkweGZmZmZmYzAwMDAwMDAwMDAKKyBidXMgYWRkcmVzczoJCTB4NDAwMDAwMDAKKworKGJ1dCB0aGVyZSBhcmUgYWxzbyBBbHBoYXMgd2hlcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIHRoZSBidXMgYWRkcmVzcworYXJlIHRoZSBzYW1lKS4gCisKK0FueXdheSwgdGhlIHdheSB0byBsb29rIHVwIGFsbCB0aGVzZSB0cmFuc2xhdGlvbnMsIHlvdSBkbworCisJI2luY2x1ZGUgPGFzbS9pby5oPgorCisJcGh5c19hZGRyID0gdmlydF90b19waHlzKHZpcnRfYWRkcik7CisJdmlydF9hZGRyID0gcGh5c190b192aXJ0KHBoeXNfYWRkcik7CisJIGJ1c19hZGRyID0gdmlydF90b19idXModmlydF9hZGRyKTsKKwl2aXJ0X2FkZHIgPSBidXNfdG9fdmlydChidXNfYWRkcik7CisKK05vdywgd2hlbiBkbyB5b3UgbmVlZCB0aGVzZT8KKworWW91IHdhbnQgdGhlIF92aXJ0dWFsXyBhZGRyZXNzIHdoZW4geW91IGFyZSBhY3R1YWxseSBnb2luZyB0byBhY2Nlc3MgdGhhdCAKK3BvaW50ZXIgZnJvbSB0aGUga2VybmVsLiBTbyB5b3UgY2FuIGhhdmUgc29tZXRoaW5nIGxpa2UgdGhpczoKKworCS8qCisJICogdGhpcyBpcyB0aGUgaGFyZHdhcmUgIm1haWxib3giIHdlIHVzZSB0byBjb21tdW5pY2F0ZSB3aXRoCisJICogdGhlIGNvbnRyb2xsZXIuIFRoZSBjb250cm9sbGVyIHNlZXMgdGhpcyBkaXJlY3RseS4KKwkgKi8KKwlzdHJ1Y3QgbWFpbGJveCB7CisJCV9fdTMyIHN0YXR1czsKKwkJX191MzIgYnVmc3RhcnQ7CisJCV9fdTMyIGJ1ZmxlbjsKKwkJLi4KKwl9IG1ib3g7CisKKwkJdW5zaWduZWQgY2hhciAqIHJldGJ1ZmZlcjsKKworCQkvKiBnZXQgdGhlIGFkZHJlc3MgZnJvbSB0aGUgY29udHJvbGxlciAqLworCQlyZXRidWZmZXIgPSBidXNfdG9fdmlydChtYm94LmJ1ZnN0YXJ0KTsKKwkJc3dpdGNoIChyZXRidWZmZXJbMF0pIHsKKwkJCWNhc2UgU1RBVFVTX09LOgorCQkJCS4uLgorCitvbiB0aGUgb3RoZXIgaGFuZCwgeW91IHdhbnQgdGhlIGJ1cyBhZGRyZXNzIHdoZW4geW91IGhhdmUgYSBidWZmZXIgdGhhdCAKK3lvdSB3YW50IHRvIGdpdmUgdG8gdGhlIGNvbnRyb2xsZXI6CisKKwkvKiBhc2sgdGhlIGNvbnRyb2xsZXIgdG8gcmVhZCB0aGUgc2Vuc2Ugc3RhdHVzIGludG8gInNlbnNlX2J1ZmZlciIgKi8KKwltYm94LmJ1ZnN0YXJ0ID0gdmlydF90b19idXMoJnNlbnNlX2J1ZmZlcik7CisJbWJveC5idWZsZW4gPSBzaXplb2Yoc2Vuc2VfYnVmZmVyKTsKKwltYm94LnN0YXR1cyA9IDA7CisJbm90aWZ5X2NvbnRyb2xsZXIoJm1ib3gpOworCitBbmQgeW91IGdlbmVyYWxseSBfbmV2ZXJfIHdhbnQgdG8gdXNlIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCBiZWNhdXNlIHlvdSBjYW4ndAordXNlIHRoYXQgZnJvbSB0aGUgQ1BVICh0aGUgQ1BVIG9ubHkgdXNlcyB0cmFuc2xhdGVkIHZpcnR1YWwgYWRkcmVzc2VzKSwgYW5kCit5b3UgY2FuJ3QgdXNlIGl0IGZyb20gdGhlIGJ1cyBtYXN0ZXIuIAorCitTbyB3aHkgZG8gd2UgY2FyZSBhYm91dCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhdCBhbGw/IFdlIGRvIG5lZWQgdGhlIHBoeXNpY2FsCithZGRyZXNzIGluIHNvbWUgY2FzZXMsIGl0J3MganVzdCBub3QgdmVyeSBvZnRlbiBpbiBub3JtYWwgY29kZS4gIFRoZSBwaHlzaWNhbAorYWRkcmVzcyBpcyBuZWVkZWQgaWYgeW91IHVzZSBtZW1vcnkgbWFwcGluZ3MsIGZvciBleGFtcGxlLCBiZWNhdXNlIHRoZQorInJlbWFwX3Bmbl9yYW5nZSgpIiBtbSBmdW5jdGlvbiB3YW50cyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHRvCitiZSByZW1hcHBlZCBhcyBtZWFzdXJlZCBpbiB1bml0cyBvZiBwYWdlcywgYS5rLmEuIHRoZSBwZm4gKHRoZSBtZW1vcnkKK21hbmFnZW1lbnQgbGF5ZXIgZG9lc24ndCBrbm93IGFib3V0IGRldmljZXMgb3V0c2lkZSB0aGUgQ1BVLCBzbyBpdAorc2hvdWxkbid0IG5lZWQgdG8ga25vdyBhYm91dCAiYnVzIGFkZHJlc3NlcyIgZXRjKS4KKworTk9URSBOT1RFIE5PVEUhIFRoZSBhYm92ZSBpcyBvbmx5IG9uZSBwYXJ0IG9mIHRoZSB3aG9sZSBlcXVhdGlvbi4gVGhlIGFib3ZlCitvbmx5IHRhbGtzIGFib3V0ICJyZWFsIG1lbW9yeSIsIHRoYXQgaXMsIENQVSBtZW1vcnkgKFJBTSkuIAorCitUaGVyZSBpcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHR5cGUgb2YgbWVtb3J5IHRvbywgYW5kIHRoYXQncyB0aGUgInNoYXJlZAorbWVtb3J5IiBvbiB0aGUgUENJIG9yIElTQSBidXMuIFRoYXQncyBnZW5lcmFsbHkgbm90IFJBTSAoYWx0aG91Z2ggaW4gdGhlIGNhc2UKK29mIGEgdmlkZW8gZ3JhcGhpY3MgY2FyZCBpdCBjYW4gYmUgbm9ybWFsIERSQU0gdGhhdCBpcyBqdXN0IHVzZWQgZm9yIGEgZnJhbWUKK2J1ZmZlciksIGJ1dCBjYW4gYmUgdGhpbmdzIGxpa2UgYSBwYWNrZXQgYnVmZmVyIGluIGEgbmV0d29yayBjYXJkIGV0Yy4gCisKK1RoaXMgbWVtb3J5IGlzIGNhbGxlZCAiUENJIG1lbW9yeSIgb3IgInNoYXJlZCBtZW1vcnkiIG9yICJJTyBtZW1vcnkiIG9yCit3aGF0ZXZlciwgYW5kIHRoZXJlIGlzIG9ubHkgb25lIHdheSB0byBhY2Nlc3MgaXQ6IHRoZSByZWFkYi93cml0ZWIgYW5kCityZWxhdGVkIGZ1bmN0aW9ucy4gWW91IHNob3VsZCBuZXZlciB0YWtlIHRoZSBhZGRyZXNzIG9mIHN1Y2ggbWVtb3J5LCBiZWNhdXNlCit0aGVyZSBpcyByZWFsbHkgbm90aGluZyB5b3UgY2FuIGRvIHdpdGggc3VjaCBhbiBhZGRyZXNzOiBpdCdzIG5vdAorY29uY2VwdHVhbGx5IGluIHRoZSBzYW1lIG1lbW9yeSBzcGFjZSBhcyAicmVhbCBtZW1vcnkiIGF0IGFsbCwgc28geW91IGNhbm5vdAoranVzdCBkZXJlZmVyZW5jZSBhIHBvaW50ZXIuIChTYWRseSwgb24geDg2IGl0IF9pc18gaW4gdGhlIHNhbWUgbWVtb3J5IHNwYWNlLAorc28gb24geDg2IGl0IGFjdHVhbGx5IHdvcmtzIHRvIGp1c3QgZGVmZXJlbmNlIGEgcG9pbnRlciwgYnV0IGl0J3Mgbm90Citwb3J0YWJsZSkuIAorCitGb3Igc3VjaCBtZW1vcnksIHlvdSBjYW4gZG8gdGhpbmdzIGxpa2UKKworIC0gcmVhZGluZzoKKwkvKgorCSAqIHJlYWQgZmlyc3QgMzIgYml0cyBmcm9tIElTQSBtZW1vcnkgYXQgMHhDMDAwMCwgYWthCisJICogQzAwMDowMDAwIGluIERPUyB0ZXJtcworCSAqLworCXVuc2lnbmVkIGludCBzaWduYXR1cmUgPSBpc2FfcmVhZGwoMHhDMDAwMCk7CisKKyAtIHJlbWFwcGluZyBhbmQgd3JpdGluZzoKKwkvKgorCSAqIHJlbWFwIGZyYW1lYnVmZmVyIFBDSSBtZW1vcnkgYXJlYSBhdCAweEZDMDAwMDAwLAorCSAqIHNpemUgMU1CLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgaXQ6IFdlIGNhbiBkaXJlY3RseQorCSAqIGFjY2VzcyBvbmx5IHRoZSA2NDBrLTFNQiBhcmVhLCBzbyBhbnl0aGluZyBlbHNlCisJICogaGFzIHRvIGJlIHJlbWFwcGVkLgorCSAqLworCWNoYXIgKiBiYXNlcHRyID0gaW9yZW1hcCgweEZDMDAwMDAwLCAxMDI0KjEwMjQpOworCisJLyogd3JpdGUgYSAnQScgdG8gdGhlIG9mZnNldCAxMCBvZiB0aGUgYXJlYSAqLworCXdyaXRlYignQScsYmFzZXB0cisxMCk7CisKKwkvKiB1bm1hcCB3aGVuIHdlIHVubG9hZCB0aGUgZHJpdmVyICovCisJaW91bm1hcChiYXNlcHRyKTsKKworIC0gY29weWluZyBhbmQgY2xlYXJpbmc6CisJLyogZ2V0IHRoZSA2LWJ5dGUgRXRoZXJuZXQgYWRkcmVzcyBhdCBJU0EgYWRkcmVzcyBFMDAwOjAwNDAgKi8KKwltZW1jcHlfZnJvbWlvKGtlcm5lbF9idWZmZXIsIDB4RTAwNDAsIDYpOworCS8qIHdyaXRlIGEgcGFja2V0IHRvIHRoZSBkcml2ZXIgKi8KKwltZW1jcHlfdG9pbygweEUxMDAwLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkvKiBjbGVhciB0aGUgZnJhbWUgYnVmZmVyICovCisJbWVtc2V0X2lvKDB4QTAwMDAsIDAsIDB4MTAwMDApOworCitPSywgdGhhdCBqdXN0IGFib3V0IGNvdmVycyB0aGUgYmFzaWNzIG9mIGFjY2Vzc2luZyBJTyBwb3J0YWJseS4gIFF1ZXN0aW9ucz8KK0NvbW1lbnRzPyBZb3UgbWF5IHRoaW5rIHRoYXQgYWxsIHRoZSBhYm92ZSBpcyBvdmVybHkgY29tcGxleCwgYnV0IG9uZSBkYXkgeW91CittaWdodCBmaW5kIHlvdXJzZWxmIHdpdGggYSA1MDAgTUh6IEFscGhhIGluIGZyb250IG9mIHlvdSwgYW5kIHRoZW4geW91J2xsIGJlCitoYXBweSB0aGF0IHlvdXIgZHJpdmVyIHdvcmtzIDspCisKK05vdGUgdGhhdCBrZXJuZWwgdmVyc2lvbnMgMi4wLnggKGFuZCBlYXJsaWVyKSBtaXN0YWtlbmx5IGNhbGxlZCB0aGUKK2lvcmVtYXAoKSBmdW5jdGlvbiAidnJlbWFwKCkiLiAgaW9yZW1hcCgpIGlzIHRoZSBwcm9wZXIgbmFtZSwgYnV0IEkKK2RpZG4ndCB0aGluayBzdHJhaWdodCB3aGVuIEkgd3JvdGUgaXQgb3JpZ2luYWxseS4gIFBlb3BsZSB3aG8gaGF2ZSB0bworc3VwcG9ydCBib3RoIGNhbiBkbyBzb21ldGhpbmcgbGlrZToKKyAKKwkvKiBzdXBwb3J0IG9sZCBuYW1pbmcgc2lsbGluZXNzICovCisJI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IDB4MDIwMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSNkZWZpbmUgaW9yZW1hcCB2cmVtYXAKKwkjZGVmaW5lIGlvdW5tYXAgdmZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSNlbmRpZgorIAorYXQgdGhlIHRvcCBvZiB0aGVpciBzb3VyY2UgZmlsZXMsIGFuZCB0aGVuIHRoZXkgY2FuIHVzZSB0aGUgcmlnaHQgbmFtZXMKK2V2ZW4gb24gMi4wLnggc3lzdGVtcy4gCisKK0FuZCB0aGUgYWJvdmUgc291bmRzIHdvcnNlIHRoYW4gaXQgcmVhbGx5IGlzLiAgTW9zdCByZWFsIGRyaXZlcnMgcmVhbGx5Citkb24ndCBkbyBhbGwgdGhhdCBjb21wbGV4IHRoaW5ncyAob3IgcmF0aGVyOiB0aGUgY29tcGxleGl0eSBpcyBub3Qgc28KK211Y2ggaW4gdGhlIGFjdHVhbCBJTyBhY2Nlc3NlcyBhcyBpbiBlcnJvciBoYW5kbGluZyBhbmQgdGltZW91dHMgZXRjKS4gCitJdCdzIGdlbmVyYWxseSBub3QgaGFyZCB0byBmaXggZHJpdmVycywgYW5kIGluIG1hbnkgY2FzZXMgdGhlIGNvZGUKK2FjdHVhbGx5IGxvb2tzIGJldHRlciBhZnRlcndhcmRzOgorCisJdW5zaWduZWQgbG9uZyBzaWduYXR1cmUgPSAqKHVuc2lnbmVkIGludCAqKSAweEMwMDAwOworCQl2cworCXVuc2lnbmVkIGxvbmcgc2lnbmF0dXJlID0gcmVhZGwoMHhDMDAwMCk7CisKK0kgdGhpbmsgdGhlIHNlY29uZCB2ZXJzaW9uIGFjdHVhbGx5IGlzIG1vcmUgcmVhZGFibGUsIG5vPworCisJCUxpbnVzCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSVBNSS50eHQgYi9Eb2N1bWVudGF0aW9uL0lQTUkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZDEwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0lQTUkudHh0CkBAIC0wLDAgKzEsNTM0IEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IElQTUkgRHJpdmVyCisJCQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJICAgICAgQ29yZXkgTWlueWFyZAorCQkJICA8bWlueWFyZEBtdmlzdGEuY29tPgorCQkJICAgIDxtaW55YXJkQGFjbS5vcmc+CisKK1RoZSBJbnRlbGxpZ2VudCBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSwgb3IgSVBNSSwgaXMgYQorc3RhbmRhcmQgZm9yIGNvbnRyb2xsaW5nIGludGVsbGlnZW50IGRldmljZXMgdGhhdCBtb25pdG9yIGEgc3lzdGVtLgorSXQgcHJvdmlkZXMgZm9yIGR5bmFtaWMgZGlzY292ZXJ5IG9mIHNlbnNvcnMgaW4gdGhlIHN5c3RlbSBhbmQgdGhlCithYmlsaXR5IHRvIG1vbml0b3IgdGhlIHNlbnNvcnMgYW5kIGJlIGluZm9ybWVkIHdoZW4gdGhlIHNlbnNvcidzCit2YWx1ZXMgY2hhbmdlIG9yIGdvIG91dHNpZGUgY2VydGFpbiBib3VuZGFyaWVzLiAgSXQgYWxzbyBoYXMgYQorc3RhbmRhcmRpemVkIGRhdGFiYXNlIGZvciBmaWVsZC1yZXBsYWNhYmxlIHVuaXRzIChGUlVzKSBhbmQgYSB3YXRjaGRvZwordGltZXIuCisKK1RvIHVzZSB0aGlzLCB5b3UgbmVlZCBhbiBpbnRlcmZhY2UgdG8gYW4gSVBNSSBjb250cm9sbGVyIGluIHlvdXIKK3N5c3RlbSAoY2FsbGVkIGEgQmFzZWJvYXJkIE1hbmFnZW1lbnQgQ29udHJvbGxlciwgb3IgQk1DKSBhbmQKK21hbmFnZW1lbnQgc29mdHdhcmUgdGhhdCBjYW4gdXNlIHRoZSBJUE1JIHN5c3RlbS4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHVzZSB0aGUgSVBNSSBkcml2ZXIgZm9yIExpbnV4LiAgSWYgeW91CithcmUgbm90IGZhbWlsaWFyIHdpdGggSVBNSSBpdHNlbGYsIHNlZSB0aGUgd2ViIHNpdGUgYXQKK2h0dHA6Ly93d3cuaW50ZWwuY29tL2Rlc2lnbi9zZXJ2ZXJzL2lwbWkvaW5kZXguaHRtLiAgSVBNSSBpcyBhIGJpZworc3ViamVjdCBhbmQgSSBjYW4ndCBjb3ZlciBpdCBhbGwgaGVyZSEKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitUaGUgTGludXhJUE1JIGRyaXZlciBpcyBtb2R1bGFyLCB3aGljaCBtZWFucyB5b3UgaGF2ZSB0byBwaWNrIHNldmVyYWwKK3RoaW5ncyB0byBoYXZlIGl0IHdvcmsgcmlnaHQgZGVwZW5kaW5nIG9uIHlvdXIgaGFyZHdhcmUuICBNb3N0IG9mCit0aGVzZSBhcmUgYXZhaWxhYmxlIGluIHRoZSAnQ2hhcmFjdGVyIERldmljZXMnIG1lbnUuCisKK05vIG1hdHRlciB3aGF0LCB5b3UgbXVzdCBwaWNrICdJUE1JIHRvcC1sZXZlbCBtZXNzYWdlIGhhbmRsZXInIHRvIHVzZQorSVBNSS4gIFdoYXQgeW91IGRvIGJleW9uZCB0aGF0IGRlcGVuZHMgb24geW91ciBuZWVkcyBhbmQgaGFyZHdhcmUuCisKK1RoZSBtZXNzYWdlIGhhbmRsZXIgZG9lcyBub3QgcHJvdmlkZSBhbnkgdXNlci1sZXZlbCBpbnRlcmZhY2VzLgorS2VybmVsIGNvZGUgKGxpa2UgdGhlIHdhdGNoZG9nKSBjYW4gc3RpbGwgdXNlIGl0LiAgSWYgeW91IG5lZWQgYWNjZXNzCitmcm9tIHVzZXJsYW5kLCB5b3UgbmVlZCB0byBzZWxlY3QgJ0RldmljZSBpbnRlcmZhY2UgZm9yIElQTUknIGlmIHlvdQord2FudCBhY2Nlc3MgdGhyb3VnaCBhIGRldmljZSBkcml2ZXIuICBBbm90aGVyIGludGVyZmFjZSBpcyBhbHNvCithdmFpbGFibGUsIHlvdSBtYXkgc2VsZWN0ICdJUE1JIHNvY2tldHMnIGluIHRoZSAnTmV0d29ya2luZyBTdXBwb3J0JworbWFpbiBtZW51LiAgVGhpcyBwcm92aWRlcyBhIHNvY2tldCBpbnRlcmZhY2UgdG8gSVBNSS4gIFlvdSBtYXkgc2VsZWN0Citib3RoIG9mIHRoZXNlIGF0IHRoZSBzYW1lIHRpbWUsIHRoZXkgd2lsbCBib3RoIHdvcmsgdG9nZXRoZXIuCisKK1RoZSBkcml2ZXIgaW50ZXJmYWNlIGRlcGVuZHMgb24geW91ciBoYXJkd2FyZS4gIElmIHlvdSBoYXZlIGEgYm9hcmQKK3dpdGggYSBzdGFuZGFyZCBpbnRlcmZhY2UgKFRoZXNlIHdpbGwgZ2VuZXJhbGx5IGJlIGVpdGhlciAiS0NTIiwKKyJTTUlDIiwgb3IgIkJUIiwgY29uc3VsdCB5b3VyIGhhcmR3YXJlIG1hbnVhbCksIGNob29zZSB0aGUgJ0lQTUkgU0kKK2hhbmRsZXInIG9wdGlvbi4gIEEgZHJpdmVyIGFsc28gZXhpc3RzIGZvciBkaXJlY3QgSTJDIGFjY2VzcyB0byB0aGUKK0lQTUkgbWFuYWdlbWVudCBjb250cm9sbGVyLiAgU29tZSBib2FyZHMgc3VwcG9ydCB0aGlzLCBidXQgaXQgaXMKK3Vua25vd24gaWYgaXQgd2lsbCB3b3JrIG9uIGV2ZXJ5IGJvYXJkLiAgRm9yIHRoaXMsIGNob29zZSAnSVBNSSBTTUJ1cworaGFuZGxlcicsIGJ1dCBiZSByZWFkeSB0byB0cnkgdG8gZG8gc29tZSBmaWd1cmluZyB0byBzZWUgaWYgaXQgd2lsbAord29yay4KKworVGhlcmUgaXMgYWxzbyBhIEtDUy1vbmx5IGRyaXZlciBpbnRlcmZhY2Ugc3VwcGxpZWQsIGJ1dCBpdCBpcworZGVwcmFjYXRlZCBpbiBmYXZvciBvZiB0aGUgU0kgaW50ZXJmYWNlLgorCitZb3Ugc2hvdWxkIGdlbmVyYWxseSBlbmFibGUgQUNQSSBvbiB5b3VyIHN5c3RlbSwgYXMgc3lzdGVtcyB3aXRoIElQTUkKK3Nob3VsZCBoYXZlIEFDUEkgdGFibGVzIGRlc2NyaWJpbmcgdGhlbS4KKworSWYgeW91IGhhdmUgYSBzdGFuZGFyZCBpbnRlcmZhY2UgYW5kIHRoZSBib2FyZCBtYW51ZmFjdHVyZXIgaGFzIGRvbmUKK3RoZWlyIGpvYiBjb3JyZWN0bHksIHRoZSBJUE1JIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkKK2RldGVjdCAodmlhIEFDUEkgb3IgU01CSU9TIHRhYmxlcykgYW5kIHNob3VsZCBqdXN0IHdvcmsuICBTYWRseSwgbWFueQorYm9hcmRzIGRvIG5vdCBoYXZlIHRoaXMgaW5mb3JtYXRpb24uICBUaGUgZHJpdmVyIGF0dGVtcHRzIHN0YW5kYXJkCitkZWZhdWx0cywgYnV0IHRoZXkgbWF5IG5vdCB3b3JrLiAgSWYgeW91IGZhbGwgaW50byB0aGlzIHNpdHVhdGlvbiwgeW91CituZWVkIHRvIHJlYWQgdGhlIHNlY3Rpb24gYmVsb3cgbmFtZWQgJ1RoZSBTSSBEcml2ZXInIG9uIGhvdyB0bworaGFuZC1jb25maWd1cmUgeW91ciBzeXN0ZW0uCisKK0lQTUkgZGVmaW5lcyBhIHN0YW5kYXJkIHdhdGNoZG9nIHRpbWVyLiAgWW91IGNhbiBlbmFibGUgdGhpcyB3aXRoIHRoZQorJ0lQTUkgV2F0Y2hkb2cgVGltZXInIGNvbmZpZyBvcHRpb24uICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8KK3RoZSBrZXJuZWwsIHRoZW4gdmlhIGEga2VybmVsIGNvbW1hbmQtbGluZSBvcHRpb24geW91IGNhbiBoYXZlIHRoZQord2F0Y2hkb2cgdGltZXIgc3RhcnQgYXMgc29vbiBhcyBpdCBpbnRpdGlhbGl6ZXMuICBJdCBhbHNvIGhhdmUgYSBsb3QKK29mIG90aGVyIG9wdGlvbnMsIHNlZSB0aGUgJ1dhdGNoZG9nJyBzZWN0aW9uIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCitOb3RlIHRoYXQgeW91IGNhbiBhbHNvIGhhdmUgdGhlIHdhdGNoZG9nIGNvbnRpbnVlIHRvIHJ1biBpZiBpdCBpcworY2xvc2VkIChieSBkZWZhdWx0IGl0IGlzIGRpc2FibGVkIG9uIGNsb3NlKS4gIEdvIGludG8gdGhlICdXYXRjaGRvZworQ2FyZHMnIG1lbnUsIGVuYWJsZSAnV2F0Y2hkb2cgVGltZXIgU3VwcG9ydCcsIGFuZCBlbmFibGUgdGhlIG9wdGlvbgorJ0Rpc2FibGUgd2F0Y2hkb2cgc2h1dGRvd24gb24gY2xvc2UnLgorCisKK0Jhc2ljIERlc2lnbgorLS0tLS0tLS0tLS0tCisKK1RoZSBMaW51eCBJUE1JIGRyaXZlciBpcyBkZXNpZ25lZCB0byBiZSB2ZXJ5IG1vZHVsYXIgYW5kIGZsZXhpYmxlLCB5b3UKK29ubHkgbmVlZCB0byB0YWtlIHRoZSBwaWVjZXMgeW91IG5lZWQgYW5kIHlvdSBjYW4gdXNlIGl0IGluIG1hbnkKK2RpZmZlcmVudCB3YXlzLiAgQmVjYXVzZSBvZiB0aGF0LCBpdCdzIGJyb2tlbiBpbnRvIG1hbnkgY2h1bmtzIG9mCitjb2RlLiAgVGhlc2UgY2h1bmtzIGFyZToKKworaXBtaV9tc2doYW5kbGVyIC0gVGhpcyBpcyB0aGUgY2VudHJhbCBwaWVjZSBvZiBzb2Z0d2FyZSBmb3IgdGhlIElQTUkKK3N5c3RlbS4gIEl0IGhhbmRsZXMgYWxsIG1lc3NhZ2VzLCBtZXNzYWdlIHRpbWluZywgYW5kIHJlc3BvbnNlcy4gIFRoZQorSVBNSSB1c2VycyB0aWUgaW50byB0aGlzLCBhbmQgdGhlIElQTUkgcGh5c2ljYWwgaW50ZXJmYWNlcyAoY2FsbGVkCitTeXN0ZW0gTWFuYWdlbWVudCBJbnRlcmZhY2VzLCBvciBTTUlzKSBhbHNvIHRpZSBpbiBoZXJlLiAgVGhpcworcHJvdmlkZXMgdGhlIGtlcm5lbGxhbmQgaW50ZXJmYWNlIGZvciBJUE1JLCBidXQgZG9lcyBub3QgcHJvdmlkZSBhbgoraW50ZXJmYWNlIGZvciB1c2UgYnkgYXBwbGljYXRpb24gcHJvY2Vzc2VzLgorCitpcG1pX2RldmludGYgLSBUaGlzIHByb3ZpZGVzIGEgdXNlcmxhbmQgSU9DVEwgaW50ZXJmYWNlIGZvciB0aGUgSVBNSQorZHJpdmVyLCBlYWNoIG9wZW4gZmlsZSBmb3IgdGhpcyBkZXZpY2UgdGllcyBpbiB0byB0aGUgbWVzc2FnZSBoYW5kbGVyCithcyBhbiBJUE1JIHVzZXIuCisKK2lwbWlfc2kgLSBBIGRyaXZlciBmb3IgdmFyaW91cyBzeXN0ZW0gaW50ZXJmYWNlcy4gIFRoaXMgc3VwcG9ydHMKK0tDUywgU01JQywgYW5kIG1heSBzdXBwb3J0IEJUIGluIHRoZSBmdXR1cmUuICBVbmxlc3MgeW91IGhhdmUgeW91ciBvd24KK2N1c3RvbSBpbnRlcmZhY2UsIHlvdSBwcm9iYWJseSBuZWVkIHRvIHVzZSB0aGlzLgorCitpcG1pX3NtYiAtIEEgZHJpdmVyIGZvciBhY2Nlc3NpbmcgQk1DcyBvbiB0aGUgU01CdXMuIEl0IHVzZXMgdGhlCitJMkMga2VybmVsIGRyaXZlcidzIFNNQnVzIGludGVyZmFjZXMgdG8gc2VuZCBhbmQgcmVjZWl2ZSBJUE1JIG1lc3NhZ2VzCitvdmVyIHRoZSBTTUJ1cy4KKworYWZfaXBtaSAtIEEgbmV0d29yayBzb2NrZXQgaW50ZXJmYWNlIHRvIElQTUkuICBUaGlzIGRvZXNuJ3QgdGFrZSB1cAorYSBjaGFyYWN0ZXIgZGV2aWNlIGluIHlvdXIgc3lzdGVtLgorCitOb3RlIHRoYXQgdGhlIEtDUy1vbmx5IGludGVyZmFjZSBhaHMgYmVlbiByZW1vdmVkLgorCitNdWNoIGRvY3VtZW50YXRpb24gZm9yIHRoZSBpbnRlcmZhY2UgaXMgaW4gdGhlIGluY2x1ZGUgZmlsZXMuICBUaGUKK0lQTUkgaW5jbHVkZSBmaWxlcyBhcmU6CisKK25ldC9hZl9pcG1pLmggLSBDb250YWlucyB0aGUgc29ja2V0IGludGVyZmFjZS4KKworbGludXgvaXBtaS5oIC0gQ29udGFpbnMgdGhlIHVzZXIgaW50ZXJmYWNlIGFuZCBJT0NUTCBpbnRlcmZhY2UgZm9yIElQTUkuCisKK2xpbnV4L2lwbWlfc21pLmggLSBDb250YWlucyB0aGUgaW50ZXJmYWNlIGZvciBzeXN0ZW0gbWFuYWdlbWVudCBpbnRlcmZhY2VzCisodGhpbmdzIHRoYXQgaW50ZXJmYWNlIHRvIElQTUkgY29udHJvbGxlcnMpIHRvIHVzZS4KKworbGludXgvaXBtaV9tc2dkZWZzLmggLSBHZW5lcmFsIGRlZmluaXRpb25zIGZvciBiYXNlIElQTUkgbWVzc2FnaW5nLgorCisKK0FkZHJlc3NpbmcKKy0tLS0tLS0tLS0KKworVGhlIElQTUkgYWRkcmVzc2luZyB3b3JrcyBtdWNoIGxpa2UgSVAgYWRkcmVzc2VzLCB5b3UgaGF2ZSBhbiBvdmVybGF5Cit0byBoYW5kbGUgdGhlIGRpZmZlcmVudCBhZGRyZXNzIHR5cGVzLiAgVGhlIG92ZXJsYXkgaXM6CisKKyAgc3RydWN0IGlwbWlfYWRkcgorICB7CisJaW50ICAgYWRkcl90eXBlOworCXNob3J0IGNoYW5uZWw7CisJY2hhciAgZGF0YVtJUE1JX01BWF9BRERSX1NJWkVdOworICB9OworCitUaGUgYWRkcl90eXBlIGRldGVybWluZXMgd2hhdCB0aGUgYWRkcmVzcyByZWFsbHkgaXMuICBUaGUgZHJpdmVyCitjdXJyZW50bHkgdW5kZXJzdGFuZHMgdHdvIGRpZmZlcmVudCB0eXBlcyBvZiBhZGRyZXNzZXMuCisKKyJTeXN0ZW0gSW50ZXJmYWNlIiBhZGRyZXNzZXMgYXJlIGRlZmluZWQgYXM6CisKKyAgc3RydWN0IGlwbWlfc3lzdGVtX2ludGVyZmFjZV9hZGRyCisgIHsKKwlpbnQgICBhZGRyX3R5cGU7CisJc2hvcnQgY2hhbm5lbDsKKyAgfTsKKworYW5kIHRoZSB0eXBlIGlzIElQTUlfU1lTVEVNX0lOVEVSRkFDRV9BRERSX1RZUEUuICBUaGlzIGlzIHVzZWQgZm9yIHRhbGtpbmcKK3N0cmFpZ2h0IHRvIHRoZSBCTUMgb24gdGhlIGN1cnJlbnQgY2FyZC4gIFRoZSBjaGFubmVsIG11c3QgYmUKK0lQTUlfQk1DX0NIQU5ORUwuCisKK01lc3NhZ2VzIHRoYXQgYXJlIGRlc3RpbmVkIHRvIGdvIG91dCBvbiB0aGUgSVBNQiBidXMgdXNlIHRoZQorSVBNSV9JUE1CX0FERFJfVFlQRSBhZGRyZXNzIHR5cGUuICBUaGUgZm9ybWF0IGlzCisKKyAgc3RydWN0IGlwbWlfaXBtYl9hZGRyCisgIHsKKwlpbnQgICAgICAgICAgIGFkZHJfdHlwZTsKKwlzaG9ydCAgICAgICAgIGNoYW5uZWw7CisJdW5zaWduZWQgY2hhciBzbGF2ZV9hZGRyOworCXVuc2lnbmVkIGNoYXIgbHVuOworICB9OworCitUaGUgImNoYW5uZWwiIGhlcmUgaXMgZ2VuZXJhbGx5IHplcm8sIGJ1dCBzb21lIGRldmljZXMgc3VwcG9ydCBtb3JlCit0aGFuIG9uZSBjaGFubmVsLCBpdCBjb3JyZXNwb25kcyB0byB0aGUgY2hhbm5lbCBhcyBkZWZpbmVkIGluIHRoZSBJUE1JCitzcGVjLgorCisKK01lc3NhZ2VzCistLS0tLS0tLQorCitNZXNzYWdlcyBhcmUgZGVmaW5lZCBhczoKKworc3RydWN0IGlwbWlfbXNnCit7CisJdW5zaWduZWQgY2hhciBuZXRmbjsKKwl1bnNpZ25lZCBjaGFyIGx1bjsKKwl1bnNpZ25lZCBjaGFyIGNtZDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWludCAgICAgICAgICAgZGF0YV9sZW47Cit9OworCitUaGUgZHJpdmVyIHRha2VzIGNhcmUgb2YgYWRkaW5nL3N0cmlwcGluZyB0aGUgaGVhZGVyIGluZm9ybWF0aW9uLiAgVGhlCitkYXRhIHBvcnRpb24gaXMganVzdCB0aGUgZGF0YSB0byBiZSBzZW5kIChkbyBOT1QgcHV0IGFkZHJlc3NpbmcgaW5mbworaGVyZSkgb3IgdGhlIHJlc3BvbnNlLiAgTm90ZSB0aGF0IHRoZSBjb21wbGV0aW9uIGNvZGUgb2YgYSByZXNwb25zZSBpcwordGhlIGZpcnN0IGl0ZW0gaW4gImRhdGEiLCBpdCBpcyBub3Qgc3RyaXBwZWQgb3V0IGJlY2F1c2UgdGhhdCBpcyBob3cKK2FsbCB0aGUgbWVzc2FnZXMgYXJlIGRlZmluZWQgaW4gdGhlIHNwZWMgKGFuZCB0aHVzIG1ha2VzIGNvdW50aW5nIHRoZQorb2Zmc2V0cyBhIGxpdHRsZSBlYXNpZXIgOi0pLgorCitXaGVuIHVzaW5nIHRoZSBJT0NUTCBpbnRlcmZhY2UgZnJvbSB1c2VybGFuZCwgeW91IG11c3QgcHJvdmlkZSBhIGJsb2NrCitvZiBkYXRhIGZvciAiZGF0YSIsIGZpbGwgaXQsIGFuZCBzZXQgZGF0YV9sZW4gdG8gdGhlIGxlbmd0aCBvZiB0aGUKK2Jsb2NrIG9mIGRhdGEsIGV2ZW4gd2hlbiByZWNlaXZpbmcgbWVzc2FnZXMuICBPdGhlcndpc2UgdGhlIGRyaXZlcgord2lsbCBoYXZlIG5vIHBsYWNlIHRvIHB1dCB0aGUgbWVzc2FnZS4KKworTWVzc2FnZXMgY29taW5nIHVwIGZyb20gdGhlIG1lc3NhZ2UgaGFuZGxlciBpbiBrZXJuZWxsYW5kIHdpbGwgY29tZSBpbgorYXM6CisKKyAgc3RydWN0IGlwbWlfcmVjdl9tc2cKKyAgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKworCS8qIFRoZSB0eXBlIG9mIG1lc3NhZ2UgYXMgZGVmaW5lZCBpbiB0aGUgIlJlY2VpdmUgVHlwZXMiCisgICAgICAgICAgIGRlZmluZXMgYWJvdmUuICovCisJaW50ICAgICAgICAgcmVjdl90eXBlOworCisJaXBtaV91c2VyX3QgICAgICAqdXNlcjsKKwlzdHJ1Y3QgaXBtaV9hZGRyIGFkZHI7CisJbG9uZyAgICAgICAgICAgICBtc2dpZDsKKwlzdHJ1Y3QgaXBtaV9tc2cgIG1zZzsKKworCS8qIENhbGwgdGhpcyB3aGVuIGRvbmUgd2l0aCB0aGUgbWVzc2FnZS4gIEl0IHdpbGwgcHJlc3VtYWJseSBmcmVlCisJICAgdGhlIG1lc3NhZ2UgYW5kIGRvIGFueSBvdGhlciBuZWNlc3NhcnkgY2xlYW51cC4gKi8KKwl2b2lkICgqZG9uZSkoc3RydWN0IGlwbWlfcmVjdl9tc2cgKm1zZyk7CisKKwkvKiBQbGFjZS1ob2xkZXIgZm9yIHRoZSBkYXRhLCBkb24ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dAorCSAgIHRoZSBzaXplIG9yIGV4aXN0ZW5jZSBvZiB0aGlzLCBzaW5jZSBpdCBtYXkgY2hhbmdlLiAqLworCXVuc2lnbmVkIGNoYXIgICBtc2dfZGF0YVtJUE1JX01BWF9NU0dfTEVOR1RIXTsKKyAgfTsKKworWW91IHNob3VsZCBsb29rIGF0IHRoZSByZWNlaXZlIHR5cGUgYW5kIGhhbmRsZSB0aGUgbWVzc2FnZQorYXBwcm9wcmlhdGVseS4KKworCitUaGUgVXBwZXIgTGF5ZXIgSW50ZXJmYWNlIChNZXNzYWdlIEhhbmRsZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB1cHBlciBsYXllciBvZiB0aGUgaW50ZXJmYWNlIHByb3ZpZGVzIHRoZSB1c2VycyB3aXRoIGEgY29uc2lzdGVudAordmlldyBvZiB0aGUgSVBNSSBpbnRlcmZhY2VzLiAgSXQgYWxsb3dzIG11bHRpcGxlIFNNSSBpbnRlcmZhY2VzIHRvIGJlCithZGRyZXNzZWQgKGJlY2F1c2Ugc29tZSBib2FyZHMgYWN0dWFsbHkgaGF2ZSBtdWx0aXBsZSBCTUNzIG9uIHRoZW0pCithbmQgdGhlIHVzZXIgc2hvdWxkIG5vdCBoYXZlIHRvIGNhcmUgd2hhdCB0eXBlIG9mIFNNSSBpcyBiZWxvdyB0aGVtLgorCisKK0NyZWF0aW5nIHRoZSBVc2VyCisKK1RvIHVzZXIgdGhlIG1lc3NhZ2UgaGFuZGxlciwgeW91IG11c3QgZmlyc3QgY3JlYXRlIGEgdXNlciB1c2luZworaXBtaV9jcmVhdGVfdXNlci4gIFRoZSBpbnRlcmZhY2UgbnVtYmVyIHNwZWNpZmllcyB3aGljaCBTTUkgeW91IHdhbnQKK3RvIGNvbm5lY3QgdG8sIGFuZCB5b3UgbXVzdCBzdXBwbHkgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZAord2hlbiBkYXRhIGNvbWVzIGluLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBydW4gYXQgaW50ZXJydXB0IGxldmVsLAorc28gYmUgY2FyZWZ1bCB1c2luZyB0aGUgY2FsbGJhY2tzLiAgVGhpcyBhbHNvIGFsbG93cyB0byB5b3UgcGFzcyBpbiBhCitwaWVjZSBvZiBkYXRhLCB0aGUgaGFuZGxlcl9kYXRhLCB0aGF0IHdpbGwgYmUgcGFzc2VkIGJhY2sgdG8geW91IG9uCithbGwgY2FsbHMuCisKK09uY2UgeW91IGFyZSBkb25lLCBjYWxsIGlwbWlfZGVzdHJveV91c2VyKCkgdG8gZ2V0IHJpZCBvZiB0aGUgdXNlci4KKworRnJvbSB1c2VybGFuZCwgb3BlbmluZyB0aGUgZGV2aWNlIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIHVzZXIsIGFuZAorY2xvc2luZyB0aGUgZGV2aWNlIGF1dG9tYXRpY2FsbHkgZGVzdHJveXMgdGhlIHVzZXIuCisKKworTWVzc2FnaW5nCisKK1RvIHNlbmQgYSBtZXNzYWdlIGZyb20ga2VybmVsLWxhbmQsIHRoZSBpcG1pX3JlcXVlc3QoKSBjYWxsIGRvZXMKK3ByZXR0eSBtdWNoIGFsbCBtZXNzYWdlIGhhbmRsaW5nLiAgTW9zdCBvZiB0aGUgcGFyYW1ldGVyIGFyZQorc2VsZi1leHBsYW5hdG9yeS4gIEhvd2V2ZXIsIGl0IHRha2VzIGEgIm1zZ2lkIiBwYXJhbWV0ZXIuICBUaGlzIGlzIE5PVAordGhlIHNlcXVlbmNlIG51bWJlciBvZiBtZXNzYWdlcy4gIEl0IGlzIHNpbXBseSBhIGxvbmcgdmFsdWUgdGhhdCBpcworcGFzc2VkIGJhY2sgd2hlbiB0aGUgcmVzcG9uc2UgZm9yIHRoZSBtZXNzYWdlIGlzIHJldHVybmVkLiAgWW91IG1heQordXNlIGl0IGZvciBhbnl0aGluZyB5b3UgbGlrZS4KKworUmVzcG9uc2VzIGNvbWUgYmFjayBpbiB0aGUgZnVuY3Rpb24gcG9pbnRlZCB0byBieSB0aGUgaXBtaV9yZWN2X2huZGwKK2ZpZWxkIG9mIHRoZSAiaGFuZGxlciIgdGhhdCB5b3UgcGFzc2VkIGluIHRvIGlwbWlfY3JlYXRlX3VzZXIoKS4KK1JlbWVtYmVyIGFnYWluLCB0aGVzZSBtYXkgYmUgcnVubmluZyBhdCBpbnRlcnJ1cHQgbGV2ZWwuICBSZW1lbWJlciB0bworbG9vayBhdCB0aGUgcmVjZWl2ZSB0eXBlLCB0b28uCisKK0Zyb20gdXNlcmxhbmQsIHlvdSBmaWxsIG91dCBhbiBpcG1pX3JlcV90IHN0cnVjdHVyZSBhbmQgdXNlIHRoZQorSVBNSUNUTF9TRU5EX0NPTU1BTkQgaW9jdGwuICBGb3IgaW5jb21pbmcgc3R1ZmYsIHlvdSBjYW4gdXNlIHNlbGVjdCgpCitvciBwb2xsKCkgdG8gd2FpdCBmb3IgbWVzc2FnZXMgdG8gY29tZSBpbi4gIEhvd2V2ZXIsIHlvdSBjYW5ub3QgdXNlCityZWFkKCkgdG8gZ2V0IHRoZW0sIHlvdSBtdXN0IGNhbGwgdGhlIElQTUlDVExfUkVDRUlWRV9NU0cgd2l0aCB0aGUKK2lwbWlfcmVjdl90IHN0cnVjdHVyZSB0byBhY3R1YWxseSBnZXQgdGhlIG1lc3NhZ2UuICBSZW1lbWJlciB0aGF0IHlvdQorbXVzdCBzdXBwbHkgYSBwb2ludGVyIHRvIGEgYmxvY2sgb2YgZGF0YSBpbiB0aGUgbXNnLmRhdGEgZmllbGQsIGFuZAoreW91IG11c3QgZmlsbCBpbiB0aGUgbXNnLmRhdGFfbGVuIGZpZWxkIHdpdGggdGhlIHNpemUgb2YgdGhlIGRhdGEuCitUaGlzIGdpdmVzIHRoZSByZWNlaXZlciBhIHBsYWNlIHRvIGFjdHVhbGx5IHB1dCB0aGUgbWVzc2FnZS4KKworSWYgdGhlIG1lc3NhZ2UgY2Fubm90IGZpdCBpbnRvIHRoZSBkYXRhIHlvdSBwcm92aWRlLCB5b3Ugd2lsbCBnZXQgYW4KK0VNU0dTSVpFIGVycm9yIGFuZCB0aGUgZHJpdmVyIHdpbGwgbGVhdmUgdGhlIGRhdGEgaW4gdGhlIHJlY2VpdmUKK3F1ZXVlLiAgSWYgeW91IHdhbnQgdG8gZ2V0IGl0IGFuZCBoYXZlIGl0IHRydW5jYXRlIHRoZSBtZXNzYWdlLCB1cwordGhlIElQTUlDVExfUkVDRUlWRV9NU0dfVFJVTkMgaW9jdGwuCisKK1doZW4geW91IHNlbmQgYSBjb21tYW5kICh3aGljaCBpcyBkZWZpbmVkIGJ5IHRoZSBsb3dlc3Qtb3JkZXIgYml0IG9mCit0aGUgbmV0Zm4gcGVyIHRoZSBJUE1JIHNwZWMpIG9uIHRoZSBJUE1CIGJ1cywgdGhlIGRyaXZlciB3aWxsCithdXRvbWF0aWNhbGx5IGFzc2lnbiB0aGUgc2VxdWVuY2UgbnVtYmVyIHRvIHRoZSBjb21tYW5kIGFuZCBzYXZlIHRoZQorY29tbWFuZC4gIElmIHRoZSByZXNwb25zZSBpcyBub3QgcmVjZWl2ZSBpbiB0aGUgSVBNSS1zcGVjaWZpZWQgNQorc2Vjb25kcywgaXQgd2lsbCBnZW5lcmF0ZSBhIHJlc3BvbnNlIGF1dG9tYXRpY2FsbHkgc2F5aW5nIHRoZSBjb21tYW5kCit0aW1lZCBvdXQuICBJZiBhbiB1bnNvbGljaXRlZCByZXNwb25zZSBjb21lcyBpbiAoaWYgaXQgd2FzIGFmdGVyIDUKK3NlY29uZHMsIGZvciBpbnN0YW5jZSksIHRoYXQgcmVzcG9uc2Ugd2lsbCBiZSBpZ25vcmVkLgorCitJbiBrZXJuZWxsYW5kLCBhZnRlciB5b3UgcmVjZWl2ZSBhIG1lc3NhZ2UgYW5kIGFyZSBkb25lIHdpdGggaXQsIHlvdQorTVVTVCBjYWxsIGlwbWlfZnJlZV9yZWN2X21zZygpIG9uIGl0LCBvciB5b3Ugd2lsbCBsZWFrIG1lc3NhZ2VzLiAgTm90ZQordGhhdCB5b3Ugc2hvdWxkIE5FVkVSIG1lc3Mgd2l0aCB0aGUgImRvbmUiIGZpZWxkIG9mIGEgbWVzc2FnZSwgdGhhdCBpcworcmVxdWlyZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgdGhlIG1lc3NhZ2UuCisKK05vdGUgdGhhdCB3aGVuIHNlbmRpbmcsIHRoZXJlIGlzIGFuIGlwbWlfcmVxdWVzdF9zdXBwbHlfbXNncygpIGNhbGwKK3RoYXQgbGV0cyB5b3Ugc3VwcGx5IHRoZSBzbWkgYW5kIHJlY2VpdmUgbWVzc2FnZS4gIFRoaXMgaXMgdXNlZnVsIGZvcgorcGllY2VzIG9mIGNvZGUgdGhhdCBuZWVkIHRvIHdvcmsgZXZlbiBpZiB0aGUgc3lzdGVtIGlzIG91dCBvZiBidWZmZXJzCisodGhlIHdhdGNoZG9nIHRpbWVyIHVzZXMgdGhpcywgZm9yIGluc3RhbmNlKS4gIFlvdSBzdXBwbHkgeW91ciBvd24KK2J1ZmZlciBhbmQgb3duIGZyZWUgcm91dGluZXMuICBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBmb3Igbm9ybWFsIHVzZSwKK3Rob3VnaCwgc2luY2UgaXQgaXMgdHJpY2t5IHRvIG1hbmFnZSB5b3VyIG93biBidWZmZXJzLgorCisKK0V2ZW50cyBhbmQgSW5jb21pbmcgQ29tbWFuZHMKKworVGhlIGRyaXZlciB0YWtlcyBjYXJlIG9mIHBvbGxpbmcgZm9yIElQTUkgZXZlbnRzIGFuZCByZWNlaXZpbmcKK2NvbW1hbmRzIChjb21tYW5kcyBhcmUgbWVzc2FnZXMgdGhhdCBhcmUgbm90IHJlc3BvbnNlcywgdGhleSBhcmUKK2NvbW1hbmRzIHRoYXQgb3RoZXIgdGhpbmdzIG9uIHRoZSBJUE1CIGJ1cyBoYXZlIHNlbnQgeW91KS4gIFRvIHJlY2VpdmUKK3RoZXNlLCB5b3UgbXVzdCByZWdpc3RlciBmb3IgdGhlbSwgdGhleSB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJlIHNlbnQKK3RvIHlvdS4KKworVG8gcmVjZWl2ZSBldmVudHMsIHlvdSBtdXN0IGNhbGwgaXBtaV9zZXRfZ2V0c19ldmVudHMoKSBhbmQgc2V0IHRoZQorInZhbCIgdG8gbm9uLXplcm8uICBBbnkgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ5IHRoZSBkcml2ZXIKK3NpbmNlIHN0YXJ0dXAgd2lsbCBpbW1lZGlhdGVseSBiZSBkZWxpdmVyZWQgdG8gdGhlIGZpcnN0IHVzZXIgdGhhdAorcmVnaXN0ZXJzIGZvciBldmVudHMuICBBZnRlciB0aGF0LCBpZiBtdWx0aXBsZSB1c2VycyBhcmUgcmVnaXN0ZXJlZAorZm9yIGV2ZW50cywgdGhleSB3aWxsIGFsbCByZWNlaXZlIGFsbCBldmVudHMgdGhhdCBjb21lIGluLgorCitGb3IgcmVjZWl2aW5nIGNvbW1hbmRzLCB5b3UgaGF2ZSB0byBpbmRpdmlkdWFsbHkgcmVnaXN0ZXIgY29tbWFuZHMgeW91Cit3YW50IHRvIHJlY2VpdmUuICBDYWxsIGlwbWlfcmVnaXN0ZXJfZm9yX2NtZCgpIGFuZCBzdXBwbHkgdGhlIG5ldGZuCithbmQgY29tbWFuZCBuYW1lIGZvciBlYWNoIGNvbW1hbmQgeW91IHdhbnQgdG8gcmVjZWl2ZS4gIE9ubHkgb25lIHVzZXIKK21heSBiZSByZWdpc3RlcmVkIGZvciBlYWNoIG5ldGZuL2NtZCwgYnV0IGRpZmZlcmVudCB1c2VycyBtYXkgcmVnaXN0ZXIKK2ZvciBkaWZmZXJlbnQgY29tbWFuZHMuCisKK0Zyb20gdXNlcmxhbmQsIGVxdWl2YWxlbnQgSU9DVExzIGFyZSBwcm92aWRlZCB0byBkbyB0aGVzZSBmdW5jdGlvbnMuCisKKworVGhlIExvd2VyIExheWVyIChTTUkpIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyBtZW50aW9uZWQgYmVmb3JlLCBtdWx0aXBsZSBTTUkgaW50ZXJmYWNlcyBtYXkgYmUgcmVnaXN0ZXJlZCB0byB0aGUKK21lc3NhZ2UgaGFuZGxlciwgZWFjaCBvZiB0aGVzZSBpcyBhc3NpZ25lZCBhbiBpbnRlcmZhY2UgbnVtYmVyIHdoZW4KK3RoZXkgcmVnaXN0ZXIgd2l0aCB0aGUgbWVzc2FnZSBoYW5kbGVyLiAgVGhleSBhcmUgZ2VuZXJhbGx5IGFzc2lnbmVkCitpbiB0aGUgb3JkZXIgdGhleSByZWdpc3RlciwgYWx0aG91Z2ggaWYgYW4gU01JIHVucmVnaXN0ZXJzIGFuZCB0aGVuCithbm90aGVyIG9uZSByZWdpc3RlcnMsIGFsbCBiZXRzIGFyZSBvZmYuCisKK1RoZSBpcG1pX3NtaS5oIGRlZmluZXMgdGhlIGludGVyZmFjZSBmb3IgbWFuYWdlbWVudCBpbnRlcmZhY2VzLCBzZWUKK3RoYXQgZm9yIG1vcmUgZGV0YWlscy4KKworCitUaGUgU0kgRHJpdmVyCistLS0tLS0tLS0tLS0tCisKK1RoZSBTSSBkcml2ZXIgYWxsb3dzIHVwIHRvIDQgS0NTIG9yIFNNSUMgaW50ZXJmYWNlcyB0byBiZSBjb25maWd1cmVkCitpbiB0aGUgc3lzdGVtLiAgQnkgZGVmYXVsdCwgc2NhbiB0aGUgQUNQSSB0YWJsZXMgZm9yIGludGVyZmFjZXMsIGFuZAoraWYgaXQgZG9lc24ndCBmaW5kIGFueSB0aGUgZHJpdmVyIHdpbGwgYXR0ZW1wdCB0byByZWdpc3RlciBvbmUgS0NTCitpbnRlcmZhY2UgYXQgdGhlIHNwZWMtc3BlY2lmaWVkIEkvTyBwb3J0IDB4Y2EyIHdpdGhvdXQgaW50ZXJydXB0cy4KK1lvdSBjYW4gY2hhbmdlIHRoaXMgYXQgbW9kdWxlIGxvYWQgdGltZSAoZm9yIGEgbW9kdWxlKSB3aXRoOgorCisgIG1vZHByb2JlIGlwbWlfc2kubyB0eXBlPTx0eXBlMT4sPHR5cGUyPi4uLi4KKyAgICAgICBwb3J0cz08cG9ydDE+LDxwb3J0Mj4uLi4gYWRkcnM9PGFkZHIxPiw8YWRkcjI+Li4uCisgICAgICAgaXJxcz08aXJxMT4sPGlycTI+Li4uIHRyeWRlZmF1bHRzPVswfDFdCisgICAgICAgcmVnc3BhY2luZ3M9PHNwMT4sPHNwMj4sLi4uIHJlZ3NpemVzPTxzaXplMT4sPHNpemUyPiwuLi4KKyAgICAgICByZWdzaGlmdHM9PHNoaWZ0MT4sPHNoaWZ0Mj4sLi4uCisgICAgICAgc2xhdmVfYWRkcnM9PGFkZHIxPiw8YWRkcjI+LC4uLgorCitFYWNoIG9mIHRoZXNlIGV4Y2VwdCBzaV90cnlkZWZhdWx0cyBpcyBhIGxpc3QsIHRoZSBmaXJzdCBpdGVtIGZvciB0aGUKK2ZpcnN0IGludGVyZmFjZSwgc2Vjb25kIGl0ZW0gZm9yIHRoZSBzZWNvbmQgaW50ZXJmYWNlLCBldGMuCisKK1RoZSBzaV90eXBlIG1heSBiZSBlaXRoZXIgImtjcyIsICJzbWljIiwgb3IgImJ0Ii4gIElmIHlvdSBsZWF2ZSBpdCBibGFuaywgaXQKK2RlZmF1bHRzIHRvICJrY3MiLgorCitJZiB5b3Ugc3BlY2lmeSBzaV9hZGRycyBhcyBub24temVybyBmb3IgYW4gaW50ZXJmYWNlLCB0aGUgZHJpdmVyIHdpbGwKK3VzZSB0aGUgbWVtb3J5IGFkZHJlc3MgZ2l2ZW4gYXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4gIFRoaXMKK292ZXJyaWRlcyBzaV9wb3J0cy4KKworSWYgeW91IHNwZWNpZnkgc2lfcG9ydHMgYXMgbm9uLXplcm8gZm9yIGFuIGludGVyZmFjZSwgdGhlIGRyaXZlciB3aWxsCit1c2UgdGhlIEkvTyBwb3J0IGdpdmVuIGFzIHRoZSBkZXZpY2UgYWRkcmVzcy4KKworSWYgeW91IHNwZWNpZnkgc2lfaXJxcyBhcyBub24temVybyBmb3IgYW4gaW50ZXJmYWNlLCB0aGUgZHJpdmVyIHdpbGwKK2F0dGVtcHQgdG8gdXNlIHRoZSBnaXZlbiBpbnRlcnJ1cHQgZm9yIHRoZSBkZXZpY2UuCisKK3NpX3RyeWRlZmF1bHRzIHNldHMgd2hldGhlciB0aGUgc3RhbmRhcmQgSVBNSSBpbnRlcmZhY2UgYXQgMHhjYTIgYW5kCithbnkgaW50ZXJmYWNlcyBzcGVjaWZpZWQgYnkgQUNQRSBhcmUgdHJpZWQuICBCeSBkZWZhdWx0LCB0aGUgZHJpdmVyCit0cmllcyBpdCwgc2V0IHRoaXMgdmFsdWUgdG8gemVybyB0byB0dXJuIHRoaXMgb2ZmLgorCitUaGUgbmV4dCB0aHJlZSBwYXJhbWV0ZXJzIGhhdmUgdG8gZG8gd2l0aCByZWdpc3RlciBsYXlvdXQuICBUaGUKK3JlZ2lzdGVycyB1c2VkIGJ5IHRoZSBpbnRlcmZhY2VzIG1heSBub3QgYXBwZWFyIGF0IHN1Y2Nlc3NpdmUKK2xvY2F0aW9ucyBhbmQgdGhleSBtYXkgbm90IGJlIGluIDgtYml0IHJlZ2lzdGVycy4gIFRoZXNlIHBhcmFtZXRlcnMKK2FsbG93IHRoZSBsYXlvdXQgb2YgdGhlIGRhdGEgaW4gdGhlIHJlZ2lzdGVycyB0byBiZSBtb3JlIHByZWNpc2VseQorc3BlY2lmaWVkLgorCitUaGUgcmVnc3BhY2luZ3MgcGFyYW1ldGVyIGdpdmUgdGhlIG51bWJlciBvZiBieXRlcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUKK3JlZ2lzdGVyIHN0YXJ0IGFkZHJlc3Nlcy4gIEZvciBpbnN0YW5jZSwgaWYgdGhlIHJlZ3NwYWNpbmcgaXMgc2V0IHRvIDQKK2FuZCB0aGUgc3RhcnQgYWRkcmVzcyBpcyAweGNhMiwgdGhlbiB0aGUgYWRkcmVzcyBmb3IgdGhlIHNlY29uZAorcmVnaXN0ZXIgd291bGQgYmUgMHhjYTYuICBUaGlzIGRlZmF1bHRzIHRvIDEuCisKK1RoZSByZWdzaXplcyBwYXJhbWV0ZXIgZ2l2ZXMgdGhlIHNpemUgb2YgYSByZWdpc3RlciwgaW4gYnl0ZXMuICBUaGUKK2RhdGEgdXNlZCBieSBJUE1JIGlzIDgtYml0cyB3aWRlLCBidXQgaXQgbWF5IGJlIGluc2lkZSBhIGxhcmdlcgorcmVnaXN0ZXIuICBUaGlzIHBhcmFtZXRlciBhbGxvd3MgdGhlIHJlYWQgYW5kIHdyaXRlIHR5cGUgdG8gc3BlY2lmaWVkLgorSXQgbWF5IGJlIDEsIDIsIDQsIG9yIDguICBUaGUgZGVmYXVsdCBpcyAxLgorCitTaW5jZSB0aGUgcmVnaXN0ZXIgc2l6ZSBtYXkgYmUgbGFyZ2VyIHRoYW4gMzIgYml0cywgdGhlIElQTUkgZGF0YSBtYXkgbm90CitiZSBpbiB0aGUgbG93ZXIgOCBiaXRzLiAgVGhlIHJlZ3NoaWZ0cyBwYXJhbWV0ZXIgZ2l2ZSB0aGUgYW1vdW50IHRvIHNoaWZ0Cit0aGUgZGF0YSB0byBnZXQgdG8gdGhlIGFjdHVhbCBJUE1JIGRhdGEuCisKK1RoZSBzbGF2ZV9hZGRycyBzcGVjaWZpZXMgdGhlIElQTUkgYWRkcmVzcyBvZiB0aGUgbG9jYWwgQk1DLiAgVGhpcyBpcwordXN1YWxseSAweDIwIGFuZCB0aGUgZHJpdmVyIGRlZmF1bHRzIHRvIHRoYXQsIGJ1dCBpbiBjYXNlIGl0J3Mgbm90LCBpdAorY2FuIGJlIHNwZWNpZmllZCB3aGVuIHRoZSBkcml2ZXIgc3RhcnRzIHVwLgorCitXaGVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlIGFkZHJlc3NlcyBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZQora2VybmVsIGNvbW1hbmQgbGluZSBhczoKKworICBpcG1pX3NpLnR5cGU9PHR5cGUxPiw8dHlwZTI+Li4uCisgICAgICAgaXBtaV9zaS5wb3J0cz08cG9ydDE+LDxwb3J0Mj4uLi4gaXBtaV9zaS5hZGRycz08YWRkcjE+LDxhZGRyMj4uLi4KKyAgICAgICBpcG1pX3NpLmlycXM9PGlycTE+LDxpcnEyPi4uLiBpcG1pX3NpLnRyeWRlZmF1bHRzPVswfDFdCisgICAgICAgaXBtaV9zaS5yZWdzcGFjaW5ncz08c3AxPiw8c3AyPiwuLi4KKyAgICAgICBpcG1pX3NpLnJlZ3NpemVzPTxzaXplMT4sPHNpemUyPiwuLi4KKyAgICAgICBpcG1pX3NpLnJlZ3NoaWZ0cz08c2hpZnQxPiw8c2hpZnQyPiwuLi4KKyAgICAgICBpcG1pX3NpLnNsYXZlX2FkZHJzPTxhZGRyMT4sPGFkZHIyPiwuLi4KKworSXQgd29ya3MgdGhlIHNhbWUgYXMgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIG9mIHRoZSBzYW1lIG5hbWVzLgorCitCeSBkZWZhdWx0LCB0aGUgZHJpdmVyIHdpbGwgYXR0ZW1wdCB0byBkZXRlY3QgYW55IGRldmljZSBzcGVjaWZpZWQgYnkKK0FDUEksIGFuZCBpZiBub25lIG9mIHRob3NlIHRoZW4gYSBLQ1MgZGV2aWNlIGF0IHRoZSBzcGVjLXNwZWNpZmllZAorMHhjYTIuICBJZiB5b3Ugd2FudCB0byB0dXJuIHRoaXMgb2ZmLCBzZXQgdGhlICJ0cnlkZWZhdWx0cyIgb3B0aW9uIHRvCitmYWxzZS4KKworSWYgeW91IGhhdmUgaGlnaC1yZXMgdGltZXJzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsCit1c2UgdGhlbSB0byBwcm92aWRlIG11Y2ggYmV0dGVyIHBlcmZvcm1hbmNlLiAgTm90ZSB0aGF0IGlmIHlvdSBkbyBub3QKK2hhdmUgaGlnaC1yZXMgdGltZXJzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBhbmQgeW91IGRvbid0IGhhdmUKK2ludGVycnVwdHMgZW5hYmxlZCwgdGhlIGRyaXZlciB3aWxsIHJ1biBWRVJZIHNsb3dseS4gIERvbid0IGJsYW1lIG1lLAordGhlc2UgaW50ZXJmYWNlcyBzdWNrLgorCisKK1RoZSBTTUJ1cyBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFNNQnVzIGRyaXZlciBhbGxvd3MgdXAgdG8gNCBTTUJ1cyBkZXZpY2VzIHRvIGJlIGNvbmZpZ3VyZWQgaW4gdGhlCitzeXN0ZW0uICBCeSBkZWZhdWx0LCB0aGUgZHJpdmVyIHdpbGwgcmVnaXN0ZXIgYW55IFNNQnVzIGludGVyZmFjZXMgaXQgZmluZHMKK2luIHRoZSBJMkMgYWRkcmVzcyByYW5nZSBvZiAweDIwIHRvIDB4NGYgb24gYW55IGFkYXB0ZXIuICBZb3UgY2FuIGNoYW5nZSB0aGlzCithdCBtb2R1bGUgbG9hZCB0aW1lIChmb3IgYSBtb2R1bGUpIHdpdGg6CisKKyAgbW9kcHJvYmUgaXBtaV9zbWIubworCWFkZHI9PGFkYXB0ZXIxPiw8aTJjYWRkcjE+Wyw8YWRhcHRlcjI+LDxpMmNhZGRyMj5bLC4uLl1dCisJZGJnPTxmbGFnczE+LDxmbGFnczI+Li4uCisJW2RlZmF1bHRwcm9iZT0wXSBbZGJnX3Byb2JlPTFdCisKK1RoZSBhZGRyZXNzZXMgYXJlIHNwZWNpZmllZCBpbiBwYWlycywgdGhlIGZpcnN0IGlzIHRoZSBhZGFwdGVyIElEIGFuZCB0aGUKK3NlY29uZCBpcyB0aGUgSTJDIGFkZHJlc3Mgb24gdGhhdCBhZGFwdGVyLgorCitUaGUgZGVidWcgZmxhZ3MgYXJlIGJpdCBmbGFncyBmb3IgZWFjaCBCTUMgZm91bmQsIHRoZXkgYXJlOgorSVBNSSBtZXNzYWdlczogMSwgZHJpdmVyIHN0YXRlOiAyLCB0aW1pbmc6IDQsIEkyQyBwcm9iZTogOAorCitTZXR0aW5nIHNtYl9kZWZhdWx0cHJvYmUgdG8gemVybyBkaXNhYmxlZCB0aGUgZGVmYXVsdCBwcm9iaW5nIG9mIFNNQnVzCitpbnRlcmZhY2VzIGF0IGFkZHJlc3MgcmFuZ2UgMHgyMCB0byAweDRmLiAgVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlCitCTUNzIHNwZWNpZmllZCBvbiB0aGUgc21iX2FkZHIgbGluZSB3aWxsIGJlIGRldGVjdGVkLgorCitTZXR0aW5nIHNtYl9kYmdfcHJvYmUgdG8gMSB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgb2YgdGhlIHByb2JpbmcgYW5kCitkZXRlY3Rpb24gcHJvY2VzcyBmb3IgQk1DcyBvbiB0aGUgU01CdXNzZXMuCisKK0Rpc2NvdmVyaW5nIHRoZSBJUE1JIGNvbXBpbGFudCBCTUMgb24gdGhlIFNNQnVzIGNhbiBjYXVzZSBkZXZpY2VzCitvbiB0aGUgSTJDIGJ1cyB0byBmYWlsLiBUaGUgU01CdXMgZHJpdmVyIHdyaXRlcyBhICJHZXQgRGV2aWNlIElEIiBJUE1JCittZXNzYWdlIGFzIGEgYmxvY2sgd3JpdGUgdG8gdGhlIEkyQyBidXMgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLgorVGhpcyBhY3Rpb24gY2FuIGJlIGRldHJpbWVudGFsIHRvIHNvbWUgSTJDIGRldmljZXMuIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZAordGhhdCB0aGUga25vd24gSTJjIGFkZHJlc3MgYmUgZ2l2ZW4gdG8gdGhlIFNNQnVzIGRyaXZlciBpbiB0aGUgc21iX2FkZHIKK3BhcmFtZXRlci4gVGhlIGRlZmF1bHQgYWRycmVzcyByYW5nZSB3aWxsIG5vdCBiZSB1c2VkIHdoZW4gYSBzbWJfYWRkcgorcGFyYW1ldGVyIGlzIHByb3ZpZGVkLgorCitXaGVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlIGFkZHJlc3NlcyBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZQora2VybmVsIGNvbW1hbmQgbGluZSBhczoKKworICBpcG1iX3NtYi5hZGRyPTxhZGFwdGVyMT4sPGkyY2FkZHIxPlssPGFkYXB0ZXIyPiw8aTJjYWRkcjI+WywuLi5dXQorCWlwbWlfc21iLmRiZz08ZmxhZ3MxPiw8ZmxhZ3MyPi4uLgorCWlwbWlfc21iLmRlZmF1bHRwcm9iZT0wIGlwbWlfc21iLmRiZ19wcm9iZT0xCisKK1RoZXNlIGFyZSB0aGUgc2FtZSBvcHRpb25zIGFzIG9uIHRoZSBtb2R1bGUgY29tbWFuZCBsaW5lLgorCitOb3RlIHRoYXQgeW91IG1pZ2h0IG5lZWQgc29tZSBJMkMgY2hhbmdlcyBpZiBDT05GSUdfSVBNSV9QQU5JQ19FVkVOVAoraXMgZW5hYmxlZCBhbG9uZyB3aXRoIHRoaXMsIHNvIHRoZSBJMkMgZHJpdmVyIGtub3dzIHRvIHJ1biB0bworY29tcGxldGlvbiBkdXJpbmcgc2VuZGluZyBhIHBhbmljIGV2ZW50LgorCisKK090aGVyIFBpZWNlcworLS0tLS0tLS0tLS0tCisKK1dhdGNoZG9nCistLS0tLS0tLQorCitBIHdhdGNoZG9nIHRpbWVyIGlzIHByb3ZpZGVkIHRoYXQgaW1wbGVtZW50cyB0aGUgTGludXgtc3RhbmRhcmQKK3dhdGNoZG9nIHRpbWVyIGludGVyZmFjZS4gIEl0IGhhcyB0aHJlZSBtb2R1bGUgcGFyYW1ldGVycyB0aGF0IGNhbiBiZQordXNlZCB0byBjb250cm9sIGl0OgorCisgIG1vZHByb2JlIGlwbWlfd2F0Y2hkb2cgdGltZW91dD08dD4gcHJldGltZW91dD08dD4gYWN0aW9uPTxhY3Rpb24gdHlwZT4KKyAgICAgIHByZWFjdGlvbj08cHJlYWN0aW9uIHR5cGU+IHByZW9wPTxwcmVvcCB0eXBlPiBzdGFydF9ub3c9eAorICAgICAgbm93YXlvdXQ9eAorCitUaGUgdGltZW91dCBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gdGhlIGFjdGlvbiwgYW5kIHRoZSBwcmV0aW1lb3V0CitpcyB0aGUgYW1vdW50IG9mIHNlY29uZHMgYmVmb3JlIHRoZSByZXNldCB0aGF0IHRoZSBwcmUtdGltZW91dCBwYW5pYyB3aWxsCitvY2N1ciAoaWYgcHJldGltZW91dCBpcyB6ZXJvLCB0aGVuIHByZXRpbWVvdXQgd2lsbCBub3QgYmUgZW5hYmxlZCkuICBOb3RlCit0aGF0IHRoZSBwcmV0aW1lb3V0IGlzIHRoZSB0aW1lIGJlZm9yZSB0aGUgZmluYWwgdGltZW91dC4gIFNvIGlmIHRoZQordGltZW91dCBpcyA1MCBzZWNvbmRzIGFuZCB0aGUgcHJldGltZW91dCBpcyAxMCBzZWNvbmRzLCB0aGVuIHRoZSBwcmV0aW1lb3V0Cit3aWxsIG9jY3VyIGluIDQwIHNlY29uZCAoMTAgc2Vjb25kcyBiZWZvcmUgdGhlIHRpbWVvdXQpLgorCitUaGUgYWN0aW9uIG1heSBiZSAicmVzZXQiLCAicG93ZXJfY3ljbGUiLCBvciAicG93ZXJfb2ZmIiwgYW5kCitzcGVjaWZpZXMgd2hhdCB0byBkbyB3aGVuIHRoZSB0aW1lciB0aW1lcyBvdXQsIGFuZCBkZWZhdWx0cyB0bworInJlc2V0Ii4KKworVGhlIHByZWFjdGlvbiBtYXkgYmUgInByZV9zbWkiIGZvciBhbiBpbmRpY2F0aW9uIHRocm91Z2ggdGhlIFNNSQoraW50ZXJmYWNlLCAicHJlX2ludCIgZm9yIGFuIGluZGljYXRpb24gdGhyb3VnaCB0aGUgU01JIHdpdGggYW4KK2ludGVycnVwdHMsIGFuZCAicHJlX25taSIgZm9yIGEgTk1JIG9uIGEgcHJlYWN0aW9uLiAgVGhpcyBpcyBob3cKK3RoZSBkcml2ZXIgaXMgaW5mb3JtZWQgb2YgdGhlIHByZXRpbWVvdXQuCisKK1RoZSBwcmVvcCBtYXkgYmUgc2V0IHRvICJwcmVvcF9ub25lIiBmb3Igbm8gb3BlcmF0aW9uIG9uIGEgcHJldGltZW91dCwKKyJwcmVvcF9wYW5pYyIgdG8gc2V0IHRoZSBwcmVvcGVyYXRpb24gdG8gcGFuaWMsIG9yICJwcmVvcF9naXZlX2RhdGEiCit0byBwcm92aWRlIGRhdGEgdG8gcmVhZCBmcm9tIHRoZSB3YXRjaGRvZyBkZXZpY2Ugd2hlbiB0aGUgcHJldGltZW91dAorb2NjdXJzLiAgQSAicHJlX25taSIgc2V0dGluZyBDQU5OT1QgYmUgdXNlZCB3aXRoICJwcmVvcF9naXZlX2RhdGEiCitiZWNhdXNlIHlvdSBjYW4ndCBkbyBkYXRhIG9wZXJhdGlvbnMgZnJvbSBhbiBOTUkuCisKK1doZW4gcHJlb3AgaXMgc2V0IHRvICJwcmVvcF9naXZlX2RhdGEiLCBvbmUgYnl0ZSBjb21lcyByZWFkeSB0byByZWFkCitvbiB0aGUgZGV2aWNlIHdoZW4gdGhlIHByZXRpbWVvdXQgb2NjdXJzLiAgU2VsZWN0IGFuZCBmYXN5bmMgd29yayBvbgordGhlIGRldmljZSwgYXMgd2VsbC4KKworSWYgc3RhcnRfbm93IGlzIHNldCB0byAxLCB0aGUgd2F0Y2hkb2cgdGltZXIgd2lsbCBzdGFydCBydW5uaW5nIGFzCitzb29uIGFzIHRoZSBkcml2ZXIgaXMgbG9hZGVkLgorCitJZiBub3dheW91dCBpcyBzZXQgdG8gMSwgdGhlIHdhdGNoZG9nIHRpbWVyIHdpbGwgbm90IHN0b3Agd2hlbiB0aGUKK3dhdGNoZG9nIGRldmljZSBpcyBjbG9zZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBub3dheW91dCBpcyB0cnVlCitpZiB0aGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIG9wdGlvbiBpcyBlbmFibGVkLCBvciBmYWxzZSBpZiBub3QuCisKK1doZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBpcyBhdmFpbGFibGUKK2ZvciBjb25maWd1cmluZyB0aGUgd2F0Y2hkb2c6CisKKyAgaXBtaV93YXRjaGRvZy50aW1lb3V0PTx0PiBpcG1pX3dhdGNoZG9nLnByZXRpbWVvdXQ9PHQ+CisJaXBtaV93YXRjaGRvZy5hY3Rpb249PGFjdGlvbiB0eXBlPgorCWlwbWlfd2F0Y2hkb2cucHJlYWN0aW9uPTxwcmVhY3Rpb24gdHlwZT4KKwlpcG1pX3dhdGNoZG9nLnByZW9wPTxwcmVvcCB0eXBlPgorCWlwbWlfd2F0Y2hkb2cuc3RhcnRfbm93PXgKKwlpcG1pX3dhdGNoZG9nLm5vd2F5b3V0PXgKKworVGhlIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBtb2R1bGUgcGFyYW1ldGVyIG9wdGlvbnMuCisKK1RoZSB3YXRjaGRvZyB3aWxsIHBhbmljIGFuZCBzdGFydCBhIDEyMCBzZWNvbmQgcmVzZXQgdGltZW91dCBpZiBpdAorZ2V0cyBhIHByZS1hY3Rpb24uICBEdXJpbmcgYSBwYW5pYyBvciBhIHJlYm9vdCwgdGhlIHdhdGNoZG9nIHdpbGwKK3N0YXJ0IGEgMTIwIHRpbWVyIGlmIGl0IGlzIHJ1bm5pbmcgdG8gbWFrZSBzdXJlIHRoZSByZWJvb3Qgb2NjdXJzLgorCitOb3RlIHRoYXQgaWYgeW91IHVzZSB0aGUgTk1JIHByZWFjdGlvbiBmb3IgdGhlIHdhdGNoZG9nLCB5b3UgTVVTVAorTk9UIHVzZSBubWkgd2F0Y2hkb2cgbW9kZSAxLiAgSWYgeW91IHVzZSB0aGUgTk1JIHdhdGNoZG9nLCB5b3UKK211c3QgdXNlIG1vZGUgMi4KKworT25jZSB5b3Ugb3BlbiB0aGUgd2F0Y2hkb2cgdGltZXIsIHlvdSBtdXN0IHdyaXRlIGEgJ1YnIGNoYXJhY3RlciB0byB0aGUKK2RldmljZSB0byBjbG9zZSBpdCwgb3IgdGhlIHRpbWVyIHdpbGwgbm90IHN0b3AuICBUaGlzIGlzIGEgbmV3IHNlbWFudGljCitmb3IgdGhlIGRyaXZlciwgYnV0IG1ha2VzIGl0IGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgd2F0Y2hkb2cKK2RyaXZlcnMgaW4gTGludXguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0lSUS1hZmZpbml0eS50eHQgYi9Eb2N1bWVudGF0aW9uL0lSUS1hZmZpbml0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4ZDdkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vSVJRLWFmZmluaXR5LnR4dApAQCAtMCwwICsxLDM3IEBACisKK1NNUCBJUlEgYWZmaW5pdHksIHN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisKKworL3Byb2MvaXJxL0lSUSMvc21wX2FmZmluaXR5IHNwZWNpZmllcyB3aGljaCB0YXJnZXQgQ1BVcyBhcmUgcGVybWl0dGVkCitmb3IgYSBnaXZlbiBJUlEgc291cmNlLiBJdCdzIGEgYml0bWFzayBvZiBhbGxvd2VkIENQVXMuIEl0J3Mgbm90IGFsbG93ZWQKK3RvIHR1cm4gb2ZmIGFsbCBDUFVzLCBhbmQgaWYgYW4gSVJRIGNvbnRyb2xsZXIgZG9lcyBub3Qgc3VwcG9ydCBJUlEKK2FmZmluaXR5IHRoZW4gdGhlIHZhbHVlIHdpbGwgbm90IGNoYW5nZSBmcm9tIHRoZSBkZWZhdWx0IDB4ZmZmZmZmZmYuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiByZXN0cmljdGluZyBJUlE0NCAoZXRoMSkgdG8gQ1BVMC0zIHRoZW4gcmVzdHJpY3RpbmcKK3RoZSBJUlEgdG8gQ1BVNC03ICh0aGlzIGlzIGFuIDgtQ1BVIFNNUCBib3gpOgorCitbcm9vdEBtb29uIDQ0XSMgY2F0IHNtcF9hZmZpbml0eQorZmZmZmZmZmYKK1tyb290QG1vb24gNDRdIyBlY2hvIDBmID4gc21wX2FmZmluaXR5Citbcm9vdEBtb29uIDQ0XSMgY2F0IHNtcF9hZmZpbml0eQorMDAwMDAwMGYKK1tyb290QG1vb24gNDRdIyBwaW5nIC1mIGgKK1BJTkcgaGVsbCAoMTk1LjQuNy4zKTogNTYgZGF0YSBieXRlcworLi4uCistLS0gaGVsbCBwaW5nIHN0YXRpc3RpY3MgLS0tCis2MDI5IHBhY2tldHMgdHJhbnNtaXR0ZWQsIDYwMjcgcGFja2V0cyByZWNlaXZlZCwgMCUgcGFja2V0IGxvc3MKK3JvdW5kLXRyaXAgbWluL2F2Zy9tYXggPSAwLjEvMC4xLzAuNCBtcworW3Jvb3RAbW9vbiA0NF0jIGNhdCAvcHJvYy9pbnRlcnJ1cHRzIHwgZ3JlcCA0NDoKKyA0NDogICAgICAgICAgMCAgICAgICAxNzg1ICAgICAgIDE3ODUgICAgICAgMTc4MyAgICAgICAxNzgzICAgICAgICAgIDEKKzEgICAgICAgICAgMCAgIElPLUFQSUMtbGV2ZWwgIGV0aDEKK1tyb290QG1vb24gNDRdIyBlY2hvIGYwID4gc21wX2FmZmluaXR5Citbcm9vdEBtb29uIDQ0XSMgcGluZyAtZiBoCitQSU5HIGhlbGwgKDE5NS40LjcuMyk6IDU2IGRhdGEgYnl0ZXMKKy4uCistLS0gaGVsbCBwaW5nIHN0YXRpc3RpY3MgLS0tCisyNzc5IHBhY2tldHMgdHJhbnNtaXR0ZWQsIDI3NzcgcGFja2V0cyByZWNlaXZlZCwgMCUgcGFja2V0IGxvc3MKK3JvdW5kLXRyaXAgbWluL2F2Zy9tYXggPSAwLjEvMC41LzU4NS40IG1zCitbcm9vdEBtb29uIDQ0XSMgY2F0IC9wcm9jL2ludGVycnVwdHMgfCBncmVwIDQ0OgorIDQ0OiAgICAgICAxMDY4ICAgICAgIDE3ODUgICAgICAgMTc4NSAgICAgICAxNzg0ICAgICAgIDE3ODQgICAgICAgMTA2OSAgICAgICAxMDcwICAgICAgIDEwNjkgICBJTy1BUElDLWxldmVsICBldGgxCitbcm9vdEBtb29uIDQ0XSMKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NU0ktSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi9NU0ktSE9XVE8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDMyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQKQEAgLTAsMCArMSw1MDMgQEAKKwkJVGhlIE1TSSBEcml2ZXIgR3VpZGUgSE9XVE8KKwlUb20gTCBOZ3V5ZW4gdG9tLmwubmd1eWVuQGludGVsLmNvbQorCQkJMTAvMDMvMjAwMworCVJldmlzZWQgRmViIDEyLCAyMDA0IGJ5IE1hcnRpbmUgU2lsYmVybWFubgorCQllbWFpbDogTWFydGluZS5TaWxiZXJtYW5uQGhwLmNvbQorCVJldmlzZWQgSnVuIDI1LCAyMDA0IGJ5IFRvbSBMIE5ndXllbgorCisxLiBBYm91dCB0aGlzIGd1aWRlCisKK1RoaXMgZ3VpZGUgZGVzY3JpYmVzIHRoZSBiYXNpY3Mgb2YgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzIChNU0kpLAordGhlIGFkdmFudGFnZXMgb2YgdXNpbmcgTVNJIG92ZXIgdHJhZGl0aW9uYWwgaW50ZXJydXB0IG1lY2hhbmlzbXMsCithbmQgaG93IHRvIGVuYWJsZSB5b3VyIGRyaXZlciB0byB1c2UgTVNJIG9yIE1TSS1YLiBBbHNvIGluY2x1ZGVkIGlzCithIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zLgorCisyLiBDb3B5cmlnaHQgMjAwMyBJbnRlbCBDb3Jwb3JhdGlvbgorCiszLiBXaGF0IGlzIE1TSS9NU0ktWD8KKworTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgKE1TSSksIGFzIGRlc2NyaWJlZCBpbiB0aGUgUENJIExvY2FsIEJ1cworU3BlY2lmaWNhdGlvbiBSZXZpc2lvbiAyLjMgb3IgbGF0ZXN0LCBpcyBhbiBvcHRpb25hbCBmZWF0dXJlLCBhbmQgYQorcmVxdWlyZWQgZmVhdHVyZSBmb3IgUENJIEV4cHJlc3MgZGV2aWNlcy4gTVNJIGVuYWJsZXMgYSBkZXZpY2UgZnVuY3Rpb24KK3RvIHJlcXVlc3Qgc2VydmljZSBieSBzZW5kaW5nIGFuIEluYm91bmQgTWVtb3J5IFdyaXRlIG9uIGl0cyBQQ0kgYnVzIHRvCit0aGUgRlNCIGFzIGEgTWVzc2FnZSBTaWduYWwgSW50ZXJydXB0IHRyYW5zYWN0aW9uLiBCZWNhdXNlIE1TSSBpcworZ2VuZXJhdGVkIGluIHRoZSBmb3JtIG9mIGEgTWVtb3J5IFdyaXRlLCBhbGwgdHJhbnNhY3Rpb24gY29uZGl0aW9ucywKK3N1Y2ggYXMgYSBSZXRyeSwgTWFzdGVyLUFib3J0LCBUYXJnZXQtQWJvcnQgb3Igbm9ybWFsIGNvbXBsZXRpb24sIGFyZQorc3VwcG9ydGVkLgorCitBIFBDSSBkZXZpY2UgdGhhdCBzdXBwb3J0cyBNU0kgbXVzdCBhbHNvIHN1cHBvcnQgcGluIElSUSBhc3NlcnRpb24KK2ludGVycnVwdCBtZWNoYW5pc20gdG8gcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBzeXN0ZW1zIHRoYXQKK2RvIG5vdCBzdXBwb3J0IE1TSS4gSW4gU3lzdGVtcywgd2hpY2ggc3VwcG9ydCBNU0ksIHRoZSBidXMgZHJpdmVyIGlzCityZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBtZXNzYWdlIGFkZHJlc3MgYW5kIG1lc3NhZ2UgZGF0YSBvZgordGhlIGRldmljZSBmdW5jdGlvbidzIE1TSS9NU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBkdXJpbmcgZGV2aWNlCitpbml0aWFsIGNvbmZpZ3VyYXRpb24uCisKK0FuIE1TSSBjYXBhYmxlIGRldmljZSBmdW5jdGlvbiBpbmRpY2F0ZXMgTVNJIHN1cHBvcnQgYnkgaW1wbGVtZW50aW5nCit0aGUgTVNJL01TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIGluIGl0cyBQQ0kgY2FwYWJpbGl0eSBsaXN0LiBUaGUKK2RldmljZSBmdW5jdGlvbiBtYXkgaW1wbGVtZW50IGJvdGggdGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBhbmQKK3RoZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZTsgaG93ZXZlciwgdGhlIGJ1cyBkcml2ZXIgc2hvdWxkIG5vdAorZW5hYmxlIGJvdGguCisKK1RoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgY29udGFpbnMgTWVzc2FnZSBDb250cm9sIHJlZ2lzdGVyLAorTWVzc2FnZSBBZGRyZXNzIHJlZ2lzdGVyIGFuZCBNZXNzYWdlIERhdGEgcmVnaXN0ZXIuIFRoZXNlIHJlZ2lzdGVycworcHJvdmlkZSB0aGUgYnVzIGRyaXZlciBjb250cm9sIG92ZXIgTVNJLiBUaGUgTWVzc2FnZSBDb250cm9sIHJlZ2lzdGVyCitpbmRpY2F0ZXMgdGhlIE1TSSBjYXBhYmlsaXR5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLiBUaGUgTWVzc2FnZQorQWRkcmVzcyByZWdpc3RlciBzcGVjaWZpZXMgdGhlIHRhcmdldCBhZGRyZXNzIGFuZCB0aGUgTWVzc2FnZSBEYXRhCityZWdpc3RlciBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgbWVzc2FnZS4gVG8gcmVxdWVzdAorc2VydmljZSwgdGhlIGRldmljZSBmdW5jdGlvbiB3cml0ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIE1lc3NhZ2UgRGF0YQorcmVnaXN0ZXIgdG8gdGhlIHRhcmdldCBhZGRyZXNzLiBUaGUgZGV2aWNlIGFuZCBpdHMgc29mdHdhcmUgZHJpdmVyCithcmUgcHJvaGliaXRlZCBmcm9tIHdyaXRpbmcgdG8gdGhlc2UgcmVnaXN0ZXJzLgorCitUaGUgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIE1TSS4gSXQKK3VzZXMgYW4gaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIGNhcGFiaWxpdHkgc3RydWN0dXJlLiBUaGVyZSBhcmUKK3NvbWUga2V5IGFkdmFudGFnZXMgdG8gaW1wbGVtZW50aW5nIHRoZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZQorb3ZlciB0aGUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlIGFzIGRlc2NyaWJlZCBiZWxvdy4KKworCS0gU3VwcG9ydCBhIGxhcmdlciBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3JzIHBlciBmdW5jdGlvbi4KKworCS0gUHJvdmlkZSB0aGUgYWJpbGl0eSBmb3Igc3lzdGVtIHNvZnR3YXJlIHRvIGNvbmZpZ3VyZQorCWVhY2ggdmVjdG9yIHdpdGggYW4gaW5kZXBlbmRlbnQgbWVzc2FnZSBhZGRyZXNzIGFuZCBtZXNzYWdlCisJZGF0YSwgc3BlY2lmaWVkIGJ5IGEgdGFibGUgdGhhdCByZXNpZGVzIGluIE1lbW9yeSBTcGFjZS4KKworICAgICAgICAtIE1TSSBhbmQgTVNJLVggYm90aCBzdXBwb3J0IHBlci12ZWN0b3IgbWFza2luZy4gUGVyLXZlY3RvcgorCW1hc2tpbmcgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIG9mIE1TSSBidXQgYSByZXF1aXJlZAorCWZlYXR1cmUgZm9yIE1TSS1YLiBQZXItdmVjdG9yIG1hc2tpbmcgcHJvdmlkZXMgdGhlIGtlcm5lbAorCXRoZSBhYmlsaXR5IHRvIG1hc2svdW5tYXNrIE1TSSB3aGVuIHNlcnZpY2luZyBpdHMgc29mdHdhcmUKKwlpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5nIGhhbmRsZXIuIElmIHBlci12ZWN0b3IgbWFza2luZyBpcworCW5vdCBzdXBwb3J0ZWQsIHRoZW4gdGhlIGRldmljZSBkcml2ZXIgc2hvdWxkIHByb3ZpZGUgdGhlCisJaGFyZHdhcmUvc29mdHdhcmUgc3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UKKwlnZW5lcmF0ZXMgTVNJIHdoZW4gdGhlIGRyaXZlciB3YW50cyBpdCB0byBkbyBzby4KKworNC4gV2h5IHVzZSBNU0k/CisKK0FzIGEgYmVuZWZpdCB0aGUgc2ltcGxpZmljYXRpb24gb2YgYm9hcmQgZGVzaWduLCBNU0kgYWxsb3dzIGJvYXJkCitkZXNpZ25lcnMgdG8gcmVtb3ZlIG91dCBvZiBiYW5kIGludGVycnVwdCByb3V0aW5nLiBNU0kgaXMgYW5vdGhlcgorc3RlcCB0b3dhcmRzIGEgbGVnYWN5LWZyZWUgZW52aXJvbm1lbnQuCisKK0R1ZSB0byBpbmNyZWFzaW5nIHByZXNzdXJlIG9uIGNoaXBzZXQgYW5kIHByb2Nlc3NvciBwYWNrYWdlcyB0bworcmVkdWNlIHBpbiBjb3VudCwgdGhlIG5lZWQgZm9yIGludGVycnVwdCBwaW5zIGlzIGV4cGVjdGVkIHRvCitkaW1pbmlzaCBvdmVyIHRpbWUuIERldmljZXMsIGR1ZSB0byBwaW4gY29uc3RyYWludHMsIG1heSBpbXBsZW1lbnQKK21lc3NhZ2VzIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlLgorCitQQ0kgRXhwcmVzcyBlbmRwb2ludHMgdXNlcyBJTlR4IGVtdWxhdGlvbiAoaW4tYmFuZCBtZXNzYWdlcykgaW5zdGVhZAorb2YgSVJRIHBpbiBhc3NlcnRpb24uIFVzaW5nIElOVHggZW11bGF0aW9uIHJlcXVpcmVzIGludGVycnVwdAorc2hhcmluZyBhbW9uZyBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBub2RlIChQQ0kgYnJpZGdlKSB3aGlsZQorTVNJIGlzIHVuaXF1ZSAobm9uLXNoYXJlZCkgYW5kIGRvZXMgbm90IHJlcXVpcmUgQklPUyBjb25maWd1cmF0aW9uCitzdXBwb3J0LiBBcyBhIHJlc3VsdCwgdGhlIFBDSSBFeHByZXNzIHRlY2hub2xvZ3kgcmVxdWlyZXMgTVNJCitzdXBwb3J0IGZvciBiZXR0ZXIgaW50ZXJydXB0IHBlcmZvcm1hbmNlLgorCitVc2luZyBNU0kgZW5hYmxlcyB0aGUgZGV2aWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHR3byBvciBtb3JlCit2ZWN0b3JzLCB3aGljaCBjYW4gYmUgY29uZmlndXJlZCB0byB0YXJnZXQgZGlmZmVyZW50IENQVSdzIHRvCitpbmNyZWFzZSBzY2FsYWJpbGl0eS4KKworNS4gQ29uZmlndXJpbmcgYSBkcml2ZXIgdG8gdXNlIE1TSS9NU0ktWAorCitCeSBkZWZhdWx0LCB0aGUga2VybmVsIHdpbGwgbm90IGVuYWJsZSBNU0kvTVNJLVggb24gYWxsIGRldmljZXMgdGhhdAorc3VwcG9ydCB0aGlzIGNhcGFiaWxpdHkuIFRoZSBDT05GSUdfUENJX01TSSBrZXJuZWwgb3B0aW9uCittdXN0IGJlIHNlbGVjdGVkIHRvIGVuYWJsZSBNU0kvTVNJLVggc3VwcG9ydC4KKworNS4xIEluY2x1ZGluZyBNU0kvTVNJLVggc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwKKworVG8gYWxsb3cgTVNJL01TSS1YIGNhcGFibGUgZGV2aWNlIGRyaXZlcnMgdG8gc2VsZWN0aXZlbHkgZW5hYmxlCitNU0kvTVNJLVggKHVzaW5nIHBjaV9lbmFibGVfbXNpKCkvcGNpX2VuYWJsZV9tc2l4KCkgYXMgZGVzY3JpYmVkCitiZWxvdyksIHRoZSBWRUNUT1IgYmFzZWQgc2NoZW1lIG5lZWRzIHRvIGJlIGVuYWJsZWQgYnkgc2V0dGluZworQ09ORklHX1BDSV9NU0kgZHVyaW5nIGtlcm5lbCBjb25maWcuCisKK1NpbmNlIHRoZSB0YXJnZXQgb2YgdGhlIGluYm91bmQgbWVzc2FnZSBpcyB0aGUgbG9jYWwgQVBJQywgcHJvdmlkaW5nCitDT05GSUdfWDg2X0xPQ0FMX0FQSUMgbXVzdCBiZSBlbmFibGVkIGFzIHdlbGwgYXMgQ09ORklHX1BDSV9NU0kuCisKKzUuMiBDb25maWd1cmluZyBmb3IgTVNJIHN1cHBvcnQKKworRHVlIHRvIHRoZSBub24tY29udGlndW91cyBmYXNoaW9uIGluIHZlY3RvciBhc3NpZ25tZW50IG9mIHRoZQorZXhpc3RpbmcgTGludXgga2VybmVsLCB0aGlzIHZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZQorbWVzc2FnZXMgcmVnYXJkbGVzcyBvZiBhIGRldmljZSBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIHN1cHBvcnRpbmcKK21vcmUgdGhhbiBvbmUgdmVjdG9yLiBUbyBlbmFibGUgTVNJIG9uIGEgZGV2aWNlIGZ1bmN0aW9uJ3MgTVNJCitjYXBhYmlsaXR5IHN0cnVjdHVyZSByZXF1aXJlcyBhIGRldmljZSBkcml2ZXIgdG8gY2FsbCB0aGUgZnVuY3Rpb24KK3BjaV9lbmFibGVfbXNpKCkgZXhwbGljaXRseS4KKworNS4yLjEgQVBJIHBjaV9lbmFibGVfbXNpCisKK2ludCBwY2lfZW5hYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorCitXaXRoIHRoaXMgbmV3IEFQSSwgYW55IGV4aXN0aW5nIGRldmljZSBkcml2ZXIsIHdoaWNoIGxpa2UgdG8gaGF2ZQorTVNJIGVuYWJsZWQgb24gaXRzIGRldmljZSBmdW5jdGlvbiwgbXVzdCBjYWxsIHRoaXMgQVBJIHRvIGVuYWJsZSBNU0kKK0Egc3VjY2Vzc2Z1bCBjYWxsIHdpbGwgaW5pdGlhbGl6ZSB0aGUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlCit3aXRoIE9ORSB2ZWN0b3IsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGRldmljZSBmdW5jdGlvbiBpcworY2FwYWJsZSBvZiBzdXBwb3J0aW5nIG11bHRpcGxlIG1lc3NhZ2VzLiBUaGlzIHZlY3RvciByZXBsYWNlcyB0aGUKK3ByZS1hc3NpZ25lZCBkZXYtPmlycSB3aXRoIGEgbmV3IE1TSSB2ZWN0b3IuIFRvIGF2b2lkIHRoZSBjb25mbGljdAorb2YgbmV3IGFzc2lnbmVkIHZlY3RvciB3aXRoIGV4aXN0aW5nIHByZS1hc3NpZ25lZCB2ZWN0b3IgcmVxdWlyZXMKK2EgZGV2aWNlIGRyaXZlciB0byBjYWxsIHRoaXMgQVBJIGJlZm9yZSBjYWxsaW5nIHJlcXVlc3RfaXJxKCkuCisKKzUuMi4yIEFQSSBwY2lfZGlzYWJsZV9tc2kKKwordm9pZCBwY2lfZGlzYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKmRldikKKworVGhpcyBBUEkgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBwY2lfZW5hYmxlX21zaSgpCit3aGVuIGEgZGV2aWNlIGRyaXZlciBpcyB1bmxvYWRpbmcuIFRoaXMgQVBJIHJlc3RvcmVzIGRldi0+aXJxIHdpdGgKK3RoZSBwcmUtYXNzaWduZWQgSU9BUElDIHZlY3RvciBhbmQgc3dpdGNoZXMgYSBkZXZpY2UncyBpbnRlcnJ1cHQKK21vZGUgdG8gUENJIHBpbi1pcnEgYXNzZXJ0aW9uL0lOVHggZW11bGF0aW9uIG1vZGUuCisKK05vdGUgdGhhdCBhIGRldmljZSBkcml2ZXIgc2hvdWxkIGFsd2F5cyBjYWxsIGZyZWVfaXJxKCkgb24gTVNJIHZlY3RvcgoraXQgaGFzIGRvbmUgcmVxdWVzdF9pcnEoKSBvbiBiZWZvcmUgY2FsbGluZyB0aGlzIEFQSS4gRmFpbHVyZSB0byBkbworc28gcmVzdWx0cyBhIEJVR19PTigpIGFuZCBhIGRldmljZSB3aWxsIGJlIGxlZnQgd2l0aCBNU0kgZW5hYmxlZCBhbmQKK2xlYWtzIGl0cyB2ZWN0b3IuCisKKzUuMi4zIE1TSSBtb2RlIHZzLiBsZWdhY3kgbW9kZSBkaWFncmFtCisKK1RoZSBiZWxvdyBkaWFncmFtIHNob3dzIHRoZSBldmVudHMsIHdoaWNoIHN3aXRjaGVzIHRoZSBpbnRlcnJ1cHQKK21vZGUgb24gdGhlIE1TSS1jYXBhYmxlIGRldmljZSBmdW5jdGlvbiBiZXR3ZWVuIE1TSSBtb2RlIGFuZAorUElOLUlSUSBhc3NlcnRpb24gbW9kZS4KKworCSAtLS0tLS0tLS0tLS0gICBwY2lfZW5hYmxlX21zaSAJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXwJICAgICB8IDw9PT09PT09PT09PT09PT0JfCAJCQkgfAorCXwgTVNJIE1PREUgICB8CSAgCSAgICAgCXwgUElOLUlSUSBBU1NFUlRJT04gTU9ERSB8CisJfCAJICAgICB8ID09PT09PT09PT09PT09PT4JfAkJCSB8CisgCSAtLS0tLS0tLS0tLS0JcGNpX2Rpc2FibGVfbXNpICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitGaWd1cmUgMS4wIE1TSSBNb2RlIHZzLiBMZWdhY3kgTW9kZQorCitJbiBGaWd1cmUgMS4wLCBhIGRldmljZSBvcGVyYXRlcyBieSBkZWZhdWx0IGluIGxlZ2FjeSBtb2RlLiBMZWdhY3kKK2luIHRoaXMgY29udGV4dCBtZWFucyBQQ0kgcGluLWlycSBhc3NlcnRpb24gb3IgUENJLUV4cHJlc3MgSU5UeAorZW11bGF0aW9uLiBBIHN1Y2Nlc3NmdWwgTVNJIHJlcXVlc3QgKHVzaW5nIHBjaV9lbmFibGVfbXNpKCkpIHN3aXRjaGVzCithIGRldmljZSdzIGludGVycnVwdCBtb2RlIHRvIE1TSSBtb2RlLiBBIHByZS1hc3NpZ25lZCBJT0FQSUMgdmVjdG9yCitzdG9yZWQgaW4gZGV2LT5pcnEgd2lsbCBiZSBzYXZlZCBieSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgYSBuZXcKK2Fzc2lnbmVkIE1TSSB2ZWN0b3Igd2lsbCByZXBsYWNlIGRldi0+aXJxLgorCitUbyByZXR1cm4gYmFjayB0byBpdHMgZGVmYXVsdCBtb2RlLCBhIGRldmljZSBkcml2ZXIgc2hvdWxkIGFsd2F5cyBjYWxsCitwY2lfZGlzYWJsZV9tc2koKSB0byB1bmRvIHRoZSBlZmZlY3Qgb2YgcGNpX2VuYWJsZV9tc2koKS4gTm90ZSB0aGF0IGEKK2RldmljZSBkcml2ZXIgc2hvdWxkIGFsd2F5cyBjYWxsIGZyZWVfaXJxKCkgb24gTVNJIHZlY3RvciBpdCBoYXMgZG9uZQorcmVxdWVzdF9pcnEoKSBvbiBiZWZvcmUgY2FsbGluZyBwY2lfZGlzYWJsZV9tc2koKS4gRmFpbHVyZSB0byBkbyBzbworcmVzdWx0cyBhIEJVR19PTigpIGFuZCBhIGRldmljZSB3aWxsIGJlIGxlZnQgd2l0aCBNU0kgZW5hYmxlZCBhbmQKK2xlYWtzIGl0cyB2ZWN0b3IuIE90aGVyd2lzZSwgdGhlIFBDSSBzdWJzeXN0ZW0gcmVzdG9yZXMgYSBkZXZpY2UncworZGV2LT5pcnEgd2l0aCBhIHByZS1hc3NpZ25lZCBJT0FQSUMgdmVjdG9yIGFuZCBtYXJrcyByZWxlYXNlZAorTVNJIHZlY3RvciBhcyB1bnVzZWQuCisKK09uY2UgYmVpbmcgbWFya2VkIGFzIHVudXNlZCwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIFBDSQorc3Vic3lzdGVtIHdpbGwgcmVzZXJ2ZSB0aGlzIE1TSSB2ZWN0b3IgZm9yIGEgZGV2aWNlLiBEZXBlbmRpbmcgb24KK3RoZSBhdmFpbGFiaWxpdHkgb2YgY3VycmVudCBQQ0kgdmVjdG9yIHJlc291cmNlcyBhbmQgdGhlIG51bWJlciBvZgorTVNJL01TSS1YIHJlcXVlc3RzIGZyb20gb3RoZXIgZHJpdmVycywgdGhpcyBNU0kgbWF5IGJlIHJlLWFzc2lnbmVkLgorCitGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIFBDSSBzdWJzeXN0ZW0gcmUtYXNzaWduZWQgdGhpcyBNU0kgdmVjdG9yCithbm90aGVyIGRyaXZlciwgYSByZXF1ZXN0IHRvIHN3aXRjaGluZyBiYWNrIHRvIE1TSSBtb2RlIG1heSByZXN1bHQKK2luIGJlaW5nIGFzc2lnbmVkIGEgZGlmZmVyZW50IE1TSSB2ZWN0b3Igb3IgYSBmYWlsdXJlIGlmIG5vIG1vcmUKK3ZlY3RvcnMgYXJlIGF2YWlsYWJsZS4KKworNS4zIENvbmZpZ3VyaW5nIGZvciBNU0ktWCBzdXBwb3J0CisKK0R1ZSB0byB0aGUgYWJpbGl0eSBvZiB0aGUgc3lzdGVtIHNvZnR3YXJlIHRvIGNvbmZpZ3VyZSBlYWNoIHZlY3RvciBvZgordGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIHdpdGggYW4gaW5kZXBlbmRlbnQgbWVzc2FnZSBhZGRyZXNzCithbmQgbWVzc2FnZSBkYXRhLCB0aGUgbm9uLWNvbnRpZ3VvdXMgZmFzaGlvbiBpbiB2ZWN0b3IgYXNzaWdubWVudCBvZgordGhlIGV4aXN0aW5nIExpbnV4IGtlcm5lbCBoYXMgbm8gaW1wYWN0IG9uIHN1cHBvcnRpbmcgbXVsdGlwbGUKK21lc3NhZ2VzIG9uIGFuIE1TSS1YIGNhcGFibGUgZGV2aWNlIGZ1bmN0aW9ucy4gVG8gZW5hYmxlIE1TSS1YIG9uCithIGRldmljZSBmdW5jdGlvbidzIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIHJlcXVpcmVzIGl0cyBkZXZpY2UKK2RyaXZlciB0byBjYWxsIHRoZSBmdW5jdGlvbiBwY2lfZW5hYmxlX21zaXgoKSBleHBsaWNpdGx5LgorCitUaGUgZnVuY3Rpb24gcGNpX2VuYWJsZV9tc2l4KCksIG9uY2UgaW52b2tlZCwgZW5hYmxlcyBlaXRoZXIKK2FsbCBvciBub3RoaW5nLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYXZhaWxhYmlsaXR5IG9mIFBDSSB2ZWN0b3IKK3Jlc291cmNlcy4gSWYgdGhlIFBDSSB2ZWN0b3IgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBudW1iZXIKK29mIHZlY3RvcnMgcmVxdWVzdGVkIGJ5IGEgZGV2aWNlIGRyaXZlciwgdGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZQordGhlIE1TSS1YIHRhYmxlIG9mIHRoZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiBhIGRldmljZSB3aXRoCityZXF1ZXN0ZWQgbWVzc2FnZXMuIFRvIGVtcGhhc2l6ZSB0aGlzIHJlYXNvbiwgZm9yIGV4YW1wbGUsIGEgZGV2aWNlCittYXkgYmUgY2FwYWJsZSBmb3Igc3VwcG9ydGluZyB0aGUgbWF4aW11bSBvZiAzMiB2ZWN0b3JzIHdoaWxlIGl0cworc29mdHdhcmUgZHJpdmVyIHVzdWFsbHkgbWF5IHJlcXVlc3QgNCB2ZWN0b3JzLiBJdCBpcyByZWNvbW1lbmRlZAordGhhdCB0aGUgZGV2aWNlIGRyaXZlciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2UgZHVyaW5nIHRoZQoraW5pdGlhbGl6YXRpb24gcGhhc2Ugb2YgdGhlIGRldmljZSBkcml2ZXIuCisKK1VubGlrZSB0aGUgZnVuY3Rpb24gcGNpX2VuYWJsZV9tc2koKSwgdGhlIGZ1bmN0aW9uIHBjaV9lbmFibGVfbXNpeCgpCitkb2VzIG5vdCByZXBsYWNlIHRoZSBwcmUtYXNzaWduZWQgSU9BUElDIGRldi0+aXJxIHdpdGggYSBuZXcgTVNJCit2ZWN0b3IgYmVjYXVzZSB0aGUgUENJIHN1YnN5c3RlbSB3cml0ZXMgdGhlIDE6MSB2ZWN0b3ItdG8tZW50cnkgbWFwcGluZworaW50byB0aGUgZmllbGQgdmVjdG9yIG9mIGVhY2ggZWxlbWVudCBjb250YWluZWQgaW4gYSBzZWNvbmQgYXJndW1lbnQuCitOb3RlIHRoYXQgdGhlIHByZS1hc3NpZ25lZCBJTy1BUElDIGRldi0+aXJxIGlzIHZhbGlkIG9ubHkgaWYgdGhlIGRldmljZQorb3BlcmF0ZXMgaW4gUElOLUlSUSBhc3NlcnRpb24gbW9kZS4gSW4gTVNJLVggbW9kZSwgYW55IGF0dGVtcHQgb2YKK3VzaW5nIGRldi0+aXJxIGJ5IHRoZSBkZXZpY2UgZHJpdmVyIHRvIHJlcXVlc3QgZm9yIGludGVycnVwdCBzZXJ2aWNlCittYXkgcmVzdWx0IHVucHJlZGljdGFiZSBiZWhhdmlvci4KKworRm9yIGVhY2ggTVNJLVggdmVjdG9yIGdyYW50ZWQsIGEgZGV2aWNlIGRyaXZlciBpcyByZXNwb25zaWJsZSB0byBjYWxsCitvdGhlciBmdW5jdGlvbnMgbGlrZSByZXF1ZXN0X2lycSgpLCBlbmFibGVfaXJxKCksIGV0Yy4gdG8gZW5hYmxlCit0aGlzIHZlY3RvciB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIGludGVycnVwdCBzZXJ2aWNlIGhhbmRsZXIuIEl0IGlzCithIGRldmljZSBkcml2ZXIncyBjaG9pY2UgdG8gYXNzaWduIGFsbCB2ZWN0b3JzIHdpdGggdGhlIHNhbWUKK2ludGVycnVwdCBzZXJ2aWNlIGhhbmRsZXIgb3IgZWFjaCB2ZWN0b3Igd2l0aCBhIHVuaXF1ZSBpbnRlcnJ1cHQKK3NlcnZpY2UgaGFuZGxlci4KKworNS4zLjEgSGFuZGxpbmcgTU1JTyBhZGRyZXNzIHNwYWNlIG9mIE1TSS1YIFRhYmxlCisKK1RoZSBQQ0kgMy4wIHNwZWNpZmljYXRpb24gaGFzIGltcGxlbWVudGF0aW9uIG5vdGVzIHRoYXQgTU1JTyBhZGRyZXNzCitzcGFjZSBmb3IgYSBkZXZpY2UncyBNU0ktWCBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGlzb2xhdGVkIHNvIHRoYXQgdGhlCitzb2Z0d2FyZSBzeXN0ZW0gY2FuIHNldCBkaWZmZXJlbnQgcGFnZSBmb3IgY29udHJvbGxpbmcgYWNjZXNzZXMgdG8KK3RoZSBNU0ktWCBzdHJ1Y3R1cmUuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNU0kgcGF0Y2ggcmVxdWlyZXMgdGhlIFBDSQorc3Vic3lzdGVtLCBub3QgYSBkZXZpY2UgZHJpdmVyLCB0byBtYWludGFpbiBmdWxsIGNvbnRyb2wgb2YgdGhlIE1TSS1YCit0YWJsZS9NU0ktWCBQQkEgYW5kIE1NSU8gYWRkcmVzcyBzcGFjZSBvZiB0aGUgTVNJLVggdGFibGUvTVNJLVggUEJBLgorQSBkZXZpY2UgZHJpdmVyIGlzIHByb2hpYml0ZWQgZnJvbSByZXF1ZXN0aW5nIHRoZSBNTUlPIGFkZHJlc3Mgc3BhY2UKK29mIHRoZSBNU0ktWCB0YWJsZS9NU0ktWCBQQkEuIE90aGVyd2lzZSwgdGhlIFBDSSBzdWJzeXN0ZW0gd2lsbCBmYWlsCitlbmFibGluZyBNU0ktWCBvbiBpdHMgaGFyZHdhcmUgZGV2aWNlIHdoZW4gaXQgY2FsbHMgdGhlIGZ1bmN0aW9uCitwY2lfZW5hYmxlX21zaXgoKS4KKworNS4zLjIgSGFuZGxpbmcgTVNJLVggYWxsb2NhdGlvbgorCitEZXRlcm1pbmluZyB0aGUgbnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgYWxsb2NhdGVkIHRvIGEgZnVuY3Rpb24gaXMKK2RlcGVuZGVudCBvbiB0aGUgbnVtYmVyIG9mIE1TSSBjYXBhYmxlIGRldmljZXMgYW5kIE1TSS1YIGNhcGFibGUKK2RldmljZXMgcG9wdWxhdGVkIGluIHRoZSBzeXN0ZW0uIFRoZSBwb2xpY3kgb2YgYWxsb2NhdGluZyBNU0ktWAordmVjdG9ycyB0byBhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2luZzoKKworI29mIE1TSS1YIHZlY3RvcnMgYWxsb2NhdGVkIHRvIGEgZnVuY3Rpb24gPSAoeCAtIHkpL3ogd2hlcmUKKworeCA9IAlUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBQQ0kgdmVjdG9yIHJlc291cmNlcyBieSB0aGUgdGltZQorCXRoZSBkZXZpY2UgZHJpdmVyIGNhbGxzIHBjaV9lbmFibGVfbXNpeCgpLiBUaGUgUENJIHZlY3RvcgorCXJlc291cmNlcyBpcyB0aGUgc3VtIG9mIHRoZSBudW1iZXIgb2YgdW5hc3NpZ25lZCB2ZWN0b3JzCisJKG5ldykgYW5kIHRoZSBudW1iZXIgb2YgcmVsZWFzZWQgdmVjdG9ycyB3aGVuIGFueSBNU0kvTVNJLVgKKwlkZXZpY2UgZHJpdmVyIHN3aXRjaGVzIGl0cyBoYXJkd2FyZSBkZXZpY2UgYmFjayB0byBhIGxlZ2FjeQorCW1vZGUgb3IgaXMgaG90LXJlbW92ZWQuCVRoZSBudW1iZXIgb2YgdW5hc3NpZ25lZCB2ZWN0b3JzCisJbWF5IGV4Y2x1ZGUgc29tZSB2ZWN0b3JzIHJlc2VydmVkLCBhcyBkZWZpbmVkIGluIHBhcmFtZXRlcgorCU5SX0hQX1JFU0VSVkVEX1ZFQ1RPUlMsIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgc3lzdGVtIGlzCisJY2FwYWJsZSBvZiBzdXBwb3J0aW5nIGhvdC1hZGQvaG90LXJlbW92ZSBvcGVyYXRpb25zLiBVc2VycworCW1heSBjaGFuZ2UgdGhlIHZhbHVlIGRlZmluZWQgaW4gTlJfSFJfUkVTRVJWRURfVkVDVE9SUyB0bworCW1lZXQgdGhlaXIgc3BlY2lmaWMgbmVlZHMuCisKK3kgPQlUaGUgbnVtYmVyIG9mIE1TSSBjYXBhYmxlIGRldmljZXMgcG9wdWxhdGVkIGluIHRoZSBzeXN0ZW0uCisJVGhpcyBwb2xpY3kgZW5zdXJlcyB0aGF0IGVhY2ggTVNJIGNhcGFibGUgZGV2aWNlIGhhcyBpdHMKKwl2ZWN0b3IgcmVzZXJ2ZWQgdG8gYXZvaWQgdGhlIGNhc2Ugd2hlcmUgc29tZSBNU0ktWCBjYXBhYmxlCisJZHJpdmVycyBtYXkgYXR0ZW1wdCB0byBjbGFpbSBhbGwgYXZhaWxhYmxlIHZlY3RvciByZXNvdXJjZXMuCisKK3ogPQlUaGUgbnVtYmVyIG9mIE1TSS1YIGNhcGFibGUgZGV2aWNlcyBwdXB1bGF0ZWQgaW4gdGhlIHN5c3RlbS4KKwlUaGlzIHBvbGljeSBlbnN1cmVzIHRoYXQgbWF4aW11bSAoeCAtIHkpIGlzIGRpc3RyaWJ1dGVkCisJZXZlbmx5IGFtb25nIE1TSS1YIGNhcGFibGUgZGV2aWNlcy4KKworTm90ZSB0aGF0IHRoZSBQQ0kgc3Vic3lzdGVtIHNjYW5zIHkgYW5kIHogZHVyaW5nIGEgYnVzIGVudW1lcmF0aW9uLgorV2hlbiB0aGUgUENJIHN1YnN5c3RlbSBjb21wbGV0ZXMgY29uZmlndXJpbmcgTVNJL01TSS1YIGNhcGFiaWxpdHkKK3N0cnVjdHVyZSBvZiBhIGRldmljZSBhcyByZXF1ZXN0ZWQgYnkgaXRzIGRldmljZSBkcml2ZXIsIHkveiBpcworZGVjcmVtZW50ZWQgYWNjb3JkaW5nbHkuCisKKzUuMy4zIEhhbmRsaW5nIE1TSS1YIHNob3J0YWdlcworCitGb3IgdGhlIGNhc2Ugd2hlcmUgZmV3ZXIgTVNJLVggdmVjdG9ycyBhcmUgYWxsb2NhdGVkIHRvIGEgZnVuY3Rpb24KK3RoYW4gcmVxdWVzdGVkLCB0aGUgZnVuY3Rpb24gcGNpX2VuYWJsZV9tc2l4KCkgd2lsbCByZXR1cm4gdGhlCittYXhpbXVtIG51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLiBBIGRldmljZQorZHJpdmVyIG1heSByZS1zZW5kIGl0cyByZXF1ZXN0IHdpdGggZmV3ZXIgb3IgZXF1YWwgdmVjdG9ycyBpbmRpY2F0ZWQKK2luIGEgcmV0dXJuLiBGb3IgZXhhbXBsZSwgaWYgYSBkZXZpY2UgZHJpdmVyIHJlcXVlc3RzIDUgdmVjdG9ycywgYnV0Cit0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSB2ZWN0b3JzIGlzIDMgdmVjdG9ycywgYSB2YWx1ZSBvZiAzIHdpbGwgYmUgYQorcmV0dXJuIGFzIGEgcmVzdWx0IG9mIHBjaV9lbmFibGVfbXNpeCgpIGNhbGwuIEEgZnVuY3Rpb24gY291bGQgYmUKK2Rlc2lnbmVkIGZvciBpdHMgZHJpdmVyIHRvIHVzZSBvbmx5IDMgTVNJLVggdGFibGUgZW50cmllcyBhcworZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBhcyBBQkMtLSwgQS1CLUMsIEEtLUNCLCBldGMuIE5vdGUgdGhhdCB0aGlzCitwYXRjaCBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGVudHJpZXMgd2l0aCB0aGUgc2FtZSB2ZWN0b3IuIFN1Y2gKK2F0dGVtcHQgYnkgYSBkZXZpY2UgZHJpdmVyIHRvIHVzZSA1IE1TSS1YIHRhYmxlIGVudHJpZXMgd2l0aCAzIHZlY3RvcnMKK2FzIEFCQkNDLCBBQUJDQywgQkNDQkEsIGV0YyB3aWxsIHJlc3VsdCBhcyBhIGZhaWx1cmUgYnkgdGhlIGZ1bmN0aW9uCitwY2lfZW5hYmxlX21zaXgoKS4gQmVsb3cgYXJlIHRoZSByZWFzb25zIHdoeSBzdXBwb3J0aW5nIG11bHRpcGxlCitlbnRyaWVzIHdpdGggdGhlIHNhbWUgdmVjdG9yIGlzIGFuIHVuZGVzaXJhYmxlIHNvbHV0aW9uLgorCisJLSBUaGUgUENJIHN1YnN5c3RlbSBjYW4gbm90IGRldGVybWluZSB3aGljaCBlbnRyeSwgd2hpY2gKKwkgIGdlbmVyYXRlZCB0aGUgbWVzc2FnZSwgdG8gbWFzay91bm1hc2sgTVNJIHdoaWxlIGhhbmRsaW5nCisJICBzb2Z0d2FyZSBkcml2ZXIgSVNSLiBBdHRlbXB0aW5nIHRvIHdhbGsgdGhyb3VnaCBhbGwgTVNJLVgKKwkgIHRhYmxlIGVudHJpZXMgKDIwNDggbWF4KSB0byBtYXNrL3VubWFzayBhbnkgbWF0Y2ggdmVjdG9yCisJICBpcyBhbiB1bmRlc2lyYWJsZSBzb2x1dGlvbi4KKworCS0gV2FsayB0aHJvdWdoIGFsbCBNU0ktWCB0YWJsZSBlbnRyaWVzICgyMDQ4IG1heCkgdG8gaGFuZGxlCisJICBTTVAgYWZmaW5pdHkgb2YgYW55IG1hdGNoIHZlY3RvciBpcyBhbiB1bmRlc2lyYWJsZSBzb2x1dGlvbi4KKworNS4zLjQgQVBJIHBjaV9lbmFibGVfbXNpeAorCitpbnQgcGNpX2VuYWJsZV9tc2l4KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiAqZW50cmllcywgaW50IG52ZWMpCisKK1RoaXMgQVBJIGVuYWJsZXMgYSBkZXZpY2UgZHJpdmVyIHRvIHJlcXVlc3QgdGhlIFBDSSBzdWJzeXN0ZW0KK2ZvciBlbmFibGluZyBNU0ktWCBtZXNzYWdlcyBvbiBpdHMgaGFyZHdhcmUgZGV2aWNlLiBEZXBlbmRpbmcgb24KK3RoZSBhdmFpbGFiaWxpdHkgb2YgUENJIHZlY3RvcnMgcmVzb3VyY2VzLCB0aGUgUENJIHN1YnN5c3RlbSBlbmFibGVzCitlaXRoZXIgYWxsIG9yIG5vdGhpbmcuCisKK0FyZ3VtZW50IGRldiBwb2ludHMgdG8gdGhlIGRldmljZSAocGNpX2Rldikgc3RydWN0dXJlLgorCitBcmd1bWVudCBlbnRyaWVzIGlzIGEgcG9pbnRlciBvZiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuIFRoZSBudW1iZXIgb2YKK2VsZW1lbnRzIGlzIGluZGljYXRlZCBpbiBhcmd1bWVudCBudmVjLiBUaGUgY29udGVudCBvZiBlYWNoIGVsZW1lbnQKK3dpbGwgYmUgbWFwcGVkIHRvIHRoZSBmb2xsb3dpbmcgc3RydWN0IGRlZmluZWQgaW4gL2RyaXZlci9wY2kvbXNpLmguCisKK3N0cnVjdCBtc2l4X2VudHJ5IHsKKwl1MTYgCXZlY3RvcjsgLyoga2VybmVsIHVzZXMgdG8gd3JpdGUgYWxsb2MgdmVjdG9yICovCisJdTE2CWVudHJ5OyAvKiBkcml2ZXIgdXNlcyB0byBzcGVjaWZ5IGVudHJ5ICovCit9OworCitBIGRldmljZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgZmllbGQgZW50cnkgb2YKK2VhY2ggZWxlbWVudCB3aXRoIHVuaXF1ZSBlbnRyeSBzdXBwb3J0ZWQgYnkgTVNJLVggdGFibGUuIE90aGVyd2lzZSwKKy1FSU5WQUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIHJlc3VsdC4gQSBzdWNjZXNzZnVsIHJldHVybiBvZiB6ZXJvCitpbmRpY2F0ZXMgdGhlIFBDSSBzdWJzeXN0ZW0gY29tcGxldGVzIGluaXRpYWxpemluZyBlYWNoIG9mIHJlcXVlc3RlZAorZW50cmllcyBvZiB0aGUgTVNJLVggdGFibGUgd2l0aCBtZXNzYWdlIGFkZHJlc3MgYW5kIG1lc3NhZ2UgZGF0YS4KK0xhc3QgYnV0IG5vdCBsZWFzdCwgdGhlIFBDSSBzdWJzeXN0ZW0gd2lsbCB3cml0ZSB0aGUgMToxCit2ZWN0b3ItdG8tZW50cnkgbWFwcGluZyBpbnRvIHRoZSBmaWVsZCB2ZWN0b3Igb2YgZWFjaCBlbGVtZW50LiBBCitkZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIG9mIGtlZXBpbmcgdHJhY2sgb2YgYWxsb2NhdGVkIE1TSS1YCit2ZWN0b3JzIGluIGl0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZS4KKworQXJndW1lbnQgbnZlYyBpcyBhbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBtZXNzYWdlcworcmVxdWVzdGVkLgorCitBIHJldHVybiBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBudW1iZXIgb2YgTVNJLVggdmVjdG9ycyBpcworc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4gQSByZXR1cm4gb2YgZ3JlYXRlciB0aGFuIHplcm8gaW5kaWNhdGVzCitNU0ktWCB2ZWN0b3Igc2hvcnRhZ2UuIE9yIGEgcmV0dXJuIG9mIGxlc3MgdGhhbiB6ZXJvIGluZGljYXRlcworYSBmYWlsdXJlLiBUaGlzIGZhaWx1cmUgbWF5IGJlIGEgcmVzdWx0IG9mIGR1cGxpY2F0ZSBlbnRyaWVzCitzcGVjaWZpZWQgaW4gc2Vjb25kIGFyZ3VtZW50LCBvciBhIHJlc3VsdCBvZiBubyBhdmFpbGFibGUgdmVjdG9yLAorb3IgYSByZXN1bHQgb2YgZmFpbGluZyB0byBpbml0aWFsaXplIE1TSS1YIHRhYmxlIGVudHJpZXMuCisKKzUuMy41IEFQSSBwY2lfZGlzYWJsZV9tc2l4CisKK3ZvaWQgcGNpX2Rpc2FibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorCitUaGlzIEFQSSBzaG91bGQgYWx3YXlzIGJlIHVzZWQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpeCgpCit3aGVuIGEgZGV2aWNlIGRyaXZlciBpcyB1bmxvYWRpbmcuIE5vdGUgdGhhdCBhIGRldmljZSBkcml2ZXIgc2hvdWxkCithbHdheXMgY2FsbCBmcmVlX2lycSgpIG9uIGFsbCBNU0ktWCB2ZWN0b3JzIGl0IGhhcyBkb25lIHJlcXVlc3RfaXJxKCkKK29uIGJlZm9yZSBjYWxsaW5nIHRoaXMgQVBJLiBGYWlsdXJlIHRvIGRvIHNvIHJlc3VsdHMgYSBCVUdfT04oKSBhbmQKK2EgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoIE1TSS1YIGVuYWJsZWQgYW5kIGxlYWtzIGl0cyB2ZWN0b3JzLgorCis1LjMuNiBNU0ktWCBtb2RlIHZzLiBsZWdhY3kgbW9kZSBkaWFncmFtCisKK1RoZSBiZWxvdyBkaWFncmFtIHNob3dzIHRoZSBldmVudHMsIHdoaWNoIHN3aXRjaGVzIHRoZSBpbnRlcnJ1cHQKK21vZGUgb24gdGhlIE1TSS1YIGNhcGFibGUgZGV2aWNlIGZ1bmN0aW9uIGJldHdlZW4gTVNJLVggbW9kZSBhbmQKK1BJTi1JUlEgYXNzZXJ0aW9uIG1vZGUgKGxlZ2FjeSkuCisKKwkgLS0tLS0tLS0tLS0tICAgcGNpX2VuYWJsZV9tc2l4KCwsbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfAkgICAgIHwgPD09PT09PT09PT09PT09PQkgICAgfCAJCQkgICAgIHwKKwl8IE1TSS1YIE1PREUgfAkgIAkgICAgIAkgICAgfCBQSU4tSVJRIEFTU0VSVElPTiBNT0RFIHwKKwl8IAkgICAgIHwgPT09PT09PT09PT09PT09PgkgICAgfAkJCSAgICAgfAorIAkgLS0tLS0tLS0tLS0tCXBjaV9kaXNhYmxlX21zaXggICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaWd1cmUgMi4wIE1TSS1YIE1vZGUgdnMuIExlZ2FjeSBNb2RlCisKK0luIEZpZ3VyZSAyLjAsIGEgZGV2aWNlIG9wZXJhdGVzIGJ5IGRlZmF1bHQgaW4gbGVnYWN5IG1vZGUuIEEKK3N1Y2Nlc3NmdWwgTVNJLVggcmVxdWVzdCAodXNpbmcgcGNpX2VuYWJsZV9tc2l4KCkpIHN3aXRjaGVzIGEKK2RldmljZSdzIGludGVycnVwdCBtb2RlIHRvIE1TSS1YIG1vZGUuIEEgcHJlLWFzc2lnbmVkIElPQVBJQyB2ZWN0b3IKK3N0b3JlZCBpbiBkZXYtPmlycSB3aWxsIGJlIHNhdmVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtOyBob3dldmVyLAordW5saWtlIE1TSSBtb2RlLCB0aGUgUENJIHN1YnN5c3RlbSB3aWxsIG5vdCByZXBsYWNlIGRldi0+aXJxIHdpdGgKK2Fzc2lnbmVkIE1TSS1YIHZlY3RvciBiZWNhdXNlIHRoZSBQQ0kgc3Vic3lzdGVtIGFscmVhZHkgd3JpdGVzIHRoZSAxOjEKK3ZlY3Rvci10by1lbnRyeSBtYXBwaW5nIGludG8gdGhlIGZpZWxkIHZlY3RvciBvZiBlYWNoIGVsZW1lbnQKK3NwZWNpZmllZCBpbiBzZWNvbmQgYXJndW1lbnQuCisKK1RvIHJldHVybiBiYWNrIHRvIGl0cyBkZWZhdWx0IG1vZGUsIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwKK3BjaV9kaXNhYmxlX21zaXgoKSB0byB1bmRvIHRoZSBlZmZlY3Qgb2YgcGNpX2VuYWJsZV9tc2l4KCkuIE5vdGUgdGhhdAorYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBhbHdheXMgY2FsbCBmcmVlX2lycSgpIG9uIGFsbCBNU0ktWCB2ZWN0b3JzIGl0CitoYXMgZG9uZSByZXF1ZXN0X2lycSgpIG9uIGJlZm9yZSBjYWxsaW5nIHBjaV9kaXNhYmxlX21zaXgoKS4gRmFpbHVyZQordG8gZG8gc28gcmVzdWx0cyBhIEJVR19PTigpIGFuZCBhIGRldmljZSB3aWxsIGJlIGxlZnQgd2l0aCBNU0ktWAorZW5hYmxlZCBhbmQgbGVha3MgaXRzIHZlY3RvcnMuIE90aGVyd2lzZSwgdGhlIFBDSSBzdWJzeXN0ZW0gc3dpdGNoZXMgYQorZGV2aWNlIGZ1bmN0aW9uJ3MgaW50ZXJydXB0IG1vZGUgZnJvbSBNU0ktWCBtb2RlIHRvIGxlZ2FjeSBtb2RlIGFuZAorbWFya3MgYWxsIGFsbG9jYXRlZCBNU0ktWCB2ZWN0b3JzIGFzIHVudXNlZC4KKworT25jZSBiZWluZyBtYXJrZWQgYXMgdW51c2VkLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgUENJCitzdWJzeXN0ZW0gd2lsbCByZXNlcnZlIHRoZXNlIE1TSS1YIHZlY3RvcnMgZm9yIGEgZGV2aWNlLiBEZXBlbmRpbmcgb24KK3RoZSBhdmFpbGFiaWxpdHkgb2YgY3VycmVudCBQQ0kgdmVjdG9yIHJlc291cmNlcyBhbmQgdGhlIG51bWJlciBvZgorTVNJL01TSS1YIHJlcXVlc3RzIGZyb20gb3RoZXIgZHJpdmVycywgdGhlc2UgTVNJLVggdmVjdG9ycyBtYXkgYmUKK3JlLWFzc2lnbmVkLgorCitGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIFBDSSBzdWJzeXN0ZW0gcmUtYXNzaWduZWQgdGhlc2UgTVNJLVggdmVjdG9ycwordG8gb3RoZXIgZHJpdmVyLCBhIHJlcXVlc3QgdG8gc3dpdGNoaW5nIGJhY2sgdG8gTVNJLVggbW9kZSBtYXkgcmVzdWx0CitiZWluZyBhc3NpZ25lZCB3aXRoIGFub3RoZXIgc2V0IG9mIE1TSS1YIHZlY3RvcnMgb3IgYSBmYWlsdXJlIGlmIG5vCittb3JlIHZlY3RvcnMgYXJlIGF2YWlsYWJsZS4KKworNS40IEhhbmRsaW5nIGZ1bmN0aW9uIGltcGxlbWVudG5nIGJvdGggTVNJIGFuZCBNU0ktWCBjYXBhYmlsaXRpZXMKKworRm9yIHRoZSBjYXNlIHdoZXJlIGEgZnVuY3Rpb24gaW1wbGVtZW50cyBib3RoIE1TSSBhbmQgTVNJLVgKK2NhcGFiaWxpdGllcywgdGhlIFBDSSBzdWJzeXN0ZW0gZW5hYmxlcyBhIGRldmljZSB0byBydW4gZWl0aGVyIGluIE1TSQorbW9kZSBvciBNU0ktWCBtb2RlIGJ1dCBub3QgYm90aC4gQSBkZXZpY2UgZHJpdmVyIGRldGVybWluZXMgd2hldGhlciBpdAord2FudHMgTVNJIG9yIE1TSS1YIGVuYWJsZWQgb24gaXRzIGhhcmR3YXJlIGRldmljZS4gT25jZSBhIGRldmljZQorZHJpdmVyIHJlcXVlc3RzIGZvciBNU0ksIGZvciBleGFtcGxlLCBpdCBpcyBwcm9oaWJpdGVkIHRvIHJlcXVlc3QgZm9yCitNU0ktWDsgaW4gb3RoZXIgd29yZHMsIGEgZGV2aWNlIGRyaXZlciBpcyBub3QgcGVybWl0dGVkIHRvIHBpbmctcG9uZworYmV0d2VlbiBNU0kgbW9kIE1TSS1YIG1vZGUgZHVyaW5nIGEgcnVuLXRpbWUuCisKKzUuNSBIYXJkd2FyZSByZXF1aXJlbWVudHMgZm9yIE1TSS9NU0ktWCBzdXBwb3J0CitNU0kvTVNJLVggc3VwcG9ydCByZXF1aXJlcyBzdXBwb3J0IGZyb20gYm90aCBzeXN0ZW0gaGFyZHdhcmUgYW5kCitpbmRpdmlkdWFsIGhhcmR3YXJlIGRldmljZSBmdW5jdGlvbnMuCisKKzUuNS4xIFN5c3RlbSBoYXJkd2FyZSBzdXBwb3J0CitTaW5jZSB0aGUgdGFyZ2V0IG9mIE1TSSBhZGRyZXNzIGlzIHRoZSBsb2NhbCBBUElDIENQVSwgZW5hYmxpbmcKK01TSS9NU0ktWCBzdXBwb3J0IGluIExpbnV4IGtlcm5lbCBpcyBkZXBlbmRlbnQgb24gd2hldGhlciBleGlzdGluZworc3lzdGVtIGhhcmR3YXJlIHN1cHBvcnRzIGxvY2FsIEFQSUMuIFVzZXJzIHNob3VsZCB2ZXJpZnkgdGhlaXIKK3N5c3RlbSB3aGV0aGVyIGl0IHJ1bnMgd2hlbiBDT05GSUdfWDg2X0xPQ0FMX0FQSUM9eS4KKworSW4gU01QIGVudmlyb25tZW50LCBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgaXMgYXV0b21hdGljYWxseSBzZXQ7Citob3dldmVyLCBpbiBVUCBlbnZpcm9ubWVudCwgdXNlcnMgbXVzdCBtYW51YWxseSBzZXQKK0NPTkZJR19YODZfTE9DQUxfQVBJQy4gT25jZSBDT05GSUdfWDg2X0xPQ0FMX0FQSUM9eSwgc2V0dGluZworQ09ORklHX1BDSV9NU0kgZW5hYmxlcyB0aGUgVkVDVE9SIGJhc2VkIHNjaGVtZSBhbmQKK3RoZSBvcHRpb24gZm9yIE1TSS1jYXBhYmxlIGRldmljZSBkcml2ZXJzIHRvIHNlbGVjdGl2ZWx5IGVuYWJsZQorTVNJL01TSS1YLgorCitOb3RlIHRoYXQgQ09ORklHX1g4Nl9JT19BUElDIHNldHRpbmcgaXMgaXJyZWxldmFudCBiZWNhdXNlIE1TSS9NU0ktWAordmVjdG9yIGlzIGFsbG9jYXRlZCBuZXcgZHVyaW5nIHJ1bnRpbWUgYW5kIE1TSS9NU0ktWCBzdXBwb3J0IGRvZXMgbm90CitkZXBlbmQgb24gQklPUyBzdXBwb3J0LiBUaGlzIGtleSBpbmRlcGVuZGVuY3kgZW5hYmxlcyBNU0kvTVNJLVgKK3N1cHBvcnQgb24gZnV0dXJlIElPeEFQSUMgZnJlZSBwbGF0Zm9ybS4KKworNS41LjIgRGV2aWNlIGhhcmR3YXJlIHN1cHBvcnQKK1RoZSBoYXJkd2FyZSBkZXZpY2UgZnVuY3Rpb24gc3VwcG9ydHMgTVNJIGJ5IGluZGljYXRpbmcgdGhlCitNU0kvTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgb24gaXRzIFBDSSBjYXBhYmlsaXR5IGxpc3QuIEJ5CitkZWZhdWx0LCB0aGlzIGNhcGFiaWxpdHkgc3RydWN0dXJlIHdpbGwgbm90IGJlIGluaXRpYWxpemVkIGJ5Cit0aGUga2VybmVsIHRvIGVuYWJsZSBNU0kgZHVyaW5nIHRoZSBzeXN0ZW0gYm9vdC4gSW4gb3RoZXIgd29yZHMsCit0aGUgZGV2aWNlIGZ1bmN0aW9uIGlzIHJ1bm5pbmcgb24gaXRzIGRlZmF1bHQgcGluIGFzc2VydGlvbiBtb2RlLgorTm90ZSB0aGF0IGluIG1hbnkgY2FzZXMgdGhlIGhhcmR3YXJlIHN1cHBvcnRpbmcgTVNJIGhhdmUgYnVncywKK3doaWNoIG1heSByZXN1bHQgaW4gc3lzdGVtIGhhbmcuIFRoZSBzb2Z0d2FyZSBkcml2ZXIgb2Ygc3BlY2lmaWMKK01TSS1jYXBhYmxlIGhhcmR3YXJlIGlzIHJlc3BvbnNpYmxlIGZvciB3aGV0aGVyIGNhbGxpbmcKK3BjaV9lbmFibGVfbXNpIG9yIG5vdC4gQSByZXR1cm4gb2YgemVybyBpbmRpY2F0ZXMgdGhlIGtlcm5lbAorc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVzIHRoZSBNU0kvTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgb2YgdGhlCitkZXZpY2UgZnVudGlvbi4gVGhlIGRldmljZSBmdW5jdGlvbiBpcyBub3cgcnVubmluZyBvbiBNU0kvTVNJLVggbW9kZS4KKworNS42IEhvdyB0byB0ZWxsIHdoZXRoZXIgTVNJL01TSS1YIGlzIGVuYWJsZWQgb24gZGV2aWNlIGZ1bmN0aW9uCisKK0F0IHRoZSBkcml2ZXIgbGV2ZWwsIGEgcmV0dXJuIG9mIHplcm8gZnJvbSB0aGUgZnVuY3Rpb24gY2FsbCBvZgorcGNpX2VuYWJsZV9tc2koKS9wY2lfZW5hYmxlX21zaXgoKSBpbmRpY2F0ZXMgdG8gYSBkZXZpY2UgZHJpdmVyIHRoYXQKK2l0cyBkZXZpY2UgZnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5IGFuZCByZWFkeSB0byBydW4gaW4KK01TSS9NU0ktWCBtb2RlLgorCitBdCB0aGUgdXNlciBsZXZlbCwgdXNlcnMgY2FuIHVzZSBjb21tYW5kICdjYXQgL3Byb2MvaW50ZXJydXB0cycKK3RvIGRpc3BsYXkgdGhlIHZlY3RvciBhbGxvY2F0ZWQgZm9yIGEgZGV2aWNlIGFuZCBpdHMgaW50ZXJydXB0CitNU0kvTVNJLVggbW9kZSAoIlBDSSBNU0kiLyJQQ0kgTVNJWCIpLiBCZWxvdyBzaG93cyBiZWxvdyBNU0kgbW9kZSBpcworZW5hYmxlZCBvbiBhIFNDU0kgQWRhcHRlYyAzOTMyMEQgVWx0cmEzMjAuCisKKyAgICAgICAgICAgQ1BVMCAgICAgICBDUFUxCisgIDA6ICAgICAzMjQ2MzkgICAgICAgICAgMCAgICBJTy1BUElDLWVkZ2UgIHRpbWVyCisgIDE6ICAgICAgIDExODYgICAgICAgICAgMCAgICBJTy1BUElDLWVkZ2UgIGk4MDQyCisgIDI6ICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIGNhc2NhZGUKKyAxMjogICAgICAgMjc5NyAgICAgICAgICAwICAgIElPLUFQSUMtZWRnZSAgaTgwNDIKKyAxNDogICAgICAgNjU0MyAgICAgICAgICAwICAgIElPLUFQSUMtZWRnZSAgaWRlMAorIDE1OiAgICAgICAgICAxICAgICAgICAgIDAgICAgSU8tQVBJQy1lZGdlICBpZGUxCisxNjk6ICAgICAgICAgIDAgICAgICAgICAgMCAgIElPLUFQSUMtbGV2ZWwgIHVoY2ktaGNkCisxODU6ICAgICAgICAgIDAgICAgICAgICAgMCAgIElPLUFQSUMtbGV2ZWwgIHVoY2ktaGNkCisxOTM6ICAgICAgICAxMzggICAgICAgICAxMCAgICAgICAgIFBDSSBNU0kgIGFpYzc5eHgKKzIwMTogICAgICAgICAzMCAgICAgICAgICAwICAgICAgICAgUENJIE1TSSAgYWljNzl4eAorMjI1OiAgICAgICAgIDMwICAgICAgICAgIDAgICBJTy1BUElDLWxldmVsICBhaWM3eHh4CisyMzM6ICAgICAgICAgMzAgICAgICAgICAgMCAgIElPLUFQSUMtbGV2ZWwgIGFpYzd4eHgKK05NSTogICAgICAgICAgMCAgICAgICAgICAwCitMT0M6ICAgICAzMjQ1NTMgICAgIDMyNTA2OAorRVJSOiAgICAgICAgICAwCitNSVM6ICAgICAgICAgIDAKKworNi4gRkFRCisKK1ExLiBBcmUgdGhlcmUgYW55IGxpbWl0YXRpb25zIG9uIHVzaW5nIHRoZSBNU0k/CisKK0ExLiBJZiB0aGUgUENJIGRldmljZSBzdXBwb3J0cyBNU0kgYW5kIGNvbmZvcm1zIHRvIHRoZQorc3BlY2lmaWNhdGlvbiBhbmQgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHRoZSBBUElDIGxvY2FsIGJ1cywKK3RoZW4gdXNpbmcgTVNJIHNob3VsZCB3b3JrLgorCitRMi4gV2lsbCBpdCB3b3JrIG9uIGFsbCB0aGUgUGVudGl1bSBwcm9jZXNzb3JzIChQMywgUDQsIFhlb24sCitBTUQgcHJvY2Vzc29ycyk/IEluIFAzIElQSSdzIGFyZSB0cmFuc21pdHRlZCBvbiB0aGUgQVBJQyBsb2NhbAorYnVzIGFuZCBpbiBQNCBhbmQgWGVvbiB0aGV5IGFyZSB0cmFuc21pdHRlZCBvbiB0aGUgc3lzdGVtCitidXMuIEFyZSB0aGVyZSBhbnkgaW1wbGljYXRpb25zIHdpdGggdGhpcz8KKworQTIuIE1TSSBzdXBwb3J0IGVuYWJsZXMgYSBQQ0kgZGV2aWNlIHNlbmRpbmcgYW4gaW5ib3VuZAorbWVtb3J5IHdyaXRlICgweGZlZXh4eHh4IGFzIHRhcmdldCBhZGRyZXNzKSBvbiBpdHMgUENJIGJ1cworZGlyZWN0bHkgdG8gdGhlIEZTQi4gU2luY2UgdGhlIG1lc3NhZ2UgYWRkcmVzcyBoYXMgYQorcmVkaXJlY3Rpb24gaGludCBiaXQgY2xlYXJlZCwgaXQgc2hvdWxkIHdvcmsuCisKK1EzLiBUaGUgdGFyZ2V0IGFkZHJlc3MgMHhmZWV4eHh4eCB3aWxsIGJlIHRyYW5zbGF0ZWQgYnkgdGhlCitIb3N0IEJyaWRnZSBpbnRvIGFuIGludGVycnVwdCBtZXNzYWdlLiBBcmUgdGhlcmUgYW55CitsaW1pdGF0aW9ucyBvbiB0aGUgY2hpcHNldHMgc3VjaCBhcyBJbnRlbCA4eHgsIEludGVsIGU3eHh4LAorb3IgVklBPworCitBMy4gSWYgdGhlc2UgY2hpcHNldHMgc3VwcG9ydCBhbiBpbmJvdW5kIG1lbW9yeSB3cml0ZSB3aXRoCit0YXJnZXQgYWRkcmVzcyBzZXQgYXMgMHhmZWV4eHh4eCwgYXMgY29uZm9ybWVkIHRvIFBDSQorc3BlY2lmaWNhdGlvbiAyLjMgb3IgbGF0ZXN0LCB0aGVuIGl0IHNob3VsZCB3b3JrLgorCitRNC4gRnJvbSB0aGUgZHJpdmVyIHBvaW50IG9mIHZpZXcsIGlmIHRoZSBNU0kgaXMgbG9zdCBiZWNhdXNlCitvZiB0aGUgZXJyb3JzIG9jY3VyIGR1cmluZyBpbmJvdW5kIG1lbW9yeSB3cml0ZSwgdGhlbiBpdCBtYXkKK3dhaXQgZm9yIGV2ZXIuIElzIHRoZXJlIGEgbWVjaGFuaXNtIGZvciBpdCB0byByZWNvdmVyPworCitBNC4gU2luY2UgdGhlIHRhcmdldCBvZiB0aGUgdHJhbnNhY3Rpb24gaXMgYW4gaW5ib3VuZCBtZW1vcnkKK3dyaXRlLCBhbGwgdHJhbnNhY3Rpb24gdGVybWluYXRpb24gY29uZGl0aW9ucyAoUmV0cnksCitNYXN0ZXItQWJvcnQsIFRhcmdldC1BYm9ydCwgb3Igbm9ybWFsIGNvbXBsZXRpb24pIGFyZQorc3VwcG9ydGVkLiBBIGRldmljZSBzZW5kaW5nIGFuIE1TSSBtdXN0IGFiaWRlIGJ5IGFsbCB0aGUgUENJCitydWxlcyBhbmQgY29uZGl0aW9ucyByZWdhcmRpbmcgdGhhdCBpbmJvdW5kIG1lbW9yeSB3cml0ZS4gU28sCitpZiBhIHJldHJ5IGlzIHNpZ25hbGVkIGl0IG11c3QgcmV0cnksIGV0Yy4uLiBXZSBiZWxpZXZlIHRoYXQKK3RoZSByZWNvbW1lbmRhdGlvbiBmb3IgQWJvcnQgaXMgYWxzbyBhIHJldHJ5IChyZWZlciB0byBQQ0kKK3NwZWNpZmljYXRpb24gMi4zIG9yIGxhdGVzdCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01hbmFnZW1lbnRTdHlsZSBiL0RvY3VtZW50YXRpb24vTWFuYWdlbWVudFN0eWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYmViZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL01hbmFnZW1lbnRTdHlsZQpAQCAtMCwwICsxLDI3NiBAQAorCisgICAgICAgICAgICAgICAgTGludXgga2VybmVsIG1hbmFnZW1lbnQgc3R5bGUKKworVGhpcyBpcyBhIHNob3J0IGRvY3VtZW50IGRlc2NyaWJpbmcgdGhlIHByZWZlcnJlZCAob3IgbWFkZSB1cCwgZGVwZW5kaW5nCitvbiB3aG8geW91IGFzaykgbWFuYWdlbWVudCBzdHlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4gIEl0J3MgbWVhbnQgdG8KK21pcnJvciB0aGUgQ29kaW5nU3R5bGUgZG9jdW1lbnQgdG8gc29tZSBkZWdyZWUsIGFuZCBtYWlubHkgd3JpdHRlbiB0bworYXZvaWQgYW5zd2VyaW5nICgqKSB0aGUgc2FtZSAob3Igc2ltaWxhcikgcXVlc3Rpb25zIG92ZXIgYW5kIG92ZXIgYWdhaW4uIAorCitNYW5hZ2VtZW50IHN0eWxlIGlzIHZlcnkgcGVyc29uYWwgYW5kIG11Y2ggaGFyZGVyIHRvIHF1YW50aWZ5IHRoYW4KK3NpbXBsZSBjb2Rpbmcgc3R5bGUgcnVsZXMsIHNvIHRoaXMgZG9jdW1lbnQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbnl0aGluZwordG8gZG8gd2l0aCByZWFsaXR5LiAgSXQgc3RhcnRlZCBhcyBhIGxhcmssIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGF0IGl0CittaWdodCBub3QgYWN0dWFsbHkgYmUgdHJ1ZS4gWW91J2xsIGhhdmUgdG8gZGVjaWRlIGZvciB5b3Vyc2VsZi4KKworQnR3LCB3aGVuIHRhbGtpbmcgYWJvdXQgImtlcm5lbCBtYW5hZ2VyIiwgaXQncyBhbGwgYWJvdXQgdGhlIHRlY2huaWNhbAorbGVhZCBwZXJzb25zLCBub3QgdGhlIHBlb3BsZSB3aG8gZG8gdHJhZGl0aW9uYWwgbWFuYWdlbWVudCBpbnNpZGUKK2NvbXBhbmllcy4gIElmIHlvdSBzaWduIHB1cmNoYXNlIG9yZGVycyBvciB5b3UgaGF2ZSBhbnkgY2x1ZSBhYm91dCB0aGUKK2J1ZGdldCBvZiB5b3VyIGdyb3VwLCB5b3UncmUgYWxtb3N0IGNlcnRhaW5seSBub3QgYSBrZXJuZWwgbWFuYWdlci4gCitUaGVzZSBzdWdnZXN0aW9ucyBtYXkgb3IgbWF5IG5vdCBhcHBseSB0byB5b3UuIAorCitGaXJzdCBvZmYsIEknZCBzdWdnZXN0IGJ1eWluZyAiU2V2ZW4gSGFiaXRzIG9mIEhpZ2hseSBTdWNjZXNzZnVsCitQZW9wbGUiLCBhbmQgTk9UIHJlYWQgaXQuICBCdXJuIGl0LCBpdCdzIGEgZ3JlYXQgc3ltYm9saWMgZ2VzdHVyZS4gCisKKygqKSBUaGlzIGRvY3VtZW50IGRvZXMgc28gbm90IHNvIG11Y2ggYnkgYW5zd2VyaW5nIHRoZSBxdWVzdGlvbiwgYnV0IGJ5CittYWtpbmcgaXQgcGFpbmZ1bGx5IG9idmlvdXMgdG8gdGhlIHF1ZXN0aW9uZXIgdGhhdCB3ZSBkb24ndCBoYXZlIGEgY2x1ZQordG8gd2hhdCB0aGUgYW5zd2VyIGlzLiAKKworQW55d2F5LCBoZXJlIGdvZXM6CisKKworCQlDaGFwdGVyIDE6IERlY2lzaW9ucworCitFdmVyeWJvZHkgdGhpbmtzIG1hbmFnZXJzIG1ha2UgZGVjaXNpb25zLCBhbmQgdGhhdCBkZWNpc2lvbi1tYWtpbmcgaXMKK2ltcG9ydGFudC4gIFRoZSBiaWdnZXIgYW5kIG1vcmUgcGFpbmZ1bCB0aGUgZGVjaXNpb24sIHRoZSBiaWdnZXIgdGhlCittYW5hZ2VyIG11c3QgYmUgdG8gbWFrZSBpdC4gIFRoYXQncyB2ZXJ5IGRlZXAgYW5kIG9idmlvdXMsIGJ1dCBpdCdzIG5vdAorYWN0dWFsbHkgdHJ1ZS4gCisKK1RoZSBuYW1lIG9mIHRoZSBnYW1lIGlzIHRvIF9hdm9pZF8gaGF2aW5nIHRvIG1ha2UgYSBkZWNpc2lvbi4gIEluCitwYXJ0aWN1bGFyLCBpZiBzb21lYm9keSB0ZWxscyB5b3UgImNob29zZSAoYSkgb3IgKGIpLCB3ZSByZWFsbHkgbmVlZCB5b3UKK3RvIGRlY2lkZSBvbiB0aGlzIiwgeW91J3JlIGluIHRyb3VibGUgYXMgYSBtYW5hZ2VyLiAgVGhlIHBlb3BsZSB5b3UKK21hbmFnZSBoYWQgYmV0dGVyIGtub3cgdGhlIGRldGFpbHMgYmV0dGVyIHRoYW4geW91LCBzbyBpZiB0aGV5IGNvbWUgdG8KK3lvdSBmb3IgYSB0ZWNobmljYWwgZGVjaXNpb24sIHlvdSdyZSBzY3Jld2VkLiAgWW91J3JlIGNsZWFybHkgbm90Citjb21wZXRlbnQgdG8gbWFrZSB0aGF0IGRlY2lzaW9uIGZvciB0aGVtLiAKKworKENvcm9sbGFyeTppZiB0aGUgcGVvcGxlIHlvdSBtYW5hZ2UgZG9uJ3Qga25vdyB0aGUgZGV0YWlscyBiZXR0ZXIgdGhhbgoreW91LCB5b3UncmUgYWxzbyBzY3Jld2VkLCBhbHRob3VnaCBmb3IgYSB0b3RhbGx5IGRpZmZlcmVudCByZWFzb24uIAorTmFtZWx5IHRoYXQgeW91IGFyZSBpbiB0aGUgd3Jvbmcgam9iLCBhbmQgdGhhdCBfdGhleV8gc2hvdWxkIGJlIG1hbmFnaW5nCit5b3VyIGJyaWxsaWFuY2UgaW5zdGVhZCkuIAorCitTbyB0aGUgbmFtZSBvZiB0aGUgZ2FtZSBpcyB0byBfYXZvaWRfIGRlY2lzaW9ucywgYXQgbGVhc3QgdGhlIGJpZyBhbmQKK3BhaW5mdWwgb25lcy4gIE1ha2luZyBzbWFsbCBhbmQgbm9uLWNvbnNlcXVlbnRpYWwgZGVjaXNpb25zIGlzIGZpbmUsIGFuZAorbWFrZXMgeW91IGxvb2sgbGlrZSB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZywgc28gd2hhdCBhIGtlcm5lbCBtYW5hZ2VyCituZWVkcyB0byBkbyBpcyB0byB0dXJuIHRoZSBiaWcgYW5kIHBhaW5mdWwgb25lcyBpbnRvIHNtYWxsIHRoaW5ncyB3aGVyZQorbm9ib2R5IHJlYWxseSBjYXJlcy4gCisKK0l0IGhlbHBzIHRvIHJlYWxpemUgdGhhdCB0aGUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiBhIGJpZyBkZWNpc2lvbiBhbmQgYQorc21hbGwgb25lIGlzIHdoZXRoZXIgeW91IGNhbiBmaXggeW91ciBkZWNpc2lvbiBhZnRlcndhcmRzLiAgQW55IGRlY2lzaW9uCitjYW4gYmUgbWFkZSBzbWFsbCBieSBqdXN0IGFsd2F5cyBtYWtpbmcgc3VyZSB0aGF0IGlmIHlvdSB3ZXJlIHdyb25nIChhbmQKK3lvdSBfd2lsbF8gYmUgd3JvbmcpLCB5b3UgY2FuIGFsd2F5cyB1bmRvIHRoZSBkYW1hZ2UgbGF0ZXIgYnkKK2JhY2t0cmFja2luZy4gIFN1ZGRlbmx5LCB5b3UgZ2V0IHRvIGJlIGRvdWJseSBtYW5hZ2VyaWFsIGZvciBtYWtpbmcKK190d29fIGluY29uc2VxdWVudGlhbCBkZWNpc2lvbnMgLSB0aGUgd3Jvbmcgb25lIF9hbmRfIHRoZSByaWdodCBvbmUuIAorCitBbmQgcGVvcGxlIHdpbGwgZXZlbiBzZWUgdGhhdCBhcyB0cnVlIGxlYWRlcnNoaXAgKCpjb3VnaCogYnVsbHNoaXQKKypjb3VnaCopLgorCitUaHVzIHRoZSBrZXkgdG8gYXZvaWRpbmcgYmlnIGRlY2lzaW9ucyBiZWNvbWVzIHRvIGp1c3QgYXZvaWRpbmcgdG8gZG8KK3RoaW5ncyB0aGF0IGNhbid0IGJlIHVuZG9uZS4gIERvbid0IGdldCB1c2hlcmVkIGludG8gYSBjb3JuZXIgZnJvbSB3aGljaAoreW91IGNhbm5vdCBlc2NhcGUuICBBIGNvcm5lcmVkIHJhdCBtYXkgYmUgZGFuZ2Vyb3VzIC0gYSBjb3JuZXJlZCBtYW5hZ2VyCitpcyBqdXN0IHBpdGlmdWwuIAorCitJdCB0dXJucyBvdXQgdGhhdCBzaW5jZSBub2JvZHkgd291bGQgYmUgc3R1cGlkIGVub3VnaCB0byBldmVyIHJlYWxseSBsZXQKK2Ega2VybmVsIG1hbmFnZXIgaGF2ZSBodWdlIGZpc2NhbCByZXNwb25zaWJpbGl0eSBfYW55d2F5XywgaXQncyB1c3VhbGx5CitmYWlybHkgZWFzeSB0byBiYWNrdHJhY2suICBTaW5jZSB5b3UncmUgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gd2FzdGUKK2h1Z2UgYW1vdW50cyBvZiBtb25leSB0aGF0IHlvdSBtaWdodCBub3QgYmUgYWJsZSB0byByZXBheSwgdGhlIG9ubHkKK3RoaW5nIHlvdSBjYW4gYmFja3RyYWNrIG9uIGlzIGEgdGVjaG5pY2FsIGRlY2lzaW9uLCBhbmQgdGhlcmUKK2JhY2stdHJhY2tpbmcgaXMgdmVyeSBlYXN5OiBqdXN0IHRlbGwgZXZlcnlib2R5IHRoYXQgeW91IHdlcmUgYW4KK2luY29tcGV0ZW50IG5pbmNvbXBvb3AsIHNheSB5b3UncmUgc29ycnksIGFuZCB1bmRvIGFsbCB0aGUgd29ydGhsZXNzCit3b3JrIHlvdSBoYWQgcGVvcGxlIHdvcmsgb24gZm9yIHRoZSBsYXN0IHllYXIuICBTdWRkZW5seSB0aGUgZGVjaXNpb24KK3lvdSBtYWRlIGEgeWVhciBhZ28gd2Fzbid0IGEgYmlnIGRlY2lzaW9uIGFmdGVyIGFsbCwgc2luY2UgaXQgY291bGQgYmUKK2Vhc2lseSB1bmRvbmUuIAorCitJdCB0dXJucyBvdXQgdGhhdCBzb21lIHBlb3BsZSBoYXZlIHRyb3VibGUgd2l0aCB0aGlzIGFwcHJvYWNoLCBmb3IgdHdvCityZWFzb25zOgorIC0gYWRtaXR0aW5nIHlvdSB3ZXJlIGFuIGlkaW90IGlzIGhhcmRlciB0aGFuIGl0IGxvb2tzLiAgV2UgYWxsIGxpa2UgdG8KKyAgIG1haW50YWluIGFwcGVhcmFuY2VzLCBhbmQgY29taW5nIG91dCBpbiBwdWJsaWMgdG8gc2F5IHRoYXQgeW91IHdlcmUKKyAgIHdyb25nIGlzIHNvbWV0aW1lcyB2ZXJ5IGhhcmQgaW5kZWVkLiAKKyAtIGhhdmluZyBzb21lYm9keSB0ZWxsIHlvdSB0aGF0IHdoYXQgeW91IHdvcmtlZCBvbiBmb3IgdGhlIGxhc3QgeWVhcgorICAgd2Fzbid0IHdvcnRod2hpbGUgYWZ0ZXIgYWxsIGNhbiBiZSBoYXJkIG9uIHRoZSBwb29yIGxvd2x5IGVuZ2luZWVycworICAgdG9vLCBhbmQgd2hpbGUgdGhlIGFjdHVhbCBfd29ya18gd2FzIGVhc3kgZW5vdWdoIHRvIHVuZG8gYnkganVzdAorICAgZGVsZXRpbmcgaXQsIHlvdSBtYXkgaGF2ZSBpcnJldm9jYWJseSBsb3N0IHRoZSB0cnVzdCBvZiB0aGF0CisgICBlbmdpbmVlci4gIEFuZCByZW1lbWJlcjogImlycmV2b2NhYmxlIiB3YXMgd2hhdCB3ZSB0cmllZCB0byBhdm9pZCBpbgorICAgdGhlIGZpcnN0IHBsYWNlLCBhbmQgeW91ciBkZWNpc2lvbiBlbmRlZCB1cCBiZWluZyBhIGJpZyBvbmUgYWZ0ZXIKKyAgIGFsbC4gCisKK0hhcHBpbHksIGJvdGggb2YgdGhlc2UgcmVhc29ucyBjYW4gYmUgbWl0aWdhdGVkIGVmZmVjdGl2ZWx5IGJ5IGp1c3QKK2FkbWl0dGluZyB1cC1mcm9udCB0aGF0IHlvdSBkb24ndCBoYXZlIGEgZnJpZ2dpbicgY2x1ZSwgYW5kIHRlbGxpbmcKK3Blb3BsZSBhaGVhZCBvZiB0aGUgZmFjdCB0aGF0IHlvdXIgZGVjaXNpb24gaXMgcHVyZWx5IHByZWxpbWluYXJ5LCBhbmQKK21pZ2h0IGJlIHRoZSB3cm9uZyB0aGluZy4gIFlvdSBzaG91bGQgYWx3YXlzIHJlc2VydmUgdGhlIHJpZ2h0IHRvIGNoYW5nZQoreW91ciBtaW5kLCBhbmQgbWFrZSBwZW9wbGUgdmVyeSBfYXdhcmVfIG9mIHRoYXQuICBBbmQgaXQncyBtdWNoIGVhc2llcgordG8gYWRtaXQgdGhhdCB5b3UgYXJlIHN0dXBpZCB3aGVuIHlvdSBoYXZlbid0IF95ZXRfIGRvbmUgdGhlIHJlYWxseQorc3R1cGlkIHRoaW5nLgorCitUaGVuLCB3aGVuIGl0IHJlYWxseSBkb2VzIHR1cm4gb3V0IHRvIGJlIHN0dXBpZCwgcGVvcGxlIGp1c3Qgcm9sbCB0aGVpcgorZXllcyBhbmQgc2F5ICJPb3BzLCBoZSBkaWQgaXQgYWdhaW4iLiAgCisKK1RoaXMgcHJlZW1wdGl2ZSBhZG1pc3Npb24gb2YgaW5jb21wZXRlbmNlIG1pZ2h0IGFsc28gbWFrZSB0aGUgcGVvcGxlIHdobworYWN0dWFsbHkgZG8gdGhlIHdvcmsgYWxzbyB0aGluayB0d2ljZSBhYm91dCB3aGV0aGVyIGl0J3Mgd29ydGggZG9pbmcgb3IKK25vdC4gIEFmdGVyIGFsbCwgaWYgX3RoZXlfIGFyZW4ndCBjZXJ0YWluIHdoZXRoZXIgaXQncyBhIGdvb2QgaWRlYSwgeW91CitzdXJlIGFzIGhlbGwgc2hvdWxkbid0IGVuY291cmFnZSB0aGVtIGJ5IHByb21pc2luZyB0aGVtIHRoYXQgd2hhdCB0aGV5Cit3b3JrIG9uIHdpbGwgYmUgaW5jbHVkZWQuICBNYWtlIHRoZW0gYXQgbGVhc3QgdGhpbmsgdHdpY2UgYmVmb3JlIHRoZXkKK2VtYmFyayBvbiBhIGJpZyBlbmRlYXZvci4gCisKK1JlbWVtYmVyOiB0aGV5J2QgYmV0dGVyIGtub3cgbW9yZSBhYm91dCB0aGUgZGV0YWlscyB0aGFuIHlvdSBkbywgYW5kCit0aGV5IHVzdWFsbHkgYWxyZWFkeSB0aGluayB0aGV5IGhhdmUgdGhlIGFuc3dlciB0byBldmVyeXRoaW5nLiAgVGhlIGJlc3QKK3RoaW5nIHlvdSBjYW4gZG8gYXMgYSBtYW5hZ2VyIGlzIG5vdCB0byBpbnN0aWxsIGNvbmZpZGVuY2UsIGJ1dCByYXRoZXIgYQoraGVhbHRoeSBkb3NlIG9mIGNyaXRpY2FsIHRoaW5raW5nIG9uIHdoYXQgdGhleSBkby4gCisKK0J0dywgYW5vdGhlciB3YXkgdG8gYXZvaWQgYSBkZWNpc2lvbiBpcyB0byBwbGFpbnRpdmVseSBqdXN0IHdoaW5lICJjYW4ndAord2UganVzdCBkbyBib3RoPyIgYW5kIGxvb2sgcGl0aWZ1bC4gIFRydXN0IG1lLCBpdCB3b3Jrcy4gIElmIGl0J3Mgbm90CitjbGVhciB3aGljaCBhcHByb2FjaCBpcyBiZXR0ZXIsIHRoZXknbGwgZXZlbnR1YWxseSBmaWd1cmUgaXQgb3V0LiAgVGhlCithbnN3ZXIgbWF5IGVuZCB1cCBiZWluZyB0aGF0IGJvdGggdGVhbXMgZ2V0IHNvIGZydXN0cmF0ZWQgYnkgdGhlCitzaXR1YXRpb24gdGhhdCB0aGV5IGp1c3QgZ2l2ZSB1cC4gCisKK1RoYXQgbWF5IHNvdW5kIGxpa2UgYSBmYWlsdXJlLCBidXQgaXQncyB1c3VhbGx5IGEgc2lnbiB0aGF0IHRoZXJlIHdhcworc29tZXRoaW5nIHdyb25nIHdpdGggYm90aCBwcm9qZWN0cywgYW5kIHRoZSByZWFzb24gdGhlIHBlb3BsZSBpbnZvbHZlZAorY291bGRuJ3QgZGVjaWRlIHdhcyB0aGF0IHRoZXkgd2VyZSBib3RoIHdyb25nLiAgWW91IGVuZCB1cCBjb21pbmcgdXAKK3NtZWxsaW5nIGxpa2Ugcm9zZXMsIGFuZCB5b3UgYXZvaWRlZCB5ZXQgYW5vdGhlciBkZWNpc2lvbiB0aGF0IHlvdSBjb3VsZAoraGF2ZSBzY3Jld2VkIHVwIG9uLiAKKworCisJCUNoYXB0ZXIgMjogUGVvcGxlCisKK01vc3QgcGVvcGxlIGFyZSBpZGlvdHMsIGFuZCBiZWluZyBhIG1hbmFnZXIgbWVhbnMgeW91J2xsIGhhdmUgdG8gZGVhbAord2l0aCBpdCwgYW5kIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgdGhhdCBfdGhleV8gaGF2ZSB0byBkZWFsIHdpdGgKK195b3VfLiAKKworSXQgdHVybnMgb3V0IHRoYXQgd2hpbGUgaXQncyBlYXN5IHRvIHVuZG8gdGVjaG5pY2FsIG1pc3Rha2VzLCBpdCdzIG5vdAorYXMgZWFzeSB0byB1bmRvIHBlcnNvbmFsaXR5IGRpc29yZGVycy4gIFlvdSBqdXN0IGhhdmUgdG8gbGl2ZSB3aXRoCit0aGVpcnMgLSBhbmQgeW91cnMuIAorCitIb3dldmVyLCBpbiBvcmRlciB0byBwcmVwYXJlIHlvdXJzZWxmIGFzIGEga2VybmVsIG1hbmFnZXIsIGl0J3MgYmVzdCB0bworcmVtZW1iZXIgbm90IHRvIGJ1cm4gYW55IGJyaWRnZXMsIGJvbWIgYW55IGlubm9jZW50IHZpbGxhZ2Vycywgb3IKK2FsaWVuYXRlIHRvbyBtYW55IGtlcm5lbCBkZXZlbG9wZXJzLiBJdCB0dXJucyBvdXQgdGhhdCBhbGllbmF0aW5nIHBlb3BsZQoraXMgZmFpcmx5IGVhc3ksIGFuZCB1bi1hbGllbmF0aW5nIHRoZW0gaXMgaGFyZC4gVGh1cyAiYWxpZW5hdGluZyIKK2ltbWVkaWF0ZWx5IGZhbGxzIHVuZGVyIHRoZSBoZWFkaW5nIG9mICJub3QgcmV2ZXJzaWJsZSIsIGFuZCBiZWNvbWVzIGEKK25vLW5vIGFjY29yZGluZyB0byBDaGFwdGVyIDEuCisKK1RoZXJlJ3MganVzdCBhIGZldyBzaW1wbGUgcnVsZXMgaGVyZToKKyAoMSkgZG9uJ3QgY2FsbCBwZW9wbGUgZCpja2hlYWRzIChhdCBsZWFzdCBub3QgaW4gcHVibGljKQorICgyKSBsZWFybiBob3cgdG8gYXBvbG9naXplIHdoZW4geW91IGZvcmdvdCBydWxlICgxKQorCitUaGUgcHJvYmxlbSB3aXRoICMxIGlzIHRoYXQgaXQncyB2ZXJ5IGVhc3kgdG8gZG8sIHNpbmNlIHlvdSBjYW4gc2F5CisieW91J3JlIGEgZCpja2hlYWQiIGluIG1pbGxpb25zIG9mIGRpZmZlcmVudCB3YXlzICgqKSwgc29tZXRpbWVzIHdpdGhvdXQKK2V2ZW4gcmVhbGl6aW5nIGl0LCBhbmQgYWxtb3N0IGFsd2F5cyB3aXRoIGEgd2hpdGUtaG90IGNvbnZpY3Rpb24gdGhhdAoreW91IGFyZSByaWdodC4gCisKK0FuZCB0aGUgbW9yZSBjb252aW5jZWQgeW91IGFyZSB0aGF0IHlvdSBhcmUgcmlnaHQgKGFuZCBsZXQncyBmYWNlIGl0LAoreW91IGNhbiBjYWxsIGp1c3QgYWJvdXQgX2FueWJvZHlfIGEgZCpja2hlYWQsIGFuZCB5b3Ugb2Z0ZW4gX3dpbGxfIGJlCityaWdodCksIHRoZSBoYXJkZXIgaXQgZW5kcyB1cCBiZWluZyB0byBhcG9sb2dpemUgYWZ0ZXJ3YXJkcy4gCisKK1RvIHNvbHZlIHRoaXMgcHJvYmxlbSwgeW91IHJlYWxseSBvbmx5IGhhdmUgdHdvIG9wdGlvbnM6CisgLSBnZXQgcmVhbGx5IGdvb2QgYXQgYXBvbG9naWVzCisgLSBzcHJlYWQgdGhlICJsb3ZlIiBvdXQgc28gZXZlbmx5IHRoYXQgbm9ib2R5IHJlYWxseSBlbmRzIHVwIGZlZWxpbmcKKyAgIGxpa2UgdGhleSBnZXQgdW5mYWlybHkgdGFyZ2V0ZWQuICBNYWtlIGl0IGludmVudGl2ZSBlbm91Z2gsIGFuZCB0aGV5CisgICBtaWdodCBldmVuIGJlIGFtdXNlZC4gCisKK1RoZSBvcHRpb24gb2YgYmVpbmcgdW5mYWlsaW5nbHkgcG9saXRlIHJlYWxseSBkb2Vzbid0IGV4aXN0LiBOb2JvZHkgd2lsbAordHJ1c3Qgc29tZWJvZHkgd2hvIGlzIHNvIGNsZWFybHkgaGlkaW5nIGhpcyB0cnVlIGNoYXJhY3Rlci4KKworKCopIFBhdWwgU2ltb24gc2FuZyAiRmlmdHkgV2F5cyB0byBMb3NlIFlvdXIgTG92ZXIiLCBiZWNhdXNlIHF1aXRlCitmcmFua2x5LCAiQSBNaWxsaW9uIFdheXMgdG8gVGVsbCBhIERldmVsb3BlciBIZSBJcyBhIEQqY2toZWFkIiBkb2Vzbid0CitzY2FuIG5lYXJseSBhcyB3ZWxsLiAgQnV0IEknbSBzdXJlIGhlIHRob3VnaHQgYWJvdXQgaXQuIAorCisKKwkJQ2hhcHRlciAzOiBQZW9wbGUgSUkgLSB0aGUgR29vZCBLaW5kCisKK1doaWxlIGl0IHR1cm5zIG91dCB0aGF0IG1vc3QgcGVvcGxlIGFyZSBpZGlvdHMsIHRoZSBjb3JvbGxhcnkgdG8gdGhhdCBpcworc2FkbHkgdGhhdCB5b3UgYXJlIG9uZSB0b28sIGFuZCB0aGF0IHdoaWxlIHdlIGNhbiBhbGwgYmFzayBpbiB0aGUgc2VjdXJlCitrbm93bGVkZ2UgdGhhdCB3ZSdyZSBiZXR0ZXIgdGhhbiB0aGUgYXZlcmFnZSBwZXJzb24gKGxldCdzIGZhY2UgaXQsCitub2JvZHkgZXZlciBiZWxpZXZlcyB0aGF0IHRoZXkncmUgYXZlcmFnZSBvciBiZWxvdy1hdmVyYWdlKSwgd2Ugc2hvdWxkCithbHNvIGFkbWl0IHRoYXQgd2UncmUgbm90IHRoZSBzaGFycGVzdCBrbmlmZSBhcm91bmQsIGFuZCB0aGVyZSB3aWxsIGJlCitvdGhlciBwZW9wbGUgdGhhdCBhcmUgbGVzcyBvZiBhbiBpZGlvdCB0aGF0IHlvdSBhcmUuIAorCitTb21lIHBlb3BsZSByZWFjdCBiYWRseSB0byBzbWFydCBwZW9wbGUuICBPdGhlcnMgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlbS4gCisKK01ha2Ugc3VyZSB0aGF0IHlvdSwgYXMgYSBrZXJuZWwgbWFpbnRhaW5lciwgYXJlIGluIHRoZSBzZWNvbmQgZ3JvdXAuIAorU3VjayB1cCB0byB0aGVtLCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBwZW9wbGUgd2hvIHdpbGwgbWFrZSB5b3VyIGpvYgorZWFzaWVyLiBJbiBwYXJ0aWN1bGFyLCB0aGV5J2xsIGJlIGFibGUgdG8gbWFrZSB5b3VyIGRlY2lzaW9ucyBmb3IgeW91LAord2hpY2ggaXMgd2hhdCB0aGUgZ2FtZSBpcyBhbGwgYWJvdXQuCisKK1NvIHdoZW4geW91IGZpbmQgc29tZWJvZHkgc21hcnRlciB0aGFuIHlvdSBhcmUsIGp1c3QgY29hc3QgYWxvbmcuICBZb3VyCittYW5hZ2VtZW50IHJlc3BvbnNpYmlsaXRpZXMgbGFyZ2VseSBiZWNvbWUgb25lcyBvZiBzYXlpbmcgIlNvdW5kcyBsaWtlIGEKK2dvb2QgaWRlYSAtIGdvIHdpbGQiLCBvciAiVGhhdCBzb3VuZHMgZ29vZCwgYnV0IHdoYXQgYWJvdXQgeHh4PyIuICBUaGUKK3NlY29uZCB2ZXJzaW9uIGluIHBhcnRpY3VsYXIgaXMgYSBncmVhdCB3YXkgdG8gZWl0aGVyIGxlYXJuIHNvbWV0aGluZworbmV3IGFib3V0ICJ4eHgiIG9yIHNlZW0gX2V4dHJhXyBtYW5hZ2VyaWFsIGJ5IHBvaW50aW5nIG91dCBzb21ldGhpbmcgdGhlCitzbWFydGVyIHBlcnNvbiBoYWRuJ3QgdGhvdWdodCBhYm91dC4gIEluIGVpdGhlciBjYXNlLCB5b3Ugd2luLgorCitPbmUgdGhpbmcgdG8gbG9vayBvdXQgZm9yIGlzIHRvIHJlYWxpemUgdGhhdCBncmVhdG5lc3MgaW4gb25lIGFyZWEgZG9lcworbm90IG5lY2Vzc2FyaWx5IHRyYW5zbGF0ZSB0byBvdGhlciBhcmVhcy4gIFNvIHlvdSBtaWdodCBwcm9kIHBlb3BsZSBpbgorc3BlY2lmaWMgZGlyZWN0aW9ucywgYnV0IGxldCdzIGZhY2UgaXQsIHRoZXkgbWlnaHQgYmUgZ29vZCBhdCB3aGF0IHRoZXkKK2RvLCBhbmQgc3VjayBhdCBldmVyeXRoaW5nIGVsc2UuICBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgcGVvcGxlIHRlbmQgdG8KK25hdHVyYWxseSBncmF2aXRhdGUgYmFjayB0byB3aGF0IHRoZXkgYXJlIGdvb2QgYXQsIHNvIGl0J3Mgbm90IGxpa2UgeW91CithcmUgZG9pbmcgc29tZXRoaW5nIGlycmV2ZXJzaWJsZSB3aGVuIHlvdSBfZG9fIHByb2QgdGhlbSBpbiBzb21lCitkaXJlY3Rpb24sIGp1c3QgZG9uJ3QgcHVzaCB0b28gaGFyZC4KKworCisJCUNoYXB0ZXIgNDogUGxhY2luZyBibGFtZQorCitUaGluZ3Mgd2lsbCBnbyB3cm9uZywgYW5kIHBlb3BsZSB3YW50IHNvbWVib2R5IHRvIGJsYW1lLiBUYWcsIHlvdSdyZSBpdC4KKworSXQncyBub3QgYWN0dWFsbHkgdGhhdCBoYXJkIHRvIGFjY2VwdCB0aGUgYmxhbWUsIGVzcGVjaWFsbHkgaWYgcGVvcGxlCitraW5kIG9mIHJlYWxpemUgdGhhdCBpdCB3YXNuJ3QgX2FsbF8geW91ciBmYXVsdC4gIFdoaWNoIGJyaW5ncyB1cyB0byB0aGUKK2Jlc3Qgd2F5IG9mIHRha2luZyB0aGUgYmxhbWU6IGRvIGl0IGZvciBhbm90aGVyIGd1eS4gWW91J2xsIGZlZWwgZ29vZAorZm9yIHRha2luZyB0aGUgZmFsbCwgaGUnbGwgZmVlbCBnb29kIGFib3V0IG5vdCBnZXR0aW5nIGJsYW1lZCwgYW5kIHRoZQorZ3V5IHdobyBsb3N0IGhpcyB3aG9sZSAzNkdCIHBvcm4tY29sbGVjdGlvbiBiZWNhdXNlIG9mIHlvdXIgaW5jb21wZXRlbmNlCit3aWxsIGdydWRnaW5nbHkgYWRtaXQgdGhhdCB5b3UgYXQgbGVhc3QgZGlkbid0IHRyeSB0byB3ZWFzZWwgb3V0IG9mIGl0LgorCitUaGVuIG1ha2UgdGhlIGRldmVsb3BlciB3aG8gcmVhbGx5IHNjcmV3ZWQgdXAgKGlmIHlvdSBjYW4gZmluZCBoaW0pIGtub3cKK19pbl9wcml2YXRlXyB0aGF0IGhlIHNjcmV3ZWQgdXAuICBOb3QganVzdCBzbyBoZSBjYW4gYXZvaWQgaXQgaW4gdGhlCitmdXR1cmUsIGJ1dCBzbyB0aGF0IGhlIGtub3dzIGhlIG93ZXMgeW91IG9uZS4gIEFuZCwgcGVyaGFwcyBldmVuIG1vcmUKK2ltcG9ydGFudGx5LCBoZSdzIGFsc28gbGlrZWx5IHRoZSBwZXJzb24gd2hvIGNhbiBmaXggaXQuICBCZWNhdXNlLCBsZXQncworZmFjZSBpdCwgaXQgc3VyZSBhaW4ndCB5b3UuIAorCitUYWtpbmcgdGhlIGJsYW1lIGlzIGFsc28gd2h5IHlvdSBnZXQgdG8gYmUgbWFuYWdlciBpbiB0aGUgZmlyc3QgcGxhY2UuIAorSXQncyBwYXJ0IG9mIHdoYXQgbWFrZXMgcGVvcGxlIHRydXN0IHlvdSwgYW5kIGFsbG93IHlvdSB0aGUgcG90ZW50aWFsCitnbG9yeSwgYmVjYXVzZSB5b3UncmUgdGhlIG9uZSB3aG8gZ2V0cyB0byBzYXkgIkkgc2NyZXdlZCB1cCIuICBBbmQgaWYKK3lvdSd2ZSBmb2xsb3dlZCB0aGUgcHJldmlvdXMgcnVsZXMsIHlvdSdsbCBiZSBwcmV0dHkgZ29vZCBhdCBzYXlpbmcgdGhhdAorYnkgbm93LiAKKworCisJCUNoYXB0ZXIgNTogVGhpbmdzIHRvIGF2b2lkCisKK1RoZXJlJ3Mgb25lIHRoaW5nIHBlb3BsZSBoYXRlIGV2ZW4gbW9yZSB0aGFuIGJlaW5nIGNhbGxlZCAiZCpja2hlYWQiLAorYW5kIHRoYXQgaXMgYmVpbmcgY2FsbGVkIGEgImQqY2toZWFkIiBpbiBhIHNhbmN0aW1vbmlvdXMgdm9pY2UuICBUaGUKK2ZpcnN0IHlvdSBjYW4gYXBvbG9naXplIGZvciwgdGhlIHNlY29uZCBvbmUgeW91IHdvbid0IHJlYWxseSBnZXQgdGhlCitjaGFuY2UuICBUaGV5IGxpa2VseSB3aWxsIG5vIGxvbmdlciBiZSBsaXN0ZW5pbmcgZXZlbiBpZiB5b3Ugb3RoZXJ3aXNlCitkbyBhIGdvb2Qgam9iLiAKKworV2UgYWxsIHRoaW5rIHdlJ3JlIGJldHRlciB0aGFuIGFueWJvZHkgZWxzZSwgd2hpY2ggbWVhbnMgdGhhdCB3aGVuCitzb21lYm9keSBlbHNlIHB1dHMgb24gYWlycywgaXQgX3JlYWxseV8gcnVicyB1cyB0aGUgd3Jvbmcgd2F5LiAgWW91IG1heQorYmUgbW9yYWxseSBhbmQgaW50ZWxsZWN0dWFsbHkgc3VwZXJpb3IgdG8gZXZlcnlib2R5IGFyb3VuZCB5b3UsIGJ1dAorZG9uJ3QgdHJ5IHRvIG1ha2UgaXQgdG9vIG9idmlvdXMgdW5sZXNzIHlvdSByZWFsbHkgX2ludGVuZF8gdG8gaXJyaXRhdGUKK3NvbWVib2R5ICgqKS4gCisKK1NpbWlsYXJseSwgZG9uJ3QgYmUgdG9vIHBvbGl0ZSBvciBzdWJ0bGUgYWJvdXQgdGhpbmdzLiBQb2xpdGVuZXNzIGVhc2lseQorZW5kcyB1cCBnb2luZyBvdmVyYm9hcmQgYW5kIGhpZGluZyB0aGUgcHJvYmxlbSwgYW5kIGFzIHRoZXkgc2F5LCAiT24gdGhlCitpbnRlcm5ldCwgbm9ib2R5IGNhbiBoZWFyIHlvdSBiZWluZyBzdWJ0bGUiLiBVc2UgYSBiaWcgYmx1bnQgb2JqZWN0IHRvCitoYW1tZXIgdGhlIHBvaW50IGluLCBiZWNhdXNlIHlvdSBjYW4ndCByZWFsbHkgZGVwZW5kIG9uIHBlb3BsZSBnZXR0aW5nCit5b3VyIHBvaW50IG90aGVyd2lzZS4KKworU29tZSBodW1vciBjYW4gaGVscCBwYWQgYm90aCB0aGUgYmx1bnRuZXNzIGFuZCB0aGUgbW9yYWxpemluZy4gIEdvaW5nCitvdmVyYm9hcmQgdG8gdGhlIHBvaW50IG9mIGJlaW5nIHJpZGljdWxvdXMgY2FuIGRyaXZlIGEgcG9pbnQgaG9tZQord2l0aG91dCBtYWtpbmcgaXQgcGFpbmZ1bCB0byB0aGUgcmVjaXBpZW50LCB3aG8ganVzdCB0aGlua3MgeW91J3JlIGJlaW5nCitzaWxseS4gIEl0IGNhbiB0aHVzIGhlbHAgZ2V0IHRocm91Z2ggdGhlIHBlcnNvbmFsIG1lbnRhbCBibG9jayB3ZSBhbGwKK2hhdmUgYWJvdXQgY3JpdGljaXNtLiAKKworKCopIEhpbnQ6IGludGVybmV0IG5ld3Nncm91cHMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciB3b3JrCithcmUgZ3JlYXQgd2F5cyB0byB0YWtlIG91dCB5b3VyIGZydXN0cmF0aW9ucyBhdCBvdGhlciBwZW9wbGUuIFdyaXRlCitpbnN1bHRpbmcgcG9zdHMgd2l0aCBhIHNuZWVyIGp1c3QgdG8gZ2V0IGludG8gYSBnb29kIGZsYW1lIGV2ZXJ5IG9uY2UgaW4KK2Egd2hpbGUsIGFuZCB5b3UnbGwgZmVlbCBjbGVhbnNlZC4gSnVzdCBkb24ndCBjcmFwIHRvbyBjbG9zZSB0byBob21lLgorCisKKwkJQ2hhcHRlciA2OiBXaHkgbWU/CisKK1NpbmNlIHlvdXIgbWFpbiByZXNwb25zaWJpbGl0eSBzZWVtcyB0byBiZSB0byB0YWtlIHRoZSBibGFtZSBmb3Igb3RoZXIKK3Blb3BsZXMgbWlzdGFrZXMsIGFuZCBtYWtlIGl0IHBhaW5mdWxseSBvYnZpb3VzIHRvIGV2ZXJ5Ym9keSBlbHNlIHRoYXQKK3lvdSdyZSBpbmNvbXBldGVudCwgdGhlIG9idmlvdXMgcXVlc3Rpb24gYmVjb21lcyBvbmUgb2Ygd2h5IGRvIGl0IGluIHRoZQorZmlyc3QgcGxhY2U/CisKK0ZpcnN0IG9mZiwgd2hpbGUgeW91IG1heSBvciBtYXkgbm90IGdldCBzY3JlYW1pbmcgdGVlbmFnZSBnaXJscyAob3IKK2JveXMsIGxldCdzIG5vdCBiZSBqdWRnbWVudGFsIG9yIHNleGlzdCBoZXJlKSBrbm9ja2luZyBvbiB5b3VyIGRyZXNzaW5nCityb29tIGRvb3IsIHlvdSBfd2lsbF8gZ2V0IGFuIGltbWVuc2UgZmVlbGluZyBvZiBwZXJzb25hbCBhY2NvbXBsaXNobWVudAorZm9yIGJlaW5nICJpbiBjaGFyZ2UiLiAgTmV2ZXIgbWluZCB0aGUgZmFjdCB0aGF0IHlvdSdyZSByZWFsbHkgbGVhZGluZworYnkgdHJ5aW5nIHRvIGtlZXAgdXAgd2l0aCBldmVyeWJvZHkgZWxzZSBhbmQgcnVubmluZyBhZnRlciB0aGVtIGFzIGZhc3QKK2FzIHlvdSBjYW4uICBFdmVyeWJvZHkgd2lsbCBzdGlsbCB0aGluayB5b3UncmUgdGhlIHBlcnNvbiBpbiBjaGFyZ2UuIAorCitJdCdzIGEgZ3JlYXQgam9iIGlmIHlvdSBjYW4gaGFjayBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUENJRUJVUy1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSUVCVVMtSE9XVE8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5M2Y0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1BDSUVCVVMtSE9XVE8udHh0CkBAIC0wLDAgKzEsMjE3IEBACisJCVRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXIgR3VpZGUgSE9XVE8KKwlUb20gTCBOZ3V5ZW4gdG9tLmwubmd1eWVuQGludGVsLmNvbQorCQkJMTEvMDMvMjAwNAorCisxLiBBYm91dCB0aGlzIGd1aWRlCisKK1RoaXMgZ3VpZGUgZGVzY3JpYmVzIHRoZSBiYXNpY3Mgb2YgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlcgorYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlbmFibGUgdGhlIHNlcnZpY2UgZHJpdmVycyB0bworcmVnaXN0ZXIvdW5yZWdpc3RlciB3aXRoIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXIuCisKKzIuIENvcHlyaWdodCAyMDA0IEludGVsIENvcnBvcmF0aW9uCisKKzMuIFdoYXQgaXMgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlcgorCitBIFBDSSBFeHByZXNzIFBvcnQgaXMgYSBsb2dpY2FsIFBDSS1QQ0kgQnJpZGdlIHN0cnVjdHVyZS4gVGhlcmUKK2FyZSB0d28gdHlwZXMgb2YgUENJIEV4cHJlc3MgUG9ydDogdGhlIFJvb3QgUG9ydCBhbmQgdGhlIFN3aXRjaAorUG9ydC4gVGhlIFJvb3QgUG9ydCBvcmlnaW5hdGVzIGEgUENJIEV4cHJlc3MgbGluayBmcm9tIGEgUENJIEV4cHJlc3MKK1Jvb3QgQ29tcGxleCBhbmQgdGhlIFN3aXRjaCBQb3J0IGNvbm5lY3RzIFBDSSBFeHByZXNzIGxpbmtzIHRvCitpbnRlcm5hbCBsb2dpY2FsIFBDSSBidXNlcy4gVGhlIFN3aXRjaCBQb3J0LCB3aGljaCBoYXMgaXRzIHNlY29uZGFyeQorYnVzIHJlcHJlc2VudGluZyB0aGUgc3dpdGNoJ3MgaW50ZXJuYWwgcm91dGluZyBsb2dpYywgaXMgY2FsbGVkIHRoZQorc3dpdGNoJ3MgVXBzdHJlYW0gUG9ydC4gVGhlIHN3aXRjaCdzIERvd25zdHJlYW0gUG9ydCBpcyBicmlkZ2luZyBmcm9tCitzd2l0Y2gncyBpbnRlcm5hbCByb3V0aW5nIGJ1cyB0byBhIGJ1cyByZXByZXNlbnRpbmcgdGhlIGRvd25zdHJlYW0KK1BDSSBFeHByZXNzIGxpbmsgZnJvbSB0aGUgUENJIEV4cHJlc3MgU3dpdGNoLgorCitBIFBDSSBFeHByZXNzIFBvcnQgY2FuIHByb3ZpZGUgdXAgdG8gZm91ciBkaXN0aW5jdCBmdW5jdGlvbnMsCityZWZlcnJlZCB0byBpbiB0aGlzIGRvY3VtZW50IGFzIHNlcnZpY2VzLCBkZXBlbmRpbmcgb24gaXRzIHBvcnQgdHlwZS4KK1BDSSBFeHByZXNzIFBvcnQncyBzZXJ2aWNlcyBpbmNsdWRlIG5hdGl2ZSBob3RwbHVnIHN1cHBvcnQgKEhQKSwKK3Bvd2VyIG1hbmFnZW1lbnQgZXZlbnQgc3VwcG9ydCAoUE1FKSwgYWR2YW5jZWQgZXJyb3IgcmVwb3J0aW5nCitzdXBwb3J0IChBRVIpLCBhbmQgdmlydHVhbCBjaGFubmVsIHN1cHBvcnQgKFZDKS4gVGhlc2Ugc2VydmljZXMgbWF5CitiZSBoYW5kbGVkIGJ5IGEgc2luZ2xlIGNvbXBsZXggZHJpdmVyIG9yIGJlIGluZGl2aWR1YWxseSBkaXN0cmlidXRlZAorYW5kIGhhbmRsZWQgYnkgY29ycmVzcG9uZGluZyBzZXJ2aWNlIGRyaXZlcnMuCisKKzQuIFdoeSB1c2UgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlcj8KKworSW4gZXhpc3RpbmcgTGludXgga2VybmVscywgdGhlIExpbnV4IERldmljZSBEcml2ZXIgTW9kZWwgYWxsb3dzIGEKK3BoeXNpY2FsIGRldmljZSB0byBiZSBoYW5kbGVkIGJ5IG9ubHkgYSBzaW5nbGUgZHJpdmVyLiBUaGUgUENJCitFeHByZXNzIFBvcnQgaXMgYSBQQ0ktUENJIEJyaWRnZSBkZXZpY2Ugd2l0aCBtdWx0aXBsZSBkaXN0aW5jdAorc2VydmljZXMuIFRvIG1haW50YWluIGEgY2xlYW4gYW5kIHNpbXBsZSBzb2x1dGlvbiBlYWNoIHNlcnZpY2UKK21heSBoYXZlIGl0cyBvd24gc29mdHdhcmUgc2VydmljZSBkcml2ZXIuIEluIHRoaXMgY2FzZSBzZXZlcmFsCitzZXJ2aWNlIGRyaXZlcnMgd2lsbCBjb21wZXRlIGZvciBhIHNpbmdsZSBQQ0ktUENJIEJyaWRnZSBkZXZpY2UuCitGb3IgZXhhbXBsZSwgaWYgdGhlIFBDSSBFeHByZXNzIFJvb3QgUG9ydCBuYXRpdmUgaG90cGx1ZyBzZXJ2aWNlCitkcml2ZXIgaXMgbG9hZGVkIGZpcnN0LCBpdCBjbGFpbXMgYSBQQ0ktUENJIEJyaWRnZSBSb290IFBvcnQuIFRoZQora2VybmVsIHRoZXJlZm9yZSBkb2VzIG5vdCBsb2FkIG90aGVyIHNlcnZpY2UgZHJpdmVycyBmb3IgdGhhdCBSb290CitQb3J0LiBJbiBvdGhlciB3b3JkcywgaXQgaXMgaW1wb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIHNlcnZpY2UKK2RyaXZlcnMgbG9hZCBhbmQgcnVuIG9uIGEgUENJLVBDSSBCcmlkZ2UgZGV2aWNlIHNpbXVsdGFuZW91c2x5Cit1c2luZyB0aGUgY3VycmVudCBkcml2ZXIgbW9kZWwuCisKK1RvIGVuYWJsZSBtdWx0aXBsZSBzZXJ2aWNlIGRyaXZlcnMgcnVubmluZyBzaW11bHRhbmVvdXNseSByZXF1aXJlcworaGF2aW5nIGEgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyLCB3aGljaCBtYW5hZ2VzIGFsbCBwb3B1bGF0ZWQKK1BDSSBFeHByZXNzIFBvcnRzIGFuZCBkaXN0cmlidXRlcyBhbGwgcHJvdmlkZWQgc2VydmljZSByZXF1ZXN0cwordG8gdGhlIGNvcnJlc3BvbmRpbmcgc2VydmljZSBkcml2ZXJzIGFzIHJlcXVpcmVkLiBTb21lIGtleQorYWR2YW50YWdlcyBvZiB1c2luZyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIGFyZSBsaXN0ZWQgYmVsb3c6CisKKwktIEFsbG93IG11bHRpcGxlIHNlcnZpY2UgZHJpdmVycyB0byBydW4gc2ltdWx0YW5lb3VzbHkgb24KKwkgIGEgUENJLVBDSSBCcmlkZ2UgUG9ydCBkZXZpY2UuCisKKwktIEFsbG93IHNlcnZpY2UgZHJpdmVycyBpbXBsZW1lbnRlZCBpbiBhbiBpbmRlcGVuZGVudAorCSAgc3RhZ2VkIGFwcHJvYWNoLgorCQorCS0gQWxsb3cgb25lIHNlcnZpY2UgZHJpdmVyIHRvIHJ1biBvbiBtdWx0aXBsZSBQQ0ktUENJIEJyaWRnZQorCSAgUG9ydCBkZXZpY2VzLiAKKworCS0gTWFuYWdlIGFuZCBkaXN0cmlidXRlIHJlc291cmNlcyBvZiBhIFBDSS1QQ0kgQnJpZGdlIFBvcnQKKwkgIGRldmljZSB0byByZXF1ZXN0ZWQgc2VydmljZSBkcml2ZXJzLgorCis1LiBDb25maWd1cmluZyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyIHZzLiBTZXJ2aWNlIERyaXZlcnMKKworNS4xIEluY2x1ZGluZyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyIFN1cHBvcnQgaW50byB0aGUgS2VybmVsCisKK0luY2x1ZGluZyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIGRlcGVuZHMgb24gd2hldGhlciB0aGUgUENJCitFeHByZXNzIHN1cHBvcnQgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoZSBrZXJuZWwgd2lsbAorYXV0b21hdGljYWxseSBpbmNsdWRlIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgYXMgYSBrZXJuZWwKK2RyaXZlciB3aGVuIHRoZSBQQ0kgRXhwcmVzcyBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4KKworNS4yIEVuYWJsaW5nIFNlcnZpY2UgRHJpdmVyIFN1cHBvcnQKKworUENJIGRldmljZSBkcml2ZXJzIGFyZSBpbXBsZW1lbnRlZCBiYXNlZCBvbiBMaW51eCBEZXZpY2UgRHJpdmVyIE1vZGVsLgorQWxsIHNlcnZpY2UgZHJpdmVycyBhcmUgUENJIGRldmljZSBkcml2ZXJzLiBBcyBkaXNjdXNzZWQgYWJvdmUsIGl0IGlzCitpbXBvc3NpYmxlIHRvIGxvYWQgYW55IHNlcnZpY2UgZHJpdmVyIG9uY2UgdGhlIGtlcm5lbCBoYXMgbG9hZGVkIHRoZQorUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyLiBUbyBtZWV0IHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXIKK01vZGVsIHJlcXVpcmVzIHNvbWUgbWluaW1hbCBjaGFuZ2VzIG9uIGV4aXN0aW5nIHNlcnZpY2UgZHJpdmVycyB0aGF0CitpbXBvc2VzIG5vIGltcGFjdCBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZiBleGlzdGluZyBzZXJ2aWNlIGRyaXZlcnMuCisKK0Egc2VydmljZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gdXNlIHRoZSB0d28gQVBJcyBzaG93biBiZWxvdyB0bworcmVnaXN0ZXIgaXRzIHNlcnZpY2Ugd2l0aCB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIChzZWUgCitzZWN0aW9uIDUuMi4xICYgNS4yLjIpLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCBhIHNlcnZpY2UgZHJpdmVyCitpbml0aWFsaXplcyB0aGUgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyIGRhdGEgc3RydWN0dXJlLCBpbmNsdWRlZCBpbgoraGVhZGVyIGZpbGUgL2luY2x1ZGUvbGludXgvcGNpZXBvcnRfaWYuaCwgYmVmb3JlIGNhbGxpbmcgdGhlc2UgQVBJcy4KK0ZhaWx1cmUgdG8gZG8gc28gd2lsbCByZXN1bHQgYW4gaWRlbnRpdHkgbWlzbWF0Y2gsIHdoaWNoIHByZXZlbnRzCit0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIGZyb20gbG9hZGluZyBhIHNlcnZpY2UgZHJpdmVyLgorCis1LjIuMSBwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlcgorCitpbnQgcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqbmV3KQorCitUaGlzIEFQSSByZXBsYWNlcyB0aGUgTGludXggRHJpdmVyIE1vZGVsJ3MgcGNpX21vZHVsZV9pbml0IEFQSS4gQQorc2VydmljZSBkcml2ZXIgc2hvdWxkIGFsd2F5cyBjYWxscyBwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlciBhdAorbW9kdWxlIGluaXQuIE5vdGUgdGhhdCBhZnRlciBzZXJ2aWNlIGRyaXZlciBiZWluZyBsb2FkZWQsIGNhbGxzCitzdWNoIGFzIHBjaV9lbmFibGVfZGV2aWNlKGRldikgYW5kIHBjaV9zZXRfbWFzdGVyKGRldikgYXJlIG5vIGxvbmdlcgorbmVjZXNzYXJ5IHNpbmNlIHRoZXNlIGNhbGxzIGFyZSBleGVjdXRlZCBieSB0aGUgUENJIFBvcnQgQnVzIGRyaXZlci4KKworNS4yLjIgcGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3RlcgorCit2b2lkIHBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqbmV3KQorCitwY2llX3BvcnRfc2VydmljZV91bnJlZ2lzdGVyIHJlcGxhY2VzIHRoZSBMaW51eCBEcml2ZXIgTW9kZWwncworcGNpX3VucmVnaXN0ZXJfZHJpdmVyLiBJdCdzIGFsd2F5cyBjYWxsZWQgYnkgc2VydmljZSBkcml2ZXIgd2hlbiBhCittb2R1bGUgZXhpdHMuCisKKzUuMi4zIFNhbXBsZSBDb2RlCisKK0JlbG93IGlzIHNhbXBsZSBzZXJ2aWNlIGRyaXZlciBjb2RlIHRvIGluaXRpYWxpemUgdGhlIHBvcnQgc2VydmljZQorZHJpdmVyIGRhdGEgc3RydWN0dXJlLgorCitzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkIHNlcnZpY2VfaWRbXSA9IHsgeworCS52ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCS5kZXZpY2UgPSBQQ0lfQU5ZX0lELAorCS5wb3J0X3R5cGUgPSBQQ0lFX1JDX1BPUlQsCisJLnNlcnZpY2VfdHlwZSA9IFBDSUVfUE9SVF9TRVJWSUNFX0FFUiwKKwl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciByb290X2FlcmRydiA9IHsKKwkubmFtZQkJPSAoY2hhciAqKWRldmljZV9uYW1lLAorCS5pZF90YWJsZQk9ICZzZXJ2aWNlX2lkWzBdLAorCisJLnByb2JlCQk9IGFlcmRydl9sb2FkLAorCS5yZW1vdmUJCT0gYWVyZHJ2X3VubG9hZCwKKworCS5zdXNwZW5kCT0gYWVyZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZXJkcnZfcmVzdW1lLAorfTsKKworQmVsb3cgaXMgYSBzYW1wbGUgY29kZSBmb3IgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyBhIHNlcnZpY2UKK2RyaXZlci4KKworc3RhdGljIGludCBfX2luaXQgYWVyZHJ2X3NlcnZpY2VfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSAwOworCQorCXJldHZhbCA9IHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKCZyb290X2FlcmRydik7CisJaWYgKCFyZXR2YWwpIHsKKwkJLyoKKwkJICogRklYIE1FCisJCSAqLworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWVyZHJ2X3NlcnZpY2VfZXhpdCh2b2lkKSAKK3sKKwlwY2llX3BvcnRfc2VydmljZV91bnJlZ2lzdGVyKCZyb290X2FlcmRydik7Cit9CisKK21vZHVsZV9pbml0KGFlcmRydl9zZXJ2aWNlX2luaXQpOworbW9kdWxlX2V4aXQoYWVyZHJ2X3NlcnZpY2VfZXhpdCk7CisKKzYuIFBvc3NpYmxlIFJlc291cmNlIENvbmZsaWN0cworCitTaW5jZSBhbGwgc2VydmljZSBkcml2ZXJzIG9mIGEgUENJLVBDSSBCcmlkZ2UgUG9ydCBkZXZpY2UgYXJlCithbGxvd2VkIHRvIHJ1biBzaW11bHRhbmVvdXNseSwgYmVsb3cgbGlzdHMgYSBmZXcgb2YgcG9zc2libGUgcmVzb3VyY2UKK2NvbmZsaWN0cyB3aXRoIHByb3Bvc2VkIHNvbHV0aW9ucy4KKworNi4xIE1TSSBWZWN0b3IgUmVzb3VyY2UKKworVGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBlbmFibGVzIGEgZGV2aWNlIHNvZnR3YXJlIGRyaXZlciB0byBjYWxsCitwY2lfZW5hYmxlX21zaSB0byByZXF1ZXN0IE1TSSBiYXNlZCBpbnRlcnJ1cHRzLiBPbmNlIE1TSSBpbnRlcnJ1cHRzCithcmUgZW5hYmxlZCBvbiBhIGRldmljZSwgaXQgc3RheXMgaW4gdGhpcyBtb2RlIHVudGlsIGEgZGV2aWNlIGRyaXZlcgorY2FsbHMgcGNpX2Rpc2FibGVfbXNpIHRvIGRpc2FibGUgTVNJIGludGVycnVwdHMgYW5kIHJldmVydCBiYWNrIHRvCitJTlR4IGVtdWxhdGlvbiBtb2RlLiBTaW5jZSBzZXJ2aWNlIGRyaXZlcnMgb2YgdGhlIHNhbWUgUENJLVBDSSBCcmlkZ2UKK3BvcnQgc2hhcmUgdGhlIHNhbWUgcGh5c2ljYWwgZGV2aWNlLCBpZiBhbiBpbmRpdmlkdWFsIHNlcnZpY2UgZHJpdmVyCitjYWxscyBwY2lfZW5hYmxlX21zaS9wY2lfZGlzYWJsZV9tc2kgaXQgbWF5IHJlc3VsdCB1bnByZWRpY3RhYmxlCitiZWhhdmlvci4gRm9yIGV4YW1wbGUsIHR3byBzZXJ2aWNlIGRyaXZlcnMgcnVuIHNpbXVsdGFuZW91c2x5IG9uIHRoZQorc2FtZSBwaHlzaWNhbCBSb290IFBvcnQuIEJvdGggc2VydmljZSBkcml2ZXJzIGNhbGwgcGNpX2VuYWJsZV9tc2kgdG8KK3JlcXVlc3QgTVNJIGJhc2VkIGludGVycnVwdHMuIEEgc2VydmljZSBkcml2ZXIgbWF5IG5vdCBrbm93IHdoZXRoZXIKK2FueSBvdGhlciBzZXJ2aWNlIGRyaXZlcnMgaGF2ZSBydW4gb24gdGhpcyBSb290IFBvcnQuIElmIGVpdGhlciBvbmUKK29mIHRoZW0gY2FsbHMgcGNpX2Rpc2FibGVfbXNpLCBpdCBwdXRzIHRoZSBvdGhlciBzZXJ2aWNlIGRyaXZlcgoraW4gYSB3cm9uZyBpbnRlcnJ1cHQgbW9kZS4gCisKK1RvIGF2b2lkIHRoaXMgc2l0dWF0aW9uIGFsbCBzZXJ2aWNlIGRyaXZlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8KK3N3aXRjaCBpbnRlcnJ1cHQgbW9kZSBvbiBpdHMgZGV2aWNlLiBUaGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyCitpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGludGVycnVwdCBtb2RlIGFuZCB0aGlzIHNob3VsZCBiZQordHJhbnNwYXJlbnQgdG8gc2VydmljZSBkcml2ZXJzLiBTZXJ2aWNlIGRyaXZlcnMgbmVlZCB0byBrbm93IG9ubHkKK3RoZSB2ZWN0b3IgSVJRIGFzc2lnbmVkIHRvIHRoZSBmaWVsZCBpcnEgb2Ygc3RydWN0IHBjaWVfZGV2aWNlLCB3aGljaAoraXMgcGFzc2VkIGluIHdoZW4gdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlciBwcm9iZXMgZWFjaCBzZXJ2aWNlCitkcml2ZXIuIFNlcnZpY2UgZHJpdmVycyBzaG91bGQgdXNlIChzdHJ1Y3QgcGNpZV9kZXZpY2UqKWRldi0+aXJxIHRvCitjYWxsIHJlcXVlc3RfaXJxL2ZyZWVfaXJxLiBJbiBhZGRpdGlvbiwgdGhlIGludGVycnVwdCBtb2RlIGlzIHN0b3JlZAoraW4gdGhlIGZpZWxkIGludGVycnVwdF9tb2RlIG9mIHN0cnVjdCBwY2llX2RldmljZS4KKworNi4yIE1TSS1YIFZlY3RvciBSZXNvdXJjZXMKKworU2ltaWxhciB0byB0aGUgTVNJIGEgZGV2aWNlIGRyaXZlciBmb3IgYW4gTVNJLVggY2FwYWJsZSBkZXZpY2UgY2FuCitjYWxsIHBjaV9lbmFibGVfbXNpeCB0byByZXF1ZXN0IE1TSS1YIGludGVycnVwdHMuIEFsbCBzZXJ2aWNlIGRyaXZlcnMKK2FyZSBub3QgcGVybWl0dGVkIHRvIHN3aXRjaCBpbnRlcnJ1cHQgbW9kZSBvbiBpdHMgZGV2aWNlLiBUaGUgUENJCitFeHByZXNzIFBvcnQgQnVzIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGludGVycnVwdAorbW9kZSBhbmQgdGhpcyBzaG91bGQgYmUgdHJhbnNwYXJlbnQgdG8gc2VydmljZSBkcml2ZXJzLiBBbnkgYXR0ZW1wdAorYnkgc2VydmljZSBkcml2ZXIgdG8gY2FsbCBwY2lfZW5hYmxlX21zaXgvcGNpX2Rpc2FibGVfbXNpeCBtYXkKK3Jlc3VsdCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBTZXJ2aWNlIGRyaXZlcnMgc2hvdWxkIHVzZQorKHN0cnVjdCBwY2llX2RldmljZSopZGV2LT5pcnEgYW5kIGNhbGwgcmVxdWVzdF9pcnEvZnJlZV9pcnEuCisKKzYuMyBQQ0kgTWVtb3J5L0lPIE1hcHBlZCBSZWdpb25zCisKK1NlcnZpY2UgZHJpdmVycyBmb3IgUENJIEV4cHJlc3MgUG93ZXIgTWFuYWdlbWVudCAoUE1FKSwgQWR2YW5jZWQKK0Vycm9yIFJlcG9ydGluZyAoQUVSKSwgSG90LVBsdWcgKEhQKSBhbmQgVmlydHVhbCBDaGFubmVsIChWQykgYWNjZXNzCitQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBvbiB0aGUgUENJIEV4cHJlc3MgcG9ydC4gSW4gYWxsIGNhc2VzIHRoZQorcmVnaXN0ZXJzIGFjY2Vzc2VkIGFyZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLiBUaGlzIHBhdGNoIGFzc3VtZXMKK3RoYXQgYWxsIHNlcnZpY2UgZHJpdmVycyB3aWxsIGJlIHdlbGwgYmVoYXZlZCBhbmQgbm90IG92ZXJ3cml0ZQorb3RoZXIgc2VydmljZSBkcml2ZXIncyBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorCis2LjQgUENJIENvbmZpZyBSZWdpc3RlcnMKKworRWFjaCBzZXJ2aWNlIGRyaXZlciBydW5zIGl0cyBQQ0kgY29uZmlnIG9wZXJhdGlvbnMgb24gaXRzIG93bgorY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgZXhjZXB0IHRoZSBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5IHN0cnVjdHVyZSwgaW4KK3doaWNoIFJvb3QgQ29udHJvbCByZWdpc3RlciBhbmQgRGV2aWNlIENvbnRyb2wgcmVnaXN0ZXIgYXJlIHNoYXJlZAorYmV0d2VlbiBQTUUgYW5kIEFFUi4gVGhpcyBwYXRjaCBhc3N1bWVzIHRoYXQgYWxsIHNlcnZpY2UgZHJpdmVycword2lsbCBiZSB3ZWxsIGJlaGF2ZWQgYW5kIG5vdCBvdmVyd3JpdGUgb3RoZXIgc2VydmljZSBkcml2ZXIncworY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIyNTBiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0CkBAIC0wLDAgKzEsMzg3IEBACitSZWFkIHRoZSBGLWluZyBQYXBlcnMhCisKKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgUkNVLXJlbGF0ZWQgcHVibGljYXRpb25zLCBhbmQgaXMgZm9sbG93ZWQgYnkKK3RoZSBjb3JyZXNwb25kaW5nIGJpYnRleCBlbnRyaWVzLgorCitUaGUgZmlyc3QgdGhpbmcgcmVzZW1ibGluZyBSQ1Ugd2FzIHB1Ymxpc2hlZCBpbiAxOTgwLCB3aGVuIEt1bmcgYW5kIExlaG1hbgorW0t1bmc4MF0gcmVjb21tZW5kZWQgdXNlIG9mIGEgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gZGVmZXIgZGVzdHJ1Y3Rpb24KK29mIG5vZGVzIGluIGEgcGFyYWxsZWwgYmluYXJ5IHNlYXJjaCB0cmVlIGluIG9yZGVyIHRvIHNpbXBsaWZ5IGl0cworaW1wbGVtZW50YXRpb24uICBUaGlzIHdvcmtzIHdlbGwgaW4gZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBnYXJiYWdlCitjb2xsZWN0b3JzLCBidXQgY3VycmVudCBwcm9kdWN0aW9uIGdhcmJhZ2UgY29sbGVjdG9ycyBpbmN1ciBzaWduaWZpY2FudAorcmVhZC1zaWRlIG92ZXJoZWFkLgorCitJbiAxOTgyLCBNYW5iZXIgYW5kIExhZG5lciBbTWFuYmVyODIsTWFuYmVyODRdIHJlY29tbWVuZGVkIGRlZmVycmluZworZGVzdHJ1Y3Rpb24gdW50aWwgYWxsIHRocmVhZHMgcnVubmluZyBhdCB0aGF0IHRpbWUgaGF2ZSB0ZXJtaW5hdGVkLCBhZ2FpbgorZm9yIGEgcGFyYWxsZWwgYmluYXJ5IHNlYXJjaCB0cmVlLiAgVGhpcyBhcHByb2FjaCB3b3JrcyB3ZWxsIGluIHN5c3RlbXMKK3dpdGggc2hvcnQtbGl2ZWQgdGhyZWFkcywgc3VjaCBhcyB0aGUgSzQyIHJlc2VhcmNoIG9wZXJhdGluZyBzeXN0ZW0uCitIb3dldmVyLCBMaW51eCBoYXMgbG9uZy1saXZlZCB0YXNrcywgc28gbW9yZSBpcyBuZWVkZWQuCisKK0luIDE5ODYsIEhlbm5lc3N5LCBPc2lzZWssIGFuZCBTZWlnaCBbSGVubmVzc3k4OV0gaW50cm9kdWNlZCBwYXNzaXZlCitzZXJpYWxpemF0aW9uLCB3aGljaCBpcyBhbiBSQ1UtbGlrZSBtZWNoYW5pc20gdGhhdCByZWxpZXMgb24gdGhlIHByZXNlbmNlCitvZiAicXVpZXNjZW50IHN0YXRlcyIgaW4gdGhlIFZNL1hBIGh5cGVydmlzb3IgdGhhdCBhcmUgZ3VhcmFudGVlZCBub3QKK3RvIGJlIHJlZmVyZW5jaW5nIHRoZSBkYXRhIHN0cnVjdHVyZS4gIEhvd2V2ZXIsIHRoaXMgbWVjaGFuaXNtIHdhcyBub3QKK29wdGltaXplZCBmb3IgbW9kZXJuIGNvbXB1dGVyIHN5c3RlbXMsIHdoaWNoIGlzIG5vdCBzdXJwcmlzaW5nIGdpdmVuCit0aGF0IHRoZXNlIG92ZXJoZWFkcyB3ZXJlIG5vdCBzbyBleHBlbnNpdmUgaW4gdGhlIG1pZC04MHMuICBOb25ldGhlbGVzcywKK3Bhc3NpdmUgc2VyaWFsaXphdGlvbiBhcHBlYXJzIHRvIGJlIHRoZSBmaXJzdCBkZWZlcnJlZC1kZXN0cnVjdGlvbgorbWVjaGFuaXNtIHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbi4gIEZ1cnRoZXJtb3JlLCB0aGUgcmVsZXZhbnQgcGF0ZW50IGhhcworbGFwc2VkLCBzbyB0aGlzIGFwcHJvYWNoIG1heSBiZSB1c2VkIGluIG5vbi1HUEwgc29mdHdhcmUsIGlmIGRlc2lyZWQuCisoSW4gY29udHJhc3QsIHVzZSBvZiBSQ1UgaXMgcGVybWl0dGVkIG9ubHkgaW4gc29mdHdhcmUgbGljZW5zZWQgdW5kZXIKK0dQTC4gIFNvcnJ5ISEhKQorCitJbiAxOTkwLCBQdWdoIFtQdWdoOTBdIG5vdGVkIHRoYXQgZXhwbGljaXRseSB0cmFja2luZyB3aGljaCB0aHJlYWRzCit3ZXJlIHJlYWRpbmcgYSBnaXZlbiBkYXRhIHN0cnVjdHVyZSBwZXJtaXR0ZWQgZGVmZXJyZWQgZnJlZSB0byBvcGVyYXRlCitpbiB0aGUgcHJlc2VuY2Ugb2Ygbm9uLXRlcm1pbmF0aW5nIHRocmVhZHMuICBIb3dldmVyLCB0aGlzIGV4cGxpY2l0Cit0cmFja2luZyBpbXBvc2VzIHNpZ25pZmljYW50IHJlYWQtc2lkZSBvdmVyaGVhZCwgd2hpY2ggaXMgdW5kZXNpcmFibGUKK2luIHJlYWQtbW9zdGx5IHNpdHVhdGlvbnMuICBUaGlzIGFsZ29yaXRobSBkb2VzIHRha2UgcGFpbnMgdG8gYXZvaWQKK3dyaXRlLXNpZGUgY29udGVudGlvbiBhbmQgcGFyYWxsZWxpemUgdGhlIG90aGVyIHdyaXRlLXNpZGUgb3ZlcmhlYWRzIGJ5Citwcm92aWRpbmcgYSBmaW5lLWdyYWluZWQgbG9ja2luZyBkZXNpZ24sIGhvd2V2ZXIsIGl0IHdvdWxkIGJlIGludGVyZXN0aW5nCit0byBzZWUgaG93IG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGFkdmFudGFnZSByZXBvcnRlZCBpbiAxOTkwIHJlbWFpbnMKK2luIDIwMDQuCisKK0F0IGFib3V0IHRoaXMgc2FtZSB0aW1lLCBBZGFtcyBbQWRhbXM5MV0gZGVzY3JpYmVkIGBgY2hhb3RpYyByZWxheGF0aW9uJycsCit3aGVyZSB0aGUgbm9ybWFsIGJhcnJpZXJzIGJldHdlZW4gc3VjY2Vzc2l2ZSBpdGVyYXRpb25zIG9mIGNvbnZlcmdlbnQKK251bWVyaWNhbCBhbGdvcml0aG1zIGFyZSByZWxheGVkLCBzbyB0aGF0IGl0ZXJhdGlvbiAkbiQgbWlnaHQgdXNlCitkYXRhIGZyb20gaXRlcmF0aW9uICRuLTEkIG9yIGV2ZW4gJG4tMiQuICBUaGlzIGludHJvZHVjZXMgZXJyb3IsCit3aGljaCB0eXBpY2FsbHkgc2xvd3MgY29udmVyZ2VuY2UgYW5kIHRodXMgaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YKK2l0ZXJhdGlvbnMgcmVxdWlyZWQuICBIb3dldmVyLCB0aGlzIGluY3JlYXNlIGlzIHNvbWV0aW1lcyBtb3JlIHRoYW4gbWFkZQordXAgZm9yIGJ5IGEgcmVkdWN0aW9uIGluIHRoZSBudW1iZXIgb2YgZXhwZW5zaXZlIGJhcnJpZXIgb3BlcmF0aW9ucywKK3doaWNoIGFyZSBvdGhlcndpc2UgcmVxdWlyZWQgdG8gc3luY2hyb25pemUgdGhlIHRocmVhZHMgYXQgdGhlIGVuZAorb2YgZWFjaCBpdGVyYXRpb24uICBVbmZvcnR1bmF0ZWx5LCBjaGFvdGljIHJlbGF4YXRpb24gcmVxdWlyZXMgaGlnaGx5CitzdHJ1Y3R1cmVkIGRhdGEsIHN1Y2ggYXMgdGhlIG1hdHJpY2VzIHVzZWQgaW4gc2NpZW50aWZpYyBwcm9ncmFtcywgYW5kCitpcyB0aHVzIGluYXBwbGljYWJsZSB0byBtb3N0IGRhdGEgc3RydWN0dXJlcyBpbiBvcGVyYXRpbmctc3lzdGVtIGtlcm5lbHMuCisKK0luIDE5OTMsIEphY29ic29uIFtKYWNvYnNvbjkzXSB2ZXJiYWxseSBkZXNjcmliZWQgd2hhdCBpcyBwZXJoYXBzIHRoZQorc2ltcGxlc3QgZGVmZXJyZWQtZnJlZSB0ZWNobmlxdWU6IHNpbXBseSB3YWl0aW5nIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUKK2JlZm9yZSBmcmVlaW5nIGJsb2NrcyBhd2FpdGluZyBkZWZlcnJlZCBmcmVlLiAgSmFjb2Jzb24gZGlkIG5vdCBkZXNjcmliZQorYW55IHdyaXRlLXNpZGUgY2hhbmdlcyBoZSBtaWdodCBoYXZlIG1hZGUgaW4gdGhpcyB3b3JrIHVzaW5nIFNHSSdzIElyaXgKK2tlcm5lbC4gIEFqdSBKb2huIHB1Ymxpc2hlZCBhIHNpbWlsYXIgdGVjaG5pcXVlIGluIDE5OTUgW0FqdUpvaG45NV0uCitUaGlzIHdvcmtzIHdlbGwgaWYgdGhlcmUgaXMgYSB3ZWxsLWRlZmluZWQgdXBwZXIgYm91bmQgb24gdGhlIGxlbmd0aCBvZgordGltZSB0aGF0IHJlYWRpbmcgdGhyZWFkcyBjYW4gaG9sZCByZWZlcmVuY2VzLCBhcyB0aGVyZSBtaWdodCB3ZWxsIGJlIGluCitoYXJkIHJlYWwtdGltZSBzeXN0ZW1zLiAgSG93ZXZlciwgaWYgdGhpcyB0aW1lIGlzIGV4Y2VlZGVkLCBwZXJoYXBzIGR1ZQordG8gcHJlZW1wdGlvbiwgZXhjZXNzaXZlIGludGVycnVwdHMsIG9yIGxhcmdlci10aGFuLWFudGljaXBhdGVkIGxvYWQsCittZW1vcnkgY29ycnVwdGlvbiBjYW4gZW5zdWUsIHdpdGggbm8gcmVhc29uYWJsZSBtZWFucyBvZiBkaWFnbm9zaXMuCitKYWNvYnNvbidzIHRlY2huaXF1ZSBpcyB0aGVyZWZvcmUgaW5hcHByb3ByaWF0ZSBmb3IgdXNlIGluIHByb2R1Y3Rpb24KK29wZXJhdGluZy1zeXN0ZW0ga2VybmVscywgZXhjZXB0IHdoZW4gc3VjaCBrZXJuZWxzIGNhbiBwcm92aWRlIGhhcmQKK3JlYWwtdGltZSByZXNwb25zZSBndWFyYW50ZWVzIGZvciBhbGwgb3BlcmF0aW9ucy4KKworQWxzbyBpbiAxOTk1LCBQdSBldCBhbC4gW1B1OTVhXSBhcHBsaWVkIGEgdGVjaG5pcXVlIHNpbWlsYXIgdG8gdGhhdCBvZiBQdWdoJ3MKK3JlYWQtc2lkZS10cmFja2luZyB0byBwZXJtaXQgcmVwbHVnZ2luZyBvZiBhbGdvcml0aG1zIHdpdGhpbiBhIGNvbW1lcmNpYWwKK1VuaXggb3BlcmF0aW5nIHN5c3RlbS4gIEhvd2V2ZXIsIHRoaXMgcmVwbHVnZ2luZyBwZXJtaXR0ZWQgb25seSBhIHNpbmdsZQorcmVhZGVyIGF0IGEgdGltZS4gIFRoZSBmb2xsb3dpbmcgeWVhciwgdGhpcyBzYW1lIGdyb3VwIG9mIHJlc2VhcmNoZXJzCitleHRlbmRlZCB0aGVpciB0ZWNobmlxdWUgdG8gYWxsb3cgZm9yIG11bHRpcGxlIHJlYWRlcnMgW0Nvd2FuOTZhXS4KK1RoZWlyIGFwcHJvYWNoIHJlcXVpcmVzIG1lbW9yeSBiYXJyaWVycyAoYW5kIHRodXMgcGlwZWxpbmUgc3RhbGxzKSwKK2J1dCByZWR1Y2VzIG1lbW9yeSBsYXRlbmN5LCBjb250ZW50aW9uLCBhbmQgbG9ja2luZyBvdmVyaGVhZHMuCisKKzE5OTUgYWxzbyBzYXcgdGhlIGZpcnN0IHB1YmxpY2F0aW9uIG9mIERZTklYL3B0eCdzIFJDVSBtZWNoYW5pc20KK1tTbGluZ3dpbmU5NV0sIHdoaWNoIHdhcyBvcHRpbWl6ZWQgZm9yIG1vZGVybiBDUFUgYXJjaGl0ZWN0dXJlcywKK2FuZCB3YXMgc3VjY2Vzc2Z1bGx5IGFwcGxpZWQgdG8gYSBudW1iZXIgb2Ygc2l0dWF0aW9ucyB3aXRoaW4gdGhlCitEWU5JWC9wdHgga2VybmVsLiAgVGhlIGNvcnJlc3BvbmRpbmcgY29uZmVyZW5jZSBwYXBlciBhcHBlYXJlZCBpbiAxOTk4CitbTWNLZW5uZXk5OF0uCisKK0luIDE5OTksIHRoZSBUb3JuYWRvIGFuZCBLNDIgZ3JvdXBzIGRlc2NyaWJlZCB0aGVpciAiZ2VuZXJhdGlvbnMiCittZWNoYW5pc20sIHdoaWNoIHF1aXRlIHNpbWlsYXIgdG8gUkNVIFtHYW1zYTk5XS4gIFRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zCittYWRlIHBlcnZhc2l2ZSB1c2Ugb2YgUkNVIGluIHBsYWNlIG9mICJleGlzdGVuY2UgbG9ja3MiLCB3aGljaCBncmVhdGx5CitzaW1wbGlmaWVzIGxvY2tpbmcgaGllcmFyY2hpZXMuCisKKzIwMDEgc2F3IHRoZSBmaXJzdCBSQ1UgcHJlc2VudGF0aW9uIGludm9sdmluZyBMaW51eCBbTWNLZW5uZXkwMWFdCithdCBPTFMuICBUaGUgcmVzdWx0aW5nIGFidW5kYW5jZSBvZiBSQ1UgcGF0Y2hlcyB3YXMgcHJlc2VudGVkIHRoZQorZm9sbG93aW5nIHllYXIgW01jS2VubmV5MDJhXSwgYW5kIHVzZSBvZiBSQ1UgaW4gZGNhY2hlIHdhcyBmaXJzdAorZGVzY3JpYmVkIHRoYXQgc2FtZSB5ZWFyIFtMaW5kZXIwMmFdLgorCitBbHNvIGluIDIwMDIsIE1pY2hhZWwgW01pY2hhZWwwMmIsTWljaGFlbDAyYV0gcHJlc2VudGVkIHRlY2huaXF1ZXMKK3RoYXQgZGVmZXIgdGhlIGRlc3RydWN0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyB0byBzaW1wbGlmeSBub24tYmxvY2tpbmcKK3N5bmNocm9uaXphdGlvbiAod2FpdC1mcmVlIHN5bmNocm9uaXphdGlvbiwgbG9jay1mcmVlIHN5bmNocm9uaXphdGlvbiwKK2FuZCBvYnN0cnVjdGlvbi1mcmVlIHN5bmNocm9uaXphdGlvbiBhcmUgYWxsIGV4YW1wbGVzIG9mIG5vbi1ibG9ja2luZworc3luY2hyb25pemF0aW9uKS4gIEluIHBhcnRpY3VsYXIsIHRoaXMgdGVjaG5pcXVlIGVsaW1pbmF0ZXMgbG9ja2luZywKK3JlZHVjZXMgY29udGVudGlvbiwgcmVkdWNlcyBtZW1vcnkgbGF0ZW5jeSBmb3IgcmVhZGVycywgYW5kIHBhcmFsbGVsaXplcworcGlwZWxpbmUgc3RhbGxzIGFuZCBtZW1vcnkgbGF0ZW5jeSBmb3Igd3JpdGVycy4gIEhvd2V2ZXIsIHRoZXNlCit0ZWNobmlxdWVzIHN0aWxsIGltcG9zZSBzaWduaWZpY2FudCByZWFkLXNpZGUgb3ZlcmhlYWQgaW4gdGhlIGZvcm0gb2YKK21lbW9yeSBiYXJyaWVycy4gIFJlc2VhcmNoZXJzIGF0IFN1biB3b3JrZWQgYWxvbmcgc2ltaWxhciBsaW5lcyBpbiB0aGUKK3NhbWUgdGltZWZyYW1lIFtIZXJsaWh5TE0wMixIZXJsaWh5TE1TMDNdLgorCitJbiAyMDAzLCB0aGUgSzQyIGdyb3VwIGRlc2NyaWJlZCBob3cgUkNVIGNvdWxkIGJlIHVzZWQgdG8gY3JlYXRlCitob3QtcGx1Z2dhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpbmctc3lzdGVtIGZ1bmN0aW9ucy4gIExhdGVyIHRoYXQKK3llYXIgc2F3IGEgcGFwZXIgZGVzY3JpYmluZyBhbiBSQ1UgaW1wbGVtZW50YXRpb24gb2YgU3lzdGVtIFYgSVBDCitbQXJjYW5nZWxpMDNdLCBhbmQgYW4gaW50cm9kdWN0aW9uIHRvIFJDVSBpbiBMaW51eCBKb3VybmFsIFtNY0tlbm5leTAzYV0uCisKKzIwMDQgaGFzIHNlZW4gYSBMaW51eC1Kb3VybmFsIGFydGljbGUgb24gdXNlIG9mIFJDVSBpbiBkY2FjaGUKK1tNY0tlbm5leTA0YV0sIGEgcGVyZm9ybWFuY2UgY29tcGFyaXNvbiBvZiBsb2NraW5nIHRvIFJDVSBvbiBzZXZlcmFsCitkaWZmZXJlbnQgQ1BVcyBbTWNLZW5uZXkwNGJdLCBhIGRpc3NlcnRhdGlvbiBkZXNjcmliaW5nIHVzZSBvZiBSQ1UgaW4gYQorbnVtYmVyIG9mIG9wZXJhdGluZy1zeXN0ZW0ga2VybmVscyBbUGF1bEVkd2FyZE1jS2VubmV5UGhEXSwgYW5kIGEgcGFwZXIKK2Rlc2NyaWJpbmcgaG93IHRvIG1ha2UgUkNVIHNhZmUgZm9yIHNvZnQtcmVhbHRpbWUgYXBwbGljYXRpb25zIFtTYXJtYTA0Y10uCisKKworQmlidGV4IEVudHJpZXMKKworQGFydGljbGV7S3VuZzgwCissYXV0aG9yPSJILiBULiBLdW5nIGFuZCBRLiBMZWhtYW4iCissdGl0bGU9IkNvbmN1cnJlbnQgTWFpbnRlbmFuY2Ugb2YgQmluYXJ5IFNlYXJjaCBUcmVlcyIKKyxZZWFyPSIxOTgwIgorLE1vbnRoPSJTZXB0ZW1iZXIiCissam91cm5hbD0iQUNNIFRyYW5zYWN0aW9ucyBvbiBEYXRhYmFzZSBTeXN0ZW1zIgorLHZvbHVtZT0iNSIKKyxudW1iZXI9IjMiCisscGFnZXM9IjM1NC0zODIiCit9CisKK0B0ZWNocmVwb3J0e01hbmJlcjgyCissYXV0aG9yPSJVZGkgTWFuYmVyIGFuZCBSaWNoYXJkIEUuIExhZG5lciIKKyx0aXRsZT0iQ29uY3VycmVuY3kgQ29udHJvbCBpbiBhIER5bmFtaWMgU2VhcmNoIFN0cnVjdHVyZSIKKyxpbnN0aXR1dGlvbj0iRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlLCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24iCissYWRkcmVzcz0iU2VhdHRsZSwgV2FzaGluZ3RvbiIKKyx5ZWFyPSIxOTgyIgorLG51bWJlcj0iODItMDEtMDEiCissbW9udGg9IkphbnVhcnkiCisscGFnZXM9IjI4IgorfQorCitAYXJ0aWNsZXtNYW5iZXI4NAorLGF1dGhvcj0iVWRpIE1hbmJlciBhbmQgUmljaGFyZCBFLiBMYWRuZXIiCissdGl0bGU9IkNvbmN1cnJlbmN5IENvbnRyb2wgaW4gYSBEeW5hbWljIFNlYXJjaCBTdHJ1Y3R1cmUiCissWWVhcj0iMTk4NCIKKyxNb250aD0iU2VwdGVtYmVyIgorLGpvdXJuYWw9IkFDTSBUcmFuc2FjdGlvbnMgb24gRGF0YWJhc2UgU3lzdGVtcyIKKyx2b2x1bWU9IjkiCissbnVtYmVyPSIzIgorLHBhZ2VzPSI0MzktNDU1IgorfQorCitAdGVjaHJlcG9ydHtIZW5uZXNzeTg5CissYXV0aG9yPSJKYW1lcyBQLiBIZW5uZXNzeSBhbmQgRGFtaWFuIEwuIE9zaXNlayBhbmQgSm9zZXBoIFcuIHtTZWlnaCBJSX0iCissdGl0bGU9IlBhc3NpdmUgU2VyaWFsaXphdGlvbiBpbiBhIE11bHRpdGFza2luZyBFbnZpcm9ubWVudCIKKyxpbnN0aXR1dGlvbj0iVVMgUGF0ZW50IGFuZCBUcmFkZW1hcmsgT2ZmaWNlIgorLGFkZHJlc3M9Ildhc2hpbmd0b24sIERDIgorLHllYXI9IjE5ODkiCissbnVtYmVyPSJVUyBQYXRlbnQgNCw4MDksMTY4IChsYXBzZWQpIgorLG1vbnRoPSJGZWJydWFyeSIKKyxwYWdlcz0iMTEiCit9CisKK0B0ZWNocmVwb3J0e1B1Z2g5MAorLGF1dGhvcj0iV2lsbGlhbSBQdWdoIgorLHRpdGxlPSJDb25jdXJyZW50IE1haW50ZW5hbmNlIG9mIFNraXAgTGlzdHMiCissaW5zdGl0dXRpb249Ikluc3RpdHV0ZSBvZiBBZHZhbmNlZCBDb21wdXRlciBTY2llbmNlIFN0dWRpZXMsIERlcGFydG1lbnQgb2YgQ29tcHV0ZXIgU2NpZW5jZSwgVW5pdmVyc2l0eSBvZiBNYXJ5bGFuZCIKKyxhZGRyZXNzPSJDb2xsZWdlIFBhcmssIE1hcnlsYW5kIgorLHllYXI9IjE5OTAiCissbnVtYmVyPSJDUy1UUi0yMjIyLjEiCissbW9udGg9Ikp1bmUiCit9CisKK0BCb29re0FkYW1zOTEKKyxBdXRob3I9IkdyZWdvcnkgUi4gQWRhbXMiCissdGl0bGU9IkNvbmN1cnJlbnQgUHJvZ3JhbW1pbmcsIFByaW5jaXBsZXMsIGFuZCBQcmFjdGljZXMiCissUHVibGlzaGVyPSJCZW5qYW1pbiBDdW1taW5zIgorLFllYXI9IjE5OTEiCit9CisKK0B1bnB1Ymxpc2hlZHtKYWNvYnNvbjkzCissYXV0aG9yPSJWYW4gSmFjb2Jzb24iCissdGl0bGU9IkF2b2lkIFJlYWQtU2lkZSBMb2NraW5nIFZpYSBEZWxheWVkIEZyZWUiCisseWVhcj0iMTk5MyIKKyxtb250aD0iU2VwdGVtYmVyIgorLG5vdGU9IlZlcmJhbCBkaXNjdXNzaW9uIgorfQorCitAQ29uZmVyZW5jZXtBanVKb2huOTUKKyxBdXRob3I9IkFqdSBKb2huIgorLFRpdGxlPSJEeW5hbWljIHZub2RlcyAtLSBEZXNpZ24gYW5kIEltcGxlbWVudGF0aW9uIgorLEJvb2t0aXRsZT0ie1VTRU5JWCBXaW50ZXIgMTk5NX0iCissUHVibGlzaGVyPSJVU0VOSVggQXNzb2NpYXRpb24iCissTW9udGg9IkphbnVhcnkiCissWWVhcj0iMTk5NSIKKyxwYWdlcz0iMTEtMjMiCissQWRkcmVzcz0iTmV3IE9ybGVhbnMsIExBIgorfQorCitAdGVjaHJlcG9ydHtTbGluZ3dpbmU5NQorLGF1dGhvcj0iSm9obiBELiBTbGluZ3dpbmUgYW5kIFBhdWwgRS4gTWNLZW5uZXkiCissdGl0bGU9IkFwcGFyYXR1cyBhbmQgTWV0aG9kIGZvciBBY2hpZXZpbmcgUmVkdWNlZCBPdmVyaGVhZCBNdXR1YWwKK0V4Y2x1c2lvbiBhbmQgTWFpbnRhaW5pbmcgQ29oZXJlbmN5IGluIGEgTXVsdGlwcm9jZXNzb3IgU3lzdGVtCitVdGlsaXppbmcgRXhlY3V0aW9uIEhpc3RvcnkgYW5kIFRocmVhZCBNb25pdG9yaW5nIgorLGluc3RpdHV0aW9uPSJVUyBQYXRlbnQgYW5kIFRyYWRlbWFyayBPZmZpY2UiCissYWRkcmVzcz0iV2FzaGluZ3RvbiwgREMiCisseWVhcj0iMTk5NSIKKyxudW1iZXI9IlVTIFBhdGVudCA1LDQ0Miw3NTggKGNvbnRyaWJ1dGVkIHVuZGVyIEdQTCkiCissbW9udGg9IkF1Z3VzdCIKK30KKworQHRlY2hyZXBvcnR7U2xpbmd3aW5lOTcKKyxhdXRob3I9IkpvaG4gRC4gU2xpbmd3aW5lIGFuZCBQYXVsIEUuIE1jS2VubmV5IgorLHRpdGxlPSJNZXRob2QgZm9yIG1haW50YWluaW5nIGRhdGEgY29oZXJlbmN5IHVzaW5nIHRocmVhZAorYWN0aXZpdHkgc3VtbWFyaWVzIGluIGEgbXVsdGljb21wdXRlciBzeXN0ZW0iCissaW5zdGl0dXRpb249IlVTIFBhdGVudCBhbmQgVHJhZGVtYXJrIE9mZmljZSIKKyxhZGRyZXNzPSJXYXNoaW5ndG9uLCBEQyIKKyx5ZWFyPSIxOTk3IgorLG51bWJlcj0iVVMgUGF0ZW50IDUsNjA4LDg5MyAoY29udHJpYnV0ZWQgdW5kZXIgR1BMKSIKKyxtb250aD0iTWFyY2giCit9CisKK0B0ZWNocmVwb3J0e1NsaW5nd2luZTk4CissYXV0aG9yPSJKb2huIEQuIFNsaW5nd2luZSBhbmQgUGF1bCBFLiBNY0tlbm5leSIKKyx0aXRsZT0iQXBwYXJhdHVzIGFuZCBtZXRob2QgZm9yIGFjaGlldmluZyByZWR1Y2VkIG92ZXJoZWFkCittdXR1YWwgZXhjbHVzaW9uIGFuZCBtYWludGFpbmluZyBjb2hlcmVuY3kgaW4gYSBtdWx0aXByb2Nlc3Nvcgorc3lzdGVtIHV0aWxpemluZyBleGVjdXRpb24gaGlzdG9yeSBhbmQgdGhyZWFkIG1vbml0b3JpbmciCissaW5zdGl0dXRpb249IlVTIFBhdGVudCBhbmQgVHJhZGVtYXJrIE9mZmljZSIKKyxhZGRyZXNzPSJXYXNoaW5ndG9uLCBEQyIKKyx5ZWFyPSIxOTk4IgorLG51bWJlcj0iVVMgUGF0ZW50IDUsNzI3LDIwOSAoY29udHJpYnV0ZWQgdW5kZXIgR1BMKSIKKyxtb250aD0iTWFyY2giCit9CisKK0BDb25mZXJlbmNle01jS2VubmV5OTgKKyxBdXRob3I9IlBhdWwgRS4gTWNLZW5uZXkgYW5kIEpvaG4gRC4gU2xpbmd3aW5lIgorLFRpdGxlPSJSZWFkLUNvcHkgVXBkYXRlOiBVc2luZyBFeGVjdXRpb24gSGlzdG9yeSB0byBTb2x2ZSBDb25jdXJyZW5jeQorUHJvYmxlbXMiCissQm9va3RpdGxlPSJ7UGFyYWxsZWwgYW5kIERpc3RyaWJ1dGVkIENvbXB1dGluZyBhbmQgU3lzdGVtc30iCissTW9udGg9Ik9jdG9iZXIiCissWWVhcj0iMTk5OCIKKyxwYWdlcz0iNTA5LTUxOCIKKyxBZGRyZXNzPSJMYXMgVmVnYXMsIE5WIgorfQorCitAQ29uZmVyZW5jZXtHYW1zYTk5CissQXV0aG9yPSJCZW4gR2Ftc2EgYW5kIE9ycmFuIEtyaWVnZXIgYW5kIEpvbmF0aGFuIEFwcGF2b28gYW5kIE1pY2hhZWwgU3R1bW0iCissVGl0bGU9IlRvcm5hZG86IE1heGltaXppbmcgTG9jYWxpdHkgYW5kIENvbmN1cnJlbmN5IGluIGEgU2hhcmVkIE1lbW9yeQorTXVsdGlwcm9jZXNzb3IgT3BlcmF0aW5nIFN5c3RlbSIKKyxCb29rdGl0bGU9IntQcm9jZWVkaW5ncyBvZiB0aGUgM1x0ZXh0c3VwZXJzY3JpcHR7cmR9IFN5bXBvc2l1bSBvbgorT3BlcmF0aW5nIFN5c3RlbSBEZXNpZ24gYW5kIEltcGxlbWVudGF0aW9ufSIKKyxNb250aD0iRmVicnVhcnkiCissWWVhcj0iMTk5OSIKKyxwYWdlcz0iODctMTAwIgorLEFkZHJlc3M9Ik5ldyBPcmxlYW5zLCBMQSIKK30KKworQHRlY2hyZXBvcnR7U2xpbmd3aW5lMDEKKyxhdXRob3I9IkpvaG4gRC4gU2xpbmd3aW5lIGFuZCBQYXVsIEUuIE1jS2VubmV5IgorLHRpdGxlPSJBcHBhcmF0dXMgYW5kIG1ldGhvZCBmb3IgYWNoaWV2aW5nIHJlZHVjZWQgb3ZlcmhlYWQKK211dHVhbCBleGNsdXNpb24gYW5kIG1haW50YWluaW5nIGNvaGVyZW5jeSBpbiBhIG11bHRpcHJvY2Vzc29yCitzeXN0ZW0gdXRpbGl6aW5nIGV4ZWN1dGlvbiBoaXN0b3J5IGFuZCB0aHJlYWQgbW9uaXRvcmluZyIKKyxpbnN0aXR1dGlvbj0iVVMgUGF0ZW50IGFuZCBUcmFkZW1hcmsgT2ZmaWNlIgorLGFkZHJlc3M9Ildhc2hpbmd0b24sIERDIgorLHllYXI9IjIwMDEiCissbnVtYmVyPSJVUyBQYXRlbnQgNSwyMTksNjkwIChjb250cmlidXRlZCB1bmRlciBHUEwpIgorLG1vbnRoPSJBcHJpbCIKK30KKworQENvbmZlcmVuY2V7TWNLZW5uZXkwMWEKKyxBdXRob3I9IlBhdWwgRS4gTWNLZW5uZXkgYW5kIEpvbmF0aGFuIEFwcGF2b28gYW5kIEFuZGkgS2xlZW4gYW5kCitPcnJhbiBLcmllZ2VyIGFuZCBSdXN0eSBSdXNzZWxsIGFuZCBEaXBhbmthciBTYXJtYSBhbmQgTWFuZWVzaCBTb25pIgorLFRpdGxlPSJSZWFkLUNvcHkgVXBkYXRlIgorLEJvb2t0aXRsZT0ie090dGF3YSBMaW51eCBTeW1wb3NpdW19IgorLE1vbnRoPSJKdWx5IgorLFllYXI9IjIwMDEiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3LmxpbnV4c3ltcG9zaXVtLm9yZy8yMDAxL2Fic3RyYWN0cy9yZWFkY29weS5waHB9CitcdXJse2h0dHA6Ly93d3cucmRyb3AuY29tL3VzZXJzL3BhdWxtY2svcmNsb2NrL3JjbG9ja19PTFMuMjAwMS4wNS4wMWMucGRmfQorW1ZpZXdlZCBKdW5lIDIzLCAyMDA0XSIKK2Fubm90YXRpb249IgorRGVzY3JpYmVkIFJDVSwgYW5kIHByZXNlbnRlZCBzb21lIHBhdGNoZXMgaW1wbGVtZW50aW5nIGFuZCB1c2luZyBpdCBpbgordGhlIExpbnV4IGtlcm5lbC4KKyIKK30KKworQENvbmZlcmVuY2V7TGluZGVyMDJhCissQXV0aG9yPSJIYW5uYSBMaW5kZXIgYW5kIERpcGFua2FyIFNhcm1hIGFuZCBNYW5lZXNoIFNvbmkiCissVGl0bGU9IlNjYWxhYmlsaXR5IG9mIHRoZSBEaXJlY3RvcnkgRW50cnkgQ2FjaGUiCissQm9va3RpdGxlPSJ7T3R0YXdhIExpbnV4IFN5bXBvc2l1bX0iCissTW9udGg9Ikp1bmUiCissWWVhcj0iMjAwMiIKKyxwYWdlcz0iMjg5LTMwMCIKK30KKworQENvbmZlcmVuY2V7TWNLZW5uZXkwMmEKKyxBdXRob3I9IlBhdWwgRS4gTWNLZW5uZXkgYW5kIERpcGFua2FyIFNhcm1hIGFuZAorQW5kcmVhIEFyY2FuZ2VsaSBhbmQgQW5kaSBLbGVlbiBhbmQgT3JyYW4gS3JpZWdlciBhbmQgUnVzdHkgUnVzc2VsbCIKKyxUaXRsZT0iUmVhZC1Db3B5IFVwZGF0ZSIKKyxCb29rdGl0bGU9IntPdHRhd2EgTGludXggU3ltcG9zaXVtfSIKKyxNb250aD0iSnVuZSIKKyxZZWFyPSIyMDAyIgorLHBhZ2VzPSIzMzgtMzY3IgorLG5vdGU9IkF2YWlsYWJsZToKK1x1cmx7aHR0cDovL3d3dy5saW51eC5vcmcudWsvfmFqaC9vbHMyMDAyX3Byb2NlZWRpbmdzLnBkZi5nen0KK1tWaWV3ZWQgSnVuZSAyMywgMjAwNF0iCit9CisKK0BhcnRpY2xle0FwcGF2b28wM2EKKyxhdXRob3I9IkouIEFwcGF2b28gYW5kIEsuIEh1aSBhbmQgQy4gQS4gTi4gU291bGVzIGFuZCBSLiBXLiBXaXNuaWV3c2tpIGFuZAorRC4gTS4ge0RhIFNpbHZhfSBhbmQgTy4gS3JpZWdlciBhbmQgTS4gQS4gQXVzbGFuZGVyIGFuZCBELiBKLiBFZGVsc29obiBhbmQKK0IuIEdhbXNhIGFuZCBHLiBSLiBHYW5nZXIgYW5kIFAuIE1jS2VubmV5IGFuZCBNLiBPc3Ryb3dza2kgYW5kCitCLiBSb3NlbmJ1cmcgYW5kIE0uIFN0dW1tIGFuZCBKLiBYZW5pZGlzIgorLHRpdGxlPSJFbmFibGluZyBBdXRvbm9taWMgQmVoYXZpb3IgaW4gU3lzdGVtcyBTb2Z0d2FyZSBXaXRoIEhvdCBTd2FwcGluZyIKKyxZZWFyPSIyMDAzIgorLE1vbnRoPSJKYW51YXJ5IgorLGpvdXJuYWw9IklCTSBTeXN0ZW1zIEpvdXJuYWwiCissdm9sdW1lPSI0MiIKKyxudW1iZXI9IjEiCisscGFnZXM9IjYwLTc2IgorfQorCitAQ29uZmVyZW5jZXtBcmNhbmdlbGkwMworLEF1dGhvcj0iQW5kcmVhIEFyY2FuZ2VsaSBhbmQgTWluZ21pbmcgQ2FvIGFuZCBQYXVsIEUuIE1jS2VubmV5IGFuZAorRGlwYW5rYXIgU2FybWEiCissVGl0bGU9IlVzaW5nIFJlYWQtQ29weSBVcGRhdGUgVGVjaG5pcXVlcyBmb3Ige1N5c3RlbSBWIElQQ30gaW4gdGhlCit7TGludXh9IDIuNSBLZXJuZWwiCissQm9va3RpdGxlPSJQcm9jZWVkaW5ncyBvZiB0aGUgMjAwMyBVU0VOSVggQW5udWFsIFRlY2huaWNhbCBDb25mZXJlbmNlCisoRlJFRU5JWCBUcmFjaykiCissUHVibGlzaGVyPSJVU0VOSVggQXNzb2NpYXRpb24iCisseWVhcj0iMjAwMyIKKyxtb250aD0iSnVuZSIKKyxwYWdlcz0iMjk3LTMxMCIKK30KKworQGFydGljbGV7TWNLZW5uZXkwM2EKKyxhdXRob3I9IlBhdWwgRS4gTWNLZW5uZXkiCissdGl0bGU9IlVzaW5nIHtSQ1V9IGluIHRoZSB7TGludXh9IDIuNSBLZXJuZWwiCissWWVhcj0iMjAwMyIKKyxNb250aD0iT2N0b2JlciIKKyxqb3VybmFsPSJMaW51eCBKb3VybmFsIgorLHZvbHVtZT0iMSIKKyxudW1iZXI9IjExNCIKKyxwYWdlcz0iMTgtMjYiCit9CisKK0BhcnRpY2xle01jS2VubmV5MDRhCissYXV0aG9yPSJQYXVsIEUuIE1jS2VubmV5IGFuZCBEaXBhbmthciBTYXJtYSBhbmQgTWFuZWVzaCBTb25pIgorLHRpdGxlPSJTY2FsaW5nIGRjYWNoZSB3aXRoIHtSQ1V9IgorLFllYXI9IjIwMDQiCissTW9udGg9IkphbnVhcnkiCissam91cm5hbD0iTGludXggSm91cm5hbCIKKyx2b2x1bWU9IjEiCissbnVtYmVyPSIxMTgiCisscGFnZXM9IjM4LTQ2IgorfQorCitAQ29uZmVyZW5jZXtNY0tlbm5leTA0YgorLEF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSIKKyxUaXRsZT0ie1JDVX0gdnMuIExvY2tpbmcgUGVyZm9ybWFuY2Ugb24gRGlmZmVyZW50IHtDUFVzfSIKKyxCb29rdGl0bGU9IntsaW51eC5jb25mLmF1fSIKKyxNb250aD0iSmFudWFyeSIKKyxZZWFyPSIyMDA0IgorLEFkZHJlc3M9IkFkZWxhaWRlLCBBdXN0cmFsaWEiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3LmxpbnV4Lm9yZy5hdS9jb25mLzIwMDQvYWJzdHJhY3RzLmh0bWwjOTB9CitcdXJse2h0dHA6Ly93d3cucmRyb3AuY29tL3VzZXJzL3BhdWxtY2svcmNsb2NrL2xvY2twZXJmLjIwMDQuMDEuMTdhLnBkZn0KK1tWaWV3ZWQgSnVuZSAyMywgMjAwNF0iCit9CisKK0BwaGR0aGVzaXN7UGF1bEVkd2FyZE1jS2VubmV5UGhECissYXV0aG9yPSJQYXVsIEUuIE1jS2VubmV5IgorLHRpdGxlPSJFeHBsb2l0aW5nIERlZmVycmVkIERlc3RydWN0aW9uOgorQW4gQW5hbHlzaXMgb2YgUmVhZC1Db3B5LVVwZGF0ZSBUZWNobmlxdWVzCitpbiBPcGVyYXRpbmcgU3lzdGVtIEtlcm5lbHMiCissc2Nob29sPSJPR0kgU2Nob29sIG9mIFNjaWVuY2UgYW5kIEVuZ2luZWVyaW5nIGF0CitPcmVnb24gSGVhbHRoIGFuZCBTY2llbmNlcyBVbml2ZXJzaXR5IgorLHllYXI9IjIwMDQiCit9CisKK0BDb25mZXJlbmNle1Nhcm1hMDRjCissQXV0aG9yPSJEaXBhbmthciBTYXJtYSBhbmQgUGF1bCBFLiBNY0tlbm5leSIKKyxUaXRsZT0iTWFraW5nIFJDVSBTYWZlIGZvciBEZWVwIFN1Yi1NaWxsaXNlY29uZCBSZXNwb25zZSBSZWFsdGltZSBBcHBsaWNhdGlvbnMiCissQm9va3RpdGxlPSJQcm9jZWVkaW5ncyBvZiB0aGUgMjAwNCBVU0VOSVggQW5udWFsIFRlY2huaWNhbCBDb25mZXJlbmNlCisoRlJFRU5JWCBUcmFjaykiCissUHVibGlzaGVyPSJVU0VOSVggQXNzb2NpYXRpb24iCisseWVhcj0iMjAwNCIKKyxtb250aD0iSnVuZSIKKyxwYWdlcz0iMTgyLTE5MSIKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL1VQLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL1VQLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTFhODAzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvVVAudHh0CkBAIC0wLDAgKzEsNjQgQEAKK1JDVSBvbiBVbmlwcm9jZXNzb3IgU3lzdGVtcworCisKK0EgY29tbW9uIG1pc2NvbmNlcHRpb24gaXMgdGhhdCwgb24gVVAgc3lzdGVtcywgdGhlIGNhbGxfcmN1KCkgcHJpbWl0aXZlCittYXkgaW1tZWRpYXRlbHkgaW52b2tlIGl0cyBmdW5jdGlvbiwgYW5kIHRoYXQgdGhlIHN5bmNocm9uaXplX2tlcm5lbAorcHJpbWl0aXZlIG1heSByZXR1cm4gaW1tZWRpYXRlbHkuICBUaGUgYmFzaXMgb2YgdGhpcyBtaXNjb25jZXB0aW9uCitpcyB0aGF0IHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIENQVSwgaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8KK3dhaXQgZm9yIGFueXRoaW5nIGVsc2UgdG8gZ2V0IGRvbmUsIHNpbmNlIHRoZXJlIGFyZSBubyBvdGhlciBDUFVzIGZvcgorYW55dGhpbmcgZWxzZSB0byBiZSBoYXBwZW5pbmcgb24uICBBbHRob3VnaCB0aGlzIGFwcHJvYWNoIHdpbGwgc29ydCBvZgord29yayBhIHN1cnByaXNpbmcgYW1vdW50IG9mIHRoZSB0aW1lLCBpdCBpcyBhIHZlcnkgYmFkIGlkZWEgaW4gZ2VuZXJhbC4KK1RoaXMgZG9jdW1lbnQgcHJlc2VudHMgdHdvIGV4YW1wbGVzIHRoYXQgZGVtb25zdHJhdGUgZXhhY3RseSBob3cgYmFkIGFuCitpZGVhIHRoaXMgaXMuCisKKworRXhhbXBsZSAxOiBzb2Z0aXJxIFN1aWNpZGUKKworU3VwcG9zZSB0aGF0IGFuIFJDVS1iYXNlZCBhbGdvcml0aG0gc2NhbnMgYSBsaW5rZWQgbGlzdCBjb250YWluaW5nCitlbGVtZW50cyBBLCBCLCBhbmQgQyBpbiBwcm9jZXNzIGNvbnRleHQsIGFuZCBjYW4gZGVsZXRlIGVsZW1lbnRzIGZyb20KK3RoaXMgc2FtZSBsaXN0IGluIHNvZnRpcnEgY29udGV4dC4gIFN1cHBvc2UgdGhhdCB0aGUgcHJvY2Vzcy1jb250ZXh0IHNjYW4KK2lzIHJlZmVyZW5jaW5nIGVsZW1lbnQgQiB3aGVuIGl0IGlzIGludGVycnVwdGVkIGJ5IHNvZnRpcnEgcHJvY2Vzc2luZywKK3doaWNoIGRlbGV0ZXMgZWxlbWVudCBCLCBhbmQgdGhlbiBpbnZva2VzIGNhbGxfcmN1KCkgdG8gZnJlZSBlbGVtZW50IEIKK2FmdGVyIGEgZ3JhY2UgcGVyaW9kLgorCitOb3csIGlmIGNhbGxfcmN1KCkgd2VyZSB0byBkaXJlY3RseSBpbnZva2UgaXRzIGFyZ3VtZW50cywgdGhlbiB1cG9uIHJldHVybgorZnJvbSBzb2Z0aXJxLCB0aGUgbGlzdCBzY2FuIHdvdWxkIGZpbmQgaXRzZWxmIHJlZmVyZW5jaW5nIGEgbmV3bHkgZnJlZWQKK2VsZW1lbnQgQi4gIFRoaXMgc2l0dWF0aW9uIGNhbiBncmVhdGx5IGRlY3JlYXNlIHRoZSBsaWZlIGV4cGVjdGFuY3kgb2YKK3lvdXIga2VybmVsLgorCisKK0V4YW1wbGUgMjogRnVuY3Rpb24tQ2FsbCBGYXRhbGl0eQorCitPZiBjb3Vyc2UsIG9uZSBjb3VsZCBhdmVydCB0aGUgc3VpY2lkZSBkZXNjcmliZWQgaW4gdGhlIHByZWNlZGluZyBleGFtcGxlCitieSBoYXZpbmcgY2FsbF9yY3UoKSBkaXJlY3RseSBpbnZva2UgaXRzIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHdhcyBjYWxsZWQKK2Zyb20gcHJvY2VzcyBjb250ZXh0LiAgSG93ZXZlciwgdGhpcyBjYW4gZmFpbCBpbiBhIHNpbWlsYXIgbWFubmVyLgorCitTdXBwb3NlIHRoYXQgYW4gUkNVLWJhc2VkIGFsZ29yaXRobSBhZ2FpbiBzY2FucyBhIGxpbmtlZCBsaXN0IGNvbnRhaW5pbmcKK2VsZW1lbnRzIEEsIEIsIGFuZCBDIGluIHByb2Nlc3MgY29udGV4dHMsIGJ1dCB0aGF0IGl0IGludm9rZXMgYSBmdW5jdGlvbgorb24gZWFjaCBlbGVtZW50IGFzIGl0IGlzIHNjYW5uZWQuICBTdXBwb3NlIGZ1cnRoZXIgdGhhdCB0aGlzIGZ1bmN0aW9uCitkZWxldGVzIGVsZW1lbnQgQiBmcm9tIHRoZSBsaXN0LCB0aGVuIHBhc3NlcyBpdCB0byBjYWxsX3JjdSgpIGZvciBkZWZlcnJlZAorZnJlZWluZy4gIFRoaXMgbWF5IGJlIGEgYml0IHVuY29udmVudGlvbmFsLCBidXQgaXQgaXMgcGVyZmVjdGx5IGxlZ2FsCitSQ1UgdXNhZ2UsIHNpbmNlIGNhbGxfcmN1KCkgbXVzdCB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCB0byBlbGFwc2UuCitUaGVyZWZvcmUsIGluIHRoaXMgY2FzZSwgYWxsb3dpbmcgY2FsbF9yY3UoKSB0byBpbW1lZGlhdGVseSBpbnZva2UKK2l0cyBhcmd1bWVudHMgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0byBtYWtlIHRoZSBmdW5kYW1lbnRhbCBndWFyYW50ZWUKK3VuZGVybHlpbmcgUkNVLCBuYW1lbHkgdGhhdCBjYWxsX3JjdSgpIGRlZmVycyBpbnZva2luZyBpdHMgYXJndW1lbnRzIHVudGlsCithbGwgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBjdXJyZW50bHkgZXhlY3V0aW5nIGhhdmUgY29tcGxldGVkLgorCitRdWljayBRdWl6OiB3aHkgaXMgaXQgLW5vdC0gbGVnYWwgdG8gaW52b2tlIHN5bmNocm9uaXplX2tlcm5lbCgpIGluCit0aGlzIGNhc2U/CisKKworU3VtbWFyeQorCitQZXJtaXR0aW5nIGNhbGxfcmN1KCkgdG8gaW1tZWRpYXRlbHkgaW52b2tlIGl0cyBhcmd1bWVudHMgb3IgcGVybWl0dGluZworc3luY2hyb25pemVfa2VybmVsKCkgdG8gaW1tZWRpYXRlbHkgcmV0dXJuIGJyZWFrcyBSQ1UsIGV2ZW4gb24gYSBVUCBzeXN0ZW0uCitTbyBkbyBub3QgZG8gaXQhICBFdmVuIG9uIGEgVVAgc3lzdGVtLCB0aGUgUkNVIGluZnJhc3RydWN0dXJlIC1tdXN0LQorcmVzcGVjdCBncmFjZSBwZXJpb2RzLgorCisKK0Fuc3dlciB0byBRdWljayBRdWl6CisKK1RoZSBjYWxsaW5nIGZ1bmN0aW9uIGlzIHNjYW5uaW5nIGFuIFJDVS1wcm90ZWN0ZWQgbGlua2VkIGxpc3QsIGFuZAoraXMgdGhlcmVmb3JlIHdpdGhpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBUaGVyZWZvcmUsCit0aGUgY2FsbGVkIGZ1bmN0aW9uIGhhcyBiZWVuIGludm9rZWQgd2l0aGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKK3NlY3Rpb24sIGFuZCBpcyBub3QgcGVybWl0dGVkIHRvIGJsb2NrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvYXJyYXlSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvYXJyYXlSQ1UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1M2ViZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvYXJyYXlSQ1UudHh0CkBAIC0wLDAgKzEsMTQxIEBACitVc2luZyBSQ1UgdG8gUHJvdGVjdCBSZWFkLU1vc3RseSBBcnJheXMKKworCitBbHRob3VnaCBSQ1UgaXMgbW9yZSBjb21tb25seSB1c2VkIHRvIHByb3RlY3QgbGlua2VkIGxpc3RzLCBpdCBjYW4KK2Fsc28gYmUgdXNlZCB0byBwcm90ZWN0IGFycmF5cy4gIFRocmVlIHNpdHVhdGlvbnMgYXJlIGFzIGZvbGxvd3M6CisKKzEuICBIYXNoIFRhYmxlcworCisyLiAgU3RhdGljIEFycmF5cworCiszLiAgUmVzaXplYWJsZSBBcnJheXMKKworRWFjaCBvZiB0aGVzZSBzaXR1YXRpb25zIGFyZSBkaXNjdXNzZWQgYmVsb3cuCisKKworU2l0dWF0aW9uIDE6IEhhc2ggVGFibGVzCisKK0hhc2ggdGFibGVzIGFyZSBvZnRlbiBpbXBsZW1lbnRlZCBhcyBhbiBhcnJheSwgd2hlcmUgZWFjaCBhcnJheSBlbnRyeQoraGFzIGEgbGlua2VkLWxpc3QgaGFzaCBjaGFpbi4gIEVhY2ggaGFzaCBjaGFpbiBjYW4gYmUgcHJvdGVjdGVkIGJ5IFJDVQorYXMgZGVzY3JpYmVkIGluIHRoZSBsaXN0UkNVLnR4dCBkb2N1bWVudC4gIFRoaXMgYXBwcm9hY2ggYWxzbyBhcHBsaWVzCit0byBvdGhlciBhcnJheS1vZi1saXN0IHNpdHVhdGlvbnMsIHN1Y2ggYXMgcmFkaXggdHJlZXMuCisKKworU2l0dWF0aW9uIDI6IFN0YXRpYyBBcnJheXMKKworU3RhdGljIGFycmF5cywgd2hlcmUgdGhlIGRhdGEgKHJhdGhlciB0aGFuIGEgcG9pbnRlciB0byB0aGUgZGF0YSkgaXMKK2xvY2F0ZWQgaW4gZWFjaCBhcnJheSBlbGVtZW50LCBhbmQgd2hlcmUgdGhlIGFycmF5IGlzIG5ldmVyIHJlc2l6ZWQsCitoYXZlIG5vdCBiZWVuIHVzZWQgd2l0aCBSQ1UuICBSaWsgdmFuIFJpZWwgcmVjb21tZW5kcyB1c2luZyBzZXFsb2NrIGluCit0aGlzIHNpdHVhdGlvbiwgd2hpY2ggd291bGQgYWxzbyBoYXZlIG1pbmltYWwgcmVhZC1zaWRlIG92ZXJoZWFkIGFzIGxvbmcKK2FzIHVwZGF0ZXMgYXJlIHJhcmUuCisKK1F1aWNrIFF1aXo6ICBXaHkgaXMgaXQgc28gaW1wb3J0YW50IHRoYXQgdXBkYXRlcyBiZSByYXJlIHdoZW4KKwkgICAgIHVzaW5nIHNlcWxvY2s/CisKKworU2l0dWF0aW9uIDM6IFJlc2l6ZWFibGUgQXJyYXlzCisKK1VzZSBvZiBSQ1UgZm9yIHJlc2l6ZWFibGUgYXJyYXlzIGlzIGRlbW9uc3RyYXRlZCBieSB0aGUgZ3Jvd19hcnkoKQorZnVuY3Rpb24gdXNlZCBieSB0aGUgU3lzdGVtIFYgSVBDIGNvZGUuICBUaGUgYXJyYXkgaXMgdXNlZCB0byBtYXAgZnJvbQorc2VtYXBob3JlLCBtZXNzYWdlLXF1ZXVlLCBhbmQgc2hhcmVkLW1lbW9yeSBJRHMgdG8gdGhlIGRhdGEgc3RydWN0dXJlCit0aGF0IHJlcHJlc2VudHMgdGhlIGNvcnJlc3BvbmRpbmcgSVBDIGNvbnN0cnVjdC4gIFRoZSBncm93X2FyeSgpCitmdW5jdGlvbiBkb2VzIG5vdCBhY3F1aXJlIGFueSBsb2NrczsgaW5zdGVhZCBpdHMgY2FsbGVyIG11c3QgaG9sZCB0aGUKK2lkcy0+c2VtIHNlbWFwaG9yZS4KKworVGhlIGdyb3dfYXJ5KCkgZnVuY3Rpb24sIHNob3duIGJlbG93LCBkb2VzIHNvbWUgbGltaXQgY2hlY2tzLCBhbGxvY2F0ZXMgYQorbmV3IGlwY19pZF9hcnksIGNvcGllcyB0aGUgb2xkIHRvIHRoZSBuZXcgcG9ydGlvbiBvZiB0aGUgbmV3LCBpbml0aWFsaXplcwordGhlIHJlbWFpbmRlciBvZiB0aGUgbmV3LCB1cGRhdGVzIHRoZSBpZHMtPmVudHJpZXMgcG9pbnRlciB0byBwb2ludCB0bwordGhlIG5ldyBhcnJheSwgYW5kIGludm9rZXMgaXBjX3JjdV9wdXRyZWYoKSB0byBmcmVlIHVwIHRoZSBvbGQgYXJyYXkuCitOb3RlIHRoYXQgcmN1X2Fzc2lnbl9wb2ludGVyKCkgaXMgdXNlZCB0byB1cGRhdGUgdGhlIGlkcy0+ZW50cmllcyBwb2ludGVyLAord2hpY2ggaW5jbHVkZXMgYW55IG1lbW9yeSBiYXJyaWVycyByZXF1aXJlZCBvbiB3aGF0ZXZlciBhcmNoaXRlY3R1cmUKK3lvdSBhcmUgcnVubmluZyBvbi4KKworCXN0YXRpYyBpbnQgZ3Jvd19hcnkoc3RydWN0IGlwY19pZHMqIGlkcywgaW50IG5ld3NpemUpCisJeworCQlzdHJ1Y3QgaXBjX2lkX2FyeSogbmV3OworCQlzdHJ1Y3QgaXBjX2lkX2FyeSogb2xkOworCQlpbnQgaTsKKwkJaW50IHNpemUgPSBpZHMtPmVudHJpZXMtPnNpemU7CisKKwkJaWYobmV3c2l6ZSA+IElQQ01OSSkKKwkJCW5ld3NpemUgPSBJUENNTkk7CisJCWlmKG5ld3NpemUgPD0gc2l6ZSkKKwkJCXJldHVybiBuZXdzaXplOworCisJCW5ldyA9IGlwY19yY3VfYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXJuX2lwY19wZXJtICopKm5ld3NpemUgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGlwY19pZF9hcnkpKTsKKwkJaWYobmV3ID09IE5VTEwpCisJCQlyZXR1cm4gc2l6ZTsKKwkJbmV3LT5zaXplID0gbmV3c2l6ZTsKKwkJbWVtY3B5KG5ldy0+cCwgaWRzLT5lbnRyaWVzLT5wLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBrZXJuX2lwY19wZXJtICopKnNpemUgKworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpcGNfaWRfYXJ5KSk7CisJCWZvcihpPXNpemU7aTxuZXdzaXplO2krKykgeworCQkJbmV3LT5wW2ldID0gTlVMTDsKKwkJfQorCQlvbGQgPSBpZHMtPmVudHJpZXM7CisKKwkJLyoKKwkJICogVXNlIHJjdV9hc3NpZ25fcG9pbnRlcigpIHRvIG1ha2Ugc3VyZSB0aGUgbWVtY3B5ZWQKKwkJICogY29udGVudHMgb2YgdGhlIG5ldyBhcnJheSBhcmUgdmlzaWJsZSBiZWZvcmUgdGhlIG5ldworCQkgKiBhcnJheSBiZWNvbWVzIHZpc2libGUuCisJCSAqLworCQlyY3VfYXNzaWduX3BvaW50ZXIoaWRzLT5lbnRyaWVzLCBuZXcpOworCisJCWlwY19yY3VfcHV0cmVmKG9sZCk7CisJCXJldHVybiBuZXdzaXplOworCX0KKworVGhlIGlwY19yY3VfcHV0cmVmKCkgZnVuY3Rpb24gZGVjcmVtZW50cyB0aGUgYXJyYXkncyByZWZlcmVuY2UgY291bnQKK2FuZCB0aGVuLCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGhhcyBkcm9wcGVkIHRvIHplcm8sIHVzZXMgY2FsbF9yY3UoKQordG8gZnJlZSB0aGUgYXJyYXkgYWZ0ZXIgYSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuCisKK1RoZSBhcnJheSBpcyB0cmF2ZXJzZWQgYnkgdGhlIGlwY19sb2NrKCkgZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uCitpbmRleGVzIGludG8gdGhlIGFycmF5IHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIHJjdV9yZWFkX2xvY2soKSwKK3VzaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHRvIHBpY2sgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIGFycmF5IHNvCit0aGF0IGl0IG1heSBsYXRlciBzYWZlbHkgYmUgZGVyZWZlcmVuY2VkIC0tIG1lbW9yeSBiYXJyaWVycyBhcmUKK3JlcXVpcmVkIG9uIHRoZSBBbHBoYSBDUFUuICBTaW5jZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgaXMgc3RvcmVkCit3aXRoIHRoZSBhcnJheSBpdHNlbGYsIHRoZXJlIGNhbiBiZSBubyBhcnJheS1zaXplIG1pc21hdGNoZXMsIHNvCithIHNpbXBsZSBjaGVjayBzdWZmaWNlcy4gIFRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZwordG8gdGhlIGRlc2lyZWQgSVBDIG9iamVjdCBpcyBwbGFjZWQgaW4gIm91dCIsIHdpdGggTlVMTCBpbmRpY2F0aW5nCithIG5vbi1leGlzdGVudCBlbnRyeS4gIEFmdGVyIGFjcXVpcmluZyAib3V0LT5sb2NrIiwgdGhlICJvdXQtPmRlbGV0ZWQiCitmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoZSBJUEMgb2JqZWN0IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nCitkZWxldGVkLCBhbmQsIGlmIG5vdCwgdGhlIHBvaW50ZXIgaXMgcmV0dXJuZWQuCisKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSogaXBjX2xvY2soc3RydWN0IGlwY19pZHMqIGlkcywgaW50IGlkKQorCXsKKwkJc3RydWN0IGtlcm5faXBjX3Blcm0qIG91dDsKKwkJaW50IGxpZCA9IGlkICUgU0VRX01VTFRJUExJRVI7CisJCXN0cnVjdCBpcGNfaWRfYXJ5KiBlbnRyaWVzOworCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJZW50cmllcyA9IHJjdV9kZXJlZmVyZW5jZShpZHMtPmVudHJpZXMpOworCQlpZihsaWQgPj0gZW50cmllcy0+c2l6ZSkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlvdXQgPSBlbnRyaWVzLT5wW2xpZF07CisJCWlmKG91dCA9PSBOVUxMKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXNwaW5fbG9jaygmb3V0LT5sb2NrKTsKKworCQkvKiBpcGNfcm1pZCgpIG1heSBoYXZlIGFscmVhZHkgZnJlZWQgdGhlIElEIHdoaWxlIGlwY19sb2NrCisJCSAqIHdhcyBzcGlubmluZzogaGVyZSB2ZXJpZnkgdGhhdCB0aGUgc3RydWN0dXJlIGlzIHN0aWxsIHZhbGlkCisJCSAqLworCQlpZiAob3V0LT5kZWxldGVkKSB7CisJCQlzcGluX3VubG9jaygmb3V0LT5sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcmV0dXJuIG91dDsKKwl9CisKKworQW5zd2VyIHRvIFF1aWNrIFF1aXo6CisKKwlUaGUgcmVhc29uIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRoYXQgdXBkYXRlcyBiZSByYXJlIHdoZW4KKwl1c2luZyBzZXFsb2NrIGlzIHRoYXQgZnJlcXVlbnQgdXBkYXRlcyBjYW4gbGl2ZWxvY2sgcmVhZGVycy4KKwlPbmUgd2F5IHRvIGF2b2lkIHRoaXMgcHJvYmxlbSBpcyB0byBhc3NpZ24gYSBzZXFsb2NrIGZvcgorCWVhY2ggYXJyYXkgZW50cnkgcmF0aGVyIHRoYW4gdG8gdGhlIGVudGlyZSBhcnJheS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTU2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CkBAIC0wLDAgKzEsMTU3IEBACitSZXZpZXcgQ2hlY2tsaXN0IGZvciBSQ1UgUGF0Y2hlcworCisKK1RoaXMgZG9jdW1lbnQgY29udGFpbnMgYSBjaGVja2xpc3QgZm9yIHByb2R1Y2luZyBhbmQgcmV2aWV3aW5nIHBhdGNoZXMKK3RoYXQgbWFrZSB1c2Ugb2YgUkNVLiAgVmlvbGF0aW5nIGFueSBvZiB0aGUgcnVsZXMgbGlzdGVkIGJlbG93IHdpbGwKK3Jlc3VsdCBpbiB0aGUgc2FtZSBzb3J0cyBvZiBwcm9ibGVtcyB0aGF0IGxlYXZpbmcgb3V0IGEgbG9ja2luZyBwcmltaXRpdmUKK3dvdWxkIGNhdXNlLiAgVGhpcyBsaXN0IGlzIGJhc2VkIG9uIGV4cGVyaWVuY2VzIHJldmlld2luZyBzdWNoIHBhdGNoZXMKK292ZXIgYSByYXRoZXIgbG9uZyBwZXJpb2Qgb2YgdGltZSwgYnV0IGltcHJvdmVtZW50cyBhcmUgYWx3YXlzIHdlbGNvbWUhCisKKzAuCUlzIFJDVSBiZWluZyBhcHBsaWVkIHRvIGEgcmVhZC1tb3N0bHkgc2l0dWF0aW9uPyAgSWYgdGhlIGRhdGEKKwlzdHJ1Y3R1cmUgaXMgdXBkYXRlZCBtb3JlIHRoYW4gYWJvdXQgMTAlIG9mIHRoZSB0aW1lLCB0aGVuCisJeW91IHNob3VsZCBzdHJvbmdseSBjb25zaWRlciBzb21lIG90aGVyIGFwcHJvYWNoLCB1bmxlc3MKKwlkZXRhaWxlZCBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgc2hvdyB0aGF0IFJDVSBpcyBub25ldGhlbGVzcworCXRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLgorCisJVGhlIG90aGVyIGV4Y2VwdGlvbiB3b3VsZCBiZSB3aGVyZSBwZXJmb3JtYW5jZSBpcyBub3QgYW4gaXNzdWUsCisJYW5kIFJDVSBwcm92aWRlcyBhIHNpbXBsZXIgaW1wbGVtZW50YXRpb24uICBBbiBleGFtcGxlIG9mIHRoaXMKKwlzaXR1YXRpb24gaXMgdGhlIGR5bmFtaWMgTk1JIGNvZGUgaW4gdGhlIExpbnV4IDIuNiBrZXJuZWwsCisJYXQgbGVhc3Qgb24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBOTUlzIGFyZSByYXJlLgorCisxLglEb2VzIHRoZSB1cGRhdGUgY29kZSBoYXZlIHByb3BlciBtdXR1YWwgZXhjbHVzaW9uPworCisJUkNVIGRvZXMgYWxsb3cgLXJlYWRlcnMtIHRvIHJ1biAoYWxtb3N0KSBuYWtlZCwgYnV0IC13cml0ZXJzLSBtdXN0CisJc3RpbGwgdXNlIHNvbWUgc29ydCBvZiBtdXR1YWwgZXhjbHVzaW9uLCBzdWNoIGFzOgorCisJYS4JbG9ja2luZywKKwliLglhdG9taWMgb3BlcmF0aW9ucywgb3IKKwljLglyZXN0cmljdGluZyB1cGRhdGVzIHRvIGEgc2luZ2xlIHRhc2suCisKKwlJZiB5b3UgY2hvb3NlICNiLCBiZSBwcmVwYXJlZCB0byBkZXNjcmliZSBob3cgeW91IGhhdmUgaGFuZGxlZAorCW1lbW9yeSBiYXJyaWVycyBvbiB3ZWFrbHkgb3JkZXJlZCBtYWNoaW5lcyAocHJldHR5IG11Y2ggYWxsIG9mCisJdGhlbSAtLSBldmVuIHg4NiBhbGxvd3MgcmVhZHMgdG8gYmUgcmVvcmRlcmVkKSwgYW5kIGJlIHByZXBhcmVkCisJdG8gZXhwbGFpbiB3aHkgdGhpcyBhZGRlZCBjb21wbGV4aXR5IGlzIHdvcnRod2hpbGUuICBJZiB5b3UKKwljaG9vc2UgI2MsIGJlIHByZXBhcmVkIHRvIGV4cGxhaW4gaG93IHRoaXMgc2luZ2xlIHRhc2sgZG9lcyBub3QKKwliZWNvbWUgYSBtYWpvciBib3R0bGVuZWNrIG9uIGJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcy4KKworMi4JRG8gdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgbWFrZSBwcm9wZXIgdXNlIG9mCisJcmN1X3JlYWRfbG9jaygpIGFuZCBmcmllbmRzPyAgVGhlc2UgcHJpbWl0aXZlcyBhcmUgbmVlZGVkCisJdG8gc3VwcHJlc3MgcHJlZW1wdGlvbiAob3IgYm90dG9tIGhhbHZlcywgaW4gdGhlIGNhc2Ugb2YKKwlyY3VfcmVhZF9sb2NrX2JoKCkpIGluIHRoZSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsCisJYW5kIGFyZSBhbHNvIGFuIGV4Y2VsbGVudCBhaWQgdG8gcmVhZGFiaWxpdHkuCisKKzMuCURvZXMgdGhlIHVwZGF0ZSBjb2RlIHRvbGVyYXRlIGNvbmN1cnJlbnQgYWNjZXNzZXM/CisKKwlUaGUgd2hvbGUgcG9pbnQgb2YgUkNVIGlzIHRvIHBlcm1pdCByZWFkZXJzIHRvIHJ1biB3aXRob3V0CisJYW55IGxvY2tzIG9yIGF0b21pYyBvcGVyYXRpb25zLiAgVGhpcyBtZWFucyB0aGF0IHJlYWRlcnMgd2lsbAorCWJlIHJ1bm5pbmcgd2hpbGUgdXBkYXRlcyBhcmUgaW4gcHJvZ3Jlc3MuICBUaGVyZSBhcmUgYSBudW1iZXIKKwlvZiB3YXlzIHRvIGhhbmRsZSB0aGlzIGNvbmN1cnJlbmN5LCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbjoKKworCWEuCU1ha2UgdXBkYXRlcyBhcHBlYXIgYXRvbWljIHRvIHJlYWRlcnMuICBGb3IgZXhhbXBsZSwKKwkJcG9pbnRlciB1cGRhdGVzIHRvIHByb3Blcmx5IGFsaWduZWQgZmllbGRzIHdpbGwgYXBwZWFyCisJCWF0b21pYywgYXMgd2lsbCBpbmRpdmlkdWFsIGF0b21pYyBwcmltaXRpdmVzLiAgT3BlcmF0aW9ucworCQlwZXJmb3JtZWQgdW5kZXIgYSBsb2NrIGFuZCBzZXF1ZW5jZXMgb2YgbXVsdGlwbGUgYXRvbWljCisJCXByaW1pdGl2ZXMgd2lsbCAtbm90LSBhcHBlYXIgdG8gYmUgYXRvbWljLgorCisJCVRoaXMgaXMgYWxtb3N0IGFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC4KKworCWIuCUNhcmVmdWxseSBvcmRlciB0aGUgdXBkYXRlcyBhbmQgdGhlIHJlYWRzIHNvIHRoYXQKKwkJcmVhZGVycyBzZWUgdmFsaWQgZGF0YSBhdCBhbGwgcGhhc2VzIG9mIHRoZSB1cGRhdGUuCisJCVRoaXMgaXMgb2Z0ZW4gbW9yZSBkaWZmaWN1bHQgdGhhbiBpdCBzb3VuZHMsIGVzcGVjaWFsbHkKKwkJZ2l2ZW4gbW9kZXJuIENQVXMnIHRlbmRlbmN5IHRvIHJlb3JkZXIgbWVtb3J5IHJlZmVyZW5jZXMuCisJCU9uZSBtdXN0IHVzdWFsbHkgbGliZXJhbGx5IHNwcmlua2xlIG1lbW9yeSBiYXJyaWVycworCQkoc21wX3dtYigpLCBzbXBfcm1iKCksIHNtcF9tYigpKSB0aHJvdWdoIHRoZSBjb2RlLAorCQltYWtpbmcgaXQgZGlmZmljdWx0IHRvIHVuZGVyc3RhbmQgYW5kIHRvIHRlc3QuCisKKwkJSXQgaXMgdXN1YWxseSBiZXR0ZXIgdG8gZ3JvdXAgdGhlIGNoYW5naW5nIGRhdGEgaW50bworCQlhIHNlcGFyYXRlIHN0cnVjdHVyZSwgc28gdGhhdCB0aGUgY2hhbmdlIG1heSBiZSBtYWRlCisJCXRvIGFwcGVhciBhdG9taWMgYnkgdXBkYXRpbmcgYSBwb2ludGVyIHRvIHJlZmVyZW5jZQorCQlhIG5ldyBzdHJ1Y3R1cmUgY29udGFpbmluZyB1cGRhdGVkIHZhbHVlcy4KKworNC4JV2Vha2x5IG9yZGVyZWQgQ1BVcyBwb3NlIHNwZWNpYWwgY2hhbGxlbmdlcy4gIEFsbW9zdCBhbGwgQ1BVcworCWFyZSB3ZWFrbHkgb3JkZXJlZCAtLSBldmVuIGkzODYgQ1BVcyBhbGxvdyByZWFkcyB0byBiZSByZW9yZGVyZWQuCisJUkNVIGNvZGUgbXVzdCB0YWtlIGFsbCBvZiB0aGUgZm9sbG93aW5nIG1lYXN1cmVzIHRvIHByZXZlbnQKKwltZW1vcnktY29ycnVwdGlvbiBwcm9ibGVtczoKKworCWEuCVJlYWRlcnMgbXVzdCBtYWludGFpbiBwcm9wZXIgb3JkZXJpbmcgb2YgdGhlaXIgbWVtb3J5CisJCWFjY2Vzc2VzLiAgVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBlbnN1cmVzIHRoYXQKKwkJdGhlIENQVSBwaWNrcyB1cCB0aGUgcG9pbnRlciBiZWZvcmUgaXQgcGlja3MgdXAgdGhlIGRhdGEKKwkJdGhhdCB0aGUgcG9pbnRlciBwb2ludHMgdG8uICBUaGlzIHJlYWxseSBpcyBuZWNlc3NhcnkKKwkJb24gQWxwaGEgQ1BVcy4JSWYgeW91IGRvbid0IGJlbGlldmUgbWUsIHNlZToKKworCQkJaHR0cDovL3d3dy5vcGVudm1zLmNvbXBhcS5jb20vd2l6YXJkL3dpel8yNjM3Lmh0bWwKKworCQlUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGlzIGFsc28gYW4gZXhjZWxsZW50CisJCWRvY3VtZW50YXRpb24gYWlkLCBsZXR0aW5nIHRoZSBwZXJzb24gcmVhZGluZyB0aGUgY29kZQorCQlrbm93IGV4YWN0bHkgd2hpY2ggcG9pbnRlcnMgYXJlIHByb3RlY3RlZCBieSBSQ1UuCisKKwkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyB1c2VkIGJ5IHRoZSB2YXJpb3VzCisJCSJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2ggYXMgdGhlCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuCisKKwliLglJZiB0aGUgbGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsIHRoZSBsaXN0X2RlbF9yY3UoKSwKKwkJbGlzdF9hZGRfdGFpbF9yY3UoKSwgYW5kIGxpc3RfZGVsX3JjdSgpIHByaW1pdGl2ZXMgbXVzdAorCQliZSB1c2VkIGluIG9yZGVyIHRvIHByZXZlbnQgd2Vha2x5IG9yZGVyZWQgbWFjaGluZXMgZnJvbQorCQltaXNvcmRlcmluZyBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gYW5kIHBvaW50ZXIgcGxhbnRpbmcuCisJCVNpbWlsYXJseSwgaWYgdGhlIGhsaXN0IG1hY3JvcyBhcmUgYmVpbmcgdXNlZCwgdGhlCisJCWhsaXN0X2RlbF9yY3UoKSBhbmQgaGxpc3RfYWRkX2hlYWRfcmN1KCkgcHJpbWl0aXZlcworCQlhcmUgcmVxdWlyZWQuCisKKwljLglVcGRhdGVzIG11c3QgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgYSBnaXZlbgorCQlzdHJ1Y3R1cmUgaGFwcGVucyBiZWZvcmUgcG9pbnRlcnMgdG8gdGhhdCBzdHJ1Y3R1cmUgYXJlCisJCXB1YmxpY2l6ZWQuICBVc2UgdGhlIHJjdV9hc3NpZ25fcG9pbnRlcigpIHByaW1pdGl2ZQorCQl3aGVuIHB1YmxpY2l6aW5nIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSB0aGF0IGNhbgorCQliZSB0cmF2ZXJzZWQgYnkgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCisJCVtUaGUgcmN1X2Fzc2lnbl9wb2ludGVyKCkgcHJpbWl0aXZlIGlzIGluIHByb2Nlc3MuXQorCis1LglJZiBjYWxsX3JjdSgpLCBvciBhIHJlbGF0ZWQgcHJpbWl0aXZlIHN1Y2ggYXMgY2FsbF9yY3VfYmgoKSwKKwlpcyB1c2VkLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCBiZSB3cml0dGVuIHRvIGJlIGNhbGxlZAorCWZyb20gc29mdGlycSBjb250ZXh0LiAgSW4gcGFydGljdWxhciwgaXQgY2Fubm90IGJsb2NrLgorCis2LglTaW5jZSBzeW5jaHJvbml6ZV9rZXJuZWwoKSBibG9ja3MsIGl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbQorCWFueSBzb3J0IG9mIGlycSBjb250ZXh0LgorCis3LglJZiB0aGUgdXBkYXRlciB1c2VzIGNhbGxfcmN1KCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycworCW11c3QgdXNlIHJjdV9yZWFkX2xvY2soKSBhbmQgcmN1X3JlYWRfdW5sb2NrKCkuICBJZiB0aGUgdXBkYXRlcgorCXVzZXMgY2FsbF9yY3VfYmgoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QgdXNlCisJcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKS4gIE1peGluZyB0aGluZ3MgdXAKKwl3aWxsIHJlc3VsdCBpbiBjb25mdXNpb24gYW5kIGJyb2tlbiBrZXJuZWxzLgorCisJT25lIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IHJjdV9yZWFkX2xvY2soKSBhbmQgcmN1X3JlYWRfdW5sb2NrKCkKKwltYXkgYmUgc3Vic3RpdHV0ZWQgZm9yIHJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkKKwlpbiBjYXNlcyB3aGVyZSBsb2NhbCBib3R0b20gaGFsdmVzIGFyZSBhbHJlYWR5IGtub3duIHRvIGJlCisJZGlzYWJsZWQsIGZvciBleGFtcGxlLCBpbiBpcnEgb3Igc29mdGlycSBjb250ZXh0LiAgQ29tbWVudGluZworCXN1Y2ggY2FzZXMgaXMgYSBtdXN0LCBvZiBjb3Vyc2UhICBBbmQgdGhlIGp1cnkgaXMgc3RpbGwgb3V0IG9uCisJd2hldGhlciB0aGUgaW5jcmVhc2VkIHNwZWVkIGlzIHdvcnRoIGl0LgorCis4LglBbHRob3VnaCBzeW5jaHJvbml6ZV9rZXJuZWwoKSBpcyBhIGJpdCBzbG93ZXIgdGhhbiBpcyBjYWxsX3JjdSgpLAorCWl0IHVzdWFsbHkgcmVzdWx0cyBpbiBzaW1wbGVyIGNvZGUuICBTbywgdW5sZXNzIHVwZGF0ZSBwZXJmb3JtYW5jZQorCWlzIGltcG9ydGFudCBvciB0aGUgdXBkYXRlcnMgY2Fubm90IGJsb2NrLCBzeW5jaHJvbml6ZV9rZXJuZWwoKQorCXNob3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gY2FsbF9yY3UoKS4KKworOS4JQWxsIFJDVSBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzLCB3aGljaCBpbmNsdWRlCisJbGlzdF9mb3JfZWFjaF9yY3UoKSwgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKSwKKwlsaXN0X2Zvcl9lYWNoX2NvbnRpbnVlX3JjdSgpLCBhbmQgbGlzdF9mb3JfZWFjaF9zYWZlX3JjdSgpLAorCW11c3QgYmUgd2l0aGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFJDVQorCXJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBhcmUgZGVsaW1pdGVkIGJ5IHJjdV9yZWFkX2xvY2soKQorCWFuZCByY3VfcmVhZF91bmxvY2soKSwgb3IgYnkgc2ltaWxhciBwcmltaXRpdmVzIHN1Y2ggYXMKKwlyY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpLgorCisJVXNlIG9mIHRoZSBfcmN1KCkgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcyBvdXRzaWRlIG9mIGFuCisJUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGNhdXNlcyBubyBoYXJtIG90aGVyIHRoYW4KKwlhIHNsaWdodCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBvbiBBbHBoYSBDUFVzIGFuZCBzb21lCisJY29uZnVzaW9uIG9uIHRoZSBwYXJ0IG9mIHBlb3BsZSB0cnlpbmcgdG8gcmVhZCB0aGUgY29kZS4KKworCUFub3RoZXIgd2F5IG9mIHRoaW5raW5nIG9mIHRoaXMgaXMgIklmIHlvdSBhcmUgaG9sZGluZyB0aGUKKwlsb2NrIHRoYXQgcHJldmVudHMgdGhlIGRhdGEgc3RydWN0dXJlIGZyb20gY2hhbmdpbmcsIHdoeSBkbworCXlvdSBhbHNvIG5lZWQgUkNVLWJhc2VkIHByb3RlY3Rpb24/IiAgVGhhdCBzYWlkLCB0aGVyZSBtYXkKKwl3ZWxsIGJlIHNpdHVhdGlvbnMgd2hlcmUgdXNlIG9mIHRoZSBfcmN1KCkgbGlzdC10cmF2ZXJzYWwKKwlwcmltaXRpdmVzIHdoaWxlIHRoZSB1cGRhdGUtc2lkZSBsb2NrIGlzIGhlbGQgcmVzdWx0cyBpbgorCXNpbXBsZXIgYW5kIG1vcmUgbWFpbnRhaW5hYmxlIGNvZGUuICBUaGUganVyeSBpcyBzdGlsbCBvdXQKKwlvbiB0aGlzIHF1ZXN0aW9uLgorCisxMC4JQ29udmVyc2VseSwgaWYgeW91IGFyZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sCisJeW91IC1tdXN0LSB1c2UgdGhlICJfcmN1KCkiIHZhcmlhbnRzIG9mIHRoZSBsaXN0IG1hY3Jvcy4KKwlGYWlsaW5nIHRvIGRvIHNvIHdpbGwgYnJlYWsgQWxwaGEgYW5kIGNvbmZ1c2UgcGVvcGxlIHJlYWRpbmcKKwl5b3VyIGNvZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYTZlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dApAQCAtMCwwICsxLDMwNyBAQAorVXNpbmcgUkNVIHRvIFByb3RlY3QgUmVhZC1Nb3N0bHkgTGlua2VkIExpc3RzCisKKworT25lIG9mIHRoZSBiZXN0IGFwcGxpY2F0aW9ucyBvZiBSQ1UgaXMgdG8gcHJvdGVjdCByZWFkLW1vc3RseSBsaW5rZWQgbGlzdHMKKygic3RydWN0IGxpc3RfaGVhZCIgaW4gbGlzdC5oKS4gIE9uZSBiaWcgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2gKK2lzIHRoYXQgYWxsIG9mIHRoZSByZXF1aXJlZCBtZW1vcnkgYmFycmllcnMgYXJlIGluY2x1ZGVkIGZvciB5b3UgaW4KK3RoZSBsaXN0IG1hY3Jvcy4gIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHNldmVyYWwgYXBwbGljYXRpb25zIG9mIFJDVSwKK3dpdGggdGhlIGJlc3QgZml0cyBmaXJzdC4KKworCitFeGFtcGxlIDE6IFJlYWQtU2lkZSBBY3Rpb24gVGFrZW4gT3V0c2lkZSBvZiBMb2NrLCBObyBJbi1QbGFjZSBVcGRhdGVzCisKK1RoZSBiZXN0IGFwcGxpY2F0aW9ucyBhcmUgY2FzZXMgd2hlcmUsIGlmIHJlYWRlci13cml0ZXIgbG9ja2luZyB3ZXJlCit1c2VkLCB0aGUgcmVhZC1zaWRlIGxvY2sgd291bGQgYmUgZHJvcHBlZCBiZWZvcmUgdGFraW5nIGFueSBhY3Rpb24KK2Jhc2VkIG9uIHRoZSByZXN1bHRzIG9mIHRoZSBzZWFyY2guICBUaGUgbW9zdCBjZWxlYnJhdGVkIGV4YW1wbGUgaXMKK3RoZSByb3V0aW5nIHRhYmxlLiAgQmVjYXVzZSB0aGUgcm91dGluZyB0YWJsZSBpcyB0cmFja2luZyB0aGUgc3RhdGUgb2YKK2VxdWlwbWVudCBvdXRzaWRlIG9mIHRoZSBjb21wdXRlciwgaXQgd2lsbCBhdCB0aW1lcyBjb250YWluIHN0YWxlIGRhdGEuCitUaGVyZWZvcmUsIG9uY2UgdGhlIHJvdXRlIGhhcyBiZWVuIGNvbXB1dGVkLCB0aGVyZSBpcyBubyBuZWVkIHRvIGhvbGQKK3RoZSByb3V0aW5nIHRhYmxlIHN0YXRpYyBkdXJpbmcgdHJhbnNtaXNzaW9uIG9mIHRoZSBwYWNrZXQuICBBZnRlciBhbGwsCit5b3UgY2FuIGhvbGQgdGhlIHJvdXRpbmcgdGFibGUgc3RhdGljIGFsbCB5b3Ugd2FudCwgYnV0IHRoYXQgd29uJ3Qga2VlcAordGhlIGV4dGVybmFsIEludGVybmV0IGZyb20gY2hhbmdpbmcsIGFuZCBpdCBpcyB0aGUgc3RhdGUgb2YgdGhlIGV4dGVybmFsCitJbnRlcm5ldCB0aGF0IHJlYWxseSBtYXR0ZXJzLiAgSW4gYWRkaXRpb24sIHJvdXRpbmcgZW50cmllcyBhcmUgdHlwaWNhbGx5CithZGRlZCBvciBkZWxldGVkLCByYXRoZXIgdGhhbiBiZWluZyBtb2RpZmllZCBpbiBwbGFjZS4KKworQSBzdHJhaWdodGZvcndhcmQgZXhhbXBsZSBvZiB0aGlzIHVzZSBvZiBSQ1UgbWF5IGJlIGZvdW5kIGluIHRoZQorc3lzdGVtLWNhbGwgYXVkaXRpbmcgc3VwcG9ydC4gIEZvciBleGFtcGxlLCBhIHJlYWRlci13cml0ZXIgbG9ja2VkCitpbXBsZW1lbnRhdGlvbiBvZiBhdWRpdF9maWx0ZXJfdGFzaygpIG1pZ2h0IGJlIGFzIGZvbGxvd3M6CisKKwlzdGF0aWMgZW51bSBhdWRpdF9zdGF0ZSBhdWRpdF9maWx0ZXJfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKKwl7CisJCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKKwkJZW51bSBhdWRpdF9zdGF0ZSAgIHN0YXRlOworCisJCXJlYWRfbG9jaygmYXVkaXRzY19sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmYXVkaXRfdHNrbGlzdCwgbGlzdCkgeworCQkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCAmc3RhdGUpKSB7CisJCQkJcmVhZF91bmxvY2soJmF1ZGl0c2NfbG9jayk7CisJCQkJcmV0dXJuIHN0YXRlOworCQkJfQorCQl9CisJCXJlYWRfdW5sb2NrKCZhdWRpdHNjX2xvY2spOworCQlyZXR1cm4gQVVESVRfQlVJTERfQ09OVEVYVDsKKwl9CisKK0hlcmUgdGhlIGxpc3QgaXMgc2VhcmNoZWQgdW5kZXIgdGhlIGxvY2ssIGJ1dCB0aGUgbG9jayBpcyBkcm9wcGVkIGJlZm9yZQordGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgcmV0dXJuZWQuICBCeSB0aGUgdGltZSB0aGF0IHRoaXMgdmFsdWUgaXMgYWN0ZWQKK29uLCB0aGUgbGlzdCBtYXkgd2VsbCBoYXZlIGJlZW4gbW9kaWZpZWQuICBUaGlzIG1ha2VzIHNlbnNlLCBzaW5jZSBpZgoreW91IGFyZSB0dXJuaW5nIGF1ZGl0aW5nIG9mZiwgaXQgaXMgT0sgdG8gYXVkaXQgYSBmZXcgZXh0cmEgc3lzdGVtIGNhbGxzLgorCitUaGlzIG1lYW5zIHRoYXQgUkNVIGNhbiBiZSBlYXNpbHkgYXBwbGllZCB0byB0aGUgcmVhZCBzaWRlLCBhcyBmb2xsb3dzOgorCisJc3RhdGljIGVudW0gYXVkaXRfc3RhdGUgYXVkaXRfZmlsdGVyX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCisJeworCQlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CisJCWVudW0gYXVkaXRfc3RhdGUgICBzdGF0ZTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsICZhdWRpdF90c2tsaXN0LCBsaXN0KSB7CisJCQlpZiAoYXVkaXRfZmlsdGVyX3J1bGVzKHRzaywgJmUtPnJ1bGUsIE5VTEwsICZzdGF0ZSkpIHsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlyZXR1cm4gc3RhdGU7CisJCQl9CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiBBVURJVF9CVUlMRF9DT05URVhUOworCX0KKworVGhlIHJlYWRfbG9jaygpIGFuZCByZWFkX3VubG9jaygpIGNhbGxzIGhhdmUgYmVjb21lIHJjdV9yZWFkX2xvY2soKQorYW5kIHJjdV9yZWFkX3VubG9jaygpLCByZXNwZWN0aXZlbHksIGFuZCB0aGUgbGlzdF9mb3JfZWFjaF9lbnRyeSgpIGhhcworYmVjb21lIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuICBUaGUgX3JjdSgpIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMKK2luc2VydCB0aGUgcmVhZC1zaWRlIG1lbW9yeSBiYXJyaWVycyB0aGF0IGFyZSByZXF1aXJlZCBvbiBERUMgQWxwaGEgQ1BVcy4KKworVGhlIGNoYW5nZXMgdG8gdGhlIHVwZGF0ZSBzaWRlIGFyZSBhbHNvIHN0cmFpZ2h0Zm9yd2FyZC4gIEEgcmVhZGVyLXdyaXRlcgorbG9jayBtaWdodCBiZSB1c2VkIGFzIGZvbGxvd3MgZm9yIGRlbGV0aW9uIGFuZCBpbnNlcnRpb246CisKKwlzdGF0aWMgaW5saW5lIGludCBhdWRpdF9kZWxfcnVsZShzdHJ1Y3QgYXVkaXRfcnVsZSAqcnVsZSwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCisJeworCQlzdHJ1Y3QgYXVkaXRfZW50cnkgICplOworCisJCXdyaXRlX2xvY2soJmF1ZGl0c2NfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbGlzdCwgbGlzdCkgeworCQkJaWYgKCFhdWRpdF9jb21wYXJlX3J1bGUocnVsZSwgJmUtPnJ1bGUpKSB7CisJCQkJbGlzdF9kZWwoJmUtPmxpc3QpOworCQkJCXdyaXRlX3VubG9jaygmYXVkaXRzY19sb2NrKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQl3cml0ZV91bmxvY2soJmF1ZGl0c2NfbG9jayk7CisJCXJldHVybiAtRUZBVUxUOwkJLyogTm8gbWF0Y2hpbmcgcnVsZSAqLworCX0KKworCXN0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2FkZF9ydWxlKHN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnksCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorCXsKKwkJd3JpdGVfbG9jaygmYXVkaXRzY19sb2NrKTsKKwkJaWYgKGVudHJ5LT5ydWxlLmZsYWdzICYgQVVESVRfUFJFUEVORCkgeworCQkJZW50cnktPnJ1bGUuZmxhZ3MgJj0gfkFVRElUX1BSRVBFTkQ7CisJCQlsaXN0X2FkZCgmZW50cnktPmxpc3QsIGxpc3QpOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsIGxpc3QpOworCQl9CisJCXdyaXRlX3VubG9jaygmYXVkaXRzY19sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCitGb2xsb3dpbmcgYXJlIHRoZSBSQ1UgZXF1aXZhbGVudHMgZm9yIHRoZXNlIHR3byBmdW5jdGlvbnM6CisKKwlzdGF0aWMgaW5saW5lIGludCBhdWRpdF9kZWxfcnVsZShzdHJ1Y3QgYXVkaXRfcnVsZSAqcnVsZSwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCisJeworCQlzdHJ1Y3QgYXVkaXRfZW50cnkgICplOworCisJCS8qIERvIG5vdCB1c2UgdGhlIF9yY3UgaXRlcmF0b3IgaGVyZSwgc2luY2UgdGhpcyBpcyB0aGUgb25seQorCQkgKiBkZWxldGlvbiByb3V0aW5lLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKKwkJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsICZlLT5ydWxlKSkgeworCQkJCWxpc3RfZGVsX3JjdSgmZS0+bGlzdCk7CisJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gLUVGQVVMVDsJCS8qIE5vIG1hdGNoaW5nIHJ1bGUgKi8KKwl9CisKKwlzdGF0aWMgaW5saW5lIGludCBhdWRpdF9hZGRfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LAorCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKKwl7CisJCWlmIChlbnRyeS0+cnVsZS5mbGFncyAmIEFVRElUX1BSRVBFTkQpIHsKKwkJCWVudHJ5LT5ydWxlLmZsYWdzICY9IH5BVURJVF9QUkVQRU5EOworCQkJbGlzdF9hZGRfcmN1KCZlbnRyeS0+bGlzdCwgbGlzdCk7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsIGxpc3QpOworCQl9CisJCXJldHVybiAwOworCX0KKworTm9ybWFsbHksIHRoZSB3cml0ZV9sb2NrKCkgYW5kIHdyaXRlX3VubG9jaygpIHdvdWxkIGJlIHJlcGxhY2VkIGJ5CithIHNwaW5fbG9jaygpIGFuZCBhIHNwaW5fdW5sb2NrKCksIGJ1dCBpbiB0aGlzIGNhc2UsIGFsbCBjYWxsZXJzIGhvbGQKK2F1ZGl0X25ldGxpbmtfc2VtLCBzbyBubyBhZGRpdGlvbmFsIGxvY2tpbmcgaXMgcmVxdWlyZWQuICBUaGUgYXVkaXRzY19sb2NrCitjYW4gdGhlcmVmb3JlIGJlIGVsaW1pbmF0ZWQsIHNpbmNlIHVzZSBvZiBSQ1UgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IKK3dyaXRlcnMgdG8gZXhjbHVkZSByZWFkZXJzLgorCitUaGUgbGlzdF9kZWwoKSwgbGlzdF9hZGQoKSwgYW5kIGxpc3RfYWRkX3RhaWwoKSBwcmltaXRpdmVzIGhhdmUgYmVlbgorcmVwbGFjZWQgYnkgbGlzdF9kZWxfcmN1KCksIGxpc3RfYWRkX3JjdSgpLCBhbmQgbGlzdF9hZGRfdGFpbF9yY3UoKS4KK1RoZSBfcmN1KCkgbGlzdC1tYW5pcHVsYXRpb24gcHJpbWl0aXZlcyBhZGQgbWVtb3J5IGJhcnJpZXJzIHRoYXQgYXJlCituZWVkZWQgb24gd2Vha2x5IG9yZGVyZWQgQ1BVcyAobW9zdCBvZiB0aGVtISkuCisKK1NvLCB3aGVuIHJlYWRlcnMgY2FuIHRvbGVyYXRlIHN0YWxlIGRhdGEgYW5kIHdoZW4gZW50cmllcyBhcmUgZWl0aGVyIGFkZGVkCitvciBkZWxldGVkLCB3aXRob3V0IGluLXBsYWNlIG1vZGlmaWNhdGlvbiwgaXQgaXMgdmVyeSBlYXN5IHRvIHVzZSBSQ1UhCisKKworRXhhbXBsZSAyOiBIYW5kbGluZyBJbi1QbGFjZSBVcGRhdGVzCisKK1RoZSBzeXN0ZW0tY2FsbCBhdWRpdGluZyBjb2RlIGRvZXMgbm90IHVwZGF0ZSBhdWRpdGluZyBydWxlcyBpbiBwbGFjZS4KK0hvd2V2ZXIsIGlmIGl0IGRpZCwgcmVhZGVyLXdyaXRlci1sb2NrZWQgY29kZSB0byBkbyBzbyBtaWdodCBsb29rIGFzCitmb2xsb3dzIChwcmVzdW1hYmx5LCB0aGUgZmllbGRfY291bnQgaXMgb25seSBwZXJtaXR0ZWQgdG8gZGVjcmVhc2UsCitvdGhlcndpc2UsIHRoZSBhZGRlZCBmaWVsZHMgd291bGQgbmVlZCB0byBiZSBmaWxsZWQgaW4pOgorCisJc3RhdGljIGlubGluZSBpbnQgYXVkaXRfdXBkX3J1bGUoc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGUsCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCQkgX191MzIgbmV3YWN0aW9uLAorCQkJCQkgX191MzIgbmV3ZmllbGRfY291bnQpCisJeworCQlzdHJ1Y3QgYXVkaXRfZW50cnkgICplOworCQlzdHJ1Y3QgYXVkaXRfbmV3ZW50cnkgKm5lOworCisJCXdyaXRlX2xvY2soJmF1ZGl0c2NfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbGlzdCwgbGlzdCkgeworCQkJaWYgKCFhdWRpdF9jb21wYXJlX3J1bGUocnVsZSwgJmUtPnJ1bGUpKSB7CisJCQkJZS0+cnVsZS5hY3Rpb24gPSBuZXdhY3Rpb247CisJCQkJZS0+cnVsZS5maWxlX2NvdW50ID0gbmV3ZmllbGRfY291bnQ7CisJCQkJd3JpdGVfdW5sb2NrKCZhdWRpdHNjX2xvY2spOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCXdyaXRlX3VubG9jaygmYXVkaXRzY19sb2NrKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CQkvKiBObyBtYXRjaGluZyBydWxlICovCisJfQorCitUaGUgUkNVIHZlcnNpb24gY3JlYXRlcyBhIGNvcHksIHVwZGF0ZXMgdGhlIGNvcHksIHRoZW4gcmVwbGFjZXMgdGhlIG9sZAorZW50cnkgd2l0aCB0aGUgbmV3bHkgdXBkYXRlZCBlbnRyeS4gIFRoaXMgc2VxdWVuY2Ugb2YgYWN0aW9ucywgYWxsb3dpbmcKK2NvbmN1cnJlbnQgcmVhZHMgd2hpbGUgZG9pbmcgYSBjb3B5IHRvIHBlcmZvcm0gYW4gdXBkYXRlLCBpcyB3aGF0IGdpdmVzCitSQ1UgKCJyZWFkLWNvcHkgdXBkYXRlIikgaXRzIG5hbWUuICBUaGUgUkNVIGNvZGUgaXMgYXMgZm9sbG93czoKKworCXN0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X3VwZF9ydWxlKHN0cnVjdCBhdWRpdF9ydWxlICpydWxlLAorCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkJIF9fdTMyIG5ld2FjdGlvbiwKKwkJCQkJIF9fdTMyIG5ld2ZpZWxkX2NvdW50KQorCXsKKwkJc3RydWN0IGF1ZGl0X2VudHJ5ICAqZTsKKwkJc3RydWN0IGF1ZGl0X25ld2VudHJ5ICpuZTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKKwkJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsICZlLT5ydWxlKSkgeworCQkJCW5lID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKG5lID09IE5VTEwpCisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCWF1ZGl0X2NvcHlfcnVsZSgmbmUtPnJ1bGUsICZlLT5ydWxlKTsKKwkJCQluZS0+cnVsZS5hY3Rpb24gPSBuZXdhY3Rpb247CisJCQkJbmUtPnJ1bGUuZmlsZV9jb3VudCA9IG5ld2ZpZWxkX2NvdW50OworCQkJCWxpc3RfYWRkX3JjdShuZSwgZSk7CisJCQkJbGlzdF9kZWwoZSk7CisJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gLUVGQVVMVDsJCS8qIE5vIG1hdGNoaW5nIHJ1bGUgKi8KKwl9CisKK0FnYWluLCB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGhvbGRzIGF1ZGl0X25ldGxpbmtfc2VtLiAgTm9ybWFsbHksCit0aGUgcmVhZGVyLXdyaXRlciBsb2NrIHdvdWxkIGJlY29tZSBhIHNwaW5sb2NrIGluIHRoaXMgc29ydCBvZiBjb2RlLgorCisKK0V4YW1wbGUgMzogRWxpbWluYXRpbmcgU3RhbGUgRGF0YQorCitUaGUgYXVkaXRpbmcgZXhhbXBsZXMgYWJvdmUgdG9sZXJhdGUgc3RhbGUgZGF0YSwgYXMgZG8gbW9zdCBhbGdvcml0aG1zCit0aGF0IGFyZSB0cmFja2luZyBleHRlcm5hbCBzdGF0ZS4gIEJlY2F1c2UgdGhlcmUgaXMgYSBkZWxheSBmcm9tIHRoZQordGltZSB0aGUgZXh0ZXJuYWwgc3RhdGUgY2hhbmdlcyBiZWZvcmUgTGludXggYmVjb21lcyBhd2FyZSBvZiB0aGUgY2hhbmdlLAorYWRkaXRpb25hbCBSQ1UtaW5kdWNlZCBzdGFsZW5lc3MgaXMgbm9ybWFsbHkgbm90IGEgcHJvYmxlbS4KKworSG93ZXZlciwgdGhlcmUgYXJlIG1hbnkgZXhhbXBsZXMgd2hlcmUgc3RhbGUgZGF0YSBjYW5ub3QgYmUgdG9sZXJhdGVkLgorT25lIGV4YW1wbGUgaW4gdGhlIExpbnV4IGtlcm5lbCBpcyB0aGUgU3lzdGVtIFYgSVBDIChzZWUgdGhlIGlwY19sb2NrKCkKK2Z1bmN0aW9uIGluIGlwYy91dGlsLmMpLiAgVGhpcyBjb2RlIGNoZWNrcyBhICJkZWxldGVkIiBmbGFnIHVuZGVyIGEKK3Blci1lbnRyeSBzcGlubG9jaywgYW5kLCBpZiB0aGUgImRlbGV0ZWQiIGZsYWcgaXMgc2V0LCBwcmV0ZW5kcyB0aGF0IHRoZQorZW50cnkgZG9lcyBub3QgZXhpc3QuICBGb3IgdGhpcyB0byBiZSBoZWxwZnVsLCB0aGUgc2VhcmNoIGZ1bmN0aW9uIG11c3QKK3JldHVybiBob2xkaW5nIHRoZSBwZXItZW50cnkgc3BpbmxvY2ssIGFzIGlwY19sb2NrKCkgZG9lcyBpbiBmYWN0IGRvLgorCitRdWljayBRdWl6OiAgV2h5IGRvZXMgdGhlIHNlYXJjaCBmdW5jdGlvbiBuZWVkIHRvIHJldHVybiBob2xkaW5nIHRoZQorcGVyLWVudHJ5IGxvY2sgZm9yIHRoaXMgZGVsZXRlZC1mbGFnIHRlY2huaXF1ZSB0byBiZSBoZWxwZnVsPworCitJZiB0aGUgc3lzdGVtLWNhbGwgYXVkaXQgbW9kdWxlIHdlcmUgdG8gZXZlciBuZWVkIHRvIHJlamVjdCBzdGFsZSBkYXRhLAorb25lIHdheSB0byBhY2NvbXBsaXNoIHRoaXMgd291bGQgYmUgdG8gYWRkIGEgImRlbGV0ZWQiIGZsYWcgYW5kIGEgImxvY2siCitzcGlubG9jayB0byB0aGUgYXVkaXRfZW50cnkgc3RydWN0dXJlLCBhbmQgbW9kaWZ5IGF1ZGl0X2ZpbHRlcl90YXNrKCkKK2FzIGZvbGxvd3M6CisKKwlzdGF0aWMgZW51bSBhdWRpdF9zdGF0ZSBhdWRpdF9maWx0ZXJfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKKwl7CisJCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKKwkJZW51bSBhdWRpdF9zdGF0ZSAgIHN0YXRlOworCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmF1ZGl0X3Rza2xpc3QsIGxpc3QpIHsKKwkJCWlmIChhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgTlVMTCwgJnN0YXRlKSkgeworCQkJCXNwaW5fbG9jaygmZS0+bG9jayk7CisJCQkJaWYgKGUtPmRlbGV0ZWQpIHsKKwkJCQkJc3Bpbl91bmxvY2soJmUtPmxvY2spOworCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQkJcmV0dXJuIEFVRElUX0JVSUxEX0NPTlRFWFQ7CisJCQkJfQorCQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJCXJldHVybiBzdGF0ZTsKKwkJCX0KKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIEFVRElUX0JVSUxEX0NPTlRFWFQ7CisJfQorCitOb3RlIHRoYXQgdGhpcyBleGFtcGxlIGFzc3VtZXMgdGhhdCBlbnRyaWVzIGFyZSBvbmx5IGFkZGVkIGFuZCBkZWxldGVkLgorQWRkaXRpb25hbCBtZWNoYW5pc20gaXMgcmVxdWlyZWQgdG8gZGVhbCBjb3JyZWN0bHkgd2l0aCB0aGUKK3VwZGF0ZS1pbi1wbGFjZSBwZXJmb3JtZWQgYnkgYXVkaXRfdXBkX3J1bGUoKS4gIEZvciBvbmUgdGhpbmcsCithdWRpdF91cGRfcnVsZSgpIHdvdWxkIG5lZWQgYWRkaXRpb25hbCBtZW1vcnkgYmFycmllcnMgdG8gZW5zdXJlCit0aGF0IHRoZSBsaXN0X2FkZF9yY3UoKSB3YXMgcmVhbGx5IGV4ZWN1dGVkIGJlZm9yZSB0aGUgbGlzdF9kZWxfcmN1KCkuCisKK1RoZSBhdWRpdF9kZWxfcnVsZSgpIGZ1bmN0aW9uIHdvdWxkIG5lZWQgdG8gc2V0IHRoZSAiZGVsZXRlZCIKK2ZsYWcgdW5kZXIgdGhlIHNwaW5sb2NrIGFzIGZvbGxvd3M6CisKKwlzdGF0aWMgaW5saW5lIGludCBhdWRpdF9kZWxfcnVsZShzdHJ1Y3QgYXVkaXRfcnVsZSAqcnVsZSwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCisJeworCQlzdHJ1Y3QgYXVkaXRfZW50cnkgICplOworCisJCS8qIERvIG5vdCB1c2UgdGhlIF9yY3UgaXRlcmF0b3IgaGVyZSwgc2luY2UgdGhpcyBpcyB0aGUgb25seQorCQkgKiBkZWxldGlvbiByb3V0aW5lLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKKwkJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsICZlLT5ydWxlKSkgeworCQkJCXNwaW5fbG9jaygmZS0+bG9jayk7CisJCQkJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKKwkJCQllLT5kZWxldGVkID0gMTsKKwkJCQlzcGluX3VubG9jaygmZS0+bG9jayk7CisJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gLUVGQVVMVDsJCS8qIE5vIG1hdGNoaW5nIHJ1bGUgKi8KKwl9CisKKworU3VtbWFyeQorCitSZWFkLW1vc3RseSBsaXN0LWJhc2VkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGNhbiB0b2xlcmF0ZSBzdGFsZSBkYXRhIGFyZQordGhlIG1vc3QgYW1lbmFibGUgdG8gdXNlIG9mIFJDVS4gIFRoZSBzaW1wbGVzdCBjYXNlIGlzIHdoZXJlIGVudHJpZXMgYXJlCitlaXRoZXIgYWRkZWQgb3IgZGVsZXRlZCBmcm9tIHRoZSBkYXRhIHN0cnVjdHVyZSAob3IgYXRvbWljYWxseSBtb2RpZmllZAoraW4gcGxhY2UpLCBidXQgbm9uLWF0b21pYyBpbi1wbGFjZSBtb2RpZmljYXRpb25zIGNhbiBiZSBoYW5kbGVkIGJ5IG1ha2luZworYSBjb3B5LCB1cGRhdGluZyB0aGUgY29weSwgdGhlbiByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIHdpdGggdGhlIGNvcHkuCitJZiBzdGFsZSBkYXRhIGNhbm5vdCBiZSB0b2xlcmF0ZWQsIHRoZW4gYSAiZGVsZXRlZCIgZmxhZyBtYXkgYmUgdXNlZAoraW4gY29uanVuY3Rpb24gd2l0aCBhIHBlci1lbnRyeSBzcGlubG9jayBpbiBvcmRlciB0byBhbGxvdyB0aGUgc2VhcmNoCitmdW5jdGlvbiB0byByZWplY3QgbmV3bHkgZGVsZXRlZCBkYXRhLgorCisKK0Fuc3dlciB0byBRdWljayBRdWl6CisKK0lmIHRoZSBzZWFyY2ggZnVuY3Rpb24gZHJvcHMgdGhlIHBlci1lbnRyeSBsb2NrIGJlZm9yZSByZXR1cm5pbmcsIHRoZW4KK3RoZSBjYWxsZXIgd2lsbCBiZSBwcm9jZXNzaW5nIHN0YWxlIGRhdGEgaW4gYW55IGNhc2UuICBJZiBpdCBpcyByZWFsbHkKK09LIHRvIGJlIHByb2Nlc3Npbmcgc3RhbGUgZGF0YSwgdGhlbiB5b3UgZG9uJ3QgbmVlZCBhICJkZWxldGVkIiBmbGFnLgorSWYgcHJvY2Vzc2luZyBzdGFsZSBkYXRhIHJlYWxseSBpcyBhIHByb2JsZW0sIHRoZW4geW91IG5lZWQgdG8gaG9sZCB0aGUKK3Blci1lbnRyeSBsb2NrIGFjcm9zcyBhbGwgb2YgdGhlIGNvZGUgdGhhdCB1c2VzIHRoZSB2YWx1ZSBsb29rZWQgdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTBjMmFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dApAQCAtMCwwICsxLDY3IEBACitSQ1UgQ29uY2VwdHMKKworCitUaGUgYmFzaWMgaWRlYSBiZWhpbmQgUkNVIChyZWFkLWNvcHkgdXBkYXRlKSBpcyB0byBzcGxpdCBkZXN0cnVjdGl2ZQorb3BlcmF0aW9ucyBpbnRvIHR3byBwYXJ0cywgb25lIHRoYXQgcHJldmVudHMgYW55b25lIGZyb20gc2VlaW5nIHRoZSBkYXRhCitpdGVtIGJlaW5nIGRlc3Ryb3llZCwgYW5kIG9uZSB0aGF0IGFjdHVhbGx5IGNhcnJpZXMgb3V0IHRoZSBkZXN0cnVjdGlvbi4KK0EgImdyYWNlIHBlcmlvZCIgbXVzdCBlbGFwc2UgYmV0d2VlbiB0aGUgdHdvIHBhcnRzLCBhbmQgdGhpcyBncmFjZSBwZXJpb2QKK211c3QgYmUgbG9uZyBlbm91Z2ggdGhhdCBhbnkgcmVhZGVycyBhY2Nlc3NpbmcgdGhlIGl0ZW0gYmVpbmcgZGVsZXRlZCBoYXZlCitzaW5jZSBkcm9wcGVkIHRoZWlyIHJlZmVyZW5jZXMuICBGb3IgZXhhbXBsZSwgYW4gUkNVLXByb3RlY3RlZCBkZWxldGlvbgorZnJvbSBhIGxpbmtlZCBsaXN0IHdvdWxkIGZpcnN0IHJlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBsaXN0LCB3YWl0IGZvcgorYSBncmFjZSBwZXJpb2QgdG8gZWxhcHNlLCB0aGVuIGZyZWUgdGhlIGVsZW1lbnQuICBTZWUgdGhlIGxpc3RSQ1UudHh0CitmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIFJDVSB3aXRoIGxpbmtlZCBsaXN0cy4KKworCitGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworCitvCVdoeSB3b3VsZCBhbnlvbmUgd2FudCB0byB1c2UgUkNVPworCisJVGhlIGFkdmFudGFnZSBvZiBSQ1UncyB0d28tcGFydCBhcHByb2FjaCBpcyB0aGF0IFJDVSByZWFkZXJzIG5lZWQKKwlub3QgYWNxdWlyZSBhbnkgbG9ja3MsIHBlcmZvcm0gYW55IGF0b21pYyBpbnN0cnVjdGlvbnMsIHdyaXRlIHRvCisJc2hhcmVkIG1lbW9yeSwgb3IgKG9uIENQVXMgb3RoZXIgdGhhbiBBbHBoYSkgZXhlY3V0ZSBhbnkgbWVtb3J5CisJYmFycmllcnMuICBUaGUgZmFjdCB0aGF0IHRoZXNlIG9wZXJhdGlvbnMgYXJlIHF1aXRlIGV4cGVuc2l2ZQorCW9uIG1vZGVybiBDUFVzIGlzIHdoYXQgZ2l2ZXMgUkNVIGl0cyBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzCisJaW4gcmVhZC1tb3N0bHkgc2l0dWF0aW9ucy4gIFRoZSBmYWN0IHRoYXQgUkNVIHJlYWRlcnMgbmVlZCBub3QKKwlhY3F1aXJlIGxvY2tzIGNhbiBhbHNvIGdyZWF0bHkgc2ltcGxpZnkgZGVhZGxvY2stYXZvaWRhbmNlIGNvZGUuCisKK28JSG93IGNhbiB0aGUgdXBkYXRlciB0ZWxsIHdoZW4gYSBncmFjZSBwZXJpb2QgaGFzIGNvbXBsZXRlZAorCWlmIHRoZSBSQ1UgcmVhZGVycyBnaXZlIG5vIGluZGljYXRpb24gd2hlbiB0aGV5IGFyZSBkb25lPworCisJSnVzdCBhcyB3aXRoIHNwaW5sb2NrcywgUkNVIHJlYWRlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8KKwlibG9jaywgc3dpdGNoIHRvIHVzZXItbW9kZSBleGVjdXRpb24sIG9yIGVudGVyIHRoZSBpZGxlIGxvb3AuCisJVGhlcmVmb3JlLCBhcyBzb29uIGFzIGEgQ1BVIGlzIHNlZW4gcGFzc2luZyB0aHJvdWdoIGFueSBvZiB0aGVzZQorCXRocmVlIHN0YXRlcywgd2Uga25vdyB0aGF0IHRoYXQgQ1BVIGhhcyBleGl0ZWQgYW55IHByZXZpb3VzIFJDVQorCXJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4gIFNvLCBpZiB3ZSByZW1vdmUgYW4gaXRlbSBmcm9tIGEKKwlsaW5rZWQgbGlzdCwgYW5kIHRoZW4gd2FpdCB1bnRpbCBhbGwgQ1BVcyBoYXZlIHN3aXRjaGVkIGNvbnRleHQsCisJZXhlY3V0ZWQgaW4gdXNlciBtb2RlLCBvciBleGVjdXRlZCBpbiB0aGUgaWRsZSBsb29wLCB3ZSBjYW4KKwlzYWZlbHkgZnJlZSB1cCB0aGF0IGl0ZW0uCisKK28JSWYgSSBhbSBydW5uaW5nIG9uIGEgdW5pcHJvY2Vzc29yIGtlcm5lbCwgd2hpY2ggY2FuIG9ubHkgZG8gb25lCisJdGhpbmcgYXQgYSB0aW1lLCB3aHkgc2hvdWxkIEkgd2FpdCBmb3IgYSBncmFjZSBwZXJpb2Q/CisKKwlTZWUgdGhlIFVQLnR4dCBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LgorCitvCUhvdyBjYW4gSSBzZWUgd2hlcmUgUkNVIGlzIGN1cnJlbnRseSB1c2VkIGluIHRoZSBMaW51eCBrZXJuZWw/CisKKwlTZWFyY2ggZm9yICJyY3VfcmVhZF9sb2NrIiwgImNhbGxfcmN1IiwgYW5kICJzeW5jaHJvbml6ZV9rZXJuZWwiLgorCitvCVdoYXQgZ3VpZGVsaW5lcyBzaG91bGQgSSBmb2xsb3cgd2hlbiB3cml0aW5nIGNvZGUgdGhhdCB1c2VzIFJDVT8KKworCVNlZSB0aGUgY2hlY2tsaXN0LnR4dCBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LgorCitvCVdoeSB0aGUgbmFtZSAiUkNVIj8KKworCSJSQ1UiIHN0YW5kcyBmb3IgInJlYWQtY29weSB1cGRhdGUiLiAgVGhlIGZpbGUgbGlzdFJDVS50eHQgaGFzCisJbW9yZSBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0aGlzIG5hbWUgY2FtZSBmcm9tLCBzZWFyY2ggZm9yCisJInJlYWQtY29weSB1cGRhdGUiIHRvIGZpbmQgaXQuCisKK28JSSBoZWFyIHRoYXQgUkNVIGlzIHBhdGVudGVkPyAgV2hhdCBpcyB3aXRoIHRoYXQ/CisKKwlZZXMsIGl0IGlzLiAgVGhlcmUgYXJlIHNldmVyYWwga25vd24gcGF0ZW50cyByZWxhdGVkIHRvIFJDVSwKKwlzZWFyY2ggZm9yIHRoZSBzdHJpbmcgIlBhdGVudCIgaW4gUlRGUC50eHQgdG8gZmluZCB0aGVtLgorCU9mIHRoZXNlLCBvbmUgd2FzIGFsbG93ZWQgdG8gbGFwc2UgYnkgdGhlIGFzc2lnbmVlLCBhbmQgdGhlCisJb3RoZXJzIGhhdmUgYmVlbiBjb250cmlidXRlZCB0byB0aGUgTGludXgga2VybmVsIHVuZGVyIEdQTC4KKworbwlXaGVyZSBjYW4gSSBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gUkNVPworCisJU2VlIHRoZSBSVEZQLnR4dCBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SRUFETUUuREFDOTYwIGIvRG9jdW1lbnRhdGlvbi9SRUFETUUuREFDOTYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZWE2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JFQURNRS5EQUM5NjAKQEAgLTAsMCArMSw3NTYgQEAKKyAgIExpbnV4IERyaXZlciBmb3IgTXlsZXggREFDOTYwL0FjY2VsZVJBSUQvZVh0cmVtZVJBSUQgUENJIFJBSUQgQ29udHJvbGxlcnMKKworCQkJVmVyc2lvbiAyLjIuMTEgZm9yIExpbnV4IDIuMi4xOQorCQkJVmVyc2lvbiAyLjQuMTEgZm9yIExpbnV4IDIuNC4xMgorCisJCQkgICAgICBQUk9EVUNUSU9OIFJFTEVBU0UKKworCQkJCTExIE9jdG9iZXIgMjAwMQorCisJCQkgICAgICAgTGVvbmFyZCBOLiBadWJrb2ZmCisJCQkgICAgICAgRGFuZGVsaW9uIERpZ2l0YWwKKwkJCSAgICAgICBsbnpAZGFuZGVsaW9uLmNvbQorCisJIENvcHlyaWdodCAxOTk4LTIwMDEgYnkgTGVvbmFyZCBOLiBadWJrb2ZmIDxsbnpAZGFuZGVsaW9uLmNvbT4KKworCisJCQkJIElOVFJPRFVDVElPTgorCitNeWxleCwgSW5jLiBkZXNpZ25zIGFuZCBtYW51ZmFjdHVyZXMgYSB2YXJpZXR5IG9mIGhpZ2ggcGVyZm9ybWFuY2UgUENJIFJBSUQKK2NvbnRyb2xsZXJzLiAgTXlsZXggQ29ycG9yYXRpb24gaXMgbG9jYXRlZCBhdCAzNDU1MSBBcmRlbndvb2QgQmx2ZC4sIEZyZW1vbnQsCitDYWxpZm9ybmlhIDk0NTU1LCBVU0EgYW5kIGNhbiBiZSByZWFjaGVkIGF0IDUxMC43OTYuNjEwMCBvciBvbiB0aGUgV29ybGQgV2lkZQorV2ViIGF0IGh0dHA6Ly93d3cubXlsZXguY29tLiAgTXlsZXggVGVjaG5pY2FsIFN1cHBvcnQgY2FuIGJlIHJlYWNoZWQgYnkKK2VsZWN0cm9uaWMgbWFpbCBhdCBteWxleHN1cEB1cy5pYm0uY29tLCBieSB2b2ljZSBhdCA1MTAuNjA4LjI0MDAsIG9yIGJ5IEZBWCBhdAorNTEwLjc0NS43NzE1LiAgQ29udGFjdCBpbmZvcm1hdGlvbiBmb3Igb2ZmaWNlcyBpbiBFdXJvcGUgYW5kIEphcGFuIGlzIGF2YWlsYWJsZQorb24gdGhlaXIgV2ViIHNpdGUuCisKK1RoZSBsYXRlc3QgaW5mb3JtYXRpb24gb24gTGludXggc3VwcG9ydCBmb3IgREFDOTYwIFBDSSBSQUlEIENvbnRyb2xsZXJzLCBhcword2VsbCBhcyB0aGUgbW9zdCByZWNlbnQgcmVsZWFzZSBvZiB0aGlzIGRyaXZlciwgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIGZyb20KK215IExpbnV4IEhvbWUgUGFnZSBhdCBVUkwgImh0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8iLiAgVGhlIExpbnV4IERBQzk2MAorZHJpdmVyIHN1cHBvcnRzIGFsbCBjdXJyZW50IE15bGV4IFBDSSBSQUlEIGNvbnRyb2xsZXJzIGluY2x1ZGluZyB0aGUgbmV3CitlWHRyZW1lUkFJRCAyMDAwLzMwMDAgYW5kIEFjY2VsZVJBSUQgMzUyLzE3MC8xNjAgbW9kZWxzIHdoaWNoIGhhdmUgYW4gZW50aXJlbHkKK25ldyBmaXJtd2FyZSBpbnRlcmZhY2UgZnJvbSB0aGUgb2xkZXIgZVh0cmVtZVJBSUQgMTEwMCwgQWNjZWxlUkFJRCAxNTAvMjAwLzI1MCwKK2FuZCBEQUM5NjBQSi9QRy9QVS9QRC9QTC4gIFNlZSBiZWxvdyBmb3IgYSBjb21wbGV0ZSBjb250cm9sbGVyIGxpc3QgYXMgd2VsbCBhcworbWluaW11bSBmaXJtd2FyZSB2ZXJzaW9uIHJlcXVpcmVtZW50cy4gIEZvciBzaW1wbGljaXR5LCBpbiBtb3N0IHBsYWNlcyB0aGlzCitkb2N1bWVudGF0aW9uIHJlZmVycyB0byBEQUM5NjAgZ2VuZXJpY2FsbHkgcmF0aGVyIHRoYW4gZXhwbGljaXRseSBsaXN0aW5nIGFsbAordGhlIHN1cHBvcnRlZCBtb2RlbHMuCisKK0RyaXZlciBidWcgcmVwb3J0cyBzaG91bGQgYmUgc2VudCB2aWEgZWxlY3Ryb25pYyBtYWlsIHRvICJsbnpAZGFuZGVsaW9uLmNvbSIuCitQbGVhc2UgaW5jbHVkZSB3aXRoIHRoZSBidWcgcmVwb3J0IHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIG1lc3NhZ2VzIHJlcG9ydGVkCitieSB0aGUgZHJpdmVyIGF0IHN0YXJ0dXAsIGFsb25nIHdpdGggYW55IHN1YnNlcXVlbnQgc3lzdGVtIG1lc3NhZ2VzIHJlbGV2YW50IHRvCit0aGUgY29udHJvbGxlcidzIG9wZXJhdGlvbiwgYW5kIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncworaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gIERyaXZlciBidWdzIGFyZSBhY3R1YWxseSBxdWl0ZSByYXJlOyBpZiB5b3UgZW5jb3VudGVyCitwcm9ibGVtcyB3aXRoIGRpc2tzIGJlaW5nIG1hcmtlZCBvZmZsaW5lLCBmb3IgZXhhbXBsZSwgcGxlYXNlIGNvbnRhY3QgTXlsZXgKK1RlY2huaWNhbCBTdXBwb3J0IGFzIHRoZSBwcm9ibGVtIGlzIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24KK3JhdGhlciB0aGFuIHRoZSBMaW51eCBkcml2ZXIuCisKK1BsZWFzZSBjb25zdWx0IHRoZSBSQUlEIGNvbnRyb2xsZXIgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBpbnN0YWxsYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvbnRyb2xsZXJzLiAgVGhpcyBkb2N1bWVudAorcHJpbWFyaWx5IHByb3ZpZGVzIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZSBMaW51eCBzdXBwb3J0LgorCisKKwkJCQlEUklWRVIgRkVBVFVSRVMKKworVGhlIERBQzk2MCBSQUlEIGNvbnRyb2xsZXJzIGFyZSBzdXBwb3J0ZWQgc29sZWx5IGFzIGhpZ2ggcGVyZm9ybWFuY2UgUkFJRAorY29udHJvbGxlcnMsIG5vdCBhcyBpbnRlcmZhY2VzIHRvIGFyYml0cmFyeSBTQ1NJIGRldmljZXMuICBUaGUgTGludXggREFDOTYwCitkcml2ZXIgb3BlcmF0ZXMgYXQgdGhlIGJsb2NrIGRldmljZSBsZXZlbCwgdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIFNDU0kgYW5kIElERQorZHJpdmVycy4gIFVubGlrZSBvdGhlciBSQUlEIGNvbnRyb2xsZXJzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb24gTGludXgsIHRoZQorREFDOTYwIGRyaXZlciBpcyBub3QgZGVwZW5kZW50IG9uIHRoZSBTQ1NJIHN1YnN5c3RlbSwgYW5kIGhlbmNlIGF2b2lkcyBhbGwgdGhlCitjb21wbGV4aXR5IGFuZCB1bm5lY2Vzc2FyeSBjb2RlIHRoYXQgd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uCithcyBhIFNDU0kgZHJpdmVyLiAgVGhlIERBQzk2MCBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIGFzIGhpZ2ggYSBwZXJmb3JtYW5jZSBhcworcG9zc2libGUgd2l0aCBubyBjb21wcm9taXNlcyBvciBleHRyYSBjb2RlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbG93ZXIKK3BlcmZvcm1hbmNlIGRldmljZXMuICBUaGUgREFDOTYwIGRyaXZlciBpbmNsdWRlcyBleHRlbnNpdmUgZXJyb3IgbG9nZ2luZyBhbmQKK29ubGluZSBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzLiAgRXhjZXB0IGZvciBpbml0aWFsIGNvbmZpZ3VyYXRpb24KK29mIHRoZSBjb250cm9sbGVyIGFuZCBhZGRpbmcgbmV3IGRpc2sgZHJpdmVzLCBtb3N0IGV2ZXJ5dGhpbmcgY2FuIGJlIGhhbmRsZWQKK2Zyb20gTGludXggd2hpbGUgdGhlIHN5c3RlbSBpcyBvcGVyYXRpb25hbC4KKworVGhlIERBQzk2MCBkcml2ZXIgaXMgYXJjaGl0ZWN0ZWQgdG8gc3VwcG9ydCB1cCB0byA4IGNvbnRyb2xsZXJzIHBlciBzeXN0ZW0uCitFYWNoIERBQzk2MCBwYXJhbGxlbCBTQ1NJIGNvbnRyb2xsZXIgY2FuIHN1cHBvcnQgdXAgdG8gMTUgZGlzayBkcml2ZXMgcGVyCitjaGFubmVsLCBmb3IgYSBtYXhpbXVtIG9mIDYwIGRyaXZlcyBvbiBhIGZvdXIgY2hhbm5lbCBjb250cm9sbGVyOyB0aGUgZmlicmUKK2NoYW5uZWwgZVh0cmVtZVJBSUQgMzAwMCBjb250cm9sbGVyIHN1cHBvcnRzIHVwIHRvIDEyNSBkaXNrIGRyaXZlcyBwZXIgbG9vcCBmb3IKK2EgdG90YWwgb2YgMjUwIGRyaXZlcy4gIFRoZSBkcml2ZXMgaW5zdGFsbGVkIG9uIGEgY29udHJvbGxlciBhcmUgZGl2aWRlZCBpbnRvCitvbmUgb3IgbW9yZSAiRHJpdmUgR3JvdXBzIiwgYW5kIHRoZW4gZWFjaCBEcml2ZSBHcm91cCBpcyBzdWJkaXZpZGVkIGZ1cnRoZXIKK2ludG8gMSB0byAzMiAiTG9naWNhbCBEcml2ZXMiLiAgRWFjaCBMb2dpY2FsIERyaXZlIGhhcyBhIHNwZWNpZmljIFJBSUQgTGV2ZWwKK2FuZCBjYWNoaW5nIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggaXQsIGFuZCBpdCBhcHBlYXJzIHRvIExpbnV4IGFzIGEgc2luZ2xlCitibG9jayBkZXZpY2UuICBMb2dpY2FsIERyaXZlcyBhcmUgZnVydGhlciBzdWJkaXZpZGVkIGludG8gdXAgdG8gNyBwYXJ0aXRpb25zCit0aHJvdWdoIHRoZSBub3JtYWwgTGludXggYW5kIFBDIGRpc2sgcGFydGl0aW9uaW5nIHNjaGVtZXMuICBMb2dpY2FsIERyaXZlcyBhcmUKK2Fsc28ga25vd24gYXMgIlN5c3RlbSBEcml2ZXMiLCBhbmQgRHJpdmUgR3JvdXBzIGFyZSBhbHNvIGNhbGxlZCAiUGFja3MiLiAgQm90aAordGVybXMgYXJlIGluIHVzZSBpbiB0aGUgTXlsZXggZG9jdW1lbnRhdGlvbjsgSSBoYXZlIGNob3NlbiB0byBzdGFuZGFyZGl6ZSBvbgordGhlIG1vcmUgZ2VuZXJpYyAiTG9naWNhbCBEcml2ZSIgYW5kICJEcml2ZSBHcm91cCIuCisKK0RBQzk2MCBSQUlEIGRpc2sgZGV2aWNlcyBhcmUgbmFtZWQgaW4gdGhlIHN0eWxlIG9mIHRoZSBEZXZpY2UgRmlsZSBTeXN0ZW0KKyhERVZGUykuICBUaGUgZGV2aWNlIGNvcnJlc3BvbmRpbmcgdG8gTG9naWNhbCBEcml2ZSBEIG9uIENvbnRyb2xsZXIgQyBpcworcmVmZXJyZWQgdG8gYXMgL2Rldi9yZC9jQ2RELCBhbmQgdGhlIHBhcnRpdGlvbnMgYXJlIGNhbGxlZCAvZGV2L3JkL2NDZERwMQordGhyb3VnaCAvZGV2L3JkL2NDZERwNy4gIEZvciBleGFtcGxlLCBwYXJ0aXRpb24gMyBvZiBMb2dpY2FsIERyaXZlIDUgb24KK0NvbnRyb2xsZXIgMiBpcyByZWZlcnJlZCB0byBhcyAvZGV2L3JkL2MyZDVwMy4gIE5vdGUgdGhhdCB1bmxpa2Ugd2l0aCBTQ1NJCitkaXNrcyB0aGUgZGV2aWNlIG5hbWVzIHdpbGwgbm90IGNoYW5nZSBpbiB0aGUgZXZlbnQgb2YgYSBkaXNrIGRyaXZlIGZhaWx1cmUuCitUaGUgREFDOTYwIGRyaXZlciBpcyBhc3NpZ25lZCBtYWpvciBudW1iZXJzIDQ4IC0gNTUgd2l0aCBvbmUgbWFqb3IgbnVtYmVyIHBlcgorY29udHJvbGxlci4gIFRoZSA4IGJpdHMgb2YgbWlub3IgbnVtYmVyIGFyZSBkaXZpZGVkIGludG8gNSBiaXRzIGZvciB0aGUgTG9naWNhbAorRHJpdmUgYW5kIDMgYml0cyBmb3IgdGhlIHBhcnRpdGlvbi4KKworCisJICBTVVBQT1JURUQgREFDOTYwL0FjY2VsZVJBSUQvZVh0cmVtZVJBSUQgUENJIFJBSUQgQ09OVFJPTExFUlMKKworVGhlIGZvbGxvd2luZyBsaXN0IGNvbXByaXNlcyB0aGUgc3VwcG9ydGVkIERBQzk2MCwgQWNjZWxlUkFJRCwgYW5kIGVYdHJlbWVSQUlECitQQ0kgUkFJRCBDb250cm9sbGVycyBhcyBvZiB0aGUgZGF0ZSBvZiB0aGlzIGRvY3VtZW50LiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55b25lIHB1cmNoYXNpbmcgYSBNeWxleCBQQ0kgUkFJRCBDb250cm9sbGVyIG5vdCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlCitjb250YWN0IHRoZSBhdXRob3IgYmVmb3JlaGFuZCB0byB2ZXJpZnkgdGhhdCBpdCBpcyBvciB3aWxsIGJlIHN1cHBvcnRlZC4KKworZVh0cmVtZVJBSUQgMzAwMAorCSAgICAxIFdpZGUgVWx0cmEtMi9MVkQgU0NTSSBjaGFubmVsCisJICAgIDIgRXh0ZXJuYWwgRmlicmUgRkMtQUwgY2hhbm5lbHMKKwkgICAgMjMzTUh6IFN0cm9uZ0FSTSBTQSAxMTAgUHJvY2Vzc29yCisJICAgIDY0IEJpdCAzM01IeiBQQ0kgKGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCAzMiBCaXQgUENJIHNsb3RzKQorCSAgICAzMk1CLzY0TUIgRUNDIFNEUkFNIE1lbW9yeQorCitlWHRyZW1lUkFJRCAyMDAwCisJICAgIDQgV2lkZSBVbHRyYS0xNjAgTFZEIFNDU0kgY2hhbm5lbHMKKwkgICAgMjMzTUh6IFN0cm9uZ0FSTSBTQSAxMTAgUHJvY2Vzc29yCisJICAgIDY0IEJpdCAzM01IeiBQQ0kgKGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCAzMiBCaXQgUENJIHNsb3RzKQorCSAgICAzMk1CLzY0TUIgRUNDIFNEUkFNIE1lbW9yeQorCitBY2NlbGVSQUlEIDM1MgorCSAgICAyIFdpZGUgVWx0cmEtMTYwIExWRCBTQ1NJIGNoYW5uZWxzCisJICAgIDEwME1IeiBJbnRlbCBpOTYwUk4gUklTQyBQcm9jZXNzb3IKKwkgICAgNjQgQml0IDMzTUh6IFBDSSAoYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIDMyIEJpdCBQQ0kgc2xvdHMpCisJICAgIDMyTUIvNjRNQiBFQ0MgU0RSQU0gTWVtb3J5CisKK0FjY2VsZVJBSUQgMTcwCisJICAgIDEgV2lkZSBVbHRyYS0xNjAgTFZEIFNDU0kgY2hhbm5lbAorCSAgICAxMDBNSHogSW50ZWwgaTk2MFJNIFJJU0MgUHJvY2Vzc29yCisJICAgIDE2TUIvMzJNQi82NE1CIEVDQyBTRFJBTSBNZW1vcnkKKworQWNjZWxlUkFJRCAxNjAgKEFjY2VsZVJBSUQgMTcwTFApCisJICAgIDEgV2lkZSBVbHRyYS0xNjAgTFZEIFNDU0kgY2hhbm5lbAorCSAgICAxMDBNSHogSW50ZWwgaTk2MFJTIFJJU0MgUHJvY2Vzc29yCisJICAgIEJ1aWx0IGluIDE2TSBFQ0MgU0RSQU0gTWVtb3J5CisJICAgIFBDSSBMb3cgUHJvZmlsZSBGb3JtIEZhY3RvciAtIGZpdCBmb3IgMlUgaGVpZ2h0CisKK2VYdHJlbWVSQUlEIDExMDAgKERBQzExNjRQKQorCSAgICAzIFdpZGUgVWx0cmEtMi9MVkQgU0NTSSBjaGFubmVscworCSAgICAyMzNNSHogU3Ryb25nQVJNIFNBIDExMCBQcm9jZXNzb3IKKwkgICAgNjQgQml0IDMzTUh6IFBDSSAoYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIDMyIEJpdCBQQ0kgc2xvdHMpCisJICAgIDE2TUIvMzJNQi82NE1CIFBhcml0eSBTRFJBTSBNZW1vcnkgd2l0aCBCYXR0ZXJ5IEJhY2t1cAorCitBY2NlbGVSQUlEIDI1MCAoREFDOTYwUFRMMSkKKwkgICAgVXNlcyBvbmJvYXJkIFN5bWJpb3MgU0NTSSBjaGlwcyBvbiBjZXJ0YWluIG1vdGhlcmJvYXJkcworCSAgICBBbHNvIGluY2x1ZGVzIG9uZSBvbmJvYXJkIFdpZGUgVWx0cmEtMi9MVkQgU0NTSSBDaGFubmVsCisJICAgIDY2TUh6IEludGVsIGk5NjBSRCBSSVNDIFByb2Nlc3NvcgorCSAgICA0TUIvOE1CLzE2TUIvMzJNQi82NE1CLzEyOE1CIEVDQyBFRE8gTWVtb3J5CisKK0FjY2VsZVJBSUQgMjAwIChEQUM5NjBQVEwwKQorCSAgICBVc2VzIG9uYm9hcmQgU3ltYmlvcyBTQ1NJIGNoaXBzIG9uIGNlcnRhaW4gbW90aGVyYm9hcmRzCisJICAgIEluY2x1ZGVzIG5vIG9uYm9hcmQgU0NTSSBDaGFubmVscworCSAgICA2Nk1IeiBJbnRlbCBpOTYwUkQgUklTQyBQcm9jZXNzb3IKKwkgICAgNE1CLzhNQi8xNk1CLzMyTUIvNjRNQi8xMjhNQiBFQ0MgRURPIE1lbW9yeQorCitBY2NlbGVSQUlEIDE1MCAoREFDOTYwUFJMKQorCSAgICBVc2VzIG9uYm9hcmQgU3ltYmlvcyBTQ1NJIGNoaXBzIG9uIGNlcnRhaW4gbW90aGVyYm9hcmRzCisJICAgIEFsc28gaW5jbHVkZXMgb25lIG9uYm9hcmQgV2lkZSBVbHRyYS0yL0xWRCBTQ1NJIENoYW5uZWwKKwkgICAgMzNNSHogSW50ZWwgaTk2MFJQIFJJU0MgUHJvY2Vzc29yCisJICAgIDRNQiBQYXJpdHkgRURPIE1lbW9yeQorCitEQUM5NjBQSiAgICAxLzIvMyBXaWRlIFVsdHJhIFNDU0ktMyBDaGFubmVscworCSAgICA2Nk1IeiBJbnRlbCBpOTYwUkQgUklTQyBQcm9jZXNzb3IKKwkgICAgNE1CLzhNQi8xNk1CLzMyTUIvNjRNQi8xMjhNQiBFQ0MgRURPIE1lbW9yeQorCitEQUM5NjBQRyAgICAxLzIvMyBXaWRlIFVsdHJhIFNDU0ktMyBDaGFubmVscworCSAgICAzM01IeiBJbnRlbCBpOTYwUlAgUklTQyBQcm9jZXNzb3IKKwkgICAgNE1CLzhNQiBFQ0MgRURPIE1lbW9yeQorCitEQUM5NjBQVSAgICAxLzIvMyBXaWRlIFVsdHJhIFNDU0ktMyBDaGFubmVscworCSAgICBJbnRlbCBpOTYwQ0YgUklTQyBQcm9jZXNzb3IKKwkgICAgNE1CLzhNQiBFRFJBTSBvciAyTUIvNE1CLzhNQi8xNk1CLzMyTUIgRFJBTSBNZW1vcnkKKworREFDOTYwUEQgICAgMS8yLzMgV2lkZSBGYXN0IFNDU0ktMiBDaGFubmVscworCSAgICBJbnRlbCBpOTYwQ0YgUklTQyBQcm9jZXNzb3IKKwkgICAgNE1CLzhNQiBFRFJBTSBvciAyTUIvNE1CLzhNQi8xNk1CLzMyTUIgRFJBTSBNZW1vcnkKKworREFDOTYwUEwgICAgMS8yLzMgV2lkZSBGYXN0IFNDU0ktMiBDaGFubmVscworCSAgICBJbnRlbCBpOTYwIFJJU0MgUHJvY2Vzc29yCisJICAgIDJNQi80TUIvOE1CLzE2TUIvMzJNQiBEUkFNIE1lbW9yeQorCitEQUM5NjBQCSAgICAxLzIvMyBXaWRlIEZhc3QgU0NTSS0yIENoYW5uZWxzCisJICAgIEludGVsIGk5NjAgUklTQyBQcm9jZXNzb3IKKwkgICAgMk1CLzRNQi84TUIvMTZNQi8zMk1CIERSQU0gTWVtb3J5CisKK0ZvciB0aGUgZVh0cmVtZVJBSUQgMjAwMC8zMDAwIGFuZCBBY2NlbGVSQUlEIDM1Mi8xNzAvMTYwLCBmaXJtd2FyZSB2ZXJzaW9uCis2LjAwLTAxIG9yIGFib3ZlIGlzIHJlcXVpcmVkLgorCitGb3IgdGhlIGVYdHJlbWVSQUlEIDExMDAsIGZpcm13YXJlIHZlcnNpb24gNS4wNi0wLTUyIG9yIGFib3ZlIGlzIHJlcXVpcmVkLgorCitGb3IgdGhlIEFjY2VsZVJBSUQgMjUwLCAyMDAsIGFuZCAxNTAsIGZpcm13YXJlIHZlcnNpb24gNC4wNi0wLTU3IG9yIGFib3ZlIGlzCityZXF1aXJlZC4KKworRm9yIHRoZSBEQUM5NjBQSiBhbmQgREFDOTYwUEcsIGZpcm13YXJlIHZlcnNpb24gNC4wNi0wLTAwIG9yIGFib3ZlIGlzIHJlcXVpcmVkLgorCitGb3IgdGhlIERBQzk2MFBVLCBEQUM5NjBQRCwgREFDOTYwUEwsIGFuZCBEQUM5NjBQLCBlaXRoZXIgZmlybXdhcmUgdmVyc2lvbgorMy41MS0wLTA0IG9yIGFib3ZlIGlzIHJlcXVpcmVkIChmb3IgZHVhbCBGbGFzaCBST00gY29udHJvbGxlcnMpLCBvciBmaXJtd2FyZQordmVyc2lvbiAyLjczLTAtMDAgb3IgYWJvdmUgaXMgcmVxdWlyZWQgKGZvciBzaW5nbGUgRmxhc2ggUk9NIGNvbnRyb2xsZXJzKQorCitQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgU0NTSSBkaXNrIGRyaXZlcyBhcmUgc3VpdGFibGUgZm9yIHVzZSB3aXRoIERBQzk2MAorY29udHJvbGxlcnMsIGFuZCBvbmx5IHBhcnRpY3VsYXIgZmlybXdhcmUgdmVyc2lvbnMgb2YgYW55IGdpdmVuIG1vZGVsIG1heQorYWN0dWFsbHkgZnVuY3Rpb24gY29ycmVjdGx5LiAgU2ltaWxhcmx5LCBub3QgYWxsIG1vdGhlcmJvYXJkcyBoYXZlIGEgQklPUyB0aGF0Citwcm9wZXJseSBpbml0aWFsaXplcyB0aGUgQWNjZWxlUkFJRCAyNTAsIEFjY2VsZVJBSUQgMjAwLCBBY2NlbGVSQUlEIDE1MCwKK0RBQzk2MFBKLCBhbmQgREFDOTYwUEcgYmVjYXVzZSB0aGUgSW50ZWwgaTk2MFJEL1JQIGlzIGEgbXVsdGktZnVuY3Rpb24gZGV2aWNlLgorSWYgaW4gZG91YnQsIGNvbnRhY3QgTXlsZXggUkFJRCBUZWNobmljYWwgU3VwcG9ydCAobXlsZXhzdXBAdXMuaWJtLmNvbSkgdG8KK3ZlcmlmeSBjb21wYXRpYmlsaXR5LiAgTXlsZXggbWFrZXMgYXZhaWxhYmxlIGEgaGFyZCBkaXNrIGNvbXBhdGliaWxpdHkgbGlzdCBhdAoraHR0cDovL3d3dy5teWxleC5jb20vc3VwcG9ydC9oZGNvbXAvaGQtbGlzdHMuaHRtbC4KKworCisJCQkgICAgICBEUklWRVIgSU5TVEFMTEFUSU9OCisKK1RoaXMgZGlzdHJpYnV0aW9uIHdhcyBwcmVwYXJlZCBmb3IgTGludXgga2VybmVsIHZlcnNpb24gMi4yLjE5IG9yIDIuNC4xMi4KKworVG8gaW5zdGFsbCB0aGUgREFDOTYwIFJBSUQgZHJpdmVyLCB5b3UgbWF5IHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLAorcmVwbGFjaW5nICIvdXNyL3NyYyIgd2l0aCB3aGVyZXZlciB5b3Uga2VlcCB5b3VyIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZToKKworICBjZCAvdXNyL3NyYworICB0YXIgLXh2emYgREFDOTYwLTIuMi4xMS50YXIuZ3ogKG9yIERBQzk2MC0yLjQuMTEudGFyLmd6KQorICBtdiBSRUFETUUuREFDOTYwIGxpbnV4L0RvY3VtZW50YXRpb24KKyAgbXYgREFDOTYwLltjaF0gbGludXgvZHJpdmVycy9ibG9jaworICBwYXRjaCAtcDAgPCBEQUM5NjAucGF0Y2ggKGlmIERBQzk2MC5wYXRjaCBpcyBpbmNsdWRlZCkKKyAgY2QgbGludXgKKyAgbWFrZSBjb25maWcKKyAgbWFrZSBiekltYWdlIChvciB6SW1hZ2UpCisKK1RoZW4gaW5zdGFsbCAiYXJjaC9pMzg2L2Jvb3QvYnpJbWFnZSIgb3IgImFyY2gvaTM4Ni9ib290L3pJbWFnZSIgYXMgeW91cgorc3RhbmRhcmQga2VybmVsLCBydW4gbGlsbyBpZiBhcHByb3ByaWF0ZSwgYW5kIHJlYm9vdC4KKworVG8gY3JlYXRlIHRoZSBuZWNlc3NhcnkgZGV2aWNlcyBpbiAvZGV2LCB0aGUgIm1ha2VfcmQiIHNjcmlwdCBpbmNsdWRlZCBpbgorIkRBQzk2MC1VdGlsaXRpZXMudGFyLmd6IiBmcm9tIGh0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8gbWF5IGJlIHVzZWQuCitMSUxPIDIxIGFuZCBGRElTSyB2Mi45IGluY2x1ZGUgREFDOTYwIHN1cHBvcnQ7IGFsc28gaW5jbHVkZWQgaW4gdGhpcyBhcmNoaXZlCithcmUgcGF0Y2hlcyB0byBMSUxPIDIwIGFuZCBGRElTSyB2Mi44IHRoYXQgYWRkIERBQzk2MCBzdXBwb3J0LCBhbG9uZyB3aXRoCitzdGF0aWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlcyBvZiBMSUxPIGFuZCBGRElTSy4gIFRoaXMgbW9kaWZpZWQgdmVyc2lvbiBvZiBMSUxPCit3aWxsIGFsbG93IGJvb3RpbmcgZnJvbSBhIERBQzk2MCBjb250cm9sbGVyIGFuZC9vciBtb3VudGluZyB0aGUgcm9vdCBmaWxlCitzeXN0ZW0gZnJvbSBhIERBQzk2MC4KKworUmVkIEhhdCBMaW51eCA2LjAgYW5kIFN1U0UgTGludXggNi4xIGluY2x1ZGUgc3VwcG9ydCBmb3IgTXlsZXggUENJIFJBSUQKK2NvbnRyb2xsZXJzLiAgSW5zdGFsbGluZyBkaXJlY3RseSBvbnRvIGEgREFDOTYwIG1heSBiZSBwcm9ibGVtYXRpYyBmcm9tIG90aGVyCitMaW51eCBkaXN0cmlidXRpb25zIHVudGlsIHRoZWlyIGluc3RhbGxhdGlvbiB1dGlsaXRpZXMgYXJlIHVwZGF0ZWQuCisKKworCQkJICAgICAgSU5TVEFMTEFUSU9OIE5PVEVTCisKK0JlZm9yZSBpbnN0YWxsaW5nIExpbnV4IG9yIGFkZGluZyBEQUM5NjAgbG9naWNhbCBkcml2ZXMgdG8gYW4gZXhpc3RpbmcgTGludXgKK3N5c3RlbSwgdGhlIGNvbnRyb2xsZXIgbXVzdCBmaXJzdCBiZSBjb25maWd1cmVkIHRvIHByb3ZpZGUgb25lIG9yIG1vcmUgbG9naWNhbAorZHJpdmVzIHVzaW5nIHRoZSBCSU9TIENvbmZpZ3VyYXRpb24gVXRpbGl0eSBvciBEQUNDRi4gIFBsZWFzZSBub3RlIHRoYXQgc2luY2UKK3RoZXJlIGFyZSBvbmx5IGF0IG1vc3QgNiB1c2FibGUgcGFydGl0aW9ucyBvbiBlYWNoIGxvZ2ljYWwgZHJpdmUsIHN5c3RlbXMKK3JlcXVpcmluZyBtb3JlIHBhcnRpdGlvbnMgc2hvdWxkIHN1YmRpdmlkZSBhIGRyaXZlIGdyb3VwIGludG8gbXVsdGlwbGUgbG9naWNhbAorZHJpdmVzLCBlYWNoIG9mIHdoaWNoIGNhbiBoYXZlIHVwIHRvIDYgdXNhYmxlIHBhcnRpdGlvbnMuICBBbHNvLCBub3RlIHRoYXQgd2l0aAorbGFyZ2UgZGlzayBhcnJheXMgaXQgaXMgYWR2aXNhYmxlIHRvIGVuYWJsZSB0aGUgOEdCIEJJT1MgR2VvbWV0cnkgKDI1NS82MykKK3JhdGhlciB0aGFuIGFjY2VwdGluZyB0aGUgZGVmYXVsdCAyR0IgQklPUyBHZW9tZXRyeSAoMTI4LzMyKTsgZmFpbGluZyB0byBzbyBkbword2lsbCBjYXVzZSB0aGUgbG9naWNhbCBkcml2ZSBnZW9tZXRyeSB0byBoYXZlIG1vcmUgdGhhbiA2NTUzNSBjeWxpbmRlcnMgd2hpY2gKK3dpbGwgbWFrZSBpdCBpbXBvc3NpYmxlIGZvciBGRElTSyB0byBiZSB1c2VkIHByb3Blcmx5LiAgVGhlIDhHQiBCSU9TIEdlb21ldHJ5CitjYW4gYmUgZW5hYmxlZCBieSBjb25maWd1cmluZyB0aGUgREFDOTYwIEJJT1MsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIEFsdC1NCitkdXJpbmcgdGhlIEJJT1MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCisKK0ZvciBtYXhpbXVtIHBlcmZvcm1hbmNlIGFuZCB0aGUgbW9zdCBlZmZpY2llbnQgRTJGU0NLIHBlcmZvcm1hbmNlLCBpdCBpcworcmVjb21tZW5kZWQgdGhhdCBFWFQyIGZpbGUgc3lzdGVtcyBiZSBidWlsdCB3aXRoIGEgNEtCIGJsb2NrIHNpemUgYW5kIDE2IGJsb2NrCitzdHJpZGUgdG8gbWF0Y2ggdGhlIERBQzk2MCBjb250cm9sbGVyJ3MgNjRLQiBkZWZhdWx0IHN0cmlwZSBzaXplLiAgVGhlIGNvbW1hbmQKKyJta2UyZnMgLWIgNDA5NiAtUiBzdHJpZGU9MTYgPGRldmljZT4iIGlzIGFwcHJvcHJpYXRlLiAgVW5sZXNzIHRoZXJlIHdpbGwgYmUgYQorbGFyZ2UgbnVtYmVyIG9mIHNtYWxsIGZpbGVzIG9uIHRoZSBmaWxlIHN5c3RlbXMsIGl0IGlzIGFsc28gYmVuZWZpY2lhbCB0byBhZGQKK3RoZSAiLWkgMTYzODQiIG9wdGlvbiB0byBpbmNyZWFzZSB0aGUgYnl0ZXMgcGVyIGlub2RlIHBhcmFtZXRlciB0aGVyZWJ5CityZWR1Y2luZyB0aGUgZmlsZSBzeXN0ZW0gbWV0YWRhdGEuICBGaW5hbGx5LCBvbiBzeXN0ZW1zIHRoYXQgd2lsbCBvbmx5IGJlIHJ1bgord2l0aCBMaW51eCAyLjIgb3IgbGF0ZXIga2VybmVscyBpdCBpcyBiZW5lZmljaWFsIHRvIGVuYWJsZSBzcGFyc2Ugc3VwZXJibG9ja3MKK3dpdGggdGhlICItcyAxIiBvcHRpb24uCisKKworCQkgICAgICBEQUM5NjAgQU5OT1VOQ0VNRU5UUyBNQUlMSU5HIExJU1QKKworVGhlIERBQzk2MCBBbm5vdW5jZW1lbnRzIE1haWxpbmcgTGlzdCBwcm92aWRlcyBhIGZvcnVtIGZvciBpbmZvcm1pbmcgTGludXgKK3VzZXJzIG9mIG5ldyBkcml2ZXIgcmVsZWFzZXMgYW5kIG90aGVyIGFubm91bmNlbWVudHMgcmVnYXJkaW5nIExpbnV4IHN1cHBvcnQKK2ZvciBEQUM5NjAgUENJIFJBSUQgQ29udHJvbGxlcnMuICBUbyBqb2luIHRoZSBtYWlsaW5nIGxpc3QsIHNlbmQgYSBtZXNzYWdlIHRvCisiZGFjOTYwLWFubm91bmNlLXJlcXVlc3RAZGFuZGVsaW9uLmNvbSIgd2l0aCB0aGUgbGluZSAic3Vic2NyaWJlIiBpbiB0aGUKK21lc3NhZ2UgYm9keS4KKworCisJCUNPTlRST0xMRVIgQ09ORklHVVJBVElPTiBBTkQgU1RBVFVTIE1PTklUT1JJTkcKKworVGhlIERBQzk2MCBSQUlEIGNvbnRyb2xsZXJzIHJ1bm5pbmcgZmlybXdhcmUgNC4wNiBvciBhYm92ZSBpbmNsdWRlIGEgQmFja2dyb3VuZAorSW5pdGlhbGl6YXRpb24gZmFjaWxpdHkgc28gdGhhdCBzeXN0ZW0gZG93bnRpbWUgaXMgbWluaW1pemVkIGJvdGggZm9yIGluaXRpYWwKK2luc3RhbGxhdGlvbiBhbmQgc3Vic2VxdWVudCBjb25maWd1cmF0aW9uIG9mIGFkZGl0aW9uYWwgc3RvcmFnZS4gIFRoZSBCSU9TCitDb25maWd1cmF0aW9uIFV0aWxpdHkgKGFjY2Vzc2libGUgdmlhIEFsdC1SIGR1cmluZyB0aGUgQklPUyBpbml0aWFsaXphdGlvbgorc2VxdWVuY2UpIGlzIHVzZWQgdG8gcXVpY2tseSBjb25maWd1cmUgdGhlIGNvbnRyb2xsZXIsIGFuZCB0aGVuIHRoZSBsb2dpY2FsCitkcml2ZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBhcmUgYXZhaWxhYmxlIGZvciBpbW1lZGlhdGUgdXNlIGV2ZW4gd2hpbGUgdGhleQorYXJlIHN0aWxsIGJlaW5nIGluaXRpYWxpemVkIGJ5IHRoZSBjb250cm9sbGVyLiAgVGhlIHByaW1hcnkgbmVlZCBmb3Igb25saW5lCitjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgbW9uaXRvcmluZyBpcyB0aGVuIHRvIGF2b2lkIHN5c3RlbSBkb3dudGltZSB3aGVuIGRpc2sKK2RyaXZlcyBmYWlsIGFuZCBtdXN0IGJlIHJlcGxhY2VkLiAgTXlsZXgncyBvbmxpbmUgbW9uaXRvcmluZyBhbmQgY29uZmlndXJhdGlvbgordXRpbGl0aWVzIGFyZSBiZWluZyBwb3J0ZWQgdG8gTGludXggYW5kIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBhdCBzb21lIHBvaW50IGluCit0aGUgZnV0dXJlLiAgTm90ZSB0aGF0IHdpdGggYSBTQUYtVEUgKFNDU0kgQWNjZXNzZWQgRmF1bHQtVG9sZXJhbnQgRW5jbG9zdXJlKQorZW5jbG9zdXJlLCB0aGUgY29udHJvbGxlciBpcyBhYmxlIHRvIHJlYnVpbGQgZmFpbGVkIGRyaXZlcyBhdXRvbWF0aWNhbGx5IGFzCitzb29uIGFzIGEgZHJpdmUgcmVwbGFjZW1lbnQgaXMgbWFkZSBhdmFpbGFibGUuCisKK1RoZSBwcmltYXJ5IGludGVyZmFjZXMgZm9yIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIG1vbml0b3JpbmcgYXJlCitzcGVjaWFsIGZpbGVzIGNyZWF0ZWQgaW4gdGhlIC9wcm9jL3JkLy4uLiBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0aGUgbm9ybWFsCitzeXN0ZW0gY29uc29sZSBsb2dnaW5nIG1lY2hhbmlzbS4gIFdoZW5ldmVyIHRoZSBzeXN0ZW0gaXMgb3BlcmF0aW5nLCB0aGUgREFDOTYwCitkcml2ZXIgcXVlcmllcyBlYWNoIGNvbnRyb2xsZXIgZm9yIHN0YXR1cyBpbmZvcm1hdGlvbiBldmVyeSAxMCBzZWNvbmRzLCBhbmQKK2NoZWNrcyBmb3IgYWRkaXRpb25hbCBjb25kaXRpb25zIGV2ZXJ5IDYwIHNlY29uZHMuICBUaGUgaW5pdGlhbCBzdGF0dXMgb2YgZWFjaAorY29udHJvbGxlciBpcyBhbHdheXMgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyIE4gaW4gL3Byb2MvcmQvY04vaW5pdGlhbF9zdGF0dXMsCithbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGFzIG9mIHRoZSBsYXN0IHN0YXR1cyBtb25pdG9yaW5nIHF1ZXJ5IGlzIGF2YWlsYWJsZSBpbgorL3Byb2MvcmQvY04vY3VycmVudF9zdGF0dXMuICBJbiBhZGRpdGlvbiwgc3RhdHVzIGNoYW5nZXMgYXJlIGFsc28gbG9nZ2VkIGJ5IHRoZQorZHJpdmVyIHRvIHRoZSBzeXN0ZW0gY29uc29sZSBhbmQgd2lsbCBhcHBlYXIgaW4gdGhlIGxvZyBmaWxlcyBtYWludGFpbmVkIGJ5CitzeXNsb2cuICBUaGUgcHJvZ3Jlc3Mgb2YgYXN5bmNocm9ub3VzIHJlYnVpbGQgb3IgY29uc2lzdGVuY3kgY2hlY2sgb3BlcmF0aW9ucworaXMgYWxzbyBhdmFpbGFibGUgaW4gL3Byb2MvcmQvY04vY3VycmVudF9zdGF0dXMsIGFuZCBwcm9ncmVzcyBtZXNzYWdlcyBhcmUKK2xvZ2dlZCB0byB0aGUgc3lzdGVtIGNvbnNvbGUgYXQgbW9zdCBldmVyeSA2MCBzZWNvbmRzLgorCitTdGFydGluZyB3aXRoIHRoZSAyLjIuMy8yLjAuMyB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLCB0aGUgc3RhdHVzIGluZm9ybWF0aW9uCithdmFpbGFibGUgaW4gL3Byb2MvcmQvY04vaW5pdGlhbF9zdGF0dXMgYW5kIC9wcm9jL3JkL2NOL2N1cnJlbnRfc3RhdHVzIGhhcyBiZWVuCithdWdtZW50ZWQgdG8gaW5jbHVkZSB0aGUgdmVuZG9yLCBtb2RlbCwgcmV2aXNpb24sIGFuZCBzZXJpYWwgbnVtYmVyIChpZgorYXZhaWxhYmxlKSBmb3IgZWFjaCBwaHlzaWNhbCBkZXZpY2UgZm91bmQgY29ubmVjdGVkIHRvIHRoZSBjb250cm9sbGVyOgorCisqKioqKiBEQUM5NjAgUkFJRCBEcml2ZXIgVmVyc2lvbiAyLjIuMyBvZiAxOSBBdWd1c3QgMTk5OSAqKioqKgorQ29weXJpZ2h0IDE5OTgtMTk5OSBieSBMZW9uYXJkIE4uIFp1YmtvZmYgPGxuekBkYW5kZWxpb24uY29tPgorQ29uZmlndXJpbmcgTXlsZXggREFDOTYwUFJMIFBDSSBSQUlEIENvbnRyb2xsZXIKKyAgRmlybXdhcmUgVmVyc2lvbjogNC4wNy0wLTA3LCBDaGFubmVsczogMSwgTWVtb3J5IFNpemU6IDE2TUIKKyAgUENJIEJ1czogMSwgRGV2aWNlOiA0LCBGdW5jdGlvbjogMSwgSS9PIEFkZHJlc3M6IFVuYXNzaWduZWQKKyAgUENJIEFkZHJlc3M6IDB4RkUzMDAwMDAgbWFwcGVkIGF0IDB4QTA4MDAwMDAsIElSUSBDaGFubmVsOiAyMQorICBDb250cm9sbGVyIFF1ZXVlIERlcHRoOiAxMjgsIE1heGltdW0gQmxvY2tzIHBlciBDb21tYW5kOiAxMjgKKyAgRHJpdmVyIFF1ZXVlIERlcHRoOiAxMjcsIE1heGltdW0gU2NhdHRlci9HYXRoZXIgU2VnbWVudHM6IDMzCisgIFN0cmlwZSBTaXplOiA2NEtCLCBTZWdtZW50IFNpemU6IDhLQiwgQklPUyBHZW9tZXRyeTogMjU1LzYzCisgIFNBRi1URSBFbmNsb3N1cmUgTWFuYWdlbWVudCBFbmFibGVkCisgIFBoeXNpY2FsIERldmljZXM6CisgICAgMDowICBWZW5kb3I6IElCTSAgICAgICBNb2RlbDogRFJWUzA5RCAgICAgICAgICAgUmV2aXNpb246IDAyNzAKKyAgICAgICAgIFNlcmlhbCBOdW1iZXI6ICAgICAgIDY4MDE2Nzc1SEEKKyAgICAgICAgIERpc2sgU3RhdHVzOiBPbmxpbmUsIDE3OTI4MTkyIGJsb2NrcworICAgIDA6MSAgVmVuZG9yOiBJQk0gICAgICAgTW9kZWw6IERSVlMwOUQgICAgICAgICAgIFJldmlzaW9uOiAwMjcwCisgICAgICAgICBTZXJpYWwgTnVtYmVyOiAgICAgICA2ODAwNEU1M0hBCisgICAgICAgICBEaXNrIFN0YXR1czogT25saW5lLCAxNzkyODE5MiBibG9ja3MKKyAgICAwOjIgIFZlbmRvcjogSUJNICAgICAgIE1vZGVsOiBEUlZTMDlEICAgICAgICAgICBSZXZpc2lvbjogMDI3MAorICAgICAgICAgU2VyaWFsIE51bWJlcjogICAgICAgMTMwMTM5MzVIQQorICAgICAgICAgRGlzayBTdGF0dXM6IE9ubGluZSwgMTc5MjgxOTIgYmxvY2tzCisgICAgMDozICBWZW5kb3I6IElCTSAgICAgICBNb2RlbDogRFJWUzA5RCAgICAgICAgICAgUmV2aXNpb246IDAyNzAKKyAgICAgICAgIFNlcmlhbCBOdW1iZXI6ICAgICAgIDEzMDE2ODk3SEEKKyAgICAgICAgIERpc2sgU3RhdHVzOiBPbmxpbmUsIDE3OTI4MTkyIGJsb2NrcworICAgIDA6NCAgVmVuZG9yOiBJQk0gICAgICAgTW9kZWw6IERSVlMwOUQgICAgICAgICAgIFJldmlzaW9uOiAwMjcwCisgICAgICAgICBTZXJpYWwgTnVtYmVyOiAgICAgICA2ODAxOTkwNUhBCisgICAgICAgICBEaXNrIFN0YXR1czogT25saW5lLCAxNzkyODE5MiBibG9ja3MKKyAgICAwOjUgIFZlbmRvcjogSUJNICAgICAgIE1vZGVsOiBEUlZTMDlEICAgICAgICAgICBSZXZpc2lvbjogMDI3MAorICAgICAgICAgU2VyaWFsIE51bWJlcjogICAgICAgNjgwMTI3NTNIQQorICAgICAgICAgRGlzayBTdGF0dXM6IE9ubGluZSwgMTc5MjgxOTIgYmxvY2tzCisgICAgMDo2ICBWZW5kb3I6IEVTRy1TSFYgICBNb2RlbDogU0NBIEhTQlAgTTYgICAgICAgUmV2aXNpb246IDAuNjEKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIE9ubGluZSwgODk2NDA5NjAgYmxvY2tzLCBXcml0ZSBUaHJ1CisgIE5vIFJlYnVpbGQgb3IgQ29uc2lzdGVuY3kgQ2hlY2sgaW4gUHJvZ3Jlc3MKKworVG8gc2ltcGxpZnkgdGhlIG1vbml0b3JpbmcgcHJvY2VzcyBmb3IgY3VzdG9tIHNvZnR3YXJlLCB0aGUgc3BlY2lhbCBmaWxlCisvcHJvYy9yZC9zdGF0dXMgcmV0dXJucyAiT0siIHdoZW4gYWxsIERBQzk2MCBjb250cm9sbGVycyBpbiB0aGUgc3lzdGVtIGFyZQorb3BlcmF0aW5nIG5vcm1hbGx5IGFuZCBubyBmYWlsdXJlcyBoYXZlIG9jY3VycmVkLCBvciAiQUxFUlQiIGlmIGFueSBsb2dpY2FsCitkcml2ZXMgYXJlIG9mZmxpbmUgb3IgY3JpdGljYWwgb3IgYW55IG5vbi1zdGFuZGJ5IHBoeXNpY2FsIGRyaXZlcyBhcmUgZGVhZC4KKworQ29uZmlndXJhdGlvbiBjb21tYW5kcyBmb3IgY29udHJvbGxlciBOIGFyZSBhdmFpbGFibGUgdmlhIHRoZSBzcGVjaWFsIGZpbGUKKy9wcm9jL3JkL2NOL3VzZXJfY29tbWFuZC4gIEEgaHVtYW4gcmVhZGFibGUgY29tbWFuZCBjYW4gYmUgd3JpdHRlbiB0byB0aGlzCitzcGVjaWFsIGZpbGUgdG8gaW5pdGlhdGUgYSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbiwgYW5kIHRoZSByZXN1bHRzIG9mIHRoZQorb3BlcmF0aW9uIGNhbiB0aGVuIGJlIHJlYWQgYmFjayBmcm9tIHRoZSBzcGVjaWFsIGZpbGUgaW4gYWRkaXRpb24gdG8gYmVpbmcKK2xvZ2dlZCB0byB0aGUgc3lzdGVtIGNvbnNvbGUuICBUaGUgc2hlbGwgY29tbWFuZCBzZXF1ZW5jZQorCisgIGVjaG8gIjxjb25maWd1cmF0aW9uLWNvbW1hbmQ+IiA+IC9wcm9jL3JkL2MwL3VzZXJfY29tbWFuZAorICBjYXQgL3Byb2MvcmQvYzAvdXNlcl9jb21tYW5kCisKK2lzIHR5cGljYWxseSB1c2VkIHRvIGV4ZWN1dGUgY29uZmlndXJhdGlvbiBjb21tYW5kcy4gIFRoZSBjb25maWd1cmF0aW9uCitjb21tYW5kcyBhcmU6CisKKyAgZmx1c2gtY2FjaGUKKworICAgIFRoZSAiZmx1c2gtY2FjaGUiIGNvbW1hbmQgZmx1c2hlcyB0aGUgY29udHJvbGxlcidzIGNhY2hlLiAgVGhlIHN5c3RlbQorICAgIGF1dG9tYXRpY2FsbHkgZmx1c2hlcyB0aGUgY2FjaGUgYXQgc2h1dGRvd24gb3IgaWYgdGhlIGRyaXZlciBtb2R1bGUgaXMKKyAgICB1bmxvYWRlZCwgc28gdGhpcyBjb21tYW5kIGlzIG9ubHkgbmVlZGVkIHRvIGJlIGNlcnRhaW4gYSB3cml0ZSBiYWNrIGNhY2hlCisgICAgaXMgZmx1c2hlZCB0byBkaXNrIGJlZm9yZSB0aGUgc3lzdGVtIGlzIHBvd2VyZWQgb2ZmIGJ5IGEgY29tbWFuZCB0byBhIFVQUy4KKyAgICBOb3RlIHRoYXQgdGhlIGZsdXNoLWNhY2hlIGNvbW1hbmQgYWxzbyBzdG9wcyBhbiBhc3luY2hyb25vdXMgcmVidWlsZCBvcgorICAgIGNvbnNpc3RlbmN5IGNoZWNrLCBzbyBpdCBzaG91bGQgbm90IGJlIHVzZWQgZXhjZXB0IHdoZW4gdGhlIHN5c3RlbSBpcyBiZWluZworICAgIGhhbHRlZC4KKworICBraWxsIDxjaGFubmVsPjo8dGFyZ2V0LWlkPgorCisgICAgVGhlICJraWxsIiBjb21tYW5kIG1hcmtzIHRoZSBwaHlzaWNhbCBkcml2ZSA8Y2hhbm5lbD46PHRhcmdldC1pZD4gYXMgREVBRC4KKyAgICBUaGlzIGNvbW1hbmQgaXMgcHJvdmlkZWQgcHJpbWFyaWx5IGZvciB0ZXN0aW5nLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCisgICAgZHVyaW5nIG5vcm1hbCBzeXN0ZW0gb3BlcmF0aW9uLgorCisgIG1ha2Utb25saW5lIDxjaGFubmVsPjo8dGFyZ2V0LWlkPgorCisgICAgVGhlICJtYWtlLW9ubGluZSIgY29tbWFuZCBjaGFuZ2VzIHRoZSBwaHlzaWNhbCBkcml2ZSA8Y2hhbm5lbD46PHRhcmdldC1pZD4KKyAgICBmcm9tIHN0YXR1cyBERUFEIHRvIHN0YXR1cyBPTkxJTkUuICBJbiBjYXNlcyB3aGVyZSBtdWx0aXBsZSBwaHlzaWNhbCBkcml2ZXMKKyAgICBoYXZlIGJlZW4ga2lsbGVkIHNpbXVsdGFuZW91c2x5LCB0aGlzIGNvbW1hbmQgbWF5IGJlIHVzZWQgdG8gYnJpbmcgYWxsIGJ1dAorICAgIG9uZSBvZiB0aGVtIGJhY2sgb25saW5lLCBhZnRlciB3aGljaCBhIHJlYnVpbGQgdG8gdGhlIGZpbmFsIGRyaXZlIGlzCisgICAgbmVjZXNzYXJ5LgorCisgICAgV2FybmluZzogbWFrZS1vbmxpbmUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBhIGRlYWQgcGh5c2ljYWwgZHJpdmUgdGhhdCBpcworICAgIGFuIGFjdGl2ZSBwYXJ0IG9mIGEgZHJpdmUgZ3JvdXAsIG5ldmVyIG9uIGEgc3RhbmRieSBkcml2ZS4gIFRoZSBjb21tYW5kCisgICAgc2hvdWxkIG5ldmVyIGJlIHVzZWQgb24gYSBkZWFkIGRyaXZlIHRoYXQgaXMgcGFydCBvZiBhIGNyaXRpY2FsIGxvZ2ljYWwKKyAgICBkcml2ZTsgcmVidWlsZCBzaG91bGQgYmUgdXNlZCBpZiBvbmx5IGEgc2luZ2xlIGRyaXZlIGlzIGRlYWQuCisKKyAgbWFrZS1zdGFuZGJ5IDxjaGFubmVsPjo8dGFyZ2V0LWlkPgorCisgICAgVGhlICJtYWtlLXN0YW5kYnkiIGNvbW1hbmQgY2hhbmdlcyBwaHlzaWNhbCBkcml2ZSA8Y2hhbm5lbD46PHRhcmdldC1pZD4KKyAgICBmcm9tIHN0YXR1cyBERUFEIHRvIHN0YXR1cyBTVEFOREJZLiAgSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBjYXNlcyB3aGVyZQorICAgIGEgZGVhZCBkcml2ZSB3YXMgcmVwbGFjZWQgYWZ0ZXIgYW4gYXV0b21hdGljIHJlYnVpbGQgd2FzIHBlcmZvcm1lZCBvbnRvIGEKKyAgICBzdGFuZGJ5IGRyaXZlLiAgSXQgY2Fubm90IGJlIHVzZWQgdG8gYWRkIGEgc3RhbmRieSBkcml2ZSB0byB0aGUgY29udHJvbGxlcgorICAgIGNvbmZpZ3VyYXRpb24gaWYgb25lIHdhcyBub3QgY3JlYXRlZCBpbml0aWFsbHk7IHRoZSBCSU9TIENvbmZpZ3VyYXRpb24KKyAgICBVdGlsaXR5IG11c3QgYmUgdXNlZCBmb3IgdGhhdCBjdXJyZW50bHkuCisKKyAgcmVidWlsZCA8Y2hhbm5lbD46PHRhcmdldC1pZD4KKworICAgIFRoZSAicmVidWlsZCIgY29tbWFuZCBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHJlYnVpbGQgb250byBwaHlzaWNhbCBkcml2ZQorICAgIDxjaGFubmVsPjo8dGFyZ2V0LWlkPi4gIEl0IHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBhIGRlYWQgZHJpdmUgaGFzIGJlZW4KKyAgICByZXBsYWNlZC4KKworICBjaGVjay1jb25zaXN0ZW5jeSA8bG9naWNhbC1kcml2ZS1udW1iZXI+CisKKyAgICBUaGUgImNoZWNrLWNvbnNpc3RlbmN5IiBjb21tYW5kIGluaXRpYXRlcyBhbiBhc3luY2hyb25vdXMgY29uc2lzdGVuY3kgY2hlY2sKKyAgICBvZiA8bG9naWNhbC1kcml2ZS1udW1iZXI+IHdpdGggYXV0b21hdGljIHJlc3RvcmF0aW9uLiAgSXQgY2FuIGJlIHVzZWQKKyAgICB3aGVuZXZlciBpdCBpcyBkZXNpcmVkIHRvIHZlcmlmeSB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIHJlZHVuZGFuY3kKKyAgICBpbmZvcm1hdGlvbi4KKworICBjYW5jZWwtcmVidWlsZAorICBjYW5jZWwtY29uc2lzdGVuY3ktY2hlY2sKKworICAgIFRoZSAiY2FuY2VsLXJlYnVpbGQiIGFuZCAiY2FuY2VsLWNvbnNpc3RlbmN5LWNoZWNrIiBjb21tYW5kcyBjYW5jZWwgYW55CisgICAgcmVidWlsZCBvciBjb25zaXN0ZW5jeSBjaGVjayBvcGVyYXRpb25zIHByZXZpb3VzbHkgaW5pdGlhdGVkLgorCisKKwkgICAgICAgRVhBTVBMRSBJIC0gRFJJVkUgRkFJTFVSRSBXSVRIT1VUIEEgU1RBTkRCWSBEUklWRQorCitUaGUgZm9sbG93aW5nIGFubm90YXRlZCBsb2dzIGRlbW9uc3RyYXRlIHRoZSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24gYW5kIGFuZAorb25saW5lIHN0YXR1cyBtb25pdG9yaW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgTGludXggREFDOTYwIERyaXZlci4gIFRoZSB0ZXN0Citjb25maWd1cmF0aW9uIGNvbXByaXNlcyA2IDFHQiBRdWFudHVtIEF0bGFzIEkgZGlzayBkcml2ZXMgb24gdHdvIGNoYW5uZWxzIG9mIGEKK0RBQzk2MFBKIGNvbnRyb2xsZXIuICBUaGUgcGh5c2ljYWwgZHJpdmVzIGFyZSBjb25maWd1cmVkIGludG8gYSBzaW5nbGUgZHJpdmUKK2dyb3VwIHdpdGhvdXQgYSBzdGFuZGJ5IGRyaXZlLCBhbmQgdGhlIGRyaXZlIGdyb3VwIGhhcyBiZWVuIGNvbmZpZ3VyZWQgaW50byB0d28KK2xvZ2ljYWwgZHJpdmVzLCBvbmUgUkFJRC01IGFuZCBvbmUgUkFJRC02LiAgTm90ZSB0aGF0IHRoZXNlIGxvZ3MgYXJlIGZyb20gYW4KK2VhcmxpZXIgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGFuZCB0aGUgbWVzc2FnZXMgaGF2ZSBjaGFuZ2VkIHNvbWV3aGF0IHdpdGggbmV3ZXIKK3JlbGVhc2VzLCBidXQgdGhlIGZ1bmN0aW9uYWxpdHkgcmVtYWlucyBzaW1pbGFyLiAgRmlyc3QsIGhlcmUgaXMgdGhlIGN1cnJlbnQKK3N0YXR1cyBvZiB0aGUgUkFJRCBjb25maWd1cmF0aW9uOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzCisqKioqKiBEQUM5NjAgUkFJRCBEcml2ZXIgVmVyc2lvbiAyLjAuMCBvZiAyMyBNYXJjaCAxOTk5ICoqKioqCitDb3B5cmlnaHQgMTk5OC0xOTk5IGJ5IExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CitDb25maWd1cmluZyBNeWxleCBEQUM5NjBQSiBQQ0kgUkFJRCBDb250cm9sbGVyCisgIEZpcm13YXJlIFZlcnNpb246IDQuMDYtMC0wOCwgQ2hhbm5lbHM6IDMsIE1lbW9yeSBTaXplOiA4TUIKKyAgUENJIEJ1czogMCwgRGV2aWNlOiAxOSwgRnVuY3Rpb246IDEsIEkvTyBBZGRyZXNzOiBVbmFzc2lnbmVkCisgIFBDSSBBZGRyZXNzOiAweEZENEZDMDAwIG1hcHBlZCBhdCAweDg4MDcwMDAsIElSUSBDaGFubmVsOiA5CisgIENvbnRyb2xsZXIgUXVldWUgRGVwdGg6IDEyOCwgTWF4aW11bSBCbG9ja3MgcGVyIENvbW1hbmQ6IDEyOAorICBEcml2ZXIgUXVldWUgRGVwdGg6IDEyNywgTWF4aW11bSBTY2F0dGVyL0dhdGhlciBTZWdtZW50czogMzMKKyAgU3RyaXBlIFNpemU6IDY0S0IsIFNlZ21lbnQgU2l6ZTogOEtCLCBCSU9TIEdlb21ldHJ5OiAyNTUvNjMKKyAgUGh5c2ljYWwgRGV2aWNlczoKKyAgICAwOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDoyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIE9ubGluZSwgNTQ5ODg4MCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgT25saW5lLCAzMzA1NDcyIGJsb2NrcywgV3JpdGUgVGhydQorICBObyBSZWJ1aWxkIG9yIENvbnNpc3RlbmN5IENoZWNrIGluIFByb2dyZXNzCisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvc3RhdHVzCitPSworCitUaGUgYWJvdmUgbWVzc2FnZXMgaW5kaWNhdGUgdGhhdCBldmVyeXRoaW5nIGlzIGhlYWx0aHksIGFuZCAvcHJvYy9yZC9zdGF0dXMKK3JldHVybnMgIk9LIiBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIHByb2JsZW1zIHdpdGggYW55IERBQzk2MCBjb250cm9sbGVyCitpbiB0aGUgc3lzdGVtLiAgRm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMsIHdoaWxlIEkvTyBpcyBhY3RpdmUgUGh5c2ljYWwgRHJpdmUKKzE6MSBpcyBub3cgZGlzY29ubmVjdGVkLCBzaW11bGF0aW5nIGEgZHJpdmUgZmFpbHVyZS4gIFRoZSBmYWlsdXJlIGlzIG5vdGVkIGJ5Cit0aGUgZHJpdmVyIHdpdGhpbiAxMCBzZWNvbmRzIG9mIHRoZSBjb250cm9sbGVyJ3MgaGF2aW5nIGRldGVjdGVkIGl0LCBhbmQgdGhlCitkcml2ZXIgbG9ncyB0aGUgZm9sbG93aW5nIGNvbnNvbGUgc3RhdHVzIG1lc3NhZ2VzIGluZGljYXRpbmcgdGhhdCBMb2dpY2FsCitEcml2ZXMgMCBhbmQgMSBhcmUgbm93IENSSVRJQ0FMIGFzIGEgcmVzdWx0IG9mIFBoeXNpY2FsIERyaXZlIDE6MSBiZWluZyBERUFEOgorCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToyIEVycm9yIExvZzogU2Vuc2UgS2V5ID0gNiwgQVNDID0gMjksIEFTQ1EgPSAwMgorREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MyBFcnJvciBMb2c6IFNlbnNlIEtleSA9IDYsIEFTQyA9IDI5LCBBU0NRID0gMDIKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjEga2lsbGVkIGJlY2F1c2Ugb2YgdGltZW91dCBvbiBTQ1NJIGNvbW1hbmQKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjEgaXMgbm93IERFQUQKK0RBQzk2MCMwOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgaXMgbm93IENSSVRJQ0FMCitEQUM5NjAjMDogTG9naWNhbCBEcml2ZSAxICgvZGV2L3JkL2MwZDEpIGlzIG5vdyBDUklUSUNBTAorCitUaGUgU2Vuc2UgS2V5cyBsb2dnZWQgaGVyZSBhcmUganVzdCBDaGVjayBDb25kaXRpb24gLyBVbml0IEF0dGVudGlvbiBjb25kaXRpb25zCithcmlzaW5nIGZyb20gYSBTQ1NJIGJ1cyByZXNldCB0aGF0IGlzIGZvcmNlZCBieSB0aGUgY29udHJvbGxlciBkdXJpbmcgaXRzIGVycm9yCityZWNvdmVyeSBwcm9jZWR1cmVzLiAgQ29uY3VycmVudGx5IHdpdGggdGhlIGFib3ZlLCB0aGUgZHJpdmVyIHN0YXR1cyBhdmFpbGFibGUKK2Zyb20gL3Byb2MvcmQgYWxzbyByZWZsZWN0cyB0aGUgZHJpdmUgZmFpbHVyZS4gIFRoZSBzdGF0dXMgbWVzc2FnZSBpbgorL3Byb2MvcmQvc3RhdHVzIGhhcyBjaGFuZ2VkIGZyb20gIk9LIiB0byAiQUxFUlQiOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL3N0YXR1cworQUxFUlQKKworYW5kIC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzIGhhcyBiZWVuIHVwZGF0ZWQ6CisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMKKyAgLi4uCisgIFBoeXNpY2FsIERldmljZXM6CisgICAgMDoxIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MiAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToxIC0gRGlzazogRGVhZCwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMTozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICBMb2dpY2FsIERyaXZlczoKKyAgICAvZGV2L3JkL2MwZDA6IFJBSUQtNSwgQ3JpdGljYWwsIDU0OTg4ODAgYmxvY2tzLCBXcml0ZSBUaHJ1CisgICAgL2Rldi9yZC9jMGQxOiBSQUlELTYsIENyaXRpY2FsLCAzMzA1NDcyIGJsb2NrcywgV3JpdGUgVGhydQorICBObyBSZWJ1aWxkIG9yIENvbnNpc3RlbmN5IENoZWNrIGluIFByb2dyZXNzCisKK1NpbmNlIHRoZXJlIGFyZSBubyBzdGFuZGJ5IGRyaXZlcyBjb25maWd1cmVkLCB0aGUgc3lzdGVtIGNhbiBjb250aW51ZSB0byBhY2Nlc3MKK3RoZSBsb2dpY2FsIGRyaXZlcyBpbiBhIHBlcmZvcm1hbmNlIGRlZ3JhZGVkIG1vZGUgdW50aWwgdGhlIGZhaWxlZCBkcml2ZSBpcworcmVwbGFjZWQgYW5kIGEgcmVidWlsZCBvcGVyYXRpb24gY29tcGxldGVkIHRvIHJlc3RvcmUgdGhlIHJlZHVuZGFuY3kgb2YgdGhlCitsb2dpY2FsIGRyaXZlcy4gIE9uY2UgUGh5c2ljYWwgRHJpdmUgMToxIGlzIHJlcGxhY2VkIHdpdGggYSBwcm9wZXJseQorZnVuY3Rpb25pbmcgZHJpdmUsIG9yIGlmIHRoZSBwaHlzaWNhbCBkcml2ZSB3YXMga2lsbGVkIHdpdGhvdXQgaGF2aW5nIGZhaWxlZAorKGUuZy4sIGR1ZSB0byBlbGVjdHJpY2FsIHByb2JsZW1zIG9uIHRoZSBTQ1NJIGJ1cyksIHRoZSB1c2VyIGNhbiBpbnN0cnVjdCB0aGUKK2NvbnRyb2xsZXIgdG8gaW5pdGlhdGUgYSByZWJ1aWxkIG9wZXJhdGlvbiBvbnRvIHRoZSBuZXdseSByZXBsYWNlZCBkcml2ZToKKworZ3d5bmVkZDovdS9sbnojIGVjaG8gInJlYnVpbGQgMToxIiA+IC9wcm9jL3JkL2MwL3VzZXJfY29tbWFuZAorZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9jMC91c2VyX2NvbW1hbmQKK1JlYnVpbGQgb2YgUGh5c2ljYWwgRHJpdmUgMToxIEluaXRpYXRlZAorCitUaGUgZWNobyBjb21tYW5kIGluc3RydWN0cyB0aGUgY29udHJvbGxlciB0byBpbml0aWF0ZSBhbiBhc3luY2hyb25vdXMgcmVidWlsZAorb3BlcmF0aW9uIG9udG8gUGh5c2ljYWwgRHJpdmUgMToxLCBhbmQgdGhlIHN0YXR1cyBtZXNzYWdlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZQorb3BlcmF0aW9uIGlzIHRoZW4gYXZhaWxhYmxlIGZvciByZWFkaW5nIGZyb20gL3Byb2MvcmQvYzAvdXNlcl9jb21tYW5kLCBhcyB3ZWxsCithcyBiZWluZyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgYnkgdGhlIGRyaXZlci4KKworV2l0aGluIDEwIHNlY29uZHMgb2YgdGhpcyBjb21tYW5kIHRoZSBkcml2ZXIgbG9ncyB0aGUgaW5pdGlhdGlvbiBvZiB0aGUKK2FzeW5jaHJvbm91cyByZWJ1aWxkIG9wZXJhdGlvbjoKKworREFDOTYwIzA6IFJlYnVpbGQgb2YgUGh5c2ljYWwgRHJpdmUgMToxIEluaXRpYXRlZAorREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MSBFcnJvciBMb2c6IFNlbnNlIEtleSA9IDYsIEFTQyA9IDI5LCBBU0NRID0gMDEKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjEgaXMgbm93IFdSSVRFLU9OTFkKK0RBQzk2MCMwOiBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgMSUgY29tcGxldGVkCisKK2FuZCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cyBpcyB1cGRhdGVkOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzCisgIC4uLgorICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MSAtIERpc2s6IFdyaXRlLU9ubHksIDIyMDE2MDAgYmxvY2tzCisgICAgMToyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIENyaXRpY2FsLCA1NDk4ODgwIGJsb2NrcywgV3JpdGUgVGhydQorICAgIC9kZXYvcmQvYzBkMTogUkFJRC02LCBDcml0aWNhbCwgMzMwNTQ3MiBibG9ja3MsIFdyaXRlIFRocnUKKyAgUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIDYlIGNvbXBsZXRlZAorCitBcyB0aGUgcmVidWlsZCBwcm9ncmVzc2VzLCB0aGUgY3VycmVudCBzdGF0dXMgaW4gL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMgaXMKK3VwZGF0ZWQgZXZlcnkgMTAgc2Vjb25kczoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cworICAuLi4KKyAgUGh5c2ljYWwgRGV2aWNlczoKKyAgICAwOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDoyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjEgLSBEaXNrOiBXcml0ZS1Pbmx5LCAyMjAxNjAwIGJsb2NrcworICAgIDE6MiAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgIExvZ2ljYWwgRHJpdmVzOgorICAgIC9kZXYvcmQvYzBkMDogUkFJRC01LCBDcml0aWNhbCwgNTQ5ODg4MCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgQ3JpdGljYWwsIDMzMDU0NzIgYmxvY2tzLCBXcml0ZSBUaHJ1CisgIFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSAxNSUgY29tcGxldGVkCisKK2FuZCBldmVyeSBtaW51dGUgYSBwcm9ncmVzcyBtZXNzYWdlIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZSBieSB0aGUgZHJpdmVyOgorCitEQUM5NjAjMDogUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIDMyJSBjb21wbGV0ZWQKK0RBQzk2MCMwOiBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgNjMlIGNvbXBsZXRlZAorREFDOTYwIzA6IFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSA5NCUgY29tcGxldGVkCitEQUM5NjAjMDogUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAxICgvZGV2L3JkL2MwZDEpIDk0JSBjb21wbGV0ZWQKKworRmluYWxseSwgdGhlIHJlYnVpbGQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4gIFRoZSBkcml2ZXIgbG9ncyB0aGUgc3RhdHVzIG9mIHRoZSAKK2xvZ2ljYWwgYW5kIHBoeXNpY2FsIGRyaXZlcyBhbmQgdGhlIHJlYnVpbGQgY29tcGxldGlvbjoKKworREFDOTYwIzA6IFJlYnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseQorREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MSBpcyBub3cgT05MSU5FCitEQUM5NjAjMDogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIGlzIG5vdyBPTkxJTkUKK0RBQzk2MCMwOiBMb2dpY2FsIERyaXZlIDEgKC9kZXYvcmQvYzBkMSkgaXMgbm93IE9OTElORQorCisvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cyBpcyB1cGRhdGVkOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzCisgIC4uLgorICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMTozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICBMb2dpY2FsIERyaXZlczoKKyAgICAvZGV2L3JkL2MwZDA6IFJBSUQtNSwgT25saW5lLCA1NDk4ODgwIGJsb2NrcywgV3JpdGUgVGhydQorICAgIC9kZXYvcmQvYzBkMTogUkFJRC02LCBPbmxpbmUsIDMzMDU0NzIgYmxvY2tzLCBXcml0ZSBUaHJ1CisgIFJlYnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseQorCithbmQgL3Byb2MvcmQvc3RhdHVzIGluZGljYXRlcyB0aGF0IGV2ZXJ5dGhpbmcgaXMgaGVhbHRoeSBvbmNlIGFnYWluOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL3N0YXR1cworT0sKKworCisJCUVYQU1QTEUgSUkgLSBEUklWRSBGQUlMVVJFIFdJVEggQSBTVEFOREJZIERSSVZFCisKK1RoZSBmb2xsb3dpbmcgYW5ub3RhdGVkIGxvZ3MgZGVtb25zdHJhdGUgdGhlIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiBhbmQgYW5kCitvbmxpbmUgc3RhdHVzIG1vbml0b3JpbmcgY2FwYWJpbGl0aWVzIG9mIHRoZSBMaW51eCBEQUM5NjAgRHJpdmVyLiAgVGhlIHRlc3QKK2NvbmZpZ3VyYXRpb24gY29tcHJpc2VzIDYgMUdCIFF1YW50dW0gQXRsYXMgSSBkaXNrIGRyaXZlcyBvbiB0d28gY2hhbm5lbHMgb2YgYQorREFDOTYwUEogY29udHJvbGxlci4gIFRoZSBwaHlzaWNhbCBkcml2ZXMgYXJlIGNvbmZpZ3VyZWQgaW50byBhIHNpbmdsZSBkcml2ZQorZ3JvdXAgd2l0aCBhIHN0YW5kYnkgZHJpdmUsIGFuZCB0aGUgZHJpdmUgZ3JvdXAgaGFzIGJlZW4gY29uZmlndXJlZCBpbnRvIHR3bworbG9naWNhbCBkcml2ZXMsIG9uZSBSQUlELTUgYW5kIG9uZSBSQUlELTYuICBOb3RlIHRoYXQgdGhlc2UgbG9ncyBhcmUgZnJvbSBhbgorZWFybGllciB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgYW5kIHRoZSBtZXNzYWdlcyBoYXZlIGNoYW5nZWQgc29tZXdoYXQgd2l0aCBuZXdlcgorcmVsZWFzZXMsIGJ1dCB0aGUgZnVuY3Rpb25hbGl0eSByZW1haW5zIHNpbWlsYXIuICBGaXJzdCwgaGVyZSBpcyB0aGUgY3VycmVudAorc3RhdHVzIG9mIHRoZSBSQUlEIGNvbmZpZ3VyYXRpb246CisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMKKyoqKioqIERBQzk2MCBSQUlEIERyaXZlciBWZXJzaW9uIDIuMC4wIG9mIDIzIE1hcmNoIDE5OTkgKioqKioKK0NvcHlyaWdodCAxOTk4LTE5OTkgYnkgTGVvbmFyZCBOLiBadWJrb2ZmIDxsbnpAZGFuZGVsaW9uLmNvbT4KK0NvbmZpZ3VyaW5nIE15bGV4IERBQzk2MFBKIFBDSSBSQUlEIENvbnRyb2xsZXIKKyAgRmlybXdhcmUgVmVyc2lvbjogNC4wNi0wLTA4LCBDaGFubmVsczogMywgTWVtb3J5IFNpemU6IDhNQgorICBQQ0kgQnVzOiAwLCBEZXZpY2U6IDE5LCBGdW5jdGlvbjogMSwgSS9PIEFkZHJlc3M6IFVuYXNzaWduZWQKKyAgUENJIEFkZHJlc3M6IDB4RkQ0RkMwMDAgbWFwcGVkIGF0IDB4ODgwNzAwMCwgSVJRIENoYW5uZWw6IDkKKyAgQ29udHJvbGxlciBRdWV1ZSBEZXB0aDogMTI4LCBNYXhpbXVtIEJsb2NrcyBwZXIgQ29tbWFuZDogMTI4CisgIERyaXZlciBRdWV1ZSBEZXB0aDogMTI3LCBNYXhpbXVtIFNjYXR0ZXIvR2F0aGVyIFNlZ21lbnRzOiAzMworICBTdHJpcGUgU2l6ZTogNjRLQiwgU2VnbWVudCBTaXplOiA4S0IsIEJJT1MgR2VvbWV0cnk6IDI1NS82MworICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMTozIC0gRGlzazogU3RhbmRieSwgMjIwMTYwMCBibG9ja3MKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIE9ubGluZSwgNDM5OTEwNCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgT25saW5lLCAyNzU0NTYwIGJsb2NrcywgV3JpdGUgVGhydQorICBObyBSZWJ1aWxkIG9yIENvbnNpc3RlbmN5IENoZWNrIGluIFByb2dyZXNzCisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvc3RhdHVzCitPSworCitUaGUgYWJvdmUgbWVzc2FnZXMgaW5kaWNhdGUgdGhhdCBldmVyeXRoaW5nIGlzIGhlYWx0aHksIGFuZCAvcHJvYy9yZC9zdGF0dXMKK3JldHVybnMgIk9LIiBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIHByb2JsZW1zIHdpdGggYW55IERBQzk2MCBjb250cm9sbGVyCitpbiB0aGUgc3lzdGVtLiAgRm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMsIHdoaWxlIEkvTyBpcyBhY3RpdmUgUGh5c2ljYWwgRHJpdmUKKzE6MiBpcyBub3cgZGlzY29ubmVjdGVkLCBzaW11bGF0aW5nIGEgZHJpdmUgZmFpbHVyZS4gIFRoZSBmYWlsdXJlIGlzIG5vdGVkIGJ5Cit0aGUgZHJpdmVyIHdpdGhpbiAxMCBzZWNvbmRzIG9mIHRoZSBjb250cm9sbGVyJ3MgaGF2aW5nIGRldGVjdGVkIGl0LCBhbmQgdGhlCitkcml2ZXIgbG9ncyB0aGUgZm9sbG93aW5nIGNvbnNvbGUgc3RhdHVzIG1lc3NhZ2VzOgorCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToxIEVycm9yIExvZzogU2Vuc2UgS2V5ID0gNiwgQVNDID0gMjksIEFTQ1EgPSAwMgorREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MyBFcnJvciBMb2c6IFNlbnNlIEtleSA9IDYsIEFTQyA9IDI5LCBBU0NRID0gMDIKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjIga2lsbGVkIGJlY2F1c2Ugb2YgdGltZW91dCBvbiBTQ1NJIGNvbW1hbmQKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjIgaXMgbm93IERFQUQKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjIga2lsbGVkIGJlY2F1c2UgaXQgd2FzIHJlbW92ZWQKK0RBQzk2MCMwOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgaXMgbm93IENSSVRJQ0FMCitEQUM5NjAjMDogTG9naWNhbCBEcml2ZSAxICgvZGV2L3JkL2MwZDEpIGlzIG5vdyBDUklUSUNBTAorCitTaW5jZSBhIHN0YW5kYnkgZHJpdmUgaXMgY29uZmlndXJlZCwgdGhlIGNvbnRyb2xsZXIgYXV0b21hdGljYWxseSBiZWdpbnMKK3JlYnVpbGRpbmcgb250byB0aGUgc3RhbmRieSBkcml2ZToKKworREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MyBpcyBub3cgV1JJVEUtT05MWQorREFDOTYwIzA6IFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSA0JSBjb21wbGV0ZWQKKworQ29uY3VycmVudGx5IHdpdGggdGhlIGFib3ZlLCB0aGUgZHJpdmVyIHN0YXR1cyBhdmFpbGFibGUgZnJvbSAvcHJvYy9yZCBhbHNvCityZWZsZWN0cyB0aGUgZHJpdmUgZmFpbHVyZSBhbmQgYXV0b21hdGljIHJlYnVpbGQuICBUaGUgc3RhdHVzIG1lc3NhZ2UgaW4KKy9wcm9jL3JkL3N0YXR1cyBoYXMgY2hhbmdlZCBmcm9tICJPSyIgdG8gIkFMRVJUIjoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9zdGF0dXMKK0FMRVJUCisKK2FuZCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cyBoYXMgYmVlbiB1cGRhdGVkOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzCisgIC4uLgorICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjIgLSBEaXNrOiBEZWFkLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IFdyaXRlLU9ubHksIDIyMDE2MDAgYmxvY2tzCisgIExvZ2ljYWwgRHJpdmVzOgorICAgIC9kZXYvcmQvYzBkMDogUkFJRC01LCBDcml0aWNhbCwgNDM5OTEwNCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgQ3JpdGljYWwsIDI3NTQ1NjAgYmxvY2tzLCBXcml0ZSBUaHJ1CisgIFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSA0JSBjb21wbGV0ZWQKKworQXMgdGhlIHJlYnVpbGQgcHJvZ3Jlc3NlcywgdGhlIGN1cnJlbnQgc3RhdHVzIGluIC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzIGlzCit1cGRhdGVkIGV2ZXJ5IDEwIHNlY29uZHM6CisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMKKyAgLi4uCisgIFBoeXNpY2FsIERldmljZXM6CisgICAgMDoxIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MiAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToxIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MiAtIERpc2s6IERlYWQsIDIyMDE2MDAgYmxvY2tzCisgICAgMTozIC0gRGlzazogV3JpdGUtT25seSwgMjIwMTYwMCBibG9ja3MKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIENyaXRpY2FsLCA0Mzk5MTA0IGJsb2NrcywgV3JpdGUgVGhydQorICAgIC9kZXYvcmQvYzBkMTogUkFJRC02LCBDcml0aWNhbCwgMjc1NDU2MCBibG9ja3MsIFdyaXRlIFRocnUKKyAgUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIDQwJSBjb21wbGV0ZWQKKworYW5kIGV2ZXJ5IG1pbnV0ZSBhIHByb2dyZXNzIG1lc3NhZ2UgaXMgbG9nZ2VkIG9uIHRoZSBjb25zb2xlIGJ5IHRoZSBkcml2ZXI6CisKK0RBQzk2MCMwOiBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgNDAlIGNvbXBsZXRlZAorREFDOTYwIzA6IFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSA3NiUgY29tcGxldGVkCitEQUM5NjAjMDogUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAxICgvZGV2L3JkL2MwZDEpIDY2JSBjb21wbGV0ZWQKK0RBQzk2MCMwOiBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDEgKC9kZXYvcmQvYzBkMSkgODQlIGNvbXBsZXRlZAorCitGaW5hbGx5LCB0aGUgcmVidWlsZCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LiAgVGhlIGRyaXZlciBsb2dzIHRoZSBzdGF0dXMgb2YgdGhlIAorbG9naWNhbCBhbmQgcGh5c2ljYWwgZHJpdmVzIGFuZCB0aGUgcmVidWlsZCBjb21wbGV0aW9uOgorCitEQUM5NjAjMDogUmVidWlsZCBDb21wbGV0ZWQgU3VjY2Vzc2Z1bGx5CitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMTozIGlzIG5vdyBPTkxJTkUKK0RBQzk2MCMwOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgaXMgbm93IE9OTElORQorREFDOTYwIzA6IExvZ2ljYWwgRHJpdmUgMSAoL2Rldi9yZC9jMGQxKSBpcyBub3cgT05MSU5FCisKKy9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzIGlzIHVwZGF0ZWQ6CisKKyoqKioqIERBQzk2MCBSQUlEIERyaXZlciBWZXJzaW9uIDIuMC4wIG9mIDIzIE1hcmNoIDE5OTkgKioqKioKK0NvcHlyaWdodCAxOTk4LTE5OTkgYnkgTGVvbmFyZCBOLiBadWJrb2ZmIDxsbnpAZGFuZGVsaW9uLmNvbT4KK0NvbmZpZ3VyaW5nIE15bGV4IERBQzk2MFBKIFBDSSBSQUlEIENvbnRyb2xsZXIKKyAgRmlybXdhcmUgVmVyc2lvbjogNC4wNi0wLTA4LCBDaGFubmVsczogMywgTWVtb3J5IFNpemU6IDhNQgorICBQQ0kgQnVzOiAwLCBEZXZpY2U6IDE5LCBGdW5jdGlvbjogMSwgSS9PIEFkZHJlc3M6IFVuYXNzaWduZWQKKyAgUENJIEFkZHJlc3M6IDB4RkQ0RkMwMDAgbWFwcGVkIGF0IDB4ODgwNzAwMCwgSVJRIENoYW5uZWw6IDkKKyAgQ29udHJvbGxlciBRdWV1ZSBEZXB0aDogMTI4LCBNYXhpbXVtIEJsb2NrcyBwZXIgQ29tbWFuZDogMTI4CisgIERyaXZlciBRdWV1ZSBEZXB0aDogMTI3LCBNYXhpbXVtIFNjYXR0ZXIvR2F0aGVyIFNlZ21lbnRzOiAzMworICBTdHJpcGUgU2l6ZTogNjRLQiwgU2VnbWVudCBTaXplOiA4S0IsIEJJT1MgR2VvbWV0cnk6IDI1NS82MworICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjIgLSBEaXNrOiBEZWFkLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIE9ubGluZSwgNDM5OTEwNCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgT25saW5lLCAyNzU0NTYwIGJsb2NrcywgV3JpdGUgVGhydQorICBSZWJ1aWxkIENvbXBsZXRlZCBTdWNjZXNzZnVsbHkKKworYW5kIC9wcm9jL3JkL3N0YXR1cyBpbmRpY2F0ZXMgdGhhdCBldmVyeXRoaW5nIGlzIGhlYWx0aHkgb25jZSBhZ2FpbjoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9zdGF0dXMKK09LCisKK05vdGUgdGhhdCB0aGUgYWJzZW5jZSBvZiBhIHZpYWJsZSBzdGFuZGJ5IGRyaXZlIGRvZXMgbm90IGNyZWF0ZSBhbiAiQUxFUlQiCitzdGF0dXMuICBPbmNlIGRlYWQgUGh5c2ljYWwgRHJpdmUgMToyIGhhcyBiZWVuIHJlcGxhY2VkLCB0aGUgY29udHJvbGxlciBtdXN0IGJlCit0b2xkIHRoYXQgdGhpcyBoYXMgb2NjdXJyZWQgYW5kIHRoYXQgdGhlIG5ld2x5IHJlcGxhY2VkIGRyaXZlIHNob3VsZCBiZWNvbWUgdGhlCituZXcgc3RhbmRieSBkcml2ZToKKworZ3d5bmVkZDovdS9sbnojIGVjaG8gIm1ha2Utc3RhbmRieSAxOjIiID4gL3Byb2MvcmQvYzAvdXNlcl9jb21tYW5kCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL3VzZXJfY29tbWFuZAorTWFrZSBTdGFuZGJ5IG9mIFBoeXNpY2FsIERyaXZlIDE6MiBTdWNjZWVkZWQKKworVGhlIGVjaG8gY29tbWFuZCBpbnN0cnVjdHMgdGhlIGNvbnRyb2xsZXIgdG8gbWFrZSBQaHlzaWNhbCBEcml2ZSAxOjIgaW50byBhCitzdGFuZGJ5IGRyaXZlLCBhbmQgdGhlIHN0YXR1cyBtZXNzYWdlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSBvcGVyYXRpb24gaXMgdGhlbgorYXZhaWxhYmxlIGZvciByZWFkaW5nIGZyb20gL3Byb2MvcmQvYzAvdXNlcl9jb21tYW5kLCBhcyB3ZWxsIGFzIGJlaW5nIGxvZ2dlZCB0bwordGhlIGNvbnNvbGUgYnkgdGhlIGRyaXZlci4gIFdpdGhpbiA2MCBzZWNvbmRzIG9mIHRoaXMgY29tbWFuZCB0aGUgZHJpdmVyIGxvZ3M6CisKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjIgRXJyb3IgTG9nOiBTZW5zZSBLZXkgPSA2LCBBU0MgPSAyOSwgQVNDUSA9IDAxCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToyIGlzIG5vdyBTVEFOREJZCitEQUM5NjAjMDogTWFrZSBTdGFuZGJ5IG9mIFBoeXNpY2FsIERyaXZlIDE6MiBTdWNjZWVkZWQKKworYW5kIC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzIGlzIHVwZGF0ZWQ6CisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMKKyAgLi4uCisgIFBoeXNpY2FsIERldmljZXM6CisgICAgMDoxIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MiAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToxIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MiAtIERpc2s6IFN0YW5kYnksIDIyMDE2MDAgYmxvY2tzCisgICAgMTozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICBMb2dpY2FsIERyaXZlczoKKyAgICAvZGV2L3JkL2MwZDA6IFJBSUQtNSwgT25saW5lLCA0Mzk5MTA0IGJsb2NrcywgV3JpdGUgVGhydQorICAgIC9kZXYvcmQvYzBkMTogUkFJRC02LCBPbmxpbmUsIDI3NTQ1NjAgYmxvY2tzLCBXcml0ZSBUaHJ1CisgIFJlYnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SRUFETUUuY3ljbGFkZXNaIGIvRG9jdW1lbnRhdGlvbi9SRUFETUUuY3ljbGFkZXNaCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNGE2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JFQURNRS5jeWNsYWRlc1oKQEAgLTAsMCArMSw4IEBACisKK1RoZSBDeWNsYWRlcy1aIG11c3QgaGF2ZSBmaXJtd2FyZSBsb2FkZWQgb250byB0aGUgY2FyZCBiZWZvcmUgaXQgd2lsbAorb3BlcmF0ZS4gIFRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgZHVyaW5nIHN5c3RlbSBzdGFydHVwLAorCitUaGUgZmlybXdhcmUsIGxvYWRlciBwcm9ncmFtIGFuZCB0aGUgbGF0ZXN0IGRldmljZSBkcml2ZXIgY29kZSBhcmUKK2F2YWlsYWJsZSBmcm9tIEN5Y2xhZGVzIGF0CisgICAgZnRwOi8vZnRwLmN5Y2xhZGVzLmNvbS9wdWIvY3ljbGFkZXMvY3ljbGFkZXMtei9saW51eC8KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TQUsudHh0IGIvRG9jdW1lbnRhdGlvbi9TQUsudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDE5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1NBSy50eHQKQEAgLTAsMCArMSw4OCBAQAorTGludXggMi40LjIgU2VjdXJlIEF0dGVudGlvbiBLZXkgKFNBSykgaGFuZGxpbmcKKzE4IE1hcmNoIDIwMDEsIEFuZHJldyBNb3J0b24gPGFrcG1Ab3NkbC5vcmc+CisKK0FuIG9wZXJhdGluZyBzeXN0ZW0ncyBTZWN1cmUgQXR0ZW50aW9uIEtleSBpcyBhIHNlY3VyaXR5IHRvb2wgd2hpY2ggaXMKK3Byb3ZpZGVkIGFzIHByb3RlY3Rpb24gYWdhaW5zdCB0cm9qYW4gcGFzc3dvcmQgY2FwdHVyaW5nIHByb2dyYW1zLiAgSXQKK2lzIGFuIHVuZGVmZWF0YWJsZSB3YXkgb2Yga2lsbGluZyBhbGwgcHJvZ3JhbXMgd2hpY2ggY291bGQgYmUKK21hc3F1ZXJhZGluZyBhcyBsb2dpbiBhcHBsaWNhdGlvbnMuICBVc2VycyBuZWVkIHRvIGJlIHRhdWdodCB0byBlbnRlcgordGhpcyBrZXkgc2VxdWVuY2UgYmVmb3JlIHRoZXkgbG9nIGluIHRvIHRoZSBzeXN0ZW0uCisKK0Zyb20gdGhlIFBDIGtleWJvYXJkLCBMaW51eCBoYXMgdHdvIHNpbWlsYXIgYnV0IGRpZmZlcmVudCB3YXlzIG9mCitwcm92aWRpbmcgU0FLLiAgT25lIGlzIHRoZSBBTFQtU1lTUlEtSyBzZXF1ZW5jZS4gIFlvdSBzaG91bGRuJ3QgdXNlCit0aGlzIHNlcXVlbmNlLiAgSXQgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGtlcm5lbCB3YXMgY29tcGlsZWQgd2l0aAorc3lzcnEgc3VwcG9ydC4KKworVGhlIHByb3BlciB3YXkgb2YgZ2VuZXJhdGluZyBhIFNBSyBpcyB0byBkZWZpbmUgdGhlIGtleSBzZXF1ZW5jZSB1c2luZworYGxvYWRrZXlzJy4gIFRoaXMgd2lsbCB3b3JrIHdoZXRoZXIgb3Igbm90IHN5c3JxIHN1cHBvcnQgaXMgY29tcGlsZWQKK2ludG8gdGhlIGtlcm5lbC4KKworU0FLIHdvcmtzIGNvcnJlY3RseSB3aGVuIHRoZSBrZXlib2FyZCBpcyBpbiByYXcgbW9kZS4gIFRoaXMgbWVhbnMgdGhhdAorb25jZSBkZWZpbmVkLCBTQUsgd2lsbCBraWxsIGEgcnVubmluZyBYIHNlcnZlci4gIElmIHRoZSBzeXN0ZW0gaXMgaW4KK3J1biBsZXZlbCA1LCB0aGUgWCBzZXJ2ZXIgd2lsbCByZXN0YXJ0LiAgVGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvCitoYXBwZW4uCisKK1doYXQga2V5IHNlcXVlbmNlIHNob3VsZCB5b3UgdXNlPyBXZWxsLCBDVFJMLUFMVC1ERUwgaXMgdXNlZCB0byByZWJvb3QKK3RoZSBtYWNoaW5lLiAgQ1RSTC1BTFQtQkFDS1NQQUNFIGlzIG1hZ2ljYWwgdG8gdGhlIFggc2VydmVyLiAgV2UnbGwKK2Nob29zZSBDVFJMLUFMVC1QQVVTRS4KKworSW4geW91ciByYy5zeXNpbml0IChvciByYy5sb2NhbCkgZmlsZSwgYWRkIHRoZSBjb21tYW5kCisKKwllY2hvICJjb250cm9sIGFsdCBrZXljb2RlIDEwMSA9IFNBSyIgfCAvYmluL2xvYWRrZXlzCisKK0FuZCB0aGF0J3MgaXQhICBPbmx5IHRoZSBzdXBlcnVzZXIgbWF5IHJlcHJvZ3JhbSB0aGUgU0FLIGtleS4KKworCitOT1RFUworPT09PT0KKworMTogTGludXggU0FLIGlzIHNhaWQgdG8gYmUgbm90IGEgInRydWUgU0FLIiBhcyBpcyByZXF1aXJlZCBieQorICAgc3lzdGVtcyB3aGljaCBpbXBsZW1lbnQgQzIgbGV2ZWwgc2VjdXJpdHkuICBUaGlzIGF1dGhvciBkb2VzIG5vdAorICAga25vdyB3aHkuCisKKworMjogT24gdGhlIFBDIGtleWJvYXJkLCBTQUsga2lsbHMgYWxsIGFwcGxpY2F0aW9ucyB3aGljaCBoYXZlCisgICAvZGV2L2NvbnNvbGUgb3BlbmVkLgorCisgICBVbmZvcnR1bmF0ZWx5IHRoaXMgaW5jbHVkZXMgYSBudW1iZXIgb2YgdGhpbmdzIHdoaWNoIHlvdSBkb24ndAorICAgYWN0dWFsbHkgd2FudCBraWxsZWQuICBUaGlzIGlzIGJlY2F1c2UgdGhlc2UgYXBwbGljYXRpb25zIGFyZQorICAgaW5jb3JyZWN0bHkgaG9sZGluZyAvZGV2L2NvbnNvbGUgb3Blbi4gIEJlIHN1cmUgdG8gY29tcGxhaW4gdG8geW91cgorICAgTGludXggZGlzdHJpYnV0b3IgYWJvdXQgdGhpcyEKKworICAgWW91IGNhbiBpZGVudGlmeSBwcm9jZXNzZXMgd2hpY2ggd2lsbCBiZSBraWxsZWQgYnkgU0FLIHdpdGggdGhlCisgICBjb21tYW5kCisKKwkjIGxzIC1sIC9wcm9jL1swLTldKi9mZC8qIHwgZ3JlcCBjb25zb2xlCisJbC13eC0tLS0tLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgIDY0IE1hciAxOCAwMDo0NiAvcHJvYy81NzkvZmQvMCAtPiAvZGV2L2NvbnNvbGUKKworICAgVGhlbjoKKworCSMgcHMgYXV4fGdyZXAgNTc5CisJcm9vdCAgICAgICA1NzkgIDAuMCAgMC4xICAxMDg4ICA0MzYgPyAgICAgICAgUyAgICAwMDo0MyAgIDA6MDAgZ3BtIC10IHBzLzIKKworICAgU28gYGdwbScgd2lsbCBiZSBraWxsZWQgYnkgU0FLLiAgVGhpcyBpcyBhIGJ1ZyBpbiBncG0uICBJdCBzaG91bGQKKyAgIGJlIGNsb3Npbmcgc3RhbmRhcmQgaW5wdXQuICBZb3UgY2FuIHdvcmsgYXJvdW5kIHRoaXMgYnkgZmluZGluZyB0aGUKKyAgIGluaXRzY3JpcHQgd2hpY2ggbGF1bmNoZXMgZ3BtIGFuZCBjaGFuZ2luZyBpdCB0aHVzbHk6CisKKyAgIE9sZDoKKworCWRhZW1vbiBncG0KKworICAgTmV3OgorCisJZGFlbW9uIGdwbSA8IC9kZXYvbnVsbAorCisgICBWaXhpZSBjcm9uIGFsc28gc2VlbXMgdG8gaGF2ZSB0aGlzIHByb2JsZW0sIGFuZCBuZWVkcyB0aGUgc2FtZSB0cmVhdG1lbnQuCisKKyAgIEFsc28sIG9uZSBwcm9taW5lbnQgTGludXggZGlzdHJpYnV0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHRocmVlCisgICBsaW5lcyBpbiBpdHMgcmMuc3lzaW5pdCBhbmQgcmMgc2NyaXB0czoKKworCWV4ZWMgMzwmMAorCWV4ZWMgND4mMQorCWV4ZWMgNT4mMgorCisgICBUaGVzZSBjb21tYW5kcyBjYXVzZSAqYWxsKiBkYWVtb25zIHdoaWNoIGFyZSBsYXVuY2hlZCBieSB0aGUKKyAgIGluaXRzY3JpcHRzIHRvIGhhdmUgZmlsZSBkZXNjcmlwdG9ycyAzLCA0IGFuZCA1IGF0dGFjaGVkIHRvCisgICAvZGV2L2NvbnNvbGUuICBTbyBTQUsga2lsbHMgdGhlbSBhbGwuICBBIHdvcmthcm91bmQgaXMgdG8gc2ltcGx5CisgICBkZWxldGUgdGhlc2UgbGluZXMsIGJ1dCB0aGlzIG1heSBjYXVzZSBzeXN0ZW0gbWFuYWdlbWVudAorICAgYXBwbGljYXRpb25zIHRvIG1hbGZ1bmN0aW9uIC0gdGVzdCBldmVyeXRoaW5nIHdlbGwuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU2VjdXJpdHlCdWdzIGIvRG9jdW1lbnRhdGlvbi9TZWN1cml0eUJ1Z3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjM2IzNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vU2VjdXJpdHlCdWdzCkBAIC0wLDAgKzEsMzggQEAKK0xpbnV4IGtlcm5lbCBkZXZlbG9wZXJzIHRha2Ugc2VjdXJpdHkgdmVyeSBzZXJpb3VzbHkuICBBcyBzdWNoLCB3ZSdkCitsaWtlIHRvIGtub3cgd2hlbiBhIHNlY3VyaXR5IGJ1ZyBpcyBmb3VuZCBzbyB0aGF0IGl0IGNhbiBiZSBmaXhlZCBhbmQKK2Rpc2Nsb3NlZCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLiAgUGxlYXNlIHJlcG9ydCBzZWN1cml0eSBidWdzIHRvIHRoZQorTGludXgga2VybmVsIHNlY3VyaXR5IHRlYW0uCisKKzEpIENvbnRhY3QKKworVGhlIExpbnV4IGtlcm5lbCBzZWN1cml0eSB0ZWFtIGNhbiBiZSBjb250YWN0ZWQgYnkgZW1haWwgYXQKKzxzZWN1cml0eUBrZXJuZWwub3JnPi4gIFRoaXMgaXMgYSBwcml2YXRlIGxpc3Qgb2Ygc2VjdXJpdHkgb2ZmaWNlcnMKK3dobyB3aWxsIGhlbHAgdmVyaWZ5IHRoZSBidWcgcmVwb3J0IGFuZCBkZXZlbG9wIGFuZCByZWxlYXNlIGEgZml4LgorSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgc2VjdXJpdHkgdGVhbSB3aWxsIGJyaW5nIGluIGV4dHJhIGhlbHAgZnJvbQorYXJlYSBtYWludGFpbmVycyB0byB1bmRlcnN0YW5kIGFuZCBmaXggdGhlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCisKK0FzIGl0IGlzIHdpdGggYW55IGJ1ZywgdGhlIG1vcmUgaW5mb3JtYXRpb24gcHJvdmlkZWQgdGhlIGVhc2llciBpdAord2lsbCBiZSB0byBkaWFnbm9zZSBhbmQgZml4LiAgUGxlYXNlIHJldmlldyB0aGUgcHJvY2VkdXJlIG91dGxpbmVkIGluCitSRVBPUlRJTkctQlVHUyBpZiB5b3UgYXJlIHVuY2xlYXIgYWJvdXQgd2hhdCBpbmZvcm1hdGlvbiBpcyBoZWxwZnVsLgorQW55IGV4cGxvaXQgY29kZSBpcyB2ZXJ5IGhlbHBmdWwgYW5kIHdpbGwgbm90IGJlIHJlbGVhc2VkIHdpdGhvdXQKK2NvbnNlbnQgZnJvbSB0aGUgcmVwb3J0ZXIgdW5sZXNzIGl0IGhhcyBhbHJlYWR5IGJlZW4gbWFkZSBwdWJsaWMuCisKKzIpIERpc2Nsb3N1cmUKKworVGhlIGdvYWwgb2YgdGhlIExpbnV4IGtlcm5lbCBzZWN1cml0eSB0ZWFtIGlzIHRvIHdvcmsgd2l0aCB0aGUKK2J1ZyBzdWJtaXR0ZXIgdG8gYnVnIHJlc29sdXRpb24gYXMgd2VsbCBhcyBkaXNjbG9zdXJlLiAgV2UgcHJlZmVyCit0byBmdWxseSBkaXNjbG9zZSB0aGUgYnVnIGFzIHNvb24gYXMgcG9zc2libGUuICBJdCBpcyByZWFzb25hYmxlIHRvCitkZWxheSBkaXNjbG9zdXJlIHdoZW4gdGhlIGJ1ZyBvciB0aGUgZml4IGlzIG5vdCB5ZXQgZnVsbHkgdW5kZXJzdG9vZCwKK3RoZSBzb2x1dGlvbiBpcyBub3Qgd2VsbC10ZXN0ZWQgb3IgZm9yIHZlbmRvciBjb29yZGluYXRpb24uICBIb3dldmVyLCB3ZQorZXhwZWN0IHRoZXNlIGRlbGF5cyB0byBiZSBzaG9ydCwgbWVhc3VyYWJsZSBpbiBkYXlzLCBub3Qgd2Vla3Mgb3IgbW9udGhzLgorQSBkaXNjbG9zdXJlIGRhdGUgaXMgbmVnb3RpYXRlZCBieSB0aGUgc2VjdXJpdHkgdGVhbSB3b3JraW5nIHdpdGggdGhlCitidWcgc3VibWl0dGVyIGFzIHdlbGwgYXMgdmVuZG9ycy4gIEhvd2V2ZXIsIHRoZSBrZXJuZWwgc2VjdXJpdHkgdGVhbQoraG9sZHMgdGhlIGZpbmFsIHNheSB3aGVuIHNldHRpbmcgYSBkaXNjbG9zdXJlIGRhdGUuICBUaGUgdGltZWZyYW1lIGZvcgorZGlzY2xvc3VyZSBpcyBmcm9tIGltbWVkaWF0ZSAoZXNwLiBpZiBpdCdzIGFscmVhZHkgcHVibGljYWxseSBrbm93bikKK3RvIGEgZmV3IHdlZWtzLiAgQXMgYSBiYXNpYyBkZWZhdWx0IHBvbGljeSwgd2UgZXhwZWN0IHJlcG9ydCBkYXRlIHRvCitkaXNjbG9zdXJlIGRhdGUgdG8gYmUgb24gdGhlIG9yZGVyIG9mIDcgZGF5cy4KKworMykgTm9uLWRpc2Nsb3N1cmUgYWdyZWVtZW50cworCitUaGUgTGludXgga2VybmVsIHNlY3VyaXR5IHRlYW0gaXMgbm90IGEgZm9ybWFsIGJvZHkgYW5kIHRoZXJlZm9yZSB1bmFibGUKK3RvIGVudGVyIGFueSBub24tZGlzY2xvc3VyZSBhZ3JlZW1lbnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzYjI1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTAsMCArMSwxNDUgQEAKK1N1Ym1pdHRpbmcgRHJpdmVycyBGb3IgVGhlIExpbnV4IEtlcm5lbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gZXhwbGFpbiBob3cgdG8gc3VibWl0IGRldmljZSBkcml2ZXJzIHRvIHRoZQordmFyaW91cyBrZXJuZWwgdHJlZXMuIE5vdGUgdGhhdCBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdmlkZW8gY2FyZCBkcml2ZXJzCit5b3Ugc2hvdWxkIHByb2JhYmx5IHRhbGsgdG8gWEZyZWU4NiAoaHR0cDovL3d3dy54ZnJlZTg2Lm9yZy8pIGFuZC9vciBYLk9yZworKGh0dHA6Ly94Lm9yZy8pIGluc3RlYWQuCisKK0Fsc28gcmVhZCB0aGUgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBkb2N1bWVudC4KKworCitBbGxvY2F0aW5nIERldmljZSBOdW1iZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01ham9yIGFuZCBtaW5vciBudW1iZXJzIGZvciBibG9jayBhbmQgY2hhcmFjdGVyIGRldmljZXMgYXJlIGFsbG9jYXRlZAorYnkgdGhlIExpbnV4IGFzc2lnbmVkIG5hbWUgYW5kIG51bWJlciBhdXRob3JpdHkgKGN1cnJlbnRseSBiZXR0ZXIKK2tub3duIGFzIEggUGV0ZXIgQW52aW4pLiBUaGUgc2l0ZSBpcyBodHRwOi8vd3d3LmxhbmFuYS5vcmcvLiBUaGlzCithbHNvIGRlYWxzIHdpdGggYWxsb2NhdGluZyBudW1iZXJzIGZvciBkZXZpY2VzIHRoYXQgYXJlIG5vdCBnb2luZyB0bworYmUgc3VibWl0dGVkIHRvIHRoZSBtYWluc3RyZWFtIGtlcm5lbC4KKworSWYgeW91IGRvbid0IHVzZSBhc3NpZ25lZCBudW1iZXJzIHRoZW4gd2hlbiB5b3UgZGV2aWNlIGlzIHN1Ym1pdHRlZCBpdCB3aWxsCitnZXQgZ2l2ZW4gYW4gYXNzaWduZWQgbnVtYmVyIGV2ZW4gaWYgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB2YWx1ZXMgeW91IG1heQoraGF2ZSBzaGlwcGVkIHRvIGN1c3RvbWVycyBiZWZvcmUuCisKK1dobyBUbyBTdWJtaXQgRHJpdmVycyBUbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpbnV4IDIuMDoKKwlObyBuZXcgZHJpdmVycyBhcmUgYWNjZXB0ZWQgZm9yIHRoaXMga2VybmVsIHRyZWUKKworTGludXggMi4yOgorCUlmIHRoZSBjb2RlIGFyZWEgaGFzIGEgZ2VuZXJhbCBtYWludGFpbmVyIHRoZW4gcGxlYXNlIHN1Ym1pdCBpdCB0bworCXRoZSBtYWludGFpbmVyIGxpc3RlZCBpbiBNQUlOVEFJTkVSUyBpbiB0aGUga2VybmVsIGZpbGUuIElmIHRoZQorCW1haW50YWluZXIgZG9lcyBub3QgcmVzcG9uZCBvciB5b3UgY2Fubm90IGZpbmQgdGhlIGFwcHJvcHJpYXRlCisJbWFpbnRhaW5lciB0aGVuIHBsZWFzZSBjb250YWN0IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisKK0xpbnV4IDIuNDoKKwlUaGUgc2FtZSBydWxlcyBhcHBseSBhcyAyLjIuIFRoZSBmaW5hbCBjb250YWN0IHBvaW50IGZvciBMaW51eCAyLjQKKwlzdWJtaXNzaW9ucyBpcyBNYXJjZWxvIFRvc2F0dGkgPG1hcmNlbG8udG9zYXR0aUBjeWNsYWRlcy5jb20+LgorCitMaW51eCAyLjY6CisJVGhlIHNhbWUgcnVsZXMgYXBwbHkgYXMgMi40IGV4Y2VwdCB0aGF0IHlvdSBzaG91bGQgZm9sbG93IGxpbnV4LWtlcm5lbAorCXRvIHRyYWNrIGNoYW5nZXMgaW4gQVBJJ3MuIFRoZSBmaW5hbCBjb250YWN0IHBvaW50IGZvciBMaW51eCAyLjYKKwlzdWJtaXNzaW9ucyBpcyBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPi4KKworV2hhdCBDcml0ZXJpYSBEZXRlcm1pbmUgQWNjZXB0YW5jZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaWNlbnNpbmc6CVRoZSBjb2RlIG11c3QgYmUgcmVsZWFzZWQgdG8gdXMgdW5kZXIgdGhlCisJCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBXZSBkb24ndCBpbnNpc3Qgb24gYW55IGtpbmQKKwkJb2YgZXhjbHVzaXZlbHkgR1BMIGxpY2Vuc2luZywgYW5kIGlmIHlvdSB3aXNoIHRoZSBkcml2ZXIKKwkJdG8gYmUgdXNlZnVsIHRvIG90aGVyIGNvbW11bml0aWVzIHN1Y2ggYXMgQlNEIHlvdSBtYXkgd2VsbAorCQl3aXNoIHRvIHJlbGVhc2UgdW5kZXIgbXVsdGlwbGUgbGljZW5zZXMuCisKK0NvcHlyaWdodDoJVGhlIGNvcHlyaWdodCBvd25lciBtdXN0IGFncmVlIHRvIHVzZSBvZiBHUEwuCisJCUl0J3MgYmVzdCBpZiB0aGUgc3VibWl0dGVyIGFuZCBjb3B5cmlnaHQgb3duZXIKKwkJYXJlIHRoZSBzYW1lIHBlcnNvbi9lbnRpdHkuIElmIG5vdCwgdGhlIG5hbWUgb2YKKwkJdGhlIHBlcnNvbi9lbnRpdHkgYXV0aG9yaXppbmcgdXNlIG9mIEdQTCBzaG91bGQgYmUKKwkJbGlzdGVkIGluIGNhc2UgaXQncyBuZWNlc3NhcnkgdG8gdmVyaWZ5IHRoZSB3aWxsIG9mCisJCXRoZSBjb3ByaWdodCBvd25lci4KKworSW50ZXJmYWNlczoJSWYgeW91ciBkcml2ZXIgdXNlcyBleGlzdGluZyBpbnRlcmZhY2VzIGFuZCBiZWhhdmVzIGxpa2UKKwkJb3RoZXIgZHJpdmVycyBpbiB0aGUgc2FtZSBjbGFzcyBpdCB3aWxsIGJlIG11Y2ggbW9yZSBsaWtlbHkKKwkJdG8gYmUgYWNjZXB0ZWQgdGhhbiBpZiBpdCBpbnZlbnRzIGdyYXR1aXRvdXMgbmV3IG9uZXMuIAorCQlJZiB5b3UgbmVlZCB0byBpbXBsZW1lbnQgYSBjb21tb24gQVBJIG92ZXIgTGludXggYW5kIE5UCisJCWRyaXZlcnMgZG8gaXQgaW4gdXNlcnNwYWNlLgorCitDb2RlOgkJUGxlYXNlIHVzZSB0aGUgTGludXggc3R5bGUgb2YgY29kZSBmb3JtYXR0aW5nIGFzIGRvY3VtZW50ZWQKKwkJaW4gRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZS4gSWYgeW91IGhhdmUgc2VjdGlvbnMgb2YgY29kZQorCQl0aGF0IG5lZWQgdG8gYmUgaW4gb3RoZXIgZm9ybWF0cywgZm9yIGV4YW1wbGUgYmVjYXVzZSB0aGV5CisJCWFyZSBzaGFyZWQgd2l0aCBhIHdpbmRvd3MgZHJpdmVyIGtpdCBhbmQgeW91IHdhbnQgdG8KKwkJbWFpbnRhaW4gdGhlbSBqdXN0IG9uY2Ugc2VwYXJhdGUgdGhlbSBvdXQgbmljZWx5IGFuZCBub3RlCisJCXRoaXMgZmFjdC4KKworUG9ydGFiaWxpdHk6CVBvaW50ZXJzIGFyZSBub3QgYWx3YXlzIDMyYml0cywgbm90IGFsbCBjb21wdXRlcnMgYXJlIGxpdHRsZQorCQllbmRpYW4sIHBlb3BsZSBkbyBub3QgYWxsIGhhdmUgZmxvYXRpbmcgcG9pbnQgYW5kIHlvdQorCQlzaG91bGRuJ3QgdXNlIGlubGluZSB4ODYgYXNzZW1ibGVyIGluIHlvdXIgZHJpdmVyIHdpdGhvdXQKKwkJY2FyZWZ1bCB0aG91Z2h0LiBQdXJlIHg4NiBkcml2ZXJzIGdlbmVyYWxseSBhcmUgbm90IHBvcHVsYXIuCisJCUlmIHlvdSBvbmx5IGhhdmUgeDg2IGhhcmR3YXJlIGl0IGlzIGhhcmQgdG8gdGVzdCBwb3J0YWJpbGl0eQorCQlidXQgaXQgaXMgZWFzeSB0byBtYWtlIHN1cmUgdGhlIGNvZGUgY2FuIGVhc2lseSBiZSBtYWRlCisJCXBvcnRhYmxlLgorCitDbGFyaXR5OglJdCBoZWxwcyBpZiBhbnlvbmUgY2FuIHNlZSBob3cgdG8gZml4IHRoZSBkcml2ZXIuIEl0IGhlbHBzCisJCXlvdSBiZWNhdXNlIHlvdSBnZXQgcGF0Y2hlcyBub3QgYnVnIHJlcG9ydHMuIElmIHlvdSBzdWJtaXQgYQorCQlkcml2ZXIgdGhhdCBpbnRlbnRpb25hbGx5IG9iZnVzY2F0ZXMgaG93IHRoZSBoYXJkd2FyZSB3b3JrcworCQlpdCB3aWxsIGdvIGluIHRoZSBiaXRidWNrZXQuCisKK0NvbnRyb2w6CUluIGdlbmVyYWwgaWYgdGhlcmUgaXMgYWN0aXZlIG1haW50YWluYW5jZSBvZiBhIGRyaXZlciBieQorCQl0aGUgYXV0aG9yIHRoZW4gcGF0Y2hlcyB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdGhlbSB1bmxlc3MgCisJCXRoZXkgYXJlIHRvdGFsbHkgb2J2aW91cyBhbmQgd2l0aG91dCBuZWVkIG9mIGNoZWNraW5nLgorCQlJZiB5b3Ugd2FudCB0byBiZSB0aGUgY29udGFjdCBhbmQgdXBkYXRlIHBvaW50IGZvciB0aGUKKwkJZHJpdmVyIGl0IGlzIGEgZ29vZCBpZGVhIHRvIHN0YXRlIHRoaXMgaW4gdGhlIGNvbW1lbnRzLAorCQlhbmQgaW5jbHVkZSBhbiBlbnRyeSBpbiBNQUlOVEFJTkVSUyBmb3IgeW91ciBkcml2ZXIuCisKK1doYXQgQ3JpdGVyaWEgRG8gTm90IERldGVybWluZSBBY2NlcHRhbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWZW5kb3I6CQlCZWluZyB0aGUgaGFyZHdhcmUgdmVuZG9yIGFuZCBtYWludGFpbmluZyB0aGUgZHJpdmVyIGlzCisJCW9mdGVuIGEgZ29vZCB0aGluZy4gSWYgdGhlcmUgaXMgYSBzdGFibGUgd29ya2luZyBkcml2ZXIgZnJvbQorCQlvdGhlciBwZW9wbGUgYWxyZWFkeSBpbiB0aGUgdHJlZSBkb24ndCBleHBlY3QgJ3dlIGFyZSB0aGUKKwkJdmVuZG9yJyB0byBnZXQgeW91ciBkcml2ZXIgY2hvc2VuLiBJZGVhbGx5IHdvcmsgd2l0aCB0aGUgCisJCWV4aXN0aW5nIGRyaXZlciBhdXRob3IgdG8gYnVpbGQgYSBzaW5nbGUgcGVyZmVjdCBkcml2ZXIuCisKK0F1dGhvcjoJCUl0IGRvZXNuJ3QgbWF0dGVyIGlmIGEgbGFyZ2UgTGludXggY29tcGFueSB3cm90ZSB0aGUgZHJpdmVyLAorCQlvciB5b3UgZGlkLiBOb2JvZHkgaGFzIGFueSBzcGVjaWFsIGFjY2VzcyB0byB0aGUga2VybmVsCisJCXRyZWUuIEFueW9uZSB3aG8gdGVsbHMgeW91IG90aGVyd2lzZSBpc24ndCB0ZWxsaW5nIHRoZQorCQl3aG9sZSBzdG9yeS4KKworCitSZXNvdXJjZXMKKy0tLS0tLS0tLQorCitMaW51eCBrZXJuZWwgbWFzdGVyIHRyZWU6CisJZnRwLj8/Lmtlcm5lbC5vcmc6L3B1Yi9saW51eC9rZXJuZWwvLi4uCisJPz8gPT0geW91ciBjb3VudHJ5IGNvZGUsIHN1Y2ggYXMgInVzIiwgInVrIiwgImZyIiwgZXRjLgorCitMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0OgkJCisJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworCVttYWlsIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcgdG8gc3Vic2NyaWJlXQorCitMaW51eCBEZXZpY2UgRHJpdmVycywgVGhpcmQgRWRpdGlvbiAoY292ZXJzIDIuNi4xMCk6CisJaHR0cDovL2x3bi5uZXQvS2VybmVsL0xERDMvICAoZnJlZSB2ZXJzaW9uKQorCitLZXJuZWwgdHJhZmZpYzoKKwlXZWVrbHkgc3VtbWFyeSBvZiBrZXJuZWwgbGlzdCBhY3Rpdml0eSAobXVjaCBlYXNpZXIgdG8gcmVhZCkKKwlodHRwOi8vd3d3Lmtlcm5lbHRyYWZmaWMub3JnL2tlcm5lbC10cmFmZmljLworCitMV04ubmV0OgorCVdlZWtseSBzdW1tYXJ5IG9mIGtlcm5lbCBkZXZlbG9wbWVudCBhY3Rpdml0eSAtIGh0dHA6Ly9sd24ubmV0LworCTIuNiBBUEkgY2hhbmdlczoKKwkJaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMi42LWtlcm5lbC1hcGkvCisJUG9ydGluZyBkcml2ZXJzIGZyb20gcHJpb3Iga2VybmVscyB0byAyLjY6CisJCWh0dHA6Ly9sd24ubmV0L0FydGljbGVzL2RyaXZlci1wb3J0aW5nLworCitLZXJuZWxUcmFwOgorCU9jY2FzaW9uYWwgTGludXgga2VybmVsIGFydGljbGVzIGFuZCBkZXZlbG9wZXIgaW50ZXJ2aWV3cworCWh0dHA6Ly9rZXJuZWx0cmFwLm9yZy8KKworS2VybmVsTmV3YmllczoKKwlEb2N1bWVudGF0aW9uIGFuZCBhc3Npc3RhbmNlIGZvciBuZXcga2VybmVsIHByb2dyYW1tZXJzCisJaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnLworCitMaW51eCBVU0IgcHJvamVjdDoKKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4LXVzYi8KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzOGQzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTAsMCArMSwzNzQgQEAKKworCUhvdyB0byBHZXQgWW91ciBDaGFuZ2UgSW50byB0aGUgTGludXggS2VybmVsCisJCW9yCisJQ2FyZSBBbmQgT3BlcmF0aW9uIE9mIFlvdXIgTGludXMgVG9ydmFsZHMKKworCisKK0ZvciBhIHBlcnNvbiBvciBjb21wYW55IHdobyB3aXNoZXMgdG8gc3VibWl0IGEgY2hhbmdlIHRvIHRoZSBMaW51eAora2VybmVsLCB0aGUgcHJvY2VzcyBjYW4gc29tZXRpbWVzIGJlIGRhdW50aW5nIGlmIHlvdSdyZSBub3QgZmFtaWxpYXIKK3dpdGggInRoZSBzeXN0ZW0uIiAgVGhpcyB0ZXh0IGlzIGEgY29sbGVjdGlvbiBvZiBzdWdnZXN0aW9ucyB3aGljaAorY2FuIGdyZWF0bHkgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2YgeW91ciBjaGFuZ2UgYmVpbmcgYWNjZXB0ZWQuCisKK0lmIHlvdSBhcmUgc3VibWl0dGluZyBhIGRyaXZlciwgYWxzbyByZWFkIERvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMuCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU0VDVElPTiAxIC0gQ1JFQVRJTkcgQU5EIFNFTkRJTkcgWU9VUiBDSEFOR0UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCisxKSAiZGlmZiAtdXAiCistLS0tLS0tLS0tLS0KKworVXNlICJkaWZmIC11cCIgb3IgImRpZmYgLXVwck4iIHRvIGNyZWF0ZSBwYXRjaGVzLgorCitBbGwgY2hhbmdlcyB0byB0aGUgTGludXgga2VybmVsIG9jY3VyIGluIHRoZSBmb3JtIG9mIHBhdGNoZXMsIGFzCitnZW5lcmF0ZWQgYnkgZGlmZigxKS4gIFdoZW4gY3JlYXRpbmcgeW91ciBwYXRjaCwgbWFrZSBzdXJlIHRvIGNyZWF0ZSBpdAoraW4gInVuaWZpZWQgZGlmZiIgZm9ybWF0LCBhcyBzdXBwbGllZCBieSB0aGUgJy11JyBhcmd1bWVudCB0byBkaWZmKDEpLgorQWxzbywgcGxlYXNlIHVzZSB0aGUgJy1wJyBhcmd1bWVudCB3aGljaCBzaG93cyB3aGljaCBDIGZ1bmN0aW9uIGVhY2gKK2NoYW5nZSBpcyBpbiAtIHRoYXQgbWFrZXMgdGhlIHJlc3VsdGFudCBkaWZmIGEgbG90IGVhc2llciB0byByZWFkLgorUGF0Y2hlcyBzaG91bGQgYmUgYmFzZWQgaW4gdGhlIHJvb3Qga2VybmVsIHNvdXJjZSBkaXJlY3RvcnksCitub3QgaW4gYW55IGxvd2VyIHN1YmRpcmVjdG9yeS4KKworVG8gY3JlYXRlIGEgcGF0Y2ggZm9yIGEgc2luZ2xlIGZpbGUsIGl0IGlzIG9mdGVuIHN1ZmZpY2llbnQgdG8gZG86CisKKwlTUkNUUkVFPSBsaW51eC0yLjQKKwlNWUZJTEU9ICBkcml2ZXJzL25ldC9teWRyaXZlci5jCisKKwljZCAkU1JDVFJFRQorCWNwICRNWUZJTEUgJE1ZRklMRS5vcmlnCisJdmkgJE1ZRklMRQkjIG1ha2UgeW91ciBjaGFuZ2UKKwljZCAuLgorCWRpZmYgLXVwICRTUkNUUkVFLyRNWUZJTEV7Lm9yaWcsfSA+IC90bXAvcGF0Y2gKKworVG8gY3JlYXRlIGEgcGF0Y2ggZm9yIG11bHRpcGxlIGZpbGVzLCB5b3Ugc2hvdWxkIHVucGFjayBhICJ2YW5pbGxhIiwKK29yIHVubW9kaWZpZWQga2VybmVsIHNvdXJjZSB0cmVlLCBhbmQgZ2VuZXJhdGUgYSBkaWZmIGFnYWluc3QgeW91cgorb3duIHNvdXJjZSB0cmVlLiAgRm9yIGV4YW1wbGU6CisKKwlNWVNSQz0gL2RldmVsL2xpbnV4LTIuNAorCisJdGFyIHh2ZnogbGludXgtMi40LjAtdGVzdDExLnRhci5negorCW12IGxpbnV4IGxpbnV4LXZhbmlsbGEKKwl3Z2V0IGh0dHA6Ly93d3cubW9zZXMudWtsaW51eC5uZXQvcGF0Y2hlcy9kb250ZGlmZgorCWRpZmYgLXVwck4gLVggZG9udGRpZmYgbGludXgtdmFuaWxsYSAkTVlTUkMgPiAvdG1wL3BhdGNoCisJcm0gLWYgZG9udGRpZmYKKworImRvbnRkaWZmIiBpcyBhIGxpc3Qgb2YgZmlsZXMgd2hpY2ggYXJlIGdlbmVyYXRlZCBieSB0aGUga2VybmVsIGR1cmluZwordGhlIGJ1aWxkIHByb2Nlc3MsIGFuZCBzaG91bGQgYmUgaWdub3JlZCBpbiBhbnkgZGlmZigxKS1nZW5lcmF0ZWQKK3BhdGNoLiAgZG9udGRpZmYgaXMgbWFpbnRhaW5lZCBieSBUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkB2ZXJpdGFzLmNvbT4KKworTWFrZSBzdXJlIHlvdXIgcGF0Y2ggZG9lcyBub3QgaW5jbHVkZSBhbnkgZXh0cmEgZmlsZXMgd2hpY2ggZG8gbm90CitiZWxvbmcgaW4gYSBwYXRjaCBzdWJtaXNzaW9uLiAgTWFrZSBzdXJlIHRvIHJldmlldyB5b3VyIHBhdGNoIC1hZnRlci0KK2dlbmVyYXRlZCBpdCB3aXRoIGRpZmYoMSksIHRvIGVuc3VyZSBhY2N1cmFjeS4KKworSWYgeW91ciBjaGFuZ2VzIHByb2R1Y2UgYSBsb3Qgb2YgZGVsdGFzLCB5b3UgbWF5IHdhbnQgdG8gbG9vayBpbnRvCitzcGxpdHRpbmcgdGhlbSBpbnRvIGluZGl2aWR1YWwgcGF0Y2hlcyB3aGljaCBtb2RpZnkgdGhpbmdzIGluCitsb2dpY2FsIHN0YWdlcywgdGhpcyB3aWxsIGZhY2lsaXRhdGUgZWFzaWVyIHJldmlld2luZyBieSBvdGhlcgora2VybmVsIGRldmVsb3BlcnMsIHZlcnkgaW1wb3J0YW50IGlmIHlvdSB3YW50IHlvdXIgcGF0Y2ggYWNjZXB0ZWQuCitUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc2NyaXB0cyB3aGljaCBjYW4gYWlkIGluIHRoaXM7CisKK1F1aWx0OgoraHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQKKworUmFuZHkgRHVubGFwJ3MgcGF0Y2ggc2NyaXB0czoKK2h0dHA6Ly9kZXZlbG9wZXIub3NkbC5vcmcvcmRkdW5sYXAvc2NyaXB0cy9wYXRjaGluZy1zY3JpcHRzLnRnegorCitBbmRyZXcgTW9ydG9uJ3MgcGF0Y2ggc2NyaXB0czoKK2h0dHA6Ly93d3cuemlwLmNvbS5hdS9+YWtwbS9saW51eC9wYXRjaGVzL3BhdGNoLXNjcmlwdHMtMC4xNgorCisyKSBEZXNjcmliZSB5b3VyIGNoYW5nZXMuCisKK0Rlc2NyaWJlIHRoZSB0ZWNobmljYWwgZGV0YWlsIG9mIHRoZSBjaGFuZ2UocykgeW91ciBwYXRjaCBpbmNsdWRlcy4KKworQmUgYXMgc3BlY2lmaWMgYXMgcG9zc2libGUuICBUaGUgV09SU1QgZGVzY3JpcHRpb25zIHBvc3NpYmxlIGluY2x1ZGUKK3RoaW5ncyBsaWtlICJ1cGRhdGUgZHJpdmVyIFgiLCAiYnVnIGZpeCBmb3IgZHJpdmVyIFgiLCBvciAidGhpcyBwYXRjaAoraW5jbHVkZXMgdXBkYXRlcyBmb3Igc3Vic3lzdGVtIFguICBQbGVhc2UgYXBwbHkuIgorCitJZiB5b3VyIGRlc2NyaXB0aW9uIHN0YXJ0cyB0byBnZXQgbG9uZywgdGhhdCdzIGEgc2lnbiB0aGF0IHlvdSBwcm9iYWJseQorbmVlZCB0byBzcGxpdCB1cCB5b3VyIHBhdGNoLiAgU2VlICMzLCBuZXh0LgorCisKKworMykgU2VwYXJhdGUgeW91ciBjaGFuZ2VzLgorCitTZXBhcmF0ZSBlYWNoIGxvZ2ljYWwgY2hhbmdlIGludG8gaXRzIG93biBwYXRjaC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdXIgY2hhbmdlcyBpbmNsdWRlIGJvdGggYnVnIGZpeGVzIGFuZCBwZXJmb3JtYW5jZQorZW5oYW5jZW1lbnRzIGZvciBhIHNpbmdsZSBkcml2ZXIsIHNlcGFyYXRlIHRob3NlIGNoYW5nZXMgaW50byB0d28KK29yIG1vcmUgcGF0Y2hlcy4gIElmIHlvdXIgY2hhbmdlcyBpbmNsdWRlIGFuIEFQSSB1cGRhdGUsIGFuZCBhIG5ldworZHJpdmVyIHdoaWNoIHVzZXMgdGhhdCBuZXcgQVBJLCBzZXBhcmF0ZSB0aG9zZSBpbnRvIHR3byBwYXRjaGVzLgorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IG1ha2UgYSBzaW5nbGUgY2hhbmdlIHRvIG51bWVyb3VzIGZpbGVzLAorZ3JvdXAgdGhvc2UgY2hhbmdlcyBpbnRvIGEgc2luZ2xlIHBhdGNoLiAgVGh1cyBhIHNpbmdsZSBsb2dpY2FsIGNoYW5nZQoraXMgY29udGFpbmVkIHdpdGhpbiBhIHNpbmdsZSBwYXRjaC4KKworSWYgb25lIHBhdGNoIGRlcGVuZHMgb24gYW5vdGhlciBwYXRjaCBpbiBvcmRlciBmb3IgYSBjaGFuZ2UgdG8gYmUKK2NvbXBsZXRlLCB0aGF0IGlzIE9LLiAgU2ltcGx5IG5vdGUgInRoaXMgcGF0Y2ggZGVwZW5kcyBvbiBwYXRjaCBYIgoraW4geW91ciBwYXRjaCBkZXNjcmlwdGlvbi4KKworCis0KSBTZWxlY3QgZS1tYWlsIGRlc3RpbmF0aW9uLgorCitMb29rIHRocm91Z2ggdGhlIE1BSU5UQUlORVJTIGZpbGUgYW5kIHRoZSBzb3VyY2UgY29kZSwgYW5kIGRldGVybWluZQoraWYgeW91ciBjaGFuZ2UgYXBwbGllcyB0byBhIHNwZWNpZmljIHN1YnN5c3RlbSBvZiB0aGUga2VybmVsLCB3aXRoCithbiBhc3NpZ25lZCBtYWludGFpbmVyLiAgSWYgc28sIGUtbWFpbCB0aGF0IHBlcnNvbi4KKworSWYgbm8gbWFpbnRhaW5lciBpcyBsaXN0ZWQsIG9yIHRoZSBtYWludGFpbmVyIGRvZXMgbm90IHJlc3BvbmQsIHNlbmQKK3lvdXIgcGF0Y2ggdG8gdGhlIHByaW1hcnkgTGludXgga2VybmVsIGRldmVsb3BlcidzIG1haWxpbmcgbGlzdCwKK2xpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcuICBNb3N0IGtlcm5lbCBkZXZlbG9wZXJzIG1vbml0b3IgdGhpcworZS1tYWlsIGxpc3QsIGFuZCBjYW4gY29tbWVudCBvbiB5b3VyIGNoYW5nZXMuCisKK0xpbnVzIFRvcnZhbGRzIGlzIHRoZSBmaW5hbCBhcmJpdGVyIG9mIGFsbCBjaGFuZ2VzIGFjY2VwdGVkIGludG8gdGhlCitMaW51eCBrZXJuZWwuICBIaXMgZS1tYWlsIGFkZHJlc3MgaXMgPHRvcnZhbGRzQG9zZGwub3JnPi4gIEhlIGdldHMKK2EgbG90IG9mIGUtbWFpbCwgc28gdHlwaWNhbGx5IHlvdSBzaG91bGQgZG8geW91ciBiZXN0IHRvIC1hdm9pZC0gc2VuZGluZworaGltIGUtbWFpbC4KKworUGF0Y2hlcyB3aGljaCBhcmUgYnVnIGZpeGVzLCBhcmUgIm9idmlvdXMiIGNoYW5nZXMsIG9yIHNpbWlsYXJseQorcmVxdWlyZSBsaXR0bGUgZGlzY3Vzc2lvbiBzaG91bGQgYmUgc2VudCBvciBDQydkIHRvIExpbnVzLiAgUGF0Y2hlcword2hpY2ggcmVxdWlyZSBkaXNjdXNzaW9uIG9yIGRvIG5vdCBoYXZlIGEgY2xlYXIgYWR2YW50YWdlIHNob3VsZAordXN1YWxseSBiZSBzZW50IGZpcnN0IHRvIGxpbnV4LWtlcm5lbC4gIE9ubHkgYWZ0ZXIgdGhlIHBhdGNoIGlzCitkaXNjdXNzZWQgc2hvdWxkIHRoZSBwYXRjaCB0aGVuIGJlIHN1Ym1pdHRlZCB0byBMaW51cy4KKworRm9yIHNtYWxsIHBhdGNoZXMgeW91IG1heSB3YW50IHRvIENDIHRoZSBUcml2aWFsIFBhdGNoIE1vbmtleQordHJpdmlhbEBydXN0Y29ycC5jb20uYXUgc2V0IHVwIGJ5IFJ1c3R5IFJ1c3NlbGw7IHdoaWNoIGNvbGxlY3RzICJ0cml2aWFsIgorcGF0Y2hlcy4gVHJpdmlhbCBwYXRjaGVzIG11c3QgcXVhbGlmeSBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgU3BlbGxpbmcgZml4ZXMgaW4gZG9jdW1lbnRhdGlvbgorIFNwZWxsaW5nIGZpeGVzIHdoaWNoIGNvdWxkIGJyZWFrIGdyZXAoMSkuCisgV2FybmluZyBmaXhlcyAoY2x1dHRlcmluZyB3aXRoIHVzZWxlc3Mgd2FybmluZ3MgaXMgYmFkKQorIENvbXBpbGF0aW9uIGZpeGVzIChvbmx5IGlmIHRoZXkgYXJlIGFjdHVhbGx5IGNvcnJlY3QpCisgUnVudGltZSBmaXhlcyAob25seSBpZiB0aGV5IGFjdHVhbGx5IGZpeCB0aGluZ3MpCisgUmVtb3ZpbmcgdXNlIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zL21hY3JvcyAoZWcuIGNoZWNrX3JlZ2lvbikuCisgQ29udGFjdCBkZXRhaWwgYW5kIGRvY3VtZW50YXRpb24gZml4ZXMKKyBOb24tcG9ydGFibGUgY29kZSByZXBsYWNlZCBieSBwb3J0YWJsZSBjb2RlIChldmVuIGluIGFyY2gtc3BlY2lmaWMsCisgc2luY2UgcGVvcGxlIGNvcHksIGFzIGxvbmcgYXMgaXQncyB0cml2aWFsKQorIEFueSBmaXggYnkgdGhlIGF1dGhvci9tYWludGFpbmVyIG9mIHRoZSBmaWxlLiAoaWUuIHBhdGNoIG1vbmtleQorIGluIHJlLXRyYW5zbWlzc2lvbiBtb2RlKQorCisKKworNSkgU2VsZWN0IHlvdXIgQ0MgKGUtbWFpbCBjYXJib24gY29weSkgbGlzdC4KKworVW5sZXNzIHlvdSBoYXZlIGEgcmVhc29uIE5PVCB0byBkbyBzbywgQ0MgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZy4KKworT3RoZXIga2VybmVsIGRldmVsb3BlcnMgYmVzaWRlcyBMaW51cyBuZWVkIHRvIGJlIGF3YXJlIG9mIHlvdXIgY2hhbmdlLAorc28gdGhhdCB0aGV5IG1heSBjb21tZW50IG9uIGl0IGFuZCBvZmZlciBjb2RlIHJldmlldyBhbmQgc3VnZ2VzdGlvbnMuCitsaW51eC1rZXJuZWwgaXMgdGhlIHByaW1hcnkgTGludXgga2VybmVsIGRldmVsb3BlciBtYWlsaW5nIGxpc3QuCitPdGhlciBtYWlsaW5nIGxpc3RzIGFyZSBhdmFpbGFibGUgZm9yIHNwZWNpZmljIHN1YnN5c3RlbXMsIHN1Y2ggYXMKK1VTQiwgZnJhbWVidWZmZXIgZGV2aWNlcywgdGhlIFZGUywgdGhlIFNDU0kgc3Vic3lzdGVtLCBldGMuICBTZWUgdGhlCitNQUlOVEFJTkVSUyBmaWxlIGZvciBhIG1haWxpbmcgbGlzdCB0aGF0IHJlbGF0ZXMgc3BlY2lmaWNhbGx5IHRvCit5b3VyIGNoYW5nZS4KKworRXZlbiBpZiB0aGUgbWFpbnRhaW5lciBkaWQgbm90IHJlc3BvbmQgaW4gc3RlcCAjNCwgbWFrZSBzdXJlIHRvIEFMV0FZUworY29weSB0aGUgbWFpbnRhaW5lciB3aGVuIHlvdSBjaGFuZ2UgdGhlaXIgY29kZS4KKworRm9yIHNtYWxsIHBhdGNoZXMgeW91IG1heSB3YW50IHRvIENDIHRoZSBUcml2aWFsIFBhdGNoIE1vbmtleQordHJpdmlhbEBydXN0Y29ycC5jb20uYXUgc2V0IHVwIGJ5IFJ1c3R5IFJ1c3NlbGw7IHdoaWNoIGNvbGxlY3RzICJ0cml2aWFsIgorcGF0Y2hlcy4gVHJpdmlhbCBwYXRjaGVzIG11c3QgcXVhbGlmeSBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgU3BlbGxpbmcgZml4ZXMgaW4gZG9jdW1lbnRhdGlvbgorIFNwZWxsaW5nIGZpeGVzIHdoaWNoIGNvdWxkIGJyZWFrIGdyZXAoMSkuCisgV2FybmluZyBmaXhlcyAoY2x1dHRlcmluZyB3aXRoIHVzZWxlc3Mgd2FybmluZ3MgaXMgYmFkKQorIENvbXBpbGF0aW9uIGZpeGVzIChvbmx5IGlmIHRoZXkgYXJlIGFjdHVhbGx5IGNvcnJlY3QpCisgUnVudGltZSBmaXhlcyAob25seSBpZiB0aGV5IGFjdHVhbGx5IGZpeCB0aGluZ3MpCisgUmVtb3ZpbmcgdXNlIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zL21hY3JvcyAoZWcuIGNoZWNrX3JlZ2lvbikuCisgQ29udGFjdCBkZXRhaWwgYW5kIGRvY3VtZW50YXRpb24gZml4ZXMKKyBOb24tcG9ydGFibGUgY29kZSByZXBsYWNlZCBieSBwb3J0YWJsZSBjb2RlIChldmVuIGluIGFyY2gtc3BlY2lmaWMsCisgc2luY2UgcGVvcGxlIGNvcHksIGFzIGxvbmcgYXMgaXQncyB0cml2aWFsKQorIEFueSBmaXggYnkgdGhlIGF1dGhvci9tYWludGFpbmVyIG9mIHRoZSBmaWxlLiAoaWUuIHBhdGNoIG1vbmtleQorIGluIHJlLXRyYW5zbWlzc2lvbiBtb2RlKQorCisKKworNikgTm8gTUlNRSwgbm8gbGlua3MsIG5vIGNvbXByZXNzaW9uLCBubyBhdHRhY2htZW50cy4gIEp1c3QgcGxhaW4gdGV4dC4KKworTGludXMgYW5kIG90aGVyIGtlcm5lbCBkZXZlbG9wZXJzIG5lZWQgdG8gYmUgYWJsZSB0byByZWFkIGFuZCBjb21tZW50CitvbiB0aGUgY2hhbmdlcyB5b3UgYXJlIHN1Ym1pdHRpbmcuICBJdCBpcyBpbXBvcnRhbnQgZm9yIGEga2VybmVsCitkZXZlbG9wZXIgdG8gYmUgYWJsZSB0byAicXVvdGUiIHlvdXIgY2hhbmdlcywgdXNpbmcgc3RhbmRhcmQgZS1tYWlsCit0b29scywgc28gdGhhdCB0aGV5IG1heSBjb21tZW50IG9uIHNwZWNpZmljIHBvcnRpb25zIG9mIHlvdXIgY29kZS4KKworRm9yIHRoaXMgcmVhc29uLCBhbGwgcGF0Y2hlcyBzaG91bGQgYmUgc3VibWl0dGluZyBlLW1haWwgImlubGluZSIuCitXQVJOSU5HOiAgQmUgd2FyeSBvZiB5b3VyIGVkaXRvcidzIHdvcmQtd3JhcCBjb3JydXB0aW5nIHlvdXIgcGF0Y2gsCitpZiB5b3UgY2hvb3NlIHRvIGN1dC1uLXBhc3RlIHlvdXIgcGF0Y2guCisKK0RvIG5vdCBhdHRhY2ggdGhlIHBhdGNoIGFzIGEgTUlNRSBhdHRhY2htZW50LCBjb21wcmVzc2VkIG9yIG5vdC4KK01hbnkgcG9wdWxhciBlLW1haWwgYXBwbGljYXRpb25zIHdpbGwgbm90IGFsd2F5cyB0cmFuc21pdCBhIE1JTUUKK2F0dGFjaG1lbnQgYXMgcGxhaW4gdGV4dCwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gY29tbWVudCBvbiB5b3VyCitjb2RlLiAgQSBNSU1FIGF0dGFjaG1lbnQgYWxzbyB0YWtlcyBMaW51cyBhIGJpdCBtb3JlIHRpbWUgdG8gcHJvY2VzcywKK2RlY3JlYXNpbmcgdGhlIGxpa2VsaWhvb2Qgb2YgeW91ciBNSU1FLWF0dGFjaGVkIGNoYW5nZSBiZWluZyBhY2NlcHRlZC4KKworRXhjZXB0aW9uOiAgSWYgeW91ciBtYWlsZXIgaXMgbWFuZ2xpbmcgcGF0Y2hlcyB0aGVuIHNvbWVvbmUgbWF5IGFzaworeW91IHRvIHJlLXNlbmQgdGhlbSB1c2luZyBNSU1FLgorCisKKworNykgRS1tYWlsIHNpemUuCisKK1doZW4gc2VuZGluZyBwYXRjaGVzIHRvIExpbnVzLCBhbHdheXMgZm9sbG93IHN0ZXAgIzYuCisKK0xhcmdlIGNoYW5nZXMgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgbWFpbGluZyBsaXN0cywgYW5kIHNvbWUKK21haW50YWluZXJzLiAgSWYgeW91ciBwYXRjaCwgdW5jb21wcmVzc2VkLCBleGNlZWRzIDQwIGtCIGluIHNpemUsCitpdCBpcyBwcmVmZXJyZWQgdGhhdCB5b3Ugc3RvcmUgeW91ciBwYXRjaCBvbiBhbiBJbnRlcm5ldC1hY2Nlc3NpYmxlCitzZXJ2ZXIsIGFuZCBwcm92aWRlIGluc3RlYWQgYSBVUkwgKGxpbmspIHBvaW50aW5nIHRvIHlvdXIgcGF0Y2guCisKKworCis4KSBOYW1lIHlvdXIga2VybmVsIHZlcnNpb24uCisKK0l0IGlzIGltcG9ydGFudCB0byBub3RlLCBlaXRoZXIgaW4gdGhlIHN1YmplY3QgbGluZSBvciBpbiB0aGUgcGF0Y2gKK2Rlc2NyaXB0aW9uLCB0aGUga2VybmVsIHZlcnNpb24gdG8gd2hpY2ggdGhpcyBwYXRjaCBhcHBsaWVzLgorCitJZiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seSB0byB0aGUgbGF0ZXN0IGtlcm5lbCB2ZXJzaW9uLAorTGludXMgd2lsbCBub3QgYXBwbHkgaXQuCisKKworCis5KSBEb24ndCBnZXQgZGlzY291cmFnZWQuICBSZS1zdWJtaXQuCisKK0FmdGVyIHlvdSBoYXZlIHN1Ym1pdHRlZCB5b3VyIGNoYW5nZSwgYmUgcGF0aWVudCBhbmQgd2FpdC4gIElmIExpbnVzCitsaWtlcyB5b3VyIGNoYW5nZSBhbmQgYXBwbGllcyBpdCwgaXQgd2lsbCBhcHBlYXIgaW4gdGhlIG5leHQgdmVyc2lvbgorb2YgdGhlIGtlcm5lbCB0aGF0IGhlIHJlbGVhc2VzLgorCitIb3dldmVyLCBpZiB5b3VyIGNoYW5nZSBkb2Vzbid0IGFwcGVhciBpbiB0aGUgbmV4dCB2ZXJzaW9uIG9mIHRoZQora2VybmVsLCB0aGVyZSBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHJlYXNvbnMuICBJdCdzIFlPVVIgam9iIHRvCituYXJyb3cgZG93biB0aG9zZSByZWFzb25zLCBjb3JyZWN0IHdoYXQgd2FzIHdyb25nLCBhbmQgc3VibWl0IHlvdXIKK3VwZGF0ZWQgY2hhbmdlLgorCitJdCBpcyBxdWl0ZSBjb21tb24gZm9yIExpbnVzIHRvICJkcm9wIiB5b3VyIHBhdGNoIHdpdGhvdXQgY29tbWVudC4KK1RoYXQncyB0aGUgbmF0dXJlIG9mIHRoZSBzeXN0ZW0uICBJZiBoZSBkcm9wcyB5b3VyIHBhdGNoLCBpdCBjb3VsZCBiZQorZHVlIHRvCisqIFlvdXIgcGF0Y2ggZGlkIG5vdCBhcHBseSBjbGVhbmx5IHRvIHRoZSBsYXRlc3Qga2VybmVsIHZlcnNpb24KKyogWW91ciBwYXRjaCB3YXMgbm90IHN1ZmZpY2llbnRseSBkaXNjdXNzZWQgb24gbGludXgta2VybmVsLgorKiBBIHN0eWxlIGlzc3VlIChzZWUgc2VjdGlvbiAyKSwKKyogQW4gZS1tYWlsIGZvcm1hdHRpbmcgaXNzdWUgKHJlLXJlYWQgdGhpcyBzZWN0aW9uKQorKiBBIHRlY2huaWNhbCBwcm9ibGVtIHdpdGggeW91ciBjaGFuZ2UKKyogSGUgZ2V0cyB0b25zIG9mIGUtbWFpbCwgYW5kIHlvdXJzIGdvdCBsb3N0IGluIHRoZSBzaHVmZmxlCisqIFlvdSBhcmUgYmVpbmcgYW5ub3lpbmcgKFNlZSBGaWd1cmUgMSkKKworV2hlbiBpbiBkb3VidCwgc29saWNpdCBjb21tZW50cyBvbiBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0LgorCisKKworMTApIEluY2x1ZGUgUEFUQ0ggaW4gdGhlIHN1YmplY3QKKworRHVlIHRvIGhpZ2ggZS1tYWlsIHRyYWZmaWMgdG8gTGludXMsIGFuZCB0byBsaW51eC1rZXJuZWwsIGl0IGlzIGNvbW1vbgorY29udmVudGlvbiB0byBwcmVmaXggeW91ciBzdWJqZWN0IGxpbmUgd2l0aCBbUEFUQ0hdLiAgVGhpcyBsZXRzIExpbnVzCithbmQgb3RoZXIga2VybmVsIGRldmVsb3BlcnMgbW9yZSBlYXNpbHkgZGlzdGluZ3Vpc2ggcGF0Y2hlcyBmcm9tIG90aGVyCitlLW1haWwgZGlzY3Vzc2lvbnMuCisKKworCisxMSkgU2lnbiB5b3VyIHdvcmsKKworVG8gaW1wcm92ZSB0cmFja2luZyBvZiB3aG8gZGlkIHdoYXQsIGVzcGVjaWFsbHkgd2l0aCBwYXRjaGVzIHRoYXQgY2FuCitwZXJjb2xhdGUgdG8gdGhlaXIgZmluYWwgcmVzdGluZyBwbGFjZSBpbiB0aGUga2VybmVsIHRocm91Z2ggc2V2ZXJhbAorbGF5ZXJzIG9mIG1haW50YWluZXJzLCB3ZSd2ZSBpbnRyb2R1Y2VkIGEgInNpZ24tb2ZmIiBwcm9jZWR1cmUgb24KK3BhdGNoZXMgdGhhdCBhcmUgYmVpbmcgZW1haWxlZCBhcm91bmQuCisKK1RoZSBzaWduLW9mZiBpcyBhIHNpbXBsZSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGV4cGxhbmF0aW9uIGZvciB0aGUKK3BhdGNoLCB3aGljaCBjZXJ0aWZpZXMgdGhhdCB5b3Ugd3JvdGUgaXQgb3Igb3RoZXJ3aXNlIGhhdmUgdGhlIHJpZ2h0IHRvCitwYXNzIGl0IG9uIGFzIGEgb3Blbi1zb3VyY2UgcGF0Y2guICBUaGUgcnVsZXMgYXJlIHByZXR0eSBzaW1wbGU6IGlmIHlvdQorY2FuIGNlcnRpZnkgdGhlIGJlbG93OgorCisgICAgICAgIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjAKKworICAgICAgICBCeSBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhpcyBwcm9qZWN0LCBJIGNlcnRpZnkgdGhhdDoKKworICAgICAgICAoYSkgVGhlIGNvbnRyaWJ1dGlvbiB3YXMgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGJ5IG1lIGFuZCBJCisgICAgICAgICAgICBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgaXQgdW5kZXIgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UKKyAgICAgICAgICAgIGluZGljYXRlZCBpbiB0aGUgZmlsZTsgb3IKKworICAgICAgICAoYikgVGhlIGNvbnRyaWJ1dGlvbiBpcyBiYXNlZCB1cG9uIHByZXZpb3VzIHdvcmsgdGhhdCwgdG8gdGhlIGJlc3QKKyAgICAgICAgICAgIG9mIG15IGtub3dsZWRnZSwgaXMgY292ZXJlZCB1bmRlciBhbiBhcHByb3ByaWF0ZSBvcGVuIHNvdXJjZQorICAgICAgICAgICAgbGljZW5zZSBhbmQgSSBoYXZlIHRoZSByaWdodCB1bmRlciB0aGF0IGxpY2Vuc2UgdG8gc3VibWl0IHRoYXQKKyAgICAgICAgICAgIHdvcmsgd2l0aCBtb2RpZmljYXRpb25zLCB3aGV0aGVyIGNyZWF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydAorICAgICAgICAgICAgYnkgbWUsIHVuZGVyIHRoZSBzYW1lIG9wZW4gc291cmNlIGxpY2Vuc2UgKHVubGVzcyBJIGFtCisgICAgICAgICAgICBwZXJtaXR0ZWQgdG8gc3VibWl0IHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UpLCBhcyBpbmRpY2F0ZWQKKyAgICAgICAgICAgIGluIHRoZSBmaWxlOyBvcgorCisgICAgICAgIChjKSBUaGUgY29udHJpYnV0aW9uIHdhcyBwcm92aWRlZCBkaXJlY3RseSB0byBtZSBieSBzb21lIG90aGVyCisgICAgICAgICAgICBwZXJzb24gd2hvIGNlcnRpZmllZCAoYSksIChiKSBvciAoYykgYW5kIEkgaGF2ZSBub3QgbW9kaWZpZWQKKyAgICAgICAgICAgIGl0LgorCit0aGVuIHlvdSBqdXN0IGFkZCBhIGxpbmUgc2F5aW5nCisKKwlTaWduZWQtb2ZmLWJ5OiBSYW5kb20gSiBEZXZlbG9wZXIgPHJhbmRvbUBkZXZlbG9wZXIub3JnPgorCitTb21lIHBlb3BsZSBhbHNvIHB1dCBleHRyYSB0YWdzIGF0IHRoZSBlbmQuICBUaGV5J2xsIGp1c3QgYmUgaWdub3JlZCBmb3IKK25vdywgYnV0IHlvdSBjYW4gZG8gdGhpcyB0byBtYXJrIGludGVybmFsIGNvbXBhbnkgcHJvY2VkdXJlcyBvciBqdXN0Citwb2ludCBvdXQgc29tZSBzcGVjaWFsIGRldGFpbCBhYm91dCB0aGUgc2lnbi1vZmYuIAorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTRUNUSU9OIDIgLSBISU5UUywgVElQUywgQU5EIFRSSUNLUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIGxpc3RzIG1hbnkgb2YgdGhlIGNvbW1vbiAicnVsZXMiIGFzc29jaWF0ZWQgd2l0aCBjb2RlCitzdWJtaXR0ZWQgdG8gdGhlIGtlcm5lbC4gIFRoZXJlIGFyZSBhbHdheXMgZXhjZXB0aW9ucy4uLiBidXQgeW91IG11c3QKK2hhdmUgYSByZWFsbHkgZ29vZCByZWFzb24gZm9yIGRvaW5nIHNvLiAgWW91IGNvdWxkIHByb2JhYmx5IGNhbGwgdGhpcworc2VjdGlvbiBMaW51cyBDb21wdXRlciBTY2llbmNlIDEwMS4KKworCisKKzEpIFJlYWQgRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQorCitOdWZmIHNhaWQuICBJZiB5b3VyIGNvZGUgZGV2aWF0ZXMgdG9vIG11Y2ggZnJvbSB0aGlzLCBpdCBpcyBsaWtlbHkKK3RvIGJlIHJlamVjdGVkIHdpdGhvdXQgZnVydGhlciByZXZpZXcsIGFuZCB3aXRob3V0IGNvbW1lbnQuCisKKworCisyKSAjaWZkZWZzIGFyZSB1Z2x5CisKK0NvZGUgY2x1dHRlcmVkIHdpdGggaWZkZWZzIGlzIGRpZmZpY3VsdCB0byByZWFkIGFuZCBtYWludGFpbi4gIERvbid0IGRvCitpdC4gIEluc3RlYWQsIHB1dCB5b3VyIGlmZGVmcyBpbiBhIGhlYWRlciwgYW5kIGNvbmRpdGlvbmFsbHkgZGVmaW5lCisnc3RhdGljIGlubGluZScgZnVuY3Rpb25zLCBvciBtYWNyb3MsIHdoaWNoIGFyZSB1c2VkIGluIHRoZSBjb2RlLgorTGV0IHRoZSBjb21waWxlciBvcHRpbWl6ZSBhd2F5IHRoZSAibm8tb3AiIGNhc2UuCisKK1NpbXBsZSBleGFtcGxlLCBvZiBwb29yIGNvZGU6CisKKwlkZXYgPSBhbGxvY19ldGhlcmRldiAoc2l6ZW9mKHN0cnVjdCBmdW5reV9wcml2YXRlKSk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCSNpZmRlZiBDT05GSUdfTkVUX0ZVTktJTkVTUworCWluaXRfZnVua3lfbmV0KGRldik7CisJI2VuZGlmCisKK0NsZWFuZWQtdXAgZXhhbXBsZToKKworKGluIGhlYWRlcikKKwkjaWZuZGVmIENPTkZJR19ORVRfRlVOS0lORVNTCisJc3RhdGljIGlubGluZSB2b2lkIGluaXRfZnVua3lfbmV0IChzdHJ1Y3QgbmV0X2RldmljZSAqZCkge30KKwkjZW5kaWYKKworKGluIHRoZSBjb2RlIGl0c2VsZikKKwlkZXYgPSBhbGxvY19ldGhlcmRldiAoc2l6ZW9mKHN0cnVjdCBmdW5reV9wcml2YXRlKSk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCWluaXRfZnVua3lfbmV0KGRldik7CisKKworCiszKSAnc3RhdGljIGlubGluZScgaXMgYmV0dGVyIHRoYW4gYSBtYWNybworCitTdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgZ3JlYXRseSBwcmVmZXJyZWQgb3ZlciBtYWNyb3MuCitUaGV5IHByb3ZpZGUgdHlwZSBzYWZldHksIGhhdmUgbm8gbGVuZ3RoIGxpbWl0YXRpb25zLCBubyBmb3JtYXR0aW5nCitsaW1pdGF0aW9ucywgYW5kIHVuZGVyIGdjYyB0aGV5IGFyZSBhcyBjaGVhcCBhcyBtYWNyb3MuCisKK01hY3JvcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjYXNlcyB3aGVyZSBhIHN0YXRpYyBpbmxpbmUgaXMgY2xlYXJseQorc3Vib3B0aW1hbCBbdGhlcmUgYSBmZXcsIGlzb2xhdGVkIGNhc2VzIG9mIHRoaXMgaW4gZmFzdCBwYXRoc10sCitvciB3aGVyZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHVzZSBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gW3N1Y2ggYXMKK3N0cmluZy1pemluZ10uCisKKydzdGF0aWMgaW5saW5lJyBpcyBwcmVmZXJyZWQgb3ZlciAnc3RhdGljIF9faW5saW5lX18nLCAnZXh0ZXJuIGlubGluZScsCithbmQgJ2V4dGVybiBfX2lubGluZV9fJy4KKworCisKKzQpIERvbid0IG92ZXItZGVzaWduLgorCitEb24ndCB0cnkgdG8gYW50aWNpcGF0ZSBuZWJ1bG91cyBmdXR1cmUgY2FzZXMgd2hpY2ggbWF5IG9yIG1heSBub3QKK2JlIHVzZWZ1bDogICJNYWtlIGl0IGFzIHNpbXBsZSBhcyB5b3UgY2FuLCBhbmQgbm8gc2ltcGxlciIKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vVkdBLXNvZnRjdXJzb3IudHh0IGIvRG9jdW1lbnRhdGlvbi9WR0Etc29mdGN1cnNvci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhY2ZiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vVkdBLXNvZnRjdXJzb3IudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1NvZnR3YXJlIGN1cnNvciBmb3IgVkdBICAgIGJ5IFBhdmVsIE1hY2hlayA8cGF2ZWxAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PgorPT09PT09PT09PT09PT09PT09PT09PT0gICAgYW5kIE1hcnRpbiBNYXJlcyA8bWpAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PgorCisgICBMaW51eCBub3cgaGFzIHNvbWUgYWJpbGl0eSB0byBtYW5pcHVsYXRlIGN1cnNvciBhcHBlYXJhbmNlLiBOb3JtYWxseSwgeW91CitjYW4gc2V0IHRoZSBzaXplIG9mIGhhcmR3YXJlIGN1cnNvciAoYW5kIGFsc28gd29yayBhcm91bmQgc29tZSB1Z2x5IGJ1Z3MgaW4KK3Rob3NlIG1pc2VyYWJsZSBUcmlkZW50IGNhcmRzLS1zZWUgI2RlZmluZSBUUklERU5UX0dMSVRDSCBpbiBkcml2ZXJzL3ZpZGVvLwordmdhY29uLmMpLiBZb3UgY2FuIG5vdyBwbGF5IGEgZmV3IG5ldyB0cmlja3M6ICB5b3UgY2FuIG1ha2UgeW91ciBjdXJzb3IgbG9vaworbGlrZSBhIG5vbi1ibGlua2luZyByZWQgYmxvY2ssIG1ha2UgaXQgaW52ZXJzZSBiYWNrZ3JvdW5kIG9mIHRoZSBjaGFyYWN0ZXIgaXQncworb3ZlciBvciB0byBoaWdobGlnaHQgdGhhdCBjaGFyYWN0ZXIgYW5kIHN0aWxsIGNob29zZSB3aGV0aGVyIHRoZSBvcmlnaW5hbAoraGFyZHdhcmUgY3Vyc29yIHNob3VsZCByZW1haW4gdmlzaWJsZSBvciBub3QuICBUaGVyZSBtYXkgYmUgb3RoZXIgdGhpbmdzIEkgaGF2ZQorbmV2ZXIgdGhvdWdodCBvZi4KKworICAgVGhlIGN1cnNvciBhcHBlYXJhbmNlIGlzIGNvbnRyb2xsZWQgYnkgYSAiPEVTQz5bPzE7MjszYyIgZXNjYXBlIHNlcXVlbmNlCit3aGVyZSAxLCAyIGFuZCAzIGFyZSBwYXJhbWV0ZXJzIGRlc2NyaWJlZCBiZWxvdy4gSWYgeW91IG9taXQgYW55IG9mIHRoZW0sCit0aGV5IHdpbGwgZGVmYXVsdCB0byB6ZXJvZXMuCisKKyAgIFBhcmFtZXRlciAxIHNwZWNpZmllcyBjdXJzb3Igc2l6ZSAoMD1kZWZhdWx0LCAxPWludmlzaWJsZSwgMj11bmRlcmxpbmUsIC4uLiwKKzg9ZnVsbCBibG9jaykgKyAxNiBpZiB5b3Ugd2FudCB0aGUgc29mdHdhcmUgY3Vyc29yIHRvIGJlIGFwcGxpZWQgKyAzMiBpZiB5b3UKK3dhbnQgdG8gYWx3YXlzIGNoYW5nZSB0aGUgYmFja2dyb3VuZCBjb2xvciArIDY0IGlmIHlvdSBkaXNsaWtlIGhhdmluZyB0aGUKK2JhY2tncm91bmQgdGhlIHNhbWUgYXMgdGhlIGZvcmVncm91bmQuICBIaWdobGlnaHRzIGFyZSBpZ25vcmVkIGZvciB0aGUgbGFzdCB0d28KK2ZsYWdzLgorCisgICBUaGUgc2Vjb25kIHBhcmFtZXRlciBzZWxlY3RzIGNoYXJhY3RlciBhdHRyaWJ1dGUgYml0cyB5b3Ugd2FudCB0byBjaGFuZ2UKKyhieSBzaW1wbHkgWE9SaW5nIHRoZW0gd2l0aCB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIpLiBPbiBzdGFuZGFyZCBWR0EsCit0aGUgaGlnaCBmb3VyIGJpdHMgc3BlY2lmeSBiYWNrZ3JvdW5kIGFuZCB0aGUgbG93IGZvdXIgdGhlIGZvcmVncm91bmQuIEluIGJvdGgKK2dyb3VwcywgbG93IHRocmVlIGJpdHMgc2V0IGNvbG9yIChhcyBpbiBub3JtYWwgY29sb3IgY29kZXMgdXNlZCBieSB0aGUgY29uc29sZSkKK2FuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBvbmUgdHVybnMgb24gaGlnaGxpZ2h0IChvciBzb21ldGltZXMgYmxpbmtpbmctLWl0CitkZXBlbmRzIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHlvdXIgVkdBKS4KKworICAgVGhlIHRoaXJkIHBhcmFtZXRlciBjb25zaXN0cyBvZiBjaGFyYWN0ZXIgYXR0cmlidXRlIGJpdHMgeW91IHdhbnQgdG8gc2V0LgorQml0IHNldHRpbmcgdGFrZXMgcGxhY2UgYmVmb3JlIGJpdCB0b2dnbGluZywgc28geW91IGNhbiBzaW1wbHkgY2xlYXIgYSBiaXQgYnkgCitpbmNsdWRpbmcgaXQgaW4gYm90aCB0aGUgc2V0IG1hc2sgYW5kIHRoZSB0b2dnbGUgbWFzay4KKworRXhhbXBsZXM6Cis9PT09PT09PT0KKworVG8gZ2V0IG5vcm1hbCBibGlua2luZyB1bmRlcmxpbmUsIHVzZTogZWNobyAtZSAnXDAzM1s/MmMnCitUbyBnZXQgYmxpbmtpbmcgYmxvY2ssIHVzZTogICAgICAgICAgICBlY2hvIC1lICdcMDMzWz82YycKK1RvIGdldCByZWQgbm9uLWJsaW5raW5nIGJsb2NrLCB1c2U6ICAgIGVjaG8gLWUgJ1wwMzNbPzE3OzA7NjRjJwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hb2UvYW9lLnR4dCBiL0RvY3VtZW50YXRpb24vYW9lL2FvZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlNTAxMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYW9lL2FvZS50eHQKQEAgLTAsMCArMSw5MSBAQAorVGhlIEV0aGVyRHJpdmUgKFIpIEhPV1RPIGZvciB1c2VycyBvZiAyLjYga2VybmVscyBpcyBmb3VuZCBhdCAuLi4KKworICBodHRwOi8vd3d3LmNvcmFpZC5jb20vc3VwcG9ydC9saW51eC9FdGhlckRyaXZlLTIuNi1IT1dUTy5odG1sCisKKyAgSXQgaGFzIG1hbnkgdGlwcyBhbmQgaGludHMhCisKK0NSRUFUSU5HIERFVklDRSBOT0RFUworCisgIFVzZXJzIG9mIHVkZXYgc2hvdWxkIGZpbmQgdGhlIGJsb2NrIGRldmljZSBub2RlcyBjcmVhdGVkCisgIGF1dG9tYXRpY2FsbHksIGJ1dCB0byBjcmVhdGUgYWxsIHRoZSBuZWNlc3NhcnkgZGV2aWNlIG5vZGVzLCB1c2UgdGhlCisgIHVkZXYgY29uZmlndXJhdGlvbiBydWxlcyBwcm92aWRlZCBpbiB1ZGV2LnR4dCAoaW4gdGhpcyBkaXJlY3RvcnkpLgorCisgIFRoZXJlIGlzIGEgdWRldi1pbnN0YWxsLnNoIHNjcmlwdCB0aGF0IHNob3dzIGhvdyB0byBpbnN0YWxsIHRoZXNlCisgIHJ1bGVzIG9uIHlvdXIgc3lzdGVtLgorCisgIElmIHlvdSBhcmUgbm90IHVzaW5nIHVkZXYsIHR3byBzY3JpcHRzIGFyZSBwcm92aWRlZCBpbgorICBEb2N1bWVudGF0aW9uL2FvZSBhcyBleGFtcGxlcyBvZiBzdGF0aWMgZGV2aWNlIG5vZGUgY3JlYXRpb24gZm9yCisgIHVzaW5nIHRoZSBhb2UgZHJpdmVyLgorCisgICAgcm0gLXJmIC9kZXYvZXRoZXJkCisgICAgc2ggRG9jdW1lbnRhdGlvbi9hb2UvbWtkZXZzLnNoIC9kZXYvZXRoZXJkCisKKyAgLi4uIG9yIHRvIG1ha2UganVzdCBvbmUgc2hlbGYncyB3b3J0aCBvZiBibG9jayBkZXZpY2Ugbm9kZXMgLi4uCisKKyAgICBzaCBEb2N1bWVudGF0aW9uL2FvZS9ta3NoZWxmLnNoIC9kZXYvZXRoZXJkIDAKKworICBUaGVyZSBpcyBhbHNvIGFuIGF1dG9sb2FkIHNjcmlwdCB0aGF0IHNob3dzIGhvdyB0byBlZGl0CisgIC9ldGMvbW9kcHJvYmUuY29uZiB0byBlbnN1cmUgdGhhdCB0aGUgYW9lIG1vZHVsZSBpcyBsb2FkZWQgd2hlbgorICBuZWNlc3NhcnkuCisKK1VTSU5HIERFVklDRSBOT0RFUworCisgICJjYXQgL2Rldi9ldGhlcmQvZXJyIiBibG9ja3MsIHdhaXRpbmcgZm9yIGVycm9yIGRpYWdub3N0aWMgb3V0cHV0LAorICBsaWtlIGFueSByZXRyYW5zbWl0dGVkIHBhY2tldHMuCisKKyAgImVjaG8gZXRoMiBldGg0ID4gL2Rldi9ldGhlcmQvaW50ZXJmYWNlcyIgdGVsbHMgdGhlIGFvZSBkcml2ZXIgdG8KKyAgbGltaXQgQVRBIG92ZXIgRXRoZXJuZXQgdHJhZmZpYyB0byBldGgyIGFuZCBldGg0LiAgQW9FIHRyYWZmaWMgZnJvbQorICB1bnRydXN0ZWQgbmV0d29ya3Mgc2hvdWxkIGJlIGlnbm9yZWQgYXMgYSBtYXR0ZXIgb2Ygc2VjdXJpdHkuCisKKyAgImVjaG8gPiAvZGV2L2V0aGVyZC9kaXNjb3ZlciIgdGVsbHMgdGhlIGRyaXZlciB0byBmaW5kIG91dCB3aGF0IEFvRQorICBkZXZpY2VzIGFyZSBhdmFpbGFibGUuCisKKyAgVGhlc2UgY2hhcmFjdGVyIGRldmljZXMgbWF5IGRpc2FwcGVhciBhbmQgYmUgcmVwbGFjZWQgYnkgc3lzZnMKKyAgY291bnRlcnBhcnRzLCBzbyBkaXN0cmlidXRpb24gbWFpbnRhaW5lcnMgYXJlIGVuY291cmFnZWQgdG8gY3JlYXRlCisgIHNjcmlwdHMgdGhhdCB1c2UgdGhlc2UgZGV2aWNlcy4KKworICBUaGUgYmxvY2sgZGV2aWNlcyBhcmUgbmFtZWQgbGlrZSB0aGlzOgorCisJZXtzaGVsZn0ue3Nsb3R9CisJZXtzaGVsZn0ue3Nsb3R9cHtwYXJ0fQorCisgIC4uLiBzbyB0aGF0ICJlMC4yIiBpcyB0aGUgdGhpcmQgYmxhZGUgZnJvbSB0aGUgbGVmdCAoc2xvdCAyKSBpbiB0aGUKKyAgZmlyc3Qgc2hlbGYgKHNoZWxmIGFkZHJlc3MgemVybykuICBUaGF0J3MgdGhlIHdob2xlIGRpc2suICBUaGUgZmlyc3QKKyAgcGFydGl0aW9uIG9uIHRoYXQgZGlzayB3b3VsZCBiZSAiZTAuMnAxIi4KKworVVNJTkcgU1lTRlMKKworICBFYWNoIGFvZSBibG9jayBkZXZpY2UgaW4gL3N5cy9ibG9jayBoYXMgdGhlIGV4dHJhIGF0dHJpYnV0ZXMgb2YKKyAgc3RhdGUsIG1hYywgYW5kIG5ldGlmLiAgVGhlIHN0YXRlIGF0dHJpYnV0ZSBpcyAidXAiIHdoZW4gdGhlIGRldmljZQorICBpcyByZWFkeSBmb3IgSS9PIGFuZCAiZG93biIgaWYgZGV0ZWN0ZWQgYnV0IHVudXNhYmxlLiAgVGhlCisgICJkb3duLGNsb3Nld2FpdCIgc3RhdGUgc2hvd3MgdGhhdCB0aGUgZGV2aWNlIGlzIHN0aWxsIG9wZW4gYW5kCisgIGNhbm5vdCBjb21lIHVwIGFnYWluIHVudGlsIGl0IGhhcyBiZWVuIGNsb3NlZC4KKworICBUaGUgbWFjIGF0dHJpYnV0ZSBpcyB0aGUgZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgcmVtb3RlIEFvRSBkZXZpY2UuCisgIFRoZSBuZXRpZiBhdHRyaWJ1dGUgaXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHRoZSBsb2NhbGhvc3QKKyAgdGhyb3VnaCB3aGljaCB3ZSBhcmUgY29tbXVuaWNhdGluZyB3aXRoIHRoZSByZW1vdGUgQW9FIGRldmljZS4KKworICBUaGVyZSBpcyBhIHNjcmlwdCBpbiB0aGlzIGRpcmVjdG9yeSB0aGF0IGZvcm1hdHMgdGhpcyBpbmZvcm1hdGlvbgorICBpbiBhIGNvbnZlbmllbnQgd2F5LgorCisgIHJvb3RAbWFra2kgcm9vdCMgc2ggRG9jdW1lbnRhdGlvbi9hb2Uvc3RhdHVzLnNoIAorICAgICBlMTAuMCAgICAgICAgICAgIGV0aDMgICAgICAgICAgICAgIHVwCisgICAgIGUxMC4xICAgICAgICAgICAgZXRoMyAgICAgICAgICAgICAgdXAKKyAgICAgZTEwLjIgICAgICAgICAgICBldGgzICAgICAgICAgICAgICB1cAorICAgICBlMTAuMyAgICAgICAgICAgIGV0aDMgICAgICAgICAgICAgIHVwCisgICAgIGUxMC40ICAgICAgICAgICAgZXRoMyAgICAgICAgICAgICAgdXAKKyAgICAgZTEwLjUgICAgICAgICAgICBldGgzICAgICAgICAgICAgICB1cAorICAgICBlMTAuNiAgICAgICAgICAgIGV0aDMgICAgICAgICAgICAgIHVwCisgICAgIGUxMC43ICAgICAgICAgICAgZXRoMyAgICAgICAgICAgICAgdXAKKyAgICAgZTEwLjggICAgICAgICAgICBldGgzICAgICAgICAgICAgICB1cAorICAgICBlMTAuOSAgICAgICAgICAgIGV0aDMgICAgICAgICAgICAgIHVwCisgICAgICBlNC4wICAgICAgICAgICAgZXRoMSAgICAgICAgICAgICAgdXAKKyAgICAgIGU0LjEgICAgICAgICAgICBldGgxICAgICAgICAgICAgICB1cAorICAgICAgZTQuMiAgICAgICAgICAgIGV0aDEgICAgICAgICAgICAgIHVwCisgICAgICBlNC4zICAgICAgICAgICAgZXRoMSAgICAgICAgICAgICAgdXAKKyAgICAgIGU0LjQgICAgICAgICAgICBldGgxICAgICAgICAgICAgICB1cAorICAgICAgZTQuNSAgICAgICAgICAgIGV0aDEgICAgICAgICAgICAgIHVwCisgICAgICBlNC42ICAgICAgICAgICAgZXRoMSAgICAgICAgICAgICAgdXAKKyAgICAgIGU0LjcgICAgICAgICAgICBldGgxICAgICAgICAgICAgICB1cAorICAgICAgZTQuOCAgICAgICAgICAgIGV0aDEgICAgICAgICAgICAgIHVwCisgICAgICBlNC45ICAgICAgICAgICAgZXRoMSAgICAgICAgICAgICAgdXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL2F1dG9sb2FkLnNoIGIvRG9jdW1lbnRhdGlvbi9hb2UvYXV0b2xvYWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkYWQxMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYW9lL2F1dG9sb2FkLnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorIyBzZXQgYW9lIHRvIGF1dG9sb2FkIGJ5IGluc3RhbGxpbmcgdGhlCisjIGFsaWFzZXMgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mCisKK2Y9L2V0Yy9tb2Rwcm9iZS5jb25mCisKK2lmIHRlc3QgISAtciAkZiB8fCB0ZXN0ICEgLXcgJGY7IHRoZW4KKwllY2hvICJjYW5ub3QgY29uZmlndXJlICRmIGZvciBtb2R1bGUgYXV0b2xvYWRpbmciIDE+JjIKKwlleGl0IDEKK2ZpCisKK2dyZXAgbWFqb3ItMTUyICRmID4vZGV2L251bGwKK2lmIFsgJD8gPSAxIF07IHRoZW4KKwllY2hvIGFsaWFzIGJsb2NrLW1ham9yLTE1MiBhb2UgPj4gJGYKKwllY2hvIGFsaWFzIGNoYXItbWFqb3ItMTUyIGFvZSA+PiAkZgorZmkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hb2UvbWtkZXZzLnNoIGIvRG9jdW1lbnRhdGlvbi9hb2UvbWtkZXZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTcwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FvZS9ta2RldnMuc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKK25fc2hlbHZlcz0ke25fc2hlbHZlczotMTB9CituX3BhcnRpdGlvbnM9JHtuX3BhcnRpdGlvbnM6LTE2fQorCitpZiB0ZXN0ICIkIyIgIT0gIjEiOyB0aGVuCisJZWNobyAiVXNhZ2U6IHNoIGBiYXNlbmFtZSAkMGAge2Rpcn0iIDE+JjIKKwlleGl0IDEKK2ZpCitkaXI9JDEKKworTUFKT1I9MTUyCisKK2VjaG8gIkNyZWF0aW5nIEFvRSBkZXZub2RlIGZpbGVzIGluICRkaXIgLi4uIgorCitzZXQgLWUKKworbWtkaXIgLXAgJGRpcgorCisjIChTdGF0dXMgaW5mbyBpcyBpbiBzeXNmcy4gIFNlZSBzdGF0dXMuc2guKQorIyBybSAtZiAkZGlyL3N0YXQKKyMgbWtub2QgLW0gMDQwMCAkZGlyL3N0YXQgYyAkTUFKT1IgMQorcm0gLWYgJGRpci9lcnIKK21rbm9kIC1tIDA0MDAgJGRpci9lcnIgYyAkTUFKT1IgMgorcm0gLWYgJGRpci9kaXNjb3ZlcgorbWtub2QgLW0gMDIwMCAkZGlyL2Rpc2NvdmVyIGMgJE1BSk9SIDMKK3JtIC1mICRkaXIvaW50ZXJmYWNlcworbWtub2QgLW0gMDIwMCAkZGlyL2ludGVyZmFjZXMgYyAkTUFKT1IgNAorCitleHBvcnQgbl9wYXJ0aXRpb25zCitta3NoZWxmPWBlY2hvICQwIHwgc2VkICdzIW1rZGV2cyFta3NoZWxmISdgCitpPTAKK3doaWxlIHRlc3QgJGkgLWx0ICRuX3NoZWx2ZXM7IGRvCisJc2ggLXhjICJzaCAkbWtzaGVsZiAkZGlyICRpIgorCWk9YGV4cHIgJGkgKyAxYAorZG9uZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hb2UvbWtzaGVsZi5zaCBiL0RvY3VtZW50YXRpb24vYW9lL21rc2hlbGYuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5MzI4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYW9lL21rc2hlbGYuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEgL2Jpbi9zaAorCitpZiB0ZXN0ICIkIyIgIT0gIjIiOyB0aGVuCisJZWNobyAiVXNhZ2U6IHNoIGBiYXNlbmFtZSAkMGAge2Rpcn0ge3NoZWxmYWRkcmVzc30iIDE+JjIKKwlleGl0IDEKK2ZpCituX3BhcnRpdGlvbnM9JHtuX3BhcnRpdGlvbnM6LTE2fQorZGlyPSQxCitzaGVsZj0kMgorTUFKT1I9MTUyCisKK3NldCAtZQorCittaW5vcj1gZWNobyAxMCBcKiAkc2hlbGYgXCogJG5fcGFydGl0aW9ucyB8IGJjYAorZW5kcD1gZWNobyAkbl9wYXJ0aXRpb25zIC0gMSB8IGJjYAorZm9yIHNsb3QgaW4gYHNlcSAwIDlgOyBkbworCWZvciBwYXJ0IGluIGBzZXEgMCAkZW5kcGA7IGRvCisJCW5hbWU9ZSRzaGVsZi4kc2xvdAorCQl0ZXN0ICIkcGFydCIgIT0gIjAiICYmIG5hbWU9JHtuYW1lfXAkcGFydAorCQlybSAtZiAkZGlyLyRuYW1lCisJCW1rbm9kIC1tIDA2NjAgJGRpci8kbmFtZSBiICRNQUpPUiAkbWlub3IKKworCQltaW5vcj1gZXhwciAkbWlub3IgKyAxYAorCWRvbmUKK2RvbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL3N0YXR1cy5zaCBiL0RvY3VtZW50YXRpb24vYW9lL3N0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI4MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hb2Uvc3RhdHVzLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhIC9iaW4vc2gKKyMgY29sbGF0ZSBhbmQgcHJlc2VudCBzeXNmcyBpbmZvcm1hdGlvbiBhYm91dCBBb0Ugc3RvcmFnZQorCitzZXQgLWUKK2Zvcm1hdD0iJThzXHQlOHNcdCU4c1xuIgorbWU9YGJhc2VuYW1lICQwYAorc3lzZD0ke3N5c2ZzX2RpcjotL3N5c30KKworIyBwcmludGYgIiRmb3JtYXQiIGRldmljZSBtYWMgbmV0aWYgc3RhdGUKKworIyBTdXNlIDkuMSBQcm8gZG9lc24ndCBwdXQgL3N5cyBpbiAvZXRjL210YWIKKyN0ZXN0IC16ICJgbW91bnQgfCBncmVwIHN5c2ZzYCIgJiYgewordGVzdCAhIC1kICIkc3lzZC9ibG9jayIgJiYgeworCWVjaG8gIiRtZSBFcnJvcjogc3lzZnMgaXMgbm90IG1vdW50ZWQiIDE+JjIKKwlleGl0IDEKK30KK3Rlc3QgLXogImBsc21vZCB8IGdyZXAgJ15hb2UnYCIgJiYgeworCWVjaG8gICIkbWUgRXJyb3I6IGFvZSBtb2R1bGUgaXMgbm90IGxvYWRlZCIgMT4mMgorCWV4aXQgMQorfQorCitmb3IgZCBpbiBgbHMgLWQgJHN5c2QvYmxvY2svZXRoZXJkKiAyPi9kZXYvbnVsbCB8IGdyZXAgLXYgcGAgZW5kOyBkbworCSMgbWF5YmUgbHMgY29tZXMgdXAgZW1wdHksIHNvIHdlIHVzZSAiZW5kIgorCXRlc3QgJGQgPSBlbmQgJiYgY29udGludWUKKworCWRldj1gZWNobyAiJGQiIHwgc2VkICdzLy4qIS8vJ2AKKwlwcmludGYgIiRmb3JtYXQiIFwKKwkJIiRkZXYiIFwKKwkJImBjYXQgXCIkZC9uZXRpZlwiYCIgXAorCQkiYGNhdCBcIiRkL3N0YXRlXCJgIgorZG9uZSB8IHNvcnQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL3VkZXYtaW5zdGFsbC5zaCBiL0RvY3VtZW50YXRpb24vYW9lL3VkZXYtaW5zdGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjFhMjdmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hb2UvdWRldi1pbnN0YWxsLnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMgaW5zdGFsbCB0aGUgYW9lLXNwZWNpZmljIHVkZXYgcnVsZXMgZnJvbSB1ZGV2LnR4dCBpbnRvIAorIyB0aGUgc3lzdGVtJ3MgdWRldiBjb25maWd1cmF0aW9uCisjIAorCittZT0iYGJhc2VuYW1lICQwYCIKKworIyBmaW5kIHVkZXYuY29uZiwgb2Z0ZW4gL2V0Yy91ZGV2L3VkZXYuY29uZgorIyAob3IgZW52aXJvbm1lbnQgY2FuIHNwZWNpZnkgd2hlcmUgdG8gZmluZCB1ZGV2LmNvbmYpCisjCitpZiB0ZXN0IC16ICIkY29uZiI7IHRoZW4KKwlpZiB0ZXN0IC1yIC9ldGMvdWRldi91ZGV2LmNvbmY7IHRoZW4KKwkJY29uZj0vZXRjL3VkZXYvdWRldi5jb25mCisJZWxzZQorCQljb25mPSJgZmluZCAvZXRjIC10eXBlIGYgLW5hbWUgdWRldi5jb25mIDI+IC9kZXYvbnVsbGAiCisJCWlmIHRlc3QgLXogIiRjb25mIiB8fCB0ZXN0ICEgLXIgIiRjb25mIjsgdGhlbgorCQkJZWNobyAiJG1lIEVycm9yOiBubyB1ZGV2LmNvbmYgZm91bmQiIDE+JjIKKwkJCWV4aXQgMQorCQlmaQorCWZpCitmaQorCisjIGZpbmQgdGhlIGRpcmVjdG9yeSB3aGVyZSB1ZGV2IHJ1bGVzIGFyZSBzdG9yZWQsIG9mdGVuCisjIC9ldGMvdWRldi9ydWxlcy5kCisjCitydWxlc19kPSJgc2VkIC1uICcvXnVkZXZfcnVsZXM9L3sgcyF1ZGV2X3J1bGVzPSEhOyBzIVwiISFnOyBwOyB9JyAkY29uZmAiCit0ZXN0ICIkcnVsZXNfZCIgJiYgc2ggLXhjICJjcCBgZGlybmFtZSAkMGAvdWRldi50eHQgJHJ1bGVzX2QvNjAtYW9lLnJ1bGVzIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hb2UvdWRldi50eHQgYi9Eb2N1bWVudGF0aW9uL2FvZS91ZGV2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjM5ZDhiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hb2UvdWRldi50eHQKQEAgLTAsMCArMSwyMyBAQAorIyBUaGVzZSBydWxlcyB0ZWxsIHVkZXYgd2hhdCBkZXZpY2Ugbm9kZXMgdG8gY3JlYXRlIGZvciBhb2Ugc3VwcG9ydC4KKyMgVGhleSBtYXkgYmUgaW5zdGFsbGVkIGFsb25nIHRoZSBmb2xsb3dpbmcgbGluZXMgKGFkanVzdGVkIHRvIHdoYXQKKyMgeW91IHNlZSBvbiB5b3VyIHN5c3RlbSkuCisjIAorIyAgIGVjYXNoaW5AbWFra2kgfiQgc3UKKyMgICBQYXNzd29yZDoKKyMgICBiYXNoIyBmaW5kIC9ldGMgLXR5cGUgZiAtbmFtZSB1ZGV2LmNvbmYKKyMgICAvZXRjL3VkZXYvdWRldi5jb25mCisjICAgYmFzaCMgZ3JlcCB1ZGV2X3J1bGVzPSAvZXRjL3VkZXYvdWRldi5jb25mCisjICAgdWRldl9ydWxlcz0iL2V0Yy91ZGV2L3J1bGVzLmQvIgorIyAgIGJhc2gjIGxzIC9ldGMvdWRldi9ydWxlcy5kLworIyAgIDEwLXdhY29tLnJ1bGVzICA1MC11ZGV2LnJ1bGVzCisjICAgYmFzaCMgY3AgL3BhdGgvdG8vbGludXgtMi42Lnh4L0RvY3VtZW50YXRpb24vYW9lL3VkZXYudHh0IFwKKyMgICAgICAgICAgIC9ldGMvdWRldi9ydWxlcy5kLzYwLWFvZS5ydWxlcworIyAgCisKKyMgYW9lIGNoYXIgZGV2aWNlcworU1VCU1lTVEVNPSJhb2UiLCBLRVJORUw9ImRpc2NvdmVyIiwJTkFNRT0iZXRoZXJkLyVrIiwgR1JPVVA9ImRpc2siLCBNT0RFPSIwMjIwIgorU1VCU1lTVEVNPSJhb2UiLCBLRVJORUw9ImVyciIsCQlOQU1FPSJldGhlcmQvJWsiLCBHUk9VUD0iZGlzayIsIE1PREU9IjA0NDAiCitTVUJTWVNURU09ImFvZSIsIEtFUk5FTD0iaW50ZXJmYWNlcyIsCU5BTUU9ImV0aGVyZC8layIsIEdST1VQPSJkaXNrIiwgTU9ERT0iMDIyMCIKKworIyBhb2UgYmxvY2sgZGV2aWNlcyAgICAgCitLRVJORUw9ImV0aGVyZCoiLCAgICAgICBOQU1FPSIlayIsIEdST1VQPSJkaXNrIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2FybS8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzUzZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vMDAtSU5ERVgKQEAgLTAsMCArMSwyMCBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZQorQm9vdGluZworCS0gcmVxdWlyZW1lbnRzIGZvciBib290aW5nCitJbnRlcnJ1cHRzCisJLSBBUk0gSW50ZXJydXB0IHN1YnN5c3RlbSBkb2N1bWVudGF0aW9uCitOZXR3aW5kZXIKKwktIE5ldHdpbmRlciBzcGVjaWZpYyBkb2N1bWVudGF0aW9uCitSRUFETUUKKwktIEdlbmVyYWwgQVJNIGRvY3VtZW50YXRpb24KK1NBMTEwMAorCS0gU0ExMTAwIGRvY3VtZW50YXRpb24KK1hTY2FsZQorCS0gWFNjYWxlIGRvY3VtZW50YXRpb24KK2VtcGVnCisJLSBFbXBlZyBkb2N1bWVudGF0aW9uCittZW1fYWxpZ25tZW50CisJLSBhbGlnbm1lbnQgYWJvcnQgaGFuZGxlciBkb2N1bWVudGF0aW9uCitud2ZwZQorCS0gTldGUEUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IgZG9jdW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vQm9vdGluZyBiL0RvY3VtZW50YXRpb24vYXJtL0Jvb3RpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkNTY2YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL0Jvb3RpbmcKQEAgLTAsMCArMSwxNDEgQEAKKwkJCUJvb3RpbmcgQVJNIExpbnV4CisJCQk9PT09PT09PT09PT09PT09PQorCitBdXRob3I6CVJ1c3NlbGwgS2luZworRGF0ZSAgOiAxOCBNYXkgMjAwMgorCitUaGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb24gaXMgcmVsZXZhbnQgdG8gMi40LjE4LXJtazYgYW5kIGJleW9uZC4KKworSW4gb3JkZXIgdG8gYm9vdCBBUk0gTGludXgsIHlvdSByZXF1aXJlIGEgYm9vdCBsb2FkZXIsIHdoaWNoIGlzIGEgc21hbGwKK3Byb2dyYW0gdGhhdCBydW5zIGJlZm9yZSB0aGUgbWFpbiBrZXJuZWwuICBUaGUgYm9vdCBsb2FkZXIgaXMgZXhwZWN0ZWQKK3RvIGluaXRpYWxpc2UgdmFyaW91cyBkZXZpY2VzLCBhbmQgZXZlbnR1YWxseSBjYWxsIHRoZSBMaW51eCBrZXJuZWwsCitwYXNzaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBrZXJuZWwuCisKK0Vzc2VudGlhbGx5LCB0aGUgYm9vdCBsb2FkZXIgc2hvdWxkIHByb3ZpZGUgKGFzIGEgbWluaW11bSkgdGhlCitmb2xsb3dpbmc6CisKKzEuIFNldHVwIGFuZCBpbml0aWFsaXNlIHRoZSBSQU0uCisyLiBJbml0aWFsaXNlIG9uZSBzZXJpYWwgcG9ydC4KKzMuIERldGVjdCB0aGUgbWFjaGluZSB0eXBlLgorNC4gU2V0dXAgdGhlIGtlcm5lbCB0YWdnZWQgbGlzdC4KKzUuIENhbGwgdGhlIGtlcm5lbCBpbWFnZS4KKworCisxLiBTZXR1cCBhbmQgaW5pdGlhbGlzZSBSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFeGlzdGluZyBib290IGxvYWRlcnM6CQlNQU5EQVRPUlkKK05ldyBib290IGxvYWRlcnM6CQlNQU5EQVRPUlkKKworVGhlIGJvb3QgbG9hZGVyIGlzIGV4cGVjdGVkIHRvIGZpbmQgYW5kIGluaXRpYWxpc2UgYWxsIFJBTSB0aGF0IHRoZQora2VybmVsIHdpbGwgdXNlIGZvciB2b2xhdGlsZSBkYXRhIHN0b3JhZ2UgaW4gdGhlIHN5c3RlbS4gIEl0IHBlcmZvcm1zCit0aGlzIGluIGEgbWFjaGluZSBkZXBlbmRlbnQgbWFubmVyLiAgKEl0IG1heSB1c2UgaW50ZXJuYWwgYWxnb3JpdGhtcwordG8gYXV0b21hdGljYWxseSBsb2NhdGUgYW5kIHNpemUgYWxsIFJBTSwgb3IgaXQgbWF5IHVzZSBrbm93bGVkZ2Ugb2YKK3RoZSBSQU0gaW4gdGhlIG1hY2hpbmUsIG9yIGFueSBvdGhlciBtZXRob2QgdGhlIGJvb3QgbG9hZGVyIGRlc2lnbmVyCitzZWVzIGZpdC4pCisKKworMi4gSW5pdGlhbGlzZSBvbmUgc2VyaWFsIHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4aXN0aW5nIGJvb3QgbG9hZGVyczoJCU9QVElPTkFMLCBSRUNPTU1FTkRFRAorTmV3IGJvb3QgbG9hZGVyczoJCU9QVElPTkFMLCBSRUNPTU1FTkRFRAorCitUaGUgYm9vdCBsb2FkZXIgc2hvdWxkIGluaXRpYWxpc2UgYW5kIGVuYWJsZSBvbmUgc2VyaWFsIHBvcnQgb24gdGhlCit0YXJnZXQuICBUaGlzIGFsbG93cyB0aGUga2VybmVsIHNlcmlhbCBkcml2ZXIgdG8gYXV0b21hdGljYWxseSBkZXRlY3QKK3doaWNoIHNlcmlhbCBwb3J0IGl0IHNob3VsZCB1c2UgZm9yIHRoZSBrZXJuZWwgY29uc29sZSAoZ2VuZXJhbGx5Cit1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIG9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdGFyZ2V0LikKKworQXMgYW4gYWx0ZXJuYXRpdmUsIHRoZSBib290IGxvYWRlciBjYW4gcGFzcyB0aGUgcmVsZXZhbnQgJ2NvbnNvbGU9Jworb3B0aW9uIHRvIHRoZSBrZXJuZWwgdmlhIHRoZSB0YWdnZWQgbGlzdHMgc3BlY2lmeWluZyB0aGUgcG9ydCwgYW5kCitzZXJpYWwgZm9ybWF0IG9wdGlvbnMgYXMgZGVzY3JpYmVkIGluCisKKyAgICAgICBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC4KKworCiszLiBEZXRlY3QgdGhlIG1hY2hpbmUgdHlwZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXhpc3RpbmcgYm9vdCBsb2FkZXJzOgkJT1BUSU9OQUwKK05ldyBib290IGxvYWRlcnM6CQlNQU5EQVRPUlkKKworVGhlIGJvb3QgbG9hZGVyIHNob3VsZCBkZXRlY3QgdGhlIG1hY2hpbmUgdHlwZSBpdHMgcnVubmluZyBvbiBieSBzb21lCittZXRob2QuICBXaGV0aGVyIHRoaXMgaXMgYSBoYXJkIGNvZGVkIHZhbHVlIG9yIHNvbWUgYWxnb3JpdGhtIHRoYXQKK2xvb2tzIGF0IHRoZSBjb25uZWN0ZWQgaGFyZHdhcmUgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50LgorVGhlIGJvb3QgbG9hZGVyIG11c3QgdWx0aW1hdGVseSBiZSBhYmxlIHRvIHByb3ZpZGUgYSBNQUNIX1RZUEVfeHh4Cit2YWx1ZSB0byB0aGUga2VybmVsLiAoc2VlIGxpbnV4L2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMpLgorCisKKzQuIFNldHVwIHRoZSBrZXJuZWwgdGFnZ2VkIGxpc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXhpc3RpbmcgYm9vdCBsb2FkZXJzOgkJT1BUSU9OQUwsIEhJR0hMWSBSRUNPTU1FTkRFRAorTmV3IGJvb3QgbG9hZGVyczoJCU1BTkRBVE9SWQorCitUaGUgYm9vdCBsb2FkZXIgbXVzdCBjcmVhdGUgYW5kIGluaXRpYWxpc2UgdGhlIGtlcm5lbCB0YWdnZWQgbGlzdC4KK0EgdmFsaWQgdGFnZ2VkIGxpc3Qgc3RhcnRzIHdpdGggQVRBR19DT1JFIGFuZCBlbmRzIHdpdGggQVRBR19OT05FLgorVGhlIEFUQUdfQ09SRSB0YWcgbWF5IG9yIG1heSBub3QgYmUgZW1wdHkuICBBbiBlbXB0eSBBVEFHX0NPUkUgdGFnCitoYXMgdGhlIHNpemUgZmllbGQgc2V0IHRvICcyJyAoMHgwMDAwMDAwMikuICBUaGUgQVRBR19OT05FIG11c3Qgc2V0Cit0aGUgc2l6ZSBmaWVsZCB0byB6ZXJvLgorCitBbnkgbnVtYmVyIG9mIHRhZ3MgY2FuIGJlIHBsYWNlZCBpbiB0aGUgbGlzdC4gIEl0IGlzIHVuZGVmaW5lZAord2hldGhlciBhIHJlcGVhdGVkIHRhZyBhcHBlbmRzIHRvIHRoZSBpbmZvcm1hdGlvbiBjYXJyaWVkIGJ5IHRoZQorcHJldmlvdXMgdGFnLCBvciB3aGV0aGVyIGl0IHJlcGxhY2VzIHRoZSBpbmZvcm1hdGlvbiBpbiBpdHMKK2VudGlyZXR5OyBzb21lIHRhZ3MgYmVoYXZlIGFzIHRoZSBmb3JtZXIsIG90aGVycyB0aGUgbGF0dGVyLgorCitUaGUgYm9vdCBsb2FkZXIgbXVzdCBwYXNzIGF0IGEgbWluaW11bSB0aGUgc2l6ZSBhbmQgbG9jYXRpb24gb2YKK3RoZSBzeXN0ZW0gbWVtb3J5LCBhbmQgcm9vdCBmaWxlc3lzdGVtIGxvY2F0aW9uLiAgVGhlcmVmb3JlLCB0aGUKK21pbmltdW0gdGFnZ2VkIGxpc3Qgc2hvdWxkIGxvb2s6CisKKwkrLS0tLS0tLS0tLS0rCitiYXNlIC0+CXwgQVRBR19DT1JFIHwgIHwKKwkrLS0tLS0tLS0tLS0rICB8CisJfCBBVEFHX01FTSAgfCAgfCBpbmNyZWFzaW5nIGFkZHJlc3MKKwkrLS0tLS0tLS0tLS0rICB8CisJfCBBVEFHX05PTkUgfCAgfAorCSstLS0tLS0tLS0tLSsgIHYKKworVGhlIHRhZ2dlZCBsaXN0IHNob3VsZCBiZSBzdG9yZWQgaW4gc3lzdGVtIFJBTS4KKworVGhlIHRhZ2dlZCBsaXN0IG11c3QgYmUgcGxhY2VkIGluIGEgcmVnaW9uIG9mIG1lbW9yeSB3aGVyZSBuZWl0aGVyCit0aGUga2VybmVsIGRlY29tcHJlc3NvciBub3IgaW5pdHJkICdib290cCcgcHJvZ3JhbSB3aWxsIG92ZXJ3cml0ZQoraXQuICBUaGUgcmVjb21tZW5kZWQgcGxhY2VtZW50IGlzIGluIHRoZSBmaXJzdCAxNktpQiBvZiBSQU0uCisKKzUuIENhbGxpbmcgdGhlIGtlcm5lbCBpbWFnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4aXN0aW5nIGJvb3QgbG9hZGVyczoJCU1BTkRBVE9SWQorTmV3IGJvb3QgbG9hZGVyczoJCU1BTkRBVE9SWQorCitUaGVyZSBhcmUgdHdvIG9wdGlvbnMgZm9yIGNhbGxpbmcgdGhlIGtlcm5lbCB6SW1hZ2UuICBJZiB0aGUgekltYWdlCitpcyBzdG9yZWQgaW4gZmxhc2gsIGFuZCBpcyBsaW5rZWQgY29ycmVjdGx5IHRvIGJlIHJ1biBmcm9tIGZsYXNoLAordGhlbiBpdCBpcyBsZWdhbCBmb3IgdGhlIGJvb3QgbG9hZGVyIHRvIGNhbGwgdGhlIHpJbWFnZSBpbiBmbGFzaAorZGlyZWN0bHkuCisKK1RoZSB6SW1hZ2UgbWF5IGFsc28gYmUgcGxhY2VkIGluIHN5c3RlbSBSQU0gKGF0IGFueSBsb2NhdGlvbikgYW5kCitjYWxsZWQgdGhlcmUuICBOb3RlIHRoYXQgdGhlIGtlcm5lbCB1c2VzIDE2SyBvZiBSQU0gYmVsb3cgdGhlIGltYWdlCit0byBzdG9yZSBwYWdlIHRhYmxlcy4gIFRoZSByZWNvbW1lbmRlZCBwbGFjZW1lbnQgaXMgMzJLaUIgaW50byBSQU0uCisKK0luIGVpdGhlciBjYXNlLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSBtZXQ6CisKKy0gUXVpZXNjZSBhbGwgRE1BIGNhcGFibGUgZGV2aWNlc3Mgc28gdGhhdCBtZW1vcnkgZG9lcyBub3QgZ2V0CisgIGNvcnJ1cHRlZCBieSBib2d1cyBuZXR3b3JrIHBhY2tldHMgb3IgZGlzayBkYXRhLiBUaGlzIHdpbGwgc2F2ZQorICB5b3UgbWFueSBob3VycyBvZiBkZWJ1Zy4KKworLSBDUFUgcmVnaXN0ZXIgc2V0dGluZ3MKKyAgcjAgPSAwLAorICByMSA9IG1hY2hpbmUgdHlwZSBudW1iZXIgZGlzY292ZXJlZCBpbiAoMykgYWJvdmUuCisgIHIyID0gcGh5c2ljYWwgYWRkcmVzcyBvZiB0YWdnZWQgbGlzdCBpbiBzeXN0ZW0gUkFNLgorCistIENQVSBtb2RlCisgIEFsbCBmb3JtcyBvZiBpbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQgKElSUXMgYW5kIEZJUXMpCisgIFRoZSBDUFUgbXVzdCBiZSBpbiBTVkMgbW9kZS4gIChBIHNwZWNpYWwgZXhjZXB0aW9uIGV4aXN0cyBmb3IgQW5nZWwpCisKKy0gQ2FjaGVzLCBNTVVzCisgIFRoZSBNTVUgbXVzdCBiZSBvZmYuCisgIEluc3RydWN0aW9uIGNhY2hlIG1heSBiZSBvbiBvciBvZmYuCisgIERhdGEgY2FjaGUgbXVzdCBiZSBvZmYuCisKKy0gVGhlIGJvb3QgbG9hZGVyIGlzIGV4cGVjdGVkIHRvIGNhbGwgdGhlIGtlcm5lbCBpbWFnZSBieSBqdW1waW5nCisgIGRpcmVjdGx5IHRvIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBvZiB0aGUga2VybmVsIGltYWdlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9JWFAyMDAwIGIvRG9jdW1lbnRhdGlvbi9hcm0vSVhQMjAwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDE0OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vSVhQMjAwMApAQCAtMCwwICsxLDY5IEBACisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlbGVhc2UgTm90ZXMgZm9yIExpbnV4IG9uIEludGVsJ3MgSVhQMjAwMCBOZXR3b3JrIFByb2Nlc3NvcgorCitNYWludGFpbmVkIGJ5IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIE92ZXJ2aWV3CisKK0ludGVsJ3MgSVhQMjAwMCBmYW1pbHkgb2YgTlBVcyAoSVhQMjQwMCwgSVhQMjgwMCwgSVhQMjg1MCkgaXMgZGVzaWduZWQKK2ZvciBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmsgYXBwbGljYXRpb25zIHN1Y2ggaGlnaC1hdmFpbGFiaWxpdHkKK3RlbGVjb20gc3lzdGVtcy4gSW4gYWRkaXRpb24gdG8gYW4gWFNjYWxlIGNvcmUsIGl0IGNvbnRhaW5zIHVwIHRvIDgKKyJNaWNyb0VuZ2luZXMiIHRoYXQgcnVuIHNwZWNpYWwgY29kZSwgc2V2ZXJhbCBoaWdoLWVuZCBuZXR3b3JraW5nIAoraW50ZXJmYWNlcyAoVVRPUElBLCBTUEksIGV0YyksIGEgUENJIGhvc3QgYnJpZGdlLCBvbmUgc2VyaWFsIHBvcnQsCitmbGFzaCBpbnRlcmZhY2UsIGFuZCBzb21lIG90aGVyIG9kZHMgYW5kIGVuZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CisKK2h0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL3Byb2R1Y3RzL25wZmFtaWx5L2l4cDJ4eHguaHRtCisKKzIuIExpbnV4IFN1cHBvcnQKKworTGludXggY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgb24gdGhlIElYUDIwMDAgTlBVczoKKworLSBPbi1jaGlwIHNlcmlhbAorLSBQQ0kKKy0gRmxhc2ggKE1URC9KRkZTMikKKy0gSTJDIHRocm91Z2ggR1BJTworLSBUaW1lcnMgKHdhdGNoZG9nLCBPUykKKworVGhhdCBpcyBhYm91dCBhbGwgd2UgY2FuIHN1cHBvcnQgdW5kZXIgTGludXggQVRNIGIvYyB0aGUgY29yZSBuZXR3b3JraW5nCitjb21wb25lbnRzIG9mIHRoZSBjaGlwIGFyZSBhY2Nlc3NlZCB2aWEgSW50ZWwncyBjbG9zZWQgc291cmNlIFNESy4gCitQbGVhc2UgY29udGFjdCBJbnRlbCBkaXJlY3RseSBvbiBpc3N1ZXMgd2l0aCB1c2luZyB0aG9zZS4gVGhlcmUgaXMKK2Fsc28gYSBtYWlsaW5nIGxpc3QgcnVuIGJ5IHNvbWUgZm9sa3MgYXQgUHJpbmNldG9uIFVuaXZlcnNpdHkgdGhhdCBtaWdodAorYmUgb2YgaGVscDogIGh0dHBzOi8vbGlzdHMuY3MucHJpbmNldG9uLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2l4cDJ4eHgKKworV0hBVEVWRVIgWU9VIERPLCBETyBOT1QgUE9TVCBFTUFJTCBUTyBUSEUgTElOVVgtQVJNIE9SIExJTlVYLUFSTS1LRVJORUwKK01BSUxJTkcgTElTVFMgUkVHQVJESU5HIFRIRSBJTlRFTCBTREsuCisKKzMuIFN1cHBvcnRlZCBQbGF0Zm9ybXMKKworLSBJbnRlbCBJWERQMjQwMCBSZWZlcmVuY2UgUGxhdGZvcm0KKy0gSW50ZWwgSVhEUDI4MDAgUmVmZXJlbmNlIFBsYXRmb3JtCistIEludGVsIElYRFAyNDAxIFJlZmVyZW5jZSBQbGF0Zm9ybQorLSBJbnRlbCBJWERQMjgwMSBSZWZlcmVuY2UgUGxhdGZvcm0KKy0gUmFkaVN5cyBFTlAtMjYxMQorCis0LiBVc2FnZSBOb3RlcworCistIFRoZSBJWFAyMDAwIHBsYXRmb3JtcyB1c3VhbGx5IGhhdmUgcmF0aGVyIGNvbXBsZXggUENJIGJ1cyB0b3BvbG9naWVzCisgIHdpdGggbGFyZ2UgbWVtb3J5IHNwYWNlIHJlcXVpcmVtZW50cy4gSW4gYWRkaXRpb24sIGIvYyBvZiB0aGUgd2F5IHRoZQorICBJbnRlbCBTREsgaXMgZGVzaWduZWQsIGRldmljZXMgYXJlIGVudW1lcmF0ZWQgaW4gYSB2ZXJ5IHNwZWNpZmljCisgIHdheS4gQi9jIG9mIHRoaXMgdGhpcywgd2UgdXNlICJwY2k9ZmlybXdhcmUiIG9wdGlvbiBpbiB0aGUga2VybmVsCisgIGNvbW1hbmQgbGluZSBzbyB0aGF0IHdlIGRvIG5vdCByZS1lbnVtZXJhdGUgdGhlIGJ1cy4KKworLSBJWERQMngwMSBzeXN0ZW1zIGhhdmUgdmFyaWFibGUgY2xvY2sgdGljayByYXRlcyB0aGF0IHdlIGNhbm5vdCBkZXRlcm1pbmUgCisgIHZpYSBIVyByZWdpc3RlcnMuIFRoZSAiaXhkcDJ4MDFfY2xrPVhYWCIgY21kIGxpbmUgb3B0aW9ucyBhbGxvdyB5b3UKKyAgdG8gcGFzcyB0aGUgY2xvY2sgcmF0ZSB0byB0aGUgYm9hcmQgcG9ydC4KKworNS4gVGhhbmtzCisKK1RoZSBJWFAyMDAwIHdvcmsgaGFzIGJlZW4gZnVuZGVkIGJ5IEludGVsIENvcnAuIGFuZCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisKK1RoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgcGF0Y2hlcy9jb21tZW50cy9ldGM6CisKK05hZWVtIEYuIEFmemFsCitMZW5uZXJ0IEJ1eXRlbmhlaworSmVmZnJleSBEYWx5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xhc3QgVXBkYXRlOiA4LzA5LzIwMDQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL0lYUDR4eCBiL0RvY3VtZW50YXRpb24vYXJtL0lYUDR4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGM2ZDNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4CkBAIC0wLDAgKzEsMTc0IEBACisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlbGVhc2UgTm90ZXMgZm9yIExpbnV4IG9uIEludGVsJ3MgSVhQNHh4IE5ldHdvcmsgUHJvY2Vzc29yCisKK01haW50YWluZWQgYnkgRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gT3ZlcnZpZXcKKworSW50ZWwncyBJWFA0eHggbmV0d29yayBwcm9jZXNzb3IgaXMgYSBoaWdobHkgaW50ZWdyYXRlZCBTT0MgdGhhdAoraXMgdGFyZ2V0ZWQgZm9yIG5ldHdvcmsgYXBwbGljYXRpb25zLCB0aG91Z2ggaXQgaGFzIGJlY29tZSBwb3B1bGFyIAoraW4gaW5kdXN0cmlhbCBjb250cm9sIGFuZCBvdGhlciBhcmVhcyBkdWUgdG8gbG93IGNvc3QgYW5kIHBvd2VyCitjb25zdW1wdGlvbi4gVGhlIElYUDR4eCBmYW1pbHkgY3VycmVudGx5IGNvbnNpc3RzIG9mIHNldmVyYWwgcHJvY2Vzc29ycwordGhhdCBzdXBwb3J0IGRpZmZlcmVudCBuZXR3b3JrIG9mZmxvYWQgZnVuY3Rpb25zIHN1Y2ggYXMgZW5jcnlwdGlvbiwKK3JvdXRpbmcsIGZpcmV3YWxsaW5nLCBldGMuIFRoZSBJWFA0NnggZmFtaWx5IGlzIGFuIHVwZGF0ZWQgdmVyc2lvbiB3aGljaAorc3VwcG9ydHMgZmFzdGVyIHNwZWVkcywgbmV3IG1lbW9yeSBhbmQgZmxhc2ggY29uZmlndXJhdGlvbnMsIGFuZCBtb3JlCitpbnRlZ3JhdGlvbiBzdWNoIGFzIGFuIG9uLWNoaXAgSTJDIGNvbnRyb2xsZXIuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2YXJpb3VzIHZlcnNpb25zIG9mIHRoZSBDUFUsIHNlZToKKworICAgaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhwNHh4Lmh0bQorCitJbnRlbCBhbHNvIG1hZGUgdGhlIElYQ1AxMTAwIENQVSBmb3Igc29tZXRpbWUgd2hpY2ggaXMgYW4gSVhQNHh4IAorc3RyaXBwZWQgb2YgbXVjaCBvZiB0aGUgbmV0d29yayBpbnRlbGxpZ2VuY2UuCisKKzIuIExpbnV4IFN1cHBvcnQKKworTGludXggY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgb24gdGhlIElYUDR4eCBjaGlwczoKKworLSBEdWFsIHNlcmlhbCBwb3J0cworLSBQQ0kgaW50ZXJmYWNlCistIEZsYXNoIGFjY2VzcyAoTVREL0pGRlMpCistIEkyQyB0aHJvdWdoIEdQSU8gb24gSVhQNDJ4CistIEdQSU8gZm9yIGlucHV0L291dHB1dC9pbnRlcnJ1cHRzIAorICBTZWUgaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3BsYXRmb3JtLmggZm9yIGFjY2VzcyBmdW5jdGlvbnMuCistIFRpbWVycyAod2F0Y2hkb2csIE9TKQorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgdGhlIGNoaXBzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExpbnV4IGFuZAorcmVxdWlyZSB0aGUgdXNlIG9mIEludGVsJ3MgcHJvcGlldGFyeSBDU1Igc29mdGFyZToKKworLSBVU0IgZGV2aWNlIGludGVyZmFjZQorLSBOZXR3b3JrIGludGVyZmFjZXMgKEhTUywgVXRvcGlhLCBOUEVzLCBldGMpCistIE5ldHdvcmsgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5CisKK0lmIHlvdSBuZWVkIHRvIHVzZSBhbnkgb2YgdGhlIGFib3ZlLCB5b3UgbmVlZCB0byBkb3dubG9hZCBJbnRlbCdzCitzb2Z0d2FyZSBmcm9tOgorCisgICBodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9wcm9kdWN0cy9ucGZhbWlseS9peHA0MjVzd3IxLmh0bQorCitETyBOT1QgUE9TVCBRVUVTVElPTlMgVE8gVEhFIExJTlVYIE1BSUxJTkcgTElTVFMgUkVHQVJESU5HIFRIRSBQUk9QSUVUQVJZCitTT0ZUV0FSRS4KKworVGhlcmUgYXJlIHNldmVyYWwgd2Vic2l0ZXMgdGhhdCBwcm92aWRlIGRpcmVjdGlvbnMvcG9pbnRlcnMgb24gdXNpbmcKK0ludGVsJ3Mgc29mdHdhcmU6CisKK2h0dHA6Ly9peHA0eHgtb3NkZy5zb3VyY2Vmb3JnZS5uZXQvIAorICAgT3BlbiBTb3VyY2UgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIHVzaW5nIHVDbGludXggYW5kIHRoZSBJbnRlbCBsaWJyYXJpZXMgCisKK2h0dHA6Ly9nYXRld2F5bWFrZXIuc291cmNlZm9yZ2UubmV0LyAKKyAgIFNpbXBsZSBvbmUgcGFnZSBzdW1tYXJ5IG9mIGJ1aWxkaW5nIGEgZ2F0ZXdheSB1c2luZyBhbiBJWFA0MjUgYW5kIExpbnV4CisKK2h0dHA6Ly9peHA0MjUuc291cmNlZm9yZ2UubmV0LworICAgQVRNIGRldmljZSBkcml2ZXIgZm9yIElYUDQyNSB0aGF0IHJlbGllcyBvbiBJbnRlbCdzIGxpYnJhcmllcworCiszLiBLbm93biBJc3N1ZXMvTGltaXRhdGlvbnMKKworM2EuIExpbWl0ZWQgaW5ib3VuZCBQQ0kgd2luZG93CisKK1RoZSBJWFA0eHggZmFtaWx5IGFsbG93cyBmb3IgdXAgdG8gMjU2TUIgb2YgbWVtb3J5IGJ1dCB0aGUgUENJIGludGVyZmFjZQorY2FuIG9ubHkgZXhwb3NlIDY0TUIgb2YgdGhhdCBtZW1vcnkgdG8gdGhlIFBDSSBidXMuIFRoaXMgbWVhbnMgdGhhdCBpZgoreW91IGFyZSBydW5uaW5nIHdpdGggPiA2NE1CLCBhbGwgUENJIGJ1ZmZlcnMgb3V0c2lkZSBvZiB0aGUgYWNjZXNzaWJsZQorcmFuZ2Ugd2lsbCBiZSBib3VuY2VkIHVzaW5nIHRoZSByb3V0aW5lcyBpbiBhcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMuCisgICAKKzNiLiBMaW1pdGVkIG91dGJvdW5kIFBDSSB3aW5kb3cKKworSVhQNHh4IHByb3ZpZGVzIHR3byBtZXRob2RzIG9mIGFjY2Vzc2luZyBQQ0kgbWVtb3J5IHNwYWNlOgorCisxKSBBIGRpcmVjdCBtYXBwZWQgd2luZG93IGZyb20gMHg0ODAwMDAwMCB0byAweDRiZmZmZmZmICg2NE1CKS4KKyAgIFRvIGFjY2VzcyBQQ0kgdmlhIHRoaXMgc3BhY2UsIHdlIHNpbXBseSBpb3JlbWFwKCkgdGhlIEJBUgorICAgaW50byB0aGUga2VybmVsIGFuZCB3ZSBjYW4gdXNlIHRoZSBzdGFuZGFyZCByZWFkW2J3bF0vd3JpdGVbYndsXQorICAgbWFjcm9zLiBUaGlzIGlzIHRoZSBwcmVmZmVyZWQgbWV0aG9kIGR1ZSB0byBzcGVlZCBidXQgaXQKKyAgIGxpbWl0cyB0aGUgc3lzdGVtIHRvIGp1c3QgNjRNQiBvZiBQQ0kgbWVtb3J5LiBUaGlzIGNhbiBiZSAKKyAgIHByb2JsYW1hdGljIGlmIHVzaW5nIHZpZGVvIGNhcmRzIGFuZCBvdGhlciBtZW1vcnktaGVhdnkgZGV2aWNlcy4KKyAgICAgICAgICAKKzIpIElmID4gNjRNQiBvZiBtZW1vcnkgc3BhY2UgaXMgcmVxdWlyZWQsIHRoZSBJWFA0eHggY2FuIGJlIAorICAgY29uZmlndXJlZCB0byB1c2UgaW5kaXJlY3QgcmVnaXN0ZXJzIHRvIGFjY2VzcyBQQ0kgVGhpcyBhbGxvd3MgCisgICBmb3IgdXAgdG8gMTI4TUIgKDB4NDgwMDAwMDAgdG8gMHg0ZmZmZmZmZikgb2YgbWVtb3J5IG9uIHRoZSBidXMuIAorICAgVGhlIGRpc2FkdmFudGFkZ2Ugb2YgdGhpcyBpcyB0aGF0IGV2ZXJ5IFBDSSBhY2Nlc3MgcmVxdWlyZXMgCisgICB0aHJlZSBsb2NhbCByZWdpc3RlciBhY2Nlc3NlcyBwbHVzIGEgc3BpbmxvY2ssIGJ1dCBpbiBzb21lIAorICAgY2FzZXMgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBhY2NlcHRhYmxlLiBJbiBhZGRpdGlvbiwgeW91IGNhbm5vdCAKKyAgIG1tYXAoKSBQQ0kgZGV2aWNlcyBpbiB0aGlzIGNhc2UgZHVlIHRvIHRoZSBpbmRpcmVjdCBuYXR1cmUKKyAgIG9mIHRoZSBQQ0kgd2luZG93LgorCitCeSBkZWZhdWx0LCB0aGUgZGlyZWN0IG1ldGhvZCBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBJZgoreW91IG5lZWQgbW9yZSBQQ0kgbWVtb3J5LCBlbmFibGUgdGhlIElYUDRYWF9JTkRJUkVDVF9QQ0kgY29uZmlnIG9wdGlvbi4KKworM2MuIEdQSU8gYXMgSW50ZXJydXB0cworCitDdXJyZW50bHkgdGhlIGNvZGUgb25seSBoYW5kbGVzIGxldmVsLXNlbnNpdGl2ZSBHUElPIGludGVycnVwdHMgCisKKzQuIFN1cHBvcnRlZCBwbGF0Zm9ybXMKKworQURJIEVuZ2luZWVyaW5nIENveW90ZSBHYXRld2F5IFJlZmVyZW5jZSBQbGF0Zm9ybQoraHR0cDovL3d3dy5hZGllbmdpbmVlcmluZy5jb20vcHJvZHVjdHNDb3lvdGUuaHRtbAorCisgICBUaGUgQURJIENveW90ZSBwbGF0Zm9ybSBpcyByZWZlcmVuY2UgZGVzaWduIGZvciB0aG9zZSBidWlsZGluZyAKKyAgIHNtYWxsIHJlc2lkZW50aWFsL29mZmljZSBnYXRld2F5cy4gT25lIE5QRSBpcyBjb25uZWN0ZWQgdG8gYSAxMC8xMDAKKyAgIGludGVyZmFjZSwgb25lIHRvIDQtcG9ydCAxMC8xMDAgc3dpdGNoLCBhbmQgdGhlIHRoaXJkIHRvIGFuZCBBRFNMCisgICBpbnRlcmZhY2UuIEluIGFkZGl0aW9uLCBpdCBhbHNvIHN1cHBvcnRzIHRvIFBPVHMgaW50ZXJmYWNlcyBjb25uZWN0ZWQKKyAgIHZpYSBTTElDcy4gTm90ZSB0aGF0IHRob3NlIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExpbnV4IEFUTS4gRmluYWxseSwKKyAgIHRoZSBwbGF0Zm9ybSBoYXMgdHdvIG1pbmktUENJIHNsb3RzIHVzZWQgZm9yIDgwMi4xMVtiZ2FdIGNhcmRzLgorICAgRmluYWxseSwgdGhlcmUgaXMgYW4gSURFIHBvcnQgaGFuZ2luZyBvZmYgdGhlIGV4cGFuc2lvbiBidXMuCisKK0dhdGV3b3JrcyBBdmlsYSBOZXR3b3JrIFBsYXRmb3JtCitodHRwOi8vd3d3LmdhdGV3b3Jrcy5jb20vYXZpbGFfc2JjLmh0bQorCisgICBUaGUgQXZpbGEgcGxhdGZvcm0gaXMgYmFzaWNhbGx5IGFuZCBJWERQNDI1IHdpdGggdGhlIDQgUENJIHNsb3RzCisgICByZXBsYWNlZCB3aXRoIG1pbmktUENJIHNsb3RzIGFuZCBhIENGIElERSBpbnRlcmZhY2UgaGFuZ2luZyBvZmYKKyAgIHRoZSBleHBhbnNpb24gYnVzLgorCitJbnRlbCBJWERQNDI1IERldmVsb3BtZW50IFBsYXRmb3JtCitodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9wcm9kdWN0cy9ucGZhbWlseS9peGRwNDI1Lmh0bQorCisgICBUaGlzIGlzIEludGVsJ3Mgc3RhbmRhcmQgcmVmZXJlbmNlIHBsYXRmb3JtIGZvciB0aGUgSVhEUDQyNSBhbmQgaXMgCisgICBhbHNvIGtub3duIGFzIHRoZSBSaWNoZmllbGQgYm9hcmQuIEl0IGNvbnRhaW5zIDQgUENJIHNsb3RzLCAxNk1CCisgICBvZiBmbGFzaCwgdHdvIDEwLzEwMCBwb3J0cyBhbmQgb25lIEFEU0wgcG9ydC4KKworSW50ZWwgSVhEUDQ2NSBEZXZlbG9wbWVudCBQbGF0Zm9ybQoraHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhkcDQ2NS5odG0KKworICAgVGhpcyBpcyBiYXNpY2FsbHkgYW4gSVhEUDQyNSB3aXRoIGFuIElYUDQ2NSBhbmQgMzJNIG9mIGZsYXNoIGluc3RlYWQKKyAgIG9mIGp1c3QgMTYuCisKK0ludGVsIElYRFBHNDI1IERldmVsb3BtZW50IFBsYXRmb3JtCisKKyAgIFRoaXMgaXMgYmFzaWNhbGx5IGFuZCBBREkgQ295b3RlIGJvYXJkIHdpdGggYSBORUMgRUhDSSBjb250cm9sbGVyCisgICBhZGRlZC4gT25lIGlzc3VlIHdpdGggdGhpcyBib2FyZCBpcyB0aGF0IHRoZSBtaW5pLVBDSSBzbG90cyBvbmx5CisgICBoYXZlIHRoZSAzLjN2IGxpbmUgY29ubmVjdGVkLCBzbyB5b3UgY2FuJ3QgdXNlIGEgUENJIHRvIG1pbmktUENJCisgICBhZGFwdGVyIHdpdGggYW4gRTEwMCBjYXJkLiBTbyB0byBORlMgcm9vdCB5b3UgbmVlZCB0byB1c2UgZWl0aGVyCisgICB0aGUgQ1NSIG9yIGEgV2lGaSBjYXJkIGFuZCBhIHJhbWRpc2sgdGhhdCBCT09UUHMgYW5kIHRoZW4gZG9lcworICAgYSBwaXZvdF9yb290IHRvIE5GUy4KKworTW90b3JvbGEgUHJQTUMxMTAwIFByb2Nlc3NvciBNZXphbmluZSBDYXJkCitodHRwOi8vd3d3LmZvdW50YWluc3lzLmNvbS9kYXRhc2hlZXQvUHJQTUMxMTAwLnBkZgorCisgICBUaGUgUHJQTUMxMTAwIGlzIGJhc2VkIG9uIHRoZSBJWENQMTEwMCBhbmQgaXMgbWVhbnQgdG8gcGx1ZyBpbnRvCisgICBhbmQgSVhQMjQwMC8yODAwIHN5c3RlbSB0byBhY3QgYXMgdGhlIHN5c3RlbSBjb250cm9sbGVyLiBJdCBzaW1wbHkKKyAgIGNvbnRhaW5zIGEgQ1BVIGFuZCAxNk1CIG9mIGZsYXNoIG9uIHRoZSBib2FyZCBhbmQgbmVlZHMgdG8gYmUKKyAgIHBsdWdnZWQgaW50byBhIGNhcnJpZXIgYm9hcmQgdG8gZnVuY3Rpb24uIEN1cnJlbnRseSBMaW51eCBvbmx5CisgICBzdXBwb3J0cyB0aGUgTW90b3JvbGEgUHJQTUMgY2FycmllciBib2FyZCBmb3IgdGhpcyBwbGF0Zm9ybS4KKyAgIFNlZSBodHRwczovL21jZy5tb3Rvcm9sYS5jb20vdXMvZHMvcGRmL2RzMDE0NC5wZGYgZm9yIGluZm8KKyAgIG9uIHRoZSBjYXJyaWVyIGJvYXJkLgorCis1LiBUT0RPIExJU1QKKworLSBBZGQgc3VwcG9ydCBmb3IgQ295b3RlIElERQorLSBBZGQgc3VwcG9ydCBmb3IgZWRnZS1iYXNlZCBHUElPIGludGVycnVwdHMKKy0gQWRkIHN1cHBvcnQgZm9yIENGIElERSBvbiBleHBhbnNpb24gYnVzCisKKzYuIFRoYW5rcworCitUaGUgSVhQNHh4IHdvcmsgaGFzIGJlZW4gZnVuZGVkIGJ5IEludGVsIENvcnAuIGFuZCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisKK1RoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgcGF0Y2hlcy9jb21tZW50cy9ldGM6CisKK0xlbm5lcnR5IEJ1eXRlbmhlaworTHV0eiBKYWVuaWNrZQorSnVzdGluIE1heWZpZWxkCitSb2JlcnQgRS4gUmFuc2xhbQorW0kga25vdyBJJ3ZlIGZvcmdvdHRlbiBvdGhlcnMsIHBsZWFzZSBlbWFpbCBtZSB0byBiZSBhZGRlZF0gCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGFzdCBVcGRhdGU6IDAxLzA0LzIwMDUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL0ludGVycnVwdHMgYi9Eb2N1bWVudGF0aW9uL2FybS9JbnRlcnJ1cHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYzkzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9JbnRlcnJ1cHRzCkBAIC0wLDAgKzEsMTczIEBACisyLjUuMi1ybWs1CistLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIGZpcnN0IGtlcm5lbCB0aGF0IGNvbnRhaW5zIGEgbWFqb3Igc2hha2UgdXAgb2Ygc29tZSBvZiB0aGUKK21ham9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdWJzeXN0ZW1zLgorCitGaXJzdGx5LCBpdCBjb250YWlucyBzb21lIHByZXR0eSBtYWpvciBjaGFuZ2VzIHRvIHRoZSB3YXkgd2UgaGFuZGxlIHRoZQorTU1VIFRMQi4gIEVhY2ggTU1VIFRMQiB2YXJpYW50IGlzIG5vdyBoYW5kbGVkIGNvbXBsZXRlbHkgc2VwYXJhdGVseSAtCit3ZSBoYXZlIFRMQiB2MywgVExCIHY0ICh3aXRob3V0IHdyaXRlIGJ1ZmZlciksIFRMQiB2NCAod2l0aCB3cml0ZSBidWZmZXIpLAorYW5kIGZpbmFsbHkgVExCIHY0ICh3aXRoIHdyaXRlIGJ1ZmZlciwgd2l0aCBJIFRMQiBpbnZhbGlkYXRlIGVudHJ5KS4KK1RoZXJlIGlzIG1vcmUgYXNzZW1ibHkgY29kZSBpbnNpZGUgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMsIG1haW5seSB0bworYWxsb3cgbW9yZSBmbGV4aWJsZSBUTEIgaGFuZGxpbmcgZm9yIHRoZSBmdXR1cmUuCisKK1NlY29uZGx5LCB0aGUgSVJRIHN1YnN5c3RlbS4KKworVGhlIDIuNSBrZXJuZWxzIHdpbGwgYmUgaGF2aW5nIG1ham9yIGNoYW5nZXMgdG8gdGhlIHdheSBJUlFzIGFyZSBoYW5kbGVkLgorVW5mb3J0dW5hdGVseSwgdGhpcyBtZWFucyB0aGF0IG1hY2hpbmUgdHlwZXMgdGhhdCB0b3VjaCB0aGUgaXJxX2Rlc2NbXQorYXJyYXkgKGJhc2ljYWxseSBhbGwgbWFjaGluZSB0eXBlcykgd2lsbCBicmVhaywgYW5kIHRoaXMgbWVhbnMgZXZlcnkKK21hY2hpbmUgdHlwZSB0aGF0IHdlIGN1cnJlbnRseSBoYXZlLgorCitMZXRzIHRha2UgYW4gZXhhbXBsZS4gIE9uIHRoZSBBc3NhYmV0IHdpdGggTmVwb25zZXQsIHdlIGhhdmU6CisKKyAgICAgICAgICAgICAgICAgIEdQSU8yNSAgICAgICAgICAgICAgICAgSVJSOjIKKyAgICAgICAgU0ExMTAwIC0tLS0tLS0tLS0tLT4gTmVwb25zZXQgLS0tLS0tLS0tLS0+IFNBMTExMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJSVI6MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLT4gVVNBUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJSVI6MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLT4gU01DOTE5NgorCitUaGUgd2F5IHN0dWZmIGN1cnJlbnRseSB3b3JrcywgYWxsIFNBMTExMSBpbnRlcnJ1cHRzIGFyZSBtdXR1YWxseQorZXhjbHVzaXZlIG9mIGVhY2ggb3RoZXIgLSBpZiB5b3UncmUgcHJvY2Vzc2luZyBvbmUgaW50ZXJydXB0IGZyb20gdGhlCitTQTExMTEgYW5kIGFub3RoZXIgY29tZXMgaW4sIHlvdSBoYXZlIHRvIHdhaXQgZm9yIHRoYXQgaW50ZXJydXB0IHRvCitmaW5pc2ggcHJvY2Vzc2luZyBiZWZvcmUgeW91IGNhbiBzZXJ2aWNlIHRoZSBuZXcgaW50ZXJydXB0LiAgRWcsIGFuCitJREUgUElPLWJhc2VkIGludGVycnVwdCBvbiB0aGUgU0ExMTExIGV4Y2x1ZGVzIGFsbCBvdGhlciBTQTExMTEgYW5kCitTTUM5MTk2IGludGVycnVwdHMgdW50aWwgaXQgaGFzIGZpbmlzaGVkIHRyYW5zZmVycmluZyBpdHMgbXVsdGktc2VjdG9yCitkYXRhLCB3aGljaCBjYW4gYmUgYSBsb25nIHRpbWUuICBOb3RlIGFsc28gdGhhdCBzaW5jZSB3ZSBsb29wIGluIHRoZQorU0ExMTExIElSUSBoYW5kbGVyLCBTQTExMTEgSVJRcyBjYW4gaG9sZCBvZmYgU01DOTE5NiBJUlFzIGluZGVmaW5pdGVseS4KKworCitUaGUgbmV3IGFwcHJvYWNoIGJyaW5ncyBzZXZlcmFsIG5ldyBpZGVhcy4uLgorCitXZSBpbnRyb2R1Y2UgdGhlIGNvbmNlcHQgb2YgYSAicGFyZW50IiBhbmQgYSAiY2hpbGQiLiAgRm9yIGV4YW1wbGUsCit0byB0aGUgTmVwb25zZXQgaGFuZGxlciwgdGhlICJwYXJlbnQiIGlzIEdQSU8yNSwgYW5kIHRoZSAiY2hpbGRyZW4iZAorYXJlIFNBMTExMSwgU01DOTE5NiBhbmQgVVNBUi4KKworV2UgYWxzbyBicmluZyB0aGUgaWRlYSBvZiBhbiBJUlEgImNoaXAiIChtYWlubHkgdG8gcmVkdWNlIHRoZSBzaXplIG9mCit0aGUgaXJxZGVzYyBhcnJheSkuICBUaGlzIGRvZXNuJ3QgaGF2ZSB0byBiZSBhIHJlYWwgIklDIjsgaW5kZWVkIHRoZQorU0ExMXgwIElSUXMgYXJlIGhhbmRsZWQgYnkgdHdvIHNlcGFyYXRlICJjaGlwIiBzdHJ1Y3R1cmVzLCBvbmUgZm9yCitHUElPMC0xMCwgYW5kIGFub3RoZXIgZm9yIGFsbCB0aGUgcmVzdC4gIEl0IGlzIGp1c3QgYSBjb250YWluZXIgZm9yCit0aGUgdmFyaW91cyBvcGVyYXRpb25zIChtYXliZSB0aGlzJ2xsIGNoYW5nZSB0byBhIGJldHRlciBuYW1lKS4KK1RoaXMgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CisKK3N0cnVjdCBpcnFjaGlwIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQWNrbm93bGVkZ2UgdGhlIElSUS4KKyAgICAgICAgICogSWYgdGhpcyBpcyBhIGxldmVsLWJhc2VkIElSUSwgdGhlbiBpdCBpcyBleHBlY3RlZCB0byBtYXNrIHRoZSBJUlEKKyAgICAgICAgICogYXMgd2VsbC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgKCphY2spKHVuc2lnbmVkIGludCBpcnEpOworICAgICAgICAvKgorICAgICAgICAgKiBNYXNrIHRoZSBJUlEgaW4gaGFyZHdhcmUuCisgICAgICAgICAqLworICAgICAgICB2b2lkICgqbWFzaykodW5zaWduZWQgaW50IGlycSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFVubWFzayB0aGUgSVJRIGluIGhhcmR3YXJlLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCAoKnVubWFzaykodW5zaWduZWQgaW50IGlycSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlLXJ1biB0aGUgSVJRCisgICAgICAgICAqLworICAgICAgICB2b2lkICgqcmVydW4pKHVuc2lnbmVkIGludCBpcnEpOworICAgICAgICAvKgorICAgICAgICAgKiBTZXQgdGhlIHR5cGUgb2YgdGhlIElSUS4KKyAgICAgICAgICovCisgICAgICAgIGludCAoKnR5cGUpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCwgdHlwZSk7Cit9OworCithY2sgICAgLSByZXF1aXJlZC4gIE1heSBiZSB0aGUgc2FtZSBmdW5jdGlvbiBhcyBtYXNrIGZvciBJUlFzCisgICAgICAgICBoYW5kbGVkIGJ5IGRvX2xldmVsX0lSUS4KK21hc2sgICAtIHJlcXVpcmVkLgordW5tYXNrIC0gcmVxdWlyZWQuCityZXJ1biAgLSBvcHRpb25hbC4gIE5vdCByZXF1aXJlZCBpZiB5b3UncmUgdXNpbmcgZG9fbGV2ZWxfSVJRIGZvciBhbGwKKyAgICAgICAgIElSUXMgdGhhdCB1c2UgdGhpcyAnaXJxY2hpcCcuICBHZW5lcmFsbHkgZXhwZWN0ZWQgdG8gcmUtdHJpZ2dlcgorICAgICAgICAgdGhlIGhhcmR3YXJlIElSUSBpZiBwb3NzaWJsZS4gIElmIG5vdCwgbWF5IGNhbGwgdGhlIGhhbmRsZXIKKwkgZGlyZWN0bHkuCit0eXBlICAgLSBvcHRpb25hbC4gIElmIHlvdSBkb24ndCBzdXBwb3J0IGNoYW5naW5nIHRoZSB0eXBlIG9mIGFuIElSUSwKKyAgICAgICAgIGl0IHNob3VsZCBiZSBudWxsIHNvIHBlb3BsZSBjYW4gZGV0ZWN0IGlmIHRoZXkgYXJlIHVuYWJsZSB0bworICAgICAgICAgc2V0IHRoZSBJUlEgdHlwZS4KKworRm9yIGVhY2ggSVJRLCB3ZSBrZWVwIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisKKyAgICAgICAgLSAiZGlzYWJsZSIgZGVwdGggKG51bWJlciBvZiBkaXNhYmxlX2lycSgpcyB3aXRob3V0IGVuYWJsZV9pcnEoKXMpCisgICAgICAgIC0gZmxhZ3MgaW5kaWNhdGluZyB3aGF0IHdlIGNhbiBkbyB3aXRoIHRoaXMgSVJRICh2YWxpZCwgcHJvYmUsCisgICAgICAgICAgbm9hdXRvdW5tYXNrKSBhcyBiZWZvcmUKKyAgICAgICAgLSBzdGF0dXMgb2YgdGhlIElSUSAocHJvYmluZywgZW5hYmxlLCBldGMpCisgICAgICAgIC0gY2hpcAorICAgICAgICAtIHBlci1JUlEgaGFuZGxlcgorICAgICAgICAtIGlycWFjdGlvbiBzdHJ1Y3R1cmUgbGlzdAorCitUaGUgaGFuZGxlciBjYW4gYmUgb25lIG9mIHRoZSAzIHN0YW5kYXJkIGhhbmRsZXJzIC0gImxldmVsIiwgImVkZ2UiIGFuZAorInNpbXBsZSIsIG9yIHlvdXIgb3duIHNwZWNpZmljIGhhbmRsZXIgaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwuCisKK1RoZSAibGV2ZWwiIGhhbmRsZXIgaXMgd2hhdCB3ZSBjdXJyZW50bHkgaGF2ZSAtIGl0cyBwcmV0dHkgc2ltcGxlLgorImVkZ2UiIGtub3dzIGFib3V0IHRoZSBicm9rZW5uZXNzIG9mIHN1Y2ggSVJRIGltcGxlbWVudGF0aW9ucyAtIHRoYXQgeW91CituZWVkIHRvIGxlYXZlIHRoZSBoYXJkd2FyZSBJUlEgZW5hYmxlZCB3aGlsZSBwcm9jZXNzaW5nIGl0LCBhbmQgcXVldWVpbmcKK2Z1cnRoZXIgSVJRIGV2ZW50cyBzaG91bGQgdGhlIElSUSBoYXBwZW4gYWdhaW4gd2hpbGUgcHJvY2Vzc2luZy4gIFRoZQorInNpbXBsZSIgaGFuZGxlciBpcyB2ZXJ5IGJhc2ljLCBhbmQgZG9lcyBub3QgcGVyZm9ybSBhbnkgaGFyZHdhcmUKK21hbmlwdWxhdGlvbiwgbm9yIHN0YXRlIHRyYWNraW5nLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHRoaW5ncyBsaWtlIHRoZQorU01DOTE5NiBhbmQgVVNBUiBhYm92ZS4KKworU28sIHdoYXQncyBjaGFuZ2VkPworCisxLiBNYWNoaW5lIGltcGxlbWVudGF0aW9ucyBtdXN0IG5vdCB3cml0ZSB0byB0aGUgaXJxZGVzYyBhcnJheS4KKworMi4gTmV3IGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHRoZSBpcnFkZXNjIGFycmF5LiAgVGhlIGZpcnN0IDQgYXJlIGV4cGVjdGVkCisgICB0byBiZSB1c2VmdWwgb25seSB0byBtYWNoaW5lIHNwZWNpZmljIGNvZGUuICBUaGUgbGFzdCBpcyByZWNvbW1lbmRlZCB0bworICAgb25seSBiZSB1c2VkIGJ5IG1hY2hpbmUgc3BlY2lmaWMgY29kZSwgYnV0IG1heSBiZSB1c2VkIGluIGRyaXZlcnMgaWYKKyAgIGFic29sdXRlbHkgbmVjZXNzYXJ5LgorCisgICAgICAgIHNldF9pcnFfY2hpcChpcnEsY2hpcCkKKworICAgICAgICAgICAgICAgIFNldCB0aGUgbWFzay91bm1hc2sgbWV0aG9kcyBmb3IgaGFuZGxpbmcgdGhpcyBJUlEKKworICAgICAgICBzZXRfaXJxX2hhbmRsZXIoaXJxLGhhbmRsZXIpCisKKyAgICAgICAgICAgICAgICBTZXQgdGhlIGhhbmRsZXIgZm9yIHRoaXMgSVJRIChsZXZlbCwgZWRnZSwgc2ltcGxlKQorCisgICAgICAgIHNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSxoYW5kbGVyKQorCisgICAgICAgICAgICAgICAgU2V0IGEgImNoYWluZWQiIGhhbmRsZXIgZm9yIHRoaXMgSVJRIC0gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgIGVuYWJsZXMgdGhpcyBJUlEgKGVnLCBOZXBvbnNldCBhbmQgU0ExMTExIGhhbmRsZXJzKS4KKworICAgICAgICBzZXRfaXJxX2ZsYWdzKGlycSxmbGFncykKKworICAgICAgICAgICAgICAgIFNldCB0aGUgdmFsaWQvcHJvYmUvbm9hdXRvZW5hYmxlIGZsYWdzLgorCisgICAgICAgIHNldF9pcnFfdHlwZShpcnEsdHlwZSkKKworICAgICAgICAgICAgICAgIFNldCBhY3RpdmUgdGhlIElSUSBlZGdlKHMpL2xldmVsLiAgVGhpcyByZXBsYWNlcyB0aGUKKyAgICAgICAgICAgICAgICBTQTExMTEgSU5UUE9MIG1hbmlwdWxhdGlvbiwgYW5kIHRoZSBzZXRfR1BJT19JUlFfZWRnZSgpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24uICBUeXBlIHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgICAgICAgICAgICNkZWZpbmUgSVJRVF9OT0VER0UgICAgICgwKQorICAgICAgICAgICAgICAgICNkZWZpbmUgSVJRVF9SSVNJTkcgICAgIChfX0lSUVRfUklTRURHRSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIElSUVRfRkFMTElORyAgICAoX19JUlFUX0ZBTEVER0UpCisgICAgICAgICAgICAgICAgI2RlZmluZSBJUlFUX0JPVEhFREdFICAgKF9fSVJRVF9SSVNFREdFfF9fSVJRVF9GQUxFREdFKQorICAgICAgICAgICAgICAgICNkZWZpbmUgSVJRVF9MT1cgICAgICAgIChfX0lSUVRfTE9XTFZMKQorICAgICAgICAgICAgICAgICNkZWZpbmUgSVJRVF9ISUdIICAgICAgIChfX0lSUVRfSElHSExWTCkKKworMy4gc2V0X0dQSU9fSVJRX2VkZ2UoKSBpcyBvYnNvbGV0ZSwgYW5kIHNob3VsZCBiZSByZXBsYWNlZCBieSBzZXRfaXJxX3R5cGUuCisKKzQuIERpcmVjdCBhY2Nlc3MgdG8gU0ExMTExIElOVFBPTCBpcyBkZXByZWNpYXRlZC4gIFVzZSBzZXRfaXJxX3R5cGUgaW5zdGVhZC4KKworNS4gQSBoYW5kbGVyIGlzIGV4cGVjdGVkIHRvIHBlcmZvcm0gYW55IG5lY2Vzc2FyeSBhY2tub3dsZWRnZW1lbnQgb2YgdGhlCisgICBwYXJlbnQgSVJRIHZpYSB0aGUgY29ycmVjdCBjaGlwIHNwZWNpZmljIGZ1bmN0aW9uLiAgRm9yIGluc3RhbmNlLCBpZgorICAgdGhlIFNBMTExMSBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gYSBTQTExMTAgR1BJTywgdGhlbiB5b3Ugc2hvdWxkCisgICBhY2tub3dsZWRnZSB0aGUgU0ExMTEwIElSUSBlYWNoIHRpbWUgeW91IHJlLXJlYWQgdGhlIFNBMTExMSBJUlEgc3RhdHVzLgorCis2LiBGb3IgYW55IGNoaWxkIHdoaWNoIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIElSUSBlbmFibGUvZGlzYWJsZSBjb250cm9scworICAgKGVnLCBTTUM5MTk2KSwgdGhlIGhhbmRsZXIgbXVzdCBtYXNrIG9yIGFja25vd2xlZGdlIHRoZSBwYXJlbnQgSVJRCisgICB3aGlsZSB0aGUgY2hpbGQgaGFuZGxlciBpcyBjYWxsZWQsIGFuZCB0aGUgY2hpbGQgaGFuZGxlciBzaG91bGQgYmUgdGhlCisgICAic2ltcGxlIiBoYW5kbGVyIChub3QgImVkZ2UiIG5vciAibGV2ZWwiKS4gIEFmdGVyIHRoZSBoYW5kbGVyIGNvbXBsZXRlcywKKyAgIHRoZSBwYXJlbnQgSVJRIHNob3VsZCBiZSB1bm1hc2tlZCwgYW5kIHRoZSBzdGF0dXMgb2YgYWxsIGNoaWxkcmVuIG11c3QKKyAgIGJlIHJlLWNoZWNrZWQgZm9yIHBlbmRpbmcgZXZlbnRzLiAgKHNlZSB0aGUgTmVwb25zZXQgSVJRIGhhbmRsZXIgZm9yCisgICBkZXRhaWxzKS4KKworNy4gZml4dXBfaXJxKCkgaXMgZ29uZSwgYXMgaXMgaW5jbHVkZS9hc20tYXJtL2FyY2gtKi9pcnEuaAorCitQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgd2lsbCBub3Qgc29sdmUgYWxsIHByb2JsZW1zIC0gc29tZSBvZiB0aGVtIGFyZQoraGFyZHdhcmUgYmFzZWQuICBNaXhpbmcgbGV2ZWwtYmFzZWQgYW5kIGVkZ2UtYmFzZWQgSVJRcyBvbiB0aGUgc2FtZQorcGFyZW50IHNpZ25hbCAoZWcgbmVwb25zZXQpIGlzIG9uZSBzdWNoIGFyZWEgd2hlcmUgYSBzb2Z0d2FyZSBiYXNlZAorc29sdXRpb24gY2FuJ3QgcHJvdmlkZSB0aGUgZnVsbCBhbnN3ZXIgdG8gbG93IElSUSBsYXRlbmN5LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9OZXR3aW5kZXIgYi9Eb2N1bWVudGF0aW9uL2FybS9OZXR3aW5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiNDU3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL05ldHdpbmRlcgpAQCAtMCwwICsxLDc4IEBACitOZXRXaW5kZXIgc3BlY2lmaWMgZG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIE5ldFdpbmRlciBpcyBhIHNtYWxsIGxvdy1wb3dlciBjb21wdXRlciwgcHJpbWFyaWx5IGRlc2lnbmVkCit0byBydW4gTGludXguICBJdCBpcyBiYXNlZCBhcm91bmQgdGhlIFN0cm9uZ0FSTSBSSVNDIHByb2Nlc3NvciwKK0RDMjEyODUgUENJIGJyaWRnZSwgd2l0aCBQQy10eXBlIGhhcmR3YXJlIGdsdWVkIGFyb3VuZCBpdC4KKworUG9ydCB1c2FnZQorPT09PT09PT09PQorCitNaW4gICAgLSBNYXgJRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMHgwMDAwIC0gMHgwMDBmCURNQTEKKzB4MDAyMCAtIDB4MDAyMQlQSUMxCisweDAwNjAgLSAweDAwNmYJS2V5Ym9hcmQKKzB4MDA3MCAtIDB4MDA3ZglSVEMKKzB4MDA4MCAtIDB4MDA4NwlETUExCisweDAwODggLSAweDAwOGYJRE1BMgorMHgwMGEwIC0gMHgwMGEzCVBJQzIKKzB4MDBjMCAtIDB4MDBkZglETUEyCisweDAxODAgLSAweDAxODcJSVJEQQorMHgwMWYwIC0gMHgwMWY2CWlkZTAKKzB4MDIwMQkJR2FtZSBwb3J0CisweDAyMDMJCVJXQTAxMCBjb25maWd1cmF0aW9uIHJlYWQKKzB4MDIyMCAtID8JU291bmRCbGFzdGVyCisweDAyNTAgLSA/CVdhdmVBcnRpc3QKKzB4MDI3OQkJUldBMDEwIGNvbmZpZ3VyYXRpb24gaW5kZXgKKzB4MDJmOCAtIDB4MDJmZglTZXJpYWwgdHR5UzEKKzB4MDMwMCAtIDB4MDMxZglFdGhlcjEwCisweDAzMzgJCUdQSU8xCisweDAzM2EJCUdQSU8yCisweDAzNzAgLSAweDAzNzEJVzgzOTc3RiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworMHgwMzg4IC0gPwlBZExpYgorMHgwM2MwIC0gMHgwM2RmCVZHQQorMHgwM2Y2CQlpZGUwCisweDAzZjggLSAweDAzZmYJU2VyaWFsIHR0eVMwCisweDA0MDAgLSAweDA0MDgJREMyMTE0MworMHgwNDgwIC0gMHgwNDg3CURNQTEKKzB4MDQ4OCAtIDB4MDQ4ZglETUEyCisweDBhNzkJCVJXQTAxMCBjb25maWd1cmF0aW9uIHdyaXRlCisweGU4MDAgLSAweGU4MGYJaWRlMC9pZGUxIEJNIERNQQorCisKK0ludGVycnVwdCB1c2FnZQorPT09PT09PT09PT09PT09CisKK0lSUQl0eXBlCURlc2NyaXB0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAwCUlTQQkxMDBIeiB0aW1lcgorIDEJSVNBCUtleWJvYXJkCisgMglJU0EJY2FzY2FkZQorIDMJSVNBCVNlcmlhbCB0dHlTMQorIDQJSVNBCVNlcmlhbCB0dHlTMAorIDUJSVNBCVBTLzIgbW91c2UKKyA2CUlTQQlJUkRBCisgNwlJU0EJUHJpbnRlcgorIDgJSVNBCVJUQyBhbGFybQorIDkJSVNBCisxMAlJU0EJR1AxMCAoT3JhbmdlIHJlc2V0IGJ1dHRvbikKKzExCUlTQQorMTIJSVNBCVdhdmVBcnRpc3QKKzEzCUlTQQorMTQJSVNBCWhkYTEKKzE1CUlTQQorCitETUEgdXNhZ2UKKz09PT09PT09PQorCitETUEJdHlwZQlEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMAlJU0EJSVJEQQorIDEJSVNBCisgMglJU0EJY2FzY2FkZQorIDMJSVNBCVdhdmVBcnRpc3QKKyA0CUlTQQorIDUJSVNBCisgNglJU0EKKyA3CUlTQQlXYXZlQXJ0aXN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9Qb3J0aW5nIGIvRG9jdW1lbnRhdGlvbi9hcm0vUG9ydGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDkyMjMzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vUG9ydGluZwpAQCAtMCwwICsxLDEzNSBAQAorVGFrZW4gZnJvbSBsaXN0IGFyY2hpdmUgYXQgaHR0cDovL2xpc3RzLmFybS5saW51eC5vcmcudWsvcGlwZXJtYWlsL2xpbnV4LWFybS1rZXJuZWwvMjAwMS1KdWx5LzAwNDA2NC5odG1sCisKK0luaXRpYWwgZGVmaW5pdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBzeW1ib2wgZGVmaW5pdGlvbnMgcmVseSBvbiB5b3Uga25vd2luZyB0aGUgdHJhbnNsYXRpb24gdGhhdAorX192aXJ0X3RvX3BoeXMoKSBkb2VzIGZvciB5b3VyIG1hY2hpbmUuICBUaGlzIG1hY3JvIGNvbnZlcnRzIHRoZSBwYXNzZWQKK3ZpcnR1YWwgYWRkcmVzcyB0byBhIHBoeXNpY2FsIGFkZHJlc3MuICBOb3JtYWxseSwgaXQgaXMgc2ltcGx5OgorCisJCXBoeXMgPSB2aXJ0IC0gUEFHRV9PRkZTRVQgKyBQSFlTX09GRlNFVAorCisKK0RlY29tcHJlc3NvciBTeW1ib2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitaVEVYVEFERFIKKwlTdGFydCBhZGRyZXNzIG9mIGRlY29tcHJlc3Nvci4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gdGFsa2luZyBhYm91dAorCXZpcnR1YWwgb3IgcGh5c2ljYWwgYWRkcmVzc2VzIGhlcmUsIHNpbmNlIHRoZSBNTVUgd2lsbCBiZSBvZmYgYXQKKwl0aGUgdGltZSB3aGVuIHlvdSBjYWxsIHRoZSBkZWNvbXByZXNzb3IgY29kZS4gIFlvdSBub3JtYWxseSBjYWxsCisJdGhlIGtlcm5lbCBhdCB0aGlzIGFkZHJlc3MgdG8gc3RhcnQgaXQgYm9vdGluZy4gIFRoaXMgZG9lc24ndCBoYXZlCisJdG8gYmUgbG9jYXRlZCBpbiBSQU0sIGl0IGNhbiBiZSBpbiBmbGFzaCBvciBvdGhlciByZWFkLW9ubHkgb3IKKwlyZWFkLXdyaXRlIGFkZHJlc3NhYmxlIG1lZGl1bS4KKworWkJTU0FERFIKKwlTdGFydCBhZGRyZXNzIG9mIHplcm8taW5pdGlhbGlzZWQgd29yayBhcmVhIGZvciB0aGUgZGVjb21wcmVzc29yLgorCVRoaXMgbXVzdCBiZSBwb2ludGluZyBhdCBSQU0uICBUaGUgZGVjb21wcmVzc29yIHdpbGwgemVybyBpbml0aWFsaXNlCisJdGhpcyBmb3IgeW91LiAgQWdhaW4sIHRoZSBNTVUgd2lsbCBiZSBvZmYuCisKK1pSRUxBRERSCisJVGhpcyBpcyB0aGUgYWRkcmVzcyB3aGVyZSB0aGUgZGVjb21wcmVzc2VkIGtlcm5lbCB3aWxsIGJlIHdyaXR0ZW4sCisJYW5kIGV2ZW50dWFsbHkgZXhlY3V0ZWQuICBUaGUgZm9sbG93aW5nIGNvbnN0cmFpbnQgbXVzdCBiZSB2YWxpZDoKKworCQlfX3ZpcnRfdG9fcGh5cyhURVhUQUREUikgPT0gWlJFTEFERFIKKworCVRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGtlcm5lbCBpcyBjYXJlZnVsbHkgY29kZWQgdG8gYmUgcG9zaXRpb24KKwlpbmRlcGVuZGVudC4KKworSU5JVFJEX1BIWVMKKwlQaHlzaWNhbCBhZGRyZXNzIHRvIHBsYWNlIHRoZSBpbml0aWFsIFJBTSBkaXNrLiAgT25seSByZWxldmFudCBpZgorCXlvdSBhcmUgdXNpbmcgdGhlIGJvb3RwSW1hZ2Ugc3R1ZmYgKHdoaWNoIG9ubHkgd29ya3Mgb24gdGhlIG9sZAorCXN0cnVjdCBwYXJhbV9zdHJ1Y3QpLgorCitJTklUUkRfVklSVAorCVZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgaW5pdGlhbCBSQU0gZGlzay4gIFRoZSBmb2xsb3dpbmcgIGNvbnN0cmFpbnQKKwltdXN0IGJlIHZhbGlkOgorCisJCV9fdmlydF90b19waHlzKElOSVRSRF9WSVJUKSA9PSBJTklUUkRfUEhZUworCitQQVJBTVNfUEhZUworCVBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHN0cnVjdCBwYXJhbV9zdHJ1Y3Qgb3IgdGFnIGxpc3QsIGdpdmluZyB0aGUKKwlrZXJuZWwgdmFyaW91cyBwYXJhbWV0ZXJzIGFib3V0IGl0cyBleGVjdXRpb24gZW52aXJvbm1lbnQuCisKKworS2VybmVsIFN5bWJvbHMKKy0tLS0tLS0tLS0tLS0tCisKK1BIWVNfT0ZGU0VUCisJUGh5c2ljYWwgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYmFuayBvZiBSQU0uCisKK1BBR0VfT0ZGU0VUCisJVmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBiYW5rIG9mIFJBTS4gIER1cmluZyB0aGUga2VybmVsCisJYm9vdCBwaGFzZSwgdmlydHVhbCBhZGRyZXNzIFBBR0VfT0ZGU0VUIHdpbGwgYmUgbWFwcGVkIHRvIHBoeXNpY2FsCisJYWRkcmVzcyBQSFlTX09GRlNFVCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgbWFwcGluZ3MgeW91IHN1cHBseS4KKwlUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBUQVNLX1NJWkUuCisKK1RBU0tfU0laRQorCVRoZSBtYXhpbXVtIHNpemUgb2YgYSB1c2VyIHByb2Nlc3MgaW4gYnl0ZXMuICBTaW5jZSB1c2VyIHNwYWNlCisJYWx3YXlzIHN0YXJ0cyBhdCB6ZXJvLCB0aGlzIGlzIHRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCBhIHVzZXIKKwlwcm9jZXNzIGNhbiBhY2Nlc3MrMS4gIFRoZSB1c2VyIHNwYWNlIHN0YWNrIGdyb3dzIGRvd24gZnJvbSB0aGlzCisJYWRkcmVzcy4KKworCUFueSB2aXJ0dWFsIGFkZHJlc3MgYmVsb3cgVEFTS19TSVpFIGlzIGRlZW1lZCB0byBiZSB1c2VyIHByb2Nlc3MKKwlhcmVhLCBhbmQgdGhlcmVmb3JlIG1hbmFnZWQgZHluYW1pY2FsbHkgb24gYSBwcm9jZXNzIGJ5IHByb2Nlc3MKKwliYXNpcyBieSB0aGUga2VybmVsLiAgSSdsbCBjYWxsIHRoaXMgdGhlIHVzZXIgc2VnbWVudC4KKworCUFueXRoaW5nIGFib3ZlIFRBU0tfU0laRSBpcyBjb21tb24gdG8gYWxsIHByb2Nlc3Nlcy4gIEknbGwgY2FsbAorCXRoaXMgdGhlIGtlcm5lbCBzZWdtZW50LgorCisJKEluIG90aGVyIHdvcmRzLCB5b3UgY2FuJ3QgcHV0IElPIG1hcHBpbmdzIGJlbG93IFRBU0tfU0laRSwgYW5kCisJaGVuY2UgUEFHRV9PRkZTRVQpLgorCitURVhUQUREUgorCVZpcnR1YWwgc3RhcnQgYWRkcmVzcyBvZiBrZXJuZWwsIG5vcm1hbGx5IFBBR0VfT0ZGU0VUICsgMHg4MDAwLgorCVRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBpbWFnZSBlbmRzIHVwLiAgV2l0aCB0aGUgbGF0ZXN0IGtlcm5lbHMsCisJaXQgbXVzdCBiZSBsb2NhdGVkIGF0IDMyNzY4IGJ5dGVzIGludG8gYSAxMjhNQiByZWdpb24uICBQcmV2aW91cworCWtlcm5lbHMgcGxhY2VkIGEgcmVzdHJpY3Rpb24gb2YgMjU2TUIgaGVyZS4KKworREFUQUFERFIKKwlWaXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSBrZXJuZWwgZGF0YSBzZWdtZW50LiAgTXVzdCBub3QgYmUgZGVmaW5lZAorCXdoZW4gdXNpbmcgdGhlIGRlY29tcHJlc3Nvci4KKworVk1BTExPQ19TVEFSVAorVk1BTExPQ19FTkQKKwlWaXJ0dWFsIGFkZHJlc3NlcyBib3VuZGluZyB0aGUgdm1hbGxvYygpIGFyZWEuICBUaGVyZSBtdXN0IG5vdCBiZQorCWFueSBzdGF0aWMgbWFwcGluZ3MgaW4gdGhpcyBhcmVhOyB2bWFsbG9jIHdpbGwgb3ZlcndyaXRlIHRoZW0uCisJVGhlIGFkZHJlc3NlcyBtdXN0IGFsc28gYmUgaW4gdGhlIGtlcm5lbCBzZWdtZW50IChzZWUgYWJvdmUpLgorCU5vcm1hbGx5LCB0aGUgdm1hbGxvYygpIGFyZWEgc3RhcnRzIFZNQUxMT0NfT0ZGU0VUIGJ5dGVzIGFib3ZlIHRoZQorCWxhc3QgdmlydHVhbCBSQU0gYWRkcmVzcyAoZm91bmQgdXNpbmcgdmFyaWFibGUgaGlnaF9tZW1vcnkpLgorCitWTUFMTE9DX09GRlNFVAorCU9mZnNldCBub3JtYWxseSBpbmNvcnBvcmF0ZWQgaW50byBWTUFMTE9DX1NUQVJUIHRvIHByb3ZpZGUgYSBob2xlCisJYmV0d2VlbiB2aXJ0dWFsIFJBTSBhbmQgdGhlIHZtYWxsb2MgYXJlYS4gIFdlIGRvIHRoaXMgdG8gYWxsb3cKKwlvdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoZWcsIHNvbWV0aGluZyB3cml0aW5nIG9mZiB0aGUgZW5kCisJb2YgdGhlIG1hcHBlZCBtZW1vcnkgbWFwKSB0byBiZSBjYXVnaHQuICBOb3JtYWxseSBzZXQgdG8gOE1CLgorCitBcmNoaXRlY3R1cmUgU3BlY2lmaWMgTWFjcm9zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JPT1RfTUVNKHByYW0scGlvLHZpbykKKwlgcHJhbScgc3BlY2lmaWVzIHRoZSBwaHlzaWNhbCBzdGFydCBhZGRyZXNzIG9mIFJBTS4gIE11c3QgYWx3YXlzCisJYmUgcHJlc2VudCwgYW5kIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBQSFlTX09GRlNFVC4KKworCWBwaW8nIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGFuIDhNQiByZWdpb24gY29udGFpbmluZyBJTyBmb3IKKwl1c2Ugd2l0aCB0aGUgZGVidWdnaW5nIG1hY3JvcyBpbiBhcmNoL2FybS9rZXJuZWwvZGVidWctYXJtdi5TLgorCisJYHZpbycgaXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgOE1CIGRlYnVnZ2luZyByZWdpb24uCisKKwlJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBkZWJ1Z2dpbmcgcmVnaW9uIHdpbGwgYmUgcmUtaW5pdGlhbGlzZWQKKwlieSB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgbGF0ZXIgaW4gdGhlIGNvZGUgKHZpYSB0aGUKKwlNQVBJTyBmdW5jdGlvbikuCisKK0JPT1RfUEFSQU1TCisJU2FtZSBhcywgYW5kIHNlZSBQQVJBTVNfUEhZUy4KKworRklYVVAoZnVuYykKKwlNYWNoaW5lIHNwZWNpZmljIGZpeHVwcywgcnVuIGJlZm9yZSBtZW1vcnkgc3Vic3lzdGVtcyBoYXZlIGJlZW4KKwlpbml0aWFsaXNlZC4KKworTUFQSU8oZnVuYykKKwlNYWNoaW5lIHNwZWNpZmljIGZ1bmN0aW9uIHRvIG1hcCBJTyBhcmVhcyAoaW5jbHVkaW5nIHRoZSBkZWJ1ZworCXJlZ2lvbiBhYm92ZSkuCisKK0lOSVRJUlEoZnVuYykKKwlNYWNoaW5lIHNwZWNpZmljIGZ1bmN0aW9uIHRvIGluaXRpYWxpc2UgaW50ZXJydXB0cy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9hcm0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZjcxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9SRUFETUUKQEAgLTAsMCArMSwxOTggQEAKKwkJCSAgIEFSTSBMaW51eCAyLjYKKwkJCSAgID09PT09PT09PT09PT0KKworICAgIFBsZWFzZSBjaGVjayA8ZnRwOi8vZnRwLmFybS5saW51eC5vcmcudWsvcHViL2FybWxpbnV4PiBmb3IKKyAgICB1cGRhdGVzLgorCitDb21waWxhdGlvbiBvZiBrZXJuZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEluIG9yZGVyIHRvIGNvbXBpbGUgQVJNIExpbnV4LCB5b3Ugd2lsbCBuZWVkIGEgY29tcGlsZXIgY2FwYWJsZSBvZgorICBnZW5lcmF0aW5nIEFSTSBFTEYgY29kZSB3aXRoIEdOVSBleHRlbnNpb25zLiAgR0NDIDIuOTUuMSwgRUdDUworICAxLjEuMiwgYW5kIEdDQyAzLjMgYXJlIGtub3duIHRvIGJlIGdvb2QgY29tcGlsZXJzLiAgRm9ydHVuYXRlbHksIHlvdQorICBuZWVkbid0IGd1ZXNzLiAgVGhlIGtlcm5lbCB3aWxsIHJlcG9ydCBhbiBlcnJvciBpZiB5b3VyIGNvbXBpbGVyIGlzCisgIGEgcmVjb2duaXplZCBvZmZlbmRlci4KKworICBUbyBidWlsZCBBUk0gTGludXggbmF0aXZlbHksIHlvdSBzaG91bGRuJ3QgaGF2ZSB0byBhbHRlciB0aGUgQVJDSCA9IGxpbmUKKyAgaW4gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZS4gIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCBoYXZlIHRoZSBBUk0gTGludXggRUxGCisgIHRvb2xzIGluc3RhbGxlZCBhcyBkZWZhdWx0LCB0aGVuIHlvdSBzaG91bGQgY2hhbmdlIHRoZSBDUk9TU19DT01QSUxFCisgIGxpbmUgYXMgZGV0YWlsZWQgYmVsb3cuCisKKyAgSWYgeW91IHdpc2ggdG8gY3Jvc3MtY29tcGlsZSwgdGhlbiBhbHRlciB0aGUgZm9sbG93aW5nIGxpbmVzIGluIHRoZSB0b3AKKyAgbGV2ZWwgbWFrZSBmaWxlOgorCisgICAgQVJDSCA9IDx3aGF0ZXZlcj4KKwl3aXRoCisgICAgQVJDSCA9IGFybQorCisJYW5kCisKKyAgICBDUk9TU19DT01QSUxFPQorCXRvCisgICAgQ1JPU1NfQ09NUElMRT08eW91ci1wYXRoLXRvLXlvdXItY29tcGlsZXItd2l0aG91dC1nY2M+CisJZWcuCisgICAgQ1JPU1NfQ09NUElMRT1hcm0tbGludXgtCisKKyAgRG8gYSAnbWFrZSBjb25maWcnLCBmb2xsb3dlZCBieSAnbWFrZSBJbWFnZScgdG8gYnVpbGQgdGhlIGtlcm5lbCAKKyAgKGFyY2gvYXJtL2Jvb3QvSW1hZ2UpLiAgQSBjb21wcmVzc2VkIGltYWdlIGNhbiBiZSBidWlsdCBieSBkb2luZyBhIAorICAnbWFrZSB6SW1hZ2UnIGluc3RlYWQgb2YgJ21ha2UgSW1hZ2UnLgorCisKK0J1ZyByZXBvcnRzIGV0YworLS0tLS0tLS0tLS0tLS0tCisKKyAgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byB0aGUgcGF0Y2ggc3lzdGVtLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvcGF0Y2hlcy9pbmZvLmh0bWwgIEFsd2F5cyBpbmNsdWRlIHNvbWUKKyAgZXhwbGFuYXRpb24gYXMgdG8gd2hhdCB0aGUgcGF0Y2ggZG9lcyBhbmQgd2h5IGl0IGlzIG5lZWRlZC4KKworICBCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VudCB0byBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWssCisgIG9yIHN1Ym1pdHRlZCB0aHJvdWdoIHRoZSB3ZWIgZm9ybSBhdAorICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZm9ybXMvc29sdXRpb24uc2h0bWwKKworICBXaGVuIHNlbmRpbmcgYnVnIHJlcG9ydHMsIHBsZWFzZSBlbnN1cmUgdGhhdCB0aGV5IGNvbnRhaW4gYWxsIHJlbGV2YW50CisgIGluZm9ybWF0aW9uLCBlZy4gdGhlIGtlcm5lbCBtZXNzYWdlcyB0aGF0IHdlcmUgcHJpbnRlZCBiZWZvcmUvZHVyaW5nCisgIHRoZSBwcm9ibGVtLCB3aGF0IHlvdSB3ZXJlIGRvaW5nLCBldGMuCisKKworSW5jbHVkZSBmaWxlcworLS0tLS0tLS0tLS0tLQorCisgIFNldmVyYWwgbmV3IGluY2x1ZGUgZGlyZWN0b3JpZXMgaGF2ZSBiZWVuIGNyZWF0ZWQgdW5kZXIgaW5jbHVkZS9hc20tYXJtLAorICB3aGljaCBhcmUgdGhlcmUgdG8gcmVkdWNlIHRoZSBjbHV0dGVyIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LiAgVGhlc2UKKyAgZGlyZWN0b3JpZXMsIGFuZCB0aGVpciBwdXJwb3NlIGlzIGxpc3RlZCBiZWxvdzoKKworICAgYXJjaC0qCW1hY2hpbmUvcGxhdGZvcm0gc3BlY2lmaWMgaGVhZGVyIGZpbGVzCisgICBoYXJkd2FyZQlkcml2ZXItaW50ZXJuYWwgQVJNIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcy9kZWZpbml0aW9ucworICAgbWFjaAkJZGVzY3JpcHRpb25zIG9mIGdlbmVyaWMgQVJNIHRvIHNwZWNpZmljIG1hY2hpbmUgaW50ZXJmYWNlcworICAgcHJvYy0qCXByb2Nlc3NvciBkZXBlbmRlbnQgaGVhZGVyIGZpbGVzIChjdXJyZW50bHkgb25seSB0d28KKwkJY2F0ZWdvcmllcykKKworCitNYWNoaW5lL1BsYXRmb3JtIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBBUk0gdHJlZSBjb250YWlucyBzdXBwb3J0IGZvciBhIGxvdCBvZiBkaWZmZXJlbnQgbWFjaGluZSB0eXBlcy4gIFRvCisgIGNvbnRpbnVlIHN1cHBvcnRpbmcgdGhlc2UgZGlmZmVyZW5jZXMsIGl0IGhhcyBiZWNvbWUgbmVjZXNzYXJ5IHRvIHNwbGl0CisgIG1hY2hpbmUtc3BlY2lmaWMgcGFydHMgYnkgZGlyZWN0b3J5LiAgRm9yIHRoaXMsIHRoZSBtYWNoaW5lIGNhdGVnb3J5IGlzCisgIHVzZWQgdG8gc2VsZWN0IHdoaWNoIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBnZXQgaW5jbHVkZWQgKHdlIHdpbGwgdXNlCisgICQoTUFDSElORSkgdG8gcmVmZXIgdG8gdGhlIGNhdGVnb3J5KQorCisgIFRvIHRoaXMgZW5kLCB3ZSBub3cgaGF2ZSBhcmNoL2FybS9tYWNoLSQoTUFDSElORSkgZGlyZWN0b3JpZXMgd2hpY2ggYXJlCisgIGRlc2lnbmVkIHRvIGhvdXNlIHRoZSBub24tZHJpdmVyIGZpbGVzIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSAoZWcsIFBDSSwKKyAgbWVtb3J5IG1hbmFnZW1lbnQsIGFyY2hpdGVjdHVyZSBkZWZpbml0aW9ucyBldGMpLiAgRm9yIGFsbCBmdXR1cmUKKyAgbWFjaGluZXMsIHRoZXJlIHNob3VsZCBiZSBhIGNvcnJlc3BvbmRpbmcgaW5jbHVkZS9hc20tYXJtL2FyY2gtJChNQUNISU5FKQorICBkaXJlY3RvcnkuCisKKworTW9kdWxlcworLS0tLS0tLQorCisgIEFsdGhvdWdoIG1vZHVsYXJpc2F0aW9uIGlzIHN1cHBvcnRlZCAoYW5kIHJlcXVpcmVkIGZvciB0aGUgRlAgZW11bGF0b3IpLAorICBlYWNoIG1vZHVsZSBvbiBhbiBBUk0yL0FSTTI1MC9BUk0zIG1hY2hpbmUgd2hlbiBpcyBsb2FkZWQgd2lsbCB0YWtlCisgIG1lbW9yeSB1cCB0byB0aGUgbmV4dCAzMmsgYm91bmRhcnkgZHVlIHRvIHRoZSBzaXplIG9mIHRoZSBwYWdlcy4KKyAgVGhlcmVmb3JlLCBtb2R1bGFyaXNhdGlvbiBvbiB0aGVzZSBtYWNoaW5lcyByZWFsbHkgd29ydGggaXQ/CisKKyAgSG93ZXZlciwgQVJNNiBhbmQgdXAgbWFjaGluZXMgYWxsb3cgbW9kdWxlcyB0byB0YWtlIG11bHRpcGxlcyBvZiA0aywgYW5kCisgIGFzIHN1Y2ggQWNvcm4gUmlzY1BDcyBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcyB1c2luZyB0aGVzZSBwcm9jZXNzb3JzIGNhbgorICBtYWtlIGdvb2QgdXNlIG9mIG1vZHVsYXJpc2F0aW9uLgorCisKK0FERlMgSW1hZ2UgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworICBZb3UgY2FuIGFjY2VzcyBpbWFnZSBmaWxlcyBvbiB5b3VyIEFERlMgcGFydGl0aW9ucyBieSBtb3VudGluZyB0aGUgQURGUworICBwYXJ0aXRpb24sIGFuZCB0aGVuIHVzaW5nIHRoZSBsb29wYmFjayBkZXZpY2UgZHJpdmVyLiAgWW91IG11c3QgaGF2ZQorICBsb3NldHVwIGluc3RhbGxlZC4KKworICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBQQ0VtdWxhdG9yIERPUyBwYXJ0aXRpb25zIGhhdmUgYSBwYXJ0aXRpb24gdGFibGUgYXQKKyAgdGhlIHN0YXJ0LCBhbmQgYXMgc3VjaCwgeW91IHdpbGwgaGF2ZSB0byBnaXZlICctbyBvZmZzZXQnIHRvIGxvc2V0dXAuCisKKworUmVxdWVzdCB0byBkZXZlbG9wZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBXaGVuIHdyaXRpbmcgZGV2aWNlIGRyaXZlcnMgd2hpY2ggaW5jbHVkZSBhIHNlcGFyYXRlIGFzc2VtYmxlciBmaWxlLCBwbGVhc2UKKyAgaW5jbHVkZSBpdCBpbiB3aXRoIHRoZSBDIGZpbGUsIGFuZCBub3QgdGhlIGFyY2gvYXJtL2xpYiBkaXJlY3RvcnkuICBUaGlzCisgIGFsbG93cyB0aGUgZHJpdmVyIHRvIGJlIGNvbXBpbGVkIGFzIGEgbG9hZGFibGUgbW9kdWxlIHdpdGhvdXQgcmVxdWlyaW5nCisgIGhhbGYgdGhlIGNvZGUgdG8gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGltYWdlLgorCisgIEluIGdlbmVyYWwsIHRyeSB0byBhdm9pZCB1c2luZyBhc3NlbWJsZXIgdW5sZXNzIGl0IGlzIHJlYWxseSBuZWNlc3NhcnkuICBJdAorICBtYWtlcyBkcml2ZXJzIGZhciBsZXNzIGVhc3kgdG8gcG9ydCB0byBvdGhlciBoYXJkd2FyZS4KKworCitTVDUwNiBoYXJkIGRyaXZlcworLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgU1Q1MDYgaGFyZCBkcml2ZSBjb250cm9sbGVycyBzZWVtIHRvIGJlIHdvcmtpbmcgZmluZSAoaWYgYSBsaXR0bGUKKyAgc2xvd2x5KS4gIEF0IHRoZSBtb21lbnQgdGhleSB3aWxsIG9ubHkgd29yayBvZmYgdGhlIGNvbnRyb2xsZXJzIG9uIGFuCisgIEE0eDAncyBtb3RoZXJib2FyZCwgYnV0IGZvciBpdCB0byB3b3JrIG9mZiBhIFBvZHVsZSBqdXN0IHJlcXVpcmVzCisgIHNvbWVvbmUgd2l0aCBhIHBvZHVsZSB0byBhZGQgdGhlIGFkZHJlc3NlcyBmb3IgdGhlIElSUSBtYXNrIGFuZCB0aGUKKyAgSERDIGJhc2UgdG8gdGhlIHNvdXJjZS4KKworICBBcyBvZiAzMS8zLzk2IGl0IHdvcmtzIHdpdGggdHdvIGRyaXZlcyAoeW91IHNob3VsZCBnZXQgdGhlIEFERlMKKyAgKmNvbmZpZ3VyZSBoYXJkZHJpdmUgc2V0IHRvIDIpLiBJJ3ZlIGdvdCBhbiBpbnRlcm5hbCAyME1CIGFuZCBhIGdyZWF0CisgIGJpZyBleHRlcm5hbCA1LjI1IiBGSCA2NE1CIGRyaXZlICh3aG8gY291bGQgZXZlciB3YW50IG1vcmUgOi0pICkuCisKKyAgSSd2ZSBqdXN0IGdvdCAyNDBLL3Mgb2ZmIGl0IChhIGRkIHdpdGggYnM9MTI4ayk7IHRoYXRzIGFib3V0IGhhbGYgb2Ygd2hhdAorICBSaXNjT1MgZ2V0czsgYnV0IGl0J3MgYSBoZWNrIG9mIGEgbG90IGJldHRlciB0aGFuIHRoZSA1MEsvcyBJIHdhcyBnZXR0aW5nCisgIGxhc3Qgd2VlayA6LSkKKworICBLbm93biBidWc6IERyaXZlIGRhdGEgZXJyb3JzIGNhbiBjYXVzZSBhIGhhbmc7IGluY2x1ZGluZyBjYXNlcyB3aGVyZQorICB0aGUgY29udHJvbGxlciBoYXMgZml4ZWQgdGhlIGVycm9yIHVzaW5nIEVDQy4gKFBvc3NpYmx5IE9OTFkKKyAgaW4gdGhhdCBjYXNlLi4uaG1tKS4KKworCisxNzcyIEZsb3BweQorLS0tLS0tLS0tLS0KKyAgVGhpcyBhbHNvIHNlZW1zIHRvIHdvcmsgT0ssIGJ1dCBoYXNuJ3QgYmVlbiBzdHJlc3NlZCBtdWNoIGxhdGVseS4gIEl0CisgIGhhc24ndCBnb3QgYW55IGNvZGUgZm9yIGRpc2MgY2hhbmdlIGRldGVjdGlvbiBpbiB0aGVyZSBhdCB0aGUgbW9tZW50IHdoaWNoCisgIGNvdWxkIGJlIGEgYml0IG9mIGEgcHJvYmxlbSEgIFN1Z2dlc3Rpb25zIG9uIHRoZSBjb3JyZWN0IHdheSB0byBkbyB0aGlzCisgIGFyZSB3ZWxjb21lLgorCisKK0NPTkZJR19NQUNIXyBhbmQgQ09ORklHX0FSQ0hfCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBIGNoYW5nZSB3YXMgbWFkZSBpbiAyMDAzIHRvIHRoZSBtYWNybyBuYW1lcyBmb3IgbmV3IG1hY2hpbmVzLgorICBIaXN0b3JpY2FsbHksIENPTkZJR19BUkNIXyB3YXMgdXNlZCBmb3IgdGhlIGJvbmFmaWRlIGFyY2hpdGVjdHVyZSwKKyAgZS5nLiBTQTExMDAsIGFzIHdlbGwgYXMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBhcmNoaXRlY3R1cmUsCisgIGUuZy4gQXNzYWJldC4gIEl0IHdhcyBkZWNpZGVkIHRvIGNoYW5nZSB0aGUgaW1wbGVtZW50YXRpb24gbWFjcm9zCisgIHRvIHJlYWQgQ09ORklHX01BQ0hfIGZvciBjbGFyaXR5LiAgTW9yZW92ZXIsIGEgcmV0cm9hY3RpdmUgZml4dXAgaGFzCisgIG5vdCBiZWVuIG1hZGUgYmVjYXVzZSBpdCB3b3VsZCBjb21wbGljYXRlIHBhdGNoaW5nLgorCisgIFByZXZpb3VzIHJlZ2lzdHJhdGlvbnMgbWF5IGJlIGZvdW5kIG9ubGluZS4KKworICAgIDxodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz4KKworS2VybmVsIGVudHJ5IChoZWFkLlMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGUgaW5pdGlhbCBlbnRyeSBpbnRvIHRoZSBrZXJuZWwgaXMgdmlhIGhlYWQuUywgd2hpY2ggdXNlcyBtYWNoaW5lCisgIGluZGVwZW5kZW50IGNvZGUuICBUaGUgbWFjaGluZSBpcyBzZWxlY3RlZCBieSB0aGUgdmFsdWUgb2YgJ3IxJyBvbgorICBlbnRyeSwgd2hpY2ggbXVzdCBiZSBrZXB0IHVuaXF1ZS4KKworICBEdWUgdG8gdGhlIGxhcmdlIG51bWJlciBvZiBtYWNoaW5lcyB3aGljaCB0aGUgQVJNIHBvcnQgb2YgTGludXggcHJvdmlkZXMKKyAgZm9yLCB3ZSBoYXZlIGEgbWV0aG9kIHRvIG1hbmFnZSB0aGlzIHdoaWNoIGVuc3VyZXMgdGhhdCB3ZSBkb24ndCBlbmQgdXAKKyAgZHVwbGljYXRpbmcgbGFyZ2UgYW1vdW50cyBvZiBjb2RlLgorCisgIFdlIGdyb3VwIG1hY2hpbmUgKG9yIHBsYXRmb3JtKSBzdXBwb3J0IGNvZGUgaW50byBtYWNoaW5lIGNsYXNzZXMuICBBCisgIGNsYXNzIHR5cGljYWxseSBiYXNlZCBhcm91bmQgb25lIG9yIG1vcmUgc3lzdGVtIG9uIGEgY2hpcCBkZXZpY2VzLCBhbmQKKyAgYWN0cyBhcyBhIG5hdHVyYWwgY29udGFpbmVyIGFyb3VuZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucy4gIFRoZXNlCisgIGNsYXNzZXMgYXJlIGdpdmVuIGRpcmVjdG9yaWVzIC0gYXJjaC9hcm0vbWFjaC08Y2xhc3M+IGFuZAorICBpbmNsdWRlL2FzbS1hcm0vYXJjaC08Y2xhc3M+IC0gd2hpY2ggY29udGFpbiB0aGUgc291cmNlIGZpbGVzIHRvCisgIHN1cHBvcnQgdGhlIG1hY2hpbmUgY2xhc3MuICBUaGlzIGRpcmVjdG9yaWVzIGFsc28gY29udGFpbiBhbnkgbWFjaGluZQorICBzcGVjaWZpYyBzdXBwb3J0aW5nIGNvZGUuCisKKyAgRm9yIGV4YW1wbGUsIHRoZSBTQTExMDAgY2xhc3MgaXMgYmFzZWQgdXBvbiB0aGUgU0ExMTAwIGFuZCBTQTExMTAgU29DCisgIGRldmljZXMsIGFuZCBjb250YWlucyB0aGUgY29kZSB0byBzdXBwb3J0IHRoZSB3YXkgdGhlIG9uLWJvYXJkIGFuZCBvZmYtCisgIGJvYXJkIGRldmljZXMgYXJlIHVzZWQsIG9yIHRoZSBkZXZpY2UgaXMgc2V0dXAsIGFuZCBwcm92aWRlcyB0aGF0CisgIG1hY2hpbmUgc3BlY2lmaWMgInBlcnNvbmFsaXR5LiIKKworICBUaGlzIGZpbmUtZ3JhaW5lZCBtYWNoaW5lIHNwZWNpZmljIHNlbGVjdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBtYWNoaW5lCisgIHR5cGUgSUQsIHdoaWNoIGFjdHMgYm90aCBhcyBhIHJ1bi10aW1lIGFuZCBhIGNvbXBpbGUtdGltZSBjb2RlIHNlbGVjdGlvbgorICBtZXRob2QuCisKKyAgWW91IGNhbiByZWdpc3RlciBhIG5ldyBtYWNoaW5lIHZpYSB0aGUgd2ViIHNpdGUgYXQ6CisKKyAgICA8aHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8+CisKKy0tLQorUnVzc2VsbCBLaW5nICgxNS8wMy8yMDA0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0FEU0JpdHN5IGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0FEU0JpdHN5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDdjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQURTQml0c3kKQEAgLTAsMCArMSw0MyBAQAorQURTIEJpdHN5IFNpbmdsZSBCb2FyZCBDb21wdXRlcgorKEl0IGlzIGRpZmZlcmVudCBmcm9tIEJpdHN5KGlQQVEpIG9mIENvbXBhcSkKKworRm9yIG1vcmUgZGV0YWlscywgY29udGFjdCBBcHBsaWVkIERhdGEgU3lzdGVtcyBvciBzZWUKK2h0dHA6Ly93d3cuYXBwbGllZGRhdGEubmV0L3Byb2R1Y3RzLmh0bWwKKworVGhlIExpbnV4IHN1cHBvcnQgZm9yIHRoaXMgcHJvZHVjdCBoYXMgYmVlbiBwcm92aWRlZCBieQorV29vanVuZyBIdWggPHdodWhAYXBwbGllZGRhdGEubmV0PgorCitVc2UgJ21ha2UgYWRzYml0c3lfY29uZmlnJyBiZWZvcmUgYW55ICdtYWtlIGNvbmZpZycuCitUaGlzIHdpbGwgc2V0IHVwIGRlZmF1bHRzIGZvciBBRFMgQml0c3kgc3VwcG9ydC4KKworVGhlIGtlcm5lbCB6SW1hZ2UgaXMgbGlua2VkIHRvIGJlIGxvYWRlZCBhbmQgZXhlY3V0ZWQgYXQgMHhjMDQwMDAwMC4KKworTGludXggY2FuICBiZSB1c2VkIHdpdGggdGhlIEFEUyBCb290TG9hZGVyIHRoYXQgc2hpcHMgd2l0aCB0aGUKK25ld2VyIHJldiBib2FyZHMuIFNlZSB0aGVpciBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBsb2FkIExpbnV4LgorCitTdXBwb3J0ZWQgcGVyaXBoZXJhbHM6CistIFNBMTEwMCBMQ0QgZnJhbWUgYnVmZmVyICg4LzE2YnBwLi4uc29ydCBvZikKKy0gU0ExMTExIFVTQiBNYXN0ZXIKKy0gU0ExMTAwIHNlcmlhbCBwb3J0CistIHBjbWNpYSwgY29tcGFjdCBmbGFzaAorLSB0b3VjaHNjcmVlbih1Y2IxMjAwKQorLSBjb25zb2xlIG9uIExDRCBzY3JlZW4KKy0gc2VyaWFsIHBvcnRzICh0dHlTWzAtMl0pCisgIC0gdHR5UzAgaXMgZGVmYXVsdCBmb3Igc2VyaWFsIGNvbnNvbGUKKworVG8gZG86CistIGV2ZXJ5dGhpbmcgZWxzZSEgIDotKQorCitOb3RlczoKKworLSBUaGUgZmxhc2ggb24gYm9hcmQgaXMgZGl2aWRlZCBpbnRvIDMgcGFydGl0aW9ucy4KKyAgWW91IHNob3VsZCBiZSBjYXJlZnVsIHRvIHVzZSBmbGFzaCBvbiBib2FyZC4KKyAgSXQncyBwYXJ0aXRpb24gaXMgZGlmZmVyZW50IGZyb20gR3JhcGhpY3NDbGllbnQgUGx1cyBhbmQgR3JhcGhpY3NNYXN0ZXIKKworLSAxNmJwcCBtb2RlIHJlcXVpcmVzIGEgZGlmZmVyZW50IGNhYmxlIHRoYW4gd2hhdCBzaGlwcyB3aXRoIHRoZSBib2FyZC4KKyAgQ29udGFjdCBBRFMgb3IgbG9vayB0aHJvdWdoIHRoZSBtYW51YWwgdG8gd2lyZSB5b3VyIG93bi4gQ3VycmVudGx5LAorICBpZiB5b3UgY29tcGlsZSB3aXRoIDE2Yml0IG1vZGUgc3VwcG9ydCBhbmQgc3dpdGNoIGludG8gYSBsb3dlciBicHAKKyAgbW9kZSwgdGhlIHRpbWluZyBpcyBvZmYgc28gdGhlIGltYWdlIGlzIGNvcnJ1cHRlZC4gIFRoaXMgd2lsbCBiZQorICBmaXhlZCBzb29uLgorCitBbnkgY29udHJpYnV0aW9uIGNhbiBiZSBzZW50IHRvIG5pY29AY2FtLm9yZyBhbmQgd2lsbCBiZSBncmVhdGx5IHdlbGNvbWUhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQXNzYWJldCBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9Bc3NhYmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYmU1NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQXNzYWJldApAQCAtMCwwICsxLDMwMSBAQAorVGhlIEludGVsIEFzc2FiZXQgKFNBLTExMTAgZXZhbHVhdGlvbikgYm9hcmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BsZWFzZSBzZWU6CitodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vc3Ryb25nL3F1aWNrbGlzdC9ldmFsLXBsYXQvc2EtMTExMC5odG0KK2h0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9zdHJvbmcvZ3VpZGVzLzI3ODI3OC5odG0KKworQWxzbyBzb21lIG5vdGVzIGZyb20gSm9obiBHIERvcnNleSA8amQ1cUBhbmRyZXcuY211LmVkdT46CitodHRwOi8vd3d3LmNzLmNtdS5lZHUvfndlYXJhYmxlL3NvZnR3YXJlL2Fzc2FiZXQuaHRtbAorCisKK0J1aWxkaW5nIHRoZSBrZXJuZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gYnVpbGQgdGhlIGtlcm5lbCB3aXRoIGN1cnJlbnQgZGVmYXVsdHM6CisKKwltYWtlIGFzc2FiZXRfY29uZmlnCisJbWFrZSBvbGRjb25maWcKKwltYWtlIHpJbWFnZQorCitUaGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBzaG91bGQgYmUgYXZhaWxhYmxlIGluIGxpbnV4L2FyY2gvYXJtL2Jvb3QvekltYWdlLgorCisKK0luc3RhbGxpbmcgYSBib290bG9hZGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGNvdXBsZSBvZiBib290bG9hZGVycyBhYmxlIHRvIGJvb3QgTGludXggb24gQXNzYWJldCBhcmUgYXZhaWxhYmxlOgorCitCTE9CIChodHRwOi8vd3d3LmxhcnQudHVkZWxmdC5ubC9sYXJ0d2FyZS9ibG9iLykKKworICAgQkxPQiBpcyBhIGJvb3Rsb2FkZXIgdXNlZCB3aXRoaW4gdGhlIExBUlQgcHJvamVjdC4gIFNvbWUgY29udHJpYnV0ZWQKKyAgIHBhdGNoZXMgd2VyZSBtZXJnZWQgaW50byBCTE9CIHRvIGFkZCBzdXBwb3J0IGZvciBBc3NhYmV0LgorCitDb21wYXEncyBCb290bGRyICsgSm9obiBEb3JzZXkncyBwYXRjaCBmb3IgQXNzYWJldCBzdXBwb3J0CisoaHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL0NvbXBhcS9ib290bGRyLmh0bWwpCisoaHR0cDovL3d3dy53ZWFyYWJsZWdyb3VwLm9yZy9zb2Z0d2FyZS9ib290bGRyLykKKworICAgQm9vdGxkciBpcyB0aGUgYm9vdGxvYWRlciBkZXZlbG9wZWQgYnkgQ29tcGFxIGZvciB0aGUgaVBBUSBQb2NrZXQgUEMuCisgICBKb2huIERvcnNleSBoYXMgcHJvZHVjZWQgYWRkLW9uIHBhdGNoZXMgdG8gYWRkIHN1cHBvcnQgZm9yIEFzc2FiZXQgYW5kCisgICB0aGUgSkZGUyBmaWxlc3lzdGVtLgorCitSZWRCb290IChodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL3JlZGJvb3QvKQorCisgICBSZWRCb290IGlzIGEgYm9vdGxvYWRlciBkZXZlbG9wZWQgYnkgUmVkIEhhdCBiYXNlZCBvbiB0aGUgZUNvcyBSVE9TCisgICBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllci4gIEl0IHN1cHBvcnRzIEFzc2FiZXQgYW1vbmdzdCBtYW55IG90aGVyCisgICBoYXJkd2FyZSBwbGF0Zm9ybXMuCisKK1JlZEJvb3QgaXMgY3VycmVudGx5IHRoZSByZWNvbW1lbmRlZCBjaG9pY2Ugc2luY2UgaXQncyB0aGUgb25seSBvbmUgdG8gaGF2ZQorbmV0d29ya2luZyBzdXBwb3J0LCBhbmQgaXMgdGhlIG1vc3QgYWN0aXZlbHkgbWFpbnRhaW5lZC4KKworQnJpZWYgZXhhbXBsZXMgb24gaG93IHRvIGJvb3QgTGludXggd2l0aCBSZWRCb290IGFyZSBzaG93biBiZWxvdy4gIEJ1dCBmaXJzdAoreW91IG5lZWQgdG8gaGF2ZSBSZWRCb290IGluc3RhbGxlZCBpbiB5b3VyIGZsYXNoIG1lbW9yeS4gIEEga25vd24gdG8gd29yaworcHJlY29tcGlsZWQgUmVkQm9vdCBiaW5hcnkgaXMgYXZhaWxhYmxlIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbjoKKworZnRwOi8vZnRwLm5ldHdpbmRlci5vcmcvdXNlcnMvbi9uaWNvLworZnRwOi8vZnRwLmFybS5saW51eC5vcmcudWsvcHViL2xpbnV4L2FybS9wZW9wbGUvbmljby8KK2Z0cDovL2Z0cC5oYW5kaGVsZHMub3JnL3B1Yi9saW51eC9hcm0vc2EtMTEwMC1wYXRjaGVzLworCitMb29rIGZvciByZWRib290LWFzc2FiZXQqLnRnei4gIFNvbWUgaW5zdGFsbGF0aW9uIGluZm9zIGFyZSBwcm92aWRlZCBpbgorcmVkYm9vdC1hc3NhYmV0Ki50eHQuCisKKworSW5pdGlhbCBSZWRCb290IGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kcyB1c2VkIGhlcmUgYXJlIGV4cGxhaW5lZCBpbiBUaGUgUmVkQm9vdCBVc2VyJ3MgR3VpZGUgYXZhaWxhYmxlCitvbi1saW5lIGF0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9kb2NzLWxhdGVzdC9yZWRib290L3JlZGJvb3QuaHRtbC4KK1BsZWFzZSByZWZlciB0byBpdCBmb3IgZXhwbGFuYXRpb25zLgorCitJZiB5b3UgaGF2ZSBhIENGIG5ldHdvcmsgY2FyZCAobXkgQXNzYWJldCBraXQgY29udGFpbmVkIGEgQ0YrIExQLUUgZnJvbQorU29ja2V0IENvbW11bmljYXRpb25zIEluYy4pLCB5b3Ugc2hvdWxkIHN0cm9uZ2x5IGNvbnNpZGVyIHVzaW5nIGl0IGZvciBURlRQCitmaWxlIHRyYW5zZmVycy4gIFlvdSBtdXN0IGluc2VydCBpdCBiZWZvcmUgUmVkQm9vdCBydW5zIHNpbmNlIGl0IGNhbid0IGRldGVjdAoraXQgZHluYW1pY2FsbHkuCisKK1RvIGluaXRpYWxpemUgdGhlIGZsYXNoIGRpcmVjdG9yeToKKworCWZpcyBpbml0IC1mCisKK1RvIGluaXRpYWxpemUgdGhlIG5vbi12b2xhdGlsZSBzZXR0aW5ncywgbGlrZSB3aGV0aGVyIHlvdSB3YW50IHRvIHVzZSBCT09UUCBvcgorYSBzdGF0aWMgSVAgYWRkcmVzcywgZXRjLCB1c2UgdGhpcyBjb21tYW5kOgorCisJZmNvbmZpZyAtaQorCisKK1dyaXRpbmcgYSBrZXJuZWwgaW1hZ2UgaW50byBmbGFzaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0LCB0aGUga2VybmVsIGltYWdlIG11c3QgYmUgbG9hZGVkIGludG8gUkFNLiAgSWYgeW91IGhhdmUgdGhlIHpJbWFnZSBmaWxlCithdmFpbGFibGUgb24gYSBURlRQIHNlcnZlcjoKKworCWxvYWQgekltYWdlIC1yIC1iIDB4MTAwMDAwCisKK0lmIHlvdSByYXRoZXIgd2FudCB0byB1c2UgWS1Nb2RlbSB1cGxvYWQgb3ZlciB0aGUgc2VyaWFsIHBvcnQ6CisKKwlsb2FkIC1tIHltb2RlbSAtciAtYiAweDEwMDAwMAorCitUbyB3cml0ZSBpdCB0byBmbGFzaDoKKworCWZpcyBjcmVhdGUgIkxpbnV4IGtlcm5lbCIgLWIgMHgxMDAwMDAgLWwgMHhjMDAwMAorCisKK0Jvb3RpbmcgdGhlIGtlcm5lbAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBrZXJuZWwgc3RpbGwgcmVxdWlyZXMgYSBmaWxlc3lzdGVtIHRvIGJvb3QuICBBIHJhbWRpc2sgaW1hZ2UgY2FuIGJlIGxvYWRlZAorYXMgZm9sbG93czoKKworCWxvYWQgcmFtZGlza19pbWFnZS5neiAtciAtYiAweDgwMDAwMAorCitBZ2FpbiwgWS1Nb2RlbSB1cGxvYWQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBURlRQIGJ5IHJlcGxhY2luZyB0aGUgZmlsZSBuYW1lCitieSAnLXkgeW1vZGVtJy4KKworTm93IHRoZSBrZXJuZWwgY2FuIGJlIHJldHJpZXZlZCBmcm9tIGZsYXNoIGxpa2UgdGhpczoKKworCWZpcyBsb2FkICJMaW51eCBrZXJuZWwiCisKK29yIGxvYWRlZCBhcyBkZXNjcmliZWQgcHJldmlvdXNseS4gIFRvIGJvb3QgdGhlIGtlcm5lbDoKKworCWV4ZWMgLWIgMHgxMDAwMDAgLWwgMHhjMDAwMAorCitUaGUgcmFtZGlzayBpbWFnZSBjb3VsZCBiZSBzdG9yZWQgaW50byBmbGFzaCBhcyB3ZWxsLCBidXQgdGhlcmUgYXJlIGJldHRlcgorc29sdXRpb25zIGZvciBvbi1mbGFzaCBmaWxlc3lzdGVtcyBhcyBtZW50aW9uZWQgYmVsb3cuCisKKworVXNpbmcgSkZGUzIKKy0tLS0tLS0tLS0tCisKK1VzaW5nIEpGRlMyICh0aGUgU2Vjb25kIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtKSBpcyBwcm9iYWJseSB0aGUgbW9zdAorY29udmVuaWVudCB3YXkgdG8gc3RvcmUgYSB3cml0YWJsZSBmaWxlc3lzdGVtIGludG8gZmxhc2guICBKRkZTMiBpcyB1c2VkIGluCitjb25qdW5jdGlvbiB3aXRoIHRoZSBNVEQgbGF5ZXIgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGxvdy1sZXZlbCBmbGFzaAorbWFuYWdlbWVudC4gIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIExpbnV4IE1URCBjYW4gYmUgZm91bmQgb24tbGluZSBhdDoKK2h0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvLiAgQSBKRkZTIGhvd3RvIHdpdGggc29tZSBpbmZvcyBhYm91dAorY3JlYXRpbmcgSkZGUy9KRkZTMiBpbWFnZXMgaXMgYXZhaWxhYmxlIGZyb20gdGhlIHNhbWUgc2l0ZS4KKworRm9yIGluc3RhbmNlLCBhIHNhbXBsZSBKRkZTMiBpbWFnZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHNhbWUgRlRQIHNpdGVzCittZW50aW9uZWQgYmVsb3cgZm9yIHRoZSBwcmVjb21waWxlZCBSZWRCb290IGltYWdlLgorCitUbyBsb2FkIHRoaXMgZmlsZToKKworCWxvYWQgc2FtcGxlX2ltZy5qZmZzMiAtciAtYiAweDEwMDAwMAorCitUaGUgcmVzdWx0IHNob3VsZCBsb29rIGxpa2U6CisKK1JlZEJvb3Q+IGxvYWQgc2FtcGxlX2ltZy5qZmZzMiAtciAtYiAweDEwMDAwMAorUmF3IGZpbGUgbG9hZGVkIDB4MDAxMDAwMDAtMHgwMDM3NzQyNAorCitOb3cgd2UgbXVzdCBrbm93IHRoZSBzaXplIG9mIHRoZSB1bmFsbG9jYXRlZCBmbGFzaDoKKworCWZpcyBmcmVlCisKK1Jlc3VsdDoKKworUmVkQm9vdD4gZmlzIGZyZWUKKyAgMHg1MDBFMDAwMCAuLiAweDUwM0MwMDAwCisKK1RoZSB2YWx1ZXMgYWJvdmUgbWF5IGJlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kCit0aGUgdHlwZSBvZiBmbGFzaC4gIFNlZSB0aGVpciB1c2FnZSBiZWxvdyBhcyBhbiBleGFtcGxlIGFuZCB0YWtlIGNhcmUgb2YKK3N1YnN0aXR1dGluZyB5b3VycyBhcHByb3ByaWF0ZWx5LgorCitXZSBtdXN0IGRldGVybWluZSBzb21lIHZhbHVlczoKKworc2l6ZSBvZiB1bmFsbG9jYXRlZCBmbGFzaDoJMHg1MDNjMDAwMCAtIDB4NTAwZTAwMDAgPSAweDJlMDAwMAorc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSBpbWFnZToJMHgwMDM3NzQyNCAtIDB4MDAxMDAwMDAgPSAweDI3NzQyNAorCitXZSB3YW50IHRvIGZpdCB0aGUgZmlsZXN5c3RlbSBpbWFnZSBvZiBjb3Vyc2UsIGJ1dCB3ZSBhbHNvIHdhbnQgdG8gZ2l2ZSBpdCBhbGwKK3RoZSByZW1haW5pbmcgZmxhc2ggc3BhY2UgYXMgd2VsbC4gIFRvIHdyaXRlIGl0OgorCisJZmlzIHVubG9jayAtZiAweDUwMEUwMDAwIC1sIDB4MmUwMDAwCisJZmlzIGVyYXNlIC1mIDB4NTAwRTAwMDAgLWwgMHgyZTAwMDAKKwlmaXMgd3JpdGUgLWIgMHgxMDAwMDAgLWwgMHgyNzc0MjQgLWYgMHg1MDBFMDAwMAorCWZpcyBjcmVhdGUgIkpGRlMyIiAtbiAtZiAweDUwMEUwMDAwIC1sIDB4MmUwMDAwCisKK05vdyB0aGUgZmlsZXN5c3RlbSBpcyBhc3NvY2lhdGVkIHRvIGEgTVREICJwYXJ0aXRpb24iIG9uY2UgTGludXggaGFzIGRpc2NvdmVyZWQKK3doYXQgdGhleSBhcmUgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gIEZyb20gUmVkYm9vdCwgdGhlICdmaXMgbGlzdCcgY29tbWFuZAorZGlzcGxheXMgdGhlbToKKworUmVkQm9vdD4gZmlzIGxpc3QKK05hbWUgICAgICAgICAgICAgIEZMQVNIIGFkZHIgIE1lbSBhZGRyICAgIExlbmd0aCAgICAgIEVudHJ5IHBvaW50CitSZWRCb290ICAgICAgICAgICAweDUwMDAwMDAwICAweDUwMDAwMDAwICAweDAwMDIwMDAwICAweDAwMDAwMDAwCitSZWRCb290IGNvbmZpZyAgICAweDUwM0MwMDAwICAweDUwM0MwMDAwICAweDAwMDIwMDAwICAweDAwMDAwMDAwCitGSVMgZGlyZWN0b3J5ICAgICAweDUwM0UwMDAwICAweDUwM0UwMDAwICAweDAwMDIwMDAwICAweDAwMDAwMDAwCitMaW51eCBrZXJuZWwgICAgICAweDUwMDIwMDAwICAweDAwMTAwMDAwICAweDAwMEMwMDAwICAweDAwMDAwMDAwCitKRkZTMiAgICAgICAgICAgICAweDUwMEUwMDAwICAweDUwMEUwMDAwICAweDAwMkUwMDAwICAweDAwMDAwMDAwCisKK0hvd2V2ZXIgTGludXggc2hvdWxkIGRpc3BsYXkgc29tZXRoaW5nIGxpa2U6CisKK1NBMTEwMCBmbGFzaDogcHJvYmluZyAzMi1iaXQgZmxhc2ggYnVzCitTQTExMDAgZmxhc2g6IEZvdW5kIDIgeDE2IGRldmljZXMgYXQgMHgwIGluIDMyLWJpdCBtb2RlCitVc2luZyBSZWRCb290IHBhcnRpdGlvbiBkZWZpbml0aW9uCitDcmVhdGluZyA1IE1URCBwYXJ0aXRpb25zIG9uICJTQTExMDAgZmxhc2giOgorMHgwMDAwMDAwMC0weDAwMDIwMDAwIDogIlJlZEJvb3QiCisweDAwMDIwMDAwLTB4MDAwZTAwMDAgOiAiTGludXgga2VybmVsIgorMHgwMDBlMDAwMC0weDAwM2MwMDAwIDogIkpGRlMyIgorMHgwMDNjMDAwMC0weDAwM2UwMDAwIDogIlJlZEJvb3QgY29uZmlnIgorMHgwMDNlMDAwMC0weDAwNDAwMDAwIDogIkZJUyBkaXJlY3RvcnkiCisKK1doYXQncyBpbXBvcnRhbnQgaGVyZSBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBhcnRpdGlvbiB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwKK3doaWNoIGlzIHRoZSB0aGlyZCBvbmUuICBXaXRoaW4gTGludXgsIHRoaXMgY29ycmVzcG9uZCB0byAvZGV2L210ZGJsb2NrMi4KK1RoZXJlZm9yZSB0byBib290IExpbnV4IHdpdGggdGhlIGtlcm5lbCBhbmQgaXRzIHJvb3QgZmlsZXN5c3RlbSBpbiBmbGFzaCwgd2UKK25lZWQgdGhpcyBSZWRCb290IGNvbW1hbmQ6CisKKwlmaXMgbG9hZCAiTGludXgga2VybmVsIgorCWV4ZWMgLWIgMHgxMDAwMDAgLWwgMHhjMDAwMCAtYyAicm9vdD0vZGV2L210ZGJsb2NrMiIKKworT2YgY291cnNlIG90aGVyIGZpbGVzeXN0ZW1zIHRoYW4gSkZGUyBtaWdodCBiZSB1c2VkLCBsaWtlIGNyYW1mcyBmb3IgZXhhbXBsZS4KK1lvdSBtaWdodCB3YW50IHRvIGJvb3Qgd2l0aCBhIHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUywgZXRjLiAgSXQgaXMgYWxzbworcG9zc2libGUsIGFuZCBzb21ldGltZXMgbW9yZSBjb252ZW5pZW50LCB0byBmbGFzaCBhIGZpbGVzeXN0ZW0gZGlyZWN0bHkgZnJvbQord2l0aGluIExpbnV4IHdoaWxlIGJvb3RlZCBmcm9tIGEgcmFtZGlzayBvciBORlMuICBUaGUgTGludXggTVREIHJlcG9zaXRvcnkgaGFzCittYW55IHRvb2xzIHRvIGRlYWwgd2l0aCBmbGFzaCBtZW1vcnkgYXMgd2VsbCwgdG8gZXJhc2UgaXQgZm9yIGV4YW1wbGUuICBKRkZTMgorY2FuIHRoZW4gYmUgbW91bnRlZCBkaXJlY3RseSBvbiBhIGZyZXNobHkgZXJhc2VkIHBhcnRpdGlvbiBhbmQgZmlsZXMgY2FuIGJlCitjb3BpZWQgb3ZlciBkaXJlY3RseS4gIEV0Yy4uLgorCisKK1JlZEJvb3Qgc2NyaXB0aW5nCistLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgdGhlIGNvbW1hbmRzIGFib3ZlIGFyZW4ndCBzbyB1c2VmdWwgaWYgdGhleSBoYXZlIHRvIGJlIHR5cGVkIGluIGV2ZXJ5Cit0aW1lIHRoZSBBc3NhYmV0IGlzIHJlYm9vdGVkLiAgVGhlcmVmb3JlIGl0J3MgcG9zc2libGUgdG8gYXV0b21hdGl6ZSB0aGUgYm9vdAorcHJvY2VzcyB1c2luZyBSZWRCb290J3Mgc2NyaXB0aW5nIGNhcGFiaWxpdHkuCisKK0ZvciBleGFtcGxlLCBJIHVzZSB0aGlzIHRvIGJvb3QgTGludXggd2l0aCBib3RoIHRoZSBrZXJuZWwgYW5kIHRoZSByYW1kaXNrCitpbWFnZXMgcmV0cmlldmVkIGZyb20gYSBURlRQIHNlcnZlciBvbiB0aGUgbmV0d29yazoKKworUmVkQm9vdD4gZmNvbmZpZworUnVuIHNjcmlwdCBhdCBib290OiBmYWxzZSB0cnVlCitCb290IHNjcmlwdDoKK0VudGVyIHNjcmlwdCwgdGVybWluYXRlIHdpdGggZW1wdHkgbGluZQorPj4gbG9hZCB6SW1hZ2UgLXIgLWIgMHgxMDAwMDAKKz4+IGxvYWQgcmFtZGlza19rcy5neiAtciAtYiAweDgwMDAwMAorPj4gZXhlYyAtYiAweDEwMDAwMCAtbCAweGMwMDAwCis+PgorQm9vdCBzY3JpcHQgdGltZW91dCAoMTAwMG1zIHJlc29sdXRpb24pOiAzCitVc2UgQk9PVFAgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbjogdHJ1ZQorR0RCIGNvbm5lY3Rpb24gcG9ydDogOTAwMAorTmV0d29yayBkZWJ1ZyBhdCBib290IHRpbWU6IGZhbHNlCitVcGRhdGUgUmVkQm9vdCBub24tdm9sYXRpbGUgY29uZmlndXJhdGlvbiAtIGFyZSB5b3Ugc3VyZSAoeS9uKT8geQorCitUaGVuLCByZWJvb3RpbmcgdGhlIEFzc2FiZXQgaXMganVzdCBhIG1hdHRlciBvZiB3YWl0aW5nIGZvciB0aGUgbG9naW4gcHJvbXB0LgorCisKKworTmljb2xhcyBQaXRyZQorbmljb0BjYW0ub3JnCitKdW5lIDEyLCAyMDAxCisKKworU3RhdHVzIG9mIHBlcmlwaGVyYWxzIGluIC1ybWsgdHJlZSAodXBkYXRlZCAxNC8xMC8yMDAxKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBc3NhYmV0OgorIFNlcmlhbCBwb3J0czoKKyAgUmFkaW86CQlUWCwgUlgsIENUUywgRFNSLCBEQ0QsIFJJCisgICBQTToJCQlOb3QgdGVzdGVkLgorICBDT006CQkJVFgsIFJYLCBDVFMsIERTUiwgRENELCBSVFMsIERUUiwgUE0KKyAgIFBNOgkJCU5vdCB0ZXN0ZWQuCisgIEkyQzoJCQlJbXBsZW1lbnRlZCwgbm90IGZ1bGx5IHRlc3RlZC4KKyAgTDM6CQkJRnVsbHkgdGVzdGVkLCBwYXNzLgorICAgUE06CQkJTm90IHRlc3RlZC4KKworIFZpZGVvOgorICBMQ0Q6CQkJRnVsbHkgdGVzdGVkLiAgUE0KKwkJCShMQ0QgZG9lc24ndCBsaWtlIGJlaW5nIGJsYW5rZWQgd2l0aAorCQkJIG5lcG9uc2V0IGNvbm5lY3RlZCkKKyAgVmlkZW8gb3V0OgkJTm90IGZ1bGx5CisKKyBBdWRpbzoKKyAgVURBMTM0MToKKyAgIFBsYXliYWNrOgkJRnVsbHkgdGVzdGVkLCBwYXNzLgorICAgUmVjb3JkOgkJSW1wbGVtZW50ZWQsIG5vdCB0ZXN0ZWQuCisgICBQTToJCQlOb3QgdGVzdGVkLgorCisgIFVDQjEyMDA6CisgICBBdWRpbyBwbGF5OgkJSW1wbGVtZW50ZWQsIG5vdCBoZWF2aWx5IHRlc3RlZC4KKyAgIEF1ZGlvIHJlYzoJCUltcGxlbWVudGVkLCBub3QgaGVhdmlseSB0ZXN0ZWQuCisgICBUZWxjbyBhdWRpbyBwbGF5OglJbXBsZW1lbnRlZCwgbm90IGhlYXZpbHkgdGVzdGVkLgorICAgVGVsY28gYXVkaW8gcmVjOglJbXBsZW1lbnRlZCwgbm90IGhlYXZpbHkgdGVzdGVkLgorICAgUE9UUyBjb250cm9sOglObworICAgVG91Y2hzY3JlZW46CQlZZXMKKyAgIFBNOgkJCU5vdCB0ZXN0ZWQuCisKKyBPdGhlcjoKKyAgUENNQ0lBOgorICAgTFBFOgkJCUZ1bGx5IHRlc3RlZCwgcGFzcy4KKyAgVVNCOgkJCU5vCisgIElSREE6CisgICBTSVI6CQkJRnVsbHkgdGVzdGVkLCBwYXNzLgorICAgRklSOgkJCUZ1bGx5IHRlc3RlZCwgcGFzcy4KKyAgIFBNOgkJCU5vdCB0ZXN0ZWQuCisKK05lcG9uc2V0OgorIFNlcmlhbCBwb3J0czoKKyAgQ09NMSwyOglUWCwgUlgsIENUUywgRFNSLCBEQ0QsIFJUUywgRFRSCisgICBQTToJCQlOb3QgdGVzdGVkLgorICBVU0I6CQkJSW1wbGVtZW50ZWQsIG5vdCBoZWF2aWx5IHRlc3RlZC4KKyAgUENNQ0lBOgkJSW1wbGVtZW50ZWQsIG5vdCBoZWF2aWx5IHRlc3RlZC4KKyAgIFBNOgkJCU5vdCB0ZXN0ZWQuCisgIENGOgkJCUltcGxlbWVudGVkLCBub3QgaGVhdmlseSB0ZXN0ZWQuCisgICBQTToJCQlOb3QgdGVzdGVkLgorCitNb3JlIHN0dWZmIGNhbiBiZSBmb3VuZCBpbiB0aGUgLW5wIChOaWNvbGFzIFBpdHJlJ3MpIHRyZWUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9CcnV0dXMgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQnJ1dHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNTRjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQnJ1dHVzCkBAIC0wLDAgKzEsNjYgQEAKK0JydXR1cyBpcyBhbiBldmFsdWF0aW9uIHBsYXRmb3JtIGZvciB0aGUgU0ExMTAwIG1hbnVmYWN0dXJlZCBieSBJbnRlbC4gIAorRm9yIG1vcmUgZGV0YWlscywgc2VlOgorCitodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vc3Ryb25nL2FwcGxub3RzL3NhMTEwMGx4L2dldHN0YXJ0Lmh0bQorCitUbyBjb21waWxlIGZvciBCcnV0dXMsIHlvdSBtdXN0IGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKwltYWtlIGJydXR1c19jb25maWcKKwltYWtlIGNvbmZpZworCVthY2NlcHQgYWxsIHRoZSBkZWZhdWx0c10KKwltYWtlIHpJbWFnZQorCitUaGUgcmVzdWx0aW5nIGtlcm5lbCB3aWxsIGVuZCB1cCBpbiBsaW51eC9hcmNoL2FybS9ib290L3pJbWFnZS4gIFRoaXMgZmlsZQorbXVzdCBiZSBsb2FkZWQgYXQgMHhjMDAwODAwMCBpbiBCcnV0dXMncyBtZW1vcnkgYW5kIGV4ZWN1dGlvbiBzdGFydGVkIGF0CisweGMwMDA4MDAwIGFzIHdlbGwgd2l0aCB0aGUgdmFsdWUgb2YgcmVnaXN0ZXJzIHIwID0gMCBhbmQgcjEgPSAxNiB1cG9uCitlbnRyeS4KKworQnV0IHByaW9yIHRvIGV4ZWN1dGUgdGhlIGtlcm5lbCwgYSByYW1kaXNrIGltYWdlIG11c3QgYWxzbyBiZSBsb2FkZWQgaW4KK21lbW9yeS4gIFVzZSBtZW1vcnkgYWRkcmVzcyAweGQ4MDAwMDAwIGZvciB0aGlzLiAgTm90ZSB0aGF0IHRoZSBmaWxlIAorY29udGFpbmluZyB0aGUgKGNvbXByZXNzZWQpIHJhbWRpc2sgaW1hZ2UgbXVzdCBub3QgZXhjZWVkIDQgTUIuCisKK1R5cGljYWxseSwgeW91J2xsIG5lZWQgYW5nZWxib290IHRvIGxvYWQgdGhlIGtlcm5lbC4KK1RoZSBmb2xsb3dpbmcgYW5nZWxib290Lm9wdCBmaWxlIHNob3VsZCBiZSB1c2VkOgorCistLS0tLSBiZWdpbiBhbmdlbGJvb3Qub3B0IC0tLS0tCitiYXNlIDB4YzAwMDgwMDAKK2VudHJ5IDB4YzAwMDgwMDAKK3IwIDB4MDAwMDAwMDAKK3IxIDB4MDAwMDAwMTAKK2RldmljZSAvZGV2L3R0eVMwCitvcHRpb25zICI5NjAwIDhOMSIKK2JhdWQgMTE1MjAwCitvdGhlcmZpbGUgcmFtZGlza19pbWcuZ3oKK290aGVyYmFzZSAweGQ4MDAwMDAwCistLS0tLSBlbmQgYW5nZWxib290Lm9wdCAtLS0tLQorCitUaGVuIGxvYWQgdGhlIGtlcm5lbCBhbmQgcmFtZGlzayB3aXRoOgorCisJYW5nZWxib290IC1mIGFuZ2VsYm9vdC5vcHQgekltYWdlCisKK1RoZSBmaXJzdCBCcnV0dXMgc2VyaWFsIHBvcnQgKGFzc3VtZWQgdG8gYmUgbGlua2VkIHRvIC9kZXYvdHR5UzAgb24geW91cgoraG9zdCBQQykgaXMgdXNlZCBieSBhbmdlbCB0byBsb2FkIHRoZSBrZXJuZWwgYW5kIHJhbWRpc2sgaW1hZ2UuIFRoZSBzZXJpYWwKK2NvbnNvbGUgaXMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgc2Vjb25kIEJydXR1cyBzZXJpYWwgcG9ydC4gVG8gYWNjZXNzIGl0LAoreW91IG1heSB1c2UgbWluaWNvbSBjb25maWd1cmVkIHdpdGggL2Rldi90dHlTMSwgOTYwMCBiYXVkLCA4TjEsIG5vIGZsb3cKK2NvbnRyb2wuCisKK0N1cnJlbnRseSBzdXBwb3J0ZWQ6CisJLSBSUzIzMiBzZXJpYWwgcG9ydHMKKwktIGF1ZGlvIG91dHB1dAorCS0gTENEIHNjcmVlbgorCS0ga2V5Ym9hcmQKKwkKK1RoZSBhY3R1YWwgQnJ1dHVzIHN1cHBvcnQgbWF5IG5vdCBiZSBjb21wbGV0ZSB3aXRob3V0IGV4dHJhIHBhdGNoZXMuIAorSWYgc3VjaCBwYXRjaGVzIGV4aXN0LCB0aGV5IHNob3VsZCBiZSBmb3VuZCBmcm9tIAorZnRwLm5ldHdpbmRlci5vcmcvdXNlcnMvbi9uaWNvLgorCitBIGZ1bGwgUENNQ0lBIHN1cHBvcnQgaXMgc3RpbGwgbWlzc2luZywgYWx0aG91Z2ggaXQncyBwb3NzaWJsZSB0byBoYWNrCitzb21lIGRyaXZlcnMgaW4gb3JkZXIgdG8gZHJpdmUgYWxyZWFkeSBpbnNlcnRlZCBjYXJkcyBhdCBib290IHRpbWUgd2l0aAorbGl0dGxlIG1vZGlmaWNhdGlvbnMuCisKK0FueSBjb250cmlidXRpb24gaXMgd2VsY29tZS4KKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBuaWNvQGNhbS5vcmcKKworSGF2ZSBGdW4gIQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQ0VSRiBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9DRVJGCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDg0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQ0VSRgpAQCAtMCwwICsxLDI5IEBACisqKiogVGhlIFN0cm9uZ0FSTSB2ZXJzaW9uIG9mIHRoZSBDZXJmQm9hcmQvQ3ViZSBoYXMgYmVlbiBkaXNjb250aW51ZWQgKioqCisKK1RoZSBJbnRyaW5zeWMgQ2VyZkJvYXJkIGlzIGEgU3Ryb25nQVJNIDExMTAtYmFzZWQgY29tcHV0ZXIgb24gYSBib2FyZAordGhhdCBtZWFzdXJlcyBhcHByb3hpbWF0ZWx5IDIiIHNxdWFyZS4gSXQgaW5jbHVkZXMgYW4gRXRoZXJuZXQKK2NvbnRyb2xsZXIsIGFuIFJTMjMyLWNvbXBhdGlibGUgc2VyaWFsIHBvcnQsIGEgVVNCIGZ1bmN0aW9uIHBvcnQsIGFuZAorb25lIENvbXBhY3RGbGFzaCsgc2xvdCBvbiB0aGUgYmFjay4gUGljdHVyZXMgY2FuIGJlIGZvdW5kIGF0IHRoZQorSW50cmluc3ljIHdlYnNpdGUsIGh0dHA6Ly93d3cuaW50cmluc3ljLmNvbS4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHN1cHBvcnQgaW4gdGhlIExpbnV4IGtlcm5lbCBmb3IgdGhlCitJbnRyaW5zeWMgQ2VyZkJvYXJkLgorCitTdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uOgorICAgLSBDb21wYWN0Rmxhc2grIHNsb3QgKHNlbGVjdCBQQ01DSUEgaW4gR2VuZXJhbCBTZXR1cCBhbmQgYW55IG9wdGlvbnMKKyAgICAgdGhhdCBtYXkgYmUgcmVxdWlyZWQpCisgICAtIE9uYm9hcmQgQ3J5c3RhbCBDUzg5MDAgRXRoZXJuZXQgY29udHJvbGxlciAoQ2VyZiBDUzg5MDBBIHN1cHBvcnQgaW4KKyAgICAgTmV0d29yayBEZXZpY2VzKQorICAgLSBTZXJpYWwgcG9ydHMgd2l0aCBhIHNlcmlhbCBjb25zb2xlIChoYXJkY29kZWQgdG8gMzg0MDAgOE4xKQorCitJbiBvcmRlciB0byBnZXQgdGhpcyBrZXJuZWwgb250byB5b3VyIENlcmYsIHlvdSBuZWVkIGEgc2VydmVyIHRoYXQgcnVucworYm90aCBCT09UUCBhbmQgVEZUUC4gRGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIHNob3VsZCBoYXZlIGNvbWUgd2l0aCB5b3VyCitldmFsdWF0aW9uIGtpdCBvbiBob3cgdG8gdXNlIHRoZSBib290bG9hZGVyLiBUaGlzIHNlcmllcyBvZiBjb21tYW5kcword2lsbCBzdWZmaWNlOgorCisgICBtYWtlIEFSQ0g9YXJtIENST1NTX0NPTVBJTEU9YXJtLWxpbnV4LSBjZXJmY3ViZV9kZWZjb25maWcKKyAgIG1ha2UgQVJDSD1hcm0gQ1JPU1NfQ09NUElMRT1hcm0tbGludXgtIHpJbWFnZQorICAgbWFrZSBBUkNIPWFybSBDUk9TU19DT01QSUxFPWFybS1saW51eC0gbW9kdWxlcworICAgY3AgYXJjaC9hcm0vYm9vdC96SW1hZ2UgPFRGVFAgZGlyZWN0b3J5PgorCitzdXBwb3J0QGludHJpbnN5Yy5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9GcmVlQmlyZCBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9GcmVlQmlyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGEyOGIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0ZyZWVCaXJkCkBAIC0wLDAgKzEsMjEgQEAKK0ZyZWViaXJkLTEuMSBpcyBwcm9kdWNlZCBieSBMZWduZWQoQykgLEluYy4KKyhodHRwOi8vd3d3LmxlZ2VuZC5jb20uY24pCithbmQgc29mdHdhcmUvbGludXggbWFpbmF0aW5lZCBieSBDb3ZlbnRpdmUoQyksSW5jLgorKGh0dHA6Ly93d3cuY292ZW50aXZlLmNvbSkKKworQmFzZWQgb24gdGhlIE5pY29sYXMncyBzdHJvbmdhcm0ga2VybmVsIHRyZWUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTWFpbnRhaW5lcjoKKworQ2hlc3RlciBLdW8gPGNoZXN0ZXJAY292ZW50aXZlLmNvbT4KKwkgICAgPGNoZXN0ZXJAbGludXgub3JnLnR3PgorCitBdXRob3IgOgorVGltIHd1IDx0aW13dUBjb3ZlbnRpdmUuY29tPgorQ0lIIDxjaWhAY292ZW50aXZlLmNvbT4KK0VyaWMgUGVuZyA8ZXJpY3BlbmdAY292ZW50aXZlLmNvbT4KK0plZmYgTGVlIDxqZWZmX2xlZUBjb3ZlbnRpdmUuY29tPgorQWxsZW4gQ2hlbmcKK1RvbnkgTGl1IDx0b255bGl1QGNvdmVudGl2ZS5jb20+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc0NsaWVudCBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc0NsaWVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE3ZTgwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0dyYXBoaWNzQ2xpZW50CkBAIC0wLDAgKzEsOTggQEAKK0FEUyBHcmFwaGljc0NsaWVudCBQbHVzIFNpbmdsZSBCb2FyZCBDb21wdXRlcgorCitGb3IgbW9yZSBkZXRhaWxzLCBjb250YWN0IEFwcGxpZWQgRGF0YSBTeXN0ZW1zIG9yIHNlZQoraHR0cDovL3d3dy5hcHBsaWVkZGF0YS5uZXQvcHJvZHVjdHMuaHRtbAorCitUaGUgb3JpZ2luYWwgTGludXggc3VwcG9ydCBmb3IgdGhpcyBwcm9kdWN0IGhhcyBiZWVuIHByb3ZpZGVkIGJ5IAorTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPi4gQ29udGludWVkIGRldmVsb3BtZW50IHdvcmsgYnkKK1dvb2p1bmcgSHVoIDx3aHVoQGFwcGxpZWRkYXRhLm5ldD4KKworSXQncyBjdXJyZW50bHkgcG9zc2libGUgdG8gbW91bnQgYSByb290IGZpbGVzeXN0ZW0gdmlhIE5GUyBwcm92aWRpbmcgYQorY29tcGxldGUgTGludXggZW52aXJvbm1lbnQuICBPdGhlcndpc2UgYSByYW1kaXNrIGltYWdlIG1heSBiZSB1c2VkLiAgVGhlCitib2FyZCBzdXBwb3J0cyBNVEQvSkZGUywgc28geW91IGNvdWxkIGFsc28gbW91bnQgc29tZXRoaW5nIG9uIHRoZXJlLgorCitVc2UgJ21ha2UgZ3JhcGhpY3NjbGllbnRfY29uZmlnJyBiZWZvcmUgYW55ICdtYWtlIGNvbmZpZycuICBUaGlzIHdpbGwgc2V0IHVwCitkZWZhdWx0cyBmb3IgR3JhcGhpY3NDbGllbnQgUGx1cyBzdXBwb3J0LgorCitUaGUga2VybmVsIHpJbWFnZSBpcyBsaW5rZWQgdG8gYmUgbG9hZGVkIGFuZCBleGVjdXRlZCBhdCAweGMwMjAwMDAwLiAgCitBbHNvIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzcGVjaWZpZWQgdmFsdWVzIHVwb24gZW50cnk6CisKKwlyMCA9IDAKKwlyMSA9IDI5CSh0aGlzIGlzIHRoZSBHcmFwaGljc0NsaWVudCBhcmNoaXRlY3R1cmUgbnVtYmVyKQorCitMaW51eCBjYW4gIGJlIHVzZWQgd2l0aCB0aGUgQURTIEJvb3RMb2FkZXIgdGhhdCBzaGlwcyB3aXRoIHRoZQorbmV3ZXIgcmV2IGJvYXJkcy4gU2VlIHRoZWlyIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGxvYWQgTGludXguCitBbmdlbCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgR3JhcGhpY3NDbGllbnQgUGx1cyBBRkFJSy4KKworVGhlcmUgaXMgYSAgYm9hcmQga25vd24gYXMganVzdCB0aGUgR3JhcGhpY3NDbGllbnQgdGhhdCBBRFMgdXNlZCB0bworcHJvZHVjZSBidXQgaGFzIGVuZCBvZiBsaWZlZC4gVGhpcyBjb2RlIHdpbGwgbm90IHdvcmsgb24gdGhlIG9sZGVyCitib2FyZCB3aXRoIHRoZSBBRFMgYm9vdGxvYWRlciwgYnV0IHNob3VsZCBzdGlsbCB3b3JrIHdpdGggQW5nZWwsCithcyBvdXRsaW5lZCBiZWxvdy4gIEluIGFueSBjYXNlLCBpZiB5b3UncmUgcGxhbm5pbmcgb24gZGVwbG95aW5nCitzb21ldGhpbmcgZW4gbWFzc2UsIHlvdSBzaG91bGQgcHJvYmFibHkgZ2V0IHRoZSBuZXdlciBib2FyZC4KKworSWYgdXNpbmcgQW5nZWwgb24gdGhlIG9sZGVyIGJvYXJkcywgaGVyZSBpcyBhIHR5cGljYWwgYW5nZWwub3B0IG9wdGlvbiBmaWxlCitpZiB0aGUga2VybmVsIGlzIGxvYWRlZCB0aHJvdWdoIHRoZSBBbmdlbCBEZWJ1ZyBNb25pdG9yOgorCistLS0tLSBiZWdpbiBhbmdlbGJvb3Qub3B0IC0tLS0tCitiYXNlIDB4YzAyMDAwMDAKK2VudHJ5IDB4YzAyMDAwMDAKK3IwIDB4MDAwMDAwMDAKK3IxIDB4MDAwMDAwMWQKK2RldmljZSAvZGV2L3R0eVMxCitvcHRpb25zICIzODQwMCA4TjEiCitiYXVkIDExNTIwMAorI290aGVyZmlsZSByYW1kaXNrLmd6Cisjb3RoZXJiYXNlIDB4YzA4MDAwMDAKK2V4ZWMgbWluaWNvbQorLS0tLS0gZW5kIGFuZ2VsYm9vdC5vcHQgLS0tLS0KKworVGhlbiB0aGUga2VybmVsIChhbmQgcmFtZGlzayBpZiBvdGhlcmZpbGUvb3RoZXJiYXNlIGxpbmVzIGFib3ZlIGFyZQordW5jb21tZW50ZWQpIHdvdWxkIGJlIGxvYWRlZCB3aXRoOgorCisJYW5nZWxib290IC1mIGFuZ2VsYm9vdC5vcHQgekltYWdlCisKK0hlcmUgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBib2FyZCBpcyBjb25uZWN0ZWQgdG8gdHR5UzEgb24geW91ciBQQworYW5kIHRoYXQgbWluaWNvbSBpcyBwcmVjb25maWd1cmVkIHdpdGggL2Rldi90dHlTMSwgMzg0MDAgYmF1ZCwgOE4xLCBubyBmbG93Citjb250cm9sIGJ5IGRlZmF1bHQuCisKK0lmIGFueSBvdGhlciBib290bG9hZGVyIGlzIHVzZWQsIGVuc3VyZSBpdCBhY2NvbXBsaXNoIHRoZSBzYW1lLCBlc3BlY2lhbGx5Citmb3IgcjAvcjEgcmVnaXN0ZXIgdmFsdWVzIGJlZm9yZSBqdW1waW5nIGludG8gdGhlIGtlcm5lbC4KKworCitTdXBwb3J0ZWQgcGVyaXBoZXJhbHM6CistIFNBMTEwMCBMQ0QgZnJhbWUgYnVmZmVyICg4LzE2YnBwLi4uc29ydCBvZikKKy0gb24tYm9hcmQgU01DIDkyQzk2IGV0aGVybmV0IE5JQworLSBTQTExMDAgc2VyaWFsIHBvcnQKKy0gZmxhc2ggbWVtb3J5IGFjY2VzcyAoTVREL0pGRlMpCistIHBjbWNpYQorLSB0b3VjaHNjcmVlbih1Y2IxMjAwKQorLSBwcy8yIGtleWJvYXJkCistIGNvbnNvbGUgb24gTENEIHNjcmVlbgorLSBzZXJpYWwgcG9ydHMgKHR0eVNbMC0yXSkKKyAgLSB0dHlTMCBpcyBkZWZhdWx0IGZvciBzZXJpYWwgY29uc29sZQorLSBTbWFydCBJL08gKEFEQywga2V5cGFkLCBkaWdpdGFsIGlucHV0cywgZXRjKQorICBTZWUgaHR0cDovL3d3dy5hcHBsaWVkZGF0YS5jb20vZGV2ZWxvcGVycy9saW51eCBmb3IgSU9DVEwgZG9jdW1lbnRhdGlvbgorICBhbmQgZXhhbXBsZSB1c2VyIHNwYWNlIGNvZGUuIHBzLzIga2V5YmQgaXMgbXVsdGlwbGV4ZWQgdGhyb3VnaCB0aGlzIGRyaXZlcgorCitUbyBkbzoKKy0gVUNCMTIwMCBhdWRpbyB3aXRoIG5ldyB1Y2JfZ2VuZXJpYyBsYXllcgorLSBldmVyeXRoaW5nIGVsc2UhICA6LSkKKworTm90ZXM6CisKKy0gVGhlIGZsYXNoIG9uIGJvYXJkIGlzIGRpdmlkZWQgaW50byAzIHBhcnRpdGlvbnMuICBtdGQwIGlzIHdoZXJlCisgIHRoZSBBRFMgYm9vdCBST00gYW5kIHpJbWFnZSBpcyBzdG9yZWQuICBJdCdzIGJlZW4gbWFya2VkIGFzCisgIHJlYWQtb25seSB0byBrZWVwIHlvdSBmcm9tIGJsYXN0aW5nIG92ZXIgdGhlIGJvb3Rsb2FkZXIuIDopICBtdGQxIGlzCisgIGZvciB0aGUgcmFtZGlzay5neiBpbWFnZS4gIG10ZDIgaXMgdXNlciBmbGFzaCBzcGFjZSBhbmQgY2FuIGJlCisgIHV0aWxpemVkIGZvciBlaXRoZXIgSkZGUyBvciBpZiB5b3UncmUgZmVlbGluZyBjcmF6eSwgcnVubmluZyBleHQyCisgIG9uIHRvcCBvZiBpdC4gSWYgeW91J3JlIG5vdCB1c2luZyB0aGUgQURTIGJvb3Rsb2FkZXIsIHlvdSdyZQorICB3ZWxjb21lIHRvIGJsYXN0IG92ZXIgdGhlIG10ZDEgcGFydGl0aW9uIGFsc28uCisKKy0gMTZicHAgbW9kZSByZXF1aXJlcyBhIGRpZmZlcmVudCBjYWJsZSB0aGFuIHdoYXQgc2hpcHMgd2l0aCB0aGUgYm9hcmQuCisgIENvbnRhY3QgQURTIG9yIGxvb2sgdGhyb3VnaCB0aGUgbWFudWFsIHRvIHdpcmUgeW91ciBvd24uIEN1cnJlbnRseSwKKyAgaWYgeW91IGNvbXBpbGUgd2l0aCAxNmJpdCBtb2RlIHN1cHBvcnQgYW5kIHN3aXRjaCBpbnRvIGEgbG93ZXIgYnBwCisgIG1vZGUsIHRoZSB0aW1pbmcgaXMgb2ZmIHNvIHRoZSBpbWFnZSBpcyBjb3JydXB0ZWQuICBUaGlzIHdpbGwgYmUKKyAgZml4ZWQgc29vbi4KKworQW55IGNvbnRyaWJ1dGlvbiBjYW4gYmUgc2VudCB0byBuaWNvQGNhbS5vcmcgYW5kIHdpbGwgYmUgZ3JlYXRseSB3ZWxjb21lIQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NNYXN0ZXIgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NNYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyODc0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc01hc3RlcgpAQCAtMCwwICsxLDUzIEBACitBRFMgR3JhcGhpY3NNYXN0ZXIgU2luZ2xlIEJvYXJkIENvbXB1dGVyCisKK0ZvciBtb3JlIGRldGFpbHMsIGNvbnRhY3QgQXBwbGllZCBEYXRhIFN5c3RlbXMgb3Igc2VlCitodHRwOi8vd3d3LmFwcGxpZWRkYXRhLm5ldC9wcm9kdWN0cy5odG1sCisKK1RoZSBvcmlnaW5hbCBMaW51eCBzdXBwb3J0IGZvciB0aGlzIHByb2R1Y3QgaGFzIGJlZW4gcHJvdmlkZWQgYnkKK05pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4uIENvbnRpbnVlZCBkZXZlbG9wbWVudCB3b3JrIGJ5CitXb29qdW5nIEh1aCA8d2h1aEBhcHBsaWVkZGF0YS5uZXQ+CisKK1VzZSAnbWFrZSBncmFwaGljc21hc3Rlcl9jb25maWcnIGJlZm9yZSBhbnkgJ21ha2UgY29uZmlnJy4KK1RoaXMgd2lsbCBzZXQgdXAgZGVmYXVsdHMgZm9yIEdyYXBoaWNzTWFzdGVyIHN1cHBvcnQuCisKK1RoZSBrZXJuZWwgekltYWdlIGlzIGxpbmtlZCB0byBiZSBsb2FkZWQgYW5kIGV4ZWN1dGVkIGF0IDB4YzA0MDAwMDAuCisKK0xpbnV4IGNhbiAgYmUgdXNlZCB3aXRoIHRoZSBBRFMgQm9vdExvYWRlciB0aGF0IHNoaXBzIHdpdGggdGhlCituZXdlciByZXYgYm9hcmRzLiBTZWUgdGhlaXIgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gbG9hZCBMaW51eC4KKworU3VwcG9ydGVkIHBlcmlwaGVyYWxzOgorLSBTQTExMDAgTENEIGZyYW1lIGJ1ZmZlciAoOC8xNmJwcC4uLnNvcnQgb2YpCistIFNBMTExMSBVU0IgTWFzdGVyCistIG9uLWJvYXJkIFNNQyA5MkM5NiBldGhlcm5ldCBOSUMKKy0gU0ExMTAwIHNlcmlhbCBwb3J0CistIGZsYXNoIG1lbW9yeSBhY2Nlc3MgKE1URC9KRkZTKQorLSBwY21jaWEsIGNvbXBhY3QgZmxhc2gKKy0gdG91Y2hzY3JlZW4odWNiMTIwMCkKKy0gcHMvMiBrZXlib2FyZAorLSBjb25zb2xlIG9uIExDRCBzY3JlZW4KKy0gc2VyaWFsIHBvcnRzICh0dHlTWzAtMl0pCisgIC0gdHR5UzAgaXMgZGVmYXVsdCBmb3Igc2VyaWFsIGNvbnNvbGUKKy0gU21hcnQgSS9PIChBREMsIGtleXBhZCwgZGlnaXRhbCBpbnB1dHMsIGV0YykKKyAgU2VlIGh0dHA6Ly93d3cuYXBwbGllZGRhdGEuY29tL2RldmVsb3BlcnMvbGludXggZm9yIElPQ1RMIGRvY3VtZW50YXRpb24KKyAgYW5kIGV4YW1wbGUgdXNlciBzcGFjZSBjb2RlLiBwcy8yIGtleWJkIGlzIG11bHRpcGxleGVkIHRocm91Z2ggdGhpcyBkcml2ZXIKKworVG8gZG86CistIGV2ZXJ5dGhpbmcgZWxzZSEgIDotKQorCitOb3RlczoKKworLSBUaGUgZmxhc2ggb24gYm9hcmQgaXMgZGl2aWRlZCBpbnRvIDMgcGFydGl0aW9ucy4gIG10ZDAgaXMgd2hlcmUKKyAgdGhlIHpJbWFnZSBpcyBzdG9yZWQuICBJdCdzIGJlZW4gbWFya2VkIGFzIHJlYWQtb25seSB0byBrZWVwIHlvdQorICBmcm9tIGJsYXN0aW5nIG92ZXIgdGhlIGJvb3Rsb2FkZXIuIDopICBtdGQxIGlzCisgIGZvciB0aGUgcmFtZGlzay5neiBpbWFnZS4gIG10ZDIgaXMgdXNlciBmbGFzaCBzcGFjZSBhbmQgY2FuIGJlCisgIHV0aWxpemVkIGZvciBlaXRoZXIgSkZGUyBvciBpZiB5b3UncmUgZmVlbGluZyBjcmF6eSwgcnVubmluZyBleHQyCisgIG9uIHRvcCBvZiBpdC4gSWYgeW91J3JlIG5vdCB1c2luZyB0aGUgQURTIGJvb3Rsb2FkZXIsIHlvdSdyZQorICB3ZWxjb21lIHRvIGJsYXN0IG92ZXIgdGhlIG10ZDEgcGFydGl0aW9uIGFsc28uCisKKy0gMTZicHAgbW9kZSByZXF1aXJlcyBhIGRpZmZlcmVudCBjYWJsZSB0aGFuIHdoYXQgc2hpcHMgd2l0aCB0aGUgYm9hcmQuCisgIENvbnRhY3QgQURTIG9yIGxvb2sgdGhyb3VnaCB0aGUgbWFudWFsIHRvIHdpcmUgeW91ciBvd24uIEN1cnJlbnRseSwKKyAgaWYgeW91IGNvbXBpbGUgd2l0aCAxNmJpdCBtb2RlIHN1cHBvcnQgYW5kIHN3aXRjaCBpbnRvIGEgbG93ZXIgYnBwCisgIG1vZGUsIHRoZSB0aW1pbmcgaXMgb2ZmIHNvIHRoZSBpbWFnZSBpcyBjb3JydXB0ZWQuICBUaGlzIHdpbGwgYmUKKyAgZml4ZWQgc29vbi4KKworQW55IGNvbnRyaWJ1dGlvbiBjYW4gYmUgc2VudCB0byBuaWNvQGNhbS5vcmcgYW5kIHdpbGwgYmUgZ3JlYXRseSB3ZWxjb21lIQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0hVV19XRUJQQU5FTCBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9IVVdfV0VCUEFORUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1NmI0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9IVVdfV0VCUEFORUwKQEAgLTAsMCArMSwxNyBAQAorVGhlIEhVV19XRUJQQU5FTCBpcyBhIHByb2R1Y3Qgb2YgdGhlIGdlcm1hbiBjb21wYW55IEhvZWZ0ICYgV2Vzc2VsIEFHCisKK0lmIHlvdSB3YW50IG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSB2aXNpdAoraHR0cDovL3d3dy5ob2VmdC13ZXNzZWwuZGUKKworVG8gYnVpbGQgdGhlIGtlcm5lbDoKKwltYWtlIGh1d193ZWJwYW5lbF9jb25maWcKKwltYWtlIG9sZGNvbmZpZworCVthY2NlcHQgYWxsIGRlZmF1bHRzXQorCW1ha2UgekltYWdlCisKK01vc3RseSBvZiB0aGUgd29yayBpcyBkb25lIGJ5OgorUm9tYW4gSm9yZGFuICAgICAgICAgam9yQGhvZWZ0LXdlc3NlbC5kZQorQ2hyaXN0b3BoIFNjaHVseiAgICBzY2h1QGhvZWZ0LXdlc3NlbC5kZQorCisyMDAwLzEyLzE4LworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvSXRzeSBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9JdHN5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTk0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvSXRzeQpAQCAtMCwwICsxLDM5IEBACitJdHN5IGlzIGEgcmVzZWFyY2ggcHJvamVjdCBkb25lIGJ5IHRoZSBXZXN0ZXJuIFJlc2VhcmNoIExhYiwgYW5kIFN5c3RlbXMKK1Jlc2VhcmNoIENlbnRlciBpbiBQYWxvIEFsdG8sIENBLiBUaGUgSXRzeSBwcm9qZWN0IGlzIG9uZSBvZiBzZXZlcmFsCityZXNlYXJjaCBwcm9qZWN0cyBhdCBDb21wYXEgdGhhdCBhcmUgcmVsYXRlZCB0byBwb2NrZXQgY29tcHV0aW5nLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgorCisJaHR0cDovL3d3dy5yZXNlYXJjaC5kaWdpdGFsLmNvbS93cmwvaXRzeS9pbmRleC5odG1sCisKK05vdGVzIG9uIGluaXRpYWwgMi40IEl0c3kgc3VwcG9ydCAoOC8yNy8yMDAwKSA6CitUaGUgcG9ydCB3YXMgZG9uZSBvbiBhbiBJdHN5IHZlcnNpb24gMS41IG1hY2hpbmUgd2l0aCBhIGRhdWdodGVyY2FyZCB3aXRoCis2NCBNZWcgb2YgRFJBTSBhbmQgMzIgTWVnIG9mIEZsYXNoLiBUaGUgaW5pdGlhbCB3b3JrIGluY2x1ZGVzIHN1cHBvcnQgZm9yCitzZXJpYWwgY29uc29sZSAodG8gc2VlIHdoYXQgeW91J3JlIGRvaW5nKS4gIE5vIG90aGVyIGRldmljZXMgaGF2ZSBiZWVuCitlbmFibGVkLgorCitUbyBidWlsZCwgZG8gYSAibWFrZSBtZW51Y29uZmlnIiAob3IgeG1lbnVjb25maWcpIGFuZCBzZWxlY3QgSXRzeSBzdXBwb3J0LgorRGlzYWJsZSBGbGFzaCBhbmQgTENEIHN1cHBvcnQuIGFuZCB0aGVuIGRvIGEgbWFrZSB6SW1hZ2UuCitGaW5hbGx5LCB5b3Ugd2lsbCBuZWVkIHRvIGNkIHRvIGFyY2gvYXJtL2Jvb3QvdG9vbHMgYW5kIGV4ZWN1dGUgYSBtYWtlIHRoZXJlCit0byBidWlsZCB0aGUgcGFyYW1zLWl0c3kgcHJvZ3JhbSB1c2VkIHRvIGJvb3QgdGhlIGtlcm5lbC4KKworSW4gb3JkZXIgdG8gaW5zdGFsbCB0aGUgcG9ydCBvZiAyLjQgdG8gdGhlIGl0c3ksIFlvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZQorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGluIHRoZSBtb25pdG9yIGFzIGZvbGxvd3M6CitBcmcgMToweDA4MzQwMDAwLCBBcmcyOiAweEMwMDAwMDAwLCBBcmczOjE4ICgweDEyKSwgQXJnNDowCitNYWtlIHN1cmUgdGhlIHN0YXJ0LXJvdXRpbmUgYWRkcmVzcyBpcyBzZXQgdG8gMHgwMDA2MDAwMC4KKworTmV4dCwgZmxhc2ggdGhlIHBhcmFtcy1pdHN5IHByb2dyYW0gdG8gMHgwMDA2MDAwMCAoInAgMSAweDAwMDYwMDAwIiBpbiB0aGUKK2ZsYXNoIG1lbnUpICBGbGFzaCB0aGUga2VybmVsIGluIGFyY2gvYXJtL2Jvb3QvekltYWdlIGludG8gMHgwODM0MDAwMAorKCJwIDEgMHgwMDM0MDAwMCIpLiAgRmluYWxseSBmbGFzaCBhbiBpbml0aWFsIHJhbWRpc2sgaW50byAweEM4MDAwMDAwCisoInAgMiAweDAiKSAgV2UgdXNlZCByYW1kaXNrLTItMzAuZ3ogZnJvbSB0aGUgMC4xMSB2ZXJzaW9uIGRpcmVjdG9yeSBvbgoraGFuZGhlbGRzLm9yZy4KKworVGhlIHNlcmlhbCBjb25uZWN0aW9uIHdlIGVzdGFibGlzaGVkIHdhcyBhdDoKKyA4LWJpdCBkYXRhLCBubyBwYXJpdHksIDEgc3RvcCBiaXQocyksIDExNTIwMC4wMCBiL3MuIGluIHRoZSBtb25pdG9yLCBpbiB0aGUKK3BhcmFtcy1pdHN5IHByb2dyYW0sIGFuZCBpbiB0aGUga2VybmVsIGl0c2VsZi4gIFRoaXMgY2FuIGJlIGNoYW5nZWQsIGJ1dAorbm90IGVhc2lseS4gVGhlIG1vbml0b3IgcGFyYW1ldGVycyBhcmUgZWFzaWx5IGNoYW5nZWQsIHRoZSBwYXJhbXMgcHJvZ3JhbQorc2V0dXAgaXMgYXNzZW1ibHkgb3V0bCdzLCBhbmQgdGhlIGtlcm5lbCBpcyBhIGNvbmZpZ3VyYXRpb24gaXRlbSBzcGVjaWZpYyB0bwordGhlIGl0c3kuIChpLmUuIGdyZXAgZm9yIENPTkZJR19TQTExMDBfSVRTWSBhbmQgeW91J2xsIGZpbmQgd2hlcmUgaXQgaXMuKQorCisKK1RoaXMgc2hvdWxkIGdldCB5b3UgYSBwcm9wZXJseSBib290aW5nIDIuNCBrZXJuZWwgb24gdGhlIGl0c3kuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvTEFSVCBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9MQVJUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzNmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvTEFSVApAQCAtMCwwICsxLDE0IEBACitMaW51eCBBZHZhbmNlZCBSYWRpbyBUZXJtaW5hbCAoTEFSVCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgTEFSVCBpcyBhIHNtYWxsICg3LjUgeCAxMGNtKSBTQS0xMTAwIGJvYXJkLCBkZXNpZ25lZCBmb3IgZW1iZWRkZWQKK2FwcGxpY2F0aW9ucy4gSXQgaGFzIDMyIE1CIERSQU0sIDRNQiBGbGFzaCBST00sIGRvdWJsZSBSUzIzMiBhbmQgYWxsCitvdGhlciBTdHJvbmdBUk0tZ2FkZ2V0cy4gQWxtb3N0IGFsbCBTQSBzaWduYWxzIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlCit0aHJvdWdoIGEgbnVtYmVyIG9mIGNvbm5lY3RvcnMuIFRoZSBwb3dlcnN1cHBseSBhY2NlcHRzIHZvbHRhZ2VzCitiZXR3ZWVuIDMuNVYgYW5kIDE2ViBhbmQgaXMgb3ZlcmRpbWVuc2lvbmVkIHRvIHN1cHBvcnQgYSByYW5nZSBvZgorZGF1Z2h0ZXJib2FyZHMuIEEgcXVhZCBFdGhlcm5ldCAvIElERSAvIFBTMiAvIHNvdW5kIGRhdWdodGVyYm9hcmQKK2lzIHVuZGVyIGRldmVsb3BtZW50LCB3aXRoIHBsZW50eSBvZiBvdGhlcnMgaW4gZGlmZmVyZW50IHN0YWdlcyBvZgorcGxhbm5pbmcuCisKK1RoZSBoYXJkd2FyZSBkZXNpZ25zIGZvciB0aGlzIGJvYXJkIGhhdmUgYmVlbiByZWxlYXNlZCB1bmRlciBhbiBvcGVuIGxpY2Vuc2U7CitzZWUgdGhlIExBUlQgcGFnZSBhdCBodHRwOi8vd3d3LmxhcnQudHVkZWxmdC5ubC8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvUExFQiBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9QTEVCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2FlMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1BMRUIKQEAgLTAsMCArMSwxMSBAQAorVGhlIFBMRUIgcHJvamVjdCB3YXMgc3RhcnRlZCBhcyBhIHN0dWRlbnQgaW5pdGlhdGl2ZSBhdCB0aGUgU2Nob29sIG9mCitDb21wdXRlciBTY2llbmNlIGFuZCBFbmdpbmVlcmluZywgVW5pdmVyc2l0eSBvZiBOZXcgU291dGggV2FsZXMgdG8gbWFrZSBhCitwb2NrZXQgY29tcHV0ZXIgY2FwYWJsZSBvZiBydW5uaW5nIHRoZSBMaW51eCBLZXJuZWwuCisKK1BMRUIgc3VwcG9ydCBoYXMgeWV0IHRvIGJlIGZ1bGx5IGludGVncmF0ZWQuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CisKKwlodHRwOi8vd3d3LmNzZS51bnN3LmVkdS5hdS9+cGxlYi8KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvUGFuZ29saW4gYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvUGFuZ29saW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3YTYxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9QYW5nb2xpbgpAQCAtMCwwICsxLDIzIEBACitQYW5nb2xpbiBpcyBhIFN0cm9uZ0FSTSAxMTEwLWJhc2VkIGV2YWx1YXRpb24gcGxhdGZvcm0gcHJvZHVjZWQKK2J5IERpYWxvZ3VlIFRlY2hub2xvZ3kgKGh0dHA6Ly93d3cuZGlhbG9ndWUuY29tLnR3LykuCitJdCBoYXMgRUlTQSBzbG90cyBmb3IgZWFzZSBvZiBjb25maWd1cmF0aW9uIHdpdGggU0RSQU0vRmxhc2gKK21lbW9yeSBjYXJkLCBVU0IvU2VyaWFsL0F1ZGlvIGNhcmQsIENvbXBhY3QgRmxhc2ggY2FyZCwKK1BDTUNJQS9JREUgY2FyZCBhbmQgVEZULUxDRCBjYXJkLgorCitUbyBjb21waWxlIGZvciBQYW5nb2xpbiwgeW91IG11c3QgaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworCW1ha2UgcGFuZ29saW5fY29uZmlnCisJbWFrZSBvbGRjb25maWcKKwltYWtlIHpJbWFnZQorCitTdXBwb3J0ZWQgcGVyaXBoZXJhbHM6CistIFNBMTExMCBzZXJpYWwgcG9ydCAoVUFSVDEvVUFSVDIvVUFSVDMpCistIGZsYXNoIG1lbW9yeSBhY2Nlc3MKKy0gY29tcGFjdCBmbGFzaCBkcml2ZXIKKy0gVURBMTM0MSBzb3VuZCBkcml2ZXIKKy0gU0ExMTAwIExDRCBjb250cm9sbGVyIGZvciA4MDB4NjAwIDE2YnBwIFRGVC1MQ0QKKy0gTVEtMjAwIGRyaXZlciBmb3IgODAweDYwMCAxNmJwcCBURlQtTENECistIFBlbm1vdW50KHRvdWNoIHBhbmVsKSBkcml2ZXIKKy0gUENNQ0lBIGRyaXZlcgorLSBTTUM5MUM5NCBMQU4gZHJpdmVyCistIElERSBkcml2ZXIgKGV4cGVyaW1lbnRhbCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9UaWZvbiBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9UaWZvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE5MzRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1RpZm9uCkBAIC0wLDAgKzEsNyBAQAorVGlmb24KKy0tLS0tCisKK01vcmUgaW5mbyBoYXMgdG8gY29tZS4uLgorCitDb250YWN0OiBQZXRlciBEYW5pZWxzc29uIDxwZXRlci5kYW5pZWxzc29uQGVyYS10LmVyaWNzc29uLnNlPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvVmljdG9yIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1ZpY3RvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWU4MWZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1ZpY3RvcgpAQCAtMCwwICsxLDE2IEBACitWaWN0b3IgaXMga25vd24gYXMgYSAiZGlnaXRhbCB0YWxraW5nIGJvb2sgcGxheWVyIiBtYW51ZmFjdHVyZWQgYnkKK1Zpc3VBaWRlLCBJbmMuIHRvIGJlIHVzZWQgYnkgYmxpbmQgcGVvcGxlLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIFZpY3Rvciwgc2VlOgorCisJaHR0cDovL3d3dy52aXN1YWlkZS5jb20vdmljdG9yCisKK09mIGNvdXJzZSBWaWN0b3IgaXMgdXNpbmcgTGludXggYXMgaXRzIG1haW4gb3BlcmF0aW5nIHN5c3RlbS4KK1RoZSBWaWN0b3IgaW1wbGVtZW50YXRpb24gZm9yIExpbnV4IGlzIG1haW50YWluZWQgYnkgTmljb2xhcyBQaXRyZToKKworCW5pY29AdmlzdWFpZGUuY29tCisJbmljb0BjYW0ub3JnCisKK0ZvciBhbnkgY29tbWVudHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29udGFjdCBtZSB0aHJvdWdoIHRoZSBhYm92ZQorYWRkcmVzc2VzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvWW9weSBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9Zb3B5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNGYxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvWW9weQpAQCAtMCwwICsxLDIgQEAKK1NlZSBodHRwOi8vd3d3LnlvcHlkZXZlbG9wZXIub3JnIGZvciBtb3JlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvZW1wZWcgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvZW1wZWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjZTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9lbXBlZwpAQCAtMCwwICsxLDIgQEAKK1NlZSAuLi9lbXBlZy9SRUFETUUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL25hbm9FbmdpbmUgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvbmFub0VuZ2luZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQzMWNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL25hbm9FbmdpbmUKQEAgLTAsMCArMSwxMSBAQAorbmFub0VuZ2luZQorLS0tLS0tLS0tLQorCisibmFub0VuZ2luZSIgaXMgYSBTQTExMTAgYmFzZWQgc2luZ2xlIGJvYXJkIGNvbXB1dGVyIGZyb20gCitCcmlnaHQgU3RhciBFbmdpbmVlcmluZyBJbmMuICBTZWUgd3d3LmJyaWdodHN0YXJlbmcuY29tL2FybQorZm9yIG1vcmUgaW5mby4KKyhSZWY6IFN0dWFydCBBZGFtcyA8c2phQGJyaWdodHN0YXJlbmcuY29tPikKKworQWxzbyB2aXNpdCBMYXJyeSBEb29saXR0bGUncyAiTGludXggZm9yIHRoZSBuYW5vRW5naW5lIiBzaXRlOgoraHR0cDovL3JlY3ljbGUubGJsLmdvdi9+bGRvb2xpdHQvYnNlLworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvc2VyaWFsX1VBUlQgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvc2VyaWFsX1VBUlQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhMmU5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9zZXJpYWxfVUFSVApAQCAtMCwwICsxLDQ3IEBACitUaGUgU0ExMTAwIHNlcmlhbCBwb3J0IGhhZCBpdHMgbWFqb3IvbWlub3IgbnVtYmVycyBvZmZpY2lhbGx5IGFzc2lnbmVkOgorCis+IERhdGU6IFN1biwgMjQgU2VwIDIwMDAgMjE6NDA6MjcgLTA3MDAKKz4gRnJvbTogSC4gUGV0ZXIgQW52aW4gPGhwYUB0cmFuc21ldGEuY29tPgorPiBUbzogTmljb2xhcyBQaXRyZSA8bmljb0BDQU0uT1JHPgorPiBDYzogRGV2aWNlIExpc3QgTWFpbnRhaW5lciA8ZGV2aWNlQGxhbmFuYS5vcmc+Cis+IFN1YmplY3Q6IFJlOiBkZXZpY2UKKz4gCis+IE9rYXkuICBOb3RlIHRoYXQgZGV2aWNlIG51bWJlcnMgMjA0IGFuZCAyMDUgYXJlIHVzZWQgZm9yICJsb3cgZGVuc2l0eQorPiBzZXJpYWwgZGV2aWNlcyIsIHNvIHlvdSB3aWxsIGhhdmUgYSByYW5nZSBvZiBtaW5vcnMgb24gdGhvc2UgbWFqb3JzICh0aGUKKz4gdHR5IGRldmljZSBsYXllciBoYW5kbGVzIHRoaXMganVzdCBmaW5lLCBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAorPiBkb2luZyBhbnl0aGluZyBzcGVjaWFsLikKKz4gCis+IFNvIHlvdXIgYXNzaWdubWVudHMgYXJlOgorPiAKKz4gMjA0IGNoYXIgICAgICAgIExvdy1kZW5zaXR5IHNlcmlhbCBwb3J0cworPiAgICAgICAgICAgICAgICAgICA1ID0gL2Rldi90dHlTQTAgICAgICAgICAgICAgICBTQTExMDAgYnVpbHRpbiBzZXJpYWwgcG9ydCAwCis+ICAgICAgICAgICAgICAgICAgIDYgPSAvZGV2L3R0eVNBMSAgICAgICAgICAgICAgIFNBMTEwMCBidWlsdGluIHNlcmlhbCBwb3J0IDEKKz4gICAgICAgICAgICAgICAgICAgNyA9IC9kZXYvdHR5U0EyICAgICAgICAgICAgICAgU0ExMTAwIGJ1aWx0aW4gc2VyaWFsIHBvcnQgMgorPiAKKz4gMjA1IGNoYXIgICAgICAgIExvdy1kZW5zaXR5IHNlcmlhbCBwb3J0cyAoYWx0ZXJuYXRlIGRldmljZSkKKz4gICAgICAgICAgICAgICAgICAgNSA9IC9kZXYvY3VzYTAgICAgICAgICAgICAgICAgQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNBMAorPiAgICAgICAgICAgICAgICAgICA2ID0gL2Rldi9jdXNhMSAgICAgICAgICAgICAgICBDYWxsb3V0IGRldmljZSBmb3IgdHR5U0ExCis+ICAgICAgICAgICAgICAgICAgIDcgPSAvZGV2L2N1c2EyICAgICAgICAgICAgICAgIENhbGxvdXQgZGV2aWNlIGZvciB0dHlTQTIKKz4KKworSWYgeW91J3JlIG5vdCB1c2luZyBkZXZmcywgeW91IG11c3QgY3JlYXRlIHRob3NlIGlub2RlcyBpbiAvZGV2CitvbiB0aGUgcm9vdCBmaWxlc3lzdGVtIHVzZWQgYnkgeW91ciBTQTExMDAtYmFzZWQgZGV2aWNlOgorCisJbWtub2QgdHR5U0EwIGMgMjA0IDUKKwlta25vZCB0dHlTQTEgYyAyMDQgNgorCW1rbm9kIHR0eVNBMiBjIDIwNCA3CisJbWtub2QgY3VzYTAgYyAyMDUgNQorCW1rbm9kIGN1c2ExIGMgMjA1IDYKKwlta25vZCBjdXNhMiBjIDIwNSA3CisKK0luIGFkZGl0aW9uIHRvIHRoZSBjcmVhdGlvbiBvZiB0aGUgYXBwcm9wcmlhdGUgZGV2aWNlIG5vZGVzIGFib3ZlLCB5b3UKK211c3QgZW5zdXJlIHlvdXIgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMgbWFrZSB1c2Ugb2YgdGhlIGNvcnJlY3QgZGV2aWNlCituYW1lLiBUaGUgY2xhc3NpYyBleGFtcGxlIGlzIHRoZSBjb250ZW50IG9mIHRoZSAvZXRjL2luaXR0YWIgZmlsZSB3aGVyZQoreW91IG1pZ2h0IGhhdmUgYSBnZXR0eSBwcm9jZXNzIHN0YXJ0ZWQgb24gdHR5UzAuICBJbiB0aGlzIGNhc2U6CisKKy0gcmVwbGFjZSBvY2N1cnJlbmNlcyBvZiB0dHlTMCB3aXRoIHR0eVNBMCwgdHR5UzEgd2l0aCB0dHlTQTEsIGV0Yy4KKworLSBkb24ndCBmb3JnZXQgdG8gYWRkICd0dHlTQTAnLCAnY29uc29sZScsIG9yIHRoZSBhcHByb3ByaWF0ZSB0dHkgbmFtZQorICBpbiAvZXRjL3NlY3VyZXR0eSBmb3Igcm9vdCB0byBiZSBhbGxvd2VkIHRvIGxvZ2luIGFzIHdlbGwuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0VCMjQxMElUWC50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvRUIyNDEwSVRYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDBlM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0VCMjQxMElUWC50eHQKQEAgLTAsMCArMSw1OCBAQAorCQlTaW10ZWMgRWxlY3Ryb25pY3MgRUIyNDEwSVRYIChCQVNUKQorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCisgIFRoZSBFQjI0MTBJVFggaXMgYSBTM0MyNDEwIGJhc2VkIGRldmVsb3BtZW50IGJvYXJkIHdpdGggYSB2YXJpZXR5IG9mCisgIHBlcmlwaGVyYWxzIGFuZCBleHBhbnNpb24gY29ubmVjdG9ycy4gVGhpcyBib2FyZCBpcyBhbHNvIGtub3duIGJ5CisgIHRoZSBzaG9ydGVuZWQgbmFtZSBvZiBCYXN0LgorCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworICBUbyBzZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgdXNlIGBtYWtlIGJhc3RfZGVmY29uZmlnYCB3aGljaAorICBzdXBwb3J0cyB0aGUgY29tbW9ubHkgdXNlZCBmZWF0dXJlcyBvZiB0aGlzIGJvYXJkLgorCisKK1N1cHBvcnQKKy0tLS0tLS0KKworICBPZmZpY2lhbCBzdXBwb3J0IGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBvbiB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzCisgIHdlYnNpdGUsIGF0IHRoZSBwcm9kdWN0IHBhZ2UgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworCisgIFVzZWZ1bCBsaW5rczoKKworICAgIC0gUmVzb3VyY2VzIFBhZ2UgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYL3Jlc291cmNlcy5odG1sCisKKyAgICAtIEJvYXJkIEZBUSBhdCBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjI0MTBJVFgvZmFxLmh0bWwKKworICAgIC0gQm9vdGxvYWRlciBpbmZvIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXQUJMRS9yZXNvdXJjZXMuaHRtbAorICAgICAgYW5kIEZBUSBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0FCTEUvZmFxLmh0bWwKKworCitNVEQKKy0tLQorCisgIFRoZSBOQU5EIGFuZCBOT1Igc3VwcG9ydCBoYXMgYmVlbiBtZXJnZWQgZnJvbSB0aGUgbGludXgtbXRkIHByb2plY3QuCisgIEFueSBwcm9sYmVtcywgc2VlIGh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvIGZvciBtb3JlCisgIGluZm9ybWF0aW9uIG9yIHVwLXRvLWRhdGUgdmVyc2lvbnMgb2YgbGludXgtbXRkLgorCisKK0lERQorLS0tCisKKyAgQm90aCBvbmJvYXJkIElERSBwb3J0cyBhcmUgc3VwcG9ydGVkLCBob3dldmVyIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yCisgIGNoYW5naW5nIHNwZWVkIG9mIGRldmljZXMsIFBJTyBNb2RlIDQgY2FwYWJsZSBkcml2ZXMgc2hvdWxkIGJlIHVzZWQuCisKKworTWFpbnRhaW5lcnMKKy0tLS0tLS0tLS0tCisKKyAgVGhpcyBib2FyZCBpcyBtYWludGFpbmVkIGJ5IFNpbXRlYyBFbGVjdHJvbmljcy4KKworCisoYykgMjAwNCBCZW4gRG9va3MsIFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0dQSU8udHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0dQSU8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjI3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvR1BJTy50eHQKQEAgLTAsMCArMSwxMjIgQEAKKwkJCVMzQzI0MTAgR1BJTyBDb250cm9sCisJCQk9PT09PT09PT09PT09PT09PT09PQorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCisgIFRoZSBzM2MyNDEwIGtlcm5lbCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gY29uZmlndXJlIGFuZAorICBtYW5pcHVsYXRlIHRoZSBzdGF0ZSBvZiB0aGUgR1BJTyBwaW5zLCBhbmQgZmluZCBvdXQgb3RoZXIKKyAgaW5mb3JtYXRpb24gYWJvdXQgdGhlbS4KKworICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgY29uZGl0aW9ucyBhdHRhY2hlZCB0byB0aGUgY29uZmlndXJhdGlvbgorICBvZiB0aGUgczNjMjQxMCBHUElPIHN5c3RlbSwgcGxlYXNlIHJlYWQgdGhlIFNhbXN1bmcgcHJvdmlkZWQKKyAgZGF0YS1zaGVldC91c2VycyBtYW51YWwgdG8gZmluZCBvdXQgdGhlIGNvbXBsZXRlIGxpc3QuCisKKworSGVhZGVycworLS0tLS0tLQorCisgIFNlZSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oIGZvciB0aGUgbGlzdAorICBvZiBHUElPIHBpbnMsIGFuZCB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHRoZW0uIFRoaXMKKyAgaXMgaW5jbHVkZWQgYnkgdXNpbmcgI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorCisgIFRoZSBHUElPIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHRoZSBoYXJkd2FyZQorICBoZWFkZXIgaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oYXJkd2FyZS5oIHdoaWNoIGNhbiBiZQorICBpbmNsdWRlZCBieSAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworICBBIHVzZWZ1bCBhbW1vdW50IG9mIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBoYXJkd2FyZQorICBoZWFkZXIgb24gaG93IHRoZSBHUElPIGZ1bmN0aW9ucyAoYW5kIG90aGVycykgd29yay4KKworICBXaGlsc3QgYSBudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGRvIG1ha2Ugc29tZSBjaGVja3Mgb24gd2hhdAorICBpcyBwYXNzZWQgdG8gdGhlbSwgZm9yIHNwZWVkIG9mIHVzZSwgdGhleSBtYXkgbm90IGFsd2F5cyBlbnN1cmUKKyAgdGhhdCB0aGUgdXNlciBzdXBwbGllZCBkYXRhIHRvIHRoZW0gaXMgY29ycmVjdC4KKworCitQSU4gTnVtYmVycworLS0tLS0tLS0tLS0KKworICBFYWNoIHBpbiBoYXMgYW4gdW5pcXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggaXQgaW4gcmVncy1ncGlvLmgsCisgIGVnIFMzQzI0MTBfR1BBMCBvciBTM0MyNDEwX0dQRjEuIFRoZXNlIGRlZmluZXMgYXJlIHVzZWQgdG8gdGVsbAorICB0aGUgR1BJTyBmdW5jdGlvbnMgd2hpY2ggcGluIGlzIHRvIGJlIHVzZWQuCisKKworQ29uZmlndXJpbmcgYSBwaW4KKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiBwaW4gdG8KKyAgYmUgY2hhbmdlZC4KKworICAgIHZvaWQgczNjMjQxMF9ncGlvX2NmZ3Bpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pOworCisgIEVnOgorCisgICAgIHMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEEwLCBTM0MyNDEwX0dQQTBfQUREUjApOworICAgICBzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFOCwgUzNDMjQxMF9HUEU4X1NEREFUMSk7CisKKyAgIHdoaWNoIHdvdWxkIHR1cm4gR1BBMCBpbnRvIHRoZSBsb3dlc3QgQWRkcmVzcyBsaW5lIEEwLCBhbmQgc2V0CisgICBHUEU4IHRvIGJlIGNvbm5lY3RlZCB0byB0aGUgU0RJTy9NTUMgY29udHJvbGxlcidzIFNEREFUMSBsaW5lLgorCisKK1JlYWRpbmcgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiBhIHBpbiBjYW4gYmUgcmVhZCBieSB1c2luZzoKKworICBzM2MyNDEwX2dwaW9fZ2V0Y2ZnKHVuc2lnbmVkIGludCBwaW4pOworCisgIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBmcm9tIHRoZSBzYW1lIHNldCBvZiB2YWx1ZXMgd2hpY2ggY2FuIGJlCisgIHBhc3NlZCB0byBzM2MyNDEwX2dwaW9fY2ZncGluKCkuCisKKworQ29uZmlndXJpbmcgYSBwdWxsLXVwIHJlc2lzdG9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBBIGxhcmdlIHByb3BvcnRpb24gb2YgdGhlIEdQSU8gcGlucyBvbiB0aGUgUzNDMjQxMCBjYW4gaGF2ZSB3ZWFrCisgIHB1bGwtdXAgcmVzaXN0b3JzIGVuYWJsZWQuIFRoaXMgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgdGhlIGZvbGxvd2luZworICBmdW5jdGlvbjoKKworICAgIHZvaWQgczNjMjQxMF9ncGlvX3B1bGx1cCh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgdG8pOworCisgIFdoZXJlIHRoZSB0byB2YWx1ZSBpcyB6ZXJvIHRvIHNldCB0aGUgcHVsbC11cCBvZmYsIGFuZCAxIHRvIGVuYWJsZQorICB0aGUgc3BlY2lmaWVkIHB1bGwtdXAuIEFueSBvdGhlciB2YWx1ZXMgYXJlIGN1cnJlbnRseSB1bmRlZmluZWQuCisKKworR2V0dGluZyB0aGUgc3RhdGUgb2YgYSBQSU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIHN0YXRlIG9mIGEgcGluIGNhbiBiZSByZWFkIGJ5IHVzaW5nIHRoZSBmdW5jdGlvbjoKKworICAgIHVuc2lnbmVkIGludCBzM2MyNDEwX2dwaW9fZ2V0cGluKHVuc2lnbmVkIGludCBwaW4pOworCisgIFRoaXMgd2lsbCByZXR1cm4gZWl0aGVyIHplcm8gb3Igbm9uLXplcm8uIERvIG5vdCBjb3VudCBvbiB0aGlzCisgIGZ1bmN0aW9uIHJldHVybmluZyAxIGlmIHRoZSBwaW4gaXMgc2V0LgorCisKK1NldHRpbmcgdGhlIHN0YXRlIG9mIGEgUElOCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSB2YWx1ZSBhbiBwaW4gaXMgb3V0cHV0aW5nIGNhbiBiZSBtb2RpZmllZCBieSB1c2luZyB0aGUgZm9sbG93aW5nOgorCisgICAgdm9pZCBzM2MyNDEwX2dwaW9fc2V0cGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0byk7CisKKyAgV2hpY2ggc2V0cyB0aGUgZ2l2ZW4gcGluIHRvIHRoZSB2YWx1ZS4gVXNlIDAgdG8gd3JpdGUgMCwgYW5kIDEgdG8KKyAgc2V0IHRoZSBvdXRwdXQgdG8gMS4KKworCitHZXR0aW5nIHRoZSBJUlEgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBhIFBJTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbiBtYXAgdGhlIGdpdmVuIHBpbiBudW1iZXIgdG8gYW4gSVJRCisgIG51bWJlciB0byBwYXNzIHRvIHRoZSBJUlEgc3lzdGVtLgorCisgICBpbnQgczNjMjQxMF9ncGlvX2dldGlycSh1bnNpZ25lZCBpbnQgcGluKTsKKworICBOb3RlLCBub3QgYWxsIHBpbnMgaGF2ZSBhbiBJUlEuCisKKworQXV0aG91cgorLS0tLS0tLQorCisKK0JlbiBEb29rcywgMDMgT2N0b2JlciAyMDA0CisoYykgMjAwNCBCZW4gRG9va3MsIFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0gxOTQwLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9IMTk0MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiMWRlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9IMTk0MC50eHQKQEAgLTAsMCArMSw0MCBAQAorCQlIUCBJUEFRIEgxOTQwCisJCT09PT09PT09PT09PT0KKworaHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL3Byb2plY3RzL2gxOTQwLmh0bWwKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworICBUaGUgSFAgSDE5NDAgaXMgYSBTM0MyNDEwIGJhc2VkIGhhbmRoZWxkIGRldmljZSwgd2l0aAorICBibHVldG9vdGggY29ubmVjdGl2aXR5LgorCisKK1N1cHBvcnQKKy0tLS0tLS0KKworICBBIHZhcmlldHkgb2YgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlCisKKyAgaGFuZGhlbGRzLm9yZyBwcm9qZWN0IHBhZ2U6CisKKyAgICBodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvcHJvamVjdHMvaDE5NDAuaHRtbAorCisgIGhhbmRoZWxkcy5vcmcgd2lraSBwYWdlOgorCisgICAgaHR0cDovL2hhbmRoZWxkcy5vcmcvbW9pbi9tb2luLmNnaS9IcElwYXFIMTk0MAorCisgIEhlcmJlcnQgUPZ0emwgcGFnZXM6CisKKyAgICBodHRwOi8vdnNlcnZlci4xM3RoZmxvb3IuYXQvSDE5NDAvCisKKworTWFpbnRhaW5lcnMKKy0tLS0tLS0tLS0tCisKKyAgVGhpcyBwcm9qZWN0IGlzIGJlaW5nIG1haW50YWluZWQgYW5kIGRldmVsb3BlZCBieSBhIHZhcmlldHkKKyAgb2YgcGVvcGxlLCBpbmNsdWRpbmcgQmVuIERvb2tzLCBBcm5hdWQgUGF0YXJkLCBhbmQgSGVyYmVydCBQ9nR6bC4KKworICBUaGFua3MgdG8gdGhlIG1hbnkgb3RoZXJzIHdobyBoYXZlIGFsc28gcHJvdmlkZWQgc3VwcG9ydC4KKworCisoYykgMjAwNSBCZW4gRG9va3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL092ZXJ2aWV3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWY0ZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL092ZXJ2aWV3LnR4dApAQCAtMCwwICsxLDE1NiBAQAorCQkJUzNDMjRYWCBBUk0gTGludXggT3ZlcnZpZXcKKwkJCT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCisgIFRoZSBTYW1zdW5nIFMzQzI0WFggcmFuZ2Ugb2YgQVJNOSBTeXN0ZW0tb24tQ2hpcCBDUFVzIGFyZSBzdXBwb3J0ZWQKKyAgYnkgdGhlICdzM2MyNDEwJyBhcmNoaXRlY3R1cmUgb2YgQVJNIExpbnV4LiBDdXJyZW50bHkgdGhlIFMzQzI0MTAgYW5kCisgIHRoZSBTM0MyNDQwIGFyZSBzdXBwb3J0ZWQgQ1BVcy4KKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKKyAgQSBnZW5lcmljIFMzQzI0MTAgY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZCwgYW5kIGNhbiBiZSB1c2VkIGFzIHRoZQorICBkZWZhdWx0IGJ5IGBtYWtlIHMzYzI0MTBfZGVmY29uZmlnYC4gVGhpcyBjb25maWd1cmF0aW9uIGhhcyBzdXBwb3J0CisgIGZvciBhbGwgdGhlIG1hY2hpbmVzLCBhbmQgdGhlIGNvbW1vbmx5IHVzZWQgZmVhdHVyZXMgb24gdGhlbS4KKworICBDZXJ0YWluIG1hY2hpbmVzIG1heSBoYXZlIHRoZWlyIG93biBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGFzIHdlbGwsCisgIHBsZWFzZSBjaGVjayB0aGUgbWFjaGluZSBzcGVjaWZpYyBkb2N1bWVudGF0aW9uLgorCisKK01hY2hpbmVzCistLS0tLS0tLQorCisgIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIG1hY2hpbmVzIGFyZSBhcyBmb2xsb3dzOgorCisgIFNpbXRlYyBFbGVjdHJvbmljcyBFQjI0MTBJVFggKEJBU1QpCisKKyAgICBBIGdlbmVyYWwgcHVycG9zZSBkZXZlbG9wbWVudCBib2FyZCwgc2VlIEVCMjQxMElUWC50eHQgZm9yIGZ1cnRoZXIKKyAgICBkZXRhaWxzCisKKyAgU2Ftc3VuZyBTTURLMjQxMAorCisgICAgU2Ftc3VuZydzIG93biBkZXZlbG9wbWVudCBib2FyZCwgZ2VhcmVkIGZvciBQREEgd29yay4KKworICBTYW1zdW5nL01lcml0ZWNoIFNNREsyNDQwCisKKyAgICBUaGUgUzNDMjQ0MCBjb21wYXRpYmxlIHZlcnNpb24gb2YgdGhlIFNNREsyNDQwCisKKyAgVGhvcmNvbSBWUjEwMDAKKworICAgIEN1c3RvbSBlbWJlZGRlZCBib2FyZAorCisgIEhQIElQQVEgMTk0MAorCisgICAgSGFuZGhlbGQgKElQQVEpLCBhdmFpbGFibGUgaW4gc2V2ZXJhbCB2YXJpZXRpZXMKKworICBIUCBpUEFRIHJ4MzcxNQorCisgICAgUzNDMjQ0MCBiYXNlZCBJUEFRLCB3aXRoIGEgbnVtYmVyIG9mIHZhcmlhdGlvbnMgZGVwZW5kaW5nIG9uCisgICAgZmVhdHVyZXMgc2hpcHBlZC4KKworICBBY2VyIE4zMAorCisgICAgQSBTM0MyNDEwIGJhc2VkIFBEQSBmcm9tIEFjZXIuICBUaGVyZSBpcyBhIFdpa2kgcGFnZSBhdAorICAgIGh0dHA6Ly9oYW5kaGVsZHMub3JnL21vaW4vbW9pbi5jZ2kvQWNlck4zMERvY3VtZW50YXRpb24gLgorCisKK0FkZGluZyBOZXcgTWFjaGluZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgYXJjaGljdHVyZSBoYXMgYmVlbiBkZXNpZ25lZCB0byBzdXBwb3J0IGFzIG1hbnkgbWFjaGluZXMgYXMgY2FuCisgIGJlIGNvbmZpZ3VyZWQgZm9yIGl0IGluIG9uZSBrZXJuZWwgYnVpbGQsIGFuZCBhbnkgZnV0dXJlIGFkZGl0aW9ucworICBzaG91bGQga2VlcCB0aGlzIGluIG1pbmQgYmVmb3JlIGFsdGVyaW5nIGl0ZW1zIG91dHNpZGUgb2YgdGhlaXIgb3duCisgIG1hY2hpbmUgZmlsZXMuCisKKyAgTWFjaGluZSBkZWZpbml0aW9ucyBzaG91bGQgYmUga2VwdCBpbiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAsCisgIGFuZCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgZXhhbXBsZXMgdGhhdCBjYW4gYmUgbG9va2VkIGF0LgorCisgIFJlYWQgdGhlIGtlcm5lbCBwYXRjaCBzdWJtaXNzaW9uIHBvbGljaWVzIGFzIHdlbGwgYXMgdGhlCisgIERvY3VtZW50YXRpb24vYXJtIGRpcmVjdG9yeSBiZWZvcmUgc3VibWl0dGluZyBwYXRjaGVzLiBUaGUKKyAgQVJNIGtlcm5lbCBzZXJpZXMgaXMgbWFuYWdlZCBieSBSdXNzZWxsIEtpbmcsIGFuZCBoYXMgYSBwYXRjaCBzeXN0ZW0KKyAgbG9jYXRlZCBhdCBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL3BhdGNoZXMvCisgIGFzIHdlbGwgYXMgbWFpbGluZyBsaXN0cyB0aGF0IGNhbiBiZSBmb3VuZCBmcm9tIHRoZSBzYW1lIHNpdGUuCisKKyAgQXMgYSBjb3VydGVzeSwgcGxlYXNlIG5vdGlmeSA8YmVuLWxpbnV4QGZsdWZmLm9yZz4gb2YgYW55IG5ldworICBtYWNoaW5lcyBvciBvdGhlciBtb2RpZmljYXRpb25zLgorCisgIEFueSBsYXJnZSBzY2FsZSBtb2RpZmljYXRpb25zLCBvciBuZXcgZHJpdmVycyBzaG91bGQgYmUgZGlzY3Vzc2VkCisgIG9uIHRoZSBBUk0ga2VybmVsIG1haWxpbmcgbGlzdCAobGludXgtYXJtLWtlcm5lbCkgYmVmb3JlIGJlaW5nCisgIGF0dGVtcHRlZC4KKworCitOQU5ECistLS0tCisKKyAgVGhlIGN1cnJlbnQga2VybmVscyBub3cgaGF2ZSBzdXBwb3J0IGZvciB0aGUgczNjMjQxMCBOQU5ECisgIGNvbnRyb2xsZXIuIElmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgdGhlIGxhdGVzdCBsaW51eC1tdGQKKyAgQ1ZTIGNhbiBiZSBmb3VuZCBmcm9tIGh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvCisKKworU2VyaWFsCistLS0tLS0KKworICBUaGUgczNjMjQxMCBzZXJpYWwgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBpbnRlcm5hbAorICBzZXJpYWwgcG9ydHMuIFRoZXNlIGRldmljZXMgYXBwZWFyIGFzIC9kZXYvdHR5U0FDMCB0aHJvdWdoIDMuCisKKyAgVG8gY3JlYXRlIGRldmljZSBub2RlcyBmb3IgdGhlc2UsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzCisKKyAgICBta25vZCB0dHlTQUMwIGMgMjA0IDY0CisgICAgbWtub2QgdHR5U0FDMSBjIDIwNCA2NQorICAgIG1rbm9kIHR0eVNBQzIgYyAyMDQgNjYKKworCitHUElPCistLS0tCisKKyAgVGhlIGNvcmUgY29udGFpbnMgc3VwcG9ydCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBHUElPLCBzZWUgdGhlCisgIGRvY3VtZW50YXRpb24gaW4gR1BJTy50eHQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMgZmlsZS4KKworCitDbG9jayBNYW5hZ2VtZW50CistLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGNvcmUgcHJvdmlkZXMgdGhlIGludGVyZmFjZSBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZQorICBpbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvY2xvY2suaCwgdG8gYWxsb3cgY29udHJvbCBvdmVyIHRoZQorICB2YXJpb3VzIGNsb2NrIHVuaXRzCisKKworUG9ydCBDb250cmlidXRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQmVuIERvb2tzIChCSkQpCisgIFZpbmNlbnQgU2FuZGVycworICBIZXJiZXJ0IFBvdHpsCisgIEFybmF1ZCBQYXRhcmQgKFJUUCkKKyAgUm9jIFd1CisgIEtsYXVzIEZldHNjaGVyCisgIERpbWl0cnkgQW5kcmljCisgIFNoYW5ub24gSG9sbGFuZAorICBHdWlsbGF1bWUgR291cmF0IChOZXhWaXNpb24pCisgIENocmlzdGVyIFdlaW5pZ2VsICh3aW5nZWwpIChBY2VyIE4zMCkKKyAgTHVjYXMgQ29ycmVpYSBWaWxsYSBSZWFsIChTM0MyNDAwIHBvcnQpCisKKworRG9jdW1lbnQgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLQorCisgIDA1IFNlcCAyMDA0IC0gQkpEIC0gQWRkZWQgRG9jdW1lbnQgQ2hhbmdlcyBzZWN0aW9uCisgIDA1IFNlcCAyMDA0IC0gQkpEIC0gQWRkZWQgS2xhdXMgRmV0c2NoZXIgdG8gbGlzdCBvZiBjb250cmlidXRvcnMKKyAgMjUgT2N0IDIwMDQgLSBCSkQgLSBBZGRlZCBEaW1pdHJ5IEFuZHJpYyB0byBsaXN0IG9mIGNvbnRyaWJ1dG9ycworICAyNSBPY3QgMjAwNCAtIEJKRCAtIFVwZGF0ZWQgdGhlIE1URCBmcm9tIHRoZSAyLjYuOSBtZXJnZQorICAyMSBKYW4gMjAwNSAtIEJKRCAtIEFkZGVkIHJ4MzcxNSwgYWRkZWQgU2hhbm5vbiB0byBjb250cmlidXRvcnMKKyAgMTAgRmViIDIwMDUgLSBCSkQgLSBBZGRlZCBHdWlsbGF1bWUgR291cmF0IHRvIGNvbnRyaWJ1dG9ycworICAwMiBNYXIgMjAwNSAtIEJKRCAtIEFkZGVkIFNNREsyNDQwIHRvIGxpc3Qgb2YgbWFjaGluZXMKKyAgMDYgTWFyIDIwMDUgLSBCSkQgLSBBZGRlZCBDaHJpc3RlciBXZWluaWdlbAorICAwOCBNYXIgMjAwNSAtIEJKRCAtIEFkZGVkIExDVlIgdG8gbGlzdCBvZiBwZW9wbGUsIHVwZGF0ZWQgaW50cm9kdWN0aW9uCisgIDA4IE1hciAyMDA1IC0gQkpEIC0gQWRkZWQgc2VjdGlvbiBvbiBhZGRpbmcgbWFjaGluZXMKKworRG9jdW1lbnQgQXV0aG9yCistLS0tLS0tLS0tLS0tLS0KKworQmVuIERvb2tzLCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1NNREsyNDQwLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TTURLMjQ0MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlMWVhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TTURLMjQ0MC50eHQKQEAgLTAsMCArMSw1NiBAQAorCQlTYW1zdW5nL01lcml0ZWNoIFNNREsyNDQwCisJCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworICBUaGUgU01ESzI0NDAgaXMgYSB0d28gcGFydCBldmFsdWF0aW9uIGJvYXJkIGZvciB0aGUgU2Ftc3VuZyBTM0MyNDQwCisgIHByb2Nlc3Nvci4gSXQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgTENELCBTbWFydE1lZGlhLCBBdWRpbywgU0QgYW5kCisgIDEwTUJpdCBFdGhlcm5ldCwgYW5kIGV4cGFuc2lvbiBoZWFkZXJzIGZvciB2YXJpb3VzIHNpZ25hbHMsIGluY2x1ZGluZworICB0aGUgY2FtZXJhIGFuZCB1bnVzZWQgR1BJTy4KKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKKyAgVG8gc2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHVzZSBgbWFrZSBzbWRrMjQ0MF9kZWZjb25maWdgIHdoaWNoCisgIHdpbGwgY29uZmlndXJlIHRoZSBjb21tb24gZmVhdHVyZXMgb2YgdGhpcyBib2FyZCwgb3IgdXNlCisgIGBtYWtlIHMzYzI0MTBfY29uZmlnYCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGFsbCBzM2MyNDEwL3MzYzI0NDAgbWFjaGluZXMKKworCitTdXBwb3J0CistLS0tLS0tCisKKyAgQmVuIERvb2tzJyBTTURLMjQ0MCBzaXRlIGF0IGh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9zbWRrMjQ0MC8gd2hpY2gKKyAgaW5jbHVkZXMgbGludXggYmFzZWQgVVNCIGRvd25sb2FkIHRvb2xzLgorCisgIFNvbWUgb2YgdGhlIGgxOTQwIHBhdGNoZXMgdGhhdCBjYW4gYmUgZm91bmQgZnJvbSB0aGUgSDE5NDAgcHJvamVjdAorICBzaXRlIGF0IGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9wcm9qZWN0cy9oMTk0MC5odG1sIGNhbiBhbHNvIGJlCisgIGFwcGxpZWQgdG8gdGhpcyBib2FyZC4KKworCitQZXJpcGhlcmFscworLS0tLS0tLS0tLS0KKworICBUaGVyZSBpcyBubyBjdXJyZW50IHN1cHBvcnQgZm9yIGFueSBvZiB0aGUgZXh0cmEgcGVyaXBoZXJhbHMgb24gdGhlCisgIGJhc2UtYm9hcmQgaXRzZWxmLgorCisKK01URAorLS0tCisKKyAgVGhlIE5BTkQgZmxhc2ggc2hvdWxkIGJlIHN1cHBvcnRlZCBieSB0aGUgaW4ga2VybmVsIE1URCBOQU5EIHN1cHBvcnQsCisgIE5PUiBmbGFzaCB3aWxsIGJlIGFkZGVkIGxhdGVyLgorCisKK01haW50YWluZXJzCistLS0tLS0tLS0tLQorCisgIFRoaXMgYm9hcmQgaXMgYmVpbmcgbWFpbnRhaW5lZCBieSBCZW4gRG9va3MsIGZvciBtb3JlIGluZm8sIHNlZQorICBodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vc21kazI0NDAvCisKKyAgTWFueSB0aGFua3MgdG8gRGltaXRyeSBBbmRyaWMgb2YgVG9tVG9tIGZvciB0aGUgbG9hbiBvZiB0aGUgU01ESzI0NDAsCisgIGFuZCB0byBTaW10ZWMgRWxlY3Ryb25pY3MgZm9yIGFsbG93aW5nIG1lIHRpbWUgdG8gd29yayBvbiB0aGlzLgorCisKKyhjKSAyMDA0IEJlbiBEb29rcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTJiYzMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0CkBAIC0wLDAgKzEsMTA2IEBACisJCQlTM0MyNFhYIFN1c3BlbmQgU3VwcG9ydAorCQkJPT09PT09PT09PT09PT09PT09PT09PT0KKworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCisgIFRoZSBTM0MyNDEwIHN1cHBvcnRzIGEgbG93LXBvd2VyIHN1c3BlbmQgbW9kZSwgd2hlcmUgdGhlIFNEUkFNIGlzIGtlcHQKKyAgaW4gU2VsZi1SZWZyZXNoIG1vZGUsIGFuZCBhbGwgYnV0IHRoZSBlc3NlbnRpYWwgcGVyaXBoZXJhbCBibG9ja3MgYXJlCisgIHBvd2VyZWQgZG93bi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgd29ya3MsIHBsZWFzZSBsb29rCisgIGF0IHRoZSBTM0MyNDEwIGRhdGFzaGVldHMgZnJvbSBTYW1zdW5nLgorCisKK1JlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tCisKKyAgMSkgQSBib290bG9hZGVyIHRoYXQgY2FuIHN1cHBvcnQgdGhlIG5lY2Vzc2FyeSByZXN1bWUgb3BlcmF0aW9uCisKKyAgMikgU3VwcG9ydCBmb3IgYXQgbGVhc3QgMSBzb3VyY2UgZm9yIHJlc3VtZQorCisgIDMpIENPTkZJR19QTSBlbmFibGVkIGluIHRoZSBrZXJuZWwKKworICA0KSBBbnkgcGVyaXBoZXJhbHMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgcG93ZXJlZCBkb3duIGF0IHRoZSBzYW1lCisgICAgIHRpbWUgcmVxdWlyZSBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0LgorCisKK1Jlc3VtaW5nCistLS0tLS0tLQorCisgIFRoZSBTM0MyNDEwIHVzZXIgbWFudWFsIGRlZmluZXMgdGhlIHByb2Nlc3Mgb2Ygc2VuZGluZyB0aGUgQ1BVIHRvCisgIHNsZWVwIGFuZCBob3cgaXQgcmVzdW1lcy4gVGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHRoZSBMaW51eCBjb2RlCisgIGlzIHRvIHNldCB0aGUgR1NUQVRVUzMgcmVnaXN0ZXIgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlCisgIGNvZGUgdG8gcmVzdW1lIExpbnV4IG9wZXJhdGlvbi4KKworICBHU1RBVFVTNCBpcyBjdXJyZW50bHkgbGVmdCBhbG9uZSBieSB0aGUgc2xlZXAgY29kZSwgYW5kIGlzIGZyZWUgdG8KKyAgdXNlIGZvciBhbnkgb3RoZXIgcHVycG9zZXMgKGZvciBleGFtcGxlLCB0aGUgRUIyNDEwSVRYIHVzZXMgdGhpcyB0bworICBzYXZlIG1lbW9yeSBjb25maWd1cmF0aW9uIGluKS4KKworCitNYWNoaW5lIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBtYWNoaW5lIHNwZWNpZmljIGZ1bmN0aW9ucyBtdXN0IGNhbGwgdGhlIHMzYzI0MTBfcG1faW5pdCgpIGZ1bmN0aW9uCisgIHRvIHNheSB0aGF0IGl0cyBib290bG9hZGVyIGlzIGNhcGFibGUgb2YgcmVzdW1pbmcuIFRoaXMgY2FuIGJlIGFzCisgIHNpbXBsZSBhcyBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUgbWFjaGluZSdzIGRlZmluaXRpb246CisKKyAgSU5JVE1BQ0hJTkUoczNjMjQxMF9wbV9pbml0KQorCisgIEEgYm9hcmQgY2FuIGRvIGl0cyBvd24gc2V0dXAgYmVmb3JlIGNhbGxpbmcgczNjMjQxMF9wbV9pbml0LCBpZiBpdAorICBuZWVkcyB0byBzZXR1cCBhbnl0aGluZyBlbHNlIGZvciBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCisKKyAgVGhlcmUgaXMgY3VycmVudGx5IG5vIHN1cHBvcnQgZm9yIG92ZXItcmlkaW5nIHRoZSBkZWZhdWx0IG1ldGhvZCBvZgorICBzYXZpbmcgdGhlIHJlc3VtZSBhZGRyZXNzLCBpZiB5b3VyIGJvYXJkIHJlcXVpcmVzIGl0LCB0aGVuIGNvbnRhY3QKKyAgdGhlIG1haW50YWluZXIgYW5kIGRpc2N1c3Mgd2hhdCBpcyByZXF1aXJlZC4KKworICBOb3RlLCB0aGUgb3JpZ2luYWwgbWV0aG9kIG9mIGFkZGluZyBhbiBsYXRlX2luaXRjYWxsKCkgaXMgd3JvbmcsCisgIGFuZCB3aWxsIGVuZCB1cCBpbml0aWFsaXNpbmcgYWxsIGNvbXBpbGVkIG1hY2hpbmVzJyBwbSBpbml0IQorCisKK0RlYnVnZ2luZworLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIHNldmVyYWwgaW1wb3J0YW50IHRoaW5ncyB0byByZW1lbWJlciB3aGVuIHVzaW5nIFBNIHN1c3BlbmQ6CisKKyAgMSkgVGhlIHVhcnQgZHJpdmVycyB3aWxsIGRpc2FibGUgdGhlIGNsb2NrcyB0byB0aGUgVUFSVCBibG9ja3Mgd2hlbgorICAgICBzdXNwZW5kaW5nLCB3aGljaCBtZWFucyB0aGF0IHVzZSBvZiBwcmludGFzY2lpKCkgb3Igc2ltaWxhciBkaXJlY3QKKyAgICAgYWNjZXNzIHRvIHRoZSBVQVJUcyB3aWxsIGNhdXNlIHRoZSBkZWJ1ZyB0byBzdG9wLgorCisgIDIpIFdoaWxzdCB0aGUgcG0gY29kZSBpdHNlbGYgd2lsbCBhdHRlbXB0IHRvIHJlLWVuYWJsZSB0aGUgVUFSVCBjbG9ja3MsCisgICAgIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRoYXQgYW55IGV4dGVybmFsIGNsb2NrIHNvdXJjZXMgdGhhdCB0aGUgVUFSVHMKKyAgICAgcmVseSBvbiBhcmUgc3RpbGwgZW5hYmxlZCBhdCB0aGF0IHBvaW50LgorCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworICBUaGUgUzNDMjQxMCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluIGBTeXN0ZW0gVHlwZWAgZGVmaW5lcyB2YXJpb3VzCisgIGFzcGVjdHMgb2YgaG93IHRoZSBTM0MyNDEwIHN1c3BlbmQgYW5kIHJlc3VtZSBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKKworICBgUzNDMjQxMCBQTSBTdXNwZW5kIGRlYnVnYAorCisgICAgVGhpcyBvcHRpb24gcHJpbnRzIG1lc3NhZ2VzIHRvIHRoZSBzZXJpYWwgY29uc29sZSBiZWZvcmUgYW5kIGFmdGVyCisgICAgdGhlIGFjdHVhbCBzdXNwZW5kLCBnaXZpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCBpcworICAgIGhhcHBlbmluZworCisKKyAgYFMzQzI0MTAgUE0gU3VzcGVuZCBNZW1vcnkgQ1JDYAorCisgICAgQWxsb3dzIHRoZSBlbnRpcmUgbWVtb3J5IHRvIGJlIGNoZWNrc3VtbWVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisgICAgc3VzcGVuZCB0byBzZWUgaWYgdGhlcmUgaGFzIGJlZW4gYW55IGNvcnJ1cHRpb24gb2YgdGhlIGNvbnRlbnRzLgorCisgICAgVGhpcyBzdXBwb3J0IHJlcXVpcmVzIHRoZSBDUkMzMiBmdW5jdGlvbiB0byBiZSBlbmFibGVkLgorCisKKyAgYFMzQzI0MTAgUE0gU3VzcGVuZCBDUkMgQ2h1bmtzaXplIChLaUIpYAorCisgICAgRGVmaW5lcyB0aGUgc2l6ZSBvZiBtZW1vcnkgZWFjaCBDUkMgY2h1bmsgY292ZXJzLiBBIHNtYWxsZXIgdmFsdWUKKyAgICB3aWxsIG1lYW4gdGhhdCB0aGUgQ1JDIGRhdGEgYmxvY2sgd2lsbCB0YWtlIG1vcmUgbWVtb3J5LCBidXQgd2lsbAorICAgIGlkZW50aWZ5IGFueSBmYXVsdHMgd2l0aCBiZXR0ZXIgcHJlY2lzaW9uCisKKworRG9jdW1lbnQgQXV0aG9yCistLS0tLS0tLS0tLS0tLS0KKworQmVuIERvb2tzLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2V0dXAgYi9Eb2N1bWVudGF0aW9uL2FybS9TZXR1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWJkMDcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2V0dXAKQEAgLTAsMCArMSwxMjkgQEAKK0tlcm5lbCBpbml0aWFsaXNhdGlvbiBwYXJhbWV0ZXJzIG9uIEFSTSBMaW51eAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcGFyYW1ldGVyCitzdHJ1Y3R1cmUsIG90aGVyd2lzZSBrbm93biBhcyAnc3RydWN0IHBhcmFtX3N0cnVjdCcgd2hpY2ggaXMgdXNlZAorZm9yIG1vc3QgQVJNIExpbnV4IGFyY2hpdGVjdHVyZXMuCisKK1RoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcGFzcyBpbml0aWFsaXNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlCitrZXJuZWwgbG9hZGVyIHRvIHRoZSBMaW51eCBrZXJuZWwgcHJvcGVyLCBhbmQgbWF5IGJlIHNob3J0IGxpdmVkCit0aHJvdWdoIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gIEFzIGEgZ2VuZXJhbCBydWxlLCBpdAorc2hvdWxkIG5vdCBiZSByZWZlcmVuY2VkIG91dHNpZGUgb2YgYXJjaC9hcm0va2VybmVsL3NldHVwLmM6c2V0dXBfYXJjaCgpLgorCitUaGVyZSBhcmUgYSBsb3Qgb2YgcGFyYW1ldGVycyBsaXN0ZWQgaW4gdGhlcmUsIGFuZCB0aGV5IGFyZSBkZXNjcmliZWQKK2JlbG93OgorCisgcGFnZV9zaXplCisKKyAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIHRoZSBwYWdlIHNpemUgb2YgdGhlIG1hY2hpbmUsIGFuZAorICAgd2lsbCBiZSBjaGVja2VkIGJ5IHRoZSBrZXJuZWwuCisKKyBucl9wYWdlcworCisgICBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgb2YgbWVtb3J5IGluIHRoZSBzeXN0ZW0uICBJZgorICAgdGhlIG1lbW9yeSBpcyBiYW5rZWQsIHRoZW4gdGhpcyBzaG91bGQgY29udGFpbiB0aGUgdG90YWwgbnVtYmVyCisgICBvZiBwYWdlcyBpbiB0aGUgc3lzdGVtLgorCisgICBJZiB0aGUgc3lzdGVtIGNvbnRhaW5zIHNlcGFyYXRlIFZSQU0sIHRoaXMgdmFsdWUgc2hvdWxkIG5vdAorICAgaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uLgorCisgcmFtZGlza19zaXplCisKKyAgIFRoaXMgaXMgbm93IG9ic29sZXRlLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgorCisgZmxhZ3MKKworICAgVmFyaW91cyBrZXJuZWwgZmxhZ3MsIGluY2x1ZGluZzoKKyAgICBiaXQgMCAtIDEgPSBtb3VudCByb290IHJlYWQgb25seQorICAgIGJpdCAxIC0gdW51c2VkCisgICAgYml0IDIgLSAwID0gbG9hZCByYW1kaXNrCisgICAgYml0IDMgLSAwID0gcHJvbXB0IGZvciByYW1kaXNrCisKKyByb290ZGV2CisKKyAgIG1ham9yL21pbm9yIG51bWJlciBwYWlyIG9mIGRldmljZSB0byBtb3VudCBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLgorCisgdmlkZW9fbnVtX2NvbHMKKyB2aWRlb19udW1fcm93cworCisgICBUaGVzZSB0d28gdG9nZXRoZXIgZGVzY3JpYmUgdGhlIGNoYXJhY3RlciBzaXplIG9mIHRoZSBkdW1teSBjb25zb2xlLAorICAgb3IgVkdBIGNvbnNvbGUgY2hhcmFjdGVyIHNpemUuICBUaGV5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgYW55IG90aGVyCisgICBwdXJwb3NlLgorCisgICBJdCdzIGdlbmVyYWxseSBhIGdvb2QgaWRlYSB0byBzZXQgdGhlc2UgdG8gYmUgZWl0aGVyIHN0YW5kYXJkIFZHQSwgb3IKKyAgIHRoZSBlcXVpdmFsZW50IGNoYXJhY3RlciBzaXplIG9mIHlvdXIgZmJjb24gZGlzcGxheS4gIFRoaXMgdGhlbiBhbGxvd3MKKyAgIGFsbCB0aGUgYm9vdHVwIG1lc3NhZ2VzIHRvIGJlIGRpc3BsYXllZCBjb3JyZWN0bHkuCisKKyB2aWRlb194CisgdmlkZW9feQorCisgICBUaGlzIGRlc2NyaWJlcyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIG9mIGN1cnNvciBvbiBWR0EgY29uc29sZSwgYW5kCisgICBpcyBvdGhlcndpc2UgdW51c2VkLiAoc2hvdWxkIG5vdCB1c2VkIGZvciBvdGhlciBjb25zb2xlIHR5cGVzLCBhbmQKKyAgIHNob3VsZCBub3QgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMpLgorCisgbWVtY19jb250cm9sX3JlZworCisgICBNRU1DIGNoaXAgY29udHJvbCByZWdpc3RlciBmb3IgQWNvcm4gQXJjaGltZWRlcyBhbmQgQWNvcm4gQTUwMDAKKyAgIGJhc2VkIG1hY2hpbmVzLiAgTWF5IGJlIHVzZWQgZGlmZmVyZW50bHkgYnkgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCisKKyBzb3VuZGRlZmF1bHQKKworICAgRGVmYXVsdCBzb3VuZCBzZXR0aW5nIG9uIEFjb3JuIG1hY2hpbmVzLiAgTWF5IGJlIHVzZWQgZGlmZmVyZW50bHkgYnkKKyAgIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgorCisgYWRmc2RyaXZlcworCisgICBOdW1iZXIgb2YgQURGUy9NRk0gZGlza3MuICBNYXkgYmUgdXNlZCBkaWZmZXJlbnRseSBieSBkaWZmZXJlbnQKKyAgIGFyY2hpdGVjdHVyZXMuCisKKyBieXRlc19wZXJfY2hhcl9oCisgYnl0ZXNfcGVyX2NoYXJfdgorCisgICBUaGVzZSBhcmUgbm93IG9ic29sZXRlLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgorCisgcGFnZXNfaW5fYmFua1s0XQorCisgICBOdW1iZXIgb2YgcGFnZXMgaW4gZWFjaCBiYW5rIG9mIHRoZSBzeXN0ZW1zIG1lbW9yeSAodXNlZCBmb3IgUmlzY1BDKS4KKyAgIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAgIGlzIG5vbi1jb250aWd1b3VzIGZyb20gdGhlIHByb2Nlc3NvcnMgcG9pbnQgb2Ygdmlldy4KKworIHBhZ2VzX2luX3ZyYW0KKworICAgTnVtYmVyIG9mIHBhZ2VzIGluIFZSQU0gKHVzZWQgb24gQWNvcm4gUmlzY1BDKS4gIFRoaXMgdmFsdWUgbWF5IGFsc28KKyAgIGJlIHVzZWQgYnkgbG9hZGVycyBpZiB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gUkFNIGNhbid0IGJlIG9idGFpbmVkCisgICBmcm9tIHRoZSBoYXJkd2FyZS4KKworIGluaXRyZF9zdGFydAorIGluaXRyZF9zaXplCisKKyAgIFRoaXMgZGVzY3JpYmVzIHRoZSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZQorICAgaW5pdGlhbCByYW1kaXNrLgorCisgcmRfc3RhcnQKKworICAgU3RhcnQgYWRkcmVzcyBpbiBzZWN0b3JzIG9mIHRoZSByYW1kaXNrIGltYWdlIG9uIGEgZmxvcHB5IGRpc2suCisKKyBzeXN0ZW1fcmV2CisKKyAgIHN5c3RlbSByZXZpc2lvbiBudW1iZXIuCisKKyBzeXN0ZW1fc2VyaWFsX2xvdworIHN5c3RlbV9zZXJpYWxfaGlnaAorCisgICBzeXN0ZW0gNjQtYml0IHNlcmlhbCBudW1iZXIKKworIG1lbV9mY2xrXzIxMjg1CisKKyAgIFRoZSBzcGVlZCBvZiB0aGUgZXh0ZXJuYWwgb3NjaWxsYXRvciB0byB0aGUgMjEyODUgKGZvb3RicmlkZ2UpLAorICAgd2hpY2ggY29udHJvbCdzIHRoZSBzcGVlZCBvZiB0aGUgbWVtb3J5IGJ1cywgdGltZXIgJiBzZXJpYWwgcG9ydC4KKyAgIERlcGVuZGluZyB1cG9uIHRoZSBzcGVlZCBvZiB0aGUgY3B1IGl0cyB2YWx1ZSBjYW4gYmUgYmV0d2VlbgorICAgMC02NiBNSHouIElmIG5vIHBhcmFtcyBhcmUgcGFzc2VkIG9yIGEgdmFsdWUgb2YgemVybyBpcyBwYXNzZWQsCisgICB0aGVuIGEgdmFsdWUgb2YgNTAgTWh6IGlzIHRoZSBkZWZhdWx0IG9uIDIxMjg1IGFyY2hpdGVjdHVyZXMuCisKKyBwYXRoc1s4XVsxMjhdCisKKyAgIFRoZXNlIGFyZSBub3cgb2Jzb2xldGUsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCisKKyBjb21tYW5kbGluZQorCisgICBLZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuICBEZXRhaWxzIGNhbiBiZSBmb3VuZCBlbHNld2hlcmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9Db21wYWN0Rmxhc2ggYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9Db21wYWN0Rmxhc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNmQ4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0NvbXBhY3RGbGFzaApAQCAtMCwwICsxLDMyIEBACitSRUFETUUgb24gdGhlIENvbXBhY3QgRmxhc2ggZm9yIENhcmQgRW5naW5lcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHRocmVlIGNoYWxsZW5nZXMgaW4gc3VwcG9ydGluZyB0aGUgQ0YgaW50ZXJmYWNlIG9mIHRoZSBDYXJkCitFbmdpbmVzLiAgRmlyc3QsIGV2ZXJ5IElPIG9wZXJhdGlvbiBtdXN0IGJlIGZvbGxvd2VkIHdpdGggSU8gdG8KK2Fub3RoZXIgbWVtb3J5IHJlZ2lvbi4gIFNlY29uZCwgdGhlIHNsb3QgaXMgd2lyZWQgZm9yIG9uZS10by1vbmUKK2FkZHJlc3MgbWFwcGluZyAqYW5kKiBpdCBpcyB3aXJlZCBmb3IgMTYgYml0IGFjY2VzcyBvbmx5LiAgU2Vjb25kLCB0aGUKK2ludGVycnVwdCByZXF1ZXN0IGxpbmUgZnJvbSB0aGUgQ0YgZGV2aWNlIGlzbid0IHdpcmVkLgorCitUaGUgSU9CQVJSSUVSIGlzc3VlIGlzIGNvdmVyZWQgaW4gUkVBRE1FLklPQkFSUklFUi4gIFRoaXMgaXNuJ3QgYW4KK29uZXJvdXMgcHJvYmxlbS4gIEVub3VnaCBzYWlkIGhlcmUuCisKK1RoZSBhZGRyZXNzaW5nIGlzc3VlIGlzIHNvbHZlZCBpbiB0aGUKK2FyY2gvYXJtL21hY2gtbGg3YTQweC9pZGUtbHBkN2E0MHguYyBmaWxlIHdpdGggc29tZSBhd2t3YXJkCit3b3JrLWFyb3VuZHMuICBXZSBpbXBsZW1lbnQgYSBzcGVjaWFsIFNFTEVDVF9EUklWRSByb3V0aW5lIHRoYXQgaXMKK2NhbGxlZCBiZWZvcmUgdGhlIElERSBkcml2ZXIgcGVyZm9ybXMgaXRzIG93biBTRUxFQ1RfRFJJVkUuICBPdXIgY29kZQorcmVjb2duaXplcyB0aGF0IHRoZSBTRUxFQ1QgcmVnaXN0ZXIgY2Fubm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgYWxzbword3JpdGluZyBhIGNvbW1hbmQuICBJdCBzZW5kIGFuIElETEVfSU1NRURJQVRFIGNvbW1hbmQgb24gc2VsZWN0aW5nIGEKK2RyaXZlLiAgVGhlIGZ1bmN0aW9uIGFsc28gcHJldmVudHMgZHJpdmUgc2VsZWN0IHRvIHRoZSBzbGF2ZSBkcml2ZQorc2luY2UgdGhlcmUgY2FuIGJlIG9ubHkgb25lLiAgVGhlIGF3a3dhcmQgcGFydCBpcyB0aGF0IHRoZSBJREUgZHJpdmVyLAorZXZlbiB0aG91Z2ggd2UgaGF2ZSBhIHNlbGVjdCBwcm9jZWR1cmUsIGFsc28gYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZQorZHJpdmUgYnkgd3JpdGluZyBkaXJlY3RseSB0aGUgU0VMRUNUIHJlZ2lzdGVyLiAgVGhpcyBhdHRlbXB0IGlzCitleHBsaWNpdGx5IGJsb2NrZWQgYnkgdGhlIE9VVEIgZnVuY3Rpb24tLW5vdCBwcmV0dHksIGJ1dCBlZmZlY3RpdmUuCisKK1RoZSBsYWNrIG9mIGludGVycnVwdHMgaXMgYSBtb3JlIHNlcmlvdXMgcHJvYmxlbS4gIEV2ZW4gdGhvdWdoIHRoZSBDRgorY2FyZCBpcyBmYXN0IHdoZW4gY29tcGFyZWQgdG8gYSBub3JtYWwgSURFIGRldmljZSwgd2UgZG9uJ3Qga25vdyB0aGF0Cit0aGUgQ0YgaXMgcmVhbGx5IGZsYXNoLiAgQSB1c2VyIGNvdWxkIHVzZSBvbmUgb2YgdGhlIHZlcnkgc21hbGwgaGFyZAorZHJpdmVzIGJlaW5nIHNoaXBwZWQgd2l0aCBhIENGIGludGVyZmFjZS4gIFRoZSBJREUgY29kZSBpbmNsdWRlcyBhCitjaGVjayBmb3IgaW50ZXJmYWNlcyB0aGF0IGxhY2sgYW4gSVJRLiAgSW4gdGhlc2UgY2FzZXMsIHN1Ym1pdHRpbmcgYQorY29tbWFuZCB0byB0aGUgSURFIGNvbnRyb2xsZXIgaXMgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIHBvbGwgZm9yCitjb21wbGV0aW9uLiAgSWYgdGhlIGRldmljZSBpc24ndCBpbW1lZGlhdGVseSByZWFkeSwgaXQgc2NoZWR1bGVzIGEKK3RpbWVyIHRvIHBvbGwgYWdhaW4gbGF0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9JT0JhcnJpZXIgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9JT0JhcnJpZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkODg1MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0lPQmFycmllcgpAQCAtMCwwICsxLDQ1IEBACitSRUFETUUgb24gdGhlIElPQkFSUklFUiBmb3IgQ2FyZEVuZ2luZSBJTworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRHVlIHRvIGFuIHVuZm9ydHVuYXRlIG92ZXJzaWdodCB3aGVuIHRoZSBDYXJkIEVuZ2luZXMgd2VyZSBkZXNpZ25lZCwKK3RoZSBzaWduYWxzIHRoYXQgY29udHJvbCBhY2Nlc3MgdG8gc29tZSBwZXJpcGhlcmFscywgbW9zdCBub3RhYmx5IHRoZQorU01DOTFDOTExMSBldGhlcm5ldCBjb250cm9sbGVyLCBhcmUgbm90IHByb3Blcmx5IGhhbmRsZWQuCisKK1RoZSBzeW1wdG9tIGlzIHRoYXQgc29tZSBiYWNrIHRvIGJhY2sgSU8gd2l0aCB0aGUgcGVyaXBoZXJhbCByZXR1cm5zCit1bnJlbGlhYmxlIGRhdGEuICBXaXRoIHRoZSBTTUMgY2hpcCwgeW91J2xsIHNlZSBlcnJvcnMgYWJvdXQgdGhlIGJhbmsKK3JlZ2lzdGVyIGJlaW5nICdzY3Jld2VkJy4KKworVGhlIGNhdXNlIGlzIHRoYXQgdGhlIEFFTiBzaWduYWwgdG8gdGhlIFNNQyBjaGlwIGRvZXMgbm90IHRyYW5zaXRpb24KK2ZvciBldmVyeSBtZW1vcnkgYWNjZXNzLiAgSXQgaXMgZHJpdmVuIHRocm91Z2ggdGhlIENQTEQgZnJvbSB0aGUgQ1M3CitsaW5lIG9mIHRoZSBDUFUncyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaXMgb3B0aW1pemVkIHRvCitlbGltaW5hdGUgdW5uZWNlc3NhcnkgdHJhbnNpdGlvbnMuICBZZXQsIHRoZSBTTUMgcmVxdWlyZXMgYSB0cmFuc2l0aW9uCitmb3IgZXZlcnkgd3JpdGUgYWNjZXNzLiAgVGhlIFNoYXJwIHdlYnNpdGUgaGFzIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBlZmZlY3QgdGhpcyBwb3dlci1jb25zZXJ2aW5nIGZlYXR1cmUgaGFzIG9uIHBlcmlwaGVyYWwKK2ludGVyZmFjaW5nLgorCitUaGUgc29sdXRpb24gaXMgdG8gZm9sbG93IGV2ZXJ5IHdyaXRlIGFjY2VzcyB0byB0aGUgU01DIGNoaXAgd2l0aCBhbgorYWNjZXNzIHRvIGFub3RoZXIgbWVtb3J5IHJlZ2lvbiB0aGF0IHdpbGwgZm9yY2UgdGhlIENQVSB0byByZWxlYXNlIHRoZQorY2hpcCBzZWxlY3QgbGluZS4gIEl0IGlzIGltcG9ydGFudCB0byBndWFyYW50ZWUgdGhhdCB0aGlzIGFjY2VzcworZm9yY2VzIHRoZSBDUFUgb2ZmLWNoaXAuICBXZSBtYXAgYSBwYWdlIG9mIFNEUkFNIGFzIGlmIGl0IHdlcmUgYW4KK3VuY2FjaGVhYmxlIElPIGRldmljZSBhbmQgcmVhZCBmcm9tIGl0IGFmdGVyIGV2ZXJ5IFNNQyBJTyB3cml0ZQorb3BlcmF0aW9uLgorCisgIFNNQyBJTworICBCQVJSSUVSIElPCisKK09ubHkgdGhpcyBzZXF1ZW5jZSBpcyBpbXBvcnRhbnQuICBJdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCB0aGVyZSBpcyBubworQkFSUklFUiBJTyBiZWZvcmUgdGhlIGFjY2VzcyB0byB0aGUgU01DIGNoaXAgYmVjYXVzZSB0aGUgQUVOIGxhdGNoCitvbmx5IG5lZWRzIG9jY3VycyBhZnRlciB0aGUgU01DIElPIHdyaXRlIGN5Y2xlLiAgVGhlIHJvdXRpbmVzIHRoYXQKK2ltcGxlbWVudCB0aGlzIHdvcmstYXJvdW5kIG1ha2UgYW4gYWRkaXRpb25hbCBjb25jZXNzaW9uIHdoaWNoIGlzIHRvCitkaXNhYmxlIGludGVycnVwdHMgZHVyaW5nIHRoZSBJTyBzZXF1ZW5jZS4gIE90aGVyIGhhcmR3YXJlIGRldmljZXMKKyh0aGUgTG9naWNQRCBDUExEKSBoYXZlIHJlZ2lzdGVycyBpbiB0aGUgc2FtZSB0aGUgcGh5c2ljYWwgbWVtb3J5CityZWdpb24gYXMgdGhlIFNNQyBjaGlwLiAgQW4gaW50ZXJydXB0IG1pZ2h0IGFsbG93IGFuIGFjY2VzcyB0byBvbmUgb2YKK3Rob3NlIHJlZ2lzdGVycyB3aGlsZSBTTUMgSU8gaXMgYmVpbmcgcGVyZm9ybWVkLgorCitZb3UgbWlnaHQgYmUgdGVtcHRlZCB0byB0aGluayB0aGF0IHdlIGhhdmUgdG8gYWNjZXNzIGFub3RoZXIgZGV2aWNlCithdHRhY2hlZCB0byB0aGUgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyLCBidXQgdGhlIGVtcGlyaWNhbCBldmlkZW5jZQoraW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBub3Qgc28uICBNYXBwaW5nIDB4MDAwMDAwMDAgKGZsYXNoKSBhbmQKKzB4YzAwMDAwMDAgKFNEUkFNKSBhcHBlYXIgdG8gaGF2ZSB0aGUgc2FtZSBlZmZlY3QuICBVc2luZyBTRFJBTSBzZWVtcwordG8gYmUgZmFzdGVyLiAgQ2hvb3NpbmcgdG8gYWNjZXNzIGFuIHVuZGVjb2RlZCBtZW1vcnkgcmVnaW9uIGlzIG5vdAorZGVzaXJhYmxlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IGhvdyB0aGF0IGNoaXAgc2VsZWN0IHdpbGwgYmUgdXNlZAoraW4gdGhlIGZ1dHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0tFVjdBNDAwIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvS0VWN0E0MDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzMmIxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0tFVjdBNDAwCkBAIC0wLDAgKzEsOCBAQAorUkVBRE1FIG9uIEltcGxlbWVudGluZyBMaW51eCBmb3IgU2hhcnAncyBLRVY3YTQwMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGlzY29udGludWVkIGJ5IFNoYXJwLiAgRm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUKK3BhcnRpYWxseSBpbXBsZW1lbnRlZCBjb2RlIHJlbWFpbnMgaW4gdGhlIGtlcm5lbC4gIEF0IHNvbWUgcG9pbnQgaW4KK3RoZSBmdXR1cmUsIGVpdGhlciB0aGUgY29kZSB3aWxsIGJlIGZpbmlzaGVkIG9yIGl0IHdpbGwgYmUgcmVtb3ZlZAorY29tcGxldGVseS4gIFRoaXMgZGVwZW5kcyBwcmltYXJpbHkgb24gaG93IG1hbnkgb2YgdGhlIGRldmVsb3BtZW50Citib2FyZHMgYXJlIGluIHRoZSBmaWVsZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xQRDdBNDAwIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvTFBEN0E0MDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3NWI0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xQRDdBNDAwCkBAIC0wLDAgKzEsMTUgQEAKK1JFQURNRSBvbiBJbXBsZW1lbnRpbmcgTGludXggZm9yIHRoZSBMb2dpYyBQRCBMUEQ3QTQwMC0xMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0gQ1BMRCBtZW1vcnkgbWFwcGluZworCisgIFRoZSBib2FyZCBkZXNpZ25lcnMgY2hvc2UgdG8gdXNlIGhpZ2ggYWRkcmVzcyBsaW5lcyBmb3IgY29udHJvbGxpbmcKKyAgYWNjZXNzIHRvIHRoZSBDUExEIHJlZ2lzdGVycy4gIEl0IHR1cm5zIG91dCB0byBiZSBhIGJpZyB3YXN0ZQorICBiZWNhdXNlIHdlJ3JlIHVzaW5nIGFuIE1NVSBhbmQgbXVzdCBtYXAgSU8gc3BhY2UgaW50byB2aXJ0dWFsCisgIG1lbW9yeS4gIFRoZSByZXN1bHQgaXMgdGhhdCB3ZSBoYXZlIHRvIG1ha2UgYSBtYXBwaW5nIGZvciBldmVyeQorICByZWdpc3Rlci4KKworLSBTZXJpYWwgQ29uc29sZQorCisgIEl0IG1heSBiZSBPSyBub3QgdG8gdXNlIHRoZSBzZXJpYWwgY29uc29sZSBvcHRpb24gaWYgdGhlIHVzZXIgcGFzc2VzCisgIHRoZSBjb25zb2xlIGRldmljZSBuYW1lIHRvIHRoZSBrZXJuZWwuICBUaGlzIGRlc2VydmVzIHNvbWUgZXhwbG9yYXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MUEQ3QTQwWCBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xQRDdBNDBYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjlhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MUEQ3QTQwWApAQCAtMCwwICsxLDE2IEBACitSRUFETUUgb24gSW1wbGVtZW50aW5nIExpbnV4IGZvciB0aGUgTG9naWMgUEQgTFBEN0E0MFgtMTAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistIENQTEQgbWVtb3J5IG1hcHBpbmcKKworICBUaGUgYm9hcmQgZGVzaWduZXJzIGNob3NlIHRvIHVzZSBoaWdoIGFkZHJlc3MgbGluZXMgZm9yIGNvbnRyb2xsaW5nCisgIGFjY2VzcyB0byB0aGUgQ1BMRCByZWdpc3RlcnMuICBJdCB0dXJucyBvdXQgdG8gYmUgYSBiaWcgd2FzdGUKKyAgYmVjYXVzZSB3ZSdyZSB1c2luZyBhbiBNTVUgYW5kIG11c3QgbWFwIElPIHNwYWNlIGludG8gdmlydHVhbAorICBtZW1vcnkuICBUaGUgcmVzdWx0IGlzIHRoYXQgd2UgaGF2ZSB0byBtYWtlIGEgbWFwcGluZyBmb3IgZXZlcnkKKyAgcmVnaXN0ZXIuCisKKy0gU2VyaWFsIENvbnNvbGUKKworICBJdCBtYXkgYmUgT0sgbm90IHRvIHVzZSB0aGUgc2VyaWFsIGNvbnNvbGUgb3B0aW9uIGlmIHRoZSB1c2VyIHBhc3NlcworICB0aGUgY29uc29sZSBkZXZpY2UgbmFtZSB0byB0aGUga2VybmVsLiAgVGhpcyBkZXNlcnZlcyBzb21lIGV4cGxvcmF0aW9uLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9TRFJBTSBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL1NEUkFNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGRjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9TRFJBTQpAQCAtMCwwICsxLDUxIEBACitSRUFETUUgb24gdGhlIFNEUkFNIENvbnRyb2xsZXIgZm9yIHRoZSBMSDdhNDBYCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGZvciB0aGUgU0RSQU0gY29udHJvbGxlciBnZW5lcmF0ZXMgYSBzcGFyc2UKK21lbW9yeSBhcnJheS4gIFRoZSBwcmVjaXNlIGxheW91dCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBTRFJBTSBjaGlwcy4gIEEKK2RlZmF1bHQga2VybmVsIGNvbmZpZ3VyYXRpb24gYXNzZW1ibGVzIHRoZSBkaXNjb250aWd1b3VzIG1lbW9yeQorcmVnaW9ucyBpbnRvIHNlcGFyYXRlIG1lbW9yeSBub2RlcyB2aWEgdGhlIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeQorQXJjaGl0ZWN0dXJlKSBmYWNpbGl0aWVzLiAgSW4gdGhpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHRoZSBrZXJuZWwKK2lzIGZvcmdpdmluZyBhYm91dCB0aGUgcHJlY2lzZSBsYXlvdXQuICBBcyBsb25nIGFzIGl0IGlzIGdpdmVuIGFuCithY2N1cmF0ZSBwaWN0dXJlIG9mIGF2YWlsYWJsZSBtZW1vcnkgYnkgdGhlIGJvb3Rsb2FkZXIgdGhlIGtlcm5lbCB3aWxsCitleGVjdXRlIGNvcnJlY3RseS4KKworVGhlIFNEUkMgc3VwcG9ydHMgYSBtb2RlIHdoZXJlIHNvbWUgb2YgdGhlIGNoaXAgc2VsZWN0IGxpbmVzIGFyZQorc3dhcHBlZCBpbiBvcmRlciB0byBtYWtlIFNEUkFNIGxvb2sgbGlrZSBhIHN5bmNocm9ub3VzIFJPTS4gIFNldHRpbmcKK3RoaXMgYml0IG1lYW5zIHRoYXQgdGhlIFJBTSB3aWxsIHByZXNlbnQgYXMgYSBjb250aWd1b3VzIGFycmF5LiAgU29tZQorcHJvZ3JhbW1lcnMgcHJlZmVyIHRoaXMgdG8gdGhlIGRpc2NvbnRpZ3VvdXMgbGF5b3V0LiAgQmUgYXdhcmUgdGhhdAorbWF5IGJlIGEgcGVuYWx0eSBmb3IgdGhpcyBmZWF0dXJlIHdoZXJlIHNvbWUgc29tZSBjb25maWd1cmF0aW9ucyBvZgorbWVtb3J5IGFyZSBzaWduaWZpY2FudGx5IHJlZHVjZWQ7IGkuZS4gNjRNaUIgb2YgUkFNIGFwcGVhcnMgYXMgb25seSAzMgorTWlCLgorCitUaGVyZSBhcmUgYSBjb3VwbGUgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CitiZWhhdmlvci4gIFdoZW4gdGhlIFNST01MTCBiaXQgaXMgc2V0IGFuZCBtZW1vcnkgYXBwZWFycyBhcyBhCitjb250aWd1b3VzIGFycmF5LCB0aGVyZSBpcyBubyByZWFzb24gdG8gc3VwcG9ydCBOVU1BLgorQ09ORklHX0xIN0E0MFhfQ09OVElHTUVNIGRpc2FibGVzIE5VTUEgc3VwcG9ydC4gIFdoZW4gcGh5c2ljYWwgbWVtb3J5CitpcyBkaXNjb250aWd1b3VzLCB0aGUgbWVtb3J5IHRhYmxlcyBhcmUgb3JnYW5pemVkIHN1Y2ggdGhhdCB0aGVyZSBhcmUKK3R3byBiYW5rcyBwZXIgbm9kZXMgd2l0aCBhIHNtYWxsIGdhcCBiZXR3ZWVuIHRoZW0uICBUaGlzIGxheW91dCB3YXN0ZXMKK3NvbWUga2VybmVsIG1lbW9yeSBmb3IgcGFnZSB0YWJsZXMgcmVwcmVzZW50aW5nIG5vbi1leGlzdGVudCBtZW1vcnkuCitDT05GSUdfTEg3QTQwWF9PTkVfQkFOS19QRVJfTk9ERSBvcHRpbWl6ZXMgdGhlIG5vZGUgdGFibGVzIHN1Y2ggdGhhdAordGhlcmUgYXJlIG5vIGdhcHMuICBUaGVzZSBvcHRpb25zIGNvbnRyb2wgdGhlIGxvdyBsZXZlbCBvcmdhbml6YXRpb24KK29mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB0YWJsZXMgaW4gd2F5cyB0aGF0IG1heSBwcmV2ZW50IHRoZSBrZXJuZWwKK2Zyb20gYm9vdGluZyBvciBtYXkgY2F1c2UgdGhlIGtlcm5lbCB0byBhbGxvY2F0ZWQgZXhjZXNzaXZlbHkgbGFyZ2UKK3BhZ2UgdGFibGVzLiAgQmUgd2FybmVkLiAgT25seSBjaGFuZ2UgdGhlc2Ugb3B0aW9ucyBpZiB5b3Uga25vdyB3aGF0Cit5b3UgYXJlIGRvaW5nLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgYSByZWFzb25hYmxlIGNvbXByb21pc2UgdGhhdAord2lsbCBzdWl0IGFsbCB1c2Vycy4KKworLS0KKworQSB0eXBpY2FsIDMyTWlCIHN5c3RlbSB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsCitmaW5kIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VkIGFzIGZvbGxvd3MuCisKKyAgIG5vZGUgMDogMHhjMDAwMDAwMCA0TWlCCisgICAgICAgICAgIDB4YzEwMDAwMDAgNE1pQgorICAgbm9kZSAxOiAweGM0MDAwMDAwIDRNaUIKKyAgICAgICAgICAgMHhjNTAwMDAwMCA0TWlCCisgICBub2RlIDI6IDB4YzgwMDAwMDAgNE1pQgorICAgICAgICAgICAweGM5MDAwMDAwIDRNaUIKKyAgIG5vZGUgMzogMHhjYzAwMDAwMCA0TWlCCisgICAgICAgICAgIDB4Y2QwMDAwMDAgNE1pQgorCitTZXR0aW5nIENPTkZJR19MSDdBNDBYX09ORV9CQU5LX1BFUl9OT0RFIHdpbGwgcHV0IGVhY2ggYmFuayBpbnRvIGEKK3NlcGFyYXRlIG5vZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9WZWN0b3JlZEludGVycnVwdENvbnRyb2xsZXIgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9WZWN0b3JlZEludGVycnVwdENvbnRyb2xsZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwNDdlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL1ZlY3RvcmVkSW50ZXJydXB0Q29udHJvbGxlcgpAQCAtMCwwICsxLDgwIEBACitSRUFETUUgb24gdGhlIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIG9mIHRoZSBMSDdBNDA0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA0MDQgcmV2aXNpb24gb2YgdGhlIExIN0E0MFggc2VyaWVzIGNvbWVzIHdpdGggdHdvIHZlY3RvcmVkCitpbnRlcnJ1cHRzIGNvbnRyb2xsZXJzLiAgV2hpbGUgdGhlIGtlcm5lbCBkb2VzIHVzZSBzb21lIG9mIHRoZQorZmVhdHVyZXMgb2YgdGhlc2UgZGV2aWNlcywgaXQgaXMgZmFyIGZyb20gdGhlIHB1cnBvc2UgZm9yIHdoaWNoIHRoZXkKK3dlcmUgZGVzaWduZWQuCisKK1doZW4gdGhpcyBSRUFETUUgd2FzIHdyaXR0ZW4sIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVklDcyB3YXMgaW4KK2ZsdXguICBJdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgZGV0YWlscywgZXNwZWNpYWxseSB3aXRoIHByaW9yaXRpZXMsCit3aWxsIGNoYW5nZS4KKworVGhlIFZJQyBzdXBwb3J0IGNvZGUgaXMgaW5zcGlyZWQgYnkgcm91dGluZXMgd3JpdHRlbiBieSBTaGFycC4KKworCitQcmlvcml0eSBDb250cm9sCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzaWduaWZpY2FudCByZWFzb24gZm9yIHVzaW5nIHRoZSBWSUMncyB2ZWN0b3JpbmcgaXMgdG8gY29udHJvbAoraW50ZXJydXB0IHByaW9yaXRpZXMuICBUaGVyZSBhcmUgdHdvIHRhYmxlcyBpbgorYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDA0LmMgdGhhdCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXMuCisKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX3ByaV92aWMxW10gPSB7IElSUV9HUElPM0lOVFIsIH07CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGlycV9wcmlfdmljMltdID0geworCUlSUV9UM1VJLCBJUlFfR1BJTzdJTlRSLAorCUlSUV9VQVJUMUlOVFIsIElSUV9VQVJUMklOVFIsIElSUV9VQVJUM0lOVFIsIH07CisKK1RoZSBpbml0aWFsaXphdGlvbiBjb2RlIHJlYWRzIHRoZXNlIHRhYmxlcyBhbmQgaW5zZXJ0cyBhIHZlY3RvcgorYWRkcmVzcyBhbmQgZW5hYmxlIGZvciBlYWNoIGluZGljYXRlZCBJUlEuICBWZWN0b3JlZCBpbnRlcnJ1cHRzIGhhdmUKK2hpZ2hlciBwcmlvcml0eSB0aGFuIG5vbi12ZWN0b3JlZCBpbnRlcnJ1cHRzLiAgU28sIG9uIFZJQzEsCitJUlFfR1BJTzNJTlRSIHdpbGwgYmUgc2VydmVkIGJlZm9yZSBhbnkgb3RoZXIgbm9uLUZJUSBpbnRlcnJ1cHQuICBEdWUKK3RvIHRoZSB3YXkgdGhhdCB0aGUgdmVjdG9yaW5nIHdvcmtzLCBJUlFfVDNVSSBpcyB0aGUgbmV4dCBoaWdoZXN0Citwcmlvcml0eSBmb2xsb3dlZCBieSB0aGUgb3RoZXIgdmVjdG9yZWQgaW50ZXJydXB0cyBvbiBWSUMyLiAgQWZ0ZXIKK3RoYXQsIHRoZSBub24tdmVjdG9yZWQgaW50ZXJydXB0cyBhcmUgc2Nhbm5lZCBpbiBWSUMxIHRoZW4gaW4gVklDMi4KKworCitJU1IKKy0tLQorCitUaGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBtYWNybyBnZXRfaXJxbnIoKSBpbgorYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBzY2FucyB0aGUgVklDcyBmb3IgdGhlIG5leHQgYWN0aXZlCitpbnRlcnJ1cHQuICBUaGUgdmVjdG9yaW5nIG1ha2VzIHRoaXMgY29kZSBzb21ld2hhdCBsYXJnZXIgdGhhbiBpdCB3YXMKK2JlZm9yZSB1c2luZyB2ZWN0b3JpbmcgKHJlZmVyIHRvIHRoZSBMSDdBNDAwIGltcGxlbWVudGF0aW9uKS4gIEluIHRoZQorY2FzZSB3aGVyZSBhbiBpbnRlcnJ1cHQgaXMgdmVjdG9yZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIHRlbmQgdG8KK2JlIGZhc3RlciB0aGFuIHRoZSBub24tdmVjdG9yZWQgdmVyc2lvbi4gIEhvd2V2ZXIsIHRoZSB3b3JzdC1jYXNlIHBhdGgKK2lzIGxvbmdlci4KKworSXQgaXMgd29ydGggbm90aW5nIHRoYXQgYXQgcHJlc2VudCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZWFkCitWSUMyX1ZFQ1RBRERSIGJlY2F1c2UgdGhlIHJlZ2lzdGVyIGFwcGVhcnMgdG8gYmUgc2hhcmVkIGJldHdlZW4gdGhlCitjb250cm9sbGVycy4gIFRoZSBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IGlmIHRoaXMgY2hhbmdlcywgaXQgb3VnaHQKK3RvIHN0aWxsIHdvcmsgcHJvcGVybHkuCisKKworVmVjdG9yIEFkZHJlc3NlcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcHJvcGVyIHVzZSBvZiB0aGUgdmVjdG9yaW5nIGhhcmR3YXJlIHdvdWxkIGp1bXAgdG8gdGhlIElTUgorc3BlY2lmaWVkIGJ5IHRoZSB2ZWN0b3JpbmcgYWRkcmVzcy4gIExpbnV4IGlzbid0IHN0cnVjdHVyZWQgdG8gdGFrZQorYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSwgdGhvdWdoIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGNoYW5nZQordGhpbmdzIHRvIHN1cHBvcnQgaXQuCisKK0luIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoZSB2ZWN0b3JpbmcgYWRkcmVzcyBpcyB1c2VkIHRvIHNwZWVkIHRoZQorc2VhcmNoIGZvciB0aGUgYWN0aXZlIElSUS4gIFRoZSBhZGRyZXNzIGlzIGNvZGVkIHN1Y2ggdGhhdCB0aGUgbG93ZXN0Cis2IGJpdHMgc3RvcmUgdGhlIElSUSBudW1iZXIgZm9yIHZlY3RvcmVkIGludGVycnVwdHMuICBUaGVzZSBudW1iZXJzCitjb3JyZXNwb25kIHRvIHRoZSBiaXRzIGluIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycy4gIElSUSB6ZXJvIGlzCit0aGUgbG93ZXN0IGludGVycnVwdCBiaXQgaW4gVklDMS4gIElSUSAzMiBpcyB0aGUgbG93ZXN0IGludGVycnVwdCBiaXQKK2luIFZJQzIuICBCZWNhdXNlIHplcm8gaXMgYSB2YWxpZCBJUlEgbnVtYmVyIGFuZCBiZWNhdXNlIHdlIGNhbm5vdAorZGV0ZWN0IHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgdmFsaWQgdmVjdG9yaW5nIGFkZHJlc3MgaWYgdGhhdAorYWRkcmVzcyBpcyB6ZXJvLCB0aGUgZWlndGggYml0ICgweDEwMCkgaXMgc2V0IGZvciB2ZWN0b3JlZCBpbnRlcnJ1cHRzLgorVGhlIGFkZHJlc3MgZm9yIElSUSAweDE4IChWSUMyKSBpcyAweDExOC4gIE9ubHkgdGhlIG5pbnRoIGJpdCBpcyBzZXQKK2ZvciB0aGUgZGVmYXVsdCBoYW5kbGVyIG9uIFZJQzEgYW5kIG9ubHkgdGhlIHRlbnRoIGJpdCBpcyBzZXQgZm9yIHRoZQorZGVmYXVsdCBoYW5kbGVyIG9uIFZJQzIuCisKK0luIG90aGVyIHdvcmRzLgorCisgIDB4MDAwCQktIG5vIGFjdGl2ZSBpbnRlcnJ1cHQKKyAgMHgxaWkJCS0gdmVjdG9yZWQgaW50ZXJydXB0IDB4aWkKKyAgMHgyeHgJCS0gdW52ZWN0b3JlZCBpbnRlcnJ1cHQgb24gVklDMSAoeHggaXMgZG9uJ3QgY2FyZSkKKyAgMHg0eHgJCS0gdW52ZWN0b3JlZCBpbnRlcnJ1cHQgb24gVklDMiAoeHggaXMgZG9uJ3QgY2FyZSkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vVkZQL3JlbGVhc2Utbm90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vVkZQL3JlbGVhc2Utbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOGUwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9WRlAvcmVsZWFzZS1ub3Rlcy50eHQKQEAgLTAsMCArMSw1NSBAQAorUmVsZWFzZSBub3RlcyBmb3IgTGludXggS2VybmVsIFZGUCBzdXBwb3J0IGNvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGU6IAkyMCBNYXkgMjAwNAorQXV0aG9yOglSdXNzZWxsIEtpbmcKKworVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZSBvZiB0aGUgTGludXggS2VybmVsIFZGUCBzdXBwb3J0IGNvZGUuICBJdAorcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGV4Y2VwdGlvbnMgYm91bmNlZCBmcm9tIFZGUCBoYXJkd2FyZSBmb3VuZAorb24gQVJNOTI2RUotUy4KKworVGhpcyByZWxlYXNlIGhhcyBiZWVuIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBTb2Z0RmxvYXQtMmIgbGlicmFyeSBieQorSm9obiBSLiBIYXVzZXIgdXNpbmcgdGhlIFRlc3RGbG9hdC0yYSB0ZXN0IHN1aXRlLiAgRGV0YWlscyBvZiB0aGlzCitsaWJyYXJ5IGFuZCB0ZXN0IHN1aXRlIGNhbiBiZSBmb3VuZCBhdDoKKworICAgaHR0cDovL3d3dy5jcy5iZXJrZWxleS5lZHUvfmpoYXVzZXIvYXJpdGhtZXRpYy9Tb2Z0RmxvYXQuaHRtbAorCitUaGUgb3BlcmF0aW9ucyB3aGljaCBoYXZlIGJlZW4gdGVzdGVkIHdpdGggdGhpcyBwYWNrYWdlIGFyZToKKworIC0gZmRpdgorIC0gZnN1YgorIC0gZmFkZAorIC0gZm11bAorIC0gZmNtcAorIC0gZmNtcGUKKyAtIGZjdnRkCisgLSBmY3Z0cworIC0gZnNpdG8KKyAtIGZ0b3NpCisgLSBmc3FydAorCitBbGwgdGhlIGFib3ZlIHBhc3Mgc29mdGZsb2F0IHRlc3RzIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgorCistIGZhZGQvZnN1YiBzaG93cyBzb21lIGRpZmZlcmVuY2VzIGluIHRoZSBoYW5kbGluZyBvZiArMCAvIC0wIHJlc3VsdHMKKyAgd2hlbiBpbnB1dCBvcGVyYW5kcyBkaWZmZXIgaW4gc2lnbnMuCistIHRoZSBoYW5kbGluZyBvZiB1bmRlcmZsb3cgZXhjZXB0aW9ucyBpcyBzbGlnaHRseSBkaWZmZXJlbnQuICBJZiBhCisgIHJlc3VsdCB1bmRlcmZsb3dzIGJlZm9yZSByb3VuZGluZywgYnV0IGJlY29tZXMgYSBub3JtYWxpc2VkIG51bWJlcgorICBhZnRlciByb3VuZGluZywgd2UgZG8gbm90IHNpZ25hbCBhbiB1bmRlcmZsb3cgZXhjZXB0aW9uLgorCitPdGhlciBvcGVyYXRpb25zIHdoaWNoIGhhdmUgYmVlbiB0ZXN0ZWQgYnkgYmFzaWMgYXNzZW1ibHktb25seSB0ZXN0cworYXJlOgorCisgLSBmY3B5CisgLSBmYWJzCisgLSBmbmVnCisgLSBmdG91aQorIC0gZnRvc2l6CisgLSBmdG91aXoKKworVGhlIGNvbWJpbmF0aW9uIG9wZXJhdGlvbnMgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQ6CisKKyAtIGZtYWMKKyAtIGZubWFjCisgLSBmbXNjCisgLSBmbm1zYworIC0gZm5tdWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL2VtcGVnL1JFQURNRSBiL0RvY3VtZW50YXRpb24vYXJtL2VtcGVnL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWNjOGQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vZW1wZWcvUkVBRE1FCkBAIC0wLDAgKzEsMTMgQEAKK0VtcGVnLCBMdGQncyBFbXBlZyBNUDMgQ2FyIEF1ZGlvIFBsYXllcgorCitUaGUgaW5pdGlhbCBkZXNpZ24gaXMgdG8gZ28gaW4geW91ciBjYXIsIGJ1dCB5b3UgY2FuIHVzZSBpdCBhdCBob21lLCBvbiBhCitib2F0Li4uIGFsbW9zdCBhbnl3aGVyZS4gVGhlIHByaW5jaXBsZSBpcyB0byBzdG9yZSBDRC1xdWFsaXR5IG11c2ljIHVzaW5nCitNUEVHIHRlY2hub2xvZ3kgb250byBhIGhhcmQgZGlzayBpbiB0aGUgdW5pdCwgYW5kIHVzZSB0aGUgcG93ZXIgb2YgdGhlCitlbWJlZGRlZCBjb21wdXRlciB0byBzZXJ2ZSB1cCB0aGUgbXVzaWMgeW91IHdhbnQuCisKK0ZvciBtb3JlIGRldGFpbHMsIHNlZToKKworCWh0dHA6Ly93d3cuZW1wZWcuY29tCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9lbXBlZy9pci50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9lbXBlZy9pci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhMjk3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL2VtcGVnL2lyLnR4dApAQCAtMCwwICsxLDQ5IEBACitJbmZyYS1yZWQgZHJpdmVyIGRvY3VtZW50YXRpb24uCisKK01pa2UgQ3Jvd2UgPG1hY0BlbXBlZy5jb20+CisoQykgRW1wZWcgTHRkIDE5OTkKKworTm90IGEgbG90IGhlcmUgeWV0IDotKQorCitUaGUgS2Vud29vZCBLQ0EtUjZBIHJlbW90ZSBjb250cm9sIGdlbmVyYXRlcyBhIHNlcXVlbmNlIGxpa2UgdGhlIGZvbGxvd2luZzoKKworR28gbG93IGZvciBhcHByb3ggMTZUIChBcm91bmQgOTAwMHVzKQorR28gaGlnaCBmb3IgYXBwcm94IDhUIChBcm91bmQgNDAwMHVzKQorR28gbG93IGZvciBsZXNzIHRoYW4gMlQgKEFyb3VuZCA3NTB1cykKKworRm9yIGVhY2ggb2YgdGhlIDMyIGJpdHMKKyAgR28gaGlnaCBmb3IgbW9yZSB0aGFuIDJUIChBcm91bmQgMTUwMHVzKSA9PSAxCisgIEdvIGhpZ2ggZm9yIGxlc3MgdGhhbiBUIChBcm91bmQgNDAwdXMpID09IDAKKyAgR28gbG93IGZvciBsZXNzIHRoYW4gMlQgKEFyb3VuZCA3NTB1cykKKworUmF0aGVyIHRoYW4gcmVwZWF0IGEgc2lnbmFsIHdoZW4gdGhlIGJ1dHRvbiBpcyBoZWxkIGRvd24gY2VydGFpbiBidXR0b25zCitnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gaW5kaWNhdGUgcmVwZXRpdGlvbi4KKworR28gbG93IGZvciBhcHByb3ggMTZUCitHbyBoaWdoIGZvciBhcHByb3ggNFQKK0dvIGxvdyBmb3IgbGVzcyB0aGFuIDJUCisKKyhCeSByZW1vdmluZyB0aGUgPDJUIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSBhbmQgcGxhY2luZyBhdCB0aGUgZW5kCisgaXQgY2FuIGJlIGNvbnNpZGVyZWQgYSBzdG9wIGJpdCBidXQgSSBmb3VuZCBpdCBlYXNpZXIgdG8gZGVhbCB3aXRoIGl0IGF0CisgdGhlIHN0YXJ0KS4KKworVGhlIDMyIGJpdHMgYXJlIGVuY29kZWQgYXMgWHhZeSB3aGVyZSB4IGFuZCB5IGFyZSB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzCit3aGlsZSBYIGFuZCBZIGFyZSB0aGUgbG9naWNhbCBpbnZlcnNlcyBvZiB0aGUgYXNzb2NpYXRlZCBkYXRhIHZhbHVlcy4gVXNpbmcgCitMU0IgZmlyc3QgeWllbGRzIHNlbnNpYmxlIGNvZGVzIGZvciB0aGUgbnVtYmVycy4KKworQWxsIGNvZGVzIGFyZSBvZiB0aGUgZm9ybSBiOXh4CisKK1RoZSBudW1lcmljIGtleXMgZ2VuZXJhdGUgdGhlIGNvZGUgMHggd2hlcmUgeCBpcyB0aGUgbnVtYmVyIHByZXNzZWQuCisKK1R1bmVyCQkxYworVGFwZQkJMWQKK0NECQkxZQorQ0QtTUQtQ0gJMWYKK1RyYWNrLQkJMGEKK1RyYWNrKwkJMGIKK1Jld2luZAkJMGMKK0ZGCQkwZAorRE5QUAkJNWUKK1BsYXkvUGF1c2UJMGUKK1ZvbCsJCTE0CitWb2wtCQkxNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vZW1wZWcvbWtkZXZzIGIvRG9jdW1lbnRhdGlvbi9hcm0vZW1wZWcvbWtkZXZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODVlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9lbXBlZy9ta2RldnMKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCitta25vZCAvZGV2L2Rpc3BsYXkgYyAyNDQgMAorbWtub2QgL2Rldi9pciBjIDI0MiAwCitta25vZCAvZGV2L3VzYjAgYyAyNDMgMAorbWtub2QgL2Rldi9hdWRpbyBjIDI0NSA0Citta25vZCAvZGV2L2RzcCBjIDI0NSAzCitta25vZCAvZGV2L21peGVyIGMgMjQ1IDAKK21rbm9kIC9kZXYvZW1wZWdfc3RhdGUgYyAyNDYgMAorbWtub2QgL2Rldi9yYWRpbzAgYyA4MSA2NAorbG4gLXNmIHJhZGlvMCByYWRpbworbG4gLXNmIHVzYjAgdXNiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9tZW1fYWxpZ25tZW50IGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtX2FsaWdubWVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTQ1Y2NjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtX2FsaWdubWVudApAQCAtMCwwICsxLDU4IEBACitUb28gbWFueSBwcm9ibGVtcyBwb3BlZCB1cCBiZWNhdXNlIG9mIHVubm90aWNlZCBtaXNhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaW4KK2tlcm5lbCBjb2RlIGxhdGVseS4gIFRoZXJlZm9yZSB0aGUgYWxpZ25tZW50IGZpeHVwIGlzIG5vdyB1bmNvbmRpdGlvbmFsbHkKK2NvbmZpZ3VyZWQgaW4gZm9yIFNBMTF4MCBiYXNlZCB0YXJnZXRzLiAgQWNjb3JkaW5nIHRvIEFsYW4gQ294LCB0aGlzIGlzIGEKK2JhZCBpZGVhIHRvIGNvbmZpZ3VyZSBpdCBvdXQsIGJ1dCBSdXNzZWxsIEtpbmcgaGFzIHNvbWUgZ29vZCByZWFzb25zIGZvcgorZG9pbmcgc28gb24gc29tZSBmKioqZWQgdXAgQVJNIGFyY2hpdGVjdHVyZXMgbGlrZSB0aGUgRUJTQTExMC4gIEhvd2V2ZXIKK3RoaXMgaXMgbm90IHRoZSBjYXNlIG9uIG1hbnkgZGVzaWduIEknbSBhd2FyZSBvZiwgbGlrZSBhbGwgU0ExMXgwIGJhc2VkCitvbmVzLgorCitPZiBjb3Vyc2UgdGhpcyBpcyBhIGJhZCBpZGVhIHRvIHJlbHkgb24gdGhlIGFsaWdubWVudCB0cmFwIHRvIHBlcmZvcm0KK3VuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGluIGdlbmVyYWwuICBJZiB0aG9zZSBhY2Nlc3MgYXJlIHByZWRpY3RhYmxlLCB5b3UKK2FyZSBiZXR0ZXIgdG8gdXNlIHRoZSBtYWNyb3MgcHJvdmlkZWQgYnkgaW5jbHVkZS9hc20vdW5hbGlnbmVkLmguICBUaGUKK2FsaWdubWVudCB0cmFwIGNhbiBmaXh1cCBtaXNhbGlnbmVkIGFjY2VzcyBmb3IgdGhlIGV4Y2VwdGlvbiBjYXNlcywgYnV0IGF0CithIGhpZ2ggcGVyZm9ybWFuY2UgY29zdC4gIEl0IGJldHRlciBiZSByYXJlLgorCitOb3cgZm9yIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zLCBpdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgdGhlIGFsaWdubWVudAordHJhcCB0byBTSUdCVVMgYW55IGNvZGUgcGVyZm9ybWluZyB1bmFsaWduZWQgYWNjZXNzIChnb29kIGZvciBkZWJ1Z2dpbmcgYmFkCitjb2RlKSwgb3IgZXZlbiBmaXh1cCB0aGUgYWNjZXNzIGJ5IHNvZnR3YXJlIGxpa2UgZm9yIGtlcm5lbCBjb2RlLiAgVGhlIGxhdGVyCittb2RlIGlzbid0IHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIChqdXN0IHRoaW5rIGFib3V0IHRoZQorZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uIHRoYXQgd29ya3MgYWJvdXQgdGhlIHNhbWUgd2F5KS4gIEZpeCB5b3VyIGNvZGUKK2luc3RlYWQhCisKK1BsZWFzZSBub3RlIHRoYXQgcmFuZG9tbHkgY2hhbmdpbmcgdGhlIGJlaGF2aW91ciB3aXRob3V0IGdvb2QgdGhvdWdodCBpcworcmVhbCBiYWQgLSBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvdXIgb2YgYWxsIHVuYWxpZ25lZCBpbnN0cnVjdGlvbnMgaW4gdXNlcgorc3BhY2UsIGFuZCBtaWdodCBjYXVzZSBwcm9ncmFtcyB0byBmYWlsIHVuZXhwZWN0ZWRseS4KKworVG8gY2hhbmdlIHRoZSBhbGlnbm1lbnQgdHJhcCBiZWhhdmlvciwgc2ltcGx5IGVjaG8gYSBudW1iZXIgaW50bworL3Byb2Mvc3lzL2RlYnVnL2FsaWdubWVudC4gIFRoZSBudW1iZXIgaXMgbWFkZSB1cCBmcm9tIHZhcmlvdXMgYml0czoKKworYml0CQliZWhhdmlvciB3aGVuIHNldAorLS0tCQktLS0tLS0tLS0tLS0tLS0tLQorCiswCQlBIHVzZXIgcHJvY2VzcyBwZXJmb3JtaW5nIGFuIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzCisJCXdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBwcmludCBhIG1lc3NhZ2UgaW5kaWNhdGluZworCQlwcm9jZXNzIG5hbWUsIHBpZCwgcGMsIGluc3RydWN0aW9uLCBhZGRyZXNzLCBhbmQgdGhlCisJCWZhdWx0IGNvZGUuCisKKzEJCVRoZSBrZXJuZWwgd2lsbCBhdHRlbXB0IHRvIGZpeCB1cCB0aGUgdXNlciBwcm9jZXNzCisJCXBlcmZvcm1pbmcgdGhlIHVuYWxpZ25lZCBhY2Nlc3MuICBUaGlzIGlzIG9mIGNvdXJzZQorCQlzbG93ICh0aGluayBhYm91dCB0aGUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IpIGFuZAorCQlub3QgcmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlLgorCisyCQlUaGUga2VybmVsIHdpbGwgc2VuZCBhIFNJR0JVUyBzaWduYWwgdG8gdGhlIHVzZXIgcHJvY2VzcworCQlwZXJmb3JtaW5nIHRoZSB1bmFsaWduZWQgYWNjZXNzLgorCitOb3RlIHRoYXQgbm90IGFsbCBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCAtIG9ubHkgdmFsdWVzIDAgdGhyb3VnaCA1LgorKDYgYW5kIDcgZG9uJ3QgbWFrZSBzZW5zZSkuCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHdpbGwgdHVybiBvbiB0aGUgd2FybmluZ3MsIGJ1dCB3aXRob3V0CitmaXhpbmcgdXAgb3Igc2VuZGluZyBTSUdCVVMgc2lnbmFsczoKKworCWVjaG8gMSA+IC9wcm9jL3N5cy9kZWJ1Zy9hbGlnbm1lbnQKKworWW91IGNhbiBhbHNvIHJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIHNhbWUgZmlsZSB0byBnZXQgc3RhdGlzdGljYWwKK2luZm9ybWF0aW9uIG9uIHVuYWxpZ25lZCBhY2Nlc3Mgb2NjdXJyZW5jZXMgcGx1cyB0aGUgY3VycmVudCBtb2RlIG9mCitvcGVyYXRpb24gZm9yIHVzZXIgc3BhY2UgY29kZS4KKworCitOaWNvbGFzIFBpdHJlLCBNYXIgMTMsIDIwMDEuICBNb2RpZmllZCBSdXNzZWxsIEtpbmcsIE5vdiAzMCwgMjAwMS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMWM5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CkBAIC0wLDAgKzEsNzIgQEAKKwkJS2VybmVsIE1lbW9yeSBMYXlvdXQgb24gQVJNIExpbnV4CisKKwkJUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KKwkJCU1heSAyMSwgMjAwNCAoMi42LjYpCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB2aXJ0dWFsIG1lbW9yeSBsYXlvdXQgd2hpY2ggdGhlIExpbnV4CitrZXJuZWwgdXNlcyBmb3IgQVJNIHByb2Nlc3NvcnMuICBJdCBpbmRpY2F0ZXMgd2hpY2ggcmVnaW9ucyBhcmUKK2ZyZWUgZm9yIHBsYXRmb3JtcyB0byB1c2UsIGFuZCB3aGljaCBhcmUgdXNlZCBieSBnZW5lcmljIGNvZGUuCisKK1RoZSBBUk0gQ1BVIGlzIGNhcGFibGUgb2YgYWRkcmVzc2luZyBhIG1heGltdW0gb2YgNEdCIHZpcnR1YWwgbWVtb3J5CitzcGFjZSwgYW5kIHRoaXMgbXVzdCBiZSBzaGFyZWQgYmV0d2VlbiB1c2VyIHNwYWNlIHByb2Nlc3NlcywgdGhlCitrZXJuZWwsIGFuZCBoYXJkd2FyZSBkZXZpY2VzLgorCitBcyB0aGUgQVJNIGFyY2hpdGVjdHVyZSBtYXR1cmVzLCBpdCBiZWNvbWVzIG5lY2Vzc2FyeSB0byByZXNlcnZlCitjZXJ0YWluIHJlZ2lvbnMgb2YgVk0gc3BhY2UgZm9yIHVzZSBmb3IgbmV3IGZhY2lsaXRpZXM7IHRoZXJlZm9yZQordGhpcyBkb2N1bWVudCBtYXkgcmVzZXJ2ZSBtb3JlIFZNIHNwYWNlIG92ZXIgdGltZS4KKworU3RhcnQJCUVuZAkJVXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZmZmZjgwMDAJZmZmZmZmZmYJY29weV91c2VyX3BhZ2UgLyBjbGVhcl91c2VyX3BhZ2UgdXNlLgorCQkJCUZvciBTQTExeHggYW5kIFhzY2FsZSwgdGhpcyBpcyB1c2VkIHRvCisJCQkJc2V0dXAgYSBtaW5pY2FjaGUgbWFwcGluZy4KKworZmZmZjEwMDAJZmZmZjdmZmYJUmVzZXJ2ZWQuCisJCQkJUGxhdGZvcm1zIG11c3Qgbm90IHVzZSB0aGlzIGFkZHJlc3MgcmFuZ2UuCisKK2ZmZmYwMDAwCWZmZmYwZmZmCUNQVSB2ZWN0b3IgcGFnZS4KKwkJCQlUaGUgQ1BVIHZlY3RvcnMgYXJlIG1hcHBlZCBoZXJlIGlmIHRoZQorCQkJCUNQVSBzdXBwb3J0cyB2ZWN0b3IgcmVsb2NhdGlvbiAoY29udHJvbAorCQkJCXJlZ2lzdGVyIFYgYml0LikKKworZmZjMDAwMDAJZmZmZWZmZmYJRE1BIG1lbW9yeSBtYXBwaW5nIHJlZ2lvbi4gIE1lbW9yeSByZXR1cm5lZAorCQkJCWJ5IHRoZSBkbWFfYWxsb2NfeHh4IGZ1bmN0aW9ucyB3aWxsIGJlCisJCQkJZHluYW1pY2FsbHkgbWFwcGVkIGhlcmUuCisKK2ZmMDAwMDAwCWZmYmZmZmZmCVJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uIG9mIERNQQorCQkJCW1hcHBpbmcgcmVnaW9uLgorCitWTUFMTE9DX0VORAlmZWZmZmZmZglGcmVlIGZvciBwbGF0Zm9ybSB1c2UsIHJlY29tbWVuZGVkLgorCitWTUFMTE9DX1NUQVJUCVZNQUxMT0NfRU5ELTEJdm1hbGxvYygpIC8gaW9yZW1hcCgpIHNwYWNlLgorCQkJCU1lbW9yeSByZXR1cm5lZCBieSB2bWFsbG9jL2lvcmVtYXAgd2lsbAorCQkJCWJlIGR5bmFtaWNhbGx5IHBsYWNlZCBpbiB0aGlzIHJlZ2lvbi4KKwkJCQlWTUFMTE9DX1NUQVJUIG1heSBiZSBiYXNlZCB1cG9uIHRoZSB2YWx1ZQorCQkJCW9mIHRoZSBoaWdoX21lbW9yeSB2YXJpYWJsZS4KKworUEFHRV9PRkZTRVQJaGlnaF9tZW1vcnktMQlLZXJuZWwgZGlyZWN0LW1hcHBlZCBSQU0gcmVnaW9uLgorCQkJCVRoaXMgbWFwcyB0aGUgcGxhdGZvcm1zIFJBTSwgYW5kIHR5cGljYWxseQorCQkJCW1hcHMgYWxsIHBsYXRmb3JtIFJBTSBpbiBhIDE6MSByZWxhdGlvbnNoaXAuCisKK1RBU0tfU0laRQlQQUdFX09GRlNFVC0xCUtlcm5lbCBtb2R1bGUgc3BhY2UKKwkJCQlLZXJuZWwgbW9kdWxlcyBpbnNlcnRlZCB2aWEgaW5zbW9kIGFyZQorCQkJCXBsYWNlZCBoZXJlIHVzaW5nIGR5bmFtaWMgbWFwcGluZ3MuCisKKzAwMDAxMDAwCVRBU0tfU0laRS0xCVVzZXIgc3BhY2UgbWFwcGluZ3MKKwkJCQlQZXItdGhyZWFkIG1hcHBpbmdzIGFyZSBwbGFjZWQgaGVyZSB2aWEKKwkJCQl0aGUgbW1hcCgpIHN5c3RlbSBjYWxsLgorCiswMDAwMDAwMAkwMDAwMGZmZglDUFUgdmVjdG9yIHBhZ2UgLyBudWxsIHBvaW50ZXIgdHJhcAorCQkJCUNQVXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdmVjdG9yIHJlbWFwcGluZworCQkJCXBsYWNlIHRoZWlyIHZlY3RvciBwYWdlIGhlcmUuICBOVUxMIHBvaW50ZXIKKwkJCQlkZXJlZmVyZW5jZXMgYnkgYm90aCB0aGUga2VybmVsIGFuZCB1c2VyCisJCQkJc3BhY2UgYXJlIGFsc28gY2F1Z2h0IHZpYSB0aGlzIG1hcHBpbmcuCisKK1BsZWFzZSBub3RlIHRoYXQgbWFwcGluZ3Mgd2hpY2ggY29sbGlkZSB3aXRoIHRoZSBhYm92ZSBhcmVhcyBtYXkgcmVzdWx0CitpbiBhIG5vbi1ib290YWJsZSBrZXJuZWwsIG9yIG1heSBjYXVzZSB0aGUga2VybmVsIHRvIChldmVudHVhbGx5KSBwYW5pYworYXQgcnVuIHRpbWUuCisKK1NpbmNlIGZ1dHVyZSBDUFVzIG1heSBpbXBhY3QgdGhlIGtlcm5lbCBtYXBwaW5nIGxheW91dCwgdXNlciBwcm9ncmFtcworbXVzdCBub3QgYWNjZXNzIGFueSBtZW1vcnkgd2hpY2ggaXMgbm90IG1hcHBlZCBpbnNpZGUgdGhlaXIgMHgwMDAxMDAwCit0byBUQVNLX1NJWkUgYWRkcmVzcyByYW5nZS4gIElmIHRoZXkgd2lzaCB0byBhY2Nlc3MgdGhlc2UgYXJlYXMsIHRoZXkKK211c3Qgc2V0IHVwIHRoZWlyIG93biBtYXBwaW5ncyB1c2luZyBvcGVuKCkgYW5kIG1tYXAoKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL05PVEVTIGIvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvTk9URVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1NzdiNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL05PVEVTCkBAIC0wLDAgKzEsMjkgQEAKK1RoZXJlIHNlZW1zIHRvIGJlIGEgcHJvYmxlbSB3aXRoIGV4cChkb3VibGUpIGFuZCBvdXIgZW11bGF0b3IuICBJIGhhdmVuJ3QKK2JlZW4gYWJsZSB0byB0cmFjayBpdCBkb3duIHlldC4gIFRoaXMgZG9lcyBub3Qgb2NjdXIgd2l0aCB0aGUgZW11bGF0b3IKK3N1cHBsaWVkIGJ5IFJ1c3NlbGwgS2luZy4KKworSSBhbHNvIGZvdW5kIG9uZSBvZGRpdHkgaW4gdGhlIGVtdWxhdG9yLiAgSSBkb24ndCB0aGluayBpdCBpcyBzZXJpb3VzIGJ1dAord2lsbCBwb2ludCBpdCBvdXQuICBUaGUgQVJNIGNhbGxpbmcgY29udmVudGlvbnMgcmVxdWlyZSBmbG9hdGluZyBwb2ludAorcmVnaXN0ZXJzIGY0LWY3IHRvIGJlIHByZXNlcnZlZCBvdmVyIGEgZnVuY3Rpb24gY2FsbC4gIFRoZSBjb21waWxlciBxdWl0ZQorb2Z0ZW4gdXNlcyBhbiBzdGZlIGluc3RydWN0aW9uIHRvIHNhdmUgZjQgb24gdGhlIHN0YWNrIHVwb24gZW50cnkgdG8gYQorZnVuY3Rpb24sIGFuZCBhbiBsZGZlIGluc3RydWN0aW9uIHRvIHJlc3RvcmUgaXQgYmVmb3JlIHJldHVybmluZy4KKworSSB3YXMgbG9va2luZyBhdCBzb21lIGNvZGUsIHRoYXQgY2FsY3VsYXRlZCBhIGRvdWJsZSByZXN1bHQsIHN0b3JlZCBpdCBpbiBmNAordGhlbiBtYWRlIGEgZnVuY3Rpb24gY2FsbC4gVXBvbiByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gY2FsbCB0aGUgbnVtYmVyIGluCitmNCBoYWQgYmVlbiBjb252ZXJ0ZWQgdG8gYW4gZXh0ZW5kZWQgdmFsdWUgaW4gdGhlIGVtdWxhdG9yLgorCitUaGlzIGlzIGEgc2lkZSBlZmZlY3Qgb2YgdGhlIHN0ZmUgaW5zdHJ1Y3Rpb24uICBUaGUgZG91YmxlIGluIGY0IGhhZCB0byBiZQorY29udmVydGVkIHRvIGV4dGVuZGVkLCB0aGVuIHN0b3JlZC4gIElmIGFuIGxmbS9zZm0gY29tYmluYXRpb24gaGFkIGJlZW4gdXNlZCwKK3RoZW4gbm8gY29udmVyc2lvbiB3b3VsZCBvY2N1ci4gIFRoaXMgaGFzIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLiAgVGhlCityZXN1bHQgZnJvbSB0aGUgZnVuY3Rpb24gY2FsbCBhbmQgZjQgd2VyZSB1c2VkIGluIGEgbXVsdGlwbGljYXRpb24uICBJZiB0aGUKK2VtdWxhdG9yIHNlZXMgYSBtdWx0aXBseSBvZiBhIGRvdWJsZSBhbmQgZXh0ZW5kZWQsIGl0IHByb21vdGVzIHRoZSBkb3VibGUgdG8KK2V4dGVuZGVkLCB0aGVuIGRvZXMgdGhlIG11bHRpcGx5IGluIGV4dGVuZGVkIHByZWNpc2lvbi4KKworVGhpcyBjb2RlIHdpbGwgY2F1c2UgdGhpcyBwcm9ibGVtOgorCitkb3VibGUgeCwgeSwgejsKK3ogPSBsb2coeCkvbG9nKHkpOworCitUaGUgcmVzdWx0IG9mIGxvZyh4KSAoYSBkb3VibGUpIHdpbGwgYmUgY2FsY3VsYXRlZCwgcmV0dXJuZWQgaW4gZjAsIHRoZW4KK21vdmVkIHRvIGY0IHRvIHByZXNlcnZlIGl0IG92ZXIgdGhlIGxvZyh5KSBjYWxsLiAgVGhlIGRpdmlzaW9uIHdpbGwgYmUgZG9uZQoraW4gZXh0ZW5kZWQgcHJlY2lzaW9uLCBkdWUgdG8gdGhlIHN0ZmUgaW5zdHJ1Y3Rpb24gdXNlZCB0byBzYXZlIGY0IGluIGxvZyh5KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL1JFQURNRSBiL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzE4NzFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvUkVBRE1FCkBAIC0wLDAgKzEsNzAgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSB2ZXJzaW9uIDAuOTIgdGVzdCByZWxlYXNlIG9mIHRoZSBOZXRXaW5kZXIgCitGbG9hdGluZyBQb2ludCBFbXVsYXRvci4KKworVGhlIG1ham9yaXR5IG9mIHRoZSBjb2RlIHdhcyB3cml0dGVuIGJ5IG1lLCBTY290dCBCYW1icm91Z2ggSXQgaXMKK3dyaXR0ZW4gaW4gQywgd2l0aCBhIHNtYWxsIG51bWJlciBvZiByb3V0aW5lcyBpbiBpbmxpbmUgYXNzZW1ibGVyCit3aGVyZSByZXF1aXJlZC4gIEl0IHdhcyB3cml0dGVuIHF1aWNrbHksIHdpdGggYSBnb2FsIG9mIGltcGxlbWVudGluZyBhCit3b3JraW5nIHZlcnNpb24gb2YgYWxsIHRoZSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMgdGhlIGNvbXBpbGVyCitlbWl0cyBhcyB0aGUgZmlyc3QgdGFyZ2V0LiAgSSBoYXZlIGF0dGVtcHRlZCB0byBiZSBhcyBvcHRpbWFsIGFzCitwb3NzaWJsZSwgYnV0IHRoZXJlIHJlbWFpbnMgbXVjaCByb29tIGZvciBpbXByb3ZlbWVudC4KKworSSBoYXZlIGF0dGVtcHRlZCB0byBtYWtlIHRoZSBlbXVsYXRvciBhcyBwb3J0YWJsZSBhcyBwb3NzaWJsZS4gIE9uZSBvZgordGhlIHByb2JsZW1zIGlzIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlcyBvbiBrZXJuZWwgc3ltYm9scy4gIEVsZgora2VybmVscyBoYXZlIG5vIGxlYWRpbmcgdW5kZXJzY29yZXMsIGEub3V0IGNvbXBpbGVkIGtlcm5lbHMgZG8uICBJCitoYXZlIGF0dGVtcHRlZCB0byB1c2UgdGhlIENfU1lNQk9MX05BTUUgbWFjcm8gd2hlcmV2ZXIgdGhpcyBtYXkgYmUKK2ltcG9ydGFudC4KKworQW5vdGhlciBjaG9pY2UgSSBtYWRlIHdhcyBpbiB0aGUgZmlsZSBzdHJ1Y3R1cmUuICBJIGhhdmUgYXR0ZW1wdGVkIHRvCitjb250YWluIGFsbCBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIGNvZGUgaW4gb25lIG1vZHVsZSAoZnBtb2R1bGUuKikuCitBbGwgdGhlIG90aGVyIGZpbGVzIGNvbnRhaW4gZW11bGF0b3Igc3BlY2lmaWMgY29kZS4gIFRoaXMgc2hvdWxkIGFsbG93CitvdGhlcnMgdG8gcG9ydCB0aGUgZW11bGF0b3IgdG8gTmV0QlNEIGZvciBpbnN0YW5jZSByZWxhdGl2ZWx5IGVhc2lseS4KKworVGhlIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgYXJlIGJhc2VkIG9uIFNvZnRGbG9hdCBSZWxlYXNlIDIsIGJ5CitKb2huIEhhdXNlci4gIFNvZnRGbG9hdCBpcyBhIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mIGZsb2F0aW5nLXBvaW50Cit0aGF0IGNvbmZvcm1zIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50CitBcml0aG1ldGljLiAgQXMgbWFueSBhcyBmb3VyIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDogc2luZ2xlIHByZWNpc2lvbiwKK2RvdWJsZSBwcmVjaXNpb24sIGV4dGVuZGVkIGRvdWJsZSBwcmVjaXNpb24sIGFuZCBxdWFkcnVwbGUgcHJlY2lzaW9uLgorQWxsIG9wZXJhdGlvbnMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGFyZSBpbXBsZW1lbnRlZCwgZXhjZXB0IGZvcgorY29udmVyc2lvbnMgdG8gYW5kIGZyb20gZGVjaW1hbC4gIFdlIHVzZSBvbmx5IHRoZSBzaW5nbGUgcHJlY2lzaW9uLAorZG91YmxlIHByZWNpc2lvbiBhbmQgZXh0ZW5kZWQgZG91YmxlIHByZWNpc2lvbiBmb3JtYXRzLiAgVGhlIHBvcnQgb2YKK1NvZnRGbG9hdCB0byB0aGUgQVJNIHdhcyBkb25lIGJ5IFBoaWwgQmx1bmRlbGwsIGJhc2VkIG9uIGFuIGVhcmxpZXIKK3BvcnQgb2YgU29mdEZsb2F0IHZlcnNpb24gMSBieSBOZWlsIENhcnNvbiBmb3IgTmV0QlNEL2FybTMyLgorCitUaGUgZmlsZSBSRUFETUUuRlBFIGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2Ygd2hhdCBoYXMgYmVlbiBpbXBsZW1lbnRlZAorc28gZmFyIGluIHRoZSBlbXVsYXRvci4gIFRoZSBmaWxlIFRPRE8gY29udGFpbnMgYSBpbmZvcm1hdGlvbiBvbiB3aGF0IAorcmVtYWlucyB0byBiZSBkb25lLCBhbmQgb3RoZXIgaWRlYXMgZm9yIHRoZSBlbXVsYXRvci4KKworQnVnIHJlcG9ydHMsIGNvbW1lbnRzLCBzdWdnZXN0aW9ucyBzaG91bGQgYmUgZGlyZWN0ZWQgdG8gbWUgYXQKKzxzY290dGJAbmV0d2luZGVyLm9yZz4uICBHZW5lcmFsIHJlcG9ydHMgb2YgInRoaXMgcHJvZ3JhbSBkb2Vzbid0Cit3b3JrIGNvcnJlY3RseSB3aGVuIHlvdXIgZW11bGF0b3IgaXMgaW5zdGFsbGVkIiBhcmUgdXNlZnVsIGZvcgorZGV0ZXJtaW5pbmcgdGhhdCBidWdzIHN0aWxsIGV4aXN0OyBidXQgYXJlIHZpcnR1YWxseSB1c2VsZXNzIHdoZW4KK2F0dGVtcHRpbmcgdG8gaXNvbGF0ZSB0aGUgcHJvYmxlbS4gIFBsZWFzZSByZXBvcnQgdGhlbSwgYnV0IGRvbid0CitleHBlY3QgcXVpY2sgYWN0aW9uLiAgQnVncyBzdGlsbCBleGlzdC4gIFRoZSBwcm9ibGVtIHJlbWFpbnMgaW4gaXNvbGF0aW5nCit3aGljaCBpbnN0cnVjdGlvbiBjb250YWlucyB0aGUgYnVnLiAgU21hbGwgcHJvZ3JhbXMgaWxsdXN0cmF0aW5nIGEgc3BlY2lmaWMKK3Byb2JsZW0gYXJlIGEgZ29kc2VuZC4KKworTGVnYWwgTm90aWNlcworLS0tLS0tLS0tLS0tLQorCitUaGUgTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yIGlzIGZyZWUgc29mdHdhcmUuICBFdmVyeXRoaW5nIFJlYmVsLmNvbQoraGFzIHdyaXR0ZW4gaXMgcHJvdmlkZWQgdW5kZXIgdGhlIEdOVSBHUEwuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZworY29uZGl0aW9ucy4gIEV4Y2x1ZGVkIGZyb20gdGhlIGFib3ZlIGlzIHRoZSBTb2Z0RmxvYXQgY29kZS4gIEpvaG4gSGF1c2VyJ3MgCitsZWdhbCBub3RpY2UgZm9yIFNvZnRGbG9hdCBpcyBpbmNsdWRlZCBiZWxvdy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29mdEZsb2F0IExlZ2FsIE5vdGljZQorCitTb2Z0RmxvYXQgd2FzIHdyaXR0ZW4gYnkgSm9obiBSLiBIYXVzZXIuICBUaGlzIHdvcmsgd2FzIG1hZGUgcG9zc2libGUgaW4KK3BhcnQgYnkgdGhlIEludGVybmF0aW9uYWwgQ29tcHV0ZXIgU2NpZW5jZSBJbnN0aXR1dGUsIGxvY2F0ZWQgYXQgU3VpdGUgNjAwLAorMTk0NyBDZW50ZXIgU3RyZWV0LCBCZXJrZWxleSwgQ2FsaWZvcm5pYSA5NDcwNC4gIEZ1bmRpbmcgd2FzIHBhcnRpYWxseQorcHJvdmlkZWQgYnkgdGhlIE5hdGlvbmFsIFNjaWVuY2UgRm91bmRhdGlvbiB1bmRlciBncmFudCBNSVAtOTMxMTk4MC4gIFRoZQorb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIGNvZGUgd2FzIHdyaXR0ZW4gYXMgcGFydCBvZiBhIHByb2plY3QgdG8gYnVpbGQKK2EgZml4ZWQtcG9pbnQgdmVjdG9yIHByb2Nlc3NvciBpbiBjb2xsYWJvcmF0aW9uIHdpdGggdGhlIFVuaXZlcnNpdHkgb2YKK0NhbGlmb3JuaWEgYXQgQmVya2VsZXksIG92ZXJzZWVuIGJ5IFByb2ZzLiBOZWxzb24gTW9yZ2FuIGFuZCBKb2huIFdhd3J6eW5lay4KKworVEhJUyBTT0ZUV0FSRSBJUyBESVNUUklCVVRFRCBBUyBJUywgRk9SIEZSRUUuICBBbHRob3VnaCByZWFzb25hYmxlIGVmZm9ydAoraGFzIGJlZW4gbWFkZSB0byBhdm9pZCBpdCwgVEhJUyBTT0ZUV0FSRSBNQVkgQ09OVEFJTiBGQVVMVFMgVEhBVCBXSUxMIEFUCitUSU1FUyBSRVNVTFQgSU4gSU5DT1JSRUNUIEJFSEFWSU9SLiAgVVNFIE9GIFRISVMgU09GVFdBUkUgSVMgUkVTVFJJQ1RFRCBUTworUEVSU09OUyBBTkQgT1JHQU5JWkFUSU9OUyBXSE8gQ0FOIEFORCBXSUxMIFRBS0UgRlVMTCBSRVNQT05TSUJJTElUWSBGT1IgQU5ZCitBTkQgQUxMIExPU1NFUywgQ09TVFMsIE9SIE9USEVSIFBST0JMRU1TIEFSSVNJTkcgRlJPTSBJVFMgVVNFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvUkVBRE1FLkZQRSBiL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL1JFQURNRS5GUEUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmNWQ3YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL1JFQURNRS5GUEUKQEAgLTAsMCArMSwxNTYgQEAKK1RoZSBmb2xsb3dpbmcgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOZXRXaW5kZXIncyBmbG9hdGluZyBwb2ludAorZW11bGF0b3IuCisKK0luIHRoZSBmb2xsb3dpbmcgbm9tZW5jbGF0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGZsb2F0aW5nIHBvaW50CitpbnN0cnVjdGlvbnMuICBJdCBmb2xsb3dzIHRoZSBjb252ZW50aW9ucyBpbiB0aGUgQVJNIG1hbnVhbC4KKworPFN8RHxFPiA9IDxzaW5nbGV8ZG91YmxlfGV4dGVuZGVkPiwgbm8gZGVmYXVsdAore1B8TXxafSA9IHtyb3VuZCB0byAraW5maW5pdHkscm91bmQgdG8gLWluZmluaXR5LHJvdW5kIHRvIHplcm99LAorICAgICAgICAgIGRlZmF1bHQgPSByb3VuZCB0byBuZWFyZXN0CisKK05vdGU6IGl0ZW1zIGVuY2xvc2VkIGluIHt9IGFyZSBvcHRpb25hbC4KKworRmxvYXRpbmcgUG9pbnQgQ29wcm9jZXNzb3IgRGF0YSBUcmFuc2ZlciBJbnN0cnVjdGlvbnMgKENQRFQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTERGL1NURiAtIGxvYWQgYW5kIHN0b3JlIGZsb2F0aW5nCisKKzxMREZ8U1RGPntjb25kfTxTfER8RT4gRmQsIFJuCis8TERGfFNURj57Y29uZH08U3xEfEU+IEZkLCBbUm4sICM8ZXhwcmVzc2lvbj5deyF9Cis8TERGfFNURj57Y29uZH08U3xEfEU+IEZkLCBbUm5dLCAjPGV4cHJlc3Npb24+CisKK1RoZXNlIGluc3RydWN0aW9ucyBhcmUgZnVsbHkgaW1wbGVtZW50ZWQuCisKK0xGTS9TRk0gLSBsb2FkIGFuZCBzdG9yZSBtdWx0aXBsZSBmbG9hdGluZworCitGb3JtIDEgc3ludGF4OgorPExGTXxTRk0+e2NvbmR9PFN8RHxFPiBGZCwgPGNvdW50PiwgW1JuXQorPExGTXxTRk0+e2NvbmR9PFN8RHxFPiBGZCwgPGNvdW50PiwgW1JuLCAjPGV4cHJlc3Npb24+XXshfQorPExGTXxTRk0+e2NvbmR9PFN8RHxFPiBGZCwgPGNvdW50PiwgW1JuXSwgIzxleHByZXNzaW9uPgorCitGb3JtIDIgc3ludGF4OgorPExGTXxTRk0+e2NvbmR9PEZELEVBPiBGZCwgPGNvdW50PiwgW1JuXXshfQorCitUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGZ1bGx5IGltcGxlbWVudGVkLiAgVGhleSBzdG9yZS9sb2FkIHRocmVlIHdvcmRzCitmb3IgZWFjaCBmbG9hdGluZyBwb2ludCByZWdpc3RlciBpbnRvIHRoZSBtZW1vcnkgbG9jYXRpb24gZ2l2ZW4gaW4gdGhlIAoraW5zdHJ1Y3Rpb24uICBUaGUgZm9ybWF0IGluIG1lbW9yeSBpcyB1bmxpa2VseSB0byBiZSBjb21wYXRpYmxlIHdpdGgKK290aGVyIGltcGxlbWVudGF0aW9ucywgaW4gcGFydGljdWxhciB0aGUgYWN0dWFsIGhhcmR3YXJlLiAgU3BlY2lmaWMKK21lbnRpb24gb2YgdGhpcyBpcyBtYWRlIGluIHRoZSBBUk0gbWFudWFscy4gIAorCitGbG9hdGluZyBQb2ludCBDb3Byb2Nlc3NvciBSZWdpc3RlciBUcmFuc2ZlciBJbnN0cnVjdGlvbnMgKENQUlQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnZlcnNpb25zLCByZWFkL3dyaXRlIHN0YXR1cy9jb250cm9sIHJlZ2lzdGVyIGluc3RydWN0aW9ucworCitGTFR7Y29uZH08UyxELEU+e1AsTSxafSBGbiwgUmQgICAgICAgICAgQ29udmVydCBpbnRlZ2VyIHRvIGZsb2F0aW5nIHBvaW50CitGSVh7Y29uZH17UCxNLFp9IFJkLCBGbiAgICAgICAgICAgICAgICAgQ29udmVydCBmbG9hdGluZyBwb2ludCB0byBpbnRlZ2VyCitXRlN7Y29uZH0gUmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyCitSRlN7Y29uZH0gUmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIKK1dGQ3tjb25kfSBSZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyCitSRkN7Y29uZH0gUmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyCisKK0ZMVC9GSVggYXJlIGZ1bGx5IGltcGxlbWVudGVkLgorCitSRlMvV0ZTIGFyZSBmdWxseSBpbXBsZW1lbnRlZC4KKworUkZDL1dGQyBhcmUgZnVsbHkgaW1wbGVtZW50ZWQuICBSRkMvV0ZDIGFyZSBzdXBlcnZpc29yIG9ubHkgaW5zdHJ1Y3Rpb25zLCBhbmQKK3ByZXNlbnRseSBjaGVjayB0aGUgQ1BVIG1vZGUsIGFuZCBkbyBhbiBpbnZhbGlkIGluc3RydWN0aW9uIHRyYXAgaWYgbm90IGNhbGxlZAorZnJvbSBzdXBlcnZpc29yIG1vZGUuCisKK0NvbXBhcmUgaW5zdHJ1Y3Rpb25zCisKK0NNRntjb25kfSBGbiwgRm0gICAgICAgIENvbXBhcmUgZmxvYXRpbmcKK0NNRkV7Y29uZH0gRm4sIEZtICAgICAgIENvbXBhcmUgZmxvYXRpbmcgd2l0aCBleGNlcHRpb24KK0NORntjb25kfSBGbiwgRm0gICAgICAgIENvbXBhcmUgbmVnYXRlZCBmbG9hdGluZworQ05GRXtjb25kfSBGbiwgRm0gICAgICAgQ29tcGFyZSBuZWdhdGVkIGZsb2F0aW5nIHdpdGggZXhjZXB0aW9uCisKK1RoZXNlIGFyZSBmdWxseSBpbXBsZW1lbnRlZC4KKworRmxvYXRpbmcgUG9pbnQgQ29wcm9jZXNzb3IgRGF0YSBJbnN0cnVjdGlvbnMgKENQRFQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHlhZGljIG9wZXJhdGlvbnM6CisKK0FERntjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSBhZGQKK1NVRntjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSBzdWJ0cmFjdAorUlNGe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIHJldmVyc2Ugc3VidHJhY3QKK01VRntjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSBtdWx0aXBseQorRFZGe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIGRpdmlkZQorUkRWe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIHJldmVyc2UgZGl2aWRlCisKK1RoZXNlIGFyZSBmdWxseSBpbXBsZW1lbnRlZC4KKworRk1Me2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIGZhc3QgbXVsdGlwbHkKK0ZEVntjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSBmYXN0IGRpdmlkZQorRlJEe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIGZhc3QgcmV2ZXJzZSBkaXZpZGUKKworVGhlc2UgYXJlIGZ1bGx5IGltcGxlbWVudGVkIGFzIHdlbGwuICBUaGV5IHVzZSB0aGUgc2FtZSBhbGdvcml0aG0gYXMgdGhlCitub24tZmFzdCB2ZXJzaW9ucy4gIEhlbmNlLCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIHRoZWlyIHBlcmZvcm1hbmNlIGlzCitlcXVpdmFsZW50IHRvIHRoZSBNVUYvRFZGL1JEViBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIGFjY2VwdGFibGUgYWNjb3JkaW5nCit0byB0aGUgQVJNIG1hbnVhbC4gIFRoZSBtYW51YWwgbm90ZXMgdGhlc2UgYXJlIGRlZmluZWQgb25seSBmb3Igc2luZ2xlCitvcGVyYW5kcywgb24gdGhlIGFjdHVhbCBGUEExMSBoYXJkd2FyZSB0aGV5IGRvIG5vdCB3b3JrIGZvciBkb3VibGUgb3IKK2V4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kcy4gIFRoZSBlbXVsYXRvciBjdXJyZW50bHkgZG9lcyBub3QgY2hlY2sKK3RoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgY29uZGl0aW9ucywgYW5kIHBlcmZvcm1zIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLgorCitSTUZ7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgRm4sIDxGbSwjdmFsdWU+IC0gSUVFRSByZW1haW5kZXIKKworVGhpcyBpcyBmdWxseSBpbXBsZW1lbnRlZC4KKworTW9uYWRpYyBvcGVyYXRpb25zOgorCitNVkZ7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBtb3ZlCitNTkZ7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBtb3ZlIG5lZ2F0ZWQKKworVGhlc2UgYXJlIGZ1bGx5IGltcGxlbWVudGVkLgorCitBQlN7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBhYnNvbHV0ZSB2YWx1ZQorU1FUe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gc3F1YXJlIHJvb3QKK1JORHtjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIHJvdW5kCisKK1RoZXNlIGFyZSBmdWxseSBpbXBsZW1lbnRlZC4KKworVVJEe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gdW5ub3JtYWxpemVkIHJvdW5kCitOUk17Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBub3JtYWxpemUKKworVGhlc2UgYXJlIGltcGxlbWVudGVkLiAgVVJEIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBzYW1lIGNvZGUgYXMgdGhlIFJORAoraW5zdHJ1Y3Rpb24uICBTaW5jZSBVUkQgY2Fubm90IHJldHVybiBhIHVubm9ybWFsaXplZCBudW1iZXIsIE5STSBiZWNvbWVzCithIE5PUC4KKworTGlicmFyeSBjYWxsczoKKworUE9Xe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIHBvd2VyCitSUFd7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgRm4sIDxGbSwjdmFsdWU+IC0gcmV2ZXJzZSBwb3dlcgorUE9Me2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIHBvbGFyIGFuZ2xlIChhcmN0YW4yKQorCitMT0d7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBsb2dhcml0aG0gdG8gYmFzZSAxMAorTEdOe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gbG9nYXJpdGhtIHRvIGJhc2UgZSAKK0VYUHtjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGV4cG9uZW50CitTSU57Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBzaW5lCitDT1N7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBjb3NpbmUKK1RBTntjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIHRhbmdlbnQKK0FTTntjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGFyY3NpbmUKK0FDU3tjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGFyY2Nvc2luZQorQVROe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gYXJjdGFuZ2VudAorCitUaGVzZSBhcmUgbm90IGltcGxlbWVudGVkLiAgVGhleSBhcmUgbm90IGN1cnJlbnRseSBpc3N1ZWQgYnkgdGhlIGNvbXBpbGVyLAorYW5kIGFyZSBoYW5kbGVkIGJ5IHJvdXRpbmVzIGluIGxpYmMuICBUaGVzZSBhcmUgbm90IGltcGxlbWVudGVkIGJ5IHRoZSBGUEExMQoraGFyZHdhcmUsIGJ1dCBhcmUgaGFuZGxlZCBieSB0aGUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBjb2RlLiAgVGhleSBzaG91bGQgCitiZSBpbXBsZW1lbnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMuCisKK1NpZ25hbGxpbmc6CisKK1NpZ25hbHMgYXJlIGltcGxlbWVudGVkLiAgSG93ZXZlciBjdXJyZW50IEVMRiBrZXJuZWxzIHByb2R1Y2VkIGJ5IFJlYmVsLmNvbQoraGF2ZSBhIGJ1ZyBpbiB0aGVtIHRoYXQgcHJldmVudHMgdGhlIG1vZHVsZSBmcm9tIGdlbmVyYXRpbmcgYSBTSUdGUEUuICBUaGlzCitpcyBjYXVzZWQgYnkgYSBmYWlsdXJlIHRvIGFsaWFzIGZwX2N1cnJlbnQgdG8gdGhlIGtlcm5lbCB2YXJpYWJsZQorY3VycmVudF9zZXRbMF0gY29ycmVjdGx5LgorCitUaGUga2VybmVsIHByb3ZpZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gKHZtbGludXgtbndmcGUtMC45MykgY29udGFpbnMKK2EgZml4IGZvciB0aGlzIHByb2JsZW0gYW5kIGFsc28gaW5jb3Jwb3JhdGVzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlCitlbXVsYXRvciBkaXJlY3RseS4gIEl0IGlzIHBvc3NpYmxlIHRvIHJ1biB3aXRoIG5vIGZsb2F0aW5nIHBvaW50IG1vZHVsZQorbG9hZGVkIHdpdGggdGhpcyBrZXJuZWwuICBJdCBpcyBwcm92aWRlZCBhcyBhIGRlbW9uc3RyYXRpb24gb2YgdGhlIAordGVjaG5vbG9neSBhbmQgZm9yIHRob3NlIHdobyB3YW50IHRvIGRvIGZsb2F0aW5nIHBvaW50IHdvcmsgdGhhdCBkZXBlbmRzCitvbiBzaWduYWxzLiAgSXQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byB1c2UgdGhlIG1vZHVsZS4KKworQSBtb2R1bGUgKGVpdGhlciB0aGUgb25lIHByb3ZpZGVkIGJ5IFJ1c3NlbGwgS2luZywgb3IgdGhlIG9uZSBpbiB0aGlzIAorZGlzdHJpYnV0aW9uKSBjYW4gYmUgbG9hZGVkIHRvIHJlcGxhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGVtdWxhdG9yCitidWlsdCBpbnRvIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9ud2ZwZS9UT0RPIGIvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDI3MDYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvVE9ETwpAQCAtMCwwICsxLDY3IEBACitUT0RPIExJU1QKKy0tLS0tLS0tLQorCitQT1d7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgRm4sIDxGbSwjdmFsdWU+IC0gcG93ZXIKK1JQV3tjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSByZXZlcnNlIHBvd2VyCitQT0x7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgRm4sIDxGbSwjdmFsdWU+IC0gcG9sYXIgYW5nbGUgKGFyY3RhbjIpCisKK0xPR3tjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGxvZ2FyaXRobSB0byBiYXNlIDEwCitMR057Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBsb2dhcml0aG0gdG8gYmFzZSBlIAorRVhQe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gZXhwb25lbnQKK1NJTntjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIHNpbmUKK0NPU3tjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGNvc2luZQorVEFOe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gdGFuZ2VudAorQVNOe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gYXJjc2luZQorQUNTe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gYXJjY29zaW5lCitBVE57Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBhcmN0YW5nZW50CisKK1RoZXNlIGFyZSBub3QgaW1wbGVtZW50ZWQuICBUaGV5IGFyZSBub3QgY3VycmVudGx5IGlzc3VlZCBieSB0aGUgY29tcGlsZXIsCithbmQgYXJlIGhhbmRsZWQgYnkgcm91dGluZXMgaW4gbGliYy4gIFRoZXNlIGFyZSBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIEZQQTExCitoYXJkd2FyZSwgYnV0IGFyZSBoYW5kbGVkIGJ5IHRoZSBmbG9hdGluZyBwb2ludCBzdXBwb3J0IGNvZGUuICBUaGV5IHNob3VsZCAKK2JlIGltcGxlbWVudGVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4KKworVGhlcmUgYXJlIGEgY291cGxlIG9mIHdheXMgdG8gYXBwcm9hY2ggdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlLiAgT25lCittZXRob2Qgd291bGQgYmUgdG8gdXNlIGFjY3VyYXRlIHRhYmxlIG1ldGhvZHMgZm9yIHRoZXNlIHJvdXRpbmVzLiAgSSBoYXZlIAorYSBjb3VwbGUgb2YgcGFwZXJzIGJ5IFMuIEdhbCBmcm9tIElCTSdzIHJlc2VhcmNoIGxhYnMgaW4gSGFpZmEsIElzcmFlbCB0aGF0CitzZWVtIHRvIHByb21pc2UgZXh0cmVtZSBhY2N1cmFjeSAoaW4gdGhlIG9yZGVyIG9mIDk5LjglKSBhbmQgcmVhc29uYWJsZSBzcGVlZC4KK1RoZXNlIG1ldGhvZHMgYXJlIHVzZWQgaW4gR0xJQkMgZm9yIHNvbWUgb2YgdGhlIHRyYW5zY2VuZGVudGFsIGZ1bmN0aW9ucy4KKworQW5vdGhlciBhcHByb2FjaCwgd2hpY2ggSSBrbm93IGxpdHRsZSBhYm91dCBpcyBDT1JESUMuICBUaGlzIHN0YW5kcyBmb3IKK0Nvb3JkaW5hdGUgUm90YXRpb24gRGlnaXRhbCBDb21wdXRlciwgYW5kIGlzIGEgbWV0aG9kIG9mIGNvbXB1dGluZyAKK3RyYW5zY2VuZGVudGFsIGZ1bmN0aW9ucyB1c2luZyBtb3N0bHkgc2hpZnRzIGFuZCBhZGRzIGFuZCBhIGZldworbXVsdGlwbGljYXRpb25zIGFuZCBkaXZpc2lvbnMuICBUaGUgQVJNIGV4Y2VscyBhdCBzaGlmdHMgYW5kIGFkZHMsCitzbyBzdWNoIGEgbWV0aG9kIGNvdWxkIGJlIHByb21pc2luZywgYnV0IHJlcXVpcmVzIG1vcmUgcmVzZWFyY2ggdG8gCitkZXRlcm1pbmUgaWYgaXQgaXMgZmVhc2libGUuCisKK1JvdW5kaW5nIE1ldGhvZHMKKworVGhlIElFRUUgc3RhbmRhcmQgZGVmaW5lcyA0IHJvdW5kaW5nIG1vZGVzLiAgUm91bmQgdG8gbmVhcmVzdCBpcyB0aGUKK2RlZmF1bHQsIGJ1dCByb3VuZGluZyB0byArIG9yIC0gaW5maW5pdHkgb3Igcm91bmQgdG8gemVybyBhcmUgYWxzbyBhbGxvd2VkLgorTWFueSBhcmNoaXRlY3R1cmVzIGFsbG93IHRoZSByb3VuZGluZyBtb2RlIHRvIGJlIHNwZWNpZmllZCBieSBtb2RpZnlpbmcgYml0cworaW4gYSBjb250cm9sIHJlZ2lzdGVyLiAgTm90IHNvIHdpdGggdGhlIEFSTSBGUEExMSBhcmNoaXRlY3R1cmUuICBUbyBjaGFuZ2UKK3RoZSByb3VuZGluZyBtb2RlIG9uZSBtdXN0IHNwZWNpZnkgaXQgd2l0aCBlYWNoIGluc3RydWN0aW9uLgorCitUaGlzIGhhcyBtYWRlIHBvcnRpbmcgc29tZSBiZW5jaG1hcmtzIGRpZmZpY3VsdC4gIEl0IGlzIHBvc3NpYmxlIHRvCitpbnRyb2R1Y2Ugc3VjaCBhIGNhcGFiaWxpdHkgaW50byB0aGUgZW11bGF0b3IuICBUaGUgRlBDUiBjb250YWlucyAKK2JpdHMgZGVzY3JpYmluZyB0aGUgcm91bmRpbmcgbW9kZS4gIFRoZSBlbXVsYXRvciBjb3VsZCBiZSBhbHRlcmVkIHRvIAorZXhhbWluZSBhIGZsYWcsIHdoaWNoIGlmIHNldCBmb3JjZWQgaXQgdG8gaWdub3JlIHRoZSByb3VuZGluZyBtb2RlIGluCit0aGUgaW5zdHJ1Y3Rpb24sIGFuZCB1c2UgdGhlIG1vZGUgc3BlY2lmaWVkIGluIHRoZSBiaXRzIGluIHRoZSBGUENSLgorCitUaGlzIHdvdWxkIHJlcXVpcmUgYSBtZXRob2Qgb2YgZ2V0dGluZy9zZXR0aW5nIHRoZSBmbGFnLCBhbmQgdGhlIGJpdHMKK2luIHRoZSBGUENSLiAgVGhpcyByZXF1aXJlcyBhIGtlcm5lbCBjYWxsIGluIEFybUxpbnV4LCBhcyBXRkMvUkZDIGFyZQorc3VwZXJ2aXNvciBvbmx5IGluc3RydWN0aW9ucy4gIElmIGFueW9uZSBoYXMgYW55IGlkZWFzIG9yIGNvbW1lbnRzIEkKK3dvdWxkIGxpa2UgdG8gaGVhciB0aGVtLgorCitbTk9URTogcHVsbGVkIG91dCBmcm9tIHNvbWUgZG9jcyBvbiBBUk0gZmxvYXRpbmcgcG9pbnQsIHNwZWNpZmljYWxseQorIGZvciB0aGUgQWNvcm4gRlBFLCBidXQgbm90IGxpbWl0ZWQgdG8gaXQ6CisKKyBUaGUgZmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlciAoRlBDUikgbWF5IG9ubHkgYmUgcHJlc2VudCBpbiBzb21lCisgaW1wbGVtZW50YXRpb25zOiBpdCBpcyB0aGVyZSB0byBjb250cm9sIHRoZSBoYXJkd2FyZSBpbiBhbiBpbXBsZW1lbnRhdGlvbi0KKyBzcGVjaWZpYyBtYW5uZXIsIGZvciBleGFtcGxlIHRvIGRpc2FibGUgdGhlIGZsb2F0aW5nIHBvaW50IHN5c3RlbS4gIFRoZSB1c2VyCisgbW9kZSBvZiB0aGUgQVJNIGlzIG5vdCBwZXJtaXR0ZWQgdG8gdXNlIHRoaXMgcmVnaXN0ZXIgKHNpbmNlIHRoZSByaWdodCBpcworIHJlc2VydmVkIHRvIGFsdGVyIGl0IGJldHdlZW4gaW1wbGVtZW50YXRpb25zKSBhbmQgdGhlIFdGQyBhbmQgUkZDCisgaW5zdHJ1Y3Rpb25zIHdpbGwgdHJhcCBpZiB0cmllZCBpbiB1c2VyIG1vZGUuCisKKyBIZW5jZSwgdGhlIGFuc3dlciBpcyB5ZXMsIHlvdSBjb3VsZCBkbyB0aGlzLCBidXQgdGhlbiB5b3Ugd2lsbCBydW4gYSBoaWdoCisgcmlzayBvZiBiZWNvbWluZyBpc29sYXRlZCBpZiBhbmQgd2hlbiBoYXJkd2FyZSBGUCBlbXVsYXRpb24gY29tZXMgb3V0CisJCS0tIFJ1c3NlbGxdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dCBiL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlZGFhMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKQEAgLTAsMCArMSw0NTYgQEAKKwkJU2VtYW50aWNzIGFuZCBCZWhhdmlvciBvZiBBdG9taWMgYW5kCisJCSAgICAgICAgIEJpdG1hc2sgT3BlcmF0aW9ucworCisJCQkgIERhdmlkIFMuIE1pbGxlcgkgCisKKwlUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIHNlcnZlIGFzIGEgZ3VpZGUgdG8gTGludXggcG9ydAorbWFpbnRhaW5lcnMgb24gaG93IHRvIGltcGxlbWVudCBhdG9taWMgY291bnRlciwgYml0b3BzLCBhbmQgc3BpbmxvY2sKK2ludGVyZmFjZXMgcHJvcGVybHkuCisKKwlUaGUgYXRvbWljX3QgdHlwZSBzaG91bGQgYmUgZGVmaW5lZCBhcyBhIHNpZ25lZCBpbnRlZ2VyLgorQWxzbywgaXQgc2hvdWxkIGJlIG1hZGUgb3BhcXVlIHN1Y2ggdGhhdCBhbnkga2luZCBvZiBjYXN0IHRvIGEgbm9ybWFsCitDIGludGVnZXIgdHlwZSB3aWxsIGZhaWwuICBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHNob3VsZAorc3VmZmljZToKKworCXR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisKKwlUaGUgZmlyc3Qgb3BlcmF0aW9ucyB0byBpbXBsZW1lbnQgZm9yIGF0b21pY190J3MgYXJlIHRoZQoraW5pdGlhbGl6ZXJzIGFuZCBwbGFpbiByZWFkcy4KKworCSNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJCXsgKGkpIH0KKwkjZGVmaW5lIGF0b21pY19zZXQodiwgaSkJKCh2KS0+Y291bnRlciA9IChpKSkKKworVGhlIGZpcnN0IG1hY3JvIGlzIHVzZWQgaW4gZGVmaW5pdGlvbnMsIHN1Y2ggYXM6CisKK3N0YXRpYyBhdG9taWNfdCBteV9jb3VudGVyID0gQVRPTUlDX0lOSVQoMSk7CisKK1RoZSBzZWNvbmQgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIGF0IHJ1bnRpbWUsIGFzIGluOgorCisJc3RydWN0IGZvbyB7IGF0b21pY190IGNvdW50ZXI7IH07CisJLi4uCisKKwlzdHJ1Y3QgZm9vICprOworCisJayA9IGttYWxsb2Moc2l6ZW9mKCprKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrKQorCQlyZXR1cm4gLUVOT01FTTsKKwlhdG9taWNfc2V0KCZrLT5jb3VudGVyLCAwKTsKKworTmV4dCwgd2UgaGF2ZToKKworCSNkZWZpbmUgYXRvbWljX3JlYWQodikJKCh2KS0+Y291bnRlcikKKword2hpY2ggc2ltcGx5IHJlYWRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb3VudGVyLgorCitOb3csIHdlIG1vdmUgb250byB0aGUgYWN0dWFsIGF0b21pYyBvcGVyYXRpb24gaW50ZXJmYWNlcy4KKworCXZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpOworCXZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpOworCXZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdik7CisJdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KTsKKworVGhlc2UgZm91ciByb3V0aW5lcyBhZGQgYW5kIHN1YnRyYWN0IGludGVncmFsIHZhbHVlcyB0by9mcm9tIHRoZSBnaXZlbgorYXRvbWljX3QgdmFsdWUuICBUaGUgZmlyc3QgdHdvIHJvdXRpbmVzIHBhc3MgZXhwbGljaXQgaW50ZWdlcnMgYnkKK3doaWNoIHRvIG1ha2UgdGhlIGFkanVzdG1lbnQsIHdoZXJlYXMgdGhlIGxhdHRlciB0d28gdXNlIGFuIGltcGxpY2l0CithZGp1c3RtZW50IHZhbHVlIG9mICIxIi4KKworT25lIHZlcnkgaW1wb3J0YW50IGFzcGVjdCBvZiB0aGVzZSB0d28gcm91dGluZXMgaXMgdGhhdCB0aGV5IERPIE5PVAorcmVxdWlyZSBhbnkgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzLiAgVGhleSBuZWVkIG9ubHkgcGVyZm9ybSB0aGUKK2F0b21pY190IGNvdW50ZXIgdXBkYXRlIGluIGFuIFNNUCBzYWZlIG1hbm5lci4KKworTmV4dCwgd2UgaGF2ZToKKworCWludCBhdG9taWNfaW5jX3JldHVybihhdG9taWNfdCAqdik7CisJaW50IGF0b21pY19kZWNfcmV0dXJuKGF0b21pY190ICp2KTsKKworVGhlc2Ugcm91dGluZXMgYWRkIDEgYW5kIHN1YnRyYWN0IDEsIHJlc3BlY3RpdmVseSwgZnJvbSB0aGUgZ2l2ZW4KK2F0b21pY190IGFuZCByZXR1cm4gdGhlIG5ldyBjb3VudGVyIHZhbHVlIGFmdGVyIHRoZSBvcGVyYXRpb24gaXMKK3BlcmZvcm1lZC4KKworVW5saWtlIHRoZSBhYm92ZSByb3V0aW5lcywgaXQgaXMgcmVxdWlyZWQgdGhhdCBleHBsaWNpdCBtZW1vcnkKK2JhcnJpZXJzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3BlcmF0aW9uLiAgSXQgbXVzdCBiZQorZG9uZSBzdWNoIHRoYXQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGF0b21pYworb3BlcmF0aW9uIGNhbGxzIGFyZSBzdHJvbmdseSBvcmRlcmVkIHdpdGggcmVzcGVjdCB0byB0aGUgYXRvbWljCitvcGVyYXRpb24gaXRzZWxmLgorCitGb3IgZXhhbXBsZSwgaXQgc2hvdWxkIGJlaGF2ZSBhcyBpZiBhIHNtcF9tYigpIGNhbGwgZXhpc3RlZCBib3RoCitiZWZvcmUgYW5kIGFmdGVyIHRoZSBhdG9taWMgb3BlcmF0aW9uLgorCitJZiB0aGUgYXRvbWljIGluc3RydWN0aW9ucyB1c2VkIGluIGFuIGltcGxlbWVudGF0aW9uIHByb3ZpZGUgZXhwbGljaXQKK21lbW9yeSBiYXJyaWVyIHNlbWFudGljcyB3aGljaCBzYXRpc2Z5IHRoZSBhYm92ZSByZXF1aXJlbWVudHMsIHRoYXQgaXMKK2ZpbmUgYXMgd2VsbC4KKworTGV0J3MgbW92ZSBvbjoKKworCWludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpOworCWludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpOworCitUaGVzZSBiZWhhdmUganVzdCBsaWtlIGF0b21pY197aW5jLGRlY31fcmV0dXJuKCkgZXhjZXB0IHRoYXQgYW4KK2V4cGxpY2l0IGNvdW50ZXIgYWRqdXN0bWVudCBpcyBnaXZlbiBpbnN0ZWFkIG9mIHRoZSBpbXBsaWNpdCAiMSIuCitUaGlzIG1lYW5zIHRoYXQgbGlrZSBhdG9taWNfe2luYyxkZWN9X3JldHVybigpLCB0aGUgbWVtb3J5IGJhcnJpZXIKK3NlbWFudGljcyBhcmUgcmVxdWlyZWQuCisKK05leHQ6CisKKwlpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdik7CisJaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpOworCitUaGVzZSB0d28gcm91dGluZXMgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnkgMSwgcmVzcGVjdGl2ZWx5LCB0aGUKK2dpdmVuIGF0b21pYyBjb3VudGVyLiAgVGhleSByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUKK3Jlc3VsdGluZyBjb3VudGVyIHZhbHVlIHdhcyB6ZXJvIG9yIG5vdC4KKworSXQgcmVxdWlyZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGFyb3VuZCB0aGUgb3BlcmF0aW9uIGFzCithYm92ZS4KKworCWludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdik7CisKK1RoaXMgaXMgaWRlbnRpY2FsIHRvIGF0b21pY19kZWNfYW5kX3Rlc3QoKSBleGNlcHQgdGhhdCBhbiBleHBsaWNpdAorZGVjcmVtZW50IGlzIGdpdmVuIGluc3RlYWQgb2YgdGhlIGltcGxpY2l0ICIxIi4gIEl0IHJlcXVpcmVzIGV4cGxpY2l0CittZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYXJvdW5kIHRoZSBvcGVyYXRpb24uCisKKwlpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpOworCitUaGUgZ2l2ZW4gaW5jcmVtZW50IGlzIGFkZGVkIHRvIHRoZSBnaXZlbiBhdG9taWMgY291bnRlciB2YWx1ZS4gIEEKK2Jvb2xlYW4gaXMgcmV0dXJuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXN1bHRpbmcgY291bnRlciB2YWx1ZQoraXMgbmVnYXRpdmUuICBJdCByZXF1aXJlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYXJvdW5kIHRoZQorb3BlcmF0aW9uLgorCitJZiBhIGNhbGxlciByZXF1aXJlcyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYXJvdW5kIGFuIGF0b21pY190CitvcGVyYXRpb24gd2hpY2ggZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUsIGEgc2V0IG9mIGludGVyZmFjZXMgYXJlCitkZWZpbmVkIHdoaWNoIGFjY29tcGxpc2ggdGhpczoKKworCXZvaWQgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYyh2b2lkKTsKKwl2b2lkIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYyh2b2lkKTsKKwl2b2lkIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmModm9pZCk7CisJdm9pZCBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWModm9pZCk7CisKK0ZvciBleGFtcGxlLCBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgY2FuIGJlIHVzZWQgbGlrZSBzbzoKKworCW9iai0+ZGVhZCA9IDE7CisJc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCWF0b21pY19kZWMoJm9iai0+cmVmX2NvdW50KTsKKworSXQgbWFrZXMgc3VyZSB0aGF0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBwcmVjZWVkaW5nIHRoZSBhdG9taWNfZGVjKCkKK2NhbGwgYXJlIHN0cm9uZ2x5IG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBhdG9taWMgY291bnRlcgorb3BlcmF0aW9uLiAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIGl0IGd1YXJlbnRlZXMgdGhhdCB0aGUgYXNzaWdubWVudCBvZgorIjEiIHRvIG9iai0+ZGVhZCB3aWxsIGJlIGdsb2JhbGx5IHZpc2libGUgdG8gb3RoZXIgY3B1cyBiZWZvcmUgdGhlCithdG9taWMgY291bnRlciBkZWNyZW1lbnQuCisKK1dpdGhvdXQgdGhlIGV4cGxpY2l0bCBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgY2FsbCwgdGhlCitpbXBsZW1lbnRhdGlvbiBjb3VsZCBsZWdhbGx5IGFsbG93IHRoZSBhdG9taWMgY291bnRlciB1cGRhdGUgdmlzaWJsZQordG8gb3RoZXIgY3B1cyBiZWZvcmUgdGhlICJvYmotPmRlYWQgPSAxOyIgYXNzaWdubWVudC4KKworVGhlIG90aGVyIHRocmVlIGludGVyZmFjZXMgbGlzdGVkIGFyZSB1c2VkIHRvIHByb3ZpZGUgZXhwbGljaXQKK29yZGVyaW5nIHdpdGggcmVzcGVjdCB0byBtZW1vcnkgb3BlcmF0aW9ucyBhZnRlciBhbiBhdG9taWNfZGVjKCkgY2FsbAorKHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpKSBhbmQgYXJvdW5kIGF0b21pY19pbmMoKSBjYWxscworKHNtcF9tYl9fe2JlZm9yZSxhZnRlcn1fYXRvbWljX2luYygpKS4KKworQSBtaXNzaW5nIG1lbW9yeSBiYXJyaWVyIGluIHRoZSBjYXNlcyB3aGVyZSB0aGV5IGFyZSByZXF1aXJlZCBieSB0aGUKK2F0b21pY190IGltcGxlbWVudGF0aW9uIGFib3ZlIGNhbiBoYXZlIGRpc2FzdGVyb3VzIHJlc3VsdHMuICBIZXJlIGlzCithbiBleGFtcGxlLCB3aGljaCBmb2xsb3dzIGEgcGF0dGVybiBvY2N1cmluZyBmcmVxdWVudGx5IGluIHRoZSBMaW51eAora2VybmVsLiAgSXQgaXMgdGhlIHVzZSBvZiBhdG9taWMgY291bnRlcnMgdG8gaW1wbGVtZW50IHJlZmVyZW5jZQorY291bnRpbmcsIGFuZCBpdCB3b3JrcyBzdWNoIHRoYXQgb25jZSB0aGUgY291bnRlciBmYWxscyB0byB6ZXJvIGl0IGNhbgorYmUgZ3VhcmVudGVlZCB0aGF0IG5vIG90aGVyIGVudGl0eSBjYW4gYmUgYWNjZXNzaW5nIHRoZSBvYmplY3Q6CisKK3N0YXRpYyB2b2lkIG9ial9saXN0X2FkZChzdHJ1Y3Qgb2JqICpvYmopCit7CisJb2JqLT5hY3RpdmUgPSAxOworCWxpc3RfYWRkKCZvYmotPmxpc3QpOworfQorCitzdGF0aWMgdm9pZCBvYmpfbGlzdF9kZWwoc3RydWN0IG9iaiAqb2JqKQoreworCWxpc3RfZGVsKCZvYmotPmxpc3QpOworCW9iai0+YWN0aXZlID0gMDsKK30KKworc3RhdGljIHZvaWQgb2JqX2Rlc3Ryb3koc3RydWN0IG9iaiAqb2JqKQoreworCUJVR19PTihvYmotPmFjdGl2ZSk7CisJa2ZyZWUob2JqKTsKK30KKworc3RydWN0IG9iaiAqb2JqX2xpc3RfcGVlayhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWlmICghbGlzdF9lbXB0eShoZWFkKSkgeworCQlzdHJ1Y3Qgb2JqICpvYmo7CisKKwkJb2JqID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3Qgb2JqLCBsaXN0KTsKKwkJYXRvbWljX2luYygmb2JqLT5yZWZjbnQpOworCQlyZXR1cm4gb2JqOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBvYmpfcG9rZSh2b2lkKQoreworCXN0cnVjdCBvYmogKm9iajsKKworCXNwaW5fbG9jaygmZ2xvYmFsX2xpc3RfbG9jayk7CisJb2JqID0gb2JqX2xpc3RfcGVlaygmZ2xvYmFsX2xpc3QpOworCXNwaW5fdW5sb2NrKCZnbG9iYWxfbGlzdF9sb2NrKTsKKworCWlmIChvYmopIHsKKwkJb2JqLT5vcHMtPnBva2Uob2JqKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm9iai0+cmVmY250KSkKKwkJCW9ial9kZXN0cm95KG9iaik7CisJfQorfQorCit2b2lkIG9ial90aW1lb3V0KHN0cnVjdCBvYmogKm9iaikKK3sKKwlzcGluX2xvY2soJmdsb2JhbF9saXN0X2xvY2spOworCW9ial9saXN0X2RlbChvYmopOworCXNwaW5fdW5sb2NrKCZnbG9iYWxfbGlzdF9sb2NrKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvYmotPnJlZmNudCkpCisJCW9ial9kZXN0cm95KG9iaik7Cit9CisKKyhUaGlzIGlzIGEgc2ltcGxpZmljYXRpb24gb2YgdGhlIEFSUCBxdWV1ZSBtYW5hZ2VtZW50IGluIHRoZQorIGdlbmVyaWMgbmVpZ2hib3VyIGRpc2NvdmVyIGNvZGUgb2YgdGhlIG5ldHdvcmtpbmcuICBPbGFmIEtpcmNoCisgZm91bmQgYSBidWcgd3J0LiBtZW1vcnkgYmFycmllcnMgaW4ga2ZyZWVfc2tiKCkgdGhhdCBleHBvc2VkCisgdGhlIGF0b21pY190IG1lbW9yeSBiYXJyaWVyIHJlcXVpcmVtZW50cyBxdWl0ZSBjbGVhcmx5LikKKworR2l2ZW4gdGhlIGFib3ZlIHNjaGVtZSwgaXQgbXVzdCBiZSB0aGUgY2FzZSB0aGF0IHRoZSBvYmotPmFjdGl2ZQordXBkYXRlIGRvbmUgYnkgdGhlIG9iaiBsaXN0IGRlbGV0aW9uIGJlIHZpc2libGUgdG8gb3RoZXIgcHJvY2Vzc29ycworYmVmb3JlIHRoZSBhdG9taWMgY291bnRlciBkZWNyZW1lbnQgaXMgcGVyZm9ybWVkLgorCitPdGhlcndpc2UsIHRoZSBjb3VudGVyIGNvdWxkIGZhbGwgdG8gemVybywgeWV0IG9iai0+YWN0aXZlIHdvdWxkIHN0aWxsCitiZSBzZXQsIHRodXMgdHJpZ2dlcmluZyB0aGUgYXNzZXJ0aW9uIGluIG9ial9kZXN0cm95KCkuICBUaGUgZXJyb3IKK3NlcXVlbmNlIGxvb2tzIGxpa2UgdGhpczoKKworCWNwdSAwCQkJCWNwdSAxCisJb2JqX3Bva2UoKQkJCW9ial90aW1lb3V0KCkKKwlvYmogPSBvYmpfbGlzdF9wZWVrKCk7CisJLi4uIGdhaW5zIHJlZiB0byBvYmosIHJlZmNudD0yCisJCQkJCW9ial9saXN0X2RlbChvYmopOworCQkJCQlvYmotPmFjdGl2ZSA9IDAgLi4uCisJCQkJCS4uLiB2aXNpYmlsaXR5IGRlbGF5ZWQgLi4uCisJCQkJCWF0b21pY19kZWNfYW5kX3Rlc3QoKQorCQkJCQkuLi4gcmVmY250IGRyb3BzIHRvIDEgLi4uCisJYXRvbWljX2RlY19hbmRfdGVzdCgpCisJLi4uIHJlZmNvdW50IGRyb3BzIHRvIDAgLi4uCisJb2JqX2Rlc3Ryb3koKQorCUJVRygpIHRyaWdnZXJzIHNpbmNlIG9iai0+YWN0aXZlCisJc3RpbGwgc2VlbiBhcyBvbmUKKwkJCQkJb2JqLT5hY3RpdmUgdXBkYXRlIHZpc2liaWxpdHkgb2NjdXJzCisKK1dpdGggdGhlIG1lbW9yeSBiYXJyaWVyIHNlbWFudGljcyByZXF1aXJlZCBvZiB0aGUgYXRvbWljX3Qgb3BlcmF0aW9ucword2hpY2ggcmV0dXJuIHZhbHVlcywgdGhlIGFib3ZlIHNlcXVlbmNlIG9mIG1lbW9yeSB2aXNpYmlsaXR5IGNhbiBuZXZlcgoraGFwcGVuLiAgU3BlY2lmaWNhbGx5LCBpbiB0aGUgYWJvdmUgY2FzZSB0aGUgYXRvbWljX2RlY19hbmRfdGVzdCgpCitjb3VudGVyIGRlY3JlbWVudCB3b3VsZCBub3QgYmVjb21lIGdsb2JhbGx5IHZpc2libGUgdW50aWwgdGhlCitvYmotPmFjdGl2ZSB1cGRhdGUgZG9lcy4KKworQXMgYSBoaXN0b3JpY2FsIG5vdGUsIDMyLWJpdCBTcGFyYyB1c2VkIHRvIG9ubHkgYWxsb3cgdXNhZ2Ugb2YKKzI0LWJpdHMgb2YgaXQncyBhdG9taWNfdCB0eXBlLiAgVGhpcyB3YXMgYmVjYXVzZSBpdCB1c2VkIDggYml0cworYXMgYSBzcGlubG9jayBmb3IgU01QIHNhZmV0eS4gIFNwYXJjMzIgbGFja2VkIGEgImNvbXBhcmUgYW5kIHN3YXAiCit0eXBlIGluc3RydWN0aW9uLiAgSG93ZXZlciwgMzItYml0IFNwYXJjIGhhcyBzaW5jZSBiZWVuIG1vdmVkIG92ZXIKK3RvIGEgImhhc2ggdGFibGUgb2Ygc3BpbmxvY2tzIiBzY2hlbWUsIHRoYXQgYWxsb3dzIHRoZSBmdWxsIDMyLWJpdAorY291bnRlciB0byBiZSByZWFsaXplZC4gIEVzc2VudGlhbGx5LCBhbiBhcnJheSBvZiBzcGlubG9ja3MgYXJlCitpbmRleGVkIGludG8gYmFzZWQgdXBvbiB0aGUgYWRkcmVzcyBvZiB0aGUgYXRvbWljX3QgYmVpbmcgb3BlcmF0ZWQKK29uLCBhbmQgdGhhdCBsb2NrIHByb3RlY3RzIHRoZSBhdG9taWMgb3BlcmF0aW9uLiAgUGFyaXNjIHVzZXMgdGhlCitzYW1lIHNjaGVtZS4KKworQW5vdGhlciBub3RlIGlzIHRoYXQgdGhlIGF0b21pY190IG9wZXJhdGlvbnMgcmV0dXJuaW5nIHZhbHVlcyBhcmUKK2V4dHJlbWVseSBzbG93IG9uIGFuIG9sZCAzODYuCisKK1dlIHdpbGwgbm93IGNvdmVyIHRoZSBhdG9taWMgYml0bWFzayBvcGVyYXRpb25zLiAgWW91IHdpbGwgZmluZCB0aGF0Cit0aGVpciBTTVAgYW5kIG1lbW9yeSBiYXJyaWVyIHNlbWFudGljcyBhcmUgc2ltaWxhciBpbiBzaGFwZSBhbmQgc2NvcGUKK3RvIHRoZSBhdG9taWNfdCBvcHMgYWJvdmUuCisKK05hdGl2ZSBhdG9taWMgYml0IG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgdG8gb3BlcmF0ZSBvbiBvYmplY3RzIGFsaWduZWQKK3RvIHRoZSBzaXplIG9mIGFuICJ1bnNpZ25lZCBsb25nIiBDIGRhdGEgdHlwZSwgYW5kIGFyZSBsZWFzdCBvZiB0aGF0CitzaXplLiAgVGhlIGVuZGlhbm5lc3Mgb2YgdGhlIGJpdHMgd2l0aGluIGVhY2ggInVuc2lnbmVkIGxvbmciIGFyZSB0aGUKK25hdGl2ZSBlbmRpYW5uZXNzIG9mIHRoZSBjcHUuCisKKwl2b2lkIHNldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbHMgdW5zaWduZWQgbG9uZyAqYWRkcik7CisJdm9pZCBjbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbHMgdW5zaWduZWQgbG9uZyAqYWRkcik7CisJdm9pZCBjaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxzIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCitUaGVzZSByb3V0aW5lcyBzZXQsIGNsZWFyLCBhbmQgY2hhbmdlLCByZXNwZWN0aXZlbHksIHRoZSBiaXQgbnVtYmVyCitpbmRpY2F0ZWQgYnkgIm5yIiBvbiB0aGUgYml0IG1hc2sgcG9pbnRlZCB0byBieSAiQUREUiIuCisKK1RoZXkgbXVzdCBleGVjdXRlIGF0b21pY2FsbHksIHlldCB0aGVyZSBhcmUgbm8gaW1wbGljaXQgbWVtb3J5IGJhcnJpZXIKK3NlbWFudGljcyByZXF1aXJlZCBvZiB0aGVzZSBpbnRlcmZhY2VzLgorCisJaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbHMgdW5zaWduZWQgbG9uZyAqYWRkcik7CisJaW50IHRlc3RfYW5kX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlscyB1bnNpZ25lZCBsb25nICphZGRyKTsKKwlpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlscyB1bnNpZ25lZCBsb25nICphZGRyKTsKKworTGlrZSB0aGUgYWJvdmUsIGV4Y2VwdCB0aGF0IHRoZXNlIHJvdXRpbmVzIHJldHVybiBhIGJvb2xlYW4gd2hpY2gKK2luZGljYXRlcyB3aGV0aGVyIHRoZSBjaGFuZ2VkIGJpdCB3YXMgc2V0IF9CRUZPUkVfIHRoZSBhdG9taWMgYml0CitvcGVyYXRpb24uCisKK1dBUk5JTkchIEl0IGlzIGluY3JlZGlibHkgaW1wb3J0YW50IHRoYXQgdGhlIHZhbHVlIGJlIGEgYm9vbGVhbiwKK2llLiAiMCIgb3IgIjEiLiAgRG8gbm90IHRyeSB0byBiZSBmYW5jeSBhbmQgc2F2ZSBhIGZldyBpbnN0cnVjdGlvbnMgYnkKK2RlY2xhcmluZyB0aGUgYWJvdmUgdG8gcmV0dXJuICJsb25nIiBhbmQganVzdCByZXR1cm5pbmcgc29tZXRoaW5nIGxpa2UKKyJvbGRfdmFsICYgbWFzayIgYmVjYXVzZSB0aGF0IHdpbGwgbm90IHdvcmsuCisKK0ZvciBvbmUgdGhpbmcsIHRoaXMgcmV0dXJuIHZhbHVlIGdldHMgdHJ1bmNhdGVkIHRvIGludCBpbiBtYW55IGNvZGUKK3BhdGhzIHVzaW5nIHRoZXNlIGludGVyZmFjZXMsIHNvIG9uIDY0LWJpdCBpZiB0aGUgYml0IGlzIHNldCBpbiB0aGUKK3VwcGVyIDMyLWJpdHMgdGhlbiB0ZXN0ZXJzIHdpbGwgbmV2ZXIgc2VlIHRoYXQuCisKK09uZSBncmVhdCBleGFtcGxlIG9mIHdoZXJlIHRoaXMgcHJvYmxlbSBjcm9wcyB1cCBhcmUgdGhlIHRocmVhZF9pbmZvCitmbGFnIG9wZXJhdGlvbnMuICBSb3V0aW5lcyBzdWNoIGFzIHRlc3RfYW5kX3NldF90aV90aHJlYWRfZmxhZygpIGNob3AKK3RoZSByZXR1cm4gdmFsdWUgaW50byBhbiBpbnQuICBUaGVyZSBhcmUgb3RoZXIgcGxhY2VzIHdoZXJlIHRoaW5ncworbGlrZSB0aGlzIG9jY3VyIGFzIHdlbGwuCisKK1RoZXNlIHJvdXRpbmVzLCBsaWtlIHRoZSBhdG9taWNfdCBjb3VudGVyIG9wZXJhdGlvbnMgcmV0dXJuaW5nIHZhbHVlcywKK3JlcXVpcmUgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGFyb3VuZCB0aGVpciBleGVjdXRpb24uICBBbGwKK21lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSB0aGUgYXRvbWljIGJpdCBvcGVyYXRpb24gY2FsbCBtdXN0IGJlIG1hZGUKK3Zpc2libGUgZ2xvYmFsbHkgYmVmb3JlIHRoZSBhdG9taWMgYml0IG9wZXJhdGlvbiBpcyBtYWRlIHZpc2libGUuCitMaWtld2lzZSwgdGhlIGF0b21pYyBiaXQgb3BlcmF0aW9uIG11c3QgYmUgdmlzaWJsZSBnbG9iYWxseSBiZWZvcmUgYW55CitzdWJzZXF1ZW50IG1lbW9yeSBvcGVyYXRpb24gaXMgbWFkZSB2aXNpYmxlLiAgRm9yIGV4YW1wbGU6CisKKwlvYmotPmRlYWQgPSAxOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZvYmotPmZsYWdzKSkKKwkJLyogLi4uICovOworCW9iai0+a2lsbGVkID0gMTsKKworVGhlIGltcGxlbWVudGF0aW9uIG9mIHRlc3RfYW5kX3NldF9iaXQoKSBtdXN0IGd1YXJlbnRlZSB0aGF0Cisib2JqLT5kZWFkID0gMTsiIGlzIHZpc2libGUgdG8gY3B1cyBiZWZvcmUgdGhlIGF0b21pYyBtZW1vcnkgb3BlcmF0aW9uCitkb25lIGJ5IHRlc3RfYW5kX3NldF9iaXQoKSBiZWNvbWVzIHZpc2libGUuICBMaWtld2lzZSwgdGhlIGF0b21pYworbWVtb3J5IG9wZXJhdGlvbiBkb25lIGJ5IHRlc3RfYW5kX3NldF9iaXQoKSBtdXN0IGJlY29tZSB2aXNpYmxlIGJlZm9yZQorIm9iai0+a2lsbGVkID0gMTsiIGlzIHZpc2libGUuCisKK0ZpbmFsbHkgdGhlcmUgaXMgdGhlIGJhc2ljIG9wZXJhdGlvbjoKKworCWludCB0ZXN0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCBfX2NvbnN0X18gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CisKK1doaWNoIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgYml0ICJuciIgaXMgc2V0IGluIHRoZSBiaXRtYXNrCitwb2ludGVkIHRvIGJ5ICJhZGRyIi4KKworSWYgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIGFyZSByZXF1aXJlZCBhcm91bmQgY2xlYXJfYml0KCkgKHdoaWNoCitkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSwgYW5kIHRodXMgZG9lcyBub3QgbmVlZCB0byBwcm92aWRlIG1lbW9yeQorYmFycmllciBzZW1hbnRpY3MpLCB0d28gaW50ZXJmYWNlcyBhcmUgcHJvdmlkZWQ6CisKKwl2b2lkIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCh2b2lkKTsKKwl2b2lkIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KHZvaWQpOworCitUaGV5IGFyZSB1c2VkIGFzIGZvbGxvd3MsIGFuZCBhcmUgYWtpbiB0byB0aGVpciBhdG9taWNfdCBvcGVyYXRpb24KK2Jyb3RoZXJzOgorCisJLyogQWxsIG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSB0aGlzIGNhbGwgd2lsbAorCSAqIGJlIGdsb2JhbGx5IHZpc2libGUgYmVmb3JlIHRoZSBjbGVhcl9iaXQoKS4KKwkgKi8KKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoIC4uLiApOworCisJLyogVGhlIGNsZWFyX2JpdCgpIHdpbGwgYmUgdmlzaWJsZSBiZWZvcmUgYWxsCisJICogc3Vic2VxdWVudCBtZW1vcnkgb3BlcmF0aW9ucy4KKwkgKi8KKwkgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworRmluYWxseSwgdGhlcmUgYXJlIG5vbi1hdG9taWMgdmVyc2lvbnMgb2YgdGhlIGJpdG1hc2sgb3BlcmF0aW9ucworcHJvdmlkZWQuICBUaGV5IGFyZSB1c2VkIGluIGNvbnRleHRzIHdoZXJlIHNvbWUgb3RoZXIgaGlnaGVyLWxldmVsIFNNUAorbG9ja2luZyBzY2hlbWUgaXMgYmVpbmcgdXNlZCB0byBwcm90ZWN0IHRoZSBiaXRtYXNrLCBhbmQgdGh1cyBsZXNzCitleHBlbnNpdmUgbm9uLWF0b21pYyBvcGVyYXRpb25zIG1heSBiZSB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KK1RoZXkgaGF2ZSBuYW1lcyBzaW1pbGFyIHRvIHRoZSBhYm92ZSBiaXRtYXNrIG9wZXJhdGlvbiBpbnRlcmZhY2VzLAorZXhjZXB0IHRoYXQgdHdvIHVuZGVyc2NvcmVzIGFyZSBwcmVmaXhlZCB0byB0aGUgaW50ZXJmYWNlIG5hbWUuCisKKwl2b2lkIF9fc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKKwl2b2lkIF9fY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCXZvaWQgX19jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCWludCBfX3Rlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CisJaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCWludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CisKK1RoZXNlIG5vbi1hdG9taWMgdmFyaWFudHMgYWxzbyBkbyBub3QgcmVxdWlyZSBhbnkgc3BlY2lhbCBtZW1vcnkKK2JhcnJpZXIgc2VtYW50aWNzLgorCitUaGUgcm91dGluZXMgeGNoZygpIGFuZCBjbXB4Y2hnKCkgbmVlZCB0aGUgc2FtZSBleGFjdCBtZW1vcnkgYmFycmllcnMKK2FzIHRoZSBhdG9taWMgYW5kIGJpdCBvcGVyYXRpb25zIHJldHVybmluZyB2YWx1ZXMuCisKK1NwaW5sb2NrcyBhbmQgcndsb2NrcyBoYXZlIG1lbW9yeSBiYXJyaWVyIGV4cGVjdGF0aW9ucyBhcyB3ZWxsLgorVGhlIHJ1bGUgdG8gZm9sbG93IGlzIHNpbXBsZToKKworMSkgV2hlbiBhY3F1aXJpbmcgYSBsb2NrLCB0aGUgaW1wbGVtZW50YXRpb24gbXVzdCBtYWtlIGl0IGdsb2JhbGx5CisgICB2aXNpYmxlIGJlZm9yZSBhbnkgc3Vic2VxdWVudCBtZW1vcnkgb3BlcmF0aW9uLgorCisyKSBXaGVuIHJlbGVhc2luZyBhIGxvY2ssIHRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IG1ha2UgaXQgc3VjaCB0aGF0CisgICBhbGwgcHJldmlvdXMgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIGdsb2JhbGx5IHZpc2libGUgYmVmb3JlIHRoZQorICAgbG9jayByZWxlYXNlLgorCitXaGljaCBmaW5hbGx5IGJyaW5ncyB1cyB0byBfYXRvbWljX2RlY19hbmRfbG9jaygpLiAgVGhlcmUgaXMgYW4KK2FyY2hpdGVjdHVyZS1uZXV0cmFsIHZlcnNpb24gaW1wbGVtZW50ZWQgaW4gbGliL2RlY19hbmRfbG9jay5jLAorYnV0IG1vc3QgcGxhdGZvcm1zIHdpbGwgd2lzaCB0byBvcHRpbWl6ZSB0aGlzIGluIGFzc2VtYmxlci4KKworCWludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKTsKKworQXRvbWljYWxseSBkZWNyZW1lbnQgdGhlIGdpdmVuIGNvdW50ZXIsIGFuZCBpZiB3aWxsIGRyb3AgdG8gemVybworYXRvbWljYWxseSBhY3F1aXJlIHRoZSBnaXZlbiBzcGlubG9jayBhbmQgcGVyZm9ybSB0aGUgZGVjcmVtZW50CitvZiB0aGUgY291bnRlciB0byB6ZXJvLiAgSWYgaXQgZG9lcyBub3QgZHJvcCB0byB6ZXJvLCBkbyBub3RoaW5nCit3aXRoIHRoZSBzcGlubG9jay4KKworSXQgaXMgYWN0dWFsbHkgcHJldHR5IHNpbXBsZSB0byBnZXQgdGhlIG1lbW9yeSBiYXJyaWVyIGNvcnJlY3QuCitTaW1wbHkgc2F0aXNmeSB0aGUgc3BpbmxvY2sgZ3JhYiByZXF1aXJlbWVudHMsIHdoaWNoIGlzIG1ha2UKK3N1cmUgdGhlIHNwaW5sb2NrIG9wZXJhdGlvbiBpcyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZSBhbnkKK3N1YnNlcXVlbnQgbWVtb3J5IG9wZXJhdGlvbi4KKworV2UgY2FuIGRlbW9uc3RyYXRlIHRoaXMgb3BlcmF0aW9uIG1vcmUgY2xlYXJseSBpZiB3ZSBkZWZpbmUKK2FuIGFic3RyYWN0IGF0b21pYyBvcGVyYXRpb246CisKKwlsb25nIGNhcyhsb25nICptZW0sIGxvbmcgb2xkLCBsb25nIG5ldyk7CisKKyJjYXMiIHN0YW5kcyBmb3IgImNvbXBhcmUgYW5kIHN3YXAiLiAgSXQgYXRvbWljYWxseToKKworMSkgQ29tcGFyZXMgIm9sZCIgd2l0aCB0aGUgdmFsdWUgY3VycmVudGx5IGF0ICJtZW0iLgorMikgSWYgdGhleSBhcmUgZXF1YWwsICJuZXciIGlzIHdyaXR0ZW4gdG8gIm1lbSIuCiszKSBSZWdhcmRsZXNzLCB0aGUgY3VycmVudCB2YWx1ZSBhdCAibWVtIiBpcyByZXR1cm5lZC4KKworQXMgYW4gZXhhbXBsZSB1c2FnZSwgaGVyZSBpcyB3aGF0IGFuIGF0b21pYyBjb3VudGVyIHVwZGF0ZQorbWlnaHQgbG9vayBsaWtlOgorCit2b2lkIGV4YW1wbGVfYXRvbWljX2luYyhsb25nICpjb3VudGVyKQoreworCWxvbmcgb2xkLCBuZXcsIHJldDsKKworCXdoaWxlICgxKSB7CisJCW9sZCA9ICpjb3VudGVyOworCQluZXcgPSBvbGQgKyAxOworCisJCXJldCA9IGNhcyhjb3VudGVyLCBvbGQsIG5ldyk7CisJCWlmIChyZXQgPT0gb2xkKQorCQkJYnJlYWs7CisJfQorfQorCitMZXQncyB1c2UgY2FzKCkgaW4gb3JkZXIgdG8gYnVpbGQgYSBwc2V1ZG8tQyBhdG9taWNfZGVjX2FuZF9sb2NrKCk6CisKK2ludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKQoreworCWxvbmcgb2xkLCBuZXcsIHJldDsKKwlpbnQgd2VudF90b196ZXJvOworCisJd2VudF90b196ZXJvID0gMDsKKwl3aGlsZSAoMSkgeworCQlvbGQgPSBhdG9taWNfcmVhZChhdG9taWMpOworCQluZXcgPSBvbGQgLSAxOworCQlpZiAobmV3ID09IDApIHsKKwkJCXdlbnRfdG9femVybyA9IDE7CisJCQlzcGluX2xvY2sobG9jayk7CisJCX0KKwkJcmV0ID0gY2FzKGF0b21pYywgb2xkLCBuZXcpOworCQlpZiAocmV0ID09IG9sZCkKKwkJCWJyZWFrOworCQlpZiAod2VudF90b196ZXJvKSB7CisJCQlzcGluX3VubG9jayhsb2NrKTsKKwkJCXdlbnRfdG9femVybyA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gd2VudF90b196ZXJvOworfQorCitOb3csIGFzIGZhciBhcyBtZW1vcnkgYmFycmllcnMgZ28sIGFzIGxvbmcgYXMgc3Bpbl9sb2NrKCkKK3N0cmljdGx5IG9yZGVycyBhbGwgc3Vic2VxdWVudCBtZW1vcnkgb3BlcmF0aW9ucyAoaW5jbHVkaW5nCit0aGUgY2FzKCkpIHdpdGggcmVzcGVjdCB0byBpdHNlbGYsIHRoaW5ncyB3aWxsIGJlIGZpbmUuCisKK1NhaWQgYW5vdGhlciB3YXksIF9hdG9taWNfZGVjX2FuZF9sb2NrKCkgbXVzdCBndWFyZW50ZWUgdGhhdAorYSBjb3VudGVyIGRyb3BwaW5nIHRvIHplcm8gaXMgbmV2ZXIgbWFkZSB2aXNpYmxlIGJlZm9yZSB0aGUKK3NwaW5sb2NrIGJlaW5nIGFjcXVpcmVkLgorCitOb3RlIHRoYXQgdGhpcyBhbHNvIG1lYW5zIHRoYXQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBjb3VudGVyCitpcyBub3QgZHJvcHBpbmcgdG8gemVybywgdGhlcmUgYXJlIG5vIG1lbW9yeSBvcmRlcmluZworcmVxdWlyZW1lbnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9iYXNpY19wcm9maWxpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9iYXNpY19wcm9maWxpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTNkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Jhc2ljX3Byb2ZpbGluZy50eHQKQEAgLTAsMCArMSw1MiBAQAorVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBkZWxpYmVyYXRlbHkgdmVyeSBiYXNpYy4gSWYgeW91IHdhbnQgc29tZXRoaW5nIGNsZXZlciwKK2dvIHJlYWQgdGhlIHJlYWwgZG9jcyA7LSkgUGxlYXNlIGRvbid0IGFkZCBtb3JlIHN0dWZmLCBidXQgZmVlbCBmcmVlIHRvIAorY29ycmVjdCBteSBtaXN0YWtlcyA7LSkgICAgKG1ibGlnaEBhcmFjbmV0LmNvbSkKK1RoYW5rcyB0byBKb2huIExldm9uLCBEYXZlIEhhbnNlbiwgZXQgYWwuIGZvciBoZWxwIHdyaXRpbmcgdGhpcy4KKworPHRlc3Q+IGlzIHRoZSB0aGluZyB5b3UncmUgdHJ5aW5nIHRvIG1lYXN1cmUuCitNYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgU3lzdGVtLm1hcCAvIHZtbGludXggcmVmZXJlbmNlZCEKKworSXQgaXMgcHJvYmFibHkgZWFzaWVzdCB0byB1c2UgIm1ha2UgaW5zdGFsbCIgZm9yIGxpbnV4IGFuZCBoYWNrCisvc2Jpbi9pbnN0YWxsa2VybmVsIHRvIGNvcHkgdm1saW51eCB0byAvYm9vdCwgaW4gYWRkaXRpb24gdG8gdm1saW51eiwKK2NvbmZpZywgU3lzdGVtLm1hcCwgd2hpY2ggYXJlIHVzdWFsbHkgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCisKK1JlYWRwcm9maWxlCistLS0tLS0tLS0tLQorQSByZWNlbnQgcmVhZHByb2ZpbGUgY29tbWFuZCBpcyBuZWVkZWQgZm9yIDIuNiwgc3VjaCBhcyBmb3VuZCBpbiB1dGlsLWxpbnV4CisyLjEyYSwgd2hpY2ggY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKKworaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4LworCitNb3N0IGRpc3RyaWJ1dGlvbnMgd2lsbCBzaGlwIGl0IGFscmVhZHkuCisKK0FkZCAicHJvZmlsZT0yIiB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKworY2xlYXIJCXJlYWRwcm9maWxlIC1yCisJCTx0ZXN0PgorZHVtcCBvdXRwdXQJcmVhZHByb2ZpbGUgLW0gL2Jvb3QvU3lzdGVtLm1hcCA+IGNhcHR1cmVkX3Byb2ZpbGUKKworT3Byb2ZpbGUKKy0tLS0tLS0tCitHZXQgdGhlIHNvdXJjZSAoSSB1c2UgMC44KSBmcm9tIGh0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvCithbmQgYWRkICJpZGxlPXBvbGwiIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCitDb25maWd1cmUgd2l0aCBDT05GSUdfUFJPRklMSU5HPXkgYW5kIENPTkZJR19PUFJPRklMRT15ICYgcmVib290IG9uIG5ldyBrZXJuZWwKKy4vY29uZmlndXJlIC0td2l0aC1rZXJuZWwtc3VwcG9ydAorbWFrZSBpbnN0YWxsCisKK0ZvciBzdXBlcmlvciByZXN1bHRzLCBiZSBzdXJlIHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQy4gSWYgb3ByZXBvcnQgc2VlcworYSAwSHogQ1BVLCBBUElDIHdhcyBub3Qgb24uIEJlIGF3YXJlIHRoYXQgaWRsZT1wb2xsIG1heSBtZWFuIGEgcGVyZm9ybWFuY2UKK3BlbmFsdHkuCisKK09uZSB0aW1lIHNldHVwOgorCQlvcGNvbnRyb2wgLS1zZXR1cCAtLXZtbGludXg9L2Jvb3Qvdm1saW51eAorCitjbGVhcgkJb3Bjb250cm9sIC0tcmVzZXQKK3N0YXJ0CQlvcGNvbnRyb2wgLS1zdGFydAorCQk8dGVzdD4KK3N0b3AJCW9wY29udHJvbCAtLXN0b3AKK2R1bXAgb3V0cHV0CW9wcmVwb3J0ID4gIG91dHB1dF9maWxlCisKK1RvIG9ubHkgcmVwb3J0IG9uIHRoZSBrZXJuZWwsIHJ1biBvcHJlcG9ydCAvYm9vdC92bWxpbnV4ID4gb3V0cHV0X2ZpbGUKKworQSByZXNldCBpcyBuZWVkZWQgdG8gY2xlYXIgb2xkIHN0YXRpc3RpY3MsIHdoaWNoIHN1cnZpdmUgYSByZWJvb3QuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5N2YwOWVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKQEAgLTAsMCArMSwxMTYgQEAKKyAgICAgS2VybmVsIFN1cHBvcnQgZm9yIG1pc2NlbGxhbmVvdXMgKHlvdXIgZmF2b3VyaXRlKSBCaW5hcnkgRm9ybWF0cyB2MS4xCisgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIEtlcm5lbCBmZWF0dXJlIGFsbG93cyB5b3UgdG8gaW52b2tlIGFsbW9zdCAoZm9yIHJlc3RyaWN0aW9ucyBzZWUgYmVsb3cpCitldmVyeSBwcm9ncmFtIGJ5IHNpbXBseSB0eXBpbmcgaXRzIG5hbWUgaW4gdGhlIHNoZWxsLgorVGhpcyBpbmNsdWRlcyBmb3IgZXhhbXBsZSBjb21waWxlZCBKYXZhKFRNKSwgUHl0aG9uIG9yIEVtYWNzIHByb2dyYW1zLgorCitUbyBhY2hpZXZlIHRoaXMgeW91IG11c3QgdGVsbCBiaW5mbXRfbWlzYyB3aGljaCBpbnRlcnByZXRlciBoYXMgdG8gYmUgaW52b2tlZAord2l0aCB3aGljaCBiaW5hcnkuIEJpbmZtdF9taXNjIHJlY29nbmlzZXMgdGhlIGJpbmFyeS10eXBlIGJ5IG1hdGNoaW5nIHNvbWUgYnl0ZXMKK2F0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgd2l0aCBhIG1hZ2ljIGJ5dGUgc2VxdWVuY2UgKG1hc2tpbmcgb3V0IHNwZWNpZmllZAorYml0cykgeW91IGhhdmUgc3VwcGxpZWQuIEJpbmZtdF9taXNjIGNhbiBhbHNvIHJlY29nbmlzZSBhIGZpbGVuYW1lIGV4dGVuc2lvbgorYWthICcuY29tJyBvciAnLmV4ZScuCisKK0ZpcnN0IHlvdSBtdXN0IG1vdW50IGJpbmZtdF9taXNjOgorCW1vdW50IGJpbmZtdF9taXNjIC10IGJpbmZtdF9taXNjIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyAKKworVG8gYWN0dWFsbHkgcmVnaXN0ZXIgYSBuZXcgYmluYXJ5IHR5cGUsIHlvdSBoYXZlIHRvIHNldCB1cCBhIHN0cmluZyBsb29raW5nIGxpa2UKKzpuYW1lOnR5cGU6b2Zmc2V0Om1hZ2ljOm1hc2s6aW50ZXJwcmV0ZXI6ZmxhZ3MgKHdoZXJlIHlvdSBjYW4gY2hvb3NlIHRoZSAnOicgdXBvbgoreW91ciBuZWVkcykgYW5kIGVjaG8gaXQgdG8gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyLgorSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjoKKyAtICduYW1lJyBpcyBhbiBpZGVudGlmaWVyIHN0cmluZy4gQSBuZXcgL3Byb2MgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGlzCisgICBuYW1lIGJlbG93IC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYworIC0gJ3R5cGUnIGlzIHRoZSB0eXBlIG9mIHJlY29nbml0aW9uLiBHaXZlICdNJyBmb3IgbWFnaWMgYW5kICdFJyBmb3IgZXh0ZW5zaW9uLgorIC0gJ29mZnNldCcgaXMgdGhlIG9mZnNldCBvZiB0aGUgbWFnaWMvbWFzayBpbiB0aGUgZmlsZSwgY291bnRlZCBpbiBieXRlcy4gVGhpcworICAgZGVmYXVsdHMgdG8gMCBpZiB5b3Ugb21pdCBpdCAoaS5lLiB5b3Ugd3JpdGUgJzpuYW1lOnR5cGU6Om1hZ2ljLi4uJykKKyAtICdtYWdpYycgaXMgdGhlIGJ5dGUgc2VxdWVuY2UgYmluZm10X21pc2MgaXMgbWF0Y2hpbmcgZm9yLiBUaGUgbWFnaWMgc3RyaW5nCisgICBtYXkgY29udGFpbiBoZXgtZW5jb2RlZCBjaGFyYWN0ZXJzIGxpa2UgXHgwYSBvciBceEE0LiBJbiBhIHNoZWxsIGVudmlyb25tZW50CisgICB5b3Ugd2lsbCBoYXZlIHRvIHdyaXRlIFxceDBhIHRvIHByZXZlbnQgdGhlIHNoZWxsIGZyb20gZWF0aW5nIHlvdXIgXC4KKyAgIElmIHlvdSBjaG9zZSBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcsIHRoaXMgaXMgdGhlIGV4dGVuc2lvbiB0byBiZQorICAgcmVjb2duaXNlZCAod2l0aG91dCB0aGUgJy4nLCB0aGUgXHgwYSBzcGVjaWFscyBhcmUgbm90IGFsbG93ZWQpLiBFeHRlbnNpb24KKyAgIG1hdGNoaW5nIGlzIGNhc2Ugc2Vuc2l0aXZlIQorIC0gJ21hc2snIGlzIGFuIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gYWxsIDB4ZmYpIG1hc2suIFlvdSBjYW4gbWFzayBvdXQgc29tZQorICAgYml0cyBmcm9tIG1hdGNoaW5nIGJ5IHN1cHBseWluZyBhIHN0cmluZyBsaWtlIG1hZ2ljIGFuZCBhcyBsb25nIGFzIG1hZ2ljLgorICAgVGhlIG1hc2sgaXMgYW5kZWQgd2l0aCB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgZmlsZS4KKyAtICdpbnRlcnByZXRlcicgaXMgdGhlIHByb2dyYW0gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aXRoIHRoZSBiaW5hcnkgYXMgZmlyc3QKKyAgIGFyZ3VtZW50IChzcGVjaWZ5IHRoZSBmdWxsIHBhdGgpCisgLSAnZmxhZ3MnIGlzIGFuIG9wdGlvbmFsIGZpZWxkIHRoYXQgY29udHJvbHMgc2V2ZXJhbCBhc3BlY3RzIG9mIHRoZSBpbnZvY2F0aW9uCisgICBvZiB0aGUgaW50ZXJwcmV0ZXIuIEl0IGlzIGEgc3RyaW5nIG9mIGNhcGl0YWwgbGV0dGVycywgZWFjaCBjb250cm9scyBhIGNlcnRhaW4KKyAgIGFzcGVjdC4gVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgc3VwcG9ydGVkIC0KKyAgICAgICdQJyAtIHByZXNlcnZlLWFyZ3ZbMF0uICBMZWdhY3kgYmVoYXZpb3Igb2YgYmluZm10X21pc2MgaXMgdG8gb3ZlcndyaXRlIHRoZQorICAgICAgICAgICAgb3JpZ2luYWwgYXJndlswXSB3aXRoIHRoZSBmdWxsIHBhdGggdG8gdGhlIGJpbmFyeS4gIFdoZW4gdGhpcyBmbGFnIGlzCisgICAgICAgICAgICBpbmNsdWRlZCwgYmluZm10X21pc2Mgd2lsbCBhZGQgYW4gYXJndW1lbnQgdG8gdGhlIGFyZ3VtZW50IHZlY3RvciBmb3IKKyAgICAgICAgICAgIHRoaXMgcHVycG9zZSwgdGh1cyBwcmVzZXJ2aW5nIHRoZSBvcmlnaW5hbCBhcmd2WzBdLgorICAgICAgJ08nIC0gb3Blbi1iaW5hcnkuIExlZ2FjeSBiZWhhdmlvciBvZiBiaW5mbXRfbWlzYyBpcyB0byBwYXNzIHRoZSBmdWxsIHBhdGgKKyAgICAgICAgICAgIG9mIHRoZSBiaW5hcnkgdG8gdGhlIGludGVycHJldGVyIGFzIGFuIGFyZ3VtZW50LiBXaGVuIHRoaXMgZmxhZyBpcworICAgICAgICAgICAgaW5jbHVkZWQsIGJpbmZtdF9taXNjIHdpbGwgb3BlbiB0aGUgZmlsZSBmb3IgcmVhZGluZyBhbmQgcGFzcyBpdHMKKyAgICAgICAgICAgIGRlc2NyaXB0b3IgYXMgYW4gYXJndW1lbnQsIGluc3RlYWQgb2YgdGhlIGZ1bGwgcGF0aCwgdGh1cyBhbGxvd2luZworICAgICAgICAgICAgdGhlIGludGVycHJldGVyIHRvIGV4ZWN1dGUgbm9uLXJlYWRhYmxlIGJpbmFyaWVzLiBUaGlzIGZlYXR1cmUgc2hvdWxkCisgICAgICAgICAgICBiZSB1c2VkIHdpdGggY2FyZSAtIHRoZSBpbnRlcnByZXRlciBoYXMgdG8gYmUgdHJ1c3RlZCBub3QgdG8gZW1pdAorICAgICAgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBub24tcmVhZGFibGUgYmluYXJ5LgorICAgICAgJ0MnIC0gY3JlZGVudGlhbHMuIEN1cnJlbnRseSwgdGhlIGJlaGF2aW9yIG9mIGJpbmZtdF9taXNjIGlzIHRvIGNhbGN1bGF0ZQorICAgICAgICAgICAgdGhlIGNyZWRlbnRpYWxzIGFuZCBzZWN1cml0eSB0b2tlbiBvZiB0aGUgbmV3IHByb2Nlc3MgYWNjb3JkaW5nIHRvCisgICAgICAgICAgICB0aGUgaW50ZXJwcmV0ZXIuIFdoZW4gdGhpcyBmbGFnIGlzIGluY2x1ZGVkLCB0aGVzZSBhdHRyaWJ1dGVzIGFyZQorICAgICAgICAgICAgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGJpbmFyeS4gSXQgYWxzbyBpbXBsaWVzIHRoZSAnTycgZmxhZy4KKyAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUgYXMgdGhlIGludGVycHJldGVyCisgICAgICAgICAgICB3aWxsIHJ1biB3aXRoIHJvb3QgcGVybWlzc2lvbnMgd2hlbiBhIHNldHVpZCBiaW5hcnkgb3duZWQgYnkgcm9vdAorICAgICAgICAgICAgaXMgcnVuIHdpdGggYmluZm10X21pc2MuCisKKworVGhlcmUgYXJlIHNvbWUgcmVzdHJpY3Rpb25zOgorIC0gdGhlIHdob2xlIHJlZ2lzdGVyIHN0cmluZyBtYXkgbm90IGV4Y2VlZCAyNTUgY2hhcmFjdGVycworIC0gdGhlIG1hZ2ljIG11c3QgcmVzaWRlIGluIHRoZSBmaXJzdCAxMjggYnl0ZXMgb2YgdGhlIGZpbGUsIGkuZS4KKyAgIG9mZnNldCtzaXplKG1hZ2ljKSBoYXMgdG8gYmUgbGVzcyB0aGFuIDEyOAorIC0gdGhlIGludGVycHJldGVyIHN0cmluZyBtYXkgbm90IGV4Y2VlZCAxMjcgY2hhcmFjdGVycworCitUbyB1c2UgYmluZm10X21pc2MgeW91IGhhdmUgdG8gbW91bnQgaXQgZmlyc3QuIFlvdSBjYW4gbW91bnQgaXQgd2l0aAorIm1vdW50IC10IGJpbmZtdF9taXNjIG5vbmUgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIiBjb21tYW5kLCBvciB5b3UgY2FuIGFkZAorYSBsaW5lICJub25lICAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgYmluZm10X21pc2MgZGVmYXVsdHMgMCAwIiB0byB5b3VyCisvZXRjL2ZzdGFiIHNvIGl0IGF1dG8gbW91bnRzIG9uIGJvb3QuCisKK1lvdSBtYXkgd2FudCB0byBhZGQgdGhlIGJpbmFyeSBmb3JtYXRzIGluIG9uZSBvZiB5b3VyIC9ldGMvcmMgc2NyaXB0cyBkdXJpbmcKK2Jvb3QtdXAuIFJlYWQgdGhlIG1hbnVhbCBvZiB5b3VyIGluaXQgcHJvZ3JhbSB0byBmaWd1cmUgb3V0IGhvdyB0byBkbyB0aGlzCityaWdodC4KKworVGhpbmsgYWJvdXQgdGhlIG9yZGVyIG9mIGFkZGluZyBlbnRyaWVzISBMYXRlciBhZGRlZCBlbnRyaWVzIGFyZSBtYXRjaGVkIGZpcnN0IQorCisKK0EgZmV3IGV4YW1wbGVzIChhc3N1bWVkIHlvdSBhcmUgaW4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjKToKKworLSBlbmFibGUgc3VwcG9ydCBmb3IgZW04NiAobGlrZSBiaW5mbXRfZW04NiwgZm9yIEFscGhhIEFYUCBvbmx5KToKKyAgZWNobyAnOmkzODY6TTo6XHg3ZkVMRlx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMzpceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmVceGZlXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmYlx4ZmZceGZmOi9iaW4vZW04NjonID4gcmVnaXN0ZXIKKyAgZWNobyAnOmk0ODY6TTo6XHg3ZkVMRlx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwNjpceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmVceGZlXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmYlx4ZmZceGZmOi9iaW4vZW04NjonID4gcmVnaXN0ZXIKKworLSBlbmFibGUgc3VwcG9ydCBmb3IgcGFja2VkIERPUyBhcHBsaWNhdGlvbnMgKHByZS1jb25maWd1cmVkIGRvc2VtdSBoZGltYWdlcyk6CisgIGVjaG8gJzpERVhFOk06Olx4MGVERVg6Oi91c3IvYmluL2Rvc2V4ZWM6JyA+IHJlZ2lzdGVyCisKKy0gZW5hYmxlIHN1cHBvcnQgZm9yIFdpbmRvd3MgZXhlY3V0YWJsZXMgdXNpbmcgd2luZToKKyAgZWNobyAnOkRPU1dpbjpNOjpNWjo6L3Vzci9sb2NhbC9iaW4vd2luZTonID4gcmVnaXN0ZXIKKworRm9yIGphdmEgc3VwcG9ydCBzZWUgRG9jdW1lbnRhdGlvbi9qYXZhLnR4dAorCisKK1lvdSBjYW4gZW5hYmxlL2Rpc2FibGUgYmluZm10X21pc2Mgb3Igb25lIGJpbmFyeSB0eXBlIGJ5IGVjaG9pbmcgMCAodG8gZGlzYWJsZSkKK29yIDEgKHRvIGVuYWJsZSkgdG8gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3N0YXR1cyBvciAvcHJvYy8uLi4vdGhlX25hbWUuCitDYXR0aW5nIHRoZSBmaWxlIHRlbGxzIHlvdSB0aGUgY3VycmVudCBzdGF0dXMgb2YgYmluZm10X21pc2MvdGhlIGVudHJ5LgorCitZb3UgY2FuIHJlbW92ZSBvbmUgZW50cnkgb3IgYWxsIGVudHJpZXMgYnkgZWNob2luZyAtMSB0byAvcHJvYy8uLi4vdGhlX25hbWUKK29yIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9zdGF0dXMuCisKKworSElOVFM6Cis9PT09PT0KKworSWYgeW91IHdhbnQgdG8gcGFzcyBzcGVjaWFsIGFyZ3VtZW50cyB0byB5b3VyIGludGVycHJldGVyLCB5b3UgY2FuCit3cml0ZSBhIHdyYXBwZXIgc2NyaXB0IGZvciBpdC4gU2VlIERvY3VtZW50YXRpb24vamF2YS50eHQgZm9yIGFuCitleGFtcGxlLgorCitZb3VyIGludGVycHJldGVyIHNob3VsZCBOT1QgbG9vayBpbiB0aGUgUEFUSCBmb3IgdGhlIGZpbGVuYW1lOyB0aGUga2VybmVsCitwYXNzZXMgaXQgdGhlIGZ1bGwgZmlsZW5hbWUgKG9yIHRoZSBmaWxlIGRlc2NyaXB0b3IpIHRvIHVzZS4gIFVzaW5nICRQQVRIIGNhbgorY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvdXIgYW5kIGNhbiBiZSBhIHNlY3VyaXR5IGhhemFyZC4KKworCitUaGVyZSBpcyBhIHdlYiBwYWdlIGFib3V0IGJpbmZtdF9taXNjIGF0CitodHRwOi8vd3d3LnRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZS9+cmd1ZW50aC9saW51eC9iaW5mbXRfbWlzYy5odG1sCisKK1JpY2hhcmQgR/xudGhlciA8cmd1ZW50aEB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2FzLWlvc2NoZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQ3MzMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dApAQCAtMCwwICsxLDE2NSBAQAorQW50aWNpcGF0b3J5IElPIHNjaGVkdWxlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmljayBQaWdnaW4gPHBpZ2dpbkBjeWJlcm9uZS5jb20uYXU+ICAgIDEzIFNlcCAyMDAzCisKK0F0dGVudGlvbiEgRGF0YWJhc2Ugc2VydmVycywgZXNwZWNpYWxseSB0aG9zZSB1c2luZyAiVENRIiBkaXNrcyBzaG91bGQKK2ludmVzdGlnYXRlIHBlcmZvcm1hbmNlIHdpdGggdGhlICdkZWFkbGluZScgSU8gc2NoZWR1bGVyLiBBbnkgc3lzdGVtIHdpdGggaGlnaAorZGlzayBwZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgc2hvdWxkIGRvIHNvLCBpbiBmYWN0LgorCitJZiB5b3Ugc2VlIHVudXN1YWwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHlvdXIgZGlzayBzeXN0ZW1zLCBvciB5b3UKK3NlZSBiaWcgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgdmVyc3VzIHRoZSBkZWFkbGluZSBzY2hlZHVsZXIsIHBsZWFzZSBlbWFpbAorbWUuIERhdGFiYXNlIHVzZXJzIGRvbid0IGJvdGhlciB1bmxlc3MgeW91J3JlIHdpbGxpbmcgdG8gdGVzdCBhIGxvdCBvZiBwYXRjaGVzCitmcm9tIG1lIDspIGl0cyBhIGtub3duIGlzc3VlLgorCitBbHNvLCB1c2VycyB3aXRoIGhhcmR3YXJlIFJBSUQgY29udHJvbGxlcnMsIGRvaW5nIHN0cmlwaW5nLCBtYXkgZmluZAoraGlnaGx5IHZhcmlhYmxlIHBlcmZvcm1hbmNlIHJlc3VsdHMgd2l0aCB1c2luZyB0aGUgYXMtaW9zY2hlZC4gVGhlCithcy1pb3NjaGVkIGFudGljaXBhdG9yeSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgbm90aW9uIHRoYXQgYSBkaXNrCitkZXZpY2UgaGFzIG9ubHkgb25lIHBoeXNpY2FsIHNlZWtpbmcgaGVhZC4gIEEgc3RyaXBlZCBSQUlEIGNvbnRyb2xsZXIKK2FjdHVhbGx5IGhhcyBhIGhlYWQgZm9yIGVhY2ggcGh5c2ljYWwgZGV2aWNlIGluIHRoZSBsb2dpY2FsIFJBSUQgZGV2aWNlLgorCitIb3dldmVyLCBzZXR0aW5nIHRoZSBhbnRpY19leHBpcmUgKHNlZSB0dW5hYmxlIHBhcmFtZXRlcnMgYmVsb3cpIHByb2R1Y2VzCit2ZXJ5IHNpbWlsYXIgYmVoYXZpb3IgdG8gdGhlIGRlYWRsaW5lIElPIHNjaGVkdWxlci4KKworCitTZWxlY3RpbmcgSU8gc2NoZWR1bGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGNob29zZSBJTyBzY2hlZHVsZXJzIGF0IGJvb3QgdGltZSwgdXNlIHRoZSBhcmd1bWVudCAnZWxldmF0b3I9ZGVhZGxpbmUnLgorJ25vb3AnIGFuZCAnYXMnICh0aGUgZGVmYXVsdCkgYXJlIGFsc28gYXZhaWxhYmxlLiBJTyBzY2hlZHVsZXJzIGFyZSBhc3NpZ25lZAorZ2xvYmFsbHkgYXQgYm9vdCB0aW1lIG9ubHkgcHJlc2VudGx5LgorCisKK0FudGljaXBhdG9yeSBJTyBzY2hlZHVsZXIgUG9saWNpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBhcy1pb3NjaGVkIGltcGxlbWVudGF0aW9uIGltcGxlbWVudHMgc2V2ZXJhbCBsYXllcnMgb2YgcG9saWNpZXMKK3RvIGRldGVybWluZSB3aGVuIGFuIElPIHJlcXVlc3QgaXMgZGlzcGF0Y2hlZCB0byB0aGUgZGlzayBjb250cm9sbGVyLgorSGVyZSBhcmUgdGhlIHBvbGljaWVzIG91dGxpbmVkLCBpbiBvcmRlciBvZiBhcHBsaWNhdGlvbi4KKworMS4gb25lLXdheSBFbGV2YXRvciBhbGdvcml0aG0uCisKK1RoZSBlbGV2YXRvciBhbGdvcml0aG0gaXMgc2ltaWxhciB0byB0aGF0IHVzZWQgaW4gZGVhZGxpbmUgc2NoZWR1bGVyLCB3aXRoCit0aGUgYWRkaXRpb24gdGhhdCBpdCBhbGxvd3MgbGltaXRlZCBiYWNrd2FyZCBtb3ZlbWVudCBvZiB0aGUgZWxldmF0b3IKKyhpLmUuIHNlZWtzIGJhY2t3YXJkcykuICBBIHNlZWsgYmFja3dhcmRzIGNhbiBvY2N1ciB3aGVuIGNob29zaW5nIGJldHdlZW4KK3R3byBJTyByZXF1ZXN0cyB3aGVyZSBvbmUgaXMgYmVoaW5kIHRoZSBlbGV2YXRvcidzIGN1cnJlbnQgcG9zaXRpb24sIGFuZAordGhlIG90aGVyIGlzIGluIGZyb250IG9mIHRoZSBlbGV2YXRvcidzIHBvc2l0aW9uLiBJZiB0aGUgc2VlayBkaXN0YW5jZSB0bwordGhlIHJlcXVlc3QgaW4gYmFjayBvZiB0aGUgZWxldmF0b3IgaXMgbGVzcyB0aGFuIGhhbGYgdGhlIHNlZWsgZGlzdGFuY2UgdG8KK3RoZSByZXF1ZXN0IGluIGZyb250IG9mIHRoZSBlbGV2YXRvciwgdGhlbiB0aGUgcmVxdWVzdCBpbiBiYWNrIGNhbiBiZSBjaG9zZW4uCitCYWNrd2FyZCBzZWVrcyBhcmUgYWxzbyBsaW1pdGVkIHRvIGEgbWF4aW11bSBvZiBNQVhCQUNLICgxMDI0KjEwMjQpIHNlY3RvcnMuCitUaGlzIGZhdm9ycyBmb3J3YXJkIG1vdmVtZW50IG9mIHRoZSBlbGV2YXRvciwgd2hpbGUgYWxsb3dpbmcgb3Bwb3J0dW5pc3RpYworInNob3J0IiBiYWNrd2FyZCBzZWVrcy4KKworMi4gRklGTyBleHBpcmF0aW9uIHRpbWVzIGZvciByZWFkcyBhbmQgZm9yIHdyaXRlcy4KKworVGhpcyBpcyBhZ2FpbiB2ZXJ5IHNpbWlsYXIgdG8gdGhlIGRlYWRsaW5lIElPIHNjaGVkdWxlci4gIFRoZSBleHBpcmF0aW9uCit0aW1lcyBmb3IgcmVxdWVzdHMgb24gdGhlc2UgbGlzdHMgaXMgdHVuYWJsZSB1c2luZyB0aGUgcGFyYW1ldGVycyByZWFkX2V4cGlyZQorYW5kIHdyaXRlX2V4cGlyZSBkaXNjdXNzZWQgYmVsb3cuICBXaGVuIGEgcmVhZCBvciBhIHdyaXRlIGV4cGlyZXMgaW4gdGhpcyB3YXksCit0aGUgSU8gc2NoZWR1bGVyIHdpbGwgaW50ZXJydXB0IGl0cyBjdXJyZW50IGVsZXZhdG9yIHN3ZWVwIG9yIHJlYWQgYW50aWNpcGF0aW9uCit0byBzZXJ2aWNlIHRoZSBleHBpcmVkIHJlcXVlc3QuCisKKzMuIFJlYWQgYW5kIHdyaXRlIHJlcXVlc3QgYmF0Y2hpbmcKKworQSBiYXRjaCBpcyBhIGNvbGxlY3Rpb24gb2YgcmVhZCByZXF1ZXN0cyBvciBhIGNvbGxlY3Rpb24gb2Ygd3JpdGUKK3JlcXVlc3RzLiAgVGhlIGFzIHNjaGVkdWxlciBhbHRlcm5hdGVzIGRpc3BhdGNoaW5nIHJlYWQgYW5kIHdyaXRlIGJhdGNoZXMKK3RvIHRoZSBkcml2ZXIuICBJbiB0aGUgY2FzZSBhIHJlYWQgYmF0Y2gsIHRoZSBzY2hlZHVsZXIgc3VibWl0cyByZWFkCityZXF1ZXN0cyB0byB0aGUgZHJpdmVyIGFzIGxvbmcgYXMgdGhlcmUgYXJlIHJlYWQgcmVxdWVzdHMgdG8gc3VibWl0LCBhbmQKK3RoZSByZWFkIGJhdGNoIHRpbWUgbGltaXQgaGFzIG5vdCBiZWVuIGV4Y2VlZGVkIChyZWFkX2JhdGNoX2V4cGlyZSkuCitUaGUgcmVhZCBiYXRjaCB0aW1lIGxpbWl0IGJlZ2lucyBjb3VudGluZyBkb3duIG9ubHkgd2hlbiB0aGVyZSBhcmUKK2NvbXBldGluZyB3cml0ZSByZXF1ZXN0cyBwZW5kaW5nLgorCitJbiB0aGUgY2FzZSBvZiBhIHdyaXRlIGJhdGNoLCB0aGUgc2NoZWR1bGVyIHN1Ym1pdHMgd3JpdGUgcmVxdWVzdHMgdG8KK3RoZSBkcml2ZXIgYXMgbG9uZyBhcyB0aGVyZSBhcmUgd3JpdGUgcmVxdWVzdHMgYXZhaWxhYmxlLCBhbmQgdGhlCit3cml0ZSBiYXRjaCB0aW1lIGxpbWl0IGhhcyBub3QgYmVlbiBleGNlZWRlZCAod3JpdGVfYmF0Y2hfZXhwaXJlKS4KK0hvd2V2ZXIsIHRoZSBsZW5ndGggb2Ygd3JpdGUgYmF0Y2hlcyB3aWxsIGJlIGdyYWR1YWxseSBzaG9ydGVuZWQKK3doZW4gcmVhZCBiYXRjaGVzIGZyZXF1ZW50bHkgZXhjZWVkIHRoZWlyIHRpbWUgbGltaXQuCisKK1doZW4gY2hhbmdpbmcgYmV0d2VlbiBiYXRjaCB0eXBlcywgdGhlIHNjaGVkdWxlciB3YWl0cyBmb3IgYWxsIHJlcXVlc3RzCitmcm9tIHRoZSBwcmV2aW91cyBiYXRjaCB0byBjb21wbGV0ZSBiZWZvcmUgc2NoZWR1bGluZyByZXF1ZXN0cyBmb3IgdGhlCituZXh0IGJhdGNoLgorCitUaGUgcmVhZCBhbmQgd3JpdGUgZmlmbyBleHBpcmF0aW9uIHRpbWVzIGRlc2NyaWJlZCBpbiBwb2xpY3kgMiBhYm92ZQorYXJlIGNoZWNrZWQgb25seSB3aGVuIGluIHNjaGVkdWxpbmcgSU8gb2YgYSBiYXRjaCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKKyhyZWFkL3dyaXRlKSB0eXBlLiAgU28gZm9yIGV4YW1wbGUsIHRoZSByZWFkIEZJRk8gdGltZW91dCB2YWx1ZXMgYXJlCit0ZXN0ZWQgb25seSBkdXJpbmcgcmVhZCBiYXRjaGVzLiAgTGlrZXdpc2UsIHRoZSB3cml0ZSBGSUZPIHRpbWVvdXQKK3ZhbHVlcyBhcmUgdGVzdGVkIG9ubHkgZHVyaW5nIHdyaXRlIGJhdGNoZXMuICBGb3IgdGhpcyByZWFzb24sCitpdCBpcyBnZW5lcmFsbHkgbm90IHJlY29tbWVuZGVkIGZvciB0aGUgcmVhZCBiYXRjaCB0aW1lCit0byBiZSBsb25nZXIgdGhhbiB0aGUgd3JpdGUgZXhwaXJhdGlvbiB0aW1lLCBub3IgZm9yIHRoZSB3cml0ZSBiYXRjaAordGltZSB0byBleGNlZWQgdGhlIHJlYWQgZXhwaXJhdGlvbiB0aW1lIChzZWUgdHVuYWJsZSBwYXJhbWV0ZXJzIGJlbG93KS4KKworV2hlbiB0aGUgSU8gc2NoZWR1bGVyIGNoYW5nZXMgZnJvbSBhIHJlYWQgdG8gYSB3cml0ZSBiYXRjaCwKK2l0IGJlZ2lucyB0aGUgZWxldmF0b3IgZnJvbSB0aGUgcmVxdWVzdCB0aGF0IGlzIG9uIHRoZSBoZWFkIG9mIHRoZQord3JpdGUgZXhwaXJhdGlvbiBGSUZPLiAgTGlrZXdpc2UsIHdoZW4gY2hhbmdpbmcgZnJvbSBhIHdyaXRlIGJhdGNoIHRvCithIHJlYWQgYmF0Y2gsIHNjaGVkdWxlciBiZWdpbnMgdGhlIGVsZXZhdG9yIGZyb20gdGhlIGZpcnN0IGVudHJ5CitvbiB0aGUgcmVhZCBleHBpcmF0aW9uIEZJRk8uCisKKzQuIFJlYWQgYW50aWNpcGF0aW9uLgorCitSZWFkIGFudGljaXBhdGlvbiBvY2N1cnMgb25seSB3aGVuIHNjaGVkdWxpbmcgYSByZWFkIGJhdGNoLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiByZWFkIGFudGljaXBhdGlvbiBhbGxvd3Mgb25seSBvbmUgcmVhZCByZXF1ZXN0Cit0byBiZSBkaXNwYXRjaGVkIHRvIHRoZSBkaXNrIGNvbnRyb2xsZXIgYXQgYSB0aW1lLiAgSW4KK2NvbnRyYXN0LCBtYW55IHdyaXRlIHJlcXVlc3RzIG1heSBiZSBkaXNwYXRjaGVkIHRvIHRoZSBkaXNrIGNvbnRyb2xsZXIKK2F0IGEgdGltZSBkdXJpbmcgYSB3cml0ZSBiYXRjaC4gIEl0IGlzIHRoaXMgY2hhcmFjdGVyaXN0aWMgdGhhdCBjYW4gbWFrZQordGhlIGFudGljaXBhdG9yeSBzY2hlZHVsZXIgcGVyZm9ybSBhbm9tYWxvdXNseSB3aXRoIGNvbnRyb2xsZXJzIHN1cHBvcnRpbmcKK1RDUSwgb3Igd2l0aCBoYXJkd2FyZSBzdHJpcGVkIFJBSUQgZGV2aWNlcy4gU2V0dGluZyB0aGUgYW50aWNfZXhwaXJlCitxdWV1ZSBwYXJhbXRlciAoc2VlIGJlbG93KSB0byB6ZXJvIGRpc2FibGVzIHRoaXMgYmVoYXZpb3IsIGFuZCB0aGUgYW50aWNpcGF0b3J5CitzY2hlZHVsZXIgYmVoYXZlcyBlc3NlbnRpYWxseSBsaWtlIHRoZSBkZWFkbGluZSBzY2hlZHVsZXIuCisKK1doZW4gcmVhZCBhbnRpY2lwYXRpb24gaXMgZW5hYmxlZCAoYW50aWNfZXhwaXJlIGlzIG5vdCB6ZXJvKSwgcmVhZHMKK2FyZSBkaXNwYXRjaGVkIHRvIHRoZSBkaXNrIGNvbnRyb2xsZXIgb25lIGF0IGEgdGltZS4KK0F0IHRoZSBlbmQgb2YgZWFjaCByZWFkIHJlcXVlc3QsIHRoZSBJTyBzY2hlZHVsZXIgZXhhbWluZXMgaXRzIG5leHQKK2NhbmRpZGF0ZSByZWFkIHJlcXVlc3QgZnJvbSBpdHMgc29ydGVkIHJlYWQgbGlzdC4gIElmIHRoYXQgbmV4dCByZXF1ZXN0CitpcyBmcm9tIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIHJlcXVlc3QgdGhhdCBqdXN0IGNvbXBsZXRlZCwKK29yIGlmIHRoZSBuZXh0IHJlcXVlc3QgaW4gdGhlIHF1ZXVlIGlzICJ2ZXJ5IGNsb3NlIiB0byB0aGUKK2p1c3QgY29tcGxldGVkIHJlcXVlc3QsIGl0IGlzIGRpc3BhdGNoZWQgaW1tZWRpYXRlbHkuICBPdGhlcndpc2UsCitzdGF0aXN0aWNzIChhdmVyYWdlIHRoaW5rIHRpbWUsIGF2ZXJhZ2Ugc2VlayBkaXN0YW5jZSkgb24gdGhlIHByb2Nlc3MKK3RoYXQgc3VibWl0dGVkIHRoZSBqdXN0IGNvbXBsZXRlZCByZXF1ZXN0IGFyZSBleGFtaW5lZC4gIElmIGl0IHNlZW1zCitsaWtlbHkgdGhhdCB0aGF0IHByb2Nlc3Mgd2lsbCBzdWJtaXQgYW5vdGhlciByZXF1ZXN0IHNvb24sIGFuZCB0aGF0CityZXF1ZXN0IGlzIGxpa2VseSB0byBiZSBuZWFyIHRoZSBqdXN0IGNvbXBsZXRlZCByZXF1ZXN0LCB0aGVuIHRoZSBJTworc2NoZWR1bGVyIHdpbGwgc3RvcCBkaXNwYXRjaGluZyBtb3JlIHJlYWQgcmVxdWVzdHMgZm9yIHVwIHRpbWUgKGFudGljX2V4cGlyZSkKK21pbGxpc2Vjb25kcywgaG9waW5nIHRoYXQgcHJvY2VzcyB3aWxsIHN1Ym1pdCBhIG5ldyByZXF1ZXN0IG5lYXIgdGhlIG9uZQordGhhdCBqdXN0IGNvbXBsZXRlZC4gIElmIHN1Y2ggYSByZXF1ZXN0IGlzIG1hZGUsIHRoZW4gaXQgaXMgZGlzcGF0Y2hlZAoraW1tZWRpYXRlbHkuICBJZiB0aGUgYW50aWNfZXhwaXJlIHdhaXQgdGltZSBleHBpcmVzLCB0aGVuIHRoZSBJTyBzY2hlZHVsZXIKK3dpbGwgZGlzcGF0Y2ggdGhlIG5leHQgcmVhZCByZXF1ZXN0IGZyb20gdGhlIHNvcnRlZCByZWFkIHF1ZXVlLgorCitUbyBkZWNpZGUgd2hldGhlciBhbiBhbnRpY2lwYXRvcnkgd2FpdCBpcyB3b3J0aHdoaWxlLCB0aGUgc2NoZWR1bGVyCittYWludGFpbnMgc3RhdGlzdGljcyBmb3IgZWFjaCBwcm9jZXNzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZQorbWVhbiAidGhpbmsgdGltZSIgKHRoZSB0aW1lIGJldHdlZW4gcmVhZCByZXF1ZXN0cyksIGFuZCBtZWFuIHNlZWsKK2Rpc3RhbmNlIGZvciB0aGF0IHByb2Nlc3MuICBPbmUgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGVzZSBzdGF0aXN0aWNzCithcmUgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcHJvY2VzcywgYnV0IHRob3NlIHN0YXRpc3RpY3MgYXJlIG5vdCBhc3NvY2lhdGVkCit3aXRoIGEgc3BlY2lmaWMgSU8gZGV2aWNlLiAgU28gZm9yIGV4YW1wbGUsIGlmIGEgcHJvY2VzcyBpcyBkb2luZyBJTworb24gc2V2ZXJhbCBmaWxlIHN5c3RlbXMgb24gc2VwYXJhdGUgZGV2aWNlcywgdGhlIHN0YXRpc3RpY3Mgd2lsbCBiZQorYSBjb21iaW5hdGlvbiBvZiBJTyBiZWhhdmlvciBmcm9tIGFsbCB0aG9zZSBkZXZpY2VzLgorCisKK1R1bmluZyB0aGUgYW50aWNpcGF0b3J5IElPIHNjaGVkdWxlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGVuIHVzaW5nICdhcycsIHRoZSBhbnRpY2lwYXRvcnkgSU8gc2NoZWR1bGVyIHRoZXJlIGFyZSA1IHBhcmFtZXRlcnMgdW5kZXIKKy9zeXMvYmxvY2svKi9xdWV1ZS9pb3NjaGVkLy4gQWxsIGFyZSB1bml0cyBvZiBtaWxsaXNlY29uZHMuCisKK1RoZSBwYXJhbWV0ZXJzIGFyZToKKyogcmVhZF9leHBpcmUKKyAgICBDb250cm9scyBob3cgbG9uZyB1bnRpbCBhIHJlYWQgcmVxdWVzdCBiZWNvbWVzICJleHBpcmVkIi4gSXQgYWxzbyBjb250cm9scyB0aGUKKyAgICBpbnRlcnZhbCBiZXR3ZWVuIHdoaWNoIGV4cGlyZWQgcmVxdWVzdHMgYXJlIHNlcnZlZCwgc28gc2V0IHRvIDUwLCBhIHJlcXVlc3QKKyAgICBtaWdodCB0YWtlIGFueXdoZXJlIDwgMTAwbXMgdG8gYmUgc2VydmljZWQgX2lmXyBpdCBpcyB0aGUgbmV4dCBvbiB0aGUKKyAgICBleHBpcmVkIGxpc3QuIE9idmlvdXNseSByZXF1ZXN0IGV4cGlyYXRpb24gc3RyYXRlZ2llcyB3b24ndCBtYWtlIHRoZSBkaXNrCisgICAgZ28gZmFzdGVyLiBUaGUgcmVzdWx0IGJhc2ljYWxseSBlcXVhdGVzIHRvIHRoZSB0aW1lc2xpY2UgYSBzaW5nbGUgcmVhZGVyCisgICAgZ2V0cyBpbiB0aGUgcHJlc2VuY2Ugb2Ygb3RoZXIgSU8uIDEwMCooKHNlZWsgdGltZSAvIHJlYWRfZXhwaXJlKSArIDEpIGlzCisgICAgdmVyeSByb3VnaGx5IHRoZSAlIHN0cmVhbWluZyByZWFkIGVmZmljaWVuY3kgeW91ciBkaXNrIHNob3VsZCBnZXQgd2l0aAorICAgIG11bHRpcGxlIHJlYWRlcnMuCisKKyogcmVhZF9iYXRjaF9leHBpcmUKKyAgICBDb250cm9scyBob3cgbXVjaCB0aW1lIGEgYmF0Y2ggb2YgcmVhZHMgaXMgZ2l2ZW4gYmVmb3JlIHBlbmRpbmcgd3JpdGVzIGFyZQorICAgIHNlcnZlZC4gQSBoaWdoZXIgdmFsdWUgaXMgbW9yZSBlZmZpY2llbnQuIFRoaXMgbWlnaHQgYmUgc2V0IGJlbG93IHJlYWRfZXhwaXJlCisgICAgaWYgd3JpdGVzIGFyZSB0byBiZSBnaXZlbiBoaWdoZXIgcHJpb3JpdHkgdGhhbiByZWFkcywgYnV0IHJlYWRzIGFyZSB0byBiZQorICAgIGFzIGVmZmljaWVudCBhcyBwb3NzaWJsZSB3aGVuIHRoZXJlIGFyZSBubyB3cml0ZXMuIEdlbmVyYWxseSB0aG91Z2gsIGl0CisgICAgc2hvdWxkIGJlIHNvbWUgbXVsdGlwbGUgb2YgcmVhZF9leHBpcmUuCisKKyogd3JpdGVfZXhwaXJlLCBhbmQKKyogd3JpdGVfYmF0Y2hfZXhwaXJlIGFyZSBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSwgZm9yIHdyaXRlcy4KKworKiBhbnRpY19leHBpcmUKKyAgICBDb250cm9scyB0aGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB3ZSBjYW4gYW50aWNpcGF0ZSBhIGdvb2QgcmVhZCAob25lCisgICAgd2l0aCBhIHNob3J0IHNlZWsgZGlzdGFuY2UgZnJvbSB0aGUgbW9zdCByZWNlbnRseSBjb21wbGV0ZWQgcmVxdWVzdCkgYmVmb3JlCisgICAgZ2l2aW5nIHVwLiBNYW55IG90aGVyIGZhY3RvcnMgbWF5IGNhdXNlIGFudGljaXBhdGlvbiB0byBiZSBzdG9wcGVkIGVhcmx5LAorICAgIG9yIHNvbWUgcHJvY2Vzc2VzIHdpbGwgbm90IGJlICJhbnRpY2lwYXRlZCIgYXQgYWxsLiBTaG91bGQgYmUgYSBiaXQgaGlnaGVyCisgICAgZm9yIGJpZyBzZWVrIHRpbWUgZGV2aWNlcyB0aG91Z2ggbm90IGEgbGluZWFyIGNvcnJlc3BvbmRlbmNlIC0gbW9zdAorICAgIHByb2Nlc3NlcyBoYXZlIG9ubHkgYSBmZXcgbXMgdGhpbmt0aW1lLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkMjc0ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dApAQCAtMCwwICsxLDEyMTMgQEAKKwlOb3RlcyBvbiB0aGUgR2VuZXJpYyBCbG9jayBMYXllciBSZXdyaXRlIGluIExpbnV4IDIuNQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGVzIFdyaXR0ZW4gb24gSmFuIDE1LCAyMDAyOgorCUplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisJU3VwYXJuYSBCaGF0dGFjaGFyeWEgPHN1cGFybmFAaW4uaWJtLmNvbT4KKworTGFzdCBVcGRhdGVkIE1heSAyLCAyMDAyCitTZXB0ZW1iZXIgMjAwMzogVXBkYXRlZCBJL08gU2NoZWR1bGVyIHBvcnRpb25zCisJTmljayBQaWdnaW4gPHBpZ2dpbkBjeWJlcm9uZS5jb20uYXU+CisKK0ludHJvZHVjdGlvbjoKKworVGhlc2UgYXJlIHNvbWUgbm90ZXMgZGVzY3JpYmluZyBzb21lIGFzcGVjdHMgb2YgdGhlIDIuNSBibG9jayBsYXllciBpbiB0aGUKK2NvbnRleHQgb2YgdGhlIGJpbyByZXdyaXRlLiBUaGUgaWRlYSBpcyB0byBicmluZyBvdXQgc29tZSBvZiB0aGUga2V5CitjaGFuZ2VzIGFuZCBhIGdsaW1wc2Ugb2YgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhvc2UgY2hhbmdlcy4KKworUGxlYXNlIG1haWwgY29ycmVjdGlvbnMgJiBzdWdnZXN0aW9ucyB0byBzdXBhcm5hQGluLmlibS5jb20uCisKK0NyZWRpdHM6CistLS0tLS0tLS0KKworMi41IGJpbyByZXdyaXRlOgorCUplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisKK01hbnkgYXNwZWN0cyBvZiB0aGUgZ2VuZXJpYyBibG9jayBsYXllciByZWRlc2lnbiB3ZXJlIGRyaXZlbiBieSBhbmQgZXZvbHZlZAorb3ZlciBkaXNjdXNzaW9ucywgcHJpb3IgcGF0Y2hlcyBhbmQgdGhlIGNvbGxlY3RpdmUgZXhwZXJpZW5jZSBvZiBzZXZlcmFsCitwZW9wbGUuIFNlZSBzZWN0aW9ucyA4IGFuZCA5IGZvciBhIGxpc3Qgb2Ygc29tZSByZWxhdGVkIHJlZmVyZW5jZXMuCisKK1RoZSBmb2xsb3dpbmcgcGVvcGxlIGhlbHBlZCB3aXRoIHJldmlldyBjb21tZW50cyBhbmQgaW5wdXRzIGZvciB0aGlzCitkb2N1bWVudDoKKwlDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+CisJQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW52QHJlZGhhdC5jb20+CisJUmFuZHkgRHVubGFwIDxyZGR1bmxhcEBvc2RsLm9yZz4KKwlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgorCitUaGUgZm9sbG93aW5nIHBlb3BsZSBoZWxwZWQgd2l0aCBmaXhlcy9jb250cmlidXRpb25zIHRvIHRoZSBiaW8gcGF0Y2hlcword2hpbGUgaXQgd2FzIHN0aWxsIHdvcmstaW4tcHJvZ3Jlc3M6CisJRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPgorCisKK0Rlc2NyaXB0aW9uIG9mIENvbnRlbnRzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFNjb3BlIGZvciB0dW5pbmcgb2YgbG9naWMgdG8gdmFyaW91cyBuZWVkcworICAxLjEgVHVuaW5nIGJhc2VkIG9uIGRldmljZSBvciBsb3cgbGV2ZWwgZHJpdmVyIGNhcGFiaWxpdGllcworCS0gUGVyLXF1ZXVlIHBhcmFtZXRlcnMKKwktIEhpZ2htZW0gSS9PIHN1cHBvcnQKKwktIEkvTyBzY2hlZHVsZXIgbW9kdWxhcml6YXRpb24KKyAgMS4yIFR1bmluZyBiYXNlZCBvbiBoaWdoIGxldmVsIHJlcXVpcmVtZW50cy9jYXBhYmlsaXRpZXMKKwkxLjIuMSBJL08gQmFycmllcnMKKwkxLjIuMiBSZXF1ZXN0IFByaW9yaXR5L0xhdGVuY3kKKyAgMS4zIERpcmVjdCBhY2Nlc3MvYnlwYXNzIHRvIGxvd2VyIGxheWVycyBmb3IgZGlhZ25vc3RpY3MgYW5kIHNwZWNpYWwKKyAgICAgIGRldmljZSBvcGVyYXRpb25zCisJMS4zLjEgUHJlLWJ1aWx0IGNvbW1hbmRzCisyLiBOZXcgZmxleGlibGUgYW5kIGdlbmVyaWMgYnV0IG1pbmltYWxpc3QgaS9vIHN0cnVjdHVyZSBvciBkZXNjcmlwdG9yCisgICAoaW5zdGVhZCBvZiB1c2luZyBidWZmZXIgaGVhZHMgYXQgdGhlIGkvbyBsYXllcikKKyAgMi4xIFJlcXVpcmVtZW50cy9Hb2FscyBhZGRyZXNzZWQKKyAgMi4yIFRoZSBiaW8gc3RydWN0IGluIGRldGFpbCAobXVsdGktcGFnZSBpbyB1bml0KQorICAyLjMgQ2hhbmdlcyBpbiB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUKKzMuIFVzaW5nIGJpb3MKKyAgMy4xIFNldHVwL3RlYXJkb3duIChhbGxvY2F0aW9uLCBzcGxpdHRpbmcpCisgIDMuMiBHZW5lcmljIGJpbyBoZWxwZXIgcm91dGluZXMKKyAgICAzLjIuMSBUcmF2ZXJzaW5nIHNlZ21lbnRzIGFuZCBjb21wbGV0aW9uIHVuaXRzIGluIGEgcmVxdWVzdAorICAgIDMuMi4yIFNldHRpbmcgdXAgRE1BIHNjYXR0ZXJsaXN0cworICAgIDMuMi4zIEkvTyBjb21wbGV0aW9uCisgICAgMy4yLjQgSW1wbGljYXRpb25zIGZvciBkcml2ZXJzIHRoYXQgZG8gbm90IGludGVycHJldCBiaW9zIChkb24ndCBoYW5kbGUKKyAJICBtdWx0aXBsZSBzZWdtZW50cykKKyAgICAzLjIuNSBSZXF1ZXN0IGNvbW1hbmQgdGFnZ2luZworICAzLjMgSS9PIHN1Ym1pc3Npb24KKzQuIFRoZSBJL08gc2NoZWR1bGVyCis1LiBTY2FsYWJpbGl0eSByZWxhdGVkIGNoYW5nZXMKKyAgNS4xIEdyYW51bGFyIGxvY2tpbmc6IFJlbW92YWwgb2YgaW9fcmVxdWVzdF9sb2NrCisgIDUuMiBQcmVwYXJlIGZvciB0cmFuc2l0aW9uIHRvIDY0IGJpdCBzZWN0b3JfdAorNi4gT3RoZXIgQ2hhbmdlcy9JbXBsaWNhdGlvbnMKKyAgNi4xIFBhcnRpdGlvbiByZS1tYXBwaW5nIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgYmxvY2sgbGF5ZXIKKzcuIEEgZmV3IHRpcHMgb24gbWlncmF0aW9uIG9mIG9sZGVyIGRyaXZlcnMKKzguIEEgbGlzdCBvZiBwcmlvci9yZWxhdGVkL2ltcGFjdGVkIHBhdGNoZXMvaWRlYXMKKzkuIE90aGVyIFJlZmVyZW5jZXMvRGlzY3Vzc2lvbiBUaHJlYWRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCaW8gTm90ZXMKKy0tLS0tLS0tCisKK0xldCB1cyBkaXNjdXNzIHRoZSBjaGFuZ2VzIGluIHRoZSBjb250ZXh0IG9mIGhvdyBzb21lIG92ZXJhbGwgZ29hbHMgZm9yIHRoZQorYmxvY2sgbGF5ZXIgYXJlIGFkZHJlc3NlZC4KKworMS4gU2NvcGUgZm9yIHR1bmluZyB0aGUgZ2VuZXJpYyBsb2dpYyB0byBzYXRpc2Z5IHZhcmlvdXMgcmVxdWlyZW1lbnRzCisKK1RoZSBibG9jayBsYXllciBkZXNpZ24gc3VwcG9ydHMgYWRhcHRhYmxlIGFic3RyYWN0aW9ucyB0byBoYW5kbGUgY29tbW9uCitwcm9jZXNzaW5nIHdpdGggdGhlIGFiaWxpdHkgdG8gdHVuZSB0aGUgbG9naWMgdG8gYW4gYXBwcm9wcmlhdGUgZXh0ZW50CitkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgZGV2aWNlIGFuZCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBjYWxsZXIuCitPbmUgb2YgdGhlIG9iamVjdGl2ZXMgb2YgdGhlIHJld3JpdGUgd2FzIHRvIGluY3JlYXNlIHRoZSBkZWdyZWUgb2YgdHVuYWJpbGl0eQorYW5kIHRvIGVuYWJsZSBoaWdoZXIgbGV2ZWwgY29kZSB0byB1dGlsaXplIHVuZGVybHlpbmcgZGV2aWNlL2RyaXZlcgorY2FwYWJpbGl0aWVzIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBmb3IgYmV0dGVyIGkvbyBwZXJmb3JtYW5jZS4gVGhpcyBpcworaW1wb3J0YW50IGVzcGVjaWFsbHkgaW4gdGhlIGxpZ2h0IG9mIGV2ZXIgaW1wcm92aW5nIGhhcmR3YXJlIGNhcGFiaWxpdGllcworYW5kIGFwcGxpY2F0aW9uL21pZGRsZXdhcmUgc29mdHdhcmUgZGVzaWduZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlc2UKK2NhcGFiaWxpdGllcy4KKworMS4xIFR1bmluZyBiYXNlZCBvbiBsb3cgbGV2ZWwgZGV2aWNlIC8gZHJpdmVyIGNhcGFiaWxpdGllcworCitTb3BoaXN0aWNhdGVkIGRldmljZXMgd2l0aCBsYXJnZSBidWlsdC1pbiBjYWNoZXMsIGludGVsbGlnZW50IGkvbyBzY2hlZHVsaW5nCitvcHRpbWl6YXRpb25zLCBoaWdoIG1lbW9yeSBETUEgc3VwcG9ydCwgZXRjIG1heSBmaW5kIHNvbWUgb2YgdGhlCitnZW5lcmljIHByb2Nlc3NpbmcgYW4gb3ZlcmhlYWQsIHdoaWxlIGZvciBsZXNzIGNhcGFibGUgZGV2aWNlcyB0aGUKK2dlbmVyaWMgZnVuY3Rpb25hbGl0eSBpcyBlc3NlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIG9yIGNvcnJlY3RuZXNzIHJlYXNvbnMuCitLbm93bGVkZ2Ugb2Ygc29tZSBvZiB0aGUgY2FwYWJpbGl0aWVzIG9yIHBhcmFtZXRlcnMgb2YgdGhlIGRldmljZSBzaG91bGQgYmUKK3VzZWQgYXQgdGhlIGdlbmVyaWMgYmxvY2sgbGF5ZXIgdG8gdGFrZSB0aGUgcmlnaHQgZGVjaXNpb25zIG9uCitiZWhhbGYgb2YgdGhlIGRyaXZlci4KKworSG93IGlzIHRoaXMgYWNoaWV2ZWQgPworCitUdW5pbmcgYXQgYSBwZXItcXVldWUgbGV2ZWw6CisKK2kuIFBlci1xdWV1ZSBsaW1pdHMvdmFsdWVzIGV4cG9ydGVkIHRvIHRoZSBnZW5lcmljIGxheWVyIGJ5IHRoZSBkcml2ZXIKKworVmFyaW91cyBwYXJhbWV0ZXJzIHRoYXQgdGhlIGdlbmVyaWMgaS9vIHNjaGVkdWxlciBsb2dpYyB1c2VzIGFyZSBzZXQgYXQKK2EgcGVyLXF1ZXVlIGxldmVsIChlLmcgbWF4aW11bSByZXF1ZXN0IHNpemUsIG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnRzIGluCithIHNjYXR0ZXItZ2F0aGVyIGxpc3QsIGhhcmRzZWN0IHNpemUpCisKK1NvbWUgcGFyYW1ldGVycyB0aGF0IHdlcmUgZWFybGllciBhdmFpbGFibGUgYXMgZ2xvYmFsIGFycmF5cyBpbmRleGVkIGJ5CittYWpvci9taW5vciBhcmUgbm93IGRpcmVjdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcXVldWUuIFNvbWUgb2YgdGhlc2UgbWF5Cittb3ZlIGludG8gdGhlIGJsb2NrIGRldmljZSBzdHJ1Y3R1cmUgaW4gdGhlIGZ1dHVyZS4gU29tZSBjaGFyYWN0ZXJpc3RpY3MKK2hhdmUgYmVlbiBpbmNvcnBvcmF0ZWQgaW50byBhIHF1ZXVlIGZsYWdzIGZpZWxkIHJhdGhlciB0aGFuIHNlcGFyYXRlIGZpZWxkcworaW4gdGhlbXNlbHZlcy4gIFRoZXJlIGFyZSBibGtfcXVldWVfeHh4IGZ1bmN0aW9ucyB0byBzZXQgdGhlIHBhcmFtZXRlcnMsCityYXRoZXIgdGhhbiB1cGRhdGUgdGhlIGZpZWxkcyBkaXJlY3RseQorCitTb21lIG5ldyBxdWV1ZSBwcm9wZXJ0eSBzZXR0aW5nczoKKworCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocSwgdTY0IGRtYV9hZGRyZXNzKQorCQlFbmFibGUgSS9PIHRvIGhpZ2htZW0gcGFnZXMsIGRtYV9hZGRyZXNzIGJlaW5nIHRoZQorCQlsaW1pdC4gTm8gaGlnaG1lbSBkZWZhdWx0LgorCisJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIG1heF9zZWN0b3JzKQorCQlNYXhpbXVtIHNpemUgcmVxdWVzdCB5b3UgY2FuIGhhbmRsZSBpbiB1bml0cyBvZiA1MTIgYnl0ZQorCQlzZWN0b3JzLiAyNTUgZGVmYXVsdC4KKworCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBtYXhfc2VnbWVudHMpCisJCU1heGltdW0gcGh5c2ljYWwgc2VnbWVudHMgeW91IGNhbiBoYW5kbGUgaW4gYSByZXF1ZXN0LiAxMjgKKwkJZGVmYXVsdCAoZHJpdmVyIGxpbWl0KS4gKFNlZSAzLjIuMikKKworCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgbWF4X3NlZ21lbnRzKQorCQlNYXhpbXVtIGRtYSBzZWdtZW50cyB0aGUgaGFyZHdhcmUgY2FuIGhhbmRsZSBpbiBhIHJlcXVlc3QuIDEyOAorCQlkZWZhdWx0IChob3N0IGFkYXB0ZXIgbGltaXQsIGFmdGVyIGRtYSByZW1hcHBpbmcpLgorCQkoU2VlIDMuMi4yKQorCisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgbWF4X3NlZ19zaXplKQorCQlNYXhpbXVtIHNpemUgb2YgYSBjbHVzdGVyZWQgc2VnbWVudCwgNjRrQiBkZWZhdWx0LgorCisJYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUocSwgaGFyZHNlY3Rfc2l6ZSkKKwkJTG93ZXN0IHBvc3NpYmxlIHNlY3RvciBzaXplIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBvcGVyYXRlCisJCW9uLCA1MTIgYnl0ZXMgZGVmYXVsdC4KKworTmV3IHF1ZXVlIGZsYWdzOgorCisJUVVFVUVfRkxBR19DTFVTVEVSIChzZWUgMy4yLjIpCisJUVVFVUVfRkxBR19RVUVVRUQgKHNlZSAzLjIuNCkKKworCitpaS4gSGlnaC1tZW0gaS9vIGNhcGFiaWxpdGllcyBhcmUgbm93IGNvbnNpZGVyZWQgdGhlIGRlZmF1bHQKKworVGhlIGdlbmVyaWMgYm91bmNlIGJ1ZmZlciBsb2dpYywgcHJlc2VudCBpbiAyLjQsIHdoZXJlIHRoZSBibG9jayBsYXllciB3b3VsZAorYnkgZGVmYXVsdCBjb3B5aW4vb3V0IGkvbyByZXF1ZXN0cyBvbiBoaWdoLW1lbW9yeSBidWZmZXJzIHRvIGxvdy1tZW1vcnkgYnVmZmVycworYXNzdW1pbmcgdGhhdCB0aGUgZHJpdmVyIHdvdWxkbid0IGJlIGFibGUgdG8gaGFuZGxlIGl0IGRpcmVjdGx5LCBoYXMgYmVlbgorY2hhbmdlZCBpbiAyLjUuIFRoZSBib3VuY2UgbG9naWMgaXMgbm93IGFwcGxpZWQgb25seSBmb3IgbWVtb3J5IHJhbmdlcworZm9yIHdoaWNoIHRoZSBkZXZpY2UgY2Fubm90IGhhbmRsZSBpL28uIEEgZHJpdmVyIGNhbiBzcGVjaWZ5IHRoaXMgYnkKK3NldHRpbmcgdGhlIHF1ZXVlIGJvdW5jZSBsaW1pdCBmb3IgdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKKyhibGtfcXVldWVfYm91bmNlX2xpbWl0KCkpLiBUaGlzIGF2b2lkcyB0aGUgaW5lZmZpY2llbmNpZXMgb2YgdGhlIGNvcHlpbi9vdXQKK3doZXJlIGEgZGV2aWNlIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgaGlnaCBtZW1vcnkgaS9vLgorCitJbiBvcmRlciB0byBlbmFibGUgaGlnaC1tZW1vcnkgaS9vIHdoZXJlIHRoZSBkZXZpY2UgaXMgY2FwYWJsZSBvZiBzdXBwb3J0aW5nCitpdCwgdGhlIHBjaSBkbWEgbWFwcGluZyByb3V0aW5lcyBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgaGF2ZSBub3cgYmVlbgorbW9kaWZpZWQgdG8gYWNjb21wbGlzaCBhIGRpcmVjdCBwYWdlIC0+IGJ1cyB0cmFuc2xhdGlvbiwgd2l0aG91dCByZXF1aXJpbmcKK2EgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgKHVubGlrZSB0aGUgZWFybGllciBzY2hlbWUgb2YgdmlydHVhbCBhZGRyZXNzCistPiBidXMgdHJhbnNsYXRpb24pLiBTbyB0aGlzIHdvcmtzIHVuaWZvcm1seSBmb3IgaGlnaC1tZW1vcnkgcGFnZXMgKHdoaWNoCitkbyBub3QgaGF2ZSBhIGNvcnJlcG9uZGluZyBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1hcHBpbmcpIGFuZAorbG93LW1lbW9yeSBwYWdlcy4KKworTm90ZTogUGxlYXNlIHJlZmVyIHRvIERNQS1tYXBwaW5nLnR4dCBmb3IgYSBkaXNjdXNzaW9uIG9uIFBDSSBoaWdoIG1lbSBETUEKK2FzcGVjdHMgYW5kIG1hcHBpbmcgb2Ygc2NhdHRlciBnYXRoZXIgbGlzdHMsIGFuZCBzdXBwb3J0IGZvciA2NCBiaXQgUENJLgorCitTcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkIG9ubHkgZm9yIGNhc2VzIHdoZXJlIGkvbyBuZWVkcyB0byBoYXBwZW4gb24KK3BhZ2VzIGF0IHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzZXMgYmV5b25kIHdoYXQgdGhlIGRldmljZSBjYW4gc3VwcG9ydC4gSW4gdGhlc2UKK2Nhc2VzLCBhIGJvdW5jZSBiaW8gcmVwcmVzZW50aW5nIGEgYnVmZmVyIGZyb20gdGhlIHN1cHBvcnRlZCBtZW1vcnkgcmFuZ2UKK2lzIHVzZWQgZm9yIHBlcmZvcm1pbmcgdGhlIGkvbyB3aXRoIGNvcHlpbi9jb3B5b3V0IGFzIG5lZWRlZCBkZXBlbmRpbmcgb24KK3RoZSB0eXBlIG9mIHRoZSBvcGVyYXRpb24uICBGb3IgZXhhbXBsZSwgaW4gY2FzZSBvZiBhIHJlYWQgb3BlcmF0aW9uLCB0aGUKK2RhdGEgcmVhZCBoYXMgdG8gYmUgY29waWVkIHRvIHRoZSBvcmlnaW5hbCBidWZmZXIgb24gaS9vIGNvbXBsZXRpb24sIHNvIGEKK2NhbGxiYWNrIHJvdXRpbmUgaXMgc2V0IHVwIHRvIGRvIHRoaXMsIHdoaWxlIGZvciB3cml0ZSwgdGhlIGRhdGEgaXMgY29waWVkCitmcm9tIHRoZSBvcmlnaW5hbCBidWZmZXIgdG8gdGhlIGJvdW5jZSBidWZmZXIgcHJpb3IgdG8gaXNzdWluZyB0aGUKK29wZXJhdGlvbi4gU2luY2UgYW4gb3JpZ2luYWwgYnVmZmVyIG1heSBiZSBpbiBhIGhpZ2ggbWVtb3J5IGFyZWEgdGhhdCdzIG5vdAorbWFwcGVkIGluIGtlcm5lbCB2aXJ0dWFsIGFkZHIsIGEga21hcCBvcGVyYXRpb24gbWF5IGJlIHJlcXVpcmVkIGZvcgorcGVyZm9ybWluZyB0aGUgY29weSwgYW5kIHNwZWNpYWwgY2FyZSBtYXkgYmUgbmVlZGVkIGluIHRoZSBjb21wbGV0aW9uIHBhdGgKK2FzIGl0IG1heSBub3QgYmUgaW4gaXJxIGNvbnRleHQuIFNwZWNpYWwgY2FyZSBpcyBhbHNvIHJlcXVpcmVkIChieSB3YXkgb2YKK0dGUCBmbGFncykgd2hlbiBhbGxvY2F0aW5nIGJvdW5jZSBidWZmZXJzLCB0byBhdm9pZCBjZXJ0YWluIGhpZ2htZW0KK2RlYWRsb2NrIHBvc3NpYmlsaXRpZXMuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdGhhdCBhIGJvdW5jZSBidWZmZXIgbWF5IGJlIGFsbG9jYXRlZCBmcm9tIGhpZ2gtbWVtb3J5CithcmVhIHRoYXQncyBub3QgbWFwcGVkIGluIGtlcm5lbCB2aXJ0dWFsIGFkZHIsIGJ1dCB3aXRoaW4gdGhlIHJhbmdlIHRoYXQgdGhlCitkZXZpY2UgY2FuIHVzZSBkaXJlY3RseTsgc28gdGhlIGJvdW5jZSBwYWdlIG1heSBuZWVkIHRvIGJlIGttYXBwZWQgZHVyaW5nCitjb3B5IG9wZXJhdGlvbnMuIFtOb3RlOiBUaGlzIGRvZXMgbm90IGhvbGQgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sCit0aG91Z2hdCisKK1RoZXJlIGFyZSBzb21lIHNpdHVhdGlvbnMgd2hlbiBwYWdlcyBmcm9tIGhpZ2ggbWVtb3J5IG1heSBuZWVkIHRvCitiZSBrbWFwcGVkLCBldmVuIGlmIGJvdW5jZSBidWZmZXJzIGFyZSBub3QgbmVjZXNzYXJ5LiBGb3IgZXhhbXBsZSBhIGRldmljZQorbWF5IG5lZWQgdG8gYWJvcnQgRE1BIG9wZXJhdGlvbnMgYW5kIHJldmVydCB0byBQSU8gZm9yIHRoZSB0cmFuc2ZlciwgaW4KK3doaWNoIGNhc2UgYSB2aXJ0dWFsIG1hcHBpbmcgb2YgdGhlIHBhZ2UgaXMgcmVxdWlyZWQuIEZvciBTQ1NJIGl0IGlzIGFsc28KK2RvbmUgaW4gc29tZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIGxvdyBsZXZlbCBkcml2ZXIgY2Fubm90IGJlIHRydXN0ZWQgdG8KK2hhbmRsZSBhIHNpbmdsZSBzZyBlbnRyeSBjb3JyZWN0bHkuIFRoZSBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSB0aGUKK2ttYXBzIGFzIG5lZWRlZCBvbiBzdWNoIG9jY2FzaW9ucyB1c2luZyB0aGUgX19iaW9fa21hcF9hdG9taWMgYW5kIGJpb19rbWFwX2lycQorcm91dGluZXMgYXMgYXBwcm9wcmlhdGUuIEEgZHJpdmVyIGNvdWxkIGFsc28gdXNlIHRoZSBibGtfcXVldWVfYm91bmNlKCkKK3JvdXRpbmUgb24gaXRzIG93biB0byBib3VuY2UgaGlnaG1lbSBpL28gdG8gbG93IG1lbW9yeSBmb3Igc3BlY2lmaWMgcmVxdWVzdHMKK2lmIHNvIGRlc2lyZWQuCisKK2lpaS4gVGhlIGkvbyBzY2hlZHVsZXIgYWxnb3JpdGhtIGl0c2VsZiBjYW4gYmUgcmVwbGFjZWQvc2V0IGFzIGFwcHJvcHJpYXRlCisKK0FzIGluIDIuNCwgaXQgaXMgcG9zc2libGUgdG8gcGx1Z2luIGEgYnJhbmQgbmV3IGkvbyBzY2hlZHVsZXIgZm9yIGEgcGFydGljdWxhcgorcXVldWUgb3IgcGljayBmcm9tIChjb3B5KSBleGlzdGluZyBnZW5lcmljIHNjaGVkdWxlcnMgYW5kIHJlcGxhY2Uvb3ZlcnJpZGUKK2NlcnRhaW4gcG9ydGlvbnMgb2YgaXQuIFRoZSAyLjUgcmV3cml0ZSBwcm92aWRlcyBpbXByb3ZlZCBtb2R1bGFyaXphdGlvbgorb2YgdGhlIGkvbyBzY2hlZHVsZXIuIFRoZXJlIGFyZSBtb3JlIHBsdWdnYWJsZSBjYWxsYmFja3MsIGUuZyBmb3IgaW5pdCwKK2FkZCByZXF1ZXN0LCBleHRyYWN0IHJlcXVlc3QsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFic3RyYWN0IHNwZWNpZmljCitpL28gc2NoZWR1bGluZyBhbGdvcml0aG0gYXNwZWN0cyBhbmQgZGV0YWlscyBvdXRzaWRlIG9mIHRoZSBnZW5lcmljIGxvb3AuCitJdCBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgaGlkZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZgordGhlIGkvbyBzY2hlZHVsZXIgZnJvbSBibG9jayBkcml2ZXJzLgorCitJL08gc2NoZWR1bGVyIHdyYXBwZXJzIGFyZSB0byBiZSB1c2VkIGluc3RlYWQgb2YgYWNjZXNzaW5nIHRoZSBxdWV1ZSBkaXJlY3RseS4KK1NlZSBzZWN0aW9uIDQuIFRoZSBJL08gc2NoZWR1bGVyIGZvciBkZXRhaWxzLgorCisxLjIgVHVuaW5nIEJhc2VkIG9uIEhpZ2ggbGV2ZWwgY29kZSBjYXBhYmlsaXRpZXMKKworaS4gQXBwbGljYXRpb24gY2FwYWJpbGl0aWVzIGZvciByYXcgaS9vCisKK1RoaXMgY29tZXMgZnJvbSBzb21lIG9mIHRoZSBoaWdoLXBlcmZvcm1hbmNlIGRhdGFiYXNlL21pZGRsZXdhcmUKK3JlcXVpcmVtZW50cyB3aGVyZSBhbiBhcHBsaWNhdGlvbiBwcmVmZXJzIHRvIG1ha2UgaXRzIG93biBpL28gc2NoZWR1bGluZworZGVjaXNpb25zIGJhc2VkIG9uIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFjY2VzcyBwYXR0ZXJucyBhbmQgaS9vCitjaGFyYWN0ZXJpc3RpY3MKKworaWkuIEhpZ2ggcGVyZm9ybWFuY2UgZmlsZXN5c3RlbXMgb3Igb3RoZXIgaGlnaGVyIGxldmVsIGtlcm5lbCBjb2RlJ3MKK2NhcGFiaWxpdGllcworCitLZXJuZWwgY29tcG9uZW50cyBsaWtlIGZpbGVzeXN0ZW1zIGNvdWxkIGFsc28gdGFrZSB0aGVpciBvd24gaS9vIHNjaGVkdWxpbmcKK2RlY2lzaW9ucyBmb3Igb3B0aW1pemluZyBwZXJmb3JtYW5jZS4gSm91cm5hbGxpbmcgZmlsZXN5c3RlbXMgbWF5IG5lZWQKK3NvbWUgY29udHJvbCBvdmVyIGkvbyBvcmRlcmluZy4KKworV2hhdCBraW5kIG9mIHN1cHBvcnQgZXhpc3RzIGF0IHRoZSBnZW5lcmljIGJsb2NrIGxheWVyIGZvciB0aGlzID8KKworVGhlIGZsYWdzIGFuZCBydyBmaWVsZHMgaW4gdGhlIGJpbyBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgZm9yIHNvbWUgdHVuaW5nCitmcm9tIGFib3ZlIGUuZyBpbmRpY2F0aW5nIHRoYXQgYW4gaS9vIGlzIGp1c3QgYSByZWFkYWhlYWQgcmVxdWVzdCwgb3IgZm9yCittYXJraW5nICBiYXJyaWVyIHJlcXVlc3RzIChkaXNjdXNzZWQgbmV4dCksIG9yIHByaW9yaXR5IHNldHRpbmdzIChjdXJyZW50bHkKK3VudXNlZCkuIEFzIGZhciBhcyB1c2VyIGFwcGxpY2F0aW9ucyBhcmUgY29uY2VybmVkIHRoZXkgd291bGQgbmVlZCBhbgorYWRkaXRpb25hbCBtZWNoYW5pc20gZWl0aGVyIHZpYSBvcGVuIGZsYWdzIG9yIGlvY3Rscywgb3Igc29tZSBvdGhlciB1cHBlcgorbGV2ZWwgbWVjaGFuaXNtIHRvIGNvbW11bmljYXRlIHN1Y2ggc2V0dGluZ3MgdG8gYmxvY2suCisKKzEuMi4xIEkvTyBCYXJyaWVycworCitUaGVyZSBpcyBhIHdheSB0byBlbmZvcmNlIHN0cmljdCBvcmRlcmluZyBmb3IgaS9vcyB0aHJvdWdoIGJhcnJpZXJzLgorQWxsIHJlcXVlc3RzIGJlZm9yZSBhIGJhcnJpZXIgcG9pbnQgbXVzdCBiZSBzZXJ2aWNlZCBiZWZvcmUgdGhlIGJhcnJpZXIKK3JlcXVlc3QgYW5kIGFueSBvdGhlciByZXF1ZXN0cyBhcnJpdmluZyBhZnRlciB0aGUgYmFycmllciB3aWxsIG5vdCBiZQorc2VydmljZWQgdW50aWwgYWZ0ZXIgdGhlIGJhcnJpZXIgaGFzIGNvbXBsZXRlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIGhpZ2hlcgorbGV2ZWwgY29udHJvbCBvbiB3cml0ZSBvcmRlcmluZywgZS5nIGZsdXNoaW5nIGEgbG9nIG9mIGNvbW1pdHRlZCB1cGRhdGVzCit0byBkaXNrIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyB1cGRhdGVzIHRoZW1zZWx2ZXMuCisKK0EgZmxhZyBpbiB0aGUgYmlvIHN0cnVjdHVyZSwgQklPX0JBUlJJRVIgaXMgdXNlZCB0byBpZGVudGlmeSBhIGJhcnJpZXIgaS9vLgorVGhlIGdlbmVyaWMgaS9vIHNjaGVkdWxlciB3b3VsZCBtYWtlIHN1cmUgdGhhdCBpdCBwbGFjZXMgdGhlIGJhcnJpZXIgcmVxdWVzdCBhbmQKK2FsbCBvdGhlciByZXF1ZXN0cyBjb21pbmcgYWZ0ZXIgaXQgYWZ0ZXIgYWxsIHRoZSBwcmV2aW91cyByZXF1ZXN0cyBpbiB0aGUKK3F1ZXVlLiBCYXJyaWVycyBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gZGlmZmVyZW50IHdheXMgZGVwZW5kaW5nIG9uIHRoZQorZHJpdmVyLiBBIFNDU0kgZHJpdmVyIGZvciBleGFtcGxlIGNvdWxkIG1ha2UgdXNlIG9mIG9yZGVyZWQgdGFncyB0bworcHJlc2VydmUgdGhlIG5lY2Vzc2FyeSBvcmRlcmluZyB3aXRoIGEgbG93ZXIgaW1wYWN0IG9uIHRocm91Z2hwdXQuIEZvciBJREUKK3RoaXMgbWlnaHQgYmUgdHdvIHN5bmMgY2FjaGUgZmx1c2g6IGEgcHJlIGFuZCBwb3N0IGZsdXNoIHdoZW4gZW5jb3VudGVyaW5nCithIGJhcnJpZXIgd3JpdGUuCisKK1RoZXJlIGlzIGEgcHJvdmlzaW9uIGZvciBxdWV1ZXMgdG8gaW5kaWNhdGUgd2hhdCBraW5kIG9mIGJhcnJpZXJzIHRoZXkKK2NhbiBwcm92aWRlLiBUaGlzIGlzIGFzIG9mIHlldCB1bm1lcmdlZCwgZGV0YWlscyB3aWxsIGJlIGFkZGVkIGhlcmUgb25jZSBpdAoraXMgaW4gdGhlIGtlcm5lbC4KKworMS4yLjIgUmVxdWVzdCBQcmlvcml0eS9MYXRlbmN5CisKK1RvZG8vVW5kZXIgZGlzY3Vzc2lvbjoKK0FyamFuJ3MgcHJvcG9zZWQgcmVxdWVzdCBwcmlvcml0eSBzY2hlbWUgYWxsb3dzIGhpZ2hlciBsZXZlbHMgc29tZSBicm9hZAorICBjb250cm9sIChoaWdoL21lZC9sb3cpIG92ZXIgdGhlIHByaW9yaXR5ICBvZiBhbiBpL28gcmVxdWVzdCB2cyBvdGhlciBwZW5kaW5nCisgIHJlcXVlc3RzIGluIHRoZSBxdWV1ZS4gRm9yIGV4YW1wbGUgaXQgYWxsb3dzIHJlYWRzIGZvciBicmluZ2luZyBpbiBhbgorICBleGVjdXRhYmxlIHBhZ2Ugb24gZGVtYW5kIHRvIGJlIGdpdmVuIGEgaGlnaGVyIHByaW9yaXR5IG92ZXIgcGVuZGluZyB3cml0ZQorICByZXF1ZXN0cyB3aGljaCBoYXZlbid0IGFnZWQgdG9vIG11Y2ggb24gdGhlIHF1ZXVlLiBQb3RlbnRpYWxseSB0aGlzIHByaW9yaXR5CisgIGNvdWxkIGV2ZW4gYmUgZXhwb3NlZCB0byBhcHBsaWNhdGlvbnMgaW4gc29tZSBtYW5uZXIsIHByb3ZpZGluZyBoaWdoZXIgbGV2ZWwKKyAgdHVuYWJpbGl0eS4gVGltZSBiYXNlZCBhZ2luZyBhdm9pZHMgc3RhcnZhdGlvbiBvZiBsb3dlciBwcmlvcml0eQorICByZXF1ZXN0cy4gU29tZSBiaXRzIGluIHRoZSBiaV9ydyBmbGFncyBmaWVsZCBpbiB0aGUgYmlvIHN0cnVjdHVyZSBhcmUKKyAgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdGhpcyBwcmlvcml0eSBpbmZvcm1hdGlvbi4KKworCisxLjMgRGlyZWN0IEFjY2VzcyB0byBMb3cgbGV2ZWwgRGV2aWNlL0RyaXZlciBDYXBhYmlsaXRpZXMgKEJ5cGFzcyBtb2RlKQorICAgIChlLmcgRGlhZ25vc3RpY3MsIFN5c3RlbXMgTWFuYWdlbWVudCkKKworVGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgaGlnaC1sZXZlbCBjb2RlIG5lZWRzIHRvIGhhdmUgZGlyZWN0IGFjY2VzcyB0bwordGhlIGxvdyBsZXZlbCBkZXZpY2UgY2FwYWJpbGl0aWVzIG9yIHJlcXVpcmVzIHRoZSBhYmlsaXR5IHRvIGlzc3VlIGNvbW1hbmRzCit0byB0aGUgZGV2aWNlIGJ5cGFzc2luZyBzb21lIG9mIHRoZSBpbnRlcm1lZGlhdGUgaS9vIGxheWVycy4KK1RoZXNlIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgc3BlY2lhbCBjb250cm9sIGNvbW1hbmRzIGlzc3VlZCB0aHJvdWdoIGlvY3RsCitpbnRlcmZhY2VzLCBvciBjb3VsZCBiZSByYXcgcmVhZC93cml0ZSBjb21tYW5kcyB0aGF0IHN0cmVzcyB0aGUgZHJpdmUncworY2FwYWJpbGl0aWVzIGZvciBjZXJ0YWluIGtpbmRzIG9mIGZpdG5lc3MgdGVzdHMuIEhhdmluZyBkaXJlY3QgaW50ZXJmYWNlcyBhdAorbXVsdGlwbGUgbGV2ZWxzIHdpdGhvdXQgaGF2aW5nIHRvIHBhc3MgdGhyb3VnaCB1cHBlciBsYXllcnMgbWFrZXMKK2l0IHBvc3NpYmxlIHRvIHBlcmZvcm0gYm90dG9tIHVwIHZhbGlkYXRpb24gb2YgdGhlIGkvbyBwYXRoLCBsYXllciBieQorbGF5ZXIsIHN0YXJ0aW5nIGZyb20gdGhlIG1lZGlhLgorCitUaGUgbm9ybWFsIGkvbyBzdWJtaXNzaW9uIGludGVyZmFjZXMsIGUuZyBzdWJtaXRfYmlvLCBjb3VsZCBiZSBieXBhc3NlZAorZm9yIHNwZWNpYWxseSBjcmFmdGVkIHJlcXVlc3RzIHdoaWNoIHN1Y2ggaW9jdGwgb3IgZGlhZ25vc3RpY3MKK2ludGVyZmFjZXMgd291bGQgdHlwaWNhbGx5IHVzZSwgYW5kIHRoZSBlbGV2YXRvciBhZGRfcmVxdWVzdCByb3V0aW5lCitjYW4gaW5zdGVhZCBiZSB1c2VkIHRvIGRpcmVjdGx5IGluc2VydCBzdWNoIHJlcXVlc3RzIGluIHRoZSBxdWV1ZSBvciBwcmVmZXJhYmx5Cit0aGUgYmxrX2RvX3JxIHJvdXRpbmUgY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIHJlcXVlc3Qgb24gdGhlIHF1ZXVlIGFuZAord2FpdCBmb3IgY29tcGxldGlvbi4gQWx0ZXJuYXRpdmVseSwgc29tZXRpbWVzIHRoZSBjYWxsZXIgbWlnaHQganVzdAoraW52b2tlIGEgbG93ZXIgbGV2ZWwgZHJpdmVyIHNwZWNpZmljIGludGVyZmFjZSB3aXRoIHRoZSByZXF1ZXN0IGFzIGEKK3BhcmFtZXRlci4KKworSWYgdGhlIHJlcXVlc3QgaXMgYSBtZWFucyBmb3IgcGFzc2luZyBvbiBzcGVjaWFsIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aAordGhlIGNvbW1hbmQsIHRoZW4gc3VjaCBpbmZvcm1hdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QtPnNwZWNpYWwKK2ZpZWxkIChyYXRoZXIgdGhhbiBtaXN1c2UgdGhlIHJlcXVlc3QtPmJ1ZmZlciBmaWVsZCB3aGljaCBpcyBtZWFudCBmb3IgdGhlCityZXF1ZXN0IGRhdGEgYnVmZmVyJ3MgdmlydHVhbCBtYXBwaW5nKS4KKworRm9yIHBhc3NpbmcgcmVxdWVzdCBkYXRhLCB0aGUgY2FsbGVyIG11c3QgYnVpbGQgdXAgYSBiaW8gZGVzY3JpcHRvcgorcmVwcmVzZW50aW5nIHRoZSBjb25jZXJuZWQgbWVtb3J5IGJ1ZmZlciBpZiB0aGUgdW5kZXJseWluZyBkcml2ZXIgaW50ZXJwcmV0cworYmlvIHNlZ21lbnRzIG9yIHVzZXMgdGhlIGJsb2NrIGxheWVyIGVuZCpyZXF1ZXN0KiBmdW5jdGlvbnMgZm9yIGkvbworY29tcGxldGlvbi4gQWx0ZXJuYXRpdmVseSBvbmUgY291bGQgZGlyZWN0bHkgdXNlIHRoZSByZXF1ZXN0LT5idWZmZXIgZmllbGQgdG8KK3NwZWNpZnkgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLCBpZiB0aGUgZHJpdmVyIGV4cGVjdHMgYnVmZmVyCithZGRyZXNzZXMgcGFzc2VkIGluIHRoaXMgd2F5IGFuZCBpZ25vcmVzIGJpbyBlbnRyaWVzIGZvciB0aGUgcmVxdWVzdCB0eXBlCitpbnZvbHZlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgZHJpdmVyIHdvdWxkIG1vZGlmeSBhbmQgbWFuYWdlIHRoZQorcmVxdWVzdC0+YnVmZmVyLCByZXF1ZXN0LT5zZWN0b3IgYW5kIHJlcXVlc3QtPm5yX3NlY3RvcnMgb3IKK3JlcXVlc3QtPmN1cnJlbnRfbnJfc2VjdG9ycyBmaWVsZHMgaXRzZWxmIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBibG9jayBsYXllcgorZW5kX3JlcXVlc3Qgb3IgZW5kX3RoYXRfcmVxdWVzdF9maXJzdCBjb21wbGV0aW9uIGludGVyZmFjZXMuCisoU2VlIDIuMyBvciBEb2N1bWVudGF0aW9uL2Jsb2NrL3JlcXVlc3QudHh0IGZvciBhIGJyaWVmIGV4cGxhbmF0aW9uIG9mCit0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgZmllbGRzKQorCitbVEJEOiBlbmRfdGhhdF9yZXF1ZXN0X2xhc3Qgc2hvdWxkIGJlIHVzYWJsZSBldmVuIGluIHRoaXMgY2FzZTsKK1BlcmhhcHMgYW4gZW5kX3RoYXRfZGlyZWN0X3JlcXVlc3RfZmlyc3Qgcm91dGluZSBjb3VsZCBiZSBpbXBsZW1lbnRlZCB0byBtYWtlCitoYW5kbGluZyBkaXJlY3QgcmVxdWVzdHMgZWFzaWVyIGZvciBzdWNoIGRyaXZlcnM7IEFsc28gZm9yIGRyaXZlcnMgdGhhdAorZXhwZWN0IGJpb3MsIGEgaGVscGVyIGZ1bmN0aW9uIGNvdWxkIGJlIHByb3ZpZGVkIGZvciBzZXR0aW5nIHVwIGEgYmlvCitjb3JyZXNwb25kaW5nIHRvIGEgZGF0YSBidWZmZXJdCisKKzxKRU5TOiBJIGRvbnQgdW5kZXJzdGFuZCB0aGUgYWJvdmUsIHdoeSBpcyBlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0KCkgbm90Cit1c2FibGU/IE9yIF9sYXN0IGZvciB0aGF0IG1hdHRlci4gSSBtdXN0IGJlIG1pc3Npbmcgc29tZXRoaW5nPgorPFNVUDogV2hhdCBJIG1lYW50IGhlcmUgd2FzIHRoYXQgaWYgdGhlIHJlcXVlc3QgZG9lc24ndCBoYXZlIGEgYmlvLCB0aGVuCisgZW5kX3RoYXRfcmVxdWVzdF9maXJzdCBkb2Vzbid0IG1vZGlmeSBucl9zZWN0b3JzIG9yIGN1cnJlbnRfbnJfc2VjdG9ycywKKyBhbmQgaGVuY2UgY2FuJ3QgYmUgdXNlZCBmb3IgYWR2YW5jaW5nIHJlcXVlc3Qgc3RhdGUgc2V0dGluZ3Mgb24gdGhlCisgY29tcGxldGlvbiBvZiBwYXJ0aWFsIHRyYW5zZmVycy4gVGhlIGRyaXZlciBoYXMgdG8gbW9kaWZ5IHRoZXNlIGZpZWxkcyAKKyBkaXJlY3RseSBieSBoYW5kLgorIFRoaXMgaXMgYmVjYXVzZSBlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0IG9ubHkgaXRlcmF0ZXMgb3ZlciB0aGUgYmlvIGxpc3QsCisgYW5kIGFsd2F5cyByZXR1cm5zIDAgaWYgdGhlcmUgYXJlIG5vbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LgorIF9sYXN0IHdvcmtzIE9LIGluIHRoaXMgY2FzZSwgYW5kIGlzIG5vdCBhIHByb2JsZW0sIGFzIEkgbWVudGlvbmVkIGVhcmxpZXIKKz4KKworMS4zLjEgUHJlLWJ1aWx0IENvbW1hbmRzCisKK0EgcmVxdWVzdCBjYW4gYmUgY3JlYXRlZCB3aXRoIGEgcHJlLWJ1aWx0IGN1c3RvbSBjb21tYW5kICB0byBiZSBzZW50IGRpcmVjdGx5Cit0byB0aGUgZGV2aWNlLiBUaGUgY21kIGJsb2NrIGluIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBoYXMgcm9vbSBmb3IgZmlsbGluZworaW4gdGhlIGNvbW1hbmQgYnl0ZXMuIChpLmUgcnEtPmNtZCBpcyBub3cgMTYgYnl0ZXMgaW4gc2l6ZSwgYW5kIG1lYW50IGZvcgorY29tbWFuZCBwcmUtYnVpbGRpbmcsIGFuZCB0aGUgdHlwZSBvZiB0aGUgcmVxdWVzdCBpcyBub3cgaW5kaWNhdGVkCit0aHJvdWdoIHJxLT5mbGFncyBpbnN0ZWFkIG9mIHZpYSBycS0+Y21kKQorCitUaGUgcmVxdWVzdCBzdHJ1Y3R1cmUgZmxhZ3MgY2FuIGJlIHNldCB1cCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiByZXF1ZXN0CitpbiBzdWNoIGNhc2VzIChSRVFfUEM6IGRpcmVjdCBwYWNrZXQgY29tbWFuZCBwYXNzZWQgdG8gZHJpdmVyLCBSRVFfQkxPQ0tfUEM6CitwYWNrZXQgY29tbWFuZCBpc3N1ZWQgdmlhIGJsa19kb19ycSwgUkVRX1NQRUNJQUw6IHNwZWNpYWwgcmVxdWVzdCkuCisKK0l0IGNhbiBoZWxwIHRvIHByZS1idWlsZCBkZXZpY2UgY29tbWFuZHMgZm9yIHJlcXVlc3RzIGluIGFkdmFuY2UuCitEcml2ZXJzIGNhbiBub3cgc3BlY2lmeSBhIHJlcXVlc3QgcHJlcGFyZSBmdW5jdGlvbiAocS0+cHJlcF9ycV9mbikgdGhhdCB0aGUKK2Jsb2NrIGxheWVyIHdvdWxkIGludm9rZSB0byBwcmUtYnVpbGQgZGV2aWNlIGNvbW1hbmRzIGZvciBhIGdpdmVuIHJlcXVlc3QsCitvciBwZXJmb3JtIG90aGVyIHByZXBhcmF0b3J5IHByb2Nlc3NpbmcgZm9yIHRoZSByZXF1ZXN0LiBUaGlzIGlzIHJvdXRpbmUgaXMKK2NhbGxlZCBieSBlbHZfbmV4dF9yZXF1ZXN0KCksIGkuZS4gdHlwaWNhbGx5IGp1c3QgYmVmb3JlIHNlcnZpY2luZyBhIHJlcXVlc3QuCisoVGhlIHByZXBhcmUgZnVuY3Rpb24gd291bGQgbm90IGJlIGNhbGxlZCBmb3IgcmVxdWVzdHMgdGhhdCBoYXZlIFJFUV9ET05UUFJFUAorZW5hYmxlZCkKKworQXNpZGU6CisgIFByZS1idWlsZGluZyBjb3VsZCBwb3NzaWJseSBldmVuIGJlIGRvbmUgZWFybHksIGkuZSBiZWZvcmUgcGxhY2luZyB0aGUKKyAgcmVxdWVzdCBvbiB0aGUgcXVldWUsIHJhdGhlciB0aGFuIGNvbnN0cnVjdCB0aGUgY29tbWFuZCBvbiB0aGUgZmx5IGluIHRoZQorICBkcml2ZXIgd2hpbGUgc2VydmljaW5nIHRoZSByZXF1ZXN0IHF1ZXVlIHdoZW4gaXQgbWF5IGFmZmVjdCBsYXRlbmNpZXMgaW4KKyAgaW50ZXJydXB0IGNvbnRleHQgb3IgcmVzcG9uc2l2ZW5lc3MgaW4gZ2VuZXJhbC4gT25lIHdheSB0byBhZGQgZWFybHkKKyAgcHJlLWJ1aWxkaW5nIHdvdWxkIGJlIHRvIGRvIGl0IHdoZW5ldmVyIHdlIGZhaWwgdG8gbWVyZ2Ugb24gYSByZXF1ZXN0LgorICBOb3cgUkVRX05PTUVSR0UgaXMgc2V0IGluIHRoZSByZXF1ZXN0IGZsYWdzIHRvIHNraXAgdGhpcyBvbmUgaW4gdGhlIGZ1dHVyZSwKKyAgd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsIG5vdCBjaGFuZ2UgYmVmb3JlIHdlIGZlZWQgaXQgdG8gdGhlIGRldmljZS4gU28KKyAgdGhlIHByZS1idWlsZGVyIGhvb2sgY2FuIGJlIGludm9rZWQgdGhlcmUuCisKKworMi4gRmxleGlibGUgYW5kIGdlbmVyaWMgYnV0IG1pbmltYWxpc3QgaS9vIHN0cnVjdHVyZS9kZXNjcmlwdG9yLgorCisyLjEgUmVhc29uIGZvciBhIG5ldyBzdHJ1Y3R1cmUgYW5kIHJlcXVpcmVtZW50cyBhZGRyZXNzZWQKKworUHJpb3IgdG8gMi41LCBidWZmZXIgaGVhZHMgd2VyZSB1c2VkIGFzIHRoZSB1bml0IG9mIGkvbyBhdCB0aGUgZ2VuZXJpYyBibG9jaworbGF5ZXIsIGFuZCB0aGUgbG93IGxldmVsIHJlcXVlc3Qgc3RydWN0dXJlIHdhcyBhc3NvY2lhdGVkIHdpdGggYSBjaGFpbiBvZgorYnVmZmVyIGhlYWRzIGZvciBhIGNvbnRpZ3VvdXMgaS9vIHJlcXVlc3QuIFRoaXMgbGVkIHRvIGNlcnRhaW4gaW5lZmZpY2llbmNpZXMKK3doZW4gaXQgY2FtZSB0byBsYXJnZSBpL28gcmVxdWVzdHMgYW5kIHJlYWR2L3dyaXRldiBzdHlsZSBvcGVyYXRpb25zLCBhcyBpdAorZm9yY2VkIHN1Y2ggcmVxdWVzdHMgdG8gYmUgYnJva2VuIHVwIGludG8gc21hbGwgY2h1bmtzIGJlZm9yZSBiZWluZyBwYXNzZWQKK29uIHRvIHRoZSBnZW5lcmljIGJsb2NrIGxheWVyLCBvbmx5IHRvIGJlIG1lcmdlZCBieSB0aGUgaS9vIHNjaGVkdWxlcgord2hlbiB0aGUgdW5kZXJseWluZyBkZXZpY2Ugd2FzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIGkvbyBpbiBvbmUgc2hvdC4KK0Fsc28sIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBhcyBhbiBpL28gc3RydWN0dXJlIGZvciBpL29zIHRoYXQgZGlkbid0IG9yaWdpbmF0ZQorZnJvbSB0aGUgYnVmZmVyIGNhY2hlIHVuZWNlc3NhcmlseSBhZGRlZCB0byB0aGUgd2VpZ2h0IG9mIHRoZSBkZXNjcmlwdG9ycword2hpY2ggd2VyZSBnZW5lcmF0ZWQgZm9yIGVhY2ggc3VjaCBjaHVuay4KKworVGhlIGZvbGxvd2luZyB3ZXJlIHNvbWUgb2YgdGhlIGdvYWxzIGFuZCBleHBlY3RhdGlvbnMgY29uc2lkZXJlZCBpbiB0aGUKK3JlZGVzaWduIG9mIHRoZSBibG9jayBpL28gZGF0YSBzdHJ1Y3R1cmUgaW4gMi41LgorCitpLiAgU2hvdWxkIGJlIGFwcHJvcHJpYXRlIGFzIGEgZGVzY3JpcHRvciBmb3IgYm90aCByYXcgYW5kIGJ1ZmZlcmVkIGkvbyAgLQorICAgIGF2b2lkIGNhY2hlIHJlbGF0ZWQgZmllbGRzIHdoaWNoIGFyZSBpcnJlbGV2YW50IGluIHRoZSBkaXJlY3QvcGFnZSBpL28gcGF0aCwKKyAgICBvciBmaWxlc3lzdGVtIGJsb2NrIHNpemUgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyB3aGljaCBtYXkgbm90IGJlIHJlbGV2YW50CisgICAgZm9yIHJhdyBpL28uCitpaS4gQWJpbGl0eSB0byByZXByZXNlbnQgaGlnaC1tZW1vcnkgYnVmZmVycyAod2hpY2ggZG8gbm90IGhhdmUgYSB2aXJ0dWFsCisgICAgYWRkcmVzcyBtYXBwaW5nIGluIGtlcm5lbCBhZGRyZXNzIHNwYWNlKS4KK2lpaS5BYmlsaXR5IHRvIHJlcHJlc2VudCBsYXJnZSBpL29zIHcvbyB1bmVjZXNzYXJpbHkgYnJlYWtpbmcgdGhlbSB1cCAoaS5lCisgICAgZ3JlYXRlciB0aGFuIFBBR0VfU0laRSBjaHVua3MgaW4gb25lIHNob3QpCitpdi4gQXQgdGhlIHNhbWUgdGltZSwgYWJpbGl0eSB0byByZXRhaW4gaW5kZXBlbmRlbnQgaWRlbnRpdHkgb2YgaS9vcyBmcm9tCisgICAgZGlmZmVyZW50IHNvdXJjZXMgb3IgaS9vIHVuaXRzIHJlcXVpcmluZyBpbmRpdmlkdWFsIGNvbXBsZXRpb24gKGUuZy4gZm9yCisgICAgbGF0ZW5jeSByZWFzb25zKQordi4gIEFiaWxpdHkgdG8gcmVwcmVzZW50IGFuIGkvbyBpbnZvbHZpbmcgbXVsdGlwbGUgcGh5c2ljYWwgbWVtb3J5IHNlZ21lbnRzCisgICAgKGluY2x1ZGluZyBub24tcGFnZSBhbGlnbmVkIHBhZ2UgZnJhZ21lbnRzLCBhcyBzcGVjaWZpZWQgdmlhIHJlYWR2L3dyaXRldikKKyAgICB3aXRob3V0IHVuZWNlc3NhcmlseSBicmVha2luZyBpdCB1cCwgaWYgdGhlIHVuZGVybHlpbmcgZGV2aWNlIGlzIGNhcGFibGUgb2YKKyAgICBoYW5kbGluZyBpdC4KK3ZpLiBQcmVmZXJhYmx5IHNob3VsZCBiZSBiYXNlZCBvbiBhIG1lbW9yeSBkZXNjcmlwdG9yIHN0cnVjdHVyZSB0aGF0IGNhbiBiZQorICAgIHBhc3NlZCBhcm91bmQgZGlmZmVyZW50IHR5cGVzIG9mIHN1YnN5c3RlbXMgb3IgbGF5ZXJzLCBtYXliZSBldmVuCisgICAgbmV0d29ya2luZywgd2l0aG91dCBkdXBsaWNhdGlvbiBvciBleHRyYSBjb3BpZXMgb2YgZGF0YS9kZXNjcmlwdG9yIGZpZWxkcworICAgIHRoZW1zZWx2ZXMgaW4gdGhlIHByb2Nlc3MKK3ZpaS5BYmlsaXR5IHRvIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgb2Ygc3BsaXRzL21lcmdlcyBhcyB0aGUgc3RydWN0dXJlIHBhc3NlcworICAgIHRocm91Z2ggbGF5ZXJlZCBkcml2ZXJzIChsdm0sIG1kLCBldm1zKSwgd2l0aCBtaW5pbWFsIG92ZXJoZWFkLgorCitUaGUgc29sdXRpb24gd2FzIHRvIGRlZmluZSBhIG5ldyBzdHJ1Y3R1cmUgKGJpbykgIGZvciB0aGUgYmxvY2sgbGF5ZXIsCitpbnN0ZWFkIG9mIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBzdHJ1Y3R1cmUgKGJoKSBkaXJlY3RseSwgdGhlIGlkZWEgYmVpbmcKK2F2b2lkYW5jZSBvZiBzb21lIGFzc29jaWF0ZWQgYmFnZ2FnZSBhbmQgbGltaXRhdGlvbnMuIFRoZSBiaW8gc3RydWN0dXJlCitpcyB1bmlmb3JtbHkgdXNlZCBmb3IgYWxsIGkvbyBhdCB0aGUgYmxvY2sgbGF5ZXIgOyBpdCBmb3JtcyBhIHBhcnQgb2YgdGhlCitiaCBzdHJ1Y3R1cmUgZm9yIGJ1ZmZlcmVkIGkvbywgYW5kIGluIHRoZSBjYXNlIG9mIHJhdy9kaXJlY3QgaS9vIGtpb2J1ZnMgYXJlCittYXBwZWQgdG8gYmlvIHN0cnVjdHVyZXMuCisKKzIuMiBUaGUgYmlvIHN0cnVjdAorCitUaGUgYmlvIHN0cnVjdHVyZSB1c2VzIGEgdmVjdG9yIHJlcHJlc2VudGF0aW9uIHBvaW50aW5nIHRvIGFuIGFycmF5IG9mIHR1cGxlcworb2YgPHBhZ2UsIG9mZnNldCwgbGVuPiB0byBkZXNjcmliZSB0aGUgaS9vIGJ1ZmZlciwgYW5kIGhhcyB2YXJpb3VzIG90aGVyCitmaWVsZHMgZGVzY3JpYmluZyBpL28gcGFyYW1ldGVycyBhbmQgc3RhdGUgdGhhdCBuZWVkcyB0byBiZSBtYWludGFpbmVkIGZvcgorcGVyZm9ybWluZyB0aGUgaS9vLgorCitOb3RpY2UgdGhhdCB0aGlzIHJlcHJlc2VudGF0aW9uIG1lYW5zIHRoYXQgYSBiaW8gaGFzIG5vIHZpcnR1YWwgYWRkcmVzcworbWFwcGluZyBhdCBhbGwgKHVubGlrZSBidWZmZXIgaGVhZHMpLgorCitzdHJ1Y3QgYmlvX3ZlYyB7CisgICAgICAgc3RydWN0IHBhZ2UgICAgICpidl9wYWdlOworICAgICAgIHVuc2lnbmVkIHNob3J0ICBidl9sZW47CisgICAgICAgdW5zaWduZWQgc2hvcnQgIGJ2X29mZnNldDsKK307CisKKy8qCisgKiBtYWluIHVuaXQgb2YgSS9PIGZvciB0aGUgYmxvY2sgbGF5ZXIgYW5kIGxvd2VyIGxheWVycyAoaWUgZHJpdmVycykKKyAqLworc3RydWN0IGJpbyB7CisgICAgICAgc2VjdG9yX3QgICAgICAgICAgICBiaV9zZWN0b3I7CisgICAgICAgc3RydWN0IGJpbyAgICAgICAgICAqYmlfbmV4dDsgICAgLyogcmVxdWVzdCBxdWV1ZSBsaW5rICovCisgICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmlfYmRldjsJLyogdGFyZ2V0IGRldmljZSAqLworICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgYmlfZmxhZ3M7ICAgIC8qIHN0YXR1cywgY29tbWFuZCwgZXRjICovCisgICAgICAgdW5zaWduZWQgbG9uZyAgICAgICBiaV9ydzsgICAgICAgLyogbG93IGJpdHM6IHIvdywgaGlnaDogcHJpb3JpdHkgKi8KKworICAgICAgIHVuc2lnbmVkIGludAliaV92Y250OyAgICAgLyogaG93IG1heSBiaW9fdmVjJ3MgKi8KKyAgICAgICB1bnNpZ25lZCBpbnQJYmlfaWR4OwkJLyogY3VycmVudCBpbmRleCBpbnRvIGJpb192ZWMgYXJyYXkgKi8KKworICAgICAgIHVuc2lnbmVkIGludAliaV9zaXplOyAgICAgLyogdG90YWwgc2l6ZSBpbiBieXRlcyAqLworICAgICAgIHVuc2lnbmVkIHNob3J0IAliaV9waHlzX3NlZ21lbnRzOyAvKiBzZWdtZW50cyBhZnRlciBwaHlzYWRkciBjb2FsZXNjZSovCisgICAgICAgdW5zaWduZWQgc2hvcnQJYmlfaHdfc2VnbWVudHM7IC8qIHNlZ21lbnRzIGFmdGVyIERNQSByZW1hcHBpbmcgKi8KKyAgICAgICB1bnNpZ25lZCBpbnQJYmlfbWF4OwkgICAgIC8qIG1heCBiaW9fdmVjcyB3ZSBjYW4gaG9sZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgYXMgaW5kZXggaW50byBwb29sICovCisgICAgICAgc3RydWN0IGJpb192ZWMgICAqYmlfaW9fdmVjOyAgLyogdGhlIGFjdHVhbCB2ZWMgbGlzdCAqLworICAgICAgIGJpb19lbmRfaW9fdAkqYmlfZW5kX2lvOyAgLyogYmlfZW5kX2lvIChiaW8pICovCisgICAgICAgYXRvbWljX3QJCWJpX2NudDsJICAgICAvKiBwaW4gY291bnQ6IGZyZWUgd2hlbiBpdCBoaXRzIHplcm8gKi8KKyAgICAgICB2b2lkICAgICAgICAgICAgICpiaV9wcml2YXRlOworICAgICAgIGJpb19kZXN0cnVjdG9yX3QgKmJpX2Rlc3RydWN0b3I7IC8qIGJpX2Rlc3RydWN0b3IgKGJpbykgKi8KK307CisKK1dpdGggdGhpcyBtdWx0aXBhZ2UgYmlvIGRlc2lnbjoKKworLSBMYXJnZSBpL29zIGNhbiBiZSBzZW50IGRvd24gaW4gb25lIGdvIHVzaW5nIGEgYmlvX3ZlYyBsaXN0IGNvbnNpc3RpbmcKKyAgb2YgYW4gYXJyYXkgb2YgPHBhZ2UsIG9mZnNldCwgbGVuPiBmcmFnbWVudHMgKHNpbWlsYXIgdG8gdGhlIHdheSBmcmFnbWVudHMKKyAgYXJlIHJlcHJlc2VudGVkIGluIHRoZSB6ZXJvLWNvcHkgbmV0d29yayBjb2RlKQorLSBTcGxpdHRpbmcgb2YgYW4gaS9vIHJlcXVlc3QgYWNyb3NzIG11bHRpcGxlIGRldmljZXMgKGFzIGluIHRoZSBjYXNlIG9mCisgIGx2bSBvciByYWlkKSBpcyBhY2hpZXZlZCBieSBjbG9uaW5nIHRoZSBiaW8gKHdoZXJlIHRoZSBjbG9uZSBwb2ludHMgdG8KKyAgdGhlIHNhbWUgYmlfaW9fdmVjIGFycmF5LCBidXQgd2l0aCB0aGUgaW5kZXggYW5kIHNpemUgYWNjb3JkaW5nbHkgbW9kaWZpZWQpCistIEEgbGlua2VkIGxpc3Qgb2YgYmlvcyBpcyB1c2VkIGFzIGJlZm9yZSBmb3IgdW5yZWxhdGVkIG1lcmdlcyAoKikgLSB0aGlzCisgIGF2b2lkcyByZWFsbG9jcyBhbmQgbWFrZXMgaW5kZXBlbmRlbnQgY29tcGxldGlvbnMgZWFzaWVyIHRvIGhhbmRsZS4KKy0gQ29kZSB0aGF0IHRyYXZlcnNlcyB0aGUgcmVxIGxpc3QgbmVlZHMgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4KKyAgc2VnbWVudHMgb2YgYSByZXF1ZXN0IChiaW9fZm9yX2VhY2hfc2VnbWVudCkgYW5kIHRoZSBkaXN0aW5jdCBjb21wbGV0aW9uCisgIHVuaXRzL2Jpb3MgKHJxX2Zvcl9lYWNoX2JpbykuCistIERyaXZlcnMgd2hpY2ggY2FuJ3QgcHJvY2VzcyBhIGxhcmdlIGJpbyBpbiBvbmUgc2hvdCBjYW4gdXNlIHRoZSBiaV9pZHgKKyAgZmllbGQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbmV4dCBiaW9fdmVjIGVudHJ5IHRvIHByb2Nlc3MuCisgIChlLmcgYSAxTUIgYmlvX3ZlYyBuZWVkcyB0byBiZSBoYW5kbGVkIGluIG1heCAxMjhrQiBjaHVua3MgZm9yIElERSkKKyAgW1RCRDogU2hvdWxkIHByZWZlcmFibHkgYWxzbyBoYXZlIGEgYmlfdm9mZnNldCBhbmQgYmlfdmxlbiB0byBhdm9pZCBtb2RpZnlpbmcKKyAgIGJpX29mZnNldCBhbiBsZW4gZmllbGRzXQorCisoKikgdW5yZWxhdGVkIG1lcmdlcyAtLSBhIHJlcXVlc3QgZW5kcyB1cCBjb250YWluaW5nIHR3byBvciBtb3JlIGJpb3MgdGhhdAorICAgIGRpZG4ndCBvcmlnaW5hdGUgZnJvbSB0aGUgc2FtZSBwbGFjZS4KKworYmlfZW5kX2lvKCkgaS9vIGNhbGxiYWNrIGdldHMgY2FsbGVkIG9uIGkvbyBjb21wbGV0aW9uIG9mIHRoZSBlbnRpcmUgYmlvLgorCitBdCBhIGxvd2VyIGxldmVsLCBkcml2ZXJzIGJ1aWxkIGEgc2NhdHRlciBnYXRoZXIgbGlzdCBmcm9tIHRoZSBtZXJnZWQgYmlvcy4KK1RoZSBzY2F0dGVyIGdhdGhlciBsaXN0IGlzIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5IG9mIDxwYWdlLCBvZmZzZXQsIGxlbj4KK2VudHJpZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIGRtYSBhZGRyZXNzIG1hcHBpbmdzIGZpbGxlZCBpbiBhdCB0aGUKK2FwcHJvcHJpYXRlIHRpbWUuIEFzIGFuIG9wdGltaXphdGlvbiwgY29udGlndW91cyBwaHlzaWNhbCBwYWdlcyBjYW4gYmUKK2NvdmVyZWQgYnkgYSBzaW5nbGUgZW50cnkgd2hlcmUgPHBhZ2U+IHJlZmVycyB0byB0aGUgZmlyc3QgcGFnZSBhbmQgPGxlbj4KK2NvdmVycyB0aGUgcmFuZ2Ugb2YgcGFnZXMgKHVwdG8gMTYgY29udGlndW91cyBwYWdlcyBjb3VsZCBiZSBjb3ZlcmVkIHRoaXMKK3dheSkuIFRoZXJlIGlzIGEgaGVscGVyIHJvdXRpbmUgKGJsa19ycV9tYXBfc2cpIHdoaWNoIGRyaXZlcnMgY2FuIHVzZSB0byBidWlsZAordGhlIHNnIGxpc3QuCisKK05vdGU6IFJpZ2h0IG5vdyB0aGUgb25seSB1c2VyIG9mIGJpb3Mgd2l0aCBtb3JlIHRoYW4gb25lIHBhZ2UgaXMgbGxfcndfa2lvLAord2hpY2ggaW4gdHVybiBtZWFucyB0aGF0IG9ubHkgcmF3IEkvTyB1c2VzIGl0IChkaXJlY3QgaS9vIG1heSBub3Qgd29yaworcmlnaHQgbm93KS4gVGhlIGludGVudCBob3dldmVyIGlzIHRvIGVuYWJsZSBjbHVzdGVyaW5nIG9mIHBhZ2VzIGV0YyB0bworYmVjb21lIHBvc3NpYmxlLiBUaGUgcGFnZWJ1ZiBhYnN0cmFjdGlvbiBsYXllciBmcm9tIFNHSSBhbHNvIHVzZXMgbXVsdGktcGFnZQorYmlvcywgYnV0IHRoYXQgaXMgY3VycmVudGx5IG5vdCBpbmNsdWRlZCBpbiB0aGUgc3RvY2sgZGV2ZWxvcG1lbnQga2VybmVscy4KK1RoZSBzYW1lIGlzIHRydWUgb2YgQW5kcmV3IE1vcnRvbidzIHdvcmstaW4tcHJvZ3Jlc3MgbXVsdGlwYWdlIGJpbyB3cml0ZW91dCAKK2FuZCByZWFkYWhlYWQgcGF0Y2hlcy4KKworMi4zIENoYW5nZXMgaW4gdGhlIFJlcXVlc3QgU3RydWN0dXJlCisKK1RoZSByZXF1ZXN0IHN0cnVjdHVyZSBpcyB0aGUgc3RydWN0dXJlIHRoYXQgZ2V0cyBwYXNzZWQgZG93biB0byBsb3cgbGV2ZWwKK2RyaXZlcnMuIFRoZSBibG9jayBsYXllciBtYWtlX3JlcXVlc3QgZnVuY3Rpb24gYnVpbGRzIHVwIGEgcmVxdWVzdCBzdHJ1Y3R1cmUsCitwbGFjZXMgaXQgb24gdGhlIHF1ZXVlIGFuZCBpbnZva2VzIHRoZSBkcml2ZXJzIHJlcXVlc3RfZm4uIFRoZSBkcml2ZXIgbWFrZXMKK3VzZSBvZiBibG9jayBsYXllciBoZWxwZXIgcm91dGluZSBlbHZfbmV4dF9yZXF1ZXN0IHRvIHB1bGwgdGhlIG5leHQgcmVxdWVzdAorb2ZmIHRoZSBxdWV1ZS4gQ29udHJvbCBvciBkaWFnbm9zdGljIGZ1bmN0aW9ucyBtaWdodCBieXBhc3MgYmxvY2sgYW5kIGRpcmVjdGx5CitpbnZva2UgdW5kZXJseWluZyBkcml2ZXIgZW50cnkgcG9pbnRzIHBhc3NpbmcgaW4gYSBzcGVjaWFsbHkgY29uc3RydWN0ZWQKK3JlcXVlc3Qgc3RydWN0dXJlLgorCitPbmx5IHNvbWUgcmVsZXZhbnQgZmllbGRzIChtYWlubHkgdGhvc2Ugd2hpY2ggY2hhbmdlZCBvciBtYXkgYmUgcmVmZXJyZWQKK3RvIGluIHNvbWUgb2YgdGhlIGRpc2N1c3Npb24gaGVyZSkgYXJlIGxpc3RlZCBiZWxvdywgbm90IG5lY2Vzc2FyaWx5IGluCit0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBvY2N1ciBpbiB0aGUgc3RydWN0dXJlIChzZWUgaW5jbHVkZS9saW51eC9ibGtkZXYuaCkKK1JlZmVyIHRvIERvY3VtZW50YXRpb24vYmxvY2svcmVxdWVzdC50eHQgZm9yIGRldGFpbHMgYWJvdXQgYWxsIHRoZSByZXF1ZXN0CitzdHJ1Y3R1cmUgZmllbGRzIGFuZCBhIHF1aWNrIHJlZmVyZW5jZSBhYm91dCB0aGUgbGF5ZXJzIHdoaWNoIGFyZQorc3VwcG9zZWQgdG8gdXNlIG9yIG1vZGlmeSB0aG9zZSBmaWVsZHMuCisKK3N0cnVjdCByZXF1ZXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlbGlzdDsgIC8qIE5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBhY2Nlc3NlZCBieQorCQkJCQl0aGUgZHJpdmVyLgorCQkJCQlVc2VkIGJ5IHEtPmVsdl9uZXh0X3JlcXVlc3RfZm4KKwkJCQkJcnEtPnF1ZXVlIGlzIGdvbmUKKwkJCQkJKi8KKwkuCisJLgorCXVuc2lnbmVkIGNoYXIgY21kWzE2XTsgLyogcHJlYnVpbHQgY29tbWFuZCBkYXRhIGJsb2NrICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsgICAvKiBhbHNvIGluY2x1ZGVzIGVhcmxpZXIgcnEtPmNtZCBzZXR0aW5ncyAqLworCS4KKwkuCisJc2VjdG9yX3Qgc2VjdG9yOyAvKiB0aGlzIGZpZWxkIGlzIG5vdyBvZiB0eXBlIHNlY3Rvcl90IGluc3RlYWQgb2YgaW50CisJCQkgICAgcHJlcGFyYXRpb24gZm9yIDY0IGJpdCBzZWN0b3JzICovCisJLgorCS4KKworCS8qIE51bWJlciBvZiBzY2F0dGVyLWdhdGhlciBETUEgYWRkcitsZW4gcGFpcnMgYWZ0ZXIKKwkgKiBwaHlzaWNhbCBhZGRyZXNzIGNvYWxlc2NpbmcgaXMgcGVyZm9ybWVkLgorCSAqLworCXVuc2lnbmVkIHNob3J0IG5yX3BoeXNfc2VnbWVudHM7CisKKwkvKiBOdW1iZXIgb2Ygc2NhdHRlci1nYXRoZXIgYWRkcitsZW4gcGFpcnMgYWZ0ZXIKKwkgKiBwaHlzaWNhbCBhbmQgRE1BIHJlbWFwcGluZyBoYXJkd2FyZSBjb2FsZXNjaW5nIGlzIHBlcmZvcm1lZC4KKwkgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2Ygc2NhdHRlci1nYXRoZXIgZW50cmllcyB0aGUgZHJpdmVyCisJICogd2lsbCBhY3R1YWxseSBoYXZlIHRvIGRlYWwgd2l0aCBhZnRlciBETUEgbWFwcGluZyBpcyBkb25lLgorCSAqLworCXVuc2lnbmVkIHNob3J0IG5yX2h3X3NlZ21lbnRzOworCisJLyogVmFyaW91cyBzZWN0b3IgY291bnRzICovCisJdW5zaWduZWQgbG9uZyBucl9zZWN0b3JzOyAgLyogbm8uIG9mIHNlY3RvcnMgbGVmdDogZHJpdmVyIG1vZGlmaWFibGUgKi8KKwl1bnNpZ25lZCBsb25nIGhhcmRfbnJfc2VjdG9yczsgIC8qIGJsb2NrIGludGVybmFsIGNvcHkgb2YgYWJvdmUgKi8KKwl1bnNpZ25lZCBpbnQgY3VycmVudF9ucl9zZWN0b3JzOyAvKiBuby4gb2Ygc2VjdG9ycyBsZWZ0IGluIHRoZQorCQkJCQkgICBjdXJyZW50IHNlZ21lbnQ6ZHJpdmVyIG1vZGlmaWFibGUgKi8KKwl1bnNpZ25lZCBsb25nIGhhcmRfY3VyX3NlY3RvcnM7IC8qIGJsb2NrIGludGVybmFsIGNvcHkgb2YgdGhlIGFib3ZlICovCisJLgorCS4KKwlpbnQgdGFnOwkvKiBjb21tYW5kIHRhZyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCAqLworCXZvaWQgKnNwZWNpYWw7ICAvKiBzYW1lIGFzIGJlZm9yZSAqLworCWNoYXIgKmJ1ZmZlcjsgICAvKiB2YWxpZCBvbmx5IGZvciBsb3cgbWVtb3J5IGJ1ZmZlcnMgdXB0bworCQkJIGN1cnJlbnRfbnJfc2VjdG9ycyAqLworCS4KKwkuCisJc3RydWN0IGJpbyAqYmlvLCAqYmlvdGFpbDsgIC8qIGJpbyBsaXN0IGluc3RlYWQgb2YgYmggKi8KKwlzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybDsKK30KKwkKK1NlZSB0aGUgcnFfZmxhZ19iaXRzIGRlZmluaXRpb25zIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgdmFyaW91cyBmbGFncworYXZhaWxhYmxlLiBTb21lIGJpdHMgYXJlIHVzZWQgYnkgdGhlIGJsb2NrIGxheWVyIG9yIGkvbyBzY2hlZHVsZXIuCisJCitUaGUgYmVoYXZpb3VyIG9mIHRoZSB2YXJpb3VzIHNlY3RvciBjb3VudHMgYXJlIGFsbW9zdCB0aGUgc2FtZSBhcyBiZWZvcmUsCitleGNlcHQgdGhhdCBzaW5jZSB3ZSBoYXZlIG11bHRpLXNlZ21lbnQgYmlvcywgY3VycmVudF9ucl9zZWN0b3JzIHJlZmVycwordG8gdGhlIG51bWJlcnMgb2Ygc2VjdG9ycyBpbiB0aGUgY3VycmVudCBzZWdtZW50IGJlaW5nIHByb2Nlc3NlZCB3aGljaCBjb3VsZAorYmUgb25lIG9mIHRoZSBtYW55IHNlZ21lbnRzIGluIHRoZSBjdXJyZW50IGJpbyAoaS5lIGkvbyBjb21wbGV0aW9uIHVuaXQpLgorVGhlIG5yX3NlY3RvcnMgdmFsdWUgcmVmZXJzIHRvIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycyBpbiB0aGUgd2hvbGUKK3JlcXVlc3QgdGhhdCByZW1haW4gdG8gYmUgdHJhbnNmZXJyZWQgKG5vIGNoYW5nZSkuIFRoZSBwdXJwb3NlIG9mIHRoZQoraGFyZF94eHggdmFsdWVzIGlzIGZvciBibG9jayB0byByZW1lbWJlciB0aGVzZSBjb3VudHMgZXZlcnkgdGltZSBpdCBoYW5kcworb3ZlciB0aGUgcmVxdWVzdCB0byB0aGUgZHJpdmVyLiBUaGVzZSB2YWx1ZXMgYXJlIHVwZGF0ZWQgYnkgYmxvY2sgb24KK2VuZF90aGF0X3JlcXVlc3RfZmlyc3QsIGkuZS4gZXZlcnkgdGltZSB0aGUgZHJpdmVyIGNvbXBsZXRlcyBhIHBhcnQgb2YgdGhlCit0cmFuc2ZlciBhbmQgaW52b2tlcyBibG9jayBlbmQqcmVxdWVzdCBoZWxwZXJzIHRvIG1hcmsgdGhpcy4gVGhlCitkcml2ZXIgc2hvdWxkIG5vdCBtb2RpZnkgdGhlc2UgdmFsdWVzLiBUaGUgYmxvY2sgbGF5ZXIgc2V0cyB1cCB0aGUKK25yX3NlY3RvcnMgYW5kIGN1cnJlbnRfbnJfc2VjdG9ycyBmaWVsZHMgKGJhc2VkIG9uIHRoZSBjb3JyZXNwb25kaW5nCitoYXJkX3h4eCB2YWx1ZXMgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQpIGFuZCB1cGRhdGVzIGl0IG9uCitldmVyeSB0cmFuc2ZlciB0aGF0IGludm9rZXMgZW5kX3RoYXRfcmVxdWVzdF9maXJzdC4gSXQgZG9lcyB0aGUgc2FtZSBmb3IgdGhlCitidWZmZXIsIGJpbywgYmlvLT5iaV9pZHggZmllbGRzIHRvby4KKworVGhlIGJ1ZmZlciBmaWVsZCBpcyBqdXN0IGEgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgb2YgdGhlIGN1cnJlbnQgc2VnbWVudAorb2YgdGhlIGkvbyBidWZmZXIgaW4gY2FzZXMgd2hlcmUgdGhlIGJ1ZmZlciByZXNpZGVzIGluIGxvdy1tZW1vcnkuIEZvciBoaWdoCittZW1vcnkgaS9vLCB0aGlzIGZpZWxkIGlzIG5vdCB2YWxpZCBhbmQgbXVzdCBub3QgYmUgdXNlZCBieSBkcml2ZXJzLgorCitDb2RlIHRoYXQgc2V0cyB1cCBpdHMgb3duIHJlcXVlc3Qgc3RydWN0dXJlcyBhbmQgcGFzc2VzIHRoZW0gZG93biB0bworYSBkcml2ZXIgbmVlZHMgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbnRlcm9wZXJhdGlvbiB3aXRoIHRoZSBibG9jayBsYXllciBoZWxwZXIKK2Z1bmN0aW9ucyB3aGljaCB0aGUgZHJpdmVyIHVzZXMuIChTZWN0aW9uIDEuMykKKworMy4gVXNpbmcgYmlvcworCiszLjEgU2V0dXAvVGVhcmRvd24KKworVGhlcmUgYXJlIHJvdXRpbmVzIGZvciBtYW5hZ2luZyB0aGUgYWxsb2NhdGlvbiwgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgYW5kCitmcmVlaW5nIG9mIGJpb3MgKGJpb19hbGxvYywgYmlvX2dldCwgYmlvX3B1dCkuCisKK1RoaXMgbWFrZXMgdXNlIG9mIEluZ28gTW9sbmFyJ3MgbWVtcG9vbCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggZW5hYmxlcworc3Vic3lzdGVtcyBsaWtlIGJpbyB0byBtYWludGFpbiB0aGVpciBvd24gcmVzZXJ2ZSBtZW1vcnkgcG9vbHMgZm9yIGd1YXJhbnRlZWQKK2RlYWRsb2NrLWZyZWUgYWxsb2NhdGlvbnMgZHVyaW5nIGV4dHJlbWUgVk0gbG9hZC4gRm9yIGV4YW1wbGUsIHRoZSBWTQorc3Vic3lzdGVtIG1ha2VzIHVzZSBvZiB0aGUgYmxvY2sgbGF5ZXIgdG8gd3JpdGVvdXQgZGlydHkgcGFnZXMgaW4gb3JkZXIgdG8gYmUKK2FibGUgdG8gZnJlZSB1cCBtZW1vcnkgc3BhY2UsIGEgY2FzZSB3aGljaCBuZWVkcyBjYXJlZnVsIGhhbmRsaW5nLiBUaGUKK2FsbG9jYXRpb24gbG9naWMgZHJhd3MgZnJvbSB0aGUgcHJlYWxsb2NhdGVkIGVtZXJnZW5jeSByZXNlcnZlIGluIHNpdHVhdGlvbnMKK3doZXJlIGl0IGNhbm5vdCBhbGxvY2F0ZSB0aHJvdWdoIG5vcm1hbCBtZWFucy4gSWYgdGhlIHBvb2wgaXMgZW1wdHkgYW5kIGl0CitjYW4gd2FpdCwgdGhlbiBpdCB3b3VsZCB0cmlnZ2VyIGFjdGlvbiB0aGF0IHdvdWxkIGhlbHAgZnJlZSB1cCBtZW1vcnkgb3IKK3JlcGxlbmlzaCB0aGUgcG9vbCAod2l0aG91dCBkZWFkbG9ja2luZykgYW5kIHdhaXQgZm9yIGF2YWlsYWJpbGl0eSBpbiB0aGUgcG9vbC4KK0lmIGl0IGlzIGluIElSUSBjb250ZXh0LCBhbmQgaGVuY2Ugbm90IGluIGEgcG9zaXRpb24gdG8gZG8gdGhpcywgYWxsb2NhdGlvbgorY291bGQgZmFpbCBpZiB0aGUgcG9vbCBpcyBlbXB0eS4gSW4gZ2VuZXJhbCBtZW1wb29sIGFsd2F5cyBmaXJzdCB0cmllcyB0bworcGVyZm9ybSBhbGxvY2F0aW9uIHdpdGhvdXQgaGF2aW5nIHRvIHdhaXQsIGV2ZW4gaWYgaXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZQorcG9vbCBhcyBsb25nIGl0IGlzIG5vdCBsZXNzIHRoYXQgNTAlIGZ1bGwuCisKK09uIGEgZnJlZSwgbWVtb3J5IGlzIHJlbGVhc2VkIHRvIHRoZSBwb29sIG9yIGRpcmVjdGx5IGZyZWVkIGRlcGVuZGluZyBvbgordGhlIGN1cnJlbnQgYXZhaWxhYmlsaXR5IGluIHRoZSBwb29sLiBUaGUgbWVtcG9vbCBpbnRlcmZhY2UgbGV0cyB0aGUKK3N1YnN5c3RlbSBzcGVjaWZ5IHRoZSByb3V0aW5lcyB0byBiZSB1c2VkIGZvciBub3JtYWwgYWxsb2MgYW5kIGZyZWUuIEluIHRoZQorY2FzZSBvZiBiaW8sIHRoZXNlIHJvdXRpbmVzIG1ha2UgdXNlIG9mIHRoZSBzdGFuZGFyZCBzbGFiIGFsbG9jYXRvci4KKworVGhlIGNhbGxlciBvZiBiaW9fYWxsb2MgaXMgZXhwZWN0ZWQgdG8gdGFrZW4gY2VydGFpbiBzdGVwcyB0byBhdm9pZAorZGVhZGxvY2tzLCBlLmcuIGF2b2lkIHRyeWluZyB0byBhbGxvY2F0ZSBtb3JlIG1lbW9yeSBmcm9tIHRoZSBwb29sIHdoaWxlCithbHJlYWR5IGhvbGRpbmcgbWVtb3J5IG9idGFpbmVkIGZyb20gdGhlIHBvb2wuCitbVEJEOiBUaGlzIGlzIGEgcG90ZW50aWFsIGlzc3VlLCB0aG91Z2ggYSByYXJlIHBvc3NpYmlsaXR5CisgaW4gdGhlIGJvdW5jZSBiaW8gYWxsb2NhdGlvbiB0aGF0IGhhcHBlbnMgaW4gdGhlIGN1cnJlbnQgY29kZSwgc2luY2UKKyBpdCBlbmRzIHVwIGFsbG9jYXRpbmcgYSBzZWNvbmQgYmlvIGZyb20gdGhlIHNhbWUgcG9vbCB3aGlsZQorIGhvbGRpbmcgdGhlIG9yaWdpbmFsIGJpbyBdCisKK01lbW9yeSBhbGxvY2F0ZWQgZnJvbSB0aGUgcG9vbCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayB3aXRoaW4gYSBsaW1pdGVkCithbW91bnQgb2YgdGltZSAoaW4gdGhlIGNhc2Ugb2YgYmlvLCB0aGF0IHdvdWxkIGJlIGFmdGVyIHRoZSBpL28gaXMgY29tcGxldGVkKS4KK1RoaXMgZW5zdXJlcyB0aGF0IGlmIHBhcnQgb2YgdGhlIHBvb2wgaGFzIGJlZW4gdXNlZCB1cCwgc29tZSB3b3JrIChpbiB0aGlzCitjYXNlIGkvbykgbXVzdCBhbHJlYWR5IGJlIGluIHByb2dyZXNzIGFuZCBtZW1vcnkgd291bGQgYmUgYXZhaWxhYmxlIHdoZW4gaXQKK2lzIG92ZXIuIElmIGFsbG9jYXRpbmcgZnJvbSBtdWx0aXBsZSBwb29scyBpbiB0aGUgc2FtZSBjb2RlIHBhdGgsIHRoZSBvcmRlcgorb3IgaGllcmFyY2h5IG9mIGFsbG9jYXRpb24gbmVlZHMgdG8gYmUgY29uc2lzdGVudCwganVzdCB0aGUgd2F5IG9uZSBkZWFscword2l0aCBtdWx0aXBsZSBsb2Nrcy4KKworVGhlIGJpb19hbGxvYyByb3V0aW5lIGFsc28gbmVlZHMgdG8gYWxsb2NhdGUgdGhlIGJpb192ZWNfbGlzdCAoYnZlY19hbGxvYygpKQorZm9yIGEgbm9uLWNsb25lIGJpby4gVGhlcmUgYXJlIHRoZSA2IHBvb2xzIHNldHVwIGZvciBkaWZmZXJlbnQgc2l6ZSBiaW92ZWNzLAorc28gYmlvX2FsbG9jKGdmcF9tYXNrLCBucl9pb3ZlY3MpIHdpbGwgYWxsb2NhdGUgYSB2ZWNfbGlzdCBvZiB0aGUKK2dpdmVuIHNpemUgZnJvbSB0aGVzZSBzbGFicy4KKworVGhlIGJpX2Rlc3RydWN0b3IoKSByb3V0aW5lIHRha2VzIGludG8gYWNjb3VudCB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIGJpbworaGF2aW5nIG9yaWdpbmF0ZWQgZnJvbSBhIGRpZmZlcmVudCBzb3VyY2UgKHNlZSBsYXRlciBkaXNjdXNzaW9ucyBvbgorbi93IHRvIGJsb2NrIHRyYW5zZmVycyBhbmQga3ZlY19jYikKKworVGhlIGJpb19nZXQoKSByb3V0aW5lIG1heSBiZSB1c2VkIHRvIGhvbGQgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIGEgYmlvIHByaW9yCit0byBpL28gc3VibWlzc2lvbiwgaWYgdGhlIGJpbyBmaWVsZHMgYXJlIGxpa2VseSB0byBiZSBhY2Nlc3NlZCBhZnRlciB0aGUKK2kvbyBpcyBpc3N1ZWQgKHNpbmNlIHRoZSBiaW8gbWF5IG90aGVyd2lzZSBnZXQgZnJlZWQgaW4gY2FzZSBpL28gY29tcGxldGlvbgoraGFwcGVucyBpbiB0aGUgbWVhbnRpbWUpLgorCitUaGUgYmlvX2Nsb25lKCkgcm91dGluZSBtYXkgYmUgdXNlZCB0byBkdXBsaWNhdGUgYSBiaW8sIHdoZXJlIHRoZSBjbG9uZQorc2hhcmVzIHRoZSBiaW9fdmVjX2xpc3Qgd2l0aCB0aGUgb3JpZ2luYWwgYmlvIChpLmUuIGJvdGggcG9pbnQgdG8gdGhlCitzYW1lIGJpb192ZWNfbGlzdCkuIFRoaXMgd291bGQgdHlwaWNhbGx5IGJlIHVzZWQgZm9yIHNwbGl0dGluZyBpL28gcmVxdWVzdHMKK2luIGx2bSBvciBtZC4KKworMy4yIEdlbmVyaWMgYmlvIGhlbHBlciBSb3V0aW5lcworCiszLjIuMSBUcmF2ZXJzaW5nIHNlZ21lbnRzIGFuZCBjb21wbGV0aW9uIHVuaXRzIGluIGEgcmVxdWVzdAorCitUaGUgbWFjcm9zIGJpb19mb3JfZWFjaF9zZWdtZW50KCkgYW5kIHJxX2Zvcl9lYWNoX2JpbygpIHNob3VsZCBiZSB1c2VkIGZvcgordHJhdmVyc2luZyB0aGUgYmlvcyBpbiB0aGUgcmVxdWVzdCBsaXN0IChkcml2ZXJzIHNob3VsZCBhdm9pZCBkaXJlY3RseQordHJ5aW5nIHRvIGRvIGl0IHRoZW1zZWx2ZXMpLiBVc2luZyB0aGVzZSBoZWxwZXJzIHNob3VsZCBhbHNvIG1ha2UgaXQgZWFzaWVyCit0byBjb3BlIHdpdGggYmxvY2sgY2hhbmdlcyBpbiB0aGUgZnV0dXJlLgorCisJcnFfZm9yX2VhY2hfYmlvKGJpbywgcnEpCisJCWJpb19mb3JfZWFjaF9zZWdtZW50KGJpb192ZWMsIGJpbywgaSkKKwkJCS8qIGJpb192ZWMgaXMgbm93IGN1cnJlbnQgc2VnbWVudCAqLworCitJL08gY29tcGxldGlvbiBjYWxsYmFja3MgYXJlIHBlci1iaW8gcmF0aGVyIHRoYW4gcGVyLXNlZ21lbnQsIHNvIGRyaXZlcnMKK3RoYXQgdHJhdmVyc2UgYmlvIGNoYWlucyBvbiBjb21wbGV0aW9uIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIERyaXZlcnMKK3doaWNoIGRvbid0IG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNlZ21lbnRzIGFuZCBjb21wbGV0aW9uIHVuaXRzIHdvdWxkCituZWVkIHRvIGJlIHJlb3JnYW5pemVkIHRvIHN1cHBvcnQgbXVsdGktc2VnbWVudCBiaW9zLgorCiszLjIuMiBTZXR0aW5nIHVwIERNQSBzY2F0dGVybGlzdHMKKworVGhlIGJsa19ycV9tYXBfc2coKSBoZWxwZXIgcm91dGluZSB3b3VsZCBiZSB1c2VkIGZvciBzZXR0aW5nIHVwIHNjYXR0ZXIKK2dhdGhlciBsaXN0cyBmcm9tIGEgcmVxdWVzdCwgc28gYSBkcml2ZXIgbmVlZCBub3QgZG8gaXQgb24gaXRzIG93bi4KKworCW5yX3NlZ21lbnRzID0gYmxrX3JxX21hcF9zZyhxLCBycSwgc2NhdHRlcmxpc3QpOworCitUaGUgaGVscGVyIHJvdXRpbmUgcHJvdmlkZXMgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiB3aGljaCBtYWtlcyBpdCBlYXNpZXIKK3RvIG1vZGlmeSB0aGUgaW50ZXJuYWxzIG9mIHJlcXVlc3QgdG8gc2NhdHRlcmxpc3QgY29udmVyc2lvbiBkb3duIHRoZSBsaW5lCit3aXRob3V0IGJyZWFraW5nIGRyaXZlcnMuIFRoZSBibGtfcnFfbWFwX3NnIHJvdXRpbmUgdGFrZXMgY2FyZSBvZiBzZXZlcmFsCit0aGluZ3MgbGlrZSBjb2xsYXBzaW5nIHBoeXNpY2FsbHkgY29udGlndW91cyBzZWdtZW50cyAoaWYgUVVFVUVfRkxBR19DTFVTVEVSCitpcyBzZXQpIGFuZCBjb3JyZWN0IHNlZ21lbnQgYWNjb3VudGluZyB0byBhdm9pZCBleGNlZWRpbmcgdGhlIGxpbWl0cyB3aGljaAordGhlIGkvbyBoYXJkd2FyZSBjYW4gaGFuZGxlLCBiYXNlZCBvbiB2YXJpb3VzIHF1ZXVlIHByb3BlcnRpZXMuCisKKy0gUHJldmVudHMgYSBjbHVzdGVyZWQgc2VnbWVudCBmcm9tIGNyb3NzaW5nIGEgNEdCIG1lbSBib3VuZGFyeQorLSBBdm9pZHMgYnVpbGRpbmcgc2VnbWVudHMgdGhhdCB3b3VsZCBleGNlZWQgdGhlIG51bWJlciBvZiBwaHlzaWNhbAorICBtZW1vcnkgc2VnbWVudHMgdGhhdCB0aGUgZHJpdmVyIGNhbiBoYW5kbGUgKHBoeXNfc2VnbWVudHMpIGFuZCB0aGUKKyAgbnVtYmVyIHRoYXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FuIGhhbmRsZSBhdCBvbmNlLCBhY2NvdW50aW5nIGZvcgorICBETUEgcmVtYXBwaW5nIChod19zZWdtZW50cykgIChpLmUuIElPTU1VIGF3YXJlIGxpbWl0cykuCisKK1JvdXRpbmVzIHdoaWNoIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIGNhbiB1c2UgdG8gc2V0IHVwIHRoZSBzZWdtZW50IGxpbWl0czoKKworYmxrX3F1ZXVlX21heF9od19zZWdtZW50cygpIDogU2V0cyBhbiB1cHBlciBsaW1pdCBvZiB0aGUgbWF4aW11bSBudW1iZXIgb2YKK2h3IGRhdGEgc2VnbWVudHMgaW4gYSByZXF1ZXN0IChpLmUuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhZGRyZXNzL2xlbmd0aAorcGFpcnMgdGhlIGhvc3QgYWRhcHRlciBjYW4gYWN0dWFsbHkgaGFuZCB0byB0aGUgZGV2aWNlIGF0IG9uY2UpCisKK2Jsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cygpIDogU2V0cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIKK29mIHBoeXNpY2FsIGRhdGEgc2VnbWVudHMgaW4gYSByZXF1ZXN0IChpLmUuIHRoZSBsYXJnZXN0IHNpemVkIHNjYXR0ZXIgbGlzdAorYSBkcml2ZXIgY291bGQgaGFuZGxlKQorCiszLjIuMyBJL08gY29tcGxldGlvbgorCitUaGUgZXhpc3RpbmcgZ2VuZXJpYyBibG9jayBsYXllciBoZWxwZXIgcm91dGluZXMgZW5kX3JlcXVlc3QsCitlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0IGFuZCBlbmRfdGhhdF9yZXF1ZXN0X2xhc3QgY2FuIGJlIHVzZWQgZm9yIGkvbworY29tcGxldGlvbiAoYW5kIHNldHRpbmcgdGhpbmdzIHVwIHNvIHRoZSByZXN0IG9mIHRoZSBpL28gb3IgdGhlIG5leHQKK3JlcXVlc3QgY2FuIGJlIGtpY2tlZCBvZikgYXMgYmVmb3JlLiBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbXVsdGktcGFnZQorYmlvIHN1cHBvcnQsIGVuZF90aGF0X3JlcXVlc3RfZmlyc3QgcmVxdWlyZXMgYW4gYWRkaXRpb25hbCBhcmd1bWVudCBpbmRpY2F0aW5nCit0aGUgbnVtYmVyIG9mIHNlY3RvcnMgY29tcGxldGVkLgorCiszLjIuNCBJbXBsaWNhdGlvbnMgZm9yIGRyaXZlcnMgdGhhdCBkbyBub3QgaW50ZXJwcmV0IGJpb3MgKGRvbid0IGhhbmRsZQorIG11bHRpcGxlIHNlZ21lbnRzKQorCitEcml2ZXJzIHRoYXQgZG8gbm90IGludGVycHJldCBiaW9zIGUuZyB0aG9zZSB3aGljaCBkbyBub3QgaGFuZGxlIG11bHRpcGxlCitzZWdtZW50cyBhbmQgZG8gbm90IHN1cHBvcnQgaS9vIGludG8gaGlnaCBtZW1vcnkgYWRkcmVzc2VzIChyZXF1aXJlIGJvdW5jZQorYnVmZmVycykgYW5kIGV4cGVjdCBvbmx5IHZpcnR1YWxseSBtYXBwZWQgYnVmZmVycywgY2FuIGFjY2VzcyB0aGUgcnEtPmJ1ZmZlcgorZmllbGQuIEFzIGJlZm9yZSB0aGUgZHJpdmVyIHNob3VsZCB1c2UgY3VycmVudF9ucl9zZWN0b3JzIHRvIGRldGVybWluZSB0aGUKK3NpemUgb2YgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGN1cnJlbnQgc2VnbWVudCAodGhhdCBpcyB0aGUgbWF4aW11bSBpdCBjYW4KK3RyYW5zZmVyIGluIG9uZSBnbyB1bmxlc3MgaXQgaW50ZXJwcmV0cyBzZWdtZW50cyksIGFuZCByZWx5IG9uIHRoZSBibG9jayBsYXllcgorZW5kX3JlcXVlc3QsIG9yIGVuZF90aGF0X3JlcXVlc3RfZmlyc3QvbGFzdCB0byB0YWtlIGNhcmUgb2YgYWxsIGFjY291bnRpbmcKK2FuZCB0cmFuc3BhcmVudCBtYXBwaW5nIG9mIHRoZSBuZXh0IGJpbyBzZWdtZW50IHdoZW4gYSBzZWdtZW50IGJvdW5kYXJ5CitpcyBjcm9zc2VkIG9uIGNvbXBsZXRpb24gb2YgYSB0cmFuc2Zlci4gKFRoZSBlbmQqcmVxdWVzdCogZnVuY3Rpb25zIHNob3VsZAorYmUgdXNlZCBpZiBvbmx5IGlmIHRoZSByZXF1ZXN0IGhhcyBjb21lIGRvd24gZnJvbSBibG9jay9iaW8gcGF0aCwgbm90IGZvcgorZGlyZWN0IGFjY2VzcyByZXF1ZXN0cyB3aGljaCBvbmx5IHNwZWNpZnkgcnEtPmJ1ZmZlciB3aXRob3V0IGEgdmFsaWQgcnEtPmJpbykKKworMy4yLjUgR2VuZXJpYyByZXF1ZXN0IGNvbW1hbmQgdGFnZ2luZworCiszLjIuNS4xIFRhZyBoZWxwZXJzCisKK0Jsb2NrIG5vdyBvZmZlcnMgc29tZSBzaW1wbGUgZ2VuZXJpYyBmdW5jdGlvbmFsaXR5IHRvIGhlbHAgc3VwcG9ydCBjb21tYW5kCitxdWV1ZWluZyAodHlwaWNhbGx5IGtub3duIGFzIHRhZ2dlZCBjb21tYW5kIHF1ZXVlaW5nKSwgaWUgbWFuYWdlIG1vcmUgdGhhbgorb25lIG91dHN0YW5kaW5nIGNvbW1hbmQgb24gYSBxdWV1ZSBhdCBhbnkgZ2l2ZW4gdGltZS4KKworCWJsa19xdWV1ZV9pbml0X3RhZ3MocmVxdWVzdF9xdWV1ZV90ICpxLCBpbnQgZGVwdGgpCisKKwlJbml0aWFsaXplIGludGVybmFsIGNvbW1hbmQgdGFnZ2luZyBzdHJ1Y3R1cmVzIGZvciBhIG1heGltdW0KKwlkZXB0aCBvZiAnZGVwdGgnLgorCisJYmxrX3F1ZXVlX2ZyZWVfdGFncygocmVxdWVzdF9xdWV1ZV90ICpxKQorCisJVGVhcmRvd24gdGFnIGluZm8gYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWV1ZS4gVGhpcyB3aWxsIGJlIGRvbmUKKwlhdXRvbWF0aWNhbGx5IGJ5IGJsb2NrIGlmIGJsa19xdWV1ZV9jbGVhbnVwKCkgaXMgY2FsbGVkIG9uIGEgcXVldWUKKwl0aGF0IGlzIHVzaW5nIHRhZ2dpbmcuCisKK1RoZSBhYm92ZSBhcmUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgbWFuYWdlbWVudCwgdGhlIG1haW4gaGVscGVycyBkdXJpbmcKK25vcm1hbCBvcGVyYXRpb25zIGFyZToKKworCWJsa19xdWV1ZV9zdGFydF90YWcocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCisKKwlTdGFydCB0YWdnZWQgb3BlcmF0aW9uIGZvciB0aGlzIHJlcXVlc3QuIEEgZnJlZSB0YWcgbnVtYmVyIGJldHdlZW4KKwkwIGFuZCAnZGVwdGgnIGlzIGFzc2lnbmVkIHRvIHRoZSByZXF1ZXN0IChycS0+dGFnIGhvbGRzIHRoaXMgbnVtYmVyKSwKKwlhbmQgJ3JxJyBpcyBhZGRlZCB0byB0aGUgaW50ZXJuYWwgdGFnIG1hbmFnZW1lbnQuIElmIHRoZSBtYXhpbXVtIGRlcHRoCisJZm9yIHRoaXMgcXVldWUgaXMgYWxyZWFkeSBhY2hpZXZlZCAob3IgaWYgdGhlIHRhZyB3YXNuJ3Qgc3RhcnRlZCBmb3IKKwlzb21lIG90aGVyIHJlYXNvbiksIDEgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSAwIGlzIHJldHVybmVkLgorCisJYmxrX3F1ZXVlX2VuZF90YWcocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCisKKwlFbmQgdGFnZ2VkIG9wZXJhdGlvbiBvbiB0aGlzIHJlcXVlc3QuICdycScgaXMgcmVtb3ZlZCBmcm9tIHRoZSBpbnRlcm5hbAorCWJvb2sga2VlcGluZyBzdHJ1Y3R1cmVzLgorCitUbyBtaW5pbWl6ZSBzdHJ1Y3QgcmVxdWVzdCBhbmQgcXVldWUgb3ZlcmhlYWQsIHRoZSB0YWcgaGVscGVycyB1dGlsaXplIHNvbWUKK29mIHRoZSBzYW1lIHJlcXVlc3QgbWVtYmVycyB0aGF0IGFyZSB1c2VkIGZvciBub3JtYWwgcmVxdWVzdCBxdWV1ZSBtYW5hZ2VtZW50LgorVGhpcyBtZWFucyB0aGF0IGEgcmVxdWVzdCBjYW5ub3QgYm90aCBiZSBhbiBhY3RpdmUgdGFnIGFuZCBiZSBvbiB0aGUgcXVldWUKK2xpc3QgYXQgdGhlIHNhbWUgdGltZS4gYmxrX3F1ZXVlX3N0YXJ0X3RhZygpIHdpbGwgcmVtb3ZlIHRoZSByZXF1ZXN0LCBidXQKK3RoZSBkcml2ZXIgbXVzdCByZW1lbWJlciB0byBjYWxsIGJsa19xdWV1ZV9lbmRfdGFnKCkgYmVmb3JlIHNpZ25hbGxpbmcKK2NvbXBsZXRpb24gb2YgdGhlIHJlcXVlc3QgdG8gdGhlIGJsb2NrIGxheWVyLiBUaGlzIG1lYW5zIGVuZGluZyB0YWcKK29wZXJhdGlvbnMgYmVmb3JlIGNhbGxpbmcgZW5kX3RoYXRfcmVxdWVzdF9sYXN0KCkhIEZvciBhbiBleGFtcGxlIG9mIGEgdXNlcgorb2YgdGhlc2UgaGVscGVycywgc2VlIHRoZSBJREUgdGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcgc3VwcG9ydC4KKworQ2VydGFpbiBoYXJkd2FyZSBjb25kaXRpb25zIG1heSBkaWN0YXRlIGEgbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBibG9jayB0YWcKK3F1ZXVlLiBGb3IgaW5zdGFuY2UsIG9uIElERSBhbnkgdGFnZ2VkIHJlcXVlc3QgZXJyb3IgbmVlZHMgdG8gY2xlYXIgYm90aAordGhlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBibG9jayBxdWV1ZSBhbmQgZW5hYmxlIHRoZSBkcml2ZXIgdG8gc2FuZWx5IHJlc3RhcnQKK2FsbCB0aGUgb3V0c3RhbmRpbmcgcmVxdWVzdHMuIFRoZXJlJ3MgYSB0aGlyZCBoZWxwZXIgdG8gZG8gdGhhdDoKKworCWJsa19xdWV1ZV9pbnZhbGlkYXRlX3RhZ3MocmVxdWVzdF9xdWV1ZV90ICpxKQorCisJQ2xlYXIgdGhlIGludGVybmFsIGJsb2NrIHRhZyBxdWV1ZSBhbmQgcmVhZGQgYWxsIHRoZSBwZW5kaW5nIHJlcXVlc3RzCisJdG8gdGhlIHJlcXVlc3QgcXVldWUuIFRoZSBkcml2ZXIgd2lsbCByZWNlaXZlIHRoZW0gYWdhaW4gb24gdGhlCisJbmV4dCByZXF1ZXN0X2ZuIHJ1biwganVzdCBsaWtlIGl0IGRpZCB0aGUgZmlyc3QgdGltZSBpdCBlbmNvdW50ZXJlZAorCXRoZW0uCisKKzMuMi41LjIgVGFnIGluZm8KKworU29tZSBibG9jayBmdW5jdGlvbnMgZXhpc3QgdG8gcXVlcnkgY3VycmVudCB0YWcgc3RhdHVzIG9yIHRvIGdvIGZyb20gYQordGFnIG51bWJlciB0byB0aGUgYXNzb2NpYXRlZCByZXF1ZXN0LiBUaGVzZSBhcmUsIGluIG5vIHBhcnRpY3VsYXIgb3JkZXI6CisKKwlibGtfcXVldWVfdGFnZ2VkKHEpCisKKwlSZXR1cm5zIDEgaWYgdGhlIHF1ZXVlICdxJyBpcyB1c2luZyB0YWdnaW5nLCAwIGlmIG5vdC4KKworCWJsa19xdWV1ZV90YWdfcmVxdWVzdChxLCB0YWcpCisKKwlSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggdGFnICd0YWcnLgorCisJYmxrX3F1ZXVlX3RhZ19kZXB0aChxKQorCQorCVJldHVybiBjdXJyZW50IHF1ZXVlIGRlcHRoLgorCisJYmxrX3F1ZXVlX3RhZ19xdWV1ZShxKQorCisJUmV0dXJucyAxIGlmIHRoZSBxdWV1ZSBjYW4gYWNjZXB0IGEgbmV3IHF1ZXVlZCBjb21tYW5kLCAwIGlmIHdlIGFyZQorCWF0IHRoZSBtYXhpbXVtIGRlcHRoIGFscmVhZHkuCisKKwlibGtfcXVldWVfcnFfdGFnZ2VkKHJxKQorCisJUmV0dXJucyAxIGlmIHRoZSByZXF1ZXN0ICdycScgaXMgdGFnZ2VkLgorCiszLjIuNS4yIEludGVybmFsIHN0cnVjdHVyZQorCitJbnRlcm5hbGx5LCBibG9jayBtYW5hZ2VzIHRhZ3MgaW4gdGhlIGJsa19xdWV1ZV90YWcgc3RydWN0dXJlOgorCisJc3RydWN0IGJsa19xdWV1ZV90YWcgeworCQlzdHJ1Y3QgcmVxdWVzdCAqKnRhZ19pbmRleDsJLyogYXJyYXkgb3IgcG9pbnRlcnMgdG8gcnEgKi8KKwkJdW5zaWduZWQgbG9uZyAqdGFnX21hcDsJCS8qIGJpdG1hcCBvZiBmcmVlIHRhZ3MgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBidXN5X2xpc3Q7CS8qIGZpZm8gbGlzdCBvZiBidXN5IHRhZ3MgKi8KKwkJaW50IGJ1c3k7CQkJLyogcXVldWUgZGVwdGggKi8KKwkJaW50IG1heF9kZXB0aDsJCQkvKiBtYXggcXVldWUgZGVwdGggKi8KKwl9OworCitNb3N0IG9mIHRoZSBhYm92ZSBpcyBzaW1wbGUgYW5kIHN0cmFpZ2h0IGZvcndhcmQsIGhvd2V2ZXIgYnVzeV9saXN0IG1heSBuZWVkCithIGJpdCBvZiBleHBsYWluaW5nLiBOb3JtYWxseSB3ZSBkb24ndCBjYXJlIHRvbyBtdWNoIGFib3V0IHJlcXVlc3Qgb3JkZXJpbmcsCitidXQgaW4gdGhlIGV2ZW50IG9mIGFueSBiYXJyaWVyIHJlcXVlc3RzIGluIHRoZSB0YWcgcXVldWUgd2UgbmVlZCB0byBlbnN1cmUKK3RoYXQgcmVxdWVzdHMgYXJlIHJlc3RhcnRlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHF1ZXVlLiBUaGlzIG1heSBoYXBwZW4KK2lmIHRoZSBkcml2ZXIgbmVlZHMgdG8gdXNlIGJsa19xdWV1ZV9pbnZhbGlkYXRlX3RhZ3MoKS4KKworVGFnZ2luZyBhbHNvIGRlZmluZXMgYSBuZXcgcmVxdWVzdCBmbGFnLCBSRVFfUVVFVUVELiBUaGlzIGlzIHNldCB3aGVuZXZlcgorYSByZXF1ZXN0IGlzIGN1cnJlbnRseSB0YWdnZWQuIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGZsYWcgZGlyZWN0bHksCitibGtfcnFfdGFnZ2VkKHJxKSBpcyB0aGUgcG9ydGFibGUgd2F5IHRvIGRvIHNvLgorCiszLjMgSS9PIFN1Ym1pc3Npb24KKworVGhlIHJvdXRpbmUgc3VibWl0X2JpbygpIGlzIHVzZWQgdG8gc3VibWl0IGEgc2luZ2xlIGlvLiBIaWdoZXIgbGV2ZWwgaS9vCityb3V0aW5lcyBtYWtlIHVzZSBvZiB0aGlzOgorCisoYSkgQnVmZmVyZWQgaS9vOgorVGhlIHJvdXRpbmUgc3VibWl0X2JoKCkgaW52b2tlcyBzdWJtaXRfYmlvKCkgb24gYSBiaW8gY29ycmVzcG9uZGluZyB0byB0aGUKK2JoLCBhbGxvY2F0aW5nIHRoZSBiaW8gaWYgcmVxdWlyZWQuIGxsX3J3X2Jsb2NrKCkgdXNlcyBzdWJtaXRfYmgoKSBhcyBiZWZvcmUuCisKKyhiKSBLaW9idWYgaS9vIChmb3IgcmF3L2RpcmVjdCBpL28pOgorVGhlIGxsX3J3X2tpbygpIHJvdXRpbmUgYnJlYWtzIHVwIHRoZSBraW9idWYgaW50byBwYWdlIHNpemVkIGNodW5rcyBhbmQKK21hcHMgdGhlIGFycmF5IHRvIG9uZSBvciBtb3JlIG11bHRpLXBhZ2UgYmlvcywgaXNzdWluZyBzdWJtaXRfYmlvKCkgdG8KK3BlcmZvcm0gdGhlIGkvbyBvbiBlYWNoIG9mIHRoZXNlLgorCitUaGUgZW1iZWRkZWQgYmggYXJyYXkgaW4gdGhlIGtpb2J1ZiBzdHJ1Y3R1cmUgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgbm8KK3ByZWFsbG9jYXRpb24gb2YgYmlvcyBpcyBkb25lIGZvciBraW9idWZzLiBbVGhlIGludGVudCBpcyB0byByZW1vdmUgdGhlCitibG9ja3MgYXJyYXkgYXMgd2VsbCwgYnV0IGl0J3MgY3VycmVudGx5IGluIHRoZXJlIHRvIGtsdWRnZSBhcm91bmQgZGlyZWN0IGkvby5dCitUaHVzIGtpb2J1ZiBhbGxvY2F0aW9uIGhhcyBzd2l0Y2hlZCBiYWNrIHRvIHVzaW5nIGttYWxsb2MgcmF0aGVyIHRoYW4gdm1hbGxvYy4KKworVG9kby9PYnNlcnZhdGlvbjoKKworIEEgc2luZ2xlIGtpb2J1ZiBzdHJ1Y3R1cmUgaXMgYXNzdW1lZCB0byBjb3JyZXNwb25kIHRvIGEgY29udGlndW91cyByYW5nZQorIG9mIGRhdGEsIHNvIGJyd19raW92ZWMoKSBpbnZva2VzIGxsX3J3X2tpbyBmb3IgZWFjaCBraW9idWYgaW4gYSBraW92ZWMuCisgU28gcmlnaHQgbm93IGl0IHdvdWxkbid0IHdvcmsgZm9yIGRpcmVjdCBpL28gb24gbm9uLWNvbnRpZ3VvdXMgYmxvY2tzLgorIFRoaXMgaXMgdG8gYmUgcmVzb2x2ZWQuICBUaGUgZXZlbnR1YWwgZGlyZWN0aW9uIGlzIHRvIHJlcGxhY2Uga2lvYnVmCisgYnkga3ZlYydzLgorCisgQmFkYXJpIFB1bGF2YXJ0eSBoYXMgYSBwYXRjaCB0byBpbXBsZW1lbnQgZGlyZWN0IGkvbyBjb3JyZWN0bHkgdXNpbmcKKyBiaW8gYW5kIGt2ZWMuCisKKworKGMpIFBhZ2UgaS9vOgorVG9kby9VbmRlciBkaXNjdXNzaW9uOgorCisgQW5kcmV3IE1vcnRvbidzIG11bHRpLXBhZ2UgYmlvIHBhdGNoZXMgYXR0ZW1wdCB0byBpc3N1ZSBtdWx0aS1wYWdlCisgd3JpdGVvdXRzIChhbmQgcmVhZHMpIGZyb20gdGhlIHBhZ2UgY2FjaGUsIGJ5IGRpcmVjdGx5IGJ1aWxkaW5nIHVwCisgbGFyZ2UgYmlvcyBmb3Igc3VibWlzc2lvbiBjb21wbGV0ZWx5IGJ5cGFzc2luZyB0aGUgdXNhZ2Ugb2YgYnVmZmVyCisgaGVhZHMuIFRoaXMgd29yayBpcyBzdGlsbCBpbiBwcm9ncmVzcy4KKworIENocmlzdG9waCBIZWxsd2lnIGhhZCBzb21lIGNvZGUgdGhhdCB1c2VzIGJpb3MgZm9yIHBhZ2UtaW8gKHJhdGhlciB0aGFuCisgYmgpLiBUaGlzIGlzbid0IGluY2x1ZGVkIGluIGJpbyBhcyB5ZXQuIENocmlzdG9waCB3YXMgYWxzbyB3b3JraW5nIG9uIGEKKyBkZXNpZ24gZm9yIHJlcHJlc2VudGluZyB2aXJ0dWFsL3JlYWwgZXh0ZW50cyBhcyBhbiBlbnRpdHkgYW5kIG1vZGlmeWluZworIHNvbWUgb2YgdGhlIGFkZHJlc3Mgc3BhY2Ugb3BzIGludGVyZmFjZXMgdG8gdXRpbGl6ZSB0aGlzIGFic3RyYWN0aW9uIHJhdGhlcgorIHRoYW4gYnVmZmVyX2hlYWRzLiAoVGhpcyBpcyBzb21ld2hhdCBhbG9uZyB0aGUgbGluZXMgb2YgdGhlIFNHSSBYRlMgcGFnZWJ1ZgorIGFic3RyYWN0aW9uLCBidXQgaW50ZW5kZWQgdG8gYmUgYXMgbGlnaHR3ZWlnaHQgYXMgcG9zc2libGUpLgorCisoZCkgRGlyZWN0IGFjY2VzcyBpL286CitEaXJlY3QgYWNjZXNzIHJlcXVlc3RzIHRoYXQgZG8gbm90IGNvbnRhaW4gYmlvcyB3b3VsZCBiZSBzdWJtaXR0ZWQgZGlmZmVyZW50bHkKK2FzIGRpc2N1c3NlZCBlYXJsaWVyIGluIHNlY3Rpb24gMS4zLgorCitBc2lkZToKKworICBLdmVjIGkvbzoKKworICBCZW4gTGFIYWlzZSdzIGFpbyBjb2RlIHVzZXMgYSBzbGlnaGx5IGRpZmZlcmVudCBzdHJ1Y3R1cmUgaW5zdGVhZAorICBvZiBraW9idWZzLCBjYWxsZWQgYSBrdmVjX2NiLiBUaGlzIGNvbnRhaW5zIGFuIGFycmF5IG9mIDxwYWdlLCBvZmZzZXQsIGxlbj4KKyAgdHVwbGVzICh2ZXJ5IG11Y2ggbGlrZSB0aGUgbmV0d29ya2luZyBjb2RlKSwgdG9nZXRoZXIgd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uCisgIGFuZCBkYXRhIHBvaW50ZXIuIFRoaXMgaXMgZW1iZWRkZWQgaW50byBhIGJyd19jYiBzdHJ1Y3R1cmUgd2hlbiBwYXNzZWQKKyAgdG8gYnJ3X2t2ZWNfYXN5bmMoKS4KKworICBOb3cgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRpcmVjdGx5IG1hcCB0aGVzZSBrdmVjcyB0byBhIGJpby4gSnVzdCBhcyB3aGlsZQorICBjbG9uaW5nLCBpbiB0aGlzIGNhc2UgcmF0aGVyIHRoYW4gUFJFX0JVSUxUIGJpb192ZWNzLCB3ZSBzZXQgdGhlIGJpX2lvX3ZlYworICBhcnJheSBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSB2ZWNsZXQgYXJyYXkgaW4ga3ZlY3MuCisKKyAgVEJEOiBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCBzb21lIGNoYW5nZXMgYXJlIG5lZWRlZCBpbiB0aGUgd2F5IG11bHRpLXBhZ2UKKyAgYmlvcyBhcmUgaGFuZGxlZCB0b2RheS4gVGhlIHZhbHVlcyBvZiB0aGUgdHVwbGVzIGluIHN1Y2ggYSB2ZWN0b3IgcGFzc2VkIGluCisgIGZyb20gaGlnaGVyIGxldmVsIGNvZGUgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBieSB0aGUgYmxvY2sgbGF5ZXIgaW4gdGhlIGNvdXJzZQorICBvZiBpdHMgcmVxdWVzdCBwcm9jZXNzaW5nLCBzaW5jZSB0aGF0IHdvdWxkIG1ha2UgaXQgaGFyZCBmb3IgdGhlIGhpZ2hlciBsYXllcgorICB0byBjb250aW51ZSB0byB1c2UgdGhlIHZlY3RvciBkZXNjcmlwdG9yIChrdmVjKSBhZnRlciBpL28gY29tcGxldGVzLiBJbnN0ZWFkLAorICBhbGwgc3VjaCB0cmFuc2llbnQgc3RhdGUgc2hvdWxkIGVpdGhlciBiZSBtYWludGFpbmVkIGluIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSwKKyAgYW5kIHBhc3NlZCBvbiBpbiBzb21lIHdheSB0byB0aGUgZW5kaW8gY29tcGxldGlvbiByb3V0aW5lLgorCisKKzQuIFRoZSBJL08gc2NoZWR1bGVyCitJL08gc2NoZWR1bGVycyBhcmUgbm93IHBlciBxdWV1ZS4gVGhleSBzaG91bGQgYmUgcnVudGltZSBzd2l0Y2hhYmxlIGFuZCBtb2R1bGFyCitidXQgYXJlbid0IHlldC4gSmVucyBoYXMgbW9zdCBiaXRzIHRvIGRvIHRoaXMsIGJ1dCB0aGUgc3lzZnMgaW1wbGVtZW50YXRpb24gaXMKK21pc3NpbmcuCisKK0EgYmxvY2sgbGF5ZXIgY2FsbCB0byB0aGUgaS9vIHNjaGVkdWxlciBmb2xsb3dzIHRoZSBjb252ZW50aW9uIGVsdl94eHgoKS4gVGhpcworY2FsbHMgZWxldmF0b3JfeHh4X2ZuIGluIHRoZSBlbGV2YXRvciBzd2l0Y2ggKGRyaXZlcnMvYmxvY2svZWxldmF0b3IuYykuIE9oLAoreHh4IGFuZCB4eHggbWlnaHQgbm90IG1hdGNoIGV4YWN0bHksIGJ1dCB1c2UgeW91ciBpbWFnaW5hdGlvbi4gSWYgYW4gZWxldmF0b3IKK2RvZXNuJ3QgaW1wbGVtZW50IGEgZnVuY3Rpb24sIHRoZSBzd2l0Y2ggZG9lcyBub3RoaW5nIG9yIHNvbWUgbWluaW1hbCBob3VzZQora2VlcGluZyB3b3JrLgorCis0LjEuIEkvTyBzY2hlZHVsZXIgQVBJCisKK1RoZSBmdW5jdGlvbnMgYW4gZWxldmF0b3IgbWF5IGltcGxlbWVudCBhcmU6ICgqIGFyZSBtYW5kYXRvcnkpCitlbGV2YXRvcl9tZXJnZV9mbgkJY2FsbGVkIHRvIHF1ZXJ5IHJlcXVlc3RzIGZvciBtZXJnZSB3aXRoIGEgYmlvCisKK2VsZXZhdG9yX21lcmdlX3JlcV9mbgkJIiAiICIgIHdpdGggYW5vdGhlciByZXF1ZXN0CisKK2VsZXZhdG9yX21lcmdlZF9mbgkJY2FsbGVkIHdoZW4gYSByZXF1ZXN0IGluIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4KKwkJCQlpbnZvbHZlZCBpbiBhIG1lcmdlLiBJdCBpcyB1c2VkIGluIHRoZSBkZWFkbGluZQorCQkJCXNjaGVkdWxlciBmb3IgZXhhbXBsZSwgdG8gcmVwb3NpdGlvbiB0aGUgcmVxdWVzdAorCQkJCWlmIGl0cyBzb3J0aW5nIG9yZGVyIGhhcyBjaGFuZ2VkLgorCisqZWxldmF0b3JfbmV4dF9yZXFfZm4JCXJldHVybnMgdGhlIG5leHQgc2NoZWR1bGVkIHJlcXVlc3QsIG9yIE5VTEwKKwkJCQlpZiB0aGVyZSBhcmUgbm9uZSAob3Igbm9uZSBhcmUgcmVhZHkpLgorCisqZWxldmF0b3JfYWRkX3JlcV9mbgkJY2FsbGVkIHRvIGFkZCBhIG5ldyByZXF1ZXN0IGludG8gdGhlIHNjaGVkdWxlcgorCitlbGV2YXRvcl9xdWV1ZV9lbXB0eV9mbgkJcmV0dXJucyB0cnVlIGlmIHRoZSBtZXJnZSBxdWV1ZSBpcyBlbXB0eS4KKwkJCQlEcml2ZXJzIHNob3VsZG4ndCB1c2UgdGhpcywgYnV0IHJhdGhlciBjaGVjaworCQkJCWlmIGVsdl9uZXh0X3JlcXVlc3QgaXMgTlVMTCAod2l0aG91dCBsb3NpbmcgdGhlCisJCQkJcmVxdWVzdCBpZiBvbmUgZXhpc3RzISkKKworZWxldmF0b3JfcmVtb3ZlX3JlcV9mbgkJVGhpcyBpcyBjYWxsZWQgd2hlbiBhIGRyaXZlciBjbGFpbXMgb3duZXJzaGlwIG9mCisJCQkJdGhlIHRhcmdldCByZXF1ZXN0IC0gaXQgbm93IGJlbG9uZ3MgdG8gdGhlCisJCQkJZHJpdmVyLiBJdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBvciBtZXJnZWQuCisJCQkJRHJpdmVycyBtdXN0IG5vdCBsb3NlIHRoZSByZXF1ZXN0ISBBIHN1YnNlcXVlbnQKKwkJCQljYWxsIG9mIGVsZXZhdG9yX25leHRfcmVxX2ZuIG11c3QgIHJldHVybiB0aGUKKwkJCQlfbmV4dF8gcmVxdWVzdC4KKworZWxldmF0b3JfcmVxdWV1ZV9yZXFfZm4JCWNhbGxlZCB0byBhZGQgYSByZXF1ZXN0IHRvIHRoZSBzY2hlZHVsZXIuIFRoaXMKKwkJCQlpcyB1c2VkIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGFscm5hZGViZWVuCisJCQkJcmV0dXJuZWQgYnkgZWx2X25leHRfcmVxdWVzdCwgYnV0IGhhc24ndAorCQkJCWNvbXBsZXRlZC4gSWYgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgdGhlbgorCQkJCWVsZXZhdG9yX2FkZF9yZXFfZm4gaXMgY2FsbGVkIGluc3RlYWQuCisKK2VsZXZhdG9yX2Zvcm1lcl9yZXFfZm4KK2VsZXZhdG9yX2xhdHRlcl9yZXFfZm4JCVRoZXNlIHJldHVybiB0aGUgcmVxdWVzdCBiZWZvcmUgb3IgYWZ0ZXIgdGhlCisJCQkJb25lIHNwZWNpZmllZCBpbiBkaXNrIHNvcnQgb3JkZXIuIFVzZWQgYnkgdGhlCisJCQkJYmxvY2sgbGF5ZXIgdG8gZmluZCBtZXJnZSBwb3NzaWJpbGl0aWVzLgorCitlbGV2YXRvcl9jb21wbGV0ZWRfcmVxX2ZuCWNhbGxlZCB3aGVuIGEgcmVxdWVzdCBpcyBjb21wbGV0ZWQuIFRoaXMgbWlnaHQKKwkJCQljb21lIGFib3V0IGR1ZSB0byBiZWluZyBtZXJnZWQgd2l0aCBhbm90aGVyIG9yCisJCQkJd2hlbiB0aGUgZGV2aWNlIGNvbXBsZXRlcyB0aGUgcmVxdWVzdC4KKworZWxldmF0b3JfbWF5X3F1ZXVlX2ZuCQlyZXR1cm5zIHRydWUgaWYgdGhlIHNjaGVkdWxlciB3YW50cyB0byBhbGxvdyB0aGUKKwkJCQljdXJyZW50IGNvbnRleHQgdG8gcXVldWUgYSBuZXcgcmVxdWVzdCBldmVuIGlmCisJCQkJaXQgaXMgb3ZlciB0aGUgcXVldWUgbGltaXQuIFRoaXMgbXVzdCBiZSB1c2VkCisJCQkJdmVyeSBjYXJlZnVsbHkhIQorCitlbGV2YXRvcl9zZXRfcmVxX2ZuCitlbGV2YXRvcl9wdXRfcmVxX2ZuCQlNdXN0IGJlIHVzZWQgdG8gYWxsb2NhdGUgYW5kIGZyZWUgYW55IGVsZXZhdG9yCisJCQkJc3BlY2lmaWMgc3RvcmF0ZSBmb3IgYSByZXF1ZXN0LgorCitlbGV2YXRvcl9pbml0X2ZuCitlbGV2YXRvcl9leGl0X2ZuCQlBbGxvY2F0ZSBhbmQgZnJlZSBhbnkgZWxldmF0b3Igc3BlY2lmaWMgc3RvcmFnZQorCQkJCWZvciBhIHF1ZXVlLgorCis0LjIgSS9PIHNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbgorVGhlIGdlbmVyaWMgaS9vIHNjaGVkdWxlciBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gc29ydC9tZXJnZS9iYXRjaCByZXF1ZXN0cyBmb3IKK29wdGltYWwgZGlzayBzY2FuIGFuZCByZXF1ZXN0IHNlcnZpY2luZyBwZXJmb3JtYW5jZSAoYmFzZWQgb24gZ2VuZXJpYworcHJpbmNpcGxlcyBhbmQgZGV2aWNlIGNhcGFiaWxpdGllcyksIG9wdGltaXplZCBmb3I6CitpLiAgIGltcHJvdmVkIHRocm91Z2hwdXQKK2lpLiAgaW1wcm92ZWQgbGF0ZW5jeQoraWlpLiBiZXR0ZXIgdXRpbGl6YXRpb24gb2YgaC93ICYgQ1BVIHRpbWUKKworQ2hhcmFjdGVyaXN0aWNzOgorCitpLiBCaW5hcnkgdHJlZQorQVMgYW5kIGRlYWRsaW5lIGkvbyBzY2hlZHVsZXJzIHVzZSByZWQgYmxhY2sgYmluYXJ5IHRyZWVzIGZvciBkaXNrIHBvc2l0aW9uCitzb3J0aW5nIGFuZCBzZWFyY2hpbmcsIGFuZCBhIGZpZm8gbGlua2VkIGxpc3QgZm9yIHRpbWUtYmFzZWQgc2VhcmNoaW5nLiBUaGlzCitnaXZlcyBnb29kIHNjYWxhYmlsaXR5IGFuZCBnb29kIGF2YWlsYWJsaWxpdHkgb2YgaW5mb3JtYXRpb24uIFJlcXVlc3RzIGFyZQorYWxtb3N0IGFsd2F5cyBkaXNwYXRjaGVkIGluIGRpc2sgc29ydCBvcmRlciwgc28gYSBjYWNoZSBpcyBrZXB0IG9mIHRoZSBuZXh0CityZXF1ZXN0IGluIHNvcnQgb3JkZXIgdG8gcHJldmVudCBiaW5hcnkgdHJlZSBsb29rdXBzLgorCitUaGlzIGFycmFuZ2VtZW50IGlzIG5vdCBhIGdlbmVyaWMgYmxvY2sgbGF5ZXIgY2hhcmFjdGVyaXN0aWMgaG93ZXZlciwgc28KK2VsZXZhdG9ycyBtYXkgaW1wbGVtZW50IHF1ZXVlcyBhcyB0aGV5IHBsZWFzZS4KKworaWkuIExhc3QgbWVyZ2UgaGludAorVGhlIGxhc3QgbWVyZ2UgaGludCBpcyBwYXJ0IG9mIHRoZSBnZW5lcmljIHF1ZXVlIGxheWVyLiBJL08gc2NoZWR1bGVycyBtdXN0IGRvCitzb21lIG1hbmFnZW1lbnQgb24gaXQuIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgbW9zdCBpbXBvcnRhbnQgdGhpbmcgaXMgdG8gbWFrZQorc3VyZSBxLT5sYXN0X21lcmdlIGlzIGNsZWFyZWQgKHNldCB0byBOVUxMKSB3aGVuIHRoZSByZXF1ZXN0IG9uIGl0IGlzIG5vIGxvbmdlcgorYSBjYW5kaWRhdGUgZm9yIG1lcmdpbmcgKGZvciBleGFtcGxlIGlmIGl0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIGRyaXZlcikuCisKK1RoZSBsYXN0IG1lcmdlIHBlcmZvcm1lZCBpcyBjYWNoZWQgYXMgYSBoaW50IGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LiBJZgorc2VxdWVudGlhbCBkYXRhIGlzIGJlaW5nIHN1Ym1pdHRlZCwgdGhlIGhpbnQgaXMgdXNlZCB0byBwZXJmb3JtIG1lcmdlcyB3aXRob3V0Cithbnkgc2Nhbm5pbmcuIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgcHJvY2Vzc2VzIGRvaW5nCitJL08gdGhvdWdoLCBzbyBhICJtZXJnZSBoYXNoIiBpcyB1c2VkIGJ5IHNvbWUgc2NoZWR1bGVycy4KKworaWlpLiBNZXJnZSBoYXNoCitBUyBhbmQgZGVhZGxpbmUgdXNlIGEgaGFzaCB0YWJsZSBpbmRleGVkIGJ5IHRoZSBsYXN0IHNlY3RvciBvZiBhIHJlcXVlc3QuIFRoaXMKK2VuYWJsZXMgbWVyZ2luZyBjb2RlIHRvIHF1aWNrbHkgbG9vayB1cCAiYmFjayBtZXJnZSIgY2FuZGlkYXRlcywgZXZlbiB3aGVuCittdWx0aXBsZSBJL08gc3RyZWFtcyBhcmUgYmVpbmcgcGVyZm9ybWVkIGF0IG9uY2Ugb24gb25lIGRpc2suCisKKyJGcm9udCBtZXJnZXMiLCBhIG5ldyByZXF1ZXN0IGJlaW5nIG1lcmdlZCBhdCB0aGUgZnJvbnQgb2YgYW4gZXhpc3RpbmcgcmVxdWVzdCwKK2FyZSBmYXIgbGVzcyBjb21tb24gdGhhbiAiYmFjayBtZXJnZXMiIGR1ZSB0byB0aGUgbmF0dXJlIG9mIG1vc3QgSS9PIHBhdHRlcm5zLgorRnJvbnQgbWVyZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSBiaW5hcnkgdHJlZXMgaW4gQVMgYW5kIGRlYWRsaW5lIHNjaGVkdWxlcnMuCisKK2l2LiBIYW5kbGluZyBiYXJyaWVyIGNhc2VzCitBIHJlcXVlc3Qgd2l0aCBmbGFncyBSRVFfSEFSREJBUlJJRVIgb3IgUkVRX1NPRlRCQVJSSUVSIG11c3Qgbm90IGJlIG9yZGVyZWQKK2Fyb3VuZC4gVGhhdCBpcywgdGhleSBtdXN0IGJlIHByb2Nlc3NlZCBhZnRlciBhbGwgb2xkZXIgcmVxdWVzdHMsIGFuZCBiZWZvcmUKK2FueSBuZXdlciBvbmVzLiBUaGlzIGluY2x1ZGVzIG1lcmdlcyEKKworSW4gQVMgYW5kIGRlYWRsaW5lIHNjaGVkdWxlcnMsIGJhcnJpZXJzIGhhdmUgdGhlIGVmZmVjdCBvZiBmbHVzaGluZyB0aGUgcmVvcmRlcgorcXVldWUuIFRoZSBwZXJmb3JtYW5jZSBjb3N0IG9mIHRoaXMgd2lsbCB2YXJ5IGZyb20gbm90aGluZyB0byBhIGxvdCBkZXBlbmRpbmcKK29uIGkvbyBwYXR0ZXJucyBhbmQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcy4gT2J2aW91c2x5IHRoZXkgd29uJ3QgaW1wcm92ZQorcGVyZm9ybWFuY2UsIHNvIHRoZWlyIHVzZSBzaG91bGQgYmUga2VwdCB0byBhIG1pbmltdW0uCisKK3YuIEhhbmRsaW5nIGluc2VydGlvbiBwb3NpdGlvbiBkaXJlY3RpdmVzCitBIHJlcXVlc3QgbWF5IGJlIGluc2VydGVkIHdpdGggYSBwb3NpdGlvbiBkaXJlY3RpdmUuIFRoZSBkaXJlY3RpdmVzIGFyZSBvbmUgb2YKK0VMRVZBVE9SX0lOU0VSVF9CQUNLLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIEVMRVZBVE9SX0lOU0VSVF9TT1JULgorCitFTEVWQVRPUl9JTlNFUlRfU09SVCBpcyBhIGdlbmVyYWwgZGlyZWN0aXZlIGZvciBub24tYmFycmllciByZXF1ZXN0cy4KK0VMRVZBVE9SX0lOU0VSVF9CQUNLIGlzIHVzZWQgdG8gaW5zZXJ0IGEgYmFycmllciB0byB0aGUgYmFjayBvZiB0aGUgcXVldWUuCitFTEVWQVRPUl9JTlNFUlRfRlJPTlQgaXMgdXNlZCB0byBpbnNlcnQgYSBiYXJyaWVyIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUsIGFuZAorb3ZlcnJpZGVzIHRoZSBvcmRlcmluZyByZXF1ZXN0ZWQgYnkgYW55IHByZXZpb3VzIGJhcnJpZXJzLiBJbiBwcmFjdGljZSB0aGlzIGlzCitoYXJtbGVzcyBhbmQgcmVxdWlyZWQsIGJlY2F1c2UgaXQgaXMgdXNlZCBmb3IgU0NTSSByZXF1ZXVlaW5nLiBUaGlzIGRvZXMgbm90CityZXF1aXJlIGZsdXNoaW5nIHRoZSByZW9yZGVyIHF1ZXVlLCBzbyBkb2VzIG5vdCBpbXBvc2UgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCit2aS4gUGx1Z2dpbmcgdGhlIHF1ZXVlIHRvIGJhdGNoIHJlcXVlc3RzIGluIGFudGljaXBhdGlvbiBvZiBvcHBvcnR1bml0aWVzIGZvcgorICBtZXJnZS9zb3J0IG9wdGltaXphdGlvbnMKKworVGhpcyBpcyBqdXN0IHRoZSBzYW1lIGFzIGluIDIuNCBzbyBmYXIsIHRob3VnaCBwZXItZGV2aWNlIHVucGx1Z2dpbmcKK3N1cHBvcnQgaXMgYW50aWNpcGF0ZWQgZm9yIDIuNS4gQWxzbyB3aXRoIGEgcHJpb3JpdHktYmFzZWQgaS9vIHNjaGVkdWxlciwKK3N1Y2ggZGVjaXNpb25zIGNvdWxkIGJlIGJhc2VkIG9uIHJlcXVlc3QgcHJpb3JpdGllcy4KKworUGx1Z2dpbmcgaXMgYW4gYXBwcm9hY2ggdGhhdCB0aGUgY3VycmVudCBpL28gc2NoZWR1bGluZyBhbGdvcml0aG0gcmVzb3J0cyB0byBzbwordGhhdCBpdCBjb2xsZWN0cyB1cCBlbm91Z2ggcmVxdWVzdHMgaW4gdGhlIHF1ZXVlIHRvIGJlIGFibGUgdG8gdGFrZQorYWR2YW50YWdlIG9mIHRoZSBzb3J0aW5nL21lcmdpbmcgbG9naWMgaW4gdGhlIGVsZXZhdG9yLiBJZiB0aGUKK3F1ZXVlIGlzIGVtcHR5IHdoZW4gYSByZXF1ZXN0IGNvbWVzIGluLCB0aGVuIGl0IHBsdWdzIHRoZSByZXF1ZXN0IHF1ZXVlCisoc29ydCBvZiBsaWtlIHBsdWdnaW5nIHRoZSBib3R0b20gb2YgYSB2ZXNzZWwgdG8gZ2V0IGZsdWlkIHRvIGJ1aWxkIHVwKQordGlsbCBpdCBmaWxscyB1cCB3aXRoIGEgZmV3IG1vcmUgcmVxdWVzdHMsIGJlZm9yZSBzdGFydGluZyB0byBzZXJ2aWNlCit0aGUgcmVxdWVzdHMuIFRoaXMgcHJvdmlkZXMgYW4gb3Bwb3J0dW5pdHkgdG8gbWVyZ2Uvc29ydCB0aGUgcmVxdWVzdHMgYmVmb3JlCitwYXNzaW5nIHRoZW0gZG93biB0byB0aGUgZGV2aWNlLiBUaGVyZSBhcmUgdmFyaW91cyBjb25kaXRpb25zIHdoZW4gdGhlIHF1ZXVlIGlzCit1bnBsdWdnZWQgKHRvIG9wZW4gdXAgdGhlIGZsb3cgYWdhaW4pLCBlaXRoZXIgdGhyb3VnaCBhIHNjaGVkdWxlZCB0YXNrIG9yCitjb3VsZCBiZSBvbiBkZW1hbmQuIEZvciBleGFtcGxlIHdhaXRfb25fYnVmZmVyIHNldHMgdGhlIHVucGx1Z2dpbmcgZ29pbmcKKyhieSBydW5uaW5nIHRxX2Rpc2spIHNvIHRoZSByZWFkIGdldHMgc2F0aXNmaWVkIHNvb24uIFNvIGluIHRoZSByZWFkIGNhc2UsCit0aGUgcXVldWUgZ2V0cyBleHBsaWNpdGx5IHVucGx1Z2dlZCBhcyBwYXJ0IG9mIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24sCitpbiBmYWN0IGFsbCBxdWV1ZXMgZ2V0IHVucGx1Z2dlZCBhcyBhIHNpZGUtZWZmZWN0LgorCitBc2lkZToKKyAgVGhpcyBpcyBraW5kIG9mIGNvbnRyb3ZlcnNpYWwgdGVycml0b3J5LCBhcyBpdCdzIG5vdCBjbGVhciBpZiBwbHVnZ2luZyBpcworICBhbHdheXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLiBEZXZpY2VzIHR5cGljYWxseSBoYXZlIHRoZWlyIG93biBxdWV1ZXMsCisgIGFuZCBhbGxvd2luZyBhIGJpZyBxdWV1ZSB0byBidWlsZCB1cCBpbiBzb2Z0d2FyZSwgd2hpbGUgbGV0dGluZyB0aGUgZGV2aWNlIGJlCisgIGlkbGUgZm9yIGEgd2hpbGUgbWF5IG5vdCBhbHdheXMgbWFrZSBzZW5zZS4gVGhlIHRyaWNrIGlzIHRvIGhhbmRsZSB0aGUgZmluZQorICBiYWxhbmNlIGJldHdlZW4gd2hlbiB0byBwbHVnIGFuZCB3aGVuIHRvIG9wZW4gdXAuIEFsc28gbm93IHRoYXQgd2UgaGF2ZQorICBtdWx0aS1wYWdlIGJpb3MgYmVpbmcgcXVldWVkIGluIG9uZSBzaG90LCB3ZSBtYXkgbm90IG5lZWQgdG8gd2FpdCB0byBtZXJnZQorICBhIGJpZyByZXF1ZXN0IGZyb20gdGhlIGJyb2tlbiB1cCBwaWVjZXMgY29taW5nIGJ5LgorCisgIFBlci1xdWV1ZSBncmFudWxhcml0eSB1bnBsdWdnaW5nIChzdGlsbCBhIFRvZG8pIG1heSBoZWxwIHJlZHVjZSBzb21lIG9mIHRoZQorICBjb25jZXJucyB3aXRoIGp1c3QgYSBzaW5nbGUgdHFfZGlzayBmbHVzaCBhcHByb2FjaC4gU29tZXRoaW5nIGxpa2UKKyAgYmxrX2tpY2tfcXVldWUoKSB0byB1bnBsdWcgYSBzcGVjaWZpYyBxdWV1ZSAocmlnaHQgYXdheSA/KQorICBvciBvcHRpb25hbGx5LCBhbGwgcXVldWVzLCBpcyBpbiB0aGUgcGxhbi4KKworNC4zIEkvTyBjb250ZXh0cworSS9PIGNvbnRleHRzIHByb3ZpZGUgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcGVyIHByb2Nlc3MgZGF0YSBhcmVhLiBUaGV5IG1heQorYmUgdXNlZCBpbiBJL08gc2NoZWR1bGVycywgYW5kIGluIHRoZSBibG9jayBsYXllciAoY291bGQgYmUgdXNlZCBmb3IgSU8gc3RhdGlzLAorcHJpb3JpdGllcyBmb3IgZXhhbXBsZSkuIFNlZSAqaW9fY29udGV4dCBpbiBkcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5jLCBhbmQKK2FzLWlvc2NoZWQuYyBmb3IgYW4gZXhhbXBsZSBvZiB1c2FnZSBpbiBhbiBpL28gc2NoZWR1bGVyLgorCisKKzUuIFNjYWxhYmlsaXR5IHJlbGF0ZWQgY2hhbmdlcworCis1LjEgR3JhbnVsYXIgTG9ja2luZzogaW9fcmVxdWVzdF9sb2NrIHJlcGxhY2VkIGJ5IGEgcGVyLXF1ZXVlIGxvY2sKKworVGhlIGdsb2JhbCBpb19yZXF1ZXN0X2xvY2sgaGFzIGJlZW4gcmVtb3ZlZCBhcyBvZiAyLjUsIHRvIGF2b2lkCit0aGUgc2NhbGFiaWxpdHkgYm90dGxlbmVjayBpdCB3YXMgY2F1c2luZywgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IG1vcmUKK2dyYW51bGFyIGxvY2tpbmcuIFRoZSByZXF1ZXN0IHF1ZXVlIHN0cnVjdHVyZSBoYXMgYSBwb2ludGVyIHRvIHRoZQorbG9jayB0byBiZSB1c2VkIGZvciB0aGF0IHF1ZXVlLiBBcyBhIHJlc3VsdCwgbG9ja2luZyBjYW4gbm93IGJlCitwZXItcXVldWUsIHdpdGggYSBwcm92aXNpb24gZm9yIHNoYXJpbmcgYSBsb2NrIGFjcm9zcyBxdWV1ZXMgaWYKK25lY2Vzc2FyeSAoZS5nIHRoZSBzY3NpIGxheWVyIHNldHMgdGhlIHF1ZXVlIGxvY2sgcG9pbnRlcnMgdG8gdGhlCitjb3JyZXNwb25kaW5nIGFkYXB0ZXIgbG9jaywgd2hpY2ggcmVzdWx0cyBpbiBhIHBlciBob3N0IGxvY2tpbmcKK2dyYW51bGFyaXR5KS4gVGhlIGxvY2tpbmcgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSwgaS5lLiBsb2NraW5nIGlzCitzdGlsbCBpbXBvc2VkIGJ5IHRoZSBibG9jayBsYXllciwgZ3JhYmJpbmcgdGhlIGxvY2sgYmVmb3JlCityZXF1ZXN0X2ZuIGV4ZWN1dGlvbiB3aGljaCBpdCBtZWFucyB0aGF0IGxvdHMgb2Ygb2xkZXIgZHJpdmVycworc2hvdWxkIHN0aWxsIGJlIFNNUCBzYWZlLiBEcml2ZXJzIGFyZSBmcmVlIHRvIGRyb3AgdGhlIHF1ZXVlCitsb2NrIHRoZW1zZWx2ZXMsIGlmIHJlcXVpcmVkLiBEcml2ZXJzIHRoYXQgZXhwbGljaXRseSB1c2VkIHRoZQoraW9fcmVxdWVzdF9sb2NrIGZvciBzZXJpYWxpemF0aW9uIG5lZWQgdG8gYmUgbW9kaWZpZWQgYWNjb3JkaW5nbHkuCitVc3VhbGx5IGl0J3MgYXMgZWFzeSBhcyBhZGRpbmcgYSBnbG9iYWwgbG9jazoKKworCXN0YXRpYyBzcGlubG9ja190IG15X2RyaXZlcl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCithbmQgcGFzc2luZyB0aGUgYWRkcmVzcyB0byB0aGF0IGxvY2sgdG8gYmxrX2luaXRfcXVldWUoKS4KKworNS4yIDY0IGJpdCBzZWN0b3IgbnVtYmVycyAoc2VjdG9yX3QgcHJlcGFyZXMgZm9yIDY0IGJpdCBzdXBwb3J0KQorCitUaGUgc2VjdG9yIG51bWJlciB1c2VkIGluIHRoZSBiaW8gc3RydWN0dXJlIGhhcyBiZWVuIGNoYW5nZWQgdG8gc2VjdG9yX3QsCit3aGljaCBjb3VsZCBiZSBkZWZpbmVkIGFzIDY0IGJpdCBpbiBwcmVwYXJhdGlvbiBmb3IgNjQgYml0IHNlY3RvciBzdXBwb3J0LgorCis2LiBPdGhlciBDaGFuZ2VzL0ltcGxpY2F0aW9ucworCis2LjEgUGFydGl0aW9uIHJlLW1hcHBpbmcgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYyBibG9jayBsYXllcgorCitJbiAyLjUgc29tZSBvZiB0aGUgZ2VuZGlzay9wYXJ0aXRpb24gcmVsYXRlZCBjb2RlIGhhcyBiZWVuIHJlb3JnYW5pemVkLgorTm93IHRoZSBnZW5lcmljIGJsb2NrIGxheWVyIHBlcmZvcm1zIHBhcnRpdGlvbi1yZW1hcHBpbmcgZWFybHkgYW5kIHRodXMKK3Byb3ZpZGVzIGRyaXZlcnMgd2l0aCBhIHNlY3RvciBudW1iZXIgcmVsYXRpdmUgdG8gd2hvbGUgZGV2aWNlLCByYXRoZXIgdGhhbgoraGF2aW5nIHRvIHRha2UgcGFydGl0aW9uIG51bWJlciBpbnRvIGFjY291bnQgaW4gb3JkZXIgdG8gYXJyaXZlIGF0IHRoZSB0cnVlCitzZWN0b3IgbnVtYmVyLiBUaGUgcm91dGluZSBibGtfcGFydGl0aW9uX3JlbWFwKCkgaXMgaW52b2tlZCBieQorZ2VuZXJpY19tYWtlX3JlcXVlc3QgZXZlbiBiZWZvcmUgaW52b2tpbmcgdGhlIHF1ZXVlIHNwZWNpZmljIG1ha2VfcmVxdWVzdF9mbiwKK3NvIHRoZSBpL28gc2NoZWR1bGVyIGFsc28gZ2V0cyB0byBvcGVyYXRlIG9uIHdob2xlIGRpc2sgc2VjdG9yIG51bWJlcnMuIFRoaXMKK3Nob3VsZCB0eXBpY2FsbHkgbm90IHJlcXVpcmUgY2hhbmdlcyB0byBibG9jayBkcml2ZXJzLCBpdCBqdXN0IG5ldmVyIGdldHMKK3RvIGludm9rZSBpdHMgb3duIHBhcnRpdGlvbiBzZWN0b3Igb2Zmc2V0IGNhbGN1bGF0aW9ucyBzaW5jZSBhbGwgYmlvcworc2VudCBhcmUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlLgorCisKKzcuIEEgRmV3IFRpcHMgb24gTWlncmF0aW9uIG9mIG9sZGVyIGRyaXZlcnMKKworT2xkLXN0eWxlIGRyaXZlcnMgdGhhdCBqdXN0IHVzZSBDVVJSRU5UIGFuZCBpZ25vcmVzIGNsdXN0ZXJlZCByZXF1ZXN0cywKK21heSBub3QgbmVlZCBtdWNoIGNoYW5nZS4gIFRoZSBnZW5lcmljIGxheWVyIHdpbGwgYXV0b21hdGljYWxseSBoYW5kbGUKK2NsdXN0ZXJlZCByZXF1ZXN0cywgbXVsdGktcGFnZSBiaW9zLCBldGMgZm9yIHRoZSBkcml2ZXIuCisKK0ZvciBhIGxvdyBwZXJmb3JtYW5jZSBkcml2ZXIgb3IgaGFyZHdhcmUgdGhhdCBpcyBQSU8gZHJpdmVuIG9yIGp1c3QgZG9lc24ndAorc3VwcG9ydCBzY2F0dGVyLWdhdGhlciBjaGFuZ2VzIHNob3VsZCBiZSBtaW5pbWFsIHRvby4KKworVGhlIGZvbGxvd2luZyBhcmUgc29tZSBwb2ludHMgdG8ga2VlcCBpbiBtaW5kIHdoZW4gY29udmVydGluZyBvbGQgZHJpdmVycwordG8gYmlvLgorCitEcml2ZXJzIHNob3VsZCB1c2UgZWx2X25leHRfcmVxdWVzdCB0byBwaWNrIHVwIHJlcXVlc3RzIGFuZCBhcmUgbm8gbG9uZ2VyCitzdXBwb3NlZCB0byBoYW5kbGUgbG9vcGluZyBkaXJlY3RseSBvdmVyIHRoZSByZXF1ZXN0IGxpc3QuCisoc3RydWN0IHJlcXVlc3QtPnF1ZXVlIGhhcyBiZWVuIHJlbW92ZWQpCisKK05vdyBlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0IHRha2VzIGFuIGFkZGl0aW9uYWwgbnVtYmVyX29mX3NlY3RvcnMgYXJndW1lbnQuCitJdCB1c2VkIHRvIGhhbmRsZSBhbHdheXMganVzdCB0aGUgZmlyc3QgYnVmZmVyX2hlYWQgaW4gYSByZXF1ZXN0LCBub3cKK2l0IHdpbGwgbG9vcCBhbmQgaGFuZGxlIGFzIG1hbnkgc2VjdG9ycyAob24gYSBiaW8tc2VnbWVudCBncmFudWxhcml0eSkKK2FzIHNwZWNpZmllZC4KKworTm93IGJoLT5iX2VuZF9pbyBpcyByZXBsYWNlZCBieSBiaW8tPmJpX2VuZF9pbywgYnV0IG1vc3Qgb2YgdGhlIHRpbWUgdGhlCityaWdodCB0aGluZyB0byB1c2UgaXMgYmlvX2VuZGlvKGJpbywgdXB0b2RhdGUpIGluc3RlYWQuCisKK0lmIHRoZSBkcml2ZXIgaXMgZHJvcHBpbmcgdGhlIGlvX3JlcXVlc3RfbG9jayBmcm9tIGl0cyByZXF1ZXN0X2ZuIHN0cmF0ZWd5LAordGhlbiBpdCBqdXN0IG5lZWRzIHRvIHJlcGxhY2UgdGhhdCB3aXRoIHEtPnF1ZXVlX2xvY2sgaW5zdGVhZC4KKworQXMgZGVzY3JpYmVkIGluIFNlYyAxLjEsIGRyaXZlcnMgY2FuIHNldCBtYXggc2VjdG9yIHNpemUsIG1heCBzZWdtZW50IHNpemUKK2V0YyBwZXIgcXVldWUgbm93LiBEcml2ZXJzIHRoYXQgdXNlZCB0byBkZWZpbmUgdGhlaXIgb3duIG1lcmdlIGZ1bmN0aW9ucyBpCit0byBoYW5kbGUgdGhpbmdzIGxpa2UgdGhpcyBjYW4gbm93IGp1c3QgdXNlIHRoZSBibGtfcXVldWVfKiBmdW5jdGlvbnMgYXQKK2Jsa19pbml0X3F1ZXVlIHRpbWUuCisKK0RyaXZlcnMgbm8gbG9uZ2VyIGhhdmUgdG8gbWFwIGEge3BhcnRpdGlvbiwgc2VjdG9yIG9mZnNldH0gaW50byB0aGUKK2NvcnJlY3QgYWJzb2x1dGUgbG9jYXRpb24gYW55bW9yZSwgdGhpcyBpcyBkb25lIGJ5IHRoZSBibG9jayBsYXllciwgc28KK3doZXJlIGEgZHJpdmVyIHJlY2VpdmVkIGEgcmVxdWVzdCBhbGEgdGhpcyBiZWZvcmU6CisKKwlycS0+cnFfZGV2ID0gbWtfa2RldigzLCA1KTsJLyogL2Rldi9oZGE1ICovCisJcnEtPnNlY3RvciA9IDA7CQkJLyogZmlyc3Qgc2VjdG9yIG9uIGhkYTUgKi8KKworICBpdCB3aWxsIG5vdyBzZWUKKworCXJxLT5ycV9kZXYgPSBta19rZGV2KDMsIDApOwkvKiAvZGV2L2hkYSAqLworCXJxLT5zZWN0b3IgPSAxMjMxMjg7CQkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBkaXNrICovCisKK0FzIG1lbnRpb25lZCwgdGhlcmUgaXMgbm8gdmlydHVhbCBtYXBwaW5nIG9mIGEgYmlvLiBGb3IgRE1BLCB0aGlzIGlzCitub3QgYSBwcm9ibGVtIGFzIHRoZSBkcml2ZXIgcHJvYmFibHkgbmV2ZXIgd2lsbCBuZWVkIGEgdmlydHVhbCBtYXBwaW5nLgorSW5zdGVhZCBpdCBuZWVkcyBhIGJ1cyBtYXBwaW5nIChwY2lfbWFwX3BhZ2UgZm9yIGEgc2luZ2xlIHNlZ21lbnQgb3IKK3VzZSBibGtfcnFfbWFwX3NnIGZvciBzY2F0dGVyIGdhdGhlcikgdG8gYmUgYWJsZSB0byBzaGlwIGl0IHRvIHRoZSBkcml2ZXIuIEZvcgorUElPIGRyaXZlcnMgKG9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJldmVydCB0byBQSU8gdHJhbnNmZXIgb25jZSBpbiBhCit3aGlsZSAoSURFIGZvciBleGFtcGxlKSksIHdoZXJlIHRoZSBDUFUgaXMgZG9pbmcgdGhlIGFjdHVhbCBkYXRhCit0cmFuc2ZlciBhIHZpcnR1YWwgbWFwcGluZyBpcyBuZWVkZWQuIElmIHRoZSBkcml2ZXIgc3VwcG9ydHMgaGlnaG1lbSBJL08sCisoU2VjIDEuMSwgKGlpKSApIGl0IG5lZWRzIHRvIHVzZSBfX2Jpb19rbWFwX2F0b21pYyBhbmQgYmlvX2ttYXBfaXJxIHRvCit0ZW1wb3JhcmlseSBtYXAgYSBiaW8gaW50byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorCisKKzguIFByaW9yL1JlbGF0ZWQvSW1wYWN0ZWQgcGF0Y2hlcworCis4LjEuIEVhcmxpZXIga2lvYnVmIHBhdGNoZXMgKHNjdC9heGJvZS9jaGFpdC9oY2gvbWtwKQorLSBvcmlnIGtpb2J1ZiAmIHJhdyBpL28gcGF0Y2hlcyAobm93IGluIDIuNCB0cmVlKQorLSBkaXJlY3Qga2lvYnVmIGJhc2VkIGkvbyB0byBkZXZpY2VzIChubyBpbnRlcm1lZGlhdGUgYmgncykKKy0gcGFnZSBpL28gdXNpbmcga2lvYnVmCistIGtpb2J1ZiBzcGxpdHRpbmcgZm9yIGx2bSAobWtwKQorLSBlbGV2YXRvciBzdXBwb3J0IGZvciBraW9idWYgcmVxdWVzdCBtZXJnaW5nIChheGJvZSkKKzguMi4gWmVyby1jb3B5IG5ldHdvcmtpbmcgKERhdmUgTWlsbGVyKQorOC4zLiBTR0kgWEZTIC0gcGFnZWJ1ZiBwYXRjaGVzIC0gdXNlIG9mIGtpb2J1ZnMKKzguNC4gTXVsdGktcGFnZSBwaW9lbnQgcGF0Y2ggZm9yIGJpbyAoQ2hyaXN0b3BoIEhlbGx3aWcpCis4LjUuIERpcmVjdCBpL28gaW1wbGVtZW50YXRpb24gKEFuZHJlYSBBcmNhbmdlbGkpIHNpbmNlIDIuNC4xMC1wcmUxMQorOC42LiBBc3luYyBpL28gaW1wbGVtZW50YXRpb24gcGF0Y2ggKEJlbiBMYUhhaXNlKQorOC43LiBFVk1TIGxheWVyaW5nIGRlc2lnbiAoSUJNIEVWTVMgdGVhbSkKKzguOC4gTGFyZ2VyIHBhZ2UgY2FjaGUgc2l6ZSBwYXRjaCAoQmVuIExhSGFpc2UpIGFuZAorICAgICBMYXJnZSBwYWdlIHNpemUgKERhbmllbCBQaGlsbGlwcykKKyAgICA9PiBsYXJnZXIgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkgYnVmZmVycworOC45LiBWTSByZXNlcnZhdGlvbnMgcGF0Y2ggKEJlbiBMYUhhaXNlKQorOC4xMC4gV3JpdGUgY2x1c3RlcmluZyBwYXRjaGVzID8gKE1hcmNlbG8vUXVpbnRlbGEvUmllbCA/KQorOC4xMS4gQmxvY2sgZGV2aWNlIGluIHBhZ2UgY2FjaGUgcGF0Y2ggKEFuZHJlYSBBcmNoYW5nZWxpKSAtIG5vdyBpbiAyLjQuMTArCis4LjEyLiBNdWx0aXBsZSBibG9jay1zaXplIHRyYW5zZmVycyBmb3IgZmFzdGVyIHJhdyBpL28gKFNoYWlsYWJoIE5hZ2FyLAorICAgICAgQmFkYXJpKQorOC4xMyAgUHJpb3JpdHkgYmFzZWQgaS9vIHNjaGVkdWxlciAtIHByZXBhdGNoZXMgKEFyamFuIHZhbiBkZSBWZW4pCis4LjE0ICBJREUgVGFza2ZpbGUgaS9vIHBhdGNoIChBbmRyZSBIZWRyaWNrKQorOC4xNSAgTXVsdGktcGFnZSB3cml0ZW91dCBhbmQgcmVhZGFoZWFkIHBhdGNoZXMgKEFuZHJldyBNb3J0b24pCis4LjE2ICBEaXJlY3QgaS9vIHBhdGNoZXMgZm9yIDIuNSB1c2luZyBrdmVjIGFuZCBiaW8gKEJhZGFyaSBQdWxhdmFydGh5KQorCis5LiBPdGhlciBSZWZlcmVuY2VzOgorCis5LjEgVGhlIFNwbGljZSBJL08gTW9kZWwgLSBMYXJyeSBNY1ZveSAoYW5kIHN1YnNlcXVlbnQgZGlzY3Vzc2lvbnMgb24gbGttbCwKK2FuZCBMaW51cycgY29tbWVudHMgLSBKYW4gMjAwMSkKKzkuMiBEaXNjdXNzaW9ucyBhYm91dCBraW9idWYgYW5kIGJoIGRlc2lnbiBvbiBsa21sIGJldHdlZW4gc2N0LCBsaW51cywgYWxhbgorZXQgYWwgLSBGZWItTWFyY2ggMjAwMSAobWFueSBvZiB0aGUgaW5pdGlhbCB0aG91Z2h0cyB0aGF0IGxlZCB0byBiaW8gd2VyZQorYnJvdWdodCB1cCBpbiB0aGlzIGRpc2N1c2lvbiB0aHJlYWQpCis5LjMgRGlzY3Vzc2lvbnMgb24gbWVtcG9vbCBvbiBsa21sIC0gRGVjIDIwMDEuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svZGVhZGxpbmUtaW9zY2hlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MThiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQudHh0CkBAIC0wLDAgKzEsNzggQEAKK0RlYWRsaW5lIElPIHNjaGVkdWxlciB0dW5hYmxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgbGl0dGxlIGZpbGUgYXR0ZW1wdHMgdG8gZG9jdW1lbnQgaG93IHRoZSBkZWFkbGluZSBpbyBzY2hlZHVsZXIgd29ya3MuCitJbiBwYXJ0aWN1bGFyLCBpdCB3aWxsIGNsYXJpZnkgdGhlIG1lYW5pbmcgb2YgdGhlIGV4cG9zZWQgdHVuYWJsZXMgdGhhdCBtYXkgYmUKK29mIGludGVyZXN0IHRvIHBvd2VyIHVzZXJzLgorCitFYWNoIGlvIHF1ZXVlIGhhcyBhIHNldCBvZiBpbyBzY2hlZHVsZXIgdHVuYWJsZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGVzZQordHVuYWJsZXMgY29udHJvbCBob3cgdGhlIGlvIHNjaGVkdWxlciB3b3Jrcy4gWW91IGNhbiBmaW5kIHRoZXNlIGVudHJpZXMKK2luOgorCisvc3lzL2Jsb2NrLzxkZXZpY2U+L3F1ZXVlL2lvc2NoZWQKKworYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBzeXNmcyBtb3VudGVkIG9uIC9zeXMuIElmIHlvdSBkb24ndCBoYXZlIHN5c2ZzIG1vdW50ZWQsCit5b3UgY2FuIGRvIHNvIGJ5IHR5cGluZzoKKworIyBtb3VudCBub25lIC9zeXMgLXQgc3lzZnMKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKK3JlYWRfZXhwaXJlCShpbiBtcykKKy0tLS0tLS0tLS0tCisKK1RoZSBnb2FsIG9mIHRoZSBkZWFkbGluZSBpbyBzY2hlZHVsZXIgaXMgdG8gYXR0ZW1wdCB0byBndWFyZW50ZWUgYSBzdGFydAorc2VydmljZSB0aW1lIGZvciBhIHJlcXVlc3QuIEFzIHdlIGZvY3VzIG1haW5seSBvbiByZWFkIGxhdGVuY2llcywgdGhpcyBpcwordHVuYWJsZS4gV2hlbiBhIHJlYWQgcmVxdWVzdCBmaXJzdCBlbnRlcnMgdGhlIGlvIHNjaGVkdWxlciwgaXQgaXMgYXNzaWduZWQKK2EgZGVhZGxpbmUgdGhhdCBpcyB0aGUgY3VycmVudCB0aW1lICsgdGhlIHJlYWRfZXhwaXJlIHZhbHVlIGluIHVuaXRzIG9mCittaWxpc2Vjb25kcy4KKworCit3cml0ZV9leHBpcmUJKGluIG1zKQorLS0tLS0tLS0tLS0KKworU2ltaWxhciB0byByZWFkX2V4cGlyZSBtZW50aW9uZWQgYWJvdmUsIGJ1dCBmb3Igd3JpdGVzLgorCisKK2ZpZm9fYmF0Y2gKKy0tLS0tLS0tLS0KKworV2hlbiBhIHJlYWQgcmVxdWVzdCBleHBpcmVzIGl0cyBkZWFkbGluZSwgd2UgbXVzdCBtb3ZlIHNvbWUgcmVxdWVzdHMgZnJvbQordGhlIHNvcnRlZCBpbyBzY2hlZHVsZXIgbGlzdCB0byB0aGUgYmxvY2sgZGV2aWNlIGRpc3BhdGNoIHF1ZXVlLiBmaWZvX2JhdGNoCitjb250cm9scyBob3cgbWFueSByZXF1ZXN0cyB3ZSBtb3ZlLCBiYXNlZCBvbiB0aGUgY29zdCBvZiBlYWNoIHJlcXVlc3QuIEEKK3JlcXVlc3QgaXMgZWl0aGVyIHF1YWxpZmllZCBhcyBhIHNlZWsgb3IgYSBzdHJlYW0uIFRoZSBpbyBzY2hlZHVsZXIga25vd3MKK3RoZSBsYXN0IHJlcXVlc3QgdGhhdCB3YXMgc2VydmljZWQgYnkgdGhlIGRyaXZlIChvciB3aWxsIGJlIHNlcnZpY2VkIHJpZ2h0CitiZWZvcmUgdGhpcyBvbmUpLiBTZWUgc2Vla19jb3N0IGFuZCBzdHJlYW1fdW5pdC4KKworCit3cml0ZV9zdGFydmVkCShudW1iZXIgb2YgZGlzcGF0Y2hlcykKKy0tLS0tLS0tLS0tLS0KKworV2hlbiB3ZSBoYXZlIHRvIG1vdmUgcmVxdWVzdHMgZnJvbSB0aGUgaW8gc2NoZWR1bGVyIHF1ZXVlIHRvIHRoZSBibG9jaworZGV2aWNlIGRpc3BhdGNoIHF1ZXVlLCB3ZSBhbHdheXMgZ2l2ZSBhIHByZWZlcmVuY2UgdG8gcmVhZHMuIEhvd2V2ZXIsIHdlCitkb24ndCB3YW50IHRvIHN0YXJ2ZSB3cml0ZXMgaW5kZWZpbml0ZWx5IGVpdGhlci4gU28gd3JpdGVzX3N0YXJ2ZWQgY29udHJvbHMKK2hvdyBtYW55IHRpbWVzIHdlIGdpdmUgcHJlZmVyZW5jZSB0byByZWFkcyBvdmVyIHdyaXRlcy4gV2hlbiB0aGF0IGhhcyBiZWVuCitkb25lIHdyaXRlc19zdGFydmVkIG51bWJlciBvZiB0aW1lcywgd2UgZGlzcGF0Y2ggc29tZSB3cml0ZXMgYmFzZWQgb24gdGhlCitzYW1lIGNyaXRlcmlhIGFzIHJlYWRzLgorCisKK2Zyb250X21lcmdlcwkoYm9vbCkKKy0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgaXQgaGFwcGVucyB0aGF0IGEgcmVxdWVzdCBlbnRlcnMgdGhlIGlvIHNjaGVkdWxlciB0aGF0IGlzIGNvbnRpZ2lvdXMKK3dpdGggYSByZXF1ZXN0IHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgcXVldWUuIEVpdGhlciBpdCBmaXRzIGluIHRoZSBiYWNrIG9mIHRoYXQKK3JlcXVlc3QsIG9yIGl0IGZpdHMgYXQgdGhlIGZyb250LiBUaGF0IGlzIGNhbGxlZCBlaXRoZXIgYSBiYWNrIG1lcmdlIGNhbmRpZGF0ZQorb3IgYSBmcm9udCBtZXJnZSBjYW5kaWRhdGUuIER1ZSB0byB0aGUgd2F5IGZpbGVzIGFyZSB0eXBpY2FsbHkgbGFpZCBvdXQsCitiYWNrIG1lcmdlcyBhcmUgbXVjaCBtb3JlIGNvbW1vbiB0aGFuIGZyb250IG1lcmdlcy4gRm9yIHNvbWUgd29yayBsb2FkcywgeW91CittYXkgZXZlbiBrbm93IHRoYXQgaXQgaXMgYSB3YXN0ZSBvZiB0aW1lIHRvIHNwZW5kIGFueSB0aW1lIGF0dGVtcHRpbmcgdG8KK2Zyb250IG1lcmdlIHJlcXVlc3RzLiBTZXR0aW5nIGZyb250X21lcmdlcyB0byAwIGRpc2FibGVzIHRoaXMgZnVuY3Rpb25hbGl0eS4KK0Zyb250IG1lcmdlcyBtYXkgc3RpbGwgb2NjdXIgZHVlIHRvIHRoZSBjYWNoZWQgbGFzdF9tZXJnZSBoaW50LCBidXQgc2luY2UKK3RoYXQgY29tZXMgYXQgYmFzaWNhbGx5IDAgY29zdCB3ZSBsZWF2ZSB0aGF0IG9uLiBXZSBzaW1wbHkgZGlzYWJsZSB0aGUKK3JidHJlZSBmcm9udCBzZWN0b3IgbG9va3VwIHdoZW4gdGhlIGlvIHNjaGVkdWxlciBtZXJnZSBmdW5jdGlvbiBpcyBjYWxsZWQuCisKKworTm92IDExIDIwMDIsIEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9yZXF1ZXN0LnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svcmVxdWVzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5MjRlMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svcmVxdWVzdC50eHQKQEAgLTAsMCArMSw4OCBAQAorCitzdHJ1Y3QgcmVxdWVzdCBkb2N1bWVudGF0aW9uCisKK0plbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+IDI3LzA1LzAyCisKKzEuMAorSW5kZXgKKworMi4wIFN0cnVjdCByZXF1ZXN0IG1lbWJlcnMgY2xhc3NpZmljYXRpb24KKworCTIuMSBzdHJ1Y3QgcmVxdWVzdCBtZW1iZXJzIGV4cGxhbmF0aW9uCisKKzMuMAorCisKKzIuMAorU2hvcnQgZXhwbGFuYXRpb24gb2YgcmVxdWVzdCBtZW1iZXJzCisKK0NsYXNzaWZpY2F0aW9uIGZsYWdzOgorCisJRAlkcml2ZXIgbWVtYmVyCisJQglibG9jayBsYXllciBtZW1iZXIKKwlJCUkvTyBzY2hlZHVsZXIgbWVtYmVyCisKK1VubGVzcyBhbiBlbnRyeSBjb250YWlucyBhIEQgY2xhc3NpZmljYXRpb24sIGEgZGV2aWNlIGRyaXZlciBtdXN0IG5vdCBhY2Nlc3MKK3RoaXMgbWVtYmVyLiBTb21lIG1lbWJlcnMgbWF5IGNvbnRhaW4gRCBjbGFzc2lmaWNhdGlvbnMsIGJ1dCBzaG91bGQgb25seSBiZQorYWNjZXNzIHRocm91Z2ggY2VydGFpbiBtYWNyb3Mgb3IgZnVuY3Rpb25zIChlZyAtPmZsYWdzKS4KKworPGxpbnV4L2Jsa2Rldi5oPgorCisyLjEKK01lbWJlcgkJCQlGbGFnCUNvbW1lbnQKKy0tLS0tLQkJCQktLS0tCS0tLS0tLS0KKworc3RydWN0IGxpc3RfaGVhZCBxdWV1ZWxpc3QJQkkJT3JnYW5pemF0aW9uIG9uIHZhcmlvdXMgaW50ZXJuYWwKKwkJCQkJcXVldWVzCisKK3ZvaWQgKmVsZXZhdG9yX3ByaXZhdGUJCUkJSS9PIHNjaGVkdWxlciBwcml2YXRlIGRhdGEKKwordW5zaWduZWQgY2hhciBjbWRbMTZdCQlECURyaXZlciBjYW4gdXNlIHRoaXMgZm9yIHNldHRpbmcgdXAKKwkJCQkJYSBjZGIgYmVmb3JlIGV4ZWN1dGlvbiwgc2VlCisJCQkJCWJsa19xdWV1ZV9wcmVwX3JxCisKK3Vuc2lnbmVkIGxvbmcgZmxhZ3MJCURCSQlDb250YWlucyBpbmZvIGFib3V0IGRhdGEgZGlyZWN0aW9uLAorCQkJCQlyZXF1ZXN0IHR5cGUsIGV0Yy4KKworaW50IHJxX3N0YXR1cwkJCUQJUmVxdWVzdCBzdGF0dXMgYml0cworCitrZGV2X3QgcnFfZGV2CQkJREJJCVRhcmdldCBkZXZpY2UKKworaW50IGVycm9ycwkJCURCCUVycm9yIGNvdW50cworCitzZWN0b3JfdCBzZWN0b3IJCQlEQkkJVGFyZ2V0IGxvY2F0aW9uCisKK3Vuc2lnbmVkIGxvbmcgaGFyZF9ucl9zZWN0b3JzCUIJVXNlZCB0byBrZWVwIHNlY3RvciBzYW5lCisKK3Vuc2lnbmVkIGxvbmcgbnJfc2VjdG9ycwlEQkkJVG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgaW4gcmVxdWVzdAorCit1bnNpZ25lZCBsb25nIGhhcmRfbnJfc2VjdG9ycwlCCVVzZWQgdG8ga2VlcCBucl9zZWN0b3JzIHNhbmUKKwordW5zaWduZWQgc2hvcnQgbnJfcGh5c19zZWdtZW50cwlEQglOdW1iZXIgb2YgcGh5c2ljYWwgc2NhdHRlciBnYXRoZXIKKwkJCQkJc2VnbWVudHMgaW4gYSByZXF1ZXN0CisKK3Vuc2lnbmVkIHNob3J0IG5yX2h3X3NlZ21lbnRzCURCCU51bWJlciBvZiBoYXJkd2FyZSBzY2F0dGVyIGdhdGhlcgorCQkJCQlzZWdtZW50cyBpbiBhIHJlcXVlc3QKKwordW5zaWduZWQgaW50IGN1cnJlbnRfbnJfc2VjdG9ycwlEQglOdW1iZXIgb2Ygc2VjdG9ycyBpbiBmaXJzdCBzZWdtZW50CisJCQkJCW9mIHJlcXVlc3QKKwordW5zaWduZWQgaW50IGhhcmRfY3VyX3NlY3RvcnMJQglVc2VkIHRvIGtlZXAgY3VycmVudF9ucl9zZWN0b3JzIHNhbmUKKworaW50IHRhZwkJCQlEQglUQ1EgdGFnLCBpZiBhc3NpZ25lZAorCit2b2lkICpzcGVjaWFsCQkJRAlGcmVlIHRvIGJlIHVzZWQgYnkgZHJpdmVyCisKK2NoYXIgKmJ1ZmZlcgkJCUQJTWFwIG9mIGZpcnN0IHNlZ21lbnQsIGFsc28gc2VlCisJCQkJCXNlY3Rpb24gb24gYm91bmNpbmcgU0VDVElPTgorCitzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZwlECUNhbiBiZSB1c2VkIGJ5IGRyaXZlciB0byBnZXQgc2lnbmFsbGVkCisJCQkJCW9uIHJlcXVlc3QgY29tcGxldGlvbgorCitzdHJ1Y3QgYmlvICpiaW8JCQlEQkkJRmlyc3QgYmlvIGluIHJlcXVlc3QKKworc3RydWN0IGJpbyAqYmlvdGFpbAkJREJJCUxhc3QgYmlvIGluIHJlcXVlc3QKKworcmVxdWVzdF9xdWV1ZV90ICpxCQlEQglSZXF1ZXN0IHF1ZXVlIHRoaXMgcmVxdWVzdCBiZWxvbmdzIHRvCisKK3N0cnVjdCByZXF1ZXN0X2xpc3QgKnJsCQlCCVJlcXVlc3QgbGlzdCB0aGlzIHJlcXVlc3QgY2FtZSBmcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dCBiL0RvY3VtZW50YXRpb24vY2FjaGV0bGIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzJmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dApAQCAtMCwwICsxLDM4NCBAQAorCQlDYWNoZSBhbmQgVExCIEZsdXNoaW5nCisJCSAgICAgVW5kZXIgTGludXgKKworCSAgICBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjYWNoZS90bGIgZmx1c2hpbmcgaW50ZXJmYWNlcyBjYWxsZWQKK2J5IHRoZSBMaW51eCBWTSBzdWJzeXN0ZW0uICBJdCBlbnVtZXJhdGVzIG92ZXIgZWFjaCBpbnRlcmZhY2UsCitkZXNjcmliZXMgaXQncyBpbnRlbmRlZCBwdXJwb3NlLCBhbmQgd2hhdCBzaWRlIGVmZmVjdCBpcyBleHBlY3RlZAorYWZ0ZXIgdGhlIGludGVyZmFjZSBpcyBpbnZva2VkLgorCitUaGUgc2lkZSBlZmZlY3RzIGRlc2NyaWJlZCBiZWxvdyBhcmUgc3RhdGVkIGZvciBhIHVuaXByb2Nlc3NvcgoraW1wbGVtZW50YXRpb24sIGFuZCB3aGF0IGlzIHRvIGhhcHBlbiBvbiB0aGF0IHNpbmdsZSBwcm9jZXNzb3IuICBUaGUKK1NNUCBjYXNlcyBhcmUgYSBzaW1wbGUgZXh0ZW5zaW9uLCBpbiB0aGF0IHlvdSBqdXN0IGV4dGVuZCB0aGUKK2RlZmluaXRpb24gc3VjaCB0aGF0IHRoZSBzaWRlIGVmZmVjdCBmb3IgYSBwYXJ0aWN1bGFyIGludGVyZmFjZSBvY2N1cnMKK29uIGFsbCBwcm9jZXNzb3JzIGluIHRoZSBzeXN0ZW0uICBEb24ndCBsZXQgdGhpcyBzY2FyZSB5b3UgaW50bwordGhpbmtpbmcgU01QIGNhY2hlL3RsYiBmbHVzaGluZyBtdXN0IGJlIHNvIGluZWZmaWNpZW50LCB0aGlzIGlzIGluCitmYWN0IGFuIGFyZWEgd2hlcmUgbWFueSBvcHRpbWl6YXRpb25zIGFyZSBwb3NzaWJsZS4gIEZvciBleGFtcGxlLAoraWYgaXQgY2FuIGJlIHByb3ZlbiB0aGF0IGEgdXNlciBhZGRyZXNzIHNwYWNlIGhhcyBuZXZlciBleGVjdXRlZAorb24gYSBjcHUgKHNlZSB2bWEtPmNwdV92bV9tYXNrKSwgb25lIG5lZWQgbm90IHBlcmZvcm0gYSBmbHVzaAorZm9yIHRoaXMgYWRkcmVzcyBzcGFjZSBvbiB0aGF0IGNwdS4KKworRmlyc3QsIHRoZSBUTEIgZmx1c2hpbmcgaW50ZXJmYWNlcywgc2luY2UgdGhleSBhcmUgdGhlIHNpbXBsZXN0LiAgVGhlCisiVExCIiBpcyBhYnN0cmFjdGVkIHVuZGVyIExpbnV4IGFzIHNvbWV0aGluZyB0aGUgY3B1IHVzZXMgdG8gY2FjaGUKK3ZpcnR1YWwtLT5waHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9ucyBvYnRhaW5lZCBmcm9tIHRoZSBzb2Z0d2FyZQorcGFnZSB0YWJsZXMuICBNZWFuaW5nIHRoYXQgaWYgdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGVzIGNoYW5nZSwgaXQgaXMKK3Bvc3NpYmxlIGZvciBzdGFsZSB0cmFuc2xhdGlvbnMgdG8gZXhpc3QgaW4gdGhpcyAiVExCIiBjYWNoZS4KK1RoZXJlZm9yZSB3aGVuIHNvZnR3YXJlIHBhZ2UgdGFibGUgY2hhbmdlcyBvY2N1ciwgdGhlIGtlcm5lbCB3aWxsCitpbnZva2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgZmx1c2ggbWV0aG9kcyBfYWZ0ZXJfIHRoZSBwYWdlIHRhYmxlCitjaGFuZ2VzIG9jY3VyOgorCisxKSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKKworCVRoZSBtb3N0IHNldmVyZSBmbHVzaCBvZiBhbGwuICBBZnRlciB0aGlzIGludGVyZmFjZSBydW5zLAorCWFueSBwcmV2aW91cyBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbiB3aGF0c29ldmVyIHdpbGwgYmUKKwl2aXNpYmxlIHRvIHRoZSBjcHUuCisKKwlUaGlzIGlzIHVzdWFsbHkgaW52b2tlZCB3aGVuIHRoZSBrZXJuZWwgcGFnZSB0YWJsZXMgYXJlCisJY2hhbmdlZCwgc2luY2Ugc3VjaCB0cmFuc2xhdGlvbnMgYXJlICJnbG9iYWwiIGluIG5hdHVyZS4KKworMikgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCisKKwlUaGlzIGludGVyZmFjZSBmbHVzaGVzIGFuIGVudGlyZSB1c2VyIGFkZHJlc3Mgc3BhY2UgZnJvbQorCXRoZSBUTEIuICBBZnRlciBydW5uaW5nLCB0aGlzIGludGVyZmFjZSBtdXN0IG1ha2Ugc3VyZSB0aGF0CisJYW55IHByZXZpb3VzIHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucyBmb3IgdGhlIGFkZHJlc3Mgc3BhY2UKKwknbW0nIHdpbGwgYmUgdmlzaWJsZSB0byB0aGUgY3B1LiAgVGhhdCBpcywgYWZ0ZXIgcnVubmluZywKKwl0aGVyZSB3aWxsIGJlIG5vIGVudHJpZXMgaW4gdGhlIFRMQiBmb3IgJ21tJy4KKworCVRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gaGFuZGxlIHdob2xlIGFkZHJlc3Mgc3BhY2UKKwlwYWdlIHRhYmxlIG9wZXJhdGlvbnMgc3VjaCBhcyB3aGF0IGhhcHBlbnMgZHVyaW5nCisJZm9yaywgYW5kIGV4ZWMuCisKKwlQbGF0Zm9ybSBkZXZlbG9wZXJzIG5vdGUgdGhhdCBnZW5lcmljIGNvZGUgd2lsbCBhbHdheXMKKwlpbnZva2UgdGhpcyBpbnRlcmZhY2Ugd2l0aG91dCBtbS0+cGFnZV90YWJsZV9sb2NrIGhlbGQuCisKKzMpIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCisKKwlIZXJlIHdlIGFyZSBmbHVzaGluZyBhIHNwZWNpZmljIHJhbmdlIG9mICh1c2VyKSB2aXJ0dWFsCisJYWRkcmVzcyB0cmFuc2xhdGlvbnMgZnJvbSB0aGUgVExCLiAgQWZ0ZXIgcnVubmluZywgdGhpcworCWludGVyZmFjZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IGFueSBwcmV2aW91cyBwYWdlIHRhYmxlCisJbW9kaWZpY2F0aW9ucyBmb3IgdGhlIGFkZHJlc3Mgc3BhY2UgJ3ZtYS0+dm1fbW0nIGluIHRoZSByYW5nZQorCSdzdGFydCcgdG8gJ2VuZC0xJyB3aWxsIGJlIHZpc2libGUgdG8gdGhlIGNwdS4gIFRoYXQgaXMsIGFmdGVyCisJcnVubmluZywgaGVyZSB3aWxsIGJlIG5vIGVudHJpZXMgaW4gdGhlIFRMQiBmb3IgJ21tJyBmb3IKKwl2aXJ0dWFsIGFkZHJlc3NlcyBpbiB0aGUgcmFuZ2UgJ3N0YXJ0JyB0byAnZW5kLTEnLgorCisJVGhlICJ2bWEiIGlzIHRoZSBiYWNraW5nIHN0b3JlIGJlaW5nIHVzZWQgZm9yIHRoZSByZWdpb24uCisJUHJpbWFyaWx5LCB0aGlzIGlzIHVzZWQgZm9yIG11bm1hcCgpIHR5cGUgb3BlcmF0aW9ucy4KKworCVRoZSBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgaW4gaG9wZXMgdGhhdCB0aGUgcG9ydCBjYW4gZmluZAorCWEgc3VpdGFibHkgZWZmaWNpZW50IG1ldGhvZCBmb3IgcmVtb3ZpbmcgbXVsdGlwbGUgcGFnZQorCXNpemVkIHRyYW5zbGF0aW9ucyBmcm9tIHRoZSBUTEIsIGluc3RlYWQgb2YgaGF2aW5nIHRoZSBrZXJuZWwKKwljYWxsIGZsdXNoX3RsYl9wYWdlIChzZWUgYmVsb3cpIGZvciBlYWNoIGVudHJ5IHdoaWNoIG1heSBiZQorCW1vZGlmaWVkLgorCisJUGxhdGZvcm0gZGV2ZWxvcGVycyBub3RlIHRoYXQgZ2VuZXJpYyBjb2RlIHdpbGwgYWx3YXlzCisJaW52b2tlIHRoaXMgaW50ZXJmYWNlIHdpdGggbW0tPnBhZ2VfdGFibGVfbG9jayBoZWxkLgorCis0KSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCisKKwlUaGlzIHRpbWUgd2UgbmVlZCB0byByZW1vdmUgdGhlIFBBR0VfU0laRSBzaXplZCB0cmFuc2xhdGlvbgorCWZyb20gdGhlIFRMQi4gIFRoZSAndm1hJyBpcyB0aGUgYmFja2luZyBzdHJ1Y3R1cmUgdXNlZCBieQorCUxpbnV4IHRvIGtlZXAgdHJhY2sgb2YgbW1hcCdkIHJlZ2lvbnMgZm9yIGEgcHJvY2VzcywgdGhlCisJYWRkcmVzcyBzcGFjZSBpcyBhdmFpbGFibGUgdmlhIHZtYS0+dm1fbW0uICBBbHNvLCBvbmUgbWF5CisJdGVzdCAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpIHRvIHNlZSBpZiB0aGlzIHJlZ2lvbiBpcworCWV4ZWN1dGFibGUgKGFuZCB0aHVzIGNvdWxkIGJlIGluIHRoZSAnaW5zdHJ1Y3Rpb24gVExCJyBpbgorCXNwbGl0LXRsYiB0eXBlIHNldHVwcykuCisKKwlBZnRlciBydW5uaW5nLCB0aGlzIGludGVyZmFjZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IGFueSBwcmV2aW91cworCXBhZ2UgdGFibGUgbW9kaWZpY2F0aW9uIGZvciBhZGRyZXNzIHNwYWNlICd2bWEtPnZtX21tJyBmb3IKKwl1c2VyIHZpcnR1YWwgYWRkcmVzcyAnYWRkcicgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBjcHUuICBUaGF0CisJaXMsIGFmdGVyIHJ1bm5pbmcsIHRoZXJlIHdpbGwgYmUgbm8gZW50cmllcyBpbiB0aGUgVExCIGZvcgorCSd2bWEtPnZtX21tJyBmb3IgdmlydHVhbCBhZGRyZXNzICdhZGRyJy4KKworCVRoaXMgaXMgdXNlZCBwcmltYXJpbHkgZHVyaW5nIGZhdWx0IHByb2Nlc3NpbmcuCisKKwlQbGF0Zm9ybSBkZXZlbG9wZXJzIG5vdGUgdGhhdCBnZW5lcmljIGNvZGUgd2lsbCBhbHdheXMKKwlpbnZva2UgdGhpcyBpbnRlcmZhY2Ugd2l0aCBtbS0+cGFnZV90YWJsZV9sb2NrIGhlbGQuCisKKzUpIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCisKKyAgIFRoZSBzb2Z0d2FyZSBwYWdlIHRhYmxlcyBmb3IgYWRkcmVzcyBzcGFjZSAnbW0nIGZvciB2aXJ0dWFsCisgICBhZGRyZXNzZXMgaW4gdGhlIHJhbmdlICdzdGFydCcgdG8gJ2VuZC0xJyBhcmUgYmVpbmcgdG9ybiBkb3duLgorCisgICBTb21lIHBsYXRmb3JtcyBjYWNoZSB0aGUgbG93ZXN0IGxldmVsIG9mIHRoZSBzb2Z0d2FyZSBwYWdlIHRhYmxlcworICAgaW4gYSBsaW5lYXIgdmlydHVhbGx5IG1hcHBlZCBhcnJheSwgdG8gbWFrZSBUTEIgbWlzcyBwcm9jZXNzaW5nCisgICBtb3JlIGVmZmljaWVudC4gIE9uIHN1Y2ggcGxhdGZvcm1zLCBzaW5jZSB0aGUgVExCIGlzIGNhY2hpbmcgdGhlCisgICBzb2Z0d2FyZSBwYWdlIHRhYmxlIHN0cnVjdHVyZSwgaXQgbmVlZHMgdG8gYmUgZmx1c2hlZCB3aGVuIHBhcnRzCisgICBvZiB0aGUgc29mdHdhcmUgcGFnZSB0YWJsZSB0cmVlIGFyZSB1bmxpbmtlZC9mcmVlZC4KKworICAgU3BhcmM2NCBpcyBvbmUgZXhhbXBsZSBvZiBhIHBsYXRmb3JtIHdoaWNoIGRvZXMgdGhpcy4KKworICAgVXN1YWxseSwgd2hlbiBtdW5tYXAoKSdpbmcgYW4gYXJlYSBvZiB1c2VyIHZpcnR1YWwgYWRkcmVzcworICAgc3BhY2UsIHRoZSBrZXJuZWwgbGVhdmVzIHRoZSBwYWdlIHRhYmxlIHBhcnRzIGFyb3VuZCBhbmQganVzdAorICAgbWFya3MgdGhlIGluZGl2aWR1YWwgcHRlJ3MgYXMgaW52YWxpZC4gIEhvd2V2ZXIsIGlmIHZlcnkgbGFyZ2UKKyAgIHBvcnRpb25zIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGFyZSB1bm1hcHBlZCwgdGhlIGtlcm5lbCBmcmVlcyB1cAorICAgdGhvc2UgcG9ydGlvbnMgb2YgdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGVzIHRvIHByZXZlbnQgcG90ZW50aWFsCisgICBleGNlc3NpdmUga2VybmVsIG1lbW9yeSB1c2FnZSBjYXVzZWQgYnkgZXJyYXRpYyBtbWFwL21tdW5tYXAKKyAgIHNlcXVlbmNlcy4gIEl0IGlzIGF0IHRoZXNlIHRpbWVzIHRoYXQgZmx1c2hfdGxiX3BndGFibGVzIHdpbGwKKyAgIGJlIGludm9rZWQuCisKKzYpIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKKworCUF0IHRoZSBlbmQgb2YgZXZlcnkgcGFnZSBmYXVsdCwgdGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8KKwl0ZWxsIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSB0aGF0IGEgdHJhbnNsYXRpb24KKwlkZXNjcmliZWQgYnkgInB0ZSIgbm93IGV4aXN0cyBhdCB2aXJ0dWFsIGFkZHJlc3MgImFkZHJlc3MiCisJZm9yIGFkZHJlc3Mgc3BhY2UgInZtYS0+dm1fbW0iLCBpbiB0aGUgc29mdHdhcmUgcGFnZSB0YWJsZXMuCisKKwlBIHBvcnQgbWF5IHVzZSB0aGlzIGluZm9ybWF0aW9uIGluIGFueSB3YXkgaXQgc28gY2hvb3Nlcy4KKwlGb3IgZXhhbXBsZSwgaXQgY291bGQgdXNlIHRoaXMgZXZlbnQgdG8gcHJlLWxvYWQgVExCCisJdHJhbnNsYXRpb25zIGZvciBzb2Z0d2FyZSBtYW5hZ2VkIFRMQiBjb25maWd1cmF0aW9ucy4KKwlUaGUgc3BhcmM2NCBwb3J0IGN1cnJlbnRseSBkb2VzIHRoaXMuCisKKzcpIHZvaWQgdGxiX21pZ3JhdGVfZmluaXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQorCisJVGhpcyBpbnRlcmZhY2UgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYW4gZXhwbGljaXQKKwlwcm9jZXNzIG1pZ3JhdGlvbi4gVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBob29rCisJdG8gYWxsb3cgYSBwbGF0Zm9ybSB0byB1cGRhdGUgVExCIG9yIGNvbnRleHQtc3BlY2lmaWMKKwlpbmZvcm1hdGlvbiBmb3IgdGhlIGFkZHJlc3Mgc3BhY2UuCisKKwlUaGUgaWE2NCBzbjIgcGxhdGZvcm0gaXMgb25lIGV4YW1wbGUgb2YgYSBwbGF0Zm9ybQorCXRoYXQgdXNlcyB0aGlzIGludGVyZmFjZS4KKworOCkgdm9pZCBsYXp5X21tdV9wcm90X3VwZGF0ZShwdGVfdCBwdGUpCisJVGhpcyBpbnRlcmZhY2UgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBwcm90ZWN0aW9uIG9uCisJYW55IHVzZXIgUFRFcyBjaGFuZ2UuICBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIG5vdGlmaWNhdGlvbgorCXRvIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlIHRvIHRha2UgYXBwcm9waWF0ZSBhY3Rpb24uCisKKworTmV4dCwgd2UgaGF2ZSB0aGUgY2FjaGUgZmx1c2hpbmcgaW50ZXJmYWNlcy4gIEluIGdlbmVyYWwsIHdoZW4gTGludXgKK2lzIGNoYW5naW5nIGFuIGV4aXN0aW5nIHZpcnR1YWwtLT5waHlzaWNhbCBtYXBwaW5nIHRvIGEgbmV3IHZhbHVlLAordGhlIHNlcXVlbmNlIHdpbGwgYmUgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisKKwkxKSBmbHVzaF9jYWNoZV9tbShtbSk7CisJICAgY2hhbmdlX2FsbF9wYWdlX3RhYmxlc19vZihtbSk7CisJICAgZmx1c2hfdGxiX21tKG1tKTsKKworCTIpIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7CisJICAgY2hhbmdlX3JhbmdlX29mX3BhZ2VfdGFibGVzKG1tLCBzdGFydCwgZW5kKTsKKwkgICBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTsKKworCTMpIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwZm4pOworCSAgIHNldF9wdGUocHRlX3BvaW50ZXIsIG5ld19wdGVfdmFsKTsKKwkgICBmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHIpOworCitUaGUgY2FjaGUgbGV2ZWwgZmx1c2ggd2lsbCBhbHdheXMgYmUgZmlyc3QsIGJlY2F1c2UgdGhpcyBhbGxvd3MKK3VzIHRvIHByb3Blcmx5IGhhbmRsZSBzeXN0ZW1zIHdob3NlIGNhY2hlcyBhcmUgc3RyaWN0IGFuZCByZXF1aXJlCithIHZpcnR1YWwtLT5waHlzaWNhbCB0cmFuc2xhdGlvbiB0byBleGlzdCBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MKK3doZW4gdGhhdCB2aXJ0dWFsIGFkZHJlc3MgaXMgZmx1c2hlZCBmcm9tIHRoZSBjYWNoZS4gIFRoZSBIeXBlclNwYXJjCitjcHUgaXMgb25lIHN1Y2ggY3B1IHdpdGggdGhpcyBhdHRyaWJ1dGUuCisKK1RoZSBjYWNoZSBmbHVzaGluZyByb3V0aW5lcyBiZWxvdyBuZWVkIG9ubHkgZGVhbCB3aXRoIGNhY2hlIGZsdXNoaW5nCit0byB0aGUgZXh0ZW50IHRoYXQgaXQgaXMgbmVjZXNzYXJ5IGZvciBhIHBhcnRpY3VsYXIgY3B1LiAgTW9zdGx5LAordGhlc2Ugcm91dGluZXMgbXVzdCBiZSBpbXBsZW1lbnRlZCBmb3IgY3B1cyB3aGljaCBoYXZlIHZpcnR1YWxseQoraW5kZXhlZCBjYWNoZXMgd2hpY2ggbXVzdCBiZSBmbHVzaGVkIHdoZW4gdmlydHVhbC0tPnBoeXNpY2FsCit0cmFuc2xhdGlvbnMgYXJlIGNoYW5nZWQgb3IgcmVtb3ZlZC4gIFNvLCBmb3IgZXhhbXBsZSwgdGhlIHBoeXNpY2FsbHkKK2luZGV4ZWQgcGh5c2ljYWxseSB0YWdnZWQgY2FjaGVzIG9mIElBMzIgcHJvY2Vzc29ycyBoYXZlIG5vIG5lZWQgdG8KK2ltcGxlbWVudCB0aGVzZSBpbnRlcmZhY2VzIHNpbmNlIHRoZSBjYWNoZXMgYXJlIGZ1bGx5IHN5bmNocm9uaXplZAorYW5kIGhhdmUgbm8gZGVwZW5kZW5jeSBvbiB0cmFuc2xhdGlvbiBpbmZvcm1hdGlvbi4KKworSGVyZSBhcmUgdGhlIHJvdXRpbmVzLCBvbmUgYnkgb25lOgorCisxKSB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQorCisJVGhpcyBpbnRlcmZhY2UgZmx1c2hlcyBhbiBlbnRpcmUgdXNlciBhZGRyZXNzIHNwYWNlIGZyb20KKwl0aGUgY2FjaGVzLiAgVGhhdCBpcywgYWZ0ZXIgcnVubmluZywgdGhlcmUgd2lsbCBiZSBubyBjYWNoZQorCWxpbmVzIGFzc29jaWF0ZWQgd2l0aCAnbW0nLgorCisJVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBoYW5kbGUgd2hvbGUgYWRkcmVzcyBzcGFjZQorCXBhZ2UgdGFibGUgb3BlcmF0aW9ucyBzdWNoIGFzIHdoYXQgaGFwcGVucyBkdXJpbmcKKwlmb3JrLCBleGl0LCBhbmQgZXhlYy4KKworMikgdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCisKKwlIZXJlIHdlIGFyZSBmbHVzaGluZyBhIHNwZWNpZmljIHJhbmdlIG9mICh1c2VyKSB2aXJ0dWFsCisJYWRkcmVzc2VzIGZyb20gdGhlIGNhY2hlLiAgQWZ0ZXIgcnVubmluZywgdGhlcmUgd2lsbCBiZSBubworCWVudHJpZXMgaW4gdGhlIGNhY2hlIGZvciAndm1hLT52bV9tbScgZm9yIHZpcnR1YWwgYWRkcmVzc2VzIGluCisJdGhlIHJhbmdlICdzdGFydCcgdG8gJ2VuZC0xJy4KKworCVRoZSAidm1hIiBpcyB0aGUgYmFja2luZyBzdG9yZSBiZWluZyB1c2VkIGZvciB0aGUgcmVnaW9uLgorCVByaW1hcmlseSwgdGhpcyBpcyB1c2VkIGZvciBtdW5tYXAoKSB0eXBlIG9wZXJhdGlvbnMuCisKKwlUaGUgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIGluIGhvcGVzIHRoYXQgdGhlIHBvcnQgY2FuIGZpbmQKKwlhIHN1aXRhYmx5IGVmZmljaWVudCBtZXRob2QgZm9yIHJlbW92aW5nIG11bHRpcGxlIHBhZ2UKKwlzaXplZCByZWdpb25zIGZyb20gdGhlIGNhY2hlLCBpbnN0ZWFkIG9mIGhhdmluZyB0aGUga2VybmVsCisJY2FsbCBmbHVzaF9jYWNoZV9wYWdlIChzZWUgYmVsb3cpIGZvciBlYWNoIGVudHJ5IHdoaWNoIG1heSBiZQorCW1vZGlmaWVkLgorCiszKSB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pCisKKwlUaGlzIHRpbWUgd2UgbmVlZCB0byByZW1vdmUgYSBQQUdFX1NJWkUgc2l6ZWQgcmFuZ2UKKwlmcm9tIHRoZSBjYWNoZS4gIFRoZSAndm1hJyBpcyB0aGUgYmFja2luZyBzdHJ1Y3R1cmUgdXNlZCBieQorCUxpbnV4IHRvIGtlZXAgdHJhY2sgb2YgbW1hcCdkIHJlZ2lvbnMgZm9yIGEgcHJvY2VzcywgdGhlCisJYWRkcmVzcyBzcGFjZSBpcyBhdmFpbGFibGUgdmlhIHZtYS0+dm1fbW0uICBBbHNvLCBvbmUgbWF5CisJdGVzdCAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpIHRvIHNlZSBpZiB0aGlzIHJlZ2lvbiBpcworCWV4ZWN1dGFibGUgKGFuZCB0aHVzIGNvdWxkIGJlIGluIHRoZSAnaW5zdHJ1Y3Rpb24gY2FjaGUnIGluCisJIkhhcnZhcmQiIHR5cGUgY2FjaGUgbGF5b3V0cykuCisKKwlUaGUgJ3BmbicgaW5kaWNhdGVzIHRoZSBwaHlzaWNhbCBwYWdlIGZyYW1lIChzaGlmdCB0aGlzIHZhbHVlCisJbGVmdCBieSBQQUdFX1NISUZUIHRvIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcykgdGhhdCAnYWRkcicKKwl0cmFuc2xhdGVzIHRvLiAgSXQgaXMgdGhpcyBtYXBwaW5nIHdoaWNoIHNob3VsZCBiZSByZW1vdmVkIGZyb20KKwl0aGUgY2FjaGUuCisKKwlBZnRlciBydW5uaW5nLCB0aGVyZSB3aWxsIGJlIG5vIGVudHJpZXMgaW4gdGhlIGNhY2hlIGZvcgorCSd2bWEtPnZtX21tJyBmb3IgdmlydHVhbCBhZGRyZXNzICdhZGRyJyB3aGljaCB0cmFuc2xhdGVzCisJdG8gJ3BmbicuCisKKwlUaGlzIGlzIHVzZWQgcHJpbWFyaWx5IGR1cmluZyBmYXVsdCBwcm9jZXNzaW5nLgorCis0KSB2b2lkIGZsdXNoX2NhY2hlX2ttYXBzKHZvaWQpCisKKwlUaGlzIHJvdXRpbmUgbmVlZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmIHRoZSBwbGF0Zm9ybSB1dGlsaXplcworCWhpZ2htZW0uICBJdCB3aWxsIGJlIGNhbGxlZCByaWdodCBiZWZvcmUgYWxsIG9mIHRoZSBrbWFwcworCWFyZSBpbnZhbGlkYXRlZC4KKworCUFmdGVyIHJ1bm5pbmcsIHRoZXJlIHdpbGwgYmUgbm8gZW50cmllcyBpbiB0aGUgY2FjaGUgZm9yCisJdGhlIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgUEtNQVBfQUREUigwKSB0bworCVBLTUFQX0FERFIoTEFTVF9QS01BUCkuCisKKwlUaGlzIHJvdXRpbmcgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIGFzbS9oaWdobWVtLmgKKworNSkgdm9pZCBmbHVzaF9jYWNoZV92bWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorICAgdm9pZCBmbHVzaF9jYWNoZV92dW5tYXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCisKKwlIZXJlIGluIHRoZXNlIHR3byBpbnRlcmZhY2VzIHdlIGFyZSBmbHVzaGluZyBhIHNwZWNpZmljIHJhbmdlCisJb2YgKGtlcm5lbCkgdmlydHVhbCBhZGRyZXNzZXMgZnJvbSB0aGUgY2FjaGUuICBBZnRlciBydW5uaW5nLAorCXRoZXJlIHdpbGwgYmUgbm8gZW50cmllcyBpbiB0aGUgY2FjaGUgZm9yIHRoZSBrZXJuZWwgYWRkcmVzcworCXNwYWNlIGZvciB2aXJ0dWFsIGFkZHJlc3NlcyBpbiB0aGUgcmFuZ2UgJ3N0YXJ0JyB0byAnZW5kLTEnLgorCisJVGhlIGZpcnN0IG9mIHRoZXNlIHR3byByb3V0aW5lcyBpcyBpbnZva2VkIGFmdGVyIG1hcF92bV9hcmVhKCkKKwloYXMgaW5zdGFsbGVkIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMuICBUaGUgc2Vjb25kIGlzIGludm9rZWQKKwliZWZvcmUgdW5tYXBfdm1fYXJlYSgpIGRlbGV0ZXMgdGhlIHBhZ2UgdGFibGUgZW50cmllcy4KKworVGhlcmUgZXhpc3RzIGFub3RoZXIgd2hvbGUgY2xhc3Mgb2YgY3B1IGNhY2hlIGlzc3VlcyB3aGljaCBjdXJyZW50bHkKK3JlcXVpcmUgYSB3aG9sZSBkaWZmZXJlbnQgc2V0IG9mIGludGVyZmFjZXMgdG8gaGFuZGxlIHByb3Blcmx5LgorVGhlIGJpZ2dlc3QgcHJvYmxlbSBpcyB0aGF0IG9mIHZpcnR1YWwgYWxpYXNpbmcgaW4gdGhlIGRhdGEgY2FjaGUKK29mIGEgcHJvY2Vzc29yLgorCitJcyB5b3VyIHBvcnQgc3VzY2VwdGlibGUgdG8gdmlydHVhbCBhbGlhc2luZyBpbiBpdCdzIEQtY2FjaGU/CitXZWxsLCBpZiB5b3VyIEQtY2FjaGUgaXMgdmlydHVhbGx5IGluZGV4ZWQsIGlzIGxhcmdlciBpbiBzaXplIHRoYW4KK1BBR0VfU0laRSwgYW5kIGRvZXMgbm90IHByZXZlbnQgbXVsdGlwbGUgY2FjaGUgbGluZXMgZm9yIHRoZSBzYW1lCitwaHlzaWNhbCBhZGRyZXNzIGZyb20gZXhpc3RpbmcgYXQgb25jZSwgeW91IGhhdmUgdGhpcyBwcm9ibGVtLgorCitJZiB5b3VyIEQtY2FjaGUgaGFzIHRoaXMgcHJvYmxlbSwgZmlyc3QgZGVmaW5lIGFzbS9zaG1wYXJhbS5oIFNITUxCQQorcHJvcGVybHksIGl0IHNob3VsZCBlc3NlbnRpYWxseSBiZSB0aGUgc2l6ZSBvZiB5b3VyIHZpcnR1YWxseQorYWRkcmVzc2VkIEQtY2FjaGUgKG9yIGlmIHRoZSBzaXplIGlzIHZhcmlhYmxlLCB0aGUgbGFyZ2VzdCBwb3NzaWJsZQorc2l6ZSkuICBUaGlzIHNldHRpbmcgd2lsbCBmb3JjZSB0aGUgU1lTdiBJUEMgbGF5ZXIgdG8gb25seSBhbGxvdyB1c2VyCitwcm9jZXNzZXMgdG8gbW1hcCBzaGFyZWQgbWVtb3J5IGF0IGFkZHJlc3Mgd2hpY2ggYXJlIGEgbXVsdGlwbGUgb2YKK3RoaXMgdmFsdWUuCisKK05PVEU6IFRoaXMgZG9lcyBub3QgZml4IHNoYXJlZCBtbWFwcywgY2hlY2sgb3V0IHRoZSBzcGFyYzY0IHBvcnQgZm9yCitvbmUgd2F5IHRvIHNvbHZlIHRoaXMgKGluIHBhcnRpY3VsYXIgU1BBUkNfRkxBR19NTUFQU0hBUkVEKS4KKworTmV4dCwgeW91IGhhdmUgdG8gc29sdmUgdGhlIEQtY2FjaGUgYWxpYXNpbmcgaXNzdWUgZm9yIGFsbAorb3RoZXIgY2FzZXMuICBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgZmFjdCB0aGF0LCBmb3IgYSBnaXZlbiBwYWdlCittYXBwZWQgaW50byBzb21lIHVzZXIgYWRkcmVzcyBzcGFjZSwgdGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBtb3JlCittYXBwaW5nLCB0aGF0IG9mIHRoZSBrZXJuZWwgaW4gaXQncyBsaW5lYXIgbWFwcGluZyBzdGFydGluZyBhdAorUEFHRV9PRkZTRVQuICBTbyBpbW1lZGlhdGVseSwgb25jZSB0aGUgZmlyc3QgdXNlciBtYXBzIGEgZ2l2ZW4KK3BoeXNpY2FsIHBhZ2UgaW50byBpdHMgYWRkcmVzcyBzcGFjZSwgYnkgaW1wbGljYXRpb24gdGhlIEQtY2FjaGUKK2FsaWFzaW5nIHByb2JsZW0gaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhpc3Qgc2luY2UgdGhlIGtlcm5lbCBhbHJlYWR5CittYXBzIHRoaXMgcGFnZSBhdCBpdHMgdmlydHVhbCBhZGRyZXNzLgorCisgIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UpCisgIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnRvLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICpwYWdlKQorCisJVGhlc2UgdHdvIHJvdXRpbmVzIHN0b3JlIGRhdGEgaW4gdXNlciBhbm9ueW1vdXMgb3IgQ09XCisJcGFnZXMuICBJdCBhbGxvd3MgYSBwb3J0IHRvIGVmZmljaWVudGx5IGF2b2lkIEQtY2FjaGUgYWxpYXMKKwlpc3N1ZXMgYmV0d2VlbiB1c2Vyc3BhY2UgYW5kIHRoZSBrZXJuZWwuCisKKwlGb3IgZXhhbXBsZSwgYSBwb3J0IG1heSB0ZW1wb3JhcmlseSBtYXAgJ2Zyb20nIGFuZCAndG8nIHRvCisJa2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzIGR1cmluZyB0aGUgY29weS4gIFRoZSB2aXJ0dWFsIGFkZHJlc3MKKwlmb3IgdGhlc2UgdHdvIHBhZ2VzIGlzIGNob3NlbiBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGtlcm5lbAorCWxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIGhhcHBlbiB0byB2aXJ0dWFsIGFkZHJlc3NlcyB3aGljaCBhcmUKKwlvZiB0aGUgc2FtZSAiY29sb3IiIGFzIHRoZSB1c2VyIG1hcHBpbmcgb2YgdGhlIHBhZ2UuICBTcGFyYzY0CisJZm9yIGV4YW1wbGUsIHVzZXMgdGhpcyB0ZWNobmlxdWUuCisKKwlUaGUgJ2FkZHInIHBhcmFtZXRlciB0ZWxscyB0aGUgdmlydHVhbCBhZGRyZXNzIHdoZXJlIHRoZQorCXVzZXIgd2lsbCB1bHRpbWF0ZWx5IGhhdmUgdGhpcyBwYWdlIG1hcHBlZCwgYW5kIHRoZSAncGFnZScKKwlwYXJhbWV0ZXIgZ2l2ZXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgcGFnZSBvZiB0aGUgdGFyZ2V0LgorCisJSWYgRC1jYWNoZSBhbGlhc2luZyBpcyBub3QgYW4gaXNzdWUsIHRoZXNlIHR3byByb3V0aW5lcyBtYXkKKwlzaW1wbHkgY2FsbCBtZW1jcHkvbWVtc2V0IGRpcmVjdGx5IGFuZCBkbyBub3RoaW5nIG1vcmUuCisKKyAgdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKKworCUFueSB0aW1lIHRoZSBrZXJuZWwgd3JpdGVzIHRvIGEgcGFnZSBjYWNoZSBwYWdlLCBfT1JfCisJdGhlIGtlcm5lbCBpcyBhYm91dCB0byByZWFkIGZyb20gYSBwYWdlIGNhY2hlIHBhZ2UgYW5kCisJdXNlciBzcGFjZSBzaGFyZWQvd3JpdGFibGUgbWFwcGluZ3Mgb2YgdGhpcyBwYWdlIHBvdGVudGlhbGx5CisJZXhpc3QsIHRoaXMgcm91dGluZSBpcyBjYWxsZWQuCisKKwlOT1RFOiBUaGlzIHJvdXRpbmUgbmVlZCBvbmx5IGJlIGNhbGxlZCBmb3IgcGFnZSBjYWNoZSBwYWdlcworCSAgICAgIHdoaWNoIGNhbiBwb3RlbnRpYWxseSBldmVyIGJlIG1hcHBlZCBpbnRvIHRoZSBhZGRyZXNzCisJICAgICAgc3BhY2Ugb2YgYSB1c2VyIHByb2Nlc3MuICBTbyBmb3IgZXhhbXBsZSwgVkZTIGxheWVyIGNvZGUKKwkgICAgICBoYW5kbGluZyB2ZnMgc3ltbGlua3MgaW4gdGhlIHBhZ2UgY2FjaGUgbmVlZCBub3QgY2FsbAorCSAgICAgIHRoaXMgaW50ZXJmYWNlIGF0IGFsbC4KKworCVRoZSBwaHJhc2UgImtlcm5lbCB3cml0ZXMgdG8gYSBwYWdlIGNhY2hlIHBhZ2UiIG1lYW5zLAorCXNwZWNpZmljYWxseSwgdGhhdCB0aGUga2VybmVsIGV4ZWN1dGVzIHN0b3JlIGluc3RydWN0aW9ucworCXRoYXQgZGlydHkgZGF0YSBpbiB0aGF0IHBhZ2UgYXQgdGhlIHBhZ2UtPnZpcnR1YWwgbWFwcGluZworCW9mIHRoYXQgcGFnZS4gIEl0IGlzIGltcG9ydGFudCB0byBmbHVzaCBoZXJlIHRvIGhhbmRsZQorCUQtY2FjaGUgYWxpYXNpbmcsIHRvIG1ha2Ugc3VyZSB0aGVzZSBrZXJuZWwgc3RvcmVzIGFyZQorCXZpc2libGUgdG8gdXNlciBzcGFjZSBtYXBwaW5ncyBvZiB0aGF0IHBhZ2UuCisKKwlUaGUgY29yb2xsYXJ5IGNhc2UgaXMganVzdCBhcyBpbXBvcnRhbnQsIGlmIHRoZXJlIGFyZSB1c2VycworCXdoaWNoIGhhdmUgc2hhcmVkK3dyaXRhYmxlIG1hcHBpbmdzIG9mIHRoaXMgZmlsZSwgd2UgbXVzdCBtYWtlCisJc3VyZSB0aGF0IGtlcm5lbCByZWFkcyBvZiB0aGVzZSBwYWdlcyB3aWxsIHNlZSB0aGUgbW9zdCByZWNlbnQKKwlzdG9yZXMgZG9uZSBieSB0aGUgdXNlci4KKworCUlmIEQtY2FjaGUgYWxpYXNpbmcgaXMgbm90IGFuIGlzc3VlLCB0aGlzIHJvdXRpbmUgbWF5CisJc2ltcGx5IGJlIGRlZmluZWQgYXMgYSBub3Agb24gdGhhdCBhcmNoaXRlY3R1cmUuCisKKyAgICAgICAgVGhlcmUgaXMgYSBiaXQgc2V0IGFzaWRlIGluIHBhZ2UtPmZsYWdzIChQR19hcmNoXzEpIGFzCisJImFyY2hpdGVjdHVyZSBwcml2YXRlIi4gIFRoZSBrZXJuZWwgZ3VhcmFudGVlcyB0aGF0LAorCWZvciBwYWdlY2FjaGUgcGFnZXMsIGl0IHdpbGwgY2xlYXIgdGhpcyBiaXQgd2hlbiBzdWNoCisJYSBwYWdlIGZpcnN0IGVudGVycyB0aGUgcGFnZWNhY2hlLgorCisJVGhpcyBhbGxvd3MgdGhlc2UgaW50ZXJmYWNlcyB0byBiZSBpbXBsZW1lbnRlZCBtdWNoIG1vcmUKKwllZmZpY2llbnRseS4gIEl0IGFsbG93cyBvbmUgdG8gImRlZmVyIiAocGVyaGFwcyBpbmRlZmluaXRlbHkpCisJdGhlIGFjdHVhbCBmbHVzaCBpZiB0aGVyZSBhcmUgY3VycmVudGx5IG5vIHVzZXIgcHJvY2Vzc2VzCisJbWFwcGluZyB0aGlzIHBhZ2UuICBTZWUgc3BhcmM2NCdzIGZsdXNoX2RjYWNoZV9wYWdlIGFuZAorCXVwZGF0ZV9tbXVfY2FjaGUgaW1wbGVtZW50YXRpb25zIGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byBnbworCWFib3V0IGRvaW5nIHRoaXMuCisKKwlUaGUgaWRlYSBpcywgZmlyc3QgYXQgZmx1c2hfZGNhY2hlX3BhZ2UoKSB0aW1lLCBpZgorCXBhZ2UtPm1hcHBpbmctPmlfbW1hcCBpcyBhbiBlbXB0eSB0cmVlIGFuZCAtPmlfbW1hcF9ub25saW5lYXIKKwlhbiBlbXB0eSBsaXN0LCBqdXN0IG1hcmsgdGhlIGFyY2hpdGVjdHVyZSBwcml2YXRlIHBhZ2UgZmxhZyBiaXQuCisJTGF0ZXIsIGluIHVwZGF0ZV9tbXVfY2FjaGUoKSwgYSBjaGVjayBpcyBtYWRlIG9mIHRoaXMgZmxhZyBiaXQsCisJYW5kIGlmIHNldCB0aGUgZmx1c2ggaXMgZG9uZSBhbmQgdGhlIGZsYWcgYml0IGlzIGNsZWFyZWQuCisKKwlJTVBPUlRBTlQgTk9URTogSXQgaXMgb2Z0ZW4gaW1wb3J0YW50LCBpZiB5b3UgZGVmZXIgdGhlIGZsdXNoLAorCQkJdGhhdCB0aGUgYWN0dWFsIGZsdXNoIG9jY3VycyBvbiB0aGUgc2FtZSBDUFUKKwkJCWFzIGRpZCB0aGUgY3B1IHN0b3JlcyBpbnRvIHRoZSBwYWdlIHRvIG1ha2UgaXQKKwkJCWRpcnR5LiAgQWdhaW4sIHNlZSBzcGFyYzY0IGZvciBleGFtcGxlcyBvZiBob3cKKwkJCXRvIGRlYWwgd2l0aCB0aGlzLgorCisgIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdXNlcl92YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbikKKyAgdm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdXNlcl92YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKQorCVdoZW4gdGhlIGtlcm5lbCBuZWVkcyB0byBjb3B5IGFyYml0cmFyeSBkYXRhIGluIGFuZCBvdXQKKwlvZiBhcmJpdHJhcnkgdXNlciBwYWdlcyAoZi5lLiBmb3IgcHRyYWNlKCkpIGl0IHdpbGwgdXNlCisJdGhlc2UgdHdvIHJvdXRpbmVzLgorCisJQW55IG5lY2Vzc2FyeSBjYWNoZSBmbHVzaGluZyBvciBvdGhlciBjb2hlcmVuY3kgb3BlcmF0aW9ucworCXRoYXQgbmVlZCB0byBvY2N1ciBzaG91bGQgaGFwcGVuIGhlcmUuICBJZiB0aGUgcHJvY2Vzc29yJ3MKKwlpbnN0cnVjdGlvbiBjYWNoZSBkb2VzIG5vdCBzbm9vcCBjcHUgc3RvcmVzLCBpdCBpcyB2ZXJ5CisJbGlrZWx5IHRoYXQgeW91IHdpbGwgbmVlZCB0byBmbHVzaCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUKKwlmb3IgY29weV90b191c2VyX3BhZ2UoKS4KKworICB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKKyAgCVdoZW4gdGhlIGtlcm5lbCBzdG9yZXMgaW50byBhZGRyZXNzZXMgdGhhdCBpdCB3aWxsIGV4ZWN1dGUKKwlvdXQgb2YgKGVnIHdoZW4gbG9hZGluZyBtb2R1bGVzKSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisKKwlJZiB0aGUgaWNhY2hlIGRvZXMgbm90IHNub29wIHN0b3JlcyB0aGVuIHRoaXMgcm91dGluZSB3aWxsIG5lZWQKKwl0byBmbHVzaCBpdC4KKworICB2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKwlBbGwgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZmx1c2hfaWNhY2hlX3BhZ2UgY2FuIGJlIGltcGxlbWVudGVkIGluCisJZmx1c2hfZGNhY2hlX3BhZ2UgYW5kIHVwZGF0ZV9tbXVfY2FjaGUuIEluIDIuNyB0aGUgaG9wZSBpcyB0bworCXJlbW92ZSB0aGlzIGludGVyZmFjZSBjb21wbGV0ZWx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQgYi9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk5YmViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQKQEAgLTAsMCArMSwxMzIgQEAKK1RoaXMgZHJpdmVyIGlzIGZvciBDb21wYXEncyBTTUFSVCBBcnJheSBDb250cm9sbGVycy4KKworU3VwcG9ydGVkIENhcmRzOgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBjYXJkczoKKworCSogU0EgNTMwMAorCSogU0EgNWkgCisJKiBTQSA1MzIKKwkqIFNBIDUzMTIKKwkqIFNBIDY0MQorCSogU0EgNjQyCisJKiBTQSA2NDAwCisJKiBTQSA2NDAwIFUzMjAgRXhwYW5zaW9uIE1vZHVsZQorCSogU0EgNmkKKwkqIFNBIFA2MDAKKwkqIFNBIFA4MDAKKwkqIFNBIEU0MDAKKworSWYgbm9kZXMgYXJlIG5vdCBhbHJlYWR5IGNyZWF0ZWQgaW4gdGhlIC9kZXYvY2Npc3MgZGlyZWN0b3J5LCBydW4gYXMgcm9vdDoKKworIyBjZCAvZGV2CisjIC4vTUFLRURFViBjY2lzcworCitEZXZpY2UgTmFtaW5nOgorLS0tLS0tLS0tLS0tLS0KKworWW91IG5lZWQgc29tZSBlbnRyaWVzIGluIC9kZXYgZm9yIHRoZSBjY2lzcyBkZXZpY2UuICBUaGUgTUFLRURFViBzY3JpcHQKK2NhbiBtYWtlIGRldmljZSBub2RlcyBmb3IgeW91IGF1dG9tYXRpY2FsbHkuICBDdXJyZW50bHkgdGhlIGRldmljZSBzZXR1cAoraXMgYXMgZm9sbG93czoKKworTWFqb3IgbnVtYmVyczoKKwkxMDQJY2Npc3MwCQorCTEwNQljY2lzczEJCisJMTA2CWNjaXNzMgorCTEwNQljY2lzczMKKwkxMDgJY2Npc3M0CisJMTA5CWNjaXNzNQorCTExMAljY2lzczYKKwkxMTEJY2Npc3M3CisKK01pbm9yIG51bWJlcnM6CisgICAgICAgIGI3IGI2IGI1IGI0IGIzIGIyIGIxIGIwCisgICAgICAgIHwtLS0tKy0tLS18IHwtLS0tKy0tLS18CisgICAgICAgICAgICAgfCAgICAgICAgICAgfAorICAgICAgICAgICAgIHwgICAgICAgICAgICstLS0tLS0tLSBQYXJ0aXRpb24gSUQgKDA9d2hvbGVkZXYsIDEtMTUgcGFydGl0aW9uKQorICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9naWNhbCBWb2x1bWUgbnVtYmVyCisKK1RoZSBkZXZpY2UgbmFtaW5nIHNjaGVtZSBpczoKKy9kZXYvY2Npc3MvYzBkMAkJCUNvbnRyb2xsZXIgMCwgZGlzayAwLCB3aG9sZSBkZXZpY2UKKy9kZXYvY2Npc3MvYzBkMHAxCQlDb250cm9sbGVyIDAsIGRpc2sgMCwgcGFydGl0aW9uIDEKKy9kZXYvY2Npc3MvYzBkMHAyCQlDb250cm9sbGVyIDAsIGRpc2sgMCwgcGFydGl0aW9uIDIKKy9kZXYvY2Npc3MvYzBkMHAzCQlDb250cm9sbGVyIDAsIGRpc2sgMCwgcGFydGl0aW9uIDMKKworL2Rldi9jY2lzcy9jMWQxCQkJQ29udHJvbGxlciAxLCBkaXNrIDEsIHdob2xlIGRldmljZQorL2Rldi9jY2lzcy9jMWQxcDEJCUNvbnRyb2xsZXIgMSwgZGlzayAxLCBwYXJ0aXRpb24gMQorL2Rldi9jY2lzcy9jMWQxcDIJCUNvbnRyb2xsZXIgMSwgZGlzayAxLCBwYXJ0aXRpb24gMgorL2Rldi9jY2lzcy9jMWQxcDMJCUNvbnRyb2xsZXIgMSwgZGlzayAxLCBwYXJ0aXRpb24gMworCitTQ1NJIHRhcGUgZHJpdmUgYW5kIG1lZGl1bSBjaGFuZ2VyIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTQ1NJIHNlcXVlbnRpYWwgYWNjZXNzIGRldmljZXMgYW5kIG1lZGl1bSBjaGFuZ2VyIGRldmljZXMgYXJlIHN1cHBvcnRlZCBhbmQgCithcHByb3ByaWF0ZSBkZXZpY2Ugbm9kZXMgYXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZC4gIChlLmcuICAKKy9kZXYvc3QwLCAvZGV2L3N0MSwgZXRjLiAgU2VlIHRoZSAic3QiIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuKSAKK1lvdSBtdXN0IGVuYWJsZSAiU0NTSSB0YXBlIGRyaXZlIHN1cHBvcnQgZm9yIFNtYXJ0IEFycmF5IDV4eHgiIGFuZCAKKyJTQ1NJIHN1cHBvcnQiIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gYmUgYWJsZSB0byB1c2UgU0NTSQordGFwZSBkcml2ZXMgd2l0aCB5b3VyIFNtYXJ0IEFycmF5IDV4eHggY29udHJvbGxlci4KKworQWRkaXRpb25hbGx5LCBub3RlIHRoYXQgdGhlIGRyaXZlciB3aWxsIG5vdCBlbmdhZ2UgdGhlIFNDU0kgY29yZSBhdCBpbml0IAordGltZS4gIFRoZSBkcml2ZXIgbXVzdCBiZSBkaXJlY3RlZCB0byBkeW5hbWljYWxseSBlbmdhZ2UgdGhlIFNDU0kgY29yZSB2aWEgCit0aGUgL3Byb2MgZmlsZXN5c3RlbSBlbnRyeSB3aGljaCB0aGUgImJsb2NrIiBzaWRlIG9mIHRoZSBkcml2ZXIgY3JlYXRlcyBhcyAKKy9wcm9jL2RyaXZlci9jY2lzcy9jY2lzcyogYXQgcnVudGltZS4gIFRoaXMgaXMgYmVjYXVzZSBhdCBkcml2ZXIgaW5pdCB0aW1lLCAKK3RoZSBTQ1NJIGNvcmUgbWF5IG5vdCB5ZXQgYmUgaW5pdGlhbGl6ZWQgKGJlY2F1c2UgdGhlIGRyaXZlciBpcyBhIGJsb2NrIAorZHJpdmVyKSBhbmQgYXR0ZW1wdGluZyB0byByZWdpc3RlciBpdCB3aXRoIHRoZSBTQ1NJIGNvcmUgaW4gc3VjaCBhIGNhc2UgCit3b3VsZCBjYXVzZSBhIGhhbmcuICBUaGlzIGlzIGJlc3QgZG9uZSB2aWEgYW4gaW5pdGlhbGl6YXRpb24gc2NyaXB0IAorKHR5cGljYWxseSBpbiAvZXRjL2luaXQuZCwgYnV0IGNvdWxkIHZhcnkgZGVwZW5kaW5nIG9uIGRpc3RpYnV0aW9uKS4gCitGb3IgZXhhbXBsZToKKworCWZvciB4IGluIC9wcm9jL2RyaXZlci9jY2lzcy9jY2lzc1swLTldKgorCWRvCisJCWVjaG8gImVuZ2FnZSBzY3NpIiA+ICR4CisJZG9uZQorCitPbmNlIHRoZSBTQ1NJIGNvcmUgaXMgZW5nYWdlZCBieSB0aGUgZHJpdmVyLCBpdCBjYW5ub3QgYmUgZGlzZW5nYWdlZCAKKyhleGNlcHQgYnkgdW5sb2FkaW5nIHRoZSBkcml2ZXIsIGlmIGl0IGhhcHBlbnMgdG8gYmUgbGlua2VkIGFzIGEgbW9kdWxlLikKKworTm90ZSBhbHNvIHRoYXQgaWYgbm8gc2VxdWVudGlhbCBhY2Nlc3MgZGV2aWNlcyBvciBtZWRpdW0gY2hhbmdlcnMgYXJlCitkZXRlY3RlZCwgdGhlIFNDU0kgY29yZSB3aWxsIG5vdCBiZSBlbmdhZ2VkIGJ5IHRoZSBhY3Rpb24gb2YgdGhlIGFib3ZlCitzY3JpcHQuCisKK0hvdCBwbHVnIHN1cHBvcnQgZm9yIFNDU0kgdGFwZSBkcml2ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSG90IHBsdWdnaW5nIG9mIFNDU0kgdGFwZSBkcml2ZXMgaXMgc3VwcG9ydGVkLCB3aXRoIHNvbWUgY2F2ZWF0cy4KK1RoZSBjY2lzcyBkcml2ZXIgbXVzdCBiZSBpbmZvcm1lZCB0aGF0IGNoYW5nZXMgdG8gdGhlIFNDU0kgYnVzCitoYXZlIGJlZW4gbWFkZSwgaW4gYWRkaXRpb24gdG8gYW5kIHByaW9yIHRvIGluZm9ybWluZyB0aGUgU0NTSSAKK21pZCBsYXllci4gIFRoaXMgbWF5IGJlIGRvbmUgdmlhIHRoZSAvcHJvYyBmaWxlc3lzdGVtLiAgRm9yIGV4YW1wbGU6CisKKwllY2hvICJyZXNjYW4iID4gL3Byb2Mvc2NzaS9jY2lzczAvMQorCitUaGlzIGNhdXNlcyB0aGUgYWRhcHRlciB0byBxdWVyeSB0aGUgYWRhcHRlciBhYm91dCBjaGFuZ2VzIHRvIHRoZSAKK3BoeXNpY2FsIFNDU0kgYnVzZXMgYW5kL29yIGZpYnJlIGNoYW5uZWwgYXJiaXRyYXRlZCBsb29wIGFuZCB0aGUgCitkcml2ZXIgdG8gbWFrZSBub3RlIG9mIGFueSBuZXcgb3IgcmVtb3ZlZCBzZXF1ZW50aWFsIGFjY2VzcyBkZXZpY2VzCitvciBtZWRpdW0gY2hhbmdlcnMuICBUaGUgZHJpdmVyIHdpbGwgb3V0cHV0IG1lc3NhZ2VzIGluZGljYXRpbmcgd2hhdCAKK2RldmljZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZWQgYW5kIHRoZSBjb250cm9sbGVyLCBidXMsIHRhcmdldCBhbmQgCitsdW4gdXNlZCB0byBhZGRyZXNzIHRoZSBkZXZpY2UuICBPbmNlIHRoaXMgaXMgZG9uZSwgdGhlIFNDU0kgbWlkIGxheWVyIAorY2FuIGJlIGluZm9ybWVkIG9mIGNoYW5nZXMgdG8gdGhlIHZpcnR1YWwgU0NTSSBidXMgd2hpY2ggdGhlIGRyaXZlciAKK3ByZXNlbnRzIHRvIGl0IGluIHRoZSB1c3VhbCB3YXkuIEZvciBleGFtcGxlOiAKKworCWVjaG8gc2NzaSBhZGQtc2luZ2xlLWRldmljZSAzIDIgMSAwID4gL3Byb2Mvc2NzaS9zY3NpCisgCit0byBhZGQgYSBkZXZpY2Ugb24gY29udHJvbGxlciAzLCBidXMgMiwgdGFyZ2V0IDEsIGx1biAwLiAgIE5vdGUgdGhhdAordGhlIGRyaXZlciBtYWtlcyBhbiBlZmZvcnQgdG8gcHJlc2VydmUgdGhlIGRldmljZXMgcG9zaXRpb25zCitpbiB0aGUgdmlydHVhbCBTQ1NJIGJ1cywgc28gaWYgeW91IGFyZSBvbmx5IG1vdmluZyB0YXBlIGRyaXZlcyAKK2Fyb3VuZCBvbiB0aGUgc2FtZSBhZGFwdGVyIGFuZCBub3QgYWRkaW5nIG9yIHJlbW92aW5nIHRhcGUgZHJpdmVzIAorZnJvbSB0aGUgYWRhcHRlciwgaW5mb3JtaW5nIHRoZSBTQ1NJIG1pZCBsYXllciBtYXkgbm90IGJlIG5lY2Vzc2FyeS4KKworTm90ZSB0aGF0IHRoZSBuYW1pbmcgY29udmVudGlvbiBvZiB0aGUgL3Byb2MgZmlsZXN5c3RlbSBlbnRyaWVzIAorY29udGFpbnMgYSBudW1iZXIgaW4gYWRkaXRpb24gdG8gdGhlIGRyaXZlciBuYW1lLiAgKEUuZy4gImNjaXNzMCIgCitpbnN0ZWFkIG9mIGp1c3QgImNjaXNzIiB3aGljaCB5b3UgbWlnaHQgZXhwZWN0LikKKworTm90ZTogT05MWSBzZXF1ZW50aWFsIGFjY2VzcyBkZXZpY2VzIGFuZCBtZWRpdW0gY2hhbmdlcnMgYXJlIHByZXNlbnRlZCAKK2FzIFNDU0kgZGV2aWNlcyB0byB0aGUgU0NTSSBtaWQgbGF5ZXIgYnkgdGhlIGNjaXNzIGRyaXZlci4gIFNwZWNpZmljYWxseSwgCitwaHlzaWNhbCBTQ1NJIGRpc2sgZHJpdmVzIGFyZSBOT1QgcHJlc2VudGVkIHRvIHRoZSBTQ1NJIG1pZCBsYXllci4gIFRoZSAKK3BoeXNpY2FsIFNDU0kgZGlzayBkcml2ZXMgYXJlIGNvbnRyb2xsZWQgZGlyZWN0bHkgYnkgdGhlIGFycmF5IGNvbnRyb2xsZXIgCitoYXJkd2FyZSBhbmQgaXQgaXMgaW1wb3J0YW50IHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGF0dGVtcHRpbmcgdG8gZGlyZWN0bHkKK2FjY2VzcyB0aGVzZSBkZXZpY2VzIHRvbywgYXMgaWYgdGhlIGFycmF5IGNvbnRyb2xsZXIgd2VyZSBtZXJlbHkgYSBTQ1NJIAorY29udHJvbGxlciBpbiB0aGUgc2FtZSB3YXkgdGhhdCB3ZSBhcmUgYWxsb3dpbmcgaXQgdG8gYWNjZXNzIFNDU0kgdGFwZSBkcml2ZXMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2Nkcm9tLzAwLUlOREVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNmRhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tLzAwLUlOREVYCkBAIC0wLDAgKzEsMzMgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUgKGluZm8gb24gQ0QtUk9NcyBhbmQgTGludXgpCitNYWtlZmlsZQorCS0gb25seSB1c2VkIHRvIGdlbmVyYXRlIFRlWCBvdXRwdXQgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbi4KK2F6dGNkCisJLSBpbmZvIG9uIEF6dGVjaC9PcmNoaWQvT2thbm8vV2Vhcm5lcy9Db25yYWQvQ3lDRFJPTSBkcml2ZXIuCitjZHJvbS1zdGFuZGFyZC50ZXgKKwktIExhVGVYIGRvY3VtZW50IG9uIHN0YW5kYXJkaXppbmcgdGhlIENELVJPTSBwcm9ncmFtbWluZyBpbnRlcmZhY2UuCitjZHUzMWEKKwktIGluZm8gb24gdGhlIFNvbnkgQ0RVMzFBL0NEVTMzQSBDRC1ST00gZHJpdmVyLgorY20yMDYKKwktIGluZm8gb24gdGhlIFBoaWxpcHMvTE1TIGNtMjA2L2NtMjYwIENELVJPTSBkcml2ZXIuCitnc2NkCisJLSBpbmZvIG9uIHRoZSBHb2xkc3RhciBSNDIwIENELVJPTSBkcml2ZXIuCitpZGUtY2QKKwktIGluZm8gb24gc2V0dGluZyB1cCBhbmQgdXNpbmcgQVRBUEkgKGFrYSBJREUpIENELVJPTXMuCitpc3AxNgorCS0gaW5mbyBvbiB0aGUgQ0QtUk9NIGludGVyZmFjZSBvbiBJU1AxNiwgTUFEMTYgb3IgTW96YXJ0IHNvdW5kIGNhcmQuCittY2QKKwktIGluZm8gb24gbGltaXRhdGlvbnMgb2Ygc3RhbmRhcmQgTWl0c3VtaSBDRC1ST00gZHJpdmVyLgorbWNkeAorCS0gaW5mbyBvbiBpbXByb3ZlZCBNaXRzdW1pIENELVJPTSBkcml2ZXIuCitvcHRjZAorCS0gaW5mbyBvbiB0aGUgT3B0aWNzIFN0b3JhZ2UgODAwMCBBVCBDRC1ST00gZHJpdmVyCitwYWNrZXQtd3JpdGluZy50eHQKKwktIEluZm8gb24gdGhlIENEUlcgcGFja2V0IHdyaXRpbmcgbW9kdWxlCitzYnBjZAorCS0gaW5mbyBvbiB0aGUgU291bmRCbGFzdGVyL1BhbmFzb25pYyBDRC1ST00gaW50ZXJmYWNlIGRyaXZlci4KK3NqY2QKKwktIGluZm8gb24gdGhlIFNBTllPIENEUi1IOTRBIENELVJPTSBpbnRlcmZhY2UgZHJpdmVyLgorc29ueWNkNTM1CisJLSBpbmZvIG9uIHRoZSBTb255IENEVS01MzUgKGFuZCA1MzEpIENELVJPTSBkcml2ZXIuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOWUzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL01ha2VmaWxlCkBAIC0wLDAgKzEsMjEgQEAKK0xBVEVYRklMRSA9IGNkcm9tLXN0YW5kYXJkCisKK2FsbDoKKwltYWtlIGNsZWFuCisJbGF0ZXggJChMQVRFWEZJTEUpCisJbGF0ZXggJChMQVRFWEZJTEUpCisJQGlmIFsgLXggYHdoaWNoIGd2YCBdOyB0aGVuIFwKKwkJYGR2aXBzIC1xIC10IGxldHRlciAtbyAkKExBVEVYRklMRSkucHMgJChMQVRFWEZJTEUpLmR2aWAgO1wKKwkJYGd2IC1hbnRpYWxpYXMgLW1lZGlhIGxldHRlciAtbm9jZW50ZXIgJChMQVRFWEZJTEUpLnBzYCA7XAorCWVsc2UgXAorCQlgeGR2aSAkKExBVEVYRklMRSkuZHZpICZgIDtcCisJZmkKKwltYWtlIHNvcnRvZmNsZWFuCisKK2NsZWFuOgorCXJtIC1mICQoTEFURVhGSUxFKS5wcyAkKExBVEVYRklMRSkuZHZpICQoTEFURVhGSUxFKS5hdXggJChMQVRFWEZJTEUpLmxvZyAKKworc29ydG9mY2xlYW46CisJcm0gLWYgJChMQVRFWEZJTEUpLmF1eCAkKExBVEVYRklMRSkubG9nIAorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vYXp0Y2QgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2F6dGNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZjAyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2F6dGNkCkBAIC0wLDAgKzEsODIyIEBACiskSWQ6IFJFQURNRS5henRjZCx2IDIuNjAgMTk5Ny8xMS8yOSAwOTo1MToyNSByb290IEV4cCByb290ICQKKyAgICAgICAgICBSZWFkbWUtRmlsZSBEb2N1bWVudGF0aW9uL2Nkcm9tL2F6dGNkCisgICAgICAgICAgIAkJCWZvciAKKwkgICAgIEFaVEVDSCBDRC1ST00gQ0RBMjY4LTAxQSwgT1JDSElEIENELTMxMTAsCisgICAgICBPS0FOTy9XRUFSTkVTIENERDExMCwgQ09OUkFEIFRYQywgQ3lDRFJPTSBDUjUyMCwgQ1I1NDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENELVJPTSBEcml2ZXMgCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi42IGFuZCBuZXdlcgorICAgICAgICAgICAgICAgICAgIChmb3Igb3RoZXIgZHJpdmVzIHNlZSA2Li04LikKKworTk9URTogVEhJUyBEUklWRVIgV0lMTCBXT1JLIFdJVEggVEhFIENELVJPTSBEUklWRVMgTElTVEVELCBXSElDSCBIQVZFCisgICAgICBBIFBST1BSSUVUQVJZIElOVEVSRkFDRSAoaW1wbGVtZW50ZWQgb24gYSBzb3VuZCBjYXJkIG9yIG9uIGFuCisgICAgICBJU0EtQVQtYnVzIGNhcmQpLiAKKyAgICAgIElUIFdJTEwgREVGSU5JVEVMWSBOT1QgV09SSyBXSVRIIENELVJPTSBEUklWRVMgV0lUSCAqSURFKi1JTlRFUkZBQ0UsCisgICAgICBzdWNoIGFzIHRoZSBBenRlY2ggQ0RBMjY5LTAzMVNFICEhISAoVGhlIG9ubHkga25vd24gZXhjZXB0aW9ucyBhcmUKKyAgICAgICdmYWtlZCcgSURFIGRyaXZlcyBsaWtlIHRoZSBDeUNEUk9NIENSNTIwaWUgd2hpY2ggd29yayB3aXRoIGF6dGNkCisgICAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHNlZSA3LikuIElGIFlPVSdSRSBVU0lORyBBIENELVJPTSBEUklWRQorICAgICAgV0lUSCBJREUtSU5URVJGQUNFLCBTT01FVElNRVMgQUxTTyBDQUxMRUQgQVRBUEktQ09NUEFUSUJMRSwgUExFQVNFIAorICAgICAgVVNFIFRIRSBpZGUtY2QuYyBEUklWRVIsIFdSSVRURU4gQlkgTUFSSyBMT1JEIEFORCBTQ09UVCBTTllERVIgIQorICAgICAgVEhFIFNUQU5EQVJELUtFUk5FTCAxLjIueCBOT1cgQUxTTyBTVVBQT1JUUyBJREUtQ0RST00tRFJJVkVTLCBTRUUgVEhFCisgICAgICBIQVJERElTSyAoISkgU0VDVElPTiBPRiBtYWtlIGNvbmZpZywgV0hFTiBDT01QSUxJTkcgQSBORVcgS0VSTkVMISEhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnRlbnRzIG9mIHRoaXMgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAxLiAgTk9URQorICAgICAgICAgICAgICAgICAgICAgICAgIDIuICBJTlNUQUxMQVRJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAzLiAgQ09ORklHVVJJTkcgWU9VUiBLRVJORUwKKyAgICAgICAgICAgICAgICAgICAgICAgICA0LiAgUkVDT01QSUxJTkcgWU9VUiBLRVJORUwKKyAgICAgICAgICAgICAgICAgICAgICAgICA0LjEgICBBWlRDRCBBUyBBIFJVTi1USU1FIExPQURBQkxFIE1PRFVMRQorICAgICAgICAgICAgICAgICAgICAgICAgIDQuMiAgIENEUk9NIENPTk5FQ1RFRCBUTyBBIFNPVU5EQ0FSRAorICAgICAgICAgICAgICAgICAgICAgICAgIDUuICBLTk9XTiBQUk9CTEVNUywgRlVUVVJFIERFVkVMT1BNRU5UUworCQkJIDUuMSAgIE1VTFRJU0VTU0lPTiBTVVBQT1JUCisJCQkgNS4yICAgU1RBVFVTIFJFQ09HTklUSU9OCisJCQkgNS4zICAgRE9TRU1VJ3MgQ0RST00gU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICAgICAgIDYuICBCVUcgUkVQT1JUUworICAgICAgICAgICAgICAgICAgICAgICAgIDcuICBPVEhFUiBEUklWRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICA4LiAgSUYgWU9VIERPTidUIFNVQ0NFRUQgLi4uIERFQlVHR0lORyAgCisgICAgICAgICAgICAgICAgICAgICAgICAgOS4gIFRFQ0hOSUNBTCBISVNUT1JZIE9GIFRIRSBEUklWRVIKKyAgICAgICAgICAgICAgICAgICAgICAgIDEwLiAgQUNLTk9XTEVER01FTlRTCisgICAgICAgICAgICAgICAgICAgICAgICAxMS4gIFBST0dSQU1NSU5HIEFERCBPTlM6IENEUExBWS5DCisgICAgICAgICAgICAgICAgICAgICAgICBBUFBFTkRJWDogU291cmNlIGNvZGUgb2YgY2RwbGF5LmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gTk9URSAKK1RoaXMgc29mdHdhcmUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluIGFscGhhIGFuZCBiZXRhIHRlc3QgYW5kIGlzIHBhcnQgb2YKK3RoZSBzdGFuZGFyZCBrZXJuZWwgc2luY2Uga2VybmVsIDEuMS44eCBzaW5jZSBEZWNlbWJlciAxOTk0LiBJdCB3b3JrcyB3aXRoCitBWlRFQ0ggQ0RBMjY4LTAxQSwgT1JDSElEIENEUy0zMTEwLCBPUkNISUQvV0VBUk5FUyBDREQxMTAgYW5kIENPTlJBRCBUWEMgCisoTnIuOTkgMzEgMjMgLXNlcmllcyAwNCkgYW5kIGhhcyBwcm92ZW4gdG8gYmUgc3RhYmxlIHdpdGgga2VybmVsIAordmVyc2lvbnMgMS4wLjkgYW5kIG5ld2VyLiBCdXQgd2l0aCBhbnkgc29mdHdhcmUgdGhlcmUgc3RpbGwgbWF5IGJlIGJ1Z3MgaW4gaXQuIAorU28gaWYgeW91IGVuY291bnRlciBwcm9ibGVtcywgeW91IGFyZSBpbnZpdGVkIHRvIGhlbHAgdXMgaW1wcm92ZSB0aGlzIHNvZnR3YXJlLiAKK1BsZWFzZSBzZW5kIG1lIGEgZGV0YWlsZWQgYnVnIHJlcG9ydCAoc2VlIGNoYXB0ZXIgQlVHIFJFUE9SVFMpLiBZb3UgYXJlIGFsc28gCitpbnZpdGVkIGluIGhlbHBpbmcgdXMgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBkcml2ZXMsIHdoaWNoIGFyZSBzdXBwb3J0ZWQuCisKK1BsZWFzZSByZWFkIHRoZSBSRUFETUUtZmlsZXMgY2FyZWZ1bGx5IGFuZCBhbHdheXMga2VlcCBhIGJhY2t1cCBjb3B5IG9mIHlvdXIgCitvbGQga2VybmVsLCBpbiBvcmRlciB0byByZWJvb3QgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmchCisKKzIuIElOU1RBTExBVElPTgorVGhlIGRyaXZlciBjb25zaXN0cyBvZiBhIGhlYWRlciBmaWxlICdhenRjZC5oJywgd2hpY2ggbm9ybWFsbHkgc2hvdWxkIHJlc2lkZSAKK2luIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvY2Ryb20gYW5kIHRoZSBzb3VyY2UgY29kZSAnYXp0Y2QuYycsIHdoaWNoIG5vcm1hbGx5IAorcmVzaWRlcyBpbiB0aGUgc2FtZSBwbGFjZS4gSXQgdXNlcyAvZGV2L2F6dGNkICgvZGV2L2F6dGNkMCBpbiBzb21lIGRpc3RyaS0KK2J1dGlvbnMpLCB3aGljaCBtdXN0IGJlIGEgdmFsaWQgYmxvY2sgZGV2aWNlIHdpdGggbWFqb3IgbnVtYmVyIDI5IGFuZCByZXNpZGUgCitpbiBkaXJlY3RvcnkgL2Rldi4gVG8gbW91bnQgYSBDRC1ST00sIHlvdXIga2VybmVsIG5lZWRzIHRvIGhhdmUgdGhlIElTTzk2NjAtCitmaWxlc3lzdGVtIHN1cHBvcnQgaW5jbHVkZWQuCisKK1BMRUFTRSBOT1RFOiBhenRjZC5jIGhhcyBiZWVuIGRldmVsb3BlZCBpbiBwYXJhbGxlbCB0byB0aGUgbGludXgga2VybmVsLAord2hpY2ggaGFkIGFuZCBpcyBoYXZpbmcgbWFueSBtYWpvciBhbmQgbWlub3IgY2hhbmdlcyB3aGljaCBhcmUgbm90IGJhY2t3YXJkCitjb21wYXRpYmxlLiBRdWl0ZSBkZWZpbml0ZWx5IGF6dGNkLmMgdmVyc2lvbiAxLjgwIGFuZCBuZXdlciB3aWxsIE5PVCB3b3JrCitpbiBrZXJuZWxzIG9sZGVyIHRoYW4gMS4zLjMzLiBTbyBwbGVhc2UgYWx3YXlzIHVzZSB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbgorb2YgYXp0Y2QuYyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBsaW51eC1rZXJuZWwuCisKKzMuICBDT05GSUdVUklORyBZT1VSIEtFUk5FTAorSWYgeW91ciBrZXJuZWwgaXMgYWxyZWFkeSBjb25maWd1cmVkIGZvciB1c2luZyB0aGUgQVpURUNIIGRyaXZlciB5b3Ugd2lsbAorc2VlIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSB3aGlsZSBMaW51eCBib290czoKKyAgICBBenRlY2ggQ0QtUk9NIEluaXQ6IERyaXZlclZlcnNpb249PHZlcnNpb24gbnVtYmVyPiBCYXNlQWRkcmVzcz08YmFzZWFkZHJlc3M+CisgICAgQXp0ZWNoIENELVJPTSBJbml0OiBGaXJtd2FyZVZlcnNpb249PGZpcm13YXJlIHZlcnNpb24gaWQgb2YgeW91ciBJL08tY2FyZD4+PgorICAgIEF6dGVjaCBDRC1ST00gSW5pdDogPGRyaXZlIHR5cGU+IGRldGVjdGVkCisgICAgQXp0ZWNoIENELVJPTSBJbml0OiBFbmQKK0lmIHRoZSBtZXNzYWdlIGxvb2tzIGRpZmZlcmVudCBhbmQgeW91IGFyZSBzdXJlIHRvIGhhdmUgYSBzdXBwb3J0ZWQgZHJpdmUsCitpdCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBiYXNlIGFkZHJlc3MuIFRoZSBBenRlY2ggZHJpdmVyIGRvZXMgbG9vayBmb3IgdGhlIAorQ0QtUk9NIGRyaXZlIGF0IHRoZSBiYXNlIGFkZHJlc3Mgc3BlY2lmaWVkIGluIGF6dGNkLmggYXQgY29tcGlsZSB0aW1lLiBUaGlzIAorYWRkcmVzcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgYm9vdCBwYXJhbWV0ZXIgYXp0Y2Q9Li4uLllvdSBzaG91bGQgcmVib290IGFuZCAKK3N0YXJ0IExpbnV4IHdpdGggYm9vdCBwYXJhbWV0ZXIgYXp0Y2Q9PGJhc2UgYWRkcmVzcz4sIGUuZy4gYXp0Y2Q9MHgzMjAuIElmIAoreW91IGRvIG5vdCBrbm93IHRoZSBiYXNlIGFkZHJlc3MsIHN0YXJ0IHlvdXIgUEMgd2l0aCBET1MgYW5kIGxvb2sgYXQgdGhlIGJvb3QgCittZXNzYWdlIG9mIHlvdXIgQ0QtUk9NJ3MgRE9TIGRyaXZlci4gSWYgdGhhdCBzdGlsbCBkb2VzIG5vdCBoZWxwLCB1c2UgYm9vdAorcGFyYW1ldGVyIGF6dGNkPTxiYXNlIGFkZHJlc3M+LDB4NzkgLCB0aGlzIHRlbGxzIGF6dGNkIHRvIHRyeSBhIGxpdHRsZSBoYXJkZXIuCithenRjZCBtYXkgYmUgY29uZmlndXJlZCB0byB1c2UgYXV0b3Byb2JpbmcgdGhlIGJhc2UgYWRkcmVzcyBieSByZWNvbXBpbGluZworaXQgKHNlZSBjaGFwdGVyIDQuKS4KKworSWYgdGhlIG1lc3NhZ2UgbG9va3MgY29ycmVjdCwgYXMgdXNlciAncm9vdCcgeW91IHNob3VsZCBiZSBhYmxlIHRvIG1vdW50IHRoZSAKK2RyaXZlIGJ5CisgICAgICAgICAgbW91bnQgLXQgaXNvOTY2MCAtciAvZGV2L2F6dGNkMCAvbW50CithbmQgdXNlIGl0IGFzIGFueSBvdGhlciBmaWxlc3lzdGVtLiAoSWYgdGhpcyBkb2VzIG5vdCB3b3JrLCBjaGVjayBpZgorL2Rldi9henRjZDAgYW5kIC9tbnQgZG8gZXhpc3QgYW5kIGNyZWF0ZSB0aGVtLCBpZiBuZWNlc3NhcnkgYnkgZG9pbmcKKyAgICAgIG1rbm9kIC9kZXYvYXp0Y2QwIGIgMjkgMAorICAgICAgbWtkaXIgL21udCAgICAgICAgICAgICAgICAgICAgICAgCisKK0lmIHlvdSBzdGlsbCBnZXQgYSBkaWZmZXJlbnQgbWVzc2FnZSB3aGlsZSBMaW51eCBib290cyBvciB3aGVuIHlvdSBnZXQgdGhlIAorbWVzc2FnZSwgdGhhdCB0aGUgSVNPOTY2MC1maWxlc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBrZXJuZWwsIHdoZW4KK3lvdSB0cnkgdG8gbW91bnQgdGhlIENELVJPTSBkcml2ZSwgeW91IGhhdmUgdG8gcmVjb21waWxlIHlvdXIga2VybmVsLgorCitJZiB5b3UgZG8gKm5vdCogaGF2ZSBhbiBBenRlY2gvT3JjaGlkL09rYW5vL1dlYXJuZXMvVFhDIGRyaXZlIGFuZCB3YW50IHRvIAorYnlwYXNzIGRyaXZlIGRldGVjdGlvbiBkdXJpbmcgTGludXggYm9vdCB1cCwgc3RhcnQgd2l0aCBib290IHBhcmFtZXRlciBhenRjZD0wLgorCitNb3N0IGRpc3RyaWJ1dGlvbnMgbm93YWRheXMgZG8gY29udGFpbiBhIGJvb3QgZGlzayBpbWFnZSBjb250YWluaW5nIGF6dGNkLgorUGxlYXNlIG5vdGUsIHRoYXQgdGhpcyBkcml2ZXIgd2lsbCBub3Qgd29yayB3aXRoIElERS9BVEFQSSBkcml2ZXMhIFdpdGggdGhlc2UgCit5b3UgbXVzdCB1c2UgaWRlLWNkLmMgaW5zdGVhZC4KKworNC4gUkVDT01QSUxJTkcgWU9VUiBLRVJORUwKK0lmIHlvdXIga2VybmVsIGlzIG5vdCB5ZXQgY29uZmlndXJlZCBmb3IgdGhlIEFaVEVDSCBkcml2ZXIgYW5kIHRoZSBJU085NjYwLQorZmlsZXN5c3RlbSwgeW91IGhhdmUgdG8gcmVjb21waWxlIHlvdXIga2VybmVsOiAKKworLSBFZGl0IGF6dGNkLmggdG8gc2V0IHRoZSBJL08tYWRkcmVzcyB0byB5b3VyIEkvTy1CYXNlIGFkZHJlc3MgKEFaVF9CQVNFX0FERFIpLCAKKyAgdGhlIGRyaXZlciBkb2VzIG5vdCB1c2UgaW50ZXJydXB0cyBvciBETUEsIHNvIGlmIHlvdSBhcmUgdXNpbmcgYW4gQVpURUNICisgIENEMjY4LCBhbiBPUkNISUQgQ0QtMzExMCBvciBPUkNISUQvV0VBUk5FUyBDREQxMTAgdGhhdCdzIHRoZSBvbmx5IGl0ZW0geW91IAorICBoYXZlIHRvIHNldCB1cC4gSWYgeW91IGhhdmUgYSBzb3VuZGNhcmQsIHJlYWQgY2hhcHRlciA0LjIuCisgIFVzZXJzIG9mIG90aGVyIGRyaXZlcyBzaG91bGQgcmVhZCBjaGFwdGVyIE9USEVSIERSSVZFUyBvZiB0aGlzIGZpbGUuCisgIFlvdSBhbHNvIGNhbiBjb25maWd1cmUgdGhhdCBhZGRyZXNzIGJ5IGtlcm5lbCBib290IHBhcmFtZXRlciBhenRjZD0uLi4gCistIGF6dGNkIG1heSBiZSBjb25maWd1cmVkIHRvIHVzZSBhdXRvcHJvYmluZyB0aGUgYmFzZSBhZGRyZXNzIGJ5IHNldHRpbmcKKyAgQVpUX0JBU0VfQUREUiB0byAnLTEnLiBJbiB0aGF0IGNhc2UgYXp0Y2QgcHJvYmVzIHRoZSBhZGRyZXNzZXMgbGlzdGVkIAorICB1bmRlciBBWlRfQkFTRV9BVVRPLiBCdXQgcGxlYXNlIHJlbWVtYmVyLCB0aGF0IGF1dG9wcm9iaW5nIGFsd2F5cyBtYXkgCisgIGluY29ycmVjdGx5IGluZmx1ZW5jZSBvdGhlciBoYXJkd2FyZSBjb21wb25lbnRzIHRvbyEKKy0gVGhlcmUgYXJlIHNvbWUgb3RoZXIgcG9pbnRzLCB3aGljaCBtYXkgYmUgY29uZmlndXJlZCwgZS5nLiBhdXRvLWVqZWN0IHRoZQorICBDRCB3aGVuIHVubW91bnRpbmcgYSBkcml2ZSwgdHJheSBsb2NraW5nIGV0Yy4sIHNlZSBhenRjZC5oIGZvciBkZXRhaWxzLgorLSBJZiB5b3UncmUgdXNpbmcgYSBsaW51eCBrZXJuZWwgdmVyc2lvbiBwcmlvciB0byAyLjEuMCwgaW4gYXp0Y2QuaAorICB1bmNvbW1lbnQgdGhlIGxpbmUgJyNkZWZpbmUgQVpUX0tFUk5FTF9QUklPUl8yXzEnCistIEJ1aWxkIGEgbmV3IGtlcm5lbCwgY29uZmlndXJlIGl0IGZvciAnQXp0ZWNoL09yY2hpZC9Pa2Fuby9XZWFybmVzIHN1cHBvcnQnIAorICAoaWYgeW91IHdhbnQgYXp0Y2QgdG8gYmUgcGFydCBvZiB0aGUga2VybmVsKS4gRG8gbm90IGNvbmZpZ3VyZSBpdCBmb3IKKyAgJ0F6dGVjaC4uLiBzdXBwb3J0JywgaWYgeW91IHdhbnQgdG8gdXNlIGF6dGNkIGFzIGEgcnVuIHRpbWUgbG9hZGFibGUgbW9kdWxlLiAKKyAgQnV0IGluIGFueSBjYXNlIHlvdSBtdXN0IGhhdmUgdGhlIElTTzk2NjAtZmlsZXN5c3RlbSBpbmNsdWRlZCBpbiB5b3VyCisgIGtlcm5lbC4KKy0gQWN0aXZhdGUgdGhlIG5ldyBrZXJuZWwsIG5vcm1hbGx5IHRoaXMgaXMgZG9uZSBieSBydW5uaW5nIExJTE8gKGRvbid0IGZvci0KKyAgZ2V0IHRvIGNvbmZpZ3VyZSBpdCBiZWZvcmUgYW5kIHRvIGtlZXAgYSBjb3B5IG9mIHlvdXIgb2xkIGtlcm5lbCBpbiBjYXNlCisgIHNvbWV0aGluZyBnb2VzIHdyb25nISkuCistIFJlYm9vdAorLSBJZiB5b3UndmUgaW5jbHVkZWQgYXp0Y2QgaW4geW91ciBrZXJuZWwsIHlvdSBub3cgc2hvdWxkIHNlZSBkdXJpbmcgYm9vdCAKKyAgc29tZSBtZXNzYWdlcyBsaWtlCisgICAgQXp0ZWNoIENELVJPTSBJbml0OiBEcml2ZXJWZXJzaW9uPTx2ZXJzaW9uIG51bWJlcj4gQmFzZUFkZHJlc3M9PGJhc2VhZGRyZXNzPgorICAgIEF6dGVjaCBDRC1ST00gSW5pdDogRmlybXdhcmVWZXJzaW9uPTxmaXJtd2FyZSB2ZXJzaW9uIGlkIG9mIHlvdXIgSS9PLWNhcmQ+CisgICAgQXp0ZWNoIENELVJPTSBJbml0OiA8ZHJpdmUgdHlwZT4gZGV0ZWN0ZWQKKyAgICBBenRlY2ggQ0QtUk9NIEluaXQ6IEVuZAorLSBJZiB5b3UgaGF2ZSBub3QgaW5jbHVkZWQgYXp0Y2QgaW4geW91ciBrZXJuZWwsIGJ1dCB3YW50IHRvIGxvYWQgYXp0Y2QgYXMgYSAKKyAgcnVuIHRpbWUgbG9hZGFibGUgbW9kdWxlIHNlZSA0LjEuIAorLSBJZiB0aGUgbWVzc2FnZSBsb29rcyBjb3JyZWN0LCBhcyB1c2VyICdyb290JyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gbW91bnQgCisgIHRoZSBkcml2ZSBieQorICAgICAgICAgIG1vdW50IC10IGlzbzk2NjAgLXIgL2Rldi9henRjZDAgL21udAorICBhbmQgdXNlIGl0IGFzIGFueSBvdGhlciBmaWxlc3lzdGVtLiAoSWYgdGhpcyBkb2VzIG5vdCB3b3JrLCBjaGVjayBpZgorICAvZGV2L2F6dGNkMCBhbmQgL21udCBkbyBleGlzdCBhbmQgY3JlYXRlIHRoZW0sIGlmIG5lY2Vzc2FyeSBieSBkb2luZworICAgICAgbWtub2QgL2Rldi9henRjZDAgYiAyOSAwCisgICAgICBta2RpciAvbW50ICAgICAgICAgICAgICAgICAgICAgICAKKy0gSWYgdGhpcyBzdGlsbCBkb2VzIG5vdCBoZWxwLCBzZWUgY2hhcHRlcnMgT1RIRVIgRFJJVkVTIGFuZCBERUJVR0dJTkcuCisKKzQuMSBBWlRDRCBBUyBBIFJVTi1USU1FIExPQURBQkxFIE1PRFVMRQorSWYgeW91IGRvIG5vdCBuZWVkIGF6dGNkIHBlcm1hbmVudGx5LCB5b3UgY2FuIGFsc28gbG9hZCBhbmQgcmVtb3ZlIHRoZSBkcml2ZXIKK2R1cmluZyBydW50aW1lIHZpYSBpbnNtb2QgYW5kIHJtbW9kLiBUbyBidWlsZCBhenRjZCBhcyBhIGxvYWRhYmxlIG1vZHVsZSB5b3UgCittdXN0IGNvbmZpZ3VyZSB5b3VyIGtlcm5lbCBmb3IgQVpURUNIIG1vZHVsZSBzdXBwb3J0IChhbnN3ZXIgJ20nIHdoZW4gY29uLQorZmlndXJpbmcgdGhlIGtlcm5lbCkuIEFueWhvdywgeW91IG1heSBydW4gaW50byBwcm9ibGVtcywgaWYgdGhlIHZlcnNpb24gb2YgCit5b3VyIGJvb3Qga2VybmVsIGlzIG5vdCB0aGUgc2FtZSB0aGFuIHRoZSBzb3VyY2Uga2VybmVsIHZlcnNpb24sIGZyb20gd2hpY2ggCit5b3UgY3JlYXRlIHRoZSBtb2R1bGVzLiBTbyByZWJ1aWxkIHlvdXIga2VybmVsLCBpZiBuZWNlc3NhcnkuIAorCitOb3cgZWRpdCB0aGUgYmFzZSBhZGRyZXNzIG9mIHlvdXIgQVpURUNIIGludGVyZmFjZSBjYXJkIGluCisvdXNyL3NyYy9saW51eC9kcml2ZXJzL2Nkcm9tL2F6dGNkLmggdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlLiAKK2F6dGNkIG1heSBiZSBjb25maWd1cmVkIHRvIHVzZSBhdXRvcHJvYmluZyB0aGUgYmFzZSBhZGRyZXNzIGJ5IHNldHRpbmcKK0FaVF9CQVNFX0FERFIgdG8gJy0xJy4gSW4gdGhhdCBjYXNlIGF6dGNkIHByb2JlcyB0aGUgYWRkcmVzc2VzIGxpc3RlZCAKK3VuZGVyIEFaVF9CQVNFX0FVVE8uIEJ1dCBwbGVhc2UgcmVtZW1iZXIsIHRoYXQgYXV0b3Byb2JpbmcgYWx3YXlzIG1heSAKK2luY29ycmVjdGx5IGluZmx1ZW5jZSBvdGhlciBoYXJkd2FyZSBjb21wb25lbnRzIHRvbyEKK1RoZXJlIGFyZSBhbHNvIHNvbWUgc3BlY2lhbCBmZWF0dXJlcyB3aGljaCBtYXkgYmUgY29uZmlndXJlZCwgZS5nLiAKK2F1dG8tZWplY3QgYSBDRCB3aGVuIHVubW91bnRpbmcgdGhlIGRyaXZlIGV0Yzsgc2VlIGF6dGNkLmggZm9yIGRldGFpbHMuIAorVGhlbiBjaGFuZ2UgdG8gL3Vzci9zcmMvbGludXggYW5kIGRvIGEgCisgICAgICAgICAgICAgICAgICAgIG1ha2UgbW9kdWxlcyAgCisJICAgICAgICAgICAgbWFrZSBtb2R1bGVzX2luc3RhbGwKK0FmdGVyIHRoYXQgeW91IGNhbiBydW4tdGltZSBsb2FkIHRoZSBkcml2ZXIgdmlhCisgICAgICAgICAgICAgICAgICAgIGluc21vZCAvbGliL21vZHVsZXMvWC5YLlgvbWlzYy9henRjZC5vCithbmQgcmVtb3ZlIGl0IHZpYSAgIHJtbW9kICBhenRjZC4KK0lmIHlvdSBkaWQgbm90IHNldCB0aGUgY29ycmVjdCBiYXNlIGFkZHJlc3MgaW4gYXp0Y2QuaCwgeW91IGNhbiBhbHNvIHN1cHBseSB0aGUKK2Jhc2UgYWRkcmVzcyB3aGVuIGxvYWRpbmcgdGhlIGRyaXZlciB2aWEKKyAgICAgICAgICAgICAgICAgICAgaW5zbW9kIC9saWIvbW9kdWxlcy9YLlguWC9taXNjL2F6dGNkLm8gYXp0Y2Q9PGJhc2UgYWRkcmVzcz4KK0FnYWluIHNwZWNpZnlpbmcgYXp0Y2Q9LTEgd2lsbCBjYXVzZSBhdXRvcHJvYmluZy4KK0lmIHlvdSBkbyBub3QgaGF2ZSB0aGUgaXNvOTY2MC1maWxlc3lzdGVtIGluIHlvdXIgYm9vdCBrZXJuZWwsIHlvdSBhbHNvIGhhdmUKK3RvIGxvYWQgaXQgYmVmb3JlIHlvdSBjYW4gbW91bnQgdGhlIENEUk9NOgorICAgICAgICAgICAgICAgICAgICBpbnNtb2QgL2xpYi9tb2R1bGVzL1guWC5YL2ZzL2lzb2ZzLm8KK1RoZSBtb3VudCBwcm9jZWR1cmUgd29ya3MgYXMgZGVzY3JpYmVkIGluIDQuIGFib3ZlLgorKEluIGFsbCBjb21tYW5kcyAnWC5YLlgnIGlzIHRoZSBjdXJyZW50IGxpbnV4IGtlcm5lbCB2ZXJzaW9uIG51bWJlcikKKworNC4yIENEUk9NIENPTk5FQ1RFRCBUTyBBIFNPVU5EQ0FSRAorTW9zdCBzb3VuZGNhcmRzIGRvIGhhdmUgYSBidXMgaW50ZXJmYWNlIHRvIHRoZSBDRFJPTS1kcml2ZS4gSW4gbWFueSBjYXNlcwordGhpcyBzb3VuZGNhcmQgbmVlZHMgdG8gYmUgY29uZmlndXJlZCwgYmVmb3JlIHRoZSBDRFJPTSBjYW4gYmUgdXNlZC4gVGhpcworY29uZmlndXJhdGlvbiBwcm9jZWR1cmUgY29uc2lzdHMgb2Ygd3JpdGluZyBzb21lIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24KK2RhdGEgdG8gdGhlIHNvdW5kY2FyZCByZWdpc3RlcnMuIFRoZSBBWlRFQ0gtQ0RST00gZHJpdmVyIGluIHRoZSBtb21lbnQgZG9lcworb25seSBzdXBwb3J0IG9uZSB0eXBlIG9mIHNvdW5kY2FyZCAoU291bmRXYXZlMzIpLiBVc2VycyBvZiBvdGhlciBzb3VuZGNhcmRzCitzaG91bGQgdHJ5IHRvIGJvb3QgRE9TIGZpcnN0IGFuZCBsZXQgdGhlaXIgRE9TIGRyaXZlcnMgaW5pdGlhbGl6ZSB0aGUKK3NvdW5kY2FyZCBhbmQgQ0RST00sIHRoZW4gd2FybSBib290IChvciB1c2UgbG9hZGxpbikgdGhlaXIgUEMgdG8gc3RhcnQKK0xpbnV4LgorU3VwcG9ydCBmb3IgdGhlIENEUk9NLWludGVyZmFjZSBvZiBTb3VuZFdhdmUzMi1zb3VuZGNhcmRzIGlzIGRpcmVjdGx5CitpbXBsZW1lbnRlZCBpbiB0aGUgQVpURUNIIGRyaXZlci4gUGxlYXNlIGVkaXQgbGludXgvZHJpdmVycy9jZHJvbS9henRkYy5oLAordW5jb21tZW50IGxpbmUgJyNkZWZpbmUgQVpUX1NXMzInIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGZvcgorQVpUX0JBU0VfQUREUiBhbmQgQVpUX1NXMzJfQkFTRV9BRERSLiBUaGlzIHN1cHBvcnQgd2FzIHRlc3RlZCB3aXRoIGFuIE9yY2hpZAorQ0RTLTMxMTAgY29ubmVjdGVkIHRvIGEgU291bmRXYXZlMzIuCitJZiB5b3Ugd2FudCB5b3VyIHNvdW5kY2FyZCB0byBiZSBzdXBwb3J0ZWQsIGZpbmQgb3V0LCBob3cgaXQgbmVlZHMgdG8gYmUKK2NvbmZpZ3VyZWQgYW5kIG1haWwgbWUgKHNlZSA2LikgdGhlIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uLiAKKworNS4gS05PV04gUFJPQkxFTVMsIEZVVFVSRSBERVZFTE9QTUVOVFMKKzUuMSBNVUxUSVNFU1NJT04gU1VQUE9SVAorTXVsdGlzZXNzaW9uIHN1cHBvcnQgZm9yIENEJ3Mgc3RpbGwgaXMgYSBteXRoLiBJIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgYSBiYXNpYworc3VwcG9ydCBmb3IgbXVsdGlzZXNzaW9uIGFuZCBYQSBDRHMsIGJ1dCBJIHN0aWxsIGhhdmUgbm90IGVub3VnaCBDRHMgYW5kIGFwcGxpLQorY2F0aW9ucyB0byB0ZXN0IGl0IHJpZ29yb3VzbHkuIFNvIGlmIHlvdSdkIGxpa2UgdG8gaGVscCBtZSwgcGxlYXNlIGNvbnRhY3QgbWUKKyhFbWFpbCBhZGRyZXNzIHNlZSBiZWxvdykuIEFzIG9mIHZlcnNpb24gMS40IGFuZCBuZXdlciB5b3UgY2FuIGVuYWJsZSB0aGUgCittdWx0aXNlc3Npb24gc3VwcG9ydCBpbiBhenRjZC5oIGJ5IHNldHRpbmcgQVpUX01VTFRJU0VTU0lPTiB0byAxLiBEb2luZyBzbyAKK3dpbGwgY2F1c2UgdGhlIElTTzk2NjAtZmlsZXN5c3RlbSB0byBkZWFsIHdpdGggbXVsdGlzZXNzaW9uIENEcywgaWUuIHJlZGlyZWN0IAorcmVxdWVzdHMgdG8gdGhlIFRhYmxlIG9mIENvbnRlbnRzIChUT0MpIGluZm9ybWF0aW9uIGZyb20gdGhlIGxhc3Qgc2Vzc2lvbiwgCit3aGljaCBjb250YWlucyB0aGUgaW5mbyBvZiBhbGwgcHJldmlvdXMgc2Vzc2lvbnMgZXRjLi4gSWYgeW91IGRvIHNldCAKK0FaVF9NVUxUSVNFU1NJT04gdG8gMCwgeW91IGNhbiB1c2UgbXVsdGlzZXNzaW9uIENEcyBhbnl3YXkuIEluIHRoYXQgY2FzZSB0aGUgCitkcml2ZSdzIGZpcm13YXJlIHdpbGwgZG8gYXV0b21hdGljIHJlZGlyZWN0aW9uLiBGb3IgdGhlIElTTzk2NjAtZmlsZXN5c3RlbSBhbnkgCittdWx0aXNlc3Npb24gQ0QgIHdpbGwgdGhlbiBsb29rIGxpa2UgYSAnbm9ybWFsJyBzaW5nbGUgc2Vzc2lvbiBDRC4gQnV0IG5ldmVyLQordGhlbGVzcyB0aGUgZGF0YSBvZiBhbGwgc2Vzc2lvbnMgYXJlIHZpZXdhYmxlIGFuZCBhY2Nlc3NpYmxlLiBTbyB3aXRoIHByYWN0aWNhbC0KK2x5IGFsbCByZWFsIHdvcmxkIGFwcGxpY2F0aW9ucyB5b3Ugd29uJ3Qgbm90aWNlIHRoZSBkaWZmZXJlbmNlLiBCdXQgYXMgZnV0dXJlCithcHBsaWNhdGlvbnMgbWF5IG1ha2UgdXNlIG9mIGFkdmFuY2VkIG11bHRpc2Vzc2lvbiBmZWF0dXJlcywgSSd2ZSBzdGFydGVkIHRvCitpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBmb3IgdGhlIElTTzk2NjAgbXVsdGlzZXNzaW9uIGludGVyZmFjZSB2aWEgaW9jdGwKK0NEUk9NTVVMVElTRVNTSU9OLgorCis1LjIgU1RBVFVTIFJFQ09HTklUSU9OCitUaGUgZHJpdmUgc3RhdHVzIHJlY29nbml0aW9uIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIGFsbCBjYXNlcy4gQ2hhbmdpbmcKK2EgZGlzayBvciBoYXZpbmcgdGhlIGRvb3Igb3Blbiwgd2hlbiBhIGRyaXZlIGlzIGFscmVhZHkgbW91bnRlZCwgaXMgZGV0ZWN0ZWQgCitieSB0aGUgQXp0ZWNoIGRyaXZlciBpdHNlbGYsIGJ1dCBuZXZlcnRoZWxlc3MgY2F1c2VzIG11bHRpcGxlIHJlYWQgYXR0ZW1wdHMKK2J5IHRoZSBkaWZmZXJlbnQgbGF5ZXJzIG9mIHRoZSBJU085NjYwLWZpbGVzeXN0ZW0gZHJpdmVyLCB3aGljaCBmaW5hbGx5IHRpbWVvdXQsCitzbyB5b3UgaGF2ZSB0byB3YWl0IHF1aXRlIGEgbGl0dGxlLi4uIEJ1dCBpc24ndCBpdCBiYWQgc3R5bGUgdG8gY2hhbmdlIGEgZGlzayAKK2luIGEgbW91bnRlZCBkcml2ZSwgYW55aG93ID8hCisKK1RoZSBkcml2ZXIgdXNlcyBidXN5IHdhaXQgaW4gbW9zdCBjYXNlcyBmb3IgdGhlIGRyaXZlIGhhbmRzaGFrZSAobWFjcm9zCitTVEVOX0xPVyBhbmQgRFRFTl9MT1cpLiBJIHRlc3RlZCB3aXRoIGEgNDg2L0RYMiBhdCA2Nk1IeiBhbmQgYSBQZW50aXVtIGF0Cis2ME1IeiBhbmQgOTBNSHouIFdoZW5ldmVyIHlvdSB1c2UgYSBtdWNoIGZhc3RlciBtYWNoaW5lIHlvdSBhcmUgbGlrZWx5IHRvIGdldCAKK3RpbWVvdXQgbWVzc2FnZXMuIEluIHRoYXQgY2FzZSBlZGl0IGF6dGNkLmggYW5kIGluY3JlYXNlIHRoZSB0aW1lb3V0IHZhbHVlIAorQVpUX1RJTUVPVVQuIAorCitGb3Igc29tZSAnc2xvdycgZHJpdmUgY29tbWFuZHMgSSBpbXBsZW1lbnRlZCB3YWl0aW5nIHdpdGggYSB0aW1lciB3YWl0cXVldWUKKyhtYWNybyBTVEVOX0xPV19XQUlUKS4gSWYgeW91IGdldCB0aGlzIHRpbWVvdXQgbWVzc2FnZSwgeW91IG1heSBhbHNvIGVkaXQKK2F6dGNkLmggYW5kIGluY3JlYXNlIHRoZSB0aW1lb3V0IHZhbHVlIEFaVF9TVEFUVVNfREVMQVkuIFRoZSB3YWl0cXVldWUgaGFzCitzaG93biB0byBiZSBhIGxpdHRsZSBjcml0aWNhbC4gSWYgeW91IGdldCBrZXJuZWwgcGFuaWMgbWVzc2FnZXMsIGVkaXQgYXp0Y2QuYworYW5kIHN1YnN0aXR1dGUgU1RFTl9MT1dfV0FJVCBieSBTVEVOX0xPVy4gQnVzeSB3YWl0aW5nIHdpdGggU1RFTl9MT1cgaXMgbW9yZQorc3RhYmxlLCBidXQgYWxzbyBjYXVzZXMgQ1BVIG92ZXJoZWFkLgorCis1LjMgRE9TRU1VJ3MgQ0QtUk9NIFNVUFBPUlQKK1dpdGggcmVsZWFzZSAxLjIwIGF6dGNkIHdhcyBtb2RpZmllZCB0byBhbGxvdyBhY2Nlc3MgdG8gQ0QtUk9NUyB3aGVuIHJ1bm5pbmcKK3VuZGVyIGRvc2VtdS0wLjYwLjAgYXp0Y2QtdmVyc2lvbnMgYmVmb3JlIDEuMjAgYXJlIG1vc3QgbGlrZWx5IHRvIGNyYXNoCitMaW51eCwgd2hlbiBhIENELVJPTSBpcyBhY2Nlc3NlZCB1bmRlciBkb3NlbXUuIFRoaXMgcHJvYmxlbSBoYXMgcGFydGx5IGJlZW4KK2ZpeGVkLCBidXQgc3RpbGwgd2hlbiBhY2Nlc3NpbmcgYSBkaXJlY3RvcnkgZm9yIHRoZSBmaXJzdCB0aW1lIHRoZSBzeXN0ZW0KK21pZ2h0IGhhbmcgZm9yIHNvbWUgMzBzZWMuIFNvIGJlIHBhdGllbnQsIHdoZW4gdXNpbmcgZG9zZW11J3MgQ0QtUk9NIHN1cHBvcnQKK2luIGNvbWJpbmF0aW9uIHdpdGggYXp0Y2QgOi0pICEgCitUaGlzIHByb2JsZW0gaGFzIG5vdyAoSnVseSAxOTk1KSBiZWVuIGZpeGVkIGJ5IGEgbW9kaWZpY2F0aW9uIHRvIGRvc2VtdSdzCitDRC1ST00gZHJpdmVyLiBUaGUgbmV3IHZlcnNpb24gY2FtZSB3aXRoIGRvc2VtdS0wLjYwLjIsIHNlZSBkb3NlbXUncworUkVBRE1FLkNEUk9NLgorCis2LiBCVUcgUkVQT1JUUworUGxlYXNlIHNlbmQgZGV0YWlsZWQgYnVnIHJlcG9ydHMgYW5kIGJ1ZyBmaXhlcyB2aWEgRU1haWwgdG8KKworICAgICAgICBXZXJuZXIuWmltbWVybWFubkBmaHQtZXNzbGluZ2VuLmRlCisKK1BsZWFzZSBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YgeW91ciBDRC1ST00gZHJpdmUgdHlwZSBhbmQgaW50ZXJmYWNlIGNhcmQsIAordGhlIGV4YWN0IGZpcm13YXJlIG1lc3NhZ2UgZHVyaW5nIExpbnV4IGJvb3R1cCwgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSAKK0FaVEVDSC1DRFJPTS1kcml2ZXIgYW5kIHRoZSBMaW51eCBrZXJuZWwgdmVyc2lvbi4gQWxzbyBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgCitzeXN0ZW0ncyBvdGhlciBoYXJkd2FyZSBjb3VsZCBiZSBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSBtaWNyb3Byb2Nlc3NvciB0eXBlLCAKK2Nsb2NrIGZyZXF1ZW5jeSwgb3RoZXIgaW50ZXJmYWNlIGNhcmRzIHN1Y2ggYXMgc291bmRjYXJkcywgZXRoZXJuZXQgYWRhcHRlciwgCitnYW1lIGNhcmRzIGV0Yy4uCisKK0kgd2lsbCB0cnkgdG8gY29sbGVjdCB0aGUgcmVwb3J0cyBhbmQgbWFrZSB0aGUgbmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMgZnJvbSAKK3RpbWUgdG8gdGltZS4gSSBtYXkgYWxzbyBjb21lIGJhY2sgdG8geW91IGRpcmVjdGx5IHdpdGggc29tZSBidWcgZml4ZXMgYW5kIAorYXNrIHlvdSB0byBkbyBmdXJ0aGVyIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4KKworRWRpdG9ycyBvZiBDRC1ST01zIGFyZSBpbnZpdGVkIHRvIHNlbmQgYSAnY29vcGVyYXRpb24nIGNvcHkgb2YgdGhlaXIKK0NELVJPTXMgdG8gdGhlIHZvbHVudGVlcnMsIHdobyBwcm92aWRlZCB0aGUgQ0QtUk9NIHN1cHBvcnQgZm9yIExpbnV4LiBNeQorc25haWwgbWFpbCBhZGRyZXNzIGZvciBzdWNoICdzdHVmZicgaXMKKyAgICAgICAgICAgUHJvZi4gRHIuIFcuIFppbW1lcm1hbm4KKyAgICAgICAgICAgRmFjaGhvY2hzY2h1bGUgZnVlciBUZWNobmlrIEVzc2xpbmdlbgorICAgICAgICAgICBGYWNoYmVyZWljaCBJVAorICAgICAgICAgICBGbGFuZGVybnN0cmFzc2UgMTAxCisgICAgICAgICAgIEQtNzM3MzIgRXNzbGluZ2VuCisgICAgICAgICAgIEdlcm1hbnkKKworCis3LiBPVEhFUiBEUklWRVMKK1RoZSBmb2xsb3dpbmcgZHJpdmVzIE9SQ0hJRCBDRFMzMTEwLCBPS0FOTyBDREQxMTAsIFdFQVJORVMgQ0REMTEwIGFuZCBDb25yYWQKK1RYQyBOci4gOTkzMTIzLXNlcmllcyAwNCBuZWFybHkgbG9vayB0aGUgc2FtZSBhcyBBWlRFQ0ggQ0RBMjY4LTAxQSwgZXNwZWNpYWxseSAKK3RoZXkgc2VlbSB0byB1c2UgdGhlIHNhbWUgY29tbWFuZCBjb2Rlcy4gU28gaXQgd2FzIHF1aXRlIHNpbXBsZSB0byBtYWtlIHRoZSAKK0FaVEVDSCBkcml2ZXIgd29yayB3aXRoIHRoZXNlIGRyaXZlcy4gCisKK1VuZm9ydHVuYXRlbHkgSSBkbyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZHJpdmVzIGF2YWlsYWJsZSwgc28gSSBjb3VsZG4ndCB0ZXN0CitpdCBteXNlbGYuIEluIHNvbWUgaW5zdGFsbGF0aW9ucywgaXQgc2VlbXMgbmVjZXNzYXJ5IHRvIGluaXRpYWxpemUgdGhlIGRyaXZlIAord2l0aCB0aGUgRE9TIGRyaXZlciBiZWZvcmUgKGVzcGVjaWFsbHkgaWYgY29tYmluZWQgd2l0aCBhIHNvdW5kIGNhcmQpIGFuZCB0aGVuIAorZG8gYSB3YXJtIGJvb3QgKENUUkwtQUxULVJFU0VUKSBvciBzdGFydCBMaW51eCBmcm9tIERPUywgZS5nLiB3aXRoICdsb2FkbGluJy4KKworSWYgeW91IGRvIG5vdCBzdWNjZWVkLCByZWFkIGNoYXB0ZXIgREVCVUdHSU5HLiBUaGFua3MgaW4gYWR2YW5jZSEKKworU29ycnkgZm9yIHRoZSBpbmNvbnZlbmllbmNlLCBidXQgaXQgaXMgZGlmZmljdWx0IHRvIGRldmVsb3AgZm9yIGhhcmR3YXJlLCAKK3doaWNoIHlvdSBkb24ndCBoYXZlIGF2YWlsYWJsZSBmb3IgdGVzdGluZy4gU28gaWYgeW91IGxpa2UsIHBsZWFzZSBoZWxwIHVzLgorCitJZiB5b3UgZG8gaGF2ZSBhIEN5Q0RST00gQ1I1MjBpZSB0aGFua3MgdG8gSGlsbWFyIEJlcmdlcidzIGhlbHAgeW91ciBjaGFuY2VzCithcmUgZ29vZCwgdGhhdCBpdCB3aWxsIHdvcmsgd2l0aCBhenRjZC4gVGhlIENSNTIwaWUgaXMgc29sZCBhcyBhbiBJREUtZHJpdmUKK2FuZCByZWFsbHkgaXMgY29ubmVjdGVkIHRvIHRoZSBJREUgaW50ZXJmYWNlIChwcmltYXJ5IGF0IDB4MUYwIG9yIHNlY29uZGFyeQorYXQgMHgxNzAsIGNvbmZpZ3VyZWQgYXMgc2xhdmUsIG5vdCBhcyBtYXN0ZXIpLiBOZXZlcnRoZWxlc3MgaXQgaXMgbm90IEFUQVBJCitjb21wYXRpYmxlIGJ1dCBzdGlsbCB1c2VzIEF6dGVjaCdzIGNvbW1hbmQgY29kZXMuCisKKworOC4gREVCVUdHSU5HIDogSUYgWU9VIERPTidUIFNVQ0NFRUQsIFRSWSBUSEUgRk9MTE9XSU5HCistcmVyZWFkIHRoZSBjb21wbGV0ZSBSRUFETUUgZmlsZQorLW1ha2Ugc3VyZSwgdGhhdCB5b3VyIGRyaXZlIGlzIGhhcmR3YXJlIGNvbmZpZ3VyZWQgZm9yIAorICAgIHRyYW5zZmVyIG1vZGU6IHBvbGxlZAorICAgIElSUTogICAgICAgICAgIG5vdCB1c2VkCisgICAgRE1BOiAgICAgICAgICAgbm90IHVzZWQKKyAgICBCYXNlIEFkZHJlc3M6ICBzb21ldGhpbmcgbGlrZSAzMDAsIDMyMCAuLi4KKyBZb3UgY2FuIGNoZWNrIHRoaXMsIHdoZW4geW91IHN0YXJ0IHRoZSBET1MgZHJpdmVyLCB3aGljaCBjYW1lIHdpdGggeW91cgorIGRyaXZlLiBCeSBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyaW5nIHRoZSBkcml2ZSBhbmQgdGhlIERPUyBkcml2ZXIgeW91IGNhbgorIGNoZWNrLCB3aGV0aGVyIHlvdXIgZHJpdmUgZG9lcyBvcGVyYXRlIGluIHRoaXMgbW9kZSBjb3JyZWN0bHkgdW5kZXIgRE9TLiBJZgorIGl0IGRvZXMgbm90IG9wZXJhdGUgdW5kZXIgRE9TLCBpdCB3b24ndCB1bmRlciBMaW51eC4KKyBJZiB5b3VyIGRyaXZlJ3MgYmFzZSBhZGRyZXNzIGlzIHNvbWV0aGluZyBsaWtlIDB4MTcwIG9yIDB4MUYwIChhbmQgaXQgaXMKKyBub3QgYSBDeUNEUk9NIENSNTIwaWUgb3IgQ1IgOTQwaWUpIHlvdSBtb3N0IGxpa2VseSBhcmUgaGF2aW5nIGFuIElERS9BVEFQSS0KKyBjb21wYXRpYmxlIGRyaXZlLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGF6dGNkLmMsIHVzZSBpZGUtY2QuYyBpbnN0ZWFkLgorIE1ha2Ugc3VyZSB0aGUgQmFzZSBBZGRyZXNzIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGluIGF6dGNkLmgsIGFsc28gbWFrZQorIHN1cmUsIHRoYXQgL2Rldi9henRjZDAgZXhpc3RzIHdpdGggdGhlIGNvcnJlY3QgbWFqb3IgbnVtYmVyIChjb21wYXJlIGl0IHdpdGgKKyB0aGUgZW50cnkgaW4gZmlsZSAvdXNyL2luY2x1ZGUvbGludXgvbWFqb3IuaCBmb3IgdGhlIEF6dGVjaCBkcml2ZSkuIAorLWluc2VydCBhIENELVJPTSBhbmQgY2xvc2UgdGhlIHRyYXkKKy1jb2xkIGJvb3QgeW91ciBQQyAoaS5lLiB2aWEgdGhlIHBvd2VyIG9uIHN3aXRjaCBvciB0aGUgcmVzZXQgYnV0dG9uKQorLWlmIHlvdSBzdGFydCBMaW51eCB2aWEgRE9TLCBlLmcuIHVzaW5nIGxvYWRsaW4sIG1ha2Ugc3VyZSwgdGhhdCB0aGUgRE9TCisgZHJpdmVyIGZvciB0aGUgQ0QtUk9NIGRyaXZlIGlzIG5vdCBsb2FkZWQgKGNvbW1lbnQgb3V0IHRoZSBjYWxsaW5nIGxpbmVzIAorIGluIERPUycgY29uZmlnLnN5cyEpCistbG9vayBmb3IgdGhlIGF6dGNkOiBpbml0IG1lc3NhZ2UgZHVyaW5nIExpbnV4IGluaXQgYW5kIG5vdGUgdGhlbSBleGFjdGx5CistbG9nIGluIGFzIHJvb3QgYW5kIGRvIGEgbW91bnQgLXQgaXNvOTY2MCAvZGV2L2F6dGNkMCAvbW50CistaWYgeW91IGRvbid0IHN1Y2NlZWQgaW4gdGhlIGZpcnN0IHRpbWUsIHRyeSBzZXZlcmFsIHRpbWVzLiBUcnkgYWxzbyB0byBvcGVuCisgYW5kIGNsb3NlIHRoZSB0cmF5LCB0aGVuIG1vdW50IGFnYWluLiBQbGVhc2Ugbm90ZSBjYXJlZnVsbHkgYWxsIGNvbW1hbmRzCisgeW91IHR5cGVkIGluIGFuZCB0aGUgYXp0Y2QtbWVzc2FnZXMsIHdoaWNoIHlvdSBnZXQuCistaWYgeW91IGdldCBhbiAnQXp0ZWNoIENELVJPTSBpbml0OiBhYm9ydGVkJyBtZXNzYWdlLCByZWFkIHRoZSByZW1hcmtzIGFib3V0CisgdGhlIHZlcnNpb24gc3RyaW5nIGJlbG93LgorCitJZiB0aGlzIGRvZXMgbm90IGhlbHAsIGRvIHRoZSBzYW1lIHdpdGggdGhlIGZvbGxvd2luZyBkaWZmZXJlbmNlcyAKKy1zdGFydCBET1MgYmVmb3JlOyBtYWtlIG5vdyBzdXJlLCB0aGF0IHRoZSBET1MgZHJpdmVyIGZvciB0aGUgQ0QtUk9NIGlzIAorIGxvYWRlZCB1bmRlciBET1MgKGkuZS4gdW5jb21tZW50IGl0IGFnYWluIGluIGNvbmZpZy5zeXMpCistd2FybSBib290IHlvdXIgUEMgKGkuZS4gdmlhIENUUkwtQUxULURFTCkKKyBpZiB5b3UgaGF2ZSBpdCwgeW91IGNhbiBhbHNvIHN0YXJ0IHZpYSBsb2FkbGluICh0cnkgYm90aCkuCisgLi4uCisgQWdhaW4gbm90ZSBhbGwgY29tbWFuZHMgYW5kIHRoZSBhenRjZC1tZXNzYWdlcy4KKworSWYgeW91IHNlZSBTVEVOX0xPVyBvciBTVEVOX0xPV19XQUlUIGVycm9yIG1lc3NhZ2VzLCBpbmNyZWFzZSB0aGUgdGltZW91dAordmFsdWVzLgorCitJZiB0aGlzIHN0aWxsIGRvZXMgbm90IGhlbHAsIAorLWxvb2sgaW4gYXp0Y2QuYyBmb3IgdGhlIGxpbmVzICAjaWYgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIEFaVF9URVNUMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgYW5kIHN1YnN0aXR1dGUgJyNpZiAwJyBieSAnI2lmIDEnLgorLXJlY29tcGlsZSB5b3VyIGtlcm5lbCBhbmQgcmVwZWF0IHRoZSBhYm92ZSB0d28gcHJvY2VkdXJlcy4gWW91IHdpbGwgbm93IGdldCAKKyBhIGJ1bmRsZSBvZiBkZWJ1Z2dpbmcgbWVzc2FnZXMgZnJvbSB0aGUgZHJpdmVyLiBBZ2FpbiBub3RlIHlvdXIgY29tbWFuZHMKKyBhbmQgdGhlIGFwcHJvcHJpYXRlIG1lc3NhZ2VzLiBJZiB5b3UgaGF2ZSBzeXNsb2dkIHJ1bm5pbmcsIHRoZXNlIG1lc3NhZ2VzCisgbWF5IGFsc28gYmUgZm91bmQgaW4gc3lzbG9nZCdzIGtlcm5lbCBsb2cgZmlsZS4gTmV2ZXJ0aGVsZXNzIGluIHNvbWUKKyBpbnN0YWxsYXRpb25zIHN5c2xvZ2QgZG9lcyBub3QgeWV0IHJ1biwgd2hlbiBpbml0KCkgaXMgY2FsbGVkLCB0aHVzIGxvb2sgZm9yCisgdGhlIGF6dGNkLW1lc3NhZ2VzIGR1cmluZyBpbml0LCBiZWZvcmUgdGhlIGxvZ2luLXByb21wdCBhcHBlYXJzLgorIFRoZW4gbG9vayBpbiBhenRjZC5jLCB0byBmaW5kIG91dCwgd2hhdCBoYXBwZW5lZC4gVGhlIG5vcm1hbCBjYWxsaW5nIHNlcXVlbmNlIAorIGlzOiBhenRjZF9pbml0KCkgZHVyaW5nIExpbnV4IGJvb3R1cCBwcm9jZWR1cmUgaW5pdCgpCisgYWZ0ZXIgZG9pbmcgYSAnbW91bnQgLXQgaXNvOTY2MCAvZGV2L2F6dGNkMCAvbW50JyB0aGUgbm9ybWFsIGNhbGxpbmcgc2VxdWVuY2UgaXMKKyAgICAgYXp0Y2Rfb3BlbigpICAgIC0+IFN0YXR1cyAyYyBhZnRlciBjb2xkIHJlYm9vdCB3aXRoIENEUk9NIG9yIGF1ZGlvIENEIGluc2VydGVkCisgICAgICAgICAgICAgICAgICAgICAtPiBTdGF0dXMgOCAgYWZ0ZXIgd2FybSByZWJvb3Qgd2l0aCBDRFJPTSBpbnNlcnRlZCAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIC0+IFN0YXR1cyAyZSBhZnRlciBjb2xkIHJlYm9vdCB3aXRoIG5vIGRpc2ssIGNsb3NlZCB0cmF5CisgICAgICAgICAgICAgICAgICAgICAtPiBTdGF0dXMgNmUgYWZ0ZXIgY29sZCByZWJvb3QsIG1vdW50IHdpdGggZG9vciBvcGVuCisgICAgIGF6dFVwZGF0ZVRvYygpCisgICAgIGF6dEdldERpc2tJbmZvKCkKKyAgICAgYXp0R2V0UUNoYW5uZWxJbmZvKCkgICByZXBlYXRlZCBzZXZlcmFsIHRpbWVzCisgICAgIGF6dEdldFRvYygpCisgICAgIGF6dEdldFFDaGFubmVsSW5mbygpICAgcmVwZWF0ZWQgc2V2ZXJhbCB0aW1lcworICAgICBhIGxpc3Qgb2YgdHJhY2sgaW5mb3JtYXRpb24KKyAgICAgZG9fYXp0Y2RfcmVxdWVzdCgpICB9ICAKKyAgICAgYXp0X3RyYW5zZmVyKCkgICAgfSByZXBlYXRlZCBzZXZlcmFsIHRpbWVzCisgICAgIGF6dF9wb2xsICAgICAgICAgIH0KKyBDaGVjaywgaWYgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGluIHRoZSBjYWxsaW5nIHNlcXVlbmNlIG9yIHRoZSBzdGF0dXMgZmxhZ3MhCisgCisgVGhlcmUgYXJlIGEgbG90IG9mIG90aGVyIG1lc3NhZ2VzLCBlZy4gdGhlIEFDTUQtY29tbWFuZCBjb2RlIChkZWZpbmVkIGluCisgYXp0Y2QuaCksIHN0YXR1cyBpbmZvIGZyb20gdGhlIGdldEF6dFN0YXR1cy1jb21tYW5kIGFuZCB0aGUgc3RhdGUgc2VxdWVuY2Ugb2YKKyB0aGUgZmluaXRlIHN0YXRlIG1hY2hpbmUgaW4gYXp0X3BvbGwoKS4gVGhlIG1vc3QgaW1wb3J0YW50IGFyZSB0aGUgc3RhdHVzCisgbWVzc2FnZXMsIGxvb2sgaG93IHRoZXkgYXJlIGRlZmluZWQgYW5kIHRyeSB0byB1bmRlcnN0YW5kLCBpZiB0aGV5IG1ha2UKKyBzZW5zZSBpbiB0aGUgY29udGV4dCB3aGVyZSB0aGV5IGFwcGVhci4gV2l0aCBhIENELVJPTSBpbnNlcnRlZCB0aGUgc3RhdHVzIAorIHNob3VsZCBhbHdheXMgYmUgOCwgZXhjZXB0IGluIGF6dGNkX29wZW4oKS4gVHJ5IHRvIG9wZW4gdGhlIHRyYXksIGluc2VydCBhbgorIGF1ZGlvIGRpc2ssIGluc2VydCBubyBkaXNrIG9yIHJlaW5zZXJ0IHRoZSBDRC1ST00gYW5kIGNoZWNrLCBpZiB0aGUgc3RhdHVzCisgYml0cyBjaGFuZ2UgYWNjb3JkaW5nbHkuIFRoZSBzdGF0dXMgYml0cyBhcmUgdGhlIG1vc3QgbGlrZWx5IHBvaW50LCB3aGVyZSAKKyB0aGUgZHJpdmUgbWFudWZhY3R1cmVycyBtYXkgaW1wbGVtZW50IGNoYW5nZXMuCisgICAgICAgICAgICAKK0lmIHlvdSBzdGlsbCBkb24ndCBzdWNjZWVkLCBhIGdvb2QgcG9pbnQgdG8gc3RhcnQgaXMgdG8gbG9vayBpbiBhenRjZC5jIGluIAorZnVuY3Rpb24gYXp0Y2RfaW5pdCwgd2hlcmUgdGhlIGRyaXZlIHNob3VsZCBiZSBkZXRlY3RlZCBkdXJpbmcgaW5pdC4gRG8gdGhlCitmb2xsb3dpbmc6CistcmVib290IHRoZSBzeXN0ZW0gd2l0aCBib290IHBhcmFtZXRlciAnYXp0Y2Q9PHlvdXIgYmFzZSBhZGRyZXNzPiwweDc5Jy4gV2l0aAorIHBhcmFtZXRlciAweDc5IG1vc3Qgb2YgdGhlIGRyaXZlIHZlcnNpb24gZGV0ZWN0aW9uIGlzIGJ5cGFzc2VkLiBBZnRlciB0aGF0IAorIHlvdSBzaG91bGQgc2VlIHRoZSBjb21wbGV0ZSB2ZXJzaW9uIHN0cmluZyBpbmNsdWRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgCisgYmxhbmtzIGR1cmluZyBpbml0LiAKKyBOb3cgYWRhcHQgdGhlIHN0YXRlbWVudAorICAgICAgaWYgKChyZXN1bHRbMV09PSdBJykmJihyZXN1bHRbMl09PSdaJyAuLi4pCisgaW4gYXp0Y2RfaW5pdCgpIHRvIGV4YWN0bHkgbWF0Y2ggdGhlIGZpcnN0IDMgb3IgNCBsZXR0ZXJzIHlvdSBoYXZlIHNlZW4uCistQW5vdGhlciBwb2ludCBpcyB0aGUgJ3NtYXJ0JyBjYXJkIGRldGVjdGlvbiBmZWF0dXJlIGluIGF6dGNkX2luaXQoKS4gTm9ybWFsbHkKKyB0aGUgQ0QtUk9NIGRyaXZlIGlzIHJlYWR5LCB3aGVuIGF6dGNkX2luaXQgaXMgdHJ5aW5nIHRvIHJlYWQgdGhlIHZlcnNpb24KKyBzdHJpbmcgYW5kIGEgdGltZSBjb25zdW1pbmcgQUNNRF9TT0ZUX1JFU0VUIGNvbW1hbmQgY2FuIGJlIGF2b2lkZWQuIFRoaXMgaXMKKyBkZXRlY3RlZCBieSBsb29raW5nLCBpZiBBRkxfT1BfT0sgY2FuIGJlIHJlYWQgY29ycmVjdGx5LiBJZiB0aGUgQ0QtUk9NIGRyaXZlIAorIGhhbmdzIGluIHNvbWUgdW5rbm93biBzdGF0ZSwgZS5nLiBiZWNhdXNlIG9mIGFuIGVycm9yIGJlZm9yZSBhIHdhcm0gc3RhcnQgb3IgCisgYmVjYXVzZSB5b3UgZmlyc3Qgb3BlcmF0ZWQgdW5kZXIgRE9TLCBldmVuIHRoZSB2ZXJzaW9uIHN0cmluZyBtYXkgYmUgY29ycmVjdCwgCisgYnV0IHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgd2lsbCBub3QuIFRoZW4gY2hhbmdlIHRoZSBjb2RlIGluIHN1Y2ggYSB3YXksIAorIHRoYXQgdGhlIEFDTURfU09GVF9SRVNFVCBpcyBpc3N1ZWQgaW4gYW55IGNhc2UsIGJ5IHN1YnN0aXR1dGluZyB0aGUKKyBpZi1zdGF0ZW1lbnQgJ2lmICggLi4uPUFGTF9PUF9PSyknIGJ5ICdpZiAoMSknLgorCitJZiB5b3Ugc3VjY2VlZCwgcGxlYXNlIG1haWwgbWUgdGhlIGV4YWN0IHZlcnNpb24gc3RyaW5nIG9mIHlvdXIgZHJpdmUgYW5kCit0aGUgY29kZSBtb2RpZmljYXRpb25zLCB5b3UgaGF2ZSBtYWRlIHRvZ2V0aGVyIHdpdGggYSBzaG9ydCBleHBsYW5hdGlvbi4KK0lmIHlvdSBkb24ndCBzdWNjZWVkLCB5b3UgbWF5IG1haWwgbWUgdGhlIG91dHB1dCBvZiB0aGUgZGVidWdnaW5nIG1lc3NhZ2VzLgorQnV0IHJlbWVtYmVyLCB0aGV5IGFyZSBvbmx5IHVzZWZ1bCwgaWYgdGhleSBhcmUgZXhhY3QgYW5kIGNvbXBsZXRlIGFuZCB5b3UKK2Rlc2NyaWJlIGluIGRldGFpbCB5b3VyIGhhcmR3YXJlIHNldHVwIGFuZCB3aGF0IHlvdSBkaWQgKGNvbGQvd2FybSByZWJvb3QsCit3aXRoL3dpdGhvdXQgRE9TLCBET1MtZHJpdmVyIHN0YXJ0ZWQvbm90IHN0YXJ0ZWQsIHdoaWNoIExpbnV4LWNvbW1hbmRzIGV0Yy4pCisKKworOS4gVEVDSE5JQ0FMIEhJU1RPUlkgT0YgVEhFIERSSVZFUgorVGhlIEFaVEVDSC1Ecml2ZXIgaXMgYSByZXdvcmsgb2YgdGhlIE1pdHN1bWktRHJpdmVyLiBGb3VyIG1ham9yIGl0ZW1zIGhhZCB0bworYmUgcmV3b3JrZWQ6CisKK2EpIFRoZSBNaXRzdW1pIGRyaXZlIGRvZXMgaXNzdWUgY29tcGxldGUgc3RhdHVzIGluZm9ybWF0aW9uIGFja25vd2xlZGdpbmcKK2VhY2ggY29tbWFuZCwgdGhlIEF6dGVjaCBkcml2ZSBkb2VzIG9ubHkgc2lnbmFsIHRoYXQgdGhlIGNvbW1hbmQgd2FzCitwcm9jZXNzZWQuIFNvIHdoZW5ldmVyIHRoZSBjb21wbGV0ZSBzdGF0dXMgaW5mb3JtYXRpb24gaXMgbmVlZGVkLCBhbiBleHRyYQorQUNNRF9HRVRfU1RBVFVTIGNvbW1hbmQgaXMgaXNzdWVkLiBUaGUgaGFuZHNoYWtlIHByb2NlZHVyZSBmb3IgdGhlIGRyaXZlCitjYW4gYmUgZm91bmQgaW4gdGhlIGZ1bmN0aW9ucyBhenRTZW5kQ21kKCksIHNlbmRBenRDbWQoKSBhbmQgZ2V0QXp0U3RhdHVzKCkuCisKK2IpIFRoZSBBenRlY2ggRHJpdmUgZG9lcyBub3QgaGF2ZSBhIEFDTURfR0VUX0RJU0tfSU5GTyBjb21tYW5kLCBzbyB0aGUKK25lY2Vzc2FyeSBpbmZvIGFib3V0IHRoZSBudW1iZXIgb2YgdHJhY2tzIChmaXJzdFRyYWNrLCBsYXN0VHJhY2spLCBkaXNrCitsZW5ndGggZXRjLiBoYXMgdG8gYmUgcmVhZCBmcm9tIHRoZSBUT0MgaW4gdGhlIGxlYWQgaW4gdHJhY2sgKHNlZSBmdW5jdGlvbgorYXp0R2V0RGlza0luZm8oKSkuCisKK2MpIFdoZW5ldmVyIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBkcml2ZSwgdGhlIE1pdHN1bWkgZHJpdmUgaXMgc3RhcnRlZCB3aXRoIGEKK2NvbW1hbmQgdG8gcmVhZCBhbiBpbmRlZmluaXRlICgweGZmZmZmZikgbnVtYmVyIG9mIHNlY3RvcnMuIFdoZW4gdGhlIGFwcHJvcHJpYXRlIAorbnVtYmVyIG9mIHNlY3RvcnMgaXMgcmVhZCwgdGhlIGRyaXZlIGlzIHN0b3BwZWQgYnkgYSBBQ0RNX1NUT1AgY29tbWFuZC4gVGhpcworZG9lcyBub3Qgd29yayB3aXRoIHRoZSBBenRlY2ggZHJpdmUuIEkgZGlkIG5vdCBmaW5kIGEgd2F5IHRvIHN0b3AgaXQuIFRoZQorc3RvcCBhbmQgcGF1c2UgY29tbWFuZHMgZG8gb25seSB3b3JrIGluIEFVRElPIG1vZGUgYnV0IG5vdCBpbiBEQVRBIG1vZGUuCitUaGVyZWZvcmUgSSBoYWQgdG8gbW9kaWZ5IHRoZSAnZmluaXRlIHN0YXRlIG1hY2hpbmUnIGluIGZ1bmN0aW9uIGF6dF9wb2xsIHRvCitvbmx5IHJlYWQgYSBjZXJ0YWluIG51bWJlciBvZiBzZWN0b3JzIGFuZCB0aGVuIHN0YXJ0IGEgbmV3IHJlYWQgb24gZGVtYW5kLiBBcyBJIAoraGF2ZSBub3QgY29tcGxldGVseSB1bmRlcnN0b29kLCBob3cgdGhlIGJ1ZmZlci9jYWNoaW5nIHNjaGVtZSBvZiB0aGUgTWl0c3VtaSAKK2RyaXZlciB3YXMgaW1wbGVtZW50ZWQsIEkgYW0gbm90IHN1cmUsIGlmIEkgaGF2ZSBjb3ZlcmVkIGFsbCBjYXNlcyBjb3JyZWN0bHksIAord2hlbmV2ZXIgeW91IGdldCB0aW1lb3V0IG1lc3NhZ2VzLCB0aGUgYnVnIGlzIG1vc3QgbGlrZWx5IHRvIGJlIGluIHRoYXQKK2Z1bmN0aW9uIGF6dF9wb2xsKCkgYXJvdW5kIHN3aXRjaChjbWQpIC4uLi4gY2FzZSBBQ0RfU19EQVRBLiAKKworZCkgSSBkaWQgbm90IGdldCBpbmZvcm1hdGlvbiBhYm91dCBjaGFuZ2luZyBkcml2ZSBtb2RlLiBTbyBJIGRvdWJ0LCB0aGF0IHRoZQorY29kZSBhcm91bmQgZnVuY3Rpb24gYXp0X3BvbGwoKSBjYXNlIEFaVF9TX01PREUgZG9lcyB3b3JrLiBJbiBteSB0ZXN0IEkgaGF2ZQorbm90IGJlZW4gYWJsZSB0byBzd2l0Y2ggdG8gcmVhZGluZyBpbiByYXcgbW9kZS4gRm9yIHJlYWRpbmcgcmF3IG1vZGUsIEF6dGVjaAordXNlcyBhIGRpZmZlcmVudCBjb21tYW5kIHRoYW4gZm9yIGNvb2tlZCBtb2RlLCB3aGljaCBJIG9ubHkgaGF2ZSBpbXBsZW1lbi0KK3RlZCBpbiB0aGUgaW9jdGwtc2VjdGlvbiBidXQgbm90IGluIHRoZSBzZWN0aW9uIHdoaWNoIGlzIHVzZWQgYnkgdGhlIElTTzk2NjAuIAorCitUaGUgZHJpdmVyIHdhcyBkZXZlbG9wZWQgb24gYW4gQVNUIFBDIHdpdGggSW50ZWwgNDg2L0RYMiwgOE1CIFJBTSwgMzQwTUIgSURFIAoraGFyZCBkaXNrIGFuZCBvbiBhbiBBU1QgUEMgd2l0aCBJbnRlbCBQZW50aXVtIDYwTUh6LCAxNk1CIFJBTSwgNTIwTUIgSURFIAorcnVubmluZyBMaW51eCBrZXJuZWwgdmVyc2lvbiAxLjAuOSBmcm9tIHRoZSBMU1QgMS44IERpc3RyaWJ1dGlvbi4gVGhlIGtlcm5lbCAKK3dhcyBjb21waWxlZCB3aXRoIGdjYy4yLjUuOC4gTXkgQ0QtUk9NIGRyaXZlIGlzIGFuIEF6dGVjaCBDREEyNjgtMDFBLiBNeQorZHJpdmUgc2F5cywgdGhhdCBpdCBoYXMgRmlybXdhcmUgVmVyc2lvbiBBWlQyNjgwMUExLjMuIEl0IGNhbWUgd2l0aCBhbiBJU0EtYnVzCitpbnRlcmZhY2UgY2FyZCBhbmQgd29ya3Mgd2l0aCBwb2xsZWQgSS9PIHdpdGhvdXQgRE1BIGFuZCB3aXRob3V0IGludGVycnVwdHMuCitUaGUgY29kZSBmb3IgYWxsIG90aGVyIGRyaXZlcyB3YXMgJ3JlbW90ZScgdGVzdGVkIGFuZCBkZWJ1Z2dlZCBieSBhIG51bWJlciBvZiAKK3ZvbHVudGVlcnMgb24gdGhlIEludGVybmV0LgorCitQb2ludHMsIHdoZXJlIEkgZmVlbCB0aGF0IHBvc3NpYmxlIHByb2JsZW1zIG1pZ2h0IGJlIGFuZCBhbGwgcG9pbnRzIHdoZXJlIEkgCitkaWQgbm90IGNvbXBsZXRlbHkgdW5kZXJzdGFuZCB0aGUgZHJpdmUncyBiZWhhdmlvdXIgb3IgdHJ1c3QgbXkgb3duIGNvZGUgYXJlIAorbWFya2VkIHdpdGggLyo/Pz8qLyBpbiB0aGUgc291cmNlIGNvZGUuIFRoZXJlIGFyZSBhbHNvIHNvbWUgcGFydHMgaW4gdGhlIAorTWl0c3VtaSBkcml2ZXIsIHdoZXJlIEkgZGlkIG5vdCBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgdGhlaXIgY29kZS4KKworCisxMC4gQUNLTk9XTEVER01FTlRTCitXaXRob3V0IHRoZSBoZWxwIG9mIFAuQnVzaCwgQXp0ZWNoLCB3aG8gZGVsaXZlcmVkIHRlY2huaWNhbCBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIEF6dGVjaCBEcml2ZSBhbmQgd2l0aG91dCB0aGUgaGVscCBvZiBFLk1vZW5rZWJlcmcsIEdXREcsIHdobyBkaWQgYQorZ3JlYXQgam9iIGluIGFuYWx5emluZyB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgb2YgdmFyaW91cyBDRC1ST00gZHJpdmVzLCB0aGlzCit3b3JrIHdvdWxkIG5vdCBoYXZlIGJlZW4gcG9zc2libGUuIEUuTW9lbmtlYmVyZyB3YXMgYWxzbyBhIGdyZWF0IGhlbHAgaW4gCittYWtpbmcgdGhlIHNvZnR3YXJlICdrZXJuZWwgcmVhZHknIGFuZCBpbiBhbnN3ZXJpbmcgbWFueSBvZiB0aGUgQ0RST00tcmVsYXRlZCAKK3F1ZXN0aW9ucyBpbiB0aGUgbmV3c2dyb3Vwcy4gSGUgcmVhbGx5IGlzICp0aGUqIExpbnV4IENELVJPTSBndXJ1LiBUaGFua3MgCithbHNvIHRvIGFsbCB0aGUgZ3V5cyBvbiB0aGUgSW50ZXJuZXQsIHdobyBjb2xsZWN0ZWQgdmFsdWFibGUgdGVjaG5pY2FsIAoraW5mb3JtYXRpb24gYWJvdXQgQ0RST01zLiAKKworSm9lIE5hcmRvbmUgKGpvZUBhY2Nlc3MuZGlnZXgubmV0KSB3YXMgYSBwYXRpZW50IHRlc3RlciBldmVuIGZvciBteSBmaXJzdAordHJpYWwsIHdoaWNoIHdhcyBtb3JlIHRoYW4gc2xvdywgYW5kIG1hZGUgc3VnZ2VzdGlvbnMgZm9yIGNvZGUgaW1wcm92ZW1lbnQuCitFc3BlY2lhbGx5IHRoZSAnZmluaXRlIHN0YXRlIG1hY2hpbmUnIGF6dF9wb2xsKCkgd2FzIHJld3JpdHRlbiBieSBKb2UgdG8gZ2V0CitjbGVhbiBDIGNvZGUgYW5kIGF2b2lkIHRoZSB1Z2x5ICdnb3RvcycsIHdoaWNoIEkgY29waWVkIGZyb20gbWNkLmMuCisKK1JvYmJ5IFNjaGlybWVyIChzY2hpcm1lckBmbWkudW5pLXBhc3NhdS5kZSkgdGVzdGVkIHRoZSBhdWRpbyBzdHVmZiAoaW9jdGxzKSAKK2FuZCBzdWdnZXN0ZWQgYSBsb3Qgb2YgcGF0Y2hlcyBmb3IgdGhlbS4KKworSm9zZXBoIFBpc2tvciBhbmQgUGV0ZXIgTnVnZW50IHdlcmUgdGhlIGZpcnN0IHVzZXJzIHdpdGggdGhlIE9SQ0hJRCBDRDMxMTAKK2FuZCBhbHNvIHdlcmUgdmVyeSBwYXRpZW50IHdpdGggdGhlIHByb2JsZW1zIHdoaWNoIG9jY3VycmVkLgorCitSZWluaGFyZCBNYXggZGVsaXZlcmVkIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIENEUk9NLWludGVyZmFjZSBvZiB0aGUKK1NvdW5kV2F2ZTMyIHNvdW5kY2FyZHMuCisKK0pvY2hlbiBLdW56IGFuZCBPbGFmIEthbHV6YSBkZWxpdmVyZWQgdGhlIGluZm9ybWF0aW9uIGZvciBzdXBwb3J0aW5nIENvbnJhZCdzIAorVFhDIGRyaXZlLgorCitIaWxtYXIgQmVyZ2VyIGRlbGl2ZXJlZCB0aGUgcGF0Y2hlcyBmb3Igc3VwcG9ydGluZyBDeUNEUk9NIENSNTIwaWUuCisKK0FueWJvZHksIHdobyBpcyBpbnRlcmVzdGVkIGluIHRoZXNlIGl0ZW1zIHNob3VsZCBoYXZlIGEgbG9vayBhdCAnZnRwLmd3ZGcuZGUnLAorZGlyZWN0b3J5ICdwdWIvbGludXgvY2Ryb20nIGFuZCBhdCAnZnRwLmNkcm9tLmNvbScsIGRpcmVjdG9yeSAncHViL2Nkcm9tJy4KKworMTEuIFBST0dSQU1NSU5HIEFERCBPTnM6IGNkcGxheS5jCitZb3UgY2FuIHVzZSB0aGUgaW9jdGwtZnVuY3Rpb25zIGluY2x1ZGVkIGluIGF6dGNkLmMgaW4geW91ciBvd24gcHJvZ3JhbXMuIEFzCithbiBleGFtcGxlIG9uIGhvdyB0byBkbyB0aGlzLCB5b3Ugd2lsbCBmaW5kIGEgdGlueSBDRCBQbGF5ZXIgZm9yIGF1ZGlvIENEcyAKK25hbWVkICdjZHBsYXkuYycuIEl0IGFsbG93cyB5b3UgdG8gcGxheSBhdWRpbyBDRHMuIFlvdSBjYW4gcGxheSBhIHNwZWNpZmllZCAKK3RyYWNrLCBwYXVzZSBhbmQgcmVzdW1lIG9yIHNraXAgdHJhY2tzIGZvcndhcmQgYW5kIGJhY2t3YXJkcy4gSWYgeW91IHF1aXQgdGhlIAorcHJvZ3JhbSB3aXRob3V0IHN0b3BwaW5nIHRoZSAgZHJpdmUsIHBsYXlpbmcgaXMgY29udGludWVkLiBZb3UgY2FuIGFsc28gCisobWlzKXVzZSBjZHBsYXkgdG8gcmVhZCBhbmQgaGV4ZHVtcCBkYXRhIGRpc2tzLiBZb3UgY2FuIGZpbmQgdGhlIGNvZGUgaW4gdGhlIAorQVBQRU5ESVggb2YgdGhpcyBmaWxlLCB3aGljaCB5b3Ugc2hvdWxkIGN1dCBvdXQgd2l0aCBhbiBlZGl0b3IgYW5kIHN0b3JlIGluIGEgCitzZXBhcmF0ZSBmaWxlICdjZHBsYXkuYycuIFRvIGNvbXBpbGUgaXQgYW5kIG1ha2UgaXQgZXhlY3V0YWJsZSwgZG8KKyAgZ2NjIC1zIC1XYWxsIC1PMiAtTC91c3IvbGliIGNkcGxheS5jIC1vIC91c3IvbG9jYWwvYmluL2NkcGxheSAjIGNvbXBpbGVzIGl0CisgIGNobW9kICs3NTUgL3Vzci9sb2NhbC9iaW4vY2RwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWtlcyBpdCBleGVjdXRhYmxlCisgIGxuIC1zIC9kZXYvYXp0Y2QwIC9kZXYvY2Ryb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGVzIGEgbGluaworICAgKGZvciAvdXNyL2xpYiBzdWJzdGl0dXRlIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5LCB3aGVyZSB5b3VyIGluY2x1ZGUgZmlsZXMgCisgICAgcmVzaWRlLCAgYW5kIGZvciAvdXNyL2xvY2FsL2JpbiB0aGUgZGlyZWN0b3J5LCB3aGVyZSB5b3Ugd2FudCB0aGUgZXhlY3V0YWJsZSAKKyAgICBiaW5hcnkgdG8gcmVzaWRlICkKKworWW91IGhhdmUgdG8gc2V0IHRoZSBjb3JyZWN0IHBlcm1pc3Npb25zIGZvciBjZHBsYXkgKmFuZCogZm9yIC9kZXYvbWNkMCBvcgorL2Rldi9henRjZDAgaW4gb3JkZXIgdG8gdXNlIGl0LiBSZW1lbWJlciwgdGhhdCB5b3Ugc2hvdWxkIG5vdCBoYXZlIC9kZXYvY2Ryb20gCittb3VudGVkLCB3aGVuIHlvdSdyZSBwbGF5aW5nIGF1ZGlvIENEcy4gCisKK1RoaXMgcHJvZ3JhbSBpcyBqdXN0IGEgaGFjayBmb3IgdGVzdGluZyB0aGUgaW9jdGwtZnVuY3Rpb25zIGluIGF6dGNkLmMuIEkgd2lsbCAKK25vdCBtYWludGFpbiBpdCwgc28gaWYgeW91IHJ1biBpbnRvIHByb2JsZW1zLCBkaXNjYXJkIGl0IG9yIGhhdmUgYSBsb29rIGludG8gCit0aGUgc291cmNlIGNvZGUgJ2NkcGxheS5jJy4gVGhlIHByb2dyYW0gZG9lcyBvbmx5IGNvbnRhaW4gYSBtaW5pbXVtIG9mIHVzZXIgCitwcm90ZWN0aW9uIGFuZCBpbnB1dCBlcnJvciBkZXRlY3Rpb24uIElmIHlvdSB1c2UgdGhlIGNvbW1hbmRzIGluIHRoZSB3cm9uZyAKK29yZGVyIG9yIGlmIHlvdSB0cnkgdG8gcmVhZCBhIENEIGF0IHdyb25nIGFkZHJlc3NlcywgeW91IG1heSBnZXQgZXJyb3IgbWVzc2FnZXMKK29yIGV2ZW4gaGFuZyB5b3VyIG1hY2hpbmUuIElmIHlvdSBnZXQgU1RFTl9MT1csIFNURU5fTE9XX1dBSVQgb3Igc2VnbWVudCB2aW9sYXRpb24gCitlcnJvciBtZXNzYWdlcyB3aGVuIHVzaW5nIGNkcGxheSwgYWZ0ZXIgdGhhdCwgdGhlIHN5c3RlbSBtaWdodCBub3QgYmUgc3RhYmxlIAorYW55IG1vcmUsIHNvIHlvdSdkIGJldHRlciByZWJvb3QuIEFzIHRoZSBpb2N0bC1mdW5jdGlvbnMgcnVuIGluIGtlcm5lbCBtb2RlLAorbW9zdCBub3JtYWwgTGludXgtbXVsdGl0YXNraW5nIHByb3RlY3Rpb24gZmVhdHVyZXMgZG8gbm90IHdvcmsuIEJ5IHVzaW5nCit1bmluaXRpYWxpemVkICd3aWxkJyBwb2ludGVycyBldGMuLCBpdCBpcyBlYXN5IHRvIHdyaXRlIHRvIG90aGVyIHVzZXJzJyBkYXRhIAorYW5kIHByb2dyYW0gYXJlYXMsIGRlc3Ryb3kga2VybmVsIHRhYmxlcyBldGMuLiBTbyBpZiB5b3UgZXhwZXJpbWVudCB3aXRoIGlvY3RscworYXMgYWx3YXlzIHdoZW4geW91IGFyZSBkb2luZyBzeXN0ZW1zIHByb2dyYW1taW5nIGFuZCBrZXJuZWwgaGFja2luZywgeW91CitzaG91bGQgaGF2ZSBhIGJhY2t1cCBjb3B5IG9mIHlvdXIgc3lzdGVtIGluIGEgc2FmZSBwbGFjZSAoYW5kIHlvdSBhbHNvCitzaG91bGQgdHJ5IHJlc3RvcmluZyBmcm9tIGEgYmFja3VwIGNvcHkgZmlyc3QpIQorCitBIHJld29ya2VkIGFuZCBpbXByb3ZlZCB2ZXJzaW9uIGNhbGxlZCAnY2R0ZXN0ZXIuYycsIHdoaWNoIGhhcyB5ZXQgbW9yZQorZmVhdHVyZXMgZm9yIHRlc3RpbmcgQ0RST00tZHJpdmVzIGNhbiBiZSBmb3VuZCBpbgorRG9jdW1lbnRhdGlvbi9jZHJvbS9zYnBjZCwgd3JpdHRlbiBieSBFLk1vZW5rZWJlcmcuCisKK1dlcm5lciBaaW1tZXJtYW5uCitGYWNoaG9jaHNjaHVsZSBmdWVyIFRlY2huaWsgRXNzbGluZ2VuCisoRU1haWw6IFdlcm5lci5aaW1tZXJtYW5uQGZodC1lc3NsaW5nZW4uZGUpCitPY3RvYmVyLCAxOTk3CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQVBQRU5ESVg6IFNvdXJjZSBjb2RlIG9mIGNkcGxheS5jCisKKy8qIFRpbnkgQXVkaW8gQ0QgUGxheWVyCisKKyAgIENvcHlyaWdodCAxOTk0LCAxOTk1LCAxOTk2IFdlcm5lciBaaW1tZXJtYW5uIChXZXJuZXIuWmltbWVybWFubkBmaHQtZXNzbGluZ2VuLmRlKQorCitUaGlzIHByb2dyYW0gb3JpZ2luYWxseSB3YXMgd3JpdHRlbiB0byB0ZXN0IHRoZSBhdWRpbyBmdW5jdGlvbnMgb2YgdGhlCitBWlRFQ0guQ0RST00tZHJpdmVyLCBidXQgaXQgc2hvdWxkIHdvcmsgd2l0aCBldmVyeSBDRC1ST00gZHJpdmUuIEJlZm9yZSAKK3VzaW5nIGl0LCB5b3Ugc2hvdWxkIHNldCBhIHN5bWxpbmsgZnJvbSAvZGV2L2Nkcm9tIHRvIHlvdXIgcmVhbCBDRFJPTQorZGV2aWNlLgorCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byB0aGlzIHByb2dyYW0uCisKK0hpc3Rvcnk6ICBWMC4xICBXLlppbW1lcm1hbm46IEZpcnN0IHJlbGVhc2UuIE5vdi4gOCwgMTk5NAorICAgICAgICAgIFYwLjIgIFcuWmltbWVybWFubjogRW5oYW5jZWQgZnVuY3Rpb25hbGl0eS4gTm92LiA5LCAxOTk0CisgICAgICAgICAgVjAuMyAgVy5aaW1tZXJtYW5uOiBBZGRpdGlvbmFsIGZ1bmN0aW9ucy4gTm92LiAyOCwgMTk5NCAgICAgICAgICAKKyAgICAgICAgICBWMC40ICBXLlppbW1lcm1hbm46IGZpeGVkIHNvbWUgYnVncy4gRGVjLiAxNywgMTk5NAorICAgICAgICAgIFYwLjUgIFcuWmltbWVybWFubjogY2xlYW4gJ3NjYW5mJyBjb21tYW5kcyB3aXRob3V0IGNvbXBpbGVyIHdhcm5pbmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYW4uIDYsIDE5OTUKKyAgICAgICAgICBWMC42ICBXLlppbW1lcm1hbm46IHZvbHVtZSBjb250cm9sIChzdGlsbCBleHBlcmltZW50YWwpLiBKYW4uIDI0LCAxOTk1CisgICAgICAgICAgVjAuNyAgVy5aaW1tZXJtYW5uOiByZWFkIHJhdyBtb2RpZmllZC4gSnVseSAyNiwgOTUKKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgorI2luY2x1ZGUgPGxpbnV4Ly4uLy4uL2RyaXZlcnMvY2Ryb20vYXp0Y2QuaD4KKwordm9pZCBoZWxwKHZvaWQpCit7IHByaW50ZigiQXZhaWxhYmxlIENvbW1hbmRzOiAgU1RPUCAgICAgICAgIHMgICAgICBFSkVDVC9DTE9TRSAgZSAgICAgICBRVUlUICAgICAgICAgcVxuIik7CisgIHByaW50ZigiICAgICAgICAgICAgICAgICAgICAgUExBWSBUUkFDSyAgIHQgICAgICBQQVVTRSAgICAgICAgcCAgICAgICBSRVNVTUUgICAgICAgclxuIik7CisgIHByaW50ZigiICAgICAgICAgICAgICAgICAgICAgTkVYVCBUUkFDSyAgIG4gICAgICBSRVBFQVQgTEFTVCAgbCAgICAgICBIRUxQICAgICAgICAgaFxuIik7CisgIHByaW50ZigiICAgICAgICAgICAgICAgICAgICAgU1VCIENIQU5ORUwgIGMgICAgICBUUkFDSyBJTkZPICAgaSAgICAgICBQTEFZIEFUICAgICAgYVxuIik7CisgIHByaW50ZigiICAgICAgICAgICAgICAgICAgICAgUkVBRCAgICAgICAgIGQgICAgICBSRUFEIFJBVyAgICAgdyAgICAgICBWT0xVTUUgICAgICAgdlxuIik7Cit9CisKK2ludCBtYWluKHZvaWQpCit7IGludCBoYW5kbGU7CisgIHVuc2lnbmVkIGNoYXIgY29tbWFuZD0nICcsIGluaT0wLCBmaXJzdD0xLCBsYXN0PTE7CisgIHVuc2lnbmVkIGludCBjbWQsIGksaixrLCBhcmcxLGFyZzIsYXJnMzsKKyAgc3RydWN0IGNkcm9tX3RpICAgICAgIHRpOworICBzdHJ1Y3QgY2Ryb21fdG9jaGRyICAgdG9jSGRyOworICBzdHJ1Y3QgY2Ryb21fc3ViY2hubCAgc3ViY2hubDsKKyAgc3RydWN0IGNkcm9tX3RvY2VudHJ5IGVudHJ5OworICBzdHJ1Y3QgY2Ryb21fbXNmICAgICAgbXNmOworICB1bmlvbiAgeyBzdHJ1Y3QgY2Ryb21fbXNmIG1zZjsKKyAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbQ0RfRlJBTUVTSVpFX1JBV107CisgICAgICAgICB9IGF6dDsKKyAgc3RydWN0IGNkcm9tX3ZvbGN0cmwgIHZvbGN0cmw7CisKKyAgcHJpbnRmKCJcbk1pbmktQXVkaW8gQ0QtUGxheWVyIFYwLjcyICAgKEMpIDE5OTQsMTk5NSwxOTk2ICBXLlppbW1lcm1hbm5cbiIpOworICBoYW5kbGU9b3BlbigiL2Rldi9jZHJvbSIsT19SRFdSKTsKKyAgaW9jdGwoaGFuZGxlLENEUk9NUkVTVU1FKTsKKyAgCisgIGlmIChoYW5kbGU8PTApIAorICAgIHsgcHJpbnRmKCJEcml2ZSBFcnJvcjogYWxyZWFkeSBwbGF5aW5nLCBubyBhdWRpbyBkaXNrLCBkb29yIG9wZW5cbiIpOworICAgICAgcHJpbnRmKCIgICAgICAgICAgICAgb3Igbm8gcGVybWlzc2lvbiAoeW91IG11c3QgYmUgUk9PVCBpbiBvcmRlciB0byB1c2UgdGhpcyBwcm9ncmFtKVxuIik7CisgICAgfQorICBlbHNlCisgICAgeyBoZWxwKCk7CisgICAgICB3aGlsZSAoMSkKKyAgICAgICAgeyBwcmludGYoIlR5cGUgY29tbWFuZCAoaCA9IGhlbHApOiAgIik7CisgICAgICAgICAgc2NhbmYoIiVzIiwmY29tbWFuZCk7IAorICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkKKyAgICAgICAgICAgIHsgY2FzZSAnZSc6ICAgY21kPUNEUk9NRUpFQ1Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlvY3RsKGhhbmRsZSxjbWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIAorICAgICAgICAgICAgICBjYXNlICdwJzogICBpZiAoIWluaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIkNvbW1hbmQgbm90IGFsbG93ZWQgLSBwbGF5IHRyYWNrIGZpcnN0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY21kPUNEUk9NUEFVU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQpKSBwcmludGYoIkRyaXZlIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAncic6ICAgaWYgKCFpbmkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCJDb21tYW5kIG5vdCBhbGxvd2VkIC0gcGxheSB0cmFjayBmaXJzdFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNtZD1DRFJPTVJFU1VNRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoaGFuZGxlLGNtZCkpIHByaW50ZigiRHJpdmUgRXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlICdzJzogICBjbWQ9Q0RST01QQVVTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQpKSBwcmludGYoIkRyaXZlIGVycm9yIG9yIGFscmVhZHkgc3RvcHBlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZD1DRFJPTVNUT1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsY21kKSkgcHJpbnRmKCJEcml2ZSBlcnJvclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlICd0JzogICBjbWQ9Q0RST01SRUFEVE9DSERSOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoaGFuZGxlLGNtZCwmdG9jSGRyKSkgcHJpbnRmKCJEcml2ZSBFcnJvclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0PXRvY0hkci5jZHRoX3RyazA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q9IHRvY0hkci5jZHRoX3RyazE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmlyc3Q9PTApfHwoZmlyc3Q+bGFzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYgKCItLWNvdWxkIG5vdCByZWFkIFRPQ1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIi0tZmlyc3QgdHJhY2s6ICVkICAgLS1sYXN0IHRyYWNrOiAlZCAgIC0tZW50ZXIgdHJhY2sgbnVtYmVyOiAiLGZpcnN0LGxhc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kPUNEUk9NUExBWVRSS0lORDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlaSIsJmFyZzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV90cmswPWFyZzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGkuY2R0aV90cmswPGZpcnN0KSB0aS5jZHRpX3RyazA9Zmlyc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGkuY2R0aV90cmswPmxhc3QpICB0aS5jZHRpX3RyazA9bGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpLmNkdGlfaW5kMD0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV90cmsxPWxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aS5jZHRpX2luZDE9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsY21kLCZ0aSkpIHByaW50ZigiRHJpdmUgRXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pPTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgJ24nOiAgIGlmICghaW5pKyspIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYgKGlvY3RsKGhhbmRsZSxDRFJPTVJFQURUT0NIRFIsJnRvY0hkcikpIHByaW50ZigiRHJpdmUgRXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Q9dG9jSGRyLmNkdGhfdHJrMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q9IHRvY0hkci5jZHRoX3RyazE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aS5jZHRpX3RyazA9Zmlyc3QtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmlyc3Q9PTApfHwoZmlyc3Q+bGFzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYgKCItLWNvdWxkIG5vdCByZWFkIFRPQ1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjbWQ9Q0RST01QTEFZVFJLSU5EOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrdGkuY2R0aV90cmswID4gbGFzdCkgIHRpLmNkdGlfdHJrMD1sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV9pbmQwPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aS5jZHRpX3RyazE9bGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpLmNkdGlfaW5kMT0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQsJnRpKSkgcHJpbnRmKCJEcml2ZSBFcnJvclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmk9MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlICdsJzogICBpZiAoIWluaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYgKGlvY3RsKGhhbmRsZSxDRFJPTVJFQURUT0NIRFIsJnRvY0hkcikpIHByaW50ZigiRHJpdmUgRXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Q9dG9jSGRyLmNkdGhfdHJrMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q9IHRvY0hkci5jZHRoX3RyazE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aS5jZHRpX3RyazA9Zmlyc3QrMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmlyc3Q9PTApfHwoZmlyc3Q+bGFzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYgKCItLWNvdWxkIG5vdCByZWFkIFRPQ1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjbWQ9Q0RST01QTEFZVFJLSU5EOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tdGkuY2R0aV90cmswIDwgZmlyc3QpIHRpLmNkdGlfdHJrMD1maXJzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpLmNkdGlfaW5kMD0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV90cmsxPWxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aS5jZHRpX2luZDE9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsY21kLCZ0aSkpIHByaW50ZigiRHJpdmUgRXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pPTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlICdjJzogICBzdWJjaG5sLmNkc2NfZm9ybWF0PUNEUk9NX01TRjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxDRFJPTVNVQkNITkwsJnN1YmNobmwpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkRyaXZlIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCJBdWRpb1N0YXR1czolcyAgIFRyYWNrOiVkICBNb2RlOiVkICAgTVNGPSVkOiVkOiVkXG4iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjaG5sLmNkc2NfYXVkaW9zdGF0dXM9PUNEUk9NX0FVRElPX1BMQVkgPyAiUExBWUlORyI6Ik5PVCBQTEFZSU5HIixcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjaG5sLmNkc2NfdHJrLHN1YmNobmwuY2RzY19hZHIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmNobmwuY2RzY19hYnNhZGRyLm1zZi5taW51dGUsIHN1YmNobmwuY2RzY19hYnNhZGRyLm1zZi5zZWNvbmQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmNobmwuY2RzY19hYnNhZGRyLm1zZi5mcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBjYXNlICdpJzogICBpZiAoIWluaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiQ29tbWFuZCBub3QgYWxsb3dlZCAtIHBsYXkgdHJhY2sgZmlyc3RcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY21kPUNEUk9NUkVBRFRPQ0VOVFJZOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUcmFjayBOby46ICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwmYXJnMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5jZHRlX3RyYWNrPWFyZzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuY2R0ZV90cmFjazxmaXJzdCkgZW50cnkuY2R0ZV90cmFjaz1maXJzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5jZHRlX3RyYWNrPmxhc3QpICBlbnRyeS5jZHRlX3RyYWNrPWxhc3Q7CisJCQkgICAgICBlbnRyeS5jZHRlX2Zvcm1hdD1DRFJPTV9NU0Y7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoaGFuZGxlLGNtZCwmZW50cnkpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiRHJpdmUgZXJyb3Igb3IgaW52YWxpZCB0cmFjayBuby5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiTW9kZSAlZCBUcmFjaywgc3RhcnRzIGF0ICVkOiVkOiVkXG4iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuY2R0ZV9hZHIsZW50cnkuY2R0ZV9hZGRyLm1zZi5taW51dGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5jZHRlX2FkZHIubXNmLnNlY29uZCxlbnRyeS5jZHRlX2FkZHIubXNmLmZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAnYSc6ICAgY21kPUNEUk9NUExBWU1TRjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBZGRyZXNzIChtaW46c2VjOmZyYW1lKSAgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlZDolZDolZCIsJmFyZzEsJmFyZzIsJmFyZzMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBtc2YuY2Rtc2ZfbWluMCAgPWFyZzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZi5jZG1zZl9zZWMwICA9YXJnMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXNmLmNkbXNmX2ZyYW1lMD1hcmczOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNmLmNkbXNmX3NlYzAgID4gNTkpIG1zZi5jZG1zZl9zZWMwICA9NTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2YuY2Rtc2ZfZnJhbWUwPiA3NCkgbXNmLmNkbXNmX2ZyYW1lMD03NDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXNmLmNkbXNmX21pbjE9NjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZi5jZG1zZl9zZWMxPTAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBtc2YuY2Rtc2ZfZnJhbWUxPTAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoaGFuZGxlLGNtZCwmbXNmKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiRHJpdmUgZXJyb3Igb3IgaW52YWxpZCBhZGRyZXNzXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQVpUX1BSSVZBVEVfSU9DVExTIC8qbm90IHN1cHBvcnRlZCBieSBldmVyeSBDRFJPTSBkcml2ZXIqLworICAgICAgICAgICAgICBjYXNlICdkJzogICBjbWQ9Q0RST01SRUFEQ09PS0VEOworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkFkZHJlc3MgKG1pbjpzZWM6ZnJhbWUpICAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVkOiVkOiVkIiwmYXJnMSwmYXJnMiwmYXJnMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGF6dC5tc2YuY2Rtc2ZfbWluMCAgPWFyZzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGF6dC5tc2YuY2Rtc2Zfc2VjMCAgPWFyZzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGF6dC5tc2YuY2Rtc2ZfZnJhbWUwPWFyZzM7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhenQubXNmLmNkbXNmX3NlYzAgID4gNTkpIGF6dC5tc2YuY2Rtc2Zfc2VjMCAgPTU5OworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXp0Lm1zZi5jZG1zZl9mcmFtZTA+IDc0KSBhenQubXNmLmNkbXNmX2ZyYW1lMD03NDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQsJmF6dC5tc2YpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCJEcml2ZSBlcnJvciwgaW52YWxpZCBhZGRyZXNzIG9yIHVuc3VwcG9ydGVkIGNvbW1hbmRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBrPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGNoYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTwxMjg7aSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIiU0ZDoiLGkqMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9MDtqPDE2O2orKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiJTJ4ICIsYXp0LmJ1ZltpKjE2K2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0wO2o8MTY7aisrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYgKGlzYWxudW0oYXp0LmJ1ZltpKjE2K2pdKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLGF6dC5idWZbaSoxNitqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaysrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaz49MjApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigicHJlc3MgRU5URVIgdG8gY29udGludWVcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRjaGFyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlICd3JzogICBjbWQ9Q0RST01SRUFEUkFXOworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkFkZHJlc3MgKG1pbjpzZWM6ZnJhbWUpICAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVkOiVkOiVkIiwmYXJnMSwmYXJnMiwmYXJnMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGF6dC5tc2YuY2Rtc2ZfbWluMCAgPWFyZzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGF6dC5tc2YuY2Rtc2Zfc2VjMCAgPWFyZzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGF6dC5tc2YuY2Rtc2ZfZnJhbWUwPWFyZzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF6dC5tc2YuY2Rtc2Zfc2VjMCAgPiA1OSkgYXp0Lm1zZi5jZG1zZl9zZWMwICA9NTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhenQubXNmLmNkbXNmX2ZyYW1lMD4gNzQpIGF6dC5tc2YuY2Rtc2ZfZnJhbWUwPTc0OworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoaGFuZGxlLGNtZCwmYXp0KSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiRHJpdmUgZXJyb3IsIGludmFsaWQgYWRkcmVzcyBvciB1bnN1cHBvcnRlZCBjb21tYW5kXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaz0wOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPDE0NztpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiJTRkOiIsaSoxNik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0wO2o8MTY7aisrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCIlMnggIixhenQuYnVmW2kqMTYral0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7ajwxNjtqKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZiAoaXNhbG51bShhenQuYnVmW2kqMTYral0pKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsYXp0LmJ1ZltpKjE2K2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrPj0yMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ2V0Y2hhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgICBjYXNlICd2JzogICBjbWQ9Q0RST01WT0xDVFJMOworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIi0tQ2hhbm5lbCAwIExlZnQgICgwLTI1NSk6ICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCZhcmcxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCItLUNoYW5uZWwgMSBSaWdodCAoMC0yNTUpOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwmYXJnMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbGN0cmwuY2hhbm5lbDA9YXJnMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sY3RybC5jaGFubmVsMT1hcmcyOworICAgICAgICAgICAgICAgICAgICAgICAgICB2b2xjdHJsLmNoYW5uZWwyPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbGN0cmwuY2hhbm5lbDM9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQsJnZvbGN0cmwpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCJEcml2ZSBlcnJvciBvciB1bnN1cHBvcnRlZCBjb21tYW5kXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgICAgICAgY2FzZSAncSc6ICAgaWYgKGNsb3NlKGhhbmRsZSkpIHByaW50ZigiRHJpdmUgRXJyb3I6IENMT1NFXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgICAgICAgY2FzZSAnaCc6ICAgaGVscCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogICAgcHJpbnRmKCJ1bmtub3duIGNvbW1hbmRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICB9CisgICAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vY2Ryb20tc3RhbmRhcmQudGV4IGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9jZHJvbS1zdGFuZGFyZC50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmOTRlNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vY2Ryb20tc3RhbmRhcmQudGV4CkBAIC0wLDAgKzEsMTAyMiBAQAorXGRvY3VtZW50Y2xhc3N7YXJ0aWNsZX0KK1xkZWZcdmVyc2lvbnskSWQ6IGNkcm9tLXN0YW5kYXJkLnRleCx2IDEuOSAxOTk3LzEyLzI4IDE1OjQyOjQ5IGRhdmlkIEV4cCAkfQorXG5ld2NvbW1hbmR7XG5ld3NlY3Rpb259WzFde1xuZXdwYWdlXHNlY3Rpb257IzF9fQorCitcZXZlbnNpZGVtYXJnaW49MHB0Citcb2Rkc2lkZW1hcmdpbj0wcHQKK1x0b3BtYXJnaW49LVxoZWFkaGVpZ2h0IFxhZHZhbmNlXHRvcG1hcmdpbiBieSAtXGhlYWRzZXAKK1x0ZXh0d2lkdGg9MTUuOTljbSBcdGV4dGhlaWdodD0yNC42MmNtICUgbm9ybWFsIEE0LCAxJycgbWFyZ2luCisKK1xkZWZcbGludXh7e1xzYyBMaW51eH19CitcZGVmXGNkcm9te3tcc2MgY2Qtcm9tfX0KK1xkZWZcVUNEe3tcc2MgVW5pZm9ybSBjZC1yb20gRHJpdmVyfX0KK1xkZWZcY2Ryb21je3tcdHQge2Nkcm9tLmN9fX0KK1xkZWZcY2Ryb21oe3tcdHQge2Nkcm9tLmh9fX0KK1xkZWZcZm97XHNsfSAgICAgICAgICAgICAgICAgICAgJSBmb3JlaWduIHdvcmRzCitcZGVmXGlle3tcZm8gaS5lLn19CitcZGVmXGVne3tcZm8gZS5nLn19CisKK1xldmVyeW1hdGh7XGl0fSBcZXZlcnlkaXNwbGF5e1xpdH0KK1xjYXRjb2RlIGBcXz1cYWN0aXZlIFxkZWZfe1xfXHBlbmFsdHkxMDAgfQorXGNhdGNvZGVgXDw9XGFjdGl2ZSBcZGVmPCMxPnt7XGxhbmdsZVxoYm94e1xybSMxfVxyYW5nbGV9fQorCitcYmVnaW57ZG9jdW1lbnR9CitcdGl0bGV7QSBcbGludXhcIFxjZHJvbVwgc3RhbmRhcmR9CitcYXV0aG9ye0RhdmlkIHZhbiBMZWV1d2VuXFx7XG5vcm1hbHNpemVcdHQgZGF2aWRARWxzZVdhcmUuY2lzdHJvbi5ubH0KK1xce1xmb290bm90ZXNpemUgdXBkYXRlZCBieSBFcmlrIEFuZGVyc2VuIHtcdHQoYW5kZXJzZWVAZGViaWFuLm9yZyl9fQorXFx7XGZvb3Rub3Rlc2l6ZSB1cGRhdGVkIGJ5IEplbnMgQXhib2Uge1x0dChheGJvZUBpbWFnZS5kayl9fX0KK1xkYXRlezEyIE1hcmNoIDE5OTl9CisKK1xtYWtldGl0bGUKKworXG5ld3NlY3Rpb257SW50cm9kdWN0aW9ufQorCitcbGludXhcIGlzIHByb2JhYmx5IHRoZSBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHN1cHBvcnRzCit0aGUgd2lkZXN0IHZhcmlldHkgb2YgaGFyZHdhcmUgZGV2aWNlcy4gVGhlIHJlYXNvbnMgZm9yIHRoaXMgYXJlCitwcmVzdW1hYmx5IAorXGJlZ2lue2l0ZW1pemV9IAorXGl0ZW0gCisgIFRoZSBsYXJnZSBsaXN0IG9mIGhhcmR3YXJlIGRldmljZXMgYXZhaWxhYmxlIGZvciB0aGUgbWFueSBwbGF0Zm9ybXMKKyAgdGhhdCBcbGludXhcIG5vdyBzdXBwb3J0cyAoXGllLCBpMzg2LVBDcywgU3BhcmMgU3VucywgZXRjLikKK1xpdGVtIAorICBUaGUgb3BlbiBkZXNpZ24gb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIHN1Y2ggdGhhdCBhbnlib2R5IGNhbiB3cml0ZSBhCisgIGRyaXZlciBmb3IgXGxpbnV4LgorXGl0ZW0gCisgIFRoZXJlIGlzIHBsZW50eSBvZiBzb3VyY2UgY29kZSBhcm91bmQgYXMgZXhhbXBsZXMgb2YgaG93IHRvIHdyaXRlIGEgZHJpdmVyLgorXGVuZHtpdGVtaXplfQorVGhlIG9wZW5uZXNzIG9mIFxsaW51eCwgYW5kIHRoZSBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBhdmFpbGFibGUKK2hhcmR3YXJlIGhhcyBhbGxvd2VkIFxsaW51eFwgdG8gc3VwcG9ydCBtYW55IGRpZmZlcmVudCBoYXJkd2FyZSBkZXZpY2VzLgorVW5mb3J0dW5hdGVseSwgdGhlIHZlcnkgb3Blbm5lc3MgdGhhdCBoYXMgYWxsb3dlZCBcbGludXhcIHRvIHN1cHBvcnQKK2FsbCB0aGVzZSBkaWZmZXJlbnQgZGV2aWNlcyBoYXMgYWxzbyBhbGxvd2VkIHRoZSBiZWhhdmlvciBvZiBlYWNoCitkZXZpY2UgZHJpdmVyIHRvIGRpZmZlciBzaWduaWZpY2FudGx5IGZyb20gb25lIGRldmljZSB0byBhbm90aGVyLgorVGhpcyBkaXZlcmdlbmNlIG9mIGJlaGF2aW9yIGhhcyBiZWVuIHZlcnkgc2lnbmlmaWNhbnQgZm9yIFxjZHJvbVwKK2RldmljZXM7IHRoZSB3YXkgYSBwYXJ0aWN1bGFyIGRyaXZlIHJlYWN0cyB0byBhIGBzdGFuZGFyZCcgJGlvY3RsKCkkCitjYWxsIHZhcmllcyBncmVhdGx5IGZyb20gb25lIGRldmljZSBkcml2ZXIgdG8gYW5vdGhlci4gVG8gYXZvaWQgbWFraW5nCit0aGVpciBkcml2ZXJzIHRvdGFsbHkgaW5jb25zaXN0ZW50LCB0aGUgd3JpdGVycyBvZiBcbGludXhcIFxjZHJvbVwKK2RyaXZlcnMgZ2VuZXJhbGx5IGNyZWF0ZWQgbmV3IGRldmljZSBkcml2ZXJzIGJ5IHVuZGVyc3RhbmRpbmcsIGNvcHlpbmcsCithbmQgdGhlbiBjaGFuZ2luZyBhbiBleGlzdGluZyBvbmUuIFVuZm9ydHVuYXRlbHksIHRoaXMgcHJhY3RpY2UgZGlkIG5vdAorbWFpbnRhaW4gdW5pZm9ybSBiZWhhdmlvciBhY3Jvc3MgYWxsIHRoZSBcbGludXhcIFxjZHJvbVwgZHJpdmVycy4gCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGFuIGVmZm9ydCB0byBlc3RhYmxpc2ggVW5pZm9ybSBiZWhhdmlvciBhY3Jvc3MKK2FsbCB0aGUgZGlmZmVyZW50IFxjZHJvbVwgZGV2aWNlIGRyaXZlcnMgZm9yIFxsaW51eC4gVGhpcyBkb2N1bWVudCBhbHNvCitkZWZpbmVzIHRoZSB2YXJpb3VzICRpb2N0bCRzLCBhbmQgaG93IHRoZSBsb3ctbGV2ZWwgXGNkcm9tXCBkZXZpY2UKK2RyaXZlcnMgc2hvdWxkIGltcGxlbWVudCB0aGVtLiBDdXJyZW50bHkgKGFzIG9mIHRoZSBcbGludXhcIDIuMS4keCQKK2RldmVsb3BtZW50IGtlcm5lbHMpIHNldmVyYWwgbG93LWxldmVsIFxjZHJvbVwgZGV2aWNlIGRyaXZlcnMsIGluY2x1ZGluZworYm90aCBJREUvQVRBUEkgYW5kIFNDU0ksIG5vdyB1c2UgdGhpcyBVbmlmb3JtIGludGVyZmFjZS4KKworV2hlbiB0aGUgXGNkcm9tXCB3YXMgZGV2ZWxvcGVkLCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIFxjZHJvbVwgZHJpdmUKK2FuZCB0aGUgY29tcHV0ZXIgd2FzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0YW5kYXJkcy4gQXMgYSByZXN1bHQsIG1hbnkKK2RpZmZlcmVudCBcY2Ryb21cIGludGVyZmFjZXMgd2VyZSBkZXZlbG9wZWQuIFNvbWUgb2YgdGhlbSBoYWQgdGhlaXIKK293biBwcm9wcmlldGFyeSBkZXNpZ24gKFNvbnksIE1pdHN1bWksIFBhbmFzb25pYywgUGhpbGlwcyksIG90aGVyCittYW51ZmFjdHVyZXJzIGFkb3B0ZWQgYW4gZXhpc3RpbmcgZWxlY3RyaWNhbCBpbnRlcmZhY2UgYW5kIGNoYW5nZWQKK3RoZSBmdW5jdGlvbmFsaXR5IChDcmVhdGl2ZUxhYnMvU291bmRCbGFzdGVyLCBUZWFjLCBGdW5haSkgb3Igc2ltcGx5CithZGFwdGVkIHRoZWlyIGRyaXZlcyB0byBvbmUgb3IgbW9yZSBvZiB0aGUgYWxyZWFkeSBleGlzdGluZyBlbGVjdHJpY2FsCitpbnRlcmZhY2VzIChBenRlY2gsIFNhbnlvLCBGdW5haSwgVmVydG9zLCBMb25nc2hpbmUsIE9wdGljcyBTdG9yYWdlIGFuZAorbW9zdCBvZiB0aGUgYE5vTmFtZScgbWFudWZhY3R1cmVycykuIEluIGNhc2VzIHdoZXJlIGEgbmV3IGRyaXZlIHJlYWxseQorYnJvdWdodCBpdHMgb3duIGludGVyZmFjZSBvciB1c2VkIGl0cyBvd24gY29tbWFuZCBzZXQgYW5kIGZsb3cgY29udHJvbAorc2NoZW1lLCBlaXRoZXIgYSBzZXBhcmF0ZSBkcml2ZXIgaGFkIHRvIGJlIHdyaXR0ZW4sIG9yIGFuIGV4aXN0aW5nCitkcml2ZXIgaGFkIHRvIGJlIGVuaGFuY2VkLiBIaXN0b3J5IGhhcyBkZWxpdmVyZWQgdXMgXGNkcm9tXCBzdXBwb3J0IGZvcgorbWFueSBvZiB0aGVzZSBkaWZmZXJlbnQgaW50ZXJmYWNlcy4gTm93YWRheXMsIGFsbW9zdCBhbGwgbmV3IFxjZHJvbVwKK2RyaXZlcyBhcmUgZWl0aGVyIElERS9BVEFQSSBvciBTQ1NJLCBhbmQgaXQgaXMgdmVyeSB1bmxpa2VseSB0aGF0IGFueQorbWFudWZhY3R1cmVyIHdpbGwgY3JlYXRlIGEgbmV3IGludGVyZmFjZS4gRXZlbiBmaW5kaW5nIGRyaXZlcyBmb3IgdGhlCitvbGQgcHJvcHJpZXRhcnkgaW50ZXJmYWNlcyBpcyBnZXR0aW5nIGRpZmZpY3VsdC4KKworV2hlbiAoaW4gdGhlIDEuMy43MCdzKSBJIGxvb2tlZCBhdCB0aGUgZXhpc3Rpbmcgc29mdHdhcmUgaW50ZXJmYWNlLAord2hpY2ggd2FzIGV4cHJlc3NlZCB0aHJvdWdoIFxjZHJvbWgsIGl0IGFwcGVhcmVkIHRvIGJlIGEgcmF0aGVyIHdpbGQKK3NldCBvZiBjb21tYW5kcyBhbmQgZGF0YSBmb3JtYXRzLlxmb290bm90ZXtJIGNhbm5vdCByZWNvbGxlY3Qgd2hhdAora2VybmVsIHZlcnNpb24gSSBsb29rZWQgYXQsIHRoZW4sIHByZXN1bWFibHkgMS4yLjEzIGFuZCAxLjMuMzQtLS10aGUKK2xhdGVzdCBrZXJuZWwgdGhhdCBJIHdhcyBpbmRpcmVjdGx5IGludm9sdmVkIGluLn0gSXQgc2VlbWVkIHRoYXQgbWFueQorZmVhdHVyZXMgb2YgdGhlIHNvZnR3YXJlIGludGVyZmFjZSBoYWQgYmVlbiBhZGRlZCB0byBhY2NvbW1vZGF0ZSB0aGUKK2NhcGFiaWxpdGllcyBvZiBhIHBhcnRpY3VsYXIgZHJpdmUsIGluIGFuIHtcZm8gYWQgaG9jXC99IG1hbm5lci4gTW9yZQoraW1wb3J0YW50bHksIGl0IGFwcGVhcmVkIHRoYXQgdGhlIGJlaGF2aW9yIG9mIHRoZSBgc3RhbmRhcmQnIGNvbW1hbmRzCit3YXMgZGlmZmVyZW50IGZvciBtb3N0IG9mIHRoZSBkaWZmZXJlbnQgZHJpdmVyczogXGVnLCBzb21lIGRyaXZlcnMKK2Nsb3NlIHRoZSB0cmF5IGlmIGFuICRvcGVuKCkkIGNhbGwgb2NjdXJzIHdoZW4gdGhlIHRyYXkgaXMgb3Blbiwgd2hpbGUKK290aGVycyBkbyBub3QuIFNvbWUgZHJpdmVycyBsb2NrIHRoZSBkb29yIHVwb24gb3BlbmluZyB0aGUgZGV2aWNlLCB0bworcHJldmVudCBhbiBpbmNvaGVyZW50IGZpbGUgc3lzdGVtLCBidXQgb3RoZXJzIGRvbid0LCB0byBhbGxvdyBzb2Z0d2FyZQorZWplY3Rpb24uIFVuZG91YnRlZGx5LCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBkaWZmZXJlbnQgZHJpdmVzIHZhcnksCitidXQgZXZlbiB3aGVuIHR3byBkcml2ZXMgaGF2ZSB0aGUgc2FtZSBjYXBhYmlsaXR5IHRoZWlyIGRyaXZlcnMnCitiZWhhdmlvciB3YXMgdXN1YWxseSBkaWZmZXJlbnQuCisKK0kgZGVjaWRlZCB0byBzdGFydCBhIGRpc2N1c3Npb24gb24gaG93IHRvIG1ha2UgYWxsIHRoZSBcbGludXhcIFxjZHJvbVwKK2RyaXZlcnMgYmVoYXZlIG1vcmUgdW5pZm9ybWx5LiBJIGJlZ2FuIGJ5IGNvbnRhY3RpbmcgdGhlIGRldmVsb3BlcnMgb2YKK3RoZSBtYW55IFxjZHJvbVwgZHJpdmVycyBmb3VuZCBpbiB0aGUgXGxpbnV4XCBrZXJuZWwuIFRoZWlyIHJlYWN0aW9ucworZW5jb3VyYWdlZCBtZSB0byB3cml0ZSB0aGUgXFVDRFwgd2hpY2ggdGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0bworZGVzY3JpYmUuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgXFVDRFwgaXMgaW4gdGhlIGZpbGUgXGNkcm9tYy4gVGhpcworZHJpdmVyIGlzIGludGVuZGVkIHRvIGJlIGFuIGFkZGl0aW9uYWwgc29mdHdhcmUgbGF5ZXIgdGhhdCBzaXRzIG9uIHRvcAorb2YgdGhlIGxvdy1sZXZlbCBkZXZpY2UgZHJpdmVycyBmb3IgZWFjaCBcY2Ryb21cIGRyaXZlLiBCeSBhZGRpbmcgdGhpcworYWRkaXRpb25hbCBsYXllciwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhbGwgdGhlIGRpZmZlcmVudCBcY2Ryb21cCitkZXZpY2VzIGJlaGF2ZSB7XGVtIGV4YWN0bHlcL30gdGhlIHNhbWUgKGluc29mYXIgYXMgdGhlIHVuZGVybHlpbmcKK2hhcmR3YXJlIHdpbGwgYWxsb3cpLgorCitUaGUgZ29hbCBvZiB0aGUgXFVDRFwgaXMge1xlbSBub3RcL30gdG8gYWxpZW5hdGUgZHJpdmVyIGRldmVsb3BlcnMgd2hvCitoYXZlIG5vdCB5ZXQgdGFrZW4gc3RlcHMgdG8gc3VwcG9ydCB0aGlzIGVmZm9ydC4gVGhlIGdvYWwgb2YgXFVDRFwgaXMKK3NpbXBseSB0byBnaXZlIHBlb3BsZSB3cml0aW5nIGFwcGxpY2F0aW9uIHByb2dyYW1zIGZvciBcY2Ryb21cIGRyaXZlcwore1xlbSBvbmVcL30gXGxpbnV4XCBcY2Ryb21cIGludGVyZmFjZSB3aXRoIGNvbnNpc3RlbnQgYmVoYXZpb3IgZm9yIGFsbAorXGNkcm9tXCBkZXZpY2VzLiBJbiBhZGRpdGlvbiwgdGhpcyBhbHNvIHByb3ZpZGVzIGEgY29uc2lzdGVudCBpbnRlcmZhY2UKK2JldHdlZW4gdGhlIGxvdy1sZXZlbCBkZXZpY2UgZHJpdmVyIGNvZGUgYW5kIHRoZSBcbGludXhcIGtlcm5lbC4gQ2FyZQoraXMgdGFrZW4gdGhhdCAxMDBcLFwlIGNvbXBhdGliaWxpdHkgZXhpc3RzIHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQKK3Byb2dyYW1tZXIncyBpbnRlcmZhY2UgZGVmaW5lZCBpbiBcY2Ryb21oLiBUaGlzIGd1aWRlIHdhcyB3cml0dGVuIHRvCitoZWxwIFxjZHJvbVwgZHJpdmVyIGRldmVsb3BlcnMgYWRhcHQgdGhlaXIgY29kZSB0byB1c2UgdGhlIFxVQ0RcIGNvZGUKK2RlZmluZWQgaW4gXGNkcm9tYy4KKworUGVyc29uYWxseSwgSSB0aGluayB0aGF0IHRoZSBtb3N0IGltcG9ydGFudCBoYXJkd2FyZSBpbnRlcmZhY2VzIGFyZQordGhlIElERS9BVEFQSSBkcml2ZXMgYW5kLCBvZiBjb3Vyc2UsIHRoZSBTQ1NJIGRyaXZlcywgYnV0IGFzIHByaWNlcworb2YgaGFyZHdhcmUgZHJvcCBjb250aW51b3VzbHksIGl0IGlzIGFsc28gbGlrZWx5IHRoYXQgcGVvcGxlIG1heSBoYXZlCittb3JlIHRoYW4gb25lIFxjZHJvbVwgZHJpdmUsIHBvc3NpYmx5IG9mIG1peGVkIHR5cGVzLiBJdCBpcyBpbXBvcnRhbnQKK3RoYXQgdGhlc2UgZHJpdmVzIGJlaGF2ZSBpbiB0aGUgc2FtZSB3YXkuIEluIERlY2VtYmVyIDE5OTQsIG9uZSBvZiB0aGUKK2NoZWFwZXN0IFxjZHJvbVwgZHJpdmVzIHdhcyBhIFBoaWxpcHMgY20yMDYsIGEgZG91YmxlLXNwZWVkIHByb3ByaWV0YXJ5Citkcml2ZS4gSW4gdGhlIG1vbnRocyB0aGF0IEkgd2FzIGJ1c3kgd3JpdGluZyBhIFxsaW51eFwgZHJpdmVyIGZvciBpdCwKK3Byb3ByaWV0YXJ5IGRyaXZlcyBiZWNhbWUgb2Jzb2xldGUgYW5kIElERS9BVEFQSSBkcml2ZXMgYmVjYW1lIHRoZQorc3RhbmRhcmQuIEF0IHRoZSB0aW1lIG9mIHRoZSBsYXN0IHVwZGF0ZSB0byB0aGlzIGRvY3VtZW50IChOb3ZlbWJlcgorMTk5NykgaXQgaXMgYmVjb21pbmcgZGlmZmljdWx0IHRvIGV2ZW4ge1xlbSBmaW5kfSBhbnl0aGluZyBsZXNzIHRoYW4gYQorMTYgc3BlZWQgXGNkcm9tXCBkcml2ZSwgYW5kIDI0IHNwZWVkIGRyaXZlcyBhcmUgY29tbW9uLgorCitcbmV3c2VjdGlvbntTdGFuZGFyZGl6aW5nIHRocm91Z2ggYW5vdGhlciBzb2Z0d2FyZSBsZXZlbH0KK1xsYWJlbHtjZHJvbS5jfQorCitBdCB0aGUgdGltZSB0aGlzIGRvY3VtZW50IHdhcyBjb25jZWl2ZWQsIGFsbCBkcml2ZXJzIGRpcmVjdGx5CitpbXBsZW1lbnRlZCB0aGUgXGNkcm9tXCAkaW9jdGwoKSQgY2FsbHMgdGhyb3VnaCB0aGVpciBvd24gcm91dGluZXMuIFRoaXMKK2xlZCB0byB0aGUgZGFuZ2VyIG9mIGRpZmZlcmVudCBkcml2ZXJzIGZvcmdldHRpbmcgdG8gZG8gaW1wb3J0YW50IHRoaW5ncworbGlrZSBjaGVja2luZyB0aGF0IHRoZSB1c2VyIHdhcyBnaXZpbmcgdGhlIGRyaXZlciB2YWxpZCBkYXRhLiBNb3JlCitpbXBvcnRhbnRseSwgdGhpcyBsZWQgdG8gdGhlIGRpdmVyZ2VuY2Ugb2YgYmVoYXZpb3IsIHdoaWNoIGhhcyBhbHJlYWR5CitiZWVuIGRpc2N1c3NlZC4KKworRm9yIHRoaXMgcmVhc29uLCB0aGUgXFVDRFwgd2FzIGNyZWF0ZWQgdG8gZW5mb3JjZSBjb25zaXN0ZW50IFxjZHJvbVwKK2RyaXZlIGJlaGF2aW9yLCBhbmQgdG8gcHJvdmlkZSBhIGNvbW1vbiBzZXQgb2Ygc2VydmljZXMgdG8gdGhlIHZhcmlvdXMKK2xvdy1sZXZlbCBcY2Ryb21cIGRldmljZSBkcml2ZXJzLiBUaGUgXFVDRFwgbm93IHByb3ZpZGVzIGFub3RoZXIKK3NvZnR3YXJlLWxldmVsLCB0aGF0IHNlcGFyYXRlcyB0aGUgJGlvY3RsKCkkIGFuZCAkb3BlbigpJCBpbXBsZW1lbnRhdGlvbgorZnJvbSB0aGUgYWN0dWFsIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBlZmZvcnQgaGFzCittYWRlIGZldyBjaGFuZ2VzIHdoaWNoIHdpbGwgYWZmZWN0IGEgdXNlcidzIGFwcGxpY2F0aW9uIHByb2dyYW1zLiBUaGUKK2dyZWF0ZXN0IGNoYW5nZSBpbnZvbHZlZCBtb3ZpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSB2YXJpb3VzIGxvdy1sZXZlbAorXGNkcm9tXCBkcml2ZXJzJyBoZWFkZXIgZmlsZXMgdG8gdGhlIGtlcm5lbCdzIGNkcm9tIGRpcmVjdG9yeS4gVGhpcyB3YXMKK2RvbmUgdG8gaGVscCBlbnN1cmUgdGhhdCB0aGUgdXNlciBpcyBvbmx5IHByZXNlbnRlZCB3aXRoIG9ubHkgb25lIGNkcm9tCitpbnRlcmZhY2UsIHRoZSBpbnRlcmZhY2UgZGVmaW5lZCBpbiBcY2Ryb21oLgorCitcY2Ryb21cIGRyaXZlcyBhcmUgc3BlY2lmaWMgZW5vdWdoIChcaWUsIGRpZmZlcmVudCBmcm9tIG90aGVyCitibG9jay1kZXZpY2VzIHN1Y2ggYXMgZmxvcHB5IG9yIGhhcmQgZGlzYyBkcml2ZXMpLCB0byBkZWZpbmUgYSBzZXQKK29mIGNvbW1vbiB7XGVtIFxjZHJvbVwgZGV2aWNlIG9wZXJhdGlvbnN9LCAkPGNkcm9tLWRldmljZT5fZG9wcyQuCitUaGVzZSBvcGVyYXRpb25zIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgY2xhc3NpY2FsIGJsb2NrLWRldmljZSBmaWxlCitvcGVyYXRpb25zLCAkPGJsb2NrLWRldmljZT5fZm9wcyQuCisKK1RoZSByb3V0aW5lcyBmb3IgdGhlIFxVQ0RcIGludGVyZmFjZSBsZXZlbCBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGZpbGUKK1xjZHJvbWMuIEluIHRoaXMgZmlsZSwgdGhlIFxVQ0RcIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsIGFzIGEgYmxvY2sKK2RldmljZSBieSByZWdpc3RlcmluZyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgJHN0cnVjdFwgZmlsZV9vcGVyYXRpb25zJDoKKyQkCitcaGFsaWdueyQjJFwgXGhmaWwmJCMkXCBcaGZpbCYkLyokIFxybSMgJCovJFxoZmlsXGNyCitzdHJ1Y3QmIGZpbGVfb3BlcmF0aW9uc1wgY2Ryb21fZm9wcyA9IFx7XGhpZGV3aWR0aFxjcgorICAgICAgICAmTlVMTCwgICAgICAgICAgICAgICAgICAmIGxzZWVrIFxjcgorICAgICAgICAmYmxvY2tfcmVhZCwgICAgICAgICAgICAmIHJlYWQtLS1nZW5lcmFsIGJsb2NrLWRldiByZWFkIFxjcgorICAgICAgICAmYmxvY2tfd3JpdGUsICAgICAgICAgICAmIHdyaXRlLS0tZ2VuZXJhbCBibG9jay1kZXYgd3JpdGUgXGNyCisgICAgICAgICZOVUxMLCAgICAgICAgICAgICAgICAgICYgcmVhZGRpciBcY3IKKyAgICAgICAgJk5VTEwsICAgICAgICAgICAgICAgICAgJiBzZWxlY3QgXGNyCisgICAgICAgICZjZHJvbV9pb2N0bCwgICAgICAgICAgICYgaW9jdGwgXGNyCisgICAgICAgICZOVUxMLCAgICAgICAgICAgICAgICAgICYgbW1hcCBcY3IKKyAgICAgICAgJmNkcm9tX29wZW4sICAgICAgICAgICAgJiBvcGVuIFxjcgorICAgICAgICAmY2Ryb21fcmVsZWFzZSwgICAgICAgICAmIHJlbGVhc2UgXGNyCisgICAgICAgICZOVUxMLCAgICAgICAgICAgICAgICAgICYgZnN5bmMgXGNyCisgICAgICAgICZOVUxMLCAgICAgICAgICAgICAgICAgICYgZmFzeW5jIFxjcgorICAgICAgICAmY2Ryb21fbWVkaWFfY2hhbmdlZCwgICAmIG1lZGlhIGNoYW5nZSBcY3IKKyAgICAgICAgJk5VTEwgICAgICAgICAgICAgICAgICAgJiByZXZhbGlkYXRlIFxjcgorXH07XGNyCit9CiskJCAKKworRXZlcnkgYWN0aXZlIFxjZHJvbVwgZGV2aWNlIHNoYXJlcyB0aGlzICRzdHJ1Y3QkLiBUaGUgcm91dGluZXMKK2RlY2xhcmVkIGFib3ZlIGFyZSBhbGwgaW1wbGVtZW50ZWQgaW4gXGNkcm9tYywgc2luY2UgdGhpcyBmaWxlIGlzIHRoZQorcGxhY2Ugd2hlcmUgdGhlIGJlaGF2aW9yIG9mIGFsbCBcY2Ryb20tZGV2aWNlcyBpcyBkZWZpbmVkIGFuZAorc3RhbmRhcmRpemVkLiBUaGUgYWN0dWFsIGludGVyZmFjZSB0byB0aGUgdmFyaW91cyB0eXBlcyBvZiBcY2Ryb21cIAoraGFyZHdhcmUgaXMgc3RpbGwgcGVyZm9ybWVkIGJ5IHZhcmlvdXMgbG93LWxldmVsIFxjZHJvbS1kZXZpY2UKK2RyaXZlcnMuIFRoZXNlIHJvdXRpbmVzIHNpbXBseSBpbXBsZW1lbnQgY2VydGFpbiB7XGVtIGNhcGFiaWxpdGllc1wvfQordGhhdCBhcmUgY29tbW9uIHRvIGFsbCBcY2Ryb21cIChhbmQgcmVhbGx5LCBhbGwgcmVtb3ZhYmxlLW1lZGlhCitkZXZpY2VzKS4KKworUmVnaXN0cmF0aW9uIG9mIGEgbG93LWxldmVsIFxjZHJvbVwgZGV2aWNlIGRyaXZlciBpcyBub3cgZG9uZSB0aHJvdWdoCit0aGUgZ2VuZXJhbCByb3V0aW5lcyBpbiBcY2Ryb21jLCBub3QgdGhyb3VnaCB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbQorKFZGUykgYW55IG1vcmUuIFRoZSBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgaW4gXGNkcm9tY1wgaXMgY2FycmllZCBvdXQKK3Rocm91Z2ggdHdvIGdlbmVyYWwgc3RydWN0dXJlcyB0aGF0IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlCitjYXBhYmlsaXRpZXMgb2YgdGhlIGRyaXZlciwgYW5kIHRoZSBzcGVjaWZpYyBkcml2ZXMgb24gd2hpY2ggdGhlCitkcml2ZXIgb3BlcmF0ZXMuIFRoZSBzdHJ1Y3R1cmVzIGFyZToKK1xiZWdpbntkZXNjcmlwdGlvbn0KK1xpdGVtWyRjZHJvbV9kZXZpY2Vfb3BzJF0gCisgIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBhCisgIFxjZHJvbVwgZGV2aWNlLiBUaGlzIHN0cnVjdHVyZSBpcyBjb25jZXB0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBtYWpvcgorICBudW1iZXIgb2YgdGhlIGRldmljZSAoYWx0aG91Z2ggc29tZSBkcml2ZXJzIG1heSBoYXZlIGRpZmZlcmVudAorICBtYWpvciBudW1iZXJzLCBhcyBpcyB0aGUgY2FzZSBmb3IgdGhlIElERSBkcml2ZXIpLgorXGl0ZW1bJGNkcm9tX2RldmljZV9pbmZvJF0gCisgIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBcY2Ryb21cIGRyaXZlLAorICBzdWNoIGFzIGl0cyBkZXZpY2UgbmFtZSwgc3BlZWQsIGV0Yy4gVGhpcyBzdHJ1Y3R1cmUgaXMgY29uY2VwdHVhbGx5CisgIGNvbm5lY3RlZCB0byB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBkZXZpY2UuCitcZW5ke2Rlc2NyaXB0aW9ufQorCitSZWdpc3RlcmluZyBhIHBhcnRpY3VsYXIgXGNkcm9tXCBkcml2ZSB3aXRoIHRoZSBcVUNEXCBpcyBkb25lIGJ5IHRoZQorbG93LWxldmVsIGRldmljZSBkcml2ZXIgdGhvdWdoIGEgY2FsbCB0bzoKKyQkcmVnaXN0ZXJfY2Ryb20oc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIDxkZXZpY2U+X2luZm8pICAKKyQkCitUaGUgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdHVyZSwgJDxkZXZpY2U+X2luZm8kLCBjb250YWlucyBhbGwgdGhlCitpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZSBrZXJuZWwgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGxvdy1sZXZlbAorXGNkcm9tXCBkZXZpY2UgZHJpdmVyLiBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGVudHJpZXMgaW4gdGhpcworc3RydWN0dXJlIGlzIGEgcG9pbnRlciB0byB0aGUgJGNkcm9tX2RldmljZV9vcHMkIHN0cnVjdHVyZSBvZiB0aGUKK2xvdy1sZXZlbCBkcml2ZXIuCisKK1RoZSBkZXZpY2Ugb3BlcmF0aW9ucyBzdHJ1Y3R1cmUsICRjZHJvbV9kZXZpY2Vfb3BzJCwgY29udGFpbnMgYSBsaXN0CitvZiBwb2ludGVycyB0byB0aGUgZnVuY3Rpb25zIHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgbG93LWxldmVsCitkZXZpY2UgZHJpdmVyLiBXaGVuIFxjZHJvbWNcIGFjY2Vzc2VzIGEgXGNkcm9tXCBkZXZpY2UsIGl0IGRvZXMgaXQKK3Rocm91Z2ggdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIHN0cnVjdHVyZS4gSXQgaXMgaW1wb3NzaWJsZSB0byBrbm93IGFsbAordGhlIGNhcGFiaWxpdGllcyBvZiBmdXR1cmUgXGNkcm9tXCBkcml2ZXMsIHNvIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcworbGlzdCBtYXkgbmVlZCB0byBiZSBleHBhbmRlZCBmcm9tIHRpbWUgdG8gdGltZSBhcyBuZXcgdGVjaG5vbG9naWVzIGFyZQorZGV2ZWxvcGVkLiBGb3IgZXhhbXBsZSwgQ0QtUiBhbmQgQ0QtUi9XIGRyaXZlcyBhcmUgYmVnaW5uaW5nIHRvIGJlY29tZQorcG9wdWxhciwgYW5kIHN1cHBvcnQgd2lsbCBzb29uIG5lZWQgdG8gYmUgYWRkZWQgZm9yIHRoZW0uIEZvciBub3csIHRoZQorY3VycmVudCAkc3RydWN0JCBpczoKKyQkCitcaGFsaWdueyQjJFwgXGhmaWwmJCMkXCBcaGZpbCZcaGJveCB0byAxMGVteyQjJFxoc3N9JgorICAkLyokIFxybSMgJCovJFxoZmlsXGNyCitzdHJ1Y3QmIGNkcm9tX2RldmljZV9vcHNcIFx7IFxoaWRld2lkdGhcY3IKKyAgJmludCYgKCogb3Blbikoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBpbnQpXGNyCisgICZ2b2lkJiAoKiByZWxlYXNlKShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICopO1xjciAKKyAgJmludCYgKCogZHJpdmVfc3RhdHVzKShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICosIGludCk7XGNyICAgICAKKyAgJmludCYgKCogbWVkaWFfY2hhbmdlZCkoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBpbnQpO1xjciAKKyAgJmludCYgKCogdHJheV9tb3ZlKShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICosIGludCk7XGNyCisgICZpbnQmICgqIGxvY2tfZG9vcikoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBpbnQpO1xjcgorICAmaW50JiAoKiBzZWxlY3Rfc3BlZWQpKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KTtcY3IKKyAgJmludCYgKCogc2VsZWN0X2Rpc2MpKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KTtcY3IKKyAgJmludCYgKCogZ2V0X2xhc3Rfc2Vzc2lvbikgKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiwgCisgICAgICAgIHN0cnVjdFwgY2Ryb21fbXVsdGlzZXNzaW9uICp7fSk7XGNyCisgICZpbnQmICgqIGdldF9tY24pKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiwgc3RydWN0XCBjZHJvbV9tY24gKnt9KTtcY3IKKyAgJmludCYgKCogcmVzZXQpKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKik7XGNyCisgICZpbnQmICgqIGF1ZGlvX2lvY3RsKShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICosIHVuc2lnbmVkXCBpbnQsIAorICAgICAgICB2b2lkICp7fSk7XGNyIAorICAmaW50JiAoKiBkZXZfaW9jdGwpKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiwgdW5zaWduZWRcIGludCwgCisgICAgICAgIHVuc2lnbmVkXCBsb25nKTtcY3IKK1xub2FsaWdue1xtZWRza2lwfQorICAmY29uc3RcIGludCYgY2FwYWJpbGl0eTsmIGNhcGFiaWxpdHkgZmxhZ3MgXGNyCisgICZpbnQmIG5fbWlub3JzOyYgbnVtYmVyIG9mIGFjdGl2ZSBtaW5vciBkZXZpY2VzIFxjcgorXH07XGNyCit9CiskJAorV2hlbiBhIGxvdy1sZXZlbCBkZXZpY2UgZHJpdmVyIGltcGxlbWVudHMgb25lIG9mIHRoZXNlIGNhcGFiaWxpdGllcywKK2l0IHNob3VsZCBhZGQgYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoaXMgJHN0cnVjdCQuIFdoZW4gYSBwYXJ0aWN1bGFyCitmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQsIGhvd2V2ZXIsIHRoaXMgJHN0cnVjdCQgc2hvdWxkIGNvbnRhaW4gYQorTlVMTCBpbnN0ZWFkLiBUaGUgJGNhcGFiaWxpdHkkIGZsYWdzIHNwZWNpZnkgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUKK1xjZHJvbVwgaGFyZHdhcmUgYW5kL29yIGxvdy1sZXZlbCBcY2Ryb21cIGRyaXZlciB3aGVuIGEgXGNkcm9tXCBkcml2ZQoraXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBcVUNELiBUaGUgdmFsdWUgJG5fbWlub3JzJCBzaG91bGQgYmUgYSBwb3NpdGl2ZQordmFsdWUgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIG1pbm9yIGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5Cit0aGUgbG93LWxldmVsIGRldmljZSBkcml2ZXIsIG5vcm1hbGx5fjEuIEFsdGhvdWdoIHRoZXNlIHR3byB2YXJpYWJsZXMKK2FyZSBgaW5mb3JtYXRpdmUnIHJhdGhlciB0aGFuIGBvcGVyYXRpb25hbCwnIHRoZXkgYXJlIGluY2x1ZGVkIGluCiskY2Ryb21fZGV2aWNlX29wcyQgYmVjYXVzZSB0aGV5IGRlc2NyaWJlIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSB7XGVtCitkcml2ZXJcL30gcmF0aGVyIHRoYW4gdGhlIHtcZW0gZHJpdmV9LiBOb21lbmNsYXR1cmUgaGFzIGFsd2F5cyBiZWVuCitkaWZmaWN1bHQgaW4gY29tcHV0ZXIgcHJvZ3JhbW1pbmcuCisKK05vdGUgdGhhdCBtb3N0IGZ1bmN0aW9ucyBoYXZlIGZld2VyIHBhcmFtZXRlcnMgdGhhbiB0aGVpcgorJGJsa2Rldl9mb3BzJCBjb3VudGVycGFydHMuIFRoaXMgaXMgYmVjYXVzZSB2ZXJ5IGxpdHRsZSBvZiB0aGUKK2luZm9ybWF0aW9uIGluIHRoZSBzdHJ1Y3R1cmVzICRpbm9kZSQgYW5kICRmaWxlJCBpcyB1c2VkLiBGb3IgbW9zdAorZHJpdmVycywgdGhlIG1haW4gcGFyYW1ldGVyIGlzIHRoZSAkc3RydWN0JCAkY2Ryb21fZGV2aWNlX2luZm8kLCBmcm9tCit3aGljaCB0aGUgbWFqb3IgYW5kIG1pbm9yIG51bWJlciBjYW4gYmUgZXh0cmFjdGVkLiAoTW9zdCBsb3ctbGV2ZWwKK1xjZHJvbVwgZHJpdmVycyBkb24ndCBldmVuIGxvb2sgYXQgdGhlIG1ham9yIGFuZCBtaW5vciBudW1iZXIgdGhvdWdoLAorc2luY2UgbWFueSBvZiB0aGVtIG9ubHkgc3VwcG9ydCBvbmUgZGV2aWNlLikgVGhpcyB3aWxsIGJlIGF2YWlsYWJsZQordGhyb3VnaCAkZGV2JCBpbiAkY2Ryb21fZGV2aWNlX2luZm8kIGRlc2NyaWJlZCBiZWxvdy4KKworVGhlIGRyaXZlLXNwZWNpZmljLCBtaW5vci1saWtlIGluZm9ybWF0aW9uIHRoYXQgaXMgcmVnaXN0ZXJlZCB3aXRoCitcY2Ryb21jLCBjdXJyZW50bHkgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZHM6CiskJAorXGhhbGlnbnskIyRcIFxoZmlsJiQjJFwgXGhmaWwmXGhib3ggdG8gMTBlbXskIyRcaHNzfSYKKyAgJC8qJCBccm0jICQqLyRcaGZpbFxjcgorc3RydWN0JiBjZHJvbV9kZXZpY2VfaW5mb1wgXHsgXGhpZGV3aWR0aFxjcgorICAmIHN0cnVjdFwgY2Ryb21fZGV2aWNlX29wcyAqJiBvcHM7JiBkZXZpY2Ugb3BlcmF0aW9ucyBmb3IgdGhpcyBtYWpvclxjcgorICAmIHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiYgbmV4dDsmIG5leHQgZGV2aWNlX2luZm8gZm9yIHRoaXMgbWFqb3JcY3IKKyAgJiB2b2lkIComICBoYW5kbGU7JiBkcml2ZXItZGVwZW5kZW50IGRhdGFcY3IKK1xub2FsaWdue1xtZWRza2lwfQorICAmIGtkZXZfdCYgIGRldjsmIGRldmljZSBudW1iZXIgKGluY29ycG9yYXRlcyBtaW5vcilcY3IKKyAgJiBpbnQmIG1hc2s7JiBtYXNrIG9mIGNhcGFiaWxpdHk6IGRpc2FibGVzIHRoZW0gXGNyCisgICYgaW50JiBzcGVlZDsmIG1heGltdW0gc3BlZWQgZm9yIHJlYWRpbmcgZGF0YSBcY3IKKyAgJiBpbnQmIGNhcGFjaXR5OyYgbnVtYmVyIG9mIGRpc2NzIGluIGEganVrZWJveCBcY3IKK1xub2FsaWdue1xtZWRza2lwfQorICAmaW50JiBvcHRpb25zIDogMzA7JiBvcHRpb25zIGZsYWdzIFxjcgorICAmdW5zaWduZWQmIG1jX2ZsYWdzIDogMjsmIG1lZGlhLWNoYW5nZSBidWZmZXIgZmxhZ3MgXGNyCisgICYgaW50JiB1c2VfY291bnQ7JiBudW1iZXIgb2YgdGltZXMgZGV2aWNlIGlzIG9wZW5lZFxjcgorICAmIGNoYXImIG5hbWVbMjBdOyYgbmFtZSBvZiB0aGUgZGV2aWNlIHR5cGVcY3IKK1x9XGNyCit9JCQKK1VzaW5nIHRoaXMgJHN0cnVjdCQsIGEgbGlua2VkIGxpc3Qgb2YgdGhlIHJlZ2lzdGVyZWQgbWlub3IgZGV2aWNlcyBpcworYnVpbHQsIHVzaW5nIHRoZSAkbmV4dCQgZmllbGQuIFRoZSBkZXZpY2UgbnVtYmVyLCB0aGUgZGV2aWNlIG9wZXJhdGlvbnMKK3N0cnVjdCBhbmQgc3BlY2lmaWNhdGlvbnMgb2YgcHJvcGVydGllcyBvZiB0aGUgZHJpdmUgYXJlIHN0b3JlZCBpbiB0aGlzCitzdHJ1Y3R1cmUuCisKK1RoZSAkbWFzayQgZmxhZ3MgY2FuIGJlIHVzZWQgdG8gbWFzayBvdXQgc29tZSBvZiB0aGUgY2FwYWJpbGl0aWVzIGxpc3RlZAoraW4gJG9wc1x0byBjYXBhYmlsaXR5JCwgaWYgYSBzcGVjaWZpYyBkcml2ZSBkb2Vzbid0IHN1cHBvcnQgYSBmZWF0dXJlCitvZiB0aGUgZHJpdmVyLiBUaGUgdmFsdWUgJHNwZWVkJCBzcGVjaWZpZXMgdGhlIG1heGltdW0gaGVhZC1yYXRlIG9mIHRoZQorZHJpdmUsIG1lYXN1cmVkIGluIHVuaXRzIG9mIG5vcm1hbCBhdWRpbyBzcGVlZCAoMTc2XCxrQi9zZWMgcmF3IGRhdGEgb3IKKzE1MFwsa0Ivc2VjIGZpbGUgc3lzdGVtIGRhdGEpLiBUaGUgdmFsdWUgJG5fZGlzY3MkIHNob3VsZCByZWZsZWN0IHRoZQorbnVtYmVyIG9mIGRpc2NzIHRoZSBkcml2ZSBjYW4gaG9sZCBzaW11bHRhbmVvdXNseSwgaWYgaXQgaXMgZGVzaWduZWQKK2FzIGEganVrZS1ib3gsIG9yIG90aGVyd2lzZX4xLiBUaGUgcGFyYW1ldGVycyBhcmUgZGVjbGFyZWQgJGNvbnN0JAorYmVjYXVzZSB0aGV5IGRlc2NyaWJlIHByb3BlcnRpZXMgb2YgdGhlIGRyaXZlLCB3aGljaCBkb24ndCBjaGFuZ2UgYWZ0ZXIKK3JlZ2lzdHJhdGlvbi4KKworQSBmZXcgcmVnaXN0ZXJzIGNvbnRhaW4gdmFyaWFibGVzIGxvY2FsIHRvIHRoZSBcY2Ryb21cIGRyaXZlLiBUaGUKK2ZsYWdzICRvcHRpb25zJCBhcmUgdXNlZCB0byBzcGVjaWZ5IGhvdyB0aGUgZ2VuZXJhbCBcY2Ryb21cIHJvdXRpbmVzCitzaG91bGQgYmVoYXZlLiBUaGVzZSB2YXJpb3VzIGZsYWdzIHJlZ2lzdGVycyBzaG91bGQgcHJvdmlkZSBlbm91Z2gKK2ZsZXhpYmlsaXR5IHRvIGFkYXB0IHRvIHRoZSBkaWZmZXJlbnQgdXNlcnMnIHdpc2hlcyAoYW5kIHtcZW0gbm90XC99IHRoZQorYGFyYml0cmFyeScgd2lzaGVzIG9mIHRoZSBhdXRob3Igb2YgdGhlIGxvdy1sZXZlbCBkZXZpY2UgZHJpdmVyLCBhcyBpcwordGhlIGNhc2UgaW4gdGhlIG9sZCBzY2hlbWUpLiBUaGUgcmVnaXN0ZXIgJG1jX2ZsYWdzJCBpcyB1c2VkIHRvIGJ1ZmZlcgordGhlIGluZm9ybWF0aW9uIGZyb20gJG1lZGlhX2NoYW5nZWQoKSQgdG8gdHdvIHNlcGFyYXRlIHF1ZXVlcy4gT3RoZXIKK2RhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byBhIG1pbm9yIGRyaXZlLCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCAkaGFuZGxlJCwKK3doaWNoIGNhbiBwb2ludCB0byBhIGRhdGEgc3RydWN0dXJlIHNwZWNpZmljIHRvIHRoZSBsb3ctbGV2ZWwgZHJpdmVyLgorVGhlIGZpZWxkcyAkdXNlX2NvdW50JCwgJG5leHQkLCAkb3B0aW9ucyQgYW5kICRtY19mbGFncyQgbmVlZCBub3QgYmUKK2luaXRpYWxpemVkLgorCitUaGUgaW50ZXJtZWRpYXRlIHNvZnR3YXJlIGxheWVyIHRoYXQgXGNkcm9tY1wgZm9ybXMgd2lsbCBwZXJmb3JtIHNvbWUKK2FkZGl0aW9uYWwgYm9va2tlZXBpbmcuIFRoZSB1c2UgY291bnQgb2YgdGhlIGRldmljZSAodGhlIG51bWJlciBvZgorcHJvY2Vzc2VzIHRoYXQgaGF2ZSB0aGUgZGV2aWNlIG9wZW5lZCkgaXMgcmVnaXN0ZXJlZCBpbiAkdXNlX2NvdW50JC4gVGhlCitmdW5jdGlvbiAkY2Ryb21faW9jdGwoKSQgd2lsbCB2ZXJpZnkgdGhlIGFwcHJvcHJpYXRlIHVzZXItbWVtb3J5IHJlZ2lvbnMKK2ZvciByZWFkIGFuZCB3cml0ZSwgYW5kIGluIGNhc2UgYSBsb2NhdGlvbiBvbiB0aGUgQ0QgaXMgdHJhbnNmZXJyZWQsCitpdCB3aWxsIGBzYW5pdGl6ZScgdGhlIGZvcm1hdCBieSBtYWtpbmcgcmVxdWVzdHMgdG8gdGhlIGxvdy1sZXZlbAorZHJpdmVycyBpbiBhIHN0YW5kYXJkIGZvcm1hdCwgYW5kIHRyYW5zbGF0aW5nIGFsbCBmb3JtYXRzIGJldHdlZW4gdGhlCit1c2VyLXNvZnR3YXJlIGFuZCBsb3cgbGV2ZWwgZHJpdmVycy4gVGhpcyByZWxpZXZlcyBtdWNoIG9mIHRoZSBkcml2ZXJzJworbWVtb3J5IGNoZWNraW5nIGFuZCBmb3JtYXQgY2hlY2tpbmcgYW5kIHRyYW5zbGF0aW9uLiBBbHNvLCB0aGUgbmVjZXNzYXJ5CitzdHJ1Y3R1cmVzIHdpbGwgYmUgZGVjbGFyZWQgb24gdGhlIHByb2dyYW0gc3RhY2suCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIHNob3VsZCBiZSBhcyBkZWZpbmVkIGluIHRoZQorZm9sbG93aW5nIHNlY3Rpb25zLiBUd28gZnVuY3Rpb25zIHtcZW0gbXVzdFwvfSBiZSBpbXBsZW1lbnRlZCwgbmFtZWx5Ciskb3BlbigpJCBhbmQgJHJlbGVhc2UoKSQuIE90aGVyIGZ1bmN0aW9ucyBtYXkgYmUgb21pdHRlZCwgdGhlaXIKK2NvcnJlc3BvbmRpbmcgY2FwYWJpbGl0eSBmbGFncyB3aWxsIGJlIGNsZWFyZWQgdXBvbiByZWdpc3RyYXRpb24uCitHZW5lcmFsbHksIGEgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIG9uIGVycm9yLiBBCitmdW5jdGlvbiBjYWxsIHNob3VsZCByZXR1cm4gb25seSBhZnRlciB0aGUgY29tbWFuZCBoYXMgY29tcGxldGVkLCBidXQgb2YKK2NvdXJzZSB3YWl0aW5nIGZvciB0aGUgZGV2aWNlIHNob3VsZCBub3QgdXNlIHByb2Nlc3NvciB0aW1lLgorCitcc3Vic2VjdGlvbnskSW50XCBvcGVuKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksIGludFwgcHVycG9zZSkkfQorCiskT3BlbigpJCBzaG91bGQgdHJ5IHRvIG9wZW4gdGhlIGRldmljZSBmb3IgYSBzcGVjaWZpYyAkcHVycG9zZSQsIHdoaWNoCitjYW4gYmUgZWl0aGVyOgorXGJlZ2lue2l0ZW1pemV9CitcaXRlbVswXSBPcGVuIGZvciByZWFkaW5nIGRhdGEsIGFzIGRvbmUgYnkge1x0dCB7bW91bnQoKX19ICgyKSwgb3IgdGhlCit1c2VyIGNvbW1hbmRzIHtcdHQge2RkfX0gb3Ige1x0dCB7Y2F0fX0uICAKK1xpdGVtWzFdIE9wZW4gZm9yICRpb2N0bCQgY29tbWFuZHMsIGFzIGRvbmUgYnkgYXVkaW8tQ0QgcGxheWluZworcHJvZ3JhbXMuCitcZW5ke2l0ZW1pemV9CitOb3RpY2UgdGhhdCBhbnkgc3RyYXRlZ2ljIGNvZGUgKGNsb3NpbmcgdHJheSB1cG9uICRvcGVuKCkkLCBldGMuKVwgaXMKK2RvbmUgYnkgdGhlIGNhbGxpbmcgcm91dGluZSBpbiBcY2Ryb21jLCBzbyB0aGUgbG93LWxldmVsIHJvdXRpbmUKK3Nob3VsZCBvbmx5IGJlIGNvbmNlcm5lZCB3aXRoIHByb3BlciBpbml0aWFsaXphdGlvbiwgc3VjaCBhcyBzcGlubmluZwordXAgdGhlIGRpc2MsIGV0Yy4gJSBhbmQgZGV2aWNlLXVzZSBjb3VudAorCisKK1xzdWJzZWN0aW9ueyRWb2lkXCByZWxlYXNlKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGkpJH0KKworCitEZXZpY2Utc3BlY2lmaWMgYWN0aW9ucyBzaG91bGQgYmUgdGFrZW4gc3VjaCBhcyBzcGlubmluZyBkb3duIHRoZSBkZXZpY2UuCitIb3dldmVyLCBzdHJhdGVnaWMgYWN0aW9ucyBzdWNoIGFzIGVqZWN0aW9uIG9mIHRoZSB0cmF5LCBvciB1bmxvY2tpbmcKK3RoZSBkb29yLCBzaG91bGQgYmUgbGVmdCBvdmVyIHRvIHRoZSBnZW5lcmFsIHJvdXRpbmUgJGNkcm9tX3JlbGVhc2UoKSQuCitUaGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHJldHVybmluZyB0eXBlICR2b2lkJC4KKworXHN1YnNlY3Rpb257JEludFwgZHJpdmVfc3RhdHVzKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksIGludFwgc2xvdF9ucikkfQorXGxhYmVse2RyaXZlIHN0YXR1c30KKworVGhlIGZ1bmN0aW9uICRkcml2ZV9zdGF0dXMkLCBpZiBpbXBsZW1lbnRlZCwgc2hvdWxkIHByb3ZpZGUKK2luZm9ybWF0aW9uIG9uIHRoZSBzdGF0dXMgb2YgdGhlIGRyaXZlIChub3QgdGhlIHN0YXR1cyBvZiB0aGUgZGlzYywKK3doaWNoIG1heSBvciBtYXkgbm90IGJlIGluIHRoZSBkcml2ZSkuIElmIHRoZSBkcml2ZSBpcyBub3QgYSBjaGFuZ2VyLAorJHNsb3RfbnIkIHNob3VsZCBiZSBpZ25vcmVkLiBJbiBcY2Ryb21oXCB0aGUgcG9zc2liaWxpdGllcyBhcmUgbGlzdGVkOiAKKyQkCitcaGFsaWdueyQjJFwgXGhmaWwmJC8qJCBccm0jICQqLyRcaGZpbFxjcgorQ0RTX05PX0lORk8mIG5vIGluZm9ybWF0aW9uIGF2YWlsYWJsZVxjcgorQ0RTX05PX0RJU0MmIG5vIGRpc2MgaXMgaW5zZXJ0ZWQsIHRyYXkgaXMgY2xvc2VkXGNyCitDRFNfVFJBWV9PUEVOJiB0cmF5IGlzIG9wZW5lZFxjcgorQ0RTX0RSSVZFX05PVF9SRUFEWSYgc29tZXRoaW5nIGlzIHdyb25nLCB0cmF5IGlzIG1vdmluZz9cY3IKK0NEU19ESVNDX09LJiBhIGRpc2MgaXMgbG9hZGVkIGFuZCBldmVyeXRoaW5nIGlzIGZpbmVcY3IKK30KKyQkCisKK1xzdWJzZWN0aW9ueyRJbnRcIG1lZGlhX2NoYW5nZWQoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwgaW50XCBkaXNjX25yKSR9CisKK1RoaXMgZnVuY3Rpb24gaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpbiAkc3RydWN0XCAKK2ZpbGVfb3BlcmF0aW9ucyQuIEl0IHJldHVybnMgMSBpZiB0aGUgbWVkaXVtIG9mIHRoZSBkZXZpY2UgJGNkaVx0bworZGV2JCBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLCBhbmQgMCBvdGhlcndpc2UuIFRoZSBwYXJhbWV0ZXIKKyRkaXNjX25yJCBpZGVudGlmaWVzIGEgc3BlY2lmaWMgc2xvdCBpbiBhIGp1a2UtYm94LCBpdCBzaG91bGQgYmUKK2lnbm9yZWQgZm9yIHNpbmdsZS1kaXNjIGRyaXZlcy4gIE5vdGUgdGhhdCBieSBgcmUtcm91dGluZycgdGhpcworZnVuY3Rpb24gdGhyb3VnaCAkY2Ryb21fbWVkaWFfY2hhbmdlZCgpJCwgd2UgY2FuIGltcGxlbWVudCBzZXBhcmF0ZQorcXVldWVzIGZvciB0aGUgVkZTIGFuZCBhIG5ldyAkaW9jdGwoKSQgZnVuY3Rpb24gdGhhdCBjYW4gcmVwb3J0IGRldmljZQorY2hhbmdlcyB0byBzb2Z0d2FyZSAoXGVnLCBhbiBhdXRvLW1vdW50aW5nIGRhZW1vbikuCisKK1xzdWJzZWN0aW9ueyRJbnRcIHRyYXlfbW92ZShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpLCBpbnRcIHBvc2l0aW9uKSR9CisKK1RoaXMgZnVuY3Rpb24sIGlmIGltcGxlbWVudGVkLCBzaG91bGQgY29udHJvbCB0aGUgdHJheSBtb3ZlbWVudC4gKE5vCitvdGhlciBmdW5jdGlvbiBzaG91bGQgY29udHJvbCB0aGlzLikgVGhlIHBhcmFtZXRlciAkcG9zaXRpb24kIGNvbnRyb2xzCit0aGUgZGVzaXJlZCBkaXJlY3Rpb24gb2YgbW92ZW1lbnQ6CitcYmVnaW57aXRlbWl6ZX0KK1xpdGVtWzBdIENsb3NlIHRyYXkKK1xpdGVtWzFdIE9wZW4gdHJheQorXGVuZHtpdGVtaXplfQorVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCBhbmQgYSBub24temVybyB2YWx1ZSB1cG9uCitlcnJvci4gTm90ZSB0aGF0IGlmIHRoZSB0cmF5IGlzIGFscmVhZHkgaW4gdGhlIGRlc2lyZWQgcG9zaXRpb24sIG5vCithY3Rpb24gbmVlZCBiZSB0YWtlbiwgYW5kIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIDAuIAorCitcc3Vic2VjdGlvbnskSW50XCBsb2NrX2Rvb3Ioc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwgaW50XCBsb2NrKSR9CisKK1RoaXMgZnVuY3Rpb24gKGFuZCBubyBvdGhlciBjb2RlKSBjb250cm9scyBsb2NraW5nIG9mIHRoZSBkb29yLCBpZiB0aGUKK2RyaXZlIGFsbG93cyB0aGlzLiBUaGUgdmFsdWUgb2YgJGxvY2skIGNvbnRyb2xzIHRoZSBkZXNpcmVkIGxvY2tpbmcKK3N0YXRlOgorXGJlZ2lue2l0ZW1pemV9CitcaXRlbVswXSBVbmxvY2sgZG9vciwgbWFudWFsIG9wZW5pbmcgaXMgYWxsb3dlZAorXGl0ZW1bMV0gTG9jayBkb29yLCB0cmF5IGNhbm5vdCBiZSBlamVjdGVkIG1hbnVhbGx5CitcZW5ke2l0ZW1pemV9CitUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCB1cG9uIHN1Y2Nlc3MsIGFuZCBhIG5vbi16ZXJvIHZhbHVlIHVwb24KK2Vycm9yLiBOb3RlIHRoYXQgaWYgdGhlIGRvb3IgaXMgYWxyZWFkeSBpbiB0aGUgcmVxdWVzdGVkIHN0YXRlLCBubworYWN0aW9uIG5lZWQgYmUgdGFrZW4sIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSAwLiAKKworXHN1YnNlY3Rpb257JEludFwgc2VsZWN0X3NwZWVkKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksIGludFwgc3BlZWQpJH0KKworU29tZSBcY2Ryb21cIGRyaXZlcyBhcmUgY2FwYWJsZSBvZiBjaGFuZ2luZyB0aGVpciBoZWFkLXNwZWVkLiBUaGVyZQorYXJlIHNldmVyYWwgcmVhc29ucyBmb3IgY2hhbmdpbmcgdGhlIHNwZWVkIG9mIGEgXGNkcm9tXCBkcml2ZS4gQmFkbHkKK3ByZXNzZWQgXGNkcm9tIHMgbWF5IGJlbmVmaXQgZnJvbSBsZXNzLXRoYW4tbWF4aW11bSBoZWFkIHJhdGUuIE1vZGVybgorXGNkcm9tXCBkcml2ZXMgY2FuIG9idGFpbiB2ZXJ5IGhpZ2ggaGVhZCByYXRlcyAodXAgdG8gJDI0XHRpbWVzJCBpcworY29tbW9uKS4gIEl0IGhhcyBiZWVuIHJlcG9ydGVkIHRoYXQgdGhlc2UgZHJpdmVzIGNhbiBtYWtlIHJlYWRpbmcKK2Vycm9ycyBhdCB0aGVzZSBoaWdoIHNwZWVkcywgcmVkdWNpbmcgdGhlIHNwZWVkIGNhbiBwcmV2ZW50IGRhdGEgbG9zcworaW4gdGhlc2UgY2lyY3Vtc3RhbmNlcy4gIEZpbmFsbHksIHNvbWUgb2YgdGhlc2UgZHJpdmVzIGNhbgorbWFrZSBhbiBhbm5veWluZ2x5IGxvdWQgbm9pc2UsIHdoaWNoIGEgbG93ZXIgc3BlZWQgbWF5IHJlZHVjZS4gJUZpbmFsbHksCislYWx0aG91Z2ggdGhlIGF1ZGlvLWxvdy1wYXNzIGZpbHRlcnMgcHJvYmFibHkgYXJlbid0IGRlc2lnbmVkIGZvciBpdCwKKyVtb3JlIHRoYW4gcmVhbC10aW1lIHBsYXliYWNrIG9mIGF1ZGlvIG1pZ2h0IGJlIHVzZWQgZm9yIGhpZ2gtc3BlZWQKKyVjb3B5aW5nIG9mIGF1ZGlvIHRyYWNrcy4KKworVGhpcyBmdW5jdGlvbiBzcGVjaWZpZXMgdGhlIHNwZWVkIGF0IHdoaWNoIGRhdGEgaXMgcmVhZCBvciBhdWRpbyBpcworcGxheWVkIGJhY2suIFRoZSB2YWx1ZSBvZiAkc3BlZWQkIHNwZWNpZmllcyB0aGUgaGVhZC1zcGVlZCBvZiB0aGUKK2RyaXZlLCBtZWFzdXJlZCBpbiB1bml0cyBvZiBzdGFuZGFyZCBjZHJvbSBzcGVlZCAoMTc2XCxrQi9zZWMgcmF3IGRhdGEKK29yIDE1MFwsa0Ivc2VjIGZpbGUgc3lzdGVtIGRhdGEpLiBTbyB0byByZXF1ZXN0IHRoYXQgYSBcY2Ryb21cIGRyaXZlCitvcGVyYXRlIGF0IDMwMFwsa0Ivc2VjIHlvdSB3b3VsZCBjYWxsIHRoZSBDRFJPTV9TRUxFQ1RfU1BFRUQgJGlvY3RsJAord2l0aCAkc3BlZWQ9MiQuIFRoZSBzcGVjaWFsIHZhbHVlIGAwJyBtZWFucyBgYXV0by1zZWxlY3Rpb24nLCBcaWUsCittYXhpbXVtIGRhdGEtcmF0ZSBvciByZWFsLXRpbWUgYXVkaW8gcmF0ZS4gSWYgdGhlIGRyaXZlIGRvZXNuJ3QgaGF2ZQordGhpcyBgYXV0by1zZWxlY3Rpb24nIGNhcGFiaWxpdHksIHRoZSBkZWNpc2lvbiBzaG91bGQgYmUgbWFkZSBvbiB0aGUKK2N1cnJlbnQgZGlzYyBsb2FkZWQgYW5kIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIHBvc2l0aXZlLiBBIG5lZ2F0aXZlCityZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLgorCitcc3Vic2VjdGlvbnskSW50XCBzZWxlY3RfZGlzYyhzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpLCBpbnRcIG51bWJlcikkfQorCitJZiB0aGUgZHJpdmUgY2FuIHN0b3JlIG11bHRpcGxlIGRpc2NzIChhIGp1a2UtYm94KSB0aGlzIGZ1bmN0aW9uCit3aWxsIHBlcmZvcm0gZGlzYyBzZWxlY3Rpb24uIEl0IHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiB0aGUKK3NlbGVjdGVkIGRpc2Mgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4gQ3VycmVudGx5LCBvbmx5Cit0aGUgaWRlLWNkIGRyaXZlciBzdXBwb3J0cyB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKK1xzdWJzZWN0aW9ueyRJbnRcIGdldF9sYXN0X3Nlc3Npb24oc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwgc3RydWN0XAorICBjZHJvbV9tdWx0aXNlc3Npb24gKiBtc19pbmZvKSR9CisKK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGltcGxlbWVudCB0aGUgb2xkIGNvcnJlc3BvbmRpbmcgJGlvY3RsKCkkLiBGb3IKK2RldmljZSAkY2RpXHRvIGRldiQsIHRoZSBzdGFydCBvZiB0aGUgbGFzdCBzZXNzaW9uIG9mIHRoZSBjdXJyZW50IGRpc2MKK3Nob3VsZCBiZSByZXR1cm5lZCBpbiB0aGUgcG9pbnRlciBhcmd1bWVudCAkbXNfaW5mbyQuIE5vdGUgdGhhdAorcm91dGluZXMgaW4gXGNkcm9tY1wgaGF2ZSBzYW5pdGl6ZWQgdGhpcyBhcmd1bWVudDogaXRzIHJlcXVlc3RlZAorZm9ybWF0IHdpbGwge1xlbSBhbHdheXNcL30gYmUgb2YgdGhlIHR5cGUgJENEUk9NX0xCQSQgKGxpbmVhciBibG9jaworYWRkcmVzc2luZyBtb2RlKSwgd2hhdGV2ZXIgdGhlIGNhbGxpbmcgc29mdHdhcmUgcmVxdWVzdGVkLiBCdXQKK3Nhbml0aXphdGlvbiBnb2VzIGV2ZW4gZnVydGhlcjogdGhlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBtYXkKK3JldHVybiB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGluICRDRFJPTV9NU0YkIGZvcm1hdCBpZiBpdCB3aXNoZXMgc28KKyhzZXR0aW5nIHRoZSAkbXNfaW5mb1xyaWdodGFycm93IGFkZHJfZm9ybWF0JCBmaWVsZCBhcHByb3ByaWF0ZWx5LCBvZgorY291cnNlKSBhbmQgdGhlIHJvdXRpbmVzIGluIFxjZHJvbWNcIHdpbGwgbWFrZSB0aGUgdHJhbnNmb3JtYXRpb24gaWYKK25lY2Vzc2FyeS4gVGhlIHJldHVybiB2YWx1ZSBpcyAwIHVwb24gc3VjY2Vzcy4KKworXHN1YnNlY3Rpb257JEludFwgZ2V0X21jbihzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpLCBzdHJ1Y3RcCisgIGNkcm9tX21jbiAqIG1jbikkfQorCitTb21lIGRpc2NzIGNhcnJ5IGEgYE1lZGlhIENhdGFsb2cgTnVtYmVyJyAoTUNOKSwgYWxzbyBjYWxsZWQKK2BVbml2ZXJzYWwgUHJvZHVjdCBDb2RlJyAoVVBDKS4gVGhpcyBudW1iZXIgc2hvdWxkIHJlZmxlY3QgdGhlIG51bWJlcgordGhhdCBpcyBnZW5lcmFsbHkgZm91bmQgaW4gdGhlIGJhci1jb2RlIG9uIHRoZSBwcm9kdWN0LiBVbmZvcnR1bmF0ZWx5LAordGhlIGZldyBkaXNjcyB0aGF0IGNhcnJ5IHN1Y2ggYSBudW1iZXIgb24gdGhlIGRpc2MgZG9uJ3QgZXZlbiB1c2UgdGhlCitzYW1lIGZvcm1hdC4gVGhlIHJldHVybiBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9pbnRlciB0byBhCitwcmUtZGVjbGFyZWQgbWVtb3J5IHJlZ2lvbiBvZiB0eXBlICRzdHJ1Y3RcIGNkcm9tX21jbiQuIFRoZSBNQ04gaXMKK2V4cGVjdGVkIGFzIGEgMTMtY2hhcmFjdGVyIHN0cmluZywgdGVybWluYXRlZCBieSBhIG51bGwtY2hhcmFjdGVyLgorCitcc3Vic2VjdGlvbnskSW50XCByZXNldChzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpKSR9CisKK1RoaXMgY2FsbCBzaG91bGQgcGVyZm9ybSBhIGhhcmQtcmVzZXQgb24gdGhlIGRyaXZlIChhbHRob3VnaCBpbgorY2lyY3Vtc3RhbmNlcyB0aGF0IGEgaGFyZC1yZXNldCBpcyBuZWNlc3NhcnksIGEgZHJpdmUgbWF5IHZlcnkgd2VsbCBub3QKK2xpc3RlbiB0byBjb21tYW5kcyBhbnltb3JlKS4gUHJlZmVyYWJseSwgY29udHJvbCBpcyByZXR1cm5lZCB0byB0aGUKK2NhbGxlciBvbmx5IGFmdGVyIHRoZSBkcml2ZSBoYXMgZmluaXNoZWQgcmVzZXR0aW5nLiBJZiB0aGUgZHJpdmUgaXMgbm8KK2xvbmdlciBsaXN0ZW5pbmcsIGl0IG1heSBiZSB3aXNlIGZvciB0aGUgdW5kZXJseWluZyBsb3ctbGV2ZWwgY2Ryb20KK2RyaXZlciB0byB0aW1lIG91dC4KKworXHN1YnNlY3Rpb257JEludFwgYXVkaW9faW9jdGwoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwgdW5zaWduZWRcCisgIGludFwgY21kLCB2b2lkICogYXJnKSR9CisKK1NvbWUgb2YgdGhlIFxjZHJvbS0kaW9jdGwkcyBkZWZpbmVkIGluIFxjZHJvbWhcIGNhbiBiZQoraW1wbGVtZW50ZWQgYnkgdGhlIHJvdXRpbmVzIGRlc2NyaWJlZCBhYm92ZSwgYW5kIGhlbmNlIHRoZSBmdW5jdGlvbgorJGNkcm9tX2lvY3RsJCB3aWxsIHVzZSB0aG9zZS4gSG93ZXZlciwgbW9zdCAkaW9jdGwkcyBkZWFsIHdpdGgKK2F1ZGlvLWNvbnRyb2wuIFdlIGhhdmUgZGVjaWRlZCB0byBsZWF2ZSB0aGVzZSB0byBiZSBhY2Nlc3NlZCB0aHJvdWdoIGEKK3NpbmdsZSBmdW5jdGlvbiwgcmVwZWF0aW5nIHRoZSBhcmd1bWVudHMgJGNtZCQgYW5kICRhcmckLiBOb3RlIHRoYXQKK3RoZSBsYXR0ZXIgaXMgb2YgdHlwZSAkdm9pZCp7fSQsIHJhdGhlciB0aGFuICR1bnNpZ25lZFwgbG9uZ1wKK2ludCQuIFRoZSByb3V0aW5lICRjZHJvbV9pb2N0bCgpJCBkb2VzIGRvIHNvbWUgdXNlZnVsIHRoaW5ncywKK3Rob3VnaC4gSXQgc2FuaXRpemVzIHRoZSBhZGRyZXNzIGZvcm1hdCB0eXBlIHRvICRDRFJPTV9NU0YkIChNaW51dGVzLAorU2Vjb25kcywgRnJhbWVzKSBmb3IgYWxsIGF1ZGlvIGNhbGxzLiBJdCBhbHNvIHZlcmlmaWVzIHRoZSBtZW1vcnkKK2xvY2F0aW9uIG9mICRhcmckLCBhbmQgcmVzZXJ2ZXMgc3RhY2stbWVtb3J5IGZvciB0aGUgYXJndW1lbnQuIFRoaXMKK21ha2VzIGltcGxlbWVudGF0aW9uIG9mIHRoZSAkYXVkaW9faW9jdGwoKSQgbXVjaCBzaW1wbGVyIHRoYW4gaW4gdGhlCitvbGQgZHJpdmVyIHNjaGVtZS4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgbG9vayB1cCB0aGUgZnVuY3Rpb24KKyRjbTIwNl9hdWRpb19pb2N0bCgpJCBpbiB7XHR0IHtjbTIwNi5jfX0gdGhhdCBzaG91bGQgYmUgdXBkYXRlZCB3aXRoCit0aGlzIGRvY3VtZW50YXRpb24uIAorCitBbiB1bmltcGxlbWVudGVkIGlvY3RsIHNob3VsZCByZXR1cm4gJC1FTk9TWVMkLCBidXQgYSBoYXJtbGVzcyByZXF1ZXN0CisoXGVnLCAkQ0RST01TVEFSVCQpIG1heSBiZSBpZ25vcmVkIGJ5IHJldHVybmluZyAwIChzdWNjZXNzKS4gT3RoZXIKK2Vycm9ycyBzaG91bGQgYmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZHMsIHdoYXRldmVyIHRoZXkgYXJlLiBXaGVuCithbiBlcnJvciBpcyByZXR1cm5lZCBieSB0aGUgbG93LWxldmVsIGRyaXZlciwgdGhlIFxVQ0RcIHRyaWVzIHdoZW5ldmVyCitwb3NzaWJsZSB0byByZXR1cm4gdGhlIGVycm9yIGNvZGUgdG8gdGhlIGNhbGxpbmcgcHJvZ3JhbS4gKFdlIG1heSBkZWNpZGUKK3RvIHNhbml0aXplIHRoZSByZXR1cm4gdmFsdWUgaW4gJGNkcm9tX2lvY3RsKCkkIHRob3VnaCwgaW4gb3JkZXIgdG8KK2d1YXJhbnRlZSBhIHVuaWZvcm0gaW50ZXJmYWNlIHRvIHRoZSBhdWRpby1wbGF5ZXIgc29mdHdhcmUuKQorCitcc3Vic2VjdGlvbnskSW50XCBkZXZfaW9jdGwoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwgdW5zaWduZWRcIGludFwKKyAgY21kLCB1bnNpZ25lZFwgbG9uZ1wgYXJnKSR9CisKK1NvbWUgJGlvY3RsJHMgc2VlbSB0byBiZSBzcGVjaWZpYyB0byBjZXJ0YWluIFxjZHJvbVwgZHJpdmVzLiBUaGF0IGlzLAordGhleSBhcmUgaW50cm9kdWNlZCB0byBzZXJ2aWNlIHNvbWUgY2FwYWJpbGl0aWVzIG9mIGNlcnRhaW4gZHJpdmVzLiBJbgorZmFjdCwgdGhlcmUgYXJlIDYgZGlmZmVyZW50ICRpb2N0bCRzIGZvciByZWFkaW5nIGRhdGEsIGVpdGhlciBpbiBzb21lCitwYXJ0aWN1bGFyIGtpbmQgb2YgZm9ybWF0LCBvciBhdWRpbyBkYXRhLiBOb3QgbWFueSBkcml2ZXMgc3VwcG9ydAorcmVhZGluZyBhdWRpbyB0cmFja3MgYXMgZGF0YSwgSSBiZWxpZXZlIHRoaXMgaXMgYmVjYXVzZSBvZiBwcm90ZWN0aW9uCitvZiBjb3B5cmlnaHRzIG9mIGFydGlzdHMuIE1vcmVvdmVyLCBJIHRoaW5rIHRoYXQgaWYgYXVkaW8tdHJhY2tzIGFyZQorc3VwcG9ydGVkLCBpdCBzaG91bGQgYmUgZG9uZSB0aHJvdWdoIHRoZSBWRlMgYW5kIG5vdCB2aWEgJGlvY3RsJHMuIEEKK3Byb2JsZW0gaGVyZSBjb3VsZCBiZSB0aGUgZmFjdCB0aGF0IGF1ZGlvLWZyYW1lcyBhcmUgMjM1MiBieXRlcyBsb25nLAorc28gZWl0aGVyIHRoZSBhdWRpby1maWxlLXN5c3RlbSBzaG91bGQgYXNrIGZvciA3NTI2NCBieXRlcyBhdCBvbmNlCisodGhlIGxlYXN0IGNvbW1vbiBtdWx0aXBsZSBvZiA1MTIgYW5kIDIzNTIpLCBvciB0aGUgZHJpdmVycyBzaG91bGQKK2JlbmQgdGhlaXIgYmFja3MgdG8gY29wZSB3aXRoIHRoaXMgaW5jb2hlcmVuY2UgKHRvIHdoaWNoIEkgd291bGQgYmUKK29wcG9zZWQpLiAgRnVydGhlcm1vcmUsIGl0IGlzIHZlcnkgZGlmZmljdWx0IGZvciB0aGUgaGFyZHdhcmUgdG8gZmluZAordGhlIGV4YWN0IGZyYW1lIGJvdW5kYXJpZXMsIHNpbmNlIHRoZXJlIGFyZSBubyBzeW5jaHJvbml6YXRpb24gaGVhZGVycworaW4gYXVkaW8gZnJhbWVzLiAgT25jZSB0aGVzZSBpc3N1ZXMgYXJlIHJlc29sdmVkLCB0aGlzIGNvZGUgc2hvdWxkIGJlCitzdGFuZGFyZGl6ZWQgaW4gXGNkcm9tYy4KKworQmVjYXVzZSB0aGVyZSBhcmUgc28gbWFueSAkaW9jdGwkcyB0aGF0IHNlZW0gdG8gYmUgaW50cm9kdWNlZCB0bworc2F0aXNmeSBjZXJ0YWluIGRyaXZlcnMsXGZvb3Rub3Rle0lzIHRoZXJlIHNvZnR3YXJlIGFyb3VuZCB0aGF0CisgIGFjdHVhbGx5IHVzZXMgdGhlc2U/IEknZCBiZSBpbnRlcmVzdGVkIX0gYW55IGBub24tc3RhbmRhcmQnICRpb2N0bCRzCithcmUgcm91dGVkIHRocm91Z2ggdGhlIGNhbGwgJGRldl9pb2N0bCgpJC4gSW4gcHJpbmNpcGxlLCBgcHJpdmF0ZScKKyRpb2N0bCRzIHNob3VsZCBiZSBudW1iZXJlZCBhZnRlciB0aGUgZGV2aWNlJ3MgbWFqb3IgbnVtYmVyLCBhbmQgbm90Cit0aGUgZ2VuZXJhbCBcY2Ryb21cICRpb2N0bCQgbnVtYmVyLCB7XHR0IHsweDUzfX0uIEN1cnJlbnRseSB0aGUKK25vbi1zdXBwb3J0ZWQgJGlvY3RsJHMgYXJlOiB7XGl0IENEUk9NUkVBRE1PREUxLCBDRFJPTVJFQURNT0RFMiwKKyAgQ0RST01SRUFEQVVESU8sIENEUk9NUkVBRFJBVywgQ0RST01SRUFEQ09PS0VELCBDRFJPTVNFRUssCisgIENEUk9NUExBWVwtQkxLIGFuZCBDRFJPTVwtUkVBREFMTH0uCisKKworXHN1YnNlY3Rpb257XGNkcm9tXCBjYXBhYmlsaXRpZXN9CitcbGFiZWx7Y2FwYWJpbGl0eX0KKworSW5zdGVhZCBvZiBqdXN0IGltcGxlbWVudGluZyBzb21lICRpb2N0bCQgY2FsbHMsIHRoZSBpbnRlcmZhY2UgaW4KK1xjZHJvbWNcIHN1cHBsaWVzIHRoZSBwb3NzaWJpbGl0eSB0byBpbmRpY2F0ZSB0aGUge1xlbSBjYXBhYmlsaXRpZXNcL30KK29mIGEgXGNkcm9tXCBkcml2ZS4gVGhpcyBjYW4gYmUgZG9uZSBieSBPUmluZyBhbnkgbnVtYmVyIG9mCitjYXBhYmlsaXR5LWNvbnN0YW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIFxjZHJvbWhcIGF0IHRoZSByZWdpc3RyYXRpb24KK3BoYXNlLiBDdXJyZW50bHksIHRoZSBjYXBhYmlsaXRpZXMgYXJlIGFueSBvZjoKKyQkCitcaGFsaWdueyQjJFwgXGhmaWwmJC8qJCBccm0jICQqLyRcaGZpbFxjcgorQ0RDX0NMT1NFX1RSQVkmIGNhbiBjbG9zZSB0cmF5IGJ5IHNvZnR3YXJlIGNvbnRyb2xcY3IKK0NEQ19PUEVOX1RSQVkmIGNhbiBvcGVuIHRyYXlcY3IKK0NEQ19MT0NLJiBjYW4gbG9jayBhbmQgdW5sb2NrIHRoZSBkb29yXGNyCitDRENfU0VMRUNUX1NQRUVEJiBjYW4gc2VsZWN0IHNwZWVkLCBpbiB1bml0cyBvZiAkXHNpbSQxNTBcLGtCL3NcY3IKK0NEQ19TRUxFQ1RfRElTQyYgZHJpdmUgaXMganVrZS1ib3hcY3IKK0NEQ19NVUxUSV9TRVNTSU9OJiBjYW4gcmVhZCBzZXNzaW9ucyAkPlxybTEkXGNyCitDRENfTUNOJiBjYW4gcmVhZCBNZWRpYSBDYXRhbG9nIE51bWJlclxjcgorQ0RDX01FRElBX0NIQU5HRUQmIGNhbiByZXBvcnQgaWYgZGlzYyBoYXMgY2hhbmdlZFxjcgorQ0RDX1BMQVlfQVVESU8mIGNhbiBwZXJmb3JtIGF1ZGlvLWZ1bmN0aW9ucyAocGxheSwgcGF1c2UsIGV0YylcY3IKK0NEQ19SRVNFVCYgaGFyZCByZXNldCBkZXZpY2VcY3IKK0NEQ19JT0NUTFMmIGRyaXZlciBoYXMgbm9uLXN0YW5kYXJkIGlvY3Rsc1xjcgorQ0RDX0RSSVZFX1NUQVRVUyYgZHJpdmVyIGltcGxlbWVudHMgZHJpdmUgc3RhdHVzXGNyCit9CiskJAorVGhlIGNhcGFiaWxpdHkgZmxhZyBpcyBkZWNsYXJlZCAkY29uc3QkLCB0byBwcmV2ZW50IGRyaXZlcnMgZnJvbQorYWNjaWRlbnRhbGx5IHRhbXBlcmluZyB3aXRoIHRoZSBjb250ZW50cy4gVGhlIGNhcGFiaWxpdHkgZmFncyBhY3R1YWxseQoraW5mb3JtIFxjZHJvbWNcIG9mIHdoYXQgdGhlIGRyaXZlciBjYW4gZG8uIElmIHRoZSBkcml2ZSBmb3VuZAorYnkgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlIHRoZSBjYXBhYmlsaXR5LCBpcyBjYW4gYmUgbWFza2VkIG91dCBieQordGhlICRjZHJvbV9kZXZpY2VfaW5mbyQgdmFyaWFibGUgJG1hc2skLiBGb3IgaW5zdGFuY2UsIHRoZSBTQ1NJIFxjZHJvbVwKK2RyaXZlciBoYXMgaW1wbGVtZW50ZWQgdGhlIGNvZGUgZm9yIGxvYWRpbmcgYW5kIGVqZWN0aW5nIFxjZHJvbSdzLCBhbmQKK2hlbmNlIGl0cyBjb3JyZXNwb25kaW5nIGZsYWdzIGluICRjYXBhYmlsaXR5JCB3aWxsIGJlIHNldC4gQnV0IGEgU0NTSQorXGNkcm9tXCBkcml2ZSBtaWdodCBiZSBhIGNhZGR5IHN5c3RlbSwgd2hpY2ggY2FuJ3QgbG9hZCB0aGUgdHJheSwgYW5kCitoZW5jZSBmb3IgdGhpcyBkcml2ZSB0aGUgJGNkcm9tX2RldmljZV9pbmZvJCBzdHJ1Y3Qgd2lsbCBoYXZlIHNldAordGhlICRDRENfQ0xPU0VfVFJBWSQgYml0IGluICRtYXNrJC4KKworSW4gdGhlIGZpbGUgXGNkcm9tY1wgeW91IHdpbGwgZW5jb3VudGVyIG1hbnkgY29uc3RydWN0aW9ucyBvZiB0aGUgdHlwZQorJCRcaXQKK2lmXCAoY2RvXHJpZ2h0YXJyb3cgY2FwYWJpbGl0eSBcbWF0aHJlbFwmIFxtYXRob3Jke1xzaW19IGNkaVxyaWdodGFycm93IG1hc2sgCisgICBcbWF0aHJlbHtcJn0gQ0RDXzxjYXBhYmlsaXR5PikgXGxkb3RzCiskJAorVGhlcmUgaXMgbm8gJGlvY3RsJCB0byBzZXQgdGhlIG1hc2tcZG90cyBUaGUgcmVhc29uIGlzIHRoYXQKK0kgdGhpbmsgaXQgaXMgYmV0dGVyIHRvIGNvbnRyb2wgdGhlIHtcZW0gYmVoYXZpb3JcL30gcmF0aGVyIHRoYW4gdGhlCit7XGVtIGNhcGFiaWxpdGllc30uCisKK1xzdWJzZWN0aW9ue09wdGlvbnN9CisKK0EgZmluYWwgZmxhZyByZWdpc3RlciBjb250cm9scyB0aGUge1xlbSBiZWhhdmlvclwvfSBvZiB0aGUgXGNkcm9tXAorZHJpdmVzLCBpbiBvcmRlciB0byBzYXRpc2Z5IGRpZmZlcmVudCB1c2Vycycgd2lzaGVzLCBob3BlZnVsbHkKK2luZGVwZW5kZW50bHkgb2YgdGhlIGlkZWFzIG9mIHRoZSByZXNwZWN0aXZlIGF1dGhvciB3aG8gaGFwcGVuZWQgdG8KK2hhdmUgbWFkZSB0aGUgZHJpdmUncyBzdXBwb3J0IGF2YWlsYWJsZSB0byB0aGUgXGxpbnV4XCBjb21tdW5pdHkuIFRoZQorY3VycmVudCBiZWhhdmlvciBvcHRpb25zIGFyZToKKyQkCitcaGFsaWdueyQjJFwgXGhmaWwmJC8qJCBccm0jICQqLyRcaGZpbFxjcgorQ0RPX0FVVE9fQ0xPU0UmIHRyeSB0byBjbG9zZSB0cmF5IHVwb24gZGV2aWNlICRvcGVuKCkkXGNyCitDRE9fQVVUT19FSkVDVCYgdHJ5IHRvIG9wZW4gdHJheSBvbiBsYXN0IGRldmljZSAkY2xvc2UoKSRcY3IKK0NET19VU0VfRkZMQUdTJiB1c2UgJGZpbGVfcG9pbnRlclxyaWdodGFycm93IGZfZmxhZ3MkIHRvIGluZGljYXRlCisgcHVycG9zZSBmb3IgJG9wZW4oKSRcY3IKK0NET19MT0NLJiB0cnkgdG8gbG9jayBkb29yIGlmIGRldmljZSBpcyBvcGVuZWRcY3IKK0NET19DSEVDS19UWVBFJiBlbnN1cmUgZGlzYyB0eXBlIGlzIGRhdGEgaWYgb3BlbmVkIGZvciBkYXRhXGNyCit9CiskJAorCitUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIGlzICRDRE9fQVVUT19DTE9TRSBcbWF0aHJlbHwKK0NET19VU0VfRkZMQUdTIFxtYXRocmVsfCBDRE9fTE9DSyQsIHJlZmxlY3RpbmcgbXkgb3duIHZpZXcgb24gdXNlcgoraW50ZXJmYWNlIGFuZCBzb2Z0d2FyZSBzdGFuZGFyZHMuIEJlZm9yZSB5b3UgcHJvdGVzdCwgdGhlcmUgYXJlIHR3bworbmV3ICRpb2N0bCRzIGltcGxlbWVudGVkIGluIFxjZHJvbWMsIHRoYXQgYWxsb3cgeW91IHRvIGNvbnRyb2wgdGhlCitiZWhhdmlvciBieSBzb2Z0d2FyZS4gVGhlc2UgYXJlOgorJCQKK1xoYWxpZ257JCMkXCBcaGZpbCYkLyokIFxybSMgJCovJFxoZmlsXGNyCitDRFJPTV9TRVRfT1BUSU9OUyYgc2V0IG9wdGlvbnMgc3BlY2lmaWVkIGluICQoaW50KVwgYXJnJFxjcgorQ0RST01fQ0xFQVJfT1BUSU9OUyYgY2xlYXIgb3B0aW9ucyBzcGVjaWZpZWQgaW4gJChpbnQpXCBhcmckXGNyCit9CiskJAorT25lIG9wdGlvbiBuZWVkcyBzb21lIG1vcmUgZXhwbGFuYXRpb246ICRDRE9fVVNFX0ZGTEFHUyQuIEluIHRoZSBuZXh0CituZXdzZWN0aW9uIHdlIGV4cGxhaW4gd2hhdCB0aGUgbmVlZCBmb3IgdGhpcyBvcHRpb24gaXMuCisKK0Egc29mdHdhcmUgcGFja2FnZSB7XHR0IHNldGNkfSwgYXZhaWxhYmxlIGZyb20gdGhlIERlYmlhbiBkaXN0cmlidXRpb24KK2FuZCB7XHR0IHN1bnNpdGUudW5jLmVkdX0sIGFsbG93cyB1c2VyIGxldmVsIGNvbnRyb2wgb2YgdGhlc2UgZmxhZ3MuIAorCitcbmV3c2VjdGlvbntUaGUgbmVlZCB0byBrbm93IHRoZSBwdXJwb3NlIG9mIG9wZW5pbmcgdGhlIFxjZHJvbVwgZGV2aWNlfQorCitUcmFkaXRpb25hbGx5LCBVbml4IGRldmljZXMgY2FuIGJlIHVzZWQgaW4gdHdvIGRpZmZlcmVudCBgbW9kZXMnLAorZWl0aGVyIGJ5IHJlYWRpbmcvd3JpdGluZyB0byB0aGUgZGV2aWNlIGZpbGUsIG9yIGJ5IGlzc3VpbmcKK2NvbnRyb2xsaW5nIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UsIGJ5IHRoZSBkZXZpY2UncyAkaW9jdGwoKSQKK2NhbGwuIFRoZSBwcm9ibGVtIHdpdGggXGNkcm9tXCBkcml2ZXMsIGlzIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBmb3IKK3R3byBlbnRpcmVseSBkaWZmZXJlbnQgcHVycG9zZXMuIE9uZSBpcyB0byBtb3VudCByZW1vdmFibGUKK2ZpbGUgc3lzdGVtcywgXGNkcm9tIHMsIHRoZSBvdGhlciBpcyB0byBwbGF5IGF1ZGlvIENEJ3MuIEF1ZGlvIGNvbW1hbmRzCithcmUgaW1wbGVtZW50ZWQgZW50aXJlbHkgdGhyb3VnaCAkaW9jdGwkcywgcHJlc3VtYWJseSBiZWNhdXNlIHRoZQorZmlyc3QgaW1wbGVtZW50YXRpb24gKFNVTj8pIGhhcyBiZWVuIHN1Y2guIEluIHByaW5jaXBsZSB0aGVyZSBpcworbm90aGluZyB3cm9uZyB3aXRoIHRoaXMsIGJ1dCBhIGdvb2QgY29udHJvbCBvZiB0aGUgYENEIHBsYXllcicgZGVtYW5kcwordGhhdCB0aGUgZGV2aWNlIGNhbiB7XGVtIGFsd2F5c1wvfSBiZSBvcGVuZWQgaW4gb3JkZXIgdG8gZ2l2ZSB0aGUKKyRpb2N0bCQgY29tbWFuZHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXRlIHRoZSBkcml2ZSBpcyBpbi4gCisKK09uIHRoZSBvdGhlciBoYW5kLCB3aGVuIHVzZWQgYXMgYSByZW1vdmFibGUtbWVkaWEgZGlzYyBkcml2ZSAod2hhdCB0aGUKK29yaWdpbmFsIHB1cnBvc2Ugb2YgXGNkcm9tIHMgaXMpIHdlIHdvdWxkIGxpa2UgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCitkaXNjIGRyaXZlIGlzIHJlYWR5IGZvciBvcGVyYXRpb24gdXBvbiBvcGVuaW5nIHRoZSBkZXZpY2UuIEluIHRoZSBvbGQKK3NjaGVtZSwgc29tZSBcY2Ryb21cIGRyaXZlcnMgZG9uJ3QgZG8gYW55IGludGVncml0eSBjaGVja2luZywgcmVzdWx0aW5nCitpbiBhIG51bWJlciBvZiBpL28gZXJyb3JzIHJlcG9ydGVkIGJ5IHRoZSBWRlMgdG8gdGhlIGtlcm5lbCB3aGVuIGFuCithdHRlbXB0IGZvciBtb3VudGluZyBhIFxjZHJvbVwgb24gYW4gZW1wdHkgZHJpdmUgb2NjdXJzLiBUaGlzIGlzIG5vdCBhCitwYXJ0aWN1bGFybHkgZWxlZ2FudCB3YXkgdG8gZmluZCBvdXQgdGhhdCB0aGVyZSBpcyBubyBcY2Ryb21cIGluc2VydGVkOworaXQgbW9yZS1vci1sZXNzIGxvb2tzIGxpa2UgdGhlIG9sZCBJQk0tUEMgdHJ5aW5nIHRvIHJlYWQgYW4gZW1wdHkgZmxvcHB5Citkcml2ZSBmb3IgYSBjb3VwbGUgb2Ygc2Vjb25kcywgYWZ0ZXIgd2hpY2ggdGhlIHN5c3RlbSBjb21wbGFpbnMgaXQKK2Nhbid0IHJlYWQgZnJvbSBpdC4gTm93YWRheXMgd2UgY2FuIHtcZW0gc2Vuc2VcL30gdGhlIGV4aXN0ZW5jZSBvZiBhCityZW1vdmFibGUgbWVkaXVtIGluIGEgZHJpdmUsIGFuZCB3ZSBiZWxpZXZlIHdlIHNob3VsZCBleHBsb2l0IHRoYXQKK2ZhY3QuIEFuIGludGVncml0eSBjaGVjayBvbiBvcGVuaW5nIG9mIHRoZSBkZXZpY2UsIHRoYXQgdmVyaWZpZXMgdGhlCithdmFpbGFiaWxpdHkgb2YgYSBcY2Ryb21cIGFuZCBpdHMgY29ycmVjdCB0eXBlIChkYXRhKSwgd291bGQgYmUKK2Rlc2lyYWJsZS4KKworVGhlc2UgdHdvIHdheXMgb2YgdXNpbmcgYSBcY2Ryb21cIGRyaXZlLCBwcmluY2lwYWxseSBmb3IgZGF0YSBhbmQKK3NlY29uZGFyaWx5IGZvciBwbGF5aW5nIGF1ZGlvIGRpc2NzLCBoYXZlIGRpZmZlcmVudCBkZW1hbmRzIGZvciB0aGUKK2JlaGF2aW9yIG9mIHRoZSAkb3BlbigpJCBjYWxsLiBBdWRpbyB1c2Ugc2ltcGx5IHdhbnRzIHRvIG9wZW4gdGhlCitkZXZpY2UgaW4gb3JkZXIgdG8gZ2V0IGEgZmlsZSBoYW5kbGUgd2hpY2ggaXMgbmVlZGVkIGZvciBpc3N1aW5nCiskaW9jdGwkIGNvbW1hbmRzLCB3aGlsZSBkYXRhIHVzZSB3YW50cyB0byBvcGVuIGZvciBjb3JyZWN0IGFuZAorcmVsaWFibGUgZGF0YSB0cmFuc2Zlci4gVGhlIG9ubHkgd2F5IHVzZXIgcHJvZ3JhbXMgY2FuIGluZGljYXRlIHdoYXQKK3RoZWlyIHtcZW0gcHVycG9zZVwvfSBvZiBvcGVuaW5nIHRoZSBkZXZpY2UgaXMsIGlzIHRocm91Z2ggdGhlICRmbGFncyQKK3BhcmFtZXRlciAoc2VlIHtcdHQge29wZW4oMil9fSkuIEZvciBcY2Ryb21cIGRldmljZXMsIHRoZXNlIGZsYWdzIGFyZW4ndAoraW1wbGVtZW50ZWQgKHNvbWUgZHJpdmVycyBpbXBsZW1lbnQgY2hlY2tpbmcgZm9yIHdyaXRlLXJlbGF0ZWQgZmxhZ3MsCitidXQgdGhpcyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGlmIHRoZSBkZXZpY2UgZmlsZSBoYXMgY29ycmVjdAorcGVybWlzc2lvbiBmbGFncykuIE1vc3Qgb3B0aW9uIGZsYWdzIHNpbXBseSBkb24ndCBtYWtlIHNlbnNlIHRvCitcY2Ryb21cIGRldmljZXM6ICRPX0NSRUFUJCwgJE9fTk9DVFRZJCwgJE9fVFJVTkMkLCAkT19BUFBFTkQkLCBhbmQKKyRPX1NZTkMkIGhhdmUgbm8gbWVhbmluZyB0byBhIFxjZHJvbS4gCisKK1dlIHRoZXJlZm9yZSBwcm9wb3NlIHRvIHVzZSB0aGUgZmxhZyAkT19OT05CTE9DSyQgdG8gaW5kaWNhdGUKK3RoYXQgdGhlIGRldmljZSBpcyBvcGVuZWQganVzdCBmb3IgaXNzdWluZyAkaW9jdGwkCitjb21tYW5kcy4gU3RyaWN0bHksIHRoZSBtZWFuaW5nIG9mICRPX05PTkJMT0NLJCBpcyB0aGF0IG9wZW5pbmcgYW5kCitzdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSBkZXZpY2UgZG9uJ3QgY2F1c2UgdGhlIGNhbGxpbmcgcHJvY2VzcyB0bword2FpdC4gV2UgY291bGQgaW50ZXJwcmV0IHRoaXMgYXMgYGBkb24ndCB3YWl0IHVudGlsIHNvbWVvbmUgaGFzCitpbnNlcnRlZCBzb21lIHZhbGlkIGRhdGEtXGNkcm9tLicnIFRodXMsIG91ciBwcm9wb3NhbCBvZiB0aGUKK2ltcGxlbWVudGF0aW9uIGZvciB0aGUgJG9wZW4oKSQgY2FsbCBmb3IgXGNkcm9tIHMgaXM6CitcYmVnaW57aXRlbWl6ZX0KK1xpdGVtIElmIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgdGhhbiAkT19SRE9OTFkkLCB0aGUgZGV2aWNlIGlzIG9wZW5lZAorZm9yIGRhdGEgdHJhbnNmZXIsIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgMCBvbmx5IHVwb24gc3VjY2Vzc2Z1bAoraW5pdGlhbGl6YXRpb24gb2YgdGhlIHRyYW5zZmVyLiBUaGUgY2FsbCBtYXkgZXZlbiBpbmR1Y2Ugc29tZSBhY3Rpb25zCitvbiB0aGUgXGNkcm9tLCBzdWNoIGFzIGNsb3NpbmcgdGhlIHRyYXkuICAKK1xpdGVtIElmIHRoZSBvcHRpb24gZmxhZyAkT19OT05CTE9DSyQgaXMgc2V0LCBvcGVuaW5nIHdpbGwgYWx3YXlzIGJlCitzdWNjZXNzZnVsLCB1bmxlc3MgdGhlIHdob2xlIGRldmljZSBkb2Vzbid0IGV4aXN0LiBUaGUgZHJpdmUgd2lsbCB0YWtlCitubyBhY3Rpb25zIHdoYXRzb2V2ZXIuIAorXGVuZHtpdGVtaXplfQorCitcc3Vic2VjdGlvbntBbmQgd2hhdCBhYm91dCBzdGFuZGFyZHM/fQorCitZb3UgbWlnaHQgaGVzaXRhdGUgdG8gYWNjZXB0IHRoaXMgcHJvcG9zYWwgYXMgaXQgY29tZXMgZnJvbSB0aGUKK1xsaW51eFwgY29tbXVuaXR5LCBhbmQgbm90IGZyb20gc29tZSBzdGFuZGFyZGl6aW5nIGluc3RpdHV0ZS4gV2hhdAorYWJvdXQgU1VOLCBTR0ksIEhQIGFuZCBhbGwgdGhvc2Ugb3RoZXIgVW5peCBhbmQgaGFyZHdhcmUgdmVuZG9ycz8KK1dlbGwsIHRoZXNlIGNvbXBhbmllcyBhcmUgaW4gdGhlIGx1Y2t5IHBvc2l0aW9uIHRoYXQgdGhleSBnZW5lcmFsbHkKK2NvbnRyb2wgYm90aCB0aGUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIG9mIHRoZWlyIHN1cHBvcnRlZCBwcm9kdWN0cywKK2FuZCBhcmUgbGFyZ2UgZW5vdWdoIHRvIHNldCB0aGVpciBvd24gc3RhbmRhcmQuIFRoZXkgZG8gbm90IGhhdmUgdG8KK2RlYWwgd2l0aCBhIGRvemVuIG9yIG1vcmUgZGlmZmVyZW50LCBjb21wZXRpbmcgaGFyZHdhcmUKK2NvbmZpZ3VyYXRpb25zLlxmb290bm90ZXtJbmNpZGVudGFsbHksIEkgdGhpbmsgdGhhdCBTVU4ncyBhcHByb2FjaCB0bworbW91bnRpbmcgXGNkcm9tIHMgaXMgdmVyeSBnb29kIGluIG9yaWdpbjogdW5kZXIgU29sYXJpcyBhCit2b2x1bWUtZGFlbW9uIGF1dG9tYXRpY2FsbHkgbW91bnRzIGEgbmV3bHkgaW5zZXJ0ZWQgXGNkcm9tXCB1bmRlciB7XHR0Cit7L2Nkcm9tLyQ8dm9sdW1lLW5hbWU+JC99fS4gSW4gbXkgb3BpbmlvbiB0aGV5IHNob3VsZCBoYXZlIHB1c2hlZCB0aGlzCitmdXJ0aGVyIGFuZCBoYXZlIHtcZW0gZXZlcnlcL30gXGNkcm9tXCBvbiB0aGUgbG9jYWwgYXJlYSBuZXR3b3JrIGJlCittb3VudGVkIGF0IHRoZSBzaW1pbGFyIGxvY2F0aW9uLCBcaWUsIG5vIG1hdHRlciBpbiB3aGljaCBwYXJ0aWN1bGFyCittYWNoaW5lIHlvdSBpbnNlcnQgYSBcY2Ryb20sIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhdCB0aGUgc2FtZQorcG9zaXRpb24gaW4gdGhlIGRpcmVjdG9yeSB0cmVlLCBvbiBldmVyeSBzeXN0ZW0uIFdoZW4gSSB3YW50ZWQgdG8KK2ltcGxlbWVudCBzdWNoIGEgdXNlci1wcm9ncmFtIGZvciBcbGludXgsIEkgY2FtZSBhY3Jvc3MgdGhlCitkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBvZiB0aGUgdmFyaW91cyBkcml2ZXJzLCBhbmQgdGhlIG5lZWQgZm9yIGFuCiskaW9jdGwkIGluZm9ybWluZyBhYm91dCBtZWRpYSBjaGFuZ2VzLn0KKworV2UgYmVsaWV2ZSB0aGF0IHVzaW5nICRPX05PTkJMT0NLJCB0byBpbmRpY2F0ZSB0aGF0IGEgZGV2aWNlIGlzIGJlaW5nIG9wZW5lZAorZm9yICRpb2N0bCQgY29tbWFuZHMgb25seSBjYW4gYmUgZWFzaWx5IGludHJvZHVjZWQgaW4gdGhlIFxsaW51eFwKK2NvbW11bml0eS4gQWxsIHRoZSBDRC1wbGF5ZXIgYXV0aG9ycyB3aWxsIGhhdmUgdG8gYmUgaW5mb3JtZWQsIHdlIGNhbgorZXZlbiBzZW5kIGluIG91ciBvd24gcGF0Y2hlcyB0byB0aGUgcHJvZ3JhbXMuIFRoZSB1c2Ugb2YgJE9fTk9OQkxPQ0skCitoYXMgbW9zdCBsaWtlbHkgbm8gaW5mbHVlbmNlIG9uIHRoZSBiZWhhdmlvciBvZiB0aGUgQ0QtcGxheWVycyBvbgorb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgdGhhbiBcbGludXguIEZpbmFsbHksIGEgdXNlciBjYW4gYWx3YXlzIHJldmVydAordG8gb2xkIGJlaGF2aW9yIGJ5IGEgY2FsbCB0byAkaW9jdGwoZmlsZV9kZXNjcmlwdG9yLCBDRFJPTV9DTEVBUl9PUFRJT05TLAorQ0RPX1VTRV9GRkxBR1MpJC4gCisKK1xzdWJzZWN0aW9ue1RoZSBwcmVmZXJyZWQgc3RyYXRlZ3kgb2YgJG9wZW4oKSR9CisKK1RoZSByb3V0aW5lcyBpbiBcY2Ryb21jXCBhcmUgZGVzaWduZWQgaW4gc3VjaCBhIHdheSB0aGF0IHJ1bi10aW1lCitjb25maWd1cmF0aW9uIG9mIHRoZSBiZWhhdmlvciBvZiBcY2Ryb21cIGRldmljZXMgKG9mIHtcZW0gYW55XC99IHR5cGUpCitjYW4gYmUgY2FycmllZCBvdXQsIGJ5IHRoZSAkQ0RST01fU0VUL0NMRUFSX09QVElPTlMkICRpb2N0bHMkLiBUaHVzLCB2YXJpb3VzCittb2RlcyBvZiBvcGVyYXRpb24gY2FuIGJlIHNldDoKK1xiZWdpbntkZXNjcmlwdGlvbn0KK1xpdGVtWyRDRE9fQVVUT19DTE9TRSBcbWF0aHJlbHwgQ0RPX1VTRV9GRkxBR1MgXG1hdGhyZWx8IENET19MT0NLJF0gVGhpcworaXMgdGhlIGRlZmF1bHQgc2V0dGluZy4gKFdpdGggJENET19DSEVDS19UWVBFJCBpdCB3aWxsIGJlIGJldHRlciwgaW4gdGhlCitmdXR1cmUuKSBJZiB0aGUgZGV2aWNlIGlzIG5vdCB5ZXQgb3BlbmVkIGJ5IGFueSBvdGhlciBwcm9jZXNzLCBhbmQgaWYKK3RoZSBkZXZpY2UgaXMgYmVpbmcgb3BlbmVkIGZvciBkYXRhICgkT19OT05CTE9DSyQgaXMgbm90IHNldCkgYW5kIHRoZQordHJheSBpcyBmb3VuZCB0byBiZSBvcGVuLCBhbiBhdHRlbXB0IHRvIGNsb3NlIHRoZSB0cmF5IGlzIG1hZGUuIFRoZW4sCitpdCBpcyB2ZXJpZmllZCB0aGF0IGEgZGlzYyBpcyBpbiB0aGUgZHJpdmUgYW5kLCBpZiAkQ0RPX0NIRUNLX1RZUEUkIGlzCitzZXQsIHRoYXQgaXQgY29udGFpbnMgdHJhY2tzIG9mIHR5cGUgYGRhdGEgbW9kZSAxLicgT25seSBpZiBhbGwgdGVzdHMKK2FyZSBwYXNzZWQgaXMgdGhlIHJldHVybiB2YWx1ZSB6ZXJvLiBUaGUgZG9vciBpcyBsb2NrZWQgdG8gcHJldmVudCBmaWxlCitzeXN0ZW0gY29ycnVwdGlvbi4gSWYgdGhlIGRyaXZlIGlzIG9wZW5lZCBmb3IgYXVkaW8gKCRPX05PTkJMT0NLJCBpcworc2V0KSwgbm8gYWN0aW9ucyBhcmUgdGFrZW4gYW5kIGEgdmFsdWUgb2YgMCB3aWxsIGJlIHJldHVybmVkLiAKK1xpdGVtWyRDRE9fQVVUT19DTE9TRSBcbWF0aHJlbHwgQ0RPX0FVVE9fRUpFQ1QgXG1hdGhyZWx8IENET19MT0NLJF0gVGhpcworbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgY3VycmVudCBzYnBjZC1kcml2ZXIuIFRoZSBvcHRpb24gZmxhZ3MgYXJlCitpZ25vcmVkLCB0aGUgdHJheSBpcyBjbG9zZWQgb24gdGhlIGZpcnN0IG9wZW4sIGlmIG5lY2Vzc2FyeS4gU2ltaWxhcmx5LAordGhlIHRyYXkgaXMgb3BlbmVkIG9uIHRoZSBsYXN0IHJlbGVhc2UsIFxpZSwgaWYgYSBcY2Ryb21cIGlzIHVubW91bnRlZCwKK2l0IGlzIGF1dG9tYXRpY2FsbHkgZWplY3RlZCwgc3VjaCB0aGF0IHRoZSB1c2VyIGNhbiByZXBsYWNlIGl0LgorXGVuZHtkZXNjcmlwdGlvbn0gCitXZSBob3BlIHRoYXQgdGhlc2Ugb3B0aW9uIGNhbiBjb252aW5jZSBldmVyeWJvZHkgKGJvdGggZHJpdmVyCittYWludGFpbmVycyBhbmQgdXNlciBwcm9ncmFtIGRldmVsb3BlcnMpIHRvIGFkb3B0IHRoZSBuZXcgXGNkcm9tXAorZHJpdmVyIHNjaGVtZSBhbmQgb3B0aW9uIGZsYWcgaW50ZXJwcmV0YXRpb24uCisKK1xuZXdzZWN0aW9ue0Rlc2NyaXB0aW9uIG9mIHJvdXRpbmVzIGluIFxjZHJvbWN9CisKK09ubHkgYSBmZXcgcm91dGluZXMgaW4gXGNkcm9tY1wgYXJlIGV4cG9ydGVkIHRvIHRoZSBkcml2ZXJzLiBJbiB0aGlzCituZXcgc2VjdGlvbiB3ZSB3aWxsIGRpc2N1c3MgdGhlc2UsIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9ucyB0aGF0IGB0YWtlCitvdmVyJyB0aGUgXGNkcm9tXCBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbC4gVGhlIGhlYWRlciBmaWxlIGJlbG9uZ2luZwordG8gXGNkcm9tY1wgaXMgY2FsbGVkIFxjZHJvbWguIEZvcm1lcmx5LCBzb21lIG9mIHRoZSBjb250ZW50cyBvZiB0aGlzCitmaWxlIHdlcmUgcGxhY2VkIGluIHRoZSBmaWxlIHtcdHQge3VjZHJvbS5ofX0sIGJ1dCB0aGlzIGZpbGUgaGFzIG5vdyBiZWVuCittZXJnZWQgYmFjayBpbnRvIFxjZHJvbWguCisKK1xzdWJzZWN0aW9ueyRTdHJ1Y3RcIGZpbGVfb3BlcmF0aW9uc1wgY2Ryb21fZm9wcyR9CisKK1RoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSB3ZXJlIGRlc2NyaWJlZCBpbiBzZWN0aW9uflxyZWZ7Y2Ryb20uY30uCitBIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgaXMgYXNzaWduZWQgdG8gdGhlICRmb3BzJCBmaWVsZAorb2YgdGhlICRzdHJ1Y3QgZ2VuZGlzayQuCisKK1xzdWJzZWN0aW9ueyRJbnRcIHJlZ2lzdGVyX2Nkcm9tKCBzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvXCAqIGNkaSkkfQorCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gYWJvdXQgdGhlIHNhbWUgd2F5IG9uZSByZWdpc3RlcnMgJGNkcm9tX2ZvcHMkCit3aXRoIHRoZSBrZXJuZWwsIHRoZSBkZXZpY2Ugb3BlcmF0aW9ucyBhbmQgaW5mb3JtYXRpb24gc3RydWN0dXJlcywKK2FzIGRlc2NyaWJlZCBpbiBzZWN0aW9uflxyZWZ7Y2Ryb20uY30sIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggdGhlCitcVUNEOgorJCQKK3JlZ2lzdGVyX2Nkcm9tKFwmPGRldmljZT5faW5mbykpOworJCQKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHVwb24gc3VjY2VzcywgYW5kIG5vbi16ZXJvIHVwb24KK2ZhaWx1cmUuIFRoZSBzdHJ1Y3R1cmUgJDxkZXZpY2U+X2luZm8kIHNob3VsZCBoYXZlIGEgcG9pbnRlciB0byB0aGUKK2RyaXZlcidzICQ8ZGV2aWNlPl9kb3BzJCwgYXMgaW4gCiskJAorXHZib3h7XGhhbGlnbnsmJCMkXGhmaWxcY3IKK3N0cnVjdFwgJmNkcm9tX2RldmljZV9pbmZvXCA8ZGV2aWNlPl9pbmZvID0gXHtcY3IKKyYgPGRldmljZT5fZG9wcztcY3IKKyZcbGRvdHNcY3IKK1x9XGNyCit9fSQkCitOb3RlIHRoYXQgYSBkcml2ZXIgbXVzdCBoYXZlIG9uZSBzdGF0aWMgc3RydWN0dXJlLCAkPGRldmljZT5fZG9wcyQsIHdoaWxlCitpdCBtYXkgaGF2ZSBhcyBtYW55IHN0cnVjdHVyZXMgJDxkZXZpY2U+X2luZm8kIGFzIHRoZXJlIGFyZSBtaW5vciBkZXZpY2VzCithY3RpdmUuICRSZWdpc3Rlcl9jZHJvbSgpJCBidWlsZHMgYSBsaW5rZWQgbGlzdCBmcm9tIHRoZXNlLiAKKworXHN1YnNlY3Rpb257JEludFwgdW5yZWdpc3Rlcl9jZHJvbShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpKSR9CisKK1VucmVnaXN0ZXJpbmcgZGV2aWNlICRjZGkkIHdpdGggbWlub3IgbnVtYmVyICRNSU5PUihjZGlcdG8gZGV2KSQgcmVtb3ZlcwordGhlIG1pbm9yIGRldmljZSBmcm9tIHRoZSBsaXN0LiBJZiBpdCB3YXMgdGhlIGxhc3QgcmVnaXN0ZXJlZCBtaW5vciBmb3IKK3RoZSBsb3ctbGV2ZWwgZHJpdmVyLCB0aGlzIGRpc2Nvbm5lY3RzIHRoZSByZWdpc3RlcmVkIGRldmljZS1vcGVyYXRpb24KK3JvdXRpbmVzIGZyb20gdGhlIFxjZHJvbVwgaW50ZXJmYWNlLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyB1cG9uCitzdWNjZXNzLCBhbmQgbm9uLXplcm8gdXBvbiBmYWlsdXJlLgorCitcc3Vic2VjdGlvbnskSW50XCBjZHJvbV9vcGVuKHN0cnVjdFwgaW5vZGUgKiBpcCwgc3RydWN0XCBmaWxlICogZnApJH0KKworVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZSBsb3ctbGV2ZWwgZHJpdmVycywgaXQgaXMKK2xpc3RlZCBpbiB0aGUgc3RhbmRhcmQgJGNkcm9tX2ZvcHMkLiBJZiB0aGUgVkZTIG9wZW5zIGEgZmlsZSwgdGhpcworZnVuY3Rpb24gYmVjb21lcyBhY3RpdmUuIEEgc3RyYXRlZ3kgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyByb3V0aW5lLAordGFraW5nIGNhcmUgb2YgYWxsIGNhcGFiaWxpdGllcyBhbmQgb3B0aW9ucyB0aGF0IGFyZSBzZXQgaW4gdGhlCiskY2Ryb21fZGV2aWNlX29wcyQgY29ubmVjdGVkIHRvIHRoZSBkZXZpY2UuIFRoZW4sIHRoZSBwcm9ncmFtIGZsb3cgaXMKK3RyYW5zZmVycmVkIHRvIHRoZSBkZXZpY2VfZGVwZW5kZW50ICRvcGVuKCkkIGNhbGwuCisKK1xzdWJzZWN0aW9ueyRWb2lkXCBjZHJvbV9yZWxlYXNlKHN0cnVjdFwgaW5vZGUgKmlwLCBzdHJ1Y3RcIGZpbGUKKypmcCkkfQorCitUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJldmVyc2UtbG9naWMgb2YgJGNkcm9tX29wZW4oKSQsIGFuZCB0aGVuCitjYWxscyB0aGUgZGV2aWNlLWRlcGVuZGVudCAkcmVsZWFzZSgpJCByb3V0aW5lLiBXaGVuIHRoZSB1c2UtY291bnQgaGFzCityZWFjaGVkIDAsIHRoZSBhbGxvY2F0ZWQgYnVmZmVycyBhcmUgZmx1c2hlZCBieSBjYWxscyB0byAkc3luY19kZXYoZGV2KSQKK2FuZCAkaW52YWxpZGF0ZV9idWZmZXJzKGRldikkLgorCisKK1xzdWJzZWN0aW9ueyRJbnRcIGNkcm9tX2lvY3RsKHN0cnVjdFwgaW5vZGUgKmlwLCBzdHJ1Y3RcIGZpbGUgKmZwLAordW5zaWduZWRcIGludFwgY21kLCB1bnNpZ25lZFwgbG9uZ1wgYXJnKSR9CitcbGFiZWx7Y2Ryb20taW9jdGx9CisKK1RoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlIHN0YW5kYXJkICRpb2N0bCQgcmVxdWVzdHMgZm9yIFxjZHJvbVwKK2RldmljZXMgaW4gYSB1bmlmb3JtIHdheS4gVGhlIGRpZmZlcmVudCBjYWxscyBmYWxsIGludG8gdGhyZWUKK2NhdGVnb3JpZXM6ICRpb2N0bCRzIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGltcGxlbWVudGVkIGJ5IGRldmljZQorb3BlcmF0aW9ucywgb25lcyB0aGF0IGFyZSByb3V0ZWQgdGhyb3VnaCB0aGUgY2FsbCAkYXVkaW9faW9jdGwoKSQsIGFuZAordGhlIHJlbWFpbmluZyBvbmVzLCB0aGF0IGFyZSBwcmVzdW1hYmxlIGRldmljZS1kZXBlbmRlbnQuIEdlbmVyYWxseSwgYQorbmVnYXRpdmUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KKworXHN1YnN1YnNlY3Rpb257RGlyZWN0bHkgaW1wbGVtZW50ZWQgJGlvY3RsJHN9CitcbGFiZWx7aW9jdGwtZGlyZWN0fQorCitUaGUgZm9sbG93aW5nIGBvbGQnIFxjZHJvbS0kaW9jdGwkcyBhcmUgaW1wbGVtZW50ZWQgYnkgZGlyZWN0bHkKK2NhbGxpbmcgZGV2aWNlLW9wZXJhdGlvbnMgaW4gJGNkcm9tX2RldmljZV9vcHMkLCBpZiBpbXBsZW1lbnRlZCBhbmQKK25vdCBtYXNrZWQ6CitcYmVnaW57ZGVzY3JpcHRpb259CitcaXRlbVtDRFJPTU1VTFRJU0VTU0lPTl0gUmVxdWVzdHMgdGhlIGxhc3Qgc2Vzc2lvbiBvbiBhIFxjZHJvbS4KK1xpdGVtW0NEUk9NRUpFQ1RdIE9wZW4gdHJheS4gCitcaXRlbVtDRFJPTUNMT1NFVFJBWV0gQ2xvc2UgdHJheS4KK1xpdGVtW0NEUk9NRUpFQ1RfU1ddIElmICRhcmdcbm90PTAkLCBzZXQgYmVoYXZpb3IgdG8gYXV0by1jbG9zZSAoY2xvc2UKK3RyYXkgb24gZmlyc3Qgb3BlbikgYW5kIGF1dG8tZWplY3QgKGVqZWN0IG9uIGxhc3QgcmVsZWFzZSksIG90aGVyd2lzZQorc2V0IGJlaGF2aW9yIHRvIG5vbi1tb3Zpbmcgb24gJG9wZW4oKSQgYW5kICRyZWxlYXNlKCkkIGNhbGxzLgorXGl0ZW1bQ0RST01fR0VUX01DTl0gR2V0IHRoZSBNZWRpYSBDYXRhbG9nIE51bWJlciBmcm9tIGEgQ0QuCitcZW5ke2Rlc2NyaXB0aW9ufQorCitcc3Vic3Vic2VjdGlvbnskSW9jdGwkcyByb3V0ZWQgdGhyb3VnaCAkYXVkaW9faW9jdGwoKSR9CitcbGFiZWx7aW9jdGwtYXVkaW99CisKK1RoZSBmb2xsb3dpbmcgc2V0IG9mICRpb2N0bCRzIGFyZSBhbGwgaW1wbGVtZW50ZWQgdGhyb3VnaCBhIGNhbGwgdG8KK3RoZSAkY2Ryb21fZm9wcyQgZnVuY3Rpb24gJGF1ZGlvX2lvY3RsKCkkLiBNZW1vcnkgY2hlY2tzIGFuZAorYWxsb2NhdGlvbiBhcmUgcGVyZm9ybWVkIGluICRjZHJvbV9pb2N0bCgpJCwgYW5kIGFsc28gc2FuaXRpemF0aW9uIG9mCithZGRyZXNzIGZvcm1hdCAoJENEUk9NX0xCQSQvJENEUk9NX01TRiQpIGlzIGRvbmUuCitcYmVnaW57ZGVzY3JpcHRpb259CitcaXRlbVtDRFJPTVNVQkNITkxdIEdldCBzdWItY2hhbm5lbCBkYXRhIGluIGFyZ3VtZW50ICRhcmckIG9mIHR5cGUgJHN0cnVjdFwKK2Nkcm9tX3N1YmNobmwgKnt9JC4KK1xpdGVtW0NEUk9NUkVBRFRPQ0hEUl0gUmVhZCBUYWJsZSBvZiBDb250ZW50cyBoZWFkZXIsIGluICRhcmckIG9mIHR5cGUKKyRzdHJ1Y3RcIGNkcm9tX3RvY2hkciAqe30kLiAKK1xpdGVtW0NEUk9NUkVBRFRPQ0VOVFJZXSBSZWFkIGEgVGFibGUgb2YgQ29udGVudHMgZW50cnkgaW4gJGFyZyQgYW5kCitzcGVjaWZpZWQgYnkgJGFyZyQgb2YgdHlwZSAkc3RydWN0XCBjZHJvbV90b2NlbnRyeSAqe30kLgorXGl0ZW1bQ0RST01QTEFZTVNGXSBQbGF5IGF1ZGlvIGZyYWdtZW50IHNwZWNpZmllZCBpbiBNaW51dGUsIFNlY29uZCwKK0ZyYW1lIGZvcm1hdCwgZGVsaW1pdGVkIGJ5ICRhcmckIG9mIHR5cGUgJHN0cnVjdFwgY2Ryb21fbXNmICp7fSQuCitcaXRlbVtDRFJPTVBMQVlUUktJTkRdIFBsYXkgYXVkaW8gZnJhZ21lbnQgaW4gdHJhY2staW5kZXggZm9ybWF0CitkZWxpbWl0ZWQgYnkgJGFyZyQgb2YgdHlwZSAkc3RydWN0XCBccGVuYWx0eS0xMDAwIGNkcm9tX3RpICp7fSQuCitcaXRlbVtDRFJPTVZPTENUUkxdIFNldCB2b2x1bWUgc3BlY2lmaWVkIGJ5ICRhcmckIG9mIHR5cGUgJHN0cnVjdFwKK2Nkcm9tX3ZvbGN0cmwgKnt9JC4KK1xpdGVtW0NEUk9NVk9MUkVBRF0gUmVhZCB2b2x1bWUgaW50byBieSAkYXJnJCBvZiB0eXBlICRzdHJ1Y3RcCitjZHJvbV92b2xjdHJsICp7fSQuCitcaXRlbVtDRFJPTVNUQVJUXSBTcGluIHVwIGRpc2MuCitcaXRlbVtDRFJPTVNUT1BdIFN0b3AgcGxheWJhY2sgb2YgYXVkaW8gZnJhZ21lbnQuCitcaXRlbVtDRFJPTVBBVVNFXSBQYXVzZSBwbGF5YmFjayBvZiBhdWRpbyBmcmFnbWVudC4KK1xpdGVtW0NEUk9NUkVTVU1FXSBSZXN1bWUgcGxheWluZy4KK1xlbmR7ZGVzY3JpcHRpb259CisKK1xzdWJzdWJzZWN0aW9ue05ldyAkaW9jdGwkcyBpbiBcY2Ryb21jfQorCitUaGUgZm9sbG93aW5nICRpb2N0bCRzIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHRvIGFsbG93IHVzZXIgcHJvZ3JhbXMgdG8KK2NvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIGluZGl2aWR1YWwgXGNkcm9tXCBkZXZpY2VzLiBOZXcgJGlvY3RsJAorY29tbWFuZHMgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIHVuZGVyc2NvcmVzIGluIHRoZWlyIG5hbWVzLgorXGJlZ2lue2Rlc2NyaXB0aW9ufQorXGl0ZW1bQ0RST01fU0VUX09QVElPTlNdIFNldCBvcHRpb25zIHNwZWNpZmllZCBieSAkYXJnJC4gUmV0dXJucyB0aGUKK29wdGlvbiBmbGFnIHJlZ2lzdGVyIGFmdGVyIG1vZGlmaWNhdGlvbi4gVXNlICAkYXJnID0gXHJtMCQgZm9yIHJlYWRpbmcKK3RoZSBjdXJyZW50IGZsYWdzLgorXGl0ZW1bQ0RST01fQ0xFQVJfT1BUSU9OU10gQ2xlYXIgb3B0aW9ucyBzcGVjaWZpZWQgYnkgJGFyZyQuIFJldHVybnMKKyAgdGhlIG9wdGlvbiBmbGFnIHJlZ2lzdGVyIGFmdGVyIG1vZGlmaWNhdGlvbi4KK1xpdGVtW0NEUk9NX1NFTEVDVF9TUEVFRF0gU2VsZWN0IGhlYWQtcmF0ZSBzcGVlZCBvZiBkaXNjIHNwZWNpZmllZCBhcworICBieSAkYXJnJCBpbiB1bml0cyBvZiBzdGFuZGFyZCBjZHJvbSBzcGVlZCAoMTc2XCxrQi9zZWMgcmF3IGRhdGEgb3IKKyAgMTUwXCxrQi9zZWMgZmlsZSBzeXN0ZW0gZGF0YSkuIFRoZSB2YWx1ZSAwIG1lYW5zIGBhdXRvLXNlbGVjdCcsIFxpZSwKKyAgcGxheSBhdWRpbyBkaXNjcyBhdCByZWFsIHRpbWUgYW5kIGRhdGEgZGlzY3MgYXQgbWF4aW11bSBzcGVlZC4gVGhlIHZhbHVlCisgICRhcmckIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgbWF4aW11bSBoZWFkIHJhdGUgb2YgdGhlIGRyaXZlIGZvdW5kIGluIHRoZQorICAkY2Ryb21fZG9wcyQuCitcaXRlbVtDRFJPTV9TRUxFQ1RfRElTQ10gU2VsZWN0IGRpc2MgbnVtYmVyZWQgJGFyZyQgZnJvbSBhIGp1a2UtYm94LgorICBGaXJzdCBkaXNjIGlzIG51bWJlcmVkIDAuIFRoZSBudW1iZXIgJGFyZyQgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZQorICBtYXhpbXVtIG51bWJlciBvZiBkaXNjcyBpbiB0aGUganVrZS1ib3ggZm91bmQgaW4gdGhlICRjZHJvbV9kb3BzJC4KK1xpdGVtW0NEUk9NX01FRElBX0NIQU5HRURdIFJldHVybnMgMSBpZiBhIGRpc2MgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZQorICB0aGUgbGFzdCBjYWxsLiBOb3RlIHRoYXQgY2FsbHMgdG8gJGNkcm9tX21lZGlhX2NoYW5nZWQkIGJ5IHRoZSBWRlMKKyAgYXJlIHRyZWF0ZWQgYnkgYW4gaW5kZXBlbmRlbnQgcXVldWUsIHNvIGJvdGggbWVjaGFuaXNtcyB3aWxsIGRldGVjdAorICBhIG1lZGlhIGNoYW5nZSBvbmNlLiBGb3IganVrZS1ib3hlcywgYW4gZXh0cmEgYXJndW1lbnQgJGFyZyQKKyAgc3BlY2lmaWVzIHRoZSBzbG90IGZvciB3aGljaCB0aGUgaW5mb3JtYXRpb24gaXMgZ2l2ZW4uIFRoZSBzcGVjaWFsCisgIHZhbHVlICRDRFNMX0NVUlJFTlQkIHJlcXVlc3RzIHRoYXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnRseQorICBzZWxlY3RlZCBzbG90IGJlIHJldHVybmVkLgorXGl0ZW1bQ0RST01fRFJJVkVfU1RBVFVTXSBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGRyaXZlIGJ5IGEgY2FsbCB0bworICAkZHJpdmVfc3RhdHVzKCkkLiBSZXR1cm4gdmFsdWVzIGFyZSBkZWZpbmVkIGluIHNlY3Rpb25+XHJlZntkcml2ZQorICAgc3RhdHVzfS4gTm90ZSB0aGF0IHRoaXMgY2FsbCBkb2Vzbid0IHJldHVybiBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgY3VycmVudCBwbGF5aW5nIGFjdGl2aXR5IG9mIHRoZSBkcml2ZTsgdGhpcyBjYW4gYmUgcG9sbGVkIHRocm91Z2ggYW4KKyAgJGlvY3RsJCBjYWxsIHRvICRDRFJPTVNVQkNITkwkLiBGb3IganVrZS1ib3hlcywgYW4gZXh0cmEgYXJndW1lbnQKKyAgJGFyZyQgc3BlY2lmaWVzIHRoZSBzbG90IGZvciB3aGljaCAocG9zc2libHkgbGltaXRlZCkgaW5mb3JtYXRpb24gaXMKKyAgZ2l2ZW4uIFRoZSBzcGVjaWFsIHZhbHVlICRDRFNMX0NVUlJFTlQkIHJlcXVlc3RzIHRoYXQgaW5mb3JtYXRpb24KKyAgYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzbG90IGJlIHJldHVybmVkLgorXGl0ZW1bQ0RST01fRElTQ19TVEFUVVNdIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGRpc2MgY3VycmVudGx5IGluIHRoZQorICBkcml2ZS4gIEl0IHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBjb21wbGVtZW50IHRvICRDRFJPTV9EUklWRV9TVEFUVVMkLgorICBUaGlzICRpb2N0bCQgY2FuIHByb3ZpZGUgXGVtcGgge3NvbWV9IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50CisgIGRpc2MgdGhhdCBpcyBpbnNlcnRlZCBpbiB0aGUgZHJpdmUuICBUaGlzIGZ1bmN0aW9uYWxpdHkgdXNlZCB0byBiZQorICBpbXBsZW1lbnRlZCBpbiB0aGUgbG93IGxldmVsIGRyaXZlcnMsIGJ1dCBpcyBub3cgY2FycmllZCBvdXQKKyAgZW50aXJlbHkgaW4gXFVDRC4KKyAgCisgIFRoZSBoaXN0b3J5IG9mIGRldmVsb3BtZW50IG9mIHRoZSBDRCdzIHVzZSBhcyBhIGNhcnJpZXIgbWVkaXVtIGZvcgorICB2YXJpb3VzIGRpZ2l0YWwgaW5mb3JtYXRpb24gaGFzIGxlYWQgdG8gbWFueSBkaWZmZXJlbnQgZGlzYyB0eXBlcy4KKyAgVGhpcyAkaW9jdGwkIGlzIHVzZWZ1bCBvbmx5IGluIHRoZSBjYXNlIHRoYXQgQ0RzIGhhdmUgXGVtcGgge29ubHkKKyAgICBvbmV9IHR5cGUgb2YgZGF0YSBvbiB0aGVtLiAgV2hpbGUgdGhpcyBpcyBvZnRlbiB0aGUgY2FzZSwgaXQgaXMKKyAgYWxzbyB2ZXJ5IGNvbW1vbiBmb3IgQ0RzIHRvIGhhdmUgc29tZSB0cmFja3Mgd2l0aCBkYXRhLCBhbmQgc29tZQorICB0cmFja3Mgd2l0aCBhdWRpby4gIEJlY2F1c2UgdGhpcyBpcyBhbiBleGlzdGluZyBpbnRlcmZhY2UsIHJhdGhlcgorICB0aGFuIGZpeGluZyB0aGlzIGludGVyZmFjZSBieSBjaGFuZ2luZyB0aGUgYXNzdW1wdGlvbnMgaXQgd2FzIG1hZGUKKyAgdW5kZXIsIHRoZXJlYnkgYnJlYWtpbmcgYWxsIHVzZXIgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoaXMKKyAgZnVuY3Rpb24sIHRoZSBcVUNEXCBpbXBsZW1lbnRzIHRoaXMgJGlvY3RsJCBhcyBmb2xsb3dzOiBJZiB0aGUgQ0QgaW4KKyAgcXVlc3Rpb24gaGFzIGF1ZGlvIHRyYWNrcyBvbiBpdCwgYW5kIGl0IGhhcyBhYnNvbHV0ZWx5IG5vIENELUksIFhBLAorICBvciBkYXRhIHRyYWNrcyBvbiBpdCwgaXQgd2lsbCBiZSByZXBvcnRlZCBhcyAkQ0RTX0FVRElPJC4gIElmIGl0IGhhcworICBib3RoIGF1ZGlvIGFuZCBkYXRhIHRyYWNrcywgaXQgd2lsbCByZXR1cm4gJENEU19NSVhFRCQuICBJZiB0aGVyZQorICBhcmUgbm8gYXVkaW8gdHJhY2tzIG9uIHRoZSBkaXNjLCBhbmQgaWYgdGhlIENEIGluIHF1ZXN0aW9uIGhhcyBhbnkKKyAgQ0QtSSB0cmFja3Mgb24gaXQsIGl0IHdpbGwgYmUgcmVwb3J0ZWQgYXMgJENEU19YQV8yXzIkLiAgRmFpbGluZworICB0aGF0LCBpZiB0aGUgQ0QgaW4gcXVlc3Rpb24gaGFzIGFueSBYQSB0cmFja3Mgb24gaXQsIGl0IHdpbGwgYmUKKyAgcmVwb3J0ZWQgYXMgJENEU19YQV8yXzEkLiAgRmluYWxseSwgaWYgdGhlIENEIGluIHF1ZXN0aW9uIGhhcyBhbnkKKyAgZGF0YSB0cmFja3Mgb24gaXQsIGl0IHdpbGwgYmUgcmVwb3J0ZWQgYXMgYSBkYXRhIENEICgkQ0RTX0RBVEFfMSQpLgorCisgIFRoaXMgJGlvY3RsJCBjYW4gcmV0dXJuOgorICAkJAorICBcaGFsaWdueyQjJFwgXGhmaWwmJC8qJCBccm0jICQqLyRcaGZpbFxjcgorICAgIENEU19OT19JTkZPJiBubyBpbmZvcm1hdGlvbiBhdmFpbGFibGVcY3IKKyAgICBDRFNfTk9fRElTQyYgbm8gZGlzYyBpcyBpbnNlcnRlZCwgb3IgdHJheSBpcyBvcGVuZWRcY3IKKyAgICBDRFNfQVVESU8mIEF1ZGlvIGRpc2MgKDIzNTIgYXVkaW8gYnl0ZXMvZnJhbWUpXGNyCisgICAgQ0RTX0RBVEFfMSYgZGF0YSBkaXNjLCBtb2RlIDEgKDIwNDggdXNlciBieXRlcy9mcmFtZSlcY3IKKyAgICBDRFNfWEFfMl8xJiBtaXhlZCBkYXRhIChYQSksIG1vZGUgMiwgZm9ybSAxICgyMDQ4IHVzZXIgYnl0ZXMpXGNyCisgICAgQ0RTX1hBXzJfMiYgbWl4ZWQgZGF0YSAoWEEpLCBtb2RlIDIsIGZvcm0gMSAoMjMyNCAgdXNlciBieXRlcylcY3IKKyAgICBDRFNfTUlYRUQmIG1peGVkIGF1ZGlvL2RhdGEgZGlzY1xjcgorICAgIH0KKyAgJCQKKyAgRm9yIHNvbWUgaW5mb3JtYXRpb24gY29uY2VybmluZyBmcmFtZSBsYXlvdXQgb2YgdGhlIHZhcmlvdXMgZGlzYworICB0eXBlcywgc2VlIGEgcmVjZW50IHZlcnNpb24gb2YgXGNkcm9taC4KKworXGl0ZW1bQ0RST01fQ0hBTkdFUl9OU0xPVFNdIFJldHVybnMgdGhlIG51bWJlciBvZiBzbG90cyBpbiBhCisgIGp1a2UtYm94LiAKK1xpdGVtW0NEUk9NUkVTRVRdIFJlc2V0IHRoZSBkcml2ZS4gCitcaXRlbVtDRFJPTV9HRVRfQ0FQQUJJTElUWV0gUmV0dXJucyB0aGUgJGNhcGFiaWxpdHkkIGZsYWdzIGZvciB0aGUKKyAgZHJpdmUuIFJlZmVyIHRvIHNlY3Rpb24gXHJlZntjYXBhYmlsaXR5fSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorICB0aGVzZSBmbGFncy4KK1xpdGVtW0NEUk9NX0xPQ0tET09SXSBMb2NrcyB0aGUgZG9vciBvZiB0aGUgZHJpdmUuICRhcmcgPT0gXHJtMCQKKyAgdW5sb2NrcyB0aGUgZG9vciwgYW55IG90aGVyIHZhbHVlIGxvY2tzIGl0LgorXGl0ZW1bQ0RST01fREVCVUddIFR1cm5zIG9uIGRlYnVnZ2luZyBpbmZvLiBPbmx5IHJvb3QgaXMgYWxsb3dlZAorICB0byBkbyB0aGlzLiBTYW1lIHNlbWFudGljcyBhcyBDRFJPTV9MT0NLRE9PUi4KK1xlbmR7ZGVzY3JpcHRpb259CisKK1xzdWJzdWJzZWN0aW9ue0RldmljZSBkZXBlbmRlbnQgJGlvY3RsJHN9CisKK0ZpbmFsbHksIGFsbCBvdGhlciAkaW9jdGwkcyBhcmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiAkZGV2X2lvY3RsKCkkLAoraWYgaW1wbGVtZW50ZWQuIE5vIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHZlcmlmaWNhdGlvbiBpcyBjYXJyaWVkIG91dC4gCisKK1xuZXdzZWN0aW9ue0hvdyB0byB1cGRhdGUgeW91ciBkcml2ZXJ9CisKK1xiZWdpbntlbnVtZXJhdGV9CitcaXRlbSBNYWtlIGEgYmFja3VwIG9mIHlvdXIgY3VycmVudCBkcml2ZXIuIAorXGl0ZW0gR2V0IGhvbGQgb2YgdGhlIGZpbGVzIFxjZHJvbWNcIGFuZCBcY2Ryb21oLCB0aGV5IHNob3VsZCBiZSBpbgorICB0aGUgZGlyZWN0b3J5IHRyZWUgdGhhdCBjYW1lIHdpdGggdGhpcyBkb2N1bWVudGF0aW9uLgorXGl0ZW0gTWFrZSBzdXJlIHlvdSBpbmNsdWRlIFxjZHJvbWguCitcaXRlbSBDaGFuZ2UgdGhlIDNyZCBhcmd1bWVudCBvZiAkcmVnaXN0ZXJfYmxrZGV2JCBmcm9tCiskXCY8eW91ci1kcml2ZT5fZm9wcyQgdG8gJFwmY2Ryb21fZm9wcyQuIAorXGl0ZW0gSnVzdCBhZnRlciB0aGF0IGxpbmUsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHJlZ2lzdGVyIHdpdGggdGhlIFxVQ0Q6CisgICQkcmVnaXN0ZXJfY2Ryb20oXCY8eW91ci1kcml2ZT5faW5mbyk7JCQKKyAgU2ltaWxhcmx5LCBhZGQgYSBjYWxsIHRvICR1bnJlZ2lzdGVyX2Nkcm9tKCkkIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZS4KK1xpdGVtIENvcHkgYW4gZXhhbXBsZSBvZiB0aGUgZGV2aWNlLW9wZXJhdGlvbnMgJHN0cnVjdCQgdG8geW91cgorICBzb3VyY2UsIFxlZywgZnJvbSB7XHR0IHtjbTIwNi5jfX0gJGNtMjA2X2RvcHMkLCBhbmQgY2hhbmdlIGFsbAorICBlbnRyaWVzIHRvIG5hbWVzIGNvcnJlc3BvbmRpbmcgdG8geW91ciBkcml2ZXIsIG9yIG5hbWVzIHlvdSBqdXN0CisgIGhhcHBlbiB0byBsaWtlLiBJZiB5b3VyIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgYSBjZXJ0YWluIGZ1bmN0aW9uLAorICBtYWtlIHRoZSBlbnRyeSAkTlVMTCQuIEF0IHRoZSBlbnRyeSAkY2FwYWJpbGl0eSQgeW91IHNob3VsZCBsaXN0IGFsbAorICBjYXBhYmlsaXRpZXMgeW91ciBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzLiBJZiB5b3VyIGRyaXZlcgorICBoYXMgYSBjYXBhYmlsaXR5IHRoYXQgaXMgbm90IGxpc3RlZCwgcGxlYXNlIHNlbmQgbWUgYSBtZXNzYWdlLgorXGl0ZW0gQ29weSB0aGUgJGNkcm9tX2RldmljZV9pbmZvJCBkZWNsYXJhdGlvbiBmcm9tIHRoZSBzYW1lIGV4YW1wbGUKKyAgZHJpdmVyLCBhbmQgbW9kaWZ5IHRoZSBlbnRyaWVzIGFjY29yZGluZyB0byB5b3VyIG5lZWRzLiBJZiB5b3VyCisgIGRyaXZlciBkeW5hbWljYWxseSBkZXRlcm1pbmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGhhcmR3YXJlLCB0aGlzCisgIHN0cnVjdHVyZSBzaG91bGQgYWxzbyBiZSBkZWNsYXJlZCBkeW5hbWljYWxseS4gCitcaXRlbSBJbXBsZW1lbnQgYWxsIGZ1bmN0aW9ucyBpbiB5b3VyICQ8ZGV2aWNlPl9kb3BzJCBzdHJ1Y3R1cmUsCisgIGFjY29yZGluZyB0byBwcm90b3R5cGVzIGxpc3RlZCBpbiBcY2Ryb21oLCBhbmQgc3BlY2lmaWNhdGlvbnMgZ2l2ZW4KKyAgaW4gc2VjdGlvbn5ccmVme2Nkcm9tLmN9LiBNb3N0IGxpa2VseSB5b3UgaGF2ZSBhbHJlYWR5IGltcGxlbWVudGVkCisgIHRoZSBjb2RlIGluIGEgbGFyZ2UgcGFydCwgYW5kIHlvdSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgbmVlZCB0byBhZGFwdCB0aGUKKyAgcHJvdG90eXBlIGFuZCByZXR1cm4gdmFsdWVzLgorXGl0ZW0gUmVuYW1lIHlvdXIgJDxkZXZpY2U+X2lvY3RsKCkkIGZ1bmN0aW9uIHRvICRhdWRpb19pb2N0bCQgYW5kCisgIGNoYW5nZSB0aGUgcHJvdG90eXBlIGEgbGl0dGxlLiBSZW1vdmUgZW50cmllcyBsaXN0ZWQgaW4gdGhlIGZpcnN0CisgIHBhcnQgaW4gc2VjdGlvbn5ccmVme2Nkcm9tLWlvY3RsfSwgaWYgeW91ciBjb2RlIHdhcyBPSywgdGhlc2UgYXJlCisgIGp1c3QgY2FsbHMgdG8gdGhlIHJvdXRpbmVzIHlvdSBhZGFwdGVkIGluIHRoZSBwcmV2aW91cyBzdGVwLgorXGl0ZW0gWW91IG1heSByZW1vdmUgYWxsIHJlbWFpbmluZyBtZW1vcnkgY2hlY2tpbmcgY29kZSBpbiB0aGUKKyAgJGF1ZGlvX2lvY3RsKCkkIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBhdWRpbyBjb21tYW5kcyAodGhlc2UgYXJlCisgIGxpc3RlZCBpbiB0aGUgc2Vjb25kIHBhcnQgb2Ygc2VjdGlvbn5ccmVme2Nkcm9tLWlvY3RsfSkuIFRoZXJlIGlzIG5vCisgIG5lZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGVpdGhlciwgc28gbW9zdCAkY2FzZSRzIGluIHRoZSAkc3dpdGNoJAorICBzdGF0ZW1lbnQgbG9vayBzaW1pbGFyIHRvOgorICAkJAorICBjYXNlXCBDRFJPTVJFQURUT0NFTlRSWVxjb2xvbiBnZXRfdG9jX2VudHJ5XGJpZ2woKHN0cnVjdFwgCisgIGNkcm9tX3RvY2VudHJ5ICp7fSlcIGFyZ1xiaWdyKTsKKyAgJCQKK1xpdGVtIEFsbCByZW1haW5pbmcgJGlvY3RsJCBjYXNlcyBtdXN0IGJlIG1vdmVkIHRvIGEgc2VwYXJhdGUKKyAgZnVuY3Rpb24sICQ8ZGV2aWNlPl9pb2N0bCQsIHRoZSBkZXZpY2UtZGVwZW5kZW50ICRpb2N0bCRzLiBOb3RlIHRoYXQKKyAgbWVtb3J5IGNoZWNraW5nIGFuZCBhbGxvY2F0aW9uIG11c3QgYmUga2VwdCBpbiB0aGlzIGNvZGUhCitcaXRlbSBDaGFuZ2UgdGhlIHByb3RvdHlwZXMgb2YgJDxkZXZpY2U+X29wZW4oKSQgYW5kCisgICQ8ZGV2aWNlPl9yZWxlYXNlKCkkLCBhbmQgcmVtb3ZlIGFueSBzdHJhdGVnaWMgY29kZSAoXGllLCB0cmF5CisgIG1vdmVtZW50LCBkb29yIGxvY2tpbmcsIGV0Yy4pLgorXGl0ZW0gVHJ5IHRvIHJlY29tcGlsZSB0aGUgZHJpdmVycy4gV2UgYWR2aXNlIHlvdSB0byB1c2UgbW9kdWxlcywgYm90aAorICBmb3Ige1x0dCB7Y2Ryb20ub319IGFuZCB5b3VyIGRyaXZlciwgYXMgZGVidWdnaW5nIGlzIG11Y2ggZWFzaWVyIHRoaXMKKyAgd2F5LgorXGVuZHtlbnVtZXJhdGV9IAorCitcbmV3c2VjdGlvbntUaGFua3N9CisKK1RoYW5rcyB0byBhbGwgdGhlIHBlb3BsZSBpbnZvbHZlZC4gIEZpcnN0LCBFcmlrIEFuZGVyc2VuLCB3aG8gaGFzCit0YWtlbiBvdmVyIHRoZSB0b3JjaCBpbiBtYWludGFpbmluZyBcY2Ryb21jXCBhbmQgaW50ZWdyYXRpbmcgbXVjaAorXGNkcm9tLXJlbGF0ZWQgY29kZSBpbiB0aGUgMi4xLWtlcm5lbC4gIFRoYW5rcyB0byBTY290dCBTbnlkZXIgYW5kCitHZXJkIEtub3JyLCB3aG8gd2VyZSB0aGUgZmlyc3QgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGZvciBTQ1NJCithbmQgSURFLUNEIGRyaXZlcnMgYW5kIGFkZGVkIG1hbnkgaWRlYXMgZm9yIGV4dGVuc2lvbiBvZiB0aGUgZGF0YQorc3RydWN0dXJlcyByZWxhdGl2ZSB0byBrZXJuZWx+Mi4wLiAgRnVydGhlciB0aGFua3MgdG8gSGVpa28gRWlzc2ZlbGR0LAorVGhvbWFzIFF1aW5vdCwgSm9uIFRvbWJzLCBLZW4gUGl6emluaSwgRWJlcmhhcmQgTVwib25rZWJlcmcgYW5kIEFuZHJldworS3JvbGwsIHRoZSBcbGludXhcIFxjZHJvbVwgZGV2aWNlIGRyaXZlciBkZXZlbG9wZXJzIHdobyB3ZXJlIGtpbmQKK2Vub3VnaCB0byBnaXZlIHN1Z2dlc3Rpb25zIGFuZCBjcml0aWNpc21zIGR1cmluZyB0aGUgd3JpdGluZy4gRmluYWxseQorb2YgY291cnNlLCBJIHdhbnQgdG8gdGhhbmsgTGludXMgVG9ydmFsZHMgZm9yIG1ha2luZyB0aGlzIHBvc3NpYmxlIGluCit0aGUgZmlyc3QgcGxhY2UuCisKK1x2ZmlsbAorJCBcdmVyc2lvblwgJAorXGVqZWN0CitcZW5ke2RvY3VtZW50fQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9jZHUzMWEgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2NkdTMxYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDY2N2RhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9jZHUzMWEKQEAgLTAsMCArMSwxOTYgQEAKKworCQlDRFUzMUEvQ0RVMzNBIERyaXZlciBJbmZvCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW5mb3JtYXRpb24gb24gdGhlIFNvbnkgQ0RVMzFBL0NEVTMzQSBDRFJPTSBkcml2ZXIgZm9yIHRoZSBMaW51eAora2VybmVsLgorCisgICBDb3JleSBNaW55YXJkIChtaW55YXJkQG1ldHJvbmV0LmNvbSkKKyAgCisgICBDb2xvc3NpYW5zIDM6MTcKKworQ3J1ZGUgVGFibGUgb2YgQ29udGVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgU2V0dGluZyBVcCB0aGUgSGFyZHdhcmUKKyAgQ29uZmlndXJpbmcgdGhlIEtlcm5lbAorICBDb25maWd1cmluZyBhcyBhIE1vZHVsZQorICBEcml2ZXIgU3BlY2lhbCBGZWF0dXJlcworCisgIAorVGhpcyBkZXZpY2UgZHJpdmVyIGhhbmRsZXMgU29ueSBDRFUzMUEvQ0RVMzNBIENEUk9NIGRyaXZlcyBhbmQKK3Byb3ZpZGVzIGEgY29tcGxldGUgYmxvY2stbGV2ZWwgaW50ZXJmYWNlIGFzIHdlbGwgYXMgYW4gaW9jdGwoKQoraW50ZXJmYWNlIGFzIHNwZWNpZmllZCBpbiBpbmNsdWRlL2xpbnV4L2Nkcm9tLmgpLiAgV2l0aCB0aGlzCitpbnRlcmZhY2UsIENEUk9NcyBjYW4gYmUgYWNjZXNzZWQsIHN0YW5kYXJkIGF1ZGlvIENEcyBjYW4gYmUgcGxheWVkCitiYWNrIG5vcm1hbGx5LCBhbmQgQ0QgYXVkaW8gaW5mb3JtYXRpb24gY2FuIGJlIHJlYWQgb2ZmIHRoZSBkcml2ZS4KKworTm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5IHdvcmsgZm9yIENEVTMxQS9DRFUzM0EgZHJpdmVzLiAgU29tZSB2ZW5kb3JzCittYXJrZXQgdGhlaXIgZHJpdmVzIGFzIENEVTMxQSBjb21wYXRpYmxlLiAgVGhleSBsaWUuICBUaGVpciBkcml2ZXMgYXJlCityZWFsbHkgQ0RVMzFBIGhhcmR3YXJlIGludGVyZmFjZSBjb21wYXRpYmxlICh0aGV5IGNhbiBwbHVnIGludG8gdGhlCitzYW1lIGNhcmQpLiAgVGhleSBhcmUgbm90IHNvZnR3YXJlIGNvbXBhdGlibGUuCisKK1NldHRpbmcgVXAgdGhlIEhhcmR3YXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQ0RVMzFBIGRyaXZlciBpcyB1bmFibGUgdG8gc2FmZWx5IHRlbGwgaWYgYW4gaW50ZXJmYWNlIGNhcmQgaXMKK3ByZXNlbnQgdGhhdCBpdCBjYW4gdXNlIGJlY2F1c2UgdGhlIGludGVyZmFjZSBjYXJkIGRvZXMgbm90IGFubm91bmNlCitpdHMgcHJlc2VuY2UgaW4gYW55IHdheSBiZXNpZGVzIHBsYWNpbmcgNCBJL08gbG9jYXRpb25zIGluIG1lbW9yeS4gIEl0Cit1c2VkIHRvIGp1c3QgcHJvYmUgbWVtb3J5IGFuZCBhdHRlbXB0IGNvbW1hbmRzLCBidXQgTGludXMgd2lzZWx5IGFza2VkCittZSB0byByZW1vdmUgdGhhdCBiZWNhdXNlIGl0IGNvdWxkIHJlYWxseSBzY3JldyB1cCBvdGhlciBoYXJkd2FyZSBpbgordGhlIHN5c3RlbS4KKworQmVjYXVzZSBvZiB0aGlzLCB5b3UgbXVzdCB0ZWxsIHRoZSBrZXJuZWwgd2hlcmUgdGhlIGRyaXZlIGludGVyZmFjZQoraXMsIHdoYXQgaW50ZXJydXB0cyBhcmUgdXNlZCwgYW5kIHBvc3NpYmx5IGlmIHlvdSBhcmUgb24gYSBQQVMtMTYKK3NvdW5kY2FyZC4KKworSWYgeW91IGhhdmUgdGhlIFNvbnkgQ0RVMzFBL0NEVTMzQSBkcml2ZSBpbnRlcmZhY2UgY2FyZCwgdGhlIGZvbGxvd2luZworZGlhZ3JhbSB3aWxsIGhlbHAgeW91IHNldCBpdCB1cC4gIElmIHlvdSBoYXZlIGFub3RoZXIgY2FyZCwgeW91IGFyZSBvbgoreW91ciBvd24uICBZb3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgSS9PIGFkZHJlc3MgYW5kIGludGVycnVwdCBpcworbm90IHVzZWQgYnkgYW5vdGhlciBjYXJkIGluIHRoZSBzeXN0ZW0uICBZb3Ugd2lsbCBuZWVkIHRvIGtub3cgdGhlIEkvTworYWRkcmVzcyBhbmQgaW50ZXJydXB0IHlvdSBoYXZlIHNldC4gIE5vdGUgdGhhdCB1c2Ugb2YgaW50ZXJydXB0cyBpcworaGlnaGx5IHJlY29tbWVuZGVkLCBpZiBwb3NzaWJsZSwgaXQgcmVhbGx5IGN1dHMgZG93biBvbiBDUFUgdXNlZC4KK1VuZm9ydHVuYXRlbHksIG1vc3Qgc291bmRjYXJkcyBkbyBub3Qgc3VwcG9ydCBpbnRlcnJ1cHRzIGZvciB0aGVpcgorQ0RST00gaW50ZXJmYWNlcy4gIEJ5IGRlZmF1bHQsIHRoZSBTb255IGludGVyZmFjZSBjYXJkIGNvbWVzIHdpdGgKK2ludGVycnVwdHMgZGlzYWJsZWQuCisgICAKKyAgICAgICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgfCAgSlAxICAgICB8ICAzNCBQaW4gQ29ubiAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAgSlAyICAgICArLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAgSlAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAgSlA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSsKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstKworICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCB8ICBFeHRlcm5hbAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCB8ICBDb25uZWN0b3IKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy0rCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0rCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0rCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAKKyAgICAgIEpQMSBzZXRzIHRoZSBCYXNlIEFkZHJlc3MsIHVzaW5nIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6CisgICAKKyAgICAgICAgQWRkcmVzcyAgICAgICAgIFBpbiAxICAgICAgICAgICBQaW4gMgorICAgICAgICAtLS0tLS0tICAgICAgICAgLS0tLS0gICAgICAgICAgIC0tLS0tCisgICAgICAgIDB4MzIwICAgICAgICAgICBTaG9ydCAgICAgICAgICAgU2hvcnQKKyAgICAgICAgMHgzMzAgICAgICAgICAgIFNob3J0ICAgICAgICAgICBPcGVuCisgICAgICAgIDB4MzQwICAgICAgICAgICBPcGVuICAgICAgICAgICAgU2hvcnQKKyAgICAgICAgMHgzNjAgICAgICAgICAgIE9wZW4gICAgICAgICAgICBPcGVuCisgICAKKyAgICAgIEpQMiBhbmQgSlAzIGNvbmZpZ3VyZSB0aGUgRE1BIGNoYW5uZWw7IHRoZXkgbXVzdCBiZSBzZXQgdGhlIHNhbWUuCisgICAKKyAgICAgICAgRE1BICAgICAgICAgICAgIFBpbiAxICAgICAgICAgICBQaW4gMiAgICAgICAgICAgUGluIDMKKyAgICAgICAgLS0tICAgICAgICAgICAgIC0tLS0tICAgICAgICAgICAtLS0tLSAgICAgICAgICAgLS0tLS0KKyAgICAgICAgMSAgICAgICAgICAgICAgIE9uICAgICAgICAgICAgICBPZmYgICAgICAgICAgICAgT24KKyAgICAgICAgMiAgICAgICAgICAgICAgIE9mZiAgICAgICAgICAgICBPbiAgICAgICAgICAgICAgT2ZmCisgICAgICAgIDMgICAgICAgICAgICAgICBPZmYgICAgICAgICAgICAgT2ZmICAgICAgICAgICAgIE9uCisgICAKKyAgICAgIEpQNCBDb25maWd1cmVzIHRoZSBJUlE6CisgICAKKyAgICAgICAgSVJRICAgICBQaW4gMSAgICAgICAgICAgUGluIDIgICAgICAgICAgIFBpbiAzICAgICAgICAgICBQaW4gNAorICAgICAgICAtLS0gICAgIC0tLS0tICAgICAgICAgICAtLS0tLSAgICAgICAgICAgLS0tLS0gICAgICAgICAgIC0tLS0tCisgICAgICAgIDMgICAgICAgT2ZmICAgICAgICAgICAgIE9mZiAgICAgICAgICAgICBPbiAgICAgICAgICAgICAgT2ZmCisgICAgICAgIDQgICAgICAgT2ZmICAgICAgICAgICAgIE9mZiogICAgICAgICAgICBPZmYgICAgICAgICAgICAgT24KKyAgICAgICAgNSAgICAgICBPbiAgICAgICAgICAgICAgT2ZmICAgICAgICAgICAgIE9mZiAgICAgICAgICAgICBPZmYKKyAgICAgICAgNiAgICAgICBPZmYgICAgICAgICAgICAgT24gICAgICAgICAgICAgIE9mZiAgICAgICAgICAgICBPZmYKKyAgIAorICAgICAgICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRvIHNldCB0aGlzIGZvciBpbnRlcnJ1cHQKKyAgICAgICAgICAgICAgICAgIDQsIGJ1dCBJIHRoaW5rIHRoYXQgaXMgYSBtaXN0YWtlLgorCitOb3RlIHRoYXQgaWYgeW91IGhhdmUgYW5vdGhlciBpbnRlcmZhY2UgY2FyZCwgeW91IHdpbGwgbmVlZCB0byBsb29rIGF0Cit0aGUgZG9jdW1lbnRhdGlvbiB0byBmaW5kIHRoZSBJL08gYmFzZSBhZGRyZXNzLiAgVGhpcyBpcyBzcGVjaWZpZWQgdG8KK3RoZSBTTENELlNZUyBkcml2ZXIgZm9yIERPUyB3aXRoIHRoZSAvQjogcGFyYW1ldGVyLCBzbyB5b3UgY2FuIGxvb2sgYXQKK3lvdSBET1MgZHJpdmVyIHNldHVwIHRvIGZpbmQgdGhlIGFkZHJlc3MsIGlmIG5lY2Vzc2FyeS4KKworQ29uZmlndXJpbmcgdGhlIEtlcm5lbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgbXVzdCB0ZWxsIHRoZSBrZXJuZWwgd2hlcmUgdGhlIGRyaXZlIGlzIGF0IGJvb3QgdGltZS4gIFRoaXMgY2FuIGJlCitkb25lIGF0IHRoZSBMaW51eCBib290IHByb21wdCwgYnkgdXNpbmcgTElMTywgb3IgYnkgdXNpbmcgQm9vdGxpbi4KK05vdGUgdGhhdCB0aGlzIGlzIG5vIHN1YnN0aXR1dGUgZm9yIEhPV1RPcyBhbmQgTElMTyBkb2N1bWVudGF0aW9uLCBpZgoreW91IGFyZSBjb25mdXNlZCBwbGVhc2UgcmVhZCB0aG9zZSBmb3IgaW5mbyBvbiBib290bGluZSBjb25maWd1cmF0aW9uCithbmQgTElMTy4KKworQXQgdGhlIGxpbnV4IGJvb3QgcHJvbXB0LCBwcmVzcyB0aGUgQUxUIGtleSBhbmQgYWRkIHRoZSBmb2xsb3dpbmcgbGluZQorYWZ0ZXIgdGhlIGJvb3QgbmFtZSAoeW91IGNhbiBsZXQgdGhlIGtlcm5lbCBib290LCBpdCB3aWxsIHRlbGwgeW91IHRoZQorZGVmYXVsdCBib290IG5hbWUgd2hpbGUgYm9vdGluZyk6CisKKwljZHUzMWE9PGJhc2UgYWRkcmVzcz4sPGludGVycnVwdD5bLFBBU10KKworVGhlIGJhc2UgYWRkcmVzcyBuZWVkcyB0byBoYXZlICIweCIgaW4gZnJvbnQgb2YgaXQsIHNpbmNlIGl0IGlzIGluCitoZXguICBGb3IgaW5zdGFuY2UsIHRvIGNvbmZpZ3VyZSBhIGRyaXZlIGF0IGFkZHJlc3MgMzIwIG9uIGludGVycnVwdCA1LAordXNlIHRoZSBmb2xsb3dpbmc6CisKKwljZHUzMWE9MHgzMjAsNQorCitJIHVzZSB0aGUgZm9sbG93aW5nIGJvb3QgbGluZToKKworCWNkdTMxYT0weDFmODgsMCxQQVMKKworYmVjYXVzZSBJIGhhdmUgYSBQQVMtMTYgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnJ1cHQgZm9yIHRoZQorQ0RVMzFBIGludGVyZmFjZS4KKworQWRkaW5nIHRoaXMgYXMgYW4gYXBwZW5kIGxpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgL2V0Yy9saWxvLmNvbmYKK2ZpbGUgd2lsbCBzZXQgaXQgZm9yIGxpbG8gY29uZmlndXJhdGlvbnMuICBJIGhhdmUgdGhlIGZvbGxvd2luZyBhcyB0aGUKK2ZpcnN0IGxpbmUgaW4gbXkgbGlsby5jb25mIGZpbGU6CisKKwlhcHBlbmQ9ImNkdTMxYT0weDFmODgsMCIKKworSSdtIG5vdCBzdXJlIGhvdyB0byBzZXQgdXAgQm9vdGxpbiAoSSBoYXZlIG5ldmVyIHVzZWQgaXQpLCBpZiBzb21lb25lCit3b3VsZCBsaWtlIHRvIGZpbGwgaW4gdGhpcyBzZWN0aW9uIHBsZWFzZSBkby4KKworCitDb25maWd1cmluZyBhcyBhIE1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBsb2FkaW5nIGFzIGEgbW9kdWxlLiAgSG93ZXZlciwgeW91IG11c3Qgc3BlY2lmeQordGhlIGJvb3QgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG9uIHRoZSBib290IGxpbmUgdG8gaW5zbW9kLiAgWW91IGNhbid0Cit1c2UgbW9kcHJvYmUgdG8gbG9hZCBpdCwgc2luY2UgbW9kcHJvYmUgZG9lc24ndCBzdXBwb3J0IHNldHRpbmcKK3ZhcmlhYmxlcy4KKworQW55d2F5LCBJIHVzZSB0aGUgZm9sbG93aW5nIGxpbmUgdG8gbG9hZCBteSBkcml2ZXIgYXMgYSBtb2R1bGUKKworICAvc2Jpbi9pbnNtb2QgL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvbWlzYy9jZHUzMWEubyBjZHUzMWFfcG9ydD0weDFmODgKKworWW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaW4gdGhlIGRyaXZlcjoKKworICBjZHUzMWFfcG9ydD08SS9PIGFkZHJlc3M+IC0gc2V0cyB0aGUgYmFzZSBJL08uICBJZiBoZXgsIHB1dCAweCBpbgorCQkJICAgICAgZnJvbnQgb2YgaXQuICBUaGlzIG11c3QgYmUgc3BlY2lmaWVkLgorCisgIGNkdTMxYV9pcnE9PGludGVycnVwdD4gLSBTZXRzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyLiAgTGVhdmluZyB0aGlzCisJCQkgICBvZmYgd2lsbCB0dXJuIGludGVycnVwdHMgb2ZmLgorCisKK0RyaXZlciBTcGVjaWFsIEZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGZlYXR1cmVzIGJleW9uZCB0aGUgbm9ybWFsIGF1ZGlvIGFuZCBDRC1ST00KK2Z1bmN0aW9ucyBvZiB0aGUgZHJpdmUuCisKKzIwNDggYnl0ZSBidWZmZXIgbW9kZQorCitJZiBhIGRpc2sgaXMgbW91bnRlZCB3aXRoIC1vIGJsb2NrPTIwNDgsIGRhdGEgaXMgY29waWVkIHN0cmFpZ2h0IGZyb20KK3RoZSBkcml2ZSBkYXRhIHBvcnQgdG8gdGhlIGJ1ZmZlci4gIE90aGVyd2lzZSwgdGhlIHJlYWRhaGVhZCBidWZmZXIKK211c3QgYmUgaW52b2x2ZWQgdG8gaG9sZCB0aGUgb3RoZXIgMUsgb2YgZGF0YSB3aGVuIGEgMUsgYmxvY2sKK29wZXJhdGlvbiBpcyBkb25lLiAgTm90ZSB0aGF0IHdpdGggMjA0OCBieXRlIGJsb2NrcyB5b3UgY2Fubm90IGV4ZWN1dGUKK2ZpbGVzIGZyb20gdGhlIENELgorCitYQSBjb21wYXRpYmlsaXR5CisKK1RoZSBkcml2ZXIgc2hvdWxkIHN1cHBvcnQgWEEgZGlza3MgZm9yIGJvdGggdGhlIENEVTMxQSBhbmQgQ0RVMzNBLiAgSXQKK2RvZXMgdGhpcyB0cmFuc3BhcmVudGx5LCB0aGUgdXNpbmcgcHJvZ3JhbSBkb2Vzbid0IG5lZWQgdG8gc2V0IGl0LgorCitNdWx0aS1TZXNzaW9uCisKK0EgbXVsdGktc2Vzc2lvbiBkaXNrIGxvb2tzIGp1c3QgbGlrZSBhIG5vcm1hbCBkaXNrIHRvIHRoZSB1c2VyLiAgSnVzdAorbW91bnQgb25lIG5vcm1hbGx5LCBhbmQgYWxsIHRoZSBkYXRhIHNob3VsZCBiZSB0aGVyZS4gIEEgc3BlY2lhbAordGhhbmtzIHRvIEtvZW4gZm9yIGhlbHAgd2l0aCB0aGlzIQorCitSYXcgc2VjdG9yIEkvTworCitVc2luZyB0aGUgQ0RST01SRUFEQVVESU8gaXQgaXMgcG9zc2libGUgdG8gcmVhZCByYXcgYXVkaW8gYW5kIGRhdGEKK3RyYWNrcy4gIEJvdGggb3BlcmF0aW9ucyByZXR1cm4gMjM1MiBieXRlcyBwZXIgc2VjdG9yLiAgT24gdGhlIGRhdGEKK3RyYWNrcywgdGhlIGZpcnN0IDEyIGJ5dGVzIGlzIG5vdCByZXR1cm5lZCBieSB0aGUgZHJpdmUgYW5kIHRoZSB2YWx1ZQorb2YgdGhhdCBkYXRhIGlzIGluZGV0ZXJtaW5hdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2NtMjA2IGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9jbTIwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTAzNjhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9jbTIwNgpAQCAtMCwwICsxLDE4NSBAQAorVGhpcyBpcyB0aGUgcmVhZG1lIGZpbGUgZm9yIHRoZSBkcml2ZXIgZm9yIHRoZSBQaGlsaXBzL0xNUyBjZHJvbSBkcml2ZQorY20yMDYgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgY20yNjAgaG9zdCBhZGFwdGVyIGNhcmQuIAorCisJCQkJKGMpIDE5OTUgRGF2aWQgQS4gdmFuIExlZXV3ZW4KKyAgIAorQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuOTkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIEludGVyZmFjaW5nIHRvIHRoZSBrZXJuZWwgaXMgcm91dGVkIHRob3VnaCBhbiBleHRyYSBpbnRlcmZhY2UgbGF5ZXIsIAorICBjZHJvbS5jLiBUaGlzIGFsbG93cyBydW50aW1lLWNvbmZpZ3VyYWJsZSBgYmVoYXZpb3InIG9mIHRoZSBjZHJvbS1kcml2ZSwgCisgIGluZGVwZW5kZW50IG9mIHRoZSBkcml2ZXIuIAorCitGZWF0dXJlcyBzaW5jZSB2ZXJzaW9uIDAuMzMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBGdWxsIGF1ZGlvIHN1cHBvcnQsIHRoYXQgaXMsIGJvdGggIHdvcmttYW4sIHdvcmtib25lIGFuZCBjZHAgd29yaworICBub3cgcmVhc29uYWJseS4gUmVhZGluZyBUT0Mgc3RpbGwgdGFrZXMgc29tZSB0aW1lLiB4bWNkIGhhcyBiZWVuCisgIHJlcG9ydGVkIHRvIHJ1biBzdWNjZXNzZnVsbHkuIAorLSBNYWRlIGF1dG8tcHJvYmUgY29kZSBhIGxpdHRsZSBiZXR0ZXIsIEkgaG9wZQorCitGZWF0dXJlcyBzaW5jZSB2ZXJzaW9uIDAuMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBGdWxsIHNwZWVkIHRyYW5zZmVyIHJhdGUgKDMwMCBrQi9zKS4KKy0gTWluaW11bSBrZXJuZWwgbWVtb3J5IHVzYWdlIGZvciBidWZmZXJpbmcgKGxlc3MgdGhhbiAzIGtCKS4KKy0gTXVsdGlzZXNzaW9uIHN1cHBvcnQuCistIFRyYXkgbG9ja2luZy4KKy0gU3RhdGlzdGljcyBvZiBkcml2ZXIgYWNjZXNzaWJsZSB0byB0aGUgdXNlci4KKy0gTW9kdWxlIHN1cHBvcnQuCistIEF1dG8tcHJvYmluZyBvZiBhZGFwdGVyIGNhcmQncyBiYXNlIHBvcnQgYW5kIGlycSBsaW5lLAorICBhbHNvIGNvbmZpZ3VyYWJsZSBhdCBib290IHRpbWUgb3IgbW9kdWxlIGxvYWQgdGltZS4KKworCitEZWNpZGUgaG93IHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBkcml2ZXIuIFRoZXJlIGFyZSB0d28KK29wdGlvbnM6CisKKyAgIChhKSBpbnN0YWxsaW5nIHRoZSBkcml2ZXIgYXMgYSByZXNpZGVudCBwYXJ0IG9mIHRoZSBrZXJuZWwKKyAgIChiKSBjb21waWxpbmcgdGhlIGRyaXZlciBhcyBhIGxvYWRhYmxlIG1vZHVsZQorCisgICBGdXJ0aGVyLCB5b3UgbXVzdCBkZWNpZGUgaWYgeW91IGFyZSBnb2luZyB0byBzcGVjaWZ5IHRoZSBiYXNlIHBvcnQKKyAgIGFkZHJlc3MgYW5kIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lIG9mIHRoZSBhZGFwdGVyIGNhcmQgY20yNjAgYXMKKyAgIGJvb3Qgb3B0aW9ucyBmb3IgKGEpLCBtb2R1bGUgcGFyYW1ldGVycyBmb3IgKGIpLCB1c2UgYXV0b21hdGljCisgICBwcm9iaW5nIG9mIHRoZXNlIHZhbHVlcywgb3IgaGFyZC13aXJlIHlvdXIgYWRhcHRvciBjYXJkJ3Mgc2V0dGluZ3MKKyAgIGludG8gdGhlIHNvdXJjZSBjb2RlLiBJZiB5b3UgZG9uJ3QgY2FyZSwgeW91IGNhbiBjaG9vc2UgCisgICBhdXRvcHJvYmluZywgd2hpY2ggaXMgdGhlIGRlZmF1bHQuIEluIHRoYXQgY2FzZSB5b3UgY2FuIG1vdmUgb24gdG8KKyAgIHRoZSBuZXh0IHN0ZXAuCisKK0NvbXBpbGluZyB0aGUga2VybmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLQorMSkgbW92ZSB0byAvdXNyL3NyYy9saW51eCBhbmQgZG8gYSAKKworCW1ha2UgY29uZmlnCisKKyAgIElmIHlvdSBoYXZlIGNob3NlbiBvcHRpb24gKGEpLCBhbnN3ZXIgeWVzIHRvIENPTkZJR19DTTIwNiBhbmQKKyAgIENPTkZJR19JU085NjYwX0ZTLgorCisgICBJZiB5b3UgaGF2ZSBjaG9zZW4gb3B0aW9uIChiKSwgYW5zd2VyIHllcyB0byBDT05GSUdfTU9EVkVSU0lPTlMKKyAgIGFuZCBubyAoISkgdG8gQ09ORklHX0NNMjA2IGFuZCBDT05GSUdfSVNPOTY2MF9GUy4gCisKKzIpIHRoZW4gZG8gYSAKKwkKKwltYWtlIGNsZWFuOyBtYWtlIHpJbWFnZTsgbWFrZSBtb2R1bGVzCisKKzMpIGRvIHRoZSB1c3VhbCB0aGluZ3MgdG8gaW5zdGFsbCBhIG5ldyBpbWFnZSAoYmFja3VwIHRoZSBvbGQgb25lLCBydW4KKyAgIGByZGV2IC1SIHpJbWFnZSAxJywgY29weSB0aGUgbmV3IGltYWdlIGluIHBsYWNlLCBydW4gbGlsbykuICBNaWdodAorICAgYmUgYG1ha2UgemxpbG8nLgorCitVc2luZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3Ugd2lsbCBvbmx5IG9jY2FzaW9uYWxseSB1c2UgdGhlIGNkLXJvbSBkcml2ZXIsIHlvdSBjYW4gY2hvb3NlCitvcHRpb24gKGIpLCBpbnN0YWxsIGFzIGEgbG9hZGFibGUgbW9kdWxlLiBZb3UgbWF5IGhhdmUgdG8gcmUtY29tcGlsZQordGhlIG1vZHVsZSB3aGVuIHlvdSB1cGdyYWRlIHRoZSBrZXJuZWwgdG8gYSBuZXcgdmVyc2lvbi4gCisKK1NpbmNlIHZlcnNpb24gMC45NiwgbXVjaCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0bworYSBnZW5lcmljIGNkcm9tIGludGVyZmFjZSBpbiB0aGUgZmlsZSBjZHJvbS5jLiBUaGUgbW9kdWxlIGNtMjA2Lm8KK2RlcGVuZHMgb24gY2Ryb20uby4gSWYgdGhlIGxhdHRlciBpcyBub3QgY29tcGlsZWQgaW50byB0aGUga2VybmVsLAoreW91IG11c3QgZXhwbGljaXRseSBsb2FkIGl0IGJlZm9yZSBjbTIwNi5vOgorCisJIGluc21vZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzL2Nkcm9tLm8KKworVG8gaW5zdGFsbCB0aGUgbW9kdWxlLCB5b3UgdXNlIHRoZSBjb21tYW5kLCBhcyByb290CisKKwlpbnNtb2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcy9jbTIwNi5vCisKK1lvdSBjYW4gc3BlY2lmeSB0aGUgYmFzZSBhZGRyZXNzIG9uIHRoZSBjb21tYW5kIGxpbmUgYXMgd2VsbCBhcyB0aGUgaXJxIAorbGluZSB0byBiZSB1c2VkLCBlLmcuCisKKwlpbnNtb2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcy9jbTIwNi5vIGNtMjA2PTB4MzAwLDExCisKK1RoZSBvcmRlciBvZiBiYXNlIHBvcnQgYW5kIGlycSBsaW5lIGRvZXNuJ3QgbWF0dGVyOyBpZiB5b3Ugc3BlY2lmeSBvbmx5CitvbmUsIHRoZSBvdGhlciB3aWxsIGhhdmUgdGhlIHZhbHVlIG9mIHRoZSBjb21waWxlZC1pbiBkZWZhdWx0LiAgWW91CittYXkgYWxzbyBoYXZlIHRvIGluc3RhbGwgdGhlIGZpbGUtc3lzdGVtIG1vZHVsZSBgaXNvOTY2MC5vJywgaWYgeW91CitkaWRuJ3QgY29tcGlsZSB0aGF0IGludG8gdGhlIGtlcm5lbC4gCisKKworVXNpbmcgdGhlIGRyaXZlciBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3UgaGF2ZSBjaG9zZW4gb3B0aW9uIChhKSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBiYXNlLXBvcnQKK2FkZHJlc3MgYW5kIGlycSBvbiB0aGUgbGlsbyBib290IGNvbW1hbmQgbGluZSwgZS5nLjoKKworCUxJTE86IGxpbnV4IGNtMjA2PTB4MzQwLDExCisKK1RoaXMgYXNzdW1lcyB0aGF0IHlvdXIgbGludXgga2VybmVsIGltYWdlIGtleXdvcmQgaXMgYGxpbnV4Jy4gCitJZiB5b3Ugc3BlY2lmeSBlaXRoZXIgSVJRICgzLS0xMSkgb3IgYmFzZSBwb3J0ICgweDMwMC0tMHgzNzApLAorYXV0byBwcm9iaW5nIGlzIHR1cm5lZCBvZmYgZm9yIGJvdGggc2V0dGluZ3MsIHRodXMgc2V0dGluZyB0aGUgCitvdGhlciB2YWx1ZSB0byB0aGUgY29tcGlsZWQtaW4gZGVmYXVsdC4KKworTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBwdXQgdGhlc2UgcGFyYW1ldGVycyBpbiB0aGUgbGlsbyBjb25maWd1cmF0aW9uIGZpbGU6CisKKyMgbGludXggY29uZmlnCitpbWFnZSA9IC92bWxpbnV6CisgICByb290ID0gL2Rldi9oZGExCisgICBsYWJlbCA9IExpbnV4CisgICBhcHBlbmQgPSAiY20yMDY9MHgzNDAsMTEiCisgICByZWFkLW9ubHkKKworCitJZiBtb2R1bGUgcGFyYW1ldGVycyBhbmQgTElMTyBjb25maWcgb3B0aW9ucyBkb24ndCB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiBhdXRvcHJvYmluZyBkb2VzIG5vdCB3b3JrLCB5b3UgY2FuIGhhcmQtd2lyZSB0aGUgZGVmYXVsdCB2YWx1ZXMKK29mIHRoZSBiYXNlIHBvcnQgYWRkcmVzcyAoQ00yMDZfQkFTRSkgYW5kIGludGVycnVwdCByZXF1ZXN0IGxpbmUKKyhDTTIwNl9JUlEpIGludG8gdGhlIGZpbGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9jZHJvbS9jbTIwNi5oLiBDaGFuZ2UKK3RoZSBkZWZpbmVzIG9mIENNMjA2X0lSUSBhbmQgQ00yMDZfQkFTRS4KKworCitNb3VudGluZyB0aGUgY2Ryb20KKy0tLS0tLS0tLS0tLS0tLS0tLQorMSkgTWFrZSBzdXJlIHRoYXQgdGhlIHJpZ2h0IGRldmljZSBpcyBpbnN0YWxsZWQgaW4gL2Rldi4KKworICAJbWtub2QgL2Rldi9jbTIwNmNkIGIgMzIgMAorCisyKSBNYWtlIHN1cmUgdGhlcmUgaXMgYSBtb3VudCBwb2ludCwgZS5nLiwgL2Nkcm9tIAorCisJbWtkaXIgL2Nkcm9tCisKKzMpIG1vdW50IHVzaW5nIGEgY29tbWFuZCBsaWtlIHRoaXMgKHJ1biBhcyByb290KToKKworCW1vdW50IC1ydCBpc285NjYwIC9kZXYvY20yMDZjZCAvY2Ryb20KKworNCkgRm9yIHVzZXItbW91bnRzLCBhZGQgYSBsaW5lIGluIC9ldGMvZnN0YWIKKworCS9kZXYvY20yMDZjZCAgICAgIC9jZHJvbSAgICAgaXNvOTY2MCAJcm8sbm9hdXRvLHVzZXIKKworICAgVGhpcyB3aWxsIGFsbG93IHVzZXJzIHRvIGdpdmUgdGhlIGNvbW1hbmRzCisKKwltb3VudCAvY2Ryb20KKwl1bW91bnQgL2Nkcm9tCisKK0lmIHRoaW5ncyBkb24ndCB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIFRyeSB0byBkbyBhIGBkbWVzZycgdG8gZmluZCBvdXQgaWYgdGhlIGRyaXZlciBzYWlkIGFueXRoaW5nIGFib3V0CisgIHdoYXQgaXMgZ29pbmcgd3JvbmcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbi4KKworLSBUcnkgdG8gZG8gYSBgZGQgaWY9L2Rldi9jbTIwNmNkIHwgb2QgLXRjIHwgbGVzcycgdG8gcmVhZCBmcm9tIHRoZQorICBDRC4KKworLSBMb29rIGluIHRoZSAvcHJvYyBkaXJlY3RvcnkgdG8gc2VlIGlmIGBjbTIwNicgc2hvd3MgdXAgdW5kZXIgb25lIG9mCisgIGBpbnRlcnJ1cHRzJywgYGlvcG9ydHMnLCBgZGV2aWNlcycgb3IgYG1vZHVsZXMnIChpZiBhcHBsaWNhYmxlKS4KKworCitESVNDTEFJTUVSIAorLS0tLS0tLS0tLSAKK0kgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoaXMgZHJpdmVyIHdvcmtzLCBvciB0aGF0IHRoZSBoYXJkd2FyZSB3aWxsCitub3QgYmUgaGFybWVkLCBhbHRob3VnaCBJIGNvbnNpZGVyIGl0IG1vc3QgdW5saWtlbHkuIAorCitJIGhvcGUgdGhhdCB5b3UnbGwgZmluZCB0aGlzIGRyaXZlciBpbiBzb21lIHdheSB1c2VmdWwuIAorCisJCQkJCURhdmlkIHZhbiBMZWV1d2VuCisJCQkJCWRhdmlkQHRtLnRuby5ubAorCitOb3RlIGZvciBMaW51eCBDRFJPTSB2ZW5kb3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluY2x1ZGUgdGhpcyBkcml2ZXIgb24geW91ciBMaW51eCBDRFJPTS4gSWYKK3lvdSBkbywgeW91IG1pZ2h0IGNvbnNpZGVyIHNlbmRpbmcgbWUgYSBmcmVlIGNvcHkgb2YgdGhhdCBjZC1yb20uCitZb3UgY2FuIGNvbnRhY3QgbWUgdGhyb3VnaCBteSBlLW1haWwgYWRkcmVzcywgZGF2aWRAdG0udG5vLm5sLiAKK0lmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gYSBrZXJuZWwgdG8gYm9vdCBvZmYgYSBjZHJvbSwgCit5b3Ugc2hvdWxkIGFjdHVhbGx5IHNlbmQgbWUgYSBmcmVlIGNvcHkgb2YgdGhhdCBjZC1yb20uIAorCitDb3B5cmlnaHQKKy0tLS0tLS0tLQorVGhlIGNvcHlyaWdodCBvZiB0aGUgY20yMDYgZHJpdmVyIGZvciBMaW51eCBpcyAKKworICAgIChjKSAxOTk1IERhdmlkIEEuIHZhbiBMZWV1d2VuCisKK1RoZSBkcml2ZXIgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBnZW5lcmFsIHB1YmxpYworbGljZW5zZSwgd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHJvb3Qgb2YgdGhpcworc291cmNlIHRyZWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2dzY2QgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2dzY2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxY2EzNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vZ3NjZApAQCAtMCwwICsxLDYwIEBACisJR29sZHN0YXIgUjQyMCBDRC1Sb20gZGV2aWNlIGRyaXZlciBSRUFETUUKKworRm9yIGFsbCBraW5kIG9mIG90aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBHb2xkU3RhciBSNDIwIENEUk9NCithbmQgdGhpcyBMaW51eCBkZXZpY2UgZHJpdmVyIHNlZSB0aGUgV1dXIHBhZ2U6CisKKyAgICAgICAgaHR0cDovL2xpbnV4LnJ6LmZoLWhhbm5vdmVyLmRlL35yYXVwYWNoICAgICAgICAKKworCisgICAgICBJZiB5b3UgYXJlIHRoZSBlZGl0b3Igb2YgYSBMaW51eCBDRCwgeW91IHNob3VsZAorICAgICAgZW5hYmxlIGdzY2QuYyB3aXRoaW4geW91ciBib290IGZsb3BweSBrZXJuZWwuIFBsZWFzZSwKKyAgICAgIHNlbmQgbWUgb25lIG9mIHlvdXIgQ0RzIGZvciBmcmVlLgorCisKK1RoaXMgY3VycmVudCBkcml2ZXIgdmVyc2lvbiAwLjRhIG9ubHkgc3VwcG9ydHMgcmVhZGluZyBkYXRhIGZyb20gdGhlIGRpc2suCitDdXJyZW50bHkgd2UgaGF2ZSBubyBhdWRpbyBhbmQgbm8gbXVsdGlzZXNzaW9uIG9yIFhBIHN1cHBvcnQuCitUaGUgcG9sbGluZyBpbnRlcmZhY2UgaXMgdXNlZCwgbm8gRE1BLgorCisKK1NvbWV0aW1lcyB0aGUgR29sZFN0YXIgUjQyMCBpcyBzb2xkIGluIGEgJ1JldmVhbCBNdWx0aW1lZGlhIEtpdCcuIFRoaXMga2l0J3MKK2RyaXZlIGludGVyZmFjZSBpcyBjb21wYXRpYmxlLCB0b28uCisKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworQ2hhbmdlIHRvICcvdXNyL3NyYy9saW51eC9kcml2ZXJzL2Nkcm9tJyBhbmQgZWRpdCB0aGUgZmlsZSAnZ3NjZC5oJy4gSW5zZXJ0Cit0aGUgaS9vIGFkZHJlc3Mgb2YgeW91ciBpbnRlcmZhY2UgY2FyZC4KKworVGhlIGRlZmF1bHQgYmFzZSBhZGRyZXNzIGlzIDB4MzQwLiBUaGlzIHdpbGwgd29yayBmb3IgbW9zdCBhcHBsaWNhdGlvbnMuIAorQWRkcmVzcyBzZWxlY3Rpb24gaXMgYWNjb21wbGlzaGVkIGJ5IGp1bXBlcnMgUE44MDEtMSB0byBQTjgwMS00IG9uIHRoZSAKK0dvbGRTdGFyIEludGVyZmFjZSBDYXJkLgorQXBwcm9wcmlhdGUgc2V0dGluZ3MgYXJlOiAweDMwMCwgMHgzMTAsIDB4MzIwLCAweDMzMCwgMHgzNDAsIDB4MzUwLCAweDM2MAorMHgzNzAsIDB4MzgwLCAweDM5MCwgMHgzQTAsIDB4M0IwLCAweDNDMCwgMHgzRDAsIDB4M0UwLCAweDNGMCAgICAgICAgICAgICAKKworVGhlbiBnbyBiYWNrIHRvICcvdXNyL3NyYy9saW51eC8nIGFuZCAnbWFrZSBjb25maWcnIHRvIGJ1aWxkIHRoZSBuZXcKK2NvbmZpZ3VyYXRpb24gZm9yIHlvdXIga2VybmVsLiBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIEdvbGRTdGFyIGRyaXZlcgorbGlrZSBhIG1vZHVsZSwgZG9uJ3Qgc2VsZWN0ICdHb2xkU3RhciBDRFJPTSBzdXBwb3J0Jy4gQnkgdGhlIHdheSwgeW91CitoYXZlIHRvIGluY2x1ZGUgdGhlIGlzbzk2NjAgZmlsZXN5c3RlbS4KKworTm93IHN0YXJ0IGNvbXBpbGluZyB0aGUga2VybmVsIHdpdGggJ21ha2UgekltYWdlJy4KK0lmIHlvdSB3YW50IHRvIHVzZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCB5b3UgaGF2ZSB0byBkbyAnbWFrZSBtb2R1bGVzJyAKK2FuZCAnbWFrZSBtb2R1bGVzX2luc3RhbGwnLCBhZGRpdGlvbmFsbHkuCitJbnN0YWxsIHlvdXIgbmV3IGtlcm5lbCBhcyB1c3VhbCAtIG1heWJlIHlvdSBkbyBpdCB3aXRoICdtYWtlIHpsaWxvJy4KKworQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSBkcml2ZXIsIHlvdSBoYXZlIHRvCisgICBta25vZCAvZGV2L2dzY2QwIGIgMTYgMAordG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBkZXZpY2UgZmlsZSAoeW91IG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UpLgorCitJZiB5b3UgdXNlIG1vZHVsZXMsIHlvdSBjYW4gdHJ5IHRvIGluc2VydCB0aGUgZHJpdmVyLgorU2F5OiAnaW5zbW9kIC91c3Ivc3JjL2xpbnV4L21vZHVsZXMvZ3NjZC5vJworb3I6ICAnaW5zbW9kIC91c3Ivc3JjL2xpbnV4L21vZHVsZXMvZ3NjZC5vIGdzY2Q9PGFkZHJlc3M+JworVGhlIGRyaXZlciBzaG91bGQgcmVwb3J0IGl0cyByZXN1bHRzLgorCitUaGF0J3MgaXQhIE1vdW50IGEgZGlzaywgaS5lLiAnbW91bnQgLXJ0IGlzbzk2NjAgL2Rldi9nc2NkMCAvY2Ryb20nCisKK0ZlZWwgZnJlZSB0byByZXBvcnQgZXJyb3JzIGFuZCBzdWdnZXN0aW9ucyB0byB0aGUgZm9sbG93aW5nIGFkZHJlc3MuCitCZSBzdXJlLCBJJ20gdmVyeSBoYXBweSB0byByZWNlaXZlIHlvdXIgY29tbWVudHMhCisgCisgICAgICAgIE9saXZlciBSYXVwYWNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5ub3ZlciwgSnVuaSAxOTk1CisocmF1cGFjaEBud2ZzMS5yei5maC1oYW5ub3Zlci5kZSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vaWRlLWNkIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9pZGUtY2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3MjFiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vaWRlLWNkCkBAIC0wLDAgKzEsNTc0IEBACitJREUtQ0QgZHJpdmVyIGRvY3VtZW50YXRpb24KK09yaWdpbmFsbHkgYnkgc2NvdHQgc255ZGVyICA8c255ZGVyQGZuYWxkMC5mbmFsLmdvdj4gKDE5IE1heSAxOTk2KQorQ2Fycnlpbmcgb24gdGhlIHRvcmNoIGlzOiBFcmlrIEFuZGVyc2VuIDxhbmRlcnNlZUBkZWJpYW4ub3JnPgorTmV3IG1haW50YWluZXJzICgxOSBPY3QgMTk5OCk6IEplbnMgQXhib2UgPGF4Ym9lQGltYWdlLmRrPgorCisxLiBJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgaWRlLWNkIGRyaXZlciBzaG91bGQgd29yayB3aXRoIGFsbCBBVEFQSSB2ZXIgMS4yIHRvIEFUQVBJIDIuNiBjb21wbGlhbnQgCitDRFJPTSBkcml2ZXMgd2hpY2ggYXR0YWNoIHRvIGFuIElERSBpbnRlcmZhY2UuICBOb3RlIHRoYXQgc29tZSBDRFJPTSB2ZW5kb3JzCisoaW5jbHVkaW5nIE1pdHN1bWksIFNvbnksIENyZWF0aXZlLCBBenRlY2gsIGFuZCBHb2xkc3RhcikgaGF2ZSBtYWRlCitib3RoIEFUQVBJLWNvbXBsaWFudCBkcml2ZXMgYW5kIGRyaXZlcyB3aGljaCB1c2UgYSBwcm9wcmlldGFyeQoraW50ZXJmYWNlLiAgSWYgeW91ciBkcml2ZSB1c2VzIG9uZSBvZiB0aG9zZSBwcm9wcmlldGFyeSBpbnRlcmZhY2VzLAordGhpcyBkcml2ZXIgd2lsbCBub3Qgd29yayB3aXRoIGl0IChidXQgb25lIG9mIHRoZSBvdGhlciBDRFJPTSBkcml2ZXJzCitwcm9iYWJseSB3aWxsKS4gIFRoaXMgZHJpdmVyIHdpbGwgbm90IHdvcmsgd2l0aCBgQVRBUEknIGRyaXZlcyB3aGljaAorYXR0YWNoIHRvIHRoZSBwYXJhbGxlbCBwb3J0LiAgSW4gYWRkaXRpb24sIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkcml2ZQorKEN5Q0RST00gQ1I1MjBpZSkgd2hpY2ggYXR0YWNoZXMgdG8gdGhlIElERSBwb3J0IGJ1dCBpcyBub3QgQVRBUEk7Cit0aGlzIGRyaXZlciB3aWxsIG5vdCB3b3JrIHdpdGggZHJpdmVzIGxpa2UgdGhhdCBlaXRoZXIgKGJ1dCBzZWUgdGhlCithenRjZCBkcml2ZXIpLgorCitUaGlzIGRyaXZlciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgorCisgLSBSZWFkaW5nIGZyb20gZGF0YSB0cmFja3MsIGFuZCBtb3VudGluZyBJU08gOTY2MCBmaWxlc3lzdGVtcy4KKworIC0gUGxheWluZyBhdWRpbyB0cmFja3MuICBNb3N0IG9mIHRoZSBDRFJPTSBwbGF5ZXIgcHJvZ3JhbXMgZmxvYXRpbmcKKyAgIGFyb3VuZCBzaG91bGQgd29yazsgSSB1c3VhbGx5IHVzZSBXb3JrbWFuLgorCisgLSBNdWx0aXNlc3Npb24gc3VwcG9ydC4KKworIC0gT24gZHJpdmVzIHdoaWNoIHN1cHBvcnQgaXQsIHJlYWRpbmcgZGlnaXRhbCBhdWRpbyBkYXRhIGRpcmVjdGx5CisgICBmcm9tIGF1ZGlvIHRyYWNrcy4gIFRoZSBwcm9ncmFtIGNkZGEyd2F2IGNhbiBiZSB1c2VkIGZvciB0aGlzLgorICAgTm90ZSwgaG93ZXZlciwgdGhhdCBvbmx5IHNvbWUgZHJpdmVzIGFjdHVhbGx5IHN1cHBvcnQgdGhpcy4KKworIC0gVGhlcmUgaXMgbm93IHN1cHBvcnQgZm9yIENEUk9NIGNoYW5nZXJzIHdoaWNoIGNvbXBseSB3aXRoIHRoZSAKKyAgIEFUQVBJIDIuNiBkcmFmdCBzdGFuZGFyZCAoc3VjaCBhcyB0aGUgTkVDIENEUi0yNTEpLiAgVGhpcyBhZGRpdGlvbmFsCisgICBmdW5jdGlvbmFsaXR5IGluY2x1ZGVzIGEgZnVuY3Rpb24gY2FsbCB0byBxdWVyeSB3aGljaCBzbG90IGlzIHRoZQorICAgY3VycmVudGx5IHNlbGVjdGVkIHNsb3QsIGEgZnVuY3Rpb24gY2FsbCB0byBxdWVyeSB3aGljaCBzbG90cyBjb250YWluCisgICBDRHMsIGV0Yy4gQSBzYW1wbGUgcHJvZ3JhbSB3aGljaCBkZW1vbnN0cmF0ZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzCisgICBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoaXMgZmlsZS4gIFRoZSBTYW55byAzLWRpc2MgY2hhbmdlcgorICAgKHdoaWNoIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIHN0YW5kYXJkKSBpcyBhbHNvIG5vdyBzdXBwb3J0ZWQuCisgICBQbGVhc2Ugbm90ZSB0aGUgZHJpdmVyIHJlZmVycyB0byB0aGUgZmlyc3QgQ0QgYXMgc2xvdCAjIDAuCisKKworMi4gSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0tLS0KKworMC4gVGhlIGlkZS1jZCByZWxpZXMgb24gdGhlIGlkZSBkaXNrIGRyaXZlci4gIFNlZQorICAgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uIG9uIHRoZSBpZGUKKyAgIGRyaXZlci4KKworMS4gTWFrZSBzdXJlIHRoYXQgdGhlIGlkZSBhbmQgaWRlLWNkIGRyaXZlcnMgYXJlIGNvbXBpbGVkIGludG8gdGhlCisgICBrZXJuZWwgeW91J3JlIHVzaW5nLiAgV2hlbiBjb25maWd1cmluZyB0aGUga2VybmVsLCBpbiB0aGUgc2VjdGlvbiAKKyAgIGVudGl0bGVkICJGbG9wcHksIElERSwgYW5kIG90aGVyIGJsb2NrIGRldmljZXMiLCBzYXkgZWl0aGVyIGBZJyAKKyAgICh3aGljaCB3aWxsIGNvbXBpbGUgdGhlIHN1cHBvcnQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsKSBvciBgTScKKyAgICh0byBjb21waWxlIHN1cHBvcnQgYXMgYSBtb2R1bGUgd2hpY2ggY2FuIGJlIGxvYWRlZCBhbmQgdW5sb2FkZWQpCisgICB0byB0aGUgb3B0aW9uczogCisKKyAgICAgIEVuaGFuY2VkIElERS9NRk0vUkxMIGRpc2svY2Ryb20vdGFwZS9mbG9wcHkgc3VwcG9ydAorICAgICAgSW5jbHVkZSBJREUvQVRBUEkgQ0RST00gc3VwcG9ydAorCisgICBhbmQgYG5vJyB0bworCisgICAgICBVc2Ugb2xkIGRpc2stb25seSBkcml2ZXIgb24gcHJpbWFyeSBpbnRlcmZhY2UKKworICAgRGVwZW5kaW5nIG9uIHdoYXQgdHlwZSBvZiBJREUgaW50ZXJmYWNlIHlvdSBoYXZlLCB5b3UgbWF5IG5lZWQgdG8KKyAgIHNwZWNpZnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBTZWUKKyAgIERvY3VtZW50YXRpb24vaWRlLnR4dC4KKworMi4gWW91IHNob3VsZCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBpc285NjYwIGZpbGVzeXN0ZW0gaXMgZWl0aGVyCisgICBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgYXZhaWxhYmxlIGFzIGEgbG9hZGFibGUgbW9kdWxlLiAgWW91CisgICBjYW4gc2VlIGlmIGEgZmlsZXN5c3RlbSBpcyBrbm93biB0byB0aGUga2VybmVsIGJ5IGNhdHRpbmcKKyAgIC9wcm9jL2ZpbGVzeXN0ZW1zLgorCiszLiBUaGUgQ0RST00gZHJpdmUgc2hvdWxkIGJlIGNvbm5lY3RlZCB0byB0aGUgaG9zdCBvbiBhbiBJREUKKyAgIGludGVyZmFjZS4gIEVhY2ggaW50ZXJmYWNlIG9uIGEgc3lzdGVtIGlzIGRlZmluZWQgYnkgYW4gSS9PIHBvcnQKKyAgIGFkZHJlc3MgYW5kIGFuIElSUSBudW1iZXIsIHRoZSBzdGFuZGFyZCBhc3NpZ25tZW50cyBiZWluZworICAgMHgxZjAgYW5kIDE0IGZvciB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgYW5kIDB4MTcwIGFuZCAxNSBmb3IgdGhlCisgICBzZWNvbmRhcnkgaW50ZXJmYWNlLiAgRWFjaCBpbnRlcmZhY2UgY2FuIGNvbnRyb2wgdXAgdG8gdHdvIGRldmljZXMsCisgICB3aGVyZSBlYWNoIGRldmljZSBjYW4gYmUgYSBoYXJkIGRyaXZlLCBhIENEUk9NIGRyaXZlLCBhIGZsb3BweSBkcml2ZSwgCisgICBvciBhIHRhcGUgZHJpdmUuICBUaGUgdHdvIGRldmljZXMgb24gYW4gaW50ZXJmYWNlIGFyZSBjYWxsZWQgYG1hc3RlcicKKyAgIGFuZCBgc2xhdmUnOyB0aGlzIGlzIHVzdWFsbHkgc2VsZWN0YWJsZSB2aWEgYSBqdW1wZXIgb24gdGhlIGRyaXZlLgorCisgICBMaW51eCBuYW1lcyB0aGVzZSBkZXZpY2VzIGFzIGZvbGxvd3MuICBUaGUgbWFzdGVyIGFuZCBzbGF2ZSBkZXZpY2VzCisgICBvbiB0aGUgcHJpbWFyeSBJREUgaW50ZXJmYWNlIGFyZSBjYWxsZWQgYGhkYScgYW5kIGBoZGInLAorICAgcmVzcGVjdGl2ZWx5LiAgVGhlIGRyaXZlcyBvbiB0aGUgc2Vjb25kYXJ5IGludGVyZmFjZSBhcmUgY2FsbGVkCisgICBgaGRjJyBhbmQgYGhkZCcuICAoSW50ZXJmYWNlcyBhdCBvdGhlciBsb2NhdGlvbnMgZ2V0IG90aGVyIGxldHRlcnMKKyAgIGluIHRoZSB0aGlyZCBwb3NpdGlvbjsgc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dC4pCisKKyAgIElmIHlvdSB3YW50IHlvdXIgQ0RST00gZHJpdmUgdG8gYmUgZm91bmQgYXV0b21hdGljYWxseSBieSB0aGUKKyAgIGRyaXZlciwgeW91IHNob3VsZCBtYWtlIHN1cmUgeW91ciBJREUgaW50ZXJmYWNlIHVzZXMgZWl0aGVyIHRoZQorICAgcHJpbWFyeSBvciBzZWNvbmRhcnkgYWRkcmVzc2VzIG1lbnRpb25lZCBhYm92ZS4gIEluIGFkZGl0aW9uLCBpZgorICAgdGhlIENEUk9NIGRyaXZlIGlzIHRoZSBvbmx5IGRldmljZSBvbiB0aGUgSURFIGludGVyZmFjZSwgaXQgc2hvdWxkCisgICBiZSBqdW1wZXJlZCBhcyBgbWFzdGVyJy4gIChJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdCBjb25maWd1cmUKKyAgIHlvdXIgc3lzdGVtIGluIHRoaXMgbWFubmVyLCB5b3UgY2FuIHByb2JhYmx5IHN0aWxsIHVzZSB0aGUgZHJpdmVyLgorICAgWW91IG1heSBoYXZlIHRvIHBhc3MgZXh0cmEgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0byB0aGUga2VybmVsCisgICB3aGVuIHlvdSBib290LCBob3dldmVyLiAgU2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgbW9yZQorICAgaW5mb3JtYXRpb24uKQorCis0LiBCb290IHRoZSBzeXN0ZW0uICBJZiB0aGUgZHJpdmUgaXMgcmVjb2duaXplZCwgeW91IHNob3VsZCBzZWUgYQorICAgbWVzc2FnZSB3aGljaCBsb29rcyBsaWtlCisKKyAgICAgaGRiOiBORUMgQ0QtUk9NIERSSVZFOjI2MCwgQVRBUEkgQ0RST00gZHJpdmUKKworICAgSWYgeW91IGRvIG5vdCBzZWUgdGhpcywgc2VlIHNlY3Rpb24gNSBiZWxvdy4KKworNS4gWW91IG1heSB3YW50IHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgL2Rldi9jZHJvbSBwb2ludGluZyB0byB0aGUKKyAgIGFjdHVhbCBkZXZpY2UuICBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgY29tbWFuZAorCisgICAgIGxuIC1zICAvZGV2L2hkWCAgL2Rldi9jZHJvbQorCisgICB3aGVyZSBYIHNob3VsZCBiZSByZXBsYWNlZCBieSB0aGUgbGV0dGVyIGluZGljYXRpbmcgd2hlcmUgeW91cgorICAgZHJpdmUgaXMgaW5zdGFsbGVkLgorCis2LiBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gc2VlIGFueSBlcnJvciBtZXNzYWdlcyBmcm9tIHRoZSBkcml2ZXIgd2l0aAorICAgdGhlIGBkbWVzZycgY29tbWFuZC4KKworCiszLiBCYXNpYyB1c2FnZQorLS0tLS0tLS0tLS0tLS0KKworQW4gSVNPIDk2NjAgQ0RST00gY2FuIGJlIG1vdW50ZWQgYnkgcHV0dGluZyB0aGUgZGlzYyBpbiB0aGUgZHJpdmUgYW5kIAordHlwaW5nIChhcyByb290KQorCisgIG1vdW50IC10IGlzbzk2NjAgL2Rldi9jZHJvbSAvbW50L2Nkcm9tCisKK3doZXJlIGl0IGlzIGFzc3VtZWQgdGhhdCAvZGV2L2Nkcm9tIGlzIGEgbGluayBwb2ludGluZyB0byB0aGUgYWN0dWFsCitkZXZpY2UgKGFzIGRlc2NyaWJlZCBpbiBzdGVwIDUgb2YgdGhlIGxhc3Qgc2VjdGlvbikgYW5kIC9tbnQvY2Ryb20gaXMKK2FuIGVtcHR5IGRpcmVjdG9yeS4gIFlvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUKK0NEUk9NIHVuZGVyIHRoZSAvbW50L2Nkcm9tIGRpcmVjdG9yeS4gIElmIHlvdSB3YW50IHRvIGVqZWN0IHRoZSBDRFJPTSwKK3lvdSBtdXN0IGZpcnN0IGRpc21vdW50IGl0IHdpdGggYSBjb21tYW5kIGxpa2UKKworICB1bW91bnQgL21udC9jZHJvbQorCitOb3RlIHRoYXQgYXVkaW8gQ0RzIGNhbm5vdCBiZSBtb3VudGVkLgorCitTb21lIGRpc3RyaWJ1dGlvbnMgc2V0IHVwIC9ldGMvZnN0YWIgdG8gYWx3YXlzIHRyeSB0byBtb3VudCBhIENEUk9NCitmaWxlc3lzdGVtIG9uIGJvb3R1cC4gIEl0IGlzIG5vdCByZXF1aXJlZCB0byBtb3VudCB0aGUgQ0RST00gaW4gdGhpcworbWFubmVyLCB0aG91Z2gsIGFuZCBpdCBtYXkgYmUgYSBudWlzYW5jZSBpZiB5b3UgY2hhbmdlIENEUk9NcyBvZnRlbi4KK1lvdSBzaG91bGQgZmVlbCBmcmVlIHRvIHJlbW92ZSB0aGUgY2Ryb20gbGluZSBmcm9tIC9ldGMvZnN0YWIgYW5kCittb3VudCBDRFJPTXMgbWFudWFsbHkgaWYgdGhhdCBzdWl0cyB5b3UgYmV0dGVyLgorCitNdWx0aXNlc3Npb24gYW5kIHBob3RvY2QgZGlzY3Mgc2hvdWxkIHdvcmsgd2l0aCBubyBzcGVjaWFsIGhhbmRsaW5nLgorVGhlIGhwY2R0b3BwbSBwYWNrYWdlIChmdHAuZ3dkZy5kZTovcHViL2xpbnV4L2hwY2R0b3BwbS8pIG1heSBiZQordXNlZnVsIGZvciByZWFkaW5nIHBob3RvY2RzLgorCitUbyBwbGF5IGFuIGF1ZGlvIENELCB5b3Ugc2hvdWxkIGZpcnN0IHVubW91bnQgYW5kIHJlbW92ZSBhbnkgZGF0YQorQ0RST00uICBBbnkgb2YgdGhlIENEUk9NIHBsYXllciBwcm9ncmFtcyBzaG91bGQgdGhlbiB3b3JrICh3b3JrbWFuLAord29ya2JvbmUsIGNkcGxheWVyLCBldGMuKS4gIExhY2tpbmcgYW55dGhpbmcgZWxzZSwgeW91IGNvdWxkIHVzZSB0aGUKK2NkdGVzdGVyIHByb2dyYW0gaW4gRG9jdW1lbnRhdGlvbi9jZHJvbS9zYnBjZC4KKworT24gYSBmZXcgZHJpdmVzLCB5b3UgY2FuIHJlYWQgZGlnaXRhbCBhdWRpbyBkaXJlY3RseSB1c2luZyBhIHByb2dyYW0KK3N1Y2ggYXMgY2RkYTJ3YXYuICBUaGUgb25seSB0eXBlcyBvZiBkcml2ZSB3aGljaCBJJ3ZlIGhlYXJkIHN1cHBvcnQKK3RoaXMgYXJlIFNvbnkgYW5kIFRvc2hpYmEgZHJpdmVzLiAgWW91IHdpbGwgZ2V0IGVycm9ycyBpZiB5b3UgdHJ5IHRvCit1c2UgdGhpcyBmdW5jdGlvbiBvbiBhIGRyaXZlIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgaXQuCisKK0ZvciBzdXBwb3J0ZWQgY2hhbmdlcnMsIHlvdSBjYW4gdXNlIHRoZSBgY2RjaGFuZ2UnIHByb2dyYW0gKGFwcGVuZGVkIHRvCit0aGUgZW5kIG9mIHRoaXMgZmlsZSkgdG8gc3dpdGNoIGJldHdlZW4gY2hhbmdlciBzbG90cy4gIE5vdGUgdGhhdCB0aGUKK2RyaXZlIHNob3VsZCBiZSB1bm1vdW50ZWQgYmVmb3JlIGF0dGVtcHRpbmcgdGhpcy4gIFRoZSBwcm9ncmFtIHRha2VzCit0d28gYXJndW1lbnRzOiAgdGhlIENEUk9NIGRldmljZSwgYW5kIHRoZSBzbG90IG51bWJlciB0byB3aGljaCB5b3Ugd2lzaAordG8gY2hhbmdlLiAgSWYgdGhlIHNsb3QgbnVtYmVyIGlzIC0xLCB0aGUgZHJpdmUgaXMgdW5sb2FkZWQuCisKKworNC4gQ29tcGlsYXRpb24gb3B0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgYSBmZXcgYWRkaXRpb25hbCBvcHRpb25zIHdoaWNoIGNhbiBiZSBzZXQgd2hlbiBjb21waWxpbmcgdGhlCitkcml2ZXIuICBNb3N0IHBlb3BsZSBzaG91bGQgbm90IG5lZWQgdG8gbWVzcyB3aXRoIGFueSBvZiB0aGVzZTsgdGhleQorYXJlIGxpc3RlZCBoZXJlIHNpbXBseSBmb3IgY29tcGxldGVuZXNzLiAgQSBjb21waWxhdGlvbiBvcHRpb24gY2FuIGJlCitlbmFibGVkIGJ5IGFkZGluZyBhIGxpbmUgb2YgdGhlIGZvcm0gYCNkZWZpbmUgPG9wdGlvbj4gMScgdG8gdGhlIHRvcAorb2YgaWRlLWNkLmMuICBBbGwgdGhlc2Ugb3B0aW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKworVkVSQk9TRV9JREVfQ0RfRVJST1JTCisgIElmIHRoaXMgaXMgc2V0LCBBVEFQSSBlcnJvciBjb2RlcyB3aWxsIGJlIHRyYW5zbGF0ZWQgaW50byB0ZXh0dWFsCisgIGRlc2NyaXB0aW9ucy4gIEluIGFkZGl0aW9uLCBhIGR1bXAgaXMgbWFkZSBvZiB0aGUgY29tbWFuZCB3aGljaAorICBwcm92b2tlZCB0aGUgZXJyb3IuICBUaGlzIGlzIG9mZiBieSBkZWZhdWx0IHRvIHNhdmUgdGhlIG1lbW9yeSB1c2VkCisgIGJ5IHRoZSAoc29tZXdoYXQgbG9uZykgdGFibGUgb2YgZXJyb3IgZGVzY3JpcHRpb25zLiAgCisKK1NUQU5EQVJEX0FUQVBJCisgIElmIHRoaXMgaXMgc2V0LCB0aGUgY29kZSBuZWVkZWQgdG8gZGVhbCB3aXRoIGNlcnRhaW4gZHJpdmVzIHdoaWNoIGRvCisgIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhlIEFUQVBJIHNwZWMgd2lsbCBiZSBkaXNhYmxlZC4gIElmIHlvdSBrbm93CisgIHlvdXIgZHJpdmUgaW1wbGVtZW50cyBBVEFQSSBwcm9wZXJseSwgeW91IGNhbiB0dXJuIHRoaXMgb24gdG8gZ2V0IGEKKyAgc2xpZ2h0bHkgc21hbGxlciBrZXJuZWwuCisKK05PX0RPT1JfTE9DS0lORworICBJZiB0aGlzIGlzIHNldCwgdGhlIGRyaXZlciB3aWxsIG5ldmVyIGF0dGVtcHQgdG8gbG9jayB0aGUgZG9vciBvZgorICB0aGUgZHJpdmUuCisKK0NEUk9NX05CTE9DS1NfQlVGRkVSCisgIFRoaXMgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHVzZWQgZm9yIGEgQ0RST01SRUFEQVVESU8KKyAgaW9jdGwuICBUaGUgZGVmYXVsdCBpcyA4LgorCitURVNUCisgIFRoaXMgY3VycmVudGx5IGVuYWJsZXMgYW4gYWRkaXRpb25hbCBpb2N0bCB3aGljaCBlbmFibGVzIGEgdXNlci1tb2RlCisgIHByb2dyYW0gdG8gZXhlY3V0ZSBhbiBhcmJpdHJhcnkgcGFja2V0IGNvbW1hbmQuICBTZWUgdGhlIHNvdXJjZSBmb3IKKyAgZGV0YWlscy4gIFRoaXMgc2hvdWxkIGJlIGxlZnQgb2ZmIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4KKworCis1LiBDb21tb24gcHJvYmxlbXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gZGlzY3Vzc2VzIHNvbWUgY29tbW9uIHByb2JsZW1zIGVuY291bnRlcmVkIHdoZW4gdHJ5aW5nIHRvCit1c2UgdGhlIGRyaXZlciwgYW5kIHNvbWUgcG9zc2libGUgc29sdXRpb25zLiAgTm90ZSB0aGF0IGlmIHlvdSBhcmUKK2V4cGVyaWVuY2luZyBwcm9ibGVtcywgeW91IHNob3VsZCBwcm9iYWJseSBhbHNvIHJldmlldworRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBjdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSB1bmRlcmx5aW5nCitJREUgc3VwcG9ydCBjb2RlLiAgU29tZSBvZiB0aGVzZSBpdGVtcyBhcHBseSBvbmx5IHRvIGVhcmxpZXIgdmVyc2lvbnMKK29mIHRoZSBkcml2ZXIsIGJ1dCBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy4KKworSW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCBwcm9iYWJseSBjaGVjayB3aXRoIGBkbWVzZycgZm9yIGFueSBlcnJvcnMKK2Zyb20gdGhlIGRyaXZlci4KKworYS4gRHJpdmUgaXMgbm90IGRldGVjdGVkIGR1cmluZyBib290aW5nLgorCisgICAtIFJldmlldyB0aGUgY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbnMgYWJvdmUgYW5kIGluCisgICAgIERvY3VtZW50YXRpb24vaWRlLnR4dCwgYW5kIGNoZWNrIGhvdyB5b3VyIGhhcmR3YXJlIGlzCisgICAgIGNvbmZpZ3VyZWQuCisKKyAgIC0gSWYgeW91ciBkcml2ZSBpcyB0aGUgb25seSBkZXZpY2Ugb24gYW4gSURFIGludGVyZmFjZSwgaXQgc2hvdWxkCisgICAgIGJlIGp1bXBlcmVkIGFzIG1hc3RlciwgaWYgYXQgYWxsIHBvc3NpYmxlLgorCisgICAtIElmIHlvdXIgSURFIGludGVyZmFjZSBpcyBub3QgYXQgdGhlIHN0YW5kYXJkIGFkZHJlc3NlcyBvZiAweDE3MAorICAgICBvciAweDFmMCwgeW91J2xsIG5lZWQgdG8gZXhwbGljaXRseSBpbmZvcm0gdGhlIGRyaXZlciB1c2luZyBhCisgICAgIGxpbG8gb3B0aW9uLiAgU2VlIERvY3VtZW50YXRpb24vaWRlLnR4dC4gIChUaGlzIGZlYXR1cmUgd2FzCisgICAgIGFkZGVkIGFyb3VuZCBrZXJuZWwgdmVyc2lvbiAxLjMuMzAuKQorCisgICAtIElmIHRoZSBhdXRvcHJvYmluZyBpcyBub3QgZmluZGluZyB5b3VyIGRyaXZlLCB5b3UgY2FuIHRlbGwgdGhlCisgICAgIGRyaXZlciB0byBhc3N1bWUgdGhhdCBvbmUgZXhpc3RzIGJ5IHVzaW5nIGEgbGlsbyBvcHRpb24gb2YgdGhlCisgICAgIGZvcm0gYGhkWD1jZHJvbScsIHdoZXJlIFggaXMgdGhlIGRyaXZlIGxldHRlciBjb3JyZXNwb25kaW5nIHRvCisgICAgIHdoZXJlIHlvdXIgZHJpdmUgaXMgaW5zdGFsbGVkLiAgTm90ZSB0aGF0IGlmIHlvdSBkbyB0aGlzIGFuZCB5b3UgCisgICAgIHNlZSBhIGJvb3QgbWVzc2FnZSBsaWtlCisKKyAgICAgICBoZFg6IEFUQVBJIGNkcm9tICg/KQorCisgICAgIHRoaXMgZG9lcyBfbm90XyBtZWFuIHRoYXQgdGhlIGRyaXZlciBoYXMgc3VjY2Vzc2Z1bGx5IGRldGVjdGVkCisgICAgIHRoZSBkcml2ZTsgcmF0aGVyLCBpdCBtZWFucyB0aGF0IHRoZSBkcml2ZXIgaGFzIG5vdCBkZXRlY3RlZCBhCisgICAgIGRyaXZlLCBidXQgaXMgYXNzdW1pbmcgdGhlcmUncyBvbmUgdGhlcmUgYW55d2F5IGJlY2F1c2UgeW91IHRvbGQKKyAgICAgaXQgc28uICBJZiB5b3UgYWN0dWFsbHkgdHJ5IHRvIGRvIEkvTyB0byBhIGRyaXZlIGRlZmluZWQgYXQgYQorICAgICBub25leGlzdGVudCBvciBub25yZXNwb25kaW5nIEkvTyBhZGRyZXNzLCB5b3UnbGwgcHJvYmFibHkgZ2V0CisgICAgIGVycm9ycyB3aXRoIGEgc3RhdHVzIHZhbHVlIG9mIDB4ZmYuCisKKyAgIC0gU29tZSBJREUgYWRhcHRlcnMgcmVxdWlyZSBhIG5vbnN0YW5kYXJkIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlCisgICAgIGJlZm9yZSB0aGV5J2xsIGZ1bmN0aW9uIHByb3Blcmx5LiAgKElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXJlCisgICAgIHdpbGwgb2Z0ZW4gYmUgYSBzZXBhcmF0ZSBNUy1ET1MgZHJpdmVyIGp1c3QgZm9yIHRoZSBjb250cm9sbGVyLikKKyAgICAgSURFIGludGVyZmFjZXMgb24gc291bmQgY2FyZHMgb2Z0ZW4gZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnkuCisKKyAgICAgU3VwcG9ydCBmb3Igc29tZSBpbnRlcmZhY2VzIG5lZWRpbmcgZXh0cmEgaW5pdGlhbGl6YXRpb24gaXMKKyAgICAgcHJvdmlkZWQgaW4gbGF0ZXIgMS4zLngga2VybmVscy4gIFlvdSBtYXkgbmVlZCB0byB0dXJuIG9uCisgICAgIGFkZGl0aW9uYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBnZXQgdGhlbSB0byB3b3JrOworICAgICBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LgorCisgICAgIEV2ZW4gaWYgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIGZvciB5b3VyIGludGVyZmFjZSwgeW91IG1heSBiZQorICAgICBhYmxlIHRvIGdldCBpdCB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBwcm9jZWR1cmUuICBGaXJzdCBib290CisgICAgIE1TLURPUyBhbmQgbG9hZCB0aGUgYXBwcm9wcmlhdGUgZHJpdmVycy4gIFRoZW4gd2FybS1ib290IGxpbnV4CisgICAgIChpLmUuLCB3aXRob3V0IHBvd2VyaW5nIG9mZikuICBJZiB0aGlzIHdvcmtzLCBpdCBjYW4gYmUgYXV0b21hdGVkCisgICAgIGJ5IHJ1bm5pbmcgbG9hZGxpbiBmcm9tIHRoZSBNUy1ET1MgYXV0b2V4ZWMuCisKKworYi4gVGltZW91dC9JUlEgZXJyb3JzLgorCisgIC0gSWYgeW91IGFsd2F5cyBnZXQgdGltZW91dCBlcnJvcnMsIGludGVycnVwdHMgZnJvbSB0aGUgZHJpdmUgYXJlCisgICAgcHJvYmFibHkgbm90IG1ha2luZyBpdCB0byB0aGUgaG9zdC4KKworICAtIElSUSBwcm9ibGVtcyBtYXkgYWxzbyBiZSBpbmRpY2F0ZWQgYnkgdGhlIG1lc3NhZ2UKKyAgICBgSVJRIHByb2JlIGZhaWxlZCAoPG4+KScgd2hpbGUgYm9vdGluZy4gIElmIDxuPiBpcyB6ZXJvLCB0aGF0CisgICAgbWVhbnMgdGhhdCB0aGUgc3lzdGVtIGRpZCBub3Qgc2VlIGFuIGludGVycnVwdCBmcm9tIHRoZSBkcml2ZSB3aGVuCisgICAgaXQgd2FzIGV4cGVjdGluZyBvbmUgKG9uIGFueSBmZWFzaWJsZSBJUlEpLiAgSWYgPG4+IGlzIG5lZ2F0aXZlLAorICAgIHRoYXQgbWVhbnMgdGhlIHN5c3RlbSBzYXcgaW50ZXJydXB0cyBvbiBtdWx0aXBsZSBJUlEgbGluZXMsIHdoZW4KKyAgICBpdCB3YXMgZXhwZWN0aW5nIHRvIHJlY2VpdmUganVzdCBvbmUgZnJvbSB0aGUgQ0RST00gZHJpdmUuCisKKyAgLSBEb3VibGUtY2hlY2sgeW91ciBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBJUlEKKyAgICBudW1iZXIgb2YgeW91ciBJREUgaW50ZXJmYWNlIG1hdGNoZXMgd2hhdCB0aGUgZHJpdmVyIGV4cGVjdHMuCisgICAgKFRoZSB1c3VhbCBhc3NpZ25tZW50cyBhcmUgMTQgZm9yIHRoZSBwcmltYXJ5ICgweDFmMCkgaW50ZXJmYWNlCisgICAgYW5kIDE1IGZvciB0aGUgc2Vjb25kYXJ5ICgweDE3MCkgaW50ZXJmYWNlLikgIEFsc28gYmUgc3VyZSB0aGF0CisgICAgeW91IGRvbid0IGhhdmUgc29tZSBvdGhlciBoYXJkd2FyZSB3aGljaCBtaWdodCBiZSBjb25mbGljdGluZyB3aXRoCisgICAgdGhlIElSUSB5b3UncmUgdXNpbmcuICBBbHNvIGNoZWNrIHRoZSBCSU9TIHNldHVwIGZvciB5b3VyIHN5c3RlbTsKKyAgICBzb21lIGhhdmUgdGhlIGFiaWxpdHkgdG8gZGlzYWJsZSBpbmRpdmlkdWFsIElSUSBsZXZlbHMsIGFuZCBJJ3ZlCisgICAgaGFkIG9uZSByZXBvcnQgb2YgYSBzeXN0ZW0gd2hpY2ggd2FzIHNoaXBwZWQgd2l0aCBJUlEgMTUgZGlzYWJsZWQKKyAgICBieSBkZWZhdWx0LgorCisgIC0gTm90ZSB0aGF0IG1hbnkgTVMtRE9TIENEUk9NIGRyaXZlcnMgd2lsbCBzdGlsbCBmdW5jdGlvbiBldmVuIGlmCisgICAgdGhlcmUgYXJlIGhhcmR3YXJlIHByb2JsZW1zIHdpdGggdGhlIGludGVycnVwdCBzZXR1cDsgdGhleQorICAgIGFwcGFyZW50bHkgZG9uJ3QgdXNlIGludGVycnVwdHMuCisKKyAgLSBJZiB5b3Ugb3duIGEgUGlvbmVlciBEUi1BMjRYLCB5b3UgX3dpbGxfIGdldCBuYXN0eSBlcnJvciBtZXNzYWdlcyAKKyAgICBvbiBib290IHN1Y2ggYXMgImlycSB0aW1lb3V0OiBzdGF0dXM9MHg1MCB7IERyaXZlUmVhZHkgU2Vla0NvbXBsZXRlIH0iCisgICAgVGhlIFBpb25lZXIgRFItQTI0WCBDRFJPTSBkcml2ZXMgYXJlIGZhaXJseSBwb3B1bGFyIHRoZXNlIGRheXMuCisgICAgVW5mb3J0dW5hdGVseSwgdGhlc2UgZHJpdmVzIHNlZW0gdG8gYmVjb21lIHZlcnkgY29uZnVzZWQgd2hlbiB3ZSBwZXJmb3JtCisgICAgdGhlIHN0YW5kYXJkIExpbnV4IEFUQSBkaXNrIGRyaXZlIHByb2JlLiBJZiB5b3Ugb3duIG9uZSBvZiB0aGVzZSBkcml2ZXMsCisgICAgeW91IGNhbiBieXBhc3MgdGhlIEFUQSBwcm9iaW5nIHdoaWNoIGNvbmZ1c2VzIHRoZXNlIENEUk9NIGRyaXZlcywgYnkgCisgICAgYWRkaW5nIGBhcHBlbmQ9ImhkWD1ub3Byb2JlIGhkWD1jZHJvbSInIHRvIHlvdXIgbGlsby5jb25mIGZpbGUgYW5kIHJ1bm5pbmcgCisgICAgbGlsbyAoYWdhaW4gd2hlcmUgWCBpcyB0aGUgZHJpdmUgbGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gd2hlcmUgeW91ciBkcml2ZSAKKyAgICBpcyBpbnN0YWxsZWQuKQorICAgIAorYy4gU3lzdGVtIGhhbmd1cHMuCisKKyAgLSBJZiB0aGUgc3lzdGVtIGxvY2tzIHVwIHdoZW4geW91IHRyeSB0byBhY2Nlc3MgdGhlIENEUk9NLCB0aGUgbW9zdAorICAgIGxpa2VseSBjYXVzZSBpcyB0aGF0IHlvdSBoYXZlIGEgYnVnZ3kgSURFIGFkYXB0ZXIgd2hpY2ggZG9lc24ndAorICAgIHByb3Blcmx5IGhhbmRsZSBzaW11bHRhbmVvdXMgdHJhbnNhY3Rpb25zIG9uIG11bHRpcGxlIGludGVyZmFjZXMuCisgICAgVGhlIG1vc3Qgbm90b3Jpb3VzIG9mIHRoZXNlIGlzIHRoZSBDTUQ2NDBCIGNoaXAuICBUaGlzIHByb2JsZW0gY2FuCisgICAgYmUgd29ya2VkIGFyb3VuZCBieSBzcGVjaWZ5aW5nIHRoZSBgc2VyaWFsaXplJyBvcHRpb24gd2hlbgorICAgIGJvb3RpbmcuICBSZWNlbnQga2VybmVscyBzaG91bGQgYmUgYWJsZSB0byBkZXRlY3QgdGhlIG5lZWQgZm9yCisgICAgdGhpcyBhdXRvbWF0aWNhbGx5IGluIG1vc3QgY2FzZXMsIGJ1dCB0aGUgZGV0ZWN0aW9uIGlzIG5vdAorICAgIGZvb2xwcm9vZi4gIFNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICBhYm91dCB0aGUgYHNlcmlhbGl6ZScgb3B0aW9uIGFuZCB0aGUgQ01ENjQwQi4KKworICAtIE5vdGUgdGhhdCBtYW55IE1TLURPUyBDRFJPTSBkcml2ZXJzIHdpbGwgd29yayB3aXRoIHN1Y2ggYnVnZ3kKKyAgICBoYXJkd2FyZSwgYXBwYXJlbnRseSBiZWNhdXNlIHRoZXkgbmV2ZXIgYXR0ZW1wdCB0byBvdmVybGFwIENEUk9NCisgICAgb3BlcmF0aW9ucyB3aXRoIG90aGVyIGRpc2sgYWN0aXZpdHkuCisKKworZC4gQ2FuJ3QgbW91bnQgYSBDRFJPTS4KKworICAtIElmIHlvdSBnZXQgZXJyb3JzIGZyb20gbW91bnQsIGl0IG1heSBoZWxwIHRvIGNoZWNrIGBkbWVzZycgdG8gc2VlCisgICAgaWYgdGhlcmUgYXJlIGFueSBtb3JlIHNwZWNpZmljIGVycm9ycyBmcm9tIHRoZSBkcml2ZXIgb3IgZnJvbSB0aGUKKyAgICBmaWxlc3lzdGVtLgorCisgIC0gTWFrZSBzdXJlIHRoZXJlJ3MgYSBDRFJPTSBsb2FkZWQgaW4gdGhlIGRyaXZlLCBhbmQgdGhhdCdzIGl0J3MgYW4KKyAgICBJU08gOTY2MCBkaXNjLiAgWW91IGNhbid0IG1vdW50IGFuIGF1ZGlvIENELgorCisgIC0gV2l0aCB0aGUgQ0RST00gaW4gdGhlIGRyaXZlIGFuZCB1bm1vdW50ZWQsIHRyeSBzb21ldGhpbmcgbGlrZQorCisgICAgICBjYXQgL2Rldi9jZHJvbSB8IG9kIHwgbW9yZQorCisgICAgSWYgeW91IHNlZSBhIGR1bXAsIHRoZW4gdGhlIGRyaXZlIGFuZCBkcml2ZXIgYXJlIHByb2JhYmx5IHdvcmtpbmcKKyAgICBPSywgYW5kIHRoZSBwcm9ibGVtIGlzIGF0IHRoZSBmaWxlc3lzdGVtIGxldmVsIChpLmUuLCB0aGUgQ0RST00gaXMKKyAgICBub3QgSVNPIDk2NjAgb3IgaGFzIGVycm9ycyBpbiB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUpLgorCisgIC0gSWYgeW91IHNlZSBgbm90IGEgYmxvY2sgZGV2aWNlJyBlcnJvcnMsIGNoZWNrIHRoYXQgdGhlIGRlZmluaXRpb25zCisgICAgb2YgdGhlIGRldmljZSBzcGVjaWFsIGZpbGVzIGFyZSBjb3JyZWN0LiAgVGhleSBzaG91bGQgYmUgYXMKKyAgICBmb2xsb3dzOgorCisgICAgICBicnctcnctLS0tICAgMSByb290ICAgICBkaXNrICAgICAgIDMsICAgMCBOb3YgMTEgMTg6NDggL2Rldi9oZGEKKyAgICAgIGJydy1ydy0tLS0gICAxIHJvb3QgICAgIGRpc2sgICAgICAgMywgIDY0IE5vdiAxMSAxODo0OCAvZGV2L2hkYgorICAgICAgYnJ3LXJ3LS0tLSAgIDEgcm9vdCAgICAgZGlzayAgICAgIDIyLCAgIDAgTm92IDExIDE4OjQ4IC9kZXYvaGRjCisgICAgICBicnctcnctLS0tICAgMSByb290ICAgICBkaXNrICAgICAgMjIsICA2NCBOb3YgMTEgMTg6NDggL2Rldi9oZGQKKworICAgIFNvbWUgZWFybHkgU2xhY2t3YXJlIHJlbGVhc2VzIGhhZCB0aGVzZSBkZWZpbmVkIGluY29ycmVjdGx5LiAgSWYKKyAgICB0aGVzZSBhcmUgd3JvbmcsIHlvdSBjYW4gcmVtYWtlIHRoZW0gYnkgcnVubmluZyB0aGUgc2NyaXB0CisgICAgc2NyaXB0cy9NQUtFREVWLmlkZS4gIChZb3UgbWF5IGhhdmUgdG8gbWFrZSBpdCBleGVjdXRhYmxlCisgICAgd2l0aCBjaG1vZCBmaXJzdC4pCisKKyAgICBJZiB5b3UgaGF2ZSBhIC9kZXYvY2Ryb20gc3ltYm9saWMgbGluaywgY2hlY2sgdGhhdCBpdCBpcyBwb2ludGluZworICAgIHRvIHRoZSBjb3JyZWN0IGRldmljZSBmaWxlLgorCisgICAgSWYgeW91IGhlYXIgcGVvcGxlIHRhbGtpbmcgb2YgdGhlIGRldmljZXMgYGhkMWEnIGFuZCBgaGQxYicsIHRoZXNlCisgICAgd2VyZSBvbGQgbmFtZXMgZm9yIHdoYXQgYXJlIG5vdyBjYWxsZWQgaGRjIGFuZCBoZGQuICBUaG9zZSBuYW1lcworICAgIHNob3VsZCBiZSBjb25zaWRlcmVkIG9ic29sZXRlLgorCisgIC0gSWYgbW91bnQgaXMgY29tcGxhaW5pbmcgdGhhdCB0aGUgaXNvOTY2MCBmaWxlc3lzdGVtIGlzIG5vdAorICAgIGF2YWlsYWJsZSwgYnV0IHlvdSBrbm93IGl0IGlzIChjaGVjayAvcHJvYy9maWxlc3lzdGVtcyksIHlvdQorICAgIHByb2JhYmx5IG5lZWQgYSBuZXdlciB2ZXJzaW9uIG9mIG1vdW50LiAgRWFybHkgdmVyc2lvbnMgd291bGQgbm90CisgICAgYWx3YXlzIGdpdmUgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlcy4KKworCitlLiBEaXJlY3RvcnkgbGlzdGluZ3MgYXJlIHVucHJlZGljdGFibHkgdHJ1bmNhdGVkLCBhbmQgYGRtZXNnJyBzaG93cworICAgYGJ1ZmZlciBib3RjaCcgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgZHJpdmVyLgorCisgIC0gVGhlcmUgd2FzIGEgYnVnIGluIHRoZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgaW4gMS4yLngga2VybmVscworICAgIHdoaWNoIGNvdWxkIGNhdXNlIHRoaXMuICBJdCB3YXMgZml4ZWQgaW4gMS4zLjAuICBJZiB5b3UgY2FuJ3QKKyAgICB1cGdyYWRlLCB5b3UgY2FuIHByb2JhYmx5IHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtIGJ5IHNwZWNpZnlpbmcgYQorICAgIGJsb2Nrc2l6ZSBvZiAyMDQ4IHdoZW4gbW91bnRpbmcuICAoTm90ZSB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvCisgICAgZGlyZWN0bHkgZXhlY3V0ZSBiaW5hcmllcyBvZmYgdGhlIENEUk9NIGluIHRoYXQgY2FzZS4pCisKKyAgICBJZiB5b3Ugc2VlIHRoaXMgaW4ga2VybmVscyBsYXRlciB0aGFuIDEuMy4wLCBwbGVhc2UgcmVwb3J0IGl0IGFzIGEKKyAgICBidWcuCisKKworZi4gRGF0YSBjb3JydXB0aW9uLgorCisgIC0gUmFuZG9tIGRhdGEgY29ycnVwdGlvbiB3YXMgb2NjYXNpb25hbGx5IG9ic2VydmVkIHdpdGggdGhlIEhpdGFjaGkKKyAgICBDRFItNzczMCBDRFJPTS4gSWYgeW91IGV4cGVyaWVuY2UgZGF0YSBjb3JydXB0aW9uLCB1c2luZyAiaGR4PXNsb3ciCisgICAgYXMgYSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIG1heSB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSwgYXQgdGhlCisgICAgZXhwZW5zZSBvZiBsb3cgc3lzdGVtIHBlcmZvcm1hbmNlLgorCisKKzYuIGNkY2hhbmdlLmMKKy0tLS0tLS0tLS0tLS0KKworLyoKKyAqIGNkY2hhbmdlLmMgIFstdl0gIDxkZXZpY2U+ICBbPHNsb3Q+XQorICoKKyAqIFRoaXMgbG9hZHMgYSBDRFJPTSBmcm9tIGEgc3BlY2lmaWVkIHNsb3QgaW4gYSBjaGFuZ2VyLCBhbmQgZGlzcGxheXMgCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbmdlciBzdGF0dXMuICBUaGUgZHJpdmUgc2hvdWxkIGJlIHVubW91bnRlZCBiZWZvcmUgCisgKiB1c2luZyB0aGlzIHByb2dyYW0uCisgKgorICogQ2hhbmdlciBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQgaWYgZWl0aGVyIHRoZSAtdiBmbGFnIGlzIHNwZWNpZmllZAorICogb3Igbm8gc2xvdCB3YXMgc3BlY2lmaWVkLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgb3JpZ2luYWxseSBmcm9tIEdlcmhhcmQgWnViZXIgPHp1YmVyQGJlcmxpbi5zbmFmdS5kZT4uCisgKiBDaGFuZ2VyIHN0YXR1cyBpbmZvcm1hdGlvbiwgYW5kIHJld3JpdGUgZm9yIHRoZSBuZXcgVW5pZm9ybSBDRFJPTSBkcml2ZXIKKyAqIGludGVyZmFjZSBieSBFcmlrIEFuZGVyc2VuIDxhbmRlcnNlZUBkZWJpYW4ub3JnPi4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyICpwcm9ncmFtOworCWNoYXIgKmRldmljZTsKKwlpbnQgZmQ7ICAgICAgICAgICAvKiBmaWxlIGRlc2NyaXB0b3IgZm9yIENELVJPTSBkZXZpY2UgKi8KKwlpbnQgc3RhdHVzOyAgICAgICAvKiByZXR1cm4gc3RhdHVzIGZvciBzeXN0ZW0gY2FsbHMgKi8KKwlpbnQgdmVyYm9zZSA9IDA7CisJaW50IHNsb3Q9LTEsIHhfc2xvdDsKKwlpbnQgdG90YWxfc2xvdHNfYXZhaWxhYmxlOworCisJcHJvZ3JhbSA9IGFyZ3ZbMF07CisKKwkrK2FyZ3Y7CisJLS1hcmdjOworCisJaWYgKGFyZ2MgPCAxIHx8IGFyZ2MgPiAzKSB7CisJCWZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAlcyBbLXZdIDxkZXZpY2U+IFs8c2xvdD5dXG4iLAorCQkJIHByb2dyYW0pOworCQlmcHJpbnRmIChzdGRlcnIsICIgICAgICAgU2xvdHMgYXJlIG51bWJlcmVkIDEgLS0gbi5cbiIpOworCQlleGl0ICgxKTsKKwl9CisgCisgICAgICAgaWYgKHN0cmNtcCAoYXJndlswXSwgIi12IikgPT0gMCkgeworICAgICAgICAgICAgICAgIHZlcmJvc2UgPSAxOworICAgICAgICAgICAgICAgICsrYXJndjsKKyAgICAgICAgICAgICAgICAtLWFyZ2M7CisgICAgICAgIH0KKyAKKwlkZXZpY2UgPSBhcmd2WzBdOworIAorCWlmIChhcmdjID09IDIpCisJCXNsb3QgPSBhdG9pIChhcmd2WzFdKSAtIDE7CisKKwkvKiBvcGVuIGRldmljZSAqLyAKKwlmZCA9IG9wZW4oZGV2aWNlLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOworCWlmIChmZCA8IDApIHsKKwkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IG9wZW4gZmFpbGVkIGZvciBgJXMnOiAlc1xuIiwKKwkJCSBwcm9ncmFtLCBkZXZpY2UsIHN0cmVycm9yIChlcnJubykpOworCQlleGl0ICgxKTsKKwl9CisKKwkvKiBDaGVjayBDRCBwbGF5ZXIgc3RhdHVzICovIAorCXRvdGFsX3Nsb3RzX2F2YWlsYWJsZSA9IGlvY3RsIChmZCwgQ0RST01fQ0hBTkdFUl9OU0xPVFMpOworCWlmICh0b3RhbF9zbG90c19hdmFpbGFibGUgPD0gMSApIHsKKwkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IERldmljZSBgJXMnIGlzIG5vdCBhbiBBVEFQSSAiCisJCQkiY29tcGxpYW50IENEIGNoYW5nZXIuXG4iLCBwcm9ncmFtLCBkZXZpY2UpOworCQlleGl0ICgxKTsKKwl9CisKKwlpZiAoc2xvdCA+PSAwKSB7CisJCWlmIChzbG90ID49IHRvdGFsX3Nsb3RzX2F2YWlsYWJsZSkgeworCQkJZnByaW50ZiAoc3RkZXJyLCAiQmFkIHNsb3QgbnVtYmVyLiAgIgorCQkJCSAiU2hvdWxkIGJlIDEgLS0gJWQuXG4iLAorCQkJCSB0b3RhbF9zbG90c19hdmFpbGFibGUpOworCQkJZXhpdCAoMSk7CisJCX0KKworCQkvKiBsb2FkICovIAorCQlzbG90PWlvY3RsIChmZCwgQ0RST01fU0VMRUNUX0RJU0MsIHNsb3QpOworCQlpZiAoc2xvdDwwKSB7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCQlwZXJyb3IgKCJDRFJPTV9TRUxFQ1RfRElTQyAiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoc2xvdCA8IDAgfHwgdmVyYm9zZSkgeworCisJCXN0YXR1cz1pb2N0bCAoZmQsIENEUk9NX1NFTEVDVF9ESVNDLCBDRFNMX0NVUlJFTlQpOworCQlpZiAoc3RhdHVzPDApIHsKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJcGVycm9yICgiIENEUk9NX1NFTEVDVF9ESVNDIik7CisJCQlleGl0KDEpOworCQl9CisJCXNsb3Q9c3RhdHVzOworCisJCXByaW50ZiAoIkN1cnJlbnQgc2xvdDogJWRcbiIsIHNsb3QrMSk7CisJCXByaW50ZiAoIlRvdGFsIHNsb3RzIGF2YWlsYWJsZTogJWRcbiIsCisJCQl0b3RhbF9zbG90c19hdmFpbGFibGUpOworCisJCXByaW50ZiAoIkRyaXZlIHN0YXR1czogIik7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gaW9jdGwgKGZkLCBDRFJPTV9EUklWRV9TVEFUVVMsIENEU0xfQ1VSUkVOVCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1czwwKSB7CisgICAgICAgICAgICAgICAgICBwZXJyb3IoIiBDRFJPTV9EUklWRV9TVEFUVVMiKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugc3dpdGNoKHN0YXR1cykgeworCQljYXNlIENEU19ESVNDX09LOgorCQkJcHJpbnRmICgiUmVhZHkuXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENEU19UUkFZX09QRU46CisJCQlwcmludGYgKCJUcmF5IE9wZW4uXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENEU19EUklWRV9OT1RfUkVBRFk6CisJCQlwcmludGYgKCJEcml2ZSBOb3QgUmVhZHkuXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRmICgiVGhpcyBTaG91bGQgbm90IGhhcHBlbiFcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKHhfc2xvdD0wOyB4X3Nsb3Q8dG90YWxfc2xvdHNfYXZhaWxhYmxlOyB4X3Nsb3QrKykgeworCQkJcHJpbnRmICgiU2xvdCAlMmQ6ICIsIHhfc2xvdCsxKTsKKyAgICAgICAgICAgICAJCXN0YXR1cyA9IGlvY3RsIChmZCwgQ0RST01fRFJJVkVfU1RBVFVTLCB4X3Nsb3QpOworICAgICAgICAgICAgIAkJaWYgKHN0YXR1czwwKSB7CisgICAgICAgICAgICAgCQkgICAgIHBlcnJvcigiIENEUk9NX0RSSVZFX1NUQVRVUyIpOworICAgICAgICAgICAgIAkJfSBlbHNlIHN3aXRjaChzdGF0dXMpIHsKKwkJCWNhc2UgQ0RTX0RJU0NfT0s6CisJCQkJcHJpbnRmICgiRGlzYyBwcmVzZW50LiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBDRFNfTk9fRElTQzogCisJCQkJcHJpbnRmICgiRW1wdHkgc2xvdC4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ0RTX1RSQVlfT1BFTjoKKwkJCQlwcmludGYgKCJDRC1ST00gdHJheSBvcGVuLlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIENEU19EUklWRV9OT1RfUkVBRFk6CisJCQkJcHJpbnRmICgiQ0QtUk9NIGRyaXZlIG5vdCByZWFkeS5cbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBDRFNfTk9fSU5GTzoKKwkJCQlwcmludGYgKCJObyBJbmZvcm1hdGlvbiBhdmFpbGFibGUuIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZiAoIlRoaXMgU2hvdWxkIG5vdCBoYXBwZW4hXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJICBpZiAoc2xvdCA9PSB4X3Nsb3QpIHsKKyAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGlvY3RsIChmZCwgQ0RST01fRElTQ19TVEFUVVMpOworICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1czwwKSB7CisJCQlwZXJyb3IoIiBDRFJPTV9ESVNDX1NUQVRVUyIpOworICAgICAgICAgICAgICAgICAgfQorCQkgIHN3aXRjaCAoc3RhdHVzKSB7CisJCQljYXNlIENEU19BVURJTzoKKwkJCQlwcmludGYgKCJcdEF1ZGlvIGRpc2MuXHQiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ0RTX0RBVEFfMToKKwkJCWNhc2UgQ0RTX0RBVEFfMjoKKwkJCQlwcmludGYgKCJcdERhdGEgZGlzYyB0eXBlICVkLlx0Iiwgc3RhdHVzLUNEU19EQVRBXzErMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIENEU19YQV8yXzE6CisJCQljYXNlIENEU19YQV8yXzI6CisJCQkJcHJpbnRmICgiXHRYQSBkYXRhIGRpc2MgdHlwZSAlZC5cdCIsIHN0YXR1cy1DRFNfWEFfMl8xKzEpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGYgKCJcdFVua25vd24gZGlzYyB0eXBlIDB4JXghXHQiLCBzdGF0dXMpOworCQkJCWJyZWFrOworCQkJfQorCQkJfQorICAgICAgICAgICAgICAgICAgCXN0YXR1cyA9IGlvY3RsIChmZCwgQ0RST01fTUVESUFfQ0hBTkdFRCwgeF9zbG90KTsKKyAgICAgICAgICAgICAgICAgIAlpZiAoc3RhdHVzPDApIHsKKwkJCQlwZXJyb3IoIiBDRFJPTV9NRURJQV9DSEFOR0VEIik7CisgICAgICAgICAgICAgICAgICAJfQorCQkgIAlzd2l0Y2ggKHN0YXR1cykgeworCQkJY2FzZSAxOgorCQkJCXByaW50ZiAoIkNoYW5nZWQuXG4iKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmICgiXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIGNsb3NlIGRldmljZSAqLworCXN0YXR1cyA9IGNsb3NlIChmZCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBjbG9zZSBmYWlsZWQgZm9yIGAlcyc6ICVzXG4iLAorCQkJIHByb2dyYW0sIGRldmljZSwgc3RyZXJyb3IgKGVycm5vKSk7CisJCWV4aXQgKDEpOworCX0KKyAKKwlleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vaXNwMTYgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lzcDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODY1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lzcDE2CkBAIC0wLDAgKzEsMTAwIEBACisgLS0gRG9jdW1lbnRhdGlvbi9jZHJvbS9pc3AxNgorCitEb2NzIGJ5IEVyaWMgdmFuIGRlciBNYWFyZWwgPEguVC5NLnYuZC5NYWFyZWxAbWFyaW4ubmw+CisKK1RoaXMgaXMgdGhlIFJFQURNRSBmb3IgdmVyc2lvbiAwLjYgb2YgdGhlIGNkcm9tIGludGVyZmFjZSBvbiBhbgorSVNQMTYsIE1BRDE2IG9yIE1vemFydCBzb3VuZCBjYXJkLgorCitUaGUgZGV0ZWN0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgaW50ZXJmYWNlIHVzZWQgdG8gYmUgaW5jbHVkZWQKK2luIGJvdGggdGhlIHNqY2QgYW5kIG9wdGNkIGNkcm9tIGRyaXZlci4gRHJpdmVzIHN1cHBvcnRlZCBieSB0aGVzZQorZHJpdmVycyBjYW1lIHBhY2tlZCB3aXRoIE1lZGlhIE1hZ2ljJ3MgbXVsdGkgbWVkaWEga2l0LCB3aGljaCBhbHNvCitpbmNsdWRlZCB0aGUgSVNQMTYgY2FyZC4gVGhlIGlkZWEgKHRoYW5rcyBMZW8gU3BpZWttYW4pCit0byBtb3ZlIGl0IGZyb20gdGhlc2UgZHJpdmVycyBpbnRvIGEgc2VwYXJhdGUgbW9kdWxlIGFuZCBtb3Jlb3Zlciwgbm90IHRvCityZWx5IG9uIHRoZSBNQUQxNiBzb3VuZCBkcml2ZXIsIGFyZSBhcyBmb2xsb3dzOgorLWR1cGxpY2F0aW9uIG9mIGNvZGUgaW4gdGhlIGtlcm5lbCBpcyBhIHdhc3RlIG9mIHJlc291cmNlcyBhbmQgc2hvdWxkCisgYmUgYXZvaWRlZDsKKy1ob3dldmVyLCBrZXJuZWxzIGFuZCBub3RhYmx5IHRob3NlIGluY2x1ZGVkIHdpdGggTGludXggZGlzdHJpYnV0aW9ucworIChjZiBTbGFja3dhcmUgMy4wIGluY2x1ZGVkIHZlcnNpb24gMC41IG9mIHRoZSBpc3AxNiBjb25maWd1cmF0aW9uCisgY29kZSBpbmNsdWRlZCBpbiB0aGUgZHJpdmVycykgZG9uJ3QgYWx3YXlzIGNvbWUgd2l0aCBzb3VuZCBzdXBwb3J0CisgaW5jbHVkZWQuIEVzcGVjaWFsbHkgd2hlbiB0aGV5IGFscmVhZHkgaW5jbHVkZSBhIGJ1bmNoIG9mIGNkcm9tIGRyaXZlcnMuCisgSGVuY2UsIHRoZSBjZHJvbSBpbnRlcmZhY2Ugc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSBfaW5kZXBlbmRlbnRseV8gb2YKKyBzb3VuZCBzdXBwb3J0LgorCitUaGUgSVNQMTYsIE1BRDE2IGFuZCBNb3phcnQgc291bmQgY2FyZHMgaGF2ZSBhbiBPUFRpIDgyQzkyOCBvciBhbgorT1BUaSA4MkM5MjkgY2hpcC4gIFRoZSBpbnRlcmZhY2Ugb24gdGhlc2UgY2FyZHMgc2hvdWxkIHdvcmsgd2l0aAorYW55IGNkcm9tIGF0dGFjaGVkIHRvIHRoZSBjYXJkLCB3aGljaCBpcyAnZWxlY3RyaWNhbGx5JyBjb21wYXRpYmxlCit3aXRoIFNhbnlvL1BhbmFzb25pYywgU29ueSBvciBNaXRzdW1pIG5vbi1pZGUgZHJpdmVzLiBIb3dldmVyLCB0aGUKK2NvbW1hbmQgc2V0cyBmb3IgYW55IHByb3ByaWV0YXJ5IGRyaXZlcyBtYXkgZGlmZmVyCisoYW5kIGhlbmNlIG1heSBub3QgYmUgc3VwcG9ydGVkIGluIHRoZSBrZXJuZWwpIGZyb20gdGhlc2UgZm91ciB0eXBlcy4KK0ZvciBhIGZhY3QgSSBrbm93IHRoZSBpbnRlcmZhY2Ugd29ya3MgYW5kIHRoZSB3YXkgb2YgY29uZmlndXJhdGlvbgorYXMgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnRhdGlvbiB3b3JrcyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorc2pjZCAoaW4gU2FueW8vUGFuYXNvbmljIGNvbXBhdGliaWxpdHkgbW9kZSkgY2Ryb20gZHJpdmVycworKHByb2JhYmx5IHdpdGggdGhlIG9wdGNkIChpbiBTb255IGNvbXBhdGliaWxpdHkgbW9kZSkgYXMgd2VsbCkuCitJZiB5b3UgaGF2ZSBzdWNoIGFuIE9QVGkgYmFzZWQgc291bmQgY2FyZCBhbmQgeW91IHdhbnQgdG8gdXNlIHRoZQorY2Ryb20gaW50ZXJmYWNlIHdpdGggYSBjZHJvbSBkcml2ZSBzdXBwb3J0ZWQgYnkgYW55IG9mIHRoZSBvdGhlciBjZHJvbQorZHJpdmVycywgaXQgd2lsbCBwcm9iYWJseSB3b3JrLiBQbGVhc2UgbGV0IG1lIGtub3cgYW55IGV4cGVyaWVuY2UgeW91CittaWdodCBoYXZlKS4KK0kgdW5kZXJzdGFuZCB0aGF0IGNhcmRzIGJhc2VkIG9uIHRoZSBPUFRpIDgyQzkyOSBjaGlwcyBtYXkgYmUgY29uZmlndXJlZAorKGhhcmR3YXJlIGp1bXBlcnMgdGhhdCBpcykgYXMgYW4gSURFIGludGVyZmFjZS4gSW5pdGlhbGlzYXRpb24gb2Ygc3VjaCBhCitjYXJkIGluIHRoaXMgbW9kZSBpcyBub3Qgc3VwcG9ydGVkICh5ZXQ/KS4KKworVGhlIHN1Z2dlc3Rpb24gdG8gY29uZmlndXJlIHRoZSBJU1AxNiBldGMuIHNvdW5kIGNhcmQgYnkgYm9vdGluZyBET1MgYW5kIAorZG8gYSB3YXJtIHJlYm9vdCB0byBib290IExpbnV4IHNvbWVob3cgZG9lc24ndCB3b3JrLCBhdCBsZWFzdCBub3QKK29uIG15IG1hY2hpbmUgKElQQyBQOTApLCB3aXRoIHRoZSBPUFRpIDgyQzkyOCBiYXNlZCBjYXJkLgorCitCb290aW5nIHRoZSBrZXJuZWwgdGhyb3VnaCB0aGUgYm9vdCBtYW5hZ2VyIExJTE8gYWxsb3dzIHRoZSB1c2UKK29mIHNvbWUgY29tbWFuZCBsaW5lIG9wdGlvbnMgb24gdGhlICdMSUxPIGJvb3Q6JyBwcm9tcHQuIEF0IGJvb3QgdGltZQorcHJlc3MgQWx0IG9yIFNoaWZ0IHdoaWxlIHRoZSBMSUxPIHByb21wdCBpcyB3cml0dGVuIG9uIHRoZSBzY3JlZW4gYW5kIGVudGVyCithbnkga2VybmVsIG9wdGlvbnMuIEFsdGVybmF0aXZlbHkgdGhlc2Ugb3B0aW9ucyBtYXkgYmUgdXNlZCBpbgordGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gaW4gL2V0Yy9saWxvLmNvbmYuIEFkZGluZyAnYXBwZW5kPSI8Y21kX2xpbmVfb3B0aW9ucz4iJword2lsbCBkbyB0aGUgdHJpY2sgYXMgd2VsbC4KK1RoZSBzeW50YXggb2YgJ2NtZF9saW5lX29wdGlvbnMnIGlzCisKKyAgICAgICAgaXNwMTY9Wzxwb3J0PlssPGlycT5bLDxkbWE+XV1dW1ssXTxkcml2ZV90eXBlPl0KKworSWYgdGhlcmUgaXMgbm8gSVNQMTYgb3IgY29tcGF0aWJsZXMgZGV0ZWN0ZWQsIHRoZXJlJ3MgcHJvYmFibHkgbm8gaGFybSBkb25lLgorVGhlc2Ugb3B0aW9ucyBpbmRpY2F0ZSB0aGUgdmFsdWVzIHRoYXQgeW91ciBjZHJvbSBkcml2ZSBoYXMgYmVlbiAob3Igd2lsbCBiZSkKK2NvbmZpZ3VyZWQgdG8gdXNlLgorVmFsaWQgdmFsdWVzIGZvciB0aGUgYmFzZSBpL28gYWRkcmVzcyBhcmU6CisgIHBvcnQ9MHgzNDAsMHgzMjAsMHgzMzAsMHgzNjAKK2ZvciB0aGUgaW50ZXJydXB0IHJlcXVlc3QgbnVtYmVyIAorICBpcnE9MCwzLDUsNyw5LDEwLDExCitmb3IgdGhlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGxpbmUKKyAgZG1hPTAsMyw1LDYsNworYW5kIGZvciB0aGUgdHlwZSBvZiBkcml2ZQorICBkcml2ZV90eXBlPW5vaXNwMTYsU2FueW8sUGFuYXNvbmljLFNvbnksTWl0c3VtaS4KK05vdGUgdGhhdCB0aGVzZSBvcHRpb25zIGFyZSBjYXNlIHNlbnNpdGl2ZS4KK1RoZSB2YWx1ZXMgMCBmb3IgaXJxIGFuZCBkbWEgaW5kaWNhdGUgdGhhdCB0aGV5IGFyZSBub3QgdXNlZCwgYW5kCit0aGUgZHJpdmUgd2lsbCBiZSB1c2VkIGluICdwb2xsaW5nJyBtb2RlLiBUaGUgdmFsdWVzIDUgYW5kIDcgZm9yIGlycQorc2hvdWxkIGJlIGF2b2lkZWQgaW4gb3JkZXIgdG8gYXZvaWQgYW55IGNvbmZsaWN0cyB3aXRoIG9wdGlvbmFsCitzb3VuZCBjYXJkIGNvbmZpZ3VyYXRpb24uCitUaGUgc3ludGF4IG9mIHRoZSBjb21tYW5kIGxpbmUgZG9lcyBub3QgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YKK2lycSB3aGVuIHRoZXJlJ3Mgbm90aGluZyBzcGVjaWZpZWQgZm9yIHRoZSBiYXNlIGFkZHJlc3MgYW5kIG5vCitzcGVjaWZpY2F0aW9uIG9mIGRtYSB3aGVuIHRoZXJlIGlzIG5vIHNwZWNpZmljYXRpb24gb2YgaXJxLgorVGhlIHZhbHVlICdub2lzcDE2JyBmb3IgZHJpdmVfdHlwZSwgd2hpY2ggbWF5IGJlIHVzZWQgYXMgdGhlIGZpcnN0Citub24taW50ZWdlciBvcHRpb24gdmFsdWUgKGUuZy4gJ2lzcDE2PW5vaXNwMTYnKSwgbWFrZXMgc3VyZSB0aGF0IHByb2JpbmcKK2ZvciBhbmQgc3Vic2VxdWVudCBjb25maWd1cmF0aW9uIG9mIGFuIElTUDE2LWNvbXBhdGlibGUgY2FyZCBpcyBza2lwcGVkCithbGwgdG9nZXRoZXIuIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBvdmVyY29tZSBwb3NzaWJsZSBjb25mbGljdHMgd2hpY2gKK21heSBhcmlzZSB3aGlsZSB0aGUga2VybmVsIGlzIHByb2JpbmcgeW91ciBoYXJkd2FyZS4KK1RoZSBkZWZhdWx0IHZhbHVlcyBhcmUKKyAgcG9ydD0weDM0MAorICBpcnE9MAorICBkbWE9MAorICBkcml2ZV90eXBlPVNhbnlvCityZWZsZWN0aW5nIG15IG93biBjb25maWd1cmF0aW9uLiBUaGUgZGVmYXVsdHMgY2FuIGJlIGNoYW5nZWQgaW4KK3RoZSBmaWxlIGxpbnV4L2RyaXZlcnMvY2Ryb20vaXBzMTYuaC4KKworVGhlIGNkcm9tIGludGVyZmFjZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4gdGltZSBieSBsb2FkaW5nIHRoZQoraW5pdGlhbGlzYXRpb24gZHJpdmVyIGFzIGEgbW9kdWxlLiBJbiB0aGF0IGNhc2UsIHRoZSBpbnRlcmZhY2UKK3BhcmFtZXRlcnMgY2FuIGJlIHNldCBieSBnaXZpbmcgYXBwcm9wcmlhdGUgdmFsdWVzIG9uIHRoZSBjb21tYW5kCitsaW5lLiBDb25maWd1cmluZyB0aGUgZHJpdmVyIGNhbiB0aGVuIGJlIGRvbmUgYnkgdGhlIGZvbGxvd2luZworY29tbWFuZCAoYXNzdW1pbmcgeW91IGhhdmUgaXNvMTYubyBpbnN0YWxsZWQgaW4gYSBwcm9wZXIgcGxhY2UpOgorCisgIGluc21vZCBpc3AxNi5vIGlzcDE2X2Nkcm9tX2Jhc2U9PHBvcnQ+IGlzcDE2X2Nkcm9tX2lycT08aXJxPiBcCisgICAgaXNwMTZfY2Ryb21fZG1hPTxkbWE+IGlzcDE2X2Nkcm9tX3R5cGU9PGRyaXZlX3R5cGU+CisKK3doZXJlIHBvcnQsIGlycSwgZG1hIGFuZCBkcml2ZV90eXBlIGNhbiBoYXZlIGFueSBvZiB0aGUgdmFsdWVzIG1lbnRpb25lZAorYWJvdmUuCisKKworSGF2ZSBmdW4hCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL21jZHggYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL21jZHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhYzRiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vbWNkeApAQCAtMCwwICsxLDI5IEBACitJZiB5b3UgYXJlIHVzaW5nIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUsIHlvdSBjYW4gc3BlY2lmeSB5b3VyIHBvcnRzIGFuZCBJUlFzCitsaWtlCisKKyAjIGluc21vZCBtY2R4Lm8gbWNkeD0weDMwMCwxMSwweDMwNCw1CisKK2FuZCBzbyBvbiAoImFkZHJlc3MsSVJRIiBwYWlycykuCitUaGlzIHdpbGwgb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gaW4gbWNkeC5oLgorCitUaGlzIGRyaXZlcjoKKworICAgIG8gICBoYW5kbGVzIFhBIGFuZCAoaG9wZWZ1bGx5KSBtdWx0aSBzZXNzaW9uIENEcyBhcyB3ZWxsIGFzCisgICAgICAgIG9yZGluYXJ5IENEczsKKyAgICBvICAgc3VwcG9ydHMgdXAgdG8gNSBkcml2ZXMgKG9mIGNvdXJzZSwgeW91J2xsIG5lZWQgZnJlZSAKKyAgICAgICAgSVJRcywgaS9vIHBvcnRzIGFuZCBzbG90cyk7CisgICAgbyAgIHBsYXlzIGF1ZGlvCisKK1RoaXMgdmVyc2lvbiBkb2Vzbid0IHN1cHBvcnQgeWV0OgorCisgICAgbyAgIHNoYXJlZCBJUlFzIChidXQgaXQgc2VlbXMgdG8gYmUgcG9zc2libGUgLSBJJ3ZlIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIGNvbm5lY3RlZCB0d28gZHJpdmVzIHRvIHRoZSBzYW1lIGlycS4gIFNvIGl0J3MgYG9ubHknIGEgCisgICAgICAgICAgICAgICAgcHJvYmxlbSBvZiB0aGUgZHJpdmVyLikKKworVGhpcyBkcml2ZXIgbmV2ZXIgd2lsbDoKKworICAgIG8gICBSZWFkIGRpZ2l0YWwgYXVkaW8gKGkuZS4gY29weSBkaXJlY3RseSksIGR1ZSB0byBtaXNzaW5nCisgICAgICAgIGhhcmR3YXJlIGZlYXR1cmVzLiAKKworCitoZWlrb0Bsb3R0ZS5zYXguZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vb3B0Y2QgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL29wdGNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDZjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL29wdGNkCkBAIC0wLDAgKzEsNTcgQEAKK1RoaXMgaXMgdGhlIFJFQURNRSBmaWxlIGZvciB0aGUgT3B0aWNzIFN0b3JhZ2UgODAwMCBBVCBDRFJPTSBkZXZpY2UgZHJpdmVyLgorCitUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBzby1jYWxsZWQgJ0RPTFBISU4nIGRyaXZlLCB3aXRoIHRoZSAzNC1waW4KK1NvbnktY29tcGF0aWJsZSBpbnRlcmZhY2UuIEZvciB0aGUgSURFLWNvbXBhdGlibGUgT3B0aWNzIFN0b3JhZ2UgODAwMQorZHJpdmUsIHlvdSB3aWxsIHdhbnQgdGhlIEFUQVBJIENEUk9NIGRyaXZlci4gVGhlIGRyaXZlciBhbHNvIHNlZW1zIHRvCit3b3JrIHdpdGggdGhlIExhc2VybWF0ZSBDUjMyOEEuIElmIHlvdSBoYXZlIGEgZHJpdmUgdGhhdCB3b3JrcyB3aXRoCit0aGlzIGRyaXZlciwgYW5kIHRoYXQgZG9lc24ndCByZXBvcnQgaXRzZWxmIGFzIERPTFBISU4sIHBsZWFzZSBkcm9wIG1lCithIG1haWwuCisKK1RoZSBzdXBwb3J0IGZvciBtdWx0aXNlc3Npb24gQ0RzIGlzIGluIEFMUEhBIHN0YWdlLiBJZiB5b3UgdXNlIGl0LAorcGxlYXNlIG1haWwgbWUgeW91ciBleHBlcmllbmNlcy4gTXVsdGlzZXNzaW9uIHN1cHBvcnQgY2FuIGJlIGRpc2FibGVkCithdCBjb21waWxlIHRpbWUuCisKK1lvdSBjYW4gZmluZCBzb21lIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBkcml2ZXIgYXQKKyAgICAgIGR1dGV0dGUuZXQudHVkZWxmdC5ubDovcHViL2xpbnV4LworYW5kIGF0IEViZXJoYXJkJ3MgbWlycm9yCisgICAgICBmdHAuZ3dkZy5kZTovcHViL2xpbnV4L2Nkcm9tL2RyaXZlcnMvb3B0aWNzLworCitCZWZvcmUgeW91IGNhbiB1c2UgdGhlIGRyaXZlciwgeW91IGhhdmUgdG8gY3JlYXRlIHRoZSBkZXZpY2UgZmlsZSBvbmNlOgorICMgbWtub2QgL2Rldi9vcHRjZDAgYiAxNyAwCisKK1RvIHNwZWNpZnkgdGhlIGJhc2UgYWRkcmVzcyBpZiB0aGUgZHJpdmVyIGlzICJjb21waWxlZC1pbiIgdG8geW91ciBrZXJuZWwsCit5b3UgY2FuIHVzZSB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBpdGVtIChMSUxPIG9wdGlvbikKKyAgICAgICAgICAgICBvcHRjZD0weDM0MAord2l0aCB0aGUgcmlnaHQgYWRkcmVzcy4KKworSWYgeW91IGhhdmUgY29tcGlsZWQgb3B0Y2QgYXMgYSBtb2R1bGUsIHlvdSBjYW4gbG9hZCBpdCB3aXRoCisgIyBpbnNtb2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcy9vcHRjZC5vCitvcgorICMgaW5zbW9kIC91c3Ivc3JjL2xpbnV4L21vZHVsZXMvb3B0Y2QubyBvcHRjZD0weDM0MAord2l0aCB0aGUgbWF0Y2hpbmcgYWRkcmVzcyB2YWx1ZSBvZiB5b3VyIGludGVyZmFjZSBjYXJkLgorCitUaGUgZHJpdmVyIGVtcGxveXMgYSBudW1iZXIgb2YgYnVmZmVycyB0byBkbyByZWFkLWFoZWFkIGFuZCBibG9jayBzaXplCitjb252ZXJzaW9uLiBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaXMgY29uZmlndXJhYmxlIGluIG9wdGNkLmgsIGFuZCBoYXMKK2luZmx1ZW5jZSBvbiB0aGUgZHJpdmVyIHBlcmZvcm1hbmNlLiBGb3IgbXkgbWFjaGluZSAoYSBQNzUpLCA2IGJ1ZmZlcnMKK3NlZW1zIG9wdGltYWwsIGFzIGNhbiBiZSBzZWVuIGZyb20gdGhpcyB0YWJsZToKKworI2J1ZnMJa2IvcwklY3B1CisxCTk3CTAuMQorMgkxOTEJMC4zCiszCTE4OAkwLjIKKzQJMjQ2CTAuMworNQkxODkJMTkKKzYJMjgwCTAuNAorNwkyODEJNy4wCis4CTI0NgkyLjgKKzE2CTI4MQkzLjQKKworSWYgeW91IGdldCBhIHRocm91Z2hwdXQgc2lnbmlmaWNhbnRseSBiZWxvdyAzMDAga2IvcywgdHJ5IHR3ZWFraW5nCitOX0JVRlMsIGFuZCBkb24ndCBmb3JnZXQgdG8gbWFpbCBtZSB5b3VyIHJlc3VsdHMhCisKK0knZCBhcHByZWNpYXRlIHN1Y2Nlc3MvZmFpbHVyZSByZXBvcnRzLiBJZiB5b3UgZmluZCBhIGJ1ZywgdHJ5CityZWNvbXBpbGluZyB0aGUgZHJpdmVyIHdpdGggc29tZSBzdHJhdGVnaWNhbGx5IGNob3NlbiBkZWJ1ZyBvcHRpb25zCisodGhlc2UgY2FuIGJlIGZvdW5kIGluIG9wdGNkLmgpIGFuZCBpbmNsdWRlIHRoZSBtZXNzYWdlcyBnZW5lcmF0ZWQgaW4KK3lvdXIgYnVnIHJlcG9ydC4gR29vZCBsdWNrLgorCitMZW8gU3BpZWttYW4gKHNwaWVrbWFuQGR1dGV0dGUuZXQudHVkZWxmdC5ubCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vcGFja2V0LXdyaXRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9wYWNrZXQtd3JpdGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q0NGM1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vcGFja2V0LXdyaXRpbmcudHh0CkBAIC0wLDAgKzEsOTcgQEAKK0dldHRpbmcgc3RhcnRlZCBxdWljaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gU2VsZWN0IHBhY2tldCBzdXBwb3J0IGluIHRoZSBibG9jayBkZXZpY2Ugc2VjdGlvbiBhbmQgVURGIHN1cHBvcnQgaW4KKyAgdGhlIGZpbGUgc3lzdGVtIHNlY3Rpb24uCisKKy0gQ29tcGlsZSBhbmQgaW5zdGFsbCBrZXJuZWwgYW5kIG1vZHVsZXMsIHJlYm9vdC4KKworLSBZb3UgbmVlZCB0aGUgdWRmdG9vbHMgcGFja2FnZSAocGt0c2V0dXAsIG1rdWRmZnMsIGNkcnd0b29sKS4KKyAgRG93bmxvYWQgZnJvbSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4LXVkZi8KKworLSBHcmFiIGEgbmV3IENELVJXIGRpc2MgYW5kIGZvcm1hdCBpdCAoYXNzdW1pbmcgQ0QtUlcgaXMgaGRjLCBzdWJzdGl0dXRlCisgIGFzIGFwcHJvcHJpYXRlKToKKwkjIGNkcnd0b29sIC1kIC9kZXYvaGRjIC1xCisKKy0gU2V0dXAgeW91ciB3cml0ZXIKKwkjIHBrdHNldHVwIGRldl9uYW1lIC9kZXYvaGRjCisKKy0gTm93IHlvdSBjYW4gbW91bnQgL2Rldi9wa3RjZHZkL2Rldl9uYW1lIGFuZCBjb3B5IGZpbGVzIHRvIGl0LiBFbmpveSEKKwkjIG1vdW50IC9kZXYvcGt0Y2R2ZC9kZXZfbmFtZSAvY2Ryb20gLXQgdWRmIC1vIHJ3LG5vYXRpbWUKKworCitQYWNrZXQgd3JpdGluZyBmb3IgRFZELVJXIG1lZGlhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RWRC1SVyBkaXNjcyBjYW4gYmUgd3JpdHRlbiB0byBtdWNoIGxpa2UgQ0QtUlcgZGlzY3MgaWYgdGhleSBhcmUgaW4KK3RoZSBzbyBjYWxsZWQgInJlc3RyaWN0ZWQgb3ZlcndyaXRlIiBtb2RlLiBUbyBwdXQgYSBkaXNjIGluIHJlc3RyaWN0ZWQKK292ZXJ3cml0ZSBtb2RlLCBydW46CisKKwkjIGR2ZCtydy1mb3JtYXQgL2Rldi9oZGMKKworWW91IGNhbiB0aGVuIHVzZSB0aGUgZGlzYyB0aGUgc2FtZSB3YXkgeW91IHdvdWxkIHVzZSBhIENELVJXIGRpc2M6CisKKwkjIHBrdHNldHVwIGRldl9uYW1lIC9kZXYvaGRjCisJIyBtb3VudCAvZGV2L3BrdGNkdmQvZGV2X25hbWUgL2Nkcm9tIC10IHVkZiAtbyBydyxub2F0aW1lCisKKworUGFja2V0IHdyaXRpbmcgZm9yIERWRCtSVyBtZWRpYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBY2NvcmRpbmcgdG8gdGhlIERWRCtSVyBzcGVjaWZpY2F0aW9uLCBhIGRyaXZlIHN1cHBvcnRpbmcgRFZEK1JXIGRpc2NzCitzaGFsbCBpbXBsZW1lbnQgInRydWUgcmFuZG9tIHdyaXRlcyB3aXRoIDJLQiBncmFudWxhcml0eSIsIHdoaWNoIG1lYW5zCit0aGF0IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwdXQgYW55IGZpbGVzeXN0ZW0gd2l0aCBhIGJsb2NrIHNpemUgPj0KKzJLQiBvbiBzdWNoIGEgZGlzYy4gRm9yIGV4YW1wbGUsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbzoKKworCSMgZHZkK3J3LWZvcm1hdCAvZGV2L2hkYyAgIChvbmx5IG5lZWRlZCBpZiB0aGUgZGlzYyBoYXMgbmV2ZXIKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBmb3JtYXR0ZWQpCisJIyBta3VkZmZzIC9kZXYvaGRjCisJIyBtb3VudCAvZGV2L2hkYyAvY2Ryb20gLXQgdWRmIC1vIHJ3LG5vYXRpbWUKKworSG93ZXZlciwgc29tZSBkcml2ZXMgZG9uJ3QgZm9sbG93IHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBleHBlY3QgdGhlCitob3N0IHRvIHBlcmZvcm0gYWxpZ25lZCB3cml0ZXMgYXQgMzJLQiBib3VuZGFyaWVzLiBPdGhlciBkcml2ZXMgZG8KK2ZvbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiwgYnV0IHN1ZmZlciBiYWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgaWYgdGhlCit3cml0ZXMgYXJlIG5vdCAzMktCIGFsaWduZWQuCisKK0JvdGggcHJvYmxlbXMgY2FuIGJlIHNvbHZlZCBieSB1c2luZyB0aGUgcGt0Y2R2ZCBkcml2ZXIsIHdoaWNoIGFsd2F5cworZ2VuZXJhdGVzIGFsaWduZWQgd3JpdGVzLgorCisJIyBkdmQrcnctZm9ybWF0IC9kZXYvaGRjCisJIyBwa3RzZXR1cCBkZXZfbmFtZSAvZGV2L2hkYworCSMgbWt1ZGZmcyAvZGV2L3BrdGNkdmQvZGV2X25hbWUKKwkjIG1vdW50IC9kZXYvcGt0Y2R2ZC9kZXZfbmFtZSAvY2Ryb20gLXQgdWRmIC1vIHJ3LG5vYXRpbWUKKworCitQYWNrZXQgd3JpdGluZyBmb3IgRFZELVJBTSBtZWRpYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRFZELVJBTSBkaXNjcyBhcmUgcmFuZG9tIHdyaXRhYmxlLCBzbyB1c2luZyB0aGUgcGt0Y2R2ZCBkcml2ZXIgaXMgbm90CituZWNlc3NhcnkuIEhvd2V2ZXIsIHVzaW5nIHRoZSBwa3RjZHZkIGRyaXZlciBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZQoraW4gdGhlIHNhbWUgd2F5IGl0IGRvZXMgZm9yIERWRCtSVyBtZWRpYS4KKworCitOb3RlcworLS0tLS0KKworLSBDRC1SVyBtZWRpYSBjYW4gdXN1YWxseSBub3QgYmUgb3ZlcndyaXR0ZW4gbW9yZSB0aGFuIGFib3V0IDEwMDAKKyAgdGltZXMsIHNvIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdlYXIgb24gdGhlIG1lZGlhLCB5b3Ugc2hvdWxkIGFsd2F5cworICB1c2UgdGhlIG5vYXRpbWUgbW91bnQgb3B0aW9uLgorCistIERlZmVjdCBtYW5hZ2VtZW50IChpZSBhdXRvbWF0aWMgcmVtYXBwaW5nIG9mIGJhZCBzZWN0b3JzKSBoYXMgbm90CisgIGJlZW4gaW1wbGVtZW50ZWQgeWV0LCBzbyB5b3UgYXJlIGxpa2VseSB0byBnZXQgYXQgbGVhc3Qgc29tZQorICBmaWxlc3lzdGVtIGNvcnJ1cHRpb24gaWYgdGhlIGRpc2Mgd2VhcnMgb3V0LgorCistIFNpbmNlIHRoZSBwa3RjZHZkIGRyaXZlciBtYWtlcyB0aGUgZGlzYyBhcHBlYXIgYXMgYSByZWd1bGFyIGJsb2NrCisgIGRldmljZSB3aXRoIGEgMktCIGJsb2NrIHNpemUsIHlvdSBjYW4gcHV0IGFueSBmaWxlc3lzdGVtIHlvdSBsaWtlIG9uCisgIHRoZSBkaXNjLiBGb3IgZXhhbXBsZSwgcnVuOgorCisJIyAvc2Jpbi9ta2UyZnMgL2Rldi9wa3RjZHZkL2Rldl9uYW1lCisKKyAgdG8gY3JlYXRlIGFuIGV4dDIgZmlsZXN5c3RlbSBvbiB0aGUgZGlzYy4KKworCitMaW5rcworLS0tLS0KKworU2VlIGh0dHA6Ly9meS5jaGFsbWVycy5zZS9+YXBwcm8vbGludXgvRFZEK1JXLyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorYWJvdXQgRFZEIHdyaXRpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL3NicGNkIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9zYnBjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTgyNWRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9zYnBjZApAQCAtMCwwICsxLDEwNTcgQEAKK1RoaXMgUkVBRE1FIGJlbG9uZ3MgdG8gcmVsZWFzZSA0LjIgb3IgbmV3ZXIgb2YgdGhlIFNvdW5kQmxhc3RlciBQcm8KKyhNYXRzdXNoaXRhLCBLb3RvYnVraSwgUGFuYXNvbmljLCBDcmVhdGl2ZUxhYnMsIExvbmdzaGluZSBhbmQgVGVhYykKK0NELVJPTSBkcml2ZXIgZm9yIExpbnV4LgorCitzYnBjZCByZWFsbHksIHJlYWxseSBpcyBOT1QgZm9yIEFOWSBJREUvQVRBUEkgZHJpdmUhCitOb3QgZXZlbiBpZiB5b3UgaGF2ZSBhbiAib3JpZ2luYWwiIFNvdW5kQmxhc3RlciBjYXJkIHdpdGggYW4gSURFIGludGVyZmFjZSEKK1NvLCB5b3UnZCBiZXR0ZXIgaGF2ZSBhIGxvb2sgaW50byBSRUFETUUuaWRlIGlmIHlvdXIgcG9ydCBhZGRyZXNzIGlzIDB4MUYwLAorMHgxNzAsIDB4MUU4LCAweDE2OCBvciBzaW1pbGFyLgorSSBnZXQgdG9ucyBvZiBtYWlscyBmcm9tIElERS9BVEFQSSBkcml2ZSB1c2VycyAtIEkgcmVhbGx5IGNhbid0IGNvbnRpbnVlCithbnkgbW9yZSB0byBhbnN3ZXIgdGhlbSBhbGwuIFNvLCBpZiB5b3VyIGRyaXZlL2ludGVyZmFjZSBpbmZvcm1hdGlvbiBzaGVldHMKK21lbnRpb24gIklERSIgKHByaW1hcnksIHNlY29uZGFyeSwgdGVydGlhcnksIHF1YXRlcm5hcnkpIGFuZCB0aGUgRE9TIGRyaXZlcgoraW52b2tpbmcgbGluZSB3aXRoaW4geW91ciBDT05GSUcuU1lTIGlzIHVzaW5nIGFuIGFkZHJlc3MgYmVsb3cgMHgyMzA6CitET04nVCBST0IgTVkgTEFTVCBORVJWRSAtIGp1bXBlciB5b3VyIGludGVyZmFjZSB0byBhZGRyZXNzIDB4MTcwIGFuZCBJUlEgMTUKKyh0aGF0IGlzIHRoZSAic2Vjb25kYXJ5IElERSIgY29uZmlndXJhdGlvbiksIHNldCB5b3VyIGRyaXZlIHRvICJtYXN0ZXIiIGFuZAordXNlIGlkZS1jZCBhcyB5b3VyIGRyaXZlci4gSWYgeW91IGRvIG5vdCBoYXZlIGEgc2Vjb25kIElERSBoYXJkIGRpc2ssIHVzZSB0aGUKK0xJTE8gY29tbWFuZHMKKyAgIGhkYj1ub3Byb2JlIGhkYz1jZHJvbQorYW5kIGdldCBsdWNreS4KK1RvIG1ha2UgaXQgZnVsbHkgY2xlYXIgdG8geW91OiBpZiB5b3UgbWFpbCBtZSBhYm91dCBJREUvQVRBUEkgZHJpdmUgcHJvYmxlbXMsCitteSBhbnN3ZXIgaXMgYWJvdmUsIGFuZCBJIHNpbXBseSB3aWxsIGRpc2NhcmQgeW91ciBtYWlsLCBob3BpbmcgdG8gc3RvcCB0aGUKK2Zsb29kIGFuZCB0byBmaW5kIHRpbWUgdG8gbGVhZCBteSAxMi15ZWFyIG9sZCBzb24gdG93YXJkcyBoYXBweSBjb21wdXRpbmcuCisKK1RoZSBkcml2ZXIgaXMgYWJsZSB0byBkcml2ZSB0aGUgd2hvbGUgZmFtaWx5IG9mICJ0cmFkaXRpb25hbCIgQVQtc3R5bGUgKHRoYXQKK2lzIE5PVCB0aGUgbmV3ICJFbmhhbmNlZCBJREUiIG9yICJBVEFQSSIgZHJpdmUgc3RhbmRhcmQpIE1hdHN1c2hpdGEsCitLb3RvYnVraSwgUGFuYXNvbmljIGRyaXZlcywgc29tZXRpbWVzIGxhYmVsbGVkIGFzICJDcmVhdGl2ZUxhYnMiLiBUaGUKK3dlbGwta25vd24gZHJpdmVzIGFyZSBDUi01MjEsIENSLTUyMiwgQ1ItNTIzLCBDUi01NjIsIENSLTU2My4KK0NSLTU3NCBpcyBhbiBJREUvQVRBUEkgZHJpdmUuCisKK1RoZSBMb25nc2hpbmUgTENTLTcyNjAgaXMgYSBkb3VibGUtc3BlZWQgZHJpdmUgd2hpY2ggdXNlcyB0aGUgIm9sZCIKK01hdHN1c2hpdGEgY29tbWFuZCBzZXQuIEl0IGlzIHN1cHBvcnRlZCAtIHdpdGggaGVscCBieSBTZXJnZSBSb2J5bnMuCitWZXJ0b3MgKCJFbGl0ZWdyb3VwIENvbXB1dGVyIFN5c3RlbXMiLCBFQ1MpIGhhcyBhIHNpbWlsYXIgZHJpdmUgLSBzdXBwb3J0CitoYXMgc3RhcnRlZDsgZ2V0IGluIGNvbnRhY3QgaWYgeW91IGhhdmUgc3VjaCBhICJWZXJ0b3MgMTAwIiBvciAiRUNTLUFUIgorZHJpdmUuCisKK1RoZXJlIGV4aXN0cyBhbiAiSUJNIEV4dGVybmFsIElTQSBDRC1ST00gRHJpdmUiIHdoaWNoIGluIGZhY3QgaXMgYSBDUi01NjMKK3dpdGggYSBzcGVjaWFsIGNvbnRyb2xsZXIgYm9hcmQuIFRoaXMgZHJpdmUgaXMgc3VwcG9ydGVkICh0aGUgaW50ZXJmYWNlIGlzCitvZiB0aGUgIkxhc2VyTWF0ZSIgdHlwZSksIGFuZCBpdCBpcyBwb3NzaWJseSB0aGUgYmVzdCBidXkgdG9kYXkgKGNoZWFwZXIgdGhhbgorYW4gaW50ZXJuYWwgZHJpdmUsIGFuZCB5b3UgY2FuIHVzZSBpdCBhcyBhbiBpbnRlcm5hbCwgdG9vIC0gZS5nLiBwbHVnIGl0IGludG8KK2Egc291bmRjYXJkKS4KKworQ3JlYXRpdmVMYWJzIGhhcyBhIG5ldyBkcml2ZSAiQ0QyMDAiIGFuZCBhIHNpbWlsYXIgZHJpdmUgIkNEMjAwRiIuIFRoZSBsYXR0ZXIKK2lzIG1hZGUgYnkgRnVuYWkgYW5kIHNvbWV0aW1lcyBuYW1lZCAiRTI1NTBVQSIsIG5ld2VyIG1vZGVscyBtYXkgYmUgbmFtZWQKKyJNSzQwMTUiLiBUaGUgQ0QyMDBGIGRyaXZlcyBzaG91bGQgZnVsbHkgd29yay4KK0NEMjAwIGRyaXZlcyB3aXRob3V0ICJGIiBhcmUgc3RpbGwgZ2l2aW5nIHByb2JsZW1zOiBkcml2ZSBkZXRlY3Rpb24gYW5kCitwbGF5aW5nIGF1ZGlvIHNob3VsZCB3b3JrLCBkYXRhIGFjY2VzcyB3aWxsIHJlc3VsdCBpbiBlcnJvcnMuIEkgbmVlZCBxdWFsaWZpZWQKK2ZlZWRiYWNrIGFib3V0IHRoZSBidWdzIHdpdGhpbiB0aGUgZGF0YSBmdW5jdGlvbnMgb3IgYSBkcml2ZSAoSSBuZXZlciBzYXcgYQorQ0QyMDApLgorCitUaGUgcXVhZC1zcGVlZCBUZWFjIENELTU1QSBkcml2ZSBpcyBzdXBwb3J0ZWQsIGJ1dCBzdGlsbCBkb2VzIG5vdCByZWFjaCAiZnVsbAorc3BlZWQiLiBUaGUgZGF0YSByYXRlIGFscmVhZHkgcmVhY2hlcyA1MDAga0Ivc2VjIGlmIHlvdSBzZXQgU0JQX0JVRkZFUl9GUkFNRVMKK3RvIDY0IChpdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZG8gdGhhdCBmb3Igbm9ybWFsICJmaWxlIGFjY2VzcyIgdXNhZ2UsIGJ1dCBpdAorY2FuIHNwZWVkIHVwIHRoaW5ncyBhIGxvdCBpZiB5b3UgdXNlIHNvbWV0aGluZyBsaWtlICJkZCIgdG8gcmVhZCBmcm9tIHRoZQorZHJpdmU7IEkgdXNlIGl0IGZvciB2ZXJpZnlpbmcgc2VsZi13cml0dGVuIENEcyB0aGlzIHdheSkuCitUaGUgZHJpdmUgaXRzZWxmIGlzIGFibGUgdG8gZGVsaXZlciA2MDAga0Ivc2VjLCBzbyB0aGlzIG5lZWRzCit3b3JrOyB3aXRoIHRoZSBub3JtYWwgc2V0dXAsIHRoZSBwZXJmb3JtYW5jZSBjdXJyZW50bHkgaXMgbm90IGV2ZW4gYXMgZ29vZCBhcworZG91YmxlLXNwZWVkLgorCitUaGlzIGRyaXZlciBpcyBOT1QgZm9yIE1pdHN1bWkgb3IgU29ueSBvciBBenRlY2ggb3IgUGhpbGlwcyBvciBYWFggZHJpdmVzLAorYW5kIGFnYWluOiB0aGlzIGRyaXZlciBpcyBpbiBubyB3YXkgdXNhYmxlIGZvciBhbnkgSURFL0FUQVBJIGRyaXZlLiBJZiB5b3UgCit0aGluayB5b3VyIGRyaXZlIHNob3VsZCB3b3JrIGFuZCBpdCBkb2Vzbid0OiBzZW5kIG1lIHRoZSBET1MgZHJpdmVyIGZvciB5b3VyCitiZWFzdCAoZ3ppcHBlZCArIHV1ZW5jb2RlZCkgYW5kIHlvdXIgQ09ORklHLlNZUyBpZiB5b3Ugd2FudCB0byBhc2sgbWUgZm9yIGhlbHAsCithbmQgaW5jbHVkZSBhbiBvcmlnaW5hbCBsb2cgbWVzc2FnZSBleGNlcnB0LCBhbmQgdHJ5IHRvIGdpdmUgYWxsIGluZm9ybWF0aW9uCithIGNvbXBsZXRlIGlkaW90IG5lZWRzIHRvIHVuZGVyc3RhbmQgeW91ciBoYXNzbGUgYWxyZWFkeSB3aXRoIHlvdXIgZmlyc3QKK21haWwuIEFuZCBpZiB5b3Ugd2FudCB0byBzYXkgImFzIEkgaGF2ZSBtYWlsZWQgeW91IGJlZm9yZSIsIGJlIHN1cmUgdGhhdCBJCitkb24ndCByZW1lbWJlciB5b3VyICJjYXNlIiBieSBzdWNoIHJlbWFya3M7IGF0IHRoZSBtb21lbnQsIEkgaGF2ZSBzb21lIAoraHVuZHJlZHMgb2Ygb3BlbiBjb3JyZXNwb25kZW5jZXMgYWJvdXQgTGludXggQ0RST00gcXVlc3Rpb25zIChob3BlIHRvIHJlZHVjZSBpZgordGhlIElERS9BVEFQSSB1c2VyIHF1ZXN0aW9ucyBkaXNhcHBlYXIpLiAKKworCitUaGlzIGRyaXZlciB3aWxsIHdvcmsgd2l0aCB0aGUgc291bmRjYXJkIGludGVyZmFjZXMgKFNCIFBybywgU0IgMTYsIEdhbGF4eSwKK1NvdW5kRlgsIE1vemFydCwgTUFEMTYgLi4uKSBhbmQgd2l0aCB0aGUgIm5vLXNvdW5kIiBjYXJkcyAoUGFuYXNvbmljIENJLTEwMVAsCitMYXNlck1hdGUsIFdESC03MDAxQywgTG9uZ3NoaW5lIExDUy02ODUzLCBUZWFjIC4uLikuCisKK0l0IHdvcmtzIHdpdGggdGhlICJjb25maWd1cmFibGUiIGludGVyZmFjZSAiU2VxdW9pYSBTLTEwMDAiLCB0b28sIHdoaWNoIGlzIAordXNlZCBvbiB0aGUgU3BlYSBNZWRpYSBGWCBhbmQgRW5zb25pYyBTb3VuZHNjYXBlIHNvdW5kIGNhcmRzLiBZb3UgaGF2ZSB0bworc3BlY2lmeSB0aGUgdHlwZSAiU0JQUk8gMiIgYW5kIHRoZSB0cnVlIENEUk9NIHBvcnQgYWRkcmVzcyB3aXRoIGl0LCBub3QgdGhlCisiY29uZmlndXJhdGlvbiBwb3J0IiBhZGRyZXNzLgorCitJZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQgd2hpY2ggbmVlZHMgYSAiY29uZmlndXJhdGlvbiBkcml2ZXIiIGluc3RlYWQgb2YKK2p1bXBlcnMgZm9yIGludGVyZmFjZSB0eXBlcyBhbmQgYWRkcmVzc2VzIChsaWtlIE1vemFydCBjYXJkcykgLSB0aG9zZQorZHJpdmVycyBnZXQgaW52b2tlZCBiZWZvcmUgdGhlIERPUyBDRFJPTSBkcml2ZXIgaW4geW91ciBDT05GSUcuU1lTLCB0eXBpY2FsCituYW1lcyBhcmUgImNkc2V0dXAuc3lzIiBhbmQgIm16dGluaXQuc3lzIiAtIGxldCB0aGUgc291bmQgZHJpdmVyIGRvIHRoZQorQ0RST00gcG9ydCBjb25maWd1cmF0aW9uICh0aGUgbGVhZGluZyBjb21tZW50cyBpbiBsaW51eC9kcml2ZXJzL3NvdW5kL21hZDE2LmMKK2FyZSBqdXN0IGZvciB5b3UhKS4gSGFubnUgU2F2b2xhaW5lbidzIG1hZDE2LmMgY29kZSBpcyBhYmxlIHRvIHNldCB1cCBteQorTW96YXJ0IGNhcmQgLSBJIHNpbXBseSBoYWQgdG8gYWRkCisgICAjZGVmaW5lIE1BRDE2X0NPTkYgMHgwNgorICAgI2RlZmluZSBNQUQxNl9DRFNFTCAweDAzCit0byBjb25maWd1cmUgdGhlIENEUk9NIGludGVyZmFjZSBmb3IgdHlwZSAiUGFuYXNvbmljIiAoTGFzZXJNYXRlKSBhbmQgYWRkcmVzcworMHgzNDAuCisKK1RoZSBpbnRlcmZhY2UgdHlwZSBoYXMgdG8gZ2V0IGNvbmZpZ3VyZWQgaW4gbGludXgvZHJpdmVycy9jZHJvbS9zYnBjZC5oLCAKK2JlY2F1c2UgdGhlIHJlZ2lzdGVyIGxheW91dCBpcyBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgIlNvdW5kQmxhc3RlciIgYW5kIHRoZQorIkxhc2VyTWF0ZSIgdHlwZS4KKworSSBnb3QgYSByZXBvcnQgdGhhdCB0aGUgVGVhYyBpbnRlcmZhY2UgY2FyZCAiSS9GIEUxMTcwOTgiIGlzIG9mIHR5cGUKKyJTb3VuZEJsYXN0ZXIiIChpLmUuIHlvdSBoYXZlIHRvIHNldCBTQlBSTyB0byAxKSBldmVuIHdpdGggdGhlIGFkZHJlc3NlcworMHgzMDAgYW5kIGFib3ZlLiBUaGlzIGlzIHVudXN1YWwsIGFuZCBpdCBjYW4ndCBnZXQgY292ZXJlZCBieSB0aGUgYXV0bworcHJvYmluZyBzY2hlbWUuCitUaGUgVGVhYyAxNi1iaXQgaW50ZXJmYWNlIGNhcmRzIChsaWtlIFAvTiBFOTUwMjI4LTAwQSwgZGVmYXVsdCBhZGRyZXNzIDB4MkMwKQorbmVlZCB0aGUgU0JQUk8gMyBzZXR1cC4KKworSWYgYXV0by1wcm9iaW5nIGZvdW5kIHRoZSBkcml2ZSwgdGhlIGFkZHJlc3MgaXMgY29ycmVjdC4gVGhlIHJlcG9ydGVkIHR5cGUKK21heSBiZSB3cm9uZy4gQSAibW91bnQiIHdpbGwgZ2l2ZSBzdWNjZXNzIG9ubHkgaWYgdGhlIGludGVyZmFjZSB0eXBlIGlzIHNldAorcmlnaHQuIFBsYXlpbmcgYXVkaW8gc2hvdWxkIHdvcmsgd2l0aCBhIHdyb25nIHNldCBpbnRlcmZhY2UgdHlwZSwgdG9vLgorCitXaXRoIHNvbWUgVGVhYyBhbmQgc29tZSBDRDIwMCBkcml2ZXMgSSBoYXZlIHNlZW4gaW50ZXJmYWNlIGNhcmRzIHdoaWNoIHNlZW0KK3RvIGxhY2sgdGhlICJkcml2ZSBzZWxlY3QiIGxpbmVzOyBhbHdheXMgZHJpdmUgMCBnZXRzIGFkZHJlc3NlZC4gVG8gYXZvaWQKKyJtaXJyb3IgZHJpdmVzIiAoZm91ciBkcml2ZXMgZGV0ZWN0ZWQgd2hlcmUgeW91IG9ubHkgaGF2ZSBvbmUpIHdpdGggc3VjaAoraW50ZXJmYWNlIGNhcmRzLCBzZXQgTUFYX0RSSVZFUyB0byAxIGFuZCBqdW1wZXIgeW91ciBkcml2ZSB0byBJRCAwIChpZgorcG9zc2libGUpLgorCisKK1VwIHRvIDQgZHJpdmVzIHBlciBpbnRlcmZhY2UgY2FyZCwgYW5kIHVwIHRvIDQgaW50ZXJmYWNlIGNhcmRzIGFyZSBzdXBwb3J0ZWQuCitBbGwgc3VwcG9ydGVkIGRyaXZlIGZhbWlsaWVzIGNhbiBiZSBtaXhlZCwgYnV0IHRoZSBDUi01MjEgZHJpdmVzIGFyZSAKK2hhcmQtd2lyZWQgdG8gZHJpdmUgSUQgMC4gVGhlIGRyaXZlcyBoYXZlIHRvIHVzZSBkaWZmZXJlbnQgZHJpdmUgSURzLCBhbmQgZWFjaAorZHJpdmUgaGFzIHRvIGdldCBhIHVuaXF1ZSBtaW5vciBudW1iZXIgKDAuLi4zKSwgY29ycmVzcG9uZGluZyBpbmRpcmVjdGx5IHRvIAoraXRzIGRyaXZlIElELgorVGhlIGRyaXZlIElEcyBtYXkgYmUgc2VsZWN0ZWQgZnJlZWx5IGZyb20gMCB0byAzIC0gdGhleSBkbyBub3QgaGF2ZSB0byBiZSBpbgorY29uc2VjdXRpdmUgb3JkZXIuCisKK0FzIERvbiBDYXJyb2xsLCBkb25AZHM5LnVzLmRlbGwuY29tIG9yIEZJRE8gMTozODIvMTQsIHRvbGQgbWUsIGl0IGlzIHBvc3NpYmxlCit0byBjaGFuZ2Ugb2xkIGRyaXZlcyB0byBhbnkgSUQsIHRvby4gSGUgd3JpdGVzIGluIHRoaXMgc2Vuc2U6CisgICAiSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgbW9yZSB0aGFuIG9uZSBzaW5nbGUgc3BlZWQgZHJpdmUKKyAgICh0aGV5IGRvIG5vdCBoYXZlIHRoZSBJRCBqdW1wZXJzKSB5b3UgbXVzdCBhZGQgYSBESVAgc3dpdGNoCisgICBhbmQgdHdvIHJlc2lzdG9ycy4gVGhlIHBhZHMgYXJlIGFscmVhZHkgb24gdGhlIGJvYXJkIG5leHQgdG8KKyAgIHRoZSBwb3dlciBjb25uZWN0b3IuIFlvdSB3aWxsIHNlZSB0aGUgc2lsa3NjcmVlbiBmb3IgdGhlCisgICBzd2l0Y2ggaWYgeW91IHJlbW92ZSB0aGUgdG9wIGNvdmVyLgorICAgICAgICAgICAgICAgICAgICAxIDIgMyA0CisgICAgICAgICAgICAgSUQgMCA9IHggRiBGIHggICAgICAgICAgICAgTyA9ICJvbiIKKyAgICAgICAgICAgICBJRCAxID0geCBPIEYgeCAgICAgICAgICAgICBGID0gIm9mZiIKKyAgICAgICAgICAgICBJRCAyID0geCBGIE8geCAgICAgICAgICAgICB4ID0gImRvbid0IGNhcmUiCisgICAgICAgICAgICAgSUQgMyA9IHggTyBPIHgKKyAgIE5leHQgdG8gdGhlIHN3aXRjaCBhcmUgdGhlIHBvc2l0aW9ucyBmb3IgUjc2ICg3aykgYW5kIFI3OAorICAgKDEyaykuIEkgaGFkIHRvIHBsYXkgYXJvdW5kIHdpdGggdGhlIHJlc2lzdG9yIHZhbHVlcyAtIElEIDMKKyAgIGRpZCBub3Qgd29yayB3aXRoIG90aGVyIHZhbHVlcy4gSWYgdGhlIHZhbHVlcyBhcmUgbm90IGdvb2QsCisgICBJRCAzIGJlaGF2ZXMgbGlrZSBJRCAwLiIKKworVG8gdXNlIG1vcmUgdGhhbiA0IGRyaXZlcywgeW91IHNpbXBseSBuZWVkIGEgc2Vjb25kIGNvbnRyb2xsZXIgY2FyZCBhdCBhIAorZGlmZmVyZW50IGFkZHJlc3MgYW5kIGEgc2Vjb25kIGNhYmxlLgorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHJlYWRpbmcgb2YgZGF0YSBmcm9tIHRoZSBDRCBhbmQgcGxheWluZyBvZiBhdWRpbyB0cmFja3MuCitUaGUgYXVkaW8gcGFydCBzaG91bGQgcnVuIHdpdGggV29ya01hbiwgeGNkcGxheWVyLCB3aXRoIHRoZSAibm9uLVgxMSIgcHJvZHVjdHMKK0NEcGxheWVyIGFuZCBXb3JrQm9uZSAtIHRlbGwgbWUgaWYgaXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvdGhlciBzb2Z0d2FyZS4KK1RoZSBvbmx5IGFjY2VwdGVkIG1lYXN1cmUgZm9yIGNvcnJlY3RuZXNzIHdpdGggdGhlIGF1ZGlvIGZ1bmN0aW9ucyBpcyB0aGUKKyJjZHRlc3RlciIgdXRpbGl0eSAoYXBwZW5kZWQpIC0gbW9zdCBhdWRpbyBwbGF5ZXIgcHJvZ3JhbW1lcnMgc2VlbSB0byBiZQorYmV0dGVyIG11c2ljaWFucyB0aGFuIHByb2dyYW1tZXJzLiA7LSkKKworV2l0aCB0aGUgQ1ItNTZ4IGFuZCB0aGUgQ0QyMDAgZHJpdmVzLCB0aGUgcmVhZGluZyBvZiBhdWRpbyBmcmFtZXMgaXMgcG9zc2libGUuCitUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGFuIElPQ1RMIGZ1bmN0aW9uIHdoaWNoIHJlYWRzIFJFQURfQVVESU8gZnJhbWVzIG9mCisyMzUyIGJ5dGVzIGF0IG9uY2UgKGNvbmZpZ3VyYWJsZSB3aXRoIHRoZSAiUkVBRF9BVURJTyIgZGVmaW5lLCBkZWZhdWx0IGlzIDApLgorUmVhZGluZyB0aGUgc2FtZSBmcmFtZSBhIHNlY29uZCB0aW1lIGdpdmVzIGRpZmZlcmVudCBkYXRhOyB0aGUgZnJhbWUgZGF0YSAKK3N0YXJ0IGF0IGEgZGlmZmVyZW50IHBvc2l0aW9uLCBidXQgYWxsIHJlYWQgYnl0ZXMgYXJlIHZhbGlkLCBhbmQgd2UgYWx3YXlzCityZWFkIDk4IGNvbnNlY3V0aXZlIGNodW5rcyAob2YgMjQgQnl0ZXMpIGFzIGEgZnJhbWUuIFJlYWRpbmcgbW9yZSB0aGFuIDEgZnJhbWUKK2F0IG9uY2UgcG9zc2libHkgbWlzc2VzIHNvbWUgY2h1bmtzIGF0IGVhY2ggZnJhbWUgYm91bmRhcnkuIFRoaXMgbGFjayBoYXMgdG8KK2dldCBjb3JyZWN0ZWQgYnkgZXh0ZXJuYWwsICJoaWdoZXIgbGV2ZWwiIHNvZnR3YXJlIHdoaWNoIHJlYWRzIHRoZSBzYW1lIGZyYW1lIAorYWdhaW4gYW5kIHRyaWVzIHRvIGZpbmQgYW5kIGVsaW1pbmF0ZSBvdmVybGFwcGluZyBjaHVua3MgKDI0LWJ5dGUtcGllY2VzKS4KKworVGhlIHRyYW5zZmVyIHJhdGUgd2l0aCByZWFkaW5nIGF1ZGlvICgxLWZyYW1lLXBpZWNlcykgY3VycmVudGx5IGlzIHZlcnkgc2xvdy4KK1RoaXMgY2FuIGJlIGJldHRlciByZWFkaW5nIGJpZ2dlciBjaHVua3MsIGJ1dCB0aGUgIm1pc3NpbmciIGNodW5rcyBwb3NzaWJseQorb2NjdXIgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNpbmdsZSBmcmFtZS4KK1RoZSBzb2Z0d2FyZSBpbnRlcmZhY2UgcG9zc2libHkgbWF5IGNoYW5nZSBhIGJpdCB0aGUgZGF5IHRoZSBTQ1NJIGRyaXZlcgorc3VwcG9ydHMgaXQgdG9vLgorCitXaXRoIGFsbCBidXQgdGhlIENSLTUyeCBkcml2ZXMsIE11bHRpU2Vzc2lvbiBpcyBzdXBwb3J0ZWQuCitQaG90byBDRHMgd29yayAodGhlICJvbGQiIGRyaXZlcyBsaWtlIENSLTUyMSBjYW4gYWNjZXNzIG9ubHkgdGhlIGZpcnN0CitzZXNzaW9uIG9mIGEgcGhvdG9DRCkuCitBdCBmdHAuZ3dkZy5kZTovcHViL2xpbnV4L2hwY2R0b3BwbS8geW91IHdpbGwgZmluZCBIYWRtdXQgRGFuaXNjaCdzIHBhY2thZ2UgdG8KK2NvbnZlcnQgcGhvdG8gQ0QgaW1hZ2UgZmlsZXMgYW5kIEdlcmQgS25vcnIncyB2aWV3aW5nIHV0aWxpdHkuCisKK1RoZSB0cmFuc2ZlciByYXRlIHdpbGwgcmVhY2ggMTUwIGtCL3NlYyB3aXRoIENSLTUyeCBkcml2ZXMsIDMwMCBrQi9zZWMgd2l0aAorQ1ItNTZ4IGRyaXZlcywgYW5kIGN1cnJlbnRseSBub3QgbW9yZSB0aGFuIDUwMCBrQi9zZWMgKHVzdWFsbHkgbGVzcyB0aGFuCisyNTAga0Ivc2VjKSB3aXRoIHRoZSBUZWFjIHF1YWQgc3BlZWQgZHJpdmVzLgorWEEgKFBob3RvQ0QpIGRpc2tzIHdpdGggIm9sZCIgZHJpdmVzIGdpdmUgb25seSA1MCBrQi9zZWMuCisKK1RoaXMgcmVsZWFzZSBjb25zaXN0cyBvZgorLSB0aGlzIFJFQURNRSBmaWxlCistIHRoZSBkcml2ZXIgZmlsZSBsaW51eC9kcml2ZXJzL2Nkcm9tL3NicGNkLmMKKy0gdGhlIHN0dWIgZmlsZXMgbGludXgvZHJpdmVycy9jZHJvbS9zYnBjZFsyMzRdLmMKKy0gdGhlIGhlYWRlciBmaWxlIGxpbnV4L2RyaXZlcnMvY2Ryb20vc2JwY2QuaC4KKworCitUbyBpbnN0YWxsOgorLS0tLS0tLS0tLS0KKworMS4gU2V0dXAgeW91ciBoYXJkd2FyZSBwYXJhbWV0ZXJzLiBUaG91Z2ggdGhlIGRyaXZlciBkb2VzICJhdXRvLXByb2JpbmciIGF0IGEKKyAgIGxvdCBvZiAobm90IGFsbCBwb3NzaWJsZSEpIGFkZHJlc3NlcywgdGhpcyBzdGVwIGlzIHJlY29tbWVuZGVkIGZvcgorICAgZXZlcnlkYXkgdXNlLiBZb3Ugc2hvdWxkIGxldCBzYnBjZCBhdXRvLXByb2JlIG9uY2UgYW5kIHVzZSB0aGUgcmVwb3J0ZWQKKyAgIGFkZHJlc3MgaWYgYSBkcml2ZSBnb3QgZm91bmQuIFRoZSByZXBvcnRlZCB0eXBlIG1heSBiZSBpbmNvcnJlY3Q7IGl0IGlzCisgICBjb3JyZWN0IGlmIHlvdSBjYW4gbW91bnQgYSBkYXRhIENELiBUaGVyZSBpcyBubyBjaG9pY2UgZm9yIHlvdSB3aXRoIHRoZQorICAgdHlwZTsgb25seSBvbmUgaXMgcmlnaHQsIHRoZSBvdGhlcnMgYXJlIGRlYWRseSB3cm9uZy4KKworICAgYS4gR28gaW50byAvdXNyL3NyYy9saW51eC9kcml2ZXJzL2Nkcm9tL3NicGNkLmggYW5kIGNvbmZpZ3VyZSBpdCBmb3IgeW91cgorICAgICAgaGFyZHdhcmUgKG5lYXIgdGhlIGJlZ2lubmluZyk6CisgICAgICBhMS4gU2V0IGl0IHVwIGZvciB0aGUgYXBwcm9wcmlhdGUgdHlwZSBvZiBpbnRlcmZhY2UgYm9hcmQuCisgICAgICAgICAgIk9yaWdpbmFsIiBDcmVhdGl2ZUxhYnMgc291bmQgY2FyZHMgbmVlZCAiU0JQUk8gMSIuCisgICAgICAgICAgTW9zdCAiY29tcGF0aWJsZSIgc291bmQgY2FyZHMgKGFsbW9zdCBhbGwgIm5vbi1DcmVhdGl2ZUxhYnMiIGNhcmRzKQorICAgICAgICAgIG5lZWQgIlNCUFJPIDAiLgorICAgICAgICAgIFRoZSAibm8tc291bmQiIGJvYXJkIGZyb20gT21uaUNkIG5lZWRzIHRoZSAiU0JQUk8gMSIgc2V0dXAuCisgICAgICAgICAgVGhlIFRlYWMgOC1iaXQgIm5vLXNvdW5kIiBib2FyZHMgbmVlZCB0aGUgIlNCUFJPIDEiIHNldHVwLgorICAgICAgICAgIFRoZSBUZWFjIDE2LWJpdCAibm8tc291bmQiIGJvYXJkcyBuZWVkIHRoZSAiU0JQUk8gMyIgc2V0dXAuCisgICAgICAgICAgQWxsIG90aGVyICJuby1zb3VuZCIgYm9hcmRzIG5lZWQgdGhlICJTQlBSTyAwIiBzZXR1cC4KKyAgICAgICAgICBUaGUgU3BlYSBNZWRpYSBGWCBhbmQgRW5zb25pcSBTb3VuZFNjYXBlIGNhcmRzIG5lZWQgIlNCUFJPIDIiLgorICAgICAgICAgIHNicGNkLmMgaG9sZHMgc29tZSBleGFtcGxlcyBpbiBpdHMgYXV0by1wcm9iZSBsaXN0LgorICAgICAgICAgIElmIHlvdSBjb25maWd1cmUgIlNCUFJPIiB3cm9uZywgdGhlIHBsYXlpbmcgb2YgYXVkaW8gQ0RzIHdpbGwgd29yaywKKyAgICAgICAgICBidXQgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gbW91bnQgYSBkYXRhIENELgorICAgICAgYTIuIFRlbGwgdGhlIGFkZHJlc3Mgb2YgeW91ciBDRFJPTV9QT1JUIChub3Qgb2YgdGhlIHNvdW5kIHBvcnQpLgorICAgICAgYTMuIElmIDQgZHJpdmVzIGdldCBmb3VuZCwgYnV0IHlvdSBoYXZlIG9ubHkgb25lLCBzZXQgTUFYX0RSSVZFUyB0byAxLgorICAgICAgYTQuIFNldCBESVNUUklCVVRJT04gdG8gMC4KKyAgIGIuIEFkZGl0aW9uYWxseSBmb3IgMi5hMSBhbmQgMi5hMiwgdGhlIHNldHVwIG1heSBiZSBkb25lIGR1cmluZworICAgICAgYm9vdCB0aW1lICh2aWEgdGhlICJrZXJuZWwgY29tbWFuZCBsaW5lIiBvciAiTElMTyBvcHRpb24iKToKKyAgICAgICAgICBzYnBjZD0weDMyMCxMYXNlck1hdGUKKyAgICAgIG9yCisgICAgICAgICAgc2JwY2Q9MHgyMzAsU291bmRCbGFzdGVyCisgICAgICBvcgorICAgICAgICAgIHNicGNkPTB4MzM4LFNvdW5kU2NhcGUKKyAgICAgIG9yCisgICAgICAgICAgc2JwY2Q9MHgyQzAsVGVhYzE2Yml0CisgICAgICBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGlmIHlvdSBpbnN0YWxsIGEgZnJlc2ggZGlzdHJpYnV0aW9uLgorICAgICAgSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIGl0IGdldHMgdGFrZW4gYXMgdGhlIHR5cGUKKyAgICAgIHNldHRpbmc7IDAgaXMgIkxhc2VyTWF0ZSIsIDEgaXMgIlNvdW5kQmxhc3RlciIsIDIgaXMgIlNvdW5kU2NhcGUiLAorICAgICAgMyBpcyAiVGVhYzE2Yml0Ii4KKyAgICAgIFNvLCBmb3IgZXhhbXBsZQorICAgICAgICAgIHNicGNkPTB4MjMwLDEKKyAgICAgIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICBzYnBjZD0weDIzMCxTb3VuZEJsYXN0ZXIKKworMi4gImNkIC91c3Ivc3JjL2xpbnV4IiBhbmQgZG8gYSAibWFrZSBjb25maWciIGFuZCBzZWxlY3QgInkiIGZvciBNYXRzdXNoaXRhCisgICBDRC1ST00gc3VwcG9ydCBhbmQgZm9yIElTTzk2NjAgRmlsZVN5c3RlbSBzdXBwb3J0LiBJZiB5b3UgZG8gbm90IGhhdmUgYQorICAgc2Vjb25kLCB0aGlyZCwgb3IgZm91cnRoIGNvbnRyb2xsZXIgaW5zdGFsbGVkLCBkbyBub3Qgc2F5ICJ5IiB0byB0aGUgCisgICBzZWNvbmRhcnkgTWF0c3VzaGl0YSBDRC1ST00gcXVlc3Rpb25zLgorCiszLiBUaGVuIG1ha2UgdGhlIGtlcm5lbCBpbWFnZSAoIm1ha2UgemxpbG8iIG9yIHNpbWlsYXIpLgorCis0LiBNYWtlIHRoZSBkZXZpY2UgZmlsZShzKS4gVGhpcyBzdGVwIHVzdWFsbHkgYWxyZWFkeSBoYXMgYmVlbiBkb25lIGJ5IHRoZQorICAgTUFLRURFViBzY3JpcHQuCisgICBUaGUgZHJpdmVyIHVzZXMgTUFKT1IgMjUsIHNvLCBpZiBuZWNlc3NhcnksIGRvCisgICAgICAgIG1rbm9kIC9kZXYvc2JwY2QgIGIgMjUgMCAgICAgICAoaWYgeW91IGhhdmUgb25seSBvbmUgZHJpdmUpCisgICBhbmQvb3IKKyAgICAgICAgbWtub2QgL2Rldi9zYnBjZDAgYiAyNSAwCisgICAgICAgIG1rbm9kIC9kZXYvc2JwY2QxIGIgMjUgMQorICAgICAgICBta25vZCAvZGV2L3NicGNkMiBiIDI1IDIKKyAgICAgICAgbWtub2QgL2Rldi9zYnBjZDMgYiAyNSAzCisgICB0byBtYWtlIHRoZSBub2RlKHMpLgorCisgICBUaGUgImZpcnN0IGZvdW5kIiBkcml2ZSBnZXRzIE1JTk9SIDAgKHJlZ2FyZGxlc3Mgb2YgaXRzIGp1bXBlcmVkIElEKSwgdGhlCisgICAibmV4dCBmb3VuZCIgKGF0IHRoZSBzYW1lIGNhYmxlKSBnZXRzIE1JTk9SIDEsIC4uLgorICAgCisgICBGb3IgYSBzZWNvbmQgaW50ZXJmYWNlIGJvYXJkLCB5b3UgaGF2ZSB0byBtYWtlIG5vZGVzIGxpa2UKKyAgICAgICAgbWtub2QgL2Rldi9zYnBjZDQgYiAyNiAwCisgICAgICAgIG1rbm9kIC9kZXYvc2JwY2Q1IGIgMjYgMQorICAgYW5kIHNvIG9uLiBVc2UgdGhlIE1BSk9ScyAyNiwgMjcsIDI4LgorCisgICBJZiB5b3UgZnVydGhlciBtYWtlIGEgbGluayBsaWtlCisgICAgICAgIGxuIC1zIHNicGNkIC9kZXYvY2Ryb20KKyAgIHlvdSBjYW4gdXNlIHRoZSBuYW1lIC9kZXYvY2Ryb20sIHRvby4KKworNS4gUmVib290IHdpdGggdGhlIG5ldyBrZXJuZWwuCisKK1lvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gZG8KKyAgICAgICAgICAgICAgbWtkaXIgL0NECithbmQgCisgICAgICAgICAgICAgIG1vdW50IC1ydCBpc285NjYwIC9kZXYvc2JwY2QgL0NECitvcgorICAgICAgICAgICAgICBtb3VudCAtcnQgaXNvOTY2MCAtbyBibG9jaz0yMDQ4IC9kZXYvc2JwY2QgL0NECithbmQgc2VlIHRoZSBjb250ZW50cyBvZiB5b3VyIENEIGluIHRoZSAvQ0QgZGlyZWN0b3J5LgorVG8gdXNlIGF1ZGlvIENEcywgYSBtb3VudGluZyBpcyBub3QgcmVjb21tZW5kZWQgKGFuZCBpdCB3b3VsZCBmYWlsIGlmIHRoZQorZmlyc3QgdHJhY2sgaXMgbm90IGEgZGF0YSB0cmFjaykuCisKKworVXNpbmcgc2JwY2QgYXMgYSAibG9hZGFibGUgbW9kdWxlIjoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBkbyBOT1Qgc2VsZWN0ICJNYXRzdXNoaXRhL1BhbmFzb25pYyBDRFJPTSBkcml2ZXIgc3VwcG9ydCIgZHVyaW5nIHRoZQorIm1ha2UgY29uZmlnIiBvZiB5b3VyIGtlcm5lbCwgeW91IGNhbiBidWlsZCB0aGUgImxvYWRhYmxlIG1vZHVsZSIgc2JwY2Quby4KKworSWYgc2JwY2QgZ2V0cyB1c2VkIGFzIGEgbW9kdWxlLCB0aGUgc3VwcG9ydCBvZiBtb3JlIHRoYW4gb25lIGludGVyZmFjZQorY2FyZCAoaS5lLiBkcml2ZXMgNC4uLjE1KSBpcyBkaXNhYmxlZC4KKworWW91IGNhbiBzcGVjaWZ5IGludGVyZmFjZSBhZGRyZXNzIGFuZCB0eXBlIHdpdGggdGhlICJpbnNtb2QiIGNvbW1hbmQgbGlrZToKKyAjIGluc21vZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzL3NicGNkLm8gc2JwY2Q9MHgzNDAsMAorb3IKKyAjIGluc21vZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzL3NicGNkLm8gc2JwY2Q9MHgyMzAsMQorb3IKKyAjIGluc21vZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzL3NicGNkLm8gc2JwY2Q9MHgzMzgsMgord2hlcmUgdGhlIGxhc3QgbnVtYmVyIHJlcHJlc2VudHMgdGhlIFNCUFJPIHNldHRpbmcgKG5vIHN0cmluZ3MgYWxsb3dlZCBoZXJlKS4KKworCitUaGluZ3Mgb2YgaW50ZXJlc3Q6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgaXMgY29uZmlndXJlZCB0byB0cnkgdGhlIExhc2VyTWF0ZSB0eXBlIG9mIGludGVyZmFjZSBhdCBJL08gcG9ydAorMHgwMzQwIGZpcnN0LiBJZiB0aGlzIGlzIG5vdCBhcHByb3ByaWF0ZSwgc2JwY2QuaCBzaG91bGQgZ2V0IGNoYW5nZWQKKyh5b3Ugd2lsbCBmaW5kIHRoZSByaWdodCBwbGFjZSAtIGp1c3QgYXQgdGhlIGJlZ2lubmluZykuCisKK05vIERNQSBhbmQgbm8gSVJRIGlzIHVzZWQuCisKK1RvIHJlZHVjZSBvciBpbmNyZWFzZSB0aGUgYW1vdW50IG9mIGtlcm5lbCBtZXNzYWdlcywgZWRpdCBzYnBjZC5jIGFuZCBwbGF5Cit3aXRoIHRoZSAiREJHX3h4eCIgc3dpdGNoZXMgKGluaXRpYWxpemF0aW9uIG9mIHRoZSB2YXJpYWJsZSAic2JwY2RfZGVidWciKS4KK0Rvbid0IGZvcmdldCB0byByZWZsZWN0IG9uIHdoYXQgeW91IGRvOyBlbmFibGluZyBhbGwgREJHX3h4eCBzd2l0Y2hlcyBhdCBvbmNlCittYXkgY3Jhc2ggeW91ciBzeXN0ZW0sIGFuZCBlYWNoIG1lc3NhZ2UgbGluZSBpcyBhY2NvbXBhbmllZCBieSBhIGRlbGF5LgorCitUaGUgZHJpdmVyIHVzZXMgdGhlICJ2YXJpYWJsZSBCTE9DS19TSVpFIiBmZWF0dXJlLiBUbyB1c2UgaXQsIHlvdSBoYXZlIHRvCitzcGVjaWZ5ICJibG9jaz0yMDQ4IiBhcyBhIG1vdW50IG9wdGlvbi4gRG9pbmcgdGhpcyB3aWxsIGRpc2FibGUgdGhlIGRpcmVjdAorZXhlY3V0aW9uIG9mIGEgYmluYXJ5IGZyb20gdGhlIENEOyB5b3UgaGF2ZSB0byBjb3B5IGl0IHRvIGEgZGV2aWNlIHdpdGggdGhlCitzdGFuZGFyZCBCTE9DS19TSVpFICgxMDI0KSBmaXJzdC4gU28sIGRvIG5vdCB1c2UgdGhpcyBpZiB5b3VyIHN5c3RlbSBpcworZGlyZWN0bHkgInJ1bm5pbmcgZnJvbSB0aGUgQ0RST00iIChsaWtlIHNvbWUgb2YgWWdnZHJhc2lsJ3MgaW5zdGFsbGF0aW9uCit2YXJpYW50cykuIFRoZXJlIGFyZSBDRHMgb24gdGhlIG1hcmtldCAobGlrZSB0aGUgR2VybWFuICJ1bmlmaXgiIExpbnV4CitkaXN0cmlidXRpb24pIHdoaWNoIE1VU1QgZ2V0IGhhbmRsZWQgd2l0aCBhIGJsb2NrX3NpemUgb2YgMTAyNC4gR2VuZXJhbGx5LAorb25lIGNhbiBzYXkgYWxsIHRoZSBDRHMgd2hpY2ggaG9sZCBmaWxlcyBvZiB0aGUgbmFtZSBZTVRSQU5TLlRCTCBhcmUgZGVmZWN0aXZlOworZG8gbm90IHVzZSBibG9jaz0yMDQ4IHdpdGggdGhvc2UuCisKK1dpdGhpbiBzYnBjZC5oLCB5b3Ugd2lsbCBmaW5kIHNvbWUgIiNkZWZpbmUicyAoZS5nLiBFSkVDVCBhbmQgSlVLRUJPWCkuIFdpdGgKK3RoZXNlLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgZHJpdmVyIGZvciBzb21lIHNwZWNpYWwgdGhpbmdzLgorWW91IGNhbiB1c2UgdGhlIGFwcGVuZGVkIHByb2dyYW0gImNkdGVzdGVyIiB0byBzZXQgdGhlIGF1dG8tZWplY3QgZmVhdHVyZQorZHVyaW5nIHJ1bnRpbWUuIEplZmYgVHJhbnRlcidzICJlamVjdCIgdXRpbGl0eSBjYW4gZG8gdGhpcywgdG9vIChhbmQgbW9yZSkKK2ZvciB5b3UuCisKK1RoZXJlIGlzIGFuIGlvY3RsIENEUk9NTVVMVElTRVNTSU9OIHRvIG9idGFpbiB3aXRoIGEgdXNlciBwcm9ncmFtIGlmCit0aGUgQ0QgaXMgYW4gWEEgZGlzayBhbmQgLSBpZiBpdCBpcyAtIHdoZXJlIHRoZSBsYXN0IHNlc3Npb24gc3RhcnRzLiBUaGUKKyJjZHRlc3RlciIgcHJvZ3JhbSBpbGx1c3RyYXRlcyBob3cgdG8gY2FsbCBpdC4KKworCitBdXRvLXByb2JpbmcgYXQgYm9vdCB0aW1lOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBkb2VzIGF1dG8tcHJvYmluZyBhdCBtYW55IHdlbGwta25vd24gaW50ZXJmYWNlIGNhcmQgYWRkcmVzc2VzLAorYnV0IG5vdCBhbGw6CitTb21lIHByb2JpbmdzIGNhbiBjYXVzZSBhIGhhbmcgaWYgYW4gTkUyMDAwIGV0aGVybmV0IGNhcmQgZ2V0cyB0b3VjaGVkLCBiZWNhdXNlCitTQlBDRCdzIGF1dG8tcHJvYmluZyBoYXBwZW5zIGJlZm9yZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldCBkcml2ZXJzLgorVGhvc2UgImhhemFyZG91cyIgYWRkcmVzc2VzIGFyZSBleGNsdWRlZCBmcm9tIGF1dG8tcHJvYmluZzsgdGhlICJrZXJuZWwgCitjb21tYW5kIGxpbmUiIGZlYXR1cmUgaGFzIHRvIGJlIHVzZWQgZHVyaW5nIGluc3RhbGxhdGlvbiBpZiB5b3UgaGF2ZSB5b3VyIAorZHJpdmUgYXQgdGhvc2UgYWRkcmVzc2VzLiBUaGUgIm1vZHVsZSIgdmVyc2lvbiBpcyBhbGxvd2VkIHRvIHByb2JlIGF0IHRob3NlCithZGRyZXNzZXMsIHRvby4KKworVGhlIGF1dG8tcHJvYmluZyBsb29rcyBmaXJzdCBhdCB0aGUgY29uZmlndXJlZCBhZGRyZXNzIHJlc3AuIHRoZSBhZGRyZXNzCitzdWJtaXR0ZWQgYnkgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFdpdGggdGhpcywgaXQgaXMgcG9zc2libGUgdG8gdXNlIHRoaXMKK2RyaXZlciB3aXRoaW4gaW5zdGFsbGF0aW9uIGJvb3QgZmxvcHBpZXMsIGFuZCBmb3IgYW55IG5vbi1zdGFuZGFyZCBhZGRyZXNzLAordG9vLgorCitBdXRvLXByb2Jpbmcgd2lsbCBtYWtlIGFuIGFzc3VtcHRpb24gYWJvdXQgdGhlIGludGVyZmFjZSB0eXBlICgiU0JQUk8iIG9yIG5vdCksCitiYXNlZCB1cG9uIHRoZSBhZGRyZXNzLiBUaGF0IGFzc3VtcHRpb24gbWF5IGJlIHdyb25nIChpbml0aWFsaXphdGlvbiB3aWxsIGJlCitvLmsuLCBidXQgeW91IHdpbGwgZ2V0IEkvTyBlcnJvcnMgZHVyaW5nIG1vdW50KS4gSW4gdGhhdCBjYXNlLCB1c2UgdGhlICJrZXJuZWwKK2NvbW1hbmQgbGluZSIgZmVhdHVyZSBhbmQgc3BlY2lmeSBhZGRyZXNzICYgdHlwZSBhdCBib290IHRpbWUgdG8gZmluZCBvdXQgdGhlCityaWdodCBzZXR1cC4KKworRm9yIGV2ZXJ5ZGF5IHVzZSwgYWRkcmVzcyBhbmQgdHlwZSBzaG91bGQgZ2V0IGNvbmZpZ3VyZWQgd2l0aGluIHNicGNkLmguIFRoYXQKK3dpbGwgc3RvcCB0aGUgYXV0by1wcm9iaW5nIGR1ZSB0byBzdWNjZXNzIHdpdGggdGhlIGZpcnN0IHRyeS4KKworVGhlIGtlcm5lbCBjb21tYW5kICJzYnBjZD0wIiBzdXBwcmVzc2VzIGVhY2ggYXV0by1wcm9iaW5nIGFuZCBjYXVzZXMKK3RoZSBkcml2ZXIgbm90IHRvIGZpbmQgYW55IGRyaXZlOyBpdCBpcyBtZWFudCBmb3IgcGVvcGxlIHdobyBsb3ZlIHNicGNkCitzbyBtdWNoIHRoYXQgdGhleSBkbyBub3Qgd2FudCB0byBtaXNzIGl0LCBldmVuIGlmIHRoZXkgbWlzcyB0aGUgZHJpdmVzLiA7LSkgIAorCitJZiB5b3UgY29uZmlndXJlICIjZGVmaW5lIENEUk9NX1BPUlQgMCIgaW4gc2JwY2QuaCwgdGhlIGF1dG8tcHJvYmluZyBpcworaW5pdGlhbGx5IGRpc2FibGVkIGFuZCBuZWVkcyBhbiBleHBsaWNpdCBrZXJuZWwgY29tbWFuZCB0byBnZXQgYWN0aXZhdGVkLgorT25jZSBhY3RpdmF0ZWQsIGl0IGRvZXMgbm90IHN0b3AgYmVmb3JlIHN1Y2Nlc3Mgb3IgZW5kLW9mLWxpc3QuIFRoaXMgbWF5IGJlCit1c2VmdWwgd2l0aGluICJ1bml2ZXJzYWwiIENEUk9NIGluc3RhbGxhdGlvbiBib290IGZsb3BwaWVzIChidXQgdXNpbmcgdGhlIAorbG9hZGFibGUgbW9kdWxlIHdvdWxkIGJlIGJldHRlciBiZWNhdXNlIGl0IGFsbG93cyBhbiAiZXh0ZW5kZWQiIGF1dG8tcHJvYmluZword2l0aG91dCBmZWFyaW5nIE5FMjAwMCBjYXJkcykuCisKK1RvIHNob3J0ZW4gdGhlIGF1dG8tcHJvYmluZyBsaXN0IHRvIGEgc2luZ2xlIGVudHJ5LCBzZXQgRElTVFJJQlVUSU9OIDAgd2l0aGluCitzYnBjZC5oLgorCisKK1NldHRpbmcgdXAgYWRkcmVzcyBhbmQgaW50ZXJmYWNlIHR5cGU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3VyIEkvTyBwb3J0IGFkZHJlc3MgaXMgbm90IDB4MzQwLCB5b3UgaGF2ZSB0byBsb29rIGZvciB0aGUgI2RlZmluZXMgbmVhcgordGhlIGJlZ2lubmluZyBvZiBzYnBjZC5oIGFuZCBjb25maWd1cmUgdGhlbTogc2V0IFNCUFJPIHRvIDAgb3IgMSBvciAyLCBhbmQKK2NoYW5nZSBDRFJPTV9QT1JUIHRvIHRoZSBhZGRyZXNzIG9mIHlvdXIgQ0RST00gSS9PIHBvcnQuCisKK0FsbW9zdCBhbGwgb2YgdGhlICJTb3VuZEJsYXN0ZXIgY29tcGF0aWJsZSIgY2FyZHMgYmVoYXZlIGxpa2UgdGhlIG5vLXNvdW5kCitpbnRlcmZhY2VzLCBpLmUuIG5lZWQgU0JQUk8gMCEgCisKK1dpdGggIm9yaWdpbmFsIiBTQiBQcm8gY2FyZHMsIGFuIGluaXRpYWwgc2V0dGluZyBvZiBDRF92b2x1bWUgdGhyb3VnaCB0aGUKK3NvdW5kIGNhcmQncyBNSVhFUiByZWdpc3RlciBnZXRzIGRvbmUuCitJZiB5b3UgYXJlIHVzaW5nIGEgImNvbXBhdGlibGUiIHNvdW5kIGNhcmQgb2YgdHlwZXMgIkxhc2VyTWF0ZSIgb3IgIlNQRUEiLAoreW91IGNhbiBzZXQgU09VTkRfQkFTRSAoaW4gc2JwY2QuaCkgdG8gZ2V0IGl0IGRvbmUgd2l0aCB5b3VyIGNhcmQsIHRvby4uLgorCisKK1VzaW5nIGF1ZGlvIENEczoKKy0tLS0tLS0tLS0tLS0tLS0KKworV29ya21hbiwgV29ya0JvbmUsIHhjZHBsYXllciwgY2RwbGF5ZXIgYW5kIHRoZSBuaWNlIGxpdHRsZSB0b29sICJjZHBsYXkiIChzZWUKK1JFQURNRS5henRjZCBmcm9tIHRoZSBBenRlY2ggZHJpdmVyIHBhY2thZ2UpIHNob3VsZCB3b3JrLgorCitUaGUgcHJvZ3JhbSBDRHBsYXllciBsaWtlcyB0byB0YWxrIHRvICIvZGV2L21jZCIgb25seSwgeGNkcGxheWVyIHdhbnRzCisiL2Rldi9yc3IwIiwgd29ya21hbiBsb3ZlcyAiL2Rldi9zcjAiIG9yICIvZGV2L2Nkcm9tIiAtIHNvLCBtYWtlIHRoZSAKK2FwcHJvcHJpYXRlIGxpbmtzIHRvIHVzZSB0aGVtIHdpdGhvdXQgdGhlIG5lZWQgdG8gc3VwcGx5IHBhcmFtZXRlcnMuCisKKworQ29weWluZyBhdWRpbyB0cmFja3M6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBwcm9ncmFtIHdpbGwgY29weSB0cmFjayAxIChvciBhIHBpZWNlIG9mIGl0KSBmcm9tIGFuIGF1ZGlvIENECitpbnRvIHRoZSBmaWxlICJ0cmFjazAxIjoKKworLyo9PT09PT09PT09PT09PT09PT09IGJlZ2luIHByb2dyYW0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICogcmVhZCBhbiBhdWRpbyB0cmFjayBmcm9tIGEgQ0QKKyAqCisgKiAoYykgMTk5NCBFYmVyaGFyZCBNb2Vua2ViZXJnIDxlbW9lbmtlQGd3ZGcuZGU+CisgKiAgICAgICAgICBtYXkgYmUgdXNlZCAmIGVuaGFuY2VkIGZyZWVseQorICoKKyAqIER1ZSB0byBub24tZXhpc3RlbnQgc3luYyBieXRlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggYXVkaW8gZnJhbWUgKG9yIGR1ZQorICogdG8gYSBmaXJtd2FyZSBidWcgd2l0aGluIGFsbCBrbm93biBkcml2ZXM/KSwgaXQgaXMgY3VycmVudGx5IGEga2luZCBvZgorICogZm9ydHVuZSBpZiB0d28gY29uc2VjdXRpdmUgZnJhbWVzIGZpdCB0b2dldGhlci4KKyAqIFVzdWFsbHksIHRoZXkgb3ZlcmxhcCwgb3IgYSBsaXR0bGUgcGllY2UgaXMgbWlzc2luZy4gVGhpcyBoYXBwZW5zIGluIHVuaXRzCisgKiBvZiAyNC1ieXRlIGNodW5rcy4gSXQgaGFzIHRvIGdldCBmaXhlZCBieSBoaWdoZXItbGV2ZWwgc29mdHdhcmUgKHJlYWRpbmcKKyAqIHVudGlsIGFuIG92ZXJsYXAgb2NjdXJzLCBhbmQgdGhlbiBlbGltaW5hdGUgdGhlIG92ZXJsYXBwaW5nIGNodW5rcykuIAorICogZnRwLmd3ZGcuZGU6L3B1Yi9saW51eC9taXNjL2NkZGEyd2F2LXNicGNkLioudGFyLmd6IGhvbGRzIGFuIGV4YW1wbGUgb2YKKyAqIHN1Y2ggYW4gYWxnb3JpdGhtLgorICogVGhpcyBleGFtcGxlIHByb2dyYW0gZnVydGhlciBpcyBtaXNzaW5nIHRvIG9idGFpbiB0aGUgU3ViQ2hhbm5lbCBkYXRhCisgKiB3aGljaCBiZWxvbmcgdG8gZWFjaCBmcmFtZS4KKyAqCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSBvZiB0aGUgbG93LWxldmVsIGFjY2VzcyByb3V0aW5lLiBUaGUgcmVhZCBkYXRhIGFyZQorICogcHVyZSAxNi1iaXQgQ0REQSB2YWx1ZXM7IHRoZXkgaGF2ZSB0byBnZXQgY29udmVydGVkIHRvIG1ha2Ugc291bmQgb3V0IG9mCisgKiB0aGVtLgorICogSXQgaXMgbm8gZnVuIHRvIGxpc3RlbiB0byBpdCB3aXRob3V0IHByaW9yIG92ZXJsYXAvdW5kZXJsYXAgY29ycmVjdGlvbiEKKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKworc3RhdGljIHN0cnVjdCBjZHJvbV90b2NoZHIgaGRyOworc3RhdGljIHN0cnVjdCBjZHJvbV90b2NlbnRyeSBlbnRyeVsxMDFdOworc3RhdGljIHN0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvIGFyZzsKK3N0YXRpYyB1X2NoYXIgYnVmZmVyW0NEX0ZSQU1FU0laRV9SQVddOworc3RhdGljIGludCBkYXRhZmlsZSwgZHJpdmU7CitzdGF0aWMgaW50IGksIGosIGxpbWl0LCB0cmFjaywgZXJyOworc3RhdGljIGNoYXIgZmlsZW5hbWVbMzJdOworCittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisvKgorICogb3BlbiAvZGV2L2Nkcm9tCisgKi8KKyAgZHJpdmU9b3BlbigiL2Rldi9jZHJvbSIsIDApOworICBpZiAoZHJpdmU8MCkKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IG9wZW4gZHJpdmUuXG4iKTsKKyAgICAgIGV4aXQgKC0xKTsKKyAgICB9CisvKgorICogZ2V0IFRvY0hlYWRlcgorICovCisgIGZwcmludGYoc3Rkb3V0LCAiZ2V0dGluZyBUb2NIZWFkZXIuLi5cbiIpOworICBlcnI9aW9jdGwoZHJpdmUsIENEUk9NUkVBRFRPQ0hEUiwgJmhkcik7CisgIGlmIChlcnIhPTApCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJjYW4ndCBnZXQgVG9jSGVhZGVyIChlcnJvciAlZCkuXG4iLCBlcnIpOworICAgICAgZXhpdCAoLTEpOworICAgIH0KKyAgZWxzZQorICAgIGZwcmludGYoc3Rkb3V0LCAiVG9jSGVhZGVyOiAlZCAlZFxuIiwgaGRyLmNkdGhfdHJrMCwgaGRyLmNkdGhfdHJrMSk7CisvKgorICogZ2V0IGFuZCBkaXNwbGF5IGFsbCBUb2NFbnRyaWVzCisgKi8KKyAgZnByaW50ZihzdGRvdXQsICJnZXR0aW5nIFRvY0VudHJpZXMuLi5cbiIpOworICBmb3IgKGk9MTtpPD1oZHIuY2R0aF90cmsxKzE7aSsrKQorICAgIHsKKyAgICAgIGlmIChpIT1oZHIuY2R0aF90cmsxKzEpIGVudHJ5W2ldLmNkdGVfdHJhY2sgPSBpOworICAgICAgZWxzZSBlbnRyeVtpXS5jZHRlX3RyYWNrID0gQ0RST01fTEVBRE9VVDsKKyAgICAgIGVudHJ5W2ldLmNkdGVfZm9ybWF0ID0gQ0RST01fTEJBOworICAgICAgZXJyPWlvY3RsKGRyaXZlLCBDRFJPTVJFQURUT0NFTlRSWSwgJmVudHJ5W2ldKTsKKyAgICAgIGlmIChlcnIhPTApCisJeworCSAgZnByaW50ZihzdGRlcnIsICJjYW4ndCBnZXQgVG9jRW50cnkgIyVkIChlcnJvciAlZCkuXG4iLCBpLCBlcnIpOworCSAgZXhpdCAoLTEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBmcHJpbnRmKHN0ZG91dCwgIlRvY0VudHJ5ICMlZDogJTFYICUxWCAlMDZYICUwMlhcbiIsCisJCSBlbnRyeVtpXS5jZHRlX3RyYWNrLAorCQkgZW50cnlbaV0uY2R0ZV9hZHIsCisJCSBlbnRyeVtpXS5jZHRlX2N0cmwsCisJCSBlbnRyeVtpXS5jZHRlX2FkZHIubGJhLAorCQkgZW50cnlbaV0uY2R0ZV9kYXRhbW9kZSk7CisJfQorICAgIH0KKyAgZnByaW50ZihzdGRvdXQsICJnb3QgYWxsIFRvY0VudHJpZXMuXG4iKTsKKy8qCisgKiBhc2sgZm9yIHRyYWNrIG51bWJlciAobm90IGltcGxlbWVudGVkIGhlcmUpCisgKi8KK3RyYWNrPTE7CisjaWYgMCAvKiBqdXN0IHJlYWQgYSBsaXR0bGUgcGllY2UgKDQgc2Vjb25kcykgKi8KK2VudHJ5W3RyYWNrKzFdLmNkdGVfYWRkci5sYmE9ZW50cnlbdHJhY2tdLmNkdGVfYWRkci5sYmErMzAwOworI2VuZGlmCisvKgorICogcmVhZCB0cmFjayBpbnRvIGZpbGUKKyAqLworICBzcHJpbnRmKGZpbGVuYW1lLCAidHJhY2slMDJkXDAiLCB0cmFjayk7CisgIGRhdGFmaWxlPWNyZWF0KGZpbGVuYW1lLCAwNzU1KTsKKyAgaWYgKGRhdGFmaWxlPDApCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJjYW4ndCBvcGVuIGRhdGFmaWxlICVzLlxuIiwgZmlsZW5hbWUpOworICAgICAgZXhpdCAoLTEpOworICAgIH0KKyAgYXJnLmFkZHIubGJhPWVudHJ5W3RyYWNrXS5jZHRlX2FkZHIubGJhOworICBhcmcuYWRkcl9mb3JtYXQ9Q0RST01fTEJBOyAvKiBDRFJPTV9NU0Ygd291bGQgYmUgcG9zc2libGUgaGVyZSwgdG9vLiAqLworICBhcmcubmZyYW1lcz0xOworICBhcmcuYnVmPSZidWZmZXJbMF07CisgIGxpbWl0PWVudHJ5W3RyYWNrKzFdLmNkdGVfYWRkci5sYmE7CisgIGZvciAoO2FyZy5hZGRyLmxiYTxsaW1pdDthcmcuYWRkci5sYmErKykKKyAgICB7CisgICAgICBlcnI9aW9jdGwoZHJpdmUsIENEUk9NUkVBREFVRElPLCAmYXJnKTsKKyAgICAgIGlmIChlcnIhPTApCisJeworCSAgZnByaW50ZihzdGRlcnIsICJjYW4ndCByZWFkIGFicy4gZnJhbWUgIyVkIChlcnJvciAlZCkuXG4iLCAKKwkJIGFyZy5hZGRyLmxiYSwgZXJyKTsKKwl9CisgICAgICBqPXdyaXRlKGRhdGFmaWxlLCAmYnVmZmVyWzBdLCBDRF9GUkFNRVNJWkVfUkFXKTsKKyAgICAgIGlmIChqIT1DRF9GUkFNRVNJWkVfUkFXKQorCXsKKwkgIGZwcmludGYoc3RkZXJyLCJJL08gZXJyb3IgKGRhdGFmaWxlKSBhdCByZWwuIGZyYW1lICVkXG4iLAorCQkJIGFyZy5hZGRyLmxiYS1lbnRyeVt0cmFja10uY2R0ZV9hZGRyLmxiYSk7CisJfQorICAgICAgYXJnLmFkZHIubGJhKys7CisgICAgfQorfQorLyo9PT09PT09PT09PT09PT09PT09PT0gZW5kIHByb2dyYW0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK0F0IGZ0cC5nd2RnLmRlOi9wdWIvbGludXgvbWlzYy9jZGRhMndhdi1zYnBjZC4qLnRhci5neiBpcyBhbiBhZGFwdGVkIHZlcnNpb24gb2YKK0hlaWtvIEVpc3NmZWxkdCdzIGRpZ2l0YWwtYXVkaW8gdG8gLldBViBjb252ZXJ0ZXIgKHRoZSBvcmlnaW5hbCBpcyB0aGVyZSwgdG9vKS4KK1RoaXMgaXMgcHJlbGltaW5hcnksIGFzIEhlaWtvIGhpbXNlbGYgd2lsbCBjYXJlIGFib3V0IGl0LgorCisKK0tub3duIHByb2JsZW1zOgorLS0tLS0tLS0tLS0tLS0tCisKK0N1cnJlbnRseSwgdGhlIGRldGVjdGlvbiBvZiBkaXNrIGNoYW5nZSBvciByZW1vdmFsIGlzIGFjdGl2ZWx5IGRpc2FibGVkLgorCitNb3N0IGF0dGVtcHRzIHRvIHJlYWQgdGhlIFVQQy9FQU4gY29kZSByZXN1bHQgaW4gYSBzdHJlYW0gb2YgemVyb2VzLiBBbGwgbXkKK2RyaXZlcyBhcmUgbW9zdGx5IHRlbGxpbmcgdGhlcmUgaXMgbm8gVVBDL0VBTiBjb2RlIG9uIGRpc2sgb3IgdGhlcmUgaXMsIGJ1dCBpdAoraXMgYW4gYWxsLXplcm8gbnVtYmVyLiBJIGd1ZXNzIG5vdyBhbG1vc3Qgbm8gQ0QgaG9sZHMgc3VjaCBhIG51bWJlci4KKworQnVnIHJlcG9ydHMsIGNvbW1lbnRzLCB3aXNoZXMsIGRvbmF0aW9ucyAodGVjaG5pY2FsIGluZm9ybWF0aW9uIGlzIGEgZG9uYXRpb24sCit0b28gOi0pIGV0Yy4gdG8gZW1vZW5rZUBnd2RnLmRlLgorCitTbmFpbE1haWwgYWRkcmVzcywgcHJlZmVyYWJsZSBmb3IgQ0QgZWRpdG9ycyBpZiB0aGV5IHdhbnQgdG8gc3VibWl0IGEgZnJlZQorImNvb3BlcmF0aW9uIiBjb3B5OgorICAgICAgICAgICAgICAgICAgICAgICAgIEViZXJoYXJkIE1vZW5rZWJlcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWluaG9sZHN0ci4gMTQKKyAgICAgICAgICAgICAgICAgICAgICAgICBELTM3MDgzIEdvZXR0aW5nZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBHZXJtYW55CistLS0KKworCitBcHBlbmRpeCAtLSB0aGUgImNkdGVzdGVyIiB1dGlsaXR5OgorCisvKgorICogY2R0ZXN0ZXIuYyAtLSB0ZXN0IHRoZSBhdWRpbyBmdW5jdGlvbnMgb2YgYSBDRCBkcml2ZXIKKyAqCisgKiAoYykgMTk5NSBFYmVyaGFyZCBNb2Vua2ViZXJnIDxlbW9lbmtlQGd3ZGcuZGU+CisgKiAgICAgICAgICBwdWJsaXNoZWQgdW5kZXIgdGhlIEdQTAorICoKKyAqICAgICAgICAgIG1hZGUgdW5kZXIgaGVhdnkgdXNlIG9mIHRoZSAiVGlueSBBdWRpbyBDRCBQbGF5ZXIiCisgKiAgICAgICAgICBmcm9tIFdlcm5lciBaaW1tZXJtYW5uIDx6aW1tZXJtYUByei5maHQtZXNzbGluZ2VuLmRlPgorICogICAgICAgICAgKHNlZSBsaW51eC9kcml2ZXJzL2Jsb2NrL1JFQURNRS5henRjZCkKKyAqLworI3VuZGVmIEFaVF9QUklWQVRFX0lPQ1RMUyAvKiBub3Qgc3VwcG9ydGVkIGJ5IGV2ZXJ5IENEUk9NIGRyaXZlciAqLworI2RlZmluZSBTQlBfUFJJVkFURV9JT0NUTFMgLyogbm90IHN1cHBvcnRlZCBieSBldmVyeSBDRFJPTSBkcml2ZXIgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgorCisjaWZkZWYgQVpUX1BSSVZBVEVfSU9DVExTCisjaW5jbHVkZSA8bGludXgvLi4vLi4vZHJpdmVycy9jZHJvbS9henRjZC5oPgorI2VuZGlmIEFaVF9QUklWQVRFX0lPQ1RMUworI2lmZGVmIFNCUF9QUklWQVRFX0lPQ1RMUworI2luY2x1ZGUgPGxpbnV4Ly4uLy4uL2RyaXZlcnMvY2Ryb20vc2JwY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2VuZGlmIFNCUF9QUklWQVRFX0lPQ1RMUworCitzdHJ1Y3QgY2Ryb21fdG9jaGRyIGhkcjsKK3N0cnVjdCBjZHJvbV90b2NoZHIgdG9jSGRyOworc3RydWN0IGNkcm9tX3RvY2VudHJ5IFRvY0VudHJ5WzEwMV07CitzdHJ1Y3QgY2Ryb21fdG9jZW50cnkgZW50cnk7CitzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uIG1zX2luZm87CitzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbyByZWFkX2F1ZGlvOworc3RydWN0IGNkcm9tX3RpIHRpOworc3RydWN0IGNkcm9tX3N1YmNobmwgc3ViY2hubDsKK3N0cnVjdCBjZHJvbV9tc2YgbXNmOworc3RydWN0IGNkcm9tX3ZvbGN0cmwgdm9sY3RybDsKKyNpZmRlZiBBWlRfUFJJVkFURV9JT0NUTFMKK3VuaW9uCit7CisJc3RydWN0IGNkcm9tX21zZiBtc2Y7CisJdW5zaWduZWQgY2hhciBidWZbQ0RfRlJBTUVTSVpFX1JBV107Cit9IGF6dDsKKyNlbmRpZiBBWlRfUFJJVkFURV9JT0NUTFMKK2ludCBpLCBpMSwgaTIsIGkzLCBqLCBrOwordW5zaWduZWQgY2hhciBzZXF1ZW5jZT0wOwordW5zaWduZWQgY2hhciBjb21tYW5kWzgwXTsKK3Vuc2lnbmVkIGNoYXIgZmlyc3Q9MSwgbGFzdD0xOworY2hhciAqZGVmYXVsdF9kZXZpY2U9Ii9kZXYvY2Ryb20iOworY2hhciBkZXZbMjBdOworY2hhciBmaWxlbmFtZVsyMF07CitpbnQgZHJpdmU7CitpbnQgZGF0YWZpbGU7CitpbnQgcmM7CisKK3ZvaWQgaGVscCh2b2lkKQoreworCXByaW50ZigiQXZhaWxhYmxlIENvbW1hbmRzOlxuIik7CisJcHJpbnRmKCJTVE9QICAgICAgICAgIHMgICAgICBFSkVDVCAgICAgICAgZSAgICAgICBRVUlUICAgICAgICAgcVxuIik7CisJcHJpbnRmKCJQTEFZIFRSQUNLICAgIHQgICAgICBQQVVTRSAgICAgICAgcCAgICAgICBSRVNVTUUgICAgICAgclxuIik7CisJcHJpbnRmKCJORVhUIFRSQUNLICAgIG4gICAgICBSRVBFQVQgTEFTVCAgbCAgICAgICBIRUxQICAgICAgICAgaFxuIik7CisJcHJpbnRmKCJTVUJDSEFOTkVMX1EgIGMgICAgICBUUkFDSyBJTkZPICAgaSAgICAgICBQTEFZIEFUICAgICAgYVxuIik7CisJcHJpbnRmKCJSRUFEICAgICAgICAgIGQgICAgICBSRUFEIFJBVyAgICAgdyAgICAgICBSRUFEIEFVRElPICAgQVxuIik7CisJcHJpbnRmKCJNUy1JTkZPICAgICAgIE0gICAgICBUT0MgICAgICAgICAgVCAgICAgICBTVEFSVCAgICAgICAgU1xuIik7CisJcHJpbnRmKCJTRVQgRUpFQ1RTVyAgIFggICAgICBERVZJQ0UgICAgICAgRCAgICAgICBERUJVRyAgICAgICAgWVxuIik7CisJcHJpbnRmKCJBVURJT19CVUZTSVogIFogICAgICBSRVNFVCAgICAgICAgUiAgICAgICBTRVQgVk9MVU1FICAgdlxuIik7CisJcHJpbnRmKCJHRVQgVk9MVU1FICAgIFZcbiIpOworfQorCisvKgorICogIGNvbnZlcnQgTVNGIG51bWJlciAoMyBieXRlcyBvbmx5KSB0byBMb2dpY2FsX0Jsb2NrX0FkZHJlc3MgCisgKi8KK2ludCBtc2YybGJhKHVfY2hhciAqbXNmKQoreworCWludCBpOworCQorCWk9KG1zZlswXSAqIENEX1NFQ1MgKyBtc2ZbMV0pICogQ0RfRlJBTUVTICsgbXNmWzJdIC0gQ0RfQkxPQ0tfT0ZGU0VUOworCWlmIChpPDApIHJldHVybiAoMCk7CisJcmV0dXJuIChpKTsKK30KKy8qCisgKiAgY29udmVydCBsb2dpY2FsX2Jsb2NrX2FkZHJlc3MgdG8gbS1zLWZfbnVtYmVyICgzIGJ5dGVzIG9ubHkpCisgKi8KK3ZvaWQgbGJhMm1zZihpbnQgbGJhLCB1bnNpZ25lZCBjaGFyICptc2YpCit7CisJbGJhICs9IENEX0JMT0NLX09GRlNFVDsKKwltc2ZbMF0gPSBsYmEgLyAoQ0RfU0VDUypDRF9GUkFNRVMpOworCWxiYSAlPSBDRF9TRUNTKkNEX0ZSQU1FUzsKKwltc2ZbMV0gPSBsYmEgLyBDRF9GUkFNRVM7CisJbXNmWzJdID0gbGJhICUgQ0RfRlJBTUVTOworfQorCitpbnQgaW5pdF9kcml2ZShjaGFyICpkZXYpCit7CisJdW5zaWduZWQgY2hhciBtc2ZfZW50WzNdOworCisJLyoKKwkgKiBvcGVuIHRoZSBkZXZpY2UKKwkgKi8KKwlkcml2ZT1vcGVuKGRldiwwKTsKKwlpZiAoZHJpdmU8MCkgcmV0dXJuICgtMSk7CisJLyoKKwkgKiBnZXQgVG9jSGVhZGVyCisJICovCisJcHJpbnRmKCJnZXR0aW5nIFRvY0hlYWRlci4uLlxuIik7CisJcmM9aW9jdGwoZHJpdmUsQ0RST01SRUFEVE9DSERSLCZoZHIpOworCWlmIChyYyE9MCkKKwl7CisJCXByaW50ZigiY2FuJ3QgZ2V0IFRvY0hlYWRlciAoZXJyb3IgJWQpLlxuIixyYyk7CisJCXJldHVybiAoLTIpOworCX0KKwllbHNlCisJCWZpcnN0PWhkci5jZHRoX3RyazA7CisJCWxhc3Q9aGRyLmNkdGhfdHJrMTsKKwkJcHJpbnRmKCJUb2NIZWFkZXI6ICVkICVkXG4iLGhkci5jZHRoX3RyazAsaGRyLmNkdGhfdHJrMSk7CisJLyoKKwkgKiBnZXQgYW5kIGRpc3BsYXkgYWxsIFRvY0VudHJpZXMKKwkgKi8KKwlwcmludGYoImdldHRpbmcgVG9jRW50cmllcy4uLlxuIik7CisJZm9yIChpPTE7aTw9aGRyLmNkdGhfdHJrMSsxO2krKykKKwl7CisJCWlmIChpIT1oZHIuY2R0aF90cmsxKzEpIFRvY0VudHJ5W2ldLmNkdGVfdHJhY2sgPSBpOworCQllbHNlIFRvY0VudHJ5W2ldLmNkdGVfdHJhY2sgPSBDRFJPTV9MRUFET1VUOworCQlUb2NFbnRyeVtpXS5jZHRlX2Zvcm1hdCA9IENEUk9NX0xCQTsKKwkJcmM9aW9jdGwoZHJpdmUsQ0RST01SRUFEVE9DRU5UUlksJlRvY0VudHJ5W2ldKTsKKwkJaWYgKHJjIT0wKQorCQl7CisJCQlwcmludGYoImNhbid0IGdldCBUb2NFbnRyeSAjJWQgKGVycm9yICVkKS5cbiIsaSxyYyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlsYmEybXNmKFRvY0VudHJ5W2ldLmNkdGVfYWRkci5sYmEsJm1zZl9lbnRbMF0pOworCQkJaWYgKFRvY0VudHJ5W2ldLmNkdGVfdHJhY2s9PUNEUk9NX0xFQURPVVQpCisJCQl7CisJCQkJcHJpbnRmKCJUb2NFbnRyeSAjJTAyWDogJTFYICUxWCAlMDJkOiUwMmQ6JTAyZCAobGJhOiAweCUwNlgpICUwMlhcbiIsCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfdHJhY2ssCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfYWRyLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2N0cmwsCisJCQkJICAgICAgIG1zZl9lbnRbMF0sCisJCQkJICAgICAgIG1zZl9lbnRbMV0sCisJCQkJICAgICAgIG1zZl9lbnRbMl0sCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfYWRkci5sYmEsCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfZGF0YW1vZGUpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByaW50ZigiVG9jRW50cnkgIyUwMmQ6ICUxWCAlMVggJTAyZDolMDJkOiUwMmQgKGxiYTogMHglMDZYKSAlMDJYXG4iLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX3RyYWNrLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2FkciwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9jdHJsLAorCQkJCSAgICAgICBtc2ZfZW50WzBdLAorCQkJCSAgICAgICBtc2ZfZW50WzFdLAorCQkJCSAgICAgICBtc2ZfZW50WzJdLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2FkZHIubGJhLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2RhdGFtb2RlKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKGhkci5jZHRoX3RyazEpOyAvKiBudW1iZXIgb2YgdHJhY2tzICovCit9CisKK3ZvaWQgZGlzcGxheShpbnQgc2l6ZSx1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJaz0wOworCWdldGNoYXIoKTsKKwlmb3IgKGk9MDtpPChzaXplKzEpLzE2O2krKykKKwl7CisJCXByaW50ZigiJTRkOiIsaSoxNik7CisJCWZvciAoaj0wO2o8MTY7aisrKQorCQl7CisJCQlwcmludGYoIiAlMDJYIixidWZmZXJbaSoxNitqXSk7CisJCX0KKwkJcHJpbnRmKCIgICIpOworCQlmb3IgKGo9MDtqPDE2O2orKykKKwkJeworCQkJaWYgKGlzYWxudW0oYnVmZmVyW2kqMTYral0pKSAKKwkJCQlwcmludGYoIiVjIixidWZmZXJbaSoxNitqXSk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIuIik7CisJCX0KKwkJcHJpbnRmKCJcbiIpOyAKKwkJaysrOworCQlpZiAoaz49MjApCisJCXsKKwkJCXByaW50ZigicHJlc3MgRU5URVIgdG8gY29udGludWVcbiIpOworCQkJZ2V0Y2hhcigpOworCQkJaz0wOworCQl9CisJfSAKK30gCisKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlwcmludGYoIlxuVGVzdGluZyB0b29sIGZvciBhIENEUk9NIGRyaXZlcidzIGF1ZGlvIGZ1bmN0aW9ucyBWMC4xXG4iKTsKKwlwcmludGYoIihDKSAxOTk1IEViZXJoYXJkIE1vZW5rZWJlcmcgPGVtb2Vua2VAZ3dkZy5kZT5cbiIpOworCXByaW50ZigiaW5pdGlhbGl6aW5nLi4uXG4iKTsKKwkKKwlyYz1pbml0X2RyaXZlKGRlZmF1bHRfZGV2aWNlKTsKKwlpZiAocmM8MCkgcHJpbnRmKCJjb3VsZCBub3Qgb3BlbiAlcyAocmM9JWQpLlxuIixkZWZhdWx0X2RldmljZSxyYyk7CisJaGVscCgpOworCXdoaWxlICgxKQorCXsKKwkJcHJpbnRmKCJHaXZlIGEgb25lLWxldHRlciBjb21tYW5kIChoID0gaGVscCk6ICIpOworCQlzY2FuZigiJXMiLGNvbW1hbmQpOworCQljb21tYW5kWzFdPTA7CisJCXN3aXRjaCAoY29tbWFuZFswXSkKKwkJeworCQljYXNlICdEJzoKKwkJCXByaW50ZigiZGV2aWNlIG5hbWUgKGYuZS4gL2Rldi9zYnBjZDMpOiA/ICIpOworCQkJc2NhbmYoIiVzIiwmZGV2KTsKKwkJCWNsb3NlKGRyaXZlKTsKKwkJCXJjPWluaXRfZHJpdmUoZGV2KTsKKwkJCWlmIChyYzwwKSBwcmludGYoImNvdWxkIG5vdCBvcGVuICVzIChyYyAlZCkuXG4iLGRldixyYyk7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTUVKRUNUKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NRUpFQ1Q6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVBBVVNFKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NUEFVU0U6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVJFU1VNRSk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVJFU1VNRTogcmM9JWQuXG4iLHJjKTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NU1RPUCk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVNUT1A6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsKKwkJY2FzZSAnUyc6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVNUQVJUKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NU1RBUlQ6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVJFQURUT0NIRFIsJnRvY0hkcik7CisJCQlpZiAocmM8MCkKKwkJCXsKKwkJCQlwcmludGYoIkNEUk9NUkVBRFRPQ0hEUjogcmM9JWQuXG4iLHJjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZpcnN0PXRvY0hkci5jZHRoX3RyazA7CisJCQlsYXN0PSB0b2NIZHIuY2R0aF90cmsxOworCQkJaWYgKChmaXJzdD09MCl8fChmaXJzdD5sYXN0KSkKKwkJCXsKKwkJCQlwcmludGYgKCItLWdvdCBpbnZhbGlkIFRPQyBkYXRhLlxuIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcHJpbnRmKCItLWVudGVyIHRyYWNrIG51bWJlcihmaXJzdD0lZCwgbGFzdD0lZCk6ICIsZmlyc3QsbGFzdCk7CisJCQkJc2NhbmYoIiVkIiwmaTEpOworCQkJCXRpLmNkdGlfdHJrMD1pMTsKKwkJCQlpZiAodGkuY2R0aV90cmswPGZpcnN0KSB0aS5jZHRpX3RyazA9Zmlyc3Q7CisJCQkJaWYgKHRpLmNkdGlfdHJrMD5sYXN0KSB0aS5jZHRpX3RyazA9bGFzdDsKKwkJCQl0aS5jZHRpX2luZDA9MDsKKwkJCQl0aS5jZHRpX3RyazE9bGFzdDsKKwkJCQl0aS5jZHRpX2luZDE9MDsKKwkJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVNUT1ApOworCQkJCXJjPWlvY3RsKGRyaXZlLENEUk9NUExBWVRSS0lORCwmdGkpOworCQkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NUExBWVRSS0lORDogcmM9JWQuXG4iLHJjKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NU1RPUCk7CisJCQlpZiAoKyt0aS5jZHRpX3RyazA+bGFzdCkgdGkuY2R0aV90cmswPWxhc3Q7CisJCQl0aS5jZHRpX2luZDA9MDsKKwkJCXRpLmNkdGlfdHJrMT1sYXN0OworCQkJdGkuY2R0aV9pbmQxPTA7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVBMQVlUUktJTkQsJnRpKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NUExBWVRSS0lORDogcmM9JWQuXG4iLHJjKTsKKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NU1RPUCk7CisJCQlpZiAoLS10aS5jZHRpX3RyazA8Zmlyc3QpIHRpLmNkdGlfdHJrMD1maXJzdDsKKwkJCXRpLmNkdGlfaW5kMD0wOworCQkJdGkuY2R0aV90cmsxPWxhc3Q7CisJCQl0aS5jZHRpX2luZDE9MDsKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NUExBWVRSS0lORCwmdGkpOworCQkJaWYgKHJjPDApIHByaW50ZigiQ0RST01QTEFZVFJLSU5EOiByYz0lZC5cbiIscmMpOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3ViY2hubC5jZHNjX2Zvcm1hdD1DRFJPTV9NU0Y7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVNVQkNITkwsJnN1YmNobmwpOworCQkJaWYgKHJjPDApIHByaW50ZigiQ0RST01TVUJDSE5MOiByYz0lZC5cbiIscmMpOworCQkJZWxzZQorCQkJeworCQkJCXByaW50ZigiQXVkaW9TdGF0dXM6JXMgIFRyYWNrOiVkICBNb2RlOiVkICBNU0Y9JTAyZDolMDJkOiUwMmRcbiIsCisJCQkJICAgICAgIHN1YmNobmwuY2RzY19hdWRpb3N0YXR1cz09Q0RST01fQVVESU9fUExBWSA/ICJQTEFZSU5HIjoiTk9UIFBMQVlJTkciLAorCQkJCSAgICAgICBzdWJjaG5sLmNkc2NfdHJrLHN1YmNobmwuY2RzY19hZHIsIAorCQkJCSAgICAgICBzdWJjaG5sLmNkc2NfYWJzYWRkci5tc2YubWludXRlLAorCQkJCSAgICAgICBzdWJjaG5sLmNkc2NfYWJzYWRkci5tc2Yuc2Vjb25kLAorCQkJCSAgICAgICBzdWJjaG5sLmNkc2NfYWJzYWRkci5tc2YuZnJhbWUpOworCQkJfQorCQkJYnJlYWs7ICAgICAgICAgICAgICAKKwkJY2FzZSAnaSc6CisJCQlwcmludGYoIlRyYWNrIE5vLjogIik7CisJCQlzY2FuZigiJWQiLCZpMSk7CisJCQllbnRyeS5jZHRlX3RyYWNrPWkxOworCQkJaWYgKGVudHJ5LmNkdGVfdHJhY2s8Zmlyc3QpIGVudHJ5LmNkdGVfdHJhY2s9Zmlyc3Q7CisJCQlpZiAoZW50cnkuY2R0ZV90cmFjaz5sYXN0KSAgZW50cnkuY2R0ZV90cmFjaz1sYXN0OworCQkJZW50cnkuY2R0ZV9mb3JtYXQ9Q0RST01fTVNGOworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01SRUFEVE9DRU5UUlksJmVudHJ5KTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NUkVBRFRPQ0VOVFJZOiByYz0lZC5cbiIscmMpOworCQkJZWxzZQorCQkJeworCQkJCXByaW50ZigiTW9kZSAlZCBUcmFjaywgc3RhcnRzIGF0ICUwMmQ6JTAyZDolMDJkXG4iLAorCQkJCSAgICAgICBlbnRyeS5jZHRlX2FkciwKKwkJCQkgICAgICAgZW50cnkuY2R0ZV9hZGRyLm1zZi5taW51dGUsCisJCQkJICAgICAgIGVudHJ5LmNkdGVfYWRkci5tc2Yuc2Vjb25kLAorCQkJCSAgICAgICBlbnRyeS5jZHRlX2FkZHIubXNmLmZyYW1lKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCXByaW50ZigiQWRkcmVzcyAobWluOnNlYzpmcm0pICAiKTsKKwkJCXNjYW5mKCIlZDolZDolZCIsJmkxLCZpMiwmaTMpOworCQkJbXNmLmNkbXNmX21pbjA9aTE7CisJCQltc2YuY2Rtc2Zfc2VjMD1pMjsKKwkJCW1zZi5jZG1zZl9mcmFtZTA9aTM7CisJCQlpZiAobXNmLmNkbXNmX3NlYzA+NTkpIG1zZi5jZG1zZl9zZWMwPTU5OworCQkJaWYgKG1zZi5jZG1zZl9mcmFtZTA+NzQpIG1zZi5jZG1zZl9mcmFtZTA9NzQ7CisJCQlsYmEybXNmKFRvY0VudHJ5W2xhc3QrMV0uY2R0ZV9hZGRyLmxiYS0xLCZtc2YuY2Rtc2ZfbWluMSk7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVNUT1ApOworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01QTEFZTVNGLCZtc2YpOworCQkJaWYgKHJjPDApIHByaW50ZigiQ0RST01QTEFZTVNGOiByYz0lZC5cbiIscmMpOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01WT0xSRUFELCZ2b2xjdHJsKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NVk9MQ1RSTDogcmM9JWQuXG4iLHJjKTsKKwkJCXByaW50ZigiVm9sdW1lOiBjaGFubmVsIDAgKGxlZnQpICVkLCBjaGFubmVsIDEgKHJpZ2h0KSAlZFxuIix2b2xjdHJsLmNoYW5uZWwwLHZvbGN0cmwuY2hhbm5lbDEpOworCQkJYnJlYWs7ICAKKwkJY2FzZSAnUic6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVJFU0VUKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NUkVTRVQ6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsKKyNpZmRlZiBBWlRfUFJJVkFURV9JT0NUTFMgLypub3Qgc3VwcG9ydGVkIGJ5IGV2ZXJ5IENEUk9NIGRyaXZlciovCisJCWNhc2UgJ2QnOgorCQkJcHJpbnRmKCJBZGRyZXNzIChtaW46c2VjOmZybSkgICIpOworCQkJc2NhbmYoIiVkOiVkOiVkIiwmaTEsJmkyLCZpMyk7CisJCQlhenQubXNmLmNkbXNmX21pbjA9aTE7CisJCQlhenQubXNmLmNkbXNmX3NlYzA9aTI7CisJCQlhenQubXNmLmNkbXNmX2ZyYW1lMD1pMzsKKwkJCWlmIChhenQubXNmLmNkbXNmX3NlYzA+NTkpIGF6dC5tc2YuY2Rtc2Zfc2VjMD01OTsKKwkJCWlmIChhenQubXNmLmNkbXNmX2ZyYW1lMD43NCkgYXp0Lm1zZi5jZG1zZl9mcmFtZTA9NzQ7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVJFQURNT0RFMSwmYXp0Lm1zZik7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVJFQURNT0RFMTogcmM9JWQuXG4iLHJjKTsKKwkJCWVsc2UgZGlzcGxheShDRF9GUkFNRVNJWkUsYXp0LmJ1Zik7CisJCQlicmVhazsKKwkJY2FzZSAndyc6CisJCQlwcmludGYoIkFkZHJlc3MgKG1pbjpzZWM6ZnJhbWUpICAiKTsKKwkJCXNjYW5mKCIlZDolZDolZCIsJmkxLCZpMiwmaTMpOworCQkJYXp0Lm1zZi5jZG1zZl9taW4wPWkxOworCQkJYXp0Lm1zZi5jZG1zZl9zZWMwPWkyOworCQkJYXp0Lm1zZi5jZG1zZl9mcmFtZTA9aTM7CisJCQlpZiAoYXp0Lm1zZi5jZG1zZl9zZWMwPjU5KSBhenQubXNmLmNkbXNmX3NlYzA9NTk7CisJCQlpZiAoYXp0Lm1zZi5jZG1zZl9mcmFtZTA+NzQpIGF6dC5tc2YuY2Rtc2ZfZnJhbWUwPTc0OworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01SRUFETU9ERTIsJmF6dC5tc2YpOworCQkJaWYgKHJjPDApIHByaW50ZigiQ0RST01SRUFETU9ERTI6IHJjPSVkLlxuIixyYyk7CisJCQllbHNlIGRpc3BsYXkoQ0RfRlJBTUVTSVpFX1JBVyxhenQuYnVmKTsgLyogY3VycmVudGx5IG9ubHkgMjMzNiAqLworCQkJYnJlYWs7ICAKKyNlbmRpZgorCQljYXNlICd2JzoKKwkJCXByaW50ZigiLS1DaGFubmVsIDAgKExlZnQpICAoMC0yNTUpOiAiKTsKKwkJCXNjYW5mKCIlZCIsJmkxKTsKKwkJCXZvbGN0cmwuY2hhbm5lbDA9aTE7CisJCQlwcmludGYoIi0tQ2hhbm5lbCAxIChSaWdodCkgKDAtMjU1KTogIik7CisJCQlzY2FuZigiJWQiLCZpMSk7CisJCQl2b2xjdHJsLmNoYW5uZWwxPWkxOworCQkJdm9sY3RybC5jaGFubmVsMj0wOworCQkJdm9sY3RybC5jaGFubmVsMz0wOworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01WT0xDVFJMLCZ2b2xjdHJsKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NVk9MQ1RSTDogcmM9JWQuXG4iLHJjKTsKKwkJCWJyZWFrOyAgCisJCWNhc2UgJ3EnOgorCQkJY2xvc2UoZHJpdmUpOworCQkJZXhpdCgwKTsKKwkJY2FzZSAnaCc6CisJCQloZWxwKCk7CisJCQlicmVhazsKKwkJY2FzZSAnVCc6IC8qIGRpc3BsYXkgVE9DIGVudHJ5IC0gd2l0aG91dCBpbnZvbHZpbmcgdGhlIGRyaXZlciAqLworCQkJc2NhbmYoIiVkIiwmaSk7CisJCQlpZiAoKGk8aGRyLmNkdGhfdHJrMCl8fChpPmhkci5jZHRoX3RyazEpKQorCQkJCXByaW50ZigiaW52YWxpZCB0cmFjayBudW1iZXIuXG4iKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIlRvY0VudHJ5ICUwMmQ6IGFkcj0lMDFYIGN0cmw9JTAxWCBtc2Y9JTAyZDolMDJkOiUwMmQgbW9kZT0lMDJYXG4iLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX3RyYWNrLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2FkciwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9jdHJsLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2FkZHIubXNmLm1pbnV0ZSwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9hZGRyLm1zZi5zZWNvbmQsCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfYWRkci5tc2YuZnJhbWUsCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfZGF0YW1vZGUpOworCQkJYnJlYWs7CisJCWNhc2UgJ0EnOiAvKiByZWFkIGF1ZGlvIGRhdGEgaW50byBmaWxlICovCisJCQlwcmludGYoIkFkZHJlc3MgKG1pbjpzZWM6ZnJtKSA/ICIpOworCQkJc2NhbmYoIiVkOiVkOiVkIiwmaTEsJmkyLCZpMyk7CisJCQlyZWFkX2F1ZGlvLmFkZHIubXNmLm1pbnV0ZT1pMTsKKwkJCXJlYWRfYXVkaW8uYWRkci5tc2Yuc2Vjb25kPWkyOworCQkJcmVhZF9hdWRpby5hZGRyLm1zZi5mcmFtZT1pMzsKKwkJCXJlYWRfYXVkaW8uYWRkcl9mb3JtYXQ9Q0RST01fTVNGOworCQkJcHJpbnRmKCIjIG9mIGZyYW1lcyA/ICIpOworCQkJc2NhbmYoIiVkIiwmaTEpOworCQkJcmVhZF9hdWRpby5uZnJhbWVzPWkxOworCQkJaz1yZWFkX2F1ZGlvLm5mcmFtZXMqQ0RfRlJBTUVTSVpFX1JBVzsKKwkJCXJlYWRfYXVkaW8uYnVmPW1hbGxvYyhrKTsKKwkJCWlmIChyZWFkX2F1ZGlvLmJ1Zj09TlVMTCkKKwkJCXsKKwkJCQlwcmludGYoImNhbid0IG1hbGxvYyAlZCBieXRlcy5cbiIsayk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzcHJpbnRmKGZpbGVuYW1lLCJhdWRpb18lMDJkJTAyZCUwMmRfJTAyZC4lMDJkXDAiLAorCQkJCXJlYWRfYXVkaW8uYWRkci5tc2YubWludXRlLAorCQkJCXJlYWRfYXVkaW8uYWRkci5tc2Yuc2Vjb25kLAorCQkJCXJlYWRfYXVkaW8uYWRkci5tc2YuZnJhbWUsCisJCQkJcmVhZF9hdWRpby5uZnJhbWVzLAorCQkJCSsrc2VxdWVuY2UpOworCQkJZGF0YWZpbGU9Y3JlYXQoZmlsZW5hbWUsIDA3NTUpOworCQkJaWYgKGRhdGFmaWxlPDApCisJCQl7CisJCQkJcHJpbnRmKCJjYW4ndCBvcGVuIGRhdGFmaWxlICVzLlxuIixmaWxlbmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVJFQURBVURJTywmcmVhZF9hdWRpbyk7CisJCQlpZiAocmMhPTApCisJCQl7CisJCQkJcHJpbnRmKCJDRFJPTVJFQURBVURJTzogcmM9JWQuXG4iLHJjKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlyYz13cml0ZShkYXRhZmlsZSwmcmVhZF9hdWRpby5idWYsayk7CisJCQkJaWYgKHJjIT1rKSBwcmludGYoImRhdGFmaWxlIEkvTyBlcnJvciAoJWQpLlxuIixyYyk7CisJCQl9CisJCQljbG9zZShkYXRhZmlsZSk7CisJCQlicmVhazsKKwkJY2FzZSAnWCc6IC8qIHNldCBFSkVDVF9TVyAoMDogZGlzYWJsZSwgMTogZW5hYmxlIGF1dG8tZWplY3RpbmcpICovCisJCQlzY2FuZigiJWQiLCZpKTsKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NRUpFQ1RfU1csaSk7CisJCQlpZiAocmMhPTApCisJCQkJcHJpbnRmKCJDRFJPTUVKRUNUX1NXOiByYz0lZC5cbiIscmMpOworCQkJZWxzZQorCQkJCXByaW50ZigiRUpFQ1RfU1cgc2V0IHRvICVkXG4iLGkpOworCQkJYnJlYWs7CisJCWNhc2UgJ00nOiAvKiBnZXQgdGhlIG11bHRpc2Vzc2lvbiByZWRpcmVjdGlvbiBpbmZvICovCisJCQltc19pbmZvLmFkZHJfZm9ybWF0PUNEUk9NX0xCQTsKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NTVVMVElTRVNTSU9OLCZtc19pbmZvKTsKKwkJCWlmIChyYyE9MCkKKwkJCXsKKwkJCQlwcmludGYoIkNEUk9NTVVMVElTRVNTSU9OKGxiYSk6IHJjPSVkLlxuIixyYyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKG1zX2luZm8ueGFfZmxhZykgcHJpbnRmKCJNdWx0aVNlc3Npb24gb2Zmc2V0IChsYmEpOiAlZCAoMHglMDZYKVxuIixtc19pbmZvLmFkZHIubGJhLG1zX2luZm8uYWRkci5sYmEpOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCXByaW50ZigidGhpcyBDRCBpcyBub3QgYW4gWEEgZGlzay5cbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQltc19pbmZvLmFkZHJfZm9ybWF0PUNEUk9NX01TRjsKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NTVVMVElTRVNTSU9OLCZtc19pbmZvKTsKKwkJCWlmIChyYyE9MCkKKwkJCXsKKwkJCQlwcmludGYoIkNEUk9NTVVMVElTRVNTSU9OKG1zZik6IHJjPSVkLlxuIixyYyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKG1zX2luZm8ueGFfZmxhZykKKwkJCQkJcHJpbnRmKCJNdWx0aVNlc3Npb24gb2Zmc2V0IChtc2YpOiAlMDJkOiUwMmQ6JTAyZCAoMHglMDJYJTAyWCUwMlgpXG4iLAorCQkJCQkgICAgICAgbXNfaW5mby5hZGRyLm1zZi5taW51dGUsCisJCQkJCSAgICAgICBtc19pbmZvLmFkZHIubXNmLnNlY29uZCwKKwkJCQkJICAgICAgIG1zX2luZm8uYWRkci5tc2YuZnJhbWUsCisJCQkJCSAgICAgICBtc19pbmZvLmFkZHIubXNmLm1pbnV0ZSwKKwkJCQkJICAgICAgIG1zX2luZm8uYWRkci5tc2Yuc2Vjb25kLAorCQkJCQkgICAgICAgbXNfaW5mby5hZGRyLm1zZi5mcmFtZSk7CisJCQkJZWxzZSBwcmludGYoInRoaXMgQ0QgaXMgbm90IGFuIFhBIGRpc2suXG4iKTsKKwkJCX0KKwkJCWJyZWFrOworI2lmZGVmIFNCUF9QUklWQVRFX0lPQ1RMUworCQljYXNlICdZJzogLyogc2V0IHRoZSBkcml2ZXIncyBtZXNzYWdlIGxldmVsICovCisjaWYgMCAvKiBub3QgaW1wbGVtZW50ZWQgeWV0ICovCisJCQlwcmludGYoImVudGVyIHN3aXRjaCBuYW1lIChmLmUuIERCR19DTUQpOiAiKTsKKwkJCXNjYW5mKCIlcyIsJmRiZ19zd2l0Y2gpOworCQkJaj1nZXRfZGJnX251bShkYmdfc3dpdGNoKTsKKyNlbHNlCisJCQlwcmludGYoImVudGVyIERESU9DU0RCRyBzd2l0Y2ggbnVtYmVyOiAiKTsKKwkJCXNjYW5mKCIlZCIsJmopOworI2VuZGlmCisJCQlwcmludGYoImVudGVyIDAgZm9yIFwib2ZmXCIsIDEgZm9yIFwib25cIjogIik7CisJCQlzY2FuZigiJWQiLCZpKTsKKwkJCWlmIChpPT0wKSBqfD0weDgwOworCQkJcHJpbnRmKCJjYWxsaW5nIFwiaW9jdGwoZHJpdmUsRERJT0NTREJHLCVkKVwiXG4iLGopOworCQkJcmM9aW9jdGwoZHJpdmUsRERJT0NTREJHLGopOworCQkJcHJpbnRmKCJERElPQ1NEQkc6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsKKwkJY2FzZSAnWic6IC8qIHNldCB0aGUgYXVkaW8gYnVmZmVyIHNpemUgKi8KKwkJCXByaW50ZigiIyBmcmFtZXMgd2FudGVkOiA/ICIpOworCQkJc2NhbmYoIiVkIiwmaik7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTUFVRElPQlVGU0laLGopOworCQkJcHJpbnRmKCIlZCBmcmFtZXMgZ3JhbnRlZC5cbiIscmMpOworCQkJYnJlYWs7CisjZW5kaWYgU0JQX1BSSVZBVEVfSU9DVExTCisJCWRlZmF1bHQ6CisJCQlwcmludGYoInVua25vd24gY29tbWFuZDogXCIlc1wiLlxuIixjb21tYW5kKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vc2pjZCBiL0RvY3VtZW50YXRpb24vY2Ryb20vc2pjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGExNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9zamNkCkBAIC0wLDAgKzEsNjAgQEAKKyAtLSBEb2N1bWVudGF0aW9uL2Nkcm9tL3NqY2QKKwkJCQk4MCUgb2YgdGhlIHdvcmsgdGFrZXMgMjAlIG9mIHRoZSB0aW1lLAorCQkJCTIwJSBvZiB0aGUgd29yayB0YWtlcyA4MCUgb2YgdGhlIHRpbWUuLi4KKwkJCQkJCShNdXJwaHkncyBsYXcpCisKKwkJCQlPbmNlIHN0YXJ0ZWQsIHRyYWluaW5nIGNhbiBub3QgYmUgc3RvcHBlZC4uLgorCQkJCQkJKFN0YXIgV2FycykKKworVGhpcyBpcyB0aGUgUkVBRE1FIGZvciB0aGUgc2pjZCBjZHJvbSBkcml2ZXIsIHZlcnNpb24gMS42LgorCitUaGlzIGZpbGUgaXMgbWVhbnQgYXMgYSB0aXBzICYgdHJpY2tzIGVkZ2UgZm9yIHRoZSB1c2FnZSBvZiB0aGUgU0FOWU8gQ0RSLUg5NEEKK2Nkcm9tIGRyaXZlLiBJdCB3aWxsIGdyb3cgYXMgdGhlIHF1ZXN0aW9ucyBhcmlzZS4gOy0pCitGb3IgaW5mbyBvbiBjb25maWd1cmluZyB0aGUgSVNQMTYgc291bmQgY2FyZCBsb29rIGF0IERvY3VtZW50YXRpb24vY2Ryb20vaXNwMTYuCisKK1RoZSBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhbnkgb2YgdGhlIFBhbmFzb25pYywgU29ueSBvciBNaXRzdW1pIHN0eWxlCitDRFJPTSBpbnRlcmZhY2VzLgorVGhlIGNkcm9tIGludGVyZmFjZSBvbiBNZWRpYSBNYWdpYydzIHNvZnQgY29uZmlndXJhYmxlIHNvdW5kIGNhcmQgSVNQMTYsCit3aGljaCB1c2VkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBkcml2ZXIsIGlzIG5vdyBzdXBwb3J0ZWQgaW4gYSBzZXBhcmF0ZSBtb2R1bGUuCitUaGlzIGluaXRpYWxpc2F0aW9uIG1vZHVsZSB3aWxsIHByb2JhYmx5IGFsc28gd29yayB3aXRoIG90aGVyIGludGVyZmFjZXMKK2Jhc2VkIG9uIGFuIE9QVGkgODJDOTI4IG9yIDgyQzkyOSBjaGlwIChsaWtlIE1BRDE2IGFuZCBNb3phcnQpOiBzZWUgdGhlCitkb2N1bWVudGF0aW9uIERvY3VtZW50YXRpb24vY2Ryb20vaXNwMTYuCisKK1RoZSBkZXZpY2UgbWFqb3IgZm9yIHNqY2QgaXMgMTgsIGFuZCBtaW5vciBpcyAwLiBDcmVhdGUgYSBibG9jayBzcGVjaWFsCitmaWxlIGluIHlvdXIgL2RldiBkaXJlY3RvcnkgKGUuZy4sIC9kZXYvc2pjZCkgd2l0aCB0aGVzZSBudW1iZXJzLgorKEZvciB0aG9zZSB3aG8gZG9uJ3Qga25vdywgYmVpbmcgcm9vdCBhbmQgZG9pbmcgdGhlIGZvbGxvd2luZyBzaG91bGQgZG8KK3RoZSB0cmljazoKKyAgbWtub2QgLW0gNjQ0IC9kZXYvc2pjZCBiIDE4IDAKK2FuZCBtb3VudCB0aGUgY2Ryb20gYnkgL2Rldi9zamNkKS4KKworVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZToKKyAgYmFzZSBhZGRyZXNzIDB4MzQwCisgIG5vIGlycQorICBubyBkbWEKKyhBY3R1YWxseSB0aGUgQ0RSLUg5NEEgZG9lc24ndCBrbm93IGhvdyB0byB1c2UgaXJxIGFuZCBkbWEuKQorQXMgb2YgdmVyc2lvbiAxLjIsIHNldHRpbmcgYmFzZSBhZGRyZXNzIGF0IGJvb3QgdGltZSBpcyBzdXBwb3J0ZWQKK3Rocm91Z2ggdGhlIHVzZSBvZiBjb21tYW5kIGxpbmUgb3B0aW9uczogdHlwZSBhdCB0aGUgImJvb3Q6IiBwcm9tcHQ6CisgIGxpbnV4IHNqY2Q9PGJhc2VfYWRkcmVzcz4KKyh3aGVyZSB5b3Ugd291bGQgdXNlIHRoZSBrZXJuZWwgbGFiZWxlZCAibGludXgiIGluIGxpbG8ncyBjb25maWd1cmF0aW9uCitmaWxlIC9ldGMvbGlsby5jb25mKS4gWW91IGNvdWxkIGFsc28gdXNlICdhcHBlbmQ9InNqY2Q9PGNvbmZpZ3VyYXRpb25faW5mbz4iJworaW4gdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgL2V0Yy9saWxvLmNvbmYKK0lmIHlvdSdyZSBidWlsZGluZyBhIGtlcm5lbCB5b3Vyc2VsZiB5b3UgY2FuIHNldCB5b3VyIGRlZmF1bHQgYmFzZQoraS9vIGFkZHJlc3Mgd2l0aCBTSkNEX0JBU0VfQUREUiBpbiAvdXNyL3NyYy9saW51eC9kcml2ZXJzL2Nkcm9tL3NqY2QuaC4KKworVGhlIHNqY2QgZHJpdmVyIHN1cHBvcnRzIGJlaW5nIGxvYWRlZCBhcyBhIG1vZHVsZS4gVGhlIGZvbGxvd2luZworY29tbWFuZCB3aWxsIHNldCB0aGUgYmFzZSBpL28gYWRkcmVzcyBvbiB0aGUgZmx5IChhc3N1bWluZyB5b3UKK2hhdmUgaW5zdGFsbGVkIHRoZSBtb2R1bGUgaW4gYW4gYXBwcm9wcmlhdGUgcGxhY2UpLgorICBpbnNtb2Qgc2pjZC5vIHNqY2RfYmFzZT08YmFzZV9hZGRyZXNzPgorCisKK0hhdmUgZnVuIQorCitJZiBzb21ldGhpbmcgaXMgd3JvbmcsIHBsZWFzZSBlbWFpbCB0bwkJdmFkaW1AcmJyZi5ydQorCQkJCQlvciAJdmFkaW1AaXBzdW4ucmFzLnJ1CisJCQkJCW9yCW1vZGVsQGNlY21vdy5lbmV0LmRlYy5jb20KKwkJCQkJb3IJSC5ULk0udi5kLk1hYXJlbEBtYXJpbi5ubAorCitJdCBoYXBwZW5zIHNvbWV0aW1lcyB0aGF0IFZhZGltIGlzIG5vdCByZWFjaGFibGUgYnkgbWFpbC4gRm9yIHRoZXNlCitpbnN0YW5jZXMsIEVyaWMgdmFuIGRlciBNYWFyZWwgd2lsbCBoZWxwIHRvby4KKworCQlWYWRpbSBWLiBNb2RlbCwgRXJpYyB2YW4gZGVyIE1hYXJlbCwgRWJlcmhhcmQgTW9lbmtlYmVyZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9zb255Y2Q1MzUgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL3NvbnljZDUzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTU4MWE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9zb255Y2Q1MzUKQEAgLTAsMCArMSwxMjEgQEAKKyAgICAgICAgICAgICAgUkVBRE1FIEZPUiBMSU5VWCBTT05ZIENEVS01MzUvNTMxIERSSVZFUgorICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIFNvbnkgQ0RVLTUzNSAoYW5kIDUzMSkgZHJpdmVyIHZlcnNpb24gMC43IGZvciBMaW51eC4KK0kgZG8gbm90IHRoaW5rIEkgaGF2ZSB0aGUgZG9jdW1lbnRhdGlvbiB0byBhZGQgZmVhdHVyZXMgbGlrZSBETUEgc3VwcG9ydAorc28gaWYgYW55b25lIGVsc2Ugd2FudHMgdG8gcHVyc3VlIGl0IG9yIGhlbHAgbWUgd2l0aCBpdCwgcGxlYXNlIGRvLgorKEkgbmVlZCB0byBzZWUgd2hhdCB3YXMgZG9uZSBmb3IgdGhlIENEVS0zMUEgZHJpdmVyIC0tIHBlcmhhcHMgSSBjYW4KK3N0ZWFsIHNvbWUgb2YgdGhhdCBjb2RlLikKKworVGhpcyBpcyBhIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIHRoZSBTb255IENEVS01MzUgQ0RST00gZHJpdmUuICBUaGlzIGlzCitvbmUgb2YgdGhlIG9sZGVyIFNvbnkgZHJpdmVzIHdpdGggaXRzIG93biBpbnRlcmZhY2UgY2FyZCAoU29ueSBidXMpLgorVGhlIERPUyBkcml2ZXIgZm9yIHRoaXMgZHJpdmUgaXMgbmFtZWQgU09OWV9DRFUuU1lTIC0gd2hlbiB5b3UgYm9vdCBET1MKK3lvdXIgZHJpdmUgc2hvdWxkIGJlIGlkZW50aWZpZWQgYXMgYSBTT05ZIENEVS01MzUuICBUaGUgZHJpdmVyIHdvcmtzCit3aXRoIGEgQ0RVLTUzMSBhbHNvLiAgT25lIHVzZXIgcmVwb3J0ZWQgdGhhdCB0aGUgZHJpdmVyIHdvcmtlZCBvbiBkcml2ZXMKK09FTSdlZCBieSBQcm9jb21tLCBkcml2ZSBhbmQgaW50ZXJmYWNlIGJvYXJkIHdlcmUgbGFiZWxsZWQgUHJvY29tbS4KKworVGhlIExpbnV4IGRyaXZlciBpcyBiYXNlZCBvbiBDb3JleSBNaW55YXJkJ3Mgc29ueWNkIDAuMyBkcml2ZXIgZm9yCit0aGUgQ0RVLTMxQS4gIFJvbiBKZXBwZXNlbiBqdXN0IGNoYW5nZWQgdGhlIGNvbW1hbmRzIHRoYXQgd2VyZSBzZW50Cit0byB0aGUgZHJpdmUgdG8gY29ycmVzcG9uZCB0byB0aGUgQ0RVLTUzNSBjb21tYW5kcyBhbmQgcmVnaXN0ZXJzLgorVGhlcmUgd2VyZSBlbm91Z2ggY2hhbmdlcyB0byBsZXQgYnVncyBjcmVlcCBpbiBidXQgaXQgc2VlbXMgdG8gYmUgc3RhYmxlLgorUm9uIHdhcyBhYmxlIHRvIHRhciBhbiBlbnRpcmUgQ0RST00gKHNob3VsZCByZWFkIGFsbCBibG9ja3MpIGFuZCBidWlsdAorZ2hvc3R2aWV3IGFuZCB4ZmlnIG9mZiBXYWxudXQgQ3JlZWsncyBYMTFSNS9HTlUgQ0RST00uICB4Y2RwbGF5ZXIgYW5kCit3b3JrbWFuIHdvcmsgd2l0aCB0aGUgZHJpdmVyLiAgT3RoZXJzIGhhdmUgdXNlZCB0aGUgZHJpdmVyIHdpdGhvdXQKK3Byb2JsZW1zIGV4Y2VwdCB0aG9zZSBkZWFsaW5nIHdpdGggd2FpdCBsb29wcyAoZml4ZWQgaW4gdGhpcmQgcmVsZWFzZSkuCitMaWtlIE1pbnlhcmQncyBvcmlnaW5hbCBkcml2ZXIgdGhpcyBvbmUgdXNlcyBhIHBvbGxlZCBpbnRlcmZhY2UgKHRoaXMKK2lzIGFsc28gdGhlIGRlZmF1bHQgc2V0dXAgZm9yIHRoZSBET1MgZHJpdmVyKS4gIEl0IGhhcyBub3QgYmVlbiB0cmllZAord2l0aCBpbnRlcnJ1cHRzIG9yIERNQSBlbmFibGVkIG9uIHRoZSBib2FyZC4KKworUkVRVUlSRU1FTlRTCis9PT09PT09PT09PT0KKworCS0gU29ueSBDRFUtNTM1IGRyaXZlLCBwcmVmZXJhYmx5IHdpdGhvdXQgaW50ZXJydXB0cyBhbmQgRE1BIAorCSAgZW5hYmxlZCBvbiB0aGUgY2FyZC4KKworCS0gRHJpdmUgbXVzdCBiZSBzZXQgdXAgYXMgdW5pdCAxLiAgT25seSB0aGUgZmlyc3QgdW5pdCB3aWxsIGJlIAorCSAgcmVjb2duaXplZAorCisJLSBZb3UgbXVzdCBlbnRlciB5b3VyIGludGVyZmFjZSBhZGRyZXNzIGludG8gCisgICAgICAgICAgL3Vzci9zcmMvbGludXgvZHJpdmVycy9jZHJvbS9zb255Y2Q1MzUuaCBhbmQgYnVpbGQgdGhlCisgICAgICAgICAgYXBwcm9wcmlhdGUga2VybmVsIG9yIHVzZSB0aGUgImtlcm5lbCBjb21tYW5kIGxpbmUiIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIHNvbnljZDUzNT0weDMyMAorICAgICAgICAgIHdpdGggdGhlIGNvcnJlY3QgaW50ZXJmYWNlIGFkZHJlc3MuCisKK05PVEVTOgorPT09PT09CisKKzEpIFRoZSBkcml2ZSBNVVNUIGJlIHR1cm5lZCBvbiB3aGVuIGJvb3Rpbmcgb3IgaXQgd2lsbCBub3QgYmUgcmVjb2duaXplZCEKKyAgIChidXQgc2VlIGNvbW1lbnRzIG9uIG1vZHVsYXJpemVkIHZlcnNpb24gYmVsb3cpCisKKzIpIHdoZW4gdGhlIGNkcm9tIGRldmljZSBpcyBvcGVuZWQgdGhlIGVqZWN0IGJ1dHRvbiBpcyBkaXNhYmxlZCB0byBrZWVwIHRoZQorICAgdXNlciBmcm9tIGVqZWN0aW5nIGEgbW91bnRlZCBkaXNrIGFuZCByZXBsYWNpbmcgaXQgd2l0aCBhbm90aGVyLgorICAgVW5mb3J0dW5hdGVseSB4Y2RwbGF5ZXIgYW5kIHdvcmttYW4gYWxzbyBvcGVuIHRoZSBjZHJvbSBkZXZpY2Ugc28geW91CisgICBoYXZlIHRvIHVzZSB0aGUgZWplY3QgYnV0dG9uIGluIHRoZSBzb2Z0d2FyZS4gIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdXIKKyAgIGNkcm9tIHBsYXllciByZWZ1c2VzIHRvIGdpdmUgdXAgaXRzIGRpc2sgLS0gZXhpdCB3b3JrbWFuIG9yIHhjZHBsYXllciwgb3IKKyAgIHVtb3VudCB0aGUgZHJpdmUgaWYgaXQgaGFzIGJlZW4gbW91bnRlZC4KKworVEhBTktTCis9PT09PT0KKworTWFueSB0aGFua3MgdG8gUm9uIEplcHBlc2VuIChyb25qLmFuQHNpdGUwMDcuc2FpYy5jb20pIGZvciBnZXR0aW5nCit0aGlzIHByb2plY3Qgb2ZmIHRoZSBncm91bmQuICBIZSB3cm90ZSB0aGUgaW5pdGlhbCByZWxlYXNlCithbmQgdGhlIGZpcnN0IHR3byBwYXRjaGVzIHRvIHRoaXMgZHJpdmVyICgwLjEsIDAuMiwgYW5kIDAuMykuCitUaGFua3MgYWxzbyB0byBFYmVyaGFyZCBNb2Vua2ViZXJnIChlbW9lbmtlQGd3ZGcuZGUpIGZvciBwcm9kZGluZworbWUgdG8gcGxhY2UgdGhpcyBjb2RlIGludG8gdGhlIG1haW5zdHJlYW0gTGludXggc291cmNlIHRyZWUKKyhhcyBvZiBMaW51eCB2ZXJzaW9uIDEuMS45MSksIGFzIHdlbGwgYXMgc29tZSBwYXRjaGVzIHRvIG1ha2UKK2l0IGEgYmV0dGVyIGRldmljZSBjaXRpemVuLiAgRnVydGhlciB0aGFua3MgdG8gSm9lbCBLYXR6Cis8am9lbGthdHpAd2ViY2hhdC5vcmc+IGZvciBoaXMgTU9EVUxFIHBhdGNoZXMgKHNlZSBkZXRhaWxzIGJlbG93KSwKK1BvcmZpcmkgQ2xhdWRpbyA8Qy5Qb3JmaXJpQG5pc21zLnRlaS5lcmljc3Nvbi5zZT4gZm9yIHBhdGNoZXMKK3RvIG1ha2UgdGhlIGRyaXZlciB3b3JrIHdpdGggdGhlIG9sZGVyIENEVS01MTAvNTE1IHNlcmllcywgYW5kCitIZWlrbyBFaXNzZmVsZHQgPGhlaWtvQGNvbG9zc3VzLmVzY2FwZS5kZT4gZm9yIHBvaW50aW5nIG91dCB0aGF0Cit0aGUgdmVyaWZ5X2FyZWEoKSBjaGVja3Mgd2VyZSBpZ25vcmluZyB0aGUgcmVzdWx0cyBvZiBzYWlkIGNoZWNrcy4KKworKEFja25vd2xlZGdtZW50cyBmcm9tIFJvbiBKZXBwZXNlbiBpbiB0aGUgMC4zIHJlbGVhc2U6KQorVGhhbmtzIHRvIENvcmV5IE1pbnlhcmQgd2hvIHdyb3RlIHRoZSBvcmlnaW5hbCBDRFUtMzFBIGRyaXZlciBvbiB3aGljaAordGhpcyBkcml2ZXIgaXMgYmFzZWQuICBUaGFua3MgdG8gS2VuIFBpenppbmkgYW5kIEJvYiBCbGFpciB3aG8gcHJvdmlkZWQgCitwYXRjaGVzIGFuZCBmZWVkYmFjayBvbiB0aGUgZmlyc3QgcmVsZWFzZSBvZiB0aGlzIGRyaXZlci4KKworS2VuIFBpenppbmkKK2tlbkBoYWxjeW9uLmNvbQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhUaGUgZm9sbG93aW5nIGlzIGZyb20gSm9lbCBLYXR6IDxqb2Vsa2F0ekB3ZWJjaGF0Lm9yZz4uKQorCisJVG8gYnVpbGQgYSB2ZXJzaW9uIG9mIHNvbnk1MzUubyB0aGF0IGNhbiBiZSBpbnN0YWxsZWQgYXMgYSBtb2R1bGUsCit1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCitnY2MgLWMgLURfX0tFUk5FTF9fIC1ETU9EVUxFIC1PMiBzb255Y2Q1MzUuYyAtbyBzb255Y2Q1MzUubworCisJVG8gaW5zdGFsbCB0aGUgbW9kdWxlLCBzaW1wbHkgdHlwZToKKworaW5zbW9kIHNvbnk1MzUubworCW9yCitpbnNtb2Qgc29ueTUzNS5vIHNvbnljZDUzNT08YWRkcmVzcz4KKworCUFuZCB0byByZW1vdmUgaXQ6CisKK3JtbW9kIHNvbnk1MzUKKworCVRoZSBjb2RlIGNoZWNrcyB0byBzZWUgaWYgTU9EVUxFIGlzIGRlZmluZWQgYW5kIGJlaGF2ZXMgYXMgaXQgdXNlZAordG8gaWYgTU9EVUxFIGlzIG5vdCBkZWZpbmVkLiBUaGF0IG1lYW5zIHlvdXIgcGF0Y2hlZCBmaWxlIHNob3VsZCBiZWhhdmUKK2V4YWN0bHkgYXMgaXQgdXNlZCB0byBpZiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCisKKwlJIGhhdmUgYW4gZXh0ZXJuYWwgZHJpdmUsIGFuZCBJIHVzdWFsbHkgbGVhdmUgaXQgcG93ZXJlZCBvZmYuIEkgdXNlZAordG8gaGF2ZSB0byByZWJvb3QgaWYgSSBuZWVkZWQgdG8gdXNlIHRoZSBDRFJPTSBkcml2ZS4gTm93IEkgZG9uJ3QuCisKKwlFdmVuIGlmIHlvdSBoYXZlIGFuIGludGVybmFsIGRyaXZlLCB3aHkgd2FzdGUgdGhlIDk2SyBvZiBtZW1vcnkKKyh1bnN3YXBwYWJsZSkgdGhhdCB0aGUgZHJpdmVyIHVzZXMgaWYgeW91IHVzZSB5b3VyIENELVJPTSBkcml2ZSBpbmZyZXF1ZW50bHk/CisKKwlUaGlzIGRyaXZlciB3aWxsIG5vdCBpbnN0YWxsICh3aGV0aGVyIGNvbXBpbGVkIGluIG9yIGxvYWRlZCBhcyBhCittb2R1bGUpIGlmIHRoZSBDRFJPTSBkcml2ZSBpcyBub3QgYXZhaWxhYmxlIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24uIFRoaXMKK21lYW5zIHRoYXQgeW91IGNhbiBoYXZlIHRoZSBkcml2ZXIgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGFuZCBzdGlsbCBsb2FkCit0aGUgbW9kdWxlIGxhdGVyIChhc3N1bWluZyB0aGUgZHJpdmVyIGRvZXNuJ3QgaW5zdGFsbCBpdHNlbGYgZHVyaW5nCitwb3dlci1vbikuIFRoaXMgb25seSB3YXN0ZXMgMTJLIHdoZW4geW91IGJvb3Qgd2l0aCB0aGUgQ0RST00gZHJpdmUgb2ZmLgorCisJVGhpcyBpcyB3aGF0IEkgdXN1YWxseSBkbzsgSSBsZWF2ZSB0aGUgZHJpdmVyIGNvbXBpbGVkIGludG8gdGhlCitrZXJuZWwsIGJ1dCBsb2FkIGl0IGFzIGEgbW9kdWxlIGlmIEkgcG93ZXJlZCB0aGUgc3lzdGVtIHVwIHdpdGggdGhlIGRyaXZlCitvZmYgYW5kIHRoZW4gbGF0ZXIgZGVjaWRlZCB0byB1c2UgdGhlIENEUk9NIGRyaXZlLgorCisJU2luY2UgdGhlIGRyaXZlciBvbmx5IHVzZXMgYSBzaW5nbGUgcGFnZSB0byBwb2ludCB0byB0aGUgY2h1bmtzLAorYXR0ZW1wdGluZyB0byBzZXQgdGhlIGJ1ZmZlciBjYWNoZSB0byBtb3JlIHRoYW4gMiBNZWdhYnl0ZXMgd291bGQgYmUgdmVyeQorYmFkOyBkb24ndCBkbyB0aGF0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jbGktc3RpLXJlbW92YWwudHh0IGIvRG9jdW1lbnRhdGlvbi9jbGktc3RpLXJlbW92YWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjNjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NsaS1zdGktcmVtb3ZhbC50eHQKQEAgLTAsMCArMSwxMzMgQEAKKworIyMjIyBjbGkoKS9zdGkoKSByZW1vdmFsIGd1aWRlLCBzdGFydGVkIGJ5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorCisKK2FzIG9mIDIuNS4yOCwgZml2ZSBwb3B1bGFyIG1hY3JvcyBoYXZlIGJlZW4gcmVtb3ZlZCBvbiBTTVAsIGFuZAorYXJlIGJlaW5nIHBoYXNlZCBvdXQgb24gVVA6CisKKyBjbGkoKSwgc3RpKCksIHNhdmVfZmxhZ3MoZmxhZ3MpLCBzYXZlX2ZsYWdzX2NsaShmbGFncyksIHJlc3RvcmVfZmxhZ3MoZmxhZ3MpCisKK3VudGlsIG5vdyBpdCB3YXMgcG9zc2libGUgdG8gcHJvdGVjdCBkcml2ZXIgY29kZSBhZ2FpbnN0IGludGVycnVwdAoraGFuZGxlcnMgdmlhIGEgY2xpKCksIGJ1dCBmcm9tIG5vdyBvbiBvdGhlciwgbW9yZSBsaWdodHdlaWdodCBtZXRob2RzCitoYXZlIHRvIGJlIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiwgc3VjaCBhcyBzcGlubG9ja3Mgb3Igc2VtYXBob3Jlcy4KKworZm9yIGV4YW1wbGUsIGRyaXZlciBjb2RlIHRoYXQgdXNlZCB0byBkbyBzb21ldGhpbmcgbGlrZToKKworCXN0cnVjdCBkcml2ZXJfZGF0YTsKKworCWlycV9oYW5kbGVyICguLi4pCisJeworCQkuLi4uCisJCWRyaXZlcl9kYXRhLmZpbmlzaCA9IDE7CisJCWRyaXZlcl9kYXRhLm5ld193b3JrID0gMDsKKwkJLi4uLgorCX0KKworCS4uLgorCisJaW9jdGxfZnVuYyAoLi4uKQorCXsKKwkJLi4uCisJCWNsaSgpOworCQkuLi4KKwkJZHJpdmVyX2RhdGEuZmluaXNoID0gMDsKKwkJZHJpdmVyX2RhdGEubmV3X3dvcmsgPSAyOworCQkuLi4KKwkJc3RpKCk7CisJCS4uLgorCX0KKword2FzIFNNUC1jb3JyZWN0IGJlY2F1c2UgdGhlIGNsaSgpIGZ1bmN0aW9uIGVuc3VyZWQgdGhhdCBubworaW50ZXJydXB0IGhhbmRsZXIgKGFtb25nc3QgdGhlbSB0aGUgYWJvdmUgaXJxX2hhbmRsZXIoKSkgZnVuY3Rpb24KK3dvdWxkIGV4ZWN1dGUgd2hpbGUgdGhlIGNsaSgpLWVkIHNlY3Rpb24gaXMgZXhlY3V0aW5nLgorCitidXQgZnJvbSBub3cgb24gYSBtb3JlIGRpcmVjdCBtZXRob2Qgb2YgbG9ja2luZyBoYXMgdG8gYmUgdXNlZDoKKworCXNwaW5sb2NrX3QgZHJpdmVyX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3RydWN0IGRyaXZlcl9kYXRhOworCisJaXJxX2hhbmRsZXIgKC4uLikKKwl7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCS4uLi4KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRyaXZlcl9sb2NrLCBmbGFncyk7CisJCS4uLi4KKwkJZHJpdmVyX2RhdGEuZmluaXNoID0gMTsKKwkJZHJpdmVyX2RhdGEubmV3X3dvcmsgPSAwOworCQkuLi4uCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRyaXZlcl9sb2NrLCBmbGFncyk7CisJCS4uLi4KKwl9CisKKwkuLi4KKworCWlvY3RsX2Z1bmMgKC4uLikKKwl7CisJCS4uLgorCQlzcGluX2xvY2tfaXJxKCZkcml2ZXJfbG9jayk7CisJCS4uLgorCQlkcml2ZXJfZGF0YS5maW5pc2ggPSAwOworCQlkcml2ZXJfZGF0YS5uZXdfd29yayA9IDI7CisJCS4uLgorCQlzcGluX3VubG9ja19pcnEoJmRyaXZlcl9sb2NrKTsKKwkJLi4uCisJfQorCit0aGUgYWJvdmUgY29kZSBoYXMgYSBudW1iZXIgb2YgYWR2YW50YWdlczoKKworLSB0aGUgbG9ja2luZyByZWxhdGlvbiBpcyBlYXNpZXIgdG8gdW5kZXJzdGFuZCAtIGFjdHVhbCBsb2NrIHVzYWdlCisgIHBpbnBvaW50cyB0aGUgY3JpdGljYWwgc2VjdGlvbnMuIGNsaSgpIHVzYWdlIGlzIHRvbyBvcGFxdWUuCisgIEVhc2llciB0byB1bmRlcnN0YW5kIG1lYW5zIGl0J3MgZWFzaWVyIHRvIGRlYnVnLgorCistIGl0J3MgZmFzdGVyLCBiZWNhdXNlIHNwaW5sb2NrcyBhcmUgZmFzdGVyIHRvIGFjcXVpcmUgdGhhbiB0aGUKKyAgcG90ZW50aWFsbHkgaGVhdmlseS11c2VkIElSUSBsb2NrLiBGdXJ0aGVybW9yZSwgeW91ciBkcml2ZXIgZG9lcworICBub3QgaGF2ZSB0byB3YWl0IGVnLiBmb3IgYSBiaWcgaGVhdnkgU0NTSSBpbnRlcnJ1cHQgdG8gZmluaXNoLAorICBiZWNhdXNlIHRoZSBkcml2ZXJfbG9jayBzcGlubG9jayBpcyBvbmx5IHVzZWQgYnkgeW91ciBkcml2ZXIuCisgIGNsaSgpIG9uIHRoZSBvdGhlciBoYW5kIHdhcyB1c2VkIGJ5IG1hbnkgZHJpdmVycywgYW5kIGV4dGVuZGVkCisgIHRoZSBjcml0aWNhbCBzZWN0aW9uIHRvIHRoZSB3aG9sZSBJUlEgaGFuZGxlciBmdW5jdGlvbiAtIGNyZWF0aW5nCisgIHNlcmlvdXMgbG9jayBjb250ZW50aW9uLgorCisgCit0byBtYWtlIHRoZSB0cmFuc2l0aW9uIGVhc2llciwgd2UndmUgc3RpbGwga2VwdCB0aGUgY2xpKCksIHN0aSgpLAorc2F2ZV9mbGFncygpLCBzYXZlX2ZsYWdzX2NsaSgpIGFuZCByZXN0b3JlX2ZsYWdzKCkgbWFjcm9zIGRlZmluZWQKK29uIFVQIHN5c3RlbXMgLSBidXQgdGhlaXIgdXNhZ2Ugd2lsbCBiZSBwaGFzZWQgb3V0IHVudGlsIDIuNiBpcworcmVsZWFzZWQuCisKK2RyaXZlcnMgdGhhdCB3YW50IHRvIGRpc2FibGUgbG9jYWwgaW50ZXJydXB0cyAoaW50ZXJydXB0cyBvbiB0aGUKK2N1cnJlbnQgQ1BVKSwgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGZpdmUgbWFjcm9zOgorCisgIGxvY2FsX2lycV9kaXNhYmxlKCksIGxvY2FsX2lycV9lbmFibGUoKSwgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyksCisgIGxvY2FsX2lycV9zYXZlKGZsYWdzKSwgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCisKK2J1dCBiZXdhcmUsIHRoZWlyIG1lYW5pbmcgYW5kIHNlbWFudGljcyBhcmUgbXVjaCBzaW1wbGVyLCBmYXIgZnJvbQordGhhdCBvZiB0aGUgb2xkIGNsaSgpLCBzdGkoKSwgc2F2ZV9mbGFncyhmbGFncykgYW5kIHJlc3RvcmVfZmxhZ3MoZmxhZ3MpCitTTVAgbWVhbmluZzoKKworICAgIGxvY2FsX2lycV9kaXNhYmxlKCkgICAgICAgPT4gdHVybiBsb2NhbCBJUlFzIG9mZgorCisgICAgbG9jYWxfaXJxX2VuYWJsZSgpICAgICAgICA9PiB0dXJuIGxvY2FsIElSUXMgb24KKworICAgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpICAgPT4gc2F2ZSB0aGUgY3VycmVudCBJUlEgc3RhdGUgaW50byBmbGFncy4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSBjYW4gYmUgb24gb3Igb2ZmLiAob24gc29tZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyB0aGVyZSdzIGV2ZW4gbW9yZSBiaXRzIGluIGl0LikKKworICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKSAgICAgPT4gc2F2ZSB0aGUgY3VycmVudCBJUlEgc3RhdGUgaW50byBmbGFncyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUgaW50ZXJydXB0cy4KKworICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSAgPT4gcmVzdG9yZSB0aGUgSVJRIHN0YXRlIGZyb20gZmxhZ3MuCisKKyhsb2NhbF9pcnFfc2F2ZSBjYW4gc2F2ZSBib3RoIGlycXMgb24gYW5kIGlycXMgb2ZmIHN0YXRlLCBhbmQKK2xvY2FsX2lycV9yZXN0b3JlIGNhbiByZXN0b3JlIGludG8gYm90aCBpcnFzIG9uIGFuZCBpcnFzIG9mZiBzdGF0ZS4pCisKK2Fub3RoZXIgcmVsYXRlZCBjaGFuZ2UgaXMgdGhhdCBzeW5jaHJvbml6ZV9pcnEoKSBub3cgdGFrZXMgYSBwYXJhbWV0ZXI6CitzeW5jaHJvbml6ZV9pcnEoaXJxKS4gVGhpcyBjaGFuZ2UgdG9vIGhhcyB0aGUgcHVycG9zZSBvZiBtYWtpbmcgU01QCitzeW5jaHJvbml6YXRpb24gbW9yZSBsaWdodHdlaWdodCAtIHRoaXMgd2F5IHlvdSBjYW4gd2FpdCBmb3IgeW91ciBvd24KK2ludGVycnVwdCBoYW5kbGVyIHRvIGZpbmlzaCwgbm8gbmVlZCB0byB3YWl0IGZvciBvdGhlciBJUlEgc291cmNlcy4KKworCit3aHkgd2VyZSB0aGVzZSBjaGFuZ2VzIGRvbmU/IFRoZSBtYWluIHJlYXNvbiB3YXMgdGhlIGFyY2hpdGVjdHVyYWwgYnVyZGVuCitvZiBtYWludGFpbmluZyB0aGUgY2xpKCkvc3RpKCkgaW50ZXJmYWNlIC0gaXQgYmVjYW1lIGEgcmVhbCBwcm9ibGVtLiBUaGUKK25ldyBpbnRlcnJ1cHQgc3lzdGVtIGlzIG11Y2ggbW9yZSBzdHJlYW1saW5lZCwgZWFzaWVyIHRvIHVuZGVyc3RhbmQsIGRlYnVnLAorYW5kIGl0J3MgYWxzbyBhIGJpdCBmYXN0ZXIgLSB0aGUgc2FtZSBoYXBwZW5lZCB0byBpdCB0aGF0IHdpbGwgaGFwcGVuIHRvCitjbGkoKS9zdGkoKSB1c2luZyBkcml2ZXJzIG9uY2UgdGhleSBjb252ZXJ0IHRvIHNwaW5sb2NrcyA6LSkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb21wdXRvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb21wdXRvbmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxY2Y1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbXB1dG9uZS50eHQKQEAgLTAsMCArMSw1ODggQEAKK05PVEU6IFRoaXMgaXMgYW4gdW5tYWludGFpbmVkIGRyaXZlci4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgZHVlIHRvCitjaGFuZ2VzIG1hZGUgaW4gdGhlIHR0eSBsYXllciBpbiAyLjYuICBJZiB5b3Ugd2lzaCB0byB0YWtlIG92ZXIgbWFpbnRlbmFuY2Ugb2YKK3RoaXMgZHJpdmVyLCBjb250YWN0IE1pY2hhZWwgV2FyZmllbGQgPG1od0B3aXR0c2VuZC5jb20+LgorCitDaGFuZ2Vsb2c6CistLS0tLS0tLS0tCisxMS0wMS0yMDAxOglPcmlnaW5hbCBEb2N1bWVudAorCisxMC0yOS0yMDA0OglNaW5vciBtaXNzcGVsbGluZyAmIGZvcm1hdCBmaXgsIHVwZGF0ZSBzdGF0dXMgb2YgZHJpdmVyLgorCQlKYW1lcyBOZWxzb24gPGphbWVzNDc2NUBnbWFpbC5jb20+CisKK0NvbXB1dG9uZSBJbnRlbGxpcG9ydCBJSS9QbHVzIE11bHRpcG9ydCBTZXJpYWwgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWxlYXNlIE5vdGVzIEZvciBMaW51eCBLZXJuZWwgMi4yIGFuZCBoaWdoZXIuCitUaGVzZSBub3RlcyBhcmUgZm9yIHRoZSBkcml2ZXJzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGludGVncmF0ZWQgaW50byB0aGUKK2tlcm5lbCBhbmQgaGF2ZSBiZWVuIHRlc3RlZCBvbiBMaW51eCBrZXJuZWxzIDIuMCwgMi4yLCAyLjMsIGFuZCAyLjQuCisKK1ZlcnNpb246IDEuMi4xNAorRGF0ZTogMTEvMDEvMjAwMQorSGlzdG9yaWNhbCBBdXRob3I6IEFuZHJldyBNYW5pc29uIDxhbWFuaXNvbkBhbWVyaWNhLm5ldD4KK1ByaW1hcnkgQXV0aG9yOiBEb3VnIE1jTmFzaAorU3VwcG9ydDogc3VwcG9ydEBjb21wdXRvbmUuY29tCitGaXhlcyBhbmQgVXBkYXRlczogTWlrZSBXYXJmaWVsZCA8bWh3QHdpdHRzZW5kLmNvbT4KKworVGhpcyBmaWxlIGFzc3VtZXMgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBDb21wdXRvbmUgZHJpdmVycyB3aGljaCBhcmUKK2ludGVncmF0ZWQgaW50byB0aGUga2VybmVsIHNvdXJjZXMuICBGb3IgdXBkYXRpbmcgdGhlIGRyaXZlcnMgb3IgaW5zdGFsbGluZworZHJpdmVycyBpbnRvIGtlcm5lbHMgd2hpY2ggZG8gbm90IGFscmVhZHkgaGF2ZSBDb21wdXRvbmUgZHJpdmVycywgcGxlYXNlCityZWZlciB0byB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBSRUFETUUuY29tcHV0b25lIGZpbGUgaW4gdGhlIGRyaXZlciBwYXRjaC4KKworCisxLiBJTlRST0RVQ1RJT04KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGVudGlyZSBmYW1pbHkgb2YgSW50ZWxsaXBvcnQgSUkvUGx1cyBjb250cm9sbGVycword2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBNaWNyb0NoYW5uZWwgY29udHJvbGxlcnMuICBJdCBkb2VzIG5vdCBzdXBwb3J0Citwcm9kdWN0cyBwcmV2aW91cyB0byB0aGUgSW50ZWxsaXBvcnQgSUkuCisKK1RoaXMgZHJpdmVyIHdhcyBkZXZlbG9wZWQgb24gdGhlIHYyLjAueCBMaW51eCB0cmVlIGFuZCBoYXMgYmVlbiB0ZXN0ZWQgdXAKK3RvIHYyLjQuMTQ7IGl0IHdpbGwgcHJvYmFibHkgbm90IHdvcmsgd2l0aCBlYXJsaWVyIHYxLlgga2VybmVscywuCisKKworMi4gUVVJQ0sgSU5TVEFMTEFUSU9OCisKK0hhcmR3YXJlIC0gSWYgeW91IGhhdmUgYW4gSVNBIGNhcmQsIGZpbmQgYSBmcmVlIGludGVycnVwdCBhbmQgaW8gcG9ydC4gCisJCSAgIExpc3QgdGhvc2UgaW4gdXNlIHdpdGggYGNhdCAvcHJvYy9pbnRlcnJ1cHRzYCBhbmQgCisJCSAgIGBjYXQgL3Byb2MvaW9wb3J0c2AuICBTZXQgdGhlIGNhcmQgZGlwIHN3aXRjaGVzIHRvIGEgZnJlZSAKKwkJICAgYWRkcmVzcy4gIFlvdSBtYXkgbmVlZCB0byBjb25maWd1cmUgeW91ciBCSU9TIHRvIHJlc2VydmUgYW4KKwkJICAgaXJxIGZvciBhbiBJU0EgY2FyZC4gIFBDSSBhbmQgRUlTQSBwYXJhbWV0ZXJzIGFyZSBzZXQKKwkJICAgYXV0b21hZ2ljYWxseS4gIEluc2VydCBjYXJkIGludG8gY29tcHV0ZXIgd2l0aCB0aGUgcG93ZXIgb2ZmIAorCQkgICBiZWZvcmUgb3IgYWZ0ZXIgZHJpdmVycyBpbnN0YWxsYXRpb24uCisKKwlOb3RlIHRoZSBoYXJkd2FyZSBhZGRyZXNzIGZyb20gdGhlIENvbXB1dG9uZSBJU0EgY2FyZHMgaW5zdGFsbGVkIGludG8KKwkJdGhlIHN5c3RlbS4gIFRoZXNlIGFyZSByZXF1aXJlZCBmb3IgZWRpdGluZyBpcDIuYyBvciBlZGl0aW5nCisJCS9ldGMvbW9kcHJvYmUuY29uZiwgb3IgZm9yIHNwZWNpZmljYXRpb24gb24gdGhlIG1vZHByb2JlCisJCWNvbW1hbmQgbGluZS4KKworCU5vdGUgdGhhdCB0aGUgL2V0Yy9tb2R1bGVzLmNvbmYgc2hvdWxkIGJlIHVzZWQgZm9yIG9sZGVyIChwcmUtMi42KQorCQlrZXJuZWxzLgorCitTb2Z0d2FyZSAtCisKK01vZHVsZSBpbnN0YWxsYXRpb246CisKK2EpIERldGVybWluZSBmcmVlIGlycS9hZGRyZXNzIHRvIHVzZSBpZiBhbnkgKGNvbmZpZ3VyZSBCSU9TIGlmIG5lZWQgYmUpCitiKSBSdW4gIm1ha2UgY29uZmlnIiBvciAibWFrZSBtZW51Y29uZmlnIiBvciAibWFrZSB4Y29uZmlnIgorICAgU2VsZWN0IChtKSBtb2R1bGUgZm9yIENPTkZJR19DT01QVVRPTkUgdW5kZXIgY2hhcmFjdGVyCisgICBkZXZpY2VzLiAgQ09ORklHX1BDSSBhbmQgQ09ORklHX01PRFVMRVMgYWxzbyBtYXkgbmVlZCB0byBiZSBzZXQuCitjKSBTZXQgYWRkcmVzcyBvbiBJU0EgY2FyZHMgdGhlbjoKKyAgIGVkaXQgL3Vzci9zcmMvbGludXgvZHJpdmVycy9jaGFyL2lwMi5jIGlmIG5lZWRlZCAKKwlvcgorICAgZWRpdCAvZXRjL21vZHByb2JlLmNvbmYgaWYgbmVlZGVkIChtb2R1bGUpLgorCW9yIGJvdGggdG8gbWF0Y2ggdGhpcyBzZXR0aW5nLgorZCkgUnVuICJtYWtlIG1vZHVsZXMiCitlKSBSdW4gIm1ha2UgbW9kdWxlc19pbnN0YWxsIgorZikgUnVuICIvc2Jpbi9kZXBtb2QgLWEiCitnKSBpbnN0YWxsIGRyaXZlciB1c2luZyBgbW9kcHJvYmUgaXAyIDxvcHRpb25zPmAgKG9wdGlvbnMgbGlzdGVkIGJlbG93KQoraCkgcnVuIGlwMm1rZGV2IChlaXRoZXIgdGhlIHNjcmlwdCBiZWxvdyBvciB0aGUgYmluYXJ5IHZlcnNpb24pCisKKworS2VybmVsIGluc3RhbGxhdGlvbjoKKworYSkgRGV0ZXJtaW5lIGZyZWUgaXJxL2FkZHJlc3MgdG8gdXNlIGlmIGFueSAoY29uZmlndXJlIEJJT1MgaWYgbmVlZCBiZSkKK2IpIFJ1biAibWFrZSBjb25maWciIG9yICJtYWtlIG1lbnVjb25maWciIG9yICJtYWtlIHhjb25maWciCisgICBTZWxlY3QgKHkpIGtlcm5lbCBmb3IgQ09ORklHX0NPTVBVVE9ORSB1bmRlciBjaGFyYWN0ZXIKKyAgIGRldmljZXMuICBDT05GSUdfUENJIG1heSBuZWVkIHRvIGJlIHNldCBpZiB5b3UgaGF2ZSBQQ0kgYnVzLgorYykgU2V0IGFkZHJlc3Mgb24gSVNBIGNhcmRzIHRoZW46CisJICAgZWRpdCAvdXNyL3NyYy9saW51eC9kcml2ZXJzL2NoYXIvaXAyLmMgIAorICAgICAgICAgICAoT3B0aW9uYWwgLSBtYXkgYmUgc3BlY2lmaWVkIG9uIGtlcm5lbCBjb21tYW5kIGxpbmUgbm93KQorZCkgUnVuICJtYWtlIHpJbWFnZSIgb3Igd2hhdGV2ZXIgdGFyZ2V0IHlvdSBwcmVmZXIuCitlKSBtdiAvdXNyL3NyYy9saW51eC9hcmNoL2kzODYvYm9vdC96SW1hZ2UgdG8gL2Jvb3QuCitmKSBBZGQgbmV3IGNvbmZpZyBmb3IgdGhpcyBrZXJuZWwgaW50byAvZXRjL2xpbG8uY29uZiwgcnVuICJsaWxvIgorCW9yIGNvcHkgdG8gYSBmbG9wcHkgZGlzayBhbmQgYm9vdCBmcm9tIHRoYXQgZmxvcHB5IGRpc2suCitnKSBSZWJvb3QgdXNpbmcgdGhpcyBrZXJuZWwKK2gpIHJ1biBpcDJta2RldiAoZWl0aGVyIHRoZSBzY3JpcHQgYmVsb3cgb3IgdGhlIGJpbmFyeSB2ZXJzaW9uKQorCitLZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbnM6CisKK1doZW4gY29tcGlsaW5nIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsLCBpbyBhbmQgaXJxIG1heSBiZQorY29tcGlsZWQgaW50byB0aGUgZHJpdmVyIGJ5IGVkaXRpbmcgaXAyLmMgYW5kIHNldHRpbmcgdGhlIHZhbHVlcyBmb3IKK2lvIGFuZCBpcnEgaW4gdGhlIGFwcHJvcHJpYXRlIGFycmF5LiAgQW4gYWx0ZXJuYXRpdmUgaXMgdG8gc3BlY2lmeQorYSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIHRvIHRoZSBrZXJuZWwgYXQgYm9vdCB1cC4KKworICAgICAgICBpcDI9aW8wLGlycTAsaW8xLGlycTEsaW8yLGlycTIsaW8zLGlycTMKKworTm90ZSB0aGF0IHRoaXMgb3JkZXIgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIHRoZQorbW9kbG9hZCBwYXJhbWV0ZXJzIHdoaWNoIGhhdmUgc2VwYXJhdGUgSVJRIGFuZCBJTyBzcGVjaWZpZXJzLgorCitUaGUgaW8gcG9ydCBhbHNvIHNlbGVjdHMgUENJICgxKSBhbmQgRUlTQSAoMikgYm9hcmRzLgorCisgICAgICAgIGlvPTAgICAgTm8gYm9hcmQKKyAgICAgICAgaW89MSAgICBQQ0kgYm9hcmQKKyAgICAgICAgaW89MiAgICBFSVNBIGJvYXJkCisgICAgICAgIGVsc2UgICAgSVNBIGJvYXJkIGlvIGFkZHJlc3MKKworWW91IG9ubHkgbmVlZCB0byBzcGVjaWZ5IHRoZSBib2FyZHMgd2hpY2ggYXJlIHByZXNlbnQuCisKKyAgICAgICAgRXhhbXBsZXM6CisKKyAgICAgICAgICAgICAgICAyIFBDSSBib2FyZHM6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwMj0xLDAsMSwwCisKKyAgICAgICAgICAgICAgICAxIElTQSBib2FyZCBhdCAweDMxMCBpcnEgNToKKworICAgICAgICAgICAgICAgICAgICAgICAgaXAyPTB4MzEwLDUKKworVGhpcyBjYW4gYmUgYWRkZWQgdG8gYW5kICJhcHBlbmQiIG9wdGlvbiBpbiBsaWxvLmNvbmYgc2ltaWxhciB0byB0aGlzOgorCisgICAgICAgIGFwcGVuZD0iaXAyPTEsMCwxLDAiCisKKworMy4gSU5TVEFMTEFUSU9OCisKK1ByZXZpb3VzbHksIHRoZSBkcml2ZXIgc291cmNlcyB3ZXJlIHBhY2thZ2VkIHdpdGggYSBzZXQgb2YgcGF0Y2ggZmlsZXMKK3RvIHVwZGF0ZSB0aGUgY2hhcmFjdGVyIGRyaXZlcnMnIG1ha2VmaWxlIGFuZCBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCBvdGhlciAKK2tlcm5lbCBzb3VyY2UgZmlsZXMuIEEgYnVpbGQgc2NyaXB0IChpcDJidWlsZCkgd2FzIGluY2x1ZGVkIHdoaWNoIGFwcGxpZXMgCit0aGUgcGF0Y2hlcyBpZiBuZWVkZWQsIGFuZCBidWlsZCBhbnkgdXRpbGl0aWVzIG5lZWRlZC4KK1doYXQgeW91IHJlY2VpdmUgbWF5IGJlIGEgc2luZ2xlIHBhdGNoIGZpbGUgaW4gY29udmVudGlvbmFsIGtlcm5lbAorcGF0Y2ggZm9ybWF0IGJ1aWxkIHNjcmlwdC4gVGhhdCBmb3JtIGNhbiBhbHNvIGJlIGFwcGxpZWQgYnkKK3J1bm5pbmcgcGF0Y2ggLXAxIDwgVGhlUGF0Y2hGaWxlLiAgT3RoZXJ3aXNlIHJ1biBpcDJidWlsZC4KKyAKK1RoZSBkcml2ZXIgY2FuIGJlIGluc3RhbGxlZCBhcyBhIG1vZHVsZSAocmVjb21tZW5kZWQpIG9yIGJ1aWx0IGludG8gdGhlIAora2VybmVsLiBUaGlzIGlzIHNlbGVjdGVkIGFzIGZvciBvdGhlciBkcml2ZXJzIHRocm91Z2ggdGhlIGBtYWtlIGNvbmZpZ2AKK2NvbW1hbmQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgTGludXggc291cmNlIHRyZWUuIElmIHRoZSBkcml2ZXIgaXMgYnVpbHQgCitpbnRvIHRoZSBrZXJuZWwgeW91IHdpbGwgbmVlZCB0byBlZGl0IHRoZSBmaWxlIGlwMi5jIHRvIG1hdGNoIHRoZSBib2FyZHMgCit5b3UgYXJlIGluc3RhbGxpbmcuIFNlZSB0aGF0IGZpbGUgZm9yIGluc3RydWN0aW9ucy4gSWYgdGhlIGRyaXZlciBpcyAKK2luc3RhbGxlZCBhcyBhIG1vZHVsZSB0aGUgY29uZmlndXJhdGlvbiBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgb24gdGhlCittb2Rwcm9iZSBjb21tYW5kIGxpbmUgYXMgZm9sbG93czoKKworCW1vZHByb2JlIGlwMiBpcnE9aXJxMSxpcnEyLGlycTMsaXJxNCBpbz1hZGRyMSxhZGRyMixhZGRyMyxhZGRyNAorCit3aGVyZSBpcnFudW0gaXMgb25lIG9mIHRoZSB2YWxpZCBJbnRlbGxpcG9ydCBJSSBpbnRlcnJ1cHRzICgzLDQsNSw3LDEwLDExLAorMTIsMTUpIGFuZCBhZGRyMS00IGFyZSB0aGUgYmFzZSBhZGRyZXNzZXMgZm9yIHVwIHRvIGZvdXIgY29udHJvbGxlcnMuIElmIAordGhlIGlycXMgYXJlIG5vdCBzcGVjaWZpZWQgdGhlIGRyaXZlciB1c2VzIHRoZSBkZWZhdWx0IGluIGlwMi5jICh3aGljaCAKK3NlbGVjdHMgcG9sbGVkIG1vZGUpLiBJZiBubyBiYXNlIGFkZHJlc3NlcyBhcmUgc3BlY2lmaWVkIHRoZSBkZWZhdWx0cyBpbiAKK2lwMi5jIGFyZSB1c2VkLiBJZiB5b3UgYXJlIGF1dG9sb2FkaW5nIHRoZSBkcml2ZXIgbW9kdWxlIHdpdGgga2VybmVsZCBvcgora21vZCB0aGUgYmFzZSBhZGRyZXNzZXMgYW5kIGludGVycnVwdCBudW1iZXIgbXVzdCBhbHNvIGJlIHNldCBpbiBpcDIuYworYW5kIHJlY29tcGlsZSBvciBqdXN0IGluc2VydCBhbmQgb3B0aW9ucyBsaW5lIGluIC9ldGMvbW9kcHJvYmUuY29uZiBvciBib3RoLgorVGhlIG9wdGlvbnMgbGluZSBpcyBlcXVpdmFsZW50IHRvIHRoZSBjb21tYW5kIGxpbmUgYW5kIHRha2VzIHByZWNlZGVuY2Ugb3Zlcgord2hhdCBpcyBpbiBpcDIuYy4gCisKKy9ldGMvbW9kcHJvYmUuY29uZiBzYW1wbGU6CisJb3B0aW9ucyBpcDIgaW89MSwweDMyOCBpcnE9MSwxMAorCWFsaWFzIGNoYXItbWFqb3ItNzEgaXAyCisJYWxpYXMgY2hhci1tYWpvci03MiBpcDIKKwlhbGlhcyBjaGFyLW1ham9yLTczIGlwMgorCitUaGUgZXF1aXZhbGVudCBpbiBpcDIuYzoKKworc3RhdGljIGludCBpb1tJUDJfTUFYX0JPQVJEU109IHsgMSwgMHgzMjgsIDAsIDAgfTsKK3N0YXRpYyBpbnQgaXJxW0lQMl9NQVhfQk9BUkRTXSA9IHsgMSwgMTAsIC0xLCAtMSB9OyAKKworVGhlIGVxdWl2YWxlbnQgZm9yIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIChpbiBsaWxvLmNvbmYpOgorCisgICAgICAgIGFwcGVuZD0iaXAyPTEsMSwweDMyOCwxMCIKKworCitOb3RlOglCb3RoIGlvIGFuZCBpcnEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gcmVmbGVjdCBZT1VSIHN5c3RlbS4gIEFuICJpbyIKKwlhZGRyZXNzIG9mIDEgb3IgMiBpbmRpY2F0ZXMgYSBQQ0kgb3IgRUlTQSBjYXJkIGluIHRoZSBib2FyZCB0YWJsZS4KKwlUaGUgUENJIG9yIEVJU0EgaXJxIHdpbGwgYmUgYXNzaWduZWQgYXV0b21hdGljYWxseS4KKworU3BlY2lmeWluZyBhbiBpbnZhbGlkIG9yIGluLXVzZSBpcnEgd2lsbCBkZWZhdWx0IHRoZSBkcml2ZXIgaW50bworcnVubmluZyBpbiBwb2xsZWQgbW9kZSBmb3IgdGhhdCBjYXJkLiAgSWYgYWxsIGlycSBlbnRyaWVzIGFyZSAwIHRoZW4KK2FsbCBjYXJkcyB3aWxsIG9wZXJhdGUgaW4gcG9sbGVkIG1vZGUuCisKK0lmIHlvdSBzZWxlY3QgdGhlIGRyaXZlciBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwgcnVuIDoKKworCW1ha2UgemxpbG8gKG9yIHdoYXRldmVyIHlvdSBkbyB0byBjcmVhdGUgYSBib290YWJsZSBrZXJuZWwpCisKK0lmIHlvdSBzZWxlY3RlZCBhIG1vZHVsZSBydW4gOgorCisJbWFrZSBtb2R1bGVzICYmIG1ha2UgbW9kdWxlc19pbnN0YWxsCisKK1RoZSB1dGlsaXR5IGlwMm1rZGV2IChzZWUgNSBhbmQgNyBiZWxvdykgY3JlYXRlcyBhbGwgdGhlIGRldmljZSBub2RlcworcmVxdWlyZWQgYnkgdGhlIGRyaXZlci4gIEZvciBhIGRldmljZSB0byBiZSBjcmVhdGVkIGl0IG11c3QgYmUgY29uZmlndXJlZAoraW4gdGhlIGRyaXZlciBhbmQgdGhlIGJvYXJkIG11c3QgYmUgaW5zdGFsbGVkLiBPbmx5IGRldmljZXMgY29ycmVzcG9uZGluZwordG8gcmVhbCBJbnRlbGxpUG9ydCBJSSBwb3J0cyBhcmUgY3JlYXRlZC4gV2l0aCBtdWx0aXBsZSBib2FyZHMgYW5kIGV4cGFuc2lvbgorYm94ZXMgdGhpcyB3aWxsIGxlYXZlIGdhcHMgaW4gdGhlIHNlcXVlbmNlIG9mIGRldmljZSBuYW1lcy4gaXAybWtkZXYgdXNlcworTGludXggdHR5IG5hbWluZyBjb252ZW50aW9uczogdHR5RjAgLSB0dHlGMjU1IGZvciBub3JtYWwgZGV2aWNlcywgYW5kCitjdWYwIC0gY3VmMjU1IGZvciBjYWxsb3V0IGRldmljZXMuCisKK0lmIHlvdSBhcmUgdXNpbmcgZGV2ZnMsIGV4aXN0aW5nIGRldmljZXMgYXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aXRoaW4KK3RoZSBkZXZmcyBuYW1lIHNwYWNlLiAgTm9ybWFsIGRldmljZXMgd2lsbCBiZSB0dHMvRjAgLSB0dHMvRjI1NSBhbmQgY2FsbG91dAorZGV2aWNlcyB3aWxsIGJlIGN1YS9GMCAtIGN1YS9GMjU1LiAgV2l0aCBkZXZmcyBpbnN0YWxsZWQsIGlwMm1rZGV2IHdpbGwKK2NyZWF0ZSBzeW1ib2xpYyBsaW5rcyBpbiAvZGV2IGZyb20gdGhlIG9sZCBjb252ZW50aW9uYWwgbmFtZXMgdG8gdGhlIG5ld2VyCitkZXZmcyBuYW1lcyBhcyBmb2xsb3dzOgorCisJL2Rldi9pcDJpcGxbbl0JLT4gL2Rldi9pcDIvaXBsW25dCW4gPSAwIC0gMworCS9kZXYvaXAyc3RhdFtuXQktPiAvZGV2L2lwMi9zdGF0W25dCW4gPSAwIC0gMworCS9kZXYvdHR5RltuXQktPiAvZGV2L3R0cy9GW25dCW4gPSAwIC0gMjU1CisJL2Rldi9jdWZbbl0JLT4gL2Rldi9jdWEvRltuXQluID0gMCAtIDI1NQorCitPbmx5IGRldmljZXMgZm9yIGV4aXN0aW5nIHBvcnRzIGFuZCBib2FyZHMgd2lsbCBiZSBjcmVhdGVkLgorCitJTVBPUlRBTlQgTk9URTogIFRoZSBuYW1pbmcgY29udmVudGlvbiB1c2VkIGZvciBkZXZmcyBieSB0aGlzIGRyaXZlcgord2FzIGNoYW5nZWQgZnJvbSAxLjIuMTIgdG8gMS4yLjEzLiAgVGhlIG9sZCBuYW1pbmcgY29udmVudGlvbiB3YXMgdG8KK3VzZSB0dGYvJWQgZm9yIHRoZSB0dHkgZGV2aWNlIGFuZCBjdWYvJWQgZm9yIHRoZSBjdWEgZGV2aWNlLiAgVGhhdAoraGFzIGJlZW4gY2hhbmdlZCB0byBjb25mb3JtIHRvIGFuIGFncmVlZC11cG9uIHN0YW5kYXJkIG9mIHBsYWNpbmcKK2FsbCB0aGUgdHR5IGRldmljZXMgdW5kZXIgdHRzLiAgVGhlIGRldmljZSBuYW1lcyBhcmUgbm93IHR0cy9GJWQgZm9yCit0aGUgdHR5IGRldmljZSBhbmQgY3VhL0YlZCBmb3IgdGhlIGN1YSBkZXZpY2VzLiAgSWYgeW91IHdlcmUgdXNpbmcKK3RoZSBvbGRlciBkZXZmcyBuYW1lcywgeW91IG11c3QgdXBkYXRlIGZvciB0aGUgbmV3ZXIgY29udmVudGlvbi4KKworWW91IGRvIG5vdCBuZWVkIHRvIHJ1biBpcDJta2RldiBpZiB5b3UgYXJlIHVzaW5nIGRldmZzIGFuZCBvbmx5IHdhbnQgdG8KK3VzZSB0aGUgZGV2ZnMgbmF0aXZlIGRldmljZSBuYW1lcy4KKworCis0LiBVU0lORyBUSEUgRFJJVkVSUworCitBcyBub3RlZCBhYm92ZSwgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBwb3J0cyBpbiBhY2NvcmRhbmNlIHdpdGggTGludXgKK2NvbnZlbnRpb25zLCBhbmQgdGhlIGRldmljZXMgc2hvdWxkIGJlIGludGVyY2hhbmdlYWJsZSB3aXRoIHRoZSBzdGFuZGFyZAorc2VyaWFsIGRldmljZXMuIChUaGlzIGlzIGEga2V5IHBvaW50IGZvciBwcm9ibGVtIHJlcG9ydGluZzogcGxlYXNlIG1ha2UKK3N1cmUgdGhhdCB3aGF0IHlvdSBhcmUgdHJ5aW5nIGRvIHdvcmtzIG9uIHRoZSB0dHlTeC9jdWF4IHBvcnRzIGZpcnN0OyB0aGVuIAordGVsbCB1cyB3aGF0IHdlbnQgd3Jvbmcgd2l0aCB0aGUgaXAyIHBvcnRzISkKKworSGlnaGVyIHNwZWVkcyBjYW4gYmUgb2J0YWluZWQgdXNpbmcgdGhlIHNldHNlcmlhbCB1dGlsaXR5IHdoaWNoIHJlbWFwcyAKKzM4LDQwMCBicHMgKGV4dGIpIHRvIDU3LDYwMCBicHMsIDExNSwyMDAgYnBzLCBvciBhIGN1c3RvbSBzcGVlZC4gCitJbnRlbGxpcG9ydCBJSSBpbnN0YWxsYXRpb25zIHVzaW5nIHRoZSBQb3dlclBvcnQgZXhwYW5zaW9uIG1vZHVsZSBjYW4KK3VzZSB0aGUgY3VzdG9tIHNwZWVkIHNldHRpbmcgdG8gc2VsZWN0IHRoZSBoaWdoZXN0IHNwZWVkczogMTUzLDYwMCBicHMsCisyMzAsNDAwIGJwcywgMzA3LDIwMCBicHMsIDQ2MCw4MDBicHMgYW5kIDkyMSw2MDAgYnBzLiBUaGUgYmFzZSBmb3IKK2N1c3RvbSBiYXVkIHJhdGUgY29uZmlndXJhdGlvbiBpcyBmaXhlZCBhdCA5MjEsNjAwIGZvciBjYXJkcy9leHBhbnNpb24KK21vZHVsZXMgd2l0aCBTVDY1NCdzIGFuZCAxMTUyMDAgZm9yIHRob3NlIHdpdGggQ2lycnVzIENEMTQwMCdzLiAgVGhpcworY29ycmVzcG9uZHMgdG8gdGhlIG1heGltdW0gYml0IHJhdGVzIHRob3NlIGNoaXBzIGFyZSBjYXBhYmxlLiAgCitGb3IgZXhhbXBsZSBpZiB0aGUgYmF1ZCBiYXNlIGlzIDkyMTYwMCBhbmQgdGhlIGJhdWQgZGl2aXNvciBpcyAxOCB0aGVuCit0aGUgY3VzdG9tIHJhdGUgaXMgOTIxNjAwLzE4ID0gNTEyMDAgYnBzLiAgU2VlIHRoZSBzZXRzZXJpYWwgbWFuIHBhZ2UgZm9yCitjb21wbGV0ZSBkZXRhaWxzLiBPZiBjb3Vyc2UgaWYgc3R0eSBhY2NlcHRzIHRoZSBoaWdoZXIgcmF0ZXMgbm93IHlvdSBjYW4KK3VzZSB0aGF0IGFzIHdlbGwgYXMgdGhlIHN0YW5kYXJkIGlvY3RscygpLgorCisKKzUuIGlwMm1rZGV2IGFuZCBhc3NvcnRlZCB1dGlsaXRpZXMuLi4KKworU2V2ZXJhbCB1dGlsaXRpZXMsIGluY2x1ZGluZyB0aGUgc291cmNlIGZvciBhIGJpbmFyeSBpcDJta2RldiB1dGlsaXR5IGFyZQorYXZhaWxhYmxlIHVuZGVyIC4uLi9kcml2ZXJzL2NoYXIvaXAyLiAgVGhlc2UgY2FuIGJlIGJ1aWxkIGJ5IGNoYW5naW5nIHRvCit0aGF0IGRpcmVjdG9yeSBhbmQgdHlwaW5nICJtYWtlIiBhZnRlciB0aGUga2VybmVsIGhhcyBiZSBidWlsdC4gIElmIHlvdSBkbworbm90IHdpc2ggdG8gY29tcGlsZSB0aGUgYmluYXJ5IHV0aWxpdGllcywgdGhlIHNoZWxsIHNjcmlwdCBiZWxvdyBjYW4gYmUKK2N1dCBvdXQgYW5kIHJ1biBhcyAiaXAybWtkZXYiIHRvIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IGRldmljZSBmaWxlcy4gIFRvCit1c2UgdGhlIGlwMm1rZGV2IHNjcmlwdCwgeW91IG11c3QgaGF2ZSBwcm9jZnMgZW5hYmxlZCBhbmQgdGhlIHByb2MgZmlsZQorc3lzdGVtIG1vdW50ZWQgb24gL3Byb2MuCisKK1lvdSBkbyBub3QgbmVlZCB0byBydW4gaXAybWtkZXYgaWYgeW91IGFyZSB1c2luZyBkZXZmcyBhbmQgb25seSB3YW50IHRvCit1c2UgdGhlIGRldmZzIG5hdGl2ZSBkZXZpY2UgbmFtZXMuCisKKworNi4gREVWRlMKKworREVWRlMgaXMgdGhlIERFVmljZSBGaWxlIFN5c3RlbSBhdmFpbGFibGUgYXMgYW4gYWRkIG9uIHBhY2thZ2UgZm9yIHRoZQorMi4yLngga2VybmVscyBhbmQgYXZhaWxhYmxlIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gMi4zLjQ2IGFuZCBoaWdoZXIuCitEZXZmcyBhbGxvd3MgZm9yIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgZGV2aWNlIG5hbWVzCit1bmRlciBjb250cm9sIG9mIHRoZSBkZXZpY2UgZHJpdmVycyB0aGVtc2VsdmVzLiAgVGhlIERldmZzIG5hbWVzcGFjZSBpcworaGllcmFyY2hpY2FsIGFuZCByZWR1Y2VzIHRoZSBjbHV0dGVyIHByZXNlbnQgaW4gdGhlIG5vcm1hbCBmbGF0IC9kZXYKK25hbWVzcGFjZS4gIERldmZzIG5hbWVzIGFuZCBjb252ZW50aW9uYWwgZGV2aWNlIG5hbWVzIG1heSBiZSBpbnRlcm1peGVkLgorQSB1c2Vyc3BhY2UgZGFlbW9uLCBkZXZmc2QsIGV4aXN0cyB0byBhbGxvdyBmb3IgYXV0b21hdGljIGNyZWF0aW9uIGFuZAorbWFuYWdlbWVudCBvZiBzeW1ib2xpYyBsaW5rcyBmcm9tIHRoZSBkZXZmcyBuYW1lIHNwYWNlIHRvIHRoZSBjb252ZW50aW9uYWwKK25hbWVzLiAgTW9yZSBkZXRhaWxzIG9uIGRldmZzIGNhbiBiZSBmb3VuZCBvbiB0aGUgREVWRlMgaG9tZSBzaXRlIGF0Cis8aHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvPiBvciBpbiB0aGUgZmlsZSBrZXJuZWwKK2RvY3VtZW50YXRpb24gZmlsZXMsIC4uLi9saW51eC9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL1JFQURNRS4KKworSWYgeW91IGFyZSB1c2luZyBkZXZmcywgZXhpc3RpbmcgZGV2aWNlcyBhcmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdpdGhpbgordGhlIGRldmZzIG5hbWUgc3BhY2UuICBOb3JtYWwgZGV2aWNlcyB3aWxsIGJlIHR0cy9GMCAtIHR0cy9GMjU1IGFuZCBjYWxsb3V0CitkZXZpY2VzIHdpbGwgYmUgY3VhL0YwIC0gY3VhL0YyNTUuICBXaXRoIGRldmZzIGluc3RhbGxlZCwgaXAybWtkZXYgd2lsbAorY3JlYXRlIHN5bWJvbGljIGxpbmtzIGluIC9kZXYgZnJvbSB0aGUgb2xkIGNvbnZlbnRpb25hbCBuYW1lcyB0byB0aGUgbmV3ZXIKK2RldmZzIG5hbWVzIGFzIGZvbGxvd3M6CisKKwkvZGV2L2lwMmlwbFtuXQktPiAvZGV2L2lwMi9pcGxbbl0JbiA9IDAgLSAzCisJL2Rldi9pcDJzdGF0W25dCS0+IC9kZXYvaXAyL3N0YXRbbl0JbiA9IDAgLSAzCisJL2Rldi90dHlGW25dCS0+IC9kZXYvdHRzL0Zbbl0JbiA9IDAgLSAyNTUKKwkvZGV2L2N1ZltuXQktPiAvZGV2L2N1YS9GW25dCW4gPSAwIC0gMjU1CisKK09ubHkgZGV2aWNlcyBmb3IgZXhpc3RpbmcgcG9ydHMgYW5kIGJvYXJkcyB3aWxsIGJlIGNyZWF0ZWQuCisKK0lNUE9SVEFOVCBOT1RFOiAgVGhlIG5hbWluZyBjb252ZW50aW9uIHVzZWQgZm9yIGRldmZzIGJ5IHRoaXMgZHJpdmVyCit3YXMgY2hhbmdlZCBmcm9tIDEuMi4xMiB0byAxLjIuMTMuICBUaGUgb2xkIG5hbWluZyBjb252ZW50aW9uIHdhcyB0bwordXNlIHR0Zi8lZCBmb3IgdGhlIHR0eSBkZXZpY2UgYW5kIGN1Zi8lZCBmb3IgdGhlIGN1YSBkZXZpY2UuICBUaGF0CitoYXMgYmVlbiBjaGFuZ2VkIHRvIGNvbmZvcm0gdG8gYW4gYWdyZWVkLXVwb24gc3RhbmRhcmQgb2YgcGxhY2luZworYWxsIHRoZSB0dHkgZGV2aWNlcyB1bmRlciB0dHMuICBUaGUgZGV2aWNlIG5hbWVzIGFyZSBub3cgdHRzL0YlZCBmb3IKK3RoZSB0dHkgZGV2aWNlIGFuZCBjdWEvRiVkIGZvciB0aGUgY3VhIGRldmljZXMuICBJZiB5b3Ugd2VyZSB1c2luZwordGhlIG9sZGVyIGRldmZzIG5hbWVzLCB5b3UgbXVzdCB1cGRhdGUgZm9yIHRoZSBuZXdlciBjb252ZW50aW9uLgorCitZb3UgZG8gbm90IG5lZWQgdG8gcnVuIGlwMm1rZGV2IGlmIHlvdSBhcmUgdXNpbmcgZGV2ZnMgYW5kIG9ubHkgd2FudCB0bwordXNlIHRoZSBkZXZmcyBuYXRpdmUgZGV2aWNlIG5hbWVzLgorIAorCis3LiBOT1RFUworCitUaGlzIGlzIGEgcmVsZWFzZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIsIGJ1dCBpdCBpcyBpbXBvc3NpYmxlIHRvIHRlc3QgaXQKK2luIGFsbCBjb25maWd1cmF0aW9ucyBvZiBMaW51eC4gSWYgdGhlcmUgaXMgYW55IGFub21hbG91cyBiZWhhdmlvdXIgdGhhdCAKK2RvZXMgbm90IG1hdGNoIHRoZSBzdGFuZGFyZCBzZXJpYWwgcG9ydCdzIGJlaGF2aW91ciBwbGVhc2UgbGV0IHVzIGtub3cuCisKKworOC4gaXAybWtkZXYgc2hlbGwgc2NyaXB0CisKK1ByZXZpb3VzbHksIHRoaXMgc2NyaXB0IHdhcyBzaW1wbHkgYXR0YWNoZWQgaGVyZS4gIEl0IGlzIG5vdyBhdHRhY2hlZCBhcyBhCitzaGFyIGFyY2hpdmUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZXh0cmFjdCB0aGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50YXRpb24uCitUbyBjcmVhdGUgdGhlIGlwMm1rZGV2IHNoZWxsIHNjcmlwdCBjaGFuZ2UgdG8gYSBjb252ZW5pZW50IGRpcmVjdG9yeSAoL3RtcAord29ya3MganVzdCBmaW5lKSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworCXVuc2hhciBEb2N1bWVudGF0aW9uL2NvbXB1dG9uZS50eHQKKwkJKFRoaXMgZmlsZSkKKworWW91IHNob3VsZCBub3cgaGF2ZSBhIGZpbGUgaXAybWtkZXYgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHdpdGgKK3Blcm1pc3Npb25zIHNldCB0byBleGVjdXRlLiAgUnVubmluZyB0aGF0IHNjcmlwdCB3aXRoIHRoZW4gY3JlYXRlIHRoZQorbmVjZXNzYXJ5IGRldmljZXMgZm9yIHRoZSBDb21wdXRvbmUgYm9hcmRzLCBpbnRlcmZhY2VzLCBhbmQgcG9ydHMgd2hpY2gKK2FyZSBwcmVzZW50IG9uIHlvdSBzeXN0ZW0gYXQgdGhlIHRpbWUgaXQgaXMgcnVuLgorCisKKyMhL2Jpbi9zaAorIyBUaGlzIGlzIGEgc2hlbGwgYXJjaGl2ZSAocHJvZHVjZWQgYnkgR05VIHNoYXJ1dGlscyA0LjIuMSkuCisjIFRvIGV4dHJhY3QgdGhlIGZpbGVzIGZyb20gdGhpcyBhcmNoaXZlLCBzYXZlIGl0IHRvIHNvbWUgRklMRSwgcmVtb3ZlCisjIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBgIS9iaW4vc2gnIGxpbmUgYWJvdmUsIHRoZW4gdHlwZSBgc2ggRklMRScuCisjCisjIE1hZGUgb24gMjAwMS0xMC0yOSAxMDozMiBFU1QgYnkgPG1od0BhbGNvdmUud2l0dHNlbmQuY29tPi4KKyMgU291cmNlIGRpcmVjdG9yeSB3YXMgYC9ob21lMi9zcmMvdG1wJy4KKyMKKyMgRXhpc3RpbmcgZmlsZXMgd2lsbCAqbm90KiBiZSBvdmVyd3JpdHRlbiB1bmxlc3MgYC1jJyBpcyBzcGVjaWZpZWQuCisjCisjIFRoaXMgc2hhciBjb250YWluczoKKyMgbGVuZ3RoIG1vZGUgICAgICAgbmFtZQorIyAtLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICA0MjUxIC1yd3hyLXhyLXggaXAybWtkZXYKKyMKK3NhdmVfSUZTPSIke0lGU30iCitJRlM9IiR7SUZTfToiCitnZXR0ZXh0X2Rpcj1GQUlMRUQKK2xvY2FsZV9kaXI9RkFJTEVECitmaXJzdF9wYXJhbT0iJDEiCitmb3IgZGlyIGluICRQQVRICitkbworICBpZiB0ZXN0ICIkZ2V0dGV4dF9kaXIiID0gRkFJTEVEICYmIHRlc3QgLWYgJGRpci9nZXR0ZXh0IFwKKyAgICAgJiYgKCRkaXIvZ2V0dGV4dCAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxKQorICB0aGVuCisgICAgc2V0IGAkZGlyL2dldHRleHQgLS12ZXJzaW9uIDI+JjFgCisgICAgaWYgdGVzdCAiJDMiID0gR05VCisgICAgdGhlbgorICAgICAgZ2V0dGV4dF9kaXI9JGRpcgorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIiRsb2NhbGVfZGlyIiA9IEZBSUxFRCAmJiB0ZXN0IC1mICRkaXIvc2hhciBcCisgICAgICYmICgkZGlyL3NoYXIgLS1wcmludC10ZXh0LWRvbWFpbi1kaXIgPi9kZXYvbnVsbCAyPiYxKQorICB0aGVuCisgICAgbG9jYWxlX2Rpcj1gJGRpci9zaGFyIC0tcHJpbnQtdGV4dC1kb21haW4tZGlyYAorICBmaQorZG9uZQorSUZTPSIkc2F2ZV9JRlMiCitpZiB0ZXN0ICIkbG9jYWxlX2RpciIgPSBGQUlMRUQgfHwgdGVzdCAiJGdldHRleHRfZGlyIiA9IEZBSUxFRAordGhlbgorICBlY2hvPWVjaG8KK2Vsc2UKKyAgVEVYVERPTUFJTkRJUj0kbG9jYWxlX2RpcgorICBleHBvcnQgVEVYVERPTUFJTkRJUgorICBURVhURE9NQUlOPXNoYXJ1dGlscworICBleHBvcnQgVEVYVERPTUFJTgorICBlY2hvPSIkZ2V0dGV4dF9kaXIvZ2V0dGV4dCAtcyIKK2ZpCitpZiB0b3VjaCAtYW0gLXQgMjAwMTEyMzEyMzU5LjU5ICQkLnRvdWNoID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWYgMjAwMTEyMzEyMzU5LjU5IC1hIC1mICQkLnRvdWNoOyB0aGVuCisgIHNoYXJfdG91Y2g9J3RvdWNoIC1hbSAtdCAkMSQyJDMkNCQ1JDYuJDcgIiQ4IicKK2VsaWYgdG91Y2ggLWFtIDEyMzEyMzU5MjAwMS41OSAkJC50b3VjaCA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1mIDEyMzEyMzU5MjAwMS41OSAtYSAhIC1mIDEyMzEyMzU5MjAwMS41IC1hIC1mICQkLnRvdWNoOyB0aGVuCisgIHNoYXJfdG91Y2g9J3RvdWNoIC1hbSAkMyQ0JDUkNiQxJDIuJDcgIiQ4IicKK2VsaWYgdG91Y2ggLWFtIDEyMzEyMzU5MDEgJCQudG91Y2ggPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZiAxMjMxMjM1OTAxIC1hIC1mICQkLnRvdWNoOyB0aGVuCisgIHNoYXJfdG91Y2g9J3RvdWNoIC1hbSAkMyQ0JDUkNiQyICIkOCInCitlbHNlCisgIHNoYXJfdG91Y2g9OgorICBlY2hvCisgICRlY2hvICdXQVJOSU5HOiBub3QgcmVzdG9yaW5nIHRpbWVzdGFtcHMuICBDb25zaWRlciBnZXR0aW5nIGFuZCcKKyAgJGVjaG8gImluc3RhbGxpbmcgR05VIFxgdG91Y2gnLCBkaXN0cmlidXRlZCBpbiBHTlUgRmlsZSBVdGlsaXRpZXMuLi4iCisgIGVjaG8KK2ZpCitybSAtZiAyMDAxMTIzMTIzNTkuNTkgMTIzMTIzNTkyMDAxLjU5IDEyMzEyMzU5MjAwMS41IDEyMzEyMzU5MDEgJCQudG91Y2gKKyMKK2lmIG1rZGlyIF9zaDE3NTgxOyB0aGVuCisgICRlY2hvICd4IC0nICdjcmVhdGluZyBsb2NrIGRpcmVjdG9yeScKK2Vsc2UKKyAgJGVjaG8gJ2ZhaWxlZCB0byBjcmVhdGUgbG9jayBkaXJlY3RvcnknCisgIGV4aXQgMQorZmkKKyMgPT09PT09PT09PT09PSBpcDJta2RldiA9PT09PT09PT09PT09PQoraWYgdGVzdCAtZiAnaXAybWtkZXYnICYmIHRlc3QgIiRmaXJzdF9wYXJhbSIgIT0gLWM7IHRoZW4KKyAgJGVjaG8gJ3ggLScgU0tJUFBJTkcgJ2lwMm1rZGV2JyAnKGZpbGUgYWxyZWFkeSBleGlzdHMpJworZWxzZQorICAkZWNobyAneCAtJyBleHRyYWN0aW5nICdpcDJta2RldicgJyh0ZXh0KScKKyAgc2VkICdzL15YLy8nIDw8ICdTSEFSX0VPRicgPiAnaXAybWtkZXYnICYmCisjIS9iaW4vc2ggLQorIworIwlpcDJta2RldgorIworIwlNYWtlIG9yIHJlbW92ZSBkZXZpY2VzIGFzIG5lZWRlZCBmb3IgQ29tcHV0b25lIEludGVsbGlwb3J0IGRyaXZlcnMKKyMKKyMJRmlyc3QgcnVsZSEgIElmIHRoZSBkZXYgZmlsZSBleGlzdHMgYW5kIHlvdSBuZWVkIGl0LCBkb24ndCBtZXNzCisjCXdpdGggaXQuICBUaGF0IHByZXZlbnRzIHVzIGZyb20gc2NyZXdpbmcgdXAgb3BlbiB0dHlzLCBvd25lcnNoaXAKKyMJYW5kIHBlcm1pc3Npb25zIG9uIGEgcnVubmluZyBzeXN0ZW0hCisjCisjCVRoaXMgc2NyaXB0IHdpbGwgTk9UIHJlbW92ZSBkZXZpY2VzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IGlmIHRoZWlyCisjCWJvYXJkIG9yIGludGVyZmFjZSBib3ggaGFzIGJlZW4gcmVtb3ZlZC4gIElmIHlvdSB3YW50IHRvIGdldCByaWQKKyMJb2YgdGhlbSwgeW91IGNhbiBtYW51YWxseSBkbyBhbiAicm0gLWYgL2Rldi90dHlGKiAvZGV2L2N1YWYqIgorIwliZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdC4gIFJ1bm5pbmcgdGhpcyBzY3JpcHQgd2lsbCB0aGVuIHJlY3JlYXRlCisjCWFsbCB0aGUgdmFsaWQgZGV2aWNlcy4KKyMKKyMJTWljaGFlbCBILiBXYXJmaWVsZAorIwkvXC9cfD1taHc9fFwvXC8KKyMJbWh3QHdpdHRzZW5kLmNvbQorIworIwlVcGRhdGVkIDEwLzI5LzIwMDAgZm9yIHZlcnNpb24gMS4yLjEzIG5hbWluZyBjb252ZW50aW9uCisjCQl1bmRlciBkZXZmcy4JL1wvXHw9bWh3PXxcL1wvCisjCisjCVVwZGF0ZWQgMDMvMDkvMjAwMCBmb3IgZGV2ZnMgc3VwcG9ydCBpbiBpcDIgZHJpdmVycy4gL1wvXHw9bWh3PXxcL1wvCisjCitYCitpZiB0ZXN0IC1kIC9kZXYvaXAyIDsgdGhlbgorIwlUaGlzIGlzIGRldmZzIG1vZGUuLi4gIFdlIGRvbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBjcmVhdGUgc3ltbGlua3MKKyMJZnJvbSB0aGUgcmVhbCBkZXZpY2VzIHRvIHRoZSBvbGQgbmFtZXMhCitYCWNkIC9kZXYKK1gJZWNobyAiQ3JlYXRpbmcgc3ltYm9saWMgbGlua3MgdG8gZGV2ZnMgZGV2aWNlcyIKK1gJZm9yIGkgaW4gYGxzIGlwMmAgOyBkbworWAkJaWYgdGVzdCAhIC1MIGlwMiRpIDsgdGhlbgorWAkJCSMgUmVtb3ZlIGl0IGluY2FzZSBpdCB3YXNuJ3QgYSBzeW1saW5rIChvbGQgZGV2aWNlKQorWAkJCXJtIC1mIGlwMiRpCitYCQkJbG4gLXMgaXAyLyRpIGlwMiRpCitYCQlmaQorWAlkb25lCitYCWZvciBpIGluIGAoIGNkIHR0cyA7IGxzIEYqIClgIDsgZG8KK1gJCWlmIHRlc3QgISAtTCB0dHkkaSA7IHRoZW4KK1gJCQkjIFJlbW92ZSBpdCBpbmNhc2UgaXQgd2Fzbid0IGEgc3ltbGluayAob2xkIGRldmljZSkKK1gJCQlybSAtZiB0dHkkaQorWAkJCWxuIC1zIHR0cy8kaSB0dHkkaQorWAkJZmkKK1gJZG9uZQorWAlmb3IgaSBpbiBgKCBjZCBjdWEgOyBscyBGKiApYCA7IGRvCitYCQlERVZOVU1CRVI9YGV4cHIgJGkgOiAnRlwoLipcKSdgCitYCQlpZiB0ZXN0ICEgLUwgY3VmJERFVk5VTUJFUiA7IHRoZW4KK1gJCQkjIFJlbW92ZSBpdCBpbmNhc2UgaXQgd2Fzbid0IGEgc3ltbGluayAob2xkIGRldmljZSkKK1gJCQlybSAtZiBjdWYkREVWTlVNQkVSCitYCQkJbG4gLXMgY3VhLyRpIGN1ZiRERVZOVU1CRVIKK1gJCWZpCitYCWRvbmUKK1gJZXhpdCAwCitmaQorWAoraWYgdGVzdCAhIC1mIC9wcm9jL3R0eS9kcml2ZXJzCit0aGVuCitYCWVjaG8gIlwKK1VuYWJsZSB0byBjaGVjayBkcml2ZXIgc3RhdHVzLgorTWFrZSBzdXJlIHByb2MgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZC4iCitYCitYCWV4aXQgMjU1CitmaQorWAoraWYgdGVzdCAhIC1mIC9wcm9jL3R0eS9kcml2ZXIvaXAyCit0aGVuCitYCWVjaG8gIlwKK1VuYWJsZSB0byBsb2NhdGUgaXAyIHByb2MgZmlsZS4KK0F0dGVtcHRpbmcgdG8gbG9hZCBkcml2ZXIiCitYCitYCWlmIC9zYmluL2luc21vZCBpcDIKK1gJdGhlbgorWAkJaWYgdGVzdCAhIC1mIC9wcm9jL3R0eS9kcml2ZXIvaXAyCitYCQl0aGVuCitYCQkJZWNobyAiXAorVW5hYmxlIHRvIGxvY2F0ZSBpcDIgcHJvYyBmaWxlIGFmdGVyIGxvYWRpbmcgZHJpdmVyLgorRHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWx1cmUgb3IgZHJpdmVyIHZlcnNpb24gZXJyb3IuCisiCitYCQlleGl0IDI1NQorWAkJZmkKK1gJZWxzZQorWAkJZWNobyAiVW5hYmxlIHRvIGxvYWQgaXAyIGRyaXZlci4iCitYCQlleGl0IDI1NQorWAlmaQorZmkKK1gKKyMgT2suLi4gIFNvIHdlIGdvdCB0aGUgZHJpdmVyIGxvYWRlZCBhbmQgd2UgY2FuIGxvY2F0ZSB0aGUgcHJvY2ZzIGZpbGVzLgorIyBOZXh0IHdlIG5lZWQgb3VyIG1ham9yIG51bWJlcnMuCitYCitUVFlNQUpPUj1gc2VkIC1lICcvXmlwMi8hZCcgLWUgJy9cL2RldlwvdHQvIWQnIC1lICdzLy4qdHRbXiAJXSpbIAldKlwoWzAtOV0qXClbIAldKi4qL1wxLycgPCAvcHJvYy90dHkvZHJpdmVyc2AKK0NVQU1BSk9SPWBzZWQgLWUgJy9eaXAyLyFkJyAtZSAnL1wvZGV2XC9jdS8hZCcgLWUgJ3MvLipjdVteIAldKlsgCV0qXChbMC05XSpcKVsgCV0qLiovXDEvJyA8IC9wcm9jL3R0eS9kcml2ZXJzYAorQlJETUFKT1I9YHNlZCAtZSAnL15Ecml2ZXI6IC8hZCcgLWUgJ3MvLipJTWFqb3I9XChbMC05XSpcKVsgCV0qLiovXDEvJyA8IC9wcm9jL3R0eS9kcml2ZXIvaXAyYAorWAorZWNobyAiXAorVFRZTUFKT1IgPSAkVFRZTUFKT1IKK0NVQU1BSk9SID0gJENVQU1BSk9SCitCUkRNQUpPUiA9ICRCUkRNQUpPUgorIgorWAorIyBPay4uLiAgTm93IHdlIHNob3VsZCBrbm93IG91ciBtYWpvciBudW1iZXJzLCBpZiBhcHByb3ByaWF0ZS4uLgorIyBOb3cgd2UgbmVlZCBvdXIgYm9hcmRzIGFuZCBzdGFydCB0aGUgZGV2aWNlIGxvb3BzLgorWAorZ3JlcCAnXkJvYXJkIFswLTldOicgL3Byb2MvdHR5L2RyaXZlci9pcDIgfCB3aGlsZSByZWFkIHRva2VuIG51bWJlciB0eXBlIGFsbHRoZXJlc3QKK2RvCitYCSMgVGhlIHRlc3QgZm9yIGJsYW5rICJ0eXBlIiB3aWxsIGNhdGNoIHRoZSBzdGF0cyBsZWFkLWluIGxpbmVzCitYCSMgaWYgdGhleSBleGlzdCBpbiB0aGUgZmlsZQorWAlpZiB0ZXN0ICIkdHlwZSIgPSAidmFjYW50IiAtbyAiJHR5cGUiID0gIlZhY2FudCIgLW8gIiR0eXBlIiA9ICIiCitYCXRoZW4KK1gJCWNvbnRpbnVlCitYCWZpCitYCitYCUJPQVJETk89YGV4cHIgIiRudW1iZXIiIDogJ1woWzAtOV1cKTonYAorWAlQT1JUUz1gZXhwciAiJGFsbHRoZXJlc3QiIDogJy4qcG9ydHM9XChbMC05XSpcKScgfCB0ciAnLCcgJyAnYAorWAlNSU5PUlM9YGV4cHIgIiRhbGx0aGVyZXN0IiA6ICcuKm1pbm9ycz1cKFswLTksXSpcKScgfCB0ciAnLCcgJyAnYAorWAorWAlpZiB0ZXN0ICIkQk9BUkROTyIgPSAiIiAtbyAiJFBPUlRTIiA9ICIiCitYCXRoZW4KKyMJVGhpcyBtYXkgYmUgYSBidWcuICBXZSBzaG91bGQgYXQgbGVhc3QgZ2V0IHRoaXMgbXVjaCBpbmZvcm1hdGlvbgorWAkJZWNobyAiVW5hYmxlIHRvIHByb2Nlc3MgYm9hcmQgbGluZSIKK1gJCWNvbnRpbnVlCitYCWZpCitYCitYCWlmIHRlc3QgIiRNSU5PUlMiID0gIiIKK1gJdGhlbgorIwlTaWxlbnRseSBza2lwIHRoaXMgb25lLiAgVGhpcyBib2FyZCBzZWVtcyB0byBoYXZlIG5vIGJveGVzCitYCQljb250aW51ZQorWAlmaQorWAorWAllY2hvICJib2FyZCAkQk9BUkROTzogJHR5cGUgcG9ydHMgPSAkUE9SVFM7IHBvcnQgbnVtYmVycyA9ICRNSU5PUlMiCitYCitYCWlmIHRlc3QgIiRCUkRNQUpPUiIgIT0gIiIKK1gJdGhlbgorWAkJQlJETUlOT1I9YGV4cHIgJEJPQVJETk8gXCogNGAKK1gJCVNUU01JTk9SPWBleHByICRCUkRNSU5PUiArIDFgCitYCQlpZiB0ZXN0ICEgLWMgL2Rldi9pcDJpcGwkQk9BUkROTyA7IHRoZW4KK1gJCQlta25vZCAvZGV2L2lwMmlwbCRCT0FSRE5PIGMgJEJSRE1BSk9SICRCUkRNSU5PUgorWAkJZmkKK1gJCWlmIHRlc3QgISAtYyAvZGV2L2lwMnN0YXQkQk9BUkROTyA7IHRoZW4KK1gJCQlta25vZCAvZGV2L2lwMnN0YXQkQk9BUkROTyBjICRCUkRNQUpPUiAkU1RTTUlOT1IKK1gJCWZpCitYCWZpCitYCitYCWlmIHRlc3QgIiRUVFlNQUpPUiIgIT0gIiIKK1gJdGhlbgorWAkJUE9SVE5PPSRCT0FSREJBU0UKK1gKK1gJCWZvciBQT1JUTk8gaW4gJE1JTk9SUworWAkJZG8KK1gJCQlpZiB0ZXN0ICEgLWMgL2Rldi90dHlGJFBPUlROTyA7IHRoZW4KK1gJCQkJIyBXZSBnb3QgdGhlIGhhcmR3YXJlIGJ1dCBubyBkZXZpY2UgLSBtYWtlIGl0CitYCQkJCW1rbm9kIC9kZXYvdHR5RiRQT1JUTk8gYyAkVFRZTUFKT1IgJFBPUlROTworWAkJCWZpCQorWAkJZG9uZQorWAlmaQorWAorWAlpZiB0ZXN0ICIkQ1VBTUFKT1IiICE9ICIiCitYCXRoZW4KK1gJCVBPUlROTz0kQk9BUkRCQVNFCitYCitYCQlmb3IgUE9SVE5PIGluICRNSU5PUlMKK1gJCWRvCitYCQkJaWYgdGVzdCAhIC1jIC9kZXYvY3VmJFBPUlROTyA7IHRoZW4KK1gJCQkJIyBXZSBnb3QgdGhlIGhhcmR3YXJlIGJ1dCBubyBkZXZpY2UgLSBtYWtlIGl0CitYCQkJCW1rbm9kIC9kZXYvY3VmJFBPUlROTyBjICRDVUFNQUpPUiAkUE9SVE5PCitYCQkJZmkJCitYCQlkb25lCitYCWZpCitkb25lCitYCitYZXhpdCAwCitTSEFSX0VPRgorICAoc2V0IDIwIDAxIDEwIDI5IDEwIDMyIDAxICdpcDJta2Rldic7IGV2YWwgIiRzaGFyX3RvdWNoIikgJiYKKyAgY2htb2QgMDc1NSAnaXAybWtkZXYnIHx8CisgICRlY2hvICdyZXN0b3JlIG9mJyAnaXAybWtkZXYnICdmYWlsZWQnCisgIGlmICggbWQ1c3VtIC0taGVscCAyPiYxIHwgZ3JlcCAnc2FnZTogbWQ1c3VtIFxbJyApID4vZGV2L251bGwgMj4mMSBcCisgICYmICggbWQ1c3VtIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAtdiAndGV4dHV0aWxzIDEuMTInICkgPi9kZXYvbnVsbDsgdGhlbgorICAgIG1kNXN1bSAtYyA8PCBTSEFSX0VPRiA+L2Rldi9udWxsIDI+JjEgXAorICAgIHx8ICRlY2hvICdpcDJta2RldjonICdNRDUgY2hlY2sgZmFpbGVkJworY2I1NzE3MTM0NTA5ZjM4YmFkOWZkZTZiMWY3OWI0YTQgIGlwMm1rZGV2CitTSEFSX0VPRgorICBlbHNlCisgICAgc2hhcl9jb3VudD0iYExDX0FMTD0gTENfQ1RZUEU9IExBTkc9IHdjIC1jIDwgJ2lwMm1rZGV2J2AiCisgICAgdGVzdCA0MjUxIC1lcSAiJHNoYXJfY291bnQiIHx8CisgICAgJGVjaG8gJ2lwMm1rZGV2OicgJ29yaWdpbmFsIHNpemUnICc0MjUxLCcgJ2N1cnJlbnQgc2l6ZScgIiRzaGFyX2NvdW50ISIKKyAgZmkKK2ZpCitybSAtZnIgX3NoMTc1ODEKK2V4aXQgMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHFhcnJheS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwcWFycmF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE1NGUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHFhcnJheS50eHQKQEAgLTAsMCArMSw5MyBAQAorVGhpcyBkcml2ZXIgaXMgZm9yIENvbXBhcSdzIFNNQVJUMiBJbnRlbGxpZ2VudCBEaXNrIEFycmF5IENvbnRyb2xsZXJzLgorCitTdXBwb3J0ZWQgQ2FyZHM6CistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgZm9sbG93aW5nIGNhcmRzOgorCisJKiBTTUFSVCAoRUlTQSkKKwkqIFNNQVJULTIvRSAoRUlTQSkKKwkqIFNNQVJULTIvUAorCSogU01BUlQtMkRICisJKiBTTUFSVC0yU0wKKwkqIFNNQVJULTIyMQorCSogU01BUlQtMzEwMEVTCisJKiBTTUFSVC0zMjAwCisJKiBJbnRlZ3JhdGVkIFNtYXJ0IEFycmF5IENvbnRyb2xsZXIKKwkqIFNBIDQyMDAKKwkqIFNBIDQyNTBFUworCSogU0EgNDMxCisJKiBSQUlEIExDMiBDb250cm9sbGVyCisKK0l0IHNob3VsZCBhbHNvIHdvcmsgd2l0aCBzb21lIHJlYWxseSBvbGQgRGlzayBhcnJheSBhZGFwdGVycywgYnV0IEkgYW0KK3VuYWJsZSB0byB0ZXN0IGFnYWluc3QgdGhlc2UgY2FyZHM6CisKKwkqIElEQQorCSogSURBLTIKKwkqIElBRVMKKworCitFSVNBIENvbnRyb2xsZXJzOgorLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgdG8gdXNlIGFuIEVJU0EgY29udHJvbGxlciB5b3UnbGwgaGF2ZSB0byBzdXBwbHkgc29tZQorbW9kcHJvYmUvbGlsbyBwYXJhbWV0ZXJzLiAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIG11c3QKK2dpdmUgaXQgdGhlIGNvbnRyb2xsZXIncyBJTyBwb3J0IGFkZHJlc3MgYXQgYm9vdCB0aW1lIChpdCBpcyBub3QKK25lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoZSBJUlEpLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgdHdvIFNNQVJULTIvRQorY29udHJvbGxlcnMsIGluIEVJU0Egc2xvdHMgMSBhbmQgMiB5b3UnZCBnaXZlIGl0IGEgYm9vdCBhcmd1bWVudCBsaWtlCit0aGlzOgorCisJc21hcnQyPTB4MTAwMCwweDIwMDAKKworSWYgeW91IHdlcmUgbG9hZGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCB5b3UnZCBnaXZlIGxvYWQgaXQgbGlrZSB0aGlzOgorCisJbW9kcHJvYmUgY3BxYXJyYXkgZWlzYT0weDEwMDAsMHgyMDAwCisKK1lvdSBjYW4gdXNlIEVJU0EgYW5kIFBDSSBhZGFwdGVycyBhdCB0aGUgc2FtZSB0aW1lLgorCisKK0RldmljZSBOYW1pbmc6CistLS0tLS0tLS0tLS0tLQorCitZb3UgbmVlZCBzb21lIGVudHJpZXMgaW4gL2RldiBmb3IgdGhlIGlkYSBkZXZpY2UuICBNQUtFREVWIGluIHRoZSAvZGV2CitkaXJlY3RvcnkgY2FuIG1ha2UgZGV2aWNlIG5vZGVzIGZvciB5b3UgYXV0b21hdGljYWxseS4gIFRoZSBkZXZpY2Ugc2V0dXAgaXMKK2FzIGZvbGxvd3M6CisKK01ham9yIG51bWJlcnM6CisJNzIJaWRhMAorCTczCWlkYTEKKwk3NAlpZGEyCisJNzUJaWRhMworCTc2CWlkYTQKKwk3NwlpZGE1CisJNzgJaWRhNgorCTc5CWlkYTcKKworTWlub3IgbnVtYmVyczoKKyAgICAgICAgYjcgYjYgYjUgYjQgYjMgYjIgYjEgYjAKKyAgICAgICAgfC0tLS0rLS0tLXwgfC0tLS0rLS0tLXwKKyAgICAgICAgICAgICB8ICAgICAgICAgICB8CisgICAgICAgICAgICAgfCAgICAgICAgICAgKy0tLS0tLS0tIFBhcnRpdGlvbiBJRCAoMD13aG9sZWRldiwgMS0xNSBwYXJ0aXRpb24pCisgICAgICAgICAgICAgfAorICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsIFZvbHVtZSBudW1iZXIKKworVGhlIGRldmljZSBuYW1pbmcgc2NoZW1lIGlzOgorL2Rldi9pZGEvYzBkMAkJQ29udHJvbGxlciAwLCBkaXNrIDAsIHdob2xlIGRldmljZQorL2Rldi9pZGEvYzBkMHAxCQlDb250cm9sbGVyIDAsIGRpc2sgMCwgcGFydGl0aW9uIDEKKy9kZXYvaWRhL2MwZDBwMgkJQ29udHJvbGxlciAwLCBkaXNrIDAsIHBhcnRpdGlvbiAyCisvZGV2L2lkYS9jMGQwcDMJCUNvbnRyb2xsZXIgMCwgZGlzayAwLCBwYXJ0aXRpb24gMworCisvZGV2L2lkYS9jMWQxCQlDb250cm9sbGVyIDEsIGRpc2sgMSwgd2hvbGUgZGV2aWNlCisvZGV2L2lkYS9jMWQxcDEJCUNvbnRyb2xsZXIgMSwgZGlzayAxLCBwYXJ0aXRpb24gMQorL2Rldi9pZGEvYzFkMXAyCQlDb250cm9sbGVyIDEsIGRpc2sgMSwgcGFydGl0aW9uIDIKKy9kZXYvaWRhL2MxZDFwMwkJQ29udHJvbGxlciAxLCBkaXNrIDEsIHBhcnRpdGlvbiAzCisKKworQ2hhbmdlbG9nOgorPT09PT09PT09PQorCisxMC0yOC0yMDA0IDoJR2VuZXJhbCBjbGVhbnVwLCBzeW50YXggZml4ZXMgZm9yIGluLWtlcm5lbCBkcml2ZXIgdmVyc2lvbi4KKwkJSmFtZXMgTmVsc29uIDxqYW1lczQ3NjVAZ21haWwuY29tPgorCisKKzE5OTkgOgkJT3JpZ2luYWwgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvYW1kLXBvd2Vybm93LnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvYW1kLXBvd2Vybm93LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTRkYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9hbWQtcG93ZXJub3cudHh0CkBAIC0wLDAgKzEsMzggQEAKKworUG93ZXJOb3chIGFuZCBDb29sJ24nUXVpZXQgYXJlIEFNRCBuYW1lcyBmb3IgZnJlcXVlbmN5CittYW5hZ2VtZW50IGNhcGFiaWxpdGllcyBpbiBBTUQgcHJvY2Vzc29ycy4gQXMgdGhlIGhhcmR3YXJlCitpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIGluIG5ldyBnZW5lcmF0aW9ucyBvZiB0aGUgcHJvY2Vzc29ycywKK3RoZXJlIGlzIGEgZGlmZmVyZW50IGNwdS1mcmVxIGRyaXZlciBmb3IgZWFjaCBnZW5lcmF0aW9uLgorCitOb3RlIHRoYXQgdGhlIGRyaXZlcidzIHdpbGwgbm90IGxvYWQgb24gdGhlICJ3cm9uZyIgaGFyZHdhcmUsCitzbyBpdCBpcyBzYWZlIHRvIHRyeSBlYWNoIGRyaXZlciBpbiB0dXJuIHdoZW4gaW4gZG91YnQgYXMgdG8KK3doaWNoIGlzIHRoZSBjb3JyZWN0IGRyaXZlci4KKworTm90ZSB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNoYW5nZSBmcmVxdWVuY3kgKGFuZCB2b2x0YWdlKQoraXMgbm90IGF2YWlsYWJsZSBpbiBhbGwgcHJvY2Vzc29ycy4gVGhlIGRyaXZlcnMgd2lsbCByZWZ1c2UKK3RvIGxvYWQgb24gcHJvY2Vzc29ycyB3aXRob3V0IHRoaXMgY2FwYWJpbGl0eS4gVGhlIGNhcGFiaWxpdHkKK2lzIGRldGVjdGVkIHdpdGggdGhlIGNwdWlkIGluc3RydWN0aW9uLgorCitUaGUgZHJpdmVycyB1c2UgQklPUyBzdXBwbGllZCB0YWJsZXMgdG8gb2J0YWluIGZyZXF1ZW5jeSBhbmQKK3ZvbHRhZ2UgaW5mb3JtYXRpb24gYXBwcm9wcmlhdGUgZm9yIGEgcGFydGljdWxhciBwbGF0Zm9ybS4KK0ZyZXF1ZW5jeSB0cmFuc2l0aW9ucyB3aWxsIGJlIHVuYXZhaWxhYmxlIGlmIHRoZSBCSU9TIGRvZXMKK25vdCBzdXBwbHkgdGhlc2UgdGFibGVzLgorCis2dGggR2VuZXJhdGlvbjogcG93ZXJub3ctazYKKworN3RoIEdlbmVyYXRpb246IHBvd2Vybm93LWs3OiBBdGhsb24sIER1cm9uLCBHZW9kZS4KKworOHRoIEdlbmVyYXRpb246IHBvd2Vybm93LWs4OiBBdGhsb24sIEF0aGxvbiA2NCwgT3B0ZXJvbiwgU2VtcHJvbi4KK0RvY3VtZW50YXRpb24gb24gdGhpcyBmdW5jdGlvbmFsaXR5IGluIDh0aCBnZW5lcmF0aW9uIHByb2Nlc3NvcnMKK2lzIGF2YWlsYWJsZSBpbiB0aGUgIkJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSIsIHB1YmxpY2F0aW9uCisyNjA5NCwgaW4gY2hhcHRlciA5LCBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGZyb20gd3d3LmFtZC5jb20uIAorCitCSU9TIHN1cHBsaWVkIGRhdGEsIGZvciBwb3dlcm5vdy1rNyBhbmQgZm9yIHBvd2Vybm93LWs4LCBtYXkgYmUKK2Zyb20gZWl0aGVyIHRoZSBQU0IgdGFibGUgb3IgZnJvbSBBQ1BJIG9iamVjdHMuIFRoZSBBQ1BJIHN1cHBvcnQKK2lzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBrZXJuZWwgY29uZmlnIHNldHMgQ09ORklHX0FDUElfUFJPQ0VTU09SLgorVGhlIHBvd2Vybm93LWs4IGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gdXNlIEFDUEkgaWYgc28gY29uZmlndXJlZCwKK2FuZCBmYWxsIGJhY2sgdG8gUFNUIGlmIHRoYXQgZmFpbHMuCitUaGUgcG93ZXJub3ctazcgZHJpdmVyIHdpbGwgdHJ5IHRvIHVzZSB0aGUgUFNCIHN1cHBvcnQgZmlyc3QsIGFuZAorZmFsbCBiYWNrIHRvIEFDUEkgaWYgdGhlIFBTQiBzdXBwb3J0IGZhaWxzLiBBIG1vZHVsZSBwYXJhbWV0ZXIsCithY3BpX2ZvcmNlLCBpcyBwcm92aWRlZCB0byBmb3JjZSBBQ1BJIHN1cHBvcnQgdG8gYmUgdXNlZCBpbnN0ZWFkIAorb2YgUFNCIHN1cHBvcnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2NvcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jb3JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWIzZjlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jb3JlLnR4dApAQCAtMCwwICsxLDk4IEBACisgICAgIENQVSBmcmVxdWVuY3kgYW5kIHZvbHRhZ2Ugc2NhbGluZyBjb2RlIGluIHRoZSBMaW51eChUTSkga2VybmVsCisKKworCQkgICAgICAgICBMIGkgbiB1IHggICAgQyBQIFUgRiByIGUgcQorCisJCQkgIEMgUCBVIEYgciBlIHEgICAgQyBvIHIgZQorCisKKwkJICAgIERvbWluaWsgQnJvZG93c2tpICA8bGludXhAYnJvZG8uZGU+CisJCSAgICAgRGF2aWQgS2ltZG9uIDxkd2hlZG9uQGRlYmlhbi5vcmc+CisKKworCisgICBDbG9jayBzY2FsaW5nIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjbG9jayBzcGVlZCBvZiB0aGUgQ1BVcyBvbiB0aGUKKyAgICBmbHkuIFRoaXMgaXMgYSBuaWNlIG1ldGhvZCB0byBzYXZlIGJhdHRlcnkgcG93ZXIsIGJlY2F1c2UgdGhlIGxvd2VyCisgICAgICAgICAgICB0aGUgY2xvY2sgc3BlZWQsIHRoZSBsZXNzIHBvd2VyIHRoZSBDUFUgY29uc3VtZXMuCisKKworQ29udGVudHM6CistLS0tLS0tLS0KKzEuICBDUFVGcmVxIGNvcmUgYW5kIGludGVyZmFjZXMKKzIuICBDUFVGcmVxIG5vdGlmaWVycworCisxLiBHZW5lcmFsIEluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgQ1BVRnJlcSBjb3JlIGNvZGUgaXMgbG9jYXRlZCBpbiBsaW51eC9rZXJuZWwvY3B1ZnJlcS5jLiBUaGlzCitjcHVmcmVxIGNvZGUgb2ZmZXJzIGEgc3RhbmRhcmRpemVkIGludGVyZmFjZSBmb3IgdGhlIENQVUZyZXEKK2FyY2hpdGVjdHVyZSBkcml2ZXJzICh0aG9zZSBwaWVjZXMgb2YgY29kZSB0aGF0IGRvIGFjdHVhbAorZnJlcXVlbmN5IHRyYW5zaXRpb25zKSwgYXMgd2VsbCBhcyB0byAibm90aWZpZXJzIi4gVGhlc2UgYXJlIGRldmljZQorZHJpdmVycyBvciBvdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwgdGhhdCBuZWVkIHRvIGJlIGluZm9ybWVkIG9mCitwb2xpY3kgY2hhbmdlcyAoZXguIHRoZXJtYWwgbW9kdWxlcyBsaWtlIEFDUEkpIG9yIG9mIGFsbAorZnJlcXVlbmN5IGNoYW5nZXMgKGV4LiB0aW1pbmcgY29kZSkgb3IgZXZlbiBuZWVkIHRvIGZvcmNlIGNlcnRhaW4KK3NwZWVkIGxpbWl0cyAobGlrZSBMQ0QgZHJpdmVycyBvbiBBUk0gYXJjaGl0ZWN0dXJlKS4gQWRkaXRpb25hbGx5LCB0aGUKK2tlcm5lbCAiY29uc3RhbnQiIGxvb3BzX3Blcl9qaWZmeSBpcyB1cGRhdGVkIG9uIGZyZXF1ZW5jeSBjaGFuZ2VzCitoZXJlLgorCitSZWZlcmVuY2UgY291bnRpbmcgaXMgZG9uZSBieSBjcHVmcmVxX2dldF9jcHUgYW5kIGNwdWZyZXFfcHV0X2NwdSwKK3doaWNoIG1ha2Ugc3VyZSB0aGF0IHRoZSBjcHVmcmVxIHByb2Nlc3NvciBkcml2ZXIgaXMgY29ycmVjdGx5CityZWdpc3RlcmVkIHdpdGggdGhlIGNvcmUsIGFuZCB3aWxsIG5vdCBiZSB1bmxvYWRlZCB1bnRpbAorY3B1ZnJlcV9wdXRfY3B1IGlzIGNhbGxlZC4KKworMi4gQ1BVRnJlcSBub3RpZmllcnMKKz09PT09PT09PT09PT09PT09PT09CisKK0NQVUZyZXEgbm90aWZpZXJzIGNvbmZvcm0gdG8gdGhlIHN0YW5kYXJkIGtlcm5lbCBub3RpZmllciBpbnRlcmZhY2UuCitTZWUgbGludXgvaW5jbHVkZS9saW51eC9ub3RpZmllci5oIGZvciBkZXRhaWxzIG9uIG5vdGlmaWVycy4KKworVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgQ1BVRnJlcSBub3RpZmllcnMgLSBwb2xpY3kgbm90aWZpZXJzIGFuZAordHJhbnNpdGlvbiBub3RpZmllcnMuCisKKworMi4xIENQVUZyZXEgcG9saWN5IG5vdGlmaWVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBhcmUgbm90aWZpZWQgd2hlbiBhIG5ldyBwb2xpY3kgaXMgaW50ZW5kZWQgdG8gYmUgc2V0LiBFYWNoCitDUFVGcmVxIHBvbGljeSBub3RpZmllciBpcyBjYWxsZWQgdGhyZWUgdGltZXMgZm9yIGEgcG9saWN5IHRyYW5zaXRpb246CisKKzEuKSBEdXJpbmcgQ1BVRlJFUV9BREpVU1QgYWxsIENQVUZyZXEgbm90aWZpZXJzIG1heSBjaGFuZ2UgdGhlIGxpbWl0IGlmCisgICAgdGhleSBzZWUgYSBuZWVkIGZvciB0aGlzIC0gbWF5IGl0IGJlIHRoZXJtYWwgY29uc2lkZXJhdGlvbnMgb3IKKyAgICBoYXJkd2FyZSBsaW1pdGF0aW9ucy4KKworMi4pIER1cmluZyBDUFVGUkVRX0lOQ09NUEFUSUJMRSBvbmx5IGNoYW5nZXMgbWF5IGJlIGRvbmUgaW4gb3JkZXIgdG8gYXZvaWQKKyAgICBoYXJkd2FyZSBmYWlsdXJlLgorCiszLikgQW5kIGR1cmluZyBDUFVGUkVRX05PVElGWSBhbGwgbm90aWZpZXJzIGFyZSBpbmZvcm1lZCBvZiB0aGUgbmV3IHBvbGljeQorICAgLSBpZiB0d28gaGFyZHdhcmUgZHJpdmVycyBmYWlsZWQgdG8gYWdyZWUgb24gYSBuZXcgcG9saWN5IGJlZm9yZSB0aGlzCisgICBzdGFnZSwgdGhlIGluY29tcGF0aWJsZSBoYXJkd2FyZSBzaGFsbCBiZSBzaHV0IGRvd24sIGFuZCB0aGUgdXNlcgorICAgaW5mb3JtZWQgb2YgdGhpcy4KKworVGhlIHBoYXNlIGlzIHNwZWNpZmllZCBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBub3RpZmllci4KKworVGhlIHRoaXJkIGFyZ3VtZW50LCBhIHZvaWQgKnBvaW50ZXIsIHBvaW50cyB0byBhIHN0cnVjdCBjcHVmcmVxX3BvbGljeQorY29uc2lzdGluZyBvZiBmaXZlIHZhbHVlczogY3B1LCBtaW4sIG1heCwgcG9saWN5IGFuZCBtYXhfY3B1X2ZyZXEuIG1pbiAKK2FuZCBtYXggYXJlIHRoZSBsb3dlciBhbmQgdXBwZXIgZnJlcXVlbmNpZXMgKGluIGtIeikgb2YgdGhlIG5ldworcG9saWN5LCBwb2xpY3kgdGhlIG5ldyBwb2xpY3ksIGNwdSB0aGUgbnVtYmVyIG9mIHRoZSBhZmZlY3RlZCBDUFU7IGFuZCAKK21heF9jcHVfZnJlcSB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgQ1BVIGZyZXF1ZW5jeS4gVGhpcyB2YWx1ZSBpcyBnaXZlbiAKK2ZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkuCisKKworMi4yIENQVUZyZXEgdHJhbnNpdGlvbiBub3RpZmllcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGFyZSBub3RpZmllZCB0d2ljZSB3aGVuIHRoZSBDUFVmcmVxIGRyaXZlciBzd2l0Y2hlcyB0aGUgQ1BVIGNvcmUKK2ZyZXF1ZW5jeSBhbmQgdGhpcyBjaGFuZ2UgaGFzIGFueSBleHRlcm5hbCBpbXBsaWNhdGlvbnMuCisKK1RoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBwaGFzZSAtIENQVUZSRVFfUFJFQ0hBTkdFIG9yCitDUFVGUkVRX1BPU1RDSEFOR0UuCisKK1RoZSB0aGlyZCBhcmd1bWVudCBpcyBhIHN0cnVjdCBjcHVmcmVxX2ZyZXFzIHdpdGggdGhlIGZvbGxvd2luZwordmFsdWVzOgorY3B1CS0gbnVtYmVyIG9mIHRoZSBhZmZlY3RlZCBDUFUKK29sZAktIG9sZCBmcmVxdWVuY3kKK25ldwktIG5ldyBmcmVxdWVuY3kKKworSWYgdGhlIGNwdWZyZXEgY29yZSBkZXRlY3RzIHRoZSBmcmVxdWVuY3kgaGFzIGNoYW5nZWQgd2hpbGUgdGhlIHN5c3RlbQord2FzIHN1c3BlbmRlZCwgdGhlc2Ugbm90aWZpZXJzIGFyZSBjYWxsZWQgd2l0aCBDUFVGUkVRX1JFU1VNRUNIQU5HRSBhcworc2Vjb25kIGFyZ3VtZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jcHUtZHJpdmVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2NwdS1kcml2ZXJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2M3NDM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jcHUtZHJpdmVycy50eHQKQEAgLTAsMCArMSwyMTYgQEAKKyAgICAgQ1BVIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSBzY2FsaW5nIGNvZGUgaW4gdGhlIExpbnV4KFRNKSBrZXJuZWwKKworCisJCSAgICAgICAgIEwgaSBuIHUgeCAgICBDIFAgVSBGIHIgZSBxCisKKwkJCSAgIEMgUCBVICAgRCByIGkgdiBlIHIgcyAKKworCQkgICAgICAgLSBpbmZvcm1hdGlvbiBmb3IgZGV2ZWxvcGVycyAtCisKKworCQkgICAgRG9taW5payBCcm9kb3dza2kgIDxsaW51eEBicm9kby5kZT4KKworCisKKyAgIENsb2NrIHNjYWxpbmcgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBDUFVzIG9uIHRoZQorICAgIGZseS4gVGhpcyBpcyBhIG5pY2UgbWV0aG9kIHRvIHNhdmUgYmF0dGVyeSBwb3dlciwgYmVjYXVzZSB0aGUgbG93ZXIKKyAgICAgICAgICAgIHRoZSBjbG9jayBzcGVlZCwgdGhlIGxlc3MgcG93ZXIgdGhlIENQVSBjb25zdW1lcy4KKworCitDb250ZW50czoKKy0tLS0tLS0tLQorMS4gICBXaGF0IFRvIERvPworMS4xICBJbml0aWFsaXphdGlvbgorMS4yICBQZXItQ1BVIEluaXRpYWxpemF0aW9uCisxLjMgIHZlcmlmeQorMS40ICB0YXJnZXQgb3Igc2V0cG9saWN5PworMS41ICB0YXJnZXQKKzEuNiAgc2V0cG9saWN5CisyLiAgIEZyZXF1ZW5jeSBUYWJsZSBIZWxwZXJzCisKKworCisxLiBXaGF0IFRvIERvPworPT09PT09PT09PT09PT0KKworU28sIHlvdSBqdXN0IGdvdCBhIGJyYW5kLW5ldyBDUFUgLyBjaGlwc2V0IHdpdGggZGF0YXNoZWV0cyBhbmQgd2FudCB0bworYWRkIGNwdWZyZXEgc3VwcG9ydCBmb3IgdGhpcyBDUFUgLyBjaGlwc2V0PyBHcmVhdC4gSGVyZSBhcmUgc29tZSBoaW50cworb24gd2hhdCBpcyBuZWNlc3Nhcnk6CisKKworMS4xIEluaXRpYWxpemF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3Qgb2YgYWxsLCBpbiBhbiBfX2luaXRjYWxsIGxldmVsIDcgKG1vZHVsZV9pbml0KCkpIG9yIGxhdGVyCitmdW5jdGlvbiBjaGVjayB3aGV0aGVyIHRoaXMga2VybmVsIHJ1bnMgb24gdGhlIHJpZ2h0IENQVSBhbmQgdGhlIHJpZ2h0CitjaGlwc2V0LiBJZiBzbywgcmVnaXN0ZXIgYSBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgd2l0aCB0aGUgQ1BVZnJlcSBjb3JlCit1c2luZyBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigpCisKK1doYXQgc2hhbGwgdGhpcyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgY29udGFpbj8gCisKK2NwdWZyZXFfZHJpdmVyLm5hbWUgLQkJVGhlIG5hbWUgb2YgdGhpcyBkcml2ZXIuCisKK2NwdWZyZXFfZHJpdmVyLm93bmVyIC0JCVRISVNfTU9EVUxFOworCitjcHVmcmVxX2RyaXZlci5pbml0IC0JCUEgcG9pbnRlciB0byB0aGUgcGVyLUNQVSBpbml0aWFsaXphdGlvbiAKKwkJCQlmdW5jdGlvbi4KKworY3B1ZnJlcV9kcml2ZXIudmVyaWZ5IC0JCUEgcG9pbnRlciB0byBhICJ2ZXJpZmljYXRpb24iIGZ1bmN0aW9uLgorCitjcHVmcmVxX2RyaXZlci5zZXRwb2xpY3kgX29yXyAKK2NwdWZyZXFfZHJpdmVyLnRhcmdldCAtCQlTZWUgYmVsb3cgb24gdGhlIGRpZmZlcmVuY2VzLgorCitBbmQgb3B0aW9uYWxseQorCitjcHVmcmVxX2RyaXZlci5leGl0IC0JCUEgcG9pbnRlciB0byBhIHBlci1DUFUgY2xlYW51cCBmdW5jdGlvbi4KKworY3B1ZnJlcV9kcml2ZXIucmVzdW1lIC0JCUEgcG9pbnRlciB0byBhIHBlci1DUFUgcmVzdW1lIGZ1bmN0aW9uCisJCQkJd2hpY2ggaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAorCQkJCWFuZCBfYmVmb3JlXyB0aGUgcHJlLXN1c3BlbmQgZnJlcXVlbmN5CisJCQkJYW5kL29yIHBvbGljeSBpcyByZXN0b3JlZCBieSBhIGNhbGwgdG8KKwkJCQktPnRhcmdldCBvciAtPnNldHBvbGljeS4KKworY3B1ZnJlcV9kcml2ZXIuYXR0ciAtCQlBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZgorCQkJCSJzdHJ1Y3QgZnJlcV9hdHRyIiB3aGljaCBhbGxvdyB0bworCQkJCWV4cG9ydCB2YWx1ZXMgdG8gc3lzZnMuCisKKworMS4yIFBlci1DUFUgSW5pdGlhbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW5ldmVyIGEgbmV3IENQVSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGRldmljZSBtb2RlbCwgb3IgYWZ0ZXIgdGhlCitjcHVmcmVxIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmLCB0aGUgcGVyLUNQVSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAKK2NwdWZyZXFfZHJpdmVyLmluaXQgaXMgY2FsbGVkLiBJdCB0YWtlcyBhIHN0cnVjdCBjcHVmcmVxX3BvbGljeQorKnBvbGljeSBhcyBhcmd1bWVudC4gV2hhdCB0byBkbyBub3c/CisKK0lmIG5lY2Vzc2FyeSwgYWN0aXZhdGUgdGhlIENQVWZyZXEgc3VwcG9ydCBvbiB5b3VyIENQVS4KKworVGhlbiwgdGhlIGRyaXZlciBtdXN0IGZpbGwgaW4gdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKK3BvbGljeS0+Y3B1aW5mby5taW5fZnJlcSBfYW5kXworcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxIC0JdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZnJlcXVlbmN5IAorCQkJCShpbiBrSHopIHdoaWNoIGlzIHN1cHBvcnRlZCBieSAKKwkJCQl0aGlzIENQVQorcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSAgIHRoZSB0aW1lIGl0IHRha2VzIG9uIHRoaXMgQ1BVIHRvCisJCQkJc3dpdGNoIGJldHdlZW4gdHdvIGZyZXF1ZW5jaWVzIChpZgorCQkJCWFwcHJvcHJpYXRlLCBlbHNlIHNwZWNpZnkKKwkJCQlDUFVGUkVRX0VURVJOQUwpCisKK3BvbGljeS0+Y3VyCQkJVGhlIGN1cnJlbnQgb3BlcmF0aW5nIGZyZXF1ZW5jeSBvZgorCQkJCXRoaXMgQ1BVIChpZiBhcHByb3ByaWF0ZSkKK3BvbGljeS0+bWluLCAKK3BvbGljeS0+bWF4LCAKK3BvbGljeS0+cG9saWN5IGFuZCwgaWYgbmVjZXNzYXJ5LAorcG9saWN5LT5nb3Zlcm5vcgkJbXVzdCBjb250YWluIHRoZSAiZGVmYXVsdCBwb2xpY3kiIGZvcgorCQkJCXRoaXMgQ1BVLiBBIGZldyBtb21lbnRzIGxhdGVyLAorCQkJCWNwdWZyZXFfZHJpdmVyLnZlcmlmeSBhbmQgZWl0aGVyCisJCQkJY3B1ZnJlcV9kcml2ZXIuc2V0cG9saWN5IG9yCisJCQkJY3B1ZnJlcV9kcml2ZXIudGFyZ2V0IGlzIGNhbGxlZCB3aXRoCisJCQkJdGhlc2UgdmFsdWVzLgorCitGb3Igc2V0dGluZyBzb21lIG9mIHRoZXNlIHZhbHVlcywgdGhlIGZyZXF1ZW5jeSB0YWJsZSBoZWxwZXJzIG1pZ2h0IGJlCitoZWxwZnVsLiBTZWUgdGhlIHNlY3Rpb24gMiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVtLgorCisKKzEuMyB2ZXJpZnkKKy0tLS0tLS0tLS0tLQorCitXaGVuIHRoZSB1c2VyIGRlY2lkZXMgYSBuZXcgcG9saWN5IChjb25zaXN0aW5nIG9mCisicG9saWN5LGdvdmVybm9yLG1pbixtYXgiKSBzaGFsbCBiZSBzZXQsIHRoaXMgcG9saWN5IG11c3QgYmUgdmFsaWRhdGVkCitzbyB0aGF0IGluY29tcGF0aWJsZSB2YWx1ZXMgY2FuIGJlIGNvcnJlY3RlZC4gRm9yIHZlcmlmeWluZyB0aGVzZQordmFsdWVzLCBhIGZyZXF1ZW5jeSB0YWJsZSBoZWxwZXIgYW5kL29yIHRoZQorY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQKK2ludCBtaW5fZnJlcSwgdW5zaWduZWQgaW50IG1heF9mcmVxKSBmdW5jdGlvbiBtaWdodCBiZSBoZWxwZnVsLiBTZWUKK3NlY3Rpb24gMiBmb3IgZGV0YWlscyBvbiBmcmVxdWVuY3kgdGFibGUgaGVscGVycy4KKworWW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYXQgbGVhc3Qgb25lIHZhbGlkIGZyZXF1ZW5jeSAob3Igb3BlcmF0aW5nCityYW5nZSkgaXMgd2l0aGluIHBvbGljeS0+bWluIGFuZCBwb2xpY3ktPm1heC4gSWYgbmVjZXNzYXJ5LCBpbmNyZWFzZQorcG9saWN5LT5tYXggZmlyc3QsIGFuZCBvbmx5IGlmIHRoaXMgaXMgbm8gc29sdXRpb24sIGRlY3JlYXNlIHBvbGljeS0+bWluLgorCisKKzEuNCB0YXJnZXQgb3Igc2V0cG9saWN5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb3N0IGNwdWZyZXEgZHJpdmVycyBvciBldmVuIG1vc3QgY3B1IGZyZXF1ZW5jeSBzY2FsaW5nIGFsZ29yaXRobXMgCitvbmx5IGFsbG93IHRoZSBDUFUgdG8gYmUgc2V0IHRvIG9uZSBmcmVxdWVuY3kuIEZvciB0aGVzZSwgeW91IHVzZSB0aGUKKy0+dGFyZ2V0IGNhbGwuCisKK1NvbWUgY3B1ZnJlcS1jYXBhYmxlIHByb2Nlc3NvcnMgc3dpdGNoIHRoZSBmcmVxdWVuY3kgYmV0d2VlbiBjZXJ0YWluCitsaW1pdHMgb24gdGhlaXIgb3duLiBUaGVzZSBzaGFsbCB1c2UgdGhlIC0+c2V0cG9saWN5IGNhbGwKKworCisxLjQuIHRhcmdldAorLS0tLS0tLS0tLS0tLQorCitUaGUgdGFyZ2V0IGNhbGwgaGFzIHRocmVlIGFyZ3VtZW50czogc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCit1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXF1ZW5jeSwgdW5zaWduZWQgaW50IHJlbGF0aW9uLgorCitUaGUgQ1BVZnJlcSBkcml2ZXIgbXVzdCBzZXQgdGhlIG5ldyBmcmVxdWVuY3kgd2hlbiBjYWxsZWQgaGVyZS4gVGhlCithY3R1YWwgZnJlcXVlbmN5IG11c3QgYmUgZGV0ZXJtaW5lZCB1c2luZyB0aGUgZm9sbG93aW5nIHJ1bGVzOgorCistIGtlZXAgY2xvc2UgdG8gInRhcmdldF9mcmVxIgorLSBwb2xpY3ktPm1pbiA8PSBuZXdfZnJlcSA8PSBwb2xpY3ktPm1heCAoVEhJUyBNVVNUIEJFIFZBTElEISEhKQorLSBpZiByZWxhdGlvbj09Q1BVRlJFUV9SRUxfTCwgdHJ5IHRvIHNlbGVjdCBhIG5ld19mcmVxIGhpZ2hlciB0aGFuIG9yIGVxdWFsCisgIHRhcmdldF9mcmVxLiAoIkwgZm9yIGxvd2VzdCwgYnV0IG5vIGxvd2VyIHRoYW4iKQorLSBpZiByZWxhdGlvbj09Q1BVRlJFUV9SRUxfSCwgdHJ5IHRvIHNlbGVjdCBhIG5ld19mcmVxIGxvd2VyIHRoYW4gb3IgZXF1YWwKKyAgdGFyZ2V0X2ZyZXEuICgiSCBmb3IgaGlnaGVzdCwgYnV0IG5vIGhpZ2hlciB0aGFuIikKKworSGVyZSBhZ2FpbiB0aGUgZnJlcXVlbmN5IHRhYmxlIGhlbHBlciBtaWdodCBhc3Npc3QgeW91IC0gc2VlIHNlY3Rpb24gMworZm9yIGRldGFpbHMuCisKKworMS41IHNldHBvbGljeQorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzZXRwb2xpY3kgY2FsbCBvbmx5IHRha2VzIGEgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgYXMKK2FyZ3VtZW50LiBZb3UgbmVlZCB0byBzZXQgdGhlIGxvd2VyIGxpbWl0IG9mIHRoZSBpbi1wcm9jZXNzb3Igb3IKK2luLWNoaXBzZXQgZHluYW1pYyBmcmVxdWVuY3kgc3dpdGNoaW5nIHRvIHBvbGljeS0+bWluLCB0aGUgdXBwZXIgbGltaXQKK3RvIHBvbGljeS0+bWF4LCBhbmQgLWlmIHN1cHBvcnRlZC0gc2VsZWN0IGEgcGVyZm9ybWFuY2Utb3JpZW50ZWQKK3NldHRpbmcgd2hlbiBwb2xpY3ktPnBvbGljeSBpcyBDUFVGUkVRX1BPTElDWV9QRVJGT1JNQU5DRSwgYW5kIGEKK3Bvd2Vyc2F2aW5nLW9yaWVudGVkIHNldHRpbmcgd2hlbiBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkUuIEFsc28gY2hlY2sKK3RoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKKworCisKKzIuIEZyZXF1ZW5jeSBUYWJsZSBIZWxwZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBcyBtb3N0IGNwdWZyZXEgcHJvY2Vzc29ycyBvbmx5IGFsbG93IGZvciBiZWluZyBzZXQgdG8gYSBmZXcgc3BlY2lmaWMKK2ZyZXF1ZW5jaWVzLCBhICJmcmVxdWVuY3kgdGFibGUiIHdpdGggc29tZSBmdW5jdGlvbnMgbWlnaHQgYXNzaXN0IGluCitzb21lIHdvcmsgb2YgdGhlIHByb2Nlc3NvciBkcml2ZXIuIFN1Y2ggYSAiZnJlcXVlbmN5IHRhYmxlIiBjb25zaXN0cworb2YgYW4gYXJyYXkgb2Ygc3RydWN0IGNwdWZyZXFfZnJlcV90YWJsZSBlbnRyaWVzLCB3aXRoIGFueSB2YWx1ZSBpbgorImluZGV4IiB5b3Ugd2FudCB0byB1c2UsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgaW4KKyJmcmVxdWVuY3kiLiBBdCB0aGUgZW5kIG9mIHRoZSB0YWJsZSwgeW91IG5lZWQgdG8gYWRkIGEKK2NwdWZyZXFfZnJlcV90YWJsZSBlbnRyeSB3aXRoIGZyZXF1ZW5jeSBzZXQgdG8gQ1BVRlJFUV9UQUJMRV9FTkQuIEFuZAoraWYgeW91IHdhbnQgdG8gc2tpcCBvbmUgZW50cnkgaW4gdGhlIHRhYmxlLCBzZXQgdGhlIGZyZXF1ZW5jeSB0byAKK0NQVUZSRVFfRU5UUllfSU5WQUxJRC4gVGhlIGVudHJpZXMgZG9uJ3QgbmVlZCB0byBiZSBpbiBhc2NlbmRpbmcKK29yZGVyLgorCitCeSBjYWxsaW5nIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8oc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkJCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUpOwordGhlIGNwdWluZm8ubWluX2ZyZXEgYW5kIGNwdWluZm8ubWF4X2ZyZXEgdmFsdWVzIGFyZSBkZXRlY3RlZCwgYW5kCitwb2xpY3ktPm1pbiBhbmQgcG9saWN5LT5tYXggYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZXMuIFRoaXMgaXMKK2hlbHBmdWwgZm9yIHRoZSBwZXItQ1BVIGluaXRpYWxpemF0aW9uIHN0YWdlLgorCitpbnQgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlKTsKK2Fzc3VyZXMgdGhhdCBhdCBsZWFzdCBvbmUgdmFsaWQgZnJlcXVlbmN5IGlzIHdpdGhpbiBwb2xpY3ktPm1pbiBhbmQKK3BvbGljeS0+bWF4LCBhbmQgYWxsIG90aGVyIGNyaXRlcmlhIGFyZSBtZXQuIFRoaXMgaXMgaGVscGZ1bCBmb3IgdGhlCistPnZlcmlmeSBjYWxsLgorCitpbnQgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWxhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICppbmRleCk7CisKK2lzIHRoZSBjb3JyZXNwb25kaW5nIGZyZXF1ZW5jeSB0YWJsZSBoZWxwZXIgZm9yIHRoZSAtPnRhcmdldAorc3RhZ2UuIEp1c3QgcGFzcyB0aGUgdmFsdWVzIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgdW5zaWduZWQgaW50CitpbmRleCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGZyZXF1ZW5jeSB0YWJsZSBlbnRyeSB3aGljaCBjb250YWlucwordGhlIGZyZXF1ZW5jeSB0aGUgQ1BVIHNoYWxsIGJlIHNldCB0by4gUExFQVNFIE5PVEU6IFRoaXMgaXMgbm90IHRoZQorImluZGV4IiB3aGljaCBpcyBpbiB0aGlzIGNwdWZyZXFfdGFibGVfZW50cnkuaW5kZXgsIGJ1dCBpbnN0ZWFkCitjcHVmcmVxX3RhYmxlW2luZGV4XS4gU28sIHRoZSBuZXcgZnJlcXVlbmN5IGlzCitjcHVmcmVxX3RhYmxlW2luZGV4XS5mcmVxdWVuY3ksIGFuZCB0aGUgdmFsdWUgeW91IHN0b3JlZCBpbnRvIHRoZQorZnJlcXVlbmN5IHRhYmxlICJpbmRleCIgZmllbGQgaXMKK2NwdWZyZXFfdGFibGVbaW5kZXhdLmluZGV4LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2NwdWZyZXEtbmZvcmNlMi50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2NwdWZyZXEtbmZvcmNlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4ODMzNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvY3B1ZnJlcS1uZm9yY2UyLnR4dApAQCAtMCwwICsxLDE5IEBACisKK1RoZSBjcHVmcmVxLW5mb3JjZTIgZHJpdmVyIGNoYW5nZXMgdGhlIEZTQiBvbiBuVmlkaWEgbkZvcmNlMiBwbGF0dGZvcm1zLgorCitUaGlzIHdvcmtzIGJldHRlciB0aGFuIG9uIG90aGVyIHBsYXR0Zm9ybXMsIGJlY2F1c2UgdGhlIEZTQiBvZiB0aGUgQ1BVCitjYW4gYmUgY29udHJvbGxlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIFBDSS9BR1AgY2xvY2suCisKK1RoZSBtb2R1bGUgaGFzIHR3byBvcHRpb25zOgorCisJZmlkOiAJIG11bHRpcGxpZXIgKiAxMCAoZm9yIGV4YW1wbGUgOC41ID0gODUpCisJbWluX2ZzYjogbWluaW11bSBGU0IKKworSWYgbm90IHNldCwgZmlkIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgY3VycmVudCBDUFUgc3BlZWQgYW5kIHRoZSBGU0IuCittaW5fZnNiIGRlZmF1bHRzIHRvIEZTQiBhdCBib290IHRpbWUgLSA1MCBNSHouCisKK0lNUE9SVEFOVDogVGhlIGF2YWlsYWJsZSByYW5nZSBpcyBsaW1pdGVkIGRvd253YXJkcyEKKyAgICAgICAgICAgQWxzbyB0aGUgbWluaW11bSBhdmFpbGFibGUgRlNCIGNhbiBkaWZmZXIsIGZvciBzeXN0ZW1zIAorICAgICAgICAgICBib290aW5nIHdpdGggMjAwIE1IeiwgMTUwIHNob3VsZCBhbHdheXMgd29yay4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1NDgxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dApAQCAtMCwwICsxLDE1NSBAQAorICAgICBDUFUgZnJlcXVlbmN5IGFuZCB2b2x0YWdlIHNjYWxpbmcgY29kZSBpbiB0aGUgTGludXgoVE0pIGtlcm5lbAorCisKKwkJICAgICAgICAgTCBpIG4gdSB4ICAgIEMgUCBVIEYgciBlIHEKKworCQkgICAgICBDIFAgVSBGIHIgZSBxICAgRyBvIHYgZSByIG4gbyByIHMKKworCQkgICAtIGluZm9ybWF0aW9uIGZvciB1c2VycyBhbmQgZGV2ZWxvcGVycyAtCisKKworCQkgICAgRG9taW5payBCcm9kb3dza2kgIDxsaW51eEBicm9kby5kZT4KKworCisKKyAgIENsb2NrIHNjYWxpbmcgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBDUFVzIG9uIHRoZQorICAgIGZseS4gVGhpcyBpcyBhIG5pY2UgbWV0aG9kIHRvIHNhdmUgYmF0dGVyeSBwb3dlciwgYmVjYXVzZSB0aGUgbG93ZXIKKyAgICAgICAgICAgIHRoZSBjbG9jayBzcGVlZCwgdGhlIGxlc3MgcG93ZXIgdGhlIENQVSBjb25zdW1lcy4KKworCitDb250ZW50czoKKy0tLS0tLS0tLQorMS4gICBXaGF0IGlzIGEgQ1BVRnJlcSBHb3Zlcm5vcj8KKworMi4gICBHb3Zlcm5vcnMgSW4gdGhlIExpbnV4IEtlcm5lbAorMi4xICBQZXJmb3JtYW5jZQorMi4yICBQb3dlcnNhdmUKKzIuMyAgVXNlcnNwYWNlCisKKzMuICAgVGhlIEdvdmVybm9yIEludGVyZmFjZSBpbiB0aGUgQ1BVZnJlcSBDb3JlCisKKworCisxLiBXaGF0IElzIEEgQ1BVRnJlcSBHb3Zlcm5vcj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNb3N0IGNwdWZyZXEgZHJpdmVycyAoaW4gZmFjdCwgYWxsIGV4Y2VwdCBvbmUsIGxvbmdydW4pIG9yIGV2ZW4gbW9zdAorY3B1IGZyZXF1ZW5jeSBzY2FsaW5nIGFsZ29yaXRobXMgb25seSBvZmZlciB0aGUgQ1BVIHRvIGJlIHNldCB0byBvbmUKK2ZyZXF1ZW5jeS4gSW4gb3JkZXIgdG8gb2ZmZXIgZHluYW1pYyBmcmVxdWVuY3kgc2NhbGluZywgdGhlIGNwdWZyZXEKK2NvcmUgbXVzdCBiZSBhYmxlIHRvIHRlbGwgdGhlc2UgZHJpdmVycyBvZiBhICJ0YXJnZXQgZnJlcXVlbmN5Ii4gU28KK3RoZXNlIHNwZWNpZmljIGRyaXZlcnMgd2lsbCBiZSB0cmFuc2Zvcm1lZCB0byBvZmZlciBhICItPnRhcmdldCIKK2NhbGwgaW5zdGVhZCBvZiB0aGUgZXhpc3RpbmcgIi0+c2V0cG9saWN5IiBjYWxsLiBGb3IgImxvbmdydW4iLCBhbGwKK3N0YXlzIHRoZSBzYW1lLCB0aG91Z2guCisKK0hvdyB0byBkZWNpZGUgd2hhdCBmcmVxdWVuY3kgd2l0aGluIHRoZSBDUFVmcmVxIHBvbGljeSBzaG91bGQgYmUgdXNlZD8KK1RoYXQncyBkb25lIHVzaW5nICJjcHVmcmVxIGdvdmVybm9ycyIuIFR3byBhcmUgYWxyZWFkeSBpbiB0aGlzIHBhdGNoCistLSB0aGV5J3JlIHRoZSBhbHJlYWR5IGV4aXN0aW5nICJwb3dlcnNhdmUiIGFuZCAicGVyZm9ybWFuY2UiIHdoaWNoCitzZXQgdGhlIGZyZXF1ZW5jeSBzdGF0aWNhbGx5IHRvIHRoZSBsb3dlc3Qgb3IgaGlnaGVzdCBmcmVxdWVuY3ksCityZXNwZWN0aXZlbHkuIEF0IGxlYXN0IHR3byBtb3JlIHN1Y2ggZ292ZXJub3JzIHdpbGwgYmUgcmVhZHkgZm9yCithZGRpdGlvbiBpbiB0aGUgbmVhciBmdXR1cmUsIGJ1dCBsaWtlbHkgbWFueSBtb3JlIGFzIHRoZXJlIGFyZSB2YXJpb3VzCitkaWZmZXJlbnQgdGhlb3JpZXMgYW5kIG1vZGVscyBhYm91dCBkeW5hbWljIGZyZXF1ZW5jeSBzY2FsaW5nCithcm91bmQuIFVzaW5nIHN1Y2ggYSBnZW5lcmljIGludGVyZmFjZSBhcyBjcHVmcmVxIG9mZmVycyB0byBzY2FsaW5nCitnb3Zlcm5vcnMsIHRoZXNlIGNhbiBiZSB0ZXN0ZWQgZXh0ZW5zaXZlbHksIGFuZCB0aGUgYmVzdCBvbmUgY2FuIGJlCitzZWxlY3RlZCBmb3IgZWFjaCBzcGVjaWZpYyB1c2UuCisKK0Jhc2ljYWxseSwgaXQncyB0aGUgZm9sbG93aW5nIGZsb3cgZ3JhcGg6CisKK0NQVSBjYW4gYmUgc2V0IHRvIHN3aXRjaCBpbmRlcGVuZGV0bHkJIHwJICAgQ1BVIGNhbiBvbmx5IGJlIHNldAorICAgICAgd2l0aGluIHNwZWNpZmljICJsaW1pdHMiCQkgfCAgICAgICB0byBzcGVjaWZpYyBmcmVxdWVuY2llcworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ1BVZnJlcSBwb2xpY3kiCisJCWNvbnNpc3RzIG9mIGZyZXF1ZW5jeSBsaW1pdHMgKHBvbGljeS0+e21pbixtYXh9KQorICAJCSAgICAgYW5kIENQVWZyZXEgZ292ZXJub3IgdG8gYmUgdXNlZAorCQkJIC8JCSAgICAgIFwKKwkJCS8JCSAgICAgICBcCisJCSAgICAgICAvCQkgICAgICAgdGhlIGNwdWZyZXEgZ292ZXJub3IgZGVjaWRlcworCQkgICAgICAvCQkJICAgICAgIChkeW5hbWljYWxseSBvciBzdGF0aWNhbGx5KQorCQkgICAgIC8JCQkgICAgICAgd2hhdCB0YXJnZXRfZnJlcSB0byBzZXQgd2l0aGluCisJCSAgICAvCQkJICAgICAgIHRoZSBsaW1pdHMgb2YgcG9saWN5LT57bWluLG1heH0KKwkJICAgLwkJCSAgICAgICAgICAgIFwKKwkJICAvCQkJCSAgICAgXAorCVVzaW5nIHRoZSAtPnNldHBvbGljeSBjYWxsLAkJIFVzaW5nIHRoZSAtPnRhcmdldCBjYWxsLAorCSAgICB0aGUgbGltaXRzIGFuZCB0aGUJCQkgIHRoZSBmcmVxdWVuY3kgY2xvc2VzdAorCSAgICAgInBvbGljeSIgaXMgc2V0LgkJCSAgdG8gdGFyZ2V0X2ZyZXEgaXMgc2V0LgorCQkJCQkJICBJdCBpcyBhc3N1cmVkIHRoYXQgaXQKKwkJCQkJCSAgaXMgd2l0aGluIHBvbGljeS0+e21pbixtYXh9CisKKworMi4gR292ZXJub3JzIEluIHRoZSBMaW51eCBLZXJuZWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzIuMSBQZXJmb3JtYW5jZQorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBDUFVmcmVxIGdvdmVybm9yICJwZXJmb3JtYW5jZSIgc2V0cyB0aGUgQ1BVIHN0YXRpY2FsbHkgdG8gdGhlCitoaWdoZXN0IGZyZXF1ZW5jeSB3aXRoaW4gdGhlIGJvcmRlcnMgb2Ygc2NhbGluZ19taW5fZnJlcSBhbmQKK3NjYWxpbmdfbWF4X2ZyZXEuCisKKworMi4xIFBvd2Vyc2F2ZQorLS0tLS0tLS0tLS0tLQorCitUaGUgQ1BVZnJlcSBnb3Zlcm5vciAicG93ZXJzYXZlIiBzZXRzIHRoZSBDUFUgc3RhdGljYWxseSB0byB0aGUKK2xvd2VzdCBmcmVxdWVuY3kgd2l0aGluIHRoZSBib3JkZXJzIG9mIHNjYWxpbmdfbWluX2ZyZXEgYW5kCitzY2FsaW5nX21heF9mcmVxLgorCisKKzIuMiBVc2Vyc3BhY2UKKy0tLS0tLS0tLS0tLS0KKworVGhlIENQVWZyZXEgZ292ZXJub3IgInVzZXJzcGFjZSIgYWxsb3dzIHRoZSB1c2VyLCBvciBhbnkgdXNlcnNwYWNlCitwcm9ncmFtIHJ1bm5pbmcgd2l0aCBVSUQgInJvb3QiLCB0byBzZXQgdGhlIENQVSB0byBhIHNwZWNpZmljIGZyZXF1ZW5jeQorYnkgbWFraW5nIGEgc3lzZnMgZmlsZSAic2NhbGluZ19zZXRzcGVlZCIgYXZhaWxhYmxlIGluIHRoZSBDUFUtZGV2aWNlCitkaXJlY3RvcnkuCisKKworCiszLiBUaGUgR292ZXJub3IgSW50ZXJmYWNlIGluIHRoZSBDUFVmcmVxIENvcmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIG5ldyBnb3Zlcm5vciBtdXN0IHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBDUFVmcmVxIGNvcmUgdXNpbmcKKyJjcHVmcmVxX3JlZ2lzdGVyX2dvdmVybm9yIi4gVGhlIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yLCB3aGljaCBoYXMgdG8KK2JlIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLCBtdXN0IGNvbnRhaW4gdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKK2dvdmVybm9yLT5uYW1lIC0JICAgIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgZ292ZXJub3IKK2dvdmVybm9yLT5nb3Zlcm5vciAtCSAgICBUaGUgZ292ZXJub3IgY2FsbGJhY2sgZnVuY3Rpb24KK2dvdmVybm9yLT5vd25lcgktCSAgICAuVEhJU19NT0RVTEUgZm9yIHRoZSBnb3Zlcm5vciBtb2R1bGUgKGlmIAorCQkJICAgIGFwcHJvcHJpYXRlKQorCitUaGUgZ292ZXJub3ItPmdvdmVybm9yIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IChvciB0by1iZS1zZXQpCitjcHVmcmVxX3BvbGljeSBzdHJ1Y3QgZm9yIHRoYXQgQ1BVLCBhbmQgYW4gdW5zaWduZWQgaW50IGV2ZW50LiBUaGUKK2ZvbGxvd2luZyBldmVudHMgYXJlIGN1cnJlbnRseSBkZWZpbmVkOgorCitDUFVGUkVRX0dPVl9TVEFSVDogICBUaGlzIGdvdmVybm9yIHNoYWxsIHN0YXJ0IGl0cyBkdXR5IGZvciB0aGUgQ1BVCisJCSAgICAgcG9saWN5LT5jcHUKK0NQVUZSRVFfR09WX1NUT1A6ICAgIFRoaXMgZ292ZXJub3Igc2hhbGwgZW5kIGl0cyBkdXR5IGZvciB0aGUgQ1BVCisJCSAgICAgcG9saWN5LT5jcHUKK0NQVUZSRVFfR09WX0xJTUlUUzogIFRoZSBsaW1pdHMgZm9yIENQVSBwb2xpY3ktPmNwdSBoYXZlIGNoYW5nZWQgdG8KKwkJICAgICBwb2xpY3ktPm1pbiBhbmQgcG9saWN5LT5tYXguCisKK0lmIHlvdSBuZWVkIG90aGVyICJldmVudHMiIGV4dGVybmFsbHkgb2YgeW91ciBkcml2ZXIsIF9vbmx5XyB1c2UgdGhlCitjcHVmcmVxX2dvdmVybm9yX2wodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGV2ZW50KSBjYWxsIHRvIHRoZQorQ1BVZnJlcSBjb3JlIHRvIGVuc3VyZSBwcm9wZXIgbG9ja2luZy4KKworCitUaGUgQ1BVZnJlcSBnb3Zlcm5vciBtYXkgY2FsbCB0aGUgQ1BVIHByb2Nlc3NvciBkcml2ZXIgdXNpbmcgb25lIG9mCit0aGVzZSB0d28gZnVuY3Rpb25zOgorCitpbnQgY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKTsKKworaW50IF9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWxhdGlvbik7CisKK3RhcmdldF9mcmVxIG11c3QgYmUgd2l0aGluIHBvbGljeS0+bWluIGFuZCBwb2xpY3ktPm1heCwgb2YgY291cnNlLgorV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucz8gV2hlbiB5b3VyIGdvdmVybm9yCitzdGlsbCBpcyBpbiBhIGRpcmVjdCBjb2RlIHBhdGggb2YgYSBjYWxsIHRvIGdvdmVybm9yLT5nb3Zlcm5vciwgdGhlCitwZXItQ1BVIGNwdWZyZXEgbG9jayBpcyBzdGlsbCBoZWxkIGluIHRoZSBjcHVmcmVxIGNvcmUsIGFuZCB0aGVyZSdzCitubyBuZWVkIHRvIGxvY2sgaXQgYWdhaW4gKGluIGZhY3QsIHRoaXMgd291bGQgY2F1c2UgYSBkZWFkbG9jaykuIFNvCit1c2UgX19jcHVmcmVxX2RyaXZlcl90YXJnZXQgb25seSBpbiB0aGVzZSBjYXNlcy4gSW4gYWxsIG90aGVyIGNhc2VzIAorKGZvciBleGFtcGxlLCB3aGVuIHRoZXJlJ3MgYSAiZGFlbW9uaXplZCIgZnVuY3Rpb24gdGhhdCB3YWtlcyB1cCAKK2V2ZXJ5IHNlY29uZCksIHVzZSBjcHVmcmVxX2RyaXZlcl90YXJnZXQgdG8gbG9jayB0aGUgY3B1ZnJlcSBwZXItQ1BVCitsb2NrIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBwYXNzZWQgdG8gdGhlIGNwdWZyZXEgcHJvY2Vzc29yIGRyaXZlci4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2luZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDA5ODA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbmRleC50eHQKQEAgLTAsMCArMSw1NiBAQAorICAgICBDUFUgZnJlcXVlbmN5IGFuZCB2b2x0YWdlIHNjYWxpbmcgY29kZSBpbiB0aGUgTGludXgoVE0pIGtlcm5lbAorCisKKwkJICAgICAgICAgTCBpIG4gdSB4ICAgIEMgUCBVIEYgciBlIHEKKworCisKKworCQkgICAgRG9taW5payBCcm9kb3dza2kgIDxsaW51eEBicm9kby5kZT4KKworCisKKyAgIENsb2NrIHNjYWxpbmcgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBDUFVzIG9uIHRoZQorICAgIGZseS4gVGhpcyBpcyBhIG5pY2UgbWV0aG9kIHRvIHNhdmUgYmF0dGVyeSBwb3dlciwgYmVjYXVzZSB0aGUgbG93ZXIKKyAgICAgICAgICAgIHRoZSBjbG9jayBzcGVlZCwgdGhlIGxlc3MgcG93ZXIgdGhlIENQVSBjb25zdW1lcy4KKworCisKK0RvY3VtZW50cyBpbiB0aGlzIGRpcmVjdG9yeToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvcmUudHh0CS0JR2VuZXJhbCBkZXNjcmlwdGlvbiBvZiB0aGUgQ1BVRnJlcSBjb3JlIGFuZAorCQkJb2YgQ1BVRnJlcSBub3RpZmllcnMKKworY3B1LWRyaXZlcnMudHh0IC0JSG93IHRvIGltcGxlbWVudCBhIG5ldyBjcHVmcmVxIHByb2Nlc3NvciBkcml2ZXIKKworZ292ZXJub3JzLnR4dAktCVdoYXQgYXJlIGNwdWZyZXEgZ292ZXJub3JzIGFuZCBob3cgdG8KKwkJCWltcGxlbWVudCB0aGVtPworCitpbmRleC50eHQJLQlGaWxlIGluZGV4LCBNYWlsaW5nIGxpc3QgYW5kIExpbmtzICh0aGlzIGRvY3VtZW50KQorCit1c2VyLWd1aWRlLnR4dAktCVVzZXIgR3VpZGUgdG8gQ1BVRnJlcQorCisKK01haWxpbmcgTGlzdAorLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBhIENQVSBmcmVxdWVuY3kgY2hhbmdpbmcgQ1ZTIGNvbW1pdCBhbmQgZ2VuZXJhbCBsaXN0IHdoZXJlCit5b3UgY2FuIHJlcG9ydCBidWdzLCBwcm9ibGVtcyBvciBzdWJtaXQgcGF0Y2hlcy4gVG8gcG9zdCBhIG1lc3NhZ2UsCitzZW5kIGFuIGVtYWlsIHRvIGNwdWZyZXFAbGlzdHMubGludXgub3JnLnVrLCB0byBzdWJzY3JpYmUgZ28gdG8KK2h0dHA6Ly9saXN0cy5saW51eC5vcmcudWsvbWFpbG1hbi9saXN0aW5mby9jcHVmcmVxLiBQcmV2aW91cyBwb3N0IHRvIHRoZQorbWFpbGluZyBsaXN0IGFyZSBhdmFpbGFibGUgdG8gc3Vic2NyaWJlcnMgYXQKK2h0dHA6Ly9saXN0cy5saW51eC5vcmcudWsvbWFpbG1hbi9wcml2YXRlL2NwdWZyZXEvLgorCisKK0xpbmtzCistLS0tLQordGhlIEZUUCBhcmNoaXZlczoKKyogZnRwOi8vZnRwLmxpbnV4Lm9yZy51ay9wdWIvbGludXgvY3B1ZnJlcS8KKworaG93IHRvIGFjY2VzcyB0aGUgQ1ZTIHJlcG9zaXRvcnk6CisqIGh0dHA6Ly9jdnMuYXJtLmxpbnV4Lm9yZy51ay8KKwordGhlIENQVUZyZXEgTWFpbGluZyBsaXN0OgorKiBodHRwOi8vbGlzdHMubGludXgub3JnLnVrL21haWxtYW4vbGlzdGluZm8vY3B1ZnJlcQorCitDbG9jayBhbmQgdm9sdGFnZSBzY2FsaW5nIGZvciB0aGUgU0EtMTEwMDoKKyogaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvcHJvamVjdHMvc2NhbGluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlZGMwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKQEAgLTAsMCArMSwxODUgQEAKKyAgICAgQ1BVIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSBzY2FsaW5nIGNvZGUgaW4gdGhlIExpbnV4KFRNKSBrZXJuZWwKKworCisJCSAgICAgICAgIEwgaSBuIHUgeCAgICBDIFAgVSBGIHIgZSBxCisKKwkJCSAgICAgVSBTIEUgUiAgIEcgVSBJIEQgRQorCisKKwkJICAgIERvbWluaWsgQnJvZG93c2tpICA8bGludXhAYnJvZG8uZGU+CisKKworCisgICBDbG9jayBzY2FsaW5nIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjbG9jayBzcGVlZCBvZiB0aGUgQ1BVcyBvbiB0aGUKKyAgICBmbHkuIFRoaXMgaXMgYSBuaWNlIG1ldGhvZCB0byBzYXZlIGJhdHRlcnkgcG93ZXIsIGJlY2F1c2UgdGhlIGxvd2VyCisgICAgICAgICAgICB0aGUgY2xvY2sgc3BlZWQsIHRoZSBsZXNzIHBvd2VyIHRoZSBDUFUgY29uc3VtZXMuCisKKworQ29udGVudHM6CistLS0tLS0tLS0KKzEuIFN1cHBvcnRlZCBBcmNoaXRlY3R1cmVzIGFuZCBQcm9jZXNzb3JzCisxLjEgQVJNCisxLjIgeDg2CisxLjMgc3BhcmM2NAorMS40IHBwYworMS41IFN1cGVySAorCisyLiAiUG9saWN5IiAvICJHb3Zlcm5vciI/CisyLjEgUG9saWN5CisyLjIgR292ZXJub3IKKworMy4gSG93IHRvIGNoYW5nZSB0aGUgQ1BVIGNwdWZyZXEgcG9saWN5IGFuZC9vciBzcGVlZAorMy4xIFByZWZlcnJlZCBpbnRlcmZhY2U6IHN5c2ZzCiszLjIgRGVwcmVjYXRlZCBpbnRlcmZhY2VzCisKKworCisxLiBTdXBwb3J0ZWQgQXJjaGl0ZWN0dXJlcyBhbmQgUHJvY2Vzc29ycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4xIEFSTQorLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIEFSTSBwcm9jZXNzb3JzIGFyZSBzdXBwb3J0ZWQgYnkgY3B1ZnJlcToKKworQVJNIEludGVncmF0b3IKK0FSTS1TQTExMDAKK0FSTS1TQTExMTAKKworCisxLjIgeDg2CistLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgcHJvY2Vzc29ycyBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUgYXJlIHN1cHBvcnRlZCBieSBjcHVmcmVxOgorCitBTUQgRWxhbiAtIFNDNDAwLCBTQzQxMAorQU1EIG1vYmlsZSBLNi0yKworQU1EIG1vYmlsZSBLNi0zKworQU1EIG1vYmlsZSBEdXJvbgorQU1EIG1vYmlsZSBBdGhsb24KK0FNRCBPcHRlcm9uCitBTUQgQXRobG9uIDY0CitDeXJpeCBNZWRpYSBHWG0KK0ludGVsIG1vYmlsZSBQSUlJIGFuZCBJbnRlbCBtb2JpbGUgUElJSS1NIG9uIGNlcnRhaW4gY2hpcHNldHMKK0ludGVsIFBlbnRpdW0gNCwgSW50ZWwgWGVvbgorSW50ZWwgUGVudGl1bSBNIChDZW50cmlubykKK05hdGlvbmFsIFNlbWljb25kdWN0b3JzIEdlb2RlIEdYCitUcmFuc21ldGEgQ3J1c29lCitUcmFuc21ldGEgRWZmaWNlb24KK1ZJQSBDeXJpeCAzIC8gQzMKK3ZhcmlvdXMgcHJvY2Vzc29ycyBvbiBzb21lIEFDUEkgMi4wLWNvbXBhdGlibGUgc3lzdGVtcyBbKl0KKworWypdIE9ubHkgaWYgIkFDUEkgUHJvY2Vzc29yIFBlcmZvcm1hbmNlIFN0YXRlcyIgYXJlIGF2YWlsYWJsZQordG8gdGhlIEFDUEk8LT5CSU9TIGludGVyZmFjZS4KKworCisxLjMgc3BhcmM2NAorLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBwcm9jZXNzb3JzIGZvciB0aGUgc3BhcmM2NCBhcmNoaXRlY3R1cmUgYXJlIHN1cHBvcnRlZCBieQorY3B1ZnJlcToKKworVWx0cmFTUEFSQy1JSUkKKworCisxLjQgcHBjCistLS0tLS0tCisKK1NldmVyYWwgIlBvd2VyQm9vayIgYW5kICJpQm9vazIiIG5vdGVib29rcyBhcmUgc3VwcG9ydGVkLgorCisKKzEuNSBTdXBlckgKKy0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBTdXBlckggcHJvY2Vzc29ycyBhcmUgc3VwcG9ydGVkIGJ5IGNwdWZyZXE6CisKK1NILTMKK1NILTQKKworCisyLiAiUG9saWN5IiAvICJHb3Zlcm5vciIgPworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU29tZSBDUFUgZnJlcXVlbmN5IHNjYWxpbmctY2FwYWJsZSBwcm9jZXNzb3Igc3dpdGNoIGJldHdlZW4gdmFyaW91cworZnJlcXVlbmNpZXMgYW5kIG9wZXJhdGluZyB2b2x0YWdlcyAib24gdGhlIGZseSIgd2l0aG91dCBhbnkga2VybmVsIG9yCit1c2VyIGludm9sdmVtZW50LiBUaGlzIGd1YXJhbnRlZXMgdmVyeSBmYXN0IHN3aXRjaGluZyB0byBhIGZyZXF1ZW5jeQord2hpY2ggaXMgaGlnaCBlbm91Z2ggdG8gc2VydmUgdGhlIHVzZXIncyBuZWVkcywgYnV0IGxvdyBlbm91Z2ggdG8gc2F2ZQorcG93ZXIuCisKKworMi4xIFBvbGljeQorLS0tLS0tLS0tLQorCitPbiB0aGVzZSBzeXN0ZW1zLCBhbGwgeW91IGNhbiBkbyBpcyBzZWxlY3QgdGhlIGxvd2VyIGFuZCB1cHBlcgorZnJlcXVlbmN5IGxpbWl0IGFzIHdlbGwgYXMgd2hldGhlciB5b3Ugd2FudCBtb3JlIGFnZ3Jlc3NpdmUKK3Bvd2VyLXNhdmluZyBvciBtb3JlIGluc3RhbnRseSBhdmFpbGFibGUgcHJvY2Vzc2luZyBwb3dlci4KKworCisyLjIgR292ZXJub3IKKy0tLS0tLS0tLS0tLQorCitPbiBhbGwgb3RoZXIgY3B1ZnJlcSBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIGJvdW5kYXJpZXMgc3RpbGwgbmVlZCB0bworYmUgc2V0LiBUaGVuLCBhICJnb3Zlcm5vciIgbXVzdCBiZSBzZWxlY3RlZC4gU3VjaCBhICJnb3Zlcm5vciIgZGVjaWRlcword2hhdCBzcGVlZCB0aGUgcHJvY2Vzc29yIHNoYWxsIHJ1biB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuIE9uZSBzdWNoCisiZ292ZXJub3IiIGlzIHRoZSAidXNlcnNwYWNlIiBnb3Zlcm5vci4gVGhpcyBvbmUgYWxsb3dzIHRoZSB1c2VyIC0gb3IKK2EgeWV0LXRvLWltcGxlbWVudCB1c2Vyc3BhY2UgcHJvZ3JhbSAtIHRvIGRlY2lkZSB3aGF0IHNwZWNpZmljIHNwZWVkCit0aGUgcHJvY2Vzc29yIHNoYWxsIHJ1biBhdC4KKworCiszLiBIb3cgdG8gY2hhbmdlIHRoZSBDUFUgY3B1ZnJlcSBwb2xpY3kgYW5kL29yIHNwZWVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzMuMSBQcmVmZXJyZWQgSW50ZXJmYWNlOiBzeXNmcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBwcmVmZXJyZWQgaW50ZXJmYWNlIGlzIGxvY2F0ZWQgaW4gdGhlIHN5c2ZzIGZpbGVzeXN0ZW0uIElmIHlvdQorbW91bnRlZCBpdCBhdCAvc3lzLCB0aGUgY3B1ZnJlcSBpbnRlcmZhY2UgaXMgbG9jYXRlZCBpbiBhIHN1YmRpcmVjdG9yeQorImNwdWZyZXEiIHdpdGhpbiB0aGUgY3B1LWRldmljZSBkaXJlY3RvcnkKKyhlLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS8gZm9yIHRoZSBmaXJzdCBDUFUpLgorCitjcHVpbmZvX21pbl9mcmVxIDoJCXRoaXMgZmlsZSBzaG93cyB0aGUgbWluaW11bSBvcGVyYXRpbmcKKwkJCQlmcmVxdWVuY3kgdGhlIHByb2Nlc3NvciBjYW4gcnVuIGF0KGluIGtIeikgCitjcHVpbmZvX21heF9mcmVxIDoJCXRoaXMgZmlsZSBzaG93cyB0aGUgbWF4aW11bSBvcGVyYXRpbmcKKwkJCQlmcmVxdWVuY3kgdGhlIHByb2Nlc3NvciBjYW4gcnVuIGF0KGluIGtIeikgCitzY2FsaW5nX2RyaXZlciA6CQl0aGlzIGZpbGUgc2hvd3Mgd2hhdCBjcHVmcmVxIGRyaXZlciBpcworCQkJCXVzZWQgdG8gc2V0IHRoZSBmcmVxdWVuY3kgb24gdGhpcyBDUFUKKworc2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzIDoJdGhpcyBmaWxlIHNob3dzIHRoZSBDUFVmcmVxIGdvdmVybm9ycworCQkJCWF2YWlsYWJsZSBpbiB0aGlzIGtlcm5lbC4gWW91IGNhbiBzZWUgdGhlCisJCQkJY3VycmVudGx5IGFjdGl2YXRlZCBnb3Zlcm5vciBpbgorCitzY2FsaW5nX2dvdmVybm9yLAkJYW5kIGJ5ICJlY2hvaW5nIiB0aGUgbmFtZSBvZiBhbm90aGVyCisJCQkJZ292ZXJub3IgeW91IGNhbiBjaGFuZ2UgaXQuIFBsZWFzZSBub3RlCisJCQkJdGhhdCBzb21lIGdvdmVybm9ycyB3b24ndCBsb2FkIC0gdGhleSBvbmx5CisJCQkJd29yayBvbiBzb21lIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IKKwkJCQlwcm9jZXNzb3JzLgorc2NhbGluZ19taW5fZnJlcSBhbmQgCitzY2FsaW5nX21heF9mcmVxCQlzaG93IHRoZSBjdXJyZW50ICJwb2xpY3kgbGltaXRzIiAoaW4KKwkJCQlrSHopLiBCeSBlY2hvaW5nIG5ldyB2YWx1ZXMgaW50byB0aGVzZQorCQkJCWZpbGVzLCB5b3UgY2FuIGNoYW5nZSB0aGVzZSBsaW1pdHMuCisKKworSWYgeW91IGhhdmUgc2VsZWN0ZWQgdGhlICJ1c2Vyc3BhY2UiIGdvdmVybm9yIHdoaWNoIGFsbG93cyB5b3UgdG8KK3NldCB0aGUgQ1BVIG9wZXJhdGluZyBmcmVxdWVuY3kgdG8gYSBzcGVjaWZpYyB2YWx1ZSwgeW91IGNhbiByZWFkIG91dAordGhlIGN1cnJlbnQgZnJlcXVlbmN5IGluCisKK3NjYWxpbmdfc2V0c3BlZWQuCQlCeSAiZWNob2luZyIgYSBuZXcgZnJlcXVlbmN5IGludG8gdGhpcworCQkJCXlvdSBjYW4gY2hhbmdlIHRoZSBzcGVlZCBvZiB0aGUgQ1BVLAorCQkJCWJ1dCBvbmx5IHdpdGhpbiB0aGUgbGltaXRzIG9mCisJCQkJc2NhbGluZ19taW5fZnJlcSBhbmQgc2NhbGluZ19tYXhfZnJlcS4KKwkJCQkKKworMy4yIERlcHJlY2F0ZWQgSW50ZXJmYWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZXBlbmRpbmcgb24geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbiwgeW91IG1pZ2h0IGZpbmQgdGhlIGZvbGxvd2luZyAKK2NwdWZyZXEtcmVsYXRlZCBmaWxlczoKKy9wcm9jL2NwdWZyZXEKKy9wcm9jL3N5cy9jcHUvKi9zcGVlZAorL3Byb2Mvc3lzL2NwdS8qL3NwZWVkLW1pbgorL3Byb2Mvc3lzL2NwdS8qL3NwZWVkLW1heAorCitUaGVzZSBhcmUgZmlsZXMgZm9yIGRlcHJlY2F0ZWQgaW50ZXJmYWNlcyB0byBjcHVmcmVxLCB3aGljaCBvZmZlciBmYXIKK2xlc3MgZnVuY3Rpb25hbGl0eS4gQmVjYXVzZSBvZiB0aGlzLCB0aGVzZSBpbnRlcmZhY2VzIGFyZW4ndCBkZXNjcmliZWQKK2hlcmUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZDI2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CkBAIC0wLDAgKzEsNDE1IEBACisJCQkJQ1BVU0VUUworCQkJCS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDA0IEJVTEwgU0EuCitXcml0dGVuIGJ5IFNpbW9uLkRlcnJAYnVsbC5uZXQKKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4KK01vZGlmaWVkIGJ5IFBhdWwgSmFja3NvbiA8cGpAc2dpLmNvbT4KKworQ09OVEVOVFM6Cis9PT09PT09PT0KKworMS4gQ3B1c2V0cworICAxLjEgV2hhdCBhcmUgY3B1c2V0cyA/CisgIDEuMiBXaHkgYXJlIGNwdXNldHMgbmVlZGVkID8KKyAgMS4zIEhvdyBhcmUgY3B1c2V0cyBpbXBsZW1lbnRlZCA/CisgIDEuNCBIb3cgZG8gSSB1c2UgY3B1c2V0cyA/CisyLiBVc2FnZSBFeGFtcGxlcyBhbmQgU3ludGF4CisgIDIuMSBCYXNpYyBVc2FnZQorICAyLjIgQWRkaW5nL3JlbW92aW5nIGNwdXMKKyAgMi4zIFNldHRpbmcgZmxhZ3MKKyAgMi40IEF0dGFjaGluZyBwcm9jZXNzZXMKKzMuIFF1ZXN0aW9ucworNC4gQ29udGFjdAorCisxLiBDcHVzZXRzCis9PT09PT09PT09CisKKzEuMSBXaGF0IGFyZSBjcHVzZXRzID8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3B1c2V0cyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBhc3NpZ25pbmcgYSBzZXQgb2YgQ1BVcyBhbmQgTWVtb3J5CitOb2RlcyB0byBhIHNldCBvZiB0YXNrcy4KKworQ3B1c2V0cyBjb25zdHJhaW4gdGhlIENQVSBhbmQgTWVtb3J5IHBsYWNlbWVudCBvZiB0YXNrcyB0byBvbmx5Cit0aGUgcmVzb3VyY2VzIHdpdGhpbiBhIHRhc2tzIGN1cnJlbnQgY3B1c2V0LiAgVGhleSBmb3JtIGEgbmVzdGVkCitoaWVyYXJjaHkgdmlzaWJsZSBpbiBhIHZpcnR1YWwgZmlsZSBzeXN0ZW0uICBUaGVzZSBhcmUgdGhlIGVzc2VudGlhbAoraG9va3MsIGJleW9uZCB3aGF0IGlzIGFscmVhZHkgcHJlc2VudCwgcmVxdWlyZWQgdG8gbWFuYWdlIGR5bmFtaWMKK2pvYiBwbGFjZW1lbnQgb24gbGFyZ2Ugc3lzdGVtcy4KKworRWFjaCB0YXNrIGhhcyBhIHBvaW50ZXIgdG8gYSBjcHVzZXQuICBNdWx0aXBsZSB0YXNrcyBtYXkgcmVmZXJlbmNlCit0aGUgc2FtZSBjcHVzZXQuICBSZXF1ZXN0cyBieSBhIHRhc2ssIHVzaW5nIHRoZSBzY2hlZF9zZXRhZmZpbml0eSgyKQorc3lzdGVtIGNhbGwgdG8gaW5jbHVkZSBDUFVzIGluIGl0cyBDUFUgYWZmaW5pdHkgbWFzaywgYW5kIHVzaW5nIHRoZQorbWJpbmQoMikgYW5kIHNldF9tZW1wb2xpY3koMikgc3lzdGVtIGNhbGxzIHRvIGluY2x1ZGUgTWVtb3J5IE5vZGVzCitpbiBpdHMgbWVtb3J5IHBvbGljeSwgYXJlIGJvdGggZmlsdGVyZWQgdGhyb3VnaCB0aGF0IHRhc2tzIGNwdXNldCwKK2ZpbHRlcmluZyBvdXQgYW55IENQVXMgb3IgTWVtb3J5IE5vZGVzIG5vdCBpbiB0aGF0IGNwdXNldC4gIFRoZQorc2NoZWR1bGVyIHdpbGwgbm90IHNjaGVkdWxlIGEgdGFzayBvbiBhIENQVSB0aGF0IGlzIG5vdCBhbGxvd2VkIGluCitpdHMgY3B1c19hbGxvd2VkIHZlY3RvciwgYW5kIHRoZSBrZXJuZWwgcGFnZSBhbGxvY2F0b3Igd2lsbCBub3QKK2FsbG9jYXRlIGEgcGFnZSBvbiBhIG5vZGUgdGhhdCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgcmVxdWVzdGluZyB0YXNrcworbWVtc19hbGxvd2VkIHZlY3Rvci4KKworSWYgYSBjcHVzZXQgaXMgY3B1IG9yIG1lbSBleGNsdXNpdmUsIG5vIG90aGVyIGNwdXNldCwgb3RoZXIgdGhhbiBhIGRpcmVjdAorYW5jZXN0b3Igb3IgZGVzY2VuZGVudCwgbWF5IHNoYXJlIGFueSBvZiB0aGUgc2FtZSBDUFVzIG9yIE1lbW9yeSBOb2Rlcy4KKworVXNlciBsZXZlbCBjb2RlIG1heSBjcmVhdGUgYW5kIGRlc3Ryb3kgY3B1c2V0cyBieSBuYW1lIGluIHRoZSBjcHVzZXQKK3ZpcnR1YWwgZmlsZSBzeXN0ZW0sIG1hbmFnZSB0aGUgYXR0cmlidXRlcyBhbmQgcGVybWlzc2lvbnMgb2YgdGhlc2UKK2NwdXNldHMgYW5kIHdoaWNoIENQVXMgYW5kIE1lbW9yeSBOb2RlcyBhcmUgYXNzaWduZWQgdG8gZWFjaCBjcHVzZXQsCitzcGVjaWZ5IGFuZCBxdWVyeSB0byB3aGljaCBjcHVzZXQgYSB0YXNrIGlzIGFzc2lnbmVkLCBhbmQgbGlzdCB0aGUKK3Rhc2sgcGlkcyBhc3NpZ25lZCB0byBhIGNwdXNldC4KKworCisxLjIgV2h5IGFyZSBjcHVzZXRzIG5lZWRlZCA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYW5hZ2VtZW50IG9mIGxhcmdlIGNvbXB1dGVyIHN5c3RlbXMsIHdpdGggbWFueSBwcm9jZXNzb3JzIChDUFVzKSwKK2NvbXBsZXggbWVtb3J5IGNhY2hlIGhpZXJhcmNoaWVzIGFuZCBtdWx0aXBsZSBNZW1vcnkgTm9kZXMgaGF2aW5nCitub24tdW5pZm9ybSBhY2Nlc3MgdGltZXMgKE5VTUEpIHByZXNlbnRzIGFkZGl0aW9uYWwgY2hhbGxlbmdlcyBmb3IKK3RoZSBlZmZpY2llbnQgc2NoZWR1bGluZyBhbmQgbWVtb3J5IHBsYWNlbWVudCBvZiBwcm9jZXNzZXMuCisKK0ZyZXF1ZW50bHkgbW9yZSBtb2Rlc3Qgc2l6ZWQgc3lzdGVtcyBjYW4gYmUgb3BlcmF0ZWQgd2l0aCBhZGVxdWF0ZQorZWZmaWNpZW5jeSBqdXN0IGJ5IGxldHRpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYXV0b21hdGljYWxseSBzaGFyZQordGhlIGF2YWlsYWJsZSBDUFUgYW5kIE1lbW9yeSByZXNvdXJjZXMgYW1vbmdzdCB0aGUgcmVxdWVzdGluZyB0YXNrcy4KKworQnV0IGxhcmdlciBzeXN0ZW1zLCB3aGljaCBiZW5lZml0IG1vcmUgZnJvbSBjYXJlZnVsIHByb2Nlc3NvciBhbmQKK21lbW9yeSBwbGFjZW1lbnQgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MgdGltZXMgYW5kIGNvbnRlbnRpb24sCithbmQgd2hpY2ggdHlwaWNhbGx5IHJlcHJlc2VudCBhIGxhcmdlciBpbnZlc3RtZW50IGZvciB0aGUgY3VzdG9tZXIsCitjYW4gYmVuZWZpdCBmcm9tIGV4cGxpY3RseSBwbGFjaW5nIGpvYnMgb24gcHJvcGVybHkgc2l6ZWQgc3Vic2V0cyBvZgordGhlIHN5c3RlbS4KKworVGhpcyBjYW4gYmUgZXNwZWNpYWxseSB2YWx1YWJsZSBvbjoKKworICAgICogV2ViIFNlcnZlcnMgcnVubmluZyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgd2ViIGFwcGxpY2F0aW9uLAorICAgICogU2VydmVycyBydW5uaW5nIGRpZmZlcmVudCBhcHBsaWNhdGlvbnMgKGZvciBpbnN0YW5jZSwgYSB3ZWIgc2VydmVyCisgICAgICBhbmQgYSBkYXRhYmFzZSksIG9yCisgICAgKiBOVU1BIHN5c3RlbXMgcnVubmluZyBsYXJnZSBIUEMgYXBwbGljYXRpb25zIHdpdGggZGVtYW5kaW5nCisgICAgICBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCisKK1RoZXNlIHN1YnNldHMsIG9yICJzb2Z0IHBhcnRpdGlvbnMiIG11c3QgYmUgYWJsZSB0byBiZSBkeW5hbWljYWxseQorYWRqdXN0ZWQsIGFzIHRoZSBqb2IgbWl4IGNoYW5nZXMsIHdpdGhvdXQgaW1wYWN0aW5nIG90aGVyIGNvbmN1cnJlbnRseQorZXhlY3V0aW5nIGpvYnMuCisKK1RoZSBrZXJuZWwgY3B1c2V0IHBhdGNoIHByb3ZpZGVzIHRoZSBtaW5pbXVtIGVzc2VudGlhbCBrZXJuZWwKK21lY2hhbmlzbXMgcmVxdWlyZWQgdG8gZWZmaWNpZW50bHkgaW1wbGVtZW50IHN1Y2ggc3Vic2V0cy4gIEl0CitsZXZlcmFnZXMgZXhpc3RpbmcgQ1BVIGFuZCBNZW1vcnkgUGxhY2VtZW50IGZhY2lsaXRpZXMgaW4gdGhlIExpbnV4CitrZXJuZWwgdG8gYXZvaWQgYW55IGFkZGl0aW9uYWwgaW1wYWN0IG9uIHRoZSBjcml0aWNhbCBzY2hlZHVsZXIgb3IKK21lbW9yeSBhbGxvY2F0b3IgY29kZS4KKworCisxLjMgSG93IGFyZSBjcHVzZXRzIGltcGxlbWVudGVkID8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcHVzZXRzIHByb3ZpZGUgYSBMaW51eCBrZXJuZWwgKDIuNi43IGFuZCBhYm92ZSkgbWVjaGFuaXNtIHRvIGNvbnN0cmFpbgord2hpY2ggQ1BVcyBhbmQgTWVtb3J5IE5vZGVzIGFyZSB1c2VkIGJ5IGEgcHJvY2VzcyBvciBzZXQgb2YgcHJvY2Vzc2VzLgorCitUaGUgTGludXgga2VybmVsIGFscmVhZHkgaGFzIGEgcGFpciBvZiBtZWNoYW5pc21zIHRvIHNwZWNpZnkgb24gd2hpY2gKK0NQVXMgYSB0YXNrIG1heSBiZSBzY2hlZHVsZWQgKHNjaGVkX3NldGFmZmluaXR5KSBhbmQgb24gd2hpY2ggTWVtb3J5CitOb2RlcyBpdCBtYXkgb2J0YWluIG1lbW9yeSAobWJpbmQsIHNldF9tZW1wb2xpY3kpLgorCitDcHVzZXRzIGV4dGVuZHMgdGhlc2UgdHdvIG1lY2hhbmlzbXMgYXMgZm9sbG93czoKKworIC0gQ3B1c2V0cyBhcmUgc2V0cyBvZiBhbGxvd2VkIENQVXMgYW5kIE1lbW9yeSBOb2Rlcywga25vd24gdG8gdGhlCisgICBrZXJuZWwuCisgLSBFYWNoIHRhc2sgaW4gdGhlIHN5c3RlbSBpcyBhdHRhY2hlZCB0byBhIGNwdXNldCwgdmlhIGEgcG9pbnRlcgorICAgaW4gdGhlIHRhc2sgc3RydWN0dXJlIHRvIGEgcmVmZXJlbmNlIGNvdW50ZWQgY3B1c2V0IHN0cnVjdHVyZS4KKyAtIENhbGxzIHRvIHNjaGVkX3NldGFmZmluaXR5IGFyZSBmaWx0ZXJlZCB0byBqdXN0IHRob3NlIENQVXMKKyAgIGFsbG93ZWQgaW4gdGhhdCB0YXNrcyBjcHVzZXQuCisgLSBDYWxscyB0byBtYmluZCBhbmQgc2V0X21lbXBvbGljeSBhcmUgZmlsdGVyZWQgdG8ganVzdAorICAgdGhvc2UgTWVtb3J5IE5vZGVzIGFsbG93ZWQgaW4gdGhhdCB0YXNrcyBjcHVzZXQuCisgLSBUaGUgcm9vdCBjcHVzZXQgY29udGFpbnMgYWxsIHRoZSBzeXN0ZW1zIENQVXMgYW5kIE1lbW9yeQorICAgTm9kZXMuCisgLSBGb3IgYW55IGNwdXNldCwgb25lIGNhbiBkZWZpbmUgY2hpbGQgY3B1c2V0cyBjb250YWluaW5nIGEgc3Vic2V0CisgICBvZiB0aGUgcGFyZW50cyBDUFUgYW5kIE1lbW9yeSBOb2RlIHJlc291cmNlcy4KKyAtIFRoZSBoaWVyYXJjaHkgb2YgY3B1c2V0cyBjYW4gYmUgbW91bnRlZCBhdCAvZGV2L2NwdXNldCwgZm9yCisgICBicm93c2luZyBhbmQgbWFuaXB1bGF0aW9uIGZyb20gdXNlciBzcGFjZS4KKyAtIEEgY3B1c2V0IG1heSBiZSBtYXJrZWQgZXhjbHVzaXZlLCB3aGljaCBlbnN1cmVzIHRoYXQgbm8gb3RoZXIKKyAgIGNwdXNldCAoZXhjZXB0IGRpcmVjdCBhbmNlc3RvcnMgYW5kIGRlc2NlbmRlbnRzKSBtYXkgY29udGFpbgorICAgYW55IG92ZXJsYXBwaW5nIENQVXMgb3IgTWVtb3J5IE5vZGVzLgorIC0gWW91IGNhbiBsaXN0IGFsbCB0aGUgdGFza3MgKGJ5IHBpZCkgYXR0YWNoZWQgdG8gYW55IGNwdXNldC4KKworVGhlIGltcGxlbWVudGF0aW9uIG9mIGNwdXNldHMgcmVxdWlyZXMgYSBmZXcsIHNpbXBsZSBob29rcworaW50byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBub25lIGluIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHBhdGhzOgorCisgLSBpbiBtYWluL2luaXQuYywgdG8gaW5pdGlhbGl6ZSB0aGUgcm9vdCBjcHVzZXQgYXQgc3lzdGVtIGJvb3QuCisgLSBpbiBmb3JrIGFuZCBleGl0LCB0byBhdHRhY2ggYW5kIGRldGFjaCBhIHRhc2sgZnJvbSBpdHMgY3B1c2V0LgorIC0gaW4gc2NoZWRfc2V0YWZmaW5pdHksIHRvIG1hc2sgdGhlIHJlcXVlc3RlZCBDUFVzIGJ5IHdoYXQncworICAgYWxsb3dlZCBpbiB0aGF0IHRhc2tzIGNwdXNldC4KKyAtIGluIHNjaGVkLmMgbWlncmF0ZV9hbGxfdGFza3MoKSwgdG8ga2VlcCBtaWdyYXRpbmcgdGFza3Mgd2l0aGluCisgICB0aGUgQ1BVcyBhbGxvd2VkIGJ5IHRoZWlyIGNwdXNldCwgaWYgcG9zc2libGUuCisgLSBpbiB0aGUgbWJpbmQgYW5kIHNldF9tZW1wb2xpY3kgc3lzdGVtIGNhbGxzLCB0byBtYXNrIHRoZSByZXF1ZXN0ZWQKKyAgIE1lbW9yeSBOb2RlcyBieSB3aGF0J3MgYWxsb3dlZCBpbiB0aGF0IHRhc2tzIGNwdXNldC4KKyAtIGluIHBhZ2VfYWxsb2MsIHRvIHJlc3RyaWN0IG1lbW9yeSB0byBhbGxvd2VkIG5vZGVzLgorIC0gaW4gdm1zY2FuLmMsIHRvIHJlc3RyaWN0IHBhZ2UgcmVjb3ZlcnkgdG8gdGhlIGN1cnJlbnQgY3B1c2V0LgorCitJbiBhZGRpdGlvbiBhIG5ldyBmaWxlIHN5c3RlbSwgb2YgdHlwZSAiY3B1c2V0IiBtYXkgYmUgbW91bnRlZCwKK3R5cGljYWxseSBhdCAvZGV2L2NwdXNldCwgdG8gZW5hYmxlIGJyb3dzaW5nIGFuZCBtb2RpZnlpbmcgdGhlIGNwdXNldHMKK3ByZXNlbnRseSBrbm93biB0byB0aGUga2VybmVsLiAgTm8gbmV3IHN5c3RlbSBjYWxscyBhcmUgYWRkZWQgZm9yCitjcHVzZXRzIC0gYWxsIHN1cHBvcnQgZm9yIHF1ZXJ5aW5nIGFuZCBtb2RpZnlpbmcgY3B1c2V0cyBpcyB2aWEKK3RoaXMgY3B1c2V0IGZpbGUgc3lzdGVtLgorCitFYWNoIHRhc2sgdW5kZXIgL3Byb2MgaGFzIGFuIGFkZGVkIGZpbGUgbmFtZWQgJ2NwdXNldCcsIGRpc3BsYXlpbmcKK3RoZSBjcHVzZXQgbmFtZSwgYXMgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGNwdXNldCBmaWxlCitzeXN0ZW0uCisKK1RoZSAvcHJvYy88cGlkPi9zdGF0dXMgZmlsZSBmb3IgZWFjaCB0YXNrIGhhcyB0d28gYWRkZWQgbGluZXMsCitkaXNwbGF5aW5nIHRoZSB0YXNrcyBjcHVzX2FsbG93ZWQgKG9uIHdoaWNoIENQVXMgaXQgbWF5IGJlIHNjaGVkdWxlZCkKK2FuZCBtZW1zX2FsbG93ZWQgKG9uIHdoaWNoIE1lbW9yeSBOb2RlcyBpdCBtYXkgb2J0YWluIG1lbW9yeSksCitpbiB0aGUgZm9ybWF0IHNlZW4gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgorCisgIENwdXNfYWxsb3dlZDogICBmZmZmZmZmZixmZmZmZmZmZixmZmZmZmZmZixmZmZmZmZmZgorICBNZW1zX2FsbG93ZWQ6ICAgZmZmZmZmZmYsZmZmZmZmZmYKKworRWFjaCBjcHVzZXQgaXMgcmVwcmVzZW50ZWQgYnkgYSBkaXJlY3RvcnkgaW4gdGhlIGNwdXNldCBmaWxlIHN5c3RlbQorY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpbGVzIGRlc2NyaWJpbmcgdGhhdCBjcHVzZXQ6CisKKyAtIGNwdXM6IGxpc3Qgb2YgQ1BVcyBpbiB0aGF0IGNwdXNldAorIC0gbWVtczogbGlzdCBvZiBNZW1vcnkgTm9kZXMgaW4gdGhhdCBjcHVzZXQKKyAtIGNwdV9leGNsdXNpdmUgZmxhZzogaXMgY3B1IHBsYWNlbWVudCBleGNsdXNpdmU/CisgLSBtZW1fZXhjbHVzaXZlIGZsYWc6IGlzIG1lbW9yeSBwbGFjZW1lbnQgZXhjbHVzaXZlPworIC0gdGFza3M6IGxpc3Qgb2YgdGFza3MgKGJ5IHBpZCkgYXR0YWNoZWQgdG8gdGhhdCBjcHVzZXQKKworTmV3IGNwdXNldHMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlIG1rZGlyIHN5c3RlbSBjYWxsIG9yIHNoZWxsCitjb21tYW5kLiAgVGhlIHByb3BlcnRpZXMgb2YgYSBjcHVzZXQsIHN1Y2ggYXMgaXRzIGZsYWdzLCBhbGxvd2VkCitDUFVzIGFuZCBNZW1vcnkgTm9kZXMsIGFuZCBhdHRhY2hlZCB0YXNrcywgYXJlIG1vZGlmaWVkIGJ5IHdyaXRpbmcKK3RvIHRoZSBhcHByb3ByaWF0ZSBmaWxlIGluIHRoYXQgY3B1c2V0cyBkaXJlY3RvcnksIGFzIGxpc3RlZCBhYm92ZS4KKworVGhlIG5hbWVkIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUgb2YgbmVzdGVkIGNwdXNldHMgYWxsb3dzIHBhcnRpdGlvbmluZworYSBsYXJnZSBzeXN0ZW0gaW50byBuZXN0ZWQsIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUsICJzb2Z0LXBhcnRpdGlvbnMiLgorCitUaGUgYXR0YWNobWVudCBvZiBlYWNoIHRhc2ssIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkIGF0IGZvcmsgYnkgYW55CitjaGlsZHJlbiBvZiB0aGF0IHRhc2ssIHRvIGEgY3B1c2V0IGFsbG93cyBvcmdhbml6aW5nIHRoZSB3b3JrIGxvYWQKK29uIGEgc3lzdGVtIGludG8gcmVsYXRlZCBzZXRzIG9mIHRhc2tzIHN1Y2ggdGhhdCBlYWNoIHNldCBpcyBjb25zdHJhaW5lZAordG8gdXNpbmcgdGhlIENQVXMgYW5kIE1lbW9yeSBOb2RlcyBvZiBhIHBhcnRpY3VsYXIgY3B1c2V0LiAgQSB0YXNrCittYXkgYmUgcmUtYXR0YWNoZWQgdG8gYW55IG90aGVyIGNwdXNldCwgaWYgYWxsb3dlZCBieSB0aGUgcGVybWlzc2lvbnMKK29uIHRoZSBuZWNlc3NhcnkgY3B1c2V0IGZpbGUgc3lzdGVtIGRpcmVjdG9yaWVzLgorCitTdWNoIG1hbmFnZW1lbnQgb2YgYSBzeXN0ZW0gImluIHRoZSBsYXJnZSIgaW50ZWdyYXRlcyBzbW9vdGhseSB3aXRoCit0aGUgZGV0YWlsZWQgcGxhY2VtZW50IGRvbmUgb24gaW5kaXZpZHVhbCB0YXNrcyBhbmQgbWVtb3J5IHJlZ2lvbnMKK3VzaW5nIHRoZSBzY2hlZF9zZXRhZmZpbml0eSwgbWJpbmQgYW5kIHNldF9tZW1wb2xpY3kgc3lzdGVtIGNhbGxzLgorCitUaGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5IHRvIGVhY2ggY3B1c2V0OgorCisgLSBJdHMgQ1BVcyBhbmQgTWVtb3J5IE5vZGVzIG11c3QgYmUgYSBzdWJzZXQgb2YgaXRzIHBhcmVudHMuCisgLSBJdCBjYW4gb25seSBiZSBtYXJrZWQgZXhjbHVzaXZlIGlmIGl0cyBwYXJlbnQgaXMuCisgLSBJZiBpdHMgY3B1IG9yIG1lbW9yeSBpcyBleGNsdXNpdmUsIHRoZXkgbWF5IG5vdCBvdmVybGFwIGFueSBzaWJsaW5nLgorCitUaGVzZSBydWxlcywgYW5kIHRoZSBuYXR1cmFsIGhpZXJhcmNoeSBvZiBjcHVzZXRzLCBlbmFibGUgZWZmaWNpZW50CitlbmZvcmNlbWVudCBvZiB0aGUgZXhjbHVzaXZlIGd1YXJhbnRlZSwgd2l0aG91dCBoYXZpbmcgdG8gc2NhbiBhbGwKK2NwdXNldHMgZXZlcnkgdGltZSBhbnkgb2YgdGhlbSBjaGFuZ2UgdG8gZW5zdXJlIG5vdGhpbmcgb3ZlcmxhcHMgYQorZXhjbHVzaXZlIGNwdXNldC4gIEFsc28sIHRoZSB1c2Ugb2YgYSBMaW51eCB2aXJ0dWFsIGZpbGUgc3lzdGVtICh2ZnMpCit0byByZXByZXNlbnQgdGhlIGNwdXNldCBoaWVyYXJjaHkgcHJvdmlkZXMgZm9yIGEgZmFtaWxpYXIgcGVybWlzc2lvbgorYW5kIG5hbWUgc3BhY2UgZm9yIGNwdXNldHMsIHdpdGggYSBtaW5pbXVtIG9mIGFkZGl0aW9uYWwga2VybmVsIGNvZGUuCisKKzEuNCBIb3cgZG8gSSB1c2UgY3B1c2V0cyA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byBtaW5pbWl6ZSB0aGUgaW1wYWN0IG9mIGNwdXNldHMgb24gY3JpdGljYWwga2VybmVsCitjb2RlLCBzdWNoIGFzIHRoZSBzY2hlZHVsZXIsIGFuZCBkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGUga2VybmVsCitkb2VzIG5vdCBzdXBwb3J0IG9uZSB0YXNrIHVwZGF0aW5nIHRoZSBtZW1vcnkgcGxhY2VtZW50IG9mIGFub3RoZXIKK3Rhc2sgZGlyZWN0bHksIHRoZSBpbXBhY3Qgb24gYSB0YXNrIG9mIGNoYW5naW5nIGl0cyBjcHVzZXQgQ1BVCitvciBNZW1vcnkgTm9kZSBwbGFjZW1lbnQsIG9yIG9mIGNoYW5naW5nIHRvIHdoaWNoIGNwdXNldCBhIHRhc2sKK2lzIGF0dGFjaGVkLCBpcyBzdWJ0bGUuCisKK0lmIGEgY3B1c2V0IGhhcyBpdHMgTWVtb3J5IE5vZGVzIG1vZGlmaWVkLCB0aGVuIGZvciBlYWNoIHRhc2sgYXR0YWNoZWQKK3RvIHRoYXQgY3B1c2V0LCB0aGUgbmV4dCB0aW1lIHRoYXQgdGhlIGtlcm5lbCBhdHRlbXB0cyB0byBhbGxvY2F0ZQorYSBwYWdlIG9mIG1lbW9yeSBmb3IgdGhhdCB0YXNrLCB0aGUga2VybmVsIHdpbGwgbm90aWNlIHRoZSBjaGFuZ2UKK2luIHRoZSB0YXNrcyBjcHVzZXQsIGFuZCB1cGRhdGUgaXRzIHBlci10YXNrIG1lbW9yeSBwbGFjZW1lbnQgdG8KK3JlbWFpbiB3aXRoaW4gdGhlIG5ldyBjcHVzZXRzIG1lbW9yeSBwbGFjZW1lbnQuICBJZiB0aGUgdGFzayB3YXMgdXNpbmcKK21lbXBvbGljeSBNUE9MX0JJTkQsIGFuZCB0aGUgbm9kZXMgdG8gd2hpY2ggaXQgd2FzIGJvdW5kIG92ZXJsYXAgd2l0aAoraXRzIG5ldyBjcHVzZXQsIHRoZW4gdGhlIHRhc2sgd2lsbCBjb250aW51ZSB0byB1c2Ugd2hhdGV2ZXIgc3Vic2V0CitvZiBNUE9MX0JJTkQgbm9kZXMgYXJlIHN0aWxsIGFsbG93ZWQgaW4gdGhlIG5ldyBjcHVzZXQuICBJZiB0aGUgdGFzaword2FzIHVzaW5nIE1QT0xfQklORCBhbmQgbm93IG5vbmUgb2YgaXRzIE1QT0xfQklORCBub2RlcyBhcmUgYWxsb3dlZAoraW4gdGhlIG5ldyBjcHVzZXQsIHRoZW4gdGhlIHRhc2sgd2lsbCBiZSBlc3NlbnRpYWxseSB0cmVhdGVkIGFzIGlmIGl0Cit3YXMgTVBPTF9CSU5EIGJvdW5kIHRvIHRoZSBuZXcgY3B1c2V0IChldmVuIHRob3VnaCBpdHMgbnVtYSBwbGFjZW1lbnQsCithcyBxdWVyaWVkIGJ5IGdldF9tZW1wb2xpY3koKSwgZG9lc24ndCBjaGFuZ2UpLiAgSWYgYSB0YXNrIGlzIG1vdmVkCitmcm9tIG9uZSBjcHVzZXQgdG8gYW5vdGhlciwgdGhlbiB0aGUga2VybmVsIHdpbGwgYWRqdXN0IHRoZSB0YXNrcworbWVtb3J5IHBsYWNlbWVudCwgYXMgYWJvdmUsIHRoZSBuZXh0IHRpbWUgdGhhdCB0aGUga2VybmVsIGF0dGVtcHRzCit0byBhbGxvY2F0ZSBhIHBhZ2Ugb2YgbWVtb3J5IGZvciB0aGF0IHRhc2suCisKK0lmIGEgY3B1c2V0IGhhcyBpdHMgQ1BVcyBtb2RpZmllZCwgdGhlbiBlYWNoIHRhc2sgdXNpbmcgdGhhdAorY3B1c2V0IGRvZXMgX25vdF8gY2hhbmdlIGl0cyBiZWhhdmlvciBhdXRvbWF0aWNhbGx5LiAgSW4gb3JkZXIgdG8KK21pbmltaXplIHRoZSBpbXBhY3Qgb24gdGhlIGNyaXRpY2FsIHNjaGVkdWxpbmcgY29kZSBpbiB0aGUga2VybmVsLAordGFza3Mgd2lsbCBjb250aW51ZSB0byB1c2UgdGhlaXIgcHJpb3IgQ1BVIHBsYWNlbWVudCB1bnRpbCB0aGV5CithcmUgcmVib3VuZCB0byB0aGVpciBjcHVzZXQsIGJ5IHJld3JpdGluZyB0aGVpciBwaWQgdG8gdGhlICd0YXNrcycKK2ZpbGUgb2YgdGhlaXIgY3B1c2V0LiAgSWYgYSB0YXNrIGhhZCBiZWVuIGJvdW5kIHRvIHNvbWUgc3Vic2V0IG9mIGl0cworY3B1c2V0IHVzaW5nIHRoZSBzY2hlZF9zZXRhZmZpbml0eSgpIGNhbGwsIGFuZCBpZiBhbnkgb2YgdGhhdCBzdWJzZXQKK2lzIHN0aWxsIGFsbG93ZWQgaW4gaXRzIG5ldyBjcHVzZXQgc2V0dGluZ3MsIHRoZW4gdGhlIHRhc2sgd2lsbCBiZQorcmVzdHJpY3RlZCB0byB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBDUFVzIGl0IHdhcyBhbGxvd2VkIG9uIGJlZm9yZSwKK2FuZCBpdHMgbmV3IGNwdXNldCBDUFUgcGxhY2VtZW50LiAgSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGVyZSBpcworbm8gb3ZlcmxhcCBiZXR3ZWVuIGEgdGFza3MgcHJpb3IgcGxhY2VtZW50IGFuZCBpdHMgbmV3IGNwdXNldCBDUFUKK3BsYWNlbWVudCwgdGhlbiB0aGUgdGFzayB3aWxsIGJlIGFsbG93ZWQgdG8gcnVuIG9uIGFueSBDUFUgYWxsb3dlZAoraW4gaXRzIG5ldyBjcHVzZXQuICBJZiBhIHRhc2sgaXMgbW92ZWQgZnJvbSBvbmUgY3B1c2V0IHRvIGFub3RoZXIsCitpdHMgQ1BVIHBsYWNlbWVudCBpcyB1cGRhdGVkIGluIHRoZSBzYW1lIHdheSBhcyBpZiB0aGUgdGFza3MgcGlkIGlzCityZXdyaXR0ZW4gdG8gdGhlICd0YXNrcycgZmlsZSBvZiBpdHMgY3VycmVudCBjcHVzZXQuCisKK0luIHN1bW1hcnksIHRoZSBtZW1vcnkgcGxhY2VtZW50IG9mIGEgdGFzayB3aG9zZSBjcHVzZXQgaXMgY2hhbmdlZCBpcwordXBkYXRlZCBieSB0aGUga2VybmVsLCBvbiB0aGUgbmV4dCBhbGxvY2F0aW9uIG9mIGEgcGFnZSBmb3IgdGhhdCB0YXNrLAorYnV0IHRoZSBwcm9jZXNzb3IgcGxhY2VtZW50IGlzIG5vdCB1cGRhdGVkLCB1bnRpbCB0aGF0IHRhc2tzIHBpZCBpcworcmV3cml0dGVuIHRvIHRoZSAndGFza3MnIGZpbGUgb2YgaXRzIGNwdXNldC4gIFRoaXMgaXMgZG9uZSB0byBhdm9pZAoraW1wYWN0aW5nIHRoZSBzY2hlZHVsZXIgY29kZSBpbiB0aGUga2VybmVsIHdpdGggYSBjaGVjayBmb3IgY2hhbmdlcworaW4gYSB0YXNrcyBwcm9jZXNzb3IgcGxhY2VtZW50LgorCitUaGVyZSBpcyBhbiBleGNlcHRpb24gdG8gdGhlIGFib3ZlLiAgSWYgaG90cGx1ZyBmdW50aW9uYWxpdHkgaXMgdXNlZAordG8gcmVtb3ZlIGFsbCB0aGUgQ1BVcyB0aGF0IGFyZSBjdXJyZW50bHkgYXNzaWduZWQgdG8gYSBjcHVzZXQsCit0aGVuIHRoZSBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgY3B1c19hbGxvd2VkIG9mIGFsbAordGFza3MgYXR0YWNoZWQgdG8gQ1BVcyBpbiB0aGF0IGNwdXNldCB3aXRoIHRoZSBvbmxpbmUgQ1BVcyBvZiB0aGUKK25lYXJlc3QgcGFyZW50IGNwdXNldCB0aGF0IHN0aWxsIGhhcyBzb21lIENQVXMgb25saW5lLiAgV2hlbiBtZW1vcnkKK2hvdHBsdWcgZnVuY3Rpb25hbGl0eSBmb3IgcmVtb3ZpbmcgTWVtb3J5IE5vZGVzIGlzIGF2YWlsYWJsZSwgYQorc2ltaWxhciBleGNlcHRpb24gaXMgZXhwZWN0ZWQgdG8gYXBwbHkgdGhlcmUgYXMgd2VsbC4gIEluIGdlbmVyYWwsCit0aGUga2VybmVsIHByZWZlcnMgdG8gdmlvbGF0ZSBjcHVzZXQgcGxhY2VtZW50LCBvdmVyIHN0YXJ2aW5nIGEgdGFzawordGhhdCBoYXMgaGFkIGFsbCBpdHMgYWxsb3dlZCBDUFVzIG9yIE1lbW9yeSBOb2RlcyB0YWtlbiBvZmZsaW5lLiAgVXNlcgorY29kZSBzaG91bGQgcmVjb25maWd1cmUgY3B1c2V0cyB0byBvbmx5IHJlZmVyIHRvIG9ubGluZSBDUFVzIGFuZCBNZW1vcnkKK05vZGVzIHdoZW4gdXNpbmcgaG90cGx1ZyB0byBhZGQgb3IgcmVtb3ZlIHN1Y2ggcmVzb3VyY2VzLgorCitUaGVyZSBpcyBhIHNlY29uZCBleGNlcHRpb24gdG8gdGhlIGFib3ZlLiAgR0ZQX0FUT01JQyByZXF1ZXN0cyBhcmUKK2tlcm5lbCBpbnRlcm5hbCBhbGxvY2F0aW9ucyB0aGF0IG11c3QgYmUgc2F0aXNmaWVkLCBpbW1lZGlhdGVseS4KK1RoZSBrZXJuZWwgbWF5IGRyb3Agc29tZSByZXF1ZXN0LCBpbiByYXJlIGNhc2VzIGV2ZW4gcGFuaWMsIGlmIGEKK0dGUF9BVE9NSUMgYWxsb2MgZmFpbHMuICBJZiB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgc2F0aXNmaWVkIHdpdGhpbgordGhlIGN1cnJlbnQgdGFza3MgY3B1c2V0LCB0aGVuIHdlIHJlbGF4IHRoZSBjcHVzZXQsIGFuZCBsb29rIGZvcgorbWVtb3J5IGFueXdoZXJlIHdlIGNhbiBmaW5kIGl0LiAgSXQncyBiZXR0ZXIgdG8gdmlvbGF0ZSB0aGUgY3B1c2V0Cit0aGFuIHN0cmVzcyB0aGUga2VybmVsLgorCitUbyBzdGFydCBhIG5ldyBqb2IgdGhhdCBpcyB0byBiZSBjb250YWluZWQgd2l0aGluIGEgY3B1c2V0LCB0aGUgc3RlcHMgYXJlOgorCisgMSkgbWtkaXIgL2Rldi9jcHVzZXQKKyAyKSBtb3VudCAtdCBjcHVzZXQgbm9uZSAvZGV2L2NwdXNldAorIDMpIENyZWF0ZSB0aGUgbmV3IGNwdXNldCBieSBkb2luZyBta2RpcidzIGFuZCB3cml0ZSdzIChvciBlY2hvJ3MpIGluCisgICAgdGhlIC9kZXYvY3B1c2V0IHZpcnR1YWwgZmlsZSBzeXN0ZW0uCisgNCkgU3RhcnQgYSB0YXNrIHRoYXQgd2lsbCBiZSB0aGUgImZvdW5kaW5nIGZhdGhlciIgb2YgdGhlIG5ldyBqb2IuCisgNSkgQXR0YWNoIHRoYXQgdGFzayB0byB0aGUgbmV3IGNwdXNldCBieSB3cml0aW5nIGl0cyBwaWQgdG8gdGhlCisgICAgL2Rldi9jcHVzZXQgdGFza3MgZmlsZSBmb3IgdGhhdCBjcHVzZXQuCisgNikgZm9yaywgZXhlYyBvciBjbG9uZSB0aGUgam9iIHRhc2tzIGZyb20gdGhpcyBmb3VuZGluZyBmYXRoZXIgdGFzay4KKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgY29tbWFuZHMgd2lsbCBzZXR1cCBhIGNwdXNldAorbmFtZWQgIkNoYXJsaWUiLCBjb250YWluaW5nIGp1c3QgQ1BVcyAyIGFuZCAzLCBhbmQgTWVtb3J5IE5vZGUgMSwKK2FuZCB0aGVuIHN0YXJ0IGEgc3Vic2hlbGwgJ3NoJyBpbiB0aGF0IGNwdXNldDoKKworICBtb3VudCAtdCBjcHVzZXQgbm9uZSAvZGV2L2NwdXNldAorICBjZCAvZGV2L2NwdXNldAorICBta2RpciBDaGFybGllCisgIGNkIENoYXJsaWUKKyAgL2Jpbi9lY2hvIDItMyA+IGNwdXMKKyAgL2Jpbi9lY2hvIDEgPiBtZW1zCisgIC9iaW4vZWNobyAkJCA+IHRhc2tzCisgIHNoCisgICMgVGhlIHN1YnNoZWxsICdzaCcgaXMgbm93IHJ1bm5pbmcgaW4gY3B1c2V0IENoYXJsaWUKKyAgIyBUaGUgbmV4dCBsaW5lIHNob3VsZCBkaXNwbGF5ICcvQ2hhcmxpZScKKyAgY2F0IC9wcm9jL3NlbGYvY3B1c2V0CisKK0luIHRoZSBjYXNlIHRoYXQgYSBjaGFuZ2Ugb2YgY3B1c2V0IGluY2x1ZGVzIHdhbnRpbmcgdG8gbW92ZSBhbHJlYWR5CithbGxvY2F0ZWQgbWVtb3J5IHBhZ2VzLCBjb25zaWRlciBmdXJ0aGVyIHRoZSB3b3JrIG9mIElXQU1PVE8KK1Rvc2hpaGlybyA8aXdhbW90b0B2YWxpbnV4LmNvLmpwPiBmb3IgcGFnZSByZW1hcHBpbmcgYW5kIG1lbW9yeQoraG90cmVtb3ZhbCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0OgorCisgIGh0dHA6Ly9wZW9wbGUudmFsaW51eC5jby5qcC9+aXdhbW90by9taC5odG1sCisKK1RoZSBpbnRlZ3JhdGlvbiBvZiBjcHVzZXRzIHdpdGggc3VjaCBtZW1vcnkgbWlncmF0aW9uIGlzIG5vdCB5ZXQKK2F2YWlsYWJsZS4KKworSW4gdGhlIGZ1dHVyZSwgYSBDIGxpYnJhcnkgaW50ZXJmYWNlIHRvIGNwdXNldHMgd2lsbCBsaWtlbHkgYmUKK2F2YWlsYWJsZS4gIEZvciBub3csIHRoZSBvbmx5IHdheSB0byBxdWVyeSBvciBtb2RpZnkgY3B1c2V0cyBpcwordmlhIHRoZSBjcHVzZXQgZmlsZSBzeXN0ZW0sIHVzaW5nIHRoZSB2YXJpb3VzIGNkLCBta2RpciwgZWNobywgY2F0LAorcm1kaXIgY29tbWFuZHMgZnJvbSB0aGUgc2hlbGwsIG9yIHRoZWlyIGVxdWl2YWxlbnQgZnJvbSBDLgorCitUaGUgc2NoZWRfc2V0YWZmaW5pdHkgY2FsbHMgY2FuIGFsc28gYmUgZG9uZSBhdCB0aGUgc2hlbGwgcHJvbXB0IHVzaW5nCitTR0kncyBydW5vbiBvciBSb2JlcnQgTG92ZSdzIHRhc2tzZXQuICBUaGUgbWJpbmQgYW5kIHNldF9tZW1wb2xpY3kKK2NhbGxzIGNhbiBiZSBkb25lIGF0IHRoZSBzaGVsbCBwcm9tcHQgdXNpbmcgdGhlIG51bWFjdGwgY29tbWFuZAorKHBhcnQgb2YgQW5kaSBLbGVlbidzIG51bWEgcGFja2FnZSkuCisKKzIuIFVzYWdlIEV4YW1wbGVzIGFuZCBTeW50YXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMi4xIEJhc2ljIFVzYWdlCistLS0tLS0tLS0tLS0tLS0KKworQ3JlYXRpbmcsIG1vZGlmeWluZywgdXNpbmcgdGhlIGNwdXNldHMgY2FuIGJlIGRvbmUgdGhyb3VnaCB0aGUgY3B1c2V0Cit2aXJ0dWFsIGZpbGVzeXN0ZW0uCisKK1RvIG1vdW50IGl0LCB0eXBlOgorIyBtb3VudCAtdCBjcHVzZXQgbm9uZSAvZGV2L2NwdXNldAorCitUaGVuIHVuZGVyIC9kZXYvY3B1c2V0IHlvdSBjYW4gZmluZCBhIHRyZWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKK3RyZWUgb2YgdGhlIGNwdXNldHMgaW4gdGhlIHN5c3RlbS4gRm9yIGluc3RhbmNlLCAvZGV2L2NwdXNldAoraXMgdGhlIGNwdXNldCB0aGF0IGhvbGRzIHRoZSB3aG9sZSBzeXN0ZW0uCisKK0lmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBjcHVzZXQgdW5kZXIgL2Rldi9jcHVzZXQ6CisjIGNkIC9kZXYvY3B1c2V0CisjIG1rZGlyIG15X2NwdXNldAorCitOb3cgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHdpdGggdGhpcyBjcHVzZXQuCisjIGNkIG15X2NwdXNldAorCitJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgc2V2ZXJhbCBmaWxlczoKKyMgbHMKK2NwdXMgIGNwdV9leGNsdXNpdmUgIG1lbXMgIG1lbV9leGNsdXNpdmUgIHRhc2tzCisKK1JlYWRpbmcgdGhlbSB3aWxsIGdpdmUgeW91IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGlzIGNwdXNldDoKK3RoZSBDUFVzIGFuZCBNZW1vcnkgTm9kZXMgaXQgY2FuIHVzZSwgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSB1c2luZworaXQsIGl0cyBwcm9wZXJ0aWVzLiAgQnkgd3JpdGluZyB0byB0aGVzZSBmaWxlcyB5b3UgY2FuIG1hbmlwdWxhdGUKK3RoZSBjcHVzZXQuCisKK1NldCBzb21lIGZsYWdzOgorIyAvYmluL2VjaG8gMSA+IGNwdV9leGNsdXNpdmUKKworQWRkIHNvbWUgY3B1czoKKyMgL2Jpbi9lY2hvIDAtNyA+IGNwdXMKKworTm93IGF0dGFjaCB5b3VyIHNoZWxsIHRvIHRoaXMgY3B1c2V0OgorIyAvYmluL2VjaG8gJCQgPiB0YXNrcworCitZb3UgY2FuIGFsc28gY3JlYXRlIGNwdXNldHMgaW5zaWRlIHlvdXIgY3B1c2V0IGJ5IHVzaW5nIG1rZGlyIGluIHRoaXMKK2RpcmVjdG9yeS4KKyMgbWtkaXIgbXlfc3ViX2NzCisKK1RvIHJlbW92ZSBhIGNwdXNldCwganVzdCB1c2Ugcm1kaXI6CisjIHJtZGlyIG15X3N1Yl9jcworVGhpcyB3aWxsIGZhaWwgaWYgdGhlIGNwdXNldCBpcyBpbiB1c2UgKGhhcyBjcHVzZXRzIGluc2lkZSwgb3IgaGFzCitwcm9jZXNzZXMgYXR0YWNoZWQpLgorCisyLjIgQWRkaW5nL3JlbW92aW5nIGNwdXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHRoZSBzeW50YXggdG8gdXNlIHdoZW4gd3JpdGluZyBpbiB0aGUgY3B1cyBvciBtZW1zIGZpbGVzCitpbiBjcHVzZXQgZGlyZWN0b3JpZXM6CisKKyMgL2Jpbi9lY2hvIDEtNCA+IGNwdXMJCS0+IHNldCBjcHVzIGxpc3QgdG8gY3B1cyAxLDIsMyw0CisjIC9iaW4vZWNobyAxLDIsMyw0ID4gY3B1cwktPiBzZXQgY3B1cyBsaXN0IHRvIGNwdXMgMSwyLDMsNAorCisyLjMgU2V0dGluZyBmbGFncworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHN5bnRheCBpcyB2ZXJ5IHNpbXBsZToKKworIyAvYmluL2VjaG8gMSA+IGNwdV9leGNsdXNpdmUgCS0+IHNldCBmbGFnICdjcHVfZXhjbHVzaXZlJworIyAvYmluL2VjaG8gMCA+IGNwdV9leGNsdXNpdmUgCS0+IHVuc2V0IGZsYWcgJ2NwdV9leGNsdXNpdmUnCisKKzIuNCBBdHRhY2hpbmcgcHJvY2Vzc2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIC9iaW4vZWNobyBQSUQgPiB0YXNrcworCitOb3RlIHRoYXQgaXQgaXMgUElELCBub3QgUElEcy4gWW91IGNhbiBvbmx5IGF0dGFjaCBPTkUgdGFzayBhdCBhIHRpbWUuCitJZiB5b3UgaGF2ZSBzZXZlcmFsIHRhc2tzIHRvIGF0dGFjaCwgeW91IGhhdmUgdG8gZG8gaXQgb25lIGFmdGVyIGFub3RoZXI6CisKKyMgL2Jpbi9lY2hvIFBJRDEgPiB0YXNrcworIyAvYmluL2VjaG8gUElEMiA+IHRhc2tzCisJLi4uCisjIC9iaW4vZWNobyBQSURuID4gdGFza3MKKworCiszLiBRdWVzdGlvbnMKKz09PT09PT09PT09PQorCitROiB3aGF0J3MgdXAgd2l0aCB0aGlzICcvYmluL2VjaG8nID8KK0E6IGJhc2gncyBidWlsdGluICdlY2hvJyBjb21tYW5kIGRvZXMgbm90IGNoZWNrIGNhbGxzIHRvIHdyaXRlKCkgYWdhaW5zdAorICAgZXJyb3JzLiBJZiB5b3UgdXNlIGl0IGluIHRoZSBjcHVzZXQgZmlsZSBzeXN0ZW0sIHlvdSB3b24ndCBiZQorICAgYWJsZSB0byB0ZWxsIHdoZXRoZXIgYSBjb21tYW5kIHN1Y2NlZWRlZCBvciBmYWlsZWQuCisKK1E6IFdoZW4gSSBhdHRhY2ggcHJvY2Vzc2VzLCBvbmx5IHRoZSBmaXJzdCBvZiB0aGUgbGluZSBnZXRzIHJlYWxseSBhdHRhY2hlZCAhCitBOiBXZSBjYW4gb25seSByZXR1cm4gb25lIGVycm9yIGNvZGUgcGVyIGNhbGwgdG8gd3JpdGUoKS4gU28geW91IHNob3VsZCBhbHNvCisgICBwdXQgb25seSBPTkUgcGlkLgorCis0LiBDb250YWN0Cis9PT09PT09PT09CisKK1dlYjogaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvY3B1c2V0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NyaXMvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9jcmlzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTVhMWRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jcmlzL1JFQURNRQpAQCAtMCwwICsxLDE5NSBAQAorTGludXggMi40IG9uIHRoZSBDUklTIGFyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJElkOiBSRUFETUUsdiAxLjcgMjAwMS8wNC8xOSAxMjozODozMiBiam9ybncgRXhwICQKKworVGhpcyBpcyBhIHBvcnQgb2YgTGludXggMi40IHRvIEF4aXMgQ29tbXVuaWNhdGlvbnMgRVRSQVggMTAwTFggZW1iZWRkZWQgCituZXR3b3JrIENQVS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ1JJUyBhbmQgRVRSQVggcGxlYXNlIHNlZSBmdXJ0aGVyCitiZWxvdy4KKworSW4gb3JkZXIgdG8gY29tcGlsZSB0aGlzIHlvdSBuZWVkIGEgdmVyc2lvbiBvZiBnY2Mgd2l0aCBzdXBwb3J0IGZvciB0aGUKK0VUUkFYIGNoaXAgZmFtaWx5LiBQbGVhc2Ugc2VlIHRoaXMgbGluayBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gCitkb3dubG9hZCB0aGUgY29tcGlsZXIgYW5kIG90aGVyIHRvb2xzIHVzZWZ1bCB3aGVuIGJ1aWxkaW5nIGFuZCBib290aW5nCitzb2Z0d2FyZSBmb3IgdGhlIEVUUkFYIHBsYXRmb3JtOgorCitodHRwOi8vZGV2ZWxvcGVyLmF4aXMuY29tL2RvYy9zb2Z0d2FyZS9kZXZib2FyZF9seC9pbnN0YWxsLWhvd3RvLmh0bWwKKworPG1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gc2hvdWxkIGNvbWUgaW4gdGhpcyBkb2N1bWVudCBsYXRlcj4KKworV2hhdCBpcyBDUklTID8KKy0tLS0tLS0tLS0tLS0tCisKK0NSSVMgaXMgYW4gYWNyb255bSBmb3IgJ0NvZGUgUmVkdWNlZCBJbnN0cnVjdGlvbiBTZXQnLiBJdCBpcyB0aGUgQ1BVCithcmNoaXRlY3R1cmUgaW4gQXhpcyBDb21tdW5pY2F0aW9uIEFCJ3MgcmFuZ2Ugb2YgZW1iZWRkZWQgbmV0d29yayBDUFUncywKK2NhbGxlZCBFVFJBWC4gVGhlIGxhdGVzdCBDUFUgaXMgY2FsbGVkIEVUUkFYIDEwMExYLCB3aGVyZSBMWCBzdGFuZHMgZm9yCisnTGludXgnIGJlY2F1c2UgdGhlIGNoaXAgd2FzIGRlc2lnbmVkIHRvIGJlIGEgZ29vZCBob3N0IGZvciB0aGUgTGludXgKK29wZXJhdGluZyBzeXN0ZW0uCisKK1RoZSBFVFJBWCAxMDBMWCBjaGlwCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgcmVmZXJlbmNlLCBwbGFzZSBzZWUgdGhlIHByZXNzLXJlbGVhc2U6CisKK2h0dHA6Ly93d3cuYXhpcy5jb20vbmV3cy91cy8wMDExMDFfZXRyYXguaHRtCisKK1RoZSBFVFJBWCAxMDBMWCBpcyBhIDEwMCBNSVBTIHByb2Nlc3NvciB3aXRoIDhrQiBjYWNoZSwgTU1VLCBhbmQgYSB2ZXJ5IGJyb2FkIAorcmFuZ2Ugb2YgIGJ1aWx0LWluIGludGVyZmFjZXMsIGFsbCB3aXRoIG1vZGVybiBzY2F0dGVyL2dhdGhlciBETUEuCisKK01lbW9yeSBpbnRlcmZhY2VzOgorCisJKiBTUkFNCisJKiBOT1ItZmxhc2gvUk9NCisJKiBFRE8gb3IgcGFnZS1tb2RlIERSQU0KKwkqIFNEUkFNCisKK0kvTyBpbnRlcmZhY2VzOgorCisJKiBvbmUgMTAvMTAwIE1iaXQvcyBldGhlcm5ldCBjb250cm9sbGVyCisJKiBmb3VyIHNlcmlhbC1wb3J0cyAodXAgdG8gNiBNYml0L3MpCisJKiB0d28gc3luY2hyb25vdXMgc2VyaWFsLXBvcnRzIGZvciBtdWx0aW1lZGlhIGNvZGVjJ3MgZXRjLgorCSogVVNCIGhvc3QgY29udHJvbGxlciBhbmQgVVNCIHNsYXZlCisJKiBBVEEKKwkqIFNDU0kKKwkqIHR3byBwYXJhbGxlbC1wb3J0cworCSogdHdvIGdlbmVyaWMgOC1iaXQgcG9ydHMKKwkKKwkobm90IGFsbCBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUgYXQgdGhlIHNhbWUgdGltZSBkdWUgdG8gY2hpcCBwaW4gCisgICAgICAgICBtdWx0aXBsZXhpbmcpCisKK1RoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBFVFJBWCwgdGhlIEVUUkFYIDEwMCwgc2l0cyBpbiBhbG1vc3QgYWxsIG9mCitBeGlzIHNoaXBwaW5nIHRoaW4tc2VydmVycyBsaWtlIHRoZSBBeGlzIDIxMDAgd2ViIGNhbWVyYSBvciB0aGUgRVRSQVggMTAwCitkZXZlbG9wZXItYm9hcmQuIEl0IGxhY2tzIGFuIE1NVSBzbyB0aGUgTGludXggd2UgcnVuIG9uIHRoYXQgaXMgYSB2ZXJzaW9uCitvZiB1Q2xpbnV4IChMaW51eCAyLjAgd2l0aG91dCBNTS1zdXBwb3J0KSBwb3J0ZWQgdG8gdGhlIENSSVMgYXJjaGl0ZWN0dXJlLgorVGhlIG5ldyBMaW51eCAyLjQgcG9ydCBoYXMgZnVsbCBNTSBhbmQgbmVlZHMgYSBDUFUgd2l0aCBhbiBNTVUsIHNvIGl0IHdpbGwKK25vdCBydW4gb24gdGhlIEVUUkFYIDEwMC4KKworQSB2ZXJzaW9uIG9mIHRoZSBBeGlzIGRldmVsb3Blci1ib2FyZCB3aXRoIEVUUkFYIDEwMExYIChydW5uaW5nIExpbnV4CisyLjQpIGlzIG5vdyBhdmFpbGFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgZGV2ZWxvcGVyLmF4aXMuY29tLgorCisKK0Jvb3Rsb2cKKy0tLS0tLS0KKworSnVzdCBhcyBhbiBleGFtcGxlLCB0aGlzIGlzIHRoZSBkZWJ1Zy1vdXRwdXQgZnJvbSBhIGJvb3Qgb2YgTGludXggMi40IG9uCithIGJvYXJkIHdpdGggRVRSQVggMTAwTFguIFRoZSBkaXNwbGF5ZWQgQm9nb01JUFMgdmFsdWUgaXMgNSB0aW1lcyB0b28gc21hbGwgOikKK0F0IHRoZSBlbmQgeW91IHNlZSBzb21lIHVzZXItbW9kZSBwcm9ncmFtcyBib290aW5nIGxpa2UgdGVsbmV0IGFuZCBmdHAgZGFlbW9ucy4KKworTGludXggdmVyc2lvbiAyLjQuMSAoYmpvcm53QGdvZHppbGxhLmF4aXMuc2UpIChnY2MgdmVyc2lvbiAyLjk2IDIwMDAwNDI3IChleHBlcmltZW50YWwpKSAjMjA3IFdlZCBGZWIgMjEgMTU6NDg6MTUgQ0VUIDIwMDEKK1JPTSBmcyBpbiBSQU0sIHNpemUgMTM3NjI1NiBieXRlcworU2V0dGluZyB1cCBwYWdpbmcgYW5kIHRoZSBNTVUuCitPbiBub2RlIDAgdG90YWxwYWdlczogMjA0OAorem9uZSgwKTogMjA0OCBwYWdlcy4KK3pvbmUoMSk6IDAgcGFnZXMuCit6b25lKDIpOiAwIHBhZ2VzLgorTGludXgvQ1JJUyBwb3J0IG9uIEVUUkFYIDEwMExYIChjKSAyMDAxIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKK0tlcm5lbCBjb21tYW5kIGxpbmU6IAorQ2FsaWJyYXRpbmcgZGVsYXkgbG9vcC4uLiAxOS45MSBCb2dvTUlQUworTWVtb3J5OiAxMzg3MmsvMTYzODRrIGF2YWlsYWJsZSAoNTg3ayBrZXJuZWwgY29kZSwgMjUxMmsgcmVzZXJ2ZWQsIDQ0ayBkYXRhLCAyNGsgaW5pdCkKK2ttZW1fY3JlYXRlOiBGb3JjaW5nIHNpemUgd29yZCBhbGlnbm1lbnQgLSB2bV9hcmVhX3N0cnVjdAora21lbV9jcmVhdGU6IEZvcmNpbmcgc2l6ZSB3b3JkIGFsaWdubWVudCAtIGZpbHAKK0RlbnRyeS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDIwNDggKG9yZGVyOiAxLCAxNjM4NCBieXRlcykKK0J1ZmZlci1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDIwNDggKG9yZGVyOiAwLCA4MTkyIGJ5dGVzKQorUGFnZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDIwNDggKG9yZGVyOiAwLCA4MTkyIGJ5dGVzKQora21lbV9jcmVhdGU6IEZvcmNpbmcgc2l6ZSB3b3JkIGFsaWdubWVudCAtIGtpb2J1Zgora21lbV9jcmVhdGU6IEZvcmNpbmcgc2l6ZSB3b3JkIGFsaWdubWVudCAtIGJkZXZfY2FjaGUKK0lub2RlLWNhY2hlIGhhc2ggdGFibGUgZW50cmllczogMTAyNCAob3JkZXI6IDAsIDgxOTIgYnl0ZXMpCitrbWVtX2NyZWF0ZTogRm9yY2luZyBzaXplIHdvcmQgYWxpZ25tZW50IC0gaW5vZGVfY2FjaGUKK1BPU0lYIGNvbmZvcm1hbmNlIHRlc3RpbmcgYnkgVU5JRklYCitMaW51eCBORVQ0LjAgZm9yIExpbnV4IDIuNAorQmFzZWQgdXBvbiBTd2Fuc2VhIFVuaXZlcnNpdHkgQ29tcHV0ZXIgU29jaWV0eSBORVQzLjAzOQorU3RhcnRpbmcga3N3YXBkIHYxLjgKK2ttZW1fY3JlYXRlOiBGb3JjaW5nIHNpemUgd29yZCBhbGlnbm1lbnQgLSBmaWxlIGxvY2sgY2FjaGUKK2ttZW1fY3JlYXRlOiBGb3JjaW5nIHNpemUgd29yZCBhbGlnbm1lbnQgLSBibGtkZXZfcmVxdWVzdHMKK2Jsb2NrOiBxdWV1ZWQgc2VjdG9ycyBtYXgvbG93IDkxMDlrQi8zMDM2a0IsIDY0IHNsb3RzIHBlciBxdWV1ZQorRVRSQVggMTAwTFggMTAvMTAwTUJpdCBldGhlcm5ldCB2Mi4wIChjKSAyMDAwIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKK2V0aDAgaW5pdGlhbGl6ZWQKK2V0aDA6IGNoYW5nZWQgTUFDIHRvIDAwOjQwOjhDOkNEOjAwOjAwCitFVFJBWCAxMDBMWCBzZXJpYWwtZHJpdmVyICRSZXZpc2lvbjogMS43ICQsIChjKSAyMDAwIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKK3R0eVMwIGF0IDB4YjAwMDAwNjAgaXMgYSBidWlsdGluIFVBUlQgd2l0aCBETUEKK3R0eVMxIGF0IDB4YjAwMDAwNjggaXMgYSBidWlsdGluIFVBUlQgd2l0aCBETUEKK3R0eVMyIGF0IDB4YjAwMDAwNzAgaXMgYSBidWlsdGluIFVBUlQgd2l0aCBETUEKK3R0eVMzIGF0IDB4YjAwMDAwNzggaXMgYSBidWlsdGluIFVBUlQgd2l0aCBETUEKK0F4aXMgZmxhc2ggbWFwcGluZzogMjAwMDAwIGF0IDUwMDAwMDAwCitBeGlzIGZsYXNoOiBGb3VuZCAxIHgxNiBDRkkgZGV2aWNlIGF0IDB4MCBpbiAxNiBiaXQgbW9kZQorIEFtZC9GdWppdHN1IEV4dGVuZGVkIFF1ZXJ5IFRhYmxlIHYxLjAgYXQgMHgwMDQwCitBeGlzIGZsYXNoOiBKRURFQyBEZXZpY2UgSUQgaXMgMHhDNC4gQXNzdW1pbmcgYnJva2VuIENGSSB0YWJsZS4KK0F4aXMgZmxhc2g6IFN3YXBwaW5nIGVyYXNlIHJlZ2lvbnMgZm9yIGJyb2tlbiBDRkkgdGFibGUuCitudW1iZXIgb2YgQ0ZJIGNoaXBzOiAxCisgVXNpbmcgZGVmYXVsdCBwYXJ0aXRpb24gdGFibGUKK0kyQyBkcml2ZXIgdjIuMiwgKGMpIDE5OTktMjAwMSBBeGlzIENvbW11bmljYXRpb25zIEFCCitFVFJBWCAxMDBMWCBHUElPIGRyaXZlciB2Mi4xLCAoYykgMjAwMSBBeGlzIENvbW11bmljYXRpb25zIEFCCitORVQ0OiBMaW51eCBUQ1AvSVAgMS4wIGZvciBORVQ0LjAKK0lQIFByb3RvY29sczogSUNNUCwgVURQLCBUQ1AKK2ttZW1fY3JlYXRlOiBGb3JjaW5nIHNpemUgd29yZCBhbGlnbm1lbnQgLSBpcF9kc3RfY2FjaGUKK0lQOiByb3V0aW5nIGNhY2hlIGhhc2ggdGFibGUgb2YgMTAyNCBidWNrZXRzLCA4S2J5dGVzCitUQ1A6IEhhc2ggdGFibGVzIGNvbmZpZ3VyZWQgKGVzdGFibGlzaGVkIDIwNDggYmluZCAyMDQ4KQorTkVUNDogVW5peCBkb21haW4gc29ja2V0cyAxLjAvU01QIGZvciBMaW51eCBORVQ0LjAuCitWRlM6IE1vdW50ZWQgcm9vdCAoY3JhbWZzIGZpbGVzeXN0ZW0pIHJlYWRvbmx5LgorSW5pdCBzdGFydHMgdXAuLi4KK01vdW50ZWQgbm9uZSBvbiAvcHJvYyBvay4KK1NldHRpbmcgdXAgZXRoMCB3aXRoIGlwIDEwLjEzLjkuMTE2IGFuZCBtYWMgMDA6NDA6OGM6MTg6MDQ6NjAKK2V0aDA6IGNoYW5nZWQgTUFDIHRvIDAwOjQwOjhDOjE4OjA0OjYwCitTZXR0aW5nIHVwIGxvIHdpdGggaXAgMTI3LjAuMC4xCitEZWZhdWx0IGdhdGV3YXkgaXMgMTAuMTMuOS4xCitIb3N0bmFtZSBpcyBiYm94MQorVGVsbmV0ZCBzdGFydGluZywgdXNpbmcgcG9ydCAyMy4KKyAgdXNpbmcgL2Jpbi9zYXNoIGFzIHNoZWxsLgorc2Z0cGRbMTVdOiBzZnRwZCAkUmV2aXNpb246IDEuNyAkIHN0YXJ0aW5nIHVwCisKKworCitBbmQgaGVyZSBpcyBob3cgc29tZSAvcHJvYyBlbnRyaWVzIGxvb2s6CisKKzE3IyBjZCAvcHJvYworMTcjIGNhdCBjcHVpbmZvCitjcHUgICAgICAgICAgICAgOiBDUklTCitjcHUgcmV2aXNpb24gICAgOiAxMAorY3B1IG1vZGVsICAgICAgIDogRVRSQVggMTAwTFgKK2NhY2hlIHNpemUgICAgICA6IDgga0IKK2ZwdSAgICAgICAgICAgICA6IG5vCittbXUgICAgICAgICAgICAgOiB5ZXMKK2V0aGVybmV0ICAgICAgICA6IDEwLzEwMCBNYnBzCit0b2tlbiByaW5nICAgICAgOiBubworc2NzaSAgICAgICAgICAgIDogeWVzCithdGEgICAgICAgICAgICAgOiB5ZXMKK3VzYiAgICAgICAgICAgICA6IHllcworYm9nb21pcHMgICAgICAgIDogOTkuODQKKworMTcjIGNhdCBtZW1pbmZvCisgICAgICAgIHRvdGFsOiAgICB1c2VkOiAgICBmcmVlOiAgc2hhcmVkOiBidWZmZXJzOiAgY2FjaGVkOgorTWVtOiAgIDcwMjg3MzYgICA5MjU2OTYgIDYxMDMwNDAgICAxMTQ2ODggICAgICAgIDAgICAyMjkzNzYKK1N3YXA6ICAgICAgICAwICAgICAgICAwICAgICAgICAwCitNZW1Ub3RhbDogICAgICAgICA2ODY0IGtCCitNZW1GcmVlOiAgICAgICAgICA1OTYwIGtCCitNZW1TaGFyZWQ6ICAgICAgICAgMTEyIGtCCitCdWZmZXJzOiAgICAgICAgICAgICAwIGtCCitDYWNoZWQ6ICAgICAgICAgICAgMjI0IGtCCitBY3RpdmU6ICAgICAgICAgICAgMjI0IGtCCitJbmFjdF9kaXJ0eTogICAgICAgICAwIGtCCitJbmFjdF9jbGVhbjogICAgICAgICAwIGtCCitJbmFjdF90YXJnZXQ6ICAgICAgICAwIGtCCitIaWdoVG90YWw6ICAgICAgICAgICAwIGtCCitIaWdoRnJlZTogICAgICAgICAgICAwIGtCCitMb3dUb3RhbDogICAgICAgICA2ODY0IGtCCitMb3dGcmVlOiAgICAgICAgICA1OTYwIGtCCitTd2FwVG90YWw6ICAgICAgICAgICAwIGtCCitTd2FwRnJlZTogICAgICAgICAgICAwIGtCCisxNyMgbHMgLWwgL2JpbgorLXJ3eHIteHIteCAgMSAzNDIgICAgICAxMDAgICAgICAgICAxMDM1NiAgSmFuIDAxIDAwOjAwIGlmY29uZmlnCistcnd4ci14ci14ICAxIDM0MiAgICAgIDEwMCAgICAgICAgIDE3NTQ4ICBKYW4gMDEgMDA6MDAgaW5pdAorLXJ3eHIteHIteCAgMSAzNDIgICAgICAxMDAgICAgICAgICAgOTQ4OCAgSmFuIDAxIDAwOjAwIHJvdXRlCistcnd4ci14ci14ICAxIDM0MiAgICAgIDEwMCAgICAgICAgIDQ2MDM2ICBKYW4gMDEgMDA6MDAgc2Z0cGQKKy1yd3hyLXhyLXggIDEgMzQyICAgICAgMTAwICAgICAgICAgNDgxMDQgIEphbiAwMSAwMDowMCBzaAorLXJ3eHIteHIteCAgMSAzNDIgICAgICAxMDAgICAgICAgICAxNjI1MiAgSmFuIDAxIDAwOjAwIHRlbG5ldGQKKworCisoQWxsIHByb2dyYW1zIGFyZSBzdGF0aWNhbGx5IGxpbmtlZCB0byB0aGUgbGliYyBhdCB0aGlzIHBvaW50IC0gd2UgaGF2ZSBub3QgcG9ydGVkIHRoZQorIHNoYXJlZCBsaWJyYXJpZXMgeWV0KQorCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcnlwdG8vYXBpLWludHJvLnR4dCBiL0RvY3VtZW50YXRpb24vY3J5cHRvL2FwaS1pbnRyby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkNWI0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3J5cHRvL2FwaS1pbnRyby50eHQKQEAgLTAsMCArMSwyNDQgQEAKKworICAgICAgICAgICAgICAgICAgICBTY2F0dGVybGlzdCBDcnlwdG9ncmFwaGljIEFQSQorICAgICAgICAgICAgICAgICAgIAorSU5UUk9EVUNUSU9OCisKK1RoZSBTY2F0dGVybGlzdCBDcnlwdG8gQVBJIHRha2VzIHBhZ2UgdmVjdG9ycyAoc2NhdHRlcmxpc3RzKSBhcworYXJndW1lbnRzLCBhbmQgd29ya3MgZGlyZWN0bHkgb24gcGFnZXMuICBJbiBzb21lIGNhc2VzIChlLmcuIEVDQgorbW9kZSBjaXBoZXJzKSwgdGhpcyB3aWxsIGFsbG93IGZvciBwYWdlcyB0byBiZSBlbmNyeXB0ZWQgaW4tcGxhY2UKK3dpdGggbm8gY29weWluZy4KKworT25lIG9mIHRoZSBpbml0aWFsIGdvYWxzIG9mIHRoaXMgZGVzaWduIHdhcyB0byByZWFkaWx5IHN1cHBvcnQgSVBzZWMsCitzbyB0aGF0IHByb2Nlc3NpbmcgY2FuIGJlIGFwcGxpZWQgdG8gcGFnZWQgc2tiJ3Mgd2l0aG91dCB0aGUgbmVlZAorZm9yIGxpbmVhcml6YXRpb24uCisKKworREVUQUlMUworCitBdCB0aGUgbG93ZXN0IGxldmVsIGFyZSBhbGdvcml0aG1zLCB3aGljaCByZWdpc3RlciBkeW5hbWljYWxseSB3aXRoIHRoZQorQVBJLgorCisnVHJhbnNmb3JtcycgYXJlIHVzZXItaW5zdGFudGlhdGVkIG9iamVjdHMsIHdoaWNoIG1haW50YWluIHN0YXRlLCBoYW5kbGUgYWxsCitvZiB0aGUgaW1wbGVtZW50YXRpb24gbG9naWMgKGUuZy4gbWFuaXB1bGF0aW5nIHBhZ2UgdmVjdG9ycyksIHByb3ZpZGUgYW4gCithYnN0cmFjdGlvbiB0byB0aGUgdW5kZXJseWluZyBhbGdvcml0aG1zLCBhbmQgaGFuZGxlIGNvbW1vbiBsb2dpY2FsIAorb3BlcmF0aW9ucyAoZS5nLiBjaXBoZXIgbW9kZXMsIEhNQUMgZm9yIGRpZ2VzdHMpLiAgSG93ZXZlciwgYXQgdGhlIHVzZXIgCitsZXZlbCB0aGV5IGFyZSB2ZXJ5IHNpbXBsZS4KKworQ29uY2VwdHVhbGx5LCB0aGUgQVBJIGxheWVyaW5nIGxvb2tzIGxpa2UgdGhpczoKKworICBbdHJhbnNmb3JtIGFwaV0gICh1c2VyIGludGVyZmFjZSkKKyAgW3RyYW5zZm9ybSBvcHNdICAocGVyLXR5cGUgbG9naWMgZ2x1ZSBlLmcuIGNpcGhlci5jLCBkaWdlc3QuYykKKyAgW2FsZ29yaXRobSBhcGldICAoZm9yIHJlZ2lzdGVyaW5nIGFsZ29yaXRobXMpCisgIAorVGhlIGlkZWEgaXMgdG8gbWFrZSB0aGUgdXNlciBpbnRlcmZhY2UgYW5kIGFsZ29yaXRobSByZWdpc3RyYXRpb24gQVBJCit2ZXJ5IHNpbXBsZSwgd2hpbGUgaGlkaW5nIHRoZSBjb3JlIGxvZ2ljIGZyb20gYm90aC4gIE1hbnkgZ29vZCBpZGVhcworZnJvbSBleGlzdGluZyBBUElzIHN1Y2ggYXMgQ3J5cHRvYXBpIGFuZCBOZXR0bGUgaGF2ZSBiZWVuIGFkYXB0ZWQgZm9yIHRoaXMuCisKK1RoZSBBUEkgY3VycmVudGx5IHN1cHBvcnRzIHRocmVlIHR5cGVzIG9mIHRyYW5zZm9ybXM6IENpcGhlcnMsIERpZ2VzdHMgYW5kCitDb21wcmVzc29ycy4gIFRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIGVzcGVjaWFsbHkgc2VlbSB0byBiZSBwZXJmb3JtaW5nCit2ZXJ5IHdlbGwgc28gZmFyLgorCitTdXBwb3J0IGZvciBoYXJkd2FyZSBjcnlwdG8gZGV2aWNlcyB2aWEgYW4gYXN5bmNocm9ub3VzIGludGVyZmFjZSBpcwordW5kZXIgZGV2ZWxvcG1lbnQuCisKK0hlcmUncyBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgdGhlIEFQSToKKworCSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKwkKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CisJY2hhciByZXN1bHRbMTI4XTsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCQorCXRmbSA9IGNyeXB0b19hbGxvY190Zm0oIm1kNSIsIDApOworCWlmICh0Zm0gPT0gTlVMTCkKKwkJZmFpbCgpOworCQkKKwkvKiAuLi4gc2V0IHVwIHRoZSBzY2F0dGVybGlzdHMgLi4uICovCisJCisJY3J5cHRvX2RpZ2VzdF9pbml0KHRmbSk7CisJY3J5cHRvX2RpZ2VzdF91cGRhdGUodGZtLCAmc2csIDIpOworCWNyeXB0b19kaWdlc3RfZmluYWwodGZtLCByZXN1bHQpOworCQorCWNyeXB0b19mcmVlX3RmbSh0Zm0pOworCisgICAgCitNYW55IHJlYWwgZXhhbXBsZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0IG1vZHVsZSAodGNyeXB0LmMpLgorCisKK0NPTkZJR1VSQVRJT04gTk9URVMKKworQXMgVHJpcGxlIERFUyBpcyBwYXJ0IG9mIHRoZSBERVMgbW9kdWxlLCBmb3IgdGhvc2UgdXNpbmcgbW9kdWxhciBidWlsZHMsCithZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIC9ldGMvbW9kcHJvYmUuY29uZjoKKworICBhbGlhcyBkZXMzX2VkZSBkZXMKKworVGhlIE51bGwgYWxnb3JpdGhtcyByZXNpZGUgaW4gdGhlIGNyeXB0b19udWxsIG1vZHVsZSwgc28gdGhlc2UgbGluZXMKK3Nob3VsZCBhbHNvIGJlIGFkZGVkOgorCisgIGFsaWFzIGNpcGhlcl9udWxsIGNyeXB0b19udWxsCisgIGFsaWFzIGRpZ2VzdF9udWxsIGNyeXB0b19udWxsCisgIGFsaWFzIGNvbXByZXNzX251bGwgY3J5cHRvX251bGwKKworVGhlIFNIQTM4NCBhbGdvcml0aG0gc2hhcmVzIGNvZGUgd2l0aGluIHRoZSBTSEE1MTIgbW9kdWxlLCBzbyB5b3UnbGwKK2Fsc28gbmVlZDoKKyAgYWxpYXMgc2hhMzg0IHNoYTUxMgorCisKK0RFVkVMT1BFUiBOT1RFUworCitUcmFuc2Zvcm1zIG1heSBvbmx5IGJlIGFsbG9jYXRlZCBpbiB1c2VyIGNvbnRleHQsIGFuZCBjcnlwdG9ncmFwaGljCittZXRob2RzIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHNvZnRpcnEgYW5kIHVzZXIgY29udGV4dHMuCisKK1doZW4gdXNpbmcgdGhlIEFQSSBmb3IgY2lwaGVycywgcGVyZm9ybWFuY2Ugd2lsbCBiZSBvcHRpbWFsIGlmIGVhY2gKK3NjYXR0ZXJsaXN0IGNvbnRhaW5zIGRhdGEgd2hpY2ggaXMgYSBtdWx0aXBsZSBvZiB0aGUgY2lwaGVyJ3MgYmxvY2sKK3NpemUgKHR5cGljYWxseSA4IGJ5dGVzKS4gIFRoaXMgcHJldmVudHMgaGF2aW5nIHRvIGRvIGFueSBjb3B5aW5nCithY3Jvc3Mgbm9uLWFsaWduZWQgcGFnZSBmcmFnbWVudCBib3VuZGFyaWVzLgorCisKK0FERElORyBORVcgQUxHT1JJVEhNUworCitXaGVuIHN1Ym1pdHRpbmcgYSBuZXcgYWxnb3JpdGhtIGZvciBpbmNsdXNpb24sIGEgbWFuZGF0b3J5IHJlcXVpcmVtZW50CitpcyB0aGF0IGF0IGxlYXN0IGEgZmV3IHRlc3QgdmVjdG9ycyBmcm9tIGtub3duIHNvdXJjZXMgKHByZWZlcmFibHkKK3N0YW5kYXJkcykgYmUgaW5jbHVkZWQuCisKK0NvbnZlcnRpbmcgZXhpc3Rpbmcgd2VsbCBrbm93biBjb2RlIGlzIHByZWZlcnJlZCwgYXMgaXQgaXMgbW9yZSBsaWtlbHkKK3RvIGhhdmUgYmVlbiByZXZpZXdlZCBhbmQgd2lkZWx5IHRlc3RlZC4gIElmIHN1Ym1pdHRpbmcgY29kZSBmcm9tIExHUEwKK3NvdXJjZXMsIHBsZWFzZSBjb25zaWRlciBjaGFuZ2luZyB0aGUgbGljZW5zZSB0byBHUEwgKHNlZSBzZWN0aW9uIDMgb2YKK3RoZSBMR1BMKS4KKworQWxnb3JpdGhtcyBzdWJtaXR0ZWQgbXVzdCBhbHNvIGJlIGdlbmVyYWxseSBwYXRlbnQtZnJlZSAoZS5nLiBJREVBCit3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgbWFpbmxpbmUgdW50aWwgYXJvdW5kIDIwMTEpLCBhbmQgYmUgYmFzZWQKK29uIGEgcmVjb2duaXplZCBzdGFuZGFyZCBhbmQvb3IgaGF2ZSBiZWVuIHN1YmplY3RlZCB0byBhcHByb3ByaWF0ZQorcGVlciByZXZpZXcuCisKK0Fsc28gY2hlY2sgZm9yIGFueSBSRkNzIHdoaWNoIG1heSByZWxhdGUgdG8gdGhlIHVzZSBvZiBzcGVjaWZpYyBhbGdvcml0aG1zLAorYXMgd2VsbCBhcyBnZW5lcmFsIGFwcGxpY2F0aW9uIG5vdGVzIHN1Y2ggYXMgUkZDMjQ1MSAoIlRoZSBFU1AgQ0JDLU1vZGUKK0NpcGhlciBBbGdvcml0aG1zIikuCisKK0l0J3MgYSBnb29kIGlkZWEgdG8gYXZvaWQgdXNpbmcgbG90cyBvZiBtYWNyb3MgYW5kIHVzZSBpbmxpbmVkIGZ1bmN0aW9ucworaW5zdGVhZCwgYXMgZ2NjIGRvZXMgYSBnb29kIGpvYiB3aXRoIGlubGluaW5nLCB3aGlsZSBleGNlc3NpdmUgdXNlIG9mCittYWNyb3MgY2FuIGNhdXNlIGNvbXBpbGF0aW9uIHByb2JsZW1zIG9uIHNvbWUgcGxhdGZvcm1zLgorCitBbHNvIGNoZWNrIHRoZSBUT0RPIGxpc3QgYXQgdGhlIHdlYiBzaXRlIGxpc3RlZCBiZWxvdyB0byBzZWUgd2hhdCBwZW9wbGUKK21pZ2h0IGFscmVhZHkgYmUgd29ya2luZyBvbi4KKworCitCVUdTCisKK1NlbmQgYnVnIHJlcG9ydHMgdG86CitKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KK0NjOiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+CisKKworRlVSVEhFUiBJTkZPUk1BVElPTgorCitGb3IgZnVydGhlciBwYXRjaGVzIGFuZCB2YXJpb3VzIHVwZGF0ZXMsIGluY2x1ZGluZyB0aGUgY3VycmVudCBUT0RPCitsaXN0LCBzZWU6CitodHRwOi8vc2FtYmEub3JnL35qYW1lc20vY3J5cHRvLworCisKK0FVVEhPUlMKKworSmFtZXMgTW9ycmlzCitEYXZpZCBTLiBNaWxsZXIKKworCitDUkVESVRTCisKK1RoZSBmb2xsb3dpbmcgcGVvcGxlIHByb3ZpZGVkIGludmFsdWFibGUgZmVlZGJhY2sgZHVyaW5nIHRoZSBkZXZlbG9wbWVudAorb2YgdGhlIEFQSToKKworICBBbGV4ZXkgS3V6bmV0em92CisgIFJ1c3R5IFJ1c3NlbGwKKyAgSGVyYmVydCBWYWxlcmlvIFJpZWRlbAorICBKZWZmIEdhcnppaworICBNaWNoYWVsIFJpY2hhcmRzb24KKyAgQW5kcmV3IE1vcnRvbgorICBJbmdvIE9lc2VyCisgIENocmlzdG9waCBIZWxsd2lnCisKK1BvcnRpb25zIG9mIHRoaXMgQVBJIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBmb2xsb3dpbmcgcHJvamVjdHM6CisgIAorICBLZXJuZWxpIENyeXB0b2FwaSAoaHR0cDovL3d3dy5rZXJuZWxpLm9yZy8pCisgICAgQWxleGFuZGVyIEtqZWxkYWFzCisgICAgSGVyYmVydCBWYWxlcmlvIFJpZWRlbAorICAgIEt5bGUgTWNNYXJ0aW4KKyAgICBKZWFuLUx1YyBDb29rZQorICAgIERhdmlkIEJyeXNvbgorICAgIENsZW1lbnMgRnJ1aHdpcnRoCisgICAgVG9iaWFzIFJpbmdzdHJvbQorICAgIEhhcmFsZCBXZWx0ZQorCithbmQ7CisgIAorICBOZXR0bGUgKGh0dHA6Ly93d3cubHlzYXRvci5saXUuc2Uvfm5pc3NlL25ldHRsZS8pCisgICAgTmllbHMgTfZsbGVyCisKK09yaWdpbmFsIGRldmVsb3BlcnMgb2YgdGhlIGNyeXB0byBhbGdvcml0aG1zOgorCisgIERhbmEgTC4gSG93IChERVMpCisgIEFuZHJldyBUcmlkZ2VsbCBhbmQgU3RldmUgRnJlbmNoIChNRDQpCisgIENvbGluIFBsdW1iIChNRDUpCisgIFN0ZXZlIFJlaWQgKFNIQTEpCisgIEplYW4tTHVjIENvb2tlIChTSEEyNTYsIFNIQTM4NCwgU0hBNTEyKQorICBLYXp1bm9yaSBNaXlhemF3YSAvIFVTQUdJIChITUFDKQorICBNYXR0aGV3IFNrYWxhIChUd29maXNoKQorICBEYWcgQXJuZSBPc3ZpayAoU2VycGVudCkKKyAgQnJpYW4gR2xhZG1hbiAoQUVTKQorICBLYXJ0aWtleSBNYWhlbmRyYSBCaGF0dCAoQ0FTVDYpCisgIEpvbiBPYmVyaGVpZGUgKEFSQzQpCisgIEpvdW5pIE1hbGluZW4gKE1pY2hhZWwgTUlDKQorCitTSEExIGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEplYW4tRnJhbmNvaXMgRGl2ZQorICAKK0RFUyBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBSYWltYXIgRmFsa2UKKyAgR2lzbGUgU+ZsZW5zbWluZGUKKyAgTmllbHMgTfZsbGVyCisKK0Jsb3dmaXNoIGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwKKyAgS3lsZSBNY01hcnRpbgorCitUd29maXNoIGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIFdlcm5lciBLb2NoCisgIE1hcmMgTXV0egorCitTSEEyNTYvMzg0LzUxMiBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBbmRyZXcgTWNEb25hbGQKKyAgS3lsZSBNY01hcnRpbgorICBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsCisgIAorQUVTIGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEFsZXhhbmRlciBLamVsZGFhcworICBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsCisgIEt5bGUgTWNNYXJ0aW4KKyAgQWRhbSBKLiBSaWNodGVyCisgIEZydWh3aXJ0aCBDbGVtZW5zIChpNTg2KQorICBMaW51cyBUb3J2YWxkcyAoaTU4NikKKworQ0FTVDUgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgS2FydGlrZXkgTWFoZW5kcmEgQmhhdHQgKG9yaWdpbmFsIGRldmVsb3BlcnMgdW5rbm93biwgRlNGIGNvcHlyaWdodCkuCisKK1RFQS9YVEVBIGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEFhcm9uIEdyb3RoZQorCitLaGF6YWQgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgQWFyb24gR3JvdGhlCisKK1doaXJscG9vbCBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBYXJvbiBHcm90aGUKKyAgSmVhbi1MdWMgQ29va2UKKworQW51YmlzIGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEFhcm9uIEdyb3RoZQorCitUaWdlciBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBYXJvbiBHcm90aGUKKworR2VuZXJpYyBzY2F0dGVyd2FsayBjb2RlIGJ5IEFkYW0gSi4gUmljaHRlciA8YWRhbUB5Z2dkcmFzaWwuY29tPgorCitQbGVhc2Ugc2VuZCBhbnkgY3JlZGl0cyB1cGRhdGVzIG9yIGNvcnJlY3Rpb25zIHRvOgorSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3J5cHRvL2Rlc2NvcmUtcmVhZG1lLnR4dCBiL0RvY3VtZW50YXRpb24vY3J5cHRvL2Rlc2NvcmUtcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjY0NzRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jcnlwdG8vZGVzY29yZS1yZWFkbWUudHh0CkBAIC0wLDAgKzEsMzUyIEBACitCZWxvdyBpcyB0aGUgb3JnaW5hbCBSRUFETUUgZmlsZSBmcm9tIHRoZSBkZXNjb3JlLnNoYXIgcGFja2FnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZXMgLSBmYXN0ICYgcG9ydGFibGUgREVTIGVuY3J5cHRpb24gJiBkZWNyeXB0aW9uLgorQ29weXJpZ2h0IChDKSAxOTkyICBEYW5hIEwuIEhvdworCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitBdXRob3IncyBhZGRyZXNzOiBob3dAaXNsLnN0YW5mb3JkLmVkdQorCiskSWQ6IFJFQURNRSx2IDEuMTUgMTk5Mi8wNS8yMCAwMDoyNTozMiBob3cgRSAkCisKKworPT0+PiBUbyBjb21waWxlIGFmdGVyIHVudGFycmluZy91bnNoYXJyaW5nLCBqdXN0IGBtYWtlJyA8PD09CisKKworVGhpcyBwYWNrYWdlIHdhcyBkZXNpZ25lZCB3aXRoIHRoZSBmb2xsb3dpbmcgZ29hbHM6CisxLglIaWdoZXN0IHBvc3NpYmxlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBQRVJGT1JNQU5DRS4KKzIuCVBPUlRBQklMSVRZIHRvIGFueSBieXRlLWFkZHJlc3NhYmxlIGhvc3Qgd2l0aCBhIDMyYml0IHVuc2lnbmVkIEMgdHlwZQorMy4JUGx1Zy1jb21wYXRpYmxlIHJlcGxhY2VtZW50IGZvciBLRVJCRVJPUydzIGxvdy1sZXZlbCByb3V0aW5lcy4KKworVGhpcyBzZWNvbmQgcmVsZWFzZSBpbmNsdWRlcyBhIG51bWJlciBvZiBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMgZm9yCityZWdpc3Rlci1zdGFydmVkIG1hY2hpbmVzLiAgTXkgZGlzY3Vzc2lvbnMgd2l0aCBSaWNoYXJkIE91dGVyYnJpZGdlLAorNzE3NTUuMjA0QGNvbXB1c2VydmUuY29tLCBzcGFya2VkIGEgbnVtYmVyIG9mIHRoZXNlIGVuaGFuY2VtZW50cy4KKworVG8gbW9yZSByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIGNvZGUgaW4gdGhpcyBwYWNrYWdlLCBpbnNwZWN0IGRlc1NtYWxsRmlwcy5pCisoY3JlYXRlZCBieSB0eXBpbmcgYG1ha2UnKSBCRUZPUkUgeW91IHRhY2tsZSBkZXNDb2RlLmguICBUaGUgbGF0dGVyIGlzIHNldAordXAgaW4gYSBwYXJhbWV0ZXJpemVkIGZhc2hpb24gc28gaXQgY2FuIGVhc2lseSBiZSBtb2RpZmllZCBieSBzcGVlZC1kYWVtb24KK2hhY2tlcnMgaW4gcHVyc3VpdCBvZiB0aGF0IGxhc3QgbWljcm9zZWNvbmQuICBZb3Ugd2lsbCBmaW5kIGl0IG1vcmUKK2lsbHVtaW5hdGluZyB0byBpbnNwZWN0IG9uZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwKK2FuZCB0aGVuIG1vdmUgb24gdG8gdGhlIGNvbW1vbiBhYnN0cmFjdCBza2VsZXRvbiB3aXRoIHRoaXMgb25lIGluIG1pbmQuCisKKworcGVyZm9ybWFuY2UgY29tcGFyaXNvbiB0byBvdGhlciBhdmFpbGFibGUgZGVzIGNvZGUgd2hpY2ggaSBjb3VsZAorY29tcGlsZSBvbiBhIFNQQVJDU3RhdGlvbiAxIChjYyAtTzQsIGdjYyAtTzIpOgorCit0aGlzIGNvZGUgKGJ5dGUtb3JkZXIgaW5kZXBlbmRlbnQpOgorICAgMzB1cyBwZXIgZW5jcnlwdGlvbiAob3B0aW9uczogNjRrIHRhYmxlcywgbm8gSVAvRlApCisgICAzM3VzIHBlciBlbmNyeXB0aW9uIChvcHRpb25zOiA2NGsgdGFibGVzLCBGSVBTIHN0YW5kYXJkIGJpdCBvcmRlcmluZykKKyAgIDQ1dXMgcGVyIGVuY3J5cHRpb24gKG9wdGlvbnM6ICAyayB0YWJsZXMsIG5vIElQL0ZQKQorICAgNDh1cyBwZXIgZW5jcnlwdGlvbiAob3B0aW9uczogIDJrIHRhYmxlcywgRklQUyBzdGFuZGFyZCBiaXQgb3JkZXJpbmcpCisgIDI3NXVzIHRvIHNldCBhIG5ldyBrZXkgKHVzZXMgMWsgb2Yga2V5IHRhYmxlcykKKwl0aGlzIGhhcyB0aGUgcXVpY2tlc3QgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHJvdXRpbmVzIGkndmUgc2Vlbi4KKwlzaW5jZSBpIHdhcyBpbnRlcmVzdGVkIGluIGZhc3QgZGVzIGZpbHRlcnMgcmF0aGVyIHRoYW4gY3J5cHQoMykKKwlhbmQgcGFzc3dvcmQgY3JhY2tpbmcsIGkgaGF2ZW4ndCByZWFsbHkgYm90aGVyZWQgeWV0IHRvIHNwZWVkIHVwCisJdGhlIGtleSBzZXR0aW5nIHJvdXRpbmUuIGFsc28sIGkgaGF2ZSBubyBpbnRlcmVzdCBpbiByZS1pbXBsZW1lbnRpbmcKKwlhbGwgdGhlIG90aGVyIGp1bmsgaW4gdGhlIG1pdCBrZXJiZXJvcyBkZXMgbGlicmFyeSwgc28gaSd2ZSBqdXN0CisJcHJvdmlkZWQgbXkgcm91dGluZXMgd2l0aCBsaXR0bGUgc3R1YiBpbnRlcmZhY2VzIHNvIHRoZXkgY2FuIGJlCisJdXNlZCBhcyBkcm9wLWluIHJlcGxhY2VtZW50cyB3aXRoIG1pdCdzIGNvZGUgb3IgYW55IG9mIHRoZSBtaXQtCisJY29tcGF0aWJsZSBwYWNrYWdlcyBiZWxvdy4gKG5vdGUgdGhhdCB0aGUgZmlyc3QgdHdvIHRpbWluZ3MgYWJvdmUKKwlhcmUgaGlnaGx5IHZhcmlhYmxlIGJlY2F1c2Ugb2YgY2FjaGUgZWZmZWN0cykuCisKK2tlcmJlcm9zIGRlcyByZXBsYWNlbWVudCBmcm9tIGF1c3RyYWxpYSAodmVyc2lvbiAxLjk1KToKKyAgIDUzdXMgcGVyIGVuY3J5cHRpb24gKHVzZXMgMmsgb2YgdGFibGVzKQorICAgOTZ1cyB0byBzZXQgYSBuZXcga2V5ICh1c2VzIDIuMjVrIG9mIGtleSB0YWJsZXMpCisJc28gZGVzcGl0ZSB0aGUgYXV0aG9yJ3MgaW5jbHVzaW9uIG9mIHNvbWUgb2YgdGhlIHBlcmZvcm1hbmNlCisJaW1wcm92ZW1lbnRzIGkgaGFkIHN1Z2dlc3RlZCB0byBoaW0sIHRoaXMgcGFja2FnZSdzCisJZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGlzIHN0aWxsIHNsb3dlciBvbiB0aGUgc3BhcmMgYW5kIDY4MDAwLgorCW1vcmUgc3BlY2lmaWNhbGx5LCAxOS00MCUgc2xvd2VyIG9uIHRoZSA2ODAyMCBhbmQgMTEtMzUlIHNsb3dlcgorCW9uIHRoZSBzcGFyYywgIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXI7CisJaW4gZnVsbCBnb3J5IGRldGFpbCAoQUxUX0VDQiBpcyBhIGxpYmRlcyB2YXJpYW50KToKKwljb21waWxlciAgIAltYWNoaW5lCQlkZXNDb3JlCWxpYmRlcwlBTFRfRUNCCXNsb3dlciBieQorCWdjYyAyLjEgLU8yCVN1biAzLzExMAkzMDQgIHVTCTM2OS41dVMJNDYxLjh1UwkgMjIlCisJY2MgICAgICAtTzEJU3VuIDMvMTEwCTMzNiAgdVMJNDM2LjZ1UwkzOTkuM3VTCSAxOSUKKwljYyAgICAgIC1PMglTdW4gMy8xMTAJMzYwICB1Uwk1MzIuNHVTCTUwNS4xdVMJIDQwJQorCWNjICAgICAgLU80CVN1biAzLzExMAkzNjUgIHVTCTUzMi4zdVMJNTA1LjN1UwkgMzglCisJZ2NjIDIuMSAtTzIJU3VuIDQvNTAJIDQ4ICB1UwkgNTMuNHVTCSA1Ny41dVMJIDExJQorCWNjICAgICAgLU8yCVN1biA0LzUwCSA0OCAgdVMJIDY0LjZ1UwkgNjQuN3VTCSAzNSUKKwljYyAgICAgIC1PNAlTdW4gNC81MAkgNDggIHVTCSA2NC43dVMJIDY0Ljl1UwkgMzUlCisJKG15IHRpbWUgbWVhc3VyZW1lbnRzIGFyZSBub3QgYXMgYWNjdXJhdGUgYXMgaGlzKS4KKyAgIHRoZSBjb21tZW50cyBpbiBteSBmaXJzdCByZWxlYXNlIG9mIGRlc0NvcmUgb24gdmVyc2lvbiAxLjkyOgorICAgNjh1cyBwZXIgZW5jcnlwdGlvbiAodXNlcyAyayBvZiB0YWJsZXMpCisgICA5NnVzIHRvIHNldCBhIG5ldyBrZXkgKHVzZXMgMi4yNWsgb2Yga2V5IHRhYmxlcykKKwl0aGlzIGlzIGEgdmVyeSBuaWNlIHBhY2thZ2Ugd2hpY2ggaW1wbGVtZW50cyB0aGUgbW9zdCBpbXBvcnRhbnQKKwlvZiB0aGUgb3B0aW1pemF0aW9ucyB3aGljaCBpIGRpZCBpbiBteSBlbmNyeXB0aW9uIHJvdXRpbmVzLgorCWl0J3MgYSBiaXQgd2VhayBvbiBjb21tb24gbG93LWxldmVsIG9wdGltaXphdGlvbnMgd2hpY2ggaXMgd2h5CisJaXQncyAzOSUtMTA2JSBzbG93ZXIuICBiZWNhdXNlIGhlIHdhcyBpbnRlcmVzdGVkIGluIGZhc3QgY3J5cHQoMykgYW5kCisJcGFzc3dvcmQtY3JhY2tpbmcgYXBwbGljYXRpb25zLCAgaGUgYWxzbyB1c2VkIHRoZSBzYW1lIGlkZWFzIHRvCisJc3BlZWQgdXAgdGhlIGtleS1zZXR0aW5nIHJvdXRpbmVzIHdpdGggaW1wcmVzc2l2ZSByZXN1bHRzLgorCShhdCBzb21lIHBvaW50IGkgbWF5IGRvIHRoZSBzYW1lIGluIG15IHBhY2thZ2UpLiAgaGUgYWxzbyBpbXBsZW1lbnRzCisJdGhlIHJlc3Qgb2YgdGhlIG1pdCBkZXMgbGlicmFyeS4KKwkoY29kZSBmcm9tIGVheUBwc3ljaC5wc3kudXEub3ouYXUgdmlhIGNvbXAuc291cmNlcy5taXNjKQorCitmYXN0IGNyeXB0KDMpIHBhY2thZ2UgZnJvbSBkZW5tYXJrOgorCXRoZSBkZXMgcm91dGluZSBoZXJlIGlzIGJ1cmllZCBpbnNpZGUgYSBsb29wIHRvIGRvIHRoZQorCWNyeXB0IGZ1bmN0aW9uIGFuZCBpIGRpZG4ndCBmZWVsIGxpa2UgcmlwcGluZyBpdCBvdXQgYW5kIG1lYXN1cmluZworCXBlcmZvcm1hbmNlLiBoaXMgY29kZSB0YWtlcyAyNiBzcGFyYyBpbnN0cnVjdGlvbnMgdG8gY29tcHV0ZSBvbmUKKwlkZXMgaXRlcmF0aW9uOyBhYm92ZSwgUXVpY2sgKDY0aykgdGFrZXMgMjEgYW5kIFNtYWxsICgyaykgdGFrZXMgMzcuCisJaGUgY2xhaW1zIHRvIHVzZSAyODBrIG9mIHRhYmxlcyBidXQgdGhlIGl0ZXJhdGlvbiBjYWxjdWxhdGlvbiBzZWVtcworCXRvIHVzZSBvbmx5IDEyOGsuICBoaXMgdGFibGVzIGFuZCBjb2RlIGFyZSBtYWNoaW5lIGluZGVwZW5kZW50LgorCShjb2RlIGZyb20gZ2xhZEBkYWltaS5hYXUuZGsgdmlhIGFsdC5zb3VyY2VzIG9yIGNvbXAuc291cmNlcy5taXNjKQorCitzd2VkaXNoIHJlaW1wbGVtZW50YXRpb24gb2YgS2VyYmVyb3MgZGVzIGxpYnJhcnkKKyAgMTA4dXMgcGVyIGVuY3J5cHRpb24gKHVzZXMgMzRrIHdvcnRoIG9mIHRhYmxlcykKKyAgMTM0dXMgdG8gc2V0IGEgbmV3IGtleSAodXNlcyAzMmsgb2Yga2V5IHRhYmxlcyB0byBnZXQgdGhpcyBzcGVlZCEpCisJdGhlIHRhYmxlcyB1c2VkIHNlZW0gdG8gYmUgbWFjaGluZS1pbmRlcGVuZGVudDsKKwloZSBzZWVtcyB0byBoYXZlIGluY2x1ZGVkIGEgbG90IG9mIHNwZWNpYWwgY2FzZSBjb2RlCisJc28gdGhhdCwgZS5nLiwgYGxvbmcnIGxvYWRzIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgNCBgY2hhcicgbG9hZHMKKwl3aGVuIHRoZSBtYWNoaW5lJ3MgYXJjaGl0ZWN0dXJlIGFsbG93cyBpdC4KKwkoY29kZSBvYnRhaW5lZCBmcm9tIGNoYWxtZXJzLnNlOnB1Yi9kZXMpCisKK2NyYWNrIDMuM2MgcGFja2FnZSBmcm9tIGVuZ2xhbmQ6CisJYXMgaW4gY3J5cHQgYWJvdmUsIHRoZSBkZXMgcm91dGluZSBpcyBidXJpZWQgaW4gYSBsb29wLiBpdCdzCisJYWxzbyB2ZXJ5IG1vZGlmaWVkIGZvciBjcnlwdC4gIGhpcyBpdGVyYXRpb24gY29kZSB1c2VzIDE2aworCW9mIHRhYmxlcyBhbmQgYXBwZWFycyB0byBiZSBzbG93LgorCShjb2RlIG9idGFpbmVkIGZyb20gYWVtQGFiZXIuYWMudWsgdmlhIGFsdC5zb3VyY2VzIG9yIGNvbXAuc291cmNlcy5taXNjKQorCitgYGhpZ2hseSBvcHRpbWl6ZWQnJyBhbmQgdHdlYWtlZCBLZXJiZXJvcy9BdGhlbmEgY29kZSAoYnl0ZS1vcmRlciBkZXBlbmRlbnQpOgorICAxNjV1cyBwZXIgZW5jcnlwdGlvbiAodXNlcyA2ayB3b3J0aCBvZiB0YWJsZXMpCisgIDQ3OHVzIHRvIHNldCBhIG5ldyBrZXkgKHVzZXMgPDFrIG9mIGtleSB0YWJsZXMpCisJc28gZGVzcGl0ZSB0aGUgY29tbWVudHMgaW4gdGhpcyBjb2RlLCBpdCB3YXMgcG9zc2libGUgdG8gZ2V0CisJZmFzdGVyIGNvZGUgQU5EIHNtYWxsZXIgdGFibGVzLCBhcyB3ZWxsIGFzIG1ha2luZyB0aGUgdGFibGVzCisJbWFjaGluZS1pbmRlcGVuZGVudC4KKwkoY29kZSBvYnRhaW5lZCBmcm9tIHByZXAuYWkubWl0LmVkdSkKKworVUMgQmVya2VsZXkgY29kZSAoZGVwZW5kcyBvbiBtYWNoaW5lLWVuZGVkbmVzcyk6CisgIDIyNnVzIHBlciBlbmNyeXB0aW9uCisxMDg0OHVzIHRvIHNldCBhIG5ldyBrZXkKKwl0YWJsZSBzaXplcyBhcmUgdW5jbGVhciwgYnV0IHRoZXkgZG9uJ3QgbG9vayB2ZXJ5IHNtYWxsCisJKGNvZGUgb2J0YWluZWQgZnJvbSB3dWFyY2hpdmUud3VzdGwuZWR1KQorCisKK21vdGl2YXRpb24gYW5kIGhpc3RvcnkKKworYSB3aGlsZSBhZ28gaSB3YW50ZWQgc29tZSBkZXMgcm91dGluZXMgYW5kIHRoZSByb3V0aW5lcyBkb2N1bWVudGVkIG9uIHN1bidzCittYW4gcGFnZXMgZWl0aGVyIGRpZG4ndCBleGlzdCBvciBkdW1wZWQgY29yZS4gIGkgaGFkIGhlYXJkIG9mIGtlcmJlcm9zLAorYW5kIGtuZXcgdGhhdCBpdCB1c2VkIGRlcywgIHNvIGkgZmlndXJlZCBpJ2QgdXNlIGl0cyByb3V0aW5lcy4gIGJ1dCBvbmNlCitpIGdvdCBpdCBhbmQgbG9va2VkIGF0IHRoZSBjb2RlLCAgaXQgcmVhbGx5IHNldCBvZmYgYSBsb3Qgb2YgcGV0IHBlZXZlcyAtCitpdCB3YXMgdG9vIGNvbnZvbHV0ZWQsIHRoZSBjb2RlIGhhZCBiZWVuIHdyaXR0ZW4gd2l0aG91dCB0YWtpbmcKK2FkdmFudGFnZSBvZiB0aGUgcmVndWxhciBzdHJ1Y3R1cmUgb2Ygb3BlcmF0aW9ucyBzdWNoIGFzIElQLCBFLCBhbmQgRlAKKyhpLmUuIHRoZSBhdXRob3IgZGlkbid0IHNpdCBkb3duIGFuZCB0aGluayBiZWZvcmUgY29kaW5nKSwKK2l0IHdhcyBleGNlc3NpdmVseSBzbG93LCAgdGhlIGF1dGhvciBoYWQgYXR0ZW1wdGVkIHRvIGNsYXJpZnkgdGhlIGNvZGUKK2J5IGFkZGluZyBNT1JFIHN0YXRlbWVudHMgdG8gbWFrZSB0aGUgZGF0YSBtb3ZlbWVudCBtb3JlIGBjb25zaXN0ZW50JworaW5zdGVhZCBvZiBzaW1wbGlmeWluZyBoaXMgaW1wbGVtZW50YXRpb24gYW5kIGN1dHRpbmcgZG93biBvbiBhbGwgZGF0YQorbW92ZW1lbnQgKGluIHBhcnRpY3VsYXIsIGhpcyB1c2Ugb2YgTDEsIFIxLCBMMiwgUjIpLCBhbmQgaXQgd2FzIGZ1bGwgb2YKK2lkaW90aWMgYHR3ZWFrcycgZm9yIHBhcnRpY3VsYXIgbWFjaGluZXMgd2hpY2ggZmFpbGVkIHRvIGRlbGl2ZXIgc2lnbmlmaWNhbnQKK3NwZWVkdXBzIGJ1dCB3aGljaCBkaWQgb2JmdXNjYXRlIGV2ZXJ5dGhpbmcuICBzbyBpIHRvb2sgdGhlIHRlc3QgZGF0YQorZnJvbSBoaXMgdmVyaWZpY2F0aW9uIHByb2dyYW0gYW5kIHJld3JvdGUgZXZlcnl0aGluZyBlbHNlLgorCithIHdoaWxlIGxhdGVyIGkgcmFuIGFjcm9zcyB0aGUgZ3JlYXQgY3J5cHQoMykgcGFja2FnZSBtZW50aW9uZWQgYWJvdmUuCit0aGUgZmFjdCB0aGF0IHRoaXMgZ3V5IHdhcyBjb21wdXRpbmcgMiBzYm94ZXMgcGVyIHRhYmxlIGxvb2t1cCByYXRoZXIKK3RoYW4gb25lIChhbmQgdXNpbmcgYSBNVUNIIGxhcmdlciB0YWJsZSBpbiB0aGUgcHJvY2VzcykgZW1ib2xkZW5lZCBtZSB0bworZG8gdGhlIHNhbWUgLSBpdCB3YXMgYSB0cml2aWFsIGNoYW5nZSBmcm9tIHdoaWNoIGkgaGFkIGJlZW4gc2NhcmVkIGF3YXkKK2J5IHRoZSBsYXJnZXIgdGFibGUgc2l6ZS4gIGluIGhpcyBjYXNlIGhlIGRpZG4ndCByZWFsaXplIHlvdSBkb24ndCBuZWVkIHRvIGtlZXAKK3RoZSB3b3JraW5nIGRhdGEgaW4gVFdPIGZvcm1zLCBvbmUgZm9yIGVhc3kgdXNlIG9mIGhhbGYgdGhlIHNib3hlcyBpbgoraW5kZXhpbmcsIHRoZSBvdGhlciBmb3IgZWFzeSB1c2Ugb2YgdGhlIG90aGVyIGhhbGY7IGluc3RlYWQgeW91IGNhbiBrZWVwCitpdCBpbiB0aGUgZm9ybSBmb3IgdGhlIGZpcnN0IGhhbGYgYW5kIHVzZSBhIHNpbXBsZSByb3RhdGUgdG8gZ2V0IHRoZSBvdGhlcgoraGFsZi4gIHRoaXMgbWVhbnMgaSBoYXZlIChhbG1vc3QpIGhhbGYgdGhlIGRhdGEgbWFuaXB1bGF0aW9uIGFuZCBoYWxmCit0aGUgdGFibGUgc2l6ZS4gIGluIGZhaXJuZXNzIHRob3VnaCBoZSBtaWdodCBiZSBlbmNvZGluZyBzb21ldGhpbmcgcGFydGljdWxhcgordG8gY3J5cHQoMykgaW4gaGlzIHRhYmxlcyAtIGkgZGlkbid0IGNoZWNrLgorCitpJ20gZ2xhZCB0aGF0IGkgaW1wbGVtZW50ZWQgaXQgdGhlIHdheSBpIGRpZCwgYmVjYXVzZSB0aGlzIEMgdmVyc2lvbiBpcworcG9ydGFibGUgKHRoZSBpZmRlZidzIGFyZSBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMpIGFuZCBpdCBpcyBmYXN0ZXIKK3RoYW4gdmVyc2lvbnMgaGFuZC13cml0dGVuIGluIGFzc2VtYmx5IGZvciB0aGUgc3BhcmMhCisKKworcG9ydGluZyBub3RlcworCitvbmUgdGhpbmcgaSBkaWQgbm90IHdhbnQgdG8gZG8gd2FzIHdyaXRlIGFuIGVub3Jtb3VzIG1lc3MKK3doaWNoIGRlcGVuZGVkIG9uIGVuZGVkbmVzcyBhbmQgb3RoZXIgbWFjaGluZSBxdWlya3MsCithbmQgd2hpY2ggbmVjZXNzYXJpbHkgcHJvZHVjZWQgZGlmZmVyZW50IGNvZGUgYW5kIGRpZmZlcmVudCBsb29rdXAgdGFibGVzCitmb3IgZGlmZmVyZW50IG1hY2hpbmVzLiAgc2VlIHRoZSBrZXJiZXJvcyBjb2RlIGZvciBhbiBleGFtcGxlCitvZiB3aGF0IGkgZGlkbid0IHdhbnQgdG8gZG87IGFsbCB0aGVpciBlbmRlZG5lc3Mtc3BlY2lmaWMgYG9wdGltaXphdGlvbnMnCitvYmZ1c2NhdGUgdGhlIGNvZGUgYW5kIGluIHRoZSBlbmQgd2VyZSBzbG93ZXIgdGhhbiBhIHNpbXBsZXIgbWFjaGluZQoraW5kZXBlbmRlbnQgYXBwcm9hY2guICBob3dldmVyLCB0aGVyZSBhcmUgYWx3YXlzIHNvbWUgcG9ydGFiaWxpdHkKK2NvbnNpZGVyYXRpb25zIG9mIHNvbWUga2luZCwgYW5kIGkgaGF2ZSBpbmNsdWRlZCBzb21lIG9wdGlvbnMKK2ZvciB2YXJ5aW5nIG51bWJlcnMgb2YgcmVnaXN0ZXIgdmFyaWFibGVzLgorcGVyaGFwcyBzb21lIHdpbGwgc3RpbGwgcmVnYXJkIHRoZSByZXN1bHQgYXMgYSBtZXNzIQorCisxKSBpIGFzc3VtZSBldmVyeXRoaW5nIGlzIGJ5dGUgYWRkcmVzc2FibGUsIGFsdGhvdWdoIGkgZG9uJ3QgYWN0dWFsbHkKKyAgIGRlcGVuZCBvbiB0aGUgYnl0ZSBvcmRlciwgYW5kIHRoYXQgYnl0ZXMgYXJlIDggYml0cy4KKyAgIGkgYXNzdW1lIHdvcmQgcG9pbnRlcnMgY2FuIGJlIGZyZWVseSBjYXN0IHRvIGFuZCBmcm9tIGNoYXIgcG9pbnRlcnMuCisgICBub3RlIHRoYXQgOTklIG9mIEMgcHJvZ3JhbXMgbWFrZSB0aGVzZSBhc3N1bXB0aW9ucy4KKyAgIGkgYWx3YXlzIHVzZSB1bnNpZ25lZCBjaGFyJ3MgaWYgdGhlIGhpZ2ggYml0IGNvdWxkIGJlIHNldC4KKzIpIHRoZSB0eXBlZGVmIGB3b3JkJyBtZWFucyBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlLgorICAgaWYgYHVuc2lnbmVkIGxvbmcnIGlzIG5vdCAzMiBiaXRzLCBjaGFuZ2UgdGhlIHR5cGVkZWYgaW4gZGVzQ29yZS5oLgorICAgaSBhc3N1bWUgc2l6ZW9mKHdvcmQpID09IDQgRVZFUllXSEVSRS4KKwordGhlICh3b3JzdC1jYXNlKSBjb3N0IG9mIG15IE5PVCBkb2luZyBlbmRlZG5lc3Mtc3BlY2lmaWMgb3B0aW1pemF0aW9ucworaW4gdGhlIGRhdGEgbG9hZGluZyBhbmQgc3RvcmluZyBjb2RlIHN1cnJvdW5kaW5nIHRoZSBrZXkgaXRlcmF0aW9ucworaXMgbGVzcyB0aGFuIDEyJS4gIGFsc28sIHRoZXJlIGlzIHRoZSBhZGRlZCBiZW5lZml0IHRoYXQKK3RoZSBpbnB1dCBhbmQgb3V0cHV0IHdvcmsgYXJlYXMgZG8gbm90IG5lZWQgdG8gYmUgd29yZC1hbGlnbmVkLgorCisKK09QVElPTkFMIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMKKworMSkgeW91IHNob3VsZCBkZWZpbmUgb25lIG9mIGBpMzg2LCcgYHZheCwnIGBtYzY4MDAwLCcgb3IgYHNwYXJjLCcKKyAgIHdoaWNoZXZlciBvbmUgaXMgY2xvc2VzdCB0byB0aGUgY2FwYWJpbGl0aWVzIG9mIHlvdXIgbWFjaGluZS4KKyAgIHNlZSB0aGUgc3RhcnQgb2YgZGVzQ29kZS5oIHRvIHNlZSBleGFjdGx5IHdoYXQgdGhpcyBzZWxlY3Rpb24gaW1wbGllcy4KKyAgIG5vdGUgdGhhdCBpZiB5b3Ugc2VsZWN0IHRoZSB3cm9uZyBvbmUsIHRoZSBkZXMgY29kZSB3aWxsIHN0aWxsIHdvcms7CisgICB0aGVzZSBhcmUganVzdCBwZXJmb3JtYW5jZSB0d2Vha3MuCisyKSBmb3IgdGhvc2Ugd2l0aCBmdW5jdGlvbmFsIGBhc20nIGtleXdvcmRzOiB5b3Ugc2hvdWxkIGNoYW5nZSB0aGUKKyAgIFJPUiBhbmQgUk9MIG1hY3JvcyB0byB1c2UgbWFjaGluZSByb3RhdGUgaW5zdHJ1Y3Rpb25zIGlmIHlvdSBoYXZlIHRoZW0uCisgICB0aGlzIHdpbGwgc2F2ZSAyIGluc3RydWN0aW9ucyBhbmQgYSB0ZW1wb3JhcnkgcGVyIHVzZSwKKyAgIG9yIGFib3V0IDMyIHRvIDQwIGluc3RydWN0aW9ucyBwZXIgZW4vZGVjcnlwdGlvbi4KKyAgIG5vdGUgdGhhdCBnY2MgaXMgc21hcnQgZW5vdWdoIHRvIHRyYW5zbGF0ZSB0aGUgUk9ML1IgbWFjcm9zIGludG8KKyAgIG1hY2hpbmUgcm90YXRlcyEKKwordGhlc2Ugb3B0aW1pemF0aW9ucyBhcmUgYWxsIHJhdGhlciBwZXJzbmlja2V0eSwgeWV0IHdpdGggdGhlbSB5b3Ugc2hvdWxkCitiZSBhYmxlIHRvIGdldCBwZXJmb3JtYW5jZSBlcXVhbCB0byBhc3NlbWJseS1jb2RpbmcsIGV4Y2VwdCB0aGF0OgorMSkgd2l0aCB0aGUgbGFjayBvZiBhIGJpdCByb3RhdGUgb3BlcmF0b3IgaW4gQywgcm90YXRlcyBoYXZlIHRvIGJlIHN5bnRoZXNpemVkCisgICBmcm9tIHNoaWZ0cy4gIHNvIGFjY2VzcyB0byBgYXNtJyB3aWxsIHNwZWVkIHRoaW5ncyB1cCBpZiB5b3VyIG1hY2hpbmUKKyAgIGhhcyByb3RhdGVzLCBhcyBleHBsYWluZWQgYWJvdmUgaW4gKDMpIChub3QgbmVjZXNzYXJ5IGlmIHlvdSB1c2UgZ2NjKS4KKzIpIGlmIHlvdXIgbWFjaGluZSBoYXMgbGVzcyB0aGFuIDEyIDMyLWJpdCByZWdpc3RlcnMgaSBkb3VidCB5b3VyIGNvbXBpbGVyIHdpbGwKKyAgIGdlbmVyYXRlIGdvb2QgY29kZS4KKyAgIGBpMzg2JyB0cmllcyB0byBjb25maWd1cmUgdGhlIGNvZGUgZm9yIGEgMzg2IGJ5IG9ubHkgZGVjbGFyaW5nIDMgcmVnaXN0ZXJzCisgICAoaXQgYXBwZWFycyB0aGF0IGdjYyBjYW4gdXNlIGVieCwgZXNpIGFuZCBlZGkgdG8gaG9sZCByZWdpc3RlciB2YXJpYWJsZXMpLgorICAgaG93ZXZlciwgaWYgeW91IGxpa2UgYXNzZW1ibHkgY29kaW5nLCB0aGUgMzg2IGRvZXMgaGF2ZSA3IDMyLWJpdCByZWdpc3RlcnMsCisgICBhbmQgaWYgeW91IHVzZSBBTEwgb2YgdGhlbSwgdXNlIGBzY2FsZWQgYnkgOCcgYWRkcmVzcyBtb2RlcyB3aXRoIGRpc3BsYWNlbWVudAorICAgYW5kIG90aGVyIHRyaWNrcywgeW91IGNhbiBnZXQgcmVhc29uYWJsZSByb3V0aW5lcyBmb3IgRGVzUXVpY2tDb3JlLi4uIHdpdGgKKyAgIGFib3V0IDI1MCBpbnN0cnVjdGlvbnMgYXBpZWNlLiAgRm9yIERlc1NtYWxsLi4uIGl0IHdpbGwgaGVscCB0byByZWFycmFuZ2UKKyAgIGRlc19rZXltYXAsIGkuZS4sIG5vdyB0aGUgc2JveCAjIGlzIHRoZSBoaWdoIHBhcnQgb2YgdGhlIGluZGV4IGFuZAorICAgdGhlIDYgYml0cyBvZiBkYXRhIGlzIHRoZSBsb3cgcGFydDsgaXQgaGVscHMgdG8gZXhjaGFuZ2UgdGhlc2UuCisgICBzaW5jZSBpIGhhdmUgbm8gd2F5IHRvIGNvbnZlbmllbnRseSB0ZXN0IGl0IGkgaGF2ZSBub3QgcHJvdmlkZWQgbXkKKyAgIHNob2Vob3JuZWQgMzg2IHZlcnNpb24uICBub3RlIHRoYXQgd2l0aCB0aGlzIHJlbGVhc2Ugb2YgZGVzQ29yZSwgZ2NjIGlzIGFibGUKKyAgIHRvIHB1dCBldmVyeXRoaW5nIGluIHJlZ2lzdGVycyghKSwgYW5kIGdlbmVyYXRlIGFib3V0IDM3MCBpbnN0cnVjdGlvbnMgYXBpZWNlCisgICBmb3IgdGhlIERlc1F1aWNrQ29yZS4uLiByb3V0aW5lcyEKKworY29kaW5nIG5vdGVzCisKK3RoZSBlbi9kZWNyeXB0aW9uIHJvdXRpbmVzIGVhY2ggdXNlIDYgbmVjZXNzYXJ5IHJlZ2lzdGVyIHZhcmlhYmxlcywKK3dpdGggNCBiZWluZyBhY3RpdmVseSB1c2VkIGF0IG9uY2UgZHVyaW5nIHRoZSBpbm5lciBpdGVyYXRpb25zLgoraWYgeW91IGRvbid0IGhhdmUgNCByZWdpc3RlciB2YXJpYWJsZXMgZ2V0IGEgbmV3IG1hY2hpbmUuCit1cCB0byA4IG1vcmUgcmVnaXN0ZXJzIGFyZSB1c2VkIHRvIGhvbGQgY29uc3RhbnRzIGluIHNvbWUgY29uZmlndXJhdGlvbnMuCisKK2kgYXNzdW1lIHRoYXQgdGhlIHVzZSBvZiBhIGNvbnN0YW50IGlzIG1vcmUgZXhwZW5zaXZlIHRoYW4gdXNpbmcgYSByZWdpc3RlcjoKK2EpIGFkZGl0aW9uYWxseSwgaSBoYXZlIHRyaWVkIHRvIHB1dCB0aGUgbGFyZ2VyIGNvbnN0YW50cyBpbiByZWdpc3RlcnMuCisgICByZWdpc3RlcmluZyBwcmlvcml0eSB3YXMgYnkgdGhlIGZvbGxvd2luZzoKKwlhbnl0aGluZyBtb3JlIHRoYW4gMTIgYml0cyAoYmFkIGZvciBSSVNDIGFuZCBDSVNDKQorCWdyZWF0ZXIgdGhhbiAxMjcgaW4gdmFsdWUgKGNhbid0IHVzZSBtb3ZxIG9yIGJ5dGUgaW1tZWRpYXRlIG9uIENJU0MpCisJOS0xMjcgKG1heSBub3QgYmUgYWJsZSB0byB1c2UgQ0lTQyBzaGlmdCBpbW1lZGlhdGUgb3IgYWRkL3N1YiBxdWljayksCisJMS04IHdlcmUgbmV2ZXIgcmVnaXN0ZXJlZCwgYmVpbmcgdGhlIGNoZWFwZXN0IGNvbnN0YW50cy4KK2IpIHRoZSBjb21waWxlciBtYXkgYmUgdG9vIHN0dXBpZCB0byByZWFsaXplIHRhYmxlIGFuZCB0YWJsZSsyNTYgc2hvdWxkCisgICBiZSBhc3NpZ25lZCB0byBkaWZmZXJlbnQgY29uc3RhbnQgcmVnaXN0ZXJzIGFuZCBpbnN0ZWFkIHJlcGV0aXRpdmVseQorICAgZG8gdGhlIGFyaXRobWV0aWMsIHNvIGkgYXNzaWduIHRoZXNlIHRvIGV4cGxpY2l0IGBtJyByZWdpc3RlciB2YXJpYWJsZXMKKyAgIHdoZW4gcG9zc2libGUgYW5kIGhlbHBmdWwuCisKK2kgYXNzdW1lIHRoYXQgaW5kZXhpbmcgaXMgY2hlYXBlciBvciBlcXVpdmFsZW50IHRvIGF1dG8gaW5jcmVtZW50L2RlY3JlbWVudCwKK3doZXJlIHRoZSBpbmRleCBpcyA3IGJpdHMgdW5zaWduZWQgb3Igc21hbGxlci4KK3RoaXMgYXNzdW1wdGlvbiBpcyByZXZlcnNlZCBmb3IgNjhrIGFuZCB2YXguCisKK2kgYXNzdW1lIHRoYXQgYWRkcmVzc2VzIGNhbiBiZSBjaGVhcGx5IGZvcm1lZCBmcm9tIHR3byByZWdpc3RlcnMsCitvciBmcm9tIGEgcmVnaXN0ZXIgYW5kIGEgc21hbGwgY29uc3RhbnQuCitmb3IgdGhlIDY4MDAwLCB0aGUgYHR3byByZWdpc3RlcnMgYW5kIHNtYWxsIG9mZnNldCcgZm9ybSBpcyB1c2VkIHNwYXJpbmdseS4KK2FsbCBpbmRleCBzY2FsaW5nIGlzIGRvbmUgZXhwbGljaXRseSAtIG5vIGhpZGRlbiBzaGlmdHMgYnkgbG9nMihzaXplb2YpLgorCit0aGUgY29kZSBpcyB3cml0dGVuIHNvIHRoYXQgZXZlbiBhIGR1bWIgY29tcGlsZXIKK3Nob3VsZCBuZXZlciBuZWVkIG1vcmUgdGhhbiBvbmUgaGlkZGVuIHRlbXBvcmFyeSwKK2luY3JlYXNpbmcgdGhlIGNoYW5jZSB0aGF0IGV2ZXJ5dGhpbmcgd2lsbCBmaXQgaW4gdGhlIHJlZ2lzdGVycy4KK0tFRVAgVEhJUyBNT1JFIFNVQlRMRSBQT0lOVCBJTiBNSU5EIElGIFlPVSBSRVdSSVRFIEFOWVRISU5HLgorKGFjdHVhbGx5LCB0aGVyZSBhcmUgc29tZSBjb2RlIGZyYWdtZW50cyBub3cgd2hpY2ggZG8gcmVxdWlyZSB0d28gdGVtcHMsCitidXQgZml4aW5nIGl0IHdvdWxkIGVpdGhlciBicmVhayB0aGUgc3RydWN0dXJlIG9mIHRoZSBtYWNyb3Mgb3IKK3JlcXVpcmUgZGVjbGFyaW5nIGFub3RoZXIgdGVtcG9yYXJ5KS4KKworCitzcGVjaWFsIGVmZmljaWVudCBkYXRhIGZvcm1hdAorCitiaXRzIGFyZSBtYW5pcHVsYXRlZCBpbiB0aGlzIGFycmFuZ2VtZW50IG1vc3Qgb2YgdGhlIHRpbWUgKFM3IFM1IFMzIFMxKToKKwkwMDMxMzAyOTI4Mjd4eHh4MjQyMzIyMjEyMDE5eHh4eDE2MTUxNDEzMTIxMXh4eHgwODA3MDYwNTA0MDN4eHh4CisodGhlIHggYml0cyBhcmUgc3RpbGwgdGhlcmUsIGknbSBqdXN0IGVtcGhhc2l6aW5nIHdoZXJlIHRoZSBTIGJveGVzIGFyZSkuCitiaXRzIGFyZSByb3RhdGVkIGxlZnQgNCB3aGVuIGNvbXB1dGluZyBTNiBTNCBTMiBTMDoKKwkyODI3MjYyNTI0MjN4eHh4MjAxOTE4MTcxNjE1eHh4eDEyMTExMDA5MDgwN3h4eHgwNDAzMDIwMTAwMzF4eHh4Cit0aGUgcmlnaHRtb3N0IHR3byBiaXRzIGFyZSB1c3VhbGx5IGNsZWFyZWQgc28gdGhlIGxvd2VyIGJ5dGUgY2FuIGJlIHVzZWQKK2FzIGFuIGluZGV4IGludG8gYW4gc2JveCBtYXBwaW5nIHRhYmxlLiB0aGUgbmV4dCB0d28geCdkIGJpdHMgYXJlIHNldAordG8gdmFyaW91cyB2YWx1ZXMgdG8gYWNjZXNzIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgdGFibGVzLgorCisKK2hvdyB0byB1c2UgdGhlIHJvdXRpbmVzCisKK2RhdGF0eXBlczoKKwlwb2ludGVyIHRvIDggYnl0ZSBhcmVhIG9mIHR5cGUgRGVzRGF0YQorCXVzZWQgdG8gaG9sZCBrZXlzIGFuZCBpbnB1dC9vdXRwdXQgYmxvY2tzIHRvIGRlcy4KKworCXBvaW50ZXIgdG8gMTI4IGJ5dGUgYXJlYSBvZiB0eXBlIERlc0tleXMKKwl1c2VkIHRvIGhvbGQgZnVsbCA3NjgtYml0IGtleS4KKwltdXN0IGJlIGxvbmctYWxpZ25lZC4KKworRGVzUXVpY2tJbml0KCkKKwljYWxsIHRoaXMgYmVmb3JlIHVzaW5nIGFueSBvdGhlciByb3V0aW5lIHdpdGggYFF1aWNrJyBpbiBpdHMgbmFtZS4KKwlpdCBnZW5lcmF0ZXMgdGhlIHNwZWNpYWwgNjRrIHRhYmxlIHRoZXNlIHJvdXRpbmVzIG5lZWQuCitEZXNRdWlja0RvbmUoKQorCWZyZWVzIHRoaXMgdGFibGUKKworRGVzTWV0aG9kKG0sIGspCisJbSBwb2ludHMgdG8gYSAxMjhieXRlIGJsb2NrLCBrIHBvaW50cyB0byBhbiA4IGJ5dGUgZGVzIGtleQorCXdoaWNoIG11c3QgaGF2ZSBvZGQgcGFyaXR5IChvciAtMSBpcyByZXR1cm5lZCkgYW5kIHdoaWNoIG11c3QKKwlub3QgYmUgYSAoc2VtaS0pd2VhayBrZXkgKG9yIC0yIGlzIHJldHVybmVkKS4KKwlub3JtYWxseSBEZXNNZXRob2QoKSByZXR1cm5zIDAuCisJbSBpcyBmaWxsZWQgaW4gZnJvbSBrIHNvIHRoYXQgd2hlbiBvbmUgb2YgdGhlIHJvdXRpbmVzIGJlbG93CisJaXMgY2FsbGVkIHdpdGggbSwgdGhlIHJvdXRpbmUgd2lsbCBhY3QgbGlrZSBzdGFuZGFyZCBkZXMKKwllbi9kZWNyeXB0aW9uIHdpdGggdGhlIGtleSBrLiBpZiB5b3UgdXNlIERlc01ldGhvZCwKKwl5b3Ugc3VwcGx5IGEgc3RhbmRhcmQgNTZiaXQga2V5OyBob3dldmVyLCBpZiB5b3UgZmlsbCBpbgorCW0geW91cnNlbGYsIHlvdSB3aWxsIGdldCBhIDc2OGJpdCBrZXkgLSBidXQgdGhlbiBpdCB3b24ndAorCWJlIHN0YW5kYXJkLiAgaXQncyA3NjhiaXRzIG5vdCAxMDI0IGJlY2F1c2UgdGhlIGxlYXN0IHNpZ25pZmljYW50CisJdHdvIGJpdHMgb2YgZWFjaCBieXRlIGFyZSBub3QgdXNlZC4gIG5vdGUgdGhhdCB0aGVzZSB0d28gYml0cworCXdpbGwgYmUgc2V0IHRvIG1hZ2ljIGNvbnN0YW50cyB3aGljaCBzcGVlZCB1cCB0aGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisJb24gc29tZSBtYWNoaW5lcy4gIGFuZCB5ZXMsIGVhY2ggYnl0ZSBjb250cm9scworCWEgc3BlY2lmaWMgc2JveCBkdXJpbmcgYSBzcGVjaWZpYyBpdGVyYXRpb24uCisJeW91IHJlYWxseSBzaG91bGRuJ3QgdXNlIHRoZSA3NjhiaXQgZm9ybWF0IGRpcmVjdGx5OyAgaSBzaG91bGQKKwlwcm92aWRlIGEgcm91dGluZSB0aGF0IGNvbnZlcnRzIDEyOCA2LWJpdCBieXRlcyAoc3BlY2lmaWVkIGluCisJUy1ib3ggbWFwcGluZyBvcmRlciBvciBzb21ldGhpbmcpIGludG8gdGhlIHJpZ2h0IGZvcm1hdCBmb3IgeW91LgorCXRoaXMgd291bGQgZW50YWlsIHNvbWUgYnl0ZSBjb25jYXRlbmF0aW9uIGFuZCByb3RhdGlvbi4KKworRGVze1NtYWxsfFF1aWNrfXtGaXBzfENvcmV9e0VuY3J5cHR8RGVjcnlwdH0oZCwgbSwgcykKKwlwZXJmb3JtcyBkZXMgb24gdGhlIDggYnl0ZXMgYXQgcyBpbnRvIHRoZSA4IGJ5dGVzIGF0IGQuIChkLHM6IGNoYXIgKikuCisJdXNlcyBtIGFzIGEgNzY4Yml0IGtleSBhcyBleHBsYWluZWQgYWJvdmUuCisJdGhlIEVuY3J5cHR8RGVjcnlwdCBjaG9pY2UgaXMgb2J2aW91cy4KKwlGaXBzfENvcmUgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxldGVseSBzdGFuZGFyZCBGSVBTIGluaXRpYWwKKwlhbmQgZmluYWwgcGVybXV0YXRpb24gaXMgZG9uZTsgaWYgbm90LCB0aGVuIHRoZSBkYXRhIGlzIGxvYWRlZAorCWFuZCBzdG9yZWQgaW4gYSBub25zdGFuZGFyZCBiaXQgb3JkZXIgKEZJUFMgdy9vIElQL0ZQKS4KKwlGaXBzIHNsb3dzIGRvd24gUXVpY2sgYnkgMTAlLCBTbWFsbCBieSA5JS4KKwlTbWFsbHxRdWljayBkZXRlcm1pbmVzIHdoZXRoZXIgeW91IHVzZSB0aGUgbm9ybWFsIHJvdXRpbmUKKwlvciB0aGUgY3JhenkgcXVpY2sgb25lIHdoaWNoIGdvYmJsZXMgdXAgNjRrIG1vcmUgb2YgbWVtb3J5LgorCVNtYWxsIGlzIDUwJSBzbG93ZXIgdGhlbiBRdWljaywgYnV0IFF1aWNrIG5lZWRzIDMyIHRpbWVzIGFzIG11Y2gKKwltZW1vcnkuICBRdWljayBpcyBpbmNsdWRlZCBmb3IgcHJvZ3JhbXMgdGhhdCBkbyBub3RoaW5nIGJ1dCBERVMsCisJZS5nLiwgZW5jcnlwdGlvbiBmaWx0ZXJzLCBldGMuCisKKworR2V0dGluZyBpdCB0byBjb21waWxlIG9uIHlvdXIgbWFjaGluZQorCit0aGVyZSBhcmUgbm8gbWFjaGluZS1kZXBlbmRlbmNpZXMgaW4gdGhlIGNvZGUgKHNlZSBwb3J0aW5nKSwKK2V4Y2VwdCBwZXJoYXBzIHRoZSBgbm93KCknIG1hY3JvIGluIGRlc1Rlc3QuYy4KK0FMTCBnZW5lcmF0ZWQgdGFibGVzIGFyZSBtYWNoaW5lIGluZGVwZW5kZW50LgoreW91IHNob3VsZCBlZGl0IHRoZSBNYWtlZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpbWl6YXRpb24gZmxhZ3MKK2ZvciB5b3VyIGNvbXBpbGVyIChNQVggb3B0aW1pemF0aW9uKS4KKworCitTcGVlZGluZyB1cCBrZXJiZXJvcyAoYW5kL29yIGl0cyBkZXMgbGlicmFyeSkKKworbm90ZSB0aGF0IGkgaGF2ZSBpbmNsdWRlZCBhIGtlcmJlcm9zLWNvbXBhdGlibGUgaW50ZXJmYWNlIGluIGRlc1V0aWwuYwordGhyb3VnaCB0aGUgZnVuY3Rpb25zIGRlc19rZXlfc2NoZWQoKSBhbmQgZGVzX2VjYl9lbmNyeXB0KCkuCit0byB1c2UgdGhlc2Ugd2l0aCBrZXJiZXJvcyBvciBrZXJiZXJvcy1jb21wYXRpYmxlIGNvZGUgcHV0IGRlc0NvcmUuYQorYWhlYWQgb2YgdGhlIGtlcmJlcm9zLWNvbXBhdGlibGUgbGlicmFyeSBvbiB5b3VyIGxpbmtlcidzIGNvbW1hbmQgbGluZS4KK3lvdSBzaG91bGQgbm90IG5lZWQgdG8gI2luY2x1ZGUgZGVzQ29yZS5oOyAganVzdCBpbmNsdWRlIHRoZSBoZWFkZXIKK2ZpbGUgcHJvdmlkZWQgd2l0aCB0aGUga2VyYmVyb3MgbGlicmFyeS4KKworT3RoZXIgdXNlcworCit0aGUgbWFjcm9zIGluIGRlc0NvZGUuaCB3b3VsZCBiZSB2ZXJ5IHVzZWZ1bCBmb3IgcHV0dGluZyBpbmxpbmUgZGVzCitmdW5jdGlvbnMgaW4gbW9yZSBjb21wbGljYXRlZCBlbmNyeXB0aW9uIHJvdXRpbmVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctbW9kdWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy1tb2R1bGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDAyOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctbW9kdWxlcy50eHQKQEAgLTAsMCArMSwxOCBAQAorRGVidWdnaW5nIE1vZHVsZXMgYWZ0ZXIgMi42LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGFsbW9zdCBhbGwgZGlzdHJpYnV0aW9ucywgdGhlIGtlcm5lbCBhc2tzIGZvciBtb2R1bGVzIHdoaWNoIGRvbid0CitleGlzdCwgc3VjaCBhcyAibmV0LXBmLTEwIiBvciB3aGF0ZXZlci4gIENoYW5naW5nICJtb2Rwcm9iZSAtcSIgdG8KKyJzdWNjZWVkIiBpbiB0aGlzIGNhc2UgaXMgaGFja3kgYW5kIGJyZWFrcyBzb21lIHNldHVwcywgYW5kIGFsc28gd2UKK3dhbnQgdG8ga25vdyBpZiBpdCBmYWlsZWQgZm9yIHRoZSBmYWxsYmFjayBjb2RlIGZvciBvbGQgYWxpYXNlcyBpbgorZnMvY2hhcl9kZXYuYywgZm9yIGV4YW1wbGUuCisKK0luIHRoZSBwYXN0IGEgZGVidWdnaW5nIG1lc3NhZ2Ugd2hpY2ggd291bGQgZmlsbCBwZW9wbGUncyBsb2dzIHdhcworZW1pdHRlZC4gIFRoaXMgZGVidWdnaW5nIG1lc3NhZ2UgaGFzIGJlZW4gcmVtb3ZlZC4gIFRoZSBjb3JyZWN0IHdheQorb2YgZGVidWdnaW5nIG1vZHVsZSBwcm9ibGVtcyBpcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCitlY2hvICcjISAvYmluL3NoJyA+IC90bXAvbW9kcHJvYmUKK2VjaG8gJ2VjaG8gIiRAIiA+PiAvdG1wL21vZHByb2JlLmxvZycgPj4gL3RtcC9tb2Rwcm9iZQorZWNobyAnZXhlYyAvc2Jpbi9tb2Rwcm9iZSAiJEAiJyA+PiAvdG1wL21vZHByb2JlCitjaG1vZCBhK3ggL3RtcC9tb2Rwcm9iZQorZWNobyAvdG1wL21vZHByb2JlID4gL3Byb2Mvc3lzL2tlcm5lbC9tb2Rwcm9iZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLWlvLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1pby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1ZDlhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1pby50eHQKQEAgLTAsMCArMSw3NSBAQAorZG0taW8KKz09PT09CisKK0RtLWlvIHByb3ZpZGVzIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgSS9PIHNlcnZpY2VzLiBUaGVyZSBhcmUgdGhyZWUKK3R5cGVzIG9mIEkvTyBzZXJ2aWNlcyBhdmFpbGFibGUsIGFuZCBlYWNoIHR5cGUgaGFzIGEgc3luYyBhbmQgYW4gYXN5bmMKK3ZlcnNpb24uCisKK1RoZSB1c2VyIG11c3Qgc2V0IHVwIGFuIGlvX3JlZ2lvbiBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgdGhlIGRlc2lyZWQgbG9jYXRpb24KK29mIHRoZSBJL08uIEVhY2ggaW9fcmVnaW9uIGluZGljYXRlcyBhIGJsb2NrLWRldmljZSBhbG9uZyB3aXRoIHRoZSBzdGFydGluZworc2VjdG9yIGFuZCBzaXplIG9mIHRoZSByZWdpb24uCisKKyAgIHN0cnVjdCBpb19yZWdpb24geworICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKyAgICAgIHNlY3Rvcl90IHNlY3RvcjsKKyAgICAgIHNlY3Rvcl90IGNvdW50OworICAgfTsKKworRG0taW8gY2FuIHJlYWQgZnJvbSBvbmUgaW9fcmVnaW9uIG9yIHdyaXRlIHRvIG9uZSBvciBtb3JlIGlvX3JlZ2lvbnMuIFdyaXRlcwordG8gbXVsdGlwbGUgcmVnaW9ucyBhcmUgc3BlY2lmaWVkIGJ5IGFuIGFycmF5IG9mIGlvX3JlZ2lvbiBzdHJ1Y3R1cmVzLgorCitUaGUgZmlyc3QgSS9PIHNlcnZpY2UgdHlwZSB0YWtlcyBhIGxpc3Qgb2YgbWVtb3J5IHBhZ2VzIGFzIHRoZSBkYXRhIGJ1ZmZlciBmb3IKK3RoZSBJL08sIGFsb25nIHdpdGggYW4gb2Zmc2V0IGludG8gdGhlIGZpcnN0IHBhZ2UuCisKKyAgIHN0cnVjdCBwYWdlX2xpc3QgeworICAgICAgc3RydWN0IHBhZ2VfbGlzdCAqbmV4dDsKKyAgICAgIHN0cnVjdCBwYWdlICpwYWdlOworICAgfTsKKworICAgaW50IGRtX2lvX3N5bmModW5zaWduZWQgaW50IG51bV9yZWdpb25zLCBzdHJ1Y3QgaW9fcmVnaW9uICp3aGVyZSwgaW50IHJ3LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2VfbGlzdCAqcGwsIHVuc2lnbmVkIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICplcnJvcl9iaXRzKTsKKyAgIGludCBkbV9pb19hc3luYyh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2VfbGlzdCAqcGwsIHVuc2lnbmVkIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgaW9fbm90aWZ5X2ZuIGZuLCB2b2lkICpjb250ZXh0KTsKKworVGhlIHNlY29uZCBJL08gc2VydmljZSB0eXBlIHRha2VzIGFuIGFycmF5IG9mIGJpbyB2ZWN0b3JzIGFzIHRoZSBkYXRhIGJ1ZmZlcgorZm9yIHRoZSBJL08uIFRoaXMgc2VydmljZSBjYW4gYmUgaGFuZHkgaWYgdGhlIGNhbGxlciBoYXMgYSBwcmUtYXNzZW1ibGVkIGJpbywKK2J1dCB3YW50cyB0byBkaXJlY3QgZGlmZmVyZW50IHBvcnRpb25zIG9mIHRoZSBiaW8gdG8gZGlmZmVyZW50IGRldmljZXMuCisKKyAgIGludCBkbV9pb19zeW5jX2J2ZWModW5zaWduZWQgaW50IG51bV9yZWdpb25zLCBzdHJ1Y3QgaW9fcmVnaW9uICp3aGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHJ3LCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqZXJyb3JfYml0cyk7CisgICBpbnQgZG1faW9fYXN5bmNfYnZlYyh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJ3LCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlvX25vdGlmeV9mbiBmbiwgdm9pZCAqY29udGV4dCk7CisKK1RoZSB0aGlyZCBJL08gc2VydmljZSB0eXBlIHRha2VzIGEgcG9pbnRlciB0byBhIHZtYWxsb2MnZCBtZW1vcnkgYnVmZmVyIGFzIHRoZQorZGF0YSBidWZmZXIgZm9yIHRoZSBJL08uIFRoaXMgc2VydmljZSBjYW4gYmUgaGFuZHkgaWYgdGhlIGNhbGxlciBuZWVkcyB0byBkbworSS9PIHRvIGEgbGFyZ2UgcmVnaW9uIGJ1dCBkb2Vzbid0IHdhbnQgdG8gYWxsb2NhdGUgYSBsYXJnZSBudW1iZXIgb2YgaW5kaXZpZHVhbAorbWVtb3J5IHBhZ2VzLgorCisgICBpbnQgZG1faW9fc3luY192bSh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nICplcnJvcl9iaXRzKTsKKyAgIGludCBkbV9pb19hc3luY192bSh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgaW9fbm90aWZ5X2ZuIGZuLCB2b2lkICpjb250ZXh0KTsKKworQ2FsbGVycyBvZiB0aGUgYXN5bmNocm9ub3VzIEkvTyBzZXJ2aWNlcyBtdXN0IGluY2x1ZGUgdGhlIG5hbWUgb2YgYSBjb21wbGV0aW9uCitjYWxsYmFjayByb3V0aW5lIGFuZCBhIHBvaW50ZXIgdG8gc29tZSBjb250ZXh0IGRhdGEgZm9yIHRoZSBJL08uCisKKyAgIHR5cGVkZWYgdm9pZCAoKmlvX25vdGlmeV9mbikodW5zaWduZWQgbG9uZyBlcnJvciwgdm9pZCAqY29udGV4dCk7CisKK1RoZSAiZXJyb3IiIHBhcmFtZXRlciBpbiB0aGlzIGNhbGxiYWNrLCBhcyB3ZWxsIGFzIHRoZSAiKmVycm9yIiBwYXJhbWV0ZXIgaW4KK2FsbCBvZiB0aGUgc3luY2hyb25vdXMgdmVyc2lvbnMsIGlzIGEgYml0c2V0IChpbnN0ZWFkIG9mIGEgc2ltcGxlIGVycm9yIHZhbHVlKS4KK0luIHRoZSBjYXNlIG9mIGFuIHdyaXRlLUkvTyB0byBtdWx0aXBsZSByZWdpb25zLCB0aGlzIGJpdHNldCBhbGxvd3MgZG0taW8gdG8KK2luZGljYXRlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvbiBlYWNoIGluZGl2aWR1YWwgcmVnaW9uLgorCitCZWZvcmUgdXNpbmcgYW55IG9mIHRoZSBkbS1pbyBzZXJ2aWNlcywgdGhlIHVzZXIgc2hvdWxkIGNhbGwgZG1faW9fZ2V0KCkKK2FuZCBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgcGFnZXMgdGhleSBleHBlY3QgdG8gcGVyZm9ybSBJL08gb24gY29uY3VycmVudGx5LgorRG0taW8gd2lsbCBhdHRlbXB0IHRvIHJlc2l6ZSBpdHMgbWVtcG9vbCB0byBtYWtlIHN1cmUgZW5vdWdoIHBhZ2VzIGFyZQorYWx3YXlzIGF2YWlsYWJsZSBpbiBvcmRlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YWl0aW5nIHdoaWxlIHBlcmZvcm1pbmcgSS9PLgorCitXaGVuIHRoZSB1c2VyIGlzIGZpbmlzaGVkIHVzaW5nIHRoZSBkbS1pbyBzZXJ2aWNlcywgdGhleSBzaG91bGQgY2FsbAorZG1faW9fcHV0KCkgYW5kIHNwZWNpZnkgdGhlIHNhbWUgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBnaXZlbiBvbiB0aGUKK2RtX2lvX2dldCgpIGNhbGwuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9rY29weWQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2tjb3B5ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIwMzgyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9rY29weWQudHh0CkBAIC0wLDAgKzEsNDcgQEAKK2tjb3B5ZAorPT09PT09CisKK0tjb3B5ZCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjb3B5IGEgcmFuZ2Ugb2Ygc2VjdG9ycyBmcm9tIG9uZSBibG9jay1kZXZpY2UKK3RvIG9uZSBvciBtb3JlIG90aGVyIGJsb2NrLWRldmljZXMsIHdpdGggYW4gYXN5bmNocm9ub3VzIGNvbXBsZXRpb24KK25vdGlmaWNhdGlvbi4gSXQgaXMgdXNlZCBieSBkbS1zbmFwc2hvdCBhbmQgZG0tbWlycm9yLgorCitVc2VycyBvZiBrY29weWQgbXVzdCBmaXJzdCBjcmVhdGUgYSBjbGllbnQgYW5kIGluZGljYXRlIGhvdyBtYW55IG1lbW9yeSBwYWdlcwordG8gc2V0IGFzaWRlIGZvciB0aGVpciBjb3B5IGpvYnMuIFRoaXMgaXMgZG9uZSB3aXRoIGEgY2FsbCB0bwora2NvcHlkX2NsaWVudF9jcmVhdGUoKS4KKworICAgaW50IGtjb3B5ZF9jbGllbnRfY3JlYXRlKHVuc2lnbmVkIGludCBudW1fcGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtjb3B5ZF9jbGllbnQgKipyZXN1bHQpOworCitUbyBzdGFydCBhIGNvcHkgam9iLCB0aGUgdXNlciBtdXN0IHNldCB1cCBpb19yZWdpb24gc3RydWN0dXJlcyB0byBkZXNjcmliZQordGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb25zIG9mIHRoZSBjb3B5LiBFYWNoIGlvX3JlZ2lvbiBpbmRpY2F0ZXMgYQorYmxvY2stZGV2aWNlIGFsb25nIHdpdGggdGhlIHN0YXJ0aW5nIHNlY3RvciBhbmQgc2l6ZSBvZiB0aGUgcmVnaW9uLiBUaGUgc291cmNlCitvZiB0aGUgY29weSBpcyBnaXZlbiBhcyBvbmUgaW9fcmVnaW9uIHN0cnVjdHVyZSwgYW5kIHRoZSBkZXN0aW5hdGlvbnMgb2YgdGhlCitjb3B5IGFyZSBnaXZlbiBhcyBhbiBhcnJheSBvZiBpb19yZWdpb24gc3RydWN0dXJlcy4KKworICAgc3RydWN0IGlvX3JlZ2lvbiB7CisgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworICAgICAgc2VjdG9yX3Qgc2VjdG9yOworICAgICAgc2VjdG9yX3QgY291bnQ7CisgICB9OworCitUbyBzdGFydCB0aGUgY29weSwgdGhlIHVzZXIgY2FsbHMga2NvcHlkX2NvcHkoKSwgcGFzc2luZyBpbiB0aGUgY2xpZW50Citwb2ludGVyLCBwb2ludGVycyB0byB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpb19yZWdpb25zLCB0aGUgbmFtZSBvZiBhCitjb21wbGV0aW9uIGNhbGxiYWNrIHJvdXRpbmUsIGFuZCBhIHBvaW50ZXIgdG8gc29tZSBjb250ZXh0IGRhdGEgZm9yIHRoZSBjb3B5LgorCisgICBpbnQga2NvcHlkX2NvcHkoc3RydWN0IGtjb3B5ZF9jbGllbnQgKmtjLCBzdHJ1Y3QgaW9fcmVnaW9uICpmcm9tLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1fZGVzdHMsIHN0cnVjdCBpb19yZWdpb24gKmRlc3RzLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywga2NvcHlkX25vdGlmeV9mbiBmbiwgdm9pZCAqY29udGV4dCk7CisKKyAgIHR5cGVkZWYgdm9pZCAoKmtjb3B5ZF9ub3RpZnlfZm4pKGludCByZWFkX2VyciwgdW5zaWduZWQgaW50IHdyaXRlX2VyciwKKwkJCQkgICAgdm9pZCAqY29udGV4dCk7CisKK1doZW4gdGhlIGNvcHkgY29tcGxldGVzLCBrY29weWQgd2lsbCBjYWxsIHRoZSB1c2VyJ3MgY29tcGxldGlvbiByb3V0aW5lLAorcGFzc2luZyBiYWNrIHRoZSB1c2VyJ3MgY29udGV4dCBwb2ludGVyLiBJdCB3aWxsIGFsc28gaW5kaWNhdGUgaWYgYSByZWFkIG9yCit3cml0ZSBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGNvcHkuCisKK1doZW4gYSB1c2VyIGlzIGRvbmUgd2l0aCBhbGwgdGhlaXIgY29weSBqb2JzLCB0aGV5IHNob3VsZCBjYWxsCitrY29weWRfY2xpZW50X2Rlc3Ryb3koKSB0byBkZWxldGUgdGhlIGtjb3B5ZCBjbGllbnQsIHdoaWNoIHdpbGwgcmVsZWFzZSB0aGUKK2Fzc29jaWF0ZWQgbWVtb3J5IHBhZ2VzLgorCisgICB2b2lkIGtjb3B5ZF9jbGllbnRfZGVzdHJveShzdHJ1Y3Qga2NvcHlkX2NsaWVudCAqa2MpOworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvbGluZWFyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9saW5lYXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MzA3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvbGluZWFyLnR4dApAQCAtMCwwICsxLDYxIEBACitkbS1saW5lYXIKKz09PT09PT09PQorCitEZXZpY2UtTWFwcGVyJ3MgImxpbmVhciIgdGFyZ2V0IG1hcHMgYSBsaW5lYXIgcmFuZ2Ugb2YgdGhlIERldmljZS1NYXBwZXIKK2RldmljZSBvbnRvIGEgbGluZWFyIHJhbmdlIG9mIGFub3RoZXIgZGV2aWNlLiAgVGhpcyBpcyB0aGUgYmFzaWMgYnVpbGRpbmcKK2Jsb2NrIG9mIGxvZ2ljYWwgdm9sdW1lIG1hbmFnZXJzLgorCitQYXJhbWV0ZXJzOiA8ZGV2IHBhdGg+IDxvZmZzZXQ+CisgICAgPGRldiBwYXRoPjogRnVsbCBwYXRobmFtZSB0byB0aGUgdW5kZXJseWluZyBibG9jay1kZXZpY2UsIG9yIGEKKyAgICAgICAgICAgICAgICAibWFqb3I6bWlub3IiIGRldmljZS1udW1iZXIuCisgICAgPG9mZnNldD46IFN0YXJ0aW5nIHNlY3RvciB3aXRoaW4gdGhlIGRldmljZS4KKworCitFeGFtcGxlIHNjcmlwdHMKKz09PT09PT09PT09PT09PQorW1sKKyMhL2Jpbi9zaAorIyBDcmVhdGUgYW4gaWRlbnRpdHkgbWFwcGluZyBmb3IgYSBkZXZpY2UKK2VjaG8gIjAgYGJsb2NrZGV2IC0tZ2V0c2l6ZSAkMWAgbGluZWFyICQxIDAiIHwgZG1zZXR1cCBjcmVhdGUgaWRlbnRpdHkKK11dCisKKworW1sKKyMhL2Jpbi9zaAorIyBKb2luIDIgZGV2aWNlcyB0b2dldGhlcgorc2l6ZTE9YGJsb2NrZGV2IC0tZ2V0c2l6ZSAkMWAKK3NpemUyPWBibG9ja2RldiAtLWdldHNpemUgJDJgCitlY2hvICIwICRzaXplMSBsaW5lYXIgJDEgMAorJHNpemUxICRzaXplMiBsaW5lYXIgJDIgMCIgfCBkbXNldHVwIGNyZWF0ZSBqb2luZWQKK11dCisKKworW1sKKyMhL3Vzci9iaW4vcGVybCAtdworIyBTcGxpdCBhIGRldmljZSBpbnRvIDRNIGNodW5rcyBhbmQgdGhlbiBqb2luIHRoZW0gdG9nZXRoZXIgaW4gcmV2ZXJzZSBvcmRlci4KKworbXkgJG5hbWUgPSAicmV2ZXJzZSI7CitteSAkZXh0ZW50X3NpemUgPSA0ICogMTAyNCAqIDI7CitteSAkZGV2ID0gJEFSR1ZbMF07CitteSAkdGFibGUgPSAiIjsKK215ICRjb3VudCA9IDA7CisKK2lmICghZGVmaW5lZCgkZGV2KSkgeworICAgICAgICBkaWUoIlBsZWFzZSBzcGVjaWZ5IGEgZGV2aWNlLlxuIik7Cit9CisKK215ICRkZXZfc2l6ZSA9IGBibG9ja2RldiAtLWdldHNpemUgJGRldmA7CitteSAkZXh0ZW50cyA9IGludCgkZGV2X3NpemUgLyAkZXh0ZW50X3NpemUpIC0KKyAgICAgICAgICAgICAgKCgkZGV2X3NpemUgJSAkZXh0ZW50X3NpemUpID8gMSA6IDApOworCit3aGlsZSAoJGV4dGVudHMgPiAwKSB7CisgICAgICAgIG15ICR0aGlzX3N0YXJ0ID0gJGNvdW50ICogJGV4dGVudF9zaXplOworICAgICAgICAkZXh0ZW50cy0tOworICAgICAgICAkY291bnQrKzsKKyAgICAgICAgbXkgJHRoaXNfb2Zmc2V0ID0gJGV4dGVudHMgKiAkZXh0ZW50X3NpemU7CisKKyAgICAgICAgJHRhYmxlIC49ICIkdGhpc19zdGFydCAkZXh0ZW50X3NpemUgbGluZWFyICRkZXYgJHRoaXNfb2Zmc2V0XG4iOworfQorCitgZWNobyBcIiR0YWJsZVwiIHwgZG1zZXR1cCBjcmVhdGUgJG5hbWVgOworXV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9zdHJpcGVkLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9zdHJpcGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzRkMzIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3N0cmlwZWQudHh0CkBAIC0wLDAgKzEsNTggQEAKK2RtLXN0cmlwZQorPT09PT09PT09CisKK0RldmljZS1NYXBwZXIncyAic3RyaXBlZCIgdGFyZ2V0IGlzIHVzZWQgdG8gY3JlYXRlIGEgc3RyaXBlZCAoaS5lLiBSQUlELTApCitkZXZpY2UgYWNyb3NzIG9uZSBvciBtb3JlIHVuZGVybHlpbmcgZGV2aWNlcy4gRGF0YSBpcyB3cml0dGVuIGluICJjaHVua3MiLAord2l0aCBjb25zZWN1dGl2ZSBjaHVua3Mgcm90YXRpbmcgYW1vbmcgdGhlIHVuZGVybHlpbmcgZGV2aWNlcy4gVGhpcyBjYW4KK3BvdGVudGlhbGx5IHByb3ZpZGUgaW1wcm92ZWQgSS9PIHRocm91Z2hwdXQgYnkgdXRpbGl6aW5nIHNldmVyYWwgcGh5c2ljYWwKK2RldmljZXMgaW4gcGFyYWxsZWwuCisKK1BhcmFtZXRlcnM6IDxudW0gZGV2cz4gPGNodW5rIHNpemU+IFs8ZGV2IHBhdGg+IDxvZmZzZXQ+XSsKKyAgICA8bnVtIGRldnM+OiBOdW1iZXIgb2YgdW5kZXJseWluZyBkZXZpY2VzLgorICAgIDxjaHVuayBzaXplPjogU2l6ZSBvZiBlYWNoIGNodW5rIG9mIGRhdGEuIE11c3QgYmUgYSBwb3dlci1vZi0yIGFuZCBhdAorICAgICAgICAgICAgICAgICAgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIHN5c3RlbSdzIFBBR0VfU0laRS4KKyAgICA8ZGV2IHBhdGg+OiBGdWxsIHBhdGhuYW1lIHRvIHRoZSB1bmRlcmx5aW5nIGJsb2NrLWRldmljZSwgb3IgYQorICAgICAgICAgICAgICAgICJtYWpvcjptaW5vciIgZGV2aWNlLW51bWJlci4KKyAgICA8b2Zmc2V0PjogU3RhcnRpbmcgc2VjdG9yIHdpdGhpbiB0aGUgZGV2aWNlLgorCitPbmUgb3IgbW9yZSB1bmRlcmx5aW5nIGRldmljZXMgY2FuIGJlIHNwZWNpZmllZC4gVGhlIHN0cmlwZWQgZGV2aWNlIHNpemUgbXVzdAorYmUgYSBtdWx0aXBsZSBvZiB0aGUgY2h1bmsgc2l6ZSBhbmQgYSBtdWx0aXBsZSBvZiB0aGUgbnVtYmVyIG9mIHVuZGVybHlpbmcKK2RldmljZXMuCisKKworRXhhbXBsZSBzY3JpcHRzCis9PT09PT09PT09PT09PT0KKworW1sKKyMhL3Vzci9iaW4vcGVybCAtdworIyBDcmVhdGUgYSBzdHJpcGVkIGRldmljZSBhY3Jvc3MgYW55IG51bWJlciBvZiB1bmRlcmx5aW5nIGRldmljZXMuIFRoZSBkZXZpY2UKKyMgd2lsbCBiZSBjYWxsZWQgInN0cmlwZV9kZXYiIGFuZCBoYXZlIGEgY2h1bmstc2l6ZSBvZiAxMjhrLgorCitteSAkY2h1bmtfc2l6ZSA9IDEyOCAqIDI7CitteSAkZGV2X25hbWUgPSAic3RyaXBlX2RldiI7CitteSAkbnVtX2RldnMgPSBAQVJHVjsKK215IEBkZXZzID0gQEFSR1Y7CitteSAoJG1pbl9kZXZfc2l6ZSwgJHN0cmlwZV9kZXZfc2l6ZSwgJGkpOworCitpZiAoISRudW1fZGV2cykgeworICAgICAgICBkaWUoIlNwZWNpZnkgYXQgbGVhc3Qgb25lIGRldmljZVxuIik7Cit9CisKKyRtaW5fZGV2X3NpemUgPSBgYmxvY2tkZXYgLS1nZXRzaXplICRkZXZzWzBdYDsKK2ZvciAoJGkgPSAxOyAkaSA8ICRudW1fZGV2czsgJGkrKykgeworICAgICAgICBteSAkdGhpc19zaXplID0gYGJsb2NrZGV2IC0tZ2V0c2l6ZSAkZGV2c1skaV1gOworICAgICAgICAkbWluX2Rldl9zaXplID0gKCRtaW5fZGV2X3NpemUgPCAkdGhpc19zaXplKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAkbWluX2Rldl9zaXplIDogJHRoaXNfc2l6ZTsKK30KKworJHN0cmlwZV9kZXZfc2l6ZSA9ICRtaW5fZGV2X3NpemUgKiAkbnVtX2RldnM7Ciskc3RyaXBlX2Rldl9zaXplIC09ICRzdHJpcGVfZGV2X3NpemUgJSAoJGNodW5rX3NpemUgKiAkbnVtX2RldnMpOworCiskdGFibGUgPSAiMCAkc3RyaXBlX2Rldl9zaXplIHN0cmlwZWQgJG51bV9kZXZzICRjaHVua19zaXplIjsKK2ZvciAoJGkgPSAwOyAkaSA8ICRudW1fZGV2czsgJGkrKykgeworICAgICAgICAkdGFibGUgLj0gIiAkZGV2c1skaV0gMCI7Cit9CisKK2BlY2hvICR0YWJsZSB8IGRtc2V0dXAgY3JlYXRlICRkZXZfbmFtZWA7CitdXQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvemVyby50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvemVyby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYjM4ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci96ZXJvLnR4dApAQCAtMCwwICsxLDM3IEBACitkbS16ZXJvCis9PT09PT09CisKK0RldmljZS1NYXBwZXIncyAiemVybyIgdGFyZ2V0IHByb3ZpZGVzIGEgYmxvY2stZGV2aWNlIHRoYXQgYWx3YXlzIHJldHVybnMKK3plcm8nZCBkYXRhIG9uIHJlYWRzIGFuZCBzaWxlbnRseSBkcm9wcyB3cml0ZXMuIFRoaXMgaXMgc2ltaWxhciBiZWhhdmlvciB0bworL2Rldi96ZXJvLCBidXQgYXMgYSBibG9jay1kZXZpY2UgaW5zdGVhZCBvZiBhIGNoYXJhY3Rlci1kZXZpY2UuCisKK0RtLXplcm8gaGFzIG5vIHRhcmdldC1zcGVjaWZpYyBwYXJhbWV0ZXJzLgorCitPbmUgdmVyeSBpbnRlcmVzdGluZyB1c2Ugb2YgZG0temVybyBpcyBmb3IgY3JlYXRpbmcgInNwYXJzZSIgZGV2aWNlcyBpbgorY29uanVuY3Rpb24gd2l0aCBkbS1zbmFwc2hvdC4gQSBzcGFyc2UgZGV2aWNlIHJlcG9ydHMgYSBkZXZpY2Utc2l6ZSBsYXJnZXIKK3RoYW4gdGhlIGFtb3VudCBvZiBhY3R1YWwgc3RvcmFnZSBzcGFjZSBhdmFpbGFibGUgZm9yIHRoYXQgZGV2aWNlLiBBIHVzZXIgY2FuCit3cml0ZSBkYXRhIGFueXdoZXJlIHdpdGhpbiB0aGUgc3BhcnNlIGRldmljZSBhbmQgcmVhZCBpdCBiYWNrIGxpa2UgYSBub3JtYWwKK2RldmljZS4gUmVhZHMgdG8gcHJldmlvdXNseSB1bndyaXR0ZW4gYXJlYXMgd2lsbCByZXR1cm4gYSB6ZXJvJ2QgYnVmZmVyLiBXaGVuCitlbm91Z2ggZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIGZpbGwgdXAgdGhlIGFjdHVhbCBzdG9yYWdlIHNwYWNlLCB0aGUgc3BhcnNlCitkZXZpY2UgaXMgZGVhY3RpdmF0ZWQuIFRoaXMgY2FuIGJlIHZlcnkgdXNlZnVsIGZvciB0ZXN0aW5nIGRldmljZSBhbmQKK2ZpbGVzeXN0ZW0gbGltaXRhdGlvbnMuCisKK1RvIGNyZWF0ZSBhIHNwYXJzZSBkZXZpY2UsIHN0YXJ0IGJ5IGNyZWF0aW5nIGEgZG0temVybyBkZXZpY2UgdGhhdCdzIHRoZQorZGVzaXJlZCBzaXplIG9mIHRoZSBzcGFyc2UgZGV2aWNlLiBGb3IgdGhpcyBleGFtcGxlLCB3ZSdsbCBhc3N1bWUgYSAxMFRCCitzcGFyc2UgZGV2aWNlLgorCitURU5fVEVSQUJZVEVTPWBleHByIDEwIFwqIDEwMjQgXCogMTAyNCBcKiAxMDI0IFwqIDJgICAgIyAxMCBUQiBpbiBzZWN0b3JzCitlY2hvICIwICRURU5fVEVSQUJZVEVTIHplcm8iIHwgZG1zZXR1cCBjcmVhdGUgemVybzEKKworVGhlbiBjcmVhdGUgYSBzbmFwc2hvdCBvZiB0aGUgemVybyBkZXZpY2UsIHVzaW5nIGFueSBhdmFpbGFibGUgYmxvY2stZGV2aWNlIGFzCit0aGUgQ09XIGRldmljZS4gVGhlIHNpemUgb2YgdGhlIENPVyBkZXZpY2Ugd2lsbCBkZXRlcm1pbmUgdGhlIGFtb3VudCBvZiByZWFsCitzcGFjZSBhdmFpbGFibGUgdG8gdGhlIHNwYXJzZSBkZXZpY2UuIEZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIGFzc3VtZSAvZGV2L3NkYjEKK2lzIGFuIGF2YWlsYWJsZSAxMEdCIHBhcnRpdGlvbi4KKworZWNobyAiMCAkVEVOX1RFUkFCWVRFUyBzbmFwc2hvdCAvZGV2L21hcHBlci96ZXJvMSAvZGV2L3NkYjEgcCAxMjgiIHwgXAorICAgZG1zZXR1cCBjcmVhdGUgc3BhcnNlMQorCitUaGlzIHdpbGwgY3JlYXRlIGEgMTBUQiBzcGFyc2UgZGV2aWNlIGNhbGxlZCAvZGV2L21hcHBlci9zcGFyc2UxIHRoYXQgaGFzCisxMEdCIG9mIGFjdHVhbCBzdG9yYWdlIHNwYWNlIGF2YWlsYWJsZS4gSWYgbW9yZSB0aGFuIDEwR0Igb2YgZGF0YSBpcyB3cml0dGVuCit0byB0aGlzIGRldmljZSwgaXQgd2lsbCBzdGFydCByZXR1cm5pbmcgSS9PIGVycm9ycy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2N2NmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKQEAgLTAsMCArMSwzMjE2IEBACisKKwkJICAgIExJTlVYIEFMTE9DQVRFRCBERVZJQ0VTICgyLjYrIHZlcnNpb24pCisKKwkgICAgIE1haW50YWluZWQgYnkgVG9yYmVuIE1hdGhpYXNlbiA8ZGV2aWNlQGxhbmFuYS5vcmc+CisKKwkJICAgICAgTGFzdCByZXZpc2VkOiAyNSBKYW51YXJ5IDIwMDUKKworVGhpcyBsaXN0IGlzIHRoZSBMaW51eCBEZXZpY2UgTGlzdCwgdGhlIG9mZmljaWFsIHJlZ2lzdHJ5IG9mIGFsbG9jYXRlZAorZGV2aWNlIG51bWJlcnMgYW5kIC9kZXYgZGlyZWN0b3J5IG5vZGVzIGZvciB0aGUgTGludXggb3BlcmF0aW5nCitzeXN0ZW0uCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpc3QgaXMgYXZhaWxhYmxlIGZyb20KK2h0dHA6Ly93d3cubGFuYW5hLm9yZy9kb2NzL2RldmljZS1saXN0LyBvcgorZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2RvY3MvZGV2aWNlLWxpc3QvLiAgVGhpcyB2ZXJzaW9uIG1heSBiZQorbmV3ZXIgdGhhbiB0aGUgb25lIGRpc3RyaWJ1dGVkIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KKworVGhlIExhVGVYIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZC4KKworVGhpcyBkb2N1bWVudCBpcyBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW50byB0aGUgRmlsZXN5c3RlbSBIaWVyYXJjaHkKK1N0YW5kYXJkIChGSFMpLgkgVGhlIEZIUyBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LnBhdGhuYW1lLmNvbS9maHMvLgorCitBbGxvY2F0aW9ucyBtYXJrZWQgKDY4ay9BbWlnYSkgYXBwbHkgdG8gTGludXgvNjhrIG9uIHRoZSBBbWlnYQorcGxhdGZvcm0gb25seS4JQWxsb2NhdGlvbnMgbWFya2VkICg2OGsvQXRhcmkpIGFwcGx5IHRvIExpbnV4LzY4ayBvbgordGhlIEF0YXJpIHBsYXRmb3JtIG9ubHkuCisKK1RoZSBzeW1ib2wgezIuNn0gbWVhbnMgdGhlIGFsbG9jYXRpb24gaXMgb2Jzb2xldGUgYW5kIHNjaGVkdWxlZCBmb3IKK3JlbW92YWwgb25jZSBrZXJuZWwgdmVyc2lvbiAyLjYgKG9yIGVxdWl2YWxlbnQpIGlzIHJlbGVhc2VkLiBTb21lIG9mIHRoZXNlCithbGxvY2F0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkLgorCitUaGlzIGRvY3VtZW50IGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLglUaGUgYXV0aG9yIHJlcXVlc3RzLCBob3dldmVyLAordGhhdCBzZW1hbnRpY2FsbHkgYWx0ZXJlZCB2ZXJzaW9ucyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGhvdXQKK3Blcm1pc3Npb24gb2YgdGhlIGF1dGhvciwgYXNzdW1pbmcgdGhlIGF1dGhvciBjYW4gYmUgY29udGFjdGVkIHdpdGhvdXQKK2FuIHVucmVhc29uYWJsZSBlZmZvcnQuCisKK0luIHBhcnRpY3VsYXIsIHBsZWFzZSBkb24ndCBzZW50IHBhdGNoZXMgZm9yIHRoaXMgbGlzdCB0byBMaW51cywgYXQKK2xlYXN0IG5vdCB3aXRob3V0IGNvbnRhY3RpbmcgbWUgZmlyc3QuCisKK0kgZG8gbm90IGhhdmUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIGRldmljZXMgYmV5b25kIHdoYXQgYXBwZWFycworb24gdGhpcyBsaXN0LiAgQW55IHN1Y2ggaW5mb3JtYXRpb24gcmVxdWVzdHMgd2lsbCBiZSBkZWxldGVkIHdpdGhvdXQKK3JlcGx5LgorCisKKwkgICoqKiogREVWSUNFIERSSVZFUlMgQVVUSE9SUyBQTEVBU0UgUkVBRCBUSElTICoqKioKKworVG8gaGF2ZSBhIG1ham9yIG51bWJlciBhbGxvY2F0ZWQsIG9yIGEgbWlub3IgbnVtYmVyIGluIHNpdHVhdGlvbnMKK3doZXJlIHRoYXQgYXBwbGllcyAoZS5nLiBidXNtaWNlKSwgcGxlYXNlIGNvbnRhY3QgbWUgd2l0aCB0aGUKK2FwcHJvcHJpYXRlIGRldmljZSBpbmZvcm1hdGlvbi4JIEFsc28sIGlmIHlvdSBoYXZlIGFkZGl0aW9uYWwKK2luZm9ybWF0aW9uIHJlZ2FyZGluZyBhbnkgb2YgdGhlIGRldmljZXMgbGlzdGVkIGJlbG93LCBvciBpZiBJIGhhdmUKK21hZGUgYSBtaXN0YWtlLCBJIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBhIG5vdGUuCisKK0kgZG8sIGhvd2V2ZXIsIG1ha2UgYSBmZXcgcmVxdWVzdHMgYWJvdXQgdGhlIG5hdHVyZSBvZiB5b3VyIHJlcG9ydC4KK1RoaXMgaXMgbmVjZXNzYXJ5IGZvciBtZSB0byBiZSBhYmxlIHRvIGtlZXAgdGhpcyBsaXN0IHVwIHRvIGRhdGUgYW5kCitjb3JyZWN0IGluIGEgdGltZWx5IG1hbm5lci4gIEZpcnN0IG9mIGFsbCwgKnBsZWFzZSogc2VuZCBpdCB0byB0aGUKK2NvcnJlY3QgYWRkcmVzcy4uLiA8ZGV2aWNlQGxhbmFuYS5vcmc+LiAgSSByZWNlaXZlIGh1bmRyZWRzIG9mIGVtYWlsCittZXNzYWdlcyBhIGRheSwgc28gbWFpbCBzZW50IHRvIG90aGVyIGFkZHJlc3NlcyBtYXkgdmVyeSB3ZWxsIGdldCBsb3N0CitpbiB0aGUgYXZhbGFuY2hlLiAgUGxlYXNlIHB1dCBpbiBhIGRlc2NyaXB0aXZlIHN1YmplY3QsIHNvIEkgY2FuIGZpbmQKK3lvdXIgbWFpbCBhZ2FpbiBzaG91bGQgSSBuZWVkIHRvLiAgVG9vIG1hbnkgcGVvcGxlIHNlbmQgbWUgZW1haWwKK3NheWluZyBqdXN0ICJkZXZpY2UgbnVtYmVyIHJlcXVlc3QiIGluIHRoZSBzdWJqZWN0LgorCitTZWNvbmQsIHBsZWFzZSBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YgdGhlIGRldmljZSAqaW4gdGhlIHNhbWUgZm9ybWF0CithcyB0aGlzIGxpc3QqLglUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaXQgaXMgdGhlIG9ubHkgd2F5IEkgaGF2ZQorZm91bmQgdG8gZW5zdXJlIEkgaGF2ZSBhbGwgdGhlIHJlcXVpc2l0ZSBpbmZvcm1hdGlvbiB0byBwdWJsaXNoIHlvdXIKK2RldmljZSBhbmQgYXZvaWQgY29uZmxpY3RzLgorCitUaGlyZCwgcGxlYXNlIGRvbid0IGFzc3VtZSB0aGF0IHRoZSBkaXN0cmlidXRlZCB2ZXJzaW9uIG9mIHRoZSBsaXN0IGlzCit1cCB0byBkYXRlLiAgRHVlIHRvIHRoZSBudW1iZXIgb2YgcmVnaXN0cmF0aW9ucyBJIGhhdmUgdG8gbWFpbnRhaW4gaXQKK2luICJiYXRjaCBtb2RlIiwgc28gdGhlcmUgaXMgbGlrZWx5IGFkZGl0aW9uYWwgcmVnaXN0cmF0aW9ucyB0aGF0CitoYXZlbid0IGJlZW4gbGlzdGVkIHlldC4KKworRmluYWxseSwgc29tZXRpbWVzIEkgaGF2ZSB0byBwbGF5ICJuYW1lc3BhY2UgcG9saWNlLiIgIFBsZWFzZSBkb24ndCBiZQorb2ZmZW5kZWQuICBJIG9mdGVuIGdldCBzdWJtaXNzaW9ucyBmb3IgL2RldiBuYW1lcyB0aGF0IHdvdWxkIGJlIGJvdW5kCit0byBjYXVzZSBjb25mbGljdHMgZG93biB0aGUgcm9hZC4gIEkgYW0gdHJ5aW5nIHRvIGF2b2lkIGdldHRpbmcgaW4gYQorc2l0dWF0aW9uIHdoZXJlIHdlIHdvdWxkIGhhdmUgdG8gc3VmZmVyIGFuIGluY29tcGF0aWJsZSBmb3J3YXJkCitjaGFuZ2UuICBUaGVyZWZvcmUsIHBsZWFzZSBjb25zdWx0IHdpdGggbWUgKmJlZm9yZSogeW91IG1ha2UgeW91cgorZGV2aWNlIG5hbWVzIGFuZCBudW1iZXJzIGluIGFueSB3YXkgcHVibGljLCBhdCBsZWFzdCB0byB0aGUgcG9pbnQKK3doZXJlIGl0IHdvdWxkIGJlIGF0IGFsbCBkaWZmaWN1bHQgdG8gZ2V0IHRoZW0gY2hhbmdlZC4KKworWW91ciBjb29wZXJhdGlvbiBpcyBhcHByZWNpYXRlZC4KKworCisgIDAJCVVubmFtZWQgZGV2aWNlcyAoZS5nLiBub24tZGV2aWNlIG1vdW50cykKKwkJICAwID0gcmVzZXJ2ZWQgYXMgbnVsbCBkZXZpY2UgbnVtYmVyCisJCVNlZSBibG9jayBtYWpvciAxNDQsIDE0NSwgMTQ2IGZvciBleHBhbnNpb24gYXJlYXMuCisKKyAgMSBjaGFyCU1lbW9yeSBkZXZpY2VzCisJCSAgMSA9IC9kZXYvbWVtCQlQaHlzaWNhbCBtZW1vcnkgYWNjZXNzCisJCSAgMiA9IC9kZXYva21lbQkJS2VybmVsIHZpcnR1YWwgbWVtb3J5IGFjY2VzcworCQkgIDMgPSAvZGV2L251bGwJCU51bGwgZGV2aWNlCisJCSAgNCA9IC9kZXYvcG9ydAkJSS9PIHBvcnQgYWNjZXNzCisJCSAgNSA9IC9kZXYvemVybwkJTnVsbCBieXRlIHNvdXJjZQorCQkgIDYgPSAvZGV2L2NvcmUJCU9CU09MRVRFIC0gcmVwbGFjZWQgYnkgL3Byb2Mva2NvcmUKKwkJICA3ID0gL2Rldi9mdWxsCQlSZXR1cm5zIEVOT1NQQyBvbiB3cml0ZQorCQkgIDggPSAvZGV2L3JhbmRvbQlOb25kZXRlcm1pbmlzdGljIHJhbmRvbSBudW1iZXIgZ2VuLgorCQkgIDkgPSAvZGV2L3VyYW5kb20JRmFzdGVyLCBsZXNzIHNlY3VyZSByYW5kb20gbnVtYmVyIGdlbi4KKwkJIDEwID0gL2Rldi9haW8JCUFzeW5jcm9ub3VzIEkvTyBub3RpZmljYXRpb24gaW50ZXJmYWNlCisJCSAxMSA9IC9kZXYva21zZwkJV3JpdGVzIHRvIHRoaXMgY29tZSBvdXQgYXMgcHJpbnRrJ3MKKyAgMSBibG9jawlSQU0gZGlzaworCQkgIDAgPSAvZGV2L3JhbTAJCUZpcnN0IFJBTSBkaXNrCisJCSAgMSA9IC9kZXYvcmFtMQkJU2Vjb25kIFJBTSBkaXNrCisJCSAgICAuLi4KKwkJMjUwID0gL2Rldi9pbml0cmQJSW5pdGlhbCBSQU0gZGlzayB7Mi42fQorCisJCU9sZGVyIGtlcm5lbHMgaGFkIC9kZXYvcmFtZGlzayAoMSwgMSkgaGVyZS4KKwkJL2Rldi9pbml0cmQgcmVmZXJzIHRvIGEgUkFNIGRpc2sgd2hpY2ggd2FzIHByZWxvYWRlZAorCQlieSB0aGUgYm9vdCBsb2FkZXI7IG5ld2VyIGtlcm5lbHMgdXNlIC9kZXYvcmFtMCBmb3IKKwkJdGhlIGluaXRyZC4KKworICAyIGNoYXIJUHNldWRvLVRUWSBtYXN0ZXJzCisJCSAgMCA9IC9kZXYvcHR5cDAJRmlyc3QgUFRZIG1hc3RlcgorCQkgIDEgPSAvZGV2L3B0eXAxCVNlY29uZCBQVFkgbWFzdGVyCisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi9wdHllZgkyNTZ0aCBQVFkgbWFzdGVyCisKKwkJUHNldWRvLXR0eSdzIGFyZSBuYW1lZCBhcyBmb2xsb3dzOgorCQkqIE1hc3RlcnMgYXJlICJwdHkiLCBzbGF2ZXMgYXJlICJ0dHkiOworCQkqIHRoZSBmb3VydGggbGV0dGVyIGlzIG9uZSBvZiBwcXJzdHV2d3h5emFiY2RlIGluZGljYXRpbmcKKwkJICB0aGUgMXN0IHRocm91Z2ggMTZ0aCBzZXJpZXMgb2YgMTYgcHNldWRvLXR0eXMgZWFjaCwgYW5kCisJCSogdGhlIGZpZnRoIGxldHRlciBpcyBvbmUgb2YgMDEyMzQ1Njc4OWFiY2RlZiBpbmRpY2F0aW5nCisJCSAgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgc2VyaWVzLgorCisJCVRoZXNlIGFyZSB0aGUgb2xkLXN0eWxlIChCU0QpIFBUWSBkZXZpY2VzOyBVbml4OTgKKwkJZGV2aWNlcyBhcmUgb24gbWFqb3IgMTI4IGFuZCBhYm92ZSBhbmQgdXNlIHRoZSBQVFkKKwkJbWFzdGVyIG11bHRpcGxleCAoL2Rldi9wdG14KSB0byBhY3F1aXJlIGEgUFRZIG9uCisJCWRlbWFuZC4KKyAgCisgIDIgYmxvY2sJRmxvcHB5IGRpc2tzCisJCSAgMCA9IC9kZXYvZmQwCQlDb250cm9sbGVyIDAsIGRyaXZlIDAsIGF1dG9kZXRlY3QKKwkJICAxID0gL2Rldi9mZDEJCUNvbnRyb2xsZXIgMCwgZHJpdmUgMSwgYXV0b2RldGVjdAorCQkgIDIgPSAvZGV2L2ZkMgkJQ29udHJvbGxlciAwLCBkcml2ZSAyLCBhdXRvZGV0ZWN0CisJCSAgMyA9IC9kZXYvZmQzCQlDb250cm9sbGVyIDAsIGRyaXZlIDMsIGF1dG9kZXRlY3QKKwkJMTI4ID0gL2Rldi9mZDQJCUNvbnRyb2xsZXIgMSwgZHJpdmUgMCwgYXV0b2RldGVjdAorCQkxMjkgPSAvZGV2L2ZkNQkJQ29udHJvbGxlciAxLCBkcml2ZSAxLCBhdXRvZGV0ZWN0CisJCTEzMCA9IC9kZXYvZmQ2CQlDb250cm9sbGVyIDEsIGRyaXZlIDIsIGF1dG9kZXRlY3QKKwkJMTMxID0gL2Rldi9mZDcJCUNvbnRyb2xsZXIgMSwgZHJpdmUgMywgYXV0b2RldGVjdAorCisJCVRvIHNwZWNpZnkgZm9ybWF0LCBhZGQgdG8gdGhlIGF1dG9kZXRlY3QgZGV2aWNlIG51bWJlcjoKKwkJICAwID0gL2Rldi9mZD8JCUF1dG9kZXRlY3QgZm9ybWF0CisJCSAgNCA9IC9kZXYvZmQ/ZDM2MAk1LjI1IiAgMzYwSyBpbiBhIDM2MEsgIGRyaXZlKDEpCisJCSAyMCA9IC9kZXYvZmQ/aDM2MAk1LjI1IiAgMzYwSyBpbiBhIDEyMDBLIGRyaXZlKDEpCisJCSA0OCA9IC9kZXYvZmQ/aDQxMAk1LjI1IiAgNDEwSyBpbiBhIDEyMDBLIGRyaXZlCisJCSA2NCA9IC9kZXYvZmQ/aDQyMAk1LjI1IiAgNDIwSyBpbiBhIDEyMDBLIGRyaXZlCisJCSAyNCA9IC9kZXYvZmQ/aDcyMAk1LjI1IiAgNzIwSyBpbiBhIDEyMDBLIGRyaXZlCisJCSA4MCA9IC9kZXYvZmQ/aDg4MAk1LjI1IiAgODgwSyBpbiBhIDEyMDBLIGRyaXZlKDEpCisJCSAgOCA9IC9kZXYvZmQ/aDEyMDAJNS4yNSIgMTIwMEsgaW4gYSAxMjAwSyBkcml2ZSgxKQorCQkgNDAgPSAvZGV2L2ZkP2gxNDQwCTUuMjUiIDE0NDBLIGluIGEgMTIwMEsgZHJpdmUoMSkKKwkJIDU2ID0gL2Rldi9mZD9oMTQ3Ngk1LjI1IiAxNDc2SyBpbiBhIDEyMDBLIGRyaXZlCisJCSA3MiA9IC9kZXYvZmQ/aDE0OTQJNS4yNSIgMTQ5NEsgaW4gYSAxMjAwSyBkcml2ZQorCQkgOTIgPSAvZGV2L2ZkP2gxNjAwCTUuMjUiIDE2MDBLIGluIGEgMTIwMEsgZHJpdmUoMSkKKworCQkgMTIgPSAvZGV2L2ZkP3UzNjAJMy41IiAgIDM2MEsgRG91YmxlIERlbnNpdHkoMikKKwkJIDE2ID0gL2Rldi9mZD91NzIwCTMuNSIgICA3MjBLIERvdWJsZSBEZW5zaXR5KDEpCisJCTEyMCA9IC9kZXYvZmQ/dTgwMAkzLjUiICAgODAwSyBEb3VibGUgRGVuc2l0eSgyKQorCQkgNTIgPSAvZGV2L2ZkP3U4MjAJMy41IiAgIDgyMEsgRG91YmxlIERlbnNpdHkKKwkJIDY4ID0gL2Rldi9mZD91ODMwCTMuNSIgICA4MzBLIERvdWJsZSBEZW5zaXR5CisJCSA4NCA9IC9kZXYvZmQ/dTEwNDAJMy41IiAgMTA0MEsgRG91YmxlIERlbnNpdHkoMSkKKwkJIDg4ID0gL2Rldi9mZD91MTEyMAkzLjUiICAxMTIwSyBEb3VibGUgRGVuc2l0eSgxKQorCQkgMjggPSAvZGV2L2ZkP3UxNDQwCTMuNSIgIDE0NDBLIEhpZ2ggRGVuc2l0eSgxKQorCQkxMjQgPSAvZGV2L2ZkP3UxNjAwCTMuNSIgIDE2MDBLIEhpZ2ggRGVuc2l0eSgxKQorCQkgNDQgPSAvZGV2L2ZkP3UxNjgwCTMuNSIgIDE2ODBLIEhpZ2ggRGVuc2l0eSgzKQorCQkgNjAgPSAvZGV2L2ZkP3UxNzIyCTMuNSIgIDE3MjJLIEhpZ2ggRGVuc2l0eQorCQkgNzYgPSAvZGV2L2ZkP3UxNzQzCTMuNSIgIDE3NDNLIEhpZ2ggRGVuc2l0eQorCQkgOTYgPSAvZGV2L2ZkP3UxNzYwCTMuNSIgIDE3NjBLIEhpZ2ggRGVuc2l0eQorCQkxMTYgPSAvZGV2L2ZkP3UxODQwCTMuNSIgIDE4NDBLIEhpZ2ggRGVuc2l0eSgzKQorCQkxMDAgPSAvZGV2L2ZkP3UxOTIwCTMuNSIgIDE5MjBLIEhpZ2ggRGVuc2l0eSgxKQorCQkgMzIgPSAvZGV2L2ZkP3UyODgwCTMuNSIgIDI4ODBLIEV4dHJhIERlbnNpdHkoMSkKKwkJMTA0ID0gL2Rldi9mZD91MzIwMAkzLjUiICAzMjAwSyBFeHRyYSBEZW5zaXR5CisJCTEwOCA9IC9kZXYvZmQ/dTM1MjAJMy41IiAgMzUyMEsgRXh0cmEgRGVuc2l0eQorCQkxMTIgPSAvZGV2L2ZkP3UzODQwCTMuNSIgIDM4NDBLIEV4dHJhIERlbnNpdHkoMSkKKworCQkgMzYgPSAvZGV2L2ZkP0NvbXBhUQlDb21wYXEgMjg4MEsgZHJpdmU7IG9ic29sZXRlPworCisJCSgxKSBBdXRvZGV0ZWN0YWJsZSBmb3JtYXQKKwkJKDIpIEF1dG9kZXRlY3RhYmxlIGZvcm1hdCBpbiBhIERvdWJsZSBEZW5zaXR5ICg3MjBLKSBkcml2ZSBvbmx5CisJCSgzKSBBdXRvZGV0ZWN0YWJsZSBmb3JtYXQgaW4gYSBIaWdoIERlbnNpdHkgKDE0NDBLKSBkcml2ZSBvbmx5CisKKwkJTk9URTogVGhlIGxldHRlciBpbiB0aGUgZGV2aWNlIG5hbWUgKGQsIHEsIGggb3IgdSkKKwkJc2lnbmlmaWVzIHRoZSB0eXBlIG9mIGRyaXZlOiA1LjI1IiBEb3VibGUgRGVuc2l0eSAoZCksCisJCTUuMjUiIFF1YWQgRGVuc2l0eSAocSksIDUuMjUiIEhpZ2ggRGVuc2l0eSAoaCkgb3IgMy41IgorCQkoYW55IG1vZGVsLCB1KS4JIFRoZSB1c2Ugb2YgdGhlIGNhcGl0YWwgbGV0dGVycyBELCBICisJCWFuZCBFIGZvciB0aGUgMy41IiBtb2RlbHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQsIHNpbmNlCisJCXRoZSBkcml2ZSB0eXBlIGlzIGluc2lnbmlmaWNhbnQgZm9yIHRoZXNlIGRldmljZXMuCisKKyAgMyBjaGFyCVBzZXVkby1UVFkgc2xhdmVzCisJCSAgMCA9IC9kZXYvdHR5cDAJRmlyc3QgUFRZIHNsYXZlCisJCSAgMSA9IC9kZXYvdHR5cDEJU2Vjb25kIFBUWSBzbGF2ZQorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvdHR5ZWYJMjU2dGggUFRZIHNsYXZlCisKKwkJVGhlc2UgYXJlIHRoZSBvbGQtc3R5bGUgKEJTRCkgUFRZIGRldmljZXM7IFVuaXg5OAorCQlkZXZpY2VzIGFyZSBvbiBtYWpvciAxMzYgYW5kIGFib3ZlLgorCisgIDMgYmxvY2sJRmlyc3QgTUZNLCBSTEwgYW5kIElERSBoYXJkIGRpc2svQ0QtUk9NIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L2hkYQkJTWFzdGVyOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisJCSA2NCA9IC9kZXYvaGRiCQlTbGF2ZTogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCisJCUZvciBwYXJ0aXRpb25zLCBhZGQgdG8gdGhlIHdob2xlIGRpc2sgZGV2aWNlIG51bWJlcjoKKwkJICAwID0gL2Rldi9oZD8JCVdob2xlIGRpc2sKKwkJICAxID0gL2Rldi9oZD8xCQlGaXJzdCBwYXJ0aXRpb24KKwkJICAyID0gL2Rldi9oZD8yCQlTZWNvbmQgcGFydGl0aW9uCisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi9oZD82Mwk2M3JkIHBhcnRpdGlvbgorCisJCUZvciBMaW51eC9pMzg2LCBwYXJ0aXRpb25zIDEtNCBhcmUgdGhlIHByaW1hcnkKKwkJcGFydGl0aW9ucywgYW5kIDUgYW5kIGFib3ZlIGFyZSBsb2dpY2FsIHBhcnRpdGlvbnMuCisJCU90aGVyIHZlcnNpb25zIG9mIExpbnV4IHVzZSBwYXJ0aXRpb25pbmcgc2NoZW1lcworCQlhcHByb3ByaWF0ZSB0byB0aGVpciByZXNwZWN0aXZlIGFyY2hpdGVjdHVyZXMuCisKKyAgNCBjaGFyCVRUWSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvdHR5MAkJQ3VycmVudCB2aXJ0dWFsIGNvbnNvbGUKKworCQkgIDEgPSAvZGV2L3R0eTEJCUZpcnN0IHZpcnR1YWwgY29uc29sZQorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvdHR5NjMJNjNyZCB2aXJ0dWFsIGNvbnNvbGUKKwkJIDY0ID0gL2Rldi90dHlTMAlGaXJzdCBVQVJUIHNlcmlhbCBwb3J0CisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi90dHlTMTkxCTE5Mm5kIFVBUlQgc2VyaWFsIHBvcnQKKworCQlVQVJUIHNlcmlhbCBwb3J0cyByZWZlciB0byA4MjUwLzE2NDUwLzE2NTUwIHNlcmllcyBkZXZpY2VzLgorCisJCU9sZGVyIHZlcnNpb25zIG9mIHRoZSBMaW51eCBrZXJuZWwgdXNlZCB0aGlzIG1ham9yCisJCW51bWJlciBmb3IgQlNEIFBUWSBkZXZpY2VzLiAgQXMgb2YgTGludXggMi4xLjExNSwgdGhpcworCQlpcyBubyBsb25nZXIgc3VwcG9ydGVkLgkgVXNlIG1ham9yIG51bWJlcnMgMiBhbmQgMy4KKworICA0IGJsb2NrCUFsaWFzZXMgZm9yIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtYWpvciBkZXZpY2VzIHRvIGJlIHVzZWQKKwkJd2hlbiBpdHMgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSB0aGUgcmVhbCBkZXZpY2Ugbm9kZXMKKwkJYmVjYXVzZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgcmVhZC1vbmx5LgorCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9yb290CisKKyAgNSBjaGFyCUFsdGVybmF0ZSBUVFkgZGV2aWNlcworCQkgIDAgPSAvZGV2L3R0eQkJQ3VycmVudCBUVFkgZGV2aWNlCisJCSAgMSA9IC9kZXYvY29uc29sZQlTeXN0ZW0gY29uc29sZQorCQkgIDIgPSAvZGV2L3B0bXgJCVBUWSBtYXN0ZXIgbXVsdGlwbGV4CisJCSA2NCA9IC9kZXYvY3VhMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVMwCisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi9jdWExOTEJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVMxOTEKKworCQkoNSwxKSBpcyAvZGV2L2NvbnNvbGUgc3RhcnRpbmcgd2l0aCBMaW51eCAyLjEuNzEuICBTZWUKKwkJdGhlIHNlY3Rpb24gb24gdGVybWluYWwgZGV2aWNlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorCQlvbiAvZGV2L2NvbnNvbGUuCisKKyAgNiBjaGFyCVBhcmFsbGVsIHByaW50ZXIgZGV2aWNlcworCQkgIDAgPSAvZGV2L2xwMAkJUGFyYWxsZWwgcHJpbnRlciBvbiBwYXJwb3J0MAorCQkgIDEgPSAvZGV2L2xwMQkJUGFyYWxsZWwgcHJpbnRlciBvbiBwYXJwb3J0MQorCQkgICAgLi4uCisKKwkJQ3VycmVudCBMaW51eCBrZXJuZWxzIG5vIGxvbmdlciBoYXZlIGEgZml4ZWQgbWFwcGluZworCQliZXR3ZWVuIHBhcmFsbGVsIHBvcnRzIGFuZCBJL08gYWRkcmVzc2VzLiAgSW5zdGVhZCwKKwkJdGhleSBhcmUgcmVkaXJlY3RlZCB0aHJvdWdoIHRoZSBwYXJwb3J0IG11bHRpcGxleCBsYXllci4KKworICA3IGNoYXIJVmlydHVhbCBjb25zb2xlIGNhcHR1cmUgZGV2aWNlcworCQkgIDAgPSAvZGV2L3ZjcwkJQ3VycmVudCB2YyB0ZXh0IGNvbnRlbnRzCisJCSAgMSA9IC9kZXYvdmNzMQkJdHR5MSB0ZXh0IGNvbnRlbnRzCisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi92Y3M2Mwl0dHk2MyB0ZXh0IGNvbnRlbnRzCisJCTEyOCA9IC9kZXYvdmNzYQkJQ3VycmVudCB2YyB0ZXh0L2F0dHJpYnV0ZSBjb250ZW50cworCQkxMjkgPSAvZGV2L3Zjc2ExCXR0eTEgdGV4dC9hdHRyaWJ1dGUgY29udGVudHMKKwkJICAgIC4uLgorCQkxOTEgPSAvZGV2L3Zjc2E2Mwl0dHk2MyB0ZXh0L2F0dHJpYnV0ZSBjb250ZW50cworCQorCQlOT1RFOiBUaGVzZSBkZXZpY2VzIHBlcm1pdCBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2Vzcy4KKworICA3IGJsb2NrCUxvb3BiYWNrIGRldmljZXMKKwkJICAwID0gL2Rldi9sb29wMAlGaXJzdCBsb29wYmFjayBkZXZpY2UKKwkJICAxID0gL2Rldi9sb29wMQlTZWNvbmQgbG9vcGJhY2sgZGV2aWNlCisJCSAgICAuLi4KKworCQlUaGUgbG9vcGJhY2sgZGV2aWNlcyBhcmUgdXNlZCB0byBtb3VudCBmaWxlc3lzdGVtcyBub3QKKwkJYXNzb2NpYXRlZCB3aXRoIGJsb2NrIGRldmljZXMuCVRoZSBiaW5kaW5nIHRvIHRoZQorCQlsb29wYmFjayBkZXZpY2VzIGlzIGhhbmRsZWQgYnkgbW91bnQoOCkgb3IgbG9zZXR1cCg4KS4KKworICA4IGJsb2NrCVNDU0kgZGlzayBkZXZpY2VzICgwLTE1KQorCQkgIDAgPSAvZGV2L3NkYQkJRmlyc3QgU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9zZGIJCVNlY29uZCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMzIgPSAvZGV2L3NkYwkJVGhpcmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L3NkcAkJU2l4dGVlbnRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworICA5IGNoYXIJU0NTSSB0YXBlIGRldmljZXMKKwkJICAwID0gL2Rldi9zdDAJCUZpcnN0IFNDU0kgdGFwZSwgbW9kZSAwCisJCSAgMSA9IC9kZXYvc3QxCQlTZWNvbmQgU0NTSSB0YXBlLCBtb2RlIDAKKwkJICAgIC4uLgorCQkgMzIgPSAvZGV2L3N0MGwJCUZpcnN0IFNDU0kgdGFwZSwgbW9kZSAxCisJCSAzMyA9IC9kZXYvc3QxbAkJU2Vjb25kIFNDU0kgdGFwZSwgbW9kZSAxCisJCSAgICAuLi4KKwkJIDY0ID0gL2Rldi9zdDBtCQlGaXJzdCBTQ1NJIHRhcGUsIG1vZGUgMgorCQkgNjUgPSAvZGV2L3N0MW0JCVNlY29uZCBTQ1NJIHRhcGUsIG1vZGUgMgorCQkgICAgLi4uCisJCSA5NiA9IC9kZXYvc3QwYQkJRmlyc3QgU0NTSSB0YXBlLCBtb2RlIDMKKwkJIDk3ID0gL2Rldi9zdDFhCQlTZWNvbmQgU0NTSSB0YXBlLCBtb2RlIDMKKwkJICAgICAgLi4uCisJCTEyOCA9IC9kZXYvbnN0MAkJRmlyc3QgU0NTSSB0YXBlLCBtb2RlIDAsIG5vIHJld2luZAorCQkxMjkgPSAvZGV2L25zdDEJCVNlY29uZCBTQ1NJIHRhcGUsIG1vZGUgMCwgbm8gcmV3aW5kCisJCSAgICAuLi4KKwkJMTYwID0gL2Rldi9uc3QwbAlGaXJzdCBTQ1NJIHRhcGUsIG1vZGUgMSwgbm8gcmV3aW5kCisJCTE2MSA9IC9kZXYvbnN0MWwJU2Vjb25kIFNDU0kgdGFwZSwgbW9kZSAxLCBubyByZXdpbmQKKwkJICAgIC4uLgorCQkxOTIgPSAvZGV2L25zdDBtCUZpcnN0IFNDU0kgdGFwZSwgbW9kZSAyLCBubyByZXdpbmQKKwkJMTkzID0gL2Rldi9uc3QxbQlTZWNvbmQgU0NTSSB0YXBlLCBtb2RlIDIsIG5vIHJld2luZAorCQkgICAgLi4uCisJCTIyNCA9IC9kZXYvbnN0MGEJRmlyc3QgU0NTSSB0YXBlLCBtb2RlIDMsIG5vIHJld2luZAorCQkyMjUgPSAvZGV2L25zdDFhCVNlY29uZCBTQ1NJIHRhcGUsIG1vZGUgMywgbm8gcmV3aW5kCisJCSAgICAuLi4KKworCQkiTm8gcmV3aW5kIiByZWZlcnMgdG8gdGhlIG9taXNzaW9uIG9mIHRoZSBkZWZhdWx0CisJCWF1dG9tYXRpYyByZXdpbmQgb24gZGV2aWNlIGNsb3NlLiAgVGhlIE1UUkVXIG9yIE1UT0ZGTAorCQlpb2N0bCgpJ3MgY2FuIGJlIHVzZWQgdG8gcmV3aW5kIHRoZSB0YXBlIHJlZ2FyZGxlc3Mgb2YKKwkJdGhlIGRldmljZSB1c2VkIHRvIGFjY2VzcyBpdC4KKworICA5IGJsb2NrCU1ldGFkaXNrIChSQUlEKSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvbWQwCQlGaXJzdCBtZXRhZGlzayBncm91cAorCQkgIDEgPSAvZGV2L21kMQkJU2Vjb25kIG1ldGFkaXNrIGdyb3VwCisJCSAgICAuLi4KKworCQlUaGUgbWV0YWRpc2sgZHJpdmVyIGlzIHVzZWQgdG8gc3BhbiBhCisJCWZpbGVzeXN0ZW0gYWNyb3NzIG11bHRpcGxlIHBoeXNpY2FsIGRpc2tzLgorCisgMTAgY2hhcglOb24tc2VyaWFsIG1pY2UsIG1pc2MgZmVhdHVyZXMKKwkJICAwID0gL2Rldi9sb2dpYm0JTG9naXRlY2ggYnVzIG1vdXNlCisJCSAgMSA9IC9kZXYvcHNhdXgJUFMvMi1zdHlsZSBtb3VzZSBwb3J0CisJCSAgMiA9IC9kZXYvaW5wb3J0Ym0JTWljcm9zb2Z0IElucG9ydCBidXMgbW91c2UKKwkJICAzID0gL2Rldi9hdGlibQlBVEkgWEwgYnVzIG1vdXNlCisJCSAgNCA9IC9kZXYvamJtCQlKLW1vdXNlCisJCSAgNCA9IC9kZXYvYW1pZ2Ftb3VzZQlBbWlnYSBtb3VzZSAoNjhrL0FtaWdhKQorCQkgIDUgPSAvZGV2L2F0YXJpbW91c2UJQXRhcmkgbW91c2UKKwkJICA2ID0gL2Rldi9zdW5tb3VzZQlTdW4gbW91c2UKKwkJICA3ID0gL2Rldi9hbWlnYW1vdXNlMQlTZWNvbmQgQW1pZ2EgbW91c2UKKwkJICA4ID0gL2Rldi9zbW91c2UJU2ltcGxlIHNlcmlhbCBtb3VzZSBkcml2ZXIKKwkJICA5ID0gL2Rldi9wYzExMHBhZAlJQk0gUEMtMTEwIGRpZ2l0aXplciBwYWQKKwkJIDEwID0gL2Rldi9hZGJtb3VzZQlBcHBsZSBEZXNrdG9wIEJ1cyBtb3VzZQorCQkgMTEgPSAvZGV2L3ZydHBhbmVsCVZyNDF4eCBlbWJlZGRlZCB0b3VjaCBwYW5lbAorCQkgMTMgPSAvZGV2L3ZwY21vdXNlCUNvbm5lY3RpeCBWaXJ0dWFsIFBDIE1vdXNlCisJCSAxNCA9IC9kZXYvdG91Y2hzY3JlZW4vdWNiMXgwMCAgVUNCIDF4MDAgdG91Y2hzY3JlZW4KKwkJIDE1ID0gL2Rldi90b3VjaHNjcmVlbi9tazcxMglNSzcxMiB0b3VjaHNjcmVlbgorCQkxMjggPSAvZGV2L2JlZXAJCUZhbmN5IGJlZXAgZGV2aWNlCisJCTEyOSA9IC9kZXYvbW9kcmVxCUtlcm5lbCBtb2R1bGUgbG9hZCByZXF1ZXN0IHsyLjZ9CisJCTEzMCA9IC9kZXYvd2F0Y2hkb2cJV2F0Y2hkb2cgdGltZXIgcG9ydAorCQkxMzEgPSAvZGV2L3RlbXBlcmF0dXJlCU1hY2hpbmUgaW50ZXJuYWwgdGVtcGVyYXR1cmUKKwkJMTMyID0gL2Rldi9od3RyYXAJSGFyZHdhcmUgZmF1bHQgdHJhcAorCQkxMzMgPSAvZGV2L2V4dHRycAlFeHRlcm5hbCBkZXZpY2UgdHJhcAorCQkxMzQgPSAvZGV2L2FwbV9iaW9zCUFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgQklPUworCQkxMzUgPSAvZGV2L3J0YwkJUmVhbCBUaW1lIENsb2NrCisJCTEzOSA9IC9kZXYvb3BlbnByb20JU1BBUkMgT3BlbkJvb3QgUFJPTQorCQkxNDAgPSAvZGV2L3JlbGF5OAlCZXJrc2hpcmUgUHJvZHVjdHMgT2N0YWwgcmVsYXkgY2FyZAorCQkxNDEgPSAvZGV2L3JlbGF5MTYJQmVya3NoaXJlIFByb2R1Y3RzIElTTy0xNiByZWxheSBjYXJkCisJCTE0MiA9IC9kZXYvbXNyCQl4ODYgbW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXJzIHsyLjZ9CisJCTE0MyA9IC9kZXYvcGNpY29uZglQQ0kgY29uZmlndXJhdGlvbiBzcGFjZQorCQkxNDQgPSAvZGV2L252cmFtCU5vbi12b2xhdGlsZSBjb25maWd1cmF0aW9uIFJBTQorCQkxNDUgPSAvZGV2L2hmbW9kZW0JU291bmRjYXJkIHNob3J0d2F2ZSBtb2RlbSBjb250cm9sIHsyLjZ9CisJCTE0NiA9IC9kZXYvZ3JhcGhpY3MJTGludXgvU0dJIGdyYXBoaWNzIGRldmljZQorCQkxNDcgPSAvZGV2L29wZW5nbAlMaW51eC9TR0kgT3BlbkdMIHBpcGUKKwkJMTQ4ID0gL2Rldi9nZngJCUxpbnV4L1NHSSBncmFwaGljcyBlZmZlY3RzIGRldmljZQorCQkxNDkgPSAvZGV2L2lucHV0L21vdXNlCUxpbnV4L1NHSSBJcml4IGVtdWxhdGlvbiBtb3VzZQorCQkxNTAgPSAvZGV2L2lucHV0L2tleWJvYXJkIExpbnV4L1NHSSBJcml4IGVtdWxhdGlvbiBrZXlib2FyZAorCQkxNTEgPSAvZGV2L2xlZAkJRnJvbnQgcGFuZWwgTEVEcworCQkxNTIgPSAvZGV2L2twb2xsCUtlcm5lbCBQb2xsIERyaXZlcgorCQkxNTMgPSAvZGV2L21lcmdlbWVtCU1lbW9yeSBtZXJnZSBkZXZpY2UKKwkJMTU0ID0gL2Rldi9wbXUJCU1hY2ludG9zaCBQb3dlckJvb2sgcG93ZXIgbWFuYWdlcgorCQkxNTUgPSAvZGV2L2lzaWN0bAlNdWx0aVRlY2ggSVNJQ29tIHNlcmlhbCBjb250cm9sCisJCTE1NiA9IC9kZXYvbGNkCQlGcm9udCBwYW5lbCBMQ0QgZGlzcGxheQorCQkxNTcgPSAvZGV2L2FjCQlBcHBsaWNvbSBJbnRsIFByb2ZpYnVzIGNhcmQKKwkJMTU4ID0gL2Rldi9ud2J1dHRvbglOZXR3aW5kZXIgZXh0ZXJuYWwgYnV0dG9uCisJCTE1OSA9IC9kZXYvbndkZWJ1ZwlOZXR3aW5kZXIgZGVidWcgaW50ZXJmYWNlCisJCTE2MCA9IC9kZXYvbndmbGFzaAlOZXR3aW5kZXIgZmxhc2ggbWVtb3J5CisJCTE2MSA9IC9kZXYvdXNlcmRtYQlVc2VyLXNwYWNlIERNQSBhY2Nlc3MKKwkJMTYyID0gL2Rldi9zbWJ1cwlTeXN0ZW0gTWFuYWdlbWVudCBCdXMKKwkJMTYzID0gL2Rldi9saWsJCUxvZ2l0ZWNoIEludGVybmV0IEtleWJvYXJkCisJCTE2NCA9IC9kZXYvaXBtbwkJSW50ZWwgSW50ZWxsaWdlbnQgUGxhdGZvcm0gTWFuYWdlbWVudAorCQkxNjUgPSAvZGV2L3ZtbW9uCVZNV2FyZSB2aXJ0dWFsIG1hY2hpbmUgbW9uaXRvcgorCQkxNjYgPSAvZGV2L2kyby9jdGwJSTJPIGNvbmZpZ3VyYXRpb24gbWFuYWdlcgorCQkxNjcgPSAvZGV2L3NwZWNpYWxpeF9zeGN0bCBTcGVjaWFsaXggc2VyaWFsIGNvbnRyb2wKKwkJMTY4ID0gL2Rldi90Y2xkcnYJVGVjaG5vbG9neSBDb25jZXB0cyBzZXJpYWwgY29udHJvbAorCQkxNjkgPSAvZGV2L3NwZWNpYWxpeF9yaW9jdGwgU3BlY2lhbGl4IFJJTyBzZXJpYWwgY29udHJvbAorCQkxNzAgPSAvZGV2L3RoaW5rcGFkL3RoaW5rcGFkCUlCTSBUaGlua3BhZCBkZXZpY2VzCisJCTE3MSA9IC9kZXYvc3JyaXBjCVFOWDQgQVBJIElQQyBtYW5hZ2VyCisJCTE3MiA9IC9kZXYvdXNlbWFjbG9uZQlTZW1hcGhvcmUgY2xvbmUgZGV2aWNlCisJCTE3MyA9IC9kZXYvaXBtaWtjcwlJbnRlbGxpZ2VudCBQbGF0Zm9ybSBNYW5hZ2VtZW50CisJCTE3NCA9IC9kZXYvdWN0cmwJU1BBUkNib29rIDMgbWljcm9jb250cm9sbGVyCisJCTE3NSA9IC9kZXYvYWdwZ2FydAlBR1AgR3JhcGhpY3MgQWRkcmVzcyBSZW1hcHBpbmcgVGFibGUKKwkJMTc2ID0gL2Rldi9ndHJzYwlHb3JneSBUaW1pbmcgcmFkaW8gY2xvY2sKKwkJMTc3ID0gL2Rldi9jYm0JCVNlcmlhbCBDQk0gYnVzCisJCTE3OCA9IC9kZXYvanNmbGFzaAlKYXZhU3RhdGlvbiBPUyBmbGFzaCBTSU1NCisJCTE3OSA9IC9kZXYveHN2YwkJSGlnaC1zcGVlZCBzaGFyZWQtbWVtL3NlbWFwaG9yZSBzZXJ2aWNlCisJCTE4MCA9IC9kZXYvdnJidXR0b25zCVZyNDF4eCBidXR0b24gaW5wdXQgZGV2aWNlCisJCTE4MSA9IC9kZXYvdG9zaGliYQlUb3NoaWJhIGxhcHRvcCBTTU0gc3VwcG9ydAorCQkxODIgPSAvZGV2L3BlcmZjdHIJUGVyZm9ybWFuY2UtbW9uaXRvcmluZyBjb3VudGVycworCQkxODMgPSAvZGV2L2h3cm5nCUdlbmVyaWMgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKwkJMTg0ID0gL2Rldi9jcHUvbWljcm9jb2RlIENQVSBtaWNyb2NvZGUgdXBkYXRlIGludGVyZmFjZQorCQkxODYgPSAvZGV2L2F0b21pY3BzCUF0b21pYyBzaGFwc2hvdCBvZiBwcm9jZXNzIHN0YXRlIGRhdGEKKwkJMTg3ID0gL2Rldi9pcm5ldAlJck5FVCBkZXZpY2UKKwkJMTg4ID0gL2Rldi9zbWJ1c2Jpb3MJU01CdXMgQklPUworCQkxODkgPSAvZGV2L3Vzc3BfY3RsCVVzZXIgc3BhY2Ugc2VyaWFsIHBvcnQgY29udHJvbAorCQkxOTAgPSAvZGV2L2NyYXNoCU1pc3Npb24gQ3JpdGljYWwgTGludXggY3Jhc2ggZHVtcCBmYWNpbGl0eQorCQkxOTEgPSAvZGV2L3BjbDE4MQk8aW5mb3JtYXRpb24gbWlzc2luZz4KKwkJMTkyID0gL2Rldi9uYXNfeGJ1cwlOQVMgeGJ1cyBMQ0QvYnV0dG9ucyBhY2Nlc3MKKwkJMTkzID0gL2Rldi9kN3MJCVNQQVJDIDctc2VnbWVudCBkaXNwbGF5CisJCTE5NCA9IC9kZXYvemtzaGltCVplcm8tS25vd2xlZGdlIG5ldHdvcmsgc2hpbSBjb250cm9sCisJCTE5NSA9IC9kZXYvZWxvZ3JhcGhpY3MvZTIyMDEJRWxvZ3JhcGhpY3MgdG91Y2hzY3JlZW4gRTI3MS0yMjAxCisJCTE5OCA9IC9kZXYvc2V4ZWMJU2lnbmVkIGV4ZWN1dGFibGUgaW50ZXJmYWNlCisJCTE5OSA9IC9kZXYvc2Nhbm5lcnMvY3VlY2F0IDpDdWVDYXQgYmFyY29kZSBzY2FubmVyCisJCTIwMCA9IC9kZXYvbmV0L3R1bglUQVAvVFVOIG5ldHdvcmsgZGV2aWNlCisJCTIwMSA9IC9kZXYvYnV0dG9uL2d1bHBiCVRyYW5zbWV0YSBHVUxQLUIgYnV0dG9ucworCQkyMDIgPSAvZGV2L2VtZC9jdGwJRW5oYW5jZWQgTWV0YWRpc2sgUkFJRCAoRU1EKSBjb250cm9sCisJCTIwNCA9IC9kZXYvdmlkZW8vZW04MzAwCQlFTTgzMDAgRFZEIGRlY29kZXIgY29udHJvbAorCQkyMDUgPSAvZGV2L3ZpZGVvL2VtODMwMF9tdglFTTgzMDAgRFZEIGRlY29kZXIgdmlkZW8KKwkJMjA2ID0gL2Rldi92aWRlby9lbTgzMDBfbWEJRU04MzAwIERWRCBkZWNvZGVyIGF1ZGlvCisJCTIwNyA9IC9kZXYvdmlkZW8vZW04MzAwX3NwCUVNODMwMCBEVkQgZGVjb2RlciBzdWJwaWN0dXJlCisJCTIwOCA9IC9kZXYvY29tcGFxL2NwcXBocGMJQ29tcGFxIFBDSSBIb3QgUGx1ZyBDb250cm9sbGVyCisJCTIwOSA9IC9kZXYvY29tcGFxL2NwcXJpZAlDb21wYXEgUmVtb3RlIEluc2lnaHQgRHJpdmVyCisJCTIxMCA9IC9kZXYvaW1waS9idAlJTVBJIGNvcHJvY2Vzc29yIGJsb2NrIHRyYW5zZmVyCQorCQkyMTEgPSAvZGV2L2ltcGkvc21pYwlJTVBJIGNvcHJvY2Vzc29yIHN0cmVhbSBpbnRlcmZhY2UKKwkJMjEyID0gL2Rldi93YXRjaGRvZ3MvMAlGaXJzdCB3YXRjaGRvZyBkZXZpY2UKKwkJMjEzID0gL2Rldi93YXRjaGRvZ3MvMQlTZWNvbmQgd2F0Y2hkb2cgZGV2aWNlCisJCTIxNCA9IC9kZXYvd2F0Y2hkb2dzLzIJVGhpcmQgd2F0Y2hkb2cgZGV2aWNlCisJCTIxNSA9IC9kZXYvd2F0Y2hkb2dzLzMJRm91cnRoIHdhdGNoZG9nIGRldmljZQorCQkyMTYgPSAvZGV2L2Z1aml0c3UvYXBhbmVsCUZ1aml0c3UvU2llbWVucyBhcHBsaWNhdGlvbiBwYW5lbAorCQkyMTcgPSAvZGV2L25pL25hdG1vdG4JCU5hdGlvbmFsIEluc3RydW1lbnRzIE1vdGlvbgorCQkyMTggPSAvZGV2L2tjaHVpZAlJbnRlci1wcm9jZXNzIGNodWlkIGNvbnRyb2wKKwkJMjE5ID0gL2Rldi9tb2RlbXMvbXdhdmUJTVdhdmUgbW9kZW0gZmlybXdhcmUgdXBsb2FkCisJCTIyMCA9IC9kZXYvbXB0Y3RsCU1lc3NhZ2UgcGFzc2luZyB0ZWNobm9sb2d5IChNUFQpIGNvbnRyb2wKKwkJMjIxID0gL2Rldi9tdmlzdGEvaHNzZHNpCU1vbnRhdmlzdGEgUElDTUcgaG90IHN3YXAgc3lzdGVtIGRyaXZlcgorCQkyMjIgPSAvZGV2L212aXN0YS9oYXNpCQlNb250YXZpc3RhIFBJQ01HIGhpZ2ggYXZhaWxhYmlsaXR5CisJCTIyMyA9IC9kZXYvaW5wdXQvdWlucHV0CQlVc2VyIGxldmVsIGRyaXZlciBzdXBwb3J0IGZvciBpbnB1dAorCQkyMjQgPSAvZGV2L3RwbQkJVENQQSBUUE0gZHJpdmVyCisJCTIyNSA9IC9kZXYvcHBzCQlQdWxzZSBQZXIgU2Vjb25kIGRyaXZlcgorCQkyMjYgPSAvZGV2L3N5c3RyYWNlCVN5c3RyYWNlIGRldmljZQorCQkyMjcgPSAvZGV2L21jZWxvZwlYODZfNjQgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gZHJpdmVyCisJCTIyOCA9IC9kZXYvaHBldAkJSFBFVCBkcml2ZXIKKwkJMjI5ID0gL2Rldi9mdXNlCQlGdXNlICh2aXJ0dWFsIGZpbGVzeXN0ZW0gaW4gdXNlci1zcGFjZSkKKwkJMjMwID0gL2Rldi9taWRpc2hhcmUJTWlkaVNoYXJlIGRyaXZlcgorCQkyNDAtMjU0CQkJUmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZQorCQkyNTUJCQlSZXNlcnZlZCBmb3IgTUlTQ19EWU5BTUlDX01JTk9SCisKKyAxMSBjaGFyCVJhdyBrZXlib2FyZCBkZXZpY2UJKExpbnV4L1NQQVJDIG9ubHkpCisJCSAgMCA9IC9kZXYva2JkCQlSYXcga2V5Ym9hcmQgZGV2aWNlCisKKyAxMSBjaGFyCVNlcmlhbCBNdXggZGV2aWNlCShMaW51eC9QQS1SSVNDIG9ubHkpCisJCSAgMCA9IC9kZXYvdHR5QjAJRmlyc3QgbXV4IHBvcnQKKwkJICAxID0gL2Rldi90dHlCMQlTZWNvbmQgbXV4IHBvcnQKKwkJICAgIC4uLgorCisgMTEgYmxvY2sJU0NTSSBDRC1ST00gZGV2aWNlcworCQkgIDAgPSAvZGV2L3NjZDAJCUZpcnN0IFNDU0kgQ0QtUk9NCisJCSAgMSA9IC9kZXYvc2NkMQkJU2Vjb25kIFNDU0kgQ0QtUk9NCisJCSAgICAuLi4KKworCQlUaGUgcHJlZml4IC9kZXYvc3IgKGluc3RlYWQgb2YgL2Rldi9zY2QpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCisKKyAxMiBjaGFyCVFJQy0wMiB0YXBlCisJCSAgMiA9IC9kZXYvbnRwcWljMTEJUUlDLTExLCBubyByZXdpbmQtb24tY2xvc2UKKwkJICAzID0gL2Rldi90cHFpYzExCVFJQy0xMSwgcmV3aW5kLW9uLWNsb3NlCisJCSAgNCA9IC9kZXYvbnRwcWljMjQJUUlDLTI0LCBubyByZXdpbmQtb24tY2xvc2UKKwkJICA1ID0gL2Rldi90cHFpYzI0CVFJQy0yNCwgcmV3aW5kLW9uLWNsb3NlCisJCSAgNiA9IC9kZXYvbnRwcWljMTIwCVFJQy0xMjAsIG5vIHJld2luZC1vbi1jbG9zZQorCQkgIDcgPSAvZGV2L3RwcWljMTIwCVFJQy0xMjAsIHJld2luZC1vbi1jbG9zZQorCQkgIDggPSAvZGV2L250cHFpYzE1MAlRSUMtMTUwLCBubyByZXdpbmQtb24tY2xvc2UKKwkJICA5ID0gL2Rldi90cHFpYzE1MAlRSUMtMTUwLCByZXdpbmQtb24tY2xvc2UKKworCQlUaGUgZGV2aWNlIG5hbWVzIHNwZWNpZmllZCBhcmUgcHJvcG9zZWQgLS0gaWYgdGhlcmUKKwkJYXJlICJzdGFuZGFyZCIgbmFtZXMgZm9yIHRoZXNlIGRldmljZXMsIHBsZWFzZSBsZXQgbWUga25vdy4KKworIDEyIGJsb2NrCU1TQ0RFWCBDRC1ST00gY2FsbGJhY2sgc3VwcG9ydCB7Mi42fQorCQkgIDAgPSAvZGV2L2Rvc19jZDAJRmlyc3QgTVNDREVYIENELVJPTQorCQkgIDEgPSAvZGV2L2Rvc19jZDEJU2Vjb25kIE1TQ0RFWCBDRC1ST00KKwkJICAgIC4uLgorCisgMTMgY2hhcglJbnB1dCBjb3JlCisJCSAgMCA9IC9kZXYvaW5wdXQvanMwCUZpcnN0IGpveXN0aWNrCisJCSAgMSA9IC9kZXYvaW5wdXQvanMxCVNlY29uZCBqb3lzdGljaworCQkgICAgLi4uCisJCSAzMiA9IC9kZXYvaW5wdXQvbW91c2UwCUZpcnN0IG1vdXNlCisJCSAzMyA9IC9kZXYvaW5wdXQvbW91c2UxCVNlY29uZCBtb3VzZQorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvaW5wdXQvbWljZQlVbmlmaWVkIG1vdXNlCisJCSA2NCA9IC9kZXYvaW5wdXQvZXZlbnQwCUZpcnN0IGV2ZW50IHF1ZXVlCisJCSA2NSA9IC9kZXYvaW5wdXQvZXZlbnQxCVNlY29uZCBldmVudCBxdWV1ZQorCQkgICAgLi4uCisKKwkJRWFjaCBkZXZpY2UgdHlwZSBoYXMgNSBiaXRzICgzMiBtaW5vcnMpLgorCisgMTMgYmxvY2sJOC1iaXQgTUZNL1JMTC9JREUgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3hkYQkJRmlyc3QgWFQgZGlzayB3aG9sZSBkaXNrCisJCSA2NCA9IC9kZXYveGRiCQlTZWNvbmQgWFQgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgSURFIGRpc2tzCisJCShzZWUgbWFqb3IgbnVtYmVyIDMpLgorCisgMTQgY2hhcglPcGVuIFNvdW5kIFN5c3RlbSAoT1NTKQorCQkgIDAgPSAvZGV2L21peGVyCU1peGVyIGNvbnRyb2wKKwkJICAxID0gL2Rldi9zZXF1ZW5jZXIJQXVkaW8gc2VxdWVuY2VyCisJCSAgMiA9IC9kZXYvbWlkaTAwCUZpcnN0IE1JREkgcG9ydAorCQkgIDMgPSAvZGV2L2RzcAkJRGlnaXRhbCBhdWRpbworCQkgIDQgPSAvZGV2L2F1ZGlvCVN1bi1jb21wYXRpYmxlIGRpZ2l0YWwgYXVkaW8KKwkJICA2ID0gL2Rldi9zbmRzdGF0CVNvdW5kIGNhcmQgc3RhdHVzIGluZm9ybWF0aW9uIHsyLjZ9CisJCSAgNyA9IC9kZXYvYXVkaW9jdGwJU1BBUkMgYXVkaW8gY29udHJvbCBkZXZpY2UKKwkJICA4ID0gL2Rldi9zZXF1ZW5jZXIyCVNlcXVlbmNlciAtLSBhbHRlcm5hdGUgZGV2aWNlCisJCSAxNiA9IC9kZXYvbWl4ZXIxCVNlY29uZCBzb3VuZGNhcmQgbWl4ZXIgY29udHJvbAorCQkgMTcgPSAvZGV2L3BhdG1ncjAJU2VxdWVuY2VyIHBhdGNoIG1hbmFnZXIKKwkJIDE4ID0gL2Rldi9taWRpMDEJU2Vjb25kIE1JREkgcG9ydAorCQkgMTkgPSAvZGV2L2RzcDEJCVNlY29uZCBzb3VuZGNhcmQgZGlnaXRhbCBhdWRpbworCQkgMjAgPSAvZGV2L2F1ZGlvMQlTZWNvbmQgc291bmRjYXJkIFN1biBkaWdpdGFsIGF1ZGlvCisJCSAzMyA9IC9kZXYvcGF0bWdyMQlTZXF1ZW5jZXIgcGF0Y2ggbWFuYWdlcgorCQkgMzQgPSAvZGV2L21pZGkwMglUaGlyZCBNSURJIHBvcnQKKwkJIDUwID0gL2Rldi9taWRpMDMJRm91cnRoIE1JREkgcG9ydAorIDE0IGJsb2NrCUJJT1MgaGFyZGRyaXZlIGNhbGxiYWNrIHN1cHBvcnQgezIuNn0KKwkJICAwID0gL2Rldi9kb3NfaGRhCUZpcnN0IEJJT1MgaGFyZGRyaXZlIHdob2xlIGRpc2sKKwkJIDY0ID0gL2Rldi9kb3NfaGRiCVNlY29uZCBCSU9TIGhhcmRkcml2ZSB3aG9sZSBkaXNrCisJCTEyOCA9IC9kZXYvZG9zX2hkYwlUaGlyZCBCSU9TIGhhcmRkcml2ZSB3aG9sZSBkaXNrCisJCTE5MiA9IC9kZXYvZG9zX2hkZAlGb3VydGggQklPUyBoYXJkZHJpdmUgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIElERSBkaXNrcworCQkoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDE1IGNoYXIJSm95c3RpY2sKKwkJICAwID0gL2Rldi9qczAJCUZpcnN0IGFuYWxvZyBqb3lzdGljaworCQkgIDEgPSAvZGV2L2pzMQkJU2Vjb25kIGFuYWxvZyBqb3lzdGljaworCQkgICAgLi4uCisJCTEyOCA9IC9kZXYvZGpzMAkJRmlyc3QgZGlnaXRhbCBqb3lzdGljaworCQkxMjkgPSAvZGV2L2RqczEJCVNlY29uZCBkaWdpdGFsIGpveXN0aWNrCisJCSAgICAuLi4KKyAxNSBibG9jawlTb255IENEVS0zMUEvQ0RVLTMzQSBDRC1ST00KKwkJICAwID0gL2Rldi9zb255Y2QJU29ueSBDRFUtMzFhIENELVJPTQorCisgMTYgY2hhcglOb24tU0NTSSBzY2FubmVycworCQkgIDAgPSAvZGV2L2dzNDUwMAlHZW5pdXMgNDUwMCBoYW5kaGVsZCBzY2FubmVyCisgMTYgYmxvY2sJR29sZFN0YXIgQ0QtUk9NCisJCSAgMCA9IC9kZXYvZ3NjZAkJR29sZFN0YXIgQ0QtUk9NCisKKyAxNyBjaGFyCUNoYXNlIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5SDAJRmlyc3QgQ2hhc2UgcG9ydAorCQkgIDEgPSAvZGV2L3R0eUgxCVNlY29uZCBDaGFzZSBwb3J0CisJCSAgICAuLi4KKyAxNyBibG9jawlPcHRpY3MgU3RvcmFnZSBDRC1ST00KKwkJICAwID0gL2Rldi9vcHRjZAlPcHRpY3MgU3RvcmFnZSBDRC1ST00KKworIDE4IGNoYXIJQ2hhc2Ugc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1aDAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlIMAorCQkgIDEgPSAvZGV2L2N1aDEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlIMQorCQkgICAgLi4uCisgMTggYmxvY2sJU2FueW8gQ0QtUk9NCisJCSAgMCA9IC9kZXYvc2pjZAkJU2FueW8gQ0QtUk9NCisKKyAxOSBjaGFyCUN5Y2xhZGVzIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5QzAJRmlyc3QgQ3ljbGFkZXMgcG9ydAorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvdHR5QzMxCTMybmQgQ3ljbGFkZXMgcG9ydAorIDE5IGJsb2NrCSJEb3VibGUiIGNvbXByZXNzZWQgZGlzaworCQkgIDAgPSAvZGV2L2RvdWJsZTAJRmlyc3QgY29tcHJlc3NlZCBkaXNrCisJCSAgICAuLi4KKwkJICA3ID0gL2Rldi9kb3VibGU3CUVpZ2h0aCBjb21wcmVzc2VkIGRpc2sKKwkJMTI4ID0gL2Rldi9jZG91YmxlMAlNaXJyb3Igb2YgZmlyc3QgY29tcHJlc3NlZCBkaXNrCisJCSAgICAuLi4KKwkJMTM1ID0gL2Rldi9jZG91YmxlNwlNaXJyb3Igb2YgZWlnaHRoIGNvbXByZXNzZWQgZGlzaworCisJCVNlZSB0aGUgRG91YmxlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBtZWFuaW5nIG9mIHRoZQorCQltaXJyb3IgZGV2aWNlcy4KKworIDIwIGNoYXIJQ3ljbGFkZXMgc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1YjAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlDMAorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvY3ViMzEJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUMzMQorIDIwIGJsb2NrCUhpdGFjaGkgQ0QtUk9NICh1bmRlciBkZXZlbG9wbWVudCkKKwkJICAwID0gL2Rldi9oaXRjZAlIaXRhY2hpIENELVJPTQorCisgMjEgY2hhcglHZW5lcmljIFNDU0kgYWNjZXNzCisJCSAgMCA9IC9kZXYvc2cwCQlGaXJzdCBnZW5lcmljIFNDU0kgZGV2aWNlCisJCSAgMSA9IC9kZXYvc2cxCQlTZWNvbmQgZ2VuZXJpYyBTQ1NJIGRldmljZQorCQkgICAgLi4uCisKKwkJTW9zdCBkaXN0cmlidXRpb25zIG5hbWUgdGhlc2UgL2Rldi9zZ2EsIC9kZXYvc2diLi4uOworCQl0aGlzIHNldHMgYW4gdW5uZWNlc3NhcnkgbGltaXQgb2YgMjYgU0NTSSBkZXZpY2VzIGluCisJCXRoZSBzeXN0ZW0gYW5kIGlzIGNvdW50ZXIgdG8gc3RhbmRhcmQgTGludXgKKwkJZGV2aWNlLW5hbWluZyBwcmFjdGljZS4KKworIDIxIGJsb2NrCUFjb3JuIE1GTSBoYXJkIGRyaXZlIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L21mbWEJCUZpcnN0IE1GTSBkcml2ZSB3aG9sZSBkaXNrCisJCSA2NCA9IC9kZXYvbWZtYgkJU2Vjb25kIE1GTSBkcml2ZSB3aG9sZSBkaXNrCisKKwkJVGhpcyBkZXZpY2UgaXMgdXNlZCBvbiB0aGUgQVJNLWJhc2VkIEFjb3JuIFJpc2NQQy4KKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIElERSBkaXNrcworCQkoc2VlIG1ham9yIG51bWJlciAzKS4gCisKKyAyMiBjaGFyCURpZ2lib2FyZCBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eUQwCUZpcnN0IERpZ2lib2FyZCBwb3J0CisJCSAgMSA9IC9kZXYvdHR5RDEJU2Vjb25kIERpZ2lib2FyZCBwb3J0CisJCSAgICAuLi4KKyAyMiBibG9jawlTZWNvbmQgSURFIGhhcmQgZGlzay9DRC1ST00gaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvaGRjCQlNYXN0ZXI6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKwkJIDY0ID0gL2Rldi9oZGQJCVNsYXZlOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisJCQorCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIGZpcnN0CisJCWludGVyZmFjZSAoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDIzIGNoYXIJRGlnaWJvYXJkIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdWQwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RDAKKwkJICAxID0gL2Rldi9jdWQxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RDEKKwkJICAgICAgLi4uCisgMjMgYmxvY2sJTWl0c3VtaSBwcm9wcmlldGFyeSBDRC1ST00KKwkJICAwID0gL2Rldi9tY2QJCU1pdHN1bWkgQ0QtUk9NCisKKyAyNCBjaGFyCVN0YWxsaW9uIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5RTAJU3RhbGxpb24gcG9ydCAwIGNhcmQgMAorCQkgIDEgPSAvZGV2L3R0eUUxCVN0YWxsaW9uIHBvcnQgMSBjYXJkIDAKKwkJICAgIC4uLgorCQkgNjQgPSAvZGV2L3R0eUU2NAlTdGFsbGlvbiBwb3J0IDAgY2FyZCAxCisJCSA2NSA9IC9kZXYvdHR5RTY1CVN0YWxsaW9uIHBvcnQgMSBjYXJkIDEKKwkJICAgICAgLi4uCisJCTEyOCA9IC9kZXYvdHR5RTEyOAlTdGFsbGlvbiBwb3J0IDAgY2FyZCAyCisJCTEyOSA9IC9kZXYvdHR5RTEyOQlTdGFsbGlvbiBwb3J0IDEgY2FyZCAyCisJCSAgICAuLi4KKwkJMTkyID0gL2Rldi90dHlFMTkyCVN0YWxsaW9uIHBvcnQgMCBjYXJkIDMKKwkJMTkzID0gL2Rldi90dHlFMTkzCVN0YWxsaW9uIHBvcnQgMSBjYXJkIDMKKwkJICAgIC4uLgorIDI0IGJsb2NrCVNvbnkgQ0RVLTUzNSBDRC1ST00KKwkJICAwID0gL2Rldi9jZHU1MzUJU29ueSBDRFUtNTM1IENELVJPTQorCisgMjUgY2hhcglTdGFsbGlvbiBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VlMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUUwCisJCSAgMSA9IC9kZXYvY3VlMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUUxCisJCSAgICAuLi4KKwkJIDY0ID0gL2Rldi9jdWU2NAlDYWxsb3V0IGRldmljZSBmb3IgdHR5RTY0CisJCSA2NSA9IC9kZXYvY3VlNjUJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUU2NQorCQkgICAgLi4uCisJCTEyOCA9IC9kZXYvY3VlMTI4CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlFMTI4CisJCTEyOSA9IC9kZXYvY3VlMTI5CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlFMTI5CisJCSAgICAuLi4KKwkJMTkyID0gL2Rldi9jdWUxOTIJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUUxOTIKKwkJMTkzID0gL2Rldi9jdWUxOTMJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUUxOTMKKwkJICAgICAgLi4uCisgMjUgYmxvY2sJRmlyc3QgTWF0c3VzaGl0YSAoUGFuYXNvbmljL1NvdW5kQmxhc3RlcikgQ0QtUk9NCisJCSAgMCA9IC9kZXYvc2JwY2QwCVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAwIHVuaXQgMAorCQkgIDEgPSAvZGV2L3NicGNkMQlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMCB1bml0IDEKKwkJICAyID0gL2Rldi9zYnBjZDIJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDAgdW5pdCAyCisJCSAgMyA9IC9kZXYvc2JwY2QzCVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAwIHVuaXQgMworCisgMjYgY2hhcglRdWFudGEgV2luVmlzaW9uIGZyYW1lIGdyYWJiZXIgezIuNn0KKwkJICAwID0gL2Rldi93dmlzZmdyYWIJUXVhbnRhIFdpblZpc2lvbiBmcmFtZSBncmFiYmVyCisgMjYgYmxvY2sJU2Vjb25kIE1hdHN1c2hpdGEgKFBhbmFzb25pYy9Tb3VuZEJsYXN0ZXIpIENELVJPTQorCQkgIDAgPSAvZGV2L3NicGNkNAlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMSB1bml0IDAKKwkJICAxID0gL2Rldi9zYnBjZDUJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDEgdW5pdCAxCisJCSAgMiA9IC9kZXYvc2JwY2Q2CVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAxIHVuaXQgMgorCQkgIDMgPSAvZGV2L3NicGNkNwlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMSB1bml0IDMKKworIDI3IGNoYXIJUUlDLTExNyB0YXBlCisJCSAgMCA9IC9kZXYvcWZ0MAkJVW5pdCAwLCByZXdpbmQtb24tY2xvc2UKKwkJICAxID0gL2Rldi9xZnQxCQlVbml0IDEsIHJld2luZC1vbi1jbG9zZQorCQkgIDIgPSAvZGV2L3FmdDIJCVVuaXQgMiwgcmV3aW5kLW9uLWNsb3NlCisJCSAgMyA9IC9kZXYvcWZ0MwkJVW5pdCAzLCByZXdpbmQtb24tY2xvc2UKKwkJICA0ID0gL2Rldi9ucWZ0MAlVbml0IDAsIG5vIHJld2luZC1vbi1jbG9zZQorCQkgIDUgPSAvZGV2L25xZnQxCVVuaXQgMSwgbm8gcmV3aW5kLW9uLWNsb3NlCisJCSAgNiA9IC9kZXYvbnFmdDIJVW5pdCAyLCBubyByZXdpbmQtb24tY2xvc2UKKwkJICA3ID0gL2Rldi9ucWZ0MwlVbml0IDMsIG5vIHJld2luZC1vbi1jbG9zZQorCQkgMTYgPSAvZGV2L3pxZnQwCVVuaXQgMCwgcmV3aW5kLW9uLWNsb3NlLCBjb21wcmVzc2lvbgorCQkgMTcgPSAvZGV2L3pxZnQxCVVuaXQgMSwgcmV3aW5kLW9uLWNsb3NlLCBjb21wcmVzc2lvbgorCQkgMTggPSAvZGV2L3pxZnQyCVVuaXQgMiwgcmV3aW5kLW9uLWNsb3NlLCBjb21wcmVzc2lvbgorCQkgMTkgPSAvZGV2L3pxZnQzCVVuaXQgMywgcmV3aW5kLW9uLWNsb3NlLCBjb21wcmVzc2lvbgorCQkgMjAgPSAvZGV2L256cWZ0MAlVbml0IDAsIG5vIHJld2luZC1vbi1jbG9zZSwgY29tcHJlc3Npb24KKwkJIDIxID0gL2Rldi9uenFmdDEJVW5pdCAxLCBubyByZXdpbmQtb24tY2xvc2UsIGNvbXByZXNzaW9uCisJCSAyMiA9IC9kZXYvbnpxZnQyCVVuaXQgMiwgbm8gcmV3aW5kLW9uLWNsb3NlLCBjb21wcmVzc2lvbgorCQkgMjMgPSAvZGV2L256cWZ0MwlVbml0IDMsIG5vIHJld2luZC1vbi1jbG9zZSwgY29tcHJlc3Npb24KKwkJIDMyID0gL2Rldi9yYXdxZnQwCVVuaXQgMCwgcmV3aW5kLW9uLWNsb3NlLCBubyBmaWxlIG1hcmtzCisJCSAzMyA9IC9kZXYvcmF3cWZ0MQlVbml0IDEsIHJld2luZC1vbi1jbG9zZSwgbm8gZmlsZSBtYXJrcworCQkgMzQgPSAvZGV2L3Jhd3FmdDIJVW5pdCAyLCByZXdpbmQtb24tY2xvc2UsIG5vIGZpbGUgbWFya3MKKwkJIDM1ID0gL2Rldi9yYXdxZnQzCVVuaXQgMywgcmV3aW5kLW9uLWNsb3NlLCBubyBmaWxlIG1hcmtzCisJCSAzNiA9IC9kZXYvbnJhd3FmdDAJVW5pdCAwLCBubyByZXdpbmQtb24tY2xvc2UsIG5vIGZpbGUgbWFya3MKKwkJIDM3ID0gL2Rldi9ucmF3cWZ0MQlVbml0IDEsIG5vIHJld2luZC1vbi1jbG9zZSwgbm8gZmlsZSBtYXJrcworCQkgMzggPSAvZGV2L25yYXdxZnQyCVVuaXQgMiwgbm8gcmV3aW5kLW9uLWNsb3NlLCBubyBmaWxlIG1hcmtzCisJCSAzOSA9IC9kZXYvbnJhd3FmdDMJVW5pdCAzLCBubyByZXdpbmQtb24tY2xvc2UsIG5vIGZpbGUgbWFya3MKKyAyNyBibG9jawlUaGlyZCBNYXRzdXNoaXRhIChQYW5hc29uaWMvU291bmRCbGFzdGVyKSBDRC1ST00KKwkJICAwID0gL2Rldi9zYnBjZDgJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDIgdW5pdCAwCisJCSAgMSA9IC9kZXYvc2JwY2Q5CVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAyIHVuaXQgMQorCQkgIDIgPSAvZGV2L3NicGNkMTAJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDIgdW5pdCAyCisJCSAgMyA9IC9kZXYvc2JwY2QxMQlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMiB1bml0IDMKKworIDI4IGNoYXIJU3RhbGxpb24gc2VyaWFsIGNhcmQgLSBjYXJkIHByb2dyYW1taW5nCisJCSAgMCA9IC9kZXYvc3RhbGlvbWVtMAlGaXJzdCBTdGFsbGlvbiBjYXJkIEkvTyBtZW1vcnkKKwkJICAxID0gL2Rldi9zdGFsaW9tZW0xCVNlY29uZCBTdGFsbGlvbiBjYXJkIEkvTyBtZW1vcnkKKwkJICAyID0gL2Rldi9zdGFsaW9tZW0yCVRoaXJkIFN0YWxsaW9uIGNhcmQgSS9PIG1lbW9yeQorCQkgIDMgPSAvZGV2L3N0YWxpb21lbTMJRm91cnRoIFN0YWxsaW9uIGNhcmQgSS9PIG1lbW9yeQorIDI4IGNoYXIJQXRhcmkgU0xNIEFDU0kgbGFzZXIgcHJpbnRlciAoNjhrL0F0YXJpKQorCQkgIDAgPSAvZGV2L3NsbTAJCUZpcnN0IFNMTSBsYXNlciBwcmludGVyCisJCSAgMSA9IC9kZXYvc2xtMQkJU2Vjb25kIFNMTSBsYXNlciBwcmludGVyCisJCSAgICAuLi4KKyAyOCBibG9jawlGb3VydGggTWF0c3VzaGl0YSAoUGFuYXNvbmljL1NvdW5kQmxhc3RlcikgQ0QtUk9NCisJCSAgMCA9IC9kZXYvc2JwY2QxMglQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMyB1bml0IDAKKwkJICAxID0gL2Rldi9zYnBjZDEzCVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAzIHVuaXQgMQorCQkgIDIgPSAvZGV2L3NicGNkMTQJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDMgdW5pdCAyCisJCSAgMyA9IC9kZXYvc2JwY2QxNQlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMyB1bml0IDMKKyAyOCBibG9jawlBQ1NJIGRpc2sgKDY4ay9BdGFyaSkKKwkJICAwID0gL2Rldi9hZGEJCUZpcnN0IEFDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvYWRiCQlTZWNvbmQgQUNTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDMyID0gL2Rldi9hZGMJCVRoaXJkIEFDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9hZHAJCTE2dGggQUNTSSBkaXNrIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LCBsaWtlIFNDU0kuCisKKyAyOSBjaGFyCVVuaXZlcnNhbCBmcmFtZSBidWZmZXIKKwkJICAwID0gL2Rldi9mYjAJCUZpcnN0IGZyYW1lIGJ1ZmZlcgorCQkgIDEgPSAvZGV2L2ZiMQkJU2Vjb25kIGZyYW1lIGJ1ZmZlcgorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvZmIzMQkJMzJuZCBmcmFtZSBidWZmZXIKKworIDI5IGJsb2NrCUF6dGVjaC9PcmNoaWQvT2thbm8vV2Vhcm5lcyBDRC1ST00KKwkJICAwID0gL2Rldi9henRjZAlBenRlY2ggQ0QtUk9NCisKKyAzMCBjaGFyCWlCQ1MtMiBjb21wYXRpYmlsaXR5IGRldmljZXMKKwkJICAwID0gL2Rldi9zb2Nrc3lzCVNvY2tldCBhY2Nlc3MKKwkJICAxID0gL2Rldi9zcHgJCVNWUjMgbG9jYWwgWCBpbnRlcmZhY2UKKwkJIDMyID0gL2Rldi9pbmV0L2lwCU5ldHdvcmsgYWNjZXNzCisJCSAzMyA9IC9kZXYvaW5ldC9pY21wCisJCSAzNCA9IC9kZXYvaW5ldC9nZ3AKKwkJIDM1ID0gL2Rldi9pbmV0L2lwaXAKKwkJIDM2ID0gL2Rldi9pbmV0L3RjcAorCQkgMzcgPSAvZGV2L2luZXQvZWdwCisJCSAzOCA9IC9kZXYvaW5ldC9wdXAKKwkJIDM5ID0gL2Rldi9pbmV0L3VkcAorCQkgNDAgPSAvZGV2L2luZXQvaWRwCisJCSA0MSA9IC9kZXYvaW5ldC9yYXdpcAorCisJCUFkZGl0aW9uYWxseSwgaUJDUy0yIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgbGlua3M6CisKKwkJL2Rldi9pcCAtPiAvZGV2L2luZXQvaXAKKwkJL2Rldi9pY21wIC0+IC9kZXYvaW5ldC9pY21wCisJCS9kZXYvZ2dwIC0+IC9kZXYvaW5ldC9nZ3AKKwkJL2Rldi9pcGlwIC0+IC9kZXYvaW5ldC9pcGlwCisJCS9kZXYvdGNwIC0+IC9kZXYvaW5ldC90Y3AKKwkJL2Rldi9lZ3AgLT4gL2Rldi9pbmV0L2VncAorCQkvZGV2L3B1cCAtPiAvZGV2L2luZXQvcHVwCisJCS9kZXYvdWRwIC0+IC9kZXYvaW5ldC91ZHAKKwkJL2Rldi9pZHAgLT4gL2Rldi9pbmV0L2lkcAorCQkvZGV2L3Jhd2lwIC0+IC9kZXYvaW5ldC9yYXdpcAorCQkvZGV2L2luZXQvYXJwIC0+IC9kZXYvaW5ldC91ZHAKKwkJL2Rldi9pbmV0L3JpcCAtPiAvZGV2L2luZXQvdWRwCisJCS9kZXYvbmZzZCAtPiAvZGV2L3NvY2tzeXMKKwkJL2Rldi9YMFIgLT4gL2Rldi9udWxsICg/IGFwcGFyZW50bHkgbm90IHJlcXVpcmVkID8pCisKKyAzMCBibG9jawlQaGlsaXBzIExNUyBDTS0yMDUgQ0QtUk9NCisJCSAgMCA9IC9kZXYvY20yMDVjZAlQaGlsaXBzIExNUyBDTS0yMDUgQ0QtUk9NCisKKwkJL2Rldi9sbXNjZCBpcyBhbiBvbGRlciBuYW1lIGZvciB0aGlzIGRldmljZS4gIFRoaXMKKwkJZHJpdmVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGUgQ00tMjA1TVMgQ0QtUk9NLgorCisgMzEgY2hhcglNUFUtNDAxIE1JREkKKwkJICAwID0gL2Rldi9tcHU0MDFkYXRhCU1QVS00MDEgZGF0YSBwb3J0CisJCSAgMSA9IC9kZXYvbXB1NDAxc3RhdAlNUFUtNDAxIHN0YXR1cyBwb3J0CisgMzEgYmxvY2sJUk9NL2ZsYXNoIG1lbW9yeSBjYXJkCisJCSAgMCA9IC9kZXYvcm9tMAkJRmlyc3QgUk9NIGNhcmQgKHJ3KQorCQkgICAgICAuLi4KKwkJICA3ID0gL2Rldi9yb203CQlFaWdodGggUk9NIGNhcmQgKHJ3KQorCQkgIDggPSAvZGV2L3Jyb20wCUZpcnN0IFJPTSBjYXJkIChybykKKwkJICAgIC4uLgorCQkgMTUgPSAvZGV2L3Jyb203CUVpZ2h0aCBST00gY2FyZCAocm8pCisJCSAxNiA9IC9kZXYvZmxhc2gwCUZpcnN0IGZsYXNoIG1lbW9yeSBjYXJkIChydykKKwkJICAgIC4uLgorCQkgMjMgPSAvZGV2L2ZsYXNoNwlFaWdodGggZmxhc2ggbWVtb3J5IGNhcmQgKHJ3KQorCQkgMjQgPSAvZGV2L3JmbGFzaDAJRmlyc3QgZmxhc2ggbWVtb3J5IGNhcmQgKHJvKQorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvcmZsYXNoNwlFaWdodGggZmxhc2ggbWVtb3J5IGNhcmQgKHJvKQorCisJCVRoZSByZWFkLXdyaXRlIChydykgZGV2aWNlcyBzdXBwb3J0IGJhY2stY2FjaGluZworCQl3cml0dGVuIGRhdGEgaW4gUkFNLCBhcyB3ZWxsIGFzIHdyaXRpbmcgdG8gZmxhc2ggUkFNCisJCWRldmljZXMuICBUaGUgcmVhZC1vbmx5IGRldmljZXMgKHJvKSBzdXBwb3J0IHJlYWRpbmcKKwkJb25seS4KKworIDMyIGNoYXIJU3BlY2lhbGl4IHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5WDAJRmlyc3QgU3BlY2lhbGl4IHBvcnQKKwkJICAxID0gL2Rldi90dHlYMQlTZWNvbmQgU3BlY2lhbGl4IHBvcnQKKwkJICAgIC4uLgorIDMyIGJsb2NrCVBoaWxpcHMgTE1TIENNLTIwNiBDRC1ST00KKwkJICAwID0gL2Rldi9jbTIwNmNkCVBoaWxpcHMgTE1TIENNLTIwNiBDRC1ST00KKworIDMzIGNoYXIJU3BlY2lhbGl4IHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdXgwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5WDAKKwkJICAxID0gL2Rldi9jdXgxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5WDEKKwkJICAgIC4uLgorIDMzIGJsb2NrCVRoaXJkIElERSBoYXJkIGRpc2svQ0QtUk9NIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L2hkZQkJTWFzdGVyOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisJCSA2NCA9IC9kZXYvaGRmCQlTbGF2ZTogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciB0aGUgZmlyc3QKKwkJaW50ZXJmYWNlIChzZWUgbWFqb3IgbnVtYmVyIDMpLgorCisgMzQgY2hhcglaODUzMCBIRExDIGRyaXZlcgorCQkgIDAgPSAvZGV2L3NjYzAJCUZpcnN0IFo4NTMwLCBmaXJzdCBwb3J0CisJCSAgMSA9IC9kZXYvc2NjMQkJRmlyc3QgWjg1MzAsIHNlY29uZCBwb3J0CisJCSAgMiA9IC9kZXYvc2NjMgkJU2Vjb25kIFo4NTMwLCBmaXJzdCBwb3J0CisJCSAgMyA9IC9kZXYvc2NjMwkJU2Vjb25kIFo4NTMwLCBzZWNvbmQgcG9ydAorCQkgICAgLi4uCisKKwkJSW4gYSBwcmV2aW91cyB2ZXJzaW9uIHRoZXNlIGRldmljZXMgd2VyZSBuYW1lZAorCQkvZGV2L3NjMSBmb3IgL2Rldi9zY2MwLCAvZGV2L3NjMiBmb3IgL2Rldi9zY2MxLCBhbmQgc28KKwkJb24uCisKKyAzNCBibG9jawlGb3VydGggSURFIGhhcmQgZGlzay9DRC1ST00gaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvaGRnCQlNYXN0ZXI6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKwkJIDY0ID0gL2Rldi9oZGgJCVNsYXZlOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisJCQorCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIGZpcnN0CisJCWludGVyZmFjZSAoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDM1IGNoYXIJdGNsbWlkaSBNSURJIGRyaXZlcgorCQkgIDAgPSAvZGV2L21pZGkwCUZpcnN0IE1JREkgcG9ydCwga2VybmVsIHRpbWVkCisJCSAgMSA9IC9kZXYvbWlkaTEJU2Vjb25kIE1JREkgcG9ydCwga2VybmVsIHRpbWVkCisJCSAgMiA9IC9kZXYvbWlkaTIJVGhpcmQgTUlESSBwb3J0LCBrZXJuZWwgdGltZWQKKwkJICAzID0gL2Rldi9taWRpMwlGb3VydGggTUlESSBwb3J0LCBrZXJuZWwgdGltZWQKKwkJIDY0ID0gL2Rldi9ybWlkaTAJRmlyc3QgTUlESSBwb3J0LCB1bnRpbWVkCisJCSA2NSA9IC9kZXYvcm1pZGkxCVNlY29uZCBNSURJIHBvcnQsIHVudGltZWQKKwkJIDY2ID0gL2Rldi9ybWlkaTIJVGhpcmQgTUlESSBwb3J0LCB1bnRpbWVkCisJCSA2NyA9IC9kZXYvcm1pZGkzCUZvdXJ0aCBNSURJIHBvcnQsIHVudGltZWQKKwkJMTI4ID0gL2Rldi9zbXB0ZTAJRmlyc3QgTUlESSBwb3J0LCBTTVBURSB0aW1lZAorCQkxMjkgPSAvZGV2L3NtcHRlMQlTZWNvbmQgTUlESSBwb3J0LCBTTVBURSB0aW1lZAorCQkxMzAgPSAvZGV2L3NtcHRlMglUaGlyZCBNSURJIHBvcnQsIFNNUFRFIHRpbWVkCisJCTEzMSA9IC9kZXYvc21wdGUzCUZvdXJ0aCBNSURJIHBvcnQsIFNNUFRFIHRpbWVkCisgMzUgYmxvY2sJU2xvdyBtZW1vcnkgcmFtZGlzaworCQkgIDAgPSAvZGV2L3NscmFtCVNsb3cgbWVtb3J5IHJhbWRpc2sKKworIDM2IGNoYXIJTmV0bGluayBzdXBwb3J0CisJCSAgMCA9IC9kZXYvcm91dGUJUm91dGluZywgZGV2aWNlIHVwZGF0ZXMsIGtlcm5lbCB0byB1c2VyCisJCSAgMSA9IC9kZXYvc2tpcAkJZW5TS0lQIHNlY3VyaXR5IGNhY2hlIGNvbnRyb2wKKwkJICAzID0gL2Rldi9md21vbml0b3IJRmlyZXdhbGwgcGFja2V0IGNvcGllcworCQkgMTYgPSAvZGV2L3RhcDAJCUZpcnN0IEV0aGVydGFwIGRldmljZQorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvdGFwMTUJMTZ0aCBFdGhlcnRhcCBkZXZpY2UKKyAzNiBibG9jawlNQ0EgRVNESSBoYXJkIGRpc2sKKwkJICAwID0gL2Rldi9lZGEJCUZpcnN0IEVTREkgZGlzayB3aG9sZSBkaXNrCisJCSA2NCA9IC9kZXYvZWRiCQlTZWNvbmQgRVNESSBkaXNrIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIElERSBkaXNrcworCQkoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDM3IGNoYXIJSURFIHRhcGUKKwkJICAwID0gL2Rldi9odDAJCUZpcnN0IElERSB0YXBlCisJCSAgMSA9IC9kZXYvaHQxCQlTZWNvbmQgSURFIHRhcGUKKwkJICAgIC4uLgorCQkxMjggPSAvZGV2L25odDAJCUZpcnN0IElERSB0YXBlLCBubyByZXdpbmQtb24tY2xvc2UKKwkJMTI5ID0gL2Rldi9uaHQxCQlTZWNvbmQgSURFIHRhcGUsIG5vIHJld2luZC1vbi1jbG9zZQorCQkgICAgLi4uCisKKwkJQ3VycmVudGx5LCBvbmx5IG9uZSBJREUgdGFwZSBkcml2ZSBpcyBzdXBwb3J0ZWQuCisKKyAzNyBibG9jawlab3JybyBJSSByYW1kaXNrCisJCSAgMCA9IC9kZXYvejJyYW0JWm9ycm8gSUkgcmFtZGlzaworCisgMzggY2hhcglNeXJpY29tIFBDSSBNeXJpbmV0IGJvYXJkCisJCSAgMCA9IC9kZXYvbWxhbmFpMAlGaXJzdCBNeXJpbmV0IGJvYXJkCisJCSAgMSA9IC9kZXYvbWxhbmFpMQlTZWNvbmQgTXlyaW5ldCBib2FyZAorCQkgICAgLi4uCisKKwkJVGhpcyBkZXZpY2UgaXMgdXNlZCBmb3Igc3RhdHVzIHF1ZXJ5LCBib2FyZCBjb250cm9sCisJCWFuZCAidXNlciBsZXZlbCBwYWNrZXQgSS9PLiIgIFRoaXMgYm9hcmQgaXMgYWxzbworCQlhY2Nlc3NpYmxlIGFzIGEgc3RhbmRhcmQgbmV0d29ya2luZyAiZXRoIiBkZXZpY2UuCisKKyAzOCBibG9jawlSZXNlcnZlZCBmb3IgTGludXgvQVArCisKKyAzOSBjaGFyCU1MLTE2UCBleHBlcmltZW50YWwgSS9PIGJvYXJkCisJCSAgMCA9IC9kZXYvbWwxNnBhLWEwCUZpcnN0IGNhcmQsIGZpcnN0IGFuYWxvZyBjaGFubmVsCisJCSAgMSA9IC9kZXYvbWwxNnBhLWExCUZpcnN0IGNhcmQsIHNlY29uZCBhbmFsb2cgY2hhbm5lbAorCQkgICAgLi4uCisJCSAxNSA9IC9kZXYvbWwxNnBhLWExNQlGaXJzdCBjYXJkLCAxNnRoIGFuYWxvZyBjaGFubmVsCisJCSAxNiA9IC9kZXYvbWwxNnBhLWQJRmlyc3QgY2FyZCwgZGlnaXRhbCBsaW5lcworCQkgMTcgPSAvZGV2L21sMTZwYS1jMAlGaXJzdCBjYXJkLCBmaXJzdCBjb3VudGVyL3RpbWVyCisJCSAxOCA9IC9kZXYvbWwxNnBhLWMxCUZpcnN0IGNhcmQsIHNlY29uZCBjb3VudGVyL3RpbWVyCisJCSAxOSA9IC9kZXYvbWwxNnBhLWMyCUZpcnN0IGNhcmQsIHRoaXJkIGNvdW50ZXIvdGltZXIKKwkJIDMyID0gL2Rldi9tbDE2cGItYTAJU2Vjb25kIGNhcmQsIGZpcnN0IGFuYWxvZyBjaGFubmVsCisJCSAzMyA9IC9kZXYvbWwxNnBiLWExCVNlY29uZCBjYXJkLCBzZWNvbmQgYW5hbG9nIGNoYW5uZWwKKwkJICAgIC4uLgorCQkgNDcgPSAvZGV2L21sMTZwYi1hMTUJU2Vjb25kIGNhcmQsIDE2dGggYW5hbG9nIGNoYW5uZWwKKwkJIDQ4ID0gL2Rldi9tbDE2cGItZAlTZWNvbmQgY2FyZCwgZGlnaXRhbCBsaW5lcworCQkgNDkgPSAvZGV2L21sMTZwYi1jMAlTZWNvbmQgY2FyZCwgZmlyc3QgY291bnRlci90aW1lcgorCQkgNTAgPSAvZGV2L21sMTZwYi1jMQlTZWNvbmQgY2FyZCwgc2Vjb25kIGNvdW50ZXIvdGltZXIKKwkJIDUxID0gL2Rldi9tbDE2cGItYzIJU2Vjb25kIGNhcmQsIHRoaXJkIGNvdW50ZXIvdGltZXIKKwkJICAgICAgLi4uCisgMzkgYmxvY2sJUmVzZXJ2ZWQgZm9yIExpbnV4L0FQKworCisgNDAgY2hhcglNYXRyb3ggTWV0ZW9yIGZyYW1lIGdyYWJiZXIgezIuNn0KKwkJICAwID0gL2Rldi9tbWV0ZmdyYWIJTWF0cm94IE1ldGVvciBmcmFtZSBncmFiYmVyCisgNDAgYmxvY2sJU3lxdWVzdCBFWjEzNSBwYXJhbGxlbCBwb3J0IHJlbW92YWJsZSBkcml2ZQorCQkgIDAgPSAvZGV2L2V6YQkJUGFyYWxsZWwgRVoxMzUgZHJpdmUsIHdob2xlIGRpc2sKKworCQlUaGlzIGRldmljZSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEKKwkJZnV0dXJlIHZlcnNpb24gb2YgTGludXguICBJdCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoCisJCXRoZSBwYXJhbGxlbCBwb3J0IElERSBkaXNrIGRyaXZlciBhdCBtYWpvciBudW1iZXIgNDUuCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIElERSBkaXNrcworCQkoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDQxIGNoYXIJWWV0IEFub3RoZXIgTWljcm8gTW9uaXRvcgorCQkgIDAgPSAvZGV2L3lhbW0JCVlldCBBbm90aGVyIE1pY3JvIE1vbml0b3IKKyA0MSBibG9jawlNaWNyb1NvbHV0aW9ucyBCYWNrUGFjayBwYXJhbGxlbCBwb3J0IENELVJPTQorCQkgIDAgPSAvZGV2L2JwY2QJCUJhY2tQYWNrIENELVJPTQorCisJCVRoaXMgZGV2aWNlIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYQorCQlmdXR1cmUgdmVyc2lvbiBvZiBMaW51eC4gIEl0IGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKKwkJdGhlIHBhcmFsbGVsIHBvcnQgQVRBUEkgQ0QtUk9NIGRyaXZlciBhdCBtYWpvciBudW1iZXIgNDYuCisKKyA0MiBjaGFyCURlbW8vc2FtcGxlIHVzZQorIDQyIGJsb2NrCURlbW8vc2FtcGxlIHVzZQorCisJCVRoaXMgbnVtYmVyIGlzIGludGVuZGVkIGZvciB1c2UgaW4gc2FtcGxlIGNvZGUsIGFzCisJCXdlbGwgYXMgYSBnZW5lcmFsICJleGFtcGxlIiBkZXZpY2UgbnVtYmVyLiAgSXQKKwkJc2hvdWxkIG5ldmVyIGJlIHVzZWQgZm9yIGEgZGV2aWNlIGRyaXZlciB0aGF0IGlzIGJlaW5nCisJCWRpc3RyaWJ1dGVkOyBlaXRoZXIgb2J0YWluIGFuIG9mZmljaWFsIG51bWJlciBvciB1c2UKKwkJdGhlIGxvY2FsL2V4cGVyaW1lbnRhbCByYW5nZS4gIFRoZSBzdWRkZW4gYWRkaXRpb24gb3IKKwkJcmVtb3ZhbCBvZiBhIGRyaXZlciB3aXRoIHRoaXMgbnVtYmVyIHNob3VsZCBub3QgY2F1c2UKKwkJaWxsIGVmZmVjdHMgdG8gdGhlIHN5c3RlbSAoYnVncyBleGNlcHRlZC4pCisKKwkJSU4gUEFSVElDVUxBUiwgQU5ZIERJU1RSSUJVVElPTiBXSElDSCBDT05UQUlOUyBBCisJCURFVklDRSBEUklWRVIgVVNJTkcgTUFKT1IgTlVNQkVSIDQyIElTIE5PTkNPTVBMSUFOVC4KKworIDQzIGNoYXIJaXNkbjRsaW51eCB2aXJ0dWFsIG1vZGVtCisJCSAgMCA9IC9kZXYvdHR5STAJRmlyc3QgdmlydHVhbCBtb2RlbQorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvdHR5STYzCTY0dGggdmlydHVhbCBtb2RlbQorIDQzIGJsb2NrCU5ldHdvcmsgYmxvY2sgZGV2aWNlcworCQkgIDAgPSAvZGV2L25iMAkJRmlyc3QgbmV0d29yayBibG9jayBkZXZpY2UKKwkJICAxID0gL2Rldi9uYjEJCVNlY29uZCBuZXR3b3JrIGJsb2NrIGRldmljZQorCQkgICAgLi4uCisKKwkJTmV0d29yayBCbG9jayBEZXZpY2UgaXMgc29tZWhvdyBzaW1pbGFyIHRvIGxvb3BiYWNrCisJCWRldmljZXM6IElmIHlvdSByZWFkIGZyb20gaXQsIGl0IHNlbmRzIHBhY2tldCBhY3Jvc3MKKwkJbmV0d29yayBhc2tpbmcgc2VydmVyIGZvciBkYXRhLiBJZiB5b3Ugd3JpdGUgdG8gaXQsIGl0CisJCXNlbmRzIHBhY2tldCB0ZWxsaW5nIHNlcnZlciB0byB3cml0ZS4gSXQgY291bGQgYmUgdXNlZAorCQl0byBtb3VudGluZyBmaWxlc3lzdGVtcyBvdmVyIHRoZSBuZXQsIHN3YXBwaW5nIG92ZXIKKwkJdGhlIG5ldCwgaW1wbGVtZW50aW5nIGJsb2NrIGRldmljZSBpbiB1c2VybGFuZCBldGMuCisKKyA0NCBjaGFyCWlzZG40bGludXggdmlydHVhbCBtb2RlbSAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VpMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUkwCisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi9jdWk2MwlDYWxsb3V0IGRldmljZSBmb3IgdHR5STYzCisgNDQgYmxvY2sJRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIgKEZUTCkgZmlsZXN5c3RlbXMKKwkJICAwID0gL2Rldi9mdGxhCQlGVEwgb24gZmlyc3QgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlCisJCSAxNiA9IC9kZXYvZnRsYgkJRlRMIG9uIHNlY29uZCBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2UKKwkJIDMyID0gL2Rldi9mdGxjCQlGVEwgb24gdGhpcmQgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9mdGxwCQlGVEwgb24gMTZ0aCBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2UgCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleHBlY3QgdGhhdCB0aGUgcGFydGl0aW9uCisJCWxpbWl0IGlzIDE1IHJhdGhlciB0aGFuIDYzIHBlciBkaXNrIChzYW1lIGFzIFNDU0kuKQorCisgNDUgY2hhcglpc2RuNGxpbnV4IElTRE4gQlJJIGRyaXZlcgorCQkgIDAgPSAvZGV2L2lzZG4wCUZpcnN0IHZpcnR1YWwgQiBjaGFubmVsIHJhdyBkYXRhCisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi9pc2RuNjMJNjR0aCB2aXJ0dWFsIEIgY2hhbm5lbCByYXcgZGF0YQorCQkgNjQgPSAvZGV2L2lzZG5jdHJsMAlGaXJzdCBjaGFubmVsIGNvbnRyb2wvZGVidWcKKwkJICAgIC4uLgorCQkxMjcgPSAvZGV2L2lzZG5jdHJsNjMJNjR0aCBjaGFubmVsIGNvbnRyb2wvZGVidWcKKworCQkxMjggPSAvZGV2L2lwcHAwCUZpcnN0IFN5bmNQUFAgZGV2aWNlCisJCSAgICAuLi4KKwkJMTkxID0gL2Rldi9pcHBwNjMJNjR0aCBTeW5jUFBQIGRldmljZQorCisJCTI1NSA9IC9kZXYvaXNkbmluZm8JSVNETiBtb25pdG9yIGludGVyZmFjZQorIDQ1IGJsb2NrCVBhcmFsbGVsIHBvcnQgSURFIGRpc2sgZGV2aWNlcworCQkgIDAgPSAvZGV2L3BkYQkJRmlyc3QgcGFyYWxsZWwgcG9ydCBJREUgZGlzaworCQkgMTYgPSAvZGV2L3BkYgkJU2Vjb25kIHBhcmFsbGVsIHBvcnQgSURFIGRpc2sKKwkJIDMyID0gL2Rldi9wZGMJCVRoaXJkIHBhcmFsbGVsIHBvcnQgSURFIGRpc2sKKwkJIDQ4ID0gL2Rldi9wZGQJCUZvdXJ0aCBwYXJhbGxlbCBwb3J0IElERSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgcGFydGl0aW9uCisJCWxpbWl0IGlzIDE1IHJhdGhlciB0aGFuIDYzIHBlciBkaXNrLgorCisgNDYgY2hhcglDb210cm9sIFJvY2tldHBvcnQgc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlSMAlGaXJzdCBSb2NrZXRwb3J0IHBvcnQKKwkJICAxID0gL2Rldi90dHlSMQlTZWNvbmQgUm9ja2V0cG9ydCBwb3J0CisJCSAgICAuLi4KKyA0NiBibG9jawlQYXJhbGxlbCBwb3J0IEFUQVBJIENELVJPTSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvcGNkMAkJRmlyc3QgcGFyYWxsZWwgcG9ydCBBVEFQSSBDRC1ST00KKwkJICAxID0gL2Rldi9wY2QxCQlTZWNvbmQgcGFyYWxsZWwgcG9ydCBBVEFQSSBDRC1ST00KKwkJICAyID0gL2Rldi9wY2QyCQlUaGlyZCBwYXJhbGxlbCBwb3J0IEFUQVBJIENELVJPTQorCQkgIDMgPSAvZGV2L3BjZDMJCUZvdXJ0aCBwYXJhbGxlbCBwb3J0IEFUQVBJIENELVJPTQorCisgNDcgY2hhcglDb210cm9sIFJvY2tldHBvcnQgc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1cjAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlSMAorCQkgIDEgPSAvZGV2L2N1cjEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlSMQorCQkgICAgLi4uCisgNDcgYmxvY2sJUGFyYWxsZWwgcG9ydCBBVEFQSSBkaXNrIGRldmljZXMKKwkJICAwID0gL2Rldi9wZjAJCUZpcnN0IHBhcmFsbGVsIHBvcnQgQVRBUEkgZGlzaworCQkgIDEgPSAvZGV2L3BmMQkJU2Vjb25kIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGlzaworCQkgIDIgPSAvZGV2L3BmMgkJVGhpcmQgcGFyYWxsZWwgcG9ydCBBVEFQSSBkaXNrCisJCSAgMyA9IC9kZXYvcGYzCQlGb3VydGggcGFyYWxsZWwgcG9ydCBBVEFQSSBkaXNrCisKKwkJVGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgZm9yIGZsb3BweSBkaXNrcyBhbmQgc2ltaWxhcgorCQlkZXZpY2VzIGFuZCBoZW5jZSBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpdGlvbmluZy4KKworIDQ4IGNoYXIJU0RMIFJJU0NvbSBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eUwwCUZpcnN0IFJJU0NvbSBwb3J0CisJCSAgMSA9IC9kZXYvdHR5TDEJU2Vjb25kIFJJU0NvbSBwb3J0CisJCSAgICAuLi4KKyA0OCBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgZmlyc3QgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2MwZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2MwZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2MwZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCUZvciBwYXJ0aXRpb25zIGFkZDoKKwkJICAwID0gL2Rldi9yZC9jP2Q/CVdob2xlIGRpc2sKKwkJICAxID0gL2Rldi9yZC9jP2Q/cDEJRmlyc3QgcGFydGl0aW9uCisJCSAgICAuLi4KKwkJICA3ID0gL2Rldi9yZC9jP2Q/cDcJU2V2ZW50aCBwYXJ0aXRpb24KKworIDQ5IGNoYXIJU0RMIFJJU0NvbSBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VsMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUwwCisJCSAgMSA9IC9kZXYvY3VsMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUwxCisJCSAgICAuLi4KKyA0OSBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgc2Vjb25kIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jMWQwCUZpcnN0IGRpc2ssIHdob2xlIGRpc2sKKwkJICA4ID0gL2Rldi9yZC9jMWQxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jMWQzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGFzIGZvciBtYWpvciA0OC4KKworIDUwIGNoYXIJUmVzZXJ2ZWQgZm9yIEdMSU5UCisKKyA1MCBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgdGhpcmQgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2MyZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2MyZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2MyZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisgNTEgY2hhcglCYXljb20gcmFkaW8gbW9kZW0gT1IgUmFkaW8gVGVjaCBCSU0tWFhYLVJTMjMyIHJhZGlvIG1vZGVtCisJCSAgMCA9IC9kZXYvYmMwCQlGaXJzdCBCYXljb20gcmFkaW8gbW9kZW0KKwkJICAxID0gL2Rldi9iYzEJCVNlY29uZCBCYXljb20gcmFkaW8gbW9kZW0KKwkJICAgIC4uLgorIDUxIGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBmb3VydGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2MzZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2MzZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2MzZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisgNTIgY2hhcglTcGVsbGNhc3RlciBEYXRhQ29tbS9CUkkgSVNETiBjYXJkCisJCSAgMCA9IC9kZXYvZGNicmkwCUZpcnN0IERhdGFDb21tIGNhcmQKKwkJICAxID0gL2Rldi9kY2JyaTEJU2Vjb25kIERhdGFDb21tIGNhcmQKKwkJICAyID0gL2Rldi9kY2JyaTIJVGhpcmQgRGF0YUNvbW0gY2FyZAorCQkgIDMgPSAvZGV2L2RjYnJpMwlGb3VydGggRGF0YUNvbW0gY2FyZAorIDUyIGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBmaWZ0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzRkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzRkMQlTZWNvbmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvcmQvYzRkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKyA1MyBjaGFyCUJETSBpbnRlcmZhY2UgZm9yIHJlbW90ZSBkZWJ1Z2dpbmcgTUM2ODN4eCBtaWNyb2NvbnRyb2xsZXJzCisJCSAgMCA9IC9kZXYvcGRfYmRtMAlQRCBCRE0gaW50ZXJmYWNlIG9uIGxwMAorCQkgIDEgPSAvZGV2L3BkX2JkbTEJUEQgQkRNIGludGVyZmFjZSBvbiBscDEKKwkJICAyID0gL2Rldi9wZF9iZG0yCVBEIEJETSBpbnRlcmZhY2Ugb24gbHAyCisJCSAgNCA9IC9kZXYvaWNkX2JkbTAJSUNEIEJETSBpbnRlcmZhY2Ugb24gbHAwCisJCSAgNSA9IC9kZXYvaWNkX2JkbTEJSUNEIEJETSBpbnRlcmZhY2Ugb24gbHAxCisJCSAgNiA9IC9kZXYvaWNkX2JkbTIJSUNEIEJETSBpbnRlcmZhY2Ugb24gbHAyCisKKwkJVGhpcyBkZXZpY2UgaXMgdXNlZCBmb3IgdGhlIGludGVyZmFjaW5nIHRvIHRoZSBNQzY4M3h4CisJCW1pY3JvY29udHJvbGxlcnMgdmlhIEJhY2tncm91bmQgRGVidWcgTW9kZSBieSB1c2Ugb2YgYQorCQlQYXJhbGxlbCBQb3J0IGludGVyZmFjZS4gUEQgaXMgdGhlIE1vdG9yb2xhIFB1YmxpYworCQlEb21haW4gSW50ZXJmYWNlIGFuZCBJQ0QgaXMgdGhlIGNvbW1lcmNpYWwgaW50ZXJmYWNlCisJCWJ5IFAmRS4KKworIDUzIGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBzaXh0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzVkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzVkMQlTZWNvbmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvcmQvYzVkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKyA1NCBjaGFyCUVsZWN0cm9jYXJkaW9nbm9zaXMgSG9sdGVyIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvaG9sdGVyMAlGaXJzdCBIb2x0ZXIgcG9ydAorCQkgIDEgPSAvZGV2L2hvbHRlcjEJU2Vjb25kIEhvbHRlciBwb3J0CisJCSAgMiA9IC9kZXYvaG9sdGVyMglUaGlyZCBIb2x0ZXIgcG9ydAorCisJCUEgY3VzdG9tIHNlcmlhbCBjYXJkIHVzZWQgYnkgRWxlY3Ryb2NhcmRpb2dub3NpcyBTUkwKKwkJPG1zZXJpdGFuQG90dG9uZWwucHViLnJvPiB0byB0cmFuc2ZlciBkYXRhIGZyb20gSG9sdGVyCisJCTI0LWhvdXIgaGVhcnQgbW9uaXRvcmluZyBlcXVpcG1lbnQuCisKKyA1NCBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgc2V2ZW50aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzZkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzZkMQlTZWNvbmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvcmQvYzZkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKyA1NSBjaGFyCURTUDU2MDAxIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NvcgorCQkgIDAgPSAvZGV2L2RzcDU2awlGaXJzdCBEU1A1NjAwMQorIDU1IGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBlaWd0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzdkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzdkMQlTZWNvbmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvcmQvYzdkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKyA1NiBjaGFyCUFwcGxlIERlc2t0b3AgQnVzCisJCSAgMCA9IC9kZXYvYWRiCQlBREIgYnVzIGNvbnRyb2wKKworCQlBZGRpdGlvbmFsIGRldmljZXMgd2lsbCBiZSBhZGRlZCB0byB0aGlzIG51bWJlciwgYWxsCisJCXN0YXJ0aW5nIHdpdGggL2Rldi9hZGIuCisKKyA1NiBibG9jawlGaWZ0aCBJREUgaGFyZCBkaXNrL0NELVJPTSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9oZGkJCU1hc3Rlcjogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkgNjQgPSAvZGV2L2hkagkJU2xhdmU6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIGZpcnN0CisJCWludGVyZmFjZSAoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDU3IGNoYXIJSGF5ZXMgRVNQIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5UDAJRmlyc3QgRVNQIHBvcnQKKwkJICAxID0gL2Rldi90dHlQMQlTZWNvbmQgRVNQIHBvcnQKKwkJICAgIC4uLgorCisgNTcgYmxvY2sJU2l4dGggSURFIGhhcmQgZGlzay9DRC1ST00gaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvaGRrCQlNYXN0ZXI6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKwkJIDY0ID0gL2Rldi9oZGwJCVNsYXZlOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIHRoZSBmaXJzdAorCQlpbnRlcmZhY2UgKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyA1OCBjaGFyCUhheWVzIEVTUCBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VwMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVAwCisJCSAgMSA9IC9kZXYvY3VwMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVAxCisJCSAgICAuLi4KKyA1OCBibG9jawlSZXNlcnZlZCBmb3IgbG9naWNhbCB2b2x1bWUgbWFuYWdlcgorCisgNTkgY2hhcglzZiBmaXJld2FsbCBwYWNrYWdlCisJCSAgMCA9IC9kZXYvZmlyZXdhbGwJQ29tbXVuaWNhdGlvbiB3aXRoIHNmIGtlcm5lbCBtb2R1bGUKKworIDU5IGJsb2NrCUdlbmVyaWMgUERBIGZpbGVzeXN0ZW0gZGV2aWNlCisJCSAgMCA9IC9kZXYvcGRhMAkJRmlyc3QgUERBIGRldmljZQorCQkgIDEgPSAvZGV2L3BkYTEJCVNlY29uZCBQREEgZGV2aWNlCisJCSAgICAuLi4KKworCQlUaGUgcGRhIGRldmljZXMgYXJlIHVzZWQgdG8gbW91bnQgZmlsZXN5c3RlbXMgb24KKwkJcmVtb3RlIHBkYSdzIChiYXNpY2FsbHkgc2xvdyBoYW5kaGVsZCBtYWNoaW5lcyB3aXRoCisJCXByb3ByaWV0YXJ5IE9TJ3MgYW5kIGxpbWl0ZWQgbWVtb3J5IGFuZCBzdG9yYWdlCisJCXJ1bm5pbmcgc21hbGwgZnMgdHJhbnNsYXRpb24gZHJpdmVycykgdGhyb3VnaCBzZXJpYWwgLworCQlJUkRBIC8gcGFyYWxsZWwgbGlua3MuCisKKwkJTkFNSU5HIENPTkZMSUNUIC0tIFBST1BPU0VEIFJFVklTRUQgTkFNRSAvZGV2L3JwZGEwIGV0YworCisgNjAtNjMgY2hhcglMT0NBTC9FWFBFUklNRU5UQUwgVVNFCisgNjAtNjMgYmxvY2sJTE9DQUwvRVhQRVJJTUVOVEFMIFVTRQorCQlBbGxvY2F0ZWQgZm9yIGxvY2FsL2V4cGVyaW1lbnRhbCB1c2UuICBGb3IgZGV2aWNlcyBub3QKKwkJYXNzaWduZWQgb2ZmaWNpYWwgbnVtYmVycywgdGhlc2UgcmFuZ2VzIHNob3VsZCBiZQorCQl1c2VkIGluIG9yZGVyIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggZnV0dXJlIGFzc2lnbm1lbnRzLgorCisgNjQgY2hhcglFTnNraXAga2VybmVsIGVuY3J5cHRpb24gcGFja2FnZQorCQkgIDAgPSAvZGV2L2Vuc2tpcAlDb21tdW5pY2F0aW9uIHdpdGggRU5za2lwIGtlcm5lbCBtb2R1bGUKKworIDY0IGJsb2NrCVNjcmFtZGlzay9Ecml2ZUNyeXB0IGVuY3J5cHRlZCBkZXZpY2VzCisJCSAgMCA9IC9kZXYvc2NyYW1kaXNrL21hc3RlciAgICBNYXN0ZXIgbm9kZSBmb3IgaW9jdGxzCisJCSAgMSA9IC9kZXYvc2NyYW1kaXNrLzEgICAgICAgICBGaXJzdCBlbmNyeXB0ZWQgZGV2aWNlCisJCSAgMiA9IC9kZXYvc2NyYW1kaXNrLzIgICAgICAgICBTZWNvbmQgZW5jcnlwdGVkIGRldmljZQorCQkgIC4uLgorCQkyNTUgPSAvZGV2L3NjcmFtZGlzay8yNTUgICAgICAgMjU1dGggZW5jcnlwdGVkIGRldmljZQorCisJCVRoZSBmaWxlbmFtZSBvZiB0aGUgZW5jcnlwdGVkIGNvbnRhaW5lciBhbmQgdGhlIHBhc3N3b3JkcworCQlhcmUgc2VudCB2aWEgaW9jdGxzICh1c2luZyB0aGUgc2Rtb3VudCB0b29sKSB0byB0aGUgbWFzdGVyCisJCW5vZGUgd2hpY2ggdGhlbiBhY3RpdmF0ZXMgdGhlbSB2aWEgb25lIG9mIHRoZQorCQkvZGV2L3NjcmFtZGlzay94IG5vZGVzIGZvciBsb29wYmFjayBtb3VudGluZyAoYWxsIGhhbmRsZWQKKwkJdGhyb3VnaCB0aGUgc2Rtb3VudCB0b29sKS4KKworCQlSZXF1ZXN0ZWQgYnk6IGFuZHlAc2NyYW1kaXNrbGludXgub3JnCisKKyA2NSBjaGFyCVN1bmRhbmNlICJwbGluayIgVHJhbnNwdXRlciBib2FyZHMgKG9ic29sZXRlLCB1bnVzZWQpCisJCSAgMCA9IC9kZXYvcGxpbmswCUZpcnN0IHBsaW5rIGRldmljZQorCQkgIDEgPSAvZGV2L3BsaW5rMQlTZWNvbmQgcGxpbmsgZGV2aWNlCisJCSAgMiA9IC9kZXYvcGxpbmsyCVRoaXJkIHBsaW5rIGRldmljZQorCQkgIDMgPSAvZGV2L3BsaW5rMwlGb3VydGggcGxpbmsgZGV2aWNlCisJCSA2NCA9IC9kZXYvcnBsaW5rMAlGaXJzdCBwbGluayBkZXZpY2UsIHJhdworCQkgNjUgPSAvZGV2L3JwbGluazEJU2Vjb25kIHBsaW5rIGRldmljZSwgcmF3CisJCSA2NiA9IC9kZXYvcnBsaW5rMglUaGlyZCBwbGluayBkZXZpY2UsIHJhdworCQkgNjcgPSAvZGV2L3JwbGluazMJRm91cnRoIHBsaW5rIGRldmljZSwgcmF3CisJCTEyOCA9IC9kZXYvcGxpbmswZAlGaXJzdCBwbGluayBkZXZpY2UsIGRlYnVnCisJCTEyOSA9IC9kZXYvcGxpbmsxZAlTZWNvbmQgcGxpbmsgZGV2aWNlLCBkZWJ1ZworCQkxMzAgPSAvZGV2L3BsaW5rMmQJVGhpcmQgcGxpbmsgZGV2aWNlLCBkZWJ1ZworCQkxMzEgPSAvZGV2L3BsaW5rM2QJRm91cnRoIHBsaW5rIGRldmljZSwgZGVidWcKKwkJMTkyID0gL2Rldi9ycGxpbmswZAlGaXJzdCBwbGluayBkZXZpY2UsIHJhdywgZGVidWcKKwkJMTkzID0gL2Rldi9ycGxpbmsxZAlTZWNvbmQgcGxpbmsgZGV2aWNlLCByYXcsIGRlYnVnCisJCTE5NCA9IC9kZXYvcnBsaW5rMmQJVGhpcmQgcGxpbmsgZGV2aWNlLCByYXcsIGRlYnVnCisJCTE5NSA9IC9kZXYvcnBsaW5rM2QJRm91cnRoIHBsaW5rIGRldmljZSwgcmF3LCBkZWJ1ZworCisJCVRoaXMgaXMgYSBjb21tZXJjaWFsIGRyaXZlcjsgY29udGFjdCBKYW1lcyBIb3dlcworCQk8anRoQHByb3NpZy5kZW1vbi5jby51az4gZm9yIGluZm9ybWF0aW9uLgorCisgNjUgYmxvY2sJU0NTSSBkaXNrIGRldmljZXMgKDE2LTMxKQorCQkgIDAgPSAvZGV2L3NkcQkJMTd0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L3NkcgkJMTh0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMzIgPSAvZGV2L3NkcwkJMTl0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvc2RhZgkJMzJuZCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA2NiBjaGFyCVlBUkMgUG93ZXJQQyBQQ0kgY29wcm9jZXNzb3IgY2FyZAorCQkgIDAgPSAvZGV2L3lwcGNwY2kwCUZpcnN0IFlBUkMgY2FyZAorCQkgIDEgPSAvZGV2L3lwcGNwY2kxCVNlY29uZCBZQVJDIGNhcmQKKwkJICAgIC4uLgorCisgNjYgYmxvY2sJU0NTSSBkaXNrIGRldmljZXMgKDMyLTQ3KQorCQkgIDAgPSAvZGV2L3NkYWcJCTMzdGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9zZGFoCQkzNHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAzMiA9IC9kZXYvc2RhaQkJMzV0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvc2RhdgkJNDhuZCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA2NyBjaGFyCUNvZGEgbmV0d29yayBmaWxlIHN5c3RlbQorCQkgIDAgPSAvZGV2L2NmczAJCUNvZGEgY2FjaGUgbWFuYWdlcgorCisJCVNlZSBodHRwOi8vd3d3LmNvZGEuY3MuY211LmVkdSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgQ29kYS4KKworIDY3IGJsb2NrCVNDU0kgZGlzayBkZXZpY2VzICg0OC02MykKKwkJICAwID0gL2Rldi9zZGF3CQk0OXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvc2RheAkJNTB0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMzIgPSAvZGV2L3NkYXkJCTUxc3QgU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L3NkYmwJCTY0dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgNjggY2hhcglDQVBJIDIuMCBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9jYXBpMjAJQ29udHJvbCBkZXZpY2UKKwkJICAxID0gL2Rldi9jYXBpMjAuMDAJRmlyc3QgQ0FQSSAyLjAgYXBwbGljYXRpb24KKwkJICAyID0gL2Rldi9jYXBpMjAuMDEJU2Vjb25kIENBUEkgMi4wIGFwcGxpY2F0aW9uCisJCSAgICAuLi4KKwkJIDIwID0gL2Rldi9jYXBpMjAuMTkJMTl0aCBDQVBJIDIuMCBhcHBsaWNhdGlvbgorCisJCUlTRE4gQ0FQSSAyLjAgZHJpdmVyIGZvciB1c2Ugd2l0aCBDQVBJIDIuMAorCQlhcHBsaWNhdGlvbnM7IGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgQVZNIEIxIGNhcmQuCisKKyA2OCBibG9jawlTQ1NJIGRpc2sgZGV2aWNlcyAoNjQtNzkpCisJCSAgMCA9IC9kZXYvc2RibQkJNjV0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L3NkYm4JCTY2dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDMyID0gL2Rldi9zZGJvCQk2N3RoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9zZGNiCQk4MHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDY5IGNoYXIJTUExNiBudW1lcmljIGFjY2VsZXJhdG9yIGNhcmQKKwkJICAwID0gL2Rldi9tYTE2CQlCb2FyZCBtZW1vcnkgYWNjZXNzCisKKyA2OSBibG9jawlTQ1NJIGRpc2sgZGV2aWNlcyAoODAtOTUpCisJCSAgMCA9IC9kZXYvc2RjYwkJODFzdCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L3NkY2QJCTgybmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDMyID0gL2Rldi9zZGNlCQk4M3RoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9zZGNyCQk5NnRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDcwIGNoYXIJU3BlbGxDYXN0ZXIgUHJvdG9jb2wgU2VydmljZXMgSW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvYXBzY2ZnCUNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlCisJCSAgMSA9IC9kZXYvYXBzYXV0aAlBdXRoZW50aWNhdGlvbiBpbnRlcmZhY2UKKwkJICAyID0gL2Rldi9hcHNsb2cJTG9nZ2luZyBpbnRlcmZhY2UKKwkJICAzID0gL2Rldi9hcHNkYmcJRGVidWdnaW5nIGludGVyZmFjZQorCQkgNjQgPSAvZGV2L2Fwc2lzZG4JSVNETiBjb21tYW5kIGludGVyZmFjZQorCQkgNjUgPSAvZGV2L2Fwc2FzeW5jCUFzeW5jIGNvbW1hbmQgaW50ZXJmYWNlCisJCTEyOCA9IC9kZXYvYXBzbW9uCU1vbml0b3IgaW50ZXJmYWNlCisKKyA3MCBibG9jawlTQ1NJIGRpc2sgZGV2aWNlcyAoOTYtMTExKQorCQkgIDAgPSAvZGV2L3NkY3MJCTk3dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9zZGN0CQk5OHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAzMiA9IC9kZXYvc2RjdQkJOTl0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvc2RkaAkJMTEybmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgNzEgY2hhcglDb21wdXRvbmUgSW50ZWxsaVBvcnQgSUkgc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlGMAlJbnRlbGxpUG9ydCBJSSBib2FyZCAwLCBwb3J0IDAKKwkJICAxID0gL2Rldi90dHlGMQlJbnRlbGxpUG9ydCBJSSBib2FyZCAwLCBwb3J0IDEKKwkJICAgIC4uLgorCQkgNjMgPSAvZGV2L3R0eUY2MwlJbnRlbGxpUG9ydCBJSSBib2FyZCAwLCBwb3J0IDYzCisJCSA2NCA9IC9kZXYvdHR5RjY0CUludGVsbGlQb3J0IElJIGJvYXJkIDEsIHBvcnQgMAorCQkgNjUgPSAvZGV2L3R0eUY2NQlJbnRlbGxpUG9ydCBJSSBib2FyZCAxLCBwb3J0IDEKKwkJICAgIC4uLgorCQkxMjcgPSAvZGV2L3R0eUYxMjcJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMSwgcG9ydCA2MworCQkxMjggPSAvZGV2L3R0eUYxMjgJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMiwgcG9ydCAwCisJCTEyOSA9IC9kZXYvdHR5RjEyOQlJbnRlbGxpUG9ydCBJSSBib2FyZCAyLCBwb3J0IDEKKwkJICAgIC4uLgorCQkxOTEgPSAvZGV2L3R0eUYxOTEJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMiwgcG9ydCA2MworCQkxOTIgPSAvZGV2L3R0eUYxOTIJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMywgcG9ydCAwCisJCTE5MyA9IC9kZXYvdHR5RjE5MwlJbnRlbGxpUG9ydCBJSSBib2FyZCAzLCBwb3J0IDEKKwkJICAgIC4uLgorCQkyNTUgPSAvZGV2L3R0eUYyNTUJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMywgcG9ydCA2MworCisgNzEgYmxvY2sJU0NTSSBkaXNrIGRldmljZXMgKDExMi0xMjcpCisJCSAgMCA9IC9kZXYvc2RkaQkJMTEzdGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9zZGRqCQkxMTR0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMzIgPSAvZGV2L3NkZGsJCTExNXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9zZGR4CQkxMjh0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA3MiBjaGFyCUNvbXB1dG9uZSBJbnRlbGxpUG9ydCBJSSBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VmMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUYwCisJCSAgMSA9IC9kZXYvY3VmMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUYxCisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi9jdWY2MwlDYWxsb3V0IGRldmljZSBmb3IgdHR5RjYzCisJCSA2NCA9IC9kZXYvY3VmNjQJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUY2NAorCQkgNjUgPSAvZGV2L2N1ZjY1CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGNjUKKwkJICAgIC4uLgorCQkxMjcgPSAvZGV2L2N1ZjEyNwlDYWxsb3V0IGRldmljZSBmb3IgdHR5RjEyNworCQkxMjggPSAvZGV2L2N1ZjEyOAlDYWxsb3V0IGRldmljZSBmb3IgdHR5RjEyOAorCQkxMjkgPSAvZGV2L2N1ZjEyOQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RjEyOQorCQkgICAgLi4uCisJCTE5MSA9IC9kZXYvY3VmMTkxCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGMTkxCisJCTE5MiA9IC9kZXYvY3VmMTkyCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGMTkyCisJCTE5MyA9IC9kZXYvY3VmMTkzCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGMTkzCisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi9jdWYyNTUJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUYyNTUKKworIDcyIGJsb2NrCUNvbXBhcSBJbnRlbGxpZ2VudCBEcml2ZSBBcnJheSwgZmlyc3QgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2lkYS9jMGQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2lkYS9jMGQxCVNlY29uZCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2lkYS9jMGQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgNzMgY2hhcglDb21wdXRvbmUgSW50ZWxsaVBvcnQgSUkgc2VyaWFsIGNhcmQgLSBjb250cm9sIGRldmljZXMKKwkJICAwID0gL2Rldi9pcDJpcGwwCUxvYWR3YXJlIGRldmljZSBmb3IgYm9hcmQgMAorCQkgIDEgPSAvZGV2L2lwMnN0YXQwCVN0YXR1cyBkZXZpY2UgZm9yIGJvYXJkIDAKKwkJICA0ID0gL2Rldi9pcDJpcGwxCUxvYWR3YXJlIGRldmljZSBmb3IgYm9hcmQgMQorCQkgIDUgPSAvZGV2L2lwMnN0YXQxCVN0YXR1cyBkZXZpY2UgZm9yIGJvYXJkIDEKKwkJICA4ID0gL2Rldi9pcDJpcGwyCUxvYWR3YXJlIGRldmljZSBmb3IgYm9hcmQgMgorCQkgIDkgPSAvZGV2L2lwMnN0YXQyCVN0YXR1cyBkZXZpY2UgZm9yIGJvYXJkIDIKKwkJIDEyID0gL2Rldi9pcDJpcGwzCUxvYWR3YXJlIGRldmljZSBmb3IgYm9hcmQgMworCQkgMTMgPSAvZGV2L2lwMnN0YXQzCVN0YXR1cyBkZXZpY2UgZm9yIGJvYXJkIDMKKworIDczIGJsb2NrCUNvbXBhcSBJbnRlbGxpZ2VudCBEcml2ZSBBcnJheSwgc2Vjb25kIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9pZGEvYzFkMAlGaXJzdCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pZGEvYzFkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pZGEvYzFkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDc0IGNoYXIJU0NJIGJyaWRnZQorCQkgIDAgPSAvZGV2L1NDSS8wCVNDSSBkZXZpY2UgMAorCQkgIDEgPSAvZGV2L1NDSS8xCVNDSSBkZXZpY2UgMQorCQkgICAgLi4uCisKKwkJQ3VycmVudGx5IGZvciBEb2xwaGluIEludGVyY29ubmVjdCBTb2x1dGlvbnMnIFBDSS1TQ0kKKwkJYnJpZGdlLgorCisgNzQgYmxvY2sJQ29tcGFxIEludGVsbGlnZW50IERyaXZlIEFycmF5LCB0aGlyZCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvaWRhL2MyZDAJRmlyc3QgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaWRhL2MyZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaWRhL2MyZDE1CTE2dGggbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA3NSBjaGFyCVNwZWNpYWxpeCBJTzgrIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5VzAJRmlyc3QgSU84KyBwb3J0LCBmaXJzdCBjYXJkCisJCSAgMSA9IC9kZXYvdHR5VzEJU2Vjb25kIElPOCsgcG9ydCwgZmlyc3QgY2FyZAorCQkgICAgLi4uCisJCSAgOCA9IC9kZXYvdHR5VzgJRmlyc3QgSU84KyBwb3J0LCBzZWNvbmQgY2FyZAorCQkgICAgLi4uCisKKyA3NSBibG9jawlDb21wYXEgSW50ZWxsaWdlbnQgRHJpdmUgQXJyYXksIGZvdXJ0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvaWRhL2MzZDAJRmlyc3QgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaWRhL2MzZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaWRhL2MzZDE1CTE2dGggbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA3NiBjaGFyCVNwZWNpYWxpeCBJTzgrIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdXcwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5VzAKKwkJICAxID0gL2Rldi9jdXcxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5VzEKKwkJICAgIC4uLgorCQkgIDggPSAvZGV2L2N1dzgJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlXOAorCQkgICAgLi4uCisKKyA3NiBibG9jawlDb21wYXEgSW50ZWxsaWdlbnQgRHJpdmUgQXJyYXksIGZpZnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9pZGEvYzRkMAlGaXJzdCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pZGEvYzRkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pZGEvYzRkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisgNzcgY2hhcglDb21TY2lyZSBRdWFudHVtIE5vaXNlIEdlbmVyYXRvcgorCQkgIDAgPSAvZGV2L3FuZwkJQ29tU2NpcmUgUXVhbnR1bSBOb2lzZSBHZW5lcmF0b3IKKworIDc3IGJsb2NrCUNvbXBhcSBJbnRlbGxpZ2VudCBEcml2ZSBBcnJheSwgc2l4dGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2lkYS9jNWQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2lkYS9jNWQxCVNlY29uZCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2lkYS9jNWQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisKKyA3OCBjaGFyCVBBTSBTb2Z0d2FyZSdzIG11bHRpbW9kZW0gYm9hcmRzCisJCSAgMCA9IC9kZXYvdHR5TTAJRmlyc3QgUEFNIG1vZGVtCisJCSAgMSA9IC9kZXYvdHR5TTEJU2Vjb25kIFBBTSBtb2RlbQorCQkgICAgLi4uCisKKyA3OCBibG9jawlDb21wYXEgSW50ZWxsaWdlbnQgRHJpdmUgQXJyYXksIHNldmVudGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2lkYS9jNmQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2lkYS9jNmQxCVNlY29uZCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2lkYS9jNmQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisKKyA3OSBjaGFyCVBBTSBTb2Z0d2FyZSdzIG11bHRpbW9kZW0gYm9hcmRzIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdW0wCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5TTAKKwkJICAxID0gL2Rldi9jdW0xCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5TTEKKwkJICAgIC4uLgorCisgNzkgYmxvY2sJQ29tcGFxIEludGVsbGlnZW50IERyaXZlIEFycmF5LCBlaWd0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvaWRhL2M3ZDAJRmlyc3QgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaWRhL2M3ZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaWRhL2M3MTUJMTZ0aCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisgODAgY2hhcglQaG90b21ldHJpY3MgQVQyMDAgQ0NEIGNhbWVyYQorCQkgIDAgPSAvZGV2L2F0MjAwCVBob3RvbWV0cmljcyBBVDIwMCBDQ0QgY2FtZXJhCisKKyA4MCBibG9jawlJMk8gaGFyZCBkaXNrCisJCSAgMCA9IC9kZXYvaTJvL2hkYQlGaXJzdCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaTJvL2hkYglTZWNvbmQgSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaTJvL2hkcAkxNnRoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgODEgY2hhcgl2aWRlbzRsaW51eAorCQkgIDAgPSAvZGV2L3ZpZGVvMAlWaWRlbyBjYXB0dXJlL292ZXJsYXkgZGV2aWNlCisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi92aWRlbzYzCVZpZGVvIGNhcHR1cmUvb3ZlcmxheSBkZXZpY2UKKwkJIDY0ID0gL2Rldi9yYWRpbzAJUmFkaW8gZGV2aWNlCisJCSAgICAuLi4KKwkJMTI3ID0gL2Rldi9yYWRpbzYzCVJhZGlvIGRldmljZQorCQkxOTIgPSAvZGV2L3Z0eDAJCVRlbGV0ZXh0IGRldmljZQorCQkgICAgLi4uCisJCTIyMyA9IC9kZXYvdnR4MzEJVGVsZXRleHQgZGV2aWNlCisJCTIyNCA9IC9kZXYvdmJpMAkJVmVydGljYWwgYmxhbmsgaW50ZXJydXB0CisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi92YmkzMQlWZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHQKKworIDgxIGJsb2NrCUkyTyBoYXJkIGRpc2sKKwkJICAwID0gL2Rldi9pMm8vaGRxCTE3dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2kyby9oZHIJMTh0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pMm8vaGRhZgkzMm5kIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgODIgY2hhcglXaU5SQURpTyBjb21tdW5pY2F0aW9ucyByZWNlaXZlciBjYXJkCisJCSAgMCA9IC9kZXYvd2lucmFkaW8wCUZpcnN0IFdpTlJBRGlPIGNhcmQKKwkJICAxID0gL2Rldi93aW5yYWRpbzEJU2Vjb25kIFdpTlJBRGlPIGNhcmQKKwkJICAgIC4uLgorCisJCVRoZSBkcml2ZXIgYW5kIGRvY3VtZW50YXRpb24gbWF5IGJlIG9idGFpbmVkIGZyb20KKwkJaHR0cDovL3d3dy5wcm94aW1pdHkuY29tLmF1L35icmlhbi93aW5yYWRpby8KKworIDgyIGJsb2NrCUkyTyBoYXJkIGRpc2sKKwkJICAwID0gL2Rldi9pMm8vaGRhZwkzM3JkIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pMm8vaGRhaAkzNHRoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2kyby9oZGF2CTQ4dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA4MyBjaGFyCU1hdHJveCBtZ2FfdmlkIHZpZGVvIGRyaXZlcgorIAkJIDAgPSAvZGV2L21nYV92aWQwCTFzdCB2aWRlbyBjYXJkCisJCSAxID0gL2Rldi9tZ2FfdmlkMQkybmQgdmlkZW8gY2FyZAorCQkgMiA9IC9kZXYvbWdhX3ZpZDIJM3JkIHZpZGVvIGNhcmQKKwkJICAuLi4KKwkgICAgICAgIDE1ID0gL2Rldi9tZ2FfdmlkMTUJMTZ0aCB2aWRlbyBjYXJkCisKKyA4MyBibG9jawlJMk8gaGFyZCBkaXNrCisJCSAgMCA9IC9kZXYvaTJvL2hkYXcJNDl0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaTJvL2hkYXgJNTB0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pMm8vaGRibAk2NHRoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgODQgY2hhcglJa29uIDEwMTFbNTddIFZlcnNhdGVjIEdyZWVuc2hlZXQgSW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvaWhjcDAJRmlyc3QgR3JlZW5zaGVldCBwb3J0CisJCSAgMSA9IC9kZXYvaWhjcDEJU2Vjb25kIEdyZWVuc2hlZXQgcG9ydAorCisgODQgYmxvY2sJSTJPIGhhcmQgZGlzaworCQkgIDAgPSAvZGV2L2kyby9oZGJtCTY1dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2kyby9oZGJuCTY2dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaTJvL2hkY2IJODB0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDg1IGNoYXIJTGludXgvU0dJIHNoYXJlZCBtZW1vcnkgaW5wdXQgcXVldWUKKwkJICAwID0gL2Rldi9zaG1pcQlNYXN0ZXIgc2hhcmVkIGlucHV0IHF1ZXVlCisJCSAgMSA9IC9kZXYvcWNudGwwCUZpcnN0IGRldmljZSBwdXNoZWQKKwkJICAyID0gL2Rldi9xY250bDEJU2Vjb25kIGRldmljZSBwdXNoZWQKKwkJICAgIC4uLgorCisgODUgYmxvY2sJSTJPIGhhcmQgZGlzaworCQkgIDAgPSAvZGV2L2kyby9oZGNjCTgxc3QgSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2kyby9oZGNkCTgybmQgSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaTJvL2hkY3IJOTZ0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDg2IGNoYXIJU0NTSSBtZWRpYSBjaGFuZ2VyCisJCSAgMCA9IC9kZXYvc2NoMAkJRmlyc3QgU0NTSSBtZWRpYSBjaGFuZ2VyCisJCSAgMSA9IC9kZXYvc2NoMQkJU2Vjb25kIFNDU0kgbWVkaWEgY2hhbmdlcgorCQkgICAgLi4uCisKKyA4NiBibG9jawlJMk8gaGFyZCBkaXNrCisJCSAgMCA9IC9kZXYvaTJvL2hkY3MJOTd0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaTJvL2hkY3QJOTh0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pMm8vaGRkaAkxMTJ0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDg3IGNoYXIJU29ueSBDb250cm9sLUExIHN0ZXJlbyBjb250cm9sIGJ1cworCQkgIDAgPSAvZGV2L2NvbnRyb2xhMAlGaXJzdCBkZXZpY2Ugb24gY2hhaW4KKwkJICAxID0gL2Rldi9jb250cm9sYTEJU2Vjb25kIGRldmljZSBvbiBjaGFpbgorCQkgICAgLi4uCisKKyA4NyBibG9jawlJMk8gaGFyZCBkaXNrCisJCSAgMCA9IC9kZXYvaTJvL2hkZGkJMTEzcmQgSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2kyby9oZGRqCTExNHRoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2kyby9oZGR4CTEyOHRoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgODggY2hhcglDT01YIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvY29teDAJQ09NWCBjaGFubmVsIDAKKwkJICAxID0gL2Rldi9jb214MQlDT01YIGNoYW5uZWwgMQorCQkgICAgLi4uCisKKyA4OCBibG9jawlTZXZlbnRoIElERSBoYXJkIGRpc2svQ0QtUk9NIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L2hkbQkJTWFzdGVyOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisJCSA2NCA9IC9kZXYvaGRuCQlTbGF2ZTogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciB0aGUgZmlyc3QKKwkJaW50ZXJmYWNlIChzZWUgbWFqb3IgbnVtYmVyIDMpLgorCisgODkgY2hhcglJMkMgYnVzIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L2kyYy0wCUZpcnN0IEkyQyBhZGFwdGVyCisJCSAgMSA9IC9kZXYvaTJjLTEJU2Vjb25kIEkyQyBhZGFwdGVyCisJCSAgICAuLi4KKworIDg5IGJsb2NrCUVpZ2h0aCBJREUgaGFyZCBkaXNrL0NELVJPTSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9oZG8JCU1hc3Rlcjogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkgNjQgPSAvZGV2L2hkcAkJU2xhdmU6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIGZpcnN0CisJCWludGVyZmFjZSAoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDkwIGNoYXIJTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlIChSQU0sIFJPTSwgRmxhc2gpCisJCSAgMCA9IC9kZXYvbXRkMAkJRmlyc3QgTVREIChydykKKwkJICAxID0gL2Rldi9tdGRyMAlGaXJzdCBNVEQgKHJvKQorCQkgICAgLi4uCisJCSAzMCA9IC9kZXYvbXRkMTUJMTZ0aCBNVEQgKHJ3KQorCQkgMzEgPSAvZGV2L210ZHIxNQkxNnRoIE1URCAocm8pCisKKyA5MCBibG9jawlOaW50aCBJREUgaGFyZCBkaXNrL0NELVJPTSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9oZHEJCU1hc3Rlcjogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkgNjQgPSAvZGV2L2hkcgkJU2xhdmU6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIGZpcnN0CisJCWludGVyZmFjZSAoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDkxIGNoYXIJQ0FOLUJ1cyBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY2FuMAkJRmlyc3QgQ0FOLUJ1cyBjb250cm9sbGVyCisJCSAgMSA9IC9kZXYvY2FuMQkJU2Vjb25kIENBTi1CdXMgY29udHJvbGxlcgorCQkgICAgLi4uCisKKyA5MSBibG9jawlUZW50aCBJREUgaGFyZCBkaXNrL0NELVJPTSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9oZHMJCU1hc3Rlcjogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkgNjQgPSAvZGV2L2hkdAkJU2xhdmU6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIGZpcnN0CisJCWludGVyZmFjZSAoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDkyIGNoYXIJUmVzZXJ2ZWQgZm9yIGl0aCBLb21tdW5pa2F0aW9uc3RlY2huaWsgTUlDIElTRE4gY2FyZAorCisgOTIgYmxvY2sJUFBERCBlbmNyeXB0ZWQgZGlzayBkcml2ZXIKKwkJICAwID0gL2Rldi9wcGRkMAlGaXJzdCBlbmNyeXB0ZWQgZGlzaworCQkgIDEgPSAvZGV2L3BwZGQxCVNlY29uZCBlbmNyeXB0ZWQgZGlzaworCQkgICAgLi4uCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDkzIGNoYXIJSUJNIFNtYXJ0IENhcHR1cmUgQ2FyZCBmcmFtZSBncmFiYmVyIHsyLjZ9CisJCSAgMCA9IC9kZXYvaXNjYzAJRmlyc3QgU21hcnQgQ2FwdHVyZSBDYXJkCisJCSAgMSA9IC9kZXYvaXNjYzEJU2Vjb25kIFNtYXJ0IENhcHR1cmUgQ2FyZAorCQkgICAgLi4uCisJCTEyOCA9IC9kZXYvaXNjY2N0bDAJRmlyc3QgU21hcnQgQ2FwdHVyZSBDYXJkIGNvbnRyb2wKKwkJMTI5ID0gL2Rldi9pc2NjY3RsMQlTZWNvbmQgU21hcnQgQ2FwdHVyZSBDYXJkIGNvbnRyb2wKKwkJICAgIC4uLgorCisgOTMgYmxvY2sJTkFORCBGbGFzaCBUcmFuc2xhdGlvbiBMYXllciBmaWxlc3lzdGVtCisJCSAgMCA9IC9kZXYvbmZ0bGEJRmlyc3QgTkZUTCBsYXllcgorCQkgMTYgPSAvZGV2L25mdGxiCVNlY29uZCBORlRMIGxheWVyCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9uZnRscAkxNnRoIE5URkwgbGF5ZXIKKworIDk0IGNoYXIJbWlyb1ZJREVPIERDMTAvMzAgY2FwdHVyZS9wbGF5YmFjayBkZXZpY2UgezIuNn0KKwkJICAwID0gL2Rldi9kY3h4MAlGaXJzdCBjYXB0dXJlIGNhcmQKKwkJICAxID0gL2Rldi9kY3h4MQlTZWNvbmQgY2FwdHVyZSBjYXJkCisJCSAgICAuLi4KKworIDk0IGJsb2NrIElCTSBTLzM5MCBEQVNEIGJsb2NrIHN0b3JhZ2UKKyAgICAJCSAgMCA9IC9kZXYvZGFzZGEgRmlyc3QgREFTRCBkZXZpY2UsIG1ham9yCisgICAgCQkgIDEgPSAvZGV2L2Rhc2RhMSBGaXJzdCBEQVNEIGRldmljZSwgYmxvY2sgMQorCSAgICAJICAyID0gL2Rldi9kYXNkYTIgRmlyc3QgREFTRCBkZXZpY2UsIGJsb2NrIDIKKyAgICAJCSAgMyA9IC9kZXYvZGFzZGEzIEZpcnN0IERBU0QgZGV2aWNlLCBibG9jayAzCisgICAgCQkgIDQgPSAvZGV2L2Rhc2RiIFNlY29uZCBEQVNEIGRldmljZSwgbWFqb3IKKyAgICAJCSAgNSA9IC9kZXYvZGFzZGIxIFNlY29uZCBEQVNEIGRldmljZSwgYmxvY2sgMQorICAgIAkJICA2ID0gL2Rldi9kYXNkYjIgU2Vjb25kIERBU0QgZGV2aWNlLCBibG9jayAyCisgICAgCQkgIDcgPSAvZGV2L2Rhc2RiMyBTZWNvbmQgREFTRCBkZXZpY2UsIGJsb2NrIDMKKwkJICAgIC4uLgorCisgOTUgY2hhcglJUCBmaWx0ZXIKKwkJICAwID0gL2Rldi9pcGwJCUZpbHRlciBjb250cm9sIGRldmljZS9sb2cgZmlsZQorCQkgIDEgPSAvZGV2L2lwbmF0CU5BVCBjb250cm9sIGRldmljZS9sb2cgZmlsZQorCQkgIDIgPSAvZGV2L2lwc3RhdGUJU3RhdGUgaW5mb3JtYXRpb24gbG9nIGZpbGUKKwkJICAzID0gL2Rldi9pcGF1dGgJQXV0aGVudGljYXRpb24gY29udHJvbCBkZXZpY2UvbG9nIGZpbGUKKwkJICAgIC4uLgkJCisKKyA5NiBjaGFyCVBhcmFsbGVsIHBvcnQgQVRBUEkgdGFwZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvcHQwCQlGaXJzdCBwYXJhbGxlbCBwb3J0IEFUQVBJIHRhcGUKKwkJICAxID0gL2Rldi9wdDEJCVNlY29uZCBwYXJhbGxlbCBwb3J0IEFUQVBJIHRhcGUKKwkJICAgIC4uLgorCQkxMjggPSAvZGV2L25wdDAJCUZpcnN0IHAucC4gQVRBUEkgdGFwZSwgbm8gcmV3aW5kCisJCTEyOSA9IC9kZXYvbnB0MQkJU2Vjb25kIHAucC4gQVRBUEkgdGFwZSwgbm8gcmV3aW5kCisJCSAgICAuLi4KKworIDk2IGJsb2NrIEludmVyc2UgTkFORCBGbGFzaCBUcmFuc2xhdGlvbiBMYXllcgorCQkgIDAgPSAvZGV2L2luZnRsYSBGaXJzdCBJTkZUTCBsYXllcgorCQkgMTYgPSAvZGV2L2luZnRsYiBTZWNvbmQgSU5GVEwgbGF5ZXIKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2luZnRscAkxNnRoIElOVEZMIGxheWVyCisKKyA5NyBjaGFyCVBhcmFsbGVsIHBvcnQgZ2VuZXJpYyBBVEFQSSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9wZzAJCUZpcnN0IHBhcmFsbGVsIHBvcnQgQVRBUEkgZGV2aWNlCisJCSAgMSA9IC9kZXYvcGcxCQlTZWNvbmQgcGFyYWxsZWwgcG9ydCBBVEFQSSBkZXZpY2UKKwkJICAyID0gL2Rldi9wZzIJCVRoaXJkIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGV2aWNlCisJCSAgMyA9IC9kZXYvcGczCQlGb3VydGggcGFyYWxsZWwgcG9ydCBBVEFQSSBkZXZpY2UKKworCQlUaGVzZSBkZXZpY2VzIHN1cHBvcnQgdGhlIHNhbWUgQVBJIGFzIHRoZSBnZW5lcmljIFNDU0kKKwkJZGV2aWNlcy4KKworIDk3IGJsb2NrCVBhY2tldCB3cml0aW5nIGZvciBDRC9EVkQgZGV2aWNlcworCQkgIDAgPSAvZGV2L3BrdGNkdmQwCUZpcnN0IHBhY2tldC13cml0aW5nIG1vZHVsZQorCQkgIDEgPSAvZGV2L3BrdGNkdmQxCVNlY29uZCBwYWNrZXQtd3JpdGluZyBtb2R1bGUKKwkJICAgIC4uLgorCisgOTggY2hhcglDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgKGNvbWVkaSkKKwkJICAwID0gL2Rldi9jb21lZGkwCUZpcnN0IGNvbWVkaSBkZXZpY2UKKwkJICAxID0gL2Rldi9jb21lZGkxCVNlY29uZCBjb21lZGkgZGV2aWNlCisJCSAgICAuLi4KKworCQlTZWUgaHR0cDovL3N0bS5sYmwuZ292L2NvbWVkaSBvciBodHRwOi8vd3d3LmxscC5mdS1iZXJsaW4uZGUvLgorCisgOTggYmxvY2sJVXNlci1tb2RlIHZpcnR1YWwgYmxvY2sgZGV2aWNlCisJCSAgMCA9IC9kZXYvdWJkYQkJRmlyc3QgdXNlci1tb2RlIGJsb2NrIGRldmljZQorCQkgMTYgPSAvZGV2L3VkYmIJCVNlY29uZCB1c2VyLW1vZGUgYmxvY2sgZGV2aWNlCisJCSAgICAuLi4KKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisJCVRoaXMgZGV2aWNlIGlzIHVzZWQgYnkgdGhlIHVzZXItbW9kZSB2aXJ0dWFsIGtlcm5lbCBwb3J0LgorCisgOTkgY2hhcglSYXcgcGFyYWxsZWwgcG9ydHMKKwkJICAwID0gL2Rldi9wYXJwb3J0MAlGaXJzdCBwYXJhbGxlbCBwb3J0CisJCSAgMSA9IC9kZXYvcGFycG9ydDEJU2Vjb25kIHBhcmFsbGVsIHBvcnQKKwkJICAgIC4uLgorCisgOTkgYmxvY2sJSmF2YVN0YXRpb24gZmxhc2ggZGlzaworCQkgIDAgPSAvZGV2L2pzZmQJCUphdmFTdGF0aW9uIGZsYXNoIGRpc2sKKworMTAwIGNoYXIJVGVsZXBob255IGZvciBMaW51eAorCQkgIDAgPSAvZGV2L3Bob25lMAlGaXJzdCB0ZWxlcGhvbnkgZGV2aWNlCisJCSAgMSA9IC9kZXYvcGhvbmUxCVNlY29uZCB0ZWxlcGhvbnkgZGV2aWNlCisJCSAgICAuLi4KKworMTAxIGNoYXIJTW90b3JvbGEgRFNQIDU2eHh4IGJvYXJkCisJCSAgMCA9IC9kZXYvbWRzcHN0YXQJU3RhdHVzIGluZm9ybWF0aW9uCisJCSAgMSA9IC9kZXYvbWRzcDEJRmlyc3QgRFNQIGJvYXJkIEkvTyBjb250cm9scworCQkgICAgLi4uCisJCSAxNiA9IC9kZXYvbWRzcDE2CTE2dGggRFNQIGJvYXJkIEkvTyBjb250cm9scworCisxMDEgYmxvY2sJQU1JIEh5cGVyRGlzayBSQUlEIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9hbWlyYWlkL2FyMAlGaXJzdCBhcnJheSB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvYW1pcmFpZC9hcjEJU2Vjb25kIGFycmF5IHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2FtaXJhaWQvYXIxNQkxNnRoIGFycmF5IHdob2xlIGRpc2sKKworCQlGb3IgZWFjaCBkZXZpY2UsIHBhcnRpdGlvbnMgYXJlIGFkZGVkIGFzOgorCQkgIDAgPSAvZGV2L2FtaXJhaWQvYXI/CSAgV2hvbGUgZGlzaworCQkgIDEgPSAvZGV2L2FtaXJhaWQvYXI/cDEgIEZpcnN0IHBhcnRpdGlvbgorCQkgIDIgPSAvZGV2L2FtaXJhaWQvYXI/cDIgIFNlY29uZCBwYXJ0aXRpb24KKwkJICAgIC4uLgorCQkgMTUgPSAvZGV2L2FtaXJhaWQvYXI/cDE1IDE1dGggcGFydGl0aW9uCisKKzEwMiBjaGFyCVBoaWxpcHMgU0FBNTI0OSBUZWxldGV4dCBzaWduYWwgZGVjb2RlciB7Mi42fQorCQkgIDAgPSAvZGV2L3RsazAJCUZpcnN0IFRlbGV0ZXh0IGRlY29kZXIKKwkJICAxID0gL2Rldi90bGsxCQlTZWNvbmQgVGVsZXRleHQgZGVjb2RlcgorCQkgIDIgPSAvZGV2L3RsazIJCVRoaXJkIFRlbGV0ZXh0IGRlY29kZXIKKwkJICAzID0gL2Rldi90bGszCQlGb3VydGggVGVsZXRleHQgZGVjb2RlcgorCisxMDIgYmxvY2sJQ29tcHJlc3NlZCBibG9jayBkZXZpY2UKKwkJICAwID0gL2Rldi9jYmQvYQlGaXJzdCBjb21wcmVzc2VkIGJsb2NrIGRldmljZSwgd2hvbGUgZGV2aWNlCisJCSAxNiA9IC9kZXYvY2JkL2IJU2Vjb25kIGNvbXByZXNzZWQgYmxvY2sgZGV2aWNlLCB3aG9sZSBkZXZpY2UKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2NiZC9wCTE2dGggY29tcHJlc3NlZCBibG9jayBkZXZpY2UsIHdob2xlIGRldmljZQorCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKzEwMyBjaGFyCUFybGEgbmV0d29yayBmaWxlIHN5c3RlbQorCQkgIDAgPSAvZGV2L25ucGZzMAlGaXJzdCBOTlBGUyBkZXZpY2UKKwkJICAxID0gL2Rldi9ubnBmczEJU2Vjb25kIE5OUEZTIGRldmljZQorCisJCUFybGEgaXMgYSBmcmVlIGNsb25lIG9mIHRoZSBBbmRyZXcgRmlsZSBTeXN0ZW0sIEFGUy4KKwkJVGhlIE5OUEZTIGRldmljZSBnaXZlcyB1c2VyIG1vZGUgZmlsZXN5c3RlbQorCQlpbXBsZW1lbnRhdGlvbnMgYSBrZXJuZWwgcHJlc2VuY2UgZm9yIGNhY2hpbmcgYW5kIGVhc3kKKwkJbW91bnRpbmcuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvamVjdCwKKwkJd3JpdGUgdG8gPGFybGEtZHJpbmtlcnNAc3RhY2tlbi5rdGguc2U+IG9yIHNlZQorCQlodHRwOi8vd3d3LnN0YWNrZW4ua3RoLnNlL3Byb2plY3QvYXJsYS8KKworMTAzIGJsb2NrCUF1ZGl0IGRldmljZQorCQkgIDAgPSAvZGV2L2F1ZGl0CUF1ZGl0IGRldmljZQorCisxMDQgY2hhcglGbGFzaCBCSU9TIHN1cHBvcnQKKworMTA0IGJsb2NrCUNvbXBhcSBOZXh0IEdlbmVyYXRpb24gRHJpdmUgQXJyYXksIGZpcnN0IGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jY2lzcy9jMGQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9jY2lzcy9jMGQxCVNlY29uZCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jY2lzcy9jMGQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTA1IGNoYXIJQ29tdHJvbCBWUy0xMDAwIHNlcmlhbCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvdHR5VjAJRmlyc3QgVlMtMTAwMCBwb3J0CisJCSAgMSA9IC9kZXYvdHR5VjEJU2Vjb25kIFZTLTEwMDAgcG9ydAorCQkgICAgLi4uCisKKzEwNSBibG9jawlDb21wYXEgTmV4dCBHZW5lcmF0aW9uIERyaXZlIEFycmF5LCBzZWNvbmQgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2NjaXNzL2MxZDAJRmlyc3QgbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2NjaXNzL2MxZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2NjaXNzL2MxZDE1CTE2dGggbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisxMDYgY2hhcglDb210cm9sIFZTLTEwMDAgc2VyaWFsIGNvbnRyb2xsZXIgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1djAJCUZpcnN0IFZTLTEwMDAgcG9ydAorCQkgIDEgPSAvZGV2L2N1djEJCVNlY29uZCBWUy0xMDAwIHBvcnQKKwkJICAgIC4uLgorCisxMDYgYmxvY2sJQ29tcGFxIE5leHQgR2VuZXJhdGlvbiBEcml2ZSBBcnJheSwgdGhpcmQgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2NjaXNzL2MyZDAJRmlyc3QgbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2NjaXNzL2MyZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2NjaXNzL2MyZDE1CTE2dGggbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisxMDcgY2hhcgkzRGZ4IFZvb2RvbyBHcmFwaGljcyBkZXZpY2UKKwkJICAwID0gL2Rldi8zZGZ4CQlQcmltYXJ5IDNEZnggZ3JhcGhpY3MgZGV2aWNlCisKKzEwNyBibG9jawlDb21wYXEgTmV4dCBHZW5lcmF0aW9uIERyaXZlIEFycmF5LCBmb3VydGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2NjaXNzL2MzZDAJRmlyc3QgbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2NjaXNzL2MzZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2NjaXNzL2MzZDE1CTE2dGggbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisxMDggY2hhcglEZXZpY2UgaW5kZXBlbmRlbnQgUFBQIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L3BwcAkJRGV2aWNlIGluZGVwZW5kZW50IFBQUCBpbnRlcmZhY2UKKworMTA4IGJsb2NrCUNvbXBhcSBOZXh0IEdlbmVyYXRpb24gRHJpdmUgQXJyYXksIGZpZnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jY2lzcy9jNGQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9jY2lzcy9jNGQxCVNlY29uZCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jY2lzcy9jNGQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTA5IGNoYXIJUmVzZXJ2ZWQgZm9yIGxvZ2ljYWwgdm9sdW1lIG1hbmFnZXIKKworMTA5IGJsb2NrCUNvbXBhcSBOZXh0IEdlbmVyYXRpb24gRHJpdmUgQXJyYXksIHNpeHRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jY2lzcy9jNWQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9jY2lzcy9jNWQxCVNlY29uZCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jY2lzcy9jNWQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTEwIGNoYXIJbWlyb01FRElBIFN1cnJvdW5kIGJvYXJkCisJCSAgMCA9IC9kZXYvc3JuZDAJRmlyc3QgbWlyb01FRElBIFN1cnJvdW5kIGJvYXJkCisJCSAgMSA9IC9kZXYvc3JuZDEJU2Vjb25kIG1pcm9NRURJQSBTdXJyb3VuZCBib2FyZAorCQkgICAgLi4uCisKKzExMCBibG9jawlDb21wYXEgTmV4dCBHZW5lcmF0aW9uIERyaXZlIEFycmF5LCBzZXZlbnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jY2lzcy9jNmQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9jY2lzcy9jNmQxCVNlY29uZCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jY2lzcy9jNmQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTExIGNoYXIJUGhpbGlwcyBTQUE3MTQ2LWJhc2VkIGF1ZGlvL3ZpZGVvIGNhcmQgezIuNn0KKwkJICAwID0gL2Rldi9hdjAJCUZpcnN0IEEvViBjYXJkCisJCSAgMSA9IC9kZXYvYXYxCQlTZWNvbmQgQS9WIGNhcmQKKwkJICAgIC4uLgorCisxMTEgYmxvY2sJQ29tcGFxIE5leHQgR2VuZXJhdGlvbiBEcml2ZSBBcnJheSwgZWlndGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2NjaXNzL2M3ZDAJRmlyc3QgbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2NjaXNzL2M3ZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2NjaXNzL2M3ZDE1CTE2dGggbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisxMTIgY2hhcglJU0kgc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlNMAlGaXJzdCBJU0kgcG9ydAorCQkgIDEgPSAvZGV2L3R0eU0xCVNlY29uZCBJU0kgcG9ydAorCQkgICAgLi4uCisKKwkJVGhlcmUgaXMgY3VycmVudGx5IGEgZGV2aWNlLW5hbWluZyBjb25mbGljdCBiZXR3ZWVuCisJCXRoZXNlIGFuZCBQQU0gbXVsdGltb2RlbXMgKG1ham9yIDc4KS4KKworMTEyIGJsb2NrCUlCTSBpU2VyaWVzIHZpcnR1YWwgZGlzaworCQkgIDAgPSAvZGV2L2lzZXJpZXMvdmRhCUZpcnN0IHZpcnR1YWwgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L2lzZXJpZXMvdmRiCVNlY29uZCB2aXJ0dWFsIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyMDAgPSAvZGV2L2lzZXJpZXMvdmR6CTI2dGggdmlydHVhbCBkaXNrLCB3aG9sZSBkaXNrCisJCTIwOCA9IC9kZXYvaXNlcmllcy92ZGFhCTI3dGggdmlydHVhbCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9pc2VyaWVzL3ZkYWYJMzJuZCB2aXJ0dWFsIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDcuCisKKzExMyBjaGFyCUlTSSBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VtMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eU0wCisJCSAgMSA9IC9kZXYvY3VtMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eU0xCisJCSAgICAuLi4KKworMTEzIGJsb2NrCUlCTSBpU2VyaWVzIHZpcnR1YWwgQ0QtUk9NCisKKwkJICAwID0gL2Rldi9pc2VyaWVzL3ZjZGEJRmlyc3QgdmlydHVhbCBDRC1ST00KKwkJICAxID0gL2Rldi9pc2VyaWVzL3ZjZGIJU2Vjb25kIHZpcnR1YWwgQ0QtUk9NCisJCSAgICAuLi4KKworMTE0IGNoYXIJUGljdHVyZSBFbGVtZW50cyBJU0UgYm9hcmQKKwkJICAwID0gL2Rldi9pc2UwCQlGaXJzdCBJU0UgYm9hcmQKKwkJICAxID0gL2Rldi9pc2UxCQlTZWNvbmQgSVNFIGJvYXJkCisJCSAgICAuLi4KKwkJMTI4ID0gL2Rldi9pc2V4MAlDb250cm9sIG5vZGUgZm9yIGZpcnN0IElTRSBib2FyZAorCQkxMjkgPSAvZGV2L2lzZXgxCUNvbnRyb2wgbm9kZSBmb3Igc2Vjb25kIElTRSBib2FyZAorCQkgICAgLi4uCisKKwkJVGhlIElTRSBib2FyZCBpcyBhbiBlbWJlZGRlZCBjb21wdXRlciwgb3B0aW1pemVkIGZvcgorCQlpbWFnZSBwcm9jZXNzaW5nLiBUaGUgL2Rldi9pc2VOIG5vZGVzIGFyZSB0aGUgZ2VuZXJhbAorCQlJL08gYWNjZXNzIHRvIHRoZSBib2FyZCwgdGhlIC9kZXYvaXNleDAgbm9kZXMgY29tbWFuZAorCQlub2RlcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGJvYXJkLgorCisxMTQgYmxvY2sgICAgICAgSURFIEJJT1MgcG93ZXJlZCBzb2Z0d2FyZSBSQUlEIGludGVyZmFjZXMgc3VjaCBhcyB0aGUKKyAgICAgICAgICAgICAgICBQcm9taXNlIEZhc3RyYWsKKworICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvYXRhcmFpZC9kMAorICAgICAgICAgICAgICAgICAgMSA9IC9kZXYvYXRhcmFpZC9kMHAxCisgICAgICAgICAgICAgICAgICAyID0gL2Rldi9hdGFyYWlkL2QwcDIKKyAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICAxNiA9IC9kZXYvYXRhcmFpZC9kMQorICAgICAgICAgICAgICAgICAxNyA9IC9kZXYvYXRhcmFpZC9kMXAxCisgICAgICAgICAgICAgICAgIDE4ID0gL2Rldi9hdGFyYWlkL2QxcDIKKyAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI1NSA9IC9kZXYvYXRhcmFpZC9kMTVwMTUKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisxMTUgY2hhcglUSSBsaW5rIGNhYmxlIGRldmljZXMgKDExNSB3YXMgZm9ybWVybHkgdGhlIGNvbnNvbGUgZHJpdmVyIHNwZWFrZXIpCisJCSAgMCA9IC9kZXYvdGlwYXIwICAgIFBhcmFsbGVsIGNhYmxlIG9uIGZpcnN0IHBhcmFsbGVsIHBvcnQKKwkJICAuLi4KKwkJICA3ID0gL2Rldi90aXBhcjcgICAgUGFyYWxsZWwgY2FibGUgb24gc2V2ZW50aCBwYXJhbGxlbCBwb3J0CisKKwkJICA4ID0gL2Rldi90aXNlcjAgICAgU2VyaWFsIGNhYmxlIG9uIGZpcnN0IHNlcmlhbCBwb3J0CisJCSAgLi4uCisJCSAxNSA9IC9kZXYvdGlzZXI3ICAgIFNlcmlhbCBjYWJsZSBvbiBzZXZlbnRoIHNlcmlhbCBwb3J0CisKKwkJIDE2ID0gL2Rldi90aXVzYjAgICAgRmlyc3QgVVNCIGNhYmxlCisJCSAgLi4uCisJCSA0NyA9IC9kZXYvdGl1c2IzMSAgIDMybmQgVVNCIGNhYmxlCisKKzExNSBibG9jayAgICAgICBOZXRXYXJlIChOV0ZTKSBEZXZpY2VzICgwLTI1NSkKKworICAgICAgICAgICAgICAgIFRoZSBOV0ZTIChOZXRXYXJlKSBkZXZpY2VzIGFyZSB1c2VkIHRvIHByZXNlbnQgYQorICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24gb2YgTmV0V2FyZSBNaXJyb3IgR3JvdXBzIG9yIE5ldFdhcmUKKyAgICAgICAgICAgICAgICBQYXJ0aXRpb25zIGFzIGEgbG9naWNhbCBzdG9yYWdlIHNlZ21lbnQgZm9yCisgICAgICAgICAgICAgICAgdXNlIGluIG1vdW50aW5nIE5ldFdhcmUgdm9sdW1lcy4gIEEgbWF4aW11bSBvZgorICAgICAgICAgICAgICAgIDI1NiBOZXRXYXJlIHZvbHVtZXMgY2FuIGJlIHN1cHBvcnRlZCBpbiBhIHNpbmdsZQorICAgICAgICAgICAgICAgIG1hY2hpbmUuCisKKyAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvam1lcmtleS9ud2ZzCisKKyAgICAgICAgICAgICAgICAwID0gL2Rldi9ud2ZzL3YwICAgIEZpcnN0IE5ldFdhcmUgKE5XRlMpIExvZ2ljYWwgVm9sdW1lCisgICAgICAgICAgICAgICAgMSA9IC9kZXYvbndmcy92MSAgICBTZWNvbmQgTmV0V2FyZSAoTldGUykgTG9naWNhbCBWb2x1bWUKKyAgICAgICAgICAgICAgICAyID0gL2Rldi9ud2ZzL3YyICAgIFRoaXJkIE5ldFdhcmUgKE5XRlMpIExvZ2ljYWwgVm9sdW1lCisgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgMjU1ID0gL2Rldi9ud2ZzL3YyNTUgICAgTGFzdCBOZXRXYXJlIChOV0ZTKSBMb2dpY2FsIFZvbHVtZQorCisxMTYgY2hhcglBZHZhbmNlZCBMaW51eCBTb3VuZCBEcml2ZXIgKEFMU0EpCisKKzExNiBibG9jayAgICAgICBNaWNyb01lbW9yeSBiYXR0ZXJ5IGJhY2tlZCBSQU0gYWRhcHRlciAoTlZSQU0pCisgICAgICAgICAgICAgICAgU3VwcG9ydHMgMTYgYm9hcmRzLCAxNSBwYXJpdGlvbnMgZWFjaC4KKyAgICAgICAgICAgICAgICBSZXF1ZXN0ZWQgYnkgbmVpbGIgYXQgY3NlLnVuc3cuZWR1LmF1LgorCisJCSAwID0gL2Rldi91bWVtL2QwICAgICAgV2hvbGUgb2YgZmlyc3QgYm9hcmQKKwkJIDEgPSAvZGV2L3VtZW0vZDBwMSAgICBGaXJzdCBwYXJ0aXRpb24gb2YgZmlyc3QgYm9hcmQKKwkJIDIgPSAvZGV2L3VtZW0vZDBwMiAgICBTZWNvbmQgcGFydGl0aW9uIG9mIGZpcnN0IGJvYXJkCisJCTE1ID0gL2Rldi91bWVtL2QwcDE1ICAgMTV0aCBwYXJ0aXRpb24gb2YgZmlyc3QgYm9hcmQKKworCQkxNiA9IC9kZXYvdW1lbS9kMSAgICAgIFdob2xlIG9mIHNlY29uZCBib2FyZAorCQkxNyA9IC9kZXYvdW1lbS9kMXAxICAgIEZpcnN0IHBhcnRpdGlvbiBvZiBzZWNvbmQgYm9hcmQKKwkJICAgIC4uLgorCQkyNTU9IC9kZXYvdW1lbS9kMTVwMTUgIDE1dGggcGFydGl0aW9uIG9mIDE2dGggYm9hcmQuCisKKzExNyBjaGFyCUNPU0EvU1JQIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvY29zYTBjMAkxc3QgYm9hcmQsIDFzdCBjaGFubmVsCisJCSAgMSA9IC9kZXYvY29zYTBjMQkxc3QgYm9hcmQsIDJuZCBjaGFubmVsCisJCSAgICAuLi4KKwkJIDE2ID0gL2Rldi9jb3NhMWMwCTJuZCBib2FyZCwgMXN0IGNoYW5uZWwKKwkJIDE3ID0gL2Rldi9jb3NhMWMxCTJuZCBib2FyZCwgMm5kIGNoYW5uZWwKKwkJICAgIC4uLgorCisxMTcgYmxvY2sgICAgICAgRW50ZXJwcmlzZSBWb2x1bWUgTWFuYWdlbWVudCBTeXN0ZW0gKEVWTVMpCisKKyAgICAgICAgICAgICAgICBUaGUgRVZNUyBkcml2ZXIgdXNlcyBhIGxheWVyZWQsIHBsdWctaW4gbW9kZWwgdG8gcHJvdmlkZQorICAgICAgICAgICAgICAgIHVucGFyYWxsZWxlZCBmbGV4aWJpbGl0eSBhbmQgZXh0ZW5zaWJpbGl0eSBpbiBtYW5hZ2luZworICAgICAgICAgICAgICAgIHN0b3JhZ2UuICBUaGlzIGFsbG93cyBmb3IgZWFzeSBleHBhbnNpb24gb3IgY3VzdG9taXphdGlvbgorICAgICAgICAgICAgICAgIG9mIHZhcmlvdXMgbGV2ZWxzIG9mIHZvbHVtZSBtYW5hZ2VtZW50LiAgUmVxdWVzdGVkIGJ5CisgICAgICAgICAgICAgICAgTWFyayBQZWxvcXVpbiAocGVsb3F1aW4gYXQgdXMuaWJtLmNvbSkuCisKKyAgICAgICAgICAgICAgICBOb3RlOiBFVk1TIHBvcHVsYXRlcyBhbmQgbWFuYWdlcyBhbGwgdGhlIGRldm5vZGVzIGluCisgICAgICAgICAgICAgICAgL2Rldi9ldm1zLgorCisgICAgICAgICAgICAgICAgaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9ldm1zCisKKyAgICAgICAgICAgICAgICAgIDAgPSAvZGV2L2V2bXMvYmxvY2tfZGV2aWNlICAgRVZNUyBibG9jayBkZXZpY2UKKyAgICAgICAgICAgICAgICAgIDEgPSAvZGV2L2V2bXMvbGVnYWN5bmFtZTEgICAgRmlyc3QgRVZNUyBsZWdhY3kgZGV2aWNlCisgICAgICAgICAgICAgICAgICAyID0gL2Rldi9ldm1zL2xlZ2FjeW5hbWUyICAgIFNlY29uZCBFVk1TIGxlZ2FjeSBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgIEJvdGggcmFuZ2VzIGNhbiBncm93IChkb3duIG9yIHVwKSB1bnRpbCB0aGV5IG1lZXQuCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI1NCA9IC9kZXYvZXZtcy9FVk1TbmFtZTIgICAgICBTZWNvbmQgRVZNUyBuYXRpdmUgZGV2aWNlCisgICAgICAgICAgICAgICAgMjU1ID0gL2Rldi9ldm1zL0VWTVNuYW1lMSAgICAgIEZpcnN0IEVWTVMgbmF0aXZlIGRldmljZQorCisgICAgICAgICAgICAgICAgTm90ZTogbGVnYWN5bmFtZShzKSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBub3JtYWwgbGVnYWN5CisgICAgICAgICAgICAgICAgZGV2aWNlIG5hbWVzLiAgRm9yIGV4YW1wbGUsIC9kZXYvaGRhNSB3b3VsZCBiZWNvbWUKKyAgICAgICAgICAgICAgICAvZGV2L2V2bXMvaGRhNS4KKworMTE4IGNoYXIJSUJNIENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0b3IKKwkJICAwID0gL2Rldi9pY2EJVmlydHVhbCBpbnRlcmZhY2UgdG8gYWxsIElCTSBDcnlwdG8gQWNjZWxlcmF0b3JzCisJCSAgMSA9IC9kZXYvaWNhMAlJQk1DQSBEZXZpY2UgMAorCQkgIDIgPSAvZGV2L2ljYTEJSUJNQ0EgRGV2aWNlIDEKKwkJICAgIC4uLgorCisxMTkgY2hhcglWTXdhcmUgdmlydHVhbCBuZXR3b3JrIGNvbnRyb2wKKwkJICAwID0gL2Rldi92bmV0MAkxc3QgdmlydHVhbCBuZXR3b3JrCisJCSAgMSA9IC9kZXYvdm5ldDEJMm5kIHZpcnR1YWwgbmV0d29yaworCQkgICAgLi4uCisKKzEyMC0xMjcgY2hhcglMT0NBTC9FWFBFUklNRU5UQUwgVVNFCisxMjAtMTI3IGJsb2NrCUxPQ0FML0VYUEVSSU1FTlRBTCBVU0UKKwkJQWxsb2NhdGVkIGZvciBsb2NhbC9leHBlcmltZW50YWwgdXNlLiAgRm9yIGRldmljZXMgbm90CisJCWFzc2lnbmVkIG9mZmljaWFsIG51bWJlcnMsIHRoZXNlIHJhbmdlcyBzaG91bGQgYmUKKwkJdXNlZCBpbiBvcmRlciB0byBhdm9pZCBjb25mbGljdGluZyB3aXRoIGZ1dHVyZSBhc3NpZ25tZW50cy4KKworMTI4LTEzNSBjaGFyCVVuaXg5OCBQVFkgbWFzdGVycworCisJCVRoZXNlIGRldmljZXMgc2hvdWxkIG5vdCBoYXZlIGNvcnJlc3BvbmRpbmcgZGV2aWNlCisJCW5vZGVzOyBpbnN0ZWFkIHRoZXkgc2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlCisJCS9kZXYvcHRteCBjbG9uaW5nIGludGVyZmFjZS4KKworCisxMjggYmxvY2sgICAgICAgU0NTSSBkaXNrIGRldmljZXMgKDEyOC0xNDMpCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9zZGR5ICAgICAgICAgMTI5dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L3NkZHogICAgICAgICAxMzB0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAzMiA9IC9kZXYvc2RlYSAgICAgICAgIDEzMXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI0MCA9IC9kZXYvc2RlbiAgICAgICAgIDE0NHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisxMjkgYmxvY2sgICAgICAgU0NTSSBkaXNrIGRldmljZXMgKDE0NC0xNTkpCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9zZGVvICAgICAgICAgMTQ1dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L3NkZXAgICAgICAgICAxNDZ0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAzMiA9IC9kZXYvc2RlcSAgICAgICAgIDE0N3RoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI0MCA9IC9kZXYvc2RmZCAgICAgICAgIDE2MHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTMwIGNoYXIgCShNaXNjIGRldmljZXMpCisKKzEzMCBibG9jayAgICAgICBTQ1NJIGRpc2sgZGV2aWNlcyAoMTYwLTE3NSkKKyAgICAgICAgICAgICAgICAgIDAgPSAvZGV2L3NkZmUgICAgICAgICAxNjFzdCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAxNiA9IC9kZXYvc2RmZiAgICAgICAgIDE2Mm5kIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgIDMyID0gL2Rldi9zZGZnICAgICAgICAgMTYzcmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgMjQwID0gL2Rldi9zZGZ0ICAgICAgICAgMTc2dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisxMzEgYmxvY2sgICAgICAgU0NTSSBkaXNrIGRldmljZXMgKDE3Ni0xOTEpCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9zZGZ1ICAgICAgICAgMTc3dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L3NkZnYgICAgICAgICAxNzh0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAzMiA9IC9kZXYvc2RmdyAgICAgICAgIDE3OXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI0MCA9IC9kZXYvc2RnaiAgICAgICAgIDE5Mm5kIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisxMzIgYmxvY2sgICAgICAgU0NTSSBkaXNrIGRldmljZXMgKDE5Mi0yMDcpCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9zZGdrICAgICAgICAgMTkzcmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L3NkZ2wgICAgICAgICAxOTR0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAzMiA9IC9kZXYvc2RnbSAgICAgICAgIDE5NXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI0MCA9IC9kZXYvc2RneiAgICAgICAgIDIwOHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisxMzMgYmxvY2sgICAgICAgU0NTSSBkaXNrIGRldmljZXMgKDIwOC0yMjMpCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9zZGhhICAgICAgICAgMjA5dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L3NkaGIgICAgICAgICAyMTB0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAzMiA9IC9kZXYvc2RoYyAgICAgICAgIDIxMXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI0MCA9IC9kZXYvc2RocCAgICAgICAgIDIyNHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisxMzQgYmxvY2sgICAgICAgU0NTSSBkaXNrIGRldmljZXMgKDIyNC0yMzkpCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9zZGhxICAgICAgICAgMjI1dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L3NkaHIgICAgICAgICAyMjZ0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAzMiA9IC9kZXYvc2RocyAgICAgICAgIDIyN3RoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI0MCA9IC9kZXYvc2RpZiAgICAgICAgIDI0MHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisxMzUgYmxvY2sgICAgICAgU0NTSSBkaXNrIGRldmljZXMgKDI0MC0yNTUpCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9zZGlnICAgICAgICAgMjQxc3QgU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L3NkaWggICAgICAgICAyNDJuZCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAzMiA9IC9kZXYvc2RpaCAgICAgICAgIDI0M3JkIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI0MCA9IC9kZXYvc2RpdiAgICAgICAgIDI1NnRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisxMzYtMTQzIGNoYXIJVW5peDk4IFBUWSBzbGF2ZXMKKwkJICAwID0gL2Rldi9wdHMvMAlGaXJzdCBVbml4OTggcHNldWRvLVRUWQorCQkgIDEgPSAvZGV2L3B0cy8xCVNlY29uZCBVbml4OTggcGVzdWRvLVRUWQorCQkgICAgLi4uCisKKwkJVGhlc2UgZGV2aWNlIG5vZGVzIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3aXRoCisJCXRoZSBwcm9wZXIgcGVybWlzc2lvbnMgYW5kIG1vZGVzIGJ5IG1vdW50aW5nIHRoZQorCQlkZXZwdHMgZmlsZXN5c3RlbSBvbnRvIC9kZXYvcHRzIHdpdGggdGhlIGFwcHJvcHJpYXRlCisJCW1vdW50IG9wdGlvbnMgKGRpc3RyaWJ1dGlvbiBkZXBlbmRlbnQsIGhvd2V2ZXIsIG9uCisJCSptb3N0KiBkaXN0cmlidXRpb25zIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGFyZQorCQkibW9kZT0wNjIwLGdpZD08Z2lkIG9mIHRoZSAidHR5IiBncm91cD4iLikKKworMTM2IGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBuaW50aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzhkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzhkMQlTZWNvbmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvcmQvYzhkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKzEzNyBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgdGVudGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2M5ZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2M5ZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2M5ZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisxMzggYmxvY2sJTXlsZXggREFDOTYwIFBDSSBSQUlEIGNvbnRyb2xsZXI7IGVsZXZlbnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jMTBkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzEwZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2MxMGQzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGFzIGZvciBtYWpvciA0OC4KKworMTM5IGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyB0d2VsZnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jMTFkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzExZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2MxMWQzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGFzIGZvciBtYWpvciA0OC4KKworMTQwIGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyB0aGlydGVlbnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jMTJkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzEyZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2MxMmQzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGFzIGZvciBtYWpvciA0OC4KKworMTQxIGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBmb3VydGVlbnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jMTNkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzEzZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2MxM2QzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGFzIGZvciBtYWpvciA0OC4KKworMTQyIGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBmaWZ0ZWVudGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2MxNGQwCUZpcnN0IGRpc2ssIHdob2xlIGRpc2sKKwkJICA4ID0gL2Rldi9yZC9jMTRkMQlTZWNvbmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvcmQvYzE0ZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisxNDMgYmxvY2sJTXlsZXggREFDOTYwIFBDSSBSQUlEIGNvbnRyb2xsZXI7IHNpeHRlZW50aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzE1ZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2MxNWQxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jMTVkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKzE0NCBjaGFyCUVuY2Fwc3VsYXRlZCBQUFAKKwkJICAwID0gL2Rldi9wcHBveDAJRmlyc3QgUFBQIG92ZXIgRXRoZXJuZXQKKwkJICAgIC4uLgorCQkgNjMgPSAvZGV2L3BwcG94NjMJNjR0aCBQUFAgb3ZlciBFdGhlcm5ldAorCisJCVRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIEFEU0wuCisKKwkJVGhlIFNTVCA1MTM2LUROIERldmljZU5ldCBpbnRlcmZhY2UgZHJpdmVyIGhhcyBiZWVuCisJCXJlbG9jYXRlZCB0byBtYWpvciAxODMgZHVlIHRvIGFuIHVuZm9ydHVuYXRlIGNvbmZsaWN0LgorCisxNDQgYmxvY2sJRXhwYW5zaW9uIEFyZWEgIzEgZm9yIG1vcmUgbm9uLWRldmljZSAoZS5nLiBORlMpIG1vdW50cworCQkgIDAgPSBtb3VudGVkIGRldmljZSAyNTYKKwkJMjU1ID0gbW91bnRlZCBkZXZpY2UgNTExCisKKzE0NSBjaGFyCVNBTTk0MDctYmFzZWQgc291bmRjYXJkCisJCSAgMCA9IC9kZXYvc2FtMF9taXhlcgorCQkgIDEgPSAvZGV2L3NhbTBfc2VxdWVuY2VyCisJCSAgMiA9IC9kZXYvc2FtMF9taWRpMDAKKwkJICAzID0gL2Rldi9zYW0wX2RzcAorCQkgIDQgPSAvZGV2L3NhbTBfYXVkaW8KKwkJICA2ID0gL2Rldi9zYW0wX3NuZHN0YXQKKwkJIDE4ID0gL2Rldi9zYW0wX21pZGkwMQorCQkgMzQgPSAvZGV2L3NhbTBfbWlkaTAyCisJCSA1MCA9IC9kZXYvc2FtMF9taWRpMDMKKwkJIDY0ID0gL2Rldi9zYW0xX21peGVyCisJCSAgICAuLi4KKwkJMTI4ID0gL2Rldi9zYW0yX21peGVyCisJCSAgICAuLi4KKwkJMTkyID0gL2Rldi9zYW0zX21peGVyCisJCSAgICAuLi4KKworCQlEZXZpY2UgZnVuY3Rpb25zIG1hdGNoIE9TUywgYnV0IG9mZmVyIGEgbnVtYmVyIG9mCisJCWFkZG9ucywgd2hpY2ggYXJlIHNhbTk0MDcgc3BlY2lmaWMuICBPU1MgY2FuIGJlCisJCW9wZXJhdGVkIHNpbXVsdGFuZW91c2x5LCB0YWtpbmcgY2FyZSBvZiB0aGUgY29kZWMuCisKKzE0NSBibG9jawlFeHBhbnNpb24gQXJlYSAjMiBmb3IgbW9yZSBub24tZGV2aWNlIChlLmcuIE5GUykgbW91bnRzCisJCSAgMCA9IG1vdW50ZWQgZGV2aWNlIDUxMgorCQkyNTUgPSBtb3VudGVkIGRldmljZSA3NjcKKworMTQ2IGNoYXIJU1lTVFJBTSBTQ1JBTU5ldCBtaXJyb3JlZC1tZW1vcnkgbmV0d29yaworCQkgIDAgPSAvZGV2L3NjcmFtbmV0MAlGaXJzdCBTQ1JBTU5ldCBkZXZpY2UKKwkJICAxID0gL2Rldi9zY3JhbW5ldDEJU2Vjb25kIFNDUkFNTmV0IGRldmljZQorCQkgICAgLi4uCisKKzE0NiBibG9jawlFeHBhbnNpb24gQXJlYSAjMyBmb3IgbW9yZSBub24tZGV2aWNlIChlLmcuIE5GUykgbW91bnRzCisJCSAgMCA9IG1vdW50ZWQgZGV2aWNlIDc2OAorCQkyNTUgPSBtb3VudGVkIGRldmljZSAxMDIzCisKKzE0NyBjaGFyCUF1cmVhbCBTZW1pY29uZHVjdG9yIFZvcnRleCBBdWRpbyBkZXZpY2UKKwkJICAwID0gL2Rldi9hdXJlYWwwCUZpcnN0IEF1cmVhbCBWb3J0ZXgKKwkJICAxID0gL2Rldi9hdXJlYWwxCVNlY29uZCBBdXJlYWwgVm9ydGV4CisJCSAgICAuLi4KKworMTQ3IGJsb2NrCURpc3RyaWJ1dGVkIFJlcGxpY2F0ZWQgQmxvY2sgRGV2aWNlIChEUkJEKQorCQkgIDAgPSAvZGV2L2RyYmQwCUZpcnN0IERSQkQgZGV2aWNlCisJCSAgMSA9IC9kZXYvZHJiZDEJU2Vjb25kIERSQkQgZGV2aWNlCisJCSAgICAuLi4KKworMTQ4IGNoYXIJVGVjaG5vbG9neSBDb25jZXB0cyBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eVQwCUZpcnN0IFRDTCBwb3J0CisJCSAgMSA9IC9kZXYvdHR5VDEJU2Vjb25kIFRDTCBwb3J0CisJCSAgICAuLi4KKworMTQ5IGNoYXIJVGVjaG5vbG9neSBDb25jZXB0cyBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3V0MAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVQwCisJCSAgMSA9IC9kZXYvY3V0MAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVQxCisJCSAgICAuLi4KKworMTUwIGNoYXIJUmVhbC1UaW1lIExpbnV4IEZJRk9zCisJCSAgMCA9IC9kZXYvcnRmMAkJRmlyc3QgUlRMaW51eCBGSUZPCisJCSAgMSA9IC9kZXYvcnRmMQkJU2Vjb25kIFJUTGludXggRklGTworCQkgICAgLi4uCisKKzE1MSBjaGFyCURQVCBJMk8gU21hcnRSYWlkIFYgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2RwdGkwCUZpcnN0IERQVCBJMk8gYWRhcHRlcgorCQkgIDEgPSAvZGV2L2RwdGkxCVNlY29uZCBEUFQgSTJPIGFkYXB0ZXIKKwkJICAgIC4uLgorCisxNTIgY2hhcglFdGhlckRyaXZlIENvbnRyb2wgRGV2aWNlCisJCSAgMCA9IC9kZXYvZXRoZXJkL2N0bAlDb25uZWN0L0Rpc2Nvbm5lY3QgYW4gRXRoZXJEcml2ZQorCQkgIDEgPSAvZGV2L2V0aGVyZC9lcnIJTW9uaXRvciBlcnJvcnMKKwkJICAyID0gL2Rldi9ldGhlcmQvcmF3CVJhdyBBb0UgcGFja2V0IG1vbml0b3IKKworMTUyIGJsb2NrCUV0aGVyRHJpdmUgQmxvY2sgRGV2aWNlcworCQkgIDAgPSAvZGV2L2V0aGVyZC8wCUV0aGVyRHJpdmUgMAorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvZXRoZXJkLzI1NQlFdGhlckRyaXZlIDI1NQorCisxNTMgY2hhcglTUEkgQnVzIEludGVyZmFjZSAoc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIE1pY3JvV2lyZSkKKwkJICAwID0gL2Rldi9zcGkwCQlGaXJzdCBTUEkgZGV2aWNlIG9uIHRoZSBidXMKKwkJICAxID0gL2Rldi9zcGkxCQlTZWNvbmQgU1BJIGRldmljZSBvbiB0aGUgYnVzCisJCSAgICAuLi4KKwkJIDE1ID0gL2Rldi9zcGkxNQlTaXh0ZWVudGggU1BJIGRldmljZSBvbiB0aGUgYnVzCisKKzE1MyBibG9jawlFbmhhbmNlZCBNZXRhZGlzayBSQUlEIChFTUQpIHN0b3JhZ2UgdW5pdHMKKwkJICAwID0gL2Rldi9lbWQvMAlGaXJzdCB1bml0CisJCSAgMSA9IC9kZXYvZW1kLzBwMQlQYXJ0aXRpb24gMSBvbiBGaXJzdCB1bml0CisJCSAgMiA9IC9kZXYvZW1kLzBwMglQYXJ0aXRpb24gMiBvbiBGaXJzdCB1bml0CisJCSAgICAuLi4KKwkJIDE1ID0gL2Rldi9lbWQvMHAxNQlQYXJ0aXRpb24gMTUgb24gRmlyc3QgdW5pdAorCisJCSAxNiA9IC9kZXYvZW1kLzEJU2Vjb25kIHVuaXQKKwkJIDMyID0gL2Rldi9lbWQvMglUaGlyZCB1bml0CisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9lbWQvMTUJU2l4dGVlbnRoIHVuaXQKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisxNTQgY2hhcglTcGVjaWFsaXggUklPIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5U1IwCUZpcnN0IFJJTyBwb3J0CisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi90dHlTUjI1NQkyNTZ0aCBSSU8gcG9ydAorCisxNTUgY2hhcglTcGVjaWFsaXggUklPIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdXNyMAlDYWxsb3V0IGRldmljZSBmb3IgdHR5U1IwCisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi9jdXNyMjU1CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTUjI1NQorCisxNTYgY2hhcglTcGVjaWFsaXggUklPIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5U1IyNTYJMjU3dGggUklPIHBvcnQKKwkJICAgIC4uLgorCQkyNTUgPSAvZGV2L3R0eVNSNTExCTUxMnRoIFJJTyBwb3J0CisKKzE1NyBjaGFyCVNwZWNpYWxpeCBSSU8gc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1c3IyNTYJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNSMjU2CisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi9jdXNyNTExCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTUjUxMQorCisxNTggY2hhcglEaWFsb2dpYyBHYW1tYUxpbmsgZmF4IGRyaXZlcgorCQkgIDAgPSAvZGV2L2dmYXgwCUdhbW1hTGluayBjaGFubmVsIDAKKwkJICAxID0gL2Rldi9nZmF4MQlHYW1tYUxpbmsgY2hhbm5lbCAxCisJCSAgICAuLi4KKworMTU5IGNoYXIJUkVTRVJWRUQKKzE1OSBibG9jawlSRVNFUlZFRAorCisxNjAgY2hhcglHZW5lcmFsIFB1cnBvc2UgSW5zdHJ1bWVudCBCdXMgKEdQSUIpCisJCSAgMCA9IC9kZXYvZ3BpYjAJRmlyc3QgR1BJQiBidXMKKwkJICAxID0gL2Rldi9ncGliMQlTZWNvbmQgR1BJQiBidXMKKwkJICAgIC4uLgorCisxNjAgYmxvY2sgICAgICAgQ2FybWVsIDgtcG9ydCBTQVRBIERpc2tzIG9uIEZpcnN0IENvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jYXJtZWwvMCAgICAgU0FUQSBkaXNrIDAgd2hvbGUgZGlzaworCQkgIDEgPSAvZGV2L2Nhcm1lbC8wcDEgICBTQVRBIGRpc2sgMCBwYXJ0aXRpb24gMQorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvY2FybWVsLzBwMzEgIFNBVEEgZGlzayAwIHBhcnRpdGlvbiAzMQorCisJCSAzMiA9IC9kZXYvY2FybWVsLzEgICAgIFNBVEEgZGlzayAxIHdob2xlIGRpc2sKKwkJIDY0ID0gL2Rldi9jYXJtZWwvMiAgICAgU0FUQSBkaXNrIDIgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTIyNCA9IC9kZXYvY2FybWVsLzcgICAgIFNBVEEgZGlzayA3IHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDMxLgorCisxNjEgY2hhcglJckNPTU0gZGV2aWNlcyAoSXJEQSBzZXJpYWwvcGFyYWxsZWwgZW11bGF0aW9uKQorCQkgIDAgPSAvZGV2L2lyY29tbTAJRmlyc3QgSXJDT01NIGRldmljZQorCQkgIDEgPSAvZGV2L2lyY29tbTEJU2Vjb25kIElyQ09NTSBkZXZpY2UKKwkJICAgIC4uLgorCQkgMTYgPSAvZGV2L2lybHB0MAlGaXJzdCBJckxQVCBkZXZpY2UKKwkJIDE3ID0gL2Rldi9pcmxwdDEJU2Vjb25kIElyTFBUIGRldmljZQorCQkgICAgLi4uCisKKzE2MSBibG9jayAgICAgICBDYXJtZWwgOC1wb3J0IFNBVEEgRGlza3Mgb24gU2Vjb25kIENvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jYXJtZWwvOCAgICAgU0FUQSBkaXNrIDggd2hvbGUgZGlzaworCQkgIDEgPSAvZGV2L2Nhcm1lbC84cDEgICBTQVRBIGRpc2sgOCBwYXJ0aXRpb24gMQorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvY2FybWVsLzhwMzEgIFNBVEEgZGlzayA4IHBhcnRpdGlvbiAzMQorCisJCSAzMiA9IC9kZXYvY2FybWVsLzkgICAgIFNBVEEgZGlzayA5IHdob2xlIGRpc2sKKwkJIDY0ID0gL2Rldi9jYXJtZWwvMTAgICAgU0FUQSBkaXNrIDEwIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyMjQgPSAvZGV2L2Nhcm1lbC8xNSAgICBTQVRBIGRpc2sgMTUgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMzEuIAorCisxNjIgY2hhcglSYXcgYmxvY2sgZGV2aWNlIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L3Jhd2N0bAlSYXcgSS9PIGNvbnRyb2wgZGV2aWNlCisJCSAgMSA9IC9kZXYvcmF3L3JhdzEJRmlyc3QgcmF3IEkvTyBkZXZpY2UKKwkJICAyID0gL2Rldi9yYXcvcmF3MglTZWNvbmQgcmF3IEkvTyBkZXZpY2UKKwkJICAgIC4uLgorCisxNjMgY2hhcglVTkFTU0lHTkVEICh3YXMgUmFkaW8gVGVjaCBCSU0tWFhYLVJTMjMyIHJhZGlvIG1vZGVtIC0gc2VlIDUxKQorCisxNjQgY2hhcglDaGFzZSBSZXNlYXJjaCBBVC9QQ0ktRmFzdCBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eUNIMAlBVC9QQ0ktRmFzdCBib2FyZCAwLCBwb3J0IDAKKwkJICAgIC4uLgorCQkgMTUgPSAvZGV2L3R0eUNIMTUJQVQvUENJLUZhc3QgYm9hcmQgMCwgcG9ydCAxNQorCQkgMTYgPSAvZGV2L3R0eUNIMTYJQVQvUENJLUZhc3QgYm9hcmQgMSwgcG9ydCAwCisJCSAgICAuLi4KKwkJIDMxID0gL2Rldi90dHlDSDMxCUFUL1BDSS1GYXN0IGJvYXJkIDEsIHBvcnQgMTUKKwkJIDMyID0gL2Rldi90dHlDSDMyCUFUL1BDSS1GYXN0IGJvYXJkIDIsIHBvcnQgMAorCQkgICAgLi4uCisJCSA0NyA9IC9kZXYvdHR5Q0g0NwlBVC9QQ0ktRmFzdCBib2FyZCAyLCBwb3J0IDE1CisJCSA0OCA9IC9kZXYvdHR5Q0g0OAlBVC9QQ0ktRmFzdCBib2FyZCAzLCBwb3J0IDAKKwkJICAgIC4uLgorCQkgNjMgPSAvZGV2L3R0eUNINjMJQVQvUENJLUZhc3QgYm9hcmQgMywgcG9ydCAxNQorCisxNjUgY2hhcglDaGFzZSBSZXNlYXJjaCBBVC9QQ0ktRmFzdCBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VjaDAJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUNIMAorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvY3VjaDYzCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlDSDYzCisKKzE2NiBjaGFyCUFDTSBVU0IgbW9kZW1zCisJCSAgMCA9IC9kZXYvdHR5QUNNMAlGaXJzdCBBQ00gbW9kZW0KKwkJICAxID0gL2Rldi90dHlBQ00xCVNlY29uZCBBQ00gbW9kZW0KKwkJICAgIC4uLgorCisxNjcgY2hhcglBQ00gVVNCIG1vZGVtcyAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VhY20wCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlBQ00wCisJCSAgMSA9IC9kZXYvY3VhY20xCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlBQ00xCisJCSAgICAuLi4KKworMTY4IGNoYXIJRXJhY29tIENTQTcwMDAgUENJIGVuY3J5cHRpb24gYWRhcHRvcgorCQkgIDAgPSAvZGV2L2Vjc2EwCUZpcnN0IENTQTcwMDAKKwkJICAxID0gL2Rldi9lY3NhMQlTZWNvbmQgQ1NBNzAwMAorCQkgICAgLi4uCisKKzE2OSBjaGFyCUVyYWNvbSBDU0E4MDAwIFBDSSBlbmNyeXB0aW9uIGFkYXB0b3IKKwkJICAwID0gL2Rldi9lY3NhOC0wCUZpcnN0IENTQTgwMDAKKwkJICAxID0gL2Rldi9lY3NhOC0xCVNlY29uZCBDU0E4MDAwCisJCSAgICAuLi4KKworMTcwIGNoYXIJQU1JIE1lZ2FSQUMgcmVtb3RlIGFjY2VzcyBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvbWVnYXJhYzAJRmlyc3QgTWVnYVJBQyBjYXJkCisJCSAgMSA9IC9kZXYvbWVnYXJhYzEJU2Vjb25kIE1lZ2FSQUMgY2FyZAorCQkgICAgLi4uCisKKzE3MSBjaGFyCVJlc2VydmVkIGZvciBJRUVFIDEzOTQgKEZpcmV3aXJlKQorCisKKzE3MiBjaGFyCU1veGEgSW50ZWxsaW8gc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlNWDAJRmlyc3QgTW94YSBwb3J0CisJCSAgMSA9IC9kZXYvdHR5TVgxCVNlY29uZCBNb3hhIHBvcnQKKwkJICAgIC4uLgorCQkxMjcgPSAvZGV2L3R0eU1YMTI3CTEyOHRoIE1veGEgcG9ydAorCQkxMjggPSAvZGV2L21veGFjdGwJTW94YSBjb250cm9sIHBvcnQKKworMTczIGNoYXIJTW94YSBJbnRlbGxpbyBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VteDAJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eU1YMAorCQkgIDEgPSAvZGV2L2N1bXgxCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlNWDEKKwkJICAgIC4uLgorCQkxMjcgPSAvZGV2L2N1bXgxMjcJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eU1YMTI3CisKKzE3NCBjaGFyCVNtYXJ0SU8gc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlTSTAJRmlyc3QgU21hcnRJTyBwb3J0CisJCSAgMSA9IC9kZXYvdHR5U0kxCVNlY29uZCBTbWFydElPIHBvcnQKKwkJICAgIC4uLgorCisxNzUgY2hhcglTbWFydElPIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdXNpMAlDYWxsb3V0IGRldmljZSBmb3IgdHR5U0kwCisJCSAgMSA9IC9kZXYvY3VzaTEJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNJMQorCQkgICAgLi4uCisKKzE3NiBjaGFyCW5DaXBoZXIgbkZhc3QgUENJIGNyeXB0byBhY2NlbGVyYXRvcgorCQkgIDAgPSAvZGV2L25mYXN0cGNpMAlGaXJzdCBuRmFzdCBQQ0kgZGV2aWNlCisJCSAgMSA9IC9kZXYvbmZhc3RwY2kxCUZpcnN0IG5GYXN0IFBDSSBkZXZpY2UKKwkJICAgIC4uLgorCisxNzcgY2hhcglUSSBQQ0lMeW54IG1lbW9yeSBzcGFjZXMKKwkJICAwID0gL2Rldi9wY2lseW54L2F1eDAJIEFVWCBzcGFjZSBvZiBmaXJzdCBQQ0lMeW54IGNhcmQKKwkJICAgIC4uLgorCQkgMTUgPSAvZGV2L3BjaWx5bngvYXV4MTUgQVVYIHNwYWNlIG9mIDE2dGggUENJTHlueCBjYXJkCisJCSAxNiA9IC9kZXYvcGNpbHlueC9yb20wCSBST00gc3BhY2Ugb2YgZmlyc3QgUENJTHlueCBjYXJkCisJCSAgICAuLi4KKwkJIDMxID0gL2Rldi9wY2lseW54L3JvbTE1IFJPTSBzcGFjZSBvZiAxNnRoIFBDSUx5bnggY2FyZAorCQkgMzIgPSAvZGV2L3BjaWx5bngvcmFtMAkgUkFNIHNwYWNlIG9mIGZpcnN0IFBDSUx5bnggY2FyZAorCQkgICAgLi4uCisJCSA0NyA9IC9kZXYvcGNpbHlueC9yYW0xNSBSQU0gc3BhY2Ugb2YgMTZ0aCBQQ0lMeW54IGNhcmQKKworMTc4IGNoYXIJR2lnYW5ldCBjTEFOMXh4eCB2aXJ0dWFsIGludGVyZmFjZSBhZGFwdGVyCisJCSAgMCA9IC9kZXYvY2xhbnZpMAlGaXJzdCBjTEFOIGFkYXB0ZXIKKwkJICAxID0gL2Rldi9jbGFudmkxCVNlY29uZCBjTEFOIGFkYXB0ZXIKKwkJICAgIC4uLgorCisxNzkgY2hhcglDQ3ViZSBEVlhDaGlwLWJhc2VkIFBDSSBwcm9kdWN0cworCQkgIDAgPSAvZGV2L2R2eGlycTAJRmlyc3QgRFZYIGRldmljZQorCQkgIDEgPSAvZGV2L2R2eGlycTEJU2Vjb25kIERWWCBkZXZpY2UKKwkJICAgIC4uLgorCisxODAgY2hhcglVU0IgZGV2aWNlcworCQkgIDAgPSAvZGV2L3VzYi9scDAJRmlyc3QgVVNCIHByaW50ZXIKKwkJICAgIC4uLgorCQkgMTUgPSAvZGV2L3VzYi9scDE1CTE2dGggVVNCIHByaW50ZXIKKwkJIDE2ID0gL2Rldi91c2IvbW91c2UwCUZpcnN0IFVTQiBtb3VzZQorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvdXNiL21vdXNlMTUJMTZ0aCBVU0IgbW91c2UKKwkJIDMyID0gL2Rldi91c2IvZXowCUZpcnN0IFVTQiBmaXJtd2FyZSBsb2FkZXIKKwkJICAgIC4uLgorCQkgNDcgPSAvZGV2L3VzYi9lejE1CTE2dGggVVNCIGZpcm13YXJlIGxvYWRlcgorCQkgNDggPSAvZGV2L3VzYi9zY2FubmVyMAlGaXJzdCBVU0Igc2Nhbm5lcgorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvdXNiL3NjYW5uZXIxNSAxNnRoIFVTQiBzY2FubmVyCisJCSA2NCA9IC9kZXYvdXNiL3JpbzUwMAlEaWFtb25kIFJpbyA1MDAKKwkJIDY1ID0gL2Rldi91c2IvdXNibGNkCVVTQkxDRCBJbnRlcmZhY2UgKGluZm9AdXNibGNkLmRlKQorCQkgNjYgPSAvZGV2L3VzYi9jcGFkMAlTeW5hcHRpY3MgY1BhZCAobW91c2UvTENEKQorCisxODAgYmxvY2sJVVNCIGJsb2NrIGRldmljZXMKKwkJMCA9IC9kZXYvdWJhCQlGaXJzdCBVU0IgYmxvY2sgZGV2aWNlCisJCTggPSAvZGV2L3ViYgkJU2Vjb25kIFVTQiBibG9jayBkZXZpY2UKKwkJMTYgPSAvZGV2L3ViYwkJVGhyaWQgVVNCIGJsb2NrIGRldmljZQorCQkuLi4KKworMTgxIGNoYXIJQ29ucmFkIEVsZWN0cm9uaWMgcGFyYWxsZWwgcG9ydCByYWRpbyBjbG9ja3MKKwkJICAwID0gL2Rldi9wY2ZjbG9jazAJRmlyc3QgQ29ucmFkIHJhZGlvIGNsb2NrCisJCSAgMSA9IC9kZXYvcGNmY2xvY2sxCVNlY29uZCBDb25yYWQgcmFkaW8gY2xvY2sKKwkJICAgIC4uLgorCisxODIgY2hhcglQaWN0dXJlIEVsZW1lbnRzIFRIUjIgYmluYXJpemVyCisJCSAgMCA9IC9kZXYvcGV0aHIwCUZpcnN0IFRIUjIgYm9hcmQKKwkJICAxID0gL2Rldi9wZXRocjEJU2Vjb25kIFRIUjIgYm9hcmQKKwkJICAgIC4uLgorCisxODMgY2hhcglTU1QgNTEzNi1ETiBEZXZpY2VOZXQgaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvc3M1MTM2ZG4wCUZpcnN0IERldmljZU5ldCBpbnRlcmZhY2UKKwkJICAxID0gL2Rldi9zczUxMzZkbjEJU2Vjb25kIERldmljZU5ldCBpbnRlcmZhY2UKKwkJICAgIC4uLgorCisJCVRoaXMgZGV2aWNlIHVzZWQgdG8gYmUgYXNzaWduZWQgdG8gbWFqb3IgbnVtYmVyIDE0NC4KKwkJSXQgaGFkIHRvIGJlIG1vdmVkIGR1ZSB0byBhbiB1bmZvcnR1bmF0ZSBjb25mbGljdC4KKworMTg0IGNoYXIJUGljdHVyZSBFbGVtZW50cycgdmlkZW8gc2ltdWxhdG9yL3NlbmRlcgorCQkgIDAgPSAvZGV2L3BldnNzMAlGaXJzdCBzZW5kZXIgYm9hcmQKKwkJICAxID0gL2Rldi9wZXZzczEJU2Vjb25kIHNlbmRlciBib2FyZAorCQkgICAgLi4uCisKKzE4NSBjaGFyCUludGVyTWV6em8gaGlnaCBhdmFpbGFiaWxpdHkgZmlsZSBzeXN0ZW0KKwkJICAwID0gL2Rldi9pbnRlcm1lenpvMAlGaXJzdCBjYWNoZSBtYW5hZ2VyCisJCSAgMSA9IC9kZXYvaW50ZXJtZXp6bzEJU2Vjb25kIGNhY2hlIG1hbmFnZXIKKwkJICAgIC4uLgorCisJCVNlZSBodHRwOi8vd3d3LmludGVyLW1lenpvLm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKzE4NiBjaGFyCU9iamVjdC1iYXNlZCBzdG9yYWdlIGNvbnRyb2wgZGV2aWNlCisJCSAgMCA9IC9kZXYvb2JkMAkJRmlyc3Qgb2JkIGNvbnRyb2wgZGV2aWNlCisJCSAgMSA9IC9kZXYvb2JkMQkJU2Vjb25kIG9iZCBjb250cm9sIGRldmljZQorCQkgICAgLi4uCisKKwkJU2VlIGZ0cDovL2Z0cC5sdXN0cmUub3JnL3B1Yi9vYmQgZm9yIGNvZGUgYW5kIGluZm9ybWF0aW9uLgorCisxODcgY2hhcglERVNrZXkgaGFyZHdhcmUgZW5jcnlwdGlvbiBkZXZpY2UKKwkJICAwID0gL2Rldi9kZXNrZXkwCUZpcnN0IERFUyBrZXkKKwkJICAxID0gL2Rldi9kZXNrZXkxCVNlY29uZCBERVMga2V5CisJCSAgICAuLi4KKworMTg4IGNoYXIJVVNCIHNlcmlhbCBjb252ZXJ0ZXJzCisJCSAgMCA9IC9kZXYvdHR5VVNCMAlGaXJzdCBVU0Igc2VyaWFsIGNvbnZlcnRlcgorCQkgIDEgPSAvZGV2L3R0eVVTQjEJU2Vjb25kIFVTQiBzZXJpYWwgY29udmVydGVyCisJCSAgICAuLi4KKworMTg5IGNoYXIJVVNCIHNlcmlhbCBjb252ZXJ0ZXJzIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdXVzYjAJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVVTQjAKKwkJICAxID0gL2Rldi9jdXVzYjEJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVVTQjEKKwkJICAgIC4uLgorCisxOTAgY2hhcglLYW5zYXMgQ2l0eSB0cmFja2VyL3R1bmVyIGNhcmQKKwkJICAwID0gL2Rldi9rY3R0MAlGaXJzdCBLQ1QvVCBjYXJkCisJCSAgMSA9IC9kZXYva2N0dDEJU2Vjb25kIEtDVC9UIGNhcmQKKwkJICAgIC4uLgorCisxOTEgY2hhcglSZXNlcnZlZCBmb3IgUENNQ0lBCisKKzE5MiBjaGFyCUtlcm5lbCBwcm9maWxpbmcgaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvcHJvZmlsZQlQcm9maWxpbmcgY29udHJvbCBkZXZpY2UKKwkJICAxID0gL2Rldi9wcm9maWxlMAlQcm9maWxpbmcgZGV2aWNlIGZvciBDUFUgMAorCQkgIDIgPSAvZGV2L3Byb2ZpbGUxCVByb2ZpbGluZyBkZXZpY2UgZm9yIENQVSAxCisJCSAgICAuLi4KKworMTkzIGNoYXIJS2VybmVsIGV2ZW50LXRyYWNpbmcgaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvdHJhY2UJVHJhY2luZyBjb250cm9sIGRldmljZQorCQkgIDEgPSAvZGV2L3RyYWNlMAlUcmFjaW5nIGRldmljZSBmb3IgQ1BVIDAKKwkJICAyID0gL2Rldi90cmFjZTEJVHJhY2luZyBkZXZpY2UgZm9yIENQVSAxCisJCSAgICAuLi4KKworMTk0IGNoYXIJbGluVmlkZW9TdHJlYW1zIChMSU5WUykKKwkJICAwID0gL2Rldi9tdmlkZW8vc3RhdHVzMAlWaWRlbyBjb21wcmVzc2lvbiBzdGF0dXMKKwkJICAxID0gL2Rldi9tdmlkZW8vc3RyZWFtMAlWaWRlbyBzdHJlYW0KKwkJICAyID0gL2Rldi9tdmlkZW8vZnJhbWUwCVNpbmdsZSBjb21wcmVzc2VkIGZyYW1lCisJCSAgMyA9IC9kZXYvbXZpZGVvL3Jhd2ZyYW1lMAlSYXcgdW5jb21wcmVzc2VkIGZyYW1lCisJCSAgNCA9IC9kZXYvbXZpZGVvL2NvZGVjMAlEaXJlY3QgY29kZWMgYWNjZXNzCisJCSAgNSA9IC9kZXYvbXZpZGVvL3ZpZGVvNGxpbnV4MAlWaWRlbzRMaW51eCBjb21wYXRpYmlsaXR5CisKKwkJIDE2ID0gL2Rldi9tdmlkZW8vc3RhdHVzMQlTZWNvbmQgZGV2aWNlCisJCSAgICAuLi4KKwkJIDMyID0gL2Rldi9tdmlkZW8vc3RhdHVzMglUaGlyZCBkZXZpY2UKKwkJICAgIC4uLgorCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvbXZpZGVvL3N0YXR1czE1CTE2dGggZGV2aWNlIAorCQkgICAgLi4uCisKKzE5NSBjaGFyCU52aWRpYSBncmFwaGljcyBkZXZpY2VzCisJCSAgMCA9IC9kZXYvbnZpZGlhMAkJRmlyc3QgTnZpZGlhIGNhcmQKKwkJICAxID0gL2Rldi9udmlkaWExCQlTZWNvbmQgTnZpZGlhIGNhcmQKKwkJICAgIC4uLgorCQkyNTUgPSAvZGV2L252aWRpYWN0bAkJTnZpZGlhIGNhcmQgY29udHJvbCBkZXZpY2UKKworMTk2IGNoYXIJVG9ybWVudGEgVDEgY2FyZAorCQkgIDAgPSAvZGV2L3Rvci8wCQlNYXN0ZXIgY29udHJvbCBjaGFubmVsIGZvciBhbGwgY2FyZHMKKwkJICAxID0gL2Rldi90b3IvMQkJRmlyc3QgRFMwCisJCSAgMiA9IC9kZXYvdG9yLzIJCVNlY29uZCBEUzAKKwkJICAgIC4uLgorCQkgNDggPSAvZGV2L3Rvci80OAkJNDh0aCBEUzAKKwkJIDQ5ID0gL2Rldi90b3IvNDkJCUZpcnN0IHBzZXVkby1jaGFubmVsCisJCSA1MCA9IC9kZXYvdG9yLzUwCQlTZWNvbmQgcHNldWRvLWNoYW5uZWwKKwkJICAgIC4uLgorCisxOTcgY2hhcglPcGVuVE5GIHRyYWNpbmcgZmFjaWxpdHkKKwkJICAwID0gL2Rldi90bmYvdDAJCVRyYWNlIDAgZGF0YSBleHRyYWN0aW9uCisJCSAgMSA9IC9kZXYvdG5mL3QxCQlUcmFjZSAxIGRhdGEgZXh0cmFjdGlvbgorCQkgICAgLi4uCisJCTEyOCA9IC9kZXYvdG5mL3N0YXR1cwkJVHJhY2luZyBmYWNpbGl0eSBzdGF0dXMKKwkJMTMwID0gL2Rldi90bmYvdHJhY2UJCVRyYWNpbmcgZGV2aWNlCisKKzE5OCBjaGFyCVRvdGFsIEltcGFjdCBUUE1QMiBxdWFkIGNvcHJvY2Vzc29yIFBDSSBjYXJkCisJCSAgMCA9IC9kZXYvdHBtcDIvMAkJRmlyc3QgY2FyZAorCQkgIDEgPSAvZGV2L3RwbXAyLzEJCVNlY29uZCBjYXJkCisJCSAgICAuLi4KKworMTk5IGNoYXIJVmVyaXRhcyB2b2x1bWUgbWFuYWdlciAoVnhWTSkgdm9sdW1lcworCQkgIDAgPSAvZGV2L3Z4L3Jkc2svKi8qCQlGaXJzdCB2b2x1bWUKKwkJICAxID0gL2Rldi92eC9yZHNrLyovKgkJU2Vjb25kIHZvbHVtZQorCQkgICAgLi4uCisKKzE5OSBibG9jawlWZXJpdGFzIHZvbHVtZSBtYW5hZ2VyIChWeFZNKSB2b2x1bWVzCisJCSAgMCA9IC9kZXYvdngvZHNrLyovKgkJRmlyc3Qgdm9sdW1lCisJCSAgMSA9IC9kZXYvdngvZHNrLyovKgkJU2Vjb25kIHZvbHVtZQorCQkgICAgLi4uCisKKwkJVGhlIG5hbWVzcGFjZSBpbiB0aGVzZSBkaXJlY3RvcmllcyBpcyBtYWludGFpbmVkIGJ5CisJCXRoZSB1c2VyIHNwYWNlIFZ4Vk0gc29mdHdhcmUuCisKKzIwMCBjaGFyCVZlcml0YXMgVnhWTSBjb25maWd1cmF0aW9uIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvdngvY29uZmlnCQlDb25maWd1cmF0aW9uIGFjY2VzcyBub2RlCisgICAgICAgICAgICAgICAgICAxID0gL2Rldi92eC90cmFjZQkJVm9sdW1lIGkvbyB0cmFjZSBhY2Nlc3Mgbm9kZQorICAgICAgICAgICAgICAgICAgMiA9IC9kZXYvdngvaW9kCQlWb2x1bWUgaS9vIGRhZW1vbiBhY2Nlc3Mgbm9kZQorICAgICAgICAgICAgICAgICAgMyA9IC9kZXYvdngvaW5mbwkJVm9sdW1lIGluZm9ybWF0aW9uIGFjY2VzcyBub2RlCisgICAgICAgICAgICAgICAgICA0ID0gL2Rldi92eC90YXNrCQlWb2x1bWUgdGFza3MgYWNjZXNzIG5vZGUKKyAgICAgICAgICAgICAgICAgIDUgPSAvZGV2L3Z4L3Rhc2ttb24JCVZvbHVtZSB0YXNrcyBtb25pdG9yIGRhZW1vbgorCisyMDEgY2hhcglWZXJpdGFzIFZ4Vk0gZHluYW1pYyBtdWx0aXBhdGhpbmcgZHJpdmVyCisJCSAgMCA9IC9kZXYvdngvcmRtcC8qCQlGaXJzdCBtdWx0aXBhdGggZGV2aWNlCisJCSAgMSA9IC9kZXYvdngvcmRtcC8qCQlTZWNvbmQgbXVsdGlwYXRoIGRldmljZQorCQkgICAgLi4uCisyMDEgYmxvY2sJVmVyaXRhcyBWeFZNIGR5bmFtaWMgbXVsdGlwYXRoaW5nIGRyaXZlcgorCQkgIDAgPSAvZGV2L3Z4L2RtcC8qCQlGaXJzdCBtdWx0aXBhdGggZGV2aWNlCisJCSAgMSA9IC9kZXYvdngvZG1wLyoJCVNlY29uZCBtdWx0aXBhdGggZGV2aWNlCisJCSAgICAuLi4KKworCQlUaGUgbmFtZXNwYWNlIGluIHRoZXNlIGRpcmVjdG9yaWVzIGlzIG1haW50YWluZWQgYnkKKwkJdGhlIHVzZXIgc3BhY2UgVnhWTSBzb2Z0d2FyZS4KKworMjAyIGNoYXIJQ1BVIG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVycworCQkgIDAgPSAvZGV2L2NwdS8wL21zcgkJTVNScyBvbiBDUFUgMAorCQkgIDEgPSAvZGV2L2NwdS8xL21zcgkJTVNScyBvbiBDUFUgMQorCQkgICAgLi4uCisKKzIwMyBjaGFyCUNQVSBDUFVJRCBpbmZvcm1hdGlvbgorCQkgIDAgPSAvZGV2L2NwdS8wL2NwdWlkCQlDUFVJRCBvbiBDUFUgMAorCQkgIDEgPSAvZGV2L2NwdS8xL2NwdWlkCQlDUFVJRCBvbiBDUFUgMQorCQkgICAgLi4uCisKKzIwNCBjaGFyCUxvdy1kZW5zaXR5IHNlcmlhbCBwb3J0cworCQkgIDAgPSAvZGV2L3R0eUxVMAkJTGlua1VwIFN5c3RlbXMgTDcyeHggVUFSVCAtIHBvcnQgMAorCQkgIDEgPSAvZGV2L3R0eUxVMQkJTGlua1VwIFN5c3RlbXMgTDcyeHggVUFSVCAtIHBvcnQgMQorCQkgIDIgPSAvZGV2L3R0eUxVMgkJTGlua1VwIFN5c3RlbXMgTDcyeHggVUFSVCAtIHBvcnQgMgorCQkgIDMgPSAvZGV2L3R0eUxVMwkJTGlua1VwIFN5c3RlbXMgTDcyeHggVUFSVCAtIHBvcnQgMworCQkgIDQgPSAvZGV2L3R0eUZCMAkJSW50ZWwgRm9vdGJyaWRnZSAoQVJNKQorCQkgIDUgPSAvZGV2L3R0eVNBMAkJU3Ryb25nQVJNIGJ1aWx0aW4gc2VyaWFsIHBvcnQgMAorCQkgIDYgPSAvZGV2L3R0eVNBMQkJU3Ryb25nQVJNIGJ1aWx0aW4gc2VyaWFsIHBvcnQgMQorCQkgIDcgPSAvZGV2L3R0eVNBMgkJU3Ryb25nQVJNIGJ1aWx0aW4gc2VyaWFsIHBvcnQgMgorCQkgIDggPSAvZGV2L3R0eVNDMAkJU0NJIHNlcmlhbCBwb3J0IChTdXBlckgpIC0gcG9ydCAwCisJCSAgOSA9IC9kZXYvdHR5U0MxCQlTQ0kgc2VyaWFsIHBvcnQgKFN1cGVySCkgLSBwb3J0IDEKKwkJIDEwID0gL2Rldi90dHlTQzIJCVNDSSBzZXJpYWwgcG9ydCAoU3VwZXJIKSAtIHBvcnQgMgorCQkgMTEgPSAvZGV2L3R0eVNDMwkJU0NJIHNlcmlhbCBwb3J0IChTdXBlckgpIC0gcG9ydCAzCisJCSAxMiA9IC9kZXYvdHR5RlcwCQlGaXJtd2FyZSBjb25zb2xlIC0gcG9ydCAwCisJCSAxMyA9IC9kZXYvdHR5RlcxCQlGaXJtd2FyZSBjb25zb2xlIC0gcG9ydCAxCisJCSAxNCA9IC9kZXYvdHR5RlcyCQlGaXJtd2FyZSBjb25zb2xlIC0gcG9ydCAyCisJCSAxNSA9IC9kZXYvdHR5RlczCQlGaXJtd2FyZSBjb25zb2xlIC0gcG9ydCAzCisJCSAxNiA9IC9kZXYvdHR5QU0wCQlBUk0gIkFNQkEiIHNlcmlhbCBwb3J0IDAKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L3R0eUFNMTUJCUFSTSAiQU1CQSIgc2VyaWFsIHBvcnQgMTUKKwkJIDMyID0gL2Rldi90dHlEQjAJCURhdGFCb29zdGVyIHNlcmlhbCBwb3J0IDAKKwkJICAgIC4uLgorCQkgMzkgPSAvZGV2L3R0eURCNwkJRGF0YUJvb3N0ZXIgc2VyaWFsIHBvcnQgNworCQkgNDAgPSAvZGV2L3R0eVNHMAkJU0dJIEFsdGl4IGNvbnNvbGUgcG9ydAorCQkgNDEgPSAvZGV2L3R0eVNNWDAJCU1vdG9yb2xhIGkuTVggLSBwb3J0IDAKKwkJIDQyID0gL2Rldi90dHlTTVgxCQlNb3Rvcm9sYSBpLk1YIC0gcG9ydCAxCisJCSA0MyA9IC9kZXYvdHR5U01YMgkJTW90b3JvbGEgaS5NWCAtIHBvcnQgMgorCQkgNDQgPSAvZGV2L3R0eU1NMAkJTWFydmVsbCBNUFNDIC0gcG9ydCAwCisJCSA0NSA9IC9kZXYvdHR5TU0xCQlNYXJ2ZWxsIE1QU0MgLSBwb3J0IDEKKwkJIDQ2ID0gL2Rldi90dHlDUE0wCQlQUEMgQ1BNIChTQ0Mgb3IgU01DKSAtIHBvcnQgMAorCQkgICAgLi4uCisJCSA0NyA9IC9kZXYvdHR5Q1BNNQkJUFBDIENQTSAoU0NDIG9yIFNNQykgLSBwb3J0IDUKKwkJIDUwID0gL2Rldi90dHlJT0M0MAkJQWx0aXggc2VyaWFsIGNhcmQKKwkJICAgIC4uLgorCQkgODEgPSAvZGV2L3R0eUlPQzQzMQkJQWx0aXggc2VyaWFsIGNhcmQKKwkJIDgyID0gL2Rldi90dHlWUjAgICAgICAgICAgICAgICBORUMgVlI0MTAwIHNlcmllcyBTSVUKKwkJIDgzID0gL2Rldi90dHlWUjEgICAgICAgICAgICAgICBORUMgVlI0MTAwIHNlcmllcyBEU0lVCisKKzIwNSBjaGFyCUxvdy1kZW5zaXR5IHNlcmlhbCBwb3J0cyAoYWx0ZXJuYXRlIGRldmljZSkKKwkJICAwID0gL2Rldi9jdWx1MAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUxVMAorCQkgIDEgPSAvZGV2L2N1bHUxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5TFUxCisJCSAgMiA9IC9kZXYvY3VsdTIJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlMVTIKKwkJICAzID0gL2Rldi9jdWx1MwkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUxVMworCQkgIDQgPSAvZGV2L2N1ZmIwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RkIwCisJCSAgNSA9IC9kZXYvY3VzYTAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTQTAKKwkJICA2ID0gL2Rldi9jdXNhMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNBMQorCQkgIDcgPSAvZGV2L2N1c2EyCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U0EyCisJCSAgOCA9IC9kZXYvY3VzYzAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTQzAKKwkJICA5ID0gL2Rldi9jdXNjMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNDMQorCQkgMTAgPSAvZGV2L2N1c2MyCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U0MyCisJCSAxMSA9IC9kZXYvY3VzYzMJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTQzMKKwkJIDEyID0gL2Rldi9jdWZ3MAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUZXMAorCQkgMTMgPSAvZGV2L2N1ZncxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RlcxCisJCSAxNCA9IC9kZXYvY3VmdzIJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGVzIKKwkJIDE1ID0gL2Rldi9jdWZ3MwkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUZXMworCQkgMTYgPSAvZGV2L2N1YW0wCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5QU0wCisJCSAgICAuLi4KKwkJIDMxID0gL2Rldi9jdWFtMTUJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlBTTE1CisJCSAzMiA9IC9kZXYvY3VkYjAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlEQjAKKwkJICAgIC4uLgorCQkgMzkgPSAvZGV2L2N1ZGI3CQlDYWxsb3V0IGRldmljZSBmb3IgdHR5REI3CisJCSA0MCA9IC9kZXYvY3VzZzAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTRzAKKwkJIDQxID0gL2Rldi90dHljdXNteDAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTTVgwCisJCSA0MiA9IC9kZXYvdHR5Y3VzbXgxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U01YMQorCQkgNDMgPSAvZGV2L3R0eWN1c214MgkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNNWDIKKwkJIDQ2ID0gL2Rldi9jdWNwbTAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlDUE0wCisJCSAgICAuLi4KKwkJIDQ5ID0gL2Rldi9jdWNwbTUJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlDUE01CisJCSA1MCA9IC9kZXYvY3Vpb2M0MAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUlPQzQwCisJCSAgICAuLi4KKwkJIDgxID0gL2Rldi9jdWlvYzQzMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUlPQzQzMQorCQkgODIgPSAvZGV2L2N1dnIwICAgICAgICAgICAgICAgIENhbGxvdXQgZGV2aWNlIGZvciB0dHlWUjAKKwkJIDgzID0gL2Rldi9jdXZyMSAgICAgICAgICAgICAgICBDYWxsb3V0IGRldmljZSBmb3IgdHR5VlIxCisKKworMjA2IGNoYXIJT25TdHJlYW0gU0MteDAgdGFwZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvb3NzdDAJCUZpcnN0IE9uU3RyZWFtIFNDU0kgdGFwZSwgbW9kZSAwCisJCSAgMSA9IC9kZXYvb3NzdDEJCVNlY29uZCBPblN0cmVhbSBTQ1NJIHRhcGUsIG1vZGUgMAorCQkgICAgLi4uCisJCSAzMiA9IC9kZXYvb3NzdDBsCQlGaXJzdCBPblN0cmVhbSBTQ1NJIHRhcGUsIG1vZGUgMQorCQkgMzMgPSAvZGV2L29zc3QxbAkJU2Vjb25kIE9uU3RyZWFtIFNDU0kgdGFwZSwgbW9kZSAxCisJCSAgICAuLi4KKwkJIDY0ID0gL2Rldi9vc3N0MG0JCUZpcnN0IE9uU3RyZWFtIFNDU0kgdGFwZSwgbW9kZSAyCisJCSA2NSA9IC9kZXYvb3NzdDFtCQlTZWNvbmQgT25TdHJlYW0gU0NTSSB0YXBlLCBtb2RlIDIKKwkJICAgIC4uLgorCQkgOTYgPSAvZGV2L29zc3QwYQkJRmlyc3QgT25TdHJlYW0gU0NTSSB0YXBlLCBtb2RlIDMKKwkJIDk3ID0gL2Rldi9vc3N0MWEJCVNlY29uZCBPblN0cmVhbSBTQ1NJIHRhcGUsIG1vZGUgMworCQkgICAgLi4uCisJCTEyOCA9IC9kZXYvbm9zc3QwCQlObyByZXdpbmQgdmVyc2lvbiBvZiAvZGV2L29zc3QwCisJCTEyOSA9IC9kZXYvbm9zc3QxCQlObyByZXdpbmQgdmVyc2lvbiBvZiAvZGV2L29zc3QxCisJCSAgICAuLi4KKwkJMTYwID0gL2Rldi9ub3NzdDBsCQlObyByZXdpbmQgdmVyc2lvbiBvZiAvZGV2L29zc3QwbAorCQkxNjEgPSAvZGV2L25vc3N0MWwJCU5vIHJld2luZCB2ZXJzaW9uIG9mIC9kZXYvb3NzdDFsCisJCSAgICAuLi4KKwkJMTkyID0gL2Rldi9ub3NzdDBtCQlObyByZXdpbmQgdmVyc2lvbiBvZiAvZGV2L29zc3QwbQorCQkxOTMgPSAvZGV2L25vc3N0MW0JCU5vIHJld2luZCB2ZXJzaW9uIG9mIC9kZXYvb3NzdDFtCisJCSAgICAuLi4KKwkJMjI0ID0gL2Rldi9ub3NzdDBhCQlObyByZXdpbmQgdmVyc2lvbiBvZiAvZGV2L29zc3QwYQorCQkyMjUgPSAvZGV2L25vc3N0MWEJCU5vIHJld2luZCB2ZXJzaW9uIG9mIC9kZXYvb3NzdDFhCisJCSAgICAuLi4KKworCQlUaGUgT25TdHJlYW0gU0MteDAgU0NTSSB0YXBlcyBkbyBub3Qgc3VwcG9ydCB0aGUKKwkJc3RhbmRhcmQgU0NTSSBTQVNEIGNvbW1hbmQgc2V0IGFuZCB0aGVyZWZvcmUgbmVlZAorCQl0aGVpciBvd24gZHJpdmVyICJvc3N0Ii4gTm90ZSB0aGF0IHRoZSBJREUsIFVTQiAoYW5kCisJCW1heWJlIFBhclBvcnQpIHZlcnNpb25zIG1heSBiZSBkcml2ZW4gdmlhIGlkZS1zY3NpIG9yCisJCXVzYi1zdG9yYWdlIFNDU0kgZW11bGF0aW9uIGFuZCB0aGlzIG9zc3QgZGV2aWNlIGFuZAorCQlkcml2ZXIgYXMgd2VsbC4gIFRoZSBBRFIteDAgZHJpdmVzIGFyZSBRSUMtMTU3CisJCWNvbXBsaWFudCBhbmQgZG9uJ3QgbmVlZCBvc3N0LgorCisyMDcgY2hhcglDb21wYXEgUHJvTGlhbnQgaGVhbHRoIGZlYXR1cmUgaW5kaWNhdGUKKwkJICAwID0gL2Rldi9jcHFoZWFsdGgvY3BxdwlSZWRpcmVjdG9yIGludGVyZmFjZQorCQkgIDEgPSAvZGV2L2NwcWhlYWx0aC9jcm9tCUVJU0EgQ1JPTQorCQkgIDIgPSAvZGV2L2NwcWhlYWx0aC9jZHQJRGF0YSBUYWJsZQorCQkgIDMgPSAvZGV2L2NwcWhlYWx0aC9jZXZ0CUV2ZW50IExvZworCQkgIDQgPSAvZGV2L2NwcWhlYWx0aC9jYXNyCUF1dG9tYXRpYyBTZXJ2ZXIgUmVjb3ZlcnkKKwkJICA1ID0gL2Rldi9jcHFoZWFsdGgvY2VjYwlFQ0MgTWVtb3J5CisJCSAgNiA9IC9kZXYvY3BxaGVhbHRoL2NtY2EJTWFjaGluZSBDaGVjayBBcmNoaXRlY3R1cmUKKwkJICA3ID0gL2Rldi9jcHFoZWFsdGgvY2NzbQlEZXByZWNhdGVkIENEVAorCQkgIDggPSAvZGV2L2NwcWhlYWx0aC9jbm1pCU5NSSBIYW5kbGluZworCQkgIDkgPSAvZGV2L2NwcWhlYWx0aC9jc3MJU2lkZXNob3cgTWFuYWdlbWVudAorCQkgMTAgPSAvZGV2L2NwcWhlYWx0aC9jcmFtCUNNT1MgaW50ZXJmYWNlCisJCSAxMSA9IC9kZXYvY3BxaGVhbHRoL2NwY2kJUENJIElSUSBpbnRlcmZhY2UKKworMjA4IGNoYXIJVXNlciBzcGFjZSBzZXJpYWwgcG9ydHMKKwkJICAwID0gL2Rldi90dHlVMAkJRmlyc3QgdXNlciBzcGFjZSBzZXJpYWwgcG9ydAorCQkgIDEgPSAvZGV2L3R0eVUxCQlTZWNvbmQgdXNlciBzcGFjZSBzZXJpYWwgcG9ydAorCQkgICAgLi4uCisKKzIwOSBjaGFyCVVzZXIgc3BhY2Ugc2VyaWFsIHBvcnRzIChhbHRlcm5hdGUgZGV2aWNlcykKKwkJICAwID0gL2Rldi9jdXUwCQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVUwCisJCSAgMSA9IC9kZXYvY3V1MQkJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlVMQorCQkgICAgLi4uCisKKzIxMCBjaGFyCVNCRSwgSW5jLiBzeW5jL2FzeW5jIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvc2JlaS93eGNmZzAJCUNvbmZpZ3VyYXRpb24gZGV2aWNlIGZvciBib2FyZCAwCisJCSAgMSA9IC9kZXYvc2JlaS9kbGQwCQlEb3dubG9hZCBkZXZpY2UgZm9yIGJvYXJkIDAKKwkJICAyID0gL2Rldi9zYmVpL3dhbjAwCQlXQU4gZGV2aWNlLCBwb3J0IDAsIGJvYXJkIDAKKwkJICAzID0gL2Rldi9zYmVpL3dhbjAxCQlXQU4gZGV2aWNlLCBwb3J0IDEsIGJvYXJkIDAKKwkJICA0ID0gL2Rldi9zYmVpL3dhbjAyCQlXQU4gZGV2aWNlLCBwb3J0IDIsIGJvYXJkIDAKKwkJICA1ID0gL2Rldi9zYmVpL3dhbjAzCQlXQU4gZGV2aWNlLCBwb3J0IDMsIGJvYXJkIDAKKwkJICA2ID0gL2Rldi9zYmVpL3dhbmMwMAkJV0FOIGNsb25lIGRldmljZSwgcG9ydCAwLCBib2FyZCAwCisJCSAgNyA9IC9kZXYvc2JlaS93YW5jMDEJCVdBTiBjbG9uZSBkZXZpY2UsIHBvcnQgMSwgYm9hcmQgMAorCQkgIDggPSAvZGV2L3NiZWkvd2FuYzAyCQlXQU4gY2xvbmUgZGV2aWNlLCBwb3J0IDIsIGJvYXJkIDAKKwkJICA5ID0gL2Rldi9zYmVpL3dhbmMwMwkJV0FOIGNsb25lIGRldmljZSwgcG9ydCAzLCBib2FyZCAwCisJCSAxMCA9IC9kZXYvc2JlaS93eGNmZzEJCUNvbmZpZ3VyYXRpb24gZGV2aWNlIGZvciBib2FyZCAxCisJCSAxMSA9IC9kZXYvc2JlaS9kbGQxCQlEb3dubG9hZCBkZXZpY2UgZm9yIGJvYXJkIDEKKwkJIDEyID0gL2Rldi9zYmVpL3dhbjEwCQlXQU4gZGV2aWNlLCBwb3J0IDAsIGJvYXJkIDEKKwkJIDEzID0gL2Rldi9zYmVpL3dhbjExCQlXQU4gZGV2aWNlLCBwb3J0IDEsIGJvYXJkIDEKKwkJIDE0ID0gL2Rldi9zYmVpL3dhbjEyCQlXQU4gZGV2aWNlLCBwb3J0IDIsIGJvYXJkIDEKKwkJIDE1ID0gL2Rldi9zYmVpL3dhbjEzCQlXQU4gZGV2aWNlLCBwb3J0IDMsIGJvYXJkIDEKKwkJIDE2ID0gL2Rldi9zYmVpL3dhbmMxMAkJV0FOIGNsb25lIGRldmljZSwgcG9ydCAwLCBib2FyZCAxCisJCSAxNyA9IC9kZXYvc2JlaS93YW5jMTEJCVdBTiBjbG9uZSBkZXZpY2UsIHBvcnQgMSwgYm9hcmQgMQorCQkgMTggPSAvZGV2L3NiZWkvd2FuYzEyCQlXQU4gY2xvbmUgZGV2aWNlLCBwb3J0IDIsIGJvYXJkIDEKKwkJIDE5ID0gL2Rldi9zYmVpL3dhbmMxMwkJV0FOIGNsb25lIGRldmljZSwgcG9ydCAzLCBib2FyZCAxCisJCSAgICAuLi4KKworCQlZZXMsIGVhY2ggYm9hcmQgaXMgcmVhbGx5IHNwYWNlZCAxMCAoZGVjaW1hbCkgYXBhcnQuCisKKzIxMSBjaGFyCUFkZGludW0gQ1BDSTE1MDAgZGlnaXRhbCBJL08gY2FyZAorCQkgIDAgPSAvZGV2L2FkZGludW0vY3BjaTE1MDAvMAlGaXJzdCBDUENJMTUwMCBjYXJkCisJCSAgMSA9IC9kZXYvYWRkaW51bS9jcGNpMTUwMC8xCVNlY29uZCBDUENJMTUwMCBjYXJkCisJCSAgICAuLi4KKworMjEyIGNoYXIJTGludXhUVi5vcmcgRFZCIGRyaXZlciBzdWJzeXN0ZW0KKworCQkgIDAgPSAvZGV2L2R2Yi9hZGFwdGVyMC92aWRlbzAgICAgZmlyc3QgdmlkZW8gZGVjb2RlciBvZiBmaXJzdCBjYXJkCisJCSAgMSA9IC9kZXYvZHZiL2FkYXB0ZXIwL2F1ZGlvMCAgICBmaXJzdCBhdWRpbyBkZWNvZGVyIG9mIGZpcnN0IGNhcmQKKwkJICAyID0gL2Rldi9kdmIvYWRhcHRlcjAvc2VjMCAgICAgIChvYnNvbGV0ZS91bnVzZWQpCisJCSAgMyA9IC9kZXYvZHZiL2FkYXB0ZXIwL2Zyb250ZW5kMCBmaXJzdCBmcm9udGVuZCBkZXZpY2Ugb2YgZmlyc3QgY2FyZAorCQkgIDQgPSAvZGV2L2R2Yi9hZGFwdGVyMC9kZW11eDAgICAgZmlyc3QgZGVtdXggZGV2aWNlIG9mIGZpcnN0IGNhcmQKKwkJICA1ID0gL2Rldi9kdmIvYWRhcHRlcjAvZHZyMCAgICAgIGZpcnN0IGRpZ2l0YWwgdmlkZW8gcmVjb2RlciBkZXZpY2Ugb2YgZmlyc3QgY2FyZAorCQkgIDYgPSAvZGV2L2R2Yi9hZGFwdGVyMC9jYTAgICAgICAgZmlyc3QgY29tbW9uIGFjY2VzcyBwb3J0IG9mIGZpcnN0IGNhcmQKKwkJICA3ID0gL2Rldi9kdmIvYWRhcHRlcjAvbmV0MCAgICAgIGZpcnN0IG5ldHdvcmsgZGV2aWNlIG9mIGZpcnN0IGNhcmQKKwkJICA4ID0gL2Rldi9kdmIvYWRhcHRlcjAvb3NkMCAgICAgIGZpcnN0IG9uLXNjcmVlbi1kaXNwbGF5IGRldmljZSBvZiBmaXJzdCBjYXJkCisJCSAgOSA9IC9kZXYvZHZiL2FkYXB0ZXIwL3ZpZGVvMSAgICBzZWNvbmQgdmlkZW8gZGVjb2RlciBvZiBmaXJzdCBjYXJkCisJCSAgICAuLi4KKwkJIDY0ID0gL2Rldi9kdmIvYWRhcHRlcjEvdmlkZW8wICAgIGZpcnN0IHZpZGVvIGRlY29kZXIgb2Ygc2Vjb25kIGNhcmQKKwkJICAgIC4uLgorCQkxMjggPSAvZGV2L2R2Yi9hZGFwdGVyMi92aWRlbzAgICAgZmlyc3QgdmlkZW8gZGVjb2RlciBvZiB0aGlyZCBjYXJkCisJCSAgICAuLi4KKwkJMTk2ID0gL2Rldi9kdmIvYWRhcHRlcjMvdmlkZW8wICAgIGZpcnN0IHZpZGVvIGRlY29kZXIgb2YgZm91cnRoIGNhcmQKKworCisyMTYgY2hhcglVU0IgQmx1ZVRvb3RoIGRldmljZXMKKwkJICAwID0gL2Rldi90dHlVQjAJCUZpcnN0IFVTQiBCbHVlVG9vdGggZGV2aWNlCisJCSAgMSA9IC9kZXYvdHR5VUIxCQlTZWNvbmQgVVNCIEJsdWVUb290aCBkZXZpY2UKKwkJICAgIC4uLgorCisyMTcgY2hhcglVU0IgQmx1ZVRvb3RoIGRldmljZXMgKGFsdGVybmF0ZSBkZXZpY2VzKQorCQkgIDAgPSAvZGV2L2N1dWIwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5VUIwCisJCSAgMSA9IC9kZXYvY3V1YjEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlVQjEKKwkJICAgIC4uLgorCisyMTggY2hhcglUaGUgTG9naWNhbCBDb21wYW55IGJ1cyBVbmlidXMvUWJ1cyBhZGFwdGVycworCQkgIDAgPSAvZGV2L2xvZ2ljYWxjby9iY2kvMAlGaXJzdCBidXMgYWRhcHRlcgorCQkgIDEgPSAvZGV2L2xvZ2ljYWxjby9iY2kvMQlGaXJzdCBidXMgYWRhcHRlcgorCQkgICAgLi4uCisKKzIxOSBjaGFyCVRoZSBMb2dpY2FsIENvbXBhbnkgRENJLTEzMDAgZGlnaXRhbCBJL08gY2FyZAorCQkgIDAgPSAvZGV2L2xvZ2ljYWxjby9kY2kxMzAwLzAJRmlyc3QgRENJLTEzMDAgY2FyZAorCQkgIDEgPSAvZGV2L2xvZ2ljYWxjby9kY2kxMzAwLzEJU2Vjb25kIERDSS0xMzAwIGNhcmQKKwkJICAgIC4uLgorCisyMjAgY2hhcglNeXJpY29tIE15cmluZXQgIkdNIiBib2FyZAorCQkgIDAgPSAvZGV2L215cmljb20vZ20wCQlGaXJzdCBNeXJpbmV0IEdNIGJvYXJkCisJCSAgMSA9IC9kZXYvbXlyaWNvbS9nbXAwCQlGaXJzdCBib2FyZCAicm9vdCBhY2Nlc3MiCisJCSAgMiA9IC9kZXYvbXlyaWNvbS9nbTEJCVNlY29uZCBNeXJpbmV0IEdNIGJvYXJkCisJCSAgMyA9IC9kZXYvbXlyaWNvbS9nbXAxCQlTZWNvbmQgYm9hcmQgInJvb3QgYWNjZXNzIgorCQkgICAgLi4uCisKKzIyMSBjaGFyCVZNRSBidXMKKwkJICAwID0gL2Rldi9idXMvdm1lL20wCQlGaXJzdCBtYXN0ZXIgaW1hZ2UKKwkJICAxID0gL2Rldi9idXMvdm1lL20xCQlTZWNvbmQgbWFzdGVyIGltYWdlCisJCSAgMiA9IC9kZXYvYnVzL3ZtZS9tMgkJVGhpcmQgbWFzdGVyIGltYWdlCisJCSAgMyA9IC9kZXYvYnVzL3ZtZS9tMwkJRm91cnRoIG1hc3RlciBpbWFnZQorCQkgIDQgPSAvZGV2L2J1cy92bWUvczAJCUZpcnN0IHNsYXZlIGltYWdlCisJCSAgNSA9IC9kZXYvYnVzL3ZtZS9zMQkJU2Vjb25kIHNsYXZlIGltYWdlCisJCSAgNiA9IC9kZXYvYnVzL3ZtZS9zMgkJVGhpcmQgc2xhdmUgaW1hZ2UKKwkJICA3ID0gL2Rldi9idXMvdm1lL3MzCQlGb3VydGggc2xhdmUgaW1hZ2UKKwkJICA4ID0gL2Rldi9idXMvdm1lL2N0bAkJQ29udHJvbAorCisJCUl0IGlzIGV4cGVjdGVkIHRoYXQgYWxsIFZNRSBidXMgZHJpdmVycyB3aWxsIHVzZSB0aGUKKwkJc2FtZSBpbnRlcmZhY2UuICBGb3IgaW50ZXJmYWNlIGRvY3VtZW50YXRpb24gc2VlCisJCWh0dHA6Ly93d3cudm1lbGludXgub3JnLy4KKworMjI0IGNoYXIJQTIyMzIgc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlZMAkJRmlyc3QgQTIyMzIgcG9ydAorCQkgIDEgPSAvZGV2L3R0eVkxCQlTZWNvbmQgQTIyMzIgcG9ydAorCQkgICAgLi4uCisKKzIyNSBjaGFyCUEyMjMyIHNlcmlhbCBjYXJkIChhbHRlcm5hdGUgZGV2aWNlcykKKwkJICAwID0gL2Rldi9jdXkwCQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVkwCisJCSAgMSA9IC9kZXYvY3V5MQkJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlZMQorCQkgICAgLi4uCisKKzIyNiBjaGFyCURpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkKKwkJICAwID0gL2Rldi9kcmkvY2FyZDAJCUZpcnN0IGdyYXBoaWNzIGNhcmQKKwkJICAxID0gL2Rldi9kcmkvY2FyZDEJCVNlY29uZCBncmFwaGljcyBjYXJkCisJCSAgICAuLi4KKworMjI3IGNoYXIJSUJNIDMyNzAgdGVybWluYWwgVW5peCB0dHkgYWNjZXNzCisJCSAgMSA9IC9kZXYvMzI3MC90dHkxCQlGaXJzdCAzMjcwIHRlcm1pbmFsCisJCSAgMiA9IC9kZXYvMzI3MC90dHkyCQlTZWNvbmRzIDMyNzAgdGVybWluYWwKKwkJICAgIC4uLgorCisyMjggY2hhcglJQk0gMzI3MCB0ZXJtaW5hbCBibG9jay1tb2RlIGFjY2VzcworCQkgIDAgPSAvZGV2LzMyNzAvdHViCQlDb250cm9sbGluZyBpbnRlcmZhY2UKKwkJICAxID0gL2Rldi8zMjcwL3R1YjEJCUZpcnN0IDMyNzAgdGVybWluYWwKKwkJICAyID0gL2Rldi8zMjcwL3R1YjIJCVNlY29uZCAzMjcwIHRlcm1pbmFsCisJCSAgICAuLi4KKworMjI5IGNoYXIJSUJNIGlTZXJpZXMgdmlydHVhbCBjb25zb2xlCisJCSAgMCA9IC9kZXYvaXNlcmllcy92dHR5MAlGaXJzdCBjb25zb2xlIHBvcnQKKwkJICAxID0gL2Rldi9pc2VyaWVzL3Z0dHkxCVNlY29uZCBjb25zb2xlIHBvcnQKKwkJICAgIC4uLgorCisyMzAgY2hhcglJQk0gaVNlcmllcyB2aXJ0dWFsIHRhcGUKKwkJICAwID0gL2Rldi9pc2VyaWVzL3Z0MAkJRmlyc3QgdmlydHVhbCB0YXBlLCBtb2RlIDAKKwkJICAxID0gL2Rldi9pc2VyaWVzL3Z0MQkJU2Vjb25kIHZpcnR1YWwgdGFwZSwgbW9kZSAwCisJCSAgICAuLi4KKwkJIDMyID0gL2Rldi9pc2VyaWVzL3Z0MGwJCUZpcnN0IHZpcnR1YWwgdGFwZSwgbW9kZSAxCisJCSAzMyA9IC9kZXYvaXNlcmllcy92dDFsCQlTZWNvbmQgdmlydHVhbCB0YXBlLCBtb2RlIDEKKwkJICAgIC4uLgorCQkgNjQgPSAvZGV2L2lzZXJpZXMvdnQwbQkJRmlyc3QgdmlydHVhbCB0YXBlLCBtb2RlIDIKKwkJIDY1ID0gL2Rldi9pc2VyaWVzL3Z0MW0JCVNlY29uZCB2aXJ0dWFsIHRhcGUsIG1vZGUgMgorCQkgICAgLi4uCisJCSA5NiA9IC9kZXYvaXNlcmllcy92dDBhCQlGaXJzdCB2aXJ0dWFsIHRhcGUsIG1vZGUgMworCQkgOTcgPSAvZGV2L2lzZXJpZXMvdnQxYQkJU2Vjb25kIHZpcnR1YWwgdGFwZSwgbW9kZSAzCisJCSAgICAgIC4uLgorCQkxMjggPSAvZGV2L2lzZXJpZXMvbnZ0MAkJRmlyc3QgdmlydHVhbCB0YXBlLCBtb2RlIDAsIG5vIHJld2luZAorCQkxMjkgPSAvZGV2L2lzZXJpZXMvbnZ0MQkJU2Vjb25kIHZpcnR1YWwgdGFwZSwgbW9kZSAwLCBubyByZXdpbmQKKwkJICAgIC4uLgorCQkxNjAgPSAvZGV2L2lzZXJpZXMvbnZ0MGwJRmlyc3QgdmlydHVhbCB0YXBlLCBtb2RlIDEsIG5vIHJld2luZAorCQkxNjEgPSAvZGV2L2lzZXJpZXMvbnZ0MWwJU2Vjb25kIHZpcnR1YWwgdGFwZSwgbW9kZSAxLCBubyByZXdpbmQKKwkJICAgIC4uLgorCQkxOTIgPSAvZGV2L2lzZXJpZXMvbnZ0MG0JRmlyc3QgdmlydHVhbCB0YXBlLCBtb2RlIDIsIG5vIHJld2luZAorCQkxOTMgPSAvZGV2L2lzZXJpZXMvbnZ0MW0JU2Vjb25kIHZpcnR1YWwgdGFwZSwgbW9kZSAyLCBubyByZXdpbmQKKwkJICAgIC4uLgorCQkyMjQgPSAvZGV2L2lzZXJpZXMvbnZ0MGEJRmlyc3QgdmlydHVhbCB0YXBlLCBtb2RlIDMsIG5vIHJld2luZAorCQkyMjUgPSAvZGV2L2lzZXJpZXMvbnZ0MWEJU2Vjb25kIHZpcnR1YWwgdGFwZSwgbW9kZSAzLCBubyByZXdpbmQKKwkJICAgIC4uLgorCisJCSJObyByZXdpbmQiIHJlZmVycyB0byB0aGUgb21pc3Npb24gb2YgdGhlIGRlZmF1bHQKKwkJYXV0b21hdGljIHJld2luZCBvbiBkZXZpY2UgY2xvc2UuICBUaGUgTVRSRVcgb3IgTVRPRkZMCisJCWlvY3RsKCkncyBjYW4gYmUgdXNlZCB0byByZXdpbmQgdGhlIHRhcGUgcmVnYXJkbGVzcyBvZgorCQl0aGUgZGV2aWNlIHVzZWQgdG8gYWNjZXNzIGl0LgorCisyMzEgY2hhcglJbmZpbmlCYW5kIE1BRAorCQkwID0gL2Rldi9pbmZpbmliYW5kL3VtYWQwCisJCTEgPSAvZGV2L2luZmluaWJhbmQvdW1hZDEKKwkJIC4uLgorCisyMzItMjM5CQlVTkFTU0lHTkVECisKKzI0MC0yNTQgY2hhcglMT0NBTC9FWFBFUklNRU5UQUwgVVNFCisyNDAtMjU0IGJsb2NrCUxPQ0FML0VYUEVSSU1FTlRBTCBVU0UKKwkJQWxsb2NhdGVkIGZvciBsb2NhbC9leHBlcmltZW50YWwgdXNlLiAgRm9yIGRldmljZXMgbm90CisJCWFzc2lnbmVkIG9mZmljaWFsIG51bWJlcnMsIHRoZXNlIHJhbmdlcyBzaG91bGQgYmUKKwkJdXNlZCBpbiBvcmRlciB0byBhdm9pZCBjb25mbGljdGluZyB3aXRoIGZ1dHVyZSBhc3NpZ25tZW50cy4KKworMjU1IGNoYXIJUkVTRVJWRUQKKzI1NSBibG9jawlSRVNFUlZFRAorCisJCVRoaXMgbWFqb3IgaXMgcmVzZXJ2ZWQgdG8gYXNzaXN0IHRoZSBleHBhbnNpb24gdG8gYQorCQlsYXJnZXIgbnVtYmVyIHNwYWNlLiAgTm8gZGV2aWNlIG5vZGVzIHdpdGggdGhpcyBtYWpvcgorCQlzaG91bGQgZXZlciBiZSBjcmVhdGVkIG9uIHRoZSBmaWxlc3lzdGVtLgorCisgKioqKglBRERJVElPTkFMIC9kZXYgRElSRUNUT1JZIEVOVFJJRVMKKworVGhpcyBzZWN0aW9uIGRldGFpbHMgYWRkaXRpb25hbCBlbnRyaWVzIHRoYXQgc2hvdWxkIG9yIG1heSBleGlzdCBpbgordGhlIC9kZXYgZGlyZWN0b3J5LiAgSXQgaXMgcHJlZmVycmVkIHRoYXQgc3ltYm9saWMgbGlua3MgdXNlIHRoZSBzYW1lCitmb3JtIChhYnNvbHV0ZSBvciByZWxhdGl2ZSkgYXMgaXMgaW5kaWNhdGVkIGhlcmUuICBMaW5rcyBhcmUKK2NsYXNzaWZpZWQgYXMgImhhcmQiIG9yICJzeW1ib2xpYyIgZGVwZW5kaW5nIG9uIHRoZSBwcmVmZXJyZWQgdHlwZSBvZgorbGluazsgaWYgcG9zc2libGUsIHRoZSBpbmRpY2F0ZWQgdHlwZSBvZiBsaW5rIHNob3VsZCBiZSB1c2VkLgorCisKKwlDb21wdWxzb3J5IGxpbmtzCisKK1RoZXNlIGxpbmtzIHNob3VsZCBleGlzdCBvbiBhbGwgc3lzdGVtczoKKworL2Rldi9mZAkJL3Byb2Mvc2VsZi9mZAlzeW1ib2xpYwlGaWxlIGRlc2NyaXB0b3JzCisvZGV2L3N0ZGluCWZkLzAJCXN5bWJvbGljCXN0ZGluIGZpbGUgZGVzY3JpcHRvcgorL2Rldi9zdGRvdXQJZmQvMQkJc3ltYm9saWMJc3Rkb3V0IGZpbGUgZGVzY3JpcHRvcgorL2Rldi9zdGRlcnIJZmQvMgkJc3ltYm9saWMJc3RkZXJyIGZpbGUgZGVzY3JpcHRvcgorL2Rldi9uZnNkCXNvY2tzeXMJCXN5bWJvbGljCVJlcXVpcmVkIGJ5IGlCQ1MtMgorL2Rldi9YMFIJbnVsbAkJc3ltYm9saWMJUmVxdWlyZWQgYnkgaUJDUy0yCisKK05vdGU6IC9kZXYvWDBSIGlzIDxsZXR0ZXIgWD4tPGRpZ2l0IDA+LTxsZXR0ZXIgUj4uCisKKwlSZWNvbW1lbmRlZCBsaW5rcworCitJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZXNlIGxpbmtzIGV4aXN0IG9uIGFsbCBzeXN0ZW1zOgorCisvZGV2L2NvcmUJL3Byb2Mva2NvcmUJc3ltYm9saWMJQmFja3dhcmQgY29tcGF0aWJpbGl0eQorL2Rldi9yYW1kaXNrCXJhbTAJCXN5bWJvbGljCUJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKy9kZXYvZnRhcGUJcWZ0MAkJc3ltYm9saWMJQmFja3dhcmQgY29tcGF0aWJpbGl0eQorL2Rldi9idHR2MAl2aWRlbzAJCXN5bWJvbGljCUJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKy9kZXYvcmFkaW8JcmFkaW8wCQlzeW1ib2xpYwlCYWNrd2FyZCBjb21wYXRpYmlsaXR5CisvZGV2L2kybyoJL2Rldi9pMm8vKglzeW1ib2xpYwlCYWNrd2FyZCBjb21wYXRpYmlsaXR5CisvZGV2L3NjZD8Jc3I/CQloYXJkCQlBbHRlcm5hdGUgU0NTSSBDRC1ST00gbmFtZQorCisJTG9jYWxseSBkZWZpbmVkIGxpbmtzCisKK1RoZSBmb2xsb3dpbmcgbGlua3MgbWF5IGJlIGVzdGFibGlzaGVkIGxvY2FsbHkgdG8gY29uZm9ybSB0byB0aGUKK2NvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4gIFRoaXMgaXMgbWVyZWx5IGEgdGFidWxhdGlvbiBvZiBleGlzdGluZworcHJhY3RpY2UsIGFuZCBkb2VzIG5vdCBjb25zdGl0dXRlIGEgcmVjb21tZW5kYXRpb24uICBIb3dldmVyLCBpZiB0aGV5CitleGlzdCwgdGhleSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHVzZXMuCisKKy9kZXYvbW91c2UJbW91c2UgcG9ydAlzeW1ib2xpYwlDdXJyZW50IG1vdXNlIGRldmljZQorL2Rldi90YXBlCXRhcGUgZGV2aWNlCXN5bWJvbGljCUN1cnJlbnQgdGFwZSBkZXZpY2UKKy9kZXYvY2Ryb20JQ0QtUk9NIGRldmljZQlzeW1ib2xpYwlDdXJyZW50IENELVJPTSBkZXZpY2UKKy9kZXYvY2R3cml0ZXIJQ0Qtd3JpdGVyCXN5bWJvbGljCUN1cnJlbnQgQ0Qtd3JpdGVyIGRldmljZQorL2Rldi9zY2FubmVyCXNjYW5uZXIJCXN5bWJvbGljCUN1cnJlbnQgc2Nhbm5lciBkZXZpY2UKKy9kZXYvbW9kZW0JbW9kZW0gcG9ydAlzeW1ib2xpYwlDdXJyZW50IGRpYWxvdXQgZGV2aWNlCisvZGV2L3Jvb3QJcm9vdCBkZXZpY2UJc3ltYm9saWMJQ3VycmVudCByb290IGZpbGVzeXN0ZW0KKy9kZXYvc3dhcAlzd2FwIGRldmljZQlzeW1ib2xpYwlDdXJyZW50IHN3YXAgZGV2aWNlCisKKy9kZXYvbW9kZW0gc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBhIG1vZGVtIHdoaWNoIHN1cHBvcnRzIGRpYWxpbiBhcword2VsbCBhcyBkaWFsb3V0LCBhcyBpdCB0ZW5kcyB0byBjYXVzZSBsb2NrIGZpbGUgcHJvYmxlbXMuICBJZiBpdAorZXhpc3RzLCAvZGV2L21vZGVtIHNob3VsZCBwb2ludCB0byB0aGUgYXBwcm9wcmlhdGUgcHJpbWFyeSBUVFkgZGV2aWNlCisodGhlIHVzZSBvZiB0aGUgYWx0ZXJuYXRlIGNhbGxvdXQgZGV2aWNlcyBpcyBkZXByZWNhdGVkKS4KKworRm9yIFNDU0kgZGV2aWNlcywgL2Rldi90YXBlIGFuZCAvZGV2L2Nkcm9tIHNob3VsZCBwb2ludCB0byB0aGUKK2BgY29va2VkJycgZGV2aWNlcyAoL2Rldi9zdCogYW5kIC9kZXYvc3IqLCByZXNwZWN0aXZlbHkpLCB3aGVyZWFzCisvZGV2L2Nkd3JpdGVyIGFuZCAvZGV2L3NjYW5uZXIgc2hvdWxkIHBvaW50IHRvIHRoZSBhcHByb3ByaWF0ZSBnZW5lcmljCitTQ1NJIGRldmljZXMgKC9kZXYvc2cqKS4KKworL2Rldi9tb3VzZSBtYXkgcG9pbnQgdG8gYSBwcmltYXJ5IHNlcmlhbCBUVFkgZGV2aWNlLCBhIGhhcmR3YXJlIG1vdXNlCitkZXZpY2UsIG9yIGEgc29ja2V0IGZvciBhIG1vdXNlIGRyaXZlciBwcm9ncmFtIChlLmcuIC9kZXYvZ3BtZGF0YSkuCisKKwlTb2NrZXRzIGFuZCBwaXBlcworCitOb24tdHJhbnNpZW50IHNvY2tldHMgYW5kIG5hbWVkIHBpcGVzIG1heSBleGlzdCBpbiAvZGV2LiAgQ29tbW9uIGVudHJpZXMgYXJlOgorCisvZGV2L3ByaW50ZXIJc29ja2V0CQlscGQgbG9jYWwgc29ja2V0CisvZGV2L2xvZwlzb2NrZXQJCXN5c2xvZyBsb2NhbCBzb2NrZXQKKy9kZXYvZ3BtZGF0YQlzb2NrZXQJCWdwbSBtb3VzZSBtdWx0aXBsZXhlcgorCisJTW91bnQgcG9pbnRzCisKK1RoZSBmb2xsb3dpbmcgbmFtZXMgYXJlIHJlc2VydmVkIGZvciBtb3VudGluZyBzcGVjaWFsIGZpbGVzeXN0ZW1zCit1bmRlciAvZGV2LiAgVGhlc2Ugc3BlY2lhbCBmaWxlc3lzdGVtcyBwcm92aWRlIGtlcm5lbCBpbnRlcmZhY2VzIHRoYXQKK2Nhbm5vdCBiZSBwcm92aWRlZCB3aXRoIHN0YW5kYXJkIGRldmljZSBub2Rlcy4KKworL2Rldi9wdHMJZGV2cHRzCQlQVFkgc2xhdmUgZmlsZXN5c3RlbQorL2Rldi9zaG0JdG1wZnMJCVBPU0lYIHNoYXJlZCBtZW1vcnkgbWFpbnRlbmFuY2UgYWNjZXNzCisKKyAqKioqCVRFUk1JTkFMIERFVklDRVMKKworVGVybWluYWwsIG9yIFRUWSBkZXZpY2VzIGFyZSBhIHNwZWNpYWwgY2xhc3Mgb2YgY2hhcmFjdGVyIGRldmljZXMuICBBCit0ZXJtaW5hbCBkZXZpY2UgaXMgYW55IGRldmljZSB0aGF0IGNvdWxkIGFjdCBhcyBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsCitmb3IgYSBzZXNzaW9uOyB0aGlzIGluY2x1ZGVzIHZpcnR1YWwgY29uc29sZXMsIHNlcmlhbCBwb3J0cywgYW5kCitwc2V1ZG90ZXJtaW5hbHMgKFBUWXMpLgorCitBbGwgdGVybWluYWwgZGV2aWNlcyBzaGFyZSBhIGNvbW1vbiBzZXQgb2YgY2FwYWJpbGl0aWVzIGtub3duIGFzIGxpbmUKK2RpY2lwbGluZXM7IHRoZXNlIGluY2x1ZGUgdGhlIGNvbW1vbiB0ZXJtaW5hbCBsaW5lIGRpY2lwbGluZSBhcyB3ZWxsCithcyBTTElQIGFuZCBQUFAgbW9kZXMuCisKK0FsbCB0ZXJtaW5hbCBkZXZpY2VzIGFyZSBuYW1lZCBzaW1pbGFybHk7IHRoaXMgc2VjdGlvbiBleHBsYWlucyB0aGUKK25hbWluZyBhbmQgdXNlIG9mIHRoZSB2YXJpb3VzIHR5cGVzIG9mIFRUWXMuICBOb3RlIHRoYXQgdGhlIG5hbWluZworY29udmVudGlvbnMgaW5jbHVkZSBzZXZlcmFsIGhpc3RvcmljYWwgd2FydHM7IHNvbWUgb2YgdGhlc2UgYXJlCitMaW51eC1zcGVjaWZpYywgc29tZSB3ZXJlIGluaGVyaXRlZCBmcm9tIG90aGVyIHN5c3RlbXMsIGFuZCBzb21lCityZWZsZWN0IExpbnV4IG91dGdyb3dpbmcgYSBib3Jyb3dlZCBjb252ZW50aW9uLgorCitBIGhhc2ggbWFyayAoIykgaW4gYSBkZXZpY2UgbmFtZSBpcyB1c2VkIGhlcmUgdG8gaW5kaWNhdGUgYSBkZWNpbWFsCitudW1iZXIgd2l0aG91dCBsZWFkaW5nIHplcm9lcy4KKworCVZpcnR1YWwgY29uc29sZXMgYW5kIHRoZSBjb25zb2xlIGRldmljZQorCitWaXJ0dWFsIGNvbnNvbGVzIGFyZSBmdWxsLXNjcmVlbiB0ZXJtaW5hbCBkaXNwbGF5cyBvbiB0aGUgc3lzdGVtIHZpZGVvCittb25pdG9yLiAgVmlydHVhbCBjb25zb2xlcyBhcmUgbmFtZWQgL2Rldi90dHkjLCB3aXRoIG51bWJlcmluZworc3RhcnRpbmcgYXQgL2Rldi90dHkxOyAvZGV2L3R0eTAgaXMgdGhlIGN1cnJlbnQgdmlydHVhbCBjb25zb2xlLgorL2Rldi90dHkwIGlzIHRoZSBkZXZpY2UgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHN5c3RlbSB2aWRlbworY2FyZCBvbiB0aG9zZSBhcmNoaXRlY3R1cmVzIGZvciB3aGljaCB0aGUgZnJhbWUgYnVmZmVyIGRldmljZXMKKygvZGV2L2ZiKikgYXJlIG5vdCBhcHBsaWNhYmxlLglEbyBub3QgdXNlIC9kZXYvY29uc29sZQorZm9yIHRoaXMgcHVycG9zZS4KKworVGhlIGNvbnNvbGUgZGV2aWNlLCAvZGV2L2NvbnNvbGUsIGlzIHRoZSBkZXZpY2UgdG8gd2hpY2ggc3lzdGVtCittZXNzYWdlcyBzaG91bGQgYmUgc2VudCwgYW5kIG9uIHdoaWNoIGxvZ2lucyBzaG91bGQgYmUgcGVybWl0dGVkIGluCitzaW5nbGUtdXNlciBtb2RlLiAgU3RhcnRpbmcgd2l0aCBMaW51eCAyLjEuNzEsIC9kZXYvY29uc29sZSBpcyBtYW5hZ2VkCitieSB0aGUga2VybmVsOyBmb3IgcHJldmlvdXMgdmVyc2lvbnMgaXQgc2hvdWxkIGJlIGEgc3ltYm9saWMgbGluayB0bworZWl0aGVyIC9kZXYvdHR5MCwgYSBzcGVjaWZpYyB2aXJ0dWFsIGNvbnNvbGUgc3VjaCBhcyAvZGV2L3R0eTEsIG9yIHRvCithIHNlcmlhbCBwb3J0IHByaW1hcnkgKHR0eSosIG5vdCBjdSopIGRldmljZSwgZGVwZW5kaW5nIG9uIHRoZQorY29uZmlndXJhdGlvbiBvZiB0aGUgc3lzdGVtLgorCisJU2VyaWFsIHBvcnRzCisKK1NlcmlhbCBwb3J0cyBhcmUgUlMtMjMyIHNlcmlhbCBwb3J0cyBhbmQgYW55IGRldmljZSB3aGljaCBzaW11bGF0ZXMKK29uZSwgZWl0aGVyIGluIGhhcmR3YXJlIChzdWNoIGFzIGludGVybmFsIG1vZGVtcykgb3IgaW4gc29mdHdhcmUgKHN1Y2gKK2FzIHRoZSBJU0ROIGRyaXZlci4pICBVbmRlciBMaW51eCwgZWFjaCBzZXJpYWwgcG9ydHMgaGFzIHR3byBkZXZpY2UKK25hbWVzLCB0aGUgcHJpbWFyeSBvciBjYWxsaW4gZGV2aWNlIGFuZCB0aGUgYWx0ZXJuYXRlIG9yIGNhbGxvdXQgb25lLgorRWFjaCBraW5kIG9mIGRldmljZSBpcyBpbmRpY2F0ZWQgYnkgYSBkaWZmZXJlbnQgbGV0dGVyLgkgRm9yIGFueQorbGV0dGVyIFgsIHRoZSBuYW1lcyBvZiB0aGUgZGV2aWNlcyBhcmUgL2Rldi90dHlYIyBhbmQgL2Rldi9jdXgjLAorcmVzcGVjdGl2ZWx5OyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCAvZGV2L3R0eVMjIGFuZCAvZGV2L3R0eUMjCitjb3JyZXNwb25kIHRvIC9kZXYvY3VhIyBhbmQgL2Rldi9jdWIjLglJbiB0aGUgZnV0dXJlLCBpdCBzaG91bGQgYmUKK2V4cGVjdGVkIHRoYXQgbXVsdGlwbGUgbGV0dGVycyB3aWxsIGJlIHVzZWQ7IGFsbCBsZXR0ZXJzIHdpbGwgYmUgdXBwZXIKK2Nhc2UgZm9yIHRoZSAidHR5IiBkZXZpY2UgKGUuZy4gL2Rldi90dHlEUCMpIGFuZCBsb3dlciBjYXNlIGZvciB0aGUKKyJjdSIgZGV2aWNlIChlLmcuIC9kZXYvY3VkcCMpLgorCitUaGUgbmFtZXMgL2Rldi90dHlRIyBhbmQgL2Rldi9jdXEjIGFyZSByZXNlcnZlZCBmb3IgbG9jYWwgdXNlLgorCitUaGUgYWx0ZXJuYXRlIGRldmljZXMgcHJvdmlkZSBmb3Iga2VybmVsLWJhc2VkIGV4Y2x1c2lvbiBhbmQgc29tZXdoYXQKK2RpZmZlcmVudCBkZWZhdWx0cyB0aGFuIHRoZSBwcmltYXJ5IGRldmljZXMuICBUaGVpciBtYWluIHB1cnBvc2UgaXMgdG8KK2FsbG93IHRoZSB1c2Ugb2Ygc2VyaWFsIHBvcnRzIHdpdGggcHJvZ3JhbXMgd2l0aCBubyBpbmhlcmVudCBvciBicm9rZW4KK3N1cHBvcnQgZm9yIHNlcmlhbCBwb3J0cy4gIFRoZWlyIHVzZSBpcyBkZXByZWNhdGVkLCBhbmQgdGhleSBtYXkgYmUKK3JlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mIExpbnV4LgorCitBcmJpdHJhdGlvbiBvZiBzZXJpYWwgcG9ydHMgaXMgcHJvdmlkZWQgYnkgdGhlIHVzZSBvZiBsb2NrIGZpbGVzIHdpdGgKK3RoZSBuYW1lcyAvdmFyL2xvY2svTENLLi50dHlYIy4JIFRoZSBjb250ZW50cyBvZiB0aGUgbG9jayBmaWxlIHNob3VsZAorYmUgdGhlIFBJRCBvZiB0aGUgbG9ja2luZyBwcm9jZXNzIGFzIGFuIEFTQ0lJIG51bWJlci4KKworSXQgaXMgY29tbW9uIHByYWN0aWNlIHRvIGluc3RhbGwgbGlua3Mgc3VjaCBhcyAvZGV2L21vZGVtCit3aGljaCBwb2ludCB0byBzZXJpYWwgcG9ydHMuICBJbiBvcmRlciB0byBlbnN1cmUgcHJvcGVyIGxvY2tpbmcgaW4gdGhlCitwcmVzZW5jZSBvZiB0aGVzZSBsaW5rcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBzb2Z0d2FyZSBjaGFzZQorc3ltbGlua3MgYW5kIGxvY2sgYWxsIHBvc3NpYmxlIG5hbWVzOyBhZGRpdGlvbmFsbHksIGl0IGlzIHJlY29tbWVuZGVkCit0aGF0IGEgbG9jayBmaWxlIGJlIGluc3RhbGxlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGFsdGVybmF0ZQorZGV2aWNlLgkgSW4gb3JkZXIgdG8gYXZvaWQgZGVhZGxvY2tzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBsb2NrcworYXJlIGFjcXVpcmVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIsIGFuZCByZWxlYXNlZCBpbiB0aGUgcmV2ZXJzZToKKworCTEuIFRoZSBzeW1ib2xpYyBsaW5rIG5hbWUsIGlmIGFueSAoL3Zhci9sb2NrL0xDSy4ubW9kZW0pCisJMi4gVGhlICJ0dHkiIG5hbWUgKC92YXIvbG9jay9MQ0suLnR0eVMyKQorCTMuIFRoZSBhbHRlcm5hdGUgZGV2aWNlIG5hbWUgKC92YXIvbG9jay9MQ0suLmN1YTIpCisKK0luIHRoZSBjYXNlIG9mIG5lc3RlZCBzeW1ib2xpYyBsaW5rcywgdGhlIGxvY2sgZmlsZXMgc2hvdWxkIGJlCitpbnN0YWxsZWQgaW4gdGhlIG9yZGVyIHRoZSBzeW1saW5rcyBhcmUgcmVzb2x2ZWQuCisKK1VuZGVyIG5vIGNpcmN1bXN0YW5jZXMgc2hvdWxkIGFuIGFwcGxpY2F0aW9uIGhvbGQgYSBsb2NrIHdoaWxlIHdhaXRpbmcKK2ZvciBhbm90aGVyIHRvIGJlIHJlbGVhc2VkLiAgSW4gYWRkaXRpb24sIGFwcGxpY2F0aW9ucyB3aGljaCBhdHRlbXB0Cit0byBjcmVhdGUgbG9jayBmaWxlcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgYWx0ZXJuYXRlIGRldmljZSBuYW1lcworc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSBwb3NzaWJpbGl0eSBvZiBiZWluZyB1c2VkIG9uIGEgbm9uLXNlcmlhbAorcG9ydCBUVFksIGZvciB3aGljaCBubyBhbHRlcm5hdGUgZGV2aWNlIHdvdWxkIGV4aXN0LgorCisJUHNldWRvdGVybWluYWxzIChQVFlzKQorCitQc2V1ZG90ZXJtaW5hbHMsIG9yIFBUWXMsIGFyZSB1c2VkIHRvIGNyZWF0ZSBsb2dpbiBzZXNzaW9ucyBvciBwcm92aWRlCitvdGhlciBjYXBhYmlsaXRpZXMgcmVxdWlyaW5nIGEgVFRZIGxpbmUgZGljaXBsaW5lIChpbmNsdWRpbmcgU0xJUCBvcgorUFBQIGNhcGFiaWxpdHkpIHRvIGFyYml0cmFyeSBkYXRhLWdlbmVyYXRpb24gcHJvY2Vzc2VzLgkgRWFjaCBQVFkgaGFzCithIG1hc3RlciBzaWRlLCBuYW1lZCAvZGV2L3B0eVtwLXphLWVdWzAtOWEtZl0sIGFuZCBhIHNsYXZlIHNpZGUsIG5hbWVkCisvZGV2L3R0eVtwLXphLWVdWzAtOWEtZl0uICBUaGUga2VybmVsIGFyYml0cmF0ZXMgdGhlIHVzZSBvZiBQVFlzIGJ5CithbGxvd2luZyBlYWNoIG1hc3RlciBzaWRlIHRvIGJlIG9wZW5lZCBvbmx5IG9uY2UuCisKK09uY2UgdGhlIG1hc3RlciBzaWRlIGhhcyBiZWVuIG9wZW5lZCwgdGhlIGNvcnJlc3BvbmRpbmcgc2xhdmUgZGV2aWNlCitjYW4gYmUgdXNlZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgYW55IFRUWSBkZXZpY2UuICBUaGUgbWFzdGVyIGFuZAorc2xhdmUgZGV2aWNlcyBhcmUgY29ubmVjdGVkIGJ5IHRoZSBrZXJuZWwsIGdlbmVyYXRpbmcgdGhlIGVxdWl2YWxlbnQKK29mIGEgYmlkaXJlY3Rpb25hbCBwaXBlIHdpdGggVFRZIGNhcGFiaWxpdGllcy4KKworUmVjZW50IHZlcnNpb25zIG9mIHRoZSBMaW51eCBrZXJuZWxzIGFuZCBHTlUgbGliYyBjb250YWluIHN1cHBvcnQgZm9yCit0aGUgU3lzdGVtIFYvVW5peDk4IG5hbWluZyBzY2hlbWUgZm9yIFBUWXMsIHdoaWNoIGFzc2lnbnMgYSBjb21tb24KK2RldmljZSwgL2Rldi9wdG14LCB0byBhbGwgdGhlIG1hc3RlcnMgKG9wZW5pbmcgaXQgd2lsbCBhdXRvbWF0aWNhbGx5CitnaXZlIHlvdSBhIHByZXZpb3VzbHkgdW5hc3NpZ25lZCBQVFkpIGFuZCBhIHN1YmRpcmVjdG9yeSwgL2Rldi9wdHMsCitmb3IgdGhlIHNsYXZlczsgdGhlIHNsYXZlcyBhcmUgbmFtZWQgd2l0aCBkZWNpbWFsIGludGVnZXJzICgvZGV2L3B0cy8jCitpbiBvdXIgbm90YXRpb24pLiAgVGhpcyByZW1vdmVzIHRoZSBwcm9ibGVtIG9mIGV4aGF1c3RpbmcgdGhlCituYW1lc3BhY2UgYW5kIGVuYWJsZXMgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSB0aGUgZGV2aWNlCitub2RlcyBmb3IgdGhlIHNsYXZlcyBvbiBkZW1hbmQgdXNpbmcgdGhlICJkZXZwdHMiIGZpbGVzeXN0ZW0uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlnaWVwY2EudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWdpZXBjYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MjBmZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGlnaWVwY2EudHh0CkBAIC0wLDAgKzEsOTggQEAKK05PVEU6ICBUaGlzIGRyaXZlciBpcyBvYnNvbGV0ZS4gIERpZ2kgcHJvdmlkZXMgYSAyLjYgZHJpdmVyIChkZ2RtKSBhdAoraHR0cDovL3d3dy5kaWdpLmNvbSBmb3IgUENJIGNhcmRzLiAgVGhleSBubyBsb25nZXIgbWFpbnRhaW4gdGhpcyBkcml2ZXIsCithbmQgaGF2ZSBubyAyLjYgZHJpdmVyIGZvciBJU0EgY2FyZHMuCisKK1RoaXMgZHJpdmVyIHJlcXVpcmVzIGEgbnVtYmVyIG9mIHVzZXItc3BhY2UgdG9vbHMuICBUaGV5IGNhbiBiZSBhcXVpcmVkIGZyb20KK2h0dHA6Ly93d3cuZGlnaS5jb20sIGJ1dCBvbmx5IHdvcmtzIHdpdGggMi40IGtlcm5lbHMuCisKKworVGhlIERpZ2kgSW50bC4gZXBjYSBkcml2ZXIuIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIERpZ2kgSW50bC4gZXBjYSBkcml2ZXIgZm9yIExpbnV4IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYm9hcmRzOgorCitEaWdpIFBDL1hlbSwgUEMvWHIsIFBDL1hlLCBQQy9YaSwgUEMvWGV2ZSAKK0RpZ2kgRUlTQS9YZW0sIFBDSS9YZW0sIFBDSS9YciAKKworTGltaXRhdGlvbnM6CistLS0tLS0tLS0tLS0KK0N1cnJlbnRseSB0aGUgZHJpdmVyIG9ubHkgYXV0b3Byb2JlcyBmb3Igc3VwcG9ydGVkIFBDSSBib2FyZHMuIAorCitUaGUgTGludXggTUFLRURFViBjb21tYW5kIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJhdGluZyB0aGUgRGlnaWJvYXJkCitEZXZpY2VzLiAgVXNlcnMgZXhlY3V0aW5nIGRpZ2lDb25maWcgdG8gc2V0dXAgRUlTQSBhbmQgUEMgc2VyaWVzIGNhcmRzCit3aWxsIGhhdmUgdGhlaXIgZGV2aWNlIG5vZGVzIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0ZWQgKGN1ZD8/IGZvciB+Q0xPQ0FMLAorYW5kIHR0eUQ/PyBmb3IgQ0xPQ0FMKS4gIFVzZXJzIHdpc2hpbmcgdG8gYm9vdCB0aGVpciBib2FyZCBmcm9tIHRoZSBMSUxPCitwcm9tcHQsIG9yIHRob3NlIHVzZXJzIGJvb3RpbmcgUENJIGNhcmRzIG1heSB1c2UgYnVpbGRESUdJIHRvIGNvbnN0cnVjdCAKK3RoZSBuZWNlc3Nhcnkgbm9kZXMuIAorCitOb3RlczoKKy0tLS0tLQorVGhpcyBkcml2ZXIgbWF5IGJlIGNvbmZpZ3VyZWQgdmlhIExJTE8uICBGb3IgdXNlcnMgd2hvIGhhdmUgYWxyZWFkeSBjb25maWd1cmVkCit0aGVpciBkcml2ZXIgdXNpbmcgZGlnaUNvbmZpZywgY29uZmlndXJpbmcgZnJvbSBMSUxPIHdpbGwgb3ZlcnJpZGUgcHJldmlvdXMgCitzZXR0aW5ncy4gIE11bHRpcGxlIGJvYXJkcyBtYXkgYmUgY29uZmlndXJlZCBieSBpc3N1aW5nIG11bHRpcGxlIExJTE8gY29tbWFuZCAKK2xpbmVzLiAgRm9yIGV4YW1wbGVzIHNlZSB0aGUgYm90dG9tIG9mIHRoaXMgZG9jdW1lbnQuCisKK0RldmljZSBuYW1lcyBzdGFydCBhdCAwIGFuZCBjb250aW51ZSB1cC4gIEJld2FyZSBvZiB0aGlzIGFzIHByZXZpb3VzIERpZ2kgCitkcml2ZXJzIHN0YXJ0ZWQgZGV2aWNlIG5hbWVzIHdpdGggMS4KKworUENJIGJvYXJkcyBhcmUgYXV0by1kZXRlY3RlZCBhbmQgY29uZmlndXJlZCBieSB0aGUgZHJpdmVyLiAgUENJIGJvYXJkcyB3aWxsCitiZSBhbGxvY2F0ZWQgZGV2aWNlIG51bWJlcnMgKGludGVybmFsbHkpIGJlZ2lubmluZyB3aXRoIHRoZSBsb3dlc3QgUENJIHNsb3QKK2ZpcnN0LiAgSW4gb3RoZXIgd29yZHMgYSBQQ0kgY2FyZCBpbiBzbG90IDMgd2lsbCBhbHdheXMgaGF2ZSBoaWdoZXIgZGV2aWNlCitub2RlcyB0aGFuIGEgUENJIGNhcmQgaW4gc2xvdCAxLiAKKworTElMTyBjb25maWcgZXhhbXBsZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1VzaW5nIExJTE8ncyBBUFBFTkQgY29tbWFuZCwgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIGlkZW50aWZpZXJzIG9yIAoraW50ZWdlcnMgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHN1cHBvcnRlZCBib2FyZHMuICBUaGUgc2l4IHZhbHVlcyBpbiBvcmRlciAKK2FyZToKKworICAgRW5hYmxlL0Rpc2FibGUgdGhpcyBjYXJkIG9yIE92ZXJyaWRlLAorICAgVHlwZSBvZiBjYXJkOiBQQy9YZSAoQWNjZWxlUG9ydCkgKDApLCBQQy9YZXZlICgxKSwgUEMvWGVtIG9yIFBDL1hyICgyKSwgCisgICAgICAgICAgICAgICAgIEVJU0EvWGVtICgzKSwgUEMvNjRYZSAoNCksIFBDL1hpICg1KSwgCisgICBFbmFibGUvRGlzYWJsZSBhbHRlcm5hdGUgcGluIGFycmFuZ2VtZW50LAorICAgTnVtYmVyIG9mIHBvcnRzIG9uIHRoaXMgY2FyZCwKKyAgIEkvTyBQb3J0IHdoZXJlIGNhcmQgaXMgY29uZmlndXJlZCAoaW4gSEVYIGlmIHVzaW5nIHN0cmluZyBpZGVudGlmaWVycyksCisgICBCYXNlIG9mIG1lbW9yeSB3aW5kb3cgKGluIEhFWCBpZiB1c2luZyBzdHJpbmcgaWRlbnRpZmllcnMpLCAKKworTk9URSA6IFBDSSBib2FyZHMgYXJlIGF1dG8tZGV0ZWN0ZWQgYW5kIGNvbmZpZ3VyZWQuICBEbyBub3QgYXR0ZW1wdCB0byAKK2NvbmZpZ3VyZSBQQ0kgYm9hcmRzIHdpdGggdGhlIExJTE8gYXBwZW5kIGNvbW1hbmQuICBJZiB5b3Ugd2lzaCB0byBvdmVycmlkZQorcHJldmlvdXMgY29uZmlndXJhdGlvbiBkYXRhIChBcyBzZXQgYnkgZGlnaUNvbmZpZyksIGJ1dCB5b3UgZG8gbm90IHdpc2ggdG8KK2NvbmZpZ3VyZSBhbnkgc3BlY2lmaWMgY2FyZCAoRXhhbXBsZSBpZiB0aGVyZSBhcmUgUENJIGNhcmRzIGluIHRoZSBzeXN0ZW0pIAordGhlIGZvbGxvd2luZyBvdmVycmlkZSBjb21tYW5kIHdpbGwgYWNjb21wbGlzaCB0aGlzOgorLT4gYXBwZW5kPSJkaWdpPTIiCisKK1NhbXBsZXM6CisgICBhcHBlbmQ9ImRpZ2llcGNhPUUsUEMvWGUsRCwxNiwyMDAsRDAwMDAiCisgICAgICAgICAgICAgICAgICBvcgorICAgYXBwZW5kPSJkaWdpPTEsMCwwLDE2LDUxMiw4NTE5NjgiCisKK1N1cHBvcnRpbmcgVG9vbHM6CistLS0tLS0tLS0tLS0tLS0tLQorU3VwcG9ydGluZyB0b29scyBpbmNsdWRlIGRpZ2lEbG9hZCwgZGlnaUNvbmZpZywgYnVpbGRQQ0ksIGFuZCBkaXR0eS4gIFNlZQorZHJpdmVycy9jaGFyL1JFQURNRS5lcGNhIGZvciBtb3JlIGRldGFpbHMuICBOb3RlLAordGhpcyBkcml2ZXIgUkVRVUlSRVMgdGhhdCBkaWdpRGxvYWQgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gaXQgYmVpbmcgdXNlZC4gCitGYWlsdXJlIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gYW4gRU5PREVWIGVycm9yLgorCitEb2N1bWVudGF0aW9uOgorLS0tLS0tLS0tLS0tLS0KK0NvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgcHJvZHVjdCBtYXkgYmUgZm91bmQgaW4gdGhlIHRvb2wgcGFja2FnZS4gCisKK1NvdXJjZXMgb2YgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRGlnaSBJbnRsLiBzdXBwb3J0IHNpdGUgZm9yIHRoaXMgcHJvZHVjdDoKKworLT4gIGh0dHA6Ly93d3cuZGlnaS5jb20KKworQWNrbm93bGVkZ21lbnRzOgorLS0tLS0tLS0tLS0tLS0tLQorTXVjaCBvZiB0aGlzIHdvcmsgKEFuZCBldmVuIHRleHQpIHdhcyBkZXJpdmVkIGZyb20gYSBzaW1pbGFyIGRvY3VtZW50IAorc3VwcG9ydGluZyB0aGUgb3JpZ2luYWwgcHVibGljIGRvbWFpbiBEaWdpQm9hcmQgZHJpdmVyIENvcHlyaWdodCAoQykKKzE5OTQsMTk5NSBUcm95IERlIEpvbmdoLiAgTWFueSB0aGFua3MgdG8gQ2hyaXN0b3BoIExhbWV0ZXIgCisoY2hyaXN0b3BoQGxhbWV0ZXIuY29tKSBhbmQgTWlrZSBNY0xhZ2FuIChtaWtlLm1jbGFnYW5AbGludXgub3JnKSB3aG8gYXV0aG9yZWQgCithbmQgY29udHJpYnV0ZWQgdG8gdGhlIG9yaWdpbmFsIGRvY3VtZW50LiAKKworQ2hhbmdlbG9nOgorLS0tLS0tLS0tLQorMTAtMjktMDQ6CVVwZGF0ZSBzdGF0dXMgb2YgZHJpdmVyLCByZW1vdmUgZGVhZCBsaW5rcyBpbiBkb2N1bWVudAorCQlKYW1lcyBOZWxzb24gPGphbWVzNDc2NUBnbWFpbC5jb20+CisKKzIwMDAgKD8pCU9yaWdpbmFsIERvY3VtZW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rub3RpZnkudHh0IGIvRG9jdW1lbnRhdGlvbi9kbm90aWZ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg0ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kbm90aWZ5LnR4dApAQCAtMCwwICsxLDk5IEBACisJCUxpbnV4IERpcmVjdG9yeSBOb3RpZmljYXRpb24KKwkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJICAgU3RlcGhlbiBSb3Rod2VsbCA8c2ZyQGNhbmIuYXV1Zy5vcmcuYXU+CisKK1RoZSBpbnRlbnRpb24gb2YgZGlyZWN0b3J5IG5vdGlmaWNhdGlvbiBpcyB0byBhbGxvdyB1c2VyIGFwcGxpY2F0aW9ucwordG8gYmUgbm90aWZpZWQgd2hlbiBhIGRpcmVjdG9yeSwgb3IgYW55IG9mIHRoZSBmaWxlcyBpbiBpdCwgYXJlIGNoYW5nZWQuCitUaGUgYmFzaWMgbWVjaGFuaXNtIGludm9sdmVzIHRoZSBhcHBsaWNhdGlvbiByZWdpc3RlcmluZyBmb3Igbm90aWZpY2F0aW9uCitvbiBhIGRpcmVjdG9yeSB1c2luZyBhIGZjbnRsKDIpIGNhbGwgYW5kIHRoZSBub3RpZmljYXRpb25zIHRoZW1zZWx2ZXMKK2JlaW5nIGRlbGl2ZXJlZCB1c2luZyBzaWduYWxzLgorCitUaGUgYXBwbGljYXRpb24gZGVjaWRlcyB3aGljaCAiZXZlbnRzIiBpdCB3YW50cyB0byBiZSBub3RpZmllZCBhYm91dC4KK1RoZSBjdXJyZW50bHkgZGVmaW5lZCBldmVudHMgYXJlOgorCisJRE5fQUNDRVNTCUEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IHdhcyBhY2Nlc3NlZCAocmVhZCkKKwlETl9NT0RJRlkJQSBmaWxlIGluIHRoZSBkaXJlY3Rvcnkgd2FzIG1vZGlmaWVkICh3cml0ZSx0cnVuY2F0ZSkKKwlETl9DUkVBVEUJQSBmaWxlIHdhcyBjcmVhdGVkIGluIHRoZSBkaXJlY3RvcnkKKwlETl9ERUxFVEUJQSBmaWxlIHdhcyB1bmxpbmtlZCBmcm9tIGRpcmVjdG9yeQorCUROX1JFTkFNRQlBIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSB3YXMgcmVuYW1lZAorCUROX0FUVFJJQglBIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBoYWQgaXRzIGF0dHJpYnV0ZXMKKwkJCWNoYW5nZWQgKGNobW9kLGNob3duKQorCitVc3VhbGx5LCB0aGUgYXBwbGljYXRpb24gbXVzdCByZXJlZ2lzdGVyIGFmdGVyIGVhY2ggbm90aWZpY2F0aW9uLCBidXQKK2lmIEROX01VTFRJU0hPVCBpcyBvcidlZCB3aXRoIHRoZSBldmVudCBtYXNrLCB0aGVuIHRoZSByZWdpc3RyYXRpb24gd2lsbAorcmVtYWluIHVudGlsIGV4cGxpY2l0bHkgcmVtb3ZlZCAoYnkgcmVnaXN0ZXJpbmcgZm9yIG5vIGV2ZW50cykuCisKK0J5IGRlZmF1bHQsIFNJR0lPIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZSBwcm9jZXNzIGFuZCBubyBvdGhlciB1c2VmdWwKK2luZm9ybWF0aW9uLiAgSG93ZXZlciwgaWYgdGhlIEZfU0VUU0lHIGZjbnRsKDIpIGNhbGwgaXMgdXNlZCB0byBsZXQgdGhlCitrZXJuZWwga25vdyB3aGljaCBzaWduYWwgdG8gZGVsaXZlciwgYSBzaWdpbmZvIHN0cnVjdHVyZSB3aWxsIGJlIHBhc3NlZCB0bwordGhlIHNpZ25hbCBoYW5kbGVyIGFuZCB0aGUgc2lfZmQgbWVtYmVyIG9mIHRoYXQgc3RydWN0dXJlIHdpbGwgY29udGFpbiB0aGUKK2ZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgZXZlbnQgb2NjdXJyZWQuCisKK1ByZWZlcmFibHkgdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2hvb3NlIG9uZSBvZiB0aGUgcmVhbCB0aW1lIHNpZ25hbHMKKyhTSUdSVE1JTiArIDxuPikgc28gdGhhdCB0aGUgbm90aWZpY2F0aW9ucyBtYXkgYmUgcXVldWVkLiAgVGhpcyBpcworZXNwZWNpYWxseSBpbXBvcnRhbnQgaWYgRE5fTVVMVElTSE9UIGlzIHNwZWNpZmllZC4gIE5vdGUgdGhhdCBTSUdSVE1JTgoraXMgb2Z0ZW4gYmxvY2tlZCwgc28gaXQgaXMgYmV0dGVyIHRvIHVzZSAoYXQgbGVhc3QpIFNJR1JUTUlOICsgMS4KKworSW1wbGVtZW50YXRpb24gZXhwZWN0YXRpb25zIChmZWF0dXJlcyBhbmQgYnVncyA6LSkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG5vdGlmaWNhdGlvbiBzaG91bGQgd29yayBmb3IgYW55IGxvY2FsIGFjY2VzcyB0byBmaWxlcyBldmVuIGlmIHRoZQorYWN0dWFsIGZpbGUgc3lzdGVtIGlzIG9uIGEgcmVtb3RlIHNlcnZlci4gIFRoaXMgaW1wbGllcyB0aGF0IHJlbW90ZQorYWNjZXNzIHRvIGZpbGVzIHNlcnZlZCBieSBsb2NhbCB1c2VyIG1vZGUgc2VydmVycyBzaG91bGQgYmUgbm90aWZpZWQuCitBbHNvLCByZW1vdGUgYWNjZXNzZXMgdG8gZmlsZXMgc2VydmVkIGJ5IGEgbG9jYWwga2VybmVsIE5GUyBzZXJ2ZXIgc2hvdWxkCitiZSBub3RpZmllZC4KKworSW4gb3JkZXIgdG8gbWFrZSB0aGUgaW1wYWN0IG9uIHRoZSBmaWxlIHN5c3RlbSBjb2RlIGFzIHNtYWxsIGFzIHBvc3NpYmxlLAordGhlIHByb2JsZW0gb2YgaGFyZCBsaW5rcyB0byBmaWxlcyBoYXMgYmVlbiBpZ25vcmVkLiAgU28gaWYgYSBmaWxlICh4KQorZXhpc3RzIGluIHR3byBkaXJlY3RvcmllcyAoYSBhbmQgYikgdGhlbiBhIGNoYW5nZSB0byB0aGUgZmlsZSB1c2luZyB0aGUKK25hbWUgImEveCIgc2hvdWxkIGJlIG5vdGlmaWVkIHRvIGEgcHJvZ3JhbSBleHBlY3Rpbmcgbm90aWZpY2F0aW9ucyBvbgorZGlyZWN0b3J5ICJhIiwgYnV0IHdpbGwgbm90IGJlIG5vdGlmaWVkIHRvIG9uZSBleHBlY3Rpbmcgbm90aWZpY2F0aW9ucyBvbgorZGlyZWN0b3J5ICJiIi4KKworQWxzbywgZmlsZXMgdGhhdCBhcmUgdW5saW5rZWQsIHdpbGwgc3RpbGwgY2F1c2Ugbm90aWZpY2F0aW9ucyBpbiB0aGUKK2xhc3QgZGlyZWN0b3J5IHRoYXQgdGhleSB3ZXJlIGxpbmtlZCB0by4KKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitEbm90aWZ5IGlzIGNvbnRyb2xsZWQgdmlhIHRoZSBDT05GSUdfRE5PVElGWSBjb25maWd1cmF0aW9uIG9wdGlvbi4gIFdoZW4KK2Rpc2FibGVkLCBmY250bChmZCwgRl9OT1RJRlksIC4uLikgd2lsbCByZXR1cm4gLUVJTlZBTC4KKworRXhhbXBsZQorLS0tLS0tLQorCisJI2RlZmluZSBfR05VX1NPVVJDRQkvKiBuZWVkZWQgdG8gZ2V0IHRoZSBkZWZpbmVzICovCisJI2luY2x1ZGUgPGZjbnRsLmg+CS8qIGluIGdsaWJjIDIuMiB0aGlzIGhhcyB0aGUgbmVlZGVkCisJCQkJCSAgIHZhbHVlcyBkZWZpbmVkICovCisJI2luY2x1ZGUgPHNpZ25hbC5oPgorCSNpbmNsdWRlIDxzdGRpby5oPgorCSNpbmNsdWRlIDx1bmlzdGQuaD4KKwkKKwlzdGF0aWMgdm9sYXRpbGUgaW50IGV2ZW50X2ZkOworCQorCXN0YXRpYyB2b2lkIGhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190ICpzaSwgdm9pZCAqZGF0YSkKKwl7CisJCWV2ZW50X2ZkID0gc2ktPnNpX2ZkOworCX0KKwkKKwlpbnQgbWFpbih2b2lkKQorCXsKKwkJc3RydWN0IHNpZ2FjdGlvbiBhY3Q7CisJCWludCBmZDsKKwkJCisJCWFjdC5zYV9zaWdhY3Rpb24gPSBoYW5kbGVyOworCQlzaWdlbXB0eXNldCgmYWN0LnNhX21hc2spOworCQlhY3Quc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworCQlzaWdhY3Rpb24oU0lHUlRNSU4gKyAxLCAmYWN0LCBOVUxMKTsKKwkJCisJCWZkID0gb3BlbigiLiIsIE9fUkRPTkxZKTsKKwkJZmNudGwoZmQsIEZfU0VUU0lHLCBTSUdSVE1JTiArIDEpOworCQlmY250bChmZCwgRl9OT1RJRlksIEROX01PRElGWXxETl9DUkVBVEV8RE5fTVVMVElTSE9UKTsKKwkJLyogd2Ugd2lsbCBub3cgYmUgbm90aWZpZWQgaWYgYW55IG9mIHRoZSBmaWxlcworCQkgICBpbiAiLiIgaXMgbW9kaWZpZWQgb3IgbmV3IGZpbGVzIGFyZSBjcmVhdGVkICovCisJCXdoaWxlICgxKSB7CisJCQlwYXVzZSgpOworCQkJcHJpbnRmKCJHb3QgZXZlbnQgb24gZmQ9JWRcbiIsIGV2ZW50X2ZkKTsKKwkJfQorCX0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2JpbmRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvYmluZGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlYzlkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2JpbmRpbmcudHh0CkBAIC0wLDAgKzEsMTAyIEBACisKK0RyaXZlciBCaW5kaW5nCisKK0RyaXZlciBiaW5kaW5nIGlzIHRoZSBwcm9jZXNzIG9mIGFzc29jaWF0aW5nIGEgZGV2aWNlIHdpdGggYSBkZXZpY2UKK2RyaXZlciB0aGF0IGNhbiBjb250cm9sIGl0LiBCdXMgZHJpdmVycyBoYXZlIHR5cGljYWxseSBoYW5kbGVkIHRoaXMKK2JlY2F1c2UgdGhlcmUgaGF2ZSBiZWVuIGJ1cy1zcGVjaWZpYyBzdHJ1Y3R1cmVzIHRvIHJlcHJlc2VudCB0aGUKK2RldmljZXMgYW5kIHRoZSBkcml2ZXJzLiBXaXRoIGdlbmVyaWMgZGV2aWNlIGFuZCBkZXZpY2UgZHJpdmVyCitzdHJ1Y3R1cmVzLCBtb3N0IG9mIHRoZSBiaW5kaW5nIGNhbiB0YWtlIHBsYWNlIHVzaW5nIGNvbW1vbiBjb2RlLgorCisKK0J1cworfn5+CisKK1RoZSBidXMgdHlwZSBzdHJ1Y3R1cmUgY29udGFpbnMgYSBsaXN0IG9mIGFsbCBkZXZpY2VzIHRoYXQgYXJlIG9uIHRoYXQgYnVzCit0eXBlIGluIHRoZSBzeXN0ZW0uIFdoZW4gZGV2aWNlX3JlZ2lzdGVyIGlzIGNhbGxlZCBmb3IgYSBkZXZpY2UsIGl0IGlzCitpbnNlcnRlZCBpbnRvIHRoZSBlbmQgb2YgdGhpcyBsaXN0LiBUaGUgYnVzIG9iamVjdCBhbHNvIGNvbnRhaW5zIGEKK2xpc3Qgb2YgYWxsIGRyaXZlcnMgb2YgdGhhdCBidXMgdHlwZS4gV2hlbiBkcml2ZXJfcmVnaXN0ZXIgaXMgY2FsbGVkCitmb3IgYSBkcml2ZXIsIGl0IGlzIGluc2VydGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBsaXN0LiBUaGVzZSBhcmUgdGhlCit0d28gZXZlbnRzIHdoaWNoIHRyaWdnZXIgZHJpdmVyIGJpbmRpbmcuCisKKworZGV2aWNlX3JlZ2lzdGVyCit+fn5+fn5+fn5+fn5+fn4KKworV2hlbiBhIG5ldyBkZXZpY2UgaXMgYWRkZWQsIHRoZSBidXMncyBsaXN0IG9mIGRyaXZlcnMgaXMgaXRlcmF0ZWQgb3ZlcgordG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBpdC4gSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoYXQsIHRoZSBkZXZpY2UKK0lEIG9mIHRoZSBkZXZpY2UgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIGRldmljZSBJRHMgdGhhdCB0aGUgZHJpdmVyCitzdXBwb3J0cy4gVGhlIGZvcm1hdCBhbmQgc2VtYW50aWNzIGZvciBjb21wYXJpbmcgSURzIGlzIGJ1cy1zcGVjaWZpYy4gCitJbnN0ZWFkIG9mIHRyeWluZyB0byBkZXJpdmUgYSBjb21wbGV4IHN0YXRlIG1hY2hpbmUgYW5kIG1hdGNoaW5nCithbGdvcml0aG0sIGl0IGlzIHVwIHRvIHRoZSBidXMgZHJpdmVyIHRvIHByb3ZpZGUgYSBjYWxsYmFjayB0byBjb21wYXJlCithIGRldmljZSBhZ2FpbnN0IHRoZSBJRHMgb2YgYSBkcml2ZXIuIFRoZSBidXMgcmV0dXJucyAxIGlmIGEgbWF0Y2ggd2FzCitmb3VuZDsgMCBvdGhlcndpc2UuCisKK2ludCBtYXRjaChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRydik7CisKK0lmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSBkZXZpY2UncyBkcml2ZXIgZmllbGQgaXMgc2V0IHRvIHRoZSBkcml2ZXIKK2FuZCB0aGUgZHJpdmVyJ3MgcHJvYmUgY2FsbGJhY2sgaXMgY2FsbGVkLiBUaGlzIGdpdmVzIHRoZSBkcml2ZXIgYQorY2hhbmNlIHRvIHZlcmlmeSB0aGF0IGl0IHJlYWxseSBkb2VzIHN1cHBvcnQgdGhlIGhhcmR3YXJlLCBhbmQgdGhhdAoraXQncyBpbiBhIHdvcmtpbmcgc3RhdGUuIAorCitEZXZpY2UgQ2xhc3MKK35+fn5+fn5+fn5+fgorCitVcG9uIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgcHJvYmUsIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoCit0aGUgY2xhc3MgdG8gd2hpY2ggaXQgYmVsb25ncy4gRGV2aWNlIGRyaXZlcnMgYmVsb25nIHRvIG9uZSBhbmQgb25seSBvbmUKK2NsYXNzLCBhbmQgdGhhdCBpcyBzZXQgaW4gdGhlIGRyaXZlcidzIGRldmNsYXNzIGZpZWxkLiAKK2RldmNsYXNzX2FkZF9kZXZpY2UgaXMgY2FsbGVkIHRvIGVudW1lcmF0ZSB0aGUgZGV2aWNlIHdpdGhpbiB0aGUgY2xhc3MKK2FuZCBhY3R1YWxseSByZWdpc3RlciBpdCB3aXRoIHRoZSBjbGFzcywgd2hpY2ggaGFwcGVucyB3aXRoIHRoZQorY2xhc3MncyByZWdpc3Rlcl9kZXYgY2FsbGJhY2suCisKK05PVEU6IFRoZSBkZXZpY2UgY2xhc3Mgc3RydWN0dXJlcyBhbmQgY29yZSByb3V0aW5lcyB0byBtYW5pcHVsYXRlIHRoZW0KK2FyZSBub3QgaW4gdGhlIG1haW5saW5lIGtlcm5lbCwgc28gdGhlIGRpc2N1c3Npb24gaXMgc3RpbGwgYSBiaXQKK3NwZWN1bGF0aXZlLiAKKworCitEcml2ZXIKK35+fn5+fgorCitXaGVuIGEgZHJpdmVyIGlzIGF0dGFjaGVkIHRvIGEgZGV2aWNlLCB0aGUgZGV2aWNlIGlzIGluc2VydGVkIGludG8gdGhlCitkcml2ZXIncyBsaXN0IG9mIGRldmljZXMuIAorCisKK3N5c2ZzCit+fn5+fgorCitBIHN5bWxpbmsgaXMgY3JlYXRlZCBpbiB0aGUgYnVzJ3MgJ2RldmljZXMnIGRpcmVjdG9yeSB0aGF0IHBvaW50cyB0bwordGhlIGRldmljZSdzIGRpcmVjdG9yeSBpbiB0aGUgcGh5c2ljYWwgaGllcmFyY2h5LgorCitBIHN5bWxpbmsgaXMgY3JlYXRlZCBpbiB0aGUgZHJpdmVyJ3MgJ2RldmljZXMnIGRpcmVjdG9yeSB0aGF0IHBvaW50cwordG8gdGhlIGRldmljZSdzIGRpcmVjdG9yeSBpbiB0aGUgcGh5c2ljYWwgaGllcmFyY2h5LgorCitBIGRpcmVjdG9yeSBmb3IgdGhlIGRldmljZSBpcyBjcmVhdGVkIGluIHRoZSBjbGFzcydzIGRpcmVjdG9yeS4gQQorc3ltbGluayBpcyBjcmVhdGVkIGluIHRoYXQgZGlyZWN0b3J5IHRoYXQgcG9pbnRzIHRvIHRoZSBkZXZpY2UncworcGh5c2ljYWwgbG9jYXRpb24gaW4gdGhlIHN5c2ZzIHRyZWUuIAorCitBIHN5bWxpbmsgY2FuIGJlIGNyZWF0ZWQgKHRob3VnaCB0aGlzIGlzbid0IGRvbmUgeWV0KSBpbiB0aGUgZGV2aWNlJ3MKK3BoeXNpY2FsIGRpcmVjdG9yeSB0byBlaXRoZXIgaXRzIGNsYXNzIGRpcmVjdG9yeSwgb3IgdGhlIGNsYXNzJ3MKK3RvcC1sZXZlbCBkaXJlY3RvcnkuIE9uZSBjYW4gYWxzbyBiZSBjcmVhdGVkIHRvIHBvaW50IHRvIGl0cyBkcml2ZXIncworZGlyZWN0b3J5IGFsc28uIAorCisKK2RyaXZlcl9yZWdpc3Rlcgorfn5+fn5+fn5+fn5+fn5+CisKK1RoZSBwcm9jZXNzIGlzIGFsbW9zdCBpZGVudGljYWwgZm9yIHdoZW4gYSBuZXcgZHJpdmVyIGlzIGFkZGVkLiAKK1RoZSBidXMncyBsaXN0IG9mIGRldmljZXMgaXMgaXRlcmF0ZWQgb3ZlciB0byBmaW5kIGEgbWF0Y2guIERldmljZXMKK3RoYXQgYWxyZWFkeSBoYXZlIGEgZHJpdmVyIGFyZSBza2lwcGVkLiBBbGwgdGhlIGRldmljZXMgYXJlIGl0ZXJhdGVkCitvdmVyLCB0byBiaW5kIGFzIG1hbnkgZGV2aWNlcyBhcyBwb3NzaWJsZSB0byB0aGUgZHJpdmVyLgorCisKK1JlbW92YWwKK35+fn5+fn4KKworV2hlbiBhIGRldmljZSBpcyByZW1vdmVkLCB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBpdCB3aWxsIGV2ZW50dWFsbHkKK2dvIHRvIDAuIFdoZW4gaXQgZG9lcywgdGhlIHJlbW92ZSBjYWxsYmFjayBvZiB0aGUgZHJpdmVyIGlzIGNhbGxlZC4gSXQKK2lzIHJlbW92ZWQgZnJvbSB0aGUgZHJpdmVyJ3MgbGlzdCBvZiBkZXZpY2VzIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50CitvZiB0aGUgZHJpdmVyIGlzIGRlY3JlbWVudGVkLiBBbGwgc3ltbGlua3MgYmV0d2VlbiB0aGUgdHdvIGFyZSByZW1vdmVkLgorCitXaGVuIGEgZHJpdmVyIGlzIHJlbW92ZWQsIHRoZSBsaXN0IG9mIGRldmljZXMgdGhhdCBpdCBzdXBwb3J0cyBpcworaXRlcmF0ZWQgb3ZlciwgYW5kIHRoZSBkcml2ZXIncyByZW1vdmUgY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBlYWNoCitvbmUuIFRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoYXQgbGlzdCBhbmQgdGhlIHN5bWxpbmtzIHJlbW92ZWQuIAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9idXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvYnVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDYyYzdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvYnVzLnR4dApAQCAtMCwwICsxLDE2MCBAQAorCitCdXMgVHlwZXMgCisKK0RlZmluaXRpb24KK35+fn5+fn5+fn4KKworc3RydWN0IGJ1c190eXBlIHsKKwljaGFyCQkJKiBuYW1lOworCisJc3RydWN0IHN1YnN5c3RlbQlzdWJzeXM7CisJc3RydWN0IGtzZXQJCWRyaXZlcnM7CisJc3RydWN0IGtzZXQJCWRldmljZXM7CisKKwlzdHJ1Y3QgYnVzX2F0dHJpYnV0ZQkqIGJ1c19hdHRyczsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQkqIGRldl9hdHRyczsKKwlzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZQkqIGRydl9hdHRyczsKKworCWludAkJKCptYXRjaCkoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOworCWludAkJKCpob3RwbHVnKSAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgCisJCQkJICAgIGludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpOworCWludAkJKCpzdXNwZW5kKShzdHJ1Y3QgZGV2aWNlICogZGV2LCB1MzIgc3RhdGUpOworCWludAkJKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworfTsKKworaW50IGJ1c19yZWdpc3RlcihzdHJ1Y3QgYnVzX3R5cGUgKiBidXMpOworCisKK0RlY2xhcmF0aW9uCit+fn5+fn5+fn5+fgorCitFYWNoIGJ1cyB0eXBlIGluIHRoZSBrZXJuZWwgKFBDSSwgVVNCLCBldGMpIHNob3VsZCBkZWNsYXJlIG9uZSBzdGF0aWMKK29iamVjdCBvZiB0aGlzIHR5cGUuIFRoZXkgbXVzdCBpbml0aWFsaXplIHRoZSBuYW1lIGZpZWxkLCBhbmQgbWF5CitvcHRpb25hbGx5IGluaXRpYWxpemUgdGhlIG1hdGNoIGNhbGxiYWNrLgorCitzdHJ1Y3QgYnVzX3R5cGUgcGNpX2J1c190eXBlID0geworICAgICAgIC5uYW1lCT0gInBjaSIsCisgICAgICAgLm1hdGNoCT0gcGNpX2J1c19tYXRjaCwKK307CisKK1RoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGV4cG9ydGVkIHRvIGRyaXZlcnMgaW4gYSBoZWFkZXIgZmlsZToKKworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGU7CisKKworUmVnaXN0cmF0aW9uCit+fn5+fn5+fn5+fn4KKworV2hlbiBhIGJ1cyBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQsIGl0IGNhbGxzIGJ1c19yZWdpc3Rlci4gVGhpcworaW5pdGlhbGl6ZXMgdGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBpbiB0aGUgYnVzIG9iamVjdCBhbmQgaW5zZXJ0cyBpdAoraW50byBhIGdsb2JhbCBsaXN0IG9mIGJ1cyB0eXBlcy4gT25jZSB0aGUgYnVzIG9iamVjdCBpcyByZWdpc3RlcmVkLCAKK3RoZSBmaWVsZHMgaW4gaXQgYXJlIHVzYWJsZSBieSB0aGUgYnVzIGRyaXZlci4gCisKKworQ2FsbGJhY2tzCit+fn5+fn5+fn4KKworbWF0Y2goKTogQXR0YWNoaW5nIERyaXZlcnMgdG8gRGV2aWNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZm9ybWF0IG9mIGRldmljZSBJRCBzdHJ1Y3R1cmVzIGFuZCB0aGUgc2VtYW50aWNzIGZvciBjb21wYXJpbmcKK3RoZW0gYXJlIGluaGVyZW50bHkgYnVzLXNwZWNpZmljLiBEcml2ZXJzIHR5cGljYWxseSBkZWNsYXJlIGFuIGFycmF5CitvZiBkZXZpY2UgSURzIG9mIGRldmljZXMgdGhleSBzdXBwb3J0IHRoYXQgcmVzaWRlIGluIGEgYnVzLXNwZWNpZmljCitkcml2ZXIgc3RydWN0dXJlLiAKKworVGhlIHB1cnBvc2Ugb2YgdGhlIG1hdGNoIGNhbGxiYWNrIGlzIHByb3ZpZGUgdGhlIGJ1cyBhbiBvcHBvcnR1bml0eSB0bworZGV0ZXJtaW5lIGlmIGEgcGFydGljdWxhciBkcml2ZXIgc3VwcG9ydHMgYSBwYXJ0aWN1bGFyIGRldmljZSBieQorY29tcGFyaW5nIHRoZSBkZXZpY2UgSURzIHRoZSBkcml2ZXIgc3VwcG9ydHMgd2l0aCB0aGUgZGV2aWNlIElEIG9mIGEKK3BhcnRpY3VsYXIgZGV2aWNlLCB3aXRob3V0IHNhY3JpZmljaW5nIGJ1cy1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5IG9yCit0eXBlLXNhZmV0eS4gCisKK1doZW4gYSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBidXMsIHRoZSBidXMncyBsaXN0IG9mIGRldmljZXMgaXMKK2l0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgbWF0Y2ggY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBlYWNoIGRldmljZSB0aGF0Citkb2VzIG5vdCBoYXZlIGEgZHJpdmVyIGFzc29jaWF0ZWQgd2l0aCBpdC4gCisKKworCitEZXZpY2UgYW5kIERyaXZlciBMaXN0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGxpc3RzIG9mIGRldmljZXMgYW5kIGRyaXZlcnMgYXJlIGludGVuZGVkIHRvIHJlcGxhY2UgdGhlIGxvY2FsCitsaXN0cyB0aGF0IG1hbnkgYnVzZXMga2VlcC4gVGhleSBhcmUgbGlzdHMgb2Ygc3RydWN0IGRldmljZXMgYW5kCitzdHJ1Y3QgZGV2aWNlX2RyaXZlcnMsIHJlc3BlY3RpdmVseS4gQnVzIGRyaXZlcnMgYXJlIGZyZWUgdG8gdXNlIHRoZQorbGlzdHMgYXMgdGhleSBwbGVhc2UsIGJ1dCBjb252ZXJzaW9uIHRvIHRoZSBidXMtc3BlY2lmaWMgdHlwZSBtYXkgYmUKK25lY2Vzc2FyeS4gCisKK1RoZSBMRE0gY29yZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIGZvciBpdGVyYXRpbmcgb3ZlciBlYWNoIGxpc3QuCisKK2ludCBidXNfZm9yX2VhY2hfZGV2KHN0cnVjdCBidXNfdHlwZSAqIGJ1cywgc3RydWN0IGRldmljZSAqIHN0YXJ0LCB2b2lkICogZGF0YSwKKwkJICAgICBpbnQgKCpmbikoc3RydWN0IGRldmljZSAqLCB2b2lkICopKTsKKworaW50IGJ1c19mb3JfZWFjaF9kcnYoc3RydWN0IGJ1c190eXBlICogYnVzLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIHN0YXJ0LCAKKwkJICAgICB2b2lkICogZGF0YSwgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHZvaWQgKikpOworCitUaGVzZSBoZWxwZXJzIGl0ZXJhdGUgb3ZlciB0aGUgcmVzcGVjdGl2ZSBsaXN0LCBhbmQgY2FsbCB0aGUgY2FsbGJhY2sKK2ZvciBlYWNoIGRldmljZSBvciBkcml2ZXIgaW4gdGhlIGxpc3QuIEFsbCBsaXN0IGFjY2Vzc2VzIGFyZQorc3luY2hyb25pemVkIGJ5IHRha2luZyB0aGUgYnVzJ3MgbG9jayAocmVhZCBjdXJyZW50bHkpLiBUaGUgcmVmZXJlbmNlCitjb3VudCBvbiBlYWNoIG9iamVjdCBpbiB0aGUgbGlzdCBpcyBpbmNyZW1lbnRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGlzCitjYWxsZWQ7IGl0IGlzIGRlY3JlbWVudGVkIGFmdGVyIHRoZSBuZXh0IG9iamVjdCBoYXMgYmVlbiBvYnRhaW5lZC4gVGhlCitsb2NrIGlzIG5vdCBoZWxkIHdoZW4gY2FsbGluZyB0aGUgY2FsbGJhY2suIAorCisKK3N5c2ZzCit+fn5+fn5+fgorVGhlcmUgaXMgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkICdidXMnLgorCitFYWNoIGJ1cyBnZXRzIGEgZGlyZWN0b3J5IGluIHRoZSBidXMgZGlyZWN0b3J5LCBhbG9uZyB3aXRoIHR3byBkZWZhdWx0CitkaXJlY3RvcmllczoKKworCS9zeXMvYnVzL3BjaS8KKwl8LS0gZGV2aWNlcworCWAtLSBkcml2ZXJzCisKK0RyaXZlcnMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBidXMgZ2V0IGEgZGlyZWN0b3J5IGluIHRoZSBidXMncyBkcml2ZXJzCitkaXJlY3Rvcnk6CisKKwkvc3lzL2J1cy9wY2kvCisJfC0tIGRldmljZXMKKwlgLS0gZHJpdmVycworCSAgICB8LS0gSW50ZWwgSUNICisJICAgIHwtLSBJbnRlbCBJQ0ggSm95c3RpY2sKKwkgICAgfC0tIGFncGdhcnQKKwkgICAgYC0tIGUxMDAKKworRWFjaCBkZXZpY2UgdGhhdCBpcyBkaXNjb3ZlcmVkIG9uIGEgYnVzIG9mIHRoYXQgdHlwZSBnZXRzIGEgc3ltbGluayBpbgordGhlIGJ1cydzIGRldmljZXMgZGlyZWN0b3J5IHRvIHRoZSBkZXZpY2UncyBkaXJlY3RvcnkgaW4gdGhlIHBoeXNpY2FsCitoaWVyYXJjaHk6CisKKwkvc3lzL2J1cy9wY2kvCisJfC0tIGRldmljZXMKKwl8ICAgfC0tIDAwOjAwLjAgLT4gLi4vLi4vLi4vcm9vdC9wY2kwLzAwOjAwLjAKKwl8ICAgfC0tIDAwOjAxLjAgLT4gLi4vLi4vLi4vcm9vdC9wY2kwLzAwOjAxLjAKKwl8ICAgYC0tIDAwOjAyLjAgLT4gLi4vLi4vLi4vcm9vdC9wY2kwLzAwOjAyLjAKKwlgLS0gZHJpdmVycworCisKK0V4cG9ydGluZyBBdHRyaWJ1dGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorc3RydWN0IGJ1c19hdHRyaWJ1dGUgeworCXN0cnVjdCBhdHRyaWJ1dGUJYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGJ1c190eXBlICosIGNoYXIgKiBidWYpOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGJ1c190eXBlICosIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCk7Cit9OworCitCdXMgZHJpdmVycyBjYW4gZXhwb3J0IGF0dHJpYnV0ZXMgdXNpbmcgdGhlIEJVU19BVFRSIG1hY3JvIHRoYXQgd29ya3MKK3NpbWlsYXJseSB0byB0aGUgREVWSUNFX0FUVFIgbWFjcm8gZm9yIGRldmljZXMuIEZvciBleGFtcGxlLCBhIGRlZmluaXRpb24gCitsaWtlIHRoaXM6CisKK3N0YXRpYyBCVVNfQVRUUihkZWJ1ZywwNjQ0LHNob3dfZGVidWcsc3RvcmVfZGVidWcpOworCitpcyBlcXVpdmFsZW50IHRvIGRlY2xhcmluZzoKKworc3RhdGljIGJ1c19hdHRyaWJ1dGUgYnVzX2F0dHJfZGVidWc7CisKK1RoaXMgY2FuIHRoZW4gYmUgdXNlZCB0byBhZGQgYW5kIHJlbW92ZSB0aGUgYXR0cmlidXRlIGZyb20gdGhlIGJ1cydzCitzeXNmcyBkaXJlY3RvcnkgdXNpbmc6CisKK2ludCBidXNfY3JlYXRlX2ZpbGUoc3RydWN0IGJ1c190eXBlICosIHN0cnVjdCBidXNfYXR0cmlidXRlICopOwordm9pZCBidXNfcmVtb3ZlX2ZpbGUoc3RydWN0IGJ1c190eXBlICosIHN0cnVjdCBidXNfYXR0cmlidXRlICopOworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2NsYXNzLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2NsYXNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDFkODkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvY2xhc3MudHh0CkBAIC0wLDAgKzEsMTYyIEBACisKK0RldmljZSBDbGFzc2VzCisKKworSW50cm9kdWN0aW9uCit+fn5+fn5+fn5+fn4KK0EgZGV2aWNlIGNsYXNzIGRlc2NyaWJlcyBhIHR5cGUgb2YgZGV2aWNlLCBsaWtlIGFuIGF1ZGlvIG9yIG5ldHdvcmsKK2RldmljZS4gVGhlIGZvbGxvd2luZyBkZXZpY2UgY2xhc3NlcyBoYXZlIGJlZW4gaWRlbnRpZmllZDoKKworPEluc2VydCBMaXN0IG9mIERldmljZSBDbGFzc2VzIEhlcmU+CisKKworRWFjaCBkZXZpY2UgY2xhc3MgZGVmaW5lcyBhIHNldCBvZiBzZW1hbnRpY3MgYW5kIGEgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlCit0aGF0IGRldmljZXMgb2YgdGhhdCBjbGFzcyBhZGhlcmUgdG8uIERldmljZSBkcml2ZXJzIGFyZSB0aGUKK2ltcGxlbWVudGlvbiBvZiB0aGF0IHByb2dyYW1taW5nIGludGVyZmFjZSBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZSBvbgorYSBwYXJ0aWN1bGFyIGJ1cy4gCisKK0RldmljZSBjbGFzc2VzIGFyZSBhZ25vc3RpYyB3aXRoIHJlc3BlY3QgdG8gd2hhdCBidXMgYSBkZXZpY2UgcmVzaWRlcworb24uIAorCisKK1Byb2dyYW1taW5nIEludGVyZmFjZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgZGV2aWNlIGNsYXNzIHN0cnVjdHVyZSBsb29rcyBsaWtlOiAKKworCit0eXBlZGVmIGludCAoKmRldmNsYXNzX2FkZCkoc3RydWN0IGRldmljZSAqKTsKK3R5cGVkZWYgdm9pZCAoKmRldmNsYXNzX3JlbW92ZSkoc3RydWN0IGRldmljZSAqKTsKKworc3RydWN0IGRldmljZV9jbGFzcyB7CisJY2hhcgkJCSogbmFtZTsKKwlyd2xvY2tfdAkJbG9jazsKKwl1MzIJCQlkZXZudW07CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCisJc3RydWN0IGxpc3RfaGVhZAlkcml2ZXJzOworCXN0cnVjdCBsaXN0X2hlYWQJaW50Zl9saXN0OworCisJc3RydWN0IGRyaXZlcl9kaXJfZW50cnkJZGlyOworCXN0cnVjdCBkcml2ZXJfZGlyX2VudHJ5CWRldmljZV9kaXI7CisJc3RydWN0IGRyaXZlcl9kaXJfZW50cnkJZHJpdmVyX2RpcjsKKworCWRldmNsYXNzX2FkZAkJYWRkX2RldmljZTsKKwlkZXZjbGFzc19yZW1vdmUJCXJlbW92ZV9kZXZpY2U7Cit9OworCitBIHR5cGljYWwgZGV2aWNlIGNsYXNzIGRlZmluaXRpb24gd291bGQgbG9vayBsaWtlOiAKKworc3RydWN0IGRldmljZV9jbGFzcyBpbnB1dF9kZXZjbGFzcyA9IHsKKyAgICAgICAgLm5hbWUJCT0gImlucHV0IiwKKyAgICAgICAgLmFkZF9kZXZpY2UJPSBpbnB1dF9hZGRfZGV2aWNlLAorCS5yZW1vdmVfZGV2aWNlCT0gaW5wdXRfcmVtb3ZlX2RldmljZSwKK307CisKK0VhY2ggZGV2aWNlIGNsYXNzIHN0cnVjdHVyZSBzaG91bGQgYmUgZXhwb3J0ZWQgaW4gYSBoZWFkZXIgZmlsZSBzbyBpdAorY2FuIGJlIHVzZWQgYnkgZHJpdmVycywgZXh0ZW5zaW9ucyBhbmQgaW50ZXJmYWNlcy4KKworRGV2aWNlIGNsYXNzZXMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVucmVnaXN0ZXJlZCB3aXRoIHRoZSBjb3JlIHVzaW5nOiAKKworaW50IGRldmNsYXNzX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfY2xhc3MgKiBjbHMpOwordm9pZCBkZXZjbGFzc191bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfY2xhc3MgKiBjbHMpOworCisKK0RldmljZXMKK35+fn5+fn4KK0FzIGRldmljZXMgYXJlIGJvdW5kIHRvIGRyaXZlcnMsIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBkZXZpY2UgY2xhc3MKK3RoYXQgdGhlIGRyaXZlciBiZWxvbmdzIHRvLiBCZWZvcmUgdGhlIGRyaXZlciBtb2RlbCBjb3JlLCB0aGlzIHdvdWxkCit0eXBpY2FsbHkgaGFwcGVuIGR1cmluZyB0aGUgZHJpdmVyJ3MgcHJvYmUoKSBjYWxsYmFjaywgb25jZSB0aGUgZGV2aWNlCitoYXMgYmVlbiBpbml0aWFsaXplZC4gSXQgbm93IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2JlKCkgY2FsbGJhY2sKK2ZpbmlzaGVzIGZyb20gdGhlIGNvcmUuIAorCitUaGUgZGV2aWNlIGlzIGVudW1lcmF0ZWQgaW4gdGhlIGNsYXNzLiBFYWNoIHRpbWUgYSBkZXZpY2UgaXMgYWRkZWQgdG8KK3RoZSBjbGFzcywgdGhlIGNsYXNzJ3MgZGV2bnVtIGZpZWxkIGlzIGluY3JlbWVudGVkIGFuZCBhc3NpZ25lZCB0byB0aGUKK2RldmljZS4gVGhlIGZpZWxkIGlzIG5ldmVyIGRlY3JlbWVudGVkLCBzbyBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQKK2Zyb20gdGhlIGNsYXNzIGFuZCByZS1hZGRlZCwgaXQgd2lsbCByZWNlaXZlIGEgZGlmZmVyZW50IGVudW1lcmF0ZWQKK3ZhbHVlLiAKKworVGhlIGNsYXNzIGlzIGFsbG93ZWQgdG8gY3JlYXRlIGEgY2xhc3Mtc3BlY2lmaWMgc3RydWN0dXJlIGZvciB0aGUKK2RldmljZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGRldmljZSdzIGNsYXNzX2RhdGEgcG9pbnRlci4gCisKK1RoZXJlIGlzIG5vIGxpc3Qgb2YgZGV2aWNlcyBpbiB0aGUgZGV2aWNlIGNsYXNzLiBFYWNoIGRyaXZlciBoYXMgYQorbGlzdCBvZiBkZXZpY2VzIHRoYXQgaXQgc3VwcG9ydHMuIFRoZSBkZXZpY2UgY2xhc3MgaGFzIGEgbGlzdCBvZgorZHJpdmVycyBvZiB0aGF0IHBhcnRpY3VsYXIgY2xhc3MuIFRvIGFjY2VzcyBhbGwgb2YgdGhlIGRldmljZXMgaW4gdGhlCitjbGFzcywgaXRlcmF0ZSBvdmVyIHRoZSBkZXZpY2UgbGlzdHMgb2YgZWFjaCBkcml2ZXIgaW4gdGhlIGNsYXNzLgorCisKK0RldmljZSBEcml2ZXJzCit+fn5+fn5+fn5+fn5+fgorRGV2aWNlIGRyaXZlcnMgYXJlIGFkZGVkIHRvIGRldmljZSBjbGFzc2VzIHdoZW4gdGhleSBhcmUgcmVnaXN0ZXJlZAord2l0aCB0aGUgY29yZS4gQSBkcml2ZXIgc3BlY2lmaWVzIHRoZSBjbGFzcyBpdCBiZWxvbmdzIHRvIGJ5IHNldHRpbmcKK3RoZSBzdHJ1Y3QgZGV2aWNlX2RyaXZlcjo6ZGV2Y2xhc3MgZmllbGQuIAorCisKK3N5c2ZzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZXJlIGlzIGEgdG9wLWxldmVsIHN5c2ZzIGRpcmVjdG9yeSBuYW1lZCAnY2xhc3MnLiAKKworRWFjaCBjbGFzcyBnZXRzIGEgZGlyZWN0b3J5IGluIHRoZSBjbGFzcyBkaXJlY3RvcnksIGFsb25nIHdpdGggdHdvCitkZWZhdWx0IHN1YmRpcmVjdG9yaWVzOgorCisgICAgICAgIGNsYXNzLworICAgICAgICBgLS0gaW5wdXQKKyAgICAgICAgICAgIHwtLSBkZXZpY2VzCisgICAgICAgICAgICBgLS0gZHJpdmVycworCisKK0RyaXZlcnMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjbGFzcyBnZXQgYSBzeW1saW5rIGluIHRoZSBkcml2ZXJzLyBkaXJlY3RvcnkgCit0aGF0IHBvaW50cyB0byB0aGUgZHJpdmVyJ3MgZGlyZWN0b3J5ICh1bmRlciBpdHMgYnVzIGRpcmVjdG9yeSk6CisKKyAgIGNsYXNzLworICAgYC0tIGlucHV0CisgICAgICAgfC0tIGRldmljZXMKKyAgICAgICBgLS0gZHJpdmVycworICAgICAgICAgICBgLS0gdXNiOnVzYl9tb3VzZSAtPiAuLi8uLi8uLi9idXMvZHJpdmVycy91c2JfbW91c2UvCisKKworRWFjaCBkZXZpY2UgZ2V0cyBhIHN5bWxpbmsgaW4gdGhlIGRldmljZXMvIGRpcmVjdG9yeSB0aGF0IHBvaW50cyB0byB0aGUgCitkZXZpY2UncyBkaXJlY3RvcnkgaW4gdGhlIHBoeXNpY2FsIGhpZXJhcmNoeToKKworICAgY2xhc3MvCisgICBgLS0gaW5wdXQKKyAgICAgICB8LS0gZGV2aWNlcworICAgICAgIHwgICBgLS0gMSAtPiAuLi8uLi8uLi9yb290L3BjaTAvMDA6MWYuMC91c2JfYnVzLzAwOjFmLjItMTowLworICAgICAgIGAtLSBkcml2ZXJzCisKKworRXhwb3J0aW5nIEF0dHJpYnV0ZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CitzdHJ1Y3QgZGV2Y2xhc3NfYXR0cmlidXRlIHsKKyAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAgICAgICAgYXR0cjsKKyAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2VfY2xhc3MgKiwgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2ZmKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlX2NsYXNzICosIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZik7Cit9OworCitDbGFzcyBkcml2ZXJzIGNhbiBleHBvcnQgYXR0cmlidXRlcyB1c2luZyB0aGUgREVWQ0xBU1NfQVRUUiBtYWNybyB0aGF0IHdvcmtzCitzaW1pbGFybHkgdG8gdGhlIERFVklDRV9BVFRSIG1hY3JvIGZvciBkZXZpY2VzLiBGb3IgZXhhbXBsZSwgYSBkZWZpbml0aW9uIAorbGlrZSB0aGlzOgorCitzdGF0aWMgREVWQ0xBU1NfQVRUUihkZWJ1ZywwNjQ0LHNob3dfZGVidWcsc3RvcmVfZGVidWcpOworCitpcyBlcXVpdmFsZW50IHRvIGRlY2xhcmluZzoKKworc3RhdGljIGRldmNsYXNzX2F0dHJpYnV0ZSBkZXZjbGFzc19hdHRyX2RlYnVnOworCitUaGUgYnVzIGRyaXZlciBjYW4gYWRkIGFuZCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSBjbGFzcydzCitzeXNmcyBkaXJlY3RvcnkgdXNpbmc6CisKK2ludCBkZXZjbGFzc19jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2NsYXNzICosIHN0cnVjdCBkZXZjbGFzc19hdHRyaWJ1dGUgKik7Cit2b2lkIGRldmNsYXNzX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2VfY2xhc3MgKiwgc3RydWN0IGRldmNsYXNzX2F0dHJpYnV0ZSAqKTsKKworSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBmaWxlIHdpbGwgYmUgbmFtZWQgJ2RlYnVnJyBpbiBwbGFjZWQgaW4gdGhlCitjbGFzcydzIGRpcmVjdG9yeSBpbiBzeXNmcy4gCisKKworSW50ZXJmYWNlcworfn5+fn5+fn5+fgorVGhlcmUgbWF5IGV4aXN0IG11bHRpcGxlIG1lY2hhbmlzbXMgZm9yIGFjY2Vzc2luZyB0aGUgc2FtZSBkZXZpY2Ugb2YgYQorcGFydGljdWxhciBjbGFzcyB0eXBlLiBEZXZpY2UgaW50ZXJmYWNlcyBkZXNjcmliZSB0aGVzZSBtZWNoYW5pc21zLiAKKworV2hlbiBhIGRldmljZSBpcyBhZGRlZCB0byBhIGRldmljZSBjbGFzcywgdGhlIGNvcmUgYXR0ZW1wdHMgdG8gYWRkIGl0Cit0byBldmVyeSBpbnRlcmZhY2UgdGhhdCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGRldmljZSBjbGFzcy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZGV2aWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldmljZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjYzVkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldmljZS50eHQKQEAgLTAsMCArMSwxNTQgQEAKKworVGhlIEJhc2ljIERldmljZSBTdHJ1Y3R1cmUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK3N0cnVjdCBkZXZpY2UgeworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGdfbGlzdDsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBub2RlOworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGJ1c19saXN0OworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRyaXZlcl9saXN0OworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGludGZfbGlzdDsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKKyAgICAgICAgc3RydWN0IGRldmljZSAgICogcGFyZW50OworCisgICAgICAgIGNoYXIgICAgbmFtZVtERVZJQ0VfTkFNRV9TSVpFXTsKKyAgICAgICAgY2hhciAgICBidXNfaWRbQlVTX0lEX1NJWkVdOworCisgICAgICAgIHNwaW5sb2NrX3QgICAgICBsb2NrOworICAgICAgICBhdG9taWNfdCAgICAgICAgcmVmY291bnQ7CisKKyAgICAgICAgc3RydWN0IGJ1c190eXBlICogYnVzOworICAgICAgICBzdHJ1Y3QgZHJpdmVyX2Rpcl9lbnRyeSBkaXI7CisKKwl1MzIJCWNsYXNzX251bTsKKworICAgICAgICBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyOworICAgICAgICB2b2lkICAgICAgICAgICAgKmRyaXZlcl9kYXRhOworICAgICAgICB2b2lkICAgICAgICAgICAgKnBsYXRmb3JtX2RhdGE7CisKKyAgICAgICAgdTMyICAgICAgICAgICAgIGN1cnJlbnRfc3RhdGU7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNhdmVkX3N0YXRlOworCisgICAgICAgIHZvaWQgICAgKCpyZWxlYXNlKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK307CisKK0ZpZWxkcyAKK35+fn5+fgorZ19saXN0OglOb2RlIGluIHRoZSBnbG9iYWwgZGV2aWNlIGxpc3QuCisKK25vZGU6CU5vZGUgaW4gZGV2aWNlJ3MgcGFyZW50J3MgY2hpbGRyZW4gbGlzdC4KKworYnVzX2xpc3Q6IE5vZGUgaW4gZGV2aWNlJ3MgYnVzJ3MgZGV2aWNlcyBsaXN0LgorCitkcml2ZXJfbGlzdDogICBOb2RlIGluIGRldmljZSdzIGRyaXZlcidzIGRldmljZXMgbGlzdC4KKworaW50Zl9saXN0OiAgICAgTGlzdCBvZiBpbnRmX2RhdGEuIFRoZXJlIGlzIG9uZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvcgorCSAgICAgICBlYWNoIGludGVyZmFjZSB0aGF0IHRoZSBkZXZpY2Ugc3VwcG9ydHMuCisKK2NoaWxkcmVuOiAgICAgIExpc3Qgb2YgY2hpbGQgZGV2aWNlcy4KKworcGFyZW50OiAgICAgICAgKioqIEZJWE1FICoqKgorCituYW1lOgkgICAgICAgQVNDSUkgZGVzY3JpcHRpb24gb2YgZGV2aWNlLiAKKwkgICAgICAgRXhhbXBsZTogIiAzQ29tIENvcnBvcmF0aW9uIDNjOTA1IDEwMEJhc2VUWCBbQm9vbWVyYW5nXSIKKworYnVzX2lkOgkgICAgICAgQVNDSUkgcmVwcmVzZW50YXRpb24gb2YgZGV2aWNlJ3MgYnVzIHBvc2l0aW9uLiBUaGlzIAorCSAgICAgICBmaWVsZCBzaG91bGQgYmUgYSBuYW1lIHVuaXF1ZSBhY3Jvc3MgYWxsIGRldmljZXMgb24gdGhlCisJICAgICAgIGJ1cyB0eXBlIHRoZSBkZXZpY2UgYmVsb25ncyB0by4gCisKKwkgICAgICAgRXhhbXBsZTogUENJIGJ1c19pZHMgYXJlIGluIHRoZSBmb3JtIG9mCisJICAgICAgIDxidXMgbnVtYmVyPjo8c2xvdCBudW1iZXI+LjxmdW5jdGlvbiBudW1iZXI+IAorCSAgICAgICBUaGlzIG5hbWUgaXMgdW5pcXVlIGFjcm9zcyBhbGwgUENJIGRldmljZXMgaW4gdGhlIHN5c3RlbS4KKworbG9jazoJICAgICAgIFNwaW5sb2NrIGZvciB0aGUgZGV2aWNlLiAKKworcmVmY291bnQ6ICAgICAgUmVmZXJlbmNlIGNvdW50IG9uIHRoZSBkZXZpY2UuCisKK2J1czoJICAgICAgIFBvaW50ZXIgdG8gc3RydWN0IGJ1c190eXBlIHRoYXQgZGV2aWNlIGJlbG9uZ3MgdG8uCisKK2RpcjoJICAgICAgIERldmljZSdzIHN5c2ZzIGRpcmVjdG9yeS4KKworY2xhc3NfbnVtOiAgICAgQ2xhc3MtZW51bWVyYXRlZCB2YWx1ZSBvZiB0aGUgZGV2aWNlLgorCitkcml2ZXI6CSAgICAgICBQb2ludGVyIHRvIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRoYXQgY29udHJvbHMgdGhlIGRldmljZS4KKworZHJpdmVyX2RhdGE6ICAgRHJpdmVyLXNwZWNpZmljIGRhdGEuCisKK3BsYXRmb3JtX2RhdGE6IFBsYXRmb3JtIGRhdGEgc3BlY2lmaWMgdG8gdGhlIGRldmljZS4KKworY3VycmVudF9zdGF0ZTogQ3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgZGV2aWNlLgorCitzYXZlZF9zdGF0ZTogICBQb2ludGVyIHRvIHNhdmVkIHN0YXRlIG9mIHRoZSBkZXZpY2UuIFRoaXMgaXMgdXNhYmxlIGJ5CisJICAgICAgIHRoZSBkZXZpY2UgZHJpdmVyIGNvbnRyb2xsaW5nIHRoZSBkZXZpY2UuCisKK3JlbGVhc2U6ICAgICAgIENhbGxiYWNrIHRvIGZyZWUgdGhlIGRldmljZSBhZnRlciBhbGwgcmVmZXJlbmNlcyBoYXZlIAorCSAgICAgICBnb25lIGF3YXkuIFRoaXMgc2hvdWxkIGJlIHNldCBieSB0aGUgYWxsb2NhdG9yIG9mIHRoZSAKKwkgICAgICAgZGV2aWNlIChpLmUuIHRoZSBidXMgZHJpdmVyIHRoYXQgZGlzY292ZXJlZCB0aGUgZGV2aWNlKS4KKworCitQcm9ncmFtbWluZyBJbnRlcmZhY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGJ1cyBkcml2ZXIgdGhhdCBkaXNjb3ZlcnMgdGhlIGRldmljZSB1c2VzIHRoaXMgdG8gcmVnaXN0ZXIgdGhlCitkZXZpY2Ugd2l0aCB0aGUgY29yZToKKworaW50IGRldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKworVGhlIGJ1cyBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworICAgIC0gcGFyZW50CisgICAgLSBuYW1lCisgICAgLSBidXNfaWQKKyAgICAtIGJ1cworCitBIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIGNvcmUgd2hlbiBpdHMgcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8KKzAuIFRoZSByZWZlcmVuY2UgY291bnQgY2FuIGJlIGFkanVzdGVkIHVzaW5nOgorCitzdHJ1Y3QgZGV2aWNlICogZ2V0X2RldmljZShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK3ZvaWQgcHV0X2RldmljZShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKworZ2V0X2RldmljZSgpIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IGRldmljZSBwYXNzZWQgdG8gaXQKK2lmIHRoZSByZWZlcmVuY2UgaXMgbm90IGFscmVhZHkgMCAoaWYgaXQncyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZworcmVtb3ZlZCBhbHJlYWR5KS4KKworQSBkcml2ZXIgY2FuIGFjY2VzcyB0aGUgbG9jayBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB1c2luZzogCisKK3ZvaWQgbG9ja19kZXZpY2Uoc3RydWN0IGRldmljZSAqIGRldik7Cit2b2lkIHVubG9ja19kZXZpY2Uoc3RydWN0IGRldmljZSAqIGRldik7CisKKworQXR0cmlidXRlcworfn5+fn5+fn5+fgorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgeworICAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICAgICAgICBhdHRyOworICAgICAgICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZSAqIGRldiwgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2ZmKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpOworfTsKKworQXR0cmlidXRlcyBvZiBkZXZpY2VzIGNhbiBiZSBleHBvcnRlZCB2aWEgZHJpdmVycyB1c2luZyBhIHNpbXBsZQorcHJvY2ZzLWxpa2UgaW50ZXJmYWNlLiAKKworUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorb24gaG93IHN5c2ZzIHdvcmtzLgorCitBdHRyaWJ1dGVzIGFyZSBkZWNsYXJlZCB1c2luZyBhIG1hY3JvIGNhbGxlZCBERVZJQ0VfQVRUUjoKKworI2RlZmluZSBERVZJQ0VfQVRUUihuYW1lLG1vZGUsc2hvdyxzdG9yZSkKKworRXhhbXBsZToKKworREVWSUNFX0FUVFIocG93ZXIsMDY0NCxzaG93X3Bvd2VyLHN0b3JlX3Bvd2VyKTsKKworVGhpcyBkZWNsYXJlcyBhIHN0cnVjdHVyZSBvZiB0eXBlIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIG5hbWVkCisnZGV2X2F0dHJfcG93ZXInLiBUaGlzIGNhbiB0aGVuIGJlIGFkZGVkIGFuZCByZW1vdmVkIHRvIHRoZSBkZXZpY2UncworZGlyZWN0b3J5IHVzaW5nOgorCitpbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBlbnRyeSk7Cit2b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIpOworCitFeGFtcGxlOgorCitkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCZkZXZfYXR0cl9wb3dlcik7CitkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCZkZXZfYXR0cl9wb3dlcik7CisKK1RoZSBmaWxlIG5hbWUgd2lsbCBiZSAncG93ZXInIHdpdGggYSBtb2RlIG9mIDA2NDQgKC1ydy1yLS1yLS0pLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ0Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dApAQCAtMCwwICsxLDI4NyBAQAorCitEZXZpY2UgRHJpdmVycworCitzdHJ1Y3QgZGV2aWNlX2RyaXZlciB7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICogbmFtZTsKKyAgICAgICAgc3RydWN0IGJ1c190eXBlICAgICAgICAgKiBidXM7CisKKyAgICAgICAgcndsb2NrX3QgICAgICAgICAgICAgICAgbG9jazsKKyAgICAgICAgYXRvbWljX3QgICAgICAgICAgICAgICAgcmVmY291bnQ7CisKKyAgICAgICAgbGlzdF90ICAgICAgICAgICAgICAgICAgYnVzX2xpc3Q7CisgICAgICAgIGxpc3RfdCAgICAgICAgICAgICAgICAgIGRldmljZXM7CisKKyAgICAgICAgc3RydWN0IGRyaXZlcl9kaXJfZW50cnkgZGlyOworCisgICAgICAgIGludCAgICAgKCpwcm9iZSkgICAgICAgIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKyAgICAgICAgaW50ICAgICAoKnJlbW92ZSkgICAgICAgKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworCisgICAgICAgIGludCAgICAgKCpzdXNwZW5kKSAgICAgIChzdHJ1Y3QgZGV2aWNlICogZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCk7CisgICAgICAgIGludCAgICAgKCpyZXN1bWUpICAgICAgIChzdHJ1Y3QgZGV2aWNlICogZGV2LCB1MzIgbGV2ZWwpOworCisgICAgICAgIHZvaWQgICAgKCpyZWxlYXNlKSAgICAgIChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRydik7Cit9OworCisKKworQWxsb2NhdGlvbgorfn5+fn5+fn5+fgorCitEZXZpY2UgZHJpdmVycyBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcy4gVGhvdWdoIHRoZXJlIG1heQorYmUgbXVsdGlwbGUgZGV2aWNlcyBpbiBhIHN5c3RlbSB0aGF0IGEgZHJpdmVyIHN1cHBvcnRzLCBzdHJ1Y3QKK2RldmljZV9kcml2ZXIgcmVwcmVzZW50cyB0aGUgZHJpdmVyIGFzIGEgd2hvbGUgKG5vdCBhIHBhcnRpY3VsYXIKK2RldmljZSBpbnN0YW5jZSkuCisKK0luaXRpYWxpemF0aW9uCit+fn5+fn5+fn5+fn5+fgorCitUaGUgZHJpdmVyIG11c3QgaW5pdGlhbGl6ZSBhdCBsZWFzdCB0aGUgbmFtZSBhbmQgYnVzIGZpZWxkcy4gSXQgc2hvdWxkCithbHNvIGluaXRpYWxpemUgdGhlIGRldmNsYXNzIGZpZWxkICh3aGVuIGl0IGFycml2ZXMpLCBzbyBpdCBtYXkgb2J0YWluCit0aGUgcHJvcGVyIGxpbmthZ2UgaW50ZXJuYWxseS4gSXQgc2hvdWxkIGFsc28gaW5pdGlhbGl6ZSBhcyBtYW55IG9mCit0aGUgY2FsbGJhY2tzIGFzIHBvc3NpYmxlLCB0aG91Z2ggZWFjaCBpcyBvcHRpb25hbC4KKworRGVjbGFyYXRpb24KK35+fn5+fn5+fn5+CisKK0FzIHN0YXRlZCBhYm92ZSwgc3RydWN0IGRldmljZV9kcml2ZXIgb2JqZWN0cyBhcmUgc3RhdGljYWxseQorYWxsb2NhdGVkLiBCZWxvdyBpcyBhbiBleGFtcGxlIGRlY2xhcmF0aW9uIG9mIHRoZSBlZXBybzEwMAorZHJpdmVyLiBUaGlzIGRlY2xhcmF0aW9uIGlzIGh5cG90aGV0aWNhbCBvbmx5OyBpdCByZWxpZXMgb24gdGhlIGRyaXZlcgorYmVpbmcgY29udmVydGVkIGNvbXBsZXRlbHkgdG8gdGhlIG5ldyBtb2RlbC4gCisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBlZXBybzEwMF9kcml2ZXIgPSB7CisgICAgICAgLm5hbWUJCT0gImVlcHJvMTAwIiwKKyAgICAgICAuYnVzCQk9ICZwY2lfYnVzX3R5cGUsCisgICAgICAgLmRldmNsYXNzCT0gJmV0aGVybmV0X2RldmNsYXNzLAkvKiB3aGVuIGl0J3MgaW1wbGVtZW50ZWQgKi8KKyAgICAgICAKKyAgICAgICAucHJvYmUJCT0gZWVwcm8xMDBfcHJvYmUsCisgICAgICAgLnJlbW92ZQkJPSBlZXBybzEwMF9yZW1vdmUsCisgICAgICAgLnN1c3BlbmQJCT0gZWVwcm8xMDBfc3VzcGVuZCwKKyAgICAgICAucmVzdW1lCQk9IGVlcHJvMTAwX3Jlc3VtZSwKK307CisKK01vc3QgZHJpdmVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGJlIGNvbnZlcnRlZCBjb21wbGV0ZWx5IHRvIHRoZSBuZXcKK21vZGVsIGJlY2F1c2UgdGhlIGJ1cyB0aGV5IGJlbG9uZyB0byBoYXMgYSBidXMtc3BlY2lmaWMgc3RydWN0dXJlIHdpdGgKK2J1cy1zcGVjaWZpYyBmaWVsZHMgdGhhdCBjYW5ub3QgYmUgZ2VuZXJhbGl6ZWQuIAorCitUaGUgbW9zdCBjb21tb24gZXhhbXBsZSBvZiB0aGlzIGFyZSBkZXZpY2UgSUQgc3RydWN0dXJlcy4gQSBkcml2ZXIKK3R5cGljYWxseSBkZWZpbmVzIGFuIGFycmF5IG9mIGRldmljZSBJRHMgdGhhdCBpdCBzdXBwb3J0cy4gVGhlIGZvcm1hdAorb2YgdGhlc2Ugc3RydWN0dXJlcyBhbmQgdGhlIHNlbWFudGljcyBmb3IgY29tcGFyaW5nIGRldmljZSBJRHMgYXJlCitjb21wbGV0ZWx5IGJ1cy1zcGVjaWZpYy4gRGVmaW5pbmcgdGhlbSBhcyBidXMtc3BlY2lmaWMgZW50aXRpZXMgd291bGQKK3NhY3JpZmljZSB0eXBlLXNhZmV0eSwgc28gd2Uga2VlcCBidXMtc3BlY2lmaWMgc3RydWN0dXJlcyBhcm91bmQuIAorCitCdXMtc3BlY2lmaWMgZHJpdmVycyBzaG91bGQgaW5jbHVkZSBhIGdlbmVyaWMgc3RydWN0IGRldmljZV9kcml2ZXIgaW4KK3RoZSBkZWZpbml0aW9uIG9mIHRoZSBidXMtc3BlY2lmaWMgZHJpdmVyLiBMaWtlIHRoaXM6CisKK3N0cnVjdCBwY2lfZHJpdmVyIHsKKyAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRfdGFibGU7CisgICAgICAgc3RydWN0IGRldmljZV9kcml2ZXIJICBkcml2ZXI7Cit9OworCitBIGRlZmluaXRpb24gdGhhdCBpbmNsdWRlZCBidXMtc3BlY2lmaWMgZmllbGRzIHdvdWxkIGxvb2sgbGlrZQorKHVzaW5nIHRoZSBlZXBybzEwMCBkcml2ZXIgYWdhaW4pOgorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZWVwcm8xMDBfZHJpdmVyID0geworICAgICAgIC5pZF90YWJsZSAgICAgICA9IGVlcHJvMTAwX3BjaV90YmwsCisgICAgICAgLmRyaXZlcgkgICAgICAgPSB7CisJCS5uYW1lCQk9ICJlZXBybzEwMCIsCisJCS5idXMJCT0gJnBjaV9idXNfdHlwZSwKKwkJLmRldmNsYXNzCT0gJmV0aGVybmV0X2RldmNsYXNzLAkvKiB3aGVuIGl0J3MgaW1wbGVtZW50ZWQgKi8KKwkJLnByb2JlCQk9IGVlcHJvMTAwX3Byb2JlLAorCQkucmVtb3ZlCQk9IGVlcHJvMTAwX3JlbW92ZSwKKwkJLnN1c3BlbmQJPSBlZXBybzEwMF9zdXNwZW5kLAorCQkucmVzdW1lCQk9IGVlcHJvMTAwX3Jlc3VtZSwKKyAgICAgICB9LAorfTsKKworU29tZSBtYXkgZmluZCB0aGUgc3ludGF4IG9mIGVtYmVkZGVkIHN0cnVjdCBpbml0aWFsaXphdGlvbiBhd2t3YXJkIG9yCitldmVuIGEgYml0IHVnbHkuIFNvIGZhciwgaXQncyB0aGUgYmVzdCB3YXkgd2UndmUgZm91bmQgdG8gZG8gd2hhdCB3ZSB3YW50Li4uCisKK1JlZ2lzdHJhdGlvbgorfn5+fn5+fn5+fn5+CisKK2ludCBkcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOworCitUaGUgZHJpdmVyIHJlZ2lzdGVycyB0aGUgc3RydWN0dXJlIG9uIHN0YXJ0dXAuIEZvciBkcml2ZXJzIHRoYXQgaGF2ZQorbm8gYnVzLXNwZWNpZmljIGZpZWxkcyAoaS5lLiBkb24ndCBoYXZlIGEgYnVzLXNwZWNpZmljIGRyaXZlcgorc3RydWN0dXJlKSwgdGhleSB3b3VsZCB1c2UgZHJpdmVyX3JlZ2lzdGVyIGFuZCBwYXNzIGEgcG9pbnRlciB0byB0aGVpcgorc3RydWN0IGRldmljZV9kcml2ZXIgb2JqZWN0LiAKKworTW9zdCBkcml2ZXJzLCBob3dldmVyLCB3aWxsIGhhdmUgYSBidXMtc3BlY2lmaWMgc3RydWN0dXJlIGFuZCB3aWxsCituZWVkIHRvIHJlZ2lzdGVyIHdpdGggdGhlIGJ1cyB1c2luZyBzb21ldGhpbmcgbGlrZSBwY2lfZHJpdmVyX3JlZ2lzdGVyLgorCitJdCBpcyBpbXBvcnRhbnQgdGhhdCBkcml2ZXJzIHJlZ2lzdGVyIHRoZWlyIGRyaXZlciBzdHJ1Y3R1cmUgYXMgZWFybHkgYXMKK3Bvc3NpYmxlLiBSZWdpc3RyYXRpb24gd2l0aCB0aGUgY29yZSBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBpbiB0aGUKK3N0cnVjdCBkZXZpY2VfZHJpdmVyIG9iamVjdCwgaW5jbHVkaW5nIHRoZSByZWZlcmVuY2UgY291bnQgYW5kIHRoZQorbG9jay4gVGhlc2UgZmllbGRzIGFyZSBhc3N1bWVkIHRvIGJlIHZhbGlkIGF0IGFsbCB0aW1lcyBhbmQgbWF5IGJlCit1c2VkIGJ5IHRoZSBkZXZpY2UgbW9kZWwgY29yZSBvciB0aGUgYnVzIGRyaXZlci4KKworCitUcmFuc2l0aW9uIEJ1cyBEcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlZmluaW5nIHdyYXBwZXIgZnVuY3Rpb25zLCB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsIGNhbiBiZQorbWFkZSBlYXNpZXIuIERyaXZlcnMgY2FuIGlnbm9yZSB0aGUgZ2VuZXJpYyBzdHJ1Y3R1cmUgYWx0b2dldGhlciBhbmQKK2xldCB0aGUgYnVzIHdyYXBwZXIgZmlsbCBpbiB0aGUgZmllbGRzLiBGb3IgdGhlIGNhbGxiYWNrcywgdGhlIGJ1cyBjYW4KK2RlZmluZSBnZW5lcmljIGNhbGxiYWNrcyB0aGF0IGZvcndhcmQgdGhlIGNhbGwgdG8gdGhlIGJ1cy1zcGVjaWZpYworY2FsbGJhY2tzIG9mIHRoZSBkcml2ZXJzLiAKKworVGhpcyBzb2x1dGlvbiBpcyBpbnRlbmRlZCB0byBiZSBvbmx5IHRlbXBvcmFyeS4gSW4gb3JkZXIgdG8gZ2V0IGNsYXNzCitpbmZvcm1hdGlvbiBpbiB0aGUgZHJpdmVyLCB0aGUgZHJpdmVycyBtdXN0IGJlIG1vZGlmaWVkIGFueXdheS4gU2luY2UKK2NvbnZlcnRpbmcgZHJpdmVycyB0byB0aGUgbmV3IG1vZGVsIHNob3VsZCByZWR1Y2Ugc29tZSBpbmZyYXN0cnVjdHVyYWwKK2NvbXBsZXhpdHkgYW5kIGNvZGUgc2l6ZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGV5IGFyZSBjb252ZXJ0ZWQgYXMKK2NsYXNzIGluZm9ybWF0aW9uIGlzIGFkZGVkLgorCitBY2Nlc3MKK35+fn5+fgorCitPbmNlIHRoZSBvYmplY3QgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgaXQgbWF5IGFjY2VzcyB0aGUgY29tbW9uIGZpZWxkcyBvZgordGhlIG9iamVjdCwgbGlrZSB0aGUgbG9jayBhbmQgdGhlIGxpc3Qgb2YgZGV2aWNlcy4gCisKK2ludCBkcml2ZXJfZm9yX2VhY2hfZGV2KHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2LCB2b2lkICogZGF0YSwgCisJCSAgICAgICAgaW50ICgqY2FsbGJhY2spKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHZvaWQgKiBkYXRhKSk7CisKK1RoZSBkZXZpY2VzIGZpZWxkIGlzIGEgbGlzdCBvZiBhbGwgdGhlIGRldmljZXMgdGhhdCBoYXZlIGJlZW4gYm91bmQgdG8KK3RoZSBkcml2ZXIuIFRoZSBMRE0gY29yZSBwcm92aWRlcyBhIGhlbHBlciBmdW5jdGlvbiB0byBvcGVyYXRlIG9uIGFsbAordGhlIGRldmljZXMgYSBkcml2ZXIgY29udHJvbHMuIFRoaXMgaGVscGVyIGxvY2tzIHRoZSBkcml2ZXIgb24gZWFjaAorbm9kZSBhY2Nlc3MsIGFuZCBkb2VzIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgb24gZWFjaCBkZXZpY2UgYXMgaXQKK2FjY2Vzc2VzIGl0LiAKKworCitzeXNmcworfn5+fn4KKworV2hlbiBhIGRyaXZlciBpcyByZWdpc3RlcmVkLCBhIHN5c2ZzIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGluIGl0cworYnVzJ3MgZGlyZWN0b3J5LiBJbiB0aGlzIGRpcmVjdG9yeSwgdGhlIGRyaXZlciBjYW4gZXhwb3J0IGFuIGludGVyZmFjZQordG8gdXNlcnNwYWNlIHRvIGNvbnRyb2wgb3BlcmF0aW9uIG9mIHRoZSBkcml2ZXIgb24gYSBnbG9iYWwgYmFzaXM7CitlLmcuIHRvZ2dsaW5nIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIGRyaXZlci4KKworQSBmdXR1cmUgZmVhdHVyZSBvZiB0aGlzIGRpcmVjdG9yeSB3aWxsIGJlIGEgJ2RldmljZXMnIGRpcmVjdG9yeS4gVGhpcworZGlyZWN0b3J5IHdpbGwgY29udGFpbiBzeW1saW5rcyB0byB0aGUgZGlyZWN0b3JpZXMgb2YgZGV2aWNlcyBpdAorc3VwcG9ydHMuCisKKworCitDYWxsYmFja3MKK35+fn5+fn5+fgorCisJaW50CSgqcHJvYmUpCShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKworcHJvYmUgaXMgY2FsbGVkIHRvIHZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIGEgY2VydGFpbiB0eXBlIG9mCitoYXJkd2FyZS4gVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHRoZSBkcml2ZXIgYmluZGluZyBwcm9jZXNzLCBhZnRlciB0aGUKK2J1cyBoYXMgdmVyaWZpZWQgdGhhdCB0aGUgZGV2aWNlIElEIG9mIGEgZGV2aWNlIG1hdGNoZXMgb25lIG9mIHRoZQorZGV2aWNlIElEcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4gCisKK1RoaXMgY2FsbGJhY2sgb25seSB2ZXJpZmllcyB0aGF0IHRoZXJlIGFjdHVhbGx5IGlzIHN1cHBvcnRlZCBoYXJkd2FyZQorcHJlc2VudC4gSXQgbWF5IGFsbG9jYXRlIGEgZHJpdmVyLXNwZWNpZmljIHN0cnVjdHVyZSwgYnV0IGl0IHNob3VsZAorbm90IGRvIGFueSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGFyZHdhcmUgaXRzZWxmLiBUaGUgZGV2aWNlLXNwZWNpZmljCitzdHJ1Y3R1cmUgbWF5IGJlIHN0b3JlZCBpbiB0aGUgZGV2aWNlJ3MgZHJpdmVyX2RhdGEgZmllbGQuIAorCisJaW50CSgqaW5pdCkJCShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKworaW5pdCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBiaW5kaW5nIHN0YWdlLiBJdCBpcyBjYWxsZWQgYWZ0ZXIgcHJvYmUgaGFzCitzdWNjZXNzZnVsbHkgcmV0dXJuZWQgYW5kIHRoZSBkZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCB3aXRoIGl0cworY2xhc3MuIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlLgorCisJaW50IAkoKnJlbW92ZSkJKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworCityZW1vdmUgaXMgY2FsbGVkIHRvIGRpc3NvY2lhdGUgYSBkcml2ZXIgd2l0aCBhIGRldmljZS4gVGhpcyBtYXkgYmUKK2NhbGxlZCBpZiBhIGRldmljZSBpcyBwaHlzaWNhbGx5IHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLCBpZiB0aGUKK2RyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQsIG9yIGR1cmluZyBhIHJlYm9vdCBzZXF1ZW5jZS4gCisKK0l0IGlzIHVwIHRvIHRoZSBkcml2ZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBvcgorbm90LiBJdCBzaG91bGQgZnJlZSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBzcGVjaWZpY2FsbHkgZm9yIHRoZQorZGV2aWNlOyBpLmUuIGFueXRoaW5nIGluIHRoZSBkZXZpY2UncyBkcml2ZXJfZGF0YSBmaWVsZC4gCisKK0lmIHRoZSBkZXZpY2UgaXMgc3RpbGwgcHJlc2VudCwgaXQgc2hvdWxkIHF1aWVzY2UgdGhlIGRldmljZSBhbmQgcGxhY2UKK2l0IGludG8gYSBzdXBwb3J0ZWQgbG93LXBvd2VyIHN0YXRlLgorCisJaW50CSgqc3VzcGVuZCkJKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKTsKKworc3VzcGVuZCBpcyBjYWxsZWQgdG8gcHV0IHRoZSBkZXZpY2UgaW4gYSBsb3cgcG93ZXIgc3RhdGUuIFRoZXJlIGFyZQorc2V2ZXJhbCBzdGFnZXMgdG8gc3VjY2Vzc2Z1bGx5IHN1c3BlbmRpbmcgYSBkZXZpY2UsIHdoaWNoIGlzIGRlbm90ZWQgaW4KK3RoZSBAbGV2ZWwgcGFyYW1ldGVyLiBCcmVha2luZyB0aGUgc3VzcGVuZCB0cmFuc2l0aW9uIGludG8gc2V2ZXJhbAorc3RhZ2VzIGFmZm9yZHMgdGhlIHBsYXRmb3JtIGZsZXhpYmlsaXR5IGluIHBlcmZvcm1pbmcgZGV2aWNlIHBvd2VyCittYW5hZ2VtZW50IGJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIHN5c3RlbSBhbmQgdGhlCit1c2VyLWRlZmluZWQgcG9saWN5LgorCitTVVNQRU5EX05PVElGWSBub3RpZmllcyB0aGUgZGV2aWNlIHRoYXQgYSBzdXNwZW5kIHRyYW5zaXRpb24gaXMgYWJvdXQKK3RvIGhhcHBlbi4gVGhpcyBoYXBwZW5zIG9uIHN5c3RlbSBwb3dlciBzdGF0ZSB0cmFuc2l0aW9ucyB0byB2ZXJpZnkKK3RoYXQgYWxsIGRldmljZXMgY2FuIHN1Y2Nlc3NmdWxseSBzdXNwZW5kLgorCitBIGRyaXZlciBtYXkgY2hvb3NlIHRvIGZhaWwgb24gdGhpcyBjYWxsLCB3aGljaCBzaG91bGQgY2F1c2UgdGhlCitlbnRpcmUgc3VzcGVuZCB0cmFuc2l0aW9uIHRvIGZhaWwuIEEgZHJpdmVyIHNob3VsZCBmYWlsIG9ubHkgaWYgaXQKK2tub3dzIHRoYXQgdGhlIGRldmljZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGJlIHJlc3VtZWQgcHJvcGVybHkgd2hlbiB0aGUKK3N5c3RlbSB3YWtlcyB1cCBhZ2Fpbi4gSXQgY291bGQgYWxzbyBmYWlsIGlmIGl0IHNvbWVob3cgZGV0ZXJtaW5lcyBpdAoraXMgaW4gdGhlIG1pZGRsZSBvZiBhbiBvcGVyYXRpb24gdG9vIGltcG9ydGFudCB0byBzdG9wLgorCitTVVNQRU5EX0RJU0FCTEUgdGVsbHMgdGhlIGRldmljZSB0byBzdG9wIEkvTyB0cmFuc2FjdGlvbnMuIFdoZW4gaXQKK3N0b3BzIHRyYW5zYWN0aW9ucywgb3Igd2hhdCBpdCBzaG91bGQgZG8gd2l0aCB1bmZpbmlzaGVkIHRyYW5zYWN0aW9ucworaXMgYSBwb2xpY3kgb2YgdGhlIGRyaXZlci4gQWZ0ZXIgdGhpcyBjYWxsLCB0aGUgZHJpdmVyIHNob3VsZCBub3QKK2FjY2VwdCBhbnkgb3RoZXIgSS9PIHJlcXVlc3RzLgorCitTVVNQRU5EX1NBVkVfU1RBVEUgdGVsbHMgdGhlIGRldmljZSB0byBzYXZlIHRoZSBjb250ZXh0IG9mIHRoZQoraGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgYW55IGJ1cy1zcGVjaWZpYyBoYXJkd2FyZSBzdGF0ZSBhbmQKK2RldmljZS1zcGVjaWZpYyBoYXJkd2FyZSBzdGF0ZS4gQSBwb2ludGVyIHRvIHRoaXMgc2F2ZWQgc3RhdGUgY2FuIGJlCitzdG9yZWQgaW4gdGhlIGRldmljZSdzIHNhdmVkX3N0YXRlIGZpZWxkLgorCitTVVNQRU5EX1BPV0VSX0RPV04gdGVsbHMgdGhlIGRyaXZlciB0byBwbGFjZSB0aGUgZGV2aWNlIGluIHRoZSBsb3cKK3Bvd2VyIHN0YXRlIHJlcXVlc3RlZC4gCisKK1doZXRoZXIgc3VzcGVuZCBpcyBjYWxsZWQgd2l0aCBhIGdpdmVuIGxldmVsIGlzIGEgcG9saWN5IG9mIHRoZQorcGxhdGZvcm0uIFNvbWUgbGV2ZWxzIG1heSBiZSBvbWl0dGVkOyBkcml2ZXJzIG11c3Qgbm90IGFzc3VtZSB0aGUKK3JlY2VwdGlvbiBvZiBhbnkgbGV2ZWwuIEhvd2V2ZXIsIGFsbCBsZXZlbHMgbXVzdCBiZSBjYWxsZWQgaW4gdGhlCitvcmRlciBhYm92ZTsgaS5lLiBub3RpZmljYXRpb24gd2lsbCBhbHdheXMgY29tZSBiZWZvcmUgZGlzYWJsaW5nOworZGlzYWJsaW5nIHRoZSBkZXZpY2Ugd2lsbCBjb21lIGJlZm9yZSBzdXNwZW5kaW5nIHRoZSBkZXZpY2UuCisKK0FsbCBjYWxscyBhcmUgbWFkZSB3aXRoIGludGVycnVwdHMgZW5hYmxlZCwgZXhjZXB0IGZvciB0aGUKK1NVU1BFTkRfUE9XRVJfRE9XTiBsZXZlbC4KKworCWludAkoKnJlc3VtZSkJKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHUzMiBsZXZlbCk7CisKK1Jlc3VtZSBpcyB1c2VkIHRvIGJyaW5nIGEgZGV2aWNlIGJhY2sgZnJvbSBhIGxvdyBwb3dlciBzdGF0ZS4gTGlrZSB0aGUKK3N1c3BlbmQgdHJhbnNpdGlvbiwgaXQgaGFwcGVucyBpbiBzZXZlcmFsIHN0YWdlcy4gCisKK1JFU1VNRV9QT1dFUl9PTiB0ZWxscyB0aGUgZHJpdmVyIHRvIHNldCB0aGUgcG93ZXIgc3RhdGUgdG8gdGhlIHN0YXRlCitiZWZvcmUgdGhlIHN1c3BlbmQgY2FsbCAoVGhlIGRldmljZSBjb3VsZCBoYXZlIGFscmVhZHkgYmVlbiBpbiBhIGxvdworcG93ZXIgc3RhdGUgYmVmb3JlIHRoZSBzdXNwZW5kIGNhbGwgdG8gcHV0IGluIGEgbG93ZXIgcG93ZXIgc3RhdGUpLiAKKworUkVTVU1FX1JFU1RPUkVfU1RBVEUgdGVsbHMgdGhlIGRyaXZlciB0byByZXN0b3JlIHRoZSBzdGF0ZSBzYXZlZCBieQordGhlIFNVU1BFTkRfU0FWRV9TVEFURSBzdXNwZW5kIGNhbGwuIAorCitSRVNVTUVfRU5BQkxFIHRlbGxzIHRoZSBkcml2ZXIgdG8gc3RhcnQgYWNjZXB0aW5nIEkvTyB0cmFuc2FjdGlvbnMKK2FnYWluLiBEZXBlbmRpbmcgb24gZHJpdmVyIHBvbGljeSwgdGhlIGRldmljZSBtYXkgYWxyZWFkeSBoYXZlIHBlbmRpbmcKK0kvTyByZXF1ZXN0cy4gCisKK1JFU1VNRV9QT1dFUl9PTiBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGUgb3RoZXIgcmVzdW1lCitsZXZlbHMgYXJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gCisKK0FzIHdpdGggdGhlIHZhcmlvdXMgc3VzcGVuZCBzdGFnZXMsIHRoZSBkcml2ZXIgbXVzdCBub3QgYXNzdW1lIHRoYXQKK2FueSBvdGhlciByZXN1bWUgY2FsbHMgaGF2ZSBiZWVuIG9yIHdpbGwgYmUgbWFkZS4gRWFjaCBjYWxsIHNob3VsZCBiZQorc2VsZi1jb250YWluZWQgYW5kIG5vdCBkZXBlbmRlbnQgb24gYW55IGV4dGVybmFsIHN0YXRlLgorCisKK0F0dHJpYnV0ZXMKK35+fn5+fn5+fn4KK3N0cnVjdCBkcml2ZXJfYXR0cmlidXRlIHsKKyAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAgICAgICAgYXR0cjsKKyAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZik7CisgICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2ZmKTsKK307CisKK0RldmljZSBkcml2ZXJzIGNhbiBleHBvcnQgYXR0cmlidXRlcyB2aWEgdGhlaXIgc3lzZnMgZGlyZWN0b3JpZXMuIAorRHJpdmVycyBjYW4gZGVjbGFyZSBhdHRyaWJ1dGVzIHVzaW5nIGEgRFJJVkVSX0FUVFIgbWFjcm8gdGhhdCB3b3JrcworaWRlbnRpY2FsbHkgdG8gdGhlIERFVklDRV9BVFRSIG1hY3JvLiAKKworRXhhbXBsZToKKworRFJJVkVSX0FUVFIoZGVidWcsMDY0NCxzaG93X2RlYnVnLHN0b3JlX2RlYnVnKTsKKworVGhpcyBpcyBlcXVpdmFsZW50IHRvIGRlY2xhcmluZzoKKworc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgZHJpdmVyX2F0dHJfZGVidWc7CisKK1RoaXMgY2FuIHRoZW4gYmUgdXNlZCB0byBhZGQgYW5kIHJlbW92ZSB0aGUgYXR0cmlidXRlIGZyb20gdGhlCitkcml2ZXIncyBkaXJlY3RvcnkgdXNpbmc6CisKK2ludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Cit2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2ludGVyZmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9pbnRlcmZhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjkxMmJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvaW50ZXJmYWNlLnR4dApAQCAtMCwwICsxLDEyOSBAQAorCitEZXZpY2UgSW50ZXJmYWNlcworCitJbnRyb2R1Y3Rpb24KK35+fn5+fn5+fn5+fgorCitEZXZpY2UgaW50ZXJmYWNlcyBhcmUgdGhlIGxvZ2ljYWwgaW50ZXJmYWNlcyBvZiBkZXZpY2UgY2xhc3NlcyB0aGF0IGNvcnJlbGF0ZQorZGlyZWN0bHkgdG8gdXNlcnNwYWNlIGludGVyZmFjZXMsIGxpa2UgZGV2aWNlIG5vZGVzLiAKKyAgIAorRWFjaCBkZXZpY2UgY2xhc3MgbWF5IGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyB0aHJvdWdoIHdoaWNoIHlvdSBjYW4gCithY2Nlc3MgdGhlIHNhbWUgZGV2aWNlLiBBbiBpbnB1dCBkZXZpY2UgbWF5IHN1cHBvcnQgdGhlIG1vdXNlIGludGVyZmFjZSwgCit0aGUgJ2V2ZGV2JyBpbnRlcmZhY2UsIGFuZCB0aGUgdG91Y2hzY3JlZW4gaW50ZXJmYWNlLiBBIFNDU0kgZGlzayB3b3VsZCAKK3N1cHBvcnQgdGhlIGRpc2sgaW50ZXJmYWNlLCB0aGUgU0NTSSBnZW5lcmljIGludGVyZmFjZSwgYW5kIHBvc3NpYmx5IGEgcmF3IAorZGV2aWNlIGludGVyZmFjZS4gCisKK0RldmljZSBpbnRlcmZhY2VzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIGNsYXNzIHRoZXkgYmVsb25nIHRvLiBBcyBkZXZpY2VzCithcmUgYWRkZWQgdG8gdGhlIGNsYXNzLCB0aGV5IGFyZSBhZGRlZCB0byBlYWNoIGludGVyZmFjZSByZWdpc3RlcmVkIHdpdGgKK3RoZSBjbGFzcy4gVGhlIGludGVyZmFjZSBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgZGV2aWNlCitzdXBwb3J0cyB0aGUgaW50ZXJmYWNlIG9yIG5vdC4gCisKKworUHJvZ3JhbW1pbmcgSW50ZXJmYWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworc3RydWN0IGRldmljZV9pbnRlcmZhY2UgeworCWNoYXIJCQkqIG5hbWU7CisJcndsb2NrX3QJCWxvY2s7CisJdTMyCQkJZGV2bnVtOworCXN0cnVjdCBkZXZpY2VfY2xhc3MJKiBkZXZjbGFzczsKKworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgZHJpdmVyX2Rpcl9lbnRyeQlkaXI7CisKKwlpbnQgKCphZGRfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICopOworCWludCAoKmFkZF9kZXZpY2UpKHN0cnVjdCBpbnRmX2RhdGEgKik7Cit9OworCitpbnQgaW50ZXJmYWNlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfaW50ZXJmYWNlICopOwordm9pZCBpbnRlcmZhY2VfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX2ludGVyZmFjZSAqKTsKKworCitBbiBpbnRlcmZhY2UgbXVzdCBzcGVjaWZ5IHRoZSBkZXZpY2UgY2xhc3MgaXQgYmVsb25ncyB0by4gSXQgaXMgYWRkZWQKK3RvIHRoYXQgY2xhc3MncyBsaXN0IG9mIGludGVyZmFjZXMgb24gcmVnaXN0cmF0aW9uLgorCisKK0ludGVyZmFjZXMgY2FuIGJlIGFkZGVkIHRvIGEgZGV2aWNlIGNsYXNzIGF0IGFueSB0aW1lLiBXaGVuZXZlciBpdCBpcworYWRkZWQsIGVhY2ggZGV2aWNlIGluIHRoZSBjbGFzcyBpcyBwYXNzZWQgdG8gdGhlIGludGVyZmFjZSdzCithZGRfZGV2aWNlIGNhbGxiYWNrLiBXaGVuIGFuIGludGVyZmFjZSBpcyByZW1vdmVkLCBlYWNoIGRldmljZSBpcworcmVtb3ZlZCBmcm9tIHRoZSBpbnRlcmZhY2UuCisKKworRGV2aWNlcworfn5+fn5+fgorT25jZSBhIGRldmljZSBpcyBhZGRlZCB0byBhIGRldmljZSBjbGFzcywgaXQgaXMgYWRkZWQgdG8gZWFjaAoraW50ZXJmYWNlIHRoYXQgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZXZpY2UgY2xhc3MuIFRoZSBjbGFzcworaXMgZXhwZWN0ZWQgdG8gcGxhY2UgYSBjbGFzcy1zcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBpbiAKK3N0cnVjdCBkZXZpY2U6OmNsYXNzX2RhdGEuIFRoZSBpbnRlcmZhY2UgY2FuIHVzZSB0aGF0IChhbG9uZyB3aXRoCitvdGhlciBmaWVsZHMgb2Ygc3RydWN0IGRldmljZSkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBkcml2ZXIKK2FuZC9vciBkZXZpY2Ugc3VwcG9ydCB0aGF0IHBhcnRpY3VsYXIgaW50ZXJmYWNlLgorCisKK0RhdGEKK35+fn4KKworc3RydWN0IGludGZfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBkZXZpY2VfaW50ZXJmYWNlCSogaW50ZjsKKwlzdHJ1Y3QgZGV2aWNlIAkJKiBkZXY7CisJdTMyCQkJaW50Zl9udW07Cit9OworCitpbnQgaW50ZXJmYWNlX2FkZF9kYXRhKHN0cnVjdCBpbnRlcmZhY2VfZGF0YSAqKTsKKworVGhlIGludGVyZmFjZSBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGEgc3RydWN0IAoraW50Zl9kYXRhIGFuZCBjYWxsaW5nIGludGVyZmFjZV9hZGRfZGF0YSgpIHRvIGFkZCBpdCB0byB0aGUgZGV2aWNlJ3MgbGlzdAorb2YgaW50ZXJmYWNlcyBpdCBiZWxvbmdzIHRvLiBUaGlzIGxpc3Qgd2lsbCBiZSBpdGVyYXRlZCBvdmVyIHdoZW4gdGhlIGRldmljZQoraXMgcmVtb3ZlZCBmcm9tIHRoZSBjbGFzcyAoaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgaW50ZXJmYWNlcyBmb3IgYSBjbGFzcykuCitUaGlzIHN0cnVjdHVyZSBzaG91bGQgcHJvYmFibHkgYmUgZW1iZWRkZWQgaW4gd2hhdGV2ZXIgcGVyLWRldmljZSBkYXRhIAorc3RydWN0dXJlIHRoZSBpbnRlcmZhY2UgaXMgYWxsb2NhdGluZyBhbnl3YXkuCisgICAKK0RldmljZXMgYXJlIGVudW1lcmF0ZWQgd2l0aGluIHRoZSBpbnRlcmZhY2UuIFRoaXMgaGFwcGVucyBpbiBpbnRlcmZhY2VfYWRkX2RhdGEoKQorYW5kIHRoZSBlbnVtZXJhdGVkIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgc3RydWN0IGludGZfZGF0YSBmb3IgdGhhdCBkZXZpY2UuIAorCitzeXNmcworfn5+fn4KK0VhY2ggaW50ZXJmYWNlIGlzIGdpdmVuIGEgZGlyZWN0b3J5IGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGRldmljZQorY2xhc3MgaXQgYmVsb25ncyB0bzoKKworSW50ZXJmYWNlcyBnZXQgYSBkaXJlY3RvcnkgaW4gdGhlIGNsYXNzJ3MgZGlyZWN0b3J5IGFzIHdlbGw6CisKKyAgIGNsYXNzLworICAgYC0tIGlucHV0CisgICAgICAgfC0tIGRldmljZXMKKyAgICAgICB8LS0gZHJpdmVycworICAgICAgIHwtLSBtb3VzZQorICAgICAgIGAtLSBldmRldgorCitXaGVuIGEgZGV2aWNlIGlzIGFkZGVkIHRvIHRoZSBpbnRlcmZhY2UsIGEgc3ltbGluayBpcyBjcmVhdGVkIHRoYXQgcG9pbnRzIAordG8gdGhlIGRldmljZSdzIGRpcmVjdG9yeSBpbiB0aGUgcGh5c2ljYWwgaGllcmFyY2h5OgorCisgICBjbGFzcy8KKyAgIGAtLSBpbnB1dAorICAgICAgIHwtLSBkZXZpY2VzCisgICAgICAgfCAgIGAtLSAxIC0+IC4uLy4uLy4uL3Jvb3QvcGNpMC8wMDoxZi4wL3VzYl9idXMvMDA6MWYuMi0xOjAvCisgICAgICAgfC0tIGRyaXZlcnMKKyAgICAgICB8ICAgYC0tIHVzYjp1c2JfbW91c2UgLT4gLi4vLi4vLi4vYnVzL2RyaXZlcnMvdXNiX21vdXNlLworICAgICAgIHwtLSBtb3VzZQorICAgICAgIHwgICBgLS0gMSAtPiAuLi8uLi8uLi9yb290L3BjaTAvMDA6MWYuMC91c2JfYnVzLzAwOjFmLjItMTowLworICAgICAgIGAtLSBldmRldgorICAgICAgICAgICBgLS0gMSAtPiAuLi8uLi8uLi9yb290L3BjaTAvMDA6MWYuMC91c2JfYnVzLzAwOjFmLjItMTowLworCisKK0Z1dHVyZSBQbGFucworfn5+fn5+fn5+fn5+CitBIGRldmljZSBpbnRlcmZhY2UgaXMgY29ycmVsYXRlZCBkaXJlY3RseSB3aXRoIGEgdXNlcnNwYWNlIGludGVyZmFjZQorZm9yIGEgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYSBkZXZpY2Ugbm9kZS4gRm9yIGluc3RhbmNlLCBhIFNDU0kgZGlzaworZXhwb3NlcyBhdCBsZWFzdCB0d28gaW50ZXJmYWNlcyB0byB1c2Vyc3BhY2U6IHRoZSBzdGFuZGFyZCBTQ1NJIGRpc2sKK2ludGVyZmFjZSBhbmQgdGhlIFNDU0kgZ2VuZXJpYyBpbnRlcmZhY2UuIEl0IG1pZ2h0IGFsc28gZXhwb3J0IGEgcmF3CitkZXZpY2UgaW50ZXJmYWNlLiAKKworTWFueSBpbnRlcmZhY2VzIGhhdmUgYSBtYWpvciBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIGVhY2gKK2RldmljZSBnZXRzIGEgbWlub3IgbnVtYmVyLiBPciwgbXVsdGlwbGUgaW50ZXJmYWNlcyBtaWdodCBzaGFyZSBvbmUKK21ham9yIG51bWJlciwgYW5kIGVhY2ggd2lsbCByZWNlaXZlIGEgcmFuZ2Ugb2YgbWlub3IgbnVtYmVycyAobGlrZSBpbgordGhlIGNhc2Ugb2YgaW5wdXQgZGV2aWNlcykuCisKK1RoZXNlIG1ham9yIGFuZCBtaW5vciBudW1iZXJzIGNvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW50ZXJmYWNlCitzdHJ1Y3R1cmUuIE1ham9yIGFuZCBtaW5vciBhbGxvY2F0aW9ucyBjb3VsZCBoYXBwZW4gd2hlbiB0aGUgaW50ZXJmYWNlCitpcyByZWdpc3RlcmVkIHdpdGggdGhlIGNsYXNzLCBvciB2aWEgYSBoZWxwZXIgZnVuY3Rpb24uIAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9vdmVydmlldy50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9vdmVydmlldy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2NjI3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9vdmVydmlldy50eHQKQEAgLTAsMCArMSwxMTQgQEAKK1RoZSBMaW51eCBLZXJuZWwgRGV2aWNlIE1vZGVsCisKK1BhdHJpY2sgTW9jaGVsCTxtb2NoZWxAb3NkbC5vcmc+CisKKzI2IEF1Z3VzdCAyMDAyCisKKworT3ZlcnZpZXcKK35+fn5+fn5+CisKK1RoaXMgZHJpdmVyIG1vZGVsIGlzIGEgdW5pZmljYXRpb24gb2YgYWxsIHRoZSBjdXJyZW50LCBkaXNwYXJhdGUgZHJpdmVyIG1vZGVscwordGhhdCBhcmUgY3VycmVudGx5IGluIHRoZSBrZXJuZWwuIEl0IGlzIGludGVuZGVkIHRvIGF1Z21lbnQgdGhlCitidXMtc3BlY2lmaWMgZHJpdmVycyBmb3IgYnJpZGdlcyBhbmQgZGV2aWNlcyBieSBjb25zb2xpZGF0aW5nIGEgc2V0IG9mIGRhdGEKK2FuZCBvcGVyYXRpb25zIGludG8gZ2xvYmFsbHkgYWNjZXNzaWJsZSBkYXRhIHN0cnVjdHVyZXMuCisKK0N1cnJlbnQgZHJpdmVyIG1vZGVscyBpbXBsZW1lbnQgc29tZSBzb3J0IG9mIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgKHNvbWV0aW1lcworanVzdCBhIGxpc3QpIGZvciB0aGUgZGV2aWNlcyB0aGV5IGNvbnRyb2wuIEJ1dCwgdGhlcmUgaXMgbm8gbGlua2FnZSBiZXR3ZWVuCit0aGUgZGlmZmVyZW50IGJ1cyB0eXBlcy4KKworQSBjb21tb24gZGF0YSBzdHJ1Y3R1cmUgY2FuIHByb3ZpZGUgdGhpcyBsaW5rYWdlIHdpdGggbGl0dGxlIG92ZXJoZWFkOiB3aGVuIGEKK2J1cyBkcml2ZXIgZGlzY292ZXJzIGEgcGFydGljdWxhciBkZXZpY2UsIGl0IGNhbiBpbnNlcnQgaXQgaW50byB0aGUgZ2xvYmFsCit0cmVlIGFzIHdlbGwgYXMgaXRzIGxvY2FsIHRyZWUuIEluIGZhY3QsIHRoZSBsb2NhbCB0cmVlIGJlY29tZXMganVzdCBhIHN1YnNldAorb2YgdGhlIGdsb2JhbCB0cmVlLgorCitDb21tb24gZGF0YSBmaWVsZHMgY2FuIGFsc28gYmUgbW92ZWQgb3V0IG9mIHRoZSBsb2NhbCBidXMgbW9kZWxzIGludG8gdGhlCitnbG9iYWwgbW9kZWwuIFNvbWUgb2YgdGhlIG1hbmlwdWxhdGlvbnMgb2YgdGhlc2UgZmllbGRzIGNhbiBhbHNvIGJlCitjb25zb2xpZGF0ZWQuIE1vc3QgbGlrZWx5LCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHdpbGwgYmVjb21lIGEgc2V0CitvZiBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCB0aGUgYnVzIGRyaXZlcnMgd3JhcCBhcm91bmQgdG8gaW5jbHVkZSBhbnkKK2J1cy1zcGVjaWZpYyBpdGVtcy4KKworVGhlIGNvbW1vbiBkZXZpY2UgYW5kIGJyaWRnZSBpbnRlcmZhY2UgY3VycmVudGx5IHJlZmxlY3RzIHRoZSBnb2FscyBvZiB0aGUKK21vZGVybiBQQzogbmFtZWx5IHRoZSBhYmlsaXR5IHRvIGRvIHNlYW1sZXNzIFBsdWcgYW5kIFBsYXksIHBvd2VyIG1hbmFnZW1lbnQsCithbmQgaG90IHBsdWcuIChUaGUgbW9kZWwgZGljdGF0ZWQgYnkgSW50ZWwgYW5kIE1pY3Jvc29mdCAocmVhZDogQUNQSSkgZW5zdXJlcwordXMgdGhhdCBhbnkgZGV2aWNlIGluIHRoZSBzeXN0ZW0gbWF5IGZpdCBhbnkgb2YgdGhlc2UgY3JpdGVyaWEuKQorCitJbiByZWFsaXR5LCBub3QgZXZlcnkgYnVzIHdpbGwgYmUgYWJsZSB0byBzdXBwb3J0IHN1Y2ggb3BlcmF0aW9ucy4gQnV0LCBtb3N0CitidXNlcyB3aWxsIHN1cHBvcnQgYSBtYWpvcml0eSBvZiB0aG9zZSBvcGVyYXRpb25zLCBhbmQgYWxsIGZ1dHVyZSBidXNlcyB3aWxsLgorSW4gb3RoZXIgd29yZHMsIGEgYnVzIHRoYXQgZG9lc24ndCBzdXBwb3J0IGFuIG9wZXJhdGlvbiBpcyB0aGUgZXhjZXB0aW9uLAoraW5zdGVhZCBvZiB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKworCisKK0Rvd25zdHJlYW0gQWNjZXNzCit+fn5+fn5+fn5+fn5+fn5+fgorCitDb21tb24gZGF0YSBmaWVsZHMgaGF2ZSBiZWVuIG1vdmVkIG91dCBvZiBpbmRpdmlkdWFsIGJ1cyBsYXllcnMgaW50byBhIGNvbW1vbgorZGF0YSBzdHJ1Y3R1cmUuIEJ1dCwgdGhlc2UgZmllbGRzIG11c3Qgc3RpbGwgYmUgYWNjZXNzZWQgYnkgdGhlIGJ1cyBsYXllcnMsCithbmQgc29tZXRpbWVzIGJ5IHRoZSBkZXZpY2Utc3BlY2lmaWMgZHJpdmVycy4KKworT3RoZXIgYnVzIGxheWVycyBhcmUgZW5jb3VyYWdlZCB0byBkbyB3aGF0IGhhcyBiZWVuIGRvbmUgZm9yIHRoZSBQQ0kgbGF5ZXIuCitzdHJ1Y3QgcGNpX2RldiBub3cgbG9va3MgbGlrZSB0aGlzOgorCitzdHJ1Y3QgcGNpX2RldiB7CisJLi4uCisKKwlzdHJ1Y3QgZGV2aWNlIGRldmljZTsKK307CisKK05vdGUgZmlyc3QgdGhhdCBpdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4gVGhpcyBtZWFucyBvbmx5IG9uZSBhbGxvY2F0aW9uIG9uCitkZXZpY2UgZGlzY292ZXJ5LiBOb3RlIGFsc28gdGhhdCBpdCBpcyBhdCB0aGUgX2VuZF8gb2Ygc3RydWN0IHBjaV9kZXYuIFRoaXMgaXMKK3RvIG1ha2UgcGVvcGxlIHRoaW5rIGFib3V0IHdoYXQgdGhleSdyZSBkb2luZyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIHRoZSBidXMKK2RyaXZlciBhbmQgdGhlIGdsb2JhbCBkcml2ZXI7IGFuZCB0byBwcmV2ZW50IGFnYWluc3QgbWluZGxlc3MgY2FzdHMgYmV0d2VlbgordGhlIHR3by4KKworVGhlIFBDSSBidXMgbGF5ZXIgZnJlZWx5IGFjY2Vzc2VzIHRoZSBmaWVsZHMgb2Ygc3RydWN0IGRldmljZS4gSXQga25vd3MgYWJvdXQKK3RoZSBzdHJ1Y3R1cmUgb2Ygc3RydWN0IHBjaV9kZXYsIGFuZCBpdCBzaG91bGQga25vdyB0aGUgc3RydWN0dXJlIG9mIHN0cnVjdAorZGV2aWNlLiBQQ0kgZGV2aWNlcyB0aGF0IGhhdmUgYmVlbiBjb252ZXJ0ZWQgZ2VuZXJhbGx5IGRvIG5vdCB0b3VjaCB0aGUgZmllbGRzCitvZiBzdHJ1Y3QgZGV2aWNlLiBNb3JlIHByZWNpc2VseSwgZGV2aWNlLXNwZWNpZmljIGRyaXZlcnMgc2hvdWxkIG5vdCB0b3VjaAorZmllbGRzIG9mIHN0cnVjdCBkZXZpY2UgdW5sZXNzIHRoZXJlIGlzIGEgc3Ryb25nIGNvbXBlbGxpbmcgcmVhc29uIHRvIGRvIHNvLgorCitUaGlzIGFic3RyYWN0aW9uIGlzIHByZXZlbnRpb24gb2YgdW5uZWNlc3NhcnkgcGFpbiBkdXJpbmcgdHJhbnNpdGlvbmFsIHBoYXNlcy4KK0lmIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCBjaGFuZ2VzIG9yIGlzIHJlbW92ZWQsIHRoZW4gZXZlcnkgZG93bnN0cmVhbSBkcml2ZXIKK3dpbGwgYnJlYWsuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvbmx5IHRoZSBidXMgbGF5ZXIgKGFuZCBub3QgdGhlIGRldmljZQorbGF5ZXIpIGFjY2Vzc2VzIHN0cnVjdCBkZXZpY2UsIGl0IGlzIG9ubHkgdGhhdCBsYXllciB0aGF0IG5lZWRzIHRvIGNoYW5nZS4KKworCitVc2VyIEludGVyZmFjZQorfn5+fn5+fn5+fn5+fn4KKworQnkgdmlydHVlIG9mIGhhdmluZyBhIGNvbXBsZXRlIGhpZXJhcmNoaWNhbCB2aWV3IG9mIGFsbCB0aGUgZGV2aWNlcyBpbiB0aGUKK3N5c3RlbSwgZXhwb3J0aW5nIGEgY29tcGxldGUgaGllcmFyY2hpY2FsIHZpZXcgdG8gdXNlcnNwYWNlIGJlY29tZXMgcmVsYXRpdmVseQorZWFzeS4gVGhpcyBoYXMgYmVlbiBhY2NvbXBsaXNoZWQgYnkgaW1wbGVtZW50aW5nIGEgc3BlY2lhbCBwdXJwb3NlIHZpcnR1YWwKK2ZpbGUgc3lzdGVtIG5hbWVkIHN5c2ZzLiBJdCBpcyBoZW5jZSBwb3NzaWJsZSBmb3IgdGhlIHVzZXIgdG8gbW91bnQgdGhlCit3aG9sZSBzeXNmcyBmaWxlc3lzdGVtIGFueXdoZXJlIGluIHVzZXJzcGFjZS4KKworVGhpcyBjYW4gYmUgZG9uZSBwZXJtYW5lbnRseSBieSBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBlbnRyeSBpbnRvIHRoZQorL2V0Yy9mc3RhYiAodW5kZXIgdGhlIHByb3Zpc2lvbiB0aGF0IHRoZSBtb3VudCBwb2ludCBkb2VzIGV4aXN0LCBvZiBjb3Vyc2UpOgorCitub25lICAgICAJL3N5cwlzeXNmcyAgICBkZWZhdWx0cwkJMAkwCisKK09yIGJ5IGhhbmQgb24gdGhlIGNvbW1hbmQgbGluZToKKworIyBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCisKK1doZW5ldmVyIGEgZGV2aWNlIGlzIGluc2VydGVkIGludG8gdGhlIHRyZWUsIGEgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgZm9yIGl0LgorVGhpcyBkaXJlY3RvcnkgbWF5IGJlIHBvcHVsYXRlZCBhdCBlYWNoIGxheWVyIG9mIGRpc2NvdmVyeSAtIHRoZSBnbG9iYWwgbGF5ZXIsCit0aGUgYnVzIGxheWVyLCBvciB0aGUgZGV2aWNlIGxheWVyLgorCitUaGUgZ2xvYmFsIGxheWVyIGN1cnJlbnRseSBjcmVhdGVzIHR3byBmaWxlcyAtICduYW1lJyBhbmQgJ3Bvd2VyJy4gVGhlCitmb3JtZXIgb25seSByZXBvcnRzIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2UuIFRoZSBsYXR0ZXIgcmVwb3J0cyB0aGUKK2N1cnJlbnQgcG93ZXIgc3RhdGUgb2YgdGhlIGRldmljZS4gSXQgd2lsbCBhbHNvIGJlIHVzZWQgdG8gc2V0IHRoZSBjdXJyZW50Citwb3dlciBzdGF0ZS4gCisKK1RoZSBidXMgbGF5ZXIgbWF5IGFsc28gY3JlYXRlIGZpbGVzIGZvciB0aGUgZGV2aWNlcyBpdCBmaW5kcyB3aGlsZSBwcm9iaW5nIHRoZQorYnVzLiBGb3IgZXhhbXBsZSwgdGhlIFBDSSBsYXllciBjdXJyZW50bHkgY3JlYXRlcyAnaXJxJyBhbmQgJ3Jlc291cmNlJyBmaWxlcworZm9yIGVhY2ggUENJIGRldmljZS4KKworQSBkZXZpY2Utc3BlY2lmaWMgZHJpdmVyIG1heSBhbHNvIGV4cG9ydCBmaWxlcyBpbiBpdHMgZGlyZWN0b3J5IHRvIGV4cG9zZQorZGV2aWNlLXNwZWNpZmljIGRhdGEgb3IgdHVuYWJsZSBpbnRlcmZhY2VzLgorCitNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeXNmcyBkaXJlY3RvcnkgbGF5b3V0IGNhbiBiZSBmb3VuZCBpbgordGhlIG90aGVyIGRvY3VtZW50cyBpbiB0aGlzIGRpcmVjdG9yeSBhbmQgaW4gdGhlIGZpbGUgCitEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcGxhdGZvcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcGxhdGZvcm0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZWUzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wbGF0Zm9ybS50eHQKQEAgLTAsMCArMSw5OSBAQAorUGxhdGZvcm0gRGV2aWNlcyBhbmQgRHJpdmVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitQbGF0Zm9ybSBkZXZpY2VzCit+fn5+fn5+fn5+fn5+fn5+CitQbGF0Zm9ybSBkZXZpY2VzIGFyZSBkZXZpY2VzIHRoYXQgdHlwaWNhbGx5IGFwcGVhciBhcyBhdXRvbm9tb3VzCitlbnRpdGllcyBpbiB0aGUgc3lzdGVtLiBUaGlzIGluY2x1ZGVzIGxlZ2FjeSBwb3J0LWJhc2VkIGRldmljZXMgYW5kCitob3N0IGJyaWRnZXMgdG8gcGVyaXBoZXJhbCBidXNlcy4gCisKKworUGxhdGZvcm0gZHJpdmVycworfn5+fn5+fn5+fn5+fn5+fgorRHJpdmVycyBmb3IgcGxhdGZvcm0gZGV2aWNlcyBhcmUgdHlwaWNhbGx5IHZlcnkgc2ltcGxlIGFuZAordW5zdHJ1Y3R1cmVkLiBFaXRoZXIgdGhlIGRldmljZSB3YXMgcHJlc2VudCBhdCBhIHBhcnRpY3VsYXIgSS9PIHBvcnQKK2FuZCB0aGUgZHJpdmVyIHdhcyBsb2FkZWQsIG9yIGl0IHdhcyBub3QuIFRoZXJlIHdhcyBubyBwb3NzaWJpbGl0eQorb2YgaG90cGx1Z2dpbmcgb3IgYWx0ZXJuYXRpdmUgZGlzY292ZXJ5IGJlc2lkZXMgcHJvYmluZyBhdCBhIHNwZWNpZmljCitJL08gYWRkcmVzcyBhbmQgZXhwZWN0aW5nIGEgc3BlY2lmaWMgcmVzcG9uc2UuCisKKworT3RoZXIgQXJjaGl0ZWN0dXJlcywgTW9kZXJuIEZpcm13YXJlLCBhbmQgbmV3IFBsYXRmb3Jtcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlc2UgZGV2aWNlcyBhcmUgbm90IGFsd2F5cyBhdCB0aGUgbGVnYWN5IEkvTyBwb3J0cy4gVGhpcyBpcyB0cnVlIG9uCitvdGhlciBhcmNoaXRlY3R1cmVzIGFuZCBvbiBzb21lIG1vZGVybiBhcmNoaXRlY3R1cmVzLiBJbiBtb3N0IGNhc2VzLAordGhlIGRyaXZlcnMgYXJlIG1vZGlmaWVkIHRvIGRpc2NvdmVyIHRoZSBkZXZpY2VzIGF0IG90aGVyIHdlbGwta25vd24KK3BvcnRzIGZvciB0aGUgZ2l2ZW4gcGxhdGZvcm0uIEhvd2V2ZXIsIHRoZSBmaXJtd2FyZSBpbiB0aGVzZSBzeXN0ZW1zCitkb2VzIHVzdWFsbHkga25vdyB3aGVyZSBleGFjdGx5IHRoZXNlIGRldmljZXMgcmVzaWRlLCBhbmQgaW4gc29tZQorY2FzZXMsIGl0J3MgdGhlIG9ubHkgd2F5IG9mIGRpc2NvdmVyaW5nIHRoZW0uIAorCisKK1RoZSBQbGF0Zm9ybSBCdXMKK35+fn5+fn5+fn5+fn5+fn4KK0EgcGxhdGZvcm0gYnVzIGhhcyBiZWVuIGNyZWF0ZWQgdG8gZGVhbCB3aXRoIHRoZXNlIGlzc3Vlcy4gRmlyc3QgYW5kCitmb3JlbW9zdCwgaXQgZ3JvdXBzIGFsbCB0aGUgbGVnYWN5IGRldmljZXMgdW5kZXIgYSBjb21tb24gYnVzLCBhbmQKK2dpdmVzIHRoZW0gYSBjb21tb24gcGFyZW50IGlmIHRoZXkgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gCisKK0J1dCwgYmVzaWRlcyB0aGUgb3JnYW5pemF0aW9uYWwgYmVuZWZpdHMsIHRoZSBwbGF0Zm9ybSBidXMgY2FuIGFsc28KK2FjY29tbW9kYXRlIGZpcm13YXJlLWJhc2VkIGVudW1lcmF0aW9uLiAKKworCitEZXZpY2UgRGlzY292ZXJ5Cit+fn5+fn5+fn5+fn5+fn5+CitUaGUgcGxhdGZvcm0gYnVzIGhhcyBubyBjb25jZXB0IG9mIHByb2JpbmcgZm9yIGRldmljZXMuIERldmljZXMKK2Rpc2NvdmVyeSBpcyBsZWZ0IHVwIHRvIGVpdGhlciB0aGUgbGVnYWN5IGRyaXZlcnMgb3IgdGhlCitmaXJtd2FyZS4gVGhlc2UgZW50aXRpZXMgYXJlIGV4cGVjdGVkIHRvIG5vdGlmeSB0aGUgcGxhdGZvcm0gb2YKK2RldmljZXMgdGhhdCBpdCBkaXNjb3ZlcnMgdmlhIHRoZSBidXMncyBhZGQoKSBjYWxsYmFjazoKKworCXBsYXRmb3JtX2J1cy5hZGQocGFyZW50LGJ1c19pZCkuCisKKworQnVzIElEcworfn5+fn5+fgorQnVzIElEcyBhcmUgdGhlIGNhbm9uaWNhbCBuYW1lcyBmb3IgdGhlIGRldmljZXMuIFRoZXJlIGlzIG5vIGdsb2JhbGx5CitzdGFuZGFyZCBhZGRyZXNzaW5nIG1lY2hhbmlzbSBmb3IgbGVnYWN5IGRldmljZXMuIEluIHRoZSBJQS0zMiB3b3JsZCwKK3dlIGhhdmUgUG5wIElEcyB0byB1c2UsIGFzIHdlbGwgYXMgdGhlIGxlZ2FjeSBJL08gcG9ydHMuIEhvd2V2ZXIsCituZWl0aGVyIHRlbGwgd2hhdCB0aGUgZGV2aWNlIHJlYWxseSBpcyBvciBoYXZlIGFueSBtZWFuaW5nIG9uIG90aGVyCitwbGF0Zm9ybXMuIAorCitTaW5jZSBib3RoIFBuUCBJRHMgYW5kIHRoZSBsZWdhY3kgSS9PIHBvcnRzIChhbmQgb3RoZXIgc3RhbmRhcmQgSS9PCitwb3J0cyBmb3Igc3BlY2lmaWMgZGV2aWNlcykgaGF2ZSBhIDE6MSBtYXBwaW5nLCB3ZSBtYXAgdGhlCitwbGF0Zm9ybS1zcGVjaWZpYyBuYW1lIG9yIGlkZW50aWZpZXIgdG8gYSBnZW5lcmljIG5hbWUgKGF0IGxlYXN0Cit3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBrZXJuZWwpLgorCitGb3IgZXhhbXBsZSwgYSBzZXJpYWwgZHJpdmVyIG1pZ2h0IGZpbmQgYSBkZXZpY2UgYXQgSS9PIDB4M2Y4LiBUaGUKK0FDUEkgZmlybXdhcmUgbWlnaHQgYWxzbyBkaXNjb3ZlciBhIGRldmljZSB3aXRoIFBuUCBJRCAoX0hJRCkKK1BOUDA1MDEuIEJvdGggY29ycmVzcG9uZCB0byB0aGUgc2FtZSBkZXZpY2UgYW5kIHNob3VsZCBiZSBtYXBwZWQgdG8gdGhlCitjYW5vbmljYWwgbmFtZSAnc2VyaWFsJy4gCisKK1RoZSBidXNfaWQgZmllbGQgc2hvdWxkIGJlIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgY2Fub25pY2FsIG5hbWUgYW5kCit0aGUgaW5zdGFuY2Ugb2YgdGhhdCB0eXBlIG9mIGRldmljZS4gRm9yIGV4YW1wbGUsIHRoZSBkZXZpY2UgYXQgSS9PCitwb3J0IDB4M2Y4IHNob3VsZCBoYXZlIGEgYnVzX2lkIG9mICJzZXJpYWwwIi4gVGhpcyBwbGFjZXMgdGhlCityZXNwb25zaWJpbGl0eSBvZiBlbnVtZXJhdGluZyBkZXZpY2VzIG9mIGEgcGFydGljdWxhciB0eXBlIHVwIHRvIHRoZQorZGlzY292ZXJ5IG1lY2hhbmlzbS4gQnV0LCB0aGV5IGFyZSB0aGUgZW50aXR5IHRoYXQgc2hvdWxkIGtub3cgYmVzdAorKGFzIG9wcG9zZWQgdG8gdGhlIHBsYXRmb3JtIGJ1cyBkcml2ZXIpLgorCisKK0RyaXZlcnMgCit+fn5+fn5+CitEcml2ZXJzIGZvciBwbGF0Zm9ybSBkZXZpY2VzIHNob3VsZCBoYXZlIGEgbmFtZSB0aGF0IGlzIHRoZSBzYW1lIGFzCit0aGUgY2Fub25pY2FsIG5hbWUgb2YgdGhlIGRldmljZXMgdGhleSBzdXBwb3J0LiBUaGlzIGFsbG93cyB0aGUKK3BsYXRmb3JtIGJ1cyBkcml2ZXIgdG8gZG8gc2ltcGxlIG1hdGNoaW5nIHdpdGggdGhlIGJhc2ljIGRhdGEKK3N0cnVjdHVyZXMgdG8gZGV0ZXJtaW5lIGlmIGEgZHJpdmVyIHN1cHBvcnRzIGEgY2VydGFpbiBkZXZpY2UuIAorCitGb3IgZXhhbXBsZSwgYSBsZWdhY3kgc2VyaWFsIGRyaXZlciBzaG91bGQgaGF2ZSBhIG5hbWUgb2YgJ3NlcmlhbCcgYW5kCityZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgcGxhdGZvcm0gYnVzLiAKKworCitEcml2ZXIgQmluZGluZworfn5+fn5+fn5+fn5+fn4KK0xlZ2FjeSBkcml2ZXJzIGFzc3VtZSB0aGV5IGFyZSBib3VuZCB0byB0aGUgZGV2aWNlIG9uY2UgdGhleSBzdGFydCB1cAorYW5kIHByb2JlIGFuIEkvTyBwb3J0LiBEaXZvcmNpbmcgdGhlbSBmcm9tIHRoaXMgd2lsbCBiZSBhIGRpZmZpY3VsdAorcHJvY2Vzcy4gSG93ZXZlciwgdGhhdCBzaG91bGRuJ3QgcHJldmVudCB1cyBmcm9tIGltcGxlbWVudGluZworZmlybXdhcmUtYmFzZWQgZW51bWVyYXRpb24uIAorCitUaGUgZmlybXdhcmUgc2hvdWxkIG5vdGlmeSB0aGUgcGxhdGZvcm0gYnVzIGFib3V0IGRldmljZXMgYmVmb3JlIHRoZQorbGVnYWN5IGRyaXZlcnMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gbG9hZC4gT25jZSB0aGUgZHJpdmVycyBhcmUgbG9hZGVkLAordGhleSBkcml2ZXIgbW9kZWwgY29yZSB3aWxsIGF0dGVtcHQgdG8gYmluZCB0aGUgZHJpdmVyIHRvIGFueQorcHJldmlvdXNseS1kaXNjb3ZlcmVkIGRldmljZXMuIE9uY2UgdGhhdCBoYXMgaGFwcGVuZWQsIGl0IHdpbGwgYmUgZnJlZQordG8gZGlzY292ZXIgYW55IG90aGVyIGRldmljZXMgaXQgcGxlYXNlcy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcG9ydGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wb3J0aW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjJmZWYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcG9ydGluZy50eHQKQEAgLTAsMCArMSw0NDUgQEAKKworUG9ydGluZyBEcml2ZXJzIHRvIHRoZSBOZXcgRHJpdmVyIE1vZGVsCisKK1BhdHJpY2sgTW9jaGVsCisKKzcgSmFudWFyeSAyMDAzCisKKworT3ZlcnZpZXcKKworUGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsLyoudHh0IGZvciBkZWZpbml0aW9ucyBvZgordmFyaW91cyBkcml2ZXIgdHlwZXMgYW5kIGNvbmNlcHRzLiAKKworTW9zdCBvZiB0aGUgd29yayBvZiBwb3J0aW5nIGRldmljZXMgZHJpdmVycyB0byB0aGUgbmV3IG1vZGVsIGhhcHBlbnMKK2F0IHRoZSBidXMgZHJpdmVyIGxheWVyLiBUaGlzIHdhcyBpbnRlbnRpb25hbCwgdG8gbWluaW1pemUgdGhlCituZWdhdGl2ZSBlZmZlY3Qgb24ga2VybmVsIGRyaXZlcnMsIGFuZCB0byBhbGxvdyBhIGdyYWR1YWwgdHJhbnNpdGlvbgorb2YgYnVzIGRyaXZlcnMuCisKK0luIGEgbnV0c2hlbGwsIHRoZSBkcml2ZXIgbW9kZWwgY29uc2lzdHMgb2YgYSBzZXQgb2Ygb2JqZWN0cyB0aGF0IGNhbgorYmUgZW1iZWRkZWQgaW4gbGFyZ2VyLCBidXMtc3BlY2lmaWMgb2JqZWN0cy4gRmllbGRzIGluIHRoZXNlIGdlbmVyaWMKK29iamVjdHMgY2FuIHJlcGxhY2UgZmllbGRzIGluIHRoZSBidXMtc3BlY2lmaWMgb2JqZWN0cy4gCisKK1RoZSBnZW5lcmljIG9iamVjdHMgbXVzdCBiZSByZWdpc3RlcmVkIHdpdGggdGhlIGRyaXZlciBtb2RlbCBjb3JlLiBCeQorZG9pbmcgc28sIHRoZXkgd2lsbCBleHBvcnRlZCB2aWEgdGhlIHN5c2ZzIGZpbGVzeXN0ZW0uIHN5c2ZzIGNhbiBiZQorbW91bnRlZCBieSBkb2luZyAKKworCSMgbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworCisKKworVGhlIFByb2Nlc3MKKworU3RlcCAwOiBSZWFkIGluY2x1ZGUvbGludXgvZGV2aWNlLmggZm9yIG9iamVjdCBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIAorCitTdGVwIDE6IFJlZ2lzdGVyaW5nIHRoZSBidXMgZHJpdmVyLiAKKworCistIERlZmluZSBhIHN0cnVjdCBidXNfdHlwZSBmb3IgdGhlIGJ1cyBkcml2ZXIuCisKK3N0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGUgPSB7CisgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJwY2kiLAorfTsKKworCistIFJlZ2lzdGVyIHRoZSBidXMgdHlwZS4KKyAgVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBidXMgdHlwZSwKKyAgd2hpY2ggaXMgdXN1YWxseSB0aGUgbW9kdWxlX2luaXQoKSwgb3IgZXF1aXZhbGVudCwgZnVuY3Rpb24uIAorCitzdGF0aWMgaW50IF9faW5pdCBwY2lfZHJpdmVyX2luaXQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIGJ1c19yZWdpc3RlcigmcGNpX2J1c190eXBlKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHBjaV9kcml2ZXJfaW5pdCk7CisKKworICBUaGUgYnVzIHR5cGUgbWF5IGJlIHVucmVnaXN0ZXJlZCAoaWYgdGhlIGJ1cyBkcml2ZXIgbWF5IGJlIGNvbXBpbGVkCisgIGFzIGEgbW9kdWxlKSBieSBkb2luZzoKKworICAgICBidXNfdW5yZWdpc3RlcigmcGNpX2J1c190eXBlKTsKKworCistIEV4cG9ydCB0aGUgYnVzIHR5cGUgZm9yIG90aGVycyB0byB1c2UuIAorCisgIE90aGVyIGNvZGUgbWF5IHdpc2ggdG8gcmVmZXJlbmNlIHRoZSBidXMgdHlwZSwgc28gZGVjbGFyZSBpdCBpbiBhIAorICBzaGFyZWQgaGVhZGVyIGZpbGUgYW5kIGV4cG9ydCB0aGUgc3ltYm9sLgorCitGcm9tIGluY2x1ZGUvbGludXgvcGNpLmg6CisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNpX2J1c190eXBlOworCisKK0Zyb20gZmlsZSB0aGUgYWJvdmUgY29kZSBhcHBlYXJzIGluOgorCitFWFBPUlRfU1lNQk9MKHBjaV9idXNfdHlwZSk7CisKKworCistIFRoaXMgd2lsbCBjYXVzZSB0aGUgYnVzIHRvIHNob3cgdXAgaW4gL3N5cy9idXMvcGNpLyB3aXRoIHR3bworICBzdWJkaXJlY3RvcmllczogJ2RldmljZXMnIGFuZCAnZHJpdmVycycuCisKKyMgdHJlZSAtZCAvc3lzL2J1cy9wY2kvCisvc3lzL2J1cy9wY2kvCit8LS0gZGV2aWNlcworYC0tIGRyaXZlcnMKKworCisKK1N0ZXAgMjogUmVnaXN0ZXJpbmcgRGV2aWNlcy4gCisKK3N0cnVjdCBkZXZpY2UgcmVwcmVzZW50cyBhIHNpbmdsZSBkZXZpY2UuIEl0IG1haW5seSBjb250YWlucyBtZXRhZGF0YQorZGVzY3JpYmluZyB0aGUgcmVsYXRpb25zaGlwIHRoZSBkZXZpY2UgaGFzIHRvIG90aGVyIGVudGl0aWVzLiAKKworCistIEVtYmVkZCBhIHN0cnVjdCBkZXZpY2UgaW4gdGhlIGJ1cy1zcGVjaWZpYyBkZXZpY2UgdHlwZS4gCisKKworc3RydWN0IHBjaV9kZXYgeworICAgICAgIC4uLgorICAgICAgIHN0cnVjdCAgZGV2aWNlICBkZXY7ICAgICAgICAgICAgLyogR2VuZXJpYyBkZXZpY2UgaW50ZXJmYWNlICovCisgICAgICAgLi4uCit9OworCisgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIGdlbmVyaWMgZGV2aWNlIG5vdCBiZSB0aGUgZmlyc3QgaXRlbSBpbiAKKyAgdGhlIHN0cnVjdCB0byBkaXNjb3VyYWdlIHByb2dyYW1tZXJzIGZyb20gZG9pbmcgbWluZGxlc3MgY2FzdHMKKyAgYmV0d2VlbiB0aGUgb2JqZWN0IHR5cGVzLiBJbnN0ZWFkIG1hY3Jvcywgb3IgaW5saW5lIGZ1bmN0aW9ucywKKyAgc2hvdWxkIGJlIGNyZWF0ZWQgdG8gY29udmVydCBmcm9tIHRoZSBnZW5lcmljIG9iamVjdCB0eXBlLgorCisKKyNkZWZpbmUgdG9fcGNpX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjaV9kZXYsIGRldikKKworb3IgCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKiB0b19wY2lfZGV2KHN0cnVjdCBrb2JqZWN0ICoga29iaikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG4sIHN0cnVjdCBwY2lfZGV2LCBkZXYpOworfQorCisgIFRoaXMgYWxsb3dzIHRoZSBjb21waWxlciB0byB2ZXJpZnkgdHlwZS1zYWZldHkgb2YgdGhlIG9wZXJhdGlvbnMgCisgIHRoYXQgYXJlIHBlcmZvcm1lZCAod2hpY2ggaXMgR29vZCkuCisKKworLSBJbml0aWFsaXplIHRoZSBkZXZpY2Ugb24gcmVnaXN0cmF0aW9uLgorCisgIFdoZW4gZGV2aWNlcyBhcmUgZGlzY292ZXJlZCBvciByZWdpc3RlcmVkIHdpdGggdGhlIGJ1cyB0eXBlLCB0aGUgCisgIGJ1cyBkcml2ZXIgc2hvdWxkIGluaXRpYWxpemUgdGhlIGdlbmVyaWMgZGV2aWNlLiBUaGUgbW9zdCBpbXBvcnRhbnQKKyAgdGhpbmdzIHRvIGluaXRpYWxpemUgYXJlIHRoZSBidXNfaWQsIHBhcmVudCwgYW5kIGJ1cyBmaWVsZHMuCisKKyAgVGhlIGJ1c19pZCBpcyBhbiBBU0NJSSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgZGV2aWNlJ3MgYWRkcmVzcyBvbgorICB0aGUgYnVzLiBUaGUgZm9ybWF0IG9mIHRoaXMgc3RyaW5nIGlzIGJ1cy1zcGVjaWZpYy4gVGhpcyBpcworICBuZWNlc3NhcnkgZm9yIHJlcHJlc2VudGluZyBkZXZpY2VzIGluIHN5c2ZzLiAKKworICBwYXJlbnQgaXMgdGhlIHBoeXNpY2FsIHBhcmVudCBvZiB0aGUgZGV2aWNlLiBJdCBpcyBpbXBvcnRhbnQgdGhhdAorICB0aGUgYnVzIGRyaXZlciBzZXRzIHRoaXMgZmllbGQgY29ycmVjdGx5LiAKKworICBUaGUgZHJpdmVyIG1vZGVsIG1haW50YWlucyBhbiBvcmRlcmVkIGxpc3Qgb2YgZGV2aWNlcyB0aGF0IGl0IHVzZXMKKyAgZm9yIHBvd2VyIG1hbmFnZW1lbnQuIFRoaXMgbGlzdCBtdXN0IGJlIGluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGF0CisgIGRldmljZXMgYXJlIHNodXRkb3duIGJlZm9yZSB0aGVpciBwaHlzaWNhbCBwYXJlbnRzLCBhbmQgdmljZSB2ZXJzYS4KKyAgVGhlIG9yZGVyIG9mIHRoaXMgbGlzdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwYXJlbnQgb2YgcmVnaXN0ZXJlZAorICBkZXZpY2VzLgorCisgIEFsc28sIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGV2aWNlJ3Mgc3lzZnMgZGlyZWN0b3J5IGRlcGVuZHMgb24gYQorICBkZXZpY2UncyBwYXJlbnQuIHN5c2ZzIGV4cG9ydHMgYSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRoYXQgbWlycm9ycyAKKyAgdGhlIGRldmljZSBoaWVyYXJjaHkuIEFjY3VyYXRlbHkgc2V0dGluZyB0aGUgcGFyZW50IGd1YXJhbnRlZXMgdGhhdAorICBzeXNmcyB3aWxsIGFjY3VyYXRlbHkgcmVwcmVzZW50IHRoZSBoaWVyYXJjaHkuCisKKyAgVGhlIGRldmljZSdzIGJ1cyBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gdGhlIGJ1cyB0eXBlIHRoZSBkZXZpY2UKKyAgYmVsb25ncyB0by4gVGhpcyBzaG91bGQgYmUgc2V0IHRvIHRoZSBidXNfdHlwZSB0aGF0IHdhcyBkZWNsYXJlZAorICBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlLiAKKworICBPcHRpb25hbGx5LCB0aGUgYnVzIGRyaXZlciBtYXkgc2V0IHRoZSBkZXZpY2UncyBuYW1lIGFuZCByZWxlYXNlCisgIGZpZWxkcy4KKworICBUaGUgbmFtZSBmaWVsZCBpcyBhbiBBU0NJSSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZGV2aWNlLCBsaWtlCisKKyAgICAgIkFUSSBUZWNobm9sb2dpZXMgSW5jIFJhZGVvbiBRRCIKKworICBUaGUgcmVsZWFzZSBmaWVsZCBpcyBhIGNhbGxiYWNrIHRoYXQgdGhlIGRyaXZlciBtb2RlbCBjb3JlIGNhbGxzIAorICB3aGVuIHRoZSBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCwgYW5kIGFsbCByZWZlcmVuY2VzIHRvIGl0IGhhdmUgCisgIGJlZW4gcmVsZWFzZWQuIE1vcmUgb24gdGhpcyBpbiBhIG1vbWVudC4KKworCistIFJlZ2lzdGVyIHRoZSBkZXZpY2UuIAorCisgIE9uY2UgdGhlIGdlbmVyaWMgZGV2aWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLCBpdCBjYW4gYmUgcmVnaXN0ZXJlZAorICB3aXRoIHRoZSBkcml2ZXIgbW9kZWwgY29yZSBieSBkb2luZzoKKworICAgICAgIGRldmljZV9yZWdpc3RlcigmZGV2LT5kZXYpOworCisgIEl0IGNhbiBsYXRlciBiZSB1bnJlZ2lzdGVyZWQgYnkgZG9pbmc6IAorCisgICAgICAgZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+ZGV2KTsKKworICBUaGlzIHNob3VsZCBoYXBwZW4gb24gYnVzZXMgdGhhdCBzdXBwb3J0IGhvdHBsdWdnYWJsZSBkZXZpY2VzLiAKKyAgSWYgYSBidXMgZHJpdmVyIHVucmVnaXN0ZXJzIGEgZGV2aWNlLCBpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IGZyZWUKKyAgaXQuIEl0IHNob3VsZCBpbnN0ZWFkIHdhaXQgZm9yIHRoZSBkcml2ZXIgbW9kZWwgY29yZSB0byBjYWxsIHRoZSAKKyAgZGV2aWNlJ3MgcmVsZWFzZSBtZXRob2QsIHRoZW4gZnJlZSB0aGUgYnVzLXNwZWNpZmljIG9iamVjdC4gCisgIChUaGVyZSBtYXkgYmUgb3RoZXIgY29kZSB0aGF0IGlzIGN1cnJlbnRseSByZWZlcmVuY2luZyB0aGUgZGV2aWNlCisgIHN0cnVjdHVyZSwgYW5kIGl0IHdvdWxkIGJlIHJ1ZGUgdG8gZnJlZSB0aGUgZGV2aWNlIHdoaWxlIHRoYXQgaXMgCisgIGhhcHBlbmluZykuCisKKworICBXaGVuIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgYSBkaXJlY3RvcnkgaW4gc3lzZnMgaXMgY3JlYXRlZC4gCisgIFRoZSBQQ0kgdHJlZSBpbiBzeXNmcyBsb29rcyBsaWtlOiAKKworL3N5cy9kZXZpY2VzL3BjaTAvCit8LS0gMDA6MDAuMAorfC0tIDAwOjAxLjAKK3wgICBgLS0gMDE6MDAuMAorfC0tIDAwOjAyLjAKK3wgICBgLS0gMDI6MWYuMAorfCAgICAgICBgLS0gMDM6MDAuMAorfC0tIDAwOjFlLjAKK3wgICBgLS0gMDQ6MDQuMAorfC0tIDAwOjFmLjAKK3wtLSAwMDoxZi4xCit8ICAgfC0tIGlkZTAKK3wgICB8ICAgfC0tIDAuMAorfCAgIHwgICBgLS0gMC4xCit8ICAgYC0tIGlkZTEKK3wgICAgICAgYC0tIDEuMAorfC0tIDAwOjFmLjIKK3wtLSAwMDoxZi4zCitgLS0gMDA6MWYuNQorCisgIEFsc28sIHN5bWxpbmtzIGFyZSBjcmVhdGVkIGluIHRoZSBidXMncyAnZGV2aWNlcycgZGlyZWN0b3J5CisgIHRoYXQgcG9pbnQgdG8gdGhlIGRldmljZSdzIGRpcmVjdG9yeSBpbiB0aGUgcGh5c2ljYWwgaGllcmFyY2h5LiAKKworL3N5cy9idXMvcGNpL2RldmljZXMvCit8LS0gMDA6MDAuMCAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MDAuMAorfC0tIDAwOjAxLjAgLT4gLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjAxLjAKK3wtLSAwMDowMi4wIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDowMi4wCit8LS0gMDA6MWUuMCAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MWUuMAorfC0tIDAwOjFmLjAgLT4gLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjFmLjAKK3wtLSAwMDoxZi4xIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDoxZi4xCit8LS0gMDA6MWYuMiAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MWYuMgorfC0tIDAwOjFmLjMgLT4gLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjFmLjMKK3wtLSAwMDoxZi41IC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDoxZi41Cit8LS0gMDE6MDAuMCAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MDEuMC8wMTowMC4wCit8LS0gMDI6MWYuMCAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MDIuMC8wMjoxZi4wCit8LS0gMDM6MDAuMCAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MDIuMC8wMjoxZi4wLzAzOjAwLjAKK2AtLSAwNDowNC4wIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDoxZS4wLzA0OjA0LjAKKworCisKK1N0ZXAgMzogUmVnaXN0ZXJpbmcgRHJpdmVycy4KKworc3RydWN0IGRldmljZV9kcml2ZXIgaXMgYSBzaW1wbGUgZHJpdmVyIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGEgc2V0CitvZiBvcGVyYXRpb25zIHRoYXQgdGhlIGRyaXZlciBtb2RlbCBjb3JlIG1heSBjYWxsLiAKKworCistIEVtYmVkIGEgc3RydWN0IGRldmljZV9kcml2ZXIgaW4gdGhlIGJ1cy1zcGVjaWZpYyBkcml2ZXIuIAorCisgIEp1c3QgbGlrZSB3aXRoIGRldmljZXMsIGRvIHNvbWV0aGluZyBsaWtlOgorCitzdHJ1Y3QgcGNpX2RyaXZlciB7CisgICAgICAgLi4uCisgICAgICAgc3RydWN0IGRldmljZV9kcml2ZXIgICAgZHJpdmVyOworfTsKKworCistIEluaXRpYWxpemUgdGhlIGdlbmVyaWMgZHJpdmVyIHN0cnVjdHVyZS4gCisKKyAgV2hlbiB0aGUgZHJpdmVyIHJlZ2lzdGVycyB3aXRoIHRoZSBidXMgKGUuZy4gZG9pbmcgcGNpX3JlZ2lzdGVyX2RyaXZlcigpKSwKKyAgaW5pdGlhbGl6ZSB0aGUgbmVjZXNzYXJ5IGZpZWxkcyBvZiB0aGUgZHJpdmVyOiB0aGUgbmFtZSBhbmQgYnVzCisgIGZpZWxkcy4gCisKKworLSBSZWdpc3RlciB0aGUgZHJpdmVyLgorCisgIEFmdGVyIHRoZSBnZW5lcmljIGRyaXZlciBoYXMgYmVlbiBpbml0aWFsaXplZCwgY2FsbAorCisJZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisKKyAgdG8gcmVnaXN0ZXIgdGhlIGRyaXZlciB3aXRoIHRoZSBjb3JlLgorCisgIFdoZW4gdGhlIGRyaXZlciBpcyB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgYnVzLCB1bnJlZ2lzdGVyIGl0IGZyb20gdGhlCisgIGNvcmUgYnkgZG9pbmc6CisKKyAgICAgICAgZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKworICBOb3RlIHRoYXQgdGhpcyB3aWxsIGJsb2NrIHVudGlsIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBkcml2ZXIgaGF2ZQorICBnb25lIGF3YXkuIE5vcm1hbGx5LCB0aGVyZSB3aWxsIG5vdCBiZSBhbnkuCisKKworLSBTeXNmcyByZXByZXNlbnRhdGlvbi4KKworICBEcml2ZXJzIGFyZSBleHBvcnRlZCB2aWEgc3lzZnMgaW4gdGhlaXIgYnVzJ3MgJ2RyaXZlcidzIGRpcmVjdG9yeS4gCisgIEZvciBleGFtcGxlOgorCisvc3lzL2J1cy9wY2kvZHJpdmVycy8KK3wtLSAzYzU5eAorfC0tIEVuc29uaXEgQXVkaW9QQ0kKK3wtLSBhZ3BnYXJ0LWFtZGs3Cit8LS0gZTEwMAorYC0tIHNlcmlhbAorCisKK1N0ZXAgNDogRGVmaW5lIEdlbmVyaWMgTWV0aG9kcyBmb3IgRHJpdmVycy4KKworc3RydWN0IGRldmljZV9kcml2ZXIgZGVmaW5lcyBhIHNldCBvZiBvcGVyYXRpb25zIHRoYXQgdGhlIGRyaXZlciBtb2RlbAorY29yZSBjYWxscy4gTW9zdCBvZiB0aGVzZSBvcGVyYXRpb25zIGFyZSBwcm9iYWJseSBzaW1pbGFyIHRvCitvcGVyYXRpb25zIHRoZSBidXMgYWxyZWFkeSBkZWZpbmVzIGZvciBkcml2ZXJzLCBidXQgdGFraW5nIGRpZmZlcmVudAorcGFyYW1ldGVycy4gCisKK0l0IHdvdWxkIGJlIGRpZmZpY3VsdCBhbmQgdGVkaW91cyB0byBmb3JjZSBldmVyeSBkcml2ZXIgb24gYSBidXMgdG8KK3NpbXVsdGFuZW91c2x5IGNvbnZlcnQgdGhlaXIgZHJpdmVycyB0byBnZW5lcmljIGZvcm1hdC4gSW5zdGVhZCwgdGhlCitidXMgZHJpdmVyIHNob3VsZCBkZWZpbmUgc2luZ2xlIGluc3RhbmNlcyBvZiB0aGUgZ2VuZXJpYyBtZXRob2RzIHRoYXQKK2ZvcndhcmQgY2FsbCB0byB0aGUgYnVzLXNwZWNpZmljIGRyaXZlcnMuIEZvciBpbnN0YW5jZTogCisKKworc3RhdGljIGludCBwY2lfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICogZGV2KQoreworICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisgICAgICAgIHN0cnVjdCBwY2lfZHJpdmVyICogZHJ2ID0gcGNpX2Rldi0+ZHJpdmVyOworCisgICAgICAgIGlmIChkcnYpIHsKKyAgICAgICAgICAgICAgICBpZiAoZHJ2LT5yZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgICBkcnYtPnJlbW92ZShwY2lfZGV2KTsKKyAgICAgICAgICAgICAgICBwY2lfZGV2LT5kcml2ZXIgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCisKK1RoZSBnZW5lcmljIGRyaXZlciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGVzZSBtZXRob2RzIGJlZm9yZSBpdAoraXMgcmVnaXN0ZXJlZC4gCisKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBjb21tb24gZHJpdmVyIGZpZWxkcyAqLworICAgICAgICBkcnYtPmRyaXZlci5uYW1lID0gZHJ2LT5uYW1lOworICAgICAgICBkcnYtPmRyaXZlci5idXMgPSAmcGNpX2J1c190eXBlOworICAgICAgICBkcnYtPmRyaXZlci5wcm9iZSA9IHBjaV9kZXZpY2VfcHJvYmU7CisgICAgICAgIGRydi0+ZHJpdmVyLnJlc3VtZSA9IHBjaV9kZXZpY2VfcmVzdW1lOworICAgICAgICBkcnYtPmRyaXZlci5zdXNwZW5kID0gcGNpX2RldmljZV9zdXNwZW5kOworICAgICAgICBkcnYtPmRyaXZlci5yZW1vdmUgPSBwY2lfZGV2aWNlX3JlbW92ZTsKKworICAgICAgICAvKiByZWdpc3RlciB3aXRoIGNvcmUgKi8KKyAgICAgICAgZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisKKworSWRlYWxseSwgdGhlIGJ1cyBzaG91bGQgb25seSBpbml0aWFsaXplIHRoZSBmaWVsZHMgaWYgdGhleSBhcmUgbm90CithbHJlYWR5IHNldC4gVGhpcyBhbGxvd3MgdGhlIGRyaXZlcnMgdG8gaW1wbGVtZW50IHRoZWlyIG93biBnZW5lcmljCittZXRob2RzLiAKKworCitTdGVwIDU6IFN1cHBvcnQgZ2VuZXJpYyBkcml2ZXIgYmluZGluZy4gCisKK1RoZSBtb2RlbCBhc3N1bWVzIHRoYXQgYSBkZXZpY2Ugb3IgZHJpdmVyIGNhbiBiZSBkeW5hbWljYWxseQorcmVnaXN0ZXJlZCB3aXRoIHRoZSBidXMgYXQgYW55IHRpbWUuIFdoZW4gcmVnaXN0cmF0aW9uIGhhcHBlbnMsCitkZXZpY2VzIG11c3QgYmUgYm91bmQgdG8gYSBkcml2ZXIsIG9yIGRyaXZlcnMgbXVzdCBiZSBib3VuZCB0byBhbGwKK2RldmljZXMgdGhhdCBpdCBzdXBwb3J0cy4gCisKK0EgZHJpdmVyIHR5cGljYWxseSBjb250YWlucyBhIGxpc3Qgb2YgZGV2aWNlIElEcyB0aGF0IGl0IHN1cHBvcnRzLiBUaGUKK2J1cyBkcml2ZXIgY29tcGFyZXMgdGhlc2UgSURzIHRvIHRoZSBJRHMgb2YgZGV2aWNlcyByZWdpc3RlcmVkIHdpdGggaXQuIAorVGhlIGZvcm1hdCBvZiB0aGUgZGV2aWNlIElEcywgYW5kIHRoZSBzZW1hbnRpY3MgZm9yIGNvbXBhcmluZyB0aGVtIGFyZQorYnVzLXNwZWNpZmljLCBzbyB0aGUgZ2VuZXJpYyBtb2RlbCBkb2VzIGF0dGVtcHQgdG8gZ2VuZXJhbGl6ZSB0aGVtLiAKKworSW5zdGVhZCwgYSBidXMgbWF5IHN1cHBseSBhIG1ldGhvZCBpbiBzdHJ1Y3QgYnVzX3R5cGUgdGhhdCBkb2VzIHRoZQorY29tcGFyaXNvbjogCisKKyAgaW50ICgqbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KTsKKworbWF0Y2ggc2hvdWxkIHJldHVybiAnMScgaWYgdGhlIGRyaXZlciBzdXBwb3J0cyB0aGUgZGV2aWNlLCBhbmQgJzAnCitvdGhlcndpc2UuIAorCitXaGVuIGEgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHRoZSBidXMncyBsaXN0IG9mIGRyaXZlcnMgaXMgaXRlcmF0ZWQKK292ZXIuIGJ1cy0+bWF0Y2goKSBpcyBjYWxsZWQgZm9yIGVhY2ggb25lIHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuIAorCitXaGVuIGEgZHJpdmVyIGlzIHJlZ2lzdGVyZWQsIHRoZSBidXMncyBsaXN0IG9mIGRldmljZXMgaXMgaXRlcmF0ZWQKK292ZXIuIGJ1cy0+bWF0Y2goKSBpcyBjYWxsZWQgZm9yIGVhY2ggZGV2aWNlIHRoYXQgaXMgbm90IGFscmVhZHkKK2NsYWltZWQgYnkgYSBkcml2ZXIuIAorCitXaGVuIGEgZGV2aWNlIGlzIHN1Y2Nlc3NmdWxseSBib3VuZCB0byBhIGRldmljZSwgZGV2aWNlLT5kcml2ZXIgaXMKK3NldCwgdGhlIGRldmljZSBpcyBhZGRlZCB0byBhIHBlci1kcml2ZXIgbGlzdCBvZiBkZXZpY2VzLCBhbmQgYQorc3ltbGluayBpcyBjcmVhdGVkIGluIHRoZSBkcml2ZXIncyBzeXNmcyBkaXJlY3RvcnkgdGhhdCBwb2ludHMgdG8gdGhlCitkZXZpY2UncyBwaHlzaWNhbCBkaXJlY3Rvcnk6CisKKy9zeXMvYnVzL3BjaS9kcml2ZXJzLworfC0tIDNjNTl4Cit8ICAgYC0tIDAwOjBiLjAgLT4gLi4vLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjBiLjAKK3wtLSBFbnNvbmlxIEF1ZGlvUENJCit8LS0gYWdwZ2FydC1hbWRrNworfCAgIGAtLSAwMDowMC4wIC0+IC4uLy4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDowMC4wCit8LS0gZTEwMAorfCAgIGAtLSAwMDowYy4wIC0+IC4uLy4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDowYy4wCitgLS0gc2VyaWFsCisKKworVGhpcyBkcml2ZXIgYmluZGluZyBzaG91bGQgcmVwbGFjZSB0aGUgZXhpc3RpbmcgZHJpdmVyIGJpbmRpbmcKK21lY2hhbmlzbSB0aGUgYnVzIGN1cnJlbnRseSB1c2VzLiAKKworCitTdGVwIDY6IFN1cHBseSBhIGhvdHBsdWcgY2FsbGJhY2suCisKK1doZW5ldmVyIGEgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZHJpdmVyIG1vZGVsIGNvcmUsIHRoZQordXNlcnNwYWNlIHByb2dyYW0gL3NiaW4vaG90cGx1ZyBpcyBjYWxsZWQgdG8gbm90aWZ5IHVzZXJzcGFjZS4gCitVc2VycyBjYW4gZGVmaW5lIGFjdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGEgZGV2aWNlIGlzIGluc2VydGVkIG9yCityZW1vdmVkLiAKKworVGhlIGRyaXZlciBtb2RlbCBjb3JlIHBhc3NlcyBzZXZlcmFsIGFyZ3VtZW50cyB0byB1c2Vyc3BhY2UgdmlhCitlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGluY2x1ZGluZworCistIEFDVElPTjogc2V0IHRvICdhZGQnIG9yICdyZW1vdmUnCistIERFVlBBVEg6IHNldCB0byB0aGUgZGV2aWNlJ3MgcGh5c2ljYWwgcGF0aCBpbiBzeXNmcy4gCisKK0EgYnVzIGRyaXZlciBtYXkgYWxzbyBzdXBwbHkgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciB1c2Vyc3BhY2UgdG8KK2NvbnN1bWUuIFRvIGRvIHRoaXMsIGEgYnVzIG11c3QgaW1wbGVtZW50IHRoZSAnaG90cGx1ZycgbWV0aG9kIGluCitzdHJ1Y3QgYnVzX3R5cGU6CisKKyAgICAgaW50ICgqaG90cGx1ZykgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqKmVudnAsIAorICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CisKK1RoaXMgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSAvc2Jpbi9ob3RwbHVnIGlzIGV4ZWN1dGVkLiAKKworCitTdGVwIDc6IENsZWFuaW5nIHVwIHRoZSBidXMgZHJpdmVyLgorCitUaGUgZ2VuZXJpYyBidXMsIGRldmljZSwgYW5kIGRyaXZlciBzdHJ1Y3R1cmVzIHByb3ZpZGUgc2V2ZXJhbCBmaWVsZHMKK3RoYXQgY2FuIHJlcGxhY2UgdGhvc2UgZGVmaW5lZCBwcml2YXRlbHkgdG8gdGhlIGJ1cyBkcml2ZXIuIAorCistIERldmljZSBsaXN0LgorCitzdHJ1Y3QgYnVzX3R5cGUgY29udGFpbnMgYSBsaXN0IG9mIGFsbCBkZXZpY2VzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYnVzCit0eXBlLiBUaGlzIGluY2x1ZGVzIGFsbCBkZXZpY2VzIG9uIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBidXMgdHlwZS4KK0FuIGludGVybmFsIGxpc3QgdGhhdCB0aGUgYnVzIHVzZXMgbWF5IGJlIHJlbW92ZWQsIGluIGZhdm9yIG9mIHVzaW5nCit0aGlzIG9uZS4KKworVGhlIGNvcmUgcHJvdmlkZXMgYW4gaXRlcmF0b3IgdG8gYWNjZXNzIHRoZXNlIGRldmljZXMuIAorCitpbnQgYnVzX2Zvcl9lYWNoX2RldihzdHJ1Y3QgYnVzX3R5cGUgKiBidXMsIHN0cnVjdCBkZXZpY2UgKiBzdGFydCwgCisgICAgICAgICAgICAgICAgICAgICB2b2lkICogZGF0YSwgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSk7CisKKworLSBEcml2ZXIgbGlzdC4KKworc3RydWN0IGJ1c190eXBlIGFsc28gY29udGFpbnMgYSBsaXN0IG9mIGFsbCBkcml2ZXJzIHJlZ2lzdGVyZWQgd2l0aAoraXQuIEFuIGludGVybmFsIGxpc3Qgb2YgZHJpdmVycyB0aGF0IHRoZSBidXMgZHJpdmVyIG1haW50YWlucyBtYXkgCitiZSByZW1vdmVkIGluIGZhdm9yIG9mIHVzaW5nIHRoZSBnZW5lcmljIG9uZS4gCisKK1RoZSBkcml2ZXJzIG1heSBiZSBpdGVyYXRlZCBvdmVyLCBsaWtlIGRldmljZXM6IAorCitpbnQgYnVzX2Zvcl9lYWNoX2RydihzdHJ1Y3QgYnVzX3R5cGUgKiBidXMsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICogc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICogZGF0YSwgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHZvaWQgKikpOworCisKK1BsZWFzZSBzZWUgZHJpdmVycy9iYXNlL2J1cy5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKKy0gcndzZW0gCisKK3N0cnVjdCBidXNfdHlwZSBjb250YWlucyBhbiByd3NlbSB0aGF0IHByb3RlY3RzIGFsbCBjb3JlIGFjY2Vzc2VzIHRvCit0aGUgZGV2aWNlIGFuZCBkcml2ZXIgbGlzdHMuIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIGJ1cyBkcml2ZXIKK2ludGVybmFsbHksIGFuZCBzaG91bGQgYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyB0aGUgZGV2aWNlIG9yIGRyaXZlcgorbGlzdHMgdGhlIGJ1cyBtYWludGFpbnMuIAorCisKKy0gRGV2aWNlIGFuZCBkcml2ZXIgZmllbGRzLiAKKworU29tZSBvZiB0aGUgZmllbGRzIGluIHN0cnVjdCBkZXZpY2UgYW5kIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGR1cGxpY2F0ZQorZmllbGRzIGluIHRoZSBidXMtc3BlY2lmaWMgcmVwcmVzZW50YXRpb25zIG9mIHRoZXNlIG9iamVjdHMuIEZlZWwgZnJlZQordG8gcmVtb3ZlIHRoZSBidXMtc3BlY2lmaWMgb25lcyBhbmQgZmF2b3IgdGhlIGdlbmVyaWMgb25lcy4gTm90ZQordGhvdWdoLCB0aGF0IHRoaXMgd2lsbCBsaWtlbHkgbWVhbiBmaXhpbmcgdXAgYWxsIHRoZSBkcml2ZXJzIHRoYXQKK3JlZmVyZW5jZSB0aGUgYnVzLXNwZWNpZmljIGZpZWxkcyAodGhvdWdoIHRob3NlIHNob3VsZCBhbGwgYmUgMS1saW5lCitjaGFuZ2VzKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmRpYnVzYiBiL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kaWJ1c2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5ZTk1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kaWJ1c2IKQEAgLTAsMCArMSwyODUgQEAKK0RvY3VtZW50YXRpb24gZm9yIGRpYjMwMDAqIGZyb250ZW5kIGRyaXZlcnMgYW5kIGRpYnVzYiBkZXZpY2UgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKEMpIDIwMDQtNSBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSksCisKK2RpYnVzYiBhbmQgZGliMzAwMG1iL21jIGRyaXZlcnMgYmFzZWQgb24gR1BMIGNvZGUsIHdoaWNoIGhhcworCitDb3B5cmlnaHQgKEMpIDIwMDQgQW1hdXJ5IERlbW9sIGZvciBEaUJjb20gKGFkZW1vbEBkaWJjb20uZnIpCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorCisKK1N1cHBvcnRlZCBkZXZpY2VzIFVTQjEuMQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1Byb2R1Y2VkIGFuZCByZXNlbGxlZCBieSBUd2luaGFuOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFR3aW5oYW5EVFYgVVNCLVRlciBEVkItVCBEZXZpY2UgKFZQNzA0MSkKKwlodHRwOi8vd3d3LnR3aW5oYW4uY29tL3Byb2R1Y3RfdGVycmVzdHJpYWxfMy5hc3AKKworLSBUd2luaGFuRFRWIE1hZ2ljIEJveCAoVlA3MDQxZSkKKwlodHRwOi8vd3d3LnR3aW5oYW4uY29tL3Byb2R1Y3RfdGVycmVzdHJpYWxfNC5hc3AKKworLSBIQU1BIERWQi1UIFVTQiBkZXZpY2UKKwlodHRwOi8vd3d3LmhhbWEuZGUvcG9ydGFsL2FydGljbGVJZCoxMTA2MjAvYWN0aW9uKjI1OTgKKworLSBDVFMgUG9ydGFibGUgKENoaW5lc2UgVGVsZXZpc2lvbiBTeXN0ZW0pICgyKQorCWh0dHA6Ly93d3cuMmN0cy50di9jdHNwb3J0YWJsZS8KKworLSBVbmtub3duIFVTQiBEVkItVCBkZXZpY2Ugd2l0aCB2ZW5kb3IgSUQgSHlwZXItUGFsdGVrCisKKworUHJvZHVjZWQgYW5kIHJlc2VsbGVkIGJ5IEtXb3JsZDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIEtXb3JsZCBWLVN0cmVhbSBYUEVSVCBEVFYgRFZCLVQgVVNCCisJaHR0cDovL3d3dy5rd29ybGQuY29tLnR3L2VuL3Byb2R1Y3QvRFZCVC1VU0IvRFZCVC1VU0IuaHRtbAorCistIEpldFdheSBEVFYgRFZCLVQgVVNCCisJaHR0cDovL3d3dy5qZXR3YXkuY29tLnR3L2V2aXNuL3Byb2R1Y3QvbGNkLXR2L0RWVC1VU0IvZHR2LXVzYi5odG0KKworLSBBRFNUZWNoIEluc3RhbnQgVFYgRFZCLVQgVVNCCisJaHR0cDovL3d3dy5hZHN0ZWNoLmNvbS9wcm9kdWN0cy9QVFYtMzMzL2ludHJvL1BUVi0zMzNfaW50cm8uYXNwP3BpZD1QVFYtMzMzCisKKworT3RoZXJzOgorLS0tLS0tLQorLSBVbHRpbWEgRWxlY3Ryb25pYy9BcnRlYyBUMSBVU0IgVFZCT1ggKEFOMjEzNSwgQU4yMjM1LCBBTjIyMzUgd2l0aCBQYW5hc29uaWMgVHVuZXIpCisJaHR0cDovLzgyLjE2MS4yNDYuMjQ5L3Byb2R1Y3RzLXR2Ym94Lmh0bWwKKworLSBDb21wcm8gVmlkZW9tYXRlIERWQi1VMjAwMCAtIERWQi1UIFVTQiAoMikKKwlodHRwOi8vd3d3LmNvbXByb3VzYS5jb20vcHJvZHVjdHMvdm11MjAwMC5odG0KKworLSBHcmFuZHRlYyBVU0IgRFZCLVQKKwlodHRwOi8vd3d3LmdyYW5kLmNvbS50dy8KKworLSBBdmVybWVkaWEgQXZlclRWIERWQlQgVVNCICgyKQorCWh0dHA6Ly93d3cuYXZlcm1lZGlhLmNvbS8KKworLSBEaUJjb20gVVNCIERWQi1UIHJlZmVyZW5jZSBkZXZpY2UgKG5vbi1wdWJsaWMpCisKKworU3VwcG9ydGVkIGRldmljZXMgVVNCMi4wCis9PT09PT09PT09PT09PT09PT09PT09PT0KKy0gVHdpbmhhbiBNYWdpY0JveCBJSSAoMikKKwlodHRwOi8vd3d3LnR3aW5oYW4uY29tL3Byb2R1Y3RfdGVycmVzdHJpYWxfNy5hc3AKKworLSBIYW5mdGVrIFVNVC0wMTAgKDEpCisJaHR0cDovL3d3dy5nbG9iYWxzb3VyY2VzLmNvbS9zaS82MDA4ODE5NzU3MDgyL1Byb2R1Y3REZXRhaWwvRGlnaXRhbC1UVi9wcm9kdWN0X2lkLTEwMDA0NjUyOQorCistIFR5cGhvb24vWWFrdW1vL0hBTUEgRFZCLVQgbW9iaWxlIFVTQjIuMCAoMSkKKwlodHRwOi8vd3d3Lnlha3Vtby5kZS9wcm9kdWt0ZS9pbmRleC5waHA/cGlkPTEmYWc9RFZCLVQKKworLSBBcnRlYyBUMSBVU0IgVFZCT1ggKEZYMikgKDIpCisKKy0gSGF1cHBhdWdlIFdpblRWIE5PVkEtVCBVU0IyCisJaHR0cDovL3d3dy5oYXVwcGF1Z2UuY29tLworCistIEtXb3JsZC9BRFNUZWNoIEluc3RhbnQgRFZCLVQgVVNCMi4wIChEaUIzMDAwTS1CKQorCistIERpQmNvbSBVU0IyLjAgRFZCLVQgcmVmZXJlbmNlIGRldmljZSAobm9uLXB1YmxpYykKKworMSkgSXQgaXMgd29ya2luZyBhbG1vc3QuCisyKSBObyB0ZXN0IHJlcG9ydHMgcmVjZWl2ZWQgeWV0LgorCisKKzAuIE5FV1M6CisgIDIwMDUtMDItMTEgLSBhZGRlZCBzdXBwb3J0IGZvciB0aGUgS1dvcmxkL0FEU1RlY2ggSW5zdGFudCBEVkItVCBVU0IyLjAuIFRoYW5rcyBhIGxvdCB0byBKb2FjaGltIHZvbiBDYXJvbgorICAyMDA1LTAyLTAyIC0gYWRkZWQgc3VwcG9ydCBmb3IgdGhlIEhhdXBwYXVnZSBXaW4tVFYgTm92YS1UIFVTQjIKKyAgMjAwNS0wMS0zMSAtIGRpc3RvcnRlZCBzdHJlYW1pbmcgaXMgZmluYWxseSBnb25lIGZvciBVU0IxLjEgZGV2aWNlcworICAyMDA1LTAxLTEzIC0gbW92ZWQgdGhlIG1pcnJvcmVkIHBpZF9maWx0ZXJfdGFibGUgYmFjayB0byBkdmItZGlidXNiCisgICAgICAgICAgICAgLSBmaXJzdCBhbG1vc3Qgd29ya2luZyB2ZXJzaW9uIGZvciBIYW5mVGVrIFVNVC0wMTAKKyAgICAgICAgICAgICAtIGZvdW5kIG91dCwgdGhhdCBZYWt1bW8vSEFNQS9UeXBob29uIGFyZSBwcmVkZXNzb3JzIG9mIHRoZSBIYW5mVGVrIFVNVC0wMTAKKyAgMjAwNS0wMS0xMCAtIHJlZmFjdG9yaW5nIGNvbXBsZXRlZCwgbm93IGV2ZXJ5dGhpbmcgaXMgdmVyeSBkZWxpZ2h0ZnVsCisgICAgICAgICAgICAgLSB0dW5lciBxdWlya3MgZm9yIHNvbWUgd2VpcmQgZGV2aWNlcyAoQXJ0ZWMgVDEgQU4yMjM1IGRldmljZSBoYXMgc29tZXRpbWVzIGEKKyAgICAgICAgICAgICAgIFBhbmFzb25pYyBUdW5lciBhc3NlbWJsZWQpLiBUdW5lcnByb2JpbmcgaW1wbGVtZW50ZWQuIFRoYW5rcyBhIGxvdCB0byBHdW5uYXIgV2l0dGljaC4KKyAgMjAwNC0xMi0yOSAtIGFmdGVyIHNldmVyYWwgZGF5cyBvZiBzdHJ1Z2dsaW5nIGFyb3VuZCBidWcgb2Ygbm8gcmV0dXJuaW5nIFVSQnMgZml4ZWQuCisgIDIwMDQtMTItMjYgLSByZWZhY3RvcmVkIHRoZSBkaWJ1c2ItZHJpdmVyLCBzcGxpdHRlZCBpbnRvIHNlcGFyYXRlIGZpbGVzCisgICAgICAgICAgICAgLSBpMmMtcHJvYmluZyBlbmFibGVkCisgIDIwMDQtMTItMDYgLSBwb3NzaWJpbGl0eSBmb3IgZGVtb2QgaTJjLWFkZHJlc3MgcHJvYmluZworICAgICAgICAgICAgIC0gbmV3IHVzYiBJRHMgKENvbXBybyxBcnRlYykKKyAgMjAwNC0xMS0yMyAtIG1lcmdlZCBjaGFuZ2VzIGZyb20gRGlCMzAwME1DX3ZlcjIuMQorICAgICAgICAgICAgIC0gcmV2aXNlZCB0aGUgZGVidWdnaW5nCisgICAgICAgICAgICAgLSBwb3NzaWJpbGl0eSB0byBkZWxpdmVyIHRoZSBjb21wbGV0ZSBUUyBmb3IgVVNCMi4wCisgIDIwMDQtMTEtMjEgLSBmaXJzdCB3b3JraW5nIHZlcnNpb24gb2YgdGhlIGRpYjMwMDBtYy9wIGZyb250ZW5kIGRyaXZlci4KKyAgMjAwNC0xMS0xMiAtIGFkZGVkIGFkZGl0aW9uYWwgcmVtb3RlIGNvbnRyb2wga2V5cy4gVGhhbmtzIHRvIFV3ZSBIYW5rZS4KKyAgMjAwNC0xMS0wNyAtIGFkZGVkIHJlbW90ZSBjb250cm9sIHN1cHBvcnQuIFRoYW5rcyB0byBEYXZpZCBNYXR0aGV3cy4KKyAgMjAwNC0xMS0wNSAtIGFkZGVkIHN1cHBvcnQgZm9yIGEgbmV3IGRldmljZXMgKEdyYW5kdGVjL0F2ZXJtZWRpYS9BcnRlYykKKyAgICAgICAgICAgICAtIG1lcmdlZCBteSBjaGFuZ2VzIChmb3IgZGliMzAwMG1iL2RpYnVzYikgdG8gdGhlIEZFX1JFRkFDVE9SSU5HLCBiZWNhdXNlIGl0IGJlY2FtZSBIRUFECisgICAgICAgICAgICAgLSBtb3ZlZCB0cmFuc2ZlciBjb250cm9sIChwaWQgZmlsdGVyLCBmaWZvIGNvbnRyb2wpIGZyb20gdXNiIGRyaXZlciB0byBmcm9udGVuZCwgaXQgc2VlbXMKKyAgICAgICAgICAgICAgIGJldHRlciBzZXR0bGVkIHRoZXJlIChhZGRlZCB4ZmVyX29wcy1zdHJ1Y3QpCisgICAgICAgICAgICAgLSBjcmVhdGVkIGEgY29tbW9uIGZpbGVzIGZvciBmcm9udGVuZHMgKG1jL3AvbWIpCisgIDIwMDQtMDktMjggLSBhZGRlZCBzdXBwb3J0IGZvciBhIG5ldyBkZXZpY2UgKFVua293biwgdmVuZG9yIElEIGlzIEh5cGVyLVBhbHRlaykKKyAgMjAwNC0wOS0yMCAtIGFkZGVkIHN1cHBvcnQgZm9yIGEgbmV3IGRldmljZSAoQ29tcHJvIERWQi1VMjAwMCksIHRoYW5rcworICAgICAgICAgICAgICAgdG8gQW1hdXJ5IERlbW9sIGZvciByZXBvcnRpbmcKKyAgICAgICAgICAgICAtIGNoYW5nZWQgdXNiIFRTIHRyYW5zZmVyIG1ldGhvZCAoc2V2ZXJhbCB1cmJzLCBzdG9wcGluZyB0cmFuc2ZlcgorICAgICAgICAgICAgICAgYmVmb3JlIHNldHRpbmcgYSBuZXcgcGlkKQorICAyMDA0LTA5LTEzIC0gYWRkZWQgc3VwcG9ydCBmb3IgYSBuZXcgZGV2aWNlIChBcnRlYyBUMSBVU0IgVFZCT1gpLCB0aGFua3MKKyAgICAgICAgICAgICAgIHRvIENocmlzdGlhbiBNb3RzY2hrZSBmb3IgcmVwb3J0aW5nCisgIDIwMDQtMDktMDUgLSByZWxlYXNlZCB0aGUgZGlidXNiIGRldmljZSBhbmQgZGliMzAwMG1iLWZyb250ZW5kIGRyaXZlcgorCisgIChvbGQgbmV3cyBmb3IgdnA3MDQxLmMpCisgIDIwMDQtMDctMTUgLSBmb3VuZCBvdXQsIGJ5IGFjY2lkZW50LCB0aGF0IHRoZSBkZXZpY2UgaGFzIGEgVFVBNjAxMFhTIGZvcgorICAgICAgICAgICAgICAgUExMCisgIDIwMDQtMDctMTIgLSBmaWd1cmVkIG91dCwgdGhhdCB0aGUgZHJpdmVyIHNob3VsZCBhbHNvIHdvcmsgd2l0aCB0aGUKKyAgICAgICAgICAgICAgIENUUyBQb3J0YWJsZSAoQ2hpbmVzZSBUZWxldmlzaW9uIFN5c3RlbSkKKyAgMjAwNC0wNy0wOCAtIGZpcm13YXJlLWV4dHJhY3Rpb24tMi40MjItcHJvYmxlbSBzb2x2ZWQsIGRyaXZlciBpcyBub3cgd29ya2luZworICAgICAgICAgICAgICAgcHJvcGVybHkgd2l0aCBmaXJtd2FyZSBleHRyYWN0ZWQgZnJvbSAyLjQyMgorCQkJIC0gI2lmIGZvciAyLjYuNCAoZHZiKSwgY29tcGlsZSBpc3N1ZQorCQkJIC0gY2hhbmdlZCBmaXJtd2FyZSBoYW5kbGluZywgc2VlIHZwNzA0MS50eHQgc2VjIDEuMQorICAyMDA0LTA3LTAyIC0gc29tZSB0dW5lciBtb2RpZmljYXRpb25zLCB2MC4xLCBjbGVhbnVwcywgZmlyc3QgcHVibGljCisgIDIwMDQtMDYtMjggLSBub3cgdXNpbmcgdGhlIGR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cywgZXZlcnl0aGluZworICAgICAgICAgICAgICAgcnVucyBmaW5lIG5vdworICAyMDA0LTA2LTI3IC0gYWJsZSB0byB3YXRjaCBhbmQgc3dpdGNoaW5nIGNoYW5uZWxzIChwcmUtYWxwaGEpCisgICAgICAgICAgICAgLSBubyBzZWN0aW9uIGZpbHRlcmluZyB5ZXQKKyAgMjAwNC0wNi0wNiAtIGZpcnN0IFRTIHJlY2VpdmVkLCBidXQga2VybmVsIG9vcHMgOi8KKyAgMjAwNC0wNS0xNCAtIGZpcm13YXJlIGxvYWRlciBpcyB3b3JraW5nCisgIDIwMDQtMDUtMTEgLSBzdGFydCB3cml0aW5nIHRoZSBkcml2ZXIKKworMS4gSG93IHRvIHVzZT8KK05PVEU6IFRoaXMgZHJpdmVyIHdhcyBkZXZlbG9wZWQgdXNpbmcgTGludXggMi42LjYuLAoraXQgaXMgd29ya2luZyB3aXRoIDIuNi43IGFuZCBhYm92ZS4KKworTGludXggMi40Lnggc3VwcG9ydCBpcyBub3QgcGxhbm5lZCwgYnV0IHBhdGNoZXMgYXJlIHZlcnkgd2VsY29tZS4KKworTk9URTogSSdtIHVzaW5nIERlYmlhbiB0ZXN0aW5nLCBzbyB0aGUgZm9sbG93aW5nIGV4cGxhaW5hdGlvbiAoZXNwZWNpYWxseQordGhlIGhvdHBsdWctcGF0aCkgbmVlZG4ndCBtYXRjaCB5b3VyIHN5c3RlbSwgYnV0IHByb2JhYmx5IGl0IHdpbGwgOikuCisKK1RoZSBkcml2ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBzaW5jZSBMaW51eCAyLjYuMTAuCisKKzEuMS4gRmlybXdhcmUKKworVGhlIFVTQiBkcml2ZXIgbmVlZHMgdG8gZG93bmxvYWQgYSBmaXJtd2FyZSB0byBzdGFydCB3b3JraW5nLgorCitZb3UgY2FuIGVpdGhlciB1c2UgImdldF9kdmJfZmlybXdhcmUgZGlidXNiIiB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUgb3IgeW91CitjYW4gZ2V0IGl0IGRpcmVjdGx5IHZpYQorCitmb3IgVVNCMS4xIChBTjIxMzUpCitodHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS9kdmItZGlidXNiLTUuMC4wLjExLmZ3CisKK2ZvciBVU0IxLjEgKEFOMjIzNSkgKGEgZmV3IEFydGVjIFQxIGRldmljZXMpCitodHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS9kdmItZGlidXNiLWFuMjIzNS0xLmZ3CisKK2ZvciBVU0IyLjAgKEZYMikgSGF1cHBhdWdlLCBEaUJjb20KK2h0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlL2R2Yi1kaWJ1c2ItNi4wLjAuNS5mdworCitmb3IgVVNCMi4wIEFEU1RlY2gvS3dvcmxkIFVTQjIuMAoraHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvZHZiLWRpYnVzYi1hZHN0ZWNoLXVzYjItMS5mdworCitmb3IgVVNCMi4wIEhhbmZUZWsKK2h0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlL2R2Yi1kaWJ1c2ItYW4yMjM1LTEuZncKKworCisxLjIuIENvbXBpbGluZworCitTaW5jZSB0aGUgZHJpdmVyIGlzIGluIHRoZSBsaW51eCBrZXJuZWwsIGFjdGl2YXRpbmcgdGhlIGRyaXZlciBpbgoreW91ciBmYXZvcml0ZSBjb25maWctZW52aXJvbm1lbnQgc2hvdWxkIHN1ZmZpY2llbnQuIEkgcmVjb21tZW5kCit0byBjb21waWxlIHRoZSBkcml2ZXIgYXMgbW9kdWxlLiBIb3RwbHVnIGRvZXMgdGhlIHJlc3QuCisKKzEuMy4gTG9hZGluZyB0aGUgZHJpdmVycworCitIb3RwbHVnIGlzIGFibGUgdG8gbG9hZCB0aGUgZHJpdmVyLCB3aGVuIGl0IGlzIG5lZWRlZCAoYmVjYXVzZSB5b3UgcGx1Z2dlZAoraW4gdGhlIGRldmljZSkuCisKK0lmIHlvdSB3YW50IHRvIGVuYWJsZSBkZWJ1ZyBvdXRwdXQsIHlvdSBoYXZlIHRvIGxvYWQgdGhlIGRyaXZlciBtYW51YWxseSBhbmQKK2Zyb20gd2l0aGluZyB0aGUgZHZiLWtlcm5lbCBjdnMgcmVwb3NpdG9yeS4KKworZmlyc3QgaGF2ZSBhIGxvb2ssIHdoaWNoIGRlYnVnIGxldmVsIGFyZSBhdmFpbGFibGU6CisKK21vZGluZm8gZGliMzAwMG1iCittb2RpbmZvIGRpYjMwMDAtY29tbW9uCittb2RpbmZvIGRpYjMwMDBtYworbW9kaW5mbyBkdmItZGlidXNiCisKK21vZHByb2JlIGRpYjMwMDAtY29tbW9uIGRlYnVnPTxsZXZlbD4KK21vZHByb2JlIGRpYjMwMDBtYiBkZWJ1Zz08bGV2ZWw+Cittb2Rwcm9iZSBkaWIzMDAwbWMgZGVidWc9PGxldmVsPgorbW9kcHJvYmUgZHZiLWRpYnVzYiBkZWJ1Zz08bGV2ZWw+CisKK3Nob3VsZCBkbyB0aGUgdHJpY2suCisKK1doZW4gdGhlIGRyaXZlciBpcyBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCB0aGUgZmlybXdhcmUgZmlsZSB3YXMgaW4KK3RoZSByaWdodCBwbGFjZSBhbmQgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQsIHRoZSAiUG93ZXIiLUxFRCBzaG91bGQgYmUKK3R1cm5lZCBvbi4KKworQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gc3RhcnQgYSBkdmItY2FwYWJsZSBhcHBsaWNhdGlvbi4gRm9yIG15c2VsZgorSSB1c2VkIG1wbGF5ZXIsIGR2YnNjYW4sIHR6YXAgYW5kIGtheHR2LCB0aGV5IGFyZSB3b3JraW5nLiBVc2luZyB0aGUgZGV2aWNlCitpbiB2ZHIgaXMgd29ya2luZyBub3cgYWxzby4KKworMi4gS25vd24gcHJvYmxlbXMgYW5kIGJ1Z3MKKworLSBEb24ndCByZW1vdmUgdGhlIFVTQiBkZXZpY2Ugd2hpbGUgcnVubmluZyBhbiBEVkIgYXBwbGljYXRpb24sIHlvdXIgc3lzdGVtIHdpbGwgZGllLgorCisyLjEuIEFkZGluZyBzdXBwb3J0IGZvciBkZXZpY2VzCisKK0l0IGlzIG5vdCBwb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHJhbmdlIG9mIGRldmljZXMgYmFzZWQgb24gdGhlIERpQmNvbQorcmVmZXJlbmNlIGRlc2lnbnMuIFRoaXMgaXMgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGRlc2lnbiBvZiBEaUJjb20gY2FuIGJlIHNvbGQKK3RvIHRoaXJkcywgd2l0aG91dCB0ZWxsaW5nIERpQmNvbSAoc28gZG9uZSB3aXRoIHRoZSBUd2luaGFuIFZQNzA0MSBhbmQKK3RoZSBIQU1BIGRldmljZSkuCisKK1doZW4geW91IHRoaW5rIHlvdSBoYXZlIGEgZGV2aWNlIGxpa2UgdGhpcyBhbmQgdGhlIGRyaXZlciBkb2VzIG5vdCByZWNvZ25pemVzIGl0LAorcGxlYXNlIHNlbmQgdGhlICoqKipsb2FkKi5pbmYgYW5kIHRoZSAqKioqY2FwKi5pbmYgb2YgdGhlIFdpbmRvd3MgZHJpdmVyIHRvIG1lLgorCitTb21ldGltZXMgdGhlIFZlbmRvciBvciBQcm9kdWN0IElEIGlzIGlkZW50aWNhbCB0byB0aGUgb25lcyBvZiBUd2luaGFuLCBldmVuCit0aG91Z2ggaXQgaXMgbm90IGEgVHdpbmhhbiBkZXZpY2UgKGUuZy4gSEFNQSksIHRoZW4gcGxlYXNlIHNlbmQgbWUgdGhlIG5hbWUKK29mIHRoZSBkZXZpY2UuIEkgd2lsbCBhZGQgaXQgdG8gdGhpcyBsaXN0IGluIG9yZGVyIHRvIG1ha2UgdGhpcyBjbGVhciB0bworb3RoZXJzLgorCitJZiB5b3UgYXJlIGZhbWlsYXIgd2l0aCBDIHlvdSBjYW4gYWxzbyBhZGQgdGhlIFZJRCBhbmQgUElEIG9mIHRoZSBkZXZpY2UgdG8KK3RoZSBkdmItZGlidXNiLWNvcmUuYy1maWxlIGFuZCBjcmVhdGUgYSBwYXRjaCBhbmQgc2VuZCBpdCBvdmVyIHRvIG1lIG9yIHRvCit0aGUgbGludXgtZHZiIG1haWxpbmcgbGlzdCwgX2FmdGVyXyB5b3UgaGF2ZSB0cmllZCBjb21waWxpbmcgYW5kIG1vZHByb2JpbmcKK2l0LgorCisyLjIuIFVTQjEuMSBCYW5kd2lkdGggbGltaXRhdGlvbgorCitNb3N0IG9mIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGRldmljZXMgYXJlIFVTQjEuMSBhbmQgdGh1cyB0aGV5IGhhdmUgYQorbWF4aW11bSBiYW5kd2lkdGggb2YgYWJvdXQgNS02IE1CaXQvcyB3aGVuIGNvbm5lY3RlZCB0byBhIFVTQjIuMCBodWIuCitUaGlzIGlzIG5vdCBlbm91Z2ggZm9yIHJlY2VpdmluZyB0aGUgY29tcGxldGUgdHJhbnNwb3J0IHN0cmVhbSBvZiBhCitEVkItVCBjaGFubmVsICh3aGljaCBjYW4gYmUgYWJvdXQgMTYgTUJpdC9zKS4gTm9ybWFsbHkgdGhpcyBpcyBub3QgYQorcHJvYmxlbSwgaWYgeW91IG9ubHkgd2FudCB0byB3YXRjaCBUViAodGhpcyBkb2VzIG5vdCBhcHBseSBmb3IgSERUViksCitidXQgd2F0Y2hpbmcgYSBjaGFubmVsIHdoaWxlIHJlY29yZGluZyBhbm90aGVyIGNoYW5uZWwgb24gdGhlIHNhbWUKK2ZyZXF1ZW5jeSBzaW1wbHkgZG9lcyBub3Qgd29yayB2ZXJ5IHdlbGwuIFRoaXMgYXBwbGllcyB0byBhbGwgVVNCMS4xCitEVkItVCBkZXZpY2VzLCBub3QganVzdCBkaWJ1c2IpCisKK1VwZGF0ZTogRm9yIHRoZSBVU0IxLjEgYW5kIFZEUiBzb21lIHdvcmsgaGFzIGJlZW4gZG9uZSAocGF0Y2hlcyBhbmQgY29tbWVudHMKK2FyZSBzdGlsbCB2ZXJ5IHdlbGNvbWUpLiBNYXliZSB0aGUgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gdGhlIG1lYW50aW1lIGJlY2F1c2UgSQorbm93IHVzZSB0aGUgZG14X3N3X2ZpbHRlciBmdW5jdGlvbiBpbnN0ZWFkIG9mIGRteF9zd19maWx0ZXJfcGFja2V0LiBJIGhvcGUgdGhlCitsaW51eC1kdmIgc29mdHdhcmUgZmlsdGVyIGlzIGFibGUgdG8gZ2V0IHRoZSBiZXN0IG9mIHRoZSBnYXJibGVkIFRTLgorCitUaGUgYnVnLCB3aGVyZSB0aGUgVFMgaXMgZGlzdG9ydGVkIGJ5IGEgaGVhdnkgdXNhZ2Ugb2YgdGhlIGRldmljZSBpcyBnb25lCitkZWZpbml0ZWx5LiBBbGwgZGlidXNiLWRldmljZXMgSSB3YXMgdXNpbmcgKFR3aW5oYW4sIEt3b3JsZCwgRGlCY29tKSBhcmUKK3dvcmtpbmcgbGlrZSBjaGFybSBub3cgd2l0aCBWRFIuIFNvbWV0aW1lcyBJIGV2ZW4gd2FzIGFibGUgdG8gcmVjb3JkIGEgY2hhbm5lbAorYW5kIHdhdGNoIGFub3RoZXIgb25lLgorCisyLjMuIENvbW1lbnRzCisKK1BhdGNoZXMsIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyBhcmUgdmVyeSB2ZXJ5IHdlbGNvbWUuCisKKzMuIEFja25vd2xlZGdlbWVudHMKKwlBbWF1cnkgRGVtb2wgKGFkZW1vbEBkaWJjb20uZnIpIGFuZCBGcmFuY29pcyBLYW5vdW5uaWtvZmYgZnJvbSBEaUJjb20gZm9yCisgICAgcHJvdmlkaW5nIHNwZWNzLCBjb2RlIGFuZCBoZWxwLCBvbiB3aGljaCB0aGUgZHZiLWRpYnVzYiwgZGliMzAwMG1iIGFuZAorICAgIGRpYjMwMDBtYyBhcmUgYmFzZWQuCisKKyAgIERhdmlkIE1hdHRoZXdzIGZvciBpZGVudGlmeWluZyBhIG5ldyBkZXZpY2UgdHlwZSAoQXJ0ZWMgVDEgd2l0aCBBTjIyMzUpCisgICAgYW5kIGZvciBleHRlbmRpbmcgZGlidXNiIHdpdGggcmVtb3RlIGNvbnRyb2wgZXZlbnQgaGFuZGxpbmcuIFRoYW5rIHlvdS4KKworICAgQWxleCBXb29kcyBmb3IgZnJlcXVlbnRseSBhbnN3ZXJpbmcgcXVlc3Rpb24gYWJvdXQgdXNiIGFuZCBkdmIKKyAgICBzdHVmZiwgYSBiaWcgdGhhbmsgeW91LgorCisgICBCZXJuZCBXYWduZXIgZm9yIGhlbHBpbmcgd2l0aCBodWdlIGJ1ZyByZXBvcnRzIGFuZCBkaXNjdXNzaW9ucy4KKworICAgR3VubmFyIFdpdHRpY2ggYW5kIEpvYWNoaW0gdm9uIENhcm9uIGZvciB0aGVpciB0cnVzdCBmb3IgZ2l2aW5nIG1lCisgICAgcm9vdC1zaGVsbHMgb24gdGhlaXIgbWFjaGluZXMgdG8gaW1wbGVtZW50IHN1cHBvcnQgZm9yIG5ldyBkZXZpY2VzLgorCisgICBTb21lIGd1eXMgb24gdGhlIGxpbnV4LWR2YiBtYWlsaW5nIGxpc3QgZm9yIGVuY291cmFnaW5nIG1lCisKKyAgIFBldGVyIFNjaGlsZG1hbm4gPnBldGVyLnNjaGlsZG1hbm4tbm9zcGFtLWF0LXdlYi5kZTwgZm9yIGhpcworICAgIHVzZXItbGV2ZWwgZmlybXdhcmUgbG9hZGVyLCB3aGljaCBzYXZlcyBhIGxvdCBvZiB0aW1lCisgICAgKHdoZW4gd3JpdGluZyB0aGUgdnA3MDQxIGRyaXZlcikKKworICAgVWxmIEhlcm1lbmF1IGZvciBoZWxwaW5nIG1lIG91dCB3aXRoIHRyYWRpdGlvbmFsIGNoaW5lc2UuCisKKyAgIEFuZHLpIFNtb2t0dW4gYW5kIENocmlzdGlhbiBGcvZtbWVsIGZvciBzdXBwb3J0aW5nIG1lIHdpdGgKKyAgICBoYXJkd2FyZSBhbmQgbGlzdGVuaW5nIHRvIG15IHByb2JsZW1zIHZlcnkgcGF0aWVudApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvYXZlcm1lZGlhLnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2F2ZXJtZWRpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwMjBlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2F2ZXJtZWRpYS50eHQKQEAgLTAsMCArMSwzMDQgQEAKKworSE9XVE86IEdldCBBbiBBdmVybWVkaWEgRFZCLVQgd29ya2luZyB1bmRlciBMaW51eAorICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgIFRhYmxlIG9mIENvbnRlbnRzCisgICBBc3N1bXB0aW9ucyBhbmQgSW50cm9kdWN0aW9uCisgICBUaGUgQXZlcm1lZGlhIERWQi1UCisgICBHZXR0aW5nIHRoZSBjYXJkIGdvaW5nCisgICBSZWNlaXZpbmcgRFZCLVQgaW4gQXVzdHJhbGlhCisgICBLbm93biBMaW1pdGF0aW9ucworICAgRnVydGhlciBVcGRhdGUKKworQXNzdW1wdGlvbnMgYW5kIEludHJvZHVjdGlvbgorCisgICBJdCAgaXMgYXNzdW1lZCB0aGF0IHRoZSByZWFkZXIgdW5kZXJzdGFuZHMgdGhlIGJhc2ljIHN0cnVjdHVyZQorICAgb2YgIHRoZSBMaW51eCBLZXJuZWwgRFZCIGRyaXZlcnMgYW5kIHRoZSBnZW5lcmFsIHByaW5jaXBsZXMgb2YKKyAgIERpZ2l0YWwgVFYuCisKKyAgIE9uZSAgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIERpZ2l0YWwgVFYgYW5kIEFuYWxvZ3VlIFRWCisgICB0aGF0ICB0aGUgIHVud2FyeSAgKGxpa2UgIG15c2VsZikgIHNob3VsZCAgY29uc2lkZXIgIGlzICB0aGF0LAorICAgYWx0aG91Z2ggIHRoZSAgY29tcG9uZW50ICBzdHJ1Y3R1cmUgIG9mIGJ1ZGdldCBEVkItVCBjYXJkcyBhcmUKKyAgIHN1YnN0YW50aWFsbHkgIHNpbWlsYXIgIHRvIEFuYWxvZ3VlIFRWIGNhcmRzLCB0aGV5IGZ1bmN0aW9uIGluCisgICBzdWJzdGFudGlhbGx5IGRpZmZlcmVudCB3YXlzLgorCisgICBUaGUgIHB1cnBvc2UgIG9mICBhbiAgQW5hbG9ndWUgVFYgaXMgdG8gcmVjZWl2ZSBhbmQgZGlzcGxheSBhbgorICAgQW5hbG9ndWUgIFRlbGV2aXNpb24gIHNpZ25hbC4gQW4gQW5hbG9ndWUgVFYgc2lnbmFsIChvdGhlcndpc2UKKyAgIGtub3duICBhcyAgY29tcG9zaXRlICB2aWRlbykgIGlzICBhbiAgYW5hbG9ndWUgIGVuY29kaW5nICBvZiBhCisgICBzZXF1ZW5jZSAgb2YgIGltYWdlIGZyYW1lcyAoMjUgcGVyIHNlY29uZCkgcmFzdGVyaXNlZCB1c2luZyBhbgorICAgaW50ZXJsYWNpbmcgICB0ZWNobmlxdWUuICAgSW50ZXJsYWNpbmcgIHRha2VzICB0d28gIGZpZWxkcyAgdG8KKyAgIHJlcHJlc2VudCAgb25lICBmcmFtZS4gIENvbXB1dGVycyB0b2RheSBhcmUgYXQgdGhlaXIgYmVzdCB3aGVuCisgICBkZWFsaW5nICB3aXRoICBkaWdpdGFsICBzaWduYWxzLCAgbm90ICBhbmFsb2d1ZSAgc2lnbmFscyBhbmQgYQorICAgY29tcG9zaXRlICB2aWRlbyBzaWduYWwgaXMgYWJvdXQgYXMgZmFyIHJlbW92ZWQgZnJvbSBhIGRpZ2l0YWwKKyAgIGRhdGEgc3RyZWFtIGFzIHlvdSBjYW4gZ2V0LiBUaGVyZWZvcmUsIGFuIEFuYWxvZ3VlIFRWIGNhcmQgZm9yCisgICBhIFBDIGhhcyB0aGUgZm9sbG93aW5nIHB1cnBvc2U6CisKKyAgICAgKiBUdW5lIHRoZSByZWNlaXZlciB0byByZWNlaXZlIGEgYnJvYWRjYXN0IHNpZ25hbAorICAgICAqIGRlbW9kdWxhdGUgdGhlIGJyb2FkY2FzdCBzaWduYWwKKyAgICAgKiBkZW11bHRpcGxleCAgdGhlICBhbmFsb2d1ZSB2aWRlbyBzaWduYWwgYW5kIGFuYWxvZ3VlIGF1ZGlvCisgICAgICAgc2lnbmFsICAobm90ZSBzb21lIGNvdW50cmllcyBlbXBsb3kgYSBkaWdpdGFsIGF1ZGlvIHNpZ25hbAorICAgICAgIGVtYmVkZGVkICB3aXRoaW4gdGhlIG1vZHVsYXRlZCBjb21wb3NpdGUgYW5hbG9ndWUgc2lnbmFsIC0KKyAgICAgICBOSUNBTS4pCisgICAgICogZGlnaXRpemUgIHRoZSBhbmFsb2d1ZSB2aWRlbyBzaWduYWwgYW5kIG1ha2UgdGhlIHJlc3VsdGluZworICAgICAgIGRhdGFzdHJlYW0gYXZhaWxhYmxlIHRvIHRoZSBkYXRhIGJ1cy4KKworICAgVGhlICBkaWdpdGFsICBkYXRhc3RyZWFtIGZyb20gYW4gQW5hbG9ndWUgVFYgY2FyZCBpcyBnZW5lcmF0ZWQKKyAgIGJ5ICBjaXJjdWl0cnkgb24gdGhlIGNhcmQgYW5kIGlzIG9mdGVuIHByZXNlbnRlZCB1bmNvbXByZXNzZWQuCisgICBGb3IgIGEgUEFMIFRWIHNpZ25hbCBlbmNvZGVkIGF0IGEgcmVzb2x1dGlvbiBvZiA3Njh4NTc2IDI0LWJpdAorICAgY29sb3IgcGl4ZWxzIG92ZXIgMjUgZnJhbWVzIHBlciBzZWNvbmQgLSBhIGZhaXIgYW1vdW50IG9mIGRhdGEKKyAgIGlzICBnZW5lcmF0ZWQgYW5kIG11c3QgYmUgcHJvY2Vlc2VkIGJ5IHRoZSBQQyBiZWZvcmUgaXQgY2FuIGJlCisgICBkaXNwbGF5ZWQgIG9uIHRoZSB2aWRlbyBtb25pdG9yIHNjcmVlbi4gU29tZSBBbmFsb2d1ZSBUViBjYXJkcworICAgZm9yICBQQydzICBoYXZlICBvbmJvYXJkICBNUEVHMiAgZW5jb2RlcnMgd2hpY2ggcGVybWl0IHRoZSByYXcKKyAgIGRpZ2l0YWwgIGRhdGEgIHN0cmVhbSAgdG8gYmUgcHJlc2VudGVkIHRvIHRoZSBQQyBpbiBhbiBlbmNvZGVkCisgICBhbmQgIGNvbXByZXNzZWQgIGZvcm0gIC0gIHNpbWlsYXIgIHRvIHRoZSBmb3JtIHRoYXQgaXMgdXNlZCBpbgorICAgRGlnaXRhbCBUVi4KKworICAgVGhlICBwdXJwb3NlIG9mIGEgc2ltcGxlIGJ1ZGdldCBkaWdpdGFsIFRWIGNhcmQgKERWQi1ULEMgb3IgUykKKyAgIGlzIHRvIHNpbXBseToKKworICAgICAqIFR1bmUgdGhlIHJlY2VpdmVkIHRvIHJlY2VpdmUgYSBicm9hZGNhc3Qgc2lnbmFsLgorICAgICAqIEV4dHJhY3QgIHRoZSBlbmNvZGVkIGRpZ2l0YWwgZGF0YXN0cmVhbSBmcm9tIHRoZSBicm9hZGNhc3QKKyAgICAgICBzaWduYWwuCisgICAgICogTWFrZSAgdGhlICBlbmNvZGVkIGRpZ2l0YWwgZGF0YXN0cmVhbSAoTVBFRzIpIGF2YWlsYWJsZSB0bworICAgICAgIHRoZSBkYXRhIGJ1cy4KKworICAgVGhlICBzaWduaWZpY2FudCAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gaXMgdGhhdCB0aGUgdHVuZXIKKyAgIG9uICB0aGUgYW5hbG9ndWUgVFYgY2FyZCBzcGl0cyBvdXQgYW4gQW5hbG9ndWUgc2lnbmFsLCB3aGVyZWFzCisgICB0aGUgIHR1bmVyICBvbiAgdGhlICBkaWdpdGFsICBUViAgY2FyZCAgc3BpdHMgb3V0IGEgY29tcHJlc3NlZAorICAgZW5jb2RlZCAgIGRpZ2l0YWwgICBkYXRhc3RyZWFtLiAgIEFzICB0aGUgIHNpZ25hbCAgaXMgIGFscmVhZHkKKyAgIGRpZ2l0aXNlZCwgIGl0ICBpcyAgdHJpdmlhbCAgdG8gcGFzcyB0aGlzIGRhdGFzdHJlYW0gdG8gdGhlIFBDCisgICBkYXRhYnVzICB3aXRoICBtaW5pbWFsICBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgYW5kIHRoZW4gZXh0cmFjdAorICAgdGhlICBkaWdpdGFsICB2aWRlbyAgYW5kIGF1ZGlvIGRhdGFzdHJlYW1zIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgIGFwcHJvcHJpYXRlIHNvZnR3YXJlIG9yIGhhcmR3YXJlIGZvciBkZWNvZGluZyBhbmQgdmlld2luZy4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1RoZSBBdmVybWVkaWEgRFZCLVQKKworICAgVGhlIEF2ZXJtZWRpYSBEVkItVCBpcyBhIGJ1ZGdldCBQQ0kgRFZCIGNhcmQuIEl0IGhhcyAzIGlucHV0czoKKworICAgICAqIFJGIFR1bmVyIElucHV0CisgICAgICogQ29tcG9zaXRlIFZpZGVvIElucHV0IChSQ0EgSmFjaykKKyAgICAgKiBTVklERU8gSW5wdXQgKE1pbmktRElOKQorCisgICBUaGUgIFJGICBUdW5lciAgSW5wdXQgIGlzIHRoZSBpbnB1dCB0byB0aGUgdHVuZXIgbW9kdWxlIG9mIHRoZQorICAgY2FyZC4gIFRoZSAgVHVuZXIgIGlzICBvdGhlcndpc2Uga25vd24gYXMgdGhlICJGcm9udGVuZCIgLiBUaGUKKyAgIEZyb250ZW5kIG9mIHRoZSBBdmVybWVkaWEgRFZCLVQgaXMgYSBNaWNyb3R1bmUgNzIwMkQuIEEgdGltZWx5CisgICBwb3N0ICB0byAgdGhlICBsaW51eC1kdmIgIG1haWxpbmcgIGxpc3QgIGFzY2VydGFpbmVkICB0aGF0IHRoZQorICAgTWljcm90dW5lICA3MjAyRCAgaXMgIHN1cHBvcnRlZCAgYnkgdGhlIHNwODg3eCBkcml2ZXIgd2hpY2ggaXMKKyAgIGZvdW5kIGluIHRoZSBkdmItaHcgQ1ZTIG1vZHVsZS4KKworICAgVGhlICBEVkItVCBjYXJkIGlzIGJhc2VkIGFyb3VuZCB0aGUgQlQ4NzggY2hpcCB3aGljaCBpcyBhIHZlcnkKKyAgIGNvbW1vbiBtdWx0aW1lZGlhIGJyaWRnZSBhbmQgb2Z0ZW4gZm91bmQgb24gQW5hbG9ndWUgVFYgY2FyZHMuCisgICBUaGVyZSBpcyBubyBvbi1ib2FyZCBNUEVHMiBkZWNvZGVyLCB3aGljaCBtZWFucyB0aGF0IGFsbCBNUEVHMgorICAgZGVjb2RpbmcgIG11c3QgIGJlIGRvbmUgaW4gc29mdHdhcmUsIG9yIGlmIHlvdSBoYXZlIG9uZSwgb24gYW4KKyAgIE1QRUcyIGhhcmR3YXJlIGRlY29kaW5nIGNhcmQgb3IgY2hpcHNldC4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK0dldHRpbmcgdGhlIGNhcmQgZ29pbmcKKworICAgSW4gb3JkZXIgdG8gZmlyZSB1cCB0aGUgY2FyZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGxvYWQgYSBudW1iZXIKKyAgIG9mIG1vZHVsZXMgZnJvbSB0aGUgRFZCIGRyaXZlciBzZXQuIFByaW9yIHRvIHRoaXMgaXQgd2lsbCBoYXZlCisgICBiZWVuICBuZWNlc3NhcnkgdG8gZG93bmxvYWQgdGhlc2UgZHJpdmVycyBmcm9tIHRoZSBsaW51eHR2IENWUworICAgc2VydmVyIGFuZCBjb21waWxlIHRoZW0gc3VjY2Vzc2Z1bGx5LgorCisgICBEZXBlbmRpbmcgb24gdGhlIGNhcmQncyBmZWF0dXJlIHNldCwgdGhlIERldmljZSBEcml2ZXIgQVBJIGZvcgorICAgRFZCIHVuZGVyIExpbnV4IHdpbGwgZXhwb3NlIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBkZXZpY2UgZmlsZXMKKyAgIGluIHRoZSAvZGV2IHRyZWU6CisKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC9hdWRpbzAKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC9jYTAKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC9kZW11eDAKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC9kdnIwCisgICAgICogL2Rldi9kdmIvYWRhcHRlcjAvZnJvbnRlbmQwCisgICAgICogL2Rldi9kdmIvYWRhcHRlcjAvbmV0MAorICAgICAqIC9kZXYvZHZiL2FkYXB0ZXIwL29zZDAKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC92aWRlbzAKKworICAgVGhlICBwcmltYXJ5ICBkZXZpY2UgIG5vZGVzIHRoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gKGF0IHRoaXMKKyAgIHN0YWdlKSBmb3IgdGhlIEF2ZXJtZWRpYSBEVkItVCBhcmU6CisKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC9kdnIwCisgICAgICogL2Rldi9kdmIvYWRhcHRlcjAvZnJvbnRlbmQwCisKKyAgIFRoZSBkdnIwIGRldmljZSBub2RlIGlzIHVzZWQgdG8gcmVhZCB0aGUgTVBFRzIgRGF0YSBTdHJlYW0gYW5kCisgICB0aGUgZnJvbnRlbmQwIG5vZGUgaXMgdXNlZCB0byB0dW5lIHRoZSBmcm9udGVuZCB0dW5lciBtb2R1bGUuCisKKyAgIEF0ICB0aGlzICBzdGFnZSwgIGl0ICBoYXMgIG5vdCAgYmVlbiAgYWJsZSAgdG8gIGFzY2VydGFpbiAgdGhlCisgICBmdW5jdGlvbmFsaXR5ICBvZiB0aGUgcmVtYWluaW5nIGRldmljZSBub2RlcyBpbiByZXNwZWN0IG9mIHRoZQorICAgQXZlcm1lZGlhICBEVkJULiAgSG93ZXZlciwgIGZ1bGwgIGZ1bmN0aW9uYWxpdHkgIGluIHJlc3BlY3Qgb2YKKyAgIHR1bmluZywgIHJlY2VpdmluZyAgYW5kICBzdXBwbHlpbmcgIHRoZSAgTVBFRzIgIGRhdGEgc3RyZWFtIGlzCisgICBwb3NzaWJsZSAgd2l0aCB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLgorICAgSXQgIG1heSBiZSBwb3NzaWJsZSB0aGF0IGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUKKyAgIGZyb20gIHRoZSAgY2FyZCAgKGkuZS4gIHZpZXdpbmcgdGhlIGFkZGl0aW9uYWwgYW5hbG9ndWUgaW5wdXRzCisgICB0aGF0ICB0aGUgY2FyZCBwcmVzZW50cyksIGJ1dCB0aGlzIGhhcyBub3QgYmVlbiB0ZXN0ZWQgeWV0LiBJZgorICAgSSBnZXQgYXJvdW5kIHRvIHRoaXMsIEknbGwgdXBkYXRlIHRoZSBkb2N1bWVudCB3aXRoIHdoYXRldmVyIEkKKyAgIGZpbmQuCisKKyAgIFRvICBwb3dlciAgdXAgIHRoZSAgY2FyZCwgIGxvYWQgIHRoZSAgZm9sbG93aW5nIG1vZHVsZXMgaW4gdGhlCisgICBmb2xsb3dpbmcgb3JkZXI6CisKKyAgICAgKiBpbnNtb2QgZHZiLWNvcmUubworICAgICAqIG1vZHByb2JlIGJ0dHYubworICAgICAqIGluc21vZCBidDg3OC5vCisgICAgICogaW5zbW9kIGR2Yi1idDh4eC5vCisgICAgICogaW5zbW9kIHNwODg3eC5vCisKKyAgIEluc2VydGlvbiAgb2YgIHRoZXNlICBtb2R1bGVzICBpbnRvICB0aGUgIHJ1bm5pbmcgIGtlcm5lbCB3aWxsCisgICBhY3RpdmF0ZSB0aGUgYXBwcm9wcmlhdGUgRFZCIGRldmljZSBub2Rlcy4gSXQgaXMgdGhlbiBwb3NzaWJsZQorICAgdG8gc3RhcnQgYWNjZXNzaW5nIHRoZSBjYXJkIHdpdGggdXRpbGl0aWVzIHN1Y2ggYXMgc2NhbiwgdHphcCwKKyAgIGR2YnN0cmVhbSBldGMuCisKKyAgIFRoZSBmcm9udGVuZCBtb2R1bGUgc3A4ODd4Lm8sIHJlcXVpcmVzIGFuIGV4dGVybmFsICAgZmlybXdhcmUuCisgICBQbGVhc2UgdXNlICB0aGUgIGNvbW1hbmQgImdldF9kdmJfZmlybXdhcmUgc3A4ODd4IiB0byBkb3dubG9hZAorICAgaXQuIFRoZW4gY29weSBpdCB0byAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlLgorCitSZWNlaXZpbmcgRFZCLVQgaW4gQXVzdHJhbGlhCisKKyAgIEkgIGhhdmUgIG5vICBleHBlcmllbmNlIG9mIERWQi1UIGluIG90aGVyIGNvdW50cmllcyBvdGhlciB0aGFuCisgICBBdXN0cmFsaWEsICBzbyAgSSB3aWxsIGF0dGVtcHQgdG8gZXhwbGFpbiBob3cgaXQgd29ya3MgaGVyZSBpbgorICAgTWVsYm91cm5lICBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgRFZCLVQKKyAgIGNhcmQuCisKKyAgIFRoZSAgRGlnaXRhbCAgQnJvYWRjYXN0aW5nICBBdXN0cmFsaWEgIHdlYnNpdGUgaGFzIGEgUmVjZXB0aW9uCisgICBsb2NhdG9ydG9vbCB3aGljaCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB0cmFuc3BvbmRlciBjaGFubmVscworICAgYW5kICBmcmVxdWVuY2llcy4gIE15ICBsb2NhbCAgdHJhbnNtaXR0ZXIgIGhhcHBlbnMgdG8gYmUgTW91bnQKKyAgIERhbmRlbm9uZy4KKworICAgVGhlIGZyZXF1ZW5jaWVzIGJyb2FkY2FzdCBieSBNb3VudCBEYW5kZW5vbmcgYXJlOgorCisgICBUYWJsZSAxLiBUcmFuc3BvbmRlciBGcmVxdWVuY2llcyBNb3VudCBEYW5kZW5vbmcsIFZpYywgQXVzLgorICAgQnJvYWRjYXN0ZXIgQ2hhbm5lbCBGcmVxdWVuY3kKKyAgIEFCQyAgICAgICAgIFZIRiAxMiAgMjI2LjUgTUh6CisgICBURU4gICAgICAgICBWSEYgMTEgIDIxOS41IE1IegorICAgTklORSAgICAgICAgVkhGIDggICAxOTEuNjI1IE1IegorICAgU0VWRU4gICAgICAgVkhGIDYgICAxNzcuNSBNSHoKKyAgIFNCUyAgICAgICAgIFVIRiAyOSAgNTM2LjUgTUh6CisKKyAgIFRoZSBTY2FuIHV0aWxpdHkgaGFzIGEgc2V0IG9mIGNvbXBpbGVkLWluIGRlZmF1bHRzIGZvciB2YXJpb3VzCisgICBjb3VudHJpZXMgYW5kIHJlZ2lvbnMsIGJ1dCBpZiB0aGV5IGRvIG5vdCBzdWl0LCBvciBpZiB5b3UgaGF2ZQorICAgYSBwcmUtY29tcGlsZWQgc2NhbiBiaW5hcnksIHlvdSBjYW4gc3BlY2lmeSBhIGRhdGEgZmlsZSBvbiB0aGUKKyAgIGNvbW1hbmQgIGxpbmUgd2hpY2ggY29udGFpbnMgdGhlIHRyYW5zcG9uZGVyIGZyZXF1ZW5jaWVzLiBIZXJlCisgICBpcyBhIHNhbXBsZSBmaWxlIGZvciB0aGUgYWJvdmUgY2hhbm5lbCB0cmFuc3BvbmRlcnM6CisjIERhdGEgZmlsZSBmb3IgRFZCIHNjYW4gcHJvZ3JhbQorIworIyBDIEZyZXF1ZW5jeSBTeW1ib2xSYXRlIEZFQyBRQU0KKyMgUyBGcmVxdWVuY3kgUG9sYXJpc2F0aW9uIFN5bWJvbFJhdGUgRkVDCisjIFQgRnJlcXVlbmN5IEJhbmR3aWR0aCBGRUMgRkVDMiBRQU0gTW9kZSBHdWFyZCBIaWVyCitUIDIyNjUwMDAwMCA3TUh6IDIvMyBOT05FIFFBTTY0IDhrIDEvOCBOT05FCitUIDE5MTYyNTAwMCA3TUh6IDIvMyBOT05FIFFBTTY0IDhrIDEvOCBOT05FCitUIDIxOTUwMDAwMCA3TUh6IDIvMyBOT05FIFFBTTY0IDhrIDEvOCBOT05FCitUIDE3NzUwMDAwMCA3TUh6IDIvMyBOT05FIFFBTTY0IDhrIDEvOCBOT05FCitUIDUzNjUwMDAwMCA3TUh6IDIvMyBOT05FIFFBTTY0IDhrIDEvOCBOT05FCisKKyAgIFRoZSAgIGRlZmF1bHRzICAgZm9yICAgdGhlICB0cmFuc3BvbmRlciAgZnJlcXVlbmN5ICBhbmQgIG90aGVyCisgICBtb2R1bGF0aW9uIHBhcmFtZXRlcnMgd2VyZSBvYnRhaW5lZCBmcm9tIHd3dy5kYmEub3JnLmF1LgorCisgICBXaGVuICBTY2FuICBydW5zLCBpdCB3aWxsIG91dHB1dCBjaGFubmVscy5jb25mIGluZm9ybWF0aW9uIGZvcgorICAgYW55ICBjaGFubmVsJ3MgdHJhbnNwb25kZXJzIHdoaWNoIHRoZSBjYXJkJ3MgZnJvbnRlbmQgY2FuIGxvY2sKKyAgIG9udG8uICAoaS5lLiAgYW55ICB3aG9zZSAgc2lnbmFsICBpcyAgc3Ryb25nICBlbm91Z2ggIGF0ICB5b3VyCisgICBhbnRlbm5hKS4KKworICAgSGVyZSdzIG15IGNoYW5uZWxzLmNvbmYgZmlsZSBmb3IgYW55b25lIHdobydzIGludGVyZXN0ZWQ6CitBQkMgSERUVjoyMjY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfM180OlFBTV82NAorOlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6MjMwNzowOjU2MAorQUJDIFRWIE1lbGJvdXJuZToyMjY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfM18KKzQ6UUFNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjY1CiswOjU2MQorQUJDIFRWIDI6MjI2NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18zXzQ6RkVDXzNfNDpRQU1fNjQKKzpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzE2OkhJRVJBUkNIWV9OT05FOjUxMjo2NTA6NTYyCitBQkMgVFYgMzoyMjY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfM180OlFBTV82NAorOlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjY1MDo1NjMKK0FCQyBUViA0OjIyNjUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18zXzQ6UUFNXzY0Cis6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjU2NAorQUJDIERpRyBSYWRpbzoyMjY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfM180OlEKK0FNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6MDoyMzExOjU2Cis2CitURU4gRGlnaXRhbDoyMTk1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfMV8yOlFBTQorXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjY1MDoxNTgKKzUKK1RFTiBEaWdpdGFsIDE6MjE5NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18zXzQ6RkVDXzFfMjpRCitBTV82NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzE2OkhJRVJBUkNIWV9OT05FOjUxMjo2NTA6MQorNTg2CitURU4gRGlnaXRhbCAyOjIxOTUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UQorQU1fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjEKKzU4NworVEVOIERpZ2l0YWwgMzoyMTk1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfMV8yOlEKK0FNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjY1MDoxCis1ODgKK1RFTiBEaWdpdGFsOjIxOTUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UUFNCitfNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjE1OAorOQorVEVOIERpZ2l0YWwgNDoyMTk1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfMV8yOlEKK0FNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjY1MDoxCis1OTAKK1RFTiBEaWdpdGFsOjIxOTUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UUFNCitfNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjE1OQorMQorVEVOIEhEOjIxOTUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UUFNXzY0OlQKK1JBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTQ6MDoxNTkyCitURU4gRGlnaXRhbDoyMTk1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfMV8yOlFBTQorXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjY1MDoxNTkKKzMKK05pbmUgRGlnaXRhbDoxOTE2MjUwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfMV8yOlFBCitNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEzOjY2MDoxMAorNzIKK05pbmUgRGlnaXRhbCBIRDoxOTE2MjUwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfMV8yCis6UUFNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjA6MQorMDczCitOaW5lIEd1aWRlOjE5MTYyNTAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UUFNXworNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTQ6NjcwOjEwNzQKKzcgRGlnaXRhbDoxNzc1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzJfMzpGRUNfMl8zOlFBTV82Cis0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfODpISUVSQVJDSFlfTk9ORTo3Njk6NzcwOjEzMjgKKzcgRGlnaXRhbCAxOjE3NzUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfMl8zOkZFQ18yXzM6UUFNCitfNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV84OkhJRVJBUkNIWV9OT05FOjc2OTo3NzA6MTMyOQorNyBEaWdpdGFsIDI6MTc3NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18yXzM6RkVDXzJfMzpRQU0KK182NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzg6SElFUkFSQ0hZX05PTkU6NzY5Ojc3MDoxMzMwCis3IERpZ2l0YWwgMzoxNzc1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzJfMzpGRUNfMl8zOlFBTQorXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfODpISUVSQVJDSFlfTk9ORTo3Njk6NzcwOjEzMzEKKzcgSEQgRGlnaXRhbDoxNzc1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzJfMzpGRUNfMl8zOlFBCitNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfODpISUVSQVJDSFlfTk9ORTo4MzM6ODM0OjEzMworMgorNyBQcm9ncmFtIEd1aWRlOjE3NzUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfMl8zOkZFQ18yXzMKKzpRQU1fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV84OkhJRVJBUkNIWV9OT05FOjg2NTo4NjY6CisxMzM0CitTQlMgSEQ6NTM2NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18yXzM6RkVDXzJfMzpRQU1fNjQ6VAorUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzg6SElFUkFSQ0hZX05PTkU6MTAyOjEwMzo3ODQKK1NCUyBESUdJVEFMIDE6NTM2NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18yXzM6RkVDXzJfMzpRCitBTV82NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzg6SElFUkFSQ0hZX05PTkU6MTYxOjgxOjc4NQorU0JTIERJR0lUQUwgMjo1MzY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzJfMzpGRUNfMl8zOlEKK0FNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfODpISUVSQVJDSFlfTk9ORToxNjI6ODM6Nzg2CitTQlMgRVBHOjUzNjUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfMl8zOkZFQ18yXzM6UUFNXzY0OgorVFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV84OkhJRVJBUkNIWV9OT05FOjE2Mzo4NTo3ODcKK1NCUyBSQURJTyAxOjUzNjUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfMl8zOkZFQ18yXzM6UUFNCitfNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV84OkhJRVJBUkNIWV9OT05FOjA6MjAxOjc5OAorU0JTIFJBRElPIDI6NTM2NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18yXzM6RkVDXzJfMzpRQU0KK182NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzg6SElFUkFSQ0hZX05PTkU6MDoyMDI6Nzk5CisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitLbm93biBMaW1pdGF0aW9ucworCisgICBBdCAgcHJlc2VudCAgSSBjYW4gc2F5IHdpdGggY29uZmlkZW5jZSB0aGF0IHRoZSBmcm9udGVuZCB0dW5lcworICAgdmlhIC9kZXYvZHZiL2FkYXB0ZXJ7eH0vZnJvbnRlbmQwIGFuZCBzdXBwbGllcyBhbiBNUEVHMiBzdHJlYW0KKyAgIHZpYSAgIC9kZXYvZHZiL2FkYXB0ZXJ7eH0vZHZyMC4gICBJICAgaGF2ZSAgIG5vdCAgIHRlc3RlZCAgdGhlCisgICBmdW5jdGlvbmFsaXR5ICBvZiBhbnkgb3RoZXIgcGFydCBvZiB0aGUgY2FyZCB5ZXQuIEkgd2lsbCBkbyBzbworICAgb3ZlciB0aW1lIGFuZCB1cGRhdGUgdGhpcyBkb2N1bWVudC4KKworICAgVGhlcmUgIGFyZSBzb21lIGxpbWl0YXRpb25zIGluIHRoZSBpMmMgbGF5ZXIgZHVlIHRvIGEgcmV0dXJuZWQKKyAgIGVycm9yIG1lc3NhZ2UgaW5jb25zaXN0ZW5jeS4gQWx0aG91Z2ggdGhpcyBnZW5lcmF0ZXMgZXJyb3JzIGluCisgICBkbWVzZyAgYW5kICB0aGUgIHN5c3RlbSBsb2dzLCBpdCBkb2VzIG5vdCBhcHBlYXIgdG8gYWZmZWN0IHRoZQorICAgYWJpbGl0eSBvZiB0aGUgZnJvbnRlbmQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworRnVydGhlciBVcGRhdGUKKworICAgZHZic3RyZWFtICBhbmQgIFZpZGVvTEFOICBDbGllbnQgb24gd2luZG93cyB3b3JrcyBhIHRyZWF0IHdpdGgKKyAgIERWQiwgIGluICBmYWN0ICB0aGlzICBpcyAgY3VycmVudGx5ICBzZXJ2aW5nIGFzIG15IG1haW4gd2F5IG9mCisgICB2aWV3aW5nICBEVkItVCAgYXQgIHRoZSAgbW9tZW50LiAgQWRkaXRpb25hbGx5LCBWTEMgaXMgaGFwcGlseQorICAgZGVjb2RpbmcgIEhEVFYgIHNpZ25hbHMsICBhbHRob3VnaCAgdGhlIFBDIGlzIGRyb3BwaW5nIHRoZSBvZGQKKyAgIGZyYW1lIGhlcmUgYW5kIHRoZXJlIC0gSSBhc3N1bWUgZHVlIHRvIHByb2Nlc3NpbmcgY2FwYWJpbGl0eSAtCisgICBhcyBhbGwgdGhlIGRlY29kaW5nIGlzIGJlaW5nIGRvbmUgdW5kZXIgd2luZG93cyBpbiBzb2Z0d2FyZS4KKworICAgTWFueSAgdGhhbmtzIHRvIE5pZ2VsIFBlYXJzb24gZm9yIHRoZSB1cGRhdGVzIHRvIHRoaXMgZG9jdW1lbnQKKyAgIHNpbmNlIHRoZSByZWNlbnQgcmV2aXNpb24gb2YgdGhlIGRyaXZlci4KKworICAgSmFudWFyeSAyOXRoIDIwMDQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2J0OHh4LnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2J0OHh4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2NhY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvYnQ4eHgudHh0CkBAIC0wLDAgKzEsOTAgQEAKK0hvdyB0byBnZXQgdGhlIE5lYnVsYSwgUENUViBhbmQgVHdpbmhhbiBEU1QgY2FyZHMgd29ya2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgY2xhc3Mgb2YgY2FyZHMgaGFzIGEgYnQ4NzhhIGFzIHRoZSBQQ0kgaW50ZXJmYWNlLCBhbmQKK3JlcXVpcmUgdGhlIGJ0dHYgZHJpdmVyLgorCitQbGVhc2UgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2FybmluZyBhYm91dCB0aGUgYnR0diBtb2R1bGUKK29wdGlvbnMgYmVsb3cgZm9yIHRoZSBEU1QgY2FyZC4KKworMSkgR2VuZXJhbCBpbmZvcm1hdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXNlIGRyaXZlcnMgcmVxdWlyZSB0aGUgYnR0diBkcml2ZXIgdG8gcHJvdmlkZSB0aGUgbWVhbnMgdG8gYWNjZXNzCit0aGUgaTJjIGJ1cyBhbmQgdGhlIGdwaW8gcGlucyBvZiB0aGUgYnQ4eHggY2hpcHNldC4KKworQmVjYXVzZSBvZiB0aGlzLCB5b3UgbmVlZCB0byBlbmFibGUKKyJEZXZpY2UgZHJpdmVycyIgPT4gIk11bHRpbWVkaWEgZGV2aWNlcyIKKyAgPT4gIlZpZGVvIEZvciBMaW51eCIgPT4gIkJUODQ4IFZpZGVvIEZvciBMaW51eCIKKworMikgTG9hZGluZyBNb2R1bGVzCis9PT09PT09PT09PT09PT09PT0KKworSW4gZ2VuZXJhbCB5b3UgbmVlZCB0byBsb2FkIHRoZSBidHR2IGRyaXZlciwgd2hpY2ggd2lsbCBoYW5kbGUgdGhlIGdwaW8gYW5kCitpMmMgY29tbXVuaWNhdGlvbiBmb3IgdXMuIE5leHQgeW91IG5lZWQgdGhlIGNvbW1vbiBkdmItYnQ4eHggZGV2aWNlIGRyaXZlcgorYW5kIG9uZSBmcm9udGVuZCBkcml2ZXIuCisKK1RoZSBidHR2IGRyaXZlciB3aWxsIEhBTkcgWU9VUiBTWVNURU0gSUYgWU9VIERPIE5PVCBTUEVDSUZZIFRIRSBDT1JSRUNUIAorQ0FSRCBJRCEKKworKElmIHlvdSBkb24ndCBnZXQgeW91ciBjYXJkIHJ1bm5pbmcgYW5kIHlvdSBzdXNwZWN0IHRoYXQgdGhlIGNhcmQgaWQgeW91J3JlCit1c2luZyBpcyB3cm9uZywgaGF2ZSBhIGxvb2sgYXQgImJ0dHYtY2FyZHMuYyIgZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBjYXJkCitpZHMuKQorCitQYXkgYXR0ZW50aW9uIHRvIGZhaWx1cmVzIHdoZW4geW91IGxvYWQgdGhlIGZyb250ZW5kIGRyaXZlcnMKKyhlLmcuIGRtZXNnLCAvdmFyL2xvZy9tZXNzYWdlcykuCisKKzNhKSBOZWJ1bGEgLyBQaW5uYWNsZSBQQ1RWCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAkIG1vZHByb2JlIGJ0dHYgaTJjX2h3PTEgY2FyZD0weDY4CisgICAkIG1vZHByb2JlIGR2Yi1idDh4eAorICAgCitGb3IgTmVidWxhIGNhcmRzIHVzZSB0aGUgIm54dDYwMDAiIGZyb250ZW5kIGRyaXZlcjoKKyAgICQgbW9kcHJvYmUgbnh0NjAwMAorCitGb3IgUGlubmFjbGUgUENUViBjYXJkcyB1c2UgdGhlICJjeDI0MTEwIiBmcm9udGVuZCBkcml2ZXI6CisgICAkIG1vZHByb2JlIGN4MjQxMTAKKworM2IpIFR3aW5IYW4KKy0tLS0tLS0tLS0tCisKKyAgICQgbW9kcHJvYmUgYnR0diBpMmNfaHc9MSBjYXJkPTB4NzEKKyAgICQgbW9kcHJvYmUgZHZiLWJ0OHh4CisgICAkIG1vZHByb2JlIGRzdAorCitUaGUgdmFsdWUgMHg3MSB3aWxsIG92ZXJyaWRlIHRoZSBQQ0kgdHlwZSBkZXRlY3Rpb24gZm9yIGR2Yi1idDh4eCwgd2hpY2ggCitpcyBuZWNlc3NhcnkgZm9yIFR3aW5IYW4gY2FyZHMuIworCitJZiB5b3UncmUgaGF2aW5nIGFuIG9sZGVyIGNhcmQgKGJsdWUgY29sb3IgY2lyY3VpdCkgYW5kIGNhcmQ9MHg3MSBsb2NrcyB5b3VyCittYWNoaW5lLCB0cnkgdXNpbmcgMHg2OCwgdG9vLiBJZiB0aGF0IGRvZXMgbm90IHdvcmssIGFzayBvbiB0aGUgRFZCIG1haWxpbmcgbGlzdC4KKworVGhlIERTVCBtb2R1bGUgdGFrZXMgYSBjb3VwbGUgb2YgdXNlZnVsIHBhcmFtZXRlcnMsIGluIGNhc2UgdGhlCitkc3QgZHJpdmVycyBmYWlscyB0byBkZXRlY3QgeW91ciB0eXBlIG9mIGNhcmQgY29ycmVjdGx5LgorCitkc3RfdHlwZSB0YWtlcyB2YWx1ZXMgMCAoc2F0ZWxsaXRlKSwgMSAodGVycmVzdGlhbCBUViksIDIgKGNhYmxlKS4KKworZHN0X3R5cGVfZmxhZ3MgdGFrZXMgYml0IGNvbWJpbmVkIHZhbHVlczoKKzEgPSBuZXcgdHVuZXIgdHlwZSBwYWNrZXRzLiBZb3UgY2FuIHVzZSB0aGlzIGlmIHlvdXIgY2FyZCBpcyBkZXRlY3RlZAorICAgIGFuZCB5b3UgaGF2ZSBkZWJ1ZyBhbmQgeW91IGNvbnRpbnVhbGx5IHNlZSB0aGUgdHVuZXIgcGFja2V0cyBub3QKKyAgICB3b3JraW5nIChtYWtlIHN1cmUgbm90IGEgYmFzaWMgcHJvYmxlbSBsaWtlIGRpc2ggYWxpZ25tZW50IGV0Yy4pCisKKzIgPSBUUyAyMDQuIElmIHlvdXIgY2FyZCB0dW5lcyBPSywgYnV0IHRoZSBwaWN0dXJlIGlzIHRlcnJpYmxlLCBzZWVtaW5nbHkKKyAgICBicmVha2luZyB1cCBpbiBvbmUgaGFsZiBjb250aW51YWxseSwgYW5kIGNyYyBmYWlscyBhIGxvdCwgdGhlbgorICAgIHRoaXMgaXMgd29ydGggYSB0cnkgKG9yIHRyeWluZyB0byB0dXJuIG9mZikKKworNCA9IGhhcyBzeW1kaXYuIFNvbWUgY2FyZHMsIG1vc3RseSB3aXRob3V0IG5ldyB0dW5lciBwYWNrZXRzLCByZXF1aXJlCisgICAgYSBzeW1ib2wgZGl2aXNpb24gYWxnb3JpdGhtLiBEb2Vzbid0IGFwcGx5IHRvIHRlcnJlc3RpYWwgVFYuCisKK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgdmFsdWUgdG8gaGF2ZSB0aGUgYXV0b2RldGVjdGVkIHZhbHVlcyB0dXJuZWQgb2ZmCisoZS5nLiAwKS4gVGhlIGF1dG9kZWN0ZWQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5dGhlIGNhcmRzICdyZXNwb25zZQorc3RyaW5nJyB3aGljaCB5b3UgY2FuIHNlZSBpbiB5b3VyIGxvZ3MgZS5nLgorCitkc3RfY2hlY2tfY2k6IHJlY29nbml6ZSBEU1QtTU9UCisKK29yIAorCitkc3RfY2hlY2tfY2k6IHVuYWJsZSB0byByZWNvZ25pemUgRFNUWENJIG9yIFNUWENJCisKKy0tCitBdXRob3JzOiBSaWNoYXJkIFdhbGtlciwgSmFtaWUgSG9uYW4sIE1pY2hhZWwgSHVub2xkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9jYXJkcy50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9jYXJkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkYzRlZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2NhcmRzLnR4dApAQCAtMCwwICsxLDg1IEBACitIYXJkd2FyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpbnV4dHYub3JnIERWQiBkcml2ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgR2VuZXJhbGx5LCB0aGUgRFZCIGhhcmR3YXJlIG1hbnVmYWN0dXJlcnMgZnJlcXVlbnRseSBjaGFuZ2UgdGhlCisgIGZyb250ZW5kcyAoaS5lLiB0dW5lciAvIGRlbW9kdWxhdG9yIHVuaXRzKSB1c2VkLCB1c3VhbGx5IHdpdGhvdXQKKyAgY2hhbmdpbmcgdGhlIHByb2R1Y3QgbmFtZSwgcmV2aXNpb24gbnVtYmVyIG9yIHNwZWNzLiBTb21lIGNhcmRzCisgIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiB2ZXJzaW9ucyB3aXRoIGRpZmZlcmVudCBmcm9udGVuZHMgZm9yCisgIERWQi1TL0RWQi1DL0RWQi1ULiBUaHVzIHRoZSBmcm9udGVuZCBkcml2ZXJzIGFyZSBsaXN0ZWQgc2VwZXJhdGVseS4KKworICBOb3RlIDE6IFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGV2ZXJ5IGZyb250ZW5kIGRyaXZlciB3b3JrcworICBvdXQgb2YgdGhlIGJveCB3aXRoIGV2ZXJ5IGNhcmQsIGJlY2F1c2Ugb2YgZGlmZmVyZW50IHdpcmluZy4KKworICBOb3RlIDI6IFRoZSBkZW1vZHVsYXRvciBjaGlwcyBjYW4gYmUgdXNlZCB3aXRoIGEgdmFyaWV0eSBvZgorICB0dW5lci9QTEwgY2hpcHMsIGFuZCBub3QgYWxsIGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkLiBPZnRlbgorICB0aGUgZGVtb2R1bGF0b3IgYW5kIHR1bmVyL1BMTCBjaGlwIGFyZSBpbnNpZGUgYSBtZXRhbCBib3ggZm9yCisgIHNoaWVsZGluZywgYW5kIHRoZSB3aG9sZSBtZXRhbCBib3ggaGFzIGl0cyBvd24gcGFydCBudW1iZXIuCisKKworbyBGcm9udGVuZHMgZHJpdmVyczogCisgIC0gZHZiX2R1bW15X2ZlOiBmb3IgdGVzdGluZy4uLgorICBEVkItUzoKKyAgIC0gdmVzMXg5MwkJOiBBbHBzIEJTUlYyICh2ZXMxODkzIGRlbW9kdWxhdG9yKSBhbmQgZGJveDIgKHZlczE5OTMpCisgICAtIGN4MjQxMTAJCTogQ29uZXhhbnQgSE0xMjIxL0hNMTgxMSAoY3gyNDExMCBvciBjeDI0MTA2IGRlbW9kLCBjeDI0MTA4IFBMTCkKKyAgIC0gZ3J1bmRpZ18yOTUwNC00OTEJOiBHcnVuZGlnIDI5NTA0LTQ5MSAoUGhpbGlwcyBUREE4MDgzIGRlbW9kdWxhdG9yKSwgdHNhNTUyMiBQTEwKKyAgIC0gbXQzMTIJCTogWmFybGluayBtdDMxMiBvciBNaXRlbCB2cDMxMCBkZW1vZHVsYXRvciwgc2wxOTM1IG9yIHRzYTUwNTkgUExMCisgICAtIHN0djAyOTkJCTogQWxwcyBCU1JVNiAodHNhNTA1OSBQTEwpLCBMRyBURFFCLVMwMHggKHRzYTUwNTkgUExMKSwKKyAgIAkJCSAgTEcgVERRRi1TMDAxRiAoc2wxOTM1IFBMTCksIFBoaWxpcHMgU1UxMjc4ICh0dWE2MTAwIFBMTCksIAorCQkJICBQaGlsaXBzIFNVMTI3OFNIICh0c2E1MDU5IFBMTCksIFNhbXN1bmcgVEJNVTI0MTEySU1CCisgIERWQi1DOgorICAgLSB2ZXMxODIwCQk6IHZhcmlvdXMgKHZlczE4MjAgZGVtb2R1bGF0b3IsIHNwNTY1OWMgb3Igc3BYWFhYIFBMTCkKKyAgIC0gYXQ3NmM2NTEJCTogQXRtZWwgQVQ3NmM2NTEoQikgd2l0aCBEQVQ3MDIxIFBMTAorICBEVkItVDoKKyAgIC0gYWxwc190ZGxiNwkJOiBBbHBzIFRETEI3IChzcDg4NzAgZGVtb2R1bGF0b3IsIHNwNTY1OSBQTEwpCisgICAtIGFscHNfdGRtYjcJCTogQWxwcyBURE1CNyAoY3gyMjcwMCBkZW1vZHVsYXRvcikKKyAgIC0gZ3J1bmRpZ18yOTUwNC00MDEJOiBHcnVuZGlnIDI5NTA0LTQwMSAoTFNJIEw2NDc4MSBkZW1vZHVsYXRvciksIHRzYTUwNjAgUExMCisgICAtIHRkYTEwMDR4CQk6IFBoaWxpcHMgdGRhMTAwNDVoICh0ZDEzNDQgb3IgdGRtMTMxNmwgUExMKQorICAgLSBueHQ2MDAwIAkJOiBBbHBzIFRETUU3IChNSVRFTCBTUDU2NTkgUExMKSwgQWxwcyBUREVENCAoVEkgQUxQNTEwIFBMTCksCisgICAgICAgICAgICAgICAJCSAgQ29tdGVjaCBEVkJULTZrMDcgKFNQNTczMCBQTEwpCisgICAgICAgICAgICAgICAJCSAgKE54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUNjAwMCBkZW1vZHVsYXRvcikKKyAgIC0gc3A4ODd4CQk6IE1pY3JvdHVuZSA3MjAyRAorICAgLSBkaWIzMDAwbWIJOiBEaUJjb20gMzAwMC1NQiBkZW1vZHVsYXRvcgorICBEVkItUy9DL1Q6CisgICAtIGRzdAkJOiBUd2luSGFuIERTVCBGcm9udGVuZAorCisKK28gQ2FyZHMgYmFzZWQgb24gdGhlIFBoaWxsaXBzIHNhYTcxNDYgbXVsdGltZWRpYSBQQ0kgYnJpZGdlIGNoaXA6CisgIC0gVEkgQVY3MTEwIGJhc2VkIGNhcmRzIChpLmUuIHdpdGggaGFyZHdhcmUgTVBFRyBkZWNvZGVyKToKKyAgICAtIFNpZW1lbnMvVGVjaG5vdHJlbmQvSGF1cHBhdWdlIFBDSSBEVkIgY2FyZCByZXZpc2lvbiAxLjEsIDEuMywgMS41LCAxLjYsIDIuMQorICAgICAgKGFrYSBIYXVwcGF1Z2UgTmV4dXMpCisgIC0gImJ1ZGdldCIgY2FyZHMgKGkuZS4gd2l0aG91dCBoYXJkd2FyZSBNUEVHIGRlY29kZXIpOgorICAgIC0gVGVjaG5vdHJlbmQgQnVkZ2V0IC8gSGF1cHBhdWdlIFdpblRWLU5vdmEgUENJIENhcmRzCisgICAgLSBTQVRFTENPIE11bHRpbWVkaWEgUENJCisgICAgLSBLTkMxIERWQi1TLCBUeXBob29uIERWQi1TLCBUZXJyYXRlYyBDaW5lcmd5IDEyMDAgRFZCLVMgKG5vIENJIHN1cHBvcnQpCisgICAgLSBUeXBob29uIERWQi1TIGJ1ZGdldAorICAgIC0gRnVqaXRzdS1TaWVtZW5zIEFjdGl2eSBEVkItUyBidWRnZXQgY2FyZAorCitvIENhcmRzIGJhc2VkIG9uIHRoZSBCMkMyIEluYy4gRmxleENvcElJL0lJYi9JSUk6CisgIC0gVGVjaG5pc2F0IFNreVN0YXIyIFBDSSBEVkIgY2FyZCByZXZpc2lvbiAyLjMsIDIuNkIsIDIuNkMKKworbyBDYXJkcyBiYXNlZCBvbiB0aGUgQ29uZXhhbnQgQnQ4eHggUENJIGJyaWRnZToKKyAgLSBQaW5uYWNsZSBQQ1RWIFNhdCBEVkIKKyAgLSBOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWCisgIC0gVHdpbkhhbiBEU1QKKyAgLSBBdmVybWVkaWEgRFZCLVQKKworbyBUZWNobm90cmVuZCAvIEhhdXBwYXVnZSBEVkIgVVNCIGRldmljZXM6CisgIC0gTm92YSBVU0IKKyAgLSBERUMgMjAwMC1ULCAzMDAwLVMsIDI1NDAtVAorCitvIERpQmNvbSBEVkItVCBVU0IgYmFzZWQgZGV2aWNlczoKKyAgLSBUd2luaGFuIFZpc2lvblBsdXMgVmlzaW9uRFRWIFVTQi1UZXIgRFZCLVQgRGV2aWNlCisgIC0gSEFNQSBEVkItVCBVU0IgZGV2aWNlCisgIC0gQ1RTIFBvcnRhYmxlIChDaGluZXNlIFRlbGV2aXNpb24gU3lzdGVtKQorICAtIEtXb3JsZCBWLVN0cmVhbSBYUEVSVCBEVFYgRFZCLVQgVVNCCisgIC0gSmV0V2F5IERUViBEVkItVCBVU0IKKyAgLSBBRFNUZWNoIEluc3RhbnQgVFYgRFZCLVQgVVNCCisgIC0gVWx0aW1hIEVsZWN0cm9uaWMvQXJ0ZWMgVDEgVVNCIFRWQk9YIChBTjIxMzUgYW5kIEFOMjIzNSkKKyAgLSBDb21wcm8gVmlkZW9tYXRlIERWQi1VMjAwMCAtIERWQi1UIFVTQgorICAtIEdyYW5kdGVjIFVTQiBEVkItVAorICAtIEF2ZXJtZWRpYSBBdmVyVFYgRFZCVCBVU0IKKyAgLSBEaUJjb20gVVNCIERWQi1UIHJlZmVyZW5jZSBkZXZpY2UgKG5vbi1wdWJsaWMpCisgIC0gWWFrdW1vIERWQi1UIG1vYmlsZSBVU0IyLjAKKyAgLSBEaUJjb20gVVNCMi4wIERWQi1UIHJlZmVyZW5jZSBkZXZpY2UgKG5vbi1wdWJsaWMpCisKK28gRXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIHRoZSBhbmFsb2cgbW9kdWxlIG9mIHRoZSBTaWVtZW5zIERWQi1DIFBDSSBjYXJkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9jb250cmlidXRvcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvY29udHJpYnV0b3JzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQ1Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvY29udHJpYnV0b3JzLnR4dApAQCAtMCwwICsxLDc5IEBACitUaGFua3MgZ28gdG8gdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHBhdGNoZXMgYW5kIGNvbnRyaWJ1dGlvbnM6CisKK01pY2hhZWwgSHVub2xkIDxtLmh1bm9sZEBnbXguZGU+CisgIGZvciB0aGUgaW5pdGlhbCBzYWE3MTQ2IGRyaXZlciBhbmQgaXQncyByZWNlbnQgb3ZlcmhhdWwKKworQ2hyaXN0aWFuIFRoZWlzcworICBmb3IgaGlzIHdvcmsgb24gdGhlIGluaXRpYWwgTGludXggRFZCIGRyaXZlcgorCitNYXJjdXMgTWV0emxlciA8bW9jbUBtZXR6bGVyYnJvcy5kZT4KK1JhbHBoIE1ldHpsZXIgPHJqa21AbWV0emxlcmJyb3MuZGU+CisgIGZvciB0aGVpciBjb250aW51aW5nIHdvcmsgb24gdGhlIERWQiBkcml2ZXIKKworTWljaGFlbCBIb2x6dCA8a2p1QGRlYmlhbi5vcmc+CisgIGZvciBoaXMgY29udHJpYnV0aW9ucyB0byB0aGUgZHZiLW5ldCBkcml2ZXIKKworRGllZ28gUGljY2lhbmkgPGQucGljY2lhbmlAbm92YWNvbXAuaXQ+CisgIGZvciBDeWJlckxvZ2luIGZvciBMaW51eCB3aGljaCBhbGxvd3MgbG9nZ2luZyBvbnRvIEVPTgorICAoaW4gY2FzZSB5b3UgYXJlIHdvbmRlcmluZyB3aGVyZSBDeWJlckxvZ2luIGlzLCBFT04gY2hhbmdlZCBpdHMgbG9naW4gCisgIHByb2NlZHVyZSBhbmQgQ3liZXJMb2dpbiBpcyBubyBsb25nZXIgdXNlZC4pCisKK01hcnRpbiBTY2hhbGxlciA8bWFydGluQHNtdXJmLmZyYW5rZW4uZGU+CisgIGZvciBwYXRjaGluZyB0aGUgY2FibGUgY2FyZCBkZWNvZGVyIGRyaXZlcgorCitLbGF1cyBTY2htaWRpbmdlciA8S2xhdXMuU2NobWlkaW5nZXJAY2Fkc29mdC5kZT4KKyAgZm9yIHZhcmlvdXMgZml4ZXMgcmVnYXJkaW5nIHR1bmluZywgT1NEIGFuZCBDSSBzdHVmZiBhbmQgaGlzIHdvcmsgb24gVkRSCisKK1N0ZXZlIEJyb3duIDxzYnJvd25AY29ydGxhbmQuY29tPgorICBmb3IgaGlzIEFGQyBrZXJuZWwgdGhyZWFkCisKK0NocmlzdG9waCBNYXJ0aW4gPG1hcnRpbkB1bmktbWFpbnouZGU+CisgIGZvciBoaXMgTElSQyBpbmZyYXJlZCBoYW5kbGVyCisKK0FuZHJlYXMgT2JlcnJpdHRlciA8b2JpQGxpbnV4dHYub3JnPgorRGVubmlzIE5vZXJtYW5uIDxkZW5uaXMubm9lcm1hbm5Abm9lcm5ldC5kZT4KK0ZlbGl4IERvbWtlIDx0bWJpbmNAZWxpdGVkdmIubmV0PgorRmxvcmlhbiBTY2hpcm1lciA8am9sdEB0dXhib3gub3JnPgorUm9ubnkgU3RydXR6IDwzZGVzQGVsaXRlZHZiLmRlPgorV29sZnJhbSBKb29zdCA8ZGJveDJAZnJva2FzY2h3ZWkuZGU+CisuLi5hbmQgYWxsIHRoZSBvdGhlciBkYm94MiBwZW9wbGUKKyAgZm9yIG1hbnkgYnVnZml4ZXMgaW4gdGhlIGdlbmVyaWMgRFZCIENvcmUsIGZyb250ZW5kIGRyaXZlcnMgYW5kCisgIHRoZWlyIHdvcmsgb24gdGhlIGRib3gyIHBvcnQgb2YgdGhlIERWQiBkcml2ZXIKKworT2xpdmVyIEVuZHJpc3MgPG8uZW5kcmlzc0BnbXguZGU+CisgIGZvciBtYW55IGJ1Z2ZpeGVzCisKK0FuZHJldyBkZSBRdWluY2V5IDxhZHFfZHZiQGxpZHNraWFsZi5uZXQ+CisgIGZvciB0aGUgdGRhMTAwNHggZnJvbnRlbmQgZHJpdmVyLCBhbmQgdmFyaW91cyBidWdmaXhlcworCitQZXRlciBTY2hpbGRtYW5uIDxwZXRlci5zY2hpbGRtYW5uQHdlYi5kZT4KKyAgZm9yIHRoZSBkcml2ZXIgZm9yIHRoZSBUZWNobmlzYXQgU2t5U3RhcjIgUENJIERWQiBjYXJkCisKK1ZhZGltIENhdGFuYSA8c2t5c3RhckBtb2xkb3ZhLmNjPgorUm9iZXJ0byBSYWd1c2EgPHIucmFndXNhQGxpYmVyby5pdD4KK0F1Z3VzdG8gQ2FyZG9zbyA8YXVndXN0b0BjYXJoaWwubmV0PgorICBmb3IgYWxsIHRoZSB3b3JrIGZvciB0aGUgRmxleENvcElJIGNoaXBzZXQgYnkgQjJDMixJbmMuCisKK0Rhdm9yIEVtYXJkIDxlbWFyZEBzb2Z0aG9tZS5uZXQ+CisgIGZvciBoaXMgd29yayBvbiB0aGUgYnVkZ2V0IGRyaXZlcnMsIHRoZSBkZW11eCBjb2RlLAorICB0aGUgbW9kdWxlIHVubG9hZGluZyBwcm9ibGVtcywgLi4uCisgIAorSGFucy1GcmllZGVyIFZvZ3QgPGhmdm9ndEBhcmNvci5kZT4KKyAgZm9yIGhpcyB3b3JrIG9uIGNhbGN1bGF0aW5nIGFuZCBjaGVja2luZyB0aGUgY3JjJ3MgZm9yIHRoZQorICBUZWNobm9UcmVuZC9IYXVwcGF1Z2UgREVDIGRyaXZlciBmaXJtd2FyZQorCitNaWNoYWVsIERyZWhlciA8bWljaGFlbEA1ZG90MS5kZT4KK0FuZHJlYXMgJ3JhbmR5JyBXZWluYmVyZ2VyCisgIGZvciB0aGUgc3VwcG9ydCBvZiB0aGUgRnVqaXRzdS1TaWVtZW5zIEFjdGl2eSBidWRnZXQgRFZCLVMKKworS2VubmV0aCBBYWZs+HkgPGtlLWFhQGZyaXN1cmYubm8+CisgIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgVHlwaG9vbiBEVkItUyBidWRnZXQgY2FyZAorCitFcm5zdCBQZWlubGljaCA8ZS5wZWlubGljaEBpbm9kZS5hdD4KKyAgZm9yIHR1bmluZy9EaVNFcUMgc3VwcG9ydCBmb3IgdGhlIERFQyAzMDAwLXMKKworUGV0ZXIgQmV1dG5lciA8cC5iZXV0bmVyQGdteC5uZXQ+CisgIGZvciB0aGUgSVIgY29kZSBmb3IgdGhlIHR0dXNiLWRlYyBkcml2ZXIKKworKElmIHlvdSB0aGluayB5b3Ugc2hvdWxkIGJlIGluIHRoaXMgbGlzdCwgYnV0IHlvdSBhcmUgbm90LCBkcm9wIGEKKyBsaW5lIHRvIHRoZSBEVkIgbWFpbGluZyBsaXN0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZmFxLnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2ZhcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmNTFlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2ZhcS50eHQKQEAgLTAsMCArMSwxNjAgQEAKK1NvbWUgdmVyeSBmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBhYm91dCBsaW51eHR2LWR2YgorCisxLiBUaGUgc2lnbmFsIHNlZW1zIHRvIGRpZSBhIGZldyBzZWNvbmRzIGFmdGVyIHR1bmluZy4KKworCUl0J3Mgbm90IGEgYnVnLCBpdCdzIGEgZmVhdHVyZS4gQmVjYXVzZSB0aGUgZnJvbnRlbmRzIGhhdmUKKwlzaWduaWZpY2FudCBwb3dlciByZXF1aXJlbWVudHMgKGFuZCBoZW5jZSBnZXQgdmVyeSBob3QpLCB0aGV5CisJYXJlIHBvd2VyZWQgZG93biBpZiB0aGV5IGFyZSB1bnVzZWQgKGkuZS4gaWYgdGhlIGZyb250ZW5kIGRldmljZQorCWlzIGNsb3NlZCkuIFRoZSBkdmItY29yZS5vIG1vZHVsZSBwYXJhbXRlciAiZHZiX3NodXRkb3duX3RpbWVvdXQiCisJYWxsb3cgeW91IHRvIGNoYW5nZSB0aGUgdGltZW91dCAoZGVmYXVsdCA1IHNlY29uZHMpLiBTZXR0aW5nIHRoZQorCXRpbWVvdXQgdG8gMCBkaXNhYmxlcyB0aGUgdGltZW91dCBmZWF0dXJlLgorCisyLiBIb3cgY2FuIEkgd2F0Y2ggVFY/CisKKwlUaGUgZHJpdmVyIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBzb21lIHNpbXBsZSB1dGlsaXRpZXMgd2hpY2gKKwlhcmUgbWFpbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nIGFuZCB0byBkZW1vbnN0cmF0ZSBob3cgdGhlCisJRFZCIEFQSSB3b3Jrcy4KKworCURlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSBoYXZlIGEgRFZCLVMsIERWQi1DIG9yIERWQi1UIGNhcmQsIHVzZQorCWFwcHMvc3phcC9zemFwLCBjemFwIG9yIHR6YXAuIFlvdSBtdXN0IHN1cHBseSBhIGNoYW5uZWwgbGlzdAorCWluIH4vLltzY3RdemFwL2NoYW5uZWxzLmNvbmYuIElmIHlvdSBhcmUgbHVja3kgeW91IGNhbiBqdXN0IGNvcHkKKwlvbmUgb2YgdGhlIHN1cHBsaWVkIGNoYW5uZWwgbGlzdHMsIG9yIHlvdSBjYW4gY3JlYXRlIGEgbmV3IG9uZQorCWJ5IHJ1bm5pbmcgYXBwcy9zY2FuL3NjYW4uIElmIHlvdSBydW4gc2NhbiBvbiBhbiB1bmtub3duIG5ldHdvcmsKKwl5b3UgbWlnaHQgaGF2ZSB0byBzdXBwbHkgc29tZSBzdGFydCBkYXRhIGluIGFwcHMvc2Nhbi9pbml0aWFsLmguCisKKwlJZiB5b3UgaGF2ZSBhIGNhcmQgd2l0aCBhIGJ1aWx0LWluIGhhcmR3YXJlIE1QRUctZGVjb2RlciB0aGUKKwlkcml2ZXJzIGNyZWF0ZSBhIHZpZGVvNGxpbnV4IGRldmljZSAoL2Rldi92NGwvdmlkZW8wKSB3aGljaAorCXlvdSBjYW4gdXNlIHRvIHdhdGNoIFRWIHdpdGggYW55IHY0bCBhcHBsaWNhdGlvbi4geGF3dHYgaXMga25vd24KKwl0byB3b3JrLiBOb3RlIHRoYXQgeW91IGNhbm5vdCBjaGFuZ2UgY2hhbm5lbHMgd2l0aCB4YXd0diwgeW91CisJaGF2ZSB0byB6YXAgdXNpbmcgW3NjdF16YXAuIElmIHlvdSB3YW50IGEgbmljZSBhcHBsaWNhdGlvbiBmb3IKKwlUViB3YXRjaGluZyBhbmQgcmVjb3JkL3BsYXliYWNrLCBoYXZlIGEgbG9vayBhdCBWRFIuCisKKwlJZiB5b3VyIGNhcmQgZG9lcyBub3QgaGF2ZSBhIGhhcmR3YXJlIE1QRUcgZGVjb2RlciB5b3UgbmVlZAorCWEgc29mdHdhcmUgTVBFRyBkZWNvZGVyLiBNcGxheWVyIG9yIHhpbmUgYXJlIGtub3duIHRvIHdvcmsuCisJTmV3c2ZsYXNoOiBNeXRoVFYgYWxzbyBoYXMgRFZCIHN1cHBvcnQgbm93LgorCU5vdGU6IE9ubHkgdmVyeSByZWNlbnQgdmVyc2lvbnMgb2YgTXBsYXllciBhbmQgeGluZSBjYW4gZGVjb2RlLgorCU1QRUcyIHRyYW5zcG9ydCBzdHJlYW1zIChUUykgZGlyZWN0bHkuIFRoZW4sIHJ1bgorCSdbc2N0XXphcCBjaGFubmVsbmFtZSAtcicgaW4gb25lIHh0ZXJtLCBhbmQga2VlcCBpdCBydW5uaW5nLAorCWFuZCBzdGFydCAnbXBsYXllciAtIDwgL2Rldi9kdmIvYWRhcHRlcjAvZHZyMCcgb3IKKwkneGluZSBzdGRpbjovL21wZWcyIDwgL2Rldi9kdmIvYWRhcHRlcjAvZHZyMCcgaW4gYSBzZWNvbmQgeHRlcm0uCisJVGhhdCdzIGFsbCBmYXIgZnJvbSBwZXJmZWN0LCBidXQgaXQgc2VlbXMgbm8gb25lIGhhcyB3cml0dGVuCisJYSBuaWNlIERWQiBhcHBsaWNhdGlvbiB3aGljaCBpbmNsdWRlcyBhIGJ1aWx0aW4gc29mdHdhcmUgTVBFRworCWRlY29kZXIgeWV0LgorCisJTmV3c2ZsYXNoOiBOZXdlc3QgeGluZSBkaXJlY3RseSBzdXBwb3J0cyBEVkIuIEp1c3QgY29weSB5b3VyCisJY2hhbm5lbHMuY29uZiB0byB+Ly54aW5lIGFuZCBzdGFydCAneGluZSBkdmI6Ly8nLCBvciBzZWxlY3QKKwl0aGUgRFZCIGJ1dHRvbiBpbiB0aGUgeGluZSBHVUkuIENoYW5uZWwgc3dpdGNoaW5nIHdvcmtzIHVzaW5nIHRoZQorCW51bXBhZCBwZ3VwL3BnZG93biAoTlA5IC8gTlAzKSBrZXlzIHRvIHNjcm9sbCB0aHJvdWdoIHRoZSBjaGFubmVsIG9zZAorCW1lbnUgYW5kIHByZXNzaW5nIG51bXBhZC1lbnRlciB0byBzd2l0Y2ggdG8gdGhlIHNlbGVjdGVkIGNoYW5uZWwuCisKKwlOb3RlOiBPbGRlciB2ZXJzaW9ucyBvZiB4aW5lIGFuZCBtcGxheWVyIHVuZGVyc3RhbmQgTVBFRyBwcm9ncmFtCisJc3RyZWFtcyAoUFMpIG9ubHksIGFuZCBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorCXRzMnBzIHRvb2wgZnJvbSB0aGUgTWV0emxlciBCcm90aGVyJ3MgZHZiLW1wZWd0b29scyBwYWNrYWdlLgorCiszLiBXaGljaCBvdGhlciBEVkIgYXBwbGljYXRpb25zIGV4aXN0PworCisJaHR0cDovL3d3dy5jYWRzb2Z0LmRlL3Blb3BsZS9rbHMvdmRyLworCQlLbGF1cyBTY2htaWRpbmdlcidzIFZpZGVvIERpc2sgUmVjb3JkZXIKKworCWh0dHA6Ly93d3cubWV0emxlcmJyb3Mub3JnL2R2Yi8KKwkJTWV0emxlciBCcm9zLiBEVkIgZGV2ZWxvcG1lbnQ7IGFsdGVybmF0ZSBkcml2ZXJzIGFuZAorCQlEVkIgdXRpbGl0aWVzLCBpbmNsdWRlIGR2Yi1tcGVndG9vbHMgYW5kIHR1eHphcC4KKworCWh0dHA6Ly93d3cubGludXhzdGIub3JnLworCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZHZidG9vbHMvCisJCURhdmUgQ2hhcG1hbidzIGR2YnRvb2xzIHBhY2thZ2UsIGluY2x1ZGluZworCQlkdmJzdHJlYW0gYW5kIGR2YnR1bmUKKworCWh0dHA6Ly93d3cubGludXhkdmIudHYvCisJCUhlbm5pbmcgSG9sdHNjaG5laWRlcidzIHNpdGUgd2l0aCBtYW55IGludGVyZXN0aW5nCisJCWxpbmtzIGFuZCBkb2NzCisKKwlodHRwOi8vd3d3LmRib3gyLmluZm8vCisJCUxpbnV4RFZCIG9uIHRoZSBkQm94MgorCisJaHR0cDovL3d3dy50dXhib3gub3JnLworCWh0dHA6Ly9jdnMudHV4Ym94Lm9yZy8KKwkJdGhlIFR1eEJveCBDVlMgbWFueSBpbnRlcmVzdGluZyBEVkIgYXBwbGljYXRpb25zIGFuZCB0aGUgZEJveDIKKwkJRFZCIHNvdXJjZQorCisJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9kdmJzYWsvCisJCURWQiBTd2lzcyBBcm15IEtuaWZlIGxpYnJhcnkgYW5kIHV0aWxpdGllcworCisJaHR0cDovL3d3dy5uZW5pZS5vcmcvbWlzYy9tcHN5cy8KKwkJTVBTWVM6IGEgTVBFRzIgc3lzdGVtIGxpYnJhcnkgYW5kIHRvb2xzCisKKwlodHRwOi8vbXBsYXllcmhxLmh1LworCQltcGxheWVyCisKKwlodHRwOi8veGluZS5zb3VyY2Vmb3JnZS5uZXQvCisJaHR0cDovL3hpbmVocS5kZS8KKwkJeGluZQorCisJaHR0cDovL3d3dy5teXRodHYub3JnLworCQlNeXRoVFYgLSBhbmFsb2cgVFYgUFZSLCBidXQgbm93IHdpdGggRFZCIHN1cHBvcnQsIHRvbworCQkod2l0aCBzb2Z0d2FyZSBNUEVHIGRlY29kZSkKKworCWh0dHA6Ly9kdmJzbm9vcC5zb3VyY2Vmb3JnZS5uZXQvCisJCURWQiBzbmlmZmVyIHByb2dyYW0gdG8gbW9uaXRvciwgYW5hbHl6ZSwgZGVidWcsIGR1bXAKKwkJb3IgdmlldyBkdmIvbXBlZy9kc20tY2MvbWhwIHN0cmVhbSBpbmZvcm1hdGlvbiAoVFMsCisJCVBFUywgU0VDVElPTikKKworNC4gQ2FuJ3QgZ2V0IGEgc2lnbmFsIHR1bmVkIGNvcnJlY3RseQorCisJSWYgeW91IGFyZSB1c2luZyBhIFRlY2hub3RyZW5kL0hhdXBwYXVnZSBEVkItQyBjYXJkICp3aXRob3V0KiBhbmFsb2cKKwltb2R1bGUsIHlvdSBtaWdodCBoYXZlIHRvIHVzZSBtb2R1bGUgcGFyYW1ldGVyIGFkYWM9LTEgKGR2Yi10dHBjaS5vKS4KKworNS4gVGhlIGR2Yl9uZXQgZGV2aWNlIGRvZXNuJ3QgZ2l2ZSBtZSBhbnkgcGFja2V0cyBhdCBhbGwKKworCVJ1biB0Y3BkdW1wIG9uIHRoZSBkdmIwXzAgaW50ZXJmYWNlLiBUaGlzIHNldHMgdGhlIGludGVyZmFjZQorCWludG8gcHJvbWlzY291cyBtb2RlIHNvIGl0IGFjY2VwdHMgYW55IHBhY2tldHMgZnJvbSB0aGUgUElECisJeW91IGhhdmUgY29uZmlndXJlZCB3aXRoIHRoZSBkdmJuZXQgdXRpbGl0eS4gQ2hlY2sgaWYgdGhlcmUKKwlhcmUgYW55IHBhY2tldHMgd2l0aCB0aGUgSVAgYWRkciBhbmQgTUFDIGFkZHIgeW91IGhhdmUKKwljb25maWd1cmVkIHdpdGggaWZjb25maWcuCisKKwlJZiB0Y3BkdW1wIGRvZXNuJ3QgZ2l2ZSB5b3UgYW55IG91dHB1dCwgY2hlY2sgdGhlIHN0YXRpc3RpY3MKKwl3aGljaCBpZmNvbmZpZyBvdXRwdXRzLiAoTm90ZTogSWYgdGhlIE1BQyBhZGRyZXNzIGlzIHdyb25nLAorCWR2Yl9uZXQgd29uJ3QgZ2V0IGFueSBpbnB1dDsgdGh1cyB5b3UgaGF2ZSB0byBydW4gdGNwZHVtcAorCWJlZm9yZSBjaGVja2luZyB0aGUgc3RhdGlzdGljcy4pIElmIHRoZXJlIGFyZSBubyBwYWNrZXRzIGF0CisJYWxsIHRoZW4gbWF5YmUgdGhlIFBJRCBpcyB3cm9uZy4gSWYgdGhlcmUgYXJlIGVycm9yIHBhY2tldHMsCisJdGhlbiBlaXRoZXIgdGhlIFBJRCBpcyB3cm9uZyBvciB0aGUgc3RyZWFtIGRvZXMgbm90IGNvbmZvcm0gdG8KKwl0aGUgTVBFIHN0YW5kYXJkIChFTiAzMDEgMTkyLCBodHRwOi8vd3d3LmV0c2kub3JnLykuIFlvdSBjYW4KKwl1c2UgZS5nLiBkdmJzbm9vcCBmb3IgZGVidWdnaW5nLgorCis2LiBUaGUgZHZiX25ldCBkZXZpY2UgZG9lc24ndCBnaXZlIG1lIGFueSBtdWx0aWNhc3QgcGFja2V0cworCisJQ2hlY2sgeW91ciByb3V0ZXMgaWYgdGhleSBpbmNsdWRlIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyByYW5nZS4KKwlBZGRpdGlvbmFsbHkgbWFrZSBzdXJlIHRoYXQgInNvdXJjZSB2YWxpZGF0aW9uIGJ5IHJldmVyc2VkIHBhdGgKKwlsb29rdXAiIGlzIGRpc2FibGVkOgorCSAgJCAiZWNobyAwID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvZHZiMC9ycF9maWx0ZXIiCisKKzcuIFdoYXQgdGhlIGhlbGwgYXJlIGFsbCB0aG9zZSBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBsb2FkZWQ/CisKKwlGb3IgYSBkdmItdHRwY2kgYXY3MTEwIGJhc2VkIGZ1bGwtZmVhdHVyZWQgY2FyZCB0aGUgZm9sbG93aW5nCisJbW9kdWxlcyBhcmUgbG9hZGVkOgorCisJLSB2aWRlb2RldjogVmlkZW80TGludXggY29yZSBtb2R1bGUuIFRoaXMgaXMgdGhlIGJhc2UgbW9kdWxlIHRoYXQKKwkgIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlICJhbmFsb2ciIHR2IHBpY3R1cmUgb2YgdGhlIGF2NzExMCBtcGVnMgorCSAgZGVjb2Rlci4KKworCS0gdjRsMi1jb21tb246IGNvbW1vbiBmdW5jdGlvbnMgZm9yIFZpZGVvNExpbnV4LTIgZHJpdmVycworCisJLSB2NGwxLWNvbXBhdDogYmFja3dhcmQgY29tcGF0aWJsaXR5IGxheWVyIGZvciBWaWRlbzRMaW51eC0xIGxlZ2FjeQorCSAgYXBwbGljYXRpb25zCisKKwktIGR2Yi1jb3JlOiBEVkIgY29yZSBtb2R1bGUuIFRoaXMgcHJvdmlkZXMgeW91IHdpdGggdGhlCisJICAvZGV2L2R2Yi9hZGFwdGVyIGVudHJpZXMKKworCS0gc2FhNzE0NjogU0FBNzE0NiBjb3JlIGRyaXZlci4gVGhpcyBpcyBuZWVkIHRvIGFjY2VzcyBhbnkgU0FBNzE0NgorCSAgYmFzZWQgY2FyZCBpbiB5b3VyIHN5c3RlbS4KKworCS0gc2FhNzE0Nl92djogU0FBNzE0NiB2aWRlbyBhbmQgdmJpIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIG9ubHkgbmVlZGVkCisJICBmb3IgZnVsbC1mZWF0dXJlZCBjYXJkcy4KKworCS0gdmlkZW8tYnVmOiBjYXB0dXJlIGhlbHBlciBtb2R1bGUgZm9yIHRoZSBzYWE3MTQ2X3Z2IGRyaXZlci4gVGhpcworCSAgb25lIGlzIHJlc3BvbnNpYmxlIHRvIGhhbmRsZSBjYXB0dXJlIGJ1ZmZlcnMuCisKKwktIGR2Yi10dHBjaTogVGhlIG1haW4gZHJpdmVyIGZvciBBVjcxMTAgYmFzZWQsIGZ1bGwtZmVhdHVlZAorCSAgRFZCLVMvQy9UIGNhcmRzCisKK2VvZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmZGNiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKQEAgLTAsMCArMSwzOTcgQEAKKyMhL3Vzci9iaW4vcGVybAorIyAgICAgRFZCIGZpcm13YXJlIGV4dHJhY3RvcgorIworIyAgICAgKGMpIDIwMDQgQW5kcmV3IGRlIFF1aW5jZXkKKyMKKyMgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIworIyAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjICAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCit1c2UgRmlsZTo6VGVtcCBxdy8gdGVtcGRpciAvOwordXNlIElPOjpIYW5kbGU7CisKK0Bjb21wb25lbnRzID0gKCAic3A4ODcwIiwgInNwODg3eCIsICJ0ZGExMDA0NSIsICJ0ZGExMDA0NiIsICJhdjcxMTAiLCAiZGVjMjAwMHQiLAorCQkiZGVjMjU0MHQiLCAiZGVjMzAwMHMiLCAidnA3MDQxIiwgImRpYnVzYiIsICJueHQyMDAyIiwKKwkJIm9yNTEyMTEiLCAib3I1MTEzMl9xYW0iLCAib3I1MTEzMl92c2IiKTsKKworIyBDaGVjayBhcmdzCitzeW50YXgoKSBpZiAoc2NhbGFyKEBBUkdWKSAhPSAxKTsKKyRjaWQgPSAkQVJHVlswXTsKKworIyBEbyBpdCEKK2ZvciAoJGk9MDsgJGkgPCBzY2FsYXIoQGNvbXBvbmVudHMpOyAkaSsrKSB7CisgICAgaWYgKCRjaWQgZXEgJGNvbXBvbmVudHNbJGldKSB7CisJJG91dGZpbGUgPSBldmFsKCRjaWQpOworCWRpZSAkQCBpZiAkQDsKKwlwcmludCBTVERFUlIgIkZpcm13YXJlICRvdXRmaWxlIGV4dHJhY3RlZCBzdWNjZXNzZnVsbHkuIE5vdyBjb3B5IGl0IHRvIGVpdGhlciAvbGliL2Zpcm13YXJlIG9yIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUvIChkZXBlbmRpbmcgb24geW91ciBob3RwbHVnIHZlcnNpb24pLlxuIjsKKwlleGl0KDApOworICAgIH0KK30KKworIyBJZiB3ZSBnZXQgaGVyZSwgaXQgd2Fzbid0IGZvdW5kCitwcmludCBTVERFUlIgIlVua25vd24gY29tcG9uZW50IFwiJGNpZFwiXG4iOworc3ludGF4KCk7CisKKworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpcm13YXJlLXNwZWNpZmljIGV4dHJhY3Rpb24gc3Vicm91dGluZXMKKworc3ViIHNwODg3MCB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAidHRfUHJlbWl1bV8yMTdnLnppcCI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LnRlY2hub3RyZW5kLmRlL25ldy8yMTdnLyRzb3VyY2VmaWxlIjsKKyAgICBteSAkaGFzaCA9ICI1Mzk3MGVjMTdhNTM4OTQ1YTZkOGNiNjA4YTdiMzg5OSI7CisgICAgbXkgJG91dGZpbGUgPSAiZHZiLWZlLXNwODg3MC5mdyI7CisgICAgbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7CisgICAgdmVyaWZ5KCIkdG1wZGlyL3NvZnR3YXJlL09FTS9IRS9BcHAvYm9vdC9TQ19NQUlOLk1DIiwgJGhhc2gpOworICAgIGNvcHkoIiR0bXBkaXIvc29mdHdhcmUvT0VNL0hFL0FwcC9ib290L1NDX01BSU4uTUMiLCAkb3V0ZmlsZSk7CisKKyAgICAkb3V0ZmlsZTsKK30KKworc3ViIHNwODg3eCB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAiRHZidDEuMy41Ny42LnppcCI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LmF2ZXJtZWRpYS5jb20vc29mdHdhcmUvJHNvdXJjZWZpbGUiOworICAgIG15ICRjYWJmaWxlID0gIkRWQlQgTmV0ICBWZXIxLjMuNTcuNi9kaXNrMS9kYXRhMS5jYWIiOworICAgIG15ICRoYXNoID0gIjIzNzkzOGQ1M2E3ZjgzNGMwNWM0MmI4OTRjYTY4YWMzIjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItZmUtc3A4ODd4LmZ3IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworICAgIGNoZWNrdW5zaGllbGQoKTsKKworICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7CisgICAgdW5zaGllbGQoIiR0bXBkaXIvJGNhYmZpbGUiLCAkdG1wZGlyKTsKKyAgICB2ZXJpZnkoIiR0bXBkaXIvWkVuZ2xpc2gvc2NfbWFpbi5tYyIsICRoYXNoKTsKKyAgICBjb3B5KCIkdG1wZGlyL1pFbmdsaXNoL3NjX21haW4ubWMiLCAkb3V0ZmlsZSk7CisKKyAgICAkb3V0ZmlsZTsKK30KKworc3ViIHRkYTEwMDQ1IHsKKyAgICBteSAkc291cmNlZmlsZSA9ICJ0dF9idWRnZXRfMjE3Zy56aXAiOworICAgIG15ICR1cmwgPSAiaHR0cDovL3d3dy50ZWNobm90cmVuZC5kZS9uZXcvMjE3Zy8kc291cmNlZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiMjEwNWZkNWJmMzc4NDJmYmNkZmE0YmZkNThmMzU5NGEiOworICAgIG15ICRvdXRmaWxlID0gImR2Yi1mZS10ZGExMDA0NS5mdyI7CisgICAgbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7CisgICAgZXh0cmFjdCgiJHRtcGRpci9zb2Z0d2FyZS9PRU0vUENJL0FwcC90dGxjZGFjYy5kbGwiLCAweDM3ZWY5LCAzMDU1NSwgIiR0bXBkaXIvZnd0bXAiKTsKKyAgICB2ZXJpZnkoIiR0bXBkaXIvZnd0bXAiLCAkaGFzaCk7CisgICAgY29weSgiJHRtcGRpci9md3RtcCIsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCitzdWIgdGRhMTAwNDYgeworICAgIG15ICRzb3VyY2VmaWxlID0gInR0X2J1ZGdldF8yMTdnLnppcCI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LnRlY2hub3RyZW5kLmRlL25ldy8yMTdnLyRzb3VyY2VmaWxlIjsKKyAgICBteSAkaGFzaCA9ICJhMjViNTc5ZTM3MTA5YWY2MGY0YTM2YzM3ODkzOTU3YyI7CisgICAgbXkgJG91dGZpbGUgPSAiZHZiLWZlLXRkYTEwMDQ2LmZ3IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworICAgIHVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKyAgICBleHRyYWN0KCIkdG1wZGlyL3NvZnR3YXJlL09FTS9QQ0kvQXBwL3R0bGNkYWNjLmRsbCIsIDB4M2Y3MzEsIDI0NDc5LCAiJHRtcGRpci9md3RtcCIpOworICAgIHZlcmlmeSgiJHRtcGRpci9md3RtcCIsICRoYXNoKTsKKyAgICBjb3B5KCIkdG1wZGlyL2Z3dG1wIiwgJG91dGZpbGUpOworCisgICAgJG91dGZpbGU7Cit9CisKK3N1YiBhdjcxMTAgeworICAgIG15ICRzb3VyY2VmaWxlID0gImR2Yi10dHBjaS0wMS5mdy0yNjFkIjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlLyRzb3VyY2VmaWxlIjsKKyAgICBteSAkaGFzaCA9ICI2MDM0MzFiNjI1OTcxNWE4ZTg4ZjM3NmE1M2I2NGUyZiI7CisgICAgbXkgJG91dGZpbGUgPSAiZHZiLXR0cGNpLTAxLmZ3IjsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB2ZXJpZnkoJHNvdXJjZWZpbGUsICRoYXNoKTsKKyAgICBjb3B5KCRzb3VyY2VmaWxlLCAkb3V0ZmlsZSk7CisKKyAgICAkb3V0ZmlsZTsKK30KKworc3ViIGRlYzIwMDB0IHsKKyAgICBteSAkc291cmNlZmlsZSA9ICJkZWMyMTdnLmV4ZSI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vaGF1cHBhdWdlLmxpZ2h0cGF0aC5uZXQvZGUvJHNvdXJjZWZpbGUiOworICAgIG15ICRoYXNoID0gImJkODZmNDU4Y2VlNGE4ZjBhOGNlMmQyMGM2NjIxNWE5IjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItdHR1c2ItZGVjLTIwMDB0LmZ3IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworICAgIHVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKyAgICB2ZXJpZnkoIiR0bXBkaXIvc29mdHdhcmUvT0VNL1NUQi9BcHAvQm9vdC9TVEJfUENfVC5iaW4iLCAkaGFzaCk7CisgICAgY29weSgiJHRtcGRpci9zb2Z0d2FyZS9PRU0vU1RCL0FwcC9Cb290L1NUQl9QQ19ULmJpbiIsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCitzdWIgZGVjMjU0MHQgeworICAgIG15ICRzb3VyY2VmaWxlID0gImRlYzIxN2cuZXhlIjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9oYXVwcGF1Z2UubGlnaHRwYXRoLm5ldC9kZS8kc291cmNlZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiNTNlNThmNGY1YjVjMjkzMGJlZWU3NGE3NjgxZmVkOTIiOworICAgIG15ICRvdXRmaWxlID0gImR2Yi10dHVzYi1kZWMtMjU0MHQuZnciOworICAgIG15ICR0bXBkaXIgPSB0ZW1wZGlyKERJUiA9PiAiL3RtcCIsIENMRUFOVVAgPT4gMSk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkc291cmNlZmlsZSwgJHVybCk7CisgICAgdW56aXAoJHNvdXJjZWZpbGUsICR0bXBkaXIpOworICAgIHZlcmlmeSgiJHRtcGRpci9zb2Z0d2FyZS9PRU0vU1RCL0FwcC9Cb290L1NUQl9QQ19YLmJpbiIsICRoYXNoKTsKKyAgICBjb3B5KCIkdG1wZGlyL3NvZnR3YXJlL09FTS9TVEIvQXBwL0Jvb3QvU1RCX1BDX1guYmluIiwgJG91dGZpbGUpOworCisgICAgJG91dGZpbGU7Cit9CisKK3N1YiBkZWMzMDAwcyB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAiZGVjMjE3Zy5leGUiOworICAgIG15ICR1cmwgPSAiaHR0cDovL2hhdXBwYXVnZS5saWdodHBhdGgubmV0L2RlLyRzb3VyY2VmaWxlIjsKKyAgICBteSAkaGFzaCA9ICJiMDEzZWNlY2VhODNmNGQ2ZDhkMmEyOWFjN2MxYjQ0OCI7CisgICAgbXkgJG91dGZpbGUgPSAiZHZiLXR0dXNiLWRlYy0zMDAwcy5mdyI7CisgICAgbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7CisgICAgdmVyaWZ5KCIkdG1wZGlyL3NvZnR3YXJlL09FTS9TVEIvQXBwL0Jvb3QvU1RCX1BDX1MuYmluIiwgJGhhc2gpOworICAgIGNvcHkoIiR0bXBkaXIvc29mdHdhcmUvT0VNL1NUQi9BcHAvQm9vdC9TVEJfUENfUy5iaW4iLCAkb3V0ZmlsZSk7CisKKyAgICAkb3V0ZmlsZTsKK30KKworc3ViIHZwNzA0MSB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAiMi40MjIuemlwIjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly93d3cudHdpbmhhbi5jb20vZmlsZXMvZHJpdmVyL1VTQi1UZXIvJHNvdXJjZWZpbGUiOworICAgIG15ICRoYXNoID0gImU4OGM5MzcyZDFmNjY2MDlhM2U3YjA3MmM1M2ZiY2ZlIjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItdnA3MDQxLTIuNDIyLmZ3IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworICAgIHVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKyAgICBleHRyYWN0KCIkdG1wZGlyL1Zpc2lvbkRUVi9Ecml2ZXJzL1dpbjJLJlhQL1VEVFRsb2FkLnN5cyIsIDEyNTAzLCAzMDM2LCAiJHRtcGRpci9md3RtcDEiKTsKKyAgICBleHRyYWN0KCIkdG1wZGlyL1Zpc2lvbkRUVi9Ecml2ZXJzL1dpbjJLJlhQL1VEVFRsb2FkLnN5cyIsIDIyMDcsIDEwMjc0LCAiJHRtcGRpci9md3RtcDIiKTsKKworICAgIG15ICRDTUQgPSAiXDAwMFwwMDFcMDAwXDIyMlwxNzdcMDAwIjsKKyAgICBteSAkUEFEID0gIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCI7CisgICAgbXkgKCRGVyk7CisgICAgb3BlbiAkRlcsICI+JHRtcGRpci9md3RtcDMiOworICAgIHByaW50ICRGVyAiJENNRFwwMDEkUEFEIjsKKyAgICBwcmludCAkRlcgIiRDTURcMDAxJFBBRCI7CisgICAgYXBwZW5kZmlsZSgkRlcsICIkdG1wZGlyL2Z3dG1wMSIpOworICAgIHByaW50ICRGVyAiJENNRFwwMDAkUEFEIjsKKyAgICBwcmludCAkRlcgIiRDTURcMDAxJFBBRCI7CisgICAgYXBwZW5kZmlsZSgkRlcsICIkdG1wZGlyL2Z3dG1wMiIpOworICAgIHByaW50ICRGVyAiJENNRFwwMDEkUEFEIjsKKyAgICBwcmludCAkRlcgIiRDTURcMDAwJFBBRCI7CisgICAgY2xvc2UoJEZXKTsKKworICAgIHZlcmlmeSgiJHRtcGRpci9md3RtcDMiLCAkaGFzaCk7CisgICAgY29weSgiJHRtcGRpci9md3RtcDMiLCAkb3V0ZmlsZSk7CisKKyAgICAkb3V0ZmlsZTsKK30KKworc3ViIGRpYnVzYiB7CisJbXkgJHVybCA9ICJodHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS9kdmItZGlidXNiLTUuMC4wLjExLmZ3IjsKKwlteSAkb3V0ZmlsZSA9ICJkdmItZGlidXNiLTUuMC4wLjExLmZ3IjsKKwlteSAkaGFzaCA9ICJmYTQ5MDI5NWE1MjczNjBjYTE2ZGNkZjMyMjRjYTI0MyI7CisKKwljaGVja3N0YW5kYXJkKCk7CisKKwl3Z2V0ZmlsZSgkb3V0ZmlsZSwgJHVybCk7CisJdmVyaWZ5KCRvdXRmaWxlLCRoYXNoKTsKKworCSRvdXRmaWxlOworfQorCitzdWIgbnh0MjAwMiB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAiQnJvYWRiYW5kNFBDXzRfMl8xMS56aXAiOworICAgIG15ICR1cmwgPSAiaHR0cDovL3d3dy5iYnRpLnVzL2Rvd25sb2FkL3dpbmRvd3MvJHNvdXJjZWZpbGUiOworICAgIG15ICRoYXNoID0gImM2ZDJlYTQ3YThmNDU2ZDg4N2FkYTBjZmI3MThmZjJhIjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItZmUtbnh0MjAwMi5mdyI7CisgICAgbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKyAgICAKKyAgICB3Z2V0ZmlsZSgkc291cmNlZmlsZSwgJHVybCk7CisgICAgdW56aXAoJHNvdXJjZWZpbGUsICR0bXBkaXIpOworICAgIHZlcmlmeSgiJHRtcGRpci9Ta3lORVRVLnN5cyIsICRoYXNoKTsKKyAgICBleHRyYWN0KCIkdG1wZGlyL1NreU5FVFUuc3lzIiwgMzc1ODMyLCA1OTA4LCAkb3V0ZmlsZSk7CisKKyAgICAkb3V0ZmlsZTsKK30KKworc3ViIG9yNTEyMTEgeworICAgIG15ICRmd2ZpbGUgPSAiZHZiLWZlLW9yNTEyMTEuZnciOworICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8kZndmaWxlIjsKKyAgICBteSAkaGFzaCA9ICJkODMwOTQ5Yzc3MWEyODk1MDViZjllYWZjMjI1ZDQ5MSI7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkZndmaWxlLCAkdXJsKTsKKyAgICB2ZXJpZnkoJGZ3ZmlsZSwgJGhhc2gpOworCisgICAgJGZ3ZmlsZTsKK30KKworc3ViIG9yNTExMzJfcWFtIHsKKyAgICBteSAkZndmaWxlID0gImR2Yi1mZS1vcjUxMTMyLXFhbS5mdyI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlLyRmd2ZpbGUiOworICAgIG15ICRoYXNoID0gIjc3MDJlODkzODYxMmRlNDZjY2FkZmU5YjQxM2NiM2I1IjsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRmd2ZpbGUsICR1cmwpOworICAgIHZlcmlmeSgkZndmaWxlLCAkaGFzaCk7CisKKyAgICAkZndmaWxlOworfQorCitzdWIgb3I1MTEzMl92c2IgeworICAgIG15ICRmd2ZpbGUgPSAiZHZiLWZlLW9yNTExMzItdnNiLmZ3IjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvJGZ3ZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiYzE2MjA4ZTAyZjM2ZmM0MzlhNTU3YWQ0YzYxMzM2NGEiOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJGZ3ZmlsZSwgJHVybCk7CisgICAgdmVyaWZ5KCRmd2ZpbGUsICRoYXNoKTsKKworICAgICRmd2ZpbGU7Cit9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFV0aWxpdGllcworCitzdWIgY2hlY2tzdGFuZGFyZCB7CisgICAgaWYgKHN5c3RlbSgid2hpY2ggdW56aXAgPiAvZGV2L251bGwgMj4mMSIpKSB7CisJZGllICJUaGlzIGZpcm13YXJlIHJlcXVpcmVzIHRoZSB1bnppcCBjb21tYW5kIC0gc2VlIGZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvVW5aaXAuaHRtbFxuIjsKKyAgICB9CisgICAgaWYgKHN5c3RlbSgid2hpY2ggbWQ1c3VtID4gL2Rldi9udWxsIDI+JjEiKSkgeworCWRpZSAiVGhpcyBmaXJtd2FyZSByZXF1aXJlcyB0aGUgbWQ1c3VtIGNvbW1hbmQgLSBzZWUgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy9cbiI7CisgICAgfQorICAgIGlmIChzeXN0ZW0oIndoaWNoIHdnZXQgPiAvZGV2L251bGwgMj4mMSIpKSB7CisJZGllICJUaGlzIGZpcm13YXJlIHJlcXVpcmVzIHRoZSB3Z2V0IGNvbW1hbmQgLSBzZWUgaHR0cDovL3dnZXQuc3Vuc2l0ZS5kay9cbiI7CisgICAgfQorfQorCitzdWIgY2hlY2t1bnNoaWVsZCB7CisgICAgaWYgKHN5c3RlbSgid2hpY2ggdW5zaGllbGQgPiAvZGV2L251bGwgMj4mMSIpKSB7CisJZGllICJUaGlzIGZpcm13YXJlIHJlcXVpcmVzIHRoZSB1bnNoaWVsZCBjb21tYW5kIC0gc2VlIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc3luY2UvXG4iOworICAgIH0KK30KKworc3ViIHdnZXRmaWxlIHsKKyAgICBteSAoJHNvdXJjZWZpbGUsICR1cmwpID0gQF87CisKKyAgICBpZiAoISAtZiAkc291cmNlZmlsZSkgeworCXN5c3RlbSgid2dldCAtTyBcIiRzb3VyY2VmaWxlXCIgXCIkdXJsXCIiKSBhbmQgZGllICJ3Z2V0IGZhaWxlZCAtIHVuYWJsZSB0byBkb3dubG9hZCBmaXJtd2FyZSI7CisgICAgfQorfQorCitzdWIgdW56aXAgeworICAgIG15ICgkc291cmNlZmlsZSwgJHRvZGlyKSA9IEBfOworCisgICAgJHN0YXR1cyA9IHN5c3RlbSgidW56aXAgLXEgLW8gLWQgXCIkdG9kaXJcIiBcIiRzb3VyY2VmaWxlXCIgMj4vZGV2L251bGwiICk7CisgICAgaWYgKCgoJHN0YXR1cyA+PiA4KSA+IDIpIHx8ICgoJHN0YXR1cyAmIDB4ZmYpICE9IDApKSB7CisJZGllICgidW56aXAgZmFpbGVkIC0gdW5hYmxlIHRvIGV4dHJhY3QgZmlybXdhcmUiKTsKKyAgICB9Cit9CisKK3N1YiB1bnNoaWVsZCB7CisgICAgbXkgKCRzb3VyY2VmaWxlLCAkdG9kaXIpID0gQF87CisKKyAgICBzeXN0ZW0oInVuc2hpZWxkIHggLWQgXCIkdG9kaXJcIiBcIiRzb3VyY2VmaWxlXCIgPiAvZGV2L251bGwiICkgYW5kIGRpZSAoInVuc2hpZWxkIGZhaWxlZCAtIHVuYWJsZSB0byBleHRyYWN0IGZpcm13YXJlIik7Cit9CisKK3N1YiB2ZXJpZnkgeworICAgIG15ICgkZmlsZW5hbWUsICRoYXNoKSA9IEBfOworICAgIG15ICgkdGVzdGhhc2gpOworCisgICAgb3BlbihDTUQsICJtZDVzdW0gXCIkZmlsZW5hbWVcInwiKTsKKyAgICAkdGVzdGhhc2ggPSA8Q01EPjsKKyAgICAkdGVzdGhhc2ggPX4gLyhbYS16QS1aMC05XSopLzsKKyAgICAkdGVzdGhhc2ggPSAkMTsKKyAgICBjbG9zZSBDTUQ7CisgICAgZGllICJIYXNoIG9mIGV4dHJhY3RlZCBmaWxlIGRvZXMgbm90IG1hdGNoIVxuIiBpZiAoJHRlc3RoYXNoIG5lICRoYXNoKTsKK30KKworc3ViIGNvcHkgeworICAgIG15ICgkZnJvbSwgJHRvKSA9IEBfOworCisgICAgc3lzdGVtKCJjcCAtZiBcIiRmcm9tXCIgXCIkdG9cIiIpIGFuZCBkaWUgKCJjcCBmYWlsZWQiKTsKK30KKworc3ViIGV4dHJhY3QgeworICAgIG15ICgkaW5maWxlLCAkb2Zmc2V0LCAkbGVuZ3RoLCAkb3V0ZmlsZSkgPSBAXzsKKyAgICBteSAoJGNodW5rbGVuZ3RoLCAkYnVmLCAkcmNvdW50KTsKKworICAgIG9wZW4gSU5GSUxFLCAiPCRpbmZpbGUiOworICAgIG9wZW4gT1VURklMRSwgIj4kb3V0ZmlsZSI7CisgICAgc3lzc2VlayhJTkZJTEUsICRvZmZzZXQsIFNFRUtfU0VUKTsKKyAgICB3aGlsZSgkbGVuZ3RoID4gMCkgeworCSMgQ2FsYyBjaHVuayBzaXplCisJJGNodW5rbGVuZ3RoID0gMjA0ODsKKwkkY2h1bmtsZW5ndGggPSAkbGVuZ3RoIGlmICgkY2h1bmtsZW5ndGggPiAkbGVuZ3RoKTsKKworCSRyY291bnQgPSBzeXNyZWFkKElORklMRSwgJGJ1ZiwgJGNodW5rbGVuZ3RoKTsKKwlkaWUgIlJhbiBvdXQgb2YgZGF0YVxuIiBpZiAoJHJjb3VudCAhPSAkY2h1bmtsZW5ndGgpOworCXN5c3dyaXRlKE9VVEZJTEUsICRidWYpOworCSRsZW5ndGggLT0gJHJjb3VudDsKKyAgICB9CisgICAgY2xvc2UgSU5GSUxFOworICAgIGNsb3NlIE9VVEZJTEU7Cit9CisKK3N1YiBhcHBlbmRmaWxlIHsKKyAgICBteSAoJEZILCAkaW5maWxlKSA9IEBfOworICAgIG15ICgkYnVmKTsKKworICAgIG9wZW4gSU5GSUxFLCAiPCRpbmZpbGUiOworICAgIHdoaWxlKDEpIHsKKwkkcmNvdW50ID0gc3lzcmVhZChJTkZJTEUsICRidWYsIDIwNDgpOworCWxhc3QgaWYgKCRyY291bnQgPT0gMCk7CisJcHJpbnQgJEZIICRidWY7CisgICAgfQorICAgIGNsb3NlKElORklMRSk7Cit9CisKK3N1YiBzeW50YXgoKSB7CisgICAgcHJpbnQgU1RERVJSICJzeW50YXg6IGdldF9kdmJfZmlybXdhcmUgPGNvbXBvbmVudD5cbiI7CisgICAgcHJpbnQgU1RERVJSICJTdXBwb3J0ZWQgY29tcG9uZW50czpcbiI7CisgICAgZm9yKCRpPTA7ICRpIDwgc2NhbGFyKEBjb21wb25lbnRzKTsgJGkrKykgeworCXByaW50IFNUREVSUiAiXHQiIC4gJGNvbXBvbmVudHNbJGldIC4gIlxuIjsKKyAgICB9CisgICAgZXhpdCgxKTsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL3JlYWRtZS50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NGM5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9yZWFkbWUudHh0CkBAIC0wLDAgKzEsNTIgQEAKK0xpbnV4IERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0IChEVkIpIHN1YnN5c3RlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBtYWluIGRldmVsb3BtZW50IHNpdGUgYW5kIENWUyByZXBvc2l0b3J5IGZvciB0aGVzZQorZHJpdmVycyBpcyBodHRwOi8vbGludXh0di5vcmcvLgorCitUaGUgZGV2ZWxvcGVyIG1haWxpbmcgbGlzdCBsaW51eC1kdmIgaXMgYWxzbyBob3N0ZWQgdGhlcmUsCitzZWUgaHR0cDovL2xpbnV4dHYub3JnL2xpc3RzLnBocC4gUGxlYXNlIGNoZWNrCit0aGUgYXJjaGl2ZSBodHRwOi8vbGludXh0di5vcmcvcGlwZXJtYWlsL2xpbnV4LWR2Yi8KK2FuZCB0aGUgV2lraSBodHRwOi8vbGludXh0di5vcmcvd2lraS8KK2JlZm9yZSBhc2tpbmcgbmV3YmllIHF1ZXN0aW9ucyBvbiB0aGUgbGlzdC4KKworQVBJIGRvY3VtZW50YXRpb24sIHV0aWxpdGllcyBhbmQgdGVzdC9leGFtcGxlIHByb2dyYW1zCithcmUgYXZhaWxhYmxlIGFzIHBhcnQgb2YgdGhlIG9sZCBkcml2ZXIgcGFja2FnZSBmb3IgTGludXggMi40CisobGludXh0di1kdmItMS4wLngudGFyLmd6KSwgb3IgZnJvbSBDVlMgKG1vZHVsZSBEVkIpLgorV2UgcGxhbiB0byBzcGxpdCB0aGlzIGludG8gc2VwYXJhdGUgcGFja2FnZXMsIGJ1dCBpdCdzIG5vdAorYmVlbiBkb25lIHlldC4KKworaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy8KKworV2hhdCdzIGluc2lkZSB0aGlzIGRpcmVjdG9yeToKKworImNhcmRzLnR4dCIgCitjb250YWlucyBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGhhcmR3YXJlLgorCisiY29udHJpYnV0b3JzLnR4dCIKK2lzIHRoZSB3aG8taXMtd2hvIG9mIERWQiBkZXZlbG9wbWVudAorCisiZmFxLnR4dCIKK2NvbnRhaW5zIGZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zIGFuZCB0aGVpciBhbnN3ZXJzLgorCisiZ2V0X2R2Yl9maXJtd2FyZSIKK3NjcmlwdCB0byBkb3dubG9hZCBhbmQgZXh0cmFjdCBmaXJtd2FyZSBmb3IgdGhvc2UgZGV2aWNlcwordGhhdCByZXF1aXJlIGl0LgorCisidHR1c2ItZGVjLnR4dCIKK2NvbnRhaW5zIGRldGFpbGVkIGluZm9ybWF0aW9ucyBhYm91dCB0aGUKK1RUIERFQzIwMDAvREVDMzAwMCBVU0IgRFZCIGhhcmR3YXJlLgorCisiYnQ4eHgudHh0IiAKK2NvbnRhaW5zIGRldGFpbGVkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIHRoZQordmFyaW91cyBidDh4eCBiYXNlZCAiYnVkZ2V0IiBEVkIgY2FyZHMKKyhOZWJ1bGEsIFBpbm5hY2xlIFBDVFYsIFR3aW5oYW4gRFNUKQorCisiUkVBRE1FLmRpYnVzYiIKK2NvbnRhaW5zIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGFkYXB0ZXJzCitiYXNlZCBvbiBEaUJjb20gcmVmZXJlbmNlIGRlc2lnbi4KKworInVkZXYudHh0IgoraG93IHRvIGdldCBEVkIgYW5kIHVkZXYgdXAgYW5kIHJ1bm5pbmcuCisKK0dvb2QgbHVjayBhbmQgaGF2ZSBmdW4hCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi90dHVzYi1kZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvdHR1c2ItZGVjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzFlOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvdHR1c2ItZGVjLnR4dApAQCAtMCwwICsxLDQ0IEBACitUZWNobm9UcmVuZC9IYXVwcGF1Z2UgREVDIFVTQiBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitEcml2ZXIgU3RhdHVzCistLS0tLS0tLS0tLS0tCisKK1N1cHBvcnRlZDoKKwlERUMyMDAwLXQKKwlERUMyNDUwLXQKKwlERUMzMDAwLXMKKwlMaW51eCBLZXJuZWxzIDIuNCBhbmQgMi42CisJVmlkZW8gU3RyZWFtaW5nCisJQXVkaW8gU3RyZWFtaW5nCisJU2VjdGlvbiBGaWx0ZXJzCisJQ2hhbm5lbCBaYXBwaW5nCisJSG90cGx1ZyBmaXJtd2FyZSBsb2FkZXIgdW5kZXIgMi42IGtlcm5lbHMKKworVG8gRG86CisJVHVuZXIgc3RhdHVzIGluZm9ybWF0aW9uCisJRFZCIG5ldHdvcmsgaW50ZXJmYWNlCisJU3RyZWFtaW5nIHZpZGVvIFBDLT5ERUMKKwlDb25heCBzdXBwb3J0IGZvciAyNDUwLXQKKworR2V0dGluZyB0aGUgRmlybXdhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBkb3dubG9hZCB0aGUgZmlybXdhcmUsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorImdldF9kdmJfZmlybXdhcmUgZGVjMjAwMHQiCisiZ2V0X2R2Yl9maXJtd2FyZSBkZWMyNTQwdCIKKyJnZXRfZHZiX2Zpcm13YXJlIGRlYzMwMDBzIgorCisKK0NvbXBpbGF0aW9uIE5vdGVzIGZvciAyLjQga2VybmVscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGb3IgMi40IGtlcm5lbHMgdGhlIGZpcm13YXJlIGZvciB0aGUgREVDcyBpcyBjb21waWxlZCBpbnRvIHRoZSBkcml2ZXIgaXRzZWxmLgorCitDb3B5IHRoZSB0aHJlZSBmaWxlcyBkb3dubG9hZGVkIGFib3ZlIGludG8gdGhlIGJ1aWxkLTIuNCBkaXJlY3RvcnkuCisKKworSG90cGx1ZyBGaXJtd2FyZSBMb2FkaW5nIGZvciAyLjYga2VybmVscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRm9yIDIuNiBrZXJuZWxzIHRoZSBmaXJtd2FyZSBpcyBsb2FkZWQgYXQgdGhlIHBvaW50IHRoYXQgdGhlIGRyaXZlciBtb2R1bGUgaXMKK2xvYWRlZC4gIFNlZSBsaW51eC9Eb2N1bWVudGF0aW9uL2R2Yi9maXJtd2FyZS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0NvcHkgdGhlIHRocmVlIGZpbGVzIGRvd25sb2FkZWQgYWJvdmUgaW50byB0aGUgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZSBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi91ZGV2LnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL3VkZXYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZWUyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi91ZGV2LnR4dApAQCAtMCwwICsxLDQ2IEBACitUaGUgRFZCIHN1YnN5c3RlbSBjdXJyZW50bHkgcmVnaXN0ZXJzIHRvIHRoZSBzeXNmcyBzdWJzeXN0ZW0gdXNpbmcgdGhlCisiY2xhc3Nfc2ltcGxlIiBpbnRlcmZhY2UuCisKK1RoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBiYXNpYyBpbmZvcm1hdGlvbnMgbGlrZSBtb2R1bGUgbG9hZGluZyBwYXJhbWV0ZXJzCithcmUgcHJlc2VudGVkIHRocm91Z2ggc3lzZnMuIE90aGVyIHRoaW5ncyB0aGF0IG1pZ2h0IGJlIGludGVyZXN0aW5nIGFyZQorY3VycmVudGx5ICpub3QqIGF2YWlsYWJsZS4KKworTmV2ZXJ0aGVsZXNzIGl0J3Mgbm93IHBvc3NpYmxlIHRvIGFkZCBwcm9wZXIgdWRldiBydWxlcyBzbyB0aGF0IHRoZQorRFZCIGRldmljZSBub2RlcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LgorCitXZSBhc3N1bWUgdGhhdCB5b3UgaGF2ZSB1ZGV2IGFscmVhZHkgdXAgYW5kIHJ1bm5pbmcgYW5kIHRoYXQgaGF2ZSBiZWVuCitjcmVhdGluZyB0aGUgRFZCIGRldmljZSBub2RlcyBtYW51YWxseSB1cCB0byBub3cgZHVlIHRvIHRoZSBtaXNzaW5nIHN5c2ZzCitzdXBwb3J0LgorCiswLiBEb24ndCBmb3JnZXQgdG8gZGlzYWJsZSB5b3VyIGN1cnJlbnQgbWV0aG9kIG9mIGNyZWF0aW5nIHRoZQorZGV2aWNlIG5vZGVzIG1hbnVhbGx5LgorCisxLiBVbmZvcnR1bmF0ZWx5LCB5b3UnbGwgbmVlZCBhIGhlbHBlciBzY3JpcHQgdG8gdHJhbnNmb3JtIHRoZSBrZXJuZWwKK3N5c2ZzIGRldmljZSBuYW1lIGludG8gdGhlIHdlbGwga25vd24gZHZiIGFkYXB0ZXIgLyBkZXZpY2UgbmFtaW5nIHNjaGVtZS4KK1RoZSBzY3JpcHQgc2hvdWxkIGJlIGNhbGxlZCAiZHZiLnNoIiBhbmQgc2hvdWxkIGJlIHBsYWNlZCBpbnRvIGEgc2NyaXB0CitkaXIgd2hlcmUgdWRldiBjYW4gZXhlY3V0ZSBpdCwgbW9zdCBsaWtlbHkgL2V0Yy91ZGV2L3NjcmlwdHMvCisKK1NvLCBjcmVhdGUgYSBuZXcgZmlsZSAvZXRjL3VkZXYvc2NyaXB0cy9kdmIuc2ggYW5kIGFkZCB0aGUgZm9sbG93aW5nOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tc2NobmlwcC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisvYmluL2VjaG8gJDEgfCAvYmluL3NlZCAtZSAncyxkdmJcKFswLTldXClcLlwoW14wLTldKlwpXChbMC05XVwpLGR2Yi9hZGFwdGVyXDEvXDJcMywnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1zY2huaXBwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Rvbid0IGZvcmdldCB0byBtYWtlIHRoZSBzY3JpcHQgZXhlY3V0YWJsZSB3aXRoICJjaG1vZCIuCisKKzEuIFlvdSBuZWVkIHRvIGNyZWF0ZSBhIHByb3BlciB1ZGV2IHJ1bGUgdGhhdCB3aWxsIGNyZWF0ZSB0aGUgZGV2aWNlIG5vZGVzCitsaWtlIHlvdSBrbm93IHRoZW0uIEFsbCByZWFsIGRpc3RyaWJ1dGlvbnMgb3V0IHRoZXJlIHNjYW4gdGhlIC9ldGMvdWRldi9ydWxlcy5kCitkaXJlY3RvcnkgZm9yIHJ1bGUgZmlsZXMuIFRoZSBtYWluIHVkZXYgY29uZmlndXJhdGlvbiBmaWxlIC9ldGMvdWRldi91ZGV2LmNvbmYKK3dpbGwgdGVsbCB5b3UgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgcnVsZXMgYXJlLCBtb3N0IGxpa2VseSBpdCdzIC9ldGMvdWRldi9ydWxlcy5kLworCitDcmVhdGUgYSBuZXcgcnVsZSBmaWxlIGluIHRoYXQgZGlyZWN0b3J5IGNhbGxlZCAiZHZiLnJ1bGUiIGFuZCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tc2NobmlwcC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorS0VSTkVMPSJkdmIqIiwgUFJPR1JBTT0iL2V0Yy91ZGV2L3NjcmlwdHMvZHZiLnNoICVrIiwgTkFNRT0iJWMiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1zY2huaXBwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IG1vcmUgY29udHJvbCBvdmVyIHRoZSBkZXZpY2Ugbm9kZXMgKGZvciBleGFtcGxlIGEgc3BlY2lhbCBncm91cCBtZW1iZXJzaGlwKQoraGF2ZSBhIGxvb2sgYXQgIm1hbiB1ZGV2Ii4KKworRm9yIGV2ZXJ5IGRldmljZSB0aGF0IHJlZ2lzdGVycyB0byB0aGUgc3lzZnMgc3Vic3lzdGVtIHdpdGggYSAiZHZiIiBwcmVmaXgsCit0aGUgaGVscGVyIHNjcmlwdCAvZXRjL3VkZXYvc2NyaXB0cy9kdmIuc2ggaXMgaW52b2tlZCwgd2hpY2ggd2lsbCB0aGVuCitjcmVhdGUgdGhlIHByb3BlciBkZXZpY2Ugbm9kZSBpbiB5b3VyIC9kZXYvIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWFybHktdXNlcnNwYWNlL1JFQURNRSBiL0RvY3VtZW50YXRpb24vZWFybHktdXNlcnNwYWNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzBhODhlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9lYXJseS11c2Vyc3BhY2UvUkVBRE1FCkBAIC0wLDAgKzEsMTUyIEBACitFYXJseSB1c2Vyc3BhY2Ugc3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT0KKworTGFzdCB1cGRhdGU6IDIwMDQtMTItMjAgdGxoCisKKworIkVhcmx5IHVzZXJzcGFjZSIgaXMgYSBzZXQgb2YgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB0aGF0IHByb3ZpZGUKK3ZhcmlvdXMgcGllY2VzIG9mIGZ1bmN0aW9uYWxpdHkgdGhhdCBhcmUgaW1wb3J0YW50IGVub3VnaCB0byBiZQorYXZhaWxhYmxlIHdoaWxlIGEgTGludXgga2VybmVsIGlzIGNvbWluZyB1cCwgYnV0IHRoYXQgZG9uJ3QgbmVlZCB0byBiZQorcnVuIGluc2lkZSB0aGUga2VybmVsIGl0c2VsZi4KKworSXQgY29uc2lzdHMgb2Ygc2V2ZXJhbCBtYWpvciBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnRzOgorCistIGdlbl9pbml0X2NwaW8sIGEgcHJvZ3JhbSB0aGF0IGJ1aWxkcyBhIGNwaW8tZm9ybWF0IGFyY2hpdmUKKyAgY29udGFpbmluZyBhIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4gIFRoaXMgYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBhbmQKKyAgdGhlIGNvbXByZXNzZWQgaW1hZ2UgaXMgbGlua2VkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4KKy0gaW5pdHJhbWZzLCBhIGNodW5rIG9mIGNvZGUgdGhhdCB1bnBhY2tzIHRoZSBjb21wcmVzc2VkIGNwaW8gaW1hZ2UKKyAgbWlkd2F5IHRocm91Z2ggdGhlIGtlcm5lbCBib290IHByb2Nlc3MuCistIGtsaWJjLCBhIHVzZXJzcGFjZSBDIGxpYnJhcnksIGN1cnJlbnRseSBwYWNrYWdlZCBzZXBhcmF0ZWx5LCB0aGF0IGlzCisgIG9wdGltaXplZCBmb3IgY29ycmVjdG5lc3MgYW5kIHNtYWxsIHNpemUuCisKK1RoZSBjcGlvIGZpbGUgZm9ybWF0IHVzZWQgYnkgaW5pdHJhbWZzIGlzIHRoZSAibmV3YyIgKGFrYSAiY3BpbyAtYyIpCitmb3JtYXQsIGFuZCBpcyBkb2N1bWVudGVkIGluIHRoZSBmaWxlICJidWZmZXItZm9ybWF0LnR4dCIuICBUaGVyZSBhcmUKK3R3byB3YXlzIHRvIGFkZCBhbiBlYXJseSB1c2Vyc3BhY2UgaW1hZ2U6IHNwZWNpZnkgYW4gZXhpc3RpbmcgY3BpbworYXJjaGl2ZSB0byBiZSB1c2VkIGFzIHRoZSBpbWFnZSBvciBoYXZlIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyBidWlsZAordGhlIGltYWdlIGZyb20gc3BlY2lmaWNhdGlvbnMuCisKK0NQSU8gQVJDSElWRSBtZXRob2QKKworWW91IGNhbiBjcmVhdGUgYSBjcGlvIGFyY2hpdmUgdGhhdCBjb250YWlucyB0aGUgZWFybHkgdXNlcnNwYWNlIGltYWdlLgorWW91cmUgY3BpbyBhcmNoaXZlIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UgYW5kIGl0Cit3aWxsIGJlIHVzZWQgZGlyZWN0bHkuICBPbmx5IGEgc2luZ2xlIGNwaW8gZmlsZSBtYXkgYmUgc3BlY2lmaWVkIGluCitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSBhbmQgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzIGFyZSBub3QgYWxsb3dlZCBpbgorY29tYmluYXRpb24gd2l0aCBhIGNwaW8gYXJjaGl2ZS4KKworSU1BR0UgQlVJTERJTkcgbWV0aG9kCisKK1RoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyBjYW4gYWxzbyBidWlsZCBhbiBlYXJseSB1c2Vyc3BhY2UgaW1hZ2UgZnJvbQorc291cmNlIHBhcnRzIHJhdGhlciB0aGFuIHN1cHBseWluZyBhIGNwaW8gYXJjaGl2ZS4gIFRoaXMgbWV0aG9kIHByb3ZpZGVzCithIHdheSB0byBjcmVhdGUgaW1hZ2VzIHdpdGggcm9vdC1vd25lZCBmaWxlcyBldmVuIHRob3VnaCB0aGUgaW1hZ2Ugd2FzCitidWlsdCBieSBhbiB1bnByaXZpbGVnZWQgdXNlci4KKworVGhlIGltYWdlIGlzIHNwZWNpZmllZCBhcyBvbmUgb3IgbW9yZSBzb3VyY2VzIGluCitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRS4gIFNvdXJjZXMgY2FuIGJlIGVpdGhlciBkaXJlY3RvcmllcyBvciBmaWxlcyAtCitjcGlvIGFyY2hpdmVzIGFyZSAqbm90KiBhbGxvd2VkIHdoZW4gYnVpbGRpbmcgZnJvbSBzb3VyY2VzLgorCitBIHNvdXJjZSBkaXJlY3Rvcnkgd2lsbCBoYXZlIGl0IGFuZCBhbGwgb2YgaXQncyBjb250ZW50cyBwYWNrYWdlZC4gIFRoZQorc3BlY2lmaWVkIGRpcmVjdG9yeSBuYW1lIHdpbGwgYmUgbWFwcGVkIHRvICcvJy4gIFdoZW4gcGFja2FnaW5nIGEKK2RpcmVjdG9yeSwgbGltaXRlZCB1c2VyIGFuZCBncm91cCBJRCB0cmFuc2xhdGlvbiBjYW4gYmUgcGVyZm9ybWVkLgorSU5JVFJBTUZTX1JPT1RfVUlEIGNhbiBiZSBzZXQgdG8gYSB1c2VyIElEIHRoYXQgbmVlZHMgdG8gYmUgbWFwcGVkIHRvCit1c2VyIHJvb3QgKDApLiAgSU5JVFJBTUZTX1JPT1RfR0lEIGNhbiBiZSBzZXQgdG8gYSBncm91cCBJRCB0aGF0IG5lZWRzCit0byBiZSBtYXBwZWQgdG8gZ3JvdXAgcm9vdCAoMCkuCisKK0Egc291cmNlIGZpbGUgbXVzdCBiZSBkaXJlY3RpdmVzIGluIHRoZSBmb3JtYXQgcmVxdWlyZWQgYnkgdGhlCit1c3IvZ2VuX2luaXRfY3BpbyB1dGlsaXR5IChydW4gJ3Vzci9nZW5faW5pdF9jcGlvIC0taGVscCcgdG8gZ2V0IHRoZQorZmlsZSBmb3JtYXQpLiAgVGhlIGRpcmVjdGl2ZXMgaW4gdGhlIGZpbGUgd2lsbCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8KK3Vzci9nZW5faW5pdF9jcGlvLgorCitXaGVuIGEgY29tYmluYXRpb24gb2YgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGFyZSBzcGVjaWZpZWQgdGhlbiB0aGUKK2luaXRyYW1mcyBpbWFnZSB3aWxsIGJlIGFuIGFnZ3JlZ2F0ZSBvZiBhbGwgb2YgdGhlbS4gIEluIHRoaXMgd2F5IGEgdXNlcgorY2FuIGNyZWF0ZSBhICdyb290LWltYWdlJyBkaXJlY3RvcnkgYW5kIGluc3RhbGwgYWxsIGZpbGVzIGludG8gaXQuCitCZWNhdXNlIGRldmljZS1zcGVjaWFsIGZpbGVzIGNhbm5vdCBiZSBjcmVhdGVkIGJ5IGEgdW5wcml2aWxlZ2VkIHVzZXIsCitzcGVjaWFsIGZpbGVzIGNhbiBiZSBsaXN0ZWQgaW4gYSAncm9vdC1maWxlcycgZmlsZS4gIEJvdGggJ3Jvb3QtaW1hZ2UnCithbmQgJ3Jvb3QtZmlsZXMnIGNhbiBiZSBsaXN0ZWQgaW4gQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UgYW5kIGEgY29tcGxldGUKK2Vhcmx5IHVzZXJzcGFjZSBpbWFnZSBjYW4gYmUgYnVpbHQgYnkgYW4gdW5wcml2aWxlZ2VkIHVzZXIuCisKK0FzIGEgdGVjaG5pY2FsIG5vdGUsIHdoZW4gZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGFyZSBzcGVjaWZpZWQsIHRoZQorZW50aXJlIENPTkZJR19JTklUUkFNRlNfU09VUkNFIGlzIHBhc3NlZCB0bworc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2guICBUaGlzIG1lYW5zIHRoYXQgQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UKK2NhbiByZWFsbHkgYmUgaW50ZXJwcmV0ZWQgYXMgYW55IGxlZ2FsIGFyZ3VtZW50IHRvCitnZW5faW5pdHJhbWZzX2xpc3Quc2guICBJZiBhIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgYXMgYW4gYXJndW1lbnQgdGhlbgordGhlIGNvbnRlbnRzIGFyZSBzY2FubmVkLCB1aWQvZ2lkIHRyYW5zbGF0aW9uIGlzIHBlcmZvcm1lZCwgYW5kCit1c3IvZ2VuX2luaXRfY3BpbyBmaWxlIGRpcmVjdGl2ZXMgYXJlIG91dHB1dC4gIElmIGEgZGlyZWN0b3J5IGlzCitzcGVjaWZpZWQgYXMgYW4gYXJ1Z2VtbnQgdG8gc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2ggdGhlbiB0aGUKK2NvbnRlbnRzIG9mIHRoZSBmaWxlIGFyZSBzaW1wbHkgY29waWVkIHRvIHRoZSBvdXRwdXQuICBBbGwgb2YgdGhlIG91dHB1dAorZGlyZWN0aXZlcyBmcm9tIGRpcmVjdG9yeSBzY2FubmluZyBhbmQgZmlsZSBjb250ZW50cyBjb3B5aW5nIGFyZQorcHJvY2Vzc2VkIGJ5IHVzci9nZW5faW5pdF9jcGlvLgorCitTZWUgYWxzbyAnc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2ggLWgnLgorCitXaGVyZSdzIHRoaXMgYWxsIGxlYWRpbmc/Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBrbGliYyBkaXN0cmlidXRpb24gY29udGFpbnMgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHNvZnR3YXJlIHRvIG1ha2UKK2Vhcmx5IHVzZXJzcGFjZSB1c2VmdWwuICBUaGUga2xpYmMgZGlzdHJpYnV0aW9uIGlzIGN1cnJlbnRseQorbWFpbnRhaW5lZCBzZXBhcmF0ZWx5IGZyb20gdGhlIGtlcm5lbCwgYnV0IHRoaXMgbWF5IGNoYW5nZSBlYXJseSBpbgordGhlIDIuNyBlcmEgKGl0IG1pc3NlZCB0aGUgYm9hdCBmb3IgMi41KS4KKworWW91IGNhbiBvYnRhaW4gc29tZXdoYXQgaW5mcmVxdWVudCBzbmFwc2hvdHMgb2Yga2xpYmMgZnJvbQorZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2xpYnMva2xpYmMvCisKK0ZvciBhY3RpdmUgdXNlcnMsIHlvdSBhcmUgYmV0dGVyIG9mZiB1c2luZyB0aGUga2xpYmMgQml0S2VlcGVyCityZXBvc2l0b3JpZXMsIGF0IGh0dHA6Ly9rbGliYy5ia2JpdHMubmV0LworCitUaGUgc3RhbmRhbG9uZSBrbGliYyBkaXN0cmlidXRpb24gY3VycmVudGx5IHByb3ZpZGVzIHRocmVlIGNvbXBvbmVudHMsCitpbiBhZGRpdGlvbiB0byB0aGUga2xpYmMgbGlicmFyeToKKworLSBpcGNvbmZpZywgYSBwcm9ncmFtIHRoYXQgY29uZmlndXJlcyBuZXR3b3JrIGludGVyZmFjZXMuICBJdCBjYW4KKyAgY29uZmlndXJlIHRoZW0gc3RhdGljYWxseSwgb3IgdXNlIERIQ1AgdG8gb2J0YWluIGluZm9ybWF0aW9uCisgIGR5bmFtaWNhbGx5IChha2EgIklQIGF1dG9jb25maWd1cmF0aW9uIikuCistIG5mc21vdW50LCBhIHByb2dyYW0gdGhhdCBjYW4gbW91bnQgYW4gTkZTIGZpbGVzeXN0ZW0uCistIGtpbml0LCB0aGUgImdsdWUiIHRoYXQgdXNlcyBpcGNvbmZpZyBhbmQgbmZzbW91bnQgdG8gcmVwbGFjZSB0aGUgb2xkCisgIHN1cHBvcnQgZm9yIElQIGF1dG9jb25maWcsIG1vdW50IGEgZmlsZXN5c3RlbSBvdmVyIE5GUywgYW5kIGNvbnRpbnVlCisgIHN5c3RlbSBib290IHVzaW5nIHRoYXQgZmlsZXN5c3RlbSBhcyByb290LgorCitraW5pdCBpcyBidWlsdCBhcyBhIHNpbmdsZSBzdGF0aWNhbGx5IGxpbmtlZCBiaW5hcnkgdG8gc2F2ZSBzcGFjZS4KKworRXZlbnR1YWxseSwgc2V2ZXJhbCBtb3JlIGNodW5rcyBvZiBrZXJuZWwgZnVuY3Rpb25hbGl0eSB3aWxsIGhvcGVmdWxseQorbW92ZSB0byBlYXJseSB1c2Vyc3BhY2U6CisKKy0gQWxtb3N0IGFsbCBvZiBpbml0L2RvX21vdW50cyogKHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBpcyBhbHJlYWR5IGluCisgIHBsYWNlKQorLSBBQ1BJIHRhYmxlIHBhcnNpbmcKKy0gSW5zZXJ0IHVud2llbGR5IHN1YnN5c3RlbSB0aGF0IGRvZXNuJ3QgcmVhbGx5IG5lZWQgdG8gYmUgaW4ga2VybmVsCisgIHNwYWNlIGhlcmUKKworSWYga2luaXQgZG9lc24ndCBtZWV0IHlvdXIgY3VycmVudCBuZWVkcyBhbmQgeW91J3ZlIGdvdCBieXRlcyB0byBidXJuLAordGhlIGtsaWJjIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIHNtYWxsIEJvdXJuZS1jb21wYXRpYmxlIHNoZWxsIChhc2gpCithbmQgYSBudW1iZXIgb2Ygb3RoZXIgdXRpbGl0aWVzLCBzbyB5b3UgY2FuIHJlcGxhY2Uga2luaXQgYW5kIGJ1aWxkCitjdXN0b20gaW5pdHJhbWZzIGltYWdlcyB0aGF0IG1lZXQgeW91ciBuZWVkcyBleGFjdGx5LgorCitGb3IgcXVlc3Rpb25zIGFuZCBoZWxwLCB5b3UgY2FuIHNpZ24gdXAgZm9yIHRoZSBlYXJseSB1c2Vyc3BhY2UKK21haWxpbmcgbGlzdCBhdCBodHRwOi8vd3d3Lnp5dG9yLmNvbS9tYWlsbWFuL2xpc3RpbmZvL2tsaWJjCisKK0hvdyBkb2VzIGl0IHdvcms/Cis9PT09PT09PT09PT09PT09PQorCitUaGUga2VybmVsIGhhcyBjdXJyZW50bHkgMyB3YXlzIHRvIG1vdW50IHRoZSByb290IGZpbGVzeXN0ZW06CisKK2EpIGFsbCByZXF1aXJlZCBkZXZpY2UgYW5kIGZpbGVzeXN0ZW0gZHJpdmVycyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIG5vCisgICBpbml0cmQuICBpbml0L21haW4uYzppbml0KCkgd2lsbCBjYWxsIHByZXBhcmVfbmFtZXNwYWNlKCkgdG8gbW91bnQgdGhlCisgICBmaW5hbCByb290IGZpbGVzeXN0ZW0sIGJhc2VkIG9uIHRoZSByb290PSBvcHRpb24gYW5kIG9wdGlvbmFsIGluaXQ9IHRvIHJ1bgorICAgc29tZSBvdGhlciBpbml0IGJpbmFyeSB0aGFuIGxpc3RlZCBhdCB0aGUgZW5kIG9mIGluaXQvbWFpbi5jOmluaXQoKS4KKworYikgc29tZSBkZXZpY2UgYW5kIGZpbGVzeXN0ZW0gZHJpdmVycyBidWlsdCBhcyBtb2R1bGVzIGFuZCBzdG9yZWQgaW4gYW4KKyAgIGluaXRyZC4gIFRoZSBpbml0cmQgbXVzdCBjb250YWluIGEgYmluYXJ5ICcvbGludXhyYycgd2hpY2ggaXMgc3VwcG9zZWQgdG8KKyAgIGxvYWQgdGhlc2UgZHJpdmVyIG1vZHVsZXMuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG1vdW50IHRoZSBmaW5hbCByb290CisgICBmaWxlc3lzdGVtIHZpYSBsaW51eHJjIGFuZCB1c2UgdGhlIHBpdm90X3Jvb3Qgc3lzY2FsbC4gIFRoZSBpbml0cmQgaXMKKyAgIG1vdW50ZWQgYW5kIGV4ZWN1dGVkIHZpYSBwcmVwYXJlX25hbWVzcGFjZSgpLgorCitjKSB1c2luZyBpbml0cmFtZnMuICBUaGUgY2FsbCB0byBwcmVwYXJlX25hbWVzcGFjZSgpIG11c3QgYmUgc2tpcHBlZC4KKyAgIFRoaXMgbWVhbnMgdGhhdCBhIGJpbmFyeSBtdXN0IGRvIGFsbCB0aGUgd29yay4gIFNhaWQgYmluYXJ5IGNhbiBiZSBzdG9yZWQKKyAgIGludG8gaW5pdHJhbWZzIGVpdGhlciB2aWEgbW9kaWZ5aW5nIHVzci9nZW5faW5pdF9jcGlvLmMgb3IgdmlhIHRoZSBuZXcKKyAgIGluaXRyZCBmb3JtYXQsIGFuIGNwaW8gYXJjaGl2ZS4gIEl0IG11c3QgYmUgY2FsbGVkICIvaW5pdCIuICBUaGlzIGJpbmFyeQorICAgaXMgcmVzcG9uc2libGUgdG8gZG8gYWxsIHRoZSB0aGluZ3MgcHJlcGFyZV9uYW1lc3BhY2UoKSB3b3VsZCBkby4KKworICAgVG8gcmVtYWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgL2luaXQgYmluYXJ5IHdpbGwgb25seSBydW4gaWYgaXQKKyAgIGNvbWVzIHZpYSBhbiBpbml0cmFtZnMgY3BpbyBhcmNoaXZlLiAgSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsCisgICBpbml0L21haW4uYzppbml0KCkgd2lsbCBydW4gcHJlcGFyZV9uYW1lc3BhY2UoKSB0byBtb3VudCB0aGUgZmluYWwgcm9vdAorICAgYW5kIGV4ZWMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGluaXQgYmluYXJpZXMuCisKK0JyeWFuIE8nU3VsbGl2YW4gPGJvc0BzZXJwZW50aW5lLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWFybHktdXNlcnNwYWNlL2J1ZmZlci1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9lYXJseS11c2Vyc3BhY2UvYnVmZmVyLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmZDdmOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZWFybHktdXNlcnNwYWNlL2J1ZmZlci1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMTEyIEBACisJCSAgICAgICBpbml0cmFtZnMgYnVmZmVyIGZvcm1hdAorCQkgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgICAgQWwgVmlybywgSC4gUGV0ZXIgQW52aW4KKwkJICAgICAgTGFzdCByZXZpc2lvbjogMjAwMi0wMS0xMworCitTdGFydGluZyB3aXRoIGtlcm5lbCAyLjUueCwgdGhlIG9sZCAiaW5pdGlhbCByYW1kaXNrIiBwcm90b2NvbCBpcworZ2V0dGluZyB7cmVwbGFjZWQvY29tcGxlbWVudGVkfSB3aXRoIHRoZSBuZXcgImluaXRpYWwgcmFtZnMiCisoaW5pdHJhbWZzKSBwcm90b2NvbC4gIFRoZSBpbml0cmFtZnMgY29udGVudHMgaXMgcGFzc2VkIHVzaW5nIHRoZSBzYW1lCittZW1vcnkgYnVmZmVyIHByb3RvY29sIHVzZWQgYnkgdGhlIGluaXRyZCBwcm90b2NvbCwgYnV0IHRoZSBjb250ZW50cworaXMgZGlmZmVyZW50LiAgVGhlIGluaXRyYW1mcyBidWZmZXIgY29udGFpbnMgYW4gYXJjaGl2ZSB3aGljaCBpcworZXhwYW5kZWQgaW50byBhIHJhbWZzIGZpbGVzeXN0ZW07IHRoaXMgZG9jdW1lbnQgZGV0YWlscyB0aGUgZm9ybWF0IG9mCit0aGUgaW5pdHJhbWZzIGJ1ZmZlciBmb3JtYXQuCisKK1RoZSBpbml0cmFtZnMgYnVmZmVyIGZvcm1hdCBpcyBiYXNlZCBhcm91bmQgdGhlICJuZXdjIiBvciAiY3JjIiBDUElPCitmb3JtYXRzLCBhbmQgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgY3BpbygxKSB1dGlsaXR5LiAgVGhlIGNwaW8KK2FyY2hpdmUgY2FuIGJlIGNvbXByZXNzZWQgdXNpbmcgZ3ppcCgxKS4gIE9uZSB2YWxpZCB2ZXJzaW9uIG9mIGFuCitpbml0cmFtZnMgYnVmZmVyIGlzIHRodXMgYSBzaW5nbGUgLmNwaW8uZ3ogZmlsZS4KKworVGhlIGZ1bGwgZm9ybWF0IG9mIHRoZSBpbml0cmFtZnMgYnVmZmVyIGlzIGRlZmluZWQgYnkgdGhlIGZvbGxvd2luZworZ3JhbW1hciwgd2hlcmU6CisJKglpcyB1c2VkIHRvIGluZGljYXRlICIwIG9yIG1vcmUgb2NjdXJyZW5jZXMgb2YiCisJKHwpCWluZGljYXRlcyBhbHRlcm5hdGl2ZXMKKwkrCWluZGljYXRlcyBjb25jYXRlbmF0aW9uCisJR1pJUCgpCWluZGljYXRlcyB0aGUgZ3ppcCgxKSBvZiB0aGUgb3BlcmFuZAorCUFMR04obikJbWVhbnMgcGFkZGluZyB3aXRoIG51bGwgYnl0ZXMgdG8gYW4gbi1ieXRlIGJvdW5kYXJ5CisKKwlpbml0cmFtZnMgIDo9ICgiXDAiIHwgY3Bpb19hcmNoaXZlIHwgY3Bpb19nemlwX2FyY2hpdmUpKgorCisJY3Bpb19nemlwX2FyY2hpdmUgOj0gR1pJUChjcGlvX2FyY2hpdmUpCisKKwljcGlvX2FyY2hpdmUgOj0gY3Bpb19maWxlKiArICg8bm90aGluZz4gfCBjcGlvX3RyYWlsZXIpCisKKwljcGlvX2ZpbGUgOj0gQUxHTig0KSArIGNwaW9faGVhZGVyICsgZmlsZW5hbWUgKyAiXDAiICsgQUxHTig0KSArIGRhdGEKKworCWNwaW9fdHJhaWxlciA6PSBBTEdOKDQpICsgY3Bpb19oZWFkZXIgKyAiVFJBSUxFUiEhIVwwIiArIEFMR04oNCkKKworCitJbiBodW1hbiB0ZXJtcywgdGhlIGluaXRyYW1mcyBidWZmZXIgY29udGFpbnMgYSBjb2xsZWN0aW9uIG9mCitjb21wcmVzc2VkIGFuZC9vciB1bmNvbXByZXNzZWQgY3BpbyBhcmNoaXZlcyAoaW4gdGhlICJuZXdjIiBvciAiY3JjIgorZm9ybWF0cyk7IGFyYml0cmFyeSBhbW91bnRzIHplcm8gYnl0ZXMgKGZvciBwYWRkaW5nKSBjYW4gYmUgYWRkZWQKK2JldHdlZW4gbWVtYmVycy4KKworVGhlIGNwaW8gIlRSQUlMRVIhISEiIGVudHJ5IChjcGlvIGVuZC1vZi1hcmNoaXZlKSBpcyBvcHRpb25hbCwgYnV0IGlzCitub3QgaWdub3JlZDsgc2VlICJoYW5kbGluZyBvZiBoYXJkIGxpbmtzIiBiZWxvdy4KKworVGhlIHN0cnVjdHVyZSBvZiB0aGUgY3Bpb19oZWFkZXIgaXMgYXMgZm9sbG93cyAoYWxsIGZpZWxkcyBjb250YWluCitoZXhhZGVjaW1hbCBBU0NJSSBudW1iZXJzIGZ1bGx5IHBhZGRlZCB3aXRoICcwJyBvbiB0aGUgbGVmdCB0byB0aGUKK2Z1bGwgd2lkdGggb2YgdGhlIGZpZWxkLCBmb3IgZXhhbXBsZSwgdGhlIGludGVnZXIgNDc4MCBpcyByZXByZXNlbnRlZAorYnkgdGhlIEFTQ0lJIHN0cmluZyAiMDAwMDEyYWMiKToKKworRmllbGQgbmFtZSAgICBGaWVsZCBzaXplCSBNZWFuaW5nCitjX21hZ2ljCSAgICAgIDYgYnl0ZXMJCSBUaGUgc3RyaW5nICIwNzA3MDEiIG9yICIwNzA3MDIiCitjX2lubwkgICAgICA4IGJ5dGVzCQkgRmlsZSBpbm9kZSBudW1iZXIKK2NfbW9kZQkgICAgICA4IGJ5dGVzCQkgRmlsZSBtb2RlIGFuZCBwZXJtaXNzaW9ucworY191aWQJICAgICAgOCBieXRlcwkJIEZpbGUgdWlkCitjX2dpZAkgICAgICA4IGJ5dGVzCQkgRmlsZSBnaWQKK2NfbmxpbmsJICAgICAgOCBieXRlcwkJIE51bWJlciBvZiBsaW5rcworY19tdGltZQkgICAgICA4IGJ5dGVzCQkgTW9kaWZpY2F0aW9uIHRpbWUKK2NfZmlsZXNpemUgICAgOCBieXRlcwkJIFNpemUgb2YgZGF0YSBmaWVsZAorY19tYWoJICAgICAgOCBieXRlcwkJIE1ham9yIHBhcnQgb2YgZmlsZSBkZXZpY2UgbnVtYmVyCitjX21pbgkgICAgICA4IGJ5dGVzCQkgTWlub3IgcGFydCBvZiBmaWxlIGRldmljZSBudW1iZXIKK2Nfcm1hagkgICAgICA4IGJ5dGVzCQkgTWFqb3IgcGFydCBvZiBkZXZpY2Ugbm9kZSByZWZlcmVuY2UKK2Nfcm1pbgkgICAgICA4IGJ5dGVzCQkgTWlub3IgcGFydCBvZiBkZXZpY2Ugbm9kZSByZWZlcmVuY2UKK2NfbmFtZXNpemUgICAgOCBieXRlcwkJIExlbmd0aCBvZiBmaWxlbmFtZSwgaW5jbHVkaW5nIGZpbmFsIFwwCitjX2Noa3N1bSAgICAgIDggYnl0ZXMJCSBDaGVja3N1bSBvZiBkYXRhIGZpZWxkIGlmIGNfbWFnaWMgaXMgMDcwNzAyOworCQkJCSBvdGhlcndpc2UgemVybworCitUaGUgY19tb2RlIGZpZWxkIG1hdGNoZXMgdGhlIGNvbnRlbnRzIG9mIHN0X21vZGUgcmV0dXJuZWQgYnkgc3RhdCgyKQorb24gTGludXgsIGFuZCBlbmNvZGVzIHRoZSBmaWxlIHR5cGUgYW5kIGZpbGUgcGVybWlzc2lvbnMuCisKK1RoZSBjX2ZpbGVzaXplIHNob3VsZCBiZSB6ZXJvIGZvciBhbnkgZmlsZSB3aGljaCBpcyBub3QgYSByZWd1bGFyIGZpbGUKK29yIHN5bWxpbmsuCisKK1RoZSBjX2Noa3N1bSBmaWVsZCBjb250YWlucyBhIHNpbXBsZSAzMi1iaXQgdW5zaWduZWQgc3VtIG9mIGFsbCB0aGUKK2J5dGVzIGluIHRoZSBkYXRhIGZpZWxkLiAgY3BpbygxKSByZWZlcnMgdG8gdGhpcyBhcyAiY3JjIiwgd2hpY2ggaXMKK2NsZWFybHkgaW5jb3JyZWN0IChhIGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrIGlzIGEgZGlmZmVyZW50IGFuZAorc2lnbmlmaWNhbnRseSBzdHJvbmdlciBpbnRlZ3JpdHkgY2hlY2spLCBob3dldmVyLCB0aGlzIGlzIHRoZQorYWxnb3JpdGhtIHVzZWQuCisKK0lmIHRoZSBmaWxlbmFtZSBpcyAiVFJBSUxFUiEhISIgdGhpcyBpcyBhY3R1YWxseSBhbiBlbmQtb2YtYXJjaGl2ZQorbWFya2VyOyB0aGUgY19maWxlc2l6ZSBmb3IgYW4gZW5kLW9mLWFyY2hpdmUgbWFya2VyIG11c3QgYmUgemVyby4KKworCisqKiogSGFuZGxpbmcgb2YgaGFyZCBsaW5rcworCitXaGVuIGEgbm9uZGlyZWN0b3J5IHdpdGggY19ubGluayA+IDEgaXMgc2VlbiwgdGhlIChjX21haixjX21pbixjX2lubykKK3R1cGxlIGlzIGxvb2tlZCB1cCBpbiBhIHR1cGxlIGJ1ZmZlci4gIElmIG5vdCBmb3VuZCwgaXQgaXMgZW50ZXJlZCBpbgordGhlIHR1cGxlIGJ1ZmZlciBhbmQgdGhlIGVudHJ5IGlzIGNyZWF0ZWQgYXMgdXN1YWw7IGlmIGZvdW5kLCBhIGhhcmQKK2xpbmsgcmF0aGVyIHRoYW4gYSBzZWNvbmQgY29weSBvZiB0aGUgZmlsZSBpcyBjcmVhdGVkLiAgSXQgaXMgbm90CituZWNlc3NhcnkgKGJ1dCBwZXJtaXR0ZWQpIHRvIGluY2x1ZGUgYSBzZWNvbmQgY29weSBvZiB0aGUgZmlsZQorY29udGVudHM7IGlmIHRoZSBmaWxlIGNvbnRlbnRzIGlzIG5vdCBpbmNsdWRlZCwgdGhlIGNfZmlsZXNpemUgZmllbGQKK3Nob3VsZCBiZSBzZXQgdG8gemVybyB0byBpbmRpY2F0ZSBubyBkYXRhIHNlY3Rpb24gZm9sbG93cy4gIElmIGRhdGEgaXMKK3ByZXNlbnQsIHRoZSBwcmV2aW91cyBpbnN0YW5jZSBvZiB0aGUgZmlsZSBpcyBvdmVyd3JpdHRlbjsgdGhpcyBhbGxvd3MKK3RoZSBkYXRhLWNhcnJ5aW5nIGluc3RhbmNlIG9mIGEgZmlsZSB0byBvY2N1ciBhbnl3aGVyZSBpbiB0aGUgc2VxdWVuY2UKKyhHTlUgY3BpbyBpcyByZXBvcnRlZCB0byBhdHRhY2ggdGhlIGRhdGEgdG8gdGhlIGxhc3QgaW5zdGFuY2Ugb2YgYQorZmlsZSBvbmx5LikKKworY19maWxlc2l6ZSBtdXN0IG5vdCBiZSB6ZXJvIGZvciBhIHN5bWxpbmsuCisKK1doZW4gYSAiVFJBSUxFUiEhISIgZW5kLW9mLWFyY2hpdmUgbWFya2VyIGlzIHNlZW4sIHRoZSB0dXBsZSBidWZmZXIgaXMKK3Jlc2V0LiAgVGhpcyBwZXJtaXRzIGFyY2hpdmVzIHdoaWNoIGFyZSBnZW5lcmF0ZWQgaW5kZXBlbmRlbnRseSB0byBiZQorY29uY2F0ZW5hdGVkLgorCitUbyBjb21iaW5lIGZpbGUgZGF0YSBmcm9tIGRpZmZlcmVudCBzb3VyY2VzICh3aXRob3V0IGhhdmluZyB0bworcmVnZW5lcmF0ZSB0aGUgKGNfbWFqLGNfbWluLGNfaW5vKSBmaWVsZHMpLCB0aGVyZWZvcmUsIGVpdGhlciBvbmUgb2YKK3RoZSBmb2xsb3dpbmcgdGVjaG5pcXVlcyBjYW4gYmUgdXNlZDoKKworYSkgU2VwYXJhdGUgdGhlIGRpZmZlcmVudCBmaWxlIGRhdGEgc291cmNlcyB3aXRoIGEgIlRSQUlMRVIhISEiCisgICBlbmQtb2YtYXJjaGl2ZSBtYXJrZXIsIG9yCisKK2IpIE1ha2Ugc3VyZSBjX25saW5rID09IDEgZm9yIGFsbCBub25kaXJlY3RvcnkgZW50cmllcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWlzYS50eHQgYi9Eb2N1bWVudGF0aW9uL2Vpc2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODM4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Vpc2EudHh0CkBAIC0wLDAgKzEsMjAzIEBACitFSVNBIGJ1cyBzdXBwb3J0IChNYXJjIFp5bmdpZXIgPG1hekB3aWxkLXdpbmQuZnIuZXUub3JnPikKKworVGhpcyBkb2N1bWVudCBncm91cHMgcmFuZG9tIG5vdGVzIGFib3V0IHBvcnRpbmcgRUlTQSBkcml2ZXJzIHRvIHRoZQorbmV3IEVJU0Evc3lzZnMgQVBJLgorCitTdGFydGluZyBmcm9tIHZlcnNpb24gMi41LjU5LCB0aGUgRUlTQSBidXMgaXMgYWxtb3N0IGdpdmVuIHRoZSBzYW1lCitzdGF0dXMgYXMgb3RoZXIgbXVjaCBtb3JlIG1haW5zdHJlYW0gYnVzc2VzIHN1Y2ggYXMgUENJIG9yIFVTQi4gVGhpcworaGFzIGJlZW4gcG9zc2libGUgdGhyb3VnaCBzeXNmcywgd2hpY2ggZGVmaW5lcyBhIG5pY2UgZW5vdWdoIHNldCBvZgorYWJzdHJhY3Rpb25zIHRvIG1hbmFnZSBidXNzZXMsIGRldmljZXMgYW5kIGRyaXZlcnMuCisKK0FsdGhvdWdoIHRoZSBuZXcgQVBJIGlzIHF1aXRlIHNpbXBsZSB0byB1c2UsIGNvbnZlcnRpbmcgZXhpc3RpbmcKK2RyaXZlcnMgdG8gdGhlIG5ldyBpbmZyYXN0cnVjdHVyZSBpcyBub3QgYW4gZWFzeSB0YXNrIChtb3N0bHkgYmVjYXVzZQorZGV0ZWN0aW9uIGNvZGUgaXMgZ2VuZXJhbGx5IGFsc28gdXNlZCB0byBwcm9iZSBJU0EgY2FyZHMpLiBNb3Jlb3ZlciwKK21vc3QgRUlTQSBkcml2ZXJzIGFyZSBhbW9uZyB0aGUgb2xkZXN0IExpbnV4IGRyaXZlcnMgc28sIGFzIHlvdSBjYW4KK2ltYWdpbmUsIHNvbWUgZHVzdCBoYXMgc2V0dGxlZCBoZXJlIG92ZXIgdGhlIHllYXJzLgorCitUaGUgRUlTQSBpbmZyYXN0cnVjdHVyZSBpcyBtYWRlIHVwIG9mIHRocmVlIHBhcnRzIDoKKworICAgIC0gVGhlIGJ1cyBjb2RlIGltcGxlbWVudHMgbW9zdCBvZiB0aGUgZ2VuZXJpYyBjb2RlLiBJdCBpcyBzaGFyZWQKKyAgICBhbW9uZyBhbGwgdGhlIGFyY2hpdGVjdHVyZXMgdGhhdCB0aGUgRUlTQSBjb2RlIHJ1bnMgb24uIEl0CisgICAgaW1wbGVtZW50cyBidXMgcHJvYmluZyAoZGV0ZWN0aW5nIEVJU0EgY2FyZHMgYXZhaWJsZSBvbiB0aGUgYnVzKSwKKyAgICBhbGxvY2F0ZXMgSS9PIHJlc291cmNlcywgYWxsb3dzIGZhbmN5IG5hbWluZyB0aHJvdWdoIHN5c2ZzLCBhbmQKKyAgICBvZmZlcnMgaW50ZXJmYWNlcyBmb3IgZHJpdmVyIHRvIHJlZ2lzdGVyLgorCisgICAgLSBUaGUgYnVzIHJvb3QgZHJpdmVyIGltcGxlbWVudHMgdGhlIGdsdWUgYmV0d2VlbiB0aGUgYnVzIGhhcmR3YXJlCisgICAgYW5kIHRoZSBnZW5lcmljIGJ1cyBjb2RlLiBJdCBpcyByZXNwb25zaWJsZSBmb3IgZGlzY292ZXJpbmcgdGhlCisgICAgZGV2aWNlIGltcGxlbWVudGluZyB0aGUgYnVzLCBhbmQgc2V0dGluZyBpdCB1cCB0byBiZSBsYXR0ZXIgcHJvYmVkCisgICAgYnkgdGhlIGJ1cyBjb2RlLiBUaGlzIGNhbiBnbyBmcm9tIHNvbWV0aGluZyBhcyBzaW1wbGUgYXMgcmVzZXJ2aW5nCisgICAgYW4gSS9PIHJlZ2lvbiBvbiB4ODYsIHRvIHRoZSByYXRoZXIgbW9yZSBjb21wbGV4LCBsaWtlIHRoZSBocHBhCisgICAgRUlTQSBjb2RlLiBUaGlzIGlzIHRoZSBwYXJ0IHRvIGltcGxlbWVudCBpbiBvcmRlciB0byBoYXZlIEVJU0EKKyAgICBydW5uaW5nIG9uIGFuICJuZXciIHBsYXRmb3JtLgorCisgICAgLSBUaGUgZHJpdmVyIG9mZmVycyB0aGUgYnVzIGEgbGlzdCBvZiBkZXZpY2VzIHRoYXQgaXQgbWFuYWdlcywgYW5kCisgICAgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IGNhbGxiYWNrcyB0byBwcm9iZSBhbmQgcmVsZWFzZSBkZXZpY2VzCisgICAgd2hlbmV2ZXIgdG9sZCB0by4KKworRXZlcnkgZnVuY3Rpb24vc3RydWN0dXJlIGJlbG93IGxpdmVzIGluIDxsaW51eC9laXNhLmg+LCB3aGljaCBkZXBlbmRzCitoZWF2aWx5IG9uIDxsaW51eC9kZXZpY2UuaD4uCisKKyoqIEJ1cyByb290IGRyaXZlciA6CisKK2ludCBlaXNhX3Jvb3RfcmVnaXN0ZXIgKHN0cnVjdCBlaXNhX3Jvb3RfZGV2aWNlICpyb290KTsKKworVGhlIGVpc2Ffcm9vdF9yZWdpc3RlciBmdW5jdGlvbiBpcyB1c2VkIHRvIGRlY2xhcmUgYSBkZXZpY2UgYXMgdGhlCityb290IG9mIGFuIEVJU0EgYnVzLiBUaGUgZWlzYV9yb290X2RldmljZSBzdHJ1Y3R1cmUgaG9sZHMgYSByZWZlcmVuY2UKK3RvIHRoaXMgZGV2aWNlLCBhcyB3ZWxsIGFzIHNvbWUgcGFyYW1ldGVycyBmb3IgcHJvYmluZyBwdXJwb3Nlcy4KKworc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgICAqZGV2OwkgLyogUG9pbnRlciB0byBicmlkZ2UgZGV2aWNlICovCisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgbG9uZyAgICBidXNfYmFzZV9hZGRyOworCWludAkJIHNsb3RzOyAgLyogTWF4IHNsb3QgbnVtYmVyICovCisJaW50CQkgZm9yY2VfcHJvYmU7IC8qIFByb2JlIGV2ZW4gd2hlbiBubyBzbG90IDAgKi8KKwl1NjQJCSBkbWFfbWFzazsgLyogZnJvbSBicmlkZ2UgZGV2aWNlICovCisJaW50ICAgICAgICAgICAgICBidXNfbnI7IC8qIFNldCBieSBlaXNhX3Jvb3RfcmVnaXN0ZXIgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgIGVpc2Ffcm9vdF9yZXM7CS8qIGRpdHRvICovCit9OworCitub2RlICAgICAgICAgIDogdXNlZCBmb3IgZWlzYV9yb290X3JlZ2lzdGVyIGludGVybmFsIHB1cnBvc2UKK2RldiAgICAgICAgICAgOiBwb2ludGVyIHRvIHRoZSByb290IGRldmljZQorcmVzICAgICAgICAgICA6IHJvb3QgZGV2aWNlIEkvTyByZXNvdXJjZQorYnVzX2Jhc2VfYWRkciA6IHNsb3QgMCBhZGRyZXNzIG9uIHRoaXMgYnVzCitzbG90cwkgICAgICA6IG1heCBzbG90IG51bWJlciB0byBwcm9iZQorZm9yY2VfcHJvYmUgICA6IFByb2JlIGV2ZW4gd2hlbiBzbG90IDAgaXMgZW1wdHkgKG5vIEVJU0EgbWFpbmJvYXJkKQorZG1hX21hc2sgICAgICA6IERlZmF1bHQgRE1BIG1hc2suIFVzdWFseSB0aGUgYnJpZGdlIGRldmljZSBkbWFfbWFzay4KK2J1c19ucgkgICAgICA6IHVuaXF1ZSBidXMgaWQsIHNldCBieSBlaXNhX3Jvb3RfcmVnaXN0ZXIKKworKiogRHJpdmVyIDoKKworaW50IGVpc2FfZHJpdmVyX3JlZ2lzdGVyIChzdHJ1Y3QgZWlzYV9kcml2ZXIgKmVkcnYpOwordm9pZCBlaXNhX2RyaXZlcl91bnJlZ2lzdGVyIChzdHJ1Y3QgZWlzYV9kcml2ZXIgKmVkcnYpOworCitDbGVhciBlbm91Z2ggPworCitzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgeworICAgICAgICBjaGFyIHNpZ1tFSVNBX1NJR19MRU5dOworCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7Cit9OworCitzdHJ1Y3QgZWlzYV9kcml2ZXIgeworICAgICAgICBjb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgKmlkX3RhYmxlOworICAgICAgICBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAgICAgICAgIGRyaXZlcjsKK307CisKK2lkX3RhYmxlCTogYW4gYXJyYXkgb2YgTlVMTCB0ZXJtaW5hdGVkIEVJU0EgaWQgc3RyaW5ncywKKwkJICBmb2xsb3dlZCBieSBhbiBlbXB0eSBzdHJpbmcuIEVhY2ggc3RyaW5nIGNhbgorCQkgIG9wdGlvbm5hbHkgYmUgcGFpcmVkIHdpdGggYSBkcml2ZXItZGVwZW5kYW50IHZhbHVlCisJCSAgKGRyaXZlcl9kYXRhKS4KKworZHJpdmVyCQk6IGEgZ2VuZXJpYyBkcml2ZXIsIHN1Y2ggYXMgZGVzY3JpYmVkIGluCisJCSAgRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dC4gT25seSAubmFtZSwKKwkJICAucHJvYmUgYW5kIC5yZW1vdmUgbWVtYmVycyBhcmUgbWFuZGF0b3J5LgorCitBbiBleGFtcGxlIGlzIHRoZSAzYzU5eCBkcml2ZXIgOgorCitzdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIHZvcnRleF9laXNhX2lkc1tdID0geworCXsgIlRDTTU5MjAiLCBFSVNBXzNDNTkyX09GRlNFVCB9LAorCXsgIlRDTTU5NzAiLCBFSVNBXzNDNTk3X09GRlNFVCB9LAorCXsgIiIgfQorfTsKKworc3RhdGljIHN0cnVjdCBlaXNhX2RyaXZlciB2b3J0ZXhfZWlzYV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gdm9ydGV4X2Vpc2FfaWRzLAorCS5kcml2ZXIgICA9IHsKKwkJLm5hbWUgICAgPSAiM2M1OXgiLAorCQkucHJvYmUgICA9IHZvcnRleF9laXNhX3Byb2JlLAorCQkucmVtb3ZlICA9IHZvcnRleF9laXNhX3JlbW92ZQorCX0KK307CisKKyoqIERldmljZSA6CisKK1RoZSBzeXNmcyBmcmFtZXdvcmsgY2FsbHMgLnByb2JlIGFuZCAucmVtb3ZlIGZ1bmN0aW9ucyB1cG9uIGRldmljZQorZGlzY292ZXJ5IGFuZCByZW1vdmFsIChub3RlIHRoYXQgdGhlIC5yZW1vdmUgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQKK3doZW4gZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlKS4KKworQm90aCBmdW5jdGlvbnMgYXJlIHBhc3NlZCBhIHBvaW50ZXIgdG8gYSAnc3RydWN0IGRldmljZScsIHdoaWNoIGlzCitlbmNhcHN1bGF0ZWQgaW4gYSAnc3RydWN0IGVpc2FfZGV2aWNlJyBkZXNjcmliZWQgYXMgZm9sbG93cyA6CisKK3N0cnVjdCBlaXNhX2RldmljZSB7CisgICAgICAgIHN0cnVjdCBlaXNhX2RldmljZV9pZCBpZDsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHNsb3Q7CisJaW50ICAgICAgICAgICAgICAgICAgIHN0YXRlOworCXVuc2lnbmVkIGxvbmcgICAgICAgICBiYXNlX2FkZHI7CisJc3RydWN0IHJlc291cmNlICAgICAgIHJlc1tFSVNBX01BWF9SRVNPVVJDRVNdOworCXU2NCAgICAgICAgICAgICAgICAgICBkbWFfbWFzazsKKyAgICAgICAgc3RydWN0IGRldmljZSAgICAgICAgIGRldjsgLyogZ2VuZXJpYyBkZXZpY2UgKi8KK307CisKK2lkCTogRUlTQSBpZCwgYXMgcmVhZCBmcm9tIGRldmljZS4gaWQuZHJpdmVyX2RhdGEgaXMgc2V0IGZyb20gdGhlCisJICBtYXRjaGluZyBkcml2ZXIgRUlTQSBpZC4KK3Nsb3QJOiBzbG90IG51bWJlciB3aGljaCB0aGUgZGV2aWNlIHdhcyBkZXRlY3RlZCBvbgorc3RhdGUgICA6IHNldCBvZiBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdGF0ZSBvZiB0aGUgZGV2aWNlLiBDdXJyZW50CisJICBmbGFncyBhcmUgRUlTQV9DT05GSUdfRU5BQkxFRCBhbmQgRUlTQV9DT05GSUdfRk9SQ0VELgorcmVzCTogc2V0IG9mIGZvdXIgMjU2IGJ5dGVzIEkvTyByZWdpb25zIGFsbG9jYXRlZCB0byB0aGlzIGRldmljZQorZG1hX21hc2s6IERNQSBtYXNrIHNldCBmcm9tIHRoZSBwYXJlbnQgZGV2aWNlLgorZGV2CTogZ2VuZXJpYyBkZXZpY2UgKHNlZSBEb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZpY2UudHh0KQorCitZb3UgY2FuIGdldCB0aGUgJ3N0cnVjdCBlaXNhX2RldmljZScgZnJvbSAnc3RydWN0IGRldmljZScgdXNpbmcgdGhlCisndG9fZWlzYV9kZXZpY2UnIG1hY3JvLgorCisqKiBNaXNjIHN0dWZmIDoKKwordm9pZCBlaXNhX3NldF9kcnZkYXRhIChzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYsIHZvaWQgKmRhdGEpOworCitTdG9yZXMgZGF0YSBpbnRvIHRoZSBkZXZpY2UncyBkcml2ZXJfZGF0YSBhcmVhLgorCit2b2lkICplaXNhX2dldF9kcnZkYXRhIChzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYpOgorCitHZXRzIHRoZSBwb2ludGVyIHByZXZpb3VzbHkgc3RvcmVkIGludG8gdGhlIGRldmljZSdzIGRyaXZlcl9kYXRhIGFyZWEuCisKK2ludCBlaXNhX2dldF9yZWdpb25faW5kZXggKHZvaWQgKmFkZHIpOworCitSZXR1cm5zIHRoZSByZWdpb24gbnVtYmVyICgwIDw9IHggPCBFSVNBX01BWF9SRVNPVVJDRVMpIG9mIGEgZ2l2ZW4KK2FkZHJlc3MuCisKKyoqIEtlcm5lbCBwYXJhbWV0ZXJzIDoKKworZWlzYV9idXMuZW5hYmxlX2RldiA6CisKK0EgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2xvdHMgdG8gYmUgZW5hYmxlZCwgZXZlbiBpZiB0aGUgZmlybXdhcmUKK3NldCB0aGUgY2FyZCBhcyBkaXNhYmxlZC4gVGhlIGRyaXZlciBtdXN0IGJlIGFibGUgdG8gcHJvcGVybHkKK2luaXRpYWxpemUgdGhlIGRldmljZSBpbiBzdWNoIGNvbmRpdGlvbnMuCisKK2Vpc2FfYnVzLmRpc2FibGVfZGV2IDoKKworQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzbG90cyB0byBiZSBlbmFibGVkLCBldmVuIGlmIHRoZSBmaXJtd2FyZQorc2V0IHRoZSBjYXJkIGFzIGVuYWJsZWQuIFRoZSBkcml2ZXIgd29uJ3QgYmUgY2FsbGVkIHRvIGhhbmRsZSB0aGlzCitkZXZpY2UuCisKK3ZpcnR1YWxfcm9vdC5mb3JjZV9wcm9iZSA6CisKK0ZvcmNlIHRoZSBwcm9iaW5nIGNvZGUgdG8gcHJvYmUgRUlTQSBzbG90cyBldmVuIHdoZW4gaXQgY2Fubm90IGZpbmQgYW4KK0VJU0EgY29tcGxpYW50IG1haW5ib2FyZCAobm90aGluZyBhcHBlYXJzIG9uIHNsb3QgMCkuIERlZmF1bHRkIHRvIDAKKyhkb24ndCBmb3JjZSksIGFuZCBzZXQgdG8gMSAoZm9yY2UgcHJvYmluZykgd2hlbiBlaXRoZXIKK0NPTkZJR19BTFBIQV9KRU5TRU4gb3IgQ09ORklHX0VJU0FfVkxCX1BSSU1JTkcgYXJlIHNldC4KKworKiogUmFuZG9tIG5vdGVzIDoKKworQ29udmVydGluZyBhbiBFSVNBIGRyaXZlciB0byB0aGUgbmV3IEFQSSBtb3N0bHkgaW52b2x2ZXMgKmRlbGV0aW5nKgorY29kZSAoc2luY2UgcHJvYmluZyBpcyBub3cgaW4gdGhlIGNvcmUgRUlTQSBjb2RlKS4gVW5mb3J0dW5hdGVseSwgbW9zdAorZHJpdmVycyBzaGFyZSB0aGVpciBwcm9iaW5nIHJvdXRpbmUgYmV0d2VlbiBJU0EsIE1DQSBhbmQgRUlTQS4gU3BlY2lhbAorY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gcmlwcGluZyBvdXQgdGhlIEVJU0EgY29kZSwgc28gb3RoZXIgYnVzc2VzCit3b24ndCBzdWZmZXIgZnJvbSB0aGVzZSBzdXJnaWNhbCBzdHJpa2VzLi4uCisKK1lvdSAqbXVzdCBub3QqIGV4cGVjdCBhbnkgRUlTQSBkZXZpY2UgdG8gYmUgZGV0ZWN0ZWQgd2hlbiByZXR1cm5pbmcKK2Zyb20gZWlzYV9kcml2ZXJfcmVnaXN0ZXIsIHNpbmNlIHRoZSBjaGFuY2VzIGFyZSB0aGF0IHRoZSBidXMgaGFzIG5vdAoreWV0IGJlZW4gcHJvYmVkLiBJbiBmYWN0LCB0aGF0J3Mgd2hhdCBoYXBwZW5zIG1vc3Qgb2YgdGhlIHRpbWUgKHRoZQorYnVzIHJvb3QgZHJpdmVyIHVzdWFsbHkga2lja3MgaW4gcmF0aGVyIGxhdGUgaW4gdGhlIGJvb3QgcHJvY2VzcykuCitVbmZvcnR1bmF0ZWx5LCBtb3N0IGRyaXZlcnMgYXJlIGRvaW5nIHRoZSBwcm9iaW5nIGJ5IHRoZW1zZWx2ZXMsIGFuZAorZXhwZWN0IHRvIGhhdmUgZXhwbG9yZWQgdGhlIHdob2xlIG1hY2hpbmUgd2hlbiB0aGV5IGV4aXQgdGhlaXIgcHJvYmUKK3JvdXRpbmUuCisKK0ZvciBleGFtcGxlLCBzd2l0Y2hpbmcgeW91ciBmYXZvcml0ZSBFSVNBIFNDU0kgY2FyZCB0byB0aGUgImhvdHBsdWciCittb2RlbCBpcyAidGhlIHJpZ2h0IHRoaW5nIih0bSkuCisKKyoqIFRoYW5rcyA6CisKK0knZCBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciBoZWxwIDoKKy0gWGF2aWVyIEJlbmlnbmkgZm9yIGxlbmRpbmcgbWUgYSB3b25kZXJmdWwgQWxwaGEgSmVuc2VuLAorLSBKYW1lcyBCb3R0b21sZXksIEplZmYgR2FyemlrIGZvciBnZXR0aW5nIHRoaXMgc3R1ZmYgaW50byB0aGUga2VybmVsLAorLSBBbmRyaWVzIEJyb3V3ZXIgZm9yIGNvbnRyaWJ1dGluZyBudW1lcm91cyBFSVNBIGlkcywKKy0gQ2F0cmluIEpvbmVzIGZvciBjb3Bpbmcgd2l0aCBmYXIgdG9vIG1hbnkgbWFjaGluZXMgYXQgaG9tZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZXhjZXB0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZXhjZXB0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQ0MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9leGNlcHRpb24udHh0CkBAIC0wLDAgKzEsMjkyIEBACisgICAgIEtlcm5lbCBsZXZlbCBleGNlcHRpb24gaGFuZGxpbmcgaW4gTGludXggMi4xLjgKKyAgQ29tbWVudGFyeSBieSBKb2VyZyBQb21tbml0eiA8am9lcmdAcmFsZWlnaC5pYm0uY29tPgorCitXaGVuIGEgcHJvY2VzcyBydW5zIGluIGtlcm5lbCBtb2RlLCBpdCBvZnRlbiBoYXMgdG8gYWNjZXNzIHVzZXIgCittb2RlIG1lbW9yeSB3aG9zZSBhZGRyZXNzIGhhcyBiZWVuIHBhc3NlZCBieSBhbiB1bnRydXN0ZWQgcHJvZ3JhbS4gCitUbyBwcm90ZWN0IGl0c2VsZiB0aGUga2VybmVsIGhhcyB0byB2ZXJpZnkgdGhpcyBhZGRyZXNzLgorCitJbiBvbGRlciB2ZXJzaW9ucyBvZiBMaW51eCB0aGlzIHdhcyBkb25lIHdpdGggdGhlIAoraW50IHZlcmlmeV9hcmVhKGludCB0eXBlLCBjb25zdCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKSAKK2Z1bmN0aW9uLgorCitUaGlzIGZ1bmN0aW9uIHZlcmlmaWVkIHRoYXQgdGhlIG1lbW9yeSBhcmVhIHN0YXJ0aW5nIGF0IGFkZHJlc3MgCithZGRyIGFuZCBvZiBzaXplIHNpemUgd2FzIGFjY2Vzc2libGUgZm9yIHRoZSBvcGVyYXRpb24gc3BlY2lmaWVkIAoraW4gdHlwZSAocmVhZCBvciB3cml0ZSkuIFRvIGRvIHRoaXMsIHZlcmlmeV9yZWFkIGhhZCB0byBsb29rIHVwIHRoZSAKK3ZpcnR1YWwgbWVtb3J5IGFyZWEgKHZtYSkgdGhhdCBjb250YWluZWQgdGhlIGFkZHJlc3MgYWRkci4gSW4gdGhlIAorbm9ybWFsIGNhc2UgKGNvcnJlY3RseSB3b3JraW5nIHByb2dyYW0pLCB0aGlzIHRlc3Qgd2FzIHN1Y2Nlc3NmdWwuIAorSXQgb25seSBmYWlsZWQgZm9yIGEgZmV3IGJ1Z2d5IHByb2dyYW1zLiBJbiBzb21lIGtlcm5lbCBwcm9maWxpbmcKK3Rlc3RzLCB0aGlzIG5vcm1hbGx5IHVubmVlZGVkIHZlcmlmaWNhdGlvbiB1c2VkIHVwIGEgY29uc2lkZXJhYmxlCithbW91bnQgb2YgdGltZS4KKworVG8gb3ZlcmNvbWUgdGhpcyBzaXR1YXRpb24sIExpbnVzIGRlY2lkZWQgdG8gbGV0IHRoZSB2aXJ0dWFsIG1lbW9yeSAKK2hhcmR3YXJlIHByZXNlbnQgaW4gZXZlcnkgTGludXgtY2FwYWJsZSBDUFUgaGFuZGxlIHRoaXMgdGVzdC4KKworSG93IGRvZXMgdGhpcyB3b3JrPworCitXaGVuZXZlciB0aGUga2VybmVsIHRyaWVzIHRvIGFjY2VzcyBhbiBhZGRyZXNzIHRoYXQgaXMgY3VycmVudGx5IG5vdCAKK2FjY2Vzc2libGUsIHRoZSBDUFUgZ2VuZXJhdGVzIGEgcGFnZSBmYXVsdCBleGNlcHRpb24gYW5kIGNhbGxzIHRoZSAKK3BhZ2UgZmF1bHQgaGFuZGxlciAKKwordm9pZCBkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCisKK2luIGFyY2gvaTM4Ni9tbS9mYXVsdC5jLiBUaGUgcGFyYW1ldGVycyBvbiB0aGUgc3RhY2sgYXJlIHNldCB1cCBieSAKK3RoZSBsb3cgbGV2ZWwgYXNzZW1ibHkgZ2x1ZSBpbiBhcmNoL2kzODYva2VybmVsL2VudHJ5LlMuIFRoZSBwYXJhbWV0ZXIKK3JlZ3MgaXMgYSBwb2ludGVyIHRvIHRoZSBzYXZlZCByZWdpc3RlcnMgb24gdGhlIHN0YWNrLCBlcnJvcl9jb2RlIAorY29udGFpbnMgYSByZWFzb24gY29kZSBmb3IgdGhlIGV4Y2VwdGlvbi4KKworZG9fcGFnZV9mYXVsdCBmaXJzdCBvYnRhaW5zIHRoZSB1bmFjY2Vzc2libGUgYWRkcmVzcyBmcm9tIHRoZSBDUFUgCitjb250cm9sIHJlZ2lzdGVyIENSMi4gSWYgdGhlIGFkZHJlc3MgaXMgd2l0aGluIHRoZSB2aXJ0dWFsIGFkZHJlc3MgCitzcGFjZSBvZiB0aGUgcHJvY2VzcywgdGhlIGZhdWx0IHByb2JhYmx5IG9jY3VycmVkLCBiZWNhdXNlIHRoZSBwYWdlIAord2FzIG5vdCBzd2FwcGVkIGluLCB3cml0ZSBwcm90ZWN0ZWQgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEhvd2V2ZXIsIAord2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIG90aGVyIGNhc2U6IHRoZSBhZGRyZXNzIGlzIG5vdCB2YWxpZCwgdGhlcmUgCitpcyBubyB2bWEgdGhhdCBjb250YWlucyB0aGlzIGFkZHJlc3MuIEluIHRoaXMgY2FzZSwgdGhlIGtlcm5lbCBqdW1wcyAKK3RvIHRoZSBiYWRfYXJlYSBsYWJlbC4gCisKK1RoZXJlIGl0IHVzZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24gCisoaS5lLiByZWdzLT5laXApIHRvIGZpbmQgYW4gYWRkcmVzcyB3aGVyZSB0aGUgZXhlY3V0aW9uIGNhbiBjb250aW51ZSAKKyhmaXh1cCkuIElmIHRoaXMgc2VhcmNoIGlzIHN1Y2Nlc3NmdWwsIHRoZSBmYXVsdCBoYW5kbGVyIG1vZGlmaWVzIHRoZSAKK3JldHVybiBhZGRyZXNzIChhZ2FpbiByZWdzLT5laXApIGFuZCByZXR1cm5zLiBUaGUgZXhlY3V0aW9uIHdpbGwgCitjb250aW51ZSBhdCB0aGUgYWRkcmVzcyBpbiBmaXh1cC4KKworV2hlcmUgZG9lcyBmaXh1cCBwb2ludCB0bz8KKworU2luY2Ugd2UganVtcCB0byB0aGUgY29udGVudHMgb2YgZml4dXAsIGZpeHVwIG9idmlvdXNseSBwb2ludHMgCit0byBleGVjdXRhYmxlIGNvZGUuIFRoaXMgY29kZSBpcyBoaWRkZW4gaW5zaWRlIHRoZSB1c2VyIGFjY2VzcyBtYWNyb3MuIAorSSBoYXZlIHBpY2tlZCB0aGUgZ2V0X3VzZXIgbWFjcm8gZGVmaW5lZCBpbiBpbmNsdWRlL2FzbS91YWNjZXNzLmggYXMgYW4KK2V4YW1wbGUuIFRoZSBkZWZpbml0aW9uIGlzIHNvbWV3aGF0IGhhcmQgdG8gZm9sbG93LCBzbyBsZXQncyBwZWVrIGF0IAordGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IgYW5kIHRoZSBjb21waWxlci4gSSBzZWxlY3RlZAordGhlIGdldF91c2VyIGNhbGwgaW4gZHJpdmVycy9jaGFyL2NvbnNvbGUuYyBmb3IgYSBkZXRhaWxlZCBleGFtaW5hdGlvbi4KKworVGhlIG9yaWdpbmFsIGNvZGUgaW4gY29uc29sZS5jIGxpbmUgMTQwNToKKyAgICAgICAgZ2V0X3VzZXIoYywgYnVmKTsKKworVGhlIHByZXByb2Nlc3NvciBvdXRwdXQgKGVkaXRlZCB0byBiZWNvbWUgc29tZXdoYXQgcmVhZGFibGUpOgorCisoCisgIHsgICAgICAgIAorICAgIGxvbmcgX19ndV9lcnIgPSAtIDE0ICwgX19ndV92YWwgPSAwOyAgICAgICAgCisgICAgY29uc3QgX190eXBlb2ZfXygqKCAoICBidWYgKSApKSAqX19ndV9hZGRyID0gKChidWYpKTsgICAgICAgIAorICAgIGlmICgoKCgoMCArIGN1cnJlbnRfc2V0WzBdKS0+dHNzLnNlZ21lbnQpID09IDB4MTggKSAgfHwgCisgICAgICAgKCgoc2l6ZW9mKCooYnVmKSkpIDw9IDB4QzAwMDAwMDBVTCkgJiYgCisgICAgICAgKCh1bnNpZ25lZCBsb25nKShfX2d1X2FkZHIgKSA8PSAweEMwMDAwMDAwVUwgLSAoc2l6ZW9mKCooYnVmKSkpKSkpKSAgICAgICAgCisgICAgICBkbyB7CisgICAgICAgIF9fZ3VfZXJyICA9IDA7ICAgICAgICAKKyAgICAgICAgc3dpdGNoICgoc2l6ZW9mKCooYnVmKSkpKSB7ICAgICAgICAKKyAgICAgICAgICBjYXNlIDE6IAorICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAKKyAgICAgICAgICAgICAgIjE6ICAgICAgbW92IiAiYiIgIiAlMiwlIiAiYiIgIjFcbiIgICAgICAgIAorICAgICAgICAgICAgICAiMjpcbiIgICAgICAgIAorICAgICAgICAgICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIzOiAgICAgIG1vdmwgJTMsJTBcbiIgICAgICAgIAorICAgICAgICAgICAgICAiICAgICAgICB4b3IiICJiIiAiICUiICJiIiAiMSwlIiAiYiIgIjFcbiIgICAgICAgIAorICAgICAgICAgICAgICAiICAgICAgICBqbXAgMmJcbiIgICAgICAgIAorICAgICAgICAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIC5hbGlnbiA0XG4iICAgICAgICAKKyAgICAgICAgICAgICAgIiAgICAgICAgLmxvbmcgMWIsM2JcbiIgICAgICAgIAorICAgICAgICAgICAgICAiLnRleHQiICAgICAgICA6ICI9ciIoX19ndV9lcnIpLCAiPXEiIChfX2d1X3ZhbCk6ICJtIigoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgX19ndV9hZGRyICAgKSkgKSwgImkiKC0gMTQgKSwgIjAiKCAgX19ndV9lcnIgICkpIDsgCisgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgCisgICAgICAgICAgY2FzZSAyOiAKKyAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAorICAgICAgICAgICAgICAiMTogICAgICBtb3YiICJ3IiAiICUyLCUiICJ3IiAiMVxuIiAgICAgICAgCisgICAgICAgICAgICAgICIyOlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIjM6ICAgICAgbW92bCAlMywlMFxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIHhvciIgInciICIgJSIgInciICIxLCUiICJ3IiAiMVxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIGptcCAyYlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIiAgICAgICAgLmFsaWduIDRcbiIgICAgICAgIAorICAgICAgICAgICAgICAiICAgICAgICAubG9uZyAxYiwzYlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIudGV4dCIgICAgICAgIDogIj1yIihfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6ICJtIigoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgX19ndV9hZGRyICAgKSkgKSwgImkiKC0gMTQgKSwgIjAiKCAgX19ndV9lcnIgICkpOyAKKyAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAKKyAgICAgICAgICBjYXNlIDQ6IAorICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAKKyAgICAgICAgICAgICAgIjE6ICAgICAgbW92IiAibCIgIiAlMiwlIiAiIiAiMVxuIiAgICAgICAgCisgICAgICAgICAgICAgICIyOlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIjM6ICAgICAgbW92bCAlMywlMFxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIHhvciIgImwiICIgJSIgIiIgIjEsJSIgIiIgIjFcbiIgICAgICAgIAorICAgICAgICAgICAgICAiICAgICAgICBqbXAgMmJcbiIgICAgICAgIAorICAgICAgICAgICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIC5hbGlnbiA0XG4iICAgICAgICAiICAgICAgICAubG9uZyAxYiwzYlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIudGV4dCIgICAgICAgIDogIj1yIihfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6ICJtIigoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgX19ndV9hZGRyICAgKSkgKSwgImkiKC0gMTQgKSwgIjAiKF9fZ3VfZXJyKSk7IAorICAgICAgICAgICAgICBicmVhazsgICAgICAgIAorICAgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgKF9fZ3VfdmFsKSA9IF9fZ2V0X3VzZXJfYmFkKCk7ICAgICAgICAKKyAgICAgICAgfSAgICAgICAgCisgICAgICB9IHdoaWxlICgwKSA7ICAgICAgICAKKyAgICAoKGMpKSA9IChfX3R5cGVvZl9fKCooKGJ1ZikpKSlfX2d1X3ZhbDsgICAgICAgIAorICAgIF9fZ3VfZXJyOworICB9CispOworCitXT1chIEJsYWNrIEdDQy9hc3NlbWJseSBtYWdpYy4gVGhpcyBpcyBpbXBvc3NpYmxlIHRvIGZvbGxvdywgc28gbGV0J3MKK3NlZSB3aGF0IGNvZGUgZ2NjIGdlbmVyYXRlczoKKworID4gICAgICAgICB4b3JsICVlZHgsJWVkeAorID4gICAgICAgICBtb3ZsIGN1cnJlbnRfc2V0LCVlYXgKKyA+ICAgICAgICAgY21wbCAkMjQsNzg4KCVlYXgpICAgICAgICAKKyA+ICAgICAgICAgamUgLkwxNDI0ICAgICAgICAKKyA+ICAgICAgICAgY21wbCAkLTEwNzM3NDE4MjUsNjQoJWVzcCkKKyA+ICAgICAgICAgamEgLkwxNDIzICAgICAgICAgICAgICAgIAorID4gLkwxNDI0OgorID4gICAgICAgICBtb3ZsICVlZHgsJWVheCAgICAgICAgICAgICAgICAgICAgICAgIAorID4gICAgICAgICBtb3ZsIDY0KCVlc3ApLCVlYngKKyA+ICNBUFAKKyA+IDE6ICAgICAgbW92YiAoJWVieCksJWRsICAgICAgICAgICAgICAgIC8qIHRoaXMgaXMgdGhlIGFjdHVhbCB1c2VyIGFjY2VzcyAqLworID4gMjoKKyA+IC5zZWN0aW9uIC5maXh1cCwiYXgiCisgPiAzOiAgICAgIG1vdmwgJC0xNCwlZWF4CisgPiAgICAgICAgIHhvcmIgJWRsLCVkbAorID4gICAgICAgICBqbXAgMmIKKyA+IC5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisgPiAgICAgICAgIC5hbGlnbiA0CisgPiAgICAgICAgIC5sb25nIDFiLDNiCisgPiAudGV4dAorID4gI05PX0FQUAorID4gLkwxNDIzOgorID4gICAgICAgICBtb3Z6YmwgJWRsLCVlc2kKKworVGhlIG9wdGltaXplciBkb2VzIGEgZ29vZCBqb2IgYW5kIGdpdmVzIHVzIHNvbWV0aGluZyB3ZSBjYW4gYWN0dWFsbHkgCit1bmRlcnN0YW5kLiBDYW4gd2U/IFRoZSBhY3R1YWwgdXNlciBhY2Nlc3MgaXMgcXVpdGUgb2J2aW91cy4gVGhhbmtzIAordG8gdGhlIHVuaWZpZWQgYWRkcmVzcyBzcGFjZSB3ZSBjYW4ganVzdCBhY2Nlc3MgdGhlIGFkZHJlc3MgaW4gdXNlciAKK21lbW9yeS4gQnV0IHdoYXQgZG9lcyB0aGUgLnNlY3Rpb24gc3R1ZmYgZG8/Pz8/PworCitUbyB1bmRlcnN0YW5kIHRoaXMgd2UgaGF2ZSB0byBsb29rIGF0IHRoZSBmaW5hbCBrZXJuZWw6CisKKyA+IG9iamR1bXAgLS1zZWN0aW9uLWhlYWRlcnMgdm1saW51eAorID4gCisgPiB2bWxpbnV4OiAgICAgZmlsZSBmb3JtYXQgZWxmMzItaTM4NgorID4gCisgPiBTZWN0aW9uczoKKyA+IElkeCBOYW1lICAgICAgICAgIFNpemUgICAgICBWTUEgICAgICAgTE1BICAgICAgIEZpbGUgb2ZmICBBbGduCisgPiAgIDAgLnRleHQgICAgICAgICAwMDA5OGY0MCAgYzAxMDAwMDAgIGMwMTAwMDAwICAwMDAwMTAwMCAgMioqNAorID4gICAgICAgICAgICAgICAgICAgQ09OVEVOVFMsIEFMTE9DLCBMT0FELCBSRUFET05MWSwgQ09ERQorID4gICAxIC5maXh1cCAgICAgICAgMDAwMDE2YmMgIGMwMTk4ZjQwICBjMDE5OGY0MCAgMDAwOTlmNDAgIDIqKjAKKyA+ICAgICAgICAgICAgICAgICAgIENPTlRFTlRTLCBBTExPQywgTE9BRCwgUkVBRE9OTFksIENPREUKKyA+ICAgMiAucm9kYXRhICAgICAgIDAwMDBmMTI3ICBjMDE5YTVmYyAgYzAxOWE1ZmMgIDAwMDliNWZjICAyKioyCisgPiAgICAgICAgICAgICAgICAgICBDT05URU5UUywgQUxMT0MsIExPQUQsIFJFQURPTkxZLCBEQVRBCisgPiAgIDMgX19leF90YWJsZSAgICAwMDAwMTVjMCAgYzAxYTk3MjQgIGMwMWE5NzI0ICAwMDBhYTcyNCAgMioqMgorID4gICAgICAgICAgICAgICAgICAgQ09OVEVOVFMsIEFMTE9DLCBMT0FELCBSRUFET05MWSwgREFUQQorID4gICA0IC5kYXRhICAgICAgICAgMDAwMGVhNTggIGMwMWFiY2YwICBjMDFhYmNmMCAgMDAwYWJjZjAgIDIqKjQKKyA+ICAgICAgICAgICAgICAgICAgIENPTlRFTlRTLCBBTExPQywgTE9BRCwgREFUQQorID4gICA1IC5ic3MgICAgICAgICAgMDAwMThlMjEgIGMwMWJhNzQ4ICBjMDFiYTc0OCAgMDAwYmE3NDggIDIqKjIKKyA+ICAgICAgICAgICAgICAgICAgIEFMTE9DCisgPiAgIDYgLmNvbW1lbnQgICAgICAwMDAwMGVjNCAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDBiYTc0OCAgMioqMAorID4gICAgICAgICAgICAgICAgICAgQ09OVEVOVFMsIFJFQURPTkxZCisgPiAgIDcgLm5vdGUgICAgICAgICAwMDAwMTA2OCAgMDAwMDBlYzQgIDAwMDAwZWM0ICAwMDBiYjYwYyAgMioqMAorID4gICAgICAgICAgICAgICAgICAgQ09OVEVOVFMsIFJFQURPTkxZCisKK1RoZXJlIGFyZSBvYnZpb3VzbHkgMiBub24gc3RhbmRhcmQgRUxGIHNlY3Rpb25zIGluIHRoZSBnZW5lcmF0ZWQgb2JqZWN0CitmaWxlLiBCdXQgZmlyc3Qgd2Ugd2FudCB0byBmaW5kIG91dCB3aGF0IGhhcHBlbmVkIHRvIG91ciBjb2RlIGluIHRoZQorZmluYWwga2VybmVsIGV4ZWN1dGFibGU6CisKKyA+IG9iamR1bXAgLS1kaXNhc3NlbWJsZSAtLXNlY3Rpb249LnRleHQgdm1saW51eAorID4KKyA+IGMwMTdlNzg1IDxkb19jb25fd3JpdGUrYzE+IHhvcmwgICAlZWR4LCVlZHgKKyA+IGMwMTdlNzg3IDxkb19jb25fd3JpdGUrYzM+IG1vdmwgICAweGMwMWM3YmVjLCVlYXgKKyA+IGMwMTdlNzhjIDxkb19jb25fd3JpdGUrYzg+IGNtcGwgICAkMHgxOCwweDMxNCglZWF4KQorID4gYzAxN2U3OTMgPGRvX2Nvbl93cml0ZStjZj4gamUgICAgIGMwMTdlNzlmIDxkb19jb25fd3JpdGUrZGI+CisgPiBjMDE3ZTc5NSA8ZG9fY29uX3dyaXRlK2QxPiBjbXBsICAgJDB4YmZmZmZmZmYsMHg0MCglZXNwLDEpCisgPiBjMDE3ZTc5ZCA8ZG9fY29uX3dyaXRlK2Q5PiBqYSAgICAgYzAxN2U3YTcgPGRvX2Nvbl93cml0ZStlMz4KKyA+IGMwMTdlNzlmIDxkb19jb25fd3JpdGUrZGI+IG1vdmwgICAlZWR4LCVlYXgKKyA+IGMwMTdlN2ExIDxkb19jb25fd3JpdGUrZGQ+IG1vdmwgICAweDQwKCVlc3AsMSksJWVieAorID4gYzAxN2U3YTUgPGRvX2Nvbl93cml0ZStlMT4gbW92YiAgICglZWJ4KSwlZGwKKyA+IGMwMTdlN2E3IDxkb19jb25fd3JpdGUrZTM+IG1vdnpibCAlZGwsJWVzaQorCitUaGUgd2hvbGUgdXNlciBtZW1vcnkgYWNjZXNzIGlzIHJlZHVjZWQgdG8gMTAgeDg2IG1hY2hpbmUgaW5zdHJ1Y3Rpb25zLgorVGhlIGluc3RydWN0aW9ucyBicmFja2V0ZWQgaW4gdGhlIC5zZWN0aW9uIGRpcmVjdGl2ZXMgYXJlIG5vIGxvbmdlcgoraW4gdGhlIG5vcm1hbCBleGVjdXRpb24gcGF0aC4gVGhleSBhcmUgbG9jYXRlZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uIAorb2YgdGhlIGV4ZWN1dGFibGUgZmlsZToKKworID4gb2JqZHVtcCAtLWRpc2Fzc2VtYmxlIC0tc2VjdGlvbj0uZml4dXAgdm1saW51eAorID4gCisgPiBjMDE5OWZmNSA8LmZpeHVwKzEwYjU+IG1vdmwgICAkMHhmZmZmZmZmMiwlZWF4CisgPiBjMDE5OWZmYSA8LmZpeHVwKzEwYmE+IHhvcmIgICAlZGwsJWRsCisgPiBjMDE5OWZmYyA8LmZpeHVwKzEwYmM+IGptcCAgICBjMDE3ZTdhNyA8ZG9fY29uX3dyaXRlK2UzPgorCitBbmQgZmluYWxseToKKyA+IG9iamR1bXAgLS1mdWxsLWNvbnRlbnRzIC0tc2VjdGlvbj1fX2V4X3RhYmxlIHZtbGludXgKKyA+IAorID4gIGMwMWFhN2M0IDkzYzAxN2MwIGUwOWYxOWMwIDk3YzAxN2MwIDk5YzAxN2MwICAuLi4uLi4uLi4uLi4uLi4uCisgPiAgYzAxYWE3ZDQgZjZjMjE3YzAgZTk5ZjE5YzAgYTVlNzE3YzAgZjU5ZjE5YzAgIC4uLi4uLi4uLi4uLi4uLi4KKyA+ICBjMDFhYTdlNCAwODBhMThjMCAwMWEwMTljMCAwYTBhMThjMCAwNGEwMTljMCAgLi4uLi4uLi4uLi4uLi4uLgorCitvciBpbiBodW1hbiByZWFkYWJsZSBieXRlIG9yZGVyOgorCisgPiAgYzAxYWE3YzQgYzAxN2MwOTMgYzAxOTlmZTAgYzAxN2MwOTcgYzAxN2MwOTkgIC4uLi4uLi4uLi4uLi4uLi4KKyA+ICBjMDFhYTdkNCBjMDE3YzJmNiBjMDE5OWZlOSBjMDE3ZTdhNSBjMDE5OWZmNSAgLi4uLi4uLi4uLi4uLi4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgaW50ZXJlc3RpbmcgcGFydCEKKyA+ICBjMDFhYTdlNCBjMDE4MGEwOCBjMDE5YTAwMSBjMDE4MGEwYSBjMDE5YTAwNCAgLi4uLi4uLi4uLi4uLi4uLgorCitXaGF0IGhhcHBlbmVkPyBUaGUgYXNzZW1ibHkgZGlyZWN0aXZlcworCisuc2VjdGlvbiAuZml4dXAsImF4IgorLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKwordG9sZCB0aGUgYXNzZW1ibGVyIHRvIG1vdmUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHRoZSBzcGVjaWZpZWQKK3NlY3Rpb25zIGluIHRoZSBFTEYgb2JqZWN0IGZpbGUuIFNvIHRoZSBpbnN0cnVjdGlvbnMKKzM6ICAgICAgbW92bCAkLTE0LCVlYXgKKyAgICAgICAgeG9yYiAlZGwsJWRsCisgICAgICAgIGptcCAyYgorZW5kZWQgdXAgaW4gdGhlIC5maXh1cCBzZWN0aW9uIG9mIHRoZSBvYmplY3QgZmlsZSBhbmQgdGhlIGFkZHJlc3NlcworICAgICAgICAubG9uZyAxYiwzYgorZW5kZWQgdXAgaW4gdGhlIF9fZXhfdGFibGUgc2VjdGlvbiBvZiB0aGUgb2JqZWN0IGZpbGUuIDFiIGFuZCAzYgorYXJlIGxvY2FsIGxhYmVscy4gVGhlIGxvY2FsIGxhYmVsIDFiICgxYiBzdGFuZHMgZm9yIG5leHQgbGFiZWwgMSAKK2JhY2t3YXJkKSBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBtaWdodCBmYXVsdCwgaS5lLiAKK2luIG91ciBjYXNlIHRoZSBhZGRyZXNzIG9mIHRoZSBsYWJlbCAxIGlzIGMwMTdlN2E1OgordGhlIG9yaWdpbmFsIGFzc2VtYmx5IGNvZGU6ID4gMTogICAgICBtb3ZiICglZWJ4KSwlZGwKK2FuZCBsaW5rZWQgaW4gdm1saW51eCAgICAgOiA+IGMwMTdlN2E1IDxkb19jb25fd3JpdGUrZTE+IG1vdmIgICAoJWVieCksJWRsCisKK1RoZSBsb2NhbCBsYWJlbCAzIChiYWNrd2FyZHMgYWdhaW4pIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBjb2RlIHRvIGhhbmRsZQordGhlIGZhdWx0LCBpbiBvdXIgY2FzZSB0aGUgYWN0dWFsIHZhbHVlIGlzIGMwMTk5ZmY1OgordGhlIG9yaWdpbmFsIGFzc2VtYmx5IGNvZGU6ID4gMzogICAgICBtb3ZsICQtMTQsJWVheAorYW5kIGxpbmtlZCBpbiB2bWxpbnV4ICAgICA6ID4gYzAxOTlmZjUgPC5maXh1cCsxMGI1PiBtb3ZsICAgJDB4ZmZmZmZmZjIsJWVheAorCitUaGUgYXNzZW1ibHkgY29kZQorID4gLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKyA+ICAgICAgICAgLmFsaWduIDQKKyA+ICAgICAgICAgLmxvbmcgMWIsM2IKKworYmVjb21lcyB0aGUgdmFsdWUgcGFpcgorID4gIGMwMWFhN2Q0IGMwMTdjMmY2IGMwMTk5ZmU5IGMwMTdlN2E1IGMwMTk5ZmY1ICAuLi4uLi4uLi4uLi4uLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXnRoaXMgaXMgXnRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxYiAgICAgICAzYiAKK2MwMTdlN2E1LGMwMTk5ZmY1IGluIHRoZSBleGNlcHRpb24gdGFibGUgb2YgdGhlIGtlcm5lbC4KKworU28sIHdoYXQgYWN0dWFsbHkgaGFwcGVucyBpZiBhIGZhdWx0IGZyb20ga2VybmVsIG1vZGUgd2l0aCBubyBzdWl0YWJsZQordm1hIG9jY3Vycz8KKworMS4pIGFjY2VzcyB0byBpbnZhbGlkIGFkZHJlc3M6CisgPiBjMDE3ZTdhNSA8ZG9fY29uX3dyaXRlK2UxPiBtb3ZiICAgKCVlYngpLCVkbAorMi4pIE1NVSBnZW5lcmF0ZXMgZXhjZXB0aW9uCiszLikgQ1BVIGNhbGxzIGRvX3BhZ2VfZmF1bHQKKzQuKSBkbyBwYWdlIGZhdWx0IGNhbGxzIHNlYXJjaF9leGNlcHRpb25fdGFibGUgKHJlZ3MtPmVpcCA9PSBjMDE3ZTdhNSk7Cis1Likgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSBsb29rcyB1cCB0aGUgYWRkcmVzcyBjMDE3ZTdhNSBpbiB0aGUKKyAgICBleGNlcHRpb24gdGFibGUgKGkuZS4gdGhlIGNvbnRlbnRzIG9mIHRoZSBFTEYgc2VjdGlvbiBfX2V4X3RhYmxlKSAKKyAgICBhbmQgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgYXNzb2NpYXRlZCBmYXVsdCBoYW5kbGUgY29kZSBjMDE5OWZmNS4KKzYuKSBkb19wYWdlX2ZhdWx0IG1vZGlmaWVzIGl0cyBvd24gcmV0dXJuIGFkZHJlc3MgdG8gcG9pbnQgdG8gdGhlIGZhdWx0IAorICAgIGhhbmRsZSBjb2RlIGFuZCByZXR1cm5zLgorNy4pIGV4ZWN1dGlvbiBjb250aW51ZXMgaW4gdGhlIGZhdWx0IGhhbmRsaW5nIGNvZGUuCis4LikgOGEpIEVBWCBiZWNvbWVzIC1FRkFVTFQgKD09IC0xNCkKKyAgICA4YikgREwgIGJlY29tZXMgemVybyAodGhlIHZhbHVlIHdlICJyZWFkIiBmcm9tIHVzZXIgc3BhY2UpCisgICAgOGMpIGV4ZWN1dGlvbiBjb250aW51ZXMgYXQgbG9jYWwgbGFiZWwgMiAoYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgaW5zdHJ1Y3Rpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGZhdWx0aW5nIHVzZXIgYWNjZXNzKS4KKworVGhlIHN0ZXBzIDhhIHRvIDhjIGluIGEgY2VydGFpbiB3YXkgZW11bGF0ZSB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uCisKK1RoYXQncyBpdCwgbW9zdGx5LiBJZiB5b3UgbG9vayBhdCBvdXIgZXhhbXBsZSwgeW91IG1pZ2h0IGFzayB3aHkKK3dlIHNldCBFQVggdG8gLUVGQVVMVCBpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgY29kZS4gV2VsbCwgdGhlCitnZXRfdXNlciBtYWNybyBhY3R1YWxseSByZXR1cm5zIGEgdmFsdWU6IDAsIGlmIHRoZSB1c2VyIGFjY2VzcyB3YXMKK3N1Y2Nlc3NmdWwsIC1FRkFVTFQgb24gZmFpbHVyZS4gT3VyIG9yaWdpbmFsIGNvZGUgZGlkIG5vdCB0ZXN0IHRoaXMKK3JldHVybiB2YWx1ZSwgaG93ZXZlciB0aGUgaW5saW5lIGFzc2VtYmx5IGNvZGUgaW4gZ2V0X3VzZXIgdHJpZXMgdG8KK3JldHVybiAtRUZBVUxULiBHQ0Mgc2VsZWN0ZWQgRUFYIHRvIHJldHVybiB0aGlzIHZhbHVlLgorCitOT1RFOgorRHVlIHRvIHRoZSB3YXkgdGhhdCB0aGUgZXhjZXB0aW9uIHRhYmxlIGlzIGJ1aWx0IGFuZCBuZWVkcyB0byBiZSBvcmRlcmVkLAorb25seSB1c2UgZXhjZXB0aW9ucyBmb3IgY29kZSBpbiB0aGUgLnRleHQgc2VjdGlvbi4gIEFueSBvdGhlciBzZWN0aW9uCit3aWxsIGNhdXNlIHRoZSBleGNlcHRpb24gdGFibGUgdG8gbm90IGJlIHNvcnRlZCBjb3JyZWN0bHksIGFuZCB0aGUKK2V4Y2VwdGlvbnMgd2lsbCBmYWlsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vZmIvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlODlhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvMDAtSU5ERVgKQEAgLTAsMCArMSwyNSBAQAorSW5kZXggb2YgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9mYi4gIElmIHlvdSB0aGluayBzb21ldGhpbmcgYWJvdXQgZnJhbWUKK2J1ZmZlciBkZXZpY2VzIG5lZWRzIGFuIGVudHJ5IGhlcmUsIG5lZWRzIGNvcnJlY3Rpb24gb3IgeW91J3ZlIHdyaXR0ZW4gb25lCitwbGVhc2UgbWFpbCBtZS4KKwkJCQkgICAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBsaW51eC1tNjhrLm9yZz4KKworMDAtSU5ERVgKKwktIHRoaXMgZmlsZQorZnJhbWVidWZmZXIudHh0CisJLSBpbnRyb2R1Y3Rpb24gdG8gZnJhbWUgYnVmZmVyIGRldmljZXMKK2ludGVybmFscy50eHQKKwktIHF1aWNrIG92ZXJ2aWV3IG9mIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaW50ZXJuYWxzCittb2RlZGIudHh0CisJLSBpbmZvIG9uIHRoZSB2aWRlbyBtb2RlIGRhdGFiYXNlCithdHkxMjhmYi50eHQKKwktIGluZm8gb24gdGhlIEFUSSBSYWdlMTI4IGZyYW1lIGJ1ZmZlciBkcml2ZXIKK2NsZ2VuZmIudHh0CisJLSBpbmZvIG9uIHRoZSBDaXJydXMgTG9naWMgZnJhbWUgYnVmZmVyIGRyaXZlcgorbWF0cm94ZmIudHh0CisJLSBpbmZvIG9uIHRoZSBNYXRyb3ggZnJhbWUgYnVmZmVyIGRyaXZlcgorcHZyMmZiLnR4dAorCS0gaW5mbyBvbiB0aGUgUG93ZXJWUiAyIGZyYW1lIGJ1ZmZlciBkcml2ZXIKK3RnYWZiLnR4dAorCS0gaW5mbyBvbiB0aGUgVEdBIChERUNDaGlwIDIxMDMwKSBmcmFtZSBidWZmZXIgZHJpdmVyCit2ZXNhZmIudHh0CisJLSBpbmZvIG9uIHRoZSBWRVNBIGZyYW1lIGJ1ZmZlciBkZXZpY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvYXR5MTI4ZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9hdHkxMjhmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5MjYyZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvYXR5MTI4ZmIudHh0CkBAIC0wLDAgKzEsNzIgQEAKK1tUaGlzIGZpbGUgaXMgY2xvbmVkIGZyb20gVmVzYUZCL21hdHJveGZiXQorCitXaGF0IGlzIGF0eTEyOGZiPworPT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBncmFwaGljIGZyYW1lYnVmZmVyIGZvciBBVEkgUmFnZTEyOCBiYXNlZCBkZXZpY2VzCitvbiBJbnRlbCBhbmQgUFBDIGJveGVzLgorCitBZHZhbnRhZ2VzOgorCisgKiBJdCBwcm92aWRlcyBhIG5pY2UgbGFyZ2UgY29uc29sZSAoMTI4IGNvbHMgKyA0OCBsaW5lcyB3aXRoIDEwMjR4NzY4KQorICAgd2l0aG91dCB1c2luZyB0aW55LCB1bnJlYWRhYmxlIGZvbnRzLgorICogWW91IGNhbiBydW4gWEY2OF9GQkRldiBvbiB0b3Agb2YgL2Rldi9mYjAKKyAqIE1vc3QgaW1wb3J0YW50OiBib290IGxvZ28gOi0pCisKK0Rpc2FkdmFudGFnZXM6CisKKyAqIGdyYXBoaWMgbW9kZSBpcyBzbG93ZXIgdGhhbiB0ZXh0IG1vZGUuLi4gYnV0IHlvdSBzaG91bGQgbm90IG5vdGljZQorICAgaWYgeW91IHVzZSBzYW1lIHJlc29sdXRpb24gYXMgeW91IHVzZWQgaW4gdGV4dG1vZGUuCisgKiBzdGlsbCBleHBlcmltZW50YWwuCisKKworSG93IHRvIHVzZSBpdD8KKz09PT09PT09PT09PT09CisKK1N3aXRjaGluZyBtb2RlcyBpcyBkb25lIHVzaW5nIHRoZSAgdmlkZW89YXR5MTI4ZmI6PHJlc29sdXRpb24+Li4uIG1vZGVkYgorYm9vdCBwYXJhbWV0ZXIgb3IgdXNpbmcgYGZic2V0JyBwcm9ncmFtLgorCitTZWUgRG9jdW1lbnRhdGlvbi9mYi9tb2RlZGIudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIG1vZGVkYgorcmVzb2x1dGlvbnMuCisKK1lvdSBzaG91bGQgY29tcGlsZSBpbiBib3RoIHZnYWNvbiAodG8gYm9vdCBpZiB5b3UgcmVtb3ZlIHlvdXIgUmFnZTEyOCBmcm9tCitib3gpIGFuZCBhdHkxMjhmYiAoZm9yIGdyYXBoaWNzIG1vZGUpLiBZb3Ugc2hvdWxkIG5vdCBjb21waWxlLWluIHZlc2FmYgordW5sZXNzIHlvdSBoYXZlIHByaW1hcnkgZGlzcGxheSBvbiBub24tUmFnZTEyOCBWQkUyLjAgZGV2aWNlIChzZWUgCitEb2N1bWVudGF0aW9uL2ZiL3Zlc2FmYi50eHQgZm9yIGRldGFpbHMpLgorCisKK1gxMQorPT09CisKK1hGNjhfRkJEZXYgc2hvdWxkIGdlbmVyYWxseSB3b3JrIGZpbmUsIGJ1dCBpdCBpcyBub24tYWNjZWxlcmF0ZWQuIEFzIG9mCit0aGlzIGRvY3VtZW50LCA4IGFuZCAzMmJwcCB3b3JrcyBmaW5lLiAgVGhlcmUgaGF2ZSBiZWVuIHBhbGV0dGUgaXNzdWVzCit3aGVuIHN3aXRjaGluZyBmcm9tIFggdG8gY29uc29sZSBhbmQgYmFjayB0byBYLiAgWW91IHdpbGwgaGF2ZSB0byByZXN0YXJ0CitYIHRvIGZpeCB0aGlzLgorCisKK0NvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT0KKworWW91IGNhbiBwYXNzIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB2ZXNhZmIgd2l0aAorYHZpZGVvPWF0eTEyOGZiOm9wdGlvbjEsb3B0aW9uMjp2YWx1ZTIsb3B0aW9uMycgKG11bHRpcGxlIG9wdGlvbnMgc2hvdWxkCitiZSBzZXBhcmF0ZWQgYnkgY29tbWEsIHZhbHVlcyBhcmUgc2VwYXJhdGVkIGZyb20gb3B0aW9ucyBieSBgOicpLiAKK0FjY2VwdGVkIG9wdGlvbnM6CisKK25vYWNjZWwgIC0gZG8gbm90IHVzZSBhY2NlbGVyYXRpb24gZW5naW5lLiBJdCBpcyBkZWZhdWx0LgorYWNjZWwgICAgLSB1c2UgYWNjZWxlcmF0aW9uIGVuZ2luZS4gTm90IGZpbmlzaGVkLgordm1vZGU6eCAgLSBjaG9vc2VzIFBvd2VyTWFjaW50b3NoIHZpZGVvIG1vZGUgPHg+LiBEZXByZWNpYXRlZC4KK2Ntb2RlOnggIC0gY2hvb3NlcyBQb3dlck1hY2ludG9zaCBjb2xvdXIgbW9kZSA8eD4uIERlcHJlY2lhdGVkLgorPFh4WEBYPiAgLSBzZWxlY3RzIHN0YXJ0dXAgdmlkZW9tb2RlLiBTZWUgbW9kZWRiLnR4dCBmb3IgZGV0YWlsZWQKKwkgICBleHBsYW5hdGlvbi4gRGVmYXVsdCBpcyA2NDB4NDgweDhicHAuCisKKworTGltaXRhdGlvbnMKKz09PT09PT09PT09CisKK1RoZXJlIGFyZSBrbm93biBhbmQgdW5rbm93biBidWdzLCBmZWF0dXJlcyBhbmQgbWlzZmVhdHVyZXMuCitDdXJyZW50bHkgdGhlcmUgYXJlIGZvbGxvd2luZyBrbm93biBidWdzOgorICsgVGhpcyBkcml2ZXIgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBpcyBub3QgZmluaXNoZWQuICBUb28gbWFueQorICAgYnVncy9lcnJhdGEgdG8gbGlzdCBoZXJlLgorCistLQorQnJhZCBEb3VnbGFzIDxicmFkQG5lcnVvLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvY2lycnVzZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9jaXJydXNmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0MzY4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvY2lycnVzZmIudHh0CkBAIC0wLDAgKzEsOTcgQEAKKworCQlGcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIENpcnJ1cyBMb2dpYyBjaGlwc2V0cworCQlDb3B5cmlnaHQgMTk5OSBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CisKKworCit7IGp1c3QgYSBsaXR0bGUgc29tZXRoaW5nIHRvIGdldCBwZW9wbGUgZ29pbmc7IGNvbnRyaWJ1dG9ycyB3ZWxjb21lISB9CisKKworCitDaGlwIGZhbWlsaWVzIHN1cHBvcnRlZDoKKwlTRDY0CisJUGljY29sbworCVBpY2Fzc28KKwlTcGVjdHJ1bQorCUFscGluZSAoR0QtNTQzeC80eCkKKwlQaWNhc3NvNCAoR0QtNTQ0NikKKwlHRC01NDgwCisJTGFndW5hIChHRC01NDZ4KQorCitCdXMncyBzdXBwb3J0ZWQ6CisJUENJCisJWm9ycm8KKworQXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQ6CisJaTM4NgorCUFscGhhCisJUFBDIChNb3Rvcm9sYSBQb3dlcnN0YWNrKQorCW02OGsgKEFtaWdhKQorCisKKworRGVmYXVsdCB2aWRlbyBtb2RlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorQXQgdGhlIG1vbWVudCwgdGhlcmUgYXJlIHR3byBrZXJuZWwgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBzdXBwb3J0ZWQ6CisKK21vZGU6NjQweDQ4MAorbW9kZTo4MDB4NjAwCisJb3IKK21vZGU6MTAyNHg3NjgKKworRnVsbCBzdXBwb3J0IGZvciBzdGFydHVwIHZpZGVvIG1vZGVzIChtb2RlZGIpIHdpbGwgYmUgaW50ZWdyYXRlZCBzb29uLgorCitWZXJzaW9uIDEuOS45LjEKKy0tLS0tLS0tLS0tLS0tLQorKiBGaXggbWVtb3J5IGRldGVjdGlvbiBmb3IgNTEya0IgY2FzZQorKiA4MDB4NjAwIG1vZGUKKyogRml4ZWQgdGltaW5ncworKiBIaW50IGZvciBBWFA6IFVzZSAtYWNjZWwgZmFsc2UgLXZ5cmVzIC0xIHdoZW4gY2hhbmdpbmcgcmVzb2x1dGlvbgorCisKK1ZlcnNpb24gMS45LjQuNAorLS0tLS0tLS0tLS0tLS0tCisqIFByZWxpbWluYXJ5IExhZ3VuYSBzdXBwb3J0CisqIE92ZXJoYXVsIGNvbG9yIHJlZ2lzdGVyIHJvdXRpbmVzLgorKiBBc3NvY2lhdGVkIHdpdGggdGhlIGFib3ZlLCBjb25zb2xlIGNvbG9ycyBhcmUgbm93IG9idGFpbmVkIGZyb20gYSBMVVQKKyAgY2FsbGVkICdwYWxldHRlJyBpbnN0ZWFkIG9mIGZyb20gdGhlIFZHQSByZWdpc3RlcnMuICBUaGlzIGNvZGUgd2FzCisgIG1vZGVsZWQgYWZ0ZXIgdGhhdCBpbiBhdHlmYiBhbmQgbWF0cm94ZmIuCisqIENvZGUgY2xlYW51cCwgYWRkIGNvbW1lbnRzLgorKiBPdmVyaGF1bCBTUjA3IGhhbmRsaW5nLgorKiBCdWcgZml4ZXMuCisKKworVmVyc2lvbiAxLjkuNC4zCistLS0tLS0tLS0tLS0tLS0KKyogQ29ycmVjdGx5IHNldCBkZWZhdWx0IHN0YXJ0dXAgdmlkZW8gbW9kZS4KKyogRG8gbm90IG92ZXJyaWRlIHJhbSBzaXplIHNldHRpbmcuICBEZWZpbmUKKyAgQ0xHRU5fVVNFX0hBUkRDT0RFRF9SQU1fU0VUVElOR1MgaWYgeW91IF9kb18gd2FudCB0byBvdmVycmlkZSB0aGUgUkFNCisgIHNldHRpbmcuCisqIENvbXBpbGUgZml4ZXMgcmVsYXRlZCB0byBuZXcgMi4zLnggSU9SRVNPVVJDRV9JT1tQT1JUXSBzeW1ib2wgY2hhbmdlcy4KKyogVXNlIG5ldyAyLjMueCByZXNvdXJjZSBhbGxvY2F0aW9uLgorKiBTb21lIGNvZGUgY2xlYW51cC4KKworCitWZXJzaW9uIDEuOS40LjIKKy0tLS0tLS0tLS0tLS0tLQorKiBDYXN0aW5nIGZpeGVzLgorKiBBc3NlcnRpb25zIG5vIGxvbmdlciBjYXVzZSBhbiBvb3BzIG9uIHB1cnBvc2UuCisqIEJ1ZyBmaXhlcy4KKworCitWZXJzaW9uIDEuOS40LjEKKy0tLS0tLS0tLS0tLS0tLQorKiBBZGQgY29tcGF0aWJpbGl0eSBzdXBwb3J0LiAgTm93IHJlcXVpcmVzIGEgMi4xLngsIDIuMi54IG9yIDIuMy54IGtlcm5lbC4KKworCitWZXJzaW9uIDEuOS40CistLS0tLS0tLS0tLS0tCisqIFNldmVyYWwgZW5oYW5jZW1lbnRzLCBzbWFsbGVyIG1lbW9yeSBmb290cHJpbnQsIGEgZmV3IGJ1Z2ZpeGVzLgorKiBSZXF1aXJlcyBrZXJuZWwgMi4zLjE0LXByZTEgb3IgbGF0ZXIuCisKKworVmVyc2lvbiAxLjkuMworLS0tLS0tLS0tLS0tLQorKiBCdW5kbGVkIHdpdGgga2VybmVsIDIuMy4xNC1wcmUxIG9yIGxhdGVyLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvZnJhbWVidWZmZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9mcmFtZWJ1ZmZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwZTc4MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvZnJhbWVidWZmZXIudHh0CkBAIC0wLDAgKzEsMzQ1IEBACisJCQlUaGUgRnJhbWUgQnVmZmVyIERldmljZQorCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFpbnRhaW5lZCBieSBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgorTGFzdCByZXZpc2VkOiBNYXkgMTAsIDIwMDEKKworCiswLiBJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnJhbWUgYnVmZmVyIGRldmljZSBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBmb3IgdGhlIGdyYXBoaWNzIGhhcmR3YXJlLiBJdAorcmVwcmVzZW50cyB0aGUgZnJhbWUgYnVmZmVyIG9mIHNvbWUgdmlkZW8gaGFyZHdhcmUgYW5kIGFsbG93cyBhcHBsaWNhdGlvbgorc29mdHdhcmUgdG8gYWNjZXNzIHRoZSBncmFwaGljcyBoYXJkd2FyZSB0aHJvdWdoIGEgd2VsbC1kZWZpbmVkIGludGVyZmFjZSwgc28KK3RoZSBzb2Z0d2FyZSBkb2Vzbid0IG5lZWQgdG8ga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbG93LWxldmVsIChoYXJkd2FyZQorcmVnaXN0ZXIpIHN0dWZmLgorCitUaGUgZGV2aWNlIGlzIGFjY2Vzc2VkIHRocm91Z2ggc3BlY2lhbCBkZXZpY2Ugbm9kZXMsIHVzdWFsbHkgbG9jYXRlZCBpbiB0aGUKKy9kZXYgZGlyZWN0b3J5LCBpLmUuIC9kZXYvZmIqLgorCisKKzEuIFVzZXIncyBWaWV3IG9mIC9kZXYvZmIqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIHRoZSB1c2VyJ3MgcG9pbnQgb2YgdmlldywgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgbG9va3MganVzdCBsaWtlIGFueQorb3RoZXIgZGV2aWNlIGluIC9kZXYuIEl0J3MgYSBjaGFyYWN0ZXIgZGV2aWNlIHVzaW5nIG1ham9yIDI5OyB0aGUgbWlub3IKK3NwZWNpZmllcyB0aGUgZnJhbWUgYnVmZmVyIG51bWJlci4KKworQnkgY29udmVudGlvbiwgdGhlIGZvbGxvd2luZyBkZXZpY2Ugbm9kZXMgYXJlIHVzZWQgKG51bWJlcnMgaW5kaWNhdGUgdGhlIGRldmljZQorbWlub3IgbnVtYmVycyk6CisKKyAgICAgIDAgPSAvZGV2L2ZiMAlGaXJzdCBmcmFtZSBidWZmZXIKKyAgICAgIDEgPSAvZGV2L2ZiMQlTZWNvbmQgZnJhbWUgYnVmZmVyCisJICAuLi4KKyAgICAgMzEgPSAvZGV2L2ZiMzEJMzJuZCBmcmFtZSBidWZmZXIKKworRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB5b3UgbWF5IHdhbnQgdG8gY3JlYXRlIHRoZSBmb2xsb3dpbmcgc3ltYm9saWMKK2xpbmtzOgorCisgICAgL2Rldi9mYjBjdXJyZW50IC0+IGZiMAorICAgIC9kZXYvZmIxY3VycmVudCAtPiBmYjEKKworYW5kIHNvIG9uLi4uCisKK1RoZSBmcmFtZSBidWZmZXIgZGV2aWNlcyBhcmUgYWxzbyBgbm9ybWFsJyBtZW1vcnkgZGV2aWNlcywgdGhpcyBtZWFucywgeW91IGNhbgorcmVhZCBhbmQgd3JpdGUgdGhlaXIgY29udGVudHMuIFlvdSBjYW4sIGZvciBleGFtcGxlLCBtYWtlIGEgc2NyZWVuIHNuYXBzaG90IGJ5CisKKyAgY3AgL2Rldi9mYjAgbXlmaWxlCisKK1RoZXJlIGFsc28gY2FuIGJlIG1vcmUgdGhhbiBvbmUgZnJhbWUgYnVmZmVyIGF0IGEgdGltZSwgZS5nLiBpZiB5b3UgaGF2ZSBhCitncmFwaGljcyBjYXJkIGluIGFkZGl0aW9uIHRvIHRoZSBidWlsdC1pbiBoYXJkd2FyZS4gVGhlIGNvcnJlc3BvbmRpbmcgZnJhbWUKK2J1ZmZlciBkZXZpY2VzICgvZGV2L2ZiMCBhbmQgL2Rldi9mYjEgZXRjLikgd29yayBpbmRlcGVuZGVudGx5LgorCitBcHBsaWNhdGlvbiBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgKGUuZy4gdGhlIFggc2VydmVyKSB3aWxsCit1c2UgL2Rldi9mYjAgYnkgZGVmYXVsdCAob2xkZXIgc29mdHdhcmUgdXNlcyAvZGV2L2ZiMGN1cnJlbnQpLiBZb3UgY2FuIHNwZWNpZnkKK2FuIGFsdGVybmF0aXZlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyRGUkFNRUJVRkZFUiB0byB0aGUgcGF0aCBuYW1lIG9mIGEgZnJhbWUgYnVmZmVyIGRldmljZSwgZS5nLiAoZm9yIHNoL2Jhc2gKK3VzZXJzKToKKworICAgIGV4cG9ydCBGUkFNRUJVRkZFUj0vZGV2L2ZiMQorCitvciAoZm9yIGNzaCB1c2Vycyk6CisKKyAgICBzZXRlbnYgRlJBTUVCVUZGRVIgL2Rldi9mYjEKKworQWZ0ZXIgdGhpcyB0aGUgWCBzZXJ2ZXIgd2lsbCB1c2UgdGhlIHNlY29uZCBmcmFtZSBidWZmZXIuCisKKworMi4gUHJvZ3JhbW1lcidzIFZpZXcgb2YgL2Rldi9mYioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHlvdSBhbHJlYWR5IGtub3csIGEgZnJhbWUgYnVmZmVyIGRldmljZSBpcyBhIG1lbW9yeSBkZXZpY2UgbGlrZSAvZGV2L21lbSBhbmQKK2l0IGhhcyB0aGUgc2FtZSBmZWF0dXJlcy4gWW91IGNhbiByZWFkIGl0LCB3cml0ZSBpdCwgc2VlayB0byBzb21lIGxvY2F0aW9uIGluCitpdCBhbmQgbW1hcCgpIGl0ICh0aGUgbWFpbiB1c2FnZSkuIFRoZSBkaWZmZXJlbmNlIGlzIGp1c3QgdGhhdCB0aGUgbWVtb3J5IHRoYXQKK2FwcGVhcnMgaW4gdGhlIHNwZWNpYWwgZmlsZSBpcyBub3QgdGhlIHdob2xlIG1lbW9yeSwgYnV0IHRoZSBmcmFtZSBidWZmZXIgb2YKK3NvbWUgdmlkZW8gaGFyZHdhcmUuCisKKy9kZXYvZmIqIGFsc28gYWxsb3dzIHNldmVyYWwgaW9jdGxzIG9uIGl0LCBieSB3aGljaCBsb3RzIG9mIGluZm9ybWF0aW9uIGFib3V0Cit0aGUgaGFyZHdhcmUgY2FuIGJlIHF1ZXJpZWQgYW5kIHNldC4gVGhlIGNvbG9yIG1hcCBoYW5kbGluZyB3b3JrcyB2aWEgaW9jdGxzLAordG9vLiBMb29rIGludG8gPGxpbnV4L2ZiLmg+IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHdoYXQgaW9jdGxzIGV4aXN0IGFuZCBvbgord2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgd29yay4gSGVyZSdzIGp1c3QgYSBicmllZiBvdmVydmlldzoKKworICAtIFlvdSBjYW4gcmVxdWVzdCB1bmNoYW5nZWFibGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhcmR3YXJlLCBsaWtlIG5hbWUsCisgICAgb3JnYW5pemF0aW9uIG9mIHRoZSBzY3JlZW4gbWVtb3J5IChwbGFuZXMsIHBhY2tlZCBwaXhlbHMsIC4uLikgYW5kIGFkZHJlc3MKKyAgICBhbmQgbGVuZ3RoIG9mIHRoZSBzY3JlZW4gbWVtb3J5LgorCisgIC0gWW91IGNhbiByZXF1ZXN0IGFuZCBjaGFuZ2UgdmFyaWFibGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhcmR3YXJlLCBsaWtlCisgICAgdmlzaWJsZSBhbmQgdmlydHVhbCBnZW9tZXRyeSwgZGVwdGgsIGNvbG9yIG1hcCBmb3JtYXQsIHRpbWluZywgYW5kIHNvIG9uLgorICAgIElmIHlvdSB0cnkgdG8gY2hhbmdlIHRoYXQgaW5mb3JtYXRpb24sIHRoZSBkcml2ZXIgbWF5YmUgd2lsbCByb3VuZCB1cCBzb21lCisgICAgdmFsdWVzIHRvIG1lZXQgdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzIChvciByZXR1cm4gRUlOVkFMIGlmIHRoYXQgaXNuJ3QKKyAgICBwb3NzaWJsZSkuCisKKyAgLSBZb3UgY2FuIGdldCBhbmQgc2V0IHBhcnRzIG9mIHRoZSBjb2xvciBtYXAuIENvbW11bmljYXRpb24gaXMgZG9uZSB3aXRoIDE2CisgICAgYml0cyBwZXIgY29sb3IgcGFydCAocmVkLCBncmVlbiwgYmx1ZSwgdHJhbnNwYXJlbmN5KSB0byBzdXBwb3J0IGFsbCAKKyAgICBleGlzdGluZyBoYXJkd2FyZS4gVGhlIGRyaXZlciBkb2VzIGFsbCB0aGUgY29tcHV0YXRpb25zIG5lZWRlZCB0byBhcHBseSAKKyAgICBpdCB0byB0aGUgaGFyZHdhcmUgKHJvdW5kIGl0IGRvd24gdG8gbGVzcyBiaXRzLCBtYXliZSB0aHJvdyBhd2F5IAorICAgIHRyYW5zcGFyZW5jeSkuCisKK0FsbCB0aGlzIGhhcmR3YXJlIGFic3RyYWN0aW9uIG1ha2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhcHBsaWNhdGlvbiBwcm9ncmFtcworZWFzaWVyIGFuZCBtb3JlIHBvcnRhYmxlLiBFLmcuIHRoZSBYIHNlcnZlciB3b3JrcyBjb21wbGV0ZWx5IG9uIC9kZXYvZmIqIGFuZAordGh1cyBkb2Vzbid0IG5lZWQgdG8ga25vdywgZm9yIGV4YW1wbGUsIGhvdyB0aGUgY29sb3IgcmVnaXN0ZXJzIG9mIHRoZSBjb25jcmV0ZQoraGFyZHdhcmUgYXJlIG9yZ2FuaXplZC4gWEY2OF9GQkRldiBpcyBhIGdlbmVyYWwgWCBzZXJ2ZXIgZm9yIGJpdG1hcHBlZCwKK3VuYWNjZWxlcmF0ZWQgdmlkZW8gaGFyZHdhcmUuIFRoZSBvbmx5IHRoaW5nIHRoYXQgaGFzIHRvIGJlIGJ1aWx0IGludG8KK2FwcGxpY2F0aW9uIHByb2dyYW1zIGlzIHRoZSBzY3JlZW4gb3JnYW5pemF0aW9uIChiaXRwbGFuZXMgb3IgY2h1bmt5IHBpeGVscworZXRjLiksIGJlY2F1c2UgaXQgd29ya3Mgb24gdGhlIGZyYW1lIGJ1ZmZlciBpbWFnZSBkYXRhIGRpcmVjdGx5LgorCitGb3IgdGhlIGZ1dHVyZSBpdCBpcyBwbGFubmVkIHRoYXQgZnJhbWUgYnVmZmVyIGRyaXZlcnMgZm9yIGdyYXBoaWNzIGNhcmRzIGFuZAordGhlIGxpa2UgY2FuIGJlIGltcGxlbWVudGVkIGFzIGtlcm5lbCBtb2R1bGVzIHRoYXQgYXJlIGxvYWRlZCBhdCBydW50aW1lLiBTdWNoCithIGRyaXZlciBqdXN0IGhhcyB0byBjYWxsIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkgYW5kIHN1cHBseSBzb21lIGZ1bmN0aW9ucy4KK1dyaXRpbmcgYW5kIGRpc3RyaWJ1dGluZyBzdWNoIGRyaXZlcnMgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBrZXJuZWwgd2lsbCBzYXZlCittdWNoIHRyb3VibGUuLi4KKworCiszLiBGcmFtZSBCdWZmZXIgUmVzb2x1dGlvbiBNYWludGVuYW5jZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnJhbWUgYnVmZmVyIHJlc29sdXRpb25zIGFyZSBtYWludGFpbmVkIHVzaW5nIHRoZSB1dGlsaXR5IGBmYnNldCcuIEl0IGNhbgorY2hhbmdlIHRoZSB2aWRlbyBtb2RlIHByb3BlcnRpZXMgb2YgYSBmcmFtZSBidWZmZXIgZGV2aWNlLiBJdHMgbWFpbiB1c2FnZSBpcwordG8gY2hhbmdlIHRoZSBjdXJyZW50IHZpZGVvIG1vZGUsIGUuZy4gZHVyaW5nIGJvb3QgdXAgaW4gb25lIG9mIHlvdXIgL2V0Yy9yYy4qCitvciAvZXRjL2luaXQuZC8qIGZpbGVzLgorCitGYnNldCB1c2VzIGEgdmlkZW8gbW9kZSBkYXRhYmFzZSBzdG9yZWQgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUsIHNvIHlvdSBjYW4KK2Vhc2lseSBhZGQgeW91ciBvd24gbW9kZXMgYW5kIHJlZmVyIHRvIHRoZW0gd2l0aCBhIHNpbXBsZSBpZGVudGlmaWVyLgorCisKKzQuIFRoZSBYIFNlcnZlcgorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBYIHNlcnZlciAoWEY2OF9GQkRldikgaXMgdGhlIG1vc3Qgbm90YWJsZSBhcHBsaWNhdGlvbiBwcm9ncmFtIGZvciB0aGUgZnJhbWUKK2J1ZmZlciBkZXZpY2UuIFN0YXJ0aW5nIHdpdGggWEZyZWU4NiByZWxlYXNlIDMuMiwgdGhlIFggc2VydmVyIGlzIHBhcnQgb2YKK1hGcmVlODYgYW5kIGhhcyAyIG1vZGVzOgorCisgIC0gSWYgdGhlIGBEaXNwbGF5JyBzdWJzZWN0aW9uIGZvciB0aGUgYGZiZGV2JyBkcml2ZXIgaW4gdGhlIC9ldGMvWEY4NkNvbmZpZworICAgIGZpbGUgY29udGFpbnMgYQorCisJTW9kZXMgImRlZmF1bHQiCisKKyAgICBsaW5lLCB0aGUgWCBzZXJ2ZXIgd2lsbCB1c2UgdGhlIHNjaGVtZSBkaXNjdXNzZWQgYWJvdmUsIGkuZS4gaXQgd2lsbCBzdGFydAorICAgIHVwIGluIHRoZSByZXNvbHV0aW9uIGRldGVybWluZWQgYnkgL2Rldi9mYjAgKG9yICRGUkFNRUJVRkZFUiwgaWYgc2V0KS4gWW91CisgICAgc3RpbGwgaGF2ZSB0byBzcGVjaWZ5IHRoZSBjb2xvciBkZXB0aCAodXNpbmcgdGhlIERlcHRoIGtleXdvcmQpIGFuZCB2aXJ0dWFsCisgICAgcmVzb2x1dGlvbiAodXNpbmcgdGhlIFZpcnR1YWwga2V5d29yZCkgdGhvdWdoLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciB0aGUKKyAgICBjb25maWd1cmF0aW9uIGZpbGUgc3VwcGxpZWQgd2l0aCBYRnJlZTg2LiBJdCdzIHRoZSBtb3N0IHNpbXBsZQorICAgIGNvbmZpZ3VyYXRpb24sIGJ1dCBpdCBoYXMgc29tZSBsaW1pdGF0aW9ucy4KKworICAtIFRoZXJlZm9yZSBpdCdzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSByZXNvbHV0aW9ucyBpbiB0aGUgL2V0Yy9YRjg2Q29uZmlnCisgICAgZmlsZS4gVGhpcyBhbGxvd3MgZm9yIG9uLXRoZS1mbHkgcmVzb2x1dGlvbiBzd2l0Y2hpbmcgd2hpbGUgcmV0YWluaW5nIHRoZQorICAgIHNhbWUgdmlydHVhbCBkZXNrdG9wIHNpemUuIFRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIHRoYXQncyB1c2VkIGlzIHN0aWxsCisgICAgL2Rldi9mYjBjdXJyZW50IChvciAkRlJBTUVCVUZGRVIpLCBidXQgdGhlIGF2YWlsYWJsZSByZXNvbHV0aW9ucyBhcmUKKyAgICBkZWZpbmVkIGJ5IC9ldGMvWEY4NkNvbmZpZyBub3cuIFRoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB5b3UgaGF2ZSB0bworICAgIHNwZWNpZnkgdGhlIHRpbWluZ3MgaW4gYSBkaWZmZXJlbnQgZm9ybWF0IChidXQgYGZic2V0IC14JyBtYXkgaGVscCkuCisKK1RvIHR1bmUgYSB2aWRlbyBtb2RlLCB5b3UgY2FuIHVzZSBmYnNldCBvciB4dmlkdHVuZS4gTm90ZSB0aGF0IHh2aWR0dW5lIGRvZXNuJ3QKK3dvcmsgMTAwJSB3aXRoIFhGNjhfRkJEZXY6IHRoZSByZXBvcnRlZCBjbG9jayB2YWx1ZXMgYXJlIGFsd2F5cyBpbmNvcnJlY3QuCisKKworNS4gVmlkZW8gTW9kZSBUaW1pbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBtb25pdG9yIGRyYXdzIGFuIGltYWdlIG9uIHRoZSBzY3JlZW4gYnkgdXNpbmcgYW4gZWxlY3Ryb24gYmVhbSAoMyBlbGVjdHJvbgorYmVhbXMgZm9yIGNvbG9yIG1vZGVscywgMSBlbGVjdHJvbiBiZWFtIGZvciBtb25vY2hyb21lIG1vbml0b3JzKS4gVGhlIGZyb250IG9mCit0aGUgc2NyZWVuIGlzIGNvdmVyZWQgYnkgYSBwYXR0ZXJuIG9mIGNvbG9yZWQgcGhvc3Bob3JzIChwaXhlbHMpLiBJZiBhIHBob3NwaG9yCitpcyBoaXQgYnkgYW4gZWxlY3Ryb24sIGl0IGVtaXRzIGEgcGhvdG9uIGFuZCB0aHVzIGJlY29tZXMgdmlzaWJsZS4KKworVGhlIGVsZWN0cm9uIGJlYW0gZHJhd3MgaG9yaXpvbnRhbCBsaW5lcyAoc2NhbmxpbmVzKSBmcm9tIGxlZnQgdG8gcmlnaHQsIGFuZAorZnJvbSB0aGUgdG9wIHRvIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi4gQnkgbW9kaWZ5aW5nIHRoZSBpbnRlbnNpdHkgb2YgdGhlCitlbGVjdHJvbiBiZWFtLCBwaXhlbHMgd2l0aCB2YXJpb3VzIGNvbG9ycyBhbmQgaW50ZW5zaXRpZXMgY2FuIGJlIHNob3duLgorCitBZnRlciBlYWNoIHNjYW5saW5lIHRoZSBlbGVjdHJvbiBiZWFtIGhhcyB0byBtb3ZlIGJhY2sgdG8gdGhlIGxlZnQgc2lkZSBvZiB0aGUKK3NjcmVlbiBhbmQgdG8gdGhlIG5leHQgbGluZTogdGhpcyBpcyBjYWxsZWQgdGhlIGhvcml6b250YWwgcmV0cmFjZS4gQWZ0ZXIgdGhlCit3aG9sZSBzY3JlZW4gKGZyYW1lKSB3YXMgcGFpbnRlZCwgdGhlIGJlYW0gbW92ZXMgYmFjayB0byB0aGUgdXBwZXIgbGVmdCBjb3JuZXI6Cit0aGlzIGlzIGNhbGxlZCB0aGUgdmVydGljYWwgcmV0cmFjZS4gRHVyaW5nIGJvdGggdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsCityZXRyYWNlLCB0aGUgZWxlY3Ryb24gYmVhbSBpcyB0dXJuZWQgb2ZmIChibGFua2VkKS4KKworVGhlIHNwZWVkIGF0IHdoaWNoIHRoZSBlbGVjdHJvbiBiZWFtIHBhaW50cyB0aGUgcGl4ZWxzIGlzIGRldGVybWluZWQgYnkgdGhlCitkb3RjbG9jayBpbiB0aGUgZ3JhcGhpY3MgYm9hcmQuIEZvciBhIGRvdGNsb2NrIG9mIGUuZy4gMjguMzc1MTYgTUh6IChtaWxsaW9ucworb2YgY3ljbGVzIHBlciBzZWNvbmQpLCBlYWNoIHBpeGVsIGlzIDM1MjQyIHBzIChwaWNvc2Vjb25kcykgbG9uZzoKKworICAgIDEvKDI4LjM3NTE2RTYgSHopID0gMzUuMjQyRS05IHMKKworSWYgdGhlIHNjcmVlbiByZXNvbHV0aW9uIGlzIDY0MHg0ODAsIGl0IHdpbGwgdGFrZQorCisgICAgNjQwKjM1LjI0MkUtOSBzID0gMjIuNTU1RS02IHMKKwordG8gcGFpbnQgdGhlIDY0MCAoeHJlcykgcGl4ZWxzIG9uIG9uZSBzY2FubGluZS4gQnV0IHRoZSBob3Jpem9udGFsIHJldHJhY2UKK2Fsc28gdGFrZXMgdGltZSAoZS5nLiAyNzIgYHBpeGVscycpLCBzbyBhIGZ1bGwgc2NhbmxpbmUgdGFrZXMKKworICAgICg2NDArMjcyKSozNS4yNDJFLTkgcyA9IDMyLjE0MUUtNiBzCisKK1dlJ2xsIHNheSB0aGF0IHRoZSBob3Jpem9udGFsIHNjYW5yYXRlIGlzIGFib3V0IDMxIGtIejoKKworICAgIDEvKDMyLjE0MUUtNiBzKSA9IDMxLjExM0UzIEh6CisKK0EgZnVsbCBzY3JlZW4gY291bnRzIDQ4MCAoeXJlcykgbGluZXMsIGJ1dCB3ZSBoYXZlIHRvIGNvbnNpZGVyIHRoZSB2ZXJ0aWNhbAorcmV0cmFjZSB0b28gKGUuZy4gNDkgYGxpbmVzJykuIFNvIGEgZnVsbCBzY3JlZW4gd2lsbCB0YWtlCisKKyAgICAoNDgwKzQ5KSozMi4xNDFFLTYgcyA9IDE3LjAwMkUtMyBzCisKK1RoZSB2ZXJ0aWNhbCBzY2FucmF0ZSBpcyBhYm91dCA1OSBIejoKKworICAgIDEvKDE3LjAwMkUtMyBzKSA9IDU4LjgxNSBIegorCitUaGlzIG1lYW5zIHRoZSBzY3JlZW4gZGF0YSBpcyByZWZyZXNoZWQgYWJvdXQgNTkgdGltZXMgcGVyIHNlY29uZC4gVG8gaGF2ZSBhCitzdGFibGUgcGljdHVyZSB3aXRob3V0IHZpc2libGUgZmxpY2tlciwgVkVTQSByZWNvbW1lbmRzIGEgdmVydGljYWwgc2NhbnJhdGUgb2YKK2F0IGxlYXN0IDcyIEh6LiBCdXQgdGhlIHBlcmNlaXZlZCBmbGlja2VyIGlzIHZlcnkgaHVtYW4gZGVwZW5kZW50OiBzb21lIHBlb3BsZQorY2FuIHVzZSA1MCBIeiB3aXRob3V0IGFueSB0cm91YmxlLCB3aGlsZSBJJ2xsIG5vdGljZSBpZiBpdCdzIGxlc3MgdGhhbiA4MCBIei4KKworU2luY2UgdGhlIG1vbml0b3IgZG9lc24ndCBrbm93IHdoZW4gYSBuZXcgc2NhbmxpbmUgc3RhcnRzLCB0aGUgZ3JhcGhpY3MgYm9hcmQKK3dpbGwgc3VwcGx5IGEgc3luY2hyb25pemF0aW9uIHB1bHNlIChob3Jpem9udGFsIHN5bmMgb3IgaHN5bmMpIGZvciBlYWNoCitzY2FubGluZS4gIFNpbWlsYXJseSBpdCBzdXBwbGllcyBhIHN5bmNocm9uaXphdGlvbiBwdWxzZSAodmVydGljYWwgc3luYyBvcgordnN5bmMpIGZvciBlYWNoIG5ldyBmcmFtZS4gVGhlIHBvc2l0aW9uIG9mIHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuIGlzCitpbmZsdWVuY2VkIGJ5IHRoZSBtb21lbnRzIGF0IHdoaWNoIHRoZSBzeW5jaHJvbml6YXRpb24gcHVsc2VzIG9jY3VyLgorCitUaGUgZm9sbG93aW5nIHBpY3R1cmUgc3VtbWFyaXplcyBhbGwgdGltaW5ncy4gVGhlIGhvcml6b250YWwgcmV0cmFjZSB0aW1lIGlzCit0aGUgc3VtIG9mIHRoZSBsZWZ0IG1hcmdpbiwgdGhlIHJpZ2h0IG1hcmdpbiBhbmQgdGhlIGhzeW5jIGxlbmd0aCwgd2hpbGUgdGhlCit2ZXJ0aWNhbCByZXRyYWNlIHRpbWUgaXMgdGhlIHN1bSBvZiB0aGUgdXBwZXIgbWFyZ2luLCB0aGUgbG93ZXIgbWFyZ2luIGFuZCB0aGUKK3ZzeW5jIGxlbmd0aC4KKworICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgfHVwcGVyX21hcmdpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgpSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICArLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0tLS0tLS0tLSstLS0tLS0tKworICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgbGVmdCAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICByaWdodCAgIHwgaHN5bmMgfAorICB8ICBtYXJnaW4gICMgICAgICAgICAgICAgICAgfCAgICAgICB4cmVzICAgICAgICAgICAgICAgICAjICBtYXJnaW4gIHwgIGxlbiAgfAorICB8PC0tLS0tLS0tPiM8LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4jPC0tLS0tLS0tPnw8LS0tLS0+fAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfHlyZXMgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgpSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAorICArLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0tLS0tLS0tLSstLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgfGxvd2VyX21hcmdpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgpSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgfHZzeW5jX2xlbiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgpSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tKworCitUaGUgZnJhbWUgYnVmZmVyIGRldmljZSBleHBlY3RzIGFsbCBob3Jpem9udGFsIHRpbWluZ3MgaW4gbnVtYmVyIG9mIGRvdGNsb2NrcworKGluIHBpY29zZWNvbmRzLCAxRS0xMiBzKSwgYW5kIHZlcnRpY2FsIHRpbWluZ3MgaW4gbnVtYmVyIG9mIHNjYW5saW5lcy4KKworCis2LiBDb252ZXJ0aW5nIFhGcmVlODYgdGltaW5nIHZhbHVlcyBpbmZvIGZyYW1lIGJ1ZmZlciBkZXZpY2UgdGltaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gWEZyZWU4NiBtb2RlIGxpbmUgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6CisgIjgwMHg2MDAiICAgICA1MCAgICAgIDgwMCAgODU2ICA5NzYgMTA0MCAgICA2MDAgIDYzNyAgNjQzICA2NjYKKyA8IG5hbWUgPiAgICAgRENGICAgICAgIEhSICBTSDEgIFNIMiAgSEZMICAgICBWUiAgU1YxICBTVjIgIFZGTAorCitUaGUgZnJhbWUgYnVmZmVyIGRldmljZSB1c2VzIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorCisgIC0gcGl4Y2xvY2s6IHBpeGVsIGNsb2NrIGluIHBzIChwaWNvIHNlY29uZHMpCisgIC0gbGVmdF9tYXJnaW46IHRpbWUgZnJvbSBzeW5jIHRvIHBpY3R1cmUKKyAgLSByaWdodF9tYXJnaW46IHRpbWUgZnJvbSBwaWN0dXJlIHRvIHN5bmMKKyAgLSB1cHBlcl9tYXJnaW46IHRpbWUgZnJvbSBzeW5jIHRvIHBpY3R1cmUKKyAgLSBsb3dlcl9tYXJnaW46IHRpbWUgZnJvbSBwaWN0dXJlIHRvIHN5bmMKKyAgLSBoc3luY19sZW46IGxlbmd0aCBvZiBob3Jpem9udGFsIHN5bmMKKyAgLSB2c3luY19sZW46IGxlbmd0aCBvZiB2ZXJ0aWNhbCBzeW5jCisKKzEpIFBpeGVsY2xvY2s6CisgICB4ZnJlZTogaW4gTUh6CisgICBmYjogaW4gcGljb3NlY29uZHMgKHBzKQorCisgICBwaXhjbG9jayA9IDEwMDAwMDAgLyBEQ0YKKworMikgaG9yaXpvbnRhbCB0aW1pbmdzOgorICAgbGVmdF9tYXJnaW4gPSBIRkwgLSBTSDIKKyAgIHJpZ2h0X21hcmdpbiA9IFNIMSAtIEhSCisgICBoc3luY19sZW4gPSBTSDIgLSBTSDEKKworMykgdmVydGljYWwgdGltaW5nczoKKyAgIHVwcGVyX21hcmdpbiA9IFZGTCAtIFNWMgorICAgbG93ZXJfbWFyZ2luID0gU1YxIC0gVlIKKyAgIHZzeW5jX2xlbiA9IFNWMiAtIFNWMQorCitHb29kIGV4YW1wbGVzIGZvciBWRVNBIHRpbWluZ3MgY2FuIGJlIGZvdW5kIGluIHRoZSBYRnJlZTg2IHNvdXJjZSB0cmVlLAordW5kZXIgInhjL3Byb2dyYW1zL1hzZXJ2ZXIvaHcveGZyZWU4Ni9kb2MvbW9kZURCLnR4dCIuCisKKworNy4gUmVmZXJlbmNlcworLS0tLS0tLS0tLS0tLQorCitGb3IgbW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBhbmQgaXRzCithcHBsaWNhdGlvbnMsIHBsZWFzZSByZWZlciB0byB0aGUgTGludXgtZmJkZXYgd2Vic2l0ZToKKworICAgIGh0dHA6Ly9saW51eC1mYmRldi5zb3VyY2Vmb3JnZS5uZXQvCisKK2FuZCB0byB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246CisKKyAgLSBUaGUgbWFudWFsIHBhZ2VzIGZvciBmYnNldDogZmJzZXQoOCksIGZiLm1vZGVzKDUpCisgIC0gVGhlIG1hbnVhbCBwYWdlcyBmb3IgWEZyZWU4NjogWEY2OF9GQkRldigxKSwgWEY4NkNvbmZpZyg0LzUpCisgIC0gVGhlIG1pZ2h0eSBrZXJuZWwgc291cmNlczoKKyAgICAgIG8gbGludXgvZHJpdmVycy92aWRlby8KKyAgICAgIG8gbGludXgvaW5jbHVkZS9saW51eC9mYi5oCisgICAgICBvIGxpbnV4L2luY2x1ZGUvdmlkZW8vCisKKworCis4LiBNYWlsaW5nIGxpc3QKKy0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgc2V2ZXJhbCBmcmFtZSBidWZmZXIgZGV2aWNlIHJlbGF0ZWQgbWFpbGluZyBsaXN0cyBhdCBTb3VyY2VGb3JnZToKKyAgLSBsaW51eC1mYmRldi1hbm5vdW5jZUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQsIGZvciBhbm5vdW5jZW1lbnRzLAorICAtIGxpbnV4LWZiZGV2LXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0LCBmb3IgZ2VuZXJpYyB1c2VyIHN1cHBvcnQsCisgIC0gbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0LCBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLgorCitQb2ludCB5b3VyIHdlYiBicm93c2VyIHRvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtZmJkZXYvIGZvcgorc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uIGFuZCBhcmNoaXZlIGJyb3dzaW5nLgorCisKKzkuIERvd25sb2FkaW5nCistLS0tLS0tLS0tLS0tLQorCitBbGwgbmVjZXNzYXJ5IGZpbGVzIGNhbiBiZSBmb3VuZCBhdAorCisgICAgZnRwOi8vZnRwLnVuaS1lcmxhbmdlbi5kZS9wdWIvTGludXgvTE9DQUwvNjgweDAvCisKK2FuZCBvbiBpdHMgbWlycm9ycy4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGZic2V0IGNhbiBiZSBmb3VuZCBhdAorCisgICAgaHR0cDovL2hvbWUudHZkLmJlL2NyMjY4NjQvTGludXgvZmJkZXYvCisKKyAgCisxMC4gQ3JlZGl0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCitUaGlzIHJlYWRtZSB3YXMgd3JpdHRlbiBieSBHZWVydCBVeXR0ZXJob2V2ZW4sIHBhcnRseSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKK2BYLWZyYW1lYnVmZmVyLlJFQURNRScgYnkgUm9tYW4gSG9kZWsgYW5kIE1hcnRpbiBTY2hhbGxlci4gU2VjdGlvbiA2IHdhcworcHJvdmlkZWQgYnkgRnJhbmsgTmV1bWFubi4KKworVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYWJzdHJhY3Rpb24gd2FzIGRlc2lnbmVkIGJ5IE1hcnRpbiBTY2hhbGxlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvaW50ZWw4MTAudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbDgxMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2OGIxNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvaW50ZWw4MTAudHh0CkBAIC0wLDAgKzEsMjcyIEBACitJbnRlbCA4MTAvODE1IEZyYW1lYnVmZmVyIGRyaXZlcgorIAlUb255IERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PgorCWh0dHA6Ly9pODEwZmIuc291cmNlZm9yZ2UubmV0CisKKwlNYXJjaCAxNywgMjAwMgorCisJRmlyc3QgUmVsZWFzZWQ6IEp1bHkgMjAwMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBLiBJbnRyb2R1Y3Rpb24KKwlUaGlzIGlzIGEgZnJhbWVidWZmZXIgZHJpdmVyIGZvciB2YXJpb3VzIEludGVsIDgxMC84MTUgY29tcGF0aWJsZQorZ3JhcGhpY3MgZGV2aWNlcy4gIFRoZXNlIHdvdWxkIGluY2x1ZGU6CisKKwlJbnRlbCA4MTAKKwlJbnRlbCA4MTBFCisJSW50ZWwgODEwLURDMTAwCisJSW50ZWwgODE1IEludGVybmFsIGdyYXBoaWNzIG9ubHksIDEwME1oeiBGU0IKKwlJbnRlbCA4MTUgSW50ZXJuYWwgZ3JhcGhpY3Mgb25seQorCUludGVsIDgxNSBJbnRlcm5hbCBncmFwaGljcyBhbmQgQUdQCisKK0IuICBGZWF0dXJlcworCisgICAgICAgIC0gQ2hvaWNlIG9mIHVzaW5nIERpc2NyZXRlIFZpZGVvIFRpbWluZ3MsIFZFU0EgR2VuZXJhbGl6ZWQgVGltaW5nCisJICBGb3JtdWxhLCBvciBhIGZyYW1lYnVmZmVyIHNwZWNpZmljIGRhdGFiYXNlIHRvIHNldCB0aGUgdmlkZW8gbW9kZQorCisJLSBTdXBwb3J0cyBhIHZhcmlhYmxlIHJhbmdlIG9mIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHJlc29sdXRpb24sIGFuZAorCSAgdmVydGljYWwgcmVmcmVzaCByYXRlcyBpZiB0aGUgVkVTQSBHZW5lcmFsaXplZCBUaW1pbmcgRm9ybXVsYSBpcyAKKwkgIGVuYWJsZWQuCisKKyAgICAgICAgLSBTdXBwb3J0cyBjb2xvciBkZXB0aHMgb2YgOCwgMTYsIDI0IGFuZCAzMiBiaXRzIHBlciBwaXhlbAorCisJLSBTdXBwb3J0cyBwc2V1ZG9jb2xvciwgZGlyZWN0Y29sb3IsIG9yIHRydWVjb2xvciB2aXN1YWxzCisKKyAgICAgICAgLSBGdWxsIGFuZCBvcHRpbWl6ZWQgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGF0IDgsIDE2IGFuZCAyNCBicHAKKworCS0gUm9idXN0IHZpZGVvIHN0YXRlIHNhdmUgYW5kIHJlc3RvcmUKKworICAgICAgICAtIE1UUlIgc3VwcG9ydCAKKworCS0gVXRpbGl6ZXMgdXNlci1lbnRlcmVkIG1vbml0b3Igc3BlY2lmaWNhdGlvbnMgdG8gYXV0b21hdGljYWxseQorCSAgY2FsY3VsYXRlIHJlcXVpcmVkIHZpZGVvIG1vZGUgcGFyYW1ldGVycy4KKworCS0gQ2FuIGNvbmN1cnJlbnRseSBydW4gd2l0aCB4ZnJlZTg2IHJ1bm5pbmcgd2l0aCBuYXRpdmUgaTgxMCBkcml2ZXJzIAorCisJLSBIYXJkd2FyZSBDdXJzb3IgU3VwcG9ydAorIAorQy4gIExpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMKKwkKKyAgIGEuICJ2aWRlbz1pODEwZmIiICAKKwllbmFibGVzIHRoZSBpODEwIGRyaXZlcgorCisJUmVjb21tZW5kYXRpb246IHJlcXVpcmVkCisgCisgICBiLiAieHJlczo8dmFsdWU+IiAgCisJc2VsZWN0IGhvcml6b250YWwgcmVzb2x1dGlvbiBpbiBwaXhlbHMKKworCVJlY29tbWVuZGF0aW9uOiB1c2VyIHByZWZlcmVuY2UgCisJKGRlZmF1bHQgPSA2NDApCisKKyAgIGMuICJ5cmVzOjx2YWx1ZT4iCisJc2VsZWN0IHZlcnRpY2FsIHJlc29sdXRpb24gaW4gc2NhbmxpbmVzLiBJZiBEaXNjcmV0ZSBWaWRlbyBUaW1pbmdzCisJaXMgZW5hYmxlZCwgdGhpcyB3aWxsIGJlIGlnbm9yZWQgYW5kIGNvbXB1dGVkIGFzIDMqeHJlcy80LiAgCisKKwlSZWNvbW1lbmRhdGlvbjogdXNlciBwcmVmZXJlbmNlCisJKGRlZmF1bHQgPSA0ODApCisJCQorICAgZC4gInZ5cmVzOjx2YWx1ZT4iIAorCXNlbGVjdCB2aXJ0dWFsIHZlcnRpY2FsIHJlc29sdXRpb24gaW4gc2NhbmxpbmVzLiBJZiAoMCkgb3Igbm9uZQorCWlzIHNwZWNpZmllZCwgdGhpcyB3aWxsIGJlIGNvbXB1dGVkIGFnYWluc3QgbWF4aW11bSBhdmFpbGFibGUgbWVtb3J5LiAKKworCVJlY29tbWVuZGF0aW9uOiBkbyBub3Qgc2V0CisJKGRlZmF1bHQgPSA0ODApCisKKyAgIGUuICJ2cmFtOjx2YWx1ZT4iCisJc2VsZWN0IGFtb3VudCBvZiBzeXN0ZW0gUkFNIGluIE1CIHRvIGFsbG9jYXRlIGZvciB0aGUgdmlkZW8gbWVtb3J5IAorCisJUmVjb21tZW5kYXRpb246IDEgLSA0IE1CLgorCShkZWZhdWx0ID0gNCkKKworICAgZi4gImJwcDo8dmFsdWU+IiAgIAorCXNlbGVjdCBkZXNpcmVkIHBpeGVsIGRlcHRoIAorCisJUmVjb21tZW5kYXRpb246IDgKKwkoZGVmYXVsdCA9IDgpCisKKyAgIGcuICJoc3luYzEvaHN5bmMyOjx2YWx1ZT4iIAorCXNlbGVjdCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBIb3Jpem9udGFsIFN5bmMgRnJlcXVlbmN5IG9mIHRoZSAKKwltb25pdG9yIGluIEtIei4gIElmIGEgdXNpbmcgYSBmaXhlZCBmcmVxdWVuY3kgbW9uaXRvciwgaHN5bmMxIG11c3QgCisJYmUgZXF1YWwgdG8gaHN5bmMyLiAKKworCVJlY29tbWVuZGF0aW9uOiBjaGVjayBtb25pdG9yIG1hbnVhbCBmb3IgY29ycmVjdCB2YWx1ZXMKKwlkZWZhdWx0ICgyOS8zMCkKKworICAgaC4gInZzeW5jMS92c3luYzI6PHZhbHVlPiIgCisJc2VsZWN0IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIFZlcnRpY2FsIFN5bmMgRnJlcXVlbmN5IG9mIHRoZSBtb25pdG9yCisJaW4gSHouIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyBvcHRpb24gdG8gbG9jayB5b3VyIG1vbml0b3IncyByZWZyZXNoIAorCXJhdGUuCisKKwlSZWNvbW1lbmRhdGlvbjogY2hlY2sgbW9uaXRvciBtYW51YWwgZm9yIGNvcnJlY3QgdmFsdWVzCisJKGRlZmF1bHQgPSA2MC82MCkKKworCUlNUE9SVEFOVDogIElmIHlvdSBuZWVkIHRvIGNsYW1wIHlvdXIgdGltaW5ncywgdHJ5IHRvIGdpdmUgc29tZSAKKwlsZWV3YXkgZm9yIGNvbXB1dGF0aW9uYWwgZXJyb3JzIChvdmVyL3VuZGVyZmxvd3MpLiAgRXhhbXBsZTogaWYgCisJdXNpbmcgdnN5bmMxL3ZzeW5jMiA9IDYwLzYwLCBtYWtlIHN1cmUgaHN5bmMxL2hzeW5jMiBoYXMgYXQgbGVhc3QKKwlhIDEgdW5pdCBkaWZmZXJlbmNlLCBhbmQgdmljZSB2ZXJzYS4KKworICAgaS4gInZvZmZzZXQ6PHZhbHVlPiIJCisgICAgICAgIHNlbGVjdCBhdCB3aGF0IG9mZnNldCBpbiBNQiBvZiB0aGUgbG9naWNhbCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIAorCWZyYW1lYnVmZmVyIG1lbW9yeS4gIFRoZSBpbnRlbnQgaXMgdG8gYXZvaWQgdGhlIG1lbW9yeSBibG9ja3MKKwl1c2VkIGJ5IHN0YW5kYXJkIGdyYXBoaWNzIGFwcGxpY2F0aW9ucyAoWEZyZWU4NikuICBUaGUgZGVmYXVsdAorICAgICAgICBvZmZzZXQgKDE2IE1CIGZvciBhIDY0TUIgYXBlcnR1cmUsIDggTUIgZm9yIGEgMzJNQiBhcGVydHVyZSkgd2lsbAorICAgICAgICBhdm9pZCBYRnJlZTg2J3MgdXNhZ2UgYW5kIGFsbG93cyB1cCB0byA3TUIvMTVNQiBvZiBmcmFtZWJ1ZmZlcgorICAgICAgICBtZW1vcnkuICBEZXBlbmRpbmcgb24geW91ciB1c2FnZSwgYWRqdXN0IHRoZSB2YWx1ZSB1cCBvciBkb3duLCAKKwkoMCBmb3IgbWF4aW11bSB1c2FnZSwgMzEvNjMgTUIgZm9yIHRoZSBsZWFzdCBhbW91bnQpLiAgTm90ZSwgYW4gCisJYXJiaXRyYXJ5IHNldHRpbmcgbWF5IGNvbmZsaWN0IHdpdGggWEZyZWU4Ni4KKworCVJlY29tbWVuZGF0aW9uOiBkbyBub3Qgc2V0CisJKGRlZmF1bHQgPSA4IG9yIDE2IE1CKQorICAgICAgCisgICBqLiAiYWNjZWwiIAorCWVuYWJsZSB0ZXh0IGFjY2VsZXJhdGlvbi4gIFRoaXMgY2FuIGJlIGVuYWJsZWQvcmVlbmFibGVkIGFueXRpbWUgCisJYnkgdXNpbmcgJ2Zic2V0IC1hY2NlbCB0cnVlL2ZhbHNlJy4gCisKKwlSZWNvbW1lbmRhdGlvbjogZW5hYmxlCisJKGRlZmF1bHQgPSBub3Qgc2V0KSAKKworICAgay4gIm10cnIiIAorCWVuYWJsZSBNVFJSLiAgVGhpcyBhbGxvd3MgZGF0YSB0cmFuc2ZlcnMgdG8gdGhlIGZyYW1lYnVmZmVyIG1lbW9yeQorCXRvIG9jY3VyIGluIGJ1cnN0cyB3aGljaCBjYW4gc2lnbmlmaWNhbnRseSBpbmNyZWFzZSBwZXJmb3JtYW5jZS4KKwlOb3QgdmVyeSBoZWxwZnVsIHdpdGggdGhlIGk4MTAvaTgxNSBiZWNhdXNlIG9mICdzaGFyZWQgbWVtb3J5Jy4gCisKKwlSZWNvbW1lbmRhdGlvbjogZG8gbm90IHNldAorCShkZWZhdWx0ID0gbm90IHNldCkgCisKKyAgIGwuICJleHR2Z2EiCisJaWYgc3BlY2lmaWVkLCBzZWNvbmRhcnkvZXh0ZXJuYWwgVkdBIG91dHB1dCB3aWxsIGFsd2F5cyBiZSBlbmFibGVkLgorCVVzZWZ1bCBpZiB0aGUgQklPUyB0dXJucyBvZmYgdGhlIFZHQSBwb3J0IHdoZW4gbm8gbW9uaXRvciBpcyBhdHRhY2hlZC4KKwlUaGUgZXh0ZXJuYWwgVkdBIG1vbml0b3IgY2FuIHRoZW4gYmUgYXR0YWNoZWQgd2l0aG91dCByZWJvb3RpbmcuIAorCisJUmVjb21tZW5kYXRpb246IGRvIG5vdCBzZXQKKwkoZGVmYXVsdCA9IG5vdCBzZXQpCisJCisgICBtLiAic3luYyIgCisJRm9yY2VzIHRoZSBoYXJkd2FyZSBlbmdpbmUgdG8gZG8gYSAic3luYyIgb3Igd2FpdCBmb3IgdGhlIGhhcmR3YXJlCisJdG8gZmluaXNoIGJlZm9yZSBzdGFydGluZyBhbm90aGVyIGluc3RydWN0aW9uLiBUaGlzIHdpbGwgcHJvZHVjZSBhIAorCW1vcmUgc3RhYmxlIHNldHVwLCBidXQgd2lsbCBiZSBzbG93ZXIuCisKKwlSZWNvbW1lbmRhdGlvbjogZG8gbm90IHNldAorCShkZWZhdWx0ID0gbm90IHNldCkKKworICAgbi4gImRjb2xvciIKKyAgICAgICAgVXNlIGRpcmVjdGNvbG9yIHZpc3VhbCBpbnN0ZWFkIG9mIHRydWVjb2xvciBmb3IgcGl4ZWwgZGVwdGhzIGdyZWF0ZXIKKwl0aGFuIDggYnBwLiAgVXNlZnVsIGZvciBjb2xvciB0dW5pbmcsIHN1Y2ggYXMgZ2FtbWEgY29udHJvbC4KKworCVJlY29tbWVuZGF0aW9uOiBkbyBub3Qgc2V0CisJKGRlZmF1bHQgPSBub3Qgc2V0KQorCQkJCitELiBLZXJuZWwgYm9vdGluZworCitTZXBhcmF0ZSBlYWNoIG9wdGlvbi9vcHRpb24tcGFpciBieSBjb21tYXMgKCwpIGFuZCB0aGUgb3B0aW9uIGZyb20gaXRzIHZhbHVlCit3aXRoIGEgY29sb24gKDopIGFzIGluIHRoZSBmb2xsb3dpbmc6CisKK3ZpZGVvPWk4MTBmYjpvcHRpb24xLG9wdGlvbjI6dmFsdWUyCisKK1NhbXBsZSBVc2FnZQorLS0tLS0tLS0tLS0tCisKK0luIC9ldGMvbGlsby5jb25mLCBhZGQgdGhlIGxpbmU6CisKK2FwcGVuZD0idmlkZW89aTgxMGZiOnZyYW06Mix4cmVzOjEwMjQseXJlczo3NjgsYnBwOjgsaHN5bmMxOjMwLGhzeW5jMjo1NSwgXAorICAgICAgICB2c3luYzE6NTAsdnN5bmMyOjg1LGFjY2VsLG10cnIiCisKK1RoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciB0byAxMDI0eDc2OCBhdCA4YnBwLiAgVGhlIGZyYW1lYnVmZmVyCit3aWxsIHVzZSAyIE1CIG9mIFN5c3RlbSBSQU0uIE1UUlIgc3VwcG9ydCB3aWxsIGJlIGVuYWJsZWQuIFRoZSByZWZyZXNoIHJhdGUgCit3aWxsIGJlIGNvbXB1dGVkIGJhc2VkIG9uIHRoZSBoc3luYzEvaHN5bmMyIGFuZCB2c3luYzEvdnN5bmMyIHZhbHVlcy4gIAorCitJTVBPUlRBTlQ6CitZb3UgbXVzdCBpbmNsdWRlIGhzeW5jMSwgaHN5bmMyLCB2c3luYzEgYW5kIHZzeW5jMiB0byBlbmFibGUgdmlkZW8gbW9kZXMKK2JldHRlciB0aGFuIDY0MHg0ODAgYXQgNjBIei4KKworRS4gIE1vZHVsZSBvcHRpb25zCisJCisJVGhlIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBlc3NlbnRpYWxseSBzaW1pbGFyIHRvIHRoZSBrZXJuZWwgCitwYXJhbWV0ZXJzLiBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgeW91IG5lZWQgdG8gaW5jbHVkZSBhIEJvb2xlYW4gdmFsdWUgCisoMSBmb3IgVFJVRSwgYW5kIDAgZm9yIEZBTFNFKSBmb3IgdGhvc2Ugb3B0aW9ucyB3aGljaCBkb24ndCBuZWVkIGEgdmFsdWUuIAorCitFeGFtcGxlLCB0byBlbmFibGUgTVRSUiwgaW5jbHVkZSAibXRycj0xIi4KKworU2FtcGxlIFVzYWdlCistLS0tLS0tLS0tLS0KKworVXNpbmcgdGhlIHNhbWUgc2V0dXAgYXMgZGVzY3JpYmVkIGFib3ZlLCBsb2FkIHRoZSBtb2R1bGUgbGlrZSB0aGlzOgorCisJbW9kcHJvYmUgaTgxMGZiIHZyYW09MiB4cmVzPTEwMjQgYnBwPTggaHN5bmMxPTMwIGhzeW5jMj01NSB2c3luYzE9NTAgXAorCSAgICAgICAgIHZzeW5jMj04NSBhY2NlbD0xIG10cnI9MQorCitPciBqdXN0IGFkZCB0aGUgZm9sbG93aW5nIHRvIC9ldGMvbW9kcHJvYmUuY29uZgorCisJb3B0aW9ucyBpODEwZmIgdnJhbT0yIHhyZXM9MTAyNCBicHA9MTYgaHN5bmMxPTMwIGhzeW5jMj01NSB2c3luYzE9NTAgXAorCXZzeW5jMj04NSBhY2NlbD0xIG10cnI9MQorCithbmQganVzdCBkbyBhIAorCisJbW9kcHJvYmUgaTgxMGZiCisKKworRi4gIFNldHVwCisKKwlhLiBEbyB5b3VyIHVzdWFsIG1ldGhvZCBvZiBjb25maWd1cmluZyB0aGUga2VybmVsLiAKKwkKKwltYWtlIG1lbnVjb25maWcveGNvbmZpZy9jb25maWcKKworCWIuIFVuZGVyICJDb2RlIE1hdHVyaXR5IE9wdGlvbnMiLCBlbmFibGUgIlByb21wdCBmb3IgZXhwZXJpbWVudGFsLworCSAgIGluY29tcGxldGUgY29kZS9kcml2ZXJzIi4KKworIAljLiBFbmFibGUgYWdwZ2FydCBzdXBwb3J0IGZvciB0aGUgSW50ZWwgODEwLzgxNSBvbi1ib2FyZCBncmFwaGljcy4KKwkgICBUaGlzIGlzIHJlcXVpcmVkLiAgVGhlIG9wdGlvbiBpcyB1bmRlciAiQ2hhcmFjdGVyIERldmljZXMiCisKKwlkLiBVbmRlciAiR3JhcGhpY3MgU3VwcG9ydCIsIHNlbGVjdCAiSW50ZWwgODEwLzgxNSIgZWl0aGVyIHN0YXRpY2FsbHkKKwkgICBvciBhcyBhIG1vZHVsZS4gIENob29zZSAidXNlIFZFU0EgR1RGIGZvciB2aWRlbyB0aW1pbmdzIiAgaWYgeW91IAorCSAgIG5lZWQgdG8gbWF4aW1pemUgdGhlIGNhcGFiaWxpdHkgb2YgeW91ciBkaXNwbGF5LiAgVG8gYmUgb24gdGhlIAorCSAgIHNhZmUgc2lkZSwgeW91IGNhbiBsZWF2ZSB0aGlzIHVuc2VsZWN0ZWQuICAKKyAgCisgICAgICAgIGUuIElmIHlvdSB3YW50IGEgZnJhbWVidWZmZXIgY29uc29sZSwgZW5hYmxlIGl0IHVuZGVyICJDb25zb2xlIAorCSAgIERyaXZlcnMiCisKKwlmLiBDb21waWxlIHlvdXIga2VybmVsLiAKKwkgIAkKKwlnLiBMb2FkIHRoZSBkcml2ZXIgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gRCBhbmQgRS4KKwkKKwlPcHRpb25hbDoJCisJaC4gIElmIHlvdSBhcmUgZ29pbmcgdG8gcnVuIFhGcmVlODYgd2l0aCBpdHMgbmF0aXZlIGRyaXZlcnMsIHRoZSAKKwkgICAgc3RhbmRhcmQgWEZyZWU4NiA0LjEuMCBhbmQgNC4yLjAgZHJpdmVycyBzaG91bGQgd29yayBhcyBpcy4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXJlJ3MgYSBidWcgaW4gdGhlIFhGcmVlODYgaTgxMCBkcml2ZXJzLiAgSXQgYXR0ZW1wdHMgCisJICAgIHRvIHVzZSBYQUEgZXZlbiB3aGVuIHN3aXRjaGVkIHRvIHRoZSBjb25zb2xlLiBUaGlzIHdpbGwgY3Jhc2gKKwkgICAgeW91ciBzZXJ2ZXIuIEkgaGF2ZSBhIGZpeCBhdCB0aGlzIHNpdGU6ICAKKwkgICAgCisJICAgIGh0dHA6Ly9pODEwZmIuc291cmNlZm9yZ2UubmV0LiAgCisKKwkgICAgWW91IGNhbiBlaXRoZXIgdXNlIHRoZSBwYXRjaCwgb3IganVzdCByZXBsYWNlIAorCSAgICAKKyAgICAgICAgICAgIC91c3IvWDExUjYvbGliL21vZHVsZXMvZHJpdmVycy9pODEwX2Rydi5vCisKKwkgICAgd2l0aCB0aGUgb25lIHByb3ZpZGVkIGF0IHRoZSB3ZWJzaXRlLiAJCisKKwlpLiAgVHJ5IHRoZSBEaXJlY3RGQiAoaHR0cDovL3d3dy5kaXJlY3RmYi5vcmcpICsgdGhlIGk4MTAgZ2Z4ZHJpdmVyCisJICAgIHBhdGNoIHRvIHNlZSB0aGUgY2hpcHNldCBpbiBhY3Rpb24gKG9yIGluYWN0aW9uIDotKS4KKworRy4gIEFja25vd2xlZGdtZW50OgorCQorCTEuICBHZWVydCBVeXR0ZXJob2V2ZW4gLSBoaXMgZXhjZWxsZW50IGhvd3RvIGFuZCB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgZHJpdmVyIGNvZGUgbWFkZSB0aGlzIHBvc3NpYmxlLgorCisJMi4gIEplZmYgSGFydG1hbm4gZm9yIGhpcyBhZ3BnYXJ0IGNvZGUuICAKKworCTMuICBUaGUgWCBkZXZlbG9wZXJzLiAgSW5zaWdodHMgd2VyZSBwcm92aWRlZCBqdXN0IGJ5IHJlYWRpbmcgdGhlCisJICAgIFhGcmVlODYgc291cmNlIGNvZGUuCisKKwk0LiAgSW50ZWwoYykuICBGb3IgdGhpcyB2YWx1ZS1vcmllbnRlZCBjaGlwc2V0IGRyaXZlciBhbmQgZm9yCisgICAgICAgICAgICBwcm92aWRpbmcgZG9jdW1lbnRhdGlvbi4KKworCTUuIE1hdHQgU290dGVrLiAgSGlzIGlucHV0cyBhbmQgaWRlYXMgIGhlbHBlZCBpbiBtYWtpbmcgc29tZQorCW9wdGltaXphdGlvbnMgcG9zc2libGUuCisKK0guICBIb21lIFBhZ2U6CisKKwlBIG1vcmUgY29tcGxldGUsIGFuZCBwcm9iYWJseSB1cGRhdGVkIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGF0CitodHRwOi8vaTgxMGZiLnNvdXJjZWZvcmdlLm5ldC4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitUb255CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvaW50ZXJuYWxzLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvaW50ZXJuYWxzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJhMmIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9pbnRlcm5hbHMudHh0CkBAIC0wLDAgKzEsODIgQEAKKworVGhpcyBpcyBhIGZpcnN0IHN0YXJ0IGZvciBzb21lIGRvY3VtZW50YXRpb24gYWJvdXQgZnJhbWUgYnVmZmVyIGRldmljZQoraW50ZXJuYWxzLgorCitHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPiwgMjEgSnVseSAxOTk4CitKYW1lcyBTaW1tb25zIDxqc2ltbW9uc0B1c2VyLnNmLm5ldD4sIE5vdiAyNiAyMDAyCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkgICAgKioqICBTVFJVQ1RVUkVTIFVTRUQgQlkgVEhFIEZSQU1FIEJVRkZFUiBERVZJQ0UgQVBJICAqKioKKworVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIHBsYXkgYSByb2xlIGluIHRoZSBnYW1lIG9mIGZyYW1lIGJ1ZmZlciBkZXZpY2VzLiBUaGV5CithcmUgZGVmaW5lZCBpbiA8bGludXgvZmIuaD4uCisKKzEuIE91dHNpZGUgdGhlIGtlcm5lbCAodXNlciBzcGFjZSkKKworICAtIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbworCisgICAgRGV2aWNlIGluZGVwZW5kZW50IHVuY2hhbmdlYWJsZSBpbmZvcm1hdGlvbiBhYm91dCBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYW5kCisgICAgYSBzcGVjaWZpYyB2aWRlbyBtb2RlLiBUaGlzIGNhbiBiZSBvYnRhaW5lZCB1c2luZyB0aGUgRkJJT0dFVF9GU0NSRUVOSU5GTworICAgIGlvY3RsLgorCisgIC0gc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvCisKKyAgICBEZXZpY2UgaW5kZXBlbmRlbnQgY2hhbmdlYWJsZSBpbmZvcm1hdGlvbiBhYm91dCBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYW5kIGEKKyAgICBzcGVjaWZpYyB2aWRlbyBtb2RlLiBUaGlzIGNhbiBiZSBvYnRhaW5lZCB1c2luZyB0aGUgRkJJT0dFVF9WU0NSRUVOSU5GTworICAgIGlvY3RsLCBhbmQgdXBkYXRlZCB3aXRoIHRoZSBGQklPUFVUX1ZTQ1JFRU5JTkZPIGlvY3RsLiBJZiB5b3Ugd2FudCB0byBwYW4KKyAgICB0aGUgc2NyZWVuIG9ubHksIHlvdSBjYW4gdXNlIHRoZSBGQklPUEFOX0RJU1BMQVkgaW9jdGwuCisKKyAgLSBzdHJ1Y3QgZmJfY21hcAorCisgICAgRGV2aWNlIGluZGVwZW5kZW50IGNvbG9ybWFwIGluZm9ybWF0aW9uLiBZb3UgY2FuIGdldCBhbmQgc2V0IHRoZSBjb2xvcm1hcAorICAgIHVzaW5nIHRoZSBGQklPR0VUQ01BUCBhbmQgRkJJT1BVVENNQVAgaW9jdGxzLgorCisKKzIuIEluc2lkZSB0aGUga2VybmVsCisKKyAgLSBzdHJ1Y3QgZmJfaW5mbworCisgICAgR2VuZXJpYyBpbmZvcm1hdGlvbiwgQVBJIGFuZCBsb3cgbGV2ZWwgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBmcmFtZQorICAgIGJ1ZmZlciBkZXZpY2UgaW5zdGFuY2UgKHNsb3QgbnVtYmVyLCBib2FyZCBhZGRyZXNzLCAuLi4pLgorCisgIC0gc3RydWN0IGBwYXInCisKKyAgICBEZXZpY2UgZGVwZW5kZW50IGluZm9ybWF0aW9uIHRoYXQgdW5pcXVlbHkgZGVmaW5lcyB0aGUgdmlkZW8gbW9kZSBmb3IgdGhpcworICAgIHBhcnRpY3VsYXIgcGllY2Ugb2YgaGFyZHdhcmUuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCSAgICAqKiogIFZJU1VBTFMgVVNFRCBCWSBUSEUgRlJBTUUgQlVGRkVSIERFVklDRSBBUEkgICoqKgorCisKK01vbm9jaHJvbWUgKEZCX1ZJU1VBTF9NT05PMDEgYW5kIEZCX1ZJU1VBTF9NT05PMTApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFYWNoIHBpeGVsIGlzIGVpdGhlciBibGFjayBvciB3aGl0ZS4KKworCitQc2V1ZG8gY29sb3IgKEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiBhbmQgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHdob2xlIHBpeGVsIHZhbHVlIGlzIGZlZCB0aHJvdWdoIGEgcHJvZ3JhbW1hYmxlIGxvb2t1cCB0YWJsZSB0aGF0IGhhcyBvbmUKK2NvbG9yIChpbmNsdWRpbmcgcmVkLCBncmVlbiwgYW5kIGJsdWUgaW50ZW5zaXRpZXMpIGZvciBlYWNoIHBvc3NpYmxlIHBpeGVsCit2YWx1ZSwgYW5kIHRoYXQgY29sb3IgaXMgZGlzcGxheWVkLgorCisKK1RydWUgY29sb3IgKEZCX1ZJU1VBTF9UUlVFQ09MT1IpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHBpeGVsIHZhbHVlIGlzIGJyb2tlbiB1cCBpbnRvIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGZpZWxkcy4KKworCitEaXJlY3QgY29sb3IgKEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHBpeGVsIHZhbHVlIGlzIGJyb2tlbiB1cCBpbnRvIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGZpZWxkcywgZWFjaCBvZiB3aGljaCAKK2FyZSBsb29rZWQgdXAgaW4gc2VwYXJhdGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgbG9va3VwIHRhYmxlcy4KKworCitHcmF5c2NhbGUgZGlzcGxheXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorR3JheXNjYWxlIGFuZCBzdGF0aWMgZ3JheXNjYWxlIGFyZSBzcGVjaWFsIHZhcmlhbnRzIG9mIHBzZXVkbyBjb2xvciBhbmQgc3RhdGljCitwc2V1ZG8gY29sb3IsIHdoZXJlIHRoZSByZWQsIGdyZWVuIGFuZCBibHVlIGNvbXBvbmVudHMgYXJlIGFsd2F5cyBlcXVhbCB0bworZWFjaCBvdGhlci4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9tYXRyb3hmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDdhNjc3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9tYXRyb3hmYi50eHQKQEAgLTAsMCArMSw0MTUgQEAKK1tUaGlzIGZpbGUgaXMgY2xvbmVkIGZyb20gVmVzYUZCLiBUaGFua3MgZ28gdG8gR2VyZCBLbm9ycl0KKworV2hhdCBpcyBtYXRyb3hmYj8KKz09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSBkcml2ZXIgZm9yIGEgZ3JhcGhpYyBmcmFtZWJ1ZmZlciBmb3IgTWF0cm94IGRldmljZXMgb24KK0FscGhhLCBJbnRlbCBhbmQgUFBDIGJveGVzLgorCitBZHZhbnRhZ2VzOgorCisgKiBJdCBwcm92aWRlcyBhIG5pY2UgbGFyZ2UgY29uc29sZSAoMTI4IGNvbHMgKyA0OCBsaW5lcyB3aXRoIDEwMjR4NzY4KQorICAgd2l0aG91dCB1c2luZyB0aW55LCB1bnJlYWRhYmxlIGZvbnRzLgorICogWW91IGNhbiBydW4gWEZ7NjgsODZ9X0ZCRGV2IG9yIFhGcmVlODYgZmJkZXYgZHJpdmVyIG9uIHRvcCBvZiAvZGV2L2ZiMAorICogTW9zdCBpbXBvcnRhbnQ6IGJvb3QgbG9nbyA6LSkKKworRGlzYWR2YW50YWdlczoKKworICogZ3JhcGhpYyBtb2RlIGlzIHNsb3dlciB0aGFuIHRleHQgbW9kZS4uLiBidXQgeW91IHNob3VsZCBub3Qgbm90aWNlCisgICBpZiB5b3UgdXNlIHNhbWUgcmVzb2x1dGlvbiBhcyB5b3UgdXNlZCBpbiB0ZXh0bW9kZS4KKworCitIb3cgdG8gdXNlIGl0PworPT09PT09PT09PT09PT0KKworU3dpdGNoaW5nIG1vZGVzIGlzIGRvbmUgdXNpbmcgdGhlIHZpZGVvPW1hdHJveGZiOnZlc2E6Li4uIGJvb3QgcGFyYW1ldGVyCitvciB1c2luZyBgZmJzZXQnIHByb2dyYW0uCisKK0lmIHlvdSB3YW50LCBmb3IgZXhhbXBsZSwgZW5hYmxlIGEgcmVzb2x1dGlvbiBvZiAxMjgweDEwMjR4MjRicHAgeW91IHNob3VsZAorcGFzcyB0byB0aGUga2VybmVsIHRoaXMgY29tbWFuZCBsaW5lOiAidmlkZW89bWF0cm94ZmI6dmVzYToweDFCQiIuCisKK1lvdSBzaG91bGQgY29tcGlsZSBpbiBib3RoIHZnYWNvbiAodG8gYm9vdCBpZiB5b3UgcmVtb3ZlIHlvdSBNYXRyb3ggZnJvbQorYm94KSBhbmQgbWF0cm94ZmIgKGZvciBncmFwaGljcyBtb2RlKS4gWW91IHNob3VsZCBub3QgY29tcGlsZS1pbiB2ZXNhZmIKK3VubGVzcyB5b3UgaGF2ZSBwcmltYXJ5IGRpc3BsYXkgb24gbm9uLU1hdHJveCBWQkUyLjAgZGV2aWNlIChzZWUgCitEb2N1bWVudGF0aW9uL2ZiL3Zlc2FmYi50eHQgZm9yIGRldGFpbHMpLgorCitDdXJyZW50bHkgc3VwcG9ydGVkIHZpZGVvIG1vZGVzIGFyZSAodGhyb3VnaCB2ZXNhOi4uLiBpbnRlcmZhY2UsIFBvd2VyTWFjCitoYXMgW2FzIGFkZG9uXSBjb21wYXRpYmlsaXR5IGNvZGUpOgorCisKK1tHcmFwaGljIG1vZGVzXQorCiticHAgfCA2NDB4NDAwICA2NDB4NDgwICA3Njh4NTc2ICA4MDB4NjAwICA5NjB4NzIwCistLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDQgfCAgICAgICAgICAgIDB4MTIgICAgICAgICAgICAgMHgxMDIgICAgICAgICAgICAKKyAgOCB8ICAweDEwMCAgICAweDEwMSAgICAweDE4MCAgICAweDEwMyAgICAweDE4OCAgIAorIDE1IHwgICAgICAgICAgIDB4MTEwICAgIDB4MTgxICAgIDB4MTEzICAgIDB4MTg5ICAgCisgMTYgfCAgICAgICAgICAgMHgxMTEgICAgMHgxODIgICAgMHgxMTQgICAgMHgxOEEgICAKKyAyNCB8ICAgICAgICAgICAweDFCMiAgICAweDE4NCAgICAweDFCNSAgICAweDE4QyAgIAorIDMyIHwgICAgICAgICAgIDB4MTEyICAgIDB4MTgzICAgIDB4MTE1ICAgIDB4MThCICAgCisKKworW0dyYXBoaWMgbW9kZXMgKGNvbnRpbnVlZCldCisKK2JwcCB8IDEwMjR4NzY4IDExNTJ4ODY0IDEyODB4MTAyNCAxNDA4eDEwNTYgMTYwMHgxMjAwCistLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICA0IHwgICAweDEwNCAgICAgICAgICAgICAweDEwNgorICA4IHwgICAweDEwNSAgICAweDE5MCAgICAweDEwNyAgICAgMHgxOTggICAgIDB4MTFDCisgMTUgfCAgIDB4MTE2ICAgIDB4MTkxICAgIDB4MTE5ICAgICAweDE5OSAgICAgMHgxMUQKKyAxNiB8ICAgMHgxMTcgICAgMHgxOTIgICAgMHgxMUEgICAgIDB4MTlBICAgICAweDExRQorIDI0IHwgICAweDFCOCAgICAweDE5NCAgICAweDFCQiAgICAgMHgxOUMgICAgIDB4MUJGCisgMzIgfCAgIDB4MTE4ICAgIDB4MTkzICAgIDB4MTFCICAgICAweDE5QgorCisKK1tUZXh0IG1vZGVzXQorCit0ZXh0IHwgNjQweDQwMCAgNjQweDQ4MCAgMTA1NngzNDQgIDEwNTZ4NDAwICAxMDU2eDQ4MAorLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgOHg4IHwgIDB4MUMwICAgIDB4MTA4ICAgICAweDEwQSAgICAgMHgxMEIgICAgIDB4MTBDCis4eDE2IHwgMiwgMywgNyAgICAgICAgICAgICAgICAgICAgICAgMHgxMDkKKworWW91IGNhbiBlbnRlciB0aGVzZSBudW1iZXIgZWl0aGVyIGhleGFkZWNpbWFsIChsZWFkaW5nIGAweCcpIG9yIGRlY2ltYWwKKygweDEwMCA9IDI1NikuIFlvdSBjYW4gYWxzbyB1c2UgdmFsdWUgKyA1MTIgdG8gYWNoaWV2ZSBjb21wYXRpYmlsaXR5Cit3aXRoIHlvdXIgb2xkIG51bWJlciBwYXNzZWQgdG8gdmVzYWZiLgorCitOb24tbGlzdGVkIG51bWJlciBjYW4gYmUgYWNoaWV2ZWQgYnkgbW9yZSBjb21wbGljYXRlZCBjb21tYW5kLWxpbmUsIGZvcgorZXhhbXBsZSAxNjAweDEyMDB4MzJicHAgY2FuIGJlIHNwZWNpZmllZCBieSBgdmlkZW89bWF0cm94ZmI6dmVzYToweDExQyxkZXB0aDozMicuCisKKworWDExCis9PT0KKworWEZ7NjgsODZ9X0ZCRGV2IHNob3VsZCB3b3JrIGp1c3QgZmluZSwgYnV0IGl0IGlzIG5vbi1hY2NlbGVyYXRlZC4gT24gbm9uLWludGVsCithcmNoaXRlY3R1cmVzIHRoZXJlIGFyZSBzb21lIGdsaXRjaGVzIGZvciAyNGJwcCB2aWRlb21vZGVzLiA4LCAxNiBhbmQgMzJicHAKK3dvcmtzIGZpbmUuCisKK1J1bm5pbmcgYW5vdGhlciAoYWNjZWxlcmF0ZWQpIFgtU2VydmVyIGxpa2UgWEY4Nl9TVkdBIHdvcmtzIHRvby4gQnV0IChhdCBsZWFzdCkKK1hGcmVlIHNlcnZlcnMgaGF2ZSBiaWcgdHJvdWJsZXMgaW4gbXVsdGloZWFkIGNvbmZpZ3VyYXRpb25zIChldmVuIG9uIGZpcnN0CitoZWFkLCBub3QgZXZlbiB0YWxraW5nIGFib3V0IHNlY29uZCkuIFJ1bm5pbmcgWEZyZWU4NiA0LnggYWNjZWxlcmF0ZWQgbWdhIAorZHJpdmVyIGlzIHBvc3NpYmxlLCBidXQgeW91IG11c3Qgbm90IGVuYWJsZSBEUkkgLSBpZiB5b3UgZG8sIHJlc29sdXRpb24gYW5kCitjb2xvciBkZXB0aCBvZiB5b3VyIFggZGVza3RvcCBtdXN0IG1hdGNoIHJlc29sdXRpb24gYW5kIGNvbG9yIGRlcHRocyBvZiB5b3VyCit2aXJ0dWFsIGNvbnNvbGVzLCBvdGhlcndpc2UgWCB3aWxsIGNvcnJ1cHQgYWNjZWxlcmF0b3Igc2V0dGluZ3MuCisKKworU1ZHQUxpYgorPT09PT09PQorCitEcml2ZXIgY29udGFpbnMgU1ZHQUxpYiBjb21wYXRpYmlsaXR5IGNvZGUuIEl0IGlzIHR1cm5lZCBvbiBieSBjaG9vc2luZyB0ZXh0dWFsCittb2RlIGZvciBjb25zb2xlLiBZb3UgY2FuIGRvIGl0IGF0IGJvb3QgdGltZSBieSB1c2luZyB2aWRlb21vZGUKKzIsMyw3LDB4MTA4LTB4MTBDIG9yIDB4MUMwLiBBdCBydW50aW1lLCBgZmJzZXQgLWRlcHRoIDAnIGRvZXMgdGhpcyB3b3JrLgorVW5mb3J0dW5hdGVseSwgYWZ0ZXIgU1ZHQUxpYiBhcHBsaWNhdGlvbiBleGl0cywgc2NyZWVuIGNvbnRlbnRzIGlzIGNvcnJ1cHRlZC4KK1N3aXRjaGluZyB0byBhbm90aGVyIGNvbnNvbGUgYW5kIGJhY2sgZml4ZXMgaXQuIEkgaG9wZSB0aGF0IGl0IGlzIFNWR0FMaWIncworcHJvYmxlbSBhbmQgbm90IG1pbmUsIGJ1dCBJJ20gbm90IHN1cmUuCisKKworQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PQorCitZb3UgY2FuIHBhc3Mga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIG1hdHJveGZiIHdpdGgKK2B2aWRlbz1tYXRyb3hmYjpvcHRpb24xLG9wdGlvbjI6dmFsdWUyLG9wdGlvbjMnIChtdWx0aXBsZSBvcHRpb25zIHNob3VsZCBiZSAKK3NlcGFyYXRlZCBieSBjb21tYSwgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgZnJvbSBvcHRpb25zIGJ5IGA6JykuIAorQWNjZXB0ZWQgb3B0aW9uczoKKworbWVtOlggICAgLSBzaXplIG9mIG1lbW9yeSAoWCBjYW4gYmUgaW4gbWVnYWJ5dGVzLCBraWxvYnl0ZXMgb3IgYnl0ZXMpCisgICAgICAgICAgIFlvdSBjYW4gb25seSBkZWNyZWFzZSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IGRyaXZlciBiZWNhdXNlIG9mCisJICAgaXQgYWx3YXlzIHByb2JlIGZvciBtZW1vcnkuIERlZmF1bHQgaXMgdG8gdXNlIHdob2xlIGRldGVjdGVkCisJICAgbWVtb3J5IHVzYWJsZSBmb3Igb24tc2NyZWVuIGRpc3BsYXkgKGkuZS4gbWF4LiA4IE1CKS4KK2Rpc2FibGVkIC0gZG8gbm90IGxvYWQgZHJpdmVyOyB5b3UgY2FuIHVzZSBhbHNvIGBvZmYnLCBidXQgYGRpc2FibGVkJworICAgICAgICAgICBpcyBoZXJlIHRvby4KK2VuYWJsZWQgIC0gbG9hZCBkcml2ZXIsIGlmIHlvdSBoYXZlIGB2aWRlbz1tYXRyb3hmYjpkaXNhYmxlZCcgaW4gTElMTworICAgICAgICAgICBjb25maWd1cmF0aW9uLCB5b3UgY2FuIG92ZXJyaWRlIGl0IGJ5IHRoaXMgKHlvdSBjYW5ub3Qgb3ZlcnJpZGUKKwkgICBgb2ZmJykuIEl0IGlzIGRlZmF1bHQuCitub2FjY2VsICAtIGRvIG5vdCB1c2UgYWNjZWxlcmF0aW9uIGVuZ2luZS4gSXQgZG9lcyBub3Qgd29yayBvbiBBbHBoYXMuCithY2NlbCAgICAtIHVzZSBhY2NlbGVyYXRpb24gZW5naW5lLiBJdCBpcyBkZWZhdWx0Lgorbm9wYW4gICAgLSBjcmVhdGUgaW5pdGlhbCBjb25zb2xlcyB3aXRoIHZ5cmVzID0geXJlcywgdGh1cyBkaXNhYmxpbmcgdmlydHVhbAorICAgICAgICAgICBzY3JvbGxpbmcuCitwYW4gICAgICAtIGNyZWF0ZSBpbml0aWFsIGNvbnNvbGVzIGFzIHRhbGwgYXMgcG9zc2libGUgKHZ5cmVzID0gbWVtb3J5L3Z4cmVzKS4KKyAgICAgICAgICAgSXQgaXMgZGVmYXVsdC4KK25vcGNpcmV0cnkgLSBkaXNhYmxlIFBDSSByZXRyaWVzLiBJdCBpcyBuZWVkZWQgZm9yIHNvbWUgYnJva2VuIGNoaXBzZXRzLAorICAgICAgICAgICBpdCBpcyBhdXRvZGV0ZWN0ZWQgZm9yIGludGVsJ3MgODI0MzcuIEluIHRoaXMgY2FzZSBkZXZpY2UgZG9lcworCSAgIG5vdCBjb21wbHkgdG8gUENJIDIuMSBzcGVjcyAoaXQgd2lsbCBub3QgZ3VhcmFudGVlIHRoYXQgZXZlcnkKKwkgICB0cmFuc2FjdGlvbiB0ZXJtaW5hdGUgd2l0aCBzdWNjZXNzIG9yIHJldHJ5IGluIDMyIFBDTEspLgorcGNpcmV0cnkgLSBlbmFibGUgUENJIHJldHJpZXMuIEl0IGlzIGRlZmF1bHQsIGV4Y2VwdCBmb3IgaW50ZWwncyA4MjQzNy4KK25vdmdhICAgIC0gZGlzYWJsZXMgVkdBIEkvTyBwb3J0cy4gSXQgaXMgZGVmYXVsdCBpZiBCSU9TIGRpZCBub3QgZW5hYmxlIGRldmljZS4KKyAgICAgICAgICAgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgb3B0aW9uLCBzb21lIGJvYXJkcyB0aGVuIGRvIG5vdCByZXN0YXJ0CisJICAgd2l0aG91dCBwb3dlciBvZmYuCit2Z2EgICAgICAtIHByZXNlcnZlIHN0YXRlIG9mIFZHQSBJL08gcG9ydHMuIEl0IGlzIGRlZmF1bHQuIERyaXZlciBkb2VzIG5vdAorICAgICAgICAgICBlbmFibGUgVkdBIEkvTyBpZiBCSU9TIGRpZCBub3QgaXQgKGl0IGlzIG5vdCBzYWZlIHRvIGVuYWJsZSBpdCBpbgorCSAgIG1vc3QgY2FzZXMpLgorbm9iaW9zICAgLSBkaXNhYmxlcyBCSU9TIFJPTS4gSXQgaXMgZGVmYXVsdCBpZiBCSU9TIGRpZCBub3QgZW5hYmxlIEJJT1MgaXRzZWxmLgorICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBvcHRpb24sIHNvbWUgYm9hcmRzIHRoZW4gZG8gbm90IHJlc3RhcnQKKwkgICB3aXRob3V0IHBvd2VyIG9mZi4KK2Jpb3MgICAgIC0gcHJlc2VydmUgc3RhdGUgb2YgQklPUyBST00uIEl0IGlzIGRlZmF1bHQuIERyaXZlciBkb2VzIG5vdCBlbmFibGUKKyAgICAgICAgICAgQklPUyBpZiBCSU9TIHdhcyBub3QgZW5hYmxlZCBiZWZvcmUuCitub2luaXQgICAtIHRlbGxzIGRyaXZlciwgdGhhdCBkZXZpY2VzIHdlcmUgYWxyZWFkeSBpbml0aWFsaXplZC4gWW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgaXQgaWYgeW91IGhhdmUgRzEwMCBhbmQvb3IgaWYgZHJpdmVyIGNhbm5vdCBkZXRlY3QgbWVtb3J5LCB5b3Ugc2VlCisJICAgc3RyYW5nZSBwYXR0ZXJuIG9uIHNjcmVlbiBhbmQgc28gb24uIERldmljZXMgbm90IGVuYWJsZWQgYnkgQklPUworCSAgIGFyZSBzdGlsbCBpbml0aWFsaXplZC4gSXQgaXMgZGVmYXVsdC4KK2luaXQgICAgIC0gZHJpdmVyIGluaXRpYWxpemVzIGV2ZXJ5IGRldmljZSBpdCBrbm93cyBhYm91dC4KK21lbXR5cGUgIC0gc3BlY2lmaWVzIG1lbW9yeSB0eXBlLCBpbXBsaWVzICdpbml0Jy4gVGhpcyBpcyB2YWxpZCBvbmx5IGZvciBHMjAwIAorICAgICAgICAgICBhbmQgRzQwMCBhbmQgaGFzIGZvbGxvd2luZyBtZWFuaW5nOgorICAgICAgICAgICAgIEcyMDA6IDAgLT4gMngxMjhLeDMyIGNoaXBzLCAyTUIgb25ib2FyZCwgcHJvYmFibHkgc2dyYW0KKyAgICAgICAgICAgICAgICAgICAxIC0+IDJ4MTI4S3gzMiBjaGlwcywgNE1CIG9uYm9hcmQsIHByb2JhYmx5IHNncmFtCisgICAgICAgICAgICAgICAgICAgMiAtPiAyeDI1Nkt4MzIgY2hpcHMsIDRNQiBvbmJvYXJkLCBwcm9iYWJseSBzZ3JhbQorICAgICAgICAgICAgICAgICAgIDMgLT4gMngyNTZLeDMyIGNoaXBzLCA4TUIgb25ib2FyZCwgcHJvYmFibHkgc2dyYW0KKyAgICAgICAgICAgICAgICAgICA0IC0+IDJ4NTEyS3gxNiBjaGlwcywgOC8xNk1CIG9uYm9hcmQsIHByb2JhYmx5IHNkcmFtIG9ubHkKKyAgICAgICAgICAgICAgICAgICA1IC0+IHNhbWUgYXMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICA2IC0+IDR4MTI4S3gzMiBjaGlwcywgNE1CIG9uYm9hcmQsIHByb2JhYmx5IHNncmFtCisgICAgICAgICAgICAgICAgICAgNyAtPiA0eDEyOEt4MzIgY2hpcHMsIDhNQiBvbmJvYXJkLCBwcm9iYWJseSBzZ3JhbQorICAgICAgICAgICAgIEc0MDA6IDAgLT4gMng1MTJLeDE2IFNEUkFNLCAxNi8zMk1CCisgICAgICAgICAgICAgICAgICAgICAgICAyeDUxMkt4MzIgU0dSQU0sIDE2LzMyTUIKKyAgICAgICAgICAgICAgICAgICAxIC0+IDJ4MjU2S3gzMiBTR1JBTSwgOC8xNk1CCisgICAgICAgICAgICAgICAgICAgMiAtPiA0eDEyOEt4MzIgU0dSQU0sIDgvMTZNQgorICAgICAgICAgICAgICAgICAgIDMgLT4gNHg1MTJLeDMyIFNEUkFNLCAzMk1CCisgICAgICAgICAgICAgICAgICAgNCAtPiA0eDI1Nkt4MzIgU0dSQU0sIDE2LzMyTUIKKyAgICAgICAgICAgICAgICAgICA1IC0+IDJ4MU14MzIgU0RSQU0sIDMyTUIKKyAgICAgICAgICAgICAgICAgICA2IC0+IHJlc2VydmVkCisgICAgICAgICAgICAgICAgICAgNyAtPiByZXNlcnZlZAorICAgICAgICAgICBZb3Ugc2hvdWxkIHVzZSBzZHJhbSBvciBzZ3JhbSBwYXJhbWV0ZXIgaW4gYWRkaXRpb24gdG8gbWVtdHlwZSAKKyAgICAgICAgICAgcGFyYW1ldGVyLgorbm9tdHJyICAgLSBkaXNhYmxlcyB3cml0ZSBjb21iaW5pbmcgb24gZnJhbWUgYnVmZmVyLiBUaGlzIHNsb3dzIGRvd24gZHJpdmVyIGJ1dAorICAgICAgICAgICB0aGVyZSBpcyByZXBvcnRlZCBtaW5vciBpbmNvbXBhdGliaWxpdHkgYmV0d2VlbiBHVVMgRE1BIGFuZCBYRnJlZQorCSAgIHVuZGVyIGhpZ2ggbG9hZHMgaWYgd3JpdGUgY29tYmluaW5nIGlzIGVuYWJsZWQgKHNvdW5kIGRyb3BvdXRzKS4KK210cnIgICAgIC0gZW5hYmxlcyB3cml0ZSBjb21iaW5pbmcgb24gZnJhbWUgYnVmZmVyLiBJdCBzcGVlZHMgdXAgdmlkZW8gYWNjZXNzZXMKKyAgICAgICAgICAgbXVjaC4gSXQgaXMgZGVmYXVsdC4gWW91IG11c3QgaGF2ZSBNVFJSIHN1cHBvcnQgZW5hYmxlZCBpbiBrZXJuZWwKKwkgICBhbmQgeW91ciBDUFUgbXVzdCBoYXZlIE1UUlIgKGYuZS4gUGVudGl1bSBJSSBoYXZlIHRoZW0pLgorc2dyYW0gICAgLSB0ZWxscyB0byBkcml2ZXIgdGhhdCB5b3UgaGF2ZSBHeHgwIHdpdGggU0dSQU0gbWVtb3J5LiBJdCBoYXMgbm8KKyAgICAgICAgICAgZWZmZWN0IHdpdGhvdXQgYGluaXQnLgorc2RyYW0gICAgLSB0ZWxscyB0byBkcml2ZXIgdGhhdCB5b3UgaGF2ZSBHeHgwIHdpdGggU0RSQU0gbWVtb3J5LgorICAgICAgICAgICBJdCBpcyBhIGRlZmF1bHQuCitpbnYyNCAgICAtIGNoYW5nZSB0aW1pbmdzIHBhcmFtZXRlcnMgZm9yIDI0YnBwIG1vZGVzIG9uIE1pbGxlbml1bSBhbmQKKyAgICAgICAgICAgTWlsbGVuaXVtIElJLiBTcGVjaWZ5IHRoaXMgaWYgeW91IHNlZSBzdHJhbmdlIGNvbG9yIHNoYWRvd3MgYXJvdW5kCisJICAgY2hhcmFjdGVycy4KK25vaW52MjQgIC0gdXNlIHN0YW5kYXJkIHRpbWluZ3MuIEl0IGlzIHRoZSBkZWZhdWx0LgoraW52ZXJzZSAgLSBpbnZlcnQgY29sb3JzIG9uIHNjcmVlbiAoZm9yIExDRCBkaXNwbGF5cykKK25vaW52ZXJzZSAtIHNob3cgdHJ1ZSBjb2xvcnMgb24gc2NyZWVuLiBJdCBpcyBkZWZhdWx0LgorZGV2OlggICAgLSBiaW5kIGRyaXZlciB0byBkZXZpY2UgWC4gRHJpdmVyIG51bWJlcnMgZGV2aWNlIGZyb20gMCB1cCB0byBOLAorICAgICAgICAgICB3aGVyZSBkZXZpY2UgMCBpcyBmaXJzdCBga25vd24nIGRldmljZSBmb3VuZCwgMSBzZWNvbmQgYW5kIHNvIG9uLgorCSAgIGxzcGNpIGxpc3RzIGRldmljZXMgaW4gdGhpcyBvcmRlci4KKwkgICBEZWZhdWx0IGlzIGBldmVyeScga25vd24gZGV2aWNlIGZvciBkcml2ZXIgd2l0aCBtdWx0aWhlYWQgc3VwcG9ydAorCSAgIGFuZCBmaXJzdCB3b3JraW5nIGRldmljZSAodXN1YWxseSBkZXY6MCkgZm9yIGRyaXZlciB3aXRob3V0CisJICAgbXVsdGloZWFkIHN1cHBvcnQuCitub2h3Y3Vyc29yIC0gZGlzYWJsZXMgaGFyZHdhcmUgY3Vyc29yICh1c2Ugc29mdHdhcmUgY3Vyc29yIGluc3RlYWQpLgoraHdjdXJzb3IgLSBlbmFibGVzIGhhcmR3YXJlIGN1cnNvci4gSXQgaXMgZGVmYXVsdC4gSWYgeW91IGFyZSB1c2luZworICAgICAgICAgICBub24tYWNjZWxlcmF0ZWQgbW9kZSAoYG5vYWNjZWwnIG9yIGBmYnNldCAtYWNjZWwgZmFsc2UnKSwgc29mdHdhcmUKKwkgICBjdXJzb3IgaXMgdXNlZCAoZXhjZXB0IGZvciB0ZXh0IG1vZGUpLgorbm9ibGluayAgLSBkaXNhYmxlcyBjdXJzb3IgYmxpbmtpbmcuIEN1cnNvciBpbiB0ZXh0IG1vZGUgYWx3YXlzIGJsaW5rcyAoaHcKKyAgICAgICAgICAgbGltaXRhdGlvbikuCitibGluayAgICAtIGVuYWJsZXMgY3Vyc29yIGJsaW5raW5nLiBJdCBpcyBkZWZhdWx0Lgorbm9mYXN0Zm9udCAtIGRpc2FibGVzIGZhc3Rmb250IGZlYXR1cmUuIEl0IGlzIGRlZmF1bHQuCitmYXN0Zm9udDpYIC0gZW5hYmxlcyBmYXN0Zm9udCBmZWF0dXJlLiBYIHNwZWNpZmllcyBzaXplIG9mIG1lbW9yeSByZXNlcnZlZCBmb3IKKyAgICAgICAgICAgICBmb250IGRhdGEsIGl0IG11c3QgYmUgPj0gKGZvbnR3aWR0aCpmb250aGVpZ2h0KmNoYXJzX2luX2ZvbnQpLzguCisJICAgICBJdCBpcyBmYXN0ZXIgb24gR3gwMCBzZXJpZXMsIGJ1dCBzbG93ZXIgb24gb2xkZXIgY2FyZHMuCitncmF5c2NhbGUgLSBlbmFibGUgZ3JheXNjYWxlIHN1bW1pbmcuIEl0IHdvcmtzIGluIFBTRVVET0NPTE9SIG1vZGVzICh0ZXh0LAorICAgICAgICAgICAgNGJwcCwgOGJwcCkuIEluIERJUkVDVENPTE9SIG1vZGVzIGl0IGlzIGxpbWl0ZWQgdG8gY2hhcmFjdGVycworCSAgICBkaXNwbGF5ZWQgdGhyb3VnaCBwdXRjL3B1dGNzLiBEaXJlY3QgYWNjZXNzZXMgdG8gZnJhbWVidWZmZXIKKwkgICAgY2FuIHBhaW50IGNvbG9ycy4KK25vZ3JheXNjYWxlIC0gZGlzYWJsZSBncmF5c2NhbGUgc3VtbWluZy4gSXQgaXMgZGVmYXVsdC4KK2Nyb3NzNE1CIC0gZW5hYmxlcyB0aGF0IHBpeGVsIGxpbmUgY2FuIGNyb3NzIDRNQiBib3VuZGFyeS4gSXQgaXMgZGVmYXVsdCBmb3IKKyAgICAgICAgICAgbm9uLU1pbGxlbml1bS4KK25vY3Jvc3M0TUIgLSBwaXhlbCBsaW5lIG11c3Qgbm90IGNyb3NzIDRNQiBib3VuZGFyeS4gSXQgaXMgZGVmYXVsdCBmb3IKKyAgICAgICAgICAgICBNaWxsZW5pdW0gSSBvciBJSSwgYmVjYXVzZSBvZiB0aGVzZSBkZXZpY2VzIGhhdmUgaGFyZHdhcmUKKwkgICAgIGxpbWl0YXRpb25zIHdoaWNoIGRvIG5vdCBhbGxvdyB0aGlzLiBCdXQgdGhpcyBvcHRpb24gaXMKKwkgICAgIGluY29tcGF0aWJsZSB3aXRoIHNvbWUgKGlmIG5vdCBhbGwgeWV0IHJlbGVhc2VkKSB2ZXJzaW9ucyBvZgorCSAgICAgWEY4Nl9GQkRldi4KK2RmcCAgICAgIC0gZW5hYmxlcyBkaWdpdGFsIGZsYXQgcGFuZWwgaW50ZXJmYWNlLiBUaGlzIG9wdGlvbiBpcyBpbmNvbXBhdGlibGUgd2l0aAorICAgICAgICAgICBzZWNvbmRhcnkgKFRWKSBvdXRwdXQgLSBpZiBERlAgaXMgYWN0aXZlLCBUViBvdXRwdXQgbXVzdCBiZQorCSAgIGluYWN0aXZlIGFuZCB2aWNlIHZlcnNhLiBERlAgYWx3YXlzIHVzZXMgc2FtZSB0aW1pbmcgYXMgcHJpbWFyeQorCSAgIChtb25pdG9yKSBvdXRwdXQuCitkZnA6WCAgICAtIHVzZSBzZXR0aW5ncyBYIGZvciBkaWdpdGFsIGZsYXQgcGFuZWwgaW50ZXJmYWNlLiBYIGlzIG51bWJlciBmcm9tCisgICAgICAgICAgIDAgdG8gMHhGRiwgYW5kIG1lYW5pbmcgb2YgZWFjaCBpbmRpdmlkdWFsIGJpdCBpcyBkZXNjcmliZWQgaW4KKwkgICBHNDAwIG1hbnVhbCwgaW4gZGVzY3JpcHRpb24gb2YgREFDIHJlZ2lzdGVyIDB4MUYuIEZvciBub3JtYWwgb3BlcmF0aW9uCisJICAgeW91IHNob3VsZCBzZXQgYWxsIGJpdHMgdG8gemVybywgZXhjZXB0IGxvd2VzdCBiaXQuIFRoaXMgbG93ZXN0IGJpdAorCSAgIHNlbGVjdHMgd2hvIGlzIHNvdXJjZSBvZiBkaXNwbGF5IGNsb2Nrcywgd2hldGhlciBHNDAwLCBvciBwYW5lbC4KKwkgICBEZWZhdWx0IHZhbHVlIGlzIG5vdyByZWFkIGJhY2sgZnJvbSBoYXJkd2FyZSAtIHNvIHlvdSBzaG91bGQgc3BlY2lmeQorCSAgIHRoaXMgdmFsdWUgb25seSBpZiB5b3UgYXJlIGFsc28gdXNpbmcgYGluaXQnIHBhcmFtZXRlci4KK291dHB1dHM6WFlaIC0gc2V0IG1hcHBpbmcgYmV0d2VlbiBDUlRDIGFuZCBvdXRwdXRzLiBFYWNoIGxldHRlciBjYW4gaGF2ZSB2YWx1ZQorICAgICAgICAgICBvZiAwIChmb3Igbm8gQ1JUQyksIDEgKENSVEMxKSBvciAyIChDUlRDMiksIGFuZCBmaXJzdCBsZXR0ZXIgY29ycmVzcG9uZHMKKwkgICB0byBwcmltYXJ5IGFuYWxvZyBvdXRwdXQsIHNlY29uZCBsZXR0ZXIgdG8gdGhlIHNlY29uZGFyeSBhbmFsb2cgb3V0cHV0CisJICAgYW5kIHRoaXJkIGxldHRlciB0byB0aGUgRFZJIG91dHB1dC4gRGVmYXVsdCBzZXR0aW5nIGlzIDEwMCBmb3IKKwkgICBjYXJkcyBiZWxvdyBHNDAwIG9yIEc0MDAgd2l0aG91dCBERlAsIDEwMSBmb3IgRzQwMCB3aXRoIERGUCwgYW5kCisJICAgMTExIGZvciBHNDUwIGFuZCBHNTUwLiBZb3UgY2FuIHNldCBtYXBwaW5nIG9ubHkgb24gZmlyc3QgY2FyZCwKKwkgICB1c2UgbWF0cm94c2V0IGZvciBzZXR0aW5nIHVwIG90aGVyIGRldmljZXMuCit2ZXNhOlggICAtIHNlbGVjdHMgc3RhcnR1cCB2aWRlb21vZGUuIFggaXMgbnVtYmVyIGZyb20gMCB0byAweDFGRiwgc2VlIHRhYmxlCisgICAgICAgICAgIGFib3ZlIGZvciBkZXRhaWxlZCBleHBsYW5hdGlvbi4gRGVmYXVsdCBpcyA2NDB4NDgweDhicHAgaWYgZHJpdmVyCisJICAgaGFzIDhicHAgc3VwcG9ydC4gT3RoZXJ3aXNlIGZpcnN0IGF2YWlsYWJsZSBvZiA2NDB4MzUweDRicHAsCisJICAgNjQweDQ4MHgxNWJwcCwgNjQweDQ4MHgyNGJwcCwgNjQweDQ4MHgzMmJwcCBvciA4MHgyNSB0ZXh0CisJICAgKDgweDI1IHRleHQgaXMgYWx3YXlzIGF2YWlsYWJsZSkuCisKK0lmIHlvdSBhcmUgbm90IHNhdGlzZmllZCB3aXRoIHZpZGVvbW9kZSBzZWxlY3RlZCBieSBgdmVzYScgb3B0aW9uLCB5b3UKK2NhbiBtb2RpZnkgaXQgd2l0aCB0aGVzZSBvcHRpb25zOgorCit4cmVzOlggICAtIGhvcml6b250YWwgcmVzb2x1dGlvbiwgaW4gcGl4ZWxzLiBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSBgdmVzYScKKyAgICAgICAgICAgb3B0aW9uLgoreXJlczpYICAgLSB2ZXJ0aWNhbCByZXNvbHV0aW9uLCBpbiBwaXhlbCBsaW5lcy4gRGVmYXVsdCBpcyBkZXJpdmVkIGZyb20gYHZlc2EnCisgICAgICAgICAgIG9wdGlvbi4KK3VwcGVyOlggIC0gdG9wIGJvdW5kYXJ5OiBsaW5lcyBiZXR3ZWVuIGVuZCBvZiBWU1lOQyBwdWxzZSBhbmQgc3RhcnQgb2YgZmlyc3QKKyAgICAgICAgICAgcGl4ZWwgbGluZSBvZiBwaWN0dXJlLiBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSBgdmVzYScgb3B0aW9uLgorbG93ZXI6WCAgLSBib3R0b20gYm91bmRhcnk6IGxpbmVzIGJldHdlZW4gZW5kIG9mIHBpY3R1cmUgYW5kIHN0YXJ0IG9mIFZTWU5DCisgICAgICAgICAgIHB1bHNlLiBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSBgdmVzYScgb3B0aW9uLgordnNsZW46WCAgLSBsZW5ndGggb2YgVlNZTkMgcHVsc2UsIGluIGxpbmVzLiBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSBgdmVzYScKKyAgICAgICAgICAgb3B0aW9uLgorbGVmdDpYICAgLSBsZWZ0IGJvdW5kYXJ5OiBwaXhlbHMgYmV0d2VlbiBlbmQgb2YgSFNZTkMgcHVsc2UgYW5kIGZpcnN0IHBpeGVsLgorICAgICAgICAgICBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSBgdmVzYScgb3B0aW9uLgorcmlnaHQ6WCAgLSByaWdodCBib3VuZGFyeTogcGl4ZWxzIGJldHdlZW4gZW5kIG9mIHBpY3R1cmUgYW5kIHN0YXJ0IG9mIEhTWU5DCisgICAgICAgICAgIHB1bHNlLiBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSBgdmVzYScgb3B0aW9uLgoraHNsZW46WCAgLSBsZW5ndGggb2YgSFNZTkMgcHVsc2UsIGluIHBpeGVscy4gRGVmYXVsdCBpcyBkZXJpdmVkIGZyb20gYHZlc2EnCisgICAgICAgICAgIG9wdGlvbi4KK3BpeGNsb2NrOlggLSBkb3RjbG9ja3MsIGluIHBzIChwaWNvc2Vjb25kcykuIERlZmF1bHQgaXMgZGVyaXZlZCBmcm9tIGB2ZXNhJworICAgICAgICAgICAgIG9wdGlvbiBhbmQgZnJvbSBgZmgnIGFuZCBgZnYnIG9wdGlvbnMuCitzeW5jOlggICAtIHN5bmMuIHB1bHNlIC0gYml0IDAgaW52ZXJ0cyBIU1lOQyBwb2xhcml0eSwgYml0IDEgVlNZTkMgcG9sYXJpdHkuCisgICAgICAgICAgIElmIGJpdCAzICh2YWx1ZSAweDA4KSBpcyBzZXQsIGNvbXBvc2l0ZSBzeW5jIGluc3RlYWQgb2YgSFNZTkMgaXMKKwkgICBnZW5lcmF0ZWQuIElmIGJpdCA1ICh2YWx1ZSAweDIwKSBpcyBzZXQsIHN5bmMgb24gZ3JlZW4gaXMgdHVybmVkIG9uLgorCSAgIERvIG5vdCBmb3JnZXQgdGhhdCBpZiB5b3Ugd2FudCBzeW5jIG9uIGdyZWVuLCB5b3UgYWxzbyBwcm9iYWJseQorCSAgIHdhbnQgY29tcG9zaXRlIHN5bmMuCisJICAgRGVmYXVsdCBkZXBlbmRzIG9uIGB2ZXNhJy4KK2RlcHRoOlggIC0gQml0cyBwZXIgcGl4ZWw6IDA9dGV4dCwgNCw4LDE1LDE2LDI0IG9yIDMyLiBEZWZhdWx0IGRlcGVuZHMgb24KKyAgICAgICAgICAgYHZlc2EnLgorCitJZiB5b3Uga25vdyBjYXBhYmlsaXRpZXMgb2YgeW91ciBtb25pdG9yLCB5b3UgY2FuIHNwZWNpZnkgc29tZSAob3IgYWxsKSBvZgorYG1heGNsaycsIGBmaCcgYW5kIGBmdicuIEluIHRoaXMgY2FzZSwgYHBpeGNsb2NrJyBpcyBjb21wdXRlZCBzbyB0aGF0CitwaXhjbG9jayA8PSBtYXhjbGssIHJlYWxfZmggPD0gZmggYW5kIHJlYWxfZnYgPD0gZnYuCisKK21heGNsazpYIC0gbWF4aW11bSBkb3RjbG9jay4gWCBjYW4gYmUgc3BlY2lmaWVkIGluIE1Ieiwga0h6IG9yIEh6LiBEZWZhdWx0IGlzCisgICAgICAgICAgIGBkb24ndCBjYXJlJy4KK2ZoOlggICAgIC0gbWF4aW11bSBob3Jpem9udGFsIHN5bmNocm9uaXphdGlvbiBmcmVxdWVuY3kuIFggY2FuIGJlIHNwZWNpZmllZAorICAgICAgICAgICBpbiBrSHogb3IgSHouIERlZmF1bHQgaXMgYGRvbid0IGNhcmUnLgorZnY6WCAgICAgLSBtYXhpbXVtIHZlcnRpY2FsIGZyZXF1ZW5jeS4gWCBtdXN0IGJlIHNwZWNpZmllZCBpbiBIei4gRGVmYXVsdCBpcworICAgICAgICAgICA3MCBmb3IgbW9kZXMgZGVyaXZlZCBmcm9tIGB2ZXNhJyB3aXRoIHlyZXMgPD0gNDAwLCA2MEh6IGZvcgorCSAgIHlyZXMgPiA0MDAuCisKKworTGltaXRhdGlvbnMKKz09PT09PT09PT09CisKK1RoZXJlIGFyZSBrbm93biBhbmQgdW5rbm93biBidWdzLCBmZWF0dXJlcyBhbmQgbWlzZmVhdHVyZXMuCitDdXJyZW50bHkgdGhlcmUgYXJlIGZvbGxvd2luZyBrbm93biBidWdzOgorICsgU1ZHQUxpYiBkb2VzIG5vdCByZXN0b3JlIHNjcmVlbiBvbiBleGl0CisgKyBnZW5lcmljIGZiY29uLWNmYlggcHJvY2VkdXJlcyBkbyBub3Qgd29yayBvbiBBbHBoYXMuIER1ZSB0byB0aGlzLAorICAgYG5vYWNjZWwnIChhbmQgY2ZiNCBhY2NlbCkgZHJpdmVyIGRvZXMgbm90IHdvcmsgb24gQWxwaGEuIFNvIGV2ZXJ5b25lCisgICB3aXRoIGFjY2VzcyB0byAvZGV2L2ZiKiBvbiBBbHBoYSBjYW4gaGFuZyBtYWNoaW5lICh5b3Ugc2hvdWxkIHJlc3RyaWN0CisgICBhY2Nlc3MgdG8gL2Rldi9mYiogLSBldmVyeW9uZSB3aXRoIGFjY2VzcyB0byB0aGlzIGRldmljZSBjYW4gZGVzdHJveQorICAgeW91ciBtb25pdG9yLCBiZWxpZXZlIG1lLi4uKS4KKyArIDI0YnBwIGRvZXMgbm90IHN1cHBvcnQgY29ycmVjdGx5IFhGLUZCRGV2IG9uIGJpZy1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4KKyArIGludGVybGFjZWQgdGV4dCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQ7IGl0IGxvb2tzIGxpa2UgaGFyZHdhcmUgbGltaXRhdGlvbiwKKyAgIGJ1dCBJJ20gbm90IHN1cmUuCisgKyBHeHgwIFNHUkFNL1NEUkFNIGlzIG5vdCBhdXRvZGV0ZWN0ZWQuCisgKyBJZiB5b3UgYXJlIHVzaW5nIG1vcmUgdGhhbiBvbmUgZnJhbWVidWZmZXIgZGV2aWNlLCB5b3UgbXVzdCBib290IGtlcm5lbAorICAgd2l0aCAndmlkZW89c2Nyb2xsYmFjazowJy4KKyArIG1heWJlIG1vcmUuLi4KK0FuZCBmb2xsb3dpbmcgbWlzZmVhdHVyZXM6CisgKyBTVkdBTGliIGRvZXMgbm90IHJlc3RvcmUgc2NyZWVuIG9uIGV4aXQuCisgKyBwaXhjbG9jayBmb3IgdGV4dCBtb2RlcyBpcyBsaW1pdGVkIGJ5IGhhcmR3YXJlIHRvCisgICAgODMgTUh6IG9uIEcyMDAKKyAgICA2NiBNSHogb24gTWlsbGVubml1bSBJCisgICAgNjAgTUh6IG9uIE1pbGxlbm5pdW0gSUkKKyAgIEJlY2F1c2UgSSBoYXZlIG5vIGFjY2VzcyB0byBvdGhlciBkZXZpY2VzLCBJIGRvIG5vdCBrbm93IHNwZWNpZmljCisgICBmcmVxdWVuY2llcyBmb3IgdGhlbS4gU28gZHJpdmVyIGRvZXMgbm90IGNoZWNrIHRoaXMgYW5kIGFsbG93cyB5b3UgdG8KKyAgIHNldCBmcmVxdWVuY3kgaGlnaGVyIHRoYXQgdGhpcy4gSXQgY2F1c2VzIHNwYXJrcywgYmxhY2sgaG9sZXMgYW5kIG90aGVyCisgICBwcmV0dHkgZWZmZWN0cyBvbiBzY3JlZW4uIERldmljZSB3YXMgbm90IGRlc3Ryb3llZCBkdXJpbmcgdGVzdHMuIDotKQorICsgbXkgTWlsbGVubml1bSBHMjAwIG9zY2lsbGF0b3IgaGFzIGZyZXF1ZW5jeSByYW5nZSBmcm9tIDM1IE1IeiB0byAzODAgTUh6CisgICAoYW5kIGl0IHdvcmtzIHdpdGggOGJwcCBvbiBhYm91dCAzMjAgTUh6IGRvdGNsb2NrcyAoYW5kIGNoYW5nZWQgbWNsaykpLgorICAgQnV0IE1hdHJveCBzYXlzIG9uIHByb2R1Y3Qgc2hlZXQgdGhhdCBWQ08gbGltaXQgaXMgNTAtMjUwIE1Ieiwgc28gSSBiZWxpZXZlCisgICB0aGVtIChtYXliZSB0aGF0IGNoaXAgb3ZlcmhlYXRzLCBidXQgaXQgaGFzIGEgdmVyeSBiaWcgY29vbGVyIChHMTAwIGhhcworICAgbm9uZSksIHNvIGl0IHNob3VsZCB3b3JrKS4KKyArIHNwZWNpYWwgbWl4ZWQgdmlkZW8vZ3JhcGhpY3MgdmlkZW9tb2RlcyBvZiBNeXN0aXF1ZSBhbmQgR3gwMCAtIDJHOFYxNiBhbmQKKyAgIEcxNlYxNiBhcmUgbm90IHN1cHBvcnRlZAorICsgY29sb3Iga2V5aW5nIGlzIG5vdCBzdXBwb3J0ZWQKKyArIGZlYXR1cmUgY29ubmVjdG9yIG9mIE15c3RpcXVlIGFuZCBHeDAwIGlzIHNldCB0byBWR0EgbW9kZSAoaXQgaXMgZGlzYWJsZWQKKyAgIGJ5IEJJT1MpCisgKyBEREMgKG1vbml0b3IgZGV0ZWN0aW9uKSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCBkdWFsaGVhZCBkcml2ZXIKKyArIHNvbWUgY2hlY2sgZm9yIGlucHV0IHZhbHVlcyBhcmUgbm90IHNvIHN0cmljdCBob3cgaXQgc2hvdWxkIGJlICh5b3UgY2FuCisgICBzcGVjaWZ5IHZzbGVuPTQwMDAgYW5kIHNvIG9uKS4KKyArIG1heWJlIG1vcmUuLi4KK0FuZCBmb2xsb3dpbmcgZmVhdHVyZXM6CisgKyA0YnBwIGlzIGF2YWlsYWJsZSBvbmx5IG9uIE1pbGxlbm5pdW0gSSBhbmQgTWlsbGVubml1bSBJSS4gSXQgaXMgaGFyZHdhcmUKKyAgIGxpbWl0YXRpb24uCisgKyBzZWxlY3Rpb24gYmV0d2VlbiAxOjU6NTo1IGFuZCA1OjY6NSAxNmJwcCB2aWRlb21vZGUgaXMgZG9uZSBieSAtcmdiYSAKKyAgIG9wdGlvbiBvZiBmYnNldDogImZic2V0IC1kZXB0aCAxNiAtcmdiYSA1LDUsNSIgc2VsZWN0cyAxOjU6NTo1LCBhbnl0aGluZworICAgZWxzZSBzZWxlY3RzIDU6Njo1IG1vZGUuCisgKyB0ZXh0IG1vZGUgdXNlcyA2IGJpdCBWR0EgcGFsZXR0ZSBpbnN0ZWFkIG9mIDggYml0IChvbmUgb2YgMjYyMTQ0IGNvbG9ycworICAgaW5zdGVhZCBvZiBvbmUgb2YgMTZNIGNvbG9ycykuIEl0IGlzIGR1ZSB0byBoYXJkd2FyZSBsaW1pdGF0aW9uIG9mIAorICAgTWlsbGVubml1bSBJL0lJIGFuZCBTVkdBTGliIGNvbXBhdGliaWxpdHkuCisKKworQmVuY2htYXJrcworPT09PT09PT09PQorSXQgaXMgdGltZSB0byByZWRyYXcgd2hvbGUgc2NyZWVuIDEwMDAgdGltZXMgaW4gMTAyNHg3NjgsIDYwSHouIEl0IGlzCit0aW1lIGZvciBkcmF3IDYxNDQwMDAgY2hhcmFjdGVycyBvbiBzY3JlZW4gdGhyb3VnaCAvZGV2L3Zjc2EKKyhmb3IgMzJicHAgaXQgaXMgYWJvdXQgM0dCIG9mIGRhdGEgKGV4YWN0bHkgMzAwMCBNQik7IGZvciA4eDE2IGZvbnQgaW4gCisxNiBzZWNvbmRzLCBpLmUuIDE4NyBNQnBzKS4KK1RpbWVzIHdlcmUgb2J0YWluZWQgZnJvbSBvbmUgb2xkZXIgdmVyc2lvbiBvZiBkcml2ZXIsIG5vdyB0aGV5IGFyZSBhYm91dCAzJQorZmFzdGVyLCBpdCBpcyBrZXJuZWwtc3BhY2Ugb25seSB0aW1lIG9uIFAtSUkvMzUwIE1IeiwgTWlsbGVubml1bSBJIGluIDMzIE1IegorUENJIHNsb3QsIEcyMDAgaW4gQUdQIDJ4IHNsb3QuIEkgZGlkIG5vdCB0ZXN0IHZnYWNvbi4KKworTk9BQ0NFTAorICAgICAgICA4eDE2ICAgICAgICAgICAgICAgICAxMngyMgorICAgICAgICBNaWxsZW5uaXVtIEkgIEcyMDAgICBNaWxsZW5uaXVtIEkgIEcyMDAKKzhicHAgICAgMTYuNDIgICAgICAgICA5LjU0ICAgMTIuMzMgICAgICAgICA5LjEzCisxNmJwcCAgIDIxLjAwICAgICAgICAxNS43MCAgIDE5LjExICAgICAgICAxNS4wMgorMjRicHAgICAzNi42NiAgICAgICAgMzYuNjYgICAzNS4wMCAgICAgICAgMzUuMDAKKzMyYnBwICAgMzUuMDAgICAgICAgIDMwLjAwICAgMzMuODUgICAgICAgIDI4LjY2CisKK0FDQ0VMLCBub2Zhc3Rmb250CisgICAgICAgIDh4MTYgICAgICAgICAgICAgICAgIDEyeDIyICAgICAgICAgICAgICAgIDZ4MTEKKwlNaWxsZW5uaXVtIEkgIEcyMDAgICBNaWxsZW5uaXVtIEkgIEcyMDAgICBNaWxsZW5uaXVtIEkgIEcyMDAKKzhicHAgICAgIDcuNzkgICAgICAgICA3LjI0ICAgMTMuNTUgICAgICAgICA3Ljc4ICAgMzAuMDAgICAgICAgIDIxLjAxCisxNmJwcCAgICA5LjEzICAgICAgICAgNy43OCAgIDE2LjE2ICAgICAgICAgNy43OCAgIDMwLjAwICAgICAgICAyMS4wMQorMjRicHAgICAxNC4xNyAgICAgICAgMTAuNzIgICAxOC42OSAgICAgICAgMTAuMjQgICAzNC45OSAgICAgICAgMjEuMDEKKzMyYnBwICAgMTYuMTUJICAgICAxNi4xNiAgIDE4LjczICAgICAgICAxMy4wOSAgIDM0Ljk5ICAgICAgICAyMS4wMQorCitBQ0NFTCwgZmFzdGZvbnQKKyAgICAgICAgOHgxNiAgICAgICAgICAgICAgICAgMTJ4MjIgICAgICAgICAgICAgICAgNngxMQorCU1pbGxlbm5pdW0gSSAgRzIwMCAgIE1pbGxlbm5pdW0gSSAgRzIwMCAgIE1pbGxlbm5pdW0gSSAgRzIwMAorOGJwcCAgICAgOC40MSAgICAgICAgIDYuMDEgICAgNi41NCAgICAgICAgIDQuMzcgICAxNi4wMCAgICAgICAgMTAuNTEKKzE2YnBwICAgIDkuNTQgICAgICAgICA5LjEyICAgIDguNzYgICAgICAgICA2LjE3ICAgMTcuNTIgICAgICAgIDE0LjAxCisyNGJwcCAgIDE1LjAwICAgICAgICAxMi4zNiAgIDExLjY3ICAgICAgICAxMC4wMCAgIDIyLjAxICAgICAgICAxOC4zMgorMzJicHAgICAxNi4xOCAgICAgICAgMTguMjkqICAxMi43MSAgICAgICAgMTIuNzQgICAyNC40NCAgICAgICAgMjEuMDAKKworVEVYVAorICAgICAgICA4eDE2CisJTWlsbGVubml1bSBJICBHMjAwCitURVhUICAgICAzLjI5ICAgICAgICAgMS41MAorCisqIFllcywgaXQgaXMgc2xvd2VyIHRoYW4gTWlsbGVubml1bSBJLgorCisKK0R1YWxoZWFkIEc0MDAKKz09PT09PT09PT09PT0KK0RyaXZlciBzdXBwb3J0cyBkdWFsaGVhZCBHNDAwIHdpdGggc29tZSBsaW1pdGF0aW9uczoKKyArIHNlY29uZGFyeSBoZWFkIHNoYXJlcyB2aWRlb21lbW9yeSB3aXRoIHByaW1hcnkgaGVhZC4gSXQgaXMgbm90IHByb2JsZW0KKyAgIGlmIHlvdSBoYXZlIDMyTUIgb2YgdmlkZW9yYW0sIGJ1dCBpZiB5b3UgaGF2ZSBvbmx5IDE2TUIsIHlvdSBtYXkgaGF2ZQorICAgdG8gdGhpbmsgdHdpY2UgYmVmb3JlIGNob29zaW5nIHZpZGVvbW9kZSAoZm9yIGV4YW1wbGUgdHdpY2UgMTg4MHgxNDQweDMyYnBwCisgICBpcyBub3QgcG9zc2libGUpLgorICsgZHVlIHRvIGhhcmR3YXJlIGxpbWl0YXRpb24sIHNlY29uZGFyeSBoZWFkIGNhbiB1c2Ugb25seSAxNiBhbmQgMzJicHAKKyAgIHZpZGVvbW9kZXMuCisgKyBzZWNvbmRhcnkgaGVhZCBpcyBub3QgYWNjZWxlcmF0ZWQuIFRoZXJlIHdlcmUgYmFkIHByb2JsZW1zIHdpdGggYWNjZWxlcmF0ZWQKKyAgIFhGcmVlIHdoZW4gc2Vjb25kYXJ5IGhlYWQgdXNlZCB0byB1c2UgYWNjZWxlcmF0aW9uLgorICsgc2Vjb25kYXJ5IGhlYWQgYWx3YXlzIHBvd2VydXBzIGluIDY0MHg0ODBANjAtMzIgdmlkZW9tb2RlLiBZb3UgaGF2ZSB0byB1c2UKKyAgIGZic2V0IHRvIGNoYW5nZSB0aGlzIG1vZGUuCisgKyBzZWNvbmRhcnkgaGVhZCBhbHdheXMgcG93ZXJ1cHMgaW4gbW9uaXRvciBtb2RlLiBZb3UgaGF2ZSB0byB1c2UgZmJtYXRyb3hzZXQKKyAgIHRvIGNoYW5nZSBpdCB0byBUViBtb2RlLiBBbHNvLCB5b3UgbXVzdCBzZWxlY3QgYXQgbGVhc3QgNTI1IGxpbmVzIGZvcgorICAgTlRTQyBvdXRwdXQgYW5kIDYyNSBsaW5lcyBmb3IgUEFMIG91dHB1dC4KKyArIGtlcm5lbCBpcyBub3QgZnVsbHkgbXVsdGloZWFkIHJlYWR5LiBTbyBzb21lIHRoaW5ncyBhcmUgaW1wb3NzaWJsZSB0byBkby4KKyArIGlmIHlvdSBjb21waWxlZCBpdCBhcyBtb2R1bGUsIHlvdSBtdXN0IGluc2VydCBpMmMtbWF0cm94ZmIsIG1hdHJveGZiX21hdmVuCisgICBhbmQgbWF0cm94ZmJfY3J0YzIgaW50byBrZXJuZWwuCisKKworRHVhbGhlYWQgRzQ1MAorPT09PT09PT09PT09PQorRHJpdmVyIHN1cHBvcnRzIGR1YWxoZWFkIEc0NTAgd2l0aCBzb21lIGxpbWl0YXRpb25zOgorICsgc2Vjb25kYXJ5IGhlYWQgc2hhcmVzIHZpZGVvbWVtb3J5IHdpdGggcHJpbWFyeSBoZWFkLiBJdCBpcyBub3QgcHJvYmxlbQorICAgaWYgeW91IGhhdmUgMzJNQiBvZiB2aWRlb3JhbSwgYnV0IGlmIHlvdSBoYXZlIG9ubHkgMTZNQiwgeW91IG1heSBoYXZlCisgICB0byB0aGluayB0d2ljZSBiZWZvcmUgY2hvb3NpbmcgdmlkZW9tb2RlLgorICsgZHVlIHRvIGhhcmR3YXJlIGxpbWl0YXRpb24sIHNlY29uZGFyeSBoZWFkIGNhbiB1c2Ugb25seSAxNiBhbmQgMzJicHAKKyAgIHZpZGVvbW9kZXMuCisgKyBzZWNvbmRhcnkgaGVhZCBpcyBub3QgYWNjZWxlcmF0ZWQuCisgKyBzZWNvbmRhcnkgaGVhZCBhbHdheXMgcG93ZXJ1cHMgaW4gNjQweDQ4MEA2MC0zMiB2aWRlb21vZGUuIFlvdSBoYXZlIHRvIHVzZQorICAgZmJzZXQgdG8gY2hhbmdlIHRoaXMgbW9kZS4KKyArIFRWIG91dHB1dCBpcyBub3Qgc3VwcG9ydGVkCisgKyBrZXJuZWwgaXMgbm90IGZ1bGx5IG11bHRpaGVhZCByZWFkeSwgc28gc29tZSB0aGluZ3MgYXJlIGltcG9zc2libGUgdG8gZG8uCisgKyBpZiB5b3UgY29tcGlsZWQgaXQgYXMgbW9kdWxlLCB5b3UgbXVzdCBpbnNlcnQgbWF0cm94ZmJfZzQ1MCBhbmQgbWF0cm94ZmJfY3J0YzIKKyAgIGludG8ga2VybmVsLgorCQorLS0KK1BldHIgVmFuZHJvdmVjIDx2YW5kcm92ZUB2Yy5jdnV0LmN6PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9tb2RlZGIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9tb2RlZGIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDQ1OGIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9tb2RlZGIudHh0CkBAIC0wLDAgKzEsNjEgQEAKKworCisJCQltb2RlZGIgZGVmYXVsdCB2aWRlbyBtb2RlIHN1cHBvcnQKKworCitDdXJyZW50bHkgYWxsIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVycyBoYXZlIHRoZWlyIG93biB2aWRlbyBtb2RlIGRhdGFiYXNlcywKK3doaWNoIGlzIGEgbWVzcyBhbmQgYSB3YXN0ZSBvZiByZXNvdXJjZXMuIFRoZSBtYWluIGlkZWEgb2YgbW9kZWRiIGlzIHRvIGhhdmUKKworICAtIG9uZSByb3V0aW5lIHRvIHByb2JlIGZvciB2aWRlbyBtb2Rlcywgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYWxsIGZyYW1lIGJ1ZmZlcgorICAgIGRldmljZXMKKyAgLSBvbmUgZ2VuZXJpYyB2aWRlbyBtb2RlIGRhdGFiYXNlIHdpdGggYSBmYWlyIGFtb3VudCBvZiBzdGFuZGFyZCB2aWRlb21vZGVzCisgICAgKHRha2VuIGZyb20gWEZyZWU4NikKKyAgLSB0aGUgcG9zc2liaWxpdHkgdG8gc3VwcGx5IHlvdXIgb3duIG1vZGUgZGF0YWJhc2UgZm9yIGdyYXBoaWNzIGhhcmR3YXJlIHRoYXQKKyAgICBuZWVkcyBub24tc3RhbmRhcmQgbW9kZXMsIGxpa2UgYW1pZmIgYW5kIE1hYyBmcmFtZSBidWZmZXIgZHJpdmVycyAod2hpY2gKKyAgICB1c2UgbWFjbW9kZXMuYykKKworV2hlbiBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgcmVjZWl2ZXMgYSB2aWRlbz0gb3B0aW9uIGl0IGRvZXNuJ3Qga25vdywgaXQgc2hvdWxkCitjb25zaWRlciB0aGF0IHRvIGJlIGEgdmlkZW8gbW9kZSBvcHRpb24uIElmIG5vIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgc3BlY2lmaWVkCitpbiBhIHZpZGVvPSBvcHRpb24sIGZibWVtIGNvbnNpZGVycyB0aGF0IHRvIGJlIGEgZ2xvYmFsIHZpZGVvIG1vZGUgb3B0aW9uLgorCitWYWxpZCBtb2RlIHNwZWNpZmllcnMgKG1vZGVfb3B0aW9uIGFyZ3VtZW50KToKKworICAgIDx4cmVzPng8eXJlcz5bLTxicHA+XVtAPHJlZnJlc2g+XQorICAgIDxuYW1lPlstPGJwcD5dW0A8cmVmcmVzaD5dCisKK3dpdGggPHhyZXM+LCA8eXJlcz4sIDxicHA+IGFuZCA8cmVmcmVzaD4gZGVjaW1hbCBudW1iZXJzIGFuZCA8bmFtZT4gYSBzdHJpbmcuCitUaGluZ3MgYmV0d2VlbiBzcXVhcmUgYnJhY2tldHMgYXJlIG9wdGlvbmFsLgorCitUbyBmaW5kIGEgc3VpdGFibGUgdmlkZW8gbW9kZSwgeW91IGp1c3QgY2FsbAorCitpbnQgX19pbml0IGZiX2ZpbmRfbW9kZShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICptb2RlX29wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmRiLCB1bnNpZ25lZCBpbnQgZGJzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqZGVmYXVsdF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlZmF1bHRfYnBwKQorCit3aXRoIGRiL2Ric2l6ZSB5b3VyIG5vbi1zdGFuZGFyZCB2aWRlbyBtb2RlIGRhdGFiYXNlLCBvciBOVUxMIHRvIHVzZSB0aGUKK3N0YW5kYXJkIHZpZGVvIG1vZGUgZGF0YWJhc2UuCisKK2ZiX2ZpbmRfbW9kZSgpIGZpcnN0IHRyaWVzIHRoZSBzcGVjaWZpZWQgdmlkZW8gbW9kZSAob3IgYW55IG1vZGUgdGhhdCBtYXRjaGVzLAorZS5nLiB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgNjQweDQ4MCBtb2RlcywgZWFjaCBvZiB0aGVtIGlzIHRyaWVkKS4gSWYgdGhhdAorZmFpbHMsIHRoZSBkZWZhdWx0IG1vZGUgaXMgdHJpZWQuIElmIHRoYXQgZmFpbHMsIGl0IHdhbGtzIG92ZXIgYWxsIG1vZGVzLgorCitUbyBzcGVjaWZ5IGEgdmlkZW8gbW9kZSBhdCBib290dXAsIHVzZSB0aGUgZm9sbG93aW5nIGJvb3Qgb3B0aW9uczoKKyAgICB2aWRlbz08ZHJpdmVyPjo8eHJlcz54PHlyZXM+Wy08YnBwPl1bQHJlZnJlc2hdCisKK3doZXJlIDxkcml2ZXI+IGlzIGEgbmFtZSBmcm9tIHRoZSB0YWJsZSBiZWxvdy4gIFZhbGlkIGRlZmF1bHQgbW9kZXMgY2FuIGJlCitmb3VuZCBpbiBsaW51eC9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jLiAgQ2hlY2sgeW91ciBkcml2ZXIncyBkb2N1bWVudGF0aW9uLgorVGhlcmUgbWF5IGJlIG1vcmUgbW9kZXMuCisKKyAgICBEcml2ZXJzIHRoYXQgc3VwcG9ydCBtb2RlZGIgYm9vdCBvcHRpb25zCisgICAgQm9vdCBOYW1lCSAgQ2FyZHMgU3VwcG9ydGVkCisKKyAgICBhbWlmYgktIEFtaWdhIGNoaXBzZXQgZnJhbWUgYnVmZmVyCisgICAgYXR5MTI4ZmIJLSBBVEkgUmFnZTEyOCAvIFBybyBmcmFtZSBidWZmZXIKKyAgICBhdHlmYgktIEFUSSBNYWNoNjQgZnJhbWUgYnVmZmVyCisgICAgdGRmeGZiCS0gM0QgRnggZnJhbWUgYnVmZmVyCisgICAgdHJpZGVudGZiCS0gVHJpZGVudCAoQ3liZXIpYmxhZGUgY2hpcHNldCBmcmFtZSBidWZmZXIKKworQlRXLCBvbmx5IGEgZmV3IGRyaXZlcnMgdXNlIHRoaXMgYXQgdGhlIG1vbWVudC4gT3RoZXJzIGFyZSB0byBmb2xsb3cKKyhmZWVsIGZyZWUgdG8gc2VuZCBwYXRjaGVzKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvcHZyMmZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvcHZyMmZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY2YzIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9wdnIyZmIudHh0CkBAIC0wLDAgKzEsNjEgQEAKKyRJZDogcHZyMmZiLnR4dCx2IDEuMSAyMDAxLzA1LzI0IDA1OjA5OjE2IG1yYnJvd24gRXhwICQKKworV2hhdCBpcyBwdnIyZmI/Cis9PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIGRyaXZlciBmb3IgUG93ZXJWUiAyIGJhc2VkIGdyYXBoaWNzIGZyYW1lIGJ1ZmZlcnMsIHN1Y2ggYXMgdGhlCitvbmUgZm91bmQgaW4gdGhlIERyZWFtY2FzdC4KKworQWR2YW50YWdlczoKKworICogSXQgcHJvdmlkZXMgYSBuaWNlIGxhcmdlIGNvbnNvbGUgKDEyOCBjb2xzICsgNDggbGluZXMgd2l0aCAxMDI0eDc2OCkKKyAgIHdpdGhvdXQgdXNpbmcgdGlueSwgdW5yZWFkYWJsZSBmb250cy4KKyAqIFlvdSBjYW4gcnVuIFhGODZfRkJEZXYgb24gdG9wIG9mIC9kZXYvZmIwCisgKiBNb3N0IGltcG9ydGFudDogYm9vdCBsb2dvIDotKQorCitEaXNhZHZhbnRhZ2VzOgorCisgKiBEcml2ZXIgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhlIERyZWFtY2FzdCBQb3dlclZSIDIgaW1wbGVtZW50YXRpb24KKyAgIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KKworQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PQorCitZb3UgY2FuIHBhc3Mga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHB2cjJmYiB3aXRoCitgdmlkZW89cHZyMmZiOm9wdGlvbjEsb3B0aW9uMjp2YWx1ZTIsb3B0aW9uMycgKG11bHRpcGxlIG9wdGlvbnMgc2hvdWxkIGJlCitzZXBhcmF0ZWQgYnkgY29tbWEsIHZhbHVlcyBhcmUgc2VwYXJhdGVkIGZyb20gb3B0aW9ucyBieSBgOicpLgorQWNjZXB0ZWQgb3B0aW9uczoKKworZm9udDpYICAgIC0gZGVmYXVsdCBmb250IHRvIHVzZS4gQWxsIGZvbnRzIGFyZSBzdXBwb3J0ZWQsIGluY2x1ZGluZyB0aGUKKyAgICAgICAgICAgIFNVTjEyeDIyIGZvbnQgd2hpY2ggaXMgdmVyeSBuaWNlIGF0IGhpZ2ggcmVzb2x1dGlvbnMuCisKK21vZGU6WCAgICAtIGRlZmF1bHQgdmlkZW8gbW9kZS4gVGhlIGZvbGxvd2luZyB2aWRlbyBtb2RlcyBhcmUgc3VwcG9ydGVkOgorICAgICAgICAgICAgNjQweDI0MC02MCwgNjQweDQ4MC02MC4KKwkgICAgCisgICAgICAgICAgICBOb3RlOiB0aGUgNjQweDI0MCBtb2RlIGlzIGN1cnJlbnRseSBicm9rZW4sIGFuZCBzaG91bGQgbm90IGJlCisgICAgICAgICAgICB1c2VkIGZvciBhbnkgcmVhc29uLiBJdCBpcyBvbmx5IG1lbnRpb25lZCBhcyBhIHJlZmVyZW5jZS4KKworaW52ZXJzZSAgIC0gaW52ZXJ0IGNvbG9ycyBvbiBzY3JlZW4gKGZvciBMQ0QgZGlzcGxheXMpCisKK25vbXRyciAgICAtIGRpc2FibGVzIHdyaXRlIGNvbWJpbmluZyBvbiBmcmFtZSBidWZmZXIuIFRoaXMgc2xvd3MgZG93biBkcml2ZXIKKyAgICAgICAgICAgIGJ1dCB0aGVyZSBpcyByZXBvcnRlZCBtaW5vciBpbmNvbXBhdGliaWxpdHkgYmV0d2VlbiBHVVMgRE1BIGFuZAorICAgICAgICAgICAgWEZyZWUgdW5kZXIgaGlnaCBsb2FkcyBpZiB3cml0ZSBjb21iaW5pbmcgaXMgZW5hYmxlZCAoc291bmQKKyAgICAgICAgICAgIGRyb3BvdXRzKS4gTVRSUiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gc3lzdGVtcyB0aGF0IGhhdmUgaXQKKyAgICAgICAgICAgIGNvbmZpZ3VyZWQgYW5kIHRoYXQgc3VwcG9ydCBpdC4KKworY2FibGU6WCAgIC0gY2FibGUgdHlwZS4gVGhpcyBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6IHZnYSwgcmdiLCBhbmQKKyAgICAgICAgICAgIGNvbXBvc2l0ZS4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIHdlIGd1ZXNzLgorCitvdXRwdXQ6WCAgLSBvdXRwdXQgdHlwZS4gVGhpcyBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6IHBhbCwgbnRzYywgYW5kCisgICAgICAgICAgICB2Z2EuIElmIG5vbmUgaXMgc3BlY2lmaWVkLCB3ZSBndWVzcy4KKworWDExCis9PT0KKworWEY4Nl9GQkRldiBzaG91bGQgd29yaywgaW4gdGhlb3J5LiBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcgaXQgaXMKK3RvdGFsbHkgdW50ZXN0ZWQgYW5kIG1heSBvciBtYXkgbm90IGV2ZW4gcG9ydHJheSB0aGUgYmVnaW5uaW5ncyBvZgord29ya2luZy4gSWYgeW91IGVuZCB1cCB0ZXN0aW5nIHRoaXMsIHBsZWFzZSBsZXQgbWUga25vdyEKKworLS0KK1BhdWwgTXVuZHQgPGxldGhhbEBsaW51eGRjLm9yZz4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9weGFmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3B4YWZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjliODUwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9weGFmYi50eHQKQEAgLTAsMCArMSw1NCBAQAorRHJpdmVyIGZvciBQWEEyNXggTENEIGNvbnRyb2xsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcHRpb25zLCBlaXRoZXIgdmlhCitvcHRpb25zPTxPUFRJT05TPiB3aGVuIG1vZHVsYXIgb3IgdmlkZW89cHhhZmI6PE9QVElPTlM+IHdoZW4gYnVpbHQgaW4uCisKK0ZvciBleGFtcGxlOgorCW1vZHByb2JlIHB4YWZiIG9wdGlvbnM9bW9kZTo2NDB4NDgwLTgscGFzc2l2ZQorb3Igb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKKwl2aWRlbz1weGFmYjptb2RlOjY0MHg0ODAtOCxwYXNzaXZlCisKK21vZGU6WFJFU3hZUkVTWy1CUFBdCisJWFJFUyA9PSBMQ0NSMV9QUEwgKyAxCisJWVJFUyA9PSBMTENSMl9MUFAgKyAxCisJCVRoZSByZXNvbHV0aW9uIG9mIHRoZSBkaXNwbGF5IGluIHBpeGVscworCUJQUCA9PSBUaGUgYml0IGRlcHRoLiBWYWxpZCB2YWx1ZXMgYXJlIDEsIDIsIDQsIDggYW5kIDE2LgorCitwaXhjbG9jazpQSVhDTE9DSworCVBpeGVsIGNsb2NrIGluIHBpY29zZWNvbmRzCisKK2xlZnQ6TEVGVCA9PSBMQ0NSMV9CTFcgKyAxCityaWdodDpSSUdIVCA9PSBMQ0NSMV9FTFcgKyAxCitoc3luY2xlbjpIU1lOQyA9PSBMQ0NSMV9IU1cgKyAxCit1cHBlcjpVUFBFUiA9PSBMQ0NSMl9CRlcKK2xvd2VyOkxPV0VSID09IExDQ1IyX0VGUgordnN5bmNsZW46VlNZTkMgPT0gTENDUjJfVlNXICsgMQorCURpc3BsYXkgbWFyZ2lucyBhbmQgc3luYyB0aW1lcworCitjb2xvciB8IG1vbm8gPT4gTENDUjBfQ01TCisJdW1tLi4uCisKK2FjdGl2ZSB8IHBhc3NpdmUgPT4gTENDUjBfUEFTCisJQWN0aXZlIChURlQpIG9yIFBhc3NpdmUgKFNUTikgZGlzcGxheQorCitzaW5nbGUgfCBkdWFsID0+IExDQ1IwX1NEUworCVNpbmdsZSBvciBkdWFsIHBhbmVsIHBhc3NpdmUgZGlzcGxheQorCis0cGl4IHwgOHBpeCA9PiBMQ0NSMF9EUEQKKwk0IG9yIDggcGl4ZWwgbW9ub2Nocm9tZSBzaW5nbGUgcGFuZWwgZGF0YQorCitoc3luYzpIU1lOQwordnN5bmM6VlNZTkMKKwlIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzeW5jLiAwID0+IGFjdGl2ZSBsb3csIDEgPT4gYWN0aXZlCisJaGlnaC4KKworZHBjOkRQQworCURvdWJsZSBwaXhlbCBjbG9jay4gMT0+dHJ1ZSwgMD0+ZmFsc2UKKworb3V0cHV0ZW46UE9MQVJJVFkKKwlPdXRwdXQgRW5hYmxlIFBvbGFyaXR5LiAwID0+IGFjdGl2ZSBsb3csIDEgPT4gYWN0aXZlIGhpZ2gKKworcGl4Y2xvY2twb2w6UE9MQVJJVFkKKwlwaXhlbCBjbG9jayBwb2xhcml0eQorCTAgPT4gZmFsbGluZyBlZGdlLCAxID0+IHJpc2luZyBlZGdlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3NhMTEwMGZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvc2ExMTAwZmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjQyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3NhMTEwMGZiLnR4dApAQCAtMCwwICsxLDM5IEBACitbVGhpcyBmaWxlIGlzIGNsb25lZCBmcm9tIFZlc2FGQi9tYXRyb3hmYl0KKworV2hhdCBpcyBzYTExMDBmYj8KKz09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSBkcml2ZXIgZm9yIGEgZ3JhcGhpYyBmcmFtZWJ1ZmZlciBmb3IgdGhlIFNBLTExMDAgTENECitjb250cm9sbGVyLgorCitDb25maWd1cmF0aW9uCis9PT09PT09PT09PT09PQorCitGb3IgbW9zdCBjb21tb24gcGFzc2l2ZSBkaXNwbGF5cywgZ2l2aW5nIHRoZSBvcHRpb24KKwordmlkZW89c2ExMTAwZmI6YnBwOjx2YWx1ZT4sbGNjcjA6PHZhbHVlPixsY2NyMTo8dmFsdWU+LGxjY3IyOjx2YWx1ZT4sbGNjcjM6PHZhbHVlPgorCitvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBzaG91bGQgYmUgZW5vdWdoIHRvIGNvbmZpZ3VyZSB0aGUKK2NvbnRyb2xsZXIuIFRoZSBiaXRzIHBlciBwaXhlbCAoYnBwKSB2YWx1ZSBzaG91bGQgYmUgNCwgOCwgMTIsIG9yCisxNi4gTENDUiB2YWx1ZXMgYXJlIGRpc3BsYXktc3BlY2lmaWMgYW5kIHNob3VsZCBiZSBjb21wdXRlZCBhcworZG9jdW1lbnRlZCBpbiB0aGUgU0EtMTEwMCBEZXZlbG9wZXIncyBNYW51YWwsIFNlY3Rpb24gMTEuNy4gRHVhbC1wYW5lbAorZGlzcGxheXMgYXJlIHN1cHBvcnRlZCBhcyBsb25nIGFzIHRoZSBTRFMgYml0IGlzIHNldCBpbiBMQ0NSMDsgR1BJTzw5OjI+CithcmUgdXNlZCBmb3IgdGhlIGxvd2VyIHBhbmVsLgorCitGb3IgYWN0aXZlIGRpc3BsYXlzIG9yIGRpc3BsYXlzIHJlcXVpcmluZyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24KKyhjb250cm9sbGluZyBiYWNrbGlnaHRzLCBwb3dlcmluZyBvbiB0aGUgTENELCBldGMuKSwgdGhlIGNvbW1hbmQgbGluZQorb3B0aW9ucyBtYXkgbm90IGJlIGVub3VnaCB0byBjb25maWd1cmUgdGhlIGRpc3BsYXkuIEFkZGluZyBzZWN0aW9ucyB0bworc2ExMTAwZmJfaW5pdF9mYmluZm8oKSwgc2ExMTAwZmJfYWN0aXZhdGVfdmFyKCksCitzYTExMDBmYl9kaXNhYmxlX2xjZF9jb250cm9sbGVyKCksIGFuZCBzYTExMDBmYl9lbmFibGVfbGNkX2NvbnRyb2xsZXIoKQord2lsbCBwcm9iYWJseSBiZSBuZWNlc3NhcnkuCisKK0FjY2VwdGVkIG9wdGlvbnM6CisKK2JwcDo8dmFsdWU+CUNvbmZpZ3VyZSBmb3IgPHZhbHVlPiBiaXRzIHBlciBwaXhlbAorbGNjcjA6PHZhbHVlPglDb25maWd1cmUgTENEIGNvbnRyb2wgcmVnaXN0ZXIgMCAoMTEuNy4zKQorbGNjcjE6PHZhbHVlPglDb25maWd1cmUgTENEIGNvbnRyb2wgcmVnaXN0ZXIgMSAoMTEuNy40KQorbGNjcjI6PHZhbHVlPglDb25maWd1cmUgTENEIGNvbnRyb2wgcmVnaXN0ZXIgMiAoMTEuNy41KQorbGNjcjM6PHZhbHVlPglDb25maWd1cmUgTENEIGNvbnRyb2wgcmVnaXN0ZXIgMyAoMTEuNy42KQorCistLQorTWFyayBIdWFuZyA8bWh1YW5nQGxpdmV0b3kuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9zaXNmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3Npc2ZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjUwYzUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9zaXNmYi50eHQKQEAgLTAsMCArMSwxNTggQEAKKworV2hhdCBpcyBzaXNmYj8KKz09PT09PT09PT09PT09CisKK3Npc2ZiIGlzIGEgZnJhbWVidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgU2lTIChTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcykKK2dyYXBoaWNzIGNoaXBzLiBTdXBwb3J0ZWQgYXJlOgorCistIFNpUyAzMDAgc2VyaWVzOiBTaVMgMzAwLzMwNSwgNTQwLCA2MzAoUyksIDczMChTKQorLSBTaVMgMzE1IHNlcmllczogU2lTIDMxNS9IL1BSTywgNTV4LCAoTSk2NXgsIDc0MCwgKE0pNjYxKEYvTSlYLCAoTSk3NDEoR1gpCistIFNpUyAzMzAgc2VyaWVzOiBTaVMgMzMwICgiWGFicmUiKSwgKE0pNzYwCisKKworV2h5IGRvIEkgbmVlZCBhIGZyYW1lYnVmZmVyIGRyaXZlcj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3Npc2ZiIGlzIGVnLiB1c2VmdWwgaWYgeW91IHdhbnQgYSBoaWdoLXJlc29sdXRpb24gdGV4dCBjb25zb2xlLiBCZXNpZGVzIHRoYXQsCitzaXNmYiBpcyByZXF1aXJlZCB0byBydW4gRGlyZWN0RkIgKHdoaWNoIGNvbWVzIHdpdGggYW4gYWRkaXRpb25hbCwgZGVkaWNhdGVkCitkcml2ZXIgZm9yIHRoZSAzMTUgc2VyaWVzKS4KKworT24gdGhlIDMwMCBzZXJpZXMsIHNpc2ZiIG9uIGtlcm5lbHMgb2xkZXIgdGhhbiAyLjYuMyBmdXJ0aGVybW9yZSBwbGF5cyBhbgoraW1wb3J0YW50IHJvbGUgaW4gY29ubmVjdGlvbiB3aXRoIERSTS9EUkk6IFNpc2ZiIG1hbmFnZXMgdGhlIG1lbW9yeSBoZWFwCit1c2VkIGJ5IERSTS9EUkkgZm9yIDNEIHRleHR1cmUgYW5kIG90aGVyIGRhdGEuIFRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXMKK3JlcXVpcmVkIGZvciB1c2luZyBEUkkvRFJNLgorCitLZXJuZWxzID49IGFyb3VuZCAyLjYuMyBkbyBub3QgbmVlZCBzaXNmYiBhbnkgbG9uZ2VyIGZvciBEUkkvRFJNIG1lbW9yeQorbWFuYWdlbWVudC4gVGhlIFNpUyBEUk0gZHJpdmVyIGhhcyBiZWVuIHVwZGF0ZWQgYW5kIGZlYXR1cmVzIGEgbWVtb3J5IG1hbmFnZXIKK29mIGl0cyBvd24gKHdoaWNoIHdpbGwgYmUgdXNlZCBpZiBzaXNmYiBpcyBub3QgY29tcGlsZWQpLiBTbyB1bmxlc3MgeW91IHdhbnQKK2EgZ3JhcGhpY2FsIGNvbnNvbGUsIHlvdSBkb24ndCBuZWVkIHNpc2ZiIG9uIGtlcm5lbHMgPj0yLjYuMy4KKworU2lkZW5vdGU6IFNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgYSBjb21tb25seSBtYWRlIG1pc3Rha2U6IHNpc2ZiIGFuZCB2ZXNhZmIKK2Nhbm5vdCBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZSEgRG8gb25seSBzZWxlY3Qgb25lIG9mIHRoZW0gaW4geW91ciBrZXJuZWwKK2NvbmZpZ3VyYXRpb24uCisKKworSG93IGFyZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBzaXNmYj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1dlbGwsIGl0IGRlcGVuZHM6IElmIGNvbXBpbGVkIHN0YXRpY2FsbHkgaW50byB0aGUga2VybmVsLCB1c2UgbGlsbydzIGFwcGVuZAorc3RhdGVtZW50IHRvIGFkZCB0aGUgcGFyYW1ldGVycyB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gUGxlYXNlIHNlZSBsaWxvJ3MKKyhvciBHUlVCJ3MpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIElmIHNpc2ZiIGlzIGEga2VybmVsIG1vZHVsZSwKK3BhcmFtZXRlcnMgYXJlIGdpdmVuIHdpdGggdGhlIG1vZHByb2JlIChvciBpbnNtb2QpIGNvbW1hbmQuCisKK0V4YW1wbGUgZm9yIHNpc2ZiIGFzIHBhcnQgb2YgdGhlIHN0YXRpYyBrZXJuZWw6IEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91cgorbGlsby5jb25mOgorCisgICAgIGFwcGVuZD0idmlkZW89c2lzZmI6bW9kZToxMDI0eDc2OHgxNixtZW06MTIyODgscmF0ZTo3NSIKKworRXhhbXBsZSBmb3Igc2lzZmIgYXMgYSBtb2R1bGU6IFN0YXJ0IHNpc2ZiIGJ5IHR5cGluZworCisgICAgIG1vZHByb2JlIHNpc2ZiIG1vZGU9MTAyNHg3Njh4MTYgcmF0ZT03NSBtZW09MTIyODgKKworQSBjb21tb24gbWlzdGFrZSBpcyB0aGF0IGZvbGtzIHVzZSBhIHdyb25nIHBhcmFtZXRlciBmb3JtYXQgd2hlbiB1c2luZyB0aGUKK2RyaXZlciBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFBsZWFzZSBub3RlOiBJZiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsCit0aGUgcGFyYW1ldGVyIGZvcm1hdCBpcyB2aWRlbz1zaXNmYjptb2RlOm5vbmUgb3IgdmlkZW89c2lzZmI6bW9kZToxMDI0eDc2OHgxNgorKG9yIHdoYXRldmVyIG1vZGUgeW91IHdhbnQgdG8gdXNlLCBhbHRlcm5hdGl2ZWx5IHVzaW5nIGFueSBvdGhlciBmb3JtYXQKK2Rlc2NyaWJlZCBhYm92ZSBvciB0aGUgdmVzYSBrZXl3b3JkIGluc3RlYWQgb2YgbW9kZSkuIElmIGNvbXBpbGVkIGFzIGEgbW9kdWxlLAordGhlIHBhcmFtZXRlciBmb3JtYXQgcmVhZHMgbW9kZT1ub25lIG9yIG1vZGU9MTAyNHg3Njh4MTYgKG9yIHdoYXRldmVyIG1vZGUgeW91Cit3YW50IHRvIHVzZSkuIFVzaW5nIGEgIj0iIGZvciBhICI6IiAoYW5kIHZpY2UgdmVyc2EpIGlzIGEgaHVnZSBkaWZmZXJlbmNlIQorQWRkaXRpb25hbGx5OiBJZiB5b3UgZ2l2ZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIHRoZSBpbi1rZXJuZWwgc2lzZmIsIHRoZQorYXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCAiLCIuIEZvciBleGFtcGxlOgorCisgICB2aWRlbz1zaXNmYjptb2RlOjEwMjR4NzY4eDE2LHJhdGU6NzUsbWVtOjEyMjg4CisKKworSG93IGRvIEkgdXNlIGl0PworPT09PT09PT09PT09PT09PQorCitQcmVmYWNlIHN0YXRlbWVudDogVGhpcyBmaWxlIG9ubHkgY292ZXJzIHZlcnkgbGl0dGxlIG9mIHRoZSBkcml2ZXIncworY2FwYWJpbGl0aWVzIGFuZCBmZWF0dXJlcy4gUGxlYXNlIHJlZmVyIHRvIHRoZSBhdXRob3IncyBhbmQgbWFpbnRhaW5lcidzCit3ZWJzaXRlIGF0IGh0dHA6Ly93d3cud2luaXNjaGhvZmVyLm5ldC9saW51eHNpc3ZnYS5zaHRtbCBmb3IgbW9yZQoraW5mb3JtYXRpb24uIEFkZGl0aW9uYWxseSwgIm1vZGluZm8gc2lzZmIiIGdpdmVzIGFuIG92ZXJ2aWV3IG92ZXIgYWxsCitzdXBwb3J0ZWQgb3B0aW9ucyBpbmNsdWRpbmcgc29tZSBleHBsYW5hdGlvbi4KKworVGhlIGRlc2lyZWQgZGlzcGxheSBtb2RlIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGtleXdvcmQgIm1vZGUiIHdpdGgKK2EgcGFyYW1ldGVyIGluIG9uZSBvZiB0aGUgZm9sbHdpbmcgZm9ybWF0czoKKyAgLSBYeFl4RGVwdGggb3IKKyAgLSBYeFktRGVwdGggb3IKKyAgLSBYeFktRGVwdGhAUmF0ZSBvcgorICAtIFh4WQorICAtIG9yIHNpbXBseSB1c2UgdGhlIFZFU0EgbW9kZSBudW1iZXIgaW4gaGV4YWRlY2ltYWwgb3IgZGVjaW1hbC4KKworRm9yIGV4YW1wbGU6IDEwMjR4NzY4eDE2LCAxMDI0eDc2OC0xNkA3NSwgMTI4MHgxMDI0LTE2LiBJZiBubyBkZXB0aCBpcworc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byA4LiBJZiBubyByYXRlIGlzIGdpdmVuLCBpdCBkZWZhdWx0cyB0byA2MEh6LiBEZXB0aCAzMgorbWVhbnMgMjRiaXQgY29sb3IgZGVwdGggKGJ1dCAzMiBiaXQgZnJhbWVidWZmZXIgZGVwdGgsIHdoaWNoIGlzIG5vdCByZWxldmFudAordG8gdGhlIHVzZXIpLgorCitBZGRpdGlvbmFsbHksIHNpc2ZiIHVuZGVyc3RhbmRzIHRoZSBrZXl3b3JkICJ2ZXNhIiBmb2xsb3dlZCBieSBhIFZFU0EgbW9kZQorbnVtYmVyIGluIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwuIEZvciBleGFtcGxlOiB2ZXNhPTc5MSBvciB2ZXNhPTB4MTE3LiBQbGVhc2UKK3VzZSBlaXRoZXIgIm1vZGUiIG9yICJ2ZXNhIiBidXQgbm90IGJvdGguCisKK0xpbnV4IDIuNCBvbmx5OiBJZiBubyBtb2RlIGlzIGdpdmVuLCBzaXNmYiBkZWZhdWx0cyB0byAibm8gbW9kZSIgKG1vZGU9bm9uZSkgaWYKK2NvbXBpbGVkIGFzIGEgbW9kdWxlOyBpZiBzaXNmYiBpcyBzdGF0aWNhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgaXQKK2RlZmF1bHRzIHRvIDgwMHg2MDB4OCB1bmxlc3MgQ1JUMiB0eXBlIGlzIExDRCwgaW4gd2hpY2ggY2FzZSB0aGUgTENEJ3MgbmF0aXZlCityZXNvbHV0aW9uIGlzIHVzZWQuIElmIHlvdSB3YW50IHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCBtb2RlLCB1c2UgdGhlIGZic2V0CitzaGVsbCBjb21tYW5kLgorCitMaW51eCAyLjYgb25seTogSWYgbm8gbW9kZSBpcyBnaXZlbiwgc2lzZmIgZGVmYXVsdHMgdG8gODAweDYwMHg4IHVubGVzcyBDUlQyCit0eXBlIGlzIExDRCwgaW4gd2hpY2ggY2FzZSBpdCBkZWZhdWx0cyB0byB0aGUgTENEJ3MgbmF0aXZlIHJlc29sdXRpb24uIElmCit5b3Ugd2FudCB0byBzd2l0Y2ggdG8gYW5vdGhlciBtb2RlLCB1c2UgdGhlIHN0dHkgc2hlbGwgY29tbWFuZC4KKworWW91IHNob3VsZCBjb21waWxlIGluIGJvdGggdmdhY29uICh0byBib290IGlmIHlvdSByZW1vdmUgeW91IFNpUyBjYXJkIGZyb20KK3lvdXIgc3lzdGVtKSBhbmQgc2lzZmIgKGZvciBncmFwaGljcyBtb2RlKS4gVW5kZXIgTGludXggMi42LCBhbHNvICJGcmFtZWJ1ZmZlcgorY29uc29sZSBzdXBwb3J0IiAoZmJjb24pIGlzIG5lZWRlZCBmb3IgYSBncmFwaGljYWwgY29uc29sZS4KKworWW91IHNob3VsZCAqbm90KiBjb21waWxlLWluIHZlc2FmYi4gQW5kIHBsZWFzZSBkbyBub3QgdXNlIHRoZSAidmdhPSIga2V5d29yZAoraW4gbGlsbydzIG9yIGdydWIncyBjb25maWd1cmF0aW9uIGZpbGU7IG1vZGUgc2VsZWN0aW9uIGlzIGRvbmUgdXNpbmcgdGhlCisibW9kZSIgb3IgInZlc2EiIGtleXdvcmRzIGFzIGEgcGFyYW1ldGVyLiBTZWUgYWJvdmUgYW5kIGJlbG93LgorCisKK1gxMQorPT09CisKK0lmIHVzaW5nIFhGcmVlODYgb3IgWC5vcmcsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IHVzZSB0aGUgImZiZGV2IgorZHJpdmVyIGJ1dCB0aGUgZGVkaWNhdGVkICJzaXMiIFggZHJpdmVyLiBUaGUgInNpcyIgWCBkcml2ZXIgYW5kIHNpc2ZiIGFyZQorZGV2ZWxvcGVkIGJ5IHRoZSBzYW1lIHBlcnNvbiAoVGhvbWFzIFdpbmlzY2hob2ZlcikgYW5kIGNvb3BlcmF0ZSB3ZWxsIHdpdGgKK2VhY2ggb3RoZXIuCisKKworU1ZHQUxpYgorPT09PT09PQorCitTVkdBTGliLCBpZiBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIGhhcmR3YXJlLCBuZXZlciByZXN0b3JlcyB0aGUgc2NyZWVuCitjb3JyZWN0bHksIGVzcGVjaWFsbHkgb24gbGFwdG9wcyBvciBpZiB0aGUgb3V0cHV0IGRldmljZXMgYXJlIExDRCBvciBUVi4KK1RoZXJlZm9yZSwgdXNlIHRoZSBjaGlwc2V0ICJGQkRFViIgaW4gU1ZHQUxpYiBjb25maWd1cmF0aW9uLiBUaGlzIHdpbGwgbWFrZQorU1ZHQUxpYiB1c2UgdGhlIGZyYW1lYnVmZmVyIGRldmljZSBmb3IgbW9kZSBzd2l0Y2hlcyBhbmQgcmVzdG9yYXRpb24uCisKKworQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PQorCisoU29tZSkgYWNjZXB0ZWQgb3B0aW9uczoKKworb2ZmICAgICAgLSBEaXNhYmxlIHNpc2ZiLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVuZGVyc3Rvb2QgaWYgc2lzZmIgaXMKKyAgICAgICAgICAgaW4ta2VybmVsLCBub3QgYSBtb2R1bGUuCittZW06WCAgICAtIHNpemUgb2YgbWVtb3J5IGZvciB0aGUgY29uc29sZSwgcmVzdCB3aWxsIGJlIHVzZWQgZm9yIERSSS9EUk0uIFgKKyAgICAgICAgICAgaXMgaW4ga2lsb2J5dGVzLiBPbiAzMDAgc2VyaWVzLCB0aGUgZGVmYXVsdCBpcyA0MDk2LCA4MTkyIG9yCisJICAgMTYzODQgKGVhY2ggaW4ga2lsb2J5dGUpIGRlcGVuZGluZyBvbiBob3cgbXVjaCB2aWRlbyByYW0gdGhlIGNhcmQKKyAgICAgICAgICAgaGFzLiBPbiAzMTUvMzMwIHNlcmllcywgdGhlIGRlZmF1bHQgaXMgdGhlIG1heGltdW0gYXZhaWxhYmxlIHJhbQorCSAgIChzaW5jZSBEUkkvRFJNIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZXNlIGNoaXBzZXRzKS4KK25vYWNjZWwgIC0gZG8gbm90IHVzZSAyRCBhY2NlbGVyYXRpb24gZW5naW5lLiAoRGVmYXVsdDogdXNlIGFjY2VsZXJhdGlvbikKK25veXBhbiAgIC0gZGlzYWJsZSB5LXBhbm5pbmcgYW5kIHNjcm9sbCBieSByZWRyYXdpbmcgdGhlIGVudGlyZSBzY3JlZW4uCisgICAgICAgICAgIFRoaXMgaXMgbXVjaCBzbG93ZXIgdGhhbiB5LXBhbm5pbmcuIChEZWZhdWx0OiB1c2UgeS1wYW5uaW5nKQordmVzYTpYICAgLSBzZWxlY3RzIHN0YXJ0dXAgdmlkZW9tb2RlLiBYIGlzIG51bWJlciBmcm9tIDAgdG8gMHgxRkYgYW5kCisgICAgICAgICAgIHJlcHJlc2VudHMgdGhlIFZFU0EgbW9kZSBudW1iZXIgKGNhbiBiZSBnaXZlbiBpbiBkZWNpbWFsIG9yCisJICAgaGV4YWRlY2ltYWwgZm9ybSwgdGhlIGxhdHRlciBwcmVmaXhlZCB3aXRoICIweCIpLgorbW9kZTpYICAgLSBzZWxlY3RzIHN0YXJ0dXAgdmlkZW9tb2RlLiBQbGVhc2Ugc2VlIGFib3ZlIGZvciB0aGUgZm9ybWF0IG9mCisgICAgICAgICAgICJYIi4KKworQm9vbGVhbiBvcHRpb25zIHN1Y2ggYXMgIm5vYWNjZWwiIG9yICJub3lwYW4iIGFyZSB0byBiZSBnaXZlbiB3aXRob3V0IGEKK3BhcmFtZXRlciBpZiBzaXNmYiBpcyBpbi1rZXJuZWwgKGZvciBleGFtcGxlICJ2aWRlbz1zaXNmYjpub3lwYW4pLiBJZgorc2lzZmIgaXMgYSBtb2R1bGUsIHRoZXNlIGFyZSB0byBiZSBzZXQgdG8gMSAoZm9yIGV4YW1wbGUgIm1vZHByb2JlIHNpc2ZiCitub3lwYW49MSIpLgorCistLQorVGhvbWFzIFdpbmlzY2hob2ZlciA8dGhvbWFzQHdpbmlzY2hob2Zlci5uZXQ+CitNYXkgMjcsIDIwMDQKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvc3N0ZmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOGQ3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dApAQCAtMCwwICsxLDE3NCBAQAorCitJbnRyb2R1Y3Rpb24KKworCSAgVGhpcyBpcyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciAzZGZ4JyBWb29kb28gR3JhcGhpY3MgCisJKGFrYSB2b29kb28gMSwgYWthIHNzdDEpIGFuZCBWb29kb2+yIChha2EgVm9vZG9vIDIsIGFrYSBDVkcpIGJhc2VkIAorCXZpZGVvIGJvYXJkcy4gSXQncyBoaWdobHkgZXhwZXJpbWVudGFsIGNvZGUsIGJ1dCBpcyBndWFyYW50ZWVkIHRvIHdvcmsKKwlvbiBteSBjb21wdXRlciwgd2l0aCBteSAiTWF4aSBHYW1lciAzRCIgYW5kICJNYXhpIEdhbWVyIDNksiIgYm9hcmRzLAorCWFuZCB3aXRoIG1lICJiZXR3ZWVuIGNoYWlyIGFuZCBrZXlib2FyZCIuIFNvbWUgcGVvcGxlIHRlc3RlZCBvdGhlcgorCWNvbWJpbmF0aW9ucyBhbmQgaXQgc2VlbXMgdGhhdCBpdCB3b3Jrcy4KKwkgIFRoZSBtYWluIHBhZ2UgaXMgbG9jYXRlZCBhdCA8aHR0cDovL3NzdGZiLnNvdXJjZWZvcmdlLm5ldD4sIGFuZCBpZgorCXlvdSB3YW50IHRoZSBsYXRlc3QgdmVyc2lvbiwgY2hlY2sgb3V0IHRoZSBDVlMsIGFzIHRoZSBkcml2ZXIgaXMgYSB3b3JrCisJaW4gcHJvZ3Jlc3MsIEkgZmVlbCB1bmNvbWZvcnRhYmxlIHdpdGggcmVsZWFzaW5nIHRhcmJhbGxzIG9mIHNvbWV0aGluZworCW5vdCBjb21wbGV0ZWx5IHdvcmtpbmcuLi5Eb24ndCB3b3JyeSwgaXQncyBzdGlsbCBtb3JlIHRoYW4gdXNlYWJsZQorCShJIGVhdCBteSBvd24gZG9nIGZvb2QpCisKKwkgIFBsZWFzZSByZWFkIHRoZSBCdWcgc2VjdGlvbiwgYW5kIHJlcG9ydCBhbnkgc3VjY2VzcyBvciBmYWlsdXJlIHRvIG1lCisJKEdob3psYW5lIFRvdW1pIDxndG91bWlAbGFwb3N0ZS5uZXQ+KS4KKwkgIEJUVywgSWYgeW91IGhhdmUgb25seSBvbmUgbW9uaXRvciAsIGFuZCB5b3UgZG9uJ3QgZmVlbCBsaWtlIHBsYXlpbmcKKwl3aXRoIHRoZSB2Z2EgcGFzc3Rocm91IGNhYmxlLCBJIGNhbiBvbmx5IHN1Z2dlc3QgYm9ycm93aW5nIGEgc2NyZWVuCisJc29tZXdoZXJlLi4uIAorCisKK0luc3RhbGxhdGlvbiAKKworCSAgVGhpcyBkcml2ZXIgKHNob3VsZCkgd29yayBvbiBpeDg2LCB3aXRoICJsYXRlIiAyLjIueCBrZXJuZWwgKHRlc3RlZAorCXdpdGggeCA9IDE5KSBhbmQgInJlY2VudCIgMi40Lngga2VybmVsLCBhcyBhIG1vZHVsZSBvciBjb21waWxlZCBpbi4KKwkgIEl0IGhhcyBiZWVuIGluY2x1ZGVkIGluIG1haW5zdHJlYW0ga2VybmVsIHNpbmNlIHRoZSBpbmZhbW91cyAyLjQuMTAuCisJICBZb3UgY2FuIGFwcGx5IHRoZSBwYXRjaGVzIGZvdW5kIGluIHNzdGZiL2tlcm5lbC8qLTIuezJ8NH0ueC5wYXRjaCwKKwlhbmQgY29weSBzc3RmYi5jIHRvIGxpbnV4L2RyaXZlcnMvdmlkZW8vLCBvciBhcHBseSBhIHNpbmdsZSBwYXRjaCwgCisJc3N0ZmIvcGF0Y2gtMi57Mnw0fS54LXNzdGZiLXl5bW1kZCB0byB5b3VyIGxpbnV4IHNvdXJjZSB0cmVlLgorCisJICBUaGVuIGNvbmZpZ3VyZSB5b3VyIGtlcm5lbCBhcyB1c3VhbDogY2hvb3NlICJtIiBvciAieSIgdG8gM0RmeCBWb29kb28KKwlHcmFwaGljcyBpbiBzZWN0aW9uICJjb25zb2xlIi4gQ29tcGlsZSwgaW5zdGFsbCwgaGF2ZSBmdW4uLi4gYW5kIHBsZWFzZQorCWRyb3AgbWUgYSByZXBvcnQgOikKKworCitNb2R1bGUgVXNhZ2UKKwkKKwlXYXJuaW5ncy4KKwkjIFlvdSBzaG91bGQgcmVhZCBjb21wbGV0ZWx5IHRoaXMgc2VjdGlvbiBiZWZvcmUgaXNzdWluZyBhbnkgY29tbWFuZC4KKwkjIElmIHlvdSBoYXZlIG9ubHkgb25lIG1vbml0b3IgdG8gcGxheSB3aXRoLCBvbmNlIHlvdSBpbnNtb2QgdGhlCisJICBtb2R1bGUsIHRoZSAzZGZ4IHRha2VzIGNvbnRyb2wgb2YgdGhlIG91dHB1dCwgc28geW91J2xsIGhhdmUgdG8KKwkgIHBsdWcgdGhlIG1vbml0b3IgdG8gdGhlICJub3JtYWwiIHZpZGVvIGJvYXJkIGluIG9yZGVyIHRvIGlzc3VlCisJICB0aGUgY29tbWFuZHMsIG9yIHlvdSBjYW4gYmxpbmRseSB1c2Ugc3N0X2RiZ192Z2FwYXNzCisgICAgICAgICAgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSAoU2VlIFRvb2xzKS4gVGhlIGxhdGVzdCBzb2x1dGlvbiBpcyBwYXNzIHRoZQorCSAgcGFyYW1ldGVyIHZnYXBhc3M9MSB3aGVuIGluc21vZGRpbmcgdGhlIGRyaXZlci4gKFNlZSBLZXJuZWwvTW9kdWxlcworCSAgT3B0aW9ucykKKworCU1vZHVsZSBpbnNlcnRpb246CisJIyBpbnNtb2Qgc3N0ZmIubworCSAgeW91IHNob3VsZCBzZWUgc29tZSBzdHJhbmdlIG91dHB1dCBmcm9tZSB0aGUgYm9hcmQ6IAorCSAgYSBiaWcgYmx1ZSBzcXVhcmUsIGEgZ3JlZW4gYW5kIGEgcmVkIHNtYWxsIHNxdWFyZXMgYW5kIGEgdmVydGljYWwKKwkgIHdoaXRlIHJlY3RhbmdsZS4gd2h5ID8gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyBzZWxmIGV4cGxhbmF0b3J5IDoKKwkgICJzc3RmYl90ZXN0KCkiLi4uCisJICAoaWYgeW91IGRvbid0IGhhdmUgYSBzZWNvbmQgbW9uaXRvciwgeW91J2xsIGhhdmUgdG8gcGx1ZyB5b3VyIG1vbml0b3IKKwkgIGRpcmVjdGVseSB0byB0aGUgMkQgdmlkZW9jYXJkIHRvIHNlZSB3aGF0IHlvdSdyZSB0eXBpbmcpCisJIyBjb24yZmIgL2Rldi9mYnggL2Rldi90dHl4CisJICBiaW5kIGEgdHR5IHRvIHRoZSBuZXcgZnJhbWUgYnVmZmVyLiBpZiB5b3UgYWxyZWFkeSBoYXZlIGEgZnJhbWUKKwkgIGJ1ZmZlciBkcml2ZXIsIHRoZSB2b29kb28gZmIgd2lsbCBsaWtlbHkgYmUgL2Rldi9mYjEuIGlmIG5vdCwgCisJICB0aGUgZGV2aWNlIHdpbGwgYmUgL2Rldi9mYjAuIFlvdSBjYW4gY2hlY2sgdGhpcyBieSBkb2luZyBhIAorCSAgY2F0IC9wcm9jL2ZiLiBZb3UgY2FuIGZpbmQgYSBjb3B5IG9mIGNvbjJmYiBpbiB0b29scy8gZGlyZWN0b3J5LgorCSAgaWYgeW91IGRvbid0IGhhdmUgYW5vdGhlciBmYiBkZXZpY2UsIHRoaXMgc3RlcCBpcyBzdXBlcmZsdW91cywKKwkgIGFzIHRoZSBjb25zb2xlIHN1YnN5c3RlbSBhdXRvbWFnaWNhbHkgYmluZHMgdHR5cyB0byB0aGUgZmIuCisJIyBzd2l0Y2ggdG8gdGhlIHZpcnR1YWwgY29uc29sZSB5b3UganVzdCBtYXBwZWQuICJ0YWRhYWEiIC4uLgorCisJTW9kdWxlIHJlbW92YWw6CisJIyBjb24yZmIgL2Rldi9mYnggL2Rldi90dHl4CisJICBiaW5kIHRoZSB0dHkgdG8gdGhlIG9sZCBmcmFtZSBidWZmZXIgc28gdGhlIG1vZHVsZSBjYW4gYmUgcmVtb3ZlZC4KKwkgIChob3cgZG9lcyBpdCB3b3JrIHdpdGggdmdhY29uID8gc2hvcnQgYW5zd2VyIDogaXQgZG9lc24ndCB3b3JrKQorCSMgcm1tb2Qgc3N0ZmIKKworCitLZXJuZWwvTW9kdWxlcyBPcHRpb25zCisKKwlZb3UgY2FuIHBhc3Mgc29tZSBvdGlvbnMgdG8gc3N0ZmIgbW9kdWxlLCBhbmQgdmlhIHRoZSBrZXJuZWwgY29tbWFuZAorCWxpbmUgd2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGluIDoKKwlmb3IgbW9kdWxlIDogaW5zbW9kIHNzdGZiLm8gb3B0aW9uMT12YWx1ZTEgb3B0aW9uMj12YWx1ZTIgLi4uCisJaW4ga2VybmVsIDogIHZpZGVvPXNzdGZiOm9wdGlvbjEsb3B0aW9uMjp2YWx1ZTIsb3B0aW9uMyAuLi4KKwkKKwlzc3RmYiBzdXBwb3J0cyB0aGUgZm9sb3dpbmcgb3B0aW9ucyA6CisKK01vZHVsZQkJS2VybmVsCQlEZXNjcmlwdGlvbgorCit2Z2FwYXNzPTAJdmdhbm9wYXNzCUVuYWJsZSBvciBkaXNhYmxlIFZHQSBwYXNzdGhyb3UgY2FibGUuCit2Z2FwYXNzPTEJdmdhcGFzcwkJV2hlbiBlbmFibGVkLCB0aGUgbW9uaXRvciB3aWxsIGdldCB0aGUgc2lnbmFsCisJCQkJZnJvbSB0aGUgVkdBIGJvYXJkIGFuZCBub3QgZnJvbSB0aGUgdm9vZG9vLgorCQkJCURlZmF1bHQ6IG5vcGFzcworCittZW09eAkJbWVtOngJCUZvcmNlIGZyYW1lIGJ1ZmZlciBtZW1vcnkgaW4gTWlCCisJCQkJYWxsb3dlZCB2YWx1ZXM6IDAsIDEsIDIsIDQuCisJCQkJRGVmYXVsdDogMCAoPSBhdXRvZGV0ZWN0KQorCitpbnZlcnNlPTEJaW52ZXJzZQkJU3VwcG9zZWQgdG8gZW5hYmxlIGludmVyc2UgY29uc29sZS4KKwkJCQlkb2Vzbid0IHdvcmsgeWV0Li4uCisKK2NsaXBwaW5nPTEJY2xpcHBpbmcJRW5hYmxlIG9yIGRpc2FibGUgY2xpcHBpbmcuCitjbGlwcGluZz0wCW5vY2xpcHBpbmcJV2l0aCBjbGlwcGluZyBlbmFibGVkLCBhbGwgb2Zmc2NyZWVuCisJCQkJcmVhZHMgYW5kIHdyaXRlcyBhcmUgZGlzZ2FyZGVkLgorCQkJCURlZmF1bHQ6IGVuYWJsZSBjbGlwcGluZy4KKworZ2Z4Y2xrPXgJZ2Z4Y2xrOngJRm9yY2UgZ3JhcGhpYyBjbG9jayBmcmVxdWVuY3kgKGluIE1IeikuCisJCQkJQmUgY2FyZWZ1bGwgd2l0aCB0aGlzIG9wdGlvbiwgaXQgbWF5IGJlCisJCQkJREFOR0VST1VTLgorCQkJCURlZmF1bHQ6IGF1dG8gCisJCQkJCTUwTWh6IGZvciBWb29kb28gMSwKKwkJCQkJNzVNSHogZm9yIFZvb2RvbyAyLiAKKworc2xvd3BjaT0xCWZhc3RwY2kJCUVuYWJsZSBvciBkaXNhYmxlIGZhc3QgUENJIHJlYWQvd3JpdGVzLgorc2xvd3BjaT0xCXNsb3dwY2kJCURlZmF1bHQgOiBmYXN0cGNpCisKK2Rldj14CQlkZXY6eAkJQXR0YWNoIHRoZSBkcml2ZXIgdG8gZGV2aWNlIG51bWJlciB4LgorCQkJCTAgaXMgdGhlIGZpcnN0IGNvbXBhdGlibGUgYm9hcmQgKGluIAorCQkJCWxzcGNpIG9yZGVyKQorCitUb29scworCisJVGhlc2UgdG9vbHMgYXJlIG1vc3RseSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBidXQgeW91IGNhbiAKKwlmaW5kIHNvbWUgb2YgdGhlc2UgaW50ZXJlc3RpbmcgOgorCSAtIGNvbjJmYiAsIG1hcHMgYSB0dHkgdG8gYSBmYnJhbWVidWZmZXIgLgorCQljb24yZmIgL2Rldi9mYjEgL2Rldi90dHk1CisJIC0gc3N0X2RiZ192Z2FwYXNzICwgY2hhbmdlcyB2Z2EgcGFzc3Rocm91LiBZb3UgaGF2ZSB0byByZWNvbXBpbGUgdGhlCisJZHJpdmVyIHdpdGggU1NUX0RFQlVHIGFuZCBTU1RfREVCVUdfSU9DVEwgc2V0IHRvIDEKKwkJc3N0X2RiZ192Z2FwYXNzIC9kZXYvZmIxIDEgKGVuYWJsZXMgdmdhIGNhYmxlKQorCQlzc3RfZGJnX3ZnYXBhc3MgL2Rldi9mYjEgMCAoZGlzYWJsZXMgdmdhIGNhYmxlKQorCSAtIGdsaWRlX3Jlc2V0ICwgcmVzZXRzIHRoZSB2b29kb28gdXNpbmcgZ2xpZGUKKwkJdXNlIHRoaXMgYWZ0ZXIgcm1tb2Rpbmcgc3N0ZmIsIGlmIHRoZSBtb2R1bGUgcmVmdXNlcyB0bworCQlyZWluc2VydCAuCisKK0J1Z3MKKworCS0gRE8gTk9UIHVzZSBnbGlkZSB3aGlsZSB0aGUgc3N0ZmIgbW9kdWxlIGlzIGluLCB5b3UnbGwgbW9zdCBsaWtlbHkKKwloYW5nIHlvdXIgY29tcHV0ZXIuCisJLSBJZiB5b3Ugc2VlIHNvbWUgYXJ0ZWZhY3RzIChwaXhlbHMgbm90IGNsZWFuaW5nIGFuZCBzdHVmZiBsaWtlIHRoYXQpLCAKKwl0cnkgdHVybmluZyBvZmYgY2xpcHBpbmcgKGNsaXBwaW5nPTApLCBhbmQvb3IgdXNpbmcgc2xvd3BjaQorCS0gdGhlIGRyaXZlciBkb24ndCBkZXRlY3QgdGhlIDRNYiBmcmFtZSBidWZmZXIgdm9vZG9vcywgaXQgc2VlbXMgdGhhdAorCXRoZSAyIGxhc3QgTWJzIHdyYXAgYXJvdW5kLiBsb29raW5nIGludG8gdGhhdCAuCisJLSBUaGUgZHJpdmVyIGlzIDE2IGJwcCBvbmx5LCAyNC8zMiB3b24ndCB3b3JrLgorCS0gVGhlIGRyaXZlciBpcyBub3QgeW91cl9mYXZvcml0ZV90b3ktc2FmZS4gdGhpcyBpbmNsdWRlcyBTTVAuLi4KKyAgICAgICAgICBbQWN0dWFsbHkgZnJvbSBpbnNwZWN0aW9uIGl0IHNlZW1zIHRvIGJlIHNhZmUgLSBBbGFuXQorCS0gd2hlbiB1c2luZyBYRnJlZTg2IEZCZGV2IChYIG92ZXIgZmJkZXYpIHlvdSBtYXkgc2VlIHN0cmFuZ2UgY29sb3IKKwlwYXR0ZXJucyBhdCB0aGUgYm9yZGVyIG9mIHlvdXIgd2luZG93cyAodGhlIHBpeGVscyBsb3NlIHRoZSBsb3dlc3QKKwlieXRlIC0+IGJhc2ljYWx5IHRoZSBibHVlIGNvbXBvbmVudCBuZCBzb21lIG9mIHRoZSBncmVlbikgLiBJJ20gdW5hYmxlCisJdG8gcmVwcm9kdWNlIHRoaXMgd2l0aCBYRnJlZTg2LTMuMywgYnV0IG9uZSBvZiB0aGUgdGVzdGVycyBoYXMgdGhpcworCXByb2JsZW0gd2l0aCBYRnJlZTg2LTQuIGFwcGFyZW50bHkgcmVjZW50IFhmcmVlODYtNC54IHNvbHZlIHRoaXMKKwlwcm9ibGVtLgorCS0gSSBkaWRuJ3QgcmVhbGx5IHRlc3QgY2hhbmdpbmcgdGhlIHBhbGV0dGUsIHNvIHlvdSBtYXkgZmluZCBzb21lIHdlaXJkCisJdGhpbmdzIHdoZW4gcGxheWluZyB3aXRoIHRoYXQuCisJLSBTb21ldGltZXMgdGhlIGRyaXZlciB3aWxsIG5vdCByZWNvZ25pc2UgdGhlIERBQyAsIGFuZCB0aGUKKyAgICAgICAgaW5pdGlhbGlzYXRpb24gd2lsbCBmYWlsLiB0aGlzIGlzIHNwZWNpZmljYWx5IHRydWUgZm9yCisJdm9vZG9vIDIgYm9hcmRzICwgYnV0IGl0IHNob3VsZCBiZSBzb2x2ZWQgaW4gcmVjZW50IHZlcnNpb25zLiBwbGVhc2UKKwljb250YWN0IG1lIC4KKwktIHRoZSAyNC8zMiBpcyBub3QgbGlrZWx5IHRvIHdvcmsgYW55dGltZSBzb29uICwga25vd2luZyB0aGF0IHRoZQorCWhhcmR3YXJlIGRvZXMgLi4uIHVudXN1YWwgdGhpZ3MgaW4gMjQvMzIgYnBwCisJLSBXaGVuIHVzZWQgd2l0aCBhbnRoZXIgdmlkZW8gYm9hcmQsIGN1cnJlbnQgbGltaXRhdGlvbnMgb2YgbGludXgKKwljb25zb2xlIHN1YnN5c3RlbSBjYW4gY2F1c2Ugc29tZSB0cm91Ymxlcywgc3BlY2lmaWNhbHksIHlvdSBzaG91bGQKKwlkaXNhYmxlIHNvZnR3YXJlIHNjcm9sbGJhY2sgLCBhcyBpdCBjYW4gb29wcyBiYWRseSAuLi4KKworVG9kbworCisJLSBHZXQgcmlkIG9mIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGguCisJLSBCdXkgbW9yZSBjb2ZmZWUuCisJLSB0ZXN0L3BvcnQgdG8gb3RoZXIgYXJjaC4KKwktIHRyeSB0byBhZGQgcGFubmluZyB1c2luZyB0d2Vla3Mgd2l0aCBmcm9udCBhbmQgYmFjayBidWZmZXIgLgorCS0gdHJ5IHRvIGltcGxlbWVudCBhY2NlbCBvbiB2b29kb28yICwgdGhpcyBib2FyZCBjYW4gYWN0dWFseSBkbyBhIAorCSAgbG90IGluIDJEIGV2ZW4gaWYgaXQgd2FzIHNvbGQgYXMgYSAzRCBvbmx5IGJvYXJkIC4uLgorCitnaG96LgorCistLSAKK0dob3psYW5lIFRvdW1pIDxndG91bWlAbGFwb3N0ZS5uZXQ+CisKKworJERhdGU6IDIwMDIvMDUvMDkgMjA6MTE6NDUgJAoraHR0cDovL3NzdGZiLnNvdXJjZWZvcmdlLm5ldC9SRUFETUUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvdGdhZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi90Z2FmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwMDgzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvdGdhZmIudHh0CkBAIC0wLDAgKzEsNjkgQEAKKyRJZDogdGdhZmIudHh0LHYgMS4xLjIuMiAyMDAwLzA0LzA0IDA2OjUwOjE4IG1hdG8gRXhwICQKKworV2hhdCBpcyB0Z2FmYj8KKz09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgZHJpdmVyIGZvciBERUNDaGlwIDIxMDMwIGJhc2VkIGdyYXBoaWNzIGZyYW1lYnVmZmVycywgYS5rLmEuIFRHQQorY2FyZHMsIHdoaWNoIGFyZSB1c3VhbGx5IGZvdW5kIGluIG9sZGVyIERpZ2l0YWwgQWxwaGEgc3lzdGVtcy4gVGhlCitmb2xsb3dpbmcgbW9kZWxzIGFyZSBzdXBwb3J0ZWQ6CisKK1pMeFAtRTEgKDhicHAsIDIgTUIgVlJBTSkKK1pMeFAtRTIgKDMyYnBwLCA4IE1CIFZSQU0pCitaTHhQLUUzICgzMmJwcCwgMTYgTUIgVlJBTSwgWmJ1ZmZlcikKKworVGhpcyB2ZXJzaW9uIGlzIGFuIGFsbW9zdCBjb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBjb2RlIHdyaXR0ZW4gYnkgR2VlcnQKK1V5dHRlcmhvZXZlbiwgd2hpY2ggd2FzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBUR0EgY29uc29sZSBjb2RlIHdyaXR0ZW4gYnkKK0pheSBFc3RhYnJvb2suCisKK01ham9yIG5ldyBmZWF0dXJlcyBzaW5jZSBMaW51eCAyLjAueDoKKworICogU3VwcG9ydCBmb3IgbXVsdGlwbGUgcmVzb2x1dGlvbnMKKyAqIFN1cHBvcnQgZm9yIGZpeGVkLWZyZXF1ZW5jeSBhbmQgb3RoZXIgb2RkYmFsbCBtb25pdG9ycyAKKyAgIChieSBhbGxvd2luZyB0aGUgdmlkZW8gbW9kZSB0byBiZSBzZXQgYXQgYm9vdCB0aW1lKQorCitVc2VyLXZpc2libGUgY2hhbmdlcyBzaW5jZSBMaW51eCAyLjIueDoKKworICogU3luYy1vbi1ncmVlbiBpcyBub3cgaGFuZGxlZCBwcm9wZXJseQorICogTW9yZSB1c2VmdWwgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBvbiBib290dXAKKyAgICh0aGlzIGhlbHBzIGlmIHBlb3BsZSBydW4gaW50byBwcm9ibGVtcykKKworVGhpcyBkcml2ZXIgZG9lcyBub3QgKHlldCkgc3VwcG9ydCB0aGUgVEdBMiBmYW1pbHkgb2YgZnJhbWVidWZmZXJzLCBzbyB0aGUKK1Bvd2VyU3Rvcm0gM0QzMC80RDIwIChhbHNvIGtub3duIGFzIFBCWEdCKSBjYXJkcyBhcmUgbm90IHN1cHBvcnRlZC4gVGhlc2UKK2NhbiBob3dldmVyIGJlIHVzZWQgd2l0aCB0aGUgc3RhbmRhcmQgVkdBIFRleHQgQ29uc29sZSBkcml2ZXIuCisKKworQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PQorCitZb3UgY2FuIHBhc3Mga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHRnYWZiIHdpdGgKK2B2aWRlbz10Z2FmYjpvcHRpb24xLG9wdGlvbjI6dmFsdWUyLG9wdGlvbjMnIChtdWx0aXBsZSBvcHRpb25zIHNob3VsZCBiZQorc2VwYXJhdGVkIGJ5IGNvbW1hLCB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBmcm9tIG9wdGlvbnMgYnkgYDonKS4KK0FjY2VwdGVkIG9wdGlvbnM6CisKK2ZvbnQ6WCAgICAtIGRlZmF1bHQgZm9udCB0byB1c2UuIEFsbCBmb250cyBhcmUgc3VwcG9ydGVkLCBpbmNsdWRpbmcgdGhlCisgICAgICAgICAgICBTVU4xMngyMiBmb250IHdoaWNoIGlzIHZlcnkgbmljZSBhdCBoaWdoIHJlc29sdXRpb25zLgorCittb2RlOlggICAgLSBkZWZhdWx0IHZpZGVvIG1vZGUuIFRoZSBmb2xsb3dpbmcgdmlkZW8gbW9kZXMgYXJlIHN1cHBvcnRlZDoKKyAgICAgICAgICAgIDY0MHg0ODAtNjAsIDgwMHg2MDAtNTYsIDY0MHg0ODAtNzIsIDgwMHg2MDAtNjAsIDgwMHg2MDAtNzIsIAorCSAgICAxMDI0eDc2OC02MCwgMTE1Mng4NjQtNjAsIDEwMjR4NzY4LTcwLCAxMDI0eDc2OC03NiwKKwkgICAgMTE1Mng4NjQtNzAsIDEyODB4MTAyNC02MSwgMTAyNHg3NjgtODUsIDEyODB4MTAyNC03MCwKKwkgICAgMTE1Mng4NjQtODQsIDEyODB4MTAyNC03NiwgMTI4MHgxMDI0LTg1CisgCisKK0tub3duIElzc3VlcworPT09PT09PT09PT09CisKK1RoZSBYRnJlZTg2IEZCRGV2IHNlcnZlciBoYXMgYmVlbiByZXBvcnRlZCBub3QgdG8gd29yaywgc2luY2UgdGdhZmIgZG9lc24ndCBkbworbW1hcCgpLiBSdW5uaW5nIHRoZSBzdGFuZGFyZCBYRjg2X1RHQSBzZXJ2ZXIgZnJvbSBYRnJlZTg2IDMuMy54IHdvcmtzIGZpbmUgZm9yCittZSwgaG93ZXZlciB0aGlzIHNlcnZlciBkb2VzIG5vdCBkbyBhY2NlbGVyYXRpb24sIHdoaWNoIG1ha2UgY2VydGFpbiBvcGVyYXRpb25zCitxdWl0ZSBzbG93LiBTdXBwb3J0IGZvciBhY2NlbGVyYXRpb24gaXMgYmVpbmcgcHJvZ3Jlc3NpdmVseSBpbnRlZ3JhdGVkIGluCitYRnJlZTg2IDQueC4KKworV2hlbiBydW5uaW5nIHRnYWZiIGluIHJlc29sdXRpb25zIGhpZ2hlciB0aGFuIDY0MHg0ODAsIG9uIHN3aXRjaGluZyBWQ3MgZnJvbQordGdhZmIgdG8gWEY4Nl9UR0EgMy4zLngsIHRoZSBlbnRpcmUgc2NyZWVuIGlzIG5vdCByZS1kcmF3biBhbmQgbXVzdCBiZSBtYW51YWxseQorcmVmcmVzaGVkLiBUaGlzIGlzIGFuIFggc2VydmVyIHByb2JsZW0sIG5vdCBhIHRnYWZiIHByb2JsZW0sIGFuZCBpcyBmaXhlZCBpbgorWEZyZWU4NiA0LjAuCisKK0Vuam95IQorCitNYXJ0aW4gTHVjaW5hIDxtYXRvQGtvdGVsbmEuc2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3RyaWRlbnRmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3RyaWRlbnRmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE2YzhhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvdHJpZGVudGZiLnR4dApAQCAtMCwwICsxLDU0IEBACitUcmlkZW50ZmIgaXMgYSBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIHNvbWUgVHJpZGVudCBjaGlwIGJhc2VkIGNhcmRzLgorCitUaGUgZm9sbG93aW5nIGxpc3Qgb2YgY2hpcHMgaXMgdGhvdWdodCB0byBiZSBzdXBwb3J0ZWQgYWx0aG91Z2ggbm90IGFsbCBhcmUKK3Rlc3RlZDoKKwordGhvc2UgZnJvbSB0aGUgSW1hZ2Ugc2VyaWVzIHdpdGggQ3liZXIgaW4gdGhlaXIgbmFtZXMgLSBhY2NlbGVyYXRlZAordGhvc2Ugd2l0aCBCbGFkZSBpbiB0aGVpciBuYW1lcyAoQmxhZGUzRCxDeWJlckJsYWRlLi4uKSAtIGFjY2VsZXJhdGVkCit0aGUgbmV3ZXIgQ3liZXJCbGFkZVhQIGZhbWlseSAgLSBub25hY2NlbGVyYXRlZAorCitPbmx5IFBDSS9BR1AgYmFzZWQgY2FyZHMgYXJlIHN1cHBvcnRlZCwgbm9uZSBvZiB0aGUgb2xkZXIgVHJpZGVudHMuCisKK0hvdyB0byB1c2UgaXQ/Cis9PT09PT09PT09PT09PQorCitXaGVuIGJvb3RpbmcgeW91IGNhbiBwYXNzIHRoZSB2aWRlbyBwYXJhbWV0ZXIuCit2aWRlbz10cmlkZW50ZmIKKworVGhlIHBhcmFtZXRlcnMgZm9yIHRyaWRlbnRmYiBhcmUgY29uY2F0ZW5hdGVkIHdpdGggYSAnOicgYXMgaW4gdGhpcyBleGFtcGxlLgorCit2aWRlbz10cmlkZW50ZmI6ODAweDYwMCxicHA9MTYsbm9hY2NlbAorCitUaGUgc2Vjb25kIGxldmVsIHBhcmFtZXRlcnMgdGhhdCB0cmlkZW50ZmIgdW5kZXJzdGFuZHMgYXJlOgorCitub2FjY2VsIC0gdHVybnMgb2ZmIGFjY2VsZXJhdGlvbiAod2hlbiBpdCBkb2Vzbid0IHdvcmsgZm9yIHlvdXIgY2FyZCkKK2FjY2VsIC0gZm9yY2UgdGV4dCBhY2NlbGVyYXRpb24gKGZvciBib2FyZHMgd2hpY2ggYnkgZGVmYXVsdCBhcmUgbm9hY2NlbGVkKQorCitmcAktIHVzZSBmbGF0IHBhbmVsIHJlbGF0ZWQgc3R1ZmYKK2NydCAJLSBhc3N1bWUgbW9uaXRvciBpcyBwcmVzZW50IGluc3RlYWQgb2YgZnAKKworY2VudGVyIAktIGZvciBmbGF0IHBhbmVscyBhbmQgcmVzb2x1dGlvbnMgc21hbGxlciB0aGFuIG5hdGl2ZSBzaXplIGNlbnRlciB0aGUKKwkgIGltYWdlLCBvdGhlcndpc2UgdXNlCitzdHJldGNoCisKK21lbXNpemUgLSBpbnRlZ2VyIHZhbHVlIGluIEtiLCB1c2UgaWYgeW91ciBjYXJkJ3MgbWVtb3J5IHNpemUgaXMgbWlzZGV0ZWN0ZWQuCisJICBsb29rIGF0IHRoZSBkcml2ZXIgb3V0cHV0IHRvIHNlZSB3aGF0IGl0IHNheXMgd2hlbiBpbml0aWFsaXppbmcuCittZW1kaWZmIC0gaW50ZWdlciB2YWx1ZSBpbiBLYixzaG91bGQgYmUgbm9uemVybyBpZiB5b3VyIGNhcmQgcmVwb3J0cworCSAgbW9yZSBtZW1vcnkgdGhhbiBpdCBhY3R1YWxseSBoYXMuRm9yIGluc3RhbmNlIG1pbmUgaXMgMTkySyBsZXNzIHRoYW4KKwkgIGRldGVjdGlvbiBzYXlzIGluIGFsbCB0aHJlZSBCSU9TIHNlbGVjdGFibGUgc2l0dWF0aW9ucyAyTSwgNE0sIDhNLgorCSAgT25seSB1c2UgaWYgeW91ciB2aWRlbyBtZW1vcnkgaXMgdGFrZW4gZnJvbSBtYWluIG1lbW9yeSBoZW5jZSBvZgorCSAgY29uZmlndXJhYmxlIHNpemUuT3RoZXJ3aXNlIHVzZSBtZW1zaXplLgorCSAgSWYgaW4gc29tZSBtb2RlcyB3aGljaCBiYXJlbHkgZml0IHRoZSBtZW1vcnkgeW91IHNlZSBnYXJiYWdlIGF0IHRoZSBib3R0b20KKwkgIHRoaXMgbWlnaHQgaGVscCBieSBub3QgbGV0dGluZyBjaGFuZ2UgdG8gdGhhdCBtb2RlIGFueW1vcmUuCisKK25hdGl2ZXggLSB0aGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBmbGF0IHBhbmVsLklmIHlvdSBrbm93IGl0ICh1c3VhbGx5IDEwMjQKKwkgIDgwMCBvciAxMjgwKSBhbmQgaXQgaXMgbm90IHdoYXQgdGhlIGRyaXZlciBzZWVtcyB0byBkZXRlY3QgdXNlIGl0LgorCiticHAgIC0gYml0cyBwZXIgcGl4ZWwgKDgsMTYgb3IgMzIpCittb2RlIC0gYSBtb2RlIG5hbWUgbGlrZSA4MDB4NjAwIChhcyBkZXNjcmliZWQgaW4gRG9jdW1lbnRhdGlvbi9mYi9tb2RlZGIudHh0KQorCitVc2luZyBpbnNhbmUgdmFsdWVzIGZvciB0aGUgYWJvdmUgcGFyYW1ldGVycyB3aWxsIHByb2JhYmx5IHJlc3VsdCBpbiBkcml2ZXIKK21pc2JlaGF2aW91ciBzbyB0YWtlIGNhcmUoZm9yIGluc3RhbmNlIG1lbXNpemU9MTIzNDU2Nzggb3IgbWVtZGlmZj0yMzc4NCBvcgorbmF0aXZleD05MykKKworQ29udGFjdDogamFuaUBhc3RlY2huaXgucm8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvdmVzYWZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvdmVzYWZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTRlMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi92ZXNhZmIudHh0CkBAIC0wLDAgKzEsMTY3IEBACisKK1doYXQgaXMgdmVzYWZiPworPT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSBnZW5lcmljIGRyaXZlciBmb3IgYSBncmFwaGljIGZyYW1lYnVmZmVyIG9uIGludGVsIGJveGVzLgorCitUaGUgaWRlYSBpcyBzaW1wbGU6ICBUdXJuIG9uIGdyYXBoaWNzIG1vZGUgYXQgYm9vdCB0aW1lIHdpdGggdGhlIGhlbHAKK29mIHRoZSBCSU9TLCBhbmQgdXNlIHRoaXMgYXMgZnJhbWVidWZmZXIgZGV2aWNlIC9kZXYvZmIwLCBsaWtlIHRoZSBtNjhrCisoYW5kIG90aGVyKSBwb3J0cyBkby4KKworVGhpcyBtZWFucyB3ZSBkZWNpZGUgYXQgYm9vdCB0aW1lIHdoZW5ldmVyIHdlIHdhbnQgdG8gcnVuIGluIHRleHQgb3IKK2dyYXBoaWNzIG1vZGUuICBTd2l0Y2hpbmcgbW9kZSBsYXRlciBvbiAoaW4gcHJvdGVjdGVkIG1vZGUpIGlzCitpbXBvc3NpYmxlOyBCSU9TIGNhbGxzIHdvcmsgaW4gcmVhbCBtb2RlIG9ubHkuICBWRVNBIEJJT1MgRXh0ZW5zaW9ucworVmVyc2lvbiAyLjAgYXJlIHJlcXVpcmVkLCBiZWNhdXNlIHdlIG5lZWQgYSBsaW5lYXIgZnJhbWUgYnVmZmVyLgorCitBZHZhbnRhZ2VzOgorCisgKiBJdCBwcm92aWRlcyBhIG5pY2UgbGFyZ2UgY29uc29sZSAoMTI4IGNvbHMgKyA0OCBsaW5lcyB3aXRoIDEwMjR4NzY4KQorICAgd2l0aG91dCB1c2luZyB0aW55LCB1bnJlYWRhYmxlIGZvbnRzLgorICogWW91IGNhbiBydW4gWEY2OF9GQkRldiBvbiB0b3Agb2YgL2Rldi9mYjAgKD0+IG5vbi1hY2NlbGVyYXRlZCBYMTEKKyAgIHN1cHBvcnQgZm9yIGV2ZXJ5IFZCRSAyLjAgY29tcGxpYW50IGdyYXBoaWNzIGJvYXJkKS4KKyAqIE1vc3QgaW1wb3J0YW50OiBib290IGxvZ28gOi0pCisKK0Rpc2FkdmFudGFnZXM6CisKKyAqIGdyYXBoaWMgbW9kZSBpcyBzbG93ZXIgdGhhbiB0ZXh0IG1vZGUuLi4KKworCitIb3cgdG8gdXNlIGl0PworPT09PT09PT09PT09PT0KKworU3dpdGNoaW5nIG1vZGVzIGlzIGRvbmUgdXNpbmcgdGhlIHZnYT0uLi4gYm9vdCBwYXJhbWV0ZXIuICBSZWFkCitEb2N1bWVudGF0aW9uL3N2Z2EudHh0IGZvciBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGNvbXBpbGUgaW4gYm90aCB2Z2Fjb24gKGZvciB0ZXh0IG1vZGUpIGFuZCB2ZXNhZmIgKGZvcgorZ3JhcGhpY3MgbW9kZSkuIFdoaWNoIG9mIHRoZW0gdGFrZXMgb3ZlciB0aGUgY29uc29sZSBkZXBlbmRzIG9uCit3aGVuZXZlciB0aGUgc3BlY2lmaWVkIG1vZGUgaXMgdGV4dCBvciBncmFwaGljcy4KKworVGhlIGdyYXBoaWMgbW9kZXMgYXJlIE5PVCBpbiB0aGUgbGlzdCB3aGljaCB5b3UgZ2V0IGlmIHlvdSBib290IHdpdGgKK3ZnYT1hc2sgYW5kIGhpdCByZXR1cm4uIFRoZSBtb2RlIHlvdSB3aXNoIHRvIHVzZSBpcyBkZXJpdmVkIGZyb20gdGhlCitWRVNBIG1vZGUgbnVtYmVyLiBIZXJlIGFyZSB0aG9zZSBWRVNBIG1vZGUgbnVtYmVyczoKKworICAgIHwgNjQweDQ4MCAgODAweDYwMCAgMTAyNHg3NjggMTI4MHgxMDI0CistLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI1NiB8ICAweDEwMSAgICAweDEwMyAgICAweDEwNSAgICAweDEwNyAgIAorMzJrIHwgIDB4MTEwICAgIDB4MTEzICAgIDB4MTE2ICAgIDB4MTE5ICAgCis2NGsgfCAgMHgxMTEgICAgMHgxMTQgICAgMHgxMTcgICAgMHgxMUEgICAKKzE2TSB8ICAweDExMiAgICAweDExNSAgICAweDExOCAgICAweDExQiAgIAorCitUaGUgdmlkZW8gbW9kZSBudW1iZXIgb2YgdGhlIExpbnV4IGtlcm5lbCBpcyB0aGUgVkVTQSBtb2RlIG51bWJlciBwbHVzCisweDIwMC4KKyAKKyBMaW51eF9rZXJuZWxfbW9kZV9udW1iZXIgPSBWRVNBX21vZGVfbnVtYmVyICsgMHgyMDAKKworU28gdGhlIHRhYmxlIGZvciB0aGUgS2VybmVsIG1vZGUgbnVtYmVycyBhcmU6CisKKyAgICB8IDY0MHg0ODAgIDgwMHg2MDAgIDEwMjR4NzY4IDEyODB4MTAyNAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyNTYgfCAgMHgzMDEgICAgMHgzMDMgICAgMHgzMDUgICAgMHgzMDcgICAKKzMyayB8ICAweDMxMCAgICAweDMxMyAgICAweDMxNiAgICAweDMxOSAgIAorNjRrIHwgIDB4MzExICAgIDB4MzE0ICAgIDB4MzE3ICAgIDB4MzFBICAgCisxNk0gfCAgMHgzMTIgICAgMHgzMTUgICAgMHgzMTggICAgMHgzMUIgICAKKworVG8gZW5hYmxlIG9uZSBvZiB0aG9zZSBtb2RlcyB5b3UgaGF2ZSB0byBzcGVjaWZ5ICJ2Z2E9YXNrIiBpbiB0aGUKK2xpbG8uY29uZiBmaWxlIGFuZCByZXJ1biBMSUxPLiBUaGVuIHlvdSBjYW4gdHlwZSBpbiB0aGUgZGVzaXJlZAorbW9kZSBhdCB0aGUgInZnYT1hc2siIHByb21wdC4gRm9yIGV4YW1wbGUgaWYgeW91IGxpa2UgdG8gdXNlIAorMTAyNHg3Njh4MjU2IGNvbG9ycyB5b3UgaGF2ZSB0byBzYXkgIjMwNSIgYXQgdGhpcyBwcm9tcHQuCisKK0lmIHRoaXMgZG9lcyBub3Qgd29yaywgdGhpcyBtaWdodCBiZSBiZWNhdXNlIHlvdXIgQklPUyBkb2VzIG5vdCBzdXBwb3J0CitsaW5lYXIgZnJhbWVidWZmZXJzIG9yIGJlY2F1c2UgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG1vZGUgYXQgYWxsLgorRXZlbiBpZiB5b3VyIGJvYXJkIGRvZXMsIGl0IG1pZ2h0IGJlIHRoZSBCSU9TIHdoaWNoIGRvZXMgbm90LiAgVkVTQSBCSU9TCitFeHRlbnNpb25zIHYyLjAgYXJlIHJlcXVpcmVkLCAxLjIgaXMgTk9UIHN1ZmZpY2llbnQuICBZb3Ugd2lsbCBnZXQgYQorImJhZCBtb2RlIG51bWJlciIgbWVzc2FnZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KKworMS4gTm90ZTogTElMTyBjYW5ub3QgaGFuZGxlIGhleCwgZm9yIGJvb3RpbmcgZGlyZWN0bHkgd2l0aCAKKyAgICAgICAgICJ2Z2E9bW9kZS1udW1iZXIiIHlvdSBoYXZlIHRvIHRyYW5zZm9ybSB0aGUgbnVtYmVycyB0byBkZWNpbWFsLgorMi4gTm90ZTogU29tZSBuZXdlciB2ZXJzaW9ucyBvZiBMSUxPIGFwcGVhciB0byB3b3JrIHdpdGggdGhvc2UgaGV4IHZhbHVlcywKKyAgICAgICAgIGlmIHlvdSBzZXQgdGhlIDB4IGluIGZyb250IG9mIHRoZSBudW1iZXJzLgorCitYMTEKKz09PQorCitYRjY4X0ZCRGV2IHNob3VsZCB3b3JrIGp1c3QgZmluZSwgYnV0IGl0IGlzIG5vbi1hY2NlbGVyYXRlZC4gIFJ1bm5pbmcKK2Fub3RoZXIgKGFjY2VsZXJhdGVkKSBYLVNlcnZlciBsaWtlIFhGODZfU1ZHQSBtaWdodCBvciBtaWdodCBub3Qgd29yay4KK0l0IGRlcGVuZHMgb24gWC1TZXJ2ZXIgYW5kIGdyYXBoaWNzIGJvYXJkLgorCitUaGUgWC1TZXJ2ZXIgbXVzdCByZXN0b3JlIHRoZSB2aWRlbyBtb2RlIGNvcnJlY3RseSwgZWxzZSB5b3UgZW5kIHVwCit3aXRoIGEgYnJva2VuIGNvbnNvbGUgKGFuZCB2ZXNhZmIgY2Fubm90IGRvIGFueXRoaW5nIGFib3V0IHRoaXMpLgorCisKK1JlZnJlc2ggcmF0ZXMKKz09PT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2F5IHRvIGNoYW5nZSB0aGUgdmVzYWZiIHZpZGVvIG1vZGUgYW5kL29yIHRpbWluZ3MgYWZ0ZXIKK2Jvb3RpbmcgbGludXguICBJZiB5b3UgYXJlIG5vdCBoYXBweSB3aXRoIHRoZSA2MCBIeiByZWZyZXNoIHJhdGUsIHlvdQoraGF2ZSB0aGVzZSBvcHRpb25zOgorCisgKiBjb25maWd1cmUgYW5kIGxvYWQgdGhlIERPUy1Ub29scyBmb3IgeW91ciB0aGUgZ3JhcGhpY3MgYm9hcmQgKGlmCisgICBhdmFpbGFibGUpIGFuZCBib290IGxpbnV4IHdpdGggbG9hZGxpbi4KKyAqIHVzZSBhIG5hdGl2ZSBkcml2ZXIgKG1hdHJveGZiL2F0eWZiKSBpbnN0ZWFkIGlmIHZlc2FmYi4gIElmIG5vbmUKKyAgIGlzIGF2YWlsYWJsZSwgd3JpdGUgYSBuZXcgb25lIQorICogVkJFIDMuMCBtaWdodCB3b3JrIHRvby4gIEkgaGF2ZSBuZWl0aGVyIGEgZ2Z4IGJvYXJkIHdpdGggVkJFIDMuMAorICAgc3VwcG9ydCBub3IgdGhlIHNwZWNzLCBzbyBJIGhhdmUgbm90IGNoZWNrZWQgdGhpcyB5ZXQuCisKKworQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PQorCitUaGUgVkVTQSBCSU9TIHByb3ZpZGVzIHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSBmb3IgY2hhbmdpbmcKK3NvbWUgcGFyYW1ldGVycy4gIHZlc2FmYiBjYW4gdXNlIGl0IGZvciBwYWxldHRlIGNoYW5nZXMgYW5kCit0byBwYW4gdGhlIGRpc3BsYXkuICBJdCBpcyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdAorc2VlbXMgbm90IHRvIHdvcmsgd2l0aCBzb21lIEJJT1MgdmVyc2lvbnMsIGJ1dCB0aGVyZSBhcmUgb3B0aW9ucwordG8gdHVybiBpdCBvbi4KKworWW91IGNhbiBwYXNzIG9wdGlvbnMgdG8gdmVzYWZiIHVzaW5nICJ2aWRlbz12ZXNhZmI6b3B0aW9uIiBvbgordGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuICBNdWx0aXBsZSBvcHRpb25zIHNob3VsZCBiZSBzZXBhcmF0ZWQKK2J5IGNvbW1hLCBsaWtlIHRoaXM6ICJ2aWRlbz12ZXNhZmI6eXBhbixpbnZlcnMiCisKK0FjY2VwdGVkIG9wdGlvbnM6CisKK2ludmVycwlubyBjb21tZW50Li4uCisKK3lwYW4JZW5hYmxlIGRpc3BsYXkgcGFubmluZyB1c2luZyB0aGUgVkVTQSBwcm90ZWN0ZWQgbW9kZSAKKwlpbnRlcmZhY2UuICBUaGUgdmlzaWJsZSBzY3JlZW4gaXMganVzdCBhIHdpbmRvdyBvZiB0aGUKKwl2aWRlbyBtZW1vcnksIGNvbnNvbGUgc2Nyb2xsaW5nIGlzIGRvbmUgYnkgY2hhbmdpbmcgdGhlCisJc3RhcnQgb2YgdGhlIHdpbmRvdy4KKwlwcm86CSogc2Nyb2xsaW5nIChmdWxsc2NyZWVuKSBpcyBmYXN0LCBiZWNhdXNlIHRoZXJlIGlzCisJCSAgbm8gbmVlZCB0byBjb3B5IGFyb3VuZCBkYXRhLgorCQkqIFlvdSdsbCBnZXQgc2Nyb2xsYmFjayAodGhlIFNoaWZ0LVBnVXAgdGhpbmcpLAorCQkgIHRoZSB2aWRlbyBtZW1vcnkgY2FuIGJlIHVzZWQgYXMgc2Nyb2xsYmFjayBidWZmZXIKKwlrb250cmE6ICogc2Nyb2xsaW5nIG9ubHkgcGFydHMgb2YgdGhlIHNjcmVlbiBjYXVzZXMgc29tZQorCQkgIHVnbHkgZmxpY2tlciBlZmZlY3RzIChib290IGxvZ28gZmxpY2tlcnMgZm9yCisJCSAgZXhhbXBsZSkuCisKK3l3cmFwCVNhbWUgYXMgeXBhbiwgYnV0IGFzc3VtZXMgeW91ciBnZnggYm9hcmQgY2FuIHdyYXAtYXJvdW5kIAorCXRoZSB2aWRlbyBtZW1vcnkgKGkuZS4gc3RhcnRzIHJlYWRpbmcgZnJvbSB0b3AgaWYgaXQKKwlyZWFjaGVzIHRoZSBlbmQgb2YgdmlkZW8gbWVtb3J5KS4gIEZhc3RlciB0aGFuIHlwYW4uCisKK3JlZHJhdwlzY3JvbGwgYnkgcmVkcmF3aW5nIHRoZSBhZmZlY3RlZCBwYXJ0IG9mIHRoZSBzY3JlZW4sIHRoaXMKKwlpcyB0aGUgc2FmZSAoYW5kIHNsb3cpIGRlZmF1bHQuCisKKwordmdhcGFsCVVzZSB0aGUgc3RhbmRhcmQgdmdhIHJlZ2lzdGVycyBmb3IgcGFsZXR0ZSBjaGFuZ2VzLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQuCitwbWlwYWwJVXNlIHRoZSBwcm90ZWN0ZWQgbW9kZSBpbnRlcmZhY2UgZm9yIHBhbGV0dGUgY2hhbmdlcy4KKworbXRycglzZXR1cCBtZW1vcnkgdHlwZSByYW5nZSByZWdpc3RlcnMgZm9yIHRoZSB2ZXNhZmIgZnJhbWVidWZmZXIuCisKK3ZyZW1hcDpuCisgICAgICAgIHJlbWFwICduJyBNaUIgb2YgdmlkZW8gUkFNLiBJZiAwIG9yIG5vdCBzcGVjaWZpZWQsIHJlbWFwIG1lbW9yeQorCWFjY29yZGluZyB0byB2aWRlbyBtb2RlLiAoMi41LjY2IHBhdGNoL2lkZWEgYnkgQW50b25pbm8gRGFwbGFzCisJcmV2ZXJzZWQgdG8gZ2l2ZSBvdmVycmlkZSBwb3NzaWJpbGl0eSAoYWxsb2NhdGUgbW9yZSBmYiBtZW1vcnkKKwl0aGFuIHRoZSBrZXJuZWwgd291bGQpIHRvIDIuNCBieSB0bWJAaWtpLmZpKQorCit2dG90YWw6bgorICAgICAgICBpZiB0aGUgdmlkZW8gQklPUyBvZiB5b3VyIGNhcmQgaW5jb3JyZWN0bHkgZGV0ZXJtaW5lcyB0aGUgdG90YWwKKyAgICAgICAgYW1vdW50IG9mIHZpZGVvIFJBTSwgdXNlIHRoaXMgb3B0aW9uIHRvIG92ZXJyaWRlIHRoZSBCSU9TIChpbiBNaUIpLgorCitIYXZlIGZ1biEKKworICBHZXJkCisKKy0tCitHZXJkIEtub3JyIDxrcmF4ZWxAZ29sZGJhY2guaW4tYmVybGluLmRlPgorCitNaW5vciAobW9zdGx5IHR5cG8pIGNoYW5nZXMgCitieSBOaWNvIFNjaG1vaWdsIDxzY2htb2lnbEBydW1tcy51bmktbWFubmhlaW0uZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiMWY1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMCwwICsxLDQyIEBACitUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBmaWxlcyBhbmQgZmVhdHVyZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUKK3JlbW92ZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gIEV2ZXJ5IGVudHJ5IHNob3VsZCBjb250YWluIHdoYXQKK2V4YWN0bHkgaXMgZ29pbmcgYXdheSwgd2h5IGl0IGlzIGhhcHBlbmluZywgYW5kIHdobyBpcyBnb2luZyB0byBiZSBkb2luZwordGhlIHdvcmsuICBXaGVuIHRoZSBmZWF0dXJlIGlzIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLCBpdCBzaG91bGQgYWxzbworYmUgcmVtb3ZlZCBmcm9tIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CWRldmZzCitXaGVuOglKdWx5IDIwMDUKK0ZpbGVzOglmcy9kZXZmcy8qLCBpbmNsdWRlL2xpbnV4L2RldmZzX2ZzKi5oIGFuZCBhc3NvcnRlZCBkZXZmcworCWZ1bmN0aW9uIGNhbGxzIHRocm91Z2hvdXQgdGhlIGtlcm5lbCB0cmVlCitXaHk6CUl0IGhhcyBiZWVuIHVubWFpbnRhaW5lZCBmb3IgYSBudW1iZXIgb2YgeWVhcnMsIGhhcyB1bmZpeGFibGUKKwlyYWNlcywgY29udGFpbnMgYSBuYW1pbmcgcG9saWN5IHdpdGhpbiB0aGUga2VybmVsIHRoYXQgaXMKKwlhZ2FpbnN0IHRoZSBMU0IsIGFuZCBjYW4gYmUgcmVwbGFjZWQgYnkgdXNpbmcgdWRldi4KK1dobzoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CUFDUEkgUzRiaW9zIHN1cHBvcnQKK1doZW46CU1heSAyMDA1CitXaHk6CU5vb25lIHVzZXMgaXQsIGFuZCBpdCBwcm9iYWJseSBkb2VzIG5vdCB3b3JrLCBhbnl3YXkuIHN3c3VzcCBpcworCWZhc3RlciwgbW9yZSByZWxpYWJsZSwgYW5kIHBlb3BsZSBhcmUgYWN0dWFsbHkgdXNpbmcgaXQuCitXaG86CVBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CVBDSSBOYW1lIERhdGFiYXNlIChDT05GSUdfUENJX05BTUVTKQorV2hlbjoJSnVseSAyMDA1CitXaHk6CUl0IGJsb2F0cyB0aGUga2VybmVsIHVubmVjZXNzYXJpbHksIGFuZCBpcyBoYW5kbGVkIGJ5IHVzZXJzcGFjZSBiZXR0ZXIKKwkocGNpdXRpbHMgc3VwcG9ydHMgaXQuKSAgV2lsbCBlbGltaW5hdGUgdGhlIG5lZWQgdG8gdHJ5IHRvIGtlZXAgdGhlCisJcGNpLmlkcyBmaWxlIGluIHN5bmMgd2l0aCB0aGUgc2YubmV0IGRhdGFiYXNlIGFsbCBvZiB0aGUgdGltZS4KK1dobzoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CWlvX3JlbWFwX3BhZ2VfcmFuZ2UoKSAobWFjcm8gb3IgZnVuY3Rpb24pCitXaGVuOglTZXB0ZW1iZXIgMjAwNQorV2h5OglSZXBsYWNlZCBieSBpb19yZW1hcF9wZm5fcmFuZ2UoKSB3aGljaCBhbGxvd3MgbW9yZSBtZW1vcnkgc3BhY2UKKwlhZGRyZXNzYWJpbHR5IChieSB1c2luZyBhIHBmbikgYW5kIHN1cHBvcnRzIHNwYXJjICYgc3BhcmM2NAorCWlvc3BhY2UgYXMgcGFydCBvZiB0aGUgcGZuLgorV2hvOglSYW5keSBEdW5sYXAgPHJkZHVubGFwQG9zZGwub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNmYmFiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKQEAgLTAsMCArMSw1MCBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZSAoaW5mbyBvbiBzb21lIG9mIHRoZSBmaWxlc3lzdGVtcyBzdXBwb3J0ZWQgYnkgbGludXgpLgorTG9ja2luZworCS0gaW5mbyBvbiBsb2NraW5nIHJ1bGVzIGFzIHRoZXkgcGVydGFpbiB0byBMaW51eCBWRlMuCithZGZzLnR4dAorCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIEFjb3JuIEFkdmFuY2VkIERpc2MgRmlsaW5nIFN5c3RlbS4KK2FmZnMudHh0CisJLSBpbmZvIGFuZCBtb3VudCBvcHRpb25zIGZvciB0aGUgQW1pZ2EgRmFzdCBGaWxlIFN5c3RlbS4KK2Jmcy50eHQKKwktIGluZm8gZm9yIHRoZSBTQ08gVW5peFdhcmUgQm9vdCBGaWxlc3lzdGVtIChCRlMpLgorY2lmcy50eHQKKwktIGRlc2NyaXB0aW9uIG9mIHRoZSBDSUZTIGZpbGVzeXN0ZW0KK2NvZGEudHh0CisJLSBkZXNjcmlwdGlvbiBvZiB0aGUgQ09EQSBmaWxlc3lzdGVtLgorY3JhbWZzLnR4dAorCS0gaW5mbyBvbiB0aGUgY3JhbSBmaWxlc3lzdGVtIGZvciBzbWFsbCBzdG9yYWdlIChST01zIGV0YykKK2RldmZzLworCS0gZGlyZWN0b3J5IGNvbnRhaW5pbmcgZGV2ZnMgZG9jdW1lbnRhdGlvbi4KK2V4dDIudHh0CisJLSBpbmZvLCBtb3VudCBvcHRpb25zIGFuZCBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIEV4dDIgZmlsZXN5c3RlbS4KK2ZhdF9jdmYudHh0CisJLSBpbmZvIG9uIHRoZSBDb21wcmVzc2VkIFZvbHVtZSBGaWxlcyBleHRlbnNpb24gdG8gdGhlIEZBVCBmaWxlc3lzdGVtCitocGZzLnR4dAorCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIE9TLzIgSFBGUy4KK2lzb2ZzLnR4dAorCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIElTTyA5NjYwIChDRFJPTSkgZmlsZXN5c3RlbS4KK2pmcy50eHQKKwktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBKRlMgZmlsZXN5c3RlbS4KK25jcGZzLnR4dAorCS0gaW5mbyBvbiBOb3ZlbGwgTmV0d2FyZSh0bSkgZmlsZXN5c3RlbSB1c2luZyBOQ1AgcHJvdG9jb2wuCitudGZzLnR4dAorCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIE5URlMgZmlsZXN5c3RlbSAoV2luZG93cyBOVCkuCitwcm9jLnR4dAorCS0gaW5mbyBvbiBMaW51eCdzIC9wcm9jIGZpbGVzeXN0ZW0uCityb21mcy50eHQKKwktIERlc2NyaXB0aW9uIG9mIHRoZSBST01GUyBmaWxlc3lzdGVtLgorc21iZnMudHh0CisJLSBpbmZvIG9uIHVzaW5nIGZpbGVzeXN0ZW1zIHdpdGggdGhlIFNNQiBwcm90b2NvbCAoV2luZG93cyAzLjExIGFuZCBOVCkKK3N5c3YtZnMudHh0CisJLSBpbmZvIG9uIHRoZSBTeXN0ZW1WL1Y3L1hlbml4L0NvaGVyZW50IGZpbGVzeXN0ZW0uCit1ZGYudHh0CisJLSBpbmZvIGFuZCBtb3VudCBvcHRpb25zIGZvciB0aGUgVURGIGZpbGVzeXN0ZW0uCit1ZnMudHh0CisJLSBpbmZvIG9uIHRoZSB1ZnMgZmlsZXN5c3RlbS4KK3ZmYXQudHh0CisJLSBpbmZvIG9uIHVzaW5nIHRoZSBWRkFUIGZpbGVzeXN0ZW0gdXNlZCBpbiBXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1Cit2ZnMudHh0CisJLSBPdmVydmlldyBvZiB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbQoreGZzLnR4dAorCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9FeHBvcnRpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0V4cG9ydGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTA0N2UwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9FeHBvcnRpbmcKQEAgLTAsMCArMSwxNzYgQEAKKworTWFraW5nIEZpbGVzeXN0ZW1zIEV4cG9ydGFibGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01vc3QgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHJlcXVpcmUgYSBkZW50cnkgKG9yIHR3bykgYXMgYSBzdGFydGluZworcG9pbnQuICBMb2NhbCBhcHBsaWNhdGlvbnMgaGF2ZSBhIHJlZmVyZW5jZS1jb3VudGVkIGhvbGQgb24gc3VpdGFibGUKK2RlbnRyeXMgdmlhIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBvciBjd2Qvcm9vdC4gIEhvd2V2ZXIgcmVtb3RlCithcHBsaWNhdGlvbnMgdGhhdCBhY2Nlc3MgYSBmaWxlc3lzdGVtIHZpYSBhIHJlbW90ZSBmaWxlc3lzdGVtIHByb3RvY29sCitzdWNoIGFzIE5GUyBtYXkgbm90IGJlIGFibGUgdG8gaG9sZCBzdWNoIGEgcmVmZXJlbmNlLCBhbmQgc28gbmVlZCBhCitkaWZmZXJlbnQgd2F5IHRvIHJlZmVyIHRvIGEgcGFydGljdWxhciBkZW50cnkuICBBcyB0aGUgYWx0ZXJuYXRpdmUKK2Zvcm0gb2YgcmVmZXJlbmNlIG5lZWRzIHRvIGJlIHN0YWJsZSBhY3Jvc3MgcmVuYW1lcywgdHJ1bmNhdGVzLCBhbmQKK3NlcnZlci1yZWJvb3QgKGFtb25nIG90aGVyIHRoaW5ncywgdGhvdWdoIHRoZXNlIHRlbmQgdG8gYmUgdGhlIG1vc3QKK3Byb2JsZW1hdGljKSwgdGhlcmUgaXMgbm8gc2ltcGxlIGFuc3dlciBsaWtlICdmaWxlbmFtZScuCisKK1RoZSBtZWNoYW5pc20gZGlzY3Vzc2VkIGhlcmUgYWxsb3dzIGVhY2ggZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiB0bworc3BlY2lmeSBob3cgdG8gZ2VuZXJhdGUgYW4gb3BhcXVlIChvdXQgc2lkZSBvZiB0aGUgZmlsZXN5c3RlbSkgYnl0ZQorc3RyaW5nIGZvciBhbnkgZGVudHJ5LCBhbmQgaG93IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZGVudHJ5IGZvciBhbnkKK2dpdmVuIG9wYXF1ZSBieXRlIHN0cmluZy4KK1RoaXMgYnl0ZSBzdHJpbmcgd2lsbCBiZSBjYWxsZWQgYSAiZmlsZWhhbmRsZSBmcmFnbWVudCIgYXMgaXQKK2NvcnJlc3BvbmRzIHRvIHBhcnQgb2YgYW4gTkZTIGZpbGVoYW5kbGUuCisKK0EgZmlsZXN5c3RlbSB3aGljaCBzdXBwb3J0cyB0aGUgbWFwcGluZyBiZXR3ZWVuIGZpbGVoYW5kbGUgZnJhZ21lbnRzCithbmQgZGVudHJ5cyB3aWxsIGJlIHRlcm1lZCAiZXhwb3J0YWJsZSIuCisKKworCitEY2FjaGUgSXNzdWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBkY2FjaGUgbm9ybWFsbHkgY29udGFpbnMgYSBwcm9wZXIgcHJlZml4IG9mIGFueSBnaXZlbiBmaWxlc3lzdGVtCit0cmVlLiAgVGhpcyBtZWFucyB0aGF0IGlmIGFueSBmaWxlc3lzdGVtIG9iamVjdCBpcyBpbiB0aGUgZGNhY2hlLCB0aGVuCithbGwgb2YgdGhlIGFuY2VzdG9ycyBvZiB0aGF0IGZpbGVzeXN0ZW0gb2JqZWN0IGFyZSBhbHNvIGluIHRoZSBkY2FjaGUuCitBcyBub3JtYWwgYWNjZXNzIGlzIGJ5IGZpbGVuYW1lIHRoaXMgcHJlZml4IGlzIGNyZWF0ZWQgbmF0dXJhbGx5IGFuZAorbWFpbnRhaW5lZCBlYXNpbHkgKGJ5IGVhY2ggb2JqZWN0IG1haW50YWluaW5nIGEgcmVmZXJlbmNlIGNvdW50IG9uCitpdHMgcGFyZW50KS4KKworSG93ZXZlciB3aGVuIG9iamVjdHMgYXJlIGluY2x1ZGVkIGludG8gdGhlIGRjYWNoZSBieSBpbnRlcnByZXRpbmcgYQorZmlsZWhhbmRsZSBmcmFnbWVudCwgdGhlcmUgaXMgbm8gYXV0b21hdGljIGNyZWF0aW9uIG9mIGEgcGF0aCBwcmVmaXgKK2ZvciB0aGUgb2JqZWN0LiAgVGhpcyBsZWFkcyB0byB0d28gcmVsYXRlZCBidXQgZGlzdGluY3QgZmVhdHVyZXMgb2YKK3RoZSBkY2FjaGUgdGhhdCBhcmUgbm90IG5lZWRlZCBmb3Igbm9ybWFsIGZpbGVzeXN0ZW0gYWNjZXNzLgorCisxLyBUaGUgZGNhY2hlIG11c3Qgc29tZXRpbWVzIGNvbnRhaW4gb2JqZWN0cyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUKKyAgIHByb3BlciBwcmVmaXguIGkuZSB0aGF0IGFyZSBub3QgY29ubmVjdGVkIHRvIHRoZSByb290LgorMi8gVGhlIGRjYWNoZSBtdXN0IGJlIHByZXBhcmVkIGZvciBhIG5ld2x5IGZvdW5kICh2aWEgLT5sb29rdXApIGRpcmVjdG9yeQorICAgdG8gYWxyZWFkeSBoYXZlIGEgKG5vbi1jb25uZWN0ZWQpIGRlbnRyeSwgYW5kIG11c3QgYmUgYWJsZSB0byBtb3ZlCisgICB0aGF0IGRlbnRyeSBpbnRvIHBsYWNlIChiYXNlZCBvbiB0aGUgcGFyZW50IGFuZCBuYW1lIGluIHRoZQorICAgLT5sb29rdXApLiAgIFRoaXMgaXMgcGFydGljdWxhcmx5IG5lZWRlZCBmb3IgZGlyZWN0b3JpZXMgYXMKKyAgIGl0IGlzIGEgZGNhY2hlIGludmFyaWFudCB0aGF0IGRpcmVjdG9yaWVzIG9ubHkgaGF2ZSBvbmUgZGVudHJ5LgorCitUbyBpbXBsZW1lbnQgdGhlc2UgZmVhdHVyZXMsIHRoZSBkY2FjaGUgaGFzOgorCithLyBBIGRlbnRyeSBmbGFnIERDQUNIRV9ESVNDT05ORUNURUQgd2hpY2ggaXMgc2V0IG9uCisgICBhbnkgZGVudHJ5IHRoYXQgbWlnaHQgbm90IGJlIHBhcnQgb2YgdGhlIHByb3BlciBwcmVmaXguCisgICBUaGlzIGlzIHNldCB3aGVuIGFub255bW91cyBkZW50cmllcyBhcmUgY3JlYXRlZCwgYW5kIGNsZWFyZWQgd2hlbiBhCisgICBkZW50cnkgaXMgbm90aWNlZCB0byBiZSBhIGNoaWxkIG9mIGEgZGVudHJ5IHdoaWNoIGlzIGluIHRoZSBwcm9wZXIKKyAgIHByZWZpeC4gCisKK2IvIEEgcGVyLXN1cGVyYmxvY2sgbGlzdCAic19hbm9uIiBvZiBkZW50cmllcyB3aGljaCBhcmUgdGhlIHJvb3RzIG9mCisgICBzdWJ0cmVlcyB0aGF0IGFyZSBub3QgaW4gdGhlIHByb3BlciBwcmVmaXguICBUaGVzZSBkZW50cmllcywgYXMKKyAgIHdlbGwgYXMgdGhlIHByb3BlciBwcmVmaXgsIG5lZWQgdG8gYmUgcmVsZWFzZWQgYXQgdW5tb3VudCB0aW1lLiAgQXMKKyAgIHRoZXNlIGRlbnRyaWVzIHdpbGwgbm90IGJlIGhhc2hlZCwgdGhleSBhcmUgbGlua2VkIHRvZ2V0aGVyIG9uIHRoZQorICAgZF9oYXNoIGxpc3RfaGVhZC4KKworYy8gSGVscGVyIHJvdXRpbmVzIHRvIGFsbG9jYXRlIGFub255bW91cyBkZW50cmllcywgYW5kIHRvIGhlbHAgYXR0YWNoCisgICBsb29zZSBkaXJlY3RvcnkgZGVudHJpZXMgYXQgbG9va3VwIHRpbWUuIFRoZXkgYXJlOgorICAgIGRfYWxsb2NfYW5vbihpbm9kZSkgd2lsbCByZXR1cm4gYSBkZW50cnkgZm9yIHRoZSBnaXZlbiBpbm9kZS4KKyAgICAgIElmIHRoZSBpbm9kZSBhbHJlYWR5IGhhcyBhIGRlbnRyeSwgb25lIG9mIHRob3NlIGlzIHJldHVybmVkLgorICAgICAgSWYgaXQgZG9lc24ndCwgYSBuZXcgYW5vbnltb3VzIChJU19ST09UIGFuZAorICAgICAgICBEQ0FDSEVfRElTQ09OTkVDVEVEKSBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCBhdHRhY2hlZC4KKyAgICAgIEluIHRoZSBjYXNlIG9mIGEgZGlyZWN0b3J5LCBjYXJlIGlzIHRha2VuIHRoYXQgb25seSBvbmUgZGVudHJ5CisgICAgICBjYW4gZXZlciBiZSBhdHRhY2hlZC4KKyAgICBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KSB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIGEKKyAgICAgIGRlbnRyeSB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kIHBhcmVudCBhcyB0aGUgZ2l2ZW4gZGVudHJ5LCBhbmQKKyAgICAgIHdoaWNoIHJlZmVycyB0byB0aGUgZ2l2ZW4gaW5vZGUuCisgICAgICBJZiB0aGUgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kIGFscmVhZHkgaGFzIGEgZGVudHJ5LCB0aGVuIHRoYXQKKyAgICAgIGRlbnRyeSBpcyBkX21vdmVkIG92ZXIgdGhlIGdpdmVuIGRlbnRyeS4KKyAgICAgIElmIHRoZSBwYXNzZWQgZGVudHJ5IGdldHMgYXR0YWNoZWQsIGNhcmUgaXMgdGFrZW4gdGhhdCB0aGlzIGlzCisgICAgICBtdXR1YWxseSBleGNsdXNpdmUgdG8gYSBkX2FsbG9jX2Fub24gb3BlcmF0aW9uLgorICAgICAgSWYgdGhlIHBhc3NlZCBkZW50cnkgaXMgdXNlZCwgTlVMTCBpcyByZXR1cm5lZCwgZWxzZSB0aGUgdXNlZAorICAgICAgZGVudHJ5IGlzIHJldHVybmVkLiAgVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgY2FsbGluZyBwYXR0ZXJuIG9mCisgICAgICAtPmxvb2t1cC4KKyAgCisgCitGaWxlc3lzdGVtIElzc3VlcworLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGEgZmlsZXN5c3RlbSB0byBiZSBleHBvcnRhYmxlIGl0IG11c3Q6CisgCisgICAxLyBwcm92aWRlIHRoZSBmaWxlaGFuZGxlIGZyYWdtZW50IHJvdXRpbmVzIGRlc2NyaWJlZCBiZWxvdy4KKyAgIDIvIG1ha2Ugc3VyZSB0aGF0IGRfc3BsaWNlX2FsaWFzIGlzIHVzZWQgcmF0aGVyIHRoYW4gZF9hZGQKKyAgICAgIHdoZW4gLT5sb29rdXAgZmluZHMgYW4gaW5vZGUgZm9yIGEgZ2l2ZW4gcGFyZW50IGFuZCBuYW1lLgorICAgICAgVHlwaWNhbGx5IHRoZSAtPmxvb2t1cCByb3V0aW5lIHdpbGwgZW5kOgorCQlpZiAoaW5vZGUpCisJCQlyZXR1cm4gZF9zcGxpY2UoaW5vZGUsIGRlbnRyeSk7CisJCWRfYWRkKGRlbnRyeSwgaW5vZGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKworCisgIEEgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24gZGVjbGFyZXMgdGhhdCBpbnN0YW5jZXMgb2YgdGhlIGZpbGVzeXN0ZW0KK2FyZSBleHBvcnRhYmxlIGJ5IHNldHRpbmcgdGhlIHNfZXhwb3J0X29wIGZpZWxkIGluIHRoZSBzdHJ1Y3QKK3N1cGVyX2Jsb2NrLiAgVGhpcyBmaWVsZCBtdXN0IHBvaW50IHRvIGEgInN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyIKK3N0cnVjdCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBiZSBmdWxsIG9mIE5VTExzLCB0aG91Z2ggbm9ybWFsbHkgYXQKK2xlYXN0IGdldF9wYXJlbnQgd2lsbCBiZSBzZXQuCisKKyBUaGUgcHJpbWFyeSBvcGVyYXRpb25zIGFyZSBkZWNvZGVfZmggYW5kIGVuY29kZV9maC4gIAorZGVjb2RlX2ZoIHRha2VzIGEgZmlsZWhhbmRsZSBmcmFnbWVudCBhbmQgdHJpZXMgdG8gZmluZCBvciBjcmVhdGUgYQorZGVudHJ5IGZvciB0aGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHRoZSBmaWxlaGFuZGxlLgorZW5jb2RlX2ZoIHRha2VzIGEgZGVudHJ5IGFuZCBjcmVhdGVzIGEgZmlsZWhhbmRsZSBmcmFnbWVudCB3aGljaCBjYW4KK2xhdGVyIGJlIHVzZWQgdG8gZmluZC9jcmVhdGUgYSBkZW50cnkgZm9yIHRoZSBzYW1lIG9iamVjdC4KKworZGVjb2RlX2ZoIHdpbGwgcHJvYmFibHkgbWFrZSB1c2Ugb2YgImZpbmRfZXhwb3J0ZWRfZGVudHJ5Ii4KK1RoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gdGhlICJleHBvcnRmcyIgbW9kdWxlIHdoaWNoIGEgZmlsZXN5c3RlbSBkb2VzCitub3QgbmVlZCB1bmxlc3MgaXQgaXMgYmVpbmcgZXhwb3J0ZWQuICBTbyByYXRoZXIgdGhhdCBjYWxsaW5nCitmaW5kX2V4cG9ydGVkX2RlbnRyeSBkaXJlY3RseSwgZWFjaCBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIGl0IHRocm91Z2gKK3RoZSBmaW5kX2V4cG9ydGVkX2RlbnRyeSBwb2ludGVyIGluIGl0J3MgZXhwb3J0X29wZXJhdGlvbnMgdGFibGUuCitUaGlzIGZpZWxkIGlzIHNldCBjb3JyZWN0bHkgYnkgdGhlIGV4cG9ydGluZyBhZ2VudCAoZS5nLiBuZnNkKSB3aGVuIGEKK2ZpbGVzeXN0ZW0gaXMgZXhwb3J0ZWQsIGFuZCBiZWZvcmUgYW55IGV4cG9ydCBvcGVyYXRpb25zIGFyZSBjYWxsZWQuCisKK2ZpbmRfZXhwb3J0ZWRfZGVudHJ5IG5lZWRzIHRocmVlIHN1cHBvcnQgZnVuY3Rpb25zIGZyb20gdGhlCitmaWxlc3lzdGVtOgorICBnZXRfbmFtZS4gIFdoZW4gZ2l2ZW4gYSBwYXJlbnQgZGVudHJ5IGFuZCBhIGNoaWxkIGRlbnRyeSwgdGhpcworICAgIHNob3VsZCBmaW5kIGEgbmFtZSBpbiB0aGUgZGlyZWN0b3J5IGlkZW50aWZpZWQgYnkgdGhlIHBhcmVudAorICAgIGRlbnRyeSwgd2hpY2ggbGVhZHMgdG8gdGhlIG9iamVjdCBpZGVudGlmaWVkIGJ5IHRoZSBjaGlsZCBkZW50cnkuCisgICAgSWYgbm8gZ2V0X25hbWUgZnVuY3Rpb24gaXMgc3VwcGxpZWQsIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcworICAgIHByb3ZpZGVkIHdoaWNoIHVzZXMgdmZzX3JlYWRkaXIgdG8gZmluZCBwb3RlbnRpYWwgbmFtZXMsIGFuZAorICAgIG1hdGNoZXMgaW5vZGUgbnVtYmVycyB0byBmaW5kIHRoZSBjb3JyZWN0IG1hdGNoLgorCisgIGdldF9wYXJlbnQuICBXaGVuIGdpdmVuIGEgZGVudHJ5IGZvciBhIGRpcmVjdG9yeSwgdGhpcyBzaG91bGQgcmV0dXJuIAorICAgIGEgZGVudHJ5IGZvciB0aGUgcGFyZW50LiAgUXVpdGUgcG9zc2libHkgdGhlIHBhcmVudCBkZW50cnkgd2lsbAorICAgIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkgZF9hbGxvY19hbm9uLiAgCisgICAgVGhlIGRlZmF1bHQgZ2V0X3BhcmVudCBmdW5jdGlvbiBqdXN0IHJldHVybnMgYW4gZXJyb3Igc28gYW55CisgICAgZmlsZWhhbmRsZSBsb29rdXAgdGhhdCByZXF1aXJlcyBmaW5kaW5nIGEgcGFyZW50IHdpbGwgZmFpbC4KKyAgICAtPmxvb2t1cCgiLi4iKSBpcyAqbm90KiB1c2VkIGFzIGEgZGVmYXVsdCBhcyBpdCBjYW4gbGVhdmUgIi4uIgorICAgIGVudHJpZXMgaW4gdGhlIGRjYWNoZSB3aGljaCBhcmUgdG9vIG1lc3N5IHRvIHdvcmsgd2l0aC4KKworICBnZXRfZGVudHJ5LiAgV2hlbiBnaXZlbiBhbiBvcGFxdWUgZGF0dW0sIHRoaXMgc2hvdWxkIGZpbmQgdGhlCisgICAgaW1wbGllZCBvYmplY3QgYW5kIGNyZWF0ZSBhIGRlbnRyeSBmb3IgaXQgKHBvc3NpYmx5IHdpdGgKKyAgICBkX2FsbG9jX2Fub24pLiAKKyAgICBUaGUgb3BhcXVlIGRhdHVtIGlzIHdoYXRldmVyIGlzIHBhc3NlZCBkb3duIGJ5IHRoZSBkZWNvZGVfZmgKKyAgICBmdW5jdGlvbiwgYW5kIGlzIG9mdGVuIHNpbXBseSBhIGZyYWdtZW50IG9mIHRoZSBmaWxlaGFuZGxlCisgICAgZnJhZ21lbnQuCisgICAgZGVjb2RlX2ZoIHBhc3NlcyB0d28gZGF0dW1zIHRocm91Z2ggZmluZF9leHBvcnRlZF9kZW50cnkuICBPbmUgdGhhdCAKKyAgICBzaG91bGQgYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgdGFyZ2V0IG9iamVjdCwgYW5kIG9uZSB0aGF0IGNhbiBiZQorICAgIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG9iamVjdCdzIHBhcmVudCwgc2hvdWxkIHRoYXQgYmUgbmVjZXNzYXJ5LgorICAgIFRoZSBkZWZhdWx0IGdldF9kZW50cnkgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBkYXR1bSBjb250YWlucyBhbgorICAgIGlub2RlIG51bWJlciBhbmQgYSBnZW5lcmF0aW9uIG51bWJlciwgYW5kIGl0IGF0dGVtcHRzIHRvIGdldCB0aGUKKyAgICBpbm9kZSB1c2luZyAiaWdldCIgYW5kIGNoZWNrIGl0J3MgdmFsaWRpdHkgYnkgbWF0Y2hpbmcgdGhlCisgICAgZ2VuZXJhdGlvbiBudW1iZXIuICBBIGZpbGVzeXN0ZW0gc2hvdWxkIG9ubHkgZGVwZW5kIG9uIHRoZSBkZWZhdWx0CisgICAgaWYgaWdldCBjYW4gc2FmZWx5IGJlIHVzZWQgdGhpcyB3YXkuCisKK0lmIGRlY29kZV9maCBhbmQvb3IgZW5jb2RlX2ZoIGFyZSBsZWZ0IGFzIE5VTEwsIHRoZW4gZGVmYXVsdAoraW1wbGVtZW50YXRpb25zIGFyZSB1c2VkLiAgVGhlc2UgZGVmYXVsdHMgYXJlIHN1aXRhYmxlIGZvciBleHQyIGFuZCAKK2V4dHJlbWVseSBzaW1pbGFyIGZpbGVzeXN0ZW1zIChsaWtlIGV4dDMpLgorCitUaGUgZGVmYXVsdCBlbmNvZGVfZmggY3JlYXRlcyBhIGZpbGVoYW5kbGUgZnJhZ21lbnQgZnJvbSB0aGUgaW5vZGUKK251bWJlciBhbmQgZ2VuZXJhdGlvbiBudW1iZXIgb2YgdGhlIHRhcmdldCB0b2dldGhlciB3aXRoIHRoZSBpbm9kZQorbnVtYmVyIGFuZCBnZW5lcmF0aW9uIG51bWJlciBvZiB0aGUgcGFyZW50IChpZiB0aGUgcGFyZW50IGlzCityZXF1aXJlZCkuCisKK1RoZSBkZWZhdWx0IGRlY29kZV9maCBleHRyYWN0IHRoZSB0YXJnZXQgYW5kIHBhcmVudCBkYXR1bXMgZnJvbSB0aGUKK2ZpbGVoYW5kbGUgYXNzdW1pbmcgdGhlIGZvcm1hdCB1c2VkIGJ5IHRoZSBkZWZhdWx0IGVuY29kZV9maCBhbmQKK3Bhc3NlZCB0aGVtIHRvIGZpbmRfZXhwb3J0ZWRfZGVudHJ5LgorCisKK0EgZmlsZWhhbmRsZSBmcmFnbWVudCBjb25zaXN0cyBvZiBhbiBhcnJheSBvZiAxIG9yIG1vcmUgNGJ5dGUgd29yZHMsCit0b2dldGhlciB3aXRoIGEgb25lIGJ5dGUgInR5cGUiLgorVGhlIGRlY29kZV9maCByb3V0aW5lIHNob3VsZCBub3QgZGVwZW5kIG9uIHRoZSBzdGF0ZWQgc2l6ZSB0aGF0IGlzCitwYXNzZWQgdG8gaXQuICBUaGlzIHNpemUgbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCBmaWxlaGFuZGxlCitnZW5lcmF0ZWQgYnkgZW5jb2RlX2ZoLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgaGF2ZSBiZWVuIHBhZGRlZCB3aXRoCitudWxzLiAgUmF0aGVyLCB0aGUgZW5jb2RlX2ZoIHJvdXRpbmUgc2hvdWxkIGNob29zZSBhICJ0eXBlIiB3aGljaAoraW5kaWNhdGVzIHRoZSBkZWNvZGVfZmggaG93IG11Y2ggb2YgdGhlIGZpbGVoYW5kbGUgaXMgdmFsaWQsIGFuZCBob3cKK2l0IHNob3VsZCBiZSBpbnRlcnByZXRlZC4KKworIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzRiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKQEAgLTAsMCArMSw1MTUgQEAKKwlUaGUgdGV4dCBiZWxvdyBkZXNjcmliZXMgdGhlIGxvY2tpbmcgcnVsZXMgZm9yIFZGUy1yZWxhdGVkIG1ldGhvZHMuCitJdCBpcyAoYmVsaWV2ZWQgdG8gYmUpIHVwLXRvLWRhdGUuICpQbGVhc2UqLCBpZiB5b3UgY2hhbmdlIGFueXRoaW5nIGluCitwcm90b3R5cGVzIG9yIGxvY2tpbmcgcHJvdG9jb2xzIC0gdXBkYXRlIHRoaXMgZmlsZS4gQW5kIHVwZGF0ZSB0aGUgcmVsZXZhbnQKK2luc3RhbmNlcyBpbiB0aGUgdHJlZSwgZG9uJ3QgbGVhdmUgdGhhdCB0byBtYWludGFpbmVycyBvZiBmaWxlc3lzdGVtcy9kZXZpY2VzLworZXRjLiBBdCB0aGUgdmVyeSBsZWFzdCwgcHV0IHRoZSBsaXN0IG9mIGR1YmlvdXMgY2FzZXMgaW4gdGhlIGVuZCBvZiB0aGlzIGZpbGUuCitEb24ndCB0dXJuIGl0IGludG8gbG9nIC0gbWFpbnRhaW5lcnMgb2Ygb3V0LW9mLXRoZS10cmVlIGNvZGUgYXJlIHN1cHBvc2VkIHRvCitiZSBhYmxlIHRvIHVzZSBkaWZmKDEpLgorCVRoaW5nIGN1cnJlbnRseSBtaXNzaW5nIGhlcmU6IHNvY2tldCBvcGVyYXRpb25zLiBBbGV4ZXk/CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZW50cnlfb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvdG90eXBlczoKKwlpbnQgKCpkX3JldmFsaWRhdGUpKHN0cnVjdCBkZW50cnkgKiwgaW50KTsKKwlpbnQgKCpkX2hhc2gpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOworCWludCAoKmRfY29tcGFyZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKik7CisJaW50ICgqZF9kZWxldGUpKHN0cnVjdCBkZW50cnkgKik7CisJdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRyeSAqKTsKKwl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKKworbG9ja2luZyBydWxlczoKKwlub25lIGhhdmUgQktMCisJCWRjYWNoZV9sb2NrCXJlbmFtZV9sb2NrCS0+ZF9sb2NrCW1heSBibG9jaworZF9yZXZhbGlkYXRlOglubwkJbm8JCW5vCQl5ZXMKK2RfaGFzaAkJbm8JCW5vCQlubwkJeWVzCitkX2NvbXBhcmU6CW5vCQl5ZXMJCW5vCQlubyAKK2RfZGVsZXRlOgl5ZXMJCW5vCQl5ZXMJCW5vCitkX3JlbGVhc2U6CW5vCQlubwkJbm8JCXllcworZF9pcHV0OgkJbm8JCW5vCQlubwkJeWVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbm9kZV9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKK3Byb3RvdHlwZXM6CisJaW50ICgqY3JlYXRlKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKwlzdHJ1Y3QgZGVudHJ5ICogKCpsb29rdXApIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWQKK2F0YSAqKTsKKwlpbnQgKCpsaW5rKSAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqdW5saW5rKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpzeW1saW5rKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGNvbnN0IGNoYXIgKik7CisJaW50ICgqbWtkaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50KTsKKwlpbnQgKCpybWRpcikgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqbWtub2QpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50LGRldl90KTsKKwlpbnQgKCpyZW5hbWUpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLAorCQkJc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqcmVhZGxpbmspIChzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgX191c2VyICosaW50KTsKKwlpbnQgKCpmb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKwl2b2lkICgqdHJ1bmNhdGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJaW50ICgqcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CisJaW50ICgqc2V0YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOworCWludCAoKmdldGF0dHIpIChzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7CisJaW50ICgqc2V0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKixjb25zdCB2b2lkICosc2l6ZV90LGludCk7CisJc3NpemVfdCAoKmdldHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTsKKwlzc2l6ZV90ICgqbGlzdHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CisJaW50ICgqcmVtb3ZleGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKik7CisKK2xvY2tpbmcgcnVsZXM6CisJYWxsIG1heSBibG9jaywgbm9uZSBoYXZlIEJLTAorCQlpX3NlbShpbm9kZSkKK2xvb2t1cDoJCXllcworY3JlYXRlOgkJeWVzCitsaW5rOgkJeWVzIChib3RoKQorbWtub2Q6CQl5ZXMKK3N5bWxpbms6CXllcworbWtkaXI6CQl5ZXMKK3VubGluazoJCXllcyAoYm90aCkKK3JtZGlyOgkJeWVzIChib3RoKQkoc2VlIGJlbG93KQorcmVuYW1lOgkJeWVzIChhbGwpCShzZWUgYmVsb3cpCityZWFkbGluazoJbm8KK2ZvbGxvd19saW5rOglubwordHJ1bmNhdGU6CXllcwkJKHNlZSBiZWxvdykKK3NldGF0dHI6CXllcworcGVybWlzc2lvbjoJbm8KK2dldGF0dHI6CW5vCitzZXR4YXR0cjoJeWVzCitnZXR4YXR0cjoJbm8KK2xpc3R4YXR0cjoJbm8KK3JlbW92ZXhhdHRyOgl5ZXMKKwlBZGRpdGlvbmFsbHksIC0+cm1kaXIoKSwgLT51bmxpbmsoKSBhbmQgLT5yZW5hbWUoKSBoYXZlIC0+aV9zZW0gb24KK3ZpY3RpbS4KKwljcm9zcy1kaXJlY3RvcnkgLT5yZW5hbWUoKSBoYXMgKHBlci1zdXBlcmJsb2NrKSAtPnNfdmZzX3JlbmFtZV9zZW0uCisJLT50cnVuY2F0ZSgpIGlzIG5ldmVyIGNhbGxlZCBkaXJlY3RseSAtIGl0J3MgYSBjYWxsYmFjaywgbm90IGEKK21ldGhvZC4gSXQncyBjYWxsZWQgYnkgdm10cnVuY2F0ZSgpIC0gbGlicmFyeSBmdW5jdGlvbiBub3JtYWxseSB1c2VkIGJ5CistPnNldGF0dHIoKS4gTG9ja2luZyBpbmZvcm1hdGlvbiBhYm92ZSBhcHBsaWVzIHRvIHRoYXQgY2FsbCAoaS5lLiBpcworaW5oZXJpdGVkIGZyb20gLT5zZXRhdHRyKCkgLSB2bXRydW5jYXRlKCkgaXMgdXNlZCB3aGVuIEFUVFJfU0laRSBoYWQgYmVlbgorcGFzc2VkKS4KKworU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGlyZWN0b3J5LWxvY2tpbmcgZm9yIG1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbgorb2YgdGhlIGxvY2tpbmcgc2NoZW1lIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1cGVyX29wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm90b3R5cGVzOgorCXN0cnVjdCBpbm9kZSAqKCphbGxvY19pbm9kZSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisJdm9pZCAoKmRlc3Ryb3lfaW5vZGUpKHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqcmVhZF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqZGlydHlfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJaW50ICgqd3JpdGVfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKKwl2b2lkICgqcHV0X2lub2RlKSAoc3RydWN0IGlub2RlICopOworCXZvaWQgKCpkcm9wX2lub2RlKSAoc3RydWN0IGlub2RlICopOworCXZvaWQgKCpkZWxldGVfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKnB1dF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKwl2b2lkICgqd3JpdGVfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CisJaW50ICgqc3luY19mcykoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpOworCXZvaWQgKCp3cml0ZV9zdXBlcl9sb2NrZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CisJdm9pZCAoKnVubG9ja2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCWludCAoKnN0YXRmcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKKwlpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICopOworCXZvaWQgKCpjbGVhcl9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqdW1vdW50X2JlZ2luKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCWludCAoKnNob3dfb3B0aW9ucykoc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCB2ZnNtb3VudCAqKTsKKwlzc2l6ZV90ICgqcXVvdGFfcmVhZCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCk7CisJc3NpemVfdCAoKnF1b3RhX3dyaXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90KTsKKworbG9ja2luZyBydWxlczoKKwlBbGwgbWF5IGJsb2NrLgorCQkJQktMCXNfbG9jawlzX3Vtb3VudAorYWxsb2NfaW5vZGU6CQlubwlubwlubworZGVzdHJveV9pbm9kZToJCW5vCityZWFkX2lub2RlOgkJbm8JCQkJKHNlZSBiZWxvdykKK2RpcnR5X2lub2RlOgkJbm8JCQkJKG11c3Qgbm90IHNsZWVwKQord3JpdGVfaW5vZGU6CQlubworcHV0X2lub2RlOgkJbm8KK2Ryb3BfaW5vZGU6CQlubwkJCQkhISFpbm9kZV9sb2NrISEhCitkZWxldGVfaW5vZGU6CQlubworcHV0X3N1cGVyOgkJeWVzCXllcwlubword3JpdGVfc3VwZXI6CQlubwl5ZXMJcmVhZAorc3luY19mczoJCW5vCW5vCXJlYWQKK3dyaXRlX3N1cGVyX2xvY2tmczoJPwordW5sb2NrZnM6CQk/CitzdGF0ZnM6CQkJbm8Jbm8Jbm8KK3JlbW91bnRfZnM6CQlubwl5ZXMJbWF5YmUJCShzZWUgYmVsb3cpCitjbGVhcl9pbm9kZToJCW5vCit1bW91bnRfYmVnaW46CQl5ZXMJbm8Jbm8KK3Nob3dfb3B0aW9uczoJCW5vCQkJCSh2ZnNtb3VudC0+c2VtKQorcXVvdGFfcmVhZDoJCW5vCW5vCW5vCQkoc2VlIGJlbG93KQorcXVvdGFfd3JpdGU6CQlubwlubwlubwkJKHNlZSBiZWxvdykKKworLT5yZWFkX2lub2RlKCkgaXMgbm90IGEgbWV0aG9kIC0gaXQncyBhIGNhbGxiYWNrIHVzZWQgaW4gaWdldCgpLgorLT5yZW1vdW50X2ZzKCkgd2lsbCBoYXZlIHRoZSBzX3Vtb3VudCBsb2NrIGlmIGl0J3MgYWxyZWFkeSBtb3VudGVkLgorV2hlbiBjYWxsZWQgZnJvbSBnZXRfc2Jfc2luZ2xlLCBpdCBkb2VzIE5PVCBoYXZlIHRoZSBzX3Vtb3VudCBsb2NrLgorLT5xdW90YV9yZWFkKCkgYW5kIC0+cXVvdGFfd3JpdGUoKSBmdW5jdGlvbnMgYXJlIGJvdGggZ3VhcmFudGVlZCB0bworYmUgdGhlIG9ubHkgb25lcyBvcGVyYXRpbmcgb24gdGhlIHF1b3RhIGZpbGUgYnkgdGhlIHF1b3RhIGNvZGUgKHZpYQorZHFpb19zZW0pICh1bmxlc3MgYW4gYWRtaW4gcmVhbGx5IHdhbnRzIHRvIHNjcmV3IHVwIHNvbWV0aGluZyBhbmQKK3dyaXRlcyB0byBxdW90YSBmaWxlcyB3aXRoIHF1b3RhcyBvbikuIEZvciBvdGhlciBkZXRhaWxzIGFib3V0IGxvY2tpbmcKK3NlZSBhbHNvIGRxdW90X29wZXJhdGlvbnMgc2VjdGlvbi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZpbGVfc3lzdGVtX3R5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm90b3R5cGVzOgorCXN0cnVjdCBzdXBlcl9ibG9jayAqKCpnZXRfc2IpIChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqLCBpbnQsCisJCQljb25zdCBjaGFyICosIHZvaWQgKik7CisJdm9pZCAoKmtpbGxfc2IpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Citsb2NraW5nIHJ1bGVzOgorCQltYXkgYmxvY2sJQktMCitnZXRfc2IJCXllcwkJeWVzCitraWxsX3NiCQl5ZXMJCXllcworCistPmdldF9zYigpIHJldHVybnMgZXJyb3Igb3IgYSBsb2NrZWQgc3VwZXJibG9jayAoZXhjbHVzaXZlIG9uIC0+c191bW91bnQpLgorLT5raWxsX3NiKCkgdGFrZXMgYSB3cml0ZS1sb2NrZWQgc3VwZXJibG9jaywgZG9lcyBhbGwgc2h1dGRvd24gd29yayBvbiBpdCwKK3VubG9ja3MgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb3RvdHlwZXM6CisJaW50ICgqd3JpdGVwYWdlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworCWludCAoKnJlYWRwYWdlKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKKwlpbnQgKCpzeW5jX3BhZ2UpKHN0cnVjdCBwYWdlICopOworCWludCAoKndyaXRlcGFnZXMpKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKKwlpbnQgKCpzZXRfcGFnZV9kaXJ0eSkoc3RydWN0IHBhZ2UgKnBhZ2UpOworCWludCAoKnJlYWRwYWdlcykoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsIHVuc2lnbmVkIG5yX3BhZ2VzKTsKKwlpbnQgKCpwcmVwYXJlX3dyaXRlKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOworCWludCAoKmNvbW1pdF93cml0ZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKwlzZWN0b3JfdCAoKmJtYXApKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHNlY3Rvcl90KTsKKwlpbnQgKCppbnZhbGlkYXRlcGFnZSkgKHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOworCWludCAoKnJlbGVhc2VwYWdlKSAoc3RydWN0IHBhZ2UgKiwgaW50KTsKKwlpbnQgKCpkaXJlY3RfSU8pKGludCwgc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJbG9mZl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBucl9zZWdzKTsKKworbG9ja2luZyBydWxlczoKKwlBbGwgZXhjZXB0IHNldF9wYWdlX2RpcnR5IG1heSBibG9jaworCisJCQlCS0wJUGFnZUxvY2tlZChwYWdlKQord3JpdGVwYWdlOgkJbm8JeWVzLCB1bmxvY2tzIChzZWUgYmVsb3cpCityZWFkcGFnZToJCW5vCXllcywgdW5sb2Nrcworc3luY19wYWdlOgkJbm8JbWF5YmUKK3dyaXRlcGFnZXM6CQlubworc2V0X3BhZ2VfZGlydHkJCW5vCW5vCityZWFkcGFnZXM6CQlubworcHJlcGFyZV93cml0ZToJCW5vCXllcworY29tbWl0X3dyaXRlOgkJbm8JeWVzCitibWFwOgkJCXllcworaW52YWxpZGF0ZXBhZ2U6CQlubwl5ZXMKK3JlbGVhc2VwYWdlOgkJbm8JeWVzCitkaXJlY3RfSU86CQlubworCisJLT5wcmVwYXJlX3dyaXRlKCksIC0+Y29tbWl0X3dyaXRlKCksIC0+c3luY19wYWdlKCkgYW5kIC0+cmVhZHBhZ2UoKQorbWF5IGJlIGNhbGxlZCBmcm9tIHRoZSByZXF1ZXN0IGhhbmRsZXIgKC9kZXYvbG9vcCkuCisKKwktPnJlYWRwYWdlKCkgdW5sb2NrcyB0aGUgcGFnZSwgZWl0aGVyIHN5bmNocm9ub3VzbHkgb3IgdmlhIEkvTworY29tcGxldGlvbi4KKworCS0+cmVhZHBhZ2VzKCkgcG9wdWxhdGVzIHRoZSBwYWdlY2FjaGUgd2l0aCB0aGUgcGFzc2VkIHBhZ2VzIGFuZCBzdGFydHMKK0kvTyBhZ2FpbnN0IHRoZW0uICBUaGV5IGNvbWUgdW5sb2NrZWQgdXBvbiBJL08gY29tcGxldGlvbi4KKworCS0+d3JpdGVwYWdlKCkgaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOiBmb3IgIm1lbW9yeSBjbGVhbnNpbmciIGFuZCBmb3IKKyJzeW5jIi4gIFRoZXNlIGFyZSBxdWl0ZSBkaWZmZXJlbnQgb3BlcmF0aW9ucyBhbmQgdGhlIGJlaGF2aW91ciBtYXkgZGlmZmVyCitkZXBlbmRpbmcgdXBvbiB0aGUgbW9kZS4KKworSWYgd3JpdGVwYWdlIGlzIGNhbGxlZCBmb3Igc3luYyAod2JjLT5zeW5jX21vZGUgIT0gV0JDX1NZTkNfTk9ORSkgdGhlbgoraXQgKm11c3QqIHN0YXJ0IEkvTyBhZ2FpbnN0IHRoZSBwYWdlLCBldmVuIGlmIHRoYXQgd291bGQgaW52b2x2ZQorYmxvY2tpbmcgb24gaW4tcHJvZ3Jlc3MgSS9PLgorCitJZiB3cml0ZXBhZ2UgaXMgY2FsbGVkIGZvciBtZW1vcnkgY2xlYW5zaW5nIChzeW5jX21vZGUgPT0KK1dCQ19TWU5DX05PTkUpIHRoZW4gaXRzIHJvbGUgaXMgdG8gZ2V0IGFzIG11Y2ggd3JpdGVvdXQgdW5kZXJ3YXkgYXMKK3Bvc3NpYmxlLiAgU28gd3JpdGVwYWdlIHNob3VsZCB0cnkgdG8gYXZvaWQgYmxvY2tpbmcgYWdhaW5zdAorY3VycmVudGx5LWluLXByb2dyZXNzIEkvTy4KKworSWYgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGNhbGxlZCBmb3IgInN5bmMiIGFuZCBpdCBkZXRlcm1pbmVzIHRoYXQgaXQKK3dvdWxkIG5lZWQgdG8gYmxvY2sgYWdhaW5zdCBpbi1wcm9ncmVzcyBJL08gdG8gYmUgYWJsZSB0byBzdGFydCBuZXcgSS9PCithZ2FpbnN0IHRoZSBwYWdlIHRoZSBmaWxlc3lzdGVtIHNob3VsZCByZWRpcnR5IHRoZSBwYWdlIHdpdGgKK3JlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKCksIHRoZW4gdW5sb2NrIHRoZSBwYWdlIGFuZCByZXR1cm4gemVyby4KK1RoaXMgbWF5IGFsc28gYmUgZG9uZSB0byBhdm9pZCBpbnRlcm5hbCBkZWFkbG9ja3MsIGJ1dCByYXJlbHkuCisKK0lmIHRoZSBmaWxlc3l0ZW0gaXMgY2FsbGVkIGZvciBzeW5jIHRoZW4gaXQgbXVzdCB3YWl0IG9uIGFueQoraW4tcHJvZ3Jlc3MgSS9PIGFuZCB0aGVuIHN0YXJ0IG5ldyBJL08uCisKK1RoZSBmaWxlc3lzdGVtIHNob3VsZCB1bmxvY2sgdGhlIHBhZ2Ugc3luY2hyb25vdXNseSwgYmVmb3JlIHJldHVybmluZwordG8gdGhlIGNhbGxlci4KKworVW5sZXNzIHRoZSBmaWxlc3lzdGVtIGlzIGdvaW5nIHRvIHJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKCksIHVubG9jayB0aGUgcGFnZQorYW5kIHJldHVybiB6ZXJvLCB3cml0ZXBhZ2UgKm11c3QqIHJ1biBzZXRfcGFnZV93cml0ZWJhY2soKSBhZ2FpbnN0IHRoZSBwYWdlLAorZm9sbG93ZWQgYnkgdW5sb2NraW5nIGl0LiAgT25jZSBzZXRfcGFnZV93cml0ZWJhY2soKSBoYXMgYmVlbiBydW4gYWdhaW5zdCB0aGUKK3BhZ2UsIHdyaXRlIEkvTyBjYW4gYmUgc3VibWl0dGVkIGFuZCB0aGUgd3JpdGUgSS9PIGNvbXBsZXRpb24gaGFuZGxlciBtdXN0IHJ1bgorZW5kX3BhZ2Vfd3JpdGViYWNrKCkgb25jZSB0aGUgSS9PIGlzIGNvbXBsZXRlLiAgSWYgbm8gSS9PIGlzIHN1Ym1pdHRlZCwgdGhlCitmaWxlc3lzdGVtIG11c3QgcnVuIGVuZF9wYWdlX3dyaXRlYmFjaygpIGFnYWluc3QgdGhlIHBhZ2UgYmVmb3JlIHJldHVybmluZyBmcm9tCit3cml0ZXBhZ2UuCisKK1RoYXQgaXM6IGFmdGVyIDIuNS4xMiwgcGFnZXMgd2hpY2ggYXJlIHVuZGVyIHdyaXRlb3V0IGFyZSAqbm90KiBsb2NrZWQuICBOb3RlLAoraWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgdGhlIHBhZ2UgdG8gYmUgbG9ja2VkIGR1cmluZyB3cml0ZW91dCwgdGhhdCBpcyBvaywgdG9vLAordGhlIHBhZ2UgaXMgYWxsb3dlZCB0byBiZSB1bmxvY2tlZCBhdCBhbnkgcG9pbnQgaW4gdGltZSBiZXR3ZWVuIHRoZSBjYWxscyB0bworc2V0X3BhZ2Vfd3JpdGViYWNrKCkgYW5kIGVuZF9wYWdlX3dyaXRlYmFjaygpLgorCitOb3RlLCBmYWlsdXJlIHRvIHJ1biBlaXRoZXIgcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2UoKSBvciB0aGUgY29tYmluYXRpb24gb2YKK3NldF9wYWdlX3dyaXRlYmFjaygpL2VuZF9wYWdlX3dyaXRlYmFjaygpIG9uIGEgcGFnZSBzdWJtaXR0ZWQgdG8gd3JpdGVwYWdlCit3aWxsIGxlYXZlIHRoZSBwYWdlIGl0c2VsZiBtYXJrZWQgY2xlYW4gYnV0IGl0IHdpbGwgYmUgdGFnZ2VkIGFzIGRpcnR5IGluIHRoZQorcmFkaXggdHJlZS4gIFRoaXMgaW5jb2hlcmVuY3kgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGhhcmQtdG8tZGVidWcgcHJvYmxlbXMKK2luIHRoZSBmaWxlc3lzdGVtIGxpa2UgaGF2aW5nIGRpcnR5IGlub2RlcyBhdCB1bW91bnQgYW5kIGxvc2luZyB3cml0dGVuIGRhdGEuCisKKwktPnN5bmNfcGFnZSgpIGxvY2tpbmcgcnVsZXMgYXJlIG5vdCB3ZWxsLWRlZmluZWQgLSB1c3VhbGx5IGl0IGlzIGNhbGxlZAord2l0aCBsb2NrIG9uIHBhZ2UsIGJ1dCB0aGF0IGlzIG5vdCBndWFyYW50ZWVkLiBDb25zaWRlcmluZyB0aGUgY3VycmVudGx5CitleGlzdGluZyBpbnN0YW5jZXMgb2YgdGhpcyBtZXRob2QgLT5zeW5jX3BhZ2UoKSBpdHNlbGYgZG9lc24ndCBsb29rCit3ZWxsLWRlZmluZWQuLi4KKworCS0+d3JpdGVwYWdlcygpIGlzIHVzZWQgZm9yIHBlcmlvZGljIHdyaXRlYmFjayBhbmQgZm9yIHN5c2NhbGwtaW5pdGlhdGVkCitzeW5jIG9wZXJhdGlvbnMuICBUaGUgYWRkcmVzc19zcGFjZSBzaG91bGQgc3RhcnQgSS9PIGFnYWluc3QgYXQgbGVhc3QKKypucl90b193cml0ZSBwYWdlcy4gICpucl90b193cml0ZSBtdXN0IGJlIGRlY3JlbWVudGVkIGZvciBlYWNoIHBhZ2Ugd2hpY2ggaXMKK3dyaXR0ZW4uICBUaGUgYWRkcmVzc19zcGFjZSBpbXBsZW1lbnRhdGlvbiBtYXkgd3JpdGUgbW9yZSAob3IgbGVzcykgcGFnZXMKK3RoYW4gKm5yX3RvX3dyaXRlIGFza3MgZm9yLCBidXQgaXQgc2hvdWxkIHRyeSB0byBiZSByZWFzb25hYmx5IGNsb3NlLiAgSWYKK25yX3RvX3dyaXRlIGlzIE5VTEwsIGFsbCBkaXJ0eSBwYWdlcyBtdXN0IGJlIHdyaXR0ZW4uCisKK3dyaXRlcGFnZXMgc2hvdWxkIF9vbmx5XyB3cml0ZSBwYWdlcyB3aGljaCBhcmUgcHJlc2VudCBvbgorbWFwcGluZy0+aW9fcGFnZXMuCisKKwktPnNldF9wYWdlX2RpcnR5KCkgaXMgY2FsbGVkIGZyb20gdmFyaW91cyBwbGFjZXMgaW4gdGhlIGtlcm5lbAord2hlbiB0aGUgdGFyZ2V0IHBhZ2UgaXMgbWFya2VkIGFzIG5lZWRpbmcgd3JpdGViYWNrLiAgSXQgbWF5IGJlIGNhbGxlZAordW5kZXIgc3BpbmxvY2sgKGl0IGNhbm5vdCBibG9jaykgYW5kIGlzIHNvbWV0aW1lcyBjYWxsZWQgd2l0aCB0aGUgcGFnZQorbm90IGxvY2tlZC4KKworCS0+Ym1hcCgpIGlzIGN1cnJlbnRseSB1c2VkIGJ5IGxlZ2FjeSBpb2N0bCgpIChGSUJNQVApIHByb3ZpZGVkIGJ5IHNvbWUKK2ZpbGVzeXN0ZW1zIGFuZCBieSB0aGUgc3dhcHBlci4gVGhlIGxhdHRlciB3aWxsIGV2ZW50dWFsbHkgZ28gYXdheS4gQWxsCitpbnN0YW5jZXMgZG8gbm90IGFjdHVhbGx5IG5lZWQgdGhlIEJLTC4gUGxlYXNlLCBrZWVwIGl0IHRoYXQgd2F5IGFuZCBkb24ndAorYnJlZWQgbmV3IGNhbGxlcnMuCisKKwktPmludmFsaWRhdGVwYWdlKCkgaXMgY2FsbGVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gbXVzdCBhdHRlbXB0IHRvIGRyb3AKK3NvbWUgb3IgYWxsIG9mIHRoZSBidWZmZXJzIGZyb20gdGhlIHBhZ2Ugd2hlbiBpdCBpcyBiZWluZyB0cnVuY2F0ZWQuICBJdAorcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuICBJZiAtPmludmFsaWRhdGVwYWdlIGlzIHplcm8sIHRoZSBrZXJuZWwgdXNlcworYmxvY2tfaW52YWxpZGF0ZXBhZ2UoKSBpbnN0ZWFkLgorCisJLT5yZWxlYXNlcGFnZSgpIGlzIGNhbGxlZCB3aGVuIHRoZSBrZXJuZWwgaXMgYWJvdXQgdG8gdHJ5IHRvIGRyb3AgdGhlCitidWZmZXJzIGZyb20gdGhlIHBhZ2UgaW4gcHJlcGFyYXRpb24gZm9yIGZyZWVpbmcgaXQuICBJdCByZXR1cm5zIHplcm8gdG8KK2luZGljYXRlIHRoYXQgdGhlIGJ1ZmZlcnMgYXJlIChvciBtYXkgYmUpIGZyZWVhYmxlLiAgSWYgLT5yZWxlYXNlcGFnZSBpcyB6ZXJvLAordGhlIGtlcm5lbCBhc3N1bWVzIHRoYXQgdGhlIGZzIGhhcyBubyBwcml2YXRlIGludGVyZXN0IGluIHRoZSBidWZmZXJzLgorCisJTm90ZTogY3VycmVudGx5IGFsbW9zdCBhbGwgaW5zdGFuY2VzIG9mIGFkZHJlc3Nfc3BhY2UgbWV0aG9kcyBhcmUKK3VzaW5nIEJLTCBmb3IgaW50ZXJuYWwgc2VyaWFsaXphdGlvbiBhbmQgdGhhdCdzIG9uZSBvZiB0aGUgd29yc3Qgc291cmNlcworb2YgY29udGVudGlvbi4gTm9ybWFsbHkgdGhleSBhcmUgY2FsbGluZyBsaWJyYXJ5IGZ1bmN0aW9ucyAoaW4gZnMvYnVmZmVyLmMpCithbmQgcGFzcyBmb29fZ2V0X2Jsb2NrKCkgYXMgYSBjYWxsYmFjayAob24gbG9jYWwgYmxvY2stYmFzZWQgZmlsZXN5c3RlbXMsCitpbmRlZWQpLiBCS0wgaXMgbm90IG5lZWRlZCBmb3IgbGlicmFyeSBzdHVmZiBhbmQgaXMgdXN1YWxseSB0YWtlbiBieQorZm9vX2dldF9ibG9jaygpLiBJdCdzIGFuIG92ZXJraWxsLCBzaW5jZSBibG9jayBiaXRtYXBzIGNhbiBiZSBwcm90ZWN0ZWQgYnkKK2ludGVybmFsIGZzIGxvY2tpbmcgYW5kIHJlYWwgY3JpdGljYWwgYXJlYXMgYXJlIG11Y2ggc21hbGxlciB0aGFuIHRoZSBhcmVhcworZmlsZXN5c3RlbXMgcHJvdGVjdCBub3cuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZpbGVfbG9ja19vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvdG90eXBlczoKKwl2b2lkICgqZmxfaW5zZXJ0KShzdHJ1Y3QgZmlsZV9sb2NrICopOwkvKiBsb2NrIGluc2VydGlvbiBjYWxsYmFjayAqLworCXZvaWQgKCpmbF9yZW1vdmUpKHN0cnVjdCBmaWxlX2xvY2sgKik7CS8qIGxvY2sgcmVtb3ZhbCBjYWxsYmFjayAqLworCXZvaWQgKCpmbF9jb3B5X2xvY2spKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKKwl2b2lkICgqZmxfcmVsZWFzZV9wcml2YXRlKShzdHJ1Y3QgZmlsZV9sb2NrICopOworCisKK2xvY2tpbmcgcnVsZXM6CisJCQlCS0wJbWF5IGJsb2NrCitmbF9pbnNlcnQ6CQl5ZXMJbm8KK2ZsX3JlbW92ZToJCXllcwlubworZmxfY29weV9sb2NrOgkJeWVzCW5vCitmbF9yZWxlYXNlX3ByaXZhdGU6CXllcwl5ZXMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm90b3R5cGVzOgorCWludCAoKmZsX2NvbXBhcmVfb3duZXIpKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKKwl2b2lkICgqZmxfbm90aWZ5KShzdHJ1Y3QgZmlsZV9sb2NrICopOyAgLyogdW5ibG9jayBjYWxsYmFjayAqLworCXZvaWQgKCpmbF9jb3B5X2xvY2spKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKKwl2b2lkICgqZmxfcmVsZWFzZV9wcml2YXRlKShzdHJ1Y3QgZmlsZV9sb2NrICopOworCXZvaWQgKCpmbF9icmVhaykoc3RydWN0IGZpbGVfbG9jayAqKTsgLyogYnJlYWtfbGVhc2UgY2FsbGJhY2sgKi8KKworbG9ja2luZyBydWxlczoKKwkJCUJLTAltYXkgYmxvY2sKK2ZsX2NvbXBhcmVfb3duZXI6CXllcwlubworZmxfbm90aWZ5OgkJeWVzCW5vCitmbF9jb3B5X2xvY2s6CQl5ZXMJbm8KK2ZsX3JlbGVhc2VfcHJpdmF0ZToJeWVzCXllcworZmxfYnJlYWs6CQl5ZXMJbm8KKworCUN1cnJlbnRseSBvbmx5IE5GU0QgYW5kIE5MTSBwcm92aWRlIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLiBOb25lIG9mIHRoZQordGhlbSBibG9jay4gSWYgeW91IGhhdmUgb3V0LW9mLXRyZWUgaW5zdGFuY2VzIC0gcGxlYXNlLCBzaG93IHVwLiBMb2NraW5nCitpbiB0aGF0IGFyZWEgd2lsbCBjaGFuZ2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnVmZmVyX2hlYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb3RvdHlwZXM6CisJdm9pZCAoKmJfZW5kX2lvKShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpOworCitsb2NraW5nIHJ1bGVzOgorCWNhbGxlZCBmcm9tIGludGVycnVwdHMuIEluIG90aGVyIHdvcmRzLCBleHRyZW1lIGNhcmUgaXMgbmVlZGVkIGhlcmUuCitiaCBpcyBsb2NrZWQsIGJ1dCB0aGF0J3MgYWxsIHdhcnJhbnRpZXMgd2UgaGF2ZSBoZXJlLiBDdXJyZW50bHkgb25seSBSQUlEMSwKK2hpZ2htZW0sIGZzL2J1ZmZlci5jLCBhbmQgZnMvbnRmcy9hb3BzLmMgYXJlIHByb3ZpZGluZyB0aGVzZS4gQmxvY2sgZGV2aWNlcworY2FsbCB0aGlzIG1ldGhvZCB1cG9uIHRoZSBJTyBjb21wbGV0aW9uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb3RvdHlwZXM6CisJaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworCWludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCptZWRpYV9jaGFuZ2VkKSAoc3RydWN0IGdlbmRpc2sgKik7CisJaW50ICgqcmV2YWxpZGF0ZV9kaXNrKSAoc3RydWN0IGdlbmRpc2sgKik7CisKK2xvY2tpbmcgcnVsZXM6CisJCQlCS0wJYmRfc2VtCitvcGVuOgkJCXllcwl5ZXMKK3JlbGVhc2U6CQl5ZXMJeWVzCitpb2N0bDoJCQl5ZXMJbm8KK21lZGlhX2NoYW5nZWQ6CQlubwlubworcmV2YWxpZGF0ZV9kaXNrOglubwlubworCitUaGUgbGFzdCB0d28gYXJlIGNhbGxlZCBvbmx5IGZyb20gY2hlY2tfZGlza19jaGFuZ2UoKS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZpbGVfb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm90b3R5cGVzOgorCWxvZmZfdCAoKmxsc2VlaykgKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKKwlzc2l6ZV90ICgqcmVhZCkgKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworCXNzaXplX3QgKCphaW9fcmVhZCkgKHN0cnVjdCBraW9jYiAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCk7CisJc3NpemVfdCAoKndyaXRlKSAoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CisJc3NpemVfdCAoKmFpb193cml0ZSkgKHN0cnVjdCBraW9jYiAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsCisJCQlsb2ZmX3QpOworCWludCAoKnJlYWRkaXIpIChzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CisJdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKKwlpbnQgKCppb2N0bCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQl1bnNpZ25lZCBsb25nKTsKKwlsb25nICgqdW5sb2NrZWRfaW9jdGwpIChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCWxvbmcgKCpjb21wYXRfaW9jdGwpIChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCWludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CisJaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgKCpmbHVzaCkgKHN0cnVjdCBmaWxlICopOworCWludCAoKnJlbGVhc2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisJaW50ICgqZnN5bmMpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCBkYXRhc3luYyk7CisJaW50ICgqYWlvX2ZzeW5jKSAoc3RydWN0IGtpb2NiICosIGludCBkYXRhc3luYyk7CisJaW50ICgqZmFzeW5jKSAoaW50LCBzdHJ1Y3QgZmlsZSAqLCBpbnQpOworCWludCAoKmxvY2spIChzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7CisJc3NpemVfdCAoKnJlYWR2KSAoc3RydWN0IGZpbGUgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsCisJCQlsb2ZmX3QgKik7CisJc3NpemVfdCAoKndyaXRldikgKHN0cnVjdCBmaWxlICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCB1bnNpZ25lZCBsb25nLAorCQkJbG9mZl90ICopOworCXNzaXplX3QgKCpzZW5kZmlsZSkgKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCBzaXplX3QsIHJlYWRfYWN0b3JfdCwKKwkJCXZvaWQgX191c2VyICopOworCXNzaXplX3QgKCpzZW5kcGFnZSkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIGludCwgc2l6ZV90LAorCQkJbG9mZl90ICosIGludCk7CisJdW5zaWduZWQgbG9uZyAoKmdldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLAorCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqY2hlY2tfZmxhZ3MpKGludCk7CisJaW50ICgqZGlyX25vdGlmeSkoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyk7Cit9OworCitsb2NraW5nIHJ1bGVzOgorCUFsbCBleGNlcHQgLT5wb2xsKCkgbWF5IGJsb2NrLgorCQkJQktMCitsbHNlZWs6CQkJbm8JKHNlZSBiZWxvdykKK3JlYWQ6CQkJbm8KK2Fpb19yZWFkOgkJbm8KK3dyaXRlOgkJCW5vCithaW9fd3JpdGU6CQlubworcmVhZGRpcjogCQlubworcG9sbDoJCQlubworaW9jdGw6CQkJeWVzCShzZWUgYmVsb3cpCit1bmxvY2tlZF9pb2N0bDoJCW5vCShzZWUgYmVsb3cpCitjb21wYXRfaW9jdGw6CQlubworbW1hcDoJCQlubworb3BlbjoJCQltYXliZQkoc2VlIGJlbG93KQorZmx1c2g6CQkJbm8KK3JlbGVhc2U6CQlubworZnN5bmM6CQkJbm8JKHNlZSBiZWxvdykKK2Fpb19mc3luYzoJCW5vCitmYXN5bmM6CQkJeWVzCShzZWUgYmVsb3cpCitsb2NrOgkJCXllcworcmVhZHY6CQkJbm8KK3dyaXRldjoJCQlubworc2VuZGZpbGU6CQlubworc2VuZHBhZ2U6CQlubworZ2V0X3VubWFwcGVkX2FyZWE6CW5vCitjaGVja19mbGFnczoJCW5vCitkaXJfbm90aWZ5OgkJbm8KKworLT5sbHNlZWsoKSBsb2NraW5nIGhhcyBtb3ZlZCBmcm9tIGxsc2VlayB0byB0aGUgaW5kaXZpZHVhbCBsbHNlZWsKK2ltcGxlbWVudGF0aW9ucy4gIElmIHlvdXIgZnMgaXMgbm90IHVzaW5nIGdlbmVyaWNfZmlsZV9sbHNlZWssIHlvdQorbmVlZCB0byBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBhcHByb3ByaWF0ZSBsb2NrcyBpbiB5b3VyIC0+bGxzZWVrKCkuCitGb3IgbWFueSBmaWxlc3lzdGVtcywgaXQgaXMgcHJvYmFibHkgc2FmZSB0byBhY3F1aXJlIHRoZSBpbm9kZQorc2VtYXBob3JlLiAgTm90ZSBzb21lIGZpbGVzeXN0ZW1zIChpLmUuIHJlbW90ZSBvbmVzKSBwcm92aWRlIG5vCitwcm90ZWN0aW9uIGZvciBpX3NpemUgc28geW91IHdpbGwgbmVlZCB0byB1c2UgdGhlIEJLTC4KKworLT5vcGVuKCkgbG9ja2luZyBpcyBpbi10cmFuc2l0OiBiaWcgbG9jayBwYXJ0aWFsbHkgbW92ZWQgaW50byB0aGUgbWV0aG9kcy4KK1RoZSBvbmx5IGV4Y2VwdGlvbiBpcyAtPm9wZW4oKSBpbiB0aGUgaW5zdGFuY2VzIG9mIGZpbGVfb3BlcmF0aW9ucyB0aGF0IG5ldmVyCitlbmQgdXAgaW4gLT5pX2ZvcC8tPnByb2NfZm9wcywgaS5lLiBvbmVzIHRoYXQgYmVsb25nIHRvIGNoYXJhY3RlciBkZXZpY2VzCisoY2hyZGV2X29wZW4oKSB0YWtlcyBsb2NrIGJlZm9yZSByZXBsYWNpbmcgLT5mX29wIGFuZCBjYWxsaW5nIHRoZSBzZWNvbmRhcnkKK21ldGhvZC4gQXMgc29vbiBhcyB3ZSBmaXggdGhlIGhhbmRsaW5nIG9mIG1vZHVsZSByZWZlcmVuY2UgY291bnRlcnMgYWxsCitpbnN0YW5jZXMgb2YgLT5vcGVuKCkgd2lsbCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgQktMLgorCitOb3RlOiBleHQyX3JlbGVhc2UoKSB3YXMgKnRoZSogc291cmNlIG9mIGNvbnRlbnRpb24gb24gZnMtaW50ZW5zaXZlCitsb2FkcyBhbmQgZHJvcHBpbmcgQktMIG9uIC0+cmVsZWFzZSgpIGhlbHBzIHRvIGdldCByaWQgb2YgdGhhdCAod2Ugc3RpbGwKK2dyYWIgQktMIGZvciBjYXNlcyB3aGVuIHdlIGNsb3NlIGEgZmlsZSB0aGF0IGhhZCBiZWVuIG9wZW5lZCByL3csIGJ1dCB0aGF0CitjYW4gYW5kIHNob3VsZCBiZSBkb25lIHVzaW5nIHRoZSBpbnRlcm5hbCBsb2NraW5nIHdpdGggc21hbGxlciBjcml0aWNhbCBhcmVhcykuCitDdXJyZW50IHdvcnN0IG9mZmVuZGVyIGlzIGV4dDJfZ2V0X2Jsb2NrKCkuLi4KKworLT5mYXN5bmMoKSBpcyBhIG1lc3MuIFRoaXMgYXJlYSBuZWVkcyBhIGJpZyBjbGVhbnVwIGFuZCB0aGF0IHdpbGwgcHJvYmFibHkKK2FmZmVjdCBsb2NraW5nLgorCistPnJlYWRkaXIoKSBhbmQgLT5pb2N0bCgpIG9uIGRpcmVjdG9yaWVzIG11c3QgYmUgY2hhbmdlZC4gSWRlYWxseSB3ZSB3b3VsZAorbW92ZSAtPnJlYWRkaXIoKSB0byBpbm9kZV9vcGVyYXRpb25zIGFuZCB1c2UgYSBzZXBhcmF0ZSBtZXRob2QgZm9yIGRpcmVjdG9yeQorLT5pb2N0bCgpIG9yIGtpbGwgdGhlIGxhdHRlciBjb21wbGV0ZWx5LiBPbmUgb2YgdGhlIHByb2JsZW1zIGlzIHRoYXQgZm9yCithbnl0aGluZyB0aGF0IHJlc2VtYmxlcyB1bmlvbi1tb3VudCB3ZSB3b24ndCBoYXZlIGEgc3RydWN0IGZpbGUgZm9yIGFsbAorY29tcG9uZW50cy4gQW5kIHRoZXJlIGFyZSBvdGhlciByZWFzb25zIHdoeSB0aGUgY3VycmVudCBpbnRlcmZhY2UgaXMgYSBtZXNzLi4uCisKKy0+aW9jdGwoKSBvbiByZWd1bGFyIGZpbGVzIGlzIHN1cGVyY2VkZWQgYnkgdGhlIC0+dW5sb2NrZWRfaW9jdGwoKSB0aGF0Citkb2Vzbid0IHRha2UgdGhlIEJLTC4KKworLT5yZWFkIG9uIGRpcmVjdG9yaWVzIHByb2JhYmx5IG11c3QgZ28gYXdheSAtIHdlIHNob3VsZCBqdXN0IGVuZm9yY2UgLUVJU0RJUgoraW4gc3lzX3JlYWQoKSBhbmQgZnJpZW5kcy4KKworLT5mc3luYygpIGhhcyBpX3NlbSBvbiBpbm9kZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRxdW90X29wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvdG90eXBlczoKKwlpbnQgKCppbml0aWFsaXplKSAoc3RydWN0IGlub2RlICosIGludCk7CisJaW50ICgqZHJvcCkgKHN0cnVjdCBpbm9kZSAqKTsKKwlpbnQgKCphbGxvY19zcGFjZSkgKHN0cnVjdCBpbm9kZSAqLCBxc2l6ZV90LCBpbnQpOworCWludCAoKmFsbG9jX2lub2RlKSAoY29uc3Qgc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOworCWludCAoKmZyZWVfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7CisJaW50ICgqZnJlZV9pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCp0cmFuc2ZlcikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CisJaW50ICgqd3JpdGVfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKik7CisJaW50ICgqYWNxdWlyZV9kcXVvdCkgKHN0cnVjdCBkcXVvdCAqKTsKKwlpbnQgKCpyZWxlYXNlX2RxdW90KSAoc3RydWN0IGRxdW90ICopOworCWludCAoKm1hcmtfZGlydHkpIChzdHJ1Y3QgZHF1b3QgKik7CisJaW50ICgqd3JpdGVfaW5mbykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOworCitUaGVzZSBvcGVyYXRpb25zIGFyZSBpbnRlbmRlZCB0byBiZSBtb3JlIG9yIGxlc3Mgd3JhcHBpbmcgZnVuY3Rpb25zIHRoYXQgZW5zdXJlCithIHByb3BlciBsb2NraW5nIHdydCB0aGUgZmlsZXN5c3RlbSBhbmQgY2FsbCB0aGUgZ2VuZXJpYyBxdW90YSBvcGVyYXRpb25zLgorCitXaGF0IGZpbGVzeXN0ZW0gc2hvdWxkIGV4cGVjdCBmcm9tIHRoZSBnZW5lcmljIHF1b3RhIGZ1bmN0aW9uczoKKworCQlGUyByZWN1cnNpb24JSGVsZCBsb2NrcyB3aGVuIGNhbGxlZAoraW5pdGlhbGl6ZToJeWVzCQltYXliZSBkcW9ub2ZmX3NlbQorZHJvcDoJCXllcwkJLQorYWxsb2Nfc3BhY2U6CS0+bWFya19kaXJ0eSgpCS0KK2FsbG9jX2lub2RlOgktPm1hcmtfZGlydHkoKQktCitmcmVlX3NwYWNlOgktPm1hcmtfZGlydHkoKQktCitmcmVlX2lub2RlOgktPm1hcmtfZGlydHkoKQktCit0cmFuc2ZlcjoJeWVzCQktCit3cml0ZV9kcXVvdDoJeWVzCQlkcW9ub2ZmX3NlbSBvciBkcXB0cl9zZW0KK2FjcXVpcmVfZHF1b3Q6CXllcwkJZHFvbm9mZl9zZW0gb3IgZHFwdHJfc2VtCityZWxlYXNlX2RxdW90Ogl5ZXMJCWRxb25vZmZfc2VtIG9yIGRxcHRyX3NlbQorbWFya19kaXJ0eToJbm8JCS0KK3dyaXRlX2luZm86CXllcwkJZHFvbm9mZl9zZW0KKworRlMgcmVjdXJzaW9uIG1lYW5zIGNhbGxpbmcgLT5xdW90YV9yZWFkKCkgYW5kIC0+cXVvdGFfd3JpdGUoKSBmcm9tIHN1cGVyYmxvY2sKK29wZXJhdGlvbnMuCisKKy0+YWxsb2Nfc3BhY2UoKSwgLT5hbGxvY19pbm9kZSgpLCAtPmZyZWVfc3BhY2UoKSwgLT5mcmVlX2lub2RlKCkgYXJlIGNhbGxlZAorb25seSBkaXJlY3RseSBieSB0aGUgZmlsZXN5c3RlbSBhbmQgZG8gbm90IGNhbGwgYW55IGZzIGZ1bmN0aW9ucyBvbmx5Cit0aGUgLT5tYXJrX2RpcnR5KCkgb3BlcmF0aW9uLgorCitNb3JlIGRldGFpbHMgYWJvdXQgcXVvdGEgbG9ja2luZyBjYW4gYmUgZm91bmQgaW4gZnMvZHF1b3QuYy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHZtX29wZXJhdGlvbnNfc3RydWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm90b3R5cGVzOgorCXZvaWQgKCpvcGVuKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqKTsKKwl2b2lkICgqY2xvc2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCopOworCXN0cnVjdCBwYWdlICooKm5vcGFnZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0KiwgdW5zaWduZWQgbG9uZywgaW50ICopOworCitsb2NraW5nIHJ1bGVzOgorCQlCS0wJbW1hcF9zZW0KK29wZW46CQlubwl5ZXMKK2Nsb3NlOgkJbm8JeWVzCitub3BhZ2U6CQlubwl5ZXMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCUR1YmlvdXMgc3R1ZmYKKworKGlmIHlvdSBicmVhayBzb21ldGhpbmcgb3Igbm90aWNlIHRoYXQgaXQgaXMgYnJva2VuIGFuZCBkbyBub3QgZml4IGl0IHlvdXJzZWxmCistIGF0IGxlYXN0IHB1dCBpdCBoZXJlKQorCitpcGMvc2htLmM6OnNobV9kZWxldGUoKSAtIG1heSBuZWVkIEJLTC4KKy0+cmVhZCgpIGFuZCAtPndyaXRlKCkgaW4gbWFueSBkcml2ZXJzIGFyZSAocHJvYmFibHkpIG1pc3NpbmcgQktMLgorZHJpdmVycy9zZ2kvY2hhci9ncmFwaGljcy5jOjpzZ2lfZ3JhcGhpY3Nfbm9wYWdlKCkgLSBtYXkgbmVlZCBCS0wuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2FkZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZGZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjBhYmIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZGZzLnR4dApAQCAtMCwwICsxLDU3IEBACitNb3VudCBvcHRpb25zIGZvciBBREZTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgdWlkPW5ubglBbGwgZmlsZXMgaW4gdGhlIHBhcnRpdGlvbiB3aWxsIGJlIG93bmVkIGJ5CisJCXVzZXIgaWQgbm5uLiAgRGVmYXVsdCAwIChyb290KS4KKyAgZ2lkPW5ubglBbGwgZmlsZXMgaW4gdGhlIHBhcnRpdGlvbiB3aWxsYmUgaW4gZ3JvdXAKKwkJbm5uLiAgRGVmYXVsdCAwIChyb290KS4KKyAgb3dubWFzaz1ubm4JVGhlIHBlcm1pc3Npb24gbWFzayBmb3IgQURGUyAnb3duZXInIHBlcm1pc3Npb25zCisJCXdpbGwgYmUgbm5uLiAgRGVmYXVsdCAwNzAwLgorICBvdGhtYXNrPW5ubglUaGUgcGVybWlzc2lvbiBtYXNrIGZvciBBREZTICdvdGhlcicgcGVybWlzc2lvbnMKKwkJd2lsbCBiZSBubm4uICBEZWZhdWx0IDAwNzcuCisKK01hcHBpbmcgb2YgQURGUyBwZXJtaXNzaW9ucyB0byBMaW51eCBwZXJtaXNzaW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQURGUyBwZXJtaXNzaW9ucyBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmc6CisKKwlPd25lciByZWFkCisJT3duZXIgd3JpdGUKKwlPdGhlciByZWFkCisJT3RoZXIgd3JpdGUKKworICAoSW4gb2xkZXIgdmVyc2lvbnMsIGFuICdleGVjdXRlJyBwZXJtaXNzaW9uIGRpZCBleGlzdCwgYnV0IHRoaXMKKyAgIGRvZXMgbm90IGhvbGQgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgTGludXggJ2V4ZWN1dGUnIHBlcm1pc3Npb24KKyAgIGFuZCBpcyBub3cgb2Jzb2xldGUpLgorCisgIFRoZSBtYXBwaW5nIGlzIHBlcmZvcm1lZCBhcyBmb2xsb3dzOgorCisJT3duZXIgcmVhZAkJCQktPiAtci0tci0tci0tCisJT3duZXIgd3JpdGUJCQkJLT4gLS13LS13LS0tdworCU93bmVyIHJlYWQgYW5kIGZpbGV0eXBlIFVuaXhFeGVjCS0+IC0tLXgtLXgtLXgKKyAgICBUaGVzZSBhcmUgdGhlbiBtYXNrZWQgYnkgb3dubWFzaywgZWcgNzAwCS0+IC1yd3gtLS0tLS0KKwlQb3NzaWJsZSBvd25lciBtb2RlIHBlcm1pc3Npb25zCQktPiAtcnd4LS0tLS0tCisKKwlPdGhlciByZWFkCQkJCS0+IC1yLS1yLS1yLS0KKwlPdGhlciB3cml0ZQkJCQktPiAtLXctLXctLXctCisJT3RoZXIgcmVhZCBhbmQgZmlsZXR5cGUgVW5peEV4ZWMJLT4gLS0teC0teC0teAorICAgIFRoZXNlIGFyZSB0aGVuIG1hc2tlZCBieSBvdGhtYXNrLCBlZyAwNzcJLT4gLS0tLXJ3eHJ3eAorCVBvc3NpYmxlIG90aGVyIG1vZGUgcGVybWlzc2lvbnMJCS0+IC0tLS1yd3hyd3gKKworICBIZW5jZSwgd2l0aCB0aGUgZGVmYXVsdCBtYXNrcywgaWYgYSBmaWxlIGlzIG93bmVyIHJlYWQvd3JpdGUsIGFuZAorICBub3QgYSBVbml4RXhlYyBmaWxldHlwZSwgdGhlbiB0aGUgcGVybWlzc2lvbnMgd2lsbCBiZToKKworCQkJLXJ3LS0tLS0tLQorCisgIEhvd2V2ZXIsIGlmIHRoZSBtYXNrcyB3ZXJlIG93bm1hc2s9MDc3MCxvdGhtYXNrPTAwMDcsIHRoZW4gdGhpcyB3b3VsZAorICBiZSBtb2RpZmllZCB0bzoKKwkJCS1ydy1ydy0tLS0KKworICBUaGVyZSBpcyBubyByZXN0cmljdGlvbiBvbiB3aGF0IHlvdSBjYW4gZG8gd2l0aCB0aGVzZSBtYXNrcy4gIFlvdSBtYXkKKyAgd2lzaCB0aGF0IGVpdGhlciByZWFkIGJpdHMgZ2l2ZSByZWFkIGFjY2VzcyB0byB0aGUgZmlsZSBmb3IgYWxsLCBidXQKKyAga2VlcCB0aGUgZGVmYXVsdCB3cml0ZSBwcm90ZWN0aW9uIChvd25tYXNrPTA3NTUsb3RobWFzaz0wNTc3KToKKworCQkJLXJ3LXItLXItLQorCisgIFlvdSBjYW4gdGhlcmVmb3JlIHRhaWxvciB0aGUgcGVybWlzc2lvbiB0cmFuc2xhdGlvbiB0byB3aGF0ZXZlciB5b3UKKyAgZGVzaXJlIHRoZSBwZXJtaXNzaW9ucyBzaG91bGQgYmUgdW5kZXIgTGludXguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2FmZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZmZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGM5NzM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZmZzLnR4dApAQCAtMCwwICsxLDIxOSBAQAorT3ZlcnZpZXcgb2YgQW1pZ2EgRmlsZXN5c3RlbXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdCBhbGwgdmFyaWV0aWVzIG9mIHRoZSBBbWlnYSBmaWxlc3lzdGVtcyBhcmUgc3VwcG9ydGVkIGZvciByZWFkaW5nIGFuZAord3JpdGluZy4gVGhlIEFtaWdhIGN1cnJlbnRseSBrbm93cyBzaXggZGlmZmVyZW50IGZpbGVzeXN0ZW1zOgorCitET1NcMAkJVGhlIG9sZCBvciBvcmlnaW5hbCBmaWxlc3lzdGVtLCBub3QgcmVhbGx5IHN1aXRlZCBmb3IKKwkJaGFyZCBkaXNrcyBhbmQgbm9ybWFsbHkgbm90IHVzZWQgb24gdGhlbSwgZWl0aGVyLgorCQlTdXBwb3J0ZWQgcmVhZC93cml0ZS4KKworRE9TXDEJCVRoZSBvcmlnaW5hbCBGYXN0IEZpbGUgU3lzdGVtLiBTdXBwb3J0ZWQgcmVhZC93cml0ZS4KKworRE9TXDIJCVRoZSBvbGQgImludGVybmF0aW9uYWwiIGZpbGVzeXN0ZW0uIEludGVybmF0aW9uYWwgbWVhbnMgdGhhdAorCQlhIGJ1ZyBoYXMgYmVlbiBmaXhlZCBzbyB0aGF0IGFjY2VudGVkICgiaW50ZXJuYXRpb25hbCIpIGxldHRlcnMKKwkJaW4gZmlsZSBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgYXMgdGhleSBvdWdodCB0byBiZS4KKwkJU3VwcG9ydGVkIHJlYWQvd3JpdGUuCisKK0RPU1wzCQlUaGUgImludGVybmF0aW9uYWwiIEZhc3QgRmlsZSBTeXN0ZW0uICBTdXBwb3J0ZWQgcmVhZC93cml0ZS4KKworRE9TXDQJCVRoZSBvcmlnaW5hbCBmaWxlc3lzdGVtIHdpdGggZGlyZWN0b3J5IGNhY2hlLiBUaGUgZGlyZWN0b3J5CisJCWNhY2hlIHNwZWVkcyB1cCBkaXJlY3RvcnkgYWNjZXNzZXMgb24gZmxvcHBpZXMgY29uc2lkZXJhYmx5LAorCQlidXQgc2xvd3MgZG93biBmaWxlIGNyZWF0aW9uL2RlbGV0aW9uLiBEb2Vzbid0IG1ha2UgbXVjaAorCQlzZW5zZSBvbiBoYXJkIGRpc2tzLiBTdXBwb3J0ZWQgcmVhZCBvbmx5LgorCitET1NcNQkJVGhlIEZhc3QgRmlsZSBTeXN0ZW0gd2l0aCBkaXJlY3RvcnkgY2FjaGUuIFN1cHBvcnRlZCByZWFkIG9ubHkuCisKK0FsbCBvZiB0aGUgYWJvdmUgZmlsZXN5c3RlbXMgYWxsb3cgYmxvY2sgc2l6ZXMgZnJvbSA1MTIgdG8gMzJLIGJ5dGVzLgorU3VwcG9ydGVkIGJsb2NrIHNpemVzIGFyZTogNTEyLCAxMDI0LCAyMDQ4IGFuZCA0MDk2IGJ5dGVzLiBMYXJnZXIgYmxvY2tzCitzcGVlZCB1cCBhbG1vc3QgZXZlcnl0aGluZyBhdCB0aGUgZXhwZW5zZSBvZiB3YXN0ZWQgZGlzayBzcGFjZS4gVGhlIHNwZWVkCitnYWluIGFib3ZlIDRLIHNlZW1zIG5vdCByZWFsbHkgd29ydGggdGhlIHByaWNlLCBzbyB5b3UgZG9uJ3QgbG9zZSB0b28KK211Y2ggaGVyZSwgZWl0aGVyLgorCitUaGUgbXVGUyAobXVsdGkgdXNlciBGaWxlIFN5c3RlbSkgZXF1aXZhbGVudHMgb2YgdGhlIGFib3ZlIGZpbGUgc3lzdGVtcworYXJlIHN1cHBvcnRlZCwgdG9vLgorCitNb3VudCBvcHRpb25zIGZvciB0aGUgQUZGUworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcHJvdGVjdAkJSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgcHJvdGVjdGlvbiBiaXRzIGNhbm5vdCBiZSBhbHRlcmVkLgorCitzZXR1aWRbPXVpZF0JVGhpcyBzZXRzIHRoZSBvd25lciBvZiBhbGwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIHRoZSBmaWxlCisJCXN5c3RlbSB0byB1aWQgb3IgdGhlIHVpZCBvZiB0aGUgY3VycmVudCB1c2VyLCByZXNwZWN0aXZlbHkuCisKK3NldGdpZFs9Z2lkXQlTYW1lIGFzIGFib3ZlLCBidXQgZm9yIGdpZC4KKworbW9kZT1tb2RlCVNldHMgdGhlIG1vZGUgZmxhZ3MgdG8gdGhlIGdpdmVuIChvY3RhbCkgdmFsdWUsIHJlZ2FyZGxlc3MKKwkJb2YgdGhlIG9yaWdpbmFsIHBlcm1pc3Npb25zLiBEaXJlY3RvcmllcyB3aWxsIGdldCBhbiB4CisJCXBlcm1pc3Npb24gaWYgdGhlIGNvcnJlc3BvbmRpbmcgciBiaXQgaXMgc2V0LgorCQlUaGlzIGlzIHVzZWZ1bCBzaW5jZSBtb3N0IG9mIHRoZSBwbGFpbiBBbWlnYU9TIGZpbGVzCisJCXdpbGwgbWFwIHRvIDYwMC4KKworcmVzZXJ2ZWQ9bnVtCVNldHMgdGhlIG51bWJlciBvZiByZXNlcnZlZCBibG9ja3MgYXQgdGhlIHN0YXJ0IG9mIHRoZQorCQlwYXJ0aXRpb24gdG8gbnVtLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdGhpcyBvcHRpb24uCisJCURlZmF1bHQgaXMgMi4KKworcm9vdD1ibG9jawlTZXRzIHRoZSBibG9jayBudW1iZXIgb2YgdGhlIHJvb3QgYmxvY2suIFRoaXMgc2hvdWxkIG5ldmVyCisJCWJlIG5lY2Vzc2FyeS4KKworYnM9Ymxrc2l6ZQlTZXRzIHRoZSBibG9ja3NpemUgdG8gYmxrc2l6ZS4gVmFsaWQgYmxvY2sgc2l6ZXMgYXJlIDUxMiwKKwkJMTAyNCwgMjA0OCBhbmQgNDA5Ni4gTGlrZSB0aGUgcm9vdCBvcHRpb24sIHRoaXMgc2hvdWxkCisJCW5ldmVyIGJlIG5lY2Vzc2FyeSwgYXMgdGhlIGFmZnMgY2FuIGZpZ3VyZSBpdCBvdXQgaXRzZWxmLgorCitxdWlldAkJVGhlIGZpbGUgc3lzdGVtIHdpbGwgbm90IHJldHVybiBhbiBlcnJvciBmb3IgZGlzYWxsb3dlZAorCQltb2RlIGNoYW5nZXMuCisKK3ZlcmJvc2UJCVRoZSB2b2x1bWUgbmFtZSwgZmlsZSBzeXN0ZW0gdHlwZSBhbmQgYmxvY2sgc2l6ZSB3aWxsCisJCWJlIHdyaXR0ZW4gdG8gdGhlIHN5c2xvZyB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuCisKK211ZnMJCVRoZSBmaWxlc3lzdGVtIGlzIHJlYWxseSBhIG11RlMsIGFsc28gaXQgZG9lc24ndAorCQlpZGVudGlmeSBpdHNlbGYgYXMgb25lLiBUaGlzIG9wdGlvbiBpcyBuZWNlc3NhcnkgaWYKKwkJdGhlIGZpbGVzeXN0ZW0gd2Fzbid0IGZvcm1hdHRlZCBhcyBtdUZTLCBidXQgaXMgdXNlZAorCQlhcyBvbmUuCisKK3ByZWZpeD1wYXRoCVBhdGggd2lsbCBiZSBwcmVmaXhlZCB0byBldmVyeSBhYnNvbHV0ZSBwYXRoIG5hbWUgb2YKKwkJc3ltYm9saWMgbGlua3Mgb24gYW4gQUZGUyBwYXJ0aXRpb24uIERlZmF1bHQgPSAiLyIuCisJCShTZWUgYmVsb3cuKQorCit2b2x1bWU9bmFtZQlXaGVuIHN5bWJvbGljIGxpbmtzIHdpdGggYW4gYWJzb2x1dGUgcGF0aCBhcmUgY3JlYXRlZAorCQlvbiBhbiBBRkZTIHBhcnRpdGlvbiwgbmFtZSB3aWxsIGJlIHByZXBlbmRlZCBhcyB0aGUKKwkJdm9sdW1lIG5hbWUuIERlZmF1bHQgPSAiIiAoZW1wdHkgc3RyaW5nKS4KKwkJKFNlZSBiZWxvdy4pCisKK0hhbmRsaW5nIG9mIHRoZSBVc2Vycy9Hcm91cHMgYW5kIHByb3RlY3Rpb24gZmxhZ3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQW1pZ2EgLT4gTGludXg6CisKK1RoZSBBbWlnYSBwcm90ZWN0aW9uIGZsYWdzIFJXRURSV0VESFNQQVJXRUQgYXJlIGhhbmRsZWQgYXMgZm9sbG93czoKKworICAtIFIgbWFwcyB0byByIGZvciB1c2VyLCBncm91cCBhbmQgb3RoZXJzLiBPbiBkaXJlY3RvcmllcywgUiBpbXBsaWVzIHguCisKKyAgLSBJZiBib3RoIFcgYW5kIEQgYXJlIGFsbG93ZWQsIHcgd2lsbCBiZSBzZXQuCisKKyAgLSBFIG1hcHMgdG8geC4KKworICAtIEggYW5kIFAgYXJlIGFsd2F5cyByZXRhaW5lZCBhbmQgaWdub3JlZCB1bmRlciBMaW51eC4KKworICAtIEEgaXMgYWx3YXlzIHJlc2V0IHdoZW4gYSBmaWxlIGlzIHdyaXR0ZW4gdG8uCisKK1VzZXIgaWQgYW5kIGdyb3VwIGlkIHdpbGwgYmUgdXNlZCB1bmxlc3Mgc2V0W2d1XWlkIGFyZSBnaXZlbiBhcyBtb3VudAorb3B0aW9ucy4gU2luY2UgbW9zdCBvZiB0aGUgQW1pZ2EgZmlsZSBzeXN0ZW1zIGFyZSBzaW5nbGUgdXNlciBzeXN0ZW1zCit0aGV5IHdpbGwgYmUgb3duZWQgYnkgcm9vdC4gVGhlIHJvb3QgZGlyZWN0b3J5ICh0aGUgbW91bnQgcG9pbnQpIG9mIHRoZQorQW1pZ2EgZmlsZXN5c3RlbSB3aWxsIGJlIG93bmVkIGJ5IHRoZSB1c2VyIHdobyBhY3R1YWxseSBtb3VudHMgdGhlCitmaWxlc3lzdGVtICh0aGUgcm9vdCBkaXJlY3RvcnkgZG9lc24ndCBoYXZlIHVpZC9naWQgZmllbGRzKS4KKworTGludXggLT4gQW1pZ2E6CisKK1RoZSBMaW51eCByd3hyd3hyd3ggZmlsZSBtb2RlIGlzIGhhbmRsZWQgYXMgZm9sbG93czoKKworICAtIHIgcGVybWlzc2lvbiB3aWxsIHNldCBSIGZvciB1c2VyLCBncm91cCBhbmQgb3RoZXJzLgorCisgIC0gdyBwZXJtaXNzaW9uIHdpbGwgc2V0IFcgYW5kIEQgZm9yIHVzZXIsIGdyb3VwIGFuZCBvdGhlcnMuCisKKyAgLSB4IHBlcm1pc3Npb24gb2YgdGhlIHVzZXIgd2lsbCBzZXQgRSBmb3IgcGxhaW4gZmlsZXMuCisKKyAgLSBBbGwgb3RoZXIgZmxhZ3MgKHN1aWQsIHNnaWQsIC4uLikgYXJlIGlnbm9yZWQgYW5kIHdpbGwKKyAgICBub3QgYmUgcmV0YWluZWQuCisgICAgCitOZXdseSBjcmVhdGVkIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aWxsIGdldCB0aGUgdXNlciBhbmQgZ3JvdXAgSUQKK29mIHRoZSBjdXJyZW50IHVzZXIgYW5kIGEgbW9kZSBhY2NvcmRpbmcgdG8gdGhlIHVtYXNrLgorCitTeW1ib2xpYyBsaW5rcworPT09PT09PT09PT09PT0KKworQWx0aG91Z2ggdGhlIEFtaWdhIGFuZCBMaW51eCBmaWxlIHN5c3RlbXMgcmVzZW1ibGUgZWFjaCBvdGhlciwgdGhlcmUKK2FyZSBzb21lLCBub3QgYWx3YXlzIHN1YnRsZSwgZGlmZmVyZW5jZXMuIE9uZSBvZiB0aGVtIGJlY29tZXMgYXBwYXJlbnQKK3dpdGggc3ltYm9saWMgbGlua3MuIFdoaWxlIExpbnV4IGhhcyBhIGZpbGUgc3lzdGVtIHdpdGggZXhhY3RseSBvbmUKK3Jvb3QgZGlyZWN0b3J5LCB0aGUgQW1pZ2EgaGFzIGEgc2VwYXJhdGUgcm9vdCBkaXJlY3RvcnkgZm9yIGVhY2gKK2ZpbGUgc3lzdGVtIChmb3IgZXhhbXBsZSwgcGFydGl0aW9uLCBmbG9wcHkgZGlzaywgLi4uKS4gV2l0aCB0aGUgQW1pZ2EsCit0aGVzZSBlbnRpdGllcyBhcmUgY2FsbGVkICJ2b2x1bWVzIi4gVGhleSBoYXZlIHN5bWJvbGljIG5hbWVzIHdoaWNoCitjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlbS4gVGh1cywgc3ltYm9saWMgbGlua3MgY2FuIHBvaW50IHRvIGEKK2RpZmZlcmVudCB2b2x1bWUuIEFGRlMgdHVybnMgdGhlIHZvbHVtZSBuYW1lIGludG8gYSBkaXJlY3RvcnkgbmFtZQorYW5kIHByZXBlbmRzIHRoZSBwcmVmaXggcGF0aCAoc2VlIHByZWZpeCBvcHRpb24pIHRvIGl0LgorCitFeGFtcGxlOgorWW91IG1vdW50IGFsbCB5b3VyIEFtaWdhIHBhcnRpdGlvbnMgdW5kZXIgL2FtaWdhLzx2b2x1bWU+ICh3aGVyZQorPHZvbHVtZT4gaXMgdGhlIG5hbWUgb2YgdGhlIHZvbHVtZSksIGFuZCB5b3UgZ2l2ZSB0aGUgb3B0aW9uCisicHJlZml4PS9hbWlnYS8iIHdoZW4gbW91bnRpbmcgYWxsIHlvdXIgQUZGUyBwYXJ0aXRpb25zLiAoVGhleQorbWlnaHQgYmUgIlVzZXIiLCAiV0IiIGFuZCAiR3JhcGhpY3MiLCB0aGUgbW91bnQgcG9pbnRzIC9hbWlnYS9Vc2VyLAorL2FtaWdhL1dCIGFuZCAvYW1pZ2EvR3JhcGhpY3MpLiBBIHN5bWJvbGljIGxpbmsgcmVmZXJyaW5nIHRvCisiVXNlcjpzYy9pbmNsdWRlL2Rvcy9kb3MuaCIgd2lsbCBiZSBmb2xsb3dlZCB0bworIi9hbWlnYS9Vc2VyL3NjL2luY2x1ZGUvZG9zL2Rvcy5oIi4KKworRXhhbXBsZXMKKz09PT09PT09CisKK0NvbW1hbmQgbGluZToKKyAgICBtb3VudCAgQXJjaGl2ZS9BbWlnYS9Xb3JrYmVuY2gzLjEuYWRmIC9tbnQgLXQgYWZmcyAtbyBsb29wLHZlcmJvc2UKKyAgICBtb3VudCAgL2Rldi9zZGEzIC9BbWlnYSAtdCBhZmZzCisKKy9ldGMvZnN0YWIgZW50cnk6CisgICAgL2Rldi9zZGI1CS9hbWlnYS9Xb3JrYmVuY2ggICAgYWZmcyAgICBub2F1dG8sdXNlcixleGVjLHZlcmJvc2UgMCAwCisKK0lNUE9SVEFOVCBOT1RFCis9PT09PT09PT09PT09PQorCitJZiB5b3UgYm9vdCBXaW5kb3dzIDk1IChkb24ndCBrbm93IGFib3V0IDMueCwgOTggYW5kIE5UKSB3aGlsZSB5b3UKK2hhdmUgYW4gQW1pZ2EgaGFyZGRpc2sgY29ubmVjdGVkIHRvIHlvdXIgUEMsIGl0IHdpbGwgb3ZlcndyaXRlCit0aGUgYnl0ZXMgMHgwMGRjLi4weDAwZGYgb2YgYmxvY2sgMCB3aXRoIGdhcmJhZ2UsIHRodXMgaW52YWxpZGF0aW5nCit0aGUgUmlnaWQgRGlzayBCbG9jay4gU2hlZXIgbHVjayBoYXMgaXQgdGhhdCB0aGlzIGlzIGFuIHVudXNlZAorYXJlYSBvZiB0aGUgUkRCLCBzbyBvbmx5IHRoZSBjaGVja3N1bSBkb2Vzbid0IG1hdGNoIGFueW1vcmUuCitMaW51eCB3aWxsIGlnbm9yZSB0aGlzIGdhcmJhZ2UgYW5kIHJlY29nbml6ZSB0aGUgUkRCIGFueXdheSwgYnV0CitiZWZvcmUgeW91IGNvbm5lY3QgdGhhdCBkcml2ZSB0byB5b3VyIEFtaWdhIGFnYWluLCB5b3UgbXVzdAorcmVzdG9yZSBvciByZXBhaXIgeW91ciBSREIuIFNvIHBsZWFzZSBkbyBtYWtlIGEgYmFja3VwIGNvcHkgb2YgaXQKK2JlZm9yZSBib290aW5nIFdpbmRvd3MhCisKK0lmIHRoZSBkYW1hZ2UgaXMgYWxyZWFkeSBkb25lLCB0aGUgZm9sbG93aW5nIHNob3VsZCBmaXggdGhlIFJEQgorKHdoZXJlIDxkaXNrPiBpcyB0aGUgZGV2aWNlIG5hbWUpLgorRE8gQVQgWU9VUiBPV04gUklTSzoKKworICBkZCBpZj0vZGV2LzxkaXNrPiBvZj1yZGIudG1wIGNvdW50PTEKKyAgY3AgcmRiLnRtcCByZGIuZml4ZWQKKyAgZGQgaWY9L2Rldi96ZXJvIG9mPXJkYi5maXhlZCBicz0xIHNlZWs9MjIwIGNvdW50PTQKKyAgZGQgaWY9cmRiLmZpeGVkIG9mPS9kZXYvPGRpc2s+CisKK0J1Z3MsIFJlc3RyaWN0aW9ucywgQ2F2ZWF0cworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1F1aXRlIGEgZmV3IHRoaW5ncyBtYXkgbm90IHdvcmsgYXMgYWR2ZXJ0aXNlZC4gTm90IGV2ZXJ5dGhpbmcgaXMKK3Rlc3RlZCwgdGhvdWdoIHNldmVyYWwgaHVuZHJlZCBNQiBoYXZlIGJlZW4gcmVhZCBhbmQgd3JpdHRlbiB1c2luZwordGhpcyBmcy4gRm9yIGEgbW9zdCB1cC10by1kYXRlIGxpc3Qgb2YgYnVncyBwbGVhc2UgY29uc3VsdAorZnMvYWZmcy9DaGFuZ2VzLgorCitGaWxlbmFtZXMgYXJlIHRydW5jYXRlZCB0byAzMCBjaGFyYWN0ZXJzIHdpdGhvdXQgd2FybmluZyAodGhpcworY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgY29tcGlsZS10aW1lIG9wdGlvbiBBRkZTX05PX1RSVU5DQVRFCitpbiBpbmNsdWRlL2xpbnV4L2FtaWdhZmZzLmgpLgorCitDYXNlIGlzIGlnbm9yZWQgYnkgdGhlIGFmZnMgaW4gZmlsZW5hbWUgbWF0Y2hpbmcsIGJ1dCBMaW51eCBzaGVsbHMKK2RvIGNhcmUgYWJvdXQgdGhlIGNhc2UuIEV4YW1wbGUgKHdpdGggL3diIGJlaW5nIGFuIGFmZnMgbW91bnRlZCBmcyk6CisgICAgcm0gL3diL1dST05HQ0FTRQord2lsbCByZW1vdmUgL21udC93cm9uZ2Nhc2UsIGJ1dAorICAgIHJtIC93Yi9XUioKK3dpbGwgbm90IHNpbmNlIHRoZSBuYW1lcyBhcmUgbWF0Y2hlZCBieSB0aGUgc2hlbGwuCisKK1RoZSBibG9jayBhbGxvY2F0aW9uIGlzIGRlc2lnbmVkIGZvciBoYXJkIGRpc2sgcGFydGl0aW9ucy4gSWYgbW9yZQordGhhbiAxIHByb2Nlc3Mgd3JpdGVzIHRvIGEgKHNtYWxsKSBkaXNrZXR0ZSwgdGhlIGJsb2NrcyBhcmUgYWxsb2NhdGVkCitpbiBhbiB1Z2x5IHdheSAoYnV0IHRoZSByZWFsIEFGRlMgZG9lc24ndCBkbyBtdWNoIGJldHRlcikuIFRoaXMKK2lzIGFsc28gdHJ1ZSB3aGVuIHNwYWNlIGdldHMgdGlnaHQuCisKK1lvdSBjYW5ub3QgZXhlY3V0ZSBwcm9ncmFtcyBvbiBhbiBPRlMgKE9sZCBGaWxlIFN5c3RlbSksIHNpbmNlIHRoZQorcHJvZ3JhbSBmaWxlcyBjYW5ub3QgYmUgbWVtb3J5IG1hcHBlZCBkdWUgdG8gdGhlIDQ4OCBieXRlIGJsb2Nrcy4KK0ZvciB0aGUgc2FtZSByZWFzb24geW91IGNhbm5vdCBtb3VudCBhbiBpbWFnZSBvbiBzdWNoIGEgZmlsZXN5c3RlbQordmlhIHRoZSBsb29wYmFjayBkZXZpY2UuCisKK1RoZSBiaXRtYXAgdmFsaWQgZmxhZyBpbiB0aGUgcm9vdCBibG9jayBtYXkgbm90IGJlIGFjY3VyYXRlIHdoZW4gdGhlCitzeXN0ZW0gY3Jhc2hlcyB3aGlsZSBhbiBhZmZzIHBhcnRpdGlvbiBpcyBtb3VudGVkLiBUaGVyZSdzIGN1cnJlbnRseQorbm8gd2F5IHRvIGZpeCBhIGdhcmJsZWQgZmlsZXN5c3RlbSB3aXRob3V0IGFuIEFtaWdhIChkaXNrIHZhbGlkYXRvcikKK29yIG1hbnVhbGx5ICh3aG8gd291bGQgZG8gdGhpcz8pLiBNYXliZSBsYXRlci4KKworSWYgeW91IG1vdW50IGFmZnMgcGFydGl0aW9ucyBvbiBzeXN0ZW0gc3RhcnR1cCwgeW91IG1heSB3YW50IHRvIHRlbGwKK2ZzY2sgdGhhdCB0aGUgZnMgc2hvdWxkIG5vdCBiZSBjaGVja2VkIChwbGFjZSBhICcwJyBpbiB0aGUgc2l4dGggZmllbGQKK29mIC9ldGMvZnN0YWIpLgorCitJdCdzIG5vdCBwb3NzaWJsZSB0byByZWFkIGZsb3BweSBkaXNrcyB3aXRoIGEgbm9ybWFsIFBDIG9yIHdvcmtzdGF0aW9uCitkdWUgdG8gYW4gaW5jb21wYXRpYmlsaXR5IHdpdGggdGhlIEFtaWdhIGZsb3BweSBjb250cm9sbGVyLgorCitJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gYW4gQW1pZ2EgRW11bGF0b3IgZm9yIExpbnV4LCBsb29rIGF0CisKK2h0dHA6Ly93d3ctdXNlcnMuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZS9+Y3J1eC91YWUuaHRtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDIzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Fmcy50eHQKQEAgLTAsMCArMSwxNTUgQEAKKwkJCSAgICAga0FGUzogQUZTIEZJTEVTWVNURU0KKwkJCSAgICAgPT09PT09PT09PT09PT09PT09PT0KKworQUJPVVQKKz09PT09CisKK1RoaXMgZmlsZXN5c3RlbSBwcm92aWRlcyBhIGZhaXJseSBzaW1wbGUgQUZTIGZpbGVzeXN0ZW0gZHJpdmVyLiBJdCBpcyB1bmRlcgorZGV2ZWxvcG1lbnQgYW5kIG9ubHkgcHJvdmlkZXMgdmVyeSBiYXNpYyBmYWNpbGl0aWVzLiBJdCBkb2VzIG5vdCB5ZXQgc3VwcG9ydAordGhlIGZvbGxvd2luZyBBRlMgZmVhdHVyZXM6CisKKwkoKikgV3JpdGUgc3VwcG9ydC4KKwkoKikgQ29tbXVuaWNhdGlvbnMgc2VjdXJpdHkuCisJKCopIExvY2FsIGNhY2hpbmcuCisJKCopIHBpb2N0bCgpIHN5c3RlbSBjYWxsLgorCSgqKSBBdXRvbWF0aWMgbW91bnRpbmcgb2YgZW1iZWRkZWQgbW91bnRwb2ludHMuCisKKworVVNBR0UKKz09PT09CisKK1doZW4gaW5zZXJ0aW5nIHRoZSBkcml2ZXIgbW9kdWxlcyB0aGUgcm9vdCBjZWxsIG11c3QgYmUgc3BlY2lmaWVkIGFsb25nIHdpdGggYQorbGlzdCBvZiB2b2x1bWUgbG9jYXRpb24gc2VydmVyIElQIGFkZHJlc3NlczoKKworCWluc21vZCByeHJwYy5vCisJaW5zbW9kIGthZnMubyByb290Y2VsbD1jYW1icmlkZ2UucmVkaGF0LmNvbToxNzIuMTYuMTguNzM6MTcyLjE2LjE4LjkxCisKK1RoZSBmaXJzdCBtb2R1bGUgaXMgYSBkcml2ZXIgZm9yIHRoZSBSeFJQQyByZW1vdGUgb3BlcmF0aW9uIHByb3RvY29sLCBhbmQgdGhlCitzZWNvbmQgaXMgdGhlIGFjdHVhbCBmaWxlc3lzdGVtIGRyaXZlciBmb3IgdGhlIEFGUyBmaWxlc3lzdGVtLgorCitPbmNlIHRoZSBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLCBtb3JlIG1vZHVsZXMgY2FuIGJlIGFkZGVkIGJ5IHRoZSBmb2xsb3dpbmcKK3Byb2NlZHVyZToKKworCWVjaG8gYWRkIGdyYW5kLmNlbnRyYWwub3JnIDE4LjcuMTQuODg6MTI4LjIuMTkxLjIyNCA+L3Byb2MvZnMvYWZzL2NlbGxzCisKK1doZXJlIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSAiYWRkIiBjb21tYW5kIGFyZSB0aGUgbmFtZSBvZiBhIGNlbGwgYW5kIGEgbGlzdCBvZgordm9sdW1lIGxvY2F0aW9uIHNlcnZlcnMgd2l0aGluIHRoYXQgY2VsbC4KKworRmlsZXN5c3RlbXMgY2FuIGJlIG1vdW50ZWQgYW55d2hlcmUgYnkgY29tbWFuZHMgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgorCisJbW91bnQgLXQgYWZzICIlY2FtYnJpZGdlLnJlZGhhdC5jb206cm9vdC5hZnMuIiAvYWZzCisJbW91bnQgLXQgYWZzICIjY2FtYnJpZGdlLnJlZGhhdC5jb206cm9vdC5jZWxsLiIgL2Fmcy9jYW1icmlkZ2UKKwltb3VudCAtdCBhZnMgIiNyb290LmFmcy4iIC9hZnMKKwltb3VudCAtdCBhZnMgIiNyb290LmNlbGwuIiAvYWZzL2NhbWJyaWRnZQorCisgIE5COiBXaGVuIHVzaW5nIHRoaXMgb24gTGludXggMi40LCB0aGUgbW91bnQgY29tbWFuZCBoYXMgdG8gYmUgZGlmZmVyZW50LAorICAgICAgc2luY2UgdGhlIGZpbGVzeXN0ZW0gZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGUgZGV2aWNlIG5hbWUgYXJndW1lbnQ6CisKKwltb3VudCAtdCBhZnMgbm9uZSAvYWZzIC1vdm9sPSIjcm9vdC5hZnMuIgorCitXaGVyZSB0aGUgaW5pdGlhbCBjaGFyYWN0ZXIgaXMgZWl0aGVyIGEgaGFzaCBvciBhIHBlcmNlbnQgc3ltYm9sIGRlcGVuZGluZyBvbgord2hldGhlciB5b3UgZGVmaW5pdGVseSB3YW50IGEgUi9XIHZvbHVtZSAoaGFzaCkgb3Igd2hldGhlciB5b3UnZCBwcmVmZXIgYSBSL08KK3ZvbHVtZSwgYnV0IGFyZSB3aWxsaW5nIHRvIHVzZSBhIFIvVyB2b2x1bWUgaW5zdGVhZCAocGVyY2VudCkuCisKK1RoZSBuYW1lIG9mIHRoZSB2b2x1bWUgY2FuIGJlIHN1ZmZpeGVzIHdpdGggIi5iYWNrdXAiIG9yICIucmVhZG9ubHkiIHRvCitzcGVjaWZ5IGNvbm5lY3Rpb24gdG8gb25seSB2b2x1bWVzIG9mIHRob3NlIHR5cGVzLgorCitUaGUgbmFtZSBvZiB0aGUgY2VsbCBpcyBvcHRpb25hbCwgYW5kIGlmIG5vdCBnaXZlbiBkdXJpbmcgYSBtb3VudCwgdGhlbiB0aGUKK25hbWVkIHZvbHVtZSB3aWxsIGJlIGxvb2tlZCB1cCBpbiB0aGUgY2VsbCBzcGVjaWZpZWQgZHVyaW5nIGluc21vZC4KKworQWRkaXRpb25hbCBjZWxscyBjYW4gYmUgYWRkZWQgdGhyb3VnaCAvcHJvYyAoc2VlIGxhdGVyIHNlY3Rpb24pLgorCisKK01PVU5UUE9JTlRTCis9PT09PT09PT09PQorCitBRlMgaGFzIGEgY29uY2VwdCBvZiBtb3VudHBvaW50cy4gVGhlc2UgYXJlIHNwZWNpYWxseSBmb3JtYXR0ZWQgc3ltYm9saWMgbGlua3MKKyhvZiB0aGUgc2FtZSBmb3JtIGFzIHRoZSAiZGV2aWNlIG5hbWUiIHBhc3NlZCB0byBtb3VudCkuIGtBRlMgcHJlc2VudHMgdGhlc2UKK3RvIHRoZSB1c2VyIGFzIGRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBzcGVjaWFsIHByb3BlcnRpZXM6CisKKyAgKCopIFRoZXkgY2Fubm90IGJlIGxpc3RlZC4gUnVubmluZyBhIHByb2dyYW0gbGlrZSAibHMiIG9uIHRoZW0gd2lsbCBpbmN1ciBhbgorICAgICAgRVJFTU9URSBlcnJvciAoT2JqZWN0IGlzIHJlbW90ZSkuCisKKyAgKCopIE90aGVyIG9iamVjdHMgY2FuJ3QgYmUgbG9va2VkIHVwIGluc2lkZSBvZiB0aGVtLiBUaGlzIGFsc28gaW5jdXJzIGFuCisgICAgICBFUkVNT1RFIGVycm9yLgorCisgICgqKSBUaGV5IGNhbiBiZSBxdWVyaWVkIHdpdGggdGhlIHJlYWRsaW5rKCkgc3lzdGVtIGNhbGwsIHdoaWNoIHdpbGwgcmV0dXJuCisgICAgICB0aGUgbmFtZSBvZiB0aGUgbW91bnRwb2ludCB0byB3aGljaCB0aGV5IHBvaW50LiBUaGUgInJlYWRsaW5rIiBwcm9ncmFtCisgICAgICB3aWxsIGFsc28gd29yay4KKworICAoKikgVGhleSBjYW4gYmUgbW91bnRlZCBvbiAod2hpY2ggc3ltYm9saWMgbGlua3MgY2FuJ3QpLgorCisKK1BST0MgRklMRVNZU1RFTQorPT09PT09PT09PT09PT09CisKK1RoZSByeHJwYyBtb2R1bGUgY3JlYXRlcyBhIG51bWJlciBvZiBmaWxlcyBpbiB2YXJpb3VzIHBsYWNlcyBpbiB0aGUgL3Byb2MKK2ZpbGVzeXN0ZW06CisKKyAgKCopIEZpcnN0bHksIHNvbWUgaW5mb3JtYXRpb24gZmlsZXMgYXJlIG1hZGUgYXZhaWxhYmxlIGluIGEgZGlyZWN0b3J5IGNhbGxlZAorICAgICAgIi9wcm9jL25ldC9yeHJwYy8iLiBUaGVzZSBsaXN0IHRoZSBleHRhbnQgdHJhbnNwb3J0IGVuZHBvaW50LCBwZWVyLAorICAgICAgY29ubmVjdGlvbiBhbmQgY2FsbCByZWNvcmRzLgorCisgICgqKSBTZWNvbmRseSwgc29tZSBjb250cm9sIGZpbGVzIGFyZSBtYWRlIGF2YWlsYWJsZSBpbiBhIGRpcmVjdG9yeSBjYWxsZWQKKyAgICAgICIvcHJvYy9zeXMvcnhycGMvIi4gQ3VycmVudGx5LCBhbGwgdGhlc2UgZmlsZXMgY2FuIGJlIHVzZWQgZm9yIGlzIHRvCisgICAgICB0dXJuIG9uIHZhcmlvdXMgbGV2ZWxzIG9mIHRyYWNpbmcuCisKK1RoZSBBRlMgbW9kdWxlcyBjcmVhdGVzIGEgIi9wcm9jL2ZzL2Fmcy8iIGRpcmVjdG9yeSBhbmQgcG9wdWxhdGVzIGl0OgorCisgICgqKSBBICJjZWxscyIgZmlsZSB0aGF0IGxpc3RzIGNlbGxzIGN1cnJlbnRseSBrbm93biB0byB0aGUgYWZzIG1vZHVsZS4KKworICAoKikgQSBkaXJlY3RvcnkgcGVyIGNlbGwgdGhhdCBjb250YWlucyBmaWxlcyB0aGF0IGxpc3Qgdm9sdW1lIGxvY2F0aW9uCisgICAgICBzZXJ2ZXJzLCB2b2x1bWVzLCBhbmQgYWN0aXZlIHNlcnZlcnMga25vd24gd2l0aGluIHRoYXQgY2VsbC4KKworCitUSEUgQ0VMTCBEQVRBQkFTRQorPT09PT09PT09PT09PT09PT0KKworVGhlIGZpbGVzeXN0ZW0gbWFpbnRhaW5zIGFuIGludGVybmFsIGRhdGFiYXNlIG9mIGFsbCB0aGUgY2VsbHMgaXQga25vd3MgYW5kCit0aGUgSVAgYWRkcmVzc2VzIG9mIHRoZSB2b2x1bWUgbG9jYXRpb24gc2VydmVycyBmb3IgdGhvc2UgY2VsbHMuIFRoZSBjZWxsIHRvCit3aGljaCB0aGUgY29tcHV0ZXIgYmVsb25ncyBpcyBhZGRlZCB0byB0aGUgZGF0YWJhc2Ugd2hlbiBpbnNtb2QgaXMgcGVyZm9ybWVkCitieSB0aGUgInJvb3RjZWxsPSIgYXJndW1lbnQuCisKK0Z1cnRoZXIgY2VsbHMgY2FuIGJlIGFkZGVkIGJ5IGNvbW1hbmRzIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKKworCWVjaG8gYWRkIENFTExOQU1FIFZMQUREUls6VkxBRERSXVs6VkxBRERSXS4uLiA+L3Byb2MvZnMvYWZzL2NlbGxzCisJZWNobyBhZGQgZ3JhbmQuY2VudHJhbC5vcmcgMTguNy4xNC44ODoxMjguMi4xOTEuMjI0ID4vcHJvYy9mcy9hZnMvY2VsbHMKKworTm8gb3RoZXIgY2VsbCBkYXRhYmFzZSBvcGVyYXRpb25zIGFyZSBhdmFpbGFibGUgYXQgdGhpcyB0aW1lLgorCisKK0VYQU1QTEVTCis9PT09PT09PQorCitIZXJlJ3Mgd2hhdCBJIHVzZSB0byB0ZXN0IHRoaXMuIFNvbWUgb2YgdGhlIG5hbWVzIGFuZCBJUCBhZGRyZXNzZXMgYXJlIGxvY2FsCit0byBteSBpbnRlcm5hbCBETlMuIE15ICJyb290LmFmcyIgcGFydGl0aW9uIGhhcyBhIG1vdW50IHBvaW50IHdpdGhpbiBpdCBmb3IKK3NvbWUgcHVibGljIHZvbHVtZXMgdm9sdW1lcy4KKworaW5zbW9kIC1TIC90bXAvcnhycGMubyAKK2luc21vZCAtUyAvdG1wL2thZnMubyByb290Y2VsbD1jYW1icmlkZ2UucmVkaGF0LmNvbToxNzIuMTYuMTguNzM6MTcyLjE2LjE4LjkxCisKK21vdW50IC10IGFmcyBcJXJvb3QuYWZzLiAvYWZzCittb3VudCAtdCBhZnMgXCVjYW1icmlkZ2UucmVkaGF0LmNvbTpyb290LmNlbGwuIC9hZnMvY2FtYnJpZGdlLnJlZGhhdC5jb20vCisKK2VjaG8gYWRkIGdyYW5kLmNlbnRyYWwub3JnIDE4LjcuMTQuODg6MTI4LjIuMTkxLjIyNCA+IC9wcm9jL2ZzL2Fmcy9jZWxscyAKK21vdW50IC10IGFmcyAiI2dyYW5kLmNlbnRyYWwub3JnOnJvb3QuY2VsbC4iIC9hZnMvZ3JhbmQuY2VudHJhbC5vcmcvCittb3VudCAtdCBhZnMgIiNncmFuZC5jZW50cmFsLm9yZzpyb290LmFyY2hpdmUuIiAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL2FyY2hpdmUKK21vdW50IC10IGFmcyAiI2dyYW5kLmNlbnRyYWwub3JnOnJvb3QuY29udHJpYi4iIC9hZnMvZ3JhbmQuY2VudHJhbC5vcmcvY29udHJpYgorbW91bnQgLXQgYWZzICIjZ3JhbmQuY2VudHJhbC5vcmc6cm9vdC5kb2MuIiAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL2RvYworbW91bnQgLXQgYWZzICIjZ3JhbmQuY2VudHJhbC5vcmc6cm9vdC5wcm9qZWN0LiIgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy9wcm9qZWN0Cittb3VudCAtdCBhZnMgIiNncmFuZC5jZW50cmFsLm9yZzpyb290LnNlcnZpY2UuIiAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL3NlcnZpY2UKK21vdW50IC10IGFmcyAiI2dyYW5kLmNlbnRyYWwub3JnOnJvb3Quc29mdHdhcmUuIiAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL3NvZnR3YXJlCittb3VudCAtdCBhZnMgIiNncmFuZC5jZW50cmFsLm9yZzpyb290LnVzZXIuIiAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL3VzZXIKKwordW1vdW50IC9hZnMvZ3JhbmQuY2VudHJhbC5vcmcvdXNlcgordW1vdW50IC9hZnMvZ3JhbmQuY2VudHJhbC5vcmcvc29mdHdhcmUKK3Vtb3VudCAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL3NlcnZpY2UKK3Vtb3VudCAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL3Byb2plY3QKK3Vtb3VudCAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL2RvYwordW1vdW50IC9hZnMvZ3JhbmQuY2VudHJhbC5vcmcvY29udHJpYgordW1vdW50IC9hZnMvZ3JhbmQuY2VudHJhbC5vcmcvYXJjaGl2ZQordW1vdW50IC9hZnMvZ3JhbmQuY2VudHJhbC5vcmcKK3Vtb3VudCAvYWZzL2NhbWJyaWRnZS5yZWRoYXQuY29tCit1bW91bnQgL2Fmcworcm1tb2Qga2Fmcworcm1tb2QgcnhycGMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b21vdW50LXN1cHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hdXRvbW91bnQtc3VwcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjNjVhMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b21vdW50LXN1cHBvcnQudHh0CkBAIC0wLDAgKzEsMTE4IEBACitTdXBwb3J0IGlzIGF2YWlsYWJsZSBmb3IgZmlsZXN5c3RlbXMgdGhhdCB3aXNoIHRvIGRvIGF1dG9tb3VudGluZyBzdXBwb3J0IChzdWNoCithcyBrQUZTIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiBmcy9hZnMvKS4gVGhpcyBmYWNpbGl0eSBpbmNsdWRlcyBhbGxvd2luZworaW4ta2VybmVsIG1vdW50cyB0byBiZSBwZXJmb3JtZWQgYW5kIG1vdW50cG9pbnQgZGVncmFkYXRpb24gdG8gYmUKK3JlcXVlc3RlZC4gVGhlIGxhdHRlciBjYW4gYWxzbyBiZSByZXF1ZXN0ZWQgYnkgdXNlcnNwYWNlLgorCisKKz09PT09PT09PT09PT09PT09PT09PT0KK0lOLUtFUk5FTCBBVVRPTU9VTlRJTkcKKz09PT09PT09PT09PT09PT09PT09PT0KKworQSBmaWxlc3lzdGVtIGNhbiBub3cgbW91bnQgYW5vdGhlciBmaWxlc3lzdGVtIG9uIG9uZSBvZiBpdHMgZGlyZWN0b3JpZXMgYnkgdGhlCitmb2xsb3dpbmcgcHJvY2VkdXJlOgorCisgKDEpIEdpdmUgdGhlIGRpcmVjdG9yeSBhIGZvbGxvd19saW5rKCkgb3BlcmF0aW9uLgorCisgICAgIFdoZW4gdGhlIGRpcmVjdG9yeSBpcyBhY2Nlc3NlZCwgdGhlIGZvbGxvd19saW5rIG9wIHdpbGwgYmUgY2FsbGVkLCBhbmQKKyAgICAgaXQgd2lsbCBiZSBwcm92aWRlZCB3aXRoIHRoZSBsb2NhdGlvbiBvZiB0aGUgbW91bnRwb2ludCBpbiB0aGUgbmFtZWlkYXRhCisgICAgIHN0cnVjdHVyZSAodmZzbW91bnQgYW5kIGRlbnRyeSkuCisKKyAoMikgSGF2ZSB0aGUgZm9sbG93X2xpbmsoKSBvcCBkbyB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisgICAgIChhKSBDYWxsIGRvX2tlcm5fbW91bnQoKSB0byBjYWxsIHRoZSBhcHByb3ByaWF0ZSBmaWxlc3lzdGVtIHRvIHNldCB1cCBhCisgICAgICAgICBzdXBlcmJsb2NrIGFuZCBnYWluIGEgdmZzbW91bnQgc3RydWN0dXJlIHJlcHJlc2VudGluZyBpdC4KKworICAgICAoYikgQ29weSB0aGUgbmFtZWlkYXRhIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IGFuZCBzdWJzdGl0dXRlIHRoZSBkZW50cnkKKwkgYXJndW1lbnQgaW50byBpdCB0aGUgY29weS4KKworICAgICAoYykgQ2FsbCBkb19hZGRfbW91bnQoKSB0byBpbnN0YWxsIHRoZSBuZXcgdmZzbW91bnQgaW50byB0aGUgbmFtZXNwYWNlJ3MKKwkgbW91bnRwb2ludCB0cmVlLCB0aHVzIG1ha2luZyBpdCBhY2Nlc3NpYmxlIHRvIHVzZXJzcGFjZS4gVXNlIHRoZQorCSBuYW1laWRhdGEgc2V0IHVwIGluIChiKSBhcyB0aGUgZGVzdGluYXRpb24uCisKKwkgSWYgdGhlIG1vdW50cG9pbnQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4cGlyZWQsIHRoZW4gZG9fYWRkX21vdW50KCkKKwkgc2hvdWxkIGFsc28gYmUgZ2l2ZW4gdGhlIGxvY2F0aW9uIG9mIGFuIGV4cGlyYXRpb24gbGlzdCAoc2VlIGZ1cnRoZXIKKwkgZG93bikuCisKKyAgICAgKGQpIFJlbGVhc2UgdGhlIHBhdGggaW4gdGhlIG5hbWVpZGF0YSBhcmd1bWVudCBhbmQgc3Vic3RpdHV0ZSBpbiB0aGUgbmV3CisJIHZmc21vdW50IGFuZCBpdHMgcm9vdCBkZW50cnkuIFRoZSByZWYgY291bnRzIG9uIHRoZXNlIHdpbGwgbmVlZAorCSBpbmNyZW1lbnRpbmcuCisKK1RoZW4gZnJvbSB1c2Vyc3BhY2UsIHlvdSBjYW4ganVzdCBkbyBzb21ldGhpbmcgbGlrZToKKworCVtyb290QGFuZHJvbWVkYSByb290XSMgbW91bnQgLXQgYWZzIFwjcm9vdC5hZnMuIC9hZnMKKwlbcm9vdEBhbmRyb21lZGEgcm9vdF0jIGxzIC9hZnMKKwlhc2QgIGNhbWJyaWRnZSAgY2FtYnJpZGdlLnJlZGhhdC5jb20gIGdyYW5kLmNlbnRyYWwub3JnCisJW3Jvb3RAYW5kcm9tZWRhIHJvb3RdIyBscyAvYWZzL2NhbWJyaWRnZQorCWFmc2RvYworCVtyb290QGFuZHJvbWVkYSByb290XSMgbHMgL2Fmcy9jYW1icmlkZ2UvYWZzZG9jLworCUNoYW5nZUxvZyAgaHRtbCAgTElDRU5TRSAgcGRmICBSRUxOT1RFUy0xLjIuMgorCitBbmQgdGhlbiBpZiB5b3UgbG9vayBpbiB0aGUgbW91bnRwb2ludCBjYXRhbG9ndWUsIHlvdSdsbCBzZWUgc29tZXRoaW5nIGxpa2U6CisKKwlbcm9vdEBhbmRyb21lZGEgcm9vdF0jIGNhdCAvcHJvYy9tb3VudHMKKwkuLi4KKwkjcm9vdC5hZnMuIC9hZnMgYWZzIHJ3IDAgMAorCSNyb290LmNlbGwuIC9hZnMvY2FtYnJpZGdlLnJlZGhhdC5jb20gYWZzIHJ3IDAgMAorCSNhZnNkb2MuIC9hZnMvY2FtYnJpZGdlLnJlZGhhdC5jb20vYWZzZG9jIGFmcyBydyAwIDAKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0FVVE9NQVRJQyBNT1VOVFBPSU5UIEVYUElSWQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0F1dG9tYXRpYyBleHBpcmF0aW9uIG9mIG1vdW50cG9pbnRzIGlzIGVhc3ksIHByb3ZpZGVkIHlvdSd2ZSBtb3VudGVkIHRoZQorbW91bnRwb2ludCB0byBiZSBleHBpcmVkIGluIHRoZSBhdXRvbW91bnRpbmcgcHJvY2VkdXJlIG91dGxpbmVkIGFib3ZlLgorCitUbyBkbyBleHBpcmF0aW9uLCB5b3UgbmVlZCB0byBmb2xsb3cgdGhlc2Ugc3RlcHM6CisKKyAoMykgQ3JlYXRlIGF0IGxlYXN0IG9uZSBsaXN0IG9mZiB3aGljaCB0aGUgdmZzbW91bnRzIHRvIGJlIGV4cGlyZWQgY2FuIGJlCisgICAgIGh1bmcuIEFjY2VzcyB0byB0aGlzIGxpc3Qgd2lsbCBiZSBnb3Zlcm5lZCBieSB0aGUgdmZzbW91bnRfbG9jay4KKworICg0KSBJbiBzdGVwICgyYykgYWJvdmUsIHRoZSBjYWxsIHRvIGRvX2FkZF9tb3VudCgpIHNob3VsZCBiZSBwcm92aWRlZCB3aXRoIGEKKyAgICAgcG9pbnRlciB0byB0aGlzIGxpc3QuIEl0IHdpbGwgaGFuZyB0aGUgdmZzbW91bnQgb2ZmIG9mIGl0IGlmIGl0IHN1Y2NlZWRzLgorCisgKDUpIFdoZW4geW91IHdhbnQgbW91bnRwb2ludHMgdG8gYmUgZXhwaXJlZCwgY2FsbCBtYXJrX21vdW50c19mb3JfZXhwaXJ5KCkKKyAgICAgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBsaXN0LiBUaGlzIHdpbGwgcHJvY2VzcyB0aGUgbGlzdCwgbWFya2luZyBldmVyeQorICAgICB2ZnNtb3VudCB0aGVyZW9uIGZvciBwb3RlbnRpYWwgZXhwaXJ5IG9uIHRoZSBuZXh0IGNhbGwuCisKKyAgICAgSWYgYSB2ZnNtb3VudCB3YXMgYWxyZWFkeSBmbGFnZ2VkIGZvciBleHBpcnksIGFuZCBpZiBpdHMgdXNhZ2UgY291bnQgaXMgMQorICAgICAoaXQncyBvbmx5IHJlZmVyZW5jZWQgYnkgaXRzIHBhcmVudCB2ZnNtb3VudCksIHRoZW4gaXQgd2lsbCBiZSBkZWxldGVkCisgICAgIGZyb20gdGhlIG5hbWVzcGFjZSBhbmQgdGhyb3duIGF3YXkgKGVmZmVjdGl2ZWx5IHVubW91bnRlZCkuCisKKyAgICAgSXQgbWF5IHByb3ZlIHNpbXBsZXN0IHRvIHNpbXBseSBjYWxsIHRoaXMgYXQgcmVndWxhciBpbnRlcnZhbHMsIHVzaW5nCisgICAgIHNvbWUgc29ydCBvZiB0aW1lZCBldmVudCB0byBkcml2ZSBpdC4KKworVGhlIGV4cGlyYXRpb24gZmxhZyBpcyBjbGVhcmVkIGJ5IGNhbGxzIHRvIG1udHB1dC4gVGhpcyBtZWFucyB0aGF0IGV4cGlyYXRpb24KK3dpbGwgb25seSBoYXBwZW4gb24gdGhlIHNlY29uZCBleHBpcmF0aW9uIHJlcXVlc3QgYWZ0ZXIgdGhlIGxhc3QgdGltZSB0aGUKK21vdW50cG9pbnQgd2FzIGFjY2Vzc2VkLgorCitJZiBhIG1vdW50cG9pbnQgaXMgbW92ZWQsIGl0IGdldHMgcmVtb3ZlZCBmcm9tIHRoZSBleHBpcmF0aW9uIGxpc3QuIElmIGEgYmluZAorbW91bnQgaXMgbWFkZSBvbiBhbiBleHBpcmFibGUgbW91bnQsIHRoZSBuZXcgdmZzbW91bnQgd2lsbCBub3QgYmUgb24gdGhlCitleHBpcmF0aW9uIGxpc3QgYW5kIHdpbGwgbm90IGV4cGlyZS4KKworSWYgYSBuYW1lc3BhY2UgaXMgY29waWVkLCBhbGwgbW91bnRwb2ludHMgY29udGFpbmVkIHRoZXJlaW4gd2lsbCBiZSBjb3BpZWQsCithbmQgdGhlIGNvcGllcyBvZiB0aG9zZSB0aGF0IGFyZSBvbiBhbiBleHBpcmF0aW9uIGxpc3Qgd2lsbCBiZSBhZGRlZCB0byB0aGUKK3NhbWUgZXhwaXJhdGlvbiBsaXN0LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09CitVU0VSU1BBQ0UgRFJJVkVOIEVYUElSWQorPT09PT09PT09PT09PT09PT09PT09PT0KKworQXMgYW4gYWx0ZXJuYXRpdmUsIGl0IGlzIHBvc3NpYmxlIGZvciB1c2Vyc3BhY2UgdG8gcmVxdWVzdCBleHBpcnkgb2YgYW55Cittb3VudHBvaW50ICh0aG91Z2ggc29tZSB3aWxsIGJlIHJlamVjdGVkIC0gdGhlIGN1cnJlbnQgcHJvY2VzcydzIGlkZWEgb2YgdGhlCityb290ZnMgZm9yIGV4YW1wbGUpLiBJdCBkb2VzIHRoaXMgYnkgcGFzc2luZyB0aGUgTU5UX0VYUElSRSBmbGFnIHRvCit1bW91bnQoKS4gVGhpcyBmbGFnIGlzIGNvbnNpZGVyZWQgaW5jb21wYXRpYmxlIHdpdGggTU5UX0ZPUkNFIGFuZCBNTlRfREVUQUNILgorCitJZiB0aGUgbW91bnRwb2ludCBpbiBxdWVzdGlvbiBpcyBpbiByZWZlcmVuY2VkIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuCit1bW91bnQoKSBvciBpdHMgcGFyZW50IG1vdW50cG9pbnQsIGFuIEVCVVNZIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQgYW5kIHRoZQorbW91bnRwb2ludCB3aWxsIG5vdCBiZSBtYXJrZWQgZm9yIGV4cGlyYXRpb24gb3IgdW5tb3VudGVkLgorCitJZiB0aGUgbW91bnRwb2ludCB3YXMgbm90IGFscmVhZHkgbWFya2VkIGZvciBleHBpcnkgYXQgdGhhdCB0aW1lLCBhbiBFQUdBSU4KK2Vycm9yIHdpbGwgYmUgZ2l2ZW4gYW5kIGl0IHdvbid0IGJlIHVubW91bnRlZC4KKworT3RoZXJ3aXNlIGlmIGl0IHdhcyBhbHJlYWR5IG1hcmtlZCBhbmQgaXQgd2Fzbid0IHJlZmVyZW5jZWQsIHVubW91bnRpbmcgd2lsbAordGFrZSBwbGFjZSBhcyB1c3VhbC4KKworQWdhaW4sIHRoZSBleHBpcmF0aW9uIGZsYWcgaXMgY2xlYXJlZCBldmVyeSB0aW1lIGFueXRoaW5nIG90aGVyIHRoYW4gdW1vdW50KCkKK2xvb2tzIGF0IGEgbW91bnRwb2ludC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3N2E3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMudHh0CkBAIC0wLDAgKzEsMTE3IEBACitCZU9TIGZpbGVzeXN0ZW0gZm9yIExpbnV4CisKK0RvY3VtZW50IGxhc3QgdXBkYXRlZDogRGVjIDYsIDIwMDEKKworV0FSTklORworPT09PT09PQorTWFrZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBpcyBhbHBoYSBzb2Z0d2FyZS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUKK2ltcGxlbWVudGF0aW9uIGlzIG5laXRoZXIgY29tcGxldGUgbm9yIHdlbGwtdGVzdGVkLiAKKworSSBESVNDTEFJTSBBTEwgUkVTUE9OU0lCSUxUWSBGT1IgQU5ZIFBPU1NJQkxFIEJBRCBFRkZFQ1RTIE9GIFRISVMgQ09ERSEKKworTElDRU5TRQorPT09PT0KK1RoaXMgc29mdHdhcmUgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIAorU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoZSBsaWNlbnNlLgorT3IgdGhlIEdOVSB3ZWJzaXRlOiA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWw+CisKK0FVVEhPUgorPT09PT0KK1RoZSBsYXJnZXN0IHBhcnQgb2YgdGhlIGNvZGUgd3JpdHRlbiBieSBXaWxsIER5c29uIDx3aWxsX2R5c29uQHBvYm94LmNvbT4KK0hlIGhhcyBiZWVuIHdvcmtpbmcgb24gdGhlIGNvZGUgc2luY2UgQXVnIDEzLCAyMDAxLiBTZWUgdGhlIGNoYW5nZWxvZyBmb3IKK2RldGFpbHMuCisKK09yaWdpbmFsIEF1dGhvcjogTWFrb3RvIEthdG8gPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPgorSGlzIG9ycmlnaW5hbCBjb2RlIGNhbiBzdGlsbCBiZSBmb3VuZCBhdDoKKzxodHRwOi8vaHAudmVjdG9yLmNvLmpwL2F1dGhvcnMvVkEwMDgwMzAvYmZzLz4KK0RvZXMgYW55b25lIGtub3cgb2YgYSBtb3JlIGN1cnJlbnQgZW1haWwgYWRkcmVzcyBmb3IgTWFrb3RvPyBIZSBkb2Vzbid0CityZXNwb25kIHRvIHRoZSBhZGRyZXNzIGdpdmVuIGFib3ZlLi4uCisKK0N1cnJlbnQgbWFpbnRhaW5lcjogU2VyZ2V5IFMuIEtvc3R5bGlvdiA8cmF0aGFtYWhhdGFAcGhwNC5ydT4KKworV0hBVCBJUyBUSElTIERSSVZFUj8KKz09PT09PT09PT09PT09PT09PQorVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgbmF0aXZlIGZpbGVzeXN0ZW0gb2YgQmVPUyA8aHR0cDovL3d3dy5iZS5jb20vPgorZm9yIHRoZSBsaW51eCAyLjQuMSBhbmQgbGF0ZXIga2VybmVscy4gQ3VycmVudGx5IGl0IGlzIGEgcmVhZC1vbmx5CitpbXBsZW1lbnRhdGlvbi4KKworV2hpY2ggaXMgaXQsIEJGUyBvciBCRUZTPworPT09PT09PT09PT09PT09PQorQmUsIEluYyBzYWlkLCAiQmVPUyBGaWxlc3lzdGVtIGlzIG9mZmljaWFsbHkgY2FsbGVkIEJGUywgbm90IEJlRlMiLiAKK0J1dCBVbml4d2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLiBBbmQgdGhleSBhcmUgYWxyZWFkeSBpbgordGhlIGtlcm5lbC4gQmVjYXVzZSBvZiB0aGlzIG5hbWVpbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TCitmaWxlc3lzdGVtIGlzIGNhbGxlZCBiZWZzLgorCitIT1cgVE8gSU5TVEFMTAorPT09PT09PT09PT09PT0KK3N0ZXAgMS4gIEluc3RhbGwgdGhlIEJlRlMgIHBhdGNoIGludG8gdGhlIHNvdXJjZSBjb2RlIHRyZWUgb2YgbGludXguCisKK0FwcGx5IHRoZSBwYXRjaGZpbGUgdG8geW91ciBrZXJuZWwgc291cmNlIHRyZWUuCitBc3N1bWluZyB0aGF0IHlvdXIga2VybmVsIHNvdXJjZSBpcyBpbiAvZm9vL2Jhci9saW51eCBhbmQgdGhlIHBhdGNoZmlsZQoraXMgY2FsbGVkIHBhdGNoLWJlZnMteHh4LCB5b3Ugd291bGQgZG8gdGhlIGZvbGxvd2luZzoKKworCWNkIC9mb28vYmFyL2xpbnV4CisJcGF0Y2ggLXAxIDwgL3BhdGgvdG8vcGF0Y2gtYmVmcy14eHgKKworaWYgdGhlIHBhdGNoaW5nIHN0ZXAgZmFpbHMgKGkuZS4gdGhlcmUgYXJlIHJlamVjdGVkIGh1bmtzKSwgeW91IGNhbiB0cnkgdG8KK2ZpZ3VyZSBpdCBvdXQgeW91cnNlbGYgKGl0IHNob3VsZG4ndCBiZSBoYXJkKSwgb3IgbWFpbCB0aGUgbWFpbnRhaW5lciAKKyhXaWxsIER5c29uIDx3aWxsX2R5c29uQHBvYm94LmNvbT4pIGZvciBoZWxwLgorCitzdGVwIDIuICBDb25maWd1cmV0aW9uICYgbWFrZSBrZXJuZWwKKworVGhlIGxpbnV4IGtlcm5lbCBoYXMgbWFueSBjb21waWxlLXRpbWUgb3B0aW9ucy4gTW9zdCBvZiB0aGVtIGFyZSBiZXlvbmQgdGhlCitzY29wZSBvZiB0aGlzIGRvY3VtZW50LiBJIHN1Z2dlc3QgdGhlIEtlcm5lbC1IT1dUTyBkb2N1bWVudCBhcyBhIGdvb2QgZ2VuZXJhbAorcmVmZXJlbmNlIG9uIHRoaXMgdG9waWMuIDxodHRwOi8vd3d3LmxpbnV4LmNvbS9ob3d0by9LZXJuZWwtSE9XVE8uaHRtbD4KKworSG93ZXZlciwgdG8gdXNlIHRoZSBCZUZTIG1vZHVsZSwgeW91IG11c3QgZW5hYmxlIGl0IGF0IGNvbmZpZ3VyZSB0aW1lLgorCisJY2QgL2Zvby9iYXIvbGludXgKKwltYWtlIG1lbnVjb25maWcgKG9yIHhjb25maWcpCisKK1RoZSBCZUZTIG1vZHVsZSBpcyBub3QgYSBzdGFuZGFyZCBwYXJ0IG9mIHRoZSBsaW51eCBrZXJuZWwsIHNvIHlvdSBtdXN0IGZpcnN0CitlbmFibGUgc3VwcG9ydCBmb3IgZXhwZXJpbWVudGFsIGNvZGUgdW5kZXIgdGhlICJDb2RlIG1hdHVyaXR5IGxldmVsIiBtZW51LgorCitUaGVuLCB1bmRlciB0aGUgIkZpbGVzeXN0ZW1zIiBtZW51IHdpbGwgYmUgYW4gb3B0aW9uIGNhbGxlZCAiQmVGUworZmlsZXN5c3RlbSAoZXhwZXJpbWVudGFsKSIsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuIEVuYWJsZSB0aGF0IG9wdGlvbgorKGl0IGlzIGZpbmUgdG8gbWFrZSBpdCBhIG1vZHVsZSkuCisKK1NhdmUgeW91ciBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgdGhlbiBidWlsZCB5b3VyIGtlcm5lbC4KKworc3RlcCAzLiAgSW5zdGFsbAorCitTZWUgdGhlIGtlcm5lbCBob3d0byA8aHR0cDovL3d3dy5saW51eC5jb20vaG93dG8vS2VybmVsLUhPV1RPLmh0bWw+IGZvcgoraW5zdHJ1Y3Rpb25zIG9uIHRoaXMgY3JpdGljYWwgc3RlcC4KKworVVNJTkcgQkZTCis9PT09PT09PT0KK1RvIHVzZSB0aGUgQmVPUyBmaWxlc3lzdGVtLCB1c2UgZmlsZXN5c3RlbSB0eXBlICdiZWZzJy4KKworZXgpCisgICAgbW91bnQgLXQgYmVmcyAvZGV2L2ZkMCAvYmVvcworCitNT1VOVCBPUFRJT05TCis9PT09PT09PT09PT09Cit1aWQ9bm5uICAgICAgICBBbGwgZmlsZXMgaW4gdGhlIHBhcnRpdGlvbiB3aWxsIGJlIG93bmVkIGJ5IHVzZXIgaWQgbm5uLgorZ2lkPW5ubgkgICAgICAgQWxsIGZpbGVzIGluIHRoZSBwYXJ0aXRpb24gd2lsbCBiZSBpbiBncm91cCBubm4uCitpb2NoYXJzZXQ9eHh4ICBVc2UgeHh4IGFzIHRoZSBuYW1lIG9mIHRoZSBOTFMgdHJhbnNsYXRpb24gdGFibGUuCitkZWJ1ZyAgICAgICAgICBUaGUgZHJpdmVyIHdpbGwgb3V0cHV0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byB0aGUgc3lzbG9nLgorCitIT1cgVE8gR0VUIExBU1RFU1QgVkVSU0lPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGxhdGVzdCB2ZXJzaW9uIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgYXQ6Cis8aHR0cDovL2JlZnMtZHJpdmVyLnNvdXJjZWZvcmdlLm5ldC8+CisKK0FOWSBLTk9XTiBCVUdTPworPT09PT09PT09PT0KK0FzIG9mIEphbiAyMCwgMjAwMjoKKwkKKwlOb25lCisKK1NQRUNJQUwgVEhBTktTCis9PT09PT09PT09PT09PQorRG9taW5pYyBHaWFtcGFsbyAuLi4gV3JpdGluZyAiUHJhY3RpY2FsIGZpbGUgc3lzdGVtIGRlc2lnbiB3aXRoIEJlIGZpbGVzeXN0ZW0iCitIaXJveXVraSBZYW1hZGEgIC4uLiBUZXN0aW5nIExpbnV4UFBDLgorCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODQxZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy50eHQKQEAgLTAsMCArMSw1NyBAQAorQkZTIEZJTEVTWVNURU0gRk9SIExJTlVYCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIEJGUyBmaWxlc3lzdGVtIGlzIHVzZWQgYnkgU0NPIFVuaXhXYXJlIE9TIGZvciB0aGUgL3N0YW5kIHNsaWNlLCB3aGljaAordXN1YWxseSBjb250YWlucyB0aGUga2VybmVsIGltYWdlIGFuZCBhIGZldyBvdGhlciBmaWxlcyByZXF1aXJlZCBmb3IgdGhlCitib290IHByb2Nlc3MuCisKK0luIG9yZGVyIHRvIGFjY2VzcyAvc3RhbmQgcGFydGl0aW9uIHVuZGVyIExpbnV4IHlvdSBvYnZpb3VzbHkgbmVlZCB0bwora25vdyB0aGUgcGFydGl0aW9uIG51bWJlciBhbmQgdGhlIGtlcm5lbCBtdXN0IHN1cHBvcnQgVW5peFdhcmUgZGlzayBzbGljZXMKKyhDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGNvbmZpZyBvcHRpb24pLiBIb3dldmVyIEJGUyBzdXBwb3J0IGRvZXMgbm90CitkZXBlbmQgb24gaGF2aW5nIFVuaXhXYXJlIGRpc2tsYWJlbCBzdXBwb3J0IGJlY2F1c2Ugb25lIGNhbiBhbHNvIG1vdW50CitCRlMgZmlsZXN5c3RlbSB2aWEgbG9vcGJhY2s6CisKKyMgbG9zZXR1cCAvZGV2L2xvb3AwIHN0YW5kLmltZworIyBtb3VudCAtdCBiZnMgL2Rldi9sb29wMCAvbW50L3N0YW5kCisKK3doZXJlIHN0YW5kLmltZyBpcyBhIGZpbGUgY29udGFpbmluZyB0aGUgaW1hZ2Ugb2YgQkZTIGZpbGVzeXN0ZW0uIAorV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCB1c2luZyBpdCBhbmQgdW1vdW50ZWQgeW91IG5lZWQgdG8gYWxzbyBkZWFsbG9jYXRlCisvZGV2L2xvb3AwIGRldmljZSBieToKKworIyBsb3NldHVwIC1kIC9kZXYvbG9vcDAKKworWW91IGNhbiBzaW1wbGlmeSBtb3VudGluZyBieSBqdXN0IHR5cGluZzoKKworIyBtb3VudCAtdCBiZnMgLW8gbG9vcCBzdGFuZC5pbWcgL21udC9zdGFuZAorCit0aGlzIHdpbGwgYWxsb2NhdGUgdGhlIGZpcnN0IGF2YWlsYWJsZSBsb29wYmFjayBkZXZpY2UgKGFuZCBsb2FkIGxvb3AubyAKK2tlcm5lbCBtb2R1bGUgaWYgbmVjZXNzYXJ5KSBhdXRvbWF0aWNhbGx5LiBJZiB0aGUgbG9vcGJhY2sgZHJpdmVyIGlzIG5vdAorbG9hZGVkIGF1dG9tYXRpY2FsbHksIG1ha2Ugc3VyZSB0aGF0IHlvdXIga2VybmVsIGlzIGNvbXBpbGVkIHdpdGgga21vZCAKK3N1cHBvcnQgKENPTkZJR19LTU9EKSBlbmFibGVkLiBCZXdhcmUgdGhhdCB1bW91bnQgd2lsbCBub3QKK2RlYWxsb2NhdGUgL2Rldi9sb29wTiBkZXZpY2UgaWYgL2V0Yy9tdGFiIGZpbGUgb24geW91ciBzeXN0ZW0gaXMgYQorc3ltYm9saWMgbGluayB0byAvcHJvYy9tb3VudHMuIFlvdSB3aWxsIG5lZWQgdG8gZG8gaXQgbWFudWFsbHkgdXNpbmcKKyItZCIgc3dpdGNoIG9mIGxvc2V0dXAoOCkuIFJlYWQgbG9zZXR1cCg4KSBtYW5wYWdlIGZvciBtb3JlIGluZm8uCisKK1RvIGNyZWF0ZSB0aGUgQkZTIGltYWdlIHVuZGVyIFVuaXhXYXJlIHlvdSBuZWVkIHRvIGZpbmQgb3V0IGZpcnN0IHdoaWNoCitzbGljZSBjb250YWlucyBpdC4gVGhlIGNvbW1hbmQgcHJ0dnRvYygxTSkgaXMgeW91ciBmcmllbmQ6CisKKyMgcHJ0dnRvYyAvZGV2L3Jkc2svYzBiMHQwZDBzMAorCisoYXNzdW1pbmcgeW91ciByb290IGRpc2sgaXMgb24gdGFyZ2V0PTAsIGx1bj0wLCBidXM9MCwgY29udHJvbGxlcj0wKS4gVGhlbiB5b3UKK2xvb2sgZm9yIHRoZSBzbGljZSB3aXRoIHRhZyAiU1RBTkQiLCB3aGljaCBpcyB1c3VhbGx5IHNsaWNlIDEwLiBXaXRoIHRoaXMKK2luZm9ybWF0aW9uIHlvdSBjYW4gdXNlIGRkKDEpIHRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlOgorCisjIHVtb3VudCAvc3RhbmQKKyMgZGQgaWY9L2Rldi9yZHNrL2MwYjB0MGQwc2Egb2Y9c3RhbmQuaW1nIGJzPTUxMgorCitKdXN0IGluIGNhc2UsIHlvdSBjYW4gdmVyaWZ5IHRoYXQgeW91IGhhdmUgZG9uZSB0aGUgcmlnaHQgdGhpbmcgYnkgY2hlY2tpbmcKK3RoZSBtYWdpYyBudW1iZXI6CisKKyMgb2QgLUFkIC10eDQgc3RhbmQuaW1nIHwgbW9yZQorCitUaGUgZmlyc3QgNCBieXRlcyBzaG91bGQgYmUgMHgxYmFkZmFjZS4KKworSWYgeW91IGhhdmUgYW55IHBhdGNoZXMsIHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBCRlMKK2ltcGxlbWVudGF0aW9uIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6CisKK1RpZ3JhbiBBLiBBaXZhemlhbiA8dGlncmFuQHZlcml0YXMuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jaWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2lmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljYzkyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2lmcy50eHQKQEAgLTAsMCArMSw1MSBAQAorICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQorICAoQ0lGUykgcHJvdG9jb2wgd2hpY2ggaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgU2VydmVyIE1lc3NhZ2UgQmxvY2sgCisgIChTTUIpIHByb3RvY29sLCB0aGUgbmF0aXZlIGZpbGUgc2hhcmluZyBtZWNoYW5pc20gZm9yIG1vc3QgZWFybHkKKyAgUEMgb3BlcmF0aW5nIHN5c3RlbXMuICBDSUZTIGlzIGZ1bGx5IHN1cHBvcnRlZCBieSBjdXJyZW50IG5ldHdvcmsKKyAgZmlsZSBzZXJ2ZXJzIHN1Y2ggYXMgV2luZG93cyAyMDAwLCBXaW5kb3dzIDIwMDMgKGluY2x1ZGluZyAgCisgIFdpbmRvd3MgWFApIGFzIHdlbGwgYnkgU2FtYmEgKHdoaWNoIHByb3ZpZGVzIGV4Y2VsbGVudCBDSUZTCisgIHNlcnZlciBzdXBwb3J0IGZvciBMaW51eCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyksIHNvCisgIHRoaXMgbmV0d29yayBmaWxlc3lzdGVtIGNsaWVudCBjYW4gbW91bnQgdG8gYSB3aWRlIHZhcmlldHkgb2YKKyAgc2VydmVycy4gIFRoZSBzbWJmcyBtb2R1bGUgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGlzIGNpZnMgbW9kdWxlCisgIGZvciBtb3VudGluZyB0byBvbGRlciBTTUIgc2VydmVycyBzdWNoIGFzIE9TLzIuICBUaGUgc21iZnMgYW5kIGNpZnMKKyAgbW9kdWxlcyBjYW4gY29leGlzdCBhbmQgZG8gbm90IGNvbmZsaWN0LiAgVGhlIENJRlMgVkZTIGZpbGVzeXN0ZW0KKyAgbW9kdWxlIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2VsbCB3aXRoIHNlcnZlcnMgdGhhdCBpbXBsZW1lbnQgdGhlCisgIG5ld2VyIHZlcnNpb25zIChkaWFsZWN0cykgb2YgdGhlIFNNQi9DSUZTIHByb3RvY29sIHN1Y2ggYXMgU2FtYmEsIAorICB0aGUgcHJvZ3JhbSB3cml0dGVuIGJ5IEFuZHJldyBUcmlkZ2VsbCB0aGF0IHR1cm5zIGFueSBVbml4IGhvc3QgCisgIGludG8gYSBTTUIvQ0lGUyBmaWxlIHNlcnZlci4KKworICBUaGUgaW50ZW50IG9mIHRoaXMgbW9kdWxlIGlzIHRvIHByb3ZpZGUgdGhlIG1vc3QgYWR2YW5jZWQgbmV0d29yaworICBmaWxlIHN5c3RlbSBmdW5jdGlvbiBmb3IgQ0lGUyBjb21wbGlhbnQgc2VydmVycywgaW5jbHVkaW5nIGJldHRlcgorICBQT1NJWCBjb21wbGlhbmNlLCBzZWN1cmUgcGVyLXVzZXIgc2Vzc2lvbiBlc3RhYmxpc2htZW50LCBoaWdoCisgIHBlcmZvcm1hbmNlIHNhZmUgZGlzdHJpYnV0ZWQgY2FjaGluZyAob3Bsb2NrKSwgb3B0aW9uYWwgcGFja2V0CisgIHNpZ25pbmcsIGxhcmdlIGZpbGVzLCBVbmljb2RlIHN1cHBvcnQgYW5kIG90aGVyIGludGVybmF0aW9uYWxpemF0aW9uCisgIGltcHJvdmVtZW50cy4gU2luY2UgYm90aCBTYW1iYSBzZXJ2ZXIgYW5kIHRoaXMgZmlsZXN5c3RlbSBjbGllbnQgc3VwcG9ydAorICB0aGUgQ0lGUyBVbml4IGV4dGVuc2lvbnMsIHRoZSBjb21iaW5hdGlvbiBjYW4gcHJvdmlkZSBhIHJlYXNvbmFibGUgCisgIGFsdGVybmF0aXZlIHRvIE5GU3Y0IGZvciBmaWxlc2VydmluZyBpbiBzb21lIExpbnV4IHRvIExpbnV4IGVudmlyb25tZW50cywKKyAgbm90IGp1c3QgaW4gTGludXggdG8gV2luZG93cyBlbnZpcm9ubWVudHMuCisKKyAgVGhpcyBmaWxlc3lzdGVtIGhhcyBhbiBvcHRpb25hbCBtb3VudCB1dGlsaXR5IChtb3VudC5jaWZzKSB0aGF0IGNhbgorICBiZSBvYnRhaW5lZCBmcm9tIHRoZSBwcm9qZWN0IHBhZ2UgYW5kIGluc3RhbGxlZCBpbiB0aGUgcGF0aCBpbiB0aGUgc2FtZQorICBkaXJlY3Rvcnkgd2l0aCB0aGUgb3RoZXIgbW91bnQgaGVscGVycyAoc3VjaCBhcyBtb3VudC5zbWJmcykuIAorICBNb3VudGluZyB1c2luZyB0aGUgY2lmcyBmaWxlc3lzdGVtIHdpdGhvdXQgaW5zdGFsbGluZyB0aGUgbW91bnQgaGVscGVyCisgIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHNlcnZlcidzIGlwIGFkZHJlc3MuCisKKyAgRm9yIExpbnV4IDIuNDoKKyAgICBtb3VudCAvL2FueXRoaW5nL2hlcmUgL21udF90YXJnZXQgLW8KKyAgICAgICAgICAgIHVzZXI9dXNlcm5hbWUscGFzcz1wYXNzd29yZCx1bmM9Ly9pcF9hZGRyZXNzX29mX3NlcnZlci9zaGFyZW5hbWUKKworICBGb3IgTGludXggMi41OiAKKyAgICBtb3VudCAvL2lwX2FkZHJlc3Nfb2Zfc2VydmVyL3NoYXJlbmFtZSAvbW50X3RhcmdldCAtbyB1c2VyPXVzZXJuYW1lLCBwYXNzPXBhc3N3b3JkCisKKworICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kdWxlIHNlZSB0aGUgcHJvamVjdCBwYWdlIGF0CisKKyAgICAgIGh0dHA6Ly91czEuc2FtYmEub3JnL3NhbWJhL0xpbnV4X0NJRlNfY2xpZW50Lmh0bWwgCisKKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ0lGUyBzZWU6CisKKyAgICAgIGh0dHA6Ly93d3cuc25pYS5vcmcvdGVjaF9hY3Rpdml0aWVzL0NJRlMKKworICBvciB0aGUgU2FtYmEgc2l0ZToKKyAgICAgCisgICAgICBodHRwOi8vd3d3LnNhbWJhLm9yZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jb2RhLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29kYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzMTEzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29kYS50eHQKQEAgLTAsMCArMSwxNjczIEBACitOT1RFOiAKK1RoaXMgaXMgb25lIG9mIHRoZSB0ZWNobmljYWwgZG9jdW1lbnRzIGRlc2NyaWJpbmcgYSBjb21wb25lbnQgb2YKK0NvZGEgLS0gdGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGNsaWVudCBrZXJuZWwtVmVudXMgaW50ZXJmYWNlLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbjoKKyAgaHR0cDovL3d3dy5jb2RhLmNzLmNtdS5lZHUKK0ZvciB1c2VyIGxldmVsIHNvZnR3YXJlIG5lZWRlZCB0byBydW4gQ29kYToKKyAgZnRwOi8vZnRwLmNvZGEuY3MuY211LmVkdQorCitUbyBydW4gQ29kYSB5b3UgbmVlZCB0byBnZXQgYSB1c2VyIGxldmVsIGNhY2hlIG1hbmFnZXIgZm9yIHRoZSBjbGllbnQsCituYW1lZCBWZW51cywgYXMgd2VsbCBhcyB0b29scyB0byBtYW5pcHVsYXRlIEFDTHMsIHRvIGxvZyBpbiwgZXRjLiAgVGhlCitjbGllbnQgbmVlZHMgdG8gaGF2ZSB0aGUgQ29kYSBmaWxlc3lzdGVtIHNlbGVjdGVkIGluIHRoZSBrZXJuZWwKK2NvbmZpZ3VyYXRpb24uCisKK1RoZSBzZXJ2ZXIgbmVlZHMgYSB1c2VyIGxldmVsIHNlcnZlciBhbmQgYXQgcHJlc2VudCBkb2VzIG5vdCBkZXBlbmQgb24KK2tlcm5lbCBzdXBwb3J0LgorCisKKworCisKKworCisgIFRoZSBWZW51cyBrZXJuZWwgaW50ZXJmYWNlCisgIFBldGVyIEouIEJyYWFtCisgIHYxLjAsIE5vdiA5LCAxOTk3CisKKyAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBWZW51cyBhbmQga2VybmVsCisgIGxldmVsIGZpbGVzeXN0ZW0gY29kZSBuZWVkZWQgZm9yIHRoZSBvcGVyYXRpb24gb2YgdGhlIENvZGEgZmlsZSBzeXMtCisgIHRlbS4gIFRoaXMgZG9jdW1lbnQgdmVyc2lvbiBpcyBtZWFudCB0byBkZXNjcmliZSB0aGUgY3VycmVudCBpbnRlcmZhY2UKKyAgKHZlcnNpb24gMS4wKSBhcyB3ZWxsIGFzIGltcHJvdmVtZW50cyB3ZSBlbnZpc2FnZS4KKyAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgIFRhYmxlIG9mIENvbnRlbnRzCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgMS4gSW50cm9kdWN0aW9uCisKKyAgMi4gU2VydmljaW5nIENvZGEgZmlsZXN5c3RlbSBjYWxscworCisgIDMuIFRoZSBtZXNzYWdlIGxheWVyCisKKyAgICAgMy4xIEltcGxlbWVudGF0aW9uIGRldGFpbHMKKworICA0LiBUaGUgaW50ZXJmYWNlIGF0IHRoZSBjYWxsIGxldmVsCisKKyAgICAgNC4xIERhdGEgc3RydWN0dXJlcyBzaGFyZWQgYnkgdGhlIGtlcm5lbCBhbmQgVmVudXMKKyAgICAgNC4yIFRoZSBwaW9jdGwgaW50ZXJmYWNlCisgICAgIDQuMyByb290CisgICAgIDQuNCBsb29rdXAKKyAgICAgNC41IGdldGF0dHIKKyAgICAgNC42IHNldGF0dHIKKyAgICAgNC43IGFjY2VzcworICAgICA0LjggY3JlYXRlCisgICAgIDQuOSBta2RpcgorICAgICA0LjEwIGxpbmsKKyAgICAgNC4xMSBzeW1saW5rCisgICAgIDQuMTIgcmVtb3ZlCisgICAgIDQuMTMgcm1kaXIKKyAgICAgNC4xNCByZWFkbGluaworICAgICA0LjE1IG9wZW4KKyAgICAgNC4xNiBjbG9zZQorICAgICA0LjE3IGlvY3RsCisgICAgIDQuMTggcmVuYW1lCisgICAgIDQuMTkgcmVhZGRpcgorICAgICA0LjIwIHZnZXQKKyAgICAgNC4yMSBmc3luYworICAgICA0LjIyIGluYWN0aXZlCisgICAgIDQuMjMgcmR3cgorICAgICA0LjI0IG9keW1vdW50CisgICAgIDQuMjUgb2R5X2xvb2t1cAorICAgICA0LjI2IG9keV9leHBhbmQKKyAgICAgNC4yNyBwcmVmZXRjaAorICAgICA0LjI4IHNpZ25hbAorCisgIDUuIFRoZSBtaW5pY2FjaGUgYW5kIGRvd25jYWxscworCisgICAgIDUuMSBJTlZBTElEQVRFCisgICAgIDUuMiBGTFVTSAorICAgICA1LjMgUFVSR0VVU0VSCisgICAgIDUuNCBaQVBGSUxFCisgICAgIDUuNSBaQVBESVIKKyAgICAgNS42IFpBUFZOT0RFCisgICAgIDUuNyBQVVJHRUZJRAorICAgICA1LjggUkVQTEFDRQorCisgIDYuIEluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwCisKKyAgICAgNi4xIFJlcXVpcmVtZW50cworCisKKyAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAwd3BhZ2UKKworICAxCDEuCC4gIEkISW4IbnQIdHIIcm8Ib2QIZHUIdWMIY3QIdGkIaW8Ib24IbgorCisKKworICBBIGtleSBjb21wb25lbnQgaW4gdGhlIENvZGEgRGlzdHJpYnV0ZWQgRmlsZSBTeXN0ZW0gaXMgdGhlIGNhY2hlCisgIG1hbmFnZXIsIF8IVl8IZV8Ibl8IdV8Icy4KKworCisgIFdoZW4gcHJvY2Vzc2VzIG9uIGEgQ29kYSBlbmFibGVkIHN5c3RlbSBhY2Nlc3MgZmlsZXMgaW4gdGhlIENvZGEKKyAgZmlsZXN5c3RlbSwgcmVxdWVzdHMgYXJlIGRpcmVjdGVkIGF0IHRoZSBmaWxlc3lzdGVtIGxheWVyIGluIHRoZQorICBvcGVyYXRpbmcgc3lzdGVtLiBUaGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIGNvbW11bmljYXRlIHdpdGggVmVudXMgdG8KKyAgc2VydmljZSB0aGUgcmVxdWVzdCBmb3IgdGhlIHByb2Nlc3MuICBWZW51cyBtYW5hZ2VzIGEgcGVyc2lzdGVudAorICBjbGllbnQgY2FjaGUgYW5kIG1ha2VzIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgdG8gQ29kYSBmaWxlIHNlcnZlcnMgYW5kCisgIHJlbGF0ZWQgc2VydmVycyAoc3VjaCBhcyBhdXRoZW50aWNhdGlvbiBzZXJ2ZXJzKSB0byBzZXJ2aWNlIHRoZXNlCisgIHJlcXVlc3RzIGl0IHJlY2VpdmVzIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBXaGVuIFZlbnVzIGhhcworICBzZXJ2aWNlZCBhIHJlcXVlc3QgaXQgcmVwbGllcyB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIGFwcHJvcHJpYXRlCisgIHJldHVybiBjb2RlcywgYW5kIG90aGVyIGRhdGEgcmVsYXRlZCB0byB0aGUgcmVxdWVzdC4gIE9wdGlvbmFsbHkgdGhlCisgIGtlcm5lbCBzdXBwb3J0IGZvciBDb2RhIG1heSBtYWludGFpbiBhIG1pbmljYWNoZSBvZiByZWNlbnRseSBwcm9jZXNzZWQKKyAgcmVxdWVzdHMgdG8gbGltaXQgdGhlIG51bWJlciBvZiBpbnRlcmFjdGlvbnMgd2l0aCBWZW51cy4gIFZlbnVzCisgIHBvc3Nlc3NlcyB0aGUgZmFjaWxpdHkgdG8gaW5mb3JtIHRoZSBrZXJuZWwgd2hlbiBlbGVtZW50cyBmcm9tIGl0cworICBtaW5pY2FjaGUgYXJlIG5vIGxvbmdlciB2YWxpZC4KKworICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBwcmVjaXNlbHkgdGhpcyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlCisgIGtlcm5lbCBhbmQgVmVudXMuICBUaGUgZGVmaW5pdGlvbnMgb2Ygc28gY2FsbGVkIHVwY2FsbHMgYW5kIGRvd25jYWxscworICB3aWxsIGJlIGdpdmVuIHdpdGggdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSB0aGV5IGhhbmRsZS4gV2Ugc2hhbGwgYWxzbworICBkZXNjcmliZSB0aGUgc2VtYW50aWMgaW52YXJpYW50cyByZXN1bHRpbmcgZnJvbSB0aGUgY2FsbHMuCisKKyAgSGlzdG9yaWNhbGx5IENvZGEgd2FzIGltcGxlbWVudGVkIGluIGEgQlNEIGZpbGUgc3lzdGVtIGluIE1hY2ggMi42LgorICBUaGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgVmVudXMgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBCU0QKKyAgVkZTIGludGVyZmFjZS4gIFNpbWlsYXIgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCwgYW5kIHRoZSBmb3JtYXQgb2YKKyAgdGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybmVkIGRhdGEgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBCU0QgVkZTLiAgVGhpcworICBsZWFkcyB0byBhbiBhbG1vc3QgbmF0dXJhbCBlbnZpcm9ubWVudCBmb3IgaW1wbGVtZW50aW5nIGEga2VybmVsLWxldmVsCisgIGZpbGVzeXN0ZW0gZHJpdmVyIGZvciBDb2RhIGluIGEgQlNEIHN5c3RlbS4gIEhvd2V2ZXIsIG90aGVyIG9wZXJhdGluZworICBzeXN0ZW1zIHN1Y2ggYXMgTGludXggYW5kIFdpbmRvd3MgOTUgYW5kIE5UIGhhdmUgdmlydHVhbCBmaWxlc3lzdGVtCisgIHdpdGggZGlmZmVyZW50IGludGVyZmFjZXMuCisKKyAgVG8gaW1wbGVtZW50IENvZGEgb24gdGhlc2Ugc3lzdGVtcyBzb21lIHJldmVyc2UgZW5naW5lZXJpbmcgb2YgdGhlCisgIFZlbnVzL0tlcm5lbCBwcm90b2NvbCBpcyBuZWNlc3NhcnkuICBBbHNvIGl0IGNhbWUgdG8gbGlnaHQgdGhhdCBvdGhlcgorICBzeXN0ZW1zIGNvdWxkIHByb2ZpdCBzaWduaWZpY2FudGx5IGZyb20gY2VydGFpbiBzbWFsbCBvcHRpbWl6YXRpb25zCisgIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBwcm90b2NvbC4gVG8gZmFjaWxpdGF0ZSB0aGlzIHdvcmsgYXMgd2VsbCBhcworICB0byBtYWtlIGZ1dHVyZSBwb3J0cyBlYXNpZXIsIGNvbW11bmljYXRpb24gYmV0d2VlbiBWZW51cyBhbmQgdGhlCisgIGtlcm5lbCBzaG91bGQgYmUgZG9jdW1lbnRlZCBpbiBncmVhdCBkZXRhaWwuICBUaGlzIGlzIHRoZSBhaW0gb2YgdGhpcworICBkb2N1bWVudC4KKworICAwd3BhZ2UKKworICAyCDIuCC4gIFMIU2UIZXIIcnYIdmkIaWMIY2kIaW4IbmcIZyBDCENvCG9kCGRhCGEgZghmaQhpbAhsZQhlcwhzeQh5cwhzdAh0ZQhlbQhtIGMIY2EIYWwIbGwIbHMIcworCisgIFRoZSBzZXJ2aWNlIG9mIGEgcmVxdWVzdCBmb3IgYSBDb2RhIGZpbGUgc3lzdGVtIHNlcnZpY2Ugb3JpZ2luYXRlcyBpbgorICBhIHByb2Nlc3MgUAhQIHdoaWNoIGFjY2Vzc2luZyBhIENvZGEgZmlsZS4gSXQgbWFrZXMgYSBzeXN0ZW0gY2FsbCB3aGljaAorICB0cmFwcyB0byB0aGUgT1Mga2VybmVsLiBFeGFtcGxlcyBvZiBzdWNoIGNhbGxzIHRyYXBwaW5nIHRvIHRoZSBrZXJuZWwKKyAgYXJlIF8Icl8IZV8IYV8IZF8ILCBfCHdfCHJfCGlfCHRfCGVfCCwgXwhvXwhwXwhlXwhuXwgsIF8IY18IbF8Ib18Ic18IZV8ILCBfCGNfCHJfCGVfCGFfCHRfCGVfCCwgXwhtXwhrXwhkXwhpXwhyXwgsIF8Icl8IbV8IZF8IaV8Icl8ILCBfCGNfCGhfCG1fCG9fCGQgaW4gYSBVbml4CisgIGNvbnRleHQuICBTaW1pbGFyIGNhbGxzIGV4aXN0IGluIHRoZSBXaW4zMiBlbnZpcm9ubWVudCwgYW5kIGFyZSBuYW1lZAorICBfCENfCHJfCGVfCGFfCHRfCGVfCEZfCGlfCGxfCGVfCCwgLgorCisgIEdlbmVyYWxseSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYW5kbGVzIHRoZSByZXF1ZXN0IGluIGEgdmlydHVhbAorICBmaWxlc3lzdGVtIChWRlMpIGxheWVyLCB3aGljaCBpcyBuYW1lZCBJL08gTWFuYWdlciBpbiBOVCBhbmQgSUZTCisgIG1hbmFnZXIgaW4gV2luZG93cyA5NS4gIFRoZSBWRlMgaXMgcmVzcG9uc2libGUgZm9yIHBhcnRpYWwgcHJvY2Vzc2luZworICBvZiB0aGUgcmVxdWVzdCBhbmQgZm9yIGxvY2F0aW5nIHRoZSBzcGVjaWZpYyBmaWxlc3lzdGVtKHMpIHdoaWNoIHdpbGwKKyAgc2VydmljZSBwYXJ0cyBvZiB0aGUgcmVxdWVzdC4gIFVzdWFsbHkgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBwYXRoCisgIGFzc2lzdHMgaW4gbG9jYXRpbmcgdGhlIGNvcnJlY3QgRlMgZHJpdmVycy4gIFNvbWV0aW1lcyBhZnRlciBleHRlbnNpdmUKKyAgcHJlLXByb2Nlc3NpbmcsIHRoZSBWRlMgc3RhcnRzIGludm9raW5nIGV4cG9ydGVkIHJvdXRpbmVzIGluIHRoZSBGUworICBkcml2ZXIuICBUaGlzIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgRlMgc3BlY2lmaWMgcHJvY2Vzc2luZyBvZiB0aGUKKyAgcmVxdWVzdCBzdGFydHMsIGFuZCBoZXJlIHRoZSBDb2RhIHNwZWNpZmljIGtlcm5lbCBjb2RlIGNvbWVzIGludG8KKyAgcGxheS4KKworICBUaGUgRlMgbGF5ZXIgZm9yIENvZGEgbXVzdCBleHBvc2UgYW5kIGltcGxlbWVudCBzZXZlcmFsIGludGVyZmFjZXMuCisgIEZpcnN0IGFuZCBmb3JlbW9zdCB0aGUgVkZTIG11c3QgYmUgYWJsZSB0byBtYWtlIGFsbCBuZWNlc3NhcnkgY2FsbHMgdG8KKyAgdGhlIENvZGEgRlMgbGF5ZXIsIHNvIHRoZSBDb2RhIEZTIGRyaXZlciBtdXN0IGV4cG9zZSB0aGUgVkZTIGludGVyZmFjZQorICBhcyBhcHBsaWNhYmxlIGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBUaGVzZSBkaWZmZXIgdmVyeSBzaWduaWZpY2FudGx5CisgIGFtb25nIG9wZXJhdGluZyBzeXN0ZW1zLCBidXQgc2hhcmUgZmVhdHVyZXMgc3VjaCBhcyBmYWNpbGl0aWVzIHRvCisgIHJlYWQvd3JpdGUgYW5kIGNyZWF0ZSBhbmQgcmVtb3ZlIG9iamVjdHMuICBUaGUgQ29kYSBGUyBsYXllciBzZXJ2aWNlcworICBzdWNoIFZGUyByZXF1ZXN0cyBieSBpbnZva2luZyBvbmUgb3IgbW9yZSB3ZWxsIGRlZmluZWQgc2VydmljZXMKKyAgb2ZmZXJlZCBieSB0aGUgY2FjaGUgbWFuYWdlciBWZW51cy4gIFdoZW4gdGhlIHJlcGxpZXMgZnJvbSBWZW51cyBoYXZlCisgIGNvbWUgYmFjayB0byB0aGUgRlMgZHJpdmVyLCBzZXJ2aWNpbmcgb2YgdGhlIFZGUyBjYWxsIGNvbnRpbnVlcyBhbmQKKyAgZmluaXNoZXMgd2l0aCBhIHJlcGx5IHRvIHRoZSBrZXJuZWwncyBWRlMuIEZpbmFsbHkgdGhlIFZGUyBsYXllcgorICByZXR1cm5zIHRvIHRoZSBwcm9jZXNzLgorCisgIEFzIGEgcmVzdWx0IG9mIHRoaXMgZGVzaWduIGEgYmFzaWMgaW50ZXJmYWNlIGV4cG9zZWQgYnkgdGhlIEZTIGRyaXZlcgorICBtdXN0IGFsbG93IFZlbnVzIHRvIG1hbmFnZSBtZXNzYWdlIHRyYWZmaWMuICBJbiBwYXJ0aWN1bGFyIFZlbnVzIG11c3QKKyAgYmUgYWJsZSB0byByZXRyaWV2ZSBhbmQgcGxhY2UgbWVzc2FnZXMgYW5kIHRvIGJlIG5vdGlmaWVkIG9mIHRoZQorICBhcnJpdmFsIG9mIGEgbmV3IG1lc3NhZ2UuIFRoZSBub3RpZmljYXRpb24gbXVzdCBiZSB0aHJvdWdoIGEgbWVjaGFuaXNtCisgIHdoaWNoIGRvZXMgbm90IGJsb2NrIFZlbnVzIHNpbmNlIFZlbnVzIG11c3QgYXR0ZW5kIHRvIG90aGVyIHRhc2tzIGV2ZW4KKyAgd2hlbiBubyBtZXNzYWdlcyBhcmUgd2FpdGluZyBvciBiZWluZyBwcm9jZXNzZWQuCisKKworCisKKworCisgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VzIG9mIHRoZSBDb2RhIEZTIERyaXZlcgorCisgIEZ1cnRoZXJtb3JlIHRoZSBGUyBsYXllciBwcm92aWRlcyBmb3IgYSBzcGVjaWFsIHBhdGggb2YgY29tbXVuaWNhdGlvbgorICBiZXR3ZWVuIGEgdXNlciBwcm9jZXNzIGFuZCBWZW51cywgY2FsbGVkIHRoZSBwaW9jdGwgaW50ZXJmYWNlLiBUaGUKKyAgcGlvY3RsIGludGVyZmFjZSBpcyB1c2VkIGZvciBDb2RhIHNwZWNpZmljIHNlcnZpY2VzLCBzdWNoIGFzCisgIHJlcXVlc3RpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcnNpc3RlbnQgY2FjaGUgbWFuYWdlZCBieQorICBWZW51cy4gSGVyZSB0aGUgaW52b2x2ZW1lbnQgb2YgdGhlIGtlcm5lbCBpcyBtaW5pbWFsLiAgSXQgaWRlbnRpZmllcworICB0aGUgY2FsbGluZyBwcm9jZXNzIGFuZCBwYXNzZXMgdGhlIGluZm9ybWF0aW9uIG9uIHRvIFZlbnVzLiAgV2hlbgorICBWZW51cyByZXBsaWVzIHRoZSByZXNwb25zZSBpcyBwYXNzZWQgYmFjayB0byB0aGUgY2FsbGVyIGluIHVubW9kaWZpZWQKKyAgZm9ybS4KKworICBGaW5hbGx5IFZlbnVzIGFsbG93cyB0aGUga2VybmVsIEZTIGRyaXZlciB0byBjYWNoZSB0aGUgcmVzdWx0cyBmcm9tCisgIGNlcnRhaW4gc2VydmljZXMuICBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgZXhjZXNzaXZlIGNvbnRleHQgc3dpdGNoZXMKKyAgYW5kIHJlc3VsdHMgaW4gYW4gZWZmaWNpZW50IHN5c3RlbS4gIEhvd2V2ZXIsIFZlbnVzIG1heSBhY3F1aXJlCisgIGluZm9ybWF0aW9uLCBmb3IgZXhhbXBsZSBmcm9tIHRoZSBuZXR3b3JrIHdoaWNoIGltcGxpZXMgdGhhdCBjYWNoZWQKKyAgaW5mb3JtYXRpb24gbXVzdCBiZSBmbHVzaGVkIG9yIHJlcGxhY2VkLiBWZW51cyB0aGVuIG1ha2VzIGEgZG93bmNhbGwKKyAgdG8gdGhlIENvZGEgRlMgbGF5ZXIgdG8gcmVxdWVzdCBmbHVzaGVzIG9yIHVwZGF0ZXMgaW4gdGhlIGNhY2hlLiAgVGhlCisgIGtlcm5lbCBGUyBkcml2ZXIgaGFuZGxlcyBzdWNoIHJlcXVlc3RzIHN5bmNocm9ub3VzbHkuCisKKyAgQW1vbmcgdGhlc2UgaW50ZXJmYWNlcyB0aGUgVkZTIGludGVyZmFjZSBhbmQgdGhlIGZhY2lsaXR5IHRvIHBsYWNlLAorICByZWNlaXZlIGFuZCBiZSBub3RpZmllZCBvZiBtZXNzYWdlcyBhcmUgcGxhdGZvcm0gc3BlY2lmaWMuICBXZSB3aWxsCisgIG5vdCBnbyBpbnRvIHRoZSBjYWxscyBleHBvcnRlZCB0byB0aGUgVkZTIGxheWVyIGJ1dCB3ZSB3aWxsIHN0YXRlIHRoZQorICByZXF1aXJlbWVudHMgb2YgdGhlIG1lc3NhZ2UgZXhjaGFuZ2UgbWVjaGFuaXNtLgorCisgIDB3cGFnZQorCisgIDMIMy4ILiAgVAhUaAhoZQhlIG0IbWUIZXMIc3MIc2EIYWcIZ2UIZSBsCGxhCGF5CHllCGVyCHIKKworCisKKyAgQXQgdGhlIGxvd2VzdCBsZXZlbCB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIFZlbnVzIGFuZCB0aGUgRlMgZHJpdmVyCisgIHByb2NlZWRzIHRocm91Z2ggbWVzc2FnZXMuICBUaGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcHJvY2Vzc2VzCisgIHJlcXVlc3RpbmcgQ29kYSBmaWxlIHNlcnZpY2UgYW5kIFZlbnVzIHJlbGllcyBvbiBibG9ja2luZyBhbmQgd2FraW5nCisgIHVwIHByb2Nlc3Nlcy4gIFRoZSBDb2RhIEZTIGRyaXZlciBwcm9jZXNzZXMgVkZTLSBhbmQgcGlvY3RsLXJlcXVlc3RzCisgIG9uIGJlaGFsZiBvZiBhIHByb2Nlc3MgUCwgY3JlYXRlcyBtZXNzYWdlcyBmb3IgVmVudXMsIGF3YWl0cyByZXBsaWVzCisgIGFuZCBmaW5hbGx5IHJldHVybnMgdG8gdGhlIGNhbGxlci4gIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZXhjaGFuZ2UKKyAgb2YgbWVzc2FnZXMgaXMgcGxhdGZvcm0gc3BlY2lmaWMsIGJ1dCB0aGUgc2VtYW50aWNzIGhhdmUgKHNvIGZhcikKKyAgYXBwZWFyZWQgdG8gYmUgZ2VuZXJhbGx5IGFwcGxpY2FibGUuICBEYXRhIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgYnkgdGhlCisgIEZTIERyaXZlciBpbiBrZXJuZWwgbWVtb3J5IG9uIGJlaGFsZiBvZiBQIGFuZCBjb3BpZWQgdG8gdXNlciBtZW1vcnkgaW4KKyAgVmVudXMuCisKKyAgVGhlIEZTIERyaXZlciB3aGlsZSBzZXJ2aWNpbmcgUCBtYWtlcyB1cGNhbGxzIHRvIFZlbnVzLiAgU3VjaCBhbgorICB1cGNhbGwgaXMgZGlzcGF0Y2hlZCB0byBWZW51cyBieSBjcmVhdGluZyBhIG1lc3NhZ2Ugc3RydWN0dXJlLiAgVGhlCisgIHN0cnVjdHVyZSBjb250YWlucyB0aGUgaWRlbnRpZmljYXRpb24gb2YgUCwgdGhlIG1lc3NhZ2Ugc2VxdWVuY2UKKyAgbnVtYmVyLCB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBhbmQgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGluIGtlcm5lbAorICBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0LiAgU2luY2UgdGhlIGRhdGEgYnVmZmVyIGlzIHJlLXVzZWQgdG8gaG9sZCB0aGUKKyAgcmVwbHkgZnJvbSBWZW51cywgdGhlcmUgaXMgYSBmaWVsZCBmb3IgdGhlIHNpemUgb2YgdGhlIHJlcGx5LiAgQSBmbGFncworICBmaWVsZCBpcyB1c2VkIGluIHRoZSBtZXNzYWdlIHRvIHByZWNpc2VseSByZWNvcmQgdGhlIHN0YXR1cyBvZiB0aGUKKyAgbWVzc2FnZS4gIEFkZGl0aW9uYWwgcGxhdGZvcm0gZGVwZW5kZW50IHN0cnVjdHVyZXMgaW52b2x2ZSBwb2ludGVycyB0bworICBkZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZXNzYWdlIG9uIHF1ZXVlcyBhbmQgcG9pbnRlcnMgdG8KKyAgc3luY2hyb25pemF0aW9uIG9iamVjdHMuICBJbiB0aGUgdXBjYWxsIHJvdXRpbmUgdGhlIG1lc3NhZ2Ugc3RydWN0dXJlCisgIGlzIGZpbGxlZCBpbiwgZmxhZ3MgYXJlIHNldCB0byAwLCBhbmQgaXQgaXMgcGxhY2VkIG9uIHRoZSBfCHBfCGVfCG5fCGRfCGlfCG5fCGcKKyAgcXVldWUuICBUaGUgcm91dGluZSBjYWxsaW5nIHVwY2FsbCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyB0aGUKKyAgZGF0YSBidWZmZXI7IGl0cyBzdHJ1Y3R1cmUgd2lsbCBiZSBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KKworICBBIGZhY2lsaXR5IG11c3QgZXhpc3QgdG8gbm90aWZ5IFZlbnVzIHRoYXQgdGhlIG1lc3NhZ2UgaGFzIGJlZW4KKyAgY3JlYXRlZCwgYW5kIGltcGxlbWVudGVkIHVzaW5nIGF2YWlsYWJsZSBzeW5jaHJvbml6YXRpb24gb2JqZWN0cyBpbgorICB0aGUgT1MuIFRoaXMgbm90aWZpY2F0aW9uIGlzIGRvbmUgaW4gdGhlIHVwY2FsbCBjb250ZXh0IG9mIHRoZSBwcm9jZXNzCisgIFAuIFdoZW4gdGhlIG1lc3NhZ2UgaXMgb24gdGhlIHBlbmRpbmcgcXVldWUsIHByb2Nlc3MgUCBjYW5ub3QgcHJvY2VlZAorICBpbiB1cGNhbGwuICBUaGUgKGtlcm5lbCBtb2RlKSBwcm9jZXNzaW5nIG9mIFAgaW4gdGhlIGZpbGVzeXN0ZW0KKyAgcmVxdWVzdCByb3V0aW5lIG11c3QgYmUgc3VzcGVuZGVkIHVudGlsIFZlbnVzIGhhcyByZXBsaWVkLiAgVGhlcmVmb3JlCisgIHRoZSBjYWxsaW5nIHRocmVhZCBpbiBQIGlzIGJsb2NrZWQgaW4gdXBjYWxsLiAgQSBwb2ludGVyIGluIHRoZQorICBtZXNzYWdlIHN0cnVjdHVyZSB3aWxsIGxvY2F0ZSB0aGUgc3luY2hyb25pemF0aW9uIG9iamVjdCBvbiB3aGljaCBQIGlzCisgIHNsZWVwaW5nLgorCisgIFZlbnVzIGRldGVjdHMgdGhlIG5vdGlmaWNhdGlvbiB0aGF0IGEgbWVzc2FnZSBoYXMgYXJyaXZlZCwgYW5kIHRoZSBGUworICBkcml2ZXIgYWxsb3cgVmVudXMgdG8gcmV0cmlldmUgdGhlIG1lc3NhZ2Ugd2l0aCBhIGdldG1zZ19mcm9tX2tlcm5lbAorICBjYWxsLiBUaGlzIGFjdGlvbiBmaW5pc2hlcyBpbiB0aGUga2VybmVsIGJ5IHB1dHRpbmcgdGhlIG1lc3NhZ2Ugb24gdGhlCisgIHF1ZXVlIG9mIHByb2Nlc3NpbmcgbWVzc2FnZXMgYW5kIHNldHRpbmcgZmxhZ3MgdG8gUkVBRC4gIFZlbnVzIGlzCisgIHBhc3NlZCB0aGUgY29udGVudHMgb2YgdGhlIGRhdGEgYnVmZmVyLiBUaGUgZ2V0bXNnX2Zyb21fa2VybmVsIGNhbGwKKyAgbm93IHJldHVybnMgYW5kIFZlbnVzIHByb2Nlc3NlcyB0aGUgcmVxdWVzdC4KKworICBBdCBzb21lIGxhdGVyIHBvaW50IHRoZSBGUyBkcml2ZXIgcmVjZWl2ZXMgYSBtZXNzYWdlIGZyb20gVmVudXMsCisgIG5hbWVseSB3aGVuIFZlbnVzIGNhbGxzIHNlbmRtc2dfdG9fa2VybmVsLiAgQXQgdGhpcyBtb21lbnQgdGhlIENvZGEgRlMKKyAgZHJpdmVyIGxvb2tzIGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSBhbmQgZGVjaWRlcyBpZjoKKworCisgICsIbyAgdGhlIG1lc3NhZ2UgaXMgYSByZXBseSBmb3IgYSBzdXNwZW5kZWQgdGhyZWFkIFAuICBJZiBzbyBpdCByZW1vdmVzCisgICAgIHRoZSBtZXNzYWdlIGZyb20gdGhlIHByb2Nlc3NpbmcgcXVldWUgYW5kIG1hcmtzIHRoZSBtZXNzYWdlIGFzCisgICAgIFdSSVRURU4uICBGaW5hbGx5LCB0aGUgRlMgZHJpdmVyIHVuYmxvY2tzIFAgKHN0aWxsIGluIHRoZSBrZXJuZWwKKyAgICAgbW9kZSBjb250ZXh0IG9mIFZlbnVzKSBhbmQgdGhlIHNlbmRtc2dfdG9fa2VybmVsIGNhbGwgcmV0dXJucyB0bworICAgICBWZW51cy4gIFRoZSBwcm9jZXNzIFAgd2lsbCBiZSBzY2hlZHVsZWQgYXQgc29tZSBwb2ludCBhbmQgY29udGludWVzCisgICAgIHByb2Nlc3NpbmcgaXRzIHVwY2FsbCB3aXRoIHRoZSBkYXRhIGJ1ZmZlciByZXBsYWNlZCB3aXRoIHRoZSByZXBseQorICAgICBmcm9tIFZlbnVzLgorCisgICsIbyAgVGhlIG1lc3NhZ2UgaXMgYSBfCGRfCG9fCHdfCG5fCGNfCGFfCGxfCGwuICBBIGRvd25jYWxsIGlzIGEgcmVxdWVzdCBmcm9tIFZlbnVzIHRvCisgICAgIHRoZSBGUyBEcml2ZXIuIFRoZSBGUyBkcml2ZXIgcHJvY2Vzc2VzIHRoZSByZXF1ZXN0IGltbWVkaWF0ZWx5CisgICAgICh1c3VhbGx5IGEgY2FjaGUgZXZpY3Rpb24gb3IgcmVwbGFjZW1lbnQpIGFuZCB3aGVuIGl0IGZpbmlzaGVzCisgICAgIHNlbmRtc2dfdG9fa2VybmVsIHJldHVybnMuCisKKyAgTm93IFAgYXdha2VzIGFuZCBjb250aW51ZXMgcHJvY2Vzc2luZyB1cGNhbGwuICBUaGVyZSBhcmUgc29tZQorICBzdWJ0bGV0aWVzIHRvIHRha2UgYWNjb3VudCBvZi4gRmlyc3QgUCB3aWxsIGRldGVybWluZSBpZiBpdCB3YXMgd29rZW4KKyAgdXAgaW4gdXBjYWxsIGJ5IGEgc2lnbmFsIGZyb20gc29tZSBvdGhlciBzb3VyY2UgKGZvciBleGFtcGxlIGFuCisgIGF0dGVtcHQgdG8gdGVybWluYXRlIFApIG9yIGFzIGlzIG5vcm1hbGx5IHRoZSBjYXNlIGJ5IFZlbnVzIGluIGl0cworICBzZW5kbXNnX3RvX2tlcm5lbCBjYWxsLiAgSW4gdGhlIG5vcm1hbCBjYXNlLCB0aGUgdXBjYWxsIHJvdXRpbmUgd2lsbAorICBkZWFsbG9jYXRlIHRoZSBtZXNzYWdlIHN0cnVjdHVyZSBhbmQgcmV0dXJuLiAgVGhlIEZTIHJvdXRpbmUgY2FuIHByb2NlZWQKKyAgd2l0aCBpdHMgcHJvY2Vzc2luZy4KKworCisKKworCisKKworICAgICAgICAgICAgICAgICAgICAgIFNsZWVwaW5nIGFuZCBJUEMgYXJyYW5nZW1lbnRzCisKKyAgSW4gY2FzZSBQIGlzIHdva2VuIHVwIGJ5IGEgc2lnbmFsIGFuZCBub3QgYnkgVmVudXMsIGl0IHdpbGwgZmlyc3QgbG9vaworICBhdCB0aGUgZmxhZ3MgZmllbGQuICBJZiB0aGUgbWVzc2FnZSBpcyBub3QgeWV0IFJFQUQsIHRoZSBwcm9jZXNzIFAgY2FuCisgIGhhbmRsZSBpdHMgc2lnbmFsIHdpdGhvdXQgbm90aWZ5aW5nIFZlbnVzLiAgSWYgVmVudXMgaGFzIFJFQUQsIGFuZAorICB0aGUgcmVxdWVzdCBzaG91bGQgbm90IGJlIHByb2Nlc3NlZCwgUCBjYW4gc2VuZCBWZW51cyBhIHNpZ25hbCBtZXNzYWdlCisgIHRvIGluZGljYXRlIHRoYXQgaXQgc2hvdWxkIGRpc3JlZ2FyZCB0aGUgcHJldmlvdXMgbWVzc2FnZS4gIFN1Y2gKKyAgc2lnbmFscyBhcmUgcHV0IGluIHRoZSBxdWV1ZSBhdCB0aGUgaGVhZCwgYW5kIHJlYWQgZmlyc3QgYnkgVmVudXMuICBJZgorICB0aGUgbWVzc2FnZSBpcyBhbHJlYWR5IG1hcmtlZCBhcyBXUklUVEVOIGl0IGlzIHRvbyBsYXRlIHRvIHN0b3AgdGhlCisgIHByb2Nlc3NpbmcuICBUaGUgVkZTIHJvdXRpbmUgd2lsbCBub3cgY29udGludWUuICAoLS0gSWYgYSBWRlMgcmVxdWVzdAorICBpbnZvbHZlcyBtb3JlIHRoYW4gb25lIHVwY2FsbCwgdGhpcyBjYW4gbGVhZCB0byBjb21wbGljYXRlZCBzdGF0ZSwgYW4KKyAgZXh0cmEgZmllbGQgImhhbmRsZV9zaWduYWxzIiBjb3VsZCBiZSBhZGRlZCBpbiB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUKKyAgdG8gaW5kaWNhdGUgcG9pbnRzIG9mIG5vIHJldHVybiBoYXZlIGJlZW4gcGFzc2VkLi0tKQorCisKKworICAzCDMuCC4xCDEuCC4gIEkISW0IbXAIcGwIbGUIZW0IbWUIZW4IbnQIdGEIYXQIdGkIaW8Ib24IbiBkCGRlCGV0CHRhCGFpCGlsCGxzCHMKKworICBUaGUgVW5peCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1lY2hhbmlzbSBoYXMgYmVlbiB0aHJvdWdoIHRoZQorICBpbXBsZW1lbnRhdGlvbiBvZiBhIGNoYXJhY3RlciBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIENvZGEuICBWZW51cworICByZXRyaWV2ZXMgbWVzc2FnZXMgYnkgZG9pbmcgYSByZWFkIG9uIHRoZSBkZXZpY2UsIHJlcGxpZXMgYXJlIHNlbnQKKyAgd2l0aCBhIHdyaXRlIGFuZCBub3RpZmljYXRpb24gaXMgdGhyb3VnaCB0aGUgc2VsZWN0IHN5c3RlbSBjYWxsIG9uIHRoZQorICBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBkZXZpY2UuICBUaGUgcHJvY2VzcyBQIGlzIGtlcHQgd2FpdGluZyBvbiBhbgorICBpbnRlcnJ1cHRpYmxlIHdhaXQgcXVldWUgb2JqZWN0LgorCisgIEluIFdpbmRvd3MgTlQgYW5kIHRoZSBEUE1JIFdpbmRvd3MgOTUgaW1wbGVtZW50YXRpb24gYSBEZXZpY2VJb0NvbnRyb2wKKyAgY2FsbCBpcyB1c2VkLiAgVGhlIERldmljZUlvQ29udHJvbCBjYWxsIGlzIGRlc2lnbmVkIHRvIGNvcHkgYnVmZmVycworICBmcm9tIHVzZXIgbWVtb3J5IHRvIGtlcm5lbCBtZW1vcnkgd2l0aCBPUENPREVTLiBUaGUgc2VuZG1zZ190b19rZXJuZWwKKyAgaXMgaXNzdWVkIGFzIGEgc3luY2hyb25vdXMgY2FsbCwgd2hpbGUgdGhlIGdldG1zZ19mcm9tX2tlcm5lbCBjYWxsIGlzCisgIGFzeW5jaHJvbm91cy4gIFdpbmRvd3MgRXZlbnRPYmplY3RzIGFyZSB1c2VkIGZvciBub3RpZmljYXRpb24gb2YKKyAgbWVzc2FnZSBhcnJpdmFsLiAgVGhlIHByb2Nlc3MgUCBpcyBrZXB0IHdhaXRpbmcgb24gYSBLZXJuZWxFdmVudAorICBvYmplY3QgaW4gTlQgYW5kIGEgc2VtYXBob3JlIGluIFdpbmRvd3MgOTUuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguICBUCFRoCGhlCGUgaQhpbghudAh0ZQhlcghyZghmYQhhYwhjZQhlIGEIYXQIdCB0CHRoCGhlCGUgYwhjYQhhbAhsbAhsIGwIbGUIZXYIdmUIZWwIbAorCisKKyAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgdXBjYWxscyBhIENvZGEgRlMgZHJpdmVyIGNhbiBtYWtlIHRvIFZlbnVzLgorICBFYWNoIG9mIHRoZXNlIHVwY2FsbHMgbWFrZSB1c2Ugb2YgdHdvIHN0cnVjdHVyZXM6IGlucHV0QXJncyBhbmQKKyAgb3V0cHV0QXJncy4gICBJbiBwc2V1ZG8gQk5GIGZvcm0gdGhlIHN0cnVjdHVyZXMgdGFrZSB0aGUgZm9sbG93aW5nCisgIGZvcm06CisKKworICBzdHJ1Y3QgaW5wdXRBcmdzIHsKKyAgICAgIHVfbG9uZyBvcGNvZGU7CisgICAgICB1X2xvbmcgdW5pcXVlOyAgICAgLyogS2VlcCBtdWx0aXBsZSBvdXRzdGFuZGluZyBtc2dzIGRpc3RpbmN0ICovCisgICAgICB1X3Nob3J0IHBpZDsgICAgICAgICAgICAgICAgIC8qIENvbW1vbiB0byBhbGwgKi8KKyAgICAgIHVfc2hvcnQgcGdpZDsgICAgICAgICAgICAgICAgLyogQ29tbW9uIHRvIGFsbCAqLworICAgICAgc3RydWN0IENvZGFDcmVkIGNyZWQ7ICAgICAgICAvKiBDb21tb24gdG8gYWxsICovCisKKyAgICAgIDx1bmlvbiAiaW4iIG9mIGNhbGwgZGVwZW5kZW50IHBhcnRzIG9mIGlucHV0QXJncz4KKyAgfTsKKworICBzdHJ1Y3Qgb3V0cHV0QXJncyB7CisgICAgICB1X2xvbmcgb3Bjb2RlOworICAgICAgdV9sb25nIHVuaXF1ZTsgICAgICAgLyogS2VlcCBtdWx0aXBsZSBvdXRzdGFuZGluZyBtc2dzIGRpc3RpbmN0ICovCisgICAgICB1X2xvbmcgcmVzdWx0OworCisgICAgICA8dW5pb24gIm91dCIgb2YgY2FsbCBkZXBlbmRlbnQgcGFydHMgb2YgaW5wdXRBcmdzPgorICB9OworCisKKworICBCZWZvcmUgZ29pbmcgb24gbGV0IHVzIGVsdWNpZGF0ZSB0aGUgcm9sZSBvZiB0aGUgdmFyaW91cyBmaWVsZHMuIFRoZQorICBpbnB1dEFyZ3Mgc3RhcnQgd2l0aCB0aGUgb3Bjb2RlIHdoaWNoIGRlZmluZXMgdGhlIHR5cGUgb2Ygc2VydmljZQorICByZXF1ZXN0ZWQgZnJvbSBWZW51cy4gVGhlcmUgYXJlIGFwcHJveGltYXRlbHkgMzAgdXBjYWxscyBhdCBwcmVzZW50CisgIHdoaWNoIHdlIHdpbGwgZGlzY3Vzcy4gICBUaGUgdW5pcXVlIGZpZWxkIGxhYmVscyB0aGUgaW5wdXRBcmcgd2l0aCBhCisgIHVuaXF1ZSBudW1iZXIgd2hpY2ggd2lsbCBpZGVudGlmeSB0aGUgbWVzc2FnZSB1bmlxdWVseS4gIEEgcHJvY2VzcyBhbmQKKyAgcHJvY2VzcyBncm91cCBpZCBhcmUgcGFzc2VkLiAgRmluYWxseSB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIGNhbGxlcgorICBhcmUgaW5jbHVkZWQuCisKKyAgQmVmb3JlIGRlbHZpbmcgaW50byB0aGUgc3BlY2lmaWMgY2FsbHMgd2UgbmVlZCB0byBkaXNjdXNzIGEgdmFyaWV0eSBvZgorICBkYXRhIHN0cnVjdHVyZXMgc2hhcmVkIGJ5IHRoZSBrZXJuZWwgYW5kIFZlbnVzLgorCisKKworCisgIDQINC4ILjEIMS4ILiAgRAhEYQhhdAh0YQhhIHMIc3QIdHIIcnUIdWMIY3QIdHUIdXIIcmUIZXMIcyBzCHNoCGhhCGFyCHJlCGVkCGQgYghieQh5IHQIdGgIaGUIZSBrCGtlCGVyCHJuCG5lCGVsCGwgYQhhbghuZAhkIFYIVmUIZW4IbnUIdXMIcworCisKKyAgVGhlIENvZGFDcmVkIHN0cnVjdHVyZSBkZWZpbmVzIGEgdmFyaWV0eSBvZiB1c2VyIGFuZCBncm91cCBpZHMgYXMKKyAgdGhleSBhcmUgc2V0IGZvciB0aGUgY2FsbGluZyBwcm9jZXNzLiBUaGUgdnVpZF90IGFuZCBndWlkX3QgYXJlIDMyIGJpdAorICB1bnNpZ25lZCBpbnRlZ2Vycy4gIEl0IGFsc28gZGVmaW5lcyBncm91cCBtZW1iZXJzaGlwIGluIGFuIGFycmF5LiAgT24KKyAgVW5peCB0aGUgQ29kYUNyZWQgaGFzIHByb3ZlbiBzdWZmaWNpZW50IHRvIGltcGxlbWVudCBnb29kIHNlY3VyaXR5CisgIHNlbWFudGljcyBmb3IgQ29kYSBidXQgdGhlIHN0cnVjdHVyZSBtYXkgaGF2ZSB0byB1bmRlcmdvIG1vZGlmaWNhdGlvbgorICBmb3IgdGhlIFdpbmRvd3MgZW52aXJvbm1lbnQgd2hlbiB0aGVzZSBtYXR1cmUuCisKKyAgc3RydWN0IENvZGFDcmVkIHsKKyAgICAgIHZ1aWRfdCBjcl91aWQsIGNyX2V1aWQsIGNyX3N1aWQsIGNyX2ZzdWlkOyAvKiBSZWFsLCBlZmZlY3RpdmUsIHNldCwgZnMgdWlkKi8KKyAgICAgIHZnaWRfdCBjcl9naWQsIGNyX2VnaWQsIGNyX3NnaWQsIGNyX2ZzZ2lkOyAvKiBzYW1lIGZvciBncm91cHMgKi8KKyAgICAgIHZnaWRfdCBjcl9ncm91cHNbTkdST1VQU107ICAgICAgICAvKiBHcm91cCBtZW1iZXJzaGlwIGZvciBjYWxsZXIgKi8KKyAgfTsKKworCisKKyAgTghOTwhPVAhURQhFIEl0IGlzIHF1ZXN0aW9uYWJsZSBpZiB3ZSBuZWVkIENvZGFDcmVkcyBpbiBWZW51cy4gRmluYWxseSBWZW51cworICBkb2Vzbid0IGtub3cgYWJvdXQgZ3JvdXBzLCBhbHRob3VnaCBpdCBkb2VzIGNyZWF0ZSBmaWxlcyB3aXRoIHRoZQorICBkZWZhdWx0IHVpZC9naWQuICBQZXJoYXBzIHRoZSBsaXN0IG9mIGdyb3VwIG1lbWJlcnNoaXAgaXMgc3VwZXJmbHVvdXMuCisKKworICBUaGUgbmV4dCBpdGVtIGlzIHRoZSBmdW5kYW1lbnRhbCBpZGVudGlmaWVyIHVzZWQgdG8gaWRlbnRpZnkgQ29kYQorICBmaWxlcywgdGhlIFZpY2VGaWQuICBBIGZpZCBvZiBhIGZpbGUgdW5pcXVlbHkgZGVmaW5lcyBhIGZpbGUgb3IKKyAgZGlyZWN0b3J5IGluIHRoZSBDb2RhIGZpbGVzeXN0ZW0gd2l0aGluIGEgXwhjXwhlXwhsXwhsLiAgICgtLSBBIF8IY18IZV8IbF8IbCBpcyBhCisgIGdyb3VwIG9mIENvZGEgc2VydmVycyBhY3RpbmcgdW5kZXIgdGhlIGFlZ2lzIG9mIGEgc2luZ2xlIHN5c3RlbQorICBjb250cm9sIG1hY2hpbmUgb3IgU0NNLiBTZWUgdGhlIENvZGEgQWRtaW5pc3RyYXRpb24gbWFudWFsIGZvciBhCisgIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSByb2xlIG9mIHRoZSBTQ00uLS0pCisKKworICB0eXBlZGVmIHN0cnVjdCBWaWNlRmlkIHsKKyAgICAgIFZvbHVtZUlkIFZvbHVtZTsKKyAgICAgIFZub2RlSWQgVm5vZGU7CisgICAgICBVbmlxdWVfdCBVbmlxdWU7CisgIH0gVmljZUZpZDsKKworCisKKyAgRWFjaCBvZiB0aGUgY29uc3RpdHVlbnQgZmllbGRzOiBWb2x1bWVJZCwgVm5vZGVJZCBhbmQgVW5pcXVlX3QgYXJlCisgIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2Vycy4gIFdlIGVudmlzYWdlIHRoYXQgYSBmdXJ0aGVyIGZpZWxkIHdpbGwgbmVlZAorICB0byBiZSBwcmVmaXhlZCB0byBpZGVudGlmeSB0aGUgQ29kYSBjZWxsOyB0aGlzIHdpbGwgcHJvYmFibHkgdGFrZSB0aGUKKyAgZm9ybSBvZiBhIElwdjYgc2l6ZSBJUCBhZGRyZXNzIG5hbWluZyB0aGUgQ29kYSBjZWxsIHRocm91Z2ggRE5TLgorCisgIFRoZSBuZXh0IGltcG9ydGFudCBzdHJ1Y3R1cmUgc2hhcmVkIGJldHdlZW4gVmVudXMgYW5kIHRoZSBrZXJuZWwgaXMKKyAgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGZpbGUuICBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIHRvCisgIGV4Y2hhbmdlIGluZm9ybWF0aW9uLiAgSXQgaGFzIHJvb20gZm9yIGZ1dHVyZSBleHRlbnNpb25zIHN1Y2ggYXMKKyAgc3VwcG9ydCBmb3IgZGV2aWNlIGZpbGVzIChjdXJyZW50bHkgbm90IHByZXNlbnQgaW4gQ29kYSkuCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHN0cnVjdCBjb2RhX3ZhdHRyIHsKKyAgICAgICAgICBlbnVtIGNvZGFfdnR5cGUgdmFfdHlwZTsgICAgICAgIC8qIHZub2RlIHR5cGUgKGZvciBjcmVhdGUpICovCisgICAgICAgICAgdV9zaG9ydCAgICAgICAgIHZhX21vZGU7ICAgICAgICAvKiBmaWxlcyBhY2Nlc3MgbW9kZSBhbmQgdHlwZSAqLworICAgICAgICAgIHNob3J0ICAgICAgICAgICB2YV9ubGluazsgICAgICAgLyogbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gZmlsZSAqLworICAgICAgICAgIHZ1aWRfdCAgICAgICAgICB2YV91aWQ7ICAgICAgICAgLyogb3duZXIgdXNlciBpZCAqLworICAgICAgICAgIHZnaWRfdCAgICAgICAgICB2YV9naWQ7ICAgICAgICAgLyogb3duZXIgZ3JvdXAgaWQgKi8KKyAgICAgICAgICBsb25nICAgICAgICAgICAgdmFfZnNpZDsgICAgICAgIC8qIGZpbGUgc3lzdGVtIGlkIChkZXYgZm9yIG5vdykgKi8KKyAgICAgICAgICBsb25nICAgICAgICAgICAgdmFfZmlsZWlkOyAgICAgIC8qIGZpbGUgaWQgKi8KKyAgICAgICAgICB1X3F1YWRfdCAgICAgICAgdmFfc2l6ZTsgICAgICAgIC8qIGZpbGUgc2l6ZSBpbiBieXRlcyAqLworICAgICAgICAgIGxvbmcgICAgICAgICAgICB2YV9ibG9ja3NpemU7ICAgLyogYmxvY2tzaXplIHByZWZlcnJlZCBmb3IgaS9vICovCisgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHZhX2F0aW1lOyAgICAgICAvKiB0aW1lIG9mIGxhc3QgYWNjZXNzICovCisgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHZhX210aW1lOyAgICAgICAvKiB0aW1lIG9mIGxhc3QgbW9kaWZpY2F0aW9uICovCisgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHZhX2N0aW1lOyAgICAgICAvKiB0aW1lIGZpbGUgY2hhbmdlZCAqLworICAgICAgICAgIHVfbG9uZyAgICAgICAgICB2YV9nZW47ICAgICAgICAgLyogZ2VuZXJhdGlvbiBudW1iZXIgb2YgZmlsZSAqLworICAgICAgICAgIHVfbG9uZyAgICAgICAgICB2YV9mbGFnczsgICAgICAgLyogZmxhZ3MgZGVmaW5lZCBmb3IgZmlsZSAqLworICAgICAgICAgIGRldl90ICAgICAgICAgICB2YV9yZGV2OyAgICAgICAgLyogZGV2aWNlIHNwZWNpYWwgZmlsZSByZXByZXNlbnRzICovCisgICAgICAgICAgdV9xdWFkX3QgICAgICAgIHZhX2J5dGVzOyAgICAgICAvKiBieXRlcyBvZiBkaXNrIHNwYWNlIGhlbGQgYnkgZmlsZSAqLworICAgICAgICAgIHVfcXVhZF90ICAgICAgICB2YV9maWxlcmV2OyAgICAgLyogZmlsZSBtb2RpZmljYXRpb24gbnVtYmVyICovCisgICAgICAgICAgdV9pbnQgICAgICAgICAgIHZhX3ZhZmxhZ3M7ICAgICAvKiBvcGVyYXRpb25zIGZsYWdzLCBzZWUgYmVsb3cgKi8KKyAgICAgICAgICBsb25nICAgICAgICAgICAgdmFfc3BhcmU7ICAgICAgIC8qIHJlbWFpbiBxdWFkIGFsaWduZWQgKi8KKyAgfTsKKworCisKKworICA0CDQuCC4yCDIuCC4gIFQIVGgIaGUIZSBwCHBpCGlvCG9jCGN0CHRsCGwgaQhpbghudAh0ZQhlcghyZghmYQhhYwhjZQhlCisKKworICBDb2RhIHNwZWNpZmljIHJlcXVlc3RzIGNhbiBiZSBtYWRlIGJ5IGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlIHBpb2N0bAorICBpbnRlcmZhY2UuIFRoZSBwaW9jdGwgaXMgaW1wbGVtZW50ZWQgYXMgYW4gb3JkaW5hcnkgaW9jdGwgb24gYQorICBmaWN0aXRpb3VzIGZpbGUgL2NvZGEvLkNPTlRST0wuICBUaGUgcGlvY3RsIGNhbGwgb3BlbnMgdGhpcyBmaWxlLCBnZXRzCisgIGEgZmlsZSBoYW5kbGUgYW5kIG1ha2VzIHRoZSBpb2N0bCBjYWxsLiBGaW5hbGx5IGl0IGNsb3NlcyB0aGUgZmlsZS4KKworICBUaGUga2VybmVsIGludm9sdmVtZW50IGluIHRoaXMgaXMgbGltaXRlZCB0byBwcm92aWRpbmcgdGhlIGZhY2lsaXR5IHRvCisgIG9wZW4gYW5kIGNsb3NlIGFuZCBwYXNzIHRoZSBpb2N0bCBtZXNzYWdlIF8IYV8Ibl8IZCB0byB2ZXJpZnkgdGhhdCBhIHBhdGggaW4KKyAgdGhlIHBpb2N0bCBkYXRhIGJ1ZmZlcnMgaXMgYSBmaWxlIGluIGEgQ29kYSBmaWxlc3lzdGVtLgorCisgIFRoZSBrZXJuZWwgaXMgaGFuZGVkIGEgZGF0YSBwYWNrZXQgb2YgdGhlIGZvcm06CisKKyAgICAgIHN0cnVjdCB7CisgICAgICAgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICAgICAgICBzdHJ1Y3QgVmljZUlvY3RsIHZpZGF0YTsKKyAgICAgICAgICBpbnQgZm9sbG93OworICAgICAgfSBkYXRhOworCisKKworICB3aGVyZQorCisKKyAgc3RydWN0IFZpY2VJb2N0bCB7CisgICAgICAgICAgY2FkZHJfdCBpbiwgb3V0OyAgICAgICAgLyogRGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBpbiwgb3Igb3V0ICovCisgICAgICAgICAgc2hvcnQgaW5fc2l6ZTsgICAgICAgICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgPD0gMksgKi8KKyAgICAgICAgICBzaG9ydCBvdXRfc2l6ZTsgICAgICAgICAvKiBNYXhpbXVtIHNpemUgb2Ygb3V0cHV0IGJ1ZmZlciwgPD0gMksgKi8KKyAgfTsKKworCisKKyAgVGhlIHBhdGggbXVzdCBiZSBhIENvZGEgZmlsZSwgb3RoZXJ3aXNlIHRoZSBpb2N0bCB1cGNhbGwgd2lsbCBub3QgYmUKKyAgbWFkZS4KKworICBOCE5PCE9UCFRFCEUgIFRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvZGUgYXJlIGEgbWVzcy4gIFdlIG5lZWQgdG8gY2xlYW4gdGhpcworICB1cC4KKworICBXZSBub3cgcHJvY2VlZCB0byBkb2N1bWVudCB0aGUgaW5kaXZpZHVhbCBjYWxsczoKKworICAwd3BhZ2UKKworICA0CDQuCC4zCDMuCC4gIHIIcm8Ib28Ib3QIdAorCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuIGVtcHR5CisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3Jvb3Rfb3V0IHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBWRmlkOworICAgICAgICAgICAgICAgIH0gY2ZzX3Jvb3Q7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGlzIGNhbGwgaXMgbWFkZSB0byBWZW51cyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mCisgIHRoZSBDb2RhIGZpbGVzeXN0ZW0uIElmIHRoZSByZXN1bHQgaXMgemVybywgdGhlIGNmc19yb290IHN0cnVjdHVyZQorICBjb250YWlucyB0aGUgVmljZUZpZCBvZiB0aGUgcm9vdCBvZiB0aGUgQ29kYSBmaWxlc3lzdGVtLiBJZiBhIG5vbi16ZXJvCisgIHJlc3VsdCBpcyBnZW5lcmF0ZWQsIGl0cyB2YWx1ZSBpcyBhIHBsYXRmb3JtIGRlcGVuZGVudCBlcnJvciBjb2RlCisgIGluZGljYXRpbmcgdGhlIGRpZmZpY3VsdHkgVmVudXMgZW5jb3VudGVyZWQgaW4gbG9jYXRpbmcgdGhlIHJvb3Qgb2YKKyAgdGhlIENvZGEgZmlsZXN5c3RlbS4KKworICAwd3BhZ2UKKworICA0CDQuCC40CDQuCC4gIGwIbG8Ib28Ib2sIa3UIdXAIcAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IEZpbmQgdGhlIFZpY2VGaWQgYW5kIHR5cGUgb2YgYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5IGlmIGl0CisgIGV4aXN0cy4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCAgY2ZzX2xvb2t1cF9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICpuYW1lOyAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfbG9va3VwOworCisKKworICAgICBvCG91CHV0CHQKKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfbG9va3VwX291dCB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgaW50IHZ0eXBlOworICAgICAgICAgICAgICAgIH0gY2ZzX2xvb2t1cDsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFRoaXMgY2FsbCBpcyBtYWRlIHRvIGRldGVybWluZSB0aGUgVmljZUZpZCBhbmQgZmlsZXR5cGUgb2YKKyAgYSBkaXJlY3RvcnkgZW50cnkuICBUaGUgZGlyZWN0b3J5IGVudHJ5IHJlcXVlc3RlZCBjYXJyaWVzIG5hbWUgbmFtZQorICBhbmQgVmVudXMgd2lsbCBzZWFyY2ggdGhlIGRpcmVjdG9yeSBpZGVudGlmaWVkIGJ5IGNmc19sb29rdXBfaW4uVkZpZC4KKyAgVGhlIHJlc3VsdCBtYXkgaW5kaWNhdGUgdGhhdCB0aGUgbmFtZSBkb2VzIG5vdCBleGlzdCwgb3IgdGhhdAorICBkaWZmaWN1bHR5IHdhcyBlbmNvdW50ZXJlZCBpbiBmaW5kaW5nIGl0IChlLmcuIGR1ZSB0byBkaXNjb25uZWN0aW9uKS4KKyAgSWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCB0aGUgZmllbGQgY2ZzX2xvb2t1cF9vdXQuVkZpZCBjb250YWlucyB0aGUKKyAgdGFyZ2V0cyBWaWNlRmlkIGFuZCBjZnNfbG9va3VwX291dC52dHlwZSB0aGUgY29kYV92dHlwZSBnaXZpbmcgdGhlCisgIHR5cGUgb2Ygb2JqZWN0IHRoZSBuYW1lIGRlc2lnbmF0ZXMuCisKKyAgVGhlIG5hbWUgb2YgdGhlIG9iamVjdCBpcyBhbiA4IGJpdCBjaGFyYWN0ZXIgc3RyaW5nIG9mIG1heGltdW0gbGVuZ3RoCisgIENGU19NQVhOQU1MRU4sIGN1cnJlbnRseSBzZXQgdG8gMjU2IChpbmNsdWRpbmcgYSAwIHRlcm1pbmF0b3IuKQorCisgIEl0IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IFZlbnVzIGJpdHdpc2Ugb3JzIHRoZSBmaWVsZAorICBjZnNfbG9va3VwLnZ0eXBlIHdpdGggQ0ZTX05PQ0FDSEUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IHNob3VsZAorICBub3QgYmUgcHV0IGluIHRoZSBrZXJuZWwgbmFtZSBjYWNoZS4KKworICBOCE5PCE9UCFRFCEUgVGhlIHR5cGUgb2YgdGhlIHZ0eXBlIGlzIGN1cnJlbnRseSB3cm9uZy4gIEl0IHNob3VsZCBiZQorICBjb2RhX3Z0eXBlLiBMaW51eCBkb2VzIG5vdCB0YWtlIG5vdGUgb2YgQ0ZTX05PQ0FDSEUuICBJdCBzaG91bGQuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguNQg1LgguICBnCGdlCGV0CHRhCGF0CHR0CHRyCHIKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBHZXQgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWxlLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19nZXRhdHRyX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBWRmlkOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOyAvKiBYWFhYWCAqLworICAgICAgICAgICAgICAgIH0gY2ZzX2dldGF0dHI7CisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19nZXRhdHRyX291dCB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CisgICAgICAgICAgICAgICAgfSBjZnNfZ2V0YXR0cjsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFRoaXMgY2FsbCByZXR1cm5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkKKyAgZmlkLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcyBFcnJvcnMgY2FuIG9jY3VyIGlmIHRoZSBvYmplY3Qgd2l0aCBmaWQgZG9lcyBub3QgZXhpc3QsIGlzCisgIHVuYWNjZXNzaWJsZSBvciBpZiB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBmZXRjaAorICBhdHRyaWJ1dGVzLgorCisgIE4ITm8Ib3QIdGUIZSBNYW55IGtlcm5lbCBGUyBkcml2ZXJzIChMaW51eCwgTlQgYW5kIFdpbmRvd3MgOTUpIG5lZWQgdG8gYWNxdWlyZQorICB0aGUgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIHRoZSBGaWQgZm9yIHRoZSBpbnN0YW50aWF0aW9uIG9mIGFuIGludGVybmFsCisgICJpbm9kZSIgb3IgIkZpbGVIYW5kbGUiLiAgQSBzaWduaWZpY2FudCBpbXByb3ZlbWVudCBpbiBwZXJmb3JtYW5jZSBvbgorICBzdWNoIHN5c3RlbXMgY291bGQgYmUgbWFkZSBieSBjb21iaW5pbmcgdGhlIF8IbF8Ib18Ib18Ia18IdV8IcCBhbmQgXwhnXwhlXwh0XwhhXwh0Xwh0XwhyIGNhbGxzCisgIGJvdGggYXQgdGhlIFZlbnVzL2tlcm5lbCBpbnRlcmFjdGlvbiBsZXZlbCBhbmQgYXQgdGhlIFJQQyBsZXZlbC4KKworICBUaGUgdmF0dHIgc3RydWN0dXJlIGluY2x1ZGVkIGluIHRoZSBpbnB1dCBhcmd1bWVudHMgaXMgc3VwZXJmbHVvdXMgYW5kCisgIHNob3VsZCBiZSByZW1vdmVkLgorCisgIDB3cGFnZQorCisgIDQINC4ILjYINi4ILiAgcwhzZQhldAh0YQhhdAh0dAh0cghyCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgU2V0IHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmlsZS4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfc2V0YXR0cl9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyAgICAgICAgICAgICAgICB9IGNmc19zZXRhdHRyOworCisKKworCisgICAgIG8Ib3UIdXQIdAorICAgICAgICBlbXB0eQorCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGUgc3RydWN0dXJlIGF0dHIgaXMgZmlsbGVkIHdpdGggYXR0cmlidXRlcyB0byBiZSBjaGFuZ2VkCisgIGluIEJTRCBzdHlsZS4gIEF0dHJpYnV0ZXMgbm90IHRvIGJlIGNoYW5nZWQgYXJlIHNldCB0byAtMSwgYXBhcnQgZnJvbQorICB2dHlwZSB3aGljaCBpcyBzZXQgdG8gVk5PTi4gT3RoZXIgYXJlIHNldCB0byB0aGUgdmFsdWUgdG8gYmUgYXNzaWduZWQuCisgIFRoZSBvbmx5IGF0dHJpYnV0ZXMgd2hpY2ggdGhlIEZTIGRyaXZlciBtYXkgcmVxdWVzdCB0byBjaGFuZ2UgYXJlIHRoZQorICBtb2RlLCBvd25lciwgZ3JvdXBpZCwgYXRpbWUsIG10aW1lIGFuZCBjdGltZS4gIFRoZSByZXR1cm4gdmFsdWUKKyAgaW5kaWNhdGVzIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMgQSB2YXJpZXR5IG9mIGVycm9ycyBjYW4gb2NjdXIuICBUaGUgb2JqZWN0IG1heSBub3QgZXhpc3QsIG1heQorICBiZSBpbmFjY2Vzc2libGUsIG9yIHBlcm1pc3Npb24gbWF5IG5vdCBiZSBncmFudGVkIGJ5IFZlbnVzLgorCisgIDB3cGFnZQorCisgIDQINC4ILjcINy4ILiAgYQhhYwhjYwhjZQhlcwhzcwhzCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkKKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfYWNjZXNzX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzOworICAgICAgICAgICAgICAgIH0gY2ZzX2FjY2VzczsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIGVtcHR5CisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFZlcmlmeSBpZiBhY2Nlc3MgdG8gdGhlIG9iamVjdCBpZGVudGlmaWVkIGJ5IFZGaWQgZm9yCisgIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJ5IGZsYWdzIGlzIHBlcm1pdHRlZC4gIFRoZSByZXN1bHQgaW5kaWNhdGVzIGlmCisgIGFjY2VzcyB3aWxsIGJlIGdyYW50ZWQuICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBDb2RhIHVzZXMKKyAgQUNMcyB0byBlbmZvcmNlIHByb3RlY3Rpb24gYW5kIHRoYXQgdWx0aW1hdGVseSB0aGUgc2VydmVycywgbm90IHRoZQorICBjbGllbnRzIGVuZm9yY2UgdGhlIHNlY3VyaXR5IG9mIHRoZSBzeXN0ZW0uICBUaGUgcmVzdWx0IG9mIHRoaXMgY2FsbAorICB3aWxsIGRlcGVuZCBvbiB3aGV0aGVyIGEgXwh0XwhvXwhrXwhlXwhuIGlzIGhlbGQgYnkgdGhlIHVzZXIuCisKKyAgRQhFcghycghybwhvcghycwhzIFRoZSBvYmplY3QgbWF5IG5vdCBleGlzdCwgb3IgdGhlIEFDTCBkZXNjcmliaW5nIHRoZSBwcm90ZWN0aW9uCisgIG1heSBub3QgYmUgYWNjZXNzaWJsZS4KKworICAwd3BhZ2UKKworICA0CDQuCC44CDguCC4gIGMIY3IIcmUIZWEIYXQIdGUIZQorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IEludm9rZWQgdG8gY3JlYXRlIGEgZmlsZQorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19jcmVhdGVfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CisgICAgICAgICAgICAgICAgICAgIGludCBleGNsOworICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKm5hbWU7ICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICB9IGNmc19jcmVhdGU7CisKKworCisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX2NyZWF0ZV9vdXQgeworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CisgICAgICAgICAgICAgICAgfSBjZnNfY3JlYXRlOworCisKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gIFRoaXMgdXBjYWxsIGlzIGludm9rZWQgdG8gcmVxdWVzdCBjcmVhdGlvbiBvZiBhIGZpbGUuCisgIFRoZSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGlkZW50aWZpZWQgYnkgVkZpZCwgaXRzIG5hbWUKKyAgd2lsbCBiZSBuYW1lLCBhbmQgdGhlIG1vZGUgd2lsbCBiZSBtb2RlLiAgSWYgZXhjbCBpcyBzZXQgYW4gZXJyb3Igd2lsbAorICBiZSByZXR1cm5lZCBpZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cy4gIElmIHRoZSBzaXplIGZpZWxkIGluIGF0dHIgaXMKKyAgc2V0IHRvIHplcm8gdGhlIGZpbGUgd2lsbCBiZSB0cnVuY2F0ZWQuICBUaGUgdWlkIGFuZCBnaWQgb2YgdGhlIGZpbGUKKyAgYXJlIHNldCBieSBjb252ZXJ0aW5nIHRoZSBDb2RhQ3JlZCB0byBhIHVpZCB1c2luZyBhIG1hY3JvIENSVE9VSUQKKyAgKHRoaXMgbWFjcm8gaXMgcGxhdGZvcm0gZGVwZW5kZW50KS4gIFVwb24gc3VjY2VzcyB0aGUgVkZpZCBhbmQKKyAgYXR0cmlidXRlcyBvZiB0aGUgZmlsZSBhcmUgcmV0dXJuZWQuICBUaGUgQ29kYSBGUyBEcml2ZXIgd2lsbCBub3JtYWxseQorICBpbnN0YW50aWF0ZSBhIHZub2RlLCBpbm9kZSBvciBmaWxlIGhhbmRsZSBhdCBrZXJuZWwgbGV2ZWwgZm9yIHRoZSBuZXcKKyAgb2JqZWN0LgorCisKKyAgRQhFcghycghybwhvcghycwhzIEEgdmFyaWV0eSBvZiBlcnJvcnMgY2FuIG9jY3VyLiBQZXJtaXNzaW9ucyBtYXkgYmUgaW5zdWZmaWNpZW50LgorICBJZiB0aGUgb2JqZWN0IGV4aXN0cyBhbmQgaXMgbm90IGEgZmlsZSB0aGUgZXJyb3IgRUlTRElSIGlzIHJldHVybmVkCisgIHVuZGVyIFVuaXguCisKKyAgTghOTwhPVAhURQhFIFRoZSBwYWNraW5nIG9mIHBhcmFtZXRlcnMgaXMgdmVyeSBpbmVmZmljaWVudCBhbmQgYXBwZWFycyB0bworICBpbmRpY2F0ZSBjb25mdXNpb24gYmV0d2VlbiB0aGUgc3lzdGVtIGNhbGwgY3JlYXQgYW5kIHRoZSBWRlMgb3BlcmF0aW9uCisgIGNyZWF0ZS4gVGhlIFZGUyBvcGVyYXRpb24gY3JlYXRlIGlzIG9ubHkgY2FsbGVkIHRvIGNyZWF0ZSBuZXcgb2JqZWN0cy4KKyAgVGhpcyBjcmVhdGUgY2FsbCBkaWZmZXJzIGZyb20gdGhlIFVuaXggb25lIGluIHRoYXQgaXQgaXMgbm90IGludm9rZWQKKyAgdG8gcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgdHJ1bmNhdGUgYW5kIGV4Y2x1c2l2ZSBvcHRpb25zLAorICB0b2dldGhlciB3aXRoIHRoZSBtb2RlLCBjb3VsZCBzaW1wbHkgYmUgcGFydCBvZiB0aGUgbW9kZSBhcyBpdCBpcworICB1bmRlciBVbml4LiAgVGhlcmUgc2hvdWxkIGJlIG5vIGZsYWdzIGFyZ3VtZW50OyB0aGlzIGlzIHVzZWQgaW4gb3BlbgorICAoMikgdG8gcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBSRUFEIG9yIFdSSVRFIG1vZGUuCisKKyAgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGRpcmVjdG9yeSBzaG91bGQgYmUgcmV0dXJuZWQgdG9vLCBzaW5jZSB0aGUgc2l6ZQorICBhbmQgbXRpbWUgY2hhbmdlZC4KKworICAwd3BhZ2UKKworICA0CDQuCC45CDkuCC4gIG0IbWsIa2QIZGkIaXIIcgorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IENyZWF0ZSBhIG5ldyBkaXJlY3RvcnkuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX21rZGlyX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKm5hbWU7ICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICB9IGNmc19ta2RpcjsKKworCisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX21rZGlyX291dCB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyAgICAgICAgICAgICAgICB9IGNmc19ta2RpcjsKKworCisKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gVGhpcyBjYWxsIGlzIHNpbWlsYXIgdG8gY3JlYXRlIGJ1dCBjcmVhdGVzIGEgZGlyZWN0b3J5LgorICBPbmx5IHRoZSBtb2RlIGZpZWxkIGluIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGlzIHVzZWQgZm9yIGNyZWF0aW9uLgorICBVcG9uIHN1Y2Nlc3NmdWwgY3JlYXRpb24sIHRoZSBhdHRyIHJldHVybmVkIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mCisgIHRoZSBuZXcgZGlyZWN0b3J5LgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcyBBcyBmb3IgY3JlYXRlLgorCisgIE4ITk8IT1QIVEUIRSBUaGUgaW5wdXQgcGFyYW1ldGVyIHNob3VsZCBiZSBjaGFuZ2VkIHRvIG1vZGUgaW5zdGVhZCBvZgorICBhdHRyaWJ1dGVzLgorCisgIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBwYXJlbnQgc2hvdWxkIGJlIHJldHVybmVkIHNpbmNlIHRoZSBzaXplIGFuZAorICBtdGltZSBjaGFuZ2VzLgorCisgIDB3cGFnZQorCisgIDQINC4ILjEIMTAIMC4ILiAgbAhsaQhpbghuawhrCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgQ3JlYXRlIGEgbGluayB0byBhbiBleGlzdGluZyBmaWxlLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19saW5rX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBzb3VyY2VGaWQ7ICAgICAgICAgIC8qIGNub2RlIHRvIGxpbmsgKnRvKiAqLworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIGRlc3RGaWQ7ICAgICAgICAgICAgLyogRGlyZWN0b3J5IGluIHdoaWNoIHRvIHBsYWNlIGxpbmsgKi8KKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKnRuYW1lOyAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICB9IGNmc19saW5rOworCisKKworICAgICBvCG91CHV0CHQKKyAgICAgICAgZW1wdHkKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gVGhpcyBjYWxsIGNyZWF0ZXMgYSBsaW5rIHRvIHRoZSBzb3VyY2VGaWQgaW4gdGhlIGRpcmVjdG9yeQorICBpZGVudGlmaWVkIGJ5IGRlc3RGaWQgd2l0aCBuYW1lIHRuYW1lLiAgVGhlIHNvdXJjZSBtdXN0IHJlc2lkZSBpbiB0aGUKKyAgdGFyZ2V0J3MgcGFyZW50LCBpLmUuIHRoZSBzb3VyY2UgbXVzdCBiZSBoYXZlIHBhcmVudCBkZXN0RmlkLCBpLmUuIENvZGEKKyAgZG9lcyBub3Qgc3VwcG9ydCBjcm9zcyBkaXJlY3RvcnkgaGFyZCBsaW5rcy4gIE9ubHkgdGhlIHJldHVybiB2YWx1ZSBpcworICByZWxldmFudC4gIEl0IGluZGljYXRlcyBzdWNjZXNzIG9yIHRoZSB0eXBlIG9mIGZhaWx1cmUuCisKKyAgRQhFcghycghybwhvcghycwhzIFRoZSB1c3VhbCBlcnJvcnMgY2FuIG9jY3VyLjB3cGFnZQorCisgIDQINC4ILjEIMTEIMS4ILiAgcwhzeQh5bQhtbAhsaQhpbghuawhrCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgY3JlYXRlIGEgc3ltYm9saWMgbGluaworCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19zeW1saW5rX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgVkZpZDsgICAgICAgICAgLyogRGlyZWN0b3J5IHRvIHB1dCBzeW1saW5rIGluICovCisgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICpzcmNuYW1lOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAqdG5hbWU7CisgICAgICAgICAgICAgICAgfSBjZnNfc3ltbGluazsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIG5vbmUKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gQ3JlYXRlIGEgc3ltYm9saWMgbGluay4gVGhlIGxpbmsgaXMgdG8gYmUgcGxhY2VkIGluIHRoZQorICBkaXJlY3RvcnkgaWRlbnRpZmllZCBieSBWRmlkIGFuZCBuYW1lZCB0bmFtZS4gIEl0IHNob3VsZCBwb2ludCB0byB0aGUKKyAgcGF0aG5hbWUgc3JjbmFtZS4gIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdCBhcmUgdG8KKyAgYmUgc2V0IHRvIGF0dHIuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSB0YXJnZXQgZGlyZWN0b3J5IHNob3VsZCBiZSByZXR1cm5lZCBzaW5jZQorICBpdHMgc2l6ZSBjaGFuZ2VkLgorCisgIDB3cGFnZQorCisgIDQINC4ILjEIMTIIMi4ILiAgcghyZQhlbQhtbwhvdgh2ZQhlCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgUmVtb3ZlIGEgZmlsZQorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19yZW1vdmVfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkICAgICBWRmlkOworICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAqbmFtZTsgICAgICAgICAgLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworICAgICAgICAgICAgICAgIH0gY2ZzX3JlbW92ZTsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIG5vbmUKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gIFJlbW92ZSBmaWxlIG5hbWVkIGNmc19yZW1vdmVfaW4ubmFtZSBpbiBkaXJlY3RvcnkKKyAgaWRlbnRpZmllZCBieSAgIFZGaWQuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBkaXJlY3Rvcnkgc2hvdWxkIGJlIHJldHVybmVkIHNpbmNlIGl0cworICBtdGltZSBhbmQgc2l6ZSBtYXkgY2hhbmdlLgorCisgIDB3cGFnZQorCisgIDQINC4ILjEIMTMIMy4ILiAgcghybQhtZAhkaQhpcghyCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgUmVtb3ZlIGEgZGlyZWN0b3J5CisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3JtZGlyX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKm5hbWU7ICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICB9IGNmc19ybWRpcjsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIG5vbmUKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gUmVtb3ZlIHRoZSBkaXJlY3Rvcnkgd2l0aCBuYW1lIG5hbWUgZnJvbSB0aGUgZGlyZWN0b3J5CisgIGlkZW50aWZpZWQgYnkgVkZpZC4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMKKworICBOCE5PCE9UCFRFCEUgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcnkgc2hvdWxkIGJlIHJldHVybmVkIHNpbmNlCisgIGl0cyBtdGltZSBhbmQgc2l6ZSBtYXkgY2hhbmdlLgorCisgIDB3cGFnZQorCisgIDQINC4ILjEIMTQINC4ILiAgcghyZQhlYQhhZAhkbAhsaQhpbghuawhrCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgUmVhZCB0aGUgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19yZWFkbGlua19pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICB9IGNmc19yZWFkbGluazsKKworCisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3JlYWRsaW5rX291dCB7CisgICAgICAgICAgICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCAgICAgZGF0YTsgICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICB9IGNmc19yZWFkbGluazsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFRoaXMgcm91dGluZSByZWFkcyB0aGUgY29udGVudHMgb2Ygc3ltYm9saWMgbGluaworICBpZGVudGlmaWVkIGJ5IFZGaWQgaW50byB0aGUgYnVmZmVyIGRhdGEuICBUaGUgYnVmZmVyIGRhdGEgbXVzdCBiZSBhYmxlCisgIHRvIGhvbGQgYW55IG5hbWUgdXAgdG8gQ0ZTX01BWE5BTUxFTiAoUEFUSCBvciBOQU0/PykuCisKKyAgRQhFcghycghybwhvcghycwhzIE5vIHVudXN1YWwgZXJyb3JzLgorCisgIDB3cGFnZQorCisgIDQINC4ILjEIMTUINS4ILiAgbwhvcAhwZQhlbghuCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgT3BlbiBhIGZpbGUuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX29wZW5faW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkICAgICBWRmlkOworICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3M7CisgICAgICAgICAgICAgICAgfSBjZnNfb3BlbjsKKworCisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX29wZW5fb3V0IHsKKyAgICAgICAgICAgICAgICAgICAgZGV2X3QgICAgICAgZGV2OworICAgICAgICAgICAgICAgICAgICBpbm9fdCAgICAgICBpbm9kZTsKKyAgICAgICAgICAgICAgICB9IGNmc19vcGVuOworCisKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gIFRoaXMgcmVxdWVzdCBhc2tzIFZlbnVzIHRvIHBsYWNlIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkKKyAgVkZpZCBpbiBpdHMgY2FjaGUgYW5kIHRvIG5vdGUgdGhhdCB0aGUgY2FsbGluZyBwcm9jZXNzIHdpc2hlcyB0byBvcGVuCisgIGl0IHdpdGggZmxhZ3MgYXMgaW4gb3BlbigyKS4gIFRoZSByZXR1cm4gdmFsdWUgdG8gdGhlIGtlcm5lbCBkaWZmZXJzCisgIGZvciBVbml4IGFuZCBXaW5kb3dzIHN5c3RlbXMuICBGb3IgVW5peCBzeXN0ZW1zIHRoZSBDb2RhIEZTIERyaXZlciBpcworICBpbmZvcm1lZCBvZiB0aGUgZGV2aWNlIGFuZCBpbm9kZSBudW1iZXIgb2YgdGhlIGNvbnRhaW5lciBmaWxlIGluIHRoZQorICBmaWVsZHMgZGV2IGFuZCBpbm9kZS4gIEZvciBXaW5kb3dzIHRoZSBwYXRoIG9mIHRoZSBjb250YWluZXIgZmlsZSBpcworICByZXR1cm5lZCB0byB0aGUga2VybmVsLgorICBFCEVyCHJyCHJvCG9yCHJzCHMKKworICBOCE5PCE9UCFRFCEUgQ3VycmVudGx5IHRoZSBjZnNfb3Blbl9vdXQgc3RydWN0dXJlIGlzIG5vdCBwcm9wZXJseSBhZGFwdGVkIHRvCisgIGRlYWwgd2l0aCB0aGUgV2luZG93cyBjYXNlLiAgSXQgbWlnaHQgYmUgYmVzdCB0byBpbXBsZW1lbnQgdHdvCisgIHVwY2FsbHMsIG9uZSB0byBvcGVuIGFpbWluZyBhdCBhIGNvbnRhaW5lciBmaWxlIG5hbWUsIHRoZSBvdGhlciBhdCBhCisgIGNvbnRhaW5lciBmaWxlIGlub2RlLgorCisgIDB3cGFnZQorCisgIDQINC4ILjEIMTYINi4ILiAgYwhjbAhsbwhvcwhzZQhlCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgQ2xvc2UgYSBmaWxlLCB1cGRhdGUgaXQgb24gdGhlIHNlcnZlcnMuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX2Nsb3NlX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzOworICAgICAgICAgICAgICAgIH0gY2ZzX2Nsb3NlOworCisKKworICAgICBvCG91CHV0CHQKKyAgICAgICAgbm9uZQorCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBDbG9zZSB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IFZGaWQuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIFRoZSBmbGFncyBhcmd1bWVudCBpcyBib2d1cyBhbmQgbm90IHVzZWQuICBIb3dldmVyLCBWZW51cycgY29kZQorICBoYXMgcm9vbSB0byBkZWFsIHdpdGggYW4gZXhlY3AgaW5wdXQgZmllbGQsIHByb2JhYmx5IHRoaXMgZmllbGQgc2hvdWxkCisgIGJlIHVzZWQgdG8gaW5mb3JtIFZlbnVzIHRoYXQgdGhlIGZpbGUgd2FzIGNsb3NlZCBidXQgaXMgc3RpbGwgbWVtb3J5CisgIG1hcHBlZCBmb3IgZXhlY3V0aW9uLiAgVGhlcmUgYXJlIGNvbW1lbnRzIGFib3V0IGZldGNoaW5nIHZlcnN1cyBub3QKKyAgZmV0Y2hpbmcgdGhlIGRhdGEgaW4gVmVudXMgdnByb2NfdmZzY2FsbHMuICBUaGlzIHNlZW1zIHNpbGx5LiAgSWYgYQorICBmaWxlIGlzIGJlaW5nIGNsb3NlZCwgdGhlIGRhdGEgaW4gdGhlIGNvbnRhaW5lciBmaWxlIGlzIHRvIGJlIHRoZSBuZXcKKyAgZGF0YS4gIEhlcmUgYWdhaW4gdGhlIGV4ZWNwIGZsYWcgbWlnaHQgYmUgaW4gcGxheSB0byBjcmVhdGUgY29uZnVzaW9uOgorICBjdXJyZW50bHkgVmVudXMgbWlnaHQgdGhpbmsgYSBmaWxlIGNhbiBiZSBmbHVzaGVkIGZyb20gdGhlIGNhY2hlIHdoZW4KKyAgaXQgaXMgc3RpbGwgbWVtb3J5IG1hcHBlZC4gIFRoaXMgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC4KKworICAwd3BhZ2UKKworICA0CDQuCC4xCDE3CDcuCC4gIGkIaW8Ib2MIY3QIdGwIbAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IERvIGFuIGlvY3RsIG9uIGEgZmlsZS4gVGhpcyBpbmNsdWRlcyB0aGUgcGlvY3RsIGludGVyZmFjZS4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfaW9jdGxfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIGludCBjbWQ7CisgICAgICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgICAgIGludCByd2ZsYWc7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGE7ICAgICAgICAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfaW9jdGw7CisKKworCisgICAgIG8Ib3UIdXQIdAorCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX2lvY3RsX291dCB7CisgICAgICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgICAgIGRhdGE7ICAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfaW9jdGw7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBEbyBhbiBpb2N0bCBvcGVyYXRpb24gb24gYSBmaWxlLiAgVGhlIGNvbW1hbmQsIGxlbiBhbmQKKyAgZGF0YSBhcmd1bWVudHMgYXJlIGZpbGxlZCBhcyB1c3VhbC4gIGZsYWdzIGlzIG5vdCB1c2VkIGJ5IFZlbnVzLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBBbm90aGVyIGJvZ3VzIHBhcmFtZXRlci4gIGZsYWdzIGlzIG5vdCB1c2VkLiAgV2hhdCBpcyB0aGUKKyAgYnVzaW5lc3MgYWJvdXQgUFJFRkVUQ0hJTkcgaW4gdGhlIFZlbnVzIGNvZGU/CisKKworICAwd3BhZ2UKKworICA0CDQuCC4xCDE4CDguCC4gIHIIcmUIZW4IbmEIYW0IbWUIZQorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFJlbmFtZSBhIGZpZC4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfcmVuYW1lX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgc291cmNlRmlkOworICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAqc3JjbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBkZXN0RmlkOworICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAqZGVzdG5hbWU7CisgICAgICAgICAgICAgICAgfSBjZnNfcmVuYW1lOworCisKKworICAgICBvCG91CHV0CHQKKyAgICAgICAgbm9uZQorCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiAgUmVuYW1lIHRoZSBvYmplY3Qgd2l0aCBuYW1lIHNyY25hbWUgaW4gZGlyZWN0b3J5CisgIHNvdXJjZUZpZCB0byBkZXN0bmFtZSBpbiBkZXN0RmlkLiAgIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBuYW1lcworICBzcmNuYW1lIGFuZCBkZXN0bmFtZSBhcmUgMCB0ZXJtaW5hdGVkIHN0cmluZ3MuICBTdHJpbmdzIGluIFVuaXgKKyAga2VybmVscyBhcmUgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMQgxOQg5LgguICByCHJlCGVhCGFkCGRkCGRpCGlyCHIKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBSZWFkIGRpcmVjdG9yeSBlbnRyaWVzLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19yZWFkZGlyX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50OworICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAgICAgICAgIH0gY2ZzX3JlYWRkaXI7CisKKworCisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3JlYWRkaXJfb3V0IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgICAgIGRhdGE7ICAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfcmVhZGRpcjsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFJlYWQgZGlyZWN0b3J5IGVudHJpZXMgZnJvbSBWRmlkIHN0YXJ0aW5nIGF0IG9mZnNldCBhbmQKKyAgcmVhZCBhdCBtb3N0IGNvdW50IGJ5dGVzLiAgUmV0dXJucyB0aGUgZGF0YSBpbiBkYXRhIGFuZCByZXR1cm5zCisgIHRoZSBzaXplIGluIHNpemUuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIFRoaXMgY2FsbCBpcyBub3QgdXNlZC4gIFJlYWRkaXIgb3BlcmF0aW9ucyBleHBsb2l0IGNvbnRhaW5lcgorICBmaWxlcy4gIFdlIHdpbGwgcmUtZXZhbHVhdGUgdGhpcyBkdXJpbmcgdGhlIGRpcmVjdG9yeSByZXZhbXAgd2hpY2ggaXMKKyAgYWJvdXQgdG8gdGFrZSBwbGFjZS4KKworICAwd3BhZ2UKKworICA0CDQuCC4yCDIwCDAuCC4gIHYIdmcIZ2UIZXQIdAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IGluc3RydWN0cyBWZW51cyB0byBkbyBhbiBGU0RCLT5HZXQuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3ZnZXRfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgfSBjZnNfdmdldDsKKworCisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3ZnZXRfb3V0IHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBWRmlkOworICAgICAgICAgICAgICAgICAgICBpbnQgdnR5cGU7CisgICAgICAgICAgICAgICAgfSBjZnNfdmdldDsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFRoaXMgdXBjYWxsIGFza3MgVmVudXMgdG8gZG8gYSBnZXQgb3BlcmF0aW9uIG9uIGFuIGZzb2JqCisgIGxhYmVsbGVkIGJ5IFZGaWQuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCB1c2VkLiAgSG93ZXZlciwgaXQgaXMgZXh0cmVtZWx5IHVzZWZ1bAorICBzaW5jZSBpdCBjYW4gYmUgdXNlZCB0byBkZWFsIHdpdGggcmVhZC93cml0ZSBtZW1vcnkgbWFwcGVkIGZpbGVzLgorICBUaGVzZSBjYW4gYmUgInBpbm5lZCIgaW4gdGhlIFZlbnVzIGNhY2hlIHVzaW5nIHZnZXQgYW5kIHJlbGVhc2VkIHdpdGgKKyAgaW5hY3RpdmUuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMggyMQgxLgguICBmCGZzCHN5CHluCG5jCGMKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBUZWxsIFZlbnVzIHRvIHVwZGF0ZSB0aGUgUlZNIGF0dHJpYnV0ZXMgb2YgYSBmaWxlLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19mc3luY19pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICB9IGNmc19mc3luYzsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIG5vbmUKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gQXNrIFZlbnVzIHRvIHVwZGF0ZSBSVk0gYXR0cmlidXRlcyBvZiBvYmplY3QgVkZpZC4gVGhpcworICBzaG91bGQgYmUgY2FsbGVkIGFzIHBhcnQgb2Yga2VybmVsIGxldmVsIGZzeW5jIHR5cGUgY2FsbHMuICBUaGUKKyAgcmVzdWx0IGluZGljYXRlcyBpZiB0aGUgc3luY2luZyB3YXMgc3VjY2Vzc2Z1bC4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMKKworICBOCE5PCE9UCFRFCEUgTGludXggZG9lcyBub3QgaW1wbGVtZW50IHRoaXMgY2FsbC4gSXQgc2hvdWxkLgorCisgIDB3cGFnZQorCisgIDQINC4ILjIIMjIIMi4ILiAgaQhpbghuYQhhYwhjdAh0aQhpdgh2ZQhlCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgVGVsbCBWZW51cyBhIHZub2RlIGlzIG5vIGxvbmdlciBpbiB1c2UuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX2luYWN0aXZlX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBWRmlkOworICAgICAgICAgICAgICAgIH0gY2ZzX2luYWN0aXZlOworCisKKworICAgICBvCG91CHV0CHQKKyAgICAgICAgbm9uZQorCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGlzIG9wZXJhdGlvbiByZXR1cm5zIEVPUE5PVFNVUFAuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIFRoaXMgc2hvdWxkIHBlcmhhcHMgYmUgcmVtb3ZlZC4KKworICAwd3BhZ2UKKworICA0CDQuCC4yCDIzCDMuCC4gIHIIcmQIZHcId3IIcgorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFJlYWQgb3Igd3JpdGUgZnJvbSBhIGZpbGUKKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfcmR3cl9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIGludCByd2ZsYWc7CisgICAgICAgICAgICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGlvZmxhZzsKKyAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCAgICAgZGF0YTsgICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICB9IGNmc19yZHdyOworCisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19yZHdyX291dCB7CisgICAgICAgICAgICAgICAgICAgIGludCByd2ZsYWc7CisgICAgICAgICAgICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCAgICAgZGF0YTsgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfcmR3cjsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFRoaXMgdXBjYWxsIGFza3MgVmVudXMgdG8gcmVhZCBvciB3cml0ZSBmcm9tIGEgZmlsZS4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMKKworICBOCE5PCE9UCFRFCEUgSXQgc2hvdWxkIGJlIHJlbW92ZWQgc2luY2UgaXQgaXMgYWdhaW5zdCB0aGUgQ29kYSBwaGlsb3NvcGh5IHRoYXQKKyAgcmVhZC93cml0ZSBvcGVyYXRpb25zIG5ldmVyIHJlYWNoIFZlbnVzLiAgSSBoYXZlIGJlZW4gdG9sZCB0aGUKKyAgb3BlcmF0aW9uIGRvZXMgbm90IHdvcmsuICBJdCBpcyBub3QgY3VycmVudGx5IHVzZWQuCisKKworICAwd3BhZ2UKKworICA0CDQuCC4yCDI0CDQuCC4gIG8Ib2QIZHkIeW0IbW8Ib3UIdW4IbnQIdAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IEFsbG93cyBtb3VudGluZyBtdWx0aXBsZSBDb2RhICJmaWxlc3lzdGVtcyIgb24gb25lIFVuaXggbW91bnQKKyAgcG9pbnQuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2R5X21vdW50X2luIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKm5hbWU7ICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICB9IG9keV9tb3VudDsKKworCisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2R5X21vdW50X291dCB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICB9IG9keV9tb3VudDsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuICBBc2tzIFZlbnVzIHRvIHJldHVybiB0aGUgcm9vdGZpZCBvZiBhIENvZGEgc3lzdGVtIG5hbWVkCisgIG5hbWUuICBUaGUgZmlkIGlzIHJldHVybmVkIGluIFZGaWQuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIFRoaXMgY2FsbCB3YXMgdXNlZCBieSBEYXZpZCBmb3IgZHluYW1pYyBzZXRzLiAgSXQgc2hvdWxkIGJlCisgIHJlbW92ZWQgc2luY2UgaXQgY2F1c2VzIGEganVuZ2xlIG9mIHBvaW50ZXJzIGluIHRoZSBWRlMgbW91bnRpbmcgYXJlYS4KKyAgSXQgaXMgbm90IHVzZWQgYnkgQ29kYSBwcm9wZXIuICBDYWxsIGlzIG5vdCBpbXBsZW1lbnRlZCBieSBWZW51cy4KKworICAwd3BhZ2UKKworICA0CDQuCC4yCDI1CDUuCC4gIG8Ib2QIZHkIeV8IX2wIbG8Ib28Ib2sIa3UIdXAIcAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IExvb2tzIHVwIHNvbWV0aGluZy4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4gaXJyZWxldmFudAorCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIGlycmVsZXZhbnQKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMKKworICBOCE5PCE9UCFRFCEUgR3V0IGl0LiBDYWxsIGlzIG5vdCBpbXBsZW1lbnRlZCBieSBWZW51cy4KKworICAwd3BhZ2UKKworICA0CDQuCC4yCDI2CDYuCC4gIG8Ib2QIZHkIeV8IX2UIZXgIeHAIcGEIYW4IbmQIZAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IGV4cGFuZHMgc29tZXRoaW5nIGluIGEgZHluYW1pYyBzZXQuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuIGlycmVsZXZhbnQKKworICAgICBvCG91CHV0CHQKKyAgICAgICAgaXJyZWxldmFudAorCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBHdXQgaXQuICBDYWxsIGlzIG5vdCBpbXBsZW1lbnRlZCBieSBWZW51cy4KKworICAwd3BhZ2UKKworICA0CDQuCC4yCDI3CDcuCC4gIHAIcHIIcmUIZWYIZmUIZXQIdGMIY2gIaAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFByZWZldGNoIGEgZHluYW1pYyBzZXQuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuIE5vdCBkb2N1bWVudGVkLgorCisgICAgIG8Ib3UIdXQIdAorICAgICAgICBOb3QgZG9jdW1lbnRlZC4KKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gIFZlbnVzIHdvcmtlci5jYyBoYXMgc3VwcG9ydCBmb3IgdGhpcyBjYWxsLCBhbHRob3VnaCBpdCBpcworICBub3RlZCB0aGF0IGl0IGRvZXNuJ3Qgd29yay4gIE5vdCBzdXJwcmlzaW5nLCBzaW5jZSB0aGUga2VybmVsIGRvZXMgbm90CisgIGhhdmUgc3VwcG9ydCBmb3IgaXQuIChPRFlfUFJFRkVUQ0ggaXMgbm90IGEgZGVmaW5lZCBvcGVyYXRpb24pLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBHdXQgaXQuIEl0IGlzbid0IHdvcmtpbmcgYW5kIGlzbid0IHVzZWQgYnkgQ29kYS4KKworCisgIDB3cGFnZQorCisgIDQINC4ILjIIMjgIOC4ILiAgcwhzaQhpZwhnbghuYQhhbAhsCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgU2VuZCBWZW51cyBhIHNpZ25hbCBhYm91dCBhbiB1cGNhbGwuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuIG5vbmUKKworICAgICBvCG91CHV0CHQKKyAgICAgICAgbm90IGFwcGxpY2FibGUuCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuICBUaGlzIGlzIGFuIG91dC1vZi1iYW5kIHVwY2FsbCB0byBWZW51cyB0byBpbmZvcm0gVmVudXMKKyAgdGhhdCB0aGUgY2FsbGluZyBwcm9jZXNzIHJlY2VpdmVkIGEgc2lnbmFsIGFmdGVyIFZlbnVzIHJlYWQgdGhlCisgIG1lc3NhZ2UgZnJvbSB0aGUgaW5wdXQgcXVldWUuICBWZW51cyBpcyBzdXBwb3NlZCB0byBjbGVhbiB1cCB0aGUKKyAgb3BlcmF0aW9uLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcyBObyByZXBseSBpcyBnaXZlbi4KKworICBOCE5PCE9UCFRFCEUgV2UgbmVlZCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB3aGF0IFZlbnVzIG5lZWRzIHRvIGNsZWFuIHVwIGFuZCBpZgorICBpdCBpcyBkb2luZyB0aGlzIGNvcnJlY3RseS4gIEFsc28gd2UgbmVlZCB0byBoYW5kbGUgbXVsdGlwbGUgdXBjYWxsCisgIHBlciBzeXN0ZW0gY2FsbCBzaXR1YXRpb25zIGNvcnJlY3RseS4gIEl0IHdvdWxkIGJlIGltcG9ydGFudCB0byBrbm93CisgIHdoYXQgc3RhdGUgY2hhbmdlcyBpbiBWZW51cyB0YWtlIHBsYWNlIGFmdGVyIGFuIHVwY2FsbCBmb3Igd2hpY2ggdGhlCisgIGtlcm5lbCBpcyByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIFZlbnVzIHRvIGNsZWFuIHVwIChlLmcuIG9wZW4KKyAgZGVmaW5pdGVseSBpcyBzdWNoIGEgc3RhdGUgY2hhbmdlLCBidXQgbWFueSBvdGhlcnMgYXJlIG1heWJlIG5vdCkuCisKKyAgMHdwYWdlCisKKyAgNQg1LgguICBUCFRoCGhlCGUgbQhtaQhpbghuaQhpYwhjYQhhYwhjaAhoZQhlIGEIYW4IbmQIZCBkCGRvCG93CHduCG5jCGNhCGFsCGxsCGxzCHMKKworCisgIFRoZSBDb2RhIEZTIERyaXZlciBjYW4gY2FjaGUgcmVzdWx0cyBvZiBsb29rdXAgYW5kIGFjY2VzcyB1cGNhbGxzLCB0bworICBsaW1pdCB0aGUgZnJlcXVlbmN5IG9mIHVwY2FsbHMuICBVcGNhbGxzIGNhcnJ5IGEgcHJpY2Ugc2luY2UgYSBwcm9jZXNzCisgIGNvbnRleHQgc3dpdGNoIG5lZWRzIHRvIHRha2UgcGxhY2UuICBUaGUgY291bnRlcnBhcnQgb2YgY2FjaGluZyB0aGUKKyAgaW5mb3JtYXRpb24gaXMgdGhhdCBWZW51cyB3aWxsIG5vdGlmeSB0aGUgRlMgRHJpdmVyIHRoYXQgY2FjaGVkCisgIGVudHJpZXMgbXVzdCBiZSBmbHVzaGVkIG9yIHJlbmFtZWQuCisKKyAgVGhlIGtlcm5lbCBjb2RlIGdlbmVyYWxseSBoYXMgdG8gbWFpbnRhaW4gYSBzdHJ1Y3R1cmUgd2hpY2ggbGlua3MgdGhlCisgIGludGVybmFsIGZpbGUgaGFuZGxlcyAoY2FsbGVkIHZub2RlcyBpbiBCU0QsIGlub2RlcyBpbiBMaW51eCBhbmQKKyAgRmlsZUhhbmRsZXMgaW4gV2luZG93cykgd2l0aCB0aGUgVmljZUZpZCdzIHdoaWNoIFZlbnVzIG1haW50YWlucy4gIFRoZQorICByZWFzb24gaXMgdGhhdCBmcmVxdWVudCB0cmFuc2xhdGlvbnMgYmFjayBhbmQgZm9ydGggYXJlIG5lZWRlZCBpbgorICBvcmRlciB0byBtYWtlIHVwY2FsbHMgYW5kIHVzZSB0aGUgcmVzdWx0cyBvZiB1cGNhbGxzLiAgU3VjaCBsaW5raW5nCisgIG9iamVjdHMgYXJlIGNhbGxlZCBjCGNuCG5vCG9kCGRlCGVzCHMuCisKKyAgVGhlIGN1cnJlbnQgbWluaWNhY2hlIGltcGxlbWVudGF0aW9ucyBoYXZlIGNhY2hlIGVudHJpZXMgd2hpY2ggcmVjb3JkCisgIHRoZSBmb2xsb3dpbmc6CisKKyAgMS4gdGhlIG5hbWUgb2YgdGhlIGZpbGUKKworICAyLiB0aGUgY25vZGUgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBvYmplY3QKKworICAzLiBhIGxpc3Qgb2YgQ29kYUNyZWQncyBmb3Igd2hpY2ggdGhlIGxvb2t1cCBpcyBwZXJtaXR0ZWQuCisKKyAgNC4gdGhlIGNub2RlIG9mIHRoZSBvYmplY3QKKworICBUaGUgbG9va3VwIGNhbGwgaW4gdGhlIENvZGEgRlMgRHJpdmVyIG1heSByZXF1ZXN0IHRoZSBjbm9kZSBvZiB0aGUKKyAgZGVzaXJlZCBvYmplY3QgZnJvbSB0aGUgY2FjaGUsIGJ5IHBhc3NpbmcgaXRzIG5hbWUsIGRpcmVjdG9yeSBhbmQgdGhlCisgIENvZGFDcmVkJ3Mgb2YgdGhlIGNhbGxlci4gIFRoZSBjYWNoZSB3aWxsIHJldHVybiB0aGUgY25vZGUgb3IgaW5kaWNhdGUKKyAgdGhhdCBpdCBjYW5ub3QgYmUgZm91bmQuICBUaGUgQ29kYSBGUyBEcml2ZXIgbXVzdCBiZSBjYXJlZnVsIHRvCisgIGludmFsaWRhdGUgY2FjaGUgZW50cmllcyB3aGVuIGl0IG1vZGlmaWVzIG9yIHJlbW92ZXMgb2JqZWN0cy4KKworICBXaGVuIFZlbnVzIG9idGFpbnMgaW5mb3JtYXRpb24gdGhhdCBpbmRpY2F0ZXMgdGhhdCBjYWNoZSBlbnRyaWVzIGFyZQorICBubyBsb25nZXIgdmFsaWQsIGl0IHdpbGwgbWFrZSBhIGRvd25jYWxsIHRvIHRoZSBrZXJuZWwuICBEb3duY2FsbHMgYXJlCisgIGludGVyY2VwdGVkIGJ5IHRoZSBDb2RhIEZTIERyaXZlciBhbmQgbGVhZCB0byBjYWNoZSBpbnZhbGlkYXRpb25zIG9mCisgIHRoZSBraW5kIGRlc2NyaWJlZCBiZWxvdy4gIFRoZSBDb2RhIEZTIERyaXZlciBkb2VzIG5vdCByZXR1cm4gYW4gZXJyb3IKKyAgdW5sZXNzIHRoZSBkb3duY2FsbCBkYXRhIGNvdWxkIG5vdCBiZSByZWFkIGludG8ga2VybmVsIG1lbW9yeS4KKworCisgIDUINS4ILjEIMS4ILiAgSQhJTghOVghWQQhBTAhMSQhJRAhEQQhBVAhURQhFCisKKworICBObyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgb24gdGhpcyBjYWxsLgorCisKKyAgNQg1LgguMggyLgguICBGCEZMCExVCFVTCFNICEgKKworCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzIE5vbmUKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgRmx1c2ggdGhlIG5hbWUgY2FjaGUgZW50aXJlbHkuCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFZlbnVzIGlzc3VlcyB0aGlzIGNhbGwgdXBvbiBzdGFydHVwIGFuZCB3aGVuIGl0IGRpZXMuIFRoaXMKKyAgaXMgdG8gcHJldmVudCBzdGFsZSBjYWNoZSBpbmZvcm1hdGlvbiBiZWluZyBoZWxkLiAgU29tZSBvcGVyYXRpbmcKKyAgc3lzdGVtcyBhbGxvdyB0aGUga2VybmVsIG5hbWUgY2FjaGUgdG8gYmUgc3dpdGNoZWQgb2ZmIGR5bmFtaWNhbGx5LgorICBXaGVuIHRoaXMgaXMgZG9uZSwgdGhpcyBkb3duY2FsbCBpcyBtYWRlLgorCisKKyAgNQg1LgguMwgzLgguICBQCFBVCFVSCFJHCEdFCEVVCFVTCFNFCEVSCFIKKworCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgICAgICAgc3RydWN0IGNmc19wdXJnZXVzZXJfb3V0IHsvKiBDRlNfUFVSR0VVU0VSIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCisgICAgICAgICAgICAgIHN0cnVjdCBDb2RhQ3JlZCBjcmVkOworICAgICAgICAgIH0gY2ZzX3B1cmdldXNlcjsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFJlbW92ZSBhbGwgZW50cmllcyBpbiB0aGUgY2FjaGUgY2FycnlpbmcgdGhlIENyZWQuICBUaGlzCisgIGNhbGwgaXMgaXNzdWVkIHdoZW4gdG9rZW5zIGZvciBhIHVzZXIgZXhwaXJlIG9yIGFyZSBmbHVzaGVkLgorCisKKyAgNQg1LgguNAg0LgguICBaCFpBCEFQCFBGCEZJCElMCExFCEUKKworCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgICAgICAgc3RydWN0IGNmc196YXBmaWxlX291dCB7ICAvKiBDRlNfWkFQRklMRSBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworICAgICAgICAgICAgICBWaWNlRmlkIENvZGFGaWQ7CisgICAgICAgICAgfSBjZnNfemFwZmlsZTsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFJlbW92ZSBhbGwgZW50cmllcyB3aGljaCBoYXZlIHRoZSAoZGlyIHZub2RlLCBuYW1lKSBwYWlyLgorICBUaGlzIGlzIGlzc3VlZCBhcyBhIHJlc3VsdCBvZiBhbiBpbnZhbGlkYXRpb24gb2YgY2FjaGVkIGF0dHJpYnV0ZXMgb2YKKyAgYSB2bm9kZS4KKworICBOCE5PCE9UCFRFCEUgQ2FsbCBpcyBub3QgbmFtZWQgY29ycmVjdGx5IGluIE5ldEJTRCBhbmQgTWFjaC4gIFRoZSBtaW5pY2FjaGUKKyAgemFwZmlsZSByb3V0aW5lIHRha2VzIGRpZmZlcmVudCBhcmd1bWVudHMuIExpbnV4IGRvZXMgbm90IGltcGxlbWVudAorICB0aGUgaW52YWxpZGF0aW9uIG9mIGF0dHJpYnV0ZXMgY29ycmVjdGx5LgorCisKKworICA1CDUuCC41CDUuCC4gIFoIWkEIQVAIUEQIREkISVIIUgorCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgICAgICBzdHJ1Y3QgY2ZzX3phcGRpcl9vdXQgeyAgIC8qIENGU19aQVBESVIgaXMgYSB2ZW51cy0+a2VybmVsIGNhbGwgKi8KKyAgICAgICAgICAgICAgVmljZUZpZCBDb2RhRmlkOworICAgICAgICAgIH0gY2ZzX3phcGRpcjsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFJlbW92ZSBhbGwgZW50cmllcyBpbiB0aGUgY2FjaGUgbHlpbmcgaW4gYSBkaXJlY3RvcnkKKyAgQ29kYUZpZCwgYW5kIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGRpcmVjdG9yeS4gVGhpcyBjYWxsIGlzIGlzc3VlZCB3aGVuCisgIFZlbnVzIHJlY2VpdmVzIGEgY2FsbGJhY2sgb24gdGhlIGRpcmVjdG9yeS4KKworCisgIDUINS4ILjYINi4ILiAgWghaQQhBUAhQVghWTghOTwhPRAhERQhFCisKKworCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgICAgICAgc3RydWN0IGNmc196YXB2bm9kZV9vdXQgeyAvKiBDRlNfWkFQVk5PREUgaXMgYSB2ZW51cy0+a2VybmVsIGNhbGwgKi8KKyAgICAgICAgICAgICAgc3RydWN0IENvZGFDcmVkIGNyZWQ7CisgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICB9IGNmc196YXB2bm9kZTsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFJlbW92ZSBhbGwgZW50cmllcyBpbiB0aGUgY2FjaGUgY2FycnlpbmcgdGhlIGNyZWQgYW5kIFZGaWQKKyAgYXMgaW4gdGhlIGFyZ3VtZW50cy4gVGhpcyBkb3duY2FsbCBpcyBwcm9iYWJseSBuZXZlciBpc3N1ZWQuCisKKworICA1CDUuCC43CDcuCC4gIFAIUFUIVVIIUkcIR0UIRUYIRkkISUQIRAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5CisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgICAgICBzdHJ1Y3QgY2ZzX3B1cmdlZmlkX291dCB7IC8qIENGU19QVVJHRUZJRCBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworICAgICAgICAgICAgICBWaWNlRmlkIENvZGFGaWQ7CisgICAgICAgICAgfSBjZnNfcHVyZ2VmaWQ7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBGbHVzaCB0aGUgYXR0cmlidXRlIGZvciB0aGUgZmlsZS4gSWYgaXQgaXMgYSBkaXIgKG9kZAorICB2bm9kZSksIHB1cmdlIGl0cyBjaGlsZHJlbiBmcm9tIHRoZSBuYW1lY2FjaGUgYW5kIHJlbW92ZSB0aGUgZmlsZSBmcm9tIHRoZQorICBuYW1lY2FjaGUuCisKKworCisgIDUINS4ILjgIOC4ILiAgUghSRQhFUAhQTAhMQQhBQwhDRQhFCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgUmVwbGFjZSB0aGUgRmlkJ3MgZm9yIGEgY29sbGVjdGlvbiBvZiBuYW1lcy4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICAgICAgIHN0cnVjdCBjZnNfcmVwbGFjZV9vdXQgeyAvKiBjZnNfcmVwbGFjZSBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworICAgICAgICAgICAgICBWaWNlRmlkIE5ld0ZpZDsKKyAgICAgICAgICAgICAgVmljZUZpZCBPbGRGaWQ7CisgICAgICAgICAgfSBjZnNfcmVwbGFjZTsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFRoaXMgcm91dGluZSByZXBsYWNlcyBhIFZpY2VGaWQgaW4gdGhlIG5hbWUgY2FjaGUgd2l0aAorICBhbm90aGVyLiAgSXQgaXMgYWRkZWQgdG8gYWxsb3cgVmVudXMgZHVyaW5nIHJlaW50ZWdyYXRpb24gdG8gcmVwbGFjZQorICBsb2NhbGx5IGFsbG9jYXRlZCB0ZW1wIGZpZHMgd2hpbGUgZGlzY29ubmVjdGVkIHdpdGggZ2xvYmFsIGZpZHMgZXZlbgorICB3aGVuIHRoZSByZWZlcmVuY2UgY291bnRzIG9uIHRob3NlIGZpZHMgYXJlIG5vdCB6ZXJvLgorCisgIDB3cGFnZQorCisgIDYINi4ILiAgSQhJbghuaQhpdAh0aQhpYQhhbAhsaQhpegh6YQhhdAh0aQhpbwhvbghuIGEIYW4IbmQIZCBjCGNsCGxlCGVhCGFuCG51CHVwCHAKKworCisgIFRoaXMgc2VjdGlvbiBnaXZlcyBicmllZiBoaW50cyBhcyB0byBkZXNpcmFibGUgZmVhdHVyZXMgZm9yIHRoZSBDb2RhCisgIEZTIERyaXZlciBhdCBzdGFydHVwIGFuZCB1cG9uIHNodXRkb3duIG9yIFZlbnVzIGZhaWx1cmVzLiAgQmVmb3JlCisgIGVudGVyaW5nIHRoZSBkaXNjdXNzaW9uIGl0IGlzIHVzZWZ1bCB0byByZXBlYXQgdGhhdCB0aGUgQ29kYSBGUyBEcml2ZXIKKyAgbWFpbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGF0YToKKworCisgIDEuIG1lc3NhZ2UgcXVldWVzCisKKyAgMi4gY25vZGVzCisKKyAgMy4gbmFtZSBjYWNoZSBlbnRyaWVzCisKKyAgICAgVGhlIG5hbWUgY2FjaGUgZW50cmllcyBhcmUgZW50aXJlbHkgcHJpdmF0ZSB0byB0aGUgZHJpdmVyLCBzbyB0aGV5CisgICAgIGNhbiBlYXNpbHkgYmUgbWFuaXB1bGF0ZWQuICAgVGhlIG1lc3NhZ2UgcXVldWVzIHdpbGwgZ2VuZXJhbGx5IGhhdmUKKyAgICAgY2xlYXIgcG9pbnRzIG9mIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbi4gIFRoZSBjbm9kZXMgYXJlCisgICAgIG11Y2ggbW9yZSBkZWxpY2F0ZS4gIFVzZXIgcHJvY2Vzc2VzIGhvbGQgcmVmZXJlbmNlIGNvdW50cyBpbiBDb2RhCisgICAgIGZpbGVzeXN0ZW1zIGFuZCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvIGNsZWFuIHVwIHRoZSBjbm9kZXMuCisKKyAgSXQgY2FuIGV4cGVjdCByZXF1ZXN0cyB0aHJvdWdoOgorCisgIDEuIHRoZSBtZXNzYWdlIHN1YnN5c3RlbQorCisgIDIuIHRoZSBWRlMgbGF5ZXIKKworICAzLiBwaW9jdGwgaW50ZXJmYWNlCisKKyAgICAgQ3VycmVudGx5IHRoZSBfCHBfCGlfCG9fCGNfCHRfCGwgcGFzc2VzIHRocm91Z2ggdGhlIFZGUyBmb3IgQ29kYSBzbyB3ZSBjYW4KKyAgICAgdHJlYXQgdGhlc2Ugc2ltaWxhcmx5LgorCisKKyAgNgg2LgguMQgxLgguICBSCFJlCGVxCHF1CHVpCGlyCHJlCGVtCG1lCGVuCG50CHRzCHMKKworCisgIFRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzIHNob3VsZCBiZSBhY2NvbW1vZGF0ZWQ6CisKKyAgMS4gVGhlIG1lc3NhZ2UgcXVldWVzIHNob3VsZCBoYXZlIG9wZW4gYW5kIGNsb3NlIHJvdXRpbmVzLiAgT24gVW5peAorICAgICB0aGUgb3BlbmluZyBvZiB0aGUgY2hhcmFjdGVyIGRldmljZXMgYXJlIHN1Y2ggcm91dGluZXMuCisKKyAgKwhvICBCZWZvcmUgb3BlbmluZywgbm8gbWVzc2FnZXMgY2FuIGJlIHBsYWNlZC4KKworICArCG8gIE9wZW5pbmcgd2lsbCByZW1vdmUgYW55IG9sZCBtZXNzYWdlcyBzdGlsbCBwZW5kaW5nLgorCisgICsIbyAgQ2xvc2Ugd2lsbCBub3RpZnkgYW55IHNsZWVwaW5nIHByb2Nlc3NlcyB0aGF0IHRoZWlyIHVwY2FsbCBjYW5ub3QKKyAgICAgYmUgY29tcGxldGVkLgorCisgICsIbyAgQ2xvc2Ugd2lsbCBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBtZXNzYWdlIHF1ZXVlcy4KKworCisgIDIuIEF0IG9wZW4gdGhlIG5hbWVjYWNoZSBzaGFsbCBiZSBpbml0aWFsaXplZCB0byBlbXB0eSBzdGF0ZS4KKworICAzLiBCZWZvcmUgdGhlIG1lc3NhZ2UgcXVldWVzIGFyZSBvcGVuLCBhbGwgVkZTIG9wZXJhdGlvbnMgd2lsbCBmYWlsLgorICAgICBGb3J0dW5hdGVseSB0aGlzIGNhbiBiZSBhY2hpZXZlZCBieSBtYWtpbmcgc3VyZSB0aGFuIG1vdW50aW5nIHRoZQorICAgICBDb2RhIGZpbGVzeXN0ZW0gY2Fubm90IHN1Y2NlZWQgYmVmb3JlIG9wZW5pbmcuCisKKyAgNC4gQWZ0ZXIgY2xvc2luZyBvZiB0aGUgcXVldWVzLCBubyBWRlMgb3BlcmF0aW9ucyBjYW4gc3VjY2VlZC4gIEhlcmUKKyAgICAgb25lIG5lZWRzIHRvIGJlIGNhcmVmdWwsIHNpbmNlIGEgZmV3IG9wZXJhdGlvbnMgKGxvb2t1cCwKKyAgICAgcmVhZC93cml0ZSwgcmVhZGRpcikgY2FuIHByb2NlZWQgd2l0aG91dCB1cGNhbGxzLiAgVGhlc2UgbXVzdCBiZQorICAgICBleHBsaWNpdGx5IGJsb2NrZWQuCisKKyAgNS4gVXBvbiBjbG9zaW5nIHRoZSBuYW1lY2FjaGUgc2hhbGwgYmUgZmx1c2hlZCBhbmQgZGlzYWJsZWQuCisKKyAgNi4gQWxsIG1lbW9yeSBoZWxkIGJ5IGNub2RlcyBjYW4gYmUgZnJlZWQgd2l0aG91dCByZWx5aW5nIG9uIHVwY2FsbHMuCisKKyAgNy4gVW5tb3VudGluZyB0aGUgZmlsZSBzeXN0ZW0gY2FuIGJlIGRvbmUgd2l0aG91dCByZWx5aW5nIG9uIHVwY2FsbHMuCisKKyAgOC4gTW91bnRpbmcgdGhlIENvZGEgZmlsZXN5c3RlbSBzaG91bGQgZmFpbCBncmFjZWZ1bGx5IGlmIFZlbnVzIGNhbm5vdAorICAgICBnZXQgdGhlIHJvb3RmaWQgb3IgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHJvb3RmaWQuICBUaGUgbGF0dGVyIGlzCisgICAgIGJlc3QgaW1wbGVtZW50ZWQgYnkgVmVudXMgZmV0Y2hpbmcgdGhlc2Ugb2JqZWN0cyBiZWZvcmUgYXR0ZW1wdGluZworICAgICB0byBtb3VudC4KKworICBOCE5PCE9UCFRFCEUgIE5ldEJTRCBpbiBwYXJ0aWN1bGFyIGJ1dCBhbHNvIExpbnV4IGhhdmUgbm90IGltcGxlbWVudGVkIHRoZQorICBhYm92ZSByZXF1aXJlbWVudHMgZnVsbHkuICBGb3Igc21vb3RoIG9wZXJhdGlvbiB0aGlzIG5lZWRzIHRvIGJlCisgIGNvcnJlY3RlZC4KKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY3JhbWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY3JhbWZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWY1M2YwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jcmFtZnMudHh0CkBAIC0wLDAgKzEsNzYgQEAKKworCUNyYW1mcyAtIGNyYW0gYSBmaWxlc3lzdGVtIG9udG8gYSBzbWFsbCBST00KKworY3JhbWZzIGlzIGRlc2lnbmVkIHRvIGJlIHNpbXBsZSBhbmQgc21hbGwsIGFuZCB0byBjb21wcmVzcyB0aGluZ3Mgd2VsbC4gCisKK0l0IHVzZXMgdGhlIHpsaWIgcm91dGluZXMgdG8gY29tcHJlc3MgYSBmaWxlIG9uZSBwYWdlIGF0IGEgdGltZSwgYW5kCithbGxvd3MgcmFuZG9tIHBhZ2UgYWNjZXNzLiAgVGhlIG1ldGEtZGF0YSBpcyBub3QgY29tcHJlc3NlZCwgYnV0IGlzCitleHByZXNzZWQgaW4gYSB2ZXJ5IHRlcnNlIHJlcHJlc2VudGF0aW9uIHRvIG1ha2UgaXQgdXNlIG11Y2ggbGVzcworZGlza3NwYWNlIHRoYW4gdHJhZGl0aW9uYWwgZmlsZXN5c3RlbXMuIAorCitZb3UgY2FuJ3Qgd3JpdGUgdG8gYSBjcmFtZnMgZmlsZXN5c3RlbSAobWFraW5nIGl0IGNvbXByZXNzaWJsZSBhbmQKK2NvbXBhY3QgYWxzbyBtYWtlcyBpdCBfdmVyeV8gaGFyZCB0byB1cGRhdGUgb24tdGhlLWZseSksIHNvIHlvdSBoYXZlIHRvCitjcmVhdGUgdGhlIGRpc2sgaW1hZ2Ugd2l0aCB0aGUgIm1rY3JhbWZzIiB1dGlsaXR5LgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitGaWxlIHNpemVzIGFyZSBsaW1pdGVkIHRvIGxlc3MgdGhhbiAxNk1CLgorCitNYXhpbXVtIGZpbGVzeXN0ZW0gc2l6ZSBpcyBhIGxpdHRsZSBvdmVyIDI1Nk1CLiAgKFRoZSBsYXN0IGZpbGUgb24gdGhlCitmaWxlc3lzdGVtIGlzIGFsbG93ZWQgdG8gZXh0ZW5kIHBhc3QgMjU2TUIuKQorCitPbmx5IHRoZSBsb3cgOCBiaXRzIG9mIGdpZCBhcmUgc3RvcmVkLiAgVGhlIGN1cnJlbnQgdmVyc2lvbiBvZgorbWtjcmFtZnMgc2ltcGx5IHRydW5jYXRlcyB0byA4IGJpdHMsIHdoaWNoIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5Citpc3N1ZS4KKworSGFyZCBsaW5rcyBhcmUgc3VwcG9ydGVkLCBidXQgaGFyZCBsaW5rZWQgZmlsZXMKK3dpbGwgc3RpbGwgaGF2ZSBhIGxpbmsgY291bnQgb2YgMSBpbiB0aGUgY3JhbWZzIGltYWdlLgorCitDcmFtZnMgZGlyZWN0b3JpZXMgaGF2ZSBubyBgLicgb3IgYC4uJyBlbnRyaWVzLiAgRGlyZWN0b3JpZXMgKGxpa2UKK2V2ZXJ5IG90aGVyIGZpbGUgb24gY3JhbWZzKSBhbHdheXMgaGF2ZSBhIGxpbmsgY291bnQgb2YgMS4gIChUaGVyZSdzCitubyBuZWVkIHRvIHVzZSAtbm9sZWFmIGluIGBmaW5kJywgYnR3LikKKworTm8gdGltZXN0YW1wcyBhcmUgc3RvcmVkIGluIGEgY3JhbWZzLCBzbyB0aGVzZSBkZWZhdWx0IHRvIHRoZSBlcG9jaAorKDE5NzAgR01UKS4gIFJlY2VudGx5LWFjY2Vzc2VkIGZpbGVzIG1heSBoYXZlIHVwZGF0ZWQgdGltZXN0YW1wcywgYnV0Cit0aGUgdXBkYXRlIGxhc3RzIG9ubHkgYXMgbG9uZyBhcyB0aGUgaW5vZGUgaXMgY2FjaGVkIGluIG1lbW9yeSwgYWZ0ZXIKK3doaWNoIHRoZSB0aW1lc3RhbXAgcmV2ZXJ0cyB0byAxOTcwLCBpLmUuIG1vdmVzIGJhY2t3YXJkcyBpbiB0aW1lLgorCitDdXJyZW50bHksIGNyYW1mcyBtdXN0IGJlIHdyaXR0ZW4gYW5kIHJlYWQgd2l0aCBhcmNoaXRlY3R1cmVzIG9mIHRoZQorc2FtZSBlbmRpYW5uZXNzLCBhbmQgY2FuIGJlIHJlYWQgb25seSBieSBrZXJuZWxzIHdpdGggUEFHRV9DQUNIRV9TSVpFCis9PSA0MDk2LiAgQXQgbGVhc3QgdGhlIGxhdHRlciBvZiB0aGVzZSBpcyBhIGJ1ZywgYnV0IGl0IGhhc24ndCBiZWVuCitkZWNpZGVkIHdoYXQgdGhlIGJlc3QgZml4IGlzLiAgRm9yIHRoZSBtb21lbnQgaWYgeW91IGhhdmUgbGFyZ2VyIHBhZ2VzCit5b3UgY2FuIGp1c3QgY2hhbmdlIHRoZSAjZGVmaW5lIGluIG1rY3JhbWZzLmMsIHNvIGxvbmcgYXMgeW91IGRvbid0CittaW5kIHRoZSBmaWxlc3lzdGVtIGJlY29taW5nIHVucmVhZGFibGUgdG8gZnV0dXJlIGtlcm5lbHMuCisKKworRm9yIC91c3Ivc2hhcmUvbWFnaWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzAJdWxlbG9uZwkweDI4Y2QzZDQ1CUxpbnV4IGNyYW1mcyBvZmZzZXQgMAorPjQJdWxlbG9uZwl4CQlzaXplICVkCis+OAl1bGVsb25nCXgJCWZsYWdzIDB4JXgKKz4xMgl1bGVsb25nCXgJCWZ1dHVyZSAweCV4Cis+MTYJc3RyaW5nCT5cMAkJc2lnbmF0dXJlICIlLjE2cyIKKz4zMgl1bGVsb25nCXgJCWZzaWQuY3JjIDB4JXgKKz4zNgl1bGVsb25nCXgJCWZzaWQuZWRpdGlvbiAlZAorPjQwCXVsZWxvbmcJeAkJZnNpZC5ibG9ja3MgJWQKKz40NAl1bGVsb25nCXgJCWZzaWQuZmlsZXMgJWQKKz40OAlzdHJpbmcJPlwwCQluYW1lICIlLjE2cyIKKzUxMgl1bGVsb25nCTB4MjhjZDNkNDUJTGludXggY3JhbWZzIG9mZnNldCA1MTIKKz41MTYJdWxlbG9uZwl4CQlzaXplICVkCis+NTIwCXVsZWxvbmcJeAkJZmxhZ3MgMHgleAorPjUyNAl1bGVsb25nCXgJCWZ1dHVyZSAweCV4Cis+NTI4CXN0cmluZwk+XDAJCXNpZ25hdHVyZSAiJS4xNnMiCis+NTQ0CXVsZWxvbmcJeAkJZnNpZC5jcmMgMHgleAorPjU0OAl1bGVsb25nCXgJCWZzaWQuZWRpdGlvbiAlZAorPjU1Mgl1bGVsb25nCXgJCWZzaWQuYmxvY2tzICVkCis+NTU2CXVsZWxvbmcJeAkJZnNpZC5maWxlcyAlZAorPjU2MAlzdHJpbmcJPlwwCQluYW1lICIlLjE2cyIKKworCitIYWNrZXIgTm90ZXMKKy0tLS0tLS0tLS0tLQorCitTZWUgZnMvY3JhbWZzL1JFQURNRSBmb3IgZmlsZXN5c3RlbSBsYXlvdXQgYW5kIGltcGxlbWVudGF0aW9uIG5vdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9DaGFuZ2VMb2cgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWFiYTUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9DaGFuZ2VMb2cKQEAgLTAsMCArMSwxOTc3IEBACisvKiAtKi0gYXV0by1maWxsIC0qLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MQorCistIGNyZWF0aW9uIG9mIGRldmZzCisKKy0gbW9kaWZpZWQgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXIgZGV2aWNlcyB0byBzdXBwb3J0IGRldmZzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MgorCistIGJ1ZyBmaXggd2l0aCBtYW51YWwgaW5vZGUgY3JlYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzCisKKy0gYnVnZml4ZXMKKworLSBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cworCistIGNyZWF0ZWQgYSBjb3VwbGUgb2Ygc2NyaXB0cyAob25lIHRvIHNhdmUmcmVzdG9yZSBhIGRldmZzIGFuZCB0aGUKKyAgb3RoZXIgdG8gc2V0IHVwIGNvbXBhdGliaWxpdHkgc3ltbGlua3MpCisKKy0gZGV2ZnMgc3VwcG9ydCBmb3IgU0NTSSBkaXNjcy4gTmV3IG5hbWUgZm9ybWF0IGlzOiBzZF9oSGNDaUlsTAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQKKworLSBidWdmaXggZm9yIHRoZSBkaXJlY3RvcnkgcmVhZGluZyBjb2RlCisKKy0gYnVnZml4IGZvciBjb21waWxhdGlvbiB3aXRoIGtlcm5lbGQKKworLSBkZXZmcyBzdXBwb3J0IGZvciBnZW5lcmljIGhhcmQgZGlzY3MKKworLSByYXRpb25hbGlzYXRpb24gb2YgdGhlIHZhcmlvdXMgd2F0Y2hkb2cgZHJpdmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjUKKworLSBzdXBwb3J0IGZvciBtb3VudGluZyBkaXJlY3RseSBmcm9tIGVudHJpZXMgaW4gdGhlIGRldmZzIChpdCBkb2Vzbid0CisgIG5lZWQgdG8gYmUgbW91bnRlZCB0byBkbyB0aGlzKSwgaW5jbHVkaW5nIHRoZSByb290IGZpbGVzeXN0ZW0uCisgIE1vdW50aW5nIG9mIHN3YXAgcGFydGl0aW9ucyBhbHNvIHdvcmtzLiBIZW5jZSwgbm93IGlmIHlvdSBzZXQKKyAgQ09ORklHX0RFVkZTX09OTFkgdG8gJ1knIHRoZW4geW91IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIHlvdXIgZGlzY3MKKyAgdmlhIG9yZGluYXJ5IGRldmljZSBub2Rlcy4gTmF0dXJhbGx5LCB0aGUgZGVmYXVsdCBpcyAnTicgc28gdGhhdCB5b3UKKyAgY2FuIHN0aWxsIHVzZSB5b3VyIG9sZCBkZXZpY2Ugbm9kZXMuICBJZiB5b3Ugd2FudCB0byBtb3VudCBmcm9tIGRldmZzCisgIGVudHJpZXMsIG1ha2Ugc3VyZSB5b3UgdXNlOiBhcHBlbmQgPSAicm9vdD0vZGV2L3NkXy4uLiIgaW4geW91cgorICBsaWxvLmNvbmYuIEl0IHNlZW1zIExJTE8gbG9va3MgZm9yIHRoZSBkZXZpY2UgbnVtYmVyIChtYWpvciZtaW5vcikKKyAgYW5kIHdyaXRlcyB0aGF0IGludG8gdGhlIGtlcm5lbCBpbWFnZSA6LSggCisKKy0gc3VwcG9ydCBmb3IgY2hhcmFjdGVyIG1lbW9yeSBkZXZpY2VzICgvZGV2L251bGwsIC9kZXYvemVybywgL2Rldi9mdWxsCisgIGFuZCBzbyBvbikuIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2CisKKy0gc3VwcG9ydCBmb3Igc3ViZGlyZWN0b3JpZXMKKworLSBzdXBwb3J0IGZvciBzeW1ib2xpYyBsaW5rcyAoY3JlYXRlZCBieSBkZXZmc19ta19zeW1saW5rKCksIG5vCisgIHN1cHBvcnQgeWV0IGZvciBjcmVhdGlvbiB2aWEgc3ltbGluaygyKSkKKworLSBTQ1NJIGRpc2MgbmFtaW5nIG5vdyBjYXN0IGluIHN0b25lLCB3aXRoIHRoZSBmb3JtYXQ6CisgIC9kZXYvc2QvYzBiMXQydTMJY29udHJvbGxlcj0wLCBidXM9MSwgSUQ9MiwgTFVOPTMsIHdob2xlIGRpc2MKKyAgL2Rldi9zZC9jMGIxdDJ1M3A0CWNvbnRyb2xsZXI9MCwgYnVzPTEsIElEPTIsIExVTj0zLCA0dGggcGFydGl0aW9uCisKKy0gbG9vcCBkZXZpY2VzIG5vdyBhcHBlYXIgaW4gZGV2ZnMKKworLSB0dHkgZGV2aWNlcywgY29uc29sZSwgc2VyaWFsIHBvcnRzLCBldGMuIG5vdyBhcHBlYXIgaW4gZGV2ZnMKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIGJ1Z3Mgd2l0aCBtb3VudGluZyBkZXZmcy1vbmx5IGRldmljZXMgbm93IGZpeGVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NworCistIFNDU0kgQ0QtUk9NUywgdGFwZXMgYW5kIGdlbmVyaWMgZGV2aWNlcyBub3cgYXBwZWFyIGluIGRldmZzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2OAorCistIGJ1Z2ZpeCB3aXRoIG5vLXJld2luZCBTQ1NJIHRhcGVzCisKKy0gUkFNRElTQ3Mgbm93IGFwcGVhciBpbiBkZXZmcworCistIGJldHRlciBjbGVhbmluZyB1cCBvZiBkZXZmcyBlbnRyaWVzIGNyZWF0ZWQgYnkgdmFyaW91cyBtb2R1bGVzCisKKy0gaW50ZXJmYWNlIGNoYW5nZSB0byA8ZGV2ZnNfcmVnaXN0ZXI+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2OQorCistIHRoZSB2OCBwYXRjaCB3YXMgY29ycnVwdGVkIHNvbWVob3csIHdoaWNoIHdvdWxkIGFmZmVjdCB0aGUgcGF0Y2ggZm9yCisgIGxpbnV4L2ZzL2ZpbGVzeXN0ZW1zLmMKKyAgSSd2ZSBhbHNvIGZpeGVkIHRoZSB2OCBwYXRjaCBmaWxlIG9uIHRoZSBXV1cKKworLSBNZXRhRGV2aWNlcyAoL2Rldi9tZCopIHNob3VsZCBub3cgYXBwZWFyIGluIGRldmZzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTAKKworLSBidWdmaXggaW4gbWV0YSBkZXZpY2Ugc3VwcG9ydCBmb3IgZGV2ZnMKKworLSBjcmVhdGVkIHRoaXMgQ2hhbmdlTG9nIGZpbGUKKworLSBhZGRlZCBkZXZmcyBzdXBwb3J0IHRvIHRoZSBmbG9wcHkgZHJpdmVyCisKKy0gYWRkZWQgc3VwcG9ydCBmb3IgY3JlYXRpbmcgc29ja2V0cyBpbiBhIGRldmZzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTEKKworLSBhZGRlZCBERVZGU19GTF9ISURFX1VOUkVHIGZsYWcKKworLSBpbmNvcnBvcmF0ZWQgYmV0dGVyIHBhdGNoIGZvciB0dHluYW1lKCkgaW4gbGliYyA1LjQuNDMgZnJvbSBILkouIEx1LgorCistIGludGVyZmFjZSBjaGFuZ2UgdG8gPGRldmZzX21rX3N5bWxpbms+CisKKy0gc3VwcG9ydCBmb3IgY3JlYXRpbmcgc3ltbGlua3Mgd2l0aCBzeW1saW5rKDIpCisKKy0gcGFyYWxsZWwgcG9ydCBwcmludGVyICgvZGV2L2xwKikgbm93IGFwcGVhcnMgaW4gZGV2ZnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMgorCistIGFkZGVkIGlub2RlIGNoZWNrIHRvIDxkZXZmc19maWxsX2ZpbGU+IGZ1bmN0aW9uCisKKy0gaW1wcm92ZWQgZGV2ZnMgc3VwcG9ydCB3aGVuIG1vdW50aW5nIGZyb20gZGV2ZnMKKworLSBhZGRlZCBjYWxsIHRvIDw8cmVsZWFzZT4+IG9wZXJhdGlvbiB3aGVuIHJlbW92aW5nIHN3YXAgYXJlYXMgb24KKyAgZGV2ZnMgZGV2aWNlcworCistIGluY3JlYXNlZCBOUl9TVVBFUiB0byAxMjggdG8gc3VwcG9ydCBsYXJnZSBudW1iZXJzIG9mIGRldmZzIG1vdW50cworICAoZm9yIGNocm9vdCgyKSBnYW9scykKKworLSBmaXhlZCBidWcgaW4gU0NTSSBkaXNjIHN1cHBvcnQ6IHdhcyBnZW5lcmF0aW5nIGluY29ycmVjdCBtaW5vcnMgaWYKKyAgU0NTSSBJRCdzIGRpZCBub3Qgc3RhcnQgYXQgMCBhbmQgaW5jcmVhc2UgYnkgMQorCistIHN1cHBvcnQgc3ltbGluayB0cmF2ZXJzYWwgd2hlbiBtb3VudGluZyByb290Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTMKKworLSBhZGRlZCBkZXZmcyBzdXBwb3J0IHRvIHNvdW5kY2FyZCBkcml2ZXIKKyAgVGhhbmtzIHRvIEVyaWMgRHVtYXMgPGR1bWFzQGxpbnV4LmV1Lm9yZz4gYW5kCisgIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIGFkZGVkIGRldmZzIHN1cHBvcnQgdG8gdGhlIGpveXN0aWNrIGRyaXZlcgorCistIGxvb3AgZHJpdmVyIG5vdyBoYXMgaXQncyBvd24gc3ViZGlyZWN0b3J5ICIvZGV2L2xvb3AvIgorCistIGNyZWF0ZWQgPGRldmZzX2dldF9mbGFncz4gYW5kIDxkZXZmc19zZXRfZmxhZ3M+IGZ1bmN0aW9ucworCistIGZpeCBwcm9ibGVtIHdpdGggU0NTSSBkaXNjIGNvbXBhdGliaWxpdHkgbmFtZXMgKHNke2EsYixjLGQsZSxmfSkKKyAgd2hpY2ggYXNzdW1lcyBJRCdzIHN0YXJ0IGF0IDAgYW5kIGluY3JlYXNlIGJ5IDEuIEFsc28gb25seSBjcmVhdGUKKyAgZGV2ZnMgZW50cmllcyBmb3IgU0NTSSBkaXNjIHBhcnRpdGlvbnMgd2hpY2ggYWN0dWFsbHkgZXhpc3QKKyAgU2hvdyBuZXcgbmFtZXMgaW4gcGFydGl0aW9uIGNoZWNrCisgIFRoYW5rcyB0byBKYWt1YiBKZWxpbmVrIDxqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6PgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE0CisKKy0gYnVnIGZpeCBpbiBmbG9wcHkgZHJpdmVyOiB3b3VsZCBub3QgY29tcGlsZSB3aXRob3V0CisgIENPTkZJR19ERVZGU19GUz0nWScKKyAgVGhhbmtzIHRvIEp1cmdlbiBCb3R6IDxqYm90ekBub3ZhLmJvdHoub3JnPgorCistIGJ1ZyBmaXggaW4gbG9vcCBkcml2ZXIKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIGRvIG5vdCBjcmVhdGUgZGV2ZnMgZW50cmllcyBmb3IgcHJpbnRlcnMgbm90IGNvbmZpZ3VyZWQKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIGRvIG5vdCBjcmVhdGUgZGV2ZnMgZW50cmllcyBmb3Igc2VyaWFsIHBvcnRzIG5vdCBwcmVzZW50CisgIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBlbnN1cmUgPHR0eV9yZWdpc3Rlcl9kZXZmcz4gaXMgZXhwb3J0ZWQgZnJvbSB0dHlfaW8uYworICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+CisKKy0gYWxsb3cgdW5yZWdpc3RlcmluZyBvZiBkZXZmcyBzeW1saW5rIGVudHJpZXMKKworLSBmaXhlZCBidWcgaW4gU0NTSSBkaXNjIG5hbWluZyBpbnRyb2R1Y2VkIGluIGxhc3QgcGF0Y2ggdmVyc2lvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1CisKKy0gcG9ydGVkIHRvIGtlcm5lbCAyLjEuODEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNgorCistIGNyZWF0ZWQgPGRldmZzX3NldF9zeW1saW5rX2Rlc3RpbmF0aW9uPiBmdW5jdGlvbgorCistIG1vdmVkIERFVkZTX1NVUEVSX01BR0lDIGludG8gaGVhZGVyIGZpbGUKKworLSBhZGRlZCBERVZGU19GTF9ISURFIGZsYWcKKworLSBjcmVhdGVkIDxkZXZmc19nZXRfbWFqX21pbj4KKworLSBjcmVhdGVkIDxkZXZmc19nZXRfaGFuZGxlX2Zyb21faW5vZGU+CisKKy0gZml4ZWQgYnVncyBpbiBzZWFyY2hpbmcgYnkgbWFqb3ImbWlub3IKKworLSBjaGFuZ2VkIGludGVyZmFjZSB0byA8ZGV2ZnNfdW5yZWdpc3Rlcj4sIDxkZXZmc19maWxsX2ZpbGU+IGFuZAorICA8ZGV2ZnNfZmluZF9oYW5kbGU+CisKKy0gZml4ZWQgaW5vZGUgdGltZXMgd2hlbiBzeW1saW5rIGNyZWF0ZWQgd2l0aCBzeW1saW5rKDIpCisKKy0gY2hhbmdlIHR0eSBkcml2ZXIgdG8gZG8gYXV0by1jcmVhdGlvbiBvZiBkZXZmcyBlbnRyaWVzCisgIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBmaXhlZCBidWcgaW4gZ2VuaGQuYzogd2hvbGUgZGlzYyAobm9uLVNDU0kpIHdhcyBub3QgcmVnaXN0ZXJlZCB0bworICBkZXZmcworCistIHVwZGF0ZWQgbGliYyA1LjQuNDMgcGF0Y2ggZm9yIHR0eW5hbWUoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3CisKKy0gYWRkZWQgQ09ORklHX0RFVkZTX1RUWV9DT01QQVQKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIGJ1Z2ZpeCBpbiBkZXZmcyBzdXBwb3J0IGZvciBkcml2ZXJzL2NoYXIvbHAuYworICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+CisKKy0gY2xlYW4gdXAgc2VyaWFsIGRyaXZlciBzbyB0aGF0IFBDTUNJQSBkZXZpY2VzIHVucmVnaXN0ZXIgY29ycmVjdGx5CisgIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBmaXhlZCBidWcgaW4gZ2VuaGQuYzogd2hvbGUgZGlzYyAobm9uLVNDU0kpIHdhcyBub3QgcmVnaXN0ZXJlZCB0bworICBkZXZmcyBbd2FzIG1pc3NpbmcgaW4gcGF0Y2ggdjE2XQorCistIHVwZGF0ZWQgbGliYyA1LjQuNDMgcGF0Y2ggZm9yIHR0eW5hbWUoKSBbd2FzIG1pc3NpbmcgaW4gcGF0Y2ggdjE2XQorCistIGFsbCBTQ1NJIGRldmljZXMgbm93IHJlZ2lzdGVyZWQgaW4gL2Rldi9zZworCistIHN1cHBvcnQgcmVtb3ZhbCBvZiBkZXZmcyBlbnRyaWVzIHZpYSB1bmxpbmsoMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOAorCistIGFkZGVkIGZsb3BweS8/dTcyMCBmbG9wcHkgZW50cnkKKworLSBmaXhlZCBrZXJuZWxkIHN1cHBvcnQgZm9yIGVudHJpZXMgaW4gZGV2ZnMgc3ViZGlyZWN0b3JpZXMKKworLSBpbmNvcnBvcmF0ZWQgbGF0ZXN0IHBhdGNoIGZvciB0dHluYW1lKCkgaW4gbGliYyA1LjQuNDMgZnJvbSBILkouIEx1LgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE5CisKKy0gYnVnIGZpeCB3aGVuIGxvb2tpbmcgdXAgdW5yZWdpc3RlcmVkIGVudHJpZXM6IGtlcm5lbGQgd2FzIG5vdCBjYWxsZWQKKworLSBmaXhlcyBmb3Iga2VybmVsIDIuMS44NiAobm93IHJlcXVpcmVzIDIuMS44NikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMAorCistIG9ubHkgY3JlYXRlIGF2YWlsYWJsZSBmbG9wcHkgZW50cmllcworICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KKworLSBuZXcgSURFIG5hbWluZyBzY2hlbWUgZm9sbG93aW5nIFNDU0kgZm9ybWF0IChpLmUuIC9kZXYvaWQvYzBiMHQwdTBwMQorICBpbnN0ZWFkIG9mIC9kZXYvaGRhMSkKKyAgVGhhbmtzIHRvIEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3ogPGFua3J5QGdyZWVuLm1pZi5wZy5nZGEucGw+CisKKy0gbmV3IFhUIGRpc2MgbmFtaW5nIHNjaGVtZSBmb2xsb3dpbmcgU0NTSSBmb3JtYXQgKGkuZS4gL2Rldi94ZC9jMHQwcDEKKyAgaW5zdGVhZCBvZiAvZGV2L3hkYTEpCisgIFRoYW5rcyB0byBBbmRyemVqIEtyenlzenRvZm93aWN6IDxhbmtyeUBncmVlbi5taWYucGcuZ2RhLnBsPgorCistIG5ldyBub24tc3RhbmRhcmQgQ0QtUk9NIG5hbWVzIChpLmUuIC9kZXYvc2JwL2MjdCMpCisgIFRoYW5rcyB0byBBbmRyemVqIEtyenlzenRvZm93aWN6IDxhbmtyeUBncmVlbi5taWYucGcuZ2RhLnBsPgorCistIGFsbG93IHN5bWxpbmsgdHJhdmVyc2FsIHdoZW4gbW91bnRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbQorCistIENyZWF0ZSBlbnRyaWVzIGZvciBNRCBkZXZpY2VzIGF0IE1EIGluaXQKKyAgVGhhbmtzIHRvIENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3k1QGNhcHdheS5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjEKKworLSBwb3J0ZWQgdG8ga2VybmVsIDIuMS45MQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIyCisKKy0gU0NTSSBob3N0IG51bWJlciBwYXRjaCAoInNjc2lob3N0cz0iIGtlcm5lbCBvcHRpb24pCisgIFRoYW5rcyB0byBBbmRyemVqIEtyenlzenRvZm93aWN6IDxhbmtyeUBncmVlbi5taWYucGcuZ2RhLnBsPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIzCisKKy0gRml4ZWQgcGVyc2lzdGVuY2UgYnVnIHdpdGggZGV2aWNlIG51bWJlcnMgZm9yIG1hbnVhbGx5IGNyZWF0ZWQKKyAgZGV2aWNlIGZpbGVzCisKKy0gRml4ZWQgcHJvYmxlbSB3aXRoIHJlY3JlYXRpbmcgc3ltbGlua3Mgd2l0aCBkaWZmZXJlbnQgY29udGVudAorCistIEFkZGVkIENPTkZJR19ERVZGU19NT1VOVCAobW91bnQgZGV2ZnMgb24gL2RldiBhdCBib290IHRpbWUpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjQKKworLSBTd2l0Y2hlZCBmcm9tIENPTkZJR19LRVJORUxEIHRvIENPTkZJR19LTU9EOiBtb2R1bGUgYXV0b2xvYWRpbmcKKyAgc2hvdWxkIG5vdyB3b3JrIGFnYWluCisKKy0gSGlkZSBlbnRyaWVzIHdoaWNoIGFyZSBtYW51YWxseSB1bmxpbmtlZAorCistIEFsd2F5cyBpbnZhbGlkYXRlIGRldmZzIGRlbnRyeSBjYWNoZSB3aGVuIHJlZ2lzdGVyaW5nIGVudHJpZXMKKworLSBTdXBwb3J0IHJlbW92YWwgb2YgZGV2ZnMgZGlyZWN0b3JpZXMgdmlhIHJtZGlyKDIpCisKKy0gRW5zdXJlIGRpcmVjdG9yaWVzIGNyZWF0ZWQgYnkgPGRldmZzX21rX2Rpcj4gYXJlIHZpc2libGUKKworLSBEZWZhdWx0IG5vIGFjY2VzcyBmb3IgIm90aGVyIiBmb3IgZmxvcHB5IGRldmljZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjI1CisKKy0gVXBkYXRlcyB0byBDUkVESVRTIGZpbGUgYW5kIG1pbm9yIElERSBudW1iZXJpbmcgY2hhbmdlCisgIFRoYW5rcyB0byBBbmRyemVqIEtyenlzenRvZm93aWN6IDxhbmtyeUBncmVlbi5taWYucGcuZ2RhLnBsPgorCistIEludmFsaWRhdGUgZGV2ZnMgZGVudHJ5IGNhY2hlIHdoZW4gbWFraW5nIGRpcmVjdG9yaWVzCisKKy0gSW52YWxpZGF0ZSBkZXZmcyBkZW50cnkgY2FjaGUgd2hlbiByZW1vdmluZyBlbnRyaWVzCisKKy0gTW9yZSBpbmZvcm1hdGl2ZSBtZXNzYWdlIGlmIHJvb3QgRlMgbW91bnQgZmFpbHMgd2hlbiBkZXZmcworICBjb25maWd1cmVkCisKKy0gRml4ZWQgcGVyc2lzdGVuY2UgYnVnIHdpdGggZmlmb3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyNgorCistIHBvcnRlZCB0byBrZXJuZWwgMi4xLjk3CisKKy0gQ2hhbmdlZCBzZXJpYWwgZGlyZWN0b3J5IGZyb20gIi9kZXYvc2VyaWFsIiB0byAiL2Rldi90dHMiIGFuZAorICAiL2Rldi9jb25zb2xlcyIgdG8gIi9kZXYvdmMiIHRvIGJlIG1vcmUgZnJpZW5kbHkgdG8gbmV3IHByb2NwcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjI3CisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgSURFNCBhbmQgSURFNQorICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KKworLSBEb2N1bWVudGVkICJzY3NpaG9zdHM9IiBib290IHBhcmFtZXRlcgorCistIFByaW50IHByb2Nlc3MgY29tbWFuZCB3aGVuIGRlYnVnZ2luZyBrZXJuZWxkL2ttb2QKKworLSBBZGRlZCBkZWJ1Z2dpbmcgZm9yIHJlZ2lzdGVyL3VucmVnaXN0ZXIvY2hhbmdlIG9wZXJhdGlvbnMKKworLSBBZGRlZCAiZGV2ZnM9IiBib290IG9wdGlvbnMKKworLSBIaWRlIHVucmVnaXN0ZXJlZCBlbnRyaWVzIGJ5IGRlZmF1bHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyOAorCistIE5vIGxvbmdlciBsb2NrL3VubG9jayBzdXBlcmJsb2NrIGluIDxkZXZmc19wdXRfc3VwZXI+IChjb3BlIHdpdGgKKyAgcmVjZW50IFZGUyBpbnRlcmZhY2UgY2hhbmdlKQorCistIERvIG5vdCBhdXRvbWF0aWNhbGx5IGNoYW5nZSBvd25lcnNoaXAvcHJvdGVjdGlvbiBvZiAvZGV2L3R0eQorCistIERyb3AgbmVnYXRpdmUgZGVudHJpZXMgd2hlbiB0aGV5IGFyZSByZWxlYXNlZAorCistIE1hbmFnZSBkY2FjaGUgbW9yZSBlZmZpY2llbnRseQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjI5CisKKy0gQWRkZWQgREVWRlNfRkxfQVVUT19ERVZOVU0gZmxhZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjMwCisKKy0gTm8gbG9uZ2VyIHNldCB1bm5lY2Vzc2FyeSBtZXRob2RzCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuOTktcHJlMworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjMxCisKKy0gQWRkZWQgUElEIGRpc3BsYXkgdG8gPGNhbGxfa2VybmVsZD4gZGVidWdnaW5nIG1lc3NhZ2UKKworLSBBZGRlZCAiZGlyZWFkIiBhbmQgImRpd3JpdGUiIG9wdGlvbnMKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMDIKKworLSBGaXhlZCBwZXJzaXN0ZW5jZSBwcm9ibGVtIHdpdGggcGVybWlzc2lvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzMgorCistIEZpeGVkIGRldmZzIHN1cHBvcnQgaW4gZHJpdmVycy9ibG9jay9tZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MzMKKworLSBTdXBwb3J0IGxlZ2FjeSBkZXZpY2Ugbm9kZXMKKworLSBGaXhlZCBidWcgd2hlcmUgcmVjcmVhdGVkIGlub2RlcyB3ZXJlIGhpZGRlbgorCistIE5ldyBJREUgbmFtaW5nIHNjaGVtZTogZXZlcnl0aGluZyBpcyB1bmRlciAvZGV2L2lkZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjM0CisKKy0gSW1wcm92ZWQgZGVidWdnaW5nIGluIDxnZXRfdmZzX2lub2RlPgorCistIFByZXZlbnQgZHVwbGljYXRlIGNhbGxzIHRvIDxkZXZmc19ta19kaXI+IGluIFNDU0kgbGF5ZXIKKworLSBObyBsb25nZXIgZnJlZSBvbGQgZGVudHJpZXMgaW4gPGRldmZzX21rX2Rpcj4KKworLSBGcmVlIGFsbCBkZW50cmllcyBmb3IgYSBnaXZlbiBlbnRyeSB3aGVuIGRlbGV0aW5nIGlub2RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjM1CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTA1IChzb3VuZCBkcml2ZXIgY2hhbmdlcykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzNgorCistIEZpeGVkIHNvdW5kIGRyaXZlciBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MzcKKworLSBNaW5vciBkb2N1bWVudGF0aW9uIHR3ZWFrcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjM4CisKKy0gTW9yZSBkb2N1bWVudGF0aW9uIHR3ZWFrcworCistIEZpeCBmb3Igc291bmQgZHJpdmVyIHBvcnQKKworLSBSZW1vdmVkIHR0eW5hbWUtcGF0Y2ggKGdyYWIgbGliYyA1LjQuNDQgaW5zdGVhZCkKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMDctcHJlMiAobG9vcCBkcml2ZXIgZml4KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjM5CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTA3IChoZC5jIGh1bmsgYnJva2UgZHVlIHRvIHNwZWxsaW5nICJmaXhlcyIpLiBTaWdoCisKKy0gUmVtb3ZlZCBtYW55ICNpZmRlZidzLCByZXBsYWNlZCB3aXRoIHRyaWNrZXJ5IGluIGluY2x1ZGUvZGV2ZnNfZnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQwCisKKy0gRml4IGZvciBzb3VuZCBkcml2ZXIgcG9ydAorCistIExpbWl0IGF1dG8tZGV2aWNlIG51bWJlcmluZyB0byBtYWpvcnMgMTI4IHRvIDIzOQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQxCisKKy0gRml4ZWQgaW5vZGUgdGltZXMgcGVyc2lzdGVuY2UgcHJvYmxlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQyCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTA4IChkcml2ZXJzL3Njc2kvaG9zdHMuYyBodW5rIGJyb2tlKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQzCisKKy0gRml4ZWQgc3BlbGxpbmcgaW4gPGRldmZzX3JlYWRsaW5rPiBkZWJ1ZworCistIEZpeGVkIGJ1ZyBpbiA8ZGV2ZnNfc2V0dXA+IHBhcnNpbmcgImRpbG9va3VwIgorCistIE1vcmUgI2lmZGVmJ3MgcmVtb3ZlZAorCistIFN1cHBvcnRlZCBTcGFyYyBrZXlib2FyZCAoL2Rldi9rYmQpCisKKy0gU3VwcG9ydGVkIERTUDU2MDAxIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NvciAoL2Rldi9kc3A1NmspCisKKy0gU3VwcG9ydGVkIEFwcGxlIERlc2t0b3AgQnVzICgvZGV2L2FkYikKKworLSBTdXBwb3J0ZWQgQ29kYSBuZXR3b3JrIGZpbGUgc3lzdGVtICgvZGV2L2NmcyopCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NDQKKworLSBGaXhlZCBkZXZmcyBpbm9kZSBsZWFrIHdoZW4gbWFudWFsbHkgcmVjcmVhdGluZyBpbm9kZXMKKworLSBGaXhlZCBwZXJtaXNzaW9uIHBlcnNpc3RlbmNlIHByb2JsZW0gd2hlbiByZWNyZWF0aW5nIGlub2RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ1CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTEwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NDYKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMTItcHJlMQorCistIFJlbW92ZWQgaGFybWxlc3MgInVudXNlZCB2YXJpYWJsZSIgY29tcGlsZXIgd2FybmluZworCistIEZpeGVkIG1vZGVzIGZvciBtYW51YWxseSByZWNyZWF0ZWQgZGV2aWNlIG5vZGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NDcKKworLSBBZGRlZCBOVUxMIGRldmZzIGlub2RlIHdhcm5pbmcgaW4gPGRldmZzX3JlYWRfaW5vZGU+CisKKy0gRm9yY2UgYWxsIGlub2RlIG5saW5rIHZhbHVlcyB0byAxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NDgKKworLSBBZGRlZCAiZGlta25vZCIgb3B0aW9uCisKKy0gU2V0IGlub2RlIG5saW5rIHRvIDAgd2hlbiBmcmVlaW5nIGRlbnRyaWVzCisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgdmlydHVhbCBjb25zb2xlIGNhcHR1cmUgZGV2aWNlcyAoL2Rldi92Y3MqKQorICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KKworLSBGaXhlZCBtb2RlcyBmb3IgbWFudWFsbHkgcmVjcmVhdGVkIHN5bWxpbmtzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NDkKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMTMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY1MAorCistIEZpeGVkIGJ1Z3MgaW4gcmVjcmVhdGVkIGRpcmVjdG9yaWVzIGFuZCBzeW1saW5rcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjUxCisKKy0gSW1wcm92ZWQgcm9idXN0bmVzcyBvZiByYy5kZXZmcyBzY3JpcHQKKyAgVGhhbmtzIHRvIFJvZGVyaWNoIFNjaHVwcCA8cnNjaEBleHBlcnRlYW0uZGU+CisKKy0gRml4ZWQgYnVncyBpbiByZWNyZWF0ZWQgZGV2aWNlIG5vZGVzCisKKy0gRml4ZWQgYnVnIGluIGN1cnJlbnRseSB1bnVzZWQgPGRldmZzX2dldF9oYW5kbGVfZnJvbV9pbm9kZT4KKworLSBEZWZpbmVkIG5ldyA8ZGV2ZnNfaGFuZGxlX3Q+IHR5cGUKKworLSBJbXByb3ZlZCBkZWJ1Z2dpbmcgd2hlbiBnZXR0aW5nIGVudHJpZXMKKworLSBGaXhlZCBidWcgd2hlcmUgZGlyZWN0b3JpZXMgY291bGQgYmUgZW1wdGllZAorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjExNQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjUyCisKKy0gUmVwbGFjZWQgZHVtbXkgLmVwb2NoIGlub2RlIHdpdGggLmRldmZzZCBjaGFyYWN0ZXIgZGV2aWNlCisKKy0gTW9kaWZpZWQgcmMuZGV2ZnMgdG8gdGFrZSBhY2NvdW50IG9mIGFib3ZlIGNoYW5nZQorCistIFJlbW92ZWQgc3B1cmlvdXMgZHJpdmVyIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiBDT05GSUdfREVWRlNfRlM9bgorCistIEltcGxlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiAwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NTMKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMTYgKGttb2QgY2hhbmdlIGJyb2tlIGh1bmspCisKKy0gVXBkYXRlZCBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwCisKKy0gVGVzdCBhbmQgdHR5IHBhdHRlcm4gcGF0Y2ggZm9yIHJjLmRldmZzIHNjcmlwdAorICBUaGFua3MgdG8gUm9kZXJpY2ggU2NodXBwIDxyc2NoQGV4cGVydGVhbS5kZT4KKworLSBBZGRlZCBzb290aGluZyBtZXNzYWdlIHRvIHdhcm5pbmcgaW4gPGRldmZzX2RfaXB1dD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY1NAorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjExNworCistIEZpeGVkIGRlZmF1bHQgcGVybWlzc2lvbnMgaW4gc291bmQgZHJpdmVyCisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgZnJhbWUgYnVmZmVyIGRldmljZXMgKC9kZXYvZmIqKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjU1CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTE5CisKKy0gVXNlIEdDQyBleHRlbnNpb25zIGZvciBzdHJ1Y3R1cmUgaW5pdGlhbGlzYXRpb25zCisKKy0gSW1wbGVtZW50ZWQgYXN5bmMgb3BlbiBub3RpZmljYXRpb24KKworLSBJbmNyZW1lbnRlZCBkZXZmc2QgcHJvdG9jb2wgcmV2aXNpb24gdG8gMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjU2CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTIwLXByZTMKKworLSBNb3ZlZCBhc3luYyBvcGVuIG5vdGlmaWNhdGlvbiB0byBlbmQgb2YgPGRldmZzX29wZW4+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NTcKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMjEKKworLSBQcmVwZW5kZWQgIi9kZXYvIiB0byBtb2R1bGUgbG9hZCByZXF1ZXN0CisKKy0gUmVuYW1lZCA8Y2FsbF9rZXJuZWxkPiB0byA8Y2FsbF9rbW9kPgorCistIENyZWF0ZWQgc2FtcGxlIG1vZHVsZXMuY29uZiBmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NTgKKworLSBGaXhlZCB0eXBvICJBWVNOQyIgLT4gIkFTWU5DIgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjU5CisKKy0gQWRkZWQgb3BlbiBmbGFnIGZvciBmaWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjYwCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTIzLXByZTIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2MQorCistIFNldCBpX2Jsb2Nrcz0wIGFuZCBpX2Jsa3NpemU9MTAyNCBpbiA8ZGV2ZnNfcmVhZF9pbm9kZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2MgorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyMworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjYzCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTI0LXByZTIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2NAorCistIEZpeGVkIFVuaXg5OCBwdHkgc3VwcG9ydAorCistIEluY3JlYXNlZCBidWZmZXIgc2l6ZSBpbiA8Z2V0X3BhcnRpdGlvbl9saXN0PiB0byBhdm9pZCBjcmFzaCBhbmQKKyAgYnVybgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjY1CisKKy0gTW9yZSBVbml4OTggcHR5IHN1cHBvcnQgZml4ZXMKKworLSBBZGRlZCB0ZXN0IGZvciBlbXB0eSA8PG5hbWU+PiBpbiA8ZGV2ZnNfZmluZF9oYW5kbGU+CisKKy0gUmVuYW1lZCA8Z2VuZXJhdGVfcGF0aD4gdG8gPGRldmZzX2dlbmVyYXRlX3BhdGg+IGFuZCBwdWJsaXNoZWQKKworLSBDcmVhdGVkIC9kZXYvcm9vdCBzeW1saW5rCisgIFRoYW5rcyB0byBSb2RlcmljaCBTY2h1cHAgPHJzY2hARXhwZXJUZWFtLmRlPgorICB3aXRoIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyBieSBtZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjY2CisKKy0gWWV0IG1vcmUgVW5peDk4IHB0eSBzdXBwb3J0IGZpeGVzIChub3cgdGVzdGVkKQorCistIENyZWF0ZWQgPGRldmZzX2dldF9mb3BzPgorCistIFN1cHBvcnQgbWVkaWEgY2hhbmdlIGNoZWNrcyB3aGVuIENPTkZJR19ERVZGU19PTkxZPXkKKworLSBBYm9saXNoZWQgVW5peDk4LXN0eWxlIFBUWSBuYW1lcyBmb3Igb2xkIFBUWSBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NjcKKworLSBBZGRlZCBpbmxpbmUgZGVjbGFyYXRpb24gZm9yIGR1bW15IDxkZXZmc19nZW5lcmF0ZV9wYXRoPgorCistIFJlbW92ZWQgc3B1cmlvdXMgInVuYWJsZSB0byByZWdpc3Rlci4uLiBpbiBkZXZmcyIgbWVzc2FnZXMgd2hlbgorICBDT05GSUdfREVWRlNfRlM9bgorCistIEZpeGVkIG1pc2MuIGRldmljZXMgd2hlbiBDT05GSUdfREVWRlNfRlM9bgorCistIExpbWl0IGF1dG8tZGV2aWNlIG51bWJlcmluZyB0byBtYWpvcnMgMTQ0IHRvIDIzOQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjY4CisKKy0gSGlkZSB1bm9wZW5lZCB2aXJ0dWFsIGNvbnNvbGVzIGZyb20gZGlyZWN0b3J5IGxpc3RpbmdzCisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgdmlkZW8gY2FwdHVyZSBkZXZpY2VzCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTI1Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NjkKKworLSBGaXggZm9yIENPTkZJR19WVD1uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzAKKworLSBBZGRlZCBzdXBwb3J0IGZvciBub24tT1NTL0ZyZWUgc291bmQgY2FyZHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY3MQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyNi1wcmUyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzIKKworLSAjaWZkZWYncyBmb3IgQ09ORklHX0RFVkZTX0RJU0FCTEVfT0xEX05BTUVTIHJlbW92ZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY3MworCistIENPTkZJR19ERVZGU19ESVNBQkxFX09MRF9OQU1FUyByZXBsYWNlZCB3aXRoICJub2NvbXBhdCIgYm9vdCBvcHRpb24KKworLSBDT05GSUdfREVWRlNfQk9PVF9PUFRJT05TIHJlbW92ZWQ6IGJvb3Qgb3B0aW9ucyBhbHdheXMgYXZhaWxhYmxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzQKKworLSBSZW1vdmVkIENPTkZJR19ERVZGU19NT1VOVCBhbmQgIm1vdW50IiBib290IG9wdGlvbiBhbmQgcmVwbGFjZWQgd2l0aAorICAibm9tb3VudCIgYm9vdCBvcHRpb24KKworLSBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworLSBVcGRhdGVkIHNhbXBsZSBtb2R1bGVzLmNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY3NQorCistIFVwZGF0ZWQgc2FtcGxlIG1vZHVsZXMuY29uZgorCistIFJlbW91bnQgZGV2ZnMgYWZ0ZXIgaW5pdHJkIGZpbmlzaGVzCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTI3CisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgSVNETgorICBUaGFua3MgdG8gQ2hyaXN0b3BoZSBMZXJveSA8Y2hyaXN0b3BoZS5sZXJveTVAY2Fwd2F5LmNvbT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY3NgorCistIFVwZGF0ZWQgYW4gZW1haWwgYWRkcmVzcyBpbiBDaGFuZ2VMb2cKKworLSBDT05GSUdfREVWRlNfT05MWSByZXBsYWNlZCB3aXRoICJvbmx5IiBib290IG9wdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjc3CisKKy0gQWRkZWQgREVWRlNfRkxfUkVNT1ZBQkxFIGZsYWcKKworLSBDaGVjayBmb3IgZGlzYyBjaGFuZ2Ugd2hlbiBsaXN0aW5nIGRpcmVjdG9yaWVzIHdpdGggcmVtb3ZhYmxlIG1lZGlhCisgIGRldmljZXMKKworLSBVc2UgREVWRlNfRkxfUkVNT1ZBQkxFIGluIHNkLmMKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMjgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY3OAorCistIE9ubHkgY2FsbCA8c2Nhbl9kaXJfZm9yX3JlbW92YWJsZT4gb24gZmlyc3QgY2FsbCB0byA8ZGV2ZnNfcmVhZGRpcj4KKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMjktcHJlNQorCistIElTRE4gc3VwcG9ydCBpbXByb3ZlbWVudHMKKyAgVGhhbmtzIHRvIENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3k1QGNhcHdheS5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzkKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMzAKKworLSBSZW5hbWVkIG1pc2NkZXZpY2UgImFwbSIgdG8gImFwbV9iaW9zIiB0byBiZSBjb25zaXN0ZW50IHdpdGgKKyAgZGV2aWNlcy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY4MAorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEzMQorCistIFVwZGF0ZWQgPGRldmZzX3JtZGlyPiBmb3IgVkZTIGNoYW5nZSBpbiAyLjEuMTMxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2ODEKKworLSBGaXhlZCBwZXJtaXNzaW9ucyBvbiAvZGV2L3B0bXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY4MgorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEzMi1wcmU0CisKKy0gQ2hhbmdlZCBpbml0aWFsIHBlcm1pc3Npb25zIG9uIC9kZXYvcHRzLyoKKworLSBDcmVhdGVkIDxkZXZmc19ta19jb21wYXQ+CisKKy0gQWRkZWQgInN5bWxpbmtzIiBib290IG9wdGlvbgorCistIENoYW5nZWQgZGV2ZnNfcmVnaXN0ZXJfYmxrZGV2KCkgYmFjayB0byByZWdpc3Rlcl9ibGtkZXYoKSBmb3IgSURFCisKKy0gQ2hlY2sgZm9yIHBhcnRpdGlvbnMgb24gcmVtb3ZhYmxlIG1lZGlhIGluIDxkZXZmc19sb29rdXA+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2ODMKKworLSBGaXhlZCBzdXBwb3J0IGZvciByYW1kaXNjIHdoZW4gdXNpbmcgc3RyaW5nLWJhc2VkIHJvb3QgRlMgbmFtZQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4yLjAtcHJlMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjg0CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjIuMC1wcmU3Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2ODUKKworLSBDb21waWxlIGZpeGVzIGZvciBkcml2ZXIvc291bmQvc291bmRfY29tbW9uLmMgKG5vbi1tb2R1bGUpIGFuZAorICBkcml2ZXJzL2lzZG4vaXNkbl9jb21tb24uYworICBUaGFua3MgdG8gQ2hyaXN0b3BoZSBMZXJveSA8Y2hyaXN0b3BoZS5sZXJveTVAY2Fwd2F5LmNvbT4KKworLSBBZGRlZCBzdXBwb3J0IGZvciByZWdpc3RlcmluZyByZWd1bGFyIGZpbGVzCisKKy0gQ3JlYXRlZCA8ZGV2ZnNfc2V0X2ZpbGVfc2l6ZT4KKworLSBBZGRlZCAvZGV2L2NwdS9tdHJyIGFzIGFuIGFsdGVybmF0aXZlIGludGVyZmFjZSB0byAvcHJvYy9tdHJyCisKKy0gVXBkYXRlIGRldmZzIGlub2RlcyBmcm9tIGVudHJpZXMgaWYgbm90IGNoYW5nZWQgdGhyb3VnaCBGUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjg2CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjIuMC1wcmU5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2ODcKKworLSBGaXhlZCBidWcgd2hlbiBtb3VudGluZyBub24tZGV2ZnMgZGV2aWNlcyBpbiBhIGRldmZzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2ODgKKworLSBGaXhlZCA8ZGV2ZnNfZmlsbF9maWxlPiB0byBvbmx5IGluaXRpYWxpc2UgdGVtcG9yYXJ5IGlub2RlcworCistIFRyYXAgZm9yIE5VTEwgZm9wcyBpbiA8ZGV2ZnNfcmVnaXN0ZXI+CisKKy0gUmV0dXJuIC1FTk9ERVYgaW4gPGRldmZzX2ZpbGxfZmlsZT4gZm9yIG5vbi1kcml2ZXIgaW5vZGVzCisKKy0gRml4ZWQgYnVnIHdoZW4gdW5zd2FwcGluZyBub24tZGV2ZnMgZGV2aWNlcyBpbiBhIGRldmZzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2ODkKKworLSBTd2l0Y2hlZCB0byBDIGRhdGEgdHlwZXMgaW4gaW5jbHVkZS9saW51eC9kZXZmc19mcy5oCisKKy0gU3dpdGNoZWQgZnJvbSBQQVRIX01BWCB0byBERVZGU19QQVRITEVOCisKKy0gVXBkYXRlZCBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL21vZHVsZXMuY29uZiB0byB0YWtlIGFjY291bnQKKyAgb2YgcmV2ZXJzZSBzY2FubmluZyAoISkgYnkgbW9kcHJvYmUKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMi4wCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2OTAKKworLSBDT05GSUdfREVWRlNfRElTQUJMRV9PTERfVFRZX05BTUVTIHJlcGxhY2VkIHdpdGggIm5vdHR5Y29tcGF0IiBib290CisgIG9wdGlvbgorCistIENPTkZJR19ERVZGU19UVFlfQ09NUEFUIHJlbW92ZWQ6IGV4aXN0aW5nICJzeW1saW5rcyIgYm9vdCBvcHRpb24gbm93CisgIGNvbnRyb2xzIHRoaXMuIFRoaXMgbWVhbnMgeW91IG11c3QgaGF2ZSBsaWJjIDUuNC40NCBvciBsYXRlciwgb3IgYQorICByZWNlbnQgdmVyc2lvbiBvZiBsaWJjIDYgaWYgeW91IHVzZSB0aGUgInN5bWxpbmtzIiBvcHRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY5MQorCistIFN3aXRjaCBmcm9tIDxkZXZmc19ta19zeW1saW5rPiB0byA8ZGV2ZnNfbWtfY29tcGF0PiBpbgorICBkcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMgdG8gZml4IHByb2JsZW1zIHdpdGggTWlkbmlnaHQgQ29tbWFuZGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2OTIKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMi4yLXByZTUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY5MworCistIE1vZGlmaWVkIDxzZF9uYW1lPiBpbiBkcml2ZXJzL3Njc2kvc2QuYyB0byBjb3BlIHdpdGggZGV2aWNlcyB0aGF0CisgIGRvbid0IGV4aXN0ICh3aGljaCBoYXBwZW5zIHdpdGggbmV3IFJBSUQgYXV0b3N0YXJ0IGNvZGUgcHJpbnRrKClzKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjk0CisKKy0gRml4ZWQgYnVnIGluIGpveXN0aWNrIGRyaXZlcjogb25seSBmaXJzdCBqb3lzdGljayB3YXMgcmVnaXN0ZXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjk1CisKKy0gRml4ZWQgYW5vdGhlciBidWcgaW4gam95c3RpY2sgZHJpdmVyCisKKy0gRml4ZWQgPGRldmZzZF9yZWFkPiB0byBub3Qgb3ZlcnJ1biBldmVudCBidWZmZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY5NgorCistIFBvcnRlZCB0byBrZXJuZWwgMi4yLjUtMgorCistIENyZWF0ZWQgPGRldmZzX2F1dG9fdW5yZWdpc3Rlcj4KKworLSBGaXhlZCBidWdzOiBjb21wYXRpYmlsaXR5IGVudHJpZXMgd2VyZSBub3QgdW5yZWdpc3RlcmVkIGZvcjoKKyAgICBsb29wIGRyaXZlcgorICAgIGZsb3BweSBkcml2ZXIKKyAgICBSQU1ESVNDIGRyaXZlcgorICAgIElERSB0YXBlIGRyaXZlcgorICAgIFNDU0kgQ0QtUk9NIGRyaXZlcgorICAgIFNDU0kgSEREIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjk3CisKKy0gRml4ZWQgYnVnczogY29tcGF0aWJpbGl0eSBlbnRyaWVzIHdlcmUgbm90IHVucmVnaXN0ZXJlZCBmb3I6CisgICAgQUxTQSBzb3VuZCBkcml2ZXIKKyAgICBwYXJ0aXRpb25zIGluIGdlbmVyaWMgZGlzYyBkcml2ZXIKKworLSBEb24ndCByZXR1cm4gdW5yZWdpc3RyZWQgZW50cmllcyBpbiA8ZGV2ZnNfZmluZF9oYW5kbGU+CisKKy0gUGFuaWMgaW4gPGRldmZzX3VucmVnaXN0ZXI+IGlmIGVudHJ5IHVucmVnaXN0ZXJlZAorCistIERvbid0IHBhbmljIGluIDxkZXZmc19hdXRvX3VucmVnaXN0ZXI+IGZvciBkdXBsaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2OTgKKworLSBEb24ndCB1bnJlZ2lzdGVyIGFscmVhZHkgdW5yZWdpc3RlcmVkIGVudHJpZXMgaW4gPHVucmVnaXN0ZXI+CisKKy0gUmVnaXN0ZXIgZW50cnkgaW4gPHNkX2RldGVjdD4KKworLSBVbnJlZ2lzdGVyIGVudHJ5IGluIDxzZF9kZXRhY2g+CisKKy0gQ2hhbmdlZCB0byA8ZGV2ZnNfKnJlZ2lzdGVyX2NocmRldj4gaW4gZHJpdmVycy9jaGFyL3R0eV9pby5jCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjIuNworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjk5CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjIuOAorCistIEZpeGVkIGJ1ZyBpbiBkcml2ZXJzL3Njc2kvc2QuYyB3aGVuID4xNiBTQ1NJIGRpc2NzCisKKy0gRGlzYWJsZSB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlIGZvcgorICByZW1vdmFibGUgbWVkaWEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMDAKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4xLXByZTUKKworLSBBZGRlZCAib29wcy1vbi1wYW5pYyIgYm9vdCBvcHRpb24KKworLSBJbXByb3ZlZCBkZWJ1Z2dpbmcgaW4gPGRldmZzX3JlZ2lzdGVyPiBhbmQgPGRldmZzX3VucmVnaXN0ZXI+CisKKy0gUmVnaXN0ZXIgZW50cnkgaW4gPHNyX2RldGVjdD4KKworLSBVbnJlZ2lzdGVyIGVudHJ5IGluIDxzcl9kZXRhY2g+CisKKy0gUmVnaXN0ZXIgZW50cnkgaW4gPHNnX2RldGVjdD4KKworLSBVbnJlZ2lzdGVyIGVudHJ5IGluIDxzZ19kZXRhY2g+CisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgQUxTQSBkcml2ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTAxCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwMgorCistIFVwZGF0ZSBzZXJpYWwgZHJpdmVyIHRvIHJlZ2lzdGVyIFBDTUNJQSBlbnRyaWVzCisgIFRoYW5rcyB0byBSb2NoLUFsZXhhbmRyZSBOb21pbmUtQmVndWluIDxyb2NoQHNhbWFya2FuZC5pbmZpbmkuZnI+CisKKy0gVXBkYXRlZCBhbiBlbWFpbCBhZGRyZXNzIGluIENoYW5nZUxvZworCistIEhpZGUgdmlydHVhbCBjb25zb2xlIGNhcHR1cmUgZW50cmllcyBmcm9tIGRpcmVjdG9yeSBsaXN0aW5ncyB3aGVuCisgIGNvcnJlc3BvbmRpbmcgY29uc29sZSBkZXZpY2UgaXMgbm90IG9wZW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMDMKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTA0CisKKy0gQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3Igc29tZSBmdW5jdGlvbnMKKworLSBBZGRlZCAiZG9jIiB0YXJnZXQgdG8gZnMvZGV2ZnMvTWFrZWZpbGUKKworLSBBZGRlZCAidjRsIiBkaXJlY3RvcnkgZm9yIHZpZGVvNGxpbnV4IGRldmljZXMKKworLSBSZXBsYWNlZCBjYWxsIHRvIDxkZXZmc191bnJlZ2lzdGVyPiBpbiA8c2RfZGV0YWNoPiB3aXRoIGNhbGwgdG8KKyAgPGRldmZzX3JlZ2lzdGVyX3BhcnRpdGlvbnM+CisKKy0gTW92ZWQgcmVnaXN0cmF0aW9uIGZvciBzciBhbmQgc2cgZHJpdmVycyBmcm9tIGRldGVjdCgpIHRvIGF0dGFjaCgpCisgIG1ldGhvZHMKKworLSBSZWdpc3RlciBlbnRyaWVzIGluIDxzdF9hdHRhY2g+IGFuZCB1bnJlZ2lzdGVyIGluIDxzdF9kZXRhY2g+CisKKy0gV29yayBhcm91bmQgSURFIGRyaXZlciB0cmVhdGluZyBDRC1ST00gYXMgZ2VuZGlzaworCistIFVzZSA8c2VkPiBpbnN0ZWFkIG9mIDx0cj4gaW4gcmMuZGV2ZnMKKworLSBVcGRhdGVkIFRvRG8gbGlzdAorCistIFJlbW92ZWQgIm9vcHMtb24tcGFuaWMiIGJvb3Qgb3B0aW9uOiBub3cgYWx3YXlzIE9vcHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMDUKKworLSBVbnJlZ2lzdGVyIFNDU0kgaG9zdCBmcm9tIDxzY3NpX2hvc3Rfbm9fbGlzdD4gaW4gPHNjc2lfdW5yZWdpc3Rlcj4KKyAgVGhhbmtzIHRvIFpvbHThbiBC9nN69nJt6W55aSA8emJvc3pvckBtYWlsLmV4dGVybmV0Lmh1PgorCistIERvbid0IHNhdmUgL2Rldi9sb2cgaW4gcmMuZGV2ZnMKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy40LXByZTEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMDYKKworLSBGaXhlZCBzaWxseSB0eXBvIGluIGRyaXZlcnMvc2NzaS9zdC5jCisKKy0gSW1wcm92ZWQgZGVidWdnaW5nIGluIDxkZXZmc19yZWdpc3Rlcj4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMDcKKworLSBBZGRlZCAiZGl1bmxpbmsiIGFuZCAibm9rbW9kIiBib290IG9wdGlvbnMKKworLSBSZW1vdmVkIHN1cGVyZmx1b3VzIHdhcm5pbmcgbWVzc2FnZSBpbiA8ZGV2ZnNfZF9pcHV0PgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwOAorCistIFJlbW92ZSBlbnRyaWVzIHdoZW4gdW5sb2FkaW5nIHNvdW5kIG1vZHVsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwOQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjYtcHJlMgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExMAorCistIFRvb2sgYWNjb3VudCBvZiBjaGFuZ2UgdG8gPGRfYWxsb2Nfcm9vdD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMTEKKworLSBDcmVhdGVkIHNlcGFyYXRlIGV2ZW50IHF1ZXVlIGZvciBlYWNoIG1vdW50ZWQgZGV2ZnMKKworLSBSZW1vdmVkIDxkZXZmc19pbnZhbGlkYXRlX2RjYWNoZT4KKworLSBDcmVhdGVkIG5ldyBpb2N0bCgpcyBmb3IgZGV2ZnNkCisKKy0gSW5jcmVtZW50ZWQgZGV2ZnNkIHByb3RvY29sIHJldmlzaW9uIHRvIDMKKworLSBGaXhlZCBidWcgd2hlbiByZS1jcmVhdGluZyBkaXJlY3RvcmllczogY29udGVudHMgd2VyZSBsb3N0CisKKy0gQmxvY2sgYWNjZXNzIHRvIGlub2RlcyB1bnRpbCBkZXZmc2QgdXBkYXRlcyBwZXJtaXNzaW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExMgorCistIE1vZGlmaWVkIHBhdGNoIHNvIGl0IGFwcGxpZXMgYWdhaW5zdCAyLjMuNSBhbmQgMi4zLjYKKworLSBVcGRhdGVkIGFuIGVtYWlsIGFkZHJlc3MgaW4gQ2hhbmdlTG9nCisKKy0gRG8gbm90IGF1dG9tYXRpY2FsbHkgY2hhbmdlIG93bmVyc2hpcC9wcm90ZWN0aW9uIG9mIC9kZXYvdHR5PG4+CisKKy0gVXBkYXRlZCBzYW1wbGUgbW9kdWxlcy5jb25mCisKKy0gU3dpdGNoZWQgdG8gc2VuZGluZyBwcm9jZXNzIHVpZC9naWQgdG8gZGV2ZnNkCisKKy0gUmVuYW1lZCA8Y2FsbF9rbW9kPiB0byA8dHJ5X21vZGxvYWQ+CisKKy0gQWRkZWQgREVWRlNEX05PVElGWV9MT09LVVAgZXZlbnQKKworLSBBZGRlZCBERVZGU0RfTk9USUZZX0NIQU5HRSBldmVudAorCistIEFkZGVkIERFVkZTRF9OT1RJRllfQ1JFQVRFIGV2ZW50CisKKy0gSW5jcmVtZW50ZWQgZGV2ZnNkIHByb3RvY29sIHJldmlzaW9uIHRvIDQKKworLSBNb3ZlZCBrZXJuZWwtc3BlY2lmaWMgc3R1ZmYgdG8gaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExMworCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjkKKworLSBSZXN0cmljdGVkIHBlcm1pc3Npb25zIG9uIHNvbWUgYmxvY2sgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExNAorCistIEFkZGVkIHN1cHBvcnQgZm9yIC9kZXYvbmV0bGluaworICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KKworLSBSZXR1cm4gRUlTRElSIHJhdGhlciB0aGFuIEVJTlZBTCBmb3IgcmVhZCgyKSBvbiBkaXJlY3RvcmllcworCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjEwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTE1CisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgYWxsIHJlbWFpbmluZyBjaGFyYWN0ZXIgZGV2aWNlcworICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KKworLSBDbGVhbmVkIHVwIG5ldGxpbmsgc3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExNgorCistIEFkZGVkIHN1cHBvcnQgZm9yIC9kZXYvcGFycG9ydCVkCisgIFRoYW5rcyB0byBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KKworLSBGaXhlZCBwYXJhbGxlbCBwb3J0IEFUQVBJIHRhcGUgZHJpdmVyCisKKy0gRml4ZWQgQXRhcmkgU0xNIGxhc2VyIHByaW50ZXIgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTE3CisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgQ09TQSBjYXJkCisgIFRoYW5rcyB0byBEZW5uaXMgSG91IDxzbWlsYXhAbWluZG1lbGQueWkub3JnPgorCistIEZpeGVkIGRyaXZlcnMvY2hhci9wcGRldi5jOiBtaXNzaW5nICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKy0gRml4ZWQgZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtaW5pdC5jCisgIFRoYW5rcyB0byBWbGFkaW1pciBQb3BvdiA8bWFzaGdyYWRAdXNhLm5ldD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMTgKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4xNS1wcmUzCisKKy0gRml4ZWQgYnVnIGluIGxvb3AgZHJpdmVyCisKKy0gVW5yZWdpc3RlciAvZGV2L2xwJWQgZW50cmllcyBpbiBkcml2ZXJzL2NoYXIvbHAuYworICBUaGFua3MgdG8gTWFjaWVqIFcuIFJvenlja2kgPG1hY3JvQGRzMi5wZy5nZGEucGw+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTE5CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMTYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMjAKKworLSBGaXhlZCBidWcgaW4gZHJpdmVycy9zY3NpL3Njc2kuYworCistIEFkZGVkIC9kZXYvcHBwCisgIFRoYW5rcyB0byBEZW5uaXMgSG91IDxzbWlsYXhAbWluZG1lbGQueWkub3JnPgorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjE3Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTIxCisKKy0gRml4ZWQgYnVnIGluIGRyaXZlcnMvYmxvY2svbG9vcC5jCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMTgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMjIKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4xOQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEyMworCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjIwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTI0CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMjEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMjUKKworLSBDcmVhdGVkIDxkZXZmc19nZXRfaW5mbz4sIDxkZXZmc19zZXRfaW5mbz4sCisgIDxkZXZmc19nZXRfZmlyc3RfY2hpbGQ+IGFuZCA8ZGV2ZnNfZ2V0X25leHRfc2libGluZz4KKyAgQWRkZWQgPDxkaXI+PiBwYXJhbWV0ZXIgdG8gPGRldmZzX3JlZ2lzdGVyPiwgPGRldmZzX21rX2NvbXBhdD4sCisgIDxkZXZmc19ta19kaXI+IGFuZCA8ZGV2ZnNfZmluZF9oYW5kbGU+CisgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIEZpeGVkIGFwcGFyZW50IGJ1ZyBpbiBDT1NBIGRyaXZlcgorCistIFJlLWluc3RhdGVkICJzY3NpaG9zdHM9IiBib290IG9wdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEyNgorCistIEFsd2F5cyBjcmVhdGUgL2Rldi9wdHMgaWYgQ09ORklHX1VOSVg5OF9QVFlTPXkKKworLSBGaXhlZCBjYWxsIHRvIDxkZXZmc19ta19kaXI+IGluIGRyaXZlcnMvYmxvY2svaWRlLWRpc2suYworICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KKworLSBBbGxvdyBtdWx0aXBsZSB1bnJlZ2lzdHJhdGlvbnMKKworLSBDcmVhdGVkIC9kZXYvc2NzaSBoaWVyYXJjaHkKKyAgV29yayBzcG9uc29yZWQgYnkgU0dJCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTI3CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIE5vIGxvbmdlciBkaXNhYmxlIGRldnB0cyBpZiBkZXZmcyBlbmFibGVkIChjYXZlYXQgZW1wdG9yKQorCistIEFkZGVkIGZsYWdzIGFycmF5IHRvIHN0cnVjdCBnZW5kaXNrIGFuZCByZW1vdmVkIGNvZGUgZnJvbQorICBkcml2ZXJzL3Njc2kvc2QuYworCistIENyZWF0ZWQgL2Rldi9kaXNjcyBoaWVyYXJjaHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMjgKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gQ3JlYXRlZCAvZGV2L2Nkcm9tcyBoaWVyYXJjaHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMjkKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHNvdW5kIGRldmljZXMKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgcHJpbnRlciBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHZpZGVvNGxpbnV4IGRldmljZXMKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgcGFyYWxsZWwgcG9ydCBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIGZyYW1lIGJ1ZmZlciBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTMwCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIEFkZGVkIG1ham9yIGFuZCBtaW5vciBudW1iZXIgdG8gZGV2ZnNkIHByb3RvY29sCisKKy0gSW5jcmVtZW50ZWQgZGV2ZnNkIHByb3RvY29sIHJldmlzaW9uIHRvIDUKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgU291bmRCbGFzdGVyIENELVJPTXMKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgbmV0bGluayBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIFNDU0kgZ2VuZXJpYyBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIFNDU0kgdGFwZSBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTMxCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFN1cHBvcnQgaW5mbyBwb2ludGVyIGZvciBhbGwgZGV2ZnMgZW50cnkgdHlwZXMKKworLSBBZGRlZCA8PGluZm8+PiBwYXJhbWV0ZXIgdG8gPGRldmZzX21rX2Rpcj4gYW5kIDxkZXZmc19ta19zeW1saW5rPgorCistIFJlbW92ZWQgL2Rldi9zdCBoaWVyYXJjaHkKKworLSBSZW1vdmVkIC9kZXYvc2cgaGllcmFyY2h5CisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIGxvb3AgZGV2aWNlcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBJREUgdGFwZSBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIFNDU0kgQ0QtUk9NcworCistIFJlbW92ZWQgL2Rldi9zciBoaWVyYXJjaHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMzIKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIGZsb3BweSBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIFJBTURJU0NzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIG1ldGEtZGV2aWNlcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBTQ1NJIGRpc2NzCisKKy0gQ3JlYXRlZCA8ZGV2ZnNfbWFrZV9yb290PgorCistIFJlbW92ZWQgL2Rldi9zZCBoaWVyYXJjaHkKKworLSBTdXBwb3J0ICIuLi8iIHdoZW4gc2VhcmNoaW5nIGRldmZzIG5hbWVzcGFjZQorCistIENyZWF0ZWQgL2Rldi9pZGUvaG9zdCogaGllcmFyY2h5CisKKy0gU3VwcG9ydGVkIElERSBoYXJkIGRpc2NzIGluIC9kZXYvaWRlL2hvc3QqIGhpZXJhcmNoeQorCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBJREUgZGlzY3MKKworLSBSZW1vdmVkIC9kZXYvaWRlL2hkIGhpZXJhcmNoeQorCistIFN1cHBvcnRlZCBJREUgQ0QtUk9NcyBpbiAvZGV2L2lkZS9ob3N0KiBoaWVyYXJjaHkKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgSURFIENELVJPTXMKKworLSBSZW1vdmVkIC9kZXYvaWRlL2NkIGhpZXJhcmNoeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzMworCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBDcmVhdGVkIDxkZXZmc19nZXRfdW5yZWdpc3Rlcl9zbGF2ZT4KKworLSBGaXhlZCBidWcgaW4gZnMvcGFydGl0aW9ucy9jaGVjay5jIHdoZW4gcmVzY2FubmluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzNAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBSZW1vdmVkIC9kZXYvc2QsIC9kZXYvc3IsIC9kZXYvc3QgYW5kIC9kZXYvc2cgZGlyZWN0b3JpZXMKKworLSBSZW1vdmVkIC9kZXYvaWRlL2hkIGRpcmVjdG9yeQorCistIEV4cG9ydGVkIDxkZXZmc19nZXRfcGFyZW50PgorCistIENyZWF0ZWQgPGRldmZzX3JlZ2lzdGVyX3RhcGU+IGFuZCAvZGV2L3RhcGVzIGhpZXJhcmNoeQorCistIFJlbW92ZWQgL2Rldi9pZGUvbXQgaGllcmFyY2h5CisKKy0gUmVtb3ZlZCAvZGV2L2lkZS9mZCBoaWVyYXJjaHkKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4yNQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzNQorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgdmlydHVhbCBjb25zb2xlIGNhcHR1cmUgZGV2aWNlcworCistIFJlbW92ZWQgdW51c2VkIDxkZXZmc19zZXRfc3ltbGlua19kZXN0aW5hdGlvbj4KKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3Igc2VyaWFsIGRldmljZXMKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgY29uc29sZSBkZXZpY2VzCisKKy0gRG8gbm90IGhpZGUgZW50cmllcyBmcm9tIGRldmZzZCBvciBjaGlsZHJlbgorCistIFJlbW92ZWQgREVWRlNfRkxfVFRZX0NPTVBBVCBmbGFnCisKKy0gUmVtb3ZlZCAibm90dHljb21wYXQiIGJvb3Qgb3B0aW9uCisKKy0gUmVtb3ZlZCA8ZGV2ZnNfbWtfY29tcGF0PgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzNgorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBNb3ZlZCBCU0QgcHR5IGRldmljZXMgdG8gL2Rldi9wdHkKKworLSBBZGRlZCBERVZGU19GTF9XQUlUIGZsYWcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMzcKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUmVhbGx5IGZpeGVkIGJ1ZyBpbiBmcy9wYXJ0aXRpb25zL2NoZWNrLmMgd2hlbiByZXNjYW5uaW5nCisKKy0gU3VwcG9ydCBuZXcgImRpc2MiIG5hbWluZyBzY2hlbWUgaW4gPGdldF9yZW1vdmFibGVfcGFydGl0aW9uPgorCistIEFsbG93IE5VTEwgZm9wcyBpbiA8ZGV2ZnNfcmVnaXN0ZXI+CisKKy0gUmVtb3ZlZCByZWR1bmRhbnQgbmFtZSBmdW5jdGlvbnMgaW4gU0NTSSBkaXNjIGFuZCBJREUgZHJpdmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzOAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBGaXhlZCBvbGQgYnVncyBpbiBkcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jLCBkcml2ZXJzL2NoYXIvdHBxaWMwMi5jLAorICBkcml2ZXJzL25ldC93YW4vY29zYS5jIGFuZCBkcml2ZXJzL3Njc2kvc2NzaS5jCisgIFRoYW5rcyB0byBTZXJnZXkgS3VidXNoaW4gPGtzaUBrc2ktbGludXguY29tPgorCistIEZhbGwgYmFjayB0byBtYWpvciB0YWJsZSBpZiBOVUxMIGZvcHMgZ2l2ZW4gdG8gPGRldmZzX3JlZ2lzdGVyPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzOQorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBDb3JyZWN0ZWQgYW5kIG1vdmVkIDxnZXRfYmxrZm9wcz4gYW5kIDxnZXRfY2hyZm9wcz4gZGVjbGFyYXRpb25zCisgIGZyb20gYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jIHRvIGluY2x1ZGUvbGludXgvZnMuaAorCistIFJlbW92ZWQgbmFtZSBmdW5jdGlvbiBmcm9tIHN0cnVjdCBnZW5kaXNrCisKKy0gVXBkYXRlZCBkZXZmcyBGQVEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNDAKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMjcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNDEKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gQnVnIGZpeCBpbiBhcmNoL202OGsvYXRhcmkvam95c3RpY2suYworCistIE1vdmVkIElTRE4gYW5kIGNhcGkgZGV2aWNlcyB0byAvZGV2L2lzZG4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNDIKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gQnVnIGZpeCBpbiBkcml2ZXJzL2Jsb2NrL2lkZS1wcm9iZS5jIChwYXRjaCBjb25mdXNpb24pCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQzCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIEJ1ZyBmaXggaW4gZHJpdmVycy9ibG9jay9ibGtwZy5jOnBhcnRpdGlvbl9uYW1lKCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNDQKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMjkKKworLSBSZW1vdmVkIGNhbGxzIHRvIDxkZXZmc19yZWdpc3Rlcj4gZnJvbSBjZHUzMWEsIGNtMjA2LCBtY2QgYW5kIG1jZHgKKyAgQ0QtUk9NIGRyaXZlcnM6IGdlbmVyaWMgZHJpdmVyIGhhbmRsZXMgdGhpcyBub3cKKworLSBNb3ZlZCBqb3lzdGljayBkZXZpY2VzIHRvIC9kZXYvam95c3RpY2tzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQ1CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjMwLXByZTMKKworLSBSZWdpc3RlciB3aG9sZS1kaXNjIGVudHJ5IGV2ZW4gZm9yIGludmFsaWQgcGFydGl0aW9uIHRhYmxlcworCistIEZpeGVkIGJ1ZyBpbiBtb3VudGluZyByb290IEZTIHdoZW4gaW5pdHJkIGVuYWJsZWQKKworLSBGaXhlZCBkZXZpY2UgZW50cnkgbGVhayB3aXRoIElERSBDRC1ST01zCisKKy0gRml4ZWQgY29tcGlsZSBwcm9ibGVtIHdpdGggZHJpdmVycy9pc2RuL2lzZG5fY29tbW9uLmMKKworLSBNb3ZlZCBDT1NBIGRldmljZXMgdG8gL2Rldi9jb3NhCisKKy0gU3VwcG9ydCBmaWZvcyB3aGVuIHVucmVnaXN0ZXJpbmcKKworLSBDcmVhdGVkIDxkZXZmc19yZWdpc3Rlcl9zZXJpZXM+IGFuZCB1c2VkIGluIG1hbnkgZHJpdmVycworCistIE1vdmVkIENvZGEgZGV2aWNlcyB0byAvZGV2L2NvZGEKKworLSBNb3ZlZCBwYXJhbGxlbCBwb3J0IElERSB0YXBlcyB0byAvZGV2L3B0CisKKy0gTW92ZWQgcGFyYWxsZWwgcG9ydCBJREUgZ2VuZXJpYyBkZXZpY2VzIHRvIC9kZXYvcGcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNDYKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUmVtb3ZlZCBvYnNvbGV0ZSBERVZGU19GTF9DT01QQVQgYW5kIERFVkZTX0ZMX1RPTEVSQU5UIGZsYWdzCisKKy0gRml4ZWQgY29tcGlsZSBwcm9ibGVtIHdpdGggZnMvY29kYS9wc2Rldi5jCisKKy0gUmVpbnN0YXRlIGNoYW5nZSB0byA8ZGV2ZnNfcmVnaXN0ZXJfYmxrZGV2PiBpbgorICBkcml2ZXJzL2Jsb2NrL2lkZS1wcm9iZS5jIG5vdyB0aGF0IGZzL2lzb2ZzL2lub2RlLmMgaXMgZml4ZWQKKworLSBTd2l0Y2hlZCB0byA8ZGV2ZnNfcmVnaXN0ZXJfYmxrZGV2PiBpbiBkcml2ZXJzL2Jsb2NrL2Zsb3BweS5jLAorICBkcml2ZXJzL3Njc2kvc3IuYyBhbmQgZHJpdmVycy9ibG9jay9tZC5jCisKKy0gTW92ZWQgREFDOTYwIGRldmljZXMgdG8gL2Rldi9kYWM5NjAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNDcKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMzItcHJlNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE0OAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBSZW1vdmVkIGttb2Qgc3VwcG9ydDogdXNlIGRldmZzZCBpbnN0ZWFkCisKKy0gTW92ZWQgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXIgZGV2aWNlcyB0byAvZGV2L21pc2MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNDkKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gRW5zdXJlIGluY2x1ZGUvbGludXgvam95c3RpY2suaCBpcyBPSyBmb3IgdXNlci1zcGFjZQorCistIEltcHJvdmVkIGRlYnVnZ2luZyBpbiA8Z2V0X3Zmc19pbm9kZT4KKworLSBFbnN1cmUgZGVudHJpZXMgY3JlYXRlZCBieSBkZXZmc2Qgd2lsbCBiZSBjbGVhbmVkIHVwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTUwCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjM0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTUxCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjM1LXByZTEKKworLSBDcmVhdGVkIDxkZXZmc19nZXRfbmFtZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNTIKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gVXBkYXRlZCBzYW1wbGUgbW9kdWxlcy5jb25mCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMzYtcHJlMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1MworCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy40MgorCistIFJlbW92ZWQgPGRldmZzX2ZpbGxfZmlsZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNTQKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gVG9vayBhY2NvdW50IG9mIGRldmljZSBudW1iZXIgY2hhbmdlcyBmb3IgL2Rldi9mYioKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNTUKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNDMtcHJlOAorCistIE1vdmVkIC9kZXYvdHR5MCB0byAvZGV2L3ZjLzAKKworLSBNb3ZlZCBzZXF1ZW5jZSBudW1iZXIgZm9ybWF0dGluZyBmcm9tIDxfdHR5X21ha2VfbmFtZT4gdG8gZHJpdmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1NgorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBGaXhlZCBicmVha2FnZSBpbiBkcml2ZXJzL3Njc2kvc2QuYyBkdWUgdG8gcmVjZW50IFNDU0kgY2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1NworCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy40NQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1OAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy40Ni1wcmUyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTU5CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIEZpeGVkIGRyaXZlcnMvYmxvY2svbWQuYworICBUaGFua3MgdG8gTWlrZSBHYWxicmFpdGggPG1pa2VnQHdlaWRlbi5kZT4KKworLSBEb2N1bWVudGF0aW9uIGZpeGVzCisKKy0gTW92ZWQgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmcm9tIDxscF9pbml0PiB0byA8bHBfcmVnaXN0ZXI+CisgIFRoYW5rcyB0byBUaW0gV2F1Z2ggPHR3YXVnaEByZWRoYXQuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE2MAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBGaXhlZCBkcml2ZXJzL2NoYXIvam95c3RpY2svam95c3RpY2suYworICBUaGFua3MgdG8gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKworLSBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworLSBGaXhlZCBhcmNoL2kzODYva2VybmVsL210cnIuYyBpZiBwcm9jZnMgYW5kIGRldmZzIG5vdCBlbmFibGVkCisKKy0gRml4ZWQgZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNjEKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUmVtb3ZlIC9kZXYvaWRlIHdoZW4gaWRlLW1vZCBpcyB1bmxvYWRlZAorCistIEZpeGVkIGJ1ZyBpbiBkcml2ZXJzL2Jsb2NrL2lkZS1wcm9iZS5jIHdoZW4gc2Vjb25kYXJ5IGJ1dCBubyBwcmltYXJ5CisKKy0gQWRkZWQgREVWRlNfRkxfTk9fUEVSU0lTVEVOQ0UgZmxhZworCistIFVzZWQgbmV3IERFVkZTX0ZMX05PX1BFUlNJU1RFTkNFIGZsYWcgZm9yIFVuaXg5OCBwdHkgc2xhdmVzCisKKy0gUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjYWxsIHRvIDx1cGRhdGVfZGV2ZnNfaW5vZGVfZnJvbV9lbnRyeT4gaW4KKyAgPGRldmZzX3JlYWRkaXI+CisKKy0gT25seSBzZXQgYXV0by1vd25lcnNoaXAgZm9yIC9kZXYvcHR5L3MqCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTYyCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFNldCBpbm9kZS0+aV9zaXplIHRvIGNvcnJlY3Qgc2l6ZSBmb3Igc3ltbGlua3MKKyAgVGhhbmtzIHRvIEplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUBnb29wLm9yZz4KKworLSBPbmx5IGdpdmUgbG9va3VwKCkgbWV0aG9kIHRvIGRpcmVjdG9yaWVzIHRvIGNvbXBseSB3aXRoIG5ldyBWRlMKKyAgYXNzdW1wdGlvbnMKKworLSBSZW1vdmUgdW5uZWNlc3NhcnkgdGVzdHMgaW4gc3ltbGluayBtZXRob2RzCisKKy0gRG9uJ3Qga2lsbCBleGlzdGluZyBibG9jayBvcHMgaW4gPGRldmZzX3JlYWRfaW5vZGU+CisKKy0gUmVzdG9yZSBhdXRvLW93bmVyc2hpcCBmb3IgL2Rldi9wdHkvbSoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNjMKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gRG9uJ3QgY3JlYXRlIG1pc3NpbmcgZGlyZWN0b3JpZXMgaW4gPGRldmZzX2ZpbmRfaGFuZGxlPgorCistIFJlbW92ZWQgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9tay1kZXZsaW5rcworCistIFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9SRUFETUUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNjQKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gRml4ZWQgQ09ORklHX0RFVkZTIGJyZWFrYWdlIGluIGRyaXZlcnMvY2hhci9zZXJpYWwuYyBpbnRyb2R1Y2VkIGluCisgIGxpbnV4LTIuMy45OS1wcmU2LTcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNjUKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuOTktcHJlNgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE2NgorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBBZGRlZCBDT05GSUdfREVWRlNfTU9VTlQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNjcKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gVXBkYXRlZCBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL1JFQURNRQorCistIFVwZGF0ZWQgc2FtcGxlIG1vZHVsZXMuY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE2OAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBEaXNhYmxlZCBtdWx0aS1tb3VudCBjYXBhYmlsaXR5ICh1c2UgVkZTIGJpbmRpbmdzIGluc3RlYWQpCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTY5CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFJlbW92ZWQgbXVsdGktbW91bnQgY29kZQorCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBtYWNyb3M6IFZGUyBoYXMgY2hhbmdlZCB0b28gbXVjaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3MAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKworLSBNZXJnZWQgZGV2ZnMgaW5vZGUgaW50byBkZXZmcyBlbnRyeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3MQorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBVcGRhdGVkIHNhbXBsZSBtb2R1bGVzLmNvbmYKKworLSBSZW1vdmVkIGRlYWQgY29kZSBpbiA8ZGV2ZnNfcmVnaXN0ZXI+IHdoaWNoIHVzZWQgdG8gY2FsbAorICA8ZnJlZV9kZW50cmllcz4KKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuNC4wLXRlc3QyLXByZTMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNzIKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gQ2hhbmdlZCBpbnRlcmZhY2UgdG8gPGRldmZzX3JlZ2lzdGVyPgorCistIENoYW5nZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19yZWdpc3Rlcl9zZXJpZXM+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTczCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19ta19zeW1saW5rPgorCistIFNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19ta19kaXI+CisKKy0gU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gPGRldmZzX2ZpbmRfaGFuZGxlPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3NAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNzUKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gRG9jQm9vayB1cGRhdGUgZm9yIGZzL2RldmZzL2Jhc2UuYworICBUaGFua3MgdG8gVGltIFdhdWdoIDx0d2F1Z2hAcmVkaGF0LmNvbT4KKworLSBSZW1vdmVkIHN0YWxlIGZzL3R1bm5lbC5jICh3YXMgbmV2ZXIgdXNlZCBvciBjb21wbGV0ZWQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTc2CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFVwZGF0ZWQgVG9EbyBsaXN0CisKKy0gUmVtb3ZlZCBzYW1wbGUgbW9kdWxlcy5jb25mOiBub3cgZGlzdHJpYnV0ZWQgd2l0aCBkZXZmc2QKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuNC4wLXRlc3QzLXByZTQgKHdoaWNoIGhhZCBkZXZmcy1wYXRjaC12MTc0KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3NworCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorCistIERvY3VtZW50YXRpb24gY2xlYW51cHMKKworLSBFbnN1cmUgPGRldmZzX2dlbmVyYXRlX3BhdGg+IHRlcm1pbmF0ZXMgc3RyaW5nIGZvciByb290IGVudHJ5CisgIFRoYW5rcyB0byBUaW0gSmFuc2VuIDx0aW1AdGphbnNlbi5kZT4KKworLSBFeHBvcnRlZCA8ZGV2ZnNfZ2V0X25hbWU+IHRvIG1vZHVsZXMKKworLSBNYWtlIDxkZXZmc19ta19zeW1saW5rPiBzZW5kIGV2ZW50cyB0byBkZXZmc2QKKworLSBDbGVhbmVkIHVwIG9wdGlvbiBwcm9jZXNzaW5nIGluIDxkZXZmc19zZXR1cD4KKworLSBGaXhlZCBidWdzIGluIGhhbmRsaW5nIHN5bWxpbmtzOiBjb3VsZCBsZWFrIG9yIGNhdXNlIE9vcHMKKworLSBDbGVhbmVkIHVwIGRpcmVjdG9yeSBoYW5kbGluZyBieSBzZXBhcmF0aW5nIGZvcHMKKyAgVGhhbmtzIHRvIEFsZXhhbmRlciBWaXJvIDx2aXJvQHBhcmNlbGZhcmNlLmxpbnV4LnRoZXBsYW5ldC5jby51az4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNzgKKworLSBGaXhlZCBoYW5kbGluZyBvZiBpbnZlcnRlZCBvcHRpb25zIGluIDxkZXZmc19zZXR1cD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNzkKKworLSBBZGp1c3RlZCA8dHJ5X21vZGxvYWQ+IHRvIGFjY291bnQgZm9yIDxkZXZmc19nZW5lcmF0ZV9wYXRoPiBmaXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxODAKKworLSBGaXhlZCAhQ09ORklHX0RFVkZTX0ZTIHN0dWIgZGVjbGFyYXRpb24gb2YgPGRldmZzX2dldF9pbmZvPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4MQorCistIEFuc3dlcmVkIHF1ZXN0aW9uIHBvc2VkIGJ5IEFsIFZpcm8gYW5kIHJlbW92ZWQgaGlzIGNvbW1lbnRzIGZyb20gPGRldmZzX29wZW4+CisKKy0gTW92ZWQgc2V0dGluZyBvZiByZWdpc3RlcmVkIGZsYWcgYWZ0ZXIgb3RoZXIgZmllbGRzIGFyZSBjaGFuZ2VkCisKKy0gRml4ZWQgcmFjZSBiZXR3ZWVuIDxkZXZmc2RfY2xvc2U+IGFuZCA8ZGV2ZnNkX25vdGlmeV9vbmU+CisKKy0gR2xvYmFsIFZGUyBjaGFuZ2VzIGFkZGVkIGJvZ3VzIEJLTCB0byBkZXZmc2RfY2xvc2UoKTogcmVtb3ZlZAorCistIFdpZGVuZWQgbG9ja2luZyBpbiA8ZGV2ZnNfcmVhZGxpbms+IGFuZCA8ZGV2ZnNfZm9sbG93X2xpbms+CisKKy0gUmVwbGFjZWQgPGRldmZzZF9yZWFkPiBzdGFjayB1c2FnZSB3aXRoIDxkZXZmc2RfaW9jdGw+IGttYWxsb2MKKworLSBTaW1wbGlmaWVkIGxvY2tpbmcgaW4gPGRldmZzZF9pb2N0bD4gYW5kIGZpeGVkIG1lbW9yeSBsZWFrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTgyCisKKy0gQ3JlYXRlZCA8ZGV2ZnNfKmFsbG9jX21ham9yPiBhbmQgPGRldmZzXyphbGxvY19kZXZudW0+CisKKy0gUmVtb3ZlZCBicm9rZW4gZGV2bnVtIGFsbG9jYXRpb24gYW5kIHVzZSA8ZGV2ZnNfYWxsb2NfZGV2bnVtPgorCistIEZpeGVkIG9sZCBkZXZudW0gbGVhayBieSBjYWxsaW5nIG5ldyA8ZGV2ZnNfZGVhbGxvY19kZXZudW0+CisKKy0gQ3JlYXRlZCA8ZGV2ZnNfKmFsbG9jX3VuaXF1ZV9udW1iZXI+CisKKy0gRml4ZWQgbnVtYmVyIGxlYWsgZm9yIC9kZXYvY2Ryb21zL2Nkcm9tJWQKKworLSBGaXhlZCBudW1iZXIgbGVhayBmb3IgL2Rldi9kaXNjcy9kaXNjJWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxODMKKworLSBGaXhlZCBidWcgaW4gPGRldmZzX3NldHVwPiB3aGljaCBjb3VsZCBoYW5nIGJvb3QgcHJvY2VzcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4NAorCistIERvY3VtZW50YXRpb24gdHlwbyBmaXggZm9yIGZzL2RldmZzL3V0aWwuYworCistIEZpeGVkIGRyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGZvciBkZXZmcworCistIEFkZGVkIERFVkZTRF9OT1RJRllfREVMRVRFIGV2ZW50CisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCisKKy0gUmVtb3ZlZCAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4gZnJvbSBmcy9kZXZmcy9iYXNlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxODUKKworLSBNYWRlIDxibG9ja19zZW1hcGhvcmU+IGFuZCA8Y2hhcl9zZW1hcGhvcmU+IGluIGZzL2RldmZzL3V0aWwuYworICBwcml2YXRlCisKKy0gRml4ZWQgaW5vZGUgdGFibGUgcmFjZXMgYnkgcmVtb3ZpbmcgaXQgYW5kIHVzaW5nIGlub2RlLT51LmdlbmVyaWNfaXAKKyAgaW5zdGVhZAorCistIE1vdmVkIDxkZXZmc19yZWFkX2lub2RlPiBpbnRvIDxnZXRfdmZzX2lub2RlPgorCistIE1vdmVkIDxkZXZmc193cml0ZV9pbm9kZT4gaW50byA8ZGV2ZnNfbm90aWZ5X2NoYW5nZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxODYKKworLSBGaXhlZCByYWNlIGluIDxkZXZmc19kb19zeW1saW5rPiBmb3IgdW5pLXByb2Nlc3NvcgorCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4NworCistIEZpeGVkIGRyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGZvciBkZXZmcworCistIEZpeGVkIGRyaXZlcnMvY2hhci9yb2NrZXQuYyBmb3IgZGV2ZnMKKworLSBGaXhlZCBidWcgaW4gPGRldmZzX2FsbG9jX3VuaXF1ZV9udW1iZXI+OiBsaW1pdGVkIHRvIDEyOCBudW1iZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTg4CisKKy0gVXBkYXRlZCBtYWpvciBtYXNrcyBpbiBmcy9kZXZmcy91dGlsLmMgdXAgdG8gTGludXMnICJubyBuZXcgbWFqb3JzIgorICBwcm9jbGFtYXRpb24uIEJsb2NrOiB3ZXJlIDEyNiBub3cgMTIyIGZyZWUsIGNoYXI6IHdlcmUgMjYgbm93IDE5IGZyZWUKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKworLSBSZW1vdmVkIHJlbW5hbnQgb2YgbXVsdGktbW91bnQgc3VwcG9ydCBpbiA8ZGV2ZnNfbWtub2Q+CisKKy0gUmVtb3ZlZCB1bnVzZWQgREVWRlNfRkxfU0hPV19VTlJFRyBmbGFnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTg5CisKKy0gUmVtb3ZlZCBubGluayBmaWVsZCBmcm9tIHN0cnVjdCBkZXZmc19pbm9kZQorCistIFJlbW92ZWQgYXV0by1vd25lcnNoaXAgZm9yIC9kZXYvcHR5LyogKEJTRCBwdHlzKSBhbmQgdXNlZAorICBERVZGU19GTF9DVVJSRU5UX09XTkVSfERFVkZTX0ZMX05PX1BFUlNJU1RFTkNFIGZvciAvZGV2L3B0eS9zKiAoanVzdAorICBsaWtlIFVuaXg5OCBwdHkgc2xhdmVzKSBhbmQgbWFkZSAvZGV2L3B0eS9tKiBydy1ydy1ydy0gYWNjZXNzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTkwCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCisKKy0gUmVwbGFjZWQgQktMIHdpdGggZ2xvYmFsIHJ3c2VtIHRvIHByb3RlY3Qgc3ltbGluayBkYXRhIChxdWljayBhbmQKKyAgZGlydHkgaGFjaykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTEKKworLSBSZXBsYWNlZCBnbG9iYWwgcndzZW0gZm9yIHN5bWxpbmsgd2l0aCBwZXItbGluayByZWZjb3VudAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE5MgorCistIFJlbW92ZWQgdW5uZWNlc3NhcnkgI2lmZGVmIENPTkZJR19ERVZGU19GUyBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvbXRyci5jCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjQuMTAtcHJlMTEKKworLSBTZXQgaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgZm9yIGJsb2NrIG5vZGVzIGluIDxnZXRfdmZzX2lub2RlPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE5MworCistIFdlbnQgYmFjayB0byBnbG9iYWwgcndzZW0gZm9yIHN5bWxpbmtzIChyZWZjb3VudCBzY2hlbWUgbm8gZ29vZCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTQKKworLSBGaXhlZCBvdmVycnVuIGluIDxkZXZmc19saW5rPiBieSByZW1vdmluZyBmdW5jdGlvbiAobm90IG5lZWRlZCkKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTUKKworLSBGaXhlZCBidWZmZXIgdW5kZXJydW4gaW4gPHRyeV9tb2Rsb2FkPgorCistIE1vdmVkIGRvd25fcmVhZCgpIGZyb20gPHNlYXJjaF9mb3JfZW50cnlfaW5fZGlyPiB0byA8ZmluZF9lbnRyeT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTYKKworLSBGaXhlZCByYWNlIGluIDxkZXZmc2RfaW9jdGw+IHdoZW4gc2V0dGluZyBldmVudCBtYXNrCisgIFRoYW5rcyB0byBLYXJpIEh1cnR0YSA8aHVydHRhQGxlaWphLm1oLmZtaS5maT4KKworLSBBdm9pZCBkZWFkbG9jayBpbiA8ZGV2ZnNfZm9sbG93X2xpbms+IGJ5IHVzaW5nIHRlbXBvcmFyeSBidWZmZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTcKKworLSBGaXJzdCByZWxlYXNlIG9mIG5ldyBsb2NraW5nIGNvZGUgZm9yIGRldmZzIGNvcmUgKHYxLjApCisKKy0gRml4ZWQgYnVnIGluIGRyaXZlcnMvY2Ryb20vY2Ryb20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE5OAorCistIERpc2NhcmQgdGVtcG9yYXJ5IGJ1ZmZlciwgbm93IHVzZSAiJXMiIGZvciBkZW50cnkgbmFtZXMKKworLSBEb24ndCBnZW5lcmF0ZSBwYXRoIGluIDx0cnlfbW9kbG9hZD46IHVzZSBmYWtlIGVudHJ5IGluc3RlYWQKKworLSBVc2UgImV4aXN0aW5nIiBkaXJlY3RvcnkgaW4gPF9kZXZmc19tYWtlX3BhcmVudF9mb3JfbGVhZj4KKworLSBVc2Ugc2xhYiBjYWNoZSByYXRoZXIgdGhhbiBmaXhlZCBidWZmZXIgZm9yIGRldmZzZCBldmVudHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTkKKworLSBSZW1vdmVkIG9ic29sZXRlIHVzYWdlIG9mIERFVkZTX0ZMX05PX1BFUlNJU1RFTkNFCisKKy0gU2VuZCBERVZGU0RfTk9USUZZX1JFR0lTVEVSRUQgZXZlbnRzIGluIDxkZXZmc19ta19kaXI+CisKKy0gRml4ZWQgbG9ja2luZyBidWcgaW4gPGRldmZzX2RfcmV2YWxpZGF0ZV93YWl0PiBkdWUgdG8gdHlwbworCistIERvIG5vdCBzZW5kIENSRUFURSwgQ0hBTkdFLCBBU1lOQ19PUEVOIG9yIERFTEVURSBldmVudHMgZnJvbSBkZXZmc2QKKyAgb3IgY2hpbGRyZW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMDAKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuNS4xLXByZTIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMDEKKworLSBGaXhlZCBidWcgaW4gPGRldmZzZF9yZWFkPjogd2FzIGRlcmVmZXJlbmNpbmcgZnJlZWQgcG9pbnRlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIwMgorCistIEZpeGVkIGJ1ZyBpbiA8ZGV2ZnNkX2Nsb3NlPjogd2FzIGRlcmVmZXJlbmNpbmcgZnJlZWQgcG9pbnRlcgorCistIEFkZGVkIHByb2Nlc3MgZ3JvdXAgY2hlY2sgZm9yIGRldmZzZCBwcml2aWxlZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjAzCisKKy0gVXNlIFNMQUJfQVRPTUlDIGluIDxkZXZmc2Rfbm90aWZ5X2RlPiBmcm9tIDxkZXZmc19kX2RlbGV0ZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMDQKKworLSBSZW1vdmVkIGxvbmcgb2Jzb2xldGUgcmMuZGV2ZnMKKworLSBSZXR1cm4gb2xkIGVudHJ5IGluIDxkZXZmc19ta19kaXI+IGZvciAyLjQueCBrZXJuZWxzCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCisKKy0gSW5jcmVtZW50IHJlZmNvdW50IG9uIG1vZHVsZSBpbiA8Y2hlY2tfZGlzY19jaGFuZ2VkPgorCistIENyZWF0ZWQgPGRldmZzX2dldF9oYW5kbGU+IGFuZCBleHBvcnRlZCA8ZGV2ZnNfcHV0PgorCistIEluY3JlbWVudCByZWZjb3VudCBvbiBtb2R1bGUgaW4gPGRldmZzX2dldF9vcHM+CisKKy0gQ3JlYXRlZCA8ZGV2ZnNfcHV0X29wcz4gYW5kIHVzZWQgd2hlcmUgbmVlZGVkIHRvIGZpeCByYWNlcworCistIEFkZGVkIGNsYXJpZnlpbmcgY29tbWVudHMgaW4gcmVzcG9uc2UgdG8gcHJlbGltaW5hcnkgRU1DIGNvZGUgcmV2aWV3CisKKy0gQWRkZWQgcG9pc29uaW5nIHRvIDxkZXZmc19wdXQ+CisKKy0gSW1wcm92ZWQgZGVidWdnaW5nIG1lc3NhZ2VzCisKKy0gRml4ZWQgdW5yZWdpc3RlciBidWdzIGluIGRyaXZlcnMvbWQvbHZtLWZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMDUKKworLSBDb3JyZWN0ZWQgKG1hZGUgdXNlZnVsKSBkZWJ1Z2dpbmcgbWVzc2FnZSBpbiA8dW5yZWdpc3Rlcj4KKworLSBNb3ZlZCA8a21lbV9jYWNoZV9jcmVhdGU+IGluIDxtb3VudF9kZXZmc19mcz4gdG8gPGluaXRfZGV2ZnNfZnM+CisKKy0gRml4ZWQgZHJpdmVycy9tZC9sdm0tZnMuYyB0byBjcmVhdGUgImx2bSIgZW50cnkKKworLSBBZGRlZCBtYWdpYyBudW1iZXIgdG8gZ3VhcmQgYWdhaW5zdCBzY3JpYmJsaW5nIGRyaXZlcnMKKworLSBPbmx5IHJldHVybiBvbGQgZW50cnkgaW4gPGRldmZzX21rX2Rpcj4gaWYgYSBkaXJlY3RvcnkKKworLSBEZWZpbmVkIG1hY3JvcyBmb3IgZXJyb3IgYW5kIGRlYnVnIG1lc3NhZ2VzCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjA2CisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgQ29tcGFxIGNwcWFycmF5IGNvbnRyb2xsZXJzCisKKy0gRml4ZWQgKHJhcmUsIG9sZCkgcmFjZSBpbiA8ZGV2ZnNfbG9va3VwPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIwNworCistIEZpeGVkIGRlYWRsb2NrIGJ1ZyBpbiA8ZGV2ZnNfZF9yZXZhbGlkYXRlX3dhaXQ+CisKKy0gVGFnIFZGUyBkZWxldGFibGUgaW4gPGRldmZzX21rX3N5bWxpbms+IGlmIGhhbmRsZSBpZ25vcmVkCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjA4CisKKy0gQWRkZWQgS0VSTl8qIHRvIHJlbWFpbmluZyBtZXNzYWdlcworCistIENsZWFuZWQgdXAgZGVjbGFyYXRpb24gb2YgPHN0YXRfcmVhZD4KKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMDkKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKworLSBSZW1vdmVkIHNpbGVudGx5IGludHJvZHVjZWQgY2FsbHMgdG8gbG9ja19rZXJuZWwoKSBhbmQKKyAgdW5sb2NrX2tlcm5lbCgpIGR1ZSB0byByZWNlbnQgVkZTIGxvY2tpbmcgY2hhbmdlcy4gQktMIGlzbid0CisgIHJlcXVpcmVkIGluIGRldmZzIAorCistIENoYW5nZWQgPGRldmZzX3JtZGlyPiB0byBhbGxvdyBsYXRlciBhZGRpdGlvbnMgaWYgbm90IHlldCBlbXB0eQorCistIEFkZGVkIGNhbGxzIHRvIDxkZXZmc19yZWdpc3Rlcl9wYXJ0aXRpb25zPiBpbiBkcml2ZXJzL2Jsb2NrL2Jsa3BjLmMKKyAgPGFkZF9wYXJ0aXRpb24+IGFuZCA8ZGVsX3BhcnRpdGlvbj4KKworLSBGaXhlZCBidWcgaW4gPGRldmZzX2FsbG9jX3VuaXF1ZV9udW1iZXI+OiB3YXMgY2xlYXJpbmcgYmV5b25kCisgIGJpdGZpZWxkCisKKy0gRml4ZWQgYml0ZmllbGQgZGF0YSB0eXBlIGZvciA8ZGV2ZnNfKmFsbG9jX2Rldm51bT4KKworLSBNYWRlIG1ham9yIGJpdGZpZWxkIHR5cGUgYW5kIGluaXRpYWxpc2VyIDY0IGJpdCBzYWZlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjEwCisKKy0gVXBkYXRlZCBmcy9kZXZmcy91dGlsLmMgdG8gZml4IHNoaWZ0IHdhcm5pbmcgb24gNjQgYml0IG1hY2hpbmVzCisgIFRoYW5rcyB0byBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4KKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMTEKKworLSBEbyBub3QgcHV0IG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyIGRldmljZXMgaW4gL2Rldi9taXNjIGlmIHRoZXkKKyAgc3BlY2lmeSB0aGVpciBvd24gZGlyZWN0b3J5IChpLmUuIGNvbnRhaW4gYSAnLycgY2hhcmFjdGVyKQorCistIENvcGllZCBtYWNybyBmb3IgZXJyb3IgbWVzc2FnZXMgZnJvbSBmcy9kZXZmcy9iYXNlLmMgdG8KKyAgZnMvZGV2ZnMvdXRpbC5jIGFuZCBtYWRlIHVzZSBvZiB0aGlzIG1hY3JvCisKKy0gUmVtb3ZlZCAyLjQueCBjb21wYXRpYmlsaXR5IGNvZGUgZnJvbSBmcy9kZXZmcy9iYXNlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMTIKKworLSBBZGRlZCBCS0wgdG8gPGRldmZzX29wZW4+IGJlY2F1c2UgZHJpdmVycyBzdGlsbCBuZWVkIGl0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjEzCisKKy0gUHJvdGVjdGVkIDxzY2FuX2Rpcl9mb3JfcmVtb3ZhYmxlPiBhbmQgPGdldF9yZW1vdmFibGVfcGFydGl0aW9uPgorICBmcm9tIGNoYW5naW5nIGRpcmVjdG9yeSBjb250ZW50cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxNAorCistIFN3aXRjaGVkIHRvIElTTyBDIHN0cnVjdHVyZSBmaWVsZCBpbml0aWFsaXNlcnMKKworLSBTd2l0Y2ggdG8gc2V0X2N1cnJlbnRfc3RhdGUoKSBhbmQgbW92ZSBiZWZvcmUgYWRkX3dhaXRfcXVldWUoKQorCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorCistIEZpeGVkIGRldmZzIGVudHJ5IGxlYWsgaW4gPGRldmZzX3JlYWRkaXI+IHdoZW4gKnJlYWRkaXIgZmFpbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMTUKKworLSBDcmVhdGVkIDxkZXZmc19maW5kX2FuZF91bnJlZ2lzdGVyPgorCistIFN3aXRjaGVkIG1hbnkgZnVuY3Rpb25zIGZyb20gPGRldmZzX2ZpbmRfaGFuZGxlPiB0bworICA8ZGV2ZnNfZmluZF9hbmRfdW5yZWdpc3Rlcj4KKworLSBTd2l0Y2hlZCBtYW55IGZ1bmN0aW9ucyBmcm9tIDxkZXZmc19maW5kX2hhbmRsZT4gdG8gPGRldmZzX2dldF9oYW5kbGU+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjE2CisKKy0gU3dpdGNoZWQgYXJjaC9pYTY0L3NuL2lvL2hjbC5jIGZyb20gPGRldmZzX2ZpbmRfaGFuZGxlPiB0bworICA8ZGV2ZnNfZ2V0X2hhbmRsZT4KKworLSBSZW1vdmVkIGRlcHJlY2F0ZWQgPGRldmZzX2ZpbmRfaGFuZGxlPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxNworCistIEV4cG9ydGVkIDxkZXZmc19maW5kX2FuZF91bnJlZ2lzdGVyPiBhbmQgPGRldmZzX29ubHk+IHRvIG1vZHVsZXMKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKworLSBGaXhlZCBtb2R1bGUgdW5sb2FkIHJhY2UgaW4gPGRldmZzX29wZW4+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjE4CisKKy0gUmVtb3ZlZCBERVZGU19GTF9BVVRPX09XTkVSIGZsYWcKKworLSBTd2l0Y2hlZCBsaW5nZXJpbmcgc3RydWN0dXJlIGZpZWxkIGluaXRpYWxpc2VyIHRvIElTTyBDCisKKy0gQWRkZWQgbG9ja2luZyB3aGVuIHNldHRpbmcvY2xlYXJpbmcgZmxhZ3MKKworLSBEb2N1bWVudGF0aW9uIGZpeCBpbiBmcy9kZXZmcy91dGlsLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzNjZlYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvUkVBRE1FCkBAIC0wLDAgKzEsMTk2NCBAQAorRGV2ZnMgKERldmljZSBGaWxlIFN5c3RlbSkgRkFRCisKKworTGludXggRGV2ZnMgKERldmljZSBGaWxlIFN5c3RlbSkgRkFRCitSaWNoYXJkIEdvb2NoCisyMC1BVUctMjAwMgorCisKK0RvY3VtZW50IGxhbmd1YWdlczoKKworCisKKworCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URTogdGhlIG1hc3RlciBjb3B5IG9mIHRoaXMgZG9jdW1lbnQgaXMgYXZhaWxhYmxlIG9ubGluZSBhdDoKKworaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvZG9jcy9kZXZmcy5odG1sCithbmQgbG9va3MgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgdGV4dCB2ZXJzaW9uIGRpc3RyaWJ1dGVkIHdpdGggdGhlCitrZXJuZWwgc291cmNlcy4gQSBtaXJyb3Igc2l0ZSBpcyBhdmFpbGFibGUgYXQ6CisKK2h0dHA6Ly93d3cucmFzLnVjYWxnYXJ5LmNhL35yZ29vY2gvbGludXgvZG9jcy9kZXZmcy5odG1sCisKK1RoZXJlIGlzIGFsc28gYW4gb3B0aW9uYWwgZGFlbW9uIHRoYXQgbWF5IGJlIHVzZWQgd2l0aCBkZXZmcy4gWW91IGNhbgorZmluZCBvdXQgbW9yZSBhYm91dCBpdCBhdDoKKworaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvCisKK0EgbWFpbGluZyBsaXN0IGlzIGF2YWlsYWJsZSB3aGljaCB5b3UgbWF5IHN1YnNjcmliZSB0by4gU2VuZAorZW1haWwKK3RvIG1ham9yZG9tb0Bvc3Muc2dpLmNvbSB3aXRoIHRoZSBmb2xsb3dpbmcgbGluZSBpbiB0aGUKK2JvZHkgb2YgdGhlIG1lc3NhZ2U6CitzdWJzY3JpYmUgZGV2ZnMKK1RvIHVuc3Vic2NyaWJlLCBzZW5kIHRoZSBtZXNzYWdlIGJvZHk6Cit1bnN1YnNjcmliZSBkZXZmcworaW5zdGVhZC4gVGhlIGxpc3QgaXMgYXJjaGl2ZWQgYXQKKworaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL2RldmZzL2FyY2hpdmUvLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb250ZW50cworCisKK1doYXQgaXMgaXQ/CisKK1doeSBkbyBpdD8KKworV2hvIGVsc2UgZG9lcyBpdD8KKworSG93IGl0IHdvcmtzCisKK09wZXJhdGlvbmFsIGlzc3VlcyAoZXNzZW50aWFsIHJlYWRpbmcpCisKK0luc3RydWN0aW9ucyBmb3IgdGhlIGltcGF0aWVudAorUGVybWlzc2lvbnMgcGVyc2lzdGVuY2UgYWNyb3NzIHJlYm9vdHMKK0RlYWxpbmcgd2l0aCBkcml2ZXJzIHdpdGhvdXQgZGV2ZnMgc3VwcG9ydAorQWxsIHRoZSB3YXkgd2l0aCBEZXZmcworT3RoZXIgSXNzdWVzCitLZXJuZWwgTmFtaW5nIFNjaGVtZQorRGV2ZnNkIE5hbWluZyBTY2hlbWUKK09sZCBDb21wYXRpYmlsaXR5IE5hbWVzCitTQ1NJIEhvc3QgUHJvYmluZyBJc3N1ZXMKKworCisKK0RldmljZSBkcml2ZXJzIGN1cnJlbnRseSBwb3J0ZWQKKworQWxsb2NhdGlvbiBvZiBEZXZpY2UgTnVtYmVycworCitRdWVzdGlvbnMgYW5kIEFuc3dlcnMKKworTWFraW5nIHRoaW5ncyB3b3JrCitBbHRlcm5hdGl2ZXMgdG8gZGV2ZnMKK1doYXQgSSBkb24ndCBsaWtlIGFib3V0IGRldmZzCitIb3cgdG8gcmVwb3J0IGJ1Z3MKK1N0cmFuZ2Uga2VybmVsIG1lc3NhZ2VzCitDb21waWxhdGlvbiBwcm9ibGVtcyB3aXRoIGRldmZzZAorCisKK090aGVyIHJlc291cmNlcworCitUcmFuc2xhdGlvbnMgb2YgdGhpcyBkb2N1bWVudAorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworV2hhdCBpcyBpdD8KKworRGV2ZnMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gInJlYWwiIGNoYXJhY3RlciBhbmQgYmxvY2sgc3BlY2lhbCBkZXZpY2VzCitvbiB5b3VyIHJvb3QgZmlsZXN5c3RlbS4gS2VybmVsIGRldmljZSBkcml2ZXJzIGNhbiByZWdpc3RlciBkZXZpY2VzIGJ5CituYW1lIHJhdGhlciB0aGFuIG1ham9yIGFuZCBtaW5vciBudW1iZXJzLiBUaGVzZSBkZXZpY2VzIHdpbGwgYXBwZWFyIGluCitkZXZmcyBhdXRvbWF0aWNhbGx5LCB3aXRoIHdoYXRldmVyIGRlZmF1bHQgb3duZXJzaGlwIGFuZAorcHJvdGVjdGlvbiB0aGUgZHJpdmVyIHNwZWNpZmllZC4gQSBkYWVtb24gKGRldmZzZCkgY2FuIGJlIHVzZWQgdG8KK292ZXJyaWRlIHRoZXNlIGRlZmF1bHRzLiBEZXZmcyBoYXMgYmVlbiBpbiB0aGUga2VybmVsIHNpbmNlIDIuMy40Ni4KKworTk9URSB0aGF0IGRldmZzIGlzIGVudGlyZWx5IG9wdGlvbmFsLiBJZiB5b3UgcHJlZmVyIHRoZSBvbGQKK2Rpc2MtYmFzZWQgZGV2aWNlIG5vZGVzLCB0aGVuIHNpbXBseSBsZWF2ZSBDT05GSUdfREVWRlNfRlM9biAodGhlCitkZWZhdWx0KS4gSW4gdGhpcyBjYXNlLCBub3RoaW5nIHdpbGwgY2hhbmdlLiAgQUxTTyBOT1RFIHRoYXQgaWYgeW91IGRvCitlbmFibGUgZGV2ZnMsIHRoZSBkZWZhdWx0cyBhcmUgc3VjaCB0aGF0IGZ1bGwgY29tcGF0aWJpbGl0eSBpcworbWFpbnRhaW5lZCB3aXRoIHRoZSBvbGQgZGV2aWNlcyBuYW1lcy4KKworVGhlcmUgYXJlIHR3byBhc3BlY3RzIHRvIGRldmZzOiBvbmUgaXMgdGhlIHVuZGVybHlpbmcgZGV2aWNlCituYW1lc3BhY2UsIHdoaWNoIGlzIGEgbmFtZXNwYWNlIGp1c3QgbGlrZSBhbnkgbW91bnRlZCBmaWxlc3lzdGVtLiBUaGUKK290aGVyIGFzcGVjdCBpcyB0aGUgZmlsZXN5c3RlbSBjb2RlIHdoaWNoIHByb3ZpZGVzIGEgdmlldyBvZiB0aGUKK2RldmljZSBuYW1lc3BhY2UuIFRoZSByZWFzb24gSSBtYWtlIGEgZGlzdGluY3Rpb24gaXMgYmVjYXVzZSBkZXZmcworY2FuIGJlIG1vdW50ZWQgbWFueSB0aW1lcywgd2l0aCBlYWNoIG1vdW50IHNob3dpbmcgdGhlIHNhbWUgZGV2aWNlCituYW1lc3BhY2UuIENoYW5nZXMgbWFkZSBhcmUgZ2xvYmFsIHRvIGFsbCBtb3VudGVkIGRldmZzIGZpbGVzeXN0ZW1zLgorQWxzbywgYmVjYXVzZSB0aGUgZGV2ZnMgbmFtZXNwYWNlIGV4aXN0cyB3aXRob3V0IGFueSBkZXZmcyBtb3VudHMsIHlvdQorY2FuIGVhc2lseSBtb3VudCB0aGUgcm9vdCBmaWxlc3lzdGVtIGJ5IHJlZmVycmluZyB0byBhbiBlbnRyeSBpbiB0aGUKK2RldmZzIG5hbWVzcGFjZS4KKworCitUaGUgY29zdCBvZiBkZXZmcyBpcyBhIHNtYWxsIGluY3JlYXNlIGluIGtlcm5lbCBjb2RlIHNpemUgYW5kIG1lbW9yeQordXNhZ2UuIEFib3V0IDcgcGFnZXMgb2YgY29kZSAoc29tZSBvZiB0aGF0IGluIF9faW5pdCBzZWN0aW9ucykgYW5kIDcyCitieXRlcyBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgbmFtZXNwYWNlLiBBIG1vZGVzdCBzeXN0ZW0gaGFzIG9ubHkgYQorY291cGxlIG9mIGh1bmRyZWQgZGV2aWNlIGVudHJpZXMsIHNvIHRoaXMgY29zdHMgYSBmZXcgbW9yZQorcGFnZXMuIENvbXBhcmUgdGhpcyB3aXRoIHRoZSBzdWdnZXN0aW9uIHRvIHB1dCAvZGV2IG9uIGEgPGEKK2hyZWY9IiN3aHktZmFxLXJhbWRpc2MiPnJhbWRpc2MuCisKK09uIGEgdHlwaWNhbCBtYWNoaW5lLCB0aGUgY29zdCBpcyB1bmRlciAwLjIgcGVyY2VudC4gT24gYSBtb2Rlc3QKK3N5c3RlbSB3aXRoIDY0IE1CeXRlcyBvZiBSQU0sIHRoZSBjb3N0IGlzIHVuZGVyIDAuMSBwZXJjZW50LiAgVGhlCithY2N1c2F0aW9ucyBvZiAiYmxvYXR3YXJlIiBsZXZlbGxlZCBhdCBkZXZmcyBhcmUgbm90IGp1c3RpZmllZC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitXaHkgZG8gaXQ/CisKK1RoZXJlIGFyZSBzZXZlcmFsIHByb2JsZW1zIHRoYXQgZGV2ZnMgYWRkcmVzc2VzLiBTb21lIG9mIHRoZXNlCitwcm9ibGVtcyBhcmUgbW9yZSBzZXJpb3VzIHRoYW4gb3RoZXJzIChkZXBlbmRpbmcgb24geW91ciBwb2ludCBvZgordmlldyksIGFuZCBzb21lIGNhbiBiZSBzb2x2ZWQgd2l0aG91dCBkZXZmcy4gSG93ZXZlciwgdGhlIHRvdGFsaXR5IG9mCit0aGVzZSBwcm9ibGVtcyByZWFsbHkgY2FsbHMgb3V0IGZvciBkZXZmcy4KKworVGhlIGNob2ljZSBpcyBhIHBhdGNod29yayBvZiBpbmVmZmljaWVudCB1c2VyIHNwYWNlIHNvbHV0aW9ucywgd2hpY2gKK2FyZSBjb21wbGV4IGFuZCBsaWtlbHkgdG8gYmUgZnJhZ2lsZSwgb3IgdG8gdXNlIGEgc2ltcGxlIGFuZCBlZmZpY2llbnQKK2RldmZzIHdoaWNoIGlzIHJvYnVzdC4KKworVGhlcmUgaGF2ZSBiZWVuIG1hbnkgY291bnRlci1wcm9wb3NhbHMgdG8gZGV2ZnMsIGFsbCBzZWVraW5nIHRvCitwcm92aWRlIHNvbWUgb2YgdGhlIGJlbmVmaXRzIHdpdGhvdXQgYWN0dWFsbHkgaW1wbGVtZW50aW5nIGRldmZzLiBTbworZmFyIHRoZXJlIGhhcyBiZWVuIGFuIGFic2VuY2Ugb2YgY29kZSBhbmQgbm8gcHJvcG9zZWQgYWx0ZXJuYXRpdmUgaGFzCitiZWVuIGFibGUgdG8gcHJvdmlkZSBhbGwgdGhlIGZlYXR1cmVzIHRoYXQgZGV2ZnMgZG9lcy4gRnVydGhlciwKK2FsdGVybmF0aXZlIHByb3Bvc2FscyByZXF1aXJlIGZhciBtb3JlIGNvbXBsZXhpdHkgaW4gdXNlci1zcGFjZSAoYW5kCitzdGlsbCBkZWxpdmVyIGxlc3MgZnVuY3Rpb25hbGl0eSB0aGFuIGRldmZzKS4gU29tZSBwZW9wbGUgaGF2ZSB0aGUKK21hbnRyYSBvZiByZWR1Y2luZyAia2VybmVsIGJsb2F0IiwgYnV0IGRvbid0IGNvbnNpZGVyIHRoZSBlZmZlY3RzIG9uCit1c2VyLXNwYWNlLgorCitBIGdvb2Qgc29sdXRpb24gbGltaXRzIHRoZSB0b3RhbCBjb21wbGV4aXR5IG9mIGtlcm5lbC1zcGFjZSBhbmQKK3VzZXItc3BhY2UuCisKKworTWFqb3ImbWlub3IgYWxsb2NhdGlvbgorCitUaGUgZXhpc3Rpbmcgc2NoZW1lIHJlcXVpcmVzIHRoZSBhbGxvY2F0aW9uIG9mIG1ham9yIGFuZCBtaW5vciBkZXZpY2UKK251bWJlcnMgZm9yIGVhY2ggYW5kIGV2ZXJ5IGRldmljZS4gVGhpcyBtZWFucyB0aGF0IGEgY2VudHJhbAorY28tb3JkaW5hdGluZyBhdXRob3JpdHkgaXMgcmVxdWlyZWQgdG8gaXNzdWUgdGhlc2UgZGV2aWNlIG51bWJlcnMKKyh1bmxlc3MgeW91J3JlIGRldmVsb3BpbmcgYSAicHJpdmF0ZSIgZGV2aWNlIGRyaXZlciksIGluIG9yZGVyIHRvCitwcmVzZXJ2ZSB1bmlxdWVuZXNzLiBEZXZmcyBzaGlmdHMgdGhlIGJ1cmRlbiB0byBhIG5hbWVzcGFjZS4gVGhpcyBtYXkKK25vdCBzZWVtIGxpa2UgYSBodWdlIGJlbmVmaXQsIGJ1dCBhY3R1YWxseSBpdCBpcy4gU2luY2UgZHJpdmVyIGF1dGhvcnMKK3dpbGwgbmF0dXJhbGx5IGNob29zZSBhIGRldmljZSBuYW1lIHdoaWNoIHJlZmxlY3RzIHRoZSBmdW5jdGlvbmFsaXR5CitvZiB0aGUgZGV2aWNlLCB0aGVyZSBpcyBmYXIgbGVzcyBwb3RlbnRpYWwgZm9yIG5hbWVzcGFjZSBjb25mbGljdC4KK1NvbHZpbmcgdGhpcyByZXF1aXJlcyBhIGtlcm5lbCBjaGFuZ2UuCisKKy9kZXYgbWFuYWdlbWVudAorCitCZWNhdXNlIHlvdSBjdXJyZW50bHkgYWNjZXNzIGRldmljZXMgdGhyb3VnaCBkZXZpY2Ugbm9kZXMsIHRoZXNlIG11c3QKK2JlIGNyZWF0ZWQgYnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yLiBGb3Igc3RhbmRhcmQgZGV2aWNlcyB5b3UgY2FuCit1c3VhbGx5IGZpbmQgYSBNQUtFREVWIHByb2dyYW1tZSB3aGljaCBjcmVhdGVzIGFsbCB0aGVzZSAoaHVuZHJlZHMhKQorb2Ygbm9kZXMuIFRoaXMgbWVhbnMgdGhhdCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgbXVzdCBiZSByZWZsZWN0ZWQgYnkKK2NoYW5nZXMgaW4gdGhlIE1BS0VERVYgcHJvZ3JhbW1lLCBvciBlbHNlIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcgorY3JlYXRlcyBkZXZpY2Ugbm9kZXMgYnkgaGFuZC4KKworVGhlIGJhc2ljIHByb2JsZW0gaXMgdGhhdCB0aGVyZSBhcmUgdHdvIHNlcGFyYXRlIGRhdGFiYXNlcyBvZgorbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMuIE9uZSBpcyBpbiB0aGUga2VybmVsIGFuZCBvbmUgaXMgaW4gL2RldiAob3IKK2luIGEgTUFLRURFViBwcm9ncmFtbWUsIGlmIHlvdSB3YW50IHRvIGxvb2sgYXQgaXQgdGhhdCB3YXkpLiBUaGlzIGlzCitkdXBsaWNhdGlvbiBvZiBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgbm90IGdvb2QgcHJhY3RpY2UuCitTb2x2aW5nIHRoaXMgcmVxdWlyZXMgYSBrZXJuZWwgY2hhbmdlLgorCisvZGV2IGdyb3d0aAorCitBIHR5cGljYWwgL2RldiBoYXMgb3ZlciAxMjAwIG5vZGVzISBNb3N0IG9mIHRoZXNlIGRldmljZXMgc2ltcGx5IGRvbid0CitleGlzdCBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBub3QgYXZhaWxhYmxlLiBBIGh1Z2UgL2RldiBpbmNyZWFzZXMgdGhlCit0aW1lIHRvIGFjY2VzcyBkZXZpY2VzIChJJ20ganVzdCByZWZlcnJpbmcgdG8gdGhlIGRlbnRyeSBsb29rdXAgdGltZXMKK2FuZCB0aGUgdGltZSB0YWtlbiB0byByZWFkIGlub2RlcyBvZmYgZGlzYzogdGhlIG5leHQgc3Vic2VjdGlvbiBzaG93cworc29tZSBtb3JlIGhvcnJvcnMpLgorCitBbiBleGFtcGxlIG9mIGhvdyBiaWcgL2RldiBjYW4gZ3JvdyBpcyBpZiB3ZSBjb25zaWRlciBTQ1NJIGRldmljZXM6CisKK2hvc3QgICAgICAgICAgIDYgIGJpdHMgIChzYXkgdXAgdG8gNjQgaG9zdHMgb24gYSByZWFsbHkgYmlnIG1hY2hpbmUpCitjaGFubmVsICAgICAgICA0ICBiaXRzICAoc2F5IHVwIHRvIDE2IFNDU0kgYnVzZXMgcGVyIGhvc3QpCitpZCAgICAgICAgICAgICA0ICBiaXRzCitsdW4gICAgICAgICAgICAzICBiaXRzCitwYXJ0aXRpb24gICAgICA2ICBiaXRzCitUT1RBTCAgICAgICAgICAyMyBiaXRzCisKKworVGhpcyByZXF1aXJlcyA4IE1lZ2EgKDEwMjQqMTAyNCkgaW5vZGVzIGlmIHdlIHdhbnQgdG8gc3RvcmUgYWxsCitwb3NzaWJsZSBkZXZpY2Ugbm9kZXMuIEV2ZW4gaWYgd2Ugc2NyYXAgZXZlcnl0aGluZyBidXQgaWQscGFydGl0aW9uCithbmQgYXNzdW1lIGEgc2luZ2xlIGhvc3QgYWRhcHRlciB3aXRoIGEgc2luZ2xlIFNDU0kgYnVzIGFuZCBvbmx5IG9uZQorbG9naWNhbCB1bml0IHBlciBTQ1NJIHRhcmdldCAoaWQpLCB0aGF0J3Mgc3RpbGwgMTAgYml0cyBvciAxMDI0Citpbm9kZXMuIEVhY2ggVkZTIGlub2RlIHRha2VzIGFyb3VuZCAyNTYgYnl0ZXMgKGtlcm5lbCAyLjEuNzgpLCBzbwordGhhdCdzIDI1NiBrQnl0ZXMgb2YgaW5vZGUgc3RvcmFnZSBvbiBkaXNjIChhc3N1bWluZyByZWFsIGlub2RlcyB0YWtlCithIHNpbWlsYXIgYW1vdW50IG9mIHNwYWNlIGFzIFZGUyBpbm9kZXMpLiBUaGlzIGlzIGFjdHVhbGx5IG5vdCBzbyBiYWQsCitiZWNhdXNlIGRpc2MgaXMgY2hlYXAgdGhlc2UgZGF5cy4gRW1iZWRkZWQgc3lzdGVtcyB3b3VsZCBjYXJlIGFib3V0CisyNTYga0J5dGVzIG9mIC9kZXYgaW5vZGVzLCBidXQgeW91IGNvdWxkIGFyZ3VlIHRoYXQgZW1iZWRkZWQgc3lzdGVtcword291bGQgaGF2ZSBoYW5kLXR1bmVkIC9kZXYgZGlyZWN0b3JpZXMuIEkndmUgaGFkIHRvIGRvIGp1c3QgdGhhdCBvbiBteQorZW1iZWRkZWQgc3lzdGVtcywgYnV0IEkgd291bGQgcmF0aGVyIGp1c3QgbGVhdmUgaXQgdG8gZGV2ZnMuCisKK0Fub3RoZXIgaXNzdWUgaXMgdGhlIHRpbWUgdGFrZW4gdG8gbG9va3VwIGFuIGlub2RlIHdoZW4gZmlyc3QKK3JlZmVyZW5jZWQuIE5vdCBvbmx5IGRvZXMgdGhpcyB0YWtlIHRpbWUgaW4gc2Nhbm5pbmcgdGhyb3VnaCBhIGxpc3QgaW4KK21lbW9yeSwgYnV0IGFsc28gdGhlIHNlZWsgdGltZXMgdG8gcmVhZCB0aGUgaW5vZGVzIG9mZiBkaXNjLgorVGhpcyBjb3VsZCBiZSBzb2x2ZWQgaW4gdXNlci1zcGFjZSB1c2luZyBhIGNsZXZlciBwcm9ncmFtbWUgd2hpY2gKK3NjYW5uZWQgdGhlIGtlcm5lbCBsb2dzIGFuZCBkZWxldGVkIC9kZXYgZW50cmllcyB3aGljaCBhcmUgbm90CithdmFpbGFibGUgYW5kIGNyZWF0ZWQgdGhlbSB3aGVuIHRoZXkgd2VyZSBhdmFpbGFibGUuIFRoaXMgcHJvZ3JhbW1lCit3b3VsZCBuZWVkIHRvIGJlIHJ1biBldmVyeSB0aW1lIGEgbmV3IG1vZHVsZSB3YXMgbG9hZGVkLCB3aGljaCB3b3VsZAorc2xvdyB0aGluZ3MgZG93biBhIGxvdC4KKworVGhlcmUgaXMgYW4gZXhpc3RpbmcgcHJvZ3JhbW1lIGNhbGxlZCBzY3NpZGV2IHdoaWNoIHdpbGwgYXV0b21hdGljYWxseQorY3JlYXRlIGRldmljZSBub2RlcyBmb3IgU0NTSSBkZXZpY2VzLiBJdCBjYW4gZG8gdGhpcyBieSBzY2FubmluZyBmaWxlcworaW4gL3Byb2Mvc2NzaS4gVW5mb3J0dW5hdGVseSwgdG8gZXh0ZW5kIHRoaXMgaWRlYSB0byBvdGhlciBkZXZpY2UKK25vZGVzIHdvdWxkIHJlcXVpcmUgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBkcml2ZXJzIChzbwordGhleSB0b28gd291bGQgcHJvdmlkZSBpbmZvcm1hdGlvbiBpbiAvcHJvYykuIFRoaXMgaXMgYSBub24tdHJpdmlhbAorY2hhbmdlIChJIHNob3VsZCBrbm93OiBkZXZmcyBoYXMgaGFkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyKS4gT25jZQoreW91IGdvIHRvIHRoaXMgbXVjaCBlZmZvcnQsIHlvdSBtYXkgYXMgd2VsbCB1c2UgZGV2ZnMgaXRzZWxmICh3aGljaAorYWxzbyBwcm92aWRlcyB0aGlzIGluZm9ybWF0aW9uKS4gIEZ1cnRoZXJtb3JlLCBzdWNoIGEgc3lzdGVtIHdvdWxkCitsaWtlbHkgYmUgaW1wbGVtZW50ZWQgaW4gYW4gYWQtaG9jIGZhc2hpb24sIGFzIGRpZmZlcmVudCBkcml2ZXJzIHdpbGwKK3Byb3ZpZGUgdGhlaXIgaW5mb3JtYXRpb24gaW4gZGlmZmVyZW50IHdheXMuCisKK0RldmZzIGlzIG11Y2ggY2xlYW5lciwgYmVjYXVzZSBpdCAobmF0dXJhbGx5KSBoYXMgYSB1bmlmb3JtIG1lY2hhbmlzbQordG8gcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uOiB0aGUgZGV2aWNlIG5vZGVzIHRoZW1zZWx2ZXMhCisKKworTm9kZSB0byBkcml2ZXIgZmlsZV9vcGVyYXRpb25zIHRyYW5zbGF0aW9uCisKK1RoZXJlIGlzIGFuIGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdheSBkaXNjLWJhc2VkIGNoYXJhY3RlcgorYW5kIGJsb2NrIG5vZGVzIGFuZCBkZXZmcyBlbnRyaWVzIG1ha2UgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBhbiBlbnRyeQoraW4gL2RldiBhbmQgdGhlIGFjdHVhbCBkZXZpY2UgZHJpdmVyLgorCitXaXRoIHRoZSBjdXJyZW50IDggYml0IG1ham9yIGFuZCBtaW5vciBudW1iZXJzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4KK2Rpc2MtYmFzZWQgYyZiIG5vZGVzIGFuZCBwZXItbWFqb3IgZHJpdmVycyBpcyBkb25lIHRocm91Z2ggYQorZml4ZWQtbGVuZ3RoIHRhYmxlIG9mIDEyOCBlbnRyaWVzLiBUaGUgdmFyaW91cyBmaWxlc3lzdGVtIHR5cGVzIHNldAordGhlIGlub2RlIG9wZXJhdGlvbnMgZm9yIGMmYiBub2RlcyB0byB7Y2hyLGJsa31kZXZfaW5vZGVfb3BlcmF0aW9ucywKK3NvIHdoZW4gYSBkZXZpY2UgaXMgb3BlbmVkIGEgZmV3IHF1aWNrIGxldmVscyBvZiBpbmRpcmVjdGlvbiBicmluZyB1cwordG8gdGhlIGRyaXZlciBmaWxlX29wZXJhdGlvbnMuCisKK0ZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlciBkZXZpY2VzIGEgc2Vjb25kIHN0ZXAgaXMgcmVxdWlyZWQ6IHRoZXJlCitpcyBhIHNjYW4gZm9yIHRoZSBkcml2ZXIgZW50cnkgd2l0aCB0aGUgc2FtZSBtaW5vciBudW1iZXIgYXMgdGhlIGZpbGUKK3RoYXQgd2FzIG9wZW5lZCwgYW5kIHRoZSBhcHByb3ByaWF0ZSBtaW5vciBvcGVuIG1ldGhvZCBpcyBjYWxsZWQuIFRoaXMKK3NjYW5uaW5nIGlzIGRvbmUgKmV2ZXJ5IHRpbWUqIHlvdSBvcGVuIGEgZGV2aWNlIG5vZGUuIFBvdGVudGlhbGx5LCB5b3UKK21heSBiZSBzZWFyY2hpbmcgdGhyb3VnaCBkb3plbnMgb2YgbWlzYy4gZW50cmllcyBiZWZvcmUgeW91IGZpbmQgeW91cgorb3BlbiBtZXRob2QuIFdoaWxlIG5vdCBhbiBlbm9ybW91cyBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgdGhpcyBkb2VzCitzZWVtIHBvaW50bGVzcy4KKworTGludXggKm11c3QqIG1vdmUgYmV5b25kIHRoZSA4IGJpdCBtYWpvciBhbmQgbWlub3IgYmFycmllciwKK3NvbWVob3cuIElmIHdlIHNpbXBseSBpbmNyZWFzZSBlYWNoIHRvIDE2IGJpdHMsIHRoZW4gdGhlIGluZGV4aW5nCitzY2hlbWUgdXNlZCBmb3IgbWFqb3IgZHJpdmVyIGxvb2t1cCBiZWNvbWVzIHVudGVuYWJsZSwgYmVjYXVzZSB0aGUKK21ham9yIHRhYmxlcyAob25lIGVhY2ggZm9yIGNoYXJhY3RlciBhbmQgYmxvY2sgZGV2aWNlcykgd291bGQgbmVlZCB0bworYmUgNjQgayBlbnRyaWVzIGxvbmcgKDUxMiBrQnl0ZXMgb24geDg2LCAxIE1CeXRlIGZvciA2NCBiaXQKK3N5c3RlbXMpLiBTbyB3ZSB3b3VsZCBoYXZlIHRvIHVzZSBhIHNjaGVtZSBsaWtlIHRoYXQgdXNlZCBmb3IKK21pc2NlbGxhbmVvdXMgY2hhcmFjdGVyIGRldmljZXMsIHdoaWNoIG1lYW5zIHRoZSBzZWFyY2ggdGltZSBnb2VzIHVwCitsaW5lYXJseSB3aXRoIHRoZSBhdmVyYWdlIG51bWJlciBvZiBtYWpvciBkZXZpY2UgZHJpdmVycyBvbiB5b3VyCitzeXN0ZW0uIE5vdCBhbGwgImRldmljZXMiIGFyZSBoYXJkd2FyZSwgc29tZSBhcmUgaGlnaGVyLWxldmVsIGRyaXZlcnMKK2xpa2UgS0dJLCBzbyB5b3UgY2FuIGdldCBtb3JlICJkZXZpY2VzIiB3aXRob3V0IGFkZGluZyBoYXJkd2FyZQorWW91IGNhbiBpbXByb3ZlIHRoaXMgYnkgY3JlYXRpbmcgYW4gb3JkZXJlZCAoYmFsYW5jZWQ6LSkKK2JpbmFyeSB0cmVlLCBpbiB3aGljaCBjYXNlIHlvdXIgc2VhcmNoIHRpbWUgYmVjb21lcyBsb2coTikuCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBoYXNoaW5nIHRvIHNwZWVkIHVwIHRoZSBzZWFyY2guCitCdXQgd2h5IGRvIHRoYXQgc2VhcmNoIGF0IGFsbCBpZiB5b3UgZG9uJ3QgaGF2ZSB0bz8gT25jZSBhZ2FpbiwgaXQKK3NlZW1zIHBvaW50bGVzcy4KKworTm90ZSB0aGF0IGRldmZzIGRvZXNuJ3QgdXNlIHRoZSBtYWpvciZtaW5vciBzeXN0ZW0uIEZvciBkZXZmcworZW50cmllcywgdGhlIGNvbm5lY3Rpb24gaXMgZG9uZSB3aGVuIHlvdSBsb29rdXAgdGhlIC9kZXYgZW50cnkuIFdoZW4KK2RldmZzX3JlZ2lzdGVyKCkgaXMgY2FsbGVkLCBhbiBpbnRlcm5hbCB0YWJsZSBpcyBhcHBlbmRlZCB3aGljaCBoYXMKK3RoZSBlbnRyeSBuYW1lIGFuZCB0aGUgZmlsZV9vcGVyYXRpb25zLiBJZiB0aGUgZGVudHJ5IGNhY2hlIGRvZXNuJ3QKK2hhdmUgdGhlIC9kZXYgZW50cnkgYWxyZWFkeSwgdGhpcyBpbnRlcm5hbCB0YWJsZSBpcyBzY2FubmVkIHRvIGdldCB0aGUKK2ZpbGVfb3BlcmF0aW9ucywgYW5kIGFuIGlub2RlIGlzIGNyZWF0ZWQuIElmIHRoZSBkZW50cnkgY2FjaGUgYWxyZWFkeQoraGFzIHRoZSBlbnRyeSwgdGhlcmUgaXMgKm5vIGxvb2t1cCB0aW1lKiAob3RoZXIgdGhhbiB0aGUgZGVudHJ5IHNjYW4KK2l0c2VsZiwgYnV0IHdlIGNhbid0IGF2b2lkIHRoYXQgYW55d2F5LCBhbmQgYmVzaWRlcyBMaW51eCBkZW50cmllcworY3JlYW0gb3RoZXIgT1MncyB3aGljaCBkb24ndCBoYXZlIHRoZW06LSkuIEZ1cnRoZXJtb3JlLCB0aGUgbnVtYmVyIG9mCitub2RlIGVudHJpZXMgaW4gYSBkZXZmcyBpcyBvbmx5IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGRldmljZQorZW50cmllcywgbm90IHRoZSBudW1iZXIgb2YgKmNvbmNlaXZhYmxlKiBlbnRyaWVzLiBFdmVuIGlmIHlvdSByZW1vdmUKK3VubmVjZXNzYXJ5IGVudHJpZXMgaW4gYSBkaXNjLWJhc2VkIC9kZXYsIHRoZSBudW1iZXIgb2YgY29uY2VpdmFibGUKK2VudHJpZXMgcmVtYWlucyB0aGUgc2FtZTogeW91IGp1c3QgbGltaXQgeW91cnNlbGYgaW4gb3JkZXIgdG8gc2F2ZQorc3BhY2UuCisKK0RldmZzIHByb3ZpZGVzIGEgZmFzdCBjb25uZWN0aW9uIGJldHdlZW4gYSBWRlMgbm9kZSBhbmQgdGhlIGRldmljZQorZHJpdmVyLCBpbiBhIHNjYWxhYmxlIHdheS4KKworL2RldiBhcyBhIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiB0b29sCisKK1JpZ2h0IG5vdyAvZGV2IGNvbnRhaW5zIGEgbGlzdCBvZiBjb25jZWl2YWJsZSBkZXZpY2VzLCBtb3N0IG9mIHdoaWNoIEkKK2Rvbid0IGhhdmUuIERldmZzIG9ubHkgc2hvd3MgdGhvc2UgZGV2aWNlcyBhdmFpbGFibGUgb24gbXkKK3N5c3RlbS4gVGhpcyBtZWFucyB0aGF0IGxpc3RpbmcgL2RldiBpcyBhIGhhbmR5IHdheSBvZiBjaGVja2luZyB3aGF0CitkZXZpY2VzIGFyZSBhdmFpbGFibGUuCisKK01ham9yJm1pbm9yIHNpemUKKworRXhpc3RpbmcgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgYXJlIGxpbWl0ZWQgdG8gOCBiaXRzIGVhY2guIFRoaXMgaXMKK25vdyBhIGxpbWl0aW5nIGZhY3RvciBmb3Igc29tZSBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgdGhlIFNDU0kgZGlzYworZHJpdmVyLCB3aGljaCBjb25zdW1lcyBhIHNpbmdsZSBtYWpvciBudW1iZXIuIE9ubHkgMTYgZGlzY3MgYXJlCitzdXBwb3J0ZWQsIGFuZCBlYWNoIGRpc2MgbWF5IGhhdmUgb25seSAxNSBwYXJ0aXRpb25zLiBNYXliZSB0aGlzIGlzbid0CithIHByb2JsZW0gZm9yIHlvdSwgYnV0IHNvbWUgb2YgdXMgYXJlIGJ1aWxkaW5nIGh1Z2UgTGludXggc3lzdGVtcyB3aXRoCitkaXNjIGFycmF5cy4gV2l0aCBkZXZmcyBhbiBhcmJpdHJhcnkgcG9pbnRlciBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoCitlYWNoIGRldmljZSBlbnRyeSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZ2l2ZSBhbiBlZmZlY3RpdmUgMzIgYml0CitkZXZpY2UgaWRlbnRpZmllciAoaS5lLiB0aGF0J3MgbGlrZSBoYXZpbmcgYSAzMiBiaXQgbWlub3IKK251bWJlcikuIFNpbmNlIHRoaXMgaXMgcHJpdmF0ZSB0byB0aGUga2VybmVsLCB0aGVyZSBhcmUgbm8gQyBsaWJyYXJ5Citjb21wYXRpYmlsaXR5IGlzc3VlcyB3aGljaCB5b3Ugd291bGQgaGF2ZSB3aXRoIGluY3JlYXNpbmcgbWFqb3IgYW5kCittaW5vciBudW1iZXIgc2l6ZXMuIFNlZSB0aGUgc2VjdGlvbiBvbiAiQWxsb2NhdGlvbiBvZiBEZXZpY2UgTnVtYmVycyIKK2ZvciBkZXRhaWxzIG9uIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UuCisKK1NvbHZpbmcgdGhpcyByZXF1aXJlcyBhIGtlcm5lbCBjaGFuZ2UuCisKK1NpbmNlIHdyaXRpbmcgdGhpcywgdGhlIGtlcm5lbCBoYXMgYmVlbiBtb2RpZmllZCBzbyB0aGF0IHRoZSBTQ1NJIGRpc2MKK2RyaXZlciBoYXMgbW9yZSBtYWpvciBudW1iZXJzIGFsbG9jYXRlZCB0byBpdCBhbmQgbm93IHN1cHBvcnRzIHVwIHRvCisxMjggZGlzY3MuIFNpbmNlIHRoZXNlIG1ham9yIG51bWJlcnMgYXJlIG5vbi1jb250aWd1b3VzIChhIHJlc3VsdCBvZgordW5wbGFubmVkIGV4cGFuc2lvbiksIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhIGxpdHRsZSBtb3JlIGN1bWJlcnNvbWUKK3RoYW4gb3JpZ2luYWxseS4KKworSnVzdCBsaWtlIHRoZSBjaGFuZ2VzIHRvIElQdjQgdG8gZml4IGltcGVuZGluZyBsaW1pdGF0aW9ucyBpbiB0aGUKK2FkZHJlc3Mgc3BhY2UsIHBlb3BsZSBmaW5kIHdheXMgYXJvdW5kIHRoZSBsaW1pdGF0aW9ucy4gSW4gdGhlIGxvbmcKK3J1biwgaG93ZXZlciwgc29sdXRpb25zIGxpa2UgSVB2NiBvciBkZXZmcyBjYW4ndCBiZSBwdXQgb2ZmIGZvcmV2ZXIuCisKK1JlYWQtb25seSByb290IGZpbGVzeXN0ZW0KKworSGF2aW5nIHlvdXIgZGV2aWNlIG5vZGVzIG9uIHRoZSByb290IGZpbGVzeXN0ZW0gbWVhbnMgdGhhdCB5b3UgY2FuJ3QKK29wZXJhdGUgcHJvcGVybHkgd2l0aCBhIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW0uIFRoaXMgaXMgYmVjYXVzZSB5b3UKK3dhbnQgdG8gY2hhbmdlIG93bmVyc2hpcHMgYW5kIHByb3RlY3Rpb25zIG9mIHR0eSBkZXZpY2VzLiBFeGlzdGluZworcHJhY3RpY2UgcHJldmVudHMgeW91IHVzaW5nIGEgQ0QtUk9NIGFzIHlvdXIgcm9vdCBmaWxlc3lzdGVtIGZvciBhCisqcmVhbCogc3lzdGVtLiBTdXJlLCB5b3UgY2FuIGJvb3Qgb2ZmIGEgQ0QtUk9NLCBidXQgeW91IGNhbid0IGNoYW5nZQordHR5IG93bmVyc2hpcHMsIHNvIGl0J3Mgb25seSBnb29kIGZvciBpbnN0YWxsaW5nLgorCitBbHNvLCB5b3UgY2FuJ3QgdXNlIGEgc2hhcmVkIE5GUyByb290IGZpbGVzeXN0ZW0gZm9yIGEgY2x1c3RlciBvZgorZGlzY2xlc3MgTGludXggbWFjaGluZXMgKGhhdmluZyB0dHkgb3duZXJzaGlwcyBjaGFuZ2VkIG9uIGEgY29tbW9uCisvZGV2IGlzIG5vdCBnb29kKS4gTm9yIGNhbiB5b3UgZW1iZWQgeW91ciByb290IGZpbGVzeXN0ZW0gaW4gYQorUk9NLUZTLgorCitZb3UgY2FuIGdldCBhcm91bmQgdGhpcyBieSBjcmVhdGluZyBhIFJBTURJU0MgYXQgYm9vdCB0aW1lLCBtYWtpbmcKK2FuIGV4dDIgZmlsZXN5c3RlbSBpbiBpdCwgbW91bnRpbmcgaXQgc29tZXdoZXJlIGFuZCBjb3B5aW5nIHRoZQorY29udGVudHMgb2YgL2RldiBpbnRvIGl0LCB0aGVuIHVubW91bnRpbmcgaXQgYW5kIG1vdW50aW5nIGl0IG92ZXIKKy9kZXYuCisKK0EgZGV2ZnMgaXMgYSBjbGVhbmVyIHdheSBvZiBzb2x2aW5nIHRoaXMuCisKK05vbi1Vbml4IHJvb3QgZmlsZXN5c3RlbQorCitOb24tVW5peCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBOVEZTKSBjYW4ndCBiZSB1c2VkIGZvciBhIHJvb3QKK2ZpbGVzeXN0ZW0gYmVjYXVzZSB0aGV5IHZhcmlvdXNseSBkb24ndCBzdXBwb3J0IGNoYXJhY3RlciBhbmQgYmxvY2sKK3NwZWNpYWwgZmlsZXMgb3Igc3ltYm9saWMgbGlua3MuIFlvdSBjYW4ndCBoYXZlIGEgc2VwYXJhdGUgZGlzYy1iYXNlZAorb3IgUkFNRElTQy1iYXNlZCBmaWxlc3lzdGVtIG1vdW50ZWQgb24gL2RldiBiZWNhdXNlIHlvdSBuZWVkIGRldmljZQorbm9kZXMgYmVmb3JlIHlvdSBjYW4gbW91bnQgdGhlc2UuIERldmZzIGNhbiBiZSBtb3VudGVkIHdpdGhvdXQgYW55CitkZXZpY2Ugbm9kZXMuIERldmxpbmtzIHdvbid0IHdvcmsgYmVjYXVzZSBzeW1saW5rcyBhcmVuJ3Qgc3VwcG9ydGVkLgorQW4gYWx0ZXJuYXRpdmUgc29sdXRpb24gaXMgdG8gdXNlIGluaXRyZCB0byBtb3VudCBhIFJBTURJU0MgaW5pdGlhbAorcm9vdCBmaWxlc3lzdGVtICh3aGljaCBpcyBwb3B1bGF0ZWQgd2l0aCBhIG1pbmltYWwgc2V0IG9mIGRldmljZQorbm9kZXMpLCBhbmQgdGhlbiBjb25zdHJ1Y3QgYSBuZXcgL2RldiBpbiBhbm90aGVyIFJBTURJU0MsIGFuZCBmaW5hbGx5Citzd2l0Y2ggdG8geW91ciBub24tVW5peCByb290IGZpbGVzeXN0ZW0uIFRoaXMgcmVxdWlyZXMgY2xldmVyIGJvb3QKK3NjcmlwdHMgYW5kIGEgZnJhZ2lsZSBhbmQgY29uY2VwdHVhbGx5IGNvbXBsZXggYm9vdCBwcm9jZWR1cmUuCisKK0RldmZzIHNvbHZlcyB0aGlzIGluIGEgcm9idXN0IGFuZCBjb25jZXB0dWFsbHkgc2ltcGxlIHdheS4KKworUFRZIHNlY3VyaXR5CisKK0N1cnJlbnQgcHNldWRvLXR0eSAocHR5KSBkZXZpY2VzIGFyZSBvd25lZCBieSByb290IGFuZCByZWFkLXdyaXRhYmxlCitieSBldmVyeW9uZS4gVGhlIHVzZXIgb2YgYSBwdHktcGFpciBjYW5ub3QgY2hhbmdlCitvd25lcnNoaXAvcHJvdGVjdGlvbnMgd2l0aG91dCBiZWluZyBzdWlkLXJvb3QuCisKK1RoaXMgY291bGQgYmUgc29sdmVkIHdpdGggYSBzZWN1cmUgdXNlci1zcGFjZSBkYWVtb24gd2hpY2ggcnVucyBhcworcm9vdCBhbmQgZG9lcyB0aGUgYWN0dWFsIGNyZWF0aW9uIG9mIHB0eS1wYWlycy4gU3VjaCBhIGRhZW1vbiB3b3VsZAorcmVxdWlyZSBtb2RpZmljYXRpb24gdG8gKmV2ZXJ5KiBwcm9ncmFtbWUgdGhhdCB3YW50cyB0byB1c2UgdGhpcyBuZXcKK21lY2hhbmlzbS4gSXQgYWxzbyBzbG93cyBkb3duIGNyZWF0aW9uIG9mIHB0eS1wYWlycy4KKworQW4gYWx0ZXJuYXRpdmUgaXMgdG8gY3JlYXRlIGEgbmV3IG9wZW5fcHR5KCkgc3lzY2FsbCB3aGljaCBkb2VzIG11Y2gKK3RoZSBzYW1lIHRoaW5nIGFzIHRoZSB1c2VyLXNwYWNlIGRhZW1vbi4gT25jZSBhZ2FpbiwgdGhpcyByZXF1aXJlcworbW9kaWZpY2F0aW9ucyB0byBwdHktaGFuZGxpbmcgcHJvZ3JhbW1lcy4KKworVGhlIGRldmZzIHNvbHV0aW9uIGFsbG93cyBhIGRldmljZSBkcml2ZXIgdG8gInRhZyIgY2VydGFpbiBkZXZpY2UKK2ZpbGVzIHNvIHRoYXQgd2hlbiBhbiB1bm9wZW5lZCBkZXZpY2UgaXMgb3BlbmVkLCB0aGUgb3duZXJzaGlwcyBhcmUKK2NoYW5nZWQgdG8gdGhlIGN1cnJlbnQgZXVpZCBhbmQgZWdpZCBvZiB0aGUgb3BlbmluZyBwcm9jZXNzLCBhbmQgdGhlCitwcm90ZWN0aW9ucyBhcmUgY2hhbmdlZCB0byB0aGUgZGVmYXVsdCByZWdpc3RlcmVkIGJ5IHRoZSBkcml2ZXIuIFdoZW4KK3RoZSBkZXZpY2UgaXMgY2xvc2VkIG93bmVyc2hpcCBpcyBzZXQgYmFjayB0byByb290IGFuZCBwcm90ZWN0aW9ucyBhcmUKK3NldCBiYWNrIHRvIHJlYWQtd3JpdGUgZm9yIGV2ZXJ5Ym9keS4gTm8gcHJvZ3JhbW1lIG5lZWQgYmUgY2hhbmdlZC4KK1RoZSBkZXZwdHMgZmlsZXN5c3RlbSBwcm92aWRlcyB0aGlzIGF1dG8tb3duZXJzaGlwIGZlYXR1cmUgZm9yIFVuaXg5OAorcHR5cy4gSXQgZG9lc24ndCBzdXBwb3J0IG9sZC1zdHlsZSBwdHkgZGV2aWNlcywgbm9yIGRvZXMgaXQgaGF2ZSBhbGwKK3RoZSBvdGhlciBmZWF0dXJlcyBvZiBkZXZmcy4KKworSW50ZWxsaWdlbnQgZGV2aWNlIG1hbmFnZW1lbnQKKworRGV2ZnMgaW1wbGVtZW50cyBhIHNpbXBsZSB5ZXQgcG93ZXJmdWwgcHJvdG9jb2wgZm9yIGNvbW11bmljYXRpb24gd2l0aAorYSBkZXZpY2UgbWFuYWdlbWVudCBkYWVtb24gKGRldmZzZCkgd2hpY2ggcnVucyBpbiB1c2VyIHNwYWNlLiBJdCBpcworcG9zc2libGUgdG8gc2VuZCBhIG1lc3NhZ2UgKGVpdGhlciBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5KSB0bworZGV2ZnNkIG9uIGFueSBldmVudCwgc3VjaCBhcyByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gb2YgZGV2aWNlCitlbnRyaWVzLCBvcGVuaW5nIGFuZCBjbG9zaW5nIGRldmljZXMsIGxvb2tpbmcgdXAgaW5vZGVzLCBzY2FubmluZworZGlyZWN0b3JpZXMgYW5kIG1vcmUuIFRoaXMgaGFzIG1hbnkgcG9zc2liaWxpdGllcy4gU29tZSBvZiB0aGVzZSBhcmUKK2FscmVhZHkgaW1wbGVtZW50ZWQuIFNlZToKKworCitodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC8KKworRGV2aWNlIGVudHJ5IHJlZ2lzdHJhdGlvbiBldmVudHMgY2FuIGJlIHVzZWQgYnkgZGV2ZnNkIHRvIGNoYW5nZQorcGVybWlzc2lvbnMgb2YgbmV3bHktY3JlYXRlZCBkZXZpY2Ugbm9kZXMuIFRoaXMgaXMgb25lIG1lY2hhbmlzbSB0bworY29udHJvbCBkZXZpY2UgcGVybWlzc2lvbnMuCisKK0RldmljZSBlbnRyeSByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gZXZlbnRzIGNhbiBiZSB1c2VkIHRvIHJ1bgorcHJvZ3JhbW1lcyBvciBzY3JpcHRzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYXV0b21hdGljIG1vdW50aW5nCitvZiBmaWxlc3lzdGVtcyB3aGVuIGEgbmV3IGJsb2NrIGRldmljZSBtZWRpYSBpcyBpbnNlcnRlZCBpbnRvIHRoZQorZHJpdmUuCisKK0FzeW5jaHJvbm91cyBkZXZpY2Ugb3BlbiBhbmQgY2xvc2UgZXZlbnRzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudAorY2xldmVyIHBlcm1pc3Npb25zIG1hbmFnZW1lbnQuIEZvciBleGFtcGxlLCB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBvbgorL2Rldi9kc3AgZG8gbm90IGFsbG93IGV2ZXJ5Ym9keSB0byByZWFkIGZyb20gdGhlIGRldmljZS4gVGhpcyBpcworc2Vuc2libGUsIGFzIHlvdSBkb24ndCB3YW50IHNvbWUgcmVtb3RlIHVzZXIgcmVjb3JkaW5nIHdoYXQgeW91IHNheSBhdAoreW91ciBjb25zb2xlLiBIb3dldmVyLCB0aGUgY29uc29sZSB1c2VyIGlzIGFsc28gcHJldmVudGVkIGZyb20KK3JlY29yZGluZy4gVGhpcyBiZWhhdmlvdXIgaXMgbm90IGRlc2lyYWJsZS4gV2l0aCBhc3luY2hyb25vdXMgZGV2aWNlCitvcGVuIGFuZCBjbG9zZSBldmVudHMsIHlvdSBjYW4gaGF2ZSBkZXZmc2QgcnVuIGEgcHJvZ3JhbW1lIG9yIHNjcmlwdAord2hlbiBjb25zb2xlIGRldmljZXMgYXJlIG9wZW5lZCB0byBjaGFuZ2UgdGhlIG93bmVyc2hpcHMgZm9yICpvdGhlcioKK2RldmljZSBub2RlcyAoc3VjaCBhcyAvZGV2L2RzcCkuIE9uIGNsb3N1cmUsIHlvdSBjYW4gcnVuIGEgZGlmZmVyZW50CitzY3JpcHQgdG8gcmVzdG9yZSBwZXJtaXNzaW9ucy4gQW4gYWR2YW50YWdlIG9mIHRoaXMgc2NoZW1lIG92ZXIKK21vZGlmeWluZyB0aGUgQyBsaWJyYXJ5IHR0eSBoYW5kbGluZyBpcyB0aGF0IHRoaXMgd29ya3MgZXZlbiBpZiB5b3VyCitwcm9ncmFtbWUgY3Jhc2hlcyAoaG93IG1hbnkgdGltZXMgaGF2ZSB5b3Ugc2VlbiB0aGUgdXRtcCBkYXRhYmFzZSB3aXRoCitsaW5nZXJpbmcgZW50cmllcyBmb3Igbm9uLWV4aXN0ZW50IGxvZ2lucz8pLgorCitTeW5jaHJvbm91cyBkZXZpY2Ugb3BlbiBldmVudHMgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBpbnRlbGxpZ2VudAorZGV2aWNlIGFjY2VzcyBwcm90ZWN0aW9ucy4gQmVmb3JlIHRoZSBkZXZpY2UgZHJpdmVyIG9wZW4oKSBtZXRob2QgaXMKK2NhbGxlZCwgdGhlIGRhZW1vbiBtdXN0IGZpcnN0IHZhbGlkYXRlIHRoZSBvcGVuIGF0dGVtcHQsIGJ5IHJ1bm5pbmcgYW4KK2V4dGVybmFsIHByb2dyYW1tZSBvciBzY3JpcHQuIFRoaXMgaXMgZmFyIG1vcmUgZmxleGlibGUgdGhhbiBhY2Nlc3MKK2NvbnRyb2wgbGlzdHMsIGFzIGFjY2VzcyBjYW4gYmUgZGV0ZXJtaW5lZCBvbiB0aGUgYmFzaXMgb2Ygb3RoZXIKK3N5c3RlbSBjb25kaXRpb25zIGluc3RlYWQgb2YganVzdCB0aGUgVUlEIGFuZCBHSUQuCisKK0lub2RlIGxvb2t1cCBldmVudHMgY2FuIGJlIHVzZWQgdG8gYXV0aGVudGljYXRlIG1vZHVsZSBhdXRvbG9hZAorcmVxdWVzdHMuIEluc3RlYWQgb2YgdXNpbmcga21vZCBkaXJlY3RseSwgdGhlIGV2ZW50IGlzIHNlbnQgdG8KK2RldmZzZCB3aGljaCBjYW4gaW1wbGVtZW50IGFuIGFyYml0cmFyeSBhdXRoZW50aWNhdGlvbiBiZWZvcmUgbG9hZGluZwordGhlIG1vZHVsZSBpdHNlbGYuCisKK0lub2RlIGxvb2t1cCBldmVudHMgY2FuIGFsc28gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYXJiaXRyYXJ5CituYW1lc3BhY2VzLCB3aXRob3V0IGhhdmluZyB0byByZXNvcnQgdG8gcG9wdWxhdGluZyBkZXZmcyB3aXRoIHN5bWxpbmtzCit0byBkZXZpY2VzIHRoYXQgZG9uJ3QgZXhpc3QuCisKK1NwZWN1bGF0aXZlIERldmljZSBTY2FubmluZworCitDb25zaWRlciBhbiBhcHBsaWNhdGlvbiAobGlrZSBjZHBhcmFub2lhKSB0aGF0IHdhbnRzIHRvIGZpbmQgYWxsCitDRC1ST00gZGV2aWNlcyBvbiB0aGUgc3lzdGVtIChTQ1NJLCBJREUgYW5kIG90aGVyIHR5cGVzKSwgd2hldGhlciBvcgorbm90IHRoZWlyIHJlc3BlY3RpdmUgbW9kdWxlcyBhcmUgbG9hZGVkLiBUaGUgYXBwbGljYXRpb24gbXVzdAorc3BlY3VsYXRpdmVseSBvcGVuIGNlcnRhaW4gZGV2aWNlIG5vZGVzIChzdWNoIGFzIC9kZXYvc3IwIGZvciB0aGUgU0NTSQorQ0QtUk9NcykgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBUaGlzIHJlcXVpcmVzCit0aGF0IGFsbCBMaW51eCBkaXN0cmlidXRpb25zIGZvbGxvdyB0aGUgc3RhbmRhcmQgZGV2aWNlIG5hbWluZyBzY2hlbWUKKyhsYXN0IHRpbWUgSSBsb29rZWQgUmVkSGF0IGRpZCB0aGluZ3MgZGlmZmVyZW50bHkpLiBEZXZmcyBzb2x2ZXMgdGhlCituYW1pbmcgcHJvYmxlbS4KKworVGhlIHNhbWUgYXBwbGljYXRpb24gYWxzbyB3YW50cyB0byBzZWUgd2hpY2ggZGV2aWNlcyBhcmUgYWN0dWFsbHkKK2F2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLiBXaXRoIHRoZSBleGlzdGluZyBzeXN0ZW0gaXQgbmVlZHMgdG8gcmVhZCB0aGUKKy9kZXYgZGlyZWN0b3J5IGFuZCBzcGVjdWxhdGl2ZWx5IG9wZW4gZWFjaCAvZGV2L3NyKiBkZXZpY2UgdG8KK2RldGVybWluZSBpZiB0aGUgZGV2aWNlIGV4aXN0cyBvciBub3QuIFdpdGggYSBsYXJnZSAvZGV2IHRoaXMgaXMgYW4KK2luZWZmaWNpZW50IG9wZXJhdGlvbiwgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgbWFueSAvZGV2L3NyKiBub2Rlcy4gQQorc29sdXRpb24gbGlrZSBzY3NpZGV2IGNvdWxkIHJlZHVjZSB0aGUgbnVtYmVyIG9mIC9kZXYvc3IqIGVudHJpZXMgKGJ1dAorb2YgY291cnNlIHRoYXQgYWxzbyByZXF1aXJlcyBhbGwgdGhhdCBpbmVmZmljaWVudCBkaXJlY3Rvcnkgc2Nhbm5pbmcpLgorCitXaXRoIGRldmZzLCB0aGUgYXBwbGljYXRpb24gY2FuIG9wZW4gdGhlIC9kZXYvc3IgZGlyZWN0b3J5Cisod2hpY2ggdHJpZ2dlcnMgdGhlIG1vZHVsZSBhdXRvbG9hZGluZyBpZiByZXF1aXJlZCksIGFuZCBwcm9jZWVkIHRvCityZWFkIC9kZXYvc3IuIFNpbmNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkZXZpY2VzIHdpbGwgaGF2ZQorZW50cmllcywgdGhlcmUgYXJlIG5vIGluZWZmaWNlbmNpZXMgaW4gZGlyZWN0b3J5IHNjYW5uaW5nIG9yIGRldmljZQorb3BlbmluZ3MuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dobyBlbHNlIGRvZXMgaXQ/CisKK0ZyZWVCU0QgaGFzIGEgZGV2ZnMgaW1wbGVtZW50YXRpb24uIFNvbGFyaXMgYW5kIEFJWCBlYWNoIGhhdmUgYQorcHNldWRvLWRldmZzIChzb21ldGhpbmcgYWtpbiB0byBzY3NpZGV2IGJ1dCBmb3IgYWxsIGRldmljZXMsIHdpdGggc29tZQordW5zcGVjaWZpZWQga2VybmVsIHN1cHBvcnQpLiBCZU9TLCBQbGFuOSBhbmQgUU5YIGFsc28gaGF2ZSBpdC4gU0dJJ3MKK0lSSVggNi40IGFuZCBhYm92ZSBhbHNvIGhhdmUgYSBkZXZpY2UgZmlsZXN5c3RlbS4KKworV2hpbGUgd2Ugc2hvdWxkbid0IGp1c3QgYXV0b21hdGljYWxseSBkbyBzb21ldGhpbmcgYmVjYXVzZSBvdGhlcnMgZG8KK2l0LCB3ZSBzaG91bGQgbm90IGlnbm9yZSB0aGUgd29yayBvZiBvdGhlcnMgZWl0aGVyLiBGcmVlQlNEIGhhcyBhIGxvdAorb2YgY29tcGV0ZW50IHBlb3BsZSB3b3JraW5nIG9uIGl0LCBzbyB0aGVpciBvcGluaW9uIHNob3VsZCBub3QgYmUKK2JsaXRoZWx5IGlnbm9yZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworSG93IGl0IHdvcmtzCisKK1JlZ2lzdGVyaW5nIGRldmljZSBlbnRyaWVzCisKK0ZvciBldmVyeSBlbnRyeSAoZGV2aWNlIG5vZGUpIGluIGEgZGV2ZnMtYmFzZWQgL2RldiBhIGRyaXZlciBtdXN0IGNhbGwKK2RldmZzX3JlZ2lzdGVyKCkuIFRoaXMgYWRkcyB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlIGVudHJ5LCB0aGUKK2ZpbGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgcG9pbnRlciBhbmQgYSBmZXcgb3RoZXIgdGhpbmdzIHRvIGFuCitpbnRlcm5hbCB0YWJsZS4gRGV2aWNlIGVudHJpZXMgbWF5IGJlIGFkZGVkIGFuZCByZW1vdmVkIGF0IGFueQordGltZS4gV2hlbiBhIGRldmljZSBlbnRyeSBpcyByZWdpc3RlcmVkLCBpdCBhdXRvbWFnaWNhbGx5IGFwcGVhcnMgaW4KK2FueSBtb3VudGVkIGRldmZzJy4KKworSW5vZGUgbG9va3VwCisKK1doZW4gYSBsb29rdXAgb3BlcmF0aW9uIG9uIGFuIGVudHJ5IGlzIHBlcmZvcm1lZCBhbmQgaWYgdGhlcmUgaXMgbm8KK2RyaXZlciBpbmZvcm1hdGlvbiBmb3IgdGhhdCBlbnRyeSBkZXZmcyB3aWxsIGF0dGVtcHQgdG8gY2FsbAorZGV2ZnNkLiBJZiBzdGlsbCBubyBkcml2ZXIgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIHRoZW4gYSBuZWdhdGl2ZQorZGVudHJ5IGlzIHlpZWxkZWQgYW5kIHRoZSBuZXh0IHN0YWdlIG9wZXJhdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUKK1ZGUyAoc3VjaCBhcyBjcmVhdGUoKSBvciBta25vZCgpIGlub2RlIG1ldGhvZHMpLiBJZiBkcml2ZXIgaW5mb3JtYXRpb24KK2NhbiBiZSBmb3VuZCwgYW4gaW5vZGUgaXMgY3JlYXRlZCAoaWYgb25lIGRvZXMgbm90IGV4aXN0IGFscmVhZHkpIGFuZAorYWxsIGlzIHdlbGwuCisKK01hbnVhbGx5IGNyZWF0aW5nIGRldmljZSBub2RlcworCitUaGUgbWtub2QoKSBtZXRob2QgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW4gb3JkaW5hcnkgbmFtZWQgcGlwZSBpbiB0aGUKK2RldmZzLCBvciB5b3UgY2FuIGNyZWF0ZSBhIGNoYXJhY3RlciBvciBibG9jayBzcGVjaWFsIGlub2RlIGlmIG9uZQorZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gWW91IG1heSB3aXNoIHRvIGNyZWF0ZSBhIGNoYXJhY3RlciBvciBibG9jaworc3BlY2lhbCBpbm9kZSBzbyB0aGF0IHlvdSBjYW4gc2V0IHBlcm1pc3Npb25zIGFuZCBvd25lcnNoaXAuIExhdGVyLCBpZgorYSBkZXZpY2UgZHJpdmVyIHJlZ2lzdGVycyBhbiBlbnRyeSB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZQorcGVybWlzc2lvbnMsIG93bmVyc2hpcCBhbmQgdGltZXMgYXJlIHJldGFpbmVkLiBUaGlzIGlzIGhvdyB5b3UgY2FuIHNldAordGhlIHByb3RlY3Rpb25zIG9uIGEgZGV2aWNlIGV2ZW4gYmVmb3JlIHRoZSBkcml2ZXIgaXMgbG9hZGVkLiBPbmNlIHlvdQorY3JlYXRlIGFuIGlub2RlIGl0IGFwcGVhcnMgaW4gdGhlIGRpcmVjdG9yeSBsaXN0aW5nLgorCitVbnJlZ2lzdGVyaW5nIGRldmljZSBlbnRyaWVzCisKK0EgZGV2aWNlIGRyaXZlciBjYWxscyBkZXZmc191bnJlZ2lzdGVyKCkgdG8gdW5yZWdpc3RlciBhbiBlbnRyeS4KKworQ2hyb290KCkgZ2FvbHMKKworMi4yLngga2VybmVscworCitUaGUgc2VtYW50aWNzIG9mIGlub2RlIGNyZWF0aW9uIGFyZSBkaWZmZXJlbnQgd2hlbiBkZXZmcyBpcyBtb3VudGVkCit3aXRoIHRoZSAiZXhwbGljaXQiIG9wdGlvbi4gTm93LCB3aGVuIGEgZGV2aWNlIGVudHJ5IGlzIHJlZ2lzdGVyZWQsIGl0Cit3aWxsIG5vdCBhcHBlYXIgdW50aWwgeW91IHVzZSBta25vZCgpIHRvIGNyZWF0ZSB0aGUgZGV2aWNlLiBJdCBkb2Vzbid0CittYXR0ZXIgaWYgeW91IG1rbm9kKCkgYmVmb3JlIG9yIGFmdGVyIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoCitkZXZmc19yZWdpc3RlcigpLiBUaGUgcHVycG9zZSBvZiB0aGlzIGJlaGF2aW91ciBpcyB0byBzdXBwb3J0CitjaHJvb3QoMikgZ2FvbHMsIHdoZXJlIHlvdSB3YW50IHRvIG1vdW50IGEgbWluaW1hbCBkZXZmcyBpbnNpZGUgdGhlCitnYW9sLiBPbmx5IHRoZSBkZXZpY2VzIHlvdSBzcGVjaWZpY2FsbHkgd2FudCB0byBiZSBhdmFpbGFibGUgKHRocm91Z2gKK3lvdXIgbWtub2QoKSBzZXR1cCkgd2lsbCBiZSBhY2Nlc3NpYmxlLgorCisyLjQueCBrZXJuZWxzCisKK0FzIG9mIGtlcm5lbCAyLjMuOTksIHRoZSBWRlMgaGFzIGhhZCB0aGUgYWJpbGl0eSB0byByZWJpbmQgcGFydHMgb2YKK3RoZSBnbG9iYWwgZmlsZXN5c3RlbSBuYW1lc3BhY2UgaW50byBhbm90aGVyIHBhcnQgb2YgdGhlIG5hbWVzcGFjZS4KK1RoaXMgbm93IHdvcmtzIGV2ZW4gYXQgdGhlIGxlYWYtbm9kZSBsZXZlbCwgd2hpY2ggbWVhbnMgdGhhdAoraW5kaXZpZHVhbCBmaWxlcyBhbmQgZGV2aWNlIG5vZGVzIG1heSBiZSBib3VuZCBpbnRvIG90aGVyIHBhcnRzIG9mIHRoZQorbmFtZXNwYWNlLiBUaGlzIGlzIGxpa2UgbWFraW5nIGxpbmtzLCBidXQgYmV0dGVyLCBiZWNhdXNlIGl0IHdvcmtzCithY3Jvc3MgZmlsZXN5c3RlbXMgKHVubGlrZSBoYXJkIGxpbmtzKSBhbmQgd29ya3MgdGhyb3VnaCBjaHJvb3QoKQorZ2FvbHMgKHVubGlrZSBzeW1ib2xpYyBsaW5rcykuCisKK0JlY2F1c2Ugb2YgdGhlc2UgaW1wcm92ZW1lbnRzIHRvIHRoZSBWRlMsIHRoZSBtdWx0aS1tb3VudCBjYXBhYmlsaXR5CitpbiBkZXZmcyBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGUgYWRtaW5pc3RyYXRvciBtYXkgY3JlYXRlIGEgbWluaW1hbAorZGV2aWNlIHRyZWUgaW5zaWRlIGEgY2hyb290KDIpIGdhb2wgYnkgdXNpbmcgVkZTIGJpbmRpbmdzLiBBcyB0aGlzCitwcm92aWRlcyBtb3N0IG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgZGV2ZnMgbXVsdGktbW91bnQgY2FwYWJpbGl0eSwgSQorcmVtb3ZlZCB0aGUgbXVsdGktbW91bnQgc3VwcG9ydCBjb2RlIChhZnRlciBpc3N1aW5nIGFuIFJGQykuIFRoaXMKK3lpZWxkZWQgY29kZSBzaXplIHJlZHVjdGlvbnMgYW5kIHNpbXBsaWZpY2F0aW9ucy4KKworSWYgeW91IHdhbnQgdG8gY29uc3RydWN0IGEgbWluaW1hbCBjaHJvb3QoKSBnYW9sLCB0aGUgZm9sbG93aW5nCitjb21tYW5kIHNob3VsZCBzdWZmaWNlOgorCittb3VudCAtLWJpbmQgL2Rldi9udWxsIC9nYW9sL2Rldi9udWxsCisKKworUmVwZWF0IGZvciBvdGhlciBkZXZpY2Ugbm9kZXMgeW91IHdhbnQgdG8gZXhwb3NlLiBTaW1wbGUhCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworT3BlcmF0aW9uYWwgaXNzdWVzCisKKworSW5zdHJ1Y3Rpb25zIGZvciB0aGUgaW1wYXRpZW50CisKK05vYm9keSBsaWtlcyByZWFkaW5nIGRvY3VtZW50YXRpb24uIFBlb3BsZSBqdXN0IHdhbnQgdG8gZ2V0IGluIHRoZXJlCithbmQgcGxheS4gU28gdGhpcyBzZWN0aW9uIHRlbGxzIHlvdSBxdWlja2x5IHRoZSBzdGVwcyB5b3UgbmVlZCB0byB0YWtlCit0byBydW4gd2l0aCBkZXZmcyBtb3VudGVkIG92ZXIgL2Rldi4gU2tpcCB0aGVzZSBzdGVwcyBhbmQgeW91IHdpbGwgZW5kCit1cCB3aXRoIGEgbmVhcmx5IHVuYm9vdGFibGUgc3lzdGVtLiBTdWJzZXF1ZW50IHNlY3Rpb25zIGRlc2NyaWJlIHRoZQoraXNzdWVzIGluIG1vcmUgZGV0YWlsLCBhbmQgZGlzY3VzcyBub24tZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24KK29wdGlvbnMuCisKK0RldmZzZAorT0ssIGlmIHlvdSdyZSByZWFkaW5nIHRoaXMsIEkgYXNzdW1lIHlvdSB3YW50IHRvIHBsYXkgd2l0aAorZGV2ZnMuIEZpcnN0IHlvdSBzaG91bGQgZW5zdXJlIHRoYXQgL3Vzci9zcmMvbGludXggY29udGFpbnMgYQorcmVjZW50IGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhlbiB5b3UgbmVlZCB0byBjb21waWxlIGRldmZzZCwgdGhlIGRldmljZQorbWFuYWdlbWVudCBkYWVtb24sIGF2YWlsYWJsZSBhdAorCitodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC8uCitCZWNhdXNlIHRoZSBrZXJuZWwgaGFzIGEgbmFtaW5nIHNjaGVtZQord2hpY2ggaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBuYW1pbmcgc2NoZW1lLCB5b3UgbmVlZCB0bworaW5zdGFsbCBkZXZmc2Qgc28gdGhhdCBzb2Z0d2FyZSBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHVzZSB0aGUKK29sZCBuYW1pbmcgc2NoZW1lIHdpbGwgbm90IGJyZWFrLgorCitDb21waWxlIGFuZCBpbnN0YWxsIGRldmZzZC4gWW91IHdpbGwgYmUgcHJvdmlkZWQgd2l0aCBhIGRlZmF1bHQKK2NvbmZpZ3VyYXRpb24gZmlsZSAvZXRjL2RldmZzZC5jb25mIHdoaWNoIHdpbGwgcHJvdmlkZQorY29tcGF0aWJpbGl0eSBzeW1saW5rcyBmb3IgdGhlIG9sZCBuYW1pbmcgc2NoZW1lLiBEb24ndCBjaGFuZ2UgdGhpcworY29uZmlnIGZpbGUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLiBFdmVuIGlmIHlvdSB0aGluayB5b3UKK2RvIGtub3cgd2hhdCB5b3UncmUgZG9pbmcsIGRvbid0IGNoYW5nZSBpdCB1bnRpbCB5b3UndmUgZm9sbG93ZWQgYWxsCit0aGUgc3RlcHMgYmVsb3cgYW5kIGJvb3RlZCBhIGRldmZzLWVuYWJsZWQgc3lzdGVtIGFuZCB2ZXJpZmllZCB0aGF0IGl0Cit3b3Jrcy4KKworTm93IGVkaXQgeW91ciBtYWluIHN5c3RlbSBib290IHNjcmlwdCBzbyB0aGF0IGRldmZzZCBpcyBzdGFydGVkIGF0IHRoZQordmVyeSBiZWdpbm5pbmcgKGJlZm9yZSBhbnkgZmlsZXN5c3RlbQorY2hlY2tzKS4gL2V0Yy9yYy5kL3JjLnN5c2luaXQgaXMgb2Z0ZW4gdGhlIG1haW4gYm9vdCBzY3JpcHQKK29uIHN5c3RlbXMgd2l0aCBTeXNWLXN0eWxlIGJvb3Qgc2NyaXB0cy4gT24gc3lzdGVtcyB3aXRoIEJTRC1zdHlsZQorYm9vdCBzY3JpcHRzIGl0IGlzIG9mdGVuIC9ldGMvcmMuIEFsc28gY2hlY2sKKy9zYmluL3JjLgorCitOT1RFIHRoYXQgdGhlIGxpbmUgeW91IHB1dCBpbnRvIHRoZSBib290CitzY3JpcHQgc2hvdWxkIGJlIGV4YWN0bHk6CisKKy9zYmluL2RldmZzZCAvZGV2CisKK0RPIE5PVCB1c2Ugc29tZSBzcGVjaWFsIGRhZW1vbi1sYXVuY2hpbmcKK3Byb2dyYW1tZSwgb3RoZXJ3aXNlIHRoZSBib290IHNjcmlwdCBtYXkgbm90IHdhaXQgZm9yIGRldmZzZCB0byBmaW5pc2gKK2luaXRpYWxpc2luZy4KKworU3lzdGVtIExpYnJhcmllcworVGhlcmUgbWF5IHN0aWxsIGJlIHNvbWUgcHJvYmxlbXMgYmVjYXVzZSBvZiBicm9rZW4gc29mdHdhcmUgbWFraW5nCithc3N1bXB0aW9ucyBhYm91dCBkZXZpY2UgbmFtZXMuIEluIHBhcnRpY3VsYXIsIHNvbWUgc29mdHdhcmUgZG9lcyBub3QKK2hhbmRsZSBkZXZpY2VzIHdoaWNoIGFyZSBzeW1ib2xpYyBsaW5rcy4gSWYgeW91IGFyZSBydW5uaW5nIGEgbGliYyA1CitiYXNlZCBzeXN0ZW0sIGluc3RhbGwgbGliYyA1LjQuNDQgKGlmIHlvdSBoYXZlIGxpYmMgNS40LjQ2LCBnbyBiYWNrIHRvCitsaWJjIDUuNC40NCwgd2hpY2ggaXMgYWN0dWFsbHkgY29ycmVjdCkuIElmIHlvdSBhcmUgcnVubmluZyBhIGdsaWJjCitiYXNlZCBzeXN0ZW0sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBnbGliYyAyLjEuMyBvciBsYXRlci4KKworL2V0Yy9zZWN1cmV0dHkKK1BBTSAoUGx1Z2dhYmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZXMpIGlzIHN1cHBvc2VkIHRvIGJlIGEgZmxleGlibGUKK21lY2hhbmlzbSBmb3IgcHJvdmlkaW5nIGJldHRlciB1c2VyIGF1dGhlbnRpY2F0aW9uIGFuZCBhY2Nlc3MgdG8KK3NlcnZpY2VzLiBVbmZvcnR1bmF0ZWx5LCBpdCdzIGFsc28gZnJhZ2lsZSwgY29tcGxleCBhbmQgdW5kb2N1bWVudGVkCisoY2hlY2sgb3V0IFJlZEhhdCA2LjEsIGFuZCBwcm9iYWJseSBvdGhlciBkaXN0cmlidXRpb25zIGFzIHdlbGwpLiBQQU0KK2hhcyBwcm9ibGVtcyB3aXRoIHN5bWJvbGljIGxpbmtzLiBBcHBlbmQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyCisvZXRjL3NlY3VyZXR0eSBmaWxlOgorCit2Yy8xCit2Yy8yCit2Yy8zCit2Yy80Cit2Yy81Cit2Yy82Cit2Yy83Cit2Yy84CisKK1RoaXMgd2lsbCBub3Qgd2Vha2VuIHNlY3VyaXR5LiBJZiB5b3UgaGF2ZSBhIHZlcnNpb24gb2YgdXRpbC1saW51eAorZWFybGllciB0aGFuIDIuMTAuaCwgcGxlYXNlIHVwZ3JhZGUgdG8gMi4xMC5oIG9yIGxhdGVyLiBJZiB5b3UKK2Fic29sdXRlbHkgY2Fubm90IHVwZ3JhZGUsIHRoZW4gYWxzbyBhcHBlbmQgdGhlIGZvbGxvd2luZyBsaW5lcyB0bworeW91ciAvZXRjL3NlY3VyZXR0eSBmaWxlOgorCisxCisyCiszCis0Cis1Cis2Cis3Cis4CisKK1RoaXMgbWF5IHBvdGVudGlhbGx5IHdlYWtlbiBzZWN1cml0eSBieSBhbGxvd2luZyByb290IGxvZ2lucyBvdmVyIHRoZQorbmV0d29yayAoYSBwYXNzd29yZCBpcyBzdGlsbCByZXF1aXJlZCwgdGhvdWdoKS4gSG93ZXZlciwgc2luY2UgdGhlcmUKK2FyZSBwcm9ibGVtcyB3aXRoIGRlYWxpbmcgd2l0aCBzeW1saW5rcywgSSdtIHN1c3BpY2lvdXMgb2YgdGhlIGxldmVsCitvZiBzZWN1cml0eSBvZmZlcmVkIGluIGFueSBjYXNlLgorCitYRnJlZTg2CitXaGlsZSBub3QgZXNzZW50aWFsLCBpdCdzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIHVwZ3JhZGUgdG8gWEZyZWU4NgorNC4wLCBhcyBwYXRjaGVzIHdlbnQgaW4gdG8gbWFrZSBpdCBtb3JlIGRldmZzLWZyaWVuZGx5LiBJZiB5b3UgZG9uJ3QsCit5b3UnbGwgcHJvYmFibHkgbmVlZCB0byBhcHBseSB0aGUgZm9sbG93aW5nIHBhdGNoIHRvCisvZXRjL3NlY3VyaXR5L2NvbnNvbGUucGVybXMgc28gdGhhdCBvcmRpbmFyeSB1c2VycyBjYW4gcnVuCitzdGFydHguIE5vdGUgdGhhdCBub3QgYWxsIGRpc3RyaWJ1dGlvbnMgaGF2ZSB0aGlzIGZpbGUgKGUuZy4gRGViaWFuKSwKK3NvIGlmIGl0J3Mgbm90IHByZXNlbnQsIGRvbid0IHdvcnJ5IGFib3V0IGl0LgorCistLS0gL2V0Yy9zZWN1cml0eS9jb25zb2xlLnBlcm1zLm9yaWcgICAgU2F0IEFwciAxNyAxNjoyNjo0NyAxOTk5IAorKysrIC9ldGMvc2VjdXJpdHkvY29uc29sZS5wZXJtcyBGcmkgRmViIDI1IDIzOjUzOjU1IDIwMDAgCitAQCAtMTQsNyArMTQsNyBAQCAKKyAjIG1hbiA1IGNvbnNvbGUucGVybXMgCisKKyAjIGZpbGUgY2xhc3NlcyAtLSB0aGVzZSBhcmUgcmVndWxhciBleHByZXNzaW9ucyAKKy08Y29uc29sZT49dHR5WzAtOV1bMC05XSogOlswLTldXC5bMC05XSA6WzAtOV0gCisrPGNvbnNvbGU+PXR0eVswLTldWzAtOV0qIHZjL1swLTldWzAtOV0qIDpbMC05XVwuWzAtOV0gOlswLTldIAorCisgIyBkZXZpY2UgY2xhc3NlcyAtLSB0aGVzZSBhcmUgc2hlbGwtc3R5bGUgZ2xvYnMgCisgPGZsb3BweT49L2Rldi9mZFswLTFdKiAKKworSWYgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5LCB0aGVuIGNoYW5nZSB0aGUgbGluZToKKworPGNvbnNvbGU+PXR0eVswLTldWzAtOV0qIDpbMC05XVwuWzAtOV0gOlswLTldCisKK3dpdGg6CisKKzxjb25zb2xlPj10dHlbMC05XVswLTldKiB2Yy9bMC05XVswLTldKiA6WzAtOV1cLlswLTldIDpbMC05XQorCisKK0Rpc2FibGUgZGV2cHRzCitJJ3ZlIGhhZCBhIHJlcG9ydCBvZiBkZXZwdHMgbW91bnRlZCBvbiAvZGV2L3B0cyBub3Qgd29ya2luZworY29ycmVjdGx5LiBTaW5jZSBkZXZmcyB3aWxsIGFsc28gbWFuYWdlIC9kZXYvcHRzLCB0aGVyZSBpcyBubworbmVlZCB0byBtb3VudCBkZXZwdHMgYXMgd2VsbC4gWW91IHNob3VsZCBlaXRoZXIgZWRpdCB5b3VyCisvZXRjL2ZzdGFiIHNvIGRldnB0cyBpcyBub3QgbW91bnRlZCwgb3IgZGlzYWJsZSBkZXZwdHMgZnJvbQoreW91ciBrZXJuZWwgY29uZmlndXJhdGlvbi4KKworVW5zdXBwb3J0ZWQgZHJpdmVycworTm90IGFsbCBkcml2ZXJzIGhhdmUgZGV2ZnMgc3VwcG9ydC4gSWYgeW91IGRlcGVuZCBvbiBvbmUgb2YgdGhlc2UKK2RyaXZlcnMsIHlvdSB3aWxsIG5lZWQgdG8gY3JlYXRlIGEgc2NyaXB0IG9yIHRhcmZpbGUgdGhhdCB5b3UgY2FuIHVzZQorYXQgYm9vdCB0aW1lIHRvIGNyZWF0ZSBkZXZpY2Ugbm9kZXMgYXMgYXBwcm9wcmlhdGUuIFRoZXJlIGlzIGEKK3NlY3Rpb24gd2hpY2ggZGVzY3JpYmVzIHRoaXMuIEFub3RoZXIKK3NlY3Rpb24gbGlzdHMgdGhlIGRyaXZlcnMgd2hpY2ggaGF2ZQorZGV2ZnMgc3VwcG9ydC4KKworL2Rldi9tb3VzZQorCitNYW55IGRpc3JpYnV0aW9ucyBjb25maWd1cmUgL2Rldi9tb3VzZSB0byBiZSB0aGUgbW91c2UgZGV2aWNlCitmb3IgWEZyZWU4NiBhbmQgR1BNLiBJIGFjdHVhbGx5IHRoaW5rIHRoaXMgaXMgYSBiYWQgaWRlYSwgYmVjYXVzZSBpdAorYWRkcyBhbm90aGVyIGxldmVsIG9mIGluZGlyZWN0aW9uLiBXaGVuIGxvb2tpbmcgYXQgYSBjb25maWcgZmlsZSwgaWYKK3lvdSBzZWUgL2Rldi9tb3VzZSB5b3UncmUgbGVmdCB3b25kZXJpbmcgd2hpY2ggbW91c2UKK2lzIGJlaW5nIHJlZmVycmVkIHRvLiBIZW5jZSBJIHJlY29tbWVuZCBwdXR0aW5nIHRoZSBhY3R1YWwgbW91c2UKK2RldmljZSAoZm9yIGV4YW1wbGUgL2Rldi9wc2F1eCkgaW50byB5b3VyCisvZXRjL1gxMS9YRjg2Q29uZmlnIGZpbGUgKGFuZCBzaW1pbGFybHkgZm9yIHRoZSBHUE0KK2NvbmZpZ3VyYXRpb24gZmlsZSkuCisKK0FsdGVybmF0aXZlbHksIHVzZSB0aGUgc2FtZSB0ZWNobmlxdWUgdXNlZCBmb3IgdW5zdXBwb3J0ZWQgZHJpdmVycworZGVzY3JpYmVkIGFib3ZlLgorCitUaGUgS2VybmVsCitGaW5hbGx5LCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgZGV2ZnMgaXMgY29tcGlsZWQgaW50byB5b3VyIGtlcm5lbC4gU2V0CitDT05GSUdfRVhQRVJJTUVOVEFMPXksIENPTkZJR19ERVZGU19GUz15IGFuZCBDT05GSUdfREVWRlNfTU9VTlQ9eSBieQordXNpbmcgZmF2b3VyaXRlIGNvbmZpZ3VyYXRpb24gdG9vbCAoaS5lLiBtYWtlIGNvbmZpZyBvcgorbWFrZSB4Y29uZmlnKSBhbmQgdGhlbiBtYWtlIGNsZWFuIGFuZCB0aGVuIHJlY29tcGlsZSB5b3VyIGtlcm5lbCBhbmQgCittb2R1bGVzLiBBdCBib290LCBkZXZmcyB3aWxsIGJlIG1vdW50ZWQgb250byAvZGV2LgorCitJZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zIGJvb3RpbmcgKGZvciBleGFtcGxlIGlmIHlvdSBmb3Jnb3QgYQorY29uZmlndXJhdGlvbiBzdGVwKSwgeW91IGNhbiBwYXNzIGRldmZzPW5vbW91bnQgYXQgdGhlIGtlcm5lbAorYm9vdCBjb21tYW5kIGxpbmUuIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBtb3VudGluZyBkZXZmcyBhdAorYm9vdCB0aW1lIG9udG8gL2Rldi4KKworSW4gZ2VuZXJhbCwgYSBrZXJuZWwgYnVpbHQgd2l0aCBDT05GSUdfREVWRlNfRlM9eSBidXQgd2l0aG91dCBtb3VudGluZworZGV2ZnMgb250byAvZGV2IGlzIGNvbXBsZXRlbHkgc2FmZSwgYW5kIHJlcXVpcmVzIG5vCitjb25maWd1cmF0aW9uIGNoYW5nZXMuIE9uZSBleGNlcHRpb24gdG8gdGFrZSBub3RlIG9mIGlzIHdoZW4KK0xBQkVMPSBkaXJlY3RpdmVzIGFyZSB1c2VkIGluIC9ldGMvZnN0YWIuIEluIHRoaXMKK2Nhc2UgeW91IHdpbGwgYmUgdW5hYmxlIHRvIGJvb3QgcHJvcGVybHkuIFRoaXMgaXMgYmVjYXVzZSB0aGUKK21vdW50KDgpIHByb2dyYW1tZSB1c2VzIC9wcm9jL3BhcnRpdGlvbnMgYXMgcGFydCBvZgordGhlIHZvbHVtZSBsYWJlbCBzZWFyY2ggcHJvY2VzcywgYW5kIHRoZSBkZXZpY2UgbmFtZXMgaXQgZmluZHMgYXJlIG5vdAorYXZhaWxhYmxlLCBiZWNhdXNlIHNldHRpbmcgQ09ORklHX0RFVkZTX0ZTPXkgY2hhbmdlcyB0aGUgbmFtZXMgaW4KKy9wcm9jL3BhcnRpdGlvbnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIGRldmZzIGlzIG1vdW50ZWQuCisKK05vdyB5b3UndmUgZmluaXNoZWQgYWxsIHRoZSBzdGVwcyByZXF1aXJlZC4gWW91J3JlIG5vdyByZWFkeSB0byBib290Cit5b3VyIHNoaW55IG5ldyBrZXJuZWwuIEVuam95LgorCitDaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbgorCitPSywgeW91J3ZlIG5vdyBib290ZWQgYSBkZXZmcy1lbmFibGVkIHN5c3RlbSwgYW5kIGV2ZXJ5dGhpbmcgd29ya3MuCitOb3cgeW91IG1heSBmZWVsIGxpa2UgY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24gKGNvbW1vbiB0YXJnZXRzIGFyZQorL2V0Yy9mc3RhYiBhbmQgL2V0Yy9kZXZmc2QuY29uZikuIFNpbmNlIHlvdSBoYXZlIGEKK3N5c3RlbSB0aGF0IHdvcmtzLCBpZiB5b3UgbWFrZSBhbnkgY2hhbmdlcyBhbmQgaXQgZG9lc24ndCB3b3JrLCB5b3UKK25vdyBrbm93IHRoYXQgeW91IG9ubHkgaGF2ZSB0byByZXN0b3JlIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcyB0byB0aGUKK2RlZmF1bHQgYW5kIGl0IHdpbGwgd29yayBhZ2Fpbi4KKworCitQZXJtaXNzaW9ucyBwZXJzaXN0ZW5jZSBhY3Jvc3MgcmVib290cworCitJZiB5b3UgZG9uJ3QgdXNlIG1rbm9kKDIpIHRvIGNyZWF0ZSBhIGRldmljZSBmaWxlLCBub3IgdXNlIGNobW9kKDIpIG9yCitjaG93bigyKSB0byBjaGFuZ2UgdGhlIG93bmVyc2hpcHMvcGVybWlzc2lvbnMsIHRoZSBpbm9kZSBjdGltZSB3aWxsCityZW1haW4gYXQgMCAodGhlIGVwb2NoLCAxMiBhbSwgMS1KQU4tMTk3MCwgR01UKS4gQW55dGhpbmcgd2l0aCBhIGN0aW1lCitsYXRlciB0aGFuIHRoaXMgaGFzIGhhZCBpdCdzIG93bmVyc2hpcC9wZXJtaXNzaW9ucyBjaGFuZ2VkLiBIZW5jZSwgYQorc2ltcGxlIHNjcmlwdCBvciBwcm9ncmFtbWUgbWF5IGJlIHVzZWQgdG8gdGFyIHVwIGFsbCBjaGFuZ2VkIGlub2RlcywKK3ByaW9yIHRvIHNodXRkb3duLiBBbHRob3VnaCBlZmZlY3RpdmUsIG1hbnkgY29uc2lkZXIgdGhpcyBhcHByb2FjaCBhCitrbHVkZ2UuCisKK0EgbXVjaCBiZXR0ZXIgYXBwcm9hY2ggaXMgdG8gdXNlIGRldmZzZCB0byBzYXZlIGFuZCByZXN0b3JlCitwZXJtaXNzaW9ucy4gSXQgbWF5IGJlIGNvbmZpZ3VyZWQgdG8gcmVjb3JkIGNoYW5nZXMgaW4gcGVybWlzc2lvbnMgYW5kCit3aWxsIHNhdmUgdGhlbSBpbiBhIGRhdGFiYXNlIChpbiBmYWN0IGEgZGlyZWN0b3J5IHRyZWUpLCBhbmQgcmVzdG9yZQordGhlc2UgdXBvbiBib290LiBUaGlzIGlzIGFuIGVmZmljaWVudCBtZXRob2QgYW5kIHJlc3VsdHMgaW4gaW1tZWRpYXRlCitzYXZpbmcgb2YgY3VycmVudCBwZXJtaXNzaW9ucyAodW5saWtlIHRoZSB0YXIgYXBwcm9hY2gsIHdoaWNoIHNhdmVzCitwZXJtaXNzaW9ucyBhdCBzb21lIHVuc3BlY2lmaWVkIGZ1dHVyZSB0aW1lKS4KKworVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlIHN1cHBsaWVkIHdpdGggZGV2ZnNkIGhhcyBjb25maWcgZW50cmllcword2hpY2ggeW91IG1heSB1bmNvbW1lbnQgdG8gZW5hYmxlIHBlcnNpc3RlbmNlIG1hbmFnZW1lbnQuCisKK0lmIHlvdSBkZWNpZGUgdG8gdXNlIHRoZSB0YXIgYXBwcm9hY2ggYW55d2F5LCBiZSBhd2FyZSB0aGF0IHRhciB3aWxsCitmaXJzdCB1bmxpbmsoMikgYW4gaW5vZGUgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGRldmljZSBub2RlLiBUaGUKK3VubGluaygyKSBoYXMgdGhlIGVmZmVjdCBvZiBicmVha2luZyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGEgZGV2ZnMKK2VudHJ5IGFuZCB0aGUgZGV2aWNlIGRyaXZlci4gSWYgeW91IHVzZSB0aGUgImRldmZzPW9ubHkiIGJvb3Qgb3B0aW9uLAoreW91IGxvc2UgYWNjZXNzIHRvIHRoZSBkZXZpY2UgZHJpdmVyLCByZXF1aXJpbmcgeW91IHRvIHJlbG9hZCB0aGUKK21vZHVsZS4gSSBjb25zaWRlciB0aGlzIGEgYnVnIGluIHRhciAodGhlcmUgaXMgbm8gcmVhbCBuZWVkIHRvCit1bmxpbmsoMikgdGhlIGlub2RlIGZpcnN0KS4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgZGV2ZnNkIHRvIHByb3ZpZGUgbW9yZSBzb3BoaXN0aWNhdGVkCittYW5hZ2VtZW50IG9mIGRldmljZSBwZXJtaXNzaW9ucy4gWW91IGNhbiB1c2UgZGV2ZnNkIHRvIHN0b3JlCitwZXJtaXNzaW9ucyBmb3Igd2hvbGUgZ3JvdXBzIG9mIGRldmljZXMgd2l0aCBhIHNpbmdsZSBjb25maWd1cmF0aW9uCitlbnRyeSwgcmF0aGVyIHRoYW4gdGhlIGNvbnZlbnRpb25hbCBzaW5nbGUgZW50cnkgcGVyIGRldmljZSBlbnRyeS4KKworUGVybWlzc2lvbnMgZGF0YWJhc2Ugc3RvcmVkIGluIG1vdW50ZWQtb3ZlciAvZGV2CisKK0lmIHlvdSB3aXNoIHRvIHNhdmUgYW5kIHJlc3RvcmUgeW91ciBkZXZpY2UgcGVybWlzc2lvbnMgaW50byB0aGUKK2Rpc2MtYmFzZWQgL2RldiB3aGlsZSBzdGlsbCBtb3VudGluZyBkZXZmcyBvbnRvIC9kZXYKK3lvdSBtYXkgZG8gc28uIFRoaXMgcmVxdWlyZXMgYSAyLjQueCBrZXJuZWwgKGluIGZhY3QsIDIuMy45OSBvcgorbGF0ZXIpLCB3aGljaCBoYXMgdGhlIFZGUyBiaW5kaW5nIGZhY2lsaXR5LiBZb3UgbmVlZCB0byBkbyB0aGUKK2ZvbGxvd2luZyB0byBzZXQgdGhpcyB1cDoKKworCisKK21ha2Ugc3VyZSB0aGUga2VybmVsIGRvZXMgbm90IG1vdW50IGRldmZzIGF0IGJvb3QgdGltZQorCisKK21ha2Ugc3VyZSB5b3UgaGF2ZSBhIGNvcnJlY3QgL2Rldi9jb25zb2xlIGVudHJ5IGluIHlvdXIKK3Jvb3QgZmlsZS1zeXN0ZW0gKHdoZXJlIHlvdXIgZGlzYy1iYXNlZCAvZGV2IGxpdmVzKQorCitjcmVhdGUgdGhlIC9kZXYtc3RhdGUgZGlyZWN0b3J5CisKKworYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgbmVhciB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgeW91ciBib290CitzY3JpcHRzOgorCittb3VudCAtLWJpbmQgL2RldiAvZGV2LXN0YXRlCittb3VudCAtdCBkZXZmcyBub25lIC9kZXYKK2RldmZzZCAvZGV2CisKKworCisKK2FkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIgL2V0Yy9kZXZmc2QuY29uZiBmaWxlOgorCitSRUdJU1RFUglecHRbc3ldCQlJR05PUkUKK0NSRUFURQkJXnB0W3N5XQkJSUdOT1JFCitDSEFOR0UJCV5wdFtzeV0JCUlHTk9SRQorREVMRVRFCQlecHRbc3ldCQlJR05PUkUKK1JFR0lTVEVSCS4qCQlDT1BZCS9kZXYtc3RhdGUvJGRldm5hbWUgJGRldnBhdGgKK0NSRUFURQkJLioJCUNPUFkJJGRldnBhdGggL2Rldi1zdGF0ZS8kZGV2bmFtZQorQ0hBTkdFCQkuKgkJQ09QWQkkZGV2cGF0aCAvZGV2LXN0YXRlLyRkZXZuYW1lCitERUxFVEUJCS4qCQlDRlVOQ1RJT04gR0xPQkFMIHVubGluayAvZGV2LXN0YXRlLyRkZXZuYW1lCitSRVNUT1JFCQkvZGV2LXN0YXRlCisKK05vdGUgdGhhdCB0aGUgc2FtcGxlIGRldmZzZC5jb25mIGZpbGUgY29udGFpbnMgdGhlc2UgbGluZXMsCithcyB3ZWxsIGFzIG90aGVyIHNhbXBsZSBjb25maWd1cmF0aW9ucyB5b3UgbWF5IGZpbmQgdXNlZnVsLiBTZWUgdGhlCitkZXZmc2QgZGlzdHJpYnV0aW9uCisKKworcmVib290LgorCisKKworCitQZXJtaXNzaW9ucyBkYXRhYmFzZSBzdG9yZWQgaW4gbm9ybWFsIGRpcmVjdG9yeQorCitJZiB5b3UgYXJlIHVzaW5nIGFuIG9sZGVyIGtlcm5lbCB3aGljaCBkb2Vzbid0IHN1cHBvcnQgVkZTIGJpbmRpbmcsCit0aGVuIHlvdSB3b24ndCBiZSBhYmxlIHRvIGhhdmUgdGhlIHBlcm1pc3Npb25zIGRhdGFiYXNlIGluIGEKK21vdW50ZWQtb3ZlciAvZGV2LiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIHVzZSBhIHJlZ3VsYXIKK2RpcmVjdG9yeSB0byBzdG9yZSB0aGUgZGF0YWJhc2UuIFRoZSBzYW1wbGUgL2V0Yy9kZXZmc2QuY29uZgorZmlsZSBhYm92ZSBtYXkgc3RpbGwgYmUgdXNlZC4gWW91IHdpbGwgbmVlZCB0byBjcmVhdGUgdGhlCisvZGV2LXN0YXRlIGRpcmVjdG9yeSBwcmlvciB0byBpbnN0YWxsaW5nIGRldmZzZC4gSWYgeW91IGhhdmUKK29sZCBwZXJtaXNzaW9ucyBpbiAvZGV2LCB0aGVuIGp1c3QgY29weSAob3IgbW92ZSkgdGhlIGRldmljZQorbm9kZXMgb3ZlciB0byB0aGUgbmV3IGRpcmVjdG9yeS4KKworV2hpY2ggbWV0aG9kIGlzIGJldHRlcj8KKworVGhlIGJlc3QgbWV0aG9kIGlzIHRvIGhhdmUgdGhlIHBlcm1pc3Npb25zIGRhdGFiYXNlIHN0b3JlZCBpbiB0aGUKK21vdW50ZWQtb3ZlciAvZGV2LiBUaGlzIGlzIGJlY2F1c2UgeW91IHdpbGwgbm90IG5lZWQgdG8gY29weQorZGV2aWNlIG5vZGVzIG92ZXIgdG8gL2Rldi1zdGF0ZSwgYW5kIGJlY2F1c2UgaXQgYWxsb3dzIHlvdSB0bworc3dpdGNoIGJldHdlZW4gZGV2ZnMgYW5kIG5vbi1kZXZmcyBrZXJuZWxzLCB3aXRob3V0IHJlcXVpcmluZyB5b3UgdG8KK2NvcHkgcGVybWlzc2lvbnMgYmV0d2VlbiAvZGV2LXN0YXRlIChmb3IgZGV2ZnMpIGFuZAorL2RldiAoZm9yIG5vbi1kZXZmcykuCisKKworRGVhbGluZyB3aXRoIGRyaXZlcnMgd2l0aG91dCBkZXZmcyBzdXBwb3J0CisKK0N1cnJlbnRseSwgbm90IGFsbCBkZXZpY2UgZHJpdmVycyBpbiB0aGUga2VybmVsIGhhdmUgYmVlbiBtb2RpZmllZCB0bwordXNlIGRldmZzLiBEZXZpY2UgZHJpdmVycyB3aGljaCBkbyBub3QgeWV0IGhhdmUgZGV2ZnMgc3VwcG9ydCB3aWxsIG5vdAorYXV0b21hZ2ljYWxseSBhcHBlYXIgaW4gZGV2ZnMuIFRoZSBzaW1wbGVzdCB3YXkgdG8gY3JlYXRlIGRldmljZSBub2RlcworZm9yIHRoZXNlIGRyaXZlcnMgaXMgdG8gdW5wYWNrIGEgdGFyZmlsZSBjb250YWluaW5nIHRoZSByZXF1aXJlZAorZGV2aWNlIG5vZGVzLiBZb3UgY2FuIGRvIHRoaXMgaW4geW91ciBib290IHNjcmlwdHMuIEFsbCB5b3VyIGRyaXZlcnMKK3dpbGwgbm93IHdvcmsgYXMgYmVmb3JlLgorCitIb3BlZnVsbHkgZm9yIG1vc3QgcGVvcGxlIGRldmZzIHdpbGwgaGF2ZSBlbm91Z2ggc3VwcG9ydCBzbyB0aGF0IHRoZXkKK2NhbiBtb3VudCBkZXZmcyBkaXJlY3RseSBvdmVyIC9kZXYgd2l0aG91dCBsb3NpbmcgbW9zdCBmdW5jdGlvbmFsaXR5CisoaS5lLiBsb3NpbmcgYWNjZXNzIHRvIHZhcmlvdXMgZGV2aWNlcykuIEFzIG9mIDIyLUpBTi0xOTk4IChkZXZmcworcGF0Y2ggdmVyc2lvbiAxMCkgSSBhbSBub3cgcnVubmluZyB0aGlzIHdheS4gQWxsIHRoZSBkZXZpY2VzIEkgaGF2ZQorYXJlIGF2YWlsYWJsZSBpbiBkZXZmcywgc28gSSBkb24ndCBsb3NlIGFueXRoaW5nLgorCitXQVJOSU5HOiBpZiB5b3VyIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgdGhlIG9sZC1zdHlsZSBkZXZpY2UgbmFtZXMKKyhpLmUuIC9kZXYvaGRhMSBvciAvZGV2L3NkYTEpLCB5b3UgbXVzdCBpbnN0YWxsIGRldmZzZCBhbmQgY29uZmlndXJlCitpdCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IGVudHJpZXMuIEl0IGlzIGFsbW9zdCBjZXJ0YWluIHRoYXQgeW91Cit3aWxsIHJlcXVpcmUgdGhpcy4gTm90ZSB0aGF0IHRoZSBrZXJuZWwgY3JlYXRlcyBhIGNvbXBhdGliaWxpdHkgZW50cnkKK2ZvciB0aGUgcm9vdCBkZXZpY2UsIHNvIHlvdSBkb24ndCBuZWVkIGluaXRyZC4KKworTm90ZSB0aGF0IHlvdSBubyBsb25nZXIgbmVlZCB0byBtb3VudCBkZXZwdHMgaWYgeW91IHVzZSBVbml4OTggUFRZcywKK2FzIGRldmZzIGNhbiBtYW5hZ2UgL2Rldi9wdHMgaXRzZWxmLiBUaGlzIHNhdmVzIHlvdSBzb21lIFJBTSwgYXMgeW91Citkb24ndCBuZWVkIHRvIGNvbXBpbGUgYW5kIGluc3RhbGwgZGV2cHRzLiBOb3RlIHRoYXQgc29tZSB2ZXJzaW9ucyBvZgorZ2xpYmMgaGF2ZSBhIGJ1ZyB3aXRoIFVuaXg5OCBwdHkgaGFuZGxpbmcgb24gZGV2ZnMgc3lzdGVtcy4gQ29udGFjdAordGhlIGdsaWJjIG1haW50YWluZXJzIGZvciBhIGZpeC4gR2xpYmMgMi4xLjMgaGFzIHRoZSBmaXguCisKK05vdGUgYWxzbyB0aGF0IGFwYXJ0IGZyb20gZWRpdGluZyAvZXRjL2ZzdGFiLCBvdGhlciB0aGluZ3Mgd2lsbCBuZWVkCit0byBiZSBjaGFuZ2VkIGlmIHlvdSAqZG9uJ3QqIGluc3RhbGwgZGV2ZnNkLiBTb21lIHNvZnR3YXJlIChsaWtlIHRoZSBYCitzZXJ2ZXIpIGhhcmQtd2lyZSBkZXZpY2UgbmFtZXMgaW4gdGhlaXIgc291cmNlLiBJdCByZWFsbHkgaXMgbXVjaAorZWFzaWVyIHRvIGluc3RhbGwgZGV2ZnNkIHNvIHRoYXQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGFyZSBjcmVhdGVkLgorWW91IGNhbiB0aGVuIHNsb3dseSBtaWdyYXRlIHlvdXIgc3lzdGVtIHRvIHVzaW5nIHRoZSBuZXcgZGV2aWNlIG5hbWVzCisoZm9yIGV4YW1wbGUsIGJ5IHN0YXJ0aW5nIHdpdGggL2V0Yy9mc3RhYiksIGFuZCB0aGVuIGxpbWl0aW5nIHRoZQorY29tcGF0aWJpbGl0eSBlbnRyaWVzIHRoYXQgZGV2ZnNkIGNyZWF0ZXMuCisKK0lGIFlPVSBDT05GSUdVUkUgVE8gTU9VTlQgREVWRlMgQVQgQk9PVCwgTUFLRSBTVVJFIFlPVSBJTlNUQUxMIERFVkZTRAorQkVGT1JFIFlPVSBCT09UIEEgREVWRlMtRU5BQkxFRCBLRVJORUwhCisKK05vdyB0aGF0IGRldmZzIGhhcyBnb25lIGludG8gdGhlIDIuMy40NiBrZXJuZWwsIEknbSBnZXR0aW5nIGEgbG90IG9mCityZXBvcnRzIGJhY2suIE1hbnkgb2YgdGhlc2UgYXJlIGJlY2F1c2UgcGVvcGxlIGFyZSB0cnlpbmcgdG8gcnVuCit3aXRob3V0IGRldmZzZCwgYW5kIGhlbmNlIHNvbWUgdGhpbmdzIGJyZWFrLiBQbGVhc2UganVzdCBydW4gZGV2ZnNkIGlmCit0aGluZ3MgYnJlYWsuIEkgd2FudCB0byBjb25jZW50cmF0ZSBvbiByZWFsIGJ1Z3MgcmF0aGVyIHRoYW4KK21pc2NvbmZpZ3VyYXRpb24gcHJvYmxlbXMgYXQgdGhlIG1vbWVudC4gSWYgcGVvcGxlIGFyZSB3aWxsaW5nIHRvIGZpeAorYnVncy9mYWxzZSBhc3N1bXB0aW9ucyBpbiBvdGhlciBjb2RlIChpLmUuIGdsaWJjLCBYIHNlcnZlcikgYW5kIHN1Ym1pdAordGhhdCB0byB0aGUgcmVzcGVjdGl2ZSBtYWludGFpbmVycywgdGhhdCB3b3VsZCBiZSBncmVhdC4KKworCitBbGwgdGhlIHdheSB3aXRoIERldmZzCisKK1RoZSBkZXZmcyBrZXJuZWwgcGF0Y2ggY3JlYXRlcyBhIHJhdGlvbmFsaXNlZCBkZXZpY2UgdHJlZS4gQXMgc3RhdGVkCithYm92ZSwgaWYgeW91IHdhbnQgdG8ga2VlcCB1c2luZyB0aGUgb2xkIC9kZXYgbmFtaW5nIHNjaGVtZSwKK3lvdSBqdXN0IG5lZWQgdG8gY29uZmlndXJlIGRldmZzZCBhcHBvcHJpYXRlbHkgKHNlZSB0aGUgbWFuCitwYWdlKS4gUGVvcGxlIHdobyBwcmVmZXIgdGhlIG9sZCBuYW1lcyBjYW4gaWdub3JlIHRoaXMgc2VjdGlvbi4gRm9yCit0aG9zZSBvZiB1cyB3aG8gbGlrZSB0aGUgcmF0aW9uYWxpc2VkIG5hbWVzIGFuZCBhbiB1bmNsdXR0ZXJlZAorL2RldiwgcmVhZCBvbi4KKworSWYgeW91IGRvbid0IHJ1biBkZXZmc2QsIG9yIGRvbid0IGVuYWJsZSBjb21wYXRpYmlsaXR5IGVudHJ5CittYW5hZ2VtZW50LCB0aGVuIHlvdSB3aWxsIGhhdmUgdG8gY29uZmlndXJlIHlvdXIgc3lzdGVtIHRvIHVzZSB0aGUgbmV3CituYW1lcy4gRm9yIGV4YW1wbGUsIHlvdSB3aWxsIHRoZW4gbmVlZCB0byBlZGl0IHlvdXIKKy9ldGMvZnN0YWIgdG8gdXNlIHRoZSBuZXcgZGlzYyBuYW1pbmcgc2NoZW1lLiBJZiB5b3Ugd2FudCB0bworYmUgYWJsZSB0byBib290IG5vbi1kZXZmcyBrZXJuZWxzLCB5b3Ugd2lsbCBuZWVkIGNvbXBhdGliaWxpdHkKK3N5bWxpbmtzIGluIHRoZSB1bmRlcmx5aW5nIGRpc2MtYmFzZWQgL2RldiBwb2ludGluZyBiYWNrIHRvCit0aGUgb2xkLXN0eWxlIG5hbWVzIGZvciB3aGVuIHlvdSBib290IGEga2VybmVsIHdpdGhvdXQgZGV2ZnMuCisKK1lvdSBjYW4gc2VsZWN0aXZlbHkgZGVjaWRlIHdoaWNoIGRldmljZXMgeW91IHdhbnQgY29tcGF0aWJpbGl0eQorZW50cmllcyBmb3IuIEZvciBleGFtcGxlLCB5b3UgbWF5IG9ubHkgd2FudCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yCitCU0QgcHNldWRvLXRlcm1pbmFsIGRldmljZXMgKG90aGVyd2lzZSB5b3UnbGwgaGF2ZSB0byBwYXRjaCB5b3UgQworbGlicmFyeSBvciB1c2UgVW5peDk4IHB0eXMgaW5zdGVhZCkuIEl0J3MganVzdCBhIG1hdHRlciBvZiBwdXR0aW5nIGluCit0aGUgY29ycmVjdCByZWd1bGFyIGV4cHJlc3Npb24gaW50byAvZGV2L2RldmZzZC5jb25mLgorCitUaGVyZSBhcmUgb3RoZXIgY2hvaWNlcyBvZiBuYW1pbmcgc2NoZW1lcyB0aGF0IHlvdSBtYXkgcHJlZmVyLiBGb3IKK2V4YW1wbGUsIEkgZG9uJ3QgdXNlIHRoZSBrZXJuZWwtc3VwcGxpZWQKK25hbWVzLCBiZWNhdXNlIHRoZXkgYXJlIHRvbyB2ZXJib3NlLiBBIGNvbW1vbiBtaXNjb25jZXB0aW9uIGlzCit0aGF0IHRoZSBrZXJuZWwtc3VwcGxpZWQgbmFtZXMgYXJlIG1lYW50IHRvIGJlIHVzZWQgZGlyZWN0bHkgaW4KK2NvbmZpZ3VyYXRpb24gZmlsZXMuIFRoaXMgaXMgbm90IHRoZSBjYXNlLiBUaGV5IGFyZSBkZXNpZ25lZCB0bworcmVmbGVjdCB0aGUgbGF5b3V0IG9mIHRoZSBkZXZpY2VzIGF0dGFjaGVkIGFuZCB0byBwcm92aWRlIGVhc3kKK2NsYXNzaWZpY2F0aW9uLgorCitJZiB5b3UgbGlrZSB0aGUga2VybmVsLXN1cHBsaWVkIG5hbWVzLCB0aGF0J3MgZmluZS4gSWYgeW91IGRvbid0IHRoZW4KK3lvdSBzaG91bGQgYmUgdXNpbmcgZGV2ZnNkIHRvIGNvbnN0cnVjdCBhIG5hbWVzcGFjZSBtb3JlIHRvIHlvdXIKK2xpa2luZy4gRGV2ZnNkIGhhcyBidWlsdC1pbiBjb2RlIHRvIGNvbnN0cnVjdCBhCituYW1lc3BhY2UgdGhhdCBpcyBib3RoIGxvZ2ljYWwgYW5kIGVhc3kgdG8KK21hbmFnZS4gSW4gZXNzZW5jZSwgaXQgY3JlYXRlcyBhIGNvbnZlbmllbnQgYWJicmV2aWF0aW9uIG9mIHRoZQora2VybmVsLXN1cHBsaWVkIG5hbWVzcGFjZS4KKworWW91IGFyZSBvZiBjb3Vyc2UgZnJlZSB0byBidWlsZCB5b3VyIG93biBuYW1lc3BhY2UuIERldmZzZCBoYXMgYWxsIHRoZQoraW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIGVhc3kgZm9yIHlvdS4gQWxsIHlvdSBuZWVkIGRvIGlzCit3cml0ZSBhIHNjcmlwdC4gWW91IGNhbiBldmVuIHdyaXRlIHNvbWUgQyBjb2RlIGFuZCBkZXZmc2QgY2FuIGxvYWQgdGhlCitzaGFyZWQgb2JqZWN0IGFzIGEgY2FsbGFibGUgZXh0ZW5zaW9uLgorCisKK090aGVyIElzc3VlcworCitUaGUgaW5pdCBwcm9ncmFtbWUKK0Fub3RoZXIgdGhpbmcgdG8gdGFrZSBub3RlIG9mIGlzIHdoZXRoZXIgeW91ciBpbml0IHByb2dyYW1tZQorY3JlYXRlcyBhIFVuaXggc29ja2V0IC9kZXYvdGVsaW5pdC4gU29tZSB2ZXJzaW9ucyBvZiBpbml0CitjcmVhdGUgL2Rldi90ZWxpbml0IHNvIHRoYXQgdGhlIHRlbGluaXQgcHJvZ3JhbW1lIGNhbgorY29tbXVuaWNhdGUgd2l0aCB0aGUgaW5pdCBwcm9jZXNzLiBJZiB5b3UgaGF2ZSBzdWNoIGEgc3lzdGVtIHlvdSBuZWVkCit0byBtYWtlIHN1cmUgdGhhdCBkZXZmcyBpcyBtb3VudGVkIG92ZXIgL2RldiAqYmVmb3JlKiBpbml0CitzdGFydHMuIEluIG90aGVyIHdvcmRzLCB5b3UgY2FuJ3QgbGVhdmUgdGhlIG1vdW50aW5nIG9mIGRldmZzIHRvCisvZXRjL3JjLCBzaW5jZSB0aGlzIGlzIGV4ZWN1dGVkIGFmdGVyIGluaXQuIE90aGVyCit2ZXJzaW9ucyBvZiBpbml0IHJlcXVpcmUgYSBuYW1lZCBwaXBlIC9kZXYvaW5pdGN0bAord2hpY2ggbXVzdCBleGlzdCAqYmVmb3JlKiBpbml0IHN0YXJ0cy4gT25jZSBhZ2FpbiwgeW91IG5lZWQgdG8KK21vdW50IGRldmZzIGFuZCB0aGVuIGNyZWF0ZSB0aGUgbmFtZWQgcGlwZSAqYmVmb3JlKiBpbml0CitzdGFydHMuCisKK1RoZSBkZWZhdWx0IGJlaGF2aW91ciBub3cgaXMgbm90IHRvIG1vdW50IGRldmZzIG9udG8gL2RldiBhdAorYm9vdCB0aW1lIGZvciAyLjMueCBhbmQgbGF0ZXIga2VybmVscy4gWW91IGNhbiBjb3JyZWN0IHRoaXMgd2l0aCB0aGUKKyJkZXZmcz1tb3VudCIgYm9vdCBvcHRpb24uIFRoaXMgc29sdmVzIGFueSBwcm9ibGVtcyB3aXRoIGluaXQsCithbmQgYWxzbyBwcmV2ZW50cyB0aGUgZHJlYWRlZDoKKworQ2Fubm90IG9wZW4gaW5pdGlhbCBjb25zb2xlCisKK21lc3NhZ2UuIEZvciAyLjIueCBrZXJuZWxzIHdoZXJlIHlvdSBuZWVkIHRvIGFwcGx5IHRoZSBkZXZmcyBwYXRjaCwKK3RoZSBkZWZhdWx0IGlzIHRvIG1vdW50LgorCitJZiB5b3UgaGF2ZSBhdXRvbWF0aWMgbW91bnRpbmcgb2YgZGV2ZnMgb250byAvZGV2IHRoZW4geW91CittYXkgbmVlZCB0byBjcmVhdGUgL2Rldi9pbml0Y3RsIGluIHlvdXIgYm9vdCBzY3JpcHRzLiBUaGUKK2ZvbGxvd2luZyBsaW5lcyBzaG91bGQgc3VmZmljZToKKworbWtub2QgL2Rldi9pbml0Y3RsIHAKK2tpbGwgLVNJR1VTUjEgMSAgICAgICAjIHRlbGwgaW5pdCB0aGF0IC9kZXYvaW5pdGN0bCBub3cgZXhpc3RzCisKK0FsdGVybmF0aXZlbHksIGlmIHlvdSBkb24ndCB3YW50IHRoZSBrZXJuZWwgdG8gbW91bnQgZGV2ZnMgb250bworL2RldiB0aGVuIHlvdSBjb3VsZCB1c2UgdGhlIGZvbGxvd2luZyBwcm9jZWR1cmUgaXMgYQorZ3VpZGVsaW5lIGZvciBob3cgdG8gZ2V0IGFyb3VuZCAvZGV2L2luaXRjdGwgcHJvYmxlbXM6CisKKyMgY2QgL3NiaW4KKyMgbXYgaW5pdCBpbml0LnJlYWwKKyMgY2F0ID4gaW5pdAorIyEgL2Jpbi9zaAorbW91bnQgLW4gLXQgZGV2ZnMgbm9uZSAvZGV2Citta25vZCAvZGV2L2luaXRjdGwgcAorZXhlYyAvc2Jpbi9pbml0LnJlYWwgJCoKK1tjb250cm9sLURdCisjIGNobW9kIGEreCBpbml0CisKK05vdGUgdGhhdCBuZXdlciB2ZXJzaW9ucyBvZiBpbml0IGNyZWF0ZSAvZGV2L2luaXRjdGwKK2F1dG9tYXRpY2FsbHksIHNvIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCisKK01vZHVsZSBhdXRvbG9hZGluZworWW91IHdpbGwgbmVlZCB0byBjb25maWd1cmUgZGV2ZnNkIHRvIGVuYWJsZSBtb2R1bGUKK2F1dG9sb2FkaW5nLiBUaGUgZm9sbG93aW5nIGxpbmVzIHNob3VsZCBiZSBwbGFjZWQgaW4geW91cgorL2V0Yy9kZXZmc2QuY29uZiBmaWxlOgorCitMT09LVVAJLioJCU1PRExPQUQKKworCitBcyBvZiBkZXZmc2QtdjEuMy4xMCwgYSBnZW5lcmljIC9ldGMvbW9kdWxlcy5kZXZmcworY29uZmlndXJhdGlvbiBmaWxlIGlzIGluc3RhbGxlZCwgd2hpY2ggaXMgdXNlZCBieSB0aGUgTU9ETE9BRAorYWN0aW9uLiBUaGlzIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBtb3N0IGNvbmZpZ3VyYXRpb25zLiBJZiB5b3UKK3JlcXVpcmUgZnVydGhlciBjb25maWd1cmF0aW9uLCBlZGl0IHlvdXIgL2V0Yy9tb2R1bGVzLmNvbmYKK2ZpbGUuIFRoZSB3YXkgbW9kdWxlIGF1dG9sb2FkaW5nIHdvcmsgd2l0aCBkZXZmcyBpczoKKworCithIHByb2Nlc3MgYXR0ZW1wdHMgdG8gbG9va3VwIGEgZGV2aWNlIG5vZGUgKGUuZy4gL2Rldi9mcmVkKQorCisKK2lmIHRoYXQgZGV2aWNlIG5vZGUgZG9lcyBub3QgZXhpc3QsIHRoZSBmdWxsIHBhdGhuYW1lIGlzIHBhc3NlZCB0bworZGV2ZnNkIGFzIGEgc3RyaW5nCisKKworZGV2ZnNkIHdpbGwgcGFzcyB0aGUgc3RyaW5nIHRvIHRoZSBtb2Rwcm9iZSBwcm9ncmFtbWUgKHByb3ZpZGVkIHRoZQorY29uZmlndXJhdGlvbiBsaW5lIHNob3duIGFib3ZlIGlzIHByZXNlbnQpLCBhbmQgc3BlY2lmaWVzIHRoYXQKKy9ldGMvbW9kdWxlcy5kZXZmcyBpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisKKworL2V0Yy9tb2R1bGVzLmRldmZzIGluY2x1ZGVzIC9ldGMvbW9kdWxlcy5jb25mIHRvCithY2Nlc3MgbG9jYWwgY29uZmlndXJhdGlvbnMKKworbW9kcHJvYmUgd2lsbCBzZWFyY2ggaXQncyBjb25maWd1cmF0aW9uIGZpbGVzLCBsb29raW5nIGZvciBhbiBhbGlhcwordGhhdCB0cmFuc2xhdGVzIHRoZSBwYXRobmFtZSBpbnRvIGEgbW9kdWxlIG5hbWUKKworCit0aGUgdHJhbnNsYXRlZCBwYXRobmFtZSBpcyB0aGVuIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLgorCisKK0lmIHlvdSB3YW50ZWQgYSBsb29rdXAgb2YgL2Rldi9mcmVkIHRvIGxvYWQgdGhlCitteW1vZCBtb2R1bGUsIHlvdSB3b3VsZCByZXF1aXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbgorbGluZSBpbiAvZXRjL21vZHVsZXMuY29uZjoKKworYWxpYXMgICAgL2Rldi9mcmVkICAgIG15bW9kCisKK1RoZSAvZXRjL21vZHVsZXMuZGV2ZnMgY29uZmlndXJhdGlvbiBmaWxlIHByb3ZpZGVzIG1hbnkgc3VjaAorYWxpYXNlcyBmb3Igc3RhbmRhcmQgZGV2aWNlIG5hbWVzLiBJZiB5b3UgbG9vayBjbG9zZWx5IGF0IHRoaXMgZmlsZSwKK3lvdSB3aWxsIG5vdGUgdGhhdCBzb21lIG1vZHVsZXMgcmVxdWlyZSBtdWx0aXBsZSBhbGlhcyBjb25maWd1cmF0aW9uCitsaW5lcy4gVGhpcyBpcyByZXF1aXJlZCB0byBzdXBwb3J0IG1vZHVsZSBhdXRvbG9hZGluZyBmb3Igb2xkIGFuZCBuZXcKK2RldmljZSBuYW1lcy4KKworTW91bnRpbmcgcm9vdCBvZmYgYSBkZXZmcyBkZXZpY2UKK0lmIHlvdSB3aXNoIHRvIG1vdW50IHJvb3Qgb2ZmIGEgZGV2ZnMgZGV2aWNlIHdoZW4geW91IHBhc3MgdGhlCisiZGV2ZnM9b25seSIgYm9vdCBvcHRpb24sIHRoZW4geW91IG5lZWQgdG8gcGFzcyBpbiB0aGUKKyJyb290PTxkZXZpY2U+IiBvcHRpb24gdG8gdGhlIGtlcm5lbCB3aGVuIGJvb3RpbmcuIElmIHlvdSB1c2UKK0xJTE8sIHRoZW4geW91IG11c3QgaGF2ZSB0aGlzIGluIGxpbG8uY29uZjoKKworYXBwZW5kID0gInJvb3Q9PGRldmljZT4iCisKK1N1cnByaXNlZD8gWWVwLCBzbyB3YXMgSS4gSXQgdHVybnMgb3V0IGlmIHlvdSBoYXZlIChhcyBtb3N0IHBlb3BsZQorZG8pOgorCityb290ID0gPGRldmljZT4KKworCit0aGVuIExJTE8gd2lsbCBkZXRlcm1pbmUgdGhlIGRldmljZSBudW1iZXIgb2YgPGRldmljZT4gYW5kIHdpbGwKK3dyaXRlIHRoYXQgZGV2aWNlIG51bWJlciBpbnRvIGEgc3BlY2lhbCBwbGFjZSBpbiB0aGUga2VybmVsIGltYWdlCitiZWZvcmUgc3RhcnRpbmcgdGhlIGtlcm5lbCwgYW5kIHRoZSBrZXJuZWwgd2lsbCB1c2UgdGhhdCBkZXZpY2UgbnVtYmVyCit0byBtb3VudCB0aGUgcm9vdCBmaWxlc3lzdGVtLiBTbywgdXNpbmcgdGhlICJhcHBlbmQiIHZhcmlldHkgZW5zdXJlcwordGhhdCBMSUxPIHBhc3NlcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGRldmljZSBhcyBhIHN0cmluZywgd2hpY2ggZGV2ZnMKK2NhbiB0aGVuIHVzZS4KKworTm90ZSB0aGF0IHRoaXMgaXNuJ3QgYW4gaXNzdWUgaWYgeW91IGRvbid0IHBhc3MgImRldmZzPW9ubHkiLgorCitUVFkgaXNzdWVzCitUaGUgdHR5bmFtZSgzKSBmdW5jdGlvbiBpbiBzb21lIHZlcnNpb25zIG9mIHRoZSBDIGxpYnJhcnkgbWFrZXMKK2ZhbHNlIGFzc3VtcHRpb25zIGFib3V0IGRldmljZSBlbnRyaWVzIHdoaWNoIGFyZSBzeW1ib2xpYyBsaW5rcy4gIFRoZQordHR5KDEpIHByb2dyYW1tZSBpcyBvbmUgdGhhdCBkZXBlbmRzIG9uIHRoaXMgZnVuY3Rpb24uICBJJ3ZlCit3cml0dGVuIGEgcGF0Y2ggdG8gbGliYyA1LjQuNDMgd2hpY2ggZml4ZXMgdGhpcy4gVGhpcyBoYXMgYmVlbgoraW5jbHVkZWQgaW4gbGliYyA1LjQuNDQgYW5kIGEgc2ltaWxhciBmaXggaXMgaW4gZ2xpYmMgMi4xLjMuCisKKworS2VybmVsIE5hbWluZyBTY2hlbWUKKworVGhlIGtlcm5lbCBwcm92aWRlcyBhIGRlZmF1bHQgbmFtaW5nIHNjaGVtZS4gVGhpcyBzY2hlbWUgaXMgZGVzaWduZWQKK3RvIG1ha2UgaXQgZWFzeSB0byBzZWFyY2ggZm9yIHNwZWNpZmljIGRldmljZXMgb3IgZGV2aWNlIHR5cGVzLCBhbmQgdG8KK3ZpZXcgdGhlIGF2YWlsYWJsZSBkZXZpY2VzLiBTb21lIGRldmljZSB0eXBlcyAoc3VjaCBhcyBoYXJkIGRpc2NzKSwKK2hhdmUgYSBkaXJlY3Rvcnkgb2YgZW50cmllcywgbWFraW5nIGl0IGVhc3kgdG8gc2VlIHdoYXQgZGV2aWNlcyBvZgordGhhdCBjbGFzcyBhcmUgYXZhaWxhYmxlLiBPZnRlbiwgdGhlIGVudHJpZXMgYXJlIHN5bWJvbGljIGxpbmtzIGludG8gYQorZGlyZWN0b3J5IHRyZWUgdGhhdCByZWZsZWN0cyB0aGUgdG9wb2xvZ3kgb2YgYXZhaWxhYmxlIGRldmljZXMuIFRoZQordG9wb2xvZ2ljYWwgdHJlZSBpcyB1c2VmdWwgZm9yIGZpbmRpbmcgaG93IHlvdXIgZGV2aWNlcyBhcmUgYXJyYW5nZWQuCisKK0JlbG93IGlzIGEgbGlzdCBvZiB0aGUgbmFtaW5nIHNjaGVtZXMgZm9yIHRoZSBtb3N0IGNvbW1vbiBkcml2ZXJzLiBBCitsaXN0IG9mIHJlc2VydmVkIGRldmljZSBuYW1lcyBpcworYXZhaWxhYmxlIGZvciByZWZlcmVuY2UuIFBsZWFzZSBzZW5kIGVtYWlsIHRvCityZ29vY2hAYXRuZi5jc2lyby5hdSB0byBvYnRhaW4gYW4gYWxsb2NhdGlvbi4gUGxlYXNlIGJlCitwYXRpZW50ICh0aGUgbWFpbnRhaW5lciBpcyBidXN5KS4gQW4gYWx0ZXJuYXRpdmUgbmFtZSBtYXkgYmUgYWxsb2NhdGVkCitpbnN0ZWFkIG9mIHRoZSByZXF1ZXN0ZWQgbmFtZSwgYXQgdGhlIGRpc2NyZXRpb24gb2YgdGhlIG1haW50YWluZXIuCisKK0Rpc2MgRGV2aWNlcworCitBbGwgZGlzY3MsIHdoZXRoZXIgU0NTSSwgSURFIG9yIHdoYXRldmVyLCBhcmUgcGxhY2VkIHVuZGVyIHRoZQorL2Rldi9kaXNjcyBoaWVyYXJjaHk6CisKKwkvZGV2L2Rpc2NzL2Rpc2MwCWZpcnN0IGRpc2MKKwkvZGV2L2Rpc2NzL2Rpc2MxCXNlY29uZCBkaXNjCisKKworRWFjaCBvZiB0aGVzZSBlbnRyaWVzIGlzIGEgc3ltYm9saWMgbGluayB0byB0aGUgZGlyZWN0b3J5IGZvciB0aGF0CitkZXZpY2UuIFRoZSBkZXZpY2UgZGlyZWN0b3J5IGNvbnRhaW5zOgorCisJZGlzYwlmb3IgdGhlIHdob2xlIGRpc2MKKwlwYXJ0Kglmb3IgaW5kaXZpZHVhbCBwYXJ0aXRpb25zCisKKworQ0QtUk9NIERldmljZXMKKworQWxsIENELVJPTXMsIHdoZXRoZXIgU0NTSSwgSURFIG9yIHdoYXRldmVyLCBhcmUgcGxhY2VkIHVuZGVyIHRoZQorL2Rldi9jZHJvbXMgaGllcmFyY2h5OgorCisJL2Rldi9jZHJvbXMvY2Ryb20wCWZpcnN0IENELVJPTQorCS9kZXYvY2Ryb21zL2Nkcm9tMQlzZWNvbmQgQ0QtUk9NCisKKworRWFjaCBvZiB0aGVzZSBlbnRyaWVzIGlzIGEgc3ltYm9saWMgbGluayB0byB0aGUgcmVhbCBkZXZpY2UgZW50cnkgZm9yCit0aGF0IGRldmljZS4KKworVGFwZSBEZXZpY2VzCisKK0FsbCB0YXBlcywgd2hldGhlciBTQ1NJLCBJREUgb3Igd2hhdGV2ZXIsIGFyZSBwbGFjZWQgdW5kZXIgdGhlCisvZGV2L3RhcGVzIGhpZXJhcmNoeToKKworCS9kZXYvdGFwZXMvdGFwZTAJZmlyc3QgdGFwZQorCS9kZXYvdGFwZXMvdGFwZTEJc2Vjb25kIHRhcGUKKworCitFYWNoIG9mIHRoZXNlIGVudHJpZXMgaXMgYSBzeW1ib2xpYyBsaW5rIHRvIHRoZSBkaXJlY3RvcnkgZm9yIHRoYXQKK2RldmljZS4gVGhlIGRldmljZSBkaXJlY3RvcnkgY29udGFpbnM6CisKKwltdAkJCWZvciBtb2RlIDAKKwltdGwJCQlmb3IgbW9kZSAxCisJbXRtCQkJZm9yIG1vZGUgMgorCW10YQkJCWZvciBtb2RlIDMKKwltdG4JCQlmb3IgbW9kZSAwLCBubyByZXdpbmQKKwltdGxuCQkJZm9yIG1vZGUgMSwgbm8gcmV3aW5kCisJbXRtbgkJCWZvciBtb2RlIDIsIG5vIHJld2luZAorCW10YW4JCQlmb3IgbW9kZSAzLCBubyByZXdpbmQKKworCitTQ1NJIERldmljZXMKKworVG8gdW5pcXVlbHkgaWRlbnRpZnkgYW55IFNDU0kgZGV2aWNlIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcKK2luZm9ybWF0aW9uOgorCisgIGNvbnRyb2xsZXIJKGhvc3QgYWRhcHRlcikKKyAgYnVzCQkoU0NTSSBjaGFubmVsKQorICB0YXJnZXQJKFNDU0kgSUQpCisgIHVuaXQJCShMb2dpY2FsIFVuaXQgTnVtYmVyKQorCisKK0FsbCBTQ1NJIGRldmljZXMgYXJlIHBsYWNlZCB1bmRlciAvZGV2L3Njc2kgKGFzc3VtaW5nIGRldmZzCitpcyBtb3VudGVkIG9uIC9kZXYpLiBIZW5jZSwgYSBTQ1NJIGRldmljZSB3aXRoIHRoZSBmb2xsb3dpbmcKK3BhcmFtZXRlcnM6IGM9MSxiPTIsdD0zLHU9NCB3b3VsZCBhcHBlYXIgYXM6CisKKwkvZGV2L3Njc2kvaG9zdDEvYnVzMi90YXJnZXQzL2x1bjQJZGV2aWNlIGRpcmVjdG9yeQorCisKK0luc2lkZSB0aGlzIGRpcmVjdG9yeSwgYSBudW1iZXIgb2YgZGV2aWNlIGVudHJpZXMgbWF5IGJlIGNyZWF0ZWQsCitkZXBlbmRpbmcgb24gd2hpY2ggU0NTSSBkZXZpY2UtdHlwZSBkcml2ZXJzIHdlcmUgaW5zdGFsbGVkLgorCitTZWUgdGhlIHNlY3Rpb24gb24gdGhlIGRpc2MgbmFtaW5nIHNjaGVtZSB0byBzZWUgd2hhdCBlbnRyaWVzIHRoZSBTQ1NJCitkaXNjIGRyaXZlciBjcmVhdGVzLgorCitTZWUgdGhlIHNlY3Rpb24gb24gdGhlIHRhcGUgbmFtaW5nIHNjaGVtZSB0byBzZWUgd2hhdCBlbnRyaWVzIHRoZSBTQ1NJCit0YXBlIGRyaXZlciBjcmVhdGVzLgorCitUaGUgU0NTSSBDRC1ST00gZHJpdmVyIGNyZWF0ZXM6CisKKwljZAorCisKK1RoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIGNyZWF0ZXM6CisKKwlnZW5lcmljCisKKworSURFIERldmljZXMKKworVG8gdW5pcXVlbHkgaWRlbnRpZnkgYW55IElERSBkZXZpY2UgcmVxdWlyZXMgdGhlIGZvbGxvd2luZworaW5mb3JtYXRpb246CisKKyAgY29udHJvbGxlcgorICBidXMJCShha2EuIHByaW1hcnkvc2Vjb25kYXJ5KQorICB0YXJnZXQJKGFrYS4gbWFzdGVyL3NsYXZlKQorICB1bml0CisKKworQWxsIElERSBkZXZpY2VzIGFyZSBwbGFjZWQgdW5kZXIgL2Rldi9pZGUsIGFuZCB1c2VzIGEgc2ltaWxhcgorbmFtaW5nIHNjaGVtZSB0byB0aGUgU0NTSSBzdWJzeXN0ZW0uCisKK1hUIEhhcmQgRGlzY3MKKworQWxsIFhUIGRpc2NzIGFyZSBwbGFjZWQgdW5kZXIgL2Rldi94ZC4gVGhlIGZpcnN0IFhUIGRpc2MgaGFzCit0aGUgZGlyZWN0b3J5IC9kZXYveGQvZGlzYzAuCisKK1RUWSBkZXZpY2VzCisKK1RoZSB0dHkgZGV2aWNlcyBub3cgYXBwZWFyIGFzOgorCisgIE5ldyBuYW1lICAgICAgICAgICAgICAgICAgIE9sZC1uYW1lICAgICAgICAgICAgICAgICAgIERldmljZSBUeXBlCisgIC0tLS0tLS0tICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tCisgIC9kZXYvdHRzL3swLDEsLi4ufSAgICAgICAgIC9kZXYvdHR5U3swLDEsLi4ufSAgICAgICAgIFNlcmlhbCBwb3J0cworICAvZGV2L2N1YS97MCwxLC4uLn0gICAgICAgICAvZGV2L2N1YXswLDEsLi4ufSAgICAgICAgICBDYWxsIG91dCBkZXZpY2VzCisgIC9kZXYvdmMvMCAgICAgICAgICAgICAgICAgIC9kZXYvdHR5ICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlydHVhbCBjb25zb2xlCisgIC9kZXYvdmMvezEsMiwuLi59ICAgICAgICAgIC9kZXYvdHR5ezEuLi42M30gICAgICAgICAgIFZpcnR1YWwgY29uc29sZXMKKyAgL2Rldi92Y2MvezAsMSwuLi59ICAgICAgICAgL2Rldi92Y3N7MS4uLjYzfSAgICAgICAgICAgVmlydHVhbCBjb25zb2xlcworICAvZGV2L3B0eS9tezAsMSwuLi59ICAgICAgICAvZGV2L3B0eXA/PyAgICAgICAgICAgICAgICBQVFkgbWFzdGVycworICAvZGV2L3B0eS9zezAsMSwuLi59ICAgICAgICAvZGV2L3R0eXA/PyAgICAgICAgICAgICAgICBQVFkgc2xhdmVzCisKKworUkFNRElTQ1MKKworVGhlIFJBTURJU0NTIGFyZSBwbGFjZWQgaW4gdGhlaXIgb3duIGRpcmVjdG9yeSwgYW5kIGFyZSBuYW1lZCB0aHVzOgorCisgIC9kZXYvcmQvezAsMSwyLC4uLn0KKworCitNZXRhIERldmljZXMKKworVGhlIG1ldGEgZGV2aWNlcyBhcmUgcGxhY2VkIGluIHRoZWlyIG93biBkaXJlY3RvcnksIGFuZCBhcmUgbmFtZWQKK3RodXM6CisKKyAgL2Rldi9tZC97MCwxLDIsLi4ufQorCisKK0Zsb3BweSBkaXNjcworCitGbG9wcHkgZGlzY3MgYXJlIHBsYWNlZCBpbiB0aGUgL2Rldi9mbG9wcHkgZGlyZWN0b3J5LgorCitMb29wIGRldmljZXMKKworTG9vcCBkZXZpY2VzIGFyZSBwbGFjZWQgaW4gdGhlIC9kZXYvbG9vcCBkaXJlY3RvcnkuCisKK1NvdW5kIGRldmljZXMKKworU291bmQgZGV2aWNlcyBhcmUgcGxhY2VkIGluIHRoZSAvZGV2L3NvdW5kIGRpcmVjdG9yeQorKGF1ZGlvLCBzZXF1ZW5jZXIsIC4uLikuCisKKworRGV2ZnNkIE5hbWluZyBTY2hlbWUKKworRGV2ZnNkIHByb3ZpZGVzIGEgbmFtaW5nIHNjaGVtZSB3aGljaCBpcyBhIGNvbnZlbmllbnQgYWJicmV2aWF0aW9uIG9mCit0aGUga2VybmVsLXN1cHBsaWVkIG5hbWVzcGFjZS4gSW4gc29tZQorY2FzZXMsIHRoZSBrZXJuZWwtc3VwcGxpZWQgbmFtaW5nIHNjaGVtZSBpcyBxdWl0ZSBjb252ZW5pZW50LCBzbworZGV2ZnNkIGRvZXMgbm90IHByb3ZpZGUgYW5vdGhlciBuYW1pbmcgc2NoZW1lLiBUaGUgY29udmVuaWVuY2UgbmFtZXMKK3RoYXQgZGV2ZnNkIGNyZWF0ZXMgYXJlIGluIGZhY3QgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9yaWdpbmFsIGRldmZzCitrZXJuZWwgcGF0Y2ggY3JlYXRlZCAoYmVmb3JlIExpbnVzIG1hbmRhdGVkIHRoZSBCaWcgTmFtZQorQ2hhbmdlKS4gVGhlc2UgYXJlIHJlZmVycmVkIHRvIGFzICJuZXcgY29tcGF0aWJpbGl0eSBlbnRyaWVzIi4KKworSW4gb3JkZXIgdG8gY29uZmlndXJlIGRldmZzZCB0byBjcmVhdGUgdGhlc2UgY29udmVuaWVuY2UgbmFtZXMsIHRoZQorZm9sbG93aW5nIGxpbmVzIHNob3VsZCBiZSBwbGFjZWQgaW4geW91ciAvZXRjL2RldmZzZC5jb25mOgorCitSRUdJU1RFUgkuKgkJTUtORVdDT01QQVQKK1VOUkVHSVNURVIJLioJCVJNTkVXQ09NUEFUCisKK1RoaXMgd2lsbCBjYXVzZSBkZXZmc2QgdG8gY3JlYXRlIChhbmQgZGVzdHJveSkgc3ltYm9saWMgbGlua3Mgd2hpY2gKK3BvaW50IHRvIHRoZSBrZXJuZWwtc3VwcGxpZWQgbmFtZXMuCisKK1NDU0kgSGFyZCBEaXNjcworCitBbGwgU0NTSSBkaXNjcyBhcmUgcGxhY2VkIHVuZGVyIC9kZXYvc2QgKGFzc3VtaW5nIGRldmZzIGlzCittb3VudGVkIG9uIC9kZXYpLiBIZW5jZSwgYSBTQ1NJIGRpc2Mgd2l0aCB0aGUgZm9sbG93aW5nCitwYXJhbWV0ZXJzOiBjPTEsYj0yLHQ9Myx1PTQgd291bGQgYXBwZWFyIGFzOgorCisJL2Rldi9zZC9jMWIydDN1NAlmb3IgdGhlIHdob2xlIGRpc2MKKwkvZGV2L3NkL2MxYjJ0M3U0cDUJZm9yIHRoZSA1dGggcGFydGl0aW9uCisJL2Rldi9zZC9jMWIydDN1NHA1czYJZm9yIHRoZSA2dGggc2xpY2UgaW4gdGhlIDV0aCBwYXJ0aXRpb24KKworCitTQ1NJIFRhcGVzCisKK0FsbCBTQ1NJIHRhcGVzIGFyZSBwbGFjZWQgdW5kZXIgL2Rldi9zdC4gQSBzaW1pbGFyIG5hbWluZworc2NoZW1lIGlzIHVzZWQgYXMgZm9yIFNDU0kgZGlzY3MuIEEgU0NTSSB0YXBlIHdpdGggdGhlCitwYXJhbWV0ZXJzOmM9MSxiPTIsdD0zLHU9NCB3b3VsZCBhcHBlYXIgYXM6CisKKwkvZGV2L3N0L2MxYjJ0M3U0bTAJZm9yIG1vZGUgMAorCS9kZXYvc3QvYzFiMnQzdTRtMQlmb3IgbW9kZSAxCisJL2Rldi9zdC9jMWIydDN1NG0yCWZvciBtb2RlIDIKKwkvZGV2L3N0L2MxYjJ0M3U0bTMJZm9yIG1vZGUgMworCS9kZXYvc3QvYzFiMnQzdTRtMG4JZm9yIG1vZGUgMCwgbm8gcmV3aW5kCisJL2Rldi9zdC9jMWIydDN1NG0xbglmb3IgbW9kZSAxLCBubyByZXdpbmQKKwkvZGV2L3N0L2MxYjJ0M3U0bTJuCWZvciBtb2RlIDIsIG5vIHJld2luZAorCS9kZXYvc3QvYzFiMnQzdTRtM24JZm9yIG1vZGUgMywgbm8gcmV3aW5kCisKKworU0NTSSBDRC1ST01zCisKK0FsbCBTQ1NJIENELVJPTXMgYXJlIHBsYWNlZCB1bmRlciAvZGV2L3NyLiBBIHNpbWlsYXIgbmFtaW5nCitzY2hlbWUgaXMgdXNlZCBhcyBmb3IgU0NTSSBkaXNjcy4gQSBTQ1NJIENELVJPTSB3aXRoIHRoZQorcGFyYW1ldGVyczpjPTEsYj0yLHQ9Myx1PTQgd291bGQgYXBwZWFyIGFzOgorCisJL2Rldi9zci9jMWIydDN1NAorCisKK1NDU0kgR2VuZXJpYyBEZXZpY2VzCisKK1RoZSBnZW5lcmljIChha2EuIHJhdykgaW50ZXJmYWNlIGZvciBhbGwgU0NTSSBkZXZpY2VzIGFyZSBwbGFjZWQgdW5kZXIKKy9kZXYvc2cuIEEgc2ltaWxhciBuYW1pbmcgc2NoZW1lIGlzIHVzZWQgYXMgZm9yIFNDU0kgZGlzY3MuIEEKK1NDU0kgZ2VuZXJpYyBkZXZpY2Ugd2l0aCB0aGUgcGFyYW1ldGVyczpjPTEsYj0yLHQ9Myx1PTQgd291bGQgYXBwZWFyCithczoKKworCS9kZXYvc2cvYzFiMnQzdTQKKworCitJREUgSGFyZCBEaXNjcworCitBbGwgSURFIGRpc2NzIGFyZSBwbGFjZWQgdW5kZXIgL2Rldi9pZGUvaGQsIHVzaW5nIGEgc2ltaWxhcgorY29udmVudGlvbiB0byBTQ1NJIGRpc2NzLiBUaGUgZm9sbG93aW5nIG1hcHBpbmdzIGV4aXN0IGJldHdlZW4gdGhlIG5ldworYW5kIHRoZSBvbGQgbmFtZXM6CisKKwkvZGV2L2hkYQkvZGV2L2lkZS9oZC9jMGIwdDB1MAorCS9kZXYvaGRiCS9kZXYvaWRlL2hkL2MwYjB0MXUwCisJL2Rldi9oZGMJL2Rldi9pZGUvaGQvYzBiMXQwdTAKKwkvZGV2L2hkZAkvZGV2L2lkZS9oZC9jMGIxdDF1MAorCisKK0lERSBUYXBlcworCitBIHNpbWlsYXIgbmFtaW5nIHNjaGVtZSBpcyB1c2VkIGFzIGZvciBJREUgZGlzY3MuIFRoZSBlbnRyaWVzIHdpbGwKK2FwcGVhciBpbiB0aGUgL2Rldi9pZGUvbXQgZGlyZWN0b3J5LgorCitJREUgQ0QtUk9NCisKK0Egc2ltaWxhciBuYW1pbmcgc2NoZW1lIGlzIHVzZWQgYXMgZm9yIElERSBkaXNjcy4gVGhlIGVudHJpZXMgd2lsbAorYXBwZWFyIGluIHRoZSAvZGV2L2lkZS9jZCBkaXJlY3RvcnkuCisKK0lERSBGbG9wcGllcworCitBIHNpbWlsYXIgbmFtaW5nIHNjaGVtZSBpcyB1c2VkIGFzIGZvciBJREUgZGlzY3MuIFRoZSBlbnRyaWVzIHdpbGwKK2FwcGVhciBpbiB0aGUgL2Rldi9pZGUvZmQgZGlyZWN0b3J5LgorCitYVCBIYXJkIERpc2NzCisKK0FsbCBYVCBkaXNjcyBhcmUgcGxhY2VkIHVuZGVyIC9kZXYveGQuIFRoZSBmaXJzdCBYVCBkaXNjCit3b3VsZCBhcHBlYXIgYXMgL2Rldi94ZC9jMHQwLgorCisKK09sZCBDb21wYXRpYmlsaXR5IE5hbWVzCisKK1RoZSBvbGQgY29tcGF0aWJpbGl0eSBuYW1lcyBhcmUgdGhlIGxlZ2FjeSBkZXZpY2UgbmFtZXMsIHN1Y2ggYXMKKy9kZXYvaGRhLCAvZGV2L3NkYSwgL2Rldi9ydGMgYW5kIHNvIG9uLgorRGV2ZnNkIGNhbiBiZSBjb25maWd1cmVkIHRvIGNyZWF0ZSBjb21wYXRpYmlsaXR5IHN5bWxpbmtzIHNvIHRoYXQgeW91CittYXkgY29udGludWUgdG8gdXNlIHRoZSBvbGQgbmFtZXMgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBzbwordGhhdCBvbGQgYXBwbGljYXRpb25zIHdpbGwgY29udGludWUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgorCitJbiBvcmRlciB0byBjb25maWd1cmUgZGV2ZnNkIHRvIGNyZWF0ZSB0aGVzZSBsZWdhY3kgbmFtZXMsIHRoZQorZm9sbG93aW5nIGxpbmVzIHNob3VsZCBiZSBwbGFjZWQgaW4geW91ciAvZXRjL2RldmZzZC5jb25mOgorCitSRUdJU1RFUgkuKgkJTUtPTERDT01QQVQKK1VOUkVHSVNURVIJLioJCVJNT0xEQ09NUEFUCisKK1RoaXMgd2lsbCBjYXVzZSBkZXZmc2QgdG8gY3JlYXRlIChhbmQgZGVzdHJveSkgc3ltYm9saWMgbGlua3Mgd2hpY2gKK3BvaW50IHRvIHRoZSBrZXJuZWwtc3VwcGxpZWQgbmFtZXMuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitEZXZpY2UgZHJpdmVycyBjdXJyZW50bHkgcG9ydGVkCisKKy0gQWxsIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyIGRldmljZXMgc3VwcG9ydCBkZXZmcyAodGhpcyBpcyBkb25lCisgIHRyYW5zcGFyZW50bHkgdGhyb3VnaCBtaXNjX3JlZ2lzdGVyKCkpCisKKy0gU0NTSSBkaXNjcyBhbmQgZ2VuZXJpYyBoYXJkIGRpc2NzCisKKy0gQ2hhcmFjdGVyIG1lbW9yeSBkZXZpY2VzIChudWxsLCB6ZXJvLCBmdWxsIGFuZCBzbyBvbikKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIExvb3AgZGV2aWNlcyAoL2Rldi9sb29wPykKKyAKKy0gVFRZIGRldmljZXMgKGNvbnNvbGUsIHNlcmlhbCBwb3J0cywgdGVybWluYWxzIGFuZCBwc2V1ZG8tdGVybWluYWxzKQorICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+CisKKy0gU0NTSSB0YXBlcyAoL2Rldi9zY3NpIGFuZCAvZGV2L3RhcGVzKQorCistIFNDU0kgQ0QtUk9NcyAoL2Rldi9zY3NpIGFuZCAvZGV2L2Nkcm9tcykKKworLSBTQ1NJIGdlbmVyaWMgZGV2aWNlcyAoL2Rldi9zY3NpKQorCistIFJBTURJU0NTICgvZGV2L3JhbT8pCisKKy0gTWV0YSBEZXZpY2VzICgvZGV2L21kKikKKworLSBGbG9wcHkgZGlzY3MgKC9kZXYvZmxvcHB5KQorCistIFBhcmFsbGVsIHBvcnQgcHJpbnRlcnMgKC9kZXYvcHJpbnRlcnMpCisKKy0gU291bmQgZGV2aWNlcyAoL2Rldi9zb3VuZCkKKyAgVGhhbmtzIHRvIEVyaWMgRHVtYXMgPGR1bWFzQGxpbnV4LmV1Lm9yZz4gYW5kCisgIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIEpveXN0aWNrcyAoL2Rldi9qb3lzdGlja3MpCisKKy0gU3BhcmMga2V5Ym9hcmQgKC9kZXYva2JkKQorCistIERTUDU2MDAxIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NvciAoL2Rldi9kc3A1NmspCisKKy0gQXBwbGUgRGVza3RvcCBCdXMgKC9kZXYvYWRiKQorCistIENvZGEgbmV0d29yayBmaWxlIHN5c3RlbSAoL2Rldi9jZnMqKQorCistIFZpcnR1YWwgY29uc29sZSBjYXB0dXJlIGRldmljZXMgKC9kZXYvdmNjKQorICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KKworLSBGcmFtZSBidWZmZXIgZGV2aWNlcyAoL2Rldi9mYikKKworLSBWaWRlbyBjYXB0dXJlIGRldmljZXMgKC9kZXYvdjRsKQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQWxsb2NhdGlvbiBvZiBEZXZpY2UgTnVtYmVycworCitEZXZmcyBhbGxvd3MgeW91IHRvIHdyaXRlIGEgZHJpdmVyIHdoaWNoIGRvZXNuJ3QgbmVlZCB0byBhbGxvY2F0ZSBhCitkZXZpY2UgbnVtYmVyIChtYWpvciZtaW5vciBudW1iZXJzKSBmb3IgdGhlIGludGVybmFsIG9wZXJhdGlvbiBvZiB0aGUKK2tlcm5lbC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHVzZXJzcGFjZSBwcm9ncmFtbWVzIHRoYXQgdXNlCit0aGUgZGV2aWNlIG51bWJlciBhcyBhIHVuaXF1ZSBoYW5kbGUgZm9yIGEgZGV2aWNlLiBBbiBleGFtcGxlIGlzIHRoZQorZmluZCBwcm9ncmFtbWUsIHdoaWNoIHVzZXMgZGV2aWNlIG51bWJlcnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKK2FuIGlub2RlIGlzIG9uIGEgZGlmZmVyZW50IGZpbGVzeXN0ZW0gdGhhbiBhbm90aGVyIGlub2RlLiBUaGUgZGV2aWNlCitudW1iZXIgdXNlZCBpcyB0aGUgb25lIGZvciB0aGUgYmxvY2sgZGV2aWNlIHdoaWNoIGEgZmlsZXN5c3RlbSBpcwordXNpbmcuIFRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgcHJvZ3JhbW1lcywgYmxvY2sKK2RldmljZXMgdXNpbmcgZGV2ZnMgbmVlZCB0byBoYXZlIHVuaXF1ZSBkZXZpY2UgbnVtYmVycyBhbGxvY2F0ZWQgdG8KK3RoZW0uIEZ1cnRoZXJtb3JlLCBQT1NJWCBzcGVjaWZpZXMgZGV2aWNlIG51bWJlcnMsIHNvIHNvbWUga2luZCBvZgorZGV2aWNlIG51bWJlciBuZWVkcyB0byBiZSBwcmVzZW50ZWQgdG8gdXNlcnNwYWNlLgorCitUaGUgc2ltcGxlc3Qgb3B0aW9uIChlc3BlY2lhbGx5IHdoZW4gcG9ydGluZyBkcml2ZXJzIHRvIGRldmZzKSBpcyB0bwora2VlcCB1c2luZyB0aGUgb2xkIG1ham9yIGFuZCBtaW5vciBudW1iZXJzLiBEZXZmcyB3aWxsIHRha2Ugd2hhdGV2ZXIKK3ZhbHVlcyBhcmUgZ2l2ZW4gZm9yIG1ham9yJm1pbm9yIGFuZCBwYXNzIHRoZW0gb250byB1c2Vyc3BhY2UuCisKK1RoaXMgZGV2aWNlIG51bWJlciBpcyBhIDE2IGJpdCBudW1iZXIsIHNvIHRoaXMgbGVhdmVzIHBsZW50eSBvZiBzcGFjZQorZm9yIGxhcmdlIG51bWJlcnMgb2YgZGlzY3MgYW5kIHBhcnRpdGlvbnMuIFRoaXMgc2NoZW1lIGNhbiBhbHNvIGJlCit1c2VkIGZvciBjaGFyYWN0ZXIgZGV2aWNlcywgaW4gcGFydGljdWxhciB0aGUgdHR5IGRldmljZXMsIHdoaWNoIGFyZQorY3VycmVudGx5IGxpbWl0ZWQgdG8gMjU2IHBzZXVkby10dHlzICh0aGlzIGxpbWl0cyB0aGUgdG90YWwgbnVtYmVyIG9mCitzaW11bHRhbmVvdXMgeHRlcm1zIGFuZCByZW1vdGUgbG9naW5zKS4gIE5vdGUgdGhhdCB0aGUgZGV2aWNlIG51bWJlcgoraXMgbGltaXRlZCB0byB0aGUgcmFuZ2UgMzY4NjQtNjE0MzkgKG1ham9ycyAxNDQtMjM5KSwgaW4gb3JkZXIgdG8KK2F2b2lkIGFueSBwb3NzaWJsZSBjb25mbGljdHMgd2l0aCBleGlzdGluZyBvZmZpY2lhbCBhbGxvY2F0aW9ucy4KKworUGxlYXNlIG5vdGUgdGhhdCB1c2luZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmxvY2sgZGV2aWNlIG51bWJlcnMgbWF5CiticmVhayB0aGUgTkZTIGRhZW1vbnMgKGJvdGggdXNlciBhbmQga2VybmVsIG1vZGUpLCB3aGljaCBleHBlY3QgZGV2X3QKK2ZvciBhIGdpdmVuIGRldmljZSB0byBiZSBjb25zdGFudCBvdmVyIHRoZSBsaWZldGltZSBvZiByZW1vdGUgbW91bnRzLgorCitBIGZpbmFsIG5vdGUgb24gdGhpcyBzY2hlbWU6IHNpbmNlIGl0IGRvZXNuJ3QgaW5jcmVhc2UgdGhlIHNpemUgb2YKK2RldmljZSBudW1iZXJzLCB0aGVyZSBhcmUgbm8gY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCB1c2Vyc3BhY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUXVlc3Rpb25zIGFuZCBBbnN3ZXJzCisKKworTWFraW5nIHRoaW5ncyB3b3JrCitBbHRlcm5hdGl2ZXMgdG8gZGV2ZnMKK1doYXQgSSBkb24ndCBsaWtlIGFib3V0IGRldmZzCitIb3cgdG8gcmVwb3J0IGJ1Z3MKK1N0cmFuZ2Uga2VybmVsIG1lc3NhZ2VzCitDb21waWxhdGlvbiBwcm9ibGVtcyB3aXRoIGRldmZzZAorCisKKworTWFraW5nIHRoaW5ncyB3b3JrCisKK0hlcmUgYXJlIHNvbWUgY29tbW9uIHF1ZXN0aW9ucyBhbmQgYW5zd2Vycy4KKworCisKK0RldmZzZCBkb2Vzbid0IHN0YXJ0CisKK01ha2Ugc3VyZSB5b3UgaGF2ZSBjb21waWxlZCBhbmQgaW5zdGFsbGVkIGRldmZzZAorTWFrZSBzdXJlIGRldmZzZCBpcyBiZWluZyBzdGFydGVkIGZyb20geW91ciBib290CitzY3JpcHRzCitNYWtlIHN1cmUgeW91IGhhdmUgY29uZmlndXJlZCB5b3VyIGtlcm5lbCB0byBlbmFibGUgZGV2ZnMgKHNlZQorYmVsb3cpCitNYWtlIHN1cmUgZGV2ZnMgaXMgbW91bnRlZCAoc2VlIGJlbG93KQorCisKK0RldmZzZCBpcyBub3QgbWFuYWdpbmcgYWxsIG15IHBlcm1pc3Npb25zCisKK01ha2Ugc3VyZSB5b3UgYXJlIGNhcHR1cmluZyB0aGUgYXBwcm9wcmlhdGUgZXZlbnRzLiBGb3IgZXhhbXBsZSwKK2RldmljZSBlbnRyaWVzIGNyZWF0ZWQgYnkgdGhlIGtlcm5lbCBnZW5lcmF0ZSBSRUdJU1RFUiBldmVudHMsCitidXQgdGhvc2UgY3JlYXRlZCBieSBkZXZmc2QgZ2VuZXJhdGUgQ1JFQVRFIGV2ZW50cy4KKworCitEZXZmc2QgaXMgbm90IGNhcHR1cmluZyBhbGwgUkVHSVNURVIgZXZlbnRzCisKK1NlZSB0aGUgcHJldmlvdXMgZW50cnk6IHlvdSBtYXkgbmVlZCB0byBjYXB0dXJlIENSRUFURSBldmVudHMuCisKKworWCB3aWxsIG5vdCBzdGFydAorCitNYWtlIHN1cmUgeW91IGZvbGxvd2VkIHRoZSBzdGVwcyAKK291dGxpbmVkIGFib3ZlLgorCisKK1doeSBkb24ndCBteSBuZXR3b3JrIGRldmljZXMgYXBwZWFyIGluIGRldmZzPworCitUaGlzIGlzIG5vdCBhIGJ1Zy4gTmV0d29yayBkZXZpY2VzIGhhdmUgdGhlaXIgb3duLCBjb21wbGV0ZWx5IHNlcGFyYXRlCituYW1lc3BhY2UuIFRoZXkgYXJlIGFjY2Vzc2VkIHZpYSBzb2NrZXQoMikgYW5kCitzZXRzb2Nrb3B0KDIpIGNhbGxzLCBhbmQgdGh1cyByZXF1aXJlIG5vIGRldmljZSBub2Rlcy4gSSBoYXZlCityYWlzZWQgdGhlIHBvc3NpYmlsdHkgb2YgbW92aW5nIG5ldHdvcmsgZGV2aWNlcyBpbnRvIHRoZSBkZXZpY2UKK25hbWVzcGFjZSwgYnV0IGhhdmUgaGFkIG5vIHJlc3BvbnNlLgorCisKK0hvdyBjYW4gSSB0ZXN0IGlmIEkgaGF2ZSBkZXZmcyBjb21waWxlZCBpbnRvIG15IGtlcm5lbD8KKworQWxsIGZpbGVzeXN0ZW1zIGJ1aWx0LWluIG9yIGN1cnJlbnRseSBsb2FkZWQgYXJlIGxpc3RlZCBpbgorL3Byb2MvZmlsZXN5c3RlbXMuIElmIHlvdSBzZWUgYSBkZXZmcyBlbnRyeSwgdGhlbgoreW91IGtub3cgdGhhdCBkZXZmcyB3YXMgY29tcGlsZWQgaW50byB5b3VyIGtlcm5lbC4gSWYgeW91IGhhdmUKK2NvcnJlY3RseSBjb25maWd1cmVkIGFuZCByZWJ1aWx0IHlvdXIga2VybmVsLCB0aGVuIGRldmZzIHdpbGwgYmUKK2J1aWx0LWluLiBJZiB5b3UgdGhpbmsgeW91J3ZlIGNvbmZpZ3VyZWQgaXQgaW4sIGJ1dAorL3Byb2MvZmlsZXN5c3RlbXMgZG9lc24ndCBzaG93IGl0LCB5b3UndmUgbWFkZSBhIG1pc3Rha2UuCitDb21tb24gbWlzdGFrZXMgaW5jbHVkZToKKworVXNpbmcgYSAyLjIueCBrZXJuZWwgd2l0aG91dCBhcHBseWluZyB0aGUgZGV2ZnMgcGF0Y2ggKGlmIHlvdQorZG9uJ3Qga25vdyBob3cgdG8gcGF0Y2ggeW91ciBrZXJuZWwsIHVzZSAyLjQueCBpbnN0ZWFkLCBkb24ndCBib3RoZXIKK2Fza2luZyBtZSBob3cgdG8gcGF0Y2gpCitGb3JnZXR0aW5nIHRvIHNldCBDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0ZvcmdldHRpbmcgdG8gc2V0IENPTkZJR19ERVZGU19GUz15CitGb3JnZXR0aW5nIHRvIHNldCBDT05GSUdfREVWRlNfTU9VTlQ9eSAoaWYgeW91IHdhbnQgZGV2ZnMKK3RvIGJlIGF1dG9tYXRpY2FsbHkgbW91bnRlZCBhdCBib290KQorRWRpdGluZyB5b3VyIC5jb25maWcgbWFudWFsbHksIGluc3RlYWQgb2YgdXNpbmcgbWFrZQorY29uZmlnIG9yIG1ha2UgeGNvbmZpZworRm9yZ2V0dGluZyB0byBydW4gbWFrZSBkZXA7IG1ha2UgY2xlYW4gYWZ0ZXIgY2hhbmdpbmcgdGhlCitjb25maWd1cmF0aW9uIGFuZCBiZWZvcmUgY29tcGlsaW5nCitGb3JnZXR0aW5nIHRvIGNvbXBpbGUgeW91ciBrZXJuZWwgYW5kIG1vZHVsZXMKK0ZvcmdldHRpbmcgdG8gaW5zdGFsbCB5b3VyIGtlcm5lbAorRm9yZ2V0dGluZyB0byBpbnN0YWxsIHlvdXIgbW9kdWxlcworCitQbGVhc2UgY2hlY2sgdHdpY2UgdGhhdCB5b3UndmUgZG9uZSBhbGwgdGhlc2Ugc3RlcHMgYmVmb3JlIHNlbmRpbmcgaW4KK2EgYnVnIHJlcG9ydC4KKworCisKK0hvdyBjYW4gSSB0ZXN0IGlmIGRldmZzIGlzIG1vdW50ZWQgb24gL2Rldj8KKworVGhlIGRldmljZSBmaWxlc3lzdGVtIHdpbGwgYWx3YXlzIGNyZWF0ZSBhbiBlbnRyeSBjYWxsZWQKKyIuZGV2ZnNkIiwgd2hpY2ggaXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkYWVtb24uIEV2ZW4KK2lmIHRoZSBkYWVtb24gaXMgbm90IHJ1bm5pbmcsIHRoaXMgZW50cnkgd2lsbCBleGlzdC4gVGVzdGluZyBmb3IgdGhlCitleGlzdGVuY2Ugb2YgdGhpcyBlbnRyeSBpcyB0aGUgYXBwcm92ZWQgbWV0aG9kIG9mIGRldGVybWluaW5nIGlmIGRldmZzCitpcyBtb3VudGVkIG9yIG5vdC4gTm90ZSB0aGF0IHRoZSB0eXBlIG9mIGVudHJ5IChpLmUuIHJlZ3VsYXIgZmlsZSwKK2NoYXJhY3RlciBkZXZpY2UsIG5hbWVkIHBpcGUsIGV0Yy4pIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuIE9ubHkKK3RoZSBleGlzdGVuY2Ugb2YgdGhlIGVudHJ5IHNob3VsZCBiZSByZWxpZWQgdXBvbi4KKworCitXaGVuIEkgc3RhcnQgZGV2ZnNkLCBJIHNlZSB0aGUgZXJyb3I6CitFcnJvciBvcGVuaW5nIGZpbGU6ICIuZGV2ZnNkIiAgIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk/CisKK1RoaXMgbWVhbnMgdGhhdCBkZXZmcyBpcyBub3QgbW91bnRlZC4gTWFrZSBzdXJlIHlvdSBoYXZlIGRldmZzIG1vdW50ZWQuCisKKworSG93IGRvIEkgbW91bnQgZGV2ZnM/CisKK0ZpcnN0IG1ha2Ugc3VyZSB5b3UgaGF2ZSBkZXZmcyBjb21waWxlZCBpbnRvIHlvdXIga2VybmVsIChzZWUKK2Fib3ZlKS4gVGhlbiB5b3Ugd2lsbCBlaXRoZXIgbmVlZCB0bzoKKworc2V0IENPTkZJR19ERVZGU19NT1VOVD15IGluIHlvdXIga2VybmVsIGNvbmZpZworcGFzcyBkZXZmcz1tb3VudCB0byB5b3VyIGJvb3QgbG9hZGVyCittb3VudCBkZXZmcyBtYW51YWxseSBpbiB5b3VyIGJvb3Qgc2NyaXB0cyB3aXRoOgorbW91bnQgLXQgbm9uZSBkZXZmcyAvZGV2CisKKworCitNb3VudCBieSB2b2x1bWUgTEFCRUw9PGxhYmVsPiBkb2Vzbid0IHdvcmsgd2l0aAorZGV2ZnMKKworTW9zdCBwcm9iYWJseSB5b3UgYXJlIG5vdCBtb3VudGluZyBkZXZmcyBvbnRvIC9kZXYuIFdoYXQKK2hhcHBlbnMgaXMgdGhhdCBpZiB5b3VyIGtlcm5lbCBjb25maWcgaGFzIENPTkZJR19ERVZGU19GUz15Cit0aGVuIHRoZSBjb250ZW50cyBvZiAvcHJvYy9wYXJ0aXRpb25zIHdpbGwgaGF2ZSB0aGUgZGV2ZnMKK25hbWVzIChzdWNoIGFzIHNjc2kvaG9zdDAvYnVzMC90YXJnZXQwL2x1bjAvcGFydDEpLiBUaGUKK2NvbnRlbnRzIG9mIC9wcm9jL3BhcnRpdGlvbnMgYXJlIHVzZWQgYnkgbW91bnQoOCkgd2hlbgorbW91bnRpbmcgYnkgdm9sdW1lIGxhYmVsLiBJZiBkZXZmcyBpcyBub3QgbW91bnRlZCBvbiAvZGV2LAordGhlbiBtb3VudCg4KSB3aWxsIGZhaWwgdG8gZmluZCBkZXZpY2VzLiBUaGUgc29sdXRpb24gaXMgdG8KK21ha2Ugc3VyZSB0aGF0IGRldmZzIGlzIG1vdW50ZWQgb24gL2Rldi4gU2VlIGFib3ZlIGZvciBob3cgdG8KK2RvIHRoYXQuCisKKworSSBoYXZlIGV4dHJhIG9yIGluY29ycmVjdCBlbnRyaWVzIGluIC9kZXYKKworWW91IG1heSBoYXZlIHN0YWxlIGVudHJpZXMgaW4geW91ciBkZXYtc3RhdGUgYXJlYS4gQ2hlY2sgZm9yIGEKK1JFU1RPUkUgY29uZmlndXJhdGlvbiBsaW5lIGluIHlvdXIgZGV2ZnNkIGNvbmZpZ3VyYXRpb24KKyh0eXBpY2FsbHkgL2V0Yy9kZXZmc2QuY29uZikuIElmIHlvdSBoYXZlIHRoaXMgbGluZSwgY2hlY2sKK3RoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBmb3Igc3RhbGUgZW50cmllcy4gUmVtb3ZlCithbnkgZW50cmllcyB3aGljaCBhcmUgaW5jb3JyZWN0LCB0aGVuIHJlYm9vdC4KKworCitJIGdldCAiVW5hYmxlIHRvIG9wZW4gaW5pdGlhbCBjb25zb2xlIiBtZXNzYWdlcyBhdCBib290CisKK1RoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4geW91IGRvbid0IGhhdmUgZGV2ZnMgYXV0b21vdW50ZWQgb250bworL2RldiBhdCBib290IHRpbWUsIGFuZCB0aGVyZSBpcyBubyB2YWxpZAorL2Rldi9jb25zb2xlIGVudHJ5IG9uIHlvdXIgcm9vdCBmaWxlLXN5c3RlbS4gQ3JlYXRlIGEgdmFsaWQKKy9kZXYvY29uc29sZSBkZXZpY2Ugbm9kZS4KKworCisKKworCitBbHRlcm5hdGl2ZXMgdG8gZGV2ZnMKKworSSd2ZSBhdHRlbXB0ZWQgdG8gY29sbGF0ZSBhbGwgdGhlIGFudGktZGV2ZnMgcHJvcG9zYWxzIGFuZCBleHBsYWluCit0aGVpciBsaW1pdGF0aW9ucy4gVW5kZXIgY29uc3RydWN0aW9uLgorCisKK1doeSBub3QganVzdCBwYXNzIGRldmljZSBjcmVhdGUvcmVtb3ZlIGV2ZW50cyB0byBhIGRhZW1vbj8KKworSGVyZSB0aGUgc3VnZ2VzdGlvbiBpcyB0byBkZXZlbG9wIGFuIEFQSSBpbiB0aGUga2VybmVsIHNvIHRoYXQgZGV2aWNlcworY2FuIHJlZ2lzdGVyIGNyZWF0ZSBhbmQgcmVtb3ZlIGV2ZW50cywgYW5kIGEgZGFlbW9uIGxpc3RlbnMgZm9yIHRob3NlCitldmVudHMuIFRoZSBkYWVtb24gd291bGQgdGhlbiBwb3B1bGF0ZS9kZXBvcHVsYXRlIC9kZXYgKHdoaWNoCityZXNpZGVzIG9uIGRpc2MpLgorCitUaGlzIGhhcyBzZXZlcmFsIGxpbWl0YXRpb25zOgorCisKK2l0IG9ubHkgd29ya3MgZm9yIG1vZHVsZXMgbG9hZGVkIGFuZCB1bmxvYWRlZCAob3IgZGV2aWNlcyBpbnNlcnRlZAorYW5kIHJlbW92ZWQpIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIGJvb3RpbmcuIFdpdGhvdXQgYSBkYXRhYmFzZQorb2YgZXZlbnRzLCB0aGVyZSBpcyBubyB3YXkgdGhlIGRhZW1vbiBjb3VsZCBmdWxseSBwb3B1bGF0ZQorL2RldgorCisKK2lmIHlvdSBhZGQgYSBkYXRhYmFzZSB0byB0aGlzIHNjaGVtZSwgdGhlIHF1ZXN0aW9uIGlzIHRoZW4gaG93IHRvCitwcmVzZW50IHRoYXQgZGF0YWJhc2UgdG8gdXNlci1zcGFjZS4gSWYgeW91IG1ha2UgaXQgYSBsaXN0IG9mIHN0cmluZ3MKK3dpdGggZW1iZWRkZWQgZXZlbnQgY29kZXMgd2hpY2ggYXJlIHBhc3NlZCB0aHJvdWdoIGEgcGlwZSB0byB0aGUKK2RhZW1vbiwgdGhlbiB0aGlzIGlzIG9ubHkgb2YgdXNlIHRvIHRoZSBkYWVtb24uIEkgd291bGQgYXJndWUgdGhhdCB0aGUKK25hdHVyYWwgd2F5IHRvIHByZXNlbnQgdGhpcyBkYXRhIGlzIHZpYSBhIGZpbGVzeXN0ZW0gKHNpbmNlIG1hbnkgb2YKK3RoZSBldmVudHMgd2lsbCBiZSBvZiBhIGhpZXJhcmNoaWNhbCBuYXR1cmUpLCBzdWNoIGFzIGRldmZzLgorUHJlc2VudGluZyB0aGUgZGF0YSBhcyBhIGZpbGVzeXN0ZW0gbWFrZXMgaXQgZWFzeSBmb3IgdGhlIHVzZXIgdG8gc2VlCit3aGF0IGlzIGF2YWlsYWJsZSBhbmQgYWxzbyBtYWtlcyBpdCBlYXN5IHRvIHdyaXRlIHNjcmlwdHMgdG8gc2NhbiB0aGUKKyJkYXRhYmFzZSIKKworCit0aGUgdGlnaHQgYmluZGluZyBiZXR3ZWVuIGRldmljZSBub2RlcyBhbmQgZHJpdmVycyBpcyBubyBsb25nZXIKK3Bvc3NpYmxlIChyZXF1aXJpbmcgdGhlIG90aGVyd2lzZSBwZXJmZWN0bHkgYXZvaWRhYmxlCit0YWJsZSBsb29rdXBzKQorCisKK3lvdSBjYW5ub3QgY2F0Y2ggaW5vZGUgbG9va3VwIGV2ZW50cyBvbiAvZGV2IHdoaWNoIG1lYW5zCit0aGF0IG1vZHVsZSBhdXRvbG9hZGluZyByZXF1aXJlcyBkZXZpY2Ugbm9kZXMgdG8gYmUgY3JlYXRlZC4gVGhpcyBpcyBhCitwcm9ibGVtLCBwYXJ0aWN1bGFybHkgZm9yIGRyaXZlcnMgd2hlcmUgb25seSBhIGZldyBpbm9kZXMgYXJlIGNyZWF0ZWQKK2Zyb20gYSBwb3RlbnRpYWxseSBsYXJnZSBzZXQKKworCit0aGlzIHRlY2huaXF1ZSBjYW4ndCBiZSB1c2VkIHdoZW4gdGhlIHJvb3QgRlMgaXMgbW91bnRlZAorcmVhZC1vbmx5CisKKworCisKK0p1c3QgaW1wbGVtZW50IGEgYmV0dGVyIHNjc2lkZXYKKworVGhpcyBzdWdnZXN0aW9uIGludm9sdmVzIHRha2luZyB0aGUgc2NzaWRldiBwcm9ncmFtbWUgYW5kCitleHRlbmRpbmcgaXQgdG8gc2NhbiBmb3IgYWxsIGRldmljZXMsIG5vdCBqdXN0IFNDU0kgZGV2aWNlcy4gVGhlCitzY3NpZGV2IHByb2dyYW1tZSB3b3JrcyBieSBzY2FubmluZyAvcHJvYy9zY3NpCisKK1Byb2JsZW1zOgorCisKK3RoZSBrZXJuZWwgZG9lcyBub3QgY3VycmVudGx5IHByb3ZpZGUgYSBsaXN0IG9mIGFsbCBkZXZpY2VzCithdmFpbGFibGUuIE5vdCBhbGwgZHJpdmVycyByZWdpc3RlciBlbnRyaWVzIGluIC9wcm9jIG9yCitnZW5lcmF0ZSBrZXJuZWwgbWVzc2FnZXMKKworCit0aGVyZSBpcyBubyB1bmlmb3JtIG1lY2hhbmlzbSB0byByZWdpc3RlciBkZXZpY2VzIG90aGVyIHRoYW4gdGhlCitkZXZmcyBBUEkKKworCitpbXBsZW1lbnRpbmcgc3VjaCBhbiBBUEkgaXMgdGhlbiB0aGUgc2FtZSBhcyB0aGUKK3Byb3Bvc2FsIGFib3ZlCisKKworCisKK1B1dCAvZGV2IG9uIGEgcmFtZGlzYworCitUaGlzIHN1Z2dlc3Rpb24gaW52b2x2ZXMgY3JlYXRpbmcgYSByYW1kaXNjIGFuZCBwb3B1bGF0aW5nIGl0IHdpdGgKK2RldmljZSBub2RlcyBhbmQgdGhlbiBtb3VudGluZyBpdCBvdmVyIC9kZXYuCisKK1Byb2JsZW1zOgorCisKKwordGhpcyBkb2Vzbid0IGhlbHAgd2hlbiBtb3VudGluZyB0aGUgcm9vdCBmaWxlc3lzdGVtLCBzaW5jZSB5b3UKK3N0aWxsIG5lZWQgYSBkZXZpY2Ugbm9kZSB0byBkbyB0aGF0CisKKworaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgdGVjaG5pcXVlIGZvciB0aGUgcm9vdCBkZXZpY2Ugbm9kZSBhcword2VsbCwgeW91IG5lZWQgdG8gdXNlIGluaXRyZC4gVGhpcyBjb21wbGljYXRlcyB0aGUgYm9vdGluZyBzZXF1ZW5jZQorYW5kIG1ha2VzIGl0IHNpZ25pZmljYW50bHkgaGFyZGVyIHRvIGFkbWluaXN0ZXIgYW5kIGNvbmZpZ3VyZS4gVGhlCitpbml0cmQgaXMgZXNzZW50aWFsbHkgb3BhcXVlLCByb2JiaW5nIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvZiBlYXN5Citjb25maWd1cmF0aW9uCisKKworaW5zdWZmaWNpZW50IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSB0byBjb3JyZWN0bHkgcG9wdWxhdGUgdGhlCityYW1kaXNjLiBTbyB3ZSBjb21lIGJhY2sgdG8gdGhlCitwcm9wb3NhbCBhYm92ZSB0byAic29sdmUiIHRoaXMKKworCithIHJhbWRpc2MtYmFzZWQgc29sdXRpb24gd291bGQgdGFrZSBtb3JlIGtlcm5lbCBtZW1vcnksIHNpbmNlIHRoZQorYmFja2luZyBzdG9yZSB3b3VsZCBiZSAoYXQgYmVzdCkgbm9ybWFsIFZGUyBpbm9kZXMgYW5kIGRlbnRyaWVzLCB3aGljaAordGFrZSAyODQgYnl0ZXMgYW5kIDExMiBieXRlcywgcmVzcGVjdGl2ZWx5LCBmb3IgZWFjaCBlbnRyeS4gQ29tcGFyZQordGhhdCB0byA3MiBieXRlcyBmb3IgZGV2ZnMKKworCisKKworRG8gbm90aGluZzogdGhlcmUncyBubyBwcm9ibGVtCisKK1NvbWV0aW1lcyBwZW9wbGUgY2FuIGJlIGhlYXJkIHRvIGNsYWltIHRoYXQgdGhlIGV4aXN0aW5nIHNjaGVtZSBpcworZmluZS4gVGhpcyBpcyB3aGF0IHRoZXkncmUgaWdub3Jpbmc6CisKKworZGV2aWNlIG51bWJlciBzaXplICg4IGJpdHMgZWFjaCBmb3IgbWFqb3IgYW5kIG1pbm9yKSBpcyBhIHJlYWwKK2xpbWl0YXRpb24sIGFuZCBtdXN0IGJlIGZpeGVkIHNvbWVob3cuIFN5c3RlbXMgd2l0aCBsYXJnZSBudW1iZXJzIG9mCitTQ1NJIGRldmljZXMsIGZvciBleGFtcGxlLCB3aWxsIGNvbnRpbnVlIHRvIGNvbnN1bWUgdGhlIHJlbWFpbmluZwordW5hbGxvY2F0ZWQgbWFqb3IgbnVtYmVycy4gVVNCIHdpbGwgYWxzbyBuZWVkIHRvIHB1c2ggYmV5b25kIHRoZSA4IGJpdAorbWlub3IgbGltaXRhdGlvbgorCisKK3NpbXBseSBpbmNyZWFzaW5nIHRoZSBkZXZpY2UgbnVtYmVyIHNpemUgaXMgaW5zdWZmaWNpZW50LiBBcGFydAorZnJvbSBjYXVzaW5nIGEgbG90IG9mIHBhaW4sIGl0IGRvZXNuJ3Qgc29sdmUgdGhlIG1hbmFnZW1lbnQgaXNzdWVzCitvZiBhIC9kZXYgd2l0aCB0aG91c2FuZHMgb3IgbW9yZSBkZXZpY2Ugbm9kZXMKKworCitpZ25vcmluZyB0aGUgcHJvYmxlbSBvZiBhIGh1Z2UgL2RldiB3aWxsIG5vdCBtYWtlIGl0IGdvCithd2F5LCBhbmQgZGlzbWlzc2VzIHRoZSBsZWdpdGltYWN5IG9mIGEgbGFyZ2UgbnVtYmVyIG9mIHBlb3BsZSB3aG8KK3dhbnQgYSBkeW5hbWljIC9kZXYKKworCit0aGUgc3RhbmRhcmQgcmVzcG9uc2UgdGhlbiBiZWNvbWVzOiAid3JpdGUgYSBkZXZpY2UgbWFuYWdlbWVudAorZGFlbW9uIiwgd2hpY2ggYnJpbmdzIHVzIGJhY2sgdG8gdGhlCitwcm9wb3NhbCBhYm92ZQorCisKKworCitXaGF0IEkgZG9uJ3QgbGlrZSBhYm91dCBkZXZmcworCitIZXJlIGFyZSBzb21lIGNvbW1vbiBjb21wbGFpbnRzIGFib3V0IGRldmZzLCBhbmQgc29tZSBzdWdnZXN0aW9ucyBhbmQKK3NvbHV0aW9ucyB0aGF0IG1heSBtYWtlIGl0IG1vcmUgcGFsYXRhYmxlIGZvciB5b3UuIEkgY2FuJ3QgcGxlYXNlCitldmVyeWJvZHksIGJ1dCBJIGRvIHRyeSA6LSkKKworSSBoYXRlIHRoZSBuYW1pbmcgc2NoZW1lCisKK0ZpcnN0LCByZW1lbWJlciB0aGF0IG5vIG5hbWluZyBzY2hlbWUgd2lsbCBwbGVhc2UgZXZlcnlib2R5LiBZb3UgaGF0ZQordGhlIHNjaGVtZSwgb3RoZXJzIGxvdmUgaXQuIFdobydzIHRvIHNheSB3aG8ncyByaWdodCBhbmQgd2hvJ3Mgd3Jvbmc/CitVbHRpbWF0ZWx5LCB0aGUgcGVyc29uIHdobyB3cml0ZXMgdGhlIGNvZGUgZ2V0cyB0byBjaG9vc2UsIGFuZCB3aGF0CitleGlzdHMgbm93IGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGNob2ljZXMgbWFkZSBieSB0aGUKK2RldmZzIGF1dGhvciBhbmQgdGhlCitrZXJuZWwgbWFpbnRhaW5lciAoTGludXMpLgorCitIb3dldmVyLCBub3QgYWxsIGlzIGxvc3QuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBuYW1pbmcKK3NjaGVtZSwgaXQgaXMgYSBzaW1wbGUgbWF0dGVyIHRvIHdyaXRlIGEgc3RhbmRhbG9uZSBzY3JpcHQsIGhhY2sKK2RldmZzZCwgb3Igd3JpdGUgYSBzY3JpcHQgY2FsbGVkIGJ5IGRldmZzZC4gWW91IGNhbiBjcmVhdGUgd2hhdGV2ZXIKK25hbWluZyBzY2hlbWUgeW91IGxpa2UuCisKK0Z1cnRoZXIsIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgdHJhY2VzIG9mIHRoZSBkZXZmcyBuYW1pbmcgc2NoZW1lCitmcm9tIC9kZXYsIHlvdSBjYW4gbW91bnQgZGV2ZnMgZWxzZXdoZXJlIChzYXkKKy9kZXZmcykgYW5kIHBvcHVsYXRlIC9kZXYgd2l0aCBsaW5rcyBpbnRvCisvZGV2ZnMuIFRoaXMgcG9wdWxhdGlvbiBjYW4gYmUgYXV0b21hdGVkIHVzaW5nIGRldmZzZCBpZiB5b3UKK3dpc2guCisKK1lvdSBjYW4gZXZlbiB1c2UgdGhlIFZGUyBiaW5kaW5nIGZhY2lsaXR5IHRvIG1ha2UgdGhlIGxpbmtzLCByYXRoZXIKK3RoYW4gdXNpbmcgc3ltYm9saWMgbGlua3MuIFRoaXMgd2F5LCB5b3UgZG9uJ3QgZXZlbiBoYXZlIHRvIHNlZSB0aGUKKyJkZXN0aW5hdGlvbiIgb2YgdGhlc2Ugc3ltYm9saWMgbGlua3MuCisKK0RldmZzIHB1dHMgcG9saWN5IGludG8gdGhlIGtlcm5lbAorCitUaGVyZSdzIGFscmVhZHkgcG9saWN5IGluIHRoZSBrZXJuZWwuIERldmljZSBudW1iZXJzIGFyZSBpbiBmYWN0Citwb2xpY3kgKHdoeSBzaG91bGQgdGhlIGtlcm5lbCBkaWN0YXRlIHdoYXQgZGV2aWNlIG51bWJlcnMgSSB1c2U/KS4KK0ZhY2UgaXQsIHNvbWUgcG9saWN5IGhhcyB0byBiZSBpbiB0aGUga2VybmVsLiBUaGUgcmVhbCBkaWZmZXJlbmNlCitiZXR3ZWVuIGRldmljZSBuYW1lcyBhcyBwb2xpY3kgYW5kIGRldmljZSBudW1iZXJzIGFzIHBvbGljeSBpcyB0aGF0CitubyBvbmUgd2lsbCB1c2UgZGV2aWNlIG51bWJlcnMgZGlyZWN0bHksIGJlY2F1c2UgZGV2aWNlCitudW1iZXJzIGFyZSBkZXZvaWQgb2YgbWVhbmluZyB0byBodW1hbnMgYW5kIGFyZSB1Z2x5LiBBdCBsZWFzdCB3aXRoCit0aGUgZGV2ZnMgZGV2aWNlIG5hbWVzLCAoZXZlbiB0aG91Z2ggeW91IGNhbiBhZGQgeW91ciBvd24gbmFtaW5nCitzY2hlbWUpIHNvbWUgcGVvcGxlIHdpbGwgdXNlIHRoZSBkZXZmcy1zdXBwbGllZCBuYW1lcyBkaXJlY3RseS4gVGhpcworb2ZmZW5kcyBzb21lIHBlb3BsZSA6LSkKKworRGV2ZnMgaXMgYmxvYXR3YXJlCisKK1RoaXMgaXMgbm90IGV2ZW4gcmVtb3RlbHkgdHJ1ZS4gQXMgc2hvd24gYWJvdmUsCitib3RoIGNvZGUgYW5kIGRhdGEgc2l6ZSBhcmUgcXVpdGUgbW9kZXN0LgorCisKK0hvdyB0byByZXBvcnQgYnVncworCitJZiB5b3UgaGF2ZSAob3IgdGhpbmsgeW91IGhhdmUpIGEgYnVnIHdpdGggZGV2ZnMsIHBsZWFzZSBmb2xsb3cgdGhlCitzdGVwcyBiZWxvdzoKKworCisKK21ha2Ugc3VyZSB5b3UgaGF2ZSBlbmFibGVkIGRlYnVnZ2luZyBvdXRwdXQgd2hlbiBjb25maWd1cmluZyB5b3VyCitrZXJuZWwuIFlvdSB3aWxsIG5lZWQgdG8gc2V0IChhdCBsZWFzdCkgdGhlIGZvbGxvd2luZyBjb25maWcgb3B0aW9uczoKKworQ09ORklHX0RFVkZTX0RFQlVHPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NMQUI9eQorCisKKworcGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgbGF0ZXN0IGRldmZzIHBhdGNoZXMgYXBwbGllZC4gVGhlCitsYXRlc3Qga2VybmVsIHZlcnNpb24gbWlnaHQgbm90IGhhdmUgdGhlIGxhdGVzdCBkZXZmcyBwYXRjaGVzIGFwcGxpZWQKK3lldCAoTGludXMgaXMgdmVyeSBidXN5KQorCisKK3NhdmUgYSBjb3B5IG9mIHlvdXIgY29tcGxldGUga2VybmVsIGxvZ3MgKHByZWZlcmFibHkgYnkKK3VzaW5nIHRoZSBkbWVzZyBwcm9ncmFtbWUpIGZvciBsYXRlciBpbmNsdXNpb24gaW4geW91ciBidWcKK3JlcG9ydC4gWW91IG1heSBuZWVkIHRvIHVzZSB0aGUgLXMgc3dpdGNoIHRvIGluY3JlYXNlIHRoZQoraW50ZXJuYWwgYnVmZmVyIHNpemUgc28geW91IGNhbiBjYXB0dXJlIGFsbCB0aGUgYm9vdCBtZXNzYWdlcy4KK0Rvbid0IGVkaXQgb3IgdHJpbSB0aGUgZG1lc2cgb3V0cHV0CisKKworCisKK3RyeSBib290aW5nIHdpdGggZGV2ZnM9ZGFsbCBwYXNzZWQgdG8gdGhlIGtlcm5lbCBib290Citjb21tYW5kIGxpbmUgKHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb24geW91ciBib290bG9hZGVyIG9uIGhvdyB0byBkbwordGhpcyksIGFuZCBzYXZlIHRoZSByZXN1bHQgdG8gYSBmaWxlLiBUaGlzIG1heSBiZSBxdWl0ZSB2ZXJib3NlLCBhbmQKK2l0IG1heSBvdmVyZmxvdyB0aGUgbWVzc2FnZXMgYnVmZmVyLCBidXQgdHJ5IHRvIGdldCBhcyBtdWNoIG9mIGl0IGFzCit5b3UgY2FuCisKKworaWYgeW91IGdldCBhbiBPb3BzLCBydW4ga3N5bW9vcHMgdG8gZGVjb2RlIGl0IHNvIHRoYXQgdGhlCituYW1lcyBvZiB0aGUgb2ZmZW5kaW5nIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQuIEEgbm9uLWRlY29kZWQgT29wcyBpcworcHJldHR5IHVzZWxlc3MKKworCitzZW5kIGEgY29weSBvZiB5b3VyIGRldmZzZCBjb25maWd1cmF0aW9uIGZpbGUocykKKworc2VuZCB0aGUgYnVnIHJlcG9ydCB0byBtZSBmaXJzdC4KK0Rvbid0IGV4cGVjdCB0aGF0IEkgd2lsbCBzZWUgaXQgaWYgeW91IHBvc3QgaXQgdG8gdGhlIGxpbnV4LWtlcm5lbAorbWFpbGluZyBsaXN0LiBJbmNsdWRlIGFsbCB0aGUgaW5mb3JtYXRpb24gbGlzdGVkIGFib3ZlLCBwbHVzCithbnl0aGluZyBlbHNlIHRoYXQgeW91IHRoaW5rIG1pZ2h0IGJlIHJlbGV2YW50LiBQdXQgdGhlIHN0cmluZworZGV2ZnMgc29tZXdoZXJlIGluIHRoZSBzdWJqZWN0IGxpbmUsIHNvIG15IG1haWwgZmlsdGVycyBtYXJrCitpdCBhcyB1cmdlbnQKKworCisKKworSGVyZSBpcyBhIGdlbmVyYWwgZ3VpZGUgb24gaG93IHRvIGFzayBxdWVzdGlvbnMgaW4gYSB3YXkgdGhhdCBncmVhdGx5CitpbXByb3ZlcyB5b3VyIGNoYW5jZXMgb2YgZ2V0dGluZyBhIHJlcGx5OgorCitodHRwOi8vd3d3LnR1eGVkby5vcmcvfmVzci9mYXFzL3NtYXJ0LXF1ZXN0aW9ucy5odG1sLiBJZiB5b3UgaGF2ZQorYSBidWcgdG8gcmVwb3J0LCB5b3Ugc2hvdWxkIGFsc28gcmVhZAorCitodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2J1Z3MuaHRtbC4KKworCitTdHJhbmdlIGtlcm5lbCBtZXNzYWdlcworCitZb3UgbWF5IHNlZSBkZXZmcy1yZWxhdGVkIG1lc3NhZ2VzIGluIHlvdXIga2VybmVsIGxvZ3MuIEJlbG93IGFyZSBzb21lCittZXNzYWdlcyBhbmQgd2hhdCB0aGV5IG1lYW4gKGFuZCB3aGF0IHlvdSBzaG91bGQgZG8gYWJvdXQgdGhlbSwgaWYKK2FueXRoaW5nKS4KKworCisKK2RldmZzX3JlZ2lzdGVyKGZyZWQpOiBjb3VsZCBub3QgYXBwZW5kIHRvIHBhcmVudCwgZXJyOiAtMTcKKworWW91IG5lZWQgdG8gY2hlY2sgd2hhdCB0aGUgZXJyb3IgY29kZSBtZWFucywgYnV0IHVzdWFsbHkgMTcgbWVhbnMKK0VFWElTVC4gVGhpcyBtZWFucyB0aGF0IGEgZHJpdmVyIGF0dGVtcHRlZCB0byBjcmVhdGUgYW4gZW50cnkKK2ZyZWQgaW4gYSBkaXJlY3RvcnksIGJ1dCB0aGVyZSBhbHJlYWR5IHdhcyBhbiBlbnRyeSB3aXRoIHRoYXQKK25hbWUuIFRoaXMgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGZsYXdlZCBib290IHNjcmlwdHMgd2hpY2ggdW50YXIgYSBidW5jaAorb2YgaW5vZGVzIGludG8gL2RldiwgYXMgYSB3YXkgdG8gcmVzdG9yZSBwZXJtaXNzaW9ucy4gVGhpcworbWVzc2FnZSBpcyBoYXJtbGVzcywgYXMgdGhlIGRldmljZSBub2RlcyB3aWxsIHN0aWxsCitwcm92aWRlIGFjY2VzcyB0byB0aGUgZHJpdmVyICh1bmxlc3MgeW91IHVzZSB0aGUgZGV2ZnM9b25seQorYm9vdCBvcHRpb24sIHdoaWNoIGlzIG9ubHkgZm9yIGRlZGljYXRlZCBzb3VsczotKS4gSWYgeW91IHdhbnQgdG8gZ2V0CityaWQgb2YgdGhlc2UgYW5ub3lpbmcgbWVzc2FnZXMsIHVwZ3JhZGUgdG8gZGV2ZnNkLXYxLjMuMjAgYW5kIHVzZSB0aGUKK3JlY29tbWVuZGVkIFJFU1RPUkUgZGlyZWN0aXZlIHRvIHJlc3RvcmUgcGVybWlzc2lvbnMuCisKKworZGV2ZnNfbWtfZGlyKGJpbGwpOiB1c2luZyBvbGQgZW50cnkgaW4gZGlyOiBjMTgwODcyNCAiIgorCitUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIG1lc3NhZ2UgYWJvdmUsIGV4Y2VwdCB0aGF0IGEgZHJpdmVyIGF0dGVtcHRlZAordG8gY3JlYXRlIGEgZGlyZWN0b3J5IG5hbWVkIGJpbGwsIGFuZCB0aGUgcGFyZW50IGRpcmVjdG9yeQoraGFzIGFuIGVudHJ5IHdpdGggdGhlIHNhbWUgbmFtZS4gSW4gdGhpcyBjYXNlLCB0byBlbnN1cmUgdGhhdCBkcml2ZXJzCitjb250aW51ZSB0byB3b3JrIHByb3Blcmx5LCB0aGUgb2xkIGVudHJ5IGlzIHJlLXVzZWQgYW5kIGdpdmVuIHRvIHRoZQorZHJpdmVyLiBJbiAyLjUga2VybmVscywgdGhlIGRyaXZlciBpcyBnaXZlbiBhIE5VTEwgZW50cnksIGFuZCB0aHVzLAordW5kZXIgcmFyZSBjaXJjdW1zdGFuY2VzLCBtYXkgbm90IGNyZWF0ZSB0aGUgcmVxdWlyZSBkZXZpY2Ugbm9kZXMuCitUaGUgc29sdXRpb24gaXMgdGhlIHNhbWUgYXMgYWJvdmUuCisKKworCisKKworQ29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBkZXZmc2QKKworVXN1YWxseSwgeW91IGNhbiBjb21waWxlIGRldmZzZCBqdXN0IGJ5IHR5cGluZyBpbgorbWFrZSBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSwgZm9sbG93ZWQgYnkgYSBtYWtlCitpbnN0YWxsIChhcyByb290KS4gU29tZXRpbWVzLCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMsIHBhcnRpY3VsYXJseQorb24gYnJva2VuIGNvbmZpZ3VyYXRpb25zLgorCisKKworZXJyb3IgbWVzc2FnZXMgcmVsYXRpbmcgdG8gREVWRlNEX05PVElGWV9ERUxFVEUKKworVGhpcyBoYXBwZW5lZCBiZWNhdXNlIHlvdSBoYXZlIGFuIGFuY2llbnQgc2V0IG9mIGtlcm5lbCBoZWFkZXJzCitpbnN0YWxsZWQgaW4gL3Vzci9pbmNsdWRlL2xpbnV4IG9yIC91c3Ivc3JjL2xpbnV4LgorSW5zdGFsbCBrZXJuZWwgMi40LjEwIG9yIGxhdGVyLiBZb3UgbWF5IG5lZWQgdG8gcGFzcyB0aGUKK0tFUk5FTF9ESVIgdmFyaWFibGUgdG8gbWFrZSAoaWYgeW91IGRpZCBub3QgaW5zdGFsbAordGhlIG5ldyBrZXJuZWwgc291cmNlcyBhcyAvdXNyL3NyYy9saW51eCksIG9yIHlvdSBtYXkgY29weQordGhlIGRldmZzX2ZzLmggZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGludG8KKy91c3IvaW5jbHVkZS9saW51eC4KKworCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitPdGhlciByZXNvdXJjZXMKKworCisKK0RvdWdsYXMgR2lsYmVydCBoYXMgd3JpdHRlbiBhIHVzZWZ1bCBkb2N1bWVudCBhdAorCitodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvZGV2ZnNfc2NzaS5odG1sIHdoaWNoCitleHBsb3JlcyB0aGUgU0NTSSBzdWJzeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBkZXZmcworCisKK0RvdWdsYXMgR2lsYmVydCBoYXMgd3JpdHRlbiBhbm90aGVyIHVzZWZ1bCBkb2N1bWVudCBhdAorCitodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2NzaS9TQ1NJLTIuNC1IT1dUTy8gd2hpY2gKK2Rpc2N1c3NlcyB0aGUgTGludXggU0NTSSBzdWJzeXN0ZW0gaW4gMi40LgorCisKK0pvaGFubmVzIEVyZGZlbHQgaGFzIHN0YXJ0ZWQgYSBkaXNjdXNzaW9uIHBhcGVyIG9uIExpbnV4IGFuZAoraG90LXN3YXAgZGV2aWNlcywgZGVzY3JpYmluZyB3aGF0IHRoZSByZXF1aXJlbWVudHMgYXJlIGZvciBhIHNjYWxhYmxlCitzb2x1dGlvbiBhbmQgaG93IGFuZCB3aHkgaGUncyB1c2VkIGRldmZzK2RldmZzZC4gTm90ZSB0aGF0IHRoaXMgaXMgYW4KK2Vhcmx5IGRyYWZ0IG9ubHksIGF2YWlsYWJsZSBpbiBwbGFpbiB0ZXh0IGZvcm0gYXQ6CisKK2h0dHA6Ly9qb2hhbm5lcy5lcmRmZWx0LmNvbS9ob3Rzd2FwLnR4dC4KK0pvaGFubmVzIGhhcyBwcm9taXNlZCBhIEhUTUwgdmVyc2lvbiB3aWxsIGZvbGxvdy4KKworCitJIHByZXNlbnRlZCBhbiBpbnZpdGVkIAorcGFwZXIKK2F0IHRoZQorCisybmQgQW5udWFsIFN0b3JhZ2UgTWFuYWdlbWVudCBXb3Jrc2hvcCBoZWxkIGluIE1pYW1pYSwgRmxvcmlkYSwKK1UuUy5BLiBpbiBPY3RvYmVyIDIwMDAuCisKKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworVHJhbnNsYXRpb25zIG9mIHRoaXMgZG9jdW1lbnQKKworVGhpcyBkb2N1bWVudCBoYXMgYmVlbiB0cmFuc2xhdGVkIGludG8gb3RoZXIgbGFuZ3VhZ2VzLgorCisKKworCitUaGUgZG9jdW1lbnQgbWFzdGVyIChpbiBFbmdsaXNoKSBieSByZ29vY2hAYXRuZi5jc2lyby5hdSBpcworYXZhaWxhYmxlIGF0CisKK2h0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvZGV2ZnMuaHRtbAorCisKKworQSBLb3JlYW4gdHJhbnNsYXRpb24gYnkgdmlhdG9yaXNAbm93bnVyaS5uZXQgaXMgYXZhaWxhYmxlIGF0CisKK2h0dHA6Ly95b3VyLmRlc3RpbnkucGUua3IvZGV2ZnMvZGV2ZnMuaHRtbAorCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTW9zdCBmbGFncyBjb3VydGVzeSBvZiBJVEEncyAKK0ZsYWdzIG9mIEFsbCBDb3VudHJpZXMKK3VzZWQgd2l0aCBwZXJtaXNzaW9uLiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvVG9EbyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvVG9EbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmQ1YThmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9Ub0RvCkBAIC0wLDAgKzEsNDAgQEAKKwkJRGV2aWNlIEZpbGUgU3lzdGVtIChkZXZmcykgVG9EbyBMaXN0CisKKwkJUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+CisKKwkJCSAgICAgIDMtSlVMLTIwMDAKKworVGhpcyBpcyBhIGxpc3Qgb2YgdGhpbmdzIHRvIGJlIGRvbmUgZm9yIGJldHRlciBkZXZmcyBzdXBwb3J0IGluIHRoZQorTGludXgga2VybmVsLiBJZiB5b3UnZCBsaWtlIHRvIGNvbnRyaWJ1dGUgdG8gdGhlIGRldmZzLCBwbGVhc2UgaGF2ZSBhCitsb29rIGF0IHRoaXMgbGlzdCBmb3IgYW55dGhpbmcgdGhhdCBpcyB1bmFsbG9jYXRlZC4gQWxzbywgaWYgdGhlcmUgYXJlCitpdGVtcyBtaXNzaW5nIChzdXJlbHkpLCBwbGVhc2UgY29udGFjdCBtZSBzbyBJIGNhbiBhZGQgdGhlbSB0byB0aGUKK2xpc3QgKHByZWZlcmFibHkgd2l0aCB5b3VyIG5hbWUgYXR0YWNoZWQgdG8gdGhlbTotKS4KKworCistID4yNTYgcHR5cworICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+CisKKy0gQW1pZ2EgZmxvcHB5IGRyaXZlciAoZHJpdmVycy9ibG9jay9hbWlmbG9wLmMpCisKKy0gQXRhcmkgZmxvcHB5IGRyaXZlciAoZHJpdmVycy9ibG9jay9hdGFmbG9wLmMpCisKKy0gU1dJTTMgKFN1cGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUgMykgZmxvcHB5IGRyaXZlciAoZHJpdmVycy9ibG9jay9zd2ltMy5jKQorCistIEFtaWdhIFpvcnJvSUkgcmFtZGlzYyBkcml2ZXIgKGRyaXZlcnMvYmxvY2svejJyYW0uYykKKworLSBQYXJhbGxlbCBwb3J0IEFUQVBJIENELVJPTSAoZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMpCisKKy0gUGFyYWxsZWwgcG9ydCBBVEFQSSBmbG9wcHkgKGRyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMpCisKKy0gQVAxMDAwIGJsb2NrIGRyaXZlciAoZHJpdmVycy9hcDEwMDAvYXAuYywgZHJpdmVycy9hcDEwMDAvZGR2LmMpCisKKy0gQXJjaGltZWRlcyBmbG9wcHkgKGRyaXZlcnMvYWNvcm4vYmxvY2svZmQxNzcyLmMpCisKKy0gTUZNIGhhcmQgZHJpdmUgKGRyaXZlcnMvYWNvcm4vYmxvY2svbWZtaGQuYykKKworLSBJMk8gYmxvY2sgZGV2aWNlIChkcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jKQorCistIFNULVJBTSBkZXZpY2UgKGFyY2gvbTY4ay9hdGFyaS9zdHJhbS5jKQorCistIFJhdyBkZXZpY2VzCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvYm9vdC1vcHRpb25zIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9ib290LW9wdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzZDMzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL2Jvb3Qtb3B0aW9ucwpAQCAtMCwwICsxLDY1IEBACisvKiAtKi0gYXV0by1maWxsIC0qLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkJRGV2aWNlIEZpbGUgU3lzdGVtIChkZXZmcykgQm9vdCBPcHRpb25zCisKKwkJUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+CisKKwkJCSAgICAgIDE4LUFVRy0yMDAxCisKKworV2hlbiBDT05GSUdfREVWRlNfREVCVUcgaXMgZW5hYmxlZCwgeW91IGNhbiBwYXNzIHNldmVyYWwgYm9vdCBvcHRpb25zCit0byB0aGUga2VybmVsIHRvIGRlYnVnIGRldmZzLiBUaGUgYm9vdCBvcHRpb25zIGFyZSBwcmVmaXhlZCBieQorImRldmZzPSIsIGFuZCBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gU3BhY2VzIGFyZSBub3QgYWxsb3dlZC4gVGhlCitzeW50YXggbG9va3MgbGlrZSB0aGlzOgorCitkZXZmcz08b3B0aW9uMT4sPG9wdGlvbjI+LDxvcHRpb24zPgorCithbmQgc28gb24uIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudGVkIHRvIHR1cm4gb24gZGVidWdnaW5nIGZvciBtb2R1bGUKK2xvYWQgcmVxdWVzdHMgYW5kIGRldmljZSByZWdpc3RyYXRpb24sIHlvdSB3b3VsZCBkbzoKKworZGV2ZnM9ZG1vZCxkcmVnCisKK1lvdSBtYXkgcHJlZml4ICJubyIgdG8gYW55IG9wdGlvbi4gVGhpcyB3aWxsIGludmVydCB0aGUgb3B0aW9uLgorCisKK0RlYnVnZ2luZyBPcHRpb25zCis9PT09PT09PT09PT09PT09PQorCitUaGVzZSByZXF1aXJlcyBDT05GSUdfREVWRlNfREVCVUcgdG8gYmUgZW5hYmxlZC4KK05vdGUgdGhhdCBhbGwgZGVidWdnaW5nIG9wdGlvbnMgaGF2ZSAnZCcgYXMgdGhlIGZpcnN0IGNoYXJhY3Rlci4gQnkKK2RlZmF1bHQgYWxsIG9wdGlvbnMgYXJlIG9mZi4gQWxsIGRlYnVnZ2luZyBvdXRwdXQgaXMgc2VudCB0byB0aGUKK2tlcm5lbCBsb2dzLiBUaGUgZGVidWdnaW5nIG9wdGlvbnMgZG8gbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBkZXZmcwordmVyc2lvbiBtZXNzYWdlIGFwcGVhcnMgKGp1c3QgcHJpb3IgdG8gdGhlIHJvb3QgZmlsZXN5c3RlbSBiZWluZworbW91bnRlZCkuCisKK1RoZXNlIGFyZSB0aGUgb3B0aW9uczoKKworZG1vZAkJcHJpbnQgbW9kdWxlIGxvYWQgcmVxdWVzdHMgdG8gPHJlcXVlc3RfbW9kdWxlPgorCitkcmVnCQlwcmludCBkZXZpY2UgcmVnaXN0ZXIgcmVxdWVzdHMgdG8gPGRldmZzX3JlZ2lzdGVyPgorCitkdW5yZWcJCXByaW50IGRldmljZSB1bnJlZ2lzdGVyIHJlcXVlc3RzIHRvIDxkZXZmc191bnJlZ2lzdGVyPgorCitkY2hhbmdlCQlwcmludCBkZXZpY2UgY2hhbmdlIHJlcXVlc3RzIHRvIDxkZXZmc19zZXRfZmxhZ3M+CisKK2RpbG9va3VwCXByaW50IGlub2RlIGxvb2t1cCByZXF1ZXN0cworCitkaWdldAkJcHJpbnQgVkZTIGlub2RlIGFsbG9jYXRpb25zCisKK2RpdW5saW5rCXByaW50IGlub2RlIHVubGlua3MKKworZGljaGFuZ2UJcHJpbnQgaW5vZGUgY2hhbmdlcworCitkaW1rbm9kCQlwcmludCBjYWxscyB0byBta25vZCgyKQorCitkYWxsCQlzb21lIGRlYnVnZ2luZyB0dXJuZWQgb24KKworCitPdGhlciBPcHRpb25zCis9PT09PT09PT09PT09CisKK1RoZXNlIGNvbnRyb2wgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGRldmZzLiBUaGUgb3B0aW9ucyBhcmU6CisKK21vdW50CQltb3VudCBkZXZmcyBvbnRvIC9kZXYgYXQgYm9vdCB0aW1lCisKK29ubHkJCWRpc2FibGUgbm9uLWRldmZzIGRldmljZSBub2RlcyBmb3IgZGV2ZnMtY2FwYWJsZSBkcml2ZXJzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RpcmVjdG9yeS1sb2NraW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kaXJlY3RvcnktbG9ja2luZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDM4MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kaXJlY3RvcnktbG9ja2luZwpAQCAtMCwwICsxLDExMyBAQAorCUxvY2tpbmcgc2NoZW1lIHVzZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zIGlzIGJhc2VkIG9uIHR3bwora2luZHMgb2YgbG9ja3MgLSBwZXItaW5vZGUgKC0+aV9zZW0pIGFuZCBwZXItZmlsZXN5c3RlbSAoLT5zX3Zmc19yZW5hbWVfc2VtKS4KKworCUZvciBvdXIgcHVycG9zZXMgYWxsIG9wZXJhdGlvbnMgZmFsbCBpbiA1IGNsYXNzZXM6CisKKzEpIHJlYWQgYWNjZXNzLiAgTG9ja2luZyBydWxlczogY2FsbGVyIGxvY2tzIGRpcmVjdG9yeSB3ZSBhcmUgYWNjZXNzaW5nLgorCisyKSBvYmplY3QgY3JlYXRpb24uICBMb2NraW5nIHJ1bGVzOiBzYW1lIGFzIGFib3ZlLgorCiszKSBvYmplY3QgcmVtb3ZhbC4gIExvY2tpbmcgcnVsZXM6IGNhbGxlciBsb2NrcyBwYXJlbnQsIGZpbmRzIHZpY3RpbSwKK2xvY2tzIHZpY3RpbSBhbmQgY2FsbHMgdGhlIG1ldGhvZC4KKworNCkgcmVuYW1lKCkgdGhhdCBpcyBfbm90XyBjcm9zcy1kaXJlY3RvcnkuICBMb2NraW5nIHJ1bGVzOiBjYWxsZXIgbG9ja3MKK3RoZSBwYXJlbnQsIGZpbmRzIHNvdXJjZSBhbmQgdGFyZ2V0LCBpZiB0YXJnZXQgYWxyZWFkeSBleGlzdHMgLSBsb2NrcyBpdAorYW5kIHRoZW4gY2FsbHMgdGhlIG1ldGhvZC4KKworNSkgbGluayBjcmVhdGlvbi4gIExvY2tpbmcgcnVsZXM6CisJKiBsb2NrIHBhcmVudAorCSogY2hlY2sgdGhhdCBzb3VyY2UgaXMgbm90IGEgZGlyZWN0b3J5CisJKiBsb2NrIHNvdXJjZQorCSogY2FsbCB0aGUgbWV0aG9kLgorCis2KSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lLiAgVGhlIHRyaWNraWVzdCBpbiB0aGUgd2hvbGUgYnVuY2guICBMb2NraW5nCitydWxlczoKKwkqIGxvY2sgdGhlIGZpbGVzeXN0ZW0KKwkqIGxvY2sgcGFyZW50cyBpbiAiYW5jZXN0b3JzIGZpcnN0IiBvcmRlci4KKwkqIGZpbmQgc291cmNlIGFuZCB0YXJnZXQuCisJKiBpZiBvbGQgcGFyZW50IGlzIGVxdWFsIHRvIG9yIGlzIGEgZGVzY2VuZGVudCBvZiB0YXJnZXQKKwkJZmFpbCB3aXRoIC1FTk9URU1QVFkKKwkqIGlmIG5ldyBwYXJlbnQgaXMgZXF1YWwgdG8gb3IgaXMgYSBkZXNjZW5kZW50IG9mIHNvdXJjZQorCQlmYWlsIHdpdGggLUVMT09QCisJKiBpZiB0YXJnZXQgZXhpc3RzIC0gbG9jayBpdC4KKwkqIGNhbGwgdGhlIG1ldGhvZC4KKworCitUaGUgcnVsZXMgYWJvdmUgb2J2aW91c2x5IGd1YXJhbnRlZSB0aGF0IGFsbCBkaXJlY3RvcmllcyB0aGF0IGFyZSBnb2luZyB0byBiZQorcmVhZCwgbW9kaWZpZWQgb3IgcmVtb3ZlZCBieSBtZXRob2Qgd2lsbCBiZSBsb2NrZWQgYnkgY2FsbGVyLgorCisKK0lmIG5vIGRpcmVjdG9yeSBpcyBpdHMgb3duIGFuY2VzdG9yLCB0aGUgc2NoZW1lIGFib3ZlIGlzIGRlYWRsb2NrLWZyZWUuCitQcm9vZjoKKworCUZpcnN0IG9mIGFsbCwgYXQgYW55IG1vbWVudCB3ZSBoYXZlIGEgcGFydGlhbCBvcmRlcmluZyBvZiB0aGUKK29iamVjdHMgLSBBIDwgQiBpZmYgQSBpcyBhbiBhbmNlc3RvciBvZiBCLgorCisJVGhhdCBvcmRlcmluZyBjYW4gY2hhbmdlLiAgSG93ZXZlciwgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorCisoMSkgaWYgb2JqZWN0IHJlbW92YWwgb3Igbm9uLWNyb3NzLWRpcmVjdG9yeSByZW5hbWUgaG9sZHMgbG9jayBvbiBBIGFuZAorICAgIGF0dGVtcHRzIHRvIGFjcXVpcmUgbG9jayBvbiBCLCBBIHdpbGwgcmVtYWluIHRoZSBwYXJlbnQgb2YgQiB1bnRpbCB3ZQorICAgIGFjcXVpcmUgdGhlIGxvY2sgb24gQi4gIChQcm9vZjogb25seSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lIGNhbiBjaGFuZ2UKKyAgICB0aGUgcGFyZW50IG9mIG9iamVjdCBhbmQgaXQgd291bGQgaGF2ZSB0byBsb2NrIHRoZSBwYXJlbnQpLgorCisoMikgaWYgY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZSBob2xkcyB0aGUgbG9jayBvbiBmaWxlc3lzdGVtLCBvcmRlciB3aWxsIG5vdAorICAgIGNoYW5nZSB1bnRpbCByZW5hbWUgYWNxdWlyZXMgYWxsIGxvY2tzLiAgKFByb29mOiBvdGhlciBjcm9zcy1kaXJlY3RvcnkKKyAgICByZW5hbWVzIHdpbGwgYmUgYmxvY2tlZCBvbiBmaWxlc3lzdGVtIGxvY2sgYW5kIHdlIGRvbid0IHN0YXJ0IGNoYW5naW5nCisgICAgdGhlIG9yZGVyIHVudGlsIHdlIGhhZCBhY3F1aXJlZCBhbGwgbG9ja3MpLgorCisoMykgYW55IG9wZXJhdGlvbiBob2xkcyBhdCBtb3N0IG9uZSBsb2NrIG9uIG5vbi1kaXJlY3Rvcnkgb2JqZWN0IGFuZAorICAgIHRoYXQgbG9jayBpcyBhY3F1aXJlZCBhZnRlciBhbGwgb3RoZXIgbG9ja3MuICAoUHJvb2Y6IHNlZSBkZXNjcmlwdGlvbnMKKyAgICBvZiBvcGVyYXRpb25zKS4KKworCU5vdyBjb25zaWRlciB0aGUgbWluaW1hbCBkZWFkbG9jay4gIEVhY2ggcHJvY2VzcyBpcyBibG9ja2VkIG9uCithdHRlbXB0IHRvIGFjcXVpcmUgc29tZSBsb2NrIGFuZCBhbHJlYWR5IGhvbGRzIGF0IGxlYXN0IG9uZSBsb2NrLiAgTGV0J3MKK2NvbnNpZGVyIHRoZSBzZXQgb2YgY29udGVuZGVkIGxvY2tzLiAgRmlyc3Qgb2YgYWxsLCBmaWxlc3lzdGVtIGxvY2sgaXMKK25vdCBjb250ZW5kZWQsIHNpbmNlIGFueSBwcm9jZXNzIGJsb2NrZWQgb24gaXQgaXMgbm90IGhvbGRpbmcgYW55IGxvY2tzLgorVGh1cyBhbGwgcHJvY2Vzc2VzIGFyZSBibG9ja2VkIG9uIC0+aV9zZW0uCisKKwlOb24tZGlyZWN0b3J5IG9iamVjdHMgYXJlIG5vdCBjb250ZW5kZWQgZHVlIHRvICgzKS4gIFRodXMgbGluaworY3JlYXRpb24gY2FuJ3QgYmUgYSBwYXJ0IG9mIGRlYWRsb2NrIC0gaXQgY2FuJ3QgYmUgYmxvY2tlZCBvbiBzb3VyY2UKK2FuZCBpdCBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgaG9sZCBhbnkgbG9ja3MuCisKKwlBbnkgY29udGVuZGVkIG9iamVjdCBpcyBlaXRoZXIgaGVsZCBieSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lIG9yCitoYXMgYSBjaGlsZCB0aGF0IGlzIGFsc28gY29udGVuZGVkLiAgSW5kZWVkLCBzdXBwb3NlIHRoYXQgaXQgaXMgaGVsZCBieQorb3BlcmF0aW9uIG90aGVyIHRoYW4gY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZS4gIFRoZW4gdGhlIGxvY2sgdGhpcyBvcGVyYXRpb24KK2lzIGJsb2NrZWQgb24gYmVsb25ncyB0byBjaGlsZCBvZiB0aGF0IG9iamVjdCBkdWUgdG8gKDEpLgorCisJSXQgbWVhbnMgdGhhdCBvbmUgb2YgdGhlIG9wZXJhdGlvbnMgaXMgY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZS4KK090aGVyd2lzZSB0aGUgc2V0IG9mIGNvbnRlbmRlZCBvYmplY3RzIHdvdWxkIGJlIGluZmluaXRlIC0gZWFjaCBvZiB0aGVtCit3b3VsZCBoYXZlIGEgY29udGVuZGVkIGNoaWxkIGFuZCB3ZSBoYWQgYXNzdW1lZCB0aGF0IG5vIG9iamVjdCBpcyBpdHMKK293biBkZXNjZW5kZW50LiAgTW9yZW92ZXIsIHRoZXJlIGlzIGV4YWN0bHkgb25lIGNyb3NzLWRpcmVjdG9yeSByZW5hbWUKKyhzZWUgYWJvdmUpLgorCisJQ29uc2lkZXIgdGhlIG9iamVjdCBibG9ja2luZyB0aGUgY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZS4gIE9uZQorb2YgaXRzIGRlc2NlbmRlbnRzIGlzIGxvY2tlZCBieSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lIChvdGhlcndpc2Ugd2UKK3dvdWxkIGFnYWluIGhhdmUgYW4gaW5maW5pdGUgc2V0IG9mIG9mIGNvbnRlbmRlZCBvYmplY3RzKS4gIEJ1dCB0aGF0CittZWFucyB0aGF0IGNyb3NzLWRpcmVjdG9yeSByZW5hbWUgaXMgdGFraW5nIGxvY2tzIG91dCBvZiBvcmRlci4gIER1ZQordG8gKDIpIHRoZSBvcmRlciBoYWRuJ3QgY2hhbmdlZCBzaW5jZSB3ZSBoYWQgYWNxdWlyZWQgZmlsZXN5c3RlbSBsb2NrLgorQnV0IGxvY2tpbmcgcnVsZXMgZm9yIGNyb3NzLWRpcmVjdG9yeSByZW5hbWUgZ3VhcmFudGVlIHRoYXQgd2UgZG8gbm90Cit0cnkgdG8gYWNxdWlyZSBsb2NrIG9uIGRlc2NlbmRlbnQgYmVmb3JlIHRoZSBsb2NrIG9uIGFuY2VzdG9yLgorQ29udHJhZGljdGlvbi4gIEkuZS4gIGRlYWRsb2NrIGlzIGltcG9zc2libGUuICBRLkUuRC4KKworCisJVGhlc2Ugb3BlcmF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBhdm9pZCBsb29wIGNyZWF0aW9uLiAgSW5kZWVkLAordGhlIG9ubHkgb3BlcmF0aW9uIHRoYXQgY291bGQgaW50cm9kdWNlIGxvb3BzIGlzIGNyb3NzLWRpcmVjdG9yeSByZW5hbWUuCitTaW5jZSB0aGUgb25seSBuZXcgKHBhcmVudCwgY2hpbGQpIHBhaXIgYWRkZWQgYnkgcmVuYW1lKCkgaXMgKG5ldyBwYXJlbnQsCitzb3VyY2UpLCBzdWNoIGxvb3Agd291bGQgaGF2ZSB0byBjb250YWluIHRoZXNlIG9iamVjdHMgYW5kIHRoZSByZXN0IG9mIGl0Cit3b3VsZCBoYXZlIHRvIGV4aXN0IGJlZm9yZSByZW5hbWUoKS4gIEkuZS4gYXQgdGhlIG1vbWVudCBvZiBsb29wIGNyZWF0aW9uCityZW5hbWUoKSByZXNwb25zaWJsZSBmb3IgdGhhdCB3b3VsZCBiZSBob2xkaW5nIGZpbGVzeXN0ZW0gbG9jayBhbmQgbmV3IHBhcmVudAord291bGQgaGF2ZSB0byBiZSBlcXVhbCB0byBvciBhIGRlc2NlbmRlbnQgb2Ygc291cmNlLiAgQnV0IHRoYXQgbWVhbnMgdGhhdAorbmV3IHBhcmVudCBoYWQgYmVlbiBlcXVhbCB0byBvciBhIGRlc2NlbmRlbnQgb2Ygc291cmNlIHNpbmNlIHRoZSBtb21lbnQgd2hlbgord2UgaGFkIGFjcXVpcmVkIGZpbGVzeXN0ZW0gbG9jayBhbmQgcmVuYW1lKCkgd291bGQgZmFpbCB3aXRoIC1FTE9PUCBpbiB0aGF0CitjYXNlLgorCisJV2hpbGUgdGhpcyBsb2NraW5nIHNjaGVtZSB3b3JrcyBmb3IgYXJiaXRyYXJ5IERBR3MsIGl0IHJlbGllcyBvbgorYWJpbGl0eSB0byBjaGVjayB0aGF0IGRpcmVjdG9yeSBpcyBhIGRlc2NlbmRlbnQgb2YgYW5vdGhlciBvYmplY3QuICBDdXJyZW50CitpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgZGlyZWN0b3J5IGdyYXBoIGlzIGEgdHJlZS4gIFRoaXMgYXNzdW1wdGlvbiBpcworYWxzbyBwcmVzZXJ2ZWQgYnkgYWxsIG9wZXJhdGlvbnMgKGNyb3NzLWRpcmVjdG9yeSByZW5hbWUgb24gYSB0cmVlIHRoYXQgd291bGQKK25vdCBpbnRyb2R1Y2UgYSBjeWNsZSB3aWxsIGxlYXZlIGl0IGEgdHJlZSBhbmQgbGluaygpIGZhaWxzIGZvciBkaXJlY3RvcmllcykuCisKKwlOb3RpY2UgdGhhdCAiZGlyZWN0b3J5IiBpbiB0aGUgYWJvdmUgPT0gImFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZQorY2hpbGRyZW4iLCBzbyBpZiB3ZSBhcmUgZ29pbmcgdG8gaW50cm9kdWNlIGh5YnJpZCBvYmplY3RzIHdlIHdpbGwgbmVlZAorZWl0aGVyIHRvIG1ha2Ugc3VyZSB0aGF0IGxpbmsoMikgZG9lc24ndCB3b3JrIGZvciB0aGVtIG9yIHRvIG1ha2UgY2hhbmdlcworaW4gaXNfc3ViZGlyKCkgdGhhdCB3b3VsZCBtYWtlIGl0IHdvcmsgZXZlbiBpbiBwcmVzZW5jZSBvZiBzdWNoIGJlYXN0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Y2I5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0CkBAIC0wLDAgKzEsMzgzIEBACisKK1RoZSBTZWNvbmQgRXh0ZW5kZWQgRmlsZXN5c3RlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2V4dDIgd2FzIG9yaWdpbmFsbHkgcmVsZWFzZWQgaW4gSmFudWFyeSAxOTkzLiAgV3JpdHRlbiBieSBSXCdlbXkgQ2FyZCwKK1RoZW9kb3JlIFRzJ28gYW5kIFN0ZXBoZW4gVHdlZWRpZSwgaXQgd2FzIGEgbWFqb3IgcmV3cml0ZSBvZiB0aGUKK0V4dGVuZGVkIEZpbGVzeXN0ZW0uICBJdCBpcyBjdXJyZW50bHkgc3RpbGwgKEFwcmlsIDIwMDEpIHRoZSBwcmVkb21pbmFudAorZmlsZXN5c3RlbSBpbiB1c2UgYnkgTGludXguICBUaGVyZSBhcmUgYWxzbyBpbXBsZW1lbnRhdGlvbnMgYXZhaWxhYmxlCitmb3IgTmV0QlNELCBGcmVlQlNELCB0aGUgR05VIEhVUkQsIFdpbmRvd3MgOTUvOTgvTlQsIE9TLzIgYW5kIFJJU0MgT1MuCisKK09wdGlvbnMKKz09PT09PT0KKworTW9zdCBkZWZhdWx0cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLCBhbmQgY2FuIGJlCitzZXQgdXNpbmcgdHVuZTJmcyg4KS4gS2VybmVsLWRldGVybWluZWQgZGVmYXVsdHMgYXJlIGluZGljYXRlZCBieSAoKikuCisKK2JzZGRmCQkJKCopCU1ha2VzIGBkZicgYWN0IGxpa2UgQlNELgorbWluaXhkZgkJCQlNYWtlcyBgZGYnIGFjdCBsaWtlIE1pbml4LgorCitjaGVjawkJCQlDaGVjayBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBhdCBtb3VudCB0aW1lCisJCQkJKHJlcXVpcmVzIENPTkZJR19FWFQyX0NIRUNLKS4KK2NoZWNrPW5vbmUsIG5vY2hlY2sJKCopCURvbid0IGRvIGV4dHJhIGNoZWNraW5nIG9mIGJpdG1hcHMgb24gbW91bnQKKwkJCQkoY2hlY2s9bm9ybWFsIGFuZCBjaGVjaz1zdHJpY3Qgb3B0aW9ucyByZW1vdmVkKQorCitkZWJ1ZwkJCQlFeHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgc2VudCB0byB0aGUKKwkJCQlrZXJuZWwgc3lzbG9nLiAgVXNlZnVsIGZvciBkZXZlbG9wZXJzLgorCitlcnJvcnM9Y29udGludWUJCQlLZWVwIGdvaW5nIG9uIGEgZmlsZXN5c3RlbSBlcnJvci4KK2Vycm9ycz1yZW1vdW50LXJvCQlSZW1vdW50IHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seSBvbiBhbiBlcnJvci4KK2Vycm9ycz1wYW5pYwkJCVBhbmljIGFuZCBoYWx0IHRoZSBtYWNoaW5lIGlmIGFuIGVycm9yIG9jY3Vycy4KKworZ3JwaWQsIGJzZGdyb3VwcwkJR2l2ZSBvYmplY3RzIHRoZSBzYW1lIGdyb3VwIElEIGFzIHRoZWlyIHBhcmVudC4KK25vZ3JwaWQsIHN5c3Zncm91cHMJCU5ldyBvYmplY3RzIGhhdmUgdGhlIGdyb3VwIElEIG9mIHRoZWlyIGNyZWF0b3IuCisKK25vdWlkMzIJCQkJVXNlIDE2LWJpdCBVSURzIGFuZCBHSURzLgorCitvbGRhbGxvYwkJCUVuYWJsZSB0aGUgb2xkIGJsb2NrIGFsbG9jYXRvci4gT3Jsb3Ygc2hvdWxkCisJCQkJaGF2ZSBiZXR0ZXIgcGVyZm9ybWFuY2UsIHdlJ2QgbGlrZSB0byBnZXQgc29tZQorCQkJCWZlZWRiYWNrIGlmIGl0J3MgdGhlIGNvbnRyYXJ5IGZvciB5b3UuCitvcmxvdgkJCSgqKQlVc2UgdGhlIE9ybG92IGJsb2NrIGFsbG9jYXRvci4KKwkJCQkoU2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzE0NjMzLyBhbmQKKwkJCQlodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8xNDQ0Ni8uKQorCityZXN1aWQ9bgkJCVRoZSB1c2VyIElEIHdoaWNoIG1heSB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KK3Jlc2dpZD1uCQkJVGhlIGdyb3VwIElEIHdoaWNoIG1heSB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KKworc2I9bgkJCQlVc2UgYWx0ZXJuYXRlIHN1cGVyYmxvY2sgYXQgdGhpcyBsb2NhdGlvbi4KKwordXNlcl94YXR0cgkJCUVuYWJsZSAidXNlci4iIFBPU0lYIEV4dGVuZGVkIEF0dHJpYnV0ZXMKKwkJCQkocmVxdWlyZXMgQ09ORklHX0VYVDJfRlNfWEFUVFIpLgorCQkJCVNlZSBhbHNvIGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQKK25vdXNlcl94YXR0cgkJCURvbid0IHN1cHBvcnQgInVzZXIuIiBleHRlbmRlZCBhdHRyaWJ1dGVzLgorCithY2wJCQkJRW5hYmxlIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIHN1cHBvcnQKKwkJCQkocmVxdWlyZXMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMKS4KKwkJCQlTZWUgYWxzbyBodHRwOi8vYWNsLmJlc3RiaXRzLmF0Citub2FjbAkJCQlEb24ndCBzdXBwb3J0IFBPU0lYIEFDTHMuCisKK25vYmgJCQkJRG8gbm90IGF0dGFjaCBidWZmZXJfaGVhZHMgdG8gZmlsZSBwYWdlY2FjaGUuCisKK2dycHF1b3RhLG5vcXVvdGEscXVvdGEsdXNycXVvdGEJUXVvdGEgb3B0aW9ucyBhcmUgc2lsZW50bHkgaWdub3JlZCBieSBleHQyLgorCisKK1NwZWNpZmljYXRpb24KKz09PT09PT09PT09PT0KKworZXh0MiBzaGFyZXMgbWFueSBwcm9wZXJ0aWVzIHdpdGggdHJhZGl0aW9uYWwgVW5peCBmaWxlc3lzdGVtcy4gIEl0IGhhcwordGhlIGNvbmNlcHRzIG9mIGJsb2NrcywgaW5vZGVzIGFuZCBkaXJlY3Rvcmllcy4gIEl0IGhhcyBzcGFjZSBpbiB0aGUKK3NwZWNpZmljYXRpb24gZm9yIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSwgZnJhZ21lbnRzLCB1bmRlbGV0aW9uIGFuZAorY29tcHJlc3Npb24gdGhvdWdoIHRoZXNlIGFyZSBub3QgeWV0IGltcGxlbWVudGVkIChzb21lIGFyZSBhdmFpbGFibGUgYXMKK3NlcGFyYXRlIHBhdGNoZXMpLiAgVGhlcmUgaXMgYWxzbyBhIHZlcnNpb25pbmcgbWVjaGFuaXNtIHRvIGFsbG93IG5ldworZmVhdHVyZXMgKHN1Y2ggYXMgam91cm5hbGxpbmcpIHRvIGJlIGFkZGVkIGluIGEgbWF4aW1hbGx5IGNvbXBhdGlibGUKK21hbm5lci4KKworQmxvY2tzCistLS0tLS0KKworVGhlIHNwYWNlIGluIHRoZSBkZXZpY2Ugb3IgZmlsZSBpcyBzcGxpdCB1cCBpbnRvIGJsb2Nrcy4gIFRoZXNlIGFyZQorYSBmaXhlZCBzaXplLCBvZiAxMDI0LCAyMDQ4IG9yIDQwOTYgYnl0ZXMgKDgxOTIgYnl0ZXMgb24gQWxwaGEgc3lzdGVtcyksCit3aGljaCBpcyBkZWNpZGVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4gIFNtYWxsZXIgYmxvY2tzIG1lYW4KK2xlc3Mgd2FzdGVkIHNwYWNlIHBlciBmaWxlLCBidXQgcmVxdWlyZSBzbGlnaHRseSBtb3JlIGFjY291bnRpbmcgb3ZlcmhlYWQsCithbmQgYWxzbyBpbXBvc2Ugb3RoZXIgbGltaXRzIG9uIHRoZSBzaXplIG9mIGZpbGVzIGFuZCB0aGUgZmlsZXN5c3RlbS4KKworQmxvY2sgR3JvdXBzCistLS0tLS0tLS0tLS0KKworQmxvY2tzIGFyZSBjbHVzdGVyZWQgaW50byBibG9jayBncm91cHMgaW4gb3JkZXIgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24KK2FuZCBtaW5pbWlzZSB0aGUgYW1vdW50IG9mIGhlYWQgc2Vla2luZyB3aGVuIHJlYWRpbmcgYSBsYXJnZSBhbW91bnQKK29mIGNvbnNlY3V0aXZlIGRhdGEuICBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIGJsb2NrIGdyb3VwIGlzIGtlcHQgaW4gYQorZGVzY3JpcHRvciB0YWJsZSBzdG9yZWQgaW4gdGhlIGJsb2NrKHMpIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzdXBlcmJsb2NrLgorVHdvIGJsb2NrcyBuZWFyIHRoZSBzdGFydCBvZiBlYWNoIGdyb3VwIGFyZSByZXNlcnZlZCBmb3IgdGhlIGJsb2NrIHVzYWdlCitiaXRtYXAgYW5kIHRoZSBpbm9kZSB1c2FnZSBiaXRtYXAgd2hpY2ggc2hvdyB3aGljaCBibG9ja3MgYW5kIGlub2RlcworYXJlIGluIHVzZS4gIFNpbmNlIGVhY2ggYml0bWFwIGlzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgYmxvY2ssIHRoaXMgbWVhbnMKK3RoYXQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIGJsb2NrIGdyb3VwIGlzIDggdGltZXMgdGhlIHNpemUgb2YgYSBibG9jay4KKworVGhlIGJsb2NrKHMpIGZvbGxvd2luZyB0aGUgYml0bWFwcyBpbiBlYWNoIGJsb2NrIGdyb3VwIGFyZSBkZXNpZ25hdGVkCithcyB0aGUgaW5vZGUgdGFibGUgZm9yIHRoYXQgYmxvY2sgZ3JvdXAgYW5kIHRoZSByZW1haW5kZXIgYXJlIHRoZSBkYXRhCitibG9ja3MuICBUaGUgYmxvY2sgYWxsb2NhdGlvbiBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gYWxsb2NhdGUgZGF0YSBibG9ja3MKK2luIHRoZSBzYW1lIGJsb2NrIGdyb3VwIGFzIHRoZSBpbm9kZSB3aGljaCBjb250YWlucyB0aGVtLgorCitUaGUgU3VwZXJibG9jaworLS0tLS0tLS0tLS0tLS0KKworVGhlIHN1cGVyYmxvY2sgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvZgordGhlIGZpbGluZyBzeXN0ZW0uICBUaGUgcHJpbWFyeSBjb3B5IG9mIHRoZSBzdXBlcmJsb2NrIGlzIHN0b3JlZCBhdCBhbgorb2Zmc2V0IG9mIDEwMjQgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSwgYW5kIGl0IGlzIGVzc2VudGlhbAordG8gbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0uICBTaW5jZSBpdCBpcyBzbyBpbXBvcnRhbnQsIGJhY2t1cCBjb3BpZXMgb2YKK3RoZSBzdXBlcmJsb2NrIGFyZSBzdG9yZWQgaW4gYmxvY2sgZ3JvdXBzIHRocm91Z2hvdXQgdGhlIGZpbGVzeXN0ZW0uCitUaGUgZmlyc3QgdmVyc2lvbiBvZiBleHQyIChyZXZpc2lvbiAwKSBzdG9yZXMgYSBjb3B5IGF0IHRoZSBzdGFydCBvZgorZXZlcnkgYmxvY2sgZ3JvdXAsIGFsb25nIHdpdGggYmFja3VwcyBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvciBibG9jayhzKS4KK0JlY2F1c2UgdGhpcyBjYW4gY29uc3VtZSBhIGNvbnNpZGVyYWJsZSBhbW91bnQgb2Ygc3BhY2UgZm9yIGxhcmdlCitmaWxlc3lzdGVtcywgbGF0ZXIgcmV2aXNpb25zIGNhbiBvcHRpb25hbGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mIGJhY2t1cAorY29waWVzIGJ5IG9ubHkgcHV0dGluZyBiYWNrdXBzIGluIHNwZWNpZmljIGdyb3VwcyAodGhpcyBpcyB0aGUgc3BhcnNlCitzdXBlcmJsb2NrIGZlYXR1cmUpLiAgVGhlIGdyb3VwcyBjaG9zZW4gYXJlIDAsIDEgYW5kIHBvd2VycyBvZiAzLCA1IGFuZCA3LgorCitUaGUgaW5mb3JtYXRpb24gaW4gdGhlIHN1cGVyYmxvY2sgY29udGFpbnMgZmllbGRzIHN1Y2ggYXMgdGhlIHRvdGFsCitudW1iZXIgb2YgaW5vZGVzIGFuZCBibG9ja3MgaW4gdGhlIGZpbGVzeXN0ZW0gYW5kIGhvdyBtYW55IGFyZSBmcmVlLAoraG93IG1hbnkgaW5vZGVzIGFuZCBibG9ja3MgYXJlIGluIGVhY2ggYmxvY2sgZ3JvdXAsIHdoZW4gdGhlIGZpbGVzeXN0ZW0KK3dhcyBtb3VudGVkIChhbmQgaWYgaXQgd2FzIGNsZWFubHkgdW5tb3VudGVkKSwgd2hlbiBpdCB3YXMgbW9kaWZpZWQsCit3aGF0IHZlcnNpb24gb2YgdGhlIGZpbGVzeXN0ZW0gaXQgaXMgKHNlZSB0aGUgUmV2aXNpb25zIHNlY3Rpb24gYmVsb3cpCithbmQgd2hpY2ggT1MgY3JlYXRlZCBpdC4KKworSWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmV2aXNpb24gMSBvciBoaWdoZXIsIHRoZW4gdGhlcmUgYXJlIGV4dHJhIGZpZWxkcywKK3N1Y2ggYXMgYSB2b2x1bWUgbmFtZSwgYSB1bmlxdWUgaWRlbnRpZmljYXRpb24gbnVtYmVyLCB0aGUgaW5vZGUgc2l6ZSwKK2FuZCBzcGFjZSBmb3Igb3B0aW9uYWwgZmlsZXN5c3RlbSBmZWF0dXJlcyB0byBzdG9yZSBjb25maWd1cmF0aW9uIGluZm8uCisKK0FsbCBmaWVsZHMgaW4gdGhlIHN1cGVyYmxvY2sgKGFzIGluIGFsbCBvdGhlciBleHQyIHN0cnVjdHVyZXMpIGFyZSBzdG9yZWQKK29uIHRoZSBkaXNjIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LCBzbyBhIGZpbGVzeXN0ZW0gaXMgcG9ydGFibGUgYmV0d2VlbgorbWFjaGluZXMgd2l0aG91dCBoYXZpbmcgdG8ga25vdyB3aGF0IG1hY2hpbmUgaXQgd2FzIGNyZWF0ZWQgb24uCisKK0lub2RlcworLS0tLS0tCisKK1RoZSBpbm9kZSAoaW5kZXggbm9kZSkgaXMgYSBmdW5kYW1lbnRhbCBjb25jZXB0IGluIHRoZSBleHQyIGZpbGVzeXN0ZW0uCitFYWNoIG9iamVjdCBpbiB0aGUgZmlsZXN5c3RlbSBpcyByZXByZXNlbnRlZCBieSBhbiBpbm9kZS4gIFRoZSBpbm9kZQorc3RydWN0dXJlIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrcyB3aGljaCBjb250YWluIHRoZQorZGF0YSBoZWxkIGluIHRoZSBvYmplY3QgYW5kIGFsbCBvZiB0aGUgbWV0YWRhdGEgYWJvdXQgYW4gb2JqZWN0IGV4Y2VwdAoraXRzIG5hbWUuICBUaGUgbWV0YWRhdGEgYWJvdXQgYW4gb2JqZWN0IGluY2x1ZGVzIHRoZSBwZXJtaXNzaW9ucywgb3duZXIsCitncm91cCwgZmxhZ3MsIHNpemUsIG51bWJlciBvZiBibG9ja3MgdXNlZCwgYWNjZXNzIHRpbWUsIGNoYW5nZSB0aW1lLAorbW9kaWZpY2F0aW9uIHRpbWUsIGRlbGV0aW9uIHRpbWUsIG51bWJlciBvZiBsaW5rcywgZnJhZ21lbnRzLCB2ZXJzaW9uCisoZm9yIE5GUykgYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKEVBcykgYW5kL29yIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKS4KKworVGhlcmUgYXJlIHNvbWUgcmVzZXJ2ZWQgZmllbGRzIHdoaWNoIGFyZSBjdXJyZW50bHkgdW51c2VkIGluIHRoZSBpbm9kZQorc3RydWN0dXJlIGFuZCBzZXZlcmFsIHdoaWNoIGFyZSBvdmVybG9hZGVkLiAgT25lIGZpZWxkIGlzIHJlc2VydmVkIGZvciB0aGUKK2RpcmVjdG9yeSBBQ0wgaWYgdGhlIGlub2RlIGlzIGEgZGlyZWN0b3J5IGFuZCBhbHRlcm5hdGVseSBmb3IgdGhlIHRvcCAzMgorYml0cyBvZiB0aGUgZmlsZSBzaXplIGlmIHRoZSBpbm9kZSBpcyBhIHJlZ3VsYXIgZmlsZSAoYWxsb3dpbmcgZmlsZSBzaXplcworbGFyZ2VyIHRoYW4gMkdCKS4gIFRoZSB0cmFuc2xhdG9yIGZpZWxkIGlzIHVudXNlZCB1bmRlciBMaW51eCwgYnV0IGlzIHVzZWQKK2J5IHRoZSBIVVJEIHRvIHJlZmVyZW5jZSB0aGUgaW5vZGUgb2YgYSBwcm9ncmFtIHdoaWNoIHdpbGwgYmUgdXNlZCB0bworaW50ZXJwcmV0IHRoaXMgb2JqZWN0LiAgTW9zdCBvZiB0aGUgcmVtYWluaW5nIHJlc2VydmVkIGZpZWxkcyBoYXZlIGJlZW4KK3VzZWQgdXAgZm9yIGJvdGggTGludXggYW5kIHRoZSBIVVJEIGZvciBsYXJnZXIgb3duZXIgYW5kIGdyb3VwIGZpZWxkcywKK1RoZSBIVVJEIGFsc28gaGFzIGEgbGFyZ2VyIG1vZGUgZmllbGQgc28gaXQgdXNlcyBhbm90aGVyIG9mIHRoZSByZW1haW5pbmcKK2ZpZWxkcyB0byBzdG9yZSB0aGUgZXh0cmEgbW9yZSBiaXRzLgorCitUaGVyZSBhcmUgcG9pbnRlcnMgdG8gdGhlIGZpcnN0IDEyIGJsb2NrcyB3aGljaCBjb250YWluIHRoZSBmaWxlJ3MgZGF0YQoraW4gdGhlIGlub2RlLiAgVGhlcmUgaXMgYSBwb2ludGVyIHRvIGFuIGluZGlyZWN0IGJsb2NrICh3aGljaCBjb250YWlucworcG9pbnRlcnMgdG8gdGhlIG5leHQgc2V0IG9mIGJsb2NrcyksIGEgcG9pbnRlciB0byBhIGRvdWJseS1pbmRpcmVjdAorYmxvY2sgKHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGluZGlyZWN0IGJsb2NrcykgYW5kIGEgcG9pbnRlciB0byBhCit0cmVibHktaW5kaXJlY3QgYmxvY2sgKHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGRvdWJseS1pbmRpcmVjdCBibG9ja3MpLgorCitUaGUgZmxhZ3MgZmllbGQgY29udGFpbnMgc29tZSBleHQyLXNwZWNpZmljIGZsYWdzIHdoaWNoIGFyZW4ndCBjYXRlcmVkCitmb3IgYnkgdGhlIHN0YW5kYXJkIGNobW9kIGZsYWdzLiAgVGhlc2UgZmxhZ3MgY2FuIGJlIGxpc3RlZCB3aXRoIGxzYXR0cgorYW5kIGNoYW5nZWQgd2l0aCB0aGUgY2hhdHRyIGNvbW1hbmQsIGFuZCBhbGxvdyBzcGVjaWZpYyBmaWxlc3lzdGVtCitiZWhhdmlvdXIgb24gYSBwZXItZmlsZSBiYXNpcy4gIFRoZXJlIGFyZSBmbGFncyBmb3Igc2VjdXJlIGRlbGV0aW9uLAordW5kZWxldGFibGUsIGNvbXByZXNzaW9uLCBzeW5jaHJvbm91cyB1cGRhdGVzLCBpbW11dGFiaWxpdHksIGFwcGVuZC1vbmx5LAorZHVtcGFibGUsIG5vLWF0aW1lLCBpbmRleGVkIGRpcmVjdG9yaWVzLCBhbmQgZGF0YS1qb3VybmFsaW5nLiAgTm90IGFsbAorb2YgdGhlc2UgYXJlIHN1cHBvcnRlZCB5ZXQuCisKK0RpcmVjdG9yaWVzCistLS0tLS0tLS0tLQorCitBIGRpcmVjdG9yeSBpcyBhIGZpbGVzeXN0ZW0gb2JqZWN0IGFuZCBoYXMgYW4gaW5vZGUganVzdCBsaWtlIGEgZmlsZS4KK0l0IGlzIGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBmaWxlIGNvbnRhaW5pbmcgcmVjb3JkcyB3aGljaCBhc3NvY2lhdGUKK2VhY2ggbmFtZSB3aXRoIGFuIGlub2RlIG51bWJlci4gIExhdGVyIHJldmlzaW9ucyBvZiB0aGUgZmlsZXN5c3RlbSBhbHNvCitlbmNvZGUgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCAoZmlsZSwgZGlyZWN0b3J5LCBzeW1saW5rLCBkZXZpY2UsIGZpZm8sCitzb2NrZXQpIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNoZWNrIHRoZSBpbm9kZSBpdHNlbGYgZm9yIHRoaXMgaW5mb3JtYXRpb24KKyhzdXBwb3J0IGZvciB0YWtpbmcgYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSBkb2VzIG5vdCB5ZXQgZXhpc3QgaW4KK0dsaWJjIDIuMikuCisKK1RoZSBpbm9kZSBhbGxvY2F0aW9uIGNvZGUgdHJpZXMgdG8gYXNzaWduIGlub2RlcyB3aGljaCBhcmUgaW4gdGhlIHNhbWUKK2Jsb2NrIGdyb3VwIGFzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhleSBhcmUgZmlyc3QgY3JlYXRlZC4KKworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZXh0MiB1c2VzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHRvIHN0b3JlCit0aGUgZmlsZW5hbWVzIGluIHRoZSBkaXJlY3Rvcnk7IGEgcGVuZGluZyBlbmhhbmNlbWVudCB1c2VzIGhhc2hpbmcgb2YgdGhlCitmaWxlbmFtZXMgdG8gYWxsb3cgbG9va3VwIHdpdGhvdXQgdGhlIG5lZWQgdG8gc2NhbiB0aGUgZW50aXJlIGRpcmVjdG9yeS4KKworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbmV2ZXIgcmVtb3ZlcyBlbXB0eSBkaXJlY3RvcnkgYmxvY2tzIG9uY2UgdGhleQoraGF2ZSBiZWVuIGFsbG9jYXRlZCB0byBob2xkIG1vcmUgZmlsZXMuCisKK1NwZWNpYWwgZmlsZXMKKy0tLS0tLS0tLS0tLS0KKworU3ltYm9saWMgbGlua3MgYXJlIGFsc28gZmlsZXN5c3RlbSBvYmplY3RzIHdpdGggaW5vZGVzLiAgVGhleSBkZXNlcnZlCitzcGVjaWFsIG1lbnRpb24gYmVjYXVzZSB0aGUgZGF0YSBmb3IgdGhlbSBpcyBzdG9yZWQgd2l0aGluIHRoZSBpbm9kZQoraXRzZWxmIGlmIHRoZSBzeW1saW5rIGlzIGxlc3MgdGhhbiA2MCBieXRlcyBsb25nLiAgSXQgdXNlcyB0aGUgZmllbGRzCit3aGljaCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIHN0b3JlIHRoZSBwb2ludGVycyB0byBkYXRhIGJsb2Nrcy4KK1RoaXMgaXMgYSB3b3J0aHdoaWxlIG9wdGltaXNhdGlvbiBhcyBpdCB3ZSBhdm9pZCBhbGxvY2F0aW5nIGEgZnVsbAorYmxvY2sgZm9yIHRoZSBzeW1saW5rLCBhbmQgbW9zdCBzeW1saW5rcyBhcmUgbGVzcyB0aGFuIDYwIGNoYXJhY3RlcnMgbG9uZy4KKworQ2hhcmFjdGVyIGFuZCBibG9jayBzcGVjaWFsIGRldmljZXMgbmV2ZXIgaGF2ZSBkYXRhIGJsb2NrcyBhc3NpZ25lZCB0bwordGhlbS4gIEluc3RlYWQsIHRoZWlyIGRldmljZSBudW1iZXIgaXMgc3RvcmVkIGluIHRoZSBpbm9kZSwgYWdhaW4gcmV1c2luZwordGhlIGZpZWxkcyB3aGljaCB3b3VsZCBiZSB1c2VkIHRvIHBvaW50IHRvIHRoZSBkYXRhIGJsb2Nrcy4KKworUmVzZXJ2ZWQgU3BhY2UKKy0tLS0tLS0tLS0tLS0tCisKK0luIGV4dDIsIHRoZXJlIGlzIGEgbWVjaGFuaXNtIGZvciByZXNlcnZpbmcgYSBjZXJ0YWluIG51bWJlciBvZiBibG9ja3MKK2ZvciBhIHBhcnRpY3VsYXIgdXNlciAobm9ybWFsbHkgdGhlIHN1cGVyLXVzZXIpLiAgVGhpcyBpcyBpbnRlbmRlZCB0bworYWxsb3cgZm9yIHRoZSBzeXN0ZW0gdG8gY29udGludWUgZnVuY3Rpb25pbmcgZXZlbiBpZiBub24tcHJpdmVsZWdlZCB1c2VycworZmlsbCB1cCBhbGwgdGhlIHNwYWNlIGF2YWlsYWJsZSB0byB0aGVtICh0aGlzIGlzIGluZGVwZW5kZW50IG9mIGZpbGVzeXN0ZW0KK3F1b3RhcykuICBJdCBhbHNvIGtlZXBzIHRoZSBmaWxlc3lzdGVtIGZyb20gZmlsbGluZyB1cCBlbnRpcmVseSB3aGljaAoraGVscHMgY29tYmF0IGZyYWdtZW50YXRpb24uCisKK0ZpbGVzeXN0ZW0gY2hlY2sKKy0tLS0tLS0tLS0tLS0tLS0KKworQXQgYm9vdCB0aW1lLCBtb3N0IHN5c3RlbXMgcnVuIGEgY29uc2lzdGVuY3kgY2hlY2sgKGUyZnNjaykgb24gdGhlaXIKK2ZpbGVzeXN0ZW1zLiAgVGhlIHN1cGVyYmxvY2sgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSBjb250YWlucyBzZXZlcmFsCitmaWVsZHMgd2hpY2ggaW5kaWNhdGUgd2hldGhlciBmc2NrIHNob3VsZCBhY3R1YWxseSBydW4gKHNpbmNlIGNoZWNraW5nCit0aGUgZmlsZXN5c3RlbSBhdCBib290IGNhbiB0YWtlIGEgbG9uZyB0aW1lIGlmIGl0IGlzIGxhcmdlKS4gIGZzY2sgd2lsbAorcnVuIGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQsIGlmIHRoZSBtYXhpbXVtIG1vdW50Citjb3VudCBoYXMgYmVlbiBleGNlZWRlZCBvciBpZiB0aGUgbWF4aW11bSB0aW1lIGJldHdlZW4gY2hlY2tzIGhhcyBiZWVuCitleGNlZWRlZC4KKworRmVhdHVyZSBDb21wYXRpYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbXBhdGliaWxpdHkgZmVhdHVyZSBtZWNoYW5pc20gdXNlZCBpbiBleHQyIGlzIHNvcGhpc3RpY2F0ZWQuCitJdCBzYWZlbHkgYWxsb3dzIGZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIHRoZSBmaWxlc3lzdGVtLCB3aXRob3V0Cit1bm5lY2Vzc2FyaWx5IHNhY3JpZmljaW5nIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiB0aGUKK2ZpbGVzeXN0ZW0gY29kZS4gIFRoZSBmZWF0dXJlIGNvbXBhdGliaWxpdHkgbWVjaGFuaXNtIGlzIG5vdCBzdXBwb3J0ZWQgYnkKK3RoZSBvcmlnaW5hbCByZXZpc2lvbiAwIChFWFQyX0dPT0RfT0xEX1JFVikgb2YgZXh0MiwgYnV0IHdhcyBpbnRyb2R1Y2VkIGluCityZXZpc2lvbiAxLiAgVGhlcmUgYXJlIHRocmVlIDMyLWJpdCBmaWVsZHMsIG9uZSBmb3IgY29tcGF0aWJsZSBmZWF0dXJlcworKENPTVBBVCksIG9uZSBmb3IgcmVhZC1vbmx5IGNvbXBhdGlibGUgKFJPX0NPTVBBVCkgZmVhdHVyZXMgYW5kIG9uZSBmb3IKK2luY29tcGF0aWJsZSAoSU5DT01QQVQpIGZlYXR1cmVzLgorCitUaGVzZSBmZWF0dXJlIGZsYWdzIGhhdmUgc3BlY2lmaWMgbWVhbmluZ3MgZm9yIHRoZSBrZXJuZWwgYXMgZm9sbG93czoKKworQSBDT01QQVQgZmxhZyBpbmRpY2F0ZXMgdGhhdCBhIGZlYXR1cmUgaXMgcHJlc2VudCBpbiB0aGUgZmlsZXN5c3RlbSwKK2J1dCB0aGUgb24tZGlzayBmb3JtYXQgaXMgMTAwJSBjb21wYXRpYmxlIHdpdGggb2xkZXIgb24tZGlzayBmb3JtYXRzLCBzbworYSBrZXJuZWwgd2hpY2ggZGlkbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhpcyBmZWF0dXJlIGNvdWxkIHJlYWQvd3JpdGUKK3RoZSBmaWxlc3lzdGVtIHdpdGhvdXQgYW55IGNoYW5jZSBvZiBjb3JydXB0aW5nIHRoZSBmaWxlc3lzdGVtIChvciBldmVuCittYWtpbmcgaXQgaW5jb25zaXN0ZW50KS4gIFRoaXMgaXMgZXNzZW50aWFsbHkganVzdCBhIGZsYWcgd2hpY2ggc2F5cworInRoaXMgZmlsZXN5c3RlbSBoYXMgYSAoaGlkZGVuKSBmZWF0dXJlIiB0aGF0IHRoZSBrZXJuZWwgb3IgZTJmc2NrIG1heQord2FudCB0byBiZSBhd2FyZSBvZiAobW9yZSBvbiBlMmZzY2sgYW5kIGZlYXR1cmUgZmxhZ3MgbGF0ZXIpLiAgVGhlIGV4dDMKK0hBU19KT1VSTkFMIGZlYXR1cmUgaXMgYSBDT01QQVQgZmxhZyBiZWNhdXNlIHRoZSBleHQzIGpvdXJuYWwgaXMgc2ltcGx5CithIHJlZ3VsYXIgZmlsZSB3aXRoIGRhdGEgYmxvY2tzIGluIGl0IHNvIHRoZSBrZXJuZWwgZG9lcyBub3QgbmVlZCB0bwordGFrZSBhbnkgc3BlY2lhbCBub3RpY2Ugb2YgaXQgaWYgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGV4dDMgam91cm5hbGluZy4KKworQW4gUk9fQ09NUEFUIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIG9uLWRpc2sgZm9ybWF0IGlzIDEwMCUgY29tcGF0aWJsZQord2l0aCBvbGRlciBvbi1kaXNrIGZvcm1hdHMgZm9yIHJlYWRpbmcgKGkuZS4gdGhlIGZlYXR1cmUgZG9lcyBub3QgY2hhbmdlCit0aGUgdmlzaWJsZSBvbi1kaXNrIGZvcm1hdCkuICBIb3dldmVyLCBhbiBvbGQga2VybmVsIHdyaXRpbmcgdG8gc3VjaCBhCitmaWxlc3lzdGVtIHdvdWxkL2NvdWxkIGNvcnJ1cHQgdGhlIGZpbGVzeXN0ZW0sIHNvIHRoaXMgaXMgcHJldmVudGVkLiBUaGUKK21vc3QgY29tbW9uIHN1Y2ggZmVhdHVyZSwgU1BBUlNFX1NVUEVSLCBpcyBhbiBST19DT01QQVQgZmVhdHVyZSBiZWNhdXNlCitzcGFyc2UgZ3JvdXBzIGFsbG93IGZpbGUgZGF0YSBibG9ja3Mgd2hlcmUgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yCitiYWNrdXBzIHVzZWQgdG8gbGl2ZSwgYW5kIGV4dDJfZnJlZV9ibG9ja3MoKSByZWZ1c2VzIHRvIGZyZWUgdGhlc2UgYmxvY2tzLAord2hpY2ggd291bGQgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgYml0bWFwcy4gIEFuIG9sZCBrZXJuZWwgd291bGQgYWxzbworZ2V0IGFuIGVycm9yIGlmIGl0IHRyaWVkIHRvIGZyZWUgYSBzZXJpZXMgb2YgYmxvY2tzIHdoaWNoIGNyb3NzZWQgYSBncm91cAorYm91bmRhcnksIGJ1dCB0aGlzIGlzIGEgbGVnaXRpbWF0ZSBsYXlvdXQgaW4gYSBTUEFSU0VfU1VQRVIgZmlsZXN5c3RlbS4KKworQW4gSU5DT01QQVQgZmxhZyBpbmRpY2F0ZXMgdGhlIG9uLWRpc2sgZm9ybWF0IGhhcyBjaGFuZ2VkIGluIHNvbWUKK3dheSB0aGF0IG1ha2VzIGl0IHVucmVhZGFibGUgYnkgb2xkZXIga2VybmVscywgb3Igd291bGQgb3RoZXJ3aXNlCitjYXVzZSBhIHByb2JsZW0gaWYgYW4gb2xkIGtlcm5lbCB0cmllZCB0byBtb3VudCBpdC4gIEZJTEVUWVBFIGlzIGFuCitJTkNPTVBBVCBmbGFnIGJlY2F1c2Ugb2xkZXIga2VybmVscyB3b3VsZCB0aGluayBhIGZpbGVuYW1lIHdhcyBsb25nZXIKK3RoYW4gMjU2IGNoYXJhY3RlcnMsIHdoaWNoIHdvdWxkIGxlYWQgdG8gY29ycnVwdCBkaXJlY3RvcnkgbGlzdGluZ3MuCitUaGUgQ09NUFJFU1NJT04gZmxhZyBpcyBhbiBvYnZpb3VzIElOQ09NUEFUIGZsYWcgLSBpZiB0aGUga2VybmVsCitkb2Vzbid0IHVuZGVyc3RhbmQgY29tcHJlc3Npb24sIHlvdSB3b3VsZCBqdXN0IGdldCBnYXJiYWdlIGJhY2sgZnJvbQorcmVhZCgpIGluc3RlYWQgb2YgaXQgYXV0b21hdGljYWxseSBkZWNvbXByZXNzaW5nIHlvdXIgZGF0YS4gIFRoZSBleHQzCitSRUNPVkVSIGZsYWcgaXMgbmVlZGVkIHRvIHByZXZlbnQgYSBrZXJuZWwgd2hpY2ggZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUKK2V4dDMgam91cm5hbCBmcm9tIG1vdW50aW5nIHRoZSBmaWxlc3lzdGVtIHdpdGhvdXQgcmVwbGF5aW5nIHRoZSBqb3VybmFsLgorCitGb3IgZTJmc2NrLCBpdCBuZWVkcyB0byBiZSBtb3JlIHN0cmljdCB3aXRoIHRoZSBoYW5kbGluZyBvZiB0aGVzZQorZmxhZ3MgdGhhbiB0aGUga2VybmVsLiAgSWYgaXQgZG9lc24ndCB1bmRlcnN0YW5kIEFOWSBvZiB0aGUgQ09NUEFULAorUk9fQ09NUEFULCBvciBJTkNPTVBBVCBmbGFncyBpdCB3aWxsIHJlZnVzZSB0byBjaGVjayB0aGUgZmlsZXN5c3RlbSwKK2JlY2F1c2UgaXQgaGFzIG5vIHdheSBvZiB2ZXJpZnlpbmcgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgaXMgdmFsaWQKK29yIG5vdC4gIEFsbG93aW5nIGUyZnNjayB0byBzdWNjZWVkIG9uIGEgZmlsZXN5c3RlbSB3aXRoIGFuIHVua25vd24KK2ZlYXR1cmUgaXMgYSBmYWxzZSBzZW5zZSBvZiBzZWN1cml0eSBmb3IgdGhlIHVzZXIuICBSZWZ1c2luZyB0byBjaGVjaworYSBmaWxlc3lzdGVtIHdpdGggdW5rbm93biBmZWF0dXJlcyBpcyBhIGdvb2QgaW5jZW50aXZlIGZvciB0aGUgdXNlciB0bwordXBkYXRlIHRvIHRoZSBsYXRlc3QgZTJmc2NrLiAgVGhpcyBhbHNvIG1lYW5zIHRoYXQgYW55b25lIGFkZGluZyBmZWF0dXJlCitmbGFncyB0byBleHQyIGFsc28gbmVlZHMgdG8gdXBkYXRlIGUyZnNjayB0byB2ZXJpZnkgdGhlc2UgZmVhdHVyZXMuCisKK01ldGFkYXRhCistLS0tLS0tLQorCitJdCBpcyBmcmVxdWVudGx5IGNsYWltZWQgdGhhdCB0aGUgZXh0MiBpbXBsZW1lbnRhdGlvbiBvZiB3cml0aW5nCithc3luY2hyb25vdXMgbWV0YWRhdGEgaXMgZmFzdGVyIHRoYW4gdGhlIGZmcyBzeW5jaHJvbm91cyBtZXRhZGF0YQorc2NoZW1lIGJ1dCBsZXNzIHJlbGlhYmxlLiAgQm90aCBtZXRob2RzIGFyZSBlcXVhbGx5IHJlc29sdmFibGUgYnkgdGhlaXIKK3Jlc3BlY3RpdmUgZnNjayBwcm9ncmFtcy4KKworSWYgeW91J3JlIGV4Y2VwdGlvbmFsbHkgcGFyYW5vaWQsIHRoZXJlIGFyZSAzIHdheXMgb2YgbWFraW5nIG1ldGFkYXRhCit3cml0ZXMgc3luY2hyb25vdXMgb24gZXh0MjoKKworcGVyLWZpbGUgaWYgeW91IGhhdmUgdGhlIHByb2dyYW0gc291cmNlOiB1c2UgdGhlIE9fU1lOQyBmbGFnIHRvIG9wZW4oKQorcGVyLWZpbGUgaWYgeW91IGRvbid0IGhhdmUgdGhlIHNvdXJjZTogdXNlICJjaGF0dHIgK1MiIG9uIHRoZSBmaWxlCitwZXItZmlsZXN5c3RlbTogYWRkIHRoZSAic3luYyIgb3B0aW9uIHRvIG1vdW50IChvciBpbiAvZXRjL2ZzdGFiKQorCit0aGUgZmlyc3QgYW5kIGxhc3QgYXJlIG5vdCBleHQyIHNwZWNpZmljIGJ1dCBkbyBmb3JjZSB0aGUgbWV0YWRhdGEgdG8KK2JlIHdyaXR0ZW4gc3luY2hyb25vdXNseS4gIFNlZSBhbHNvIEpvdXJuYWxpbmcgYmVsb3cuCisKK0xpbWl0YXRpb25zCistLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgdmFyaW91cyBsaW1pdHMgaW1wb3NlZCBieSB0aGUgb24tZGlzayBsYXlvdXQgb2YgZXh0Mi4gIE90aGVyCitsaW1pdHMgYXJlIGltcG9zZWQgYnkgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGtlcm5lbCBjb2RlLgorTWFueSBvZiB0aGUgbGltaXRzIGFyZSBkZXRlcm1pbmVkIGF0IHRoZSB0aW1lIHRoZSBmaWxlc3lzdGVtIGlzIGZpcnN0CitjcmVhdGVkLCBhbmQgZGVwZW5kIHVwb24gdGhlIGJsb2NrIHNpemUgY2hvc2VuLiAgVGhlIHJhdGlvIG9mIGlub2RlcyB0bworZGF0YSBibG9ja3MgaXMgZml4ZWQgYXQgZmlsZXN5c3RlbSBjcmVhdGlvbiB0aW1lLCBzbyB0aGUgb25seSB3YXkgdG8KK2luY3JlYXNlIHRoZSBudW1iZXIgb2YgaW5vZGVzIGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtLgorTm8gdG9vbHMgY3VycmVudGx5IGV4aXN0IHdoaWNoIGNhbiBjaGFuZ2UgdGhlIHJhdGlvIG9mIGlub2RlcyB0byBibG9ja3MuCisKK01vc3Qgb2YgdGhlc2UgbGltaXRzIGNvdWxkIGJlIG92ZXJjb21lIHdpdGggc2xpZ2h0IGNoYW5nZXMgaW4gdGhlIG9uLWRpc2sKK2Zvcm1hdCBhbmQgdXNpbmcgYSBjb21wYXRpYmlsaXR5IGZsYWcgdG8gc2lnbmFsIHRoZSBmb3JtYXQgY2hhbmdlIChhdAordGhlIGV4cGVuc2Ugb2Ygc29tZSBjb21wYXRpYmlsaXR5KS4KKworRmlsZXN5c3RlbSBibG9jayBzaXplOiAgICAgMWtCICAgICAgICAya0IgICAgICAgIDRrQiAgICAgICAgOGtCCisKK0ZpbGUgc2l6ZSBsaW1pdDogICAgICAgICAgMTZHQiAgICAgIDI1NkdCICAgICAyMDQ4R0IgICAgIDIwNDhHQgorRmlsZXN5c3RlbSBzaXplIGxpbWl0OiAgMjA0N0dCICAgICA4MTkyR0IgICAgMTYzODRHQiAgICAzMjc2OEdCCisKK1RoZXJlIGlzIGEgMi40IGtlcm5lbCBsaW1pdCBvZiAyMDQ4R0IgZm9yIGEgc2luZ2xlIGJsb2NrIGRldmljZSwgc28gbm8KK2ZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gdGhhdCBjYW4gYmUgY3JlYXRlZCBhdCB0aGlzIHRpbWUuICBUaGVyZSBpcyBhbHNvCithbiB1cHBlciBsaW1pdCBvbiB0aGUgYmxvY2sgc2l6ZSBpbXBvc2VkIGJ5IHRoZSBwYWdlIHNpemUgb2YgdGhlIGtlcm5lbCwKK3NvIDhrQiBibG9ja3MgYXJlIG9ubHkgYWxsb3dlZCBvbiBBbHBoYSBzeXN0ZW1zIChhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcword2hpY2ggc3VwcG9ydCBsYXJnZXIgcGFnZXMpLgorCitUaGVyZSBpcyBhbiB1cHBlciBsaW1pdCBvZiAzMjc2OCBzdWJkaXJlY3RvcmllcyBpbiBhIHNpbmdsZSBkaXJlY3RvcnkuCisKK1RoZXJlIGlzIGEgInNvZnQiIHVwcGVyIGxpbWl0IG9mIGFib3V0IDEwLTE1ayBmaWxlcyBpbiBhIHNpbmdsZSBkaXJlY3RvcnkKK3dpdGggdGhlIGN1cnJlbnQgbGluZWFyIGxpbmtlZC1saXN0IGRpcmVjdG9yeSBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgbGltaXQKK3N0ZW1zIGZyb20gcGVyZm9ybWFuY2UgcHJvYmxlbXMgd2hlbiBjcmVhdGluZyBhbmQgZGVsZXRpbmcgKGFuZCBhbHNvCitmaW5kaW5nKSBmaWxlcyBpbiBzdWNoIGxhcmdlIGRpcmVjdG9yaWVzLiAgVXNpbmcgYSBoYXNoZWQgZGlyZWN0b3J5IGluZGV4CisodW5kZXIgZGV2ZWxvcG1lbnQpIGFsbG93cyAxMDBrLTFNKyBmaWxlcyBpbiBhIHNpbmdsZSBkaXJlY3Rvcnkgd2l0aG91dAorcGVyZm9ybWFuY2UgcHJvYmxlbXMgKGFsdGhvdWdoIFJBTSBzaXplIGJlY29tZXMgYW4gaXNzdWUgYXQgdGhpcyBwb2ludCkuCisKK1RoZSAobWVhbmluZ2xlc3MpIGFic29sdXRlIHVwcGVyIGxpbWl0IG9mIGZpbGVzIGluIGEgc2luZ2xlIGRpcmVjdG9yeQorKGltcG9zZWQgYnkgdGhlIGZpbGUgc2l6ZSwgdGhlIHJlYWxpc3RpYyBsaW1pdCBpcyBvYnZpb3VzbHkgbXVjaCBsZXNzKQoraXMgb3ZlciAxMzAgdHJpbGxpb24gZmlsZXMuICBJdCB3b3VsZCBiZSBoaWdoZXIgZXhjZXB0IHRoZXJlIGFyZSBub3QKK2Vub3VnaCA0LWNoYXJhY3RlciBuYW1lcyB0byBtYWtlIHVwIHVuaXF1ZSBkaXJlY3RvcnkgZW50cmllcywgc28gdGhleQoraGF2ZSB0byBiZSA4IGNoYXJhY3RlciBmaWxlbmFtZXMsIGV2ZW4gdGhlbiB3ZSBhcmUgZmFpcmx5IGNsb3NlIHRvCitydW5uaW5nIG91dCBvZiB1bmlxdWUgZmlsZW5hbWVzLgorCitKb3VybmFsaW5nCistLS0tLS0tLS0tCisKK0Egam91cm5hbGluZyBleHRlbnNpb24gdG8gdGhlIGV4dDIgY29kZSBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgU3RlcGhlbgorVHdlZWRpZS4gIEl0IGF2b2lkcyB0aGUgcmlza3Mgb2YgbWV0YWRhdGEgY29ycnVwdGlvbiBhbmQgdGhlIG5lZWQgdG8KK3dhaXQgZm9yIGUyZnNjayB0byBjb21wbGV0ZSBhZnRlciBhIGNyYXNoLCB3aXRob3V0IHJlcXVpcmluZyBhIGNoYW5nZQordG8gdGhlIG9uLWRpc2sgZXh0MiBsYXlvdXQuICBJbiBhIG51dHNoZWxsLCB0aGUgam91cm5hbCBpcyBhIHJlZ3VsYXIKK2ZpbGUgd2hpY2ggc3RvcmVzIHdob2xlIG1ldGFkYXRhIChhbmQgb3B0aW9uYWxseSBkYXRhKSBibG9ja3MgdGhhdCBoYXZlCitiZWVuIG1vZGlmaWVkLCBwcmlvciB0byB3cml0aW5nIHRoZW0gaW50byB0aGUgZmlsZXN5c3RlbS4gIFRoaXMgbWVhbnMKK2l0IGlzIHBvc3NpYmxlIHRvIGFkZCBhIGpvdXJuYWwgdG8gYW4gZXhpc3RpbmcgZXh0MiBmaWxlc3lzdGVtIHdpdGhvdXQKK3RoZSBuZWVkIGZvciBkYXRhIGNvbnZlcnNpb24uCisKK1doZW4gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSAoZS5nLiBhIGZpbGUgaXMgcmVuYW1lZCkgdGhleSBhcmUgc3RvcmVkIGluCithIHRyYW5zYWN0aW9uIGluIHRoZSBqb3VybmFsIGFuZCBjYW4gZWl0aGVyIGJlIGNvbXBsZXRlIG9yIGluY29tcGxldGUgYXQKK3RoZSB0aW1lIG9mIGEgY3Jhc2guICBJZiBhIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlIGF0IHRoZSB0aW1lIG9mIGEgY3Jhc2gKKyhvciBpbiB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgdGhlIHN5c3RlbSBkb2VzIG5vdCBjcmFzaCksIHRoZW4gYW55IGJsb2NrcworaW4gdGhhdCB0cmFuc2FjdGlvbiBhcmUgZ3VhcmFudGVlZCB0byByZXByZXNlbnQgYSB2YWxpZCBmaWxlc3lzdGVtIHN0YXRlLAorYW5kIGFyZSBjb3BpZWQgaW50byB0aGUgZmlsZXN5c3RlbS4gIElmIGEgdHJhbnNhY3Rpb24gaXMgaW5jb21wbGV0ZSBhdAordGhlIHRpbWUgb2YgdGhlIGNyYXNoLCB0aGVuIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBvZiBjb25zaXN0ZW5jeSBmb3IKK3RoZSBibG9ja3MgaW4gdGhhdCB0cmFuc2FjdGlvbiBzbyB0aGV5IGFyZSBkaXNjYXJkZWQgKHdoaWNoIG1lYW5zIGFueQorZmlsZXN5c3RlbSBjaGFuZ2VzIHRoZXkgcmVwcmVzZW50IGFyZSBhbHNvIGxvc3QpLgorQ2hlY2sgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dCBpZiB5b3Ugd2FudCB0byByZWFkIG1vcmUgYWJvdXQKK2V4dDMgYW5kIGpvdXJuYWxpbmcuCisKK1JlZmVyZW5jZXMKKz09PT09PT09PT0KKworVGhlIGtlcm5lbCBzb3VyY2UJZmlsZTovdXNyL3NyYy9saW51eC9mcy9leHQyLworZTJmc3Byb2dzIChlMmZzY2spCWh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworRGVzaWduICYgSW1wbGVtZW50YXRpb24JaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvZXh0MmludHJvLmh0bWwKK0pvdXJuYWxpbmcgKGV4dDMpCWZ0cDovL2Z0cC51ay5saW51eC5vcmcvcHViL2xpbnV4L3NjdC9mcy9qZnMvCitIYXNoZWQgRGlyZWN0b3JpZXMJaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL35waGlsbGlwcy9odHJlZS8KK0ZpbGVzeXN0ZW0gUmVzaXppbmcJaHR0cDovL2V4dDJyZXNpemUuc291cmNlZm9yZ2UubmV0LworQ29tcHJlc3Npb24gKCopCQlodHRwOi8vd3d3Lm5ldHNwYWNlLm5ldC5hdS9+cmVpdGVyL2UyY29tcHIvCisKK0ltcGxlbWVudGF0aW9ucyBmb3I6CitXaW5kb3dzIDk1Lzk4L05ULzIwMDAJaHR0cDovL3VyYW51cy5pdC5zd2luLmVkdS5hdS9+am4vbGludXgvRXhwbG9yZTJmcy5odG0KK1dpbmRvd3MgOTUgKCopCQlodHRwOi8vd3d3LnlpcHRvbi5kZW1vbi5jby51ay9jb250ZW50Lmh0bWwjRlNERVhUMgorRE9TIGNsaWVudCAoKikJCWZ0cDovL21ldGFsYWIudW5jLmVkdS9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2V4dDIvCitPUy8yCQkJaHR0cDovL3BlcnNvLndhbmFkb28uZnIvbWF0dGhpZXUud2lsbG0vZXh0Mi1vczIvCitSSVNDIE9TIGNsaWVudAkJZnRwOi8vZnRwLmJhcm5ldC5hYy51ay9wdWIvYWNvcm4vYXJtbGludXgvaXNjYWZzLworCisoKikgbm8gbG9uZ2VyIGFjdGl2ZWx5IGRldmVsb3BlZC9zdXBwb3J0ZWQgKGFzIG9mIEFwciAyMDAxKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiN2Y0NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTAsMCArMSwxODMgQEAKKworRXh0MyBGaWxlc3lzdGVtCis9PT09PT09PT09PT09PT0KKworZXh0MyB3YXMgb3JpZ2luYWxseSByZWxlYXNlZCBpbiBTZXB0ZW1iZXIgMTk5OS4gV3JpdHRlbiBieSBTdGVwaGVuIFR3ZWVkaWUKK2ZvciAyLjIgYnJhbmNoLCBhbmQgcG9ydGVkIHRvIDIuNCBrZXJuZWxzIGJ5IFBldGVyIEJyYWFtLCBBbmRyZWFzIERpbGdlciwgCitBbmRyZXcgTW9ydG9uLCBBbGV4YW5kZXIgVmlybywgVGVkIFRzJ28gYW5kIFN0ZXBoZW4gVHdlZWRpZS4KKworZXh0MyBpcyBleHQyIGZpbGVzeXN0ZW0gZW5oYW5jZWQgd2l0aCBqb3VybmFsbGluZyBjYXBhYmlsaXRpZXMuIAorCitPcHRpb25zCis9PT09PT09CisKK1doZW4gbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtLCB0aGUgZm9sbG93aW5nIG9wdGlvbiBhcmUgYWNjZXB0ZWQ6CisoKikgPT0gZGVmYXVsdAorCitqb3VuYWw9dXBkYXRlCQlVcGRhdGUgdGhlIGV4dDMgZmlsZSBzeXN0ZW0ncyBqb3VybmFsIHRvIHRoZSAKKwkJCWN1cnJlbnQgZm9ybWF0LgorCitqb3VybmFsPWludW0JCVdoZW4gYSBqb3VybmFsIGFscmVhZHkgZXhpc3RzLCB0aGlzIG9wdGlvbiBpcyAKKwkJCWlnbm9yZWQuIE90aGVyd2lzZSwgaXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YKKwkJCXRoZSBpbm9kZSB3aGljaCB3aWxsIHJlcHJlc2VudCB0aGUgZXh0MyBmaWxlCisJCQlzeXN0ZW0ncyBqb3VybmFsIGZpbGUuCisKK25vbG9hZAkJCURvbid0IGxvYWQgdGhlIGpvdXJuYWwgb24gbW91bnRpbmcuCisKK2RhdGE9am91cm5hbAkJQWxsIGRhdGEgYXJlIGNvbW1pdHRlZCBpbnRvIHRoZSBqb3VybmFsIHByaW9yCisJCQl0byBiZWluZyB3cml0dGVuIGludG8gdGhlIG1haW4gZmlsZSBzeXN0ZW0uCisKK2RhdGE9b3JkZXJlZAkoKikJQWxsIGRhdGEgYXJlIGZvcmNlZCBkaXJlY3RseSBvdXQgdG8gdGhlIG1haW4gZmlsZQorCQkJc3lzdGVtIHByaW9yIHRvIGl0cyBtZXRhZGF0YSBiZWluZyBjb21taXR0ZWQgdG8KKwkJCXRoZSBqb3VybmFsLgorCitkYXRhPXdyaXRlYmFjawkJRGF0YSBvcmRlcmluZyBpcyBub3QgcHJlc2VydmVkLCBkYXRhIG1heSBiZQorCQkJd3JpdHRlbiBpbnRvIHRoZSBtYWluIGZpbGUgc3lzdGVtIGFmdGVyIGl0cworCQkJbWV0YWRhdGEgaGFzIGJlZW4gY29tbWl0dGVkIHRvIHRoZSBqb3VybmFsLgorCitjb21taXQ9bnJzZWMJKCopCUV4dDMgY2FuIGJlIHRvbGQgdG8gc3luYyBhbGwgaXRzIGRhdGEgYW5kIG1ldGFkYXRhCisJCQlldmVyeSAnbnJzZWMnIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUgc2Vjb25kcy4KKwkJCVRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgbG9zZSB5b3VyIHBvd2VyLCB5b3Ugd2lsbCBsb3NlLAorCQkJYXMgbXVjaCwgdGhlIGxhdGVzdCA1IHNlY29uZHMgb2Ygd29yayAoeW91ciBmaWxlc3lzdGVtCisJCQl3aWxsIG5vdCBiZSBkYW1hZ2VkIHRob3VnaCwgdGhhbmtzIHRvIGpvdXJuYWxpbmcpLiBUaGlzCisJCQlkZWZhdWx0IHZhbHVlIChvciBhbnkgbG93IHZhbHVlKSB3aWxsIGh1cnQgcGVyZm9ybWFuY2UsCisJCQlidXQgaXQncyBnb29kIGZvciBkYXRhLXNhZmV0eS4gU2V0dGluZyBpdCB0byAwIHdpbGwKKwkJCWhhdmUgdGhlIHNhbWUgZWZmZWN0IHRoYW4gbGVhdmluZyB0aGUgZGVmYXVsdCA1IHNlYy4KKwkJCVNldHRpbmcgaXQgdG8gdmVyeSBsYXJnZSB2YWx1ZXMgd2lsbCBpbXByb3ZlCisJCQlwZXJmb3JtYW5jZS4KKworYmFycmllcj0xCQlUaGlzIGVuYWJsZXMvZGlzYWJsZXMgYmFycmllcnMuIGJhcnJpZXI9MCBkaXNhYmxlcyBpdCwKKwkJCWJhcnJpZXI9MSBlbmFibGVzIGl0LgorCitvcmxvdgkJKCopCVRoaXMgZW5hYmxlcyB0aGUgbmV3IE9ybG92IGJsb2NrIGFsbG9jYXRvci4gSXQncyBlbmFibGVkCisJCQlieSBkZWZhdWx0LgorCitvbGRhbGxvYwkJVGhpcyBkaXNhYmxlcyB0aGUgT3Jsb3YgYmxvY2sgYWxsb2NhdG9yIGFuZCBlbmFibGVzIHRoZQorCQkJb2xkIGJsb2NrIGFsbG9jYXRvci4gT3Jsb3Ygc2hvdWxkIGhhdmUgYmV0dGVyIHBlcmZvcm1hbmNlLAorCQkJd2UnZCBsaWtlIHRvIGdldCBzb21lIGZlZWRiYWNrIGlmIGl0J3MgdGhlIGNvbnRyYXJ5IGZvcgorCQkJeW91LgorCit1c2VyX3hhdHRyCSgqKQlFbmFibGVzIFBPU0lYIEV4dGVuZGVkIEF0dHJpYnV0ZXMuIEl0J3MgZW5hYmxlZCBieQorCQkJZGVmYXVsdCwgaG93ZXZlciB5b3UgbmVlZCB0byBjb25maWZ1cmUgaXRzIHN1cHBvcnQKKwkJCShDT05GSUdfRVhUM19GU19YQVRUUikuIFRoaXMgaXMgbmVjY2VzYXJ5IGlmIHlvdSB3YW50CisJCQl0byB1c2UgUE9TSVggQWNjZXMgQ29udHJvbCBMaXN0cyBzdXBwb3J0LiBZb3UgY2FuIHZpc2l0CisJCQlodHRwOi8vYWNsLmJlc3RiaXRzLmF0IHRvIGtub3cgbW9yZSBhYm91dCBQT1NJWCBFeHRlbmRlZAorCQkJYXR0cmlidXRlcy4KKworbm91c2VyX3hhdHRyCQlEaXNhYmxlcyBQT1NJWCBFeHRlbmRlZCBBdHRyaWJ1dGVzLgorCithY2wJCSgqKQlFbmFibGVzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIHN1cHBvcnQuIFRoaXMgaXMKKwkJCWVuYWJsZWQgYnkgZGVmYXVsdCwgaG93ZXZlciB5b3UgbmVlZCB0byBjb25maWd1cmUKKwkJCWl0cyBzdXBwb3J0IChDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wpLiBJZiB5b3Ugd2FudAorCQkJdG8ga25vdyBtb3JlIGFib3V0IEFDTHMgdmlzaXQgaHR0cDovL2FjbC5iZXN0Yml0cy5hdAorCitub2FjbAkJCVRoaXMgb3B0aW9uIGRpc2FibGVzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3Qgc3VwcG9ydC4KKworcmVzZXJ2YXRpb24KKworbm9yZXNlcnZhdGlvbgorCityZXNpemU9CisKK2JzZGRmIAkJKCopCU1ha2UgJ2RmJyBhY3QgbGlrZSBCU0QuCittaW5peGRmCQkJTWFrZSAnZGYnIGFjdCBsaWtlIE1pbml4LgorCitjaGVjaz1ub25lCQlEb24ndCBkbyBleHRyYSBjaGVja2luZyBvZiBiaXRtYXBzIG9uIG1vdW50Lgorbm9jaGVjawkJCisKK2RlYnVnCQkJRXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gc3lzbG9nLgorCitlcnJvcnM9cmVtb3VudC1ybygqKQlSZW1vdW50IHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seSBvbiBhbiBlcnJvci4KK2Vycm9ycz1jb250aW51ZQkJS2VlcCBnb2luZyBvbiBhIGZpbGVzeXN0ZW0gZXJyb3IuCitlcnJvcnM9cGFuaWMJCVBhbmljIGFuZCBoYWx0IHRoZSBtYWNoaW5lIGlmIGFuIGVycm9yIG9jY3Vycy4KKworZ3JwaWQJCQlHaXZlIG9iamVjdHMgdGhlIHNhbWUgZ3JvdXAgSUQgYXMgdGhlaXIgY3JlYXRvci4KK2JzZGdyb3VwcwkJCisKK25vZ3JwaWQJCSgqKQlOZXcgb2JqZWN0cyBoYXZlIHRoZSBncm91cCBJRCBvZiB0aGVpciBjcmVhdG9yLgorc3lzdmdyb3VwcworCityZXNnaWQ9bgkJVGhlIGdyb3VwIElEIHdoaWNoIG1heSB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KKworcmVzdWlkPW4JCVRoZSB1c2VyIElEIHdoaWNoIG1heSB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KKworc2I9bgkJCVVzZSBhbHRlcm5hdGUgc3VwZXJibG9jayBhdCB0aGlzIGxvY2F0aW9uLgorCitxdW90YQkJCVF1b3RhIG9wdGlvbnMgYXJlIGN1cnJlbnRseSBzaWxlbnRseSBpZ25vcmVkLgorbm9xdW90YQkJCShzZWUgZnMvZXh0My9zdXBlci5jLCBsaW5lIDU5NCkKK2dycHF1b3RhCit1c3JxdW90YQorCisKK1NwZWNpZmljYXRpb24KKz09PT09PT09PT09PT0KK2V4dDMgc2hhcmVzIGFsbCBkaXNrIGltcGxlbWVudGF0aW9uIHdpdGggZXh0MiBmaWxlc3lzdGVtLCBhbmQgYWRkCit0cmFuc2FjdGlvbnMgY2FwYWJpbGl0aWVzIHRvIGV4dDIuICBKb3VybmFsaW5nIGlzIGRvbmUgYnkgdGhlCitKb3VybmFsaW5nIGJsb2NrIGRldmljZSBsYXllci4KKworSm91cm5hbGluZyBCbG9jayBEZXZpY2UgbGF5ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgSm91cm5hbGluZyBCbG9jayBEZXZpY2UgbGF5ZXIgKEpCRCkgaXNuJ3QgZXh0MyBzcGVjaWZpYy4gIEl0IHdhcworZGVzaWduIHRvIGFkZCBqb3VybmFsaW5nIGNhcGFiaWxpdGllcyBvbiBhIGJsb2NrIGRldmljZS4gIFRoZSBleHQzCitmaWxlc3lzdGVtIGNvZGUgd2lsbCBpbmZvcm0gdGhlIEpCRCBvZiBtb2RpZmljYXRpb25zIGl0IGlzIHBlcmZvcm1pbmcKKyhDYWxsIGEgdHJhbnNhY3Rpb24pLiAgdGhlIGpvdXJuYWwgc3VwcG9ydCB0aGUgdHJhbnNhY3Rpb25zIHN0YXJ0IGFuZAorc3RvcCwgYW5kIGluIGNhc2Ugb2YgY3Jhc2gsIHRoZSBqb3VybmFsIGNhbiByZXBsYXllZCB0aGUgdHJhbnNhY3Rpb25zCit0byBwdXQgdGhlIHBhcnRpdGlvbiBvbiBhIGNvbnNpc3RlbnQgc3RhdGUgZmFzdGx5LgorCitoYW5kbGVzIHJlcHJlc2VudCBhIHNpbmdsZSBhdG9taWMgdXBkYXRlIHRvIGEgZmlsZXN5c3RlbS4gIEpCRCBjYW4KK2hhbmRsZSBleHRlcm5hbCBqb3VybmFsIG9uIGEgYmxvY2sgZGV2aWNlLgorCitEYXRhIE1vZGUKKy0tLS0tLS0tLQorVGhlcmUncyAzIGRpZmZlcmVudCBkYXRhIG1vZGVzOgorCisqIHdyaXRlYmFjayBtb2RlCitJbiBkYXRhPXdyaXRlYmFjayBtb2RlLCBleHQzIGRvZXMgbm90IGpvdXJuYWwgZGF0YSBhdCBhbGwuICBUaGlzIG1vZGUKK3Byb3ZpZGVzIGEgc2ltaWxhciBsZXZlbCBvZiBqb3VybmFsaW5nIGFzIFhGUywgSkZTLCBhbmQgUmVpc2VyRlMgaW4gaXRzCitkZWZhdWx0IG1vZGUgLSBtZXRhZGF0YSBqb3VybmFsaW5nLiAgQSBjcmFzaCtyZWNvdmVyeSBjYW4gY2F1c2UKK2luY29ycmVjdCBkYXRhIHRvIGFwcGVhciBpbiBmaWxlcyB3aGljaCB3ZXJlIHdyaXR0ZW4gc2hvcnRseSBiZWZvcmUgdGhlCitjcmFzaC4gIFRoaXMgbW9kZSB3aWxsIHR5cGljYWxseSBwcm92aWRlIHRoZSBiZXN0IGV4dDMgcGVyZm9ybWFuY2UuCisKKyogb3JkZXJlZCBtb2RlCitJbiBkYXRhPW9yZGVyZWQgbW9kZSwgZXh0MyBvbmx5IG9mZmljaWFsbHkgam91cm5hbHMgbWV0YWRhdGEsIGJ1dCBpdAorbG9naWNhbGx5IGdyb3VwcyBtZXRhZGF0YSBhbmQgZGF0YSBibG9ja3MgaW50byBhIHNpbmdsZSB1bml0IGNhbGxlZCBhCit0cmFuc2FjdGlvbi4gIFdoZW4gaXQncyB0aW1lIHRvIHdyaXRlIHRoZSBuZXcgbWV0YWRhdGEgb3V0IHRvIGRpc2ssIHRoZQorYXNzb2NpYXRlZCBkYXRhIGJsb2NrcyBhcmUgd3JpdHRlbiBmaXJzdC4gIEluIGdlbmVyYWwsIHRoaXMgbW9kZQorcGVyZm9ybSBzbGlnaHRseSBzbG93ZXIgdGhhbiB3cml0ZWJhY2sgYnV0IHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4KK2pvdXJuYWwgbW9kZS4KKworKiBqb3VybmFsIG1vZGUKK2RhdGE9am91cm5hbCBtb2RlIHByb3ZpZGVzIGZ1bGwgZGF0YSBhbmQgbWV0YWRhdGEgam91cm5hbGluZy4gIEFsbCBuZXcKK2RhdGEgaXMgd3JpdHRlbiB0byB0aGUgam91cm5hbCBmaXJzdCwgYW5kIHRoZW4gdG8gaXRzIGZpbmFsIGxvY2F0aW9uLiAKK0luIHRoZSBldmVudCBvZiBhIGNyYXNoLCB0aGUgam91cm5hbCBjYW4gYmUgcmVwbGF5ZWQsIGJyaW5naW5nIGJvdGgKK2RhdGEgYW5kIG1ldGFkYXRhIGludG8gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhpcyBtb2RlIGlzIHRoZSBzbG93ZXN0CitleGNlcHQgd2hlbiBkYXRhIG5lZWRzIHRvIGJlIHJlYWQgZnJvbSBhbmQgd3JpdHRlbiB0byBkaXNrIGF0IHRoZSBzYW1lCit0aW1lIHdoZXJlIGl0IG91dHBlcmZvcm0gYWxsIG90aGVycyBtb2RlLgorCitDb21wYXRpYmlsaXR5CistLS0tLS0tLS0tLS0tCisKK0V4dDIgcGFydGl0aW9ucyBjYW4gYmUgZWFzaWx5IGNvbnZlcnQgdG8gZXh0Mywgd2l0aCBgdHVuZTJmcyAtaiA8ZGV2PmAuCitFeHQzIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBFeHQyLiAgRXh0MyBwYXJ0aXRpb25zIGNhbiBlYXNpbHkgYmUKK21vdW50ZWQgYXMgRXh0Mi4KKworRXh0ZXJuYWwgVG9vbHMKKz09PT09PT09PT09PT09CitzZWUgbWFudWFsIHBhZ2VzIHRvIGtub3cgbW9yZS4KKwordHVuZTJmczogCWNyZWF0ZSBhIGV4dDMgam91cm5hbCBvbiBhIGV4dDIgcGFydGl0aW9uIHdpdGggdGhlIC1qIGZsYWdzCitta2UyZnM6IAljcmVhdGUgYSBleHQzIHBhcnRpdGlvbiB3aXRoIHRoZSAtaiBmbGFncworZGVidWdmczogCWV4dDIgYW5kIGV4dDMgZmlsZSBzeXN0ZW0gZGVidWdnZXIKKworUmVmZXJlbmNlcworPT09PT09PT09PQorCitrZXJuZWwgc291cmNlOglmaWxlOi91c3Ivc3JjL2xpbnV4L2ZzL2V4dDMKKwkJZmlsZTovdXNyL3NyYy9saW51eC9mcy9qYmQKKworcHJvZ3JhbXM6IAlodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldAorCit1c2VmdWwgbGluazoKKwkJaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L2V4dDMvZXh0My11c2FnZS5odG1sCisJCWh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGlicmFyeS9sLWZzNy8KKwkJaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtZnM4LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGZhNzcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMudHh0CkBAIC0wLDAgKzEsODMgQEAKKworTWFjaW50b3NoIEhGUyBGaWxlc3lzdGVtIGZvciBMaW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitIRlMgc3RhbmRzIGZvciBgYEhpZXJhcmNoaWNhbCBGaWxlIFN5c3RlbScnIGFuZCBpcyB0aGUgZmlsZXN5c3RlbSB1c2VkCitieSB0aGUgTWFjIFBsdXMgYW5kIGFsbCBsYXRlciBNYWNpbnRvc2ggbW9kZWxzLiAgRWFybGllciBNYWNpbnRvc2gKK21vZGVscyB1c2VkIE1GUyAoYGBNYWNpbnRvc2ggRmlsZSBTeXN0ZW0nJyksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQsCitNYWNPUyA4LjEgYW5kIG5ld2VyIHN1cHBvcnQgYSBmaWxlc3lzdGVtIGNhbGxlZCBIRlMrIHRoYXQncyBzaW1pbGFyIHRvCitIRlMgYnV0IGlzIGV4dGVuZGVkIGluIHZhcmlvdXMgYXJlYXMuICBVc2UgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbSBkcml2ZXIKK3RvIGFjY2VzcyBzdWNoIGZpbGVzeXN0ZW1zIGZyb20gTGludXguCisKKworTW91bnQgb3B0aW9ucworPT09PT09PT09PT09PQorCitXaGVuIG1vdW50aW5nIGFuIEhGUyBmaWxlc3lzdGVtLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFjY2VwdGVkOgorCisgIGNyZWF0b3I9Y2NjYywgdHlwZT1jY2NjCisJU3BlY2lmaWVzIHRoZSBjcmVhdG9yL3R5cGUgdmFsdWVzIGFzIHNob3duIGJ5IHRoZSBNYWNPUyBmaW5kZXIKKwl1c2VkIGZvciBjcmVhdGluZyBuZXcgZmlsZXMuICBEZWZhdWx0IHZhbHVlczogJz8/Pz8nLgorCisgIHVpZD1uLCBnaWQ9bgorICAJU3BlY2lmaWVzIHRoZSB1c2VyL2dyb3VwIHRoYXQgb3ducyBhbGwgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW1zLgorCURlZmF1bHQ6ICB1c2VyL2dyb3VwIGlkIG9mIHRoZSBtb3VudGluZyBwcm9jZXNzLgorCisgIGRpcl91bWFzaz1uLCBmaWxlX3VtYXNrPW4sIHVtYXNrPW4KKwlTcGVjaWZpZXMgdGhlIHVtYXNrIHVzZWQgZm9yIGFsbCBmaWxlcyAsIGFsbCBkaXJlY3RvcmllcyBvciBhbGwKKwlmaWxlcyBhbmQgZGlyZWN0b3JpZXMuICBEZWZhdWx0cyB0byB0aGUgdW1hc2sgb2YgdGhlIG1vdW50aW5nIHByb2Nlc3MuCisKKyAgc2Vzc2lvbj1uCisgIAlTZWxlY3QgdGhlIENEUk9NIHNlc3Npb24gdG8gbW91bnQgYXMgSEZTIGZpbGVzeXN0ZW0uICBEZWZhdWx0cyB0bworCWxlYXZpbmcgdGhhdCBkZWNpc2lvbiB0byB0aGUgQ0RST00gZHJpdmVyLiAgVGhpcyBvcHRpb24gd2lsbCBmYWlsCisJd2l0aCBhbnl0aGluZyBidXQgYSBDRFJPTSBhcyB1bmRlcmx5aW5nIGRldmljZXMuCisKKyAgcGFydD1uCisgIAlTZWxlY3QgcGFydGl0aW9uIG51bWJlciBuIGZyb20gdGhlIGRldmljZXMuICBEb2VzIG9ubHkgbWFrZXMKKwlzZW5zZSBmb3IgQ0RST01TIGJlY2F1c2UgdGhleSBjYW4ndCBiZSBwYXJ0aXRpb25lZCB1bmRlciBMaW51eC4KKwlGb3IgZGlzayBkZXZpY2VzIHRoZSBnZW5lcmljIHBhcnRpdGlvbiBwYXJzaW5nIGNvZGUgZG9lcyB0aGlzCisJZm9yIHVzLiAgRGVmYXVsdHMgdG8gbm90IHBhcnNpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBhdCBhbGwuCisKKyAgcXVpZXQKKyAgCUlnbm9yZSBpbnZhbGlkIG1vdW50IG9wdGlvbnMgaW5zdGVhZCBvZiBjb21wbGFpbmluZy4KKworCitXcml0aW5nIHRvIEhGUyBGaWxlc3lzdGVtcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSEZTIGlzIG5vdCBhIFVOSVggZmlsZXN5c3RlbSwgdGh1cyBpdCBkb2VzIG5vdCBoYXZlIHRoZSB1c3VhbCBmZWF0dXJlcyB5b3UnZAorZXhwZWN0OgorCisgbyBZb3UgY2FuJ3QgbW9kaWZ5IHRoZSBzZXQtdWlkLCBzZXQtZ2lkLCBzdGlja3kgb3IgZXhlY3V0YWJsZSBiaXRzIG9yIHRoZSB1aWQKKyAgIGFuZCBnaWQgb2YgZmlsZXMuCisgbyBZb3UgY2FuJ3QgY3JlYXRlIGhhcmQtIG9yIHN5bWxpbmtzLCBkZXZpY2UgZmlsZXMsIHNvY2tldHMgb3IgRklGT3MuCisKK0hGUyBkb2VzIG9uIHRoZSBvdGhlciBoYXZlIHRoZSBjb25jZXB0cyBvZiBtdWx0aXBsZSBmb3JrcyBwZXIgZmlsZS4gIFRoZXNlCitub24tc3RhbmRhcmQgZm9ya3MgYXJlIHJlcHJlc2VudGVkIGFzIGhpZGRlbiBhZGRpdGlvbmFsIGZpbGVzIGluIHRoZSBub3JtYWwKK2ZpbGVzeXN0ZW1zIG5hbWVzcGFjZSB3aGljaCBpcyBraW5kIG9mIGEgY2x1ZGdlIGFuZCBtYWtlcyB0aGUgc2VtYW50aWNzIGZvcgordGhlIGEgbGl0dGxlIHN0cmFuZ2U6CisKKyBvIFlvdSBjYW4ndCBjcmVhdGUsIGRlbGV0ZSBvciByZW5hbWUgcmVzb3VyY2UgZm9ya3Mgb2YgZmlsZXMgb3IgdGhlCisgICBGaW5kZXIncyBtZXRhZGF0YS4KKyBvIFRoZXkgYXJlIGhvd2V2ZXIgY3JlYXRlZCAod2l0aCBkZWZhdWx0IHZhbHVlcyksIGRlbGV0ZWQgYW5kIHJlbmFtZWQKKyAgIGFsb25nIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSBmb3JrIG9yIGRpcmVjdG9yeS4KKyBvIENvcHlpbmcgZmlsZXMgdG8gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSB3aWxsIGxvb3NlIHRob3NlIGF0dHJpYnV0ZXMKKyAgIHRoYXQgYXJlIGVzc2VudGlhbCBmb3IgTWFjT1MgdG8gd29yay4KKworCitDcmVhdGluZyBIRlMgZmlsZXN5c3RlbXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBoZnN1dGlscyBwYWNrYWdlIGZyb20gUm9iZXJ0IExlc2xpZSBjb250YWlucyBhIHByb2dyYW0gY2FsbGVkCitoZm9ybWF0IHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIEhGUyBmaWxlc3lzdGVtLiBTZWUKKzxodHRwOi8vd3d3Lm1hcnMub3JnL2hvbWUvcm9iL3Byb2ovaGZzLz4gZm9yIGRldGFpbHMuCisKKworQ3JlZGl0cworPT09PT09PQorCitUaGUgSEZTIGRyaXZlcnMgd2FzIHdyaXR0ZW4gYnkgUGF1bCBILiBIYXJncm92ZWEgKGhhcmdyb3ZlQHNjY20uU3RhbmZvcmQuRURVKQorYW5kIGlzIG5vdyBtYWludGFpbmVkIGJ5IFJvbWFuIFppcHBlbCAocm9tYW5AYXJkaXN0ZWNoLmNvbSkgYXQgQXJkaXMKK1RlY2hub2xvZ2llcy4KK1JvbWFuIHJld3JvdGUgbGFyZ2UgcGFydHMgb2YgdGhlIGNvZGUgYW5kIGJyb3VnaHQgaW4gYnRyZWUgcm91dGluZXMgZGVyaXZlZAorZnJvbSBCcmFkIEJveWVyJ3MgaGZzcGx1cyBkcml2ZXIgKGFsc28gbWFpbnRhaW5lZCBieSBSb21hbiBub3cpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9ocGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaHBmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkYzM2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaHBmcy50eHQKQEAgLTAsMCArMSwyOTYgQEAKK1JlYWQvV3JpdGUgSFBGUyAyLjA5CisxOTk4LTIwMDQsIE1pa3VsYXMgUGF0b2NrYQorCitlbWFpbDogbWlrdWxhc0BhcnRheC5rYXJsaW4ubWZmLmN1bmkuY3oKK2hvbWVwYWdlOiBodHRwOi8vYXJ0YXgua2FybGluLm1mZi5jdW5pLmN6L35taWt1bGFzL3Z5cGxvZHkvaHBmcy9pbmRleC1lLmNnaQorCitDUkVESVRTOgorQ2hyaXMgU21pdGgsIDE5OTMsIG9yaWdpbmFsIHJlYWQtb25seSBIUEZTLCBzb21lIGNvZGUgYW5kIGhwZnMgc3RydWN0dXJlcyBmaWxlCisJaXMgdGFrZW4gZnJvbSBpdAorSmFjcXVlcyBHZWxpbmFzLCBNU0RvcyBtbWFwLCBJbnNwaXJlZCBieSBmcy9uZnMvbW1hcC5jIChKb24gVG9tYnMgMTUgQXVnIDE5OTMpCitXZXJuZXIgQWxtZXNiZXJnZXIsIDE5OTIsIDE5OTMsIE1TRG9zIG9wdGlvbiBwYXJzZXIgJiBDUi9MRiBjb252ZXJzaW9uCisKK01vdW50IG9wdGlvbnMKKwordWlkPXh4eCxnaWQ9eHh4LHVtYXNrPXh4eCAoZGVmYXVsdCB1aWQ9Z2lkPTAgdW1hc2s9ZGVmYXVsdF9zeXN0ZW1fdW1hc2spCisJU2V0IG93bmVyL2dyb3VwL21vZGUgZm9yIGZpbGVzIHRoYXQgZG8gbm90IGhhdmUgaXQgc3BlY2lmaWVkIGluIGV4dGVuZGVkCisJYXR0cmlidXRlcy4gTW9kZSBpcyBpbnZlcnRlZCB1bWFzayAtIGZvciBleGFtcGxlIHVtYXNrIDAyNyBnaXZlcyBvd25lcgorCWFsbCBwZXJtaXNzaW9uLCBncm91cCByZWFkIHBlcm1pc3Npb24gYW5kIGFueWJvZHkgZWxzZSBubyBhY2Nlc3MuIE5vdGUKKwl0aGF0IGZvciBmaWxlcyBtb2RlIGlzIGFuZGVkIHdpdGggMDY2Ni4gSWYgeW91IHdhbnQgZmlsZXMgdG8gaGF2ZSAneCcKKwlyaWdodHMsIHlvdSBtdXN0IHVzZSBleHRlbmRlZCBhdHRyaWJ1dGVzLgorY2FzZT1sb3dlcixhc2lzIChkZWZhdWx0IGFzaXMpCisJRmlsZSBuYW1lIGxvd2VyY2FzaW5nIGluIHJlYWRkaXIuCitjb252PWJpbmFyeSx0ZXh0LGF1dG8gKGRlZmF1bHQgYmluYXJ5KQorCUNSL0xGIC0+IExGIGNvbnZlcnNpb24sIGlmIGF1dG8sIGRlY2lzaW9uIGlzIG1hZGUgYWNjb3JkaW5nIHRvIGV4dGVuc2lvbgorCS0gdGhlcmUgaXMgYSBsaXN0IG9mIHRleHQgZXh0ZW5zaW9ucyAoSSB0aGluZyBpdCdzIGJldHRlciB0byBub3QgY29udmVydAorCXRleHQgZmlsZSB0aGFuIHRvIGRhbWFnZSBiaW5hcnkgZmlsZSkuIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGF0IGxpc3QsCisJY2hhbmdlIGl0IGluIHRoZSBzb3VyY2UuIE9yaWdpbmFsIHJlYWRvbmx5IEhQRlMgY29udGFpbmVkIHNvbWUgc3RyYW5nZQorCWhldXJpc3RpYyBhbGdvcml0aG0gdGhhdCBJIHJlbW92ZWQuIEkgdGhpbmcgaXQncyBkYW5nZXIgdG8gbGV0IHRoZQorCWNvbXB1dGVyIGRlY2lkZSB3aGV0aGVyIGZpbGUgaXMgdGV4dCBvciBiaW5hcnkuIEZvciBleGFtcGxlLCBESkdQUAorCWJpbmFyaWVzIGNvbnRhaW4gc21hbGwgdGV4dCBtZXNzYWdlIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZXkgY291bGQgYmUKKwltaXNpZGVudGlmaWVkIGFuZCBkYW1hZ2VkIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcy4KK2NoZWNrPW5vbmUsbm9ybWFsLHN0cmljdCAoZGVmYXVsdCBub3JtYWwpCisJQ2hlY2sgbGV2ZWwuIFNlbGVjdGluZyBub25lIHdpbGwgY2F1c2Ugb25seSBsaXR0bGUgc3BlZWR1cCBhbmQgYmlnCisJZGFuZ2VyLiBJIHRyaWVkIHRvIHdyaXRlIGl0IHNvIHRoYXQgaXQgd29uJ3QgY3Jhc2ggaWYgY2hlY2s9bm9ybWFsIG9uCisJY29ycnVwdGVkIGZpbGVzeXN0ZW1zLiBjaGVjaz1zdHJpY3QgbWVhbnMgbWFueSBzdXBlcmZsdW91cyBjaGVja3MgLQorCXVzZWQgZm9yIGRlYnVnZ2luZyAoZm9yIGV4YW1wbGUgaXQgY2hlY2tzIGlmIGZpbGUgaXMgYWxsb2NhdGVkIGluCisJYml0bWFwcyB3aGVuIGFjY2Vzc2luZyBpdCkuCitlcnJvcnM9Y29udGludWUscmVtb3VudC1ybyxwYW5pYyAoZGVmYXVsdCByZW1vdW50LXJvKQorCUJlaGF2aW91ciB3aGVuIGZpbGVzeXN0ZW0gZXJyb3JzIGZvdW5kLgorY2hrZHNrPW5vLGVycm9ycyxhbHdheXMgKGRlZmF1bHQgZXJyb3JzKQorCVdoZW4gdG8gbWFyayBmaWxlc3lzdGVtIGRpcnR5IHNvIHRoYXQgT1MvMiBjaGVja3MgaXQuCitlYXM9bm8scm8scncgKGRlZmF1bHQgcncpCisJV2hhdCB0byBkbyB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMuICdubycgLSBpZ25vcmUgdGhlbSBhbmQgdXNlIGFsd2F5cworCXZhbHVlcyBzcGVjaWZpZWQgaW4gdWlkL2dpZC9tb2RlIG9wdGlvbnMuICdybycgLSByZWFkIGV4dGVuZGVkCisJYXR0cmlidXRlcyBidXQgZG8gbm90IGNyZWF0ZSB0aGVtLiAncncnIC0gY3JlYXRlIGV4dGVuZGVkIGF0dHJpYnV0ZXMKKwl3aGVuIHlvdSB1c2UgY2htb2QvY2hvd24vY2hncnAvbWtub2QvbG4gLXMgb24gdGhlIGZpbGVzeXN0ZW0uCit0aW1lc2hpZnQ9KC0pbm5uIChkZWZhdWx0IDApCisJU2hpZnRzIHRoZSB0aW1lIGJ5IG5ubiBzZWNvbmRzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHNlZSB1bmRlciBsaW51eAorCW9uZSBob3VyIG1vcmUsIHRoYW4gdW5kZXIgb3MvMiwgdXNlIHRpbWVzaGlmdD0tMzYwMC4KKworCitGaWxlIG5hbWVzCisKK0FzIGluIE9TLzIsIGZpbGVuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZS4gSG93ZXZlciwgc2hlbGwgdGhpbmtzIHRoYXQgbmFtZXMKK2FyZSBjYXNlIHNlbnNpdGl2ZSwgc28gZm9yIGV4YW1wbGUgd2hlbiB5b3UgY3JlYXRlIGEgZmlsZSBGT08sIHlvdSBjYW4gdXNlCisnY2F0IEZPTycsICdjYXQgRm9vJywgJ2NhdCBmb28nIG9yICdjYXQgRionIGJ1dCBub3QgJ2NhdCBmKicuIE5vdGUsIHRoYXQgeW91CithbHNvIHdvbid0IGJlIGFibGUgdG8gY29tcGlsZSBsaW51eCBrZXJuZWwgKGFuZCBtYXliZSBvdGhlciB0aGluZ3MpIG9uIEhQRlMKK2JlY2F1c2Uga2VybmVsIGNyZWF0ZXMgZGlmZmVyZW50IGZpbGVzIHdpdGggbmFtZXMgbGlrZSBib290c2VjdC5TIGFuZAorYm9vdHNlY3Qucy4gV2hlbiBzZWFyY2hpbmcgZm9yIGZpbGUgdGhhdHMgbmFtZSBoYXMgY2hhcmFjdGVycyA+PSAxMjgsIGNvZGVwYWdlcworYXJlIHVzZWQgLSBzZWUgYmVsb3cuCitPUy8yIGlnbm9yZXMgZG90cyBhbmQgc3BhY2VzIGF0IHRoZSBlbmQgb2YgZmlsZSBuYW1lLCBzbyB0aGlzIGRyaXZlciBkb2VzIGFzCit3ZWxsLiBJZiB5b3UgY3JlYXRlICdhLiAuLi4nLCB0aGUgZmlsZSAnYScgd2lsbCBiZSBjcmVhdGVkLCBidXQgeW91IGNhbiBzdGlsbAorYWNjZXNzIGl0IHVuZGVyIG5hbWVzICdhLicsICdhLi4nLCAnYSAuICAuIC4gJyBldGMuCisKKworRXh0ZW5kZWQgYXR0cmlidXRlcworCitPbiBIUEZTIHBhcnRpdGlvbnMsIE9TLzIgY2FuIGFzc29jaWF0ZSB0byBlYWNoIGZpbGUgYSBzcGVjaWFsIGluZm9ybWF0aW9uIGNhbGxlZAorZXh0ZW5kZWQgYXR0cmlidXRlcy4gRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgcGFpcnMgb2YgKGtleSx2YWx1ZSkgd2hlcmUga2V5IGlzCithbiBhc2NpaSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhhdCBhdHRyaWJ1dGUgYW5kIHZhbHVlIGlzIGFueSBzdHJpbmcgb2YgYnl0ZXMgb2YKK3ZhcmlhYmxlIGxlbmd0aC4gT1MvMiBzdG9yZXMgd2luZG93IGFuZCBpY29uIHBvc2l0aW9ucyBhbmQgZmlsZSB0eXBlcyB0aGVyZS4gU28KK3doeSBub3QgdXNlIGl0IGZvciB1bml4LXNwZWNpZmljIGluZm8gbGlrZSBmaWxlIG93bmVyIG9yIGFjY2VzcyByaWdodHM/IFRoaXMKK2RyaXZlciBjYW4gZG8gaXQuIElmIHlvdSBjaG93bi9jaGdycC9jaG1vZCBvbiBhIGhwZnMgcGFydGl0aW9uLCBleHRlbmRlZAorYXR0cmlidXRlcyB3aXRoIGtleXMgIlVJRCIsICJHSUQiIG9yICJNT0RFIiBhbmQgMi1ieXRlIHZhbHVlcyBhcmUgY3JlYXRlZC4gT25seQordGhhdCBleHRlbmRlZCBhdHRyaWJ1dGVzIHRob3NlIHZhbHVlIGRpZmZlcnMgZnJvbSBkZWZhdWx0cyBzcGVjaWZpZWQgaW4gbW91bnQKK29wdGlvbnMgYXJlIGNyZWF0ZWQuIE9uY2UgY3JlYXRlZCwgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5ldmVyIGRlbGV0ZWQsCit0aGV5J3JlIGp1c3QgY2hhbmdlZC4gSXQgbWVhbnMgdGhhdCB3aGVuIHlvdXIgZGVmYXVsdCB1aWQ9MCBhbmQgeW91IHR5cGUKK3NvbWV0aGluZyBsaWtlICdjaG93biBsdXNlciBmaWxlOyBjaG93biByb290IGZpbGUnIHRoZSBmaWxlIHdpbGwgY29udGFpbgorZXh0ZW5kZWQgYXR0cmlidXRlIFVJRD0wLiBBbmQgd2hlbiB5b3UgdW1vdW50IHRoZSBmcyBhbmQgbW91bnQgaXQgYWdhaW4gd2l0aAordWlkPWx1c2VyX3VpZCwgdGhlIGZpbGUgd2lsbCBiZSBzdGlsbCBvd25lZCBieSByb290ISBJZiB5b3UgY2htb2QgZmlsZSB0byA0NDQsCitleHRlbmRlZCBhdHRyaWJ1dGUgIk1PREUiIHdpbGwgbm90IGJlIHNldCwgdGhpcyBzcGVjaWFsIGNhc2UgaXMgZG9uZSBieSBzZXR0aW5nCityZWFkLW9ubHkgZmxhZy4gV2hlbiB5b3UgbWtub2QgYSBibG9jayBvciBjaGFyIGRldmljZSwgYmVzaWRlcyAiTU9ERSIsIHRoZQorc3BlY2lhbCA0LWJ5dGUgZXh0ZW5kZWQgYXR0cmlidXRlICJERVYiIHdpbGwgYmUgY3JlYXRlZCBjb250YWluaW5nIHRoZSBkZXZpY2UKK251bWJlci4gQ3VycmVudGx5IHRoaXMgZHJpdmVyIGNhbm5vdCByZXNpemUgZXh0ZW5kZWQgYXR0cmlidXRlcyAtIGl0IG1lYW5zCit0aGF0IGlmIHNvbWVib2R5IChJIGRvbid0IGtub3cgd2hvPykgaGFzIHNldCAiVUlEIiwgIkdJRCIsICJNT0RFIiBvciAiREVWIgorYXR0cmlidXRlcyB3aXRoIGRpZmZlcmVudCBzaXplcywgdGhleSB3b24ndCBiZSByZXdyaXR0ZW4gYW5kIGNoYW5naW5nIHRoZXNlCit2YWx1ZXMgZG9lc24ndCB3b3JrLgorCisKK1N5bWxpbmtzCisKK1lvdSBjYW4gZG8gc3ltbGlua3Mgb24gSFBGUyBwYXJ0aXRpb24sIHN5bWxpbmtzIGFyZSBhY2hpZXZlZCBieSBzZXR0aW5nIGV4dGVuZGVkCithdHRyaWJ1dGUgbmFtZWQgIlNZTUxJTksiIHdpdGggc3ltbGluayB2YWx1ZS4gTGlrZSBvbiBleHQyLCB5b3UgY2FuIGNob3duIGFuZAorY2hncnAgc3ltbGlua3MgYnV0IEkgZG9uJ3Qga25vdyB3aGF0IGlzIGl0IGdvb2QgZm9yLiBjaG1vZGluZyBzeW1saW5rIHJlc3VsdHMKK2luIGNobW9kaW5nIGZpbGUgd2hlcmUgc3ltbGluayBwb2ludHMuIFRoZXNlIHN5bWxpbmtzIGFyZSBqdXN0IGZvciBMaW51eCB1c2UgYW5kCitpbmNvbXBhdGlibGUgd2l0aCBPUy8yLiBPUy8yIFBtU2hlbGwgc3ltbGlua3MgYXJlIG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSB0aGV5IGFyZQorc3RvcmVkIGluIHZlcnkgY3Jhenkgd2F5LiBUaGV5IHRyaWVkIHRvIGRvIGl0IHNvIHRoYXQgbGluayBjaGFuZ2VzIHdoZW4gZmlsZSBpcworbW92ZWQgLi4uIHNvbWV0aW1lcyBpdCB3b3Jrcy4gQnV0IHRoZSBsaW5rIGlzIHBhcnRseSBzdG9yZWQgaW4gZGlyZWN0b3J5CitleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCBwYXJ0bHkgaW4gT1MyU1lTLklOSS4gSSBkb24ndCB3YW50IChhbmQgZG9uJ3Qga25vdyBob3cpCit0byBhbmFseXplIG9yIGNoYW5nZSBPUzJTWVMuSU5JLgorCisKK0NvZGVwYWdlcworCitIUEZTIGNhbiBjb250YWluIHNldmVyYWwgdXBwZXJjYXNpbmcgdGFibGVzIGZvciBzZXZlcmFsIGNvZGVwYWdlcyBhbmQgZWFjaAorZmlsZSBoYXMgYSBwb2ludGVyIHRvIGNvZGVwYWdlIGl0J3MgbmFtZSBpcyBpbi4gSG93ZXZlciBPUy8yIHdhcyBjcmVhdGVkIGluCitBbWVyaWNhIHdoZXJlIHBlb3BsZSBkb24ndCBjYXJlIG11Y2ggYWJvdXQgY29kZXBhZ2VzIGFuZCBzbyBtdWx0aXBsZSBjb2RlcGFnZXMKK3N1cHBvcnQgaXMgcXVpdGUgYnVnZ3kuIEkgaGF2ZSBDemVjaCBPUy8yIHdvcmtpbmcgaW4gY29kZXBhZ2UgODUyIG9uIG15IGRpc2suCitPbmNlIEkgYm9vdGVkIEVuZ2xpc2ggT1MvMiB3b3JraW5nIGluIGNwIDg1MCBhbmQgSSBjcmVhdGVkIGEgZmlsZSBvbiBteSA4NTIKK3BhcnRpdGlvbi4gSXQgbWFya2VkIGZpbGUgbmFtZSBjb2RlcGFnZSBhcyA4NTAgLSBnb29kLiBCdXQgd2hlbiBJIGFnYWluIGJvb3RlZAorQ3plY2ggT1MvMiwgdGhlIGZpbGUgd2FzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlIHVuZGVyIGFueSBuYW1lLiBJdCBzZWVtcyB0aGF0CitPUy8yIHVwcGVyY2FzZXMgdGhlIHNlYXJjaCBwYXR0ZXJuIHdpdGggaXRzIHN5c3RlbSBjb2RlIHBhZ2UgKDg1MikgYW5kIGZpbGUKK25hbWUgaXQncyBjb21wYXJpbmcgdG8gd2l0aCBpdHMgY29kZSBwYWdlICg4NTApLiBUaGVzZSBjb3VsZCBuZXZlciBtYXRjaC4gSXMgaXQKK3JlYWxseSB3aGF0IElCTSBkZXZlbG9wZXJzIHdhbnRlZD8gQnV0IHByb2JsZW1zIGNvbnRpbnVlZC4gV2hlbiBJIGNyZWF0ZWQgaW4KK0N6ZWNoIE9TLzIgYW5vdGhlciBmaWxlIGluIHRoYXQgZGlyZWN0b3J5LCB0aGF0IGZpbGUgd2FzIGluYWNjZXNzaWJsZSB0b28uIE9TLzIKK3Byb2JhYmx5IHVzZXMgZGlmZmVyZW50IHVwcGVyY2FzaW5nIG1ldGhvZCB3aGVuIHNlYXJjaGluZyB3aGVyZSB0byBwbGFjZSBhIGZpbGUKKyhub3RlLCB0aGF0IGZpbGVzIGluIEhQRlMgZGlyZWN0b3J5IG11c3QgYmUgc29ydGVkKSBhbmQgd2hlbiBzZWFyY2hpbmcgZm9yCithIGZpbGUuIEZpbmFsbHkgd2hlbiBJIG9wZW5lZCB0aGlzIGRpcmVjdG9yeSBpbiBQbVNoZWxsLCBQbVNoZWxsIGNyYXNoZWQgKHRoZQorZnVubnkgdGhpbmcgd2FzIHRoYXQsIHdoZW4gcmVib290ZWQsIFBtU2hlbGwgdHJpZWQgdG8gcmVvcGVuIHRoaXMgZGlyZWN0b3J5CithZ2FpbiA6LSkuIGNoa2RzayBoYXBwaWx5IGlnbm9yZXMgdGhlc2UgZXJyb3JzIGFuZCBvbmx5IGxvdy1sZXZlbCBkaXNrCittb2RpZmljYXRpb24gc2F2ZWQgbWUuICBOZXZlciBtaXggZGlmZmVyZW50IGxhbmd1YWdlIHZlcnNpb25zIG9mIE9TLzIgb24gb25lCitzeXN0ZW0gYWx0aG91Z2ggSFBGUyB3YXMgZGVzaWduZWQgdG8gYWxsb3cgdGhhdC4KK09LLCBJIGNvdWxkIGltcGxlbWVudCBjb21wbGV4IGNvZGVwYWdlIHN1cHBvcnQgdG8gdGhpcyBkcml2ZXIgYnV0IEkgdGhpbmsgaXQKK3dvdWxkIGNhdXNlIG1vcmUgcHJvYmxlbXMgdGhhbiBiZW5lZml0IHdpdGggc3VjaCBidWdneSBpbXBsZW1lbnRhdGlvbiBpbiBPUy8yLgorU28gdGhpcyBkcml2ZXIgc2ltcGx5IHVzZXMgZmlyc3QgY29kZXBhZ2UgaXQgZmluZHMgZm9yIHVwcGVyY2FzaW5nIGFuZAorbG93ZXJjYXNpbmcgbm8gbWF0dGVyIHdoYXQncyBmaWxlIGNvZGVwYWdlIGluZGV4LiBVc3VhbGx5IGFsbCBmaWxlIG5hbWVzIGFyZSBpbgordGhpcyBjb2RlcGFnZSAtIGlmIHlvdSBkb24ndCB0cnkgdG8gZG8gd2hhdCBJIGRlc2NyaWJlZCBhYm92ZSA6LSkKKworCitLbm93biBidWdzCisKK0hQRlMzODYgb24gT1MvMiBzZXJ2ZXIgaXMgbm90IHN1cHBvcnRlZC4gSFBGUzM4NiBpbnN0YWxsZWQgb24gbm9ybWFsIE9TLzIgY2xpZW50CitzaG91bGQgd29yay4gSWYgeW91IGhhdmUgT1MvMiBzZXJ2ZXIsIHVzZSBvbmx5IHJlYWQtb25seSBtb2RlLiBJIGRvbid0IGtub3cgaG93Cit0byBoYW5kbGUgc29tZSBIUEZTMzg2IHN0cnVjdHVyZXMgbGlrZSBhY2Nlc3MgY29udHJvbCBsaXN0IG9yIGV4dGVuZGVkIHBlcm0KK2xpc3QsIEkgZG9uJ3Qga25vdyBob3cgdG8gZGVsZXRlIHRoZW0gd2hlbiBmaWxlIGlzIGRlbGV0ZWQgYW5kIGhvdyB0byBub3QKK292ZXJ3cml0ZSB0aGVtIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy4gU2VuZCBtZSBzb21lIGluZm8gb24gdGhlc2Ugc3RydWN0dXJlcworYW5kIEknbGwgbWFrZSBpdC4gSG93ZXZlciwgdGhpcyBkcml2ZXIgc2hvdWxkIGRldGVjdCBwcmVzZW5jZSBvZiBIUEZTMzg2CitzdHJ1Y3R1cmVzLCByZW1vdW50IHJlYWQtb25seSBhbmQgbm90IGRlc3Ryb3kgdGhlbSAoSSBob3BlKS4KKworV2hlbiB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHRoZXkgd2lsbCBiZSB0cnVuY2F0ZWQKK2FuZCBubyBlcnJvciBpcyByZXR1cm5lZC4KKworT1MvMiBjYW4ndCBhY2Nlc3MgZmlsZXMgaWYgdGhlIHBhdGggaXMgbG9uZ2VyIHRoYW4gYWJvdXQgMjU2IGNoYXJzIGJ1dCB0aGlzCitkcml2ZXIgYWxsb3dzIHlvdSB0byBkbyBpdC4gY2hrZHNrIGlnbm9yZXMgc3VjaCBlcnJvcnMuCisKK1NvbWV0aW1lcyB5b3Ugd29uJ3QgYmUgYWJsZSB0byBkZWxldGUgc29tZSBmaWxlcyBvbiBhIHZlcnkgZnVsbCBmaWxlc3lzdGVtCisocmV0dXJuaW5nIGVycm9yIEVOT1NQQykuIFRoYXQncyBiZWNhdXNlIGZpbGUgaW4gbm9uLWxlYWYgbm9kZSBpbiBkaXJlY3RvcnkgdHJlZQorKG9uZSBkaXJlY3RvcnksIGlmIGl0J3MgbGFyZ2UsIGhhcyBkaXJlbnRzIGluIHRyZWUgb24gSFBGUykgbXVzdCBiZSByZXBsYWNlZAord2l0aCBhbm90aGVyIG5vZGUgd2hlbiBkZWxldGVkLiBBbmQgdGhhdCBuZXcgZmlsZSBtaWdodCBoYXZlIGxhcmdlciBuYW1lIHRoYW4KK3RoZSBvbGQgb25lIHNvIHRoZSBuZXcgbmFtZSBkb2Vzbid0IGZpdCBpbiBkaXJlY3Rvcnkgbm9kZSAoZG5vZGUpLiBBbmQgdGhhdAord291bGQgcmVzdWx0IGluIGRpcmVjdG9yeSB0cmVlIHNwbGl0dGluZywgdGhhdCB0YWtlcyBkaXNrIHNwYWNlLiBXb3JrYXJvdW5kIGlzCit0byBkZWxldGUgb3RoZXIgZmlsZXMgdGhhdCBhcmUgbGVhZiAocHJvYmFiaWxpdHkgdGhhdCB0aGUgZmlsZSBpcyBub24tbGVhZiBpcworYWJvdXQgMS81MCkgb3IgdG8gdHJ1bmNhdGUgZmlsZSBmaXJzdCB0byBtYWtlIHNvbWUgc3BhY2UuCitZb3UgZW5jb3VudGVyIHRoaXMgcHJvYmxlbSBvbmx5IGlmIHlvdSBoYXZlIG1hbnkgZGlyZWN0b3JpZXMgc28gdGhhdAorcHJlYWxsb2NhdGVkIGRpcmVjdG9yeSBiYW5kIGlzIGZ1bGwgaS5lLgorCW51bWJlcl9vZl9kaXJlY3RvcmllcyAvIHNpemVfb2ZfZmlsZXN5c3RlbV9pbl9tYiA+IDQuCisKK1lvdSBjYW4ndCBkZWxldGUgb3BlbiBkaXJlY3Rvcmllcy4KKworWW91IGNhbid0IHJlbmFtZSBvdmVyIGRpcmVjdG9yaWVzICh3aGF0IGlzIGl0IGdvb2QgZm9yPykuCisKK1JlbmFtaW5nIGZpbGVzIHNvIHRoYXQgb25seSBjYXNlIGNoYW5nZXMgZG9lc24ndCB3b3JrLiBUaGlzIGRyaXZlciBzdXBwb3J0cyBpdAorYnV0IHZmcyBkb2Vzbid0LiBTb21ldGhpbmcgbGlrZSAnbXYgZmlsZSBGSUxFJyB3b24ndCB3b3JrLgorCitBbGwgYXRpbWVzIGFuZCBkaXJlY3RvcnkgbXRpbWVzIGFyZSBub3QgdXBkYXRlZC4gVGhhdCdzIGJlY2F1c2Ugb2YgcGVyZm9ybWFuY2UKK3JlYXNvbnMuIElmIHlvdSBleHRyZW1lbHkgd2lzaCB0byB1cGRhdGUgdGhlbSwgbGV0IG1lIGtub3csIEknbGwgd3JpdGUgaXQgKGJ1dAoraXQgd2lsbCBiZSBzbG93KS4KKworV2hlbiB0aGUgc3lzdGVtIGlzIG91dCBvZiBtZW1vcnkgYW5kIHN3YXAsIGl0IG1heSBzbGlnaHRseSBjb3JydXB0IGZpbGVzeXN0ZW0KKyhsb3N0IGZpbGVzLCB1bmJhbGFuY2VkIGRpcmVjdG9yaWVzKS4gKEkgZ3Vlc3MgYWxsIGZpbGVzeXN0ZW0gbWF5IGRvIGl0KS4KKworV2hlbiBjb21waWxlZCwgeW91IGdldCB3YXJuaW5nOiBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpc24ndCBhIHByb3RvdHlwZS4gRG9lcworYW55Ym9keSBrbm93IHdoYXQgZG9lcyBpdCBtZWFuPworCisKK1doYXQgZG9lcyAidW5iYWxhbmNlZCB0cmVlIiBtZXNzYWdlIG1lYW4/CisKK09sZCB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlciBjcmVhdGVkIHNvbWV0aW1lcyB1bmJhbGFuY2VkIGRub2RlIHRyZWVzLiBPUy8yCitjaGtkc2sgZG9lc24ndCBzY3JlYW0gaWYgdGhlIHRyZWUgaXMgdW5iYWxhbmNlZCAoYW5kIHNvbWV0aW1lcyBjcmVhdGVzCit1bmJhbGFuY2VkIHRyZWVzIHRvbyA6LSkgYnV0IGJvdGggSFBGUyBhbmQgSFBGUzM4NiBjb250YWluIGJ1ZyB0aGF0IGl0IHJhcmVseQorY3Jhc2hlcyB3aGVuIHRoZSB0cmVlIGlzIG5vdCBiYWxhbmNlZC4gVGhpcyBkcml2ZXIgaGFuZGxlcyB1bmJhbGFuY2VkIHRyZWVzCitjb3JyZWN0bHkgYW5kIHdyaXRlcyB3YXJuaW5nIGlmIGl0IGZpbmRzIHRoZW0uIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCB0aGlzIGlzCitwcm9iYWJseSBiZWNhdXNlIG9mIGRpcmVjdG9yaWVzIGNyZWF0ZWQgd2l0aCBvbGQgdmVyc2lvbiBvZiB0aGlzIGRyaXZlci4KK1dvcmthcm91bmQgaXMgdG8gbW92ZSBhbGwgZmlsZXMgZnJvbSB0aGF0IGRpcmVjdG9yeSB0byBhbm90aGVyIGFuZCB0aGVuIGJhY2sKK2FnYWluLiBEbyBpdCBpbiBMaW51eCwgbm90IE9TLzIhIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlIGluIGRpcmVjdG9yeSB0aGF0IGlzCit3aG9sZSBjcmVhdGVkIGJ5IHRoaXMgZHJpdmVyLCBpdCBpcyBCVUcgLSBsZXQgbWUga25vdyBhYm91dCBpdC4KKworCitCdWdzIGluIE9TLzIKKworV2hlbiB5b3UgaGF2ZSB0d28gKG9yIG1vcmUpIGxvc3QgZGlyZWN0b3JpZXMgcG9pbnRpbmcgZWFjaCB0byBvdGhlciwgY2hrZHNrCitsb2NrcyB1cCB3aGVuIHJlcGFpcmluZyBmaWxlc3lzdGVtLgorCitTb21ldGltZXMgKEkgdGhpbmsgaXQncyByYW5kb20pIHdoZW4geW91IGNyZWF0ZSBhIGZpbGUgd2l0aCBvbmUtY2hhciBuYW1lIHVuZGVyCitPUy8yLCBPUy8yIG1hcmtzIGl0IGFzICdsb25nJy4gY2hrZHNrIHRoZW4gcmVtb3ZlcyB0aGlzIGZsYWcgc2F5aW5nICJNaW5vciBmcworZXJyb3IgY29ycmVjdGVkIi4KKworRmlsZSBuYW1lcyBsaWtlICJhIC5iIiBhcmUgbWFya2VkIGFzICdsb25nJyBieSBPUy8yIGJ1dCBjaGtkc2sgImNvcnJlY3RzIiBpdCBhbmQKK21hcmtzIHRoZW0gYXMgc2hvcnQgKGFuZCB3cml0ZXMgIm1pbm9yIGZzIGVycm9yIGNvcnJlY3RlZCIpLiBUaGlzIGJ1ZyBpcyBub3QgaW4KK0hQRlMzODYuCisKK0NvZGVwYWdlIGJ1Z3MgZGVzY3JpYmVkIGFib3ZlLgorCitJZiB5b3UgZG9uJ3QgaW5zdGFsbCBmaXhwYWNrcywgdGhlcmUgYXJlIG1hbnksIG1hbnkgbW9yZS4uLgorCisKK0hpc3RvcnkKKworMC45MCBGaXJzdCBwdWJsaWMgcmVsZWFzZQorMC45MSBGaXhlZCBidWcgdGhhdCBjYXVzZWQgc2hvb3RpbmcgdG8gbWVtb3J5IHdoZW4gd3JpdGVfaW5vZGUgd2FzIGNhbGxlZCBvbgorCW9wZW4gaW5vZGUgKHJhcmVseSBoYXBwZW5lZCkKKzAuOTIgRml4ZWQgYSBsaXR0bGUgbWVtb3J5IGxlYWsgaW4gZnJlZWluZyBkaXJlY3RvcnkgaW5vZGVzCiswLjkzIEZpeGVkIGJ1ZyB0aGF0IGxvY2tlZCB1cCB0aGUgbWFjaGluZSB3aGVuIHRoZXJlIHdlcmUgdG9vIG1hbnkgZmlsZW5hbWVzCisJd2l0aCBmaXJzdCAxNSBjaGFyYWN0ZXJzIHNhbWUKKyAgICAgRml4ZWQgd3JpdGVfZmlsZSB0byB6ZXJvIGZpbGUgd2hlbiB3cml0aW5nIGJlaGluZCBmaWxlIGVuZAorMC45NCBGaXhlZCBhIGxpdHRsZSBtZW1vcnkgbGVhayB3aGVuIHRyeWluZyB0byBkZWxldGUgYnVzeSBmaWxlIG9yIGRpcmVjdG9yeQorMC45NSBGaXhlZCBhIGJ1ZyB0aGF0IGlfaHBmc19wYXJlbnRfZGlyIHdhcyBub3QgdXBkYXRlZCB3aGVuIG1vdmluZyBmaWxlcworMS45MCBGaXJzdCB2ZXJzaW9uIGZvciAyLjEuMXh4IGtlcm5lbHMKKzEuOTEgRml4ZWQgYSBidWcgdGhhdCBjaGtfc2VjdG9ycyBmYWlsZWQgd2hlbiBzZWN0b3JzIHdlcmUgYXQgdGhlIGVuZCBvZiBkaXNrCisgICAgIEZpeGVkIGEgcmFjZS1jb25kaXRpb24gd2hlbiB3cml0ZV9pbm9kZSBpcyBjYWxsZWQgd2hpbGUgZGVsZXRpbmcgZmlsZQorICAgICBGaXhlZCBhIGJ1ZyB0aGF0IGNvdWxkIHBvc3NpYmx5IGhhcHBlbiAod2l0aCB2ZXJ5IGxvdyBwcm9iYWJpbGl0eSkgd2hlbgorICAgICAJdXNpbmcgMHhmZiBpbiBmaWxlbmFtZXMKKyAgICAgUmV3cml0dGVuIGxvY2tpbmcgdG8gYXZvaWQgcmFjZS1jb25kaXRpb25zCisgICAgIE1vdW50IG9wdGlvbiAnZWFzJyBub3cgd29ya3MKKyAgICAgRnN5bmMgbm8gbG9uZ2VyIHJldHVybnMgZXJyb3IKKyAgICAgRmlsZXMgYmVnaW5uaW5nIHdpdGggJy4nIGFyZSBtYXJrZWQgaGlkZGVuCisgICAgIFJlbW91bnQgc3VwcG9ydCBhZGRlZAorICAgICBBbGxvYyBpcyBub3Qgc28gc2xvdyB3aGVuIGZpbGVzeXN0ZW0gYmVjb21lcyBmdWxsCisgICAgIEF0aW1lcyBhcmUgbm8gbW9yZSB1cGRhdGVkIGJlY2F1c2UgaXQgc2xvd3MgZG93biBvcGVyYXRpb24KKyAgICAgQ29kZSBjbGVhbnVwIChyZW1vdmVkIGFsbCBjb21tZW50ZWQgZGVidWcgcHJpbnRzKQorMS45MiBDb3JyZWN0ZWQgYSBidWcgd2hlbiBzeW5jIHdhcyBjYWxsZWQganVzdCBiZWZvcmUgY2xvc2luZyBmaWxlCisxLjkzIE1vZGlmaWVkLCBzbyB0aGF0IGl0IHdvcmtzIHdpdGgga2VybmVscyA+PSAyLjEuMTMxLCBJIGRvbid0IGtub3cgaWYgaXQKKwl3b3JrcyB3aXRoIHByZXZpb3VzIHZlcnNpb25zCisgICAgIEZpeGVkIGEgcG9zc2libGUgcHJvYmxlbSB3aXRoIGRpc2tzID4gNjRHIChidXQgSSBkb24ndCBoYXZlIG9uZSwgc28gSSBjYW4ndAorICAgICAJdGVzdCBpdCkKKyAgICAgRml4ZWQgYSBmaWxlIG92ZXJmbG93IGF0IDJHCisgICAgIEFkZGVkIG5ldyBvcHRpb24gJ3RpbWVzaGlmdCcKKyAgICAgQ2hhbmdlZCBiZWhhdmlvdXIgb24gSFBGUzM4NjogSXQgaXMgbm93IHBvc3NpYmxlIHRvIG9wZXJhdGUgb24gSFBGUzM4NiBpbgorICAgICAJcmVhZC1vbmx5IG1vZGUKKyAgICAgRml4ZWQgYSBidWcgdGhhdCBzbG93ZWQgZG93biBhbGxvYyBhbmQgcHJldmVudGVkIGFsbG9jYXRpbmcgMTAwJSBzcGFjZQorICAgICAJKHRoaXMgYnVnIHdhcyBub3QgZGVzdHJ1Y3RpdmUpCisxLjk0IEFkZGVkIHdvcmthcm91bmQgZm9yIG9uZSBidWcgaW4gTGludXgKKyAgICAgRml4ZWQgb25lIGJ1ZmZlciBsZWFrCisgICAgIEZpeGVkIHNvbWUgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzIChidXQgaXQncyBzdGlsbAorCW5vdCAxMDAlIG9rLCBJIGhhdmUgbm8gaW5mbyBvbiBpdCBhbmQgT1MvMiBkb2Vzbid0IHdhbnQgdG8gY3JlYXRlIHRoZW0pCisgICAgIFJld3JpdHRlbiBhbGxvY2F0aW9uCisgICAgIEZpeGVkIGEgYnVnIHdpdGggaV9ibG9ja3MgKGR1IHNvbWV0aW1lcyBkaWRuJ3QgZGlzcGxheSBjb3JyZWN0IHZhbHVlcykKKyAgICAgRGlyZWN0b3JpZXMgaGF2ZSBubyBsb25nZXIgYXJjaGl2ZSBhdHRyaWJ1dGUgc2V0IChzb21lIHByb2dyYW1zIGRvbid0IGxpa2UKKwlpdCkKKyAgICAgRml4ZWQgYSBidWcgdGhhdCBpdCBzZXQgYmFkbHkgb25lIGZsYWcgaW4gbGFyZ2UgYW5vZGUgdHJlZSAoaXQgd2FzIG5vdAorCWRlc3RydWN0aXZlKQorMS45NSBGaXhlZCBvbmUgYnVmZmVyIGxlYWssIHRoYXQgY291bGQgaGFwcGVuIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtCisgICAgIEZpeGVkIG9uZSBidWcgaW4gYWxsb2NhdGlvbiBpbiAxLjk0CisxLjk2IEFkZGVkIHdvcmthcm91bmQgZm9yIG9uZSBidWcgaW4gT1MvMiAoSFBGUyBsb2NrZWQgdXAsIEhQRlMzODYgcmVwb3J0ZWQKKwllcnJvciBzb21ldGltZXMgd2hlbiBvcGVuaW5nIGRpcmVjdG9yaWVzIGluIFBNU0hFTEwpCisgICAgIEZpeGVkIGEgcG9zc2libGUgYml0bWFwIHJhY2UKKyAgICAgRml4ZWQgcG9zc2libGUgcHJvYmxlbSBvbiBsYXJnZSBkaXNrcworICAgICBZb3UgY2FuIG5vdyBkZWxldGUgb3BlbiBmaWxlcworICAgICBGaXhlZCBhIG5vbmRlc3RydWN0aXZlIHJhY2UgaW4gcmVuYW1lCisxLjk3IFN1cHBvcnQgZm9yIEhQRlMgdjMgKG9uIGxhcmdlIHBhcnRpdGlvbnMpCisgICAgIEZpeGVkIGEgYnVnIHRoYXQgaXQgZGlkbid0IGFsbG93IGNyZWF0aW9uIG9mIGZpbGVzID4gMTI4TSAoaXQgc2hvdWxkIGJlIDJHKQorMS45Ny4xIENoYW5nZWQgbmFtZXMgb2YgZ2xvYmFsIHN5bWJvbHMKKyAgICAgICBGaXhlZCBhIGJ1ZyB3aGVuIGNobW9kaW5nIG9yIGNob3duaW5nIHJvb3QgZGlyZWN0b3J5CisxLjk4IEZpeGVkIGEgZGVhZGxvY2sgd2hlbiB1c2luZyBvbGRfcmVhZGRpcgorICAgICBCZXR0ZXIgZGlyZWN0b3J5IGhhbmRsaW5nOyB3b3JrYXJvdW5kIGZvciAidW5iYWxhbmNlZCB0cmVlIiBidWcgaW4gT1MvMgorMS45OSBDb3JyZWN0ZWQgYSBwb3NzaWJsZSBwcm9ibGVtIHdoZW4gdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIHdoaWxlIGRlbGV0aW5nCisJZmlsZQorICAgICBOb3cgaXQgdHJpZXMgdG8gdHJ1bmNhdGUgdGhlIGZpbGUgaWYgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIHdoZW4gZGVsZXRpbmcKKyAgICAgUmVtb3ZlZCBhIGxvdCBvZiByZWR1bmRhbnQgY29kZQorMi4wMCBGaXhlZCBhIGJ1ZyBpbiByZW5hbWUgKGl0IHdhcyB0aGVyZSBzaW5jZSAxLjk2KQorICAgICBCZXR0ZXIgYW50aS1mcmFnbWVudGF0aW9uIHN0cmF0ZWd5CisyLjAxIEZpeGVkIHByb2JsZW0gd2l0aCBkaXJlY3RvcnkgbGlzdGluZyBvdmVyIE5GUworICAgICBEaXJlY3RvcnkgbHNlZWsgbm93IGNoZWNrcyBmb3IgcHJvcGVyIHBhcmFtZXRlcnMKKyAgICAgRml4ZWQgcmFjZS1jb25kaXRpb24gaW4gYnVmZmVyIGNvZGUgLSBpdCBpcyBpbiBhbGwgZmlsZXN5c3RlbXMgaW4gTGludXg7CisgICAgICAgIHdoZW4gcmVhZGluZyBkZXZpY2UgKGNhdCAvZGV2L2hkYSkgd2hpbGUgY3JlYXRpbmcgZmlsZXMgb24gaXQsIGZpbGVzCisgICAgICAgIGNvdWxkIGJlIGRhbWFnZWQKKzIuMDIgV29yYXJvdW5kIGZvciBidWcgaW4gYnJlYWRhIGluIExpbnV4LiBicmVhZGEgY291bGQgY2F1c2UgYWNjZXNzZXMgYmV5b25kCisgICAgICAgIGVuZCBvZiBwYXJ0aXRpb24KKzIuMDMgQ2hhciwgYmxvY2sgZGV2aWNlcyBhbmQgcGlwZXMgYXJlIGNvcnJlY3RseSBjcmVhdGVkCisgICAgIEZpeGVkIG5vbi1jcmFzaGluZyByYWNlIGluIHVubGluayAoQWxleGFuZGVyIFZpcm8pCisgICAgIE5vdyBpdCB3b3JrcyB3aXRoIEphcGFuZXNlIHZlcnNpb24gb2YgT1MvMgorMi4wNCBGaXhlZCBlcnJvciB3aGVuIGZ0cnVuY2F0ZSB1c2VkIHRvIGV4dGVuZCBmaWxlCisyLjA1IEZpeGVkIGNyYXNoIHdoZW4gZ290IG1vdW50IHBhcmFtZXRlcnMgd2l0aG91dCA9CisgICAgIEZpeGVkIGNyYXNoIHdoZW4gYWxsb2NhdGlvbiBvZiBhbm9kZSBmYWlsZWQgZHVlIHRvIGZ1bGwgZGlzaworICAgICBGaXhlZCBzb21lIGNyYXNoZXMgd2hlbiBibG9jayBpbyBvciBpbm9kZSBhbGxvY2F0aW9uIGZhaWxlZAorMi4wNiBGaXhlZCBzb21lIGNyYXNoIG9uIGNvcnJ1cHRlZCBkaXNrIHN0cnVjdHVyZXMKKyAgICAgQmV0dGVyIGFsbG9jYXRpb24gc3RyYXRlZ3kKKyAgICAgUmVzY2hlZHVsZSBwb2ludHMgYWRkZWQgc28gdGhhdCBpdCBkb2Vzbid0IGxvY2sgQ1BVIGxvbmcgdGltZQorICAgICBJdCBzaG91bGQgd29yayBpbiByZWFkLW9ubHkgbW9kZSBvbiBXYXJwIFNlcnZlcgorMi4wNyBNb3JlIGZpeGVzIGZvciBXYXJwIFNlcnZlci4gTm93IGl0IHJlYWxseSB3b3JrcworMi4wOCBDcmVhdGluZyBuZXcgZmlsZXMgaXMgbm90IHNvIHNsb3cgb24gbGFyZ2UgZGlza3MKKyAgICAgQW4gYXR0ZW1wdCB0byBzeW5jIGRlbGV0ZWQgZmlsZSBkb2VzIG5vdCBnZW5lcmF0ZSBmaWxlc3lzdGVtIGVycm9yCisyLjA5IEZpeGVkIGVycm9yIG9uIGV4dHJlbWx5IGZyYWdtZW50ZWQgZmlsZXMKKworCisgdmltOiBzZXQgdGV4dHdpZHRoPTgwOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pc29mcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lzb2ZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjRhMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pc29mcy50eHQKQEAgLTAsMCArMSwzOCBAQAorTW91bnQgb3B0aW9ucyB0aGF0IGFyZSB0aGUgc2FtZSBhcyBmb3IgbXNkb3MgYW5kIHZmYXQgcGFydGl0aW9ucy4KKworICBnaWQ9bm5uCUFsbCBmaWxlcyBpbiB0aGUgcGFydGl0aW9uIHdpbGwgYmUgaW4gZ3JvdXAgbm5uLgorICB1aWQ9bm5uCUFsbCBmaWxlcyBpbiB0aGUgcGFydGl0aW9uIHdpbGwgYmUgb3duZWQgYnkgdXNlciBpZCBubm4uCisgIHVtYXNrPW5ubglUaGUgcGVybWlzc2lvbiBtYXNrIChzZWUgdW1hc2soMSkpIGZvciB0aGUgcGFydGl0aW9uLgorCitNb3VudCBvcHRpb25zIHRoYXQgYXJlIHRoZSBzYW1lIGFzIHZmYXQgcGFydGl0aW9ucy4gVGhlc2UgYXJlIG9ubHkgdXNlZnVsCit3aGVuIHVzaW5nIGRpc2NzIGVuY29kZWQgdXNpbmcgTWljcm9zb2Z0J3MgSm9saWV0IGV4dGVuc2lvbnMuCisgIGlvY2hhcnNldD1uYW1lIENoYXJhY3RlciBzZXQgdG8gdXNlIGZvciBjb252ZXJ0aW5nIGZyb20gVW5pY29kZSB0bworCQlBU0NJSS4gIEpvbGlldCBmaWxlbmFtZXMgYXJlIHN0b3JlZCBpbiBVbmljb2RlIGZvcm1hdCwgYnV0CisJCVVuaXggZm9yIHRoZSBtb3N0IHBhcnQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsIHdpdGggVW5pY29kZS4KKwkJVGhlcmUgaXMgYWxzbyBhbiBvcHRpb24gb2YgZG9pbmcgVVRGOCB0cmFuc2xhdGlvbnMgd2l0aCB0aGUKKwkJdXRmOCBvcHRpb24uCisgIHV0ZjggICAgICAgICAgRW5jb2RlIFVuaWNvZGUgbmFtZXMgaW4gVVRGOCBmb3JtYXQuIERlZmF1bHQgaXMgbm8uCisKK01vdW50IG9wdGlvbnMgdW5pcXVlIHRvIHRoZSBpc29mcyBmaWxlc3lzdGVtLgorICBibG9jaz01MTIgICAgIFNldCB0aGUgYmxvY2sgc2l6ZSBmb3IgdGhlIGRpc2sgdG8gNTEyIGJ5dGVzCisgIGJsb2NrPTEwMjQgICAgU2V0IHRoZSBibG9jayBzaXplIGZvciB0aGUgZGlzayB0byAxMDI0IGJ5dGVzCisgIGJsb2NrPTIwNDggICAgU2V0IHRoZSBibG9jayBzaXplIGZvciB0aGUgZGlzayB0byAyMDQ4IGJ5dGVzCisgIGNoZWNrPXJlbGF4ZWQgTWF0Y2hlcyBmaWxlbmFtZXMgd2l0aCBkaWZmZXJlbnQgY2FzZXMKKyAgY2hlY2s9c3RyaWN0ICBNYXRjaGVzIG9ubHkgZmlsZW5hbWVzIHdpdGggdGhlIGV4YWN0IHNhbWUgY2FzZQorICBjcnVmdCAgICAgICAgIFRyeSB0byBoYW5kbGUgYmFkbHkgZm9ybWF0dGVkIENEcy4KKyAgbWFwPW9mZiAgICAgICBEbyBub3QgbWFwIG5vbi1Sb2NrIFJpZGdlIGZpbGVuYW1lcyB0byBsb3dlciBjYXNlCisgIG1hcD1ub3JtYWwgICAgTWFwIG5vbi1Sb2NrIFJpZGdlIGZpbGVuYW1lcyB0byBsb3dlciBjYXNlCisgIG1hcD1hY29ybiAgICAgQXMgbWFwPW5vcm1hbCBidXQgYWxzbyBhcHBseSBBY29ybiBleHRlbnNpb25zIGlmIHByZXNlbnQKKyAgbW9kZT14eHggICAgICBTZXRzIHRoZSBwZXJtaXNzaW9ucyBvbiBmaWxlcyB0byB4eHgKKyAgbm9qb2xpZXQgICAgICBJZ25vcmUgSm9saWV0IGV4dGVuc2lvbnMgaWYgdGhleSBhcmUgcHJlc2VudC4KKyAgbm9yb2NrICAgICAgICBJZ25vcmUgUm9jayBSaWRnZSBleHRlbnNpb25zIGlmIHRoZXkgYXJlIHByZXNlbnQuCisgIHVuaGlkZSAgICAgICAgU2hvdyBoaWRkZW4gZmlsZXMuCisgIHNlc3Npb249eCAgICAgU2VsZWN0IG51bWJlciBvZiBzZXNzaW9uIG9uIG11bHRpc2Vzc2lvbiBDRAorICBzYnNlY3Rvcj14eHggIFNlc3Npb24gYmVnaW5zIGZyb20gc2VjdG9yIHh4eAorCitSZWNvbW1lbmRlZCBkb2N1bWVudHMgYWJvdXQgSVNPIDk2NjAgc3RhbmRhcmQgYXJlIGxvY2F0ZWQgYXQ6CitodHRwOi8vd3d3LnktYWRhZ2lvLmNvbS9wdWJsaWMvc3RhbmRhcmRzL2lzb19jZHJvbXIvdG9jb250Lmh0bQorZnRwOi8vZnRwLmVjbWEuY2gvZWNtYS1zdC9FY21hLTExOS5wZGYKK1F1b3RpbmcgZnJvbSB0aGUgUERGICJUaGlzIDJuZCBFZGl0aW9uIG9mIFN0YW5kYXJkIEVDTUEtMTE5IGlzIHRlY2huaWNhbGx5IAoraWRlbnRpY2FsIHdpdGggSVNPIDk2NjAuIiwgc28gaXQgaXMgYSB2YWxpZCBhbmQgZ3JhdGlzIHN1YnN0aXR1dGUgb2YgdGhlCitvZmZpY2lhbCBJU08gc3BlY2lmaWNhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvamZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvamZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTk5MmRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9qZnMudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0lCTSdzIEpvdXJuYWxlZCBGaWxlIFN5c3RlbSAoSkZTKSBmb3IgTGludXgKKworSkZTIEhvbWVwYWdlOiAgaHR0cDovL2pmcy5zb3VyY2Vmb3JnZS5uZXQvCisKK1RoZSBmb2xsb3dpbmcgbW91bnQgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOgorCitpb2NoYXJzZXQ9bmFtZQlDaGFyYWN0ZXIgc2V0IHRvIHVzZSBmb3IgY29udmVydGluZyBmcm9tIFVuaWNvZGUgdG8KKwkJQVNDSUkuICBUaGUgZGVmYXVsdCBpcyB0byBkbyBubyBjb252ZXJzaW9uLiAgVXNlCisJCWlvY2hhcnNldD11dGY4IGZvciBVVEY4IHRyYW5zbGF0aW9ucy4gIFRoaXMgcmVxdWlyZXMKKwkJQ09ORklHX05MU19VVEY4IHRvIGJlIHNldCBpbiB0aGUga2VybmVsIC5jb25maWcgZmlsZS4KKwkJaW9jaGFyc2V0PW5vbmUgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGV4cGxpY2l0bHkuCisKK3Jlc2l6ZT12YWx1ZQlSZXNpemUgdGhlIHZvbHVtZSB0byA8dmFsdWU+IGJsb2Nrcy4gIEpGUyBvbmx5IHN1cHBvcnRzCisJCWdyb3dpbmcgYSB2b2x1bWUsIG5vdCBzaHJpbmtpbmcgaXQuICBUaGlzIG9wdGlvbiBpcyBvbmx5CisJCXZhbGlkIGR1cmluZyBhIHJlbW91bnQsIHdoZW4gdGhlIHZvbHVtZSBpcyBtb3VudGVkCisJCXJlYWQtd3JpdGUuICBUaGUgcmVzaXplIGtleXdvcmQgd2l0aCBubyB2YWx1ZSB3aWxsIGdyb3cKKwkJdGhlIHZvbHVtZSB0byB0aGUgZnVsbCBzaXplIG9mIHRoZSBwYXJ0aXRpb24uCisKK25vaW50ZWdyaXR5CURvIG5vdCB3cml0ZSB0byB0aGUgam91cm5hbC4gIFRoZSBwcmltYXJ5IHVzZSBvZiB0aGlzIG9wdGlvbgorCQlpcyB0byBhbGxvdyBmb3IgaGlnaGVyIHBlcmZvcm1hbmNlIHdoZW4gcmVzdG9yaW5nIGEgdm9sdW1lCisJCWZyb20gYmFja3VwIG1lZGlhLiAgVGhlIGludGVncml0eSBvZiB0aGUgdm9sdW1lIGlzIG5vdAorCQlndWFyYW50ZWVkIGlmIHRoZSBzeXN0ZW0gYWJub3JtYWxseSBhYmVuZHMuCisKK2ludGVncml0eQlEZWZhdWx0LiAgQ29tbWl0IG1ldGFkYXRhIGNoYW5nZXMgdG8gdGhlIGpvdXJuYWwuICBVc2UgdGhpcworCQlvcHRpb24gdG8gcmVtb3VudCBhIHZvbHVtZSB3aGVyZSB0aGUgbm9pbnRlZ3JpdHkgb3B0aW9uIHdhcworCQlwcmV2aW91c2x5IHNwZWNpZmllZCBpbiBvcmRlciB0byByZXN0b3JlIG5vcm1hbCBiZWhhdmlvci4KKworZXJyb3JzPWNvbnRpbnVlCQlLZWVwIGdvaW5nIG9uIGEgZmlsZXN5c3RlbSBlcnJvci4KK2Vycm9ycz1yZW1vdW50LXJvCURlZmF1bHQuIFJlbW91bnQgdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9uIGFuIGVycm9yLgorZXJyb3JzPXBhbmljCQlQYW5pYyBhbmQgaGFsdCB0aGUgbWFjaGluZSBpZiBhbiBlcnJvciBvY2N1cnMuCisKK1BsZWFzZSBzZW5kIGJ1Z3MsIGNvbW1lbnRzLCBjYXJkcyBhbmQgbGV0dGVycyB0byBzaGFnZ3lAYXVzdGluLmlibS5jb20uCisKK1RoZSBKRlMgbWFpbGluZyBsaXN0IGNhbiBiZSBzdWJzY3JpYmVkIHRvIGJ5IHVzaW5nIHRoZSBsaW5rIGxhYmVsZWQKKyJNYWlsIGxpc3QgU3Vic2NyaWJlIiBhdCBvdXIgd2ViIHBhZ2UgaHR0cDovL2pmcy5zb3VyY2Vmb3JnZS5uZXQvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25jcGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmNwZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMmMzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25jcGZzLnR4dApAQCAtMCwwICsxLDEyIEBACitUaGUgbmNwZnMgZmlsZXN5c3RlbSB1bmRlcnN0YW5kcyB0aGUgTkNQIHByb3RvY29sLCBkZXNpZ25lZCBieSB0aGUKK05vdmVsbCBDb3Jwb3JhdGlvbiBmb3IgdGhlaXIgTmV0V2FyZSh0bSkgcHJvZHVjdC4gIE5DUCBpcyBmdW5jdGlvbmFsbHkKK3NpbWlsYXIgdG8gdGhlIE5GUyB1c2VkIGluIHRoZSBUQ1AvSVAgY29tbXVuaXR5LgorVG8gbW91bnQgYSBOZXRXYXJlIGZpbGVzeXN0ZW0sIHlvdSBuZWVkIGEgc3BlY2lhbCBtb3VudCBwcm9ncmFtLCB3aGljaAorY2FuIGJlIGZvdW5kIGluIHRoZSBuY3BmcyBwYWNrYWdlLiAgVGhlIGhvbWUgc2l0ZSBmb3IgbmNwZnMgaXMKK2Z0cC5nd2RnLmRlL3B1Yi9saW51eC9taXNjL25jcGZzLCBidXQgc3Vuc2l0ZSBhbmQgaXRzIG1hbnkgbWlycm9ycword2lsbCBoYXZlIGl0IGFzIHdlbGwuCisKK1JlbGF0ZWQgcHJvZHVjdHMgYXJlIGxpbndhcmUgYW5kIG1hcnNfbndlLCB3aGljaCB3aWxsIGdpdmUgTGludXggcGFydGlhbAorTmV0V2FyZSBzZXJ2ZXIgZnVuY3Rpb25hbGl0eS4gIExpbndhcmUncyBob21lIHNpdGUgaXMKK2tsb2thbi5zaC5jdnV0LmN6L3B1Yi9saW51eC9saW53YXJlOyBtYXJzX253ZSBjYW4gYmUgZm91bmQgb24KK2Z0cC5nd2RnLmRlL3B1Yi9saW51eC9taXNjL25jcGZzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5YjQ0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKQEAgLTAsMCArMSw2MzAgQEAKK1RoZSBMaW51eCBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK1RhYmxlIG9mIGNvbnRlbnRzCis9PT09PT09PT09PT09PT09PQorCistIE92ZXJ2aWV3CistIFdlYiBzaXRlCistIEZlYXR1cmVzCistIFN1cHBvcnRlZCBtb3VudCBvcHRpb25zCistIEtub3duIGJ1Z3MgYW5kIChtaXMtKWZlYXR1cmVzCistIFVzaW5nIE5URlMgdm9sdW1lIGFuZCBzdHJpcGUgc2V0cworICAtIFRoZSBEZXZpY2UtTWFwcGVyIGRyaXZlcgorICAtIFRoZSBTb2Z0d2FyZSBSQUlEIC8gTUQgZHJpdmVyCisgIC0gTGltaXRpYXRpb25zIHdoZW4gdXNpbmcgdGhlIE1EIGRyaXZlcgorLSBDaGFuZ2VMb2cKKworCitPdmVydmlldworPT09PT09PT0KKworTGludXgtTlRGUyBjb21lcyB3aXRoIGEgbnVtYmVyIG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMga25vd24gYXMgbnRmc3Byb2dzLgorVGhlc2UgaW5jbHVkZSBta250ZnMsIGEgZnVsbC1mZWF0dXJlZCBudGZzIGZpbGUgc3lzdGVtIGZvcm1hdCB1dGlsaXR5LAorbnRmc3VuZGVsZXRlIHVzZWQgZm9yIHJlY292ZXJpbmcgZmlsZXMgdGhhdCB3ZXJlIHVuaW50ZW50aW9uYWxseSBkZWxldGVkCitmcm9tIGFuIE5URlMgdm9sdW1lIGFuZCBudGZzcmVzaXplIHdoaWNoIGlzIHVzZWQgdG8gcmVzaXplIGFuIE5URlMgcGFydGl0aW9uLgorU2VlIHRoZSB3ZWIgc2l0ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVG8gbW91bnQgYW4gTlRGUyAxLjIvMy54IChXaW5kb3dzIE5UNC8yMDAwL1hQLzIwMDMpIHZvbHVtZSwgdXNlIHRoZSBmaWxlCitzeXN0ZW0gdHlwZSAnbnRmcycuICBUaGUgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyByZWFkLW9ubHkgbW9kZSAod2l0aCBubworZmF1bHQtdG9sZXJhbmNlLCBlbmNyeXB0aW9uIG9yIGpvdXJuYWxsaW5nKSBhbmQgdmVyeSBsaW1pdGVkLCBidXQgc2FmZSwgd3JpdGUKK3N1cHBvcnQuCisKK0ZvciBmYXVsdCB0b2xlcmFuY2UgYW5kIHJhaWQgc3VwcG9ydCAoaS5lLiB2b2x1bWUgYW5kIHN0cmlwZSBzZXRzKSwgeW91IGNhbgordXNlIHRoZSBrZXJuZWwncyBTb2Z0d2FyZSBSQUlEIC8gTUQgZHJpdmVyLiAgU2VlIHNlY3Rpb24gIlVzaW5nIFNvZnR3YXJlIFJBSUQKK3dpdGggTlRGUyIgZm9yIGRldGFpbHMuCisKKworV2ViIHNpdGUKKz09PT09PT09CisKK1RoZXJlIGlzIHBsZW50eSBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBsaW51eC1udGZzIHdlYiBzaXRlCithdCBodHRwOi8vbGludXgtbnRmcy5zb3VyY2Vmb3JnZS5uZXQvCisKK1RoZSB3ZWIgc2l0ZSBoYXMgYSBsb3Qgb2YgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgc3VjaCBhcyBhIGNvbXByZWhlbnNpdmUKK0ZBUSwgZG9jdW1lbnRhdGlvbiBvbiB0aGUgTlRGUyBvbi1kaXNrIGZvcm1hdCwgaW5mb3JtYWl0b24gb24gdGhlIExpbnV4LU5URlMKK3VzZXJzcGFjZSB1dGlsaXRpZXMsIGV0Yy4KKworCitGZWF0dXJlcworPT09PT09PT0KKworLSBUaGlzIGlzIGEgY29tcGxldGUgcmV3cml0ZSBvZiB0aGUgTlRGUyBkcml2ZXIgdGhhdCB1c2VkIHRvIGJlIGluIHRoZSBrZXJuZWwuCisgIFRoaXMgbmV3IGRyaXZlciBpbXBsZW1lbnRzIE5URlMgcmVhZCBzdXBwb3J0IGFuZCBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudAorICB0byB0aGUgb2xkIG50ZnMgZHJpdmVyLgorLSBUaGUgbmV3IGRyaXZlciBoYXMgZnVsbCBzdXBwb3J0IGZvciBzcGFyc2UgZmlsZXMgb24gTlRGUyAzLnggdm9sdW1lcyB3aGljaAorICB0aGUgb2xkIGRyaXZlciBpc24ndCBoYXBweSB3aXRoLgorLSBUaGUgbmV3IGRyaXZlciBzdXBwb3J0cyBleGVjdXRpb24gb2YgYmluYXJpZXMgZHVlIHRvIG1tYXAoKSBub3cgYmVpbmcKKyAgc3VwcG9ydGVkLgorLSBUaGUgbmV3IGRyaXZlciBzdXBwb3J0cyBsb29wYmFjayBtb3VudGluZyBvZiBmaWxlcyBvbiBOVEZTIHdoaWNoIGlzIHVzZWQgYnkKKyAgc29tZSBMaW51eCBkaXN0cmlidXRpb25zIHRvIGVuYWJsZSB0aGUgdXNlciB0byBydW4gTGludXggZnJvbSBhbiBOVEZTCisgIHBhcnRpdGlvbiBieSBjcmVhdGluZyBhIGxhcmdlIGZpbGUgd2hpbGUgaW4gV2luZG93cyBhbmQgdGhlbiBsb29wYmFjaworICBtb3VudGluZyB0aGUgZmlsZSB3aGlsZSBpbiBMaW51eCBhbmQgY3JlYXRpbmcgYSBMaW51eCBmaWxlc3lzdGVtIG9uIGl0IHRoYXQKKyAgaXMgdXNlZCB0byBpbnN0YWxsIExpbnV4IG9uIGl0LgorLSBBIGNvbXBhcmlzb24gb2YgdGhlIHR3byBkcml2ZXJzIHVzaW5nOgorCXRpbWUgZmluZCAuIC10eXBlIGYgLWV4ZWMgbWQ1c3VtICJ7fSIgXDsKKyAgcnVuIHRocmVlIHRpbWVzIGluIHNlcXVlbmNlIHdpdGggZWFjaCBkcml2ZXIgKGFmdGVyIGEgcmVib290KSBvbiBhIDEuNEdpQgorICBOVEZTIHBhcnRpdGlvbiwgc2hvd2VkIHRoZSBuZXcgZHJpdmVyIHRvIGJlIDIwJSBmYXN0ZXIgaW4gdG90YWwgdGltZSBlbGFwc2VkCisgIChmcm9tIDk6NDMgbWludXRlcyBvbiBhdmVyYWdlIGRvd24gdG8gNzo1MykuICBUaGUgdGltZSBzcGVudCBpbiB1c2VyIHNwYWNlCisgIHdhcyB1bmNoYW5nZWQgYnV0IHRoZSB0aW1lIHNwZW50IGluIHRoZSBrZXJuZWwgd2FzIGRlY3JlYXNlZCBieSBhIGZhY3RvciBvZgorICAyLjUgKGZyb20gODUgQ1BVIHNlY29uZHMgZG93biB0byAzMykuCistIFRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaG9ydCBmaWxlIG5hbWVzIGluIGdlbmVyYWwuICBGb3IgYmFja3dhcmRzCisgIGNvbXBhdGliaWxpdHksIHdlIGltcGxlbWVudCBhY2Nlc3MgdG8gZmlsZXMgdXNpbmcgdGhlaXIgc2hvcnQgZmlsZSBuYW1lcyBpZgorICB0aGV5IGV4aXN0LiAgVGhlIGRyaXZlciB3aWxsIG5vdCBjcmVhdGUgc2hvcnQgZmlsZSBuYW1lcyBob3dldmVyLCBhbmQgYQorICByZW5hbWUgd2lsbCBkaXNjYXJkIGFueSBleGlzdGluZyBzaG9ydCBmaWxlIG5hbWUuCistIFRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIGV4cG9ydGluZyBvZiBtb3VudGVkIE5URlMgdm9sdW1lcyB2aWEgTkZTLgorLSBUaGUgbmV3IGRyaXZlciBzdXBwb3J0cyBhc3luYyBpbyAoYWlvKS4KKy0gVGhlIG5ldyBkcml2ZXIgc3VwcG9ydHMgZnN5bmMoMiksIGZkYXRhc3luYygyKSwgYW5kIG1zeW5jKDIpLgorLSBUaGUgbmV3IGRyaXZlciBzdXBwb3J0cyByZWFkdigyKSBhbmQgd3JpdGV2KDIpLgorLSBUaGUgbmV3IGRyaXZlciBzdXBwb3J0cyBhY2Nlc3MgdGltZSB1cGRhdGVzIChpbmNsdWRpbmcgbXRpbWUgYW5kIGN0aW1lKS4KKworCitTdXBwb3J0ZWQgbW91bnQgb3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT0KKworSW4gYWRkaXRpb24gdG8gdGhlIGdlbmVyaWMgbW91bnQgb3B0aW9ucyBkZXNjcmliZWQgYnkgdGhlIG1hbnVhbCBwYWdlIGZvciB0aGUKK21vdW50IGNvbW1hbmQgKG1hbiA4IG1vdW50LCBhbHNvIHNlZSBtYW4gNSBmc3RhYiksIHRoZSBOVEZTIGRyaXZlciBzdXBwb3J0cyB0aGUKK2ZvbGxvd2luZyBtb3VudCBvcHRpb25zOgorCitpb2NoYXJzZXQ9bmFtZQkJRGVwcmVjYXRlZCBvcHRpb24uICBTdGlsbCBzdXBwb3J0ZWQgYnV0IHBsZWFzZSB1c2UKKwkJCW5scz1uYW1lIGluIHRoZSBmdXR1cmUuICBTZWUgZGVzY3JpcHRpb24gZm9yIG5scz1uYW1lLgorCitubHM9bmFtZQkJQ2hhcmFjdGVyIHNldCB0byB1c2Ugd2hlbiByZXR1cm5pbmcgZmlsZSBuYW1lcy4KKwkJCVVubGlrZSBWRkFULCBOVEZTIHN1cHByZXNzZXMgbmFtZXMgdGhhdCBjb250YWluCisJCQl1bmNvbnZlcnRpYmxlIGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgbW9zdCBjaGFyYWN0ZXIKKwkJCXNldHMgY29udGFpbiBpbnN1ZmZpY2llbnQgY2hhcmFjdGVycyB0byByZXByZXNlbnQgYWxsCisJCQlwb3NzaWJsZSBVbmljb2RlIGNoYXJhY3RlcnMgdGhhdCBjYW4gZXhpc3Qgb24gTlRGUy4KKwkJCVRvIGJlIHN1cmUgeW91IGFyZSBub3QgbWlzc2luZyBhbnkgZmlsZXMsIHlvdSBhcmUKKwkJCWFkdmlzZWQgdG8gdXNlIG5scz11dGY4IHdoaWNoIGlzIGNhcGFibGUgb2YKKwkJCXJlcHJlc2VudGluZyBhbGwgVW5pY29kZSBjaGFyYWN0ZXJzLgorCit1dGY4PTxib29sPgkJT3B0aW9uIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBDdXJyZW50bHkgbWFwcGVkIHRvCisJCQlubHM9dXRmOCBidXQgcGxlYXNlIHVzZSBubHM9dXRmOCBpbiB0aGUgZnV0dXJlIGFuZAorCQkJbWFrZSBzdXJlIHV0ZjggaXMgY29tcGlsZWQgZWl0aGVyIGFzIG1vZHVsZSBvciBpbnRvCisJCQl0aGUga2VybmVsLiAgU2VlIGRlc2NyaXB0aW9uIGZvciBubHM9bmFtZS4KKwordWlkPQorZ2lkPQordW1hc2s9CQkJUHJvdmlkZSBkZWZhdWx0IG93bmVyLCBncm91cCwgYW5kIGFjY2VzcyBtb2RlIG1hc2suCisJCQlUaGVzZSBvcHRpb25zIHdvcmsgYXMgZG9jdW1lbnRlZCBpbiBtb3VudCg4KS4gIEJ5CisJCQlkZWZhdWx0LCB0aGUgZmlsZXMvZGlyZWN0b3JpZXMgYXJlIG93bmVkIGJ5IHJvb3QgYW5kCisJCQloZS9zaGUgaGFzIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLCBhcyB3ZWxsIGFzCisJCQlicm93c2UgcGVybWlzc2lvbiBmb3IgZGlyZWN0b3JpZXMuICBObyBvbmUgZWxzZSBoYXMgYW55CisJCQlhY2Nlc3MgcGVybWlzc2lvbnMuICBJLmUuIHRoZSBtb2RlIG9uIGFsbCBmaWxlcyBpcyBieQorCQkJZGVmYXVsdCBydy0tLS0tLS0gYW5kIGZvciBkaXJlY3RvcmllcyByd3gtLS0tLS0sIGEKKwkJCWNvbnNlcXVlbmNlIG9mIHRoZSBkZWZhdWx0IGZtYXNrPTAxNzcgYW5kIGRtYXNrPTAwNzcuCisJCQlVc2luZyBhIHVtYXNrIG9mIHplcm8gd2lsbCBncmFudCBhbGwgcGVybWlzc2lvbnMgdG8KKwkJCWV2ZXJ5b25lLCBpLmUuIGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2lsbCBoYXZlIG1vZGUKKwkJCXJ3eHJ3eHJ3eC4KKworZm1hc2s9CitkbWFzaz0JCQlJbnN0ZWFkIG9mIHNwZWNpZnlpbmcgdW1hc2sgd2hpY2ggYXBwbGllcyBib3RoIHRvCisJCQlmaWxlcyBhbmQgZGlyZWN0b3JpZXMsIGZtYXNrIGFwcGxpZXMgb25seSB0byBmaWxlcyBhbmQKKwkJCWRtYXNrIG9ubHkgdG8gZGlyZWN0b3JpZXMuCisKK3Nsb3BweT08Qk9PTD4JCUlmIHNsb3BweSBpcyBzcGVjaWZpZWQsIGlnbm9yZSB1bmtub3duIG1vdW50IG9wdGlvbnMuCisJCQlPdGhlcndpc2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGFib3J0IG1vdW50IGlmCisJCQlhbnkgdW5rbm93biBvcHRpb25zIGFyZSBmb3VuZC4KKworc2hvd19zeXNfZmlsZXM9PEJPT0w+CUlmIHNob3dfc3lzX2ZpbGVzIGlzIHNwZWNpZmllZCwgc2hvdyB0aGUgc3lzdGVtIGZpbGVzCisJCQlpbiBkaXJlY3RvcnkgbGlzdGluZ3MuICBPdGhlcndpc2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyCisJCQlpcyB0byBoaWRlIHRoZSBzeXN0ZW0gZmlsZXMuCisJCQlOb3RlIHRoYXQgZXZlbiB3aGVuIHNob3dfc3lzX2ZpbGVzIGlzIHNwZWNpZmllZCwgIiRNRlQiCisJCQl3aWxsIG5vdCBiZSB2aXNpYmxlIGR1ZSB0byBidWdzL21pcy1mZWF0dXJlcyBpbiBnbGliYy4KKwkJCUZ1cnRoZXIsIG5vdGUgdGhhdCBpcnJlc3BlY3RpdmUgb2Ygc2hvd19zeXNfZmlsZXMsIGFsbAorCQkJZmlsZXMgYXJlIGFjY2Vzc2libGUgYnkgbmFtZSwgaS5lLiB5b3UgY2FuIGFsd2F5cyBkbworCQkJImxzIC1sIFwkVXBDYXNlIiBmb3IgZXhhbXBsZSB0byBzcGVjaWZpY2FsbHkgc2hvdyB0aGUKKwkJCXN5c3RlbSBmaWxlIGNvbnRhaW5pbmcgdGhlIFVuaWNvZGUgdXBjYXNlIHRhYmxlLgorCitjYXNlX3NlbnNpdGl2ZT08Qk9PTD4JSWYgY2FzZV9zZW5zaXRpdmUgaXMgc3BlY2lmaWVkLCB0cmVhdCBhbGwgZmlsZSBuYW1lcyBhcworCQkJY2FzZSBzZW5zaXRpdmUgYW5kIGNyZWF0ZSBmaWxlIG5hbWVzIGluIHRoZSBQT1NJWAorCQkJbmFtZXNwYWNlLiAgT3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyB0byB0cmVhdAorCQkJZmlsZSBuYW1lcyBhcyBjYXNlIGluc2Vuc2l0aXZlIGFuZCB0byBjcmVhdGUgZmlsZSBuYW1lcworCQkJaW4gdGhlIFdJTjMyL0xPTkcgbmFtZSBzcGFjZS4gIE5vdGUsIHRoZSBMaW51eCBOVEZTCisJCQlkcml2ZXIgd2lsbCBuZXZlciBjcmVhdGUgc2hvcnQgZmlsZSBuYW1lcyBhbmQgd2lsbAorCQkJcmVtb3ZlIHRoZW0gb24gcmVuYW1lL2RlbGV0ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBsb25nCisJCQlmaWxlIG5hbWUuCisJCQlOb3RlIHRoYXQgZmlsZXMgcmVtYWluIGFjY2Vzc2libGUgdmlhIHRoZWlyIHNob3J0IGZpbGUKKwkJCW5hbWUsIGlmIGl0IGV4aXN0cy4gIElmIGNhc2Vfc2Vuc2l0aXZlLCB5b3Ugd2lsbCBuZWVkCisJCQl0byBwcm92aWRlIHRoZSBjb3JyZWN0IGNhc2Ugb2YgdGhlIHNob3J0IGZpbGUgbmFtZS4KKworZXJyb3JzPW9wdAkJV2hhdCB0byBkbyB3aGVuIGNyaXRpY2FsIGZpbGUgc3lzdGVtIGVycm9ycyBhcmUgZm91bmQuCisJCQlGb2xsb3dpbmcgdmFsdWVzIGNhbiBiZSB1c2VkIGZvciAib3B0IjoKKwkJCSAgY29udGludWU6IERFRkFVTFQsIHRyeSB0byBjbGVhbi11cCBhcyBtdWNoIGFzCisJCQkJICAgIHBvc3NpYmxlLCBlLmcuIG1hcmtpbmcgYSBjb3JydXB0IGlub2RlIGFzCisJCQkJICAgIGJhZCBzbyBpdCBpcyBubyBsb25nZXIgYWNjZXNzZWQsIGFuZCB0aGVuCisJCQkJICAgIGNvbnRpbnVlLgorCQkJICByZWNvdmVyOiAgQXQgcHJlc2VudCBvbmx5IHN1cHBvcnRlZCBpcyByZWNvdmVyeSBvZgorCQkJCSAgICB0aGUgYm9vdCBzZWN0b3IgZnJvbSB0aGUgYmFja3VwIGNvcHkuCisJCQkJICAgIElmIHJlYWQtb25seSBtb3VudCwgdGhlIHJlY292ZXJ5IGlzIGRvbmUKKwkJCQkgICAgaW4gbWVtb3J5IG9ubHkgYW5kIG5vdCB3cml0dGVuIHRvIGRpc2suCisJCQlOb3RlIHRoYXQgdGhlIG9wdGlvbnMgYXJlIGFkZGl0aXZlLCBpLmUuIHNwZWNpZnlpbmc6CisJCQkgICBlcnJvcnM9Y29udGludWUsZXJyb3JzPXJlY292ZXIKKwkJCW1lYW5zIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIHJlY292ZXIgYW5kIGlmIHRoYXQKKwkJCWZhaWxzIGl0IHdpbGwgY2xlYW4tdXAgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQKKwkJCWNvbnRpbnVlLgorCittZnRfem9uZV9tdWx0aXBsaWVyPQlTZXQgdGhlIE1GVCB6b25lIG11bHRpcGxpZXIgZm9yIHRoZSB2b2x1bWUgKHRoaXMKKwkJCXNldHRpbmcgaXMgbm90IHBlcnNpc3RlbnQgYWNyb3NzIG1vdW50cyBhbmQgY2FuIGJlCisJCQljaGFuZ2VkIGZyb20gbW91bnQgdG8gbW91bnQgYnV0IGNhbm5vdCBiZSBjaGFuZ2VkIG9uCisJCQlyZW1vdW50KS4gIFZhbHVlcyBvZiAxIHRvIDQgYXJlIGFsbG93ZWQsIDEgYmVpbmcgdGhlCisJCQlkZWZhdWx0LiAgVGhlIE1GVCB6b25lIG11bHRpcGxpZXIgZGV0ZXJtaW5lcyBob3cgbXVjaAorCQkJc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBNRlQgb24gdGhlIHZvbHVtZS4gIElmIGFsbAorCQkJb3RoZXIgc3BhY2UgaXMgdXNlZCB1cCwgdGhlbiB0aGUgTUZUIHpvbmUgd2lsbCBiZQorCQkJc2hydW5rIGR5bmFtaWNhbGx5LCBzbyB0aGlzIGhhcyBubyBpbXBhY3Qgb24gdGhlCisJCQlhbW91bnQgb2YgZnJlZSBzcGFjZS4gIEhvd2V2ZXIsIGl0IGNhbiBoYXZlIGFuIGltcGFjdAorCQkJb24gcGVyZm9ybWFuY2UgYnkgYWZmZWN0aW5nIGZyYWdtZW50YXRpb24gb2YgdGhlIE1GVC4KKwkJCUluIGdlbmVyYWwgdXNlIHRoZSBkZWZhdWx0LiAgSWYgeW91IGhhdmUgYSBsb3Qgb2Ygc21hbGwKKwkJCWZpbGVzIHRoZW4gdXNlIGEgaGlnaGVyIHZhbHVlLiAgVGhlIHZhbHVlcyBoYXZlIHRoZQorCQkJZm9sbG93aW5nIG1lYW5pbmc6CisJCQkgICAgICBWYWx1ZQkgICAgIE1GVCB6b25lIHNpemUgKCUgb2Ygdm9sdW1lIHNpemUpCisJCQkJMQkJMTIuNSUKKwkJCQkyCQkyNSUKKwkJCQkzCQkzNy41JQorCQkJCTQJCTUwJQorCQkJTm90ZSB0aGlzIG9wdGlvbiBpcyBpcnJlbGV2YW50IGZvciByZWFkLW9ubHkgbW91bnRzLgorCisKK0tub3duIGJ1Z3MgYW5kIChtaXMtKWZlYXR1cmVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistIFRoZSBsaW5rIGNvdW50IG9uIGVhY2ggZGlyZWN0b3J5IGlub2RlIGVudHJ5IGlzIHNldCB0byAxLCBkdWUgdG8gTGludXggbm90CisgIHN1cHBvcnRpbmcgZGlyZWN0b3J5IGhhcmQgbGlua3MuICBUaGlzIG1heSB3ZWxsIGNvbmZ1c2Ugc29tZSB1c2VyIHNwYWNlCisgIGFwcGxpY2F0aW9ucywgc2luY2UgdGhlIGRpcmVjdG9yeSBuYW1lcyB3aWxsIGhhdmUgdGhlIHNhbWUgaW5vZGUgbnVtYmVycy4KKyAgVGhpcyBhbHNvIHNwZWVkcyB1cCBudGZzX3JlYWRfaW5vZGUoKSBpbW1lbnNlbHkuICBBbmQgd2UgaGF2ZW4ndCBmb3VuZCBhbnkKKyAgcHJvYmxlbXMgd2l0aCB0aGlzIGFwcHJvYWNoIHNvIGZhci4gIElmIHlvdSBmaW5kIGEgcHJvYmxlbSB3aXRoIHRoaXMsIHBsZWFzZQorICBsZXQgdXMga25vdy4KKworCitQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cy9jb21tZW50cy9mZWVkYmFjay9hYnVzZSB0byB0aGUgTGludXgtTlRGUyBkZXZlbG9wbWVudAorbGlzdCBhdCBzb3VyY2Vmb3JnZTogbGludXgtbnRmcy1kZXZAbGlzdHMuc291cmNlZm9yZ2UubmV0CisKKworVXNpbmcgTlRGUyB2b2x1bWUgYW5kIHN0cmlwZSBzZXRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIHN1cHBvcnQgb2Ygdm9sdW1lIGFuZCBzdHJpcGUgc2V0cywgeW91IGNhbiBlaXRoZXIgdXNlIHRoZSBrZXJuZWwncworRGV2aWNlLU1hcHBlciBkcml2ZXIgb3IgdGhlIGtlcm5lbCdzIFNvZnR3YXJlIFJBSUQgLyBNRCBkcml2ZXIuICBUaGUgZm9ybWVyIGlzCit0aGUgcmVjb21tZW5kZWQgb25lIHRvIHVzZSBmb3IgbGluZWFyIHJhaWQuICBCdXQgdGhlIGxhdHRlciBpcyByZXF1aXJlZCBmb3IKK3JhaWQgbGV2ZWwgNS4gIEZvciBzdHJpcGluZyBhbmQgbWlycm9yaW5nLCBlaXRoZXIgZHJpdmVyIHNob3VsZCB3b3JrIGZpbmUuCisKKworVGhlIERldmljZS1NYXBwZXIgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHdpbGwgbmVlZCB0byBjcmVhdGUgYSB0YWJsZSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUgdm9sdW1lL3N0cmlwZSBzZXQgYW5kCitob3cgdGhleSBmaXQgdG9nZXRoZXIgYW5kIGxvYWQgdGhpcyBpbnRvIHRoZSBrZXJuZWwgdXNpbmcgdGhlIGRtc2V0dXAgdXRpbGl0eQorKHNlZSBtYW4gOCBkbXNldHVwKS4KKworTGluZWFyIHZvbHVtZSBzZXRzLCBpLmUuIGxpbmVhciByYWlkLCBoYXMgYmVlbiB0ZXN0ZWQgYW5kIHdvcmtzIGZpbmUuICBFdmVuCit0aG91Z2ggdW50ZXN0ZWQsIHRoZXJlIGlzIG5vIHJlYXNvbiB3aHkgc3RyaXBlIHNldHMsIGkuZS4gcmFpZCBsZXZlbCAwLCBhbmQKK21pcnJvcnMsIGkuZS4gcmFpZCBsZXZlbCAxIHNob3VsZCBub3Qgd29yaywgdG9vLiAgU3RyaXBlcyB3aXRoIHBhcml0eSwgaS5lLgorcmFpZCBsZXZlbCA1LCB1bmZvcnR1bmF0ZWx5IGNhbm5vdCB3b3JrIHlldCBiZWNhdXNlIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlCitEZXZpY2UtTWFwcGVyIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHJhaWQgbGV2ZWwgNS4gIFlvdSBtYXkgYmUgYWJsZSB0byB1c2UgdGhlCitTb2Z0d2FyZSBSQUlEIC8gTUQgZHJpdmVyIGZvciByYWlkIGxldmVsIDUsIHNlZSB0aGUgbmV4dCBzZWN0aW9uIGZvciBkZXRhaWxzLgorCitUbyBjcmVhdGUgdGhlIHRhYmxlIGRlc2NyaWJpbmcgeW91ciB2b2x1bWUgeW91IHdpbGwgbmVlZCB0byBrbm93IGVhY2ggb2YgaXRzCitjb21wb25lbnRzIGFuZCB0aGVpciBzaXplcyBpbiBzZWN0b3JzLCBpLmUuIG11bHRpcGxlcyBvZiA1MTItYnl0ZSBibG9ja3MuCisKK0ZvciBOVDQgZmF1bHQgdG9sZXJhbnQgdm9sdW1lcyB5b3UgY2FuIG9idGFpbiB0aGUgc2l6ZXMgdXNpbmcgZmRpc2suICBTbyBmb3IKK2V4YW1wbGUgaWYgb25lIG9mIHlvdXIgcGFydGl0aW9ucyBpcyAvZGV2L2hkYTIgeW91IHdvdWxkIGRvOgorCiskIGZkaXNrIC11bCAvZGV2L2hkYQorCitEaXNrIC9kZXYvaGRhOiA4MS45IEdCLCA4MTk2NDMwMjMzNiBieXRlcworMjU1IGhlYWRzLCA2MyBzZWN0b3JzL3RyYWNrLCA5OTY0IGN5bGluZGVycywgdG90YWwgMTYwMDg2NTI4IHNlY3RvcnMKK1VuaXRzID0gc2VjdG9ycyBvZiAxICogNTEyID0gNTEyIGJ5dGVzCisKKyAgIERldmljZSBCb290ICAgICAgU3RhcnQgICAgICAgICBFbmQgICAgICBCbG9ja3MgICBJZCAgU3lzdGVtCisgICAvZGV2L2hkYTEgICAqICAgICAgICAgIDYzICAgICA0MjA5MDI5ICAgICAyMTA0NDgzKyAgODMgIExpbnV4CisgICAvZGV2L2hkYTIgICAgICAgICA0MjA5MDMwICAgIDM3NzY4ODE0ICAgIDE2Nzc5ODkyKyAgODYgIE5URlMKKyAgIC9kZXYvaGRhMyAgICAgICAgMzc3Njg4MTUgICAgNDYxNzA4MDkgICAgIDQyMDA5OTcrICA4MyAgTGludXgKKworQW5kIHlvdSB3b3VsZCBrbm93IHRoYXQgL2Rldi9oZGEyIGhhcyBhIHNpemUgb2YgMzc3Njg4MTQgLSA0MjA5MDMwICsgMSA9CiszMzU1OTc4NSBzZWN0b3JzLgorCitGb3IgV2luMmsgYW5kIGxhdGVyIGR5bmFtaWMgZGlza3MsIHlvdSBjYW4gZm9yIGV4YW1wbGUgdXNlIHRoZSBsZG1pbmZvIHV0aWxpdHkKK3doaWNoIGlzIHBhcnQgb2YgdGhlIExpbnV4IExETSB0b29scyAodGhlIGxhdGVzdCB2ZXJzaW9uIGF0IHRoZSB0aW1lIG9mCit3cml0aW5nIGlzIGxpbnV4LWxkbS0wLjAuOC50YXIuYnoyKS4gIFlvdSBjYW4gZG93bmxvYWQgaXQgZnJvbToKKwlodHRwOi8vbGludXgtbnRmcy5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWRzLmh0bWwKK1NpbXBseSBleHRyYWN0IHRoZSBkb3dubG9hZGVkIGFyY2hpdmUgKHRhciB4dmpmIGxpbnV4LWxkbS0wLjAuOC50YXIuYnoyKSwgZ28KK2ludG8gaXQgKGNkIGxpbnV4LWxkbS0wLjAuOCkgYW5kIGNoYW5nZSB0byB0aGUgdGVzdCBkaXJlY3RvcnkgKGNkIHRlc3QpLiAgWW91Cit3aWxsIGZpbmQgdGhlIHByZWNvbXBpbGVkIChpMzg2KSBsZG1pbmZvIHV0aWxpdHkgdGhlcmUuICBOT1RFOiBZb3Ugd2lsbCBub3QgYmUKK2FibGUgdG8gY29tcGlsZSB0aGlzIHlvdXJzZWxmIGVhc2lseSBzbyB1c2UgdGhlIGJpbmFyeSB2ZXJzaW9uIQorCitUaGVuIHlvdSB3b3VsZCB1c2UgbGRtaW5mbyBpbiBkdW1wIG1vZGUgdG8gb2J0YWluIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb246CisKKyQgLi9sZG1pbmZvIC0tZHVtcCAvZGV2L2hkYQorCitUaGlzIHdvdWxkIGR1bXAgdGhlIExETSBkYXRhYmFzZSBmb3VuZCBvbiAvZGV2L2hkYSB3aGljaCBkZXNjcmliZXMgYWxsIG9mIHlvdXIKK2R5bmFtaWMgZGlza3MgYW5kIGFsbCB0aGUgdm9sdW1lcyBvbiB0aGVtLiAgQXQgdGhlIGJvdHRvbSB5b3Ugd2lsbCBzZWUgdGhlCitWT0xVTUUgREVGSU5JVElPTlMgc2VjdGlvbiB3aGljaCBpcyBhbGwgeW91IHJlYWxseSBuZWVkLiAgWW91IG1heSBuZWVkIHRvIGxvb2sKK2Z1cnRoZXIgYWJvdmUgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSBkaXNrcyBpbiB0aGUgdm9sdW1lIGRlZmluaXRpb25zIGlzCit3aGljaCBkZXZpY2UgaW4gTGludXguICBIaW50OiBSdW4gbGRtaW5mbyBvbiBlYWNoIG9mIHlvdXIgZHluYW1pYyBkaXNrcyBhbmQKK2xvb2sgYXQgdGhlIERpc2sgSWQgY2xvc2UgdG8gdGhlIHRvcCBvZiB0aGUgb3V0cHV0IGZvciBlYWNoICh0aGUgUFJJVkFURSBIRUFERVIKK3NlY3Rpb24pLiAgWW91IGNhbiB0aGVuIGZpbmQgdGhlc2UgRGlzayBJZHMgaW4gdGhlIFZCTEsgREFUQUJBU0Ugc2VjdGlvbiBpbiB0aGUKKzxEaXNrPiBjb21wb25lbnRzIHdoZXJlIHlvdSB3aWxsIGdldCB0aGUgTERNIE5hbWUgZm9yIHRoZSBkaXNrIHRoYXQgaXMgZm91bmQgaW4KK3RoZSBWT0xVTUUgREVGSU5JVElPTlMgc2VjdGlvbi4KKworTm90ZSB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gZW5hYmxlIHRoZSBMRE0gZHJpdmVyIGluIHRoZSBMaW51eCBrZXJuZWwuICBJZiB5b3VyCitkaXN0cmlidXRpb24gZGlkIG5vdCBlbmFibGUgaXQsIHlvdSB3aWxsIG5lZWQgdG8gcmVjb21waWxlIHRoZSBrZXJuZWwgd2l0aCBpdAorZW5hYmxlZC4gIFRoaXMgd2lsbCBjcmVhdGUgdGhlIExETSBwYXJ0aXRpb25zIG9uIGVhY2ggZGV2aWNlIGF0IGJvb3QgdGltZS4gIFlvdQord291bGQgdGhlbiB1c2UgdGhvc2UgZGV2aWNlcyAoZm9yIC9kZXYvaGRhIHRoZXkgd291bGQgYmUgL2Rldi9oZGExLCAyLCAzLCBldGMpCitpbiB0aGUgRGV2aWNlLU1hcHBlciB0YWJsZS4KKworWW91IGNhbiBhbHNvIGJ5cGFzcyB1c2luZyB0aGUgTERNIGRyaXZlciBieSB1c2luZyB0aGUgbWFpbiBkZXZpY2UgKGUuZy4KKy9kZXYvaGRhKSBhbmQgdGhlbiB1c2luZyB0aGUgb2Zmc2V0cyBvZiB0aGUgTERNIHBhcnRpdGlvbnMgaW50byB0aGlzIGRldmljZSBhcwordGhlICJTdGFydCBzZWN0b3Igb2YgZGV2aWNlIiB3aGVuIGNyZWF0aW5nIHRoZSB0YWJsZS4gIE9uY2UgYWdhaW4gbGRtaW5mbyB3b3VsZAorZ2l2ZSB5b3UgdGhlIGNvcnJlY3QgaW5mb3JtYXRpb24gdG8gZG8gdGhpcy4KKworQXNzdW1pbmcgeW91IGtub3cgYWxsIHlvdXIgZGV2aWNlcyBhbmQgdGhlaXIgc2l6ZXMgdGhpbmdzIGFyZSBlYXN5LgorCitGb3IgYSBsaW5lYXIgcmFpZCB0aGUgdGFibGUgd291bGQgbG9vayBsaWtlIHRoaXMgKG5vdGUgYWxsIHZhbHVlcyBhcmUgaW4KKzUxMi1ieXRlIHNlY3RvcnMpOgorCistLS0gY3V0IGhlcmUgLS0tCisjIE9mZnNldCBpbnRvCVNpemUgb2YgdGhpcwlSYWlkIHR5cGUJRGV2aWNlCQlTdGFydCBzZWN0b3IKKyMgdm9sdW1lCWRldmljZQkJCQkJCW9mIGRldmljZQorMAkJMTAyODE2MQkJbGluZWFyCQkvZGV2L2hkYTEJMAorMTAyODE2MQkJMzkwMzc2MgkJbGluZWFyCQkvZGV2L2hkYjIJMAorNDkzMTkyMwkJMjEwMzIxMQkJbGluZWFyCQkvZGV2L2hkYzEJMAorLS0tIGN1dCBoZXJlIC0tLQorCitGb3IgYSBzdHJpcGVkIHZvbHVtZSwgaS5lLiByYWlkIGxldmVsIDAsIHlvdSB3aWxsIG5lZWQgdG8ga25vdyB0aGUgY2h1bmsgc2l6ZQoreW91IHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgdm9sdW1lLiAgV2luZG93cyB1c2VzIDY0a2lCIGFzIHRoZSBkZWZhdWx0LCBzbyBpdAord2lsbCBwcm9iYWJseSBiZSB0aGlzIHVubGVzcyB5b3UgY2hhbmdlcyB0aGUgZGVmYXVsdHMgd2hlbiBjcmVhdGluZyB0aGUgYXJyYXkuCisKK0ZvciBhIHJhaWQgbGV2ZWwgMCB0aGUgdGFibGUgd291bGQgbG9vayBsaWtlIHRoaXMgKG5vdGUgYWxsIHZhbHVlcyBhcmUgaW4KKzUxMi1ieXRlIHNlY3RvcnMpOgorCistLS0gY3V0IGhlcmUgLS0tCisjIE9mZnNldCAgIFNpemUJICAgIFJhaWQgICAgIE51bWJlciAgIENodW5rICAxc3QgICAgICAgIFN0YXJ0CTJuZAkgIFN0YXJ0CisjIGludG8gICAgIG9mIHRoZSAgIHR5cGUgICAgIG9mCSAgICAgIHNpemUgICBEZXZpY2UJaW4JRGV2aWNlCSAgaW4KKyMgdm9sdW1lICAgdm9sdW1lCSAgICAgc3RyaXBlcwkJCWRldmljZQkJICBkZXZpY2UKKzAJICAgMjA1NjMyMCAgc3RyaXBlZCAgMgkgICAgICAxMjggICAgL2Rldi9oZGExCTAJL2Rldi9oZGIxIDAKKy0tLSBjdXQgaGVyZSAtLS0KKworSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gZGV2aWNlcywganVzdCBhZGQgZWFjaCBvZiB0aGVtIHRvIHRoZSBlbmQgb2YgdGhlCitsaW5lLgorCitGaW5hbGx5LCBmb3IgYSBtaXJyb3JlZCB2b2x1bWUsIGkuZS4gcmFpZCBsZXZlbCAxLCB0aGUgdGFibGUgd291bGQgbG9vayBsaWtlCit0aGlzIChub3RlIGFsbCB2YWx1ZXMgYXJlIGluIDUxMi1ieXRlIHNlY3RvcnMpOgorCistLS0gY3V0IGhlcmUgLS0tCisjIE9mcyBTaXplICAgUmFpZCAgIExvZyAgTnVtYmVyIFJlZ2lvbiBTaG91bGQgTnVtYmVyIFNvdXJjZSAgU3RhcnQgVGFnZXQgIFN0YXJ0CisjIGluICBvZiB0aGUgdHlwZSAgIHR5cGUgb2YgbG9nIHNpemUgICBzeW5jPyAgb2YgICAgIERldmljZSAgaW4gICAgRGV2aWNlIGluCisjIHZvbCB2b2x1bWUJCSBwYXJhbXMJCSAgICAgbWlycm9ycwkgICAgIERldmljZQkgIERldmljZQorMCAgICAyMDU2MzIwIG1pcnJvciBjb3JlIDIJMTYgICAgIG5vc3luYyAyCSAgIC9kZXYvaGRhMSAwICAgL2Rldi9oZGIxIDAKKy0tLSBjdXQgaGVyZSAtLS0KKworSWYgeW91IGFyZSBtaXJyb3JpbmcgdG8gbXVsdGlwbGUgZGV2aWNlcyB5b3UgY2FuIHNwZWNpZnkgZnVydGhlciB0YXJnZXRzIGF0IHRoZQorZW5kIG9mIHRoZSBsaW5lLgorCitOb3RlIHRoZSAiU2hvdWxkIHN5bmM/IiBwYXJhbWV0ZXIgIm5vc3luYyIgbWVhbnMgdGhhdCB0aGUgdHdvIG1pcnJvcnMgYXJlCithbHJlYWR5IGluIHN5bmMgd2hpY2ggd2lsbCBiZSB0aGUgY2FzZSBvbiBhIGNsZWFuIHNodXRkb3duIG9mIFdpbmRvd3MuICBJZiB0aGUKK21pcnJvcnMgYXJlIG5vdCBjbGVhbiwgeW91IGNhbiBzcGVjaWZ5IHRoZSAic3luYyIgb3B0aW9uIGluc3RlYWQgb2YgIm5vc3luYyIKK2FuZCB0aGUgRGV2aWNlLU1hcHBlciBkcml2ZXIgd2lsbCB0aGVuIGNvcHkgdGhlIGVudGlyZXkgb2YgdGhlICJTb3VyY2UgRGV2aWNlIgordG8gdGhlICJUYXJnZXQgRGV2aWNlIiBvciBpZiB5b3Ugc3BlY2lmaWVkIG11bHRpcGxlZCB0YXJnZXQgZGV2aWNlcyB0byBhbGwgb2YKK3RoZW0uCisKK09uY2UgeW91IGhhdmUgeW91ciB0YWJsZSwgc2F2ZSBpdCBpbiBhIGZpbGUgc29tZXdoZXJlIChlLmcuIC9ldGMvbnRmc3ZvbHVtZTEpLAorYW5kIGhhbmQgaXQgb3ZlciB0byBkbXNldHVwIHRvIHdvcmsgd2l0aCwgbGlrZSBzbzoKKworJCBkbXNldHVwIGNyZWF0ZSBteXZvbHVtZTEgL2V0Yy9udGZzdm9sdW1lMQorCitZb3UgY2FuIG9idmlvdXNseSByZXBsYWNlICJteXZvbHVtZTEiIHdpdGggd2hhdGV2ZXIgbmFtZSB5b3UgbGlrZS4KKworSWYgaXQgYWxsIHdvcmtlZCwgeW91IHdpbGwgbm93IGhhdmUgdGhlIGRldmljZSAvZGV2L2RldmljZS1tYXBwZXIvbXl2b2x1bWUxCit3aGljaCB5b3UgY2FuIHRoZW4ganVzdCB1c2UgYXMgYW4gYXJndW1lbnQgdG8gdGhlIG1vdW50IGNvbW1hbmQgYXMgdXN1YWwgdG8KK21vdW50IHRoZSBudGZzIHZvbHVtZS4gIEZvciBleGFtcGxlOgorCiskIG1vdW50IC10IG50ZnMgLW8gcm8gL2Rldi9kZXZpY2UtbWFwcGVyL215dm9sdW1lMSAvbW50L215dm9sMQorCisoWW91IG5lZWQgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgL21udC9teXZvbDEgZmlyc3QgYW5kIG9mIGNvdXJzZSB5b3UgY2FuIHVzZQorYW55dGhpbmcgeW91IGxpa2UgaW5zdGVhZCBvZiAvbW50L215dm9sMSBhcyBsb25nIGFzIGl0IGlzIGFuIGV4aXN0aW5nCitkaXJlY3RvcnkuKQorCitJdCBpcyBhZHZpc2FibGUgdG8gZG8gdGhlIG1vdW50IHJlYWQtb25seSB0byBzZWUgaWYgdGhlIHZvbHVtZSBoYXMgYmVlbiBzZXR1cAorY29ycmVjdGx5IHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiBjYXVzaW5nIGRhbWFnZSB0byB0aGUgZGF0YSBvbiB0aGUgbnRmcwordm9sdW1lLgorCisKK1RoZSBTb2Z0d2FyZSBSQUlEIC8gTUQgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBhbHRlcm5hdGl2ZSB0byB1c2luZyB0aGUgRGV2aWNlLU1hcHBlciBkcml2ZXIgaXMgdG8gdXNlIHRoZSBrZXJuZWwncworU29mdHdhcmUgUkFJRCAvIE1EIGRyaXZlci4gIEZvciB3aGljaCB5b3UgbmVlZCB0byBzZXQgdXAgeW91ciAvZXRjL3JhaWR0YWIKK2FwcHJvcHJpYXRlbHkgKHNlZSBtYW4gNSByYWlkdGFiKS4KKworTGluZWFyIHZvbHVtZSBzZXRzLCBpLmUuIGxpbmVhciByYWlkLCBhcyB3ZWxsIGFzIHN0cmlwZSBzZXRzLCBpLmUuIHJhaWQgbGV2ZWwKKzAsIGhhdmUgYmVlbiB0ZXN0ZWQgYW5kIHdvcmsgZmluZSAodGhvdWdoIHNlZSBzZWN0aW9uICJMaW1pdGlhdGlvbnMgd2hlbiB1c2luZwordGhlIE1EIGRyaXZlciB3aXRoIE5URlMgdm9sdW1lcyIgZXNwZWNpYWxseSBpZiB5b3Ugd2FudCB0byB1c2UgbGluZWFyIHJhaWQpLgorRXZlbiB0aG91Z2ggdW50ZXN0ZWQsIHRoZXJlIGlzIG5vIHJlYXNvbiB3aHkgbWlycm9ycywgaS5lLiByYWlkIGxldmVsIDEsIGFuZAorc3RyaXBlcyB3aXRoIHBhcml0eSwgaS5lLiByYWlkIGxldmVsIDUsIHNob3VsZCBub3Qgd29yaywgdG9vLgorCitZb3UgaGF2ZSB0byB1c2UgdGhlICJwZXJzaXN0ZW50LXN1cGVyYmxvY2sgMCIgb3B0aW9uIGZvciBlYWNoIHJhaWQtZGlzayBpbiB0aGUKK05URlMgdm9sdW1lL3N0cmlwZSB5b3UgYXJlIGNvbmZpZ3VyaW5nIGluIC9ldGMvcmFpZHRhYiBhcyB0aGUgcGVyc2lzdGVudAorc3VwZXJibG9jayB1c2VkIGJ5IHRoZSBNRCBkcml2ZXIgd291bGQgZGFtYW5nZSB0aGUgTlRGUyB2b2x1bWUuCisKK1dpbmRvd3MgYnkgZGVmYXVsdCB1c2VzIGEgc3RyaXBlIGNodW5rIHNpemUgb2YgNjRrLCBzbyB5b3UgcHJvYmFibHkgd2FudCB0aGUKKyJjaHVuay1zaXplIDY0ayIgb3B0aW9uIGZvciBlYWNoIHJhaWQtZGlzaywgdG9vLgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBzdHJpcGUgc2V0IGNvbnNpc3Rpbmcgb2YgdHdvIHBhcnRpdGlvbnMgL2Rldi9oZGE1CithbmQgL2Rldi9oZGIxIHlvdXIgL2V0Yy9yYWlkdGFiIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCityYWlkZGV2IC9kZXYvbWQwCisJcmFpZC1sZXZlbAkwCisJbnItcmFpZC1kaXNrcwkyCisJbnItc3BhcmUtZGlza3MJMAorCXBlcnNpc3RlbnQtc3VwZXJibG9jawkwCisJY2h1bmstc2l6ZQk2NGsKKwlkZXZpY2UJCS9kZXYvaGRhNQorCXJhaWQtZGlzawkwCisJZGV2aWNlCQkvZGV2L2hkYjEKKwlyYWlkLWRpc2wJMQorCitGb3IgbGluZWFyIHJhaWQsIGp1c3QgY2hhbmdlIHRoZSByYWlkLWxldmVsIGFib3ZlIHRvICJyYWlkLWxldmVsIGxpbmVhciIsIGZvcgorbWlycm9ycywgY2hhbmdlIGl0IHRvICJyYWlkLWxldmVsIDEiLCBhbmQgZm9yIHN0cmlwZSBzZXRzIHdpdGggcGFyaXR5LCBjaGFuZ2UKK2l0IHRvICJyYWlkLWxldmVsIDUiLgorCitOb3RlIGZvciBzdHJpcGUgc2V0cyB3aXRoIHBhcml0eSB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gdGVsbCB0aGUgTUQgZHJpdmVyCit3aGljaCBwYXJpdHkgYWxnb3JpdGhtIHRvIHVzZSBieSBzcGVjaWZ5aW5nIHRoZSBvcHRpb24gInBhcml0eS1hbGdvcml0aG0KK3doaWNoIiwgd2hlcmUgeW91IG5lZWQgdG8gcmVwbGFjZSAid2hpY2giIHdpdGggdGhlIG5hbWUgb2YgdGhlIGFsZ29yaXRobSB0bwordXNlIChzZWUgbWFuIDUgcmFpZHRhYiBmb3IgYXZhaWxhYmxlIGFsZ29yaXRobXMpIGFuZCB5b3Ugd2lsbCBoYXZlIHRvIHRyeSB0aGUKK2RpZmZlcmVudCBhdmFpbGFibGUgYWxnb3JpdGhtcyB1bnRpbCB5b3UgZmluZCBvbmUgdGhhdCB3b3Jrcy4gIE1ha2Ugc3VyZSB5b3UKK2FyZSB3b3JraW5nIHJlYWQtb25seSB3aGVuIHBsYXlpbmcgd2l0aCB0aGlzIGFzIHlvdSBtYXkgZGFtYWdlIHlvdXIgZGF0YQorb3RoZXJ3aXNlLiAgSWYgeW91IGZpbmQgd2hpY2ggYWxnb3JpdGhtIHdvcmtzIHBsZWFzZSBsZXQgdXMga25vdyAoZW1haWwgdGhlCitsaW51eC1udGZzIGRldmVsb3BlcnMgbGlzdCBsaW51eC1udGZzLWRldkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgb3IgZHJvcCBpbiBvbgorSVJDIGluIGNoYW5uZWwgI250ZnMgb24gdGhlIGlyYy5mcmVlbm9kZS5uZXQgbmV0d29yaykgc28gd2UgY2FuIHVwZGF0ZSB0aGlzCitkb2N1bWVudGF0aW9uLgorCitPbmNlIHRoZSByYWlkdGFiIGlzIHNldHVwLCBydW4gZm9yIGV4YW1wbGUgcmFpZDBydW4gLWEgdG8gc3RhcnQgYWxsIGRldmljZXMgb3IKK3JhaWQwcnVuIC9kZXYvbWQwIHRvIHN0YXJ0IGEgcGFydGljdWxhciBtZCBkZXZpY2UsIGluIHRoaXMgY2FzZSAvZGV2L21kMC4KKworVGhlbiBqdXN0IHVzZSB0aGUgbW91bnQgY29tbWFuZCBhcyB1c3VhbCB0byBtb3VudCB0aGUgbnRmcyB2b2x1bWUgdXNpbmcgZm9yCitleGFtcGxlOgltb3VudCAtdCBudGZzIC1vIHJvIC9kZXYvbWQwIC9tbnQvbXludGZzdm9sdW1lCisKK0l0IGlzIGFkdmlzYWJsZSB0byBkbyB0aGUgbW91bnQgcmVhZC1vbmx5IHRvIHNlZSBpZiB0aGUgbWQgdm9sdW1lIGhhcyBiZWVuCitzZXR1cCBjb3JyZWN0bHkgdG8gYXZvaWQgdGhlIHBvc3NpYmlsaXR5IG9mIGNhdXNpbmcgZGFtYWdlIHRvIHRoZSBkYXRhIG9uIHRoZQorbnRmcyB2b2x1bWUuCisKKworTGltaXRpYXRpb25zIHdoZW4gdXNpbmcgdGhlIFNvZnR3YXJlIFJBSUQgLyBNRCBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzaW5nIHRoZSBtZCBkcml2ZXIgd2lsbCBub3Qgd29yayBwcm9wZXJseSBpZiBhbnkgb2YgeW91ciBOVEZTIHBhcnRpdGlvbnMgaGF2ZQorYW4gb2RkIG51bWJlciBvZiBzZWN0b3JzLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgbGluZWFyIHJhaWQgYXMgYWxsCitkYXRhIGFmdGVyIHRoZSBmaXJzdCBwYXJ0aXRpb24gd2l0aCBhbiBvZGQgbnVtYmVyIG9mIHNlY3RvcnMgd2lsbCBiZSBvZmZzZXQgYnkKK29uZSBvciBtb3JlIHNlY3RvcnMgc28gaWYgeW91IG1vdW50IHN1Y2ggYSBwYXJ0aXRpb24gd2l0aCB3cml0ZSBzdXBwb3J0IHlvdQord2lsbCBjYXVzZSBtYXNzaXZlIGRhbWFnZSB0byB0aGUgZGF0YSBvbiB0aGUgdm9sdW1lIHdoaWNoIHdpbGwgb25seSBiZWNvbWUKK2FwcGFyZW50IHdoZW4geW91IHRyeSB0byB1c2UgdGhlIHZvbHVtZSBhZ2FpbiB1bmRlciBXaW5kb3dzLgorCitTbyB3aGVuIHVzaW5nIGxpbmVhciByYWlkLCBtYWtlIHN1cmUgdGhhdCBhbGwgeW91ciBwYXJ0aXRpb25zIGhhdmUgYW4gZXZlbgorbnVtYmVyIG9mIHNlY3RvcnMgQkVGT1JFIGF0dGVtcHRpbmcgdG8gdXNlIGl0LiAgWW91IGhhdmUgYmVlbiB3YXJuZWQhCisKK0V2ZW4gYmV0dGVyIGlzIHRvIHNpbXBseSB1c2UgdGhlIERldmljZS1NYXBwZXIgZm9yIGxpbmVhciByYWlkIGFuZCB0aGVuIHlvdSBkbworbm90IGhhdmUgdGhpcyBwcm9ibGVtIHdpdGggb2RkIG51bWJlcnMgb2Ygc2VjdG9ycy4KKworCitDaGFuZ2VMb2cKKz09PT09PT09PQorCitOb3RlLCBhIHRlY2huaWNhbCBDaGFuZ2VMb2cgYWltZWQgYXQga2VybmVsIGhhY2tlcnMgaXMgaW4gZnMvbnRmcy9DaGFuZ2VMb2cuCisKKzIuMS4yMjoKKwktIEltcHJvdmUgaGFuZGxpbmcgb2YgbnRmcyB2b2x1bWVzIHdpdGggZXJyb3JzLgorCS0gRml4IHZhcmlvdXMgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zLgorMi4xLjIxOgorCS0gRml4IHNldmVyYWwgcmFjZSBjb25kaXRpb25zIGFuZCB2YXJpb3VzIG90aGVyIGJ1Z3MuCisJLSBNYW55IGludGVybmFsIGNsZWFudXBzLCBjb2RlIHJlb3JnYW5pemF0aW9uLCBvcHRpbWl6YXRpb25zLCBhbmQgbWZ0CisJICBhbmQgaW5kZXggcmVjb3JkIHdyaXRpbmcgY29kZSByZXdyaXR0ZW4gdG8gZml0IGluIHdpdGggdGhlIGNoYW5nZXMuCisJLSBVcGRhdGUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dCB3aXRoIGluc3RydWN0aW9ucyBvbiBob3cgdG8KKwkgIHVzZSB0aGUgRGV2aWNlLU1hcHBlciBkcml2ZXIgd2l0aCBOVEZTIGZ0ZGlzay9MRE0gcmFpZC4KKzIuMS4yMDoKKwktIEZpeCB0d28gc3R1cGlkIGJ1Z3MgaW50cm9kdWNlZCBpbiAyLjEuMTggcmVsZWFzZS4KKzIuMS4xOToKKwktIE1pbm9yIGJ1Z2ZpeCBpbiBoYW5kbGluZyBvZiB0aGUgZGVmYXVsdCB1cGNhc2UgdGFibGUuCisJLSBNYW55IGludGVybmFsIGNsZWFudXBzIGFuZCBpbXByb3ZlbWVudHMuICBNYW55IHRoYW5rcyB0byBMaW51cworCSAgVG9ydmFsZHMgYW5kIEFsIFZpcm8gZm9yIHRoZSBoZWxwIGFuZCBhZHZpY2Ugd2l0aCB0aGUgc3BhcnNlCisJICBhbm5vdGF0aW9ucyBhbmQgY2xlYW51cHMuCisyLjEuMTg6CisJLSBGaXggc2NoZWR1bGluZyBsYXRlbmNpZXMgYXQgbW91bnQgdGltZS4gIChJbmdvIE1vbG5hcikKKwktIEZpeCBlbmRpYW5uZXNzIGJ1ZyBpbiBhIGxpdHRsZSB0cmF2ZXJzZWQgcG9ydGlvbiBvZiB0aGUgYXR0cmlidXRlCisJICBsb29rdXAgY29kZS4KKzIuMS4xNzoKKwktIEZpeCBidWdzIGluIG1vdW50IHRpbWUgZXJyb3IgY29kZSBwYXRocy4KKzIuMS4xNjoKKwktIEltcGxlbWVudCBhY2Nlc3MgdGltZSB1cGRhdGVzIChpbmNsdWRpbmcgbXRpbWUgYW5kIGN0aW1lKS4KKwktIEltcGxlbWVudCBmc3luYygyKSwgZmRhdGFzeW5jKDIpLCBhbmQgbXN5bmMoMikgc3lzdGVtIGNhbGxzLgorCS0gRW5hYmxlIHRoZSByZWFkdigyKSBhbmQgd3JpdGV2KDIpIHN5c3RlbSBjYWxscy4KKwktIEVuYWJsZSBhY2Nlc3MgdmlhIHRoZSBhc3luY2hyb25vdXMgaW8gKGFpbykgQVBJIGJ5IGFkZGluZyBzdXBwb3J0IGZvcgorCSAgdGhlIGFpb19yZWFkKDMpIGFuZCBhaW9fd3JpdGUoMykgZnVuY3Rpb25zLgorMi4xLjE1OgorCS0gSW52YWxpZGF0ZSBxdW90YXMgd2hlbiAocmUpbW91bnRpbmcgcmVhZC13cml0ZS4KKwkgIE5PVEU6ICBUaGlzIG5vdyBvbmx5IGxlYXZlIHVzZXIgc3BhY2Ugam91cm5hbGxpbmcgb24gdGhlIHNpZGUuICAoU2VlCisJICBub3RlIGZvciB2ZXJzaW9uIDIuMS4xMywgYmVsb3cuKQorMi4xLjE0OgorCS0gRml4IGFuIE5GU2QgY2F1c2VkIGRlYWRsb2NrIHJlcG9ydGVkIGJ5IHNldmVyYWwgdXNlcnMuCisyLjEuMTM6CisJLSBJbXBsZW1lbnQgd3JpdGluZyBvZiBpbm9kZXMgKGFjY2VzcyB0aW1lIHVwZGF0ZXMgYXJlIG5vdCBpbXBsZW1lbnRlZAorCSAgeWV0IHNvIG1vdW50aW5nIHdpdGggLW8gbm9hdGltZSxub2RpcmF0aW1lIGlzIGVuZm9yY2VkKS4KKwktIEVuYWJsZSB3cml0aW5nIG91dCBvZiByZXNpZGVudCBmaWxlcyBzbyB5b3UgY2FuIG5vdyBvdmVyd3JpdGUgYW55CisJICB1bmNvbXByZXNzZWQsIHVuZW5jcnlwdGVkLCBub25zcGFyc2UgZmlsZSBhcyBsb25nIGFzIHlvdSBkbyBub3QKKwkgIGNoYW5nZSB0aGUgZmlsZSBzaXplLgorCS0gQWRkIGhvdXNla2VlcGluZyBvZiBudGZzIHN5c3RlbSBmaWxlcyBzbyB0aGF0IG50ZnNmaXggbm8gbG9uZ2VyIG5lZWRzCisJICB0byBiZSBydW4gYWZ0ZXIgd3JpdGluZyB0byBhbiBOVEZTIHZvbHVtZS4KKwkgIE5PVEU6ICBUaGlzIHN0aWxsIGxlYXZlcyBxdW90YSB0cmFja2luZyBhbmQgdXNlciBzcGFjZSBqb3VybmFsbGluZyBvbgorCSAgdGhlIHNpZGUgYnV0IHRoZXkgc2hvdWxkIG5vdCBjYXVzZSBkYXRhIGNvcnJ1cHRpb24uICBJbiB0aGUgd29yc3QKKwkgIGNhc2UgdGhlIGNoYXJnZWQgcXVvdGFzIHdpbGwgYmUgb3V0IG9mIGRhdGUgKCRRdW90YSkgYW5kIHNvbWUKKwkgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgbWlnaHQgZ2V0IGNvbmZ1c2VkIGR1ZSB0byB0aGUgb3V0IG9mIGRhdGUKKwkgIHVzZXJzcGFjZSBqb3VybmFsICgkVXNuSnJubCkuCisyLjEuMTI6CisJLSBGaXggdGhlIHNlY29uZCBmaXggdG8gdGhlIGRlY29tcHJlc3Npb24gZW5naW5lIGZyb20gdGhlIDIuMS45IHJlbGVhc2UKKwkgIGFuZCBzb21lIGZ1cnRoZXIgaW50ZXJuYWxzIGNsZWFudXBzLgorMi4xLjExOgorCS0gRHJpdmVyIGludGVybmFsIGNsZWFudXBzLgorMi4xLjEwOgorCS0gRm9yY2UgcmVhZC1vbmx5IChyZSltb3VudGluZyBvZiB2b2x1bWVzIHdpdGggdW5zdXBwb3J0ZWQgdm9sdW1lCisJICBmbGFncyBhbmQgdmFyaW91cyBjbGVhbnVwcy4KKzIuMS45OgorCS0gRml4IHR3byBidWdzIGluIGhhbmRsaW5nIG9mIGNvcm5lciBjYXNlcyBpbiB0aGUgZGVjb21wcmVzc2lvbiBlbmdpbmUuCisyLjEuODoKKwktIFJlYWQgdGhlICRNRlQgbWlycm9yIGFuZCBjb21wYXJlIGl0IHRvIHRoZSAkTUZUIGFuZCBpZiB0aGUgdHdvIGRvIG5vdAorCSAgbWF0Y2gsIGZvcmNlIGEgcmVhZC1vbmx5IG1vdW50IGFuZCBkbyBub3QgYWxsb3cgcmVhZC13cml0ZSByZW1vdW50cy4KKwktIFJlYWQgYW5kIHBhcnNlIHRoZSAkTG9nRmlsZSBqb3VybmFsIGFuZCBpZiBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUKKwkgIHZvbHVtZSB3YXMgbm90IHNodXRkb3duIGNsZWFubHksIGZvcmNlIGEgcmVhZC1vbmx5IG1vdW50IGFuZCBkbyBub3QKKwkgIGFsbG93IHJlYWQtd3JpdGUgcmVtb3VudHMuICBJZiB0aGUgJExvZ0ZpbGUgaW5kaWNhdGVzIGEgY2xlYW4KKwkgIHNodXRkb3duIGFuZCBhIHJlYWQtd3JpdGUgKHJlKW1vdW50IGlzIHJlcXVlc3RlZCwgZW1wdHkgJExvZ0ZpbGUgdG8KKwkgIGVuc3VyZSB0aGF0IFdpbmRvd3MgY2Fubm90IGNhdXNlIGRhdGEgY29ycnVwdGlvbiBieSByZXBsYXlpbmcgYSBzdGFsZQorCSAgam91cm5hbCBhZnRlciBMaW51eCBoYXMgd3JpdHRlbiB0byB0aGUgdm9sdW1lLgorCS0gSW1wcm92ZSB0aW1lIGhhbmRsaW5nIHNvIHRoYXQgdGhlIE5URlMgdGltZSBpcyBmdWxseSBwcmVzZXJ2ZWQgd2hlbgorCSAgY29udmVydGVkIHRvIGtlcm5lbCB0aW1lIGFuZCBvbmx5IHVwIHRvIDk5IG5hbm8tc2Vjb25kcyBhcmUgbG9zdCB3aGVuCisJICBrZXJuZWwgdGltZSBpcyBjb252ZXJ0ZWQgdG8gTlRGUyB0aW1lLgorMi4xLjc6CisJLSBFbmFibGUgTkZTIGV4cG9ydGluZyBvZiBtb3VudGVkIE5URlMgdm9sdW1lcy4KKzIuMS42OgorCS0gRml4IG1pbm9yIGJ1ZyBpbiBoYW5kbGluZyBvZiBjb21wcmVzc2VkIGRpcmVjdG9yaWVzIHRoYXQgZml4ZXMgdGhlCisJICBlcnJvbmVvdXMgImR1IiBhbmQgInN0YXQiIG91dHB1dCBwZW9wbGUgcmVwb3J0ZWQuCisyLjEuNToKKwktIE1pbm9yIGJ1ZyBmaXggaW4gYXR0cmlidXRlIGxpc3QgYXR0cmlidXRlIGhhbmRsaW5nIHRoYXQgZml4ZXMgdGhlCisJICBJL08gZXJyb3JzIG9uICJscyIgb2YgY2VydGFpbiBmcmFnbWVudGVkIGZpbGVzIGZvdW5kIGJ5IGF0IGxlYXN0IHR3bworCSAgcGVvcGxlIHJ1bm5pbmcgV2luZG93cyBYUC4KKzIuMS40OgorCS0gTWlub3IgdXBkYXRlIGFsbG93aW5nIGNvbXBpbGF0aW9uIHdpdGggYWxsIGdjYyB2ZXJzaW9ucyAod2VsbCwgdGhlCisJICBvbmVzIHRoZSBrZXJuZWwgY2FuIGJlIGNvbXBpbGVkIHdpdGggYW55d2F5KS4KKzIuMS4zOgorCS0gTWFqb3IgYnVnIGZpeGVzIGZvciByZWFkaW5nIGZpbGVzIGFuZCB2b2x1bWVzIGluIGNvcm5lciBjYXNlcyB3aGljaAorCSAgd2VyZSBiZWluZyBoaXQgYnkgV2luZG93cyAyay9YUCB1c2Vycy4KKzIuMS4yOgorCS0gTWFqb3IgYnVnIGZpeGVzIGFsZXZpYXRpbmcgdGhlIGhhbmdzIGluIHN0YXRmcyBleHBlcmllbmNlZCBieSBzb21lCisJICB1c2Vycy4KKzIuMS4xOgorCS0gVXBkYXRlIGhhbmRsaW5nIG9mIGNvbXByZXNzZWQgZmlsZXMgc28gcGVvcGxlIG5vIGxvbmdlciBnZXQgdGhlCisJICBmcmVxdWVudGx5IHJlcG9ydGVkIHdhcm5pbmcgbWVzc2FnZXMgYWJvdXQgaW5pdGlhbGl6ZWRfc2l6ZSAhPQorCSAgZGF0YV9zaXplLgorMi4xLjA6CisJLSBBZGQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGRldmVsb3BtZW50YWwgd3JpdGUgc3VwcG9ydC4KKwktIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgZmlsZSBvdmVyd3JpdGluZy4gKFdyaXRlcyB0byByZXNpZGVudCBmaWxlcworCSAgYXJlIG5vdCB3cml0dGVuIG91dCB0byBkaXNrIHlldCwgc28gYXZvaWQgd3JpdGluZyB0byBmaWxlcyBzbWFsbGVyCisJICB0aGFuIGFib3V0IDFraUIuKQorCS0gSW50ZXJjZXB0L2Fib3J0IGNoYW5nZXMgaW4gZmlsZSBzaXplIGFzIHRoZXkgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisyLjAuMjU6CisJLSBNaW5vciBidWdmaXhlcyBpbiBlcnJvciBjb2RlIHBhdGhzIGFuZCBzbWFsbCBjbGVhbnVwcy4KKzIuMC4yNDoKKwktIFNtYWxsIGludGVybmFsIGNsZWFudXBzLgorCS0gU3VwcG9ydCBmb3Igc2VuZGZpbGUgc3lzdGVtIGNhbGwuIChDaHJpc3RvcGggSGVsbHdpZykKKzIuMC4yMzoKKwktIE1hc3NpdmUgaW50ZXJuYWwgbG9ja2luZyBjaGFuZ2VzIHRvIG1mdCByZWNvcmQgbG9ja2luZy4gRml4ZXMKKwkgIHZhcmlvdXMgcmFjZSBjb25kaXRpb25zIGFuZCBkZWFkbG9ja3MuCisJLSBGaXggbnRmcyBvdmVyIGxvb3BiYWNrIGZvciBjb21wcmVzc2VkIGZpbGVzIGJ5IGFkZGluZyBhbgorCSAgb3B0aW1pemF0aW9uIGJhcnJpZXIuIChnY2Mgd2FzIHNjcmV3aW5nIHVwIG90aGVyd2lzZSA/KQorCVRoYW5rcyBnbyB0byBDaHJpc3RvcGggSGVsbHdpZyBmb3IgcG9pbnRpbmcgdGhlc2UgdHdvIG91dDoKKwktIFJlbW92ZSBub3cgdW51c2VkIGZ1bmN0aW9uIGZzL250ZnMvbWFsbG9jLmg6OnZtYWxsb2Nfbm9mcygpLgorCS0gRml4IG50ZnNfZnJlZSgpIGZvciBpYTY0IGFuZCBwYXJpc2MuCisyLjAuMjI6CisJLSBTbWFsbCBpbnRlcm5hbCBjbGVhbnVwcy4KKzIuMC4yMToKKwlUaGVzZSBvbmx5IGFmZmVjdCAzMi1iaXQgYXJjaGl0ZWN0dXJlczoKKwktIENoZWNrIGZvciwgYW5kIHJlZnVzZSB0byBtb3VudCB0b28gbGFyZ2Ugdm9sdW1lcyAobWF4aW11bSBpcyAyVGlCKS4KKwktIENoZWNrIGZvciwgYW5kIHJlZnVzZSB0byBvcGVuIHRvbyBsYXJnZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKKwkgIChtYXhpbXVtIGlzIDE2VGlCKS4KKzIuMC4yMDoKKwktIFN1cHBvcnQgbm9uLXJlc2lkZW50IGRpcmVjdG9yeSBpbmRleCBiaXRtYXBzLiBUaGlzIG1lYW5zIHdlIG5vdyBjb3BlCisJICB3aXRoIGh1Z2UgZGlyZWN0b3JpZXMgd2l0aG91dCBwcm9ibGVtcy4KKwktIEZpeCBhIHBhZ2UgbGVhayB0aGF0IG1hbmlmZXN0ZWQgaXRzZWxmIGluIHNvbWUgY2FzZXMgd2hlbiByZWFkaW5nCisJICBkaXJlY3RvcnkgY29udGVudHMuCisJLSBJbnRlcm5hbCBjbGVhbnVwcy4KKzIuMC4xOToKKwktIEZpeCByYWNlIGNvbmRpdGlvbiBhbmQgaW1wcm92ZW1lbnRzIGluIGJsb2NrIGkvbyBpbnRlcmZhY2UuCisJLSBPcHRpbWl6YXRpb24gd2hlbiByZWFkaW5nIGNvbXByZXNzZWQgZmlsZXMuCisyLjAuMTg6CisJLSBGaXggcmFjZSBjb25kaXRpb24gaW4gcmVhZGluZyBvZiBjb21wcmVzc2VkIGZpbGVzLgorMi4wLjE3OgorCS0gQ2xlYW51cHMgYW5kIG9wdGltaXphdGlvbnMuCisyLjAuMTY6CisJLSBGaXggc3R1cGlkIGJ1ZyBpbnRyb2R1Y2VkIGluIDIuMC4xNSBpbiBuZXcgYXR0cmlidXRlIGlub2RlIEFQSS4KKwktIEJpZyBpbnRlcm5hbCBjbGVhbnVwIHJlcGxhY2luZyB0aGUgbWZ0Ym1wIGFjY2VzcyBoYWNrcyBieSB1c2luZyB0aGUKKwkgIG5ldyBhdHRyaWJ1dGUgaW5vZGUgQVBJIGluc3RlYWQuCisyLjAuMTU6CisJLSBCdWcgZml4IGluIHBhcnNpbmcgb2YgcmVtb3VudCBvcHRpb25zLgorCS0gSW50ZXJuYWwgY2hhbmdlcyBpbXBsZW1lbnRpbmcgYXR0cmlidXRlIChmYWtlKSBpbm9kZXMgYWxsb3dpbmcgYWxsCisJICBhdHRyaWJ1dGUgaS9vIHRvIGdvIHZpYSB0aGUgcGFnZSBjYWNoZSBhbmQgdG8gdXNlIGFsbCB0aGUgbm9ybWFsCisJICB2ZnMvbW0gZnVuY3Rpb25hbGl0eS4KKzIuMC4xNDoKKwktIEludGVybmFsIGNoYW5nZXMgaW1wcm92aW5nIHJ1biBsaXN0IG1lcmdpbmcgY29kZSBhbmQgbWlub3IgbG9ja2luZworCSAgY2hhbmdlIHRvIG5vdCByZWx5IG9uIEJLTCBpbiBudGZzX3N0YXRmcygpLgorMi4wLjEzOgorCS0gSW50ZXJuYWwgY2hhbmdlcyB0b3dhcmRzIHVzaW5nIGlnZXQ1X2xvY2tlZCgpIGluIHByZXBhcmF0aW9uIGZvcgorCSAgZmFrZSBpbm9kZXMgYW5kIHNtYWxsIGNsZWFudXBzIHRvIG50ZnNfdm9sdW1lIHN0cnVjdHVyZS4KKzIuMC4xMjoKKwktIEludGVybmFsIGNsZWFudXBzIGluIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBtYWRlIHBvc3NpYmxlIGJ5IHRoZQorCSAgY2hhbmdlcyBpbnRyb2R1Y2VkIGluIHRoZSBwcmV2aW91cyByZWxlYXNlLgorMi4wLjExOgorCS0gSW50ZXJuYWwgdXBkYXRlcyBhbmQgY2xlYW51cHMgaW50cm9kdWNpbmcgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcworCSAgZmFrZSBpbm9kZSBiYXNlZCBhdHRyaWJ1dGUgaS9vLgorMi4wLjEwOgorCS0gTWljcm9zb2Z0IHNheXMgdGhhdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5vZGVzIGlzIDJeMzIgLSAxLiBVcGRhdGUKKwkgIHRoZSBkcml2ZXIgYWNjb3JkaW5nbHkgdG8gb25seSB1c2UgMzItYml0cyB0byBzdG9yZSBpbm9kZSBudW1iZXJzIG9uCisJICAzMi1iaXQgYXJjaGl0ZWN0dXJlcy4gVGhpcyBpbXByb3ZlcyB0aGUgc3BlZWQgb2YgdGhlIGRyaXZlciBhIGxpdHRsZS4KKzIuMC45OgorCS0gQ2hhbmdlIGRlY29tcHJlc3Npb24gZW5naW5lIHRvIHVzZSBhIHNpbmdsZSBidWZmZXIuIFRoaXMgc2hvdWxkIG5vdAorCSAgYWZmZWN0IHBlcmZvcm1hbmNlIGV4Y2VwdCBwZXJoYXBzIG9uIHRoZSBtb3N0IGhlYXZ5IGkvbyBvbiBTTVAKKwkgIHN5c3RlbXMgd2hlbiBhY2Nlc3NpbmcgbXVsdGlwbGUgY29tcHJlc3NlZCBmaWxlcyBmcm9tIG11bHRpcGxlCisJICBkZXZpY2VzIHNpbXVsdGFuZW91c2x5LgorCS0gTWlub3IgdXBkYXRlcyBhbmQgY2xlYW51cHMuCisyLjAuODoKKwktIFJlbW92ZSBub3cgb2Jzb2xldGUgc2hvd19pbm9kZXMgYW5kIHBvc2l4IG1vdW50IG9wdGlvbihzKS4KKwktIFJlc3RvcmUgc2hvd19zeXNfZmlsZXMgbW91bnQgb3B0aW9uLgorCS0gQWRkIG5ldyBtb3VudCBvcHRpb24gY2FzZV9zZW5zaXRpdmUsIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyCisJICB0cmVhdHMgZmlsZSBuYW1lcyBhcyBjYXNlIHNlbnNpdGl2ZSBvciBub3QuCisJLSBNb3N0bHkgZHJvcCBzdXBwb3J0IGZvciBzaG9ydCBmaWxlIG5hbWVzIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKwkgIHdlIG9ubHkgc3VwcG9ydCBhY2Nlc3NpbmcgZmlsZXMgdmlhIHRoZWlyIHNob3J0IGZpbGUgbmFtZSBpZiBvbmUKKwkgIGV4aXN0cykuCisJLSBGaXggZGNhY2hlIGFsaWFzaW5nIGlzc3VlcyB3cnQgc2hvcnQvbG9uZyBmaWxlIG5hbWVzLgorCS0gQ2xlYW51cHMgYW5kIG1pbm9yIGZpeGVzLgorMi4wLjc6CisJLSBKdXN0IGNsZWFudXBzLgorMi4wLjY6CisJLSBNYWpvciBidWdmaXggdG8gbWFrZSBjb21wYXRpYmxlIHdpdGggb3RoZXIga2VybmVsIGNoYW5nZXMuIFRoaXMgZml4ZXMKKwkgIHRoZSBoYW5ncy9vb3BzZXMgb24gdW1vdW50LgorCS0gTG9ja2luZyBjbGVhbnVwIGluIGRpcmVjdG9yeSBvcGVyYXRpb25zIChyZW1vdmUgQktMIHVzYWdlKS4KKzIuMC41OgorCS0gTWFqb3IgYnVmZmVyIG92ZXJmbG93IGJ1ZyBmaXguCisJLSBNaW5vciBjbGVhbnVwcyBhbmQgdXBkYXRlcyBmb3Iga2VybmVsIDIuNS4xMi4KKzIuMC40OgorCS0gQ2xlYW51cHMgYW5kIHVwZGF0ZXMgZm9yIGtlcm5lbCAyLjUuMTEuCisyLjAuMzoKKwktIFNtYWxsIGJ1ZyBmaXhlcywgY2xlYW51cHMsIGFuZCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCisyLjAuMjoKKwktIFVzZSBkZWZhdWx0IGZtYXNrIG9mIDAxNzcgc28gdGhhdCBmaWxlcyBhcmUgbm8gZXhlY3V0YWJsZSBieSBkZWZhdWx0LgorCSAgSWYgeW91IHdhbnQgb3duZXIgZXhlY3V0YWJsZSBmaWxlcywganVzdCB1c2UgZm1hc2s9MDA3Ny4KKwktIFVwZGF0ZSBmb3Iga2VybmVsIDIuNS45IGJ1dCBwcmVzZXJ2ZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCisJICBrZXJuZWwgMi41LjcuCisJLSBNaW5vciBidWcgZml4ZXMsIGNsZWFudXBzLCBhbmQgdXBkYXRlcy4KKzIuMC4xOgorCS0gTWlub3IgdXBkYXRlcywgcHJpbWFyaWx5IHNldCB0aGUgZXhlY3V0YWJsZSBiaXQgYnkgZGVmYXVsdCBvbiBmaWxlcworCSAgc28gdGhleSBjYW4gYmUgZXhlY3V0ZWQuCisyLjAuMDoKKwktIFN0YXJ0ZWQgQ2hhbmdlTG9nLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzODg0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZwpAQCAtMCwwICsxLDI2NiBAQAorQ2hhbmdlcyBzaW5jZSAyLjUuMDoKKworLS0tIAorW3JlY29tbWVuZGVkXQorCitOZXcgaGVscGVyczogc2JfYnJlYWQoKSwgc2JfZ2V0YmxrKCksIHNiX2ZpbmRfZ2V0X2Jsb2NrKCksIHNldF9iaCgpLAorCXNiX3NldF9ibG9ja3NpemUoKSBhbmQgc2JfbWluX2Jsb2Nrc2l6ZSgpLgorCitVc2UgdGhlbS4KKworKHNiX2ZpbmRfZ2V0X2Jsb2NrKCkgcmVwbGFjZXMgMi40J3MgZ2V0X2hhc2hfdGFibGUoKSkKKworLS0tIAorW3JlY29tbWVuZGVkXQorCitOZXcgbWV0aG9kczogLT5hbGxvY19pbm9kZSgpIGFuZCAtPmRlc3Ryb3lfaW5vZGUoKS4KKworUmVtb3ZlIGlub2RlLT51LmZvb19pbm9kZV9pCitEZWNsYXJlCisJc3RydWN0IGZvb19pbm9kZV9pbmZvIHsKKwkJLyogZnMtcHJpdmF0ZSBzdHVmZiAqLworCQlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOworCX07CisJc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9vX2lub2RlX2luZm8gKkZPT19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCisJeworCQlyZXR1cm4gbGlzdF9lbnRyeShpbm9kZSwgc3RydWN0IGZvb19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOworCX0KKworVXNlIEZPT19JKGlub2RlKSBpbnN0ZWFkIG9mICZpbm9kZS0+dS5mb29faW5vZGVfaTsKKworQWRkIGZvb19hbGxvY19pbm9kZSgpIGFuZCBmb29fZGVzdG9yeV9pbm9kZSgpIC0gdGhlIGZvcm1lciBzaG91bGQgYWxsb2NhdGUKK2Zvb19pbm9kZV9pbmZvIGFuZCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgLT52ZnNfaW5vZGUsIHRoZSBsYXR0ZXIgc2hvdWxkIGZyZWUKK0ZPT19JKGlub2RlKSAoc2VlIGluLXRyZWUgZmlsZXN5c3RlbXMgZm9yIGV4YW1wbGVzKS4KKworTWFrZSB0aGVtIC0+YWxsb2NfaW5vZGUgYW5kIC0+ZGVzdHJveV9pbm9kZSBpbiB5b3VyIHN1cGVyX29wZXJhdGlvbnMuCisKK0tlZXAgaW4gbWluZCB0aGF0IG5vdyB5b3UgbmVlZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiBwcml2YXRlIGRhdGEgLQordHlwaWNhbGx5IGluIC0+cmVhZF9pbm9kZSgpIGFuZCBhZnRlciBnZXR0aW5nIGFuIGlub2RlIGZyb20gbmV3X2lub2RlKCkuCisKK0F0IHNvbWUgcG9pbnQgdGhhdCB3aWxsIGJlY29tZSBtYW5kYXRvcnkuCisKKy0tLQorW21hbmRhdG9yeV0KKworQ2hhbmdlIG9mIGZpbGVfc3lzdGVtX3R5cGUgbWV0aG9kICgtPnJlYWRfc3VwZXIgdG8gLT5nZXRfc2IpCisKKy0+cmVhZF9zdXBlcigpIGlzIG5vIG1vcmUuICBEaXR0byBmb3IgREVDTEFSRV9GU1RZUEUgYW5kIERFQ0xBUkVfRlNUWVBFX0RFVi4KKworVHVybiB5b3VyIGZvb19yZWFkX3N1cGVyKCkgaW50byBhIGZ1bmN0aW9uIHRoYXQgd291bGQgcmV0dXJuIDAgaW4gY2FzZSBvZgorc3VjY2VzcyBhbmQgbmVnYXRpdmUgbnVtYmVyIGluIGNhc2Ugb2YgZXJyb3IgKC1FSU5WQUwgdW5sZXNzIHlvdSBoYXZlIG1vcmUKK2luZm9ybWF0aXZlIGVycm9yIHZhbHVlIHRvIHJlcG9ydCkuICBDYWxsIGl0IGZvb19maWxsX3N1cGVyKCkuICBOb3cgZGVjbGFyZQorCitzdHJ1Y3Qgc3VwZXJfYmxvY2sgZm9vX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQoreworCXJldHVybiBnZXRfc2JfYmRldihmc190eXBlLCBmbGFncywgZGV2X25hbWUsIGRhdGEsIGV4dDJfZmlsbF9zdXBlcik7Cit9CisKKyhvciBzaW1pbGFyIHdpdGggcy9iZGV2L25vZGV2LyBvciBzL2JkZXYvc2luZ2xlLywgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mCitmaWxlc3lzdGVtKS4KKworUmVwbGFjZSBERUNMQVJFX0ZTVFlQRS4uLiB3aXRoIGV4cGxpY2l0IGluaXRpYWxpemVyIGFuZCBoYXZlIC0+Z2V0X3NiIHNldCBhcworZm9vX2dldF9zYi4KKworLS0tCitbbWFuZGF0b3J5XQorCitMb2NraW5nIGNoYW5nZTogLT5zX3Zmc19yZW5hbWVfc2VtIGlzIHRha2VuIG9ubHkgYnkgY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZXMuCitNb3N0IGxpa2VseSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZywgYnV0IGlmIHlvdSByZWxpZWQgb24KK2dsb2JhbCBleGNsdXNpb24gYmV0d2VlbiByZW5hbWVzIGZvciBzb21lIGludGVybmFsIHB1cnBvc2UgLSB5b3UgbmVlZCB0bworY2hhbmdlIHlvdXIgaW50ZXJuYWwgbG9ja2luZy4gIE90aGVyd2lzZSBleGNsdXNpb24gd2FycmFudGllcyByZW1haW4gdGhlCitzYW1lIChpLmUuIHBhcmVudHMgYW5kIHZpY3RpbSBhcmUgbG9ja2VkLCBldGMuKS4KKworLS0tCitbaW5mb3JtYXRpb25hbF0KKworTm93IHdlIGhhdmUgdGhlIGV4Y2x1c2lvbiBiZXR3ZWVuIC0+bG9va3VwKCkgYW5kIGRpcmVjdG9yeSByZW1vdmFsIChieQorLT5ybWRpcigpIGFuZCAtPnJlbmFtZSgpKS4gIElmIHlvdSB1c2VkIHRvIG5lZWQgdGhhdCBleGNsdXNpb24gYW5kIGRvCitpdCBieSBpbnRlcm5hbCBsb2NraW5nIChtb3N0IG9mIGZpbGVzeXN0ZW1zIGNvdWxkbid0IGNhcmUgbGVzcykgLSB5b3UKK2NhbiByZWxheCB5b3VyIGxvY2tpbmcuCisKKy0tLQorW21hbmRhdG9yeV0KKworLT5sb29rdXAoKSwgLT50cnVuY2F0ZSgpLCAtPmNyZWF0ZSgpLCAtPnVubGluaygpLCAtPm1rbm9kKCksIC0+bWtkaXIoKSwKKy0+cm1kaXIoKSwgLT5saW5rKCksIC0+bHNlZWsoKSwgLT5zeW1saW5rKCksIC0+cmVuYW1lKCkKK2FuZCAtPnJlYWRkaXIoKSBhcmUgY2FsbGVkIHdpdGhvdXQgQktMIG5vdy4gIEdyYWIgaXQgb24gZW50cnksIGRyb3AgdXBvbiByZXR1cm4KKy0gdGhhdCB3aWxsIGd1YXJhbnRlZSB0aGUgc2FtZSBsb2NraW5nIHlvdSB1c2VkIHRvIGhhdmUuICBJZiB5b3VyIG1ldGhvZCBvciBpdHMKK3BhcnRzIGRvIG5vdCBuZWVkIEJLTCAtIGJldHRlciB5ZXQsIG5vdyB5b3UgY2FuIHNoaWZ0IGxvY2tfa2VybmVsKCkgYW5kCit1bmxvY2tfa2VybmVsKCkgc28gdGhhdCB0aGV5IHdvdWxkIHByb3RlY3QgZXhhY3RseSB3aGF0IG5lZWRzIHRvIGJlCitwcm90ZWN0ZWQuCisKKy0tLQorW21hbmRhdG9yeV0KKworQktMIGlzIGFsc28gbW92ZWQgZnJvbSBhcm91bmQgc2Igb3BlcmF0aW9ucy4gIC0+d3JpdGVfc3VwZXIoKSBJcyBub3cgY2FsbGVkIAord2l0aG91dCBCS0wgaGVsZC4gIEJLTCBzaG91bGQgaGF2ZSBiZWVuIHNoaWZ0ZWQgaW50byBpbmRpdmlkdWFsIGZzIHNiX29wCitmdW5jdGlvbnMuICBJZiB5b3UgZG9uJ3QgbmVlZCBpdCwgcmVtb3ZlIGl0LiAgCisKKy0tLQorW2luZm9ybWF0aW9uYWxdCisKK2NoZWNrIGZvciAtPmxpbmsoKSB0YXJnZXQgbm90IGJlaW5nIGEgZGlyZWN0b3J5IGlzIGRvbmUgYnkgY2FsbGVycy4gIEZlZWwKK2ZyZWUgdG8gZHJvcCBpdC4uLgorCistLS0KK1tpbmZvcm1hdGlvbmFsXQorCistPmxpbmsoKSBjYWxsZXJzIGhvbGQgLT5pX3NlbSBvbiB0aGUgb2JqZWN0IHdlIGFyZSBsaW5raW5nIHRvLiAgU29tZSBvZiB5b3VyCitwcm9ibGVtcyBtaWdodCBiZSBvdmVyLi4uCisKKy0tLQorW21hbmRhdG9yeV0KKworbmV3IGZpbGVfc3lzdGVtX3R5cGUgbWV0aG9kIC0ga2lsbF9zYihzdXBlcmJsb2NrKS4gIElmIHlvdSBhcmUgY29udmVydGluZworYW4gZXhpc3RpbmcgZmlsZXN5c3RlbSwgc2V0IGl0IGFjY29yZGluZyB0byAtPmZzX2ZsYWdzOgorCUZTX1JFUVVJUkVTX0RFVgkJLQlraWxsX2Jsb2NrX3N1cGVyCisJRlNfTElUVEVSCQktCWtpbGxfbGl0dGVyX3N1cGVyCisJbmVpdGhlcgkJCS0Ja2lsbF9hbm9uX3N1cGVyCitGU19MSVRURVIgaXMgZ29uZSAtIGp1c3QgcmVtb3ZlIGl0IGZyb20gZnNfZmxhZ3MuCisKKy0tLQorW21hbmRhdG9yeV0KKworCUZTX1NJTkdMRSBpcyBnb25lIChhY3R1YWxseSwgdGhhdCBoYWQgaGFwcGVuZWQgYmFjayB3aGVuIC0+Z2V0X3NiKCkKK3dlbnQgaW4gLSBhbmQgaGFkbid0IGJlZW4gZG9jdW1lbnRlZCA7LS8pLiAgSnVzdCByZW1vdmUgaXQgZnJvbSBmc19mbGFncworKGFuZCBzZWUgLT5nZXRfc2IoKSBlbnRyeSBmb3Igb3RoZXIgYWN0aW9ucykuCisKKy0tLQorW21hbmRhdG9yeV0KKworLT5zZXRhdHRyKCkgaXMgY2FsbGVkIHdpdGhvdXQgQktMIG5vdy4gIENhbGxlciBfYWx3YXlzXyBob2xkcyAtPmlfc2VtLCBzbword2F0Y2ggZm9yIC0+aV9zZW0tZ3JhYmJpbmcgY29kZSB0aGF0IG1pZ2h0IGJlIHVzZWQgYnkgeW91ciAtPnNldGF0dHIoKS4KK0NhbGxlcnMgb2Ygbm90aWZ5X2NoYW5nZSgpIG5lZWQgLT5pX3NlbSBub3cuCisKKy0tLQorW3JlY29tbWVuZGVkXQorCitOZXcgc3VwZXJfYmxvY2sgZmllbGQgInN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyAqc19leHBvcnRfb3AiIGZvcgorZXhwbGljaXQgc3VwcG9ydCBmb3IgZXhwb3J0aW5nLCBlLmcuIHZpYSBORlMuICBUaGUgc3RydWN0dXJlIGlzIGZ1bGx5Citkb2N1bWVudGVkIGF0IGl0cyBkZWNsYXJhdGlvbiBpbiBpbmNsdWRlL2xpbnV4L2ZzLmgsIGFuZCBpbgorRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9FeHBvcnRpbmcuCisKK0JyaWVmbHkgaXQgYWxsb3dzIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBkZWNvZGVfZmggYW5kIGVuY29kZV9maCBvcGVyYXRpb25zCit0byBlbmNvZGUgYW5kIGRlY29kZSBmaWxlaGFuZGxlcywgYW5kIGFsbG93cyB0aGUgZmlsZXN5c3RlbSB0byB1c2UKK2Egc3RhbmRhcmQgaGVscGVyIGZ1bmN0aW9uIGZvciBkZWNvZGVfZmgsIGFuZCBwcm92aWRlIGZpbGUtc3lzdGVtIHNwZWNpZmljCitzdXBwb3J0IGZvciB0aGlzIGhlbHBlciwgcGFydGljdWxhcmx5IGdldF9wYXJlbnQuCisKK0l0IGlzIHBsYW5uZWQgdGhhdCB0aGlzIHdpbGwgYmUgcmVxdWlyZWQgZm9yIGV4cG9ydGluZyBvbmNlIHRoZSBjb2RlCitzZXR0bGVzIGRvd24gYSBiaXQuCisKK1ttYW5kYXRvcnldCisKK3NfZXhwb3J0X29wIGlzIG5vdyByZXF1aXJlZCBmb3IgZXhwb3J0aW5nIGEgZmlsZXN5c3RlbS4KK2lzb2ZzLCBleHQyLCBleHQzLCByZXNpZXJmcywgZmF0CitjYW4gYmUgdXNlZCBhcyBleGFtcGxlcyBvZiB2ZXJ5IGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKworLS0tCitbbWFuZGF0b3J5XQorCitpZ2V0NCgpIGFuZCB0aGUgcmVhZF9pbm9kZTIgY2FsbGJhY2sgaGF2ZSBiZWVuIHN1cGVyc2VkZWQgYnkgaWdldDVfbG9ja2VkKCkKK3doaWNoIGhhcyB0aGUgZm9sbG93aW5nIHByb3RvdHlwZSwKKworICAgIHN0cnVjdCBpbm9kZSAqaWdldDVfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLAorCQkJCWludCAoKnRlc3QpKHN0cnVjdCBpbm9kZSAqLCB2b2lkICopLAorCQkJCWludCAoKnNldCkoc3RydWN0IGlub2RlICosIHZvaWQgKiksCisJCQkJdm9pZCAqZGF0YSk7CisKKyd0ZXN0JyBpcyBhbiBhZGRpdGlvbmFsIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgd2hlbiB0aGUgaW5vZGUKK251bWJlciBpcyBub3Qgc3VmZmljaWVudCB0byBpZGVudGlmeSB0aGUgYWN0dWFsIGZpbGUgb2JqZWN0LiAnc2V0Jworc2hvdWxkIGJlIGEgbm9uLWJsb2NraW5nIGZ1bmN0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgdGhvc2UgcGFydHMgb2YgYQorbmV3bHkgY3JlYXRlZCBpbm9kZSB0byBhbGxvdyB0aGUgdGVzdCBmdW5jdGlvbiB0byBzdWNjZWVkLiAnZGF0YScgaXMKK3Bhc3NlZCBhcyBhbiBvcGFxdWUgdmFsdWUgdG8gYm90aCB0ZXN0IGFuZCBzZXQgZnVuY3Rpb25zLgorCitXaGVuIHRoZSBpbm9kZSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGlnZXQ1X2xvY2tlZCgpLCBpdCB3aWxsIGJlIHJldHVybmVkIHdpdGgKK3RoZSBJX05FVyBmbGFnIHNldCBhbmQgd2lsbCBzdGlsbCBiZSBsb2NrZWQuIHJlYWRfaW5vZGUgaGFzIG5vdCBiZWVuCitjYWxsZWQgc28gdGhlIGZpbGUgc3lzdGVtIHN0aWxsIGhhcyB0byBmaW5hbGl6ZSB0aGUgaW5pdGlhbGl6YXRpb24uIE9uY2UKK3RoZSBpbm9kZSBpcyBpbml0aWFsaXplZCBpdCBtdXN0IGJlIHVubG9ja2VkIGJ5IGNhbGxpbmcgdW5sb2NrX25ld19pbm9kZSgpLgorCitUaGUgZmlsZXN5c3RlbSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyAoYW5kIHBvc3NpYmx5IHRlc3RpbmcpIGlfaW5vCit3aGVuIGFwcHJvcHJpYXRlLiBUaGVyZSBpcyBhbHNvIGEgc2ltcGxlciBpZ2V0X2xvY2tlZCBmdW5jdGlvbiB0aGF0CitqdXN0IHRha2VzIHRoZSBzdXBlcmJsb2NrIGFuZCBpbm9kZSBudW1iZXIgYXMgYXJndW1lbnRzIGFuZCBkb2VzIHRoZQordGVzdCBhbmQgc2V0IGZvciB5b3UuCisKK2UuZy4KKyAgICAgICBpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pOworICAgICAgIGlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7CisgICAgICAgICAgICAgICByZWFkX2lub2RlX2Zyb21fZGlzayhpbm9kZSk7CisgICAgICAgICAgICAgICB1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKKyAgICAgICB9CisKKy0tLQorW3JlY29tbWVuZGVkXQorCistPmdldGF0dHIoKSBmaW5hbGx5IGdldHRpbmcgdXNlZC4gIFNlZSBpbnN0YW5jZXMgaW4gbmZzLCBtaW5peCwgZXRjLgorCistLS0KK1ttYW5kYXRvcnldCisKKy0+cmV2YWxpZGF0ZSgpIGlzIGdvbmUuICBJZiB5b3VyIGZpbGVzeXN0ZW0gaGFkIGl0IC0gcHJvdmlkZSAtPmdldGF0dHIoKQorYW5kIGxldCBpdCBjYWxsIHdoYXRldmVyIHlvdSBoYWQgYXMgLT5yZXZsaWRhdGUoKSArIChmb3Igc3ltbGlua3MgdGhhdAoraGFkIC0+cmV2YWxpZGF0ZSgpKSBhZGQgY2FsbHMgaW4gLT5mb2xsb3dfbGluaygpLy0+cmVhZGxpbmsoKS4KKworLS0tCitbbWFuZGF0b3J5XQorCistPmRfcGFyZW50IGNoYW5nZXMgYXJlIG5vdCBwcm90ZWN0ZWQgYnkgQktMIGFueW1vcmUuICBSZWFkIGFjY2VzcyBpcyBzYWZlCitpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorCSogZmlsZXN5c3RlbSBoYXMgbm8gY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZSgpCisJKiBkY2FjaGVfbG9jayBpcyBoZWxkCisJKiB3ZSBrbm93IHRoYXQgcGFyZW50IGhhZCBiZWVuIGxvY2tlZCAoZS5nLiB3ZSBhcmUgbG9va2luZyBhdAorLT5kX3BhcmVudCBvZiAtPmxvb2t1cCgpIGFyZ3VtZW50KS4KKwkqIHdlIGFyZSBjYWxsZWQgZnJvbSAtPnJlbmFtZSgpLgorCSogdGhlIGNoaWxkJ3MgLT5kX2xvY2sgaXMgaGVsZAorQXVkaXQgeW91ciBjb2RlIGFuZCBhZGQgbG9ja2luZyBpZiBuZWVkZWQuICBOb3RpY2UgdGhhdCBhbnkgcGxhY2UgdGhhdCBpcworbm90IHByb3RlY3RlZCBieSB0aGUgY29uZGl0aW9ucyBhYm92ZSBpcyByaXNreSBldmVuIGluIHRoZSBvbGQgdHJlZSAtIHlvdQoraGFkIGJlZW4gcmVseWluZyBvbiBCS0wgYW5kIHRoYXQncyBwcm9uZSB0byBzY3Jld3Vwcy4gIE9sZCB0cmVlIGhhZCBxdWl0ZQorYSBmZXcgaG9sZXMgb2YgdGhhdCBraW5kIC0gdW5wcm90ZWN0ZWQgYWNjZXNzIHRvIC0+ZF9wYXJlbnQgbGVhZGluZyB0bworYW55dGhpbmcgZnJvbSBvb3BzIHRvIHNpbGVudCBtZW1vcnkgY29ycnVwdGlvbi4KKworLS0tCitbbWFuZGF0b3J5XQorCisJRlNfTk9NT1VOVCBpcyBnb25lLiAgSWYgeW91IHVzZSBpdCAtIGp1c3Qgc2V0IE1TX05PVVNFUiBpbiBmbGFncworKHNlZSByb290ZnMgZm9yIG9uZSBraW5kIG9mIHNvbHV0aW9uIGFuZCBiZGV2L3NvY2tldC9waXBlIGZvciBhbm90aGVyKS4KKworLS0tCitbcmVjb21tZW5kZWRdCisKKwlVc2UgYmRldl9yZWFkX29ubHkoYmRldikgaW5zdGVhZCBvZiBpc19yZWFkX29ubHkoa2RldikuICBUaGUgbGF0dGVyCitpcyBzdGlsbCBhbGl2ZSwgYnV0IG9ubHkgYmVjYXVzZSBvZiB0aGUgbWVzcyBpbiBkcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLgorQXMgc29vbiBhcyBpdCBnZXRzIGZpeGVkIGlzX3JlYWRfb25seSgpIHdpbGwgZGllLgorCistLS0KK1ttYW5kYXRvcnldCisKKy0+cGVybWlzc2lvbigpIGlzIGNhbGxlZCB3aXRob3V0IEJLTCBub3cuIEdyYWIgaXQgb24gZW50cnksIGRyb3AgdXBvbgorcmV0dXJuIC0gdGhhdCB3aWxsIGd1YXJhbnRlZSB0aGUgc2FtZSBsb2NraW5nIHlvdSB1c2VkIHRvIGhhdmUuICBJZgoreW91ciBtZXRob2Qgb3IgaXRzIHBhcnRzIGRvIG5vdCBuZWVkIEJLTCAtIGJldHRlciB5ZXQsIG5vdyB5b3UgY2FuCitzaGlmdCBsb2NrX2tlcm5lbCgpIGFuZCB1bmxvY2tfa2VybmVsKCkgc28gdGhhdCB0aGV5IHdvdWxkIHByb3RlY3QKK2V4YWN0bHkgd2hhdCBuZWVkcyB0byBiZSBwcm90ZWN0ZWQuCisKKy0tLQorW21hbmRhdG9yeV0KKworLT5zdGF0ZnMoKSBpcyBub3cgY2FsbGVkIHdpdGhvdXQgQktMIGhlbGQuICBCS0wgc2hvdWxkIGhhdmUgYmVlbgorc2hpZnRlZCBpbnRvIGluZGl2aWR1YWwgZnMgc2Jfb3AgZnVuY3Rpb25zIHdoZXJlIGl0J3Mgbm90IGNsZWFyIHRoYXQKK2l0J3Mgc2FmZSB0byByZW1vdmUgaXQuICBJZiB5b3UgZG9uJ3QgbmVlZCBpdCwgcmVtb3ZlIGl0LgorCistLS0KK1ttYW5kYXRvcnldCisKKwlpc19yZWFkX29ubHkoKSBpcyBnb25lOyB1c2UgYmRldl9yZWFkX29ubHkoKSBpbnN0ZWFkLgorCistLS0KK1ttYW5kYXRvcnldCisKKwlkZXN0cm95X2J1ZmZlcnMoKSBpcyBnb25lOyB1c2UgaW52YWxpZGF0ZV9iZGV2KCkuCisKKy0tLQorW21hbmRhdG9yeV0KKworCWZzeW5jX2RldigpIGlzIGdvbmU7IHVzZSBmc3luY19iZGV2KCkuICBOT1RFOiBsdm0gYnJlYWthZ2UgaXMKK2RlbGliZXJhdGU7IGFzIHNvb24gYXMgc3RydWN0IGJsb2NrX2RldmljZSAqIGlzIHByb3BhZ2F0ZWQgaW4gYSByZWFzb25hYmxlCit3YXkgYnkgdGhhdCBjb2RlIGZpeGluZyB3aWxsIGJlY29tZSB0cml2aWFsOyB1bnRpbCB0aGVuIG5vdGhpbmcgY2FuIGJlCitkb25lLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlODVjMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTAsMCArMSwxOTQwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgVCBIIEUgIC9wcm9jICAgRiBJIEwgRSBTIFkgUyBUIEUgTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvcHJvYy9zeXMgICAgICAgICBUZXJyZWhvbiBCb3dkZW4gPHRlcnJlaG9uQHBhY2JlbGwubmV0PiAgICAgICAgT2N0b2JlciA3IDE5OTkKKyAgICAgICAgICAgICAgICAgIEJvZG8gQmF1ZXIgPGJiQHJpY29jaGV0Lm5ldD4KKworMi40LnggdXBkYXRlCSAgSm9yZ2UgTmVyaW4gPGNvbWFuZGFudGVAemFyYWxpbnV4LmNvbT4gICAgICBOb3ZlbWJlciAxNCAyMDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZlcnNpb24gMS4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCB2ZXJzaW9uIDIuMi4xMgorCQkJCQkgICAgICBLZXJuZWwgdmVyc2lvbiAyLjQuMC10ZXN0MTEtcHJlNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RhYmxlIG9mIENvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0tLQorCisgIDAgICAgIFByZWZhY2UKKyAgMC4xCUludHJvZHVjdGlvbi9DcmVkaXRzCisgIDAuMglMZWdhbCBTdHVmZgorCisgIDEJQ29sbGVjdGluZyBTeXN0ZW0gSW5mb3JtYXRpb24KKyAgMS4xCVByb2Nlc3MtU3BlY2lmaWMgU3ViZGlyZWN0b3JpZXMKKyAgMS4yCUtlcm5lbCBkYXRhCisgIDEuMwlJREUgZGV2aWNlcyBpbiAvcHJvYy9pZGUKKyAgMS40CU5ldHdvcmtpbmcgaW5mbyBpbiAvcHJvYy9uZXQKKyAgMS41CVNDU0kgaW5mbworICAxLjYJUGFyYWxsZWwgcG9ydCBpbmZvIGluIC9wcm9jL3BhcnBvcnQKKyAgMS43CVRUWSBpbmZvIGluIC9wcm9jL3R0eQorICAxLjgJTWlzY2VsbGFuZW91cyBrZXJuZWwgc3RhdGlzdGljcyBpbiAvcHJvYy9zdGF0CisKKyAgMglNb2RpZnlpbmcgU3lzdGVtIFBhcmFtZXRlcnMKKyAgMi4xCS9wcm9jL3N5cy9mcyAtIEZpbGUgc3lzdGVtIGRhdGEKKyAgMi4yCS9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyAtIE1pc2NlbGxhbmVvdXMgYmluYXJ5IGZvcm1hdHMKKyAgMi4zCS9wcm9jL3N5cy9rZXJuZWwgLSBnZW5lcmFsIGtlcm5lbCBwYXJhbWV0ZXJzCisgIDIuNAkvcHJvYy9zeXMvdm0gLSBUaGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtCisgIDIuNQkvcHJvYy9zeXMvZGV2IC0gRGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMKKyAgMi42CS9wcm9jL3N5cy9zdW5ycGMgLSBSZW1vdGUgcHJvY2VkdXJlIGNhbGxzCisgIDIuNwkvcHJvYy9zeXMvbmV0IC0gTmV0d29ya2luZyBzdHVmZgorICAyLjgJL3Byb2Mvc3lzL25ldC9pcHY0IC0gSVBWNCBzZXR0aW5ncworICAyLjkJQXBwbGV0YWxrCisgIDIuMTAJSVBYCisgIDIuMTEJL3Byb2Mvc3lzL2ZzL21xdWV1ZSAtIFBPU0lYIG1lc3NhZ2UgcXVldWVzIGZpbGVzeXN0ZW0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQcmVmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMC4xIEludHJvZHVjdGlvbi9DcmVkaXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkb2N1bWVudGF0aW9uIGlzICBwYXJ0IG9mIGEgc29vbiAob3IgIHNvIHdlIGhvcGUpIHRvIGJlICByZWxlYXNlZCBib29rIG9uCit0aGUgU3VTRSAgTGludXggZGlzdHJpYnV0aW9uLiBBcyAgdGhlcmUgaXMgIG5vIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gIGZvciB0aGUKKy9wcm9jIGZpbGUgc3lzdGVtIGFuZCB3ZSd2ZSB1c2VkICBtYW55IGZyZWVseSBhdmFpbGFibGUgc291cmNlcyB0byB3cml0ZSB0aGVzZQorY2hhcHRlcnMsIGl0ICBzZWVtcyBvbmx5IGZhaXIgIHRvIGdpdmUgdGhlIHdvcmsgIGJhY2sgdG8gdGhlICBMaW51eCBjb21tdW5pdHkuCitUaGlzIHdvcmsgaXMgIGJhc2VkIG9uIHRoZSAyLjIuKiAga2VybmVsIHZlcnNpb24gYW5kIHRoZSAgdXBjb21pbmcgMi40LiouIEknbQorYWZyYWlkIGl0J3Mgc3RpbGwgZmFyIGZyb20gY29tcGxldGUsIGJ1dCB3ZSAgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bC4gQXMgZmFyIGFzCit3ZSBrbm93LCBpdCBpcyB0aGUgZmlyc3QgJ2FsbC1pbi1vbmUnIGRvY3VtZW50IGFib3V0IHRoZSAvcHJvYyBmaWxlIHN5c3RlbS4gSXQKK2lzIGZvY3VzZWQgIG9uIHRoZSBJbnRlbCAgeDg2IGhhcmR3YXJlLCAgc28gaWYgeW91ICBhcmUgbG9va2luZyBmb3IgIFBQQywgQVJNLAorU1BBUkMsIEFYUCwgZXRjLiwgZmVhdHVyZXMsIHlvdSBwcm9iYWJseSAgd29uJ3QgZmluZCB3aGF0IHlvdSBhcmUgbG9va2luZyBmb3IuCitJdCBhbHNvIG9ubHkgY292ZXJzIElQdjQgbmV0d29ya2luZywgbm90IElQdjYgbm9yIG90aGVyIHByb3RvY29scyAtIHNvcnJ5LiBCdXQKK2FkZGl0aW9ucyBhbmQgcGF0Y2hlcyAgYXJlIHdlbGNvbWUgYW5kIHdpbGwgIGJlIGFkZGVkIHRvIHRoaXMgIGRvY3VtZW50IGlmIHlvdQorbWFpbCB0aGVtIHRvIEJvZG8uCisKK1dlJ2QgbGlrZSAgdG8gIHRoYW5rIEFsYW4gQ294LCBSaWsgdmFuIFJpZWwsIGFuZCBBbGV4ZXkgS3V6bmV0c292IGFuZCBhIGxvdCBvZgorb3RoZXIgcGVvcGxlIGZvciBoZWxwIGNvbXBpbGluZyB0aGlzIGRvY3VtZW50YXRpb24uIFdlJ2QgYWxzbyBsaWtlIHRvIGV4dGVuZCBhCitzcGVjaWFsIHRoYW5rICB5b3UgdG8gQW5kaSBLbGVlbiBmb3IgZG9jdW1lbnRhdGlvbiwgd2hpY2ggd2UgcmVsaWVkIG9uIGhlYXZpbHkKK3RvIGNyZWF0ZSAgdGhpcyAgZG9jdW1lbnQsICBhcyB3ZWxsIGFzIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGhlIHByb3ZpZGVkLgorVGhhbmtzIHRvICBldmVyeWJvZHkgIGVsc2UgIHdobyBjb250cmlidXRlZCBzb3VyY2Ugb3IgZG9jcyB0byB0aGUgTGludXgga2VybmVsCithbmQgaGVscGVkIGNyZWF0ZSBhIGdyZWF0IHBpZWNlIG9mIHNvZnR3YXJlLi4uIDopCisKK0lmIHlvdSAgaGF2ZSAgYW55IGNvbW1lbnRzLCBjb3JyZWN0aW9ucyBvciBhZGRpdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0bworY29udGFjdCBCb2RvICBCYXVlciAgYXQgIGJiQHJpY29jaGV0Lm5ldC4gIFdlJ2xsICBiZSBoYXBweSB0byBhZGQgdGhlbSB0byB0aGlzCitkb2N1bWVudC4KKworVGhlICAgbGF0ZXN0ICAgdmVyc2lvbiAgICBvZiAgIHRoaXMgICBkb2N1bWVudCAgIGlzICAgIGF2YWlsYWJsZSAgIG9ubGluZSAgIGF0CitodHRwOi8vc2thcm8ubmlnaHRjcmF3bGVyLmNvbS9+YmIvRG9jcy9Qcm9jIGFzIEhUTUwgdmVyc2lvbi4KKworSWYgIHRoZSBhYm92ZSAgZGlyZWN0aW9uIGRvZXMgIG5vdCB3b3JrcyAgZm9yIHlvdSwgIHlwdSBjb3VsZCAgdHJ5IHRoZSAga2VybmVsCittYWlsaW5nICBsaXN0ICBhdCAgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyAgYW5kL29yIHRyeSAgdG8gIHJlYWNoICBtZSAgYXQKK2NvbWFuZGFudGVAemFyYWxpbnV4LmNvbS4KKworMC4yIExlZ2FsIFN0dWZmCistLS0tLS0tLS0tLS0tLS0KKworV2UgZG9uJ3QgIGd1YXJhbnRlZSAgdGhlICBjb3JyZWN0bmVzcyAgb2YgdGhpcyBkb2N1bWVudCwgYW5kIGlmIHlvdSBjb21lIHRvIHVzCitjb21wbGFpbmluZyBhYm91dCAgaG93ICB5b3UgIHNjcmV3ZWQgIHVwICB5b3VyICBzeXN0ZW0gIGJlY2F1c2UgIG9mICBpbmNvcnJlY3QKK2RvY3VtZW50YXRpb24sIHdlIHdvbid0IGZlZWwgcmVzcG9uc2libGUuLi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDSEFQVEVSIDE6IENPTExFQ1RJTkcgU1lTVEVNIElORk9STUFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiBUaGlzIENoYXB0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBJbnZlc3RpZ2F0aW5nICB0aGUgIHByb3BlcnRpZXMgIG9mICB0aGUgIHBzZXVkbyAgZmlsZSAgc3lzdGVtICAvcHJvYyBhbmQgaXRzCisgIGFiaWxpdHkgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0aGUgcnVubmluZyBMaW51eCBzeXN0ZW0KKyogRXhhbWluaW5nIC9wcm9jJ3Mgc3RydWN0dXJlCisqIFVuY292ZXJpbmcgIHZhcmlvdXMgIGluZm9ybWF0aW9uICBhYm91dCB0aGUga2VybmVsIGFuZCB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcKKyAgb24gdGhlIHN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworVGhlIHByb2MgIGZpbGUgIHN5c3RlbSBhY3RzIGFzIGFuIGludGVyZmFjZSB0byBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgaW4gdGhlCitrZXJuZWwuIEl0ICBjYW4gIGJlICB1c2VkIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3lzdGVtIGFuZCB0byBjaGFuZ2UKK2NlcnRhaW4ga2VybmVsIHBhcmFtZXRlcnMgYXQgcnVudGltZSAoc3lzY3RsKS4KKworRmlyc3QsIHdlJ2xsICB0YWtlICBhICBsb29rICBhdCB0aGUgcmVhZC1vbmx5IHBhcnRzIG9mIC9wcm9jLiBJbiBDaGFwdGVyIDIsIHdlCitzaG93IHlvdSBob3cgeW91IGNhbiB1c2UgL3Byb2Mvc3lzIHRvIGNoYW5nZSBzZXR0aW5ncy4KKworMS4xIFByb2Nlc3MtU3BlY2lmaWMgU3ViZGlyZWN0b3JpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkaXJlY3RvcnkgIC9wcm9jICBjb250YWlucyAgKGFtb25nIG90aGVyIHRoaW5ncykgb25lIHN1YmRpcmVjdG9yeSBmb3IgZWFjaAorcHJvY2VzcyBydW5uaW5nIG9uIHRoZSBzeXN0ZW0sIHdoaWNoIGlzIG5hbWVkIGFmdGVyIHRoZSBwcm9jZXNzIElEIChQSUQpLgorCitUaGUgbGluayAgc2VsZiAgcG9pbnRzICB0byAgdGhlICBwcm9jZXNzIHJlYWRpbmcgdGhlIGZpbGUgc3lzdGVtLiBFYWNoIHByb2Nlc3MKK3N1YmRpcmVjdG9yeSBoYXMgdGhlIGVudHJpZXMgbGlzdGVkIGluIFRhYmxlIDEtMS4KKworCitUYWJsZSAxLTE6IFByb2Nlc3Mgc3BlY2lmaWMgZW50cmllcyBpbiAvcHJvYyAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIEZpbGUgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBjbWRsaW5lIENvbW1hbmQgbGluZSBhcmd1bWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgCisgY3B1CSBDdXJyZW50IGFuZCBsYXN0IGNwdSBpbiB3aWNoIGl0IHdhcyBleGVjdXRlZAkJKDIuNCkoc21wKQorIGN3ZAkgTGluayB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorIGVudmlyb24gVmFsdWVzIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyAgICAgIAorIGV4ZQkgTGluayB0byB0aGUgZXhlY3V0YWJsZSBvZiB0aGlzIHByb2Nlc3MKKyBmZCAgICAgIERpcmVjdG9yeSwgd2hpY2ggY29udGFpbnMgYWxsIGZpbGUgZGVzY3JpcHRvcnMgCisgbWFwcwkgTWVtb3J5IG1hcHMgdG8gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMJCSgyLjQpCisgbWVtICAgICBNZW1vcnkgaGVsZCBieSB0aGlzIHByb2Nlc3MgICAgICAgICAgICAgICAgICAgIAorIHJvb3QJIExpbmsgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvY2VzcworIHN0YXQgICAgUHJvY2VzcyBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBzdGF0bSAgIFByb2Nlc3MgbWVtb3J5IHN0YXR1cyBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgCisgc3RhdHVzICBQcm9jZXNzIHN0YXR1cyBpbiBodW1hbiByZWFkYWJsZSBmb3JtICAgICAgICAgIAorIHdjaGFuICAgSWYgQ09ORklHX0tBTExTWU1TIGlzIHNldCwgYSBwcmUtZGVjb2RlZCB3Y2hhbgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0ZvciBleGFtcGxlLCB0byBnZXQgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBhIHByb2Nlc3MsIGFsbCB5b3UgaGF2ZSB0byBkbyBpcworcmVhZCB0aGUgZmlsZSAvcHJvYy9QSUQvc3RhdHVzOgorCisgID5jYXQgL3Byb2Mvc2VsZi9zdGF0dXMgCisgIE5hbWU6ICAgY2F0IAorICBTdGF0ZTogIFIgKHJ1bm5pbmcpIAorICBQaWQ6ICAgIDU0NTIgCisgIFBQaWQ6ICAgNzQzIAorICBUcmFjZXJQaWQ6ICAgICAgMAkJCQkJCSgyLjQpCisgIFVpZDogICAgNTAxICAgICA1MDEgICAgIDUwMSAgICAgNTAxIAorICBHaWQ6ICAgIDEwMCAgICAgMTAwICAgICAxMDAgICAgIDEwMCAKKyAgR3JvdXBzOiAxMDAgMTQgMTYgCisgIFZtU2l6ZTogICAgIDExMTIga0IgCisgIFZtTGNrOiAgICAgICAgIDAga0IgCisgIFZtUlNTOiAgICAgICAzNDgga0IgCisgIFZtRGF0YTogICAgICAgMjQga0IgCisgIFZtU3RrOiAgICAgICAgMTIga0IgCisgIFZtRXhlOiAgICAgICAgIDgga0IgCisgIFZtTGliOiAgICAgIDEwNDQga0IgCisgIFNpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMCAKKyAgU2lnQmxrOiAwMDAwMDAwMDAwMDAwMDAwIAorICBTaWdJZ246IDAwMDAwMDAwMDAwMDAwMDAgCisgIFNpZ0NndDogMDAwMDAwMDAwMDAwMDAwMCAKKyAgQ2FwSW5oOiAwMDAwMDAwMGZmZmZmZWZmIAorICBDYXBQcm06IDAwMDAwMDAwMDAwMDAwMDAgCisgIENhcEVmZjogMDAwMDAwMDAwMDAwMDAwMCAKKworCitUaGlzIHNob3dzIHlvdSBuZWFybHkgdGhlIHNhbWUgaW5mb3JtYXRpb24geW91IHdvdWxkIGdldCBpZiB5b3Ugdmlld2VkIGl0IHdpdGgKK3RoZSBwcyAgY29tbWFuZC4gIEluICBmYWN0LCAgcHMgIHVzZXMgIHRoZSAgcHJvYyAgZmlsZSAgc3lzdGVtICB0byAgb2J0YWluIGl0cworaW5mb3JtYXRpb24uIFRoZSAgc3RhdG0gIGZpbGUgIGNvbnRhaW5zICBtb3JlICBkZXRhaWxlZCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitwcm9jZXNzIG1lbW9yeSB1c2FnZS4gSXRzIHNldmVuIGZpZWxkcyBhcmUgZXhwbGFpbmVkIGluIFRhYmxlIDEtMi4KKworCitUYWJsZSAxLTI6IENvbnRlbnRzIG9mIHRoZSBzdGF0bSBmaWxlcyAoYXMgb2YgMi42LjgtcmMzKQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgRmllbGQgICAgQ29udGVudAorIHNpemUgICAgIHRvdGFsIHByb2dyYW0gc2l6ZSAocGFnZXMpCQkoc2FtZSBhcyBWbVNpemUgaW4gc3RhdHVzKQorIHJlc2lkZW50IHNpemUgb2YgbWVtb3J5IHBvcnRpb25zIChwYWdlcykJKHNhbWUgYXMgVm1SU1MgaW4gc3RhdHVzKQorIHNoYXJlZCAgIG51bWJlciBvZiBwYWdlcyB0aGF0IGFyZSBzaGFyZWQJKGkuZS4gYmFja2VkIGJ5IGEgZmlsZSkKKyB0cnMgICAgICBudW1iZXIgb2YgcGFnZXMgdGhhdCBhcmUgJ2NvZGUnCShub3QgaW5jbHVkaW5nIGxpYnM7IGJyb2tlbiwKKwkJCQkJCQlpbmNsdWRlcyBkYXRhIHNlZ21lbnQpCisgbHJzICAgICAgbnVtYmVyIG9mIHBhZ2VzIG9mIGxpYnJhcnkJCShhbHdheXMgMCBvbiAyLjYpCisgZHJzICAgICAgbnVtYmVyIG9mIHBhZ2VzIG9mIGRhdGEvc3RhY2sJCShpbmNsdWRpbmcgbGliczsgYnJva2VuLAorCQkJCQkJCWluY2x1ZGVzIGxpYnJhcnkgdGV4dCkKKyBkdCAgICAgICBudW1iZXIgb2YgZGlydHkgcGFnZXMJCQkoYWx3YXlzIDAgb24gMi42KQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKKzEuMiBLZXJuZWwgZGF0YQorLS0tLS0tLS0tLS0tLS0tCisKK1NpbWlsYXIgdG8gIHRoZSAgcHJvY2VzcyBlbnRyaWVzLCB0aGUga2VybmVsIGRhdGEgZmlsZXMgZ2l2ZSBpbmZvcm1hdGlvbiBhYm91dAordGhlIHJ1bm5pbmcga2VybmVsLiBUaGUgZmlsZXMgdXNlZCB0byBvYnRhaW4gdGhpcyBpbmZvcm1hdGlvbiBhcmUgY29udGFpbmVkIGluCisvcHJvYyBhbmQgIGFyZSAgbGlzdGVkICBpbiBUYWJsZSAxLTMuIE5vdCBhbGwgb2YgdGhlc2Ugd2lsbCBiZSBwcmVzZW50IGluIHlvdXIKK3N5c3RlbS4gSXQgIGRlcGVuZHMgIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgdGhlIGxvYWRlZCBtb2R1bGVzLCB3aGljaAorZmlsZXMgYXJlIHRoZXJlLCBhbmQgd2hpY2ggYXJlIG1pc3NpbmcuCisKK1RhYmxlIDEtMzogS2VybmVsIGluZm8gaW4gL3Byb2MgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBGaWxlICAgICAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGFwbSAgICAgICAgIEFkdmFuY2VkIHBvd2VyIG1hbmFnZW1lbnQgaW5mbyAgICAgICAgICAgICAgICAgICAgCisgYnVkZHlpbmZvICAgS2VybmVsIG1lbW9yeSBhbGxvY2F0b3IgaW5mb3JtYXRpb24gKHNlZSB0ZXh0KQkoMi41KQorIGJ1cyAgICAgICAgIERpcmVjdG9yeSBjb250YWluaW5nIGJ1cyBzcGVjaWZpYyBpbmZvcm1hdGlvbiAgICAgCisgY21kbGluZSAgICAgS2VybmVsIGNvbW1hbmQgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBjcHVpbmZvICAgICBJbmZvIGFib3V0IHRoZSBDUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGRldmljZXMgICAgIEF2YWlsYWJsZSBkZXZpY2VzIChibG9jayBhbmQgY2hhcmFjdGVyKSAgICAgICAgICAgCisgZG1hICAgICAgICAgVXNlZCBETVMgY2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBmaWxlc3lzdGVtcyBTdXBwb3J0ZWQgZmlsZXN5c3RlbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGRyaXZlcgkgICAgIFZhcmlvdXMgZHJpdmVycyBncm91cGVkIGhlcmUsIGN1cnJlbnRseSBydGMgKDIuNCkKKyBleGVjZG9tYWlucyBFeGVjZG9tYWlucywgcmVsYXRlZCB0byBzZWN1cml0eQkJCSgyLjQpCisgZmIJICAgICBGcmFtZSBCdWZmZXIgZGV2aWNlcwkJCQkoMi40KQorIGZzCSAgICAgRmlsZSBzeXN0ZW0gcGFyYW1ldGVycywgY3VycmVudGx5IG5mcy9leHBvcnRzCSgyLjQpCisgaWRlICAgICAgICAgRGlyZWN0b3J5IGNvbnRhaW5pbmcgaW5mbyBhYm91dCB0aGUgSURFIHN1YnN5c3RlbSAKKyBpbnRlcnJ1cHRzICBJbnRlcnJ1cHQgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlvbWVtCSAgICAgTWVtb3J5IG1hcAkJCQkJCSgyLjQpCisgaW9wb3J0cyAgICAgSS9PIHBvcnQgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBpcnEJICAgICBNYXNrcyBmb3IgaXJxIHRvIGNwdSBhZmZpbml0eQkJCSgyLjQpKHNtcD8pCisgaXNhcG5wCSAgICAgSVNBIFBuUCAoUGx1ZyZQbGF5KSBJbmZvCQkJCSgyLjQpCisga2NvcmUgICAgICAgS2VybmVsIGNvcmUgaW1hZ2UgKGNhbiBiZSBFTEYgb3IgQS5PVVQoZGVwcmVjYXRlZCBpbiAyLjQpKSAgIAorIGttc2cgICAgICAgIEtlcm5lbCBtZXNzYWdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisga3N5bXMgICAgICAgS2VybmVsIHN5bWJvbCB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBsb2FkYXZnICAgICBMb2FkIGF2ZXJhZ2Ugb2YgbGFzdCAxLCA1ICYgMTUgbWludXRlcyAgICAgICAgICAgICAgICAKKyBsb2NrcyAgICAgICBLZXJuZWwgbG9ja3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIG1lbWluZm8gICAgIE1lbW9yeSBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgbWlzYyAgICAgICAgTWlzY2VsbGFuZW91cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBtb2R1bGVzICAgICBMaXN0IG9mIGxvYWRlZCBtb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIG1vdW50cyAgICAgIE1vdW50ZWQgZmlsZXN5c3RlbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgbmV0ICAgICAgICAgTmV0d29ya2luZyBpbmZvIChzZWUgdGV4dCkgICAgICAgICAgICAgICAgICAgICAgICAKKyBwYXJ0aXRpb25zICBUYWJsZSBvZiBwYXJ0aXRpb25zIGtub3duIHRvIHRoZSBzeXN0ZW0gICAgICAgICAgIAorIHBjaQkgICAgIERlcHJlY2lhdGVkIGluZm8gb2YgUENJIGJ1cyAobmV3IHdheSAtPiAvcHJvYy9idXMvcGNpLywgCisgICAgICAgICAgICAgZGVjb3VwbGVkIGJ5IGxzcGNpCQkJCQkoMi40KQorIHJ0YyAgICAgICAgIFJlYWwgdGltZSBjbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgc2NzaSAgICAgICAgU0NTSSBpbmZvIChzZWUgdGV4dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBzbGFiaW5mbyAgICBTbGFiIHBvb2wgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHN0YXQgICAgICAgIE92ZXJhbGwgc3RhdGlzdGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgc3dhcHMgICAgICAgU3dhcCBzcGFjZSB1dGlsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBzeXMgICAgICAgICBTZWUgY2hhcHRlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHN5c3ZpcGMgICAgIEluZm8gb2YgU3lzVklQQyBSZXNvdXJjZXMgKG1zZywgc2VtLCBzaG0pCQkoMi40KQorIHR0eQkgICAgIEluZm8gb2YgdHR5IGRyaXZlcnMKKyB1cHRpbWUgICAgICBTeXN0ZW0gdXB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHZlcnNpb24gICAgIEtlcm5lbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgdmlkZW8JICAgICBidHR2IGluZm8gb2YgdmlkZW8gcmVzb3VyY2VzCQkJKDIuNCkKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitZb3UgY2FuLCAgZm9yICBleGFtcGxlLCAgY2hlY2sgIHdoaWNoIGludGVycnVwdHMgYXJlIGN1cnJlbnRseSBpbiB1c2UgYW5kIHdoYXQKK3RoZXkgYXJlIHVzZWQgZm9yIGJ5IGxvb2tpbmcgaW4gdGhlIGZpbGUgL3Byb2MvaW50ZXJydXB0czoKKworICA+IGNhdCAvcHJvYy9pbnRlcnJ1cHRzIAorICAgICAgICAgICAgIENQVTAgICAgICAgIAorICAgIDA6ICAgIDg3Mjg4MTAgICAgICAgICAgWFQtUElDICB0aW1lciAKKyAgICAxOiAgICAgICAgODk1ICAgICAgICAgIFhULVBJQyAga2V5Ym9hcmQgCisgICAgMjogICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIGNhc2NhZGUgCisgICAgMzogICAgIDUzMTY5NSAgICAgICAgICBYVC1QSUMgIGFoYTE1MnggCisgICAgNDogICAgMjAxNDEzMyAgICAgICAgICBYVC1QSUMgIHNlcmlhbCAKKyAgICA1OiAgICAgIDQ0NDAxICAgICAgICAgIFhULVBJQyAgcGNuZXRfY3MgCisgICAgODogICAgICAgICAgMiAgICAgICAgICBYVC1QSUMgIHJ0YyAKKyAgIDExOiAgICAgICAgICA4ICAgICAgICAgIFhULVBJQyAgaTgyMzY1IAorICAgMTI6ICAgICAxODI5MTggICAgICAgICAgWFQtUElDICBQUy8yIE1vdXNlIAorICAgMTM6ICAgICAgICAgIDEgICAgICAgICAgWFQtUElDICBmcHUgCisgICAxNDogICAgMTIzMjI2NSAgICAgICAgICBYVC1QSUMgIGlkZTAgCisgICAxNTogICAgICAgICAgNyAgICAgICAgICBYVC1QSUMgIGlkZTEgCisgIE5NSTogICAgICAgICAgMCAKKworSW4gMi40LiogYSBjb3VwbGUgb2YgbGluZXMgd2hlcmUgYWRkZWQgdG8gdGhpcyBmaWxlIExPQyAmIEVSUiAodGhpcyB0aW1lIGlzIHRoZQorb3V0cHV0IG9mIGEgU01QIG1hY2hpbmUpOgorCisgID4gY2F0IC9wcm9jL2ludGVycnVwdHMgCisKKyAgICAgICAgICAgICBDUFUwICAgICAgIENQVTEgICAgICAgCisgICAgMDogICAgMTI0MzQ5OCAgICAxMjE0NTQ4ICAgIElPLUFQSUMtZWRnZSAgdGltZXIKKyAgICAxOiAgICAgICA4OTQ5ICAgICAgIDg5NTggICAgSU8tQVBJQy1lZGdlICBrZXlib2FyZAorICAgIDI6ICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIGNhc2NhZGUKKyAgICA1OiAgICAgIDExMjg2ICAgICAgMTAxNjEgICAgSU8tQVBJQy1lZGdlICBzb3VuZGJsYXN0ZXIKKyAgICA4OiAgICAgICAgICAxICAgICAgICAgIDAgICAgSU8tQVBJQy1lZGdlICBydGMKKyAgICA5OiAgICAgIDI3NDIyICAgICAgMjc0MDcgICAgSU8tQVBJQy1lZGdlICAzYzUwMworICAgMTI6ICAgICAxMTM2NDUgICAgIDExMzg3MyAgICBJTy1BUElDLWVkZ2UgIFBTLzIgTW91c2UKKyAgIDEzOiAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgWFQtUElDICBmcHUKKyAgIDE0OiAgICAgIDIyNDkxICAgICAgMjQwMTIgICAgSU8tQVBJQy1lZGdlICBpZGUwCisgICAxNTogICAgICAgMjE4MyAgICAgICAyNDE1ICAgIElPLUFQSUMtZWRnZSAgaWRlMQorICAgMTc6ICAgICAgMzA1NjQgICAgICAzMDQxNCAgIElPLUFQSUMtbGV2ZWwgIGV0aDAKKyAgIDE4OiAgICAgICAgMTc3ICAgICAgICAxNjQgICBJTy1BUElDLWxldmVsICBidHR2CisgIE5NSTogICAgMjQ1Nzk2MSAgICAyNDU3OTU5IAorICBMT0M6ICAgIDI0NTc4ODIgICAgMjQ1Nzg4MSAKKyAgRVJSOiAgICAgICAyMTU1CisKK05NSSBpcyBpbmNyZW1lbnRlZCBpbiB0aGlzIGNhc2UgYmVjYXVzZSBldmVyeSB0aW1lciBpbnRlcnJ1cHQgZ2VuZXJhdGVzIGEgTk1JCisoTm9uIE1hc2thYmxlIEludGVycnVwdCkgd2hpY2ggaXMgdXNlZCBieSB0aGUgTk1JIFdhdGNoZG9nIHRvIGRldGVjdCBsb2NrdXBzLgorCitMT0MgaXMgdGhlIGxvY2FsIGludGVycnVwdCBjb3VudGVyIG9mIHRoZSBpbnRlcm5hbCBBUElDIG9mIGV2ZXJ5IENQVS4KKworRVJSIGlzIGluY3JlbWVudGVkIGluIHRoZSBjYXNlIG9mIGVycm9ycyBpbiB0aGUgSU8tQVBJQyBidXMgKHRoZSBidXMgdGhhdAorY29ubmVjdHMgdGhlIENQVXMgaW4gYSBTTVAgc3lzdGVtLiBUaGlzIG1lYW5zIHRoYXQgYW4gZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQsCit0aGUgSU8tQVBJQyBhdXRvbWF0aWNhbGx5IHJldHJ5IHRoZSB0cmFuc21pc3Npb24sIHNvIGl0IHNob3VsZCBub3QgYmUgYSBiaWcKK3Byb2JsZW0sIGJ1dCB5b3Ugc2hvdWxkIHJlYWQgdGhlIFNNUC1GQVEuCisKK0luIHRoaXMgY29udGV4dCBpdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBub3RlIHRoZSBuZXcgaXJxIGRpcmVjdG9yeSBpbiAyLjQuCitJdCBjb3VsZCBiZSB1c2VkIHRvIHNldCBJUlEgdG8gQ1BVIGFmZmluaXR5LCB0aGlzIG1lYW5zIHRoYXQgeW91IGNhbiAiaG9vayIgYW4KK0lSUSB0byBvbmx5IG9uZSBDUFUsIG9yIHRvIGV4Y2x1ZGUgYSBDUFUgb2YgaGFuZGxpbmcgSVJRcy4gVGhlIGNvbnRlbnRzIG9mIHRoZQoraXJxIHN1YmRpciBpcyBvbmUgc3ViZGlyIGZvciBlYWNoIElSUSwgYW5kIG9uZSBmaWxlOyBwcm9mX2NwdV9tYXNrCisKK0ZvciBleGFtcGxlIAorICA+IGxzIC9wcm9jL2lycS8KKyAgMCAgMTAgIDEyICAxNCAgMTYgIDE4ICAyICA0ICA2ICA4ICBwcm9mX2NwdV9tYXNrCisgIDEgIDExICAxMyAgMTUgIDE3ICAxOSAgMyAgNSAgNyAgOQorICA+IGxzIC9wcm9jL2lycS8wLworICBzbXBfYWZmaW5pdHkKKworVGhlIGNvbnRlbnRzIG9mIHRoZSBwcm9mX2NwdV9tYXNrIGZpbGUgYW5kIGVhY2ggc21wX2FmZmluaXR5IGZpbGUgZm9yIGVhY2ggSVJRCitpcyB0aGUgc2FtZSBieSBkZWZhdWx0OgorCisgID4gY2F0IC9wcm9jL2lycS8wL3NtcF9hZmZpbml0eSAKKyAgZmZmZmZmZmYKKworSXQncyBhIGJpdG1hc2ssIGluIHdpY2ggeW91IGNhbiBzcGVjaWZ5IHdpY2ggQ1BVcyBjYW4gaGFuZGxlIHRoZSBJUlEsIHlvdSBjYW4KK3NldCBpdCBieSBkb2luZzoKKworICA+IGVjaG8gMSA+IC9wcm9jL2lycS9wcm9mX2NwdV9tYXNrCisKK1RoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBmaXJzdCBDUFUgd2lsbCBoYW5kbGUgdGhlIElSUSwgYnV0IHlvdSBjYW4gYWxzbyBlY2hvIDUKK3dpY2ggbWVhbnMgdGhhdCBvbmx5IHRoZSBmaXJzdCBhbmQgZm91cnRoIENQVSBjYW4gaGFuZGxlIHRoZSBJUlEuCisKK1RoZSB3YXkgSVJRcyBhcmUgcm91dGVkIGlzIGhhbmRsZWQgYnkgdGhlIElPLUFQSUMsIGFuZCBpdCdzIFJvdW5kIFJvYmluCitiZXR3ZWVuIGFsbCB0aGUgQ1BVcyB3aGljaCBhcmUgYWxsb3dlZCB0byBoYW5kbGUgaXQuIEFzIHVzdWFsIHRoZSBrZXJuZWwgaGFzCittb3JlIGluZm8gdGhhbiB5b3UgYW5kIGRvZXMgYSBiZXR0ZXIgam9iIHRoYW4geW91LCBzbyB0aGUgZGVmYXVsdHMgYXJlIHRoZQorYmVzdCBjaG9pY2UgZm9yIGFsbW9zdCBldmVyeW9uZS4KKworVGhlcmUgYXJlICB0aHJlZSAgbW9yZSAgaW1wb3J0YW50IHN1YmRpcmVjdG9yaWVzIGluIC9wcm9jOiBuZXQsIHNjc2ksIGFuZCBzeXMuCitUaGUgZ2VuZXJhbCAgcnVsZSAgaXMgIHRoYXQgIHRoZSAgY29udGVudHMsICBvciAgZXZlbiAgdGhlICBleGlzdGVuY2Ugb2YgdGhlc2UKK2RpcmVjdG9yaWVzLCBkZXBlbmQgIG9uIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIElmIFNDU0kgaXMgbm90IGVuYWJsZWQsIHRoZQorZGlyZWN0b3J5IHNjc2kgIG1heSAgbm90ICBleGlzdC4gVGhlIHNhbWUgaXMgdHJ1ZSB3aXRoIHRoZSBuZXQsIHdoaWNoIGlzIHRoZXJlCitvbmx5IHdoZW4gbmV0d29ya2luZyBzdXBwb3J0IGlzIHByZXNlbnQgaW4gdGhlIHJ1bm5pbmcga2VybmVsLgorCitUaGUgc2xhYmluZm8gIGZpbGUgIGdpdmVzICBpbmZvcm1hdGlvbiAgYWJvdXQgIG1lbW9yeSB1c2FnZSBhdCB0aGUgc2xhYiBsZXZlbC4KK0xpbnV4IHVzZXMgIHNsYWIgIHBvb2xzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhYm92ZSBwYWdlIGxldmVsIGluIHZlcnNpb24gMi4yLgorQ29tbW9ubHkgdXNlZCAgb2JqZWN0cyAgaGF2ZSAgdGhlaXIgIG93biAgc2xhYiAgcG9vbCAoc3VjaCBhcyBuZXR3b3JrIGJ1ZmZlcnMsCitkaXJlY3RvcnkgY2FjaGUsIGFuZCBzbyBvbikuCisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCis+IGNhdCAvcHJvYy9idWRkeWluZm8KKworTm9kZSAwLCB6b25lICAgICAgRE1BICAgICAgMCAgICAgIDQgICAgICA1ICAgICAgNCAgICAgIDQgICAgICAzIC4uLgorTm9kZSAwLCB6b25lICAgTm9ybWFsICAgICAgMSAgICAgIDAgICAgICAwICAgICAgMSAgICAxMDEgICAgICA4IC4uLgorTm9kZSAwLCB6b25lICBIaWdoTWVtICAgICAgMiAgICAgIDAgICAgICAwICAgICAgMSAgICAgIDEgICAgICAwIC4uLgorCitNZW1vcnkgZnJhZ21lbnRhdGlvbiBpcyBhIHByb2JsZW0gdW5kZXIgc29tZSB3b3JrbG9hZHMsIGFuZCBidWRkeWluZm8gaXMgYSAKK3VzZWZ1bCB0b29sIGZvciBoZWxwaW5nIGRpYWdub3NlIHRoZXNlIHByb2JsZW1zLiAgQnVkZHlpbmZvIHdpbGwgZ2l2ZSB5b3UgYSAKK2NsdWUgYXMgdG8gaG93IGJpZyBhbiBhcmVhIHlvdSBjYW4gc2FmZWx5IGFsbG9jYXRlLCBvciB3aHkgYSBwcmV2aW91cworYWxsb2NhdGlvbiBmYWlsZWQuCisKK0VhY2ggY29sdW1uIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBhIGNlcnRhaW4gb3JkZXIgd2hpY2ggYXJlIAorYXZhaWxhYmxlLiAgSW4gdGhpcyBjYXNlLCB0aGVyZSBhcmUgMCBjaHVua3Mgb2YgMl4wKlBBR0VfU0laRSBhdmFpbGFibGUgaW4gCitaT05FX0RNQSwgNCBjaHVua3Mgb2YgMl4xKlBBR0VfU0laRSBpbiBaT05FX0RNQSwgMTAxIGNodW5rcyBvZiAyXjQqUEFHRV9TSVpFIAorYXZhaWxhYmxlIGluIFpPTkVfTk9STUFMLCBldGMuLi4gCisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCittZW1pbmZvOgorCitQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBkaXN0cmlidXRpb24gYW5kIHV0aWxpemF0aW9uIG9mIG1lbW9yeS4gIFRoaXMKK3ZhcmllcyBieSBhcmNoaXRlY3R1cmUgYW5kIGNvbXBpbGUgb3B0aW9ucy4gIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBhCisxNkdCIFBJSUksIHdoaWNoIGhhcyBoaWdobWVtIGVuYWJsZWQuICBZb3UgbWF5IG5vdCBoYXZlIGFsbCBvZiB0aGVzZSBmaWVsZHMuCisKKz4gY2F0IC9wcm9jL21lbWluZm8KKworCitNZW1Ub3RhbDogICAgIDE2MzQ0OTcyIGtCCitNZW1GcmVlOiAgICAgIDEzNjM0MDY0IGtCCitCdWZmZXJzOiAgICAgICAgICAzNjU2IGtCCitDYWNoZWQ6ICAgICAgICAxMTk1NzA4IGtCCitTd2FwQ2FjaGVkOiAgICAgICAgICAwIGtCCitBY3RpdmU6ICAgICAgICAgODkxNjM2IGtCCitJbmFjdGl2ZTogICAgICAxMDc3MjI0IGtCCitIaWdoVG90YWw6ICAgIDE1NTk3NTI4IGtCCitIaWdoRnJlZTogICAgIDEzNjI5NjMyIGtCCitMb3dUb3RhbDogICAgICAgNzQ3NDQ0IGtCCitMb3dGcmVlOiAgICAgICAgICA0NDMyIGtCCitTd2FwVG90YWw6ICAgICAgICAgICAwIGtCCitTd2FwRnJlZTogICAgICAgICAgICAwIGtCCitEaXJ0eTogICAgICAgICAgICAgOTY4IGtCCitXcml0ZWJhY2s6ICAgICAgICAgICAwIGtCCitNYXBwZWQ6ICAgICAgICAgMjgwMzcyIGtCCitTbGFiOiAgICAgICAgICAgNjg0MDY4IGtCCitDb21taXRMaW1pdDogICA3NjY5Nzk2IGtCCitDb21taXR0ZWRfQVM6ICAgMTAwMDU2IGtCCitQYWdlVGFibGVzOiAgICAgIDI0NDQ4IGtCCitWbWFsbG9jVG90YWw6ICAgMTEyMjE2IGtCCitWbWFsbG9jVXNlZDogICAgICAgNDI4IGtCCitWbWFsbG9jQ2h1bms6ICAgMTExMDg4IGtCCisKKyAgICBNZW1Ub3RhbDogVG90YWwgdXNhYmxlIHJhbSAoaS5lLiBwaHlzaWNhbCByYW0gbWludXMgYSBmZXcgcmVzZXJ2ZWQKKyAgICAgICAgICAgICAgYml0cyBhbmQgdGhlIGtlcm5lbCBiaW5hcnkgY29kZSkKKyAgICAgTWVtRnJlZTogVGhlIHN1bSBvZiBMb3dGcmVlK0hpZ2hGcmVlCisgICAgIEJ1ZmZlcnM6IFJlbGF0aXZlbHkgdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHJhdyBkaXNrIGJsb2NrcworICAgICAgICAgICAgICBzaG91bGRuJ3QgZ2V0IHRyZW1lbmRvdXNseSBsYXJnZSAoMjBNQiBvciBzbykKKyAgICAgIENhY2hlZDogaW4tbWVtb3J5IGNhY2hlIGZvciBmaWxlcyByZWFkIGZyb20gdGhlIGRpc2sgKHRoZQorICAgICAgICAgICAgICBwYWdlY2FjaGUpLiAgRG9lc24ndCBpbmNsdWRlIFN3YXBDYWNoZWQKKyAgU3dhcENhY2hlZDogTWVtb3J5IHRoYXQgb25jZSB3YXMgc3dhcHBlZCBvdXQsIGlzIHN3YXBwZWQgYmFjayBpbiBidXQKKyAgICAgICAgICAgICAgc3RpbGwgYWxzbyBpcyBpbiB0aGUgc3dhcGZpbGUgKGlmIG1lbW9yeSBpcyBuZWVkZWQgaXQKKyAgICAgICAgICAgICAgZG9lc24ndCBuZWVkIHRvIGJlIHN3YXBwZWQgb3V0IEFHQUlOIGJlY2F1c2UgaXQgaXMgYWxyZWFkeQorICAgICAgICAgICAgICBpbiB0aGUgc3dhcGZpbGUuIFRoaXMgc2F2ZXMgSS9PKQorICAgICAgQWN0aXZlOiBNZW1vcnkgdGhhdCBoYXMgYmVlbiB1c2VkIG1vcmUgcmVjZW50bHkgYW5kIHVzdWFsbHkgbm90CisgICAgICAgICAgICAgIHJlY2xhaW1lZCB1bmxlc3MgYWJzb2x1dGVseSBuZWNlc3NhcnkuCisgICAgSW5hY3RpdmU6IE1lbW9yeSB3aGljaCBoYXMgYmVlbiBsZXNzIHJlY2VudGx5IHVzZWQuICBJdCBpcyBtb3JlCisgICAgICAgICAgICAgIGVsaWdpYmxlIHRvIGJlIHJlY2xhaW1lZCBmb3Igb3RoZXIgcHVycG9zZXMKKyAgIEhpZ2hUb3RhbDoKKyAgICBIaWdoRnJlZTogSGlnaG1lbSBpcyBhbGwgbWVtb3J5IGFib3ZlIH44NjBNQiBvZiBwaHlzaWNhbCBtZW1vcnkKKyAgICAgICAgICAgICAgSGlnaG1lbSBhcmVhcyBhcmUgZm9yIHVzZSBieSB1c2Vyc3BhY2UgcHJvZ3JhbXMsIG9yCisgICAgICAgICAgICAgIGZvciB0aGUgcGFnZWNhY2hlLiAgVGhlIGtlcm5lbCBtdXN0IHVzZSB0cmlja3MgdG8gYWNjZXNzCisgICAgICAgICAgICAgIHRoaXMgbWVtb3J5LCBtYWtpbmcgaXQgc2xvd2VyIHRvIGFjY2VzcyB0aGFuIGxvd21lbS4KKyAgICBMb3dUb3RhbDoKKyAgICAgTG93RnJlZTogTG93bWVtIGlzIG1lbW9yeSB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZXZlcnl0aGluZyB0aGF0CisgICAgICAgICAgICAgIGhpZ2htZW0gY2FuIGJlIHVzZWQgZm9yLCBidXQgaXQgaXMgYWxzbyBhdmFpbGJsZSBmb3IgdGhlCisgICAgICAgICAgICAgIGtlcm5lbCdzIHVzZSBmb3IgaXRzIG93biBkYXRhIHN0cnVjdHVyZXMuICBBbW9uZyBtYW55CisgICAgICAgICAgICAgIG90aGVyIHRoaW5ncywgaXQgaXMgd2hlcmUgZXZlcnl0aGluZyBmcm9tIHRoZSBTbGFiIGlzCisgICAgICAgICAgICAgIGFsbG9jYXRlZC4gIEJhZCB0aGluZ3MgaGFwcGVuIHdoZW4geW91J3JlIG91dCBvZiBsb3dtZW0uCisgICBTd2FwVG90YWw6IHRvdGFsIGFtb3VudCBvZiBzd2FwIHNwYWNlIGF2YWlsYWJsZQorICAgIFN3YXBGcmVlOiBNZW1vcnkgd2hpY2ggaGFzIGJlZW4gZXZpY3RlZCBmcm9tIFJBTSwgYW5kIGlzIHRlbXBvcmFyaWx5CisgICAgICAgICAgICAgIG9uIHRoZSBkaXNrCisgICAgICAgRGlydHk6IE1lbW9yeSB3aGljaCBpcyB3YWl0aW5nIHRvIGdldCB3cml0dGVuIGJhY2sgdG8gdGhlIGRpc2sKKyAgIFdyaXRlYmFjazogTWVtb3J5IHdoaWNoIGlzIGFjdGl2ZWx5IGJlaW5nIHdyaXR0ZW4gYmFjayB0byB0aGUgZGlzaworICAgICAgTWFwcGVkOiBmaWxlcyB3aGljaCBoYXZlIGJlZW4gbW1hcGVkLCBzdWNoIGFzIGxpYnJhcmllcworICAgICAgICAgICAgICBTbGFiOiBpbi1rZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGNhY2hlCisgQ29tbWl0TGltaXQ6IEJhc2VkIG9uIHRoZSBvdmVyY29tbWl0IHJhdGlvICgndm0ub3ZlcmNvbW1pdF9yYXRpbycpLAorICAgICAgICAgICAgICB0aGlzIGlzIHRoZSB0b3RhbCBhbW91bnQgb2YgIG1lbW9yeSBjdXJyZW50bHkgYXZhaWxhYmxlIHRvCisgICAgICAgICAgICAgIGJlIGFsbG9jYXRlZCBvbiB0aGUgc3lzdGVtLiBUaGlzIGxpbWl0IGlzIG9ubHkgYWRoZXJlZCB0bworICAgICAgICAgICAgICBpZiBzdHJpY3Qgb3ZlcmNvbW1pdCBhY2NvdW50aW5nIGlzIGVuYWJsZWQgKG1vZGUgMiBpbgorICAgICAgICAgICAgICAndm0ub3ZlcmNvbW1pdF9tZW1vcnknKS4KKyAgICAgICAgICAgICAgVGhlIENvbW1pdExpbWl0IGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm11bGE6CisgICAgICAgICAgICAgIENvbW1pdExpbWl0ID0gKCd2bS5vdmVyY29tbWl0X3JhdGlvJyAqIFBoeXNpY2FsIFJBTSkgKyBTd2FwCisgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBvbiBhIHN5c3RlbSB3aXRoIDFHIG9mIHBoeXNpY2FsIFJBTSBhbmQgN0cKKyAgICAgICAgICAgICAgb2Ygc3dhcCB3aXRoIGEgYHZtLm92ZXJjb21taXRfcmF0aW9gIG9mIDMwIGl0IHdvdWxkCisgICAgICAgICAgICAgIHlpZWxkIGEgQ29tbWl0TGltaXQgb2YgNy4zRy4KKyAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBtZW1vcnkgb3ZlcmNvbW1pdCBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgIGluIHZtL292ZXJjb21taXQtYWNjb3VudGluZy4KK0NvbW1pdHRlZF9BUzogVGhlIGFtb3VudCBvZiBtZW1vcnkgcHJlc2VudGx5IGFsbG9jYXRlZCBvbiB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICBUaGUgY29tbWl0dGVkIG1lbW9yeSBpcyBhIHN1bSBvZiBhbGwgb2YgdGhlIG1lbW9yeSB3aGljaAorICAgICAgICAgICAgICBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgcHJvY2Vzc2VzLCBldmVuIGlmIGl0IGhhcyBub3QgYmVlbgorICAgICAgICAgICAgICAidXNlZCIgYnkgdGhlbSBhcyBvZiB5ZXQuIEEgcHJvY2VzcyB3aGljaCBtYWxsb2MoKSdzIDFHCisgICAgICAgICAgICAgIG9mIG1lbW9yeSwgYnV0IG9ubHkgdG91Y2hlcyAzMDBNIG9mIGl0IHdpbGwgb25seSBzaG93IHVwCisgICAgICAgICAgICAgIGFzIHVzaW5nIDMwME0gb2YgbWVtb3J5IGV2ZW4gaWYgaXQgaGFzIHRoZSBhZGRyZXNzIHNwYWNlCisgICAgICAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhlIGVudGlyZSAxRy4gVGhpcyAxRyBpcyBtZW1vcnkgd2hpY2ggaGFzCisgICAgICAgICAgICAgIGJlZW4gImNvbW1pdHRlZCIgdG8gYnkgdGhlIFZNIGFuZCBjYW4gYmUgdXNlZCBhdCBhbnkgdGltZQorICAgICAgICAgICAgICBieSB0aGUgYWxsb2NhdGluZyBhcHBsaWNhdGlvbi4gV2l0aCBzdHJpY3Qgb3ZlcmNvbW1pdAorICAgICAgICAgICAgICBlbmFibGVkIG9uIHRoZSBzeXN0ZW0gKG1vZGUgMiBpbiAndm0ub3ZlcmNvbW1pdF9tZW1vcnknKSwKKyAgICAgICAgICAgICAgYWxsb2NhdGlvbnMgd2hpY2ggd291bGQgZXhjZWVkIHRoZSBDb21taXRMaW1pdCAoZGV0YWlsZWQKKyAgICAgICAgICAgICAgYWJvdmUpIHdpbGwgbm90IGJlIHBlcm1pdHRlZC4gVGhpcyBpcyB1c2VmdWwgaWYgb25lIG5lZWRzCisgICAgICAgICAgICAgIHRvIGd1YXJhbnRlZSB0aGF0IHByb2Nlc3NlcyB3aWxsIG5vdCBmYWlsIGR1ZSB0byBsYWNrIG9mCisgICAgICAgICAgICAgIG1lbW9yeSBvbmNlIHRoYXQgbWVtb3J5IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQuCisgIFBhZ2VUYWJsZXM6IGFtb3VudCBvZiBtZW1vcnkgZGVkaWNhdGVkIHRvIHRoZSBsb3dlc3QgbGV2ZWwgb2YgcGFnZQorICAgICAgICAgICAgICB0YWJsZXMuCitWbWFsbG9jVG90YWw6IHRvdGFsIHNpemUgb2Ygdm1hbGxvYyBtZW1vcnkgYXJlYQorIFZtYWxsb2NVc2VkOiBhbW91bnQgb2Ygdm1hbGxvYyBhcmVhIHdoaWNoIGlzIHVzZWQKK1ZtYWxsb2NDaHVuazogbGFyZ2VzdCBjb250aWdpb3VzIGJsb2NrIG9mIHZtYWxsb2MgYXJlYSB3aGljaCBpcyBmcmVlCisKKworMS4zIElERSBkZXZpY2VzIGluIC9wcm9jL2lkZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3ViZGlyZWN0b3J5IC9wcm9jL2lkZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgSURFIGRldmljZXMgb2Ygd2hpY2gKK3RoZSBrZXJuZWwgIGlzICBhd2FyZS4gIFRoZXJlIGlzIG9uZSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggSURFIGNvbnRyb2xsZXIsIHRoZQorZmlsZSBkcml2ZXJzICBhbmQgYSBsaW5rIGZvciBlYWNoIElERSBkZXZpY2UsIHBvaW50aW5nIHRvIHRoZSBkZXZpY2UgZGlyZWN0b3J5CitpbiB0aGUgY29udHJvbGxlciBzcGVjaWZpYyBzdWJ0cmVlLgorCitUaGUgZmlsZSAgZHJpdmVycyAgY29udGFpbnMgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJpdmVycyB1c2VkIGZvciB0aGUKK0lERSBkZXZpY2VzOgorCisgID4gY2F0IC9wcm9jL2lkZS9kcml2ZXJzCisgIGlkZS1jZHJvbSB2ZXJzaW9uIDQuNTMKKyAgaWRlLWRpc2sgdmVyc2lvbiAxLjA4CisKK01vcmUgZGV0YWlsZWQgIGluZm9ybWF0aW9uICBjYW4gIGJlICBmb3VuZCAgaW4gIHRoZSAgY29udHJvbGxlciAgc3BlY2lmaWMKK3N1YmRpcmVjdG9yaWVzLiBUaGVzZSAgYXJlICBuYW1lZCAgaWRlMCwgIGlkZTEgIGFuZCAgc28gIG9uLiAgRWFjaCAgb2YgIHRoZXNlCitkaXJlY3RvcmllcyBjb250YWlucyB0aGUgZmlsZXMgc2hvd24gaW4gdGFibGUgMS00LgorCisKK1RhYmxlIDEtNDogSURFIGNvbnRyb2xsZXIgaW5mbyBpbiAgL3Byb2MvaWRlL2lkZT8gCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBGaWxlICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBjaGFubmVsIElERSBjaGFubmVsICgwIG9yIDEpICAgICAgICAgICAgICAgICAgICAKKyBjb25maWcgIENvbmZpZ3VyYXRpb24gKG9ubHkgZm9yIFBDSS9JREUgYnJpZGdlKSAKKyBtYXRlICAgIE1hdGUgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBtb2RlbCAgIFR5cGUvQ2hpcHNldCBvZiBJREUgY29udHJvbGxlciAgICAgICAgICAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitFYWNoIGRldmljZSAgY29ubmVjdGVkICB0byAgYSAgY29udHJvbGxlciAgaGFzICBhIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiB0aGUKK2NvbnRyb2xsZXJzIGRpcmVjdG9yeS4gIFRoZSAgZmlsZXMgIGxpc3RlZCBpbiB0YWJsZSAxLTUgYXJlIGNvbnRhaW5lZCBpbiB0aGVzZQorZGlyZWN0b3JpZXMuCisKKworVGFibGUgMS01OiBJREUgZGV2aWNlIGluZm9ybWF0aW9uIAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgRmlsZSAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgY2FjaGUgICAgICAgICAgICBUaGUgY2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgY2FwYWNpdHkgICAgICAgICBDYXBhY2l0eSBvZiB0aGUgbWVkaXVtIChpbiA1MTJCeXRlIGJsb2NrcykgCisgZHJpdmVyICAgICAgICAgICBkcml2ZXIgYW5kIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgCisgZ2VvbWV0cnkgICAgICAgICBwaHlzaWNhbCBhbmQgbG9naWNhbCBnZW9tZXRyeSAgICAgICAgICAgICAgCisgaWRlbnRpZnkgICAgICAgICBkZXZpY2UgaWRlbnRpZnkgYmxvY2sgICAgICAgICAgICAgICAgICAgICAgCisgbWVkaWEgICAgICAgICAgICBtZWRpYSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgbW9kZWwgICAgICAgICAgICBkZXZpY2UgaWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgICAgICAgCisgc2V0dGluZ3MgICAgICAgICBkZXZpY2Ugc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgc21hcnRfdGhyZXNob2xkcyBJREUgZGlzayBtYW5hZ2VtZW50IHRocmVzaG9sZHMgICAgICAgICAgICAgCisgc21hcnRfdmFsdWVzICAgICBJREUgZGlzayBtYW5hZ2VtZW50IHZhbHVlcyAgICAgICAgICAgICAgICAgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVGhlIG1vc3QgIGludGVyZXN0aW5nICBmaWxlIGlzIHNldHRpbmdzLiBUaGlzIGZpbGUgY29udGFpbnMgYSBuaWNlIG92ZXJ2aWV3IG9mCit0aGUgZHJpdmUgcGFyYW1ldGVyczoKKworICAjIGNhdCAvcHJvYy9pZGUvaWRlMC9oZGEvc2V0dGluZ3MgCisgIG5hbWUgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgICAgICBtaW4gICAgICAgICAgICAgbWF4ICAgICAgICAgICAgIG1vZGUgCisgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS0tICAgICAgICAgICAtLS0gICAgICAgICAgICAgLS0tICAgICAgICAgICAgIC0tLS0gCisgIGJpb3NfY3lsICAgICAgICAgICAgICAgIDUyNiAgICAgICAgICAgICAwICAgICAgICAgICAgICAgNjU1MzUgICAgICAgICAgIHJ3IAorICBiaW9zX2hlYWQgICAgICAgICAgICAgICAyNTUgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDI1NSAgICAgICAgICAgICBydyAKKyAgYmlvc19zZWN0ICAgICAgICAgICAgICAgNjMgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICA2MyAgICAgICAgICAgICAgcncgCisgIGJyZWFkYV9yZWFkYWhlYWQgICAgICAgIDQgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMTI3ICAgICAgICAgICAgIHJ3IAorICBic3dhcCAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICByIAorICBmaWxlX3JlYWRhaGVhZCAgICAgICAgICA3MiAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDIwOTcxNTEgICAgICAgICBydyAKKyAgaW9fMzJiaXQgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAzICAgICAgICAgICAgICAgcncgCisgIGtlZXBzZXR0aW5ncyAgICAgICAgICAgIDAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIHJ3IAorICBtYXhfa2JfcGVyX3JlcXVlc3QgICAgICAxMjIgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIDEyNyAgICAgICAgICAgICBydyAKKyAgbXVsdGNvdW50ICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICA4ICAgICAgICAgICAgICAgcncgCisgIG5pY2UxICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIHJ3IAorICBub3dlcnIgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBydyAKKyAgcGlvX21vZGUgICAgICAgICAgICAgICAgd3JpdGUtb25seSAgICAgIDAgICAgICAgICAgICAgICAyNTUgICAgICAgICAgICAgdyAKKyAgc2xvdyAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgcncgCisgIHVubWFza2lycSAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIHJ3IAorICB1c2luZ19kbWEgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBydyAKKworCisxLjQgTmV0d29ya2luZyBpbmZvIGluIC9wcm9jL25ldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHN1YmRpcmVjdG9yeSAgL3Byb2MvbmV0ICBmb2xsb3dzICB0aGUgIHVzdWFsICBwYXR0ZXJuLiBUYWJsZSAxLTYgc2hvd3MgdGhlCithZGRpdGlvbmFsIHZhbHVlcyAgeW91ICBnZXQgIGZvciAgSVAgIHZlcnNpb24gNiBpZiB5b3UgY29uZmlndXJlIHRoZSBrZXJuZWwgdG8KK3N1cHBvcnQgdGhpcy4gVGFibGUgMS03IGxpc3RzIHRoZSBmaWxlcyBhbmQgdGhlaXIgbWVhbmluZy4KKworCitUYWJsZSAxLTY6IElQdjYgaW5mbyBpbiAvcHJvYy9uZXQgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBGaWxlICAgICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHVkcDYgICAgICAgVURQIHNvY2tldHMgKElQdjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgdGNwNiAgICAgICBUQ1Agc29ja2V0cyAoSVB2NikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyByYXc2ICAgICAgIFJhdyBkZXZpY2Ugc3RhdGlzdGljcyAoSVB2NikgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlnbXA2ICAgICAgSVAgbXVsdGljYXN0IGFkZHJlc3Nlcywgd2hpY2ggdGhpcyBob3N0IGpvaW5lZCAoSVB2NikgCisgaWZfaW5ldDYgICBMaXN0IG9mIElQdjYgaW50ZXJmYWNlIGFkZHJlc3NlcyAgICAgICAgICAgICAgICAgICAgICAKKyBpcHY2X3JvdXRlIEtlcm5lbCByb3V0aW5nIHRhYmxlIGZvciBJUHY2ICAgICAgICAgICAgICAgICAgICAgICAgIAorIHJ0Nl9zdGF0cyAgR2xvYmFsIElQdjYgcm91dGluZyB0YWJsZXMgc3RhdGlzdGljcyAgICAgICAgICAgICAgICAgCisgc29ja3N0YXQ2ICBTb2NrZXQgc3RhdGlzdGljcyAoSVB2NikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBzbm1wNiAgICAgIFNubXAgZGF0YSAoSVB2NikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKKworVGFibGUgMS03OiBOZXR3b3JrIGluZm8gaW4gL3Byb2MvbmV0IAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgRmlsZSAgICAgICAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgYXJwICAgICAgICAgICBLZXJuZWwgIEFSUCB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgZGV2ICAgICAgICAgICBuZXR3b3JrIGRldmljZXMgd2l0aCBzdGF0aXN0aWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgZGV2X21jYXN0ICAgICB0aGUgTGF5ZXIyIG11bHRpY2FzdCBncm91cHMgYSBkZXZpY2UgaXMgbGlzdGVuaW5nIHRvbworICAgICAgICAgICAgICAgKGludGVyZmFjZSBpbmRleCwgbGFiZWwsIG51bWJlciBvZiByZWZlcmVuY2VzLCBudW1iZXIgb2YgYm91bmQKKyAgICAgICAgICAgICAgIGFkZHJlc3NlcykuIAorIGRldl9zdGF0ICAgICAgbmV0d29yayBkZXZpY2Ugc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlwX2Z3Y2hhaW5zICAgRmlyZXdhbGwgY2hhaW4gbGlua2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlwX2Z3bmFtZXMgICAgRmlyZXdhbGwgY2hhaW4gbmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlwX21hc3EgICAgICAgRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG1hc3F1ZXJhZGluZyB0YWJsZXMgICAgICAgICAgICAgICAgICAgIAorIGlwX21hc3F1ZXJhZGUgTWFqb3IgbWFzcXVlcmFkaW5nIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIG5ldHN0YXQgICAgICAgTmV0d29yayBzdGF0aXN0aWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHJhdyAgICAgICAgICAgcmF3IGRldmljZSBzdGF0aXN0aWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHJvdXRlICAgICAgICAgS2VybmVsIHJvdXRpbmcgdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHJwYyAgICAgICAgICAgRGlyZWN0b3J5IGNvbnRhaW5pbmcgcnBjIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHJ0X2NhY2hlICAgICAgUm91dGluZyBjYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHNubXAgICAgICAgICAgU05NUCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHNvY2tzdGF0ICAgICAgU29ja2V0IHN0YXRpc3RpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHRjcCAgICAgICAgICAgVENQICBzb2NrZXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHRyX3JpZiAgICAgICAgVG9rZW4gcmluZyBSSUYgcm91dGluZyB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHVkcCAgICAgICAgICAgVURQIHNvY2tldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHVuaXggICAgICAgICAgVU5JWCBkb21haW4gc29ja2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHdpcmVsZXNzICAgICAgV2lyZWxlc3MgaW50ZXJmYWNlIGRhdGEgKFdhdmVsYW4gZXRjKSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlnbXAgICAgICAgICAgSVAgbXVsdGljYXN0IGFkZHJlc3Nlcywgd2hpY2ggdGhpcyBob3N0IGpvaW5lZCAgICAgICAgICAgICAgICAgIAorIHBzY2hlZCAgICAgICAgR2xvYmFsIHBhY2tldCBzY2hlZHVsZXIgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIG5ldGxpbmsgICAgICAgTGlzdCBvZiBQRl9ORVRMSU5LIHNvY2tldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlwX21yX3ZpZnMgICAgTGlzdCBvZiBtdWx0aWNhc3QgdmlydHVhbCBpbnRlcmZhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlwX21yX2NhY2hlICAgTGlzdCBvZiBtdWx0aWNhc3Qgcm91dGluZyBjYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1lvdSBjYW4gIHVzZSAgdGhpcyAgaW5mb3JtYXRpb24gIHRvIHNlZSB3aGljaCBuZXR3b3JrIGRldmljZXMgYXJlIGF2YWlsYWJsZSBpbgoreW91ciBzeXN0ZW0gYW5kIGhvdyBtdWNoIHRyYWZmaWMgd2FzIHJvdXRlZCBvdmVyIHRob3NlIGRldmljZXM6CisKKyAgPiBjYXQgL3Byb2MvbmV0L2RldiAKKyAgSW50ZXItfFJlY2VpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Wy4uLiAKKyAgIGZhY2UgfGJ5dGVzICAgIHBhY2tldHMgZXJycyBkcm9wIGZpZm8gZnJhbWUgY29tcHJlc3NlZCBtdWx0aWNhc3R8Wy4uLiAKKyAgICAgIGxvOiAgOTA4MTg4ICAgNTU5NiAgICAgMCAgICAwICAgIDAgICAgIDAgICAgICAgICAgMCAgICAgICAgIDAgWy4uLiAgICAgICAgIAorICAgIHBwcDA6MTU0NzUxNDAgIDIwNzIxICAgNDEwICAgIDAgICAgMCAgIDQxMCAgICAgICAgICAwICAgICAgICAgMCBbLi4uICAKKyAgICBldGgwOiAgNjE0NTMwICAgNzA4NSAgICAgMCAgICAwICAgIDAgICAgIDAgICAgICAgICAgMCAgICAgICAgIDEgWy4uLiAKKyAgIAorICAuLi5dIFRyYW5zbWl0IAorICAuLi5dIGJ5dGVzICAgIHBhY2tldHMgZXJycyBkcm9wIGZpZm8gY29sbHMgY2FycmllciBjb21wcmVzc2VkIAorICAuLi5dICA5MDgxODggICAgIDU1OTYgICAgMCAgICAwICAgIDAgICAgIDAgICAgICAgMCAgICAgICAgICAwIAorICAuLi5dIDEzNzUxMDMgICAgMTc0MDUgICAgMCAgICAwICAgIDAgICAgIDAgICAgICAgMCAgICAgICAgICAwIAorICAuLi5dIDE3MDM5ODEgICAgIDU1MzUgICAgMCAgICAwICAgIDAgICAgIDMgICAgICAgMCAgICAgICAgICAwIAorCitJbiBhZGRpdGlvbiwgZWFjaCBDaGFubmVsIEJvbmQgaW50ZXJmYWNlIGhhcyBpdCdzIG93biBkaXJlY3RvcnkuICBGb3IKK2V4YW1wbGUsIHRoZSBib25kMCBkZXZpY2Ugd2lsbCBoYXZlIGEgZGlyZWN0b3J5IGNhbGxlZCAvcHJvYy9uZXQvYm9uZDAvLgorSXQgd2lsbCBjb250YWluIGluZm9ybWF0aW9uIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhhdCBib25kLCBzdWNoIGFzIHRoZQorY3VycmVudCBzbGF2ZXMgb2YgdGhlIGJvbmQsIHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgc2xhdmVzLCBhbmQgaG93CittYW55IHRpbWVzIHRoZSBzbGF2ZXMgbGluayBoYXMgZmFpbGVkLgorCisxLjUgU0NTSSBpbmZvCistLS0tLS0tLS0tLS0tCisKK0lmIHlvdSAgaGF2ZSAgYSAgU0NTSSAgaG9zdCBhZGFwdGVyIGluIHlvdXIgc3lzdGVtLCB5b3UnbGwgZmluZCBhIHN1YmRpcmVjdG9yeQorbmFtZWQgYWZ0ZXIgIHRoZSBkcml2ZXIgZm9yIHRoaXMgYWRhcHRlciBpbiAvcHJvYy9zY3NpLiBZb3UnbGwgYWxzbyBzZWUgYSBsaXN0CitvZiBhbGwgcmVjb2duaXplZCBTQ1NJIGRldmljZXMgaW4gL3Byb2Mvc2NzaToKKworICA+Y2F0IC9wcm9jL3Njc2kvc2NzaSAKKyAgQXR0YWNoZWQgZGV2aWNlczogCisgIEhvc3Q6IHNjc2kwIENoYW5uZWw6IDAwIElkOiAwMCBMdW46IDAwIAorICAgIFZlbmRvcjogSUJNICAgICAgTW9kZWw6IERHSFMwOVUgICAgICAgICAgUmV2OiAwM0UwIAorICAgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMyAKKyAgSG9zdDogc2NzaTAgQ2hhbm5lbDogMDAgSWQ6IDA2IEx1bjogMDAgCisgICAgVmVuZG9yOiBQSU9ORUVSICBNb2RlbDogQ0QtUk9NIERSLVUwNlMgICBSZXY6IDEuMDQgCisgICAgVHlwZTogICBDRC1ST00gICAgICAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyIAorCisKK1RoZSBkaXJlY3RvcnkgIG5hbWVkICBhZnRlciAgdGhlIGRyaXZlciBoYXMgb25lIGZpbGUgZm9yIGVhY2ggYWRhcHRlciBmb3VuZCBpbgordGhlIHN5c3RlbS4gIFRoZXNlICBmaWxlcyAgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udHJvbGxlciwgaW5jbHVkaW5nCit0aGUgdXNlZCAgSVJRICBhbmQgIHRoZSAgSU8gIGFkZHJlc3MgcmFuZ2UuIFRoZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gc2hvd24gaXMKK2RlcGVuZGVudCBvbiAgdGhlIGFkYXB0ZXIgeW91IHVzZS4gVGhlIGV4YW1wbGUgc2hvd3MgdGhlIG91dHB1dCBmb3IgYW4gQWRhcHRlYworQUhBLTI5NDAgU0NTSSBhZGFwdGVyOgorCisgID4gY2F0IC9wcm9jL3Njc2kvYWljN3h4eC8wIAorICAgCisgIEFkYXB0ZWMgQUlDN3h4eCBkcml2ZXIgdmVyc2lvbjogNS4xLjE5LzMuMi40IAorICBDb21waWxlIE9wdGlvbnM6IAorICAgIFRDUSBFbmFibGVkIEJ5IERlZmF1bHQgOiBEaXNhYmxlZCAKKyAgICBBSUM3WFhYX1BST0NfU1RBVFMgICAgIDogRGlzYWJsZWQgCisgICAgQUlDN1hYWF9SRVNFVF9ERUxBWSAgICA6IDUgCisgIEFkYXB0ZXIgQ29uZmlndXJhdGlvbjogCisgICAgICAgICAgICAgU0NTSSBBZGFwdGVyOiBBZGFwdGVjIEFIQS0yOTRYIFVsdHJhIFNDU0kgaG9zdCBhZGFwdGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYSBXaWRlIENvbnRyb2xsZXIgCisgICAgICBQQ0kgTU1BUGVkIEkvTyBCYXNlOiAweGViMDAxMDAwIAorICAgQWRhcHRlciBTRUVQUk9NIENvbmZpZzogU0VFUFJPTSBmb3VuZCBhbmQgdXNlZC4gCisgICAgICAgIEFkYXB0ZWMgU0NTSSBCSU9TOiBFbmFibGVkIAorICAgICAgICAgICAgICAgICAgICAgIElSUTogMTAgCisgICAgICAgICAgICAgICAgICAgICBTQ0JzOiBBY3RpdmUgMCwgTWF4IEFjdGl2ZSAyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlZCAxNSwgSFcgMTYsIFBhZ2UgMjU1IAorICAgICAgICAgICAgICAgSW50ZXJydXB0czogMTYwMzI4IAorICAgICAgICBCSU9TIENvbnRyb2wgV29yZDogMHgxOGI2IAorICAgICBBZGFwdGVyIENvbnRyb2wgV29yZDogMHgwMDViIAorICAgICBFeHRlbmRlZCBUcmFuc2xhdGlvbjogRW5hYmxlZCAKKyAgRGlzY29ubmVjdCBFbmFibGUgRmxhZ3M6IDB4ZmZmZiAKKyAgICAgICBVbHRyYSBFbmFibGUgRmxhZ3M6IDB4MDAwMSAKKyAgIFRhZyBRdWV1ZSBFbmFibGUgRmxhZ3M6IDB4MDAwMCAKKyAgT3JkZXJlZCBRdWV1ZSBUYWcgRmxhZ3M6IDB4MDAwMCAKKyAgRGVmYXVsdCBUYWcgUXVldWUgRGVwdGg6IDggCisgICAgICBUYWdnZWQgUXVldWUgQnkgRGV2aWNlIGFycmF5IGZvciBhaWM3eHh4IGhvc3QgaW5zdGFuY2UgMDogCisgICAgICAgIHsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTV9IAorICAgICAgQWN0dWFsIHF1ZXVlIGRlcHRoIHBlciBkZXZpY2UgZm9yIGFpYzd4eHggaG9zdCBpbnN0YW5jZSAwOiAKKyAgICAgICAgezEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDF9IAorICBTdGF0aXN0aWNzOiAKKyAgKHNjc2kwOjA6MDowKSAKKyAgICBEZXZpY2UgdXNpbmcgV2lkZS9TeW5jIHRyYW5zZmVycyBhdCA0MC4wIE1CeXRlL3NlYywgb2Zmc2V0IDggCisgICAgVHJhbnNpbmZvIHNldHRpbmdzOiBjdXJyZW50KDEyLzgvMS8wKSwgZ29hbCgxMi84LzEvMCksIHVzZXIoMTIvMTUvMS8wKSAKKyAgICBUb3RhbCB0cmFuc2ZlcnMgMTYwMTUxICg3NDU3NyByZWFkcyBhbmQgODU1NzQgd3JpdGVzKSAKKyAgKHNjc2kwOjA6NjowKSAKKyAgICBEZXZpY2UgdXNpbmcgTmFycm93L1N5bmMgdHJhbnNmZXJzIGF0IDUuMCBNQnl0ZS9zZWMsIG9mZnNldCAxNSAKKyAgICBUcmFuc2luZm8gc2V0dGluZ3M6IGN1cnJlbnQoNTAvMTUvMC8wKSwgZ29hbCg1MC8xNS8wLzApLCB1c2VyKDUwLzE1LzAvMCkgCisgICAgVG90YWwgdHJhbnNmZXJzIDAgKDAgcmVhZHMgYW5kIDAgd3JpdGVzKSAKKworCisxLjYgUGFyYWxsZWwgcG9ydCBpbmZvIGluIC9wcm9jL3BhcnBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGlyZWN0b3J5ICAvcHJvYy9wYXJwb3J0ICBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyYWxsZWwgcG9ydHMgb2YKK3lvdXIgc3lzdGVtLiAgSXQgIGhhcyAgb25lICBzdWJkaXJlY3RvcnkgIGZvciAgZWFjaCBwb3J0LCBuYW1lZCBhZnRlciB0aGUgcG9ydAorbnVtYmVyICgwLDEsMiwuLi4pLgorCitUaGVzZSBkaXJlY3RvcmllcyBjb250YWluIHRoZSBmb3VyIGZpbGVzIHNob3duIGluIFRhYmxlIDEtOC4KKworCitUYWJsZSAxLTg6IEZpbGVzIGluIC9wcm9jL3BhcnBvcnQgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBGaWxlICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBhdXRvcHJvYmUgQW55IElFRUUtMTI4NCBkZXZpY2UgSUQgaW5mb3JtYXRpb24gdGhhdCBoYXMgYmVlbiBhY3F1aXJlZC4gICAgICAgICAKKyBkZXZpY2VzICAgbGlzdCBvZiB0aGUgZGV2aWNlIGRyaXZlcnMgdXNpbmcgdGhhdCBwb3J0LiBBICsgd2lsbCBhcHBlYXIgYnkgdGhlCisgICAgICAgICAgIG5hbWUgb2YgdGhlIGRldmljZSBjdXJyZW50bHkgdXNpbmcgdGhlIHBvcnQgKGl0IG1pZ2h0IG5vdCBhcHBlYXIKKyAgICAgICAgICAgYWdhaW5zdCBhbnkpLiAKKyBoYXJkd2FyZSAgUGFyYWxsZWwgcG9ydCdzIGJhc2UgYWRkcmVzcywgSVJRIGxpbmUgYW5kIERNQSBjaGFubmVsLiAgICAgICAgICAgICAKKyBpcnEgICAgICAgSVJRIHRoYXQgcGFycG9ydCBpcyB1c2luZyBmb3IgdGhhdCBwb3J0LiBUaGlzIGlzIGluIGEgc2VwYXJhdGUKKyAgICAgICAgICAgZmlsZSB0byBhbGxvdyB5b3UgdG8gYWx0ZXIgaXQgYnkgd3JpdGluZyBhIG5ldyB2YWx1ZSBpbiAoSVJRCisgICAgICAgICAgIG51bWJlciBvciBub25lKS4gCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworMS43IFRUWSBpbmZvIGluIC9wcm9jL3R0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbmZvcm1hdGlvbiBhYm91dCAgdGhlICBhdmFpbGFibGUgIGFuZCBhY3R1YWxseSB1c2VkIHR0eSdzIGNhbiBiZSBmb3VuZCBpbiB0aGUKK2RpcmVjdG9yeSAvcHJvYy90dHkuWW91J2xsICBmaW5kICBlbnRyaWVzICBmb3IgZHJpdmVycyBhbmQgbGluZSBkaXNjaXBsaW5lcyBpbgordGhpcyBkaXJlY3RvcnksIGFzIHNob3duIGluIFRhYmxlIDEtOS4KKworCitUYWJsZSAxLTk6IEZpbGVzIGluIC9wcm9jL3R0eSAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIEZpbGUgICAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBkcml2ZXJzICAgICAgIGxpc3Qgb2YgZHJpdmVycyBhbmQgdGhlaXIgdXNhZ2UgICAgICAgICAgICAgICAgCisgbGRpc2NzICAgICAgICByZWdpc3RlcmVkIGxpbmUgZGlzY2lwbGluZXMgICAgICAgICAgICAgICAgICAgIAorIGRyaXZlci9zZXJpYWwgdXNhZ2Ugc3RhdGlzdGljIGFuZCBzdGF0dXMgb2Ygc2luZ2xlIHR0eSBsaW5lcyAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitUbyBzZWUgIHdoaWNoICB0dHkncyAgYXJlICBjdXJyZW50bHkgaW4gdXNlLCB5b3UgY2FuIHNpbXBseSBsb29rIGludG8gdGhlIGZpbGUKKy9wcm9jL3R0eS9kcml2ZXJzOgorCisgID4gY2F0IC9wcm9jL3R0eS9kcml2ZXJzIAorICBwdHlfc2xhdmUgICAgICAgICAgICAvZGV2L3B0cyAgICAgIDEzNiAgIDAtMjU1IHB0eTpzbGF2ZSAKKyAgcHR5X21hc3RlciAgICAgICAgICAgL2Rldi9wdG0gICAgICAxMjggICAwLTI1NSBwdHk6bWFzdGVyIAorICBwdHlfc2xhdmUgICAgICAgICAgICAvZGV2L3R0eXAgICAgICAgMyAgIDAtMjU1IHB0eTpzbGF2ZSAKKyAgcHR5X21hc3RlciAgICAgICAgICAgL2Rldi9wdHkgICAgICAgIDIgICAwLTI1NSBwdHk6bWFzdGVyIAorICBzZXJpYWwgICAgICAgICAgICAgICAvZGV2L2N1YSAgICAgICAgNSAgIDY0LTY3IHNlcmlhbDpjYWxsb3V0IAorICBzZXJpYWwgICAgICAgICAgICAgICAvZGV2L3R0eVMgICAgICAgNCAgIDY0LTY3IHNlcmlhbCAKKyAgL2Rldi90dHkwICAgICAgICAgICAgL2Rldi90dHkwICAgICAgIDQgICAgICAgMCBzeXN0ZW06dnRtYXN0ZXIgCisgIC9kZXYvcHRteCAgICAgICAgICAgIC9kZXYvcHRteCAgICAgICA1ICAgICAgIDIgc3lzdGVtIAorICAvZGV2L2NvbnNvbGUgICAgICAgICAvZGV2L2NvbnNvbGUgICAgNSAgICAgICAxIHN5c3RlbTpjb25zb2xlIAorICAvZGV2L3R0eSAgICAgICAgICAgICAvZGV2L3R0eSAgICAgICAgNSAgICAgICAwIHN5c3RlbTovZGV2L3R0eSAKKyAgdW5rbm93biAgICAgICAgICAgICAgL2Rldi90dHkgICAgICAgIDQgICAgMS02MyBjb25zb2xlIAorCisKKzEuOCBNaXNjZWxsYW5lb3VzIGtlcm5lbCBzdGF0aXN0aWNzIGluIC9wcm9jL3N0YXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmFyaW91cyBwaWVjZXMgICBvZiAgaW5mb3JtYXRpb24gYWJvdXQgIGtlcm5lbCBhY3Rpdml0eSAgYXJlICBhdmFpbGFibGUgaW4gdGhlCisvcHJvYy9zdGF0IGZpbGUuICBBbGwgIG9mICB0aGUgbnVtYmVycyByZXBvcnRlZCAgaW4gIHRoaXMgZmlsZSBhcmUgIGFnZ3JlZ2F0ZXMKK3NpbmNlIHRoZSBzeXN0ZW0gZmlyc3QgYm9vdGVkLiAgRm9yIGEgcXVpY2sgbG9vaywgc2ltcGx5IGNhdCB0aGUgZmlsZToKKworICA+IGNhdCAvcHJvYy9zdGF0CisgIGNwdSAgMjI1NSAzNCAyMjkwIDIyNjI1NTYzIDYyOTAgMTI3IDQ1NgorICBjcHUwIDExMzIgMzQgMTQ0MSAxMTMxMTcxOCAzNjc1IDEyNyA0MzgKKyAgY3B1MSAxMTIzIDAgODQ5IDExMzEzODQ1IDI2MTQgMCAxOAorICBpbnRyIDExNDkzMDU0OCAxMTMxOTk3ODggMyAwIDUgMjYzIDAgNCBbLi4uIGxvdHMgbW9yZSBudW1iZXJzIC4uLl0KKyAgY3R4dCAxOTkwNDczCisgIGJ0aW1lIDEwNjIxOTEzNzYKKyAgcHJvY2Vzc2VzIDI5MTUKKyAgcHJvY3NfcnVubmluZyAxCisgIHByb2NzX2Jsb2NrZWQgMAorCitUaGUgdmVyeSBmaXJzdCAgImNwdSIgbGluZSBhZ2dyZWdhdGVzIHRoZSAgbnVtYmVycyBpbiBhbGwgIG9mIHRoZSBvdGhlciAiY3B1TiIKK2xpbmVzLiAgVGhlc2UgbnVtYmVycyBpZGVudGlmeSB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIENQVSBoYXMgc3BlbnQgcGVyZm9ybWluZworZGlmZmVyZW50IGtpbmRzIG9mIHdvcmsuICBUaW1lIHVuaXRzIGFyZSBpbiBVU0VSX0haICh0eXBpY2FsbHkgaHVuZHJlZHRocyBvZiBhCitzZWNvbmQpLiAgVGhlIG1lYW5pbmdzIG9mIHRoZSBjb2x1bW5zIGFyZSBhcyBmb2xsb3dzLCBmcm9tIGxlZnQgdG8gcmlnaHQ6CisKKy0gdXNlcjogbm9ybWFsIHByb2Nlc3NlcyBleGVjdXRpbmcgaW4gdXNlciBtb2RlCistIG5pY2U6IG5pY2VkIHByb2Nlc3NlcyBleGVjdXRpbmcgaW4gdXNlciBtb2RlCistIHN5c3RlbTogcHJvY2Vzc2VzIGV4ZWN1dGluZyBpbiBrZXJuZWwgbW9kZQorLSBpZGxlOiB0d2lkZGxpbmcgdGh1bWJzCistIGlvd2FpdDogd2FpdGluZyBmb3IgSS9PIHRvIGNvbXBsZXRlCistIGlycTogc2VydmljaW5nIGludGVycnVwdHMKKy0gc29mdGlycTogc2VydmljaW5nIHNvZnRpcnFzCisKK1RoZSAiaW50ciIgbGluZSBnaXZlcyBjb3VudHMgb2YgaW50ZXJydXB0cyAgc2VydmljZWQgc2luY2UgYm9vdCB0aW1lLCBmb3IgZWFjaAorb2YgdGhlICBwb3NzaWJsZSBzeXN0ZW0gaW50ZXJydXB0cy4gICBUaGUgZmlyc3QgIGNvbHVtbiAgaXMgdGhlICB0b3RhbCBvZiAgYWxsCitpbnRlcnJ1cHRzIHNlcnZpY2VkOyBlYWNoICBzdWJzZXF1ZW50IGNvbHVtbiBpcyB0aGUgIHRvdGFsIGZvciB0aGF0IHBhcnRpY3VsYXIKK2ludGVycnVwdC4KKworVGhlICJjdHh0IiBsaW5lIGdpdmVzIHRoZSB0b3RhbCBudW1iZXIgb2YgY29udGV4dCBzd2l0Y2hlcyBhY3Jvc3MgYWxsIENQVXMuCisKK1RoZSAiYnRpbWUiIGxpbmUgZ2l2ZXMgIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSAgc3lzdGVtIGJvb3RlZCwgaW4gc2Vjb25kcyBzaW5jZQordGhlIFVuaXggZXBvY2guCisKK1RoZSAicHJvY2Vzc2VzIiBsaW5lIGdpdmVzIHRoZSBudW1iZXIgIG9mIHByb2Nlc3NlcyBhbmQgdGhyZWFkcyBjcmVhdGVkLCB3aGljaAoraW5jbHVkZXMgKGJ1dCAgaXMgbm90IGxpbWl0ZWQgIHRvKSB0aG9zZSAgY3JlYXRlZCBieSAgY2FsbHMgdG8gdGhlICBmb3JrKCkgYW5kCitjbG9uZSgpIHN5c3RlbSBjYWxscy4KKworVGhlICAicHJvY3NfcnVubmluZyIgbGluZSBnaXZlcyB0aGUgIG51bWJlciBvZiBwcm9jZXNzZXMgIGN1cnJlbnRseSBydW5uaW5nIG9uCitDUFVzLgorCitUaGUgICAicHJvY3NfYmxvY2tlZCIgbGluZSBnaXZlcyAgdGhlICBudW1iZXIgb2YgIHByb2Nlc3NlcyBjdXJyZW50bHkgYmxvY2tlZCwKK3dhaXRpbmcgZm9yIEkvTyB0byBjb21wbGV0ZS4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N1bW1hcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIC9wcm9jIGZpbGUgc3lzdGVtIHNlcnZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcnVubmluZyBzeXN0ZW0uIEl0IG5vdCBvbmx5CithbGxvd3MgYWNjZXNzIHRvIHByb2Nlc3MgZGF0YSBidXQgYWxzbyBhbGxvd3MgeW91IHRvIHJlcXVlc3QgdGhlIGtlcm5lbCBzdGF0dXMKK2J5IHJlYWRpbmcgZmlsZXMgaW4gdGhlIGhpZXJhcmNoeS4KKworVGhlIGRpcmVjdG9yeSAgc3RydWN0dXJlICBvZiAvcHJvYyByZWZsZWN0cyB0aGUgdHlwZXMgb2YgaW5mb3JtYXRpb24gYW5kIG1ha2VzCitpdCBlYXN5LCBpZiBub3Qgb2J2aW91cywgd2hlcmUgdG8gbG9vayBmb3Igc3BlY2lmaWMgZGF0YS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NIQVBURVIgMjogTU9ESUZZSU5HIFNZU1RFTSBQQVJBTUVURVJTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiBUaGlzIENoYXB0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBNb2RpZnlpbmcga2VybmVsIHBhcmFtZXRlcnMgYnkgd3JpdGluZyBpbnRvIGZpbGVzIGZvdW5kIGluIC9wcm9jL3N5cworKiBFeHBsb3JpbmcgdGhlIGZpbGVzIHdoaWNoIG1vZGlmeSBjZXJ0YWluIHBhcmFtZXRlcnMKKyogUmV2aWV3IG9mIHRoZSAvcHJvYy9zeXMgZmlsZSB0cmVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitBIHZlcnkgIGludGVyZXN0aW5nIHBhcnQgb2YgL3Byb2MgaXMgdGhlIGRpcmVjdG9yeSAvcHJvYy9zeXMuIFRoaXMgaXMgbm90IG9ubHkKK2Egc291cmNlICBvZiAgaW5mb3JtYXRpb24sICBpdCBhbHNvIGFsbG93cyB5b3UgdG8gY2hhbmdlIHBhcmFtZXRlcnMgd2l0aGluIHRoZQora2VybmVsLiBCZSAgdmVyeSAgY2FyZWZ1bCAgd2hlbiBhdHRlbXB0aW5nIHRoaXMuIFlvdSBjYW4gb3B0aW1pemUgeW91ciBzeXN0ZW0sCitidXQgeW91ICBjYW4gIGFsc28gIGNhdXNlICBpdCAgdG8gIGNyYXNoLiAgTmV2ZXIgIGFsdGVyIGtlcm5lbCBwYXJhbWV0ZXJzIG9uIGEKK3Byb2R1Y3Rpb24gc3lzdGVtLiAgU2V0ICB1cCAgYSAgZGV2ZWxvcG1lbnQgbWFjaGluZSBhbmQgdGVzdCB0byBtYWtlIHN1cmUgdGhhdAorZXZlcnl0aGluZyB3b3JrcyAgdGhlICB3YXkgIHlvdSB3YW50IGl0IHRvLiBZb3UgbWF5IGhhdmUgbm8gYWx0ZXJuYXRpdmUgYnV0IHRvCityZWJvb3QgdGhlIG1hY2hpbmUgb25jZSBhbiBlcnJvciBoYXMgYmVlbiBtYWRlLgorCitUbyBjaGFuZ2UgIGEgIHZhbHVlLCAgc2ltcGx5ICBlY2hvICB0aGUgbmV3IHZhbHVlIGludG8gdGhlIGZpbGUuIEFuIGV4YW1wbGUgaXMKK2dpdmVuIGJlbG93ICBpbiB0aGUgc2VjdGlvbiBvbiB0aGUgZmlsZSBzeXN0ZW0gZGF0YS4gWW91IG5lZWQgdG8gYmUgcm9vdCB0byBkbwordGhpcy4gWW91ICBjYW4gIGNyZWF0ZSAgeW91ciAgb3duICBib290IHNjcmlwdCB0byBwZXJmb3JtIHRoaXMgZXZlcnkgdGltZSB5b3VyCitzeXN0ZW0gYm9vdHMuCisKK1RoZSBmaWxlcyAgaW4gL3Byb2Mvc3lzIGNhbiBiZSB1c2VkIHRvIGZpbmUgdHVuZSBhbmQgbW9uaXRvciBtaXNjZWxsYW5lb3VzIGFuZAorZ2VuZXJhbCB0aGluZ3MgIGluICB0aGUgb3BlcmF0aW9uIG9mIHRoZSBMaW51eCBrZXJuZWwuIFNpbmNlIHNvbWUgb2YgdGhlIGZpbGVzCitjYW4gaW5hZHZlcnRlbnRseSAgZGlzcnVwdCAgeW91ciAgc3lzdGVtLCAgaXQgIGlzICBhZHZpc2FibGUgIHRvICByZWFkICBib3RoCitkb2N1bWVudGF0aW9uIGFuZCAgc291cmNlICBiZWZvcmUgYWN0dWFsbHkgbWFraW5nIGFkanVzdG1lbnRzLiBJbiBhbnkgY2FzZSwgYmUKK3ZlcnkgY2FyZWZ1bCAgd2hlbiAgd3JpdGluZyAgdG8gIGFueSAgb2YgdGhlc2UgZmlsZXMuIFRoZSBlbnRyaWVzIGluIC9wcm9jIG1heQorY2hhbmdlIHNsaWdodGx5IGJldHdlZW4gdGhlIDIuMS4qIGFuZCB0aGUgMi4yIGtlcm5lbCwgc28gaWYgdGhlcmUgaXMgYW55IGRvdWJ0CityZXZpZXcgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGluIHRoZSBkaXJlY3RvcnkgL3Vzci9zcmMvbGludXgvRG9jdW1lbnRhdGlvbi4KK1RoaXMgY2hhcHRlciAgaXMgIGhlYXZpbHkgIGJhc2VkICBvbiB0aGUgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCBpbiB0aGUgcHJlIDIuMgora2VybmVscywgYW5kIGJlY2FtZSBwYXJ0IG9mIGl0IGluIHZlcnNpb24gMi4yLjEgb2YgdGhlIExpbnV4IGtlcm5lbC4KKworMi4xIC9wcm9jL3N5cy9mcyAtIEZpbGUgc3lzdGVtIGRhdGEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc3ViZGlyZWN0b3J5ICBjb250YWlucyAgc3BlY2lmaWMgIGZpbGUgc3lzdGVtLCBmaWxlIGhhbmRsZSwgaW5vZGUsIGRlbnRyeQorYW5kIHF1b3RhIGluZm9ybWF0aW9uLgorCitDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvZnM6CisKK2RlbnRyeS1zdGF0ZQorLS0tLS0tLS0tLS0tCisKK1N0YXR1cyBvZiAgdGhlICBkaXJlY3RvcnkgIGNhY2hlLiAgU2luY2UgIGRpcmVjdG9yeSAgZW50cmllcyAgYXJlICBkeW5hbWljYWxseQorYWxsb2NhdGVkIGFuZCAgZGVhbGxvY2F0ZWQsICB0aGlzICBmaWxlIGluZGljYXRlcyB0aGUgY3VycmVudCBzdGF0dXMuIEl0IGhvbGRzCitzaXggdmFsdWVzLCBpbiB3aGljaCB0aGUgbGFzdCB0d28gYXJlIG5vdCB1c2VkIGFuZCBhcmUgYWx3YXlzIHplcm8uIFRoZSBvdGhlcnMKK2FyZSBsaXN0ZWQgaW4gdGFibGUgMi0xLgorCisKK1RhYmxlIDItMTogU3RhdHVzIGZpbGVzIG9mIHRoZSBkaXJlY3RvcnkgY2FjaGUgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBGaWxlICAgICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBucl9kZW50cnkgIEFsbW9zdCBhbHdheXMgemVybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBucl91bnVzZWQgIE51bWJlciBvZiB1bnVzZWQgY2FjaGUgZW50cmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBhZ2VfbGltaXQgIAorICAgICAgICAgICAgaW4gc2Vjb25kcyBhZnRlciB0aGUgZW50cnkgbWF5IGJlIHJlY2xhaW1lZCwgd2hlbiBtZW1vcnkgaXMgc2hvcnQgCisgd2FudF9wYWdlcyBpbnRlcm5hbGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworZHF1b3QtbnIgYW5kIGRxdW90LW1heAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSBkcXVvdC1tYXggc2hvd3MgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNhY2hlZCBkaXNrIHF1b3RhIGVudHJpZXMuCisKK1RoZSBmaWxlICBkcXVvdC1uciAgc2hvd3MgIHRoZSAgbnVtYmVyIG9mIGFsbG9jYXRlZCBkaXNrIHF1b3RhIGVudHJpZXMgYW5kIHRoZQorbnVtYmVyIG9mIGZyZWUgZGlzayBxdW90YSBlbnRyaWVzLgorCitJZiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjYWNoZWQgZGlzayBxdW90YXMgaXMgdmVyeSBsb3cgYW5kIHlvdSBoYXZlIGEgbGFyZ2UKK251bWJlciBvZiBzaW11bHRhbmVvdXMgc3lzdGVtIHVzZXJzLCB5b3UgbWlnaHQgd2FudCB0byByYWlzZSB0aGUgbGltaXQuCisKK2ZpbGUtbnIgYW5kIGZpbGUtbWF4CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUga2VybmVsICBhbGxvY2F0ZXMgZmlsZSBoYW5kbGVzIGR5bmFtaWNhbGx5LCBidXQgZG9lc24ndCBmcmVlIHRoZW0gYWdhaW4gYXQKK3RoaXMgdGltZS4KKworVGhlIHZhbHVlICBpbiAgZmlsZS1tYXggIGRlbm90ZXMgIHRoZSAgbWF4aW11bSBudW1iZXIgb2YgZmlsZSBoYW5kbGVzIHRoYXQgdGhlCitMaW51eCBrZXJuZWwgd2lsbCBhbGxvY2F0ZS4gV2hlbiB5b3UgZ2V0IGEgbG90IG9mIGVycm9yIG1lc3NhZ2VzIGFib3V0IHJ1bm5pbmcKK291dCBvZiAgZmlsZSBoYW5kbGVzLCB5b3UgbWlnaHQgd2FudCB0byByYWlzZSB0aGlzIGxpbWl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcworMTAlIG9mICBSQU0gaW4ga2lsb2J5dGVzLiAgVG8gIGNoYW5nZSBpdCwganVzdCAgd3JpdGUgdGhlIG5ldyBudW1iZXIgIGludG8gdGhlCitmaWxlOgorCisgICMgY2F0IC9wcm9jL3N5cy9mcy9maWxlLW1heCAKKyAgNDA5NiAKKyAgIyBlY2hvIDgxOTIgPiAvcHJvYy9zeXMvZnMvZmlsZS1tYXggCisgICMgY2F0IC9wcm9jL3N5cy9mcy9maWxlLW1heCAKKyAgODE5MiAKKworCitUaGlzIG1ldGhvZCAgb2YgIHJldmlzaW9uICBpcyAgdXNlZnVsICBmb3IgIGFsbCBjdXN0b21pemFibGUgcGFyYW1ldGVycyBvZiB0aGUKK2tlcm5lbCAtIHNpbXBseSBlY2hvIHRoZSBuZXcgdmFsdWUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZmlsZS4KKworSGlzdG9yaWNhbGx5LCB0aGUgdGhyZWUgdmFsdWVzIGluIGZpbGUtbnIgZGVub3RlZCB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBmaWxlCitoYW5kbGVzLCAgdGhlIG51bWJlciBvZiAgYWxsb2NhdGVkIGJ1dCAgdW51c2VkIGZpbGUgIGhhbmRsZXMsIGFuZCAgdGhlIG1heGltdW0KK251bWJlciBvZiBmaWxlIGhhbmRsZXMuIExpbnV4IDIuNiBhbHdheXMgIHJlcG9ydHMgMCBhcyB0aGUgbnVtYmVyIG9mIGZyZWUgZmlsZQoraGFuZGxlcyAtLSB0aGlzICBpcyBub3QgYW4gZXJyb3IsICBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlICBudW1iZXIgb2YgYWxsb2NhdGVkCitmaWxlIGhhbmRsZXMgZXhhY3RseSBtYXRjaGVzIHRoZSBudW1iZXIgb2YgdXNlZCBmaWxlIGhhbmRsZXMuCisKK0F0dGVtcHRzIHRvICBhbGxvY2F0ZSBtb3JlICBmaWxlIGRlc2NyaXB0b3JzIHRoYW4gIGZpbGUtbWF4IGFyZSAgcmVwb3J0ZWQgd2l0aAorcHJpbnRrLCBsb29rIGZvciAiVkZTOiBmaWxlLW1heCBsaW1pdCA8bnVtYmVyPiByZWFjaGVkIi4KKworaW5vZGUtc3RhdGUgYW5kIGlub2RlLW5yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGUgaW5vZGUtbnIgY29udGFpbnMgdGhlIGZpcnN0IHR3byBpdGVtcyBmcm9tIGlub2RlLXN0YXRlLCBzbyB3ZSdsbCBza2lwCit0byB0aGF0IGZpbGUuLi4KKworaW5vZGUtc3RhdGUgY29udGFpbnMgIHR3byAgYWN0dWFsIG51bWJlcnMgYW5kIGZpdmUgZHVtbXkgdmFsdWVzLiBUaGUgbnVtYmVycworYXJlIG5yX2lub2RlcyBhbmQgbnJfZnJlZV9pbm9kZXMgKGluIG9yZGVyIG9mIGFwcGVhcmFuY2UpLgorCitucl9pbm9kZXMKK35+fn5+fn5+fgorCitEZW5vdGVzIHRoZSAgbnVtYmVyICBvZiAgaW5vZGVzIHRoZSBzeXN0ZW0gaGFzIGFsbG9jYXRlZC4gVGhpcyBudW1iZXIgd2lsbAorZ3JvdyBhbmQgc2hyaW5rIGR5bmFtaWNhbGx5LgorCitucl9mcmVlX2lub2RlcworLS0tLS0tLS0tLS0tLS0KKworUmVwcmVzZW50cyB0aGUgIG51bWJlciBvZiBmcmVlIGlub2Rlcy4gSWUuIFRoZSBudW1iZXIgb2YgaW51c2UgaW5vZGVzIGlzCisobnJfaW5vZGVzIC0gbnJfZnJlZV9pbm9kZXMpLgorCitzdXBlci1uciBhbmQgc3VwZXItbWF4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FnYWluLCBzdXBlciAgYmxvY2sgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBrZXJuZWwsIGJ1dCBub3QgZnJlZWQuIFRoZQorZmlsZSBzdXBlci1tYXggIGNvbnRhaW5zICB0aGUgIG1heGltdW0gIG51bWJlciAgb2Ygc3VwZXIgYmxvY2sgaGFuZGxlcnMsIHdoZXJlCitzdXBlci1uciBzaG93cyB0aGUgbnVtYmVyIG9mIGN1cnJlbnRseSBhbGxvY2F0ZWQgb25lcy4KKworRXZlcnkgbW91bnRlZCBmaWxlIHN5c3RlbSBuZWVkcyBhIHN1cGVyIGJsb2NrLCBzbyBpZiB5b3UgcGxhbiB0byBtb3VudCBsb3RzIG9mCitmaWxlIHN5c3RlbXMsIHlvdSBtYXkgd2FudCB0byBpbmNyZWFzZSB0aGVzZSBudW1iZXJzLgorCithaW8tbnIgYW5kIGFpby1tYXgtbnIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithaW8tbnIgaXMgdGhlIHJ1bm5pbmcgdG90YWwgb2YgdGhlIG51bWJlciBvZiBldmVudHMgc3BlY2lmaWVkIG9uIHRoZQoraW9fc2V0dXAgc3lzdGVtIGNhbGwgZm9yIGFsbCBjdXJyZW50bHkgYWN0aXZlIGFpbyBjb250ZXh0cy4gIElmIGFpby1ucgorcmVhY2hlcyBhaW8tbWF4LW5yIHRoZW4gaW9fc2V0dXAgd2lsbCBmYWlsIHdpdGggRUFHQUlOLiAgTm90ZSB0aGF0CityYWlzaW5nIGFpby1tYXgtbnIgZG9lcyBub3QgcmVzdWx0IGluIHRoZSBwcmUtYWxsb2NhdGlvbiBvciByZS1zaXppbmcKK29mIGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLgorCisyLjIgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIC0gTWlzY2VsbGFuZW91cyBiaW5hcnkgZm9ybWF0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVzaWRlcyB0aGVzZSAgZmlsZXMsIHRoZXJlIGlzIHRoZSBzdWJkaXJlY3RvcnkgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjLiBUaGlzCitoYW5kbGVzIHRoZSBrZXJuZWwgc3VwcG9ydCBmb3IgbWlzY2VsbGFuZW91cyBiaW5hcnkgZm9ybWF0cy4KKworQmluZm10X21pc2MgcHJvdmlkZXMgIHRoZSBhYmlsaXR5IHRvIHJlZ2lzdGVyIGFkZGl0aW9uYWwgYmluYXJ5IGZvcm1hdHMgdG8gdGhlCitLZXJuZWwgd2l0aG91dCAgY29tcGlsaW5nICBhbiBhZGRpdGlvbmFsIG1vZHVsZS9rZXJuZWwuIFRoZXJlZm9yZSwgYmluZm10X21pc2MKK25lZWRzIHRvICBrbm93IG1hZ2ljIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyBvciB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIG9mIHRoZQorYmluYXJ5LgorCitJdCB3b3JrcyBieSBtYWludGFpbmluZyBhIGxpbmtlZCBsaXN0IG9mIHN0cnVjdHMgdGhhdCBjb250YWluIGEgZGVzY3JpcHRpb24gb2YKK2EgYmluYXJ5ICBmb3JtYXQsICBpbmNsdWRpbmcgIGEgIG1hZ2ljICB3aXRoIHNpemUgKG9yIHRoZSBmaWxlbmFtZSBleHRlbnNpb24pLAorb2Zmc2V0IGFuZCAgbWFzaywgIGFuZCAgdGhlICBpbnRlcnByZXRlciBuYW1lLiBPbiByZXF1ZXN0IGl0IGludm9rZXMgdGhlIGdpdmVuCitpbnRlcnByZXRlciB3aXRoICB0aGUgIG9yaWdpbmFsICBwcm9ncmFtICBhcyAgYXJndW1lbnQsICBhcyAgYmluZm10X2phdmEgIGFuZAorYmluZm10X2VtODYgYW5kICBiaW5mbXRfbXogIGRvLiAgU2luY2UgYmluZm10X21pc2MgZG9lcyBub3QgZGVmaW5lIGFueSBkZWZhdWx0CitiaW5hcnktZm9ybWF0cywgeW91IGhhdmUgdG8gcmVnaXN0ZXIgYW4gYWRkaXRpb25hbCBiaW5hcnktZm9ybWF0LgorCitUaGVyZSBhcmUgdHdvIGdlbmVyYWwgZmlsZXMgaW4gYmluZm10X21pc2MgYW5kIG9uZSBmaWxlIHBlciByZWdpc3RlcmVkIGZvcm1hdC4KK1RoZSB0d28gZ2VuZXJhbCBmaWxlcyBhcmUgcmVnaXN0ZXIgYW5kIHN0YXR1cy4KKworUmVnaXN0ZXJpbmcgYSBuZXcgYmluYXJ5IGZvcm1hdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZWdpc3RlciBhIG5ldyBiaW5hcnkgZm9ybWF0IHlvdSBoYXZlIHRvIGlzc3VlIHRoZSBjb21tYW5kCisKKyAgZWNobyA6bmFtZTp0eXBlOm9mZnNldDptYWdpYzptYXNrOmludGVycHJldGVyOiA+IC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlciAKKworCisKK3dpdGggYXBwcm9wcmlhdGUgIG5hbWUgKHRoZSBuYW1lIGZvciB0aGUgL3Byb2MtZGlyIGVudHJ5KSwgb2Zmc2V0IChkZWZhdWx0cyB0bworMCwgaWYgIG9taXR0ZWQpLCAgbWFnaWMsIG1hc2sgKHdoaWNoIGNhbiBiZSBvbWl0dGVkLCBkZWZhdWx0cyB0byBhbGwgMHhmZikgYW5kCitsYXN0IGJ1dCAgbm90ICBsZWFzdCwgIHRoZSAgaW50ZXJwcmV0ZXIgdGhhdCBpcyB0byBiZSBpbnZva2VkIChmb3IgZXhhbXBsZSBhbmQKK3Rlc3RpbmcgL2Jpbi9lY2hvKS4gIFR5cGUgIGNhbiBiZSBNIGZvciB1c3VhbCBtYWdpYyBtYXRjaGluZyBvciBFIGZvciBmaWxlbmFtZQorZXh0ZW5zaW9uIG1hdGNoaW5nIChnaXZlIGV4dGVuc2lvbiBpbiBwbGFjZSBvZiBtYWdpYykuCisKK0NoZWNrIG9yIHJlc2V0IHRoZSBzdGF0dXMgb2YgdGhlIGJpbmFyeSBmb3JtYXQgaGFuZGxlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSAgZG8gYSBjYXQgb24gdGhlIGZpbGUgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3N0YXR1cywgeW91IHdpbGwgZ2V0IHRoZQorY3VycmVudCBzdGF0dXMgKGVuYWJsZWQvZGlzYWJsZWQpIG9mIGJpbmZtdF9taXNjLiBDaGFuZ2UgdGhlIHN0YXR1cyBieSBlY2hvaW5nCiswIChkaXNhYmxlcykgIG9yICAxICAoZW5hYmxlcykgIG9yICAtMSAgKGNhdXRpb246ICB0aGlzICBjbGVhcnMgYWxsIHByZXZpb3VzbHkKK3JlZ2lzdGVyZWQgYmluYXJ5ICBmb3JtYXRzKSAgdG8gc3RhdHVzLiBGb3IgZXhhbXBsZSBlY2hvIDAgPiBzdGF0dXMgdG8gZGlzYWJsZQorYmluZm10X21pc2MgKHRlbXBvcmFyaWx5KS4KKworU3RhdHVzIG9mIGEgc2luZ2xlIGhhbmRsZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VhY2ggcmVnaXN0ZXJlZCAgaGFuZGxlciBoYXMgYW4gZW50cnkgaW4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjLiBUaGVzZSBmaWxlcworcGVyZm9ybSB0aGUgIHNhbWUgZnVuY3Rpb24gYXMgc3RhdHVzLCBidXQgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgYWN0dWFsCitiaW5hcnkgZm9ybWF0LiAgQnkgIGNhdGluZyB0aGlzIGZpbGUsIHlvdSBhbHNvIHJlY2VpdmUgYWxsIHJlbGF0ZWQgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBpbnRlcnByZXRlci9tYWdpYyBvZiB0aGUgYmluZm10LgorCitFeGFtcGxlIHVzYWdlIG9mIGJpbmZtdF9taXNjIChlbXVsYXRlIGJpbmZtdF9qYXZhKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBjZCAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgIAorICBlY2hvICc6SmF2YTpNOjpceGNhXHhmZVx4YmFceGJlOjovdXNyL2xvY2FsL2phdmEvYmluL2phdmF3cmFwcGVyOicgPiByZWdpc3RlciAgCisgIGVjaG8gJzpIVE1MOkU6Omh0bWw6Oi91c3IvbG9jYWwvamF2YS9iaW4vYXBwbGV0dmlld2VyOicgPiByZWdpc3RlciAgCisgIGVjaG8gJzpBcHBsZXQ6TTo6PCEtLWFwcGxldDo6L3Vzci9sb2NhbC9qYXZhL2Jpbi9hcHBsZXR2aWV3ZXI6JyA+IHJlZ2lzdGVyIAorICBlY2hvICc6REVYRTpNOjpceDBlREVYOjovdXNyL2Jpbi9kb3NleGVjOicgPiByZWdpc3RlciAKKworCitUaGVzZSBmb3VyICBsaW5lcyAgYWRkICBzdXBwb3J0ICBmb3IgIEphdmEgIGV4ZWN1dGFibGVzIGFuZCBKYXZhIGFwcGxldHMgKGxpa2UKK2JpbmZtdF9qYXZhLCBhZGRpdGlvbmFsbHkgIHJlY29nbml6aW5nIHRoZSAuaHRtbCBleHRlbnNpb24gd2l0aCBubyBuZWVkIHRvIHB1dAorPCEtLWFwcGxldD4gdG8gIGV2ZXJ5ICBhcHBsZXQgIGZpbGUpLiAgWW91ICBoYXZlICB0byAgaW5zdGFsbCAgdGhlIEpESyBhbmQgdGhlCitzaGVsbC1zY3JpcHQgL3Vzci9sb2NhbC9qYXZhL2Jpbi9qYXZhd3JhcHBlciAgdG9vLiAgSXQgIHdvcmtzICBhcm91bmQgIHRoZQorYnJva2VubmVzcyBvZiAgdGhlIEphdmEgZmlsZW5hbWUgaGFuZGxpbmcuIFRvIGFkZCBhIEphdmEgYmluYXJ5LCBqdXN0IGNyZWF0ZSBhCitsaW5rIHRvIHRoZSBjbGFzcy1maWxlIHNvbWV3aGVyZSBpbiB0aGUgcGF0aC4KKworMi4zIC9wcm9jL3N5cy9rZXJuZWwgLSBnZW5lcmFsIGtlcm5lbCBwYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkaXJlY3RvcnkgIHJlZmxlY3RzICBnZW5lcmFsICBrZXJuZWwgIGJlaGF2aW9ycy4gQXMgSSd2ZSBzYWlkIGJlZm9yZSwgdGhlCitjb250ZW50cyBkZXBlbmQgIG9uICB5b3VyICBjb25maWd1cmF0aW9uLiAgSGVyZSB5b3UnbGwgZmluZCB0aGUgbW9zdCBpbXBvcnRhbnQKK2ZpbGVzLCBhbG9uZyB3aXRoIGRlc2NyaXB0aW9ucyBvZiB3aGF0IHRoZXkgbWVhbiBhbmQgaG93IHRvIHVzZSB0aGVtLgorCithY2N0CistLS0tCisKK1RoZSBmaWxlIGNvbnRhaW5zIHRocmVlIHZhbHVlczsgaGlnaHdhdGVyLCBsb3d3YXRlciwgYW5kIGZyZXF1ZW5jeS4KKworSXQgZXhpc3RzICBvbmx5ICB3aGVuICBCU0Qtc3R5bGUgIHByb2Nlc3MgIGFjY291bnRpbmcgaXMgZW5hYmxlZC4gVGhlc2UgdmFsdWVzCitjb250cm9sIGl0cyBiZWhhdmlvci4gSWYgdGhlIGZyZWUgc3BhY2Ugb24gdGhlIGZpbGUgc3lzdGVtIHdoZXJlIHRoZSBsb2cgbGl2ZXMKK2dvZXMgYmVsb3cgIGxvd3dhdGVyICBwZXJjZW50YWdlLCAgYWNjb3VudGluZyAgc3VzcGVuZHMuICBJZiAgaXQgIGdvZXMgIGFib3ZlCitoaWdod2F0ZXIgcGVyY2VudGFnZSwgIGFjY291bnRpbmcgIHJlc3VtZXMuIEZyZXF1ZW5jeSBkZXRlcm1pbmVzIGhvdyBvZnRlbiB5b3UKK2NoZWNrIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSAodmFsdWUgaXMgaW4gc2Vjb25kcykuIERlZmF1bHQgc2V0dGluZ3MgYXJlOiA0LAorMiwgYW5kICAzMC4gIFRoYXQgaXMsIHN1c3BlbmQgYWNjb3VudGluZyBpZiB0aGVyZSBpcyBsZXNzIHRoYW4gMiBwZXJjZW50IGZyZWU7CityZXN1bWUgaXQgIGlmIHdlIGhhdmUgYSB2YWx1ZSBvZiAzIG9yIG1vcmUgcGVyY2VudDsgY29uc2lkZXIgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSB2YWxpZCBmb3IgMzAgc2Vjb25kcworCitjdHJsLWFsdC1kZWwKKy0tLS0tLS0tLS0tLQorCitXaGVuIHRoZSB2YWx1ZSBpbiB0aGlzIGZpbGUgaXMgMCwgY3RybC1hbHQtZGVsIGlzIHRyYXBwZWQgYW5kIHNlbnQgdG8gdGhlIGluaXQKK3Byb2dyYW0gdG8gIGhhbmRsZSBhIGdyYWNlZnVsIHJlc3RhcnQuIEhvd2V2ZXIsIHdoZW4gdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhdAoremVybywgTGludXgncyAgcmVhY3Rpb24gIHRvICB0aGlzIGtleSBjb21iaW5hdGlvbiB3aWxsIGJlIGFuIGltbWVkaWF0ZSByZWJvb3QsCit3aXRob3V0IHN5bmNpbmcgaXRzIGRpcnR5IGJ1ZmZlcnMuCisKK1tOT1RFXQorICAgIFdoZW4gYSAgcHJvZ3JhbSAgKGxpa2UgIGRvc2VtdSkgIGhhcyAgdGhlICBrZXlib2FyZCAgaW4gIHJhdyAgbW9kZSwgIHRoZQorICAgIGN0cmwtYWx0LWRlbCBpcyAgaW50ZXJjZXB0ZWQgIGJ5ICB0aGUgIHByb2dyYW0gIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhlCisgICAga2VybmVsIHR0eSAgbGF5ZXIsICBhbmQgIGl0IGlzIHVwIHRvIHRoZSBwcm9ncmFtIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGgKKyAgICBpdC4KKworZG9tYWlubmFtZSBhbmQgaG9zdG5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGZpbGVzICBjYW4gIGJlIGNvbnRyb2xsZWQgdG8gc2V0IHRoZSBOSVMgZG9tYWlubmFtZSBhbmQgaG9zdG5hbWUgb2YgeW91cgorYm94LiBGb3IgdGhlIGNsYXNzaWMgZGFya3N0YXIuZnJvcC5vcmcgYSBzaW1wbGU6CisKKyAgIyBlY2hvICJkYXJrc3RhciIgPiAvcHJvYy9zeXMva2VybmVsL2hvc3RuYW1lIAorICAjIGVjaG8gImZyb3Aub3JnIiA+IC9wcm9jL3N5cy9rZXJuZWwvZG9tYWlubmFtZSAKKworCit3b3VsZCBzdWZmaWNlIHRvIHNldCB5b3VyIGhvc3RuYW1lIGFuZCBOSVMgZG9tYWlubmFtZS4KKworb3NyZWxlYXNlLCBvc3R5cGUgYW5kIHZlcnNpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBuYW1lcyBtYWtlIGl0IHByZXR0eSBvYnZpb3VzIHdoYXQgdGhlc2UgZmllbGRzIGNvbnRhaW46CisKKyAgPiBjYXQgL3Byb2Mvc3lzL2tlcm5lbC9vc3JlbGVhc2UgCisgIDIuMi4xMiAKKyAgIAorICA+IGNhdCAvcHJvYy9zeXMva2VybmVsL29zdHlwZSAKKyAgTGludXggCisgICAKKyAgPiBjYXQgL3Byb2Mvc3lzL2tlcm5lbC92ZXJzaW9uIAorICAjNCBGcmkgT2N0IDEgMTI6NDE6MTQgUERUIDE5OTkgCisKKworVGhlIGZpbGVzICBvc3JlbGVhc2UgYW5kIG9zdHlwZSBzaG91bGQgYmUgY2xlYXIgZW5vdWdoLiBWZXJzaW9uIG5lZWRzIGEgbGl0dGxlCittb3JlIGNsYXJpZmljYXRpb24uICBUaGUgICM0IG1lYW5zIHRoYXQgdGhpcyBpcyB0aGUgNHRoIGtlcm5lbCBidWlsdCBmcm9tIHRoaXMKK3NvdXJjZSBiYXNlIGFuZCB0aGUgZGF0ZSBhZnRlciBpdCBpbmRpY2F0ZXMgdGhlIHRpbWUgdGhlIGtlcm5lbCB3YXMgYnVpbHQuIFRoZQorb25seSB3YXkgdG8gdHVuZSB0aGVzZSB2YWx1ZXMgaXMgdG8gcmVidWlsZCB0aGUga2VybmVsLgorCitwYW5pYworLS0tLS0KKworVGhlIHZhbHVlICBpbiAgdGhpcyAgZmlsZSAgcmVwcmVzZW50cyAgdGhlICBudW1iZXIgb2Ygc2Vjb25kcyB0aGUga2VybmVsIHdhaXRzCitiZWZvcmUgcmVib290aW5nICBvbiAgYSAgcGFuaWMuICBXaGVuICB5b3UgIHVzZSAgdGhlICBzb2Z0d2FyZSAgd2F0Y2hkb2csICB0aGUKK3JlY29tbWVuZGVkIHNldHRpbmcgIGlzICA2MC4gSWYgc2V0IHRvIDAsIHRoZSBhdXRvIHJlYm9vdCBhZnRlciBhIGtlcm5lbCBwYW5pYworaXMgZGlzYWJsZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuCisKK3ByaW50aworLS0tLS0tCisKK1RoZSBmb3VyIHZhbHVlcyBpbiBwcmludGsgZGVub3RlCisqIGNvbnNvbGVfbG9nbGV2ZWwsCisqIGRlZmF1bHRfbWVzc2FnZV9sb2dsZXZlbCwKKyogbWluaW11bV9jb25zb2xlX2xvZ2xldmVsIGFuZAorKiBkZWZhdWx0X2NvbnNvbGVfbG9nbGV2ZWwKK3Jlc3BlY3RpdmVseS4KKworVGhlc2UgdmFsdWVzICBpbmZsdWVuY2UgIHByaW50aygpICBiZWhhdmlvciAgd2hlbiAgcHJpbnRpbmcgIG9yICBsb2dnaW5nIGVycm9yCittZXNzYWdlcywgd2hpY2ggIGNvbWUgIGZyb20gIGluc2lkZSAgdGhlICBrZXJuZWwuICBTZWUgIHN5c2xvZygyKSAgZm9yICBtb3JlCitpbmZvcm1hdGlvbiBvbiB0aGUgZGlmZmVyZW50IGxvZyBsZXZlbHMuCisKK2NvbnNvbGVfbG9nbGV2ZWwKKy0tLS0tLS0tLS0tLS0tLS0KKworTWVzc2FnZXMgd2l0aCBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoaXMgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLgorCitkZWZhdWx0X21lc3NhZ2VfbGV2ZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNZXNzYWdlcyB3aXRob3V0IGFuIGV4cGxpY2l0IHByaW9yaXR5IHdpbGwgYmUgcHJpbnRlZCB3aXRoIHRoaXMgcHJpb3JpdHkuCisKK21pbmltdW1fY29uc29sZV9sb2dsZXZlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01pbmltdW0gKGhpZ2hlc3QpIHZhbHVlIHRvIHdoaWNoIHRoZSBjb25zb2xlX2xvZ2xldmVsIGNhbiBiZSBzZXQuCisKK2RlZmF1bHRfY29uc29sZV9sb2dsZXZlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RlZmF1bHQgdmFsdWUgZm9yIGNvbnNvbGVfbG9nbGV2ZWwuCisKK3NnLWJpZy1idWZmCistLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgIHNob3dzICB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJpYyBTQ1NJIChzZykgYnVmZmVyLiBBdCB0aGlzIHBvaW50LCB5b3UKK2Nhbid0IHR1bmUgIGl0ICB5ZXQsICBidXQgIHlvdSAgY2FuICBjaGFuZ2UgIGl0ICBhdCAgY29tcGlsZSAgdGltZSAgYnkgZWRpdGluZworaW5jbHVkZS9zY3NpL3NnLmggYW5kIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBTR19CSUdfQlVGRi4KKworSWYgeW91IHVzZSBhIHNjYW5uZXIgd2l0aCBTQU5FIChTY2FubmVyIEFjY2VzcyBOb3cgRWFzeSkgeW91IG1pZ2h0IHdhbnQgdG8gc2V0Cit0aGlzIHRvIGEgaGlnaGVyIHZhbHVlLiBSZWZlciB0byB0aGUgU0FORSBkb2N1bWVudGF0aW9uIG9uIHRoaXMgaXNzdWUuCisKK21vZHByb2JlCistLS0tLS0tLQorCitUaGUgbG9jYXRpb24gIHdoZXJlICB0aGUgIG1vZHByb2JlICBiaW5hcnkgIGlzICBsb2NhdGVkLiAgVGhlIGtlcm5lbCB1c2VzIHRoaXMKK3Byb2dyYW0gdG8gbG9hZCBtb2R1bGVzIG9uIGRlbWFuZC4KKwordW5rbm93bl9ubWlfcGFuaWMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB2YWx1ZSBpbiB0aGlzIGZpbGUgYWZmZWN0cyBiZWhhdmlvciBvZiBoYW5kbGluZyBOTUkuIFdoZW4gdGhlIHZhbHVlIGlzCitub24temVybywgdW5rbm93biBOTUkgaXMgdHJhcHBlZCBhbmQgdGhlbiBwYW5pYyBvY2N1cnMuIEF0IHRoYXQgdGltZSwga2VybmVsCitkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkIG9uIGNvbnNvbGUuCisKK05NSSBzd2l0Y2ggdGhhdCBtb3N0IElBMzIgc2VydmVycyBoYXZlIGZpcmVzIHVua25vd24gTk1JIHVwLCBmb3IgZXhhbXBsZS4KK0lmIGEgc3lzdGVtIGhhbmdzIHVwLCB0cnkgcHJlc3NpbmcgdGhlIE5NSSBzd2l0Y2guCisKK1tOT1RFXQorICAgVGhpcyBmdW5jdGlvbiBhbmQgb3Byb2ZpbGUgc2hhcmUgYSBOTUkgY2FsbGJhY2suIFRoZXJlZm9yZSB0aGlzIGZ1bmN0aW9uCisgICBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIG9wcm9maWxlIGlzIGFjdGl2YXRlZC4KKyAgIEFuZCBOTUkgd2F0Y2hkb2cgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIHRoZSB2YWx1ZSBpbiB0aGlzIGZpbGUgaXMgc2V0IHRvCisgICBub24temVyby4KKworCisyLjQgL3Byb2Mvc3lzL3ZtIC0gVGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGVzICBpbiAgdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSB0aGUgb3BlcmF0aW9uIG9mIHRoZSB2aXJ0dWFsCittZW1vcnkgKFZNKSAgc3Vic3lzdGVtICBvZiAgdGhlICBMaW51eCAga2VybmVsLgorCit2ZnNfY2FjaGVfcHJlc3N1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitDb250cm9scyB0aGUgdGVuZGVuY3kgb2YgdGhlIGtlcm5lbCB0byByZWNsYWltIHRoZSBtZW1vcnkgd2hpY2ggaXMgdXNlZCBmb3IKK2NhY2hpbmcgb2YgZGlyZWN0b3J5IGFuZCBpbm9kZSBvYmplY3RzLgorCitBdCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB2ZnNfY2FjaGVfcHJlc3N1cmU9MTAwIHRoZSBrZXJuZWwgd2lsbCBhdHRlbXB0IHRvCityZWNsYWltIGRlbnRyaWVzIGFuZCBpbm9kZXMgYXQgYSAiZmFpciIgcmF0ZSB3aXRoIHJlc3BlY3QgdG8gcGFnZWNhY2hlIGFuZAorc3dhcGNhY2hlIHJlY2xhaW0uICBEZWNyZWFzaW5nIHZmc19jYWNoZV9wcmVzc3VyZSBjYXVzZXMgdGhlIGtlcm5lbCB0byBwcmVmZXIKK3RvIHJldGFpbiBkZW50cnkgYW5kIGlub2RlIGNhY2hlcy4gIEluY3JlYXNpbmcgdmZzX2NhY2hlX3ByZXNzdXJlIGJleW9uZCAxMDAKK2NhdXNlcyB0aGUga2VybmVsIHRvIHByZWZlciB0byByZWNsYWltIGRlbnRyaWVzIGFuZCBpbm9kZXMuCisKK2RpcnR5X2JhY2tncm91bmRfcmF0aW8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0b3RhbCBzeXN0ZW0gbWVtb3J5LCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGF0IHdoaWNoCit0aGUgcGRmbHVzaCBiYWNrZ3JvdW5kIHdyaXRlYmFjayBkYWVtb24gd2lsbCBzdGFydCB3cml0aW5nIG91dCBkaXJ0eSBkYXRhLgorCitkaXJ0eV9yYXRpbworLS0tLS0tLS0tLS0tLS0tLS0KKworQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0b3RhbCBzeXN0ZW0gbWVtb3J5LCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGF0IHdoaWNoCithIHByb2Nlc3Mgd2hpY2ggaXMgZ2VuZXJhdGluZyBkaXNrIHdyaXRlcyB3aWxsIGl0c2VsZiBzdGFydCB3cml0aW5nIG91dCBkaXJ0eQorZGF0YS4KKworZGlydHlfd3JpdGViYWNrX2NlbnRpc2VjcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcGRmbHVzaCB3cml0ZWJhY2sgZGFlbW9ucyB3aWxsIHBlcmlvZGljYWxseSB3YWtlIHVwIGFuZCB3cml0ZSBgb2xkJyBkYXRhCitvdXQgdG8gZGlzay4gIFRoaXMgdHVuYWJsZSBleHByZXNzZXMgdGhlIGludGVydmFsIGJldHdlZW4gdGhvc2Ugd2FrZXVwcywgaW4KKzEwMCd0aHMgb2YgYSBzZWNvbmQuCisKK1NldHRpbmcgdGhpcyB0byB6ZXJvIGRpc2FibGVzIHBlcmlvZGljIHdyaXRlYmFjayBhbHRvZ2V0aGVyLgorCitkaXJ0eV9leHBpcmVfY2VudGlzZWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdHVuYWJsZSBpcyB1c2VkIHRvIGRlZmluZSB3aGVuIGRpcnR5IGRhdGEgaXMgb2xkIGVub3VnaCB0byBiZSBlbGlnaWJsZQorZm9yIHdyaXRlb3V0IGJ5IHRoZSBwZGZsdXNoIGRhZW1vbnMuICBJdCBpcyBleHByZXNzZWQgaW4gMTAwJ3RocyBvZiBhIHNlY29uZC4gCitEYXRhIHdoaWNoIGhhcyBiZWVuIGRpcnR5IGluLW1lbW9yeSBmb3IgbG9uZ2VyIHRoYW4gdGhpcyBpbnRlcnZhbCB3aWxsIGJlCit3cml0dGVuIG91dCBuZXh0IHRpbWUgYSBwZGZsdXNoIGRhZW1vbiB3YWtlcyB1cC4KKworbGVnYWN5X3ZhX2xheW91dAorLS0tLS0tLS0tLS0tLS0tLQorCitJZiBub24temVybywgdGhpcyBzeXNjdGwgZGlzYWJsZXMgdGhlIG5ldyAzMi1iaXQgbW1hcCBtbWFwIGxheW91dCAtIHRoZSBrZXJuZWwKK3dpbGwgdXNlIHRoZSBsZWdhY3kgKDIuNCkgbGF5b3V0IGZvciBhbGwgcHJvY2Vzc2VzLgorCitsb3dlcl96b25lX3Byb3RlY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3Igc29tZSBzcGVjaWFsaXNlZCB3b3JrbG9hZHMgb24gaGlnaG1lbSBtYWNoaW5lcyBpdCBpcyBkYW5nZXJvdXMgZm9yCit0aGUga2VybmVsIHRvIGFsbG93IHByb2Nlc3MgbWVtb3J5IHRvIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSAibG93bWVtIgorem9uZS4gIFRoaXMgaXMgYmVjYXVzZSB0aGF0IG1lbW9yeSBjb3VsZCB0aGVuIGJlIHBpbm5lZCB2aWEgdGhlIG1sb2NrKCkKK3N5c3RlbSBjYWxsLCBvciBieSB1bmF2YWlsYWJpbGl0eSBvZiBzd2Fwc3BhY2UuCisKK0FuZCBvbiBsYXJnZSBoaWdobWVtIG1hY2hpbmVzIHRoaXMgbGFjayBvZiByZWNsYWltYWJsZSBsb3dtZW0gbWVtb3J5CitjYW4gYmUgZmF0YWwuCisKK1NvIHRoZSBMaW51eCBwYWdlIGFsbG9jYXRvciBoYXMgYSBtZWNoYW5pc20gd2hpY2ggcHJldmVudHMgYWxsb2NhdGlvbnMKK3doaWNoIF9jb3VsZF8gdXNlIGhpZ2htZW0gZnJvbSB1c2luZyB0b28gbXVjaCBsb3dtZW0uICBUaGlzIG1lYW5zIHRoYXQKK2EgY2VydGFpbiBhbW91bnQgb2YgbG93bWVtIGlzIGRlZmVuZGVkIGZyb20gdGhlIHBvc3NpYmlsaXR5IG9mIGJlaW5nCitjYXB0dXJlZCBpbnRvIHBpbm5lZCB1c2VyIG1lbW9yeS4KKworKFRoZSBzYW1lIGFyZ3VtZW50IGFwcGxpZXMgdG8gdGhlIG9sZCAxNiBtZWdhYnl0ZSBJU0EgRE1BIHJlZ2lvbi4gIFRoaXMKK21lY2hhbmlzbSB3aWxsIGFsc28gZGVmZW5kIHRoYXQgcmVnaW9uIGZyb20gYWxsb2NhdGlvbnMgd2hpY2ggY291bGQgdXNlCitoaWdobWVtIG9yIGxvd21lbSkuCisKK1RoZSBgbG93ZXJfem9uZV9wcm90ZWN0aW9uJyB0dW5hYmxlIGRldGVybWluZXMgaG93IGFnZ3Jlc3NpdmUgdGhlIGtlcm5lbCBpcworaW4gZGVmZW5kaW5nIHRoZXNlIGxvd2VyIHpvbmVzLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgemVybyAtIG5vCitwcm90ZWN0aW9uIGF0IGFsbC4KKworSWYgeW91IGhhdmUgYSBtYWNoaW5lIHdoaWNoIHVzZXMgaGlnaG1lbSBvciBJU0EgRE1BIGFuZCB5b3VyCithcHBsaWNhdGlvbnMgYXJlIHVzaW5nIG1sb2NrKCksIG9yIGlmIHlvdSBhcmUgcnVubmluZyB3aXRoIG5vIHN3YXAgdGhlbgoreW91IHByb2JhYmx5IHNob3VsZCBpbmNyZWFzZSB0aGUgbG93ZXJfem9uZV9wcm90ZWN0aW9uIHNldHRpbmcuCisKK1RoZSB1bml0cyBvZiB0aGlzIHR1bmFibGUgYXJlIGZhaXJseSB2YWd1ZS4gIEl0IGlzIGFwcHJveGltYXRlbHkgZXF1YWwKK3RvICJtZWdhYnl0ZXMiLiAgU28gc2V0dGluZyBsb3dlcl96b25lX3Byb3RlY3Rpb249MTAwIHdpbGwgcHJvdGVjdCBhcm91bmQgMTAwCittZWdhYnl0ZXMgb2YgdGhlIGxvd21lbSB6b25lIGZyb20gdXNlciBhbGxvY2F0aW9ucy4gIEl0IHdpbGwgYWxzbyBtYWtlCit0aG9zZSAxMDAgbWVnYWJ5dGVzIHVuYXZhbGlhYmxlIGZvciB1c2UgYnkgYXBwbGljYXRpb25zIGFuZCBieQorcGFnZWNhY2hlLCBzbyB0aGVyZSBpcyBhIGNvc3QuCisKK1RoZSBlZmZlY3RzIG9mIHRoaXMgdHVuYWJsZSBtYXkgYmUgb2JzZXJ2ZWQgYnkgbW9uaXRvcmluZworL3Byb2MvbWVtaW5mbzpMb3dGcmVlLiAgV3JpdGUgYSBzaW5nbGUgaHVnZSBmaWxlIGFuZCBvYnNlcnZlIHRoZSBwb2ludAorYXQgd2hpY2ggTG93RnJlZSBjZWFzZXMgdG8gZmFsbC4KKworQSByZWFzb25hYmxlIHZhbHVlIGZvciBsb3dlcl96b25lX3Byb3RlY3Rpb24gaXMgMTAwLgorCitwYWdlLWNsdXN0ZXIKKy0tLS0tLS0tLS0tLQorCitwYWdlLWNsdXN0ZXIgY29udHJvbHMgdGhlIG51bWJlciBvZiBwYWdlcyB3aGljaCBhcmUgd3JpdHRlbiB0byBzd2FwIGluCithIHNpbmdsZSBhdHRlbXB0LiAgVGhlIHN3YXAgSS9PIHNpemUuCisKK0l0IGlzIGEgbG9nYXJpdGhtaWMgdmFsdWUgLSBzZXR0aW5nIGl0IHRvIHplcm8gbWVhbnMgIjEgcGFnZSIsIHNldHRpbmcKK2l0IHRvIDEgbWVhbnMgIjIgcGFnZXMiLCBzZXR0aW5nIGl0IHRvIDIgbWVhbnMgIjQgcGFnZXMiLCBldGMuCisKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIHRocmVlIChlaWdodCBwYWdlcyBhdCBhIHRpbWUpLiAgVGhlcmUgbWF5IGJlIHNvbWUKK3NtYWxsIGJlbmVmaXRzIGluIHR1bmluZyB0aGlzIHRvIGEgZGlmZmVyZW50IHZhbHVlIGlmIHlvdXIgd29ya2xvYWQgaXMKK3N3YXAtaW50ZW5zaXZlLgorCitvdmVyY29tbWl0X21lbW9yeQorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlICBjb250YWlucyAgb25lICB2YWx1ZS4gIFRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIGlzIHVzZWQgdG8gZGVjaWRlIGlmCit0aGVyZSdzIGVub3VnaCAgbWVtb3J5OiAgaWYgIHRoZSAgdmFsdWUgb2Ygb3ZlcmNvbW1pdF9tZW1vcnkgaXMgcG9zaXRpdmUsIHRoZW4KK3RoZXJlJ3MgYWx3YXlzICBlbm91Z2ggIG1lbW9yeS4gVGhpcyBpcyBhIHVzZWZ1bCBmZWF0dXJlLCBzaW5jZSBwcm9ncmFtcyBvZnRlbgorbWFsbG9jKCkgaHVnZSAgYW1vdW50cyAgb2YgIG1lbW9yeSAnanVzdCBpbiBjYXNlJywgd2hpbGUgdGhleSBvbmx5IHVzZSBhIHNtYWxsCitwYXJ0IG9mICBpdC4gIExlYXZpbmcgIHRoaXMgdmFsdWUgYXQgMCB3aWxsIGxlYWQgdG8gdGhlIGZhaWx1cmUgb2Ygc3VjaCBhIGh1Z2UKK21hbGxvYygpLCB3aGVuIGluIGZhY3QgdGhlIHN5c3RlbSBoYXMgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIHByb2dyYW0gdG8gcnVuLgorCitPbiB0aGUgIG90aGVyICBoYW5kLCAgZW5hYmxpbmcgdGhpcyBmZWF0dXJlIGNhbiBjYXVzZSB5b3UgdG8gcnVuIG91dCBvZiBtZW1vcnkKK2FuZCB0aHJhc2ggdGhlIHN5c3RlbSB0byBkZWF0aCwgc28gbGFyZ2UgYW5kL29yIGltcG9ydGFudCBzZXJ2ZXJzIHdpbGwgd2FudCB0bworc2V0IHRoaXMgdmFsdWUgdG8gMC4KKworbnJfaHVnZXBhZ2VzIGFuZCBodWdldGxiX3NobV9ncm91cAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitucl9odWdlcGFnZXMgY29uZmlndXJlcyBudW1iZXIgb2YgaHVnZXRsYiBwYWdlIHJlc2VydmVkIGZvciB0aGUgc3lzdGVtLgorCitodWdldGxiX3NobV9ncm91cCBjb250YWlucyBncm91cCBpZCB0aGF0IGlzIGFsbG93ZWQgdG8gY3JlYXRlIFN5c1Ygc2hhcmVkCittZW1vcnkgc2VnbWVudCB1c2luZyBodWdldGxiIHBhZ2UuCisKK2xhcHRvcF9tb2RlCistLS0tLS0tLS0tLQorCitsYXB0b3BfbW9kZSBpcyBhIGtub2IgdGhhdCBjb250cm9scyAibGFwdG9wIG1vZGUiLiBBbGwgdGhlIHRoaW5ncyB0aGF0IGFyZQorY29udHJvbGxlZCBieSB0aGlzIGtub2IgYXJlIGRpc2N1c3NlZCBpbiBEb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dC4KKworYmxvY2tfZHVtcAorLS0tLS0tLS0tLQorCitibG9ja19kdW1wIGVuYWJsZXMgYmxvY2sgSS9PIGRlYnVnZ2luZyB3aGVuIHNldCB0byBhIG5vbnplcm8gdmFsdWUuIE1vcmUKK2luZm9ybWF0aW9uIG9uIGJsb2NrIEkvTyBkZWJ1Z2dpbmcgaXMgaW4gRG9jdW1lbnRhdGlvbi9sYXB0b3AtbW9kZS50eHQuCisKK3N3YXBfdG9rZW5fdGltZW91dAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBjb250YWlucyB2YWxpZCBob2xkIHRpbWUgb2Ygc3dhcCBvdXQgcHJvdGVjdGlvbiB0b2tlbi4gVGhlIExpbnV4CitWTSBoYXMgdG9rZW4gYmFzZWQgdGhyYXNoaW5nIGNvbnRyb2wgbWVjaGFuaXNtIGFuZCB1c2VzIHRoZSB0b2tlbiB0byBwcmV2ZW50Cit1bm5lY2Vzc2FyeSBwYWdlIGZhdWx0cyBpbiB0aHJhc2hpbmcgc2l0dWF0aW9uLiBUaGUgdW5pdCBvZiB0aGUgdmFsdWUgaXMKK3NlY29uZC4gVGhlIHZhbHVlIHdvdWxkIGJlIHVzZWZ1bCB0byB0dW5lIHRocmFzaGluZyBiZWhhdmlvci4KKworMi41IC9wcm9jL3N5cy9kZXYgLSBEZXZpY2Ugc3BlY2lmaWMgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDdXJyZW50bHkgdGhlcmUgaXMgb25seSBzdXBwb3J0IGZvciBDRFJPTSBkcml2ZXMsIGFuZCBmb3IgdGhvc2UsIHRoZXJlIGlzIG9ubHkKK29uZSByZWFkLW9ubHkgIGZpbGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ0QtUk9NIGRyaXZlcyBhdHRhY2hlZCB0bwordGhlIHN5c3RlbToKKworICA+Y2F0IC9wcm9jL3N5cy9kZXYvY2Ryb20vaW5mbyAKKyAgQ0QtUk9NIGluZm9ybWF0aW9uLCBJZDogY2Ryb20uYyAyLjU1IDE5OTkvMDQvMjUgCisgICAKKyAgZHJpdmUgbmFtZTogICAgICAgICAgICAgc3IwICAgICBoZGIgCisgIGRyaXZlIHNwZWVkOiAgICAgICAgICAgIDMyICAgICAgNDAgCisgIGRyaXZlICMgb2Ygc2xvdHM6ICAgICAgIDEgICAgICAgMCAKKyAgQ2FuIGNsb3NlIHRyYXk6ICAgICAgICAgMSAgICAgICAxIAorICBDYW4gb3BlbiB0cmF5OiAgICAgICAgICAxICAgICAgIDEgCisgIENhbiBsb2NrIHRyYXk6ICAgICAgICAgIDEgICAgICAgMSAKKyAgQ2FuIGNoYW5nZSBzcGVlZDogICAgICAgMSAgICAgICAxIAorICBDYW4gc2VsZWN0IGRpc2s6ICAgICAgICAwICAgICAgIDEgCisgIENhbiByZWFkIG11bHRpc2Vzc2lvbjogIDEgICAgICAgMSAKKyAgQ2FuIHJlYWQgTUNOOiAgICAgICAgICAgMSAgICAgICAxIAorICBSZXBvcnRzIG1lZGlhIGNoYW5nZWQ6ICAxICAgICAgIDEgCisgIENhbiBwbGF5IGF1ZGlvOiAgICAgICAgIDEgICAgICAgMSAKKworCitZb3Ugc2VlIHR3byBkcml2ZXMsIHNyMCBhbmQgaGRiLCBhbG9uZyB3aXRoIGEgbGlzdCBvZiB0aGVpciBmZWF0dXJlcy4KKworMi42IC9wcm9jL3N5cy9zdW5ycGMgLSBSZW1vdGUgcHJvY2VkdXJlIGNhbGxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkaXJlY3RvcnkgIGNvbnRhaW5zIGZvdXIgZmlsZXMsIHdoaWNoIGVuYWJsZSBvciBkaXNhYmxlIGRlYnVnZ2luZyBmb3IgdGhlCitSUEMgZnVuY3Rpb25zIE5GUywgTkZTLWRhZW1vbiwgUlBDIGFuZCBOTE0uIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgMC4gVGhleSBjYW4KK2JlIHNldCB0byBvbmUgdG8gdHVybiBkZWJ1Z2dpbmcgb24uIChUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwIGZvciBlYWNoKQorCisyLjcgL3Byb2Mvc3lzL25ldCAtIE5ldHdvcmtpbmcgc3R1ZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW50ZXJmYWNlICB0byAgdGhlICBuZXR3b3JraW5nICBwYXJ0cyAgb2YgIHRoZSAga2VybmVsICBpcyAgbG9jYXRlZCAgaW4KKy9wcm9jL3N5cy9uZXQuIFRhYmxlICAyLTMgIHNob3dzIGFsbCBwb3NzaWJsZSBzdWJkaXJlY3Rvcmllcy4gWW91IG1heSBzZWUgb25seQorc29tZSBvZiB0aGVtLCBkZXBlbmRpbmcgb24geW91ciBrZXJuZWwncyBjb25maWd1cmF0aW9uLgorCisKK1RhYmxlIDItMzogU3ViZGlyZWN0b3JpZXMgaW4gL3Byb2Mvc3lzL25ldCAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIERpcmVjdG9yeSBDb250ZW50ICAgICAgICAgICAgIERpcmVjdG9yeSAgQ29udGVudCAgICAgICAgICAgIAorIGNvcmUgICAgICBHZW5lcmFsIHBhcmFtZXRlciAgIGFwcGxldGFsayAgQXBwbGV0YWxrIHByb3RvY29sIAorIHVuaXggICAgICBVbml4IGRvbWFpbiBzb2NrZXRzIG5ldHJvbSAgICAgTkVUL1JPTSAgICAgICAgICAgIAorIDgwMiAgICAgICBFODAyIHByb3RvY29sICAgICAgIGF4MjUgICAgICAgQVgyNSAgICAgICAgICAgICAgIAorIGV0aGVybmV0ICBFdGhlcm5ldCBwcm90b2NvbCAgIHJvc2UgICAgICAgWC4yNSBQTFAgbGF5ZXIgICAgIAorIGlwdjQgICAgICBJUCB2ZXJzaW9uIDQgICAgICAgIHgyNSAgICAgICAgWC4yNSBwcm90b2NvbCAgICAgIAorIGlweCAgICAgICBJUFggICAgICAgICAgICAgICAgIHRva2VuLXJpbmcgSUJNIHRva2VuIHJpbmcgICAgIAorIGJyaWRnZSAgICBCcmlkZ2luZyAgICAgICAgICAgIGRlY25ldCAgICAgREVDIG5ldCAgICAgICAgICAgIAorIGlwdjYgICAgICBJUCB2ZXJzaW9uIDYgICAgICAgICAgICAgICAgICAgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworV2Ugd2lsbCAgY29uY2VudHJhdGUgIG9uIElQIG5ldHdvcmtpbmcgaGVyZS4gU2luY2UgQVgxNSwgWC4yNSwgYW5kIERFQyBOZXQgYXJlCitvbmx5IG1pbm9yIHBsYXllcnMgaW4gdGhlIExpbnV4IHdvcmxkLCB3ZSdsbCBza2lwIHRoZW0gaW4gdGhpcyBjaGFwdGVyLiBZb3UnbGwKK2ZpbmQgc29tZSAgc2hvcnQgIGluZm8gb24gQXBwbGV0YWxrIGFuZCBJUFggZnVydGhlciBvbiBpbiB0aGlzIGNoYXB0ZXIuIFJldmlldwordGhlIG9ubGluZSAgZG9jdW1lbnRhdGlvbiAgYW5kIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCBhIGRldGFpbGVkIHZpZXcgb2YgdGhlCitwYXJhbWV0ZXJzIGZvciAgdGhvc2UgIHByb3RvY29scy4gIEluICB0aGlzICBzZWN0aW9uICB3ZSdsbCAgZGlzY3VzcyAgdGhlCitzdWJkaXJlY3RvcmllcyBwcmludGVkICBpbiAgYm9sZCBsZXR0ZXJzIGluIHRoZSB0YWJsZSBhYm92ZS4gQXMgZGVmYXVsdCB2YWx1ZXMKK2FyZSBzdWl0YWJsZSBmb3IgbW9zdCBuZWVkcywgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGFuZ2UgdGhlc2UgdmFsdWVzLgorCisvcHJvYy9zeXMvbmV0L2NvcmUgLSBOZXR3b3JrIGNvcmUgb3B0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcm1lbV9kZWZhdWx0CistLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGUgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzLgorCitybWVtX21heAorLS0tLS0tLS0KKworVGhlIG1heGltdW0gcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUgaW4gYnl0ZXMuCisKK3dtZW1fZGVmYXVsdAorLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHNldHRpbmcgKGluIGJ5dGVzKSBvZiB0aGUgc29ja2V0IHNlbmQgYnVmZmVyLgorCit3bWVtX21heAorLS0tLS0tLS0KKworVGhlIG1heGltdW0gc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUgaW4gYnl0ZXMuCisKK21lc3NhZ2VfYnVyc3QgYW5kIG1lc3NhZ2VfY29zdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIHBhcmFtZXRlcnMgIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHdyaXR0ZW4gdG8gdGhlIGtlcm5lbAorbG9nIGZyb20gIHRoZSAgbmV0d29ya2luZyAgY29kZS4gIFRoZXkgIGVuZm9yY2UgIGEgIHJhdGUgIGxpbWl0ICB0byAgbWFrZSAgYQorZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrICBpbXBvc3NpYmxlLiBBIGhpZ2hlciBtZXNzYWdlX2Nvc3QgZmFjdG9yLCByZXN1bHRzIGluCitmZXdlciBtZXNzYWdlcyB0aGF0IHdpbGwgYmUgd3JpdHRlbi4gTWVzc2FnZV9idXJzdCBjb250cm9scyB3aGVuIG1lc3NhZ2VzIHdpbGwKK2JlIGRyb3BwZWQuICBUaGUgIGRlZmF1bHQgIHNldHRpbmdzICBsaW1pdCAgd2FybmluZyBtZXNzYWdlcyB0byBvbmUgZXZlcnkgZml2ZQorc2Vjb25kcy4KKworbmV0ZGV2X21heF9iYWNrbG9nCistLS0tLS0tLS0tLS0tLS0tLS0KKworTWF4aW11bSBudW1iZXIgIG9mICBwYWNrZXRzLCAgcXVldWVkICBvbiAgdGhlICBJTlBVVCAgc2lkZSwgd2hlbiB0aGUgaW50ZXJmYWNlCityZWNlaXZlcyBwYWNrZXRzIGZhc3RlciB0aGFuIGtlcm5lbCBjYW4gcHJvY2VzcyB0aGVtLgorCitvcHRtZW1fbWF4CistLS0tLS0tLS0tCisKK01heGltdW0gYW5jaWxsYXJ5IGJ1ZmZlciBzaXplIGFsbG93ZWQgcGVyIHNvY2tldC4gQW5jaWxsYXJ5IGRhdGEgaXMgYSBzZXF1ZW5jZQorb2Ygc3RydWN0IGNtc2doZHIgc3RydWN0dXJlcyB3aXRoIGFwcGVuZGVkIGRhdGEuCisKKy9wcm9jL3N5cy9uZXQvdW5peCAtIFBhcmFtZXRlcnMgZm9yIFVuaXggZG9tYWluIHNvY2tldHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlICBvbmx5ICB0d28gIGZpbGVzICBpbiB0aGlzIHN1YmRpcmVjdG9yeS4gVGhleSBjb250cm9sIHRoZSBkZWxheXMgZm9yCitkZWxldGluZyBhbmQgZGVzdHJveWluZyBzb2NrZXQgZGVzY3JpcHRvcnMuCisKKzIuOCAvcHJvYy9zeXMvbmV0L2lwdjQgLSBJUFY0IHNldHRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJUCB2ZXJzaW9uICA0ICBpcyAgc3RpbGwgdGhlIG1vc3QgdXNlZCBwcm90b2NvbCBpbiBVbml4IG5ldHdvcmtpbmcuIEl0IHdpbGwgYmUKK3JlcGxhY2VkIGJ5ICBJUCB2ZXJzaW9uIDYgaW4gdGhlIG5leHQgY291cGxlIG9mIHllYXJzLCBidXQgZm9yIHRoZSBtb21lbnQgaXQncwordGhlIGRlICBmYWN0byAgc3RhbmRhcmQgIGZvciAgdGhlICBpbnRlcm5ldCAgYW5kICBpcyAgdXNlZCAgaW4gbW9zdCBuZXR3b3JraW5nCitlbnZpcm9ubWVudHMgYXJvdW5kICB0aGUgIHdvcmxkLiAgQmVjYXVzZSAgb2YgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBwcm90b2NvbCwKK3dlJ2xsIGhhdmUgYSBkZWVwZXIgbG9vayBpbnRvIHRoZSBzdWJ0cmVlIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgSVB2NAorc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwuCisKK0xldCdzIHN0YXJ0IHdpdGggdGhlIGVudHJpZXMgaW4gL3Byb2Mvc3lzL25ldC9pcHY0LgorCitJQ01QIHNldHRpbmdzCistLS0tLS0tLS0tLS0tCisKK2ljbXBfZWNob19pZ25vcmVfYWxsIGFuZCBpY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVHVybiBvbiAoMSkgb3Igb2ZmICgwKSwgaWYgdGhlIGtlcm5lbCBzaG91bGQgaWdub3JlIGFsbCBJQ01QIEVDSE8gcmVxdWVzdHMsIG9yCitqdXN0IHRob3NlIHRvIGJyb2FkY2FzdCBhbmQgbXVsdGljYXN0IGFkZHJlc3Nlcy4KKworUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UgYWNjZXB0IElDTVAgZWNobyByZXF1ZXN0cyB3aXRoIGEgYnJvYWRjYXN0L211bHRpXC1jYXN0CitkZXN0aW5hdGlvbiBhZGRyZXNzICB5b3VyICBuZXR3b3JrICBtYXkgIGJlICB1c2VkIGFzIGFuIGV4cGxvZGVyIGZvciBkZW5pYWwgb2YKK3NlcnZpY2UgcGFja2V0IGZsb29kaW5nIGF0dGFja3MgdG8gb3RoZXIgaG9zdHMuCisKK2ljbXBfZGVzdHVucmVhY2hfcmF0ZSwgaWNtcF9lY2hvcmVwbHlfcmF0ZSwgaWNtcF9wYXJhbXByb2JfcmF0ZSBhbmQgaWNtcF90aW1lZXhlZWRfcmF0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NldHMgbGltaXRzICBmb3IgIHNlbmRpbmcgIElDTVAgIHBhY2tldHMgIHRvIHNwZWNpZmljIHRhcmdldHMuIEEgdmFsdWUgb2YgemVybworZGlzYWJsZXMgYWxsICBsaW1pdGluZy4gIEFueSAgcG9zaXRpdmUgIHZhbHVlIHNldHMgdGhlIG1heGltdW0gcGFja2FnZSByYXRlIGluCitodW5kcmVkdGggb2YgYSBzZWNvbmQgKG9uIEludGVsIHN5c3RlbXMpLgorCitJUCBzZXR0aW5ncworLS0tLS0tLS0tLS0KKworaXBfYXV0b2NvbmZpZworLS0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIG51bWJlciBvbmUgaWYgdGhlIGhvc3QgcmVjZWl2ZWQgaXRzIElQIGNvbmZpZ3VyYXRpb24gYnkKK1JBUlAsIEJPT1RQLCBESENQIG9yIGEgc2ltaWxhciBtZWNoYW5pc20uIE90aGVyd2lzZSBpdCBpcyB6ZXJvLgorCitpcF9kZWZhdWx0X3R0bAorLS0tLS0tLS0tLS0tLS0KKworVFRMIChUaW1lICBUbyAgTGl2ZSkgZm9yIElQdjQgaW50ZXJmYWNlcy4gVGhpcyBpcyBzaW1wbHkgdGhlIG1heGltdW0gbnVtYmVyIG9mCitob3BzIGEgcGFja2V0IG1heSB0cmF2ZWwuCisKK2lwX2R5bmFkZHIKKy0tLS0tLS0tLS0KKworRW5hYmxlIGR5bmFtaWMgIHNvY2tldCAgYWRkcmVzcyByZXdyaXRpbmcgb24gaW50ZXJmYWNlIGFkZHJlc3MgY2hhbmdlLiBUaGlzIGlzCit1c2VmdWwgZm9yIGRpYWx1cCBpbnRlcmZhY2Ugd2l0aCBjaGFuZ2luZyBJUCBhZGRyZXNzZXMuCisKK2lwX2ZvcndhcmQKKy0tLS0tLS0tLS0KKworRW5hYmxlIG9yICBkaXNhYmxlIGZvcndhcmRpbmcgb2YgSVAgcGFja2FnZXMgYmV0d2VlbiBpbnRlcmZhY2VzLiBDaGFuZ2luZyB0aGlzCit2YWx1ZSByZXNldHMgIGFsbCBvdGhlciBwYXJhbWV0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLiBUaGV5IGRpZmZlciBpZiB0aGUKK2tlcm5lbCBpcyBjb25maWd1cmVkIGFzIGhvc3Qgb3Igcm91dGVyLgorCitpcF9sb2NhbF9wb3J0X3JhbmdlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JhbmdlIG9mICBwb3J0cyAgdXNlZCAgYnkgIFRDUCAgYW5kIFVEUCB0byBjaG9vc2UgdGhlIGxvY2FsIHBvcnQuIENvbnRhaW5zIHR3bworbnVtYmVycywgdGhlICBmaXJzdCAgbnVtYmVyICBpcyB0aGUgbG93ZXN0IHBvcnQsIHRoZSBzZWNvbmQgbnVtYmVyIHRoZSBoaWdoZXN0Citsb2NhbCBwb3J0LiAgRGVmYXVsdCAgaXMgIDEwMjQtNDk5OS4gIFNob3VsZCAgYmUgIGNoYW5nZWQgIHRvICAzMjc2OC02MTAwMCBmb3IKK2hpZ2gtdXNhZ2Ugc3lzdGVtcy4KKworaXBfbm9fcG10dV9kaXNjCistLS0tLS0tLS0tLS0tLS0KKworR2xvYmFsIHN3aXRjaCAgdG8gIHR1cm4gIHBhdGggIE1UVSAgZGlzY292ZXJ5IG9mZi4gSXQgY2FuIGFsc28gYmUgc2V0IG9uIGEgcGVyCitzb2NrZXQgYmFzaXMgYnkgdGhlIGFwcGxpY2F0aW9ucyBvciBvbiBhIHBlciByb3V0ZSBiYXNpcy4KKworaXBfbWFzcV9kZWJ1ZworLS0tLS0tLS0tLS0tLQorCitFbmFibGUvZGlzYWJsZSBkZWJ1Z2dpbmcgb2YgSVAgbWFzcXVlcmFkaW5nLgorCitJUCBmcmFnbWVudGF0aW9uIHNldHRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lwZnJhZ19oaWdoX3RyYXNoIGFuZCBpcGZyYWdfbG93X3RyYXNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYXhpbXVtIG1lbW9yeSAgdXNlZCB0byByZWFzc2VtYmxlIElQIGZyYWdtZW50cy4gV2hlbiBpcGZyYWdfaGlnaF90aHJlc2ggYnl0ZXMKK29mIG1lbW9yeSAgaXMgIGFsbG9jYXRlZCAgZm9yICB0aGlzICBwdXJwb3NlLCAgdGhlICBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcworcGFja2V0cyB1bnRpbCBpcGZyYWdfbG93X3RocmVzaCBpcyByZWFjaGVkLgorCitpcGZyYWdfdGltZQorLS0tLS0tLS0tLS0KKworVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgorCitUQ1Agc2V0dGluZ3MKKy0tLS0tLS0tLS0tLQorCit0Y3BfZWNuCistLS0tLS0tCisKK1RoaXMgZmlsZSBjb250cm9scyB0aGUgdXNlIG9mIHRoZSBFQ04gYml0IGluIHRoZSBJUHY0IGhlYWRlcnMsIHRoaXMgaXMgYSBuZXcKK2ZlYXR1cmUgYWJvdXQgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24sIGJ1dCBzb21lIHJvdXRlcnMgYW5kIGZpcmV3YWxscworYmxvY2sgdHJhZmljIHRoYXQgaGFzIHRoaXMgYml0IHNldCwgc28gaXQgY291bGQgYmUgbmVjZXNzYXJ5IHRvIGVjaG8gMCB0bworL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9lY24sIGlmIHlvdSB3YW50IHRvIHRhbGsgdG8gdGhpcyBzaXRlcy4gRm9yIG1vcmUgaW5mbworeW91IGNvdWxkIHJlYWQgUkZDMjQ4MS4KKwordGNwX3JldHJhbnNfY29sbGFwc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J1Zy10by1idWcgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgYnJva2VuIHByaW50ZXJzLiBPbiByZXRyYW5zbWl0LCB0cnkgdG8gc2VuZAorbGFyZ2VyIHBhY2tldHMgdG8gd29yayBhcm91bmQgYnVncyBpbiBjZXJ0YWluIFRDUCBzdGFja3MuIENhbiBiZSB0dXJuZWQgb2ZmIGJ5CitzZXR0aW5nIGl0IHRvIHplcm8uCisKK3RjcF9rZWVwYWxpdmVfcHJvYmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOdW1iZXIgb2YgIGtlZXAgIGFsaXZlICBwcm9iZXMgIFRDUCAgc2VuZHMgIG91dCwgIHVudGlsICBpdCAgZGVjaWRlcyAgdGhhdCB0aGUKK2Nvbm5lY3Rpb24gaXMgYnJva2VuLgorCit0Y3Bfa2VlcGFsaXZlX3RpbWUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitIb3cgb2Z0ZW4gIFRDUCAgc2VuZHMgb3V0IGtlZXAgYWxpdmUgbWVzc2FnZXMsIHdoZW4ga2VlcCBhbGl2ZSBpcyBlbmFibGVkLiBUaGUKK2RlZmF1bHQgaXMgMiBob3Vycy4KKwordGNwX3N5bl9yZXRyaWVzCistLS0tLS0tLS0tLS0tLS0KKworTnVtYmVyIG9mICB0aW1lcyAgaW5pdGlhbCAgU1lOcyAgZm9yICBhICBUQ1AgIGNvbm5lY3Rpb24gIGF0dGVtcHQgIHdpbGwgIGJlCityZXRyYW5zbWl0dGVkLiBTaG91bGQgIG5vdCAgYmUgIGhpZ2hlciAgdGhhbiAyNTUuIFRoaXMgaXMgb25seSB0aGUgdGltZW91dCBmb3IKK291dGdvaW5nIGNvbm5lY3Rpb25zLCAgZm9yICBpbmNvbWluZyAgY29ubmVjdGlvbnMgdGhlIG51bWJlciBvZiByZXRyYW5zbWl0cyBpcworZGVmaW5lZCBieSB0Y3BfcmV0cmllczEuCisKK3RjcF9zYWNrCistLS0tLS0tLQorCitFbmFibGUgc2VsZWN0IGFja25vd2xlZGdtZW50cyBhZnRlciBSRkMyMDE4LgorCit0Y3BfdGltZXN0YW1wcworLS0tLS0tLS0tLS0tLS0KKworRW5hYmxlIHRpbWVzdGFtcHMgYXMgZGVmaW5lZCBpbiBSRkMxMzIzLgorCit0Y3Bfc3RkdXJnCistLS0tLS0tLS0tCisKK0VuYWJsZSB0aGUgIHN0cmljdCAgUkZDNzkzIGludGVycHJldGF0aW9uIG9mIHRoZSBUQ1AgdXJnZW50IHBvaW50ZXIgZmllbGQuIFRoZQorZGVmYXVsdCBpcyAgdG8gIHVzZSAgdGhlICBCU0QgIGNvbXBhdGlibGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHVyZ2VudCBwb2ludGVyCitwb2ludGluZyB0byB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgdXJnZW50IGRhdGEuIFRoZSBSRkM3OTMgaW50ZXJwcmV0YXRpb24gaXMKK3RvIGhhdmUgIGl0ICBwb2ludCAgdG8gIHRoZSBsYXN0IGJ5dGUgb2YgdXJnZW50IGRhdGEuIEVuYWJsaW5nIHRoaXMgb3B0aW9uIG1heQorbGVhZCB0byBpbnRlcm9wZXJhdGliaWxpdHkgcHJvYmxlbXMuIERpc2FibGVkIGJ5IGRlZmF1bHQuCisKK3RjcF9zeW5jb29raWVzCistLS0tLS0tLS0tLS0tLQorCitPbmx5IHZhbGlkICB3aGVuICB0aGUgIGtlcm5lbCAgd2FzICBjb21waWxlZCAgd2l0aCBDT05GSUdfU1lOQ09PS0lFUy4gU2VuZCBvdXQKK3N5bmNvb2tpZXMgd2hlbiAgdGhlICBzeW4gYmFja2xvZyBxdWV1ZSBvZiBhIHNvY2tldCBvdmVyZmxvd3MuIFRoaXMgaXMgdG8gd2FyZAorb2ZmIHRoZSBjb21tb24gJ3N5biBmbG9vZCBhdHRhY2snLiBEaXNhYmxlZCBieSBkZWZhdWx0LgorCitOb3RlIHRoYXQgIHRoZSAgY29uY2VwdCAgb2YgYSBzb2NrZXQgYmFja2xvZyBpcyBhYmFuZG9uZWQuIFRoaXMgbWVhbnMgdGhlIHBlZXIKK21heSBub3QgIHJlY2VpdmUgIHJlbGlhYmxlICBlcnJvciAgbWVzc2FnZXMgIGZyb20gIGFuICBvdmVyIGxvYWRlZCBzZXJ2ZXIgd2l0aAorc3luY29va2llcyBlbmFibGVkLgorCit0Y3Bfd2luZG93X3NjYWxpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitFbmFibGUgd2luZG93IHNjYWxpbmcgYXMgZGVmaW5lZCBpbiBSRkMxMzIzLgorCit0Y3BfZmluX3RpbWVvdXQKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGVuZ3RoICBvZiAgdGltZSAgaW4gIHNlY29uZHMgIGl0ICB0YWtlcyB0byByZWNlaXZlIGEgZmluYWwgRklOIGJlZm9yZSB0aGUKK3NvY2tldCBpcyAgYWx3YXlzICBjbG9zZWQuICBUaGlzICBpcyAgc3RyaWN0bHkgIGEgIHZpb2xhdGlvbiAgb2YgIHRoZSAgVENQCitzcGVjaWZpY2F0aW9uLCBidXQgcmVxdWlyZWQgdG8gcHJldmVudCBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzLgorCit0Y3BfbWF4X2thX3Byb2JlcworLS0tLS0tLS0tLS0tLS0tLS0KKworSW5kaWNhdGVzIGhvdyAgbWFueSAga2VlcCBhbGl2ZSBwcm9iZXMgYXJlIHNlbnQgcGVyIHNsb3cgdGltZXIgcnVuLiBTaG91bGQgbm90CitiZSBzZXQgdG9vIGhpZ2ggdG8gcHJldmVudCBidXJzdHMuCisKK3RjcF9tYXhfc3luX2JhY2tsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGVuZ3RoIG9mICB0aGUgcGVyIHNvY2tldCBiYWNrbG9nIHF1ZXVlLiBTaW5jZSBMaW51eCAyLjIgdGhlIGJhY2tsb2cgc3BlY2lmaWVkCitpbiBsaXN0ZW4oMikgIG9ubHkgIHNwZWNpZmllcyAgdGhlICBsZW5ndGggIG9mICB0aGUgIGJhY2tsb2cgIHF1ZXVlIG9mIGFscmVhZHkKK2VzdGFibGlzaGVkIHNvY2tldHMuIFdoZW4gbW9yZSBjb25uZWN0aW9uIHJlcXVlc3RzIGFycml2ZSBMaW51eCBzdGFydHMgdG8gZHJvcAorcGFja2V0cy4gV2hlbiAgc3luY29va2llcyAgYXJlICBlbmFibGVkIHRoZSBwYWNrZXRzIGFyZSBzdGlsbCBhbnN3ZXJlZCBhbmQgdGhlCittYXhpbXVtIHF1ZXVlIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuCisKK3RjcF9yZXRyaWVzMQorLS0tLS0tLS0tLS0tCisKK0RlZmluZXMgaG93ICBvZnRlbiAgYW4gIGFuc3dlciAgdG8gIGEgIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaXMgcmV0cmFuc21pdHRlZAorYmVmb3JlIGdpdmluZyB1cC4KKwordGNwX3JldHJpZXMyCistLS0tLS0tLS0tLS0KKworRGVmaW5lcyBob3cgb2Z0ZW4gYSBUQ1AgcGFja2V0IGlzIHJldHJhbnNtaXR0ZWQgYmVmb3JlIGdpdmluZyB1cC4KKworSW50ZXJmYWNlIHNwZWNpZmljIHNldHRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIGRpcmVjdG9yeSAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZiB5b3UnbGwgZmluZCBvbmUgc3ViZGlyZWN0b3J5IGZvciBlYWNoCitpbnRlcmZhY2UgdGhlICBzeXN0ZW0gIGtub3dzIGFib3V0IGFuZCBvbmUgZGlyZWN0b3J5IGNhbGxzIGFsbC4gQ2hhbmdlcyBpbiB0aGUKK2FsbCBzdWJkaXJlY3RvcnkgIGFmZmVjdCAgYWxsICBpbnRlcmZhY2VzLCAgd2hlcmVhcyAgY2hhbmdlcyAgaW4gIHRoZSAgb3RoZXIKK3N1YmRpcmVjdG9yaWVzIGFmZmVjdCAgb25seSAgb25lICBpbnRlcmZhY2UuICBBbGwgIGRpcmVjdG9yaWVzICBoYXZlICB0aGUgc2FtZQorZW50cmllczoKKworYWNjZXB0X3JlZGlyZWN0cworLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHN3aXRjaCAgZGVjaWRlcyAgaWYgdGhlIGtlcm5lbCBhY2NlcHRzIElDTVAgcmVkaXJlY3QgbWVzc2FnZXMgb3Igbm90LiBUaGUKK2RlZmF1bHQgaXMgJ3llcycgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGZvciBhIHJlZ3VsYXIgaG9zdCBhbmQgJ25vJyBmb3IgYQorcm91dGVyIGNvbmZpZ3VyYXRpb24uCisKK2FjY2VwdF9zb3VyY2Vfcm91dGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2hvdWxkIHNvdXJjZSAgcm91dGVkICBwYWNrYWdlcyAgYmUgIGFjY2VwdGVkICBvciAgZGVjbGluZWQuICBUaGUgIGRlZmF1bHQgIGlzCitkZXBlbmRlbnQgb24gIHRoZSAga2VybmVsICBjb25maWd1cmF0aW9uLiAgSXQncyAneWVzJyBmb3Igcm91dGVycyBhbmQgJ25vJyBmb3IKK2hvc3RzLgorCitib290cF9yZWxheQorfn5+fn5+fn5+fn4KKworQWNjZXB0IHBhY2tldHMgIHdpdGggc291cmNlIGFkZHJlc3MgMC5iLmMuZCB3aXRoIGRlc3RpbmF0aW9ucyBub3QgdG8gdGhpcyBob3N0CithcyBsb2NhbCBvbmVzLiBJdCBpcyBzdXBwb3NlZCB0aGF0IGEgQk9PVFAgcmVsYXkgZGFlbW9uIHdpbGwgY2F0Y2ggYW5kIGZvcndhcmQKK3N1Y2ggcGFja2V0cy4KKworVGhlIGRlZmF1bHQgIGlzICAwLCAgc2luY2UgdGhpcyBmZWF0dXJlIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKGtlcm5lbCB2ZXJzaW9uCisyLjIuMTIpLgorCitmb3J3YXJkaW5nCistLS0tLS0tLS0tCisKK0VuYWJsZSBvciBkaXNhYmxlIElQIGZvcndhcmRpbmcgb24gdGhpcyBpbnRlcmZhY2UuCisKK2xvZ19tYXJ0aWFucworLS0tLS0tLS0tLS0tCisKK0xvZyBwYWNrZXRzIHdpdGggc291cmNlIGFkZHJlc3NlcyB3aXRoIG5vIGtub3duIHJvdXRlIHRvIGtlcm5lbCBsb2cuCisKK21jX2ZvcndhcmRpbmcKKy0tLS0tLS0tLS0tLS0KKworRG8gbXVsdGljYXN0IHJvdXRpbmcuIFRoZSBrZXJuZWwgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBDT05GSUdfTVJPVVRFIGFuZCBhCittdWx0aWNhc3Qgcm91dGluZyBkYWVtb24gaXMgcmVxdWlyZWQuCisKK3Byb3h5X2FycAorLS0tLS0tLS0tCisKK0RvZXMgKDEpIG9yIGRvZXMgbm90ICgwKSBwZXJmb3JtIHByb3h5IEFSUC4KKworcnBfZmlsdGVyCistLS0tLS0tLS0KKworSW50ZWdlciB2YWx1ZSBkZXRlcm1pbmVzIGlmIGEgc291cmNlIHZhbGlkYXRpb24gc2hvdWxkIGJlIG1hZGUuIDEgbWVhbnMgeWVzLCAwCittZWFucyBuby4gIERpc2FibGVkIGJ5IGRlZmF1bHQsIGJ1dCBsb2NhbC9icm9hZGNhc3QgYWRkcmVzcyBzcG9vZmluZyBpcyBhbHdheXMKK29uLgorCitJZiB5b3UgIHNldCB0aGlzIHRvIDEgb24gYSByb3V0ZXIgdGhhdCBpcyB0aGUgb25seSBjb25uZWN0aW9uIGZvciBhIG5ldHdvcmsgdG8KK3RoZSBuZXQsICBpdCAgd2lsbCAgcHJldmVudCAgc3Bvb2ZpbmcgIGF0dGFja3MgIGFnYWluc3QgeW91ciBpbnRlcm5hbCBuZXR3b3JrcworKGV4dGVybmFsIGFkZHJlc3NlcyAgY2FuICBzdGlsbCAgYmUgIHNwb29mZWQpLCB3aXRob3V0IHRoZSBuZWVkIGZvciBhZGRpdGlvbmFsCitmaXJld2FsbCBydWxlcy4KKworc2VjdXJlX3JlZGlyZWN0cworLS0tLS0tLS0tLS0tLS0tLQorCitBY2NlcHQgSUNNUCAgcmVkaXJlY3QgIG1lc3NhZ2VzICBvbmx5ICBmb3IgZ2F0ZXdheXMsIGxpc3RlZCBpbiBkZWZhdWx0IGdhdGV3YXkKK2xpc3QuIEVuYWJsZWQgYnkgZGVmYXVsdC4KKworc2hhcmVkX21lZGlhCistLS0tLS0tLS0tLS0KKworSWYgaXQgIGlzICBub3QgIHNldCAgdGhlIGtlcm5lbCBkb2VzIG5vdCBhc3N1bWUgdGhhdCBkaWZmZXJlbnQgc3VibmV0cyBvbiB0aGlzCitkZXZpY2UgY2FuIGNvbW11bmljYXRlIGRpcmVjdGx5LiBEZWZhdWx0IHNldHRpbmcgaXMgJ3llcycuCisKK3NlbmRfcmVkaXJlY3RzCistLS0tLS0tLS0tLS0tLQorCitEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2VuZCBJQ01QIHJlZGlyZWN0cyB0byBvdGhlciBob3N0cy4KKworUm91dGluZyBzZXR0aW5ncworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGlyZWN0b3J5ICAvcHJvYy9zeXMvbmV0L2lwdjQvcm91dGUgIGNvbnRhaW5zICBzZXZlcmFsICBmaWxlICB0byAgY29udHJvbAorcm91dGluZyBpc3N1ZXMuCisKK2Vycm9yX2J1cnN0IGFuZCBlcnJvcl9jb3N0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSAgcGFyYW1ldGVycyAgYXJlIHVzZWQgdG8gbGltaXQgaG93IG1hbnkgSUNNUCBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSB0byAKK3NlbmQgIGZyb20gIHRoZSAgaG9zdCAgaW4gcXVlc3Rpb24uIElDTVAgZGVzdGluYXRpb24gdW5yZWFjaGFibGUgbWVzc2FnZXMgYXJlIAorc2VudCAgd2hlbiAgd2UgY2FuIG5vdCByZWFjaCB0aGUgbmV4dCBob3AsIHdoaWxlIHRyeWluZyB0byB0cmFuc21pdCBhIHBhY2tldC4gCitJdCAgd2lsbCBhbHNvIHByaW50IHNvbWUgZXJyb3IgbWVzc2FnZXMgdG8ga2VybmVsIGxvZ3MgaWYgc29tZW9uZSBpcyBpZ25vcmluZyAKK291ciAgIElDTVAgIHJlZGlyZWN0cy4gIFRoZSAgaGlnaGVyICB0aGUgIGVycm9yX2Nvc3QgIGZhY3RvciAgaXMsICB0aGUgIGZld2VyIAorZGVzdGluYXRpb24gIHVucmVhY2hhYmxlICBhbmQgZXJyb3IgbWVzc2FnZXMgd2lsbCBiZSBsZXQgdGhyb3VnaC4gRXJyb3JfYnVyc3QgCitjb250cm9scyAgd2hlbiAgZGVzdGluYXRpb24gIHVucmVhY2hhYmxlICBtZXNzYWdlcyBhbmQgZXJyb3IgbWVzc2FnZXMgd2lsbCBiZQorZHJvcHBlZC4gVGhlIGRlZmF1bHQgc2V0dGluZ3MgbGltaXQgd2FybmluZyBtZXNzYWdlcyB0byBmaXZlIGV2ZXJ5IHNlY29uZC4KKworZmx1c2gKKy0tLS0tCisKK1dyaXRpbmcgdG8gdGhpcyBmaWxlIHJlc3VsdHMgaW4gYSBmbHVzaCBvZiB0aGUgcm91dGluZyBjYWNoZS4KKworZ2NfZWxhc3RpY2l0eSwgZ2NfaW50ZXJ2YWwsIGdjX21pbl9pbnRlcnZhbF9tcywgZ2NfdGltZW91dCwgZ2NfdGhyZXNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmFsdWVzIHRvICBjb250cm9sICB0aGUgIGZyZXF1ZW5jeSAgYW5kICBiZWhhdmlvciAgb2YgIHRoZSAgZ2FyYmFnZSBjb2xsZWN0aW9uCithbGdvcml0aG0gZm9yIHRoZSByb3V0aW5nIGNhY2hlLiBnY19taW5faW50ZXJ2YWwgaXMgZGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQKK2J5IGdjX21pbl9pbnRlcnZhbF9tcy4KKworCittYXhfc2l6ZQorLS0tLS0tLS0KKworTWF4aW11bSBzaXplICBvZiAgdGhlIHJvdXRpbmcgY2FjaGUuIE9sZCBlbnRyaWVzIHdpbGwgYmUgcHVyZ2VkIG9uY2UgdGhlIGNhY2hlCityZWFjaGVkIGhhcyB0aGlzIHNpemUuCisKK21heF9kZWxheSwgbWluX2RlbGF5CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZWxheXMgZm9yIGZsdXNoaW5nIHRoZSByb3V0aW5nIGNhY2hlLgorCityZWRpcmVjdF9sb2FkLCByZWRpcmVjdF9udW1iZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGYWN0b3JzIHdoaWNoICBkZXRlcm1pbmUgIGlmICBtb3JlIElDUE0gcmVkaXJlY3RzIHNob3VsZCBiZSBzZW50IHRvIGEgc3BlY2lmaWMKK2hvc3QuIE5vICByZWRpcmVjdHMgIHdpbGwgYmUgc2VudCBvbmNlIHRoZSBsb2FkIGxpbWl0IG9yIHRoZSBtYXhpbXVtIG51bWJlciBvZgorcmVkaXJlY3RzIGhhcyBiZWVuIHJlYWNoZWQuCisKK3JlZGlyZWN0X3NpbGVuY2UKKy0tLS0tLS0tLS0tLS0tLS0KKworVGltZW91dCBmb3IgcmVkaXJlY3RzLiBBZnRlciB0aGlzIHBlcmlvZCByZWRpcmVjdHMgd2lsbCBiZSBzZW50IGFnYWluLCBldmVuIGlmCit0aGlzIGhhcyBiZWVuIHN0b3BwZWQsIGJlY2F1c2UgdGhlIGxvYWQgb3IgbnVtYmVyIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuCisKK05ldHdvcmsgTmVpZ2hib3IgaGFuZGxpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2V0dGluZ3MgYWJvdXQgaG93IHRvIGhhbmRsZSBjb25uZWN0aW9ucyB3aXRoIGRpcmVjdCBuZWlnaGJvcnMgKG5vZGVzIGF0dGFjaGVkCit0byB0aGUgc2FtZSBsaW5rKSBjYW4gYmUgZm91bmQgaW4gdGhlIGRpcmVjdG9yeSAvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2guCisKK0FzIHdlICBzYXcgIGl0ICBpbiAgdGhlICBjb25mIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSBkZWZhdWx0IHN1YmRpcmVjdG9yeSB3aGljaAoraG9sZHMgdGhlICBkZWZhdWx0ICB2YWx1ZXMsIGFuZCBvbmUgZGlyZWN0b3J5IGZvciBlYWNoIGludGVyZmFjZS4gVGhlIGNvbnRlbnRzCitvZiB0aGUgIGRpcmVjdG9yaWVzICBhcmUgaWRlbnRpY2FsLCB3aXRoIHRoZSBzaW5nbGUgZXhjZXB0aW9uIHRoYXQgdGhlIGRlZmF1bHQKK3NldHRpbmdzIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zIHRvIHNldCBnYXJiYWdlIGNvbGxlY3Rpb24gcGFyYW1ldGVycy4KKworSW4gdGhlIGludGVyZmFjZSBkaXJlY3RvcmllcyB5b3UnbGwgZmluZCB0aGUgZm9sbG93aW5nIGVudHJpZXM6CisKK2Jhc2VfcmVhY2hhYmxlX3RpbWUsIGJhc2VfcmVhY2hhYmxlX3RpbWVfbXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBiYXNlICB2YWx1ZSAgdXNlZCBmb3IgY29tcHV0aW5nIHRoZSByYW5kb20gcmVhY2hhYmxlIHRpbWUgdmFsdWUgYXMgc3BlY2lmaWVkCitpbiBSRkMyNDYxLgorCitFeHByZXNzaW9uIG9mIGJhc2VfcmVhY2hhYmxlX3RpbWUsIHdoaWNoIGlzIGRlcHJlY2F0ZWQsIGlzIGluIHNlY29uZHMuCitFeHByZXNzaW9uIG9mIGJhc2VfcmVhY2hhYmxlX3RpbWVfbXMgaXMgaW4gbWlsbGlzZWNvbmRzLgorCityZXRyYW5zX3RpbWUsIHJldHJhbnNfdGltZV9tcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHRpbWUgYmV0d2VlbiByZXRyYW5zbWl0dGVkIE5laWdoYm9yIFNvbGljaXRhdGlvbiBtZXNzYWdlcy4KK1VzZWQgZm9yIGFkZHJlc3MgcmVzb2x1dGlvbiBhbmQgdG8gZGV0ZXJtaW5lIGlmIGEgbmVpZ2hib3IgaXMKK3VucmVhY2hhYmxlLgorCitFeHByZXNzaW9uIG9mIHJldHJhbnNfdGltZSwgd2hpY2ggaXMgZGVwcmVjYXRlZCwgaXMgaW4gMS8xMDAgc2Vjb25kcyAoZm9yCitJUHY0KSBvciBpbiBqaWZmaWVzIChmb3IgSVB2NikuCitFeHByZXNzaW9uIG9mIHJldHJhbnNfdGltZV9tcyBpcyBpbiBtaWxsaXNlY29uZHMuCisKK3VucmVzX3FsZW4KKy0tLS0tLS0tLS0KKworTWF4aW11bSBxdWV1ZSAgbGVuZ3RoICBmb3IgYSBwZW5kaW5nIGFycCByZXF1ZXN0IC0gdGhlIG51bWJlciBvZiBwYWNrZXRzIHdoaWNoCithcmUgYWNjZXB0ZWQgZnJvbSBvdGhlciBsYXllcnMgd2hpbGUgdGhlIEFSUCBhZGRyZXNzIGlzIHN0aWxsIHJlc29sdmVkLgorCithbnljYXN0X2RlbGF5CistLS0tLS0tLS0tLS0tCisKK01heGltdW0gZm9yICByYW5kb20gIGRlbGF5ICBvZiAgYW5zd2VycyAgdG8gIG5laWdoYm9yIHNvbGljaXRhdGlvbiBtZXNzYWdlcyBpbgoramlmZmllcyAoMS8xMDAgIHNlYykuIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKExpbnV4IGRvZXMgbm90IGhhdmUgYW55Y2FzdCBzdXBwb3J0Cit5ZXQpLgorCit1Y2FzdF9zb2xpY2l0CistLS0tLS0tLS0tLS0tCisKK01heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgZm9yIHVuaWNhc3Qgc29saWNpdGF0aW9uLgorCittY2FzdF9zb2xpY2l0CistLS0tLS0tLS0tLS0tCisKK01heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgZm9yIG11bHRpY2FzdCBzb2xpY2l0YXRpb24uCisKK2RlbGF5X2ZpcnN0X3Byb2JlX3RpbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVsYXkgZm9yICB0aGUgIGZpcnN0ICB0aW1lICBwcm9iZSAgaWYgIHRoZSAgbmVpZ2hib3IgIGlzICByZWFjaGFibGUuICAoc2VlCitnY19zdGFsZV90aW1lKQorCitsb2NrdGltZQorLS0tLS0tLS0KKworQW4gQVJQL25laWdoYm9yICBlbnRyeSAgaXMgb25seSByZXBsYWNlZCB3aXRoIGEgbmV3IG9uZSBpZiB0aGUgb2xkIGlzIGF0IGxlYXN0Citsb2NrdGltZSBvbGQuIFRoaXMgcHJldmVudHMgQVJQIGNhY2hlIHRocmFzaGluZy4KKworcHJveHlfZGVsYXkKKy0tLS0tLS0tLS0tCisKK01heGltdW0gdGltZSAgKHJlYWwgIHRpbWUgaXMgcmFuZG9tIFswLi5wcm94eXRpbWVdKSBiZWZvcmUgYW5zd2VyaW5nIHRvIGFuIEFSUAorcmVxdWVzdCBmb3IgIHdoaWNoICB3ZSBoYXZlIGFuIHByb3h5IEFSUCBlbnRyeS4gSW4gc29tZSBjYXNlcywgdGhpcyBpcyB1c2VkIHRvCitwcmV2ZW50IG5ldHdvcmsgZmxvb2RpbmcuCisKK3Byb3h5X3FsZW4KKy0tLS0tLS0tLS0KKworTWF4aW11bSBxdWV1ZSBsZW5ndGggb2YgdGhlIGRlbGF5ZWQgcHJveHkgYXJwIHRpbWVyLiAoc2VlIHByb3h5X2RlbGF5KS4KKworYXBwX3NvbGNpdAorLS0tLS0tLS0tLQorCitEZXRlcm1pbmVzIHRoZSAgbnVtYmVyIG9mIHJlcXVlc3RzIHRvIHNlbmQgdG8gdGhlIHVzZXIgbGV2ZWwgQVJQIGRhZW1vbi4gVXNlIDAKK3RvIHR1cm4gb2ZmLgorCitnY19zdGFsZV90aW1lCistLS0tLS0tLS0tLS0tCisKK0RldGVybWluZXMgaG93ICBvZnRlbiAgdG8gIGNoZWNrICBmb3Igc3RhbGUgQVJQIGVudHJpZXMuIEFmdGVyIGFuIEFSUCBlbnRyeSBpcworc3RhbGUgaXQgIHdpbGwgIGJlIHJlc29sdmVkIGFnYWluICh3aGljaCBpcyB1c2VmdWwgd2hlbiBhbiBJUCBhZGRyZXNzIG1pZ3JhdGVzCit0byBhbm90aGVyICBtYWNoaW5lKS4gIFdoZW4gIHVjYXN0X3NvbGljaXQgaXMgZ3JlYXRlciB0aGFuIDAgaXQgZmlyc3QgdHJpZXMgdG8KK3NlbmQgYW4gIEFSUCAgcGFja2V0ICBkaXJlY3RseSAgdG8gIHRoZSAga25vd24gIGhvc3QgIFdoZW4gIHRoYXQgIGZhaWxzICBhbmQKK21jYXN0X3NvbGljaXQgaXMgZ3JlYXRlciB0aGFuIDAsIGFuIEFSUCByZXF1ZXN0IGlzIGJyb2FkY2FzdGVkLgorCisyLjkgQXBwbGV0YWxrCistLS0tLS0tLS0tLS0tCisKK1RoZSAvcHJvYy9zeXMvbmV0L2FwcGxldGFsayAgZGlyZWN0b3J5ICBob2xkcyB0aGUgQXBwbGV0YWxrIGNvbmZpZ3VyYXRpb24gZGF0YQord2hlbiBBcHBsZXRhbGsgaXMgbG9hZGVkLiBUaGUgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgYXJlOgorCithYXJwLWV4cGlyeS10aW1lCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhbW91bnQgIG9mICB0aW1lICB3ZSBrZWVwIGFuIEFSUCBlbnRyeSBiZWZvcmUgZXhwaXJpbmcgaXQuIFVzZWQgdG8gYWdlIG91dAorb2xkIGhvc3RzLgorCithYXJwLXJlc29sdmUtdGltZQorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFtb3VudCBvZiB0aW1lIHdlIHdpbGwgc3BlbmQgdHJ5aW5nIHRvIHJlc29sdmUgYW4gQXBwbGV0YWxrIGFkZHJlc3MuCisKK2FhcnAtcmV0cmFuc21pdC1saW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBudW1iZXIgb2YgdGltZXMgd2Ugd2lsbCByZXRyYW5zbWl0IGEgcXVlcnkgYmVmb3JlIGdpdmluZyB1cC4KKworYWFycC10aWNrLXRpbWUKKy0tLS0tLS0tLS0tLS0tCisKK0NvbnRyb2xzIHRoZSByYXRlIGF0IHdoaWNoIGV4cGlyZXMgYXJlIGNoZWNrZWQuCisKK1RoZSBkaXJlY3RvcnkgIC9wcm9jL25ldC9hcHBsZXRhbGsgIGhvbGRzIHRoZSBsaXN0IG9mIGFjdGl2ZSBBcHBsZXRhbGsgc29ja2V0cworb24gYSBtYWNoaW5lLgorCitUaGUgZmllbGRzICBpbmRpY2F0ZSAgdGhlIEREUCB0eXBlLCB0aGUgbG9jYWwgYWRkcmVzcyAoaW4gbmV0d29yazpub2RlIGZvcm1hdCkKK3RoZSByZW1vdGUgIGFkZHJlc3MsICB0aGUgIHNpemUgb2YgdGhlIHRyYW5zbWl0IHBlbmRpbmcgcXVldWUsIHRoZSBzaXplIG9mIHRoZQorcmVjZWl2ZWQgcXVldWUgIChieXRlcyB3YWl0aW5nIGZvciBhcHBsaWNhdGlvbnMgdG8gcmVhZCkgdGhlIHN0YXRlIGFuZCB0aGUgdWlkCitvd25pbmcgdGhlIHNvY2tldC4KKworL3Byb2MvbmV0L2F0YWxrX2lmYWNlIGxpc3RzICBhbGwgIHRoZSAgaW50ZXJmYWNlcyAgY29uZmlndXJlZCBmb3IgYXBwbGV0YWxrLkl0CitzaG93cyB0aGUgIG5hbWUgIG9mIHRoZSBpbnRlcmZhY2UsIGl0cyBBcHBsZXRhbGsgYWRkcmVzcywgdGhlIG5ldHdvcmsgcmFuZ2Ugb24KK3RoYXQgYWRkcmVzcyAgKG9yICBuZXR3b3JrIG51bWJlciBmb3IgcGhhc2UgMSBuZXR3b3JrcyksIGFuZCB0aGUgc3RhdHVzIG9mIHRoZQoraW50ZXJmYWNlLgorCisvcHJvYy9uZXQvYXRhbGtfcm91dGUgbGlzdHMgIGVhY2ggIGtub3duICBuZXR3b3JrICByb3V0ZS4gIEl0IGxpc3RzIHRoZSB0YXJnZXQKKyhuZXR3b3JrKSB0aGF0IHRoZSByb3V0ZSBsZWFkcyB0bywgdGhlIHJvdXRlciAobWF5IGJlIGRpcmVjdGx5IGNvbm5lY3RlZCksIHRoZQorcm91dGUgZmxhZ3MsIGFuZCB0aGUgZGV2aWNlIHRoZSByb3V0ZSBpcyB1c2luZy4KKworMi4xMCBJUFgKKy0tLS0tLS0tCisKK1RoZSBJUFggcHJvdG9jb2wgaGFzIG5vIHR1bmFibGUgdmFsdWVzIGluIHByb2Mvc3lzL25ldC4KKworVGhlIElQWCAgcHJvdG9jb2wgIGRvZXMsICBob3dldmVyLCAgcHJvdmlkZSAgcHJvYy9uZXQvaXB4LiBUaGlzIGxpc3RzIGVhY2ggSVBYCitzb2NrZXQgZ2l2aW5nICB0aGUgIGxvY2FsICBhbmQgIHJlbW90ZSAgYWRkcmVzc2VzICBpbiAgTm92ZWxsICBmb3JtYXQgKHRoYXQgaXMKK25ldHdvcms6bm9kZTpwb3J0KS4gSW4gIGFjY29yZGFuY2UgIHdpdGggIHRoZSAgc3RyYW5nZSAgTm92ZWxsICB0cmFkaXRpb24sCitldmVyeXRoaW5nIGJ1dCB0aGUgcG9ydCBpcyBpbiBoZXguIE5vdF9Db25uZWN0ZWQgaXMgZGlzcGxheWVkIGZvciBzb2NrZXRzIHRoYXQKK2FyZSBub3QgIHRpZWQgdG8gYSBzcGVjaWZpYyByZW1vdGUgYWRkcmVzcy4gVGhlIFR4IGFuZCBSeCBxdWV1ZSBzaXplcyBpbmRpY2F0ZQordGhlIG51bWJlciAgb2YgIGJ5dGVzICBwZW5kaW5nICBmb3IgIHRyYW5zbWlzc2lvbiAgYW5kICByZWNlcHRpb24uICBUaGUgIHN0YXRlCitpbmRpY2F0ZXMgdGhlICBzdGF0ZSAgdGhlICBzb2NrZXQgIGlzICBpbiBhbmQgdGhlIHVpZCBpcyB0aGUgb3duaW5nIHVpZCBvZiB0aGUKK3NvY2tldC4KKworVGhlIC9wcm9jL25ldC9pcHhfaW50ZXJmYWNlICBmaWxlIGxpc3RzIGFsbCBJUFggaW50ZXJmYWNlcy4gRm9yIGVhY2ggaW50ZXJmYWNlCitpdCBnaXZlcyAgdGhlIG5ldHdvcmsgbnVtYmVyLCB0aGUgbm9kZSBudW1iZXIsIGFuZCBpbmRpY2F0ZXMgaWYgdGhlIG5ldHdvcmsgaXMKK3RoZSBwcmltYXJ5ICBuZXR3b3JrLiAgSXQgIGFsc28gIGluZGljYXRlcyAgd2hpY2ggIGRldmljZSAgaXQgIGlzIGJvdW5kIHRvIChvcgorSW50ZXJuYWwgZm9yICBpbnRlcm5hbCAgbmV0d29ya3MpICBhbmQgIHRoZSAgRnJhbWUgIFR5cGUgaWYgYXBwcm9wcmlhdGUuIExpbnV4CitzdXBwb3J0cyA4MDIuMywgIDgwMi4yLCAgODAyLjIgIFNOQVAgIGFuZCBESVggKEJsdWUgQm9vaykgZXRoZXJuZXQgZnJhbWluZyBmb3IKK0lQWC4KKworVGhlIC9wcm9jL25ldC9pcHhfcm91dGUgIHRhYmxlICBob2xkcyAgYSBsaXN0IG9mIElQWCByb3V0ZXMuIEZvciBlYWNoIHJvdXRlIGl0CitnaXZlcyB0aGUgIGRlc3RpbmF0aW9uICBuZXR3b3JrLCB0aGUgcm91dGVyIG5vZGUgKG9yIERpcmVjdGx5KSBhbmQgdGhlIG5ldHdvcmsKK2FkZHJlc3Mgb2YgdGhlIHJvdXRlciAob3IgQ29ubmVjdGVkKSBmb3IgaW50ZXJuYWwgbmV0d29ya3MuCisKKzIuMTEgL3Byb2Mvc3lzL2ZzL21xdWV1ZSAtIFBPU0lYIG1lc3NhZ2UgcXVldWVzIGZpbGVzeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJtcXVldWUiICBmaWxlc3lzdGVtIHByb3ZpZGVzICB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcyB0byBlbmFibGUgdGhlCitjcmVhdGlvbiBvZiBhICB1c2VyIHNwYWNlICBsaWJyYXJ5IHRoYXQgIGltcGxlbWVudHMgIHRoZSAgUE9TSVggbWVzc2FnZSBxdWV1ZXMKK0FQSSAoYXMgbm90ZWQgYnkgdGhlICBNU0cgdGFnIGluIHRoZSAgUE9TSVggMTAwMy4xLTIwMDEgdmVyc2lvbiAgb2YgdGhlIFN5c3RlbQorSW50ZXJmYWNlcyBzcGVjaWZpY2F0aW9uLikKKworVGhlICJtcXVldWUiIGZpbGVzeXN0ZW0gY29udGFpbnMgdmFsdWVzIGZvciBkZXRlcm1pbmluZy9zZXR0aW5nICB0aGUgYW1vdW50IG9mCityZXNvdXJjZXMgdXNlZCBieSB0aGUgZmlsZSBzeXN0ZW0uCisKKy9wcm9jL3N5cy9mcy9tcXVldWUvcXVldWVzX21heCBpcyBhIHJlYWQvd3JpdGUgIGZpbGUgZm9yICBzZXR0aW5nL2dldHRpbmcgIHRoZQorbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZSBxdWV1ZXMgYWxsb3dlZCBvbiB0aGUgc3lzdGVtLgorCisvcHJvYy9zeXMvZnMvbXF1ZXVlL21zZ19tYXggIGlzICBhICByZWFkL3dyaXRlIGZpbGUgIGZvciAgc2V0dGluZy9nZXR0aW5nICB0aGUKK21heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIGluIGEgcXVldWUgdmFsdWUuICBJbiBmYWN0IGl0IGlzIHRoZSBsaW1pdGluZyB2YWx1ZQorZm9yIGFub3RoZXIgKHVzZXIpIGxpbWl0IHdoaWNoIGlzIHNldCBpbiBtcV9vcGVuIGludm9jYXRpb24uIFRoaXMgYXR0cmlidXRlIG9mCithIHF1ZXVlIG11c3QgYmUgbGVzcyBvciBlcXVhbCB0aGVuIG1zZ19tYXguCisKKy9wcm9jL3N5cy9mcy9tcXVldWUvbXNnc2l6ZV9tYXggaXMgIGEgcmVhZC93cml0ZSAgZmlsZSBmb3Igc2V0dGluZy9nZXR0aW5nIHRoZQorbWF4aW11bSAgbWVzc2FnZSBzaXplIHZhbHVlIChpdCBpcyBldmVyeSAgbWVzc2FnZSBxdWV1ZSdzIGF0dHJpYnV0ZSBzZXQgZHVyaW5nCitpdHMgY3JlYXRpb24pLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3VtbWFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0YWluIGFzcGVjdHMgIG9mICBrZXJuZWwgIGJlaGF2aW9yICBjYW4gYmUgbW9kaWZpZWQgYXQgcnVudGltZSwgd2l0aG91dCB0aGUKK25lZWQgdG8gIHJlY29tcGlsZSAgdGhlIGtlcm5lbCwgb3IgZXZlbiB0byByZWJvb3QgdGhlIHN5c3RlbS4gVGhlIGZpbGVzIGluIHRoZQorL3Byb2Mvc3lzIHRyZWUgIGNhbiAgbm90IG9ubHkgYmUgcmVhZCwgYnV0IGFsc28gbW9kaWZpZWQuIFlvdSBjYW4gdXNlIHRoZSBlY2hvCitjb21tYW5kIHRvIHdyaXRlIHZhbHVlIGludG8gdGhlc2UgZmlsZXMsIHRoZXJlYnkgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MKK29mIHRoZSBrZXJuZWwuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcm9tZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yb21mcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyYTdiMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcm9tZnMudHh0CkBAIC0wLDAgKzEsMTg3IEBACitST01GUyAtIFJPTSBGSUxFIFNZU1RFTQorCitUaGlzIGlzIGEgcXVpdGUgZHVtYiwgcmVhZCBvbmx5IGZpbGVzeXN0ZW0sIG1haW5seSBmb3IgaW5pdGlhbCBSQU0KK2Rpc2tzIG9mIGluc3RhbGxhdGlvbiBkaXNrcy4gIEl0IGhhcyBncm93biB1cCBieSB0aGUgbmVlZCBvZiBoYXZpbmcKK21vZHVsZXMgbGlua2VkIGF0IGJvb3QgdGltZS4gIFVzaW5nIHRoaXMgZmlsZXN5c3RlbSwgeW91IGdldCBhIHZlcnkKK3NpbWlsYXIgZmVhdHVyZSwgYW5kIGV2ZW4gdGhlIHBvc3NpYmlsaXR5IG9mIGEgc21hbGwga2VybmVsLCB3aXRoIGEKK2ZpbGUgc3lzdGVtIHdoaWNoIGRvZXNuJ3QgdGFrZSB1cCB1c2VmdWwgbWVtb3J5IGZyb20gdGhlIHJvdXRlcgorZnVuY3Rpb25zIGluIHRoZSBiYXNlbWVudCBvZiB5b3VyIG9mZmljZS4KKworRm9yIGNvbXBhcmlzb24sIGJvdGggdGhlIG9sZGVyIG1pbml4IGFuZCB4aWFmcyAodGhlIGxhdHRlciBpcyBub3cKK2RlZnVuY3QpIGZpbGVzeXN0ZW1zLCBjb21waWxlZCBhcyBtb2R1bGUgbmVlZCBtb3JlIHRoYW4gMjAwMDAgYnl0ZXMsCit3aGlsZSByb21mcyBpcyBsZXNzIHRoYW4gYSBwYWdlLCBhYm91dCA0MDAwIGJ5dGVzIChhc3N1bWluZyBpNTg2Citjb2RlKS4gIFVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMsIHRoZSBtc2RvcyBmaWxlc3lzdGVtIHdvdWxkIG5lZWQKK2Fib3V0IDMwSyAoYW5kIGRvZXMgbm90IHN1cHBvcnQgZGV2aWNlIG5vZGVzIG9yIHN5bWxpbmtzKSwgd2hpbGUgdGhlCituZnMgbW9kdWxlIHdpdGggbmZzcm9vdCBpcyBhYm91dCA1N0suICBGdXJ0aGVybW9yZSwgYXMgYSBiaXQgdW5mYWlyCitjb21wYXJpc29uLCBhbiBhY3R1YWwgcmVzY3VlIGRpc2sgdXNlZCB1cCAzMjAyIGJsb2NrcyB3aXRoIGV4dDIsIHdoaWxlCit3aXRoIHJvbWZzLCBpdCBuZWVkZWQgMzA3OSBibG9ja3MuCisKK1RvIGNyZWF0ZSBzdWNoIGEgZmlsZSBzeXN0ZW0sIHlvdSdsbCBuZWVkIGEgdXNlciBwcm9ncmFtIG5hbWVkCitnZW5yb21mcy4gIEl0IGlzIGF2YWlsYWJsZSB2aWEgYW5vbnltb3VzIGZ0cCBvbiBzdW5zaXRlLnVuYy5lZHUgYW5kCitpdHMgbWlycm9ycywgaW4gdGhlIC9wdWIvTGludXgvc3lzdGVtL3JlY292ZXJ5LyBkaXJlY3RvcnkuCisKK0FzIHRoZSBuYW1lIHN1Z2dlc3RzLCByb21mcyBjb3VsZCBiZSBhbHNvIHVzZWQgKHNwYWNlLWVmZmljaWVudGx5KSBvbgordmFyaW91cyByZWFkLW9ubHkgbWVkaWEsIGxpa2UgKEUpRVBST00gZGlza3MgaWYgc29tZW9uZSB3aWxsIGhhdmUgdGhlCittb3RpdmF0aW9uLi4gOikKKworSG93ZXZlciwgdGhlIG1haW4gcHVycG9zZSBvZiByb21mcyBpcyB0byBoYXZlIGEgdmVyeSBzbWFsbCBrZXJuZWwsCit3aGljaCBoYXMgb25seSB0aGlzIGZpbGVzeXN0ZW0gbGlua2VkIGluLCBhbmQgdGhlbiBjYW4gbG9hZCBhbnkgbW9kdWxlCitsYXRlciwgd2l0aCB0aGUgY3VycmVudCBtb2R1bGUgdXRpbGl0aWVzLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBydW4KK3NvbWUgcHJvZ3JhbSB0byBkZWNpZGUgaWYgeW91IG5lZWQgU0NTSSBkZXZpY2VzLCBhbmQgZXZlbiBJREUgb3IKK2Zsb3BweSBkcml2ZXMgY2FuIGJlIGxvYWRlZCBsYXRlciBpZiB5b3UgdXNlIHRoZSAiaW5pdHJkIi0taW5pdGlhbAorUkFNIGRpc2stLWZlYXR1cmUgb2YgdGhlIGtlcm5lbC4gIFRoaXMgd291bGQgbm90IGJlIHJlYWxseSBuZXdzCitmbGFzaCwgYnV0IHdpdGggcm9tZnMsIHlvdSBjYW4gZXZlbiBzcGFyZSBvZmYgeW91ciBleHQyIG9yIG1pbml4IG9yCittYXliZSBldmVuIGFmZnMgZmlsZXN5c3RlbSB1bnRpbCB5b3UgcmVhbGx5IGtub3cgdGhhdCB5b3UgbmVlZCBpdC4KKworRm9yIGV4YW1wbGUsIGEgZGlzdHJpYnV0aW9uIGJvb3QgZGlzayBjYW4gY29udGFpbiBvbmx5IHRoZSBjZCBkaXNrCitkcml2ZXJzIChhbmQgcG9zc2libHkgdGhlIFNDU0kgZHJpdmVycyksIGFuZCB0aGUgSVNPIDk2NjAgZmlsZXN5c3RlbQorbW9kdWxlLiAgVGhlIGtlcm5lbCBjYW4gYmUgc21hbGwgZW5vdWdoLCBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgb3RoZXIKK2ZpbGVzeXN0ZW1zLCBsaWtlIHRoZSBxdWl0ZSBsYXJnZSBleHQyZnMgbW9kdWxlLCB3aGljaCBjYW4gdGhlbiBiZQorbG9hZGVkIG9mZiB0aGUgQ0QgYXQgYSBsYXRlciBzdGFnZSBvZiB0aGUgaW5zdGFsbGF0aW9uLiAgQW5vdGhlciB1c2UKK3dvdWxkIGJlIGZvciBhIHJlY292ZXJ5IGRpc2ssIHdoZW4geW91IGFyZSByZWluc3RhbGxpbmcgYSB3b3Jrc3RhdGlvbgorZnJvbSB0aGUgbmV0d29yaywgYW5kIHlvdSB3aWxsIGhhdmUgYWxsIHRoZSB0b29scy9tb2R1bGVzIGF2YWlsYWJsZQorZnJvbSBhIG5lYXJieSBzZXJ2ZXIsIHNvIHlvdSBkb24ndCB3YW50IHRvIGNhcnJ5IHR3byBkaXNrcyBmb3IgdGhpcworcHVycG9zZSwganVzdCBiZWNhdXNlIGl0IHdvbid0IGZpdCBpbnRvIGV4dDIuCisKK3JvbWZzIG9wZXJhdGVzIG9uIGJsb2NrIGRldmljZXMgYXMgeW91IGNhbiBleHBlY3QsIGFuZCB0aGUgdW5kZXJseWluZworc3RydWN0dXJlIGlzIHZlcnkgc2ltcGxlLiAgRXZlcnkgYWNjZXNzaWJsZSBzdHJ1Y3R1cmUgYmVnaW5zIG9uIDE2CitieXRlIGJvdW5kYXJpZXMgZm9yIGZhc3QgYWNjZXNzLiAgVGhlIG1pbmltdW0gc3BhY2UgYSBmaWxlIHdpbGwgdGFrZQoraXMgMzIgYnl0ZXMgKHRoaXMgaXMgYW4gZW1wdHkgZmlsZSwgd2l0aCBhIGxlc3MgdGhhbiAxNiBjaGFyYWN0ZXIKK25hbWUpLiAgVGhlIG1heGltdW0gb3ZlcmhlYWQgZm9yIGFueSBub24tZW1wdHkgZmlsZSBpcyB0aGUgaGVhZGVyLCBhbmQKK3RoZSAxNiBieXRlIHBhZGRpbmcgZm9yIHRoZSBuYW1lIGFuZCB0aGUgY29udGVudHMsIGFsc28gMTYrMTQrMTUgPSA0NQorYnl0ZXMuICBUaGlzIGlzIHF1aXRlIHJhcmUgaG93ZXZlciwgc2luY2UgbW9zdCBmaWxlIG5hbWVzIGFyZSBsb25nZXIKK3RoYW4gMyBieXRlcywgYW5kIHNob3J0ZXIgdGhhbiAxNSBieXRlcy4KKworVGhlIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbSBpcyB0aGUgZm9sbG93aW5nOgorCitvZmZzZXQJICAgIGNvbnRlbnQKKworCSstLS0rLS0tKy0tLSstLS0rCisgIDAJfCAtIHwgciB8IG8gfCBtIHwgIFwKKwkrLS0tKy0tLSstLS0rLS0tKwlUaGUgQVNDSUkgcmVwcmVzZW50YXRpb24gb2YgdGhvc2UgYnl0ZXMKKyAgNAl8IDEgfCBmIHwgcyB8IC0gfCAgLwkoaS5lLiAiLXJvbTFmcy0iKQorCSstLS0rLS0tKy0tLSstLS0rCisgIDgJfCAgIGZ1bGwgc2l6ZQl8CVRoZSBudW1iZXIgb2YgYWNjZXNzaWJsZSBieXRlcyBpbiB0aGlzIGZzLgorCSstLS0rLS0tKy0tLSstLS0rCisgMTIJfCAgICBjaGVja3N1bQl8CVRoZSBjaGVja3N1bSBvZiB0aGUgRklSU1QgNTEyIEJZVEVTLgorCSstLS0rLS0tKy0tLSstLS0rCisgMTYJfCB2b2x1bWUgbmFtZQl8CVRoZSB6ZXJvIHRlcm1pbmF0ZWQgbmFtZSBvZiB0aGUgdm9sdW1lLAorCTogICAgICAgICAgICAgICA6CXBhZGRlZCB0byAxNiBieXRlIGJvdW5kYXJ5LgorCSstLS0rLS0tKy0tLSstLS0rCisgeHgJfCAgICAgZmlsZQl8CisJOiAgICBoZWFkZXJzCToKKworRXZlcnkgbXVsdGkgYnl0ZSB2YWx1ZSAoMzIgYml0IHdvcmRzLCBJJ2xsIHVzZSB0aGUgbG9uZ3dvcmRzIHRlcm0gZnJvbQorbm93IG9uKSBtdXN0IGJlIGluIGJpZyBlbmRpYW4gb3JkZXIuCisKK1RoZSBmaXJzdCBlaWdodCBieXRlcyBpZGVudGlmeSB0aGUgZmlsZXN5c3RlbSwgZXZlbiBmb3IgdGhlIGNhc3VhbAoraW5zcGVjdG9yLiAgQWZ0ZXIgdGhhdCwgaW4gdGhlIDNyZCBsb25nd29yZCwgaXQgY29udGFpbnMgdGhlIG51bWJlciBvZgorYnl0ZXMgYWNjZXNzaWJsZSBmcm9tIHRoZSBzdGFydCBvZiB0aGlzIGZpbGVzeXN0ZW0uICBUaGUgNHRoIGxvbmd3b3JkCitpcyB0aGUgY2hlY2tzdW0gb2YgdGhlIGZpcnN0IDUxMiBieXRlcyAob3IgdGhlIG51bWJlciBvZiBieXRlcworYWNjZXNzaWJsZSwgd2hpY2hldmVyIGlzIHNtYWxsZXIpLiAgVGhlIGFwcGxpZWQgYWxnb3JpdGhtIGlzIHRoZSBzYW1lCithcyBpbiB0aGUgQUZGUyBmaWxlc3lzdGVtLCBuYW1lbHkgYSBzaW1wbGUgc3VtIG9mIHRoZSBsb25nd29yZHMKKyhhc3N1bWluZyBiaWdlbmRpYW4gcXVhbnRpdGllcyBhZ2FpbikuICBGb3IgZGV0YWlscywgcGxlYXNlIGNvbnN1bHQKK3RoZSBzb3VyY2UuICBUaGlzIGFsZ29yaXRobSB3YXMgY2hvc2VuIGJlY2F1c2UgYWx0aG91Z2ggaXQncyBub3QgcXVpdGUKK3JlbGlhYmxlLCBpdCBkb2VzIG5vdCByZXF1aXJlIGFueSB0YWJsZXMsIGFuZCBpdCBpcyB2ZXJ5IHNpbXBsZS4KKworVGhlIGZvbGxvd2luZyBieXRlcyBhcmUgbm93IHBhcnQgb2YgdGhlIGZpbGUgc3lzdGVtOyBlYWNoIGZpbGUgaGVhZGVyCittdXN0IGJlZ2luIG9uIGEgMTYgYnl0ZSBib3VuZGFyeS4KKworb2Zmc2V0CSAgICBjb250ZW50CisKKyAgICAgCSstLS0rLS0tKy0tLSstLS0rCisgIDAJfCBuZXh0IGZpbGVoZHJ8WHwJVGhlIG9mZnNldCBvZiB0aGUgbmV4dCBmaWxlIGhlYWRlcgorCSstLS0rLS0tKy0tLSstLS0rCSAgKHplcm8gaWYgbm8gbW9yZSBmaWxlcykKKyAgNAl8ICAgc3BlYy5pbmZvCXwJSW5mbyBmb3IgZGlyZWN0b3JpZXMvaGFyZCBsaW5rcy9kZXZpY2VzCisJKy0tLSstLS0rLS0tKy0tLSsKKyAgOAl8ICAgICBzaXplICAgICAgfAlUaGUgc2l6ZSBvZiB0aGlzIGZpbGUgaW4gYnl0ZXMKKwkrLS0tKy0tLSstLS0rLS0tKworIDEyCXwgICBjaGVja3N1bQl8CUNvdmVyaW5nIHRoZSBtZXRhIGRhdGEsIGluY2x1ZGluZyB0aGUgZmlsZQorCSstLS0rLS0tKy0tLSstLS0rCSAgbmFtZSwgYW5kIHBhZGRpbmcKKyAxNgl8IGZpbGUgbmFtZSAgICAgfAlUaGUgemVybyB0ZXJtaW5hdGVkIG5hbWUgb2YgdGhlIGZpbGUsCisJOiAgICAgICAgICAgICAgIDoJcGFkZGVkIHRvIDE2IGJ5dGUgYm91bmRhcnkKKwkrLS0tKy0tLSstLS0rLS0tKworIHh4CXwgZmlsZSBkYXRhCXwKKwk6CQk6CisKK1NpbmNlIHRoZSBmaWxlIGhlYWRlcnMgYmVnaW4gYWx3YXlzIGF0IGEgMTYgYnl0ZSBib3VuZGFyeSwgdGhlIGxvd2VzdAorNCBiaXRzIHdvdWxkIGJlIGFsd2F5cyB6ZXJvIGluIHRoZSBuZXh0IGZpbGVoZHIgcG9pbnRlci4gIFRoZXNlIGZvdXIKK2JpdHMgYXJlIHVzZWQgZm9yIHRoZSBtb2RlIGluZm9ybWF0aW9uLiAgQml0cyAwLi4yIHNwZWNpZnkgdGhlIHR5cGUgb2YKK3RoZSBmaWxlOyB3aGlsZSBiaXQgNCBzaG93cyBpZiB0aGUgZmlsZSBpcyBleGVjdXRhYmxlIG9yIG5vdC4gIFRoZQorcGVybWlzc2lvbnMgYXJlIGFzc3VtZWQgdG8gYmUgd29ybGQgcmVhZGFibGUsIGlmIHRoaXMgYml0IGlzIG5vdCBzZXQsCithbmQgd29ybGQgZXhlY3V0YWJsZSBpZiBpdCBpczsgZXhjZXB0IHRoZSBjaGFyYWN0ZXIgYW5kIGJsb2NrIGRldmljZXMsCit0aGV5IGFyZSBuZXZlciBhY2Nlc3NpYmxlIGZvciBvdGhlciB0aGFuIG93bmVyLiAgVGhlIG93bmVyIG9mIGV2ZXJ5CitmaWxlIGlzIHVzZXIgYW5kIGdyb3VwIDAsIHRoaXMgc2hvdWxkIG5ldmVyIGJlIGEgcHJvYmxlbSBmb3IgdGhlCitpbnRlbmRlZCB1c2UuICBUaGUgbWFwcGluZyBvZiB0aGUgOCBwb3NzaWJsZSB2YWx1ZXMgdG8gZmlsZSB0eXBlcyBpcwordGhlIGZvbGxvd2luZzoKKworCSAgbWFwcGluZwkJc3BlYy5pbmZvIG1lYW5zCisgMAloYXJkIGxpbmsJbGluayBkZXN0aW5hdGlvbiBbZmlsZSBoZWFkZXJdCisgMQlkaXJlY3RvcnkJZmlyc3QgZmlsZSdzIGhlYWRlcgorIDIJcmVndWxhciBmaWxlCXVudXNlZCwgbXVzdCBiZSB6ZXJvIFtNQlpdCisgMwlzeW1ib2xpYyBsaW5rCXVudXNlZCwgTUJaIChmaWxlIGRhdGEgaXMgdGhlIGxpbmsgY29udGVudCkKKyA0CWJsb2NrIGRldmljZQkxNi8xNiBiaXRzIG1ham9yL21pbm9yIG51bWJlcgorIDUJY2hhciBkZXZpY2UJCSAgICAtICIgLQorIDYJc29ja2V0CQl1bnVzZWQsIE1CWgorIDcJZmlmbwkJdW51c2VkLCBNQloKKworTm90ZSB0aGF0IGhhcmQgbGlua3MgYXJlIHNwZWNpZmljYWxseSBtYXJrZWQgaW4gdGhpcyBmaWxlc3lzdGVtLCBidXQKK3RoZXkgd2lsbCBiZWhhdmUgYXMgeW91IGNhbiBleHBlY3QgKGkuZS4gc2hhcmUgdGhlIGlub2RlIG51bWJlcikuCitOb3RlIGFsc28gdGhhdCBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIG5vdCBjcmVhdGUgaGFyZCBsaW5rCitsb29wcywgYW5kIGNyZWF0aW5nIGFsbCB0aGUgLiBhbmQgLi4gbGlua3MgZm9yIGRpcmVjdG9yaWVzLiAgVGhpcyBpcworbm9ybWFsbHkgZG9uZSBjb3JyZWN0bHkgYnkgdGhlIGdlbnJvbWZzIHByb2dyYW0uICBQbGVhc2UgcmVmcmFpbiBmcm9tCit1c2luZyB0aGUgZXhlY3V0YWJsZSBiaXRzIGZvciBzcGVjaWFsIHB1cnBvc2VzIG9uIHRoZSBzb2NrZXQgYW5kIGZpZm8KK3NwZWNpYWwgZmlsZXMsIHRoZXkgbWF5IGhhdmUgb3RoZXIgdXNlcyBpbiB0aGUgZnV0dXJlLiAgQWRkaXRpb25hbGx5LAorcGxlYXNlIHJlbWVtYmVyIHRoYXQgb25seSByZWd1bGFyIGZpbGVzLCBhbmQgc3ltbGlua3MgYXJlIHN1cHBvc2VkIHRvCitoYXZlIGEgbm9uemVybyBzaXplIGZpZWxkOyB0aGV5IGNvbnRhaW4gdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUKK2RpcmVjdGx5IGFmdGVyIHRoZSAocGFkZGVkKSBmaWxlIG5hbWUuCisKK0Fub3RoZXIgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IHJvbWZzIHdvcmtzIG9uIGZpbGUgaGVhZGVycyBhbmQgZGF0YQorYWxpZ25lZCB0byAxNiBieXRlIGJvdW5kYXJpZXMsIGJ1dCBtb3N0IGhhcmR3YXJlIGRldmljZXMgYW5kIHRoZSBibG9jaworZGV2aWNlIGRyaXZlcnMgYXJlIHVuYWJsZSB0byBjb3BlIHdpdGggc21hbGxlciB0aGFuIGJsb2NrLXNpemVkIGRhdGEuCitUbyBvdmVyY29tZSB0aGlzIGxpbWl0YXRpb24sIHRoZSB3aG9sZSBzaXplIG9mIHRoZSBmaWxlIHN5c3RlbSBtdXN0IGJlCitwYWRkZWQgdG8gYW4gMTAyNCBieXRlIGJvdW5kYXJ5LgorCitJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgb3Igc3VnZ2VzdGlvbnMgY29uY2VybmluZyB0aGlzIGZpbGUgc3lzdGVtLAorcGxlYXNlIGNvbnRhY3QgbWUuICBIb3dldmVyLCB0aGluayB0d2ljZSBiZWZvcmUgd2FudGluZyBtZSB0byBhZGQKK2ZlYXR1cmVzIGFuZCBjb2RlLCBiZWNhdXNlIHRoZSBwcmltYXJ5IGFuZCBtb3N0IGltcG9ydGFudCBhZHZhbnRhZ2Ugb2YKK3RoaXMgZmlsZSBzeXN0ZW0gaXMgdGhlIHNtYWxsIGNvZGUuICBPbiB0aGUgb3RoZXIgaGFuZCwgZG9uJ3QgYmUKK2FsYXJtZWQsIEknbSBub3QgZ2V0dGluZyB0aGF0IG11Y2ggcm9tZnMgcmVsYXRlZCBtYWlsLiAgTm93IEkgY2FuCit1bmRlcnN0YW5kIHdoeSBBdmVyeSB3cm90ZSBwb2VtcyBpbiB0aGUgQVJDbmV0IGRvY3MgdG8gZ2V0IHNvbWUgbW9yZQorZmVlZGJhY2suIDopCisKK3JvbWZzIGhhcyBhbHNvIGEgbWFpbGluZyBsaXN0LCBhbmQgdG8gZGF0ZSwgaXQgaGFzbid0IHJlY2VpdmVkIGFueQordHJhZmZpYywgc28geW91IGFyZSB3ZWxjb21lIHRvIGpvaW4gaXQgdG8gZGlzY3VzcyB5b3VyIGlkZWFzLiA6KQorCitJdCdzIHJ1biBieSBlem1sbSwgc28geW91IGNhbiBzdWJzY3JpYmUgdG8gaXQgYnkgc2VuZGluZyBhIG1lc3NhZ2UKK3RvIHJvbWZzLXN1YnNjcmliZUBzaGFkb3cuYmFua2kuaHUsIHRoZSBjb250ZW50IGlzIGlycmVsZXZhbnQuCisKK1BlbmRpbmcgaXNzdWVzOgorCistIFBlcm1pc3Npb25zIGFuZCBvd25lciBpbmZvcm1hdGlvbiBhcmUgcHJldHR5IGVzc2VudGlhbCBmZWF0dXJlcyBvZiBhCitVbip4IGxpa2Ugc3lzdGVtLCBidXQgcm9tZnMgZG9lcyBub3QgcHJvdmlkZSB0aGUgZnVsbCBwb3NzaWJpbGl0aWVzLgorSSBoYXZlIG5ldmVyIGZvdW5kIHRoaXMgbGltaXRpbmcsIGJ1dCBvdGhlcnMgbWlnaHQuCisKKy0gVGhlIGZpbGUgc3lzdGVtIGlzIHJlYWQgb25seSwgc28gaXQgY2FuIGJlIHZlcnkgc21hbGwsIGJ1dCBpbiBjYXNlCitvbmUgd291bGQgd2FudCB0byB3cml0ZSBfYW55dGhpbmdfIHRvIGEgZmlsZSBzeXN0ZW0sIGhlIHN0aWxsIG5lZWRzCithIHdyaXRhYmxlIGZpbGUgc3lzdGVtLCB0aHVzIG5lZ2F0aW5nIHRoZSBzaXplIGFkdmFudGFnZXMuICBQb3NzaWJsZQorc29sdXRpb25zOiBpbXBsZW1lbnQgd3JpdGUgYWNjZXNzIGFzIGEgY29tcGlsZS10aW1lIG9wdGlvbiwgb3IgYSBuZXcsCitzaW1pbGFybHkgc21hbGwgd3JpdGFibGUgZmlsZXN5c3RlbSBmb3IgUkFNIGRpc2tzLgorCistIFNpbmNlIHRoZSBmaWxlcyBhcmUgb25seSByZXF1aXJlZCB0byBoYXZlIGFsaWdubWVudCBvbiBhIDE2IGJ5dGUKK2JvdW5kYXJ5LCBpdCBpcyBjdXJyZW50bHkgcG9zc2libHkgc3Vib3B0aW1hbCB0byByZWFkIG9yIGV4ZWN1dGUgZmlsZXMKK2Zyb20gdGhlIGZpbGVzeXN0ZW0uICBJdCBtaWdodCBiZSByZXNvbHZlZCBieSByZW9yZGVyaW5nIGZpbGUgZGF0YSB0bworaGF2ZSBtb3N0IG9mIGl0IChpLmUuIGV4Y2VwdCB0aGUgc3RhcnQgYW5kIHRoZSBlbmQpIGxheWluZyBhdCAibmF0dXJhbCIKK2JvdW5kYXJpZXMsIHRodXMgaXQgd291bGQgYmUgcG9zc2libGUgdG8gZGlyZWN0bHkgbWFwIGEgYmlnIHBvcnRpb24gb2YKK3RoZSBmaWxlIGNvbnRlbnRzIHRvIHRoZSBtbSBzdWJzeXN0ZW0uCisKKy0gQ29tcHJlc3Npb24gbWlnaHQgYmUgYW4gdXNlZnVsIGZlYXR1cmUsIGJ1dCBtZW1vcnkgaXMgcXVpdGUgYQorbGltaXRpbmcgZmFjdG9yIGluIG15IGV5ZXMuCisKKy0gV2hlcmUgaXQgaXMgdXNlZD8KKworLSBEb2VzIGl0IHdvcmsgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGFuIGludGVsIGFuZCBtb3Rvcm9sYT8KKworCitIYXZlIGZ1biwKK0phbm9zIEZhcmthcyA8Y2hleHVtQHNoYWRvdy5iYW5raS5odT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc21iZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zbWJmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3M2VmMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc21iZnMudHh0CkBAIC0wLDAgKzEsOCBAQAorU21iZnMgaXMgYSBmaWxlc3lzdGVtIHRoYXQgaW1wbGVtZW50cyB0aGUgU01CIHByb3RvY29sLCB3aGljaCBpcyB0aGUKK3Byb3RvY29sIHVzZWQgYnkgV2luZG93cyBmb3IgV29ya2dyb3VwcywgV2luZG93cyA5NSBhbmQgV2luZG93cyBOVC4KK1NtYmZzIHdhcyBpbnNwaXJlZCBieSBTYW1iYSwgdGhlIHByb2dyYW0gd3JpdHRlbiBieSBBbmRyZXcgVHJpZGdlbGwKK3RoYXQgdHVybnMgYW55IFVuaXggaG9zdCBpbnRvIGEgZmlsZSBzZXJ2ZXIgZm9yIERPUyBvciBXaW5kb3dzIGNsaWVudHMuCisKK1NtYmZzIGlzIGEgU01CIGNsaWVudCwgYnV0IHVzZXMgcGFydHMgb2Ygc2FtYmEgZm9yIGl0J3Mgb3BlcmF0aW9uLiBGb3IKK21vcmUgaW5mbyBvbiBzYW1iYSwgaW5jbHVkaW5nIGRvY3VtZW50YXRpb24sIHBsZWFzZSBnbyB0bworaHR0cDovL3d3dy5zYW1iYS5vcmcvIGFuZCB0aGVuIG9uIHRvIHlvdXIgbmVhcmVzdCBtaXJyb3IuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLXBjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLXBjaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3ZDAyNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dApAQCAtMCwwICsxLDg4IEBACitBY2Nlc3NpbmcgUENJIGRldmljZSByZXNvdXJjZXMgdGhyb3VnaCBzeXNmcworCitzeXNmcywgdXN1YWxseSBtb3VudGVkIGF0IC9zeXMsIHByb3ZpZGVzIGFjY2VzcyB0byBQQ0kgcmVzb3VyY2VzIG9uIHBsYXRmb3JtcwordGhhdCBzdXBwb3J0IGl0LiAgRm9yIGV4YW1wbGUsIGEgZ2l2ZW4gYnVzIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorCisgICAgIC9zeXMvZGV2aWNlcy9wY2kwMDAwOjE3CisgICAgIHwtLSAwMDAwOjE3OjAwLjAKKyAgICAgfCAgIHwtLSBjbGFzcworICAgICB8ICAgfC0tIGNvbmZpZworICAgICB8ICAgfC0tIGRldGFjaF9zdGF0ZQorICAgICB8ICAgfC0tIGRldmljZQorICAgICB8ICAgfC0tIGlycQorICAgICB8ICAgfC0tIGxvY2FsX2NwdXMKKyAgICAgfCAgIHwtLSByZXNvdXJjZQorICAgICB8ICAgfC0tIHJlc291cmNlMAorICAgICB8ICAgfC0tIHJlc291cmNlMQorICAgICB8ICAgfC0tIHJlc291cmNlMgorICAgICB8ICAgfC0tIHJvbQorICAgICB8ICAgfC0tIHN1YnN5c3RlbV9kZXZpY2UKKyAgICAgfCAgIHwtLSBzdWJzeXN0ZW1fdmVuZG9yCisgICAgIHwgICBgLS0gdmVuZG9yCisgICAgIGAtLSBkZXRhY2hfc3RhdGUKKworVGhlIHRvcG1vc3QgZWxlbWVudCBkZXNjcmliZXMgdGhlIFBDSSBkb21haW4gYW5kIGJ1cyBudW1iZXIuICBJbiB0aGlzIGNhc2UsCit0aGUgZG9tYWluIG51bWJlciBpcyAwMDAwIGFuZCB0aGUgYnVzIG51bWJlciBpcyAxNyAoYm90aCB2YWx1ZXMgYXJlIGluIGhleCkuCitUaGlzIGJ1cyBjb250YWlucyBhIHNpbmdsZSBmdW5jdGlvbiBkZXZpY2UgaW4gc2xvdCAwLiAgVGhlIGRvbWFpbiBhbmQgYnVzCitudW1iZXJzIGFyZSByZXByb2R1Y2VkIGZvciBjb252ZW5pZW5jZS4gIFVuZGVyIHRoZSBkZXZpY2UgZGlyZWN0b3J5IGFyZSBzZXZlcmFsCitmaWxlcywgZWFjaCB3aXRoIHRoZWlyIG93biBmdW5jdGlvbi4KKworICAgICAgIGZpbGUJCSAgIGZ1bmN0aW9uCisgICAgICAgLS0tLQkJICAgLS0tLS0tLS0KKyAgICAgICBjbGFzcwkJICAgUENJIGNsYXNzIChhc2NpaSwgcm8pCisgICAgICAgY29uZmlnCQkgICBQQ0kgY29uZmlnIHNwYWNlIChiaW5hcnksIHJ3KQorICAgICAgIGRldGFjaF9zdGF0ZQkgICBjb25uZWN0aW9uIHN0YXR1cyAoYm9vbCwgcncpCisgICAgICAgZGV2aWNlCQkgICBQQ0kgZGV2aWNlIChhc2NpaSwgcm8pCisgICAgICAgaXJxCQkgICBJUlEgbnVtYmVyIChhc2NpaSwgcm8pCisgICAgICAgbG9jYWxfY3B1cwkgICBuZWFyYnkgQ1BVIG1hc2sgKGNwdW1hc2ssIHJvKQorICAgICAgIHJlc291cmNlCQkgICBQQ0kgcmVzb3VyY2UgaG9zdCBhZGRyZXNzZXMgKGFzY2lpLCBybykKKyAgICAgICByZXNvdXJjZTAuLk4JICAgUENJIHJlc291cmNlIE4sIGlmIHByZXNlbnQgKGJpbmFyeSwgbW1hcCkKKyAgICAgICByb20JCSAgIFBDSSBST00gcmVzb3VyY2UsIGlmIHByZXNlbnQgKGJpbmFyeSwgcm8pCisgICAgICAgc3Vic3lzdGVtX2RldmljZQkgICBQQ0kgc3Vic3lzdGVtIGRldmljZSAoYXNjaWksIHJvKQorICAgICAgIHN1YnN5c3RlbV92ZW5kb3IJICAgUENJIHN1YnN5c3RlbSB2ZW5kb3IgKGFzY2lpLCBybykKKyAgICAgICB2ZW5kb3IJCSAgIFBDSSB2ZW5kb3IgKGFzY2lpLCBybykKKworICBybyAtIHJlYWQgb25seSBmaWxlCisgIHJ3IC0gZmlsZSBpcyByZWFkYWJsZSBhbmQgd3JpdGFibGUKKyAgbW1hcCAtIGZpbGUgaXMgbW1hcGFibGUKKyAgYXNjaWkgLSBmaWxlIGNvbnRhaW5zIGFzY2lpIHRleHQKKyAgYmluYXJ5IC0gZmlsZSBjb250YWlucyBiaW5hcnkgZGF0YQorICBjcHVtYXNrIC0gZmlsZSBjb250YWlucyBhIGNwdW1hc2sgdHlwZQorCitUaGUgcmVhZCBvbmx5IGZpbGVzIGFyZSBpbmZvcm1hdGlvbmFsLCB3cml0ZXMgdG8gdGhlbSB3aWxsIGJlIGlnbm9yZWQuCitXcml0YWJsZSBmaWxlcyBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGFjdGlvbnMgb24gdGhlIGRldmljZSAoZS5nLiBjaGFuZ2luZworY29uZmlnIHNwYWNlLCBkZXRhY2hpbmcgYSBkZXZpY2UpLiAgbW1hcGFibGUgZmlsZXMgYXJlIGF2YWlsYWJsZSB2aWEgYW4KK21tYXAgb2YgdGhlIGZpbGUgYXQgb2Zmc2V0IDAgYW5kIGNhbiBiZSB1c2VkIHRvIGRvIGFjdHVhbCBkZXZpY2UgcHJvZ3JhbW1pbmcKK2Zyb20gdXNlcnNwYWNlLiAgTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zIGRvbid0IHN1cHBvcnQgbW1hcHBpbmcgb2YgY2VydGFpbgorcmVzb3VyY2VzLCBzbyBiZSBzdXJlIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBhbnkgYXR0ZW1wdGVkIG1tYXAuCisKK0FjY2Vzc2luZyBsZWdhY3kgcmVzb3VyY2VzIHRocm91Z2ggc3lzZnMKKworTGVnYWN5IEkvTyBwb3J0IGFuZCBJU0EgbWVtb3J5IHJlc291cmNlcyBhcmUgYWxzbyBwcm92aWRlZCBpbiBzeXNmcyBpZiB0aGUKK3VuZGVybHlpbmcgcGxhdGZvcm0gc3VwcG9ydHMgdGhlbS4gIFRoZXkncmUgbG9jYXRlZCBpbiB0aGUgUENJIGNsYXNzIGhlaXJhcmNoeSwKK2UuZy4KKworCS9zeXMvY2xhc3MvcGNpX2J1cy8wMDAwOjE3LworCXwtLSBicmlkZ2UgLT4gLi4vLi4vLi4vZGV2aWNlcy9wY2kwMDAwOjE3CisJfC0tIGNwdWFmZmluaXR5CisJfC0tIGxlZ2FjeV9pbworCWAtLSBsZWdhY3lfbWVtCisKK1RoZSBsZWdhY3lfaW8gZmlsZSBpcyBhIHJlYWQvd3JpdGUgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0bworZG8gbGVnYWN5IHBvcnQgSS9PLiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBvcGVuIHRoZSBmaWxlLCBzZWVrIHRvIHRoZSBkZXNpcmVkCitwb3J0IChlLmcuIDB4M2U4KSBhbmQgZG8gYSByZWFkIG9yIGEgd3JpdGUgb2YgMSwgMiBvciA0IGJ5dGVzLiAgVGhlIGxlZ2FjeV9tZW0KK2ZpbGUgc2hvdWxkIGJlIG1tYXBwZWQgd2l0aCBhbiBvZmZzZXQgY29ycmVzcG9uZGluZyB0byB0aGUgbWVtb3J5IG9mZnNldAorZGVzaXJlZCwgZS5nLiAweGEwMDAwIGZvciB0aGUgVkdBIGZyYW1lIGJ1ZmZlci4gIFRoZSBhcHBsaWNhdGlvbiBjYW4gdGhlbgorc2ltcGx5IGRlcmVmZXJlbmNlIHRoZSByZXR1cm5lZCBwb2ludGVyIChhZnRlciBjaGVja2luZyBmb3IgZXJyb3JzIG9mIGNvdXJzZSkKK3RvIGFjY2VzcyBsZWdhY3kgbWVtb3J5IHNwYWNlLgorCitTdXBwb3J0aW5nIFBDSSBhY2Nlc3Mgb24gbmV3IHBsYXRmb3JtcworCitJbiBvcmRlciB0byBzdXBwb3J0IFBDSSByZXNvdXJjZSBtYXBwaW5nIGFzIGRlc2NyaWJlZCBhYm92ZSwgTGludXggcGxhdGZvcm0KK2NvZGUgbXVzdCBkZWZpbmUgSEFWRV9QQ0lfTU1BUCBhbmQgcHJvdmlkZSBhIHBjaV9tbWFwX3BhZ2VfcmFuZ2UgZnVuY3Rpb24uCitQbGF0Zm9ybXMgYXJlIGZyZWUgdG8gb25seSBzdXBwb3J0IHN1YnNldHMgb2YgdGhlIG1tYXAgZnVuY3Rpb25hbGl0eSwgYnV0Cit1c2VmdWwgcmV0dXJuIGNvZGVzIHNob3VsZCBiZSBwcm92aWRlZC4KKworTGVnYWN5IHJlc291cmNlcyBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBIQVZFX1BDSV9MRUdBQ1kgZGVmaW5lLiAgUGxhdGZvcm1zCit3aXNoaW5nIHRvIHN1cHBvcnQgbGVnYWN5IGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGRlZmluZSBpdCBhbmQgcHJvdmlkZQorcGNpX2xlZ2FjeV9yZWFkLCBwY2lfbGVnYWN5X3dyaXRlIGFuZCBwY2lfbW1hcF9sZWdhY3lfcGFnZV9yYW5nZSBmdW5jdGlvbnMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY2YzJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKQEAgLTAsMCArMSwzNDEgQEAKKworc3lzZnMgLSBfVGhlXyBmaWxlc3lzdGVtIGZvciBleHBvcnRpbmcga2VybmVsIG9iamVjdHMuIAorCitQYXRyaWNrIE1vY2hlbAk8bW9jaGVsQG9zZGwub3JnPgorCisxMCBKYW51YXJ5IDIwMDMKKworCitXaGF0IGl0IGlzOgorfn5+fn5+fn5+fn4KKworc3lzZnMgaXMgYSByYW0tYmFzZWQgZmlsZXN5c3RlbSBpbml0aWFsbHkgYmFzZWQgb24gcmFtZnMuIEl0IHByb3ZpZGVzCithIG1lYW5zIHRvIGV4cG9ydCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCB0aGVpciBhdHRyaWJ1dGVzLCBhbmQgdGhlIAorbGlua2FnZXMgYmV0d2VlbiB0aGVtIHRvIHVzZXJzcGFjZS4gCisKK3N5c2ZzIGlzIHRpZWQgaW5oZXJlbnRseSB0byB0aGUga29iamVjdCBpbmZyYXN0cnVjdHVyZS4gUGxlYXNlIHJlYWQKK0RvY3VtZW50YXRpb24va29iamVjdC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gY29uY2VybmluZyB0aGUga29iamVjdAoraW50ZXJmYWNlLiAKKworCitVc2luZyBzeXNmcworfn5+fn5+fn5+fn4KKworc3lzZnMgaXMgYWx3YXlzIGNvbXBpbGVkIGluLiBZb3UgY2FuIGFjY2VzcyBpdCBieSBkb2luZzoKKworICAgIG1vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMgCisKKworRGlyZWN0b3J5IENyZWF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn4KKworRm9yIGV2ZXJ5IGtvYmplY3QgdGhhdCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbSwgYSBkaXJlY3RvcnkgaXMKK2NyZWF0ZWQgZm9yIGl0IGluIHN5c2ZzLiBUaGF0IGRpcmVjdG9yeSBpcyBjcmVhdGVkIGFzIGEgc3ViZGlyZWN0b3J5CitvZiB0aGUga29iamVjdCdzIHBhcmVudCwgZXhwcmVzc2luZyBpbnRlcm5hbCBvYmplY3QgaGllcmFyY2hpZXMgdG8KK3VzZXJzcGFjZS4gVG9wLWxldmVsIGRpcmVjdG9yaWVzIGluIHN5c2ZzIHJlcHJlc2VudCB0aGUgY29tbW9uCithbmNlc3RvcnMgb2Ygb2JqZWN0IGhpZXJhcmNoaWVzOyBpLmUuIHRoZSBzdWJzeXN0ZW1zIHRoZSBvYmplY3RzCitiZWxvbmcgdG8uIAorCitTeXNmcyBpbnRlcm5hbGx5IHN0b3JlcyB0aGUga29iamVjdCB0aGF0IG93bnMgdGhlIGRpcmVjdG9yeSBpbiB0aGUKKy0+ZF9mc2RhdGEgcG9pbnRlciBvZiB0aGUgZGlyZWN0b3J5J3MgZGVudHJ5LiBUaGlzIGFsbG93cyBzeXNmcyB0byBkbworcmVmZXJlbmNlIGNvdW50aW5nIGRpcmVjdGx5IG9uIHRoZSBrb2JqZWN0IHdoZW4gdGhlIGZpbGUgaXMgb3BlbmVkIGFuZAorY2xvc2VkLiAKKworCitBdHRyaWJ1dGVzCit+fn5+fn5+fn5+CisKK0F0dHJpYnV0ZXMgY2FuIGJlIGV4cG9ydGVkIGZvciBrb2JqZWN0cyBpbiB0aGUgZm9ybSBvZiByZWd1bGFyIGZpbGVzIGluCit0aGUgZmlsZXN5c3RlbS4gU3lzZnMgZm9yd2FyZHMgZmlsZSBJL08gb3BlcmF0aW9ucyB0byBtZXRob2RzIGRlZmluZWQKK2ZvciB0aGUgYXR0cmlidXRlcywgcHJvdmlkaW5nIGEgbWVhbnMgdG8gcmVhZCBhbmQgd3JpdGUga2VybmVsCithdHRyaWJ1dGVzLgorCitBdHRyaWJ1dGVzIHNob3VsZCBiZSBBU0NJSSB0ZXh0IGZpbGVzLCBwcmVmZXJhYmx5IHdpdGggb25seSBvbmUgdmFsdWUKK3BlciBmaWxlLiBJdCBpcyBub3RlZCB0aGF0IGl0IG1heSBub3QgYmUgZWZmaWNpZW50IHRvIGNvbnRhaW4gb25seQordmFsdWUgcGVyIGZpbGUsIHNvIGl0IGlzIHNvY2lhbGx5IGFjY2VwdGFibGUgdG8gZXhwcmVzcyBhbiBhcnJheSBvZgordmFsdWVzIG9mIHRoZSBzYW1lIHR5cGUuIAorCitNaXhpbmcgdHlwZXMsIGV4cHJlc3NpbmcgbXVsdGlwbGUgbGluZXMgb2YgZGF0YSwgYW5kIGRvaW5nIGZhbmN5Citmb3JtYXR0aW5nIG9mIGRhdGEgaXMgaGVhdmlseSBmcm93bmVkIHVwb24uIERvaW5nIHRoZXNlIHRoaW5ncyBtYXkgZ2V0Cit5b3UgcHVibGljYWxseSBodW1pbGlhdGVkIGFuZCB5b3VyIGNvZGUgcmV3cml0dGVuIHdpdGhvdXQgbm90aWNlLiAKKworCitBbiBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBpcyBzaW1wbHk6CisKK3N0cnVjdCBhdHRyaWJ1dGUgeworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqIG5hbWU7CisgICAgICAgIG1vZGVfdCAgICAgICAgICAgICAgICAgIG1vZGU7Cit9OworCisKK2ludCBzeXNmc19jcmVhdGVfZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyKTsKK3ZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0cik7CisKKworQSBiYXJlIGF0dHJpYnV0ZSBjb250YWlucyBubyBtZWFucyB0byByZWFkIG9yIHdyaXRlIHRoZSB2YWx1ZSBvZiB0aGUKK2F0dHJpYnV0ZS4gU3Vic3lzdGVtcyBhcmUgZW5jb3VyYWdlZCB0byBkZWZpbmUgdGhlaXIgb3duIGF0dHJpYnV0ZQorc3RydWN0dXJlIGFuZCB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBhdHRyaWJ1dGVzIGZvcgorYSBzcGVjaWZpYyBvYmplY3QgdHlwZS4gCisKK0ZvciBleGFtcGxlLCB0aGUgZHJpdmVyIG1vZGVsIGRlZmluZXMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbGlrZToKKworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgeworICAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICAgICAgICBhdHRyOworICAgICAgICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZSAqIGRldiwgY2hhciAqIGJ1Zik7CisgICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqIGRldiwgY29uc3QgY2hhciAqIGJ1Zik7Cit9OworCitpbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKik7Cit2b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOworCitJdCBhbHNvIGRlZmluZXMgdGhpcyBoZWxwZXIgZm9yIGRlZmluaW5nIGRldmljZSBhdHRyaWJ1dGVzOiAKKworI2RlZmluZSBERVZJQ0VfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICAgICAgXAorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfIyNfbmFtZSA9IHsgICAgICAgICAgICBcCisgICAgICAgIC5hdHRyID0gey5uYW1lICA9IF9fc3RyaW5naWZ5KF9uYW1lKSAsIC5tb2RlICAgPSBfbW9kZSB9LCAgICAgIFwKKyAgICAgICAgLnNob3cgICA9IF9zaG93LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuc3RvcmUgID0gX3N0b3JlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9OworCitGb3IgZXhhbXBsZSwgZGVjbGFyaW5nCisKK3N0YXRpYyBERVZJQ0VfQVRUUihmb28sMDY0NCxzaG93X2ZvbyxzdG9yZV9mb28pOworCitpcyBlcXVpdmFsZW50IHRvIGRvaW5nOgorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZm9vID0geworICAgICAgIC5hdHRyCT0geworCQkubmFtZSA9ICJmb28iLAorCQkubW9kZSA9IDA2NDQsCisJfSwKKwkuc2hvdyA9IHNob3dfZm9vLAorCS5zdG9yZSA9IHN0b3JlX2ZvbywKK307CisKKworU3Vic3lzdGVtLVNwZWNpZmljIENhbGxiYWNrcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIGEgc3Vic3lzdGVtIGRlZmluZXMgYSBuZXcgYXR0cmlidXRlIHR5cGUsIGl0IG11c3QgaW1wbGVtZW50IGEKK3NldCBvZiBzeXNmcyBvcGVyYXRpb25zIGZvciBmb3J3YXJkaW5nIHJlYWQgYW5kIHdyaXRlIGNhbGxzIHRvIHRoZQorc2hvdyBhbmQgc3RvcmUgbWV0aG9kcyBvZiB0aGUgYXR0cmlidXRlIG93bmVycy4gCisKK3N0cnVjdCBzeXNmc19vcHMgeworICAgICAgICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGF0dHJpYnV0ZSAqLGNoYXIgKik7CisgICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKixzdHJ1Y3QgYXR0cmlidXRlICosY29uc3QgY2hhciAqKTsKK307CisKK1sgU3Vic3lzdGVtcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGRlZmluZWQgYSBzdHJ1Y3Qga29ial90eXBlIGFzIGEKK2Rlc2NyaXB0b3IgZm9yIHRoaXMgdHlwZSwgd2hpY2ggaXMgd2hlcmUgdGhlIHN5c2ZzX29wcyBwb2ludGVyIGlzCitzdG9yZWQuIFNlZSB0aGUga29iamVjdCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiBdCisKK1doZW4gYSBmaWxlIGlzIHJlYWQgb3Igd3JpdHRlbiwgc3lzZnMgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZAorZm9yIHRoZSB0eXBlLiBUaGUgbWV0aG9kIHRoZW4gdHJhbnNsYXRlcyB0aGUgZ2VuZXJpYyBzdHJ1Y3Qga29iamVjdAorYW5kIHN0cnVjdCBhdHRyaWJ1dGUgcG9pbnRlcnMgdG8gdGhlIGFwcHJvcHJpYXRlIHBvaW50ZXIgdHlwZXMsIGFuZAorY2FsbHMgdGhlIGFzc29jaWF0ZWQgbWV0aG9kcy4gCisKKworVG8gaWxsdXN0cmF0ZToKKworI2RlZmluZSB0b19kZXZfYXR0cihfYXR0cikgY29udGFpbmVyX29mKF9hdHRyLHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlLGF0dHIpCisjZGVmaW5lIHRvX2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRldmljZSwga29iaikKKworc3RhdGljIHNzaXplX3QKK2Rldl9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwgY2hhciAqIGJ1ZikKK3sKKyAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBkZXZfYXR0ciA9IHRvX2Rldl9hdHRyKGF0dHIpOworICAgICAgICBzdHJ1Y3QgZGV2aWNlICogZGV2ID0gdG9fZGV2KGtvYmopOworICAgICAgICBzc2l6ZV90IHJldCA9IDA7CisKKyAgICAgICAgaWYgKGRldl9hdHRyLT5zaG93KQorICAgICAgICAgICAgICAgIHJldCA9IGRldl9hdHRyLT5zaG93KGRldixidWYpOworICAgICAgICByZXR1cm4gcmV0OworfQorCisKKworUmVhZGluZy9Xcml0aW5nIEF0dHJpYnV0ZSBEYXRhCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVG8gcmVhZCBvciB3cml0ZSBhdHRyaWJ1dGVzLCBzaG93KCkgb3Igc3RvcmUoKSBtZXRob2RzIG11c3QgYmUKK3NwZWNpZmllZCB3aGVuIGRlY2xhcmluZyB0aGUgYXR0cmlidXRlLiBUaGUgbWV0aG9kIHR5cGVzIHNob3VsZCBiZSBhcworc2ltcGxlIGFzIHRob3NlIGRlZmluZWQgZm9yIGRldmljZSBhdHRyaWJ1dGVzOgorCisgICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjaGFyICogYnVmKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjb25zdCBjaGFyICogYnVmKTsKKworSU9XLCB0aGV5IHNob3VsZCB0YWtlIG9ubHkgYW4gb2JqZWN0IGFuZCBhIGJ1ZmZlciBhcyBwYXJhbWV0ZXJzLiAKKworCitzeXNmcyBhbGxvY2F0ZXMgYSBidWZmZXIgb2Ygc2l6ZSAoUEFHRV9TSVpFKSBhbmQgcGFzc2VzIGl0IHRvIHRoZQorbWV0aG9kLiBTeXNmcyB3aWxsIGNhbGwgdGhlIG1ldGhvZCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggcmVhZCBvcgord3JpdGUuIFRoaXMgZm9yY2VzIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3Igb24gdGhlIG1ldGhvZAoraW1wbGVtZW50YXRpb25zOiAKKworLSBPbiByZWFkKDIpLCB0aGUgc2hvdygpIG1ldGhvZCBzaG91bGQgZmlsbCB0aGUgZW50aXJlIGJ1ZmZlci4gCisgIFJlY2FsbCB0aGF0IGFuIGF0dHJpYnV0ZSBzaG91bGQgb25seSBiZSBleHBvcnRpbmcgb25lIHZhbHVlLCBvciBhbgorICBhcnJheSBvZiBzaW1pbGFyIHZhbHVlcywgc28gdGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBleHBlbnNpdmUuIAorCisgIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBkbyBwYXJ0aWFsIHJlYWRzIGFuZCBzZWVrcyBhcmJpdHJhcmlseSBvdmVyCisgIHRoZSBlbnRpcmUgZmlsZSBhdCB3aWxsLiAKKworLSBPbiB3cml0ZSgyKSwgc3lzZnMgZXhwZWN0cyB0aGUgZW50aXJlIGJ1ZmZlciB0byBiZSBwYXNzZWQgZHVyaW5nIHRoZQorICBmaXJzdCB3cml0ZS4gU3lzZnMgdGhlbiBwYXNzZXMgdGhlIGVudGlyZSBidWZmZXIgdG8gdGhlIHN0b3JlKCkKKyAgbWV0aG9kLiAKKyAgCisgIFdoZW4gd3JpdGluZyBzeXNmcyBmaWxlcywgdXNlcnNwYWNlIHByb2Nlc3NlcyBzaG91bGQgZmlyc3QgcmVhZCB0aGUKKyAgZW50aXJlIGZpbGUsIG1vZGlmeSB0aGUgdmFsdWVzIGl0IHdpc2hlcyB0byBjaGFuZ2UsIHRoZW4gd3JpdGUgdGhlCisgIGVudGlyZSBidWZmZXIgYmFjay4gCisKKyAgQXR0cmlidXRlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIG9wZXJhdGUgb24gYW4gaWRlbnRpY2FsCisgIGJ1ZmZlciB3aGVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgdmFsdWVzLiAKKworT3RoZXIgbm90ZXM6CisKKy0gVGhlIGJ1ZmZlciB3aWxsIGFsd2F5cyBiZSBQQUdFX1NJWkUgYnl0ZXMgaW4gbGVuZ3RoLiBPbiBpMzg2LCB0aGlzCisgIGlzIDQwOTYuIAorCistIHNob3coKSBtZXRob2RzIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBwcmludGVkIGludG8gdGhlCisgIGJ1ZmZlci4gVGhpcyBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuCisKKy0gc2hvdygpIHNob3VsZCBhbHdheXMgdXNlIHNucHJpbnRmKCkuIAorCistIHN0b3JlKCkgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQgZnJvbSB0aGUgYnVmZmVyLiBUaGlzCisgIGNhbiBiZSBkb25lIHVzaW5nIHN0cmxlbigpLgorCistIHNob3coKSBvciBzdG9yZSgpIGNhbiBhbHdheXMgcmV0dXJuIGVycm9ycy4gSWYgYSBiYWQgdmFsdWUgY29tZXMKKyAgdGhyb3VnaCwgYmUgc3VyZSB0byByZXR1cm4gYW4gZXJyb3IuCisKKy0gVGhlIG9iamVjdCBwYXNzZWQgdG8gdGhlIG1ldGhvZHMgd2lsbCBiZSBwaW5uZWQgaW4gbWVtb3J5IHZpYSBzeXNmcworICByZWZlcmVuY2luZyBjb3VudGluZyBpdHMgZW1iZWRkZWQgb2JqZWN0LiBIb3dldmVyLCB0aGUgcGh5c2ljYWwgCisgIGVudGl0eSAoZS5nLiBkZXZpY2UpIHRoZSBvYmplY3QgcmVwcmVzZW50cyBtYXkgbm90IGJlIHByZXNlbnQuIEJlIAorICBzdXJlIHRvIGhhdmUgYSB3YXkgdG8gY2hlY2sgdGhpcywgaWYgbmVjZXNzYXJ5LiAKKworCitBIHZlcnkgc2ltcGxlIChhbmQgbmFpdmUpIGltcGxlbWVudGF0aW9uIG9mIGEgZGV2aWNlIGF0dHJpYnV0ZSBpczoKKworc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNoYXIgKiBidWYpCit7CisgICAgICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwiJXNcbiIsZGV2LT5uYW1lKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbmFtZShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjb25zdCBjaGFyICogYnVmKQoreworCXNzY2FuZihidWYsIiUyMHMiLGRldi0+bmFtZSk7CisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSxTX0lSVUdPLHNob3dfbmFtZSxzdG9yZV9uYW1lKTsKKworCisoTm90ZSB0aGF0IHRoZSByZWFsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgYWxsb3cgdXNlcnNwYWNlIHRvIHNldCB0aGUgCituYW1lIGZvciBhIGRldmljZS4pCisKKworVG9wIExldmVsIERpcmVjdG9yeSBMYXlvdXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBzeXNmcyBkaXJlY3RvcnkgYXJyYW5nZW1lbnQgZXhwb3NlcyB0aGUgcmVsYXRpb25zaGlwIG9mIGtlcm5lbAorZGF0YSBzdHJ1Y3R1cmVzLiAKKworVGhlIHRvcCBsZXZlbCBzeXNmcyBkaXJldG9yeSBsb29rcyBsaWtlOgorCitibG9jay8KK2J1cy8KK2NsYXNzLworZGV2aWNlcy8KK2Zpcm13YXJlLworbmV0LworCitkZXZpY2VzLyBjb250YWlucyBhIGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gb2YgdGhlIGRldmljZSB0cmVlLiBJdCBtYXBzCitkaXJlY3RseSB0byB0aGUgaW50ZXJuYWwga2VybmVsIGRldmljZSB0cmVlLCB3aGljaCBpcyBhIGhpZXJhcmNoeSBvZgorc3RydWN0IGRldmljZS4gCisKK2J1cy8gY29udGFpbnMgZmxhdCBkaXJlY3RvcnkgbGF5b3V0IG9mIHRoZSB2YXJpb3VzIGJ1cyB0eXBlcyBpbiB0aGUKK2tlcm5lbC4gRWFjaCBidXMncyBkaXJlY3RvcnkgY29udGFpbnMgdHdvIHN1YmRpcmVjdG9yaWVzOgorCisJZGV2aWNlcy8KKwlkcml2ZXJzLworCitkZXZpY2VzLyBjb250YWlucyBzeW1saW5rcyBmb3IgZWFjaCBkZXZpY2UgZGlzY292ZXJlZCBpbiB0aGUgc3lzdGVtCit0aGF0IHBvaW50IHRvIHRoZSBkZXZpY2UncyBkaXJlY3RvcnkgdW5kZXIgcm9vdC8uCisKK2RyaXZlcnMvIGNvbnRhaW5zIGEgZGlyZWN0b3J5IGZvciBlYWNoIGRldmljZSBkcml2ZXIgdGhhdCBpcyBsb2FkZWQKK2ZvciBkZXZpY2VzIG9uIHRoYXQgcGFydGljdWxhciBidXMgKHRoaXMgYXNzdW1lcyB0aGF0IGRyaXZlcnMgZG8gbm90CitzcGFuIG11bHRpcGxlIGJ1cyB0eXBlcykuCisKKworTW9yZSBpbmZvcm1hdGlvbiBjYW4gZHJpdmVyLW1vZGVsIHNwZWNpZmljIGZlYXR1cmVzIGNhbiBiZSBmb3VuZCBpbgorRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvLiAKKworCitUT0RPOiBGaW5pc2ggdGhpcyBzZWN0aW9uLgorCisKK0N1cnJlbnQgSW50ZXJmYWNlcworfn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBmb2xsb3dpbmcgaW50ZXJmYWNlIGxheWVycyBjdXJyZW50bHkgZXhpc3QgaW4gc3lzZnM6CisKKworLSBkZXZpY2VzIChpbmNsdWRlL2xpbnV4L2RldmljZS5oKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RydWN0dXJlOgorCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB7CisgICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgICAgICAgIGF0dHI7CisgICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjaGFyICogYnVmKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjb25zdCBjaGFyICogYnVmKTsKK307CisKK0RlY2xhcmluZzoKKworREVWSUNFX0FUVFIoX25hbWUsX3N0cixfbW9kZSxfc2hvdyxfc3RvcmUpOworCitDcmVhdGlvbi9SZW1vdmFsOgorCitpbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKK3ZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7CisKKworLSBidXMgZHJpdmVycyAoaW5jbHVkZS9saW51eC9kZXZpY2UuaCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdHJ1Y3R1cmU6CisKK3N0cnVjdCBidXNfYXR0cmlidXRlIHsKKyAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAgICAgICAgYXR0cjsKKyAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBidXNfdHlwZSAqLCBjaGFyICogYnVmKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgYnVzX3R5cGUgKiwgY29uc3QgY2hhciAqIGJ1Zik7Cit9OworCitEZWNsYXJpbmc6CisKK0JVU19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworQ3JlYXRpb24vUmVtb3ZhbDoKKworaW50IGJ1c19jcmVhdGVfZmlsZShzdHJ1Y3QgYnVzX3R5cGUgKiwgc3RydWN0IGJ1c19hdHRyaWJ1dGUgKik7Cit2b2lkIGJ1c19yZW1vdmVfZmlsZShzdHJ1Y3QgYnVzX3R5cGUgKiwgc3RydWN0IGJ1c19hdHRyaWJ1dGUgKik7CisKKworLSBkZXZpY2UgZHJpdmVycyAoaW5jbHVkZS9saW51eC9kZXZpY2UuaCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N0cnVjdHVyZToKKworc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgeworICAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICAgICAgICBhdHRyOworICAgICAgICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY2hhciAqIGJ1Zik7CisgICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3QgY2hhciAqIGJ1Zik7Cit9OworCitEZWNsYXJpbmc6CisKK0RSSVZFUl9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworQ3JlYXRpb24vUmVtb3ZhbDoKKworaW50IGRyaXZlcl9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKK3ZvaWQgZHJpdmVyX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzdi1mcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c3YtZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTcyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c3YtZnMudHh0CkBAIC0wLDAgKzEsMzggQEAKK1RoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTeXN0ZW1WL0NvaGVyZW50IGZpbGVzeXN0ZW0gZm9yIExpbnV4LgorSXQgaW1wbGVtZW50cyBhbGwgb2YKKyAgLSBYZW5peCBGUywKKyAgLSBTeXN0ZW1WLzM4NiBGUywKKyAgLSBDb2hlcmVudCBGUy4KKworVGhpcyBpcyB2ZXJzaW9uIGJldGEgNC4KKworVG8gaW5zdGFsbDoKKyogQW5zd2VyIHRoZSAnU3lzdGVtIFYgYW5kIENvaGVyZW50IGZpbGVzeXN0ZW0gc3VwcG9ydCcgcXVlc3Rpb24gd2l0aCAneScKKyAgd2hlbiBjb25maWd1cmluZyB0aGUga2VybmVsLgorKiBUbyBtb3VudCBhIGRpc2sgb3IgYSBwYXJ0aXRpb24sIHVzZQorICAgIG1vdW50IFstcl0gLXQgc3lzdiBkZXZpY2UgbW91bnRwb2ludAorICBUaGUgZmlsZSBzeXN0ZW0gdHlwZSBuYW1lcworICAgICAgICAgICAgICAgLXQgc3lzdgorICAgICAgICAgICAgICAgLXQgeGVuaXgKKyAgICAgICAgICAgICAgIC10IGNvaGVyZW50CisgIG1heSBiZSB1c2VkIGludGVyY2hhbmdlYWJseSwgYnV0IHRoZSBsYXN0IHR3byB3aWxsIGV2ZW50dWFsbHkgZGlzYXBwZWFyLgorCitCdWdzIGluIHRoZSBwcmVzZW50IGltcGxlbWVudGF0aW9uOgorLSBDb2hlcmVudCBGUzoKKyAgLSBUaGUgImZyZWUgbGlzdCBpbnRlcmxlYXZlIiBuOm0gaXMgY3VycmVudGx5IGlnbm9yZWQuCisgIC0gT25seSBmaWxlIHN5c3RlbXMgd2l0aCBubyBmaWxlc3lzdGVtIG5hbWUgYW5kIG5vIHBhY2sgbmFtZSBhcmUgcmVjb2duaXplZC4KKyAgKFNlZSBDb2hlcmVudCAibWFuIG1rZnMiIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlIGZlYXR1cmVzLikKKy0gU3lzdGVtViBSZWxlYXNlIDIgRlM6CisgIFRoZSBzdXBlcmJsb2NrIGlzIG9ubHkgc2VhcmNoZWQgaW4gdGhlIGJsb2NrcyA5LCAxNSwgMTgsIHdoaWNoCisgIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdHJhY2sgMSBvbiBmbG9wcHkgZGlza3MuIE5vIHN1cHBvcnQKKyAgZm9yIHRoaXMgRlMgb24gaGFyZCBkaXNrIHlldC4KKworCitQbGVhc2UgcmVwb3J0IGFueSBidWdzIGFuZCBzdWdnZXN0aW9ucyB0bworICBCcnVubyBIYWlibGUgPGhhaWJsZUBtYTJzMi5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CisgIFBhc2NhbCBIYWlibGUgPGhhaWJsZUBpemZtLnVuaS1zdHV0dGdhcnQuZGU+CisgIEtyenlzenRvZiBHLiBCYXJhbm93c2tpIDxrZ2JAbWFuamFrLmtubS5vcmcucGw+CisKK0JydW5vIEhhaWJsZQorPGhhaWJsZUBtYTJzMi5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3ZTMwOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMudHh0CkBAIC0wLDAgKzEsMTAwIEBACitUbXBmcyBpcyBhIGZpbGUgc3lzdGVtIHdoaWNoIGtlZXBzIGFsbCBmaWxlcyBpbiB2aXJ0dWFsIG1lbW9yeS4KKworCitFdmVyeXRoaW5nIGluIHRtcGZzIGlzIHRlbXBvcmFyeSBpbiB0aGUgc2Vuc2UgdGhhdCBubyBmaWxlcyB3aWxsIGJlCitjcmVhdGVkIG9uIHlvdXIgaGFyZCBkcml2ZS4gSWYgeW91IHVubW91bnQgYSB0bXBmcyBpbnN0YW5jZSwKK2V2ZXJ5dGhpbmcgc3RvcmVkIHRoZXJlaW4gaXMgbG9zdC4KKwordG1wZnMgcHV0cyBldmVyeXRoaW5nIGludG8gdGhlIGtlcm5lbCBpbnRlcm5hbCBjYWNoZXMgYW5kIGdyb3dzIGFuZAorc2hyaW5rcyB0byBhY2NvbW1vZGF0ZSB0aGUgZmlsZXMgaXQgY29udGFpbnMgYW5kIGlzIGFibGUgdG8gc3dhcAordW5uZWVkZWQgcGFnZXMgb3V0IHRvIHN3YXAgc3BhY2UuIEl0IGhhcyBtYXhpbXVtIHNpemUgbGltaXRzIHdoaWNoIGNhbgorYmUgYWRqdXN0ZWQgb24gdGhlIGZseSB2aWEgJ21vdW50IC1vIHJlbW91bnQgLi4uJworCitJZiB5b3UgY29tcGFyZSBpdCB0byByYW1mcyAod2hpY2ggd2FzIHRoZSB0ZW1wbGF0ZSB0byBjcmVhdGUgdG1wZnMpCit5b3UgZ2FpbiBzd2FwcGluZyBhbmQgbGltaXQgY2hlY2tpbmcuIEFub3RoZXIgc2ltaWxhciB0aGluZyBpcyB0aGUgUkFNCitkaXNrICgvZGV2L3JhbSopLCB3aGljaCBzaW11bGF0ZXMgYSBmaXhlZCBzaXplIGhhcmQgZGlzayBpbiBwaHlzaWNhbAorUkFNLCB3aGVyZSB5b3UgaGF2ZSB0byBjcmVhdGUgYW4gb3JkaW5hcnkgZmlsZXN5c3RlbSBvbiB0b3AuIFJhbWRpc2tzCitjYW5ub3Qgc3dhcCBhbmQgeW91IGRvIG5vdCBoYXZlIHRoZSBwb3NzaWJpbGl0eSB0byByZXNpemUgdGhlbS4gCisKK1NpbmNlIHRtcGZzIGxpdmVzIGNvbXBsZXRlbHkgaW4gdGhlIHBhZ2UgY2FjaGUgYW5kIG9uIHN3YXAsIGFsbCB0bXBmcworcGFnZXMgY3VycmVudGx5IGluIG1lbW9yeSB3aWxsIHNob3cgdXAgYXMgY2FjaGVkLiBJdCB3aWxsIG5vdCBzaG93IHVwCithcyBzaGFyZWQgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gRnVydGhlciBvbiB5b3UgY2FuIGNoZWNrIHRoZSBhY3R1YWwKK1JBTStzd2FwIHVzZSBvZiBhIHRtcGZzIGluc3RhbmNlIHdpdGggZGYoMSkgYW5kIGR1KDEpLgorCisKK3RtcGZzIGhhcyB0aGUgZm9sbG93aW5nIHVzZXM6CisKKzEpIFRoZXJlIGlzIGFsd2F5cyBhIGtlcm5lbCBpbnRlcm5hbCBtb3VudCB3aGljaCB5b3Ugd2lsbCBub3Qgc2VlIGF0CisgICBhbGwuIFRoaXMgaXMgdXNlZCBmb3Igc2hhcmVkIGFub255bW91cyBtYXBwaW5ncyBhbmQgU1lTViBzaGFyZWQKKyAgIG1lbW9yeS4gCisKKyAgIFRoaXMgbW91bnQgZG9lcyBub3QgZGVwZW5kIG9uIENPTkZJR19UTVBGUy4gSWYgQ09ORklHX1RNUEZTIGlzIG5vdAorICAgc2V0LCB0aGUgdXNlciB2aXNpYmxlIHBhcnQgb2YgdG1wZnMgaXMgbm90IGJ1aWxkLiBCdXQgdGhlIGludGVybmFsCisgICBtZWNoYW5pc21zIGFyZSBhbHdheXMgcHJlc2VudC4KKworMikgZ2xpYmMgMi4yIGFuZCBhYm92ZSBleHBlY3RzIHRtcGZzIHRvIGJlIG1vdW50ZWQgYXQgL2Rldi9zaG0gZm9yCisgICBQT1NJWCBzaGFyZWQgbWVtb3J5IChzaG1fb3Blbiwgc2htX3VubGluaykuIEFkZGluZyB0aGUgZm9sbG93aW5nCisgICBsaW5lIHRvIC9ldGMvZnN0YWIgc2hvdWxkIHRha2UgY2FyZSBvZiB0aGlzOgorCisJdG1wZnMJL2Rldi9zaG0JdG1wZnMJZGVmYXVsdHMJMCAwCisKKyAgIFJlbWVtYmVyIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgeW91IGludGVuZCB0byBtb3VudCB0bXBmcyBvbgorICAgaWYgbmVjZXNzYXJ5ICgvZGV2L3NobSBpcyBhdXRvbWFnaWNhbGx5IGNyZWF0ZWQgaWYgeW91IHVzZSBkZXZmcykuCisKKyAgIFRoaXMgbW91bnQgaXMgX25vdF8gbmVlZGVkIGZvciBTWVNWIHNoYXJlZCBtZW1vcnkuIFRoZSBpbnRlcm5hbAorICAgbW91bnQgaXMgdXNlZCBmb3IgdGhhdC4gKEluIHRoZSAyLjMga2VybmVsIHZlcnNpb25zIGl0IHdhcworICAgbmVjZXNzYXJ5IHRvIG1vdW50IHRoZSBwcmVkZWNlc3NvciBvZiB0bXBmcyAoc2htIGZzKSB0byB1c2UgU1lTVgorICAgc2hhcmVkIG1lbW9yeSkKKworMykgU29tZSBwZW9wbGUgKGluY2x1ZGluZyBtZSkgZmluZCBpdCB2ZXJ5IGNvbnZlbmllbnQgdG8gbW91bnQgaXQKKyAgIGUuZy4gb24gL3RtcCBhbmQgL3Zhci90bXAgYW5kIGhhdmUgYSBiaWcgc3dhcCBwYXJ0aXRpb24uIEFuZCBub3cKKyAgIGxvb3AgbW91bnRzIG9mIHRtcGZzIGZpbGVzIGRvIHdvcmssIHNvIG1raW5pdHJkIHNoaXBwZWQgYnkgbW9zdAorICAgZGlzdHJpYnV0aW9ucyBzaG91bGQgc3VjY2VlZCB3aXRoIGEgdG1wZnMgL3RtcC4KKworNCkgQW5kIHByb2JhYmx5IGEgbG90IG1vcmUgSSBkbyBub3Qga25vdyBhYm91dCA6LSkKKworCit0bXBmcyBoYXMgdGhyZWUgbW91bnQgb3B0aW9ucyBmb3Igc2l6aW5nOgorCitzaXplOiAgICAgIFRoZSBsaW1pdCBvZiBhbGxvY2F0ZWQgYnl0ZXMgZm9yIHRoaXMgdG1wZnMgaW5zdGFuY2UuIFRoZSAKKyAgICAgICAgICAgZGVmYXVsdCBpcyBoYWxmIG9mIHlvdXIgcGh5c2ljYWwgUkFNIHdpdGhvdXQgc3dhcC4gSWYgeW91CisgICAgICAgICAgIG92ZXJzaXplIHlvdXIgdG1wZnMgaW5zdGFuY2VzIHRoZSBtYWNoaW5lIHdpbGwgZGVhZGxvY2sKKyAgICAgICAgICAgc2luY2UgdGhlIE9PTSBoYW5kbGVyIHdpbGwgbm90IGJlIGFibGUgdG8gZnJlZSB0aGF0IG1lbW9yeS4KK25yX2Jsb2NrczogVGhlIHNhbWUgYXMgc2l6ZSwgYnV0IGluIGJsb2NrcyBvZiBQQUdFX0NBQ0hFX1NJWkUuCitucl9pbm9kZXM6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbm9kZXMgZm9yIHRoaXMgaW5zdGFuY2UuIFRoZSBkZWZhdWx0CisgICAgICAgICAgIGlzIGhhbGYgb2YgdGhlIG51bWJlciBvZiB5b3VyIHBoeXNpY2FsIFJBTSBwYWdlcywgb3IgKG9uIGEKKyAgICAgICAgICAgYSBtYWNoaW5lIHdpdGggaGlnaG1lbSkgdGhlIG51bWJlciBvZiBsb3dtZW0gUkFNIHBhZ2VzLAorICAgICAgICAgICB3aGljaGV2ZXIgaXMgdGhlIGxvd2VyLgorCitUaGVzZSBwYXJhbWV0ZXJzIGFjY2VwdCBhIHN1ZmZpeCBrLCBtIG9yIGcgZm9yIGtpbG8sIG1lZ2EgYW5kIGdpZ2EgYW5kCitjYW4gYmUgY2hhbmdlZCBvbiByZW1vdW50LiAgVGhlIHNpemUgcGFyYW1ldGVyIGFsc28gYWNjZXB0cyBhIHN1ZmZpeCAlCit0byBsaW1pdCB0aGlzIHRtcGZzIGluc3RhbmNlIHRvIHRoYXQgcGVyY2VudGFnZSBvZiB5b3VyIHBoeXNpY2FsIFJBTToKK3RoZSBkZWZhdWx0LCB3aGVuIG5laXRoZXIgc2l6ZSBub3IgbnJfYmxvY2tzIGlzIHNwZWNpZmllZCwgaXMgc2l6ZT01MCUKKworSWYgYm90aCBucl9ibG9ja3MgKG9yIHNpemUpIGFuZCBucl9pbm9kZXMgYXJlIHNldCB0byAwLCBuZWl0aGVyIGJsb2Nrcworbm9yIGlub2RlcyB3aWxsIGJlIGxpbWl0ZWQgaW4gdGhhdCBpbnN0YW5jZS4gIEl0IGlzIGdlbmVyYWxseSB1bndpc2UgdG8KK21vdW50IHdpdGggc3VjaCBvcHRpb25zLCBzaW5jZSBpdCBhbGxvd3MgYW55IHVzZXIgd2l0aCB3cml0ZSBhY2Nlc3MgdG8KK3VzZSB1cCBhbGwgdGhlIG1lbW9yeSBvbiB0aGUgbWFjaGluZTsgYnV0IGVuaGFuY2VzIHRoZSBzY2FsYWJpbGl0eSBvZgordGhhdCBpbnN0YW5jZSBpbiBhIHN5c3RlbSB3aXRoIG1hbnkgY3B1cyBtYWtpbmcgaW50ZW5zaXZlIHVzZSBvZiBpdC4KKworCitUbyBzcGVjaWZ5IHRoZSBpbml0aWFsIHJvb3QgZGlyZWN0b3J5IHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgbW91bnQKK29wdGlvbnM6CisKK21vZGU6CVRoZSBwZXJtaXNzaW9ucyBhcyBhbiBvY3RhbCBudW1iZXIKK3VpZDoJVGhlIHVzZXIgaWQgCitnaWQ6CVRoZSBncm91cCBpZAorCitUaGVzZSBvcHRpb25zIGRvIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gcmVtb3VudC4gWW91IGNhbiBjaGFuZ2UgdGhlc2UKK3BhcmFtZXRlcnMgd2l0aCBjaG1vZCgxKSwgY2hvd24oMSkgYW5kIGNoZ3JwKDEpIG9uIGEgbW91bnRlZCBmaWxlc3lzdGVtLgorCisKK1NvICdtb3VudCAtdCB0bXBmcyAtbyBzaXplPTEwRyxucl9pbm9kZXM9MTBrLG1vZGU9NzAwIHRtcGZzIC9teXRtcGZzJword2lsbCBnaXZlIHlvdSB0bXBmcyBpbnN0YW5jZSBvbiAvbXl0bXBmcyB3aGljaCBjYW4gYWxsb2NhdGUgMTBHQgorUkFNL1NXQVAgaW4gMTAyNDAgaW5vZGVzIGFuZCBpdCBpcyBvbmx5IGFjY2Vzc2libGUgYnkgcm9vdC4KKworCitBdXRob3I6CisgICBDaHJpc3RvcGggUm9obGFuZCA8Y3JAc2FwLmNvbT4sIDEuMTIuMDEKK1VwZGF0ZWQ6CisgICBIdWdoIERpY2tpbnMgPGh1Z2hAdmVyaXRhcy5jb20+LCAwMSBTZXB0ZW1iZXIgMjAwNApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjEzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQKQEAgLTAsMCArMSw1NyBAQAorKgorKiBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQKKyoKK1VERiBGaWxlc3lzdGVtIHZlcnNpb24gMC45LjguMQorCitJZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zIHdpdGggcmVhZGluZyBVREYgZGlzY3MgdXNpbmcgdGhpcyBkcml2ZXIsCitwbGVhc2UgcmVwb3J0IHRoZW0gdG8gbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tLCB3aGljaCBpcyB0aGUKK2RldmVsb3BlcidzIGxpc3QuCisKK1dyaXRlIHN1cHBvcnQgcmVxdWlyZXMgYSBibG9jayBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgd3JpdGluZy4gVGhlIGN1cnJlbnQKK3Njc2kgYW5kIGlkZSBjZHJvbSBkcml2ZXJzIGRvIG5vdCBzdXBwb3J0IHdyaXRpbmcuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBmb2xsb3dpbmcgbW91bnQgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisJZ2lkPQkJU2V0IHRoZSBkZWZhdWx0IGdyb3VwLgorCXVtYXNrPQkJU2V0IHRoZSBkZWZhdWx0IHVtYXNrLgorCXVpZD0JCVNldCB0aGUgZGVmYXVsdCB1c2VyLgorCWJzPQkJU2V0IHRoZSBibG9jayBzaXplLgorCXVuaGlkZQkJU2hvdyBvdGhlcndpc2UgaGlkZGVuIGZpbGVzLgorCXVuZGVsZXRlCVNob3cgZGVsZXRlZCBmaWxlcyBpbiBsaXN0cy4KKwlhZGluaWNiCQlFbWJlZCBkYXRhIGluIHRoZSBpbm9kZSAoZGVmYXVsdCkKKwlub2FkaW5pY2IJRG9uJ3QgZW1iZWQgZGF0YSBpbiB0aGUgaW5vZGUKKwlzaG9ydGFkCQlVc2Ugc2hvcnQgYWQncworCWxvbmdhZAkJVXNlIGxvbmcgYWQncyAoZGVmYXVsdCkKKwlub3N0cmljdAlVbnNldCBzdHJpY3QgY29uZm9ybWFuY2UKKwlpb2NoYXJzZXQ9CVNldCB0aGUgTkxTIGNoYXJhY3RlciBzZXQKKworVGhlIHJlbWFpbmluZyBhcmUgZm9yIGRlYnVnZ2luZyBhbmQgZGlzYXN0ZXIgcmVjb3Zlcnk6CisKKwlub3ZycwkJU2tpcCB2b2x1bWUgc2VxdWVuY2UgcmVjb2duaXRpb24gCisKK1RoZSBmb2xsb3dpbmcgZXhwZWN0IGEgb2Zmc2V0IGZyb20gMC4KKworCXNlc3Npb249CVNldCB0aGUgQ0RST00gc2Vzc2lvbiAoZGVmYXVsdD0gbGFzdCBzZXNzaW9uKQorCWFuY2hvcj0JCU92ZXJyaWRlIHN0YW5kYXJkIGFuY2hvciBsb2NhdGlvbi4gKGRlZmF1bHQ9IDI1NikKKwl2b2x1bWU9CQlPdmVycmlkZSB0aGUgVm9sdW1lRGVzYyBsb2NhdGlvbi4gKHVudXNlZCkKKwlwYXJ0aXRpb249CU92ZXJyaWRlIHRoZSBQYXJ0aXRpb25EZXNjIGxvY2F0aW9uLiAodW51c2VkKQorCWxhc3RibG9jaz0JU2V0IHRoZSBsYXN0IGJsb2NrIG9mIHRoZSBmaWxlc3lzdGVtLworCitUaGUgZm9sbG93aW5nIGV4cGVjdCBhIG9mZnNldCBmcm9tIHRoZSBwYXJ0aXRpb24gcm9vdC4KKworCWZpbGVzZXQ9CU92ZXJyaWRlIHRoZSBmaWxlc2V0IGJsb2NrIGxvY2F0aW9uLiAodW51c2VkKQorCXJvb3RkaXI9CU92ZXJyaWRlIHRoZSByb290IGRpcmVjdG9yeSBsb2NhdGlvbi4gKHVudXNlZCkKKwkJCVdBUk5JTkc6IG92ZXJyaWRpbmcgdGhlIHJvb3RkaXIgdG8gYSBub24tZGlyZWN0b3J5IG1heQorCQkJCXlpZWxkIGhpZ2hseSB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQgdG9vbHNldCBzZWU6CisJaHR0cDovL2xpbnV4LXVkZi5zb3VyY2Vmb3JnZS5uZXQvCisKK0RvY3VtZW50YXRpb24gb24gVURGIGFuZCBFQ01BIDE2NyBpcyBhdmFpbGFibGUgRlJFRSBmcm9tOgorCWh0dHA6Ly93d3cub3N0YS5vcmcvCisJaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnLworCitCZW4gRmVubmVtYSA8YmZlbm5lbWFAZmFsY29uLmNzYy5jYWxwb2x5LmVkdT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVhNTZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZnMudHh0CkBAIC0wLDAgKzEsNjEgQEAKK1VTSU5HIFVGUworPT09PT09PT09CisKK21vdW50IC10IHVmcyAtbyB1ZnN0eXBlPXR5cGVfb2ZfdWZzIGRldmljZSBkaXIKKworCitVRlMgT1BUSU9OUworPT09PT09PT09PT0KKwordWZzdHlwZT10eXBlX29mX3VmcworCVVGUyBpcyBhIGZpbGUgc3lzdGVtIHdpZGVseSB1c2VkIGluIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4KKwlUaGUgcHJvYmxlbSBhcmUgZGlmZmVyZW5jZXMgYW1vbmcgaW1wbGVtZW50YXRpb25zLiBGZWF0dXJlcyBvZgorCXNvbWUgaW1wbGVtZW50YXRpb25zIGFyZSB1bmRvY3VtZW50ZWQsIHNvIGl0cyBoYXJkIHRvIHJlY29nbml6ZQorCXR5cGUgb2YgdWZzIGF1dG9tYXRpY2FsbHkuIFRoYXQncyB3aHkgdXNlciBtdXN0IHNwZWNpZnkgdHlwZSBvZiAKKwl1ZnMgbWFudWFsbHkgYnkgbW91bnQgb3B0aW9uIHVmc3R5cGUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisKKwlvbGQJb2xkIGZvcm1hdCBvZiB1ZnMKKwkJZGVmYXVsdCB2YWx1ZSwgc3VwcG9ydGVkIGFzIHJlYWQtb25seQorCisJNDRic2QJdXNlZCBpbiBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QKKwkJc3VwcG9ydGVkIGFzIHJlYWQtd3JpdGUKKworCXVmczIgICAgdXNlZCBpbiBGcmVlQlNEIDUueAorCQlzdXBwb3J0ZWQgYXMgcmVhZC1vbmx5CisKKwk1eGJzZAlzeW5vbnltIGZvciB1ZnMyCisKKwlzdW4JdXNlZCBpbiBTdW5PUyAoU29sYXJpcykKKwkJc3VwcG9ydGVkIGFzIHJlYWQtd3JpdGUKKworCXN1bng4Ngl1c2VkIGluIFN1bk9TIGZvciBJbnRlbCAoU29sYXJpc3g4NikKKwkJc3VwcG9ydGVkIGFzIHJlYWQtd3JpdGUKKworCWhwCXVzZWQgaW4gSFAtVVgKKwkJc3VwcG9ydGVkIGFzIHJlYWQtb25seQorCisJbmV4dHN0ZXAKKwkJdXNlZCBpbiBOZXh0U3RlcAorCQlzdXBwb3J0ZWQgYXMgcmVhZC1vbmx5CisKKwluZXh0c3RlcC1jZAorCQl1c2VkIGZvciBOZXh0U3RlcCBDRFJPTXMgKGJsb2NrX3NpemUgPT0gMjA0OCkKKwkJc3VwcG9ydGVkIGFzIHJlYWQtb25seQorCisJb3BlbnN0ZXAKKwkJdXNlZCBpbiBPcGVuU3RlcAorCQlzdXBwb3J0ZWQgYXMgcmVhZC1vbmx5CisKKworUE9TU0lCTEUgUFJPQkxFTVMKKz09PT09PT09PT09PT09PT09CisKK1RoZXJlIGlzIHN0aWxsIGJ1ZyBpbiByZWFsbG9jYXRpb24gb2YgZnJhZ21lbnQsIGluIGZpbGUgZnMvdWZzL2JhbGxvYy5jLCAKK2xpbmUgMzY0LiBCdXQgaXQgc2VlbXMgd29ya2luZyBvbiBjdXJyZW50IGJ1ZmZlciBjYWNoZSBjb25maWd1cmF0aW9uLgorCisKK0JVRyBSRVBPUlRTCis9PT09PT09PT09PQorCitBbnkgdWZzIGJ1ZyByZXBvcnQgeW91IGNhbiBzZW5kIHRvIGRhbmllbC5waXJrbEBlbWFpbC5jeiAoZG8gbm90IHNlbmQgCitwYXJ0aXRpb24gdGFibGVzIGJ1ZyByZXBvcnRzLikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYWQyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CkBAIC0wLDAgKzEsMjMxIEBACitVU0lORyBWRkFUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyB1c2UgdGhlIHZmYXQgZmlsZXN5c3RlbSwgdXNlIHRoZSBmaWxlc3lzdGVtIHR5cGUgJ3ZmYXQnLiAgaS5lLgorICBtb3VudCAtdCB2ZmF0IC9kZXYvZmQwIC9tbnQKKworTm8gc3BlY2lhbCBwYXJ0aXRpb24gZm9ybWF0dGVyIGlzIHJlcXVpcmVkLiAgbWtkb3NmcyB3aWxsIHdvcmsgZmluZQoraWYgeW91IHdhbnQgdG8gZm9ybWF0IGZyb20gd2l0aGluIExpbnV4LgorCitWRkFUIE1PVU5UIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3VtYXNrPSMjIyAgICAgLS0gVGhlIHBlcm1pc3Npb24gbWFzayAoZm9yIGZpbGVzIGFuZCBkaXJlY3Rvcmllcywgc2VlIHVtYXNrKDEpKS4KKyAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgdGhlIHVtYXNrIG9mIGN1cnJlbnQgcHJvY2Vzcy4KKworZG1hc2s9IyMjICAgICAtLSBUaGUgcGVybWlzc2lvbiBtYXNrIGZvciB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB0aGUgdW1hc2sgb2YgY3VycmVudCBwcm9jZXNzLgorCitmbWFzaz0jIyMgICAgIC0tIFRoZSBwZXJtaXNzaW9uIG1hc2sgZm9yIGZpbGVzLgorICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB0aGUgdW1hc2sgb2YgY3VycmVudCBwcm9jZXNzLgorCitjb2RlcGFnZT0jIyMgIC0tIFNldHMgdGhlIGNvZGVwYWdlIG51bWJlciBmb3IgY29udmVydGluZyB0byBzaG9ydG5hbWUKKwkJIGNoYXJhY3RlcnMgb24gRkFUIGZpbGVzeXN0ZW0uCisJCSBCeSBkZWZhdWx0LCBGQVRfREVGQVVMVF9DT0RFUEFHRSBzZXR0aW5nIGlzIHVzZWQuCisKK2lvY2hhcnNldD1uYW1lIC0tIENoYXJhY3RlciBzZXQgdG8gdXNlIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gdGhlCisJCSBlbmNvZGluZyBpcyB1c2VkIGZvciB1c2VyIHZpc2libGUgZmlsZW5hbWUgYW5kIDE2IGJpdAorCQkgVW5pY29kZSBjaGFyYWN0ZXJzLiBMb25nIGZpbGVuYW1lcyBhcmUgc3RvcmVkIG9uIGRpc2sKKwkJIGluIFVuaWNvZGUgZm9ybWF0LCBidXQgVW5peCBmb3IgdGhlIG1vc3QgcGFydCBkb2Vzbid0CisJCSBrbm93IGhvdyB0byBkZWFsIHdpdGggVW5pY29kZS4KKwkJIEJ5IGRlZmF1bHQsIEZBVF9ERUZBVUxUX0lPQ0hBUlNFVCBzZXR0aW5nIGlzIHVzZWQuCisKKwkJIFRoZXJlIGlzIGFsc28gYW4gb3B0aW9uIG9mIGRvaW5nIFVURjggdHJhbnNsYXRpb25zCisJCSB3aXRoIHRoZSB1dGY4IG9wdGlvbi4KKworCQkgTk9URTogImlvY2hhcnNldD11dGY4IiBpcyBub3QgcmVjb21tZW5kZWQuIElmIHVuc3VyZSwKKwkJIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBvcHRpb24gaW5zdGVhZC4KKwordXRmOD08Ym9vbD4gICAtLSBVVEY4IGlzIHRoZSBmaWxlc3lzdGVtIHNhZmUgdmVyc2lvbiBvZiBVbmljb2RlIHRoYXQKKwkJIGlzIHVzZWQgYnkgdGhlIGNvbnNvbGUuICBJdCBjYW4gYmUgYmUgZW5hYmxlZCBmb3IgdGhlCisJCSBmaWxlc3lzdGVtIHdpdGggdGhpcyBvcHRpb24uIElmICd1bmlfeGxhdGUnIGdldHMgc2V0LAorCQkgVVRGOCBnZXRzIGRpc2FibGVkLgorCit1bmlfeGxhdGU9PGJvb2w+IC0tIFRyYW5zbGF0ZSB1bmhhbmRsZWQgVW5pY29kZSBjaGFyYWN0ZXJzIHRvIHNwZWNpYWwKKwkJIGVzY2FwZWQgc2VxdWVuY2VzLiAgVGhpcyB3b3VsZCBsZXQgeW91IGJhY2t1cCBhbmQKKwkJIHJlc3RvcmUgZmlsZW5hbWVzIHRoYXQgYXJlIGNyZWF0ZWQgd2l0aCBhbnkgVW5pY29kZQorCQkgY2hhcmFjdGVycy4gIFVudGlsIExpbnV4IHN1cHBvcnRzIFVuaWNvZGUgZm9yIHJlYWwsCisJCSB0aGlzIGdpdmVzIHlvdSBhbiBhbHRlcm5hdGl2ZS4gIFdpdGhvdXQgdGhpcyBvcHRpb24sCisJCSBhICc/JyBpcyB1c2VkIHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgcG9zc2libGUuICBUaGUKKwkJIGVzY2FwZSBjaGFyYWN0ZXIgaXMgJzonIGJlY2F1c2UgaXQgaXMgb3RoZXJ3aXNlCisJCSBpbGxlZ2FsIG9uIHRoZSB2ZmF0IGZpbGVzeXN0ZW0uICBUaGUgZXNjYXBlIHNlcXVlbmNlCisJCSB0aGF0IGdldHMgdXNlZCBpcyAnOicgYW5kIHRoZSBmb3VyIGRpZ2l0cyBvZiBoZXhhZGVjaW1hbAorCQkgdW5pY29kZS4KKworbm9udW10YWlsPTxib29sPiAtLSBXaGVuIGNyZWF0aW5nIDguMyBhbGlhc2VzLCBub3JtYWxseSB0aGUgYWxpYXMgd2lsbAorICAgICAgICAgICAgICAgICBlbmQgaW4gJ34xJyBvciB0aWxkZSBmb2xsb3dlZCBieSBzb21lIG51bWJlci4gIElmIHRoaXMKKyAgICAgICAgICAgICAgICAgb3B0aW9uIGlzIHNldCwgdGhlbiBpZiB0aGUgZmlsZW5hbWUgaXMgCisgICAgICAgICAgICAgICAgICJsb25nZmlsZW5hbWUudHh0IiBhbmQgImxvbmdmaWxlLnR4dCIgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgY3VycmVudGx5IGV4aXN0IGluIHRoZSBkaXJlY3RvcnksICdsb25nZmlsZS50eHQnIHdpbGwKKyAgICAgICAgICAgICAgICAgYmUgdGhlIHNob3J0IGFsaWFzIGluc3RlYWQgb2YgJ2xvbmdmaX4xLnR4dCcuIAorICAgICAgICAgICAgICAgICAgCitxdWlldCAgICAgICAgIC0tIFN0b3BzIHByaW50aW5nIGNlcnRhaW4gd2FybmluZyBtZXNzYWdlcy4KKworY2hlY2s9c3xyfG4gICAtLSBDYXNlIHNlbnNpdGl2aXR5IGNoZWNraW5nIHNldHRpbmcuCisgICAgICAgICAgICAgICAgIHM6IHN0cmljdCwgY2FzZSBzZW5zaXRpdmUKKyAgICAgICAgICAgICAgICAgcjogcmVsYXhlZCwgY2FzZSBpbnNlbnNpdGl2ZQorICAgICAgICAgICAgICAgICBuOiBub3JtYWwsIGRlZmF1bHQgc2V0dGluZywgY3VycmVudGx5IGNhc2UgaW5zZW5zaXRpdmUKKworc2hvcnRuYW1lPWxvd2VyfHdpbjk1fHdpbm50fG1peGVkCisJICAgICAgLS0gU2hvcnRuYW1lIGRpc3BsYXkvY3JlYXRlIHNldHRpbmcuCisJCSBsb3dlcjogY29udmVydCB0byBsb3dlcmNhc2UgZm9yIGRpc3BsYXksCisJCQllbXVsYXRlIHRoZSBXaW5kb3dzIDk1IHJ1bGUgZm9yIGNyZWF0ZS4KKwkJIHdpbjk1OiBlbXVsYXRlIHRoZSBXaW5kb3dzIDk1IHJ1bGUgZm9yIGRpc3BsYXkvY3JlYXRlLgorCQkgd2lubnQ6IGVtdWxhdGUgdGhlIFdpbmRvd3MgTlQgcnVsZSBmb3IgZGlzcGxheS9jcmVhdGUuCisJCSBtaXhlZDogZW11bGF0ZSB0aGUgV2luZG93cyBOVCBydWxlIGZvciBkaXNwbGF5LAorCQkJZW11bGF0ZSB0aGUgV2luZG93cyA5NSBydWxlIGZvciBjcmVhdGUuCisJCSBEZWZhdWx0IHNldHRpbmcgaXMgYGxvd2VyJy4KKworPGJvb2w+OiAwLDEseWVzLG5vLHRydWUsZmFsc2UKKworVE9ETworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBOZWVkIHRvIGdldCByaWQgb2YgdGhlIHJhdyBzY2FubmluZyBzdHVmZi4gIEluc3RlYWQsIGFsd2F5cyB1c2UKKyAgYSBnZXQgbmV4dCBkaXJlY3RvcnkgZW50cnkgYXBwcm9hY2guICBUaGUgb25seSB0aGluZyBsZWZ0IHRoYXQgdXNlcworICByYXcgc2Nhbm5pbmcgaXMgdGhlIGRpcmVjdG9yeSByZW5hbWluZyBjb2RlLgorCisKK1BPU1NJQkxFIFBST0JMRU1TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHZmYXRfdmFsaWRfbG9uZ25hbWUgZG9lcyBub3QgcHJvcGVybHkgY2hlY2tlZCByZXNlcnZlZCBuYW1lcy4KKyogV2hlbiBhIHZvbHVtZSBuYW1lIGlzIHRoZSBzYW1lIGFzIGEgZGlyZWN0b3J5IG5hbWUgaW4gdGhlIHJvb3QKKyAgZGlyZWN0b3J5IG9mIHRoZSBmaWxlc3lzdGVtLCB0aGUgZGlyZWN0b3J5IG5hbWUgc29tZXRpbWVzIHNob3dzCisgIHVwIGFzIGFuIGVtcHR5IGZpbGUuCisqIGF1dG9jb252IG9wdGlvbiBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseS4KKworQlVHIFJFUE9SVFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSBoYXZlIHRyb3VibGUgd2l0aCB0aGUgVkZBVCBmaWxlc3lzdGVtLCBtYWlsIGJ1ZyByZXBvcnRzIHRvCitjaGFmZmVlQGJtcmMuY3MuYmVya2VsZXkuZWR1LiAgUGxlYXNlIHNwZWNpZnkgdGhlIGZpbGVuYW1lCithbmQgdGhlIG9wZXJhdGlvbiB0aGF0IGdhdmUgeW91IHRyb3VibGUuCisKK1RFU1QgU1VJVEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSBwbGFuIHRvIG1ha2UgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZmYXQgZmlsZXN5c3RlbSwgcGxlYXNlCitnZXQgdGhlIHRlc3Qgc3VpdGUgdGhhdCBjb21lcyB3aXRoIHRoZSB2ZmF0IGRpc3RyaWJ1dGlvbiBhdAorCisgIGh0dHA6Ly9ibXJjLmJlcmtlbGV5LmVkdS9wZW9wbGUvY2hhZmZlZS92ZmF0Lmh0bWwKKworVGhpcyB0ZXN0cyBxdWl0ZSBhIGZldyBwYXJ0cyBvZiB0aGUgdmZhdCBmaWxlc3lzdGVtIGFuZCBhZGRpdGlvbmFsCit0ZXN0cyBmb3IgbmV3IGZlYXR1cmVzIG9yIHVudGVzdGVkIGZlYXR1cmVzIHdvdWxkIGJlIGFwcHJlY2lhdGVkLgorCitOT1RFUyBPTiBUSEUgU1RSVUNUVVJFIE9GIFRIRSBWRkFUIEZJTEVTWVNURU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhUaGlzIGRvY3VtZW50YXRpb24gd2FzIHByb3ZpZGVkIGJ5IEdhbGVuIEMuIEh1bnQgPGdjaHVudEBjcy5yb2NoZXN0ZXIuZWR1PgorIGFuZCBsaWdodGx5IGFubm90YXRlZCBieSBHb3Jkb24gQ2hhZmZlZSkuCisKK1RoaXMgZG9jdW1lbnQgcHJlc2VudHMgYSB2ZXJ5IHJvdWdoLCB0ZWNobmljYWwgb3ZlcnZpZXcgb2YgbXkKK2tub3dsZWRnZSBvZiB0aGUgZXh0ZW5kZWQgRkFUIGZpbGUgc3lzdGVtIHVzZWQgaW4gV2luZG93cyBOVCAzLjUgYW5kCitXaW5kb3dzIDk1LiAgSSBkb24ndCBndWFyYW50ZWUgdGhhdCBhbnkgb2YgdGhlIGZvbGxvd2luZyBpcyBjb3JyZWN0LAorYnV0IGl0IGFwcGVhcnMgdG8gYmUgc28uCisKK1RoZSBleHRlbmRlZCBGQVQgZmlsZSBzeXN0ZW0gaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgRkFUCitmaWxlIHN5c3RlbSB1c2VkIGluIERPUyB2ZXJzaW9ucyB1cCB0byBhbmQgaW5jbHVkaW5nIDYuMjIzNDEwMjM5ODQ3Cis6LSkuICBUaGUgc2lnbmlmaWNhbnQgY2hhbmdlIGhhcyBiZWVuIHRoZSBhZGRpdGlvbiBvZiBsb25nIGZpbGUgbmFtZXMuCitUaGVzZSBuYW1lcyBzdXBwb3J0IHVwIHRvIDI1NSBjaGFyYWN0ZXJzIGluY2x1ZGluZyBzcGFjZXMgYW5kIGxvd2VyCitjYXNlIGNoYXJhY3RlcnMgYXMgb3Bwb3NlZCB0byB0aGUgdHJhZGl0aW9uYWwgOC4zIHNob3J0IG5hbWVzLgorCitIZXJlIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdHJhZGl0aW9uYWwgRkFUIGVudHJ5IGluIHRoZSBjdXJyZW50CitXaW5kb3dzIDk1IGZpbGVzeXN0ZW06CisKKyAgICAgICAgc3RydWN0IGRpcmVjdG9yeSB7IC8vIFNob3J0IDguMyBuYW1lcyAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWVbOF07ICAgICAgICAgIC8vIGZpbGUgbmFtZSAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGV4dFszXTsgICAgICAgICAgIC8vIGZpbGUgZXh0ZW5zaW9uIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYXR0cjsgICAgICAgICAgICAgLy8gYXR0cmlidXRlIGJ5dGUgCisJCXVuc2lnbmVkIGNoYXIgbGNhc2U7CQkvLyBDYXNlIGZvciBiYXNlIGFuZCBleHRlbnNpb24KKwkJdW5zaWduZWQgY2hhciBjdGltZV9tczsJCS8vIENyZWF0aW9uIHRpbWUsIG1pbGxpc2Vjb25kcworCQl1bnNpZ25lZCBjaGFyIGN0aW1lWzJdOwkJLy8gQ3JlYXRpb24gdGltZQorCQl1bnNpZ25lZCBjaGFyIGNkYXRlWzJdOwkJLy8gQ3JlYXRpb24gZGF0ZQorCQl1bnNpZ25lZCBjaGFyIGFkYXRlWzJdOwkJLy8gTGFzdCBhY2Nlc3MgZGF0ZQorCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzJdOwkvLyByZXNlcnZlZCB2YWx1ZXMgKGlnbm9yZWQpIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdGltZVsyXTsgICAgICAgICAgLy8gdGltZSBzdGFtcCAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGVbMl07ICAgICAgICAgIC8vIGRhdGUgc3RhbXAgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzdGFydFsyXTsgICAgICAgICAvLyBzdGFydGluZyBjbHVzdGVyIG51bWJlciAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHNpemVbNF07ICAgICAgICAgIC8vIHNpemUgb2YgdGhlIGZpbGUgCisgICAgICAgIH07CisKK1RoZSBsY2FzZSBmaWVsZCBzcGVjaWZpZXMgaWYgdGhlIGJhc2UgYW5kL29yIHRoZSBleHRlbnNpb24gb2YgYW4gOC4zCituYW1lIHNob3VsZCBiZSBjYXBpdGFsaXplZC4gIFRoaXMgZmllbGQgZG9lcyBub3Qgc2VlbSB0byBiZSB1c2VkIGJ5CitXaW5kb3dzIDk1IGJ1dCBpdCBpcyB1c2VkIGJ5IFdpbmRvd3MgTlQuICBUaGUgY2FzZSBvZiBmaWxlbmFtZXMgaXMgbm90Citjb21wbGV0ZWx5IGNvbXBhdGlibGUgZnJvbSBXaW5kb3dzIE5UIHRvIFdpbmRvd3MgOTUuICBJdCBpcyBub3QgY29tcGxldGVseQorY29tcGF0aWJsZSBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24sIGhvd2V2ZXIuICBGaWxlbmFtZXMgdGhhdCBmaXQgaW4KK3RoZSA4LjMgbmFtZXNwYWNlIGFuZCBhcmUgd3JpdHRlbiBvbiBXaW5kb3dzIE5UIHRvIGJlIGxvd2VyY2FzZSB3aWxsCitzaG93IHVwIGFzIHVwcGVyY2FzZSBvbiBXaW5kb3dzIDk1LgorCitOb3RlIHRoYXQgdGhlICJzdGFydCIgYW5kICJzaXplIiB2YWx1ZXMgYXJlIGFjdHVhbGx5IGxpdHRsZQorZW5kaWFuIGludGVnZXIgdmFsdWVzLiAgVGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgZmllbGRzIGluIHRoaXMKK3N0cnVjdHVyZSBhcmUgcHVibGljIGtub3dsZWRnZSBhbmQgY2FuIGJlIGZvdW5kIGVsc2V3aGVyZS4KKworV2l0aCB0aGUgZXh0ZW5kZWQgRkFUIHN5c3RlbSwgTWljcm9zb2Z0IGhhcyBpbnNlcnRlZCBleHRyYQorZGlyZWN0b3J5IGVudHJpZXMgZm9yIGFueSBmaWxlcyB3aXRoIGV4dGVuZGVkIG5hbWVzLiAgKEFueSBuYW1lIHdoaWNoCitsZWdhbGx5IGZpdHMgd2l0aGluIHRoZSBvbGQgOC4zIGVuY29kaW5nIHNjaGVtZSBkb2VzIG5vdCBoYXZlIGV4dHJhCitlbnRyaWVzLikgIEkgY2FsbCB0aGVzZSBleHRyYSBlbnRyaWVzIHNsb3RzLiAgQmFzaWNhbGx5LCBhIHNsb3QgaXMgYQorc3BlY2lhbGx5IGZvcm1hdHRlZCBkaXJlY3RvcnkgZW50cnkgd2hpY2ggaG9sZHMgdXAgdG8gMTMgY2hhcmFjdGVycyBvZgorYSBmaWxlJ3MgZXh0ZW5kZWQgbmFtZS4gIFRoaW5rIG9mIHNsb3RzIGFzIGFkZGl0aW9uYWwgbGFiZWxpbmcgZm9yIHRoZQorZGlyZWN0b3J5IGVudHJ5IG9mIHRoZSBmaWxlIHRvIHdoaWNoIHRoZXkgY29ycmVzcG9uZC4gIE1pY3Jvc29mdAorcHJlZmVycyB0byByZWZlciB0byB0aGUgOC4zIGVudHJ5IGZvciBhIGZpbGUgYXMgaXRzIGFsaWFzIGFuZCB0aGUKK2V4dGVuZGVkIHNsb3QgZGlyZWN0b3J5IGVudHJpZXMgYXMgdGhlIGZpbGUgbmFtZS4gCisKK1RoZSBDIHN0cnVjdHVyZSBmb3IgYSBzbG90IGRpcmVjdG9yeSBlbnRyeSBmb2xsb3dzOgorCisgICAgICAgIHN0cnVjdCBzbG90IHsgLy8gVXAgdG8gMTMgY2hhcmFjdGVycyBvZiBhIGxvbmcgbmFtZSAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGlkOyAgICAgICAgICAgICAgIC8vIHNlcXVlbmNlIG51bWJlciBmb3Igc2xvdCAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWUwXzRbMTBdOyAgICAgIC8vIGZpcnN0IDUgY2hhcmFjdGVycyBpbiBuYW1lIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYXR0cjsgICAgICAgICAgICAgLy8gYXR0cmlidXRlIGJ5dGUKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkOyAgICAgICAgIC8vIGFsd2F5cyAwIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxpYXNfY2hlY2tzdW07ICAgLy8gY2hlY2tzdW0gZm9yIDguMyBhbGlhcyAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWU1XzEwWzEyXTsgICAgIC8vIDYgbW9yZSBjaGFyYWN0ZXJzIGluIG5hbWUKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0YXJ0WzJdOyAgICAgICAgIC8vIHN0YXJ0aW5nIGNsdXN0ZXIgbnVtYmVyCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuYW1lMTFfMTJbNF07ICAgICAvLyBsYXN0IDIgY2hhcmFjdGVycyBpbiBuYW1lCisgICAgICAgIH07CisKK0lmIHRoZSBsYXlvdXQgb2YgdGhlIHNsb3RzIGxvb2tzIGEgbGl0dGxlIG9kZCwgaXQncyBvbmx5CitiZWNhdXNlIG9mIE1pY3Jvc29mdCdzIGVmZm9ydHMgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIG9sZAorc29mdHdhcmUuICBUaGUgc2xvdHMgbXVzdCBiZSBkaXNndWlzZWQgdG8gcHJldmVudCBvbGQgc29mdHdhcmUgZnJvbQorcGFuaWNraW5nLiAgVG8gdGhpcyBlbmQsIGEgbnVtYmVyIG9mIG1lYXN1cmVzIGFyZSB0YWtlbjoKKworICAgICAgICAxKSBUaGUgYXR0cmlidXRlIGJ5dGUgZm9yIGEgc2xvdCBkaXJlY3RvcnkgZW50cnkgaXMgYWx3YXlzIHNldAorICAgICAgICAgICB0byAweDBmLiAgVGhpcyBjb3JyZXNwb25kcyB0byBhbiBvbGQgZGlyZWN0b3J5IGVudHJ5IHdpdGgKKyAgICAgICAgICAgYXR0cmlidXRlcyBvZiAiaGlkZGVuIiwgInN5c3RlbSIsICJyZWFkLW9ubHkiLCBhbmQgInZvbHVtZQorICAgICAgICAgICBsYWJlbCIuICBNb3N0IG9sZCBzb2Z0d2FyZSB3aWxsIGlnbm9yZSBhbnkgZGlyZWN0b3J5CisgICAgICAgICAgIGVudHJpZXMgd2l0aCB0aGUgInZvbHVtZSBsYWJlbCIgYml0IHNldC4gIFJlYWwgdm9sdW1lIGxhYmVsCisgICAgICAgICAgIGVudHJpZXMgZG9uJ3QgaGF2ZSB0aGUgb3RoZXIgdGhyZWUgYml0cyBzZXQuCisKKyAgICAgICAgMikgVGhlIHN0YXJ0aW5nIGNsdXN0ZXIgaXMgYWx3YXlzIHNldCB0byAwLCBhbiBpbXBvc3NpYmxlCisgICAgICAgICAgIHZhbHVlIGZvciBhIERPUyBmaWxlLgorCitCZWNhdXNlIHRoZSBleHRlbmRlZCBGQVQgc3lzdGVtIGlzIGJhY2t3YXJkIGNvbXBhdGlibGUsIGl0IGlzCitwb3NzaWJsZSBmb3Igb2xkIHNvZnR3YXJlIHRvIG1vZGlmeSBkaXJlY3RvcnkgZW50cmllcy4gIE1lYXN1cmVzIG11c3QKK2JlIHRha2VuIHRvIGVuc3VyZSB0aGUgdmFsaWRpdHkgb2Ygc2xvdHMuICBBbiBleHRlbmRlZCBGQVQgc3lzdGVtIGNhbgordmVyaWZ5IHRoYXQgYSBzbG90IGRvZXMgaW4gZmFjdCBiZWxvbmcgdG8gYW4gOC4zIGRpcmVjdG9yeSBlbnRyeSBieQordGhlIGZvbGxvd2luZzoKKworICAgICAgICAxKSBQb3NpdGlvbmluZy4gIFNsb3RzIGZvciBhIGZpbGUgYWx3YXlzIGltbWVkaWF0ZWx5IHByb2NlZWQKKyAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyA4LjMgZGlyZWN0b3J5IGVudHJ5LiAgSW4gYWRkaXRpb24sIGVhY2gKKyAgICAgICAgICAgc2xvdCBoYXMgYW4gaWQgd2hpY2ggbWFya3MgaXRzIG9yZGVyIGluIHRoZSBleHRlbmRlZCBmaWxlCisgICAgICAgICAgIG5hbWUuICBIZXJlIGlzIGEgdmVyeSBhYmJyZXZpYXRlZCB2aWV3IG9mIGFuIDguMyBkaXJlY3RvcnkKKyAgICAgICAgICAgZW50cnkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGxvbmcgbmFtZSBzbG90cyBmb3IgdGhlIGZpbGUKKyAgICAgICAgICAgIk15IEJpZyBGaWxlLkV4dGVuc2lvbiB3aGljaCBpcyBsb25nIjoKKworICAgICAgICAgICAgICAgIDxwcm9jZWVkaW5nIGZpbGVzLi4uPgorICAgICAgICAgICAgICAgIDxzbG90ICMzLCBpZCA9IDB4NDMsIGNoYXJhY3RlcnMgPSAiaCBpcyBsb25nIj4KKyAgICAgICAgICAgICAgICA8c2xvdCAjMiwgaWQgPSAweDAyLCBjaGFyYWN0ZXJzID0gInh0ZW5zaW9uIHdoaWMiPgorICAgICAgICAgICAgICAgIDxzbG90ICMxLCBpZCA9IDB4MDEsIGNoYXJhY3RlcnMgPSAiTXkgQmlnIEZpbGUuRSI+CisgICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBlbnRyeSwgbmFtZSA9ICJNWUJJR0ZJTC5FWFQiPgorCisgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgc2xvdHMgYXJlIHN0b3JlZCBmcm9tIGxhc3QgdG8gZmlyc3QuICBTbG90cworICAgICAgICAgICBhcmUgbnVtYmVyZWQgZnJvbSAxIHRvIE4uICBUaGUgTnRoIHNsb3QgaXMgb3InZWQgd2l0aCAweDQwCisgICAgICAgICAgIHRvIG1hcmsgaXQgYXMgdGhlIGxhc3Qgb25lLgorCisgICAgICAgIDIpIENoZWNrc3VtLiAgRWFjaCBzbG90IGhhcyBhbiAiYWxpYXNfY2hlY2tzdW0iIHZhbHVlLiAgVGhlCisgICAgICAgICAgIGNoZWNrc3VtIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgOC4zIG5hbWUgdXNpbmcgdGhlCisgICAgICAgICAgIGZvbGxvd2luZyBhbGdvcml0aG06CisKKyAgICAgICAgICAgICAgICBmb3IgKHN1bSA9IGkgPSAwOyBpIDwgMTE7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKCgoc3VtJjEpPDw3KXwoKHN1bSYweGZlKT4+MSkpICsgbmFtZVtpXQorICAgICAgICAgICAgICAgIH0KKworCTMpIElmIHRoZXJlIGlzIGZyZWUgc3BhY2UgaW4gdGhlIGZpbmFsIHNsb3QsIGEgVW5pY29kZSBOVUxMICgweDAwMDApIAorCSAgIGlzIHN0b3JlZCBhZnRlciB0aGUgZmluYWwgY2hhcmFjdGVyLiAgQWZ0ZXIgdGhhdCwgYWxsIHVudXNlZCAKKwkgICBjaGFyYWN0ZXJzIGluIHRoZSBmaW5hbCBzbG90IGFyZSBzZXQgdG8gVW5pY29kZSAweEZGRkYuCisKK0ZpbmFsbHksIG5vdGUgdGhhdCB0aGUgZXh0ZW5kZWQgbmFtZSBpcyBzdG9yZWQgaW4gVW5pY29kZS4gIEVhY2ggVW5pY29kZQorY2hhcmFjdGVyIHRha2VzIHR3byBieXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMxOGRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CkBAIC0wLDAgKzEsNjcxIEBACisvKiAtKi0gYXV0by1maWxsIC0qLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkJT3ZlcnZpZXcgb2YgdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0KKworCQlSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KKworCQkJICAgICAgNS1KVUwtMTk5OQorCisKK0NvbnZlbnRpb25zIHVzZWQgaW4gdGhpcyBkb2N1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbj4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFYWNoIHNlY3Rpb24gaW4gdGhpcyBkb2N1bWVudCB3aWxsIGhhdmUgdGhlIHN0cmluZyAiPHNlY3Rpb24+IiBhdCB0aGUKK3JpZ2h0LWhhbmQgc2lkZSBvZiB0aGUgc2VjdGlvbiB0aXRsZS4gRWFjaCBzdWJzZWN0aW9uIHdpbGwgaGF2ZQorIjxzdWJzZWN0aW9uPiIgYXQgdGhlIHJpZ2h0LWhhbmQgc2lkZS4gVGhlc2Ugc3RyaW5ncyBhcmUgbWVhbnQgdG8gbWFrZQoraXQgZWFzaWVyIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBkb2N1bWVudC4KKworTk9URSB0aGF0IHRoZSBtYXN0ZXIgY29weSBvZiB0aGlzIGRvY3VtZW50IGlzIGF2YWlsYWJsZSBvbmxpbmUgYXQ6CitodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9kb2NzL3Zmcy50eHQKKworCitXaGF0IGlzIGl0PyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24+Cis9PT09PT09PT09PQorCitUaGUgVmlydHVhbCBGaWxlIFN5c3RlbSAob3RoZXJ3aXNlIGtub3duIGFzIHRoZSBWaXJ0dWFsIEZpbGVzeXN0ZW0KK1N3aXRjaCkgaXMgdGhlIHNvZnR3YXJlIGxheWVyIGluIHRoZSBrZXJuZWwgdGhhdCBwcm92aWRlcyB0aGUKK2ZpbGVzeXN0ZW0gaW50ZXJmYWNlIHRvIHVzZXJzcGFjZSBwcm9ncmFtcy4gSXQgYWxzbyBwcm92aWRlcyBhbgorYWJzdHJhY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgd2hpY2ggYWxsb3dzIGRpZmZlcmVudCBmaWxlc3lzdGVtCitpbXBsZW1lbnRhdGlvbnMgdG8gY28tZXhpc3QuCisKKworQSBRdWljayBMb29rIEF0IEhvdyBJdCBXb3JrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbiB0aGlzIHNlY3Rpb24gSSdsbCBicmllZmx5IGRlc2NyaWJlIGhvdyB0aGluZ3Mgd29yaywgYmVmb3JlCitsYXVuY2hpbmcgaW50byB0aGUgZGV0YWlscy4gSSdsbCBzdGFydCB3aXRoIGRlc2NyaWJpbmcgd2hhdCBoYXBwZW5zCit3aGVuIHVzZXIgcHJvZ3JhbXMgb3BlbiBhbmQgbWFuaXB1bGF0ZSBmaWxlcywgYW5kIHRoZW4gbG9vayBmcm9tIHRoZQorb3RoZXIgdmlldyB3aGljaCBpcyBob3cgYSBmaWxlc3lzdGVtIGlzIHN1cHBvcnRlZCBhbmQgc3Vic2VxdWVudGx5Cittb3VudGVkLgorCitPcGVuaW5nIGEgRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1YnNlY3Rpb24+CistLS0tLS0tLS0tLS0tLQorCitUaGUgVkZTIGltcGxlbWVudHMgdGhlIG9wZW4oMiksIHN0YXQoMiksIGNobW9kKDIpIGFuZCBzaW1pbGFyIHN5c3RlbQorY2FsbHMuIFRoZSBwYXRobmFtZSBhcmd1bWVudCBpcyB1c2VkIGJ5IHRoZSBWRlMgdG8gc2VhcmNoIHRocm91Z2ggdGhlCitkaXJlY3RvcnkgZW50cnkgY2FjaGUgKGRlbnRyeSBjYWNoZSBvciAiZGNhY2hlIikuIFRoaXMgcHJvdmlkZXMgYSB2ZXJ5CitmYXN0IGxvb2stdXAgbWVjaGFuaXNtIHRvIHRyYW5zbGF0ZSBhIHBhdGhuYW1lIChmaWxlbmFtZSkgaW50byBhCitzcGVjaWZpYyBkZW50cnkuCisKK0FuIGluZGl2aWR1YWwgZGVudHJ5IHVzdWFsbHkgaGFzIGEgcG9pbnRlciB0byBhbiBpbm9kZS4gSW5vZGVzIGFyZSB0aGUKK3RoaW5ncyB0aGF0IGxpdmUgb24gZGlzYyBkcml2ZXMsIGFuZCBjYW4gYmUgcmVndWxhciBmaWxlcyAoeW91IGtub3c6Cit0aG9zZSB0aGluZ3MgdGhhdCB5b3Ugd3JpdGUgZGF0YSBpbnRvKSwgZGlyZWN0b3JpZXMsIEZJRk9zIGFuZCBvdGhlcgorYmVhc3RzLiBEZW50cmllcyBsaXZlIGluIFJBTSBhbmQgYXJlIG5ldmVyIHNhdmVkIHRvIGRpc2M6IHRoZXkgZXhpc3QKK29ubHkgZm9yIHBlcmZvcm1hbmNlLiBJbm9kZXMgbGl2ZSBvbiBkaXNjIGFuZCBhcmUgY29waWVkIGludG8gbWVtb3J5Cit3aGVuIHJlcXVpcmVkLiBMYXRlciBhbnkgY2hhbmdlcyBhcmUgd3JpdHRlbiBiYWNrIHRvIGRpc2MuIFRoZSBpbm9kZQordGhhdCBsaXZlcyBpbiBSQU0gaXMgYSBWRlMgaW5vZGUsIGFuZCBpdCBpcyB0aGlzIHdoaWNoIHRoZSBkZW50cnkKK3BvaW50cyB0by4gQSBzaW5nbGUgaW5vZGUgY2FuIGJlIHBvaW50ZWQgdG8gYnkgbXVsdGlwbGUgZGVudHJpZXMKKyh0aGluayBhYm91dCBoYXJkbGlua3MpLgorCitUaGUgZGNhY2hlIGlzIG1lYW50IHRvIGJlIGEgdmlldyBpbnRvIHlvdXIgZW50aXJlIGZpbGVzcGFjZS4gVW5saWtlCitMaW51cywgbW9zdCBvZiB1cyBsb3NlcnMgY2FuJ3QgZml0IGVub3VnaCBkZW50cmllcyBpbnRvIFJBTSB0byBjb3ZlcgorYWxsIG9mIG91ciBmaWxlc3BhY2UsIHNvIHRoZSBkY2FjaGUgaGFzIGJpdHMgbWlzc2luZy4gSW4gb3JkZXIgdG8KK3Jlc29sdmUgeW91ciBwYXRobmFtZSBpbnRvIGEgZGVudHJ5LCB0aGUgVkZTIG1heSBoYXZlIHRvIHJlc29ydCB0bworY3JlYXRpbmcgZGVudHJpZXMgYWxvbmcgdGhlIHdheSwgYW5kIHRoZW4gbG9hZGluZyB0aGUgaW5vZGUuIFRoaXMgaXMKK2RvbmUgYnkgbG9va2luZyB1cCB0aGUgaW5vZGUuCisKK1RvIGxvb2sgdXAgYW4gaW5vZGUgKHVzdWFsbHkgcmVhZCBmcm9tIGRpc2MpIHJlcXVpcmVzIHRoYXQgdGhlIFZGUworY2FsbHMgdGhlIGxvb2t1cCgpIG1ldGhvZCBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBpbm9kZS4gVGhpcyBtZXRob2QKK2lzIGluc3RhbGxlZCBieSB0aGUgc3BlY2lmaWMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiB0aGF0IHRoZSBpbm9kZQorbGl2ZXMgaW4uIFRoZXJlIHdpbGwgYmUgbW9yZSBvbiB0aGlzIGxhdGVyLgorCitPbmNlIHRoZSBWRlMgaGFzIHRoZSByZXF1aXJlZCBkZW50cnkgKGFuZCBoZW5jZSB0aGUgaW5vZGUpLCB3ZSBjYW4gZG8KK2FsbCB0aG9zZSBib3JpbmcgdGhpbmdzIGxpa2Ugb3BlbigyKSB0aGUgZmlsZSwgb3Igc3RhdCgyKSBpdCB0byBwZWVrCithdCB0aGUgaW5vZGUgZGF0YS4gVGhlIHN0YXQoMikgb3BlcmF0aW9uIGlzIGZhaXJseSBzaW1wbGU6IG9uY2UgdGhlCitWRlMgaGFzIHRoZSBkZW50cnksIGl0IHBlZWtzIGF0IHRoZSBpbm9kZSBkYXRhIGFuZCBwYXNzZXMgc29tZSBvZiBpdAorYmFjayB0byB1c2Vyc3BhY2UuCisKK09wZW5pbmcgYSBmaWxlIHJlcXVpcmVzIGFub3RoZXIgb3BlcmF0aW9uOiBhbGxvY2F0aW9uIG9mIGEgZmlsZQorc3RydWN0dXJlICh0aGlzIGlzIHRoZSBrZXJuZWwtc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBmaWxlCitkZXNjcmlwdG9ycykuIFRoZSBmcmVzaGx5IGFsbG9jYXRlZCBmaWxlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXNlZCB3aXRoCithIHBvaW50ZXIgdG8gdGhlIGRlbnRyeSBhbmQgYSBzZXQgb2YgZmlsZSBvcGVyYXRpb24gbWVtYmVyIGZ1bmN0aW9ucy4KK1RoZXNlIGFyZSB0YWtlbiBmcm9tIHRoZSBpbm9kZSBkYXRhLiBUaGUgb3BlbigpIGZpbGUgbWV0aG9kIGlzIHRoZW4KK2NhbGxlZCBzbyB0aGUgc3BlY2lmaWMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiBjYW4gZG8gaXQncyB3b3JrLiBZb3UKK2NhbiBzZWUgdGhhdCB0aGlzIGlzIGFub3RoZXIgc3dpdGNoIHBlcmZvcm1lZCBieSB0aGUgVkZTLgorCitUaGUgZmlsZSBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGludG8gdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSBmb3IgdGhlCitwcm9jZXNzLgorCitSZWFkaW5nLCB3cml0aW5nIGFuZCBjbG9zaW5nIGZpbGVzIChhbmQgb3RoZXIgYXNzb3J0ZWQgVkZTIG9wZXJhdGlvbnMpCitpcyBkb25lIGJ5IHVzaW5nIHRoZSB1c2Vyc3BhY2UgZmlsZSBkZXNjcmlwdG9yIHRvIGdyYWIgdGhlIGFwcHJvcHJpYXRlCitmaWxlIHN0cnVjdHVyZSwgYW5kIHRoZW4gY2FsbGluZyB0aGUgcmVxdWlyZWQgZmlsZSBzdHJ1Y3R1cmUgbWV0aG9kCitmdW5jdGlvbiB0byBkbyB3aGF0ZXZlciBpcyByZXF1aXJlZC4KKworRm9yIGFzIGxvbmcgYXMgdGhlIGZpbGUgaXMgb3BlbiwgaXQga2VlcHMgdGhlIGRlbnRyeSAib3BlbiIgKGluIHVzZSksCit3aGljaCBpbiB0dXJuIG1lYW5zIHRoYXQgdGhlIFZGUyBpbm9kZSBpcyBzdGlsbCBpbiB1c2UuCisKK0FsbCBWRlMgc3lzdGVtIGNhbGxzIChpLmUuIG9wZW4oMiksIHN0YXQoMiksIHJlYWQoMiksIHdyaXRlKDIpLAorY2htb2QoMikgYW5kIHNvIG9uKSBhcmUgY2FsbGVkIGZyb20gYSBwcm9jZXNzIGNvbnRleHQuIFlvdSBzaG91bGQKK2Fzc3VtZSB0aGF0IHRoZXNlIGNhbGxzIGFyZSBtYWRlIHdpdGhvdXQgYW55IGtlcm5lbCBsb2NrcyBiZWluZworaGVsZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBwcm9jZXNzZXMgbWF5IGJlIGV4ZWN1dGluZyB0aGUgc2FtZSBwaWVjZSBvZgorZmlsZXN5c3RlbSBvciBkcml2ZXIgY29kZSBhdCB0aGUgc2FtZSB0aW1lLCBvbiBkaWZmZXJlbnQKK3Byb2Nlc3NvcnMuIFlvdSBzaG91bGQgZW5zdXJlIHRoYXQgYWNjZXNzIHRvIHNoYXJlZCByZXNvdXJjZXMgaXMKK3Byb3RlY3RlZCBieSBhcHByb3ByaWF0ZSBsb2Nrcy4KKworUmVnaXN0ZXJpbmcgYW5kIE1vdW50aW5nIGEgRmlsZXN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWJzZWN0aW9uPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBzdXBwb3J0IGEgbmV3IGtpbmQgb2YgZmlsZXN5c3RlbSBpbiB0aGUga2VybmVsLCBhbGwgeW91CituZWVkIHRvIGRvIGlzIGNhbGwgcmVnaXN0ZXJfZmlsZXN5c3RlbSgpLiBZb3UgcGFzcyBhIHN0cnVjdHVyZQorZGVzY3JpYmluZyB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiAoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUpCit3aGljaCBpcyB0aGVuIGFkZGVkIHRvIGFuIGludGVybmFsIHRhYmxlIG9mIHN1cHBvcnRlZCBmaWxlc3lzdGVtcy4gWW91CitjYW4gZG86CisKKyUgY2F0IC9wcm9jL2ZpbGVzeXN0ZW1zCisKK3RvIHNlZSB3aGF0IGZpbGVzeXN0ZW1zIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtLgorCitXaGVuIGEgcmVxdWVzdCBpcyBtYWRlIHRvIG1vdW50IGEgYmxvY2sgZGV2aWNlIG9udG8gYSBkaXJlY3RvcnkgaW4KK3lvdXIgZmlsZXNwYWNlIHRoZSBWRlMgd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBtZXRob2QgZm9yIHRoZQorc3BlY2lmaWMgZmlsZXN5c3RlbS4gVGhlIGRlbnRyeSBmb3IgdGhlIG1vdW50IHBvaW50IHdpbGwgdGhlbiBiZQordXBkYXRlZCB0byBwb2ludCB0byB0aGUgcm9vdCBpbm9kZSBmb3IgdGhlIG5ldyBmaWxlc3lzdGVtLgorCitJdCdzIG5vdyB0aW1lIHRvIGxvb2sgYXQgdGhpbmdzIGluIG1vcmUgZGV0YWlsLgorCisKK3N0cnVjdCBmaWxlX3N5c3RlbV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbj4KKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZGVzY3JpYmVzIHRoZSBmaWxlc3lzdGVtLiBBcyBvZiBrZXJuZWwgMi4xLjk5LCB0aGUgZm9sbG93aW5nCittZW1iZXJzIGFyZSBkZWZpbmVkOgorCitzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZnNfZmxhZ3M7CisJc3RydWN0IHN1cGVyX2Jsb2NrICooKnJlYWRfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqLCBpbnQpOworCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICogbmV4dDsKK307CisKKyAgbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZSwgc3VjaCBhcyAiZXh0MiIsICJpc285NjYwIiwKKwkibXNkb3MiIGFuZCBzbyBvbgorCisgIGZzX2ZsYWdzOiB2YXJpb3VzIGZsYWdzIChpLmUuIEZTX1JFUVVJUkVTX0RFViwgRlNfTk9fRENBQ0hFLCBldGMuKQorCisgIHJlYWRfc3VwZXI6IHRoZSBtZXRob2QgdG8gY2FsbCB3aGVuIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMKKwlmaWxlc3lzdGVtIHNob3VsZCBiZSBtb3VudGVkCisKKyAgbmV4dDogZm9yIGludGVybmFsIFZGUyB1c2U6IHlvdSBzaG91bGQgaW5pdGlhbGlzZSB0aGlzIHRvIE5VTEwKKworVGhlIHJlYWRfc3VwZXIoKSBtZXRob2QgaGFzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorCisgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2I6IHRoZSBzdXBlcmJsb2NrIHN0cnVjdHVyZS4gVGhpcyBpcyBwYXJ0aWFsbHkKKwlpbml0aWFsaXNlZCBieSB0aGUgVkZTIGFuZCB0aGUgcmVzdCBtdXN0IGJlIGluaXRpYWxpc2VkIGJ5IHRoZQorCXJlYWRfc3VwZXIoKSBtZXRob2QKKworICB2b2lkICpkYXRhOiBhcmJpdHJhcnkgbW91bnQgb3B0aW9ucywgdXN1YWxseSBjb21lcyBhcyBhbiBBU0NJSQorCXN0cmluZworCisgIGludCBzaWxlbnQ6IHdoZXRoZXIgb3Igbm90IHRvIGJlIHNpbGVudCBvbiBlcnJvcgorCitUaGUgcmVhZF9zdXBlcigpIG1ldGhvZCBtdXN0IGRldGVybWluZSBpZiB0aGUgYmxvY2sgZGV2aWNlIHNwZWNpZmllZAoraW4gdGhlIHN1cGVyYmxvY2sgY29udGFpbnMgYSBmaWxlc3lzdGVtIG9mIHRoZSB0eXBlIHRoZSBtZXRob2QKK3N1cHBvcnRzLiBPbiBzdWNjZXNzIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgc3VwZXJibG9jayBwb2ludGVyLCBvbgorZmFpbHVyZSBpdCByZXR1cm5zIE5VTEwuCisKK1RoZSBtb3N0IGludGVyZXN0aW5nIG1lbWJlciBvZiB0aGUgc3VwZXJibG9jayBzdHJ1Y3R1cmUgdGhhdCB0aGUKK3JlYWRfc3VwZXIoKSBtZXRob2QgZmlsbHMgaW4gaXMgdGhlICJzX29wIiBmaWVsZC4gVGhpcyBpcyBhIHBvaW50ZXIgdG8KK2EgInN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIiB3aGljaCBkZXNjcmliZXMgdGhlIG5leHQgbGV2ZWwgb2YgdGhlCitmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLgorCisKK3N0cnVjdCBzdXBlcl9vcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbj4KKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZGVzY3JpYmVzIGhvdyB0aGUgVkZTIGNhbiBtYW5pcHVsYXRlIHRoZSBzdXBlcmJsb2NrIG9mIHlvdXIKK2ZpbGVzeXN0ZW0uIEFzIG9mIGtlcm5lbCAyLjEuOTksIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDoKKworc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeworCXZvaWQgKCpyZWFkX2lub2RlKSAoc3RydWN0IGlub2RlICopOworCWludCAoKndyaXRlX2lub2RlKSAoc3RydWN0IGlub2RlICosIGludCk7CisJdm9pZCAoKnB1dF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqZHJvcF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqZGVsZXRlX2lub2RlKSAoc3RydWN0IGlub2RlICopOworCWludCAoKm5vdGlmeV9jaGFuZ2UpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKKwl2b2lkICgqcHV0X3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCXZvaWQgKCp3cml0ZV9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKwlpbnQgKCpzdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IHN0YXRmcyAqLCBpbnQpOworCWludCAoKnJlbW91bnRfZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50ICosIGNoYXIgKik7CisJdm9pZCAoKmNsZWFyX2lub2RlKSAoc3RydWN0IGlub2RlICopOworfTsKKworQWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3Mgb3RoZXJ3aXNlCitub3RlZC4gVGhpcyBtZWFucyB0aGF0IG1vc3QgbWV0aG9kcyBjYW4gYmxvY2sgc2FmZWx5LiBBbGwgbWV0aG9kcyBhcmUKK29ubHkgY2FsbGVkIGZyb20gYSBwcm9jZXNzIGNvbnRleHQgKGkuZS4gbm90IGZyb20gYW4gaW50ZXJydXB0IGhhbmRsZXIKK29yIGJvdHRvbSBoYWxmKS4KKworICByZWFkX2lub2RlOiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmVhZCBhIHNwZWNpZmljIGlub2RlIGZyb20gdGhlCisJbW91bnRlZCBmaWxlc3lzdGVtLiBUaGUgImlfaW5vIiBtZW1iZXIgaW4gdGhlICJzdHJ1Y3QgaW5vZGUiCisJd2lsbCBiZSBpbml0aWFsaXNlZCBieSB0aGUgVkZTIHRvIGluZGljYXRlIHdoaWNoIGlub2RlIHRvCisJcmVhZC4gT3RoZXIgbWVtYmVycyBhcmUgZmlsbGVkIGluIGJ5IHRoaXMgbWV0aG9kCisKKyAgd3JpdGVfaW5vZGU6IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBWRlMgbmVlZHMgdG8gd3JpdGUgYW4KKwlpbm9kZSB0byBkaXNjLiAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdyaXRlCisJc2hvdWxkIGJlIHN5bmNocm9ub3VzIG9yIG5vdCwgbm90IGFsbCBmaWxlc3lzdGVtcyBjaGVjayB0aGlzIGZsYWcuCisKKyAgcHV0X2lub2RlOiBjYWxsZWQgd2hlbiB0aGUgVkZTIGlub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGUgaW5vZGUKKwljYWNoZS4gVGhpcyBtZXRob2QgaXMgb3B0aW9uYWwKKworICBkcm9wX2lub2RlOiBjYWxsZWQgd2hlbiB0aGUgbGFzdCBhY2Nlc3MgdG8gdGhlIGlub2RlIGlzIGRyb3BwZWQsCisJd2l0aCB0aGUgaW5vZGVfbG9jayBzcGlubG9jayBoZWxkLgorCisJVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGVpdGhlciBOVUxMIChub3JtYWwgdW5peCBmaWxlc3lzdGVtCisJc2VtYW50aWNzKSBvciAiZ2VuZXJpY19kZWxldGVfaW5vZGUiIChmb3IgZmlsZXN5c3RlbXMgdGhhdCBkbyBub3QKKwl3YW50IHRvIGNhY2hlIGlub2RlcyAtIGNhdXNpbmcgImRlbGV0ZV9pbm9kZSIgdG8gYWx3YXlzIGJlCisJY2FsbGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGlfbmxpbmspCisKKwlUaGUgImdlbmVyaWNfZGVsZXRlX2lub2RlKCkiIGJlaGF2aW91ciBpcyBlcXVpdmFsZW50IHRvIHRoZQorCW9sZCBwcmFjdGljZSBvZiB1c2luZyAiZm9yY2VfZGVsZXRlIiBpbiB0aGUgcHV0X2lub2RlKCkgY2FzZSwKKwlidXQgZG9lcyBub3QgaGF2ZSB0aGUgcmFjZXMgdGhhdCB0aGUgImZvcmNlX2RlbGV0ZSgpIiBhcHByb2FjaAorCWhhZC4gCisKKyAgZGVsZXRlX2lub2RlOiBjYWxsZWQgd2hlbiB0aGUgVkZTIHdhbnRzIHRvIGRlbGV0ZSBhbiBpbm9kZQorCisgIG5vdGlmeV9jaGFuZ2U6IGNhbGxlZCB3aGVuIFZGUyBpbm9kZSBhdHRyaWJ1dGVzIGFyZSBjaGFuZ2VkLiBJZiB0aGlzCisJaXMgTlVMTCB0aGUgVkZTIGZhbGxzIGJhY2sgdG8gdGhlIHdyaXRlX2lub2RlKCkgbWV0aG9kLiBUaGlzCisJaXMgY2FsbGVkIHdpdGggdGhlIGtlcm5lbCBsb2NrIGhlbGQKKworICBwdXRfc3VwZXI6IGNhbGxlZCB3aGVuIHRoZSBWRlMgd2lzaGVzIHRvIGZyZWUgdGhlIHN1cGVyYmxvY2sKKwkoaS5lLiB1bm1vdW50KS4gVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgc3VwZXJibG9jayBsb2NrIGhlbGQKKworICB3cml0ZV9zdXBlcjogY2FsbGVkIHdoZW4gdGhlIFZGUyBzdXBlcmJsb2NrIG5lZWRzIHRvIGJlIHdyaXR0ZW4gdG8KKwlkaXNjLiBUaGlzIG1ldGhvZCBpcyBvcHRpb25hbAorCisgIHN0YXRmczogY2FsbGVkIHdoZW4gdGhlIFZGUyBuZWVkcyB0byBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzLiBUaGlzCisJaXMgY2FsbGVkIHdpdGggdGhlIGtlcm5lbCBsb2NrIGhlbGQKKworICByZW1vdW50X2ZzOiBjYWxsZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyByZW1vdW50ZWQuIFRoaXMgaXMgY2FsbGVkCisJd2l0aCB0aGUga2VybmVsIGxvY2sgaGVsZAorCisgIGNsZWFyX2lub2RlOiBjYWxsZWQgdGhlbiB0aGUgVkZTIGNsZWFycyB0aGUgaW5vZGUuIE9wdGlvbmFsCisKK1RoZSByZWFkX2lub2RlKCkgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIGluIHRoZSAiaV9vcCIKK2ZpZWxkLiBUaGlzIGlzIGEgcG9pbnRlciB0byBhICJzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyIgd2hpY2gKK2Rlc2NyaWJlcyB0aGUgbWV0aG9kcyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gaW5kaXZpZHVhbCBpbm9kZXMuCisKKworc3RydWN0IGlub2RlX29wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uPgorPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXNjcmliZXMgaG93IHRoZSBWRlMgY2FuIG1hbmlwdWxhdGUgYW4gaW5vZGUgaW4geW91cgorZmlsZXN5c3RlbS4gQXMgb2Yga2VybmVsIDIuMS45OSwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgorCitzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGRlZmF1bHRfZmlsZV9vcHM7CisJaW50ICgqY3JlYXRlKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCk7CisJaW50ICgqbG9va3VwKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpsaW5rKSAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqdW5saW5rKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpzeW1saW5rKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGNvbnN0IGNoYXIgKik7CisJaW50ICgqbWtkaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50KTsKKwlpbnQgKCpybWRpcikgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqbWtub2QpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50LGRldl90KTsKKwlpbnQgKCpyZW5hbWUpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLAorCQkJc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqcmVhZGxpbmspIChzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKixpbnQpOworCXN0cnVjdCBkZW50cnkgKiAoKmZvbGxvd19saW5rKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKnJlYWRwYWdlKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKik7CisJaW50ICgqd3JpdGVwYWdlKSAoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKKwlpbnQgKCpibWFwKSAoc3RydWN0IGlub2RlICosaW50KTsKKwl2b2lkICgqdHJ1bmNhdGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJaW50ICgqcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworCWludCAoKnNtYXApIChzdHJ1Y3QgaW5vZGUgKixpbnQpOworCWludCAoKnVwZGF0ZXBhZ2UpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCBjb25zdCBjaGFyICosCisJCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LCBpbnQpOworCWludCAoKnJldmFsaWRhdGUpIChzdHJ1Y3QgZGVudHJ5ICopOworfTsKKworQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzCitvdGhlcndpc2Ugbm90ZWQuCisKKyAgZGVmYXVsdF9maWxlX29wczogdGhpcyBpcyBhIHBvaW50ZXIgdG8gYSAic3RydWN0IGZpbGVfb3BlcmF0aW9ucyIKKwl3aGljaCBkZXNjcmliZXMgaG93IHRvIG9wZW4gYW5kIHRoZW4gbWFuaXB1bGF0ZSBvcGVuIGZpbGVzCisKKyAgY3JlYXRlOiBjYWxsZWQgYnkgdGhlIG9wZW4oMikgYW5kIGNyZWF0KDIpIHN5c3RlbSBjYWxscy4gT25seQorCXJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgcmVndWxhciBmaWxlcy4gVGhlIGRlbnRyeSB5b3UKKwlnZXQgc2hvdWxkIG5vdCBoYXZlIGFuIGlub2RlIChpLmUuIGl0IHNob3VsZCBiZSBhIG5lZ2F0aXZlCisJZGVudHJ5KS4gSGVyZSB5b3Ugd2lsbCBwcm9iYWJseSBjYWxsIGRfaW5zdGFudGlhdGUoKSB3aXRoIHRoZQorCWRlbnRyeSBhbmQgdGhlIG5ld2x5IGNyZWF0ZWQgaW5vZGUKKworICBsb29rdXA6IGNhbGxlZCB3aGVuIHRoZSBWRlMgbmVlZHMgdG8gbG9vayB1cCBhbiBpbm9kZSBpbiBhIHBhcmVudAorCWRpcmVjdG9yeS4gVGhlIG5hbWUgdG8gbG9vayBmb3IgaXMgZm91bmQgaW4gdGhlIGRlbnRyeS4gVGhpcworCW1ldGhvZCBtdXN0IGNhbGwgZF9hZGQoKSB0byBpbnNlcnQgdGhlIGZvdW5kIGlub2RlIGludG8gdGhlCisJZGVudHJ5LiBUaGUgImlfY291bnQiIGZpZWxkIGluIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlCisJaW5jcmVtZW50ZWQuIElmIHRoZSBuYW1lZCBpbm9kZSBkb2VzIG5vdCBleGlzdCBhIE5VTEwgaW5vZGUKKwlzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgZGVudHJ5ICh0aGlzIGlzIGNhbGxlZCBhIG5lZ2F0aXZlCisJZGVudHJ5KS4gUmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgZnJvbSB0aGlzIHJvdXRpbmUgbXVzdCBvbmx5CisJYmUgZG9uZSBvbiBhIHJlYWwgZXJyb3IsIG90aGVyd2lzZSBjcmVhdGluZyBpbm9kZXMgd2l0aCBzeXN0ZW0KKwljYWxscyBsaWtlIGNyZWF0ZSgyKSwgbWtub2QoMiksIG1rZGlyKDIpIGFuZCBzbyBvbiB3aWxsIGZhaWwuCisJSWYgeW91IHdpc2ggdG8gb3ZlcmxvYWQgdGhlIGRlbnRyeSBtZXRob2RzIHRoZW4geW91IHNob3VsZAorCWluaXRpYWxpc2UgdGhlICJkX2RvcCIgZmllbGQgaW4gdGhlIGRlbnRyeTsgdGhpcyBpcyBhIHBvaW50ZXIKKwl0byBhIHN0cnVjdCAiZGVudHJ5X29wZXJhdGlvbnMiLgorCVRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIHRoZSBkaXJlY3RvcnkgaW5vZGUgc2VtYXBob3JlIGhlbGQKKworICBsaW5rOiBjYWxsZWQgYnkgdGhlIGxpbmsoMikgc3lzdGVtIGNhbGwuIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnQKKwl0byBzdXBwb3J0IGhhcmQgbGlua3MuIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gY2FsbAorCWRfaW5zdGFudGlhdGUoKSBqdXN0IGFzIHlvdSB3b3VsZCBpbiB0aGUgY3JlYXRlKCkgbWV0aG9kCisKKyAgdW5saW5rOiBjYWxsZWQgYnkgdGhlIHVubGluaygyKSBzeXN0ZW0gY2FsbC4gT25seSByZXF1aXJlZCBpZiB5b3UKKwl3YW50IHRvIHN1cHBvcnQgZGVsZXRpbmcgaW5vZGVzCisKKyAgc3ltbGluazogY2FsbGVkIGJ5IHRoZSBzeW1saW5rKDIpIHN5c3RlbSBjYWxsLiBPbmx5IHJlcXVpcmVkIGlmIHlvdQorCXdhbnQgdG8gc3VwcG9ydCBzeW1saW5rcy4gWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBjYWxsCisJZF9pbnN0YW50aWF0ZSgpIGp1c3QgYXMgeW91IHdvdWxkIGluIHRoZSBjcmVhdGUoKSBtZXRob2QKKworICBta2RpcjogY2FsbGVkIGJ5IHRoZSBta2RpcigyKSBzeXN0ZW0gY2FsbC4gT25seSByZXF1aXJlZCBpZiB5b3Ugd2FudAorCXRvIHN1cHBvcnQgY3JlYXRpbmcgc3ViZGlyZWN0b3JpZXMuIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8KKwljYWxsIGRfaW5zdGFudGlhdGUoKSBqdXN0IGFzIHlvdSB3b3VsZCBpbiB0aGUgY3JlYXRlKCkgbWV0aG9kCisKKyAgcm1kaXI6IGNhbGxlZCBieSB0aGUgcm1kaXIoMikgc3lzdGVtIGNhbGwuIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnQKKwl0byBzdXBwb3J0IGRlbGV0aW5nIHN1YmRpcmVjdG9yaWVzCisKKyAgbWtub2Q6IGNhbGxlZCBieSB0aGUgbWtub2QoMikgc3lzdGVtIGNhbGwgdG8gY3JlYXRlIGEgZGV2aWNlIChjaGFyLAorCWJsb2NrKSBpbm9kZSBvciBhIG5hbWVkIHBpcGUgKEZJRk8pIG9yIHNvY2tldC4gT25seSByZXF1aXJlZAorCWlmIHlvdSB3YW50IHRvIHN1cHBvcnQgY3JlYXRpbmcgdGhlc2UgdHlwZXMgb2YgaW5vZGVzLiBZb3UKKwl3aWxsIHByb2JhYmx5IG5lZWQgdG8gY2FsbCBkX2luc3RhbnRpYXRlKCkganVzdCBhcyB5b3Ugd291bGQKKwlpbiB0aGUgY3JlYXRlKCkgbWV0aG9kCisKKyAgcmVhZGxpbms6IGNhbGxlZCBieSB0aGUgcmVhZGxpbmsoMikgc3lzdGVtIGNhbGwuIE9ubHkgcmVxdWlyZWQgaWYKKwl5b3Ugd2FudCB0byBzdXBwb3J0IHJlYWRpbmcgc3ltYm9saWMgbGlua3MKKworICBmb2xsb3dfbGluazogY2FsbGVkIGJ5IHRoZSBWRlMgdG8gZm9sbG93IGEgc3ltYm9saWMgbGluayB0byB0aGUKKwlpbm9kZSBpdCBwb2ludHMgdG8uIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc3VwcG9ydAorCXN5bWJvbGljIGxpbmtzCisKKworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uPgorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaWJlcyBob3cgdGhlIFZGUyBjYW4gbWFuaXB1bGF0ZSBhbiBvcGVuIGZpbGUuIEFzIG9mIGtlcm5lbAorMi4xLjk5LCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIGRlZmluZWQ6CisKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgeworCWxvZmZfdCAoKmxsc2VlaykgKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKKwlzc2l6ZV90ICgqcmVhZCkgKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CisJc3NpemVfdCAoKndyaXRlKSAoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKKwlpbnQgKCpyZWFkZGlyKSAoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QpOworCXVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CisJaW50ICgqaW9jdGwpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCptbWFwKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCWludCAoKm9wZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisJaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqZmFzeW5jKSAoc3RydWN0IGZpbGUgKiwgaW50KTsKKwlpbnQgKCpjaGVja19tZWRpYV9jaGFuZ2UpIChrZGV2X3QgZGV2KTsKKwlpbnQgKCpyZXZhbGlkYXRlKSAoa2Rldl90IGRldik7CisJaW50ICgqbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKK307CisKK0FnYWluLCBhbGwgbWV0aG9kcyBhcmUgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzIGJlaW5nIGhlbGQsIHVubGVzcworb3RoZXJ3aXNlIG5vdGVkLgorCisgIGxsc2VlazogY2FsbGVkIHdoZW4gdGhlIFZGUyBuZWVkcyB0byBtb3ZlIHRoZSBmaWxlIHBvc2l0aW9uIGluZGV4CisKKyAgcmVhZDogY2FsbGVkIGJ5IHJlYWQoMikgYW5kIHJlbGF0ZWQgc3lzdGVtIGNhbGxzCisKKyAgd3JpdGU6IGNhbGxlZCBieSB3cml0ZSgyKSBhbmQgcmVsYXRlZCBzeXN0ZW0gY2FsbHMKKworICByZWFkZGlyOiBjYWxsZWQgd2hlbiB0aGUgVkZTIG5lZWRzIHRvIHJlYWQgdGhlIGRpcmVjdG9yeSBjb250ZW50cworCisgIHBvbGw6IGNhbGxlZCBieSB0aGUgVkZTIHdoZW4gYSBwcm9jZXNzIHdhbnRzIHRvIGNoZWNrIGlmIHRoZXJlIGlzCisJYWN0aXZpdHkgb24gdGhpcyBmaWxlIGFuZCAob3B0aW9uYWxseSkgZ28gdG8gc2xlZXAgdW50aWwgdGhlcmUKKwlpcyBhY3Rpdml0eS4gQ2FsbGVkIGJ5IHRoZSBzZWxlY3QoMikgYW5kIHBvbGwoMikgc3lzdGVtIGNhbGxzCisKKyAgaW9jdGw6IGNhbGxlZCBieSB0aGUgaW9jdGwoMikgc3lzdGVtIGNhbGwKKworICBtbWFwOiBjYWxsZWQgYnkgdGhlIG1tYXAoMikgc3lzdGVtIGNhbGwKKworICBvcGVuOiBjYWxsZWQgYnkgdGhlIFZGUyB3aGVuIGFuIGlub2RlIHNob3VsZCBiZSBvcGVuZWQuIFdoZW4gdGhlIFZGUworCW9wZW5zIGEgZmlsZSwgaXQgY3JlYXRlcyBhIG5ldyAic3RydWN0IGZpbGUiIGFuZCBpbml0aWFsaXNlcworCXRoZSAiZl9vcCIgZmlsZSBvcGVyYXRpb25zIG1lbWJlciB3aXRoIHRoZSAiZGVmYXVsdF9maWxlX29wcyIKKwlmaWVsZCBpbiB0aGUgaW5vZGUgc3RydWN0dXJlLiBJdCB0aGVuIGNhbGxzIHRoZSBvcGVuIG1ldGhvZAorCWZvciB0aGUgbmV3bHkgYWxsb2NhdGVkIGZpbGUgc3RydWN0dXJlLiBZb3UgbWlnaHQgdGhpbmsgdGhhdAorCXRoZSBvcGVuIG1ldGhvZCByZWFsbHkgYmVsb25ncyBpbiAic3RydWN0IGlub2RlX29wZXJhdGlvbnMiLAorCWFuZCB5b3UgbWF5IGJlIHJpZ2h0LiBJIHRoaW5rIGl0J3MgZG9uZSB0aGUgd2F5IGl0IGlzIGJlY2F1c2UKKwlpdCBtYWtlcyBmaWxlc3lzdGVtcyBzaW1wbGVyIHRvIGltcGxlbWVudC4gVGhlIG9wZW4oKSBtZXRob2QKKwlpcyBhIGdvb2QgcGxhY2UgdG8gaW5pdGlhbGlzZSB0aGUgInByaXZhdGVfZGF0YSIgbWVtYmVyIGluIHRoZQorCWZpbGUgc3RydWN0dXJlIGlmIHlvdSB3YW50IHRvIHBvaW50IHRvIGEgZGV2aWNlIHN0cnVjdHVyZQorCisgIHJlbGVhc2U6IGNhbGxlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBhbiBvcGVuIGZpbGUgaXMgY2xvc2VkCisKKyAgZnN5bmM6IGNhbGxlZCBieSB0aGUgZnN5bmMoMikgc3lzdGVtIGNhbGwKKworICBmYXN5bmM6IGNhbGxlZCBieSB0aGUgZmNudGwoMikgc3lzdGVtIGNhbGwgd2hlbiBhc3luY2hyb25vdXMKKwkobm9uLWJsb2NraW5nKSBtb2RlIGlzIGVuYWJsZWQgZm9yIGEgZmlsZQorCitOb3RlIHRoYXQgdGhlIGZpbGUgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIHNwZWNpZmljCitmaWxlc3lzdGVtIGluIHdoaWNoIHRoZSBpbm9kZSByZXNpZGVzLiBXaGVuIG9wZW5pbmcgYSBkZXZpY2Ugbm9kZQorKGNoYXJhY3RlciBvciBibG9jayBzcGVjaWFsKSBtb3N0IGZpbGVzeXN0ZW1zIHdpbGwgY2FsbCBzcGVjaWFsCitzdXBwb3J0IHJvdXRpbmVzIGluIHRoZSBWRlMgd2hpY2ggd2lsbCBsb2NhdGUgdGhlIHJlcXVpcmVkIGRldmljZQorZHJpdmVyIGluZm9ybWF0aW9uLiBUaGVzZSBzdXBwb3J0IHJvdXRpbmVzIHJlcGxhY2UgdGhlIGZpbGVzeXN0ZW0gZmlsZQorb3BlcmF0aW9ucyB3aXRoIHRob3NlIGZvciB0aGUgZGV2aWNlIGRyaXZlciwgYW5kIHRoZW4gcHJvY2VlZCB0byBjYWxsCit0aGUgbmV3IG9wZW4oKSBtZXRob2QgZm9yIHRoZSBmaWxlLiBUaGlzIGlzIGhvdyBvcGVuaW5nIGEgZGV2aWNlIGZpbGUKK2luIHRoZSBmaWxlc3lzdGVtIGV2ZW50dWFsbHkgZW5kcyB1cCBjYWxsaW5nIHRoZSBkZXZpY2UgZHJpdmVyIG9wZW4oKQorbWV0aG9kLiBOb3RlIHRoZSBkZXZmcyAodGhlIERldmljZSBGaWxlU3lzdGVtKSBoYXMgYSBtb3JlIGRpcmVjdCBwYXRoCitmcm9tIGRldmljZSBub2RlIHRvIGRldmljZSBkcml2ZXIgKHRoaXMgaXMgYW4gdW5vZmZpY2lhbCBrZXJuZWwKK3BhdGNoKS4KKworCitEaXJlY3RvcnkgRW50cnkgQ2FjaGUgKGRjYWNoZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXNjcmliZXMgaG93IGEgZmlsZXN5c3RlbSBjYW4gb3ZlcmxvYWQgdGhlIHN0YW5kYXJkIGRlbnRyeQorb3BlcmF0aW9ucy4gRGVudHJpZXMgYW5kIHRoZSBkY2FjaGUgYXJlIHRoZSBkb21haW4gb2YgdGhlIFZGUyBhbmQgdGhlCitpbmRpdmlkdWFsIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLiBEZXZpY2UgZHJpdmVycyBoYXZlIG5vIGJ1c2luZXNzCitoZXJlLiBUaGVzZSBtZXRob2RzIG1heSBiZSBzZXQgdG8gTlVMTCwgYXMgdGhleSBhcmUgZWl0aGVyIG9wdGlvbmFsIG9yCit0aGUgVkZTIHVzZXMgYSBkZWZhdWx0LiBBcyBvZiBrZXJuZWwgMi4xLjk5LCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlCitkZWZpbmVkOgorCitzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgeworCWludCAoKmRfcmV2YWxpZGF0ZSkoc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpkX2hhc2gpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOworCWludCAoKmRfY29tcGFyZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKik7CisJdm9pZCAoKmRfZGVsZXRlKShzdHJ1Y3QgZGVudHJ5ICopOworCXZvaWQgKCpkX3JlbGVhc2UpKHN0cnVjdCBkZW50cnkgKik7CisJdm9pZCAoKmRfaXB1dCkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7Cit9OworCisgIGRfcmV2YWxpZGF0ZTogY2FsbGVkIHdoZW4gdGhlIFZGUyBuZWVkcyB0byByZXZhbGlkYXRlIGEgZGVudHJ5LiBUaGlzCisJaXMgY2FsbGVkIHdoZW5ldmVyIGEgbmFtZSBsb29rLXVwIGZpbmRzIGEgZGVudHJ5IGluIHRoZQorCWRjYWNoZS4gTW9zdCBmaWxlc3lzdGVtcyBsZWF2ZSB0aGlzIGFzIE5VTEwsIGJlY2F1c2UgYWxsIHRoZWlyCisJZGVudHJpZXMgaW4gdGhlIGRjYWNoZSBhcmUgdmFsaWQKKworICBkX2hhc2g6IGNhbGxlZCB3aGVuIHRoZSBWRlMgYWRkcyBhIGRlbnRyeSB0byB0aGUgaGFzaCB0YWJsZQorCisgIGRfY29tcGFyZTogY2FsbGVkIHdoZW4gYSBkZW50cnkgc2hvdWxkIGJlIGNvbXBhcmVkIHdpdGggYW5vdGhlcgorCisgIGRfZGVsZXRlOiBjYWxsZWQgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYSBkZW50cnkgaXMKKwlkZWxldGVkLiBUaGlzIG1lYW5zIG5vLW9uZSBpcyB1c2luZyB0aGUgZGVudHJ5LCBob3dldmVyIGl0IGlzCisJc3RpbGwgdmFsaWQgYW5kIGluIHRoZSBkY2FjaGUKKworICBkX3JlbGVhc2U6IGNhbGxlZCB3aGVuIGEgZGVudHJ5IGlzIHJlYWxseSBkZWFsbG9jYXRlZAorCisgIGRfaXB1dDogY2FsbGVkIHdoZW4gYSBkZW50cnkgbG9zZXMgaXRzIGlub2RlIChqdXN0IHByaW9yIHRvIGl0cworCWJlaW5nIGRlYWxsb2NhdGVkKS4gVGhlIGRlZmF1bHQgd2hlbiB0aGlzIGlzIE5VTEwgaXMgdGhhdCB0aGUKKwlWRlMgY2FsbHMgaXB1dCgpLiBJZiB5b3UgZGVmaW5lIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBjYWxsCisJaXB1dCgpIHlvdXJzZWxmCisKK0VhY2ggZGVudHJ5IGhhcyBhIHBvaW50ZXIgdG8gaXRzIHBhcmVudCBkZW50cnksIGFzIHdlbGwgYXMgYSBoYXNoIGxpc3QKK29mIGNoaWxkIGRlbnRyaWVzLiBDaGlsZCBkZW50cmllcyBhcmUgYmFzaWNhbGx5IGxpa2UgZmlsZXMgaW4gYQorZGlyZWN0b3J5LgorCitEaXJlY3RvcnkgRW50cnkgQ2FjaGUgQVBJcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIHdoaWNoIHBlcm1pdCBhIGZpbGVzeXN0ZW0gdG8KK21hbmlwdWxhdGUgZGVudHJpZXM6CisKKyAgZGdldDogb3BlbiBhIG5ldyBoYW5kbGUgZm9yIGFuIGV4aXN0aW5nIGRlbnRyeSAodGhpcyBqdXN0IGluY3JlbWVudHMKKwl0aGUgdXNhZ2UgY291bnQpCisKKyAgZHB1dDogY2xvc2UgYSBoYW5kbGUgZm9yIGEgZGVudHJ5IChkZWNyZW1lbnRzIHRoZSB1c2FnZSBjb3VudCkuIElmCisJdGhlIHVzYWdlIGNvdW50IGRyb3BzIHRvIDAsIHRoZSAiZF9kZWxldGUiIG1ldGhvZCBpcyBjYWxsZWQKKwlhbmQgdGhlIGRlbnRyeSBpcyBwbGFjZWQgb24gdGhlIHVudXNlZCBsaXN0IGlmIHRoZSBkZW50cnkgaXMKKwlzdGlsbCBpbiBpdHMgcGFyZW50cyBoYXNoIGxpc3QuIFB1dHRpbmcgdGhlIGRlbnRyeSBvbiB0aGUKKwl1bnVzZWQgbGlzdCBqdXN0IG1lYW5zIHRoYXQgaWYgdGhlIHN5c3RlbSBuZWVkcyBzb21lIFJBTSwgaXQKKwlnb2VzIHRocm91Z2ggdGhlIHVudXNlZCBsaXN0IG9mIGRlbnRyaWVzIGFuZCBkZWFsbG9jYXRlcyB0aGVtLgorCUlmIHRoZSBkZW50cnkgaGFzIGFscmVhZHkgYmVlbiB1bmhhc2hlZCBhbmQgdGhlIHVzYWdlIGNvdW50CisJZHJvcHMgdG8gMCwgaW4gdGhpcyBjYXNlIHRoZSBkZW50cnkgaXMgZGVhbGxvY2F0ZWQgYWZ0ZXIgdGhlCisJImRfZGVsZXRlIiBtZXRob2QgaXMgY2FsbGVkCisKKyAgZF9kcm9wOiB0aGlzIHVuaGFzaGVzIGEgZGVudHJ5IGZyb20gaXRzIHBhcmVudHMgaGFzaCBsaXN0LiBBCisJc3Vic2VxdWVudCBjYWxsIHRvIGRwdXQoKSB3aWxsIGRlbGxvY2F0ZSB0aGUgZGVudHJ5IGlmIGl0cworCXVzYWdlIGNvdW50IGRyb3BzIHRvIDAKKworICBkX2RlbGV0ZTogZGVsZXRlIGEgZGVudHJ5LiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgb3BlbiByZWZlcmVuY2VzIHRvCisJdGhlIGRlbnRyeSB0aGVuIHRoZSBkZW50cnkgaXMgdHVybmVkIGludG8gYSBuZWdhdGl2ZSBkZW50cnkKKwkodGhlIGRfaXB1dCgpIG1ldGhvZCBpcyBjYWxsZWQpLiBJZiB0aGVyZSBhcmUgb3RoZXIKKwlyZWZlcmVuY2VzLCB0aGVuIGRfZHJvcCgpIGlzIGNhbGxlZCBpbnN0ZWFkCisKKyAgZF9hZGQ6IGFkZCBhIGRlbnRyeSB0byBpdHMgcGFyZW50cyBoYXNoIGxpc3QgYW5kIHRoZW4gY2FsbHMKKwlkX2luc3RhbnRpYXRlKCkKKworICBkX2luc3RhbnRpYXRlOiBhZGQgYSBkZW50cnkgdG8gdGhlIGFsaWFzIGhhc2ggbGlzdCBmb3IgdGhlIGlub2RlIGFuZAorCXVwZGF0ZXMgdGhlICJkX2lub2RlIiBtZW1iZXIuIFRoZSAiaV9jb3VudCIgbWVtYmVyIGluIHRoZQorCWlub2RlIHN0cnVjdHVyZSBzaG91bGQgYmUgc2V0L2luY3JlbWVudGVkLiBJZiB0aGUgaW5vZGUKKwlwb2ludGVyIGlzIE5VTEwsIHRoZSBkZW50cnkgaXMgY2FsbGVkIGEgIm5lZ2F0aXZlCisJZGVudHJ5Ii4gVGhpcyBmdW5jdGlvbiBpcyBjb21tb25seSBjYWxsZWQgd2hlbiBhbiBpbm9kZSBpcworCWNyZWF0ZWQgZm9yIGFuIGV4aXN0aW5nIG5lZ2F0aXZlIGRlbnRyeQorCisgIGRfbG9va3VwOiBsb29rIHVwIGEgZGVudHJ5IGdpdmVuIGl0cyBwYXJlbnQgYW5kIHBhdGggbmFtZSBjb21wb25lbnQKKwlJdCBsb29rcyB1cCB0aGUgY2hpbGQgb2YgdGhhdCBnaXZlbiBuYW1lIGZyb20gdGhlIGRjYWNoZQorCWhhc2ggdGFibGUuIElmIGl0IGlzIGZvdW5kLCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGluY3JlbWVudGVkCisJYW5kIHRoZSBkZW50cnkgaXMgcmV0dXJuZWQuIFRoZSBjYWxsZXIgbXVzdCB1c2UgZF9wdXQoKQorCXRvIGZyZWUgdGhlIGRlbnRyeSB3aGVuIGl0IGZpbmlzaGVzIHVzaW5nIGl0LgorCisKK1JDVS1iYXNlZCBkY2FjaGUgbG9ja2luZyBtb2RlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIG1hbnkgd29ya2xvYWRzLCB0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9uIG9uIGRjYWNoZSBpcwordG8gbG9vayB1cCBhIGRlbnRyeSwgZ2l2ZW4gYSBwYXJlbnQgZGVudHJ5IGFuZCB0aGUgbmFtZQorb2YgdGhlIGNoaWxkLiBUeXBpY2FsbHksIGZvciBldmVyeSBvcGVuKCksIHN0YXQoKSBldGMuLAordGhlIGRlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXRobmFtZSB3aWxsIGJlIGxvb2tlZAordXAgYnkgd2Fsa2luZyB0aGUgdHJlZSBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBjb21wb25lbnQKK29mIHRoZSBwYXRobmFtZSBhbmQgdXNpbmcgdGhhdCBkZW50cnkgYWxvbmcgd2l0aCB0aGUgbmV4dAorY29tcG9uZW50IHRvIGxvb2sgdXAgdGhlIG5leHQgbGV2ZWwgYW5kIHNvIG9uLiBTaW5jZSBpdAoraXMgYSBmcmVxdWVudCBvcGVyYXRpb24gZm9yIHdvcmtsb2FkcyBsaWtlIG11bHRpdXNlcgorZW52aXJvbm1lbnRzIGFuZCB3ZWJzZXJ2ZXJzLCBpdCBpcyBpbXBvcnRhbnQgdG8gb3B0aW1pemUKK3RoaXMgcGF0aC4KKworUHJpb3IgdG8gMi41LjEwLCBkY2FjaGVfbG9jayB3YXMgYWNxdWlyZWQgaW4gZF9sb29rdXAgYW5kIHRodXMKK2luIGV2ZXJ5IGNvbXBvbmVudCBkdXJpbmcgcGF0aCBsb29rLXVwLiBTaW5jZSAyLjUuMTAgb253YXJkcywKK2Zhc3R3YWxrIGFsZ29yaXRobSBjaGFuZ2VkIHRoaXMgYnkgaG9sZGluZyB0aGUgZGNhY2hlX2xvY2sKK2F0IHRoZSBiZWdpbm5pbmcgYW5kIHdhbGtpbmcgYXMgbWFueSBjYWNoZWQgcGF0aCBjb21wb25lbnQKK2RlbnRyaWVzIGFzIHBvc3NpYmxlLiBUaGlzIHNpZ25maWNhbnRseSBkZWNyZWFzZXMgdGhlIG51bWJlcgorb2YgYWNxdWlzaXRpb24gb2YgZGNhY2hlX2xvY2suIEhvd2V2ZXIgaXQgYWxzbyBpbmNyZWFzZXMgdGhlCitsb2NrIGhvbGQgdGltZSBzaWduZmljYW50bHkgYW5kIGFmZmVjdHMgcGVyZm9ybWFuY2UgaW4gbGFyZ2UKK1NNUCBtYWNoaW5lcy4gU2luY2UgMi41LjYyIGtlcm5lbCwgZGNhY2hlIGhhcyBiZWVuIHVzaW5nCithIG5ldyBsb2NraW5nIG1vZGVsIHRoYXQgdXNlcyBSQ1UgdG8gbWFrZSBkY2FjaGUgbG9vay11cAorbG9jay1mcmVlLgorCitUaGUgY3VycmVudCBkY2FjaGUgbG9ja2luZyBtb2RlbCBpcyBub3QgdmVyeSBkaWZmZXJlbnQgZnJvbSB0aGUgZXhpc3RpbmcKK2RjYWNoZSBsb2NraW5nIG1vZGVsLiBQcmlvciB0byAyLjUuNjIga2VybmVsLCBkY2FjaGVfbG9jaworcHJvdGVjdGVkIHRoZSBoYXNoIGNoYWluLCBkX2NoaWxkLCBkX2FsaWFzLCBkX2xydSBsaXN0cyBhcyB3ZWxsCithcyBkX2lub2RlIGFuZCBzZXZlcmFsIG90aGVyIHRoaW5ncyBsaWtlIG1vdW50IGxvb2stdXAuIFJDVS1iYXNlZAorY2hhbmdlcyBhZmZlY3Qgb25seSB0aGUgd2F5IHRoZSBoYXNoIGNoYWluIGlzIHByb3RlY3RlZC4gRm9yIGV2ZXJ5dGhpbmcKK2Vsc2UgdGhlIGRjYWNoZV9sb2NrIG11c3QgYmUgdGFrZW4gZm9yIGJvdGggdHJhdmVyc2luZyBhcyB3ZWxsIGFzCit1cGRhdGluZy4gVGhlIGhhc2ggY2hhaW4gdXBkYXRpb25zIHRvbyB0YWtlIHRoZSBkY2FjaGVfbG9jay4KK1RoZSBzaWduaWZpY2FudCBjaGFuZ2UgaXMgdGhlIHdheSBkX2xvb2t1cCB0cmF2ZXJzZXMgdGhlIGhhc2ggY2hhaW4sCitpdCBkb2Vzbid0IGFjcXVpcmUgdGhlIGRjYWNoZV9sb2NrIGZvciB0aGlzIGFuZCByZWx5IG9uIFJDVSB0bworZW5zdXJlIHRoYXQgdGhlIGRlbnRyeSBoYXMgbm90IGJlZW4gKmZyZWVkKi4KKworCitEY2FjaGUgbG9ja2luZyBkZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGb3IgbWFueSBtdWx0aS11c2VyIHdvcmtsb2Fkcywgb3BlbigpIGFuZCBzdGF0KCkgb24gZmlsZXMgYXJlCit2ZXJ5IGZyZXF1ZW50bHkgb2NjdXJyaW5nIG9wZXJhdGlvbnMuIEJvdGggaW52b2x2ZSB3YWxraW5nCitvZiBwYXRoIG5hbWVzIHRvIGZpbmQgdGhlIGRlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZQorY29uY2VybmVkIGZpbGUuIEluIDIuNCBrZXJuZWwsIGRjYWNoZV9sb2NrIHdhcyBoZWxkCitkdXJpbmcgbG9vay11cCBvZiBlYWNoIHBhdGggY29tcG9uZW50LiBDb250ZW50aW9uIGFuZAorY2FjaGVsaW5lIGJvdW5jaW5nIG9mIHRoaXMgZ2xvYmFsIGxvY2sgY2F1c2VkIHNpZ25pZmljYW50CitzY2FsYWJpbGl0eSBwcm9ibGVtcy4gV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIFJDVQoraW4gbGludXgga2VybmVsLCB0aGlzIHdhcyB3b3JrZWQgYXJvdW5kIGJ5IG1ha2luZwordGhlIGxvb2stdXAgb2YgcGF0aCBjb21wb25lbnRzIGR1cmluZyBwYXRoIHdhbGtpbmcgbG9jay1mcmVlLgorCisKK1NhZmUgbG9jay1mcmVlIGxvb2stdXAgb2YgZGNhY2hlIGhhc2ggdGFibGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRGNhY2hlIGlzIGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZSB3aXRoIHRoZSBoYXNoIHRhYmxlIGVudHJpZXMKK2Fsc28gbGlua2VkIHRvZ2V0aGVyIGluIG90aGVyIGxpc3RzLiBJbiAyLjQga2VybmVsLCBkY2FjaGVfbG9jaworcHJvdGVjdGVkIGFsbCB0aGUgbGlzdHMuIFdlIGFwcGxpZWQgUkNVIG9ubHkgb24gaGFzaCBjaGFpbgord2Fsa2luZy4gVGhlIHJlc3Qgb2YgdGhlIGxpc3RzIGFyZSBzdGlsbCBwcm90ZWN0ZWQgYnkgZGNhY2hlX2xvY2suCitTb21lIG9mIHRoZSBpbXBvcnRhbnQgY2hhbmdlcyBhcmUgOgorCisxLiBUaGUgZGVsZXRpb24gZnJvbSBoYXNoIGNoYWluIGlzIGRvbmUgdXNpbmcgaGxpc3RfZGVsX3JjdSgpIG1hY3JvIHdoaWNoCisgICBkb2Vzbid0IGluaXRpYWxpemUgbmV4dCBwb2ludGVyIG9mIHRoZSBkZWxldGVkIGRlbnRyeSBhbmQgdGhpcworICAgYWxsb3dzIHVzIHRvIHdhbGsgc2FmZWx5IGxvY2stZnJlZSB3aGlsZSBhIGRlbGV0aW9uIGlzIGhhcHBlbmluZy4KKworMi4gSW5zZXJ0aW9uIG9mIGEgZGVudHJ5IGludG8gdGhlIGhhc2ggdGFibGUgaXMgZG9uZSB1c2luZworICAgaGxpc3RfYWRkX2hlYWRfcmN1KCkgd2hpY2ggdGFrZSBjYXJlIG9mIG9yZGVyaW5nIHRoZSB3cml0ZXMgLQorICAgdGhlIHdyaXRlcyB0byB0aGUgZGVudHJ5IG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGRlbnRyeQorICAgaXMgaW5zZXJ0ZWQuIFRoaXMgd29ya3MgaW4gY29uanVjdGlvbiB3aXRoIGhsaXN0X2Zvcl9lYWNoX3JjdSgpCisgICB3aGlsZSB3YWxraW5nIHRoZSBoYXNoIGNoYWluLiBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0CisgICBhbGwgaW5pdGlhbGl6YXRpb24gdG8gdGhlIGRlbnRyeSBtdXN0IGJlIGRvbmUgYmVmb3JlIGhsaXN0X2FkZF9oZWFkX3JjdSgpCisgICBzaW5jZSB3ZSBkb24ndCBoYXZlIGRjYWNoZV9sb2NrIHByb3RlY3Rpb24gd2hpbGUgdHJhdmVyc2luZworICAgdGhlIGhhc2ggY2hhaW4uIFRoaXMgaXNuJ3QgZGlmZmVyZW50IGZyb20gdGhlIGV4aXN0aW5nIGNvZGUuCisKKzMuIFRoZSBkZW50cnkgbG9va2VkIHVwIHdpdGhvdXQgaG9sZGluZyBkY2FjaGVfbG9jayBieSBjYW5ub3QgYmUKKyAgIHJldHVybmVkIGZvciB3YWxraW5nIGlmIGl0IGlzIHVuaGFzaGVkLiBJdCB0aGVuIG1heSBoYXZlIGEgTlVMTAorICAgZF9pbm9kZSBvciBvdGhlciBib2dvc2l0eSBzaW5jZSBSQ1UgZG9lc24ndCBwcm90ZWN0IHRoZSBvdGhlcgorICAgZmllbGRzIGluIHRoZSBkZW50cnkuIFdlIHRoZXJlZm9yZSB1c2UgYSBmbGFnIERDQUNIRV9VTkhBU0hFRCB0bworICAgaW5kaWNhdGUgdW5oYXNoZWQgIGRlbnRyaWVzIGFuZCB1c2UgdGhpcyBpbiBjb25qdW5jdGlvbiB3aXRoIGEKKyAgIHBlci1kZW50cnkgbG9jayAoZF9sb2NrKS4gT25jZSBsb29rZWQgdXAgd2l0aG91dCB0aGUgZGNhY2hlX2xvY2ssCisgICB3ZSBhY3F1aXJlIHRoZSBwZXItZGVudHJ5IGxvY2sgKGRfbG9jaykgYW5kIGNoZWNrIGlmIHRoZQorICAgZGVudHJ5IGlzIHVuaGFzaGVkLiBJZiBzbywgdGhlIGxvb2stdXAgaXMgZmFpbGVkLiBJZiBub3QsIHRoZQorICAgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBkZW50cnkgaXMgaW5jcmVhc2VkIGFuZCB0aGUgZGVudHJ5IGlzIHJldHVybmVkLgorCis0LiBPbmNlIGEgZGVudHJ5IGlzIGxvb2tlZCB1cCwgaXQgbXVzdCBiZSBlbnN1cmVkIGR1cmluZyB0aGUgcGF0aAorICAgd2FsayBmb3IgdGhhdCBjb21wb25lbnQgaXQgZG9lc24ndCBnbyBhd2F5LiBJbiBwcmUtMi41LjEwIGNvZGUsCisgICB0aGlzIHdhcyBkb25lIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGRlbnRyeS4gZGNhY2hlX3JjdSBkb2VzCisgICB0aGUgc2FtZS4gIEluIHNvbWUgc2Vuc2UsIGRjYWNoZV9yY3UgcGF0aCB3YWxraW5nIGxvb2tzIGxpa2UKKyAgIHRoZSBwcmUtMi41LjEwIHZlcnNpb24uCisKKzUuIEFsbCBkZW50cnkgaGFzaCBjaGFpbiB1cGRhdGlvbnMgbXVzdCB0YWtlIHRoZSBkY2FjaGVfbG9jayBhcyB3ZWxsIGFzCisgICB0aGUgcGVyLWRlbnRyeSBsb2NrIGluIHRoYXQgb3JkZXIuIGRwdXQoKSBkb2VzIHRoaXMgdG8gZW5zdXJlCisgICB0aGF0IGEgZGVudHJ5IHRoYXQgaGFzIGp1c3QgYmVlbiBsb29rZWQgdXAgaW4gYW5vdGhlciBDUFUKKyAgIGRvZXNuJ3QgZ2V0IGRlbGV0ZWQgYmVmb3JlIGRnZXQoKSBjYW4gYmUgZG9uZSBvbiBpdC4KKworNi4gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkbyByZWZlcmVuY2UgY291bnRpbmcgb2YgUkNVIHByb3RlY3RlZAorICAgb2JqZWN0cy4gT25lIHN1Y2ggZXhhbXBsZSBpcyBpbiBpcHY0IHJvdXRlIGNhY2hlIHdoZXJlCisgICBkZWZlcnJlZCBmcmVlaW5nICh1c2luZyBjYWxsX3JjdSgpKSBpcyBkb25lIGFzIHNvb24gYXMKKyAgIHRoZSByZWZlcmVuY2UgY291bnQgZ29lcyB0byB6ZXJvLiBUaGlzIGNhbm5vdCBiZSBkb25lIGluCisgICB0aGUgY2FzZSBvZiBkZW50cmllcyBiZWNhdXNlIHRlYXJpbmcgZG93biBvZiBkZW50cmllcworICAgcmVxdWlyZSBibG9ja2luZyAoZGVudHJ5X2lwdXQoKSkgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkIGZyb20KKyAgIFJDVSBjYWxsYmFja3MuIEluc3RlYWQsIHRlYXJpbmcgZG93biBvZiBkZW50cmllcyBoYXBwZW4KKyAgIHN5bmNocm9ub3VzbHkgaW4gZHB1dCgpLCBidXQgYWN0dWFsIGZyZWVpbmcgaGFwcGVucyBsYXRlcgorICAgd2hlbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIG92ZXIuIFRoaXMgYWxsb3dzIHNhZmUgbG9jay1mcmVlCisgICB3YWxraW5nIG9mIHRoZSBoYXNoIGNoYWlucywgYnV0IGEgbWF0Y2hlZCBkZW50cnkgbWF5IGhhdmUKKyAgIGJlZW4gcGFydGlhbGx5IHRvcm4gZG93bi4gVGhlIGNoZWNraW5nIG9mIERDQUNIRV9VTkhBU0hFRAorICAgZmxhZyB3aXRoIGRfbG9jayBoZWxkIGRldGVjdHMgc3VjaCBkZW50cmllcyBhbmQgcHJldmVudHMKKyAgIHRoZW0gZnJvbSBiZWluZyByZXR1cm5lZCBmcm9tIGxvb2stdXAuCisKKworTWFpbnRhaW5pbmcgUE9TSVggcmVuYW1lIHNlbWFudGljcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTaW5jZSBsb29rLXVwIG9mIGRlbnRyaWVzIGlzIGxvY2stZnJlZSwgaXQgY2FuIHJhY2UgYWdhaW5zdAorYSBjb25jdXJyZW50IHJlbmFtZSBvcGVyYXRpb24uIEZvciBleGFtcGxlLCBkdXJpbmcgcmVuYW1lCitvZiBmaWxlIEEgdG8gQiwgbG9vay11cCBvZiBlaXRoZXIgQSBvciBCIG11c3Qgc3VjY2VlZC4KK1NvLCBpZiBsb29rLXVwIG9mIEIgaGFwcGVucyBhZnRlciBBIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKK2hhc2ggY2hhaW4gYnV0IG5vdCBhZGRlZCB0byB0aGUgbmV3IGhhc2ggY2hhaW4sIGl0IG1heSBmYWlsLgorQWxzbywgYSBjb21wYXJpc29uIHdoaWxlIHRoZSBuYW1lIGlzIGJlaW5nIHdyaXR0ZW4gY29uY3VycmVudGx5CitieSBhIHJlbmFtZSBtYXkgcmVzdWx0IGluIGZhbHNlIHBvc2l0aXZlIG1hdGNoZXMgdmlvbGF0aW5nCityZW5hbWUgc2VtYW50aWNzLiAgSXNzdWVzIHJlbGF0ZWQgdG8gcmFjZSB3aXRoIHJlbmFtZSBhcmUKK2hhbmRsZWQgYXMgZGVzY3JpYmVkIGJlbG93IDoKKworMS4gTG9vay11cCBjYW4gYmUgZG9uZSBpbiB0d28gd2F5cyAtIGRfbG9va3VwKCkgd2hpY2ggaXMgc2FmZQorICAgZnJvbSBzaW11bHRhbmVvdXMgcmVuYW1lcyBhbmQgX19kX2xvb2t1cCgpIHdoaWNoIGlzIG5vdC4KKyAgIElmIF9fZF9sb29rdXAoKSBmYWlscywgaXQgbXVzdCBiZSBmb2xsb3dlZCB1cCBieSBhIGRfbG9va3VwKCkKKyAgIHRvIGNvcnJlY3RseSBkZXRlcm1pbmUgd2hldGhlciBhIGRlbnRyeSBpcyBpbiB0aGUgaGFzaCB0YWJsZQorICAgb3Igbm90LiBkX2xvb2t1cCgpIHByb3RlY3RzIGxvb2stdXBzIHVzaW5nIGEgc2VxdWVuY2UKKyAgIGxvY2sgKHJlbmFtZV9sb2NrKS4KKworMi4gVGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIGEgZGVudHJ5IChkX25hbWUpIG1heSBiZSBjaGFuZ2VkIGlmCisgICBhIHJlbmFtZSBpcyBhbGxvd2VkIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseS4gVG8gYXZvaWQgbWVtY21wKCkKKyAgIGluIF9fZF9sb29rdXAoKSBnbyBvdXQgb2YgYm91bmRzIGR1ZSB0byBhIHJlbmFtZSBhbmQgZmFsc2UKKyAgIHBvc2l0aXZlIGNvbXBhcmlzb24sIHRoZSBuYW1lIGNvbXBhcmlzb24gaXMgZG9uZSB3aGlsZSBob2xkaW5nIHRoZQorICAgcGVyLWRlbnRyeSBsb2NrLiBUaGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgcmVuYW1lcyBkdXJpbmcgdGhpcworICAgb3BlcmF0aW9uLgorCiszLiBIYXNoIHRhYmxlIHdhbGtpbmcgZHVyaW5nIGxvb2stdXAgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgYnVja2V0IGFzCisgICB0aGUgY3VycmVudCBkZW50cnkgaXMgbW92ZWQgdG8gYSBkaWZmZXJlbnQgYnVja2V0IGR1ZSB0byByZW5hbWUuCisgICBCdXQgd2UgdXNlIGhsaXN0cyBpbiBkY2FjaGUgaGFzaCB0YWJsZSBhbmQgdGhleSBhcmUgbnVsbC10ZXJtaW5hdGVkLgorICAgU28sIGV2ZW4gaWYgYSBkZW50cnkgbW92ZXMgdG8gYSBkaWZmZXJlbnQgYnVja2V0LCBoYXNoIGNoYWluCisgICB3YWxrIHdpbGwgdGVybWluYXRlLiBbd2l0aCBhIGxpc3RfaGVhZCBsaXN0LCBpdCBtYXkgbm90IHNpbmNlCisgICB0ZXJtaW5hdGlvbiBpcyB3aGVuIHRoZSBsaXN0X2hlYWQgaW4gdGhlIG9yaWdpbmFsIGJ1Y2tldCBpcyByZWFjaGVkXS4KKyAgIFNpbmNlIHdlIHJlZG8gdGhlIGRfcGFyZW50IGNoZWNrIGFuZCBjb21wYXJlIG5hbWUgd2hpbGUgaG9sZGluZworICAgZF9sb2NrLCBsb2NrLWZyZWUgbG9vay11cCB3aWxsIG5vdCByYWNlIGFnYWluc3QgZF9tb3ZlKCkuCisKKzQuIFRoZXJlIGNhbiBiZSBhIHRoZW9yaXRpY2FsIHJhY2Ugd2hlbiBhIGRlbnRyeSBrZWVwcyBjb21pbmcgYmFjaworICAgdG8gb3JpZ2luYWwgYnVja2V0IGR1ZSB0byBkb3VibGUgbW92ZXMuIER1ZSB0byB0aGlzIGxvb2stdXAgbWF5CisgICBjb25zaWRlciB0aGF0IGl0IGhhcyBuZXZlciBtb3ZlZCBhbmQgY2FuIGVuZCB1cCBpbiBhIGluZmluaXRlIGxvb3AuCisgICBCdXQgdGhpcyBpcyBub3QgYW55IHdvcnNlIHRoYXQgdGhlb3JpdGljYWwgbGl2ZWxvY2tzIHdlIGFscmVhZHkKKyAgIGhhdmUgaW4gdGhlIGtlcm5lbC4KKworCitJbXBvcnRhbnQgZ3VpZGVsaW5lcyBmb3IgZmlsZXN5c3RlbSBkZXZlbG9wZXJzIHJlbGF0ZWQgdG8gZGNhY2hlX3JjdQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gRXhpc3RpbmcgZGNhY2hlIGludGVyZmFjZXMgKHByZS0yLjUuNjIpIGV4cG9ydGVkIHRvIGZpbGVzeXN0ZW0KKyAgIGRvbid0IGNoYW5nZS4gT25seSBkY2FjaGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gY2hhbmdlcy4gSG93ZXZlcgorICAgZmlsZXN5c3RlbXMgKm11c3Qgbm90KiBkZWxldGUgZnJvbSB0aGUgZGVudHJ5IGhhc2ggY2hhaW5zIGRpcmVjdGx5CisgICB1c2luZyB0aGUgbGlzdCBtYWNyb3MgbGlrZSBhbGxvd2VkIGVhcmxpZXIuIFRoZXkgbXVzdCB1c2UgZGNhY2hlCisgICBBUElzIGxpa2UgZF9kcm9wKCkgb3IgX19kX2Ryb3AoKSBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi4KKworMi4gZF9mbGFncyBpcyBub3cgcHJvdGVjdGVkIGJ5IGEgcGVyLWRlbnRyeSBsb2NrIChkX2xvY2spLiBBbGwKKyAgIGFjY2VzcyB0byBkX2ZsYWdzIG11c3QgYmUgcHJvdGVjdGVkIGJ5IGl0LgorCiszLiBGb3IgYSBoYXNoZWQgZGVudHJ5LCBjaGVja2luZyBvZiBkX2NvdW50IG5lZWRzIHRvIGJlIHByb3RlY3RlZAorICAgYnkgZF9sb2NrLgorCisKK1BhcGVycyBhbmQgb3RoZXIgZG9jdW1lbnRhdGlvbiBvbiBkY2FjaGUgbG9ja2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIFNjYWxpbmcgZGNhY2hlIHdpdGggUkNVIChodHRwOi8vbGludXhqb3VybmFsLmNvbS9hcnRpY2xlLnBocD9zaWQ9NzEyNCkuCisKKzIuIGh0dHA6Ly9sc2Uuc291cmNlZm9yZ2UubmV0L2xvY2tpbmcvZGNhY2hlL2RjYWNoZS5odG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkNWQwYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLnR4dApAQCAtMCwwICsxLDE4OCBAQAorCitUaGUgU0dJIFhGUyBGaWxlc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09CisKK1hGUyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2Ugam91cm5hbGluZyBmaWxlc3lzdGVtIHdoaWNoIG9yaWdpbmF0ZWQKK29uIHRoZSBTR0kgSVJJWCBwbGF0Zm9ybS4gIEl0IGlzIGNvbXBsZXRlbHkgbXVsdGktdGhyZWFkZWQsIGNhbgorc3VwcG9ydCBsYXJnZSBmaWxlcyBhbmQgbGFyZ2UgZmlsZXN5c3RlbXMsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsCit2YXJpYWJsZSBibG9jayBzaXplcywgaXMgZXh0ZW50IGJhc2VkLCBhbmQgbWFrZXMgZXh0ZW5zaXZlIHVzZSBvZgorQnRyZWVzIChkaXJlY3RvcmllcywgZXh0ZW50cywgZnJlZSBzcGFjZSkgdG8gYWlkIGJvdGggcGVyZm9ybWFuY2UKK2FuZCBzY2FsYWJpbGl0eS4KKworUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gYXQgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcy8KK2ZvciBmdXJ0aGVyIGRldGFpbHMuICBUaGlzIGltcGxlbWVudGF0aW9uIGlzIG9uLWRpc2sgY29tcGF0aWJsZQord2l0aCB0aGUgSVJJWCB2ZXJzaW9uIG9mIFhGUy4KKworCitNb3VudCBPcHRpb25zCis9PT09PT09PT09PT09CisKK1doZW4gbW91bnRpbmcgYW4gWEZTIGZpbGVzeXN0ZW0sIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWNjZXB0ZWQuCisKKyAgYmlvc2l6ZT1zaXplCisJU2V0cyB0aGUgcHJlZmVycmVkIGJ1ZmZlcmVkIEkvTyBzaXplIChkZWZhdWx0IHNpemUgaXMgNjRLKS4KKwkic2l6ZSIgbXVzdCBiZSBleHByZXNzZWQgYXMgdGhlIGxvZ2FyaXRobSAoYmFzZTIpIG9mIHRoZQorCWRlc2lyZWQgSS9PIHNpemUuCisJVmFsaWQgdmFsdWVzIGZvciB0aGlzIG9wdGlvbiBhcmUgMTQgdGhyb3VnaCAxNiwgaW5jbHVzaXZlCisJKGkuZS4gMTZLLCAzMkssIGFuZCA2NEsgYnl0ZXMpLiAgT24gbWFjaGluZXMgd2l0aCBhIDRLCisJcGFnZXNpemUsIDEzICg4SyBieXRlcykgaXMgYWxzbyBhIHZhbGlkIHNpemUuCisJVGhlIHByZWZlcnJlZCBidWZmZXJlZCBJL08gc2l6ZSBjYW4gYWxzbyBiZSBhbHRlcmVkIG9uIGFuCisJaW5kaXZpZHVhbCBmaWxlIGJhc2lzIHVzaW5nIHRoZSBpb2N0bCgyKSBzeXN0ZW0gY2FsbC4KKworICBpa2VlcC9ub2lrZWVwCisJV2hlbiBpbm9kZSBjbHVzdGVycyBhcmUgZW1wdGllZCBvZiBpbm9kZXMsIGtlZXAgdGhlbSBhcm91bmQKKwlvbiB0aGUgZGlzayAoaWtlZXApIC0gdGhpcyBpcyB0aGUgdHJhZGl0aW9uYWwgWEZTIGJlaGF2aW91cgorCWFuZCBpcyBzdGlsbCB0aGUgZGVmYXVsdCBmb3Igbm93LiAgVXNpbmcgdGhlIG5vaWtlZXAgb3B0aW9uLAorCWlub2RlIGNsdXN0ZXJzIGFyZSByZXR1cm5lZCB0byB0aGUgZnJlZSBzcGFjZSBwb29sLgorCisgIGxvZ2J1ZnM9dmFsdWUKKwlTZXQgdGhlIG51bWJlciBvZiBpbi1tZW1vcnkgbG9nIGJ1ZmZlcnMuICBWYWxpZCBudW1iZXJzIHJhbmdlCisJZnJvbSAyLTggaW5jbHVzaXZlLgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzIDggYnVmZmVycyBmb3IgZmlsZXN5c3RlbXMgd2l0aCBhCisJYmxvY2tzaXplIG9mIDY0SywgNCBidWZmZXJzIGZvciBmaWxlc3lzdGVtcyB3aXRoIGEgYmxvY2tzaXplCisJb2YgMzJLLCAzIGJ1ZmZlcnMgZm9yIGZpbGVzeXN0ZW1zIHdpdGggYSBibG9ja3NpemUgb2YgMTZLCisJYW5kIDIgYnVmZmVycyBmb3IgYWxsIG90aGVyIGNvbmZpZ3VyYXRpb25zLiAgSW5jcmVhc2luZyB0aGUKKwludW1iZXIgb2YgYnVmZmVycyBtYXkgaW5jcmVhc2UgcGVyZm9ybWFuY2Ugb24gc29tZSB3b3JrbG9hZHMKKwlhdCB0aGUgY29zdCBvZiB0aGUgbWVtb3J5IHVzZWQgZm9yIHRoZSBhZGRpdGlvbmFsIGxvZyBidWZmZXJzCisJYW5kIHRoZWlyIGFzc29jaWF0ZWQgY29udHJvbCBzdHJ1Y3R1cmVzLgorCisgIGxvZ2JzaXplPXZhbHVlCisJU2V0IHRoZSBzaXplIG9mIGVhY2ggaW4tbWVtb3J5IGxvZyBidWZmZXIuCisJU2l6ZSBtYXkgYmUgc3BlY2lmaWVkIGluIGJ5dGVzLCBvciBpbiBraWxvYnl0ZXMgd2l0aCBhICJrIiBzdWZmaXguCisJVmFsaWQgc2l6ZXMgZm9yIHZlcnNpb24gMSBhbmQgdmVyc2lvbiAyIGxvZ3MgYXJlIDE2Mzg0ICgxNmspIGFuZCAKKwkzMjc2OCAoMzJrKS4gIFZhbGlkIHNpemVzIGZvciB2ZXJzaW9uIDIgbG9ncyBhbHNvIGluY2x1ZGUgCisJNjU1MzYgKDY0ayksIDEzMTA3MiAoMTI4aykgYW5kIDI2MjE0NCAoMjU2aykuCisJVGhlIGRlZmF1bHQgdmFsdWUgZm9yIG1hY2hpbmVzIHdpdGggbW9yZSB0aGFuIDMyTUIgb2YgbWVtb3J5CisJaXMgMzI3NjgsIG1hY2hpbmVzIHdpdGggbGVzcyBtZW1vcnkgdXNlIDE2Mzg0IGJ5IGRlZmF1bHQuCisKKyAgbG9nZGV2PWRldmljZSBhbmQgcnRkZXY9ZGV2aWNlCisJVXNlIGFuIGV4dGVybmFsIGxvZyAobWV0YWRhdGEgam91cm5hbCkgYW5kL29yIHJlYWwtdGltZSBkZXZpY2UuCisJQW4gWEZTIGZpbGVzeXN0ZW0gaGFzIHVwIHRvIHRocmVlIHBhcnRzOiBhIGRhdGEgc2VjdGlvbiwgYSBsb2cKKwlzZWN0aW9uLCBhbmQgYSByZWFsLXRpbWUgc2VjdGlvbi4gIFRoZSByZWFsLXRpbWUgc2VjdGlvbiBpcworCW9wdGlvbmFsLCBhbmQgdGhlIGxvZyBzZWN0aW9uIGNhbiBiZSBzZXBhcmF0ZSBmcm9tIHRoZSBkYXRhCisJc2VjdGlvbiBvciBjb250YWluZWQgd2l0aGluIGl0LgorCisgIG5vYWxpZ24KKwlEYXRhIGFsbG9jYXRpb25zIHdpbGwgbm90IGJlIGFsaWduZWQgYXQgc3RyaXBlIHVuaXQgYm91bmRhcmllcy4KKworICBub2F0aW1lCisJQWNjZXNzIHRpbWVzdGFtcHMgYXJlIG5vdCB1cGRhdGVkIHdoZW4gYSBmaWxlIGlzIHJlYWQuCisKKyAgbm9yZWNvdmVyeQorCVRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgbW91bnRlZCB3aXRob3V0IHJ1bm5pbmcgbG9nIHJlY292ZXJ5LgorCUlmIHRoZSBmaWxlc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQsIGl0IGlzIGxpa2VseSB0bworCWJlIGluY29uc2lzdGVudCB3aGVuIG1vdW50ZWQgaW4gIm5vcmVjb3ZlcnkiIG1vZGUuCisJU29tZSBmaWxlcyBvciBkaXJlY3RvcmllcyBtYXkgbm90IGJlIGFjY2Vzc2libGUgYmVjYXVzZSBvZiB0aGlzLgorCUZpbGVzeXN0ZW1zIG1vdW50ZWQgIm5vcmVjb3ZlcnkiIG11c3QgYmUgbW91bnRlZCByZWFkLW9ubHkgb3IKKwl0aGUgbW91bnQgd2lsbCBmYWlsLgorCisgIG5vdXVpZAorCURvbid0IGNoZWNrIGZvciBkb3VibGUgbW91bnRlZCBmaWxlIHN5c3RlbXMgdXNpbmcgdGhlIGZpbGUgc3lzdGVtIHV1aWQuCisJVGhpcyBpcyB1c2VmdWwgdG8gbW91bnQgTFZNIHNuYXBzaG90IHZvbHVtZXMuCisKKyAgb3N5bmNpc29zeW5jCisJTWFrZSBPX1NZTkMgd3JpdGVzIGltcGxlbWVudCB0cnVlIE9fU1lOQy4gIFdJVEhPVVQgdGhpcyBvcHRpb24sCisJTGludXggWEZTIGJlaGF2ZXMgYXMgaWYgYW4gIm9zeW5jaXNkc3luYyIgb3B0aW9uIGlzIHVzZWQsCisJd2hpY2ggd2lsbCBtYWtlIHdyaXRlcyB0byBmaWxlcyBvcGVuZWQgd2l0aCB0aGUgT19TWU5DIGZsYWcgc2V0CisJYmVoYXZlIGFzIGlmIHRoZSBPX0RTWU5DIGZsYWcgaGFkIGJlZW4gdXNlZCBpbnN0ZWFkLgorCVRoaXMgY2FuIHJlc3VsdCBpbiBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aG91dCBjb21wcm9taXNpbmcKKwlkYXRhIHNhZmV0eS4KKwlIb3dldmVyIGlmIHRoaXMgb3B0aW9uIGlzIG5vdCBpbiBlZmZlY3QsIHRpbWVzdGFtcCB1cGRhdGVzIGZyb20KKwlPX1NZTkMgd3JpdGVzIGNhbiBiZSBsb3N0IGlmIHRoZSBzeXN0ZW0gY3Jhc2hlcy4KKwlJZiB0aW1lc3RhbXAgdXBkYXRlcyBhcmUgY3JpdGljYWwsIHVzZSB0aGUgb3N5bmNpc29zeW5jIG9wdGlvbi4KKworICBxdW90YS91c3JxdW90YS91cW5vZW5mb3JjZQorCVVzZXIgZGlzayBxdW90YSBhY2NvdW50aW5nIGVuYWJsZWQsIGFuZCBsaW1pdHMgKG9wdGlvbmFsbHkpCisJZW5mb3JjZWQuCisKKyAgZ3JwcXVvdGEvZ3Fub2VuZm9yY2UKKwlHcm91cCBkaXNrIHF1b3RhIGFjY291bnRpbmcgZW5hYmxlZCBhbmQgbGltaXRzIChvcHRpb25hbGx5KQorCWVuZm9yY2VkLgorCisgIHN1bml0PXZhbHVlIGFuZCBzd2lkdGg9dmFsdWUKKwlVc2VkIHRvIHNwZWNpZnkgdGhlIHN0cmlwZSB1bml0IGFuZCB3aWR0aCBmb3IgYSBSQUlEIGRldmljZSBvcgorCWEgc3RyaXBlIHZvbHVtZS4gICJ2YWx1ZSIgbXVzdCBiZSBzcGVjaWZpZWQgaW4gNTEyLWJ5dGUgYmxvY2sKKwl1bml0cy4KKwlJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgZmlsZXN5c3RlbSB3YXMgbWFkZSBvbgorCWEgc3RyaXBlIHZvbHVtZSBvciB0aGUgc3RyaXBlIHdpZHRoIG9yIHVuaXQgd2VyZSBzcGVjaWZpZWQgZm9yCisJdGhlIFJBSUQgZGV2aWNlIGF0IG1rZnMgdGltZSwgdGhlbiB0aGUgbW91bnQgc3lzdGVtIGNhbGwgd2lsbAorCXJlc3RvcmUgdGhlIHZhbHVlIGZyb20gdGhlIHN1cGVyYmxvY2suICBGb3IgZmlsZXN5c3RlbXMgdGhhdAorCWFyZSBtYWRlIGRpcmVjdGx5IG9uIFJBSUQgZGV2aWNlcywgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZAorCXRvIG92ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc3VwZXJibG9jayBpZiB0aGUgdW5kZXJseWluZworCWRpc2sgbGF5b3V0IGNoYW5nZXMgYWZ0ZXIgdGhlIGZpbGVzeXN0ZW0gaGFzIGJlZW4gY3JlYXRlZC4KKwlUaGUgInN3aWR0aCIgb3B0aW9uIGlzIHJlcXVpcmVkIGlmIHRoZSAic3VuaXQiIG9wdGlvbiBoYXMgYmVlbgorCXNwZWNpZmllZCwgYW5kIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgInN1bml0IiB2YWx1ZS4KKworc3lzY3RscworPT09PT09PQorCitUaGUgZm9sbG93aW5nIHN5c2N0bHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtOgorCisgIGZzLnhmcy5zdGF0c19jbGVhcgkJKE1pbjogMCAgRGVmYXVsdDogMCAgTWF4OiAxKQorCVNldHRpbmcgdGhpcyB0byAiMSIgY2xlYXJzIGFjY3VtdWxhdGVkIFhGUyBzdGF0aXN0aWNzIAorCWluIC9wcm9jL2ZzL3hmcy9zdGF0LiAgSXQgdGhlbiBpbW1lZGlhdGVseSByZXNldHMgdG8gIjAiLgorICAKKyAgZnMueGZzLnhmc3N5bmNkX2NlbnRpc2VjcwkoTWluOiAxMDAgIERlZmF1bHQ6IDMwMDAgIE1heDogNzIwMDAwKQorICAJVGhlIGludGVydmFsIGF0IHdoaWNoIHRoZSB4ZnNzeW5jZCB0aHJlYWQgZmx1c2hlcyBtZXRhZGF0YQorICAJb3V0IHRvIGRpc2suICBUaGlzIHRocmVhZCB3aWxsIGZsdXNoIGxvZyBhY3Rpdml0eSBvdXQsIGFuZAorICAJZG8gc29tZSBwcm9jZXNzaW5nIG9uIHVubGlua2VkIGlub2Rlcy4KKworICBmcy54ZnMueGZzYnVmZF9jZW50aXNlY3MJKE1pbjogNTAgIERlZmF1bHQ6IDEwMAlNYXg6IDMwMDApCisJVGhlIGludGVydmFsIGF0IHdoaWNoIHhmc2J1ZmQgc2NhbnMgdGhlIGRpcnR5IG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdC4KKworICBmcy54ZnMuYWdlX2J1ZmZlcl9jZW50aXNlY3MJKE1pbjogMTAwICBEZWZhdWx0OiAxNTAwICBNYXg6IDcyMDAwMCkKKwlUaGUgYWdlIGF0IHdoaWNoIHhmc2J1ZmQgZmx1c2hlcyBkaXJ0eSBtZXRhZGF0YSBidWZmZXJzIHRvIGRpc2suCisKKyAgZnMueGZzLmVycm9yX2xldmVsCQkoTWluOiAwICBEZWZhdWx0OiAzICBNYXg6IDExKQorCUEgdm9sdW1lIGtub2IgZm9yIGVycm9yIHJlcG9ydGluZyB3aGVuIGludGVybmFsIGVycm9ycyBvY2N1ci4KKwlUaGlzIHdpbGwgZ2VuZXJhdGUgZGV0YWlsZWQgbWVzc2FnZXMgJiBiYWNrdHJhY2VzIGZvciBmaWxlc3lzdGVtCisJc2h1dGRvd25zLCBmb3IgZXhhbXBsZS4gIEN1cnJlbnQgdGhyZXNob2xkIHZhbHVlcyBhcmU6CisKKwkJWEZTX0VSUkxFVkVMX09GRjogICAgICAgMAorCQlYRlNfRVJSTEVWRUxfTE9XOiAgICAgICAxCisJCVhGU19FUlJMRVZFTF9ISUdIOiAgICAgIDUKKworICBmcy54ZnMucGFuaWNfbWFzawkJKE1pbjogMCAgRGVmYXVsdDogMCAgTWF4OiAxMjcpCisJQ2F1c2VzIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucyB0byBjYWxsIEJVRygpLiBWYWx1ZSBpcyBhIGJpdG1hc2s7IAorCUFORCB0b2dldGhlciB0aGUgdGFncyB3aGljaCByZXByZXNlbnQgZXJyb3JzIHdoaWNoIHNob3VsZCBjYXVzZSBwYW5pY3M6CisJCisJCVhGU19OT19QVEFHICAgICAgICAgICAgICAgICAgICAgMAorCQlYRlNfUFRBR19JRkxVU0ggICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKwkJWEZTX1BUQUdfTE9HUkVTICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisJCVhGU19QVEFHX0FJTERFTEVURSAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCQlYRlNfUFRBR19FUlJPUl9SRVBPUlQgICAgICAgICAgIDB4MDAwMDAwMDgKKwkJWEZTX1BUQUdfU0hVVERPV05fQ09SUlVQVCAgICAgICAweDAwMDAwMDEwCisJCVhGU19QVEFHX1NIVVRET1dOX0lPRVJST1IgICAgICAgMHgwMDAwMDAyMAorCQlYRlNfUFRBR19TSFVURE9XTl9MT0dFUlJPUiAgICAgIDB4MDAwMDAwNDAKKworCVRoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4JCQorCisgIGZzLnhmcy5pcml4X3N5bWxpbmtfbW9kZQkoTWluOiAwICBEZWZhdWx0OiAwICBNYXg6IDEpCisJQ29udHJvbHMgd2hldGhlciBzeW1saW5rcyBhcmUgY3JlYXRlZCB3aXRoIG1vZGUgMDc3NyAoZGVmYXVsdCkKKwlvciB3aGV0aGVyIHRoZWlyIG1vZGUgaXMgYWZmZWN0ZWQgYnkgdGhlIHVtYXNrIChpcml4IG1vZGUpLgorCisgIGZzLnhmcy5pcml4X3NnaWRfaW5oZXJpdAkoTWluOiAwICBEZWZhdWx0OiAwICBNYXg6IDEpCisJQ29udHJvbHMgZmlsZXMgY3JlYXRlZCBpbiBTR0lEIGRpcmVjdG9yaWVzLgorCUlmIHRoZSBncm91cCBJRCBvZiB0aGUgbmV3IGZpbGUgZG9lcyBub3QgbWF0Y2ggdGhlIGVmZmVjdGl2ZSBncm91cAorCUlEIG9yIG9uZSBvZiB0aGUgc3VwcGxlbWVudGFyeSBncm91cCBJRHMgb2YgdGhlIHBhcmVudCBkaXIsIHRoZSAKKwlJU0dJRCBiaXQgaXMgY2xlYXJlZCBpZiB0aGUgaXJpeF9zZ2lkX2luaGVyaXQgY29tcGF0aWJpbGl0eSBzeXNjdGwgCisJaXMgc2V0LgorCisgIGZzLnhmcy5yZXN0cmljdF9jaG93bgkJKE1pbjogMCAgRGVmYXVsdDogMSAgTWF4OiAxKQorICAJQ29udHJvbHMgd2hldGhlciB1bnByaXZpbGVnZWQgdXNlcnMgY2FuIHVzZSBjaG93biB0byAiZ2l2ZSBhd2F5IgorCWEgZmlsZSB0byBhbm90aGVyIHVzZXIuCisKKyAgZnMueGZzLmluaGVyaXRfc3luYwkJKE1pbjogMCAgRGVmYXVsdDogMSAgTWF4IDEpCisJU2V0dGluZyB0aGlzIHRvICIxIiB3aWxsIGNhdXNlIHRoZSAic3luYyIgZmxhZyBzZXQgCisJYnkgdGhlIGNoYXR0cigxKSBjb21tYW5kIG9uIGEgZGlyZWN0b3J5IHRvIGJlCisJaW5oZXJpdGVkIGJ5IGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LgorCisgIGZzLnhmcy5pbmhlcml0X25vZHVtcAkJKE1pbjogMCAgRGVmYXVsdDogMSAgTWF4IDEpCisJU2V0dGluZyB0aGlzIHRvICIxIiB3aWxsIGNhdXNlIHRoZSAibm9kdW1wIiBmbGFnIHNldCAKKwlieSB0aGUgY2hhdHRyKDEpIGNvbW1hbmQgb24gYSBkaXJlY3RvcnkgdG8gYmUKKwlpbmhlcml0ZWQgYnkgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuCisKKyAgZnMueGZzLmluaGVyaXRfbm9hdGltZQkoTWluOiAwICBEZWZhdWx0OiAxICBNYXggMSkKKwlTZXR0aW5nIHRoaXMgdG8gIjEiIHdpbGwgY2F1c2UgdGhlICJub2F0aW1lIiBmbGFnIHNldCAKKwlieSB0aGUgY2hhdHRyKDEpIGNvbW1hbmQgb24gYSBkaXJlY3RvcnkgdG8gYmUKKwlpbmhlcml0ZWQgYnkgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL1JFQURNRSBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZTgzNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL1JFQURNRQpAQCAtMCwwICsxLDEyNCBAQAorCisgcmVxdWVzdF9maXJtd2FyZSgpIGhvdHBsdWcgaW50ZXJmYWNlOgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUNvcHlyaWdodCAoQykgMjAwMyBNYW51ZWwgRXN0cmFkYSBTYWlueiA8cmFudHlAZGViaWFuLm9yZz4KKworIFdoeToKKyAtLS0KKworIFRvZGF5LCB0aGUgbW9zdCBleHRlbmRlZCB3YXkgdG8gdXNlIGZpcm13YXJlIGluIHRoZSBMaW51eCBrZXJuZWwgaXMgbGlua2luZworIGl0IHN0YXRpY2FsbHkgaW4gYSBoZWFkZXIgZmlsZS4gV2hpY2ggaGFzIHBvbGl0aWNhbCBhbmQgdGVjaG5pY2FsIGlzc3VlczoKKworICAxKSBTb21lIGZpcm13YXJlIGlzIG5vdCBsZWdhbCB0byByZWRpc3RyaWJ1dGUuCisgIDIpIFRoZSBmaXJtd2FyZSBvY2N1cGllcyBtZW1vcnkgcGVybWFuZW50bHksIGV2ZW4gdGhvdWdoIGl0IG9mdGVuIGlzIGp1c3QKKyAgICAgdXNlZCBvbmNlLgorICAzKSBTb21lIHBlb3BsZSwgbGlrZSB0aGUgRGViaWFuIGNyb3dkLCBkb24ndCBjb25zaWRlciBzb21lIGZpcm13YXJlIGZyZWUKKyAgICAgZW5vdWdoIGFuZCByZW1vdmUgZW50aXJlIGRyaXZlcnMgKGUuZy46IGtleXNwYW4pLgorCisgSGlnaCBsZXZlbCBiZWhhdmlvciAobWl4ZWQpOgorID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIGtlcm5lbChkcml2ZXIpOiBjYWxscyByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgJEZJUk1XQVJFLCBkZXZpY2UpCisKKyB1c2Vyc3BhY2U6CisgCS0gL3N5cy9jbGFzcy9maXJtd2FyZS94eHgve2xvYWRpbmcsZGF0YX0gYXBwZWFyLgorCS0gaG90cGx1ZyBnZXRzIGNhbGxlZCB3aXRoIGEgZmlybXdhcmUgaWRlbnRpZmllciBpbiAkRklSTVdBUkUKKwkgIGFuZCB0aGUgdXN1YWwgaG90cGx1ZyBlbnZpcm9ubWVudC4KKwkJLSBob3RwbHVnOiBlY2hvIDEgPiAvc3lzL2NsYXNzL2Zpcm13YXJlL3h4eC9sb2FkaW5nCisKKyBrZXJuZWw6IERpc2NhcmQgYW55IHByZXZpb3VzIHBhcnRpYWwgbG9hZC4KKworIHVzZXJzcGFjZToKKwkJLSBob3RwbHVnOiBjYXQgYXBwcm9wcmlhdGVfZmlybXdhcmVfaW1hZ2UgPiBcCisJCQkJCS9zeXMvY2xhc3MvZmlybXdhcmUveHh4L2RhdGEKKworIGtlcm5lbDogZ3Jvd3MgYSBidWZmZXIgaW4gUEFHRV9TSVpFIGluY3JlbWVudHMgdG8gaG9sZCB0aGUgaW1hZ2UgYXMgaXQKKwkgY29tZXMgaW4uCisKKyB1c2Vyc3BhY2U6CisJCS0gaG90cGx1ZzogZWNobyAwID4gL3N5cy9jbGFzcy9maXJtd2FyZS94eHgvbG9hZGluZworCisga2VybmVsOiByZXF1ZXN0X2Zpcm13YXJlKCkgcmV0dXJucyBhbmQgdGhlIGRyaXZlciBoYXMgdGhlIGZpcm13YXJlCisJIGltYWdlIGluIGZ3X2VudHJ5LT57ZGF0YSxzaXplfS4gSWYgc29tZXRoaW5nIHdlbnQgd3JvbmcKKwkgcmVxdWVzdF9maXJtd2FyZSgpIHJldHVybnMgbm9uLXplcm8gYW5kIGZ3X2VudHJ5IGlzIHNldCB0bworCSBOVUxMLgorCisga2VybmVsKGRyaXZlcik6IERyaXZlciBjb2RlIGNhbGxzIHJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpIHJlbGVhc2luZworCQkgdGhlIGZpcm13YXJlIGltYWdlIGFuZCBhbnkgcmVsYXRlZCByZXNvdXJjZS4KKworIEhpZ2ggbGV2ZWwgYmVoYXZpb3IgKGRyaXZlciBjb2RlKToKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgaWYocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICRGSVJNV0FSRSwgZGV2aWNlKSA9PSAwKQorCSAJY29weV9md190b19kZXZpY2UoZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKKwkgcmVsZWFzZShmd19lbnRyeSk7CisKKyBTYW1wbGUvc2ltcGxlIGhvdHBsdWcgc2NyaXB0OgorID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSMgQm90aCAkREVWUEFUSCBhbmQgJEZJUk1XQVJFIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGluIHRoZSBlbnZpcm9ubWVudC4KKworCUhPVFBMVUdfRldfRElSPS91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUvCisKKwllY2hvIDEgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKKwljYXQgJEhPVFBMVUdfRldfRElSLyRGSVJNV0FSRSA+IC9zeXNmcy8kREVWUEFUSC9kYXRhCisJZWNobyAwID4gL3N5cy8kREVWUEFUSC9sb2FkaW5nCisKKyBSYW5kb20gbm90ZXM6CisgPT09PT09PT09PT09CisKKyAtICJlY2hvIC0xID4gL3N5cy9jbGFzcy9maXJtd2FyZS94eHgvbG9hZGluZyIgd2lsbCBjYW5jZWwgdGhlIGxvYWQgYXQKKyAgIG9uY2UgYW5kIG1ha2UgcmVxdWVzdF9maXJtd2FyZSgpIHJldHVybiB3aXRoIGVycm9yLgorCisgLSBmaXJtd2FyZV9kYXRhX3JlYWQoKSBhbmQgZmlybXdhcmVfbG9hZGluZ19zaG93KCkgYXJlIGp1c3QgcHJvdmlkZWQKKyAgIGZvciB0ZXN0aW5nIGFuZCBjb21wbGV0ZW5lc3MsIHRoZXkgYXJlIG5vdCBjYWxsZWQgaW4gbm9ybWFsIHVzZS4KKworIC0gVGhlcmUgaXMgYWxzbyAvc3lzL2NsYXNzL2Zpcm13YXJlL3RpbWVvdXQgd2hpY2ggaG9sZHMgYSB0aW1lb3V0IGluCisgICBzZWNvbmRzIGZvciB0aGUgd2hvbGUgbG9hZCBvcGVyYXRpb24uCisKKyAtIHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KCkgaXMgYWxzbyBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UgaW4KKyAgIG5vbi11c2VyIGNvbnRleHRzLgorCisKKyBhYm91dCBpbi1rZXJuZWwgcGVyc2lzdGVuY2U6CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCBhcyBleHBsYWluZWQgYmVsb3csIGl0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIGtlZXAKKyBmaXJtd2FyZSBpbWFnZXMgaW4gbm9uLXN3YXBwYWJsZSBrZXJuZWwgbWVtb3J5IG9yIGV2ZW4gaW4gdGhlIGtlcm5lbCBpbWFnZQorIChwcm9iYWJseSB3aXRoaW4gaW5pdHJhbWZzKS4KKworIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkLgorCisgLSBXaHkgT1BUSU9OQUwgaW4ta2VybmVsIHBlcnNpc3RlbmNlIG1heSBiZSBhIGdvb2QgaWRlYSBzb21ldGltZXM6CisgCisJLSBJZiB0aGUgZGV2aWNlIHRoYXQgbmVlZHMgdGhlIGZpcm13YXJlIGlzIG5lZWRlZCB0byBhY2Nlc3MgdGhlCisJICBmaWxlc3lzdGVtLiBXaGVuIHVwb24gc29tZSBlcnJvciB0aGUgZGV2aWNlIGhhcyB0byBiZSByZXNldCBhbmQgdGhlCisJICBmaXJtd2FyZSByZWxvYWRlZCwgaXQgd29uJ3QgYmUgcG9zc2libGUgdG8gZ2V0IGl0IGZyb20gdXNlcnNwYWNlLgorCSAgZS5nLjoKKwkJLSBBIGRpc2tsZXNzIGNsaWVudCB3aXRoIGEgbmV0d29yayBjYXJkIHRoYXQgbmVlZHMgZmlybXdhcmUuCisJCS0gVGhlIGZpbGVzeXN0ZW0gaXMgc3RvcmVkIGluIGEgZGlzayBiZWhpbmQgYW4gc2NzaSBkZXZpY2UKKwkJICB0aGF0IG5lZWRzIGZpcm13YXJlLgorCS0gUmVwbGFjaW5nIGJ1Z2d5IERTRFQvU1NEVCBBQ1BJIHRhYmxlcyBvbiBib290LgorCSAgTm90ZTogdGhpcyB3b3VsZCByZXF1aXJlIHRoZSBwZXJzaXN0ZW50IG9iamVjdHMgdG8gYmUgaW5jbHVkZWQKKwkgIHdpdGhpbiB0aGUga2VybmVsIGltYWdlLCBwcm9iYWJseSB3aXRoaW4gaW5pdHJhbWZzLgorCSAgCisgICBBbmQgdGhlIHNhbWUgZGV2aWNlIGNhbiBiZSBuZWVkZWQgdG8gYWNjZXNzIHRoZSBmaWxlc3lzdGVtIG9yIG5vdCBkZXBlbmRpbmcKKyAgIG9uIHRoZSBzZXR1cCwgc28gSSB0aGluayB0aGF0IHRoZSBjaG9pY2Ugb24gd2hhdCBmaXJtd2FyZSB0byBtYWtlCisgICBwZXJzaXN0ZW50IHNob3VsZCBiZSBsZWZ0IHRvIHVzZXJzcGFjZS4KKworIC0gV2h5IHJlZ2lzdGVyX2Zpcm13YXJlKCkrX19pbml0IGNhbiBiZSB1c2VmdWw6CisgCS0gRm9yIGJvb3QgZGV2aWNlcyBuZWVkaW5nIGZpcm13YXJlLgorCS0gVG8gbWFrZSB0aGUgdHJhbnNpdGlvbiBlYXNpZXI6CisJCVRoZSBmaXJtd2FyZSBjYW4gYmUgZGVjbGFyZWQgX19pbml0IGFuZCByZWdpc3Rlcl9maXJtd2FyZSgpCisJCWNhbGxlZCBvbiBtb2R1bGVfaW5pdC4gVGhlbiB0aGUgZmlybXdhcmUgaXMgd2FycmFudGVkIHRvIGJlCisJCXRoZXJlIGV2ZW4gaWYgImZpcm13YXJlIGhvdHBsdWcgdXNlcnNwYWNlIiBpcyBub3QgdGhlcmUgeWV0IG9yCisJCWl0IGRvZXNuJ3QgeWV0IHByb3ZpZGUgdGhlIG5lZWRlZCBmaXJtd2FyZS4KKwkJT25jZSB0aGUgZmlybXdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBpbiB1c2Vyc3BhY2UsIGl0IGNhbiBiZQorCQlyZW1vdmVkIGZyb20gdGhlIGtlcm5lbC4gT3IgbWFkZSBvcHRpb25hbCAoQ09ORklHXy4qX0ZJUk1XQVJFKS4KKworCUluIGVpdGhlciBjYXNlLCBpZiBmaXJtd2FyZSBob3RwbHVnIHN1cHBvcnQgaXMgdGhlcmUsIGl0IGNhbiBtb3ZlIHRoZQorCWZpcm13YXJlIG91dCBvZiBrZXJuZWwgbWVtb3J5IGludG8gdGhlIHJlYWwgZmlsZXN5c3RlbSBmb3IgbGF0ZXIKKwl1c2FnZS4KKworCU5vdGU6IElmIHBlcnNpc3RlbmNlIGlzIGltcGxlbWVudGVkIG9uIHRvcCBvZiBpbml0cmFtZnMsCisJcmVnaXN0ZXJfZmlybXdhcmUoKSBtYXkgbm90IGJlIGFwcHJvcHJpYXRlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYzU2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIGZpcm13YXJlX3NhbXBsZV9kcml2ZXIuYyAtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIE1hbnVlbCBFc3RyYWRhIFNhaW56IDxyYW50eUBkZWJpYW4ub3JnPgorICoKKyAqIFNhbXBsZSBjb2RlIG9uIGhvdyB0byB1c2UgcmVxdWVzdF9maXJtd2FyZSgpIGZyb20gZHJpdmVycy4KKyAqCisgKiBOb3RlIHRoYXQgcmVnaXN0ZXJfZmlybXdhcmUoKSBpcyBjdXJyZW50bHkgdXNlbGVzcy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImxpbnV4L2Zpcm13YXJlLmgiCisKKyNkZWZpbmUgV0VfQ0FOX05FRURfRklSTVdBUkVfQkVGT1JFX1VTRVJTUEFDRV9JU19BVkFJTEFCTEUKKyNpZmRlZiBXRV9DQU5fTkVFRF9GSVJNV0FSRV9CRUZPUkVfVVNFUlNQQUNFX0lTX0FWQUlMQUJMRQorY2hhciBfX2luaXQgaW5rZXJuZWxfZmlybXdhcmVbXSA9ICJsZXQncyBzYXkgdGhhdCB0aGlzIGlzIGZpcm13YXJlXG4iOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIGdob3N0X2RldmljZSA9IHsKKwkubmFtZSAgICAgID0gIkdob3N0IERldmljZSIsCisJLmJ1c19pZCAgICA9ICJnaG9zdDAiLAorfTsKKworCitzdGF0aWMgdm9pZCBzYW1wbGVfZmlybXdhcmVfbG9hZChjaGFyICpmaXJtd2FyZSwgaW50IHNpemUpCit7CisJdTggYnVmW3NpemUrMV07CisJbWVtY3B5KGJ1ZiwgZmlybXdhcmUsIHNpemUpOworCWJ1ZltzaXplXSA9ICdcMCc7CisJcHJpbnRrKCJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiBmaXJtd2FyZTogJXNcbiIsIGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHNhbXBsZV9wcm9iZV9kZWZhdWx0KHZvaWQpCit7CisJLyogdXNlcyB0aGUgZGVmYXVsdCBtZXRob2QgdG8gZ2V0IHRoZSBmaXJtd2FyZSAqLworICAgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCXByaW50aygiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogYSBnaG9zdCBkZXZpY2UgZ290IGluc2VydGVkIDopXG4iKTsKKworICAgICAgICBpZihyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgInNhbXBsZV9kcml2ZXJfZnciLCAmZ2hvc3RfZGV2aWNlKSE9MCkKKwl7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IEZpcm13YXJlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm47CisJfQorCQorCXNhbXBsZV9maXJtd2FyZV9sb2FkKGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKworCS8qIGZpbmlzaCBzZXR0aW5nIHVwIHRoZSBkZXZpY2UgKi8KK30KK3N0YXRpYyB2b2lkIHNhbXBsZV9wcm9iZV9zcGVjaWZpYyh2b2lkKQoreworCS8qIFVzZXMgc29tZSBzcGVjaWZpYyBob3RwbHVnIHN1cHBvcnQgdG8gZ2V0IHRoZSBmaXJtd2FyZSBmcm9tCisJICogdXNlcnNwYWNlICBkaXJlY3RseSBpbnRvIHRoZSBoYXJkd2FyZSwgb3IgdmlhIHNvbWUgc3lzZnMgZmlsZSAqLworCisJLyogTk9URTogVGhpcyBjdXJyZW50bHkgZG9lc24ndCB3b3JrICovCisKKwlwcmludGsoImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGEgZ2hvc3QgZGV2aWNlIGdvdCBpbnNlcnRlZCA6KVxuIik7CisKKyAgICAgICAgaWYocmVxdWVzdF9maXJtd2FyZShOVUxMLCAic2FtcGxlX2RyaXZlcl9mdyIsICZnaG9zdF9kZXZpY2UpIT0wKQorCXsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogRmlybXdhcmUgbG9hZCBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCQorCS8qIHJlcXVlc3RfZmlybXdhcmUgYmxvY2tzIHVudGlsIHVzZXJzcGFjZSBmaW5pc2hlZCwgc28gYXQKKwkgKiB0aGlzIHBvaW50IHRoZSBmaXJtd2FyZSBzaG91bGQgYmUgYWxyZWFkeSBpbiB0aGUgZGV2aWNlICovCisKKwkvKiBmaW5pc2ggc2V0dGluZyB1cCB0aGUgZGV2aWNlICovCit9CitzdGF0aWMgdm9pZCBzYW1wbGVfcHJvYmVfYXN5bmNfY29udChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KQoreworCWlmKCFmdyl7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGZpcm13YXJlIGxvYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50aygiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogZGV2aWNlIHBvaW50ZXIgXCIlc1wiXG4iLAorCSAgICAgICAoY2hhciAqKWNvbnRleHQpOworCXNhbXBsZV9maXJtd2FyZV9sb2FkKGZ3LT5kYXRhLCBmdy0+c2l6ZSk7Cit9CitzdGF0aWMgdm9pZCBzYW1wbGVfcHJvYmVfYXN5bmModm9pZCkKK3sKKwkvKiBMZXQncyBzYXkgdGhhdCBJIGNhbid0IHNsZWVwICovCisJaW50IGVycm9yOworCWVycm9yID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQgKFRISVNfTU9EVUxFLAorCQkJCQkgInNhbXBsZV9kcml2ZXJfZnciLCAmZ2hvc3RfZGV2aWNlLAorCQkJCQkgIm15IGRldmljZSBwb2ludGVyIiwKKwkJCQkJIHNhbXBsZV9wcm9iZV9hc3luY19jb250KTsKKwlpZihlcnJvcil7CisJCXByaW50ayhLRVJOX0VSUiAKKwkJICAgICAgICJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiIKKwkJICAgICAgICIgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQgZmFpbGVkXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2FtcGxlX2luaXQodm9pZCkKK3sKKyNpZmRlZiBXRV9DQU5fTkVFRF9GSVJNV0FSRV9CRUZPUkVfVVNFUlNQQUNFX0lTX0FWQUlMQUJMRQorCXJlZ2lzdGVyX2Zpcm13YXJlKCJzYW1wbGVfZHJpdmVyX2Z3IiwgaW5rZXJuZWxfZmlybXdhcmUsCisJCQkgIHNpemVvZihpbmtlcm5lbF9maXJtd2FyZSkpOworI2VuZGlmCisJZGV2aWNlX2luaXRpYWxpemUoJmdob3N0X2RldmljZSk7CisJLyogc2luY2UgdGhlcmUgaXMgbm8gcmVhbCBoYXJkd2FyZSBpbnNlcnRpb24gSSBqdXN0IGNhbGwgdGhlCisJICogc2FtcGxlIHByb2JlIGZ1bmN0aW9ucyBoZXJlICovCisJc2FtcGxlX3Byb2JlX3NwZWNpZmljKCk7CisJc2FtcGxlX3Byb2JlX2RlZmF1bHQoKTsKKwlzYW1wbGVfcHJvYmVfYXN5bmMoKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzYW1wbGVfZXhpdCh2b2lkKQoreworfQorCittb2R1bGVfaW5pdCAoc2FtcGxlX2luaXQpOworbW9kdWxlX2V4aXQgKHNhbXBsZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2Zpcm13YXJlX2NsYXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllYWIyZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2Zpcm13YXJlX2NsYXNzLmMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBmaXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYyAtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIE1hbnVlbCBFc3RyYWRhIFNhaW56IDxyYW50eUBkZWJpYW4ub3JnPgorICoKKyAqIE5PVEU6IFRoaXMgaXMganVzdCBhIHByb2JlIG9mIGNvbmNlcHQsIGlmIHlvdSB0aGluayB0aGF0IHlvdXIgZHJpdmVyIHdvdWxkCisgKiBiZSB3ZWxsIHNlcnZlZCBieSB0aGlzIG1lY2hhbmlzbSBwbGVhc2UgY29udGFjdCBtZSBmaXJzdC4KKyAqCisgKiBET04nVCBVU0UgVEhJUyBDT0RFIEFTIElTCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBFc3RyYWRhIFNhaW56IDxyYW50eUBkZWJpYW4ub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJIYWNraXNoIHNhbXBsZSBmb3IgdXNpbmcgZmlybXdhcmUgY2xhc3MgZGlyZWN0bHkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xhc3NfZGV2aWNlICp0b19jbGFzc19kZXYoc3RydWN0IGtvYmplY3QgKm9iaikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG9iaixzdHJ1Y3QgY2xhc3NfZGV2aWNlLGtvYmopOworfQorc3RhdGljIGlubGluZQorc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnRvX2NsYXNzX2Rldl9hdHRyKHN0cnVjdCBhdHRyaWJ1dGUgKl9hdHRyKQoreworCXJldHVybiBjb250YWluZXJfb2YoX2F0dHIsc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUsYXR0cik7Cit9CisKK2ludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqIGF0dHIpOworaW50IHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cik7CisKK3N0cnVjdCBmaXJtd2FyZV9wcml2IHsKKwljaGFyIGZ3X2lkW0ZJUk1XQVJFX05BTUVfTUFYXTsKKwlzMzIgbG9hZGluZzoyOworCXUzMiBhYm9ydDoxOworfTsKKworZXh0ZXJuIHN0cnVjdCBjbGFzcyBmaXJtd2FyZV9jbGFzczsKKworc3RhdGljIHNzaXplX3QgZmlybXdhcmVfbG9hZGluZ19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZndfcHJpdi0+bG9hZGluZyk7Cit9CitzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9sb2FkaW5nX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7CisJaW50IHByZXZfbG9hZGluZyA9IGZ3X3ByaXYtPmxvYWRpbmc7CisKKwlmd19wcml2LT5sb2FkaW5nID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwkKKwlzd2l0Y2goZndfcHJpdi0+bG9hZGluZyl7CisJY2FzZSAtMToKKwkJLyogYWJvcnQgbG9hZCBhbiBwYW5pYyAqLworCQlicmVhazsKKwljYXNlIDE6CisJCS8qIHNldHVwIGxvYWQgKi8KKwkJYnJlYWs7CisJY2FzZSAwOgorCQlpZihwcmV2X2xvYWRpbmc9PTEpeworCQkJLyogZmluaXNoIGxvYWQgYW5kIGdldCB0aGUgZGV2aWNlIGJhY2sgdG8gd29ya2luZworCQkJICogc3RhdGUgKi8KKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobG9hZGluZywgMDY0NCwKKwkJCSBmaXJtd2FyZV9sb2FkaW5nX3Nob3csIGZpcm13YXJlX2xvYWRpbmdfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9kYXRhX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBjaGFyICpidWZmZXIsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSB0b19jbGFzc19kZXYoa29iaik7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOworCisJLyogcmVhZCBmcm9tIHRoZSBkZXZpY2VzIGZpcm13YXJlIG1lbW9yeSAqLworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIHNzaXplX3QgZmlybXdhcmVfZGF0YV93cml0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICBjaGFyICpidWZmZXIsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSB0b19jbGFzc19kZXYoa29iaik7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOworCisJLyogd3JpdGUgdG8gdGhlIGRldmljZXMgZmlybXdhcmUgbWVtb3J5ICovCisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgZmlybXdhcmVfYXR0cl9kYXRhID0geworCS5hdHRyID0gey5uYW1lID0gImRhdGEiLCAubW9kZSA9IDA2NDR9LAorCS5zaXplID0gMCwKKwkucmVhZCA9IGZpcm13YXJlX2RhdGFfcmVhZCwKKwkud3JpdGUgPSBmaXJtd2FyZV9kYXRhX3dyaXRlLAorfTsKK3N0YXRpYyBpbnQgZndfc2V0dXBfY2xhc3NfZGV2aWNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKKwkJCQkgY29uc3QgY2hhciAqZndfbmFtZSwKKwkJCQkgc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZpcm13YXJlX3ByaXYpLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwlpZighZndfcHJpdil7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwltZW1zZXQoZndfcHJpdiwgMCwgc2l6ZW9mKCpmd19wcml2KSk7CisJbWVtc2V0KGNsYXNzX2RldiwgMCwgc2l6ZW9mKCpjbGFzc19kZXYpKTsKKworCXN0cm5jcHkoZndfcHJpdi0+ZndfaWQsIGZ3X25hbWUsIEZJUk1XQVJFX05BTUVfTUFYKTsKKwlmd19wcml2LT5md19pZFtGSVJNV0FSRV9OQU1FX01BWC0xXSA9ICdcMCc7CisKKwlzdHJuY3B5KGNsYXNzX2Rldi0+Y2xhc3NfaWQsIGRldmljZS0+YnVzX2lkLCBCVVNfSURfU0laRSk7CisJY2xhc3NfZGV2LT5jbGFzc19pZFtCVVNfSURfU0laRS0xXSA9ICdcMCc7CisJY2xhc3NfZGV2LT5kZXYgPSBkZXZpY2U7CisKKwljbGFzc19kZXYtPmNsYXNzID0gJmZpcm13YXJlX2NsYXNzLAorCWNsYXNzX3NldF9kZXZkYXRhKGNsYXNzX2RldiwgZndfcHJpdik7CisJcmV0dmFsID0gY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKGNsYXNzX2Rldik7CisJaWYgKHJldHZhbCl7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNsYXNzX2RldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGVycm9yX2ZyZWVfZndfcHJpdjsKKwl9CisKKwlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmNsYXNzX2Rldi0+a29iaiwgJmZpcm13YXJlX2F0dHJfZGF0YSk7CisJaWYgKHJldHZhbCl7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSBmYWlsZWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGVycm9yX3VucmVnX2NsYXNzX2RldjsKKwl9CisKKwlyZXR2YWwgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xhc3NfZGV2LAorCQkJCQkgICZjbGFzc19kZXZpY2VfYXR0cl9sb2FkaW5nKTsKKwlpZiAocmV0dmFsKXsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3JfcmVtb3ZlX2RhdGE7CisJfQorCisJZ290byBvdXQ7CisJCitlcnJvcl9yZW1vdmVfZGF0YToKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmNsYXNzX2Rldi0+a29iaiwgJmZpcm13YXJlX2F0dHJfZGF0YSk7CitlcnJvcl91bnJlZ19jbGFzc19kZXY6CisJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoY2xhc3NfZGV2KTsKK2Vycm9yX2ZyZWVfZndfcHJpdjoKKwlrZnJlZShmd19wcml2KTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorc3RhdGljIHZvaWQgZndfcmVtb3ZlX2NsYXNzX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpCit7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOworCisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGNsYXNzX2RldiwgJmNsYXNzX2RldmljZV9hdHRyX2xvYWRpbmcpOworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmY2xhc3NfZGV2LT5rb2JqLCAmZmlybXdhcmVfYXR0cl9kYXRhKTsKKwljbGFzc19kZXZpY2VfdW5yZWdpc3RlcihjbGFzc19kZXYpOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OworCitzdGF0aWMgc3RydWN0IGRldmljZSBteV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICA9ICJTYW1wbGUgRGV2aWNlIiwKKwkuYnVzX2lkICAgID0gIm15X2RldjAiLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZmlybXdhcmVfc2FtcGxlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmbXlfZGV2aWNlKTsKKwljbGFzc19kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2xhc3NfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYoIWNsYXNzX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnJvciA9IGZ3X3NldHVwX2NsYXNzX2RldmljZShjbGFzc19kZXYsICJteV9maXJtd2FyZV9pbWFnZSIsCisJCQkJICAgICAgJm15X2RldmljZSk7CisJaWYoZXJyb3IpeworCQlrZnJlZShjbGFzc19kZXYpOworCQlyZXR1cm4gZXJyb3I7CisJfQorICAgICAgICByZXR1cm4gMDsKKworfQorc3RhdGljIHZvaWQgX19leGl0IGZpcm13YXJlX3NhbXBsZV9leGl0KHZvaWQpCit7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOworCWZ3X3JlbW92ZV9jbGFzc19kZXZpY2UoY2xhc3NfZGV2KTsKKwlrZnJlZShmd19wcml2KTsKKwlrZnJlZShjbGFzc19kZXYpOworfQorbW9kdWxlX2luaXQoZmlybXdhcmVfc2FtcGxlX2luaXQpOworbW9kdWxlX2V4aXQoZmlybXdhcmVfc2FtcGxlX2V4aXQpOworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2hvdHBsdWctc2NyaXB0IGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9ob3RwbHVnLXNjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkwMTMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9ob3RwbHVnLXNjcmlwdApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworIyBTaW1wbGUgaG90cGx1ZyBzY3JpcHQgc2FtcGxlOgorIyAKKyMgQm90aCAkREVWUEFUSCBhbmQgJEZJUk1XQVJFIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGluIHRoZSBlbnZpcm9ubWVudC4KKworSE9UUExVR19GV19ESVI9L3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS8KKworZWNobyAxID4gL3N5cy8kREVWUEFUSC9sb2FkaW5nCitjYXQgJEhPVFBMVUdfRldfRElSLyRGSVJNV0FSRSA+IC9zeXMvJERFVlBBVEgvZGF0YQorZWNobyAwID4gL3N5cy8kREVWUEFUSC9sb2FkaW5nCisKKyMgVG8gY2FuY2VsIHRoZSBsb2FkIGluIGNhc2Ugb2YgZXJyb3I6CisjCisjCWVjaG8gLTEgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKKyMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmxvcHB5LnR4dCBiL0RvY3VtZW50YXRpb24vZmxvcHB5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmIxMGZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mbG9wcHkudHh0CkBAIC0wLDAgKzEsMjQ1IEBACitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBmbG9wcHkgZHJpdmVyLgorCitGQVEgbGlzdDoKKz09PT09PT09PQorCisgQSBGQVEgbGlzdCBtYXkgYmUgZm91bmQgaW4gdGhlIGZkdXRpbHMgcGFja2FnZSAoc2VlIGJlbG93KSwgYW5kIGFsc28KK2F0IGh0dHA6Ly9mZHV0aWxzLmxpbnV4Lmx1L0ZBUS5odG1sCisKKworTElMTyBjb25maWd1cmF0aW9uIG9wdGlvbnMgKFRoaW5rcGFkIHVzZXJzLCByZWFkIHRoaXMpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIFRoZSBmbG9wcHkgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlICdmbG9wcHk9JyBvcHRpb24gaW4KK2xpbG8uIFRoaXMgb3B0aW9uIGNhbiBiZSB0eXBlZCBhdCB0aGUgYm9vdCBwcm9tcHQsIG9yIGVudGVyZWQgaW4gdGhlCitsaWxvIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworIEV4YW1wbGU6IElmIHlvdXIga2VybmVsIGlzIGNhbGxlZCBsaW51eC0yLjYuOSwgdHlwZSB0aGUgZm9sbG93aW5nIGxpbmUKK2F0IHRoZSBsaWxvIGJvb3QgcHJvbXB0IChpZiB5b3UgaGF2ZSBhIHRoaW5rcGFkKToKKworIGxpbnV4LTIuNi45IGZsb3BweT10aGlua3BhZAorCitZb3UgbWF5IGFsc28gZW50ZXIgdGhlIGZvbGxvd2luZyBsaW5lIGluIC9ldGMvbGlsby5jb25mLCBpbiB0aGUgZGVzY3JpcHRpb24KK29mIGxpbnV4LTIuNi45OgorCisgYXBwZW5kID0gImZsb3BweT10aGlua3BhZCIKKworIFNldmVyYWwgZmxvcHB5IHJlbGF0ZWQgb3B0aW9ucyBtYXkgYmUgZ2l2ZW4sIGV4YW1wbGU6CisKKyBsaW51eC0yLjYuOSBmbG9wcHk9ZGFyaW5nIGZsb3BweT10d29fZmRjCisgYXBwZW5kID0gImZsb3BweT1kYXJpbmcgZmxvcHB5PXR3b19mZGMiCisKKyBJZiB5b3UgZ2l2ZSBvcHRpb25zIGJvdGggaW4gdGhlIGxpbG8gY29uZmlnIGZpbGUgYW5kIG9uIHRoZSBib290Citwcm9tcHQsIHRoZSBvcHRpb24gc3RyaW5ncyBvZiBib3RoIHBsYWNlcyBhcmUgY29uY2F0ZW5hdGVkLCB0aGUgYm9vdAorcHJvbXB0IG9wdGlvbnMgY29taW5nIGxhc3QuIFRoYXQncyB3aHkgdGhlcmUgYXJlIGFsc28gb3B0aW9ucyB0bworcmVzdG9yZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKworCitNb2R1bGUgY29uZmlndXJhdGlvbiBvcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyBJZiB5b3UgdXNlIHRoZSBmbG9wcHkgZHJpdmVyIGFzIGEgbW9kdWxlLCB1c2UgdGhlIGZvbGxvd2luZyBzeW50YXg6Cittb2Rwcm9iZSBmbG9wcHkgPG9wdGlvbnM+CisKK0V4YW1wbGU6CisgbW9kcHJvYmUgZmxvcHB5IG9tbmlib29rIG1lc3NhZ2VzCisKKyBJZiB5b3UgbmVlZCBjZXJ0YWluIG9wdGlvbnMgZW5hYmxlZCBldmVyeSB0aW1lIHlvdSBsb2FkIHRoZSBmbG9wcHkgZHJpdmVyLAoreW91IGNhbiBwdXQ6CisKKyBvcHRpb25zIGZsb3BweSBvbW5pYm9vayBtZXNzYWdlcworCitpbiAvZXRjL21vZHByb2JlLmNvbmYuCisKKworIFRoZSBmbG9wcHkgZHJpdmVyIHJlbGF0ZWQgb3B0aW9ucyBhcmU6CisKKyBmbG9wcHk9YXN1c19wY2kKKwlTZXRzIHRoZSBiaXQgbWFzayB0byBhbGxvdyBvbmx5IHVuaXRzIDAgYW5kIDEuIChkZWZhdWx0KQorCisgZmxvcHB5PWRhcmluZworCVRlbGxzIHRoZSBmbG9wcHkgZHJpdmVyIHRoYXQgeW91IGhhdmUgYSB3ZWxsIGJlaGF2ZWQgZmxvcHB5IGNvbnRyb2xsZXIuCisJVGhpcyBhbGxvd3MgbW9yZSBlZmZpY2llbnQgYW5kIHNtb290aGVyIG9wZXJhdGlvbiwgYnV0IG1heSBmYWlsIG9uCisJY2VydGFpbiBjb250cm9sbGVycy4gVGhpcyBtYXkgc3BlZWQgdXAgY2VydGFpbiBvcGVyYXRpb25zLgorCisgZmxvcHB5PTAsZGFyaW5nCisJVGVsbHMgdGhlIGZsb3BweSBkcml2ZXIgdGhhdCB5b3VyIGZsb3BweSBjb250cm9sbGVyIHNob3VsZCBiZSB1c2VkCisJd2l0aCBjYXV0aW9uLgorCisgZmxvcHB5PW9uZV9mZGMKKwlUZWxscyB0aGUgZmxvcHB5IGRyaXZlciB0aGF0IHlvdSBoYXZlIG9ubHkgb25lIGZsb3BweSBjb250cm9sbGVyLgorCShkZWZhdWx0KQorCisgZmxvcHB5PXR3b19mZGMKKyBmbG9wcHk9PGFkZHJlc3M+LHR3b19mZGMKKwlUZWxscyB0aGUgZmxvcHB5IGRyaXZlciB0aGF0IHlvdSBoYXZlIHR3byBmbG9wcHkgY29udHJvbGxlcnMuCisJVGhlIHNlY29uZCBmbG9wcHkgY29udHJvbGxlciBpcyBhc3N1bWVkIHRvIGJlIGF0IDxhZGRyZXNzPi4KKwlUaGlzIG9wdGlvbiBpcyBub3QgbmVlZGVkIGlmIHRoZSBzZWNvbmQgY29udHJvbGxlciBpcyBhdCBhZGRyZXNzCisJMHgzNzAsIGFuZCBpZiB5b3UgdXNlIHRoZSAnY21vcycgb3B0aW9uLgorCisgZmxvcHB5PXRoaW5rcGFkCisJVGVsbHMgdGhlIGZsb3BweSBkcml2ZXIgdGhhdCB5b3UgaGF2ZSBhIFRoaW5rcGFkLiBUaGlua3BhZHMgdXNlIGFuCisJaW52ZXJ0ZWQgY29udmVudGlvbiBmb3IgdGhlIGRpc2sgY2hhbmdlIGxpbmUuCisKKyBmbG9wcHk9MCx0aGlua3BhZAorCVRlbGxzIHRoZSBmbG9wcHkgZHJpdmVyIHRoYXQgeW91IGRvbid0IGhhdmUgYSBUaGlua3BhZC4KKworIGZsb3BweT1vbW5pYm9vaworIGZsb3BweT1ub2RtYQorCVRlbGxzIHRoZSBmbG9wcHkgZHJpdmVyIG5vdCB0byB1c2UgRG1hIGZvciBkYXRhIHRyYW5zZmVycy4KKwlUaGlzIGlzIG5lZWRlZCBvbiBIUCBPbW5pYm9va3MsIHdoaWNoIGRvbid0IGhhdmUgYSB3b3JrYWJsZQorCURNQSBjaGFubmVsIGZvciB0aGUgZmxvcHB5IGRyaXZlci4gVGhpcyBvcHRpb24gaXMgYWxzbyB1c2VmdWwKKwlpZiB5b3UgZnJlcXVlbnRseSBnZXQgIlVuYWJsZSB0byBhbGxvY2F0ZSBETUEgbWVtb3J5IiBtZXNzYWdlcy4KKwlJbmRlZWQsIGRtYSBtZW1vcnkgbmVlZHMgdG8gYmUgY29udGludW91cyBpbiBwaHlzaWNhbCBtZW1vcnksCisJYW5kIGlzIHRodXMgaGFyZGVyIHRvIGZpbmQsIHdoZXJlYXMgbm9uLWRtYSBidWZmZXJzIG1heSBiZQorCWFsbG9jYXRlZCBpbiB2aXJ0dWFsIG1lbW9yeS4gSG93ZXZlciwgSSBhZHZpc2UgYWdhaW5zdCB0aGlzIGlmCisJeW91IGhhdmUgYW4gRkRDIHdpdGhvdXQgYSBGSUZPICg4MjcyQSBvciA4MjA3MikuIDgyMDcyQSBhbmQKKwlsYXRlciBhcmUgT0suIFlvdSBhbHNvIG5lZWQgYXQgbGVhc3QgYSA0ODYgdG8gdXNlIG5vZG1hLgorCUlmIHlvdSB1c2Ugbm9kbWEgbW9kZSwgSSBzdWdnZXN0IHlvdSBhbHNvIHNldCB0aGUgRklGTworCXRocmVzaG9sZCB0byAxMCBvciBsb3dlciwgaW4gb3JkZXIgdG8gbGltaXQgdGhlIG51bWJlciBvZiBkYXRhCisJdHJhbnNmZXIgaW50ZXJydXB0cy4KKworCUlmIHlvdSBoYXZlIGEgRklGTy1hYmxlIEZEQywgdGhlIGZsb3BweSBkcml2ZXIgYXV0b21hdGljYWxseQorCWZhbGxzIGJhY2sgb24gbm9uIERNQSBtb2RlIGlmIG5vIERNQS1hYmxlIG1lbW9yeSBjYW4gYmUgZm91bmQuCisJSWYgeW91IHdhbnQgdG8gYXZvaWQgdGhpcywgZXhwbGljaXRseSBhc2sgZm9yICd5ZXNkbWEnLgorCisgZmxvcHB5PXllc2RtYQorCVRlbGxzIHRoZSBmbG9wcHkgZHJpdmVyIHRoYXQgYSB3b3JrYWJsZSBETUEgY2hhbm5lbCBpcyBhdmFpbGFibGUuCisJKGRlZmF1bHQpCisKKyBmbG9wcHk9bm9maWZvCisJRGlzYWJsZXMgdGhlIEZJRk8gZW50aXJlbHkuIFRoaXMgaXMgbmVlZGVkIGlmIHlvdSBnZXQgIkJ1cworCW1hc3RlciBhcmJpdHJhdGlvbiBlcnJvciIgbWVzc2FnZXMgZnJvbSB5b3VyIEV0aGVybmV0IGNhcmQgKG9yCisJZnJvbSBvdGhlciBkZXZpY2VzKSB3aGlsZSBhY2Nlc3NpbmcgdGhlIGZsb3BweS4KKworIGZsb3BweT11c2VmaWZvCisJRW5hYmxlcyB0aGUgRklGTy4gKGRlZmF1bHQpCisKKyBmbG9wcHk9PHRocmVzaG9sZD4sZmlmb19kZXB0aAorCVNldHMgdGhlIEZJRk8gdGhyZXNob2xkLiBUaGlzIGlzIG1vc3RseSByZWxldmFudCBpbiBETUEKKwltb2RlLiBJZiB0aGlzIGlzIGhpZ2hlciwgdGhlIGZsb3BweSBkcml2ZXIgdG9sZXJhdGVzIG1vcmUKKwlpbnRlcnJ1cHQgbGF0ZW5jeSwgYnV0IGl0IHRyaWdnZXJzIG1vcmUgaW50ZXJydXB0cyAoaS5lLiBpdAorCWltcG9zZXMgbW9yZSBsb2FkIG9uIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0pLiBJZiB0aGlzIGlzCisJbG93ZXIsIHRoZSBpbnRlcnJ1cHQgbGF0ZW5jeSBzaG91bGQgYmUgbG93ZXIgdG9vIChmYXN0ZXIKKwlwcm9jZXNzb3IpLiBUaGUgYmVuZWZpdCBvZiBhIGxvd2VyIHRocmVzaG9sZCBpcyBsZXNzCisJaW50ZXJydXB0cy4KKworCVRvIHR1bmUgdGhlIGZpZm8gdGhyZXNob2xkLCBzd2l0Y2ggb24gb3Zlci91bmRlcnJ1biBtZXNzYWdlcworCXVzaW5nICdmbG9wcHljb250cm9sIC0tbWVzc2FnZXMnLiBUaGVuIGFjY2VzcyBhIGZsb3BweQorCWRpc2suIElmIHlvdSBnZXQgYSBodWdlIGFtb3VudCBvZiAiT3Zlci9VbmRlcnJ1biAtIHJldHJ5aW5nIgorCW1lc3NhZ2VzLCB0aGVuIHRoZSBmaWZvIHRocmVzaG9sZCBpcyB0b28gbG93LiBUcnkgd2l0aCBhCisJaGlnaGVyIHZhbHVlLCB1bnRpbCB5b3Ugb25seSBnZXQgYW4gb2NjYXNpb25hbCBPdmVyL1VuZGVycnVuLgorCUl0IGlzIGEgZ29vZCBpZGVhIHRvIGNvbXBpbGUgdGhlIGZsb3BweSBkcml2ZXIgYXMgYSBtb2R1bGUKKwl3aGVuIGRvaW5nIHRoaXMgdHVuaW5nLiBJbmRlZWQsIGl0IGFsbG93cyB0byB0cnkgZGlmZmVyZW50CisJZmlmbyB2YWx1ZXMgd2l0aG91dCByZWJvb3RpbmcgdGhlIG1hY2hpbmUgZm9yIGVhY2ggdGVzdC4gTm90ZQorCXRoYXQgeW91IG5lZWQgdG8gZG8gJ2Zsb3BweWNvbnRyb2wgLS1tZXNzYWdlcycgZXZlcnkgdGltZSB5b3UKKwlyZS1pbnNlcnQgdGhlIG1vZHVsZS4KKworCVVzdWFsbHksIHR1bmluZyB0aGUgZmlmbyB0aHJlc2hvbGQgc2hvdWxkIG5vdCBiZSBuZWVkZWQsIGFzCisJdGhlIGRlZmF1bHQgKDB4YSkgaXMgcmVhc29uYWJsZS4KKworIGZsb3BweT08ZHJpdmU+LDx0eXBlPixjbW9zCisJU2V0cyB0aGUgQ01PUyB0eXBlIG9mIDxkcml2ZT4gdG8gPHR5cGU+LiBUaGlzIGlzIG1hbmRhdG9yeSBpZgorCXlvdSBoYXZlIG1vcmUgdGhhbiB0d28gZmxvcHB5IGRyaXZlcyAob25seSB0d28gY2FuIGJlCisJZGVzY3JpYmVkIGluIHRoZSBwaHlzaWNhbCBDTU9TKSwgb3IgaWYgeW91ciBCSU9TIHVzZXMKKwlub24tc3RhbmRhcmQgQ01PUyB0eXBlcy4gVGhlIENNT1MgdHlwZXMgYXJlOgorCisJCTAgLSBVc2UgdGhlIHZhbHVlIG9mIHRoZSBwaHlzaWNhbCBDTU9TCisJCTEgLSA1IDEvNCBERAorCQkyIC0gNSAxLzQgSEQKKwkJMyAtIDMgMS8yIERECisJCTQgLSAzIDEvMiBIRAorCQk1IC0gMyAxLzIgRUQKKwkJNiAtIDMgMS8yIEVECisJICAgICAgIDE2IC0gdW5rbm93biBvciBub3QgaW5zdGFsbGVkCisKKwkoTm90ZTogdGhlcmUgYXJlIHR3byB2YWxpZCB0eXBlcyBmb3IgRUQgZHJpdmVzLiBUaGlzIGlzIGJlY2F1c2UgNSB3YXMKKwlpbml0aWFsbHkgY2hvc2VuIHRvIHJlcHJlc2VudCBmbG9wcHkgKnRhcGVzKiwgYW5kIDYgZm9yIEVEIGRyaXZlcy4KKwlBTUkgaWdub3JlZCB0aGlzLCBhbmQgdXNlZCA1IGZvciBFRCBkcml2ZXMuIFRoYXQncyB3aHkgdGhlIGZsb3BweQorCWRyaXZlciBoYW5kbGVzIGJvdGguKQorCisgZmxvcHB5PXVuZXhwZWN0ZWRfaW50ZXJydXB0cworCVByaW50IGEgd2FybmluZyBtZXNzYWdlIHdoZW4gYW4gdW5leHBlY3RlZCBpbnRlcnJ1cHQgaXMgcmVjZWl2ZWQuCisJKGRlZmF1bHQpCisKKyBmbG9wcHk9bm9fdW5leHBlY3RlZF9pbnRlcnJ1cHRzCisgZmxvcHB5PUw0MFNYCisJRG9uJ3QgcHJpbnQgYSBtZXNzYWdlIHdoZW4gYW4gdW5leHBlY3RlZCBpbnRlcnJ1cHQgaXMgcmVjZWl2ZWQuIFRoaXMKKwlpcyBuZWVkZWQgb24gSUJNIEw0MFNYIGxhcHRvcHMgaW4gY2VydGFpbiB2aWRlbyBtb2Rlcy4gKFRoZXJlIHNlZW1zCisJdG8gYmUgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiB2aWRlbyBhbmQgZmxvcHB5LiBUaGUgdW5leHBlY3RlZAorCWludGVycnVwdHMgYWZmZWN0IG9ubHkgcGVyZm9ybWFuY2UsIGFuZCBjYW4gYmUgc2FmZWx5IGlnbm9yZWQuKQorCisgZmxvcHB5PWJyb2tlbl9kY2wKKwlEb24ndCB1c2UgdGhlIGRpc2sgY2hhbmdlIGxpbmUsIGJ1dCBhc3N1bWUgdGhhdCB0aGUgZGlzayB3YXMKKwljaGFuZ2VkIHdoZW5ldmVyIHRoZSBkZXZpY2Ugbm9kZSBpcyByZW9wZW5lZC4gTmVlZGVkIG9uIHNvbWUKKwlib3hlcyB3aGVyZSB0aGUgZGlzayBjaGFuZ2UgbGluZSBpcyBicm9rZW4gb3IgdW5zdXBwb3J0ZWQuCisJVGhpcyBzaG91bGQgYmUgcmVnYXJkZWQgYXMgYSBzdG9wZ2FwIG1lYXN1cmUsIGluZGVlZCBpdCBtYWtlcworCWZsb3BweSBvcGVyYXRpb24gbGVzcyBlZmZpY2llbnQgZHVlIHRvIHVubmVlZGVkIGNhY2hlCisJZmx1c2hpbmdzLCBhbmQgc2xpZ2h0bHkgbW9yZSB1bnJlbGlhYmxlLiBQbGVhc2UgdmVyaWZ5IHlvdXIKKwljYWJsZSwgY29ubmVjdGlvbiBhbmQganVtcGVyIHNldHRpbmdzIGlmIHlvdSBoYXZlIGFueSBEQ0wKKwlwcm9ibGVtcy4gSG93ZXZlciwgc29tZSBvbGRlciBkcml2ZXMsIGFuZCBhbHNvIHNvbWUgbGFwdG9wcworCWFyZSBrbm93biBub3QgdG8gaGF2ZSBhIERDTC4KKworIGZsb3BweT1kZWJ1ZworCVByaW50IGRlYnVnZ2luZyBtZXNzYWdlcy4KKworIGZsb3BweT1tZXNzYWdlcworCVByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgZm9yIHNvbWUgb3BlcmF0aW9ucyAoZGlzayBjaGFuZ2UKKwlub3RpZmljYXRpb25zLCB3YXJuaW5ncyBhYm91dCBvdmVyIGFuZCB1bmRlcnJ1bnMsIGFuZCBhYm91dAorCWF1dG9kZXRlY3Rpb24pLgorCisgZmxvcHB5PXNpbGVudF9kY2xfY2xlYXIKKwlVc2VzIGEgbGVzcyBub2lzeSB3YXkgdG8gY2xlYXIgdGhlIGRpc2sgY2hhbmdlIGxpbmUgKHdoaWNoCisJZG9lc24ndCBpbnZvbHZlIHNlZWtzKS4gSW1wbGllZCBieSAnZGFyaW5nJyBvcHRpb24uCisKKyBmbG9wcHk9PG5yPixpcnEKKwlTZXRzIHRoZSBmbG9wcHkgSVJRIHRvIDxucj4gaW5zdGVhZCBvZiA2LgorCisgZmxvcHB5PTxucj4sZG1hCisJU2V0cyB0aGUgZmxvcHB5IERNQSBjaGFubmVsIHRvIDxucj4gaW5zdGVhZCBvZiAyLgorCisgZmxvcHB5PXNsb3cKKwlVc2UgUFMvMiBzdGVwcGluZyByYXRlOgorCSAiIFBTLzIgZmxvcHBpZXMgaGF2ZSBtdWNoIHNsb3dlciBzdGVwIHJhdGVzIHRoYW4gcmVndWxhciBmbG9wcGllcy4KKwkgICBJdCdzIGJlZW4gcmVjb21tZW5kZWQgdGhhdCB0YWtlIGFib3V0IDEvNCBvZiB0aGUgZGVmYXVsdCBzcGVlZAorCSAgIGluIHNvbWUgbW9yZSBleHRyZW1lIGNhc2VzLiIKKworCitTdXBwb3J0aW5nIHV0aWxpdGllcyBhbmQgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIEFkZGl0aW9uYWwgcGFyYW1ldGVycyBvZiB0aGUgZmxvcHB5IGRyaXZlciBjYW4gYmUgY29uZmlndXJlZCBhdAorcnVudGltZS4gVXRpbGl0aWVzIHdoaWNoIGRvIHRoaXMgY2FuIGJlIGZvdW5kIGluIHRoZSBmZHV0aWxzIHBhY2thZ2UuCitUaGlzIHBhY2thZ2UgYWxzbyBjb250YWlucyBhIG5ldyB2ZXJzaW9uIG9mIG10b29scyB3aGljaCBhbGxvd3MgdG8KK2FjY2VzcyBoaWdoIGNhcGFjaXR5IGRpc2tzICh1cCB0byAxOTkySyBvbiBhIGhpZ2ggZGVuc2l0eSAzIDEvMiBkaXNrISkuCitJdCBhbHNvIGNvbnRhaW5zIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgZmxvcHB5IGRyaXZlci4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIGNhbiBiZSBmb3VuZCBhdCBmZHV0aWxzIGhvbWVwYWdlOgorIGh0dHA6Ly9mZHV0aWxzLmxpbnV4Lmx1CisKK1RoZSBmZHV0aWxzLTUuNCByZWxlYXNlIGNhbiBiZSBmb3VuZCBhdDoKKyBodHRwOi8vZmR1dGlscy5saW51eC5sdS9mZHV0aWxzLTUuNC5zcmMudGFyLmd6CisgaHR0cDovL3d3dy50dXgub3JnL3B1Yi9rbmFmZi9mZHV0aWxzL2ZkdXRpbHMtNS40LnNyYy50YXIuZ3oKKyBmdHA6Ly9tZXRhbGFiLnVuYy5lZHUvcHViL0xpbnV4L3V0aWxzL2Rpc2stbWFuYWdlbWVudC9mZHV0aWxzLTUuNC5zcmMudGFyLmd6CisKK1JlcG9ydGluZyBwcm9ibGVtcyBhYm91dCB0aGUgZmxvcHB5IGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyBJZiB5b3UgaGF2ZSBhIHF1ZXN0aW9uIG9yIGEgYnVnIHJlcG9ydCBhYm91dCB0aGUgZmxvcHB5IGRyaXZlciwgbWFpbAorbWUgYXQgQWxhaW4uS25hZmZAcG9ib3hlcy5jb20gLiBJZiB5b3UgcG9zdCB0byBVc2VuZXQsIHByZWZlcmFibHkgdXNlCitjb21wLm9zLmxpbnV4LmhhcmR3YXJlLiBBcyB0aGUgdm9sdW1lIGluIHRoZXNlIGdyb3VwcyBpcyByYXRoZXIgaGlnaCwKK2JlIHN1cmUgdG8gaW5jbHVkZSB0aGUgd29yZCAiZmxvcHB5IiAob3IgIkZMT1BQWSIpIGluIHRoZSBzdWJqZWN0CitsaW5lLiAgSWYgdGhlIHJlcG9ydGVkIHByb2JsZW0gaGFwcGVucyB3aGVuIG1vdW50aW5nIGZsb3BweSBkaXNrcywgYmUKK3N1cmUgdG8gbWVudGlvbiBhbHNvIHRoZSB0eXBlIG9mIHRoZSBmaWxlc3lzdGVtIGluIHRoZSBzdWJqZWN0IGxpbmUuCisKKyBCZSBzdXJlIHRvIHJlYWQgdGhlIEZBUSBiZWZvcmUgbWFpbGluZy9wb3N0aW5nIGFueSBidWcgcmVwb3J0cyEKKworIEFsYWluCisKK0NoYW5nZWxvZworPT09PT09PT09CisKKzEwLTMwLTIwMDQgOglDbGVhbnVwLCB1cGRhdGluZywgYWRkIHJlZmVyZW5jZSB0byBtb2R1bGUgY29uZmlndXJhdGlvbi4KKwkJSmFtZXMgTmVsc29uIDxqYW1lczQ3NjVAZ21haWwuY29tPgorCis2LTMtMjAwMCA6CU9yaWdpbmFsIERvY3VtZW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z0YXBlLnR4dCBiL0RvY3VtZW50YXRpb24vZnRhcGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOGJiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Z0YXBlLnR4dApAQCAtMCwwICsxLDMwNyBAQAorSW50cm8KKz09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgc29tZSBpc3N1ZXMgaW52b2x2ZWQgd2hlbiB1c2luZyB0aGUgImZ0YXBlIgorZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlciB0aGF0IGNvbWVzIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KKworZnRhcGUgaGFzIGEgaG9tZSBwYWdlIGF0CisKK2h0dHA6Ly9mdGFwZS5kb3QtaGVpbmUuZGUvCisKK3doaWNoIGNvbnRhaW5zIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgZnRhcGUuIFBsZWFzZSBjcm9zcyBjaGVjawordGhpcyBXV1cgYWRkcmVzcyBhZ2FpbnN0IHRoZSBhZGRyZXNzIGdpdmVuIChpZiBhbnkpIGluIHRoZSBNQUlOVEFJTkVSUworZmlsZSBsb2NhdGVkIGluIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBMaW51eCBrZXJuZWwgc291cmNlCit0cmVlLgorCitOT1RFOiBUaGlzIGlzIGFuIHVubWFpbnRhaW5lZCBzZXQgb2YgZHJpdmVycywgYW5kIGl0IGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsuCitJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdGFraW5nIG92ZXIgbWFpbnRlbmFuY2UsIGNvbnRhY3QgQ2xhdXMtSnVzdHVzIEhlaW5lCis8Y2hAZG90LWhlaW5lLmRlPiwgdGhlIGZvcm1lciBtYWludGFpbmVyLgorCitDb250ZW50cworPT09PT09PT0KKworQSBtaW51cyAxOiBGdGFwZSBkb2N1bWVudGF0aW9uCisKK0EuIENoYW5nZXMKKyAgIDEuIEdvYWwKKyAgIDIuIEkvTyBCbG9jayBTaXplCisgICAzLiBXcml0ZSBBY2Nlc3Mgd2hlbiBub3QgYXQgRU9EIChFbmQgT2YgRGF0YSkgb3IgQk9UIChCZWdpbiBPZiBUYXBlKQorICAgNC4gRm9ybWF0dGluZworICAgNS4gSW50ZXJjaGFuZ2luZyBjYXJ0cmlkZ2VzIHdpdGggb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMKKworQi4gRGVidWdnaW5nIE91dHB1dAorICAgMS4gSW50cm9kdWN0aW9uCisgICAyLiBUdW5pbmcgdGhlIGRlYnVnZ2luZyBvdXRwdXQKKworQy4gQm9vdCBhbmQgbG9hZCB0aW1lIGNvbmZpZ3VyYXRpb24KKyAgIDEuIFNldHRpbmcgYm9vdCB0aW1lIHBhcmFtZXRlcnMKKyAgIDIuIE1vZHVsZSBsb2FkIHRpbWUgcGFyYW1ldGVycworICAgMy4gRnRhcGUgYm9vdC0gYW5kIGxvYWQgdGltZSBvcHRpb25zCisgICA0LiBFeGFtcGxlIGtlcm5lbCBwYXJhbWV0ZXIgc2V0dGluZworICAgNS4gRXhhbXBsZSBtb2R1bGUgcGFyYW1ldGVyIHNldHRpbmcKKworRC4gU3VwcG9ydCBhbmQgY29udGFjdHMKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitBIG1pbnVzIDEuIEZ0YXBlIGRvY3VtZW50YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbmx1Y2tpbHksIHRoZSBmdGFwZS1IT1dUTyBpcyBvdXQgb2YgZGF0ZS4gVGhpcyByZWFsbHkgbmVlZHMgdG8gYmUKK2NoYW5nZWQuIFVwIHRvIGRhdGUgZG9jdW1lbnRhdGlvbiBhcyB3ZWxsIGFzIHJlY2VudCBkZXZlbG9wbWVudAordmVyc2lvbnMgb2YgZnRhcGUgYW5kIHVzZWZ1bCBsaW5rcyB0byByZWxhdGVkIHRvcGljcyBjYW4gYmUgZm91bmQgYXQKK3RoZSBmdGFwZSBob21lIHBhZ2UgYXQKKworaHR0cDovL2Z0YXBlLmRvdC1oZWluZS5kZS8KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitBLiBDaGFuZ2VzCis9PT09PT09PT09CisKKzEuIEdvYWwKKyAgIH5+fn4KKyAgIFRoZSBnb2FsIG9mIGFsbCB0aGF0IGluY29tcGF0aWJpbGl0aWVzIHdhcyB0byBnaXZlIGZ0YXBlIGFuIGludGVyZmFjZQorICAgdGhhdCByZXNlbWJsZXMgdGhlIGludGVyZmFjZSBwcm92aWRlZCBieSBTQ1NJIHRhcGUgZHJpdmVzIGFzIGNsb3NlCisgICBhcyBwb3NzaWJsZS4gVGh1cyBhbnkgVW5peCBiYWNrdXAgcHJvZ3JhbSB0aGF0IGlzIGtub3duIHRvIHdvcmsKKyAgIHdpdGggU0NTSSB0YXBlIGRyaXZlcyBzaG91bGQgYWxzbyB3b3JrLgorCisgICBUaGUgY29uY2VwdCBvZiBhIGZpeGVkIGJsb2NrIHNpemUgZm9yIHJlYWQvd3JpdGUgdHJhbnNmZXJzIGlzCisgICByYXRoZXIgdW5yZWxhdGVkIHRvIHRoaXMgU0NTSSB0YXBlIGNvbXBhdGliaWxpdHkgYXQgdGhlIGZpbGUgc3lzdGVtCisgICBpbnRlcmZhY2UgbGV2ZWwuIEl0IGRldmVsb3BlZCBvdXQgb2YgYSBmZWF0dXJlIG9mIHpmdGFwZSwgYQorICAgYmxvY2sgd2lzZSB1c2VyIHRyYW5zcGFyZW50IG9uLXRoZS1mbHkgY29tcHJlc3Npb24uIFRoYXQgY29tcHJlc3Npb24KKyAgIHN1cHBvcnQgd2lsbCBub3QgYmUgZHJvcHBlZCBpbiBmdXR1cmUgcmVsZWFzZXMgZm9yIGNvbXBhdGliaWxpdHkKKyAgIHJlYXNvbnMgd2l0aCBwcmV2aW91cyByZWxlYXNlcyBvZiB6ZnRhcGUuCisKKzIuIEkvTyBCbG9jayBTaXplCisgICB+fn5+fn5+fn5+fn5+fgorICAgVGhlIGJsb2NrIHNpemUgZGVmYXVsdHMgdG8gMTBrIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJsb2NrIHNpemUgb2YKKyAgIEdOVSB0YXIuCisKKyAgIFRoZSBibG9jayBzaXplIGNhbiBiZSB0dW5lZCBlaXRoZXIgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yCisgICBhdCBydW50aW1lIHdpdGggdGhlIE1USU9DVE9QIGlvY3RsIHVzaW5nIHRoZSBNVFNFVEJMSyBvcGVyYXRpb24KKyAgIChpLmUuIGRvICJtdCAtZiAvZGV2L3FmdDAiIHNldGJsayAjQkxLU1opLiBBIGJsb2NrIHNpemUgb2YgMAorICAgc3dpdGNoZXMgdG8gdmFyaWFibGUgYmxvY2sgc2l6ZSBtb2RlIGkuZS4gIm10IHNldGJsayAwIiBzd2l0Y2hlcworICAgb2ZmIHRoZSBibG9jayBzaXplIHJlc3RyaWN0aW9uLiBIb3dldmVyLCB0aGlzIGRpc2FibGVzIHpmdGFwZSdzCisgICBidWlsdCBpbiBvbi10aGUtZmx5IGNvbXByZXNzaW9uIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRoIHZhcmlhYmxlCisgICBibG9jayBzaXplIG1vZGUuCisKKyAgIFRoZSBCTEtTWiBwYXJhbWV0ZXIgbXVzdCBiZSBnaXZlbiBhcyBhIGJ5dGUgY291bnQgYW5kIG11c3QgYmUgYQorICAgbXVsdGlwbGUgb2YgMzJrIG9yIDAsIGkuZS4gdXNlICJtdCBzZXRibGsgMzI3NjgiIHRvIHN3aXRjaCB0byBhCisgICBibG9jayBzaXplIG9mIDMyay4KKworICAgVGhlIHR5cGljYWwgc3ltcHRvbSBvZiBhIGJsb2NrIHNpemUgbWlzbWF0Y2ggaXMgYW4gImludmFsaWQKKyAgIGFyZ3VtZW50IiBlcnJvciBtZXNzYWdlLgorCiszLiBXcml0ZSBBY2Nlc3Mgd2hlbiBub3QgYXQgRU9EIChFbmQgT2YgRGF0YSkgb3IgQk9UIChCZWdpbiBPZiBUYXBlKQorICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgIHpmdGFwZSAodGhlIGZpbGUgc3lzdGVtIGludGVyZmFjZSBvZiBmdGFwZS0zLngpIGRlbmllcyB3cml0ZSBhY2Nlc3MKKyAgIHRvIHRoZSB0YXBlIGNhcnRyaWRnZSB3aGVuIGl0IGlzbid0IHBvc2l0aW9uZWQgZWl0aGVyIGF0IEJPVCBvcgorICAgRU9ELgorCis0LiBGb3JtYXR0aW5nCisgICB+fn5+fn5+fn5+CisgICBmdGFwZSBET0VTIHN1cHBvcnQgZm9ybWF0dGluZyBvZiBmbG9wcHkgdGFwZSBjYXJ0cmlkZ2VzLiBZb3UgbmVlZCB0aGUKKyAgIGBmdGZvcm1hdCcgcHJvZ3JhbSB0aGF0IGlzIHNoaXBwZWQgd2l0aCB0aGUgbW9kdWxlcyB2ZXJzaW9uIG9mIGZ0YXBlLgorICAgUGxlYXNlIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZnRhcGUgZnJvbQorCisgICBmdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L2tlcm5lbC90YXBlcworCisgICBvciBmcm9tIHRoZSBmdGFwZSBob21lIHBhZ2UgYXQKKworICAgaHR0cDovL2Z0YXBlLmRvdC1oZWluZS5kZS8KKworICAgYGZ0Zm9ybWF0JyBpcyBjb250YWluZWQgaW4gdGhlIGAuL2NvbnRyaWIvJyBzdWJkaXJlY3Rvcnkgb2YgdGhhdAorICAgc2VwYXJhdGUgZnRhcGUgcGFja2FnZS4KKworNS4gSW50ZXJjaGFuZ2luZyBjYXJ0cmlkZ2VzIHdpdGggb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMKKyAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgIFRoZSBpbnRlcm5hbCBlbXVsYXRpb24gb2YgVW5peCB0YXBlIGRldmljZSBmaWxlIG1hcmtzIGhhcyBjaGFuZ2VkCisgICBjb21wbGV0ZWx5LiBmdGFwZSBub3cgdXNlcyB0aGUgdm9sdW1lIHRhYmxlIHNlZ21lbnQgYXMgc3BlY2lmaWVkCisgICBieSB0aGUgUUlDLTQwLzgwLzMwMTAvMzAyMC8xMTMgc3RhbmRhcmRzIHRvIGVtdWxhdGUgZmlsZSBtYXJrcy4gQXMKKyAgIGEgY29uc2VxdWVuY2UgdGhlcmUgaXMgbGltaXRlZCBzdXBwb3J0IHRvIGludGVyY2hhbmdlIGNhcnRyaWRnZXMKKyAgIHdpdGggb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCisKKyAgIFRvIGJlIG1vcmUgcHJlY2lzZTogZnRhcGUgd2lsbCBkZXRlY3Qgdm9sdW1lcyB3cml0dGVuIGJ5IG90aGVyIE9TJ3MKKyAgIHByb2dyYW1zIGFuZCBvdGhlciBPUydzIHByb2dyYW1zIHdpbGwgZGV0ZWN0IHZvbHVtZXMgd3JpdHRlbiBieQorICAgZnRhcGUuCisKKyAgIEhvd2V2ZXIsIGl0IGlzbid0IHBvc3NpYmxlIHRvIGV4dHJhY3QgdGhlIGRhdGEgZHVtcGVkIHRvIHRoZSB0YXBlCisgICBieSBzb21lIE1TRE9TIHByb2dyYW0gd2l0aCBmdGFwZS4gVGhpcyBleGNlZWRzIHRoZSBzY29wZSBvZiBhCisgICBrZXJuZWwgZGV2aWNlIGRyaXZlci4gSWYgeW91IG5lZWQgc3VjaCBmdW5jdGlvbmFsaXR5LCB0aGVuIGdvIGFoZWFkCisgICBhbmQgd3JpdGUgYSB1c2VyIHNwYWNlIHV0aWxpdHkgdGhhdCBpcyBhYmxlIHRvIGRvIHRoYXQuIGZ0YXBlIGFscmVhZHkKKyAgIHByb3ZpZGVzIGFsbCBrZXJuZWwgbGV2ZWwgc3VwcG9ydCBuZWNlc3NhcnkgdG8gZG8gdGhhdC4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitCLiBEZWJ1Z2dpbmcgT3V0cHV0CisgICA9PT09PT09PT09PT09PT09CisKKzEuIEludHJvZHVjdGlvbgorICAgfn5+fn5+fn5+fn5+CisgICBUaGUgZnRhcGUgZHJpdmVyIGNhbiBiZSB2ZXJ5IG5vaXN5IGluIHRoYXQgaXMgY2FuIHByaW50IGxvdHMgb2YKKyAgIGRlYnVnZ2luZyBtZXNzYWdlcyB0byB0aGUga2VybmVsIGxvZyBmaWxlcyBhbmQgdGhlIHN5c3RlbSBjb25zb2xlLgorICAgV2hpbGUgdGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBpdCBtaWdodCBiZSBhbm5veWluZyBkdXJpbmcKKyAgIG5vcm1hbCB1c2UgYW5kIGVubGFyZ2VzIHRoZSBzaXplIG9mIHRoZSBkcml2ZXIgYnkgc2V2ZXJhbCBraWxvYnl0ZXMuCisKKyAgIFRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZHJpdmVyIHlvdSBjYW4gdHJpbSB0aGUgbWF4aW1hbCBhbW91bnQgb2YKKyAgIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhdmFpbGFibGUgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLiBQbGVhc2UKKyAgIHJlZmVyIHRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzY3JpcHQgYW5kIGl0cyBvbi1saW5lIGhlbHAKKyAgIGZ1bmN0aW9uYWxpdHkuCisKKyAgIFRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG91dHB1dCBtYXBzIHRvIHRoZSAidHJhY2luZyIgYm9vdCB0aW1lCisgICBvcHRpb24gYW5kIHRoZSAiZnRfdHJhY2luZyIgbW9kdWxlcyBvcHRpb24gYXMgZm9sbG93czoKKworICAgMCAgICAgICAgICAgICAgYnVncworICAgMSAgICAgICAgICAgICAgKyBlcnJvcnMgKHdpdGggY2FsbC1zdGFjayBkdW1wKQorICAgMiAgICAgICAgICAgICAgKyB3YXJuaW5ncworICAgMyAgICAgICAgICAgICAgKyBpbmZvcm1hdGlvbgorICAgNCAgICAgICAgICAgICAgKyBtb3JlIGluZm9ybWF0aW9uCisgICA1ICAgICAgICAgICAgICArIHByb2dyYW0gZmxvdworICAgNiAgICAgICAgICAgICAgKyBmZGMvZG1hIGluZm8KKyAgIDcgICAgICAgICAgICAgICsgZGF0YSBmbG93CisgICA4ICAgICAgICAgICAgICArIGV2ZXJ5dGhpbmcgZWxzZQorCisyLiBUdW5pbmcgdGhlIGRlYnVnZ2luZyBvdXRwdXQKKyAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICAgVG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG91dHB1dCBwcmludGVkIHRvIHRoZSBzeXN0ZW0KKyAgIGNvbnNvbGUgeW91IGNhbgorCisgICBpKSAgdHJpbSB0aGUgZGVidWdnaW5nIG91dHB1dCBhdCBydW4tdGltZSB3aXRoCisKKyAgICAgICBtdCAtZiAvZGV2L25xZnQwIHNldGRlbnNpdHkgI0RCR0xWTAorCisgICAgICAgd2hlcmUgIiNEQkdMVkwiIGlzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOQorCisgICBpaSkgdHJpbSB0aGUgZGVidWdnaW5nIG91dHB1dCBhdCBtb2R1bGUgbG9hZCB0aW1lIHdpdGgKKworICAgICAgIG1vZHByb2JlIGZ0YXBlIGZ0X3RyYWNpbmc9I0RCR0xWTAorCisgICAgICAgT2YgY291cnNlLCB0aGlzIGFwcGxpZXMgb25seSBpZiB5b3UgaGF2ZSBjb25maWd1cmVkIGZ0YXBlIHRvIGJlCisgICAgICAgY29tcGlsZWQgYXMgYSBtb2R1bGUuCisKKyAgIGlpaSkgdHJpbSB0aGUgZGVidWdnaW5nIG91dHB1dCBkdXJpbmcgc3lzdGVtIGJvb3QgdGltZS4gQWRkIHRoZQorICAgICAgIGZvbGxvd2luZyB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZToKKworICAgICAgIGZ0YXBlPSNEQkdMVkwsdHJhY2luZworCisgICAgICAgUGxlYXNlIHJlZmVyIGFsc28gdG8gdGhlIG5leHQgc2VjdGlvbiBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8KKyAgICAgICBzZXQgYm9vdCB0aW1lIHBhcmFtZXRlcnMuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQy4gQm9vdCBhbmQgbG9hZCB0aW1lIGNvbmZpZ3VyYXRpb24KKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIFNldHRpbmcgYm9vdCB0aW1lIHBhcmFtZXRlcnMKKyAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4gCisgICBBc3N1bWluZyB0aGF0IHlvdSB1c2UgbGlsbywgdGhlIExJKW51eCBMTylhZGVyLCBib290IHRpbWUga2VybmVsCisgICBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgYnkgYWRkaW5nIGEgbGluZQorCisgICBhcHBlbmQgc29tZV9rZXJuZWxfYm9vdF90aW1lX3BhcmFtZXRlcgorCisgICB0byBgL2V0Yy9saWxvLmNvbmYnIG9yIGF0IHJlYWwgYm9vdCB0aW1lIGJ5IHR5cGluZyBpbiB0aGUgb3B0aW9ucworICAgYXQgdGhlIHByb21wdCBwcm92aWRlZCBieSBMSUxPLiBJIGNhbid0IGdpdmUgeW91IGFkdmljZSBvbiBob3cgdG8KKyAgIHNwZWNpZnkgdGhvc2UgcGFyYW1ldGVycyB3aXRoIG90aGVyIGxvYWRlcnMgYXMgSSBkb24ndCB1c2UgdGhlbS4KKworICAgRm9yIGZ0YXBlLCBlYWNoICJzb21lX2tlcm5lbF9ib290X3RpbWVfcGFyYW1ldGVyIiBsb29rcyBsaWtlCisgICAiZnRhcGU9dmFsdWUsb3B0aW9uIi4gQXMgYW4gZXhhbXBsZSwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgY2FuIGJlCisgICBpbmNyZWFzZWQgd2l0aAorCisgICBmdGFwZT00LHRyYWNpbmcKKworICAgTk9URTogdGhlIHZhbHVlIHByZWNlZGVzIHRoZSBvcHRpb24gbmFtZS4KKworMi4gTW9kdWxlIGxvYWQgdGltZSBwYXJhbWV0ZXJzCisgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgIE1vZHVsZSBwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIGRpcmVjdGx5IHdoZW4gaW52b2tpbmcKKyAgIHRoZSBwcm9ncmFtICdtb2Rwcm9iZScgYXQgdGhlIHNoZWxsIHByb21wdDoKKworICAgbW9kcHJvYmUgZnRhcGUgZnRfdHJhY2luZz00CisKKyAgIG9yIGJ5IGVkaXRpbmcgdGhlIGZpbGUgYC9ldGMvbW9kcHJvYmUuY29uZicgaW4gd2hpY2ggY2FzZSB0aGV5IHRha2UKKyAgIGVmZmVjdCBlYWNoIHRpbWUgd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZCB3aXRoIGBtb2Rwcm9iZScgKHBsZWFzZQorICAgcmVmZXIgdG8gdGhlIHJlc3BlY3RpdmUgbWFudWFsIHBhZ2VzKS4gVGh1cywgeW91IHNob3VsZCBhZGQgYSBsaW5lCisKKyAgIG9wdGlvbnMgZnRhcGUgZnRfdHJhY2luZz00CisKKyAgIHRvIGAvZXRjL21vZHByb2JlLmNvbmZgIGlmIHlvdSBpbnRlbmQgdG8gaW5jcmVhc2UgdGhlIGRlYnVnZ2luZworICAgb3V0cHV0IG9mIHRoZSBkcml2ZXIuCisKKworMy4gRnRhcGUgYm9vdC0gYW5kIGxvYWQgdGltZSBvcHRpb25zCisgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworICAgaS4gICBDb250cm9sbGluZyB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBvdXRwdXQKKyAgICAgICAgREJHTFZMIGhhcyB0byBiZSByZXBsYWNlZCBieSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDguCisKKyAgICAgICAgbW9kdWxlICAgICAgICAgICAgICAgICB8ICBrZXJuZWwgY29tbWFuZCBsaW5lCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZnRfdHJhY2luZz1EQkdMVkwgICAgICB8ICBmdGFwZT1EQkdMVkwsdHJhY2luZworCisgICBpaS4gIEhhcmR3YXJlIHNldHVwCisJQkFTRSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHlvdXIgZmxvcHB5IGRpc2sgY29udHJvbGxlciwKKyAgICAgICAgSVJRIGFuZCBETUEgZ2l2ZSBpdHMgaW50ZXJydXB0IGFuZCBETUEgY2hhbm5lbCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICBCT09MIGlzIGFuIGludGVnZXIsICIwIiBtZWFucyAibm8iOyBhbnkgb3RoZXIgdmFsdWUgbWVhbnMKKwkieWVzIi4gWW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhbnl0aGluZyBpZiBjb25uZWN0aW5nIHlvdXIgdGFwZQorICAgICAgICBkcml2ZSB0byB0aGUgc3RhbmRhcmQgZmxvcHB5IGRpc2sgY29udHJvbGxlci4gQWxsIG9mIHRoZXNlCisJdmFsdWVzIGhhdmUgcmVhc29uYWJsZSBkZWZhdWx0cy4gVGhlIGRlZmF1bHRzIGNhbiBiZSBtb2RpZmllZAorCWR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbiwgaS5lLiB3aGlsZSBydW5uaW5nICJtYWtlIGNvbmZpZyIsCisJIm1ha2UgbWVudWNvbmZpZyIgb3IgIm1ha2UgeGNvbmZpZyIgaW4gdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkKKwlvZiB0aGUgTGludXgga2VybmVsIHNvdXJjZSB0cmVlLiBQbGVhc2UgcmVmZXIgYWxzbyB0byB0aGUgb24KKwlsaW5lIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgZHVyaW5nIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24KKwlwcm9jZXNzLgorCisJZnRfcHJvYmVfZmMxMCBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSBpZiB5b3Ugd2lzaCBmb3IgZnRhcGUgdG8KKwlwcm9iZSBmb3IgYSBDb2xvcmFkbyBGQy0xMCBvciBGQy0yMCBjb250cm9sbGVyLgorCisJZnRfbWFjaDIgaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdpc2ggZm9yIGZ0YXBlIHRvIHByb2JlCisJZm9yIGEgTW91bnRhaW4gTUFDSC0yIGNvbnRyb2xsZXIuCisKKyAgICAgICAgbW9kdWxlICAgICAgICAgICAgICAgICB8ICBrZXJuZWwgY29tbWFuZCBsaW5lCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZnRfZmRjX2Jhc2U9QkFTRSAgICAgICB8ICBmdGFwZT1CQVNFLGlvcG9ydAorICAgICAgICBmdF9mZGNfaXJxPUlSUSAgICAgICAgIHwgIGZ0YXBlPUlSUSxpcnEKKyAgICAgICAgZnRfZmRjX2RtYT1ETUEgICAgICAgICB8ICBmdGFwZT1ETUEsZG1hCisgICAgICAgIGZ0X3Byb2JlX2ZjMTA9Qk9PTCAgICAgfCAgZnRhcGU9Qk9PTCxmYzEwCisgICAgICAgIGZ0X21hY2gyPUJPT0wgICAgICAgICAgfCAgZnRhcGU9Qk9PTCxtYWNoMgorICAgICAgICBmdF9mZGNfdGhyZXNob2xkPVRIUiAgIHwgIGZ0YXBlPVRIUix0aHJlc2hvbGQKKyAgICAgICAgZnRfZmRjX3JhdGVfbGltaXQ9UkFURSB8ICBmdGFwZT1SQVRFLGRhdGFyYXRlCisKKzQuIEV4YW1wbGUga2VybmVsIHBhcmFtZXRlciBzZXR0aW5nCisgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fiAKKyAgIFRvIGNvbmZpZ3VyZSBmdGFwZSB0byBwcm9iZSBmb3IgYSBDb2xvcmFkbyBGQy0xMC9GQy0yMCBjb250cm9sbGVyCisgICBhbmQgdG8gaW5jcmVhc2UgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0IGEgbGl0dGxlIGJpdCwgYWRkCisgICB0aGUgZm9sbG93aW5nIGxpbmUgdG8gYC9ldGMvbGlsby5jb25mJzoKKworICAgYXBwZW5kIGZ0YXBlPTEsZmMxMCBmdGFwZT00LHRyYWNpbmcKKworNS4gRXhhbXBsZSBtb2R1bGUgcGFyYW1ldGVyIHNldHRpbmcKKyAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgICBUbyBkbyB0aGUgc2FtZSwgYnV0IHdpdGggZnRhcGUgY29tcGlsZWQgYXMgYSBsb2FkYWJsZSBrZXJuZWwKKyAgIG1vZHVsZSwgYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byBgL2V0Yy9tb2Rwcm9iZS5jb25mJzoKKworICAgb3B0aW9ucyBmdGFwZSBmdF9wcm9iZV9mYzEwPTEgZnRfdHJhY2luZz00CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworRC4gU3VwcG9ydCBhbmQgY29udGFjdHMKKyAgID09PT09PT09PT09PT09PT09PT09CisKKyAgIEZ0YXBlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlcmUgaXMKKyAgIGFic29sdXRlbHkgbm8gd2FycmFudHkgZm9yIHRoaXMgc29mdHdhcmUuIEhvd2V2ZXIsIHlvdSBjYW4gcmVhY2gKKyAgIHRoZSBjdXJyZW50IG1haW50YWluZXIgb2YgdGhlIGZ0YXBlIHBhY2thZ2UgdW5kZXIgdGhlIGVtYWlsIGFkZHJlc3MKKyAgIGdpdmVuIGluIHRoZSBNQUlOVEFJTkVSUyBmaWxlIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIHRvcCBsZXZlbAorICAgZGlyZWN0b3J5IG9mIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIHRyZWUuIFRoZXJlIHlvdSdsbCBmaW5kIGFsc28KKyAgIHRoZSByZWxldmFudCBtYWlsaW5nIGxpc3QgdG8gdXNlIGFzIGEgZGlzY3Vzc2lvbiBmb3J1bSBhbmQgdGhlIHdlYgorICAgcGFnZSB0byBxdWVyeSBmb3IgdGhlIG1vc3QgcmVjZW50IGRvY3VtZW50YXRpb24sIHJlbGF0ZWQgd29yayBhbmQKKyAgIGRldmVsb3BtZW50IHZlcnNpb25zIG9mIGZ0YXBlLgorCisgICBDaGFuZ2Vsb2c6CisgICA9PT09PT09PT09CisKK34xOTk2OgkJT3JpZ2luYWwgRG9jdW1lbnQKKworMTAtMjQtMjAwNDoJR2VuZXJhbCBjbGVhbnVwIGFuZCB1cGRhdGluZywgbm90aW5nIGFkZGl0aW9uYWwgbW9kdWxlIG9wdGlvbnMuCisJCUphbWVzIE5lbHNvbiA8amFtZXM0NzY1QGdtYWlsLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvUkVBRE1FLnR4dCBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTg0ZmFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9SRUFETUUudHh0CkBAIC0wLDAgKzEsNTEgQEAKKwkJICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCSAgICAgICBGdWppdHN1IEZSLVYgTElOVVggRE9DVU1FTlRBVElPTgorCQkgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEZ1aml0c3UgRlItViBDUFUgYXJjaGl0ZWN0dXJlCitwb3J0IG9mIExpbnV4LgorCitUaGUgZm9sbG93aW5nIGRvY3VtZW50cyBhcmUgYXZhaWxhYmxlOgorCisgKCopIGZlYXR1cmVzLnR4dAorCisgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhlIGJhc2ljIGZlYXR1cmVzIGluaGVyZW50IGluIHRoaXMgYXJjaGl0ZWN0dXJlIHBvcnQuCisKKworICgqKSBjb25maWd1cmluZy50eHQKKworICAgICBBIHN1bW1hcnkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBwYXJ0aWN1bGFyIHRvIHRoaXMgYXJjaGl0ZWN0dXJlLgorCisKKyAoKikgYm9vdGluZy50eHQKKworICAgICBBIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBib290IHRoZSBrZXJuZWwgaW1hZ2UgYW5kIGEgc3VtbWFyeSBvZiB0aGUga2VybmVsCisgICAgIGNvbW1hbmQgbGluZSBvcHRpb25zLgorCisKKyAoKikgZ2Ric3R1Yi50eHQKKworICAgICBBIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBkZWJ1ZyB0aGUga2VybmVsIHVzaW5nIEdEQiBhdHRhY2hlZCBieSBzZXJpYWwKKyAgICAgcG9ydCwgYW5kIGEgc3VtbWFyeSBvZiB0aGUgc2VydmljZXMgYXZhaWxhYmxlLgorCisKKyAoKikgbW11LWxheW91dC50eHQKKworICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoZSB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBtZW1vcnkgbGF5b3V0IHVzZWQgaW4gdGhlCisgICAgIE1NVSBsaW51eCBrZXJuZWwsIGFuZCB0aGUgcmVnaXN0ZXJzIHVzZWQgdG8gc3VwcG9ydCBpdC4KKworCisgKCopIGdkYmluaXQKKworICAgICBBbiBleGFtcGxlIC5nZGJpbml0IGZpbGUgZm9yIHVzZSB3aXRoIEdEQi4gSXQgaW5jbHVkZXMgbWFjcm9zIGZvciB2aWV3aW5nCisgICAgIE1NVSBzdGF0ZSBvbiB0aGUgRlI0NTEuIFNlZSBtbXUtbGF5b3V0LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisgKCopIGNsb2NrLnR4dAorCisgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhlIENQVSBjbG9jayBzY2FsaW5nIGludGVyZmFjZS4KKworCisgKCopIGF0b21pYy1vcHMudHh0CisKKyAgICAgQSBkZXNjcmlwdGlvbiBvZiBob3cgdGhlIEZSLVYga2VybmVsJ3MgYXRvbWljIG9wZXJhdGlvbnMgd29yay4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvYXRvbWljLW9wcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2F0b21pYy1vcHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjM4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2F0b21pYy1vcHMudHh0CkBAIC0wLDAgKzEsMTM0IEBACisJCQkgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJICAgICAgIEZVSklUU1UgRlItViBLRVJORUwgQVRPTUlDIE9QRVJBVElPTlMKKwkJCSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09uIHRoZSBGUi1WIENQVXMsIHRoZXJlIGlzIG9ubHkgb25lIGF0b21pYyBSZWFkLU1vZGlmeS1Xcml0ZSBvcGVyYXRpb246IHRoZSBTV0FQL1NXQVBJCitpbnN0cnVjdGlvbi4gVW5mb3J0dW5hdGVseSwgdGhpcyBhbG9uZSBjYW4ndCBiZSB1c2VkIHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CisKKyAoKikgQXRvbWljIGFkZCB0byBtZW1vcnkKKworICgqKSBBdG9taWMgc3VidHJhY3QgZnJvbSBtZW1vcnkKKworICgqKSBBdG9taWMgYml0IG1vZGlmaWNhdGlvbiAoc2V0LCBjbGVhciBvciBpbnZlcnQpCisKKyAoKikgQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlCisKK09uIHN1Y2ggQ1BVcywgdGhlIHN0YW5kYXJkIHdheSBvZiBlbXVsYXRpbmcgc3VjaCBvcGVyYXRpb25zIGluIHVuaXByb2Nlc3NvciBtb2RlIGlzIHRvIGRpc2FibGUKK2ludGVycnVwdHMsIGJ1dCBvbiB0aGUgRlItViBDUFVzLCBtb2RpZnlpbmcgdGhlIFBTUiB0YWtlcyBhIGxvdCBvZiBjbG9jayBjeWNsZXMsIGFuZCBpdCBoYXMgdG8gYmUKK2RvbmUgdHdpY2UuIFRoaXMgbWVhbnMgdGhlIENQVSBydW5zIGZvciBhIHJlbGF0aXZlbHkgbG9uZyB0aW1lIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwKK3BvdGVudGlhbGx5IGhhdmluZyBhIGdyZWF0IGVmZmVjdCBvbiBpbnRlcnJ1cHQgbGF0ZW5jeS4KKworCis9PT09PT09PT09PT09CitORVcgQUxHT1JJVEhNCis9PT09PT09PT09PT09CisKK1RvIGdldCBhcm91bmQgdGhpcywgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gaGFzIGJlZW4gaW1wbGVtZW50ZWQuIEl0IG9wZXJhdGVzIGluIGEgd2F5IHNpbWlsYXIgdG8KK3RoZSBMTC9TQyBpbnN0cnVjdGlvbiBwYWlycyBzdXBwb3J0ZWQgb24gYSBudW1iZXIgb2YgcGxhdGZvcm1zLgorCisgKCopIFRoZSBDQ0NSLkNDMyByZWdpc3RlciBpcyByZXNlcnZlZCB3aXRoaW4gdGhlIGtlcm5lbCB0byBhY3QgYXMgYW4gYXRvbWljIG1vZGlmeSBhYm9ydCBmbGFnLgorCisgKCopIEluIHRoZSBleGNlcHRpb24gcHJvbG9ndWVzIHJ1biBvbiBrZXJuZWwtPmtlcm5lbCBlbnRyeSwgQ0NDUi5DQzMgaXMgc2V0IHRvIDAgKFVuZGVmaW5lZAorICAgICBzdGF0ZSkuCisKKyAoKikgQWxsIGF0b21pYyBvcGVyYXRpb25zIGNhbiB0aGVuIGJlIGJyb2tlbiBkb3duIGludG8gdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisKKyAgICAgKDEpIFNldCBJQ0MzLlogdG8gdHJ1ZSBhbmQgc2V0IENDMyB0byBUcnVlIChPUkNDL0NLRVEvT1JDUikuCisKKyAgICAgKDIpIExvYWQgdGhlIHZhbHVlIGN1cnJlbnRseSBpbiB0aGUgbWVtb3J5IHRvIGJlIG1vZGlmaWVkIGludG8gYSByZWdpc3Rlci4KKworICAgICAoMykgTWFrZSBjaGFuZ2VzIHRvIHRoZSB2YWx1ZS4KKworICAgICAoNCkgSWYgQ0MzIGlzIHN0aWxsIFRydWUsIHNpbXVsdGFuZW91c2x5IGFuZCBhdG9taWNhbGx5IChieSBWTElXIHBhY2tpbmcpOgorCisJIChhKSBTdG9yZSB0aGUgbW9kaWZpZWQgdmFsdWUgYmFjayB0byBtZW1vcnkuCisKKwkgKGIpIFNldCBJQ0MzLlogdG8gZmFsc2UgKENPUkNDIG9uIEdSMjkgaXMgc3VmZmljaWVudCBmb3IgdGhpcyAtIEdSMjkgaG9sZHMgdGhlIGN1cnJlbnQKKwkgICAgIHRhc2sgcG9pbnRlciBpbiB0aGUga2VybmVsLCBhbmQgc28gaXMgZ3VhcmFudGVlZCB0byBiZSBub24temVybykuCisKKyAgICAgKDUpIElmIElDQzMuWiBpcyBzdGlsbCB0cnVlLCBnbyBiYWNrIHRvIHN0ZXAgKDEpLgorCitUaGlzIHdvcmtzIGluIGEgbm9uLVNNUCBlbnZpcm9ubWVudCBiZWNhdXNlIGFueSBpbnRlcnJ1cHQgb3Igb3RoZXIgZXhjZXB0aW9uIHRoYXQgaGFwcGVucyBiZXR3ZWVuCitzdGVwcyAoMSkgYW5kICg0KSB3aWxsIHNldCBDQzMgdG8gdGhlIFVuZGVmaW5lZCwgdGh1cyBhYm9ydGluZyB0aGUgc3RvcmUgaW4gKDRhKSwgYW5kIGNhdXNpbmcgdGhlCitjb25kaXRpb24gaW4gSUNDMyB0byByZW1haW4gd2l0aCB0aGUgWiBmbGFnIHNldCwgdGh1cyBjYXVzaW5nIHN0ZXAgKDUpIHRvIGxvb3AgYmFjayB0byBzdGVwICgxKS4KKworCitUaGlzIGFsZ29yaXRobSBzdWZmZXJzIGZyb20gdHdvIHByb2JsZW1zOgorCisgKDEpIFRoZSBjb25kaXRpb24gQ0NDUi5DQzMgaXMgY2xlYXJlZCB1bmNvbmRpdGlvbmFsbHkgYnkgYW4gZXhjZXB0aW9uLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciBvcgorICAgICBub3QgYW55IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSB0YXJnZXQgbWVtb3J5IGxvY2F0aW9uIGR1cmluZyB0aGF0IGV4Y2VwdGlvbi4KKworICgyKSBUaGUgYnJhbmNoIGZyb20gc3RlcCAoNSkgYmFjayB0byBzdGVwICgxKSBtYXkgaGF2ZSB0byBoYXBwZW4gbW9yZSB0aGFuIG9uY2UgdW50aWwgdGhlIHN0b3JlCisgICAgIG1hbmFnZXMgdG8gdGFrZSBwbGFjZS4gSW4gdGhlb3J5LCB0aGlzIGxvb3AgY291bGQgY3ljbGUgZm9yZXZlciBiZWNhdXNlIHRoZXJlIGFyZSB0b28gbWFueQorICAgICBpbnRlcnJ1cHRzIGNvbWluZyBpbiwgYnV0IGl0J3MgdW5saWtlbHkuCisKKworPT09PT09PQorRVhBTVBMRQorPT09PT09PQorCitUYWtpbmcgYW4gZXhhbXBsZSBmcm9tIGluY2x1ZGUvYXNtLWZydi9hdG9taWMuaDoKKworCXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKKwl7CisJCXVuc2lnbmVkIGxvbmcgdmFsOworCisJCWFzbSgiMDoJCQkJCQlcbiIKKworSXQgc3RhcnRzIGJ5IHNldHRpbmcgSUNDMy5aIHRvIHRydWUgZm9yIGxhdGVyIHVzZSwgYW5kIGFsc28gdHJhbnNmb3JtaW5nIHRoYXQgaW50byBDQzMgYmVpbmcgaW4gdGhlCitUcnVlIHN0YXRlLgorCisJCSAgICAiCW9yY2MJCWdyMCxncjAsZ3IwLGljYzMJXG4iCTwtLSAoMSkKKwkJICAgICIJY2tlcQkJaWNjMyxjYzcJCVxuIgk8LS0gKDEpCisKK1RoZW4gaXQgZG9lcyB0aGUgbG9hZC4gTm90ZSB0aGF0IHRoZSBmaW5hbCBwaGFzZSBvZiBzdGVwICgxKSBpcyBkb25lIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlCitsb2FkLiBUaGUgVkxJVyBwYWNraW5nIGVuc3VyZXMgdGhleSBhcmUgZG9uZSBzaW11bHRhbmVvdXNseS4gVGhlICIucCIgb24gdGhlIGxvYWQgbXVzdCBub3QgYmUKK3JlbW92ZWQgd2l0aG91dCBzd2FwcGluZyB0aGUgb3JkZXIgb2YgdGhlc2UgdHdvIGluc3RydWN0aW9ucy4KKworCQkgICAgIglsZC5wCQklTTAsJTEJCQlcbiIJPC0tICgyKQorCQkgICAgIglvcmNyCQljYzcsY2M3LGNjMwkJXG4iCTwtLSAoMSkKKworVGhlbiB0aGUgcHJvcG9zZWQgbW9kaWZpY2F0aW9uIGlzIGdlbmVyYXRlZC4gTm90ZSB0aGF0IHRoZSBvbGQgdmFsdWUgY2FuIGJlIHJldGFpbmVkIGlmIHJlcXVpcmVkCisoc3VjaCBhcyBpbiB0ZXN0X2FuZF9zZXRfYml0KCkpLgorCisJCSAgICAiCWFkZCVJMgkJJTEsJTIsJTEJCVxuIgk8LS0gKDMpCisKK1RoZW4gaXQgYXR0ZW1wdHMgdG8gc3RvcmUgdGhlIHZhbHVlIGJhY2ssIGNvbnRpbmdlbnQgb24gbm8gZXhjZXB0aW9uIGhhdmluZyBjbGVhcmVkIENDMyBzaW5jZSBpdAord2FzIHNldCB0byBUcnVlLgorCisJCSAgICAiCWNzdC5wCQklMSwlTTAJCSxjYzMsIzEJXG4iCTwtLSAoNGEpCisKK0l0IHNpbXVsdGFuZW91c2x5IHJlY29yZHMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgc3RvcmUgaW4gSUNDMy5aLgorCisJCSAgICAiCWNvcmNjCQlncjI5LGdyMjksZ3IwCSxjYzMsIzEJXG4iCTwtLSAoNGIpCisKK1N1Y2ggdGhhdCB0aGUgYnJhbmNoIGNhbiB0aGVuIGJlIHRha2VuIGlmIHRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuCisKKwkJICAgICIJYmVxCQlpY2MzLCMwLDBiCQlcbiIJPC0tICg1KQorCQkgICAgOiAiK1UiKHYtPmNvdW50ZXIpLCAiPSZyIih2YWwpCisJCSAgICA6ICJOUHIiKGkpCisJCSAgICA6ICJtZW1vcnkiLCAiY2M3IiwgImNjMyIsICJpY2MzIgorCQkgICAgKTsKKworCQlyZXR1cm4gdmFsOworCX0KKworCis9PT09PT09PT09PT09CitDT05GSUdVUkFUSU9OCis9PT09PT09PT09PT09CisKK1RoZSBhdG9taWMgb3BzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBtYWRlIGlubGluZSBvciBvdXQtb2YtbGluZSBieSBjaGFuZ2luZyB0aGUKK0NPTkZJR19GUlZfT1VUT0ZMSU5FX0FUT01JQ19PUFMgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gTWFraW5nIGl0IG91dC1vZi1saW5lIGhhcyBhIG51bWJlciBvZgorYWR2YW50YWdlczoKKworIC0gVGhlIHJlc3VsdGluZyBrZXJuZWwgaW1hZ2UgbWF5IGJlIHNtYWxsZXIKKyAtIERlYnVnZ2luZyBpcyBlYXNpZXIgYXMgYXRvbWljIG9wcyBjYW4ganVzdCBiZSBzdGVwcGVkIG92ZXIgYW5kIHRoZXkgY2FuIGJlIGJyZWFrcG9pbnRlZAorCitLZWVwaW5nIGl0IGlubGluZSBhbHNvIGhhcyBhIG51bWJlciBvZiBhZHZhbnRhZ2VzOgorCisgLSBUaGUgcmVzdWx0aW5nIGtlcm5lbCBtYXkgYmUgRmFzdGVyCisgICAtIG5vIG91dC1vZi1saW5lIGZ1bmN0aW9uIGNhbGxzIG5lZWQgdG8gYmUgbWFkZQorICAgLSB0aGUgY29tcGlsZXIgZG9lc24ndCBoYXZlIGhhbGYgaXRzIHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgbWFraW5nIGEgY2FsbAorCitUaGUgb3V0LW9mLWxpbmUgaW1wbGVtZW50YXRpb25zIGxpdmUgaW4gYXJjaC9mcnYvbGliL2F0b21pYy1vcHMuUy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvYm9vdGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2Jvb3RpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjI5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2Jvb3RpbmcudHh0CkBAIC0wLDAgKzEsMTgxIEBACisJCQkgID09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgQk9PVElORyBGUi1WIExJTlVYIEtFUk5FTAorCQkJICA9PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT09PT09PT09PT09PT09PT09PT0KK1BST1ZJRElORyBBIEZJTEVTWVNURU0KKz09PT09PT09PT09PT09PT09PT09PT0KKworRmlyc3Qgb2YgYWxsLCBhIHJvb3QgZmlsZXN5c3RlbSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlLiBUaGlzIGNhbiBiZSBkb25lIGluCitvbmUgb2YgdHdvIHdheXM6CisKKyAgKDEpIE5GUyBFeHBvcnQKKworICAgICAgQSBmaWxlc3lzdGVtIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBpbiBhIGRpcmVjdG9yeSBvbiBhbiBORlMgc2VydmVyIHRoYXQKKyAgICAgIHRoZSB0YXJnZXQgYm9hcmQgY2FuIHJlYWNoLiBUaGlzIGRpcmVjdG9yeSBzaG91bGQgdGhlbiBiZSBORlMgZXhwb3J0ZWQKKyAgICAgIHN1Y2ggdGhhdCB0aGUgdGFyZ2V0IGJvYXJkIGNhbiByZWFkIGFuZCB3cml0ZSBpbnRvIGl0IGFzIHJvb3QuCisKKyAgKDIpIEZsYXNoIEZpbGVzeXN0ZW0gKEpGRlMyIFJlY29tbWVuZGVkKQorCisgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBpbWFnZSBtdXN0IGJlIHN0b3JlZCBvciBidWlsdCB1cCBvbiBmbGFzaCBiZWZvcmUgaXQKKyAgICAgIGNhbiBiZSB1c2VkLiBBIGNvbXBsZXRlIGltYWdlIGNhbiBiZSBidWlsdCB1c2luZyB0aGUgbWtmcy5qZmZzMiBvcgorICAgICAgc2ltaWxhciBwcm9ncmFtIGFuZCB0aGVuIGRvd25sb2FkZWQgYW5kIHN0b3JlZCBpbnRvIGZsYXNoIGJ5IFJlZEJvb3QuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09CitMT0FESU5HIFRIRSBLRVJORUwgSU1BR0UKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUga2VybmVsIHdpbGwgbmVlZCB0byBiZSBsb2FkZWQgaW50byBSQU0gYnkgUmVkQm9vdCAob3IgYnkgc29tZSBhbHRlcm5hdGl2ZQorYm9vdCBsb2FkZXIpIGJlZm9yZSBpdCBjYW4gYmUgcnVuLiBUaGUga2VybmVsIGltYWdlIChhcmNoL2Zydi9ib290L0ltYWdlKSBtYXkKK2JlIGxvYWRlZCBpbiBvbmUgb2YgdGhyZWUgd2F5czoKKworICAoMSkgTG9hZCBmcm9tIEZsYXNoCisKKyAgICAgIFRoaXMgaXMgdGhlIHNpbXBsZXN0LiBSZWRCb290IGNhbiBzdG9yZSBhbiBpbWFnZSBpbiB0aGUgZmxhc2ggKHNlZSB0aGUKKyAgICAgIFJlZEJvb3QgZG9jdW1lbnRhdGlvbikgYW5kIHRoZW4gbG9hZCBpdCBiYWNrIGludG8gUkFNLiBSZWRCb290IGtlZXBzCisgICAgICB0cmFjayBvZiB0aGUgbG9hZCBhZGRyZXNzLCBlbnRyeSBwb2ludCBhbmQgc2l6ZSwgc28gdGhlIGNvbW1hbmQgdG8gZG8KKyAgICAgIHRoaXMgaXMgc2ltcGx5OgorCisJZmlzIGxvYWQgbGludXgKKworICAgICAgVGhlIGltYWdlIGlzIHRoZW4gcmVhZHkgdG8gYmUgZXhlY3V0ZWQuCisKKyAgKDIpIExvYWQgYnkgVEZUUAorCisgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBkb3dubG9hZCBhIHJhdyBiaW5hcnkga2VybmVsIGltYWdlIGZyb20gdGhlCisgICAgICBkZWZhdWx0IHNlcnZlciAoYXMgbmVnb3RpYXRlZCBieSBCT09UUCkgYW5kIHN0b3JlIGl0IGludG8gUkFNOgorCisJbG9hZCAtYiAweDAwMTAwMDAwIC1yIC90ZnRwYm9vdC9pbWFnZS5iaW4KKworICAgICAgVGhlIGltYWdlIGlzIHRoZW4gcmVhZHkgdG8gYmUgZXhlY3V0ZWQuCisKKyAgKDMpIExvYWQgYnkgWS1Nb2RlbQorCisgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBkb3dubG9hZCBhIHJhdyBiaW5hcnkga2VybmVsIGltYWdlIGFjcm9zcyB0aGUKKyAgICAgIHNlcmlhbCBwb3J0IHRoYXQgUmVkQm9vdCBpcyBjdXJyZW50bHkgdXNpbmc6CisKKwlsb2FkIC1tIHltb2RlbSAtYiAweDAwMTAwMDAwIC1yIHpJbWFnZQorCisgICAgICBUaGUgc2VyaWFsIGNsaWVudCAoc3VjaCBhcyBtaW5pY29tKSBtdXN0IHRoZW4gYmUgdG9sZCB0byB0cmFuc21pdCB0aGUKKyAgICAgIHByb2dyYW0gYnkgWS1Nb2RlbS4KKworICAgICAgV2hlbiBmaW5pc2hlZCwgdGhlIGltYWdlIHdpbGwgdGhlbiBiZSByZWFkeSB0byBiZSBleGVjdXRlZC4KKworCis9PT09PT09PT09PT09PT09PT0KK0JPT1RJTkcgVEhFIEtFUk5FTAorPT09PT09PT09PT09PT09PT09CisKK0Jvb3QgdGhlIGltYWdlIHdpdGggdGhlIGZvbGxvd2luZyBSZWRCb290IGNvbW1hbmQ6CisKKwlleGVjIC1jICI8Q01ETElORT4iIDB4MDAxMDAwMDAKKworRm9yIGV4YW1wbGU6CisKKwlleGVjIC1jICJjb25zb2xlPXR0eVNNMCwxMTUyMDAgaXA9Ojo6OjpkaGNwIHJvb3Q9L2Rldi9tdGRibG9jazIgcnciCisKK1RoaXMgd2lsbCBzdGFydCB0aGUga2VybmVsIHJ1bm5pbmcuIE5vdGUgdGhhdCBpZiB0aGUgR0RCLXN0dWIgaXMgY29tcGlsZWQgaW4sCit0aGVuIHRoZSBrZXJuZWwgd2lsbCBpbW1lZGlhdGVseSB3YWl0IGZvciBHREIgdG8gY29ubmVjdCBvdmVyIHNlcmlhbCBiZWZvcmUKK2RvaW5nIGFueXRoaW5nIGVsc2UuIFNlZSB0aGUgc2VjdGlvbiBvbiBrZXJuZWwgZGVidWdnaW5nIHdpdGggR0RCLgorCitUaGUga2VybmVsIGNvbW1hbmQgbGluZSA8Q01ETElORT4gdGVsbHMgdGhlIGtlcm5lbCB3aGVyZSBpdHMgY29uc29sZSBpcyBhbmQKK2hvdyB0byBmaW5kIGl0cyByb290IGZpbGVzeXN0ZW0uIFRoaXMgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMsCitzZXBhcmF0ZWQgYnkgc3BhY2VzOgorCisgICgqKSBjb25zb2xlPXR0eVM8eD5bLDxiYXVkPls8cGFyaXR5Pls8Yml0cz5bPGZsb3c+XV1dXQorCisgICAgICBUaGlzIHNwZWNpZmllcyB0aGF0IHRoZSBzeXN0ZW0gY29uc29sZSBzaG91bGQgb3V0cHV0IHRocm91Z2ggb24tY2hpcAorICAgICAgc2VyaWFsIHBvcnQgPHg+ICh3aGljaCBjYW4gYmUgIjAiIG9yICIxIikuCisKKyAgICAgIDxiYXVkPiBpcyBhIHN0YW5kYXJkIGJhdWQgcmF0ZSBiZXR3ZWVuIDEyMDAgYW5kIDExNTIwMCAoZGVmYXVsdCA5NjAwKS4KKworICAgICAgPHBhcml0eT4gaXMgYSBwYXJpdHkgc2V0dGluZyBvZiAiTiIsICJPIiwgIkUiLCAiTSIgb3IgIlMiIGZvciBOb25lLCBPZGQsCisgICAgICBFdmVuLCBNYXJrIG9yIFNwYWNlLiAiTm9uZSIgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgIDxzdG9wPiBpcyAiNyIgb3IgIjgiIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIGNoYXJhY3Rlci4gIjgiIGlzIHRoZQorICAgICAgZGVmYXVsdC4KKworICAgICAgPGZsb3c+IGlzICJyIiB0byB1c2UgZmxvdyBjb250cm9sIChYQ1RTIG9uIHNlcmlhbCBwb3J0IDIgb25seSkuIFRoZQorICAgICAgZGVmYXVsdCBpcyB0byBub3QgdXNlIGZsb3cgY29udHJvbC4KKworICAgICAgRm9yIGV4YW1wbGU6CisKKwljb25zb2xlPXR0eVMwLDExNTIwMAorCisgICAgICBUbyB1c2UgdGhlIGZpcnN0IG9uLWNoaXAgc2VyaWFsIHBvcnQgYXQgYmF1ZCByYXRlIDExNTIwMCwgbm8gcGFyaXR5LCA4CisgICAgICBiaXRzLCBhbmQgbm8gZmxvdyBjb250cm9sLgorCisgICgqKSByb290PS9kZXYvPHh4eHg+CisKKyAgICAgIFRoaXMgc3BlY2lmaWVzIHRoZSBkZXZpY2UgdXBvbiB3aGljaCB0aGUgcm9vdCBmaWxlc3lzdGVtIHJlc2lkZXMuIEZvcgorICAgICAgZXhhbXBsZToKKworCS9kZXYvbmZzCU5GUyByb290IGZpbGVzeXN0ZW0KKwkvZGV2L210ZGJsb2NrMwlGb3VydGggUmVkQm9vdCBwYXJ0aXRpb24gb24gdGhlIFN5c3RlbSBGbGFzaAorCisgICgqKSBydworCisgICAgICBTdGFydCB3aXRoIHRoZSByb290IGZpbGVzeXN0ZW0gbW91bnRlZCBSZWFkL1dyaXRlLgorCisgIFRoZSByZW1haW5pbmcgY29tcG9uZW50cyBhcmUgYWxsIG9wdGlvbmFsOgorCisgICgqKSBpcD08aXA+Ojo6Ojxob3N0Pjo8aWZhY2U+OjxjZmc+CisKKyAgICAgIENvbmZpZ3VyZSB0aGUgbmV0d29yayBpbnRlcmZhY2UuIElmIDxjZmc+IGlzICJvZmYiIHRoZW4gPGlwPiBzaG91bGQKKyAgICAgIHNwZWNpZnkgdGhlIElQIGFkZHJlc3MgZm9yIHRoZSBuZXR3b3JrIGRldmljZSA8aWZhY2U+LiA8aG9zdD4gcHJvdmlkZQorICAgICAgdGhlIGhvc3RuYW1lIGZvciB0aGUgZGV2aWNlLgorCisgICAgICBJZiA8Y2ZnPiBpcyAiYm9vdHAiIG9yICJkaGNwIiwgdGhlbiBhbGwgb2YgdGhlc2UgcGFyYW1ldGVycyB3aWxsIGJlCisgICAgICBkaXNjb3ZlcmVkIGJ5IGNvbnN1bHRpbmcgYSBCT09UUCBvciBESENQIHNlcnZlci4KKworICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbWlnaHQgYmUgdXNlZDoKKworCWlwPTE5Mi4xNjguNzMuMTI6Ojo6ZnJ2OmV0aDA6b2ZmCisKKyAgICAgIFRoaXMgc2V0cyB0aGUgSVAgYWRkcmVzcyBvbiB0aGUgVkRLIG1vdGhlcmJvYXJkIFJUTDgwMjkgZXRoZXJuZXQgY2hpcHNldAorICAgICAgKGV0aDApIHRvIGJlIDE5Mi4xNjguNzMuMTIsIGFuZCBzZXRzIHRoZSBib2FyZCdzIGhvc3RuYW1lIHRvIGJlICJmcnYiLgorCisgICgqKSBuZnNyb290PTxzZXJ2ZXI+OjxkaXI+Wyx2PHZlcnM+XQorCisgICAgICBUaGlzIGlzIG1hbmRhdG9yeSBpZiAicm9vdD0vZGV2L25mcyIgaXMgZ2l2ZW4gYXMgYW4gb3B0aW9uLiBJdCB0ZWxscyB0aGUKKyAgICAgIGtlcm5lbCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgTkZTIHNlcnZlciBwcm92aWRpbmcgaXRzIHJvb3QgZmlsZXN5c3RlbSwKKyAgICAgIGFuZCB0aGUgcGF0aG5hbWUgb24gdGhhdCBzZXJ2ZXIgb2YgdGhlIGZpbGVzeXN0ZW0uCisKKyAgICAgIFRoZSBORlMgdmVyc2lvbiB0byB1c2UgY2FuIGFsc28gYmUgc3BlY2lmaWVkLiB2MiBhbmQgdjMgYXJlIHN1cHBvcnRlZCBieQorICAgICAgTGludXguCisKKyAgICAgIEZvciBleGFtcGxlOgorCisJbmZzcm9vdD0xOTIuMTY4LjczLjE6L25mc3Jvb3QtZnJ2CisKKyAgKCopIHByb2ZpbGU9MQorCisgICAgICBUdXJucyBvbiB0aGUga2VybmVsIHByb2ZpbGVyIChhY2Nlc3NpYmxlIHRocm91Z2ggL3Byb2MvcHJvZmlsZSkuCisKKyAgKCopIGNvbnNvbGU9Z2RiMAorCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSAiY29uc29sZT10dHlTLi4uIiBsaXN0ZWQKKyAgICAgIGFib3ZlLiBJIHRlbGxzIHRoZSBrZXJuZWwgdG8gcGFzcyB0aGUgY29uc29sZSBvdXRwdXQgdG8gR0RCIGlmIHRoZQorICAgICAgZ2Ric3R1YiBpcyBjb21waWxlZCBpbiB0byB0aGUga2VybmVsLgorCisgICAgICBJZiB0aGlzIGlzIHVzZWQsIHRoZW4gdGhlIGdkYnN0dWIgcGFzc2VzIHRoZSB0ZXh0IHRvIEdEQiwgd2hpY2ggdGhlbgorICAgICAgc2ltcGx5IGR1bXBzIGl0IHRvIGl0cyBzdGFuZGFyZCBvdXRwdXQuCisKKyAgKCopIG1lbT08eHh4Pk0KKworICAgICAgTm9ybWFsbHkgdGhlIGtlcm5lbCB3aWxsIHdvcmsgb3V0IGhvdyBtdWNoIFNEUkFNIGl0IGhhcyBieSByZWFkaW5nIHRoZQorICAgICAgU0RSQU0gY29udHJvbGxlciByZWdpc3RlcnMuIFRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGlzCisgICAgICBvcHRpb24uIFRoaXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gYmUgdG9sZCB0aGF0IGl0IGhhcyA8eHh4PiBtZWdhYnl0ZXMgb2YKKyAgICAgIG1lbW9yeSBhdmFpbGFibGUuCisKKyAgKCopIGluaXQ9PHByb2c+IFs8YXJnPiBbPGFyZz4gWzxhcmc+IC4uLl1dXQorCisgICAgICBUaGlzIHRlbGxzIHRoZSBrZXJuZWwgd2hhdCBwcm9ncmFtIHRvIHJ1biBpbml0aWFsbHkuIEJ5IGRlZmF1bHQgdGhpcyBpcworICAgICAgL3NiaW4vaW5pdCwgYnV0IC9zYmluL3Nhc2ggb3IgL2Jpbi9zaCBhcmUgY29tbW9uIGFsdGVybmF0aXZlcy4KKworICAoKikgdmRjPS4uLgorCisgICAgICBUaGlzIG9wdGlvbiBjb25maWd1cmVzIHRoZSBNQjkzNDkzIGNvbXBhbmlvbiBjaGlwIHZpc3VhbCBkaXNwbGF5CisgICAgICBkcml2ZXIuIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9mdWppdHN1L21iOTM0OTMvdmRjLnR4dCBmb3IgbW9yZQorICAgICAgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2Nsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvY2xvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MmQzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2Nsb2NrLnR4dApAQCAtMCwwICsxLDY1IEBACitDbG9jayBzY2FsaW5nCistLS0tLS0tLS0tLS0tCisKK1RoZSBrZXJuZWwgc3VwcG9ydHMgc2NhbGluZyBvZiBDTENLLkNNT0RFLCBDTENLLkNNIGFuZCBDTEtDLlAwIGNsb2NrCityZWdpc3RlcnMuIElmIGJ1aWx0IHdpdGggQ09ORklHX1BNIGFuZCBDT05GSUdfU1lTQ1RMIG9wdGlvbnMgZW5hYmxlZCwgZm91cgorZXh0cmEgZmlsZXMgd2lsbCBhcHBlYXIgaW4gdGhlIGRpcmVjdG9yeSAvcHJvYy9zeXMvcG0vLiBSZWFkaW5nIHRoZXNlIGZpbGVzCit3aWxsIHNob3c6CisKKyAgICAgIHAwCQktLSBjdXJyZW50IHZhbHVlIG9mIHRoZSBQMCBiaXQgaW4gQ0xLQyByZWdpc3Rlci4KKyAgICAgIGNtCQktLSBjdXJyZW50IHZhbHVlIG9mIHRoZSBDTSBiaXRzIGluIENMS0MgcmVnaXN0ZXIuCisgICAgICBjbW9kZQkJLS0gY3VycmVudCB2YWx1ZSBvZiB0aGUgQ01PREUgYml0cyBpbiBDTEtDIHJlZ2lzdGVyLgorCitPbiBhbGwgYm9hcmRzLCB0aGUgJ3AwJyBmaWxlIHNob3VsZCBhbHNvIGJlIHdyaXRhYmxlLCBhbmQgZWl0aGVyICcxJyBvciAnMCcKK2NhbiBiZSByZXdyaXR0ZW4sIHRvIHNldCBvciBjbGVhciB0aGUgQ0xLQ19QMCBiaXQgcmVzcGVjdGl2ZWx5LCBoZW5jZQorY29udHJvbGxpbmcgd2hldGhlciB0aGUgcmVzb3VyY2UgYnVzIHJhdGUgY2xvY2sgaXMgaGFsdmVkLgorCitUaGUgJ2NtJyBmaWxlIHNob3VsZCBhbHNvIGJlIGF2YWlsYWJsZSBvbiBhbGwgYm9hcmRzLiAnMCcgY2FuIGJlIHdyaXR0ZW4gdG8gaXQKK3RvIHNoaWZ0IHRoZSBib2FyZCBpbnRvIEhpZ2gtU3BlZWQgbW9kZSAobm9ybWFsKSwgYW5kICcxJyBjYW4gYmUgd3JpdHRlbiB0bworc2hpZnQgdGhlIGJvYXJkIGludG8gTWVkaXVtLVNwZWVkIG1vZGUuIFNlbGVjdGluZyBMb3ctU3BlZWQgbW9kZSBpcyBub3QKK3N1cHBvcnRlZCBieSB0aGlzIGludGVyZmFjZSwgZXZlbiB0aG91Z2ggc29tZSBDUFVzIGRvIHN1cHBvcnQgaXQuCisKK09uIHRoZSBib2FyZHMgd2l0aCBGUjQwNSBDUFUgKGkuZS4gQ0I2MCBhbmQgQ0I3MCksIHRoZSAnY21vZGUnIGZpbGUgaXMgYWxzbword3JpdGFibGUsIGFsbG93aW5nIHRoZSBDUFUgY29yZSBzcGVlZCAoYW5kIG90aGVyIGNsb2NrIHNwZWVkcykgdG8gYmUKK2NvbnRyb2xsZWQgZnJvbSB1c2Vyc3BhY2UuCisKKworRGV0ZXJtaW5pbmcgY3VycmVudCBhbmQgcG9zc2libGUgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjdXJyZW50IHN0YXRlIGFuZCB0aGUgYXZhaWxhYmxlIG1hc2tzIGNhbiBiZSBmb3VuZCBpbiAvcHJvYy9jcHVpbmZvLiBGb3IKK2V4YW1wbGUsIG9uIHRoZSBDQjcwOgorCisJIyBjYXQgL3Byb2MvY3B1aW5mbworCUNQVS1TZXJpZXM6ICAgICBmcjQwMAorCUNQVS1Db3JlOiAgICAgICBmcjQwNSwgZ3IwLTMxLCBCRSwgQ0NDUgorCUNQVTogICAgICAgICAgICBtYjkzNDA1CisJTU1VOiAgICAgICAgICAgIFByb3QKKwlGUC1NZWRpYTogICAgICAgZnIwLTMxLCBNZWRpYQorCVN5c3RlbTogICAgICAgICBtYjkzMDkxLWNiNzAsIG1iOTMwOTAtbWIwMAorCVBNLUNvbnRyb2xzOiAgICBjbW9kZT0weGQzMWYsIGNtPTB4MywgcDA9MHgzLCBzdXNwZW5kPTB4OQorCVBNLVN0YXR1czogICAgICBjbW9kZT0zLCBjbT0wLCBwMD0wCisJQ2xvY2stSW46ICAgICAgIDUwLjAwIE1IegorCUNsb2NrLUNvcmU6ICAgICAzMDAuMDAgTUh6CisJQ2xvY2stU0RSQU06ICAgIDEwMC4wMCBNSHoKKwlDbG9jay1DQnVzOiAgICAgMTAwLjAwIE1IegorCUNsb2NrLVJlczogICAgICA1MC4wMCBNSHoKKwlDbG9jay1FeHQ6ICAgICAgNTAuMDAgTUh6CisJQ2xvY2stRFNVOiAgICAgIDI1LjAwIE1IegorCUJvZ29NaXBzOiAgICAgICAzMDAuMDAKKworQW5kIG9uIHRoZSBQREssIHRoZSBQTSBsaW5lcyBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzoKKworCVBNLUNvbnRyb2xzOiAgICBjbT0weDMsIHAwPTB4Mywgc3VzcGVuZD0weDkKKwlQTS1TdGF0dXM6ICAgICAgY21vZGU9OSwgY209MCwgcDA9MAorCitUaGUgUE0tQ29udHJvbHMgbGluZSwgaWYgcHJlc2VudCwgd2lsbCBpbmRpY2F0ZSB3aGljaCAvcHJvYy9zeXMvcG0gZmlsZXMgY2FuCitiZSBzZXQgdG8gd2hhdCB2YWx1ZXMuIFRoZSBzcGVjaWZpY2F0aW9uIHZhbHVlcyBhcmUgYml0bWFza3M7IHNvLCBmb3IgZXhhbXBsZSwKKyJzdXNwZW5kPTB4OSIgaW5kaWNhdGVzIHRoYXQgMCBhbmQgMyBjYW4gYmUgd3JpdHRlbiB2YWxpZGx5IHRvCisvcHJvYy9zeXMvcG0vc3VzcGVuZC4KKworVGhlIFBNLUNvbnRyb2xzIGxpbmUgd2lsbCBvbmx5IGJlIHByZXNlbnQgaWYgQ09ORklHX1BNIGlzIGNvbmZpZ3VyZWQgdG8gWS4KKworVGhlIFBNLVN0YXR1cyBsaW5lIGluZGljYXRlcyB3aGljaCBjbG9jayBjb250cm9scyBhcmUgc2V0IHRvIHdoaWNoIHZhbHVlLiBJZgordGhlIGZpbGUgY2FuIGJlIHJlYWQsIHRoZW4gdGhlIHN1c3BlbmQgdmFsdWUgbXVzdCBiZSAwLCBhbmQgc28gdGhhdCdzIG5vdAoraW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2NvbmZpZ3VyaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvY29uZmlndXJpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZTc2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2NvbmZpZ3VyaW5nLnR4dApAQCAtMCwwICsxLDEyNSBAQAorCQkgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJICAgRlVKSVRTVSBGUi1WIExJTlVYIEtFUk5FTCBDT05GSUdVUkFUSU9OCisJCSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis9PT09PT09PT09PT09PT09PT09PT0KK0NPTkZJR1VSQVRJT04gT1BUSU9OUworPT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBtb3N0IGltcG9ydGFudCBzZXR0aW5nIGlzIGluIHRoZSAiTU1VIHN1cHBvcnQgb3B0aW9ucyIgdGFiICh0aGUgZmlyc3QKK3ByZXNlbnRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiB0b29scyBhdmFpbGFibGUpOgorCisgKCopICJLZXJuZWwgVHlwZSIKKworICAgICBUaGlzIG9wdGlvbnMgYWxsb3dzIHNlbGVjdGlvbiBvZiBub3JtYWwsIE1NVS1yZXF1aXJpbmcgbGludXgsIGFuZCB1Q2xpbnV4CisgICAgICh3aGljaCBkb2Vzbid0IHJlcXVpcmUgYW4gTU1VIGFuZCBkb2Vzbid0IGhhdmUgaW50ZXItcHJvY2VzcyBwcm90ZWN0aW9uKS4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHNldHRpbmdzIGluIHRoZSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIiBzZWN0aW9uIG9mCit0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCisKKyAoKikgIkNQVSIKKworICAgICBUaGUgcmVnaXN0ZXIgYW5kIGluc3RydWN0aW9uIHNldHMgYXQgdGhlIGNvcmUgb2YgdGhlIHByb2Nlc3Nvci4gVGhpcyBjYW4KKyAgICAgb25seSBiZSBzZXQgdG8gIkZSNDB4LzQ1eC81NXgiIGF0IHRoZSBtb21lbnQgLSBidXQgdGhpcyBwZXJtaXRzIHVzYWdlIG9mCisgICAgIHRoZSBrZXJuZWwgd2l0aCBNQjkzMDkxIENCMTAsIENCMTEsIENCMzAsIENCNDEsIENCNjAsIENCNzAgYW5kIENCNDUxCisgICAgIENQVSBib2FyZHMsIGFuZCB3aXRoIHRoZSBNQjkzMDkzIFBESyBib2FyZC4KKworICgqKSAiU3lzdGVtIgorCisgICAgIFRoaXMgb3B0aW9uIGFsbG93cyBhIGNob2ljZSBvZiBiYXNpYyBzeXN0ZW0uIFRoaXMgZ292ZXJucyB0aGUgcGVyaXBoZXJhbHMKKyAgICAgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXZhaWxhYmxlLgorCisgKCopICJNb3RoZXJib2FyZCIKKworICAgICBUaGlzIHNwZWNpZmllcyB0aGUgdHlwZSBvZiBtb3RoZXJib2FyZCBiZWluZyB1c2VkLCBhbmQgdGhlIHBlcmlwaGVyYWxzCisgICAgIHVwb24gaXQuIEN1cnJlbnRseSBvbmx5ICJNQjkzMDkwLU1CMDAiIGNhbiBiZSBzZXQgaGVyZS4KKworICgqKSAiRGVmYXVsdCBjYWNoZS13cml0ZSBtb2RlIgorCisgICAgIFRoaXMgY29udHJvbHMgdGhlIGluaXRpYWwgZGF0YSBjYWNoZSB3cml0ZSBtYW5hZ2VtZW50IG1vZGUuIEJ5IGRlZmF1bHQKKyAgICAgV3JpdGUtVGhyb3VnaCBpcyBzZWxlY3RlZCwgYnV0IFdyaXRlLUJhY2sgKENvcHktQmFjaykgY2FuIGFsc28gYmUKKyAgICAgc2VsZWN0ZWQuIFRoaXMgY2FuIGJlIGNoYW5nZWQgZHluYW1pY2FsbHkgb25jZSB0aGUga2VybmVsIGlzIHJ1bm5pbmcgKHNlZQorICAgICBmZWF0dXJlcy50eHQpLgorCitUaGVyZSBhcmUgc29tZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoZSAiR2VuZXJhbAorU2V0dXAiIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvbzoKKworICgqKSAiUmVzZXJ2ZSBtZW1vcnkgdW5jYWNoZWQgZm9yIChQQ0kpIERNQSIKKworICAgICBUaGlzIHJlcXVlc3RzIHRoYXQgYSB1Q2xpbnV4IGtlcm5lbCBzZXQgYXNpZGUgc29tZSBtZW1vcnkgaW4gYW4gdW5jYWNoZWQKKyAgICAgd2luZG93IGZvciB0aGUgdXNlIGFzIGNvbnNpc3RlbnQgRE1BIG1lbW9yeSAobWFpbmx5IGZvciBQQ0kpLiBBdCBsZWFzdCBhCisgICAgIG1lZ2FieXRlIHdpbGwgYmUgYWxsb2NhdGVkIGluIHRoaXMgd2F5LCBwb3NzaWJseSBtb3JlLiBBbnkgbWVtb3J5IHNvCisgICAgIHJlc2VydmVkIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9ybWFsIGFsbG9jYXRpb25zLgorCisgKCopICJLZXJuZWwgc3VwcG9ydCBmb3IgRUxGLUZEUElDIGJpbmFyaWVzIgorCisgICAgIFRoaXMgZW5hYmxlcyB0aGUgYmluYXJ5LWZvcm1hdCBkcml2ZXIgZm9yIHRoZSBuZXcgRkRQSUMgRUxGIGJpbmFyaWVzIHRoYXQKKyAgICAgdGhpcyBwbGF0Zm9ybSBub3JtYWxseSB1c2VzLiBUaGVzZSBiaW5hcmllcyBhcmUgdG90YWxseSByZWxvY2F0YWJsZSAtCisgICAgIHRoZWlyIHNlcGFyYXRlIHNlY3Rpb25zIGNhbiByZWxvY2F0ZWQgaW5kZXBlbmRlbnRseSwgYWxsb3dpbmcgdGhlbSB0byBiZQorICAgICBzaGFyZWQgb24gdUNsaW51eCB3aGVyZSBwb3NzaWJsZS4gVGhpcyBzaG91bGQgbm9ybWFsbHkgYmUgZW5hYmxlZC4KKworICgqKSAiS2VybmVsIGltYWdlIHByb3RlY3Rpb24iCisKKyAgICAgVGhpcyBtYWtlcyB0aGUgcHJvdGVjdGlvbiByZWdpc3RlciBnb3Zlcm5pbmcgYWNjZXNzIHRvIHRoZSBjb3JlIGtlcm5lbAorICAgICBpbWFnZSBwcm9oaWJpdCBhY2Nlc3MgYnkgdXNlcnNwYWNlIHByb2dyYW1zLiBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb24KKyAgICAgdUNsaW51eCBvbmx5LgorCitUaGVyZSBhcmUgYWxzbyBhIG51bWJlciBvZiBzZXR0aW5ncyBpbiB0aGUgIktlcm5lbCBIYWNraW5nIiBzZWN0aW9uIG9mIHRoZQora2VybmVsIGNvbmZpZ3VyYXRpb24gZXNwZWNpYWxseSBmb3IgZGVidWdnaW5nIGEga2VybmVsIG9uIHRoaXMKK2FyY2hpdGVjdHVyZS4gU2VlIHRoZSAiZ2Ric3R1Yi50eHQiIGZpbGUgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRob3NlLgorCisKKz09PT09PT09PT09PT09PT09PT09PT0KK0RFRkFVTFQgQ09ORklHVVJBVElPTlMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGtlcm5lbCBzb3VyY2VzIGluY2x1ZGUgYSBudW1iZXIgb2YgZXhhbXBsZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zOgorCisgKCopIGRlZmNvbmZpZy1tYjkzMDkxCisKKyAgICAgRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgTUI5MzA5MS1WREsgd2l0aCBib3RoIENQVSBib2FyZCBhbmQKKyAgICAgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkIHJ1bm5pbmcgdUNsaW51eC4KKworCisgKCopIGRlZmNvbmZpZy1tYjkzMDkxLWZiCisKKyAgICAgRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgTUI5MzA5MS1WREsgd2l0aCBDUFUgYm9hcmQsCisgICAgIE1COTMwOTAtTUIwMCBtb3RoZXJib2FyZCwgYW5kIERBViBib2FyZCBydW5uaW5nIHVDbGludXguCisgICAgIEluY2x1ZGVzIGZyYW1lYnVmZmVyIGRyaXZlci4KKworCisgKCopIGRlZmNvbmZpZy1tYjkzMDkzCisKKyAgICAgRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgTUI5MzA5My1QREsgYm9hcmQgcnVubmluZyB1Q2xpbnV4LgorCisKKyAoKikgZGVmY29uZmlnLWNiNzAtc3RhbmRhbG9uZQorCisgICAgIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1COTMwOTEtVkRLIHdpdGggb25seSBDQjcwIENQVSBib2FyZAorICAgICBydW5uaW5nIHVDbGludXguIFRoaXMgd2lsbCB1c2UgdGhlIENCNzAncyBETTkwMDAgZm9yIG5ldHdvcmsgYWNjZXNzLgorCisKKyAoKikgZGVmY29uZmlnLW1tdQorCisgICAgIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1COTMwOTEtVkRLIHdpdGggYm90aCBDQjQ1MSBDUFUgYm9hcmQgYW5kCisgICAgIE1COTMwOTAtTUIwMCBtb3RoZXJib2FyZCBydW5uaW5nIE1NVSBsaW51eC4KKworICgqKSBkZWZjb25maWctbW11LWF1ZGlvCisKKyAgICAgRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgTUI5MzA5MS1WREsgd2l0aCBDQjQ1MSBDUFUgYm9hcmQsIERBVgorICAgICBib2FyZCwgYW5kIE1COTMwOTAtTUIwMCBtb3RoZXJib2FyZCBydW5uaW5nIE1NVSBsaW51eC4gSW5jbHVkZXMKKyAgICAgYXVkaW8gZHJpdmVyLgorCisgKCopIGRlZmNvbmZpZy1tbXUtZmIKKworICAgICBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNQjkzMDkxLVZESyB3aXRoIENCNDUxIENQVSBib2FyZCwgREFWCisgICAgIGJvYXJkLCBhbmQgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkIHJ1bm5pbmcgTU1VIGxpbnV4LiBJbmNsdWRlcworICAgICBmcmFtZWJ1ZmZlciBkcml2ZXIuCisKKyAoKikgZGVmY29uZmlnLW1tdS1zdGFuZGFsb25lCisKKyAgICAgRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgTUI5MzA5MS1WREsgd2l0aCBvbmx5IENCNDUxIENQVSBib2FyZAorICAgICBydW5uaW5nIE1NVSBsaW51eC4KKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZmVhdHVyZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9mZWF0dXJlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyMGMwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZmVhdHVyZXMudHh0CkBAIC0wLDAgKzEsMzEwIEBACisJCQkgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkgRlVKSVRTVSBGUi1WIExJTlVYIEZFQVRVUkVTCisJCQkgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMga2VybmVsIHBvcnQgaGFzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIG9mIHdoaWNoIHRoZSB1c2VyIHNob3VsZCBiZSBhd2FyZToKKworICgqKSBMaW51eCBhbmQgdUNsaW51eAorCisgICAgIFRoZSBGUi1WIGFyY2hpdGVjdHVyZSBwb3J0IHN1cHBvcnRzIGJvdGggbm9ybWFsIE1NVSBsaW51eCBhbmQgdUNsaW51eCBvdXQKKyAgICAgb2YgdGhlIHNhbWUgc291cmNlcy4KKworCisgKCopIENQVSBzdXBwb3J0CisKKyAgICAgU3VwcG9ydCBmb3IgdGhlIEZSNDAxLCBGUjQwMywgRlI0MDUsIEZSNDUxIGFuZCBGUjU1NSBDUFVzIHNob3VsZCB3b3JrIHdpdGgKKyAgICAgdGhlIHNhbWUgdUNsaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbi4KKworICAgICBJbiBub3JtYWwgKE1NVSkgTGludXggbW9kZSwgb25seSB0aGUgRlI0NTEgQ1BVIHdpbGwgd29yayBhcyB0aGF0IGlzIHRoZQorICAgICBvbmx5IG9uZSB3aXRoIGEgc3VpdGFibHkgZmVhdHVyZWQgQ1BVLgorCisgICAgIFRoZSBrZXJuZWwgaXMgd3JpdHRlbiBhbmQgY29tcGlsZWQgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IG9ubHkgdGhlCisgICAgIGJvdHRvbSAzMiBHUiByZWdpc3RlcnMgYW5kIG5vIEZSIHJlZ2lzdGVycyB3aWxsIGJlIHVzZWQgYnkgdGhlIGtlcm5lbAorICAgICBpdHNlbGYsIGhvd2V2ZXIgYWxsIGV4dHJhIHVzZXJzcGFjZSByZWdpc3RlcnMgd2lsbCBiZSBzYXZlZCBvbiBjb250ZXh0CisgICAgIHN3aXRjaC4gTm90ZSB0aGF0IHNpbmNlIG1vc3QgQ1BVcyBjYW4ndCBzdXBwb3J0IGxhenkgc3dpdGNoaW5nLCBubyBhdHRlbXB0CisgICAgIGlzIG1hZGUgdG8gZG8gbGF6eSByZWdpc3RlciBzYXZpbmcgd2hlcmUgdGhhdCB3b3VsZCBiZSBwb3NzaWJsZSAoRlI1NTUKKyAgICAgb25seSBjdXJyZW50bHkpLgorCisKKyAoKikgQm9hcmQgc3VwcG9ydAorCisgICAgIFRoZSBib2FyZCBvbiB3aGljaCB0aGUga2VybmVsIHdpbGwgcnVuIGNhbiBiZSBjb25maWd1cmVkIG9uIHRoZSAiUHJvY2Vzc29yCisgICAgIHR5cGUgYW5kIGZlYXR1cmVzIiBjb25maWd1cmF0aW9uIHRhYi4KKworICAgICBTZXQgdGhlIFN5c3RlbSB0byAiTUI5MzA5My1QREsiIHRvIGJvb3QgZnJvbSB0aGUgTUI5MzA5MyAoRlI0MDMpIFBESy4KKworICAgICBTZXQgdGhlIFN5c3RlbSB0byAiTUI5MzA5MS1WREsiIHRvIGJvb3QgZnJvbSB0aGUgQ0IxMSwgQ0IzMCwgQ0I0MSwgQ0I2MCwKKyAgICAgQ0I3MCBvciBDQjQ1MSBWREsgYm9hcmRzLiBTZXQgdGhlIE1vdGhlcmJvYXJkIHNldHRpbmcgdG8gIk1COTMwOTAtTUIwMCIgdG8KKyAgICAgYm9vdCB3aXRoIHRoZSBzdGFuZGFyZCBBVEE5MDU5MEIgVkRLIG1vdGhlcmJvYXJkLCBhbmQgc2V0IGl0IHRvICJOb25lIiB0bworICAgICBib290IHdpdGhvdXQgYW55IG1vdGhlcmJvYXJkLgorCisKKyAoKikgQmluYXJ5IEZvcm1hdHMKKworICAgICBUaGUgb25seSB1c2Vyc3BhY2UgYmluYXJ5IGZvcm1hdCBzdXBwb3J0ZWQgaXMgRkRQSUMgRUxGLiBOb3JtYWwgRUxGLCBGTEFUCisgICAgIGFuZCBBT1VUIGJpbmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KKworICAgICBGRFBJQyBFTEYgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcnkgYW5kIHByb2dyYW0gaW50ZXJwcmV0ZXIgZmFjaWxpdGllcy4KKworCisgKCopIFNjaGVkdWxlciBTcGVlZAorCisgICAgIFRoZSBrZXJuZWwgc2NoZWR1bGVyIHJ1bnMgYXQgMTAwSHogaXJyZXNwZWN0aXZlIG9mIHRoZSBjbG9jayBzcGVlZCBvbiB0aGlzCisgICAgIGFyY2hpdGVjdHVyZS4gVGhpcyB2YWx1ZSBpcyBzZXQgaW4gYXNtL3BhcmFtLmggKHNlZSB0aGUgSFogbWFjcm8gZGVmaW5lZAorICAgICB0aGVyZSkuCisKKworICgqKSBOb3JtYWwgKE1NVSkgTGludXggTWVtb3J5IExheW91dC4KKworICAgICBTZWUgbW11LWxheW91dC50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIG5vcm1hbCBsaW51eAorICAgICBtZW1vcnkgbGF5b3V0CisKKyAgICAgU2VlIGluY2x1ZGUvYXNtLWZydi9tZW0tbGF5b3V0LmggZm9yIGNvbnN0YW50cyBwZXJ0YWluaW5nIHRvIHRoZSBtZW1vcnkKKyAgICAgbGF5b3V0LgorCisgICAgIFNlZSBpbmNsdWRlL2FzbS1mcnYvbWItcmVncy5oIGZvciB0aGUgY29uc3RhbnRzIHBlcnRhaW5pbmcgdG8gdGhlIEkvTyBidXMKKyAgICAgY29udHJvbGxlciBjb25maWd1cmF0aW9uLgorCisKKyAoKikgdUNsaW51eCBNZW1vcnkgTGF5b3V0CisKKyAgICAgVGhlIG1lbW9yeSBsYXlvdXQgdXNlZCBieSB0aGUgdUNsaW51eCBrZXJuZWwgaXMgYXMgZm9sbG93czoKKworCTB4MDAwMDAwMDAgLSAweDAwMDAwRkZGCQlOdWxsIHBvaW50ZXIgY2F0Y2ggcGFnZQorCTB4MjAwMDAwMDAgLSAweDIwMEZGRkZGIENTMiMgICAgW1BES10gRlBHQQorCTB4QzAwMDAwMDAgLSAweENGRkZGRkZGCQlTRFJBTQorCTB4QzAwMDAwMDAJCQlCYXNlIG9mIExpbnV4IGtlcm5lbCBpbWFnZQorCTB4RTAwMDAwMDAgLSAweEVGRkZGRkZGCUNTMiMJW1ZES10gU0xCVVMvUENJIHdpbmRvdworCTB4RjAwMDAwMDAgLSAweEYwRkZGRkZGCUNTNSMJTUI5MzQ5MyBDU0MgYXJlYSAoREFWIGRhdWdodGVyIGJvYXJkKQorCTB4RjEwMDAwMDAgLSAweEYxRkZGRkZGCUNTNyMJW0NCNzAvQ0I0NTFdIENQVS1jYXJkIFBDTUNJQSBwb3J0IHNwYWNlCisJMHhGQzAwMDAwMCAtIDB4RkMwRkZGRkYJQ1MxIwlbVkRLXSBNQjg2OTQzIGNvbmZpZyBzcGFjZQorCTB4RkMxMDAwMDAgLSAweEZDMUZGRkZGCUNTNiMJW0NCNzAvQ0I0NTFdIENQVS1jYXJkIERNOTAwMCBOSUMgc3BhY2UKKwkweEZDMTAwMDAwIC0gMHhGQzFGRkZGRglDUzYjCVtQREtdIEFYODg3OTYgTklDIHNwYWNlCisJMHhGQzIwMDAwMCAtIDB4RkMyRkZGRkYJQ1MzIwlNQjkzNDkzIENTUiBhcmVhIChEQVYgZGF1Z2h0ZXIgYm9hcmQpCisJMHhGRDAwMDAwMCAtIDB4RkRGRkZGRkYJQ1M0IwlbQ0I3MC9DQjQ1MV0gQ1BVLWNhcmQgZXh0cmEgZmxhc2ggc3BhY2UKKwkweEZFMDAwMDAwIC0gMHhGRUZGRkZGRgkJSW50ZXJuYWwgQ1BVIHBlcmlwaGVyYWxzCisJMHhGRjAwMDAwMCAtIDB4RkYxRkZGRkYJQ1MwIwlGbGFzaCAxCisJMHhGRjIwMDAwMCAtIDB4RkYzRkZGRkYJQ1MwIwlGbGFzaCAyCisJMHhGRkMwMDAwMCAtIDB4RkZDMDAwMUYJQ1MwIwlbVkRLXSBGUEdBCisKKyAgICAgVGhlIGtlcm5lbCByZWFkcyB0aGUgc2l6ZSBvZiB0aGUgU0RSQU0gZnJvbSB0aGUgbWVtb3J5IGJ1cyBjb250cm9sbGVyCisgICAgIHJlZ2lzdGVycyBieSBkZWZhdWx0LgorCisgICAgIFRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gY29kZSAoMSkgYWRqdXN0cyB0aGUgU0RSQU0gYmFzZSBhZGRyZXNzZXMgdG8KKyAgICAgbW92ZSB0aGUgU0RSQU0gdG8gZGVzaXJlZCBhZGRyZXNzLCAoMikgbW92ZXMgdGhlIGtlcm5lbCBpbWFnZSBkb3duIHRvIHRoZQorICAgICBib3R0b20gb2YgU0RSQU0sICgzKSBhZGp1c3RzIHRoZSBidXMgY29udHJvbGxlciByZWdpc3RlcnMgdG8gbW92ZSBJL08KKyAgICAgd2luZG93cywgYW5kICg0KSByZWFycmFuZ2VzIHRoZSBwcm90ZWN0aW9uIHJlZ2lzdGVycyB0byBwcm90ZWN0IGFsbCBvZgorICAgICB0aGlzLgorCisgICAgIFRoZSByZWFzb25zIGZvciBkb2luZyB0aGlzIGFyZTogKDEpIHRoZSBwYWdlIGF0IGFkZHJlc3MgMCBzaG91bGQgYmUKKyAgICAgaW5hY2Nlc3NpYmxlIHNvIHRoYXQgTlVMTCBwb2ludGVyIGVycm9ycyBjYW4gYmUgY2F1Z2h0OyBhbmQgKDIpIHRoZSBib3R0b20KKyAgICAgdGhyZWUgcXVhcnRlcnMgYXJlIGxlZnQgdW5vY2N1cGllZCBzbyB0aGF0IGFuIEZSLVYgQ1BVIHdpdGggYW4gTU1VIGNhbiB1c2UKKyAgICAgaXQgZm9yIHZpcnR1YWwgdXNlcnNwYWNlIG1hcHBpbmdzLgorCisgICAgIFNlZSBpbmNsdWRlL2FzbS1mcnYvbWVtLWxheW91dC5oIGZvciBjb25zdGFudHMgcGVydGFpbmluZyB0byB0aGUgbWVtb3J5CisgICAgIGxheW91dC4KKworICAgICBTZWUgaW5jbHVkZS9hc20tZnJ2L21iLXJlZ3MuaCBmb3IgdGhlIGNvbnN0YW50cyBwZXJ0YWluaW5nIHRvIHRoZSBJL08gYnVzCisgICAgIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbi4KKworCisgKCopIHVDbGludXggTWVtb3J5IFByb3RlY3Rpb24KKworICAgICBBIERBTVBSIHJlZ2lzdGVyIGlzIHVzZWQgdG8gY292ZXIgdGhlIGVudGlyZSByZWdpb24gdXNlZCBmb3IgSS9PCisgICAgICgweEUwMDAwMDAwIC0gMHhGRkZGRkZGRikuIFRoaXMgcGVybWl0cyB0aGUga2VybmVsIHRvIG1ha2UgdW5jYWNoZWQKKyAgICAgYWNjZXNzZXMgdG8gdGhpcyByZWdpb24uIFVzZXJzcGFjZSBpcyBub3QgcGVybWl0dGVkIHRvIGFjY2VzcyBpdC4KKworICAgICBUaGUgREFNUFIvSUFNUFIgcHJvdGVjdGlvbiByZWdpc3RlcnMgbm90IGluIHVzZSBmb3IgYW55IG90aGVyIHB1cnBvc2UgYXJlCisgICAgIHRpbGVkIG92ZXIgdGhlIHRvcCBvZiB0aGUgU0RSQU0gc3VjaCB0aGF0OgorCisJKDEpIFRoZSBjb3JlIGtlcm5lbCBpbWFnZSBpcyBjb3ZlcmVkIGJ5IGFzIHNtYWxsIGEgdGlsZSBhcyBwb3NzaWJsZQorICAgICAgICAgICAgZ3JhbnRpbmcgb25seSB0aGUga2VybmVsIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBkYXRhLCB3aGlsc3QKKyAgICAgICAgICAgIG1ha2luZyBzdXJlIG5vIFNEUkFNIGlzIGFjdHVhbGx5IG1hZGUgdW5hdmFpbGFibGUgYnkgdGhpcyBhcHByb2FjaC4KKworCSgyKSBBbGwgb3RoZXIgdGlsZXMgYXJlIGFycmFuZ2VkIHRvIHBlcm1pdCB1c2Vyc3BhY2UgYWNjZXNzIHRvIHRoZSByZXN0CisgICAgICAgICAgICBvZiB0aGUgU0RSQU0uCisKKyAgICAgQmFycmluZyBwb2ludCAoMSksIHRoZXJlIGlzIG5vdGhpbmcgdG8gcHJvdGVjdCBrZXJuZWwgZGF0YSBhZ2FpbnN0CisgICAgIHVzZXJzcGFjZSBkYW1hZ2UgLSBidXQgdGhpcyBpcyB1Q2xpbnV4LgorCisKKyAoKikgRXhjZXB0aW9ucyBhbmQgRml4dXBzCisKKyAgICAgU2luY2UgdGhlIEZSNDB4IGFuZCBGUjU1eCBDUFVzIHRoYXQgZG8gbm90IGhhdmUgZnVsbCBNTVVzIGdlbmVyYXRlCisgICAgIGltcHJlY2lzZSBkYXRhIGVycm9yIGV4Y2VwdGlvbnMsIHRoZXJlIGFyZSBjdXJyZW50bHkgbm8gYXV0b21hdGljIGZpeHVwCisgICAgIHNlcnZpY2VzIGF2YWlsYWJsZSBpbiB1Q2xpbnV4LiBUaGlzIGluY2x1ZGVzIG1pc2FsaWduZWQgbWVtb3J5IGFjY2VzcworICAgICBmaXh1cHMuCisKKyAgICAgVXNlcnNwYWNlIEVGQVVMVCBlcnJvcnMgY2FuIGJlIHRyYXBwZWQgYnkgaXNzdWluZyBhIE1FTUJBUiBpbnN0cnVjdGlvbiBhbmQKKyAgICAgZm9yY2luZyB0aGUgZmF1bHQgdG8gaGFwcGVuIHRoZXJlLgorCisgICAgIE9uIHRoZSBGUjQ1MSwgaG93ZXZlciwgZGF0YSBleGNlcHRpb25zIGFyZSBtb3N0bHkgcHJlY2lzZSwgYW5kIHNvCisgICAgIGV4Y2VwdGlvbiBmaXh1cCBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZCBhcyBub3JtYWwuCisKKworICgqKSBVc2Vyc3BhY2UgQnJlYWtwb2ludHMKKworICAgICBUaGUgcHRyYWNlKCkgc3lzdGVtIGNhbGwgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyB1c2Vyc3BhY2UgZGVidWdnaW5nCisgICAgIGZlYXR1cmVzOgorCisJKDEpIEhhcmR3YXJlIGFzc2lzdGVkIHNpbmdsZSBzdGVwLgorCisJKDIpIEJyZWFrcG9pbnQgdmlhIHRoZSBGUi1WICJCUkVBSyIgaW5zdHJ1Y3Rpb24uCisKKwkoMykgQnJlYWtwb2ludCB2aWEgdGhlIEZSLVYgIlRJUkEgR1IwLCAjMSIgaW5zdHJ1Y3Rpb24uCisKKwkoNCkgU3lzY2FsbCBlbnRyeS9leGl0IHRyYXAuCisKKyAgICAgRWFjaCBvZiB0aGUgYWJvdmUgZ2VuZXJhdGVzIGEgU0lHVFJBUC4KKworCisgKCopIE9uLUNoaXAgU2VyaWFsIFBvcnRzCisKKyAgICAgVGhlIEZSLVYgb24tY2hpcCBzZXJpYWwgcG9ydHMgYXJlIG1hZGUgYXZhaWxhYmxlIGFzIHR0eVMwIGFuZCB0dHlTMS4gTm90ZQorICAgICB0aGF0IGlmIHRoZSBHREIgc3R1YiBpcyBjb21waWxlZCBpbiwgdHR5UzEgd2lsbCBub3QgYWN0dWFsbHkgYmUgYXZhaWxhYmxlCisgICAgIGFzIGl0IHdpbGwgYmUgYmVpbmcgdXNlZCBmb3IgdGhlIEdEQiBzdHViLgorCisgICAgIFRoZXNlIHBvcnRzIGNhbiBiZSBtYWRlIGJ5OgorCisJbWtub2QgL2Rldi90dHlTMCBjIDQgNjQKKwlta25vZCAvZGV2L3R0eVMxIGMgNCA2NQorCisKKyAoKikgTWFza2FibGUgSW50ZXJydXB0cworCisgICAgIExldmVsIDE1IChOb24tbWFza2FibGUpIGludGVycnVwdHMgYXJlIGRlYWx0IHdpdGggYnkgdGhlIEdEQiBzdHViIGlmCisgICAgIHByZXNlbnQsIGFuZCBjYXVzZSBhIHBhbmljIGlmIG5vdC4gSWYgdGhlIEdEQiBzdHViIGlzIHByZXNlbnQsIHR0eVMxJ3MKKyAgICAgaW50ZXJydXB0cyBhcmUgcmF0ZWQgYXQgbGV2ZWwgMTUuCisKKyAgICAgQWxsIG90aGVyIGludGVycnVwdHMgYXJlIGRpc3RyaWJ1dGVkIG92ZXIgdGhlIHNldCBvZiBhdmFpbGFibGUgcHJpb3JpdGllcworICAgICBzbyB0aGF0IG5vIElSUXMgYXJlIHNoYXJlZCB3aGVyZSBwb3NzaWJsZS4gVGhlIGFyY2ggaW50ZXJydXB0IGhhbmRsaW5nCisgICAgIHJvdXRpbmVzIGF0dGVtcHQgdG8gZGlzZW50YW5nbGUgdGhlIHZhcmlvdXMgc291cmNlcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUKKyAgICAgQ1BVJ3Mgb3duIG11bHRpcGxleG9yLCBhbmQgdGhvc2Ugb24gb2ZmLUNQVSBwZXJpcGhlcmFscy4KKworCisgKCopIEFjY2Vzc2luZyBQQ0kgRGV2aWNlcworCisgICAgIFdoZXJlIFBDSSBpcyBhdmFpbGFibGUsIGNhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIGRlYWxpbmcgd2l0aCBkcml2ZXJzIHRoYXQKKyAgICAgYWNjZXNzIFBDSSBkZXZpY2VzLiBQQ0kgZGV2aWNlcyBwcmVzZW50IHRoZWlyIGRhdGEgaW4gbGl0dGxlLWVuZGlhbiBmb3JtLAorICAgICBidXQgdGhlIENQVSBzZWVzIGl0IGluIGJpZy1lbmRpYW4gZm9ybS4gVGhlIG1hY3JvcyBpbiBhc20vaW8uaCB0cnkgdG8gZ2V0CisgICAgIHRoaXMgcmlnaHQsIGJ1dCBtYXkgbm90IHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLi4uCisKKworICgqKSBBeDg4Nzk2IEV0aGVybmV0IERyaXZlcgorCisgICAgIFRoZSBNQjkzMDkzIFBESyBib2FyZCBoYXMgYW4gQXg4ODc5NiBldGhlcm5ldCBjaGlwc2V0IChhbiBORTIwMDAgY2xvbmUpLiBBCisgICAgIGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIHRvIGRlYWwgc3BlY2lmaWNhbGx5IHdpdGggdGhpcy4gVGhlIGRyaXZlcgorICAgICBwcm92aWRlcyBNSUkgc2VydmljZXMgZm9yIHRoZSBjYXJkLgorCisgICAgIFRoZSBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgcnVubmluZyBtYWtlIHhjb25maWcsIGFuZCBnb2luZyB0bzoKKworCSgqKSBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisJICAgIC0gdHVybiBvbiAiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIKKwkgICAgKCopIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorCQktIHR1cm4gb24gIkV0aGVybmV0ICgxMCBvciAxMDBNYml0KSIKKwkJLSB0dXJuIG9uICJBWDg4Nzk2IE5FMjAwMCBjb21wYXRpYmxlIGNoaXBzZXQiCisKKyAgICAgVGhlIGRyaXZlciBjYW4gYmUgZm91bmQgaW46CisKKwlkcml2ZXJzL25ldC9heDg4Nzk2LmMKKwlpbmNsdWRlL2FzbS9heDg4Nzk2LmgKKworCisgKCopIFdvcmtSQU0gRHJpdmVyCisKKyAgICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgZGV2aWNlIHRoYXQgcGVybWl0cyBhY2Nlc3MgdG8gdGhlIFdvcmtSQU0KKyAgICAgdGhhdCBjYW4gYmUgZm91bmQgb24gdGhlIEZSNDUxIENQVS4gRWFjaCBwYWdlIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBhCisgICAgIHNlcGFyYXRlIG1pbm9yIG51bWJlciwgdGhlcmVieSBwZXJtaXR0aW5nIGVhY2ggcGFnZSB0byBoYXZlIGl0cyBvd24KKyAgICAgZmlsZXN5c3RlbSBwZXJtaXNzaW9ucyBzZXQgb24gdGhlIGRldmljZSBmaWxlLgorCisgICAgIFRoZSBkZXZpY2UgZmlsZXMgc2hvdWxkIGJlOgorCisJbWtub2QgL2Rldi9mcnYvd29ya3JhbTAgYyAyNDAgMAorCW1rbm9kIC9kZXYvZnJ2L3dvcmtyYW0xIGMgMjQwIDEKKwlta25vZCAvZGV2L2Zydi93b3JrcmFtMiBjIDI0MCAyCisJLi4uCisKKyAgICAgVGhlIGRyaXZlciB3aWxsIG5vdCBwZXJtaXQgdGhlIG9wZW5pbmcgb2YgYW55IGRldmljZSBmaWxlIHRoYXQgZG9lcyBub3QKKyAgICAgY29ycmVzcG9uZCB0byBhdCBsZWFzdCBhIHBhcnRpYWwgcGFnZSBvZiBXb3JrUkFNLiBTbyB0aGUgZmlyc3QgZGV2aWNlIGZpbGUKKyAgICAgaXMgdGhlIG9ubHkgb25lIGF2YWlsYWJsZSBvbiB0aGUgRlI0NTEuIElmIGFueSBvdGhlciBDUFUgaXMgZGV0ZWN0ZWQsIG5vbmUKKyAgICAgb2YgdGhlIGRldmljZXMgd2lsbCBiZSBvcGVuYWJsZS4KKworICAgICBUaGUgZGV2aWNlcyBjYW4gYmUgYWNjZXNzZWQgd2l0aCByZWFkLCB3cml0ZSBhbmQgbGxzZWVrLCBhbmQgY2FuIGFsc28gYmUKKyAgICAgbW1hcHBlZC4gSWYgdGhleSdyZSBtbWFwcGVkLCB0aGV5IHdpbGwgb25seSBtYXAgYXQgdGhlIGFwcHJvcHJpYXRlCisgICAgIDB4N2U4bm5ubm4gYWRkcmVzcyBvbiBsaW51eCBhbmQgYXQgdGhlIDB4ZmU4bm5ubm4gYWRkcmVzcyBvbiB1Q2xpbnV4LiBJZgorICAgICBNQVBfRklYRUQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3Mgd2lsbCBiZSBjaG9zZW4gYW55d2F5LgorCisgICAgIFRoZSBtYXBwaW5ncyBtdXN0IGJlIE1BUF9TSEFSRUQgbm90IE1BUF9QUklWQVRFLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgUFJPVF9FWEVDLiBUaGV5IG11c3QgYWxzbyBzdGFydCBhdCBmaWxlIG9mZnNldCAwLCBhbmQgbXVzdCBub3QgYmUgbG9uZ2VyCisgICAgIHRoYW4gb25lIHBhZ2UgaW4gc2l6ZS4KKworICAgICBUaGlzIGRyaXZlciBjYW4gYmUgY29uZmlndXJlZCBieSBydW5uaW5nIG1ha2UgeGNvbmZpZywgYW5kIGdvaW5nIHRvOgorCisJKCopIENoYXJhY3RlciBkZXZpY2VzCisJICAgIC0gdHVybiBvbiAiRnVqaXRzdSBGUi1WIENQVSBXb3JrUkFNIHN1cHBvcnQiCisKKworICgqKSBEeW5hbWljIGRhdGEgY2FjaGUgd3JpdGUgbW9kZSBjaGFuZ2luZworCisgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHZpZXcgYW5kIHRvIGNoYW5nZSB0aGUgZGF0YSBjYWNoZSdzIHdyaXRlIG1vZGUgdGhyb3VnaAorICAgICB0aGUgL3Byb2Mvc3lzL2Zydi9jYWNoZS1tb2RlIGZpbGUgd2hpbGUgdGhlIGtlcm5lbCBpcyBydW5uaW5nLiBUaGVyZSBhcmUKKyAgICAgdHdvIG1vZGVzIGF2YWlsYWJsZToKKworCU5BTUUJTUVBTklORworCT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCXd0aHJ1CURhdGEgY2FjaGUgaXMgaW4gV3JpdGUtVGhyb3VnaCBtb2RlCisJd2JhY2sJRGF0YSBjYWNoZSBpcyBpbiBXcml0ZS1CYWNrL0NvcHktQmFjayBtb2RlCisKKyAgICAgVG8gcmVhZCB0aGUgY2FjaGUgbW9kZToKKworCSMgY2F0IC9wcm9jL3N5cy9mcnYvY2FjaGUtbW9kZQorCXd0aHJ1CisKKyAgICAgVG8gY2hhbmdlIHRoZSBjYWNoZSBtb2RlOgorCisJIyBlY2hvIHdiYWNrID4vcHJvYy9zeXMvZnJ2L2NhY2hlLW1vZGUKKwkjIGNhdCAvcHJvYy9zeXMvZnJ2L2NhY2hlLW1vZGUKKwl3YmFjaworCisKKyAoKikgTU1VIENvbnRleHQgSURzIGFuZCBQaW5uaW5nCisKKyAgICAgT24gTU1VIExpbnV4IHRoZSBDUFUgc3VwcG9ydHMgdGhlIGNvbmNlcHQgb2YgYSBjb250ZXh0IElEIGluIGl0cyBNTVUgdG8KKyAgICAgbWFrZSBpdCBtb3JlIGVmZmljaWVudCAoVExCIGVudHJpZXMgYXJlIGxhYmVsbGVkIHdpdGggYSBjb250ZXh0IElEIHRvIGxpbmsKKyAgICAgdGhlbSB0byBzcGVjaWZpYyB0YXNrcykuCisKKyAgICAgTm9ybWFsbHkgb25jZSBhIGNvbnRleHQgSUQgaXMgYWxsb2NhdGVkLCBpdCB3aWxsIHJlbWFpbiBhZmZpeGVkIHRvIGEgdGFzaworICAgICBvciBDTE9ORV9WTSdkIGdyb3VwIG9mIHRhc2tzIGZvciBhcyBsb25nIGFzIGl0IGV4aXN0cy4gSG93ZXZlciwgc2luY2UgdGhlCisgICAgIGtlcm5lbCBpcyBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgbW9yZSB0YXNrcyB0aGFuIHRoZXJlIGFyZSBwb3NzaWJsZSBJRAorICAgICBudW1iZXJzLCB0aGUga2VybmVsIHdpbGwgcGFzcyBjb250ZXh0IElEcyBmcm9tIG9uZSB0YXNrIHRvIGFub3RoZXIgaWYKKyAgICAgdGhlcmUgYXJlIGluc3VmZmljaWVudCBhdmFpbGFibGUuCisKKyAgICAgVGhlIGNvbnRleHQgSUQgY3VycmVudGx5IGluIHVzZSBieSBhIHRhc2sgY2FuIGJlIHZpZXdlZCBpbiAvcHJvYzoKKworCSMgZ3JlcCBDWE5SIC9wcm9jLzEvc3RhdHVzCisJQ1hOUjogMQorCisgICAgIE5vdGUgdGhhdCBrZXJuZWwgdGhyZWFkcyBkbyBub3QgaGF2ZSBhIHVzZXJzcGFjZSBjb250ZXh0LCBhbmQgc28gd2lsbCBub3QKKyAgICAgc2hvdyBhIENYTlIgZW50cnkgaW4gdGhhdCBmaWxlLgorCisgICAgIFVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgaG93ZXZlciwgaXQgaXMgZGVzaXJhYmxlIHRvIHBpbiBhIGNvbnRleHQgSUQgb24KKyAgICAgYSBwcm9jZXNzIHN1Y2ggdGhhdCB0aGUga2VybmVsIHdvbid0IHBhc3MgaXQgb24uIFRoaXMgY2FuIGJlIGRvbmUgYnkKKyAgICAgd3JpdGluZyB0aGUgcHJvY2VzcyBJRCBvZiB0aGUgdGFyZ2V0IHByb2Nlc3MgdG8gYSBzcGVjaWFsIGZpbGU6CisKKwkjIGVjaG8gMTcgPi9wcm9jL3N5cy9mcnYvcGluLWN4bnIKKworICAgICBSZWFkaW5nIGZyb20gdGhlIGZpbGUgd2lsbCB0aGVuIHNob3cgdGhlIGNvbnRleHQgSUQgcGlubmVkLgorCisJIyBjYXQgL3Byb2Mvc3lzL2Zydi9waW4tY3hucgorCTQKKworICAgICBUaGUgY29udGV4dCBJRCB3aWxsIHJlbWFpbiBwaW5uZWQgYXMgbG9uZyBhcyBhbnkgcHJvY2VzcyBpcyB1c2luZyB0aGF0CisgICAgIGNvbnRleHQsIGkuZS46IHdoZW4gdGhlIGFsbCB0aGUgc3Vic2NyaWJpbmcgcHJvY2Vzc2VzIGhhdmUgZXhpdGVkIG9yCisgICAgIGV4ZWMnZDsgb3Igd2hlbiBhbiB1bnBpbm5pbmcgcmVxdWVzdCBoYXBwZW5zOgorCisJIyBlY2hvIDAgPi9wcm9jL3N5cy9mcnYvcGluLWN4bnIKKworICAgICBXaGVuIHRoZXJlIGlzbid0IGEgcGlubmVkIGNvbnRleHQsIHRoZSBmaWxlIHNob3dzIC0xOgorCisJIyBjYXQgL3Byb2Mvc3lzL2Zydi9waW4tY3hucgorCS0xCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2dkYmluaXQgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2dkYmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1MTdiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZ2RiaW5pdApAQCAtMCwwICsxLDEwMiBAQAorc2V0IHJlbW90ZWJyZWFrIDEKKworZGVmaW5lIF9hbXIKKworcHJpbnRmICJBTVJ4ICAgICAgICAgICBEQU1SICAgICAgICAgICAgICAgICAgICBJQU1SICAgICAgICAgXG4iCitwcmludGYgIj09PT0gICA9PT09PT09PT09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT1cbiIKK3ByaW50ZiAiYW1yMCA6IEw6JTA4bHggUDolMDhseCA6IEw6JTA4bHggUDolMDhseFxuIixfX2RlYnVnX21tdS5kYW1yWzB4MF0uTCxfX2RlYnVnX21tdS5kYW1yWzB4MF0uUCxfX2RlYnVnX21tdS5pYW1yWzB4MF0uTCxfX2RlYnVnX21tdS5pYW1yWzB4MF0uUAorcHJpbnRmICJhbXIxIDogTDolMDhseCBQOiUwOGx4IDogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHgxXS5MLF9fZGVidWdfbW11LmRhbXJbMHgxXS5QLF9fZGVidWdfbW11LmlhbXJbMHgxXS5MLF9fZGVidWdfbW11LmlhbXJbMHgxXS5QCitwcmludGYgImFtcjIgOiBMOiUwOGx4IFA6JTA4bHggOiBMOiUwOGx4IFA6JTA4bHhcbiIsX19kZWJ1Z19tbXUuZGFtclsweDJdLkwsX19kZWJ1Z19tbXUuZGFtclsweDJdLlAsX19kZWJ1Z19tbXUuaWFtclsweDJdLkwsX19kZWJ1Z19tbXUuaWFtclsweDJdLlAKK3ByaW50ZiAiYW1yMyA6IEw6JTA4bHggUDolMDhseCA6IEw6JTA4bHggUDolMDhseFxuIixfX2RlYnVnX21tdS5kYW1yWzB4M10uTCxfX2RlYnVnX21tdS5kYW1yWzB4M10uUCxfX2RlYnVnX21tdS5pYW1yWzB4M10uTCxfX2RlYnVnX21tdS5pYW1yWzB4M10uUAorcHJpbnRmICJhbXI0IDogTDolMDhseCBQOiUwOGx4IDogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHg0XS5MLF9fZGVidWdfbW11LmRhbXJbMHg0XS5QLF9fZGVidWdfbW11LmlhbXJbMHg0XS5MLF9fZGVidWdfbW11LmlhbXJbMHg0XS5QCitwcmludGYgImFtcjUgOiBMOiUwOGx4IFA6JTA4bHggOiBMOiUwOGx4IFA6JTA4bHhcbiIsX19kZWJ1Z19tbXUuZGFtclsweDVdLkwsX19kZWJ1Z19tbXUuZGFtclsweDVdLlAsX19kZWJ1Z19tbXUuaWFtclsweDVdLkwsX19kZWJ1Z19tbXUuaWFtclsweDVdLlAKK3ByaW50ZiAiYW1yNiA6IEw6JTA4bHggUDolMDhseCA6IEw6JTA4bHggUDolMDhseFxuIixfX2RlYnVnX21tdS5kYW1yWzB4Nl0uTCxfX2RlYnVnX21tdS5kYW1yWzB4Nl0uUCxfX2RlYnVnX21tdS5pYW1yWzB4Nl0uTCxfX2RlYnVnX21tdS5pYW1yWzB4Nl0uUAorcHJpbnRmICJhbXI3IDogTDolMDhseCBQOiUwOGx4IDogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHg3XS5MLF9fZGVidWdfbW11LmRhbXJbMHg3XS5QLF9fZGVidWdfbW11LmlhbXJbMHg3XS5MLF9fZGVidWdfbW11LmlhbXJbMHg3XS5QCisKK3ByaW50ZiAiYW1yOCA6IEw6JTA4bHggUDolMDhseFxuIixfX2RlYnVnX21tdS5kYW1yWzB4OF0uTCxfX2RlYnVnX21tdS5kYW1yWzB4OF0uUAorcHJpbnRmICJhbXI5IDogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHg5XS5MLF9fZGVidWdfbW11LmRhbXJbMHg5XS5QCitwcmludGYgImFtcjEwOiBMOiUwOGx4IFA6JTA4bHhcbiIsX19kZWJ1Z19tbXUuZGFtclsweGFdLkwsX19kZWJ1Z19tbXUuZGFtclsweGFdLlAKK3ByaW50ZiAiYW1yMTE6IEw6JTA4bHggUDolMDhseFxuIixfX2RlYnVnX21tdS5kYW1yWzB4Yl0uTCxfX2RlYnVnX21tdS5kYW1yWzB4Yl0uUAorCitlbmQKKworCitkZWZpbmUgX3RsYgorcHJpbnRmICJ0bGJbMHgwMF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgwXS5MLF9fZGVidWdfbW11LnRsYlsweDBdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgwXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MF0uUAorcHJpbnRmICJ0bGJbMHgwMV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxXS5MLF9fZGVidWdfbW11LnRsYlsweDFdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MV0uUAorcHJpbnRmICJ0bGJbMHgwMl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyXS5MLF9fZGVidWdfbW11LnRsYlsweDJdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4Ml0uUAorcHJpbnRmICJ0bGJbMHgwM106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzXS5MLF9fZGVidWdfbW11LnRsYlsweDNdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M10uUAorcHJpbnRmICJ0bGJbMHgwNF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHg0XS5MLF9fZGVidWdfbW11LnRsYlsweDRdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg0XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4NF0uUAorcHJpbnRmICJ0bGJbMHgwNV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHg1XS5MLF9fZGVidWdfbW11LnRsYlsweDVdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg1XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4NV0uUAorcHJpbnRmICJ0bGJbMHgwNl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHg2XS5MLF9fZGVidWdfbW11LnRsYlsweDZdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg2XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4Nl0uUAorcHJpbnRmICJ0bGJbMHgwN106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHg3XS5MLF9fZGVidWdfbW11LnRsYlsweDddLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg3XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4N10uUAorcHJpbnRmICJ0bGJbMHgwOF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHg4XS5MLF9fZGVidWdfbW11LnRsYlsweDhdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg4XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4OF0uUAorcHJpbnRmICJ0bGJbMHgwOV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHg5XS5MLF9fZGVidWdfbW11LnRsYlsweDldLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg5XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4OV0uUAorcHJpbnRmICJ0bGJbMHgwYV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHhhXS5MLF9fZGVidWdfbW11LnRsYlsweGFdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhhXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4YV0uUAorcHJpbnRmICJ0bGJbMHgwYl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHhiXS5MLF9fZGVidWdfbW11LnRsYlsweGJdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhiXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4Yl0uUAorcHJpbnRmICJ0bGJbMHgwY106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHhjXS5MLF9fZGVidWdfbW11LnRsYlsweGNdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhjXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4Y10uUAorcHJpbnRmICJ0bGJbMHgwZF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHhkXS5MLF9fZGVidWdfbW11LnRsYlsweGRdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhkXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4ZF0uUAorcHJpbnRmICJ0bGJbMHgwZV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHhlXS5MLF9fZGVidWdfbW11LnRsYlsweGVdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhlXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4ZV0uUAorcHJpbnRmICJ0bGJbMHgwZl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHhmXS5MLF9fZGVidWdfbW11LnRsYlsweGZdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhmXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4Zl0uUAorcHJpbnRmICJ0bGJbMHgxMF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxMF0uTCxfX2RlYnVnX21tdS50bGJbMHgxMF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDEwXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTBdLlAKK3ByaW50ZiAidGxiWzB4MTFdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MTFdLkwsX19kZWJ1Z19tbXUudGxiWzB4MTFdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxMV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDExXS5QCitwcmludGYgInRsYlsweDEyXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDEyXS5MLF9fZGVidWdfbW11LnRsYlsweDEyXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTJdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxMl0uUAorcHJpbnRmICJ0bGJbMHgxM106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxM10uTCxfX2RlYnVnX21tdS50bGJbMHgxM10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDEzXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTNdLlAKK3ByaW50ZiAidGxiWzB4MTRdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MTRdLkwsX19kZWJ1Z19tbXUudGxiWzB4MTRdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxNF0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDE0XS5QCitwcmludGYgInRsYlsweDE1XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDE1XS5MLF9fZGVidWdfbW11LnRsYlsweDE1XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTVdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxNV0uUAorcHJpbnRmICJ0bGJbMHgxNl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxNl0uTCxfX2RlYnVnX21tdS50bGJbMHgxNl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDE2XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTZdLlAKK3ByaW50ZiAidGxiWzB4MTddOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MTddLkwsX19kZWJ1Z19tbXUudGxiWzB4MTddLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxN10uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDE3XS5QCitwcmludGYgInRsYlsweDE4XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDE4XS5MLF9fZGVidWdfbW11LnRsYlsweDE4XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MThdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxOF0uUAorcHJpbnRmICJ0bGJbMHgxOV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxOV0uTCxfX2RlYnVnX21tdS50bGJbMHgxOV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDE5XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTldLlAKK3ByaW50ZiAidGxiWzB4MWFdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MWFdLkwsX19kZWJ1Z19tbXUudGxiWzB4MWFdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxYV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFhXS5QCitwcmludGYgInRsYlsweDFiXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDFiXS5MLF9fZGVidWdfbW11LnRsYlsweDFiXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MWJdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxYl0uUAorcHJpbnRmICJ0bGJbMHgxY106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxY10uTCxfX2RlYnVnX21tdS50bGJbMHgxY10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFjXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MWNdLlAKK3ByaW50ZiAidGxiWzB4MWRdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MWRdLkwsX19kZWJ1Z19tbXUudGxiWzB4MWRdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxZF0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFkXS5QCitwcmludGYgInRsYlsweDFlXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDFlXS5MLF9fZGVidWdfbW11LnRsYlsweDFlXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MWVdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxZV0uUAorcHJpbnRmICJ0bGJbMHgxZl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxZl0uTCxfX2RlYnVnX21tdS50bGJbMHgxZl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFmXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MWZdLlAKK3ByaW50ZiAidGxiWzB4MjBdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MjBdLkwsX19kZWJ1Z19tbXUudGxiWzB4MjBdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyMF0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDIwXS5QCitwcmludGYgInRsYlsweDIxXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDIxXS5MLF9fZGVidWdfbW11LnRsYlsweDIxXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjFdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyMV0uUAorcHJpbnRmICJ0bGJbMHgyMl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyMl0uTCxfX2RlYnVnX21tdS50bGJbMHgyMl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDIyXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjJdLlAKK3ByaW50ZiAidGxiWzB4MjNdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MjNdLkwsX19kZWJ1Z19tbXUudGxiWzB4MjNdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyM10uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDIzXS5QCitwcmludGYgInRsYlsweDI0XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDI0XS5MLF9fZGVidWdfbW11LnRsYlsweDI0XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjRdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyNF0uUAorcHJpbnRmICJ0bGJbMHgyNV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyNV0uTCxfX2RlYnVnX21tdS50bGJbMHgyNV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDI1XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjVdLlAKK3ByaW50ZiAidGxiWzB4MjZdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MjZdLkwsX19kZWJ1Z19tbXUudGxiWzB4MjZdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyNl0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDI2XS5QCitwcmludGYgInRsYlsweDI3XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDI3XS5MLF9fZGVidWdfbW11LnRsYlsweDI3XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjddLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyN10uUAorcHJpbnRmICJ0bGJbMHgyOF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyOF0uTCxfX2RlYnVnX21tdS50bGJbMHgyOF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDI4XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjhdLlAKK3ByaW50ZiAidGxiWzB4MjldOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MjldLkwsX19kZWJ1Z19tbXUudGxiWzB4MjldLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyOV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDI5XS5QCitwcmludGYgInRsYlsweDJhXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDJhXS5MLF9fZGVidWdfbW11LnRsYlsweDJhXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MmFdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyYV0uUAorcHJpbnRmICJ0bGJbMHgyYl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyYl0uTCxfX2RlYnVnX21tdS50bGJbMHgyYl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJiXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MmJdLlAKK3ByaW50ZiAidGxiWzB4MmNdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MmNdLkwsX19kZWJ1Z19tbXUudGxiWzB4MmNdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyY10uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJjXS5QCitwcmludGYgInRsYlsweDJkXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDJkXS5MLF9fZGVidWdfbW11LnRsYlsweDJkXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MmRdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyZF0uUAorcHJpbnRmICJ0bGJbMHgyZV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyZV0uTCxfX2RlYnVnX21tdS50bGJbMHgyZV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJlXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MmVdLlAKK3ByaW50ZiAidGxiWzB4MmZdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MmZdLkwsX19kZWJ1Z19tbXUudGxiWzB4MmZdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyZl0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJmXS5QCitwcmludGYgInRsYlsweDMwXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDMwXS5MLF9fZGVidWdfbW11LnRsYlsweDMwXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzBdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzMF0uUAorcHJpbnRmICJ0bGJbMHgzMV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzMV0uTCxfX2RlYnVnX21tdS50bGJbMHgzMV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDMxXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzFdLlAKK3ByaW50ZiAidGxiWzB4MzJdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MzJdLkwsX19kZWJ1Z19tbXUudGxiWzB4MzJdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzMl0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDMyXS5QCitwcmludGYgInRsYlsweDMzXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDMzXS5MLF9fZGVidWdfbW11LnRsYlsweDMzXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzNdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzM10uUAorcHJpbnRmICJ0bGJbMHgzNF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzNF0uTCxfX2RlYnVnX21tdS50bGJbMHgzNF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDM0XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzRdLlAKK3ByaW50ZiAidGxiWzB4MzVdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MzVdLkwsX19kZWJ1Z19tbXUudGxiWzB4MzVdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzNV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDM1XS5QCitwcmludGYgInRsYlsweDM2XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDM2XS5MLF9fZGVidWdfbW11LnRsYlsweDM2XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzZdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzNl0uUAorcHJpbnRmICJ0bGJbMHgzN106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzN10uTCxfX2RlYnVnX21tdS50bGJbMHgzN10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDM3XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzddLlAKK3ByaW50ZiAidGxiWzB4MzhdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MzhdLkwsX19kZWJ1Z19tbXUudGxiWzB4MzhdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzOF0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDM4XS5QCitwcmludGYgInRsYlsweDM5XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDM5XS5MLF9fZGVidWdfbW11LnRsYlsweDM5XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzldLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzOV0uUAorcHJpbnRmICJ0bGJbMHgzYV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzYV0uTCxfX2RlYnVnX21tdS50bGJbMHgzYV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNhXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M2FdLlAKK3ByaW50ZiAidGxiWzB4M2JdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4M2JdLkwsX19kZWJ1Z19tbXUudGxiWzB4M2JdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzYl0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNiXS5QCitwcmludGYgInRsYlsweDNjXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDNjXS5MLF9fZGVidWdfbW11LnRsYlsweDNjXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M2NdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzY10uUAorcHJpbnRmICJ0bGJbMHgzZF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzZF0uTCxfX2RlYnVnX21tdS50bGJbMHgzZF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNkXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M2RdLlAKK3ByaW50ZiAidGxiWzB4M2VdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4M2VdLkwsX19kZWJ1Z19tbXUudGxiWzB4M2VdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzZV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNlXS5QCitwcmludGYgInRsYlsweDNmXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDNmXS5MLF9fZGVidWdfbW11LnRsYlsweDNmXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M2ZdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzZl0uUAorZW5kCisKKworZGVmaW5lIF9wZ2QKK3AgKHBnZF90WzB4NDBdKSoocGdkX3QqKShfX2RlYnVnX21tdS5kYW1yWzB4M10uTCkKK2VuZAorCitkZWZpbmUgX3B0ZF9pCitwIChwdGVfdFsweDEwMDBdKSoocHRlX3QqKShfX2RlYnVnX21tdS5kYW1yWzB4NF0uTCkKK2VuZAorCitkZWZpbmUgX3B0ZF9kCitwIChwdGVfdFsweDEwMDBdKSoocHRlX3QqKShfX2RlYnVnX21tdS5kYW1yWzB4NV0uTCkKK2VuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9nZGJzdHViLnR4dCBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZ2Ric3R1Yi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlNWFhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZ2Ric3R1Yi50eHQKQEAgLTAsMCArMSwxMzAgQEAKKwkJCSAgICAgPT09PT09PT09PT09PT09PT09PT0KKwkJCSAgICAgREVCVUdHSU5HIEZSLVYgTElOVVgKKwkJCSAgICAgPT09PT09PT09PT09PT09PT09PT0KKworCitUaGUga2VybmVsIGNvbnRhaW5zIGEgR0RCIHN0dWIgdGhhdCB0YWxrcyBHREIgcmVtb3RlIHByb3RvY29sIGFjcm9zcyBhIHNlcmlhbAorcG9ydC4gVGhpcyBwZXJtaXRzIEdEQiB0byBzaW5nbGUgc3RlcCB0aHJvdWdoIHRoZSBrZXJuZWwsIHNldCBicmVha3BvaW50cyBhbmQKK3RyYXAgZXhjZXB0aW9ucyB0aGF0IGhhcHBlbiBpbiBrZXJuZWwgc3BhY2UgYW5kIGludGVycnVwdCBleGVjdXRpb24uIEl0IGFsc28KK3Blcm1pdHMgdGhlIE5NSSBpbnRlcnJ1cHQgYnV0dG9uIG9yIHNlcmlhbCBwb3J0IGV2ZW50cyB0byBqdW1wIHRoZSBrZXJuZWwgaW50bwordGhlIGRlYnVnZ2VyLgorCitPbiB0aGUgQ1BVcyB0aGF0IGhhdmUgb24tY2hpcCBVQVJUcyAoRlI0MDAsIEZSNDAzLCBGUjQwNSwgRlI1NTUpLCB0aGUKK0dEQiBzdHViIGhpamFja3MgYSBzZXJpYWwgcG9ydCBmb3IgaXRzIG93biBwdXJwb3NlcywgYW5kIG1ha2VzIGl0CitnZW5lcmF0ZSBsZXZlbCAxNSBpbnRlcnJ1cHRzIChOTUkpLiBUaGUga2VybmVsIHByb3BlciBjYW5ub3Qgc2VlIHRoZSBzZXJpYWwKK3BvcnQgaW4gcXVlc3Rpb24gdW5kZXIgdGhlc2UgY29uZGl0aW9ucy4KKworT24gdGhlIE1COTMwOTEtVkRLIENQVSBib2FyZHMsIHRoZSBHREIgc3R1YiB1c2VzIFVBUlQxLCB3aGljaCB3b3VsZCBvdGhlcndpc2UKK2JlIC9kZXYvdHR5UzEuIE9uIHRoZSBNQjkzMDkzLVBESywgdGhlIEdEQiBzdHViIHVzZXMgVUFSVDAuIFRoZXJlZm9yZSwgb24gdGhlCitQREsgdGhlcmUgaXMgbm8gZXh0ZXJuYWxseSBhY2Nlc3NpYmxlIHNlcmlhbCBwb3J0IGFuZCB0aGUgc2VyaWFsIHBvcnQgdG8KK3doaWNoIHRoZSB0b3VjaCBzY3JlZW4gaXMgYXR0YWNoZWQgYmVjb21lcyAvZGV2L3R0eVMwLgorCitOb3RlIHRoYXQgdGhlIEdEQiBzdHViIHJ1bnMgZW50aXJlbHkgd2l0aGluIENQVSBkZWJ1ZyBtb2RlLCBhbmQgc28gc2hvdWxkIG5vdAoraW5jdXIgYW55IGV4Y2VwdGlvbnMgb3IgaW50ZXJydXB0cyB3aGlsc3QgaXQgaXMgYWN0aXZlLiBJbiBwYXJ0aWN1bGFyLCBub3RlCit0aGF0IHRoZSBjbG9jayB3aWxsIGxvc2UgdGltZSBzaW5jZSBpdCBpcyBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZS4KKworCis9PT09PT09PT09PT09PT09PT0KK0tFUk5FTCBQUkVQQVJBVElPTgorPT09PT09PT09PT09PT09PT09CisKK0ZpcnN0bHksIGEgZGVidWdnYWJsZSBrZXJuZWwgbXVzdCBiZSBidWlsdC4gVG8gZG8gdGhpcywgdW5wYWNrIHRoZSBrZXJuZWwgdHJlZQorYW5kIGNvcHkgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB5b3Ugd2lzaCB0byB1c2UgdG8gLmNvbmZpZy4gVGhlbiByZWNvbmZpZ3VyZQordGhlIGZvbGxvd2luZyB0aGluZ3Mgb24gdGhlICJLZXJuZWwgSGFja2luZyIgdGFiOgorCisgICgqKSAiSW5jbHVkZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24iCisKKyAgICAgIFNldCB0aGlzIHRvICJZIi4gVGhpcyBjYXVzZXMgYWxsIEMgYW5kIEFzc2VtYmx5IGZpbGVzIHRvIGJlIGNvbXBpbGVkCisgICAgICB0byBpbmNsdWRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKworICAoKikgIkluLWtlcm5lbCBHREIgc3R1YiIKKworICAgICAgU2V0IHRoaXMgdG8gIlkiLiBUaGlzIGNhdXNlcyB0aGUgR0RCIHN0dWIgdG8gYmUgY29tcGlsZWQgaW50byB0aGUKKyAgICAgIGtlcm5lbC4KKworICAoKikgIkltbWVkaWF0ZSBhY3RpdmF0aW9uIgorCisgICAgICBTZXQgdGhpcyB0byAiWSIgaWYgeW91IHdhbnQgdGhlIEdEQiBzdHViIHRvIGFjdGl2YXRlIGFzIHNvb24gYXMgcG9zc2libGUKKyAgICAgIGFuZCB3YWl0IGZvciBHREIgdG8gY29ubmVjdC4gVGhpcyBhbGxvd3MgeW91IHRvIHN0YXJ0IHRyYWNpbmcgcmlnaHQgZnJvbQorICAgICAgdGhlIGJlZ2lubmluZyBvZiBzdGFydF9rZXJuZWwoKSBpbiBpbml0L21haW4uYy4KKworICAoKikgIkNvbnNvbGUgdGhyb3VnaCBHREIgc3R1YiIKKworICAgICAgU2V0IHRoaXMgdG8gIlkiIGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gdXNlICJjb25zb2xlPWdkYjAiIG9uIHRoZQorICAgICAgY29tbWFuZCBsaW5lLiBUaGF0IHRlbGxzIHRoZSBrZXJuZWwgdG8gcGFzcyBzeXN0ZW0gY29uc29sZSBtZXNzYWdlcyB0bworICAgICAgR0RCICh3aGljaCB0aGVuIHByaW50cyB0aGVtIG9uIGl0cyBzdGFuZGFyZCBvdXRwdXQpLiBUaGlzIGlzIHVzZWZ1bCB3aGVuCisgICAgICBkZWJ1Z2dpbmcgdGhlIHNlcmlhbCBkcml2ZXJzIHRoYXQnZCBvdGhlcndpc2UgYmUgdXNlZCB0byBwYXNzIGNvbnNvbGUKKyAgICAgIG1lc3NhZ2VzIHRvIHRoZSBvdXRzaWRlIHdvcmxkLgorCitUaGVuIGJ1aWxkIGFzIHVzdWFsLCBkb3dubG9hZCB0byB0aGUgYm9hcmQgYW5kIGV4ZWN1dGUuIE5vdGUgdGhhdCBpZgorIkltbWVkaWF0ZSBhY3RpdmF0aW9uIiB3YXMgc2VsZWN0ZWQsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHdhaXQgZm9yIEdEQiB0bworYXR0YWNoLiBJZiBub3QsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIGJvb3QgaW1tZWRpYXRlbHkgYW5kIEdEQiB3aWxsIGhhdmUgdG8KK2ludGVydXB0IGl0IG9yIHdhaXQgZm9yIGFuIGV4Y2VwdGlvbiB0byBvY2N1ciBpZiBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aAordGhlIGtlcm5lbC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09CitLRVJORUwgREVCVUdHSU5HIFdJVEggR0RCCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NldCB0aGUgc2VyaWFsIHBvcnQgb24gdGhlIGNvbXB1dGVyIHRoYXQncyBnb2luZyB0byBydW4gR0RCIHRvIHRoZSBhcHByb3ByaWF0ZQorYmF1ZCByYXRlLiBBc3N1bWluZyB0aGUgYm9hcmQncyBkZWJ1ZyBwb3J0IGlzIGNvbm5lY3RlZCB0byB0dHlTMC9DT00xIG9uIHRoZQorY29tcHV0ZXIgZG9pbmcgdGhlIGRlYnVnZ2luZzoKKworCXN0dHkgLUYgL2Rldi90dHlTMCAxMTUyMDAKKworVGhlbiBzdGFydCBHREIgaW4gdGhlIGJhc2Ugb2YgdGhlIGtlcm5lbCB0cmVlOgorCisJZnJ2LXVjbGludXgtZ2RiIGxpbnV4CQlbdUNsaW51eF0KKworT3I6CisKKwlmcnYtdWNsaW51eC1nZGIgdm1saW51eAkJW01NVSBsaW51eF0KKworV2hlbiB0aGUgcHJvbXB0IGFwcGVhcnM6CisKKwlHTlUgZ2RiIGZydi0wMzEwMjQKKwlDb3B5cmlnaHQgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwlHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlCisJd2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVzIG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKwlUeXBlICJzaG93IGNvcHlpbmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4KKwlUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5IiBmb3IgZGV0YWlscy4KKwlUaGlzIEdEQiB3YXMgY29uZmlndXJlZCBhcyAiLS1ob3N0PWk2ODYtcGMtbGludXgtZ251IC0tdGFyZ2V0PWZydi11Y2xpbnV4Ii4uLgorCShnZGIpCisKK0F0dGFjaCB0byB0aGUgYm9hcmQgbGlrZSB0aGlzOgorCisgICAgICAgIChnZGIpIHRhcmdldCByZW1vdGUgL2Rldi90dHlTMAorCVJlbW90ZSBkZWJ1Z2dpbmcgdXNpbmcgL2Rldi90dHlTMAorCXN0YXJ0X2tlcm5lbCAoKSBhdCBpbml0L21haW4uYzozOTUKKwkoZ2RiKQorCitUaGlzIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBsaW5lcyBmcm9tIHRoZSBzb3VyY2UgdG9vLiBUaGUga2VybmVsIGNhbgordGhlbiBiZSBkZWJ1Z2dlZCBhbG1vc3QgYXMgaWYgaXQncyBhbnkgb3RoZXIgcHJvZ3JhbS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJTlRFUlJVUFRJTkcgVEhFIFJVTk5JTkcgS0VSTkVMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBrZXJuZWwgY2FuIGJlIGludGVycnVwdGVkIHdoaWxzdCBpdCBpcyBydW5uaW5nLCBjYXVzaW5nIGEganVtcCBiYWNrIHRvIHRoZQorR0RCIHN0dWIgYW5kIHRoZSBkZWJ1Z2dlcjoKKworICAoKikgUHJlc3NpbmcgQ3RybC1DIGluIEdEQi4gVGhpcyB3aWxsIGNhdXNlIEdEQiB0byB0cnkgYW5kIGludGVycnVwdCB0aGUKKyAgICAgIGtlcm5lbCBieSBzZW5kaW5nIGFuIFJTMjMyIEJSRUFLIG92ZXIgdGhlIHNlcmlhbCBsaW5lIHRvIHRoZSBHREIKKyAgICAgIHN0dWIuIFRoaXMgd2lsbCAobW9zdGx5KSBpbW1lZGlhdGVseSBpbnRlcnJ1cHQgdGhlIGtlcm5lbCBhbmQgcmV0dXJuIGl0CisgICAgICB0byB0aGUgZGVidWdnZXIuCisKKyAgKCopIFByZXNzaW5nIHRoZSBOTUkgYnV0dG9uIG9uIHRoZSBib2FyZCB3aWxsIGFsc28gY2F1c2UgYSBqdW1wIGludG8gdGhlCisgICAgICBkZWJ1Z2dlci4KKworICAoKikgU2V0dGluZyBhIHNvZnR3YXJlIGJyZWFrcG9pbnQuIFRoaXMgc2V0cyBhIGJyZWFrIGluc3RydWN0aW9uIGF0IHRoZQorICAgICAgZGVzaXJlZCBsb2NhdGlvbiB3aGljaCB0aGUgR0RCIHN0dWIgdGhlbiB0cmFwcyB0aGUgZXhjZXB0aW9uIGZvci4KKworICAoKikgU2V0dGluZyBhIGhhcmR3YXJlIGJyZWFrcG9pbnQuIFRoZSBHREIgc3R1YiBpcyBjYXBhYmxlIG9mIHVzaW5nIHRoZSBJQkFSCisgICAgICBhbmQgREJBUiByZWdpc3RlcnMgdG8gYXNzaXN0IGRlYnVnZ2luZy4KKworRnVydGhlcm1vcmUsIHRoZSBHREIgc3R1YiB3aWxsIGludGVyY2VwdCBhIG51bWJlciBvZiBleGNlcHRpb25zIGF1dG9tYXRpY2FsbHkKK2lmIHRoZXkgYXJlIGNhdXNlZCBieSBrZXJuZWwgZXhlY3V0aW9uLiBJdCB3aWxsIGFsc28gaW50ZXJjZXB0IEJVRygpIG1hY3JvCitpbnZva2F0aW9uLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L21tdS1sYXlvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9tbXUtbGF5b3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRjYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9tbXUtbGF5b3V0LnR4dApAQCAtMCwwICsxLDMwNiBAQAorCQkJCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkgRlI0NTEgTU1VIExJTlVYIE1FTU9SWSBNQU5BR0VNRU5UCisJCQkJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis9PT09PT09PT09PT0KK01NVSBIQVJEV0FSRQorPT09PT09PT09PT09CisKK0ZSNDUxIE1NVSBMaW51eCBwdXRzIHRoZSBNTVUgaW50byBFREFUIG1vZGUgd2hpbHN0IHJ1bm5pbmcuIFRoaXMgbWVhbnMgdGhhdCBpdCB1c2VzIGJvdGggdGhlIFNBVAorcmVnaXN0ZXJzIGFuZCB0aGUgREFUIFRMQiB0byBwZXJmb3JtIGFkZHJlc3MgdHJhbnNsYXRpb24uCisKK1RoZXJlIGFyZSA4IElBTUxSL0lBTVBSIHJlZ2lzdGVyIHBhaXJzIGFuZCAxNiBEQU1MUi9EQU1QUiByZWdpc3RlciBwYWlycyBmb3IgU0FUIG1vZGUuCisKK0luIERBVCBtb2RlLCB0aGVyZSBpcyBhbHNvIGEgVExCIG9yZ2FuaXNlZCBpbiBjYWNoZSBmb3JtYXQgYXMgNjQgbGluZXMgeCAyIHdheXMuIEVhY2ggbGluZSBzcGFucyBhCisxNktCIHJhbmdlIG9mIGFkZHJlc3NlcywgYnV0IGNhbiBtYXRjaCBhIGxhcmdlciByZWdpb24uCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CitNRU1PUlkgTUFOQUdFTUVOVCBSRUdJU1RFUlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDZXJ0YWluIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSB1c2VkIGJ5IHRoZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXM6CisKKwlSRUdJU1RFUlMJCVVTQUdFCisJPT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUlBTVIwLCBEQU1SMAkJS2VybmVsIGltYWdlIGFuZCBkYXRhIG1hcHBpbmdzCisJSUFNUjEsIERBTVIxCQlGaXJzdC1jaGFuY2UgVExCIGxvb2t1cCBtYXBwaW5nCisJREFNUjIJCQlQYWdlIGF0dGFjaG1lbnQgZm9yIGNhY2hlIGZsdXNoIGJ5IHBhZ2UKKwlEQU1SMwkJCUN1cnJlbnQgUEdEIG1hcHBpbmcKKwlTQ1IwLCBEQU1SNAkJSW5zdHJ1Y3Rpb24gVExCIFBHRS9QVEQgY2FjaGUKKwlTQ1IxLCBEQU1SNQkJRGF0YSBUTEIgUEdFL1BURCBjYWNoZQorCURBTVI2LTEwCQlrbWFwX2F0b21pYygpIG1hcHBpbmdzCisJREFNUjExCQkJSS9PIG1hcHBpbmcKKwlDWE5SCQkJbW1fc3RydWN0IGNvbnRleHQgSUQKKwlUVEJSCQkJUGFnZSBkaXJlY3RvcnkgKFBHRCkgcG9pbnRlciAocGh5c2ljYWwgYWRkcmVzcykKKworCis9PT09PT09PT09PT09PT09PT09PT0KK0dFTkVSQUwgTUVNT1JZIExBWU9VVAorPT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBwaHlzaWNhbCBtZW1vcnkgbGF5b3V0IGlzIGFzIGZvbGxvd3M6CisKKyAgUEhZU0lDQUwgQUREUkVTUwlDT05UUk9MTEVSCURFVklDRQorICA9PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAwMDAwMDAwMCAtIEJGRkZGRkZGCVNEUkFNCQlTRFJBTSBhcmVhCisgIEUwMDAwMDAwIC0gRUZGRkZGRkYJTC1CVVMgQ1MyIwlWREsgU0xCVVMvUENJIHdpbmRvdworICBGMDAwMDAwMCAtIEYwRkZGRkZGCUwtQlVTIENTNSMJTUI5MzQ5MyBDU0MgYXJlYSAoREFWIGRhdWdodGVyIGJvYXJkKQorICBGMTAwMDAwMCAtIEYxRkZGRkZGCUwtQlVTIENTNyMJKENCNzAgQ1BVLWNhcmQgUENNQ0lBIHBvcnQgSS9PIHNwYWNlKQorICBGQzAwMDAwMCAtIEZDMEZGRkZGCUwtQlVTIENTMSMJVkRLIE1CODY5NDMgY29uZmlnIHNwYWNlCisgIEZDMTAwMDAwIC0gRkMxRkZGRkYJTC1CVVMgQ1M2IwlETTkwMDAgTklDIEkvTyBzcGFjZQorICBGQzIwMDAwMCAtIEZDMkZGRkZGCUwtQlVTIENTMyMJTUI5MzQ5MyBDU1IgYXJlYSAoREFWIGRhdWdodGVyIGJvYXJkKQorICBGRDAwMDAwMCAtIEZERkZGRkZGCUwtQlVTIENTNCMJKENCNzAgQ1BVLWNhcmQgZXh0cmEgZmxhc2ggc3BhY2UpCisgIEZFMDAwMDAwIC0gRkVGRkZGRkYJCQlJbnRlcm5hbCBDUFUgcGVyaXBoZXJhbHMKKyAgRkYwMDAwMDAgLSBGRjFGRkZGRglMLUJVUyBDUzAjCUZsYXNoIDEKKyAgRkYyMDAwMDAgLSBGRjNGRkZGRglMLUJVUyBDUzAjCUZsYXNoIDIKKyAgRkZDMDAwMDAgLSBGRkMwMDAxRglMLUJVUyBDUzAjCUZQR0EKKworVGhlIHZpcnR1YWwgbWVtb3J5IGxheW91dCBpczoKKworICBWSVJUVUFMIEFERFJFU1MgICAgUEhZU0lDQUwJVFJBTlNMQVRPUglGTEFHUwlTSVpFCU9DQ1VQQVRJT04KKyAgPT09PT09PT09PT09PT09PT0gID09PT09PT09CT09PT09PT09PT09PT09CT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAwMDAwNDAwMC1CRkZGRkZGRiAgdmFyaW91cwlUTEIseEFNUjEJRC1OLT8/VgkzR0IJVXNlcnNwYWNlCisgIEMwMDAwMDAwLUNGRkZGRkZGICAwMDAwMDAwMAl4QU1QUjAJCS1MLVMtLVYJMjU2TUIJS2VybmVsIGltYWdlIGFuZCBkYXRhCisgIEQwMDAwMDAwLUQ3RkZGRkZGICB2YXJpb3VzCVRMQix4QU1SMQlELU5TPz9WCTEyOE1CCXZtYWxsb2MgYXJlYQorICBEODAwMDAwMC1EQkZGRkZGRiAgdmFyaW91cwlUTEIseEFNUjEJRC1OUz8/Vgk2NE1CCWttYXAoKSBhcmVhCisgIERDMDAwMDAwLURDRkZGRkZGICB2YXJpb3VzCVRMQgkJCTFNQglTZWNvbmRhcnkga21hcF9hdG9taWMoKSBmcmFtZQorICBERDAwMDAwMC1ERDI3RkZGRiAgdmFyaW91cwlEQU1SCQkJMTYwS0IJUHJpbWFyeSBrbWFwX2F0b21pYygpIGZyYW1lCisgIEREMDQwMDAwCQkJREFNUjIvSUFNUjIJLUwtUy0tVglwYWdlCVBhZ2UgY2FjaGUgZmx1c2ggYXR0YWNobWVudCBwb2ludAorICBERDA4MDAwMAkJCURBTVIzCQktTC1TQy1WCXBhZ2UJUGFnZSBEaXJlY3RvcnkgKFBHRCkKKyAgREQwQzAwMDAJCQlEQU1SNAkJLUwtU0MtVglwYWdlCUNhY2hlZCBpbnNuIFRMQiBQYWdlIFRhYmxlIGxvb2t1cAorICBERDEwMDAwMAkJCURBTVI1CQktTC1TQy1WCXBhZ2UJQ2FjaGVkIGRhdGEgVExCIFBhZ2UgVGFibGUgbG9va3VwCisgIEREMTQwMDAwCQkJREFNUjYJCS1MLVMtLVYJcGFnZQlrbWFwX2F0b21pYyhLTV9CT1VOQ0VfUkVBRCkKKyAgREQxODAwMDAJCQlEQU1SNwkJLUwtUy0tVglwYWdlCWttYXBfYXRvbWljKEtNX1NLQl9TVU5SUENfREFUQSkKKyAgREQxQzAwMDAJCQlEQU1SOAkJLUwtUy0tVglwYWdlCWttYXBfYXRvbWljKEtNX1NLQl9EQVRBX1NPRlRJUlEpCisgIEREMjAwMDAwCQkJREFNUjkJCS1MLVMtLVYJcGFnZQlrbWFwX2F0b21pYyhLTV9VU0VSMCkKKyAgREQyNDAwMDAJCQlEQU1SMTAJCS1MLVMtLVYJcGFnZQlrbWFwX2F0b21pYyhLTV9VU0VSMSkKKyAgRTAwMDAwMDAtRkZGRkZGRkYgIEUwMDAwMDAwCURBTVIxMQkJLUwtU0MtVgk1MTJNQglJL08gcmVnaW9uCisKK0lBTVBSMSBhbmQgREFNUFIxIGFyZSB1c2VkIGFzIGFuIGV4dGVuc2lvbiB0byB0aGUgVExCLgorCisKKz09PT09PT09PT09PT09PT09PT09CitLTUFQIEFORCBLTUFQX0FUT01JQworPT09PT09PT09PT09PT09PT09PT0KKworVG8gYWNjZXNzIHBhZ2VzIGluIHRoZSBwYWdlIGNhY2hlICh3aGljaCBtYXkgbm90IGJlIGRpcmVjdGx5IGFjY2Vzc2libGUgaWYgaGlnaG1lbSBpcyBhdmFpbGFibGUpLAordGhlIGtlcm5lbCBjYWxscyBrbWFwKCksIGRvZXMgdGhlIGFjY2VzcyBhbmQgdGhlbiBjYWxscyBrdW5tYXAoKTsgb3IgaXQgY2FsbHMga21hcF9hdG9taWMoKSwgZG9lcwordGhlIGFjY2VzcyBhbmQgdGhlbiBjYWxscyBrdW5tYXBfYXRvbWljKCkuCisKK2ttYXAoKSBjcmVhdGVzIGFuIGF0dGFjaG1lbnQgYmV0d2VlbiBhbiBhcmJpdHJhcnkgaW5hY2Nlc3NpYmxlIHBhZ2UgYW5kIGEgcmFuZ2Ugb2YgdmlydHVhbAorYWRkcmVzc2VzIGJ5IGluc3RhbGxpbmcgYSBQVEUgaW4gYSBzcGVjaWFsIHBhZ2UgdGFibGUuIFRoZSBrZXJuZWwgY2FuIHRoZW4gYWNjZXNzIHRoaXMgcGFnZSBhcyBpdAord2lsbHMuIFdoZW4gaXQncyBmaW5pc2hlZCwgdGhlIGtlcm5lbCBjYWxscyBrdW5tYXAoKSB0byBjbGVhciB0aGUgUFRFLgorCitrbWFwX2F0b21pYygpIGRvZXMgc29tZXRoaW5nIHNsaWdodGx5IGRpZmZlcmVudC4gSW4gdGhlIGludGVyZXN0cyBvZiBzcGVlZCwgaXQgY2hvb3NlcyBvbmUgb2YgdHdvCitzdHJhdGVnaWVzOgorCisgKDEpIElmIHBvc3NpYmxlLCBrbWFwX2F0b21pYygpIGF0dGFjaGVzIHRoZSByZXF1ZXN0ZWQgcGFnZSB0byBvbmUgb2YgREFNUFI1IHRocm91Z2ggREFNUFIxMAorICAgICByZWdpc3RlciBwYWlyczsgYW5kIHRoZSBtYXRjaGluZyBrdW5tYXBfYXRvbWljKCkgY2xlYXJzIHRoZSBEQU1QUi4gVGhpcyBtYWtlcyBoaWdoIG1lbW9yeQorICAgICBzdXBwb3J0IHJlYWxseSBmYXN0IGFzIHRoZXJlJ3Mgbm8gbmVlZCB0byBmbHVzaCB0aGUgVExCIG9yIG1vZGlmeSB0aGUgcGFnZSB0YWJsZXMuIFRoZSBEQU1MUgorICAgICByZWdpc3RlcnMgYmVpbmcgdXNlZCBmb3IgdGhpcyBhcmUgcHJlc2V0IGR1cmluZyBib290IGFuZCBkb24ndCBjaGFuZ2Ugb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlCisgICAgIHByb2Nlc3MuIFRoZXJlJ3MgYSBkaXJlY3QgbWFwcGluZyBiZXR3ZWVuIHRoZSBmaXJzdCBmZXcga21hcF9hdG9taWMoKSB0eXBlcywgREFNUiBudW1iZXIgYW5kCisgICAgIHZpcnR1YWwgYWRkcmVzcyBzbG90LgorCisgICAgIEhvd2V2ZXIsIHRoZXJlIGFyZSBtb3JlIGttYXBfYXRvbWljKCkgdHlwZXMgZGVmaW5lZCB0aGFuIHRoZXJlIGFyZSBEQU1SIHJlZ2lzdGVycyBhdmFpbGFibGUsCisgICAgIHNvIHdlIGZhbGwgYmFjayB0bzoKKworICgyKSBrbWFwX2F0b21pYygpIHVzZXMgYSBzbG90IGluIHRoZSBzZWNvbmRhcnkgZnJhbWUgKGRldGVybWluZWQgYnkgdGhlIHR5cGUgcGFyYW1ldGVyKSwgYW5kIHRoZW4KKyAgICAgbG9ja3MgYW4gZW50cnkgaW4gdGhlIFRMQiB0byB0cmFuc2xhdGUgdGhhdCBzbG90IHRvIHRoZSBzcGVjaWZpZWQgcGFnZS4gVGhlIG51bWJlciBvZiBzbG90cyBpcworICAgICBvYnZpb3VzbHkgbGltaXRlZCwgYW5kIHRoZWlyIHBvc2l0aW9ucyBhcmUgY29udHJvbGxlZCBzdWNoIHRoYXQgZWFjaCBzbG90IGlzIG1hdGNoZWQgYnkgYQorICAgICBkaWZmZXJlbnQgbGluZSBpbiB0aGUgVExCLiBrdW5tYXAoKSBlamVjdHMgdGhlIGVudHJ5IGZyb20gdGhlIFRMQi4KKworTm90ZSB0aGF0IHRoZSBmaXJzdCB0aHJlZSBrbWFwIGF0b21pYyB0eXBlcyBhcmUgcmVhbGx5IGp1c3QgZGVjbGFyZWQgYXMgcGxhY2Vob2xkZXJzLiBUaGUgREFNUFIKK3JlZ2lzdGVycyBpbnZvbHZlZCBhcmUgYWN0dWFsbHkgbW9kaWZpZWQgZGlyZWN0bHkuCisKK0Fsc28gbm90ZSB0aGF0IGttYXAoKSBpdHNlbGYgbWF5IHNsZWVwLCBrbWFwX2F0b21pYygpIG1heSBuZXZlciBzbGVlcCBhbmQgYm90aCBhbHdheXMgc3VjY2VlZDsKK2Z1cnRoZXJtb3JlLCBhIGRyaXZlciB1c2luZyBrbWFwKCkgbWF5IHNsZWVwIGJlZm9yZSBjYWxsaW5nIGt1bm1hcCgpLCBidXQgbWF5IG5vdCBzbGVlcCBiZWZvcmUKK2NhbGxpbmcga3VubWFwX2F0b21pYygpIGlmIGl0IGhhZCBwcmV2aW91c2x5IGNhbGxlZCBrbWFwX2F0b21pYygpLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VTSU5HIE1PUkUgVEhBTiAyNTZNQiBPRiBNRU1PUlkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGtlcm5lbCBjYW5ub3QgYWNjZXNzIG1vcmUgdGhhbiAyNTZNQiBvZiBtZW1vcnkgZGlyZWN0bHkuIFRoZSBwaHlzaWNhbCBsYXlvdXQsIGhvd2V2ZXIsIHBlcm1pdHMKK3VwIHRvIDNHQiBvZiBTRFJBTSAocG9zc2libHkgMy4yNUdCKSB0byBiZSBtYWRlIGF2YWlsYWJsZS4gQnkgdXNpbmcgQ09ORklHX0hJR0hNRU0sIHRoZSBrZXJuZWwgY2FuCithbGxvdyB1c2Vyc3BhY2UgKGJ5IHdheSBvZiBwYWdlIHRhYmxlcykgYW5kIGl0c2VsZiAoYnkgd2F5IG9mIGttYXApIHRvIGRlYWwgd2l0aCB0aGUgbWVtb3J5CithbGxvY2F0aW9uLgorCitFeHRlcm5hbCBkZXZpY2VzIGNhbiwgb2YgY291cnNlLCBzdGlsbCBETUEgdG8gYW5kIGZyb20gYWxsIG9mIHRoZSBTRFJBTSwgZXZlbiBpZiB0aGUga2VybmVsIGNhbid0CitzZWUgaXQgZGlyZWN0bHkuIFRoZSBrZXJuZWwgdHJhbnNsYXRlcyBwYWdlIHJlZmVyZW5jZXMgaW50byByZWFsIGFkZHJlc3NlcyBmb3IgY29tbXVuaWNhdGluZyB0byB0aGUKK2RldmljZXMuCisKKworPT09PT09PT09PT09PT09PT09PQorUEFHRSBUQUJMRSBUT1BPTE9HWQorPT09PT09PT09PT09PT09PT09PQorCitUaGUgcGFnZSB0YWJsZXMgYXJlIGFycmFuZ2VkIGluIDItbGF5ZXIgZm9ybWF0LiBUaGVyZSBpcyBhIG1pZGRsZSBsYXllciAoUE1EKSB0aGF0IHdvdWxkIGJlIHVzZWQgaW4KKzMtbGF5ZXIgZm9ybWF0IHRhYmxlcyBidXQgdGhhdCBpcyBmb2xkZWQgaW50byB0aGUgdG9wIGxheWVyIChQR0QpIGFuZCBzbyBjb25zdW1lcyBubyBleHRyYSBtZW1vcnkKK29yIHByb2Nlc3NpbmcgcG93ZXIuCisKKyAgKy0tLS0tLSsgICAgIFBHRCAgICBQTUQKKyAgfCBUVEJSIHwtLS0+Ky0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICstLS0tLS0rICAgIHwgICAgICB8ICAgICAgOiBTVEUgfAorICAgICAgICAgICAgICB8IFBHRTAgfCBQTUUwIDogU1RFIHwKKyAgICAgICAgICAgICAgfCAgICAgIHwgICAgICA6IFNURSB8CisgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgUGFnZSBUYWJsZQorICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIDogU1RFIC0tLS0tLS0tLS0tLS0tPistLS0tLS0tLSsgKzB4MDAwMAorICAgICAgICAgICAgICB8IFBHRTEgfCBQTUUwIDogU1RFIC0tLS0tLS0tLS0tKyAgIHwgUFRFMCAgIHwKKyAgICAgICAgICAgICAgfCAgICAgIHwgICAgICA6IFNURSAtLS0tLS0tKyAgIHwgICArLS0tLS0tLS0rCisgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgIHwgICB8ICAgfCBQVEU2MyAgfAorICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIDogU1RFIHwgICAgICB8ICAgKy0tPistLS0tLS0tLSsgKzB4MDEwMAorICAgICAgICAgICAgICB8IFBHRTIgfCBQTUUwIDogU1RFIHwgICAgICB8ICAgICAgIHwgUFRFNjQgIHwKKyAgICAgICAgICAgICAgfCAgICAgIHwgICAgICA6IFNURSB8ICAgICAgfCAgICAgICArLS0tLS0tLS0rCisgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgIHwgICAgICAgfCBQVEUxMjcgfAorICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIDogU1RFIHwgICAgICArLS0tLS0tPistLS0tLS0tLSsgKzB4MDIwMAorICAgICAgICAgICAgICB8IFBHRTMgfCBQTUUwIDogU1RFIHwgICAgICAgICAgICAgIHwgUFRFMTI4IHwKKyAgICAgICAgICAgICAgfCAgICAgIHwgICAgICA6IFNURSB8ICAgICAgICAgICAgICArLS0tLS0tLS0rCisgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCBQVEUxOTEgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLSsgKzB4MDMwMAorCitFYWNoIFBhZ2UgRGlyZWN0b3J5IChQR0QpIGlzIDE2S0IgKHBhZ2Ugc2l6ZSkgaW4gc2l6ZSBhbmQgaXMgZGl2aWRlZCBpbnRvIDY0IGVudHJpZXMgKFBHRXMpLiBFYWNoCitQR0UgY29udGFpbnMgb25lIFBhZ2UgTWlkIERpcmVjdG9yeSAoUE1EKS4KKworRWFjaCBQTUQgaXMgMjU2IGJ5dGVzIGluIHNpemUgYW5kIGNvbnRhaW5zIGEgc2luZ2xlIGVudHJ5IChQTUUpLiBFYWNoIFBNRSBob2xkcyA2NCBGUjQ1MSBNTVUKK3NlZ21lbnQgdGFibGUgZW50cmllcyBvZiA0IGJ5dGVzIGFwaWVjZS4gRWFjaCBQTUUgInBvaW50cyB0byIgYSBwYWdlIHRhYmxlLiBJbiBwcmFjdGljZSwgZWFjaCBTVEUKK3BvaW50cyB0byBhIHN1YnNldCBvZiB0aGUgcGFnZSB0YWJsZSwgdGhlIGZpcnN0IHRvIFBUKzB4MDAwMCwgdGhlIHNlY29uZCB0byBQVCsweDAxMDAsIHRoZSB0aGlyZCB0bworUFQrMHgyMDAsIGFuZCBzbyBvbi4KKworRWFjaCBQR0UgYW5kIFBNRSBjb3ZlcnMgNjRNQiBvZiB0aGUgdG90YWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorCitFYWNoIFBhZ2UgVGFibGUgKFBURCkgaXMgMTZLQiAocGFnZSBzaXplKSBpbiBzaXplLCBhbmQgaXMgZGl2aWRlZCBpbnRvIDQwOTYgZW50cmllcyAoUFRFcykuIEVhY2gKK2VudHJ5IGNhbiBwb2ludCB0byBvbmUgMTZLQiBwYWdlLiBJbiBwcmFjdGljZSwgZWFjaCBMaW51eCBwYWdlIHRhYmxlIGlzIHN1YmRpdmlkZWQgaW50byA2NCBGUjQ1MQorTU1VIHBhZ2UgdGFibGVzLiBCdXQgdGhleSBhcmUgYWxsIGdyb3VwZWQgdG9nZXRoZXIgdG8gbWFrZSBtYW5hZ2VtZW50IGVhc2llciwgaW4gcGFydGljdWxhciBybWFwCitzdXBwb3J0IGlzIHRoZW4gdHJpdmlhbC4KKworR3JvdXBpbmcgcGFnZSB0YWJsZXMgaW4gdGhpcyBmYXNoaW9uIG1ha2VzIFBHRSBjYWNoaW5nIGluIFNDUjAvU0NSMSBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHRoZQorY292ZXJhZ2Ugb2YgdGhlIGNhY2hlZCBpdGVtIGlzIGdyZWF0ZXIuCisKK1BhZ2UgdGFibGVzIGZvciB0aGUgdm1hbGxvYyBhcmVhIGFyZSBhbGxvY2F0ZWQgYXQgYm9vdCB0aW1lIGFuZCBzaGFyZWQgYmV0d2VlbiBhbGwgbW1fc3RydWN0cy4KKworCis9PT09PT09PT09PT09PT09PQorVVNFUiBTUEFDRSBMQVlPVVQKKz09PT09PT09PT09PT09PT09CisKK0ZvciBNTVUgY2FwYWJsZSBMaW51eCwgdGhlIHJlZ2lvbnMgdXNlcnNwYWNlIGNvZGUgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIGFyZSBrZXB0IGVudGlyZWx5IHNlcGFyYXRlCitmcm9tIHRob3NlIGRlZGljYXRlZCB0byB0aGUga2VybmVsOgorCisJVklSVFVBTCBBRERSRVNTICAgIFNJWkUgICBQVVJQT1NFCisJPT09PT09PT09PT09PT09PT0gID09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCTAwMDAwMDAwLTAwMDAzZmZmICA0S0IgICAgTlVMTCBwb2ludGVyIGFjY2VzcyB0cmFwCisJMDAwMDQwMDAtMDFmZmZmZmYgIH4zMk1CICBsb3dlciBtbWFwIHNwYWNlIChncm93cyB1cCkKKwkwMjAwMDAwMC0wMjFmZmZmZiAgMk1CICAgIFN0YWNrIHNwYWNlIChncm93cyBkb3duIGZyb20gdG9wKQorCTAyMjAwMDAwLW5ubm5ubm5uICAgICAgICAgRXhlY3V0YWJsZSBtYXBwaW5nCisgICAgICAgIG5ubm5ubm5uLSAgICAgICAgICAgICAgICAgYnJrIHNwYWNlIChncm93cyB1cCkKKwkgICAgICAgIC1iZmZmZmZmZiAgICAgICAgIHVwcGVyIG1tYXAgc3BhY2UgKGdyb3dzIGRvd24pCisKK1RoaXMgaXMgc28gYXJyYW5nZWQgc28gYXMgdG8gbWFrZSBiZXN0IHVzZSBvZiB0aGUgMTZLQiBwYWdlIHRhYmxlcyBhbmQgdGhlIHdheSBpbiB3aGljaCBQR0VzL1BNRXMKK2FyZSBjYWNoZWQgYnkgdGhlIFRMQiBoYW5kbGVyLiBUaGUgbG93ZXIgbW1hcCBzcGFjZSBpcyBmaWxsZWQgZmlyc3QsIGFuZCB0aGVuIHRoZSB1cHBlciBtbWFwIHNwYWNlCitpcyBmaWxsZWQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorR0RCLVNUVUIgTU1VIERFQlVHR0lORyBTRVJWSUNFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZ2RiLXN0dWIgaW5jbHVkZWQgaW4gdGhpcyBrZXJuZWwgcHJvdmlkZXMgYSBudW1iZXIgb2Ygc2VydmljZXMgdG8gYWlkIGluIHRoZSBkZWJ1Z2dpbmcgb2YgTU1VCityZWxhdGVkIGtlcm5lbCBzZXJ2aWNlczoKKworICgqKSBFdmVyeSB0aW1lIHRoZSBrZXJuZWwgc3RvcHMsIGNlcnRhaW4gc3RhdGUgaW5mb3JtYXRpb24gaXMgZHVtcGVkIGludG8gX19kZWJ1Z19tbXUuIFRoaXMKKyAgICAgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhcmNoL2Zydi9rZXJuZWwvZ2RiLXN0dWIuYy4gTm90ZSB0aGF0IHRoZSBnZGJpbml0IGZpbGUgaW4gdGhpcworICAgICBkaXJlY3RvcnkgaGFzIHNvbWUgdXNlZnVsIG1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIHRoaXMuCisKKyAgICAgKCopIF9fZGVidWdfbW11LnRsYltdCisKKwkgVGhpcyByZWNlaXZlcyB0aGUgY3VycmVudCBUTEIgY29udGVudHMuIFRoaXMgY2FuIGJlIHZpZXdlZCB3aXRoIHRoZSBfdGxiIEdEQiBtYWNybzoKKworCQkoZ2RiKSBfdGxiCisJCXRsYlsweDAwXTogMDEwMDAwMDUgMDA3MTgyMDMgIDAxMDAwMDAyIDAwNzE4MjAzCisJCXRsYlsweDAxXTogMDEwMDQwMDIgMDA2ZDQyMDEgIDAxMDA0MDA1IDAwNmQ0MjAzCisJCXRsYlsweDAyXTogMDEwMDgwMDIgMDA2ZDAyMDEgIDAxMDA4MDA2IDAwMDA0MjAwCisJCXRsYlsweDAzXTogMDEwMGMwMDYgMDA3ZjQyMDIgIDAxMDBjMDAyIDAwNjRjMjAyCisJCXRsYlsweDA0XTogMDExMTAwMDUgMDA3NzQyMDEgIDAxMTEwMDAyIDAwNzc0MjAxCisJCXRsYlsweDA1XTogMDExMTQwMDUgMDA3NzAyMDEgIDAxMTE0MDAyIDAwNzcwMjAxCisJCXRsYlsweDA2XTogMDExMTgwMDIgMDA3NmMyMDEgIDAxMTE4MDA1IDAwNzZjMjAxCisJCS4uLgorCQl0bGJbMHgzZF06IDAxMGY0MDAyIDAwNzkwMjAwICAwMDFmNDAwMiAwMDU0Y2EwMgorCQl0bGJbMHgzZV06IDAxMGY4MDA1IDAwNzhjMjAxICAwMTBmODAwMiAwMDc4YzIwMQorCQl0bGJbMHgzZl06IDAwMWZjMDAyIDAwNTZjYTAxICAwMDFmYzAwNSAwMDUzOGEwMQorCisgICAgICgqKSBfX2RlYnVnX21tdS5pYW1yW10KKyAgICAgKCopIF9fZGVidWdfbW11LmRhbXJbXQorCisJIFRoZXNlIHJlY2VpdmUgdGhlIGN1cnJlbnQgSUFNUiBhbmQgREFNUiBjb250ZW50cy4gVGhlc2UgY2FuIGJlIHZpZXdlZCB3aXRoIHdpdGggdGhlIF9hbXIKKwkgR0RCIG1hY3JvOgorCisJCShnZGIpIF9hbXIKKwkJQU1SeCAgICAgICAgICAgREFNUiAgICAgICAgICAgICAgICAgICAgSUFNUgorCQk9PT09ICAgPT09PT09PT09PT09PT09PT09PT09ICAgPT09PT09PT09PT09PT09PT09PT09CisJCWFtcjAgOiBMOmMwMDAwMDAwIFA6MDAwMDBjYjkgOiBMOmMwMDAwMDAwIFA6MDAwMDA0YjkKKwkJYW1yMSA6IEw6MDEwNzAwMDUgUDowMDZmOTIwMyA6IEw6MDEwMmMwMDUgUDowMDZhMTIwMQorCQlhbXIyIDogTDpkOGQwMDAwMCBQOjAwMDAwMDAwIDogTDpkOGQwMDAwMCBQOjAwMDAwMDAwCisJCWFtcjMgOiBMOmQ4ZDA0MDAwIFA6MDA1MzRjMGQgOiBMOjAwMDAwMDAwIFA6MDAwMDAwMDAKKwkJYW1yNCA6IEw6ZDhkMDgwMDAgUDowMDU1NGMwZCA6IEw6MDAwMDAwMDAgUDowMDAwMDAwMAorCQlhbXI1IDogTDpkOGQwYzAwMCBQOjAwNTU0YzBkIDogTDowMDAwMDAwMCBQOjAwMDAwMDAwCisJCWFtcjYgOiBMOmQ4ZDEwMDAwIFA6MDAwMDAwMDAgOiBMOjAwMDAwMDAwIFA6MDAwMDAwMDAKKwkJYW1yNyA6IEw6ZDhkMTQwMDAgUDowMDAwMDAwMCA6IEw6MDAwMDAwMDAgUDowMDAwMDAwMAorCQlhbXI4IDogTDpkOGQxODAwMCBQOjAwMDAwMDAwCisJCWFtcjkgOiBMOmQ4ZDFjMDAwIFA6MDAwMDAwMDAKKwkJYW1yMTA6IEw6ZDhkMjAwMDAgUDowMDAwMDAwMAorCQlhbXIxMTogTDplMDAwMDAwMCBQOmUwMDAwY2NkCisKKyAoKikgVGhlIGN1cnJlbnQgdGFzaydzIHBhZ2UgZGlyZWN0b3J5IGlzIGJvdW5kIHRvIERBTVIzLgorCisgICAgIFRoaXMgY2FuIGJlIHZpZXdlZCB3aXRoIHRoZSBfcGdkIEdEQiBtYWNybzoKKworCShnZGIpIF9wZ2QKKwkkMyA9IHt7cGdlID0ge3tzdGUgPSB7MHg1NTQwMDEsIDB4NTU0MTAxLCAweDU1NDIwMSwgMHg1NTQzMDEsIDB4NTU0NDAxLAorCQkgIDB4NTU0NTAxLCAweDU1NDYwMSwgMHg1NTQ3MDEsIDB4NTU0ODAxLCAweDU1NDkwMSwgMHg1NTRhMDEsCisJCSAgMHg1NTRiMDEsIDB4NTU0YzAxLCAweDU1NGQwMSwgMHg1NTRlMDEsIDB4NTU0ZjAxLCAweDU1NTAwMSwKKwkJICAweDU1NTEwMSwgMHg1NTUyMDEsIDB4NTU1MzAxLCAweDU1NTQwMSwgMHg1NTU1MDEsIDB4NTU1NjAxLAorCQkgIDB4NTU1NzAxLCAweDU1NTgwMSwgMHg1NTU5MDEsIDB4NTU1YTAxLCAweDU1NWIwMSwgMHg1NTVjMDEsCisJCSAgMHg1NTVkMDEsIDB4NTU1ZTAxLCAweDU1NWYwMSwgMHg1NTYwMDEsIDB4NTU2MTAxLCAweDU1NjIwMSwKKwkJICAweDU1NjMwMSwgMHg1NTY0MDEsIDB4NTU2NTAxLCAweDU1NjYwMSwgMHg1NTY3MDEsIDB4NTU2ODAxLAorCQkgIDB4NTU2OTAxLCAweDU1NmEwMSwgMHg1NTZiMDEsIDB4NTU2YzAxLCAweDU1NmQwMSwgMHg1NTZlMDEsCisJCSAgMHg1NTZmMDEsIDB4NTU3MDAxLCAweDU1NzEwMSwgMHg1NTcyMDEsIDB4NTU3MzAxLCAweDU1NzQwMSwKKwkJICAweDU1NzUwMSwgMHg1NTc2MDEsIDB4NTU3NzAxLCAweDU1NzgwMSwgMHg1NTc5MDEsIDB4NTU3YTAxLAorCQkgIDB4NTU3YjAxLCAweDU1N2MwMSwgMHg1NTdkMDEsIDB4NTU3ZTAxLCAweDU1N2YwMX19fX0sIHtwZ2UgPSB7eworCQlzdGUgPSB7MHgwIDxyZXBlYXRzIDY0IHRpbWVzPn19fX0gPHJlcGVhdHMgNTEgdGltZXM+LCB7cGdlID0ge3tzdGUgPSB7CisJCSAgMHgyNDgwMDEsIDB4MjQ4MTAxLCAweDI0ODIwMSwgMHgyNDgzMDEsIDB4MjQ4NDAxLCAweDI0ODUwMSwKKwkJICAweDI0ODYwMSwgMHgyNDg3MDEsIDB4MjQ4ODAxLCAweDI0ODkwMSwgMHgyNDhhMDEsIDB4MjQ4YjAxLAorCQkgIDB4MjQ4YzAxLCAweDI0OGQwMSwgMHgyNDhlMDEsIDB4MjQ4ZjAxLCAweDI0OTAwMSwgMHgyNDkxMDEsCisJCSAgMHgyNDkyMDEsIDB4MjQ5MzAxLCAweDI0OTQwMSwgMHgyNDk1MDEsIDB4MjQ5NjAxLCAweDI0OTcwMSwKKwkJICAweDI0OTgwMSwgMHgyNDk5MDEsIDB4MjQ5YTAxLCAweDI0OWIwMSwgMHgyNDljMDEsIDB4MjQ5ZDAxLAorCQkgIDB4MjQ5ZTAxLCAweDI0OWYwMSwgMHgyNGEwMDEsIDB4MjRhMTAxLCAweDI0YTIwMSwgMHgyNGEzMDEsCisJCSAgMHgyNGE0MDEsIDB4MjRhNTAxLCAweDI0YTYwMSwgMHgyNGE3MDEsIDB4MjRhODAxLCAweDI0YTkwMSwKKwkJICAweDI0YWEwMSwgMHgyNGFiMDEsIDB4MjRhYzAxLCAweDI0YWQwMSwgMHgyNGFlMDEsIDB4MjRhZjAxLAorCQkgIDB4MjRiMDAxLCAweDI0YjEwMSwgMHgyNGIyMDEsIDB4MjRiMzAxLCAweDI0YjQwMSwgMHgyNGI1MDEsCisJCSAgMHgyNGI2MDEsIDB4MjRiNzAxLCAweDI0YjgwMSwgMHgyNGI5MDEsIDB4MjRiYTAxLCAweDI0YmIwMSwKKwkJICAweDI0YmMwMSwgMHgyNGJkMDEsIDB4MjRiZTAxLCAweDI0YmYwMX19fX0sIHtwZ2UgPSB7e3N0ZSA9IHsKKwkJICAweDAgPHJlcGVhdHMgNjQgdGltZXM+fX19fSA8cmVwZWF0cyAxMSB0aW1lcz59CisKKyAoKikgVGhlIFBURCBsYXN0IHVzZWQgYnkgdGhlIGluc3RydWN0aW9uIFRMQiBtaXNzIGhhbmRsZXIgaXMgYXR0YWNoZWQgdG8gREFNUjQuCisgKCopIFRoZSBQVEQgbGFzdCB1c2VkIGJ5IHRoZSBkYXRhIFRMQiBtaXNzIGhhbmRsZXIgaXMgYXR0YWNoZWQgdG8gREFNUjUuCisKKyAgICAgVGhlc2UgY2FuIGJlIHZpZXdlZCB3aXRoIHRoZSBfcHRkX2kgYW5kIF9wdGRfZCBHREIgbWFjcm9zOgorCisJKGdkYikgX3B0ZF9kCisJJDUgPSB7e3B0ZSA9IDB4MH0gPHJlcGVhdHMgMTI3IHRpbWVzPiwge3B0ZSA9IDB4NTM5YjAxfSwgeworCSAgICBwdGUgPSAweDB9IDxyZXBlYXRzIDg5NiB0aW1lcz4sIHtwdGUgPSAweDcxOTMwM30sIHtwdGUgPSAweDZkNTMwM30sIHsKKwkgICAgcHRlID0gMHgwfSwge3B0ZSA9IDB4MH0sIHtwdGUgPSAweDB9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4MH0sIHsKKwkgICAgcHRlID0gMHgwfSwge3B0ZSA9IDB4MH0sIHtwdGUgPSAweDB9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4NmExMzAzfSwgeworCSAgICBwdGUgPSAweDB9IDxyZXBlYXRzIDEyIHRpbWVzPiwge3B0ZSA9IDB4NzA5MzAzfSwge3B0ZSA9IDB4MH0sIHtwdGUgPSAweDB9LAorCSAge3B0ZSA9IDB4NmZkMzAzfSwge3B0ZSA9IDB4NmY5MzAzfSwge3B0ZSA9IDB4NmY1MzAzfSwge3B0ZSA9IDB4MH0sIHsKKwkgICAgcHRlID0gMHg2ZWQzMDN9LCB7cHRlID0gMHg1MzFiMDF9LCB7cHRlID0gMHg1MGRiMDF9LCB7CisJICAgIHB0ZSA9IDB4MH0gPHJlcGVhdHMgMTMgdGltZXM+LCB7cHRlID0gMHg1MzAzfSwge3B0ZSA9IDB4N2Y1MzAzfSwgeworCSAgICBwdGUgPSAweDUwOWIwMX0sIHtwdGUgPSAweDUwNWIwMX0sIHtwdGUgPSAweDdjOTMwM30sIHtwdGUgPSAweDdiOTMwM30sIHsKKwkgICAgcHRlID0gMHg3YjUzMDN9LCB7cHRlID0gMHg3YjEzMDN9LCB7cHRlID0gMHg3YWQzMDN9LCB7cHRlID0gMHgwfSwgeworCSAgICBwdGUgPSAweDB9LCB7cHRlID0gMHg3YTEzMDN9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4Nzk1MzAzfSwge3B0ZSA9IDB4MH0sIHsKKwkgICAgcHRlID0gMHg3OGQzMDN9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4MH0sIHtwdGUgPSAweDB9LCB7cHRlID0gMHgwfSwgeworCSAgICBwdGUgPSAweDB9LCB7cHRlID0gMHg3NzUzMDN9LCB7cHRlID0gMHg3NzEzMDN9LCB7cHRlID0gMHg3NmQzMDN9LCB7CisJICAgIHB0ZSA9IDB4MH0sIHtwdGUgPSAweDc2NTMwM30sIHtwdGUgPSAweDdjNTMwM30sIHtwdGUgPSAweDUwMWIwMX0sIHsKKwkgICAgcHRlID0gMHg0ZjFiMDF9LCB7cHRlID0gMHg0ZWRiMDF9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4NGY5YjAxfSwgeworCSAgICBwdGUgPSAweDRmZGIwMX0sIHtwdGUgPSAweDB9IDxyZXBlYXRzIDI5OTIgdGltZXM+fQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9oYXllcy1lc3AudHh0IGIvRG9jdW1lbnRhdGlvbi9oYXllcy1lc3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjVkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hheWVzLWVzcC50eHQKQEAgLTAsMCArMSwxNTQgQEAKK0hBWUVTIEVTUCBEUklWRVIgVkVSU0lPTiAyLjEKKworQSBiaWcgdGhhbmtzIHRvIHRoZSBwZW9wbGUgYXQgSGF5ZXMsIGVzcGVjaWFsbHkgQWxhbiBBZGFtc29uLiAgVGhlaXIgc3VwcG9ydAoraGFzIGVuYWJsZWQgbWUgdG8gcHJvdmlkZSBlbmhhbmNlbWVudHMgdG8gdGhlIGRyaXZlci4KKworUGxlYXNlIHJlcG9ydCB5b3VyIGV4cGVyaWVuY2VzIHdpdGggdGhpcyBkcml2ZXIgdG8gbWUgKGFyb2JpbnNvQG55eC5uZXQpLiAgSQorYW0gbG9va2luZyBmb3IgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZmVlZGJhY2suCisKKyoqKiBJTVBPUlRBTlQgQ0hBTkdFUyBGT1IgMi4xICoqKgorU3VwcG9ydCBmb3IgUElPIG1vZGUuICBGaXZlIHNpdHVhdGlvbnMgd2lsbCBjYXVzZSBQSU8gbW9kZSB0byBiZSB1c2VkOgorMSkgQSBtdWx0aXBvcnQgY2FyZCBpcyBkZXRlY3RlZC4gIFBJTyBtb2RlIHdpbGwgYWx3YXlzIGJlIHVzZWQuICAoOCBwb3J0IGNhcmRzCitkbyBub3Qgc3VwcG9ydCBETUEpLgorMikgVGhlIERNQSBjaGFubmVsIGlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlIChhbnl0aGluZyBvdGhlciB0aGFuIDEgb3IgMykuCiszKSBUaGUgRE1BIGJ1ZmZlci9jaGFubmVsIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQuICBUaGUgcG9ydCB3aWxsIHJldmVydCB0byBQSU8KK21vZGUgdW50aWwgaXQgaXMgcmVvcGVuZWQuCis0KSBMZXNzIHRoYW4gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIG5lZWQgdG8gYmUgdHJhbnNmZXJyZWQgdG8vZnJvbSB0aGUKK0ZJRk9zLiAgUElPIG1vZGUgd2lsbCBiZSB1c2VkIGZvciB0aGF0IHRyYW5zZmVyIG9ubHkuCis1KSBBIHBvcnQgbmVlZHMgdG8gZG8gYSBETUEgdHJhbnNmZXIgYW5kIGFub3RoZXIgcG9ydCBpcyBhbHJlYWR5IHVzaW5nIHRoZQorRE1BIGNoYW5uZWwuICBQSU8gbW9kZSB3aWxsIGJlIHVzZWQgZm9yIHRoYXQgdHJhbnNmZXIgb25seS4KKworU2luY2UgdGhlIEhheWVzIEVTUCBzZWVtcyB0byBjb25mbGljdCB3aXRoIG90aGVyIGNhcmRzIChub3RhYmx5IHNvdW5kIGNhcmRzKQord2hlbiB1c2luZyBETUEsIERNQSBpcyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQuICBUbyB1c2UgRE1BLCBpdCBtdXN0IGJlIHR1cm5lZAorb24gZXhwbGljaXRseSwgZWl0aGVyIHdpdGggdGhlICJkbWE9IiBvcHRpb24gZGVzY3JpYmVkIGJlbG93IG9yIHdpdGgKK3NldHNlcmlhbC4gIEEgbXVsdGlwb3J0IGNhcmQgY2FuIGJlIGZvcmNlZCBpbnRvIERNQSBtb2RlIGJ5IHVzaW5nIHNldHNlcmlhbDsKK2hvd2V2ZXIsIG1vc3QgbXVsdGlwb3J0IGNhcmRzIGRvbid0IHN1cHBvcnQgRE1BLgorCitUaGUgbGF0ZXN0IHZlcnNpb24gb2Ygc2V0c2VyaWFsIGFsbG93cyB0aGUgZW5oYW5jZWQgY29uZmlndXJhdGlvbiBvZiB0aGUgRVNQCitjYXJkIHRvIGJlIHZpZXdlZCBhbmQgbW9kaWZpZWQuCisqKioKKworVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBmaWxlcyBuZWVkZWQgdG8gY29tcGlsZSBhIG1vZHVsZSB0byBzdXBwb3J0IHRoZSBIYXllcworRVNQIGNhcmQuICBUaGUgZHJpdmVycyBhcmUgYmFzaWNhbGx5IGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgc2VyaWFsIGRyaXZlcnMuCisKK0ZlYXR1cmVzOgorCistIFVzZXMgdGhlIGVuaGFuY2VkIG1vZGUgb2YgdGhlIEVTUCBjYXJkLCBhbGxvd2luZyBhIHdpZGVyIHJhbmdlIG9mCisgIGludGVycnVwdHMgYW5kIGZlYXR1cmVzIHRoYW4gY29tcGF0aWJpbGl0eSBtb2RlCistIFVzZXMgRE1BIGFuZCAxNiBiaXQgUElPIG1vZGUgdG8gdHJhbnNmZXIgZGF0YSB0byBhbmQgZnJvbSB0aGUgRVNQJ3MgRklGT3MsCisgIHJlZHVjaW5nIENQVSBsb2FkCistIFN1cHBvcnRzIHByaW1hcnkgYW5kIHNlY29uZGFyeSBwb3J0cworCisKK0lmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoZSBJUlFzIHRvIHVzZSBjYW4gYmUgc3BlY2lmaWVkIGJ5Cit1c2luZyB0aGUgaXJxPSBvcHRpb24uICBUaGUgZm9ybWF0IGlzOgorCitpcnE9WzB4MTAwXSxbMHgxNDBdLFsweDE4MF0sWzB4MjAwXSxbMHgyNDBdLFsweDI4MF0sWzB4MzAwXSxbMHgzODBdCisKK1RoZSBhZGRyZXNzIGluIGJyYWNrZXRzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNhcmQuICBUaGUgSVJRIG9mCitub25leGlzdGVudCBjYXJkcyBjYW4gYmUgc2V0IHRvIDAuICBJZiBhbiBJUlEgb2YgYSBjYXJkIHRoYXQgZG9lcyBleGlzdCBpcyBzZXQKK3RvIDAsIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGd1ZXNzIGF0IHRoZSBjb3JyZWN0IElSUS4gIEZvciBleGFtcGxlLCB0byBzZXQKK3RoZSBJUlEgb2YgdGhlIGNhcmQgYXQgYWRkcmVzcyAweDMwMCB0byAxMiwgdGhlIGluc21vZCBjb21tYW5kIHdvdWxkIGJlOgorCitpbnNtb2QgZXNwIGlycT0wLDAsMCwwLDAsMCwxMiwwCisKK1RoZSBjdXN0b20gZGl2aXNvciBjYW4gYmUgc2V0IGJ5IHVzaW5nIHRoZSBkaXZpc29yPSBvcHRpb24uICBUaGUgZm9ybWF0IGlzIHRoZQorc2FtZSBhcyBmb3IgdGhlIGlycT0gb3B0aW9uLiAgRWFjaCBkaXZpc29yIHZhbHVlIGlzIGEgc2VyaWVzIG9mIGhleCBkaWdpdHMsCit3aXRoIGVhY2ggZGlnaXQgcmVwcmVzZW50aW5nIHRoZSBkaXZpc29yIHRvIHVzZSBmb3IgYSBjb3JyZXNwb25kaW5nIHBvcnQuICBUaGUKK2Rpdmlzb3IgdmFsdWUgaXMgY29uc3RydWN0ZWQgUklHSFQgVE8gTEVGVC4gIFNwZWNpZnlpbmcgYSBub256ZXJvIGRpdmlzb3IgdmFsdWUKK3dpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHNwZF9jdXN0IGZsYWcuICBUbyBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgdG8gdXNlIGZvcgorYSBjZXJ0YWluIGJhdWQgcmF0ZSwgZGl2aWRlIHRoZSBwb3J0J3MgYmFzZSBiYXVkIChnZW5lcmFsbHkgOTIxNjAwKSBieSB0aGUKK2Rlc2lyZWQgcmF0ZS4gIEZvciBleGFtcGxlLCB0byBzZXQgdGhlIGRpdmlzb3Igb2YgdGhlIHByaW1hcnkgcG9ydCBhdCAweDMwMCB0bworNCBhbmQgdGhlIGRpdmlzb3Igb2YgdGhlIHNlY29uZGFyeSBwb3J0IGF0IDB4MzA4IHRvIDgsIHRoZSBpbnNtb2QgY29tbWFuZCB3b3VsZAorYmU6CisKK2luc21vZCBlc3AgZGl2aXNvcj0wLDAsMCwwLDAsMCwweDg0LDAKKworVGhlIGRtYT0gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgRE1BIGNoYW5uZWwuICBUaGUgY2hhbm5lbCBjYW4gYmUgZWl0aGVyCisxIG9yIDMuICBTcGVjaWZ5aW5nIGFueSBvdGhlciB2YWx1ZSB3aWxsIGZvcmNlIHRoZSBkcml2ZXIgdG8gdXNlIFBJTyBtb2RlLgorRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgRE1BIGNoYW5uZWwgdG8gMywgdGhlIGluc21vZCBjb21tYW5kIHdvdWxkIGJlOgorCitpbnNtb2QgZXNwIGRtYT0zCisKK1RoZSByeF90cmlnZ2VyPSBhbmQgdHhfdHJpZ2dlcj0gb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIEZJRk8gdHJpZ2dlcgorbGV2ZWxzLiAgVGhleSBzcGVjaWZ5IHdoZW4gdGhlIEVTUCBjYXJkIHNob3VsZCBzZW5kIGFuIGludGVycnVwdC4gIExhcmdlcgordmFsdWVzIHdpbGwgZGVjcmVhc2UgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzOyBob3dldmVyLCBhIHZhbHVlIHRvbyBoaWdoIG1heQorcmVzdWx0IGluIGRhdGEgbG9zcy4gIFZhbGlkIHZhbHVlcyBhcmUgMSB0aHJvdWdoIDEwMjMsIHdpdGggNzY4IGJlaW5nIHRoZQorZGVmYXVsdC4gIEZvciBleGFtcGxlLCB0byBzZXQgdGhlIHJlY2VpdmUgdHJpZ2dlciBsZXZlbCB0byA1MTIgYnl0ZXMgYW5kIHRoZQordHJhbnNtaXQgdHJpZ2dlciBsZXZlbCB0byA3MDAgYnl0ZXMsIHRoZSBpbnNtb2QgY29tbWFuZCB3b3VsZCBiZToKKworaW5zbW9kIGVzcCByeF90cmlnZ2VyPTUxMiB0eF90cmlnZ2VyPTcwMAorCitUaGUgZmxvd19vZmY9IGFuZCBmbG93X29uPSBvcHRpb25zIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaGFyZHdhcmUgZmxvdyBvZmYvCitmbG93IG9uIGxldmVscy4gIFRoZSBmbG93IG9uIGxldmVsIG11c3QgYmUgbG93ZXIgdGhhbiB0aGUgZmxvdyBvZmYgbGV2ZWwsIGFuZAordGhlIGZsb3cgb2ZmIGxldmVsIHNob3VsZCBiZSBoaWdoZXIgdGhhbiByeF90cmlnZ2VyLiAgVmFsaWQgdmFsdWVzIGFyZSAxCit0aHJvdWdoIDEwMjMsIHdpdGggMTAxNiBiZWluZyB0aGUgZGVmYXVsdCBmbG93IG9mZiBsZXZlbCBhbmQgOTQ0IGJlaW5nIHRoZQorZGVmYXVsdCBmbG93IG9uIGxldmVsLiAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgZmxvdyBvZmYgbGV2ZWwgdG8gMTAwMCBieXRlcworYW5kIHRoZSBmbG93IG9uIGxldmVsIHRvIDkzNSBieXRlcywgdGhlIGluc21vZCBjb21tYW5kIHdvdWxkIGJlOgorCitpbnNtb2QgZXNwIGZsb3dfb2ZmPTEwMDAgZmxvd19vbj05MzUKKworVGhlIHJ4X3RpbWVvdXQ9IG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHJlY2VpdmUgdGltZW91dCB2YWx1ZS4gIFRoaXMKK3ZhbHVlIGluZGljYXRlcyBob3cgbG9uZyBhZnRlciByZWNlaXZpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIHRoYXQgdGhlIEVTUCBjYXJkCitzaG91bGQgd2FpdCBiZWZvcmUgc2lnbmFsbGluZyBhbiBpbnRlcnJ1cHQuICBWYWxpZCB2YWx1ZXMgYXJlIDAgdGhvdWdoIDI1NSwKK3dpdGggMTI4IGJlaW5nIHRoZSBkZWZhdWx0LiAgQSB2YWx1ZSB0b28gaGlnaCB3aWxsIGluY3JlYXNlIGxhdGVuY3ksIGFuZCBhCit2YWx1ZSB0b28gbG93IHdpbGwgY2F1c2UgdW5uZWNlc3NhcnkgaW50ZXJydXB0cy4gIEZvciBleGFtcGxlLCB0byBzZXQgdGhlCityZWNlaXZlIHRpbWVvdXQgdG8gMjU1LCB0aGUgaW5zbW9kIGNvbW1hbmQgd291bGQgYmU6CisKK2luc21vZCBlc3AgcnhfdGltZW91dD0yNTUKKworVGhlIHBpb190aHJlc2hvbGQ9IG9wdGlvbiBzZXRzIHRoZSB0aHJlc2hvbGQgKGluIG51bWJlciBvZiBjaGFyYWN0ZXJzKSBmb3IKK3VzaW5nIFBJTyBtb2RlIGluc3RlYWQgb2YgRE1BIG1vZGUuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB2YWx1ZSBpcyAzMiwKK3RyYW5zZmVycyBvZiAzMiBieXRlcyBvciBsZXNzIHdpbGwgYWx3YXlzIHVzZSBQSU8gbW9kZS4KKworaW5zbW9kIGVzcCBwaW9fdGhyZXNob2xkPTMyCisKK011bHRpcGxlIG9wdGlvbnMgY2FuIGJlIGxpc3RlZCBvbiB0aGUgaW5zbW9kIGNvbW1hbmQgbGluZSBieSBzZXBhcmF0aW5nIGVhY2gKK29wdGlvbiB3aXRoIGEgc3BhY2UuICBGb3IgZXhhbXBsZToKKworaW5zbW9kIGVzcCBkbWE9MyB0cmlnZ2VyPTUxMgorCitUaGUgZXNwIG1vZHVsZSBjYW4gYmUgYXV0b21hdGljYWxseSBsb2FkZWQgd2hlbiBuZWVkZWQuICBUbyBjYXVzZSB0aGlzIHRvCitoYXBwZW4sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIC9ldGMvbW9kcHJvYmUuY29uZiAocmVwbGFjaW5nIHRoZSBsYXN0IGxpbmUKK3dpdGggb3B0aW9ucyBmb3IgeW91ciBjb25maWd1cmF0aW9uKToKKworYWxpYXMgY2hhci1tYWpvci01NyBlc3AKK2FsaWFzIGNoYXItbWFqb3ItNTggZXNwCitvcHRpb25zIGVzcCBpcnE9MCwwLDAsMCwwLDAsMywwIGRpdmlzb3I9MCwwLDAsMCwwLDAsMHg0LDAKKworWW91IG1heSBhbHNvIG5lZWQgdG8gcnVuICdkZXBtb2QgLWEnLgorCitEZXZpY2VzIG11c3QgYmUgY3JlYXRlZCBtYW51YWxseS4gIFRvIGNyZWF0ZSB0aGUgZGV2aWNlcywgbm90ZSB0aGUgb3V0cHV0IGZyb20KK3RoZSBtb2R1bGUgYWZ0ZXIgaXQgaXMgaW5zZXJ0ZWQuICBUaGUgb3V0cHV0IHdpbGwgYXBwZWFyIGluIHRoZSBsb2NhdGlvbiB3aGVyZQora2VybmVsIG1lc3NhZ2VzIHVzdWFsbHkgYXBwZWFyICh1c3VhbGx5IC92YXIvYWRtL21lc3NhZ2VzKS4gIENyZWF0ZSB0d28gZGV2aWNlcworZm9yIGVhY2ggJ3R0eScgbWVudGlvbmVkLCBvbmUgd2l0aCBtYWpvciBvZiA1NyBhbmQgdGhlIG90aGVyIHdpdGggbWFqb3Igb2YgNTguCitUaGUgbWlub3IgbnVtYmVyIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgdHR5IG51bWJlciByZXBvcnRlZC4gIFRoZSBjb21tYW5kcword291bGQgYmUgKHJlcGxhY2UgPyB3aXRoIHRoZSB0dHkgbnVtYmVyKToKKworbWtub2QgL2Rldi90dHlQPyBjIDU3ID8KK21rbm9kIC9kZXYvY3VwPyBjIDU4ID8KKworRm9yIGV4YW1wbGUsIGlmIHRoZSBmb2xsb3dpbmcgbGluZSBhcHBlYXJzOgorCitPY3QgMjQgMTg6MTc6MjMgdGVjaG5vIGtlcm5lbDogdHR5UDggYXQgMHgwMTQwIChpcnEgPSAzKSBpcyBhbiBFU1AgcHJpbWFyeSBwb3J0CisKKy4uLnR3byBkZXZpY2VzIHNob3VsZCBiZSBjcmVhdGVkOgorCitta25vZCAvZGV2L3R0eVA4IGMgNTcgOAorbWtub2QgL2Rldi9jdXA4IGMgNTggOAorCitZb3UgbWF5IG5lZWQgdG8gc2V0IHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgZGV2aWNlczoKKworY2htb2QgNjY2IC9kZXYvdHR5UCoKK2NobW9kIDY2NiAvZGV2L2N1cCoKKworVGhlIEVTUCBtb2R1bGUgYW5kIHRoZSBzZXJpYWwgbW9kdWxlIHNob3VsZCBub3QgY29uZmxpY3QgKHRoZXkgY2FuIGJlIHVzZWQgYXQKK3RoZSBzYW1lIHRpbWUpLiAgQWZ0ZXIgdGhlIEVTUCBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkIHRoZSBwb3J0cyBvbiB0aGUgRVNQIGNhcmQKK3dpbGwgbm8gbG9uZ2VyIGJlIGFjY2Vzc2libGUgYnkgdGhlIHNlcmlhbCBkcml2ZXIuCisKK0lmIEkvTyBlcnJvcnMgYXJlIGV4cGVyaWVuY2VkIHdoZW4gYWNjZXNzaW5nIHRoZSBwb3J0LCBjaGVjayBmb3IgSVJRIGFuZCBETUEKK2NvbmZsaWN0cyAoJ2NhdCAvcHJvYy9pbnRlcnJ1cHRzJyBhbmQgJ2NhdCAvcHJvYy9kbWEnIGZvciBhIGxpc3Qgb2YgSVJRcyBhbmQKK0RNQXMgY3VycmVudGx5IGluIHVzZSkuCisKK0Vuam95IQorQW5kcmV3IEouIFJvYmluc29uIDxhcm9iaW5zb0BueXgubmV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9oaWdodWlkLnR4dCBiL0RvY3VtZW50YXRpb24vaGlnaHVpZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMzMzkyNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaGlnaHVpZC50eHQKQEAgLTAsMCArMSw3OSBAQAorTm90ZXMgb24gdGhlIGNoYW5nZSBmcm9tIDE2LWJpdCBVSURzIHRvIDMyLWJpdCBVSURzOgorCistIGtlcm5lbCBjb2RlIE1VU1QgdGFrZSBpbnRvIGFjY291bnQgX19rZXJuZWxfdWlkX3QgYW5kIF9fa2VybmVsX3VpZDMyX3QKKyAgd2hlbiBjb21tdW5pY2F0aW5nIGJldHdlZW4gdXNlciBhbmQga2VybmVsIHNwYWNlIGluIGFuIGlvY3RsIG9yIGRhdGEKKyAgc3RydWN0dXJlLgorCistIGtlcm5lbCBjb2RlIHNob3VsZCB1c2UgdWlkX3QgYW5kIGdpZF90IGluIGtlcm5lbC1wcml2YXRlIHN0cnVjdHVyZXMgYW5kCisgIGNvZGUuCisKK1doYXQncyBsZWZ0IHRvIGJlIGRvbmUgZm9yIDMyLWJpdCBVSURzIG9uIGFsbCBMaW51eCBhcmNoaXRlY3R1cmVzOgorCistIERpc2sgcXVvdGFzIGhhdmUgYW4gaW50ZXJlc3RpbmcgbGltaXRhdGlvbiB0aGF0IGlzIG5vdCByZWxhdGVkIHRvIHRoZQorICBtYXhpbXVtIFVJRC9HSUQuIFRoZXkgYXJlIGxpbWl0ZWQgYnkgdGhlIG1heGltdW0gZmlsZSBzaXplIG9uIHRoZQorICB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0sIGJlY2F1c2UgcXVvdGEgcmVjb3JkcyBhcmUgd3JpdHRlbiBhdCBvZmZzZXRzCisgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVJRCBpbiBxdWVzdGlvbi4KKyAgRnVydGhlciBpbnZlc3RpZ2F0aW9uIGlzIG5lZWRlZCB0byBzZWUgaWYgdGhlIHF1b3RhIHN5c3RlbSBjYW4gY29wZQorICBwcm9wZXJseSB3aXRoIGh1Z2UgVUlEcy4gSWYgaXQgY2FuIGRlYWwgd2l0aCA2NC1iaXQgZmlsZSBvZmZzZXRzIG9uIGFsbCAKKyAgYXJjaGl0ZWN0dXJlcywgdGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4KKworLSBEZWNpZGUgd2hldGhlciBvciBub3QgdG8ga2VlcCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBzeXN0ZW0KKyAgYWNjb3VudGluZyBmaWxlLCBvciBpZiB3ZSBzaG91bGQgYnJlYWsgaXQgYXMgdGhlIGNvbW1lbnRzIHN1Z2dlc3QKKyAgKGN1cnJlbnRseSwgdGhlIG9sZCAxNi1iaXQgVUlEIGFuZCBHSUQgYXJlIHN0aWxsIHdyaXR0ZW4gdG8gZGlzaywgYW5kCisgIHBhcnQgb2YgdGhlIGZvcm1lciBwYWQgc3BhY2UgaXMgdXNlZCB0byBzdG9yZSBzZXBhcmF0ZSAzMi1iaXQgVUlEIGFuZAorICBHSUQpCisKKy0gTmVlZCB0byB2YWxpZGF0ZSB0aGF0IE9TIGVtdWxhdGlvbiBjYWxscyB0aGUgMTYtYml0IFVJRAorICBjb21wYXRpYmlsaXR5IHN5c2NhbGxzLCBpZiB0aGUgT1MgYmVpbmcgZW11bGF0ZWQgdXNlZCAxNi1iaXQgVUlEcywgb3IKKyAgdXNlcyB0aGUgMzItYml0IFVJRCBzeXN0ZW0gY2FsbHMgcHJvcGVybHkgb3RoZXJ3aXNlLgorCisgIFRoaXMgYWZmZWN0cyBhdCBsZWFzdDoKKwlTdW5PUyBlbXVsYXRpb24KKwlTb2xhcmlzIGVtdWxhdGlvbgorCWlCQ1Mgb24gSW50ZWwKKworCXNwYXJjMzIgZW11bGF0aW9uIG9uIHNwYXJjNjQKKwkobmVlZCB0byBzdXBwb3J0IHdoYXRldmVyIG5ldyAzMi1iaXQgVUlEIHN5c3RlbSBjYWxscyBhcmUgYWRkZWQgdG8KKwlzcGFyYzMyKQorCistIFZhbGlkYXRlIHRoYXQgYWxsIGZpbGVzeXN0ZW1zIGJlaGF2ZSBwcm9wZXJseS4KKworICBBdCBwcmVzZW50LCAzMi1iaXQgVUlEcyBfc2hvdWxkXyB3b3JrIGZvcjoKKwlleHQyCisJdWZzCisJaXNvZnMKKwluZnMKKwljb2RhCisJdWRmCisKKyAgSW9jdGwoKSBmaXh1cHMgaGF2ZSBiZWVuIG1hZGUgZm9yOgorCW5jcGZzCisJc21iZnMKKworICBGaWxlc3lzdGVtcyB3aXRoIHNpbXBsZSBmaXh1cHMgdG8gcHJldmVudCAxNi1iaXQgVUlEIHdyYXBhcm91bmQ6CisJbWluaXgKKwlzeXN2CisJcW54NAorCisgIE90aGVyIGZpbGVzeXN0ZW1zIGhhdmUgbm90IGJlZW4gY2hlY2tlZCB5ZXQuCisKKy0gVGhlIG5jcGZzIGFuZCBzbXBmcyBmaWxlc3lzdGVtcyBjYW4gbm90IHByZXNlbnRseSB1c2UgMzItYml0IFVJRHMgaW4KKyAgYWxsIGlvY3RsKClzLiBTb21lIG5ldyBpb2N0bCgpcyBoYXZlIGJlZW4gYWRkZWQgd2l0aCAzMi1iaXQgVUlEcywgYnV0CisgIG1vcmUgYXJlIG5lZWRlZC4gKGFzIHdlbGwgYXMgbmV3IHVzZXI8LT5rZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzKQorCistIFRoZSBFTEYgY29yZSBkdW1wIGZvcm1hdCBvbmx5IHN1cHBvcnRzIDE2LWJpdCBVSURzIG9uIGFybSwgaTM4NiwgbTY4aywKKyAgc2gsIGFuZCBzcGFyYzMyLiBGaXhpbmcgdGhpcyBpcyBwcm9iYWJseSBub3QgdGhhdCBpbXBvcnRhbnQsIGJ1dCB3b3VsZAorICByZXF1aXJlIGFkZGluZyBhIG5ldyBFTEYgc2VjdGlvbi4KKworLSBUaGUgaW9jdGwoKXMgdXNlZCB0byBjb250cm9sIHRoZSBpbi1rZXJuZWwgTkZTIHNlcnZlciBvbmx5IHN1cHBvcnQKKyAgMTYtYml0IFVJRHMgb24gYXJtLCBpMzg2LCBtNjhrLCBzaCwgYW5kIHNwYXJjMzIuCisKKy0gbWFrZSBzdXJlIHRoYXQgdGhlIFVJRCBtYXBwaW5nIGZlYXR1cmUgb2YgQVgyNSBuZXR3b3JraW5nIHdvcmtzIHByb3Blcmx5CisgIChpdCBzaG91bGQgYmUgc2FmZSBiZWNhdXNlIGl0J3MgYWx3YXlzIHVzZWQgYSAzMi1iaXQgaW50ZWdlciB0bworICBjb21tdW5pY2F0ZSBiZXR3ZWVuIHVzZXIgYW5kIGtlcm5lbCkKKworCitDaHJpcyBXaW5nCit3aW5nY0B1bWljaC5lZHUKKworbGFzdCB1cGRhdGVkOiBKYW51YXJ5IDExLCAyMDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hwZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9ocGV0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTdjYzhkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ocGV0LnR4dApAQCAtMCwwICsxLDI5OCBAQAorCQlIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciBEcml2ZXIgZm9yIExpbnV4CisKK1RoZSBIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciAoSFBFVCkgaGFyZHdhcmUgaXMgdGhlIGZ1dHVyZSByZXBsYWNlbWVudCBmb3IgdGhlIDgyNTQgYW5kIFJlYWwKK1RpbWUgQ2xvY2sgKFJUQykgcGVyaW9kaWMgdGltZXIgZnVuY3Rpb25hbGl0eS4gIEVhY2ggSFBFVCBjYW4gaGF2ZSB1cCB0d28gMzIgdGltZXJzLiAgSXQgaXMgcG9zc2libGUKK3RvIGNvbmZpZ3VyZSB0aGUgZmlyc3QgdHdvIHRpbWVycyBhcyBsZWdhY3kgcmVwbGFjZW1lbnRzIGZvciA4MjU0IGFuZCBSVEMgcGVyaW9kaWMuICBBIHNwZWNpZmljYXRpb24KK2RvbmUgYnkgSU5URUwgYW5kIE1pY3Jvc29mdCBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5pbnRlbC5jb20vbGFicy9wbGF0Y29tcC9ocGV0L2hwZXRzcGVjLmh0bS4KKworVGhlIGRyaXZlciBzdXBwb3J0cyBkZXRlY3Rpb24gb2YgSFBFVCBkcml2ZXIgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEhQRVQgYmVmb3JlIHRoZQorZHJpdmVyIG1vZHVsZV9pbml0IHJvdXRpbmUgaXMgY2FsbGVkLiAgVGhpcyBlbmFibGVzIHBsYXRmb3JtIGNvZGUgd2hpY2ggdXNlcyB0aW1lciAwIG9yIDEgYXMgdGhlCittYWluIHRpbWVyIHRvIGludGVyY2VwdCBIUEVUIGluaXRpYWxpemF0aW9uLiAgQW4gZXhhbXBsZSBvZiB0aGlzIGluaXRpYWxpemF0aW9uIGNhbiBiZSBmb3VuZCBpbgorYXJjaC9pMzg2L2tlcm5lbC90aW1lX2hwZXQuYy4KKworVGhlIGRyaXZlciBwcm92aWRlcyB0d28gQVBJcyB3aGljaCBhcmUgdmVyeSBzaW1pbGFyIHRvIHRoZSBBUEkgZm91bmQgaW4gdGhlIHJ0Yy5jIGRyaXZlci4KK1RoZXJlIGlzIGEgdXNlciBzcGFjZSBBUEkgYW5kIGEga2VybmVsIHNwYWNlIEFQSS4gIEFuIGV4YW1wbGUgdXNlciBzcGFjZSBwcm9ncmFtIGlzIHByb3ZpZGVkCitiZWxvdy4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxtZW1vcnkuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KKworCitleHRlcm4gdm9pZCBocGV0X29wZW5fY2xvc2UoaW50LCBjb25zdCBjaGFyICoqKTsKK2V4dGVybiB2b2lkIGhwZXRfaW5mbyhpbnQsIGNvbnN0IGNoYXIgKiopOworZXh0ZXJuIHZvaWQgaHBldF9wb2xsKGludCwgY29uc3QgY2hhciAqKik7CitleHRlcm4gdm9pZCBocGV0X2Zhc3luYyhpbnQsIGNvbnN0IGNoYXIgKiopOworZXh0ZXJuIHZvaWQgaHBldF9yZWFkKGludCwgY29uc3QgY2hhciAqKik7CisKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitzdHJ1Y3QgaHBldF9jb21tYW5kIHsKKwljaGFyCQkqY29tbWFuZDsKKwl2b2lkCQkoKmZ1bmMpKGludCBhcmdjLCBjb25zdCBjaGFyICoqIGFyZ3YpOworfSBocGV0X2NvbW1hbmRbXSA9IHsKKwl7CisJCSJvcGVuLWNsb3NlIiwKKwkJaHBldF9vcGVuX2Nsb3NlCisJfSwKKwl7CisJCSJpbmZvIiwKKwkJaHBldF9pbmZvCisJfSwKKwl7CisJCSJwb2xsIiwKKwkJaHBldF9wb2xsCisJfSwKKwl7CisJCSJmYXN5bmMiLAorCQlocGV0X2Zhc3luYworCX0sCit9OworCitpbnQKK21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndikKK3sKKwlpbnQJaTsKKworCWFyZ2MtLTsKKwlhcmd2Kys7CisKKwlpZiAoIWFyZ2MpIHsKKwkJZnByaW50ZihzdGRlcnIsICItaHBldDogcmVxdWlyZXMgY29tbWFuZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mIChocGV0X2NvbW1hbmQpIC8gc2l6ZW9mIChocGV0X2NvbW1hbmRbMF0pKTsgaSsrKQorCQlpZiAoIXN0cmNtcChhcmd2WzBdLCBocGV0X2NvbW1hbmRbaV0uY29tbWFuZCkpIHsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJCWZwcmludGYoc3RkZXJyLCAiLWhwZXQ6IGV4ZWN1dGluZyAlc1xuIiwKKwkJCQlocGV0X2NvbW1hbmRbaV0uY29tbWFuZCk7CisJCQlocGV0X2NvbW1hbmRbaV0uZnVuYyhhcmdjLCBhcmd2KTsKKwkJCXJldHVybiAwOworCQl9CisKKwlmcHJpbnRmKHN0ZGVyciwgImRvX2hwZXQ6IGNvbW1hbmQgJXMgbm90IGltcGxlbWVudGVkXG4iLCBhcmd2WzBdKTsKKworCXJldHVybiAtMTsKK30KKwordm9pZAoraHBldF9vcGVuX2Nsb3NlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQJZmQ7CisKKwlpZiAoYXJnYyAhPSAxKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9vcGVuX2Nsb3NlOiBkZXZpY2UtbmFtZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9vcGVuX2Nsb3NlOiBvcGVuIGZhaWxlZFxuIik7CisJZWxzZQorCQljbG9zZShmZCk7CisKKwlyZXR1cm47Cit9CisKK3ZvaWQKK2hwZXRfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7Cit9CisKK3ZvaWQKK2hwZXRfcG9sbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgbG9uZwkJZnJlcTsKKwlpbnQJCQlpdGVyYXRpb25zLCBpLCBmZDsKKwlzdHJ1Y3QgcG9sbGZkCQlwZmQ7CisJc3RydWN0IGhwZXRfaW5mbwlpbmZvOworCXN0cnVjdCB0aW1ldmFsCQlzdHYsIGV0djsKKwlzdHJ1Y3QgdGltZXpvbmUJCXR6OworCWxvbmcJCQl1c2VjOworCisJaWYgKGFyZ2MgIT0gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogZGV2aWNlLW5hbWUgZnJlcSBpdGVyYXRpb25zXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZyZXEgPSBhdG9pKGFyZ3ZbMV0pOworCWl0ZXJhdGlvbnMgPSBhdG9pKGFyZ3ZbMl0pOworCisJZmQgPSBvcGVuKGFyZ3ZbMF0sIE9fUkRPTkxZKTsKKworCWlmIChmZCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IG9wZW4gb2YgJXMgZmFpbGVkXG4iLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpb2N0bChmZCwgSFBFVF9JUlFGUkVRLCBmcmVxKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IEhQRVRfSVJRRlJFUSBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW9jdGwoZmQsIEhQRVRfSU5GTywgJmluZm8pIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogZmFpbGVkIHRvIGdldCBpbmZvXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IGluZm8uaGlfZmxhZ3MgMHglbHhcbiIsIGluZm8uaGlfZmxhZ3MpOworCisJaWYgKGluZm8uaGlfZmxhZ3MgJiYgKGlvY3RsKGZkLCBIUEVUX0VQSSwgMCkgPCAwKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogSFBFVF9FUEkgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lFX09OLCAwKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGwsIEhQRVRfSUVfT04gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcGZkLmZkID0gZmQ7CisJcGZkLmV2ZW50cyA9IFBPTExJTjsKKworCWZvciAoaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKwkJcGZkLnJldmVudHMgPSAwOworCQlnZXR0aW1lb2ZkYXkoJnN0diwgJnR6KTsKKwkJaWYgKHBvbGwoJnBmZCwgMSwgLTEpIDwgMCkKKwkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBwb2xsIGZhaWxlZFxuIik7CisJCWVsc2UgeworCQkJbG9uZyAJZGF0YTsKKworCQkJZ2V0dGltZW9mZGF5KCZldHYsICZ0eik7CisJCQl1c2VjID0gc3R2LnR2X3NlYyAqIDEwMDAwMDAgKyBzdHYudHZfdXNlYzsKKwkJCXVzZWMgPSAoZXR2LnR2X3NlYyAqIDEwMDAwMDAgKyBldHYudHZfdXNlYykgLSB1c2VjOworCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiaHBldF9wb2xsOiBleHBpcmVkIHRpbWUgPSAweCVseFxuIiwgdXNlYyk7CisKKwkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiByZXZlbnRzID0gMHgleFxuIiwKKwkJCQlwZmQucmV2ZW50cyk7CisKKwkJCWlmIChyZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSAhPSBzaXplb2YoZGF0YSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogcmVhZCBmYWlsZWRcbiIpOworCQkJfQorCQkJZWxzZQorCQkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBkYXRhIDB4JWx4XG4iLAorCQkJCQlkYXRhKTsKKwkJfQorCX0KKworb3V0OgorCWNsb3NlKGZkKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgaHBldF9zaWdpb19jb3VudDsKKworc3RhdGljIHZvaWQKK2hwZXRfc2lnaW8oaW50IHZhbCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgImhwZXRfc2lnaW86IGNhbGxlZFxuIik7CisJaHBldF9zaWdpb19jb3VudCsrOworfQorCit2b2lkCitocGV0X2Zhc3luYyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgbG9uZwkJZnJlcTsKKwlpbnQJCQlpdGVyYXRpb25zLCBpLCBmZCwgdmFsdWU7CisJc2lnX3QJCQlvbGRzaWc7CisJc3RydWN0IGhwZXRfaW5mbwlpbmZvOworCisJaHBldF9zaWdpb19jb3VudCA9IDA7CisJZmQgPSAtMTsKKworCWlmICgob2xkc2lnID0gc2lnbmFsKFNJR0lPLCBocGV0X3NpZ2lvKSkgPT0gU0lHX0VSUikgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBmYWlsZWQgdG8gc2V0IHNpZ25hbCBoYW5kbGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhcmdjICE9IDMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogZGV2aWNlLW5hbWUgZnJlcSBpdGVyYXRpb25zXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZmQgPSBvcGVuKGFyZ3ZbMF0sIE9fUkRPTkxZKTsKKworCWlmIChmZCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogZmFpbGVkIHRvIG9wZW4gJXNcbiIsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCisKKwlpZiAoKGZjbnRsKGZkLCBGX1NFVE9XTiwgZ2V0cGlkKCkpID09IDEpIHx8CisJCSgodmFsdWUgPSBmY250bChmZCwgRl9HRVRGTCkpID09IDEpIHx8CisJCShmY250bChmZCwgRl9TRVRGTCwgdmFsdWUgfCBPX0FTWU5DKSA9PSAxKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBmY250bCBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmcmVxID0gYXRvaShhcmd2WzFdKTsKKwlpdGVyYXRpb25zID0gYXRvaShhcmd2WzJdKTsKKworCWlmIChpb2N0bChmZCwgSFBFVF9JUlFGUkVRLCBmcmVxKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogSFBFVF9JUlFGUkVRIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpb2N0bChmZCwgSFBFVF9JTkZPLCAmaW5mbykgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZhaWxlZCB0byBnZXQgaW5mb1xuIik7CisJCWdvdG8gb3V0OworCX0KKworCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGluZm8uaGlfZmxhZ3MgMHglbHhcbiIsIGluZm8uaGlfZmxhZ3MpOworCisJaWYgKGluZm8uaGlfZmxhZ3MgJiYgKGlvY3RsKGZkLCBIUEVUX0VQSSwgMCkgPCAwKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBIUEVUX0VQSSBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW9jdGwoZmQsIEhQRVRfSUVfT04sIDApIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jLCBIUEVUX0lFX09OIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKwkJKHZvaWQpIHBhdXNlKCk7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGNvdW50ID0gJWRcbiIsIGhwZXRfc2lnaW9fY291bnQpOworCX0KKworb3V0OgorCXNpZ25hbChTSUdJTywgb2xkc2lnKTsKKworCWlmIChmZCA+PSAwKQorCQljbG9zZShmZCk7CisKKwlyZXR1cm47Cit9CisKK1RoZSBrZXJuZWwgQVBJIGhhcyB0aHJlZSBpbnRlcmZhY2VzIGV4cG9ydGVkIGZyb20gdGhlIGRyaXZlcjoKKworCWhwZXRfcmVnaXN0ZXIoc3RydWN0IGhwZXRfdGFzayAqdHAsIGludCBwZXJpb2RpYykKKwlocGV0X3VucmVnaXN0ZXIoc3RydWN0IGhwZXRfdGFzayAqdHApCisJaHBldF9jb250cm9sKHN0cnVjdCBocGV0X3Rhc2sgKnRwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKworVGhlIGtlcm5lbCBtb2R1bGUgdXNpbmcgdGhpcyBpbnRlcmZhY2UgZmlsbHMgaW4gdGhlIGh0X2Z1bmMgYW5kIGh0X2RhdGEgbWVtYmVycyBvZiB0aGUKK2hwZXRfdGFzayBzdHJ1Y3R1cmUgYmVmb3JlIGNhbGxpbmcgaHBldF9yZWdpc3Rlci4gIGhwZXRfY29udHJvbCBzaW1wbHkgdmVjdG9ycyB0byB0aGUgaHBldF9pb2N0bAorcm91dGluZSBhbmQgaGFzIHRoZSBzYW1lIGNvbW1hbmRzIGFuZCByZXNwZWN0aXZlIGFyZ3VtZW50cyBhcyB0aGUgdXNlciBBUEkuICBocGV0X3VucmVnaXN0ZXIKK2lzIHVzZWQgdG8gdGVybWluYXRlIHVzYWdlIG9mIHRoZSBIUEVUIHRpbWVyIHJlc2VydmVkIGJ5IGhwZXRfcmVnaXN0ZXIuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od19yYW5kb20udHh0IGIvRG9jdW1lbnRhdGlvbi9od19yYW5kb20udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNThjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3X3JhbmRvbS50eHQKQEAgLTAsMCArMSw2OSBAQAorCUhhcmR3YXJlIGRyaXZlciBmb3IgSW50ZWwvQU1EL1ZJQSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcnMgKFJORykKKwlDb3B5cmlnaHQgMjAwMCwyMDAxIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KKwlDb3B5cmlnaHQgMjAwMCwyMDAxIFBoaWxpcHAgUnVtcGYgPHBydW1wZkBtYW5kcmFrZXNvZnQuY29tPgorCitJbnRyb2R1Y3Rpb246CisKKwlUaGUgaHdfcmFuZG9tIGRldmljZSBkcml2ZXIgaXMgc29mdHdhcmUgdGhhdCBtYWtlcyB1c2Ugb2YgYQorCXNwZWNpYWwgaGFyZHdhcmUgZmVhdHVyZSBvbiB5b3VyIENQVSBvciBtb3RoZXJib2FyZCwKKwlhIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChSTkcpLgorCisJSW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdXNlIG9mIHRoaXMgZGV2aWNlIGRyaXZlciwgeW91CisJc2hvdWxkIGRvd25sb2FkIHRoZSBzdXBwb3J0IHNvZnR3YXJlIGFzIHdlbGwuICBEb3dubG9hZCB0aGUKKwlsYXRlc3QgdmVyc2lvbiBvZiB0aGUgInJuZy10b29scyIgcGFja2FnZSBmcm9tIHRoZQorCWh3X3JhbmRvbSBkcml2ZXIncyBvZmZpY2lhbCBXZWIgc2l0ZToKKworCQlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwvCisKK0Fib3V0IHRoZSBJbnRlbCBSTkcgaGFyZHdhcmUsIGZyb20gdGhlIGZpcm13YXJlIGh1YiBkYXRhc2hlZXQ6CisKKwlUaGUgRmlybXdhcmUgSHViIGludGVncmF0ZXMgYSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAoUk5HKQorCXVzaW5nIHRoZXJtYWwgbm9pc2UgZ2VuZXJhdGVkIGZyb20gaW5oZXJlbnRseSByYW5kb20gcXVhbnR1bQorCW1lY2hhbmljYWwgcHJvcGVydGllcyBvZiBzaWxpY29uLiBXaGVuIG5vdCBnZW5lcmF0aW5nIG5ldyByYW5kb20KKwliaXRzIHRoZSBSTkcgY2lyY3VpdHJ5IHdpbGwgZW50ZXIgYSBsb3cgcG93ZXIgc3RhdGUuIEludGVsIHdpbGwKKwlwcm92aWRlIGEgYmluYXJ5IHNvZnR3YXJlIGRyaXZlciB0byBnaXZlIHRoaXJkIHBhcnR5IHNvZnR3YXJlCisJYWNjZXNzIHRvIG91ciBSTkcgZm9yIHVzZSBhcyBhIHNlY3VyaXR5IGZlYXR1cmUuIEF0IHRoaXMgdGltZSwKKwl0aGUgUk5HIGlzIG9ubHkgdG8gYmUgdXNlZCB3aXRoIGEgc3lzdGVtIGluIGFuIE9TLXByZXNlbnQgc3RhdGUuCisKK1RoZW9yeSBvZiBvcGVyYXRpb246CisKKwlDaGFyYWN0ZXIgZHJpdmVyLiAgVXNpbmcgdGhlIHN0YW5kYXJkIG9wZW4oKQorCWFuZCByZWFkKCkgc3lzdGVtIGNhbGxzLCB5b3UgY2FuIHJlYWQgcmFuZG9tIGRhdGEgZnJvbQorCXRoZSBoYXJkd2FyZSBSTkcgZGV2aWNlLiAgVGhpcyBkYXRhIGlzIE5PVCBDSEVDS0VEIGJ5IGFueQorCWZpdG5lc3MgdGVzdHMsIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBiZSBib2d1cyAoaWYgdGhlCisJaGFyZHdhcmUgaXMgZmF1bHR5IG9yIGhhcyBiZWVuIHRhbXBlcmVkIHdpdGgpLiAgRGF0YSBpcyBvbmx5CisJb3V0cHV0IGlmIHRoZSBoYXJkd2FyZSAiaGFzLWRhdGEiIGZsYWcgaXMgc2V0LCBidXQgbmV2ZXJ0aGVsZXNzCisJYSBzZWN1cml0eS1jb25zY2lvdXMgcGVyc29uIHdvdWxkIHJ1biBmaXRuZXNzIHRlc3RzIG9uIHRoZQorCWRhdGEgYmVmb3JlIGFzc3VtaW5nIGl0IGlzIHRydWx5IHJhbmRvbS4KKworCS9kZXYvaHdyYW5kb20gaXMgY2hhciBkZXZpY2UgbWFqb3IgMTAsIG1pbm9yIDE4My4KKworRHJpdmVyIG5vdGVzOgorCisJKiBGSVhNRTogc3VwcG9ydCBwb2xsKDIpCisKKwlOT1RFOiByZXF1ZXN0X21lbV9yZWdpb24gd2FzIHJlbW92ZWQsIGZvciB0d28gcmVhc29uczoKKwkxKSBPbmx5IG9uZSBSTkcgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCAyKSBUaGUgbG9jYXRpb24KKwl1c2VkIGJ5IHRoZSBSTkcgaXMgYSBmaXhlZCBsb2NhdGlvbiBpbiBNTUlPLWFkZHJlc3NhYmxlIG1lbW9yeSwKKwkzKSB1c2VycyB3aXRoIHByb3Blcmx5IHdvcmtpbmcgQklPUyBlODIwIGhhbmRsaW5nIHdpbGwgYWx3YXlzCisJaGF2ZSB0aGUgcmVnaW9uIGluIHdoaWNoIHRoZSBSTkcgaXMgbG9jYXRlZCByZXNlcnZlZCwgc28KKwlyZXF1ZXN0X21lbV9yZWdpb24gY2FsbHMgYWx3YXlzIGZhaWwgZm9yIHByb3BlciBzZXR1cHMuCisJSG93ZXZlciwgZm9yIHBlb3BsZSB3aG8gdXNlIG1lbT1YWCwgQklPUyBlODIwIGluZm9ybWF0aW9uIGlzCisJLW5vdC0gaW4gL3Byb2MvaW9tZW0sIGFuZCByZXF1ZXN0X21lbV9yZWdpb24oUk5HX0FERFIpIGNhbgorCXN1Y2NlZWQuCisKK0RyaXZlciBkZXRhaWxzOgorCisJQmFzZWQgb246CisJSW50ZWwgODI4MDJBQi84MjgwMkFDIEZpcm13YXJlIEh1YiAoRldIKSBEYXRhc2hlZXQKKwkJTWF5IDE5OTkgT3JkZXIgTnVtYmVyOiAyOTA2NTgtMDAyIFIKKworCUludGVsIDgyODAyIEZpcm13YXJlIEh1YjogUmFuZG9tIE51bWJlciBHZW5lcmF0b3IKKwlQcm9ncmFtbWVyJ3MgUmVmZXJlbmNlIE1hbnVhbAorCQlEZWNlbWJlciAxOTk5IE9yZGVyIE51bWJlcjogMjk4MDI5LTAwMSBSCisKKwlJbnRlbCA4MjgwMiBGaXJtd2FyZSBIVUIgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgRHJpdmVyCisJQ29weXJpZ2h0IChjKSAyMDAwIE1hdHQgU290dGVrIDxtc290dGVrQHF1aWtuZXQuY29tPgorCisJU3BlY2lhbCB0aGFua3MgdG8gTWF0dCBTb3R0ZWsuICBJIGRpZCB0aGUgImd1dHMiLCBoZQorCWRpZCB0aGUgImJyYWlucyIgYW5kIGFsbCB0aGUgdGVzdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGIzYjRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1CkBAIC0wLDAgKzEsNDIgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWFsaTE1MzUKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEFjZXIgTGFicywgSW5jLiBBTEkgMTUzNSAoc291dGggYnJpZGdlKQorICAgIERhdGFzaGVldDogTm93IHVuZGVyIE5EQQorCWh0dHA6Ly93d3cuYWxpLmNvbS50dy9lbmcvc3VwcG9ydC9kYXRhc2hlZXRfcmVxdWVzdC5waHAKKworQXV0aG9yczoKKwlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCAKKwlQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LAorCU1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4sCisJRGFuIEVhdG9uIDxkYW4uZWF0b25Acm9ja2V0bG9naXguY29tPiwKKwlTdGVwaGVuIFJvdXNzZXQ8c3RlcGhlbi5yb3Vzc2V0QHJvY2tldGxvZ2l4LmNvbT4KKwkJCQkJCQkJCQkJCQorRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFNNQiBIb3N0IGNvbnRyb2xsZXIgb24gQWNlciBMYWJzIEluYy4gKEFMSSkKK00xNTM1IFNvdXRoIEJyaWRnZS4KKworVGhlIE0xNTM1IGlzIGEgU291dGggYnJpZGdlIGZvciBwb3J0YWJsZSBzeXN0ZW1zLiBJdCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlCitNMTV4MyBTb3V0aCBicmlkZ2VzIGFsc28gcHJvZHVjZWQgYnkgQWNlciBMYWJzIEluYy4gIFNvbWUgb2YgdGhlIHJlZ2lzdGVycword2l0aGluIHRoZSBwYXJ0IGhhdmUgbW92ZWQgYW5kIHNvbWUgaGF2ZSBiZWVuIHJlZGVmaW5lZCBzbGlnaHRseS4KK0FkZGl0aW9uYWxseSwgdGhlIHNlcXVlbmNpbmcgb2YgdGhlIFNNQnVzIHRyYW5zYWN0aW9ucyBoYXMgYmVlbiBtb2RpZmllZCB0bworYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIHNlcXVlbmNpbmcgcmVjb21tZW5kZWQgYnkgdGhlIG1hbnVmYWN0dXJlciBhbmQKK29ic2VydmVkIHRocm91Z2ggdGVzdGluZy4gIFRoZXNlIGNoYW5nZXMgYXJlIHJlZmxlY3RlZCBpbiB0aGlzIGRyaXZlciBhbmQKK2NhbiBiZSBpZGVudGlmaWVkIGJ5IGNvbXBhcmluZyB0aGlzIGRyaXZlciB0byB0aGUgaTJjLWFsaTE1eDMgZHJpdmVyLiBGb3IKK2FuIG92ZXJ2aWV3IG9mIHRoZXNlIGNoaXBzIHNlZSBodHRwOi8vd3d3LmFjZXJsYWJzLmNvbQorCitUaGUgU01CIGNvbnRyb2xsZXIgaXMgcGFydCBvZiB0aGUgTTcxMDEgZGV2aWNlLCB3aGljaCBpcyBhbiBBQ1BJLWNvbXBsaWFudAorUG93ZXIgTWFuYWdlbWVudCBVbml0IChQTVUpLgorCitUaGUgd2hvbGUgTTcxMDEgZGV2aWNlIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGUgU01CIHRvIHdvcmsuIFlvdSBjYW4ndAoranVzdCBlbmFibGUgdGhlIFNNQiBhbG9uZS4gVGhlIFNNQiBhbmQgdGhlIEFDUEkgaGF2ZSBzZXBhcmF0ZSBJL08gc3BhY2VzLgorV2UgbWFrZSBzdXJlIHRoYXQgdGhlIFNNQiBpcyBlbmFibGVkLiBXZSBsZWF2ZSB0aGUgQUNQSSBhbG9uZS4KKworCitGZWF0dXJlcworLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgY29udHJvbHMgdGhlIFNNQiBIb3N0IG9ubHkuIFRoaXMgZHJpdmVyIGRvZXMgbm90IHVzZQoraW50ZXJydXB0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTU2MyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTU2MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWFkNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzCkBAIC0wLDAgKzEsMjcgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWFsaTE1NjMKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEFjZXIgTGFicywgSW5jLiBBTEkgMTU2MyAoc291dGggYnJpZGdlKQorICAgIERhdGFzaGVldDogTm93IHVuZGVyIE5EQQorCWh0dHA6Ly93d3cuYWxpLmNvbS50dy9lbmcvc3VwcG9ydC9kYXRhc2hlZXRfcmVxdWVzdC5waHAKKworQXV0aG9yOiBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQGRpZ2l0YWxpbXBsYW50Lm9yZz4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFNNQiBIb3N0IGNvbnRyb2xsZXIgb24gQWNlciBMYWJzIEluYy4gKEFMSSkKK00xNTYzIFNvdXRoIEJyaWRnZS4KKworRm9yIGFuIG92ZXJ2aWV3IG9mIHRoZXNlIGNoaXBzIHNlZSBodHRwOi8vd3d3LmFjZXJsYWJzLmNvbQorCitUaGUgTTE1NjMgc291dGhicmlkZ2UgaXMgZGVjZXB0aXZlbHkgc2ltaWxhciB0byB0aGUgTTE1MzMsIHdpdGggYSBmZXcKK25vdGFibGUgZXhjZXB0aW9ucy4gT25lIG9mIHRob3NlIGhhcHBlbnMgdG8gYmUgdGhlIGZhY3QgdGhleSB1cGdyYWRlZCB0aGUKK2kyYyBjb3JlIHRvIGJlIFNNQnVzIDIuMCBjb21wbGlhbnQsIGFuZCBoYXBwZW5zIHRvIGJlIGFsbW9zdCBpZGVudGljYWwgdG8KK3RoZSBpMmMgY29udHJvbGxlciBmb3VuZCBpbiB0aGUgSW50ZWwgODAxIHNvdXRoIGJyaWRnZXMuIAorCitGZWF0dXJlcworLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgY29udHJvbHMgdGhlIFNNQiBIb3N0IG9ubHkuIFRoaXMgZHJpdmVyIGRvZXMgbm90IHVzZQoraW50ZXJydXB0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTV4MyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTV4MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjI4ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzCkBAIC0wLDAgKzEsMTEyIEBACitLZXJuZWwgZHJpdmVyIGkyYy1hbGkxNXgzCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKyAgKiBBY2VyIExhYnMsIEluYy4gQUxJIDE1MzMgYW5kIDE1NDNDIChzb3V0aCBicmlkZ2UpCisgICAgRGF0YXNoZWV0OiBOb3cgdW5kZXIgTkRBCisJaHR0cDovL3d3dy5hbGkuY29tLnR3L2VuZy9zdXBwb3J0L2RhdGFzaGVldF9yZXF1ZXN0LnBocAorCitBdXRob3JzOgorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIAorCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sIAorCU1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogZm9yY2VfYWRkcjogaW50CisgIEluaXRpYWxpemUgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaTJjIGNvbnRyb2xsZXIKKworCitOb3RlcworLS0tLS0KKworVGhlIGZvcmNlX2FkZHIgcGFyYW1ldGVyIGlzIHVzZWZ1bCBmb3IgYm9hcmRzIHRoYXQgZG9uJ3Qgc2V0IHRoZSBhZGRyZXNzIGluCit0aGUgQklPUy4gRG9lcyBub3QgZG8gYSBQQ0kgZm9yY2U7IHRoZSBkZXZpY2UgbXVzdCBzdGlsbCBiZSBwcmVzZW50IGluCitsc3BjaS4gRG9uJ3QgdXNlIHRoaXMgdW5sZXNzIHRoZSBkcml2ZXIgY29tcGxhaW5zIHRoYXQgdGhlIGJhc2UgYWRkcmVzcyBpcworbm90IHNldC4KKworRXhhbXBsZTogJ21vZHByb2JlIGkyYy1hbGkxNXgzIGZvcmNlX2FkZHI9MHhlODAwJworCitTTUJ1cyBwZXJpb2RpY2FsbHkgaGFuZ3Mgb24gQVNVUyBQNUEgbW90aGVyYm9hcmRzIGFuZCBjYW4gb25seSBiZSBjbGVhcmVkCitieSBhIHBvd2VyIGN5Y2xlLiBDYXVzZSB1bmtub3duIChzZWUgSXNzdWVzIGJlbG93KS4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU01CIEhvc3QgY29udHJvbGxlciBvbiBBY2VyIExhYnMgSW5jLiAoQUxJKQorTTE1NDEgYW5kIE0xNTQzQyBTb3V0aCBCcmlkZ2VzLgorCitUaGUgTTE1NDNDIGlzIGEgU291dGggYnJpZGdlIGZvciBkZXNrdG9wIHN5c3RlbXMuCitUaGUgTTE1NDEgaXMgYSBTb3V0aCBicmlkZ2UgZm9yIHBvcnRhYmxlIHN5c3RlbXMuCitUaGV5IGFyZSBwYXJ0IG9mIHRoZSBmb2xsb3dpbmcgQUxJIGNoaXBzZXRzOgorICAgCisgKiAiQWxhZGRpbiBQcm8gMiIgaW5jbHVkZXMgdGhlIE0xNjIxIFNsb3QgMSBOb3J0aCBicmlkZ2Ugd2l0aCBBR1AgYW5kIAorIAkJMTAwTUh6IENQVSBGcm9udCBTaWRlIGJ1cworICogIkFsYWRkaW4gViIgaW5jbHVkZXMgdGhlIE0xNTQxIFNvY2tldCA3IE5vcnRoIGJyaWRnZSB3aXRoIEFHUCBhbmQgMTAwTUh6IAorIAkJQ1BVIEZyb250IFNpZGUgYnVzCisgICBTb21lIEFsYWRkaW4gViBtb3RoZXJib2FyZHM6CisJQXN1cyBQNUEKKwlBdHJlbmQgQVRDLTUyMjAKKwlCQ00vR1ZDIFZQMTU0MQorCUJpb3N0YXIgTTVBTEEKKwlHaWdhYnl0ZSBHQS01QVggKCoqIEdlbmVyYWxseSBkb2Vzbid0IHdvcmsgYmVjYXVzZSB0aGUgQklPUyBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlIHRoZSA3MTAxIGRldmljZSEgKiopCisJSXdpbGwgWEExMDAgUGx1cworCU1pY3JvbmljcyBDMjAwCisJTWljcm9zdGFyIChNU0kpIE1TLTUxNjkKKworICAqICJBbGFkZGluIElWIiBpbmNsdWRlcyB0aGUgTTE1NDEgU29ja2V0IDcgTm9ydGggYnJpZGdlCisgICAJCXdpdGggaG9zdCBidXMgdXAgdG8gODMuMyBNSHouCisKK0ZvciBhbiBvdmVydmlldyBvZiB0aGVzZSBjaGlwcyBzZWUgaHR0cDovL3d3dy5hY2VybGFicy5jb20uIEF0IHRoaXMgdGltZSB0aGUKK2Z1bGwgZGF0YSBzaGVldHMgb24gdGhlIHdlYiBzaXRlIGFyZSBwYXNzd29yZCBwcm90ZWN0ZWQsIGhvd2V2ZXIgaWYgeW91Citjb250YWN0IHRoZSBBTEkgb2ZmaWNlIGluIFNhbiBKb3NlIHRoZXkgbWF5IGdpdmUgeW91IHRoZSBwYXNzd29yZC4KKworVGhlIE0xNTMzL00xNTQzQyBkZXZpY2VzIGFwcGVhciBhcyBGT1VSIHNlcGFyYXRlIGRldmljZXMgb24gdGhlIFBDSSBidXMuIEFuCitvdXRwdXQgb2YgbHNwY2kgd2lsbCBzaG93IHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmc6CisKKyAgMDA6MDIuMCBVU0IgQ29udHJvbGxlcjogQWNlciBMYWJvcmF0b3JpZXMgSW5jLiBNNTIzNyAocmV2IDAzKQorICAwMDowMy4wIEJyaWRnZTogQWNlciBMYWJvcmF0b3JpZXMgSW5jLiBNNzEwMSAgICAgIDw9IFRISVMgSVMgVEhFIE9ORSBXRSBORUVECisgIDAwOjA3LjAgSVNBIGJyaWRnZTogQWNlciBMYWJvcmF0b3JpZXMgSW5jLiBNMTUzMyAocmV2IGMzKQorICAwMDowZi4wIElERSBpbnRlcmZhY2U6IEFjZXIgTGFib3JhdG9yaWVzIEluYy4gTTUyMjkgKHJldiBjMSkKKworKiogSU1QT1JUQU5UICoqCisqKiBJZiB5b3UgaGF2ZSBhIE0xNTMzIG9yIE0xNTQzQyBvbiB0aGUgYm9hcmQgYW5kIHlvdSBnZXQKKyoqICJhbGkxNXgzOiBFcnJvcjogQ2FuJ3QgZGV0ZWN0IGFsaTE1eDMhIgorKiogdGhlbiBydW4gbHNwY2kuCisqKiBJZiB5b3Ugc2VlIHRoZSAxNTMzIGFuZCA1MjI5IGRldmljZXMgYnV0IE5PVCB0aGUgNzEwMSBkZXZpY2UsCisqKiB0aGVuIHlvdSBtdXN0IGVuYWJsZSBBQ1BJLCB0aGUgUE1VLCBTTUIsIG9yIHNvbWV0aGluZyBzaW1pbGFyCisqKiBpbiB0aGUgQklPUy4gCisqKiBUaGUgZHJpdmVyIHdvbid0IHdvcmsgaWYgaXQgY2FuJ3QgZmluZCB0aGUgTTcxMDEgZGV2aWNlLgorCitUaGUgU01CIGNvbnRyb2xsZXIgaXMgcGFydCBvZiB0aGUgTTcxMDEgZGV2aWNlLCB3aGljaCBpcyBhbiBBQ1BJLWNvbXBsaWFudAorUG93ZXIgTWFuYWdlbWVudCBVbml0IChQTVUpLgorCitUaGUgd2hvbGUgTTcxMDEgZGV2aWNlIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGUgU01CIHRvIHdvcmsuIFlvdSBjYW4ndAoranVzdCBlbmFibGUgdGhlIFNNQiBhbG9uZS4gVGhlIFNNQiBhbmQgdGhlIEFDUEkgaGF2ZSBzZXBhcmF0ZSBJL08gc3BhY2VzLgorV2UgbWFrZSBzdXJlIHRoYXQgdGhlIFNNQiBpcyBlbmFibGVkLiBXZSBsZWF2ZSB0aGUgQUNQSSBhbG9uZS4KKworRmVhdHVyZXMgCistLS0tLS0tLSAKKworVGhpcyBkcml2ZXIgY29udHJvbHMgdGhlIFNNQiBIb3N0IG9ubHkuIFRoZSBTTUIgU2xhdmUKK2NvbnRyb2xsZXIgb24gdGhlIE0xNVgzIGlzIG5vdCBlbmFibGVkLiBUaGlzIGRyaXZlciBkb2VzIG5vdCB1c2UKK2ludGVycnVwdHMuCisKKworSXNzdWVzCistLS0tLS0KKworVGhpcyBkcml2ZXIgcmVxdWVzdHMgdGhlIEkvTyBzcGFjZSBmb3Igb25seSB0aGUgU01CCityZWdpc3RlcnMuIEl0IGRvZXNuJ3QgdXNlIHRoZSBBQ1BJIHJlZ2lvbi4KKworT24gdGhlIEFTVVMgUDVBIG1vdGhlcmJvYXJkLCB0aGVyZSBhcmUgc2V2ZXJhbCByZXBvcnRzIHRoYXQKK3RoZSBTTUJ1cyB3aWxsIGhhbmcgYW5kIHRoaXMgY2FuIG9ubHkgYmUgcmVzb2x2ZWQgYnkKK3Bvd2VyaW5nIG9mZiB0aGUgY29tcHV0ZXIuIEl0IGFwcGVhcnMgdG8gYmUgd29yc2Ugd2hlbiB0aGUgYm9hcmQKK2dldHMgaG90LCBmb3IgZXhhbXBsZSB1bmRlciBoZWF2eSBDUFUgbG9hZCwgb3IgaW4gdGhlIHN1bW1lci4KK1RoZXJlIG1heSBiZSBlbGVjdHJpY2FsIHByb2JsZW1zIG9uIHRoaXMgYm9hcmQuCitPbiB0aGUgUDVBLCB0aGUgVzgzNzgxRCBzZW5zb3IgY2hpcCBpcyBvbiBib3RoIHRoZSBJU0EgYW5kCitTTUJ1cy4gVGhlcmVmb3JlIHRoZSBTTUJ1cyBoYW5ncyBjYW4gZ2VuZXJhbGx5IGJlIGF2b2lkZWQKK2J5IGFjY2Vzc2luZyB0aGUgVzgzNzgxRCBvbiB0aGUgSVNBIGJ1cyBvbmx5LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDc1NiBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYW1kNzU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjMwODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDc1NgpAQCAtMCwwICsxLDI1IEBACitLZXJuZWwgZHJpdmVyIGkyYy1hbWQ3NTYKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEFNRCA3NTYKKyAgKiBBTUQgNzY2CisgICogQU1EIDc2OAorICAqIEFNRCA4MTExCisgICAgRGF0YXNoZWV0czogUHVibGljbHkgYXZhaWxhYmxlIG9uIEFNRCB3ZWJzaXRlCisKKyAgKiBuVmlkaWEgbkZvcmNlCisgICAgRGF0YXNoZWV0OiBVbmF2YWlsYWJsZQorCitBdXRob3JzOgorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiAKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBBTUQgNzU2LCA3NjYsIDc2OCBhbmQgODExMSBQZXJpcGhlcmFsIEJ1cworQ29udHJvbGxlcnMsIGFuZCB0aGUgblZpZGlhIG5Gb3JjZS4KKworTm90ZSB0aGF0IGZvciB0aGUgODExMSwgdGhlcmUgYXJlIHR3byBTTUJ1cyBhZGFwdGVycy4gVGhlIFNNQnVzIDEuMCBhZGFwdGVyCitpcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIGFuZCB0aGUgU01CdXMgMi4wIGFkYXB0ZXIgaXMgc3VwcG9ydGVkIGJ5IHRoZQoraTJjLWFtZDgxMTEgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjk0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEKQEAgLTAsMCArMSw0MSBAQAorS2VybmVsIGRyaXZlciBpMmMtYWRtODExMQorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICAgKiBBTUQtODExMSBTTUJ1cyAyLjAgUENJIGludGVyZmFjZQorCitEYXRhc2hlZXRzOgorCUFNRCBkYXRhc2hlZXQgbm90IHlldCBhdmFpbGFibGUsIGJ1dCBhbG1vc3QgZXZlcnl0aGluZyBjYW4gYmUgZm91bmQKKwlpbiBwdWJsaWNhbGx5IGF2YWlsYWJsZSBBQ1BJIDIuMCBzcGVjaWZpY2F0aW9uLCB3aGljaCB0aGUgYWRhcHRlciAKKwlmb2xsb3dzLgorCitBdXRob3I6IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitJZiB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKzAwOjA3LjIgU01CdXM6IEFkdmFuY2VkIE1pY3JvIERldmljZXMgW0FNRF0gQU1ELTgxMTEgU01CdXMgMi4wIChyZXYgMDIpCisgICAgICAgIFN1YnN5c3RlbTogQWR2YW5jZWQgTWljcm8gRGV2aWNlcyBbQU1EXSBBTUQtODExMSBTTUJ1cyAyLjAKKyAgICAgICAgRmxhZ3M6IG1lZGl1bSBkZXZzZWwsIElSUSAxOQorICAgICAgICBJL08gcG9ydHMgYXQgZDQwMCBbc2l6ZT0zMl0KKworaW4geW91ciAnbHNwY2kgLXYnLCB0aGVuIHRoaXMgZHJpdmVyIGlzIGZvciB5b3VyIGNoaXBzZXQuCisKK1Byb2Nlc3MgQ2FsbCBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0ZWQuCisKK1NNQnVzIDIuMCBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0ZWQuIEJvdGggUEVDIGFuZCBibG9jayBwcm9jZXNzIGNhbGwgc3VwcG9ydCBpcyBpbXBsZW1lbnRlZC4gU2xhdmUKK21vZGUgb3IgaG9zdCBub3RpZmljYXRpb24gYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKK05vdGVzCistLS0tLQorCitOb3RlIHRoYXQgZm9yIHRoZSA4MTExLCB0aGVyZSBhcmUgdHdvIFNNQnVzIGFkYXB0ZXJzLiBUaGUgU01CdXMgMi4wIGFkYXB0ZXIKK2lzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgYW5kIHRoZSBTTUJ1cyAxLjAgYWRhcHRlciBpcyBzdXBwb3J0ZWQgYnkgdGhlCitpMmMtYW1kNzU2IGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDRiMjcxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCkBAIC0wLDAgKzEsODAgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWk4MDEKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEludGVsIDgyODAxQUEgYW5kIDgyODAxQUIgKElDSCBhbmQgSUNIMCAtIHBhcnQgb2YgdGhlCisgICAgJzgxMCcgYW5kICc4MTBFJyBjaGlwc2V0cykKKyAgKiBJbnRlbCA4MjgwMUJBIChJQ0gyIC0gcGFydCBvZiB0aGUgJzgxNUUnIGNoaXBzZXQpCisgICogSW50ZWwgODI4MDFDQS9DQU0gKElDSDMpCisgICogSW50ZWwgODI4MDFEQiAoSUNINCkgKEhXIFBFQyBzdXBwb3J0ZWQsIDMyIGJ5dGUgYnVmZmVyIG5vdCBzdXBwb3J0ZWQpCisgICogSW50ZWwgODI4MDFFQi9FUiAoSUNINSkgKEhXIFBFQyBzdXBwb3J0ZWQsIDMyIGJ5dGUgYnVmZmVyIG5vdCBzdXBwb3J0ZWQpCisgICogSW50ZWwgNjMwMEVTQgorICAqIEludGVsIDgyODAxRkIvRlIvRlcvRlJXIChJQ0g2KQorICAqIEludGVsIElDSDcKKyAgICBEYXRhc2hlZXRzOiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEludGVsIHdlYnNpdGUKKworQXV0aG9yczogCisJRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwgCisJTWFyayBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlX2FkZHI6IGludAorICBGb3JjaWJseSBlbmFibGUgdGhlIElDSCBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4gRVhUUkVNRUxZIERBTkdFUk9VUyEKKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhlIElDSCAocHJvcGVybHkga25vd24gYXMgdGhlIDgyODAxQUEpLCBJQ0gwICg4MjgwMUFCKSwgSUNIMiAoODI4MDFCQSksCitJQ0gzICg4MjgwMUNBL0NBTSkgYW5kIGxhdGVyIGRldmljZXMgYXJlIEludGVsIGNoaXBzIHRoYXQgYXJlIGEgcGFydCBvZgorSW50ZWwncyAnODEwJyBjaGlwc2V0IGZvciBDZWxlcm9uLWJhc2VkIFBDcywgJzgxMEUnIGNoaXBzZXQgZm9yCitQZW50aXVtLWJhc2VkIFBDcywgJzgxNUUnIGNoaXBzZXQsIGFuZCBvdGhlcnMuCisKK1RoZSBJQ0ggY2hpcHMgY29udGFpbiBhdCBsZWFzdCBTRVZFTiBzZXBhcmF0ZSBQQ0kgZnVuY3Rpb25zIGluIFRXTyBsb2dpY2FsCitQQ0kgZGV2aWNlcy4gQW4gb3V0cHV0IG9mIGxzcGNpIHdpbGwgc2hvdyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUKK2ZvbGxvd2luZzoKKworICAwMDoxZS4wIFBDSSBicmlkZ2U6IEludGVsIENvcnBvcmF0aW9uOiBVbmtub3duIGRldmljZSAyNDE4IChyZXYgMDEpCisgIDAwOjFmLjAgSVNBIGJyaWRnZTogSW50ZWwgQ29ycG9yYXRpb246IFVua25vd24gZGV2aWNlIDI0MTAgKHJldiAwMSkKKyAgMDA6MWYuMSBJREUgaW50ZXJmYWNlOiBJbnRlbCBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgMjQxMSAocmV2IDAxKQorICAwMDoxZi4yIFVTQiBDb250cm9sbGVyOiBJbnRlbCBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgMjQxMiAocmV2IDAxKQorICAwMDoxZi4zIFVua25vd24gY2xhc3MgWzBjMDVdOiBJbnRlbCBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgMjQxMyAocmV2IDAxKQorCitUaGUgU01CdXMgY29udHJvbGxlciBpcyBmdW5jdGlvbiAzIGluIGRldmljZSAxZi4gQ2xhc3MgMGMwNSBpcyBTTUJ1cyBTZXJpYWwKK0NvbnRyb2xsZXIuCisKK0lmIHlvdSBkbyBOT1Qgc2VlIHRoZSAyNHgzIGRldmljZSBhdCBmdW5jdGlvbiAzLCBhbmQgeW91IGNhbid0IGZpZ3VyZSBvdXQKK2FueSB3YXkgaW4gdGhlIEJJT1MgdG8gZW5hYmxlIGl0LAorCitUaGUgSUNIIGNoaXBzIGFyZSBxdWl0ZSBzaW1pbGFyIHRvIEludGVsJ3MgUElJWDQgY2hpcCwgYXQgbGVhc3QgaW4gdGhlCitTTUJ1cyBjb250cm9sbGVyLgorCitTZWUgdGhlIGZpbGUgaTJjLXBpaXg0IGZvciBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKKworUHJvY2VzcyBDYWxsIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdCBzdXBwb3J0ZWQuCisKKworSTJDIEJsb2NrIFJlYWQgU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3Qgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQuCisKKworU01CdXMgMi4wIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA4MjgwMURCIChJQ0g0KSBhbmQgbGF0ZXIgY2hpcHMgc3VwcG9ydCBzZXZlcmFsIFNNQnVzIDIuMCBmZWF0dXJlcy4KKworKioqKioqKioqKioqKioqKioqKioqKgorVGhlIGxtX3NlbnNvcnMgcHJvamVjdCBncmF0ZWZ1bGx5IGFja25vd2xlZGdlcyB0aGUgc3VwcG9ydCBvZiBUZXhhcworSW5zdHJ1bWVudHMgaW4gdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgb2YgdGhpcyBkcml2ZXIuCisKK1RoZSBsbV9zZW5zb3JzIHByb2plY3QgZ3JhdGVmdWxseSBhY2tub3dsZWRnZXMgdGhlIHN1cHBvcnQgb2YgSW50ZWwgaW4gdGhlCitkZXZlbG9wbWVudCBvZiBTTUJ1cyAyLjAgLyBJQ0g0IGZlYXR1cmVzIG9mIHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODEwIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDRlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MTAKQEAgLTAsMCArMSw0NiBAQAorS2VybmVsIGRyaXZlciBpMmMtaTgxMAorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogSW50ZWwgODI4MTAsIDgyODEwLURDMTAwLCA4MjgxMEUsIGFuZCA4MjgxNSAoR01DSCkKKworQXV0aG9yczogCisJRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwKKyAgICAgICAgS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAorCVJhbHBoIE1ldHpsZXIgPHJqa21AdGhwLnVuaS1rb2Vsbi5kZT4sCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorCitNYWluIGNvbnRhY3Q6IE1hcmsgU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KKworRGVzY3JpcHRpb24gCistLS0tLS0tLS0tLSAKKworV0FSTklORzogSWYgeW91IGhhdmUgYW4gJzgxMCcgb3IgJzgxNScgbW90aGVyYm9hcmQsIHlvdXIgc3RhbmRhcmQgSTJDCit0ZW1wZXJhdHVyZSBzZW5zb3JzIGFyZSBtb3N0IGxpa2VseSBvbiB0aGUgODAxJ3MgSTJDIGJ1cy4gWW91IHdhbnQgdGhlCitpMmMtaTgwMSBkcml2ZXIgZm9yIHRob3NlLCBub3QgdGhpcyBkcml2ZXIuCisKK05vdyBmb3IgdGhlIGkyYy1pODEwLi4uCisKK1RoZSBHTUNIIGNoaXAgY29udGFpbnMgdHdvIEkyQyBpbnRlcmZhY2VzLgorCitUaGUgZmlyc3QgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIEREQyAoRGF0YSBEaXNwbGF5IENoYW5uZWwpIHdoaWNoIGlzIGEKK3NlcmlhbCBjaGFubmVsIHRocm91Z2ggdGhlIFZHQSBtb25pdG9yIGNvbm5lY3RvciB0byBhIEREQy1jb21wbGlhbnQKK21vbml0b3IuIFRoaXMgaW50ZXJmYWNlIGlzIGRlZmluZWQgYnkgdGhlIFZpZGVvIEVsZWN0cm9uaWNzIFN0YW5kYXJkcworQXNzb2NpYXRpb24gKFZFU0EpLiBUaGUgc3RhbmRhcmRzIGFyZSBhdmFpbGFibGUgZm9yIHB1cmNoYXNlIGF0CitodHRwOi8vd3d3LnZlc2Eub3JnIC4KKworVGhlIHNlY29uZCBpbnRlcmZhY2UgaXMgYSBnZW5lcmFsLXB1cnBvc2UgSTJDIGJ1cy4gSXQgbWF5IGJlIGNvbm5lY3RlZCB0byBhCitUVi1vdXQgY2hpcCBzdWNoIGFzIHRoZSBCVDg2OSBvciBwb3NzaWJseSB0byBhIGRpZ2l0YWwgZmxhdC1wYW5lbCBkaXNwbGF5LgorCitGZWF0dXJlcworLS0tLS0tLS0gCisKK0JvdGggYnVzc2VzIHVzZSB0aGUgaTJjLWFsZ28tYml0IGRyaXZlciBmb3IgJ2JpdCBiYW5naW5nJworYW5kIHN1cHBvcnQgZm9yIHNwZWNpZmljIHRyYW5zYWN0aW9ucyBpcyBwcm92aWRlZCBieSBpMmMtYWxnby1iaXQuCisKK0lzc3VlcworLS0tLS0tCisKK0lmIHlvdSBlbmFibGUgYnVzIHRlc3RpbmcgaW4gaTJjLWFsZ28tYml0IChpbnNtb2QgaTJjLWFsZ28tYml0IGJpdF90ZXN0PTEpLAordGhlIHRlc3QgbWF5IGZhaWw7IGlmIHNvLCB0aGUgaTJjLWk4MTAgZHJpdmVyIHdvbid0IGJlIGluc2VydGVkLiBIb3dldmVyLAord2UgdGhpbmsgdGhpcyBoYXMgYmVlbiBmaXhlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMiBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzc5ZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyCkBAIC0wLDAgKzEsNDEgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLW5mb3JjZTIKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIG5Gb3JjZTIgTUNQICAgICAgICAgICAgICAgIDEwZGU6MDA2NCAKKyAgKiBuRm9yY2UyIFVsdHJhIDQwMCBNQ1AgICAgICAxMGRlOjAwODQgCisgICogbkZvcmNlMyBQcm8xNTAgTUNQICAgICAgICAgMTBkZTowMEQ0IAorICAqIG5Gb3JjZTMgMjUwR2IgTUNQICAgICAgICAgIDEwZGU6MDBFNCAKKyAgKiBuRm9yY2U0IE1DUAkgICAgICAgCSAgICAgICAxMGRlOjAwNTIKKworRGF0YXNoZWV0OiBub3QgcHVibGljYWxseSBhdmFpbGFibGUsIGJ1dCBzZWVtcyB0byBiZSBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICBBTUQtODExMSBTTUJ1cyAyLjAgYWRhcHRlci4KKworQXV0aG9yczoKKwlIYW5zLUZyaWVkZXIgVm9ndCA8aGZ2b2d0QGFyY29yLmRlPiwgCisJVGhvbWFzIExlaWJvbGQgPHRob21hc0BwbHguY29tPiwgCisgICAgICAgIFBhdHJpY2sgRHJla2VyIDxwYXRyaWNrQGRyZWtlci5kZT4KKwkKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitpMmMtbmZvcmNlMiBpcyBhIGRyaXZlciBmb3IgdGhlIFNNQnVzZXMgaW5jbHVkZWQgaW4gdGhlIG5WaWRpYSBuRm9yY2UyIE1DUC4KKworSWYgeW91ciAnbHNwY2kgLXYnIGxpc3Rpbmcgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZywKKworMDA6MDEuMSBTTUJ1czogblZpZGlhIENvcnBvcmF0aW9uOiBVbmtub3duIGRldmljZSAwMDY0IChyZXYgYTIpCisgICAgICAgIFN1YnN5c3RlbTogQXN1c3RlayBDb21wdXRlciwgSW5jLjogVW5rbm93biBkZXZpY2UgMGMxMQorICAgICAgICBGbGFnczogNjZNaHosIGZhc3QgZGV2c2VsLCBJUlEgNQorICAgICAgICBJL08gcG9ydHMgYXQgYzAwMCBbc2l6ZT0zMl0KKyAgICAgICAgQ2FwYWJpbGl0aWVzOiA8YXZhaWxhYmxlIG9ubHkgdG8gcm9vdD4KKwordGhlbiB0aGlzIGRyaXZlciBzaG91bGQgc3VwcG9ydCB0aGUgU01CdXNlcyBvZiB5b3VyIG1vdGhlcmJvYXJkLgorCisKK05vdGVzCistLS0tLQorCitUaGUgU01CdXMgYWRhcHRlciBpbiB0aGUgbkZvcmNlMiBjaGlwc2V0IHNlZW1zIHRvIGJlIHZlcnkgc2ltaWxhciB0byB0aGUKK1NNQnVzIDIuMCBhZGFwdGVyIGluIHRoZSBBTUQtODExMSBzb3V0aGJyaWRnZS4gSG93ZXZlciwgSSBjb3VsZCBvbmx5IGdldAordGhlIGRyaXZlciB0byB3b3JrIHdpdGggZGlyZWN0IEkvTyBhY2Nlc3MsIHdoaWNoIGlzIGRpZmZlcmVudCB0byB0aGUgRUMKK2ludGVyZmFjZSBvZiB0aGUgQU1ELTgxMTEuIFRlc3RlZCBvbiBBc3VzIEE3TjhYLiBUaGUgQUNQSSBEU0RUIHRhYmxlIG9mIHRoZQorQXN1cyBBN044WCBsaXN0cyB0d28gU01CdXNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMWQwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQKQEAgLTAsMCArMSwxNTQgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXBhcnBvcnQKKworQXV0aG9yOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4gCisKK1RoaXMgaXMgYSB1bmlmaWVkIGRyaXZlciBmb3Igc2V2ZXJhbCBpMmMtb3Zlci1wYXJhbGxlbC1wb3J0IGFkYXB0ZXJzLAorc3VjaCBhcyB0aGUgb25lcyBtYWRlIGJ5IFBoaWxpcHMsIFZlbGxlbWFuIG9yIEVMVi4gVGhpcyBkcml2ZXIgaXMKK21lYW50IGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvbGRlciwgaW5kaXZpZHVhbCBkcml2ZXJzOgorICogaTJjLXBoaWxpcHMtcGFyCisgKiBpMmMtZWx2CisgKiBpMmMtdmVsbGVtYW4KKyAqIHZpZGVvL2kyYy1wYXJwb3J0IChOT1QgdGhlIHNhbWUgYXMgdGhpcyBvbmUsIGRlZGljYXRlZCB0byBob21lIGJyZXcKKyAgICAgICAgICAgICAgICAgICAgICB0ZWxldGV4dCBhZGFwdGVycykKKworSXQgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKyAqIFBoaWxpcHMgYWRhcHRlcgorICogaG9tZSBicmV3IHRlbGV0ZXh0IGFkYXB0ZXIKKyAqIFZlbGxlbWFuIEs4MDAwIGFkYXB0ZXIKKyAqIEVMViBhZGFwdGVyCisgKiBBbmFsb2cgRGV2aWNlcyBldmFsdWF0aW9uIGJvYXJkcyAoQURNMTAyNSwgQURNMTAzMCwgQURNMTAzMSwgQURNMTAzMikKKworVGhlc2UgZGV2aWNlcyB1c2UgZGlmZmVyZW50IHBpbm91dCBjb25maWd1cmF0aW9ucywgc28geW91IGhhdmUgdG8gdGVsbAordGhlIGRyaXZlciB3aGF0IHlvdSBoYXZlLCB1c2luZyB0aGUgdHlwZSBtb2R1bGUgcGFyYW1ldGVyLiBUaGVyZSBpcyBubword2F5IHRvIGF1dG9kZXRlY3QgdGhlIGRldmljZXMuIFN1cHBvcnQgZm9yIGRpZmZlcmVudCBwaW5vdXQgY29uZmlndXJhdGlvbnMKK2NhbiBiZSBlYXNpbHkgYWRkZWQgd2hlbiBuZWVkZWQuCisKKworQnVpbGRpbmcgeW91ciBvd24gYWRhcHRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBidWlsZCB5b3Ugb3duIGkyYy1vdmVyLXBhcmFsbGVsLXBvcnQgYWRhcHRlciwgaGVyZSBpcworYSBzYW1wbGUgZWxlY3Ryb25pY3Mgc2NoZW1hIChjcmVkaXRzIGdvIHRvIFN5bHZhaW4gTXVuYXV0KToKKworRGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEMKK1NpZGUgICAgICAgICAgX19fX19fX19fX19fX19fX19fX1ZkZCAoKykgICAgICAgICAgICAgICAgICAgIFNpZGUKKyAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgICAgLS0tICAtLS0gICAgICAgLS0tCisgICAgICAgICAgICAgIHwgfCAgfCB8ICAgICAgIHwgfAorICAgICAgICAgICAgICB8UnwgIHxSfCAgICAgICB8UnwKKyAgICAgICAgICAgICAgfCB8ICB8IHwgICAgICAgfCB8CisgICAgICAgICAgICAgIC0tLSAgLS0tICAgICAgIC0tLQorICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICB8ICAgIC98ICAgfAorU0NMICAtLS0tLS0tLS0teC0tLS0tLS0tbyB8LS0tLS0tLS0tLS14LS0tLS0tLS0tLS0tLS0tLS0tLSAgcGluIDIKKyAgICAgICAgICAgICAgICAgICAgfCAgICBcfCAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICB8XCAgICB8ICAgICAgIHwKK1NEQSAgLS0tLS0tLS0tLXgtLS0teC0tLXwgby0tLXgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIHBpbiAxMworICAgICAgICAgICAgICAgfCAgICAgICAgfC8gICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgICAvfCAgICAgICAgICAgfAorICAgICAgICAgICAgICAgLS0tLS0tLS0tbyB8LS0tLS0tLS0tLS0tLS0tLXgtLS0tLS0tLS0tLS0tLSAgcGluIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICBcfCAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8UnwgIHxSfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tICAtLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyAgIyMjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05EICBHTkQKKyAgICAgICAgCitSZW1hcmtzOgorIC0gVGhpcyBpcyB0aGUgZXhhY3QgcGlub3V0IGFuZCBlbGVjdHJvbmljcyB1c2VkIG9uIHRoZSBBbmFsb2cgRGV2aWNlcworICAgZXZhbHVhdGlvbiBib2FyZHMuCisgICAgICAgICAgICAgICAgICAgL3wKKyAtIEFsbCBpbnZlcnRlcnMgLW8gfC0gbXVzdCBiZSA3NEhDMDUsIHRoZXkgbXVzdCBiZSBvcGVuIGNvbGxlY3RvciBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgXHwKKyAtIEFsbCByZXNpdG9ycyBhcmUgMTBrLgorIC0gUGlucyAxOC0yNSBvZiB0aGUgcGFyYWxsZWwgcG9ydCBjb25uZWN0ZWQgdG8gR05ELgorIC0gUGlucyA0LTkgKEQyLUQ3KSBjb3VsZCBiZSB1c2VkIGFzIFZERCBpcyB0aGUgZHJpdmVyIGRyaXZlcyB0aGVtIGhpZ2guCisgICBUaGUgQURNMTAzMiBldmFsdWF0aW9uIGJvYXJkIHVzZXMgRDQtRDcuIEJld2FyZSB0aGF0IHRoZSBhbW91bnQgb2YKKyAgIGN1cnJlbnQgeW91IGNhbiBkcmF3IGZyb20gdGhlIHBhcmFsbGVsIHBvcnQgaXMgbGltaXRlZC4gQWxzbyBub3RlIHRoYXQKKyAgIGFsbCBjb25uZWN0ZWQgbGluZXMgTVVTVCBCRSBkcml2ZW4gYXQgdGhlIHNhbWUgc3RhdGUsIGVsc2UgeW91J2xsIHNob3J0CisgICBjaXJjdWl0IHRoZSBvdXRwdXQgYnVmZmVycyEgU28gcGx1Z2dpbmcgdGhlIEkyQyBhZGFwdGVyIGFmdGVyIGxvYWRpbmcKKyAgIHRoZSBpMmMtcGFycG9ydCBtb2R1bGUgbWlnaHQgYmUgYSBnb29kIHNhZmV0eSBzaW5jZSBkYXRhIGxpbmUgc3RhdGUKKyAgIHByaW9yIHRvIGluaXQgbWF5IGJlIHVua25vd24uIAorIC0gVGhpcyBpcyA1ViEKKyAtIE9idmlvdXNseSB5b3UgY2Fubm90IHJlYWQgU0NMIChzbyBpdCdzIG5vdCByZWFsbHkgc3RhbmRhcmQtY29tcGxpYW50KS4KKyAgIFByZXR0eSBlYXN5IHRvIGFkZCwganVzdCBjb3B5IHRoZSBTREEgcGFydCBhbmQgdXNlIGFub3RoZXIgaW5wdXQgcGluLgorICAgVGhhdCB3b3VsZCBnaXZlIChFTFYgY29tcGF0aWJsZSBwaW5vdXQpOgorCisKK0RldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDCitTaWRlICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1ZkZCAoKykgICAgICAgICBTaWRlCisgICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgLS0tICAtLS0gICAgICAgICAgLS0tICAtLS0KKyAgICAgICAgICAgICAgfCB8ICB8IHwgICAgICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgfFJ8ICB8UnwgICAgICAgICAgfFJ8ICB8UnwKKyAgICAgICAgICAgICAgfCB8ICB8IHwgICAgICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgLS0tICAtLS0gICAgICAgICAgLS0tICAtLS0KKyAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgfCAgICB8ICAgICAgfFwgICAgfCAgICB8CitTQ0wgIC0tLS0tLS0tLS14LS0tLS0tLS14LS18IG8tLS14LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBwaW4gMTUKKyAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwvICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgfCAgIC98ICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAtLS1vIHwtLS0tLS0tLS0tLS0teC0tLS0tLS0tLS0tLS0tICBwaW4gMgorICAgICAgICAgICAgICAgICAgICB8ICAgICAgIFx8ICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgfFwgICAgICAgICB8ICAgIHwKK1NEQSAgLS0tLS0tLS0tLS0tLS0teC0tLXgtLXwgby0tLS0tLS0teC0tLS0tLS0tLS0tLS0tLS0tLS0gIHBpbiAxMAorICAgICAgICAgICAgICAgICAgICAgICAgfCAgfC8gICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICB8ICAgL3wgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgLS0tbyB8LS0tLS0tLS0tLS0tLS0tLS0teC0tLS0tLS0tLSAgcGluIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcfCAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFJ8ICB8UnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0gIC0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyAgIyMjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTkQgIEdORAorCisKK0lmIHBvc3NpYmxlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBwaW5vdXQgY29uZmlndXJhdGlvbiBhcyBleGlzdGluZworYWRhcHRlcnMgZG8sIHNvIHlvdSB3b24ndCBldmVuIGhhdmUgdG8gY2hhbmdlIHRoZSBjb2RlLgorCisKK1NpbWlsYXIgKGJ1dCBkaWZmZXJlbnQpIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaXMgTk9UIHRoZSBzYW1lIGFzIHRoZSBpMmMtcHBvcnQgZHJpdmVyIGZvdW5kIGluIHRoZSBpMmMKK3BhY2thZ2UuIFRoZSBpMmMtcHBvcnQgZHJpdmVyIG1ha2VzIHVzZSBvZiBtb2Rlcm4gcGFyYWxsZWwgcG9ydCBmZWF0dXJlcyBzbwordGhhdCB5b3UgZG9uJ3QgbmVlZCBhZGRpdGlvbmFsIGVsZWN0cm9uaWNzLiBJdCBoYXMgb3RoZXIgcmVzdHJpY3Rpb25zCitob3dldmVyLCBhbmQgd2FzIG5vdCBwb3J0ZWQgdG8gTGludXggMi42ICh5ZXQpLgorCitUaGlzIGRyaXZlciBpcyBhbHNvIE5PVCB0aGUgc2FtZSBhcyB0aGUgaTJjLXBjZi1lcHAgZHJpdmVyIGZvdW5kIGluIHRoZQorbG1fc2Vuc29ycyBwYWNrYWdlLiBUaGUgaTJjLXBjZi1lcHAgZHJpdmVyIGRvZXNuJ3QgdXNlIHRoZSBwYXJhbGxlbCBwb3J0IGFzCithbiBJMkMgYnVzIGRpcmVjdGx5LiBJbnN0ZWFkLCBpdCB1c2VzIGl0IHRvIGNvbnRyb2wgYW4gZXh0ZXJuYWwgSTJDIGJ1cworbWFzdGVyLiBUaGF0IGRyaXZlciB3YXMgbm90IHBvcnRlZCB0byBMaW51eCAyLjYgKHlldCkgZWl0aGVyLgorCisKK0xlZ2FjeSBkb2N1bWVudGF0aW9uIGZvciBWZWxsZW1hbiBhZGFwdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2VmdWwgbGlua3M6CitWZWxsZW1hbiAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnZlbGxlbWFuLmJlLworVmVsbGVtYW4gSzgwMDAgSG93dG8gICAgaHR0cDovL2hvd3RvLmh0bHcxNi5hYy5hdC9rODAwMC1ob3d0by5odG1sCisKK1RoZSBwcm9qZWN0IGhhcyBsZWFkIHRvIG5ldyBsaWJzIGZvciB0aGUgVmVsbGVtYW4gSzgwMDAgYW5kIEs4MDA1OgorICBMSUJLODAwMCB2MS45OS4xIGFuZCBMSUJLODAwNSB2MC4yMQorV2l0aCB0aGVzZSBsaWJzLCB5b3UgY2FuIGNvbnRyb2wgdGhlIEs4MDAwIGludGVyZmFjZSBjYXJkIGFuZCB0aGUgSzgwMDUKK3N0ZXBwZXIgbW90b3IgY2FyZCB3aXRoIHRoZSBzaW1wbGUgY29tbWFuZHMgd2hpY2ggYXJlIGluIHRoZSBvcmlnaW5hbAorVmVsbGVtYW4gc29mdHdhcmUsIGxpa2UgU2V0SU9jaGFubmVsLCBSZWFkQURjaGFubmVsLCBTZW5kU3RlcENDV0Z1bGwgYW5kCittYW55IG1vcmUsIHVzaW5nIC9kZXYvdmVsbGVtYW4uCisgIGh0dHA6Ly9ob21lLndhbmFkb28ubmwvaGloaWhpL2xpYms4MDAwLmh0bQorICBodHRwOi8vaG9tZS53YW5hZG9vLm5sL2hpaGloaS9saWJrODAwNS5odG0KKyAgaHR0cDovL3N0cnV5dmUubWluZS5udTo4MDgwL2luZGV4LnBocD9ibG9jaz1rODAwMAorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYms4MDA1LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzQzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQKQEAgLTAsMCArMSwxMSBAQAorS2VybmVsIGRyaXZlciBpMmMtcGFycG9ydC1saWdodAorCitBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPiAKKworVGhpcyBkcml2ZXIgaXMgYSBsaWdodCB2ZXJzaW9uIG9mIGkyYy1wYXJwb3J0LiBJdCBkb2Vzbid0IGRlcGVuZCAgICAgICAgCitvbiB0aGUgcGFycG9ydCBkcml2ZXIsIGFuZCB1c2VzIGRpcmVjdCBJL08gYWNjZXNzIGluc3RlYWQuIFRoaXMgbWlnaHQgYmUKK3ByZWZlcmVkIG9uIGVtYmVkZGVkIHN5c3RlbXMgd2hlcmUgd2FzdGluZyBtZW1vcnkgZm9yIHRoZSBjbGVhbiBidXQgaGVhdnkKK3BhcnBvcnQgaGFuZGxpbmcgaXMgbm90IGFuIG9wdGlvbi4gVGhlIGRyYXdiYWNrIGlzIGEgcmVkdWNlZCBwb3J0YWJpbGl0eQorYW5kIHRoZSBpbXBvc3NpYmlsaXR5IHRvIGRhaXN5LWNoYWluIG90aGVyIHBhcmFsbGVsIHBvcnQgZGV2aWNlcy4gICAgICAgICAgICAgICAgIAorICAKK1BsZWFzZSBzZWUgaTJjLXBhcnBvcnQgZm9yIGRvY3VtZW50YXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjOGY0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYQpAQCAtMCwwICsxLDIzIEBACitLZXJuZWwgZHJpdmVyIGkyYy1wY2EtaXNhCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIElTQSBib2FyZHMgdXNpbmcgdGhlIFBoaWxpcHMgUENBIDk1NjQgCitQYXJhbGxlbCBidXMgdG8gSTJDIGJ1cyBjb250cm9sbGVyIAorCitBdXRob3I6IElhbiBDYW1wYmVsbCA8aWNhbXBiZWxsQGFyY29tLmNvbT4sIEFyY29tIENvbnRyb2wgU3lzdGVtcyAKKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogYmFzZSBpbnQKKyBJL08gYmFzZSBhZGRyZXNzCisqIGlycSBpbnQKKyBJUlEgaW50ZXJydXB0IAorKiBjbG9jayBpbnQgCisgQ2xvY2sgcmF0ZSBhcyBkZXNjcmliZWQgaW4gdGFibGUgMSBvZiBQQ0E5NTY0IGRhdGFzaGVldAorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgSVNBIGJvYXJkcyB1c2luZyB0aGUgUGhpbGlwcyBQQ0EgOTU2NCAKK1BhcmFsbGVsIGJ1cyB0byBJMkMgYnVzIGNvbnRyb2xsZXIgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTZiNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApAQCAtMCwwICsxLDcyIEBACitLZXJuZWwgZHJpdmVyIGkyYy1waWl4NAorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogSW50ZWwgODIzNzFBQiBQSUlYNCBhbmQgUElJWDRFCisgICogSW50ZWwgODI0NDNNWCAoNDQwTVgpCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEludGVsIHdlYnNpdGUKKyAgKiBTZXJ2ZXJXb3JrcyBPU0I0LCBDU0I1IGFuZCBDU0I2IHNvdXRoYnJpZGdlcworICAgIERhdGFzaGVldDogT25seSBhdmFpbGFibGUgdmlhIE5EQSBmcm9tIFNlcnZlcldvcmtzCisgICogU3RhbmRhcmQgTWljcm9zeXN0ZW1zIChTTVNDKSBTTEM5MEU2NiAoVmljdG9yeTY2KSBzb3V0aGJyaWRnZQorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBTTVNDIHdlYnNpdGUgaHR0cDovL3d3dy5zbXNjLmNvbQorCitBdXRob3JzOiAKKwlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+CisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPgorCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlOiBpbnQKKyAgRm9yY2libHkgZW5hYmxlIHRoZSBQSUlYNC4gREFOR0VST1VTIQorKiBmb3JjZV9hZGRyOiBpbnQKKyAgRm9yY2libHkgZW5hYmxlIHRoZSBQSUlYNCBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4gRVhUUkVNRUxZIERBTkdFUk9VUyEKKyogZml4X2hzdGNmZzogaW50CisgIEZpeCBjb25maWcgcmVnaXN0ZXIuIE5lZWRlZCBvbiBzb21lIGJvYXJkcyAoRm9yY2UgQ1BDSTczNSkuCisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBQSUlYNCAocHJvcGVybHkga25vd24gYXMgdGhlIDgyMzcxQUIpIGlzIGFuIEludGVsIGNoaXAgd2l0aCBhIGxvdCBvZgorZnVuY3Rpb25hbGl0eS4gQW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBpbXBsZW1lbnRzIHRoZSBQQ0kgYnVzLiBPbmUgb2YgaXRzCittaW5vciBmdW5jdGlvbnMgaXMgaW1wbGVtZW50aW5nIGEgU3lzdGVtIE1hbmFnZW1lbnQgQnVzLiBUaGlzIGlzIGEgdHJ1ZSAKK1NNQnVzIC0geW91IGNhbiBub3QgYWNjZXNzIGl0IG9uIEkyQyBsZXZlbHMuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBpdAorbmF0aXZlbHkgdW5kZXJzdGFuZHMgU01CdXMgY29tbWFuZHMgYW5kIHlvdSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAordGltaW5nIHByb2JsZW1zLiBUaGUgYmFkIG5ld3MgaXMgdGhhdCBub24tU01CdXMgZGV2aWNlcyBjb25uZWN0ZWQgdG8gaXQgY2FuCitjb25mdXNlIGl0IG1pZ2h0aWx5LiBZZXMsIHRoaXMgaXMga25vd24gdG8gaGFwcGVuLi4uCisKK0RvICdsc3BjaSAtdicgYW5kIHNlZSB3aGV0aGVyIGl0IGNvbnRhaW5zIGFuIGVudHJ5IGxpa2UgdGhpczoKKworMDAwMDowMDowMi4zIEJyaWRnZTogSW50ZWwgQ29ycC4gODIzNzFBQi9FQi9NQiBQSUlYNCBBQ1BJIChyZXYgMDIpCisJICAgICBGbGFnczogbWVkaXVtIGRldnNlbCwgSVJRIDkKKworQnVzIGFuZCBkZXZpY2UgbnVtYmVycyBtYXkgZGlmZmVyLCBidXQgdGhlIGZ1bmN0aW9uIG51bWJlciBtdXN0IGJlCitpZGVudGljYWwgKGxpa2UgbWFueSBQQ0kgZGV2aWNlcywgdGhlIFBJSVg0IGluY29ycG9yYXRlcyBhIG51bWJlciBvZgorZGlmZmVyZW50ICdmdW5jdGlvbnMnLCB3aGljaCBjYW4gYmUgY29uc2lkZXJlZCBhcyBzZXBhcmF0ZSBkZXZpY2VzKS4gSWYgeW91CitmaW5kIHN1Y2ggYW4gZW50cnksIHlvdSBoYXZlIGEgUElJWDQgU01CdXMgY29udHJvbGxlci4KKworT24gc29tZSBjb21wdXRlcnMgKG1vc3Qgbm90YWJseSwgc29tZSBEZWxscyksIHRoZSBTTUJ1cyBpcyBkaXNhYmxlZCBieQorZGVmYXVsdC4gSWYgeW91IHVzZSB0aGUgaW5zbW9kIHBhcmFtZXRlciAnZm9yY2U9MScsIHRoZSBrZXJuZWwgbW9kdWxlIHdpbGwKK3RyeSB0byBlbmFibGUgaXQuIFRISVMgSVMgVkVSWSBEQU5HRVJPVVMhIElmIHRoZSBCSU9TIGRpZCBub3Qgc2V0IHVwIGEKK2NvcnJlY3QgYWRkcmVzcyBmb3IgdGhpcyBtb2R1bGUsIHlvdSBjb3VsZCBnZXQgaW4gYmlnIHRyb3VibGUgKHJlYWQ6CitjcmFzaGVzLCBkYXRhIGNvcnJ1cHRpb24sIGV0Yy4pLiBUcnkgdGhpcyBvbmx5IGFzIGEgbGFzdCByZXNvcnQgKHRyeSBCSU9TCit1cGRhdGVzIGZpcnN0LCBmb3IgZXhhbXBsZSksIGFuZCBiYWNrdXAgZmlyc3QhIEFuIGV2ZW4gbW9yZSBkYW5nZXJvdXMKK29wdGlvbiBpcyAnZm9yY2VfYWRkcj08SU9QT1JUPicuIFRoaXMgd2lsbCBub3Qgb25seSBlbmFibGUgdGhlIFBJSVg0IGxpa2UKKydmb3JjZScgZm9lcywgYnV0IGl0IHdpbGwgYWxzbyBzZXQgYSBuZXcgYmFzZSBJL08gcG9ydCBhZGRyZXNzLiBUaGUgU01CdXMKK3BhcnRzIG9mIHRoZSBQSUlYNCBuZWVkcyBhIHJhbmdlIG9mIDggb2YgdGhlc2UgYWRkcmVzc2VzIHRvIGZ1bmN0aW9uCitjb3JyZWN0bHkuIElmIHRoZXNlIGFkZHJlc3NlcyBhcmUgYWxyZWFkeSByZXNlcnZlZCBieSBzb21lIG90aGVyIGRldmljZSwKK3lvdSB3aWxsIGdldCBpbnRvIGJpZyB0cm91YmxlISBET04nVCBVU0UgVEhJUyBJRiBZT1UgQVJFIE5PVCBWRVJZIFNVUkUKK0FCT1VUIFdIQVQgWU9VIEFSRSBET0lORyEKKworVGhlIFBJSVg0RSBpcyBqdXN0IGFuIG5ldyB2ZXJzaW9uIG9mIHRoZSBQSUlYNDsgaXQgaXMgc3VwcG9ydGVkIGFzIHdlbGwuCitUaGUgUElJWC9QSUlYMyBkb2VzIG5vdCBpbXBsZW1lbnQgYW4gU01CdXMgb3IgSTJDIGJ1cywgc28geW91IGNhbid0IHVzZQordGhpcyBkcml2ZXIgb24gdGhvc2UgbWFpbmJvYXJkcy4KKworVGhlIFNlcnZlcldvcmtzIFNvdXRoYnJpZGdlcywgdGhlIEludGVsIDQ0ME1YLCBhbmQgdGhlIFZpY3Rvcnk3NjYgYXJlCitpZGVudGljYWwgdG8gdGhlIFBJSVg0IGluIEkyQy9TTUJ1cyBzdXBwb3J0LgorCitBIGZldyBPU0I0IHNvdXRoYnJpZGdlcyBhcmUga25vd24gdG8gYmUgbWlzY29uZmlndXJlZCBieSB0aGUgQklPUy4gSW4gdGhpcworY2FzZSwgeW91IGhhdmUgeW91IHVzZSB0aGUgZml4X2hzdGNmZyBtb2R1bGUgcGFyYW1ldGVyLiBEbyBub3QgdXNlIGl0Cit1bmxlc3MgeW91IGtub3cgeW91IGhhdmUgdG8sIGJlY2F1c2UgaW4gc29tZSBjYXNlcyBpdCBhbHNvIGJyZWFrcworY29uZmlndXJhdGlvbiBvbiBzb3V0aGJyaWRnZXMgdGhhdCBkb24ndCBuZWVkIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM2ODc5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UKQEAgLTAsMCArMSwyMyBAQAorS2VybmVsIGRyaXZlciBpMmMtcHJvc2F2YWdlCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKwkKKwlTMy9WSUEgS00yNjYvVlQ4Mzc1IGFrYSBQcm9TYXZhZ2U4IAorCVMzL1ZJQSBLTTEzMy9WVDgzNjUgYWthIFNhdmFnZTQgCisKK0F1dGhvcjogSGVuayBWZXJnb25ldCA8aGVua0Bnb2QuZHluZG5zLm9yZz4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBTYXZhZ2U0IGNoaXBzIGNvbnRhaW4gdHdvIEkyQyBpbnRlcmZhY2VzIChha2EgYSBJMkMgJ21hc3Rlcicgb3IKKydob3N0JykuIAorCitUaGUgZmlyc3QgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIEREQyAoRGF0YSBEaXNwbGF5IENoYW5uZWwpIHdoaWNoIGlzIGEKK3NlcmlhbCBjaGFubmVsIHRocm91Z2ggdGhlIFZHQSBtb25pdG9yIGNvbm5lY3RvciB0byBhIEREQy1jb21wbGlhbnQKK21vbml0b3IuIFRoaXMgaW50ZXJmYWNlIGlzIGRlZmluZWQgYnkgdGhlIFZpZGVvIEVsZWN0cm9uaWNzIFN0YW5kYXJkcworQXNzb2NpYXRpb24gKFZFU0EpLiBUaGUgc3RhbmRhcmRzIGFyZSBhdmFpbGFibGUgZm9yIHB1cmNoYXNlIGF0CitodHRwOi8vd3d3LnZlc2Eub3JnIC4gVGhlIHNlY29uZCBpbnRlcmZhY2UgaXMgYSBnZW5lcmFsLXB1cnBvc2UgSTJDIGJ1cy4KKworVXNlZnVsbCBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIFRWIEVuY29kZXIgY2hpcHMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNjZWFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0CkBAIC0wLDAgKzEsMjYgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXNhdmFnZTQKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFNhdmFnZTQKKyAgKiBTYXZhZ2UyMDAwCisKK0F1dGhvcnM6IAorCUFsZXhhbmRlciBXb2xkIDxhd29sZEBiaWdmb290LmNvbT4sCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPiAKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBTYXZhZ2U0IGNoaXBzIGNvbnRhaW4gdHdvIEkyQyBpbnRlcmZhY2VzIChha2EgYSBJMkMgJ21hc3RlcicKK29yICdob3N0JykuIAorCitUaGUgZmlyc3QgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIEREQyAoRGF0YSBEaXNwbGF5IENoYW5uZWwpIHdoaWNoIGlzIGEKK3NlcmlhbCBjaGFubmVsIHRocm91Z2ggdGhlIFZHQSBtb25pdG9yIGNvbm5lY3RvciB0byBhIEREQy1jb21wbGlhbnQKK21vbml0b3IuIFRoaXMgaW50ZXJmYWNlIGlzIGRlZmluZWQgYnkgdGhlIFZpZGVvIEVsZWN0cm9uaWNzIFN0YW5kYXJkcworQXNzb2NpYXRpb24gKFZFU0EpLiBUaGUgc3RhbmRhcmRzIGFyZSBhdmFpbGFibGUgZm9yIHB1cmNoYXNlIGF0CitodHRwOi8vd3d3LnZlc2Eub3JnIC4gVGhlIEREQyBidXMgaXMgbm90IHlldCBzdXBwb3J0ZWQgYmVjYXVzZSBpdHMgcmVnaXN0ZXIKK2lzIG5vdCBkaXJlY3RseSBtZW1vcnktbWFwcGVkLgorCitUaGUgc2Vjb25kIGludGVyZmFjZSBpcyBhIGdlbmVyYWwtcHVycG9zZSBJMkMgYnVzLiBUaGlzIGlzIHRoZSBvbmx5CitpbnRlcmZhY2Ugc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgYXQgdGhlIG1vbWVudC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDdkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczU1OTUKQEAgLTAsMCArMSw1OSBAQAorS2VybmVsIGRyaXZlciBpMmMtc2lzNTU5NQorCitBdXRob3JzOiAKKwlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LAorICAgICAgICBNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+LAorCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4gCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKyAgKiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBDb3JwLiBTaVM1NTk1IFNvdXRoYnJpZGdlCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAuIHNpdGUuCisKK05vdGU6IGFsbCBoYXZlIG1mci4gSUQgMHgxMDM5LiAKKworICAgU1VQUE9SVEVEICAgICAgICAgICAgUENJIElEICAgICAgICAgICAKKyAgICAgICAgNTU5NSAgICAgICAgICAgIDAwMDggCisgCisgICBOb3RlOiB0aGVzZSBjaGlwcyBjb250YWluIGEgMDAwOCBkZXZpY2Ugd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIAorICAgICAgICAgNTU5NS4gV2UgcmVjb2duaXplIHRoZXNlIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUgbGlzdGVkIAorICAgICAgICAgImJsYWNrbGlzdCIgUENJIElEIGFuZCByZWZ1c2UgdG8gbG9hZC4gCisgCisgICBOT1QgU1VQUE9SVEVEICAgICAgICBQQ0kgSUQgICAgICAgICAgQkxBQ0tMSVNUIFBDSSBJRCAgICAgICAgIAorICAgICAgICAgNTQwICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA1NDAgCisgICAgICAgICA1NTAgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDU1MCAKKyAgICAgICAgNTUxMyAgICAgICAgICAgIDAwMDggICAgICAgICAgICA1NTExIAorICAgICAgICA1NTgxICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDU1OTcgCisgICAgICAgIDU1ODIgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgNTU5NyAKKyAgICAgICAgNTU5NyAgICAgICAgICAgIDAwMDggICAgICAgICAgICA1NTk3IAorICAgICAgICA1NTk4ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDU1OTcvNTU5OCAKKyAgICAgICAgIDYzMCAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNjMwIAorICAgICAgICAgNjQ1ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA2NDUgCisgICAgICAgICA2NDYgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDY0NiAKKyAgICAgICAgIDY0OCAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNjQ4IAorICAgICAgICAgNjUwICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA2NTAgCisgICAgICAgICA2NTEgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDY1MSAKKyAgICAgICAgIDczMCAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNzMwIAorICAgICAgICAgNzM1ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA3MzUgCisgICAgICAgICA3NDUgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDc0NSAKKyAgICAgICAgIDc0NiAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNzQ2IAorCitNb2R1bGUgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0KKworKiBmb3JjZV9hZGRyPTB4YWRkcglTZXQgdGhlIEkvTyBiYXNlIGFkZHJlc3MuIFVzZWZ1bCBmb3IgYm9hcmRzCisJCQl0aGF0IGRvbid0IHNldCB0aGUgYWRkcmVzcyBpbiB0aGUgQklPUy4gRG9lcyBub3QgZG8gYQorCQkJUENJIGZvcmNlOyB0aGUgZGV2aWNlIG11c3Qgc3RpbGwgYmUgcHJlc2VudCBpbiBsc3BjaS4KKwkJCURvbid0IHVzZSB0aGlzIHVubGVzcyB0aGUgZHJpdmVyIGNvbXBsYWlucyB0aGF0IHRoZQorCQkJYmFzZSBhZGRyZXNzIGlzIG5vdCBzZXQuCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitpMmMtc2lzNTU5NSBpcyBhIHRydWUgU01CdXMgaG9zdCBkcml2ZXIgZm9yIG1vdGhlcmJvYXJkcyB3aXRoIHRoZSBTaVM1NTk1Citzb3V0aGJyaWRnZXMuCisKK1dBUk5JTkc6IElmIHlvdSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgaW50ZWdyYXRlZCBzZW5zb3JzIG9uIHRoZSBTaVM1NTk1CitjaGlwLCB5b3Ugd2FudCB0aGUgc2lzNTU5NSBkcml2ZXIgZm9yIHRob3NlLCBub3QgdGhpcyBkcml2ZXIuIFRoaXMgZHJpdmVyCitpcyBhIEJVUyBkcml2ZXIsIG5vdCBhIENISVAgZHJpdmVyLiBBIEJVUyBkcml2ZXIgaXMgdXNlZCBieSBvdGhlciBDSElQCitkcml2ZXJzIHRvIGFjY2VzcyBjaGlwcyBvbiB0aGUgYnVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczYzMCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNjMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhY2E2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczYzMApAQCAtMCwwICsxLDQ5IEBACitLZXJuZWwgZHJpdmVyIGkyYy1zaXM2MzAKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAgKFNpUykKKwk2MzAgY2hpcHNldCAoRGF0YXNoZWV0OiBhdmFpbGFibGUgYXQgaHR0cDovL2FtYWx5c2guYmVpLnQtb25saW5lLmRlL2RvY3MvU0lTLykKKwk3MzAgY2hpcHNldAorICAqIFBvc3NpYmxlIG90aGVyIFNpUyBjaGlwc2V0cyA/CisKK0F1dGhvcjogQWxleGFuZGVyIE1hbHlzaCA8YW1hbHlzaEB3ZWIuZGU+CisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlID0gWzF8MF0gRm9yY2libHkgZW5hYmxlIHRoZSBTSVM2MzAuIERBTkdFUk9VUyEKKwkJVGhpcyBjYW4gYmUgaW50ZXJlc3RpbmcgZm9yIGNoaXBzZXRzIG5vdCBuYW1lZAorCQlhYm92ZSB0byBjaGVjayBpZiBpdCB3b3JrcyBmb3IgeW91IGNoaXBzZXQsIGJ1dCBEQU5HRVJPVVMhCisJCQorKiBoaWdoX2Nsb2NrID0gWzF8MF0gRm9yY2libHkgc2V0IEhvc3QgTWFzdGVyIENsb2NrIHRvIDU2S0h6IChkZWZhdWx0LCAKKwkJCXdoYXQgeW91ciBCSU9TIHVzZSkuIERBTkdFUk9VUyEgVGhpcyBzaG91bGQgYmUgYSBiaXQgCisJCQlmYXN0ZXIsIGJ1dCBmcmVlemUgc29tZSBzeXN0ZW1zIChpLmUuIG15IExhcHRvcCkuCisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgU01CdXMgb25seSBkcml2ZXIgaXMga25vd24gdG8gd29yayBvbiBtb3RoZXJib2FyZHMgd2l0aCB0aGUgYWJvdmUKK25hbWVkIGNoaXBzZXRzLgorCitJZiB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKzAwOjAwLjAgSG9zdCBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIDYzMCBIb3N0IChyZXYgMzEpCiswMDowMS4wIElTQSBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIDg1QzUwMy81NTEzCisKK29yIGxpa2UgdGhpczoKKworMDA6MDAuMCBIb3N0IGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU10gNzMwIEhvc3QgKHJldiAwMikKKzAwOjAxLjAgSVNBIGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU10gODVDNTAzLzU1MTMKKworaW4geW91ciAnbHNwY2knIG91dHB1dCAsIHRoZW4gdGhpcyBkcml2ZXIgaXMgZm9yIHlvdXIgY2hpcHNldC4KKworVGhhbmsgWW91CistLS0tLS0tLS0KK1BoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4KKy0gdGVzdGluZyBTaVM3MzAgc3VwcG9ydAorTWFyayBNLiBIb2ZmbWFuIDxtaG9mZm1hbkBsaWdodGxpbmsuY29tPgorLSBidWcgZml4ZXMKKyAKK1RvIGFueW9uZSBlbHNlIHdoaWNoIEkgZm9yZ290IGhlcmUgOyksIHRoYW5rcyEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM2OXggYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczY5eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmU0ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM2OXgKQEAgLTAsMCArMSw3MyBAQAorS2VybmVsIGRyaXZlciBpMmMtc2lzOTZ4CisKK1JlcGxhY2VzIDIuNC54IGkyYy1zaXM2NDUKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAgKFNpUykKKyAgICBBbnkgY29tYmluYXRpb24gb2YgdGhlc2UgaG9zdCBicmlkZ2VzOgorCTY0NSwgNjQ1RFggKGFrYSA2NDYpLCA2NDgsIDY1MCwgNjUxLCA2NTUsIDczNSwgNzQ1LCA3NDYKKyAgICBhbmQgdGhlc2Ugc291dGggYnJpZGdlczoKKyAgICAJOTYxLCA5NjIsIDk2MyhMKSAKKworQXV0aG9yOiBNYXJrIE0uIEhvZmZtYW4gPG1ob2ZmbWFuQGxpZ2h0bGluay5jb20+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIFNNQnVzIG9ubHkgZHJpdmVyIGlzIGtub3duIHRvIHdvcmsgb24gbW90aGVyYm9hcmRzIHdpdGggdGhlIGFib3ZlCituYW1lZCBjaGlwc2V0IGNvbWJpbmF0aW9ucy4gVGhlIGRyaXZlciB3YXMgZGV2ZWxvcGVkIHdpdGhvdXQgYmVuZWZpdCBvZiBhCitwcm9wZXIgZGF0YXNoZWV0IGZyb20gU2lTLiBUaGUgU01CdXMgcmVnaXN0ZXJzIGFyZSBhc3N1bWVkIGNvbXBhdGlibGUgd2l0aAordGhvc2Ugb2YgdGhlIFNpUzYzMCwgYWx0aG91Z2ggdGhleSBhcmUgbG9jYXRlZCBpbiBhIGNvbXBsZXRlbHkgZGlmZmVyZW50CitwbGFjZS4gVGhhbmtzIHRvIEFsZXhhbmRlciBNYWx5c2ggPGFtYWx5c2hAd2ViLmRlPiBmb3IgcHJvdmlkaW5nIHRoZQorU2lTNjMwIGRhdGFzaGVldCAoYW5kICBkcml2ZXIpLgorCitUaGUgY29tbWFuZCAibHNwY2kiIGFzIHJvb3Qgc2hvdWxkIHByb2R1Y2Ugc29tZXRoaW5nIGxpa2UgdGhlc2UgbGluZXM6CisKKzAwOjAwLjAgSG9zdCBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdOiBVbmtub3duIGRldmljZSAwNjQ1CiswMDowMi4wIElTQSBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIDg1QzUwMy81NTEzCiswMDowMi4xIFNNQnVzOiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXTogVW5rbm93biBkZXZpY2UgMDAxNgorCitvciBwZXJoYXBzIHRoaXMuLi4KKworMDA6MDAuMCBIb3N0IGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU106IFVua25vd24gZGV2aWNlIDA2NDUgCiswMDowMi4wIElTQSBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdOiBVbmtub3duIGRldmljZSAwOTYxCiswMDowMi4xIFNNQnVzOiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXTogVW5rbm93biBkZXZpY2UgMDAxNgorCisoa2VybmVsIHZlcnNpb25zIGxhdGVyIHRoYW4gMi40LjE4IG1heSBmaWxsIGluIHRoZSAiVW5rbm93biJzKQorCitJZiB5b3UgY2FudCBzZWUgaXQgcGxlYXNlIGxvb2sgb24gcXVpcmtfc2lzXzk2eF9zbWJ1cworKGRyaXZlcnMvcGNpL3F1aXJrcy5jKSAoYWxzbyBpZiBzb3V0aGJyaWRnZSBkZXRlY3Rpb24gZmFpbHMpCisKK0kgc3VzcGVjdCB0aGF0IHRoaXMgZHJpdmVyIGNvdWxkIGJlIG1hZGUgdG8gd29yayBmb3IgdGhlIGZvbGxvd2luZyBTaVMKK2NoaXBzZXRzIGFzIHdlbGw6IDYzNSwgYW5kIDYzNVQuIElmIGFueW9uZSBvd25zIGEgYm9hcmQgd2l0aCB0aG9zZSBjaGlwcworQU5EIGlzIHdpbGxpbmcgdG8gcmlzayBjcmFzaGluZyAmIGJ1cm5pbmcgYW4gb3RoZXJ3aXNlIHdlbGwtYmVoYXZlZCBrZXJuZWwKK2luIHRoZSBuYW1lIG9mIHByb2dyZXNzLi4uIHBsZWFzZSBjb250YWN0IG1lIGF0IDxtaG9mZm1hbkBsaWdodGxpbmsuY29tPiBvcgordmlhIHRoZSBwcm9qZWN0J3MgbWFpbGluZyBsaXN0OiA8c2Vuc29yc0BzdGltcHkubmV0cm9lZGdlLmNvbT4uICBQbGVhc2UKK3NlbmQgYnVnIHJlcG9ydHMgYW5kL29yIHN1Y2Nlc3Mgc3RvcmllcyBhcyB3ZWxsLgorCisKK1RPIERPcworLS0tLS0tCisKKyogVGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IFNNQnVzIGJsb2NrIHJlYWRzL3dyaXRlczsgSSBtYXkgYWRkIHRoZW0gaWYgYQorc2NlbmFyaW8gaXMgZm91bmQgd2hlcmUgdGhleSdyZSBuZWVkZWQuCisKKworVGhhbmsgWW91CistLS0tLS0tLS0KKworTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorIC0gZGVzaWduIGhpbnRzIGFuZCBidWcgZml4ZXMKK0FsZXhhbmRlciBNYXlsc2ggPGFtYWx5c2hAd2ViLmRlPgorIC0gZGl0dG8sIHBsdXMgYW4gaW1wb3J0YW50IGRhdGFzaGVldC4uLiBhbG1vc3QgdGhlIG9uZSBJIHJlYWxseSB3YW50ZWQKK0hhbnMtR/xudGVyIEz8dGtlIFVwaHVlcyA8aGdfbHVAdC1vbmxpbmUuZGU+CisgLSBwYXRjaCBmb3IgU2lTNzM1CitSb2JlcnQgWndlcnVzIDxhcnppZUBkZHMubmw+CisgLSB0ZXN0aW5nIGZvciBTaVM2NDVEWAorS2lhbnVzY2ggU2F5YWggS2FyYWRqaSA8a2lhbnVzY2hAc2stdGVjaC5uZXQ+CisgLSBwYXRjaCBmb3IgU2lTNjQ1RFgvOTYyCitLZW4gSGVhbHkKKyAtIHBhdGNoIGZvciBTaVM2NTUKKworVG8gYW55b25lIGVsc2Ugd2hvIGhhcyB3cml0dGVuIHcvIGZlZWRiYWNrLCB0aGFua3MhCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlZGZlMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhCkBAIC0wLDAgKzEsMzQgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXZpYQorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogVklBIFRlY2hub2xvZ2llcywgSW5DLiBWVDgyQzU4NkIKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVklBIHdlYnNpdGUKKworQXV0aG9yOiBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK2kyYy12aWEgaXMgYW4gaTJjIGJ1cyBkcml2ZXIgZm9yIG1vdGhlcmJvYXJkcyB3aXRoIFZJQSBjaGlwc2V0LgorCitUaGUgZm9sbG93aW5nIFZJQSBwY2kgY2hpcHNldHMgYXJlIHN1cHBvcnRlZDoKKyAtIE1WUDMsIFZQMywgVlAyLzk3LCBWUFgvOTcgCisgLSBvdGhlcnMgd2l0aCBTb3V0aCBicmlkZ2UgVlQ4MkM1ODZCCisKK1lvdXIgbHNwY2kgbGlzdGluZyBtdXN0IHNob3cgdGhpcyA6CisKKyBCcmlkZ2U6IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MkM1ODZCIEFDUEkgKHJldiAxMCkKKworICAgIFByb2JsZW1zPworIAorIFE6IFlvdSBoYXZlIFZUODJDNTg2QiBvbiB0aGUgbW90aGVyYm9hcmQsIGJ1dCBub3QgaW4gdGhlIGxpc3RpbmcuIAorIAorIEE6IEdvIHRvIHlvdXIgQklPUyBzZXR1cCwgc2VjdGlvbiBQQ0kgZGV2aWNlcyBvciBzaW1pbGFyLgorICAgIFR1cm4gVVNCIHN1cHBvcnQgb24sIGFuZCB0cnkgYWdhaW4uIAorCisgUTogTm8gZXJyb3IgbWVzc2FnZXMsIGJ1dCBzdGlsbCBpMmMgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisKKyBBOiBUaGlzIGNhbiBoYXBwZW4uIFRoaXMgZHJpdmVyIHVzZXMgdGhlIHBpbnMgVklBIHJlY29tbWVuZHMgaW4gdGhlaXIKKyAgICBkYXRhc2hlZXRzLCBidXQgdGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0aGUgbW90aGVyYm9hcmQgbWFudWZhY3R1cmVyCisgICAgY2FuIGFjdHVhbGx5IHdpcmUgdGhlIGxpbmVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXZpYXBybyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMmY1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXZpYXBybwpAQCAtMCwwICsxLDQ3IEBACitLZXJuZWwgZHJpdmVyIGkyYy12aWFwcm8KKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MkM1OTZBL0IKKyAgICBEYXRhc2hlZXQ6IFNvbWV0aW1lcyBhdmFpbGFibGUgYXQgdGhlIFZJQSB3ZWJzaXRlCisKKyAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIFZUODJDNjg2QS9CIAorICAgIERhdGFzaGVldDogU29tZXRpbWVzIGF2YWlsYWJsZSBhdCB0aGUgVklBIHdlYnNpdGUKKworICAqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MjMxLCBWVDgyMzMsIFZUODIzM0EsIFZUODIzNSwgVlQ4MjM3CisgICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gcmVxdWVzdCBmcm9tIFZpYQorCitBdXRob3JzOgorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sICAKKwlQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LCAKKwlLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4sIAorCU1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4gCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlOiBpbnQKKyAgRm9yY2libHkgZW5hYmxlIHRoZSBTTUJ1cyBjb250cm9sbGVyLiBEQU5HRVJPVVMhCisqIGZvcmNlX2FkZHI6IGludAorICBGb3JjaWJseSBlbmFibGUgdGhlIFNNQnVzIGF0IHRoZSBnaXZlbiBhZGRyZXNzLiBFWFRSRU1FTFkgREFOR0VST1VTIQorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworaTJjLXZpYXBybyBpcyBhIHRydWUgU01CdXMgaG9zdCBkcml2ZXIgZm9yIG1vdGhlcmJvYXJkcyB3aXRoIG9uZSBvZiB0aGUKK3N1cHBvcnRlZCBWSUEgc291dGhicmlkZ2VzLgorCitZb3VyIGxzcGNpIC1uIGxpc3RpbmcgbXVzdCBzaG93IG9uZSBvZiB0aGVzZSA6CisKKyBkZXZpY2UgMTEwNjozMDUwICAgKFZUODJDNTk2IGZ1bmN0aW9uIDMpCisgZGV2aWNlIDExMDY6MzA1MSAgIChWVDgyQzU5NiBmdW5jdGlvbiAzKQorIGRldmljZSAxMTA2OjMwNTcgICAoVlQ4MkM2ODYgZnVuY3Rpb24gNCkKKyBkZXZpY2UgMTEwNjozMDc0ICAgKFZUODIzMykKKyBkZXZpY2UgMTEwNjozMTQ3ICAgKFZUODIzM0EpCisgZGV2aWNlIDExMDY6ODIzNSAgIChWVDgyMzEpCisgZGV2aWRlIDExMDY6MzE3NyAgIChWVDgyMzUpCisgZGV2aWRlIDExMDY6MzIyNyAgIChWVDgyMzcpCisKK0lmIG5vbmUgb2YgdGhlc2Ugc2hvdyB1cCwgeW91IHNob3VsZCBsb29rIGluIHRoZSBCSU9TIGZvciBzZXR0aW5ncyBsaWtlCitlbmFibGUgQUNQSSAvIFNNQnVzIG9yIGV2ZW4gVVNCLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQ5MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12b29kb28zCkBAIC0wLDAgKzEsNjIgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXZvb2RvbzMKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIDNkZnggVm9vZG9vMyBiYXNlZCBjYXJkcworICAqIFZvb2RvbyBCYW5zaGVlIGJhc2VkIGNhcmRzCisKK0F1dGhvcnM6IAorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIAorCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sIAorCVJhbHBoIE1ldHpsZXIgPHJqa21AdGhwLnVuaS1rb2Vsbi5kZT4sCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorCitNYWluIGNvbnRhY3Q6IFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4KKwkKK1RoZSBjb2RlIGlzIGJhc2VkIHVwb24gUmFscGgncyB0ZXN0IGNvZGUgKGhlIGRpZCB0aGUgaGFyZCBzdHVmZiA7JykKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSAzZGZ4IFZvb2RvbzMgY2hpcCBjb250YWlucyB0d28gSTJDIGludGVyZmFjZXMgKGFrYSBhIEkyQyAnbWFzdGVyJyBvcgorJ2hvc3QnKS4gCisKK1RoZSBmaXJzdCBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgRERDIChEYXRhIERpc3BsYXkgQ2hhbm5lbCkgd2hpY2ggaXMgYQorc2VyaWFsIGNoYW5uZWwgdGhyb3VnaCB0aGUgVkdBIG1vbml0b3IgY29ubmVjdG9yIHRvIGEgRERDLWNvbXBsaWFudAorbW9uaXRvci4gVGhpcyBpbnRlcmZhY2UgaXMgZGVmaW5lZCBieSB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzCitBc3NvY2lhdGlvbiAoVkVTQSkuIFRoZSBzdGFuZGFyZHMgYXJlIGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UgYXQKK2h0dHA6Ly93d3cudmVzYS5vcmcgLgorCitUaGUgc2Vjb25kIGludGVyZmFjZSBpcyBhIGdlbmVyYWwtcHVycG9zZSBJMkMgYnVzLiBUaGUgaW50ZW50IGJ5IDNkZnggd2FzCit0byBhbGxvdyBtYW51ZmFjdHVyZXJzIHRvIGFkZCBleHRyYSBjaGlwcyB0byB0aGUgdmlkZW8gY2FyZCBzdWNoIGFzIGEKK1RWLW91dCBjaGlwIHN1Y2ggYXMgdGhlIEJUODY5IG9yIHBvc3NpYmx5IGV2ZW4gSTJDIGJhc2VkIHRlbXBlcmF0dXJlCitzZW5zb3JzIGxpa2UgdGhlIEFETTEwMjEgb3IgTE03NS4KKworU3RhYmlsaXR5CistLS0tLS0tLS0KKworU2VlbXMgdG8gYmUgc3RhYmxlIG9uIHRoZSB0ZXN0IG1hY2hpbmUsIGJ1dCBuZWVkcyBtb3JlIHRlc3Rpbmcgb24gb3RoZXIKK21hY2hpbmVzLiBTaW11bHRhbmVvdXMgYWNjZXNzZXMgb2YgdGhlIEREQyBhbmQgSTJDIGJ1c3NlcyBtYXkgY2F1c2UgZXJyb3JzLgorCitTdXBwb3J0ZWQgRGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0KKworU3BlY2lmaWNhbGx5LCB0aGlzIGRyaXZlciB3YXMgd3JpdHRlbiBhbmQgdGVzdGVkIG9uIHRoZSAnM2RmeCBWb29kb28zIEFHUAorMzAwMCcgd2hpY2ggaGFzIGEgdHYtb3V0IGZlYXR1cmUgKHMtdmlkZW8gb3IgY29tcG9zaXRlKS4gIEFjY29yZGluZyB0byB0aGUKK2RvY3MgYW5kIGRpc2N1c3Npb25zLCB0aGlzIGNvZGUgc2hvdWxkIHdvcmsgZm9yIGFueSBWb29kb28zIGJhc2VkIGNhcmRzIGFzCit3ZWxsIGFzIFZvb2RvbyBCYW5zaGVlIGJhc2VkIGNhcmRzLiAgVGhlIEREQyBpbnRlcmZhY2UgaGFzIGJlZW4gdGVzdGVkIG9uIGEKK1Zvb2RvbyBCYW5zaGVlIGNhcmQuCisJCitJc3N1ZXMKKy0tLS0tLQorCitQcm9iYWJseSBtYW55LCBidXQgaXQgc2VlbXMgdG8gd29yayBPSyBvbiBteSBzeXN0ZW0uIDonKQorCisKK0V4dGVybmFsIERldmljZSBDb25uZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGlnaXRhbCB2aWRlbyBpbnB1dCBqdW1wZXJzIGdpdmUgYXZhaWxhYmlsaXR5IHRvIHRoZSBJMkMgYnVzLiAKK1NwZWNpZmljYWxseSwgcGlucyAxMyBhbmQgMjUgKGJvdHRvbSByb3cgbWlkZGxlLCBhbmQgYm90dG9tIHJpZ2h0LWVuZCkgYXJlICAgICAKK3RoZSBJMkMgY2xvY2sgYW5kIEkyQyBkYXRhIGxpbmVzLCByZXNwZWN0aXZlbHkuICs1ViBhbmQgR05EIGFyZSBwcm9iYWJseQorYWxzbyBlYXNpbHkgYXZhaWxhYmxlIG1ha2luZyB0aGUgYWRkaXRpb24gb2YgZXh0cmEgSTJDL1NNQnVzIGRldmljZXMgZWFzeQordG8gaW1wbGVtZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL3NjeDIwMF9hY2IgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvc2N4MjAwX2FjYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGM4Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL3NjeDIwMF9hY2IKQEAgLTAsMCArMSwxNCBAQAorS2VybmVsIGRyaXZlciBzY3gyMDBfYWNiCisKK0F1dGhvcjogQ2hyaXN0ZXIgV2VpbmlnZWwgPHdpbmdlbEBuYW5vLXN5c3RlbS5jb20+CisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGJhc2U6IGludAorICBCYXNlIGFkZHJlc3NlcyBmb3IgdGhlIEFDQ0VTUy5idXMgY29udHJvbGxlcnMKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK0VuYWJsZSB0aGUgdXNlIG9mIHRoZSBBQ0NFU1MuYnVzIGNvbnRyb2xsZXJzIG9mIGEgU0N4MjAwIHByb2Nlc3Nvci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3Ntc2M0N2IzOTcudHh0IGIvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvc21zYzQ3YjM5Ny50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5ZWRhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3Ntc2M0N2IzOTcudHh0CkBAIC0wLDAgKzEsMTQ2IEBACitOb3ZlbWJlciAyMywgMjAwNAorCitUaGUgZm9sbG93aW5nIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHRoZSBTTVNDIExQQzQ3QjM5Ny1OQyBzZW5zb3IgY2hpcAorKGZvciB3aGljaCB0aGVyZSBpcyBubyBwdWJsaWMgZGF0YXNoZWV0IGF2YWlsYWJsZSkuICBUaGlzIGRvY3VtZW50IHdhcworcHJvdmlkZWQgYnkgQ3JhaWcgS2VsbHkgKEluLVN0b3JlIEJyb2FkY2FzdCBOZXR3b3JrKSBhbmQgZWRpdGVkL2NvcnJlY3RlZAorYnkgTWFyayBNLiBIb2ZmbWFuIDxtaG9mZm1hbkBsaWdodGxpbmsuY29tPi4KKworKiAqICogKiAqCisKK01ldGhvZHMgZm9yIGRldGVjdGluZyB0aGUgSFAgU0lPIGFuZCByZWFkaW5nIHRoZSB0aGVybWFsIGRhdGEgb24gYSBkYzcxMDAuCisKK1RoZSB0aGVybWFsIGluZm9ybWF0aW9uIG9uIHRoZSBkYzcxMDAgaXMgY29udGFpbmVkIGluIHRoZSBTSU8gSGFyZHdhcmUgTW9uaXRvcgorKEhXTSkuICBUaGUgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgdGhyb3VnaCBhbiBpbmRleC9kYXRhIHBhaXIuICBUaGUgaW5kZXgvZGF0YQorcGFpciBpcyBsb2NhdGVkIGF0IHRoZSBIV00gQmFzZSBBZGRyZXNzICsgMCBhbmQgdGhlIEhXTSBCYXNlIEFkZHJlc3MgKyAxLiAgVGhlCitIV00gQmFzZSBhZGRyZXNzIGNhbiBiZSBvYnRhaW5lZCBmcm9tIExvZ2ljYWwgRGV2aWNlIDgsIHJlZ2lzdGVycyAweDYwIChNU0IpCithbmQgMHg2MSAoTFNCKS4gIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgMHg0ODAgZm9yIHRoZSBIV00gQmFzZSBBZGRyZXNzIGFuZAorMHg0ODAgYW5kIDB4NDgxIGZvciB0aGUgaW5kZXgvZGF0YSBwYWlyLgorCitSZWFkaW5nIHRlbXBlcmF0dXJlIGluZm9ybWF0aW9uLgorVGhlIHRlbXBlcmF0dXJlIGluZm9ybWF0aW9uIGlzIGxvY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyByZWdpc3RlcnM6CitUZW1wMQkJMHgyNQkoQ3VycmVudGx5LCB0aGlzIHJlZmxlY3RzIHRoZSBDUFUgdGVtcCBvbiBhbGwgc3lzdGVtcykuCitUZW1wMgkJMHgyNgorVGVtcDMJCTB4MjcKK1RlbXA0CQkweDgwCisKK1Byb2dyYW1taW5nIEV4YW1wbGUKK1RoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcmVhZCB0aGUgSFdNIHRlbXBlcmF0dXJlIHJlZ2lzdGVyczoKK01PVglEWCw0ODBICitNT1YJQVgsMjVICitPVVQJRFgsQUwKK01PVglEWCw0ODFICitJTglBTCxEWAorCitBTCBjb250YWlucyB0aGUgZGF0YSBpbiBoZXgsIHRoZSB0ZW1wZXJhdHVyZSBpbiBDZWxzaXVzIGlzIHRoZSBkZWNpbWFsCitlcXVpdmFsZW50LgorCitFeDogSWYgQUwgY29udGFpbnMgMHgyQSwgdGhlIHRlbXBlcmF0dXJlIGlzIDQyIGRlZ3JlZXMgQy4KKworUmVhZGluZyB0YWNoIGluZm9ybWF0aW9uLgorVGhlIGZhbiBzcGVlZCBpbmZvcm1hdGlvbiBpcyBsb2NhdGVkIGluIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzOgorCQlMU0IJTVNCCitUYWNoMQkJMHgyOAkweDI5CShDdXJyZW50bHksIHRoaXMgcmVmbGVjdHMgdGhlIENQVQorCQkJCWZhbiBzcGVlZCBvbiBhbGwgc3lzdGVtcykuCitUYWNoMgkJMHgyQQkweDJCCitUYWNoMwkJMHgyQwkweDJECitUYWNoNAkJMHgyRQkweDJGCisKK0ltcG9ydGFudCEhIQorUmVhZGluZyB0aGUgdGFjaCBMU0IgbG9ja3MgdGhlIHRhY2ggTVNCLgorVGhlIExTQiBNdXN0IGJlIHJlYWQgZmlyc3QuCisKK0hvdyB0byBjb252ZXJ0IHRoZSB0YWNoIHJlYWRpbmcgdG8gUlBNLgorVGhlIHRhY2ggcmVhZGluZyAoVENvdW50KSBpcyBnaXZlbiBieTogIChUYWNoIE1TQiAqIDI1NikgKyAoVGFjaCBMU0IpCitUaGUgU0lPIGNvdW50cyB0aGUgbnVtYmVyIG9mIDkwa0h6ICgxMS4xMTF1cykgcHVsc2VzIHBlciByZXZvbHV0aW9uLgorUlBNID0gNjAvKFRDb3VudCAqIDExLjExMXVzKQorCitFeGFtcGxlOgorUmVnIDB4MjggPSAweDlCCitSZWcgMHgyOSA9IDB4MDgKKworVENvdW50ID0gMHg4OUIgPSAyMjAzCisKK1JQTSA9IDYwIC8gKDIyMDMgKiAxMS4xMTExMSBFLTYpID0gMjQ1MSBSUE0KKworT2J0YWluaW5nIHRoZSBTSU8gdmVyc2lvbi4KKworQ09ORklHVVJBVElPTiBTRVFVRU5DRQorVG8gcHJvZ3JhbSB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlcnMsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgbXVzdCBiZSBmb2xsb3dlZDoKKzEuIEVudGVyIENvbmZpZ3VyYXRpb24gTW9kZQorMi4gQ29uZmlndXJlIHRoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycworMy4gRXhpdCBDb25maWd1cmF0aW9uIE1vZGUuCisKK0VudGVyIENvbmZpZ3VyYXRpb24gTW9kZQorVG8gcGxhY2UgdGhlIGNoaXAgaW50byB0aGUgQ29uZmlndXJhdGlvbiBTdGF0ZSBUaGUgY29uZmlnIGtleSAoMHg1NSkgaXMgd3JpdHRlbgordG8gdGhlIENPTkZJRyBQT1JUICgweDJFKS4gCisKK0NvbmZpZ3VyYXRpb24gTW9kZQorSW4gY29uZmlndXJhdGlvbiBtb2RlLCB0aGUgSU5ERVggUE9SVCBpcyBsb2NhdGVkIGF0IHRoZSBDT05GSUcgUE9SVCBhZGRyZXNzIGFuZAordGhlIERBVEEgUE9SVCBpcyBhdCBJTkRFWCBQT1JUIGFkZHJlc3MgKyAxLgorCitUaGUgZGVzaXJlZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgaW4gdHdvIHN0ZXBzOiAKK2EuCVdyaXRlIHRoZSBpbmRleCBvZiB0aGUgTG9naWNhbCBEZXZpY2UgTnVtYmVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwkoaS5lLiwgMHgwNykgdG8gdGhlIElOREVYIFBPUlQgYW5kIHRoZW4gd3JpdGUgdGhlIG51bWJlciBvZiB0aGUKKwlkZXNpcmVkIGxvZ2ljYWwgZGV2aWNlIHRvIHRoZSBEQVRBIFBPUlQuCisKK2IuCVdyaXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd2l0aGluIHRoZQorCWxvZ2ljYWwgZGV2aWNlIHRvIHRoZSBJTkRFWCBQT1JUIGFuZCB0aGVuIHdyaXRlIG9yIHJlYWQgdGhlIGNvbmZpZy0KKwl1cmF0aW9uIHJlZ2lzdGVyIHRocm91Z2ggdGhlIERBVEEgUE9SVC4gIAorCitOb3RlOiBJZiBhY2Nlc3NpbmcgdGhlIEdsb2JhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycywgc3RlcCAoYSkgaXMgbm90IHJlcXVpcmVkLgorCitFeGl0IENvbmZpZ3VyYXRpb24gTW9kZQorVG8gZXhpdCB0aGUgQ29uZmlndXJhdGlvbiBTdGF0ZSB0aGUgd3JpdGUgMHhBQSB0byB0aGUgQ09ORklHIFBPUlQgKDB4MkUpLgorVGhlIGNoaXAgcmV0dXJucyB0byB0aGUgUlVOIFN0YXRlLiAgKFRoaXMgaXMgaW1wb3J0YW50KS4KKworUHJvZ3JhbW1pbmcgRXhhbXBsZQorVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byByZWFkIHRoZSBTSU8gRGV2aWNlIElEIGxvY2F0ZWQgYXQgMHgyMAorCis7IEVOVEVSIENPTkZJR1VSQVRJT04gTU9ERSAgIAorTU9WCURYLDAyRUgKK01PVglBWCwwNTVICitPVVQJRFgsQUwKKzsgR0xPQkFMIENPTkZJR1VSQVRJT04gIFJFR0lTVEVSIAorTU9WCURYLDAyRUgKK01PVglBTCwyMEgKK09VVAlEWCxBTCAKKzsgUkVBRCBUSEUgREFUQQorTU9WCURYLDAyRkgKK0lOCUFMLERYCis7IEVYSVQgQ09ORklHVVJBVElPTiBNT0RFICAgICAKK01PVglEWCwwMkVICitNT1YJQVgsMEFBSAorT1VUCURYLEFMCisKK1RoZSByZWdpc3RlcnMgb2YgaW50ZXJlc3QgZm9yIGlkZW50aWZ5aW5nIHRoZSBTSU8gb24gdGhlIGRjNzEwMCBhcmUgRGV2aWNlIElECisoMHgyMCkgYW5kIERldmljZSBSZXYgICgweDIxKS4KKworVGhlIERldmljZSBJRCB3aWxsIHJlYWQgMFg2RgorVGhlIERldmljZSBSZXYgY3VycmVudGx5IHJlYWRzIDB4MDEKKworT2J0YWluaW5nIHRoZSBIV00gQmFzZSBBZGRyZXNzLgorVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byByZWFkIHRoZSBIV00gQmFzZSBBZGRyZXNzIGxvY2F0ZWQgaW4KK0xvZ2ljYWwgRGV2aWNlIDguCisKKzsgRU5URVIgQ09ORklHVVJBVElPTiBNT0RFICAgCitNT1YJRFgsMDJFSAorTU9WCUFYLDA1NUgKK09VVAlEWCxBTAorOyBDT05GSUdVUkUgUkVHSVNURVIgQ1JFMCwgICAKKzsgTE9HSUNBTCBERVZJQ0UgOCAgICAgICAgICAgCitNT1YJRFgsMDJFSAorTU9WCUFMLDA3SAorT1VUCURYLEFMIDtQb2ludCB0byBMRCMgQ29uZmlnIFJlZworTU9WCURYLDAyRkgKK01PVglBTCwgMDhICitPVVQJRFgsQUw7UG9pbnQgdG8gTG9naWNhbCBEZXZpY2UgOAorOworTU9WCURYLDAyRUggCitNT1YJQUwsNjBICitPVVQJRFgsQUwJOyBQb2ludCB0byBIV00gQmFzZSBBZGRyIE1TQgorTU9WCURYLDAyRkgKK0lOCUFMLERYCTsgR2V0IE1TQiBvZiBIV00gQmFzZSBBZGRyCis7IEVYSVQgQ09ORklHVVJBVElPTiBNT0RFICAgICAKK01PVglEWCwwMkVICitNT1YJQVgsMEFBSAorT1VUCURYLEFMCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9kZXYtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9pMmMvZGV2LWludGVyZmFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWQ2Y2RhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvZGV2LWludGVyZmFjZQpAQCAtMCwwICsxLDE0NiBAQAorVXN1YWxseSwgaTJjIGRldmljZXMgYXJlIGNvbnRyb2xsZWQgYnkgYSBrZXJuZWwgZHJpdmVyLiBCdXQgaXQgaXMgYWxzbworcG9zc2libGUgdG8gYWNjZXNzIGFsbCBkZXZpY2VzIG9uIGFuIGFkYXB0ZXIgZnJvbSB1c2Vyc3BhY2UsIHRocm91Z2gKK3RoZSAvZGV2IGludGVyZmFjZS4gWW91IG5lZWQgdG8gbG9hZCBtb2R1bGUgaTJjLWRldiBmb3IgdGhpcy4KKworRWFjaCByZWdpc3RlcmVkIGkyYyBhZGFwdGVyIGdldHMgYSBudW1iZXIsIGNvdW50aW5nIGZyb20gMC4gWW91IGNhbgorZXhhbWluZSAvc3lzL2NsYXNzL2kyYy1kZXYvIHRvIHNlZSB3aGF0IG51bWJlciBjb3JyZXNwb25kcyB0byB3aGljaCBhZGFwdGVyLgorSTJDIGRldmljZSBmaWxlcyBhcmUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIGRldmljZSBudW1iZXIgODkKK2FuZCBhIG1pbm9yIGRldmljZSBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgbnVtYmVyIGFzc2lnbmVkIGFzIAorZXhwbGFpbmVkIGFib3ZlLiBUaGV5IHNob3VsZCBiZSBjYWxsZWQgImkyYy0lZCIgKGkyYy0wLCBpMmMtMSwgLi4uLCAKK2kyYy0xMCwgLi4uKS4gQWxsIDI1NiBtaW5vciBkZXZpY2UgbnVtYmVycyBhcmUgcmVzZXJ2ZWQgZm9yIGkyYy4KKworCitDIGV4YW1wbGUKKz09PT09PT09PQorCitTbyBsZXQncyBzYXkgeW91IHdhbnQgdG8gYWNjZXNzIGFuIGkyYyBhZGFwdGVyIGZyb20gYSBDIHByb2dyYW0uIFRoZQorZmlyc3QgdGhpbmcgdG8gZG8gaXMgYCNpbmNsdWRlIDxsaW51eC9pMmMuaD4iIGFuZCAiI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4uIAorWWVzLCBJIGtub3csIHlvdSBzaG91bGQgbmV2ZXIgaW5jbHVkZSBrZXJuZWwgaGVhZGVyIGZpbGVzLCBidXQgdW50aWwgZ2xpYmMgCitrbm93cyBhYm91dCBpMmMsIHRoZXJlIGlzIG5vdCBtdWNoIGNob2ljZS4KKworTm93LCB5b3UgaGF2ZSB0byBkZWNpZGUgd2hpY2ggYWRhcHRlciB5b3Ugd2FudCB0byBhY2Nlc3MuIFlvdSBzaG91bGQKK2luc3BlY3QgL3N5cy9jbGFzcy9pMmMtZGV2LyB0byBkZWNpZGUgdGhpcy4gQWRhcHRlciBudW1iZXJzIGFyZSBhc3NpZ25lZAorc29tZXdoYXQgZHluYW1pY2FsbHksIHNvIHlvdSBjYW4gbm90IGV2ZW4gYXNzdW1lIC9kZXYvaTJjLTAgaXMgdGhlCitmaXJzdCBhZGFwdGVyLgorCitOZXh0IHRoaW5nLCBvcGVuIHRoZSBkZXZpY2UgZmlsZSwgYXMgZm9sbG93czoKKyAgaW50IGZpbGU7CisgIGludCBhZGFwdGVyX25yID0gMjsgLyogcHJvYmFibHkgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZCAqLworICBjaGFyIGZpbGVuYW1lWzIwXTsKKyAgCisgIHNwcmludGYoZmlsZW5hbWUsIi9kZXYvaTJjLSVkIixhZGFwdGVyX25yKTsKKyAgaWYgKChmaWxlID0gb3BlbihmaWxlbmFtZSxPX1JEV1IpKSA8IDApIHsKKyAgICAvKiBFUlJPUiBIQU5ETElORzsgeW91IGNhbiBjaGVjayBlcnJubyB0byBzZWUgd2hhdCB3ZW50IHdyb25nICovCisgICAgZXhpdCgxKTsKKyAgfQorCitXaGVuIHlvdSBoYXZlIG9wZW5lZCB0aGUgZGV2aWNlLCB5b3UgbXVzdCBzcGVjaWZ5IHdpdGggd2hhdCBkZXZpY2UKK2FkZHJlc3MgeW91IHdhbnQgdG8gY29tbXVuaWNhdGU6CisgIGludCBhZGRyID0gMHg0MDsgLyogVGhlIEkyQyBhZGRyZXNzICovCisgIGlmIChpb2N0bChmaWxlLEkyQ19TTEFWRSxhZGRyKSA8IDApIHsKKyAgICAvKiBFUlJPUiBIQU5ETElORzsgeW91IGNhbiBjaGVjayBlcnJubyB0byBzZWUgd2hhdCB3ZW50IHdyb25nICovCisgICAgZXhpdCgxKTsKKyAgfQorCitXZWxsLCB5b3UgYXJlIGFsbCBzZXQgdXAgbm93LiBZb3UgY2FuIG5vdyB1c2UgU01CdXMgY29tbWFuZHMgb3IgcGxhaW4KK0kyQyB0byBjb21tdW5pY2F0ZSB3aXRoIHlvdXIgZGV2aWNlLiBTTUJ1cyBjb21tYW5kcyBhcmUgcHJlZmVycmVkIGlmCit0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZW0uIEJvdGggYXJlIGlsbHVzdHJhdGVkIGJlbG93LgorICBfX3U4IHJlZ2lzdGVyID0gMHgxMDsgLyogRGV2aWNlIHJlZ2lzdGVyIHRvIGFjY2VzcyAqLworICBfX3MzMiByZXM7CisgIGNoYXIgYnVmWzEwXTsKKyAgLyogVXNpbmcgU01CdXMgY29tbWFuZHMgKi8KKyAgcmVzID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGZpbGUscmVnaXN0ZXIpOworICBpZiAocmVzIDwgMCkgeworICAgIC8qIEVSUk9SIEhBTkRMSU5HOiBpMmMgdHJhbnNhY3Rpb24gZmFpbGVkICovCisgIH0gZWxzZSB7CisgICAgLyogcmVzIGNvbnRhaW5zIHRoZSByZWFkIHdvcmQgKi8KKyAgfQorICAvKiBVc2luZyBJMkMgV3JpdGUsIGVxdWl2YWxlbnQgb2YgCisgICAgICAgICAgIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoZmlsZSxyZWdpc3RlciwweDY1NDMpICovCisgIGJ1ZlswXSA9IHJlZ2lzdGVyOworICBidWZbMV0gPSAweDQzOworICBidWZbMl0gPSAweDY1OworICBpZiAoIHdyaXRlKGZpbGUsYnVmLDMpICE9IDMpIHsKKyAgICAvKiBFUlJPUiBIQU5ETElORzogaTJjIHRyYW5zYWN0aW9uIGZhaWxlZCAqLworICB9CisgIC8qIFVzaW5nIEkyQyBSZWFkLCBlcXVpdmFsZW50IG9mIGkyY19zbWJ1c19yZWFkX2J5dGUoZmlsZSkgKi8KKyAgaWYgKHJlYWQoZmlsZSxidWYsMSkgIT0gMSkgeworICAgIC8qIEVSUk9SIEhBTkRMSU5HOiBpMmMgdHJhbnNhY3Rpb24gZmFpbGVkICovCisgIH0gZWxzZSB7CisgICAgLyogYnVmWzBdIGNvbnRhaW5zIHRoZSByZWFkIGJ5dGUgKi8KKyAgfQorCitJTVBPUlRBTlQ6IGJlY2F1c2Ugb2YgdGhlIHVzZSBvZiBpbmxpbmUgZnVuY3Rpb25zLCB5b3UgKmhhdmUqIHRvIHVzZQorJy1PJyBvciBzb21lIHZhcmlhdGlvbiB3aGVuIHlvdSBjb21waWxlIHlvdXIgcHJvZ3JhbSEKKworCitGdWxsIGludGVyZmFjZSBkZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBJT0NUTHMgYXJlIGRlZmluZWQgYW5kIGZ1bGx5IHN1cHBvcnRlZCAKKyhzZWUgYWxzbyBpMmMtZGV2LmggYW5kIGkyYy5oKToKKworaW9jdGwoZmlsZSxJMkNfU0xBVkUsbG9uZyBhZGRyKQorICBDaGFuZ2Ugc2xhdmUgYWRkcmVzcy4gVGhlIGFkZHJlc3MgaXMgcGFzc2VkIGluIHRoZSA3IGxvd2VyIGJpdHMgb2YgdGhlCisgIGFyZ3VtZW50IChleGNlcHQgZm9yIDEwIGJpdCBhZGRyZXNzZXMsIHBhc3NlZCBpbiB0aGUgMTAgbG93ZXIgYml0cyBpbiB0aGlzCisgIGNhc2UpLgorCitpb2N0bChmaWxlLEkyQ19URU5CSVQsbG9uZyBzZWxlY3QpCisgIFNlbGVjdHMgdGVuIGJpdCBhZGRyZXNzZXMgaWYgc2VsZWN0IG5vdCBlcXVhbHMgMCwgc2VsZWN0cyBub3JtYWwgNyBiaXQKKyAgYWRkcmVzc2VzIGlmIHNlbGVjdCBlcXVhbHMgMC4gRGVmYXVsdCAwLgorCitpb2N0bChmaWxlLEkyQ19QRUMsbG9uZyBzZWxlY3QpCisgIFNlbGVjdHMgU01CdXMgUEVDIChwYWNrZXQgZXJyb3IgY2hlY2tpbmcpIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvbgorICBpZiBzZWxlY3Qgbm90IGVxdWFscyAwLCBkaXNhYmxlcyBpZiBzZWxlY3QgZXF1YWxzIDAuIERlZmF1bHQgMC4KKyAgVXNlZCBvbmx5IGZvciBTTUJ1cyB0cmFuc2FjdGlvbnMuCisKK2lvY3RsKGZpbGUsSTJDX0ZVTkNTLHVuc2lnbmVkIGxvbmcgKmZ1bmNzKQorICBHZXRzIHRoZSBhZGFwdGVyIGZ1bmN0aW9uYWxpdHkgYW5kIHB1dHMgaXQgaW4gKmZ1bmNzLgorCitpb2N0bChmaWxlLEkyQ19SRFdSLHN0cnVjdCBpMmNfaW9jdGxfcmR3cl9kYXRhICptc2dzZXQpCisKKyAgRG8gY29tYmluZWQgcmVhZC93cml0ZSB0cmFuc2FjdGlvbiB3aXRob3V0IHN0b3AgaW4gYmV0d2Vlbi4KKyAgVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIHN0cnVjdCBpMmNfaW9jdGxfcmR3cl9kYXRhIHsKKworICAgICAgc3RydWN0IGkyY19tc2cgKm1zZ3M7ICAvKiBwdHIgdG8gYXJyYXkgb2Ygc2ltcGxlIG1lc3NhZ2VzICovCisgICAgICBpbnQgbm1zZ3M7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBtZXNzYWdlcyB0byBleGNoYW5nZSAqLworICB9CisKKyAgVGhlIG1zZ3NbXSB0aGVtc2VsdmVzIGNvbnRhaW4gZnVydGhlciBwb2ludGVycyBpbnRvIGRhdGEgYnVmZmVycy4KKyAgVGhlIGZ1bmN0aW9uIHdpbGwgd3JpdGUgb3IgcmVhZCBkYXRhIHRvIG9yIGZyb20gdGhhdCBidWZmZXJzIGRlcGVuZGluZworICBvbiB3aGV0aGVyIHRoZSBJMkNfTV9SRCBmbGFnIGlzIHNldCBpbiBhIHBhcnRpY3VsYXIgbWVzc2FnZSBvciBub3QuCisgIFRoZSBzbGF2ZSBhZGRyZXNzIGFuZCB3aGV0aGVyIHRvIHVzZSB0ZW4gYml0IGFkZHJlc3MgbW9kZSBoYXMgdG8gYmUKKyAgc2V0IGluIGVhY2ggbWVzc2FnZSwgb3ZlcnJpZGluZyB0aGUgdmFsdWVzIHNldCB3aXRoIHRoZSBhYm92ZSBpb2N0bCdzLgorCisKK090aGVyIHZhbHVlcyBhcmUgTk9UIHN1cHBvcnRlZCBhdCB0aGlzIG1vbWVudCwgZXhjZXB0IGZvciBJMkNfU01CVVMsCit3aGljaCB5b3Ugc2hvdWxkIG5ldmVyIGRpcmVjdGx5IGNhbGw7IGluc3RlYWQsIHVzZSB0aGUgYWNjZXNzIGZ1bmN0aW9ucworYmVsb3cuCisKK1lvdSBjYW4gZG8gcGxhaW4gaTJjIHRyYW5zYWN0aW9ucyBieSB1c2luZyByZWFkKDIpIGFuZCB3cml0ZSgyKSBjYWxscy4KK1lvdSBkbyBub3QgbmVlZCB0byBwYXNzIHRoZSBhZGRyZXNzIGJ5dGU7IGluc3RlYWQsIHNldCBpdCB0aHJvdWdoCitpb2N0bCBJMkNfU0xBVkUgYmVmb3JlIHlvdSB0cnkgdG8gYWNjZXNzIHRoZSBkZXZpY2UuCisKK1lvdSBjYW4gZG8gU01CdXMgbGV2ZWwgdHJhbnNhY3Rpb25zIChzZWUgZG9jdW1lbnRhdGlvbiBmaWxlIHNtYnVzLXByb3RvY29sIAorZm9yIGRldGFpbHMpIHRocm91Z2ggdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgIF9fczMyIGkyY19zbWJ1c193cml0ZV9xdWljayhpbnQgZmlsZSwgX191OCB2YWx1ZSk7CisgIF9fczMyIGkyY19zbWJ1c19yZWFkX2J5dGUoaW50IGZpbGUpOworICBfX3MzMiBpMmNfc21idXNfd3JpdGVfYnl0ZShpbnQgZmlsZSwgX191OCB2YWx1ZSk7CisgIF9fczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShpbnQgZmlsZSwgX191OCBjb21tYW5kKTsKKyAgX19zMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpbnQgZmlsZSwgX191OCBjb21tYW5kLCBfX3U4IHZhbHVlKTsKKyAgX19zMzIgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGludCBmaWxlLCBfX3U4IGNvbW1hbmQpOworICBfX3MzMiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGludCBmaWxlLCBfX3U4IGNvbW1hbmQsIF9fdTE2IHZhbHVlKTsKKyAgX19zMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChpbnQgZmlsZSwgX191OCBjb21tYW5kLCBfX3UxNiB2YWx1ZSk7CisgIF9fczMyIGkyY19zbWJ1c19yZWFkX2Jsb2NrX2RhdGEoaW50IGZpbGUsIF9fdTggY29tbWFuZCwgX191OCAqdmFsdWVzKTsKKyAgX19zMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoaW50IGZpbGUsIF9fdTggY29tbWFuZCwgX191OCBsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3U4ICp2YWx1ZXMpOworQWxsIHRoZXNlIHRyYW5zYWN0aW9ucyByZXR1cm4gLTEgb24gZmFpbHVyZTsgeW91IGNhbiByZWFkIGVycm5vIHRvIHNlZQord2hhdCBoYXBwZW5lZC4gVGhlICd3cml0ZScgdHJhbnNhY3Rpb25zIHJldHVybiAwIG9uIHN1Y2Nlc3M7IHRoZQorJ3JlYWQnIHRyYW5zYWN0aW9ucyByZXR1cm4gdGhlIHJlYWQgdmFsdWUsIGV4Y2VwdCBmb3IgcmVhZF9ibG9jaywgd2hpY2gKK3JldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgcmVhZC4gVGhlIGJsb2NrIGJ1ZmZlcnMgbmVlZCBub3QgYmUgbG9uZ2VyCit0aGFuIDMyIGJ5dGVzLgorCitUaGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBhbGwgbWFjcm9zLCB0aGF0IHJlc29sdmUgdG8gY2FsbHMgdG8gdGhlCitpMmNfc21idXNfYWNjZXNzIGZ1bmN0aW9uLCB0aGF0IG9uIGl0cyB0dXJuIGNhbGxzIGEgc3BlY2lmaWMgaW9jdGwKK3dpdGggdGhlIGRhdGEgaW4gYSBzcGVjaWZpYyBmb3JtYXQuIFJlYWQgdGhlIHNvdXJjZSBjb2RlIGlmIHlvdQord2FudCB0byBrbm93IHdoYXQgaGFwcGVucyBiZWhpbmQgdGhlIHNjcmVlbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9mdW5jdGlvbmFsaXR5IGIvRG9jdW1lbnRhdGlvbi9pMmMvZnVuY3Rpb25hbGl0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTc4YTk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvZnVuY3Rpb25hbGl0eQpAQCAtMCwwICsxLDEzNSBAQAorSU5UUk9EVUNUSU9OCistLS0tLS0tLS0tLS0KKworQmVjYXVzZSBub3QgZXZlcnkgSTJDIG9yIFNNQnVzIGFkYXB0ZXIgaW1wbGVtZW50cyBldmVyeXRoaW5nIGluIHRoZSAKK0kyQyBzcGVjaWZpY2F0aW9ucywgYSBjbGllbnQgY2FuIG5vdCB0cnVzdCB0aGF0IGV2ZXJ5dGhpbmcgaXQgbmVlZHMKK2lzIGltcGxlbWVudGVkIHdoZW4gaXQgaXMgZ2l2ZW4gdGhlIG9wdGlvbiB0byBhdHRhY2ggdG8gYW4gYWRhcHRlcjoKK3RoZSBjbGllbnQgbmVlZHMgc29tZSB3YXkgdG8gY2hlY2sgd2hldGhlciBhbiBhZGFwdGVyIGhhcyB0aGUgbmVlZGVkCitmdW5jdGlvbmFsaXR5LiAKKworCitGVU5DVElPTkFMSVRZIENPTlNUQU5UUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIHRoZSBtb3N0IHVwLXRvLWRhdGUgbGlzdCBvZiBmdW5jdGlvbmFsaXR5IGNvbnN0YW50cywgcGxlYXNlIGNoZWNrCis8bGludXgvaTJjLmg+IQorCisgIEkyQ19GVU5DX0kyQyAgICAgICAgICAgICAgICAgICAgUGxhaW4gaTJjLWxldmVsIGNvbW1hbmRzIChQdXJlIFNNQnVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlcnMgdHlwaWNhbGx5IGNhbiBub3QgZG8gdGhlc2UpCisgIEkyQ19GVU5DXzEwQklUX0FERFIgICAgICAgICAgICAgSGFuZGxlcyB0aGUgMTAtYml0IGFkZHJlc3MgZXh0ZW5zaW9ucworICBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORyAgICAgIEtub3dzIGFib3V0IHRoZSBJMkNfTV9SRVZfRElSX0FERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX01fUkVWX0RJUl9BRERSIGFuZCBJMkNfTV9SRVZfRElSX05PU1RBUlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAod2hpY2ggbW9kaWZ5IHRoZSBpMmMgcHJvdG9jb2whKQorICBJMkNfRlVOQ19TTUJVU19RVUlDSyAgICAgICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHdyaXRlX3F1aWNrIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFICAgICAgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2J5dGUgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHdyaXRlX2J5dGUgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfYnl0ZV9kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBICBIYW5kbGVzIHRoZSBTTUJ1cyB3cml0ZV9ieXRlX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfd29yZF9kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBICBIYW5kbGVzIHRoZSBTTUJ1cyB3cml0ZV9ieXRlX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTEwgICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHByb2Nlc3NfY2FsbCBjb21tYW5kCisgIEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQSAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF9ibG9ja19kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSBIYW5kbGVzIHRoZSBTTUJ1cyB3cml0ZV9ibG9ja19kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0sgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2kyY19ibG9ja19kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLICBIYW5kbGVzIHRoZSBTTUJ1cyB3cml0ZV9pMmNfYmxvY2tfZGF0YSBjb21tYW5kCisKK0EgZmV3IGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUgZmxhZ3MgYXJlIGFsc28gZGVmaW5lZCBmb3IgeW91ciBjb252ZW5pZW5jZToKKworICBJMkNfRlVOQ19TTUJVU19CWVRFICAgICAgICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3cml0ZV9ieXRlIGNvbW1hbmRzCisgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSAgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF9ieXRlX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd3JpdGVfYnl0ZV9kYXRhIGNvbW1hbmRzCisgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSAgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF93b3JkX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd3JpdGVfd29yZF9kYXRhIGNvbW1hbmRzCisgIEkyQ19GVU5DX1NNQlVTX0JMT0NLX0RBVEEgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF9ibG9ja19kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdyaXRlX2Jsb2NrX2RhdGEgY29tbWFuZHMKKyAgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLICAgICAgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2kyY19ibG9ja19kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdyaXRlX2kyY19ibG9ja19kYXRhIGNvbW1hbmRzCisgIEkyQ19GVU5DX1NNQlVTX0VNVUwgICAgICAgICAgICAgSGFuZGxlcyBhbGwgU01CdXMgY29tbWFuZHMgdGhhbiBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXVsYXRlZCBieSBhIHJlYWwgSTJDIGFkYXB0ZXIgKHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRyYW5zcGFyZW50IGVtdWxhdGlvbiBsYXllcikKKworCitBTEdPUklUSE0vQURBUFRFUiBJTVBMRU1FTlRBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB5b3Ugd3JpdGUgYSBuZXcgYWxnb3JpdGhtIGRyaXZlciwgeW91IHdpbGwgaGF2ZSB0byBpbXBsZW1lbnQgYQorZnVuY3Rpb24gY2FsbGJhY2sgYGZ1bmN0aW9uYWxpdHknLCB0aGF0IGdldHMgYW4gaTJjX2FkYXB0ZXIgc3RydWN0dXJlCitwb2ludGVyIGFzIGl0cyBvbmx5IHBhcmFtZXRlcjoKKworICBzdHJ1Y3QgaTJjX2FsZ29yaXRobSB7CisJLyogTWFueSBvdGhlciB0aGluZ3Mgb2YgY291cnNlOyBjaGVjayA8bGludXgvaTJjLmg+ISAqLworCXUzMiAoKmZ1bmN0aW9uYWxpdHkpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CisgIH0KKworQSB0eXBpY2FsbHkgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4gYmVsb3csIGZyb20gaTJjLWFsZ28tYml0LmM6CisKKyAgc3RhdGljIHUzMiBiaXRfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCisgIHsKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTCB8IEkyQ19GVU5DXzEwQklUX0FERFIgfCAKKwkgICAgICAgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkc7CisgIH0KKworCisKK0NMSUVOVCBDSEVDS0lORworLS0tLS0tLS0tLS0tLS0tCisKK0JlZm9yZSBhIGNsaWVudCB0cmllcyB0byBhdHRhY2ggdG8gYW4gYWRhcHRlciwgb3IgZXZlbiBkbyB0ZXN0cyB0byBjaGVjaword2hldGhlciBvbmUgb2YgdGhlIGRldmljZXMgaXQgc3VwcG9ydHMgaXMgcHJlc2VudCBvbiBhbiBhZGFwdGVyLCBpdCBzaG91bGQKK2NoZWNrIHdoZXRoZXIgdGhlIG5lZWRlZCBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQuIFRoZXJlIGFyZSB0d28gZnVuY3Rpb25zCitkZWZpbmVkIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgZnVuY3Rpb25hbGl0eSBob29rCitpbiB0aGUgYWxnb3JpdGhtIHN0cnVjdHVyZSBkaXJlY3RseToKKworICAvKiBSZXR1cm4gdGhlIGZ1bmN0aW9uYWxpdHkgbWFzayAqLworICBleHRlcm4gdTMyIGkyY19nZXRfZnVuY3Rpb25hbGl0eSAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKKworICAvKiBSZXR1cm4gMSBpZiBhZGFwdGVyIHN1cHBvcnRzIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgMCBpZiBub3QuICovCisgIGV4dGVybiBpbnQgaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdTMyIGZ1bmMpOworCitUaGlzIGlzIGEgdHlwaWNhbCB3YXkgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucyAoZnJvbSB0aGUgd3JpdGluZy1jbGllbnRzCitkb2N1bWVudCk6CisgIGludCBmb29fZGV0ZWN0X2NsaWVudChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGludCBraW5kKQorICB7CisJLyogRGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMgKi8KKworCS8qIEFzIHRoZSB2ZXJ5IGZpcnN0IGFjdGlvbiwgd2UgY2hlY2sgd2hldGhlciB0aGUgYWRhcHRlciBoYXMgdGhlCisJICAgbmVlZGVkIGZ1bmN0aW9uYWxpdHk6IHdlIG5lZWQgdGhlIFNNQnVzIHJlYWRfd29yZF9kYXRhLAorICAgICAgICAgICB3cml0ZV93b3JkX2RhdGEgYW5kIHdyaXRlX2J5dGUgZnVuY3Rpb25zIGluIHRoaXMgZXhhbXBsZS4gKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpCisJCWdvdG8gRVJST1IwOworCisJLyogTm93IHdlIGNhbiBkbyB0aGUgcmVhbCBkZXRlY3Rpb24gKi8KKworCUVSUk9SMDoKKwkJLyogUmV0dXJuIGFuIGVycm9yICovCisgIH0KKworCisKK0NIRUNLSU5HIFRIUk9VR0ggL0RFVgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB0cnkgdG8gYWNjZXNzIGFuIGFkYXB0ZXIgZnJvbSBhIHVzZXJzcGFjZSBwcm9ncmFtLCB5b3Ugd2lsbCBoYXZlCit0byB1c2UgdGhlIC9kZXYgaW50ZXJmYWNlLiBZb3Ugd2lsbCBzdGlsbCBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhlCitmdW5jdGlvbmFsaXR5IHlvdSBuZWVkIGlzIHN1cHBvcnRlZCwgb2YgY291cnNlLiBUaGlzIGlzIGRvbmUgdXNpbmcKK3RoZSBJMkNfRlVOQ1MgaW9jdGwuIEFuIGV4YW1wbGUsIGFkYXB0ZWQgZnJvbSB0aGUgbG1fc2Vuc29ycyBpMmNfZGV0ZWN0Citwcm9ncmFtLCBpcyBiZWxvdzoKKworICBpbnQgZmlsZTsKKyAgaWYgKGZpbGUgPSBvcGVuKCIvZGV2L2kyYy0wIixPX1JEV1IpIDwgMCkgeworCS8qIFNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyAqLworCWV4aXQoMSk7CisgIH0KKyAgaWYgKGlvY3RsKGZpbGUsSTJDX0ZVTkNTLCZmdW5jcykgPCAwKSB7CisJLyogU29tZSBraW5kIG9mIGVycm9yIGhhbmRsaW5nICovCisJZXhpdCgxKTsKKyAgfQorICBpZiAoISAoZnVuY3MgJiBJMkNfRlVOQ19TTUJVU19RVUlDSykpIHsKKwkvKiBPb3BzLCB0aGUgbmVlZGVkIGZ1bmN0aW9uYWxpdHkgKFNNQnVzIHdyaXRlX3F1aWNrIGZ1bmN0aW9uKSBpcworICAgICAgICAgICBub3QgYXZhaWxhYmxlISAqLworCWV4aXQoMSk7CisgIH0KKyAgLyogTm93IGl0IGlzIHNhZmUgdG8gdXNlIHRoZSBTTUJ1cyB3cml0ZV9xdWljayBjb21tYW5kICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtcHJvdG9jb2wgYi9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtcHJvdG9jb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwMjJjOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1wcm90b2NvbApAQCAtMCwwICsxLDc2IEBACitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgaTJjIHByb3RvY29sLiBPciB3aWxsLCB3aGVuIGl0IGlzIGZpbmlzaGVkIDotKQorCitLZXkgdG8gc3ltYm9scworPT09PT09PT09PT09PT0KKworUyAgICAgKDEgYml0KSA6IFN0YXJ0IGJpdAorUCAgICAgKDEgYml0KSA6IFN0b3AgYml0CitSZC9XciAoMSBiaXQpIDogUmVhZC9Xcml0ZSBiaXQuIFJkIGVxdWFscyAxLCBXciBlcXVhbHMgMC4KK0EsIE5BICgxIGJpdCkgOiBBY2NlcHQgYW5kIHJldmVyc2UgYWNjZXB0IGJpdC4gCitBZGRyICAoNyBiaXRzKTogSTJDIDcgYml0IGFkZHJlc3MuIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSBleHBhbmRlZCBhcyB1c3VhbCB0byAKKyAgICAgICAgICAgICAgICBnZXQgYSAxMCBiaXQgSTJDIGFkZHJlc3MuCitDb21tICAoOCBiaXRzKTogQ29tbWFuZCBieXRlLCBhIGRhdGEgYnl0ZSB3aGljaCBvZnRlbiBzZWxlY3RzIGEgcmVnaXN0ZXIgb24KKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlLgorRGF0YSAgKDggYml0cyk6IEEgcGxhaW4gZGF0YSBieXRlLiBTb21ldGltZXMsIEkgd3JpdGUgRGF0YUxvdywgRGF0YUhpZ2gKKyAgICAgICAgICAgICAgICBmb3IgMTYgYml0IGRhdGEuCitDb3VudCAoOCBiaXRzKTogQSBkYXRhIGJ5dGUgY29udGFpbmluZyB0aGUgbGVuZ3RoIG9mIGEgYmxvY2sgb3BlcmF0aW9uLgorCitbLi5dOiBEYXRhIHNlbnQgYnkgSTJDIGRldmljZSwgYXMgb3Bwb3NlZCB0byBkYXRhIHNlbnQgYnkgdGhlIGhvc3QgYWRhcHRlci4KKworCitTaW1wbGUgc2VuZCB0cmFuc2FjdGlvbgorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvcnJlc3BvbmRzIHRvIGkyY19tYXN0ZXJfc2VuZC4KKworICBTIEFkZHIgV3IgW0FdIERhdGEgW0FdIERhdGEgW0FdIC4uLiBbQV0gRGF0YSBbQV0gUAorCisKK1NpbXBsZSByZWNlaXZlIHRyYW5zYWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb3JyZXNwb25kcyB0byBpMmNfbWFzdGVyX3JlY3YKKworICBTIEFkZHIgUmQgW0FdIFtEYXRhXSBBIFtEYXRhXSBBIC4uLiBBIFtEYXRhXSBOQSBQCisKKworQ29tYmluZWQgdHJhbnNhY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvcnJlc3BvbmRzIHRvIGkyY190cmFuc2ZlcgorCitUaGV5IGFyZSBqdXN0IGxpa2UgdGhlIGFib3ZlIHRyYW5zYWN0aW9ucywgYnV0IGluc3RlYWQgb2YgYSBzdG9wIGJpdCBQCithIHN0YXJ0IGJpdCBTIGlzIHNlbnQgYW5kIHRoZSB0cmFuc2FjdGlvbiBjb250aW51ZXMuIEFuIGV4YW1wbGUgb2YKK2EgYnl0ZSByZWFkLCBmb2xsb3dlZCBieSBhIGJ5dGUgd3JpdGU6CisKKyAgUyBBZGRyIFJkIFtBXSBbRGF0YV0gTkEgUyBBZGRyIFdyIFtBXSBEYXRhIFtBXSBQCisKKworTW9kaWZpZWQgdHJhbnNhY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT0KKworV2UgaGF2ZSBmb3VuZCBzb21lIEkyQyBkZXZpY2VzIHRoYXQgbmVlZHMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOgorCisgIEZsYWcgSTJDX01fTk9TVEFSVDogCisgICAgSW4gYSBjb21iaW5lZCB0cmFuc2FjdGlvbiwgbm8gJ1MgQWRkciBXci9SZCBbQV0nIGlzIGdlbmVyYXRlZCBhdCBzb21lCisgICAgcG9pbnQuIEZvciBleGFtcGxlLCBzZXR0aW5nIEkyQ19NX05PU1RBUlQgb24gdGhlIHNlY29uZCBwYXJ0aWFsIG1lc3NhZ2UKKyAgICBnZW5lcmF0ZXMgc29tZXRoaW5nIGxpa2U6CisgICAgICBTIEFkZHIgUmQgW0FdIFtEYXRhXSBOQSBEYXRhIFtBXSBQCisgICAgSWYgeW91IHNldCB0aGUgSTJDX01fTk9TVEFSVCB2YXJpYWJsZSBmb3IgdGhlIGZpcnN0IHBhcnRpYWwgbWVzc2FnZSwKKyAgICB3ZSBkbyBub3QgZ2VuZXJhdGUgQWRkciwgYnV0IHdlIGRvIGdlbmVyYXRlIHRoZSBzdGFydGJpdCBTLiBUaGlzIHdpbGwKKyAgICBwcm9iYWJseSBjb25mdXNlIGFsbCBvdGhlciBjbGllbnRzIG9uIHlvdXIgYnVzLCBzbyBkb24ndCB0cnkgdGhpcy4KKworICBGbGFncyBJMkNfTV9SRVZfRElSX0FERFIKKyAgICBUaGlzIHRvZ2dsZXMgdGhlIFJkL1dyIGZsYWcuIFRoYXQgaXMsIGlmIHlvdSB3YW50IHRvIGRvIGEgd3JpdGUsIGJ1dAorICAgIG5lZWQgdG8gZW1pdCBhbiBSZCBpbnN0ZWFkIG9mIGEgV3IsIG9yIHZpY2UgdmVyc2EsIHlvdSBzZXQgdGhpcworICAgIGZsYWcuIEZvciBleGFtcGxlOgorICAgICAgUyBBZGRyIFJkIFtBXSBEYXRhIFtBXSBEYXRhIFtBXSAuLi4gW0FdIERhdGEgW0FdIFAKKworICBGbGFncyBJMkNfTV9JR05PUkVfTkFLCisgICAgTm9ybWFsbHkgbWVzc2FnZSBpcyBpbnRlcnJ1cHRlZCBpbW1lZGlhdGVseSBpZiB0aGVyZSBpcyBbTkFdIGZyb20gdGhlCisgICAgY2xpZW50LiBTZXR0aW5nIHRoaXMgZmxhZyB0cmVhdHMgYW55IFtOQV0gYXOgW0FdLCBhbmQgYWxsIG9mCisgICAgbWVzc2FnZSBpcyBzZW50LgorICAgIFRoZXNlIG1lc3NhZ2VzIG1heSBzdGlsbCBmYWlsIHRvIFNDTCBsby0+aGkgdGltZW91dC4KKworICBGbGFncyBJMkNfTV9OT19SRF9BQ0sKKyAgICBJbiBhIHJlYWQgbWVzc2FnZSwgbWFzdGVyIEEvTkEgYml0IGlzIHNraXBwZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtc3R1YiBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1zdHViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZGNiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtc3R1YgpAQCAtMCwwICsxLDM4IEBACitNT0RVTEU6IGkyYy1zdHViCisKK0RFU0NSSVBUSU9OOgorCitUaGlzIG1vZHVsZSBpcyBhIHZlcnkgc2ltcGxlIGZha2UgSTJDL1NNQnVzIGRyaXZlci4gIEl0IGltcGxlbWVudHMgZm91cgordHlwZXMgb2YgU01CdXMgY29tbWFuZHM6IHdyaXRlIHF1aWNrLCAoci93KSBieXRlLCAoci93KSBieXRlIGRhdGEsIGFuZAorKHIvdykgd29yZCBkYXRhLgorCitObyBoYXJkd2FyZSBpcyBuZWVkZWQgbm9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZHVsZS4gIEl0IHdpbGwgYWNjZXB0IHdyaXRlCitxdWljayBjb21tYW5kcyB0byBhbGwgYWRkcmVzc2VzOyBpdCB3aWxsIHJlc3BvbmQgdG8gdGhlIG90aGVyIGNvbW1hbmRzIChhbHNvCit0byBhbGwgYWRkcmVzc2VzKSBieSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byBhbiBhcnJheSBpbiBtZW1vcnkuICBJdCB3aWxsCithbHNvIHNwYW0gdGhlIGtlcm5lbCBsb2dzIGZvciBldmVyeSBjb21tYW5kIGl0IGhhbmRsZXMuCisKK0EgcG9pbnRlciByZWdpc3RlciB3aXRoIGF1dG8taW5jcmVtZW50IGlzIGltcGxlbWVudGVkIGZvciBhbGwgYnl0ZQorb3BlcmF0aW9ucy4gIFRoaXMgYWxsb3dzIGZvciBjb250aW51b3VzIGJ5dGUgcmVhZHMgbGlrZSB0aG9zZSBzdXBwb3J0ZWQgYnkKK0VFUFJPTXMsIGFtb25nIG90aGVycy4KKworVGhlIHR5cGljYWwgdXNlLWNhc2UgaXMgbGlrZSB0aGlzOgorCTEuIGxvYWQgdGhpcyBtb2R1bGUKKwkyLiB1c2UgaTJjc2V0IChmcm9tIGxtX3NlbnNvcnMgcHJvamVjdCkgdG8gcHJlLWxvYWQgc29tZSBkYXRhCisJMy4gbG9hZCB0aGUgdGFyZ2V0IHNlbnNvcnMgY2hpcCBkcml2ZXIgbW9kdWxlCisJNC4gb2JzZXJ2ZSBpdHMgYmVoYXZpb3IgaW4gdGhlIGtlcm5lbCBsb2cKKworQ0FWRUFUUzoKKworVGhlcmUgYXJlIGluZGVwZW5kZW50IGFycmF5cyBmb3IgYnl0ZS9kYXRhIGFuZCB3b3JkL2RhdGEgY29tbWFuZHMuICBEZXBlbmRpbmcKK29uIGlmL2hvdyBhIHRhcmdldCBkcml2ZXIgbWl4ZXMgdGhlbSwgeW91J2xsIG5lZWQgdG8gYmUgY2FyZWZ1bC4KKworSWYgeW91ciB0YXJnZXQgZHJpdmVyIHBvbGxzIHNvbWUgYnl0ZSBvciB3b3JkIHdhaXRpbmcgZm9yIGl0IHRvIGNoYW5nZSwgdGhlCitzdHViIGNvdWxkIGxvY2sgaXQgdXAuICBVc2UgaTJjc2V0IHRvIHVubG9jayBpdC4KKworSWYgdGhlIGhhcmR3YXJlIGZvciB5b3VyIGRyaXZlciBoYXMgYmFua2VkIHJlZ2lzdGVycyAoZS5nLiBXaW5ib25kIHNlbnNvcnMKK2NoaXBzKSB0aGlzIG1vZHVsZSB3aWxsIG5vdCB3b3JrIHdlbGwgLSBhbHRob3VnaCBpdCBjb3VsZCBiZSBleHRlbmRlZCB0bworc3VwcG9ydCB0aGF0IHByZXR0eSBlYXNpbHkuCisKK0lmIHlvdSBzcGFtIGl0IGhhcmQgZW5vdWdoLCBwcmludGsgY2FuIGJlIGxvc3N5LiAgVGhpcyBtb2R1bGUgcmVhbGx5IHdhbnRzCitzb21ldGhpbmcgbGlrZSByZWxheWZzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9wb3J0aW5nLWNsaWVudHMgYi9Eb2N1bWVudGF0aW9uL2kyYy9wb3J0aW5nLWNsaWVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0MDQ5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3BvcnRpbmctY2xpZW50cwpAQCAtMCwwICsxLDEzMyBAQAorUmV2aXNpb24gNCwgMjAwNC0wMy0zMAorSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CitHcmVnIEtIIDxncmVnQGtyb2FoLmNvbT4KKworVGhpcyBpcyBhIGd1aWRlIG9uIGhvdyB0byBjb252ZXJ0IEkyQyBjaGlwIGRyaXZlcnMgZnJvbSBMaW51eCAyLjQgdG8KK0xpbnV4IDIuNi4gSSBoYXZlIGJlZW4gdXNpbmcgZXhpc3RpbmcgZHJpdmVycyAobG03NSwgbG03OCkgYXMgZXhhbXBsZXMuCitUaGVuIEkgY29udmVydGVkIGEgZHJpdmVyIG15c2VsZiAobG04MykgYW5kIHVwZGF0ZWQgdGhpcyBkb2N1bWVudC4KKworVGhlcmUgYXJlIHR3byBzZXRzIG9mIHBvaW50cyBiZWxvdy4gVGhlIGZpcnN0IHNldCBjb25jZXJucyB0ZWNobmljYWwKK2NoYW5nZXMuIFRoZSBzZWNvbmQgc2V0IGNvbmNlcm5zIGNvZGluZyBwb2xpY3kuIEJvdGggYXJlIG1hbmRhdG9yeS4KKworQWx0aG91Z2ggcmVhZGluZyB0aGlzIGd1aWRlIHdpbGwgaGVscCB5b3UgcG9ydGluZyBkcml2ZXJzLCBJIHN1Z2dlc3QKK3lvdSBrZWVwIGFuIGV5ZSBvbiBhbiBhbHJlYWR5IHBvcnRlZCBkcml2ZXIgd2hpbGUgcG9ydGluZyB5b3VyIG93bgorZHJpdmVyLiBUaGlzIHdpbGwgaGVscCB5b3UgYSBsb3QgdW5kZXJzdGFuZGluZyB3aGF0IHRoaXMgZ3VpZGUKK2V4YWN0bHkgbWVhbnMuIENob29zZSB0aGUgY2hpcCBkcml2ZXIgdGhhdCBpcyB0aGUgbW9yZSBzaW1pbGFyIHRvCit5b3VycyBmb3IgYmVzdCByZXN1bHRzLgorCitUZWNobmljYWwgY2hhbmdlczoKKworKiBbSW5jbHVkZXNdIEdldCByaWQgb2YgInZlcnNpb24uaCIuIFJlcGxhY2UgPGxpbnV4L2kyYy1wcm9jLmg+IHdpdGgKKyAgPGxpbnV4L2kyYy1zZW5zb3IuaD4uIEluY2x1ZGVzIHR5cGljYWxseSBsb29rIGxpa2UgdGhhdDoKKyAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorICAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisgICNpbmNsdWRlIDxsaW51eC9pMmMtc2Vuc29yLmg+CisgICNpbmNsdWRlIDxsaW51eC9pMmMtdmlkLmg+CS8qIGlmIHlvdSBuZWVkIFZSTSBzdXBwb3J0ICovCisgICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIGlmIHlvdSBoYXZlIEkvTyBvcGVyYXRpb25zICovCisgIFBsZWFzZSByZXNwZWN0IHRoaXMgaW5jbHVzaW9uIG9yZGVyLiBTb21lIGV4dHJhIGhlYWRlcnMgbWF5IGJlCisgIHJlcXVpcmVkIGZvciBhIGdpdmVuIGRyaXZlciAoZS5nLiAibG03NS5oIikuCisKKyogW0FkZHJlc3Nlc10gU0VOU09SU19JMkNfRU5EIGJlY29tZXMgSTJDX0NMSUVOVF9FTkQsIFNFTlNPUlNfSVNBX0VORAorICBiZWNvbWVzIEkyQ19DTElFTlRfSVNBX0VORC4KKworKiBbQ2xpZW50IGRhdGFdIEdldCByaWQgb2Ygc3lzY3RsX2lkLiBUcnkgdXNpbmcgc3RhbmRhcmQgbmFtZXMgZm9yCisgIHJlZ2lzdGVyIHZhbHVlcyAoZm9yIGV4YW1wbGUsIHRlbXBfb3MgYmVjb21lcyB0ZW1wX21heCkuIFlvdSdyZQorICBzdGlsbCByZWxhdGl2ZWx5IGZyZWUgaGVyZSwgYnV0IHlvdSAqaGF2ZSogdG8gZm9sbG93IHRoZSBzdGFuZGFyZAorICBuYW1lcyBmb3Igc3lzZnMgZmlsZXMgKHNlZSB0aGUgU3lzY3RsIHNlY3Rpb24gYmVsb3cpLgorCisqIFtGdW5jdGlvbiBwcm90b3R5cGVzXSBUaGUgZGV0ZWN0IGZ1bmN0aW9ucyBsb3NlcyBpdHMgZmxhZ3MKKyAgcGFyYW1ldGVyLiBTeXNjdGwgKGUuZy4gbG03NV90ZW1wKSBhbmQgbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMKKyAgYXJlIG9mZiB0aGUgbGlzdCBvZiBwcm90b3R5cGVzLiBUaGlzIHVzdWFsbHkgbGVhdmVzIGZpdmUKKyAgcHJvdG90eXBlczoKKyAgc3RhdGljIGludCBsbTc1X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CisgIHN0YXRpYyBpbnQgbG03NV9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywKKyAgICAgIGludCBraW5kKTsKKyAgc3RhdGljIHZvaWQgbG03NV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKKyAgc3RhdGljIGludCBsbTc1X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CisgIHN0YXRpYyB2b2lkIGxtNzVfdXBkYXRlX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKKworKiBbU3lzY3RsXSBBbGwgc3lzY3RsIHN0dWZmIGlzIG9mIGNvdXJzZSBnb25lIChkZWZpbmVzLCBjdGxfdGFibGUKKyAgYW5kIGZ1bmN0aW9ucykuIEluc3RlYWQsIHlvdSBoYXZlIHRvIGRlZmluZSBzaG93IGFuZCBzZXQgZnVuY3Rpb25zIGZvcgorICBlYWNoIHN5c2ZzIGZpbGUuIE9ubHkgZGVmaW5lIHNldCBmb3Igd3JpdGFibGUgdmFsdWVzLiBUYWtlIGEgbG9vayBhdCBhbgorICBleGlzdGluZyAyLjYgZHJpdmVyIGZvciBkZXRhaWxzIChsbTc4IGZvciBleGFtcGxlKS4gRG9uJ3QgZm9yZ2V0CisgIHRvIGRlZmluZSB0aGUgYXR0cmlidXRlcyBmb3IgZWFjaCBmaWxlICh0aGlzIGlzIHRoYXQgc3RlcCB0aGF0CisgIGxpbmtzIGNhbGxiYWNrIGZ1bmN0aW9ucykuIFVzZSB0aGUgZmlsZSBuYW1lcyBzcGVjaWZpZWQgaW4KKyAgRG9jdW1lbnRhdGlvbi9pMmMvc3lzZnMtaW50ZXJmYWNlIGZvciB0aGUgaW5kaXZpZHVhbCBmaWxlcy4gQWxzbworICBjb252ZXJ0IHRoZSB1bml0cyB0aGVzZSBmaWxlcyByZWFkIGFuZCB3cml0ZSB0byB0aGUgc3BlY2lmaWVkIG9uZXMuCisgIElmIHlvdSBuZWVkIHRvIGFkZCBhIG5ldyB0eXBlIG9mIGZpbGUsIHBsZWFzZSBkaXNjdXNzIGl0IG9uIHRoZQorICBzZW5zb3JzIG1haWxpbmcgbGlzdCA8c2Vuc29yc0BzdGltcHkubmV0cm9lZGdlLmNvbT4gYnkgcHJvdmlkaW5nIGEKKyAgcGF0Y2ggdG8gdGhlIERvY3VtZW50YXRpb24vaTJjL3N5c2ZzLWludGVyZmFjZSBmaWxlLgorCisqIFtBdHRhY2hdIEZvciBJMkMgZHJpdmVycywgdGhlIGF0dGFjaCBmdW5jdGlvbiBzaG91bGQgbWFrZSBzdXJlCisgIHRoYXQgdGhlIGFkYXB0ZXIncyBjbGFzcyBoYXMgSTJDX0NMQVNTX0hXTU9OLCB1c2luZyB0aGUKKyAgZm9sbG93aW5nIGNvbnN0cnVjdDoKKyAgaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQorICAgICAgICAgIHJldHVybiAwOworICBJU0Etb25seSBkcml2ZXJzIG9mIGNvdXJzZSBkb24ndCBuZWVkIHRoaXMuCisKKyogW0RldGVjdF0gQXMgbWVudGlvbmVkIGVhcmxpZXIsIHRoZSBmbGFncyBwYXJhbWV0ZXIgaXMgZ29uZS4KKyAgVGhlIHR5cGVfbmFtZSBhbmQgY2xpZW50X25hbWUgc3RyaW5ncyBhcmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUKKyAgbmFtZSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHdpdGggYSBsb3dlcmNhc2UsIHNob3J0IHN0cmluZworICAodHlwaWNhbGx5IHRoZSBkcml2ZXIgbmFtZSwgZS5nLiAibG03NSIpLgorICBJbiBpMmMtb25seSBkcml2ZXJzLCBkcm9wIHRoZSBpMmNfaXNfaXNhX2FkYXB0ZXIgY2hlY2ssIGl0J3MKKyAgdXNlbGVzcy4KKyAgVGhlIGVycm9yTiBsYWJlbHMgYXJlIHJlZHVjZWQgdG8gdGhlIG51bWJlciBuZWVkZWQuIElmIHRoYXQgbnVtYmVyCisgIGlzIDIgKGkyYy1vbmx5IGRyaXZlcnMpLCBpdCBpcyBhZHZpc2VkIHRoYXQgdGhlIGxhYmVscyBhcmUgbmFtZWQKKyAgZXhpdCBhbmQgZXhpdF9mcmVlLiBGb3IgaTJjK2lzYSBkcml2ZXJzLCBsYWJlbHMgc2hvdWxkIGJlIG5hbWVkCisgIEVSUk9SMCwgRVJST1IxIGFuZCBFUlJPUjIuIERvbid0IGZvcmdldCB0byBwcm9wZXJseSBzZXQgZXJyIGJlZm9yZQorICBqdW1waW5nIHRvIGVycm9yIGxhYmVscy4gQnkgdGhlIHdheSwgbGFiZWxzIHNob3VsZCBiZSBsZWZ0LWFsaWduZWQuCisgIFVzZSBtZW1zZXQgdG8gZmlsbCB0aGUgY2xpZW50IGFuZCBkYXRhIGFyZWEgd2l0aCAweDAwLgorICBVc2UgaTJjX3NldF9jbGllbnRkYXRhIHRvIHNldCB0aGUgY2xpZW50IGRhdGEgKGFzIG9wcG9zZWQgdG8KKyAgYSBkaXJlY3QgYWNjZXNzIHRvIGNsaWVudC0+ZGF0YSkuCisgIFVzZSBzdHJsY3B5IGluc3RlYWQgb2Ygc3RyY3B5IHRvIGNvcHkgdGhlIGNsaWVudCBuYW1lLgorICBSZXBsYWNlIHRoZSBzeXNjdGwgZGlyZWN0b3J5IHJlZ2lzdHJhdGlvbiBieSBjYWxscyB0bworICBkZXZpY2VfY3JlYXRlX2ZpbGUuIE1vdmUgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgYW55CisgIHN5c2ZzIGZpbGUgY3JlYXRpb24uCisgIERyb3AgY2xpZW50LT5pZC4KKworKiBbSW5pdF0gTGltaXRzIG11c3Qgbm90IGJlIHNldCBieSB0aGUgZHJpdmVyIChjYW4gYmUgZG9uZSBsYXRlciBpbgorICB1c2VyLXNwYWNlKS4gQ2hpcCBzaG91bGQgbm90IGJlIHJlc2V0IGRlZmF1bHQgKGFsdGhvdWdoIGEgbW9kdWxlCisgIHBhcmFtZXRlciBtYXkgYmUgdXNlZCB0byBmb3JjZSBpcyksIGFuZCBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUKKyAgbGltaXRlZCB0byB0aGUgc3RyaWN0bHkgbmVjZXNzYXJ5IHN0ZXBzLgorCisqIFtEZXRhY2hdIEdldCByaWQgb2YgZGF0YSwgcmVtb3ZlIHRoZSBjYWxsIHRvCisgIGkyY19kZXJlZ2lzdGVyX2VudHJ5LgorCisqIFtVcGRhdGVdIERvbid0IGFjY2VzcyBjbGllbnQtPmRhdGEgZGlyZWN0bHksIHVzZQorICBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSBpbnN0ZWFkLgorCisqIFtJbnRlcmZhY2VdIEluaXQgZnVuY3Rpb24gc2hvdWxkIG5vdCBwcmludCBhbnl0aGluZy4gTWFrZSBzdXJlCisgIHRoZXJlIGlzIGEgTU9EVUxFX0xJQ0VOU0UoKSBsaW5lLCBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlCisgIChhZnRlciBNT0RVTEVfQVVUSE9SKCkgYW5kIE1PRFVMRV9ERVNDUklQVElPTigpLCBpbiB0aGlzIG9yZGVyKS4KKworQ29kaW5nIHBvbGljeToKKworKiBbQ29weXJpZ2h0XSBVc2UgKEMpLCBub3QgKGMpLCBmb3IgY29weXJpZ2h0LgorCisqIFtEZWJ1Zy9sb2ddIEdldCByaWQgb2YgI2lmZGVmIERFQlVHLyNlbmRpZiBjb25zdHJ1Y3RzIHdoZW5ldmVyIHlvdQorICBjYW4uIENhbGxzIHRvIHByaW50ay9wcl9kZWJ1ZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIGFyZSByZXBsYWNlZAorICBieSBjYWxscyB0byBkZXZfZGJnLiBIZXJlIGlzIGFuIGV4YW1wbGUgb24gaG93IHRvIGNhbGwgaXQgKHRha2VuCisgIGZyb20gbG03NV9kZXRlY3QpOgorICBkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGxtNzUgdXBkYXRlXG4iKTsKKyAgUmVwbGFjZSBvdGhlciBwcmludGsgY2FsbHMgd2l0aCB0aGUgZGV2X2luZm8sIGRldl9lcnIgb3IgZGV2X3dhcm4KKyAgZnVuY3Rpb24sIGFzIGFwcHJvcHJpYXRlLgorCisqIFtDb25zdGFudHNdIENvbnN0YW50cyBkZWZpbmVzIChyZWdpc3RlcnMsIGNvbnZlcnNpb25zLCBpbml0aWFsCisgIHZhbHVlcykgc2hvdWxkIGJlIGFsaWduZWQuIFRoaXMgZ3JlYXRseSBpbXByb3ZlcyByZWFkYWJpbGl0eS4KKyAgU2FtZSBnb2VzIGZvciB2YXJpYWJsZXMgZGVjbGFyYXRpb25zLiBBbGlnbm1lbnRzIGFyZSBhY2hpZXZlZCBieSB0aGUKKyAgbWVhbnMgb2YgdGFicywgbm90IHNwYWNlcy4gUmVtZW1iZXIgdGhhdCB0YWJzIGFyZSBzZXQgdG8gOCBpbiB0aGUKKyAgTGludXgga2VybmVsIGNvZGUuCisKKyogW1N0cnVjdHVyZSBkZWZpbml0aW9uXSBUaGUgbmFtZSBmaWVsZCBzaG91bGQgYmUgc3RhbmRhcmRpemVkLiBBbGwKKyAgbG93ZXJjYXNlIGFuZCBhcyBzaW1wbGUgYXMgdGhlIGRyaXZlciBuYW1lIGl0c2VsZiAoZS5nLiAibG03NSIpLgorCisqIFtMYXlvdXRdIEF2b2lkIGV4dHJhIGVtcHR5IGxpbmVzIGJldHdlZW4gY29tbWVudHMgYW5kIHdoYXQgdGhleQorICBjb21tZW50LiBSZXNwZWN0IHRoZSBjb2Rpbmcgc3R5bGUgKHNlZSBEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlKSwKKyAgaW4gcGFydGljdWxhciB3aGVuIGl0IGNvbWVzIHRvIHBsYWNpbmcgY3VybHkgYnJhY2VzLgorCisqIFtDb21tZW50c10gTWFrZSBzdXJlIHRoYXQgbm8gY29tbWVudCByZWZlcnMgdG8gYSBmaWxlIHRoYXQgaXNuJ3QKKyAgcGFydCBvZiB0aGUgTGludXggc291cmNlIHRyZWUgKHR5cGljYWxseSBkb2MvY2hpcHMvPGNoaXAgbmFtZT4pLAorICBhbmQgdGhhdCByZW1haW5pbmcgY29tbWVudHMgc3RpbGwgbWF0Y2ggdGhlIGNvZGUuIE1lcmdpbmcgY29tbWVudAorICBsaW5lcyB3aGVuIHBvc3NpYmxlIGlzIGVuY291cmFnZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbCBiL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjVlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbApAQCAtMCwwICsxLDIxNiBAQAorU01CdXMgUHJvdG9jb2wgU3VtbWFyeQorPT09PT09PT09PT09PT09PT09PT09PQorVGhlIGZvbGxvd2luZyBpcyBhIHN1bW1hcnkgb2YgdGhlIFNNQnVzIHByb3RvY29sLiBJdCBhcHBsaWVzIHRvCithbGwgcmV2aXNpb25zIG9mIHRoZSBwcm90b2NvbCAoMS4wLCAxLjEsIGFuZCAyLjApLgorQ2VydGFpbiBwcm90b2NvbCBmZWF0dXJlcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieQordGhpcyBwYWNrYWdlIGFyZSBicmllZmx5IGRlc2NyaWJlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCisKK1NvbWUgYWRhcHRlcnMgdW5kZXJzdGFuZCBvbmx5IHRoZSBTTUJ1cyAoU3lzdGVtIE1hbmFnZW1lbnQgQnVzKSBwcm90b2NvbCwKK3doaWNoIGlzIGEgc3Vic2V0IGZyb20gdGhlIEkyQyBwcm90b2NvbC4gRm9ydHVuYXRlbHksIG1hbnkgZGV2aWNlcyB1c2UKK29ubHkgdGhlIHNhbWUgc3Vic2V0LCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBwdXQgdGhlbSBvbiBhbiBTTUJ1cy4KK0lmIHlvdSB3cml0ZSBhIGRyaXZlciBmb3Igc29tZSBJMkMgZGV2aWNlLCBwbGVhc2UgdHJ5IHRvIHVzZSB0aGUgU01CdXMKK2NvbW1hbmRzIGlmIGF0IGFsbCBwb3NzaWJsZSAoaWYgdGhlIGRldmljZSB1c2VzIG9ubHkgdGhhdCBzdWJzZXQgb2YgdGhlCitJMkMgcHJvdG9jb2wpLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSB0aGUgZGV2aWNlIGRyaXZlciBvbiBib3RoCitTTUJ1cyBhZGFwdGVycyBhbmQgSTJDIGFkYXB0ZXJzICh0aGUgU01CdXMgY29tbWFuZCBzZXQgaXMgYXV0b21hdGljYWxseQordHJhbnNsYXRlZCB0byBJMkMgb24gSTJDIGFkYXB0ZXJzLCBidXQgcGxhaW4gSTJDIGNvbW1hbmRzIGNhbiBub3QgYmUKK2hhbmRsZWQgYXQgYWxsIG9uIG1vc3QgcHVyZSBTTUJ1cyBhZGFwdGVycykuCisKK0JlbG93IGlzIGEgbGlzdCBvZiBTTUJ1cyBjb21tYW5kcy4KKworS2V5IHRvIHN5bWJvbHMKKz09PT09PT09PT09PT09CisKK1MgICAgICgxIGJpdCkgOiBTdGFydCBiaXQKK1AgICAgICgxIGJpdCkgOiBTdG9wIGJpdAorUmQvV3IgKDEgYml0KSA6IFJlYWQvV3JpdGUgYml0LiBSZCBlcXVhbHMgMSwgV3IgZXF1YWxzIDAuCitBLCBOQSAoMSBiaXQpIDogQWNjZXB0IGFuZCByZXZlcnNlIGFjY2VwdCBiaXQuIAorQWRkciAgKDcgYml0cyk6IEkyQyA3IGJpdCBhZGRyZXNzLiBOb3RlIHRoYXQgdGhpcyBjYW4gYmUgZXhwYW5kZWQgYXMgdXN1YWwgdG8gCisgICAgICAgICAgICAgICAgZ2V0IGEgMTAgYml0IEkyQyBhZGRyZXNzLgorQ29tbSAgKDggYml0cyk6IENvbW1hbmQgYnl0ZSwgYSBkYXRhIGJ5dGUgd2hpY2ggb2Z0ZW4gc2VsZWN0cyBhIHJlZ2lzdGVyIG9uCisgICAgICAgICAgICAgICAgdGhlIGRldmljZS4KK0RhdGEgICg4IGJpdHMpOiBBIHBsYWluIGRhdGEgYnl0ZS4gU29tZXRpbWVzLCBJIHdyaXRlIERhdGFMb3csIERhdGFIaWdoCisgICAgICAgICAgICAgICAgZm9yIDE2IGJpdCBkYXRhLgorQ291bnQgKDggYml0cyk6IEEgZGF0YSBieXRlIGNvbnRhaW5pbmcgdGhlIGxlbmd0aCBvZiBhIGJsb2NrIG9wZXJhdGlvbi4KKworWy4uXTogRGF0YSBzZW50IGJ5IEkyQyBkZXZpY2UsIGFzIG9wcG9zZWQgdG8gZGF0YSBzZW50IGJ5IHRoZSBob3N0IGFkYXB0ZXIuCisKKworU01CdXMgV3JpdGUgUXVpY2sKKz09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VuZHMgYSBzaW5nbGUgYml0IHRvIHRoZSBkZXZpY2UsIGF0IHRoZSBwbGFjZSBvZiB0aGUgUmQvV3IgYml0LgorVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBSZWFkIFF1aWNrIGNvbW1hbmQuCisKK0EgQWRkciBSZC9XciBbQV0gUAorCisKK1NNQnVzIFJlYWQgQnl0ZQorPT09PT09PT09PT09PT09CisKK1RoaXMgcmVhZHMgYSBzaW5nbGUgYnl0ZSBmcm9tIGEgZGV2aWNlLCB3aXRob3V0IHNwZWNpZnlpbmcgYSBkZXZpY2UKK3JlZ2lzdGVyLiBTb21lIGRldmljZXMgYXJlIHNvIHNpbXBsZSB0aGF0IHRoaXMgaW50ZXJmYWNlIGlzIGVub3VnaDsgZm9yCitvdGhlcnMsIGl0IGlzIGEgc2hvcnRoYW5kIGlmIHlvdSB3YW50IHRvIHJlYWQgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgaW4KK3RoZSBwcmV2aW91cyBTTUJ1cyBjb21tYW5kLgorCitTIEFkZHIgUmQgW0FdIFtEYXRhXSBOQSBQCisKKworU01CdXMgV3JpdGUgQnl0ZQorPT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSByZXZlcnNlIG9mIFJlYWQgQnl0ZTogaXQgc2VuZHMgYSBzaW5nbGUgYnl0ZSB0byBhIGRldmljZS4KK1NlZSBSZWFkIEJ5dGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1MgQWRkciBXciBbQV0gRGF0YSBbQV0gUAorCisKK1NNQnVzIFJlYWQgQnl0ZSBEYXRhCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSBhIGRldmljZSwgZnJvbSBhIGRlc2lnbmF0ZWQgcmVnaXN0ZXIuCitUaGUgcmVnaXN0ZXIgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0gYnl0ZS4KKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSBTIEFkZHIgUmQgW0FdIFtEYXRhXSBOQSBQCisKKworU01CdXMgUmVhZCBXb3JkIERhdGEKKz09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgY29tbWFuZCBpcyB2ZXJ5IGxpa2UgUmVhZCBCeXRlIERhdGE7IGFnYWluLCBkYXRhIGlzIHJlYWQgZnJvbSBhCitkZXZpY2UsIGZyb20gYSBkZXNpZ25hdGVkIHJlZ2lzdGVyIHRoYXQgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0KK2J5dGUuIEJ1dCB0aGlzIHRpbWUsIHRoZSBkYXRhIGlzIGEgY29tcGxldGUgd29yZCAoMTYgYml0cykuCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gUyBBZGRyIFJkIFtBXSBbRGF0YUxvd10gQSBbRGF0YUhpZ2hdIE5BIFAKKworCitTTUJ1cyBXcml0ZSBCeXRlIERhdGEKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHdyaXRlcyBhIHNpbmdsZSBieXRlIHRvIGEgZGV2aWNlLCB0byBhIGRlc2lnbmF0ZWQgcmVnaXN0ZXIuIFRoZQorcmVnaXN0ZXIgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0gYnl0ZS4gVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YKK3RoZSBSZWFkIEJ5dGUgRGF0YSBjb21tYW5kLgorCitTIEFkZHIgV3IgW0FdIENvbW0gW0FdIERhdGEgW0FdIFAKKworCitTTUJ1cyBXcml0ZSBXb3JkIERhdGEKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvcGVyYXRpb24gb2YgdGhlIFJlYWQgV29yZCBEYXRhIGNvbW1hbmQuIDE2IGJpdHMKK29mIGRhdGEgaXMgcmVhZCBmcm9tIGEgZGV2aWNlLCBmcm9tIGEgZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIAorc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0gYnl0ZS4gCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gRGF0YUxvdyBbQV0gRGF0YUhpZ2ggW0FdIFAKKworCitTTUJ1cyBQcm9jZXNzIENhbGwKKz09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvbW1hbmQgc2VsZWN0cyBhIGRldmljZSByZWdpc3RlciAodGhyb3VnaCB0aGUgQ29tbSBieXRlKSwgc2VuZHMKKzE2IGJpdHMgb2YgZGF0YSB0byBpdCwgYW5kIHJlYWRzIDE2IGJpdHMgb2YgZGF0YSBpbiByZXR1cm4uCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gRGF0YUxvdyBbQV0gRGF0YUhpZ2ggW0FdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIEFkZHIgUmQgW0FdIFtEYXRhTG93XSBBIFtEYXRhSGlnaF0gTkEgUAorCisKK1NNQnVzIEJsb2NrIFJlYWQKKz09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIHJlYWRzIGEgYmxvY2sgb2YgdXAgdG8gMzIgYnl0ZXMgZnJvbSBhIGRldmljZSwgZnJvbSBhIAorZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZSBDb21tIGJ5dGUuIFRoZSBhbW91bnQKK29mIGRhdGEgaXMgc3BlY2lmaWVkIGJ5IHRoZSBkZXZpY2UgaW4gdGhlIENvdW50IGJ5dGUuCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gCisgICAgICAgICAgIFMgQWRkciBSZCBbQV0gW0NvdW50XSBBIFtEYXRhXSBBIFtEYXRhXSBBIC4uLiBBIFtEYXRhXSBOQSBQCisKKworU01CdXMgQmxvY2sgV3JpdGUKKz09PT09PT09PT09PT09PT09CisKK1RoZSBvcHBvc2l0ZSBvZiB0aGUgQmxvY2sgUmVhZCBjb21tYW5kLCB0aGlzIHdyaXRlcyB1cCB0byAzMiBieXRlcyB0byAKK2EgZGV2aWNlLCB0byBhIGRlc2lnbmF0ZWQgcmVnaXN0ZXIgdGhhdCBpcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUKK0NvbW0gYnl0ZS4gVGhlIGFtb3VudCBvZiBkYXRhIGlzIHNwZWNpZmllZCBpbiB0aGUgQ291bnQgYnl0ZS4KKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSBDb3VudCBbQV0gRGF0YSBbQV0gRGF0YSBbQV0gLi4uIFtBXSBEYXRhIFtBXSBQCisKKworU01CdXMgQmxvY2sgUHJvY2VzcyBDYWxsCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworU01CdXMgQmxvY2sgUHJvY2VzcyBDYWxsIHdhcyBpbnRyb2R1Y2VkIGluIFJldmlzaW9uIDIuMCBvZiB0aGUgc3BlY2lmaWNhdGlvbi4KKworVGhpcyBjb21tYW5kIHNlbGVjdHMgYSBkZXZpY2UgcmVnaXN0ZXIgKHRocm91Z2ggdGhlIENvbW0gYnl0ZSksIHNlbmRzCisxIHRvIDMxIGJ5dGVzIG9mIGRhdGEgdG8gaXQsIGFuZCByZWFkcyAxIHRvIDMxIGJ5dGVzIG9mIGRhdGEgaW4gcmV0dXJuLgorCitTIEFkZHIgV3IgW0FdIENvbW0gW0FdIENvdW50IFtBXSBEYXRhIFtBXSAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBBZGRyIFJkIFtBXSBbQ291bnRdIEEgW0RhdGFdIC4uLiBBIFAKKworCitTTUJ1cyBIb3N0IE5vdGlmeQorPT09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIGlzIHNlbnQgZnJvbSBhIFNNQnVzIGRldmljZSBhY3RpbmcgYXMgYSBtYXN0ZXIgdG8gdGhlCitTTUJ1cyBob3N0IGFjdGluZyBhcyBhIHNsYXZlLgorSXQgaXMgdGhlIHNhbWUgZm9ybSBhcyBXcml0ZSBXb3JkLCB3aXRoIHRoZSBjb21tYW5kIGNvZGUgcmVwbGFjZWQgYnkgdGhlCithbGVydGluZyBkZXZpY2UncyBhZGRyZXNzLgorCitbU10gW0hvc3RBZGRyXSBbV3JdIEEgW0RldkFkZHJdIEEgW0RhdGFMb3ddIEEgW0RhdGFIaWdoXSBBIFtQXQorCisKK1BhY2tldCBFcnJvciBDaGVja2luZyAoUEVDKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CitQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgd2FzIGludHJvZHVjZWQgaW4gUmV2aXNpb24gMS4xIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorCitQRUMgYWRkcyBhIENSQy04IGVycm9yLWNoZWNraW5nIGJ5dGUgdG8gYWxsIHRyYW5zZmVycy4KKworCitBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wgKEFSUCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbCB3YXMgaW50cm9kdWNlZCBpbiBSZXZpc2lvbiAyLjAgb2YKK3RoZSBzcGVjaWZpY2F0aW9uLiBJdCBpcyBhIGhpZ2hlci1sYXllciBwcm90b2NvbCB3aGljaCB1c2VzIHRoZQorbWVzc2FnZXMgYWJvdmUuCisKK0FSUCBhZGRzIGRldmljZSBlbnVtZXJhdGlvbiBhbmQgZHluYW1pYyBhZGRyZXNzIGFzc2lnbm1lbnQgdG8KK3RoZSBwcm90b2NvbC4gQWxsIEFSUCBjb21tdW5pY2F0aW9ucyB1c2Ugc2xhdmUgYWRkcmVzcyAweDYxIGFuZAorcmVxdWlyZSBQRUMgY2hlY2tzdW1zLgorCisKK0kyQyBCbG9jayBUcmFuc2FjdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBmb2xsb3dpbmcgSTJDIGJsb2NrIHRyYW5zYWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZQorU01CdXMgbGF5ZXIgYW5kIGFyZSBkZXNjcmliZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLgorSTJDIGJsb2NrIHRyYW5zYWN0aW9ucyBkbyBub3QgbGltaXQgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZAorYnV0IHRoZSBTTUJ1cyBsYXllciBwbGFjZXMgYSBsaW1pdCBvZiAzMiBieXRlcy4KKworCitJMkMgQmxvY2sgUmVhZAorPT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIHJlYWRzIGEgYmxvY2sgb2YgYnl0ZXMgZnJvbSBhIGRldmljZSwgZnJvbSBhIAorZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZSBDb21tIGJ5dGUuCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gCisgICAgICAgICAgIFMgQWRkciBSZCBbQV0gW0RhdGFdIEEgW0RhdGFdIEEgLi4uIEEgW0RhdGFdIE5BIFAKKworCitJMkMgQmxvY2sgUmVhZCAoMiBDb21tIGJ5dGVzKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIHJlYWRzIGEgYmxvY2sgb2YgYnl0ZXMgZnJvbSBhIGRldmljZSwgZnJvbSBhIAorZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZSB0d28gQ29tbSBieXRlcy4KKworUyBBZGRyIFdyIFtBXSBDb21tMSBbQV0gQ29tbTIgW0FdIAorICAgICAgICAgICBTIEFkZHIgUmQgW0FdIFtEYXRhXSBBIFtEYXRhXSBBIC4uLiBBIFtEYXRhXSBOQSBQCisKKworSTJDIEJsb2NrIFdyaXRlCis9PT09PT09PT09PT09PT0KKworVGhlIG9wcG9zaXRlIG9mIHRoZSBCbG9jayBSZWFkIGNvbW1hbmQsIHRoaXMgd3JpdGVzIGJ5dGVzIHRvIAorYSBkZXZpY2UsIHRvIGEgZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZQorQ29tbSBieXRlLiBOb3RlIHRoYXQgY29tbWFuZCBsZW5ndGhzIG9mIDAsIDIsIG9yIG1vcmUgYnl0ZXMgYXJlCitzdXBwb3J0ZWQgYXMgdGhleSBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBkYXRhLgorCitTIEFkZHIgV3IgW0FdIENvbW0gW0FdIERhdGEgW0FdIERhdGEgW0FdIC4uLiBbQV0gRGF0YSBbQV0gUAorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3N1bW1hcnkgYi9Eb2N1bWVudGF0aW9uL2kyYy9zdW1tYXJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZGRlODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9zdW1tYXJ5CkBAIC0wLDAgKzEsNzUgQEAKK1RoaXMgaXMgYW4gZXhwbGFuYXRpb24gb2Ygd2hhdCBpMmMgaXMsIGFuZCB3aGF0IGlzIHN1cHBvcnRlZCBpbiB0aGlzIHBhY2thZ2UuCisKK0kyQyBhbmQgU01CdXMKKz09PT09PT09PT09PT0KKworSTJDIChwcm9ub3VuY2U6IEkgc3F1YXJlZCBDKSBpcyBhIHByb3RvY29sIGRldmVsb3BlZCBieSBQaGlsaXBzLiBJdCBpcyBhIAorc2xvdyB0d28td2lyZSBwcm90b2NvbCAoMTAtNDAwIGtIeiksIGJ1dCBpdCBzdWZmaWNlcyBmb3IgbWFueSB0eXBlcyBvZiAKK2RldmljZXMuCisKK1NNQnVzIChTeXN0ZW0gTWFuYWdlbWVudCBCdXMpIGlzIGEgc3Vic2V0IG9mIHRoZSBJMkMgcHJvdG9jb2wuIE1hbnkKK21vZGVybiBtYWluYm9hcmRzIGhhdmUgYSBTeXN0ZW0gTWFuYWdlbWVudCBCdXMuIFRoZXJlIGFyZSBhIGxvdCBvZiAKK2RldmljZXMgd2hpY2ggY2FuIGJlIGNvbm5lY3RlZCB0byBhIFNNQnVzOyB0aGUgbW9zdCBub3RhYmxlIGFyZSBtb2Rlcm4gCittZW1vcnkgY2hpcHMgd2l0aCBFRVBST00gbWVtb3JpZXMgYW5kIGNoaXBzIGZvciBoYXJkd2FyZSBtb25pdG9yaW5nLgorCitCZWNhdXNlIHRoZSBTTUJ1cyBpcyBqdXN0IGEgc3BlY2lhbCBjYXNlIG9mIHRoZSBnZW5lcmFsaXplZCBJMkMgYnVzLCB3ZQorY2FuIHNpbXVsYXRlIHRoZSBTTUJ1cyBwcm90b2NvbCBvbiBwbGFpbiBJMkMgYnVzc2VzLiBUaGUgcmV2ZXJzZSBpcworcmVncmV0ZnVsbHkgaW1wb3NzaWJsZS4KKworCitUZXJtaW5vbG9neQorPT09PT09PT09PT0KKworV2hlbiB3ZSB0YWxrIGFib3V0IEkyQywgd2UgdXNlIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgIEJ1cyAgICAtPiBBbGdvcml0aG0KKyAgICAgICAgICAgIEFkYXB0ZXIKKyAgRGV2aWNlIC0+IERyaXZlcgorICAgICAgICAgICAgQ2xpZW50CisKK0FuIEFsZ29yaXRobSBkcml2ZXIgY29udGFpbnMgZ2VuZXJhbCBjb2RlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGEgd2hvbGUgY2xhc3MKK29mIEkyQyBhZGFwdGVycy4gRWFjaCBzcGVjaWZpYyBhZGFwdGVyIGRyaXZlciBkZXBlbmRzIG9uIG9uZSBhbGdvcml0aG0KK2RyaXZlci4KK0EgRHJpdmVyIGRyaXZlciAoeWVzLCB0aGlzIHNvdW5kcyByaWRpY3Vsb3VzLCBzb3JyeSkgY29udGFpbnMgdGhlIGdlbmVyYWwKK2NvZGUgdG8gYWNjZXNzIHNvbWUgdHlwZSBvZiBkZXZpY2UuIEVhY2ggZGV0ZWN0ZWQgZGV2aWNlIGdldHMgaXRzIG93bgorZGF0YSBpbiB0aGUgQ2xpZW50IHN0cnVjdHVyZS4gVXN1YWxseSwgRHJpdmVyIGFuZCBDbGllbnQgYXJlIG1vcmUgY2xvc2VseQoraW50ZWdyYXRlZCB0aGFuIEFsZ29yaXRobSBhbmQgQWRhcHRlci4KKworRm9yIGEgZ2l2ZW4gY29uZmlndXJhdGlvbiwgeW91IHdpbGwgbmVlZCBhIGRyaXZlciBmb3IgeW91ciBJMkMgYnVzICh1c3VhbGx5CithIHNlcGFyYXRlIEFkYXB0ZXIgYW5kIEFsZ29yaXRobSBkcml2ZXIpLCBhbmQgZHJpdmVycyBmb3IgeW91ciBJMkMgZGV2aWNlcworKHVzdWFsbHkgb25lIGRyaXZlciBmb3IgZWFjaCBkZXZpY2UpLiBUaGVyZSBhcmUgbm8gSTJDIGRldmljZSBkcml2ZXJzCitpbiB0aGlzIHBhY2thZ2UuIFNlZSB0aGUgbG1fc2Vuc29ycyBwcm9qZWN0IGh0dHA6Ly93d3cubG0tc2Vuc29ycy5udQorZm9yIGRldmljZSBkcml2ZXJzLgorCisKK0luY2x1ZGVkIEJ1cyBEcml2ZXJzCis9PT09PT09PT09PT09PT09PT09PQorTm90ZSB0aGF0IG9ubHkgc3RhYmxlIGRyaXZlcnMgYXJlIHBhdGNoZWQgaW50byB0aGUga2VybmVsIGJ5ICdta3BhdGNoJy4KKworCitCYXNlIG1vZHVsZXMKKy0tLS0tLS0tLS0tLQorCitpMmMtY29yZTogVGhlIGJhc2ljIEkyQyBjb2RlLCBpbmNsdWRpbmcgdGhlIC9wcm9jL2J1cy9pMmMqIGludGVyZmFjZQoraTJjLWRldjogIFRoZSAvZGV2L2kyYy0qIGludGVyZmFjZQoraTJjLXByb2M6IFRoZSAvcHJvYy9zeXMvZGV2L3NlbnNvcnMgaW50ZXJmYWNlIGZvciBkZXZpY2UgKGNsaWVudCkgZHJpdmVycworCitBbGdvcml0aG0gZHJpdmVycworLS0tLS0tLS0tLS0tLS0tLS0KKworaTJjLWFsZ28tOHh4OiAgICBBbiBhbGdvcml0aG0gZm9yIENQTSdzIEkyQyBkZXZpY2UgaW4gTW90b3JvbGEgOHh4IHByb2Nlc3NvcnMgKE5PVCBCVUlMVCBCWSBERUZBVUxUKQoraTJjLWFsZ28tYml0OiAgICBBIGJpdC1iYW5naW5nIGFsZ29yaXRobQoraTJjLWFsZ28tcGNmOiAgICBBIFBDRiA4NTg0IHN0eWxlIGFsZ29yaXRobQoraTJjLWFsZ28taWJtX29jcDogQW4gYWxnb3JpdGhtIGZvciB0aGUgSTJDIGRldmljZSBpbiBJQk0gNHh4IHByb2Nlc3NvcnMgKE5PVCBCVUlMVCBCWSBERUZBVUxUKQorCitBZGFwdGVyIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLQorCitpMmMtZWxla3RvcjogICAgIEVsZWt0b3IgSVNBIGNhcmQgKHVzZXMgaTJjLWFsZ28tcGNmKQoraTJjLWVsdjogICAgICAgICBFTFYgcGFyYWxsZWwgcG9ydCBhZGFwdGVyICh1c2VzIGkyYy1hbGdvLWJpdCkKK2kyYy1wY2YtZXBwOiAgICAgUENGODU4NCBvbiBhIEVQUCBwYXJhbGxlbCBwb3J0ICh1c2VzIGkyYy1hbGdvLXBjZikgKE5PVCBta3BhdGNoZWQpCitpMmMtcGhpbGlwcy1wYXI6IFBoaWxpcHMgc3R5bGUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyICh1c2VzIGkyYy1hbGdvLWJpdCkKK2kyYy1hZGFwLWlibV9vY3A6IElCTSA0eHggcHJvY2Vzc29yIEkyQyBkZXZpY2UgKHVzZXMgaTJjLWFsZ28taWJtX29jcCkgKE5PVCBCVUlMVCBCWSBERUZBVUxUKQoraTJjLXBwb3J0OiAgICAgICBQcmltaXRpdmUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyICh1c2VzIGkyYy1hbGdvLWJpdCkKK2kyYy1ycHg6ICAgICAgICAgUlBYIGJvYXJkIE1vdG9yb2xhIDh4eCBJMkMgZGV2aWNlICh1c2VzIGkyYy1hbGdvLTh4eCkgKE5PVCBCVUlMVCBCWSBERUZBVUxUKQoraTJjLXZlbGxlbWFuOiAgICBWZWxsZW1hbiBLODAwMCBwYXJhbGxlbCBwb3J0IGFkYXB0ZXIgKHVzZXMgaTJjLWFsZ28tYml0KQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2kyYy9zeXNmcy1pbnRlcmZhY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2NDAwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3N5c2ZzLWludGVyZmFjZQpAQCAtMCwwICsxLDI3NCBAQAorTmFtaW5nIGFuZCBkYXRhIGZvcm1hdCBzdGFuZGFyZHMgZm9yIHN5c2ZzIGZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxpYnNlbnNvcnMgbGlicmFyeSBvZmZlcnMgYW4gaW50ZXJmYWNlIHRvIHRoZSByYXcgc2Vuc29ycyBkYXRhCit0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFNlZSBsaWJzZW5zb3JzIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBmb3IKK21vcmUgZnVydGhlciBpbmZvcm1hdGlvbi4gQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50LCBsaWJzZW5zb3JzCisoZnJvbSBsbV9zZW5zb3JzIDIuOC4zKSBpcyBoZWF2aWx5IGNoaXAtZGVwZW5kYW50LiBBZGRpbmcgb3IgdXBkYXRpbmcKK3N1cHBvcnQgZm9yIGFueSBnaXZlbiBjaGlwIHJlcXVpcmVzIG1vZGlmeWluZyB0aGUgbGlicmFyeSdzIGNvZGUuCitUaGlzIGlzIGJlY2F1c2UgbGlic2Vuc29ycyB3YXMgd3JpdHRlbiBmb3IgdGhlIHByb2NmcyBpbnRlcmZhY2UKK29sZGVyIGtlcm5lbCBtb2R1bGVzIHdlcmUgdXNpbmcsIHdoaWNoIHdhc24ndCBzdGFuZGFyZGl6ZWQgZW5vdWdoLgorUmVjZW50IHZlcnNpb25zIG9mIGxpYnNlbnNvcnMgKGZyb20gbG1fc2Vuc29ycyAyLjguMiBhbmQgbGF0ZXIpIGhhdmUKK3N1cHBvcnQgZm9yIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHRob3VnaC4KKworVGhlIG5ldyBzeXNmcyBpbnRlcmZhY2Ugd2FzIGRlc2lnbmVkIHRvIGJlIGFzIGNoaXAtaW5kZXBlbmRhbnQgYXMKK3Bvc3NpYmxlLgorCitOb3RlIHRoYXQgbW90aGVyYm9hcmRzIHZhcnkgd2lkZWx5IGluIHRoZSBjb25uZWN0aW9ucyB0byBzZW5zb3IgY2hpcHMuCitUaGVyZSBpcyBubyBzdGFuZGFyZCB0aGF0IGVuc3VyZXMsIGZvciBleGFtcGxlLCB0aGF0IHRoZSBzZWNvbmQKK3RlbXBlcmF0dXJlIHNlbnNvciBpcyBjb25uZWN0ZWQgdG8gdGhlIENQVSwgb3IgdGhhdCB0aGUgc2Vjb25kIGZhbiBpcyBvbgordGhlIENQVS4gQWxzbywgc29tZSB2YWx1ZXMgcmVwb3J0ZWQgYnkgdGhlIGNoaXBzIG5lZWQgc29tZSBjb21wdXRhdGlvbgorYmVmb3JlIHRoZXkgbWFrZSBmdWxsIHNlbnNlLiBGb3IgZXhhbXBsZSwgbW9zdCBjaGlwcyBjYW4gb25seSBtZWFzdXJlCit2b2x0YWdlcyBiZXR3ZWVuIDAgYW5kICs0Vi4gT3RoZXIgdm9sdGFnZXMgYXJlIHNjYWxlZCBiYWNrIGludG8gdGhhdAorcmFuZ2UgdXNpbmcgZXh0ZXJuYWwgcmVzaXN0b3JzLiBTaW5jZSB0aGUgdmFsdWVzIG9mIHRoZXNlIHJlc2lzdG9ycworY2FuIGNoYW5nZSBmcm9tIG1vdGhlcmJvYXJkIHRvIG1vdGhlcmJvYXJkLCB0aGUgY29udmVyc2lvbnMgY2Fubm90IGJlCitoYXJkIGNvZGVkIGludG8gdGhlIGRyaXZlciBhbmQgaGF2ZSB0byBiZSBkb25lIGluIHVzZXIgc3BhY2UuCisKK0ZvciB0aGlzIHJlYXNvbiwgZXZlbiBpZiB3ZSBhaW0gYXQgYSBjaGlwLWluZGVwZW5kYW50IGxpYnNlbnNvcnMsIGl0IHdpbGwKK3N0aWxsIHJlcXVpcmUgYSBjb25maWd1cmF0aW9uIGZpbGUgKGUuZy4gL2V0Yy9zZW5zb3JzLmNvbmYpIGZvciBwcm9wZXIKK3ZhbHVlcyBjb252ZXJzaW9uLCBsYWJlbGluZyBvZiBpbnB1dHMgYW5kIGhpZGluZyBvZiB1bnVzZWQgaW5wdXRzLgorCitBbiBhbHRlcm5hdGl2ZSBtZXRob2QgdGhhdCBzb21lIHByb2dyYW1zIHVzZSBpcyB0byBhY2Nlc3MgdGhlIHN5c2ZzCitmaWxlcyBkaXJlY3RseS4gVGhpcyBkb2N1bWVudCBicmllZmx5IGRlc2NyaWJlcyB0aGUgc3RhbmRhcmRzIHRoYXQgdGhlCitkcml2ZXJzIGZvbGxvdywgc28gdGhhdCBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIGNhbiBzY2FuIGZvciBlbnRyaWVzIGFuZAorYWNjZXNzIHRoaXMgZGF0YSBpbiBhIHNpbXBsZSBhbmQgY29uc2lzdGVudCB3YXkuIFRoYXQgc2FpZCwgc3VjaCBwcm9ncmFtcword2lsbCBoYXZlIHRvIGltcGxlbWVudCBjb252ZXJzaW9uLCBsYWJlbGluZyBhbmQgaGlkaW5nIG9mIGlucHV0cy4gRm9yCit0aGlzIHJlYXNvbiwgaXQgaXMgc3RpbGwgbm90IHJlY29tbWVuZGVkIHRvIGJ5cGFzcyB0aGUgbGlicmFyeS4KKworSWYgeW91IGFyZSBkZXZlbG9waW5nIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHBsZWFzZSBzZW5kIHVzIGZlZWRiYWNrIG9uCit0aGlzIHN0YW5kYXJkLgorCitOb3RlIHRoYXQgdGhpcyBzdGFuZGFyZCBpc24ndCBjb21wbGV0ZWx5IGVzdGFibGlzaGVkIHlldCwgc28gaXQgaXMgc3ViamVjdAordG8gY2hhbmdlcywgZXZlbiBpbXBvcnRhbnQgb25lcy4gT25lIG1vcmUgcmVhc29uIHRvIHVzZSB0aGUgbGlicmFyeSBpbnN0ZWFkCitvZiBhY2Nlc3Npbmcgc3lzZnMgZmlsZXMgZGlyZWN0bHkuCisKK0VhY2ggY2hpcCBnZXRzIGl0cyBvd24gZGlyZWN0b3J5IGluIHRoZSBzeXNmcyAvc3lzL2RldmljZXMgdHJlZS4gIFRvCitmaW5kIGFsbCBzZW5zb3IgY2hpcHMsIGl0IGlzIGVhc2llciB0byBmb2xsb3cgdGhlIHN5bWxpbmtzIGZyb20KKy9zeXMvaTJjL2RldmljZXMvCisKK0FsbCBzeXNmcyB2YWx1ZXMgYXJlIGZpeGVkIHBvaW50IG51bWJlcnMuICBUbyBnZXQgdGhlIHRydWUgdmFsdWUgb2Ygc29tZQorb2YgdGhlIHZhbHVlcywgeW91IHNob3VsZCBkaXZpZGUgYnkgdGhlIHNwZWNpZmllZCB2YWx1ZS4KKworVGhlcmUgaXMgb25seSBvbmUgdmFsdWUgcGVyIGZpbGUsIHVubGlrZSB0aGUgb2xkZXIgL3Byb2Mgc3BlY2lmaWNhdGlvbi4KK1RoZSBjb21tb24gc2NoZW1lIGZvciBmaWxlcyBuYW1pbmcgaXM6IDx0eXBlPjxudW1iZXI+XzxpdGVtPi4gVXN1YWwKK3R5cGVzIGZvciBzZW5zb3IgY2hpcHMgYXJlICJpbiIgKHZvbHRhZ2UpLCAidGVtcCIgKHRlbXBlcmF0dXJlKSBhbmQKKyJmYW4iIChmYW4pLiBVc3VhbCBpdGVtcyBhcmUgImlucHV0IiAobWVhc3VyZWQgdmFsdWUpLCAibWF4IiAoaGlnaAordGhyZXNob2xkLCAibWluIiAobG93IHRocmVzaG9sZCkuIE51bWJlcmluZyB1c3VhbGx5IHN0YXJ0cyBmcm9tIDEsCitleGNlcHQgZm9yIHZvbHRhZ2VzIHdoaWNoIHN0YXJ0IGZyb20gMCAoYmVjYXVzZSBtb3N0IGRhdGEgc2hlZXRzIHVzZQordGhpcykuIEEgbnVtYmVyIGlzIGFsd2F5cyB1c2VkIGZvciBlbGVtZW50cyB0aGF0IGNhbiBiZSBwcmVzZW50IG1vcmUKK3RoYW4gb25jZSwgZXZlbiBpZiB0aGVyZSBpcyBhIHNpbmdsZSBlbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlIG9uIHRoZQorc3BlY2lmaWMgY2hpcC4gT3RoZXIgZmlsZXMgZG8gbm90IHJlZmVyIHRvIGEgc3BlY2lmaWMgZWxlbWVudCwgc28KK3RoZXkgaGF2ZSBhIHNpbXBsZSBuYW1lLCBhbmQgbm8gbnVtYmVyLgorCitBbGFybXMgYXJlIGRpcmVjdCBpbmRpY2F0aW9ucyByZWFkIGZyb20gdGhlIGNoaXBzLiBUaGUgZHJpdmVycyBkbyBOT1QKK21ha2UgY29tcGFyaXNvbnMgb2YgcmVhZGluZ3MgdG8gdGhyZXNob2xkcy4gVGhpcyBhbGxvd3MgdmlvbGF0aW9ucworYmV0d2VlbiByZWFkaW5ncyB0byBiZSBjYXVnaHQgYW5kIGFsYXJtZWQuIFRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGFuCithbGFybSAoZm9yIGV4YW1wbGUsIHdoZXRoZXIgYSB0aHJlc2hvbGQgbXVzdCBiZSBtZXQgb3IgbXVzdCBiZSBleGNlZWRlZAordG8gY2F1c2UgYW4gYWxhcm0pIGlzIGNoaXAtZGVwZW5kZW50LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKioqKioqKioqKioqCisqIFZvbHRhZ2VzICoKKyoqKioqKioqKioqKgorCitpblswLThdX21pbglWb2x0YWdlIG1pbiB2YWx1ZS4KKwkJVW5pdDogbWlsbGl2b2x0CisJCVJlYWQvV3JpdGUKKwkJCitpblswLThdX21heAlWb2x0YWdlIG1heCB2YWx1ZS4KKwkJVW5pdDogbWlsbGl2b2x0CisJCVJlYWQvV3JpdGUKKwkJCitpblswLThdX2lucHV0CVZvbHRhZ2UgaW5wdXQgdmFsdWUuCisJCVVuaXQ6IG1pbGxpdm9sdAorCQlSZWFkIG9ubHkKKwkJQWN0dWFsIHZvbHRhZ2UgZGVwZW5kcyBvbiB0aGUgc2NhbGluZyByZXNpc3RvcnMgb24gdGhlCisJCW1vdGhlcmJvYXJkLCBhcyByZWNvbW1lbmRlZCBpbiB0aGUgY2hpcCBkYXRhc2hlZXQuCisJCVRoaXMgdmFyaWVzIGJ5IGNoaXAgYW5kIGJ5IG1vdGhlcmJvYXJkLgorCQlCZWNhdXNlIG9mIHRoaXMgdmFyaWF0aW9uLCB2YWx1ZXMgYXJlIGdlbmVyYWxseSBOT1Qgc2NhbGVkCisJCWJ5IHRoZSBjaGlwIGRyaXZlciwgYW5kIG11c3QgYmUgZG9uZSBieSB0aGUgYXBwbGljYXRpb24uCisJCUhvd2V2ZXIsIHNvbWUgZHJpdmVycyAobm90YWJseSBsbTg3IGFuZCB2aWE2ODZhKQorCQlkbyBzY2FsZSwgd2l0aCB2YXJpb3VzIGRlZ3JlZXMgb2Ygc3VjY2Vzcy4KKwkJVGhlc2UgZHJpdmVycyB3aWxsIG91dHB1dCB0aGUgYWN0dWFsIHZvbHRhZ2UuCisKKwkJVHlwaWNhbCB1c2FnZToKKwkJCWluMF8qCUNQVSAjMSB2b2x0YWdlIChub3Qgc2NhbGVkKQorCQkJaW4xXyoJQ1BVICMyIHZvbHRhZ2UgKG5vdCBzY2FsZWQpCisJCQlpbjJfKgkzLjNWIG5vbWluYWwgKG5vdCBzY2FsZWQpCisJCQlpbjNfKgk1LjBWIG5vbWluYWwgKHNjYWxlZCkKKwkJCWluNF8qCTEyLjBWIG5vbWluYWwgKHNjYWxlZCkKKwkJCWluNV8qCS0xMi4wViBub21pbmFsIChzY2FsZWQpCisJCQlpbjZfKgktNS4wViBub21pbmFsIChzY2FsZWQpCisJCQlpbjdfKgl2YXJpZXMKKwkJCWluOF8qCXZhcmllcworCitjcHVbMC0xXV92aWQJQ1BVIGNvcmUgcmVmZXJlbmNlIHZvbHRhZ2UuCisJCVVuaXQ6IG1pbGxpdm9sdAorCQlSZWFkIG9ubHkuCisJCU5vdCBhbHdheXMgY29ycmVjdC4KKwordnJtCQlWb2x0YWdlIFJlZ3VsYXRvciBNb2R1bGUgdmVyc2lvbiBudW1iZXIuIAorCQlSZWFkIG9ubHkuCisJCVR3byBkaWdpdCBudW1iZXIsIGZpcnN0IGlzIG1ham9yIHZlcnNpb24sIHNlY29uZCBpcworCQltaW5vciB2ZXJzaW9uLgorCQlBZmZlY3RzIHRoZSB3YXkgdGhlIGRyaXZlciBjYWxjdWxhdGVzIHRoZSBDUFUgY29yZSByZWZlcmVuY2UKKwkJdm9sdGFnZSBmcm9tIHRoZSB2aWQgcGlucy4KKworCisqKioqKioqKgorKiBGYW5zICoKKyoqKioqKioqCisKK2ZhblsxLTNdX21pbglGYW4gbWluaW11bSB2YWx1ZQorCQlVbml0OiByZXZvbHV0aW9uL21pbiAoUlBNKQorCQlSZWFkL1dyaXRlLgorCitmYW5bMS0zXV9pbnB1dAlGYW4gaW5wdXQgdmFsdWUuCisJCVVuaXQ6IHJldm9sdXRpb24vbWluIChSUE0pCisJCVJlYWQgb25seS4KKworZmFuWzEtM11fZGl2CUZhbiBkaXZpc29yLgorCQlJbnRlZ2VyIHZhbHVlIGluIHBvd2VycyBvZiB0d28gKDEsIDIsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCkuCisJCVNvbWUgY2hpcHMgb25seSBzdXBwb3J0IHZhbHVlcyAxLCAyLCA0IGFuZCA4LgorCQlOb3RlIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBhbiBpbnRlcm5hbCBjbG9jayBkaXZpc29yLCB3aGljaAorCQlhZmZlY3RzIHRoZSBtZWFzdXJhYmxlIHNwZWVkIHJhbmdlLCBub3QgdGhlIHJlYWQgdmFsdWUuCisKKyoqKioqKioKKyogUFdNICoKKyoqKioqKioKKworcHdtWzEtM10JUHVsc2Ugd2lkdGggbW9kdWxhdGlvbiBmYW4gY29udHJvbC4KKwkJSW50ZWdlciB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCB0byAyNTUKKwkJUmVhZC9Xcml0ZQorCQkyNTUgaXMgbWF4IG9yIDEwMCUuCisKK3B3bVsxLTNdX2VuYWJsZQorCQlTd2l0Y2ggUFdNIG9uIGFuZCBvZmYuCisJCU5vdCBhbHdheXMgcHJlc2VudCBldmVuIGlmIGZhbipfcHdtIGlzLgorCQkwIHRvIHR1cm4gb2ZmCisJCTEgdG8gdHVybiBvbiBpbiBtYW51YWwgbW9kZQorCQkyIHRvIHR1cm4gb24gaW4gYXV0b21hdGljIG1vZGUKKwkJUmVhZC9Xcml0ZQorCitwd21bMS0qXV9hdXRvX2NoYW5uZWxzX3RlbXAKKwkJU2VsZWN0IHdoaWNoIHRlbXBlcmF0dXJlIGNoYW5uZWxzIGFmZmVjdCB0aGlzIFBXTSBvdXRwdXQgaW4KKwkJYXV0byBtb2RlLiBCaXRmaWVsZCwgMSBpcyB0ZW1wMSwgMiBpcyB0ZW1wMiwgNCBpcyB0ZW1wMyBldGMuLi4KKwkJV2hpY2ggdmFsdWVzIGFyZSBwb3NzaWJsZSBkZXBlbmQgb24gdGhlIGNoaXAgdXNlZC4KKworcHdtWzEtKl1fYXV0b19wb2ludFsxLSpdX3B3bQorcHdtWzEtKl1fYXV0b19wb2ludFsxLSpdX3RlbXAKK3B3bVsxLSpdX2F1dG9fcG9pbnRbMS0qXV90ZW1wX2h5c3QKKwkJRGVmaW5lIHRoZSBQV00gdnMgdGVtcGVyYXR1cmUgY3VydmUuIE51bWJlciBvZiB0cmlwIHBvaW50cyBpcworCQljaGlwLWRlcGVuZGVudC4gVXNlIHRoaXMgZm9yIGNoaXBzIHdoaWNoIGFzc29jaWF0ZSB0cmlwIHBvaW50cworCQl0byBQV00gb3V0cHV0IGNoYW5uZWxzLgorCitPUgorCit0ZW1wWzEtKl1fYXV0b19wb2ludFsxLSpdX3B3bQordGVtcFsxLSpdX2F1dG9fcG9pbnRbMS0qXV90ZW1wCit0ZW1wWzEtKl1fYXV0b19wb2ludFsxLSpdX3RlbXBfaHlzdAorCQlEZWZpbmUgdGhlIFBXTSB2cyB0ZW1wZXJhdHVyZSBjdXJ2ZS4gTnVtYmVyIG9mIHRyaXAgcG9pbnRzIGlzCisJCWNoaXAtZGVwZW5kZW50LiBVc2UgdGhpcyBmb3IgY2hpcHMgd2hpY2ggYXNzb2NpYXRlIHRyaXAgcG9pbnRzCisJCXRvIHRlbXBlcmF0dXJlIGNoYW5uZWxzLgorCisKKyoqKioqKioqKioqKioqKioKKyogVGVtcGVyYXR1cmVzICoKKyoqKioqKioqKioqKioqKioKKwordGVtcFsxLTNdX3R5cGUJU2Vuc29yIHR5cGUgc2VsZWN0aW9uLgorCQlJbnRlZ2VycyAxLCAyLCAzIG9yIHRoZXJtaXN0b3IgQmV0YSB2YWx1ZSAoMzQzNSkKKwkJUmVhZC9Xcml0ZS4KKwkJMTogUElJL0NlbGVyb24gRGlvZGUKKwkJMjogMzkwNCB0cmFuc2lzdG9yCisJCTM6IHRoZXJtYWwgZGlvZGUKKwkJTm90IGFsbCB0eXBlcyBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBjaGlwcworCit0ZW1wWzEtNF1fbWF4CVRlbXBlcmF0dXJlIG1heCB2YWx1ZS4KKwkJVW5pdDogbWlsbGlkZWdyZWUgQ2VsY2l1cworCQlSZWFkL1dyaXRlIHZhbHVlLgorCit0ZW1wWzEtM11fbWluCVRlbXBlcmF0dXJlIG1pbiB2YWx1ZS4KKwkJVW5pdDogbWlsbGlkZWdyZWUgQ2VsY2l1cworCQlSZWFkL1dyaXRlIHZhbHVlLgorCit0ZW1wWzEtM11fbWF4X2h5c3QKKwkJVGVtcGVyYXR1cmUgaHlzdGVyZXNpcyB2YWx1ZSBmb3IgbWF4IGxpbWl0LgorCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxjaXVzCisJCU11c3QgYmUgcmVwb3J0ZWQgYXMgYW4gYWJzb2x1dGUgdGVtcGVyYXR1cmUsIE5PVCBhIGRlbHRhCisJCWZyb20gdGhlIG1heCB2YWx1ZS4KKwkJUmVhZC9Xcml0ZSB2YWx1ZS4KKwordGVtcFsxLTRdX2lucHV0IFRlbXBlcmF0dXJlIGlucHV0IHZhbHVlLgorCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxjaXVzCisJCVJlYWQgb25seSB2YWx1ZS4KKwordGVtcFsxLTRdX2NyaXQJVGVtcGVyYXR1cmUgY3JpdGljYWwgdmFsdWUsIHR5cGljYWxseSBncmVhdGVyIHRoYW4KKwkJY29ycmVzcG9uZGluZyB0ZW1wX21heCB2YWx1ZXMuCisJCVVuaXQ6IG1pbGxpZGVncmVlIENlbGNpdXMKKwkJUmVhZC9Xcml0ZSB2YWx1ZS4KKwordGVtcFsxLTJdX2NyaXRfaHlzdAorCQlUZW1wZXJhdHVyZSBoeXN0ZXJlc2lzIHZhbHVlIGZvciBjcml0aWNhbCBsaW1pdC4KKwkJVW5pdDogbWlsbGlkZWdyZWUgQ2VsY2l1cworCQlNdXN0IGJlIHJlcG9ydGVkIGFzIGFuIGFic29sdXRlIHRlbXBlcmF0dXJlLCBOT1QgYSBkZWx0YQorCQlmcm9tIHRoZSBjcml0aWNhbCB2YWx1ZS4KKwkJUmVhZC9Xcml0ZSB2YWx1ZS4KKworCQlJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGVtcGVyYXR1cmUgc2Vuc29ycywgdGVtcDFfKiBpcworCQlnZW5lcmFsbHkgdGhlIHNlbnNvciBpbnNpZGUgdGhlIGNoaXAgaXRzZWxmLAorCQlyZXBvcnRlZCBhcyAibW90aGVyYm9hcmQgdGVtcGVyYXR1cmUiLiAgdGVtcDJfKiB0bworCQl0ZW1wNF8qIGFyZSBnZW5lcmFsbHkgc2Vuc29ycyBleHRlcm5hbCB0byB0aGUgY2hpcAorCQlpdHNlbGYsIGZvciBleGFtcGxlIHRoZSB0aGVybWFsIGRpb2RlIGluc2lkZSB0aGUgQ1BVIG9yCisJCWEgdGhlcm1pc3RvciBuZWFyYnkuCisKKworKioqKioqKioqKioqCisqIEN1cnJlbnRzICoKKyoqKioqKioqKioqKgorCitOb3RlIHRoYXQgbm8ga25vd24gY2hpcCBwcm92aWRlcyBjdXJyZW50IG1lYXN1cmVtZW50cyBhcyBvZiB3cml0aW5nLAorc28gdGhpcyBwYXJ0IGlzIHRoZW9yZXRpY2FsLCBzbyB0byBzYXkuCisKK2N1cnJbMS1uXV9tYXgJQ3VycmVudCBtYXggdmFsdWUKKwkJVW5pdDogbWlsbGlhbXBlcmUKKwkJUmVhZC9Xcml0ZS4KKworY3VyclsxLW5dX21pbglDdXJyZW50IG1pbiB2YWx1ZS4KKwkJVW5pdDogbWlsbGlhbXBlcmUKKwkJUmVhZC9Xcml0ZS4KKworY3VyclsxLW5dX2lucHV0CUN1cnJlbnQgaW5wdXQgdmFsdWUKKwkJVW5pdDogbWlsbGlhbXBlcmUKKwkJUmVhZCBvbmx5LgorCisKKyoqKioqKioqKgorKiBPdGhlciAqCisqKioqKioqKioKKworYWxhcm1zCQlBbGFybSBiaXRtYXNrLgorCQlSZWFkIG9ubHkuCisJCUludGVnZXIgcmVwcmVzZW50YXRpb24gb2Ygb25lIHRvIGZvdXIgYnl0ZXMuCisJCUEgJzEnIGJpdCBtZWFucyBhbiBhbGFybS4KKwkJQ2hpcHMgc2hvdWxkIGJlIHByb2dyYW1tZWQgZm9yICdjb21wYXJhdG9yJyBtb2RlIHNvIHRoYXQKKwkJdGhlIGFsYXJtIHdpbGwgJ2NvbWUgYmFjaycgYWZ0ZXIgeW91IHJlYWQgdGhlIHJlZ2lzdGVyCisJCWlmIGl0IGlzIHN0aWxsIHZhbGlkLgorCQlHZW5lcmFsbHkgYSBkaXJlY3QgcmVwcmVzZW50YXRpb24gb2YgYSBjaGlwJ3MgaW50ZXJuYWwKKwkJYWxhcm0gcmVnaXN0ZXJzOyB0aGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIHBvc2l0aW9uCisJCW9mIGluZGl2aWR1YWwgYml0cy4KKwkJQml0cyBhcmUgZGVmaW5lZCBpbiBrZXJuZWwvaW5jbHVkZS9zZW5zb3JzLmguCisKK2JlZXBfZW5hYmxlCUJlZXAvaW50ZXJydXB0IGVuYWJsZQorCQkwIHRvIGRpc2FibGUuCisJCTEgdG8gZW5hYmxlLgorCQlSZWFkL1dyaXRlCisKK2JlZXBfbWFzawlCaXRtYXNrIGZvciBiZWVwLgorCQlTYW1lIGZvcm1hdCBhcyAnYWxhcm1zJyB3aXRoIHRoZSBzYW1lIGJpdCBsb2NhdGlvbnMuCisJCVJlYWQvV3JpdGUKKworZWVwcm9tCQlSYXcgRUVQUk9NIGRhdGEgaW4gYmluYXJ5IGZvcm0uCisJCVJlYWQgb25seS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3Rlbi1iaXQtYWRkcmVzc2VzIGIvRG9jdW1lbnRhdGlvbi9pMmMvdGVuLWJpdC1hZGRyZXNzZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwMDc0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3Rlbi1iaXQtYWRkcmVzc2VzCkBAIC0wLDAgKzEsMjIgQEAKK1RoZSBJMkMgcHJvdG9jb2wga25vd3MgYWJvdXQgdHdvIGtpbmRzIG9mIGRldmljZSBhZGRyZXNzZXM6IG5vcm1hbCA3IGJpdCAKK2FkZHJlc3NlcywgYW5kIGFuIGV4dGVuZGVkIHNldCBvZiAxMCBiaXQgYWRkcmVzc2VzLiBUaGUgc2V0cyBvZiBhZGRyZXNzZXMKK2RvIG5vdCBpbnRlcnNlY3Q6IHRoZSA3IGJpdCBhZGRyZXNzIDB4MTAgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSAxMCBiaXQKK2FkZHJlc3MgMHgxMCAodGhvdWdoIGEgc2luZ2xlIGRldmljZSBjb3VsZCByZXNwb25kIHRvIGJvdGggb2YgdGhlbSkuIFlvdQorc2VsZWN0IGEgMTAgYml0IGFkZHJlc3MgYnkgYWRkaW5nIGFuIGV4dHJhIGJ5dGUgYWZ0ZXIgdGhlIGFkZHJlc3MKK2J5dGU6CisgIFMgQWRkcjcgUmQvV3IgLi4uLiAgCitiZWNvbWVzCisgIFMgMTExMTAgQWRkcjEwIFJkL1dyCitTIGlzIHRoZSBzdGFydCBiaXQsIFJkL1dyIHRoZSByZWFkL3dyaXRlIGJpdCwgYW5kIGlmIHlvdSBjb3VudCB0aGUgbnVtYmVyCitvZiBiaXRzLCB5b3Ugd2lsbCBzZWUgdGhlIHRoZXJlIGFyZSA4IGFmdGVyIHRoZSBTIGJpdCBmb3IgNyBiaXQgYWRkcmVzc2VzLAorYW5kIDE2IGFmdGVyIHRoZSBTIGJpdCBmb3IgMTAgYml0IGFkZHJlc3Nlcy4KKworV0FSTklORyEgVGhlIGN1cnJlbnQgMTAgYml0IGFkZHJlc3Mgc3VwcG9ydCBpcyBFWFBFUklNRU5UQUwuIFRoZXJlIGFyZSAKK3NldmVyYWwgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgd2lsbCBjYXVzZSBTRVZFUkUgUFJPQkxFTVMgd2l0aCAxMCBiaXQKK2FkZHJlc3NlcywgZXZlbiB0aG91Z2ggdGhlcmUgaXMgc29tZSBiYXNpYyBoYW5kbGluZyBhbmQgaG9va3MuIEFsc28sCithbG1vc3Qgbm8gc3VwcG9ydGVkIGFkYXB0ZXIgaGFuZGxlcyB0aGUgMTAgYml0IGFkZHJlc3NlcyBjb3JyZWN0bHkuCisKK0FzIHNvb24gYXMgYSByZWFsIDEwIGJpdCBhZGRyZXNzIGRldmljZSBpcyBzcG90dGVkICdpbiB0aGUgd2lsZCcsIHdlCitjYW4gYW5kIHdpbGwgYWRkIHByb3BlciBzdXBwb3J0LiBSaWdodCBub3csIDEwIGJpdCBhZGRyZXNzIGRldmljZXMKK2FyZSBkZWZpbmVkIGJ5IHRoZSBJMkMgcHJvdG9jb2wsIGJ1dCB3ZSBoYXZlIG5ldmVyIHNlZW4gYSBzaW5nbGUgZGV2aWNlCit3aGljaCBzdXBwb3J0cyB0aGVtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzIGIvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjc1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKQEAgLTAsMCArMSw4MTYgQEAKK1RoaXMgaXMgYSBzbWFsbCBndWlkZSBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gd3JpdGUga2VybmVsIGRyaXZlcnMgZm9yIEkyQworb3IgU01CdXMgZGV2aWNlcy4KKworVG8gc2V0IHVwIGEgZHJpdmVyLCB5b3UgbmVlZCB0byBkbyBzZXZlcmFsIHRoaW5ncy4gU29tZSBhcmUgb3B0aW9uYWwsIGFuZAorc29tZSB0aGluZ3MgY2FuIGJlIGRvbmUgc2xpZ2h0bHkgb3IgY29tcGxldGVseSBkaWZmZXJlbnQuIFVzZSB0aGlzIGFzIGEKK2d1aWRlLCBub3QgYXMgYSBydWxlIGJvb2shCisKKworR2VuZXJhbCByZW1hcmtzCis9PT09PT09PT09PT09PT0KKworVHJ5IHRvIGtlZXAgdGhlIGtlcm5lbCBuYW1lc3BhY2UgYXMgY2xlYW4gYXMgcG9zc2libGUuIFRoZSBiZXN0IHdheSB0bworZG8gdGhpcyBpcyB0byB1c2UgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgZ2xvYmFsIHN5bWJvbHMuIFRoaXMgaXMgCitlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgZXhwb3J0ZWQgc3ltYm9scywgYnV0IGl0IGlzIGEgZ29vZCBpZGVhIHRvIGRvCitpdCBmb3Igbm9uLWV4cG9ydGVkIHN5bWJvbHMgdG9vLiBXZSB3aWxsIHVzZSB0aGUgcHJlZml4IGBmb29fJyBpbiB0aGlzCit0dXRvcmlhbCwgYW5kIGBGT09fJyBmb3IgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKworCitUaGUgZHJpdmVyIHN0cnVjdHVyZQorPT09PT09PT09PT09PT09PT09PT0KKworVXN1YWxseSwgeW91IHdpbGwgaW1wbGVtZW50IGEgc2luZ2xlIGRyaXZlciBzdHJ1Y3R1cmUsIGFuZCBpbnN0YW50aWF0ZQorYWxsIGNsaWVudHMgZnJvbSBpdC4gUmVtZW1iZXIsIGEgZHJpdmVyIHN0cnVjdHVyZSBjb250YWlucyBnZW5lcmFsIGFjY2VzcyAKK3JvdXRpbmVzLCBhIGNsaWVudCBzdHJ1Y3R1cmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gbGlrZSB0aGUgYWN0dWFsIEkyQworYWRkcmVzcy4KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGZvb19kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJGb28gdmVyc2lvbiAyLjMgZHJpdmVyIiwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX0ZPTywgLyogZnJvbSBpMmMtaWQuaCwgb3B0aW9uYWwgKi8KKwkuZmxhZ3MJCT0gSTJDX0RGX05PVElGWSwKKwkuYXR0YWNoX2FkYXB0ZXIJPSAmZm9vX2F0dGFjaF9hZGFwdGVyLAorCS5kZXRhY2hfY2xpZW50CT0gJmZvb19kZXRhY2hfY2xpZW50LAorCS5jb21tYW5kCT0gJmZvb19jb21tYW5kIC8qIG1heSBiZSBOVUxMICovCit9CisgCitUaGUgbmFtZSBjYW4gYmUgY2hvc2VuIGZyZWVseSwgYW5kIG1heSBiZSB1cHRvIDQwIGNoYXJhY3RlcnMgbG9uZy4gUGxlYXNlCit1c2Ugc29tZXRoaW5nIGRlc2NyaXB0aXZlIGhlcmUuCisKK0lmIHVzZWQsIHRoZSBpZCBzaG91bGQgYmUgYSB1bmlxdWUgSUQuIFRoZSByYW5nZSAweGYwMDAgdG8gMHhmZmZmIGlzCityZXNlcnZlZCBmb3IgbG9jYWwgdXNlLCBhbmQgeW91IGNhbiB1c2Ugb25lIG9mIHRob3NlIHVudGlsIHlvdSBzdGFydAorZGlzdHJpYnV0aW5nIHRoZSBkcml2ZXIsIGF0IHdoaWNoIHRpbWUgeW91IHNob3VsZCBjb250YWN0IHRoZSBpMmMgYXV0aG9ycwordG8gZ2V0IHlvdXIgb3duIElEKHMpLiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB5b3UgZG9uJ3QgbmVlZCBhbiBJRAorYXQgYWxsIHNvIHlvdSBjYW4ganVzdCBvbWl0IGl0LgorCitEb24ndCB3b3JyeSBhYm91dCB0aGUgZmxhZ3MgZmllbGQ7IGp1c3QgcHV0IEkyQ19ERl9OT1RJRlkgaW50byBpdC4gVGhpcworbWVhbnMgdGhhdCB5b3VyIGRyaXZlciB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gbmV3IGFkYXB0ZXJzIGFyZSBmb3VuZC4KK1RoaXMgaXMgYWxtb3N0IGFsd2F5cyB3aGF0IHlvdSB3YW50LgorCitBbGwgb3RoZXIgZmllbGRzIGFyZSBmb3IgY2FsbC1iYWNrIGZ1bmN0aW9ucyB3aGljaCB3aWxsIGJlIGV4cGxhaW5lZCAKK2JlbG93LgorCitUaGVyZSB1c2UgdG8gYmUgdHdvIGFkZGl0aW9uYWwgZmllbGRzIGluIHRoaXMgc3RydWN0dXJlLCBpbmNfdXNlIGV0IGRlY191c2UsCitmb3IgbW9kdWxlIHVzYWdlIGNvdW50LCBidXQgdGhlc2UgZmllbGRzIHdlcmUgb2Jzb2xldGVkIGFuZCByZW1vdmVkLgorCisKK0V4dHJhIGNsaWVudCBkYXRhCis9PT09PT09PT09PT09PT09PQorCitUaGUgY2xpZW50IHN0cnVjdHVyZSBoYXMgYSBzcGVjaWFsIGBkYXRhJyBmaWVsZCB0aGF0IGNhbiBwb2ludCB0byBhbnkKK3N0cnVjdHVyZSBhdCBhbGwuIFlvdSBjYW4gdXNlIHRoaXMgdG8ga2VlcCBjbGllbnQtc3BlY2lmaWMgZGF0YS4gWW91CitkbyBub3QgYWx3YXlzIG5lZWQgdGhpcywgYnV0IGVzcGVjaWFsbHkgZm9yIGBzZW5zb3JzJyBkcml2ZXJzLCBpdCBjYW4KK2JlIHZlcnkgdXNlZnVsLgorCitBbiBleGFtcGxlIHN0cnVjdHVyZSBpcyBiZWxvdy4KKworICBzdHJ1Y3QgZm9vX2RhdGEgeworICAgIHN0cnVjdCBzZW1hcGhvcmUgbG9jazsgLyogRm9yIElTQSBhY2Nlc3MgaW4gYHNlbnNvcnMnIGRyaXZlcnMuICovCisgICAgaW50IHN5c2N0bF9pZDsgICAgICAgICAvKiBUbyBrZWVwIHRoZSAvcHJvYyBkaXJlY3RvcnkgZW50cnkgZm9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNlbnNvcnMnIGRyaXZlcnMuICovCisgICAgZW51bSBjaGlwcyB0eXBlOyAgICAgICAvKiBUbyBrZWVwIHRoZSBjaGlwcyB0eXBlIGZvciBgc2Vuc29ycycgZHJpdmVycy4gKi8KKyAgIAorICAgIC8qIEJlY2F1c2UgdGhlIGkyYyBidXMgaXMgc2xvdywgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGNhY2hlIHRoZSByZWFkCisgICAgICAgaW5mb3JtYXRpb24gb2YgYSBjaGlwIGZvciBzb21lIHRpbWUgKGZvciBleGFtcGxlLCAxIG9yIDIgc2Vjb25kcykuCisgICAgICAgSXQgZGVwZW5kcyBvZiBjb3Vyc2Ugb24gdGhlIGRldmljZSB3aGV0aGVyIHRoaXMgaXMgcmVhbGx5IHdvcnRod2hpbGUKKyAgICAgICBvciBldmVuIHNlbnNpYmxlLiAqLworICAgIHN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7IC8qIFdoZW4gd2UgYXJlIHJlYWRpbmcgbG90cyBvZiBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHByb2Nlc3Mgc2hvdWxkIG5vdCB1cGRhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3cgaW5mb3JtYXRpb24gKi8KKyAgICBjaGFyIHZhbGlkOyAgICAgICAgICAgICAgICAgICAvKiAhPSAwIGlmIHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZC4gKi8KKyAgICB1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgICAvKiBJbiBqaWZmaWVzICovCisgICAgLyogQWRkIHRoZSByZWFkIGluZm9ybWF0aW9uIGhlcmUgdG9vICovCisgIH07CisKKworQWNjZXNzaW5nIHRoZSBjbGllbnQKKz09PT09PT09PT09PT09PT09PT09CisKK0xldCdzIHNheSB3ZSBoYXZlIGEgdmFsaWQgY2xpZW50IHN0cnVjdHVyZS4gQXQgc29tZSB0aW1lLCB3ZSB3aWxsIG5lZWQKK3RvIGdhdGhlciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjbGllbnQsIG9yIHdyaXRlIG5ldyBpbmZvcm1hdGlvbiB0byB0aGUKK2NsaWVudC4gSG93IHdlIHdpbGwgZXhwb3J0IHRoaXMgaW5mb3JtYXRpb24gdG8gdXNlci1zcGFjZSBpcyBsZXNzIAoraW1wb3J0YW50IGF0IHRoaXMgbW9tZW50IChwZXJoYXBzIHdlIGRvIG5vdCBuZWVkIHRvIGRvIHRoaXMgYXQgYWxsIGZvcgorc29tZSBvYnNjdXJlIGNsaWVudHMpLiBCdXQgd2UgbmVlZCBnZW5lcmljIHJlYWRpbmcgYW5kIHdyaXRpbmcgcm91dGluZXMuCisKK0kgaGF2ZSBmb3VuZCBpdCB1c2VmdWwgdG8gZGVmaW5lIGZvb19yZWFkIGFuZCBmb29fd3JpdGUgZnVuY3Rpb24gZm9yIHRoaXMuCitGb3Igc29tZSBjYXNlcywgaXQgd2lsbCBiZSBlYXNpZXIgdG8gY2FsbCB0aGUgaTJjIGZ1bmN0aW9ucyBkaXJlY3RseSwKK2J1dCBtYW55IGNoaXBzIGhhdmUgc29tZSBraW5kIG9mIHJlZ2lzdGVyLXZhbHVlIGlkZWEgdGhhdCBjYW4gZWFzaWx5CitiZSBlbmNhcHN1bGF0ZWQuIEFsc28sIHNvbWUgY2hpcHMgaGF2ZSBib3RoIElTQSBhbmQgSTJDIGludGVyZmFjZXMsIGFuZAoraXQgdXNlZnVsIHRvIGFic3RyYWN0IGZyb20gdGhpcyAob25seSBmb3IgYHNlbnNvcnMnIGRyaXZlcnMpLgorCitUaGUgYmVsb3cgZnVuY3Rpb25zIGFyZSBzaW1wbGUgZXhhbXBsZXMsIGFuZCBzaG91bGQgbm90IGJlIGNvcGllZAorbGl0ZXJhbGx5LgorCisgIGludCBmb29fcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCisgIHsKKyAgICBpZiAocmVnIDwgMHgxMCkgLyogYnl0ZS1zaXplZCByZWdpc3RlciAqLworICAgICAgcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQscmVnKTsKKyAgICBlbHNlIC8qIHdvcmQtc2l6ZWQgcmVnaXN0ZXIgKi8KKyAgICAgIHJldHVybiBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LHJlZyk7CisgIH0KKworICBpbnQgZm9vX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTE2IHZhbHVlKQorICB7CisgICAgaWYgKHJlZyA9PSAweDEwKSAvKiBJbXBvc3NpYmxlIHRvIHdyaXRlIC0gZHJpdmVyIGVycm9yISAqLyB7CisgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAocmVnIDwgMHgxMCkgLyogYnl0ZS1zaXplZCByZWdpc3RlciAqLworICAgICAgcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LHJlZyx2YWx1ZSk7CisgICAgZWxzZSAvKiB3b3JkLXNpemVkIHJlZ2lzdGVyICovCisgICAgICByZXR1cm4gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQscmVnLHZhbHVlKTsKKyAgfQorCitGb3Igc2Vuc29ycyBjb2RlLCB5b3UgbWF5IGhhdmUgdG8gY29wZSB3aXRoIElTQSByZWdpc3RlcnMgdG9vLiBTb21ldGhpbmcKK2xpa2UgdGhlIGJlbG93IG9mdGVuIHdvcmtzLiBOb3RlIHRoZSBsb2NraW5nISAKKworICBpbnQgZm9vX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorICB7CisgICAgaW50IHJlczsKKyAgICBpZiAoaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KSkgeworICAgICAgZG93bigmKCgoc3RydWN0IGZvb19kYXRhICopIChjbGllbnQtPmRhdGEpKSAtPiBsb2NrKSk7CisgICAgICBvdXRiX3AocmVnLGNsaWVudC0+YWRkciArIEZPT19BRERSX1JFR19PRkZTRVQpOworICAgICAgcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgRk9PX0RBVEFfUkVHX09GRlNFVCk7CisgICAgICB1cCgmKCgoc3RydWN0IGZvb19kYXRhICopIChjbGllbnQtPmRhdGEpKSAtPiBsb2NrKSk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0gZWxzZQorICAgICAgcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQscmVnKTsKKyAgfQorCitXcml0aW5nIGlzIGRvbmUgdGhlIHNhbWUgd2F5LgorCisKK1Byb2JpbmcgYW5kIGF0dGFjaGluZworPT09PT09PT09PT09PT09PT09PT09CisKK01vc3QgaTJjIGRldmljZXMgY2FuIGJlIHByZXNlbnQgb24gc2V2ZXJhbCBpMmMgYWRkcmVzc2VzOyBmb3Igc29tZSB0aGlzCitpcyBkZXRlcm1pbmVkIGluIGhhcmR3YXJlIChieSBzb2xkZXJpbmcgc29tZSBjaGlwIHBpbnMgdG8gVmNjIG9yIEdyb3VuZCksCitmb3Igb3RoZXJzIHRoaXMgY2FuIGJlIGNoYW5nZWQgaW4gc29mdHdhcmUgKGJ5IHdyaXRpbmcgdG8gc3BlY2lmaWMgY2xpZW50CityZWdpc3RlcnMpLiBTb21lIGRldmljZXMgYXJlIHVzdWFsbHkgb24gYSBzcGVjaWZpYyBhZGRyZXNzLCBidXQgbm90IGFsd2F5czsKK2FuZCBzb21lIGFyZSBldmVuIG1vcmUgdHJpY2t5LiBTbyB5b3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIHNjYW4gc2V2ZXJhbAoraTJjIGFkZHJlc3NlcyBmb3IgeW91ciBjbGllbnRzLCBhbmQgZG8gc29tZSBzb3J0IG9mIGRldGVjdGlvbiB0byBzZWUKK3doZXRoZXIgaXQgaXMgYWN0dWFsbHkgYSBkZXZpY2Ugc3VwcG9ydGVkIGJ5IHlvdXIgZHJpdmVyLgorCitUbyBnaXZlIHRoZSB1c2VyIGEgbWF4aW11bSBvZiBwb3NzaWJpbGl0aWVzLCBzb21lIGRlZmF1bHQgbW9kdWxlIHBhcmFtZXRlcnMKK2FyZSBkZWZpbmVkIHRvIGhlbHAgZGV0ZXJtaW5lIHdoYXQgYWRkcmVzc2VzIGFyZSBzY2FubmVkLiBTZXZlcmFsIG1hY3JvcworYXJlIGRlZmluZWQgaW4gaTJjLmggdG8gaGVscCB5b3Ugc3VwcG9ydCB0aGVtLCBhcyB3ZWxsIGFzIGEgZ2VuZXJpYworZGV0ZWN0aW9uIGFsZ29yaXRobS4KKworWW91IGRvIG5vdCBoYXZlIHRvIHVzZSB0aGlzIHBhcmFtZXRlciBpbnRlcmZhY2U7IGJ1dCBkb24ndCB0cnkgdG8gdXNlCitmdW5jdGlvbiBpMmNfcHJvYmUoKSAob3IgaTJjX2RldGVjdCgpKSBpZiB5b3UgZG9uJ3QuCisKK05PVEU6IElmIHlvdSB3YW50IHRvIHdyaXRlIGEgYHNlbnNvcnMnIGRyaXZlciwgdGhlIGludGVyZmFjZSBpcyBzbGlnaHRseQorICAgICAgZGlmZmVyZW50ISBTZWUgYmVsb3cuCisKKworCitQcm9iaW5nIGNsYXNzZXMgKGkyYykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgcGFyYW1ldGVycyBhcmUgZ2l2ZW4gYXMgbGlzdHMgb2YgdW5zaWduZWQgMTYtYml0IGludGVnZXJzLiBMaXN0cyBhcmUKK3Rlcm1pbmF0ZWQgYnkgSTJDX0NMSUVOVF9FTkQuCitUaGUgZm9sbG93aW5nIGxpc3RzIGFyZSB1c2VkIGludGVybmFsbHk6CisKKyAgbm9ybWFsX2kyYzogZmlsbGVkIGluIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLiAKKyAgICAgQSBsaXN0IG9mIEkyQyBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGV4YW1pbmVkLgorICAgbm9ybWFsX2kyY19yYW5nZTogZmlsbGVkIGluIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLgorICAgICBBIGxpc3Qgb2YgcGFpcnMgb2YgSTJDIGFkZHJlc3NlcywgZWFjaCBwYWlyIGJlaW5nIGFuIGluY2x1c2l2ZSByYW5nZSBvZgorICAgICBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGV4YW1pbmVkLgorICAgcHJvYmU6IGluc21vZCBwYXJhbWV0ZXIuIAorICAgICBBIGxpc3Qgb2YgcGFpcnMuIFRoZSBmaXJzdCB2YWx1ZSBpcyBhIGJ1cyBudW1iZXIgKC0xIGZvciBhbnkgSTJDIGJ1cyksIAorICAgICB0aGUgc2Vjb25kIGlzIHRoZSBhZGRyZXNzLiBUaGVzZSBhZGRyZXNzZXMgYXJlIGFsc28gcHJvYmVkLCBhcyBpZiB0aGV5IAorICAgICB3ZXJlIGluIHRoZSAnbm9ybWFsJyBsaXN0LgorICAgcHJvYmVfcmFuZ2U6IGluc21vZCBwYXJhbWV0ZXIuIAorICAgICBBIGxpc3Qgb2YgdHJpcGxlcy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwgCisgICAgIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZSBhZGRyZXNzZXMuICBUaGVzZSBmb3JtIGFuIGluY2x1c2l2ZSByYW5nZSBvZiAKKyAgICAgYWRkcmVzc2VzIHRoYXQgYXJlIGFsc28gcHJvYmVkLCBhcyBpZiB0aGV5IHdlcmUgaW4gdGhlICdub3JtYWwnIGxpc3QuCisgICBpZ25vcmU6IGluc21vZCBwYXJhbWV0ZXIuCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwgCisgICAgIHRoZSBzZWNvbmQgaXMgdGhlIEkyQyBhZGRyZXNzLiBUaGVzZSBhZGRyZXNzZXMgYXJlIG5ldmVyIHByb2JlZC4gCisgICAgIFRoaXMgcGFyYW1ldGVyIG92ZXJydWxlcyAnbm9ybWFsJyBhbmQgJ3Byb2JlJywgYnV0IG5vdCB0aGUgJ2ZvcmNlJyBsaXN0cy4KKyAgIGlnbm9yZV9yYW5nZTogaW5zbW9kIHBhcmFtZXRlci4gCisgICAgIEEgbGlzdCBvZiB0cmlwbGVzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyICgtMSBmb3IgYW55IEkyQyBidXMpLCAKKyAgICAgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJlIGFkZHJlc3Nlcy4gVGhlc2UgZm9ybSBhbiBpbmNsdXNpdmUgcmFuZ2Ugb2YgCisgICAgIEkyQyBhZGRyZXNzZXMgdGhhdCBhcmUgbmV2ZXIgcHJvYmVkLgorICAgICBUaGlzIHBhcmFtZXRlciBvdmVycnVsZXMgJ25vcm1hbCcgYW5kICdwcm9iZScsIGJ1dCBub3QgdGhlICdmb3JjZScgbGlzdHMuCisgICBmb3JjZTogaW5zbW9kIHBhcmFtZXRlci4gCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwKKyAgICAgdGhlIHNlY29uZCBpcyB0aGUgSTJDIGFkZHJlc3MuIEEgZGV2aWNlIGlzIGJsaW5kbHkgYXNzdW1lZCB0byBiZSBvbgorICAgICB0aGUgZ2l2ZW4gYWRkcmVzcywgbm8gcHJvYmluZyBpcyBkb25lLiAKKworRm9ydHVuYXRlbHksIGFzIGEgbW9kdWxlIHdyaXRlciwgeW91IGp1c3QgaGF2ZSB0byBkZWZpbmUgdGhlIGBub3JtYWwnIAorYW5kL29yIGBub3JtYWxfcmFuZ2UnIHBhcmFtZXRlcnMuIFRoZSBjb21wbGV0ZSBkZWNsYXJhdGlvbiBjb3VsZCBsb29rCitsaWtlIHRoaXM6CisKKyAgLyogU2NhbiAweDIwIHRvIDB4MmYsIDB4MzcsIGFuZCAweDQwIHRvIDB4NGYgKi8KKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgzNyxJMkNfQ0xJRU5UX0VORCB9OyAKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNfcmFuZ2VbXSA9IHsgMHgyMCwgMHgyZiwgMHg0MCwgMHg0ZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5EIH07CisKKyAgLyogTWFnaWMgZGVmaW5pdGlvbiBvZiBhbGwgb3RoZXIgdmFyaWFibGVzIGFuZCB0aGluZ3MgKi8KKyAgSTJDX0NMSUVOVF9JTlNNT0Q7CisKK05vdGUgdGhhdCB5b3UgKmhhdmUqIHRvIGNhbGwgdGhlIHR3byBkZWZpbmVkIHZhcmlhYmxlcyBgbm9ybWFsX2kyYycgYW5kCitgbm9ybWFsX2kyY19yYW5nZScsIHdpdGhvdXQgYW55IHByZWZpeCEKKworCitQcm9iaW5nIGNsYXNzZXMgKHNlbnNvcnMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3cml0ZSBhIGBzZW5zb3JzJyBkcml2ZXIsIHlvdSB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgaW50ZXJmYWNlLgorQXMgd2VsbCBhcyBJMkMgYWRkcmVzc2VzLCB3ZSBoYXZlIHRvIGNvcGUgd2l0aCBJU0EgYWRkcmVzc2VzLiBBbHNvLCB3ZQordXNlIGEgZW51bSBvZiBjaGlwIHR5cGVzLiBEb24ndCBmb3JnZXQgdG8gaW5jbHVkZSBgc2Vuc29ycy5oJy4KKworVGhlIGZvbGxvd2luZyBsaXN0cyBhcmUgdXNlZCBpbnRlcm5hbGx5LiBUaGV5IGFyZSBhbGwgbGlzdHMgb2YgaW50ZWdlcnMuCisKKyAgIG5vcm1hbF9pMmM6IGZpbGxlZCBpbiBieSB0aGUgbW9kdWxlIHdyaXRlci4gVGVybWluYXRlZCBieSBTRU5TT1JTX0kyQ19FTkQuCisgICAgIEEgbGlzdCBvZiBJMkMgYWRkcmVzc2VzIHdoaWNoIHNob3VsZCBub3JtYWxseSBiZSBleGFtaW5lZC4KKyAgIG5vcm1hbF9pMmNfcmFuZ2U6IGZpbGxlZCBpbiBieSB0aGUgbW9kdWxlIHdyaXRlci4gVGVybWluYXRlZCBieSAKKyAgICAgU0VOU09SU19JMkNfRU5ECisgICAgIEEgbGlzdCBvZiBwYWlycyBvZiBJMkMgYWRkcmVzc2VzLCBlYWNoIHBhaXIgYmVpbmcgYW4gaW5jbHVzaXZlIHJhbmdlIG9mCisgICAgIGFkZHJlc3NlcyB3aGljaCBzaG91bGQgbm9ybWFsbHkgYmUgZXhhbWluZWQuCisgICBub3JtYWxfaXNhOiBmaWxsZWQgaW4gYnkgdGhlIG1vZHVsZSB3cml0ZXIuIFRlcm1pbmF0ZWQgYnkgU0VOU09SU19JU0FfRU5ELgorICAgICBBIGxpc3Qgb2YgSVNBIGFkZHJlc3NlcyB3aGljaCBzaG91bGQgbm9ybWFsbHkgYmUgZXhhbWluZWQuCisgICBub3JtYWxfaXNhX3JhbmdlOiBmaWxsZWQgaW4gYnkgdGhlIG1vZHVsZSB3cml0ZXIuIFRlcm1pbmF0ZWQgYnkgCisgICAgIFNFTlNPUlNfSVNBX0VORAorICAgICBBIGxpc3Qgb2YgdHJpcGxlcy4gVGhlIGZpcnN0IHR3byBlbGVtZW50cyBhcmUgSVNBIGFkZHJlc3NlcywgYmVpbmcgYW4KKyAgICAgcmFuZ2Ugb2YgYWRkcmVzc2VzIHdoaWNoIHNob3VsZCBub3JtYWxseSBiZSBleGFtaW5lZC4gVGhlIHRoaXJkIGlzIHRoZQorICAgICBtb2R1bG8gcGFyYW1ldGVyOiBvbmx5IGFkZHJlc3NlcyB3aGljaCBhcmUgMCBtb2R1bGUgdGhpcyB2YWx1ZSByZWxhdGl2ZQorICAgICB0byB0aGUgZmlyc3QgYWRkcmVzcyBvZiB0aGUgcmFuZ2UgYXJlIGFjdHVhbGx5IGNvbnNpZGVyZWQuCisgICBwcm9iZTogaW5zbW9kIHBhcmFtZXRlci4gSW5pdGlhbGl6ZSB0aGlzIGxpc3Qgd2l0aCBTRU5TT1JTX0kyQ19FTkQgdmFsdWVzLgorICAgICBBIGxpc3Qgb2YgcGFpcnMuIFRoZSBmaXJzdCB2YWx1ZSBpcyBhIGJ1cyBudW1iZXIgKFNFTlNPUlNfSVNBX0JVUyBmb3IKKyAgICAgdGhlIElTQSBidXMsIC0xIGZvciBhbnkgSTJDIGJ1cyksIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3MuIFRoZXNlCisgICAgIGFkZHJlc3NlcyBhcmUgYWxzbyBwcm9iZWQsIGFzIGlmIHRoZXkgd2VyZSBpbiB0aGUgJ25vcm1hbCcgbGlzdC4KKyAgIHByb2JlX3JhbmdlOiBpbnNtb2QgcGFyYW1ldGVyLiBJbml0aWFsaXplIHRoaXMgbGlzdCB3aXRoIFNFTlNPUlNfSTJDX0VORCAKKyAgICAgdmFsdWVzLgorICAgICBBIGxpc3Qgb2YgdHJpcGxlcy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoU0VOU09SU19JU0FfQlVTIGZvcgorICAgICB0aGUgSVNBIGJ1cywgLTEgZm9yIGFueSBJMkMgYnVzKSwgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJlIGFkZHJlc3Nlcy4gCisgICAgIFRoZXNlIGZvcm0gYW4gaW5jbHVzaXZlIHJhbmdlIG9mIGFkZHJlc3NlcyB0aGF0IGFyZSBhbHNvIHByb2JlZCwgYXMKKyAgICAgaWYgdGhleSB3ZXJlIGluIHRoZSAnbm9ybWFsJyBsaXN0LgorICAgaWdub3JlOiBpbnNtb2QgcGFyYW1ldGVyLiBJbml0aWFsaXplIHRoaXMgbGlzdCB3aXRoIFNFTlNPUlNfSTJDX0VORCB2YWx1ZXMuCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoU0VOU09SU19JU0FfQlVTIGZvcgorICAgICB0aGUgSVNBIGJ1cywgLTEgZm9yIGFueSBJMkMgYnVzKSwgdGhlIHNlY29uZCBpcyB0aGUgSTJDIGFkZHJlc3MuIFRoZXNlCisgICAgIGFkZHJlc3NlcyBhcmUgbmV2ZXIgcHJvYmVkLiBUaGlzIHBhcmFtZXRlciBvdmVycnVsZXMgJ25vcm1hbCcgYW5kIAorICAgICAncHJvYmUnLCBidXQgbm90IHRoZSAnZm9yY2UnIGxpc3RzLgorICAgaWdub3JlX3JhbmdlOiBpbnNtb2QgcGFyYW1ldGVyLiBJbml0aWFsaXplIHRoaXMgbGlzdCB3aXRoIFNFTlNPUlNfSTJDX0VORCAKKyAgICAgIHZhbHVlcy4KKyAgICAgQSBsaXN0IG9mIHRyaXBsZXMuIFRoZSBmaXJzdCB2YWx1ZSBpcyBhIGJ1cyBudW1iZXIgKFNFTlNPUlNfSVNBX0JVUyBmb3IKKyAgICAgdGhlIElTQSBidXMsIC0xIGZvciBhbnkgSTJDIGJ1cyksIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZSBhZGRyZXNzZXMuIAorICAgICBUaGVzZSBmb3JtIGFuIGluY2x1c2l2ZSByYW5nZSBvZiBJMkMgYWRkcmVzc2VzIHRoYXQgYXJlIG5ldmVyIHByb2JlZC4KKyAgICAgVGhpcyBwYXJhbWV0ZXIgb3ZlcnJ1bGVzICdub3JtYWwnIGFuZCAncHJvYmUnLCBidXQgbm90IHRoZSAnZm9yY2UnIGxpc3RzLgorCitBbHNvIHVzZWQgaXMgYSBsaXN0IG9mIHBvaW50ZXJzIHRvIHNlbnNvcnNfZm9yY2VfZGF0YSBzdHJ1Y3R1cmVzOgorICAgZm9yY2VfZGF0YTogaW5zbW9kIHBhcmFtZXRlcnMuIEEgbGlzdCwgZW5kaW5nIHdpdGggYW4gZWxlbWVudCBvZiB3aGljaAorICAgICB0aGUgZm9yY2UgZmllbGQgaXMgTlVMTC4KKyAgICAgRWFjaCBlbGVtZW50IGNvbnRhaW5zIHRoZSB0eXBlIG9mIGNoaXAgYW5kIGEgbGlzdCBvZiBwYWlycy4KKyAgICAgVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoU0VOU09SU19JU0FfQlVTIGZvciB0aGUgSVNBIGJ1cywgCisgICAgIC0xIGZvciBhbnkgSTJDIGJ1cyksIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3MuIAorICAgICBUaGVzZSBhcmUgYXV0b21hdGljYWxseSB0cmFuc2xhdGVkIHRvIGluc21vZCB2YXJpYWJsZXMgb2YgdGhlIGZvcm0KKyAgICAgZm9yY2VfZm9vLgorCitTbyB3ZSBoYXZlIGEgZ2VuZXJpYyBpbnNtb2QgdmFyaWFibGVkIGBmb3JjZScsIGFuZCBjaGlwLXNwZWNpZmljIHZhcmlhYmxlcworYGZvcmNlX0NISVBOQU1FJy4KKworRm9ydHVuYXRlbHksIGFzIGEgbW9kdWxlIHdyaXRlciwgeW91IGp1c3QgaGF2ZSB0byBkZWZpbmUgdGhlIGBub3JtYWwnIAorYW5kL29yIGBub3JtYWxfcmFuZ2UnIHBhcmFtZXRlcnMsIGFuZCBkZWZpbmUgd2hhdCBjaGlwIG5hbWVzIGFyZSB1c2VkLiAKK1RoZSBjb21wbGV0ZSBkZWNsYXJhdGlvbiBjb3VsZCBsb29rIGxpa2UgdGhpczoKKyAgLyogU2NhbiBpMmMgYWRkcmVzc2VzIDB4MjAgdG8gMHgyZiwgMHgzNywgYW5kIDB4NDAgdG8gMHg0ZgorICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gezB4MzcsU0VOU09SU19JMkNfRU5EfTsKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNfcmFuZ2VbXSA9IHsweDIwLDB4MmYsMHg0MCwweDRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTlNPUlNfSTJDX0VORH07CisgIC8qIFNjYW4gSVNBIGFkZHJlc3MgMHgyOTAgKi8KKyAgc3RhdGljIHVuc2lnbmVkIGludCBub3JtYWxfaXNhW10gPSB7MHgwMjkwLFNFTlNPUlNfSVNBX0VORH07CisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbm9ybWFsX2lzYV9yYW5nZVtdID0ge1NFTlNPUlNfSVNBX0VORH07CisKKyAgLyogRGVmaW5lIGNoaXBzIGZvbyBhbmQgYmFyLCBhcyB3ZWxsIGFzIGFsbCBtb2R1bGUgcGFyYW1ldGVycyBhbmQgdGhpbmdzICovCisgIFNFTlNPUlNfSU5TTU9EXzIoZm9vLGJhcik7CisKK0lmIHlvdSBoYXZlIG9uZSBjaGlwLCB5b3UgdXNlIG1hY3JvIFNFTlNPUlNfSU5TTU9EXzEoY2hpcCksIGlmIHlvdSBoYXZlIDIKK3lvdSB1c2UgbWFjcm8gU0VOU09SU19JTlNNT0RfMihjaGlwMSxjaGlwMiksIGV0Yy4gSWYgeW91IGRvIG5vdCB3YW50IHRvCitib3RoZXIgd2l0aCBjaGlwIHR5cGVzLCB5b3UgY2FuIHVzZSBTRU5TT1JTX0lOU01PRF8wLgorCitBIGVudW0gaXMgYXV0b21hdGljYWxseSBkZWZpbmVkIGFzIGZvbGxvd3M6CisgIGVudW0gY2hpcHMgeyBhbnlfY2hpcCwgY2hpcDEsIGNoaXAyLCAuLi4gfQorCisKK0F0dGFjaGluZyB0byBhbiBhZGFwdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuZXZlciBhIG5ldyBhZGFwdGVyIGlzIGluc2VydGVkLCBvciBmb3IgYWxsIGFkYXB0ZXJzIGlmIHRoZSBkcml2ZXIgaXMKK2JlaW5nIHJlZ2lzdGVyZWQsIHRoZSBjYWxsYmFjayBhdHRhY2hfYWRhcHRlcigpIGlzIGNhbGxlZC4gTm93IGlzIHRoZQordGltZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2VzIGFyZSBwcmVzZW50IG9uIHRoZSBhZGFwdGVyLCBhbmQgdG8gcmVnaXN0ZXIKK2EgY2xpZW50IGZvciBlYWNoIG9mIHRoZW0uCisKK1RoZSBhdHRhY2hfYWRhcHRlciBjYWxsYmFjayBpcyByZWFsbHkgZWFzeTogd2UganVzdCBjYWxsIHRoZSBnZW5lcmljCitkZXRlY3Rpb24gZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gd2lsbCBzY2FuIHRoZSBidXMgZm9yIHVzLCB1c2luZyB0aGUKK2luZm9ybWF0aW9uIGFzIGRlZmluZWQgaW4gdGhlIGxpc3RzIGV4cGxhaW5lZCBhYm92ZS4gSWYgYSBkZXZpY2UgaXMKK2RldGVjdGVkIGF0IGEgc3BlY2lmaWMgYWRkcmVzcywgYW5vdGhlciBjYWxsYmFjayBpcyBjYWxsZWQuCisKKyAgaW50IGZvb19hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCisgIHsKKyAgICByZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsJmFkZHJfZGF0YSwmZm9vX2RldGVjdF9jbGllbnQpOworICB9CisKK0ZvciBgc2Vuc29ycycgZHJpdmVycywgdXNlIHRoZSBpMmNfZGV0ZWN0IGZ1bmN0aW9uIGluc3RlYWQ6CisgIAorICBpbnQgZm9vX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKKyAgeyAKKyAgICByZXR1cm4gaTJjX2RldGVjdChhZGFwdGVyLCZhZGRyX2RhdGEsJmZvb19kZXRlY3RfY2xpZW50KTsKKyAgfQorCitSZW1lbWJlciwgc3RydWN0dXJlIGBhZGRyX2RhdGEnIGlzIGRlZmluZWQgYnkgdGhlIG1hY3JvcyBleHBsYWluZWQgYWJvdmUsCitzbyB5b3UgZG8gbm90IGhhdmUgdG8gZGVmaW5lIGl0IHlvdXJzZWxmLgorCitUaGUgaTJjX3Byb2JlIG9yIGkyY19kZXRlY3QgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBmb29fZGV0ZWN0X2NsaWVudAorZnVuY3Rpb24gb25seSBmb3IgdGhvc2UgaTJjIGFkZHJlc3NlcyB0aGF0IGFjdHVhbGx5IGhhdmUgYSBkZXZpY2Ugb24KK3RoZW0gKHVubGVzcyBhIGBmb3JjZScgcGFyYW1ldGVyIHdhcyB1c2VkKS4gSW4gYWRkaXRpb24sIGFkZHJlc3NlcyB0aGF0CithcmUgYWxyZWFkeSBpbiB1c2UgKGJ5IHNvbWUgb3RoZXIgcmVnaXN0ZXJlZCBjbGllbnQpIGFyZSBza2lwcGVkLgorCisKK1RoZSBkZXRlY3QgY2xpZW50IGZ1bmN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGV0ZWN0IGNsaWVudCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlIG9yIGkyY19kZXRlY3QuCitUaGUgYGtpbmQnIHBhcmFtZXRlciBjb250YWlucyAwIGlmIHRoaXMgY2FsbCBpcyBkdWUgdG8gYSBgZm9yY2UnCitwYXJhbWV0ZXIsIGFuZCAtMSBvdGhlcndpc2UgKGZvciBpMmNfZGV0ZWN0LCBpdCBjb250YWlucyAwIGlmCit0aGlzIGNhbGwgaXMgZHVlIHRvIHRoZSBnZW5lcmljIGBmb3JjZScgcGFyYW1ldGVyLCBhbmQgdGhlIGNoaXAgdHlwZQorbnVtYmVyIGlmIGl0IGlzIGR1ZSB0byBhIHNwZWNpZmljIGBmb3JjZScgcGFyYW1ldGVyKS4KKworQmVsb3csIHNvbWUgdGhpbmdzIGFyZSBvbmx5IG5lZWRlZCBpZiB0aGlzIGlzIGEgYHNlbnNvcnMnIGRyaXZlci4gVGhvc2UKK3BhcnRzIGFyZSBiZXR3ZWVuIC8qIFNFTlNPUlMgT05MWSBTVEFSVCAqLyBhbmQgLyogU0VOU09SUyBPTkxZIEVORCAqLworbWFya2Vycy4gCisKK1RoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgcmV0dXJuIGFuIGVycm9yIChhbnkgdmFsdWUgIT0gMCkgaWYgdGhlcmUgaXMKK3NvbWUgcmVhc29uIHdoeSBubyBtb3JlIGRldGVjdGlvbiBzaG91bGQgYmUgZG9uZSBhbnltb3JlLiBJZiB0aGUKK2RldGVjdGlvbiBqdXN0IGZhaWxzIGZvciB0aGlzIGFkZHJlc3MsIHJldHVybiAwLgorCitGb3Igbm93LCB5b3UgY2FuIGlnbm9yZSB0aGUgYGZsYWdzJyBwYXJhbWV0ZXIuIEl0IGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlLgorCisgIGludCBmb29fZGV0ZWN0X2NsaWVudChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBpbnQga2luZCkKKyAgeworICAgIGludCBlcnIgPSAwOworICAgIGludCBpOworICAgIHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50OworICAgIHN0cnVjdCBmb29fZGF0YSAqZGF0YTsKKyAgICBjb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOyAvKiBGb3Igbm9uLWBzZW5zb3JzJyBkcml2ZXJzLCBwdXQgdGhlIHJlYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIGhlcmUhICovCisgICAKKyAgICAvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGFkYXB0ZXIgY2FuIHN1cHBvcnQgd2hhdCB3ZSBuZWVkLgorICAgICAgIFBsZWFzZSBzdWJzdGl0dXRlIHRoZSB0aGluZ3MgeW91IG5lZWQgaGVyZSEgCisgICAgICAgRm9yIGBzZW5zb3JzJyBkcml2ZXJzLCBhZGQgYCEgaXNfaXNhICYmJyB0byB0aGUgaWYgc3RhdGVtZW50ICovCisgICAgaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpCisgICAgICAgZ290byBFUlJPUjA7CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgU1RBUlQgKi8KKyAgICBjb25zdCBjaGFyICp0eXBlX25hbWUgPSAiIjsKKyAgICBpbnQgaXNfaXNhID0gaTJjX2lzX2lzYV9hZGFwdGVyKGFkYXB0ZXIpOworCisgICAgaWYgKGlzX2lzYSkgeworCisgICAgICAvKiBJZiB0aGlzIGNsaWVudCBjYW4ndCBiZSBvbiB0aGUgSVNBIGJ1cyBhdCBhbGwsIHdlIGNhbiBzdG9wIG5vdworICAgICAgICAgKGNhbGwgYGdvdG8gRVJST1IwJykuIEJ1dCBmb3Iga2lja3MsIHdlIHdpbGwgYXNzdW1lIGl0IGlzIGFsbAorICAgICAgICAgcmlnaHQuICovCisKKyAgICAgIC8qIERpc2NhcmQgaW1tZWRpYXRlbHkgaWYgdGhpcyBJU0EgcmFuZ2UgaXMgYWxyZWFkeSB1c2VkICovCisgICAgICBpZiAoY2hlY2tfcmVnaW9uKGFkZHJlc3MsRk9PX0VYVEVOVCkpCisgICAgICAgIGdvdG8gRVJST1IwOworCisgICAgICAvKiBQcm9iZSB3aGV0aGVyIHRoZXJlIGlzIGFueXRoaW5nIG9uIHRoaXMgYWRkcmVzcy4KKyAgICAgICAgIFNvbWUgZXhhbXBsZSBjb2RlIGlzIGJlbG93LCBidXQgeW91IHdpbGwgaGF2ZSB0byBhZGFwdCB0aGlzCisgICAgICAgICBmb3IgeW91ciBvd24gZHJpdmVyICovCisKKyAgICAgIGlmIChraW5kIDwgMCkgLyogT25seSBpZiBubyBmb3JjZSBwYXJhbWV0ZXIgd2FzIHVzZWQgKi8geworICAgICAgICAvKiBXZSBtYXkgbmVlZCBsb25nIHRpbWVvdXRzIGF0IGxlYXN0IGZvciBzb21lIGNoaXBzLiAqLworICAgICAgICAjZGVmaW5lIFJFQUxMWV9TTE9XX0lPCisgICAgICAgIGkgPSBpbmJfcChhZGRyZXNzICsgMSk7CisgICAgICAgIGlmIChpbmJfcChhZGRyZXNzICsgMikgIT0gaSkKKyAgICAgICAgICBnb3RvIEVSUk9SMDsKKyAgICAgICAgaWYgKGluYl9wKGFkZHJlc3MgKyAzKSAhPSBpKQorICAgICAgICAgIGdvdG8gRVJST1IwOworICAgICAgICBpZiAoaW5iX3AoYWRkcmVzcyArIDcpICE9IGkpCisgICAgICAgICAgZ290byBFUlJPUjA7CisgICAgICAgICN1bmRlZiBSRUFMTFlfU0xPV19JTworCisgICAgICAgIC8qIExldCdzIGp1c3QgaG9wZSBub3RoaW5nIGJyZWFrcyBoZXJlICovCisgICAgICAgIGkgPSBpbmJfcChhZGRyZXNzICsgNSkgJiAweDdmOworICAgICAgICBvdXRiX3AofmkgJiAweDdmLGFkZHJlc3MrNSk7CisgICAgICAgIGlmICgoaW5iX3AoYWRkcmVzcyArIDUpICYgMHg3ZikgIT0gKH5pICYgMHg3ZikpIHsKKyAgICAgICAgICBvdXRiX3AoaSxhZGRyZXNzKzUpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworCisgICAgLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKKyAgICAgICBjbGllbnQgc3RydWN0dXJlLCBldmVuIHRob3VnaCB3ZSBjYW5ub3QgZmlsbCBpdCBjb21wbGV0ZWx5IHlldC4KKyAgICAgICBCdXQgaXQgYWxsb3dzIHVzIHRvIGFjY2VzcyBzZXZlcmFsIGkyYyBmdW5jdGlvbnMgc2FmZWx5ICovCisgICAgCisgICAgLyogTm90ZSB0aGF0IHdlIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgZm9vX2RhdGEgdG9vLiBJZiB5b3UgZG9uJ3QKKyAgICAgICBuZWVkIGl0LCByZW1vdmUgaXQuIFdlIGRvIGl0IGhlcmUgdG8gaGVscCB0byBsZXNzZW4gbWVtb3J5CisgICAgICAgZnJhZ21lbnRhdGlvbi4gKi8KKyAgICBpZiAoISAobmV3X2NsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGZvb19kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCkpKSB7CisgICAgICBlcnIgPSAtRU5PTUVNOworICAgICAgZ290byBFUlJPUjA7CisgICAgfQorCisgICAgLyogVGhpcyBpcyB0cmlja3ksIGJ1dCBpdCB3aWxsIHNldCB0aGUgZGF0YSB0byB0aGUgcmlnaHQgdmFsdWUuICovCisgICAgY2xpZW50LT5kYXRhID0gbmV3X2NsaWVudCArIDE7CisgICAgZGF0YSA9IChzdHJ1Y3QgZm9vX2RhdGEgKikgKGNsaWVudC0+ZGF0YSk7CisKKyAgICBuZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKyAgICBuZXdfY2xpZW50LT5kYXRhID0gZGF0YTsKKyAgICBuZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKyAgICBuZXdfY2xpZW50LT5kcml2ZXIgPSAmZm9vX2RyaXZlcjsKKyAgICBuZXdfY2xpZW50LT5mbGFncyA9IDA7CisKKyAgICAvKiBOb3csIHdlIGRvIHRoZSByZW1haW5pbmcgZGV0ZWN0aW9uLiBJZiBubyBgZm9yY2UnIHBhcmFtZXRlciBpcyB1c2VkLiAqLworCisgICAgLyogRmlyc3QsIHRoZSBnZW5lcmljIGRldGVjdGlvbiAoaWYgYW55KSwgdGhhdCBpcyBza2lwcGVkIGlmIGFueSBmb3JjZQorICAgICAgIHBhcmFtZXRlciB3YXMgdXNlZC4gKi8KKyAgICBpZiAoa2luZCA8IDApIHsKKyAgICAgIC8qIFRoZSBiZWxvdyBpcyBvZiBjb3Vyc2UgYm9ndXMgKi8KKyAgICAgIGlmIChmb29fcmVhZChuZXdfY2xpZW50LEZPT19SRUdfR0VORVJJQykgIT0gRk9PX0dFTkVSSUNfVkFMVUUpCisgICAgICAgICBnb3RvIEVSUk9SMTsKKyAgICB9CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgU1RBUlQgKi8KKworICAgIC8qIE5leHQsIHNwZWNpZmljIGRldGVjdGlvbi4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgYHNlbnNvcnMnCisgICAgICAgZGV2aWNlcy4gKi8KKworICAgIC8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiBOb3QgbmVlZGVkIGlmIGEgYGZvcmNlX0NISVBUWVBFJyBwYXJhbWV0ZXIKKyAgICAgICB3YXMgdXNlZC4gKi8KKyAgICBpZiAoa2luZCA8PSAwKSB7CisgICAgICBpID0gZm9vX3JlYWQobmV3X2NsaWVudCxGT09fUkVHX0NISVBUWVBFKTsKKyAgICAgIGlmIChpID09IEZPT19UWVBFXzEpIAorICAgICAgICBraW5kID0gY2hpcDE7IC8qIEFzIGRlZmluZWQgaW4gdGhlIGVudW0gKi8KKyAgICAgIGVsc2UgaWYgKGkgPT0gRk9PX1RZUEVfMikKKyAgICAgICAga2luZCA9IGNoaXAyOworICAgICAgZWxzZSB7CisgICAgICAgIHByaW50aygiZm9vOiBJZ25vcmluZyAnZm9yY2UnIHBhcmFtZXRlciBmb3IgdW5rbm93biBjaGlwIGF0ICIKKyAgICAgICAgICAgICAgICJhZGFwdGVyICVkLCBhZGRyZXNzIDB4JTAyeFxuIixpMmNfYWRhcHRlcl9pZChhZGFwdGVyKSxhZGRyZXNzKTsKKyAgICAgICAgZ290byBFUlJPUjE7CisgICAgICB9CisgICAgfQorCisgICAgLyogTm93IHNldCB0aGUgdHlwZSBhbmQgY2hpcCBuYW1lcyAqLworICAgIGlmIChraW5kID09IGNoaXAxKSB7CisgICAgICB0eXBlX25hbWUgPSAiY2hpcDEiOyAvKiBGb3IgL3Byb2MgZW50cnkgKi8KKyAgICAgIGNsaWVudF9uYW1lID0gIkNISVAgMSI7CisgICAgfSBlbHNlIGlmIChraW5kID09IGNoaXAyKSB7CisgICAgICB0eXBlX25hbWUgPSAiY2hpcDIiOyAvKiBGb3IgL3Byb2MgZW50cnkgKi8KKyAgICAgIGNsaWVudF9uYW1lID0gIkNISVAgMiI7CisgICAgfQorICAgCisgICAgLyogUmVzZXJ2ZSB0aGUgSVNBIHJlZ2lvbiAqLworICAgIGlmIChpc19pc2EpCisgICAgICByZXF1ZXN0X3JlZ2lvbihhZGRyZXNzLEZPT19FWFRFTlQsdHlwZV9uYW1lKTsKKworICAgIC8qIFNFTlNPUlMgT05MWSBFTkQgKi8KKworICAgIC8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzLiAqLworICAgIHN0cmNweShuZXdfY2xpZW50LT5uYW1lLGNsaWVudF9uYW1lKTsKKworICAgIC8qIFNFTlNPUlMgT05MWSBCRUdJTiAqLworICAgIGRhdGEtPnR5cGUgPSBraW5kOworICAgIC8qIFNFTlNPUlMgT05MWSBFTkQgKi8KKworICAgIGRhdGEtPnZhbGlkID0gMDsgLyogT25seSBpZiB5b3UgdXNlIHRoaXMgZmllbGQgKi8KKyAgICBpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7IC8qIE9ubHkgaWYgeW91IHVzZSB0aGlzIGZpZWxkICovCisKKyAgICAvKiBBbnkgb3RoZXIgaW5pdGlhbGl6YXRpb25zIGluIGRhdGEgbXVzdCBiZSBkb25lIGhlcmUgdG9vLiAqLworCisgICAgLyogVGVsbCB0aGUgaTJjIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLworICAgIGlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQorICAgICAgZ290byBFUlJPUjM7CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgQkVHSU4gKi8KKyAgICAvKiBSZWdpc3RlciBhIG5ldyBkaXJlY3RvcnkgZW50cnkgd2l0aCBtb2R1bGUgc2Vuc29ycy4gU2VlIGJlbG93IGZvcgorICAgICAgIHRoZSBgdGVtcGxhdGUnIHN0cnVjdHVyZS4gKi8KKyAgICBpZiAoKGkgPSBpMmNfcmVnaXN0ZXJfZW50cnkobmV3X2NsaWVudCwgdHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9vX2Rpcl90YWJsZV90ZW1wbGF0ZSxUSElTX01PRFVMRSkpIDwgMCkgeworICAgICAgZXJyID0gaTsKKyAgICAgIGdvdG8gRVJST1I0OworICAgIH0KKyAgICBkYXRhLT5zeXNjdGxfaWQgPSBpOworCisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworCisgICAgLyogVGhpcyBmdW5jdGlvbiBjYW4gd3JpdGUgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIGNsaWVudCByZWdpc3RlcnMsIGlmCisgICAgICAgbmVlZGVkLiAqLworICAgIGZvb19pbml0X2NsaWVudChuZXdfY2xpZW50KTsKKyAgICByZXR1cm4gMDsKKworICAgIC8qIE9LLCB0aGlzIGlzIG5vdCBleGFjdGx5IGdvb2QgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIHVzdWFsbHkuIEJ1dCBpdCBpcworICAgICAgIHZlcnkgY29kZS1lZmZpY2llbnQgaW4gdGhpcyBjYXNlLiAqLworCisgICAgRVJST1I0OgorICAgICAgaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CisgICAgRVJST1IzOgorICAgIEVSUk9SMjoKKyAgICAvKiBTRU5TT1JTIE9OTFkgU1RBUlQgKi8KKyAgICAgIGlmIChpc19pc2EpCisgICAgICAgIHJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsRk9PX0VYVEVOVCk7CisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworICAgIEVSUk9SMToKKyAgICAgIGtmcmVlKG5ld19jbGllbnQpOworICAgIEVSUk9SMDoKKyAgICAgIHJldHVybiBlcnI7CisgIH0KKworCitSZW1vdmluZyB0aGUgY2xpZW50Cis9PT09PT09PT09PT09PT09PT09CisKK1RoZSBkZXRhY2hfY2xpZW50IGNhbGwgYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNsaWVudCBzaG91bGQgYmUKK3JlbW92ZWQuIEl0IG1heSBhY3R1YWxseSBmYWlsLCBidXQgb25seSB3aGVuIHBhbmlja2luZy4gVGhpcyBjb2RlIGlzCittdWNoIHNpbXBsZXIgdGhhbiB0aGUgYXR0YWNobWVudCBjb2RlLCBmb3J0dW5hdGVseSEKKworICBpbnQgZm9vX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKKyAgeworICAgIGludCBlcnIsaTsKKworICAgIC8qIFNFTlNPUlMgT05MWSBTVEFSVCAqLworICAgIC8qIERlcmVnaXN0ZXIgd2l0aCB0aGUgYGkyYy1wcm9jJyBtb2R1bGUuICovCisgICAgaTJjX2RlcmVnaXN0ZXJfZW50cnkoKChzdHJ1Y3QgbG03OF9kYXRhICopKGNsaWVudC0+ZGF0YSkpLT5zeXNjdGxfaWQpOworICAgIC8qIFNFTlNPUlMgT05MWSBFTkQgKi8KKworICAgIC8qIFRyeSB0byBkZXRhY2ggdGhlIGNsaWVudCBmcm9tIGkyYyBzcGFjZSAqLworICAgIGlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpIHsKKyAgICAgIHByaW50aygiZm9vLm86IENsaWVudCBkZXJlZ2lzdHJhdGlvbiBmYWlsZWQsIGNsaWVudCBub3QgZGV0YWNoZWQuXG4iKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgLyogU0VOU09SUyBPTkxZIFNUQVJUICovCisgICAgaWYgaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KQorICAgICAgcmVsZWFzZV9yZWdpb24oY2xpZW50LT5hZGRyLExNNzhfRVhURU5UKTsKKyAgICAvKiBTRU5TT1JTIE9OTFkgRU5EICovCisKKyAgICBrZnJlZShjbGllbnQpOyAvKiBGcmVlcyBjbGllbnQgZGF0YSB0b28sIGlmIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lICovCisgICAgcmV0dXJuIDA7CisgIH0KKworCitJbml0aWFsaXppbmcgdGhlIG1vZHVsZSBvciBrZXJuZWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaGVuIHRoZSBrZXJuZWwgaXMgYm9vdGVkLCBvciB3aGVuIHlvdXIgZm9vIGRyaXZlciBtb2R1bGUgaXMgaW5zZXJ0ZWQsIAoreW91IGhhdmUgdG8gZG8gc29tZSBpbml0aWFsaXppbmcuIEZvcnR1bmF0ZWx5LCBqdXN0IGF0dGFjaGluZyAocmVnaXN0ZXJpbmcpCit0aGUgZHJpdmVyIG1vZHVsZSBpcyB1c3VhbGx5IGVub3VnaC4KKworICAvKiBLZWVwIHRyYWNrIG9mIGhvdyBmYXIgd2UgZ290IGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJZiBzZXZlcmFsCisgICAgIHRoaW5ncyBoYXZlIHRvIGluaXRpYWxpemVkLCBhbmQgd2UgZmFpbCBoYWxmd2F5LCBvbmx5IHRob3NlIHRoaW5ncworICAgICBoYXZlIHRvIGJlIGNsZWFuZWQgdXAhICovCisgIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBmb29faW5pdGlhbGl6ZWQgPSAwOworCisgIHN0YXRpYyBpbnQgX19pbml0IGZvb19pbml0KHZvaWQpCisgIHsKKyAgICBpbnQgcmVzOworICAgIHByaW50aygiZm9vIHZlcnNpb24gJXMgKCVzKVxuIixGT09fVkVSU0lPTixGT09fREFURSk7CisgICAgCisgICAgaWYgKChyZXMgPSBpMmNfYWRkX2RyaXZlcigmZm9vX2RyaXZlcikpKSB7CisgICAgICBwcmludGsoImZvbzogRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIG1vZHVsZSBub3QgaW5zZXJ0ZWQuXG4iKTsKKyAgICAgIGZvb19jbGVhbnVwKCk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmb29faW5pdGlhbGl6ZWQgKys7CisgICAgcmV0dXJuIDA7CisgIH0KKworICB2b2lkIGZvb19jbGVhbnVwKHZvaWQpCisgIHsKKyAgICBpZiAoZm9vX2luaXRpYWxpemVkID09IDEpIHsKKyAgICAgIGlmICgocmVzID0gaTJjX2RlbF9kcml2ZXIoJmZvb19kcml2ZXIpKSkgeworICAgICAgICBwcmludGsoImZvbzogRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIG1vZHVsZSBub3QgcmVtb3ZlZC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBmb29faW5pdGlhbGl6ZWQgLS07CisgICAgfQorICB9CisKKyAgLyogU3Vic3RpdHV0ZSB5b3VyIG93biBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzICovCisgIE1PRFVMRV9BVVRIT1IoIkZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4iCisgIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBCYXJmIEluYy4gRm9vIEkyQyBkZXZpY2VzIik7CisKKyAgbW9kdWxlX2luaXQoZm9vX2luaXQpOworICBtb2R1bGVfZXhpdChmb29fY2xlYW51cCk7CisKK05vdGUgdGhhdCBzb21lIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGJ5IGBfX2luaXQnLCBhbmQgc29tZSBkYXRhIHN0cnVjdHVyZXMKK2J5IGBfX2luaXRfZGF0YScuICBIb3NlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyBjYW4gYmUgcmVtb3ZlZCBhZnRlcgora2VybmVsIGJvb3RpbmcgKG9yIG1vZHVsZSBsb2FkaW5nKSBpcyBjb21wbGV0ZWQuCisKK0NvbW1hbmQgZnVuY3Rpb24KKz09PT09PT09PT09PT09PT0KKworQSBnZW5lcmljIGlvY3RsLWxpa2UgZnVuY3Rpb24gY2FsbCBiYWNrIGlzIHN1cHBvcnRlZC4gWW91IHdpbGwgc2VsZG9tCituZWVkIHRoaXMuIFlvdSBtYXkgZXZlbiBzZXQgaXQgdG8gTlVMTC4KKworICAvKiBObyBjb21tYW5kcyBkZWZpbmVkICovCisgIGludCBmb29fY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCisgIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKK1NlbmRpbmcgYW5kIHJlY2VpdmluZworPT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSB3YW50IHRvIGNvbW11bmljYXRlIHdpdGggeW91ciBkZXZpY2UsIHRoZXJlIGFyZSBzZXZlcmFsIGZ1bmN0aW9ucwordG8gZG8gdGhpcy4gWW91IGNhbiBmaW5kIGFsbCBvZiB0aGVtIGluIGkyYy5oLgorCitJZiB5b3UgY2FuIGNob29zZSBiZXR3ZWVuIHBsYWluIGkyYyBjb21tdW5pY2F0aW9uIGFuZCBTTUJ1cyBsZXZlbAorY29tbXVuaWNhdGlvbiwgcGxlYXNlIHVzZSB0aGUgbGFzdC4gQWxsIGFkYXB0ZXJzIHVuZGVyc3RhbmQgU01CdXMgbGV2ZWwKK2NvbW1hbmRzLCBidXQgb25seSBzb21lIG9mIHRoZW0gdW5kZXJzdGFuZCBwbGFpbiBpMmMhCisKKworUGxhaW4gaTJjIGNvbW11bmljYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZXh0ZXJuIGludCBpMmNfbWFzdGVyX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKixjb25zdCBjaGFyKiAsaW50KTsKKyAgZXh0ZXJuIGludCBpMmNfbWFzdGVyX3JlY3Yoc3RydWN0IGkyY19jbGllbnQgKixjaGFyKiAsaW50KTsKKworVGhlc2Ugcm91dGluZXMgcmVhZCBhbmQgd3JpdGUgc29tZSBieXRlcyBmcm9tL3RvIGEgY2xpZW50LiBUaGUgY2xpZW50Citjb250YWlucyB0aGUgaTJjIGFkZHJlc3MsIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBpbmNsdWRlIGl0LiBUaGUgc2Vjb25kCitwYXJhbWV0ZXIgY29udGFpbnMgdGhlIGJ5dGVzIHRoZSByZWFkL3dyaXRlLCB0aGUgdGhpcmQgdGhlIGxlbmd0aCBvZiB0aGUKK2J1ZmZlci4gUmV0dXJuZWQgaXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZC93cml0dGVuLgorICAKKyAgZXh0ZXJuIGludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtKTsKKworVGhpcyBzZW5kcyBhIHNlcmllcyBvZiBtZXNzYWdlcy4gRWFjaCBtZXNzYWdlIGNhbiBiZSBhIHJlYWQgb3Igd3JpdGUsCithbmQgdGhleSBjYW4gYmUgbWl4ZWQgaW4gYW55IHdheS4gVGhlIHRyYW5zYWN0aW9ucyBhcmUgY29tYmluZWQ6IG5vCitzdG9wIGJpdCBpcyBzZW50IGJldHdlZW4gdHJhbnNhY3Rpb24uIFRoZSBpMmNfbXNnIHN0cnVjdHVyZSBjb250YWlucworZm9yIGVhY2ggbWVzc2FnZSB0aGUgY2xpZW50IGFkZHJlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UKK2FuZCB0aGUgbWVzc2FnZSBkYXRhIGl0c2VsZi4KKworWW91IGNhbiByZWFkIHRoZSBmaWxlIGBpMmMtcHJvdG9jb2wnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorYWN0dWFsIGkyYyBwcm90b2NvbC4KKworCitTTUJ1cyBjb21tdW5pY2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfeGZlciAoc3RydWN0IGkyY19hZGFwdGVyICogYWRhcHRlciwgdTE2IGFkZHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaTJjX3NtYnVzX2RhdGEgKiBkYXRhKTsKKworICBUaGlzIGlzIHRoZSBnZW5lcmljIFNNQnVzIGZ1bmN0aW9uLiBBbGwgZnVuY3Rpb25zIGJlbG93IGFyZSBpbXBsZW1lbnRlZAorICBpbiB0ZXJtcyBvZiBpdC4gTmV2ZXIgdXNlIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhCisKKworICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9xdWljayhzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggdmFsdWUpOworICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQpOworICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCBjb21tYW5kKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggdmFsdWUpOworICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggY29tbWFuZCk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICp2YWx1ZXMpOworCitUaGVzZSBvbmVzIHdlcmUgcmVtb3ZlZCBpbiBMaW51eCAyLjYuMTAgYmVjYXVzZSB0aGV5IGhhZCBubyB1c2VycywgYnV0IGNvdWxkCitiZSBhZGRlZCBiYWNrIGxhdGVyIGlmIG5lZWRlZDoKKworICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHU4ICp2YWx1ZXMpOworICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1OCAqdmFsdWVzKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHU4IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnZhbHVlcyk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX2Jsb2NrX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnZhbHVlcykKKworQWxsIHRoZXNlIHRyYW5zYWN0aW9ucyByZXR1cm4gLTEgb24gZmFpbHVyZS4gVGhlICd3cml0ZScgdHJhbnNhY3Rpb25zIAorcmV0dXJuIDAgb24gc3VjY2VzczsgdGhlICdyZWFkJyB0cmFuc2FjdGlvbnMgcmV0dXJuIHRoZSByZWFkIHZhbHVlLCBleGNlcHQgCitmb3IgcmVhZF9ibG9jaywgd2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZWFkLiBUaGUgYmxvY2sgYnVmZmVycyAKK25lZWQgbm90IGJlIGxvbmdlciB0aGFuIDMyIGJ5dGVzLgorCitZb3UgY2FuIHJlYWQgdGhlIGZpbGUgYHNtYnVzLXByb3RvY29sJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2FjdHVhbCBTTUJ1cyBwcm90b2NvbC4KKworCitHZW5lcmFsIHB1cnBvc2Ugcm91dGluZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCZWxvdyBhbGwgZ2VuZXJhbCBwdXJwb3NlIHJvdXRpbmVzIGFyZSBsaXN0ZWQsIHRoYXQgd2VyZSBub3QgbWVudGlvbmVkCitiZWZvcmUuCisKKyAgLyogVGhpcyBjYWxsIHJldHVybnMgYSB1bmlxdWUgbG93IGlkZW50aWZpZXIgZm9yIGVhY2ggcmVnaXN0ZXJlZCBhZGFwdGVyLAorICAgKiBvciAtMSBpZiB0aGUgYWRhcHRlciB3YXMgbm90IHJlZ2lzdGVyZWQuCisgICAqLworICBleHRlcm4gaW50IGkyY19hZGFwdGVyX2lkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCk7CisKKworVGhlIHNlbnNvcnMgc3lzY3RsL3Byb2MgaW50ZXJmYWNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIG9ubHkgYXBwbGllcyBpZiB5b3Ugd3JpdGUgYHNlbnNvcnMnIGRyaXZlcnMuCisKK0VhY2ggc2Vuc29ycyBkcml2ZXIgY3JlYXRlcyBhIGRpcmVjdG9yeSBpbiAvcHJvYy9zeXMvZGV2L3NlbnNvcnMgZm9yIGVhY2gKK3JlZ2lzdGVyZWQgY2xpZW50LiBUaGUgZGlyZWN0b3J5IGlzIGNhbGxlZCBzb21ldGhpbmcgbGlrZSBmb28taTJjLTQtNjUuCitUaGUgc2Vuc29ycyBtb2R1bGUgaGVscHMgeW91IHRvIGRvIHRoaXMgYXMgZWFzaWx5IGFzIHBvc3NpYmxlLgorCitUaGUgdGVtcGxhdGUKKy0tLS0tLS0tLS0tLQorCitZb3Ugd2lsbCBuZWVkIHRvIGRlZmluZSBhIGN0bF90YWJsZSB0ZW1wbGF0ZS4gVGhpcyB0ZW1wbGF0ZSB3aWxsIGF1dG9tYXRpY2FsbHkKK2JlIGNvcGllZCB0byBhIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYW5kIGZpbGxlZCBpbiB3aGVyZSBuZWNlc3Nhcnkgd2hlbgoreW91IGNhbGwgc2Vuc29yc19yZWdpc3Rlcl9lbnRyeS4KKworRmlyc3QsIEkgd2lsbCBnaXZlIGFuIGV4YW1wbGUgZGVmaW5pdGlvbi4KKyAgc3RhdGljIGN0bF90YWJsZSBmb29fZGlyX3RhYmxlX3RlbXBsYXRlW10gPSB7CisgICAgeyBGT09fU1lTQ1RMX0ZVTkMxLCAiZnVuYzEiLCBOVUxMLCAwLCAwNjQ0LCBOVUxMLCAmaTJjX3Byb2NfcmVhbCwKKyAgICAgICZpMmNfc3lzY3RsX3JlYWwsTlVMTCwmZm9vX2Z1bmMgfSwKKyAgICB7IEZPT19TWVNDVExfRlVOQzIsICJmdW5jMiIsIE5VTEwsIDAsIDA2NDQsIE5VTEwsICZpMmNfcHJvY19yZWFsLAorICAgICAgJmkyY19zeXNjdGxfcmVhbCxOVUxMLCZmb29fZnVuYyB9LAorICAgIHsgRk9PX1NZU0NUTF9EQVRBLCAiZGF0YSIsIE5VTEwsIDAsIDA2NDQsIE5VTEwsICZpMmNfcHJvY19yZWFsLAorICAgICAgJmkyY19zeXNjdGxfcmVhbCxOVUxMLCZmb29fZGF0YSB9LAorICAgIHsgMCB9CisgIH07CisKK0luIHRoZSBhYm92ZSBleGFtcGxlLCB0aHJlZSBlbnRyaWVzIGFyZSBkZWZpbmVkLiBUaGV5IGNhbiBlaXRoZXIgYmUKK2FjY2Vzc2VkIHRocm91Z2ggdGhlIC9wcm9jIGludGVyZmFjZSwgaW4gdGhlIC9wcm9jL3N5cy9kZXYvc2Vuc29ycy8qCitkaXJlY3RvcmllcywgYXMgZmlsZXMgbmFtZWQgZnVuYzEsIGZ1bmMyIGFuZCBkYXRhLCBvciBhbHRlcm5hdGl2ZWx5IAordGhyb3VnaCB0aGUgc3lzY3RsIGludGVyZmFjZSwgaW4gdGhlIGFwcHJvcHJpYXRlIHRhYmxlLCB3aXRoIGlkZW50aWZpZXJzCitGT09fU1lTQ1RMX0ZVTkMxLCBGT09fU1lTQ1RMX0ZVTkMyIGFuZCBGT09fU1lTQ1RMX0RBVEEuCisKK1RoZSB0aGlyZCwgc2l4dGggYW5kIG5pbnRoIHBhcmFtZXRlcnMgc2hvdWxkIGFsd2F5cyBiZSBOVUxMLCBhbmQgdGhlCitmb3VydGggc2hvdWxkIGFsd2F5cyBiZSAwLiBUaGUgZmlmdGggaXMgdGhlIG1vZGUgb2YgdGhlIC9wcm9jIGZpbGU7CiswNjQ0IGlzIHNhZmUsIGFzIHRoZSBmaWxlIHdpbGwgYmUgb3duZWQgYnkgcm9vdDpyb290LiAKKworVGhlIHNldmVudGggYW5kIGVpZ2h0aCBwYXJhbWV0ZXJzIHNob3VsZCBiZSAmaTJjX3Byb2NfcmVhbCBhbmQKKyZpMmNfc3lzY3RsX3JlYWwgaWYgeW91IHdhbnQgdG8gZXhwb3J0IGxpc3RzIG9mIHJlYWxzIChzY2FsZWQKK2ludGVnZXJzKS4gWW91IGNhbiBhbHNvIHVzZSB5b3VyIG93biBmdW5jdGlvbiBmb3IgdGhlbSwgYXMgdXN1YWwuCitGaW5hbGx5LCB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgdGhlIGNhbGwtYmFjayB0byBnYXRoZXIgdGhlIGRhdGEKKyhzZWUgYmVsb3cpIGlmIHlvdSB1c2UgdGhlICpfcHJvY19yZWFsIGZ1bmN0aW9ucy4gCisKKworR2F0aGVyaW5nIHRoZSBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhbGwgYmFjayBmdW5jdGlvbnMgKGZvb19mdW5jIGFuZCBmb29fZGF0YSBpbiB0aGUgYWJvdmUgZXhhbXBsZSkKK2NhbiBiZSBjYWxsZWQgaW4gc2V2ZXJhbCB3YXlzOyB0aGUgb3BlcmF0aW9uIHBhcmFtZXRlciBkZXRlcm1pbmVzCit3aGF0IHNob3VsZCBiZSBkb25lOgorCisgICogSWYgb3BlcmF0aW9uID09IFNFTlNPUlNfUFJPQ19SRUFMX0lORk8sIHlvdSBtdXN0IHJldHVybiB0aGUKKyAgICBtYWduaXR1ZGUgKHNjYWxpbmcpIGluIG5yZWxzX21hZzsKKyAgKiBJZiBvcGVyYXRpb24gPT0gU0VOU09SU19QUk9DX1JFQUxfUkVBRCwgeW91IG11c3QgcmVhZCBpbmZvcm1hdGlvbgorICAgIGZyb20gdGhlIGNoaXAgYW5kIHJldHVybiBpdCBpbiByZXN1bHRzLiBUaGUgbnVtYmVyIG9mIGludGVnZXJzCisgICAgdG8gZGlzcGxheSBzaG91bGQgYmUgcHV0IGluIG5yZWxzX21hZzsKKyAgKiBJZiBvcGVyYXRpb24gPT0gU0VOU09SU19QUk9DX1JFQUxfV1JJVEUsIHlvdSBtdXN0IHdyaXRlIHRoZQorICAgIHN1cHBsaWVkIGluZm9ybWF0aW9uIHRvIHRoZSBjaGlwLiBucmVsc19tYWcgd2lsbCBjb250YWluIHRoZSBudW1iZXIKKyAgICBvZiBpbnRlZ2VycywgcmVzdWx0cyB0aGUgaW50ZWdlcnMgdGhlbXNlbHZlcy4KKworVGhlICpfcHJvY19yZWFsIGZ1bmN0aW9ucyB3aWxsIGRpc3BsYXkgdGhlIGVsZW1lbnRzIGFzIHJlYWxzIGZvciB0aGUKKy9wcm9jIGludGVyZmFjZS4gSWYgeW91IHNldCB0aGUgbWFnbml0dWRlIHRvIDIsIGFuZCBzdXBwbHkgMzQ1IGZvcgorU0VOU09SU19QUk9DX1JFQUxfUkVBRCwgaXQgd291bGQgZGlzcGxheSAzLjQ1OyBhbmQgaWYgdGhlIHVzZXIgd291bGQKK3dyaXRlIDQ1LjYgdG8gdGhlIC9wcm9jIGZpbGUsIGl0IHdvdWxkIGJlIHJldHVybmVkIGFzIDQ1NjAgZm9yCitTRU5TT1JTX1BST0NfUkVBTF9XUklURS4gQSBtYWduaXR1ZGUgbWF5IGV2ZW4gYmUgbmVnYXRpdmUhCisKK0FuIGV4YW1wbGUgZnVuY3Rpb246CisKKyAgLyogRk9PX0ZST01fUkVHIGFuZCBGT09fVE9fUkVHIHRyYW5zbGF0ZSBiZXR3ZWVuIHNjYWxlZCB2YWx1ZXMgYW5kCisgICAgIHJlZ2lzdGVyIHZhbHVlcy4gTm90ZSB0aGUgdXNlIG9mIHRoZSByZWFkIGNhY2hlLiAqLworICB2b2lkIGZvb19pbihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgb3BlcmF0aW9uLCBpbnQgY3RsX25hbWUsIAorICAgICAgICAgICAgICBpbnQgKm5yZWxzX21hZywgbG9uZyAqcmVzdWx0cykKKyAgeworICAgIHN0cnVjdCBmb29fZGF0YSAqZGF0YSA9IGNsaWVudC0+ZGF0YTsKKyAgICBpbnQgbnIgPSBjdGxfbmFtZSAtIEZPT19TWVNDVExfRlVOQzE7IC8qIHJlZHVjZSB0byAwIHVwd2FyZHMgKi8KKyAgICAKKyAgICBpZiAob3BlcmF0aW9uID09IFNFTlNPUlNfUFJPQ19SRUFMX0lORk8pCisgICAgICAqbnJlbHNfbWFnID0gMjsKKyAgICBlbHNlIGlmIChvcGVyYXRpb24gPT0gU0VOU09SU19QUk9DX1JFQUxfUkVBRCkgeworICAgICAgLyogVXBkYXRlIHRoZSByZWFkaW5ncyBjYWNoZSAoaWYgbmVjZXNzYXJ5KSAqLworICAgICAgZm9vX3VwZGF0ZV9jbGllbnQoY2xpZW50KTsKKyAgICAgIC8qIEdldCB0aGUgcmVhZGluZ3MgZnJvbSB0aGUgY2FjaGUgKi8KKyAgICAgIHJlc3VsdHNbMF0gPSBGT09fRlJPTV9SRUcoZGF0YS0+Zm9vX2Z1bmNfYmFzZVtucl0pOworICAgICAgcmVzdWx0c1sxXSA9IEZPT19GUk9NX1JFRyhkYXRhLT5mb29fZnVuY19tb3JlW25yXSk7CisgICAgICByZXN1bHRzWzJdID0gRk9PX0ZST01fUkVHKGRhdGEtPmZvb19mdW5jX3JlYWRvbmx5W25yXSk7CisgICAgICAqbnJlbHNfbWFnID0gMjsKKyAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBTRU5TT1JTX1BST0NfUkVBTF9XUklURSkgeworICAgICAgaWYgKCpucmVsc19tYWcgPj0gMSkgeworICAgICAgICAvKiBVcGRhdGUgdGhlIGNhY2hlICovCisgICAgICAgIGRhdGEtPmZvb19iYXNlW25yXSA9IEZPT19UT19SRUcocmVzdWx0c1swXSk7CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgY2hpcCAqLworICAgICAgICBmb29fd3JpdGVfdmFsdWUoY2xpZW50LEZPT19SRUdfRlVOQ19CQVNFKG5yKSxkYXRhLT5mb29fYmFzZVtucl0pOworICAgICAgfQorICAgICAgaWYgKCpucmVsc19tYWcgPj0gMikgeworICAgICAgICAvKiBVcGRhdGUgdGhlIGNhY2hlICovCisgICAgICAgIGRhdGEtPmZvb19tb3JlW25yXSA9IEZPT19UT19SRUcocmVzdWx0c1sxXSk7CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgY2hpcCAqLworICAgICAgICBmb29fd3JpdGVfdmFsdWUoY2xpZW50LEZPT19SRUdfRlVOQ19NT1JFKG5yKSxkYXRhLT5mb29fbW9yZVtucl0pOworICAgICAgfQorICAgIH0KKyAgfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMm8vUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9pMm8vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYTZkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyby9SRUFETUUKQEAgLTAsMCArMSw2MyBAQAorCisJTGludXggSTJPIFN1cHBvcnQJKGMpIENvcHlyaWdodCAxOTk5IFJlZCBIYXQgU29mdHdhcmUKKwkJCQkJYW5kIG90aGVycy4KKworCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKwltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0FVVEhPUlMgKHNvIGZhcikKKworQWxhbiBDb3gsIEJ1aWxkaW5nIE51bWJlciBUaHJlZSBMdGQuCisJQ29yZSBjb2RlLCBTQ1NJIGFuZCBCbG9jayBPU01zCisKK1N0ZXZlIFJhbHN0b24sIExTSSBMb2dpYyBDb3JwLgorCURlYnVnZ2luZyBTQ1NJIGFuZCBCbG9jayBPU00KKworRGVlcGFrIFNheGVuYSwgSW50ZWwgQ29ycC4KKwlWYXJpb3VzIGNvcmUvYmxvY2sgZXh0ZW5zaW9ucworCS9wcm9jIGludGVyZmFjZSwgYnVnIGZpeGVzCisJSW9jdGwgaW50ZXJmYWNlcyBmb3IgY29udHJvbAorCURlYnVnZ2luZyBMQU4gT1NNCisKK1BoaWxpcCBSdW1wZgorCUZpeGVkIGFzc29ydGVkIGR1bWIgU01QIGxvY2tpbmcgYnVncworCitKdWhhIFNpZXZhbmVuLCBVbml2ZXJzaXR5IG9mIEhlbHNpbmtpIEZpbmxhbmQKKwlMQU4gT1NNIGNvZGUKKwkvcHJvYyBpbnRlcmZhY2UgdG8gTEFOIGNsYXNzCisJQnVnIGZpeGVzCisJQ29yZSBjb2RlIGV4dGVuc2lvbnMKKworQXV2byBI5GtraW5lbiwgVW5pdmVyc2l0eSBvZiBIZWxzaW5raSBGaW5sYW5kCisJTEFOIE9TTSBjb2RlCisJL1Byb2MgaW50ZXJmYWNlIHRvIExBTiBjbGFzcworCUJ1ZyBmaXhlcworCUNvcmUgY29kZSBleHRlbnNpb25zCisKK1RhbmVsaSBW5Gjka2FuZ2FzLCBVbml2ZXJzaXR5IG9mIEhlbHNpbmtpIEZpbmxhbmQKKwlGaXhlcyB0byBpMm9fY29uZmlnCisKK0NSRURJVFMKKworCVRoaXMgd29yayB3YXMgbWFkZSBwb3NzaWJsZSBieQorCitSZWQgSGF0IFNvZnR3YXJlCisJRnVuZGluZyBmb3IgdGhlIEJ1aWxkaW5nICMzIHBhcnQgb2YgdGhlIHByb2plY3QKKworU3ltYmlvcyBMb2dpYyAoTm93IExTSSkKKwlIb3N0IGFkYXB0ZXJzLCBoaW50cywga25vd24gdG8gd29yayBwbGF0Zm9ybXMgd2hlbiBJIGhpdAorCWNvbXBhdGliaWxpdHkgcHJvYmxlbXMKKworQm94SGlsbCBDb3Jwb3JhdGlvbgorCUxvYW4gb2YgaW5pdGlhbCBGaWJyZUNoYW5uZWwgZGlzayBhcnJheSB1c2VkIGZvciBkZXZlbG9wbWVudCB3b3JrLgorCitFdXJvcGVhbiBDb21pc3Npb24KKwlGdW5kaW5nIHRoZSB3b3JrIGRvbmUgYnkgdGhlIFVuaXZlcnNpdHkgb2YgSGVsc2lua2kKKworU3lzS29ubmVjdAorICAgICAgICBMb2FuIG9mIEZEREkgYW5kIEdpZ2FiaXQgRXRoZXJuZXQgY2FyZHMKKworQVNVU1RlSworICAgICAgICBMb2FuIG9mIEkyTyBtb3RoZXJib2FyZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMm8vaW9jdGwgYi9Eb2N1bWVudGF0aW9uL2kyby9pb2N0bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTE3NDk3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMm8vaW9jdGwKQEAgLTAsMCArMSwzOTQgQEAKKworTGludXggSTJPIFVzZXIgU3BhY2UgSW50ZXJmYWNlCityZXYgMC4zIC0gMDQvMjAvOTkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK09yaWdpbmFsbHkgd3JpdHRlbiBieSBEZWVwYWsgU2F4ZW5hKGRlZXBha0BwbGV4aXR5Lm5ldCkKK0N1cnJlbnRseSBtYWludGFpbmVkIGJ5IERlZXBhayBTYXhlbmEoZGVlcGFrQHBsZXhpdHkubmV0KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSS4gSW50cm9kdWN0aW9uCisKK1RoZSBMaW51eCBJMk8gc3Vic3lzdGVtIHByb3ZpZGVzIGEgc2V0IG9mIGlvY3RsKCkgY29tbWFuZHMgdGhhdCBjYW4gYmUKK3V0aWxpemVkIGJ5IHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIHRvIGNvbW11bmljYXRlIHdpdGggSU9QcyBhbmQgZGV2aWNlcworb24gaW5kaXZpZHVhbCBJT1BzLiBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIHNwZWNpZmljIGlvY3RsKCkgY29tbWFuZHMKK3RoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgZXhhbXBsZXMgb2YgdGhlaXIgdXNlcy4KKworVGhpcyBkb2N1bWVudCBhc3N1bWVzIHRoZSByZWFkZXIgaXMgZmFtaWxpYXIgd2l0aCBvciBoYXMgYWNjZXNzIHRvIHRoZQorSTJPIHNwZWNpZmljYXRpb24gYXMgbm8gSTJPIG1lc3NhZ2UgcGFyYW1ldGVycyBhcmUgb3V0bGluZWQuICBGb3IgaW5mb3JtYXRpb24KK29uIHRoZSBzcGVjaWZpY2F0aW9uLCBzZWUgaHR0cDovL3d3dy5pMm9zaWcub3JnCisKK1RoaXMgZG9jdW1lbnQgYW5kIHRoZSBJMk8gdXNlciBzcGFjZSBpbnRlcmZhY2UgYXJlIGN1cnJlbnRseSBtYWludGFpbmVkCitieSBEZWVwYWsgU2F4ZW5hLiAgUGxlYXNlIHNlbmQgYWxsIGNvbW1lbnRzLCBlcnJhdGEsIGFuZCBidWcgZml4ZXMgdG8KK2RlZXBha0Bjc29jaWV0eS5wdXJkdWUuZWR1CisKK0lJLiBJT1AgQWNjZXNzCisKK0FjY2VzcyB0byB0aGUgSTJPIHN1YnN5c3RlbSBpcyBwcm92aWRlZCB0aHJvdWdoIHRoZSBkZXZpY2UgZmlsZSBuYW1lZAorL2Rldi9pMm8vY3RsLiAgVGhpcyBmaWxlIGlzIGEgY2hhcmFjdGVyIGZpbGUgd2l0aCBtYWpvciBudW1iZXIgMTAgYW5kIG1pbm9yCitudW1iZXIgMTY2LiAgSXQgY2FuIGJlIGNyZWF0ZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgIG1rbm9kIC9kZXYvaTJvL2N0bCBjIDEwIDE2NgorCitJSUkuIERldGVybWluaW5nIHRoZSBJT1AgQ291bnQKKworICAgU1lOT1BTSVMKKworICAgaW9jdGwoZmQsIEkyT0dFVElPUFMsICBpbnQgKmNvdW50KTsKKworICAgdTggY291bnRbTUFYX0kyT19DT05UUk9MTEVSU107CisKKyAgIERFU0NSSVBUSU9OCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3lzdGVtJ3MgYWN0aXZlIElPUCB0YWJsZS4gIGNvdW50IHNob3VsZAorICAgcG9pbnQgdG8gYSBidWZmZXIgY29udGFpbmluZyBNQVhfSTJPX0NPTlRST0xMRVJTIGVudHJpZXMuICBVcG9uCisgICByZXR1cm5pbmcsIGVhY2ggZW50cnkgd2lsbCBjb250YWluIGEgbm9uLXplcm8gdmFsdWUgaWYgdGhlIGdpdmVuCisgICBJT1AgdW5pdCBpcyBhY3RpdmUsIGFuZCBOVUxMIGlmIGl0IGlzIGluYWN0aXZlIG9yIG5vbi1leGlzdGVudC4KKworICAgUkVUVVJOIFZBTFVFLgorCisgICBSZXR1cm5zIDAgaWYgbm8gZXJyb3JzIG9jY3VyLCBhbmQgLTEgb3RoZXJ3aXNlLiAgSWYgYW4gZXJyb3Igb2NjdXJzLAorICAgZXJybm8gaXMgc2V0IGFwcHJvcHJpYXRlbHk6CisKKyAgICAgRUZBVUxUICAgSW52YWxpZCB1c2VyIHNwYWNlIHBvaW50ZXIgd2FzIHBhc3NlZAorCitJVi4gR2V0dGluZyBIYXJkd2FyZSBSZXNvdXJjZSBUYWJsZQorCisgICBTWU5PUFNJUworCisgICBpb2N0bChmZCwgSTJPSFJUR0VULCBzdHJ1Y3QgaTJvX2NtZF9ocnQgKmhydCk7CisKKyAgICAgIHN0cnVjdCBpMm9fY21kX2hydGxjdAorICAgICAgeworICAgICAgICAgdTMyICAgaW9wOyAgICAgIC8qIElPUCB1bml0IG51bWJlciAqLworICAgICAgICAgdm9pZCAgKnJlc2J1ZjsgIC8qIEJ1ZmZlciBmb3IgcmVzdWx0ICovCisgICAgICAgICB1MzIgICAqcmVzbGVuOyAgLyogQnVmZmVyIGxlbmd0aCBpbiBieXRlcyAqLworICAgICAgfTsKKworICAgREVTQ1JJUFRJT04KKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBIYXJkd2FyZSBSZXNvdXJjZSBUYWJsZSBvZiB0aGUgSU9QIHNwZWNpZmllZAorICAgYnkgaHJ0LT5pb3AgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IGhydC0+cmVzYnVmLiBUaGUgYWN0dWFsIHNpemUgb2YKKyAgIHRoZSBkYXRhIGlzIHdyaXR0ZW4gaW50byAqKGhydC0+cmVzbGVuKS4KKworICAgUkVUVVJOUworCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBubyBlcnJvcnMgb2NjdXIuIElmIGFuIGVycm9yIG9jY3VycywgLTEKKyAgIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgYXBwcm9wcmlhdGVseToKKworICAgICAgRUZBVUxUICAgICAgSW52YWxpZCB1c2VyIHNwYWNlIHBvaW50ZXIgd2FzIHBhc3NlZAorICAgICAgRU5YSU8gICAgICAgSW52YWxpZCBJT1AgbnVtYmVyCisgICAgICBFTk9CVUZTICAgICBCdWZmZXIgbm90IGxhcmdlIGVub3VnaC4gIElmIHRoaXMgb2NjdXJzLCB0aGUgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGggaXMgd3JpdHRlbiBpbnRvICooaHJ0LT5yZXNsZW4pCisKK1YuIEdldHRpbmcgTG9naWNhbCBDb25maWd1cmF0aW9uIFRhYmxlCisKKyAgIFNZTk9QU0lTCisKKyAgIGlvY3RsKGZkLCBJMk9MQ1RHRVQsIHN0cnVjdCBpMm9fY21kX2xjdCAqbGN0KTsKKworICAgICAgc3RydWN0IGkyb19jbWRfaHJ0bGN0CisgICAgICB7CisgICAgICAgICB1MzIgICBpb3A7ICAgICAgLyogSU9QIHVuaXQgbnVtYmVyICovCisgICAgICAgICB2b2lkICAqcmVzYnVmOyAgLyogQnVmZmVyIGZvciByZXN1bHQgKi8KKyAgICAgICAgIHUzMiAgICpyZXNsZW47ICAvKiBCdWZmZXIgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgICB9OworCisgICBERVNDUklQVElPTgorCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIExvZ2ljYWwgQ29uZmlndXJhdGlvbiBUYWJsZSBvZiB0aGUgSU9QIHNwZWNpZmllZAorICAgYnkgbGN0LT5pb3AgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IGxjdC0+cmVzYnVmLiBUaGUgYWN0dWFsIHNpemUgb2YKKyAgIHRoZSBkYXRhIGlzIHdyaXR0ZW4gaW50byAqKGxjdC0+cmVzbGVuKS4KKworICAgUkVUVVJOUworCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBubyBlcnJvcnMgb2NjdXIuIElmIGFuIGVycm9yIG9jY3VycywgLTEKKyAgIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgYXBwcm9wcmlhdGVseToKKworICAgICAgRUZBVUxUICAgICAgSW52YWxpZCB1c2VyIHNwYWNlIHBvaW50ZXIgd2FzIHBhc3NlZAorICAgICAgRU5YSU8gICAgICAgSW52YWxpZCBJT1AgbnVtYmVyCisgICAgICBFTk9CVUZTICAgICBCdWZmZXIgbm90IGxhcmdlIGVub3VnaC4gIElmIHRoaXMgb2NjdXJzLCB0aGUgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGggaXMgd3JpdHRlbiBpbnRvICoobGN0LT5yZXNsZW4pCisKK1ZJLiBTZXR0dGluZyBQYXJhbWV0ZXJzCisKKyAgIFNZTk9QU0lTCisKKyAgIGlvY3RsKGZkLCBJMk9QQVJNU0VULCBzdHJ1Y3QgaTJvX3Bhcm1fc2V0Z2V0ICpvcHMpOworCisgICAgICBzdHJ1Y3QgaTJvX2NtZF9wc2V0Z2V0CisgICAgICB7CisgICAgICAgICB1MzIgICBpb3A7ICAgICAgLyogSU9QIHVuaXQgbnVtYmVyICovCisgICAgICAgICB1MzIgICB0aWQ7ICAgICAgLyogVGFyZ2V0IGRldmljZSBUSUQgKi8KKyAgICAgICAgIHZvaWQgICpvcGJ1ZjsgICAvKiBPcGVyYXRpb24gTGlzdCBidWZmZXIgKi8KKyAgICAgICAgIHUzMiAgIG9wbGVuOyAgICAvKiBPcGVyYXRpb24gTGlzdCBidWZmZXIgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgICAgICB2b2lkICAqcmVzYnVmOyAgLyogUmVzdWx0IExpc3QgYnVmZmVyICovCisgICAgICAgICB1MzIgICAqcmVzbGVuOyAgLyogUmVzdWx0IExpc3QgYnVmZmVyIGxlbmd0aCBpbiBieXRlcyAqLworICAgICAgfTsKKworICAgREVTQ1JJUFRJT04KKworICAgVGhpcyBmdW5jdGlvbiBwb3N0cyBhIFV0aWxQYXJhbXNTZXQgbWVzc2FnZSB0byB0aGUgZGV2aWNlIGlkZW50aWZpZWQKKyAgIGJ5IG9wcy0+aW9wIGFuZCBvcHMtPnRpZC4gIFRoZSBvcGVyYXRpb24gbGlzdCBmb3IgdGhlIG1lc3NhZ2UgaXMKKyAgIHNlbnQgdGhyb3VnaCB0aGUgb3BzLT5vcGJ1ZiBidWZmZXIsIGFuZCB0aGUgcmVzdWx0IGxpc3QgaXMgd3JpdHRlbgorICAgaW50byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgb3BzLT5yZXNidWYuICBUaGUgbnVtYmVyIG9mIGJ5dGVzCisgICB3cml0dGVuIGlzIHBsYWNlZCBpbnRvICoob3BzLT5yZXNsZW4pLgorCisgICBSRVRVUk5TCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGRhdGEgd3JpdHRlbiBpbnRvCisgICBvcHMtPnJlc2J1ZiBpZiBubyBlcnJvcnMgb2NjdXIuICBJZiBhbiBlcnJvciBvY2N1cnMsIC0xIGlzIHJldHVybmVkCisgICBhbmQgZXJybm8gaXMgc2V0IGFwcHJvcHJpYXRseToKKworICAgICAgRUZBVUxUICAgICAgSW52YWxpZCB1c2VyIHNwYWNlIHBvaW50ZXIgd2FzIHBhc3NlZAorICAgICAgRU5YSU8gICAgICAgSW52YWxpZCBJT1AgbnVtYmVyCisgICAgICBFTk9CVUZTICAgICBCdWZmZXIgbm90IGxhcmdlIGVub3VnaC4gIElmIHRoaXMgb2NjdXJzLCB0aGUgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGggaXMgd3JpdHRlbiBpbnRvICoob3BzLT5yZXNsZW4pCisgICAgICBFVElNRURPVVQgICBUaW1lb3V0IHdhaXRpbmcgZm9yIHJlcGx5IG1lc3NhZ2UKKyAgICAgIEVOT01FTSAgICAgIEtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorCisgICBBIHJldHVybiB2YWx1ZSBvZiAwIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgdmFsdWUgd2FzIGFjdHVhbGx5CisgICBjaGFuZ2VkIHByb3Blcmx5IG9uIHRoZSBJT1AuICBUaGUgdXNlciBzaG91bGQgY2hlY2sgdGhlIHJlc3VsdAorICAgbGlzdCB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHN0YXR1cyBvZiB0aGUgdHJhbnNhY3Rpb24uCisKK1ZJSS4gR2V0dGluZyBQYXJhbWV0ZXJzCisKKyAgIFNZTk9QU0lTCisKKyAgIGlvY3RsKGZkLCBJMk9QQVJNR0VULCBzdHJ1Y3QgaTJvX3Bhcm1fc2V0Z2V0ICpvcHMpOworCisgICAgICBzdHJ1Y3QgaTJvX3Bhcm1fc2V0Z2V0CisgICAgICB7CisgICAgICAgICB1MzIgICBpb3A7ICAgICAgLyogSU9QIHVuaXQgbnVtYmVyICovCisgICAgICAgICB1MzIgICB0aWQ7ICAgICAgLyogVGFyZ2V0IGRldmljZSBUSUQgKi8KKyAgICAgICAgIHZvaWQgICpvcGJ1ZjsgICAvKiBPcGVyYXRpb24gTGlzdCBidWZmZXIgKi8KKyAgICAgICAgIHUzMiAgIG9wbGVuOyAgICAvKiBPcGVyYXRpb24gTGlzdCBidWZmZXIgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgICAgICB2b2lkICAqcmVzYnVmOyAgLyogUmVzdWx0IExpc3QgYnVmZmVyICovCisgICAgICAgICB1MzIgICAqcmVzbGVuOyAgLyogUmVzdWx0IExpc3QgYnVmZmVyIGxlbmd0aCBpbiBieXRlcyAqLworICAgICAgfTsKKworICAgREVTQ1JJUFRJT04KKworICAgVGhpcyBmdW5jdGlvbiBwb3N0cyBhIFV0aWxQYXJhbXNHZXQgbWVzc2FnZSB0byB0aGUgZGV2aWNlIGlkZW50aWZpZWQKKyAgIGJ5IG9wcy0+aW9wIGFuZCBvcHMtPnRpZC4gIFRoZSBvcGVyYXRpb24gbGlzdCBmb3IgdGhlIG1lc3NhZ2UgaXMKKyAgIHNlbnQgdGhyb3VnaCB0aGUgb3BzLT5vcGJ1ZiBidWZmZXIsIGFuZCB0aGUgcmVzdWx0IGxpc3QgaXMgd3JpdHRlbgorICAgaW50byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgb3BzLT5yZXNidWYuICBUaGUgYWN0dWFsIHNpemUgb2YgZGF0YQorICAgd3JpdHRlbiBpcyBwbGFjZWQgaW50byAqKG9wcy0+cmVzbGVuKS4KKworICAgUkVUVVJOUworCisgICAgICBFRkFVTFQgICAgICBJbnZhbGlkIHVzZXIgc3BhY2UgcG9pbnRlciB3YXMgcGFzc2VkCisgICAgICBFTlhJTyAgICAgICBJbnZhbGlkIElPUCBudW1iZXIKKyAgICAgIEVOT0JVRlMgICAgIEJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoLiAgSWYgdGhpcyBvY2N1cnMsIHRoZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgYnVmZmVyIGxlbmd0aCBpcyB3cml0dGVuIGludG8gKihvcHMtPnJlc2xlbikKKyAgICAgIEVUSU1FRE9VVCAgIFRpbWVvdXQgd2FpdGluZyBmb3IgcmVwbHkgbWVzc2FnZQorICAgICAgRU5PTUVNICAgICAgS2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisKKyAgIEEgcmV0dXJuIHZhbHVlIG9mIDAgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSB2YWx1ZSB3YXMgYWN0dWFsbHkKKyAgIHByb3Blcmx5IHJldHJlaXZlZC4gIFRoZSB1c2VyIHNob3VsZCBjaGVjayB0aGUgcmVzdWx0IGxpc3QKKyAgIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgc3RhdHVzIG9mIHRoZSB0cmFuc2FjdGlvbi4KKworVklJSS4gRG93bmxvYWRpbmcgU29mdHdhcmUKKworICAgU1lOT1BTSVMKKworICAgaW9jdGwoZmQsIEkyT1NXREwsIHN0cnVjdCBpMm9fc3dfeGZlciAqc3cpOworCisgICAgICBzdHJ1Y3QgaTJvX3N3X3hmZXIKKyAgICAgIHsKKyAgICAgICAgIHUzMiAgIGlvcDsgICAgICAgLyogSU9QIHVuaXQgbnVtYmVyICovCisgICAgICAgICB1OCAgICBmbGFnczsgICAgIC8qIERvd25sb2FkRmxhZ3MgZmllbGQgKi8KKyAgICAgICAgIHU4ICAgIHN3X3R5cGU7ICAgLyogU29mdHdhcmUgdHlwZSAqLworICAgICAgICAgdTMyICAgc3dfaWQ7ICAgICAvKiBTb2Z0d2FyZSBJRCAqLworICAgICAgICAgdm9pZCAgKmJ1ZjsgICAgICAvKiBQb2ludGVyIHRvIHNvZnR3YXJlIGJ1ZmZlciAqLworICAgICAgICAgdTMyICAgKnN3bGVuOyAgICAvKiBMZW5ndGggb2Ygc29mdHdhcmUgYnVmZmVyICovCisgICAgICAgICB1MzIgICAqbWF4ZnJhZzsgIC8qIE51bWJlciBvZiBmcmFnbWVudHMgKi8KKyAgICAgICAgIHUzMiAgICpjdXJmcmFnOyAgLyogQ3VycmVudCBmcmFnbWVudCBudW1iZXIgKi8KKyAgICAgIH07CisKKyAgIERFU0NSSVBUSU9OCisKKyAgIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIGEgc29mdHdhcmUgZnJhZ21lbnQgcG9pbnRlZCBieSBzdy0+YnVmCisgICB0byB0aGUgaW9wIGlkZW50aWZpZWQgYnkgc3ctPmlvcC4gVGhlIERvd25sb2FkRmxhZ3MsIFN3SUQsIFN3VHlwZQorICAgYW5kIFN3U2l6ZSBmaWVsZHMgb2YgdGhlIEV4ZWNTd0Rvd25sb2FkIG1lc3NhZ2UgYXJlIGZpbGxlZCBpbiB3aXRoCisgICB0aGUgdmFsdWVzIG9mIHN3LT5mbGFncywgc3ctPnN3X2lkLCBzdy0+c3dfdHlwZSBhbmQgKihzdy0+c3dsZW4pLgorCisgICBUaGUgZnJhZ21lbnRzIF9tdXN0XyBiZSBzZW50IGluIG9yZGVyIGFuZCBiZSA4SyBpbiBzaXplLiBUaGUgbGFzdAorICAgZnJhZ21lbnQgX21heV8gYmUgc2hvcnRlciwgaG93ZXZlci4gVGhlIGtlcm5lbCB3aWxsIGNvbXB1dGUgaXRzCisgICBzaXplIGJhc2VkIG9uIGluZm9ybWF0aW9uIGluIHRoZSBzdy0+c3dsZW4gZmllbGQuCisKKyAgIFBsZWFzZSBub3RlIHRoYXQgU1cgdHJhbnNmZXJzIGNhbiB0YWtlIGEgbG9uZyB0aW1lLgorCisgICBSRVRVUk5TCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG5vIGVycm9ycyBvY2N1ci4gSWYgYW4gZXJyb3Igb2NjdXJzLCAtMQorICAgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCBhcHByb3ByaWF0bHk6CisKKyAgICAgIEVGQVVMVCAgICAgIEludmFsaWQgdXNlciBzcGFjZSBwb2ludGVyIHdhcyBwYXNzZWQKKyAgICAgIEVOWElPICAgICAgIEludmFsaWQgSU9QIG51bWJlcgorICAgICAgRVRJTUVET1VUICAgVGltZW91dCB3YWl0aW5nIGZvciByZXBseSBtZXNzYWdlCisgICAgICBFTk9NRU0gICAgICBLZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKworSVguIFVwbG9hZGluZyBTb2Z0d2FyZQorCisgICBTWU5PUFNJUworCisgICBpb2N0bChmZCwgSTJPU1dVTCwgc3RydWN0IGkyb19zd194ZmVyICpzdyk7CisKKyAgICAgIHN0cnVjdCBpMm9fc3dfeGZlcgorICAgICAgeworICAgICAgICAgdTMyICAgaW9wOyAgICAgIC8qIElPUCB1bml0IG51bWJlciAqLworICAgICAgICAgdTggICAgZmxhZ3M7IAkgLyogVXBsb2FkRmxhZ3MgKi8KKyAgICAgICAgIHU4ICAgIHN3X3R5cGU7ICAvKiBTb2Z0d2FyZSB0eXBlICovCisgICAgICAgICB1MzIgICBzd19pZDsgICAgLyogU29mdHdhcmUgSUQgKi8KKyAgICAgICAgIHZvaWQgICpidWY7ICAgICAvKiBQb2ludGVyIHRvIHNvZnR3YXJlIGJ1ZmZlciAqLworICAgICAgICAgdTMyICAgKnN3bGVuOyAgIC8qIExlbmd0aCBvZiBzb2Z0d2FyZSBidWZmZXIgKi8KKyAgICAgICAgIHUzMiAgICptYXhmcmFnOyAvKiBOdW1iZXIgb2YgZnJhZ21lbnRzICovCisgICAgICAgICB1MzIgICAqY3VyZnJhZzsgLyogQ3VycmVudCBmcmFnbWVudCBudW1iZXIgKi8KKyAgICAgIH07CisKKyAgIERFU0NSSVBUSU9OCisKKyAgIFRoaXMgZnVuY3Rpb24gdXBsb2FkcyBhIHNvZnR3YXJlIGZyYWdtZW50IGZyb20gdGhlIElPUCBpZGVudGlmaWVkCisgICBieSBzdy0+aW9wLCBzdy0+c3dfdHlwZSwgc3ctPnN3X2lkIGFuZCBvcHRpb25hbGx5IHN3LT5zd2xlbiBmaWVsZHMuCisgICBUaGUgVXBsb2FkRmxhZ3MsIFN3SUQsIFN3VHlwZSBhbmQgU3dTaXplIGZpZWxkcyBvZiB0aGUgRXhlY1N3VXBsb2FkCisgICBtZXNzYWdlIGFyZSBmaWxsZWQgaW4gd2l0aCB0aGUgdmFsdWVzIG9mIHN3LT5mbGFncywgc3ctPnN3X2lkLAorICAgc3ctPnN3X3R5cGUgYW5kICooc3ctPnN3bGVuKS4KKworICAgVGhlIGZyYWdtZW50cyBfbXVzdF8gYmUgcmVxdWVzdGVkIGluIG9yZGVyIGFuZCBiZSA4SyBpbiBzaXplLiBUaGUKKyAgIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgbWVtb3J5IHBvaW50ZWQgYnkgc3ctPmJ1Zi4gVGhlCisgICBsYXN0IGZyYWdtZW50IF9tYXlfIGJlIHNob3J0ZXIuCisKKyAgIFBsZWFzZSBub3RlIHRoYXQgU1cgdHJhbnNmZXJzIGNhbiB0YWtlIGEgbG9uZyB0aW1lLgorCisgICBSRVRVUk5TCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIG5vIGVycm9ycyBvY2N1ci4gIElmIGFuIGVycm9yIG9jY3VycywgLTEKKyAgIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgYXBwcm9wcmlhdGx5OgorCisgICAgICBFRkFVTFQgICAgICBJbnZhbGlkIHVzZXIgc3BhY2UgcG9pbnRlciB3YXMgcGFzc2VkCisgICAgICBFTlhJTyAgICAgICBJbnZhbGlkIElPUCBudW1iZXIKKyAgICAgIEVUSU1FRE9VVCAgIFRpbWVvdXQgd2FpdGluZyBmb3IgcmVwbHkgbWVzc2FnZQorICAgICAgRU5PTUVNICAgICAgS2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisKK1guIFJlbW92aW5nIFNvZnR3YXJlCisKKyAgIFNZTk9QU0lTCisKKyAgIGlvY3RsKGZkLCBJMk9TV0RFTCwgc3RydWN0IGkyb19zd194ZmVyICpzdyk7CisKKyAgICAgIHN0cnVjdCBpMm9fc3dfeGZlcgorICAgICAgeworICAgICAgICAgdTMyICAgaW9wOyAgICAgIC8qIElPUCB1bml0IG51bWJlciAqLworICAgICAgICAgdTggICAgZmxhZ3M7IAkgLyogUmVtb3ZlRmxhZ3MgKi8KKyAgICAgICAgIHU4ICAgIHN3X3R5cGU7ICAvKiBTb2Z0d2FyZSB0eXBlICovCisgICAgICAgICB1MzIgICBzd19pZDsgICAgLyogU29mdHdhcmUgSUQgKi8KKyAgICAgICAgIHZvaWQgICpidWY7ICAgICAvKiBVbnVzZWQgKi8KKyAgICAgICAgIHUzMiAgICpzd2xlbjsgICAvKiBMZW5ndGggb2YgdGhlIHNvZnR3YXJlIGRhdGEgKi8KKyAgICAgICAgIHUzMiAgICptYXhmcmFnOyAvKiBVbnVzZWQgKi8KKyAgICAgICAgIHUzMiAgICpjdXJmcmFnOyAvKiBVbnVzZWQgKi8KKyAgICAgIH07CisKKyAgIERFU0NSSVBUSU9OCisKKyAgIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBzb2Z0d2FyZSBmcm9tIHRoZSBJT1AgaWRlbnRpZmllZCBieSBzdy0+aW9wLgorICAgVGhlIFJlbW92ZUZsYWdzLCBTd0lELCBTd1R5cGUgYW5kIFN3U2l6ZSBmaWVsZHMgb2YgdGhlIEV4ZWNTd1JlbW92ZSBtZXNzYWdlCisgICBhcmUgZmlsbGVkIGluIHdpdGggdGhlIHZhbHVlcyBvZiBzdy0+ZmxhZ3MsIHN3LT5zd19pZCwgc3ctPnN3X3R5cGUgYW5kCisgICAqKHN3LT5zd2xlbikuIEdpdmUgemVybyBpbiAqKHN3LT5sZW4pIGlmIHRoZSB2YWx1ZSBpcyB1bmtub3duLiBJT1AgdXNlcworICAgKihzdy0+c3dsZW4pIHZhbHVlIHRvIHZlcmlmeSBjb3JyZWN0IGlkZW50aWNhdGlvbiBvZiB0aGUgbW9kdWxlIHRvIHJlbW92ZS4KKyAgIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgbW9kdWxlIGlzIHdyaXR0ZW4gaW50byAqKHN3LT5zd2xlbikuCisKKyAgIFJFVFVSTlMKKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgbm8gZXJyb3JzIG9jY3VyLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCAtMQorICAgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCBhcHByb3ByaWF0bHk6CisKKyAgICAgIEVGQVVMVCAgICAgIEludmFsaWQgdXNlciBzcGFjZSBwb2ludGVyIHdhcyBwYXNzZWQKKyAgICAgIEVOWElPICAgICAgIEludmFsaWQgSU9QIG51bWJlcgorICAgICAgRVRJTUVET1VUICAgVGltZW91dCB3YWl0aW5nIGZvciByZXBseSBtZXNzYWdlCisgICAgICBFTk9NRU0gICAgICBLZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKworWC4gVmFsaWRhdGluZyBDb25maWd1cmF0aW9uCisKKyAgIFNZTk9QU0lTCisKKyAgIGlvY3RsKGZkLCBJMk9WQUxJREFURSwgaW50ICppb3ApOworCXUzMiBpb3A7CisKKyAgIERFU0NSSVBUSU9OCisKKyAgIFRoaXMgZnVuY3Rpb24gcG9zdHMgYW4gRXhlY0NvbmZpZ1ZhbGlkYXRlIG1lc3NhZ2UgdG8gdGhlIGNvbnRyb2xsZXIKKyAgIGlkZW50aWZpZWQgYnkgaW9wLiBUaGlzIG1lc3NhZ2UgaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQKKyAgIGNvbmZpZ3VyYXRpb24gaXMgYWNjZXB0ZWQuIFRoZSBpb3AgY2hhbmdlcyB0aGUgc3RhdHVzIG9mIHN1c3BlY3QgZHJpdmVycworICAgdG8gdmFsaWQgYW5kIG1heSBkZWxldGUgb2xkIGRyaXZlcnMgZnJvbSBpdHMgc3RvcmUuCisKKyAgIFJFVFVSTlMKKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgbm8gZXJybyBvY2N1ci4gIElmIGFuIGVycm9yIG9jY3VycywgLTEgaXMKKyAgIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgYXBwcm9wcmlhdGx5OgorCisgICAgICBFVElNRURPVVQgICBUaW1lb3V0IHdhaXRpbmcgZm9yIHJlcGx5IG1lc3NhZ2UKKyAgICAgIEVOWElPICAgICAgIEludmFsaWQgSU9QIG51bWJlcgorCitYSS4gQ29uZmlndXJhdGlvbiBEaWFsb2cKKworICAgU1lOT1BTSVMKKworICAgaW9jdGwoZmQsIEkyT0hUTUwsIHN0cnVjdCBpMm9faHRtbCAqaHRxdWVyeSk7CisgICAgICBzdHJ1Y3QgaTJvX2h0bWwKKyAgICAgIHsKKyAgICAgICAgIHUzMiAgIGlvcDsgICAgICAvKiBJT1AgdW5pdCBudW1iZXIgKi8KKyAgICAgICAgIHUzMiAgIHRpZDsgICAgICAvKiBUYXJnZXQgZGV2aWNlIElEICovCisgICAgICAgICB1MzIgICBwYWdlOyAgICAgLyogSFRNTCBwYWdlICovCisgICAgICAgICB2b2lkICAqcmVzYnVmOyAgLyogQnVmZmVyIGZvciByZXBseSBIVE1MIHBhZ2UgKi8KKyAgICAgICAgIHUzMiAgICpyZXNsZW47ICAvKiBMZW5ndGggaW4gYnl0ZXMgb2YgcmVwbHkgYnVmZmVyICovCisgICAgICAgICB2b2lkICAqcWJ1ZjsgICAgLyogUG9pbnRlciB0byBIVFRQIHF1ZXJ5IHN0cmluZyAqLworICAgICAgICAgdTMyICAgcWxlbjsgICAgIC8qIExlbmd0aCBpbiBieXRlcyBvZiBxdWVyeSBzdHJpbmcgYnVmZmVyICovCisgICAgICB9OworCisgICBERVNDUklQVElPTgorCisgICBUaGlzIGZ1bmN0aW9uIHBvc3RzIGFuIFV0aWxDb25maWdEaWFsb2cgbWVzc2FnZSB0byB0aGUgZGV2aWNlIGlkZW50aWZpZWQKKyAgIGJ5IGh0cXVlcnktPmlvcCBhbmQgaHRxdWVyeS0+dGlkLiAgVGhlIHJlcXVlc3RlZCBIVE1MIHBhZ2UgbnVtYmVyIGlzCisgICBwcm92aWRlZCBieSB0aGUgaHRxdWVyeS0+cGFnZSBmaWVsZCwgYW5kIHRoZSByZXN1bHRhbnQgZGF0YSBpcyBzdG9yZWQKKyAgIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBodHF1ZXJ5LT5yZXNidWYuICBJZiB0aGVyZSBpcyBhbiBIVFRQIHF1ZXJ5CisgICBzdHJpbmcgdGhhdCBpcyB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2UsIGl0IHNob3VsZCBiZSBzZW50IGluIHRoZSBidWZmZXIKKyAgIHBvaW50ZWQgdG8gYnkgaHRxdWVyeS0+cWJ1Zi4gIElmIHRoZXJlIGlzIG5vIHF1ZXJ5IHN0cmluZywgdGhpcyBmaWVsZAorICAgc2hvdWxkIGJlIHNldCB0byBOVUxMLiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlIHJlcGx5IHJlY2VpdmVkIGlzIHdyaXR0ZW4KKyAgIGludG8gKihodHF1ZXJ5LT5yZXNsZW4pLgorCisgICBSRVRVUk5TCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIG5vIGVycm9yIG9jY3VyLiBJZiBhbiBlcnJvciBvY2N1cnMsIC0xCisgICBpcyByZXR1cm5lZCBhbmQgZXJybm8gaXMgc2V0IGFwcHJvcHJpYXRseToKKworICAgICAgRUZBVUxUICAgICAgSW52YWxpZCB1c2VyIHNwYWNlIHBvaW50ZXIgd2FzIHBhc3NlZAorICAgICAgRU5YSU8gICAgICAgSW52YWxpZCBJT1AgbnVtYmVyCisgICAgICBFTk9CVUZTICAgICBCdWZmZXIgbm90IGxhcmdlIGVub3VnaC4gIElmIHRoaXMgb2NjdXJzLCB0aGUgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGggaXMgd3JpdHRlbiBpbnRvICoob3BzLT5yZXNsZW4pCisgICAgICBFVElNRURPVVQgICBUaW1lb3V0IHdhaXRpbmcgZm9yIHJlcGx5IG1lc3NhZ2UKKyAgICAgIEVOT01FTSAgICAgIEtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorCitYSUkuIEV2ZW50cworCisgICAgSW4gdGhlIHByb2Nlc3Mgb2YgZGV0ZXJtaW5pbmcgdGhpcy4gIEN1cnJlbnQgaWRlYSBpcyB0byBoYXZlIHVzZQorICAgIHRoZSBzZWxlY3QoKSBpbnRlcmZhY2UgdG8gYWxsb3cgdXNlciBhcHBzIHRvIHBlcmlvZGljYWxseSBwb2xsCisgICAgdGhlIC9kZXYvaTJvL2N0bCBkZXZpY2UgZm9yIGV2ZW50cy4gIFdoZW4gc2VsZWN0KCkgbm90aWZpZXMgdGhlIHVzZXIKKyAgICB0aGF0IGFuIGV2ZW50IGlzIGF2YWlsYWJsZSwgdGhlIHVzZXIgd291bGQgY2FsbCByZWFkKCkgdG8gcmV0cmlldmUKKyAgICBhIGxpc3Qgb2YgYWxsIHRoZSBldmVudHMgdGhhdCBhcmUgcGVuZGluZyBmb3IgdGhlIHNwZWNpZmljIGRldmljZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JldmlzaW9uIEhpc3RvcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JldiAwLjEgLSAwNC8wMS85OQorLSBJbml0aWFsIHJldmlzaW9uCisKK1JldiAwLjIgLSAwNC8wNi85OQorLSBDaGFuZ2VkIHJldHVybiB2YWx1ZXMgdG8gbWF0Y2ggVU5JWCBpb2N0bCgpIHN0YW5kYXJkLiAgT25seSByZXR1cm4gdmFsdWVzCisgIGFyZSAwIGFuZCAtMS4gIEFsbCBlcnJvcnMgYXJlIHJlcG9ydGVkIHRocm91Z2ggZXJybm8uCistIEFkZGVkIHN1bW1hcnkgb2YgcHJvcG9zZWQgcG9zc2libGUgZXZlbnQgaW50ZXJmYWNlcworCitSZXYgMC4zIC0gMDQvMjAvOTkKKy0gQ2hhbmdlZCBhbGwgaW9jdGxzKCkgdG8gdXNlIHBvaW50ZXJzIHRvIHVzZXIgZGF0YSBpbnN0ZWFkIG9mIGFjdHVhbCBkYXRhCistIFVwZGF0ZWQgZXJyb3IgdmFsdWVzIHRvIG1hdGNoIHRoZSBjb2RlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kzODYvSU8tQVBJQy50eHQgYi9Eb2N1bWVudGF0aW9uL2kzODYvSU8tQVBJQy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1ZTY5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dApAQCAtMCwwICsxLDExNyBAQAorTW9zdCAoYWxsKSBJbnRlbC1NUCBjb21wbGlhbnQgU01QIGJvYXJkcyBoYXZlIHRoZSBzby1jYWxsZWQgJ0lPLUFQSUMnLAord2hpY2ggaXMgYW4gZW5oYW5jZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIsIGl0IGVuYWJsZXMgdXMgdG8gcm91dGUKK2hhcmR3YXJlIGludGVycnVwdHMgdG8gbXVsdGlwbGUgQ1BVcywgb3IgdG8gQ1BVIGdyb3Vwcy4KKworTGludXggc3VwcG9ydHMgYWxsIHZhcmlhbnRzIG9mIGNvbXBsaWFudCBTTVAgYm9hcmRzLCBpbmNsdWRpbmcgb25lcyB3aXRoCittdWx0aXBsZSBJTy1BUElDcy4gKG11bHRpcGxlIElPLUFQSUNzIGFyZSB1c2VkIGluIGhpZ2gtZW5kIHNlcnZlcnMgdG8KK2Rpc3RyaWJ1dGUgSVJRIGxvYWQgZnVydGhlcikuCisKK1RoZXJlIGFyZSAoYSBmZXcpIGtub3duIGJyZWFrYWdlcyBpbiBjZXJ0YWluIG9sZGVyIGJvYXJkcywgd2hpY2ggYnVncyBhcmUKK3VzdWFsbHkgd29ya2VkIGFyb3VuZCBieSB0aGUga2VybmVsLiBJZiB5b3VyIE1QLWNvbXBsaWFudCBTTVAgYm9hcmQgZG9lcworbm90IGJvb3QgTGludXgsIHRoZW4gY29uc3VsdCB0aGUgbGludXgtc21wIG1haWxpbmcgbGlzdCBhcmNoaXZlcyBmaXJzdC4KKworSWYgeW91ciBib3ggYm9vdHMgZmluZSB3aXRoIGVuYWJsZWQgSU8tQVBJQyBJUlFzLCB0aGVuIHlvdXIKKy9wcm9jL2ludGVycnVwdHMgd2lsbCBsb29rIGxpa2UgdGhpcyBvbmU6CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+CisgIGhlbGw6fj4gY2F0IC9wcm9jL2ludGVycnVwdHMKKyAgICAgICAgICAgICBDUFUwCisgICAgMDogICAgMTM2MDI5MyAgICBJTy1BUElDLWVkZ2UgIHRpbWVyCisgICAgMTogICAgICAgICAgNCAgICBJTy1BUElDLWVkZ2UgIGtleWJvYXJkCisgICAgMjogICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIGNhc2NhZGUKKyAgIDEzOiAgICAgICAgICAxICAgICAgICAgIFhULVBJQyAgZnB1CisgICAxNDogICAgICAgMTQ0OCAgICBJTy1BUElDLWVkZ2UgIGlkZTAKKyAgIDE2OiAgICAgIDI4MjMyICAgSU8tQVBJQy1sZXZlbCAgSW50ZWwgRXRoZXJFeHByZXNzIFBybyAxMC8xMDAgRXRoZXJuZXQKKyAgIDE3OiAgICAgIDUxMzA0ICAgSU8tQVBJQy1sZXZlbCAgZXRoMAorICBOTUk6ICAgICAgICAgIDAKKyAgRVJSOiAgICAgICAgICAwCisgIGhlbGw6fj4KKyAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc29tZSBpbnRlcnJ1cHRzIGFyZSBzdGlsbCBsaXN0ZWQgYXMgJ1hUIFBJQycsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW0sCitub25lIG9mIHRob3NlIElSUSBzb3VyY2VzIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLgorCisKK2luIHRoZSB1bmxpa2VseSBjYXNlIHRoYXQgeW91ciBib2FyZCBkb2VzIG5vdCBjcmVhdGUgYSB3b3JraW5nIG1wLXRhYmxlLAoreW91IGNhbiB1c2UgdGhlIHBpcnE9IGJvb3QgcGFyYW1ldGVyIHRvICdoYW5kLWNvbnN0cnVjdCcgSVJRIGVudHJpZXMuIFRoaXMKK2lzIG5vbnRyaXZpYWwgdGhvdWdoIGFuZCBjYW5ub3QgYmUgYXV0b21hdGVkLiBPbmUgc2FtcGxlIC9ldGMvbGlsby5jb25mCitlbnRyeToKKworCWFwcGVuZD0icGlycT0xNSwxMSwxMCIKKwordGhlIGFjdHVhbCBudW1iZXJzIGRlcGVuZCBvbiB5b3VyIHN5c3RlbSwgb24geW91ciBQQ0kgY2FyZHMgYW5kIG9uIHRoZWlyCitQQ0kgc2xvdCBwb3NpdGlvbi4gVXN1YWxseSBQQ0kgc2xvdHMgYXJlICdkYWlzeSBjaGFpbmVkJyBiZWZvcmUgdGhleSBhcmUKK2Nvbm5lY3RlZCB0byB0aGUgUENJIGNoaXBzZXQgSVJRIHJvdXRpbmcgZmFjaWxpdHkgKHRoZSBpbmNvbWluZyBQSVJRMS00CitsaW5lcyk6CisKKyAgICAgICAgICAgICAgICwtLiAgICAgICAgLC0uICAgICAgICAsLS4gICAgICAgICwtLiAgICAgICAgLC0uCisgICAgIFBJUlE0IC0tLS18IHwtLiAgICAsLXwgfC0uICAgICwtfCB8LS4gICAgLC18IHwtLS0tLS0tLXwgfAorICAgICAgICAgICAgICAgfFN8ICBcICAvICB8U3wgIFwgIC8gIHxTfCAgXCAgLyAgfFN8ICAgICAgICB8U3wKKyAgICAgUElSUTMgLS0tLXxsfC0uIGAvLS0tfGx8LS4gYC8tLS18bHwtLiBgLy0tLXxsfC0tLS0tLS0tfGx8CisgICAgICAgICAgICAgICB8b3wgIFwvICAgIHxvfCAgXC8gICAgfG98ICBcLyAgICB8b3wgICAgICAgIHxvfAorICAgICBQSVJRMiAtLS0tfHR8LS4vYC0tLS18dHwtLi9gLS0tLXx0fC0uL2AtLS0tfHR8LS0tLS0tLS18dHwKKyAgICAgICAgICAgICAgIHwxfCAvXCAgICAgfDJ8IC9cICAgICB8M3wgL1wgICAgIHw0fCAgICAgICAgfDV8CisgICAgIFBJUlExIC0tLS18IHwtICBgLS0tLXwgfC0gIGAtLS0tfCB8LSAgYC0tLS18IHwtLS0tLS0tLXwgfAorICAgICAgICAgICAgICAgYC0nICAgICAgICBgLScgICAgICAgIGAtJyAgICAgICAgYC0nICAgICAgICBgLScKKworZXZlcnkgUENJIGNhcmQgZW1pdHMgYSBQQ0kgSVJRLCB3aGljaCBjYW4gYmUgSU5UQSxJTlRCLElOVEMsSU5URDoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwtLgorICAgICAgICAgICAgICAgICAgICAgICAgIElOVEQtLXwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxTfAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVEMtLXxsfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVEItLXx0fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx4fAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVEEtLXwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtJworCitUaGVzZSBJTlRBLUQgUENJIElSUXMgYXJlIGFsd2F5cyAnbG9jYWwgdG8gdGhlIGNhcmQnLCB0aGVpciByZWFsIG1lYW5pbmcKK2RlcGVuZHMgb24gd2hpY2ggc2xvdCB0aGV5IGFyZSBpbi4gSWYgeW91IGxvb2sgYXQgdGhlIGRhaXN5IGNoYWluaW5nIGRpYWdyYW0sCithIGNhcmQgaW4gc2xvdDQsIGlzc3VpbmcgSU5UQSBJUlEsIGl0IHdpbGwgZW5kIHVwIGFzIGEgc2lnbmFsIG9uIFBJUlEyIG9mCit0aGUgUENJIGNoaXBzZXQuIE1vc3QgY2FyZHMgaXNzdWUgSU5UQSwgdGhpcyBjcmVhdGVzIG9wdGltYWwgZGlzdHJpYnV0aW9uCitiZXR3ZWVuIHRoZSBQSVJRIGxpbmVzLiAoZGlzdHJpYnV0aW5nIElSUSBzb3VyY2VzIHByb3Blcmx5IGlzIG5vdCBhCituZWNlc3NpdHksIFBDSSBJUlFzIGNhbiBiZSBzaGFyZWQgYXQgd2lsbCwgYnV0IGl0J3MgYSBnb29kIGZvciBwZXJmb3JtYW5jZQordG8gaGF2ZSBub24gc2hhcmVkIGludGVycnVwdHMpLiBTbG90NSBzaG91bGQgYmUgdXNlZCBmb3IgdmlkZW9jYXJkcywgdGhleQorZG8gbm90IHVzZSBpbnRlcnJ1cHRzIG5vcm1hbGx5LCB0aHVzIHRoZXkgYXJlIG5vdCBkYWlzeSBjaGFpbmVkIGVpdGhlci4KKworc28gaWYgeW91IGhhdmUgeW91ciBTQ1NJIGNhcmQgKElSUTExKSBpbiBTbG90MSwgVHVsaXAgY2FyZCAoSVJROSkgaW4KK1Nsb3QyLCB0aGVuIHlvdSdsbCBoYXZlIHRvIHNwZWNpZnkgdGhpcyBwaXJxPSBsaW5lOgorCisJYXBwZW5kPSJwaXJxPTExLDkiCisKK3RoZSBmb2xsb3dpbmcgc2NyaXB0IHRyaWVzIHRvIGZpZ3VyZSBvdXQgc3VjaCBhIGRlZmF1bHQgcGlycT0gbGluZSBmcm9tCit5b3VyIFBDSSBjb25maWd1cmF0aW9uOgorCisJZWNobyAtbiBwaXJxPTsgZWNobyBgc2NhbnBjaSB8IGdyZXAgVF9MIHwgY3V0IC1jNTYtYCB8IHNlZCAncy8gLywvZycKKworbm90ZSB0aGF0IHRoaXMgc2NyaXB0IHdvbnQgd29yayBpZiB5b3UgaGF2ZSBza2lwcGVkIGEgZmV3IHNsb3RzIG9yIGlmIHlvdXIKK2JvYXJkIGRvZXMgbm90IGRvIGRlZmF1bHQgZGFpc3ktY2hhaW5pbmcuIChvciB0aGUgSU8tQVBJQyBoYXMgdGhlIFBJUlEgcGlucworY29ubmVjdGVkIGluIHNvbWUgc3RyYW5nZSB3YXkpLiBFLmcuIGlmIGluIHRoZSBhYm92ZSBjYXNlIHlvdSBoYXZlIHlvdXIgU0NTSQorY2FyZCAoSVJRMTEpIGluIFNsb3QzLCBhbmQgaGF2ZSBTbG90MSBlbXB0eToKKworCWFwcGVuZD0icGlycT0wLDksMTEiCisKK1t2YWx1ZSAnMCcgaXMgYSBnZW5lcmljICdwbGFjZWhvbGRlcicsIHJlc2VydmVkIGZvciBlbXB0eSAob3Igbm9uLUlSUSBlbWl0dGluZykKK3Nsb3RzLl0KKworZ2VuZXJhbGx5LCBpdCdzIGFsd2F5cyBwb3NzaWJsZSB0byBmaW5kIG91dCB0aGUgY29ycmVjdCBwaXJxPSBzZXR0aW5ncywganVzdAorcGVybXV0ZSBhbGwgSVJRIG51bWJlcnMgcHJvcGVybHkgLi4uIGl0IHdpbGwgdGFrZSBzb21lIHRpbWUgdGhvdWdoLiBBbgorJ2luY29ycmVjdCcgcGlycSBsaW5lIHdpbGwgY2F1c2UgdGhlIGJvb3RpbmcgcHJvY2VzcyB0byBoYW5nLCBvciBhIGRldmljZQord29uJ3QgZnVuY3Rpb24gcHJvcGVybHkgKGlmIGl0J3MgaW5zZXJ0ZWQgYXMgZWcuIGEgbW9kdWxlKS4KKworSWYgeW91IGhhdmUgMiBQQ0kgYnVzZXMsIHRoZW4geW91IGNhbiB1c2UgdXAgdG8gOCBwaXJxIHZhbHVlcy4gQWx0aG91Z2ggc3VjaAorYm9hcmRzIHRlbmQgdG8gaGF2ZSBhIGdvb2QgY29uZmlndXJhdGlvbi4KKworQmUgcHJlcGFyZWQgdGhhdCBpdCBtaWdodCBoYXBwZW4gdGhhdCB5b3UgbmVlZCBzb21lIHN0cmFuZ2UgcGlycSBsaW5lOgorCisJYXBwZW5kPSJwaXJxPTAsMCwwLDAsMCwwLDksMTEiCisKK3VzZSBzbWFydCB0cnktYW5kLWVyciB0ZWNobmlxdWVzIHRvIGZpbmQgb3V0IHRoZSBjb3JyZWN0IHBpcnEgbGluZSAuLi4KKworZ29vZCBsdWNrIGFuZCBtYWlsIHRvIGxpbnV4LXNtcEB2Z2VyLmtlcm5lbC5vcmcgb3IKK2xpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcgaWYgeW91IGhhdmUgYW55IHByb2JsZW1zIHRoYXQgYXJlIG5vdCBjb3ZlcmVkCitieSB0aGlzIGRvY3VtZW50LgorCistLSBtaW5nbworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQgYi9Eb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0OGYwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dApAQCAtMCwwICsxLDQ0MSBAQAorCQkgICAgIFRIRSBMSU5VWC9JMzg2IEJPT1QgUFJPVE9DT0wKKwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJICAgIEguIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPgorCQkJTGFzdCB1cGRhdGUgMjAwMi0wMS0wMQorCitPbiB0aGUgaTM4NiBwbGF0Zm9ybSwgdGhlIExpbnV4IGtlcm5lbCB1c2VzIGEgcmF0aGVyIGNvbXBsaWNhdGVkIGJvb3QKK2NvbnZlbnRpb24uICBUaGlzIGhhcyBldm9sdmVkIHBhcnRpYWxseSBkdWUgdG8gaGlzdG9yaWNhbCBhc3BlY3RzLCBhcword2VsbCBhcyB0aGUgZGVzaXJlIGluIHRoZSBlYXJseSBkYXlzIHRvIGhhdmUgdGhlIGtlcm5lbCBpdHNlbGYgYmUgYQorYm9vdGFibGUgaW1hZ2UsIHRoZSBjb21wbGljYXRlZCBQQyBtZW1vcnkgbW9kZWwgYW5kIGR1ZSB0byBjaGFuZ2VkCitleHBlY3RhdGlvbnMgaW4gdGhlIFBDIGluZHVzdHJ5IGNhdXNlZCBieSB0aGUgZWZmZWN0aXZlIGRlbWlzZSBvZgorcmVhbC1tb2RlIERPUyBhcyBhIG1haW5zdHJlYW0gb3BlcmF0aW5nIHN5c3RlbS4KKworQ3VycmVudGx5LCBmb3VyIHZlcnNpb25zIG9mIHRoZSBMaW51eC9pMzg2IGJvb3QgcHJvdG9jb2wgZXhpc3QuCisKK09sZCBrZXJuZWxzOgl6SW1hZ2UvSW1hZ2Ugc3VwcG9ydCBvbmx5LiAgU29tZSB2ZXJ5IGVhcmx5IGtlcm5lbHMKKwkJbWF5IG5vdCBldmVuIHN1cHBvcnQgYSBjb21tYW5kIGxpbmUuCisKK1Byb3RvY29sIDIuMDA6CShLZXJuZWwgMS4zLjczKSBBZGRlZCBiekltYWdlIGFuZCBpbml0cmQgc3VwcG9ydCwgYXMKKwkJd2VsbCBhcyBhIGZvcm1hbGl6ZWQgd2F5IHRvIGNvbW11bmljYXRlIGJldHdlZW4gdGhlCisJCWJvb3QgbG9hZGVyIGFuZCB0aGUga2VybmVsLiAgc2V0dXAuUyBtYWRlIHJlbG9jYXRhYmxlLAorCQlhbHRob3VnaCB0aGUgdHJhZGl0aW9uYWwgc2V0dXAgYXJlYSBzdGlsbCBhc3N1bWVkCisJCXdyaXRhYmxlLgorCitQcm90b2NvbCAyLjAxOgkoS2VybmVsIDEuMy43NikgQWRkZWQgYSBoZWFwIG92ZXJydW4gd2FybmluZy4KKworUHJvdG9jb2wgMi4wMjoJKEtlcm5lbCAyLjQuMC10ZXN0My1wcmUzKSBOZXcgY29tbWFuZCBsaW5lIHByb3RvY29sLgorCQlMb3dlciB0aGUgY29udmVudGlvbmFsIG1lbW9yeSBjZWlsaW5nLglObyBvdmVyd3JpdGUKKwkJb2YgdGhlIHRyYWRpdGlvbmFsIHNldHVwIGFyZWEsIHRodXMgbWFraW5nIGJvb3RpbmcKKwkJc2FmZSBmb3Igc3lzdGVtcyB3aGljaCB1c2UgdGhlIEVCREEgZnJvbSBTTU0gb3IgMzItYml0CisJCUJJT1MgZW50cnkgcG9pbnRzLiAgekltYWdlIGRlcHJlY2F0ZWQgYnV0IHN0aWxsCisJCXN1cHBvcnRlZC4KKworUHJvdG9jb2wgMi4wMzoJKEtlcm5lbCAyLjQuMTgtcHJlMSkgRXhwbGljaXRseSBtYWtlcyB0aGUgaGlnaGVzdCBwb3NzaWJsZQorCQlpbml0cmQgYWRkcmVzcyBhdmFpbGFibGUgdG8gdGhlIGJvb3Rsb2FkZXIuCisKKworKioqKiBNRU1PUlkgTEFZT1VUCisKK1RoZSB0cmFkaXRpb25hbCBtZW1vcnkgbWFwIGZvciB0aGUga2VybmVsIGxvYWRlciwgdXNlZCBmb3IgSW1hZ2Ugb3IKK3pJbWFnZSBrZXJuZWxzLCB0eXBpY2FsbHkgbG9va3MgbGlrZToKKworCXwJCQkgfAorMEEwMDAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCAgUmVzZXJ2ZWQgZm9yIEJJT1MJIHwJRG8gbm90IHVzZS4gIFJlc2VydmVkIGZvciBCSU9TIEVCREEuCiswOUEwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8ICBTdGFjay9oZWFwL2NtZGxpbmUJIHwJRm9yIHVzZSBieSB0aGUga2VybmVsIHJlYWwtbW9kZSBjb2RlLgorMDk4MDAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCQorCXwgIEtlcm5lbCBzZXR1cAkJIHwJVGhlIGtlcm5lbCByZWFsLW1vZGUgY29kZS4KKzA5MDIwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgIEtlcm5lbCBib290IHNlY3RvcgkgfAlUaGUga2VybmVsIGxlZ2FjeSBib290IHNlY3Rvci4KKzA5MDAwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgIFByb3RlY3RlZC1tb2RlIGtlcm5lbCB8CVRoZSBidWxrIG9mIHRoZSBrZXJuZWwgaW1hZ2UuCiswMTAwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8ICBCb290IGxvYWRlcgkJIHwJPC0gQm9vdCBzZWN0b3IgZW50cnkgcG9pbnQgMDAwMDo3QzAwCiswMDEwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8ICBSZXNlcnZlZCBmb3IgTUJSL0JJT1MgfAorMDAwODAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCAgVHlwaWNhbGx5IHVzZWQgYnkgTUJSIHwKKzAwMDYwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAKKwl8ICBCSU9TIHVzZSBvbmx5CSB8CiswMDAwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitXaGVuIHVzaW5nIGJ6SW1hZ2UsIHRoZSBwcm90ZWN0ZWQtbW9kZSBrZXJuZWwgd2FzIHJlbG9jYXRlZCB0bworMHgxMDAwMDAgKCJoaWdoIG1lbW9yeSIpLCBhbmQgdGhlIGtlcm5lbCByZWFsLW1vZGUgYmxvY2sgKGJvb3Qgc2VjdG9yLAorc2V0dXAsIGFuZCBzdGFjay9oZWFwKSB3YXMgbWFkZSByZWxvY2F0YWJsZSB0byBhbnkgYWRkcmVzcyBiZXR3ZWVuCisweDEwMDAwIGFuZCBlbmQgb2YgbG93IG1lbW9yeS4JVW5mb3J0dW5hdGVseSwgaW4gcHJvdG9jb2xzIDIuMDAgYW5kCisyLjAxIHRoZSBjb21tYW5kIGxpbmUgaXMgc3RpbGwgcmVxdWlyZWQgdG8gbGl2ZSBpbiB0aGUgMHg5WFhYWCBtZW1vcnkKK3JhbmdlLCBhbmQgdGhhdCBtZW1vcnkgcmFuZ2UgaXMgc3RpbGwgb3ZlcndyaXR0ZW4gYnkgdGhlIGVhcmx5IGtlcm5lbC4KK1RoZSAyLjAyIHByb3RvY29sIHJlc29sdmVzIHRoYXQgcHJvYmxlbS4KKworSXQgaXMgZGVzaXJhYmxlIHRvIGtlZXAgdGhlICJtZW1vcnkgY2VpbGluZyIgLS0gdGhlIGhpZ2hlc3QgcG9pbnQgaW4KK2xvdyBtZW1vcnkgdG91Y2hlZCBieSB0aGUgYm9vdCBsb2FkZXIgLS0gYXMgbG93IGFzIHBvc3NpYmxlLCBzaW5jZQorc29tZSBuZXdlciBCSU9TZXMgaGF2ZSBiZWd1biB0byBhbGxvY2F0ZSBzb21lIHJhdGhlciBsYXJnZSBhbW91bnRzIG9mCittZW1vcnksIGNhbGxlZCB0aGUgRXh0ZW5kZWQgQklPUyBEYXRhIEFyZWEsIG5lYXIgdGhlIHRvcCBvZiBsb3cKK21lbW9yeS4JIFRoZSBib290IGxvYWRlciBzaG91bGQgdXNlIHRoZSAiSU5UIDEyaCIgQklPUyBjYWxsIHRvIHZlcmlmeQoraG93IG11Y2ggbG93IG1lbW9yeSBpcyBhdmFpbGFibGUuCisKK1VuZm9ydHVuYXRlbHksIGlmIElOVCAxMmggcmVwb3J0cyB0aGF0IHRoZSBhbW91bnQgb2YgbWVtb3J5IGlzIHRvbworbG93LCB0aGVyZSBpcyB1c3VhbGx5IG5vdGhpbmcgdGhlIGJvb3QgbG9hZGVyIGNhbiBkbyBidXQgdG8gcmVwb3J0IGFuCitlcnJvciB0byB0aGUgdXNlci4gIFRoZSBib290IGxvYWRlciBzaG91bGQgdGhlcmVmb3JlIGJlIGRlc2lnbmVkIHRvCit0YWtlIHVwIGFzIGxpdHRsZSBzcGFjZSBpbiBsb3cgbWVtb3J5IGFzIGl0IHJlYXNvbmFibHkgY2FuLiAgRm9yCit6SW1hZ2Ugb3Igb2xkIGJ6SW1hZ2Uga2VybmVscywgd2hpY2ggbmVlZCBkYXRhIHdyaXR0ZW4gaW50byB0aGUKKzB4OTAwMDAgc2VnbWVudCwgdGhlIGJvb3QgbG9hZGVyIHNob3VsZCBtYWtlIHN1cmUgbm90IHRvIHVzZSBtZW1vcnkKK2Fib3ZlIHRoZSAweDlBMDAwIHBvaW50OyB0b28gbWFueSBCSU9TZXMgd2lsbCBicmVhayBhYm92ZSB0aGF0IHBvaW50LgorCisKKyoqKiogVEhFIFJFQUwtTU9ERSBLRVJORUwgSEVBREVSCisKK0luIHRoZSBmb2xsb3dpbmcgdGV4dCwgYW5kIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgYm9vdCBzZXF1ZW5jZSwgImEKK3NlY3RvciIgcmVmZXJzIHRvIDUxMiBieXRlcy4gIEl0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBhY3R1YWwgc2VjdG9yCitzaXplIG9mIHRoZSB1bmRlcmx5aW5nIG1lZGl1bS4KKworVGhlIGZpcnN0IHN0ZXAgaW4gbG9hZGluZyBhIExpbnV4IGtlcm5lbCBzaG91bGQgYmUgdG8gbG9hZCB0aGUKK3JlYWwtbW9kZSBjb2RlIChib290IHNlY3RvciBhbmQgc2V0dXAgY29kZSkgYW5kIHRoZW4gZXhhbWluZSB0aGUKK2ZvbGxvd2luZyBoZWFkZXIgYXQgb2Zmc2V0IDB4MDFmMS4gIFRoZSByZWFsLW1vZGUgY29kZSBjYW4gdG90YWwgdXAgdG8KKzMySywgYWx0aG91Z2ggdGhlIGJvb3QgbG9hZGVyIG1heSBjaG9vc2UgdG8gbG9hZCBvbmx5IHRoZSBmaXJzdCB0d28KK3NlY3RvcnMgKDFLKSBhbmQgdGhlbiBleGFtaW5lIHRoZSBib290dXAgc2VjdG9yIHNpemUuCisKK1RoZSBoZWFkZXIgbG9va3MgbGlrZToKKworT2Zmc2V0CVByb3RvCU5hbWUJCU1lYW5pbmcKKy9TaXplCisKKzAxRjEvMQlBTEwJc2V0dXBfc2VjdHMJVGhlIHNpemUgb2YgdGhlIHNldHVwIGluIHNlY3RvcnMKKzAxRjIvMglBTEwJcm9vdF9mbGFncwlJZiBzZXQsIHRoZSByb290IGlzIG1vdW50ZWQgcmVhZG9ubHkKKzAxRjQvMglBTEwJc3lzc2l6ZQkJRE8gTk9UIFVTRSAtIGZvciBib290c2VjdC5TIHVzZSBvbmx5CiswMUY2LzIJQUxMCXN3YXBfZGV2CURPIE5PVCBVU0UgLSBvYnNvbGV0ZQorMDFGOC8yCUFMTAlyYW1fc2l6ZQlETyBOT1QgVVNFIC0gZm9yIGJvb3RzZWN0LlMgdXNlIG9ubHkKKzAxRkEvMglBTEwJdmlkX21vZGUJVmlkZW8gbW9kZSBjb250cm9sCiswMUZDLzIJQUxMCXJvb3RfZGV2CURlZmF1bHQgcm9vdCBkZXZpY2UgbnVtYmVyCiswMUZFLzIJQUxMCWJvb3RfZmxhZwkweEFBNTUgbWFnaWMgbnVtYmVyCiswMjAwLzIJMi4wMCsJanVtcAkJSnVtcCBpbnN0cnVjdGlvbgorMDIwMi80CTIuMDArCWhlYWRlcgkJTWFnaWMgc2lnbmF0dXJlICJIZHJTIgorMDIwNi8yCTIuMDArCXZlcnNpb24JCUJvb3QgcHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQKKzAyMDgvNAkyLjAwKwlyZWFsbW9kZV9zd3RjaAlCb290IGxvYWRlciBob29rIChzZWUgYmVsb3cpCiswMjBDLzIJMi4wMCsJc3RhcnRfc3lzCVRoZSBsb2FkLWxvdyBzZWdtZW50ICgweDEwMDApIChvYnNvbGV0ZSkKKzAyMEUvMgkyLjAwKwlrZXJuZWxfdmVyc2lvbglQb2ludGVyIHRvIGtlcm5lbCB2ZXJzaW9uIHN0cmluZworMDIxMC8xCTIuMDArCXR5cGVfb2ZfbG9hZGVyCUJvb3QgbG9hZGVyIGlkZW50aWZpZXIKKzAyMTEvMQkyLjAwKwlsb2FkZmxhZ3MJQm9vdCBwcm90b2NvbCBvcHRpb24gZmxhZ3MKKzAyMTIvMgkyLjAwKwlzZXR1cF9tb3ZlX3NpemUJTW92ZSB0byBoaWdoIG1lbW9yeSBzaXplICh1c2VkIHdpdGggaG9va3MpCiswMjE0LzQJMi4wMCsJY29kZTMyX3N0YXJ0CUJvb3QgbG9hZGVyIGhvb2sgKHNlZSBiZWxvdykKKzAyMTgvNAkyLjAwKwlyYW1kaXNrX2ltYWdlCWluaXRyZCBsb2FkIGFkZHJlc3MgKHNldCBieSBib290IGxvYWRlcikKKzAyMUMvNAkyLjAwKwlyYW1kaXNrX3NpemUJaW5pdHJkIHNpemUgKHNldCBieSBib290IGxvYWRlcikKKzAyMjAvNAkyLjAwKwlib290c2VjdF9rbHVkZ2UJRE8gTk9UIFVTRSAtIGZvciBib290c2VjdC5TIHVzZSBvbmx5CiswMjI0LzIJMi4wMSsJaGVhcF9lbmRfcHRyCUZyZWUgbWVtb3J5IGFmdGVyIHNldHVwIGVuZAorMDIyNi8yCU4vQQlwYWQxCQlVbnVzZWQKKzAyMjgvNAkyLjAyKwljbWRfbGluZV9wdHIJMzItYml0IHBvaW50ZXIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKKzAyMkMvNAkyLjAzKwlpbml0cmRfYWRkcl9tYXgJSGlnaGVzdCBsZWdhbCBpbml0cmQgYWRkcmVzcworCitGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIHRoZSBzZXR1cF9zZWN0cyBmaWVsZCBjb250YWlucyAwLCB0aGUKK3JlYWwgdmFsdWUgaXMgNC4KKworSWYgdGhlICJIZHJTIiAoMHg1MzcyNjQ0OCkgbWFnaWMgbnVtYmVyIGlzIG5vdCBmb3VuZCBhdCBvZmZzZXQgMHgyMDIsCit0aGUgYm9vdCBwcm90b2NvbCB2ZXJzaW9uIGlzICJvbGQiLiAgTG9hZGluZyBhbiBvbGQga2VybmVsLCB0aGUKK2ZvbGxvd2luZyBwYXJhbWV0ZXJzIHNob3VsZCBiZSBhc3N1bWVkOgorCisJSW1hZ2UgdHlwZSA9IHpJbWFnZQorCWluaXRyZCBub3Qgc3VwcG9ydGVkCisJUmVhbC1tb2RlIGtlcm5lbCBtdXN0IGJlIGxvY2F0ZWQgYXQgMHg5MDAwMC4KKworT3RoZXJ3aXNlLCB0aGUgInZlcnNpb24iIGZpZWxkIGNvbnRhaW5zIHRoZSBwcm90b2NvbCB2ZXJzaW9uLAorZS5nLiBwcm90b2NvbCB2ZXJzaW9uIDIuMDEgd2lsbCBjb250YWluIDB4MDIwMSBpbiB0aGlzIGZpZWxkLiAgV2hlbgorc2V0dGluZyBmaWVsZHMgaW4gdGhlIGhlYWRlciwgeW91IG11c3QgbWFrZSBzdXJlIG9ubHkgdG8gc2V0IGZpZWxkcworc3VwcG9ydGVkIGJ5IHRoZSBwcm90b2NvbCB2ZXJzaW9uIGluIHVzZS4KKworVGhlICJrZXJuZWxfdmVyc2lvbiIgZmllbGQsIGlmIHNldCB0byBhIG5vbnplcm8gdmFsdWUsIGNvbnRhaW5zIGEKK3BvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQgaHVtYW4tcmVhZGFibGUga2VybmVsIHZlcnNpb24gbnVtYmVyCitzdHJpbmcsIGxlc3MgMHgyMDAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGtlcm5lbCB2ZXJzaW9uIHRvCit0aGUgdXNlci4gIFRoaXMgdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiAoMHgyMDAqc2V0dXBfc2VjdHMpLiAgRm9yCitleGFtcGxlLCBpZiB0aGlzIHZhbHVlIGlzIHNldCB0byAweDFjMDAsIHRoZSBrZXJuZWwgdmVyc2lvbiBudW1iZXIKK3N0cmluZyBjYW4gYmUgZm91bmQgYXQgb2Zmc2V0IDB4MWUwMCBpbiB0aGUga2VybmVsIGZpbGUuICBUaGlzIGlzIGEKK3ZhbGlkIHZhbHVlIGlmIGFuZCBvbmx5IGlmIHRoZSAic2V0dXBfc2VjdHMiIGZpZWxkIGNvbnRhaW5zIHRoZSB2YWx1ZQorMTQgb3IgaGlnaGVyLgorCitNb3N0IGJvb3QgbG9hZGVycyB3aWxsIHNpbXBseSBsb2FkIHRoZSBrZXJuZWwgYXQgaXRzIHRhcmdldCBhZGRyZXNzCitkaXJlY3RseS4gIFN1Y2ggYm9vdCBsb2FkZXJzIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGZpbGxpbmcgaW4KK21vc3Qgb2YgdGhlIGZpZWxkcyBpbiB0aGUgaGVhZGVyLiAgVGhlIGZvbGxvd2luZyBmaWVsZHMgc2hvdWxkIGJlCitmaWxsZWQgb3V0LCBob3dldmVyOgorCisgIHZpZF9tb2RlOgorCVBsZWFzZSBzZWUgdGhlIHNlY3Rpb24gb24gU1BFQ0lBTCBDT01NQU5EIExJTkUgT1BUSU9OUy4KKworICB0eXBlX29mX2xvYWRlcjoKKwlJZiB5b3VyIGJvb3QgbG9hZGVyIGhhcyBhbiBhc3NpZ25lZCBpZCAoc2VlIHRhYmxlIGJlbG93KSwgZW50ZXIKKwkweFRWIGhlcmUsIHdoZXJlIFQgaXMgYW4gaWRlbnRpZmllciBmb3IgdGhlIGJvb3QgbG9hZGVyIGFuZCBWIGlzCisJYSB2ZXJzaW9uIG51bWJlci4gIE90aGVyd2lzZSwgZW50ZXIgMHhGRiBoZXJlLgorCisJQXNzaWduZWQgYm9vdCBsb2FkZXIgaWRzOgorCTAgIExJTE8KKwkxICBMb2FkbGluCisJMiAgYm9vdHNlY3QtbG9hZGVyCisJMyAgU1lTTElOVVgKKwk0ICBFdGhlckJvb3QKKwk1ICBFTElMTworCTcgIEdSdUIKKwk4ICBVLUJPT1QKKworCVBsZWFzZSBjb250YWN0IDxocGFAenl0b3IuY29tPiBpZiB5b3UgbmVlZCBhIGJvb3Rsb2FkZXIgSUQKKwl2YWx1ZSBhc3NpZ25lZC4KKworICBsb2FkZmxhZ3MsIGhlYXBfZW5kX3B0cjoKKwlJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBpcyAyLjAxIG9yIGhpZ2hlciwgZW50ZXIgdGhlCisJb2Zmc2V0IGxpbWl0IG9mIHRoZSBzZXR1cCBoZWFwIGludG8gaGVhcF9lbmRfcHRyIGFuZCBzZXQgdGhlCisJMHg4MCBiaXQgKENBTl9VU0VfSEVBUCkgb2YgbG9hZGZsYWdzLiAgaGVhcF9lbmRfcHRyIGFwcGVhcnMgdG8KKwliZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2Ygc2V0dXAgKG9mZnNldCAweDAyMDApLgorCisgIHNldHVwX21vdmVfc2l6ZTogCisJV2hlbiB1c2luZyBwcm90b2NvbCAyLjAwIG9yIDIuMDEsIGlmIHRoZSByZWFsIG1vZGUKKwlrZXJuZWwgaXMgbm90IGxvYWRlZCBhdCAweDkwMDAwLCBpdCBnZXRzIG1vdmVkIHRoZXJlIGxhdGVyIGluCisJdGhlIGxvYWRpbmcgc2VxdWVuY2UuICBGaWxsIGluIHRoaXMgZmllbGQgaWYgeW91IHdhbnQKKwlhZGRpdGlvbmFsIGRhdGEgKHN1Y2ggYXMgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUpIG1vdmVkIGluCisJYWRkaXRpb24gdG8gdGhlIHJlYWwtbW9kZSBrZXJuZWwgaXRzZWxmLgorCisgIHJhbWRpc2tfaW1hZ2UsIHJhbWRpc2tfc2l6ZToKKwlJZiB5b3VyIGJvb3QgbG9hZGVyIGhhcyBsb2FkZWQgYW4gaW5pdGlhbCByYW1kaXNrIChpbml0cmQpLAorCXNldCByYW1kaXNrX2ltYWdlIHRvIHRoZSAzMi1iaXQgcG9pbnRlciB0byB0aGUgcmFtZGlzayBkYXRhCisJYW5kIHRoZSByYW1kaXNrX3NpemUgdG8gdGhlIHNpemUgb2YgdGhlIHJhbWRpc2sgZGF0YS4KKworCVRoZSBpbml0cmQgc2hvdWxkIHR5cGljYWxseSBiZSBsb2NhdGVkIGFzIGhpZ2ggaW4gbWVtb3J5IGFzCisJcG9zc2libGUsIGFzIGl0IG1heSBvdGhlcndpc2UgZ2V0IG92ZXJ3cml0dGVuIGJ5IHRoZSBlYXJseQorCWtlcm5lbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4JIEhvd2V2ZXIsIGl0IG11c3QgbmV2ZXIgYmUKKwlsb2NhdGVkIGFib3ZlIHRoZSBhZGRyZXNzIHNwZWNpZmllZCBpbiB0aGUgaW5pdHJkX2FkZHJfbWF4CisJZmllbGQuCVRoZSBpbml0cmQgc2hvdWxkIGJlIGF0IGxlYXN0IDRLIHBhZ2UgYWxpZ25lZC4KKworICBjbWRfbGluZV9wdHI6CisJSWYgdGhlIHByb3RvY29sIHZlcnNpb24gaXMgMi4wMiBvciBoaWdoZXIsIHRoaXMgaXMgYSAzMi1iaXQKKwlwb2ludGVyIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiAgVGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKKwljYW4gYmUgbG9jYXRlZCBhbnl3aGVyZSBiZXR3ZWVuIHRoZSBlbmQgb2Ygc2V0dXAgYW5kIDB4QTAwMDAuCisJRmlsbCBpbiB0aGlzIGZpZWxkIGV2ZW4gaWYgeW91ciBib290IGxvYWRlciBkb2VzIG5vdCBzdXBwb3J0IGEKKwljb21tYW5kIGxpbmUsIGluIHdoaWNoIGNhc2UgeW91IGNhbiBwb2ludCB0aGlzIHRvIGFuIGVtcHR5CisJc3RyaW5nIChvciBiZXR0ZXIgeWV0LCB0byB0aGUgc3RyaW5nICJhdXRvIi4pICBJZiB0aGlzIGZpZWxkCisJaXMgbGVmdCBhdCB6ZXJvLCB0aGUga2VybmVsIHdpbGwgYXNzdW1lIHRoYXQgeW91ciBib290IGxvYWRlcgorCWRvZXMgbm90IHN1cHBvcnQgdGhlIDIuMDIrIHByb3RvY29sLgorCisgIHJhbWRpc2tfbWF4OgorCVRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCBtYXkgYmUgb2NjdXBpZWQgYnkgdGhlIGluaXRyZAorCWNvbnRlbnRzLiAgRm9yIGJvb3QgcHJvdG9jb2xzIDIuMDIgb3IgZWFybGllciwgdGhpcyBmaWVsZCBpcworCW5vdCBwcmVzZW50LCBhbmQgdGhlIG1heGltdW0gYWRkcmVzcyBpcyAweDM3RkZGRkZGLiAgKFRoaXMKKwlhZGRyZXNzIGlzIGRlZmluZWQgYXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGhpZ2hlc3Qgc2FmZSBieXRlLCBzbworCWlmIHlvdXIgcmFtZGlzayBpcyBleGFjdGx5IDEzMTA3MiBieXRlcyBsb25nIGFuZCB0aGlzIGZpZWxkIGlzCisJMHgzN0ZGRkZGRiwgeW91IGNhbiBzdGFydCB5b3VyIHJhbWRpc2sgYXQgMHgzN0ZFMDAwMC4pCisKKworKioqKiBUSEUgS0VSTkVMIENPTU1BTkQgTElORQorCitUaGUga2VybmVsIGNvbW1hbmQgbGluZSBoYXMgYmVjb21lIGFuIGltcG9ydGFudCB3YXkgZm9yIHRoZSBib290Citsb2FkZXIgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUga2VybmVsLiAgU29tZSBvZiBpdHMgb3B0aW9ucyBhcmUgYWxzbworcmVsZXZhbnQgdG8gdGhlIGJvb3QgbG9hZGVyIGl0c2VsZiwgc2VlICJzcGVjaWFsIGNvbW1hbmQgbGluZSBvcHRpb25zIgorYmVsb3cuCisKK1RoZSBrZXJuZWwgY29tbWFuZCBsaW5lIGlzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB1cCB0byAyNTUKK2NoYXJhY3RlcnMgbG9uZywgcGx1cyB0aGUgZmluYWwgbnVsbC4KKworSWYgdGhlIGJvb3QgcHJvdG9jb2wgdmVyc2lvbiBpcyAyLjAyIG9yIGxhdGVyLCB0aGUgYWRkcmVzcyBvZiB0aGUKK2tlcm5lbCBjb21tYW5kIGxpbmUgaXMgZ2l2ZW4gYnkgdGhlIGhlYWRlciBmaWVsZCBjbWRfbGluZV9wdHIgKHNlZQorYWJvdmUuKQorCitJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBpcyAqbm90KiAyLjAyIG9yIGhpZ2hlciwgdGhlIGtlcm5lbAorY29tbWFuZCBsaW5lIGlzIGVudGVyZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBwcm90b2NvbDoKKworCUF0IG9mZnNldCAweDAwMjAgKHdvcmQpLCAiY21kX2xpbmVfbWFnaWMiLCBlbnRlciB0aGUgbWFnaWMKKwludW1iZXIgMHhBMzNGLgorCisJQXQgb2Zmc2V0IDB4MDAyMiAod29yZCksICJjbWRfbGluZV9vZmZzZXQiLCBlbnRlciB0aGUgb2Zmc2V0CisJb2YgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgKHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUKKwlyZWFsLW1vZGUga2VybmVsKS4KKwkKKwlUaGUga2VybmVsIGNvbW1hbmQgbGluZSAqbXVzdCogYmUgd2l0aGluIHRoZSBtZW1vcnkgcmVnaW9uCisJY292ZXJlZCBieSBzZXR1cF9tb3ZlX3NpemUsIHNvIHlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhpcworCWZpZWxkLgorCisKKyoqKiogU0FNUExFIEJPT1QgQ09ORklHVVJBVElPTgorCitBcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uLCBhc3N1bWUgdGhlIGZvbGxvd2luZyBsYXlvdXQgb2YgdGhlIHJlYWwKK21vZGUgc2VnbWVudDoKKworCTB4MDAwMC0weDdGRkYJUmVhbCBtb2RlIGtlcm5lbAorCTB4ODAwMC0weDhGRkYJU3RhY2sgYW5kIGhlYXAKKwkweDkwMDAtMHg5MEZGCUtlcm5lbCBjb21tYW5kIGxpbmUKKworU3VjaCBhIGJvb3QgbG9hZGVyIHNob3VsZCBlbnRlciB0aGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgaGVhZGVyOgorCisJdW5zaWduZWQgbG9uZyBiYXNlX3B0cjsJLyogYmFzZSBhZGRyZXNzIGZvciByZWFsLW1vZGUgc2VnbWVudCAqLworCisJaWYgKCBzZXR1cF9zZWN0cyA9PSAwICkgeworCQlzZXR1cF9zZWN0cyA9IDQ7CisJfQorCisJaWYgKCBwcm90b2NvbCA+PSAweDAyMDAgKSB7CisJCXR5cGVfb2ZfbG9hZGVyID0gPHR5cGUgY29kZT47CisJCWlmICggbG9hZGluZ19pbml0cmQgKSB7CisJCQlyYW1kaXNrX2ltYWdlID0gPGluaXRyZF9hZGRyZXNzPjsKKwkJCXJhbWRpc2tfc2l6ZSA9IDxpbml0cmRfc2l6ZT47CisJCX0KKwkJaWYgKCBwcm90b2NvbCA+PSAweDAyMDEgKSB7CisJCQloZWFwX2VuZF9wdHIgPSAweDkwMDAgLSAweDIwMDsKKwkJCWxvYWRmbGFncyB8PSAweDgwOyAvKiBDQU5fVVNFX0hFQVAgKi8KKwkJfQorCQlpZiAoIHByb3RvY29sID49IDB4MDIwMiApIHsKKwkJCWNtZF9saW5lX3B0ciA9IGJhc2VfcHRyICsgMHg5MDAwOworCQl9IGVsc2UgeworCQkJY21kX2xpbmVfbWFnaWMJPSAweEEzM0Y7CisJCQljbWRfbGluZV9vZmZzZXQgPSAweDkwMDA7CisJCQlzZXR1cF9tb3ZlX3NpemUgPSAweDkxMDA7CisJCX0KKwl9IGVsc2UgeworCQkvKiBWZXJ5IG9sZCBrZXJuZWwgKi8KKworCQljbWRfbGluZV9tYWdpYwk9IDB4QTMzRjsKKwkJY21kX2xpbmVfb2Zmc2V0ID0gMHg5MDAwOworCisJCS8qIEEgdmVyeSBvbGQga2VybmVsIE1VU1QgaGF2ZSBpdHMgcmVhbC1tb2RlIGNvZGUKKwkJICAgbG9hZGVkIGF0IDB4OTAwMDAgKi8KKworCQlpZiAoIGJhc2VfcHRyICE9IDB4OTAwMDAgKSB7CisJCQkvKiBDb3B5IHRoZSByZWFsLW1vZGUga2VybmVsICovCisJCQltZW1jcHkoMHg5MDAwMCwgYmFzZV9wdHIsIChzZXR1cF9zZWN0cysxKSo1MTIpOworCQkJLyogQ29weSB0aGUgY29tbWFuZCBsaW5lICovCisJCQltZW1jcHkoMHg5OTAwMCwgYmFzZV9wdHIrMHg5MDAwLCAyNTYpOworCisJCQliYXNlX3B0ciA9IDB4OTAwMDA7CQkgLyogUmVsb2NhdGVkICovCisJCX0KKworCQkvKiBJdCBpcyByZWNvbW1lbmRlZCB0byBjbGVhciBtZW1vcnkgdXAgdG8gdGhlIDMySyBtYXJrICovCisJCW1lbXNldCgweDkwMDAwICsgKHNldHVwX3NlY3RzKzEpKjUxMiwgMCwKKwkJICAgICAgICg2NC0oc2V0dXBfc2VjdHMrMSkpKjUxMik7CisJfQorCisKKyoqKiogTE9BRElORyBUSEUgUkVTVCBPRiBUSEUgS0VSTkVMCisKK1RoZSBub24tcmVhbC1tb2RlIGtlcm5lbCBzdGFydHMgYXQgb2Zmc2V0IChzZXR1cF9zZWN0cysxKSo1MTIgaW4gdGhlCitrZXJuZWwgZmlsZSAoYWdhaW4sIGlmIHNldHVwX3NlY3RzID09IDAgdGhlIHJlYWwgdmFsdWUgaXMgNC4pICBJdAorc2hvdWxkIGJlIGxvYWRlZCBhdCBhZGRyZXNzIDB4MTAwMDAgZm9yIEltYWdlL3pJbWFnZSBrZXJuZWxzIGFuZAorMHgxMDAwMDAgZm9yIGJ6SW1hZ2Uga2VybmVscy4KKworVGhlIGtlcm5lbCBpcyBhIGJ6SW1hZ2Uga2VybmVsIGlmIHRoZSBwcm90b2NvbCA+PSAyLjAwIGFuZCB0aGUgMHgwMQorYml0IChMT0FEX0hJR0gpIGluIHRoZSBsb2FkZmxhZ3MgZmllbGQgaXMgc2V0OgorCisJaXNfYnpJbWFnZSA9IChwcm90b2NvbCA+PSAweDAyMDApICYmIChsb2FkZmxhZ3MgJiAweDAxKTsKKwlsb2FkX2FkZHJlc3MgPSBpc19iekltYWdlID8gMHgxMDAwMDAgOiAweDEwMDAwOworCitOb3RlIHRoYXQgSW1hZ2UvekltYWdlIGtlcm5lbHMgY2FuIGJlIHVwIHRvIDUxMksgaW4gc2l6ZSwgYW5kIHRodXMgdXNlCit0aGUgZW50aXJlIDB4MTAwMDAtMHg5MDAwMCByYW5nZSBvZiBtZW1vcnkuICBUaGlzIG1lYW5zIGl0IGlzIHByZXR0eQorbXVjaCBhIHJlcXVpcmVtZW50IGZvciB0aGVzZSBrZXJuZWxzIHRvIGxvYWQgdGhlIHJlYWwtbW9kZSBwYXJ0IGF0CisweDkwMDAwLiAgYnpJbWFnZSBrZXJuZWxzIGFsbG93IG11Y2ggbW9yZSBmbGV4aWJpbGl0eS4KKworCisqKioqIFNQRUNJQUwgQ09NTUFORCBMSU5FIE9QVElPTlMKKworSWYgdGhlIGNvbW1hbmQgbGluZSBwcm92aWRlZCBieSB0aGUgYm9vdCBsb2FkZXIgaXMgZW50ZXJlZCBieSB0aGUKK3VzZXIsIHRoZSB1c2VyIG1heSBleHBlY3QgdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB3b3JrLgorVGhleSBzaG91bGQgbm9ybWFsbHkgbm90IGJlIGRlbGV0ZWQgZnJvbSB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBldmVuCit0aG91Z2ggbm90IGFsbCBvZiB0aGVtIGFyZSBhY3R1YWxseSBtZWFuaW5nZnVsIHRvIHRoZSBrZXJuZWwuICBCb290Citsb2FkZXIgYXV0aG9ycyB3aG8gbmVlZCBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciB0aGUgYm9vdAorbG9hZGVyIGl0c2VsZiBzaG91bGQgZ2V0IHRoZW0gcmVnaXN0ZXJlZCBpbgorRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgdG8gbWFrZSBzdXJlIHRoZXkgd2lsbCBub3QKK2NvbmZsaWN0IHdpdGggYWN0dWFsIGtlcm5lbCBvcHRpb25zIG5vdyBvciBpbiB0aGUgZnV0dXJlLgorCisgIHZnYT08bW9kZT4KKwk8bW9kZT4gaGVyZSBpcyBlaXRoZXIgYW4gaW50ZWdlciAoaW4gQyBub3RhdGlvbiwgZWl0aGVyCisJZGVjaW1hbCwgb2N0YWwsIG9yIGhleGFkZWNpbWFsKSBvciBvbmUgb2YgdGhlIHN0cmluZ3MKKwkibm9ybWFsIiAobWVhbmluZyAweEZGRkYpLCAiZXh0IiAobWVhbmluZyAweEZGRkUpIG9yICJhc2siCisJKG1lYW5pbmcgMHhGRkZEKS4gIFRoaXMgdmFsdWUgc2hvdWxkIGJlIGVudGVyZWQgaW50byB0aGUKKwl2aWRfbW9kZSBmaWVsZCwgYXMgaXQgaXMgdXNlZCBieSB0aGUga2VybmVsIGJlZm9yZSB0aGUgY29tbWFuZAorCWxpbmUgaXMgcGFyc2VkLgorCisgIG1lbT08c2l6ZT4KKwk8c2l6ZT4gaXMgYW4gaW50ZWdlciBpbiBDIG5vdGF0aW9uIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgSywgTQorCW9yIEcgKG1lYW5pbmcgPDwgMTAsIDw8IDIwIG9yIDw8IDMwKS4gIFRoaXMgc3BlY2lmaWVzIHRoZSBlbmQKKwlvZiBtZW1vcnkgdG8gdGhlIGtlcm5lbC4gVGhpcyBhZmZlY3RzIHRoZSBwb3NzaWJsZSBwbGFjZW1lbnQKKwlvZiBhbiBpbml0cmQsIHNpbmNlIGFuIGluaXRyZCBzaG91bGQgYmUgcGxhY2VkIG5lYXIgZW5kIG9mCisJbWVtb3J5LiAgTm90ZSB0aGF0IHRoaXMgaXMgYW4gb3B0aW9uIHRvICpib3RoKiB0aGUga2VybmVsIGFuZAorCXRoZSBib290bG9hZGVyIQorCisgIGluaXRyZD08ZmlsZT4KKwlBbiBpbml0cmQgc2hvdWxkIGJlIGxvYWRlZC4gIFRoZSBtZWFuaW5nIG9mIDxmaWxlPiBpcworCW9idmlvdXNseSBib290bG9hZGVyLWRlcGVuZGVudCwgYW5kIHNvbWUgYm9vdCBsb2FkZXJzCisJKGUuZy4gTElMTykgZG8gbm90IGhhdmUgc3VjaCBhIGNvbW1hbmQuCisKK0luIGFkZGl0aW9uLCBzb21lIGJvb3QgbG9hZGVycyBhZGQgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIHRoZQordXNlci1zcGVjaWZpZWQgY29tbWFuZCBsaW5lOgorCisgIEJPT1RfSU1BR0U9PGZpbGU+CisJVGhlIGJvb3QgaW1hZ2Ugd2hpY2ggd2FzIGxvYWRlZC4gIEFnYWluLCB0aGUgbWVhbmluZyBvZiA8ZmlsZT4KKwlpcyBvYnZpb3VzbHkgYm9vdGxvYWRlci1kZXBlbmRlbnQuCisKKyAgYXV0bworCVRoZSBrZXJuZWwgd2FzIGJvb3RlZCB3aXRob3V0IGV4cGxpY2l0IHVzZXIgaW50ZXJ2ZW50aW9uLgorCitJZiB0aGVzZSBvcHRpb25zIGFyZSBhZGRlZCBieSB0aGUgYm9vdCBsb2FkZXIsIGl0IGlzIGhpZ2hseQorcmVjb21tZW5kZWQgdGhhdCB0aGV5IGFyZSBsb2NhdGVkICpmaXJzdCosIGJlZm9yZSB0aGUgdXNlci1zcGVjaWZpZWQKK29yIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWVkIGNvbW1hbmQgbGluZS4gIE90aGVyd2lzZSwgImluaXQ9L2Jpbi9zaCIKK2dldHMgY29uZnVzZWQgYnkgdGhlICJhdXRvIiBvcHRpb24uCisKKworKioqKiBSVU5OSU5HIFRIRSBLRVJORUwKKworVGhlIGtlcm5lbCBpcyBzdGFydGVkIGJ5IGp1bXBpbmcgdG8gdGhlIGtlcm5lbCBlbnRyeSBwb2ludCwgd2hpY2ggaXMKK2xvY2F0ZWQgYXQgKnNlZ21lbnQqIG9mZnNldCAweDIwIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSByZWFsIG1vZGUKK2tlcm5lbC4gIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgbG9hZGVkIHlvdXIgcmVhbC1tb2RlIGtlcm5lbCBjb2RlIGF0CisweDkwMDAwLCB0aGUga2VybmVsIGVudHJ5IHBvaW50IGlzIDkwMjA6MDAwMC4KKworQXQgZW50cnksIGRzID0gZXMgPSBzcyBzaG91bGQgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSByZWFsLW1vZGUKK2tlcm5lbCBjb2RlICgweDkwMDAgaWYgdGhlIGNvZGUgaXMgbG9hZGVkIGF0IDB4OTAwMDApLCBzcCBzaG91bGQgYmUKK3NldCB1cCBwcm9wZXJseSwgbm9ybWFsbHkgcG9pbnRpbmcgdG8gdGhlIHRvcCBvZiB0aGUgaGVhcCwgYW5kCitpbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZC4gIEZ1cnRoZXJtb3JlLCB0byBndWFyZCBhZ2FpbnN0IGJ1Z3MgaW4KK3RoZSBrZXJuZWwsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIGJvb3QgbG9hZGVyIHNldHMgZnMgPSBncyA9IGRzID0KK2VzID0gc3MuCisKK0luIG91ciBleGFtcGxlIGZyb20gYWJvdmUsIHdlIHdvdWxkIGRvOgorCisJLyogTm90ZTogaW4gdGhlIGNhc2Ugb2YgdGhlICJvbGQiIGtlcm5lbCBwcm90b2NvbCwgYmFzZV9wdHIgbXVzdAorCSAgIGJlID09IDB4OTAwMDAgYXQgdGhpcyBwb2ludDsgc2VlIHRoZSBwcmV2aW91cyBzYW1wbGUgY29kZSAqLworCisJc2VnID0gYmFzZV9wdHIgPj4gNDsKKworCWNsaSgpOwkvKiBFbnRlciB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQhICovCisKKwkvKiBTZXQgdXAgdGhlIHJlYWwtbW9kZSBrZXJuZWwgc3RhY2sgKi8KKwlfU1MgPSBzZWc7CisJX1NQID0gMHg5MDAwOwkvKiBMb2FkIFNQIGltbWVkaWF0ZWx5IGFmdGVyIGxvYWRpbmcgU1MhICovCisKKwlfRFMgPSBfRVMgPSBfRlMgPSBfR1MgPSBzZWc7CisJam1wX2ZhcihzZWcrMHgyMCwgMCk7CS8qIFJ1biB0aGUga2VybmVsICovCisKK0lmIHlvdXIgYm9vdCBzZWN0b3IgYWNjZXNzZXMgYSBmbG9wcHkgZHJpdmUsIGl0IGlzIHJlY29tbWVuZGVkIHRvCitzd2l0Y2ggb2ZmIHRoZSBmbG9wcHkgbW90b3IgYmVmb3JlIHJ1bm5pbmcgdGhlIGtlcm5lbCwgc2luY2UgdGhlCitrZXJuZWwgYm9vdCBsZWF2ZXMgaW50ZXJydXB0cyBvZmYgYW5kIHRodXMgdGhlIG1vdG9yIHdpbGwgbm90IGJlCitzd2l0Y2hlZCBvZmYsIGVzcGVjaWFsbHkgaWYgdGhlIGxvYWRlZCBrZXJuZWwgaGFzIHRoZSBmbG9wcHkgZHJpdmVyIGFzCithIGRlbWFuZC1sb2FkZWQgbW9kdWxlIQorCisKKyoqKiogQURWQU5DRUQgQk9PVCBUSU1FIEhPT0tTCisKK0lmIHRoZSBib290IGxvYWRlciBydW5zIGluIGEgcGFydGljdWxhcmx5IGhvc3RpbGUgZW52aXJvbm1lbnQgKHN1Y2ggYXMKK0xPQURMSU4sIHdoaWNoIHJ1bnMgdW5kZXIgRE9TKSBpdCBtYXkgYmUgaW1wb3NzaWJsZSB0byBmb2xsb3cgdGhlCitzdGFuZGFyZCBtZW1vcnkgbG9jYXRpb24gcmVxdWlyZW1lbnRzLiAgU3VjaCBhIGJvb3QgbG9hZGVyIG1heSB1c2UgdGhlCitmb2xsb3dpbmcgaG9va3MgdGhhdCwgaWYgc2V0LCBhcmUgaW52b2tlZCBieSB0aGUga2VybmVsIGF0IHRoZQorYXBwcm9wcmlhdGUgdGltZS4gIFRoZSB1c2Ugb2YgdGhlc2UgaG9va3Mgc2hvdWxkIHByb2JhYmx5IGJlCitjb25zaWRlcmVkIGFuIGFic29sdXRlbHkgbGFzdCByZXNvcnQhCisKK0lNUE9SVEFOVDogQWxsIHRoZSBob29rcyBhcmUgcmVxdWlyZWQgdG8gcHJlc2VydmUgJWVzcCwgJWVicCwgJWVzaSBhbmQKKyVlZGkgYWNyb3NzIGludm9jYXRpb24uCisKKyAgcmVhbG1vZGVfc3d0Y2g6CisJQSAxNi1iaXQgcmVhbCBtb2RlIGZhciBzdWJyb3V0aW5lIGludm9rZWQgaW1tZWRpYXRlbHkgYmVmb3JlCisJZW50ZXJpbmcgcHJvdGVjdGVkIG1vZGUuICBUaGUgZGVmYXVsdCByb3V0aW5lIGRpc2FibGVzIE5NSSwgc28KKwl5b3VyIHJvdXRpbmUgc2hvdWxkIHByb2JhYmx5IGRvIHNvLCB0b28uCisKKyAgY29kZTMyX3N0YXJ0OgorCUEgMzItYml0IGZsYXQtbW9kZSByb3V0aW5lICpqdW1wZWQqIHRvIGltbWVkaWF0ZWx5IGFmdGVyIHRoZQorCXRyYW5zaXRpb24gdG8gcHJvdGVjdGVkIG1vZGUsIGJ1dCBiZWZvcmUgdGhlIGtlcm5lbCBpcworCXVuY29tcHJlc3NlZC4gIE5vIHNlZ21lbnRzLCBleGNlcHQgQ1MsIGFyZSBzZXQgdXA7IHlvdSBzaG91bGQKKwlzZXQgdGhlbSB1cCB0byBLRVJORUxfRFMgKDB4MTgpIHlvdXJzZWxmLgorCisJQWZ0ZXIgY29tcGxldGluZyB5b3VyIGhvb2ssIHlvdSBzaG91bGQganVtcCB0byB0aGUgYWRkcmVzcworCXRoYXQgd2FzIGluIHRoaXMgZmllbGQgYmVmb3JlIHlvdXIgYm9vdCBsb2FkZXIgb3Zlcndyb3RlIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMzg2L3VzYi1sZWdhY3ktc3VwcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2kzODYvdXNiLWxlZ2FjeS1zdXBwb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODk0Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMzg2L3VzYi1sZWdhY3ktc3VwcG9ydC50eHQKQEAgLTAsMCArMSw0NCBAQAorVVNCIExlZ2FjeSBzdXBwb3J0Cit+fn5+fn5+fn5+fn5+fn5+fn4KKworVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4sIEphbnVhcnkgMjAwNAorCisKK0Fsc28ga25vd24gYXMgIlVTQiBLZXlib2FyZCIgb3IgIlVTQiBNb3VzZSBzdXBwb3J0IiBpbiB0aGUgQklPUyBTZXR1cCBpcyBhCitmZWF0dXJlIHRoYXQgYWxsb3dzIG9uZSB0byB1c2UgdGhlIFVTQiBtb3VzZSBhbmQga2V5Ym9hcmQgYXMgaWYgdGhleSB3ZXJlCit0aGVpciBjbGFzc2ljIFBTLzIgY291bnRlcnBhcnRzLiAgVGhpcyBtZWFucyBvbmUgY2FuIHVzZSBhbiBVU0Iga2V5Ym9hcmQgdG8KK3R5cGUgaW4gTElMTyBmb3IgZXhhbXBsZS4KKworSXQgaGFzIHNldmVyYWwgZHJhd2JhY2tzLCB0aG91Z2g6CisKKzEpIE9uIHNvbWUgbWFjaGluZXMsIHRoZSBlbXVsYXRlZCBQUy8yIG1vdXNlIHRha2VzIG92ZXIgZXZlbiB3aGVuIG5vIFVTQgorICAgbW91c2UgaXMgcHJlc2VudCBhbmQgYSByZWFsIFBTLzIgbW91c2UgaXMgcHJlc2VudC4gIEluIHRoYXQgY2FzZSB0aGUgZXh0cmEKKyAgIGZlYXR1cmVzICh3aGVlbCwgZXh0cmEgYnV0dG9ucywgdG91Y2hwYWQgbW9kZSkgb2YgdGhlIHJlYWwgUFMvMiBtb3VzZSBtYXkKKyAgIG5vdCBiZSBhdmFpbGFibGUuCisKKzIpIElmIENPTkZJR19ISUdITUVNNjRHIGlzIGVuYWJsZWQsIHRoZSBQUy8yIG1vdXNlIGVtdWxhdGlvbiBjYW4gY2F1c2UKKyAgIHN5c3RlbSBjcmFzaGVzLCBiZWNhdXNlIHRoZSBTTU0gQklPUyBpcyBub3QgZXhwZWN0aW5nIHRvIGJlIGluIFBBRSBtb2RlLgorICAgVGhlIEludGVsIEU3NTA1IGlzIGEgdHlwaWNhbCBtYWNoaW5lIHdoZXJlIHRoaXMgaGFwcGVucy4KKworMykgSWYgQU1ENjQgNjQtYml0IG1vZGUgaXMgZW5hYmxlZCwgYWdhaW4gc3lzdGVtIGNyYXNoZXMgb2Z0ZW4gaGFwcGVuLAorICAgYmVjYXVzZSB0aGUgU01NIEJJT1MgaXNuJ3QgZXhwZWN0aW5nIHRoZSBDUFUgdG8gYmUgaW4gNjQtYml0IG1vZGUuICBUaGUKKyAgIEJJT1MgbWFudWZhY3R1cmVycyBvbmx5IHRlc3Qgd2l0aCBXaW5kb3dzLCBhbmQgV2luZG93cyBkb2Vzbid0IGRvIDY0LWJpdAorICAgeWV0LgorCitTb2x1dGlvbnM6CisKK1Byb2JsZW0gMSkgY2FuIGJlIHNvbHZlZCBieSBsb2FkaW5nIHRoZSBVU0IgZHJpdmVycyBwcmlvciB0byBsb2FkaW5nIHRoZQorUFMvMiBtb3VzZSBkcml2ZXIuIFNpbmNlIHRoZSBQUy8yIG1vdXNlIGRyaXZlciBpcyBpbiAyLjYgY29tcGlsZWQgaW50bwordGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHksIHRoaXMgbWVhbnMgdGhlIFVTQiBkcml2ZXJzIG5lZWQgdG8gYmUKK2NvbXBpbGVkLWluLCB0b28uCisKK1Byb2JsZW0gMikgY2FuIGN1cnJlbnRseSBvbmx5IGJlIHNvbHZlZCBieSBlaXRoZXIgZGlzYWJsaW5nIEhJR0hNRU02NEcKK2luIHRoZSBrZXJuZWwgY29uZmlnIG9yIFVTQiBMZWdhY3kgc3VwcG9ydCBpbiB0aGUgQklPUy4gQSBCSU9TIHVwZGF0ZQorY291bGQgaGVscCwgYnV0IHNvIGZhciBubyBzdWNoIHVwZGF0ZSBleGlzdHMuCisKK1Byb2JsZW0gMykgaXMgdXN1YWxseSBmaXhlZCBieSBhIEJJT1MgdXBkYXRlLiBDaGVjayB0aGUgYm9hcmQKK21hbnVmYWN0dXJlcnMgd2ViIHNpdGUuIElmIGFuIHVwZGF0ZSBpcyBub3QgYXZhaWxhYmxlLCBkaXNhYmxlIFVTQgorTGVnYWN5IHN1cHBvcnQgaW4gdGhlIEJJT1MuIElmIHRoaXMgYWxvbmUgZG9lc24ndCBoZWxwLCB0cnkgYWxzbyBhZGRpbmcKK2lkbGU9cG9sbCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIEJJT1MgbWF5IGJlIGVudGVyaW5nIHRoZSBTTU0KK29uIHRoZSBITFQgaW5zdHJ1Y3Rpb24gYXMgd2VsbC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMzg2L3plcm8tcGFnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2kzODYvemVyby1wYWdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2MwNTNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMzg2L3plcm8tcGFnZS50eHQKQEAgLTAsMCArMSw4NCBAQAorU3VtbWFyeSBvZiBib290X3BhcmFtcyBsYXlvdXQgKGtlcm5lbCBwb2ludCBvZiB2aWV3KQorICAgICAoIGNvbGxlY3RlZCBieSBIYW5zIExlcm1lbiBhbmQgTWFydGluIE1hcmVzICkKKyAKK1RoZSBjb250ZW50cyBvZiBib290X3BhcmFtcyBhcmUgdXNlZCB0byBwYXNzIHBhcmFtZXRlcnMgZnJvbSB0aGUKKzE2LWJpdCByZWFsbW9kZSBjb2RlIG9mIHRoZSBrZXJuZWwgdG8gdGhlIDMyLWJpdCBwYXJ0LiBSZWZlcmVuY2VzL3NldHRpbmdzCit0byBpdCBtYWlubHkgYXJlIGluOgorCisgIGFyY2gvaTM4Ni9ib290L3NldHVwLlMKKyAgYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUworICBhcmNoL2kzODYva2VybmVsL2hlYWQuUworICBhcmNoL2kzODYva2VybmVsL3NldHVwLmMKKyAKKworT2Zmc2V0CVR5cGUJCURlc2NyaXB0aW9uCistLS0tLS0gIC0tLS0JCS0tLS0tLS0tLS0tCisgICAgMAkzMiBieXRlcwlzdHJ1Y3Qgc2NyZWVuX2luZm8sIFNDUkVFTl9JTkZPCisJCQlBVFRFTlRJT04sIG92ZXJsYXBzIHRoZSBmb2xsb3dpbmcgISEhCisgICAgMgl1bnNpZ25lZCBzaG9ydAlFWFRfTUVNX0ssIGV4dGVuZGVkIG1lbW9yeSBzaXplIGluIEtiIChmcm9tIGludCAweDE1KQorIDB4MjAJdW5zaWduZWQgc2hvcnQJQ0xfTUFHSUMsIGNvbW1hbmRsaW5lIG1hZ2ljIG51bWJlciAoPTB4QTMzRikKKyAweDIyCXVuc2lnbmVkIHNob3J0CUNMX09GRlNFVCwgY29tbWFuZGxpbmUgb2Zmc2V0CisJCQlBZGRyZXNzIG9mIGNvbW1hbmRsaW5lIGlzIGNhbGN1bGF0ZWQ6CisJCQkgIDB4OTAwMDAgKyBjb250ZW50cyBvZiBDTF9PRkZTRVQKKwkJCShvbmx5IHRha2VuLCB3aGVuIENMX01BR0lDID0gMHhBMzNGKQorIDB4NDAJMjAgYnl0ZXMJc3RydWN0IGFwbV9iaW9zX2luZm8sIEFQTV9CSU9TX0lORk8KKyAweDYwCTE2IGJ5dGVzCUludGVsIFNwZWVkU3RlcCAoSVNUKSBCSU9TIHN1cHBvcnQgaW5mb3JtYXRpb24KKyAweDgwCTE2IGJ5dGVzCWhkMC1kaXNrLXBhcmFtZXRlciBmcm9tIGludHZlY3RvciAweDQxCisgMHg5MAkxNiBieXRlcwloZDEtZGlzay1wYXJhbWV0ZXIgZnJvbSBpbnR2ZWN0b3IgMHg0NgorCisgMHhhMAkxNiBieXRlcwlTeXN0ZW0gZGVzY3JpcHRpb24gdGFibGUgdHJ1bmNhdGVkIHRvIDE2IGJ5dGVzLgorCQkJKCBzdHJ1Y3Qgc3lzX2Rlc2NfdGFibGVfc3RydWN0ICkKKyAweGIwIC0gMHgxM2YJCUZyZWUuIEFkZCBtb3JlIHBhcmFtZXRlcnMgaGVyZSBpZiB5b3UgcmVhbGx5IG5lZWQgdGhlbS4KKyAweDE0MC0gMHgxYmUJCUVESURfSU5GTyBWaWRlbyBtb2RlIHNldHVwCisKKzB4MWM0CXVuc2lnbmVkIGxvbmcJRUZJIHN5c3RlbSB0YWJsZSBwb2ludGVyCisweDFjOAl1bnNpZ25lZCBsb25nCUVGSSBtZW1vcnkgZGVzY3JpcHRvciBzaXplCisweDFjYwl1bnNpZ25lZCBsb25nCUVGSSBtZW1vcnkgZGVzY3JpcHRvciB2ZXJzaW9uCisweDFkMAl1bnNpZ25lZCBsb25nCUVGSSBtZW1vcnkgZGVzY3JpcHRvciBtYXAgcG9pbnRlcgorMHgxZDQJdW5zaWduZWQgbG9uZwlFRkkgbWVtb3J5IGRlc2NyaXB0b3IgbWFwIHNpemUKKzB4MWUwCXVuc2lnbmVkIGxvbmcJQUxUX01FTV9LLCBhbHRlcm5hdGl2ZSBtZW0gY2hlY2ssIGluIEtiCisweDFlOAljaGFyCQludW1iZXIgb2YgZW50cmllcyBpbiBFODIwTUFQIChiZWxvdykKKzB4MWU5CXVuc2lnbmVkIGNoYXIJbnVtYmVyIG9mIGVudHJpZXMgaW4gRUREQlVGIChiZWxvdykKKzB4MWVhCXVuc2lnbmVkIGNoYXIJbnVtYmVyIG9mIGVudHJpZXMgaW4gRUREX01CUl9TSUdfQlVGRkVSIChiZWxvdykKKzB4MWYxCWNoYXIJCXNpemUgb2Ygc2V0dXAuUywgbnVtYmVyIG9mIHNlY3RvcnMKKzB4MWYyCXVuc2lnbmVkIHNob3J0CU1PVU5UX1JPT1RfUkRPTkxZIChpZiAhPTApCisweDFmNAl1bnNpZ25lZCBzaG9ydAlzaXplIG9mIGNvbXByZXNzZWQga2VybmVsLXBhcnQgaW4gdGhlCisJCQkoYil6SW1hZ2UtZmlsZSAoaW4gMTYgYnl0ZSB1bml0cywgcm91bmRlZCB1cCkKKzB4MWY2CXVuc2lnbmVkIHNob3J0CXN3YXBfZGV2ICh1bnVzZWQgQUZBSUspCisweDFmOAl1bnNpZ25lZCBzaG9ydAlSQU1ESVNLX0ZMQUdTCisweDFmYQl1bnNpZ25lZCBzaG9ydAlWR0EtTW9kZSAob2xkIG9uZSkKKzB4MWZjCXVuc2lnbmVkIHNob3J0CU9SSUdfUk9PVF9ERVYgKGhpZ2g9TWFqb3IsIGxvdz1taW5vcikKKzB4MWZmCWNoYXIJCUFVWF9ERVZJQ0VfSU5GTworCisweDIwMAlzaG9ydCBqdW1wIHRvIHN0YXJ0IG9mIHNldHVwIGNvZGUgYWthICJyZXNlcnZlZCIgZmllbGQuCisweDIwMgk0IGJ5dGVzCQlTaWduYXR1cmUgZm9yIFNFVFVQLWhlYWRlciwgPSJIZHJTIgorMHgyMDYJdW5zaWduZWQgc2hvcnQJVmVyc2lvbiBudW1iZXIgb2YgaGVhZGVyIGZvcm1hdAorCQkJQ3VycmVudCB2ZXJzaW9uIGlzIDB4MDIwMS4uLgorMHgyMDgJOCBieXRlcwkJKHVzZWQgYnkgc2V0dXAuUyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGJvb3QgbG9hZGVycywKKwkJCSBsb29rIHRoZXJlKQorMHgyMTAJY2hhcgkJTE9BREVSX1RZUEUsID0gMCwgb2xkIG9uZQorCQkJZWxzZSBpdCBpcyBzZXQgYnkgdGhlIGxvYWRlcjoKKwkJCTB4VFY6IFQ9MCBmb3IgTElMTworCQkJCTEgZm9yIExvYWRsaW4KKwkJCQkyIGZvciBib290c2VjdC1sb2FkZXIKKwkJCQkzIGZvciBTWVNMSU5VWAorCQkJCTQgZm9yIEVUSEVSQk9PVAorCQkJCVYgPSB2ZXJzaW9uCisweDIxMQljaGFyCQlsb2FkZmxhZ3M6CisJCQliaXQwID0gMToga2VybmVsIGlzIGxvYWRlZCBoaWdoIChiekltYWdlKQorCQkJYml0NyA9IDE6IEhlYXAgYW5kIHBvaW50ZXIgKHNlZSBiZWxvdykgc2V0IGJ5IGJvb3QKKwkJCQkgIGxvYWRlci4KKzB4MjEyCXVuc2lnbmVkIHNob3J0CShzZXR1cC5TKQorMHgyMTQJdW5zaWduZWQgbG9uZwlLRVJORUxfU1RBUlQsIHdoZXJlIHRoZSBsb2FkZXIgc3RhcnRlZCB0aGUga2VybmVsCisweDIxOAl1bnNpZ25lZCBsb25nCUlOSVRSRF9TVEFSVCwgYWRkcmVzcyBvZiBsb2FkZWQgcmFtZGlzayBpbWFnZQorMHgyMWMJdW5zaWduZWQgbG9uZwlJTklUUkRfU0laRSwgc2l6ZSBpbiBieXRlcyBvZiByYW1kaXNrIGltYWdlCisweDIyMAk0IGJ5dGVzCQkoc2V0dXAuUykKKzB4MjI0CXVuc2lnbmVkIHNob3J0CXNldHVwLlMgaGVhcCBlbmQgcG9pbnRlcgorMHgyMjYgICB1bnNpZ25lZCBzaG9ydAl6ZXJvX3BhZAorMHgyMjggICB1bnNpZ25lZCBsb25nCWNtZF9saW5lX3B0cgorMHgyMmMgICB1bnNpZ25lZCBsb25nCXJhbWRpc2tfbWF4CisweDIzMCAgIDE2IGJ5dGVzIAl0cmFtcG9saW5lCisweDI5MCAtIDB4MmNmCQlFRERfTUJSX1NJR19CVUZGRVIgKGVkZC5TKQorMHgyZDAgLSAweDYwMAkJRTgyME1BUAorMHg2MDAgLSAweDdmZgkJRUREQlVGIChlZGQuUykgZm9yIGRpc2sgc2lnbmF0dXJlIHJlYWQgc2VjdG9yCisweDYwMCAtIDB4N2ViCQlFRERCVUYgKGVkZC5TKSBmb3IgZWRkIGRhdGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWE2NC9JUlEtcmVkaXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pYTY0L0lSUS1yZWRpci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiZDcyMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9JUlEtcmVkaXIudHh0CkBAIC0wLDAgKzEsNjkgQEAKK0lSUSBhZmZpbml0eSBvbiBJQTY0IHBsYXRmb3JtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwNy4wMS4yMDAyLCBFcmljaCBGb2NodCA8ZWZvY2h0QGVzcy5uZWMuZGU+CisKKworQnkgd3JpdGluZyB0byAvcHJvYy9pcnEvSVJRIy9zbXBfYWZmaW5pdHkgdGhlIGludGVycnVwdCByb3V0aW5nIGNhbiBiZQorY29udHJvbGxlZC4gVGhlIGJlaGF2aW9yIG9uIElBNjQgcGxhdGZvcm1zIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tCit0aGF0IGRlc2NyaWJlZCBpbiBEb2N1bWVudGF0aW9uL0lSUS1hZmZpbml0eS50eHQgZm9yIGkzODYgc3lzdGVtcy4KKworQmVjYXVzZSBvZiB0aGUgdXNhZ2Ugb2YgU0FQSUMgbW9kZSBhbmQgcGh5c2ljYWwgZGVzdGluYXRpb24gbW9kZSB0aGUKK0lSUSB0YXJnZXQgaXMgb25lIHBhcnRpY3VsYXIgQ1BVIGFuZCBjYW5ub3QgYmUgYSBtYXNrIG9mIHNldmVyYWwKK0NQVXMuIE9ubHkgdGhlIGZpcnN0IG5vbi16ZXJvIGJpdCBpcyB0YWtlbiBpbnRvIGFjY291bnQuCisKKworVXNhZ2UgZXhhbXBsZXM6CisKK1RoZSB0YXJnZXQgQ1BVIGhhcyB0byBiZSBzcGVjaWZpZWQgYXMgYSBoZXhhZGVjaW1hbCBDUFUgbWFzay4gVGhlCitmaXJzdCBub24temVybyBiaXQgaXMgdGhlIHNlbGVjdGVkIENQVS4gVGhpcyBmb3JtYXQgaGFzIGJlZW4ga2VwdCBmb3IKK2NvbXBhdGliaWxpdHkgcmVhc29ucyB3aXRoIGkzODYuCisKK1NldCB0aGUgZGVsaXZlcnkgbW9kZSBvZiBpbnRlcnJ1cHQgNDEgdG8gZml4ZWQgYW5kIHJvdXRlIHRoZQoraW50ZXJydXB0cyB0byBDUFUgIzMgKGxvZ2ljYWwgQ1BVIG51bWJlcikgKDJeMz0weDA4KToKKyAgICAgZWNobyAiOCIgPi9wcm9jL2lycS80MS9zbXBfYWZmaW5pdHkKKworU2V0IHRoZSBkZWZhdWx0IHJvdXRlIGZvciBJUlEgbnVtYmVyIDQxIHRvIENQVSA2IGluIGxvd2VzdCBwcmlvcml0eQorZGVsaXZlcnkgbW9kZSAocmVkaXJlY3RhYmxlKToKKyAgICAgZWNobyAiciA0MCIgPi9wcm9jL2lycS80MS9zbXBfYWZmaW5pdHkKKworVGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZAorICAgICBjYXQgL3Byb2MvaXJxL0lSUSMvc21wX2FmZmluaXR5CitnaXZlcyB0aGUgdGFyZ2V0IENQVSBtYXNrIGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdCB2ZWN0b3IuIElmIHRoZSBDUFUKK21hc2sgaXMgcHJlY2VkZWQgYnkgdGhlIGNoYXJhY3RlciAiciIsIHRoZSBpbnRlcnJ1cHQgaXMgcmVkaXJlY3RhYmxlCisoaS5lLiBsb3dlc3QgcHJpb3JpdHkgbW9kZSByb3V0aW5nIGlzIHVzZWQpLCBvdGhlcndpc2UgaXRzIHJvdXRlIGlzCitmaXhlZC4KKworCisKK0luaXRpYWxpemF0aW9uIGFuZCBkZWZhdWx0IGJlaGF2aW9yOgorCitJZiB0aGUgcGxhdGZvcm0gZmVhdHVyZXMgSVJRIHJlZGlyZWN0aW9uIChpbmZvIHByb3ZpZGVkIGJ5IFNBTCkgYWxsCitJTy1TQVBJQyBpbnRlcnJ1cHRzIGFyZSBpbml0aWFsaXplZCB3aXRoIENQVSMwIGFzIHRoZWlyIGRlZmF1bHQgdGFyZ2V0CithbmQgdGhlIHJvdXRpbmcgaXMgdGhlIHNvIGNhbGxlZCAibG93ZXN0IHByaW9yaXR5IG1vZGUiIChhY3R1YWxseQorZml4ZWQgU0FQSUMgbW9kZSB3aXRoIGhpbnQpLiBUaGUgWFRQIGNoaXBzZXQgcmVnaXN0ZXJzIGFyZSB1c2VkIGFzIGhpbnRzCitmb3IgdGhlIElSUSByb3V0aW5nLiBDdXJyZW50bHkgaW4gTGludXggWFRQIHJlZ2lzdGVycyBjYW4gaGF2ZSB0aHJlZQordmFsdWVzOgorCS0gbWluaW1hbCBmb3IgYW4gaWRsZSB0YXNrLAorCS0gbm9ybWFsIGlmIGFueSBvdGhlciB0YXNrIHJ1bnMsCisJLSBtYXhpbWFsIGlmIHRoZSBDUFUgaXMgZ29pbmcgdG8gYmUgc3dpdGNoZWQgb2ZmLgorVGhlIElSUSBpcyByb3V0ZWQgdG8gdGhlIENQVSB3aXRoIGxvd2VzdCBYVFAgcmVnaXN0ZXIgdmFsdWUsIHRoZQorc2VhcmNoIGJlZ2lucyBhdCB0aGUgZGVmYXVsdCBDUFUuIFRoZXJlZm9yZSBtb3N0IG9mIHRoZSBpbnRlcnJ1cHRzCit3aWxsIGJlIGhhbmRsZWQgYnkgQ1BVICMwLgorCitJZiB0aGUgcGxhdGZvcm0gZG9lc24ndCBmZWF0dXJlIGludGVycnVwdCByZWRpcmVjdGlvbiBJT1NBUElDIGZpeGVkCityb3V0aW5nIGlzIHVzZWQuIFRoZSB0YXJnZXQgQ1BVcyBhcmUgZGlzdHJpYnV0ZWQgaW4gYSByb3VuZCByb2JpbgorbWFubmVyLiBJUlFzIHdpbGwgYmUgcm91dGVkIG9ubHkgdG8gdGhlIHNlbGVjdGVkIHRhcmdldCBDUFVzLiBDaGVjaword2l0aAorICAgICAgICBjYXQgL3Byb2MvaW50ZXJydXB0cworCisKKworQ29tbWVudHM6CisKK09uIGxhcmdlIChtdWx0aS1ub2RlKSBzeXN0ZW1zIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJvdXRlIHRoZSBJUlFzIHRvCit0aGUgbm9kZSB0byB3aGljaCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgaXMgY29ubmVjdGVkLgorRm9yIHN5c3RlbXMgbGlrZSB0aGUgTkVDIEF6dXNBIHdlIGdldCBJUlEgbm9kZS1hZmZpbml0eSBmb3IgZnJlZS4gVGhpcworaXMgYmVjYXVzZSB1c3VhbGx5IHRoZSBjaGlwc2V0cyBvbiBlYWNoIG5vZGUgcmVkaXJlY3QgdGhlIGludGVycnVwdHMKK29ubHkgdG8gdGhlaXIgb3duIENQVXMgKGFzIHRoZXkgY2Fubm90IHNlZSB0aGUgWFRQIHJlZ2lzdGVycyBvbiB0aGUKK290aGVyIG5vZGVzKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYTY0L1JFQURNRSBiL0RvY3VtZW50YXRpb24vaWE2NC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExN2YyMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9SRUFETUUKQEAgLTAsMCArMSw0MyBAQAorICAgICAgICBMaW51eCBrZXJuZWwgcmVsZWFzZSAyLjQueHggZm9yIHRoZSBJQS02NCBQbGF0Zm9ybQorCisgICBUaGVzZSBhcmUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIExpbnV4IHZlcnNpb24gMi40IGZvciBJQS02NAorICAgcGxhdGZvcm0uICBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIElBLTY0CisgICBPTkxZLCB0byBnZXQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgTGludXgga2VybmVsIGFsc28KKyAgIHJlYWQgdGhlIG9yaWdpbmFsIExpbnV4IFJFQURNRSBwcm92aWRlZCB3aXRoIHRoZSBrZXJuZWwuCisKK0lOU1RBTExJTkcgdGhlIGtlcm5lbDoKKworIC0gSUEtNjQga2VybmVsIGluc3RhbGxhdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGUgb3RoZXIgcGxhdGZvcm1zLCBzZWUKKyAgIG9yaWdpbmFsIFJFQURNRSBmb3IgZGV0YWlscy4KKworCitTT0ZUV0FSRSBSRVFVSVJFTUVOVFMKKworICAgQ29tcGlsaW5nIGFuZCBydW5uaW5nIHRoaXMga2VybmVsIHJlcXVpcmVzIGFuIElBLTY0IGNvbXBsaWFudCBHQ0MKKyAgIGNvbXBpbGVyLiAgQW5kIHZhcmlvdXMgc29mdHdhcmUgcGFja2FnZXMgYWxzbyBjb21waWxlZCB3aXRoIGFuCisgICBJQS02NCBjb21wbGlhbnQgR0NDIGNvbXBpbGVyLgorCisKK0NPTkZJR1VSSU5HIHRoZSBrZXJuZWw6CisKKyAgIENvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUsIHNlZSBvcmlnaW5hbCBSRUFETUUgZm9yIGRldGFpbHMuCisKKworQ09NUElMSU5HIHRoZSBrZXJuZWw6CisKKyAtIENvbXBpbGluZyB0aGlzIGtlcm5lbCBkb2Vzbid0IGRpZmZlciBmcm9tIG90aGVyIHBsYXRmb3JtIHNvIHJlYWQKKyAgIHRoZSBvcmlnaW5hbCBSRUFETUUgZm9yIGRldGFpbHMgQlVUIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhbiBJQS02NAorICAgY29tcGxpYW50IEdDQyBjb21waWxlci4KKworSUEtNjQgU1BFQ0lGSUNTCisKKyAtIEdlbmVyYWwgaXNzdWVzOgorCisgICAgbyBIYXJkbHkgYW55IHBlcmZvcm1hbmNlIHR1bmluZyBoYXMgYmVlbiBkb25lLiBPYnZpb3VzIHRhcmdldHMKKyAgICAgIGluY2x1ZGUgdGhlIGxpYnJhcnkgcm91dGluZXMgKElQIGNoZWNrc3VtLCBldGMuKS4gTGVzcworICAgICAgb2J2aW91cyB0YXJnZXRzIGluY2x1ZGUgbWFraW5nIHN1cmUgd2UgZG9uJ3QgZmx1c2ggdGhlIFRMQgorICAgICAgbmVlZGxlc3NseSwgZXRjLgorCisgICAgbyBTTVAgbG9ja3MgY2xlYW51cC9vcHRpbWl6YXRpb24KKworICAgIG8gSUEzMiBzdXBwb3J0LiAgQ3VycmVudGx5IGV4cGVyaW1lbnRhbC4gIEl0IG1vc3RseSB3b3Jrcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWE2NC9lZmlydGMudHh0IGIvRG9jdW1lbnRhdGlvbi9pYTY0L2VmaXJ0Yy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlMmMxZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9lZmlydGMudHh0CkBAIC0wLDAgKzEsMTI4IEBACitFRkkgUmVhbCBUaW1lIENsb2NrIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUy4gRXJhbmlhbiA8ZXJhbmlhbkBocGwuaHAuY29tPgorTWFyY2ggMjAwMAorCitJLyBJbnRyb2R1Y3Rpb24KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGVmaXJ0Yy5jIGRyaXZlciBoYXMgcHJvdmlkZWQgZm9yCit0aGUgSUEtNjQgcGxhdGZvcm0uIAorCitUaGUgcHVycG9zZSBvZiB0aGlzIGRyaXZlciBpcyB0byBzdXBwbHkgYW4gQVBJIGZvciBrZXJuZWwgYW5kIHVzZXIgYXBwbGljYXRpb25zCit0byBnZXQgYWNjZXNzIHRvIHRoZSBUaW1lIFNlcnZpY2Ugb2ZmZXJlZCBieSBFRkkgdmVyc2lvbiAwLjkyLgorCitFRkkgcHJvdmlkZXMgNCBjYWxscyBvbmUgY2FuIG1ha2Ugb25jZSB0aGUgT1MgaXMgYm9vdGVkOiBHZXRUaW1lKCksCitTZXRUaW1lKCksIEdldFdha2V1cFRpbWUoKSwgU2V0V2FrZXVwVGltZSgpIHdoaWNoIGFyZSBhbGwgc3VwcG9ydGVkIGJ5IHRoaXMKK2RyaXZlci4gV2UgZGVzY3JpYmUgdGhvc2UgY2FsbHMgYXMgd2VsbCB0aGUgZGVzaWduIG9mIHRoZSBkcml2ZXIgaW4gdGhlCitmb2xsb3dpbmcgc2VjdGlvbnMuCisKK0lJLyBEZXNpZ24gRGVjaXNpb25zCisKK1RoZSBvcmlnaW5hbCBpZGVhcyB3YXMgdG8gcHJvdmlkZSBhIHZlcnkgc2ltcGxlIGRyaXZlciB0byBnZXQgYWNjZXNzIHRvLCAKK2F0IGZpcnN0LCB0aGUgdGltZSBvZiBkYXkgc2VydmljZS4gVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBhY2Nlc3MsIGluIGEgCitwb3J0YWJsZSB3YXksIHRoZSBDTU9TIGNsb2NrLiBBIHByb2dyYW0gbGlrZSAvc2Jpbi9od2Nsb2NrIHVzZXMgc3VjaCBhIGNsb2NrIAordG8gaW5pdGlhbGl6ZSB0aGUgc3lzdGVtIHZpZXcgb2YgdGhlIHRpbWUgZHVyaW5nIGJvb3QuCisKK0JlY2F1c2Ugd2Ugd2FudGVkIHRvIG1pbmltaXplIHRoZSBpbXBhY3Qgb24gZXhpc3RpbmcgdXNlci1sZXZlbCBhcHBzIHVzaW5nCit0aGUgQ01PUyBjbG9jaywgd2UgZGVjaWRlZCB0byBleHBvc2UgYW4gQVBJIHRoYXQgd2FzIHZlcnkgc2ltaWxhciB0byB0aGUgb25lCit1c2VkIHRvZGF5IHdpdGggdGhlIGxlZ2FjeSBSVEMgZHJpdmVyIChkcml2ZXIvY2hhci9ydGMuYykuIEhvd2V2ZXIsIGJlY2F1c2UgCitFRkkgcHJvdmlkZXMgYSBzaW1wbGVyIHNlcnZpY2VzLCBub3QgYWxsIGFsbCBpb2N0bCgpIGFyZSBhdmFpbGFibGUuIEFsc28KK25ldyBpb2N0bCgpcyBoYXZlIGJlZW4gaW50cm9kdWNlZCBmb3IgdGhpbmdzIHRoYXQgRUZJIHByb3ZpZGVzIGJ1dCBub3QgdGhlIAorbGVnYWN5LgorCitFRkkgdXNlcyBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXkgb2YgcmVwcmVzZW50aW5nIHRoZSB0aW1lLCBub3RpY2VhYmx5Cit0aGUgcmVmZXJlbmNlIGRhdGUgaXMgZGlmZmVyZW50LiBZZWFyIGlzIHRoZSB1c2luZyB0aGUgZnVsbCA0LWRpZ2l0IGZvcm1hdC4KK1RoZSBFcG9jaCBpcyBKYW51YXJ5IDFzdCAxOTk4LiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIHdlIGRvbid0CitleHBvc2UgdGhpcyBuZXcgd2F5IG9mIHJlcHJlc2VudGluZyB0aW1lLiBJbnN0ZWFkIHdlIHVzZSBzb21ldGhpbmcgdmVyeSAKK3NpbWlsYXIgdG8gdGhlIHN0cnVjdCB0bSwgaS5lLiBzdHJ1Y3QgcnRjX3RpbWUsIGFzIHVzZWQgYnkgaHdjbG9jay4KK09uZSBvZiB0aGUgcmVhc29ucyBmb3IgZG9pbmcgaXQgdGhpcyB3YXkgaXMgdG8gYWxsb3cgZm9yIEVGSSB0byBzdGlsbCBldm9sdmUKK3dpdGhvdXQgbmVjZXNzYXJpbHkgaW1wYWN0aW5nIGFueSBvZiB0aGUgdXNlciBhcHBsaWNhdGlvbnMuIFRoZSBkZWNvdXBsaW5nCitlbmFibGVzIGZsZXhpYmlsaXR5IGFuZCBwZXJtaXRzIHdyaXRpbmcgd3JhcHBlciBjb2RlIGlzIG5jYXNlIHRoaW5ncyBjaGFuZ2UuCisKK1RoZSBkcml2ZXIgZXhwb3NlcyB0d28gaW50ZXJmYWNlcywgb25lIHZpYSB0aGUgZGV2aWNlIGZpbGUgYW5kIGEgc2V0IG9mCitpb2N0bCgpcy4gVGhlIG90aGVyIGlzIHJlYWQtb25seSB2aWEgdGhlIC9wcm9jIGZpbGVzeXN0ZW0uIAorCitBcyBvZiB0b2RheSB3ZSBkb24ndCBvZmZlciBhIC9wcm9jL3N5cyBpbnRlcmZhY2UuCisKK1RvIGFsbG93IGZvciBhIHVuaWZvcm0gaW50ZXJmYWNlIGJldHdlZW4gdGhlIGxlZ2FjeSBSVEMgYW5kIEVGSSB0aW1lIHNlcnZpY2UsCit3ZSBoYXZlIGNyZWF0ZWQgdGhlIGluY2x1ZGUvbGludXgvcnRjLmggaGVhZGVyIGZpbGUgdG8gY29udGFpbiBvbmx5IHRoZSAKKyJwdWJsaWMiIEFQSSBvZiB0aGUgdHdvIGRyaXZlcnMuICBUaGUgc3BlY2lmaWNzIG9mIHRoZSBsZWdhY3kgUlRDIGFyZSBzdGlsbCAKK2luIGluY2x1ZGUvbGludXgvbWMxNDY4MThydGMuaC4KKworIAorSUlJLyBUaW1lIG9mIGRheSBzZXJ2aWNlCisKK1RoZSBwYXJ0IG9mIHRoZSBkcml2ZXIgZ2l2ZXMgYWNjZXNzIHRvIHRoZSB0aW1lIG9mIGRheSBzZXJ2aWNlIG9mIEVGSS4KK1R3byBpb2N0bCgpcywgY29tcGF0aWJsZSB3aXRoIHRoZSBsZWdhY3kgUlRDIGNhbGxzOgorCisJUmVhZCB0aGUgQ01PUyBjbG9jazogaW9jdGwoZCwgUlRDX1JEX1RJTUUsICZydGMpOworCisJV3JpdGUgdGhlIENNT1MgY2xvY2s6IGlvY3RsKGQsIFJUQ19TRVRfVElNRSwgJnJ0Yyk7CisKK1RoZSBydGMgaXMgYSBwb2ludGVyIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5lZCBpbiBydGMuaCB3aGljaCBpcyBjbG9zZQordG8gYSBzdHJ1Y3QgdG06CisKK3N0cnVjdCBydGNfdGltZSB7CisgICAgICAgIGludCB0bV9zZWM7CisgICAgICAgIGludCB0bV9taW47CisgICAgICAgIGludCB0bV9ob3VyOworICAgICAgICBpbnQgdG1fbWRheTsKKyAgICAgICAgaW50IHRtX21vbjsKKyAgICAgICAgaW50IHRtX3llYXI7CisgICAgICAgIGludCB0bV93ZGF5OworICAgICAgICBpbnQgdG1feWRheTsKKyAgICAgICAgaW50IHRtX2lzZHN0OworfTsKKworVGhlIGRyaXZlciB0YWtlcyBjYXJlIG9mIGNvbnZlcnRpbmcgYmFjayBhbiBmb3J0aCBiZXR3ZWVuIHRoZSBFRkkgdGltZSBhbmQKK3RoaXMgZm9ybWF0LgorCitUaG9zZSB0d28gaW9jdGwoKXMgY2FuIGJlIGV4ZXJjaXNlZCB3aXRoIHRoZSBod2Nsb2NrIGNvbW1hbmQ6CisKK0ZvciByZWFkaW5nOgorIyAvc2Jpbi9od2Nsb2NrIC0tc2hvdworTW9uIE1hciAgNiAxNTozMjozMiAyMDAwICAtMC45MTAyNDggc2Vjb25kcworCitGb3Igc2V0dGluZzoKKyMgL3NiaW4vaHdjbG9jayAtLXN5c3RvaGMKKworUm9vdCBwcml2aWxlZ2VzIGFyZSByZXF1aXJlZCB0byBiZSBhYmxlIHRvIHNldCB0aGUgdGltZSBvZiBkYXkuCisKK0lWLyBXYWtldXAgQWxhcm0gc2VydmljZQorCitFRkkgcHJvdmlkZXMgYW4gQVBJIGJ5IHdoaWNoIG9uZSBjYW4gcHJvZ3JhbSB3aGVuIGEgbWFjaGluZSBzaG91bGQgd2FrZXVwLAoraS5lLiByZWJvb3QuIFRoaXMgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSB0aGUgYWxhcm0gcHJvdmlkZWQgYnkgdGhlIGxlZ2FjeQorUlRDIHdoaWNoIGlzIHNvbWUga2luZCBvZiBpbnRlcnZhbCB0aW1lciBhbGFybS4gRm9yIHRoaXMgcmVhc29uIHdlIGRvbid0IHVzZQordGhlIHNhbWUgaW9jdGwoKXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgc2VydmljZS4gSW5zdGVhZCB3ZSBoYXZlCitpbnRyb2R1Y2VkIDIgbmV3cyBpb2N0bCgpcyB0byB0aGUgaW50ZXJmYWNlIG9mIGFuIFJUQy4gCisKK1dlIGhhdmUgYWRkZWQgMiBuZXcgaW9jdGwoKXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEVGSSBkcml2ZXI6CisKKwlSZWFkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhbGFybQorCWlvY3RsKGQsIFJUQ19XS0xBTV9SRCwgJndrdCkKKworCVNldCB0aGUgYWxhcm0gb3IgY2hhbmdlIGl0cyBzdGF0dXMKKwlpb2N0bChkLCBSVENfV0tBTE1fU0VULCAmd2t0KQorCitUaGUgd2t0IHN0cnVjdHVyZSBlbmNhcHN1bGF0ZXMgYSBzdHJ1Y3QgcnRjX3RpbWUgKyAyIGV4dHJhIGZpZWxkcyB0byBnZXQgCitzdGF0dXMgaW5mb3JtYXRpb246CisJCitzdHJ1Y3QgcnRjX3drYWxybSB7CisKKyAgICAgICAgdW5zaWduZWQgY2hhciBlbmFibGVkOyAvKiA9MSBpZiBhbGFybSBpcyBlbmFibGVkICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgcGVuZGluZzsgLyogPTEgaWYgYWxhcm0gaXMgcGVuZGluZyAgKi8KKworICAgICAgICBzdHJ1Y3QgcnRjX3RpbWUgdGltZTsKK30gCisKK0FzIG9mIHRvZGF5LCBub25lIG9mIHRoZSBleGlzdGluZyB1c2VyLWxldmVsIGFwcHMgc3VwcG9ydHMgdGhpcyBmZWF0dXJlLgorSG93ZXZlciB3cml0aW5nIHN1Y2ggYSBwcm9ncmFtIHNob3VsZCBiZSBoYXJkIGJ5IHNpbXBseSB1c2luZyB0aG9zZSB0d28gCitpb2N0bCgpLiAKKworUm9vdCBwcml2aWxlZ2VzIGFyZSByZXF1aXJlZCB0byBiZSBhYmxlIHRvIHNldCB0aGUgYWxhcm0uCisKK1YvIFJlZmVyZW5jZXMuCisKK0NoZWNrb3V0IHRoZSBmb2xsb3dpbmcgV2ViIHNpdGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRUZJOgorCitodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS90ZWNobm9sb2d5L2VmaS8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWE2NC9mc3lzLnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC9mc3lzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGRhMTgxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pYTY0L2ZzeXMudHh0CkBAIC0wLDAgKzEsMjg2IEBACistKi1Nb2RlOiBvdXRsaW5lLSotCisKKwkJTGlnaHQtd2VpZ2h0IFN5c3RlbSBDYWxscyBmb3IgSUEtNjQKKwkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgICAgIFN0YXJ0ZWQ6IDEzLUphbi0yMDAzCisJCSAgICBMYXN0IHVwZGF0ZTogMjctU2VwLTIwMDMKKworCSAgICAgICAgICAgICAgRGF2aWQgTW9zYmVyZ2VyLVRhbmcKKwkJICAgICAgPGRhdmlkbUBocGwuaHAuY29tPgorCitVc2luZyB0aGUgImVwYyIgaW5zdHJ1Y3Rpb24gZWZmZWN0aXZlbHkgaW50cm9kdWNlcyBhIG5ldyBtb2RlIG9mCitleGVjdXRpb24gdG8gdGhlIGlhNjQgbGludXgga2VybmVsLiAgV2UgY2FsbCB0aGlzIG1vZGUgdGhlCisiZnN5cy1tb2RlIi4gIFRvIHJlY2FwLCB0aGUgbm9ybWFsIHN0YXRlcyBvZiBleGVjdXRpb24gYXJlOgorCisgIC0ga2VybmVsIG1vZGU6CisJQm90aCB0aGUgcmVnaXN0ZXIgc3RhY2sgYW5kIHRoZSBtZW1vcnkgc3RhY2sgaGF2ZSBiZWVuCisJc3dpdGNoZWQgb3ZlciB0byBrZXJuZWwgbWVtb3J5LiAgVGhlIHVzZXItbGV2ZWwgc3RhdGUgaXMgc2F2ZWQKKwlpbiBhIHB0LXJlZ3Mgc3RydWN0dXJlIGF0IHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBtZW1vcnkgc3RhY2suCisKKyAgLSB1c2VyIG1vZGU6CisJQm90aCB0aGUgcmVnaXN0ZXIgc3RhY2sgYW5kIHRoZSBrZXJuZWwgc3RhY2sgYXJlIGluCisJdXNlciBtZW1vcnkuICBUaGUgdXNlci1sZXZlbCBzdGF0ZSBpcyBjb250YWluZWQgaW4gdGhlCisJQ1BVIHJlZ2lzdGVycy4KKworICAtIGJhbmsgMCBpbnRlcnJ1cHRpb24taGFuZGxpbmcgbW9kZToKKwlUaGlzIGlzIHRoZSBub24taW50ZXJydXB0aWJsZSBzdGF0ZSB3aGljaCBhbGwKKwlpbnRlcnJ1cHRpb24taGFuZGxlcnMgc3RhcnQgZXhlY3V0aW9uIGluLiAgVGhlIHVzZXItbGV2ZWwKKwlzdGF0ZSByZW1haW5zIGluIHRoZSBDUFUgcmVnaXN0ZXJzIGFuZCBzb21lIGtlcm5lbCBzdGF0ZSBtYXkKKwliZSBzdG9yZWQgaW4gYmFuayAwIG9mIHJlZ2lzdGVycyByMTYtcjMxLgorCitJbiBjb250cmFzdCwgZnN5cy1tb2RlIGhhcyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgcHJvcGVydGllczoKKworICAtIGV4ZWN1dGlvbiBpcyBhdCBwcml2aWxlZ2UgbGV2ZWwgMCAobW9zdC1wcml2aWxlZ2VkKQorCisgIC0gQ1BVIHJlZ2lzdGVycyBtYXkgY29udGFpbiBhIG1peHR1cmUgb2YgdXNlci1sZXZlbCBhbmQga2VybmVsLWxldmVsCisgICAgc3RhdGUgKGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUga2VybmVsIHRvIGVuc3VyZSB0aGF0IG5vCisgICAgc2VjdXJpdHktc2Vuc2l0aXZlIGtlcm5lbC1sZXZlbCBzdGF0ZSBpcyBsZWFrZWQgYmFjayB0bworICAgIHVzZXItbGV2ZWwpCisKKyAgLSBleGVjdXRpb24gaXMgaW50ZXJydXB0aWJsZSBhbmQgcHJlZW1wdGlibGUgKGFuIGZzeXMtbW9kZSBoYW5kbGVyCisgICAgY2FuIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgYXZvaWQgYWxsIG90aGVyIGludGVycnVwdGlvbi1zb3VyY2VzCisgICAgdG8gYXZvaWQgcHJlZW1wdGlvbikKKworICAtIG5laXRoZXIgdGhlIG1lbW9yeS1zdGFjayBub3IgdGhlIHJlZ2lzdGVyLXN0YWNrIGNhbiBiZSB0cnVzdGVkIHdoaWxlCisgICAgaW4gZnN5cy1tb2RlICh0aGV5IHBvaW50IHRvIHRoZSB1c2VyLWxldmVsIHN0YWNrcywgd2hpY2ggbWF5CisgICAgYmUgaW52YWxpZCwgb3IgY29tcGxldGVseSBib2d1cyBhZGRyZXNzZXMpCisKK0luIHN1bW1hcnksIGZzeXMtbW9kZSBpcyBtdWNoIG1vcmUgc2ltaWxhciB0byBydW5uaW5nIGluIHVzZXItbW9kZQordGhhbiBpdCBpcyB0byBydW5uaW5nIGluIGtlcm5lbC1tb2RlLiAgT2YgY291cnNlLCBnaXZlbiB0aGF0IHRoZQorcHJpdmlsZWdlIGxldmVsIGlzIGF0IGxldmVsIDAsIHRoaXMgbWVhbnMgdGhhdCBmc3lzLW1vZGUgcmVxdWlyZXMgc29tZQorY2FyZSAoc2VlIGJlbG93KS4KKworCisqIEhvdyB0byB0ZWxsIGZzeXMtbW9kZQorCitMaW51eCBvcGVyYXRlcyBpbiBmc3lzLW1vZGUgd2hlbiAoYSkgdGhlIHByaXZpbGVnZSBsZXZlbCBpcyAwIChtb3N0Citwcml2aWxlZ2VkKSBhbmQgKGIpIHRoZSBzdGFja3MgaGF2ZSBOT1QgYmVlbiBzd2l0Y2hlZCB0byBrZXJuZWwgbWVtb3J5Cit5ZXQuICBGb3IgY29udmVuaWVuY2UsIHRoZSBoZWFkZXIgZmlsZSA8YXNtLWlhNjQvcHRyYWNlLmg+IHByb3ZpZGVzCit0aHJlZSBtYWNyb3M6CisKKwl1c2VyX21vZGUocmVncykKKwl1c2VyX3N0YWNrKHRhc2sscmVncykKKwlmc3lzX21vZGUodGFzayxyZWdzKQorCitUaGUgInJlZ3MiIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIHB0X3JlZ3Mgc3RydWN0dXJlLiAgVGhlICJ0YXNrIgorYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSB0YXNrIHN0cnVjdHVyZSB0byB3aGljaCB0aGUgInJlZ3MiCitwb2ludGVyIGJlbG9uZ3MgdG8uICB1c2VyX21vZGUoKSByZXR1cm5zIFRSVUUgaWYgdGhlIENQVSBzdGF0ZSBwb2ludGVkCit0byBieSAicmVncyIgd2FzIGV4ZWN1dGluZyBpbiB1c2VyIG1vZGUgKHByaXZpbGVnZSBsZXZlbCAzKS4KK3VzZXJfc3RhY2soKSByZXR1cm5zIFRSVUUgaWYgdGhlIHN0YXRlIHBvaW50ZWQgdG8gYnkgInJlZ3MiIHdhcworZXhlY3V0aW5nIG9uIHRoZSB1c2VyLWxldmVsIHN0YWNrKHMpLiAgRmluYWxseSwgZnN5c19tb2RlKCkgcmV0dXJucworVFJVRSBpZiB0aGUgQ1BVIHN0YXRlIHBvaW50ZWQgdG8gYnkgInJlZ3MiIHdhcyBleGVjdXRpbmcgaW4gZnN5cy1tb2RlLgorVGhlIGZzeXNfbW9kZSgpIG1hY3JvIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGV4cHJlc3Npb246CisKKwkhdXNlcl9tb2RlKHJlZ3MpICYmIHVzZXJfc3RhY2sodGFzayxyZWdzKQorCisqIEhvdyB0byB3cml0ZSBhbiBmc3lzY2FsbCBoYW5kbGVyCisKK1RoZSBmaWxlIGFyY2gvaWE2NC9rZXJuZWwvZnN5cy5TIGNvbnRhaW5zIGEgdGFibGUgb2YgZnN5c2NhbGwtaGFuZGxlcnMKKyhmc3lzY2FsbF90YWJsZSkuICBUaGlzIHRhYmxlIGNvbnRhaW5zIG9uZSBlbnRyeSBmb3IgZWFjaCBzeXN0ZW0gY2FsbC4KK0J5IGRlZmF1bHQsIGEgc3lzdGVtIGNhbGwgaXMgaGFuZGxlZCBieSBmc3lzX2ZhbGxiYWNrX3N5c2NhbGwoKS4gIFRoaXMKK3JvdXRpbmUgdGFrZXMgY2FyZSBvZiBlbnRlcmluZyAoZnVsbCkga2VybmVsIG1vZGUgYW5kIGNhbGxpbmcgdGhlCitub3JtYWwgTGludXggc3lzdGVtIGNhbGwgaGFuZGxlci4gIEZvciBwZXJmb3JtYW5jZS1jcml0aWNhbCBzeXN0ZW0KK2NhbGxzLCBpdCBpcyBwb3NzaWJsZSB0byB3cml0ZSBhIGhhbmQtdHVuZWQgZnN5c2NhbGxfaGFuZGxlci4gIEZvcgorZXhhbXBsZSwgZnN5cy5TIGNvbnRhaW5zIGZzeXNfZ2V0cGlkKCksIHdoaWNoIGlzIGEgaGFuZC10dW5lZCB2ZXJzaW9uCitvZiB0aGUgZ2V0cGlkKCkgc3lzdGVtIGNhbGwuCisKK1RoZSBlbnRyeSBhbmQgZXhpdC1zdGF0ZSBvZiBhbiBmc3lzY2FsbCBoYW5kbGVyIGlzIGFzIGZvbGxvd3M6CisKKyoqIE1hY2hpbmUgc3RhdGUgb24gZW50cnkgdG8gZnN5c2NhbGwgaGFuZGxlcjoKKworIC0gcjEwCSAgPSAwCisgLSByMTEJICA9IHNhdmVkIGFyLnBmcyAoYSB1c2VyLWxldmVsIHZhbHVlKQorIC0gcjE1CSAgPSBzeXN0ZW0gY2FsbCBudW1iZXIKKyAtIHIxNgkgID0gImN1cnJlbnQiIHRhc2sgcG9pbnRlciAoaW4gbm9ybWFsIGtlcm5lbC1tb2RlLCB0aGlzIGlzIGluIHIxMykKKyAtIHIzMi1yMzkgPSBzeXN0ZW0gY2FsbCBhcmd1bWVudHMKKyAtIGI2CSAgPSByZXR1cm4gYWRkcmVzcyAoYSB1c2VyLWxldmVsIHZhbHVlKQorIC0gYXIucGZzID0gcHJldmlvdXMgZnJhbWUtc3RhdGUgKGEgdXNlci1sZXZlbCB2YWx1ZSkKKyAtIFBTUi5iZSA9IGNsZWFyZWQgdG8gemVybyAoaS5lLiwgbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyIGlzIGluIGVmZmVjdCkKKyAtIGFsbCBvdGhlciByZWdpc3RlcnMgbWF5IGNvbnRhaW4gdmFsdWVzIHBhc3NlZCBpbiBmcm9tIHVzZXItbW9kZQorCisqKiBSZXF1aXJlZCBtYWNoaW5lIHN0YXRlIG9uIGV4aXQgdG8gZnN5c2NhbGwgaGFuZGxlcjoKKworIC0gcjExCSAgPSBzYXZlZCBhci5wZnMgKGFzIHBhc3NlZCBpbnRvIHRoZSBmc3lzY2FsbCBoYW5kbGVyKQorIC0gcjE1CSAgPSBzeXN0ZW0gY2FsbCBudW1iZXIgKGFzIHBhc3NlZCBpbnRvIHRoZSBmc3lzY2FsbCBoYW5kbGVyKQorIC0gcjMyLXIzOSA9IHN5c3RlbSBjYWxsIGFyZ3VtZW50cyAoYXMgcGFzc2VkIGludG8gdGhlIGZzeXNjYWxsIGhhbmRsZXIpCisgLSBiNgkgID0gcmV0dXJuIGFkZHJlc3MgKGFzIHBhc3NlZCBpbnRvIHRoZSBmc3lzY2FsbCBoYW5kbGVyKQorIC0gYXIucGZzID0gcHJldmlvdXMgZnJhbWUtc3RhdGUgKGFzIHBhc3NlZCBpbnRvIHRoZSBmc3lzY2FsbCBoYW5kbGVyKQorCitGc3lzY2FsbCBoYW5kbGVycyBjYW4gZXhlY3V0ZSB3aXRoIHZlcnkgbGl0dGxlIG92ZXJoZWFkLCBidXQgd2l0aCB0aGF0CitzcGVlZCBjb21lcyBhIHNldCBvZiByZXN0cmljdGlvbnM6CisKKyBvIEZzeXNjYWxsLWhhbmRsZXJzIE1VU1QgY2hlY2sgZm9yIGFueSBwZW5kaW5nIHdvcmsgaW4gdGhlIGZsYWdzCisgICBtZW1iZXIgb2YgdGhlIHRocmVhZC1pbmZvIHN0cnVjdHVyZSBhbmQgaWYgYW55IG9mIHRoZQorICAgVElGX0FMTFdPUktfTUFTSyBmbGFncyBhcmUgc2V0LCB0aGUgaGFuZGxlciBuZWVkcyB0byBmYWxsIGJhY2sgb24KKyAgIGRvaW5nIGEgZnVsbCBzeXN0ZW0gY2FsbCAoYnkgY2FsbGluZyBmc3lzX2ZhbGxiYWNrX3N5c2NhbGwpLgorCisgbyBGc3lzY2FsbC1oYW5kbGVycyBNVVNUIHByZXNlcnZlIGluY29taW5nIGFyZ3VtZW50cyAocjMyLXIzOSwgcjExLAorICAgcjE1LCBiNiwgYW5kIGFyLnBmcykgYmVjYXVzZSB0aGV5IHdpbGwgYmUgbmVlZGVkIGluIGNhc2Ugb2YgYQorICAgc3lzdGVtIGNhbGwgcmVzdGFydC4gIE9mIGNvdXJzZSwgYWxsICJwcmVzZXJ2ZWQiIHJlZ2lzdGVycyBhbHNvCisgICBtdXN0IGJlIHByZXNlcnZlZCwgaW4gYWNjb3JkYW5jZSB0byB0aGUgbm9ybWFsIGNhbGxpbmcgY29udmVudGlvbnMuCisKKyBvIEZzeXNjYWxsLWhhbmRsZXJzIE1VU1QgY2hlY2sgYXJndW1lbnQgcmVnaXN0ZXJzIGZvciBjb250YWluaW5nIGEKKyAgIE5hVCB2YWx1ZSBiZWZvcmUgdXNpbmcgdGhlbSBpbiBhbnkgd2F5IHRoYXQgY291bGQgdHJpZ2dlciBhCisgICBOYVQtY29uc3VtcHRpb24gZmF1bHQuICBJZiBhIHN5c3RlbSBjYWxsIGFyZ3VtZW50IGlzIGZvdW5kIHRvCisgICBjb250YWluIGEgTmFUIHZhbHVlLCBhbiBmc3lzY2FsbC1oYW5kbGVyIG1heSByZXR1cm4gaW1tZWRpYXRlbHkKKyAgIHdpdGggcjg9RUlOVkFMLCByMTA9LTEuCisKKyBvIEZzeXNjYWxsLWhhbmRsZXJzIE1VU1QgTk9UIHVzZSB0aGUgImFsbG9jIiBpbnN0cnVjdGlvbiBvciBwZXJmb3JtCisgICBhbnkgb3RoZXIgb3BlcmF0aW9uIHRoYXQgd291bGQgdHJpZ2dlciBtYW5kYXRvcnkgUlNFCisgICAocmVnaXN0ZXItc3RhY2sgZW5naW5lKSB0cmFmZmljLgorCisgbyBGc3lzY2FsbC1oYW5kbGVycyBNVVNUIE5PVCB3cml0ZSB0byBhbnkgc3RhY2tlZCByZWdpc3RlcnMgYmVjYXVzZQorICAgaXQgaXMgbm90IHNhZmUgdG8gYXNzdW1lIHRoYXQgdXNlci1sZXZlbCBjYWxsZWQgYSBoYW5kbGVyIHdpdGggdGhlCisgICBwcm9wZXIgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKworIG8gRnN5c2NhbGwtaGFuZGxlcnMgbmVlZCB0byBiZSBjYXJlZnVsIHdoZW4gYWNjZXNzaW5nIHBlci1DUFUgdmFyaWFibGVzOgorICAgdW5sZXNzIHByb3BlciBzYWZlLWd1YXJkcyBhcmUgdGFrZW4gKGUuZy4sIGludGVycnVwdGlvbnMgYXJlIGF2b2lkZWQpLAorICAgZXhlY3V0aW9uIG1heSBiZSBwcmUtZW1wdGVkIGFuZCByZXN1bWVkIG9uIGFub3RoZXIgQ1BVIGF0IGFueSBnaXZlbgorICAgdGltZS4KKworIG8gRnN5c2NhbGwtaGFuZGxlcnMgbXVzdCBiZSBjYXJlZnVsIG5vdCB0byBsZWFrIHNlbnNpdGl2ZSBrZXJuZWwnCisgICBpbmZvcm1hdGlvbiBiYWNrIHRvIHVzZXItbGV2ZWwuICBJbiBwYXJ0aWN1bGFyLCBiZWZvcmUgcmV0dXJuaW5nIHRvCisgICB1c2VyLWxldmVsLCBjYXJlIG5lZWRzIHRvIGJlIHRha2VuIHRvIGNsZWFyIGFueSBzY3JhdGNoIHJlZ2lzdGVycworICAgdGhhdCBjb3VsZCBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiAobm90ZSB0aGF0IHRoZSBjdXJyZW50CisgICB0YXNrIHBvaW50ZXIgaXMgbm90IGNvbnNpZGVyZWQgc2Vuc2l0aXZlOiBpdCdzIGFscmVhZHkgZXhwb3NlZAorICAgdGhyb3VnaCBhci5rNikuCisKKyBvIEZzeXNjYWxsLWhhbmRsZXJzIE1VU1QgTk9UIGFjY2VzcyB1c2VyLW1lbW9yeSB3aXRob3V0IGZpcnN0CisgICB2YWxpZGF0aW5nIGFjY2Vzcy1wZXJtaXNzaW9uICh0aGlzIGNhbiBiZSBkb25lIHR5cGljYWxseSB2aWEKKyAgIHByb2JlLnIuZmF1bHQgYW5kL29yIHByb2JlLncuZmF1bHQpIGFuZCB3aXRob3V0IGd1YXJkaW5nIGFnYWluc3QKKyAgIG1lbW9yeSBhY2Nlc3MgZXhjZXB0aW9ucyAodGhpcyBjYW4gYmUgZG9uZSB3aXRoIHRoZSBFWCgpIG1hY3JvcworICAgZGVmaW5lZCBieSBhc21tYWNyby5oKS4KKworVGhlIGFib3ZlIHJlc3RyaWN0aW9ucyBtYXkgc2VlbSBkcmFjb25pYW4sIGJ1dCByZW1lbWJlciB0aGF0IGl0J3MKK3Bvc3NpYmxlIHRvIHRyYWRlIG9mZiBzb21lIG9mIHRoZSByZXN0cmljdGlvbnMgYnkgcGF5aW5nIGEgc2xpZ2h0bHkKK2hpZ2hlciBvdmVyaGVhZC4gIEZvciBleGFtcGxlLCBpZiBhbiBmc3lzY2FsbC1oYW5kbGVyIGNvdWxkIGJlbmVmaXQKK2Zyb20gdGhlIHNoYWRvdyByZWdpc3RlciBiYW5rLCBpdCBjb3VsZCB0ZW1wb3JhcmlseSBkaXNhYmxlIFBTUi5pIGFuZAorUFNSLmljLCBzd2l0Y2ggdG8gYmFuayAwIChic3cuMCkgYW5kIHRoZW4gdXNlIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGFzCituZWVkZWQuICBJbiBvdGhlciB3b3JkcywgZm9sbG93aW5nIHRoZSBhYm92ZSBydWxlcyB5aWVsZHMgZXh0cmVtZWx5CitmYXN0IHN5c3RlbSBjYWxsIGV4ZWN1dGlvbiAod2hpbGUgZnVsbHkgcHJlc2VydmluZyBzeXN0ZW0gY2FsbAorc2VtYW50aWNzKSwgYnV0IHRoZXJlIGlzIGFsc28gYSBsb3Qgb2YgZmxleGliaWxpdHkgaW4gaGFuZGxpbmcgbW9yZQorY29tcGxpY2F0ZWQgY2FzZXMuCisKKyogU2lnbmFsIGhhbmRsaW5nCisKK1RoZSBkZWxpdmVyeSBvZiAoYXN5bmNocm9ub3VzKSBzaWduYWxzIG11c3QgYmUgZGVsYXllZCB1bnRpbCBmc3lzLW1vZGUKK2lzIGV4aXRlZC4gIFRoaXMgaXMgYWNvbXBsaXNoZWQgd2l0aCB0aGUgaGVscCBvZiB0aGUgbG93ZXItcHJpdmlsZWdlCit0cmFuc2ZlciB0cmFwOiBhcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYzpkb19ub3RpZnlfcmVzdW1lX3VzZXIoKQorY2hlY2tzIHdoZXRoZXIgdGhlIGludGVycnVwdGVkIHRhc2sgd2FzIGluIGZzeXMtbW9kZSBhbmQsIGlmIHNvLCBzZXRzCitQU1IubHAgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBXaGVuIGZzeXMtbW9kZSBpcyBleGl0ZWQgdmlhIHRoZQorImJyLnJldCIgaW5zdHJ1Y3Rpb24gdGhhdCBsb3dlcnMgdGhlIHByaXZpbGVnZSBsZXZlbCwgYSB0cmFwIHdpbGwKK29jY3VyLiAgVGhlIHRyYXAgaGFuZGxlciBjbGVhcnMgUFNSLmxwIGFnYWluIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LgorVGhlIGtlcm5lbCBleGl0IHBhdGggdGhlbiBjaGVja3MgZm9yIGFuZCBkZWxpdmVycyBhbnkgcGVuZGluZyBzaWduYWxzLgorCisqIFBTUiBIYW5kbGluZworCitUaGUgImVwYyIgaW5zdHJ1Y3Rpb24gZG9lc24ndCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIFBTUiBhdCBhbGwuICBUaGlzCitpcyBpbiBjb250cmFzdCB0byBhIHJlZ3VsYXIgaW50ZXJydXB0aW9uLCB3aGljaCBjbGVhcnMgYWxtb3N0IGFsbAorYml0cy4gIEJlY2F1c2Ugb2YgdGhhdCwgc29tZSBjYXJlIG5lZWRzIHRvIGJlIHRha2VuIHRvIGVuc3VyZSB0aGluZ3MKK3dvcmsgYXMgZXhwZWN0ZWQuICBUaGUgZm9sbG93aW5nIGRpc2N1c3Npb24gZGVzY3JpYmVzIGhvdyBlYWNoIFBTUiBiaXQKK2lzIGhhbmRsZWQuCisKK1BTUi5iZQlDbGVhcmVkIHdoZW4gZW50ZXJpbmcgZnN5cy1tb2RlLiAgQSBzcmx6LmQgaW5zdHJ1Y3Rpb24gaXMgdXNlZAorCXRvIGVuc3VyZSB0aGUgQ1BVIGlzIGluIGxpdHRsZS1lbmRpYW4gbW9kZSBiZWZvcmUgdGhlIGZpcnN0CisJbG9hZC9zdG9yZSBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZC4gIFBTUi5iZSBpcyBub3JtYWxseSBOT1QKKwlyZXN0b3JlZCB1cG9uIHJldHVybiBmcm9tIGFuIGZzeXMtbW9kZSBoYW5kbGVyLiAgSW4gb3RoZXIKKwl3b3JkcywgdXNlci1sZXZlbCBjb2RlIG11c3Qgbm90IHJlbHkgb24gUFNSLmJlIGJlaW5nIHByZXNlcnZlZAorCWFjcm9zcyBhIHN5c3RlbSBjYWxsLgorUFNSLnVwCVVuY2hhbmdlZC4KK1BTUi5hYwlVbmNoYW5nZWQuCitQU1IubWZsIFVuY2hhbmdlZC4gIE5vdGU6IGZzeXMtbW9kZSBoYW5kbGVycyBtdXN0IG5vdCB3cml0ZS1yZWdpc3RlcnMhCitQU1IubWZoCVVuY2hhbmdlZC4gIE5vdGU6IGZzeXMtbW9kZSBoYW5kbGVycyBtdXN0IG5vdCB3cml0ZS1yZWdpc3RlcnMhCitQU1IuaWMJVW5jaGFuZ2VkLiAgTm90ZTogZnN5cy1tb2RlIGhhbmRsZXJzIGNhbiBjbGVhciB0aGUgYml0LCBpZiBuZWVkZWQuCitQU1IuaQlVbmNoYW5nZWQuICBOb3RlOiBmc3lzLW1vZGUgaGFuZGxlcnMgY2FuIGNsZWFyIHRoZSBiaXQsIGlmIG5lZWRlZC4KK1BTUi5wawlVbmNoYW5nZWQuCitQU1IuZHQJVW5jaGFuZ2VkLgorUFNSLmRmbAlVbmNoYW5nZWQuICBOb3RlOiBmc3lzLW1vZGUgaGFuZGxlcnMgbXVzdCBub3Qgd3JpdGUtcmVnaXN0ZXJzIQorUFNSLmRmaAlVbmNoYW5nZWQuICBOb3RlOiBmc3lzLW1vZGUgaGFuZGxlcnMgbXVzdCBub3Qgd3JpdGUtcmVnaXN0ZXJzIQorUFNSLnNwCVVuY2hhbmdlZC4KK1BTUi5wcAlVbmNoYW5nZWQuCitQU1IuZGkJVW5jaGFuZ2VkLgorUFNSLnNpCVVuY2hhbmdlZC4KK1BTUi5kYglVbmNoYW5nZWQuICBUaGUga2VybmVsIHByZXZlbnRzIHVzZXItbGV2ZWwgZnJvbSBzZXR0aW5nIGEgaGFyZHdhcmUKKwlicmVha3BvaW50IHRoYXQgdHJpZ2dlcnMgYXQgYW55IHByaXZpbGVnZSBsZXZlbCBvdGhlciB0aGFuIDMgKHVzZXItbW9kZSkuCitQU1IubHAJVW5jaGFuZ2VkLgorUFNSLnRiCUxhenkgcmVkaXJlY3QuICBJZiBhIHRha2VuLWJyYW5jaCB0cmFwIG9jY3VycyB3aGlsZSBpbgorCWZzeXMtbW9kZSwgdGhlIHRyYXAtaGFuZGxlciBtb2RpZmllcyB0aGUgc2F2ZWQgbWFjaGluZSBzdGF0ZQorCXN1Y2ggdGhhdCBleGVjdXRpb24gcmVzdW1lcyBpbiB0aGUgZ2F0ZSBwYWdlIGF0CisJc3lzY2FsbF92aWFfYnJlYWsoKSwgd2l0aCBwcml2aWxlZ2UgbGV2ZWwgMy4gIE5vdGU6IHRoZQorCXRha2VuIGJyYW5jaCB3b3VsZCBvY2N1ciBvbiB0aGUgYnJhbmNoIGludm9raW5nIHRoZQorCWZzeXNjYWxsLWhhbmRsZXIsIGF0IHdoaWNoIHBvaW50LCBieSBkZWZpbml0aW9uLCBhIHN5c2NhbGwKKwlyZXN0YXJ0IGlzIHN0aWxsIHNhZmUuICBJZiB0aGUgc3lzdGVtIGNhbGwgbnVtYmVyIGlzIGludmFsaWQsCisJdGhlIGZzeXMtbW9kZSBoYW5kbGVyIHdpbGwgcmV0dXJuIGRpcmVjdGx5IHRvIHVzZXItbGV2ZWwuICBUaGlzCisJcmV0dXJuIHdpbGwgdHJpZ2dlciBhIHRha2VuLWJyYW5jaCB0cmFwLCBidXQgc2luY2UgdGhlIHRyYXAgaXMKKwl0YWtlbiBfYWZ0ZXJfIHJlc3RvcmluZyB0aGUgcHJpdmlsZWdlIGxldmVsLCB0aGUgQ1BVIGhhcyBhbHJlYWR5CisJbGVmdCBmc3lzLW1vZGUsIHNvIG5vIHNwZWNpYWwgdHJlYXRtZW50IGlzIG5lZWRlZC4KK1BTUi5ydAlVbmNoYW5nZWQuCitQU1IuY3BsCUNsZWFyZWQgdG8gMC4KK1BTUi5pcwlVbmNoYW5nZWQgKGd1YXJhbnRlZWQgdG8gYmUgMCBvbiBlbnRyeSB0byB0aGUgZ2F0ZSBwYWdlKS4KK1BTUi5tYwlVbmNoYW5nZWQuCitQU1IuaXQJVW5jaGFuZ2VkIChndWFyYW50ZWVkIHRvIGJlIDEpLgorUFNSLmlkCVVuY2hhbmdlZC4gIE5vdGU6IHRoZSBpYTY0IGxpbnV4IGtlcm5lbCBuZXZlciBzZXRzIHRoaXMgYml0LgorUFNSLmRhCVVuY2hhbmdlZC4gIE5vdGU6IHRoZSBpYTY0IGxpbnV4IGtlcm5lbCBuZXZlciBzZXRzIHRoaXMgYml0LgorUFNSLmRkCVVuY2hhbmdlZC4gIE5vdGU6IHRoZSBpYTY0IGxpbnV4IGtlcm5lbCBuZXZlciBzZXRzIHRoaXMgYml0LgorUFNSLnNzCUxhenkgcmVkaXJlY3QuICBJZiBzZXQsICJlcGMiIHdpbGwgY2F1c2UgYSBTaW5nbGUgU3RlcCBUcmFwIHRvCisJYmUgdGFrZW4uICBUaGUgdHJhcCBoYW5kbGVyIHRoZW4gbW9kaWZpZXMgdGhlIHNhdmVkIG1hY2hpbmUKKwlzdGF0ZSBzdWNoIHRoYXQgZXhlY3V0aW9uIHJlc3VtZXMgaW4gdGhlIGdhdGUgcGFnZSBhdAorCXN5c2NhbGxfdmlhX2JyZWFrKCksIHdpdGggcHJpdmlsZWdlIGxldmVsIDMuCitQU1IucmkJVW5jaGFuZ2VkLgorUFNSLmVkCVVuY2hhbmdlZC4gIE5vdGU6IFRoaXMgYml0IGNvdWxkIG9ubHkgaGF2ZSBhbiBlZmZlY3QgaWYgYW4gZnN5cy1tb2RlCisJaGFuZGxlciBwZXJmb3JtZWQgYSBzcGVjdWxhdGl2ZSBsb2FkIHRoYXQgZ2V0cyBOYVR0ZWQuICBJZiBzbywgdGhpcworCXdvdWxkIGJlIHRoZSBub3JtYWwgJiBleHBlY3RlZCBiZWhhdmlvciwgc28gbm8gc3BlY2lhbCB0cmVhdG1lbnQgaXMKKwluZWVkZWQuCitQU1IuYm4JVW5jaGFuZ2VkLiAgTm90ZTogZnN5cy1tb2RlIGhhbmRsZXJzIG1heSBjbGVhciB0aGUgYml0LCBpZiBuZWVkZWQuCisJRG9pbmcgc28gcmVxdWlyZXMgY2xlYXJpbmcgUFNSLmkgYW5kIFBTUi5pYyBhcyB3ZWxsLgorUFNSLmlhCVVuY2hhbmdlZC4gIE5vdGU6IHRoZSBpYTY0IGxpbnV4IGtlcm5lbCBuZXZlciBzZXRzIHRoaXMgYml0LgorCisqIFVzaW5nIGZhc3Qgc3lzdGVtIGNhbGxzCisKK1RvIHVzZSBmYXN0IHN5c3RlbSBjYWxscywgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBuZWVkIHNpbXBseSBjYWxsCitfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMoKS4gIEZvciBleGFtcGxlCisKKy0tIGV4YW1wbGUgZmdldHRpbWVvZmRheSgpIGNhbGwgLS0KKy0tIGZnZXR0aW1lb2ZkYXkuUyAtLQorCisjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CisKK0dMT0JBTF9FTlRSWShmZ2V0dGltZW9mZGF5KQorLnByb2xvZ3VlCisuc2F2ZSBhci5wZnMsIHIxMQorbW92IHIxMSA9IGFyLnBmcworLmJvZHkgCisKK21vdiByMiA9IDB4YTAwMDAwMDAwMDAyMDY2MDs7ICAvLyBnYXRlIGFkZHJlc3MgCisJCQkgICAgICAgLy8gZm91bmQgYnkgaW5zcGVjdGlvbiBvZiBTeXN0ZW0ubWFwIGZvciB0aGUgCisJCQkgICAgICAgLy8gX19rZXJuZWxfc3lzY2FsbF92aWFfZXBjKCkgZnVuY3Rpb24uICBTZWUKKwkJCSAgICAgICAvLyBiZWxvdyBmb3IgaG93IHRvIGRvIHRoaXMgZm9yIHJlYWwuCisKK21vdiBiNyA9IHIyCittb3YgcjE1ID0gMTA4NwkJICAgICAgIC8vIGdldHRpbWVvZmRheSBzeXNjYWxsCis7OworYnIuY2FsbC5zcHRrLm1hbnkgYjYgPSBiNworOzsKKworLnJlc3RvcmUgc3AKKworbW92IGFyLnBmcyA9IHIxMQorYnIucmV0LnNwdGsubWFueSBycDs7CSAgICAgIC8vIHJldHVybiB0byBjYWxsZXIKK0VORChmZ2V0dGltZW9mZGF5KQorCistLSBlbmQgZmdldHRpbWVvZmRheS5TIC0tCisKK0luIHJlYWxpdHksIGdldHRpbmcgdGhlIGdhdGUgYWRkcmVzcyBpcyBhY2NvbXBsaXNoZWQgYnkgdHdvIGV4dHJhCit2YWx1ZXMgcGFzc2VkIHZpYSB0aGUgRUxGIGF1eGlsaWFyeSB2ZWN0b3IgKGluY2x1ZGUvYXNtLWlhNjQvZWxmLmgpCisKKyBvIEFUX1NZU0lORk8gOiBpcyB0aGUgYWRkcmVzcyBvZiBfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMoKQorIG8gQVRfU1lTSU5GT19FSERSIDogaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGtlcm5lbCBnYXRlIEVMRiBEU08KKworVGhlIEVMRiBEU08gaXMgYSBwcmUtbGlua2VkIGxpYnJhcnkgdGhhdCBpcyBtYXBwZWQgaW4gYnkgdGhlIGtlcm5lbCBhdAordGhlIGdhdGUgcGFnZS4gIEl0IGlzIGEgcHJvcGVyIEVMRiBzaGFyZWQgb2JqZWN0IHNvLCB3aXRoIGEgZHluYW1pYworbG9hZGVyIHRoYXQgcmVjb2duaXNlcyB0aGUgbGlicmFyeSwgeW91IHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgY2FsbHMgdG8KK3RoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGl0IGFzIHdpdGggYW55IG90aGVyIHNoYXJlZCBsaWJyYXJ5LgorQVRfU1lTSU5GTyBwb2ludHMgaW50byB0aGUga2VybmVsIERTTyBhdCB0aGUKK19fa2VybmVsX3N5c2NhbGxfdmlhX2VwYygpIGZ1bmN0aW9uIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgKGl0IHdhcwordXNlZCBiZWZvcmUgdGhlIGtlcm5lbCBEU08pIGFuZCBhcyBhIGNvbnZlbmllbmNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYTY0L3NlcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2lhNjQvc2VyaWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTFlYjRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pYTY0L3NlcmlhbC50eHQKQEAgLTAsMCArMSwxNDQgQEAKK1NFUklBTCBERVZJQ0UgTkFNSU5HCisKKyAgICBBcyBvZiAyLjYuMTAsIHNlcmlhbCBkZXZpY2VzIG9uIGlhNjQgYXJlIG5hbWVkIGJhc2VkIG9uIHRoZQorICAgIG9yZGVyIG9mIEFDUEkgYW5kIFBDSSBlbnVtZXJhdGlvbi4gIFRoZSBmaXJzdCBkZXZpY2UgaW4gdGhlCisgICAgQUNQSSBuYW1lc3BhY2UgKGlmIGFueSkgYmVjb21lcyAvZGV2L3R0eVMwLCB0aGUgc2Vjb25kIGJlY29tZXMKKyAgICAvZGV2L3R0eVMxLCBldGMuLCBhbmQgUENJIGRldmljZXMgYXJlIG5hbWVkIHNlcXVlbnRpYWxseQorICAgIHN0YXJ0aW5nIGFmdGVyIHRoZSBBQ1BJIGRldmljZXMuCisKKyAgICBQcmlvciB0byAyLjYuMTAsIHRoZXJlIHdlcmUgY29uZnVzaW5nIGV4Y2VwdGlvbnMgdG8gdGhpczoKKworCS0gRmlybXdhcmUgb24gc29tZSBtYWNoaW5lcyAobW9zdGx5IGZyb20gSFApIHByb3ZpZGVzIGFuIEhDRFAKKwkgIHRhYmxlWzFdIHRoYXQgdGVsbHMgdGhlIGtlcm5lbCBhYm91dCBkZXZpY2VzIHRoYXQgY2FuIGJlIHVzZWQKKwkgIGFzIGEgc2VyaWFsIGNvbnNvbGUuICBJZiB0aGUgdXNlciBzcGVjaWZpZWQgImNvbnNvbGU9dHR5UzAiCisJICBvciB0aGUgRUZJIENvbk91dCBwYXRoIGNvbnRhaW5lZCBvbmx5IFVBUlQgZGV2aWNlcywgdGhlCisJICBrZXJuZWwgcmVnaXN0ZXJlZCB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSB0aGUgSENEUCBhcworCSAgL2Rldi90dHlTMC4KKworCS0gSWYgdGhlcmUgd2FzIG5vIEhDRFAsIHdlIGFzc3VtZWQgdGhlcmUgd2VyZSBVQVJUcyBhdCB0aGUKKwkgIGxlZ2FjeSBDT00gcG9ydCBhZGRyZXNzZXMgKEkvTyBwb3J0cyAweDNmOCBhbmQgMHgyZjgpLCBzbworCSAgdGhlIGtlcm5lbCByZWdpc3RlcmVkIHRob3NlIGFzIC9kZXYvdHR5UzAgYW5kIC9kZXYvdHR5UzEuCisKKyAgICBBbnkgYWRkaXRpb25hbCBBQ1BJIG9yIFBDSSBkZXZpY2VzIHdlcmUgcmVnaXN0ZXJlZCBzZXF1ZW50aWFsbHkKKyAgICBhZnRlciAvZGV2L3R0eVMwIGFzIHRoZXkgd2VyZSBkaXNjb3ZlcmVkLgorCisgICAgV2l0aCBhbiBIQ0RQLCBkZXZpY2UgbmFtZXMgY2hhbmdlZCBkZXBlbmRpbmcgb24gRUZJIGNvbmZpZ3VyYXRpb24KKyAgICBhbmQgImNvbnNvbGU9IiBhcmd1bWVudHMuICBXaXRob3V0IGFuIEhDRFAsIGRldmljZSBuYW1lcyBkaWRuJ3QKKyAgICBjaGFuZ2UsIGJ1dCB3ZSByZWdpc3RlcmVkIGRldmljZXMgdGhhdCBtaWdodCBub3QgcmVhbGx5IGV4aXN0LgorCisgICAgRm9yIGV4YW1wbGUsIGFuIEhQIHJ4MTYwMCB3aXRoIGEgc2luZ2xlIGJ1aWx0LWluIHNlcmlhbCBwb3J0CisgICAgKGRlc2NyaWJlZCBpbiB0aGUgQUNQSSBuYW1lc3BhY2UpIHBsdXMgYW4gTVBbMl0gKGEgUENJIGRldmljZSkgaGFzCisgICAgdGhlc2UgcG9ydHM6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmUtMi42LjEwICAgICAgcHJlLTIuNi4xMAorICAgICAgICAgICAgICAgICAgICBNTUlPICAgICAgICAgKEVGSSBjb25zb2xlICAgIChFRkkgY29uc29sZQorICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgICAgICAgIG9uIGJ1aWx0aW4pICAgICBvbiBNUCBwb3J0KSAgICAyLjYuMTAKKyAgICAgICAgICAgICAgICAgID09PT09PT09PT0gICAgICA9PT09PT09PT09ICAgICAgPT09PT09PT09PSAgICAgPT09PT09CisgICAgICBidWlsdGluICAgICAweGZmNWUwMDAwICAgICAgICB0dHlTMCAgICAgICAgICAgdHR5UzEgICAgICAgICB0dHlTMAorICAgICAgTVAgVVBTICAgICAgMHhmODAzMTAwMCAgICAgICAgdHR5UzEgICAgICAgICAgIHR0eVMyICAgICAgICAgdHR5UzEKKyAgICAgIE1QIENvbnNvbGUgIDB4ZjgwMzAwMDAgICAgICAgIHR0eVMyICAgICAgICAgICB0dHlTMCAgICAgICAgIHR0eVMyCisgICAgICBNUCAyICAgICAgICAweGY4MDMwMDEwICAgICAgICB0dHlTMyAgICAgICAgICAgdHR5UzMgICAgICAgICB0dHlTMworICAgICAgTVAgMyAgICAgICAgMHhmODAzMDAzOCAgICAgICAgdHR5UzQgICAgICAgICAgIHR0eVM0ICAgICAgICAgdHR5UzQKKworQ09OU09MRSBTRUxFQ1RJT04KKworICAgIEVGSSBrbm93cyB3aGF0IHlvdXIgY29uc29sZSBkZXZpY2VzIGFyZSwgYnV0IGl0IGRvZXNuJ3QgdGVsbCB0aGUKKyAgICBrZXJuZWwgcXVpdGUgZW5vdWdoIHRvIGFjdHVhbGx5IGxvY2F0ZSB0aGVtLiAgVGhlIERJRzY0IEhDRFAKKyAgICB0YWJsZVsxXSBkb2VzIHRlbGwgdGhlIGtlcm5lbCB3aGVyZSBwb3RlbnRpYWwgc2VyaWFsIGNvbnNvbGUKKyAgICBkZXZpY2VzIGFyZSwgYnV0IG5vdCBhbGwgZmlybXdhcmUgc3VwcGxpZXMgaXQuICBBbHNvLCBFRkkgc3VwcG9ydHMKKyAgICBtdWx0aXBsZSBzaW11bHRhbmVvdXMgY29uc29sZXMgYW5kIGRvZXNuJ3QgdGVsbCB0aGUga2VybmVsIHdoaWNoCisgICAgc2hvdWxkIGJlIHRoZSAicHJpbWFyeSIgb25lLgorCisgICAgU28gaG93IGRvIHlvdSB0ZWxsIExpbnV4IHdoaWNoIGNvbnNvbGUgZGV2aWNlIHRvIHVzZT8KKworCS0gSWYgeW91ciBmaXJtd2FyZSBzdXBwbGllcyB0aGUgSENEUCwgaXQgaXMgc2ltcGxlc3QgdG8KKwkgIGNvbmZpZ3VyZSBFRkkgd2l0aCBhIHNpbmdsZSBkZXZpY2UgKGVpdGhlciBhIFVBUlQgb3IgYSBWR0EKKwkgIGNhcmQpIGFzIHRoZSBjb25zb2xlLiAgVGhlbiB5b3UgZG9uJ3QgbmVlZCB0byB0ZWxsIExpbnV4CisJICBhbnl0aGluZzsgdGhlIGtlcm5lbCB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBFRkkgY29uc29sZS4KKworCSAgKFRoaXMgd29ya3Mgb25seSBpbiAyLjYuNiBvciBsYXRlcjsgcHJpb3IgdG8gdGhhdCB5b3UgaGFkCisJICB0byBzcGVjaWZ5ICJjb25zb2xlPXR0eVMwIiB0byBnZXQgYSBzZXJpYWwgY29uc29sZS4pCisKKwktIFdpdGhvdXQgYW4gSENEUCwgTGludXggZGVmYXVsdHMgdG8gYSBWR0EgY29uc29sZSB1bmxlc3MgeW91CisJICBzcGVjaWZ5IGEgImNvbnNvbGU9IiBhcmd1bWVudC4KKworICAgIE5PVEU6IERvbid0IGFzc3VtZSB0aGF0IGEgc2VyaWFsIGNvbnNvbGUgZGV2aWNlIHdpbGwgYmUgL2Rldi90dHlTMC4KKyAgICBJdCBtaWdodCBiZSB0dHlTMSwgdHR5UzIsIGV0Yy4gIE1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUKKyAgICBlbnRyaWVzIGluIC9ldGMvaW5pdHRhYiAoZm9yIGdldHR5KSBhbmQgL2V0Yy9zZWN1cmV0dHkgKHRvIGFsbG93CisgICAgcm9vdCBsb2dpbikuCisKK0VBUkxZIFNFUklBTCBDT05TT0xFCisKKyAgICBUaGUga2VybmVsIGNhbid0IHN0YXJ0IHVzaW5nIGEgc2VyaWFsIGNvbnNvbGUgdW50aWwgaXQga25vd3Mgd2hlcmUKKyAgICB0aGUgZGV2aWNlIGxpdmVzLiAgTm9ybWFsbHkgdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlciBlbnVtZXJhdGVzCisgICAgYWxsIHRoZSBzZXJpYWwgZGV2aWNlcywgd2hpY2ggY2FuIGhhcHBlbiBhIG1pbnV0ZSBvciBtb3JlIGFmdGVyIHRoZQorICAgIGtlcm5lbCBzdGFydHMgYm9vdGluZy4KKworICAgIDIuNi4xMCBhbmQgbGF0ZXIga2VybmVscyBoYXZlIGFuICJlYXJseSB1YXJ0IiBkcml2ZXIgdGhhdCB3b3JrcworICAgIHZlcnkgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gIFRoZSBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZQorICAgIHRoaXMgaWYgdGhlIHVzZXIgc3VwcGxpZXMgYW4gYXJndW1lbnQgbGlrZSAiY29uc29sZT11YXJ0LGlvLDB4M2Y4IiwKKyAgICBvciBpZiB0aGUgRUZJIGNvbnNvbGUgcGF0aCBjb250YWlucyBvbmx5IGEgVUFSVCBkZXZpY2UgYW5kIHRoZQorICAgIGZpcm13YXJlIHN1cHBsaWVzIGFuIEhDRFAuCisKK1RST1VCTEVTSE9PVElORyBTRVJJQUwgQ09OU09MRSBQUk9CTEVNUworCisgICAgTm8ga2VybmVsIG91dHB1dCBhZnRlciBlbGlsbyBwcmludHMgIlVuY29tcHJlc3NpbmcgTGludXguLi4gZG9uZSI6CisKKwktIFlvdSBzcGVjaWZpZWQgImNvbnNvbGU9dHR5UzAiIGJ1dCBMaW51eCBjaGFuZ2VkIHRoZSBkZXZpY2UKKwkgIHRvIHdoaWNoIHR0eVMwIHJlZmVycy4gIENvbmZpZ3VyZSBleGFjdGx5IG9uZSBFRkkgY29uc29sZQorCSAgZGV2aWNlWzNdIGFuZCByZW1vdmUgdGhlICJjb25zb2xlPSIgb3B0aW9uLgorCisJLSBUaGUgRUZJIGNvbnNvbGUgcGF0aCBjb250YWlucyBib3RoIGEgVkdBIGRldmljZSBhbmQgYSBVQVJULgorCSAgRUZJIGFuZCBlbGlsbyB1c2UgYm90aCwgYnV0IExpbnV4IGRlZmF1bHRzIHRvIFZHQS4gIFJlbW92ZQorCSAgdGhlIFZHQSBkZXZpY2UgZnJvbSB0aGUgRUZJIGNvbnNvbGUgcGF0aFszXS4KKworCS0gTXVsdGlwbGUgVUFSVHMgc2VsZWN0ZWQgYXMgRUZJIGNvbnNvbGUgZGV2aWNlcy4gIEVGSSBhbmQKKwkgIGVsaWxvIHVzZSBhbGwgc2VsZWN0ZWQgZGV2aWNlcywgYnV0IExpbnV4IHVzZXMgb25seSBvbmUuCisJICBNYWtlIHN1cmUgb25seSBvbmUgVUFSVCBpcyBzZWxlY3RlZCBpbiB0aGUgRUZJIGNvbnNvbGUKKwkgIHBhdGhbM10uCisKKwktIFlvdSdyZSBjb25uZWN0ZWQgdG8gYW4gSFAgTVAgcG9ydFsyXSBidXQgaGF2ZSBhIG5vbi1NUCBVQVJUCisJICBzZWxlY3RlZCBhcyBFRkkgY29uc29sZSBkZXZpY2UuICBFRkkgdXNlcyB0aGUgTVAgYXMgYQorCSAgY29uc29sZSBkZXZpY2UgZXZlbiB3aGVuIGl0IGlzbid0IGV4cGxpY2l0bHkgc2VsZWN0ZWQuCisJICBFaXRoZXIgbW92ZSB0aGUgY29uc29sZSBjYWJsZSB0byB0aGUgbm9uLU1QIFVBUlQsIG9yIGNoYW5nZQorCSAgdGhlIEVGSSBjb25zb2xlIHBhdGhbM10gdG8gdGhlIE1QIFVBUlQuCisKKyAgICBMb25nIHBhdXNlICg2MCsgc2Vjb25kcykgYmV0d2VlbiAiVW5jb21wcmVzc2luZyBMaW51eC4uLiBkb25lIiBhbmQKKyAgICBzdGFydCBvZiBrZXJuZWwgb3V0cHV0OgorCisJLSBObyBlYXJseSBjb25zb2xlIGJlY2F1c2UgeW91IHVzZWQgImNvbnNvbGU9dHR5UzxuPiIuICBSZW1vdmUKKwkgIHRoZSAiY29uc29sZT0iIG9wdGlvbiBpZiB5b3VyIGZpcm13YXJlIHN1cHBsaWVzIGFuIEhDRFAuCisKKwktIElmIHlvdSBkb24ndCBoYXZlIGFuIEhDRFAsIHRoZSBrZXJuZWwgZG9lc24ndCBrbm93IHdoZXJlCisJICB5b3VyIGNvbnNvbGUgbGl2ZXMgdW50aWwgdGhlIGRyaXZlciBkaXNjb3ZlcnMgc2VyaWFsCisJICBkZXZpY2VzLiAgVXNlICJjb25zb2xlPXVhcnQsIGlvLDB4M2Y4IiAob3IgYXBwcm9wcmlhdGUKKwkgIGFkZHJlc3MgZm9yIHlvdXIgbWFjaGluZSkuCisKKyAgICBLZXJuZWwgYW5kIGluaXQgc2NyaXB0IG91dHB1dCB3b3JrcyBmaW5lLCBidXQgbm8gImxvZ2luOiIgcHJvbXB0OgorCisJLSBBZGQgZ2V0dHkgZW50cnkgdG8gL2V0Yy9pbml0dGFiIGZvciBjb25zb2xlIHR0eS4gIExvb2sgZm9yCisJICB0aGUgIkFkZGluZyBjb25zb2xlIG9uIHR0eVM8bj4iIG1lc3NhZ2UgdGhhdCB0ZWxscyB5b3Ugd2hpY2gKKwkgIGRldmljZSBpcyB0aGUgY29uc29sZS4KKworICAgICJsb2dpbjoiIHByb21wdCwgYnV0IGNhbid0IGxvZ2luIGFzIHJvb3Q6CisKKwktIEFkZCBlbnRyeSB0byAvZXRjL3NlY3VyZXR0eSBmb3IgY29uc29sZSB0dHkuCisKKworCitbMV0gaHR0cDovL3d3dy5kaWc2NC5vcmcvc3BlY2lmaWNhdGlvbnMvRElHNjRfUENEUHYyMC5wZGYKKyAgICBUaGUgdGFibGUgd2FzIG9yaWdpbmFsbHkgZGVmaW5lZCBhcyB0aGUgIkhDRFAiIGZvciAiSGVhZGxlc3MKKyAgICBDb25zb2xlL0RlYnVnIFBvcnQuIiAgVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyB0aGUgIlBDRFAiIGZvcgorICAgICJQcmltYXJ5IENvbnNvbGUgYW5kIERlYnVnIFBvcnQgRGV2aWNlcy4iCisKK1syXSBUaGUgSFAgTVAgKG1hbmFnZW1lbnQgcHJvY2Vzc29yKSBpcyBhIFBDSSBkZXZpY2UgdGhhdCBwcm92aWRlcworICAgIHNldmVyYWwgVUFSVHMuICBPbmUgb2YgdGhlIFVBUlRzIGlzIG9mdGVuIHVzZWQgYXMgYSBjb25zb2xlOyB0aGUKKyAgICBFRkkgQm9vdCBNYW5hZ2VyIGlkZW50aWZpZXMgaXQgYXMgIkFjcGkoSFdQMDAwMiw3MDApL1BjaSguLi4pL1VhcnQiLgorICAgIFRoZSBleHRlcm5hbCBjb25uZWN0aW9uIGlzIHVzdWFsbHkgYSAyNS1waW4gY29ubmVjdG9yLCBhbmQgYQorICAgIHNwZWNpYWwgZG9uZ2xlIGNvbnZlcnRzIHRoYXQgdG8gdGhyZWUgOS1waW4gY29ubmVjdG9ycywgb25lIG9mCisgICAgd2hpY2ggaXMgbGFiZWxsZWQgIkNvbnNvbGUuIgorCitbM10gRUZJIGNvbnNvbGUgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB1c2luZyB0aGUgRUZJIEJvb3QgTWFuYWdlcgorICAgICJCb290IG9wdGlvbiBtYWludGVuYW5jZSIgbWVudS4gIFlvdSBtYXkgaGF2ZSB0byBpbnRlcnJ1cHQgdGhlCisgICAgYm9vdCBzZXF1ZW5jZSB0byB1c2UgdGhpcyBtZW51LCBhbmQgeW91IHdpbGwgaGF2ZSB0byByZXNldCB0aGUKKyAgICBib3ggYWZ0ZXIgY2hhbmdpbmcgY29uc29sZSBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYm0tYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2libS1hY3BpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDM3YjFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pYm0tYWNwaS50eHQKQEAgLTAsMCArMSw0NzQgQEAKKwkJICAgIElCTSBUaGlua1BhZCBBQ1BJIEV4dHJhcyBEcml2ZXIKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMC44CisgICAgICAgICAgICAgICAgICAgICAgICAgIDggTm92ZW1iZXIgMjAwNAorCisgICAgICAgICAgICAgICBCb3Jpc2xhdiBEZWlhbm92IDxib3Jpc2xhdkB1c2Vycy5zZi5uZXQ+CisJCSAgICAgIGh0dHA6Ly9pYm0tYWNwaS5zZi5uZXQvCisKKworVGhpcyBpcyBhIExpbnV4IEFDUEkgZHJpdmVyIGZvciB0aGUgSUJNIFRoaW5rUGFkIGxhcHRvcHMuIEl0IGFpbXMgdG8KK3N1cHBvcnQgdmFyaW91cyBmZWF0dXJlcyBvZiB0aGVzZSBsYXB0b3BzIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2gKK3RoZSBBQ1BJIGZyYW1ld29yayBidXQgbm90IG90aGVyd2lzZSBzdXBwb3J0ZWQgYnkgdGhlIGdlbmVyaWMgTGludXgKK0FDUEkgZHJpdmVycy4KKworCitTdGF0dXMKKy0tLS0tLQorCitUaGUgZmVhdHVyZXMgY3VycmVudGx5IHN1cHBvcnRlZCBhcmUgdGhlIGZvbGxvd2luZyAoc2VlIGJlbG93IGZvcgorZGV0YWlsZWQgZGVzY3JpcHRpb24pOgorCisJLSBGbiBrZXkgY29tYmluYXRpb25zCisJLSBCbHVldG9vdGggZW5hYmxlIGFuZCBkaXNhYmxlCisJLSB2aWRlbyBvdXRwdXQgc3dpdGNoaW5nLCBleHBhbnNpb24gY29udHJvbAkKKwktIFRoaW5rTGlnaHQgb24gYW5kIG9mZgorCS0gbGltaXRlZCBkb2NraW5nIGFuZCB1bmRvY2tpbmcKKwktIFVsdHJhQmF5IGVqZWN0CisJLSBFeHBlcmltZW50YWw6IENNT1MgY29udHJvbAorCS0gRXhwZXJpbWVudGFsOiBMRUQgY29udHJvbAorCS0gRXhwZXJpbWVudGFsOiBBQ1BJIHNvdW5kcworCitBIGNvbXBhdGliaWxpdHkgdGFibGUgYnkgbW9kZWwgYW5kIGZlYXR1cmUgaXMgbWFpbnRhaW5lZCBvbiB0aGUgd2ViCitzaXRlLCBodHRwOi8vaWJtLWFjcGkuc2YubmV0Ly4gSSBhcHByZWNpYXRlIGFueSBzdWNjZXNzIG9yIGZhaWx1cmUKK3JlcG9ydHMsIGVzcGVjaWFsbHkgaWYgdGhleSBhZGQgdG8gb3IgY29ycmVjdCB0aGUgY29tcGF0aWJpbGl0eSB0YWJsZS4KK1BsZWFzZSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaW4geW91ciByZXBvcnQ6CisKKwktIFRoaW5rUGFkIG1vZGVsIG5hbWUKKwktIGEgY29weSBvZiB5b3VyIERTRFQsIGZyb20gL3Byb2MvYWNwaS9kc2R0CisJLSB3aGljaCBkcml2ZXIgZmVhdHVyZXMgd29yayBhbmQgd2hpY2ggZG9uJ3QKKwktIHRoZSBvYnNlcnZlZCBiZWhhdmlvciBvZiBub24td29ya2luZyBmZWF0dXJlcworCitBbnkgb3RoZXIgY29tbWVudHMgb3IgcGF0Y2hlcyBhcmUgYWxzbyBtb3JlIHRoYW4gd2VsY29tZS4KKworCitJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLQorCitJZiB5b3UgYXJlIGNvbXBpbGluZyB0aGlzIGRyaXZlciBhcyBpbmNsdWRlZCBpbiB0aGUgTGludXgga2VybmVsCitzb3VyY2VzLCBzaW1wbHkgZW5hYmxlIHRoZSBDT05GSUdfQUNQSV9JQk0gb3B0aW9uIChQb3dlciBNYW5hZ2VtZW50IC8KK0FDUEkgLyBJQk0gVGhpbmtQYWQgTGFwdG9wIEV4dHJhcykuIFRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMKK2hvdyB0byBpbnN0YWxsIHRoaXMgZHJpdmVyIHdoZW4gZG93bmxvYWRlZCBmcm9tIHRoZSB3ZWIgc2l0ZS4KKworRmlyc3QsIHlvdSBuZWVkIHRvIGdldCBhIGtlcm5lbCB3aXRoIEFDUEkgc3VwcG9ydCB1cCBhbmQgcnVubmluZy4KK1BsZWFzZSByZWZlciB0byBodHRwOi8vYWNwaS5zb3VyY2Vmb3JnZS5uZXQvIGZvciBoZWxwIHdpdGggdGhpcworc3RlcC4gSG93IHN1Y2Nlc3NmdWwgeW91IHdpbGwgYmUgZGVwZW5kcyBhIGxvdCBvbiB5b3UgVGhpbmtQYWQgbW9kZWwsCit0aGUga2VybmVsIHlvdSBhcmUgdXNpbmcgYW5kIGFueSBhZGRpdGlvbmFsIHBhdGNoZXMgYXBwbGllZC4gVGhlCitrZXJuZWwgcHJvdmlkZWQgd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbiBtYXkgbm90IGJlIGdvb2QgZW5vdWdoLiBJCituZWVkZWQgdG8gY29tcGlsZSBhIDIuNi43IGtlcm5lbCB3aXRoIHRoZSAyMDA0MDcxNSBBQ1BJIHBhdGNoIHRvIGdldAorQUNQSSB3b3JraW5nIHJlbGlhYmx5IG9uIG15IFRoaW5rUGFkIFg0MC4gT2xkIFRoaW5rUGFkIG1vZGVscyBtYXkgbm90CitiZSBzdXBwb3J0ZWQgYXQgYWxsLgorCitBc3N1bWluZyB5b3UgaGF2ZSB0aGUgYmFzaWMgQUNQSSBzdXBwb3J0IHdvcmtpbmcgKGUuZy4geW91IGNhbiBzZWUgdGhlCisvcHJvYy9hY3BpIGRpcmVjdG9yeSksIGZvbGxvdyB0aGUgZm9sbG93aW5nIHN0ZXBzIHRvIGluc3RhbGwgdGhpcworZHJpdmVyOgorCisJLSB1bnBhY2sgdGhlIGFyY2hpdmU6CisKKwkJdGFyIHh6dmYgaWJtLWFjcGkteC55LnRhci5nejsgY2QgaWJtLWFjcGkteC55CisKKwktIGNvbXBpbGUgdGhlIGRyaXZlcjoKKworCQltYWtlCisKKwktIGluc3RhbGwgdGhlIG1vZHVsZSBpbiB5b3VyIGtlcm5lbCBtb2R1bGVzIGRpcmVjdG9yeToKKworCQltYWtlIGluc3RhbGwKKworCS0gbG9hZCB0aGUgbW9kdWxlOgorCisJCW1vZHByb2JlIGlibV9hY3BpCisKK0FmdGVyIGxvYWRpbmcgdGhlIG1vZHVsZSwgY2hlY2sgdGhlICJkbWVzZyIgb3V0cHV0IGZvciBhbnkgZXJyb3IgbWVzc2FnZXMuCisKKworRmVhdHVyZXMKKy0tLS0tLS0tCisKK1RoZSBkcml2ZXIgY3JlYXRlcyB0aGUgL3Byb2MvYWNwaS9pYm0gZGlyZWN0b3J5LiBUaGVyZSBpcyBhIGZpbGUgdW5kZXIKK3RoYXQgZGlyZWN0b3J5IGZvciBlYWNoIGZlYXR1cmUgZGVzY3JpYmVkIGJlbG93LiBOb3RlIHRoYXQgd2hpbGUgdGhlCitkcml2ZXIgaXMgc3RpbGwgaW4gdGhlIGFscGhhIHN0YWdlLCB0aGUgZXhhY3QgcHJvYyBmaWxlIGZvcm1hdCBhbmQKK2NvbW1hbmRzIHN1cHBvcnRlZCBieSB0aGUgdmFyaW91cyBmZWF0dXJlcyBpcyBndWFyYW50ZWVkIHRvIGNoYW5nZQorZnJlcXVlbnRseS4KKworRHJpdmVyIFZlcnNpb24gLS0gL3Byb2MvYWNwaS9pYm0vZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIG5hbWUgYW5kIHZlcnNpb24uIE5vIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHRvIHRoaXMgZmlsZS4KKworSG90IEtleXMgLS0gL3Byb2MvYWNwaS9pYm0vaG90a2V5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aG91dCB0aGlzIGRyaXZlciwgb25seSB0aGUgRm4tRjQga2V5IChzbGVlcCBidXR0b24pIGdlbmVyYXRlcyBhbgorQUNQSSBldmVudC4gV2l0aCB0aGUgZHJpdmVyIGxvYWRlZCwgdGhlIGhvdGtleSBmZWF0dXJlIGVuYWJsZWQgYW5kIHRoZQorbWFzayBzZXQgKHNlZSBiZWxvdyksIHRoZSB2YXJpb3VzIGhvdCBrZXlzIGdlbmVyYXRlIEFDUEkgZXZlbnRzIGluIHRoZQorZm9sbG93aW5nIGZvcm1hdDoKKworCWlibS9ob3RrZXkgSEtFWSAwMDAwMDA4MCAwMDAweHh4eAorCitUaGUgbGFzdCBmb3VyIGRpZ2l0cyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUga2V5IGNvbWJpbmF0aW9uIHByZXNzZWQuCitBbGwgbGFiZWxlZCBGbi1GeCBrZXkgY29tYmluYXRpb25zIGdlbmVyYXRlIGRpc3RpbmN0IGV2ZW50cy4gSW4KK2FkZGl0aW9uLCB0aGUgbGlkIG1pY3Jvc3dpdGNoIGFuZCBzb21lIGRvY2tpbmcgc3RhdGlvbiBidXR0b25zIG1heQorYWxzbyBnZW5lcmF0ZSBzdWNoIGV2ZW50cy4KKworVGhlIGZvbGxvd2luZyBjb21tYW5kcyBjYW4gYmUgd3JpdHRlbiB0byB0aGlzIGZpbGU6CisKKwllY2hvIGVuYWJsZSA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSBlbmFibGUgdGhlIGhvdCBrZXlzIGZlYXR1cmUKKwllY2hvIGRpc2FibGUgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gZGlzYWJsZSB0aGUgaG90IGtleXMgZmVhdHVyZQorCWVjaG8gMHhmZmZmID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIGVuYWJsZSBhbGwgcG9zc2libGUgaG90IGtleXMKKwllY2hvIDB4MDAwMCA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSBkaXNhYmxlIGFsbCBwb3NzaWJsZSBob3Qga2V5cworCS4uLiBhbnkgb3RoZXIgNC1oZXgtZGlnaXQgbWFzayAuLi4KKwllY2hvIHJlc2V0ID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIHJlc3RvcmUgdGhlIG9yaWdpbmFsIG1hc2sKKworVGhlIGJpdCBtYXNrIGFsbG93cyBzb21lIGNvbnRyb2wgb3ZlciB3aGljaCBob3Qga2V5cyBnZW5lcmF0ZSBBQ1BJCitldmVudHMuIE5vdCBhbGwgYml0cyBpbiB0aGUgbWFzayBjYW4gYmUgbW9kaWZpZWQuIE5vdCBhbGwgYml0cyB0aGF0CitjYW4gYmUgbW9kaWZpZWQgZG8gYW55dGhpbmcuIE5vdCBhbGwgaG90IGtleXMgY2FuIGJlIGluZGl2aWR1YWxseQorY29udHJvbGxlZCBieSB0aGUgbWFzay4gTW9zdCByZWNlbnQgVGhpbmtQYWQgbW9kZWxzIGhvbm9yIHRoZQorZm9sbG93aW5nIGJpdHMgKGFzc3VtaW5nIHRoZSBob3Qga2V5cyBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQpOgorCisJa2V5CWJpdAliZWhhdmlvciB3aGVuIHNldAliZWhhdmlvciB3aGVuIHVuc2V0CisKKwlGbi1GMwkJCWFsd2F5cyBnZW5lcmF0ZXMgQUNQSSBldmVudAorCUZuLUY0CQkJYWx3YXlzIGdlbmVyYXRlcyBBQ1BJIGV2ZW50CisJRm4tRjUJMDAxMAlnZW5lcmF0ZSBBQ1BJIGV2ZW50CWVuYWJsZS9kaXNhYmxlIEJsdWV0b290aAorCUZuLUY3CTAwNDAJZ2VuZXJhdGUgQUNQSSBldmVudAlzd2l0Y2ggTENEIGFuZCBleHRlcm5hbCBkaXNwbGF5CisJRm4tRjgJMDA4MAlnZW5lcmF0ZSBBQ1BJIGV2ZW50CWV4cGFuZCBzY3JlZW4gb3Igbm9uZQorCUZuLUY5CTAxMDAJZ2VuZXJhdGUgQUNQSSBldmVudAlub25lCisJRm4tRjEyCQkJYWx3YXlzIGdlbmVyYXRlcyBBQ1BJIGV2ZW50CisKK1NvbWUgbW9kZWxzIGRvIG5vdCBzdXBwb3J0IGFsbCBvZiB0aGUgYWJvdmUuIEZvciBleGFtcGxlLCB0aGUgVDMwIGRvZXMKK25vdCBzdXBwb3J0IEZuLUY1IGFuZCBGbi1GOS4gT3RoZXIgbW9kZWxzIGRvIG5vdCBzdXBwb3J0IHRoZSBtYXNrIGF0CithbGwuIE9uIHRob3NlIG1vZGVscywgaG90IGtleXMgY2Fubm90IGJlIGNvbnRyb2xsZWQgaW5kaXZpZHVhbGx5LgorCitOb3RlIHRoYXQgZW5hYmxpbmcgQUNQSSBldmVudHMgZm9yIHNvbWUga2V5cyBwcmV2ZW50cyB0aGVpciBkZWZhdWx0CitiZWhhdmlvci4gRm9yIGV4YW1wbGUsIGlmIGV2ZW50cyBmb3IgRm4tRjUgYXJlIGVuYWJsZWQsIHRoYXQga2V5IHdpbGwKK25vIGxvbmdlciBlbmFibGUvZGlzYWJsZSBCbHVldG9vdGggYnkgaXRzZWxmLiBUaGlzIGNhbiBzdGlsbCBiZSBkb25lCitmcm9tIGFuIGFjcGlkIGhhbmRsZXIgZm9yIHRoZSBpYm0vaG90a2V5IGV2ZW50LgorCitOb3RlIGFsc28gdGhhdCBub3QgYWxsIEZuIGtleSBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoCitBQ1BJLiBGb3IgZXhhbXBsZSwgb24gdGhlIFg0MCwgdGhlIGJyaWdodG5lc3MsIHZvbHVtZSBhbmQgIkFjY2VzcyBJQk0iCitidXR0b25zIGRvIG5vdCBnZW5lcmF0ZSBBQ1BJIGV2ZW50cyBldmVuIHdpdGggdGhpcyBkcml2ZXIuIFRoZXkgKmNhbioKK2JlIHVzZWQgdGhyb3VnaCB0aGUgIlRoaW5rUGFkIEJ1dHRvbnMiIHV0aWxpdHksIHNlZQoraHR0cDovL3d3dy5ub25nbnUub3JnL3RwYi8KKworQmx1ZXRvb3RoIC0tIC9wcm9jL2FjcGkvaWJtL2JsdWV0b290aAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZlYXR1cmUgc2hvd3MgdGhlIHByZXNlbmNlIGFuZCBjdXJyZW50IHN0YXRlIG9mIGEgQmx1ZXRvb3RoCitkZXZpY2UuIElmIEJsdWV0b290aCBpcyBpbnN0YWxsZWQsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2FuIGJlIHVzZWQ6CisKKwllY2hvIGVuYWJsZSA+IC9wcm9jL2FjcGkvaWJtL2JsdWV0b290aAorCWVjaG8gZGlzYWJsZSA+IC9wcm9jL2FjcGkvaWJtL2JsdWV0b290aAorCitWaWRlbyBvdXRwdXQgY29udHJvbCAtLSAvcHJvYy9hY3BpL2libS92aWRlbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmZWF0dXJlIGFsbG93cyBjb250cm9sIG92ZXIgdGhlIGRldmljZXMgdXNlZCBmb3IgdmlkZW8gb3V0cHV0IC0KK0xDRCwgQ1JUIG9yIERWSSAoaWYgYXZhaWxhYmxlKS4gVGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgYXZhaWxhYmxlOgorCisJZWNobyBsY2RfZW5hYmxlID4gL3Byb2MvYWNwaS9pYm0vdmlkZW8KKwllY2hvIGxjZF9kaXNhYmxlID4gL3Byb2MvYWNwaS9pYm0vdmlkZW8KKwllY2hvIGNydF9lbmFibGUgPiAvcHJvYy9hY3BpL2libS92aWRlbworCWVjaG8gY3J0X2Rpc2FibGUgPiAvcHJvYy9hY3BpL2libS92aWRlbworCWVjaG8gZHZpX2VuYWJsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisJZWNobyBkdmlfZGlzYWJsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisJZWNobyBhdXRvX2VuYWJsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisJZWNobyBhdXRvX2Rpc2FibGUgPiAvcHJvYy9hY3BpL2libS92aWRlbworCWVjaG8gZXhwYW5kX3RvZ2dsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisJZWNobyB2aWRlb19zd2l0Y2ggPiAvcHJvYy9hY3BpL2libS92aWRlbworCitFYWNoIHZpZGVvIG91dHB1dCBkZXZpY2UgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW5kaXZpZHVhbGx5LgorUmVhZGluZyAvcHJvYy9hY3BpL2libS92aWRlbyBzaG93cyB0aGUgc3RhdHVzIG9mIGVhY2ggZGV2aWNlLgorCitBdXRvbWF0aWMgdmlkZW8gc3dpdGNoaW5nIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiAgV2hlbiBhdXRvbWF0aWMKK3ZpZGVvIHN3aXRjaGluZyBpcyBlbmFibGVkLCBjZXJ0YWluIGV2ZW50cyAoZS5nLiBvcGVuaW5nIHRoZSBsaWQsCitkb2NraW5nIG9yIHVuZG9ja2luZykgY2F1c2UgdGhlIHZpZGVvIG91dHB1dCBkZXZpY2UgdG8gY2hhbmdlCithdXRvbWF0aWNhbGx5LiBXaGlsZSB0aGlzIGNhbiBiZSB1c2VmdWwsIGl0IGFsc28gY2F1c2VzIGZsaWNrZXJpbmcKK2FuZCwgb24gdGhlIFg0MCwgdmlkZW8gY29ycnVwdGlvbi4gQnkgZGlzYWJsaW5nIGF1dG9tYXRpYyBzd2l0Y2hpbmcsCit0aGUgZmxpY2tlcmluZyBvciB2aWRlbyBjb3JydXB0aW9uIGNhbiBiZSBhdm9pZGVkLgorCitUaGUgdmlkZW9fc3dpdGNoIGNvbW1hbmQgY3ljbGVzIHRocm91Z2ggdGhlIGF2YWlsYWJsZSB2aWRlbyBvdXRwdXRzCisoaXQgc3VtdWxhdGVzIHRoZSBiZWhhdmlvciBvZiBGbi1GNykuCisKK1ZpZGVvIGV4cGFuc2lvbiBjYW4gYmUgdG9nZ2xlZCB0aHJvdWdoIHRoaXMgZmVhdHVyZS4gVGhpcyBjb250cm9scword2hldGhlciB0aGUgZGlzcGxheSBpcyBleHBhbmRlZCB0byBmaWxsIHRoZSBlbnRpcmUgTENEIHNjcmVlbiB3aGVuIGEKK21vZGUgd2l0aCBsZXNzIHRoYW4gZnVsbCByZXNvbHV0aW9uIGlzIHVzZWQuIE5vdGUgdGhhdCB0aGUgY3VycmVudAordmlkZW8gZXhwYW5zaW9uIHN0YXR1cyBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB0aHJvdWdoIHRoaXMgZmVhdHVyZS4KKworTm90ZSB0aGF0IG9uIG1hbnkgbW9kZWxzIChwYXJ0aWN1bGFybHkgdGhvc2UgdXNpbmcgUmFkZW9uIGdyYXBoaWNzCitjaGlwcykgdGhlIFggZHJpdmVyIGNvbmZpZ3VyZXMgdGhlIHZpZGVvIGNhcmQgaW4gYSB3YXkgd2hpY2ggcHJldmVudHMKK0ZuLUY3IGZyb20gd29ya2luZy4gVGhpcyBhbHNvIGRpc2FibGVzIHRoZSB2aWRlbyBvdXRwdXQgc3dpdGNoaW5nCitmZWF0dXJlcyBvZiB0aGlzIGRyaXZlciwgYXMgaXQgdXNlcyB0aGUgc2FtZSBBQ1BJIG1ldGhvZHMgYXMKK0ZuLUY3LiBWaWRlbyBzd2l0Y2hpbmcgb24gdGhlIGNvbnNvbGUgc2hvdWxkIHN0aWxsIHdvcmsuCisKK1RoaW5rTGlnaHQgY29udHJvbCAtLSAvcHJvYy9hY3BpL2libS9saWdodAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgVGhpbmtMaWdodCBjYW4gYmUgZm91bmQgaW4gdGhpcyBmaWxlLiBBIGZldworbW9kZWxzIHdoaWNoIGRvIG5vdCBtYWtlIHRoZSBzdGF0dXMgYXZhaWxhYmxlIHdpbGwgc2hvdyBpdCBhcworInVua25vd24iLiBUaGUgYXZhaWxhYmxlIGNvbW1hbmRzIGFyZToKKworCWVjaG8gb24gID4gL3Byb2MvYWNwaS9pYm0vbGlnaHQKKwllY2hvIG9mZiA+IC9wcm9jL2FjcGkvaWJtL2xpZ2h0CisKK0RvY2tpbmcgLyBVbmRvY2tpbmcgLS0gL3Byb2MvYWNwaS9pYm0vZG9jaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RvY2tpbmcgYW5kIHVuZG9ja2luZyAoZS5nLiB3aXRoIHRoZSBYNCBVbHRyYUJhc2UpIHJlcXVpcmVzIHNvbWUKK2FjdGlvbnMgdG8gYmUgdGFrZW4gYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gc2FmZWx5IG1ha2Ugb3IgYnJlYWsKK3RoZSBlbGVjdHJpY2FsIGNvbm5lY3Rpb25zIHdpdGggdGhlIGRvY2suCisKK1RoZSBkb2NraW5nIGZlYXR1cmUgb2YgdGhpcyBkcml2ZXIgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgQUNQSSBldmVudHM6CisKKwlpYm0vZG9jayBHRENLIDAwMDAwMDAzIDAwMDAwMDAxIC0tIGVqZWN0IHJlcXVlc3QKKwlpYm0vZG9jayBHRENLIDAwMDAwMDAzIDAwMDAwMDAyIC0tIHVuZG9ja2VkCisJaWJtL2RvY2sgR0RDSyAwMDAwMDAwMCAwMDAwMDAwMyAtLSBkb2NrZWQKKworTk9URTogVGhlc2UgZXZlbnRzIHdpbGwgb25seSBiZSBnZW5lcmF0ZWQgaWYgdGhlIGxhcHRvcCB3YXMgZG9ja2VkCit3aGVuIG9yaWdpbmFsbHkgYm9vdGVkLiBUaGlzIGlzIGR1ZSB0byB0aGUgY3VycmVudCBsYWNrIG9mIHN1cHBvcnQgZm9yCitob3QgcGx1Z2dpbmcgb2YgZGV2aWNlcyBpbiB0aGUgTGludXggQUNQSSBmcmFtZXdvcmsuIElmIHRoZSBsYXB0b3Agd2FzCitib290ZWQgd2hpbGUgbm90IGluIHRoZSBkb2NrLCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgaXMgc2hvd24gaW4gdGhlCitsb2dzOiAiaWJtX2FjcGk6IGRvY2sgZGV2aWNlIG5vdCBwcmVzZW50Ii4gTm8gZG9jay1yZWxhdGVkIGV2ZW50cyBhcmUKK2dlbmVyYXRlZCBidXQgdGhlIGRvY2sgYW5kIHVuZG9jayBjb21tYW5kcyBkZXNjcmliZWQgYmVsb3cgc3RpbGwKK3dvcmsuIFRoZXkgY2FuIGJlIGV4ZWN1dGVkIG1hbnVhbGx5IG9yIHRyaWdnZXJlZCBieSBGbiBrZXkKK2NvbWJpbmF0aW9ucyAoc2VlIHRoZSBleGFtcGxlIGFjcGlkIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW5jbHVkZWQgaW4KK3RoZSBkcml2ZXIgdGFyYmFsbCBwYWNrYWdlIGF2YWlsYWJsZSBvbiB0aGUgd2ViIHNpdGUpLgorCitXaGVuIHRoZSBlamVjdCByZXF1ZXN0IGJ1dHRvbiBvbiB0aGUgZG9jayBpcyBwcmVzc2VkLCB0aGUgZmlyc3QgZXZlbnQKK2Fib3ZlIGlzIGdlbmVyYXRlZC4gVGhlIGhhbmRsZXIgZm9yIHRoaXMgZXZlbnQgc2hvdWxkIGlzc3VlIHRoZQorZm9sbG93aW5nIGNvbW1hbmQ6CisKKwllY2hvIHVuZG9jayA+IC9wcm9jL2FjcGkvaWJtL2RvY2sKKworQWZ0ZXIgdGhlIExFRCBvbiB0aGUgZG9jayBnb2VzIG9mZiwgaXQgaXMgc2FmZSB0byBlamVjdCB0aGUgbGFwdG9wLgorTm90ZTogaWYgeW91IHByZXNzZWQgdGhpcyBrZXkgYnkgbWlzdGFrZSwgZ28gYWhlYWQgYW5kIGVqZWN0IHRoZQorbGFwdG9wLCB0aGVuIGRvY2sgaXQgYmFjayBpbi4gT3RoZXJ3aXNlLCB0aGUgZG9jayBtYXkgbm90IGZ1bmN0aW9uIGFzCitleHBlY3RlZC4KKworV2hlbiB0aGUgbGFwdG9wIGlzIGRvY2tlZCwgdGhlIHRoaXJkIGV2ZW50IGFib3ZlIGlzIGdlbmVyYXRlZC4gVGhlCitoYW5kbGVyIGZvciB0aGlzIGV2ZW50IHNob3VsZCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gZnVsbHkKK2VuYWJsZSB0aGUgZG9jazoKKworCWVjaG8gZG9jayA+IC9wcm9jL2FjcGkvaWJtL2RvY2sKKworVGhlIGNvbnRlbnRzIG9mIHRoZSAvcHJvYy9hY3BpL2libS9kb2NrIGZpbGUgc2hvd3MgdGhlIGN1cnJlbnQgc3RhdHVzCitvZiB0aGUgZG9jaywgYXMgcHJvdmlkZWQgYnkgdGhlIEFDUEkgZnJhbWV3b3JrLgorCitUaGUgZG9ja2luZyBzdXBwb3J0IGluIHRoaXMgZHJpdmVyIGRvZXMgbm90IHRha2UgY2FyZSBvZiBlbmFibGluZyBvcgorZGlzYWJsaW5nIGFueSBvdGhlciBkZXZpY2VzIHlvdSBtYXkgaGF2ZSBhdHRhY2hlZCB0byB0aGUgZG9jay4gRm9yCitleGFtcGxlLCBhIENEIGRyaXZlIHBsdWdnZWQgaW50byB0aGUgVWx0cmFCYXNlIG5lZWRzIHRvIGJlIGRpc2FibGVkIG9yCitlbmFibGVkIHNlcGFyYXRlbHkuIFNlZSB0aGUgcHJvdmlkZWQgZXhhbXBsZSBhY3BpZCBjb25maWd1cmF0aW9uIGZpbGVzCitmb3IgaG93IHRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZC4KKworVGhlcmUgaXMgbm8gc3VwcG9ydCB5ZXQgZm9yIFBDSSBkZXZpY2VzIHRoYXQgbWF5IGJlIGF0dGFjaGVkIHRvIGEKK2RvY2tpbmcgc3RhdGlvbiwgZS5nLiBpbiB0aGUgVGhpbmtQYWQgRG9jayBJSS4gVGhlIGRyaXZlciBjdXJyZW50bHkKK2RvZXMgbm90IHJlY29nbml6ZSwgZW5hYmxlIG9yIGRpc2FibGUgc3VjaCBkZXZpY2VzLiBUaGlzIG1lYW5zIHRoYXQKK3RoZSBvbmx5IGRvY2tpbmcgc3RhdGlvbnMgY3VycmVudGx5IHN1cHBvcnRlZCBhcmUgdGhlIFgtc2VyaWVzCitVbHRyYUJhc2UgZG9ja3MgYW5kICJkdW1iIiBwb3J0IHJlcGxpY2F0b3JzIGxpa2UgdGhlIE1pbmkgRG9jayAodGhlCitsYXR0ZXIgZG9uJ3QgbmVlZCBhbnkgQUNQSSBzdXBwb3J0LCBhY3R1YWxseSkuCisKK1VsdHJhQmF5IEVqZWN0IC0tIC9wcm9jL2FjcGkvaWJtL2JheQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luc2VydGluZyBvciBlamVjdGluZyBhbiBVbHRyYUJheSBkZXZpY2UgcmVxdWlyZXMgc29tZSBhY3Rpb25zIHRvIGJlCit0YWtlbiBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBzYWZlbHkgbWFrZSBvciBicmVhayB0aGUgZWxlY3RyaWNhbAorY29ubmVjdGlvbnMgd2l0aCB0aGUgZGV2aWNlLgorCitUaGlzIGZlYXR1cmUgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgQUNQSSBldmVudHM6CisKKwlpYm0vYmF5IE1TVFIgMDAwMDAwMDMgMDAwMDAwMDAgLS0gZWplY3QgcmVxdWVzdAorCWlibS9iYXkgTVNUUiAwMDAwMDAwMSAwMDAwMDAwMCAtLSBlamVjdCBsZXZlciBpbnNlcnRlZAorCitOT1RFOiBUaGVzZSBldmVudHMgd2lsbCBvbmx5IGJlIGdlbmVyYXRlZCBpZiB0aGUgVWx0cmFCYXkgd2FzIHByZXNlbnQKK3doZW4gdGhlIGxhcHRvcCB3YXMgb3JpZ2luYWxseSBib290ZWQgKG9uIHRoZSBYIHNlcmllcywgdGhlIFVsdHJhQmF5CitpcyBpbiB0aGUgZG9jaywgc28gaXQgbWF5IG5vdCBiZSBwcmVzZW50IGlmIHRoZSBsYXB0b3Agd2FzIHVuZG9ja2VkKS4KK1RoaXMgaXMgZHVlIHRvIHRoZSBjdXJyZW50IGxhY2sgb2Ygc3VwcG9ydCBmb3IgaG90IHBsdWdnaW5nIG9mIGRldmljZXMKK2luIHRoZSBMaW51eCBBQ1BJIGZyYW1ld29yay4gSWYgdGhlIGxhcHRvcCB3YXMgYm9vdGVkIHdpdGhvdXQgdGhlCitVbHRyYUJheSwgdGhlIGZvbGxvd2luZyBtZXNzYWdlIGlzIHNob3duIGluIHRoZSBsb2dzOiAiaWJtX2FjcGk6IGJheQorZGV2aWNlIG5vdCBwcmVzZW50Ii4gTm8gYmF5LXJlbGF0ZWQgZXZlbnRzIGFyZSBnZW5lcmF0ZWQgYnV0IHRoZSBlamVjdAorY29tbWFuZCBkZXNjcmliZWQgYmVsb3cgc3RpbGwgd29ya3MuIEl0IGNhbiBiZSBleGVjdXRlZCBtYW51YWxseSBvcgordHJpZ2dlcmVkIGJ5IGEgaG90IGtleSBjb21iaW5hdGlvbi4KKworU2xpZGluZyB0aGUgZWplY3QgbGV2ZXIgZ2VuZXJhdGVzIHRoZSBmaXJzdCBldmVudCBzaG93biBhYm92ZS4gVGhlCitoYW5kbGVyIGZvciB0aGlzIGV2ZW50IHNob3VsZCB0YWtlIHdoYXRldmVyIGFjdGlvbnMgYXJlIG5lY2Vzc2FyeSB0bworc2h1dCBkb3duIHRoZSBkZXZpY2UgaW4gdGhlIFVsdHJhQmF5IChlLmcuIGNhbGwgaWRlY3RsKSwgdGhlbiBpc3N1ZQordGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisJZWNobyBlamVjdCA+IC9wcm9jL2FjcGkvaWJtL2JheQorCitBZnRlciB0aGUgTEVEIG9uIHRoZSBVbHRyYUJheSBnb2VzIG9mZiwgaXQgaXMgc2FmZSB0byBwdWxsIG91dCB0aGUKK2RldmljZS4KKworV2hlbiB0aGUgZWplY3QgbGV2ZXIgaXMgaW5zZXJ0ZWQsIHRoZSBzZWNvbmQgZXZlbnQgYWJvdmUgaXMKK2dlbmVyYXRlZC4gVGhlIGhhbmRsZXIgZm9yIHRoaXMgZXZlbnQgc2hvdWxkIHRha2Ugd2hhdGV2ZXIgYWN0aW9ucyBhcmUKK25lY2Vzc2FyeSB0byBlbmFibGUgdGhlIFVsdHJhQmF5IGRldmljZSAoZS5nLiBjYWxsIGlkZWN0bCkuCisKK1RoZSBjb250ZW50cyBvZiB0aGUgL3Byb2MvYWNwaS9pYm0vYmF5IGZpbGUgc2hvd3MgdGhlIGN1cnJlbnQgc3RhdHVzCitvZiB0aGUgVWx0cmFCYXksIGFzIHByb3ZpZGVkIGJ5IHRoZSBBQ1BJIGZyYW1ld29yay4KKworRXhwZXJpbWVudGFsIEZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgbWFya2VkIGV4cGVyaW1lbnRhbCBiZWNhdXNlIHVzaW5nIHRoZW0KK2ludm9sdmVzIGd1ZXNzaW5nIHRoZSBjb3JyZWN0IHZhbHVlcyBvZiBzb21lIHBhcmFtZXRlcnMuIEd1ZXNzaW5nCitpbmNvcnJlY3RseSBtYXkgaGF2ZSB1bmRlc2lyYWJsZSBlZmZlY3RzIGxpa2UgY3Jhc2hpbmcgeW91cgorVGhpbmtQYWQuIFVTRSBUSEVTRSBXSVRIIENBVVRJT04hIFRvIGFjdGl2YXRlIHRoZW0sIHlvdSdsbCBuZWVkIHRvCitzdXBwbHkgdGhlIGV4cGVyaW1lbnRhbD0xIHBhcmFtZXRlciB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4KKworRXhwZXJpbWVudGFsOiBDTU9TIGNvbnRyb2wgLSAvcHJvYy9hY3BpL2libS9jbW9zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmZWF0dXJlIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgQUNQSSBmaXJtd2FyZSB0byBjb250cm9sIHRoZQorVGhpbmtMaWdodCBvbiBtb3N0IG5ld2VyIFRoaW5rUGFkIG1vZGVscy4gSXQgYXBwZWFycyB0aGF0IGl0IGNhbiBhbHNvCitjb250cm9sIExDRCBicmlnaHRuZXNzLCBzb3VuZHMgdm9sdW1lIGFuZCBtb3JlLCBidXQgb25seSBvbiBzb21lCittb2RlbHMuCisKK1RoZSBjb21tYW5kcyBhcmUgbm9uLW5lZ2F0aXZlIGludGVnZXIgbnVtYmVyczoKKworCWVjaG8gMCA+L3Byb2MvYWNwaS9pYm0vY21vcworCWVjaG8gMSA+L3Byb2MvYWNwaS9pYm0vY21vcworCWVjaG8gMiA+L3Byb2MvYWNwaS9pYm0vY21vcworCS4uLgorCitUaGUgcmFuZ2Ugb2YgbnVtYmVycyB3aGljaCBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHZhcmlvdXMgbW9kZWxzIGlzIDAKK3RvIDIxLCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IG51bWJlcnMgb3V0c2lkZSB0aGlzIHJhbmdlIGhhdmUKK2ludGVyZXN0aW5nIGJlaGF2aW9yLiBIZXJlIGlzIHRoZSBiZWhhdmlvciBvbiB0aGUgWDQwICh0cGIgaXMgdGhlCitUaGlua1BhZCBCdXR0b25zIHV0aWxpdHkpOgorCisJMCAtIG5vIGVmZmVjdCBidXQgdHBiIHJlcG9ydHMgIlZvbHVtZSBkb3duIgorCTEgLSBubyBlZmZlY3QgYnV0IHRwYiByZXBvcnRzICJWb2x1bWUgdXAiCisJMiAtIG5vIGVmZmVjdCBidXQgdHBiIHJlcG9ydHMgIk11dGUgb24iCisJMyAtIHNpbXVsYXRlIHByZXNzaW5nIHRoZSAiQWNjZXNzIElCTSIgYnV0dG9uCisJNCAtIExDRCBicmlnaHRuZXNzIHVwCisJNSAtIExDRCBicmlnaHRuZXNzIGRvd24KKwkxMSAtIHRvZ2dsZSBzY3JlZW4gZXhwYW5zaW9uCisJMTIgLSBUaGlua0xpZ2h0IG9uCisJMTMgLSBUaGlua0xpZ2h0IG9mZgorCTE0IC0gbm8gZWZmZWN0IGJ1dCB0cGIgcmVwb3J0cyBUaGlua0xpZ2h0IHN0YXR1cyBjaGFuZ2UKKworSWYgeW91IHRyeSB0aGlzIGZlYXR1cmUsIHBsZWFzZSBzZW5kIG1lIGEgcmVwb3J0IHNpbWlsYXIgdG8gdGhlCithYm92ZS4gT24gbW9kZWxzIHdoaWNoIGFsbG93IGNvbnRyb2wgb2YgTENEIGJyaWdodG5lc3Mgb3Igc291bmQKK3ZvbHVtZSwgSSdkIGxpa2UgdG8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gYW4gdXNlci1mcmllbmRseQord2F5LCBidXQgZmlyc3QgSSBuZWVkIGEgd2F5IHRvIGlkZW50aWZ5IHRoZSBtb2RlbHMgd2hpY2ggdGhpcyBpcworcG9zc2libGUuCisKK0V4cGVyaW1lbnRhbDogTEVEIGNvbnRyb2wgLSAvcHJvYy9hY3BpL2libS9MRUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZSBvZiB0aGUgTEVEIGluZGljYXRvcnMgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGlzIGZlYXR1cmUuIFRoZQorYXZhaWxhYmxlIGNvbW1hbmRzIGFyZToKKworCWVjaG8gPGxlZCBudW1iZXI+IG9uID4vcHJvYy9hY3BpL2libS9sZWQKKwllY2hvIDxsZWQgbnVtYmVyPiBvZmYgPi9wcm9jL2FjcGkvaWJtL2xlZAorCWVjaG8gPGxlZCBudW1iZXI+IGJsaW5rID4vcHJvYy9hY3BpL2libS9sZWQKKworVGhlIDxsZWQgbnVtYmVyPiBwYXJhbWV0ZXIgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlci4gVGhlIHJhbmdlIG9mIExFRAorbnVtYmVycyB1c2VkIGludGVybmFsbHkgYnkgdmFyaW91cyBtb2RlbHMgaXMgMCB0byA3IGJ1dCBpdCdzIHBvc3NpYmxlCit0aGF0IG51bWJlcnMgb3V0c2lkZSB0aGlzIHJhbmdlIGFyZSBhbHNvIHZhbGlkLiBIZXJlIGlzIHRoZSBtYXBwaW5nIG9uCit0aGUgWDQwOgorCisJMCAtIHBvd2VyCisJMSAtIGJhdHRlcnkgKG9yYW5nZSkKKwkyIC0gYmF0dGVyeSAoZ3JlZW4pCisJMyAtIFVsdHJhQmFzZQorCTQgLSBVbHRyYUJheQorCTcgLSBzdGFuZGJ5CisKK0FsbCBvZiB0aGUgYWJvdmUgY2FuIGJlIHR1cm5lZCBvbiBhbmQgb2ZmIGFuZCBjYW4gYmUgbWFkZSB0byBibGluay4KKworSWYgeW91IHRyeSB0aGlzIGZlYXR1cmUsIHBsZWFzZSBzZW5kIG1lIGEgcmVwb3J0IHNpbWlsYXIgdG8gdGhlCithYm92ZS4gSSdkIGxpa2UgdG8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gYW4gdXNlci1mcmllbmRseSB3YXksCitidXQgZmlyc3QgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSB3aGljaCBudW1iZXJzIGNvcnJlc3BvbmQgdG8gd2hpY2gKK0xFRHMgb24gdmFyaW91cyBtb2RlbHMuCisKK0V4cGVyaW1lbnRhbDogQUNQSSBzb3VuZHMgLSAvcHJvYy9hY3BpL2libS9iZWVwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQkVFUCBtZXRob2QgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBBQ1BJIGZpcm13YXJlIHRvIHByb3ZpZGUKK2F1ZGlibGUgYWxlcnRzIGluIHZhcmlvdXMgc2l0dXRhdGlvbi4gVGhpcyBmZWF0dXJlIGFsbG93cyB0aGUgc2FtZQorc291bmRzIHRvIGJlIHRyaWdnZXJlZCBtYW51YWxseS4KKworVGhlIGNvbW1hbmRzIGFyZSBub24tbmVnYXRpdmUgaW50ZWdlciBudW1iZXJzOgorCisJZWNobyAwID4vcHJvYy9hY3BpL2libS9iZWVwCisJZWNobyAxID4vcHJvYy9hY3BpL2libS9iZWVwCisJZWNobyAyID4vcHJvYy9hY3BpL2libS9iZWVwCisJLi4uCisKK1RoZSByYW5nZSBvZiBudW1iZXJzIHdoaWNoIGFyZSB1c2VkIGludGVybmFsbHkgYnkgdmFyaW91cyBtb2RlbHMgaXMgMAordG8gMTcsIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgbnVtYmVycyBvdXRzaWRlIHRoaXMgcmFuZ2UgYXJlIGFsc28KK3ZhbGlkLiBIZXJlIGlzIHRoZSBiZWhhdmlvciBvbiB0aGUgWDQwOgorCisJMiAtIHR3byBiZWVwcywgcGF1c2UsIHRoaXJkIGJlZXAKKwkzIC0gc2luZ2xlIGJlZXAKKwk0IC0gInVuYWJsZSIJCisJNSAtIHNpbmdsZSBiZWVwCisJNiAtICJBQy9EQyIKKwk3IC0gaGlnaC1waXRjaGVkIGJlZXAKKwk5IC0gdGhyZWUgc2hvcnQgYmVlcHMKKwkxMCAtIHZlcnkgbG9uZyBiZWVwCisJMTIgLSBsb3ctcGl0Y2hlZCBiZWVwCisKKyhJJ3ZlIG9ubHkgYmVlbiBhYmxlIHRvIGlkZW50aWZ5IGEgY291cGxlIG9mIHRoZW0pLgorCitJZiB5b3UgdHJ5IHRoaXMgZmVhdHVyZSwgcGxlYXNlIHNlbmQgbWUgYSByZXBvcnQgc2ltaWxhciB0byB0aGUKK2Fib3ZlLiBJJ2QgbGlrZSB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBhbiB1c2VyLWZyaWVuZGx5IHdheSwKK2J1dCBmaXJzdCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHdoaWNoIG51bWJlcnMgY29ycmVzcG9uZCB0byB3aGljaAorc291bmRzIG9uIHZhcmlvdXMgbW9kZWxzLgorCisKK011bHRpcGxlIENvbW1hbmQsIE1vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNdWx0aXBsZSBjb21tYW5kcyBjYW4gYmUgd3JpdHRlbiB0byB0aGUgcHJvYyBmaWxlcyBpbiBvbmUgc2hvdCBieQorc2VwYXJhdGluZyB0aGVtIHdpdGggY29tbWFzLCBmb3IgZXhhbXBsZToKKworCWVjaG8gZW5hYmxlLDB4ZmZmZiA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleQorCWVjaG8gbGNkX2Rpc2FibGUsY3J0X2VuYWJsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisKK0NvbW1hbmRzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCB3aGVuIGxvYWRpbmcgdGhlIGlibV9hY3BpIG1vZHVsZSwgZm9yCitleGFtcGxlOgorCisJbW9kcHJvYmUgaWJtX2FjcGkgaG90a2V5PWVuYWJsZSwweGZmZmYgdmlkZW89YXV0b19kaXNhYmxlCisKKworRXhhbXBsZSBDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEFDUEkgc3VwcG9ydCBpbiB0aGUga2VybmVsIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24KK3dpdGggYSB1c2VyLXNwYWNlIGRhZW1vbiwgYWNwaWQuIFRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGlzCitkYWVtb24gY29udHJvbCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIGluIHJlc3BvbnNlIHRvIHZhcmlvdXMgQUNQSQorZXZlbnRzLiBBbiBleGFtcGxlIHNldCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUKK2NvbmZpZy8gZGlyZWN0b3J5IG9mIHRoZSB0YXJiYWxsIHBhY2thZ2UgYXZhaWxhYmxlIG9uIHRoZSB3ZWIKK3NpdGUuIE5vdGUgdGhhdCB0aGVzZSBhcmUgcHJvdmlkZWQgZm9yIGlsbHVzdHJhdGlvbiBwdXJwb3NlcyBvbmx5IGFuZAorbWF5IG5lZWQgdG8gYmUgYWRhcHRlZCB0byB5b3VyIHBhcnRpY3VsYXIgc2V0dXAuCisKK1RoZSBmb2xsb3dpbmcgdXRpbGl0eSBzY3JpcHRzIGFyZSB1c2VkIGJ5IHRoZSBleGFtcGxlIGFjdGlvbgorc2NyaXB0cyAoaW5jbHVkZWQgd2l0aCBpYm0tYWNwaSBmb3IgY29tcGxldGVuZXNzKToKKworCS91c3IvbG9jYWwvc2Jpbi9pZGVjdGwgLS0gZnJvbSB0aGUgaGRwYXJtIHNvdXJjZSBkaXN0cmlidXRpb24sCisJCXNlZSBodHRwOi8vd3d3LmliaWJsaW8ub3JnL3B1Yi9MaW51eC9zeXN0ZW0vaGFyZHdhcmUKKwkvdXNyL2xvY2FsL3NiaW4vbGFwdG9wX21vZGUgLS0gZnJvbSB0aGUgTGludXgga2VybmVsIHNvdXJjZQorCQlkaXN0cmlidXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dAorCS9zYmluL3NlcnZpY2UgLS0gY29tZXMgd2l0aCBSZWRoYXQvRmVkb3JhIGRpc3RyaWJ1dGlvbnMKKworVG9hbiBUIE5ndXllbiA8bnR0QGNvbnRyb2wudWNoaWNhZ28uZWR1PiBoYXMgd3JpdHRlbiBhIFN1U0UgcG93ZXJzYXZlCitzY3JpcHQgZm9yIHRoZSBYMjAsIGluY2x1ZGVkIGluIGNvbmZpZy91c3Ivc2Jpbi9pYm1faG90a2V5c19YMjAKKworSGVucmlrIEJyaXggQW5kZXJzZW4gPGJyaXhAZ2VudG9vLm9yZz4gaGFzIHdyaXR0ZW4gYSBHZW50b28gQUNQSSBldmVudAoraGFuZGxlciBzY3JpcHQgZm9yIHRoZSBYMzEuIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tCitodHRwOi8vZGV2LmdlbnRvby5vcmcvfmJyaXgvZmlsZXMveDMxLnNoCisKK0RhdmlkIFNjaHdlaWtlcnQgPGR3c0BlZS5ldGguY2g+IGhhcyB3cml0dGVuIGFuIGFsdGVybmF0aXZlIGJsYW5rLnNoCitzY3JpcHQgd2hpY2ggd29ya3Mgb24gRGViaWFuIHN5c3RlbXMsIGluY2x1ZGVkIGluCitjb25maWdzL2V0Yy9hY3BpL2FjdGlvbnMvYmxhbmstZGViaWFuLnNoCisKKworVE9ETworLS0tLQorCitJJ2QgbGlrZSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyBidXQgaGF2ZW4ndCB5ZXQgZm91bmQgdGhlCit0aW1lIGFuZC9vciBJIGRvbid0IHlldCBrbm93IGhvdyB0byBpbXBsZW1lbnQgdGhlbToKKworLSBVbHRyYUJheSBmbG9wcHkgZHJpdmUgc3VwcG9ydAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lkZS50eHQgYi9Eb2N1bWVudGF0aW9uL2lkZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4NjZmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaWRlLnR4dApAQCAtMCwwICsxLDM5NCBAQAorCisJSW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBFbmhhbmNlZCBJREUgZHJpdmUgaW4gTGludXggMi42CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAKKyAgIFRoZSBoZHBhcm0gdXRpbGl0eSBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgSURFIGZlYXR1cmVzIG9uIGEKKyAgIHJ1bm5pbmcgc3lzdGVtLiBJdCBpcyBwYWNrYWdlZCBzZXBhcmF0ZWx5LiAgUGxlYXNlIExvb2sgZm9yIGl0IG9uIHBvcHVsYXIKKyAgIGxpbnV4IEZUUCBzaXRlcy4KKyAgIAorCisKKyoqKiAgSU1QT1JUQU5UIE5PVElDRVM6ICBCVUdHWSBJREUgQ0hJUFNFVFMgQ0FOIENPUlJVUFQgREFUQSEhCisqKiogID09PT09PT09PT09PT09PT09CisqKiogIFBDSSB2ZXJzaW9ucyBvZiB0aGUgQ01ENjQwIGFuZCBSWjEwMDAgaW50ZXJmYWNlcyBhcmUgbm93IGRldGVjdGVkCisqKiogIGF1dG9tYXRpY2FsbHkgYXQgc3RhcnR1cCB3aGVuIFBDSSBCSU9TIHN1cHBvcnQgaXMgY29uZmlndXJlZC4KKyoqKgorKioqICBMaW51eCBkaXNhYmxlcyB0aGUgInByZWZldGNoIiAoInJlYWRhaGVhZCIpIG1vZGUgb2YgdGhlIFJaMTAwMAorKioqICB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbiBwb3NzaWJsZSBkdWUgdG8gaGFyZHdhcmUgZGVzaWduIGZsYXdzLgorKioqCisqKiogIEZvciB0aGUgQ01ENjQwLCBsaW51eCBkaXNhYmxlcyAiSVJRIHVubWFza2luZyIgKGhkcGFybSAtdTEpIG9uIGFueQorKioqICBkcml2ZSBmb3Igd2hpY2ggdGhlICJwcmVmZXRjaCIgbW9kZSBvZiB0aGUgQ01ENjQwIGlzIHR1cm5lZCBvbi4KKyoqKiAgSWYgInByZWZldGNoIiBpcyBkaXNhYmxlZCAoaGRwYXJtIC1wOCksIHRoZW4gIklSUSB1bm1hc2tpbmciIGNhbiBiZQorKioqICB1c2VkIGFnYWluLgorKioqCisqKiogIEZvciB0aGUgQ01ENjQwLCBsaW51eCBkaXNhYmxlcyAiMzJiaXQgSS9PIiAoaGRwYXJtIC1jMSkgb24gYW55IGRyaXZlCisqKiogIGZvciB3aGljaCB0aGUgInByZWZldGNoIiBtb2RlIG9mIHRoZSBDTUQ2NDAgaXMgdHVybmVkIG9mZi4KKyoqKiAgSWYgInByZWZldGNoIiBpcyBlbmFibGVkIChoZHBhcm0gLXA5KSwgdGhlbiAiMzJiaXQgSS9PIiBjYW4gYmUKKyoqKiAgdXNlZCBhZ2Fpbi4KKyoqKgorKioqICBUaGUgQ01ENjQwIGlzIGFsc28gdXNlZCBvbiBzb21lIFZlc2EgTG9jYWwgQnVzIChWTEIpIGNhcmRzLCBhbmQgaXMgKk5PVCoKKyoqKiAgYXV0b21hdGljYWxseSBkZXRlY3RlZCBieSBMaW51eC4gIEZvciBzYWZlLCByZWxpYWJsZSBvcGVyYXRpb24gd2l0aCBzdWNoCisqKiogIGludGVyZmFjZXMsIG9uZSAqTVVTVCogdXNlIHRoZSAiaWRlMD1jbWQ2NDBfdmxiIiBrZXJuZWwgb3B0aW9uLgorKioqCisqKiogIFVzZSBvZiB0aGUgInNlcmlhbGl6ZSIgb3B0aW9uIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb21tb24gcGl0ZmFsbHM6CisKKy0gNDAtY29uZHVjdG9yIElERSBjYWJsZXMgYXJlIGNhcGFibGUgb2YgdHJhbnNmZXJyaW5nIGRhdGEgaW4gRE1BIG1vZGVzIHVwIHRvCisgIHVkbWEyLCBidXQgbm8gZmFzdGVyLgorCistIElmIHBvc3NpYmxlIGRldmljZXMgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIHNlcGFyYXRlIGNoYW5uZWxzIGlmIHRoZXkgYXJlCisgIGF2YWlsYWJsZS4gVHlwaWNhbGx5IHRoZSBkaXNrIG9uIHRoZSBmaXJzdCBhbmQgQ0QtUk9NIG9uIHRoZSBzZWNvbmQuCisKKy0gSWYgeW91IG1peCBkZXZpY2VzIG9uIHRoZSBzYW1lIGNhYmxlLCBwbGVhc2UgY29uc2lkZXIgdXNpbmcgc2ltaWxhciBkZXZpY2VzCisgIGluIHJlc3BlY3Qgb2YgdGhlIGRhdGEgdHJhbnNmZXIgbW9kZSB0aGV5IHN1cHBvcnQuCisKKy0gRXZlbiBiZXR0ZXIgdHJ5IHRvIHN0aWNrIHRvIHRoZSBzYW1lIHZlbmRvciBhbmQgZGV2aWNlIHR5cGUgb24gdGhlIHNhbWUKKyAgY2FibGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIG11bHRpcGxlIElERSBpbnRlcmZhY2UgZHJpdmVyLCBhcyBldm9sdmVkIGZyb20gaGQuYy4gIAorCitJdCBzdXBwb3J0cyB1cCB0byA5IElERSBpbnRlcmZhY2VzIHBlciBkZWZhdWx0LCBvbiBvbmUgb3IgbW9yZSBJUlFzICh1c3VhbGx5CisxNCAmIDE1KS4gIFRoZXJlIGNhbiBiZSB1cCB0byB0d28gZHJpdmVzIHBlciBpbnRlcmZhY2UsIGFzIHBlciB0aGUgQVRBLTYgc3BlYy4KKworUHJpbWFyeTogICAgaWRlMCwgcG9ydCAweDFmMDsgbWFqb3I9MzsgIGhkYSBpcyBtaW5vcj0wOyBoZGIgaXMgbWlub3I9NjQKK1NlY29uZGFyeTogIGlkZTEsIHBvcnQgMHgxNzA7IG1ham9yPTIyOyBoZGMgaXMgbWlub3I9MDsgaGRkIGlzIG1pbm9yPTY0CitUZXJ0aWFyeTogICBpZGUyLCBwb3J0IDB4MWU4OyBtYWpvcj0zMzsgaGRlIGlzIG1pbm9yPTA7IGhkZiBpcyBtaW5vcj02NAorUXVhdGVybmFyeTogaWRlMywgcG9ydCAweDE2ODsgbWFqb3I9MzQ7IGhkZyBpcyBtaW5vcj0wOyBoZGggaXMgbWlub3I9NjQKK2ZpZnRoLi4gICAgIGlkZTQsIHVzdWFsbHkgUENJLCBwcm9iZWQKK3NpeHRoLi4gICAgIGlkZTUsIHVzdWFsbHkgUENJLCBwcm9iZWQKKworVG8gYWNjZXNzIGRldmljZXMgb24gaW50ZXJmYWNlcyA+IGlkZTAsIGRldmljZSBlbnRyaWVzIHBsZWFzZSBtYWtlIHN1cmUgdGhhdAorZGV2aWNlIGZpbGVzIGZvciB0aGVtIGFyZSBwcmVzZW50IGluIC9kZXYuICBJZiBub3QsIHBsZWFzZSBjcmVhdGUgc3VjaAorZW50cmllcywgYnkgdXNpbmcgL2Rldi9NQUtFREVWLgorCitUaGlzIGRyaXZlciBhdXRvbWF0aWNhbGx5IHByb2JlcyBmb3IgbW9zdCBJREUgaW50ZXJmYWNlcyAoaW5jbHVkaW5nIGFsbCBQQ0kKK29uZXMpLCBmb3IgdGhlIGRyaXZlcy9nZW9tZXRyaWVzIGF0dGFjaGVkIHRvIHRob3NlIGludGVyZmFjZXMsIGFuZCBmb3IgdGhlIElSUQorbGluZXMgYmVpbmcgdXNlZCBieSB0aGUgaW50ZXJmYWNlcyAobm9ybWFsbHkgMTQsIDE1IGZvciBpZGUwL2lkZTEpLgorCitGb3Igc3BlY2lhbCBjYXNlcywgaW50ZXJmYWNlcyBtYXkgYmUgc3BlY2lmaWVkIHVzaW5nIGtlcm5lbCAiY29tbWFuZCBsaW5lIgorb3B0aW9ucy4gIEZvciBleGFtcGxlLAorCisJaWRlMz0weDE2OCwweDM2ZSwxMAkvKiBpb3BvcnRzIDB4MTY4LTB4MTZmLDB4MzZlLCBpcnEgMTAgKi8KKworTm9ybWFsbHkgdGhlIGlycSBudW1iZXIgbmVlZCBub3QgYmUgc3BlY2lmaWVkLCBhcyBpZGUuYyB3aWxsIHByb2JlIGZvciBpdDoKKworCWlkZTM9MHgxNjgsMHgzNmUJLyogaW9wb3J0cyAweDE2OC0weDE2ZiwweDM2ZSAqLworCitUaGUgc3RhbmRhcmQgcG9ydCwgYW5kIGlycSB2YWx1ZXMgYXJlIHRoZXNlOgorCisJaWRlMD0weDFmMCwweDNmNiwxNAorCWlkZTE9MHgxNzAsMHgzNzYsMTUKKwlpZGUyPTB4MWU4LDB4M2VlLDExCisJaWRlMz0weDE2OCwweDM2ZSwxMAorCitOb3RlIHRoYXQgdGhlIGZpcnN0IHBhcmFtZXRlciByZXNlcnZlcyA4IGNvbnRpZ3VvdXMgaW9wb3J0cywgd2hlcmVhcyB0aGUKK3NlY29uZCB2YWx1ZSBkZW5vdGVzIGEgc2luZ2xlIGlvcG9ydC4gSWYgaW4gZG91YnQsIGRvIGEgJ2NhdCAvcHJvYy9pb3BvcnRzJy4KKworSW4gYWxsIHByb2JhYmlsaXR5IHRoZSBkZXZpY2UgdXNlcyB0aGVzZSBwb3J0cyBhbmQgSVJRcyBpZiBpdCBpcyBhdHRhY2hlZAordG8gdGhlIGFwcHJvcHJpYXRlIGlkZSBjaGFubmVsLiAgUGFzcyB0aGUgcGFyYW1ldGVyIGZvciB0aGUgY29ycmVjdCBpZGUKK2NoYW5uZWwgdG8gdGhlIGtlcm5lbCwgYXMgZXhwbGFpbmVkIGFib3ZlLgorCitBbnkgbnVtYmVyIG9mIGludGVyZmFjZXMgbWF5IHNoYXJlIGEgc2luZ2xlIElSUSBpZiBuZWNlc3NhcnksIGF0IGEgc2xpZ2h0CitwZXJmb3JtYW5jZSBwZW5hbHR5LCB3aGV0aGVyIG9uIHNlcGFyYXRlIGNhcmRzIG9yIGEgc2luZ2xlIFZMQiBjYXJkLgorVGhlIElERSBkcml2ZXIgYXV0b21hdGljYWxseSBkZXRlY3RzIGFuZCBoYW5kbGVzIHRoaXMuICBIb3dldmVyLCB0aGlzIG1heQorb3IgbWF5IG5vdCBiZSBoYXJtZnVsIHRvIHlvdXIgaGFyZHdhcmUuLiB0d28gb3IgbW9yZSBjYXJkcyBkcml2aW5nIHRoZSBzYW1lIElSUQorY2FuIHBvdGVudGlhbGx5IGJ1cm4gZWFjaCBvdGhlcidzIGJ1cyBkcml2ZXIsIHRob3VnaCBpbiBwcmFjdGljZSB0aGlzCitzZWxkb20gb2NjdXJzLiAgQmUgY2FyZWZ1bCwgYW5kIGlmIGluIGRvdWJ0LCBkb24ndCBkbyBpdCEKKworRHJpdmVzIGFyZSBub3JtYWxseSBmb3VuZCBieSBhdXRvLXByb2JpbmcgYW5kL29yIGV4YW1pbmluZyB0aGUgQ01PUy9CSU9TIGRhdGEuCitGb3IgcmVhbGx5IHdlaXJkIHNpdHVhdGlvbnMsIHRoZSBhcHBhcmVudCAoZmRpc2spIGdlb21ldHJ5IGNhbiBhbHNvIGJlIHNwZWNpZmllZAorb24gdGhlIGtlcm5lbCAiY29tbWFuZCBsaW5lIiB1c2luZyBMSUxPLiAgVGhlIGZvcm1hdCBvZiBzdWNoIGxpbmVzIGlzOgorCisJaGR4PWN5bHMsaGVhZHMsc2VjdHMsd3Bjb20saXJxCitvcgloZHg9Y2Ryb20KKword2hlcmUgaGR4IGNhbiBiZSBhbnkgb2YgaGRhIHRocm91Z2ggaGRoLCBUaHJlZSB2YWx1ZXMgYXJlIHJlcXVpcmVkCisoY3lscyxoZWFkcyxzZWN0cykuICBGb3IgZXhhbXBsZToKKworCWhkYz0xMDUwLDMyLDY0ICBoZGQ9Y2Ryb20KKworZWl0aGVyIHtoZGEsaGRifSBvciB7aGRjLGhkZH0uICBUaGUgcmVzdWx0cyBvZiBzdWNjZXNzZnVsIGF1dG8tcHJvYmluZyBtYXkKK292ZXJyaWRlIHRoZSBwaHlzaWNhbCBnZW9tZXRyeS9pcnEgc3BlY2lmaWVkLCB0aG91Z2ggdGhlICJvcmlnaW5hbCIgZ2VvbWV0cnkKK21heSBiZSByZXRhaW5lZCBhcyB0aGUgImxvZ2ljYWwiIGdlb21ldHJ5IGZvciBwYXJ0aXRpb25pbmcgcHVycG9zZXMgKGZkaXNrKS4KKworSWYgdGhlIGF1dG8tcHJvYmluZyBkdXJpbmcgYm9vdCB0aW1lIGNvbmZ1c2VzIGEgZHJpdmUgKGllLiB0aGUgZHJpdmUgd29ya3MKK3dpdGggaGQuYyBidXQgbm90IHdpdGggaWRlLmMpLCB0aGVuIGFuIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlIHNwZWNpZmllZAorZm9yIGVhY2ggZHJpdmUgZm9yIHdoaWNoIHlvdSdkIGxpa2UgdGhlIGRyaXZlIHRvIHNraXAgdGhlIGhhcmR3YXJlCitwcm9iZS9pZGVudGlmaWNhdGlvbiBzZXF1ZW5jZS4gIEZvciBleGFtcGxlOgorCisJaGRiPW5vcHJvYmUKK29yCisJaGRjPTc2OCwxNiwzMgorCWhkYz1ub3Byb2JlCisKK05vdGUgdGhhdCB3aGVuIG9ubHkgb25lIElERSBkZXZpY2UgaXMgYXR0YWNoZWQgdG8gYW4gaW50ZXJmYWNlLCBpdCBzaG91bGQgYmUKK2p1bXBlcmVkIGFzICJzaW5nbGUiIG9yICJtYXN0ZXIiLCAqbm90KiAic2xhdmUiLiAgTWFueSBmb2xrcyBoYXZlIGhhZAorInRyb3VibGUiIHdpdGggY2Ryb21zIGJlY2F1c2Ugb2YgdGhpcyByZXF1aXJlbWVudCwgc28gdGhlIGRyaXZlciBub3cgcHJvYmVzCitmb3IgYm90aCB1bml0cywgdGhvdWdoIHN1Y2Nlc3MgaXMgbW9yZSBsaWtlbHkgd2hlbiB0aGUgZHJpdmUgaXMganVtcGVyZWQKK2NvcnJlY3RseS4KKworQ291cnRlc3kgb2YgU2NvdHQgU255ZGVyIGFuZCBvdGhlcnMsIHRoZSBkcml2ZXIgc3VwcG9ydHMgQVRBUEkgY2Ryb20gZHJpdmVzCitzdWNoIGFzIHRoZSBORUMtMjYwIGFuZCB0aGUgbmV3IE1JVFNVTUkgdHJpcGxlL3F1YWQgc3BlZWQgZHJpdmVzLgorU3VjaCBkcml2ZXMgd2lsbCBiZSBpZGVudGlmaWVkIGF0IGJvb3QgdGltZSwganVzdCBsaWtlIGEgaGFyZCBkaXNrLgorCitJZiBmb3Igc29tZSByZWFzb24geW91ciBjZHJvbSBkcml2ZSBpcyAqbm90KiBmb3VuZCBhdCBib290IHRpbWUsIHlvdSBjYW4gZm9yY2UKK3RoZSBwcm9iZSB0byBsb29rIGhhcmRlciBieSBzdXBwbHlpbmcgYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcgordmlhIExJTE8sIHN1Y2ggYXM6CisKKwloZGM9Y2Ryb20JLyogaGRjID0gIm1hc3RlciIgb24gc2Vjb25kIGludGVyZmFjZSAqLworb3IKKwloZGQ9Y2Ryb20JLyogaGRkID0gInNsYXZlIiBvbiBzZWNvbmQgaW50ZXJmYWNlICovCisKK0ZvciBleGFtcGxlLCBhIEdXMjAwMCBzeXN0ZW0gbWlnaHQgaGF2ZSBhIGhhcmQgZHJpdmUgb24gdGhlIHByaW1hcnkKK2ludGVyZmFjZSAoL2Rldi9oZGEpIGFuZCBhbiBJREUgY2Ryb20gZHJpdmUgb24gdGhlIHNlY29uZGFyeSBpbnRlcmZhY2UKKygvZGV2L2hkYykuICBUbyBtb3VudCBhIENEIGluIHRoZSBjZHJvbSBkcml2ZSwgb25lIHdvdWxkIHVzZSBzb21ldGhpbmcgbGlrZToKKworCWxuIC1zZiAvZGV2L2hkYyAvZGV2L2Nkcm9tCisJbWtkaXIgL21udC9jZHJvbQorCW1vdW50IC9kZXYvY2Ryb20gL21udC9jZHJvbSAtdCBpc285NjYwIC1vIHJvCisKK0lmLCBhZnRlciBkb2luZyBhbGwgb2YgdGhlIGFib3ZlLCBtb3VudCBkb2Vzbid0IHdvcmsgYW5kIHlvdSBzZWUKK2Vycm9ycyBmcm9tIHRoZSBkcml2ZXIgKHdpdGggZG1lc2cpIGNvbXBsYWluaW5nIGFib3V0IGBzdGF0dXM9MHhmZicsCit0aGlzIG1lYW5zIHRoYXQgdGhlIGhhcmR3YXJlIGlzIG5vdCByZXNwb25kaW5nIHRvIHRoZSBkcml2ZXIncyBhdHRlbXB0cwordG8gcmVhZCBpdC4gIE9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHByb2JhYmx5IHRoZSBwcm9ibGVtOgorCisgIC0gWW91ciBoYXJkd2FyZSBpcyBicm9rZW4uCisKKyAgLSBZb3UgYXJlIHVzaW5nIHRoZSB3cm9uZyBhZGRyZXNzIGZvciB0aGUgZGV2aWNlLCBvciB5b3UgaGF2ZSB0aGUKKyAgICBkcml2ZSBqdW1wZXJlZCB3cm9uZy4gIFJldmlldyB0aGUgY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbnMgYWJvdmUuCisKKyAgLSBZb3VyIElERSBjb250cm9sbGVyIHJlcXVpcmVzIHNvbWUgbm9uc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UKKyAgICBiZWZvcmUgaXQgd2lsbCB3b3JrIHByb3Blcmx5LiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlcmUgd2lsbCBvZnRlbgorICAgIGJlIGEgc2VwYXJhdGUgTVMtRE9TIGRyaXZlciBqdXN0IGZvciB0aGUgY29udHJvbGxlci4gIElERSBpbnRlcmZhY2VzCisgICAgb24gc291bmQgY2FyZHMgdXN1YWxseSBmYWxsIGludG8gdGhpcyBjYXRlZ29yeS4gIFN1Y2ggY29uZmlndXJhdGlvbnMKKyAgICBjYW4gb2Z0ZW4gYmUgbWFkZSB0byB3b3JrIGJ5IGZpcnN0IGJvb3RpbmcgTVMtRE9TLCBsb2FkaW5nIHRoZQorICAgIGFwcHJvcHJpYXRlIGRyaXZlcnMsIGFuZCB0aGVuIHdhcm0tYm9vdGluZyBsaW51eCAod2l0aG91dCBwb3dlcmluZworICAgIG9mZikuICBUaGlzIGNhbiBiZSBhdXRvbWF0ZWQgdXNpbmcgbG9hZGxpbiBpbiB0aGUgTVMtRE9TIGF1dG9leGVjLgorCitJZiB5b3UgYWx3YXlzIGdldCB0aW1lb3V0IGVycm9ycywgaW50ZXJydXB0cyBmcm9tIHRoZSBkcml2ZSBhcmUgcHJvYmFibHkKK25vdCBtYWtpbmcgaXQgdG8gdGhlIGhvc3QuICBDaGVjayBob3cgeW91IGhhdmUgdGhlIGhhcmR3YXJlIGp1bXBlcmVkCithbmQgbWFrZSBzdXJlIGl0IG1hdGNoZXMgd2hhdCB0aGUgZHJpdmVyIGV4cGVjdHMgKHNlZSB0aGUgY29uZmlndXJhdGlvbgoraW5zdHJ1Y3Rpb25zIGFib3ZlKS4gIElmIHlvdSBoYXZlIGEgUENJIHN5c3RlbSwgYWxzbyBjaGVjayB0aGUgQklPUworc2V0dXA7IEkndmUgaGFkIG9uZSByZXBvcnQgb2YgYSBzeXN0ZW0gd2hpY2ggd2FzIHNoaXBwZWQgd2l0aCBJUlEgMTUKK2Rpc2FibGVkIGJ5IHRoZSBCSU9TLgorCitUaGUga2VybmVsIGlzIGFibGUgdG8gZXhlY3V0ZSBiaW5hcmllcyBkaXJlY3RseSBvZmYgb2YgdGhlIGNkcm9tLAorcHJvdmlkZWQgaXQgaXMgbW91bnRlZCB3aXRoIHRoZSBkZWZhdWx0IGJsb2NrIHNpemUgb2YgMTAyNCAoYXMgYWJvdmUpLgorCitQbGVhc2UgcGFzcyBvbiBhbnkgZmVlZGJhY2sgb24gYW55IG9mIHRoaXMgc3R1ZmYgdG8gdGhlIG1haW50YWluZXIsCit3aG9zZSBhZGRyZXNzIGNhbiBiZSBmb3VuZCBpbiBsaW51eC9NQUlOVEFJTkVSUy4KKworTm90ZSB0aGF0IGlmIEJPVEggaGQuYyBhbmQgaWRlLmMgYXJlIGNvbmZpZ3VyZWQgaW50byB0aGUga2VybmVsLAoraGQuYyB3aWxsIG5vcm1hbGx5IGJlIGFsbG93ZWQgdG8gY29udHJvbCB0aGUgcHJpbWFyeSBJREUgaW50ZXJmYWNlLgorVGhpcyBpcyB1c2VmdWwgZm9yIG9sZGVyIGhhcmR3YXJlIHRoYXQgbWF5IGJlIGluY29tcGF0aWJsZSB3aXRoIGlkZS5jLAorYW5kIHN0aWxsIGFsbG93cyBuZXdlciBoYXJkd2FyZSB0byBydW4gb24gdGhlIDJuZC8zcmQvNHRoIElERSBwb3J0cwordW5kZXIgY29udHJvbCBvZiBpZGUuYy4gICBUbyBoYXZlIGlkZS5jIGFsc28gInRha2Ugb3ZlciIgdGhlIHByaW1hcnkKK0lERSBwb3J0IGluIHRoaXMgc2l0dWF0aW9uLCB1c2UgdGhlICJjb21tYW5kIGxpbmUiIHBhcmFtZXRlcjogIGlkZTA9MHgxZjAKKworVGhlIElERSBkcml2ZXIgaXMgbW9kdWxhcml6ZWQuICBUaGUgaGlnaCBsZXZlbCBkaXNrL0NELVJPTS90YXBlL2Zsb3BweQorZHJpdmVycyBjYW4gYWx3YXlzIGJlIGNvbXBpbGVkIGFzIGxvYWRhYmxlIG1vZHVsZXMsIHRoZSBjaGlwc2V0IGRyaXZlcnMKK2NhbiBvbmx5IGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBjb3JlIGNvZGUgKGlkZS5jKSBjYW4gYmUKK2NvbXBpbGVkIGFzIGEgbG9hZGFibGUgbW9kdWxlIHByb3ZpZGVkIG5vIGNoaXBzZXQgc3VwcG9ydCBpcyBuZWVkZWQuCisKK1doZW4gdXNpbmcgaWRlLmMgYXMgYSBtb2R1bGUgaW4gY29tYmluYXRpb24gd2l0aCBrbW9kLCBhZGQ6CisKKwlhbGlhcyBibG9jay1tYWpvci0zIGlkZS1wcm9iZQorCit0byAvZXRjL21vZHByb2JlLmNvbmYuCisKK1doZW4gaWRlLmMgaXMgdXNlZCBhcyBhIG1vZHVsZSwgeW91IGNhbiBwYXNzIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHRvIHRoZQorZHJpdmVyIHVzaW5nIHRoZSAib3B0aW9ucz0iIGtleXdvcmQgdG8gaW5zbW9kLCB3aGlsZSByZXBsYWNpbmcgYW55ICcsJyB3aXRoCisnOycuICBGb3IgZXhhbXBsZToKKworCWluc21vZCBpZGUubyBvcHRpb25zPSJpZGUwPXNlcmlhbGl6ZSBpZGUxPXNlcmlhbGl6ZSBpZGUyPTB4MWU4OzB4M2VlOzExIgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1N1bW1hcnkgb2YgaWRlIGRyaXZlciBwYXJhbWV0ZXJzIGZvciBrZXJuZWwgY29tbWFuZCBsaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgImhkeD0iICBpcyByZWNvZ25pemVkIGZvciBhbGwgIngiIGZyb20gImEiIHRvICJoIiwgc3VjaCBhcyAiaGRjIi4KKyAKKyAiaWRleD0iIGlzIHJlY29nbml6ZWQgZm9yIGFsbCAieCIgZnJvbSAiMCIgdG8gIjMiLCBzdWNoIGFzICJpZGUxIi4KKworICJoZHg9bm9wcm9iZSIJCTogZHJpdmUgbWF5IGJlIHByZXNlbnQsIGJ1dCBkbyBub3QgcHJvYmUgZm9yIGl0CisgCisgImhkeD1ub25lIgkJOiBkcml2ZSBpcyBOT1QgcHJlc2VudCwgaWdub3JlIGNtb3MgYW5kIGRvIG5vdCBwcm9iZQorIAorICJoZHg9bm93ZXJyIgkJOiBpZ25vcmUgdGhlIFdSRVJSX1NUQVQgYml0IG9uIHRoaXMgZHJpdmUKKyAKKyAiaGR4PWNkcm9tIgkJOiBkcml2ZSBpcyBwcmVzZW50LCBhbmQgaXMgYSBjZHJvbSBkcml2ZQorIAorICJoZHg9Y3lsLGhlYWQsc2VjdCIJOiBkaXNrIGRyaXZlIGlzIHByZXNlbnQsIHdpdGggc3BlY2lmaWVkIGdlb21ldHJ5CisKKyAiaGR4PXJlbWFwIgkJOiByZW1hcCBhY2Nlc3Mgb2Ygc2VjdG9yIDAgdG8gc2VjdG9yIDEgKGZvciBFWkRyaXZlKQorCisgImhkeD1yZW1hcDYzIgkJOiByZW1hcCB0aGUgZHJpdmU6IGFkZCA2MyB0byBhbGwgc2VjdG9yIG51bWJlcnMKKwkJCSAgKGZvciBETSBPblRyYWNrKQorIAorICJoZHg9YXV0b3R1bmUiCQk6IGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gdHVuZSBpbnRlcmZhY2Ugc3BlZWQKKwkJCSAgdG8gdGhlIGZhc3Rlc3QgUElPIG1vZGUgc3VwcG9ydGVkLAorCQkJICBpZiBwb3NzaWJsZSBmb3IgdGhpcyBkcml2ZSBvbmx5LgorCQkJICBOb3QgZnVsbHkgc3VwcG9ydGVkIGJ5IGFsbCBjaGlwc2V0IHR5cGVzLAorCQkJICBhbmQgcXVpdGUgbGlrZWx5IHRvIGNhdXNlIHRyb3VibGUgd2l0aAorCQkJICBvbGRlci9vZGQgSURFIGRyaXZlcy4KKworICJoZHg9c3dhcGRhdGEiCQk6IHdoZW4gdGhlIGRyaXZlIGlzIGEgZGlzaywgYnl0ZSBzd2FwIGFsbCBkYXRhCisKKyAiaGR4PWJzd2FwIgkJOiBzYW1lIGFzIGFib3ZlLi4uLi4uLi4uLgorCisgImhkeD1zY3NpIgkJOiB0aGUgcmV0dXJuIG9mIHRoZSBpZGUtc2NzaSBmbGFnLCB0aGlzIGlzIHVzZWZ1bCBmb3IKKyAJCQkgIGFsbG93aW5nIGlkZS1mbG9wcHksIGlkZS10YXBlLCBhbmQgaWRlLWNkcm9tfHdyaXRlcnMKKyAJCQkgIHRvIHVzZSBpZGUtc2NzaSBlbXVsYXRpb24gb24gYSBkZXZpY2Ugc3BlY2lmaWMgb3B0aW9uLgorCisgImlkZWJ1cz14eCIJCTogaW5mb3JtIElERSBkcml2ZXIgb2YgVkVTQS9QQ0kgYnVzIHNwZWVkIGluIE1IeiwKKwkJCSAgd2hlcmUgInh4IiBpcyBiZXR3ZWVuIDIwIGFuZCA2NiBpbmNsdXNpdmUsCisJCQkgIHVzZWQgd2hlbiB0dW5pbmcgY2hpcHNldCBQSU8gbW9kZXMuCisJCQkgIEZvciBQQ0kgYnVzLCAyNSBpcyBjb3JyZWN0IGZvciBhIFA3NSBzeXN0ZW0sCisJCQkgIDMwIGlzIGNvcnJlY3QgZm9yIFA5MCxQMTIwLFAxODAgc3lzdGVtcywKKwkJCSAgYW5kIDMzIGlzIHVzZWQgZm9yIFAxMDAsUDEzMyxQMTY2IHN5c3RlbXMuCisJCQkgIElmIGluIGRvdWJ0LCB1c2UgaWRlYnVzPTMzIGZvciBQQ0kuCisJCQkgIEFzIGZvciBWTEIsIGl0IGlzIHNhZmVzdCB0byBub3Qgc3BlY2lmeSBpdC4KKwkJCSAgQmlnZ2VyIHZhbHVlcyBhcmUgc2FmZXIgdGhhbiBzbWFsbGVyIG9uZXMuCisKKyAiaWRleD1ub3Byb2JlIgkJOiBkbyBub3QgYXR0ZW1wdCB0byBhY2Nlc3MvdXNlIHRoaXMgaW50ZXJmYWNlCisgCisgImlkZXg9YmFzZSIJCTogcHJvYmUgZm9yIGFuIGludGVyZmFjZSBhdCB0aGUgYWRkciBzcGVjaWZpZWQsCisJCQkgIHdoZXJlICJiYXNlIiBpcyB1c3VhbGx5IDB4MWYwIG9yIDB4MTcwCisJCQkgIGFuZCAiY3RsIiBpcyBhc3N1bWVkIHRvIGJlICJiYXNlIisweDIwNgorCQkJICAKKyAiaWRleD1iYXNlLGN0bCIJOiBzcGVjaWZ5IGJvdGggYmFzZSBhbmQgY3RsCisKKyAiaWRleD1iYXNlLGN0bCxpcnEiCTogc3BlY2lmeSBiYXNlLCBjdGwsIGFuZCBpcnEgbnVtYmVyCisgCisgImlkZXg9YXV0b3R1bmUiCTogZHJpdmVyIHdpbGwgYXR0ZW1wdCB0byB0dW5lIGludGVyZmFjZSBzcGVlZAorCQkJICB0byB0aGUgZmFzdGVzdCBQSU8gbW9kZSBzdXBwb3J0ZWQsCisJCQkgIGZvciBhbGwgZHJpdmVzIG9uIHRoaXMgaW50ZXJmYWNlLgorCQkJICBOb3QgZnVsbHkgc3VwcG9ydGVkIGJ5IGFsbCBjaGlwc2V0IHR5cGVzLAorCQkJICBhbmQgcXVpdGUgbGlrZWx5IHRvIGNhdXNlIHRyb3VibGUgd2l0aAorCQkJICBvbGRlci9vZGQgSURFIGRyaXZlcy4KKworICJpZGV4PW5vYXV0b3R1bmUiCTogZHJpdmVyIHdpbGwgTk9UIGF0dGVtcHQgdG8gdHVuZSBpbnRlcmZhY2Ugc3BlZWQgCisJCQkgIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG1vc3QgY2hpcHNldHMsCisJCQkgIGV4Y2VwdCB0aGUgY21kNjQwLgorCisgImlkZXg9c2VyaWFsaXplIgk6IGRvIG5vdCBvdmVybGFwIG9wZXJhdGlvbnMgb24gaWRleC4gUGxlYXNlIG5vdGUKKwkJCSAgdGhhdCB5b3Ugd2lsbCBoYXZlIHRvIHNwZWNpZnkgdGhpcyBvcHRpb24gZm9yCisJCQkgIGJvdGggdGhlIHJlc3BlY2l0dmUgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGNoYW5uZWwKKwkJCSAgdG8gdGFrZSBlZmZlY3QuCisKKyAiaWRleD1mb3VyIgkJOiBmb3VyIGRyaXZlcyBvbiBpZGV4IGFuZCBpZGUoeF4xKSBzaGFyZSBzYW1lIHBvcnRzCisJCQkKKyAiaWRleD1yZXNldCIJCTogcmVzZXQgaW50ZXJmYWNlIGFmdGVyIHByb2JlCisgCisgImlkZXg9ZG1hIgkJOiBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZS91c2UgRE1BIGlmIHBvc3NpYmxlLgorCisgImlkZXg9YXRhNjYiCQk6IGluZm9ybXMgdGhlIGludGVyZmFjZSB0aGF0IGl0IGhhcyBhbiA4MGMgY2FibGUKKwkJCSAgZm9yIGNoaXBzZXRzIHRoYXQgYXJlIEFUQS02NiBjYXBhYmxlLCBidXQgdGhlCisJCQkgIGFiaWxpdHkgdG8gYml0IHRlc3QgZm9yIGRldGVjdGlvbiBpcyBjdXJyZW50bHkKKwkJCSAgdW5rbm93bi4KKworICJpZGU9cmV2ZXJzZSIJCTogZm9ybWVybHkgY2FsbGVkIHRvIHBjaSBzdWItc3lzdGVtLCBidXQgbm93IGxvY2FsLgorCisgImlkZT1ub2RtYSIJCTogZGlzYWJsZSBETUEgZ2xvYmFsbHkgZm9yIHRoZSBJREUgc3Vic3lzdGVtLgorCitUaGUgZm9sbG93aW5nIGFyZSB2YWxpZCBPTkxZIG9uIGlkZTAsIHdoaWNoIHVzdWFsbHkgY29ycmVzcG9uZHMKK3RvIHRoZSBmaXJzdCBBVEEgaW50ZXJmYWNlIGZvdW5kIG9uIHRoZSBwYXJ0aWN1bGFyIGhvc3QsIGFuZCB0aGUgZGVmYXVsdHMgZm9yCit0aGUgYmFzZSxjdGwgcG9ydHMgbXVzdCBub3QgYmUgYWx0ZXJlZC4KKworICJpZGUwPWR0YzIyNzgiCQk6IHByb2JlL3N1cHBvcnQgRFRDMjI3OCBpbnRlcmZhY2UKKyAiaWRlMD1odDY1NjBiIgkJOiBwcm9iZS9zdXBwb3J0IEhUNjU2MEIgaW50ZXJmYWNlCisgImlkZTA9Y21kNjQwX3ZsYiIJOiAqUkVRVUlSRUQqIGZvciBWTEIgY2FyZHMgd2l0aCB0aGUgQ01ENjQwIGNoaXAKKwkJCSAgKG5vdCBmb3IgUENJIC0tIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQpCisgImlkZTA9cWQ2NXh4IgkJOiBwcm9iZS9zdXBwb3J0IHFkNjV4eCBpbnRlcmZhY2UKKyAiaWRlMD1hbGkxNHh4IgkJOiBwcm9iZS9zdXBwb3J0IGFsaTE0eHggY2hpcHNldHMgKEFMSSBNMTQzOS9NMTQ0My9NMTQ0NSkKKyAiaWRlMD11bWM4NjcyIgkJOiBwcm9iZS9zdXBwb3J0IHVtYzg2NzIgY2hpcHNldHMKKworICJpZGU9ZG91YmxlciIJCTogcHJvYmUvc3VwcG9ydCBJREUgZG91YmxlcnMgb24gQW1pZ2EKKworVGhlcmUgbWF5IGJlIG1vcmUgb3B0aW9ucyB0aGFuIHNob3duIC0tIHVzZSB0aGUgc291cmNlLCBMdWtlIQorCitFdmVyeXRoaW5nIGVsc2UgaXMgcmVqZWN0ZWQgd2l0aCBhICJCQUQgT1BUSU9OIiBtZXNzYWdlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJREUgQVRBUEkgc3RyZWFtaW5nIHRhcGUgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGlzIGEgcGFydCBvZiB0aGUgTGludXggaWRlIGRyaXZlciBhbmQgd29ya3MgaW4gY28tb3BlcmF0aW9uCit3aXRoIGxpbnV4L2RyaXZlcnMvYmxvY2svaWRlLmMuCisKK1RoZSBkcml2ZXIsIGluIGNvLW9wZXJhdGlvbiB3aXRoIGlkZS5jLCBiYXNpY2FsbHkgdHJhdmVyc2VzIHRoZQorcmVxdWVzdC1saXN0IGZvciB0aGUgYmxvY2sgZGV2aWNlIGludGVyZmFjZS4gVGhlIGNoYXJhY3RlciBkZXZpY2UKK2ludGVyZmFjZSwgb24gdGhlIG90aGVyIGhhbmQsIGNyZWF0ZXMgbmV3IHJlcXVlc3RzLCBhZGRzIHRoZW0KK3RvIHRoZSByZXF1ZXN0LWxpc3Qgb2YgdGhlIGJsb2NrIGRldmljZSwgYW5kIHdhaXRzIGZvciB0aGVpciBjb21wbGV0aW9uLgorCitQaXBlbGluZWQgb3BlcmF0aW9uIG1vZGUgaXMgbm93IHN1cHBvcnRlZCBvbiBib3RoIHJlYWRzIGFuZCB3cml0ZXMuCisKK1RoZSBibG9jayBkZXZpY2UgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgYXJlIGRldGVybWluZWQgZnJvbSB0aGUKK3RhcGUncyByZWxhdGl2ZSBwb3NpdGlvbiBpbiB0aGUgaWRlIGludGVyZmFjZXMsIGFzIGV4cGxhaW5lZCBpbiBpZGUuYy4KKworVGhlIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKworIGh0MAkJbWFqb3IgMzcsIG1pbm9yIDAJZmlyc3QgIElERSB0YXBlLCByZXdpbmQgb24gY2xvc2UuCisgaHQxCQltYWpvciAzNywgbWlub3IgMQlzZWNvbmQgSURFIHRhcGUsIHJld2luZCBvbiBjbG9zZS4KKyAuLi4KKyBuaHQwCQltYWpvciAzNywgbWlub3IgMTI4CWZpcnN0ICBJREUgdGFwZSwgbm8gcmV3aW5kIG9uIGNsb3NlLgorIG5odDEJCW1ham9yIDM3LCBtaW5vciAxMjkJc2Vjb25kIElERSB0YXBlLCBubyByZXdpbmQgb24gY2xvc2UuCisgLi4uCisKK1J1biAvZGV2L01BS0VERVYgdG8gY3JlYXRlIHRoZSBhYm92ZSBlbnRyaWVzLgorCitUaGUgZ2VuZXJhbCBtYWduZXRpYyB0YXBlIGNvbW1hbmRzIGNvbXBhdGlibGUgaW50ZXJmYWNlLCBhcyBkZWZpbmVkIGJ5CitpbmNsdWRlL2xpbnV4L210aW8uaCwgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLgorCitHZW5lcmFsIGlkZSBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzdWNoIGFzIHRoZSBpbnRlcnJ1cHQtdW5tYXNrCitmbGFnLCBjYW4gYmUgY29uZmlndXJlZCBieSBpc3N1aW5nIGFuIGlvY3RsIHRvIHRoZSBibG9jayBkZXZpY2UgaW50ZXJmYWNlLAorYXMgYW55IG90aGVyIGlkZSBkZXZpY2UuCisKK091ciBvd24gaWRlLXRhcGUgaW9jdGwncyBjYW4gYmUgaXNzdWVkIHRvIGVpdGhlciB0aGUgYmxvY2sgZGV2aWNlIG9yCit0aGUgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2UuCisKK01heGltYWwgdGhyb3VnaHB1dCB3aXRoIG1pbmltYWwgYnVzIGxvYWQgd2lsbCB1c3VhbGx5IGJlIGFjaGlldmVkIGluIHRoZQorZm9sbG93aW5nIHNjZW5hcmlvOgorCisJMS4JaWRlLXRhcGUgaXMgb3BlcmF0aW5nIGluIHRoZSBwaXBlbGluZWQgb3BlcmF0aW9uIG1vZGUuCisJMi4JTm8gYnVmZmVyaW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgdXNlciBiYWNrdXAgcHJvZ3JhbS4KKworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgVGVybWlub2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0KK0lERSA9IEludGVncmF0ZWQgRHJpdmUgRWxlY3Ryb25pY3MsIG1lYW5pbmcgdGhhdCBlYWNoIGRyaXZlIGhhcyBhIGJ1aWx0LWluCitjb250cm9sbGVyLCB3aGljaCBpcyB3aHkgYW4gIklERSBpbnRlcmZhY2UgY2FyZCIgaXMgbm90IGEgImNvbnRyb2xsZXIgY2FyZCIuCisKK0FUQSA9IEFUICh0aGUgb2xkIElCTSAyODYgY29tcHV0ZXIpIEF0dGFjaG1lbnQgSW50ZXJmYWNlLCBhIGRyYWZ0IEFtZXJpY2FuCitOYXRpb25hbCBTdGFuZGFyZCBmb3IgY29ubmVjdGluZyBoYXJkIGRyaXZlcyB0byBQQ3MuICBUaGlzIGlzIHRoZSBvZmZpY2lhbAorbmFtZSBmb3IgIklERSIuCisKK1RoZSBsYXRlc3Qgc3RhbmRhcmRzIGRlZmluZSBzb21lIGVuaGFuY2VtZW50cywga25vd24gYXMgdGhlIEFUQS02IHNwZWMsCit3aGljaCBncmV3IG91dCBvZiB2ZW5kb3Itc3BlY2lmaWMgIkVuaGFuY2VkIElERSIgKEVJREUpIGltcGxlbWVudGF0aW9ucy4KKworQVRBUEkgPSBBVEEgUGFja2V0IEludGVyZmFjZSwgYSBuZXcgcHJvdG9jb2wgZm9yIGNvbnRyb2xsaW5nIHRoZSBkcml2ZXMsCitzaW1pbGFyIHRvIFNDU0kgcHJvdG9jb2xzLCBjcmVhdGVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEFUQTIgc3RhbmRhcmQuCitBVEFQSSBpcyBjdXJyZW50bHkgdXNlZCBmb3IgY29udHJvbGxpbmcgQ0RST00sIFRBUEUgYW5kIEZMT1BQWSAoWklQIG9yCitMUzEyMC8yNDApIGRldmljZXMsIHJlbW92YWJsZSBSL1cgY2FydHJpZGdlcywgYW5kIGZvciBoaWdoIGNhcGFjaXR5IGhhcmQgZGlzaworZHJpdmVzLgorCittbG9yZEBwb2JveC5jb20KKy0tCisKK1dlZCBBcHIgMTcgMjI6NTI6NDQgQ0VTVCAyMDAyIGVkaXRlZCBieSBNYXJjaW4gRGFsZWNraSwgdGhlIGN1cnJlbnQKK21haW50YWluZXIuCisKK1dlZCBBdWcgMjAgMjI6MzE6MjkgQ0VTVCAyMDAzIHVwZGF0ZWQgaWRlIGJvb3QgdXB0aW9ucyB0byBjdXJyZW50IGlkZS5jCitjb21tZW50cyBhdCAyLjYuMC10ZXN0NCB0aW1lLiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dCBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC9pcG9pYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlMTg0YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC9pcG9pYi50eHQKQEAgLTAsMCArMSw1NiBAQAorSVAgT1ZFUiBJTkZJTklCQU5ECisKKyAgVGhlIGliX2lwb2liIGRyaXZlciBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVAgb3ZlciBJbmZpbmlCYW5kCisgIHByb3RvY29sIGFzIHNwZWNpZmllZCBieSB0aGUgbGF0ZXN0IEludGVybmV0LURyYWZ0cyBpc3N1ZWQgYnkgdGhlCisgIElFVEYgaXBvaWIgd29ya2luZyBncm91cC4gIEl0IGlzIGEgIm5hdGl2ZSIgaW1wbGVtZW50YXRpb24gaW4gdGhlCisgIHNlbnNlIG9mIHNldHRpbmcgdGhlIGludGVyZmFjZSB0eXBlIHRvIEFSUEhSRF9JTkZJTklCQU5EIGFuZCB0aGUKKyAgaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggdG8gMjAgKGVhcmxpZXIgcHJvcHJpZXRhcnkgaW1wbGVtZW50YXRpb25zCisgIG1hc3F1ZXJhZGVkIHRvIHRoZSBrZXJuZWwgYXMgZXRoZXJuZXQgaW50ZXJmYWNlcykuCisKK1BhcnRpdGlvbnMgYW5kIFBfS2V5cworCisgIFdoZW4gdGhlIElQb0lCIGRyaXZlciBpcyBsb2FkZWQsIGl0IGNyZWF0ZXMgb25lIGludGVyZmFjZSBmb3IgZWFjaAorICBwb3J0IHVzaW5nIHRoZSBQX0tleSBhdCBpbmRleCAwLiAgVG8gY3JlYXRlIGFuIGludGVyZmFjZSB3aXRoIGEKKyAgZGlmZmVyZW50IFBfS2V5LCB3cml0ZSB0aGUgZGVzaXJlZCBQX0tleSBpbnRvIHRoZSBtYWluIGludGVyZmFjZSdzCisgIC9zeXMvY2xhc3MvbmV0LzxpbnRmIG5hbWU+L2NyZWF0ZV9jaGlsZCBmaWxlLiAgRm9yIGV4YW1wbGU6CisKKyAgICBlY2hvIDB4ODAwMSA+IC9zeXMvY2xhc3MvbmV0L2liMC9jcmVhdGVfY2hpbGQKKworICBUaGlzIHdpbGwgY3JlYXRlIGFuIGludGVyZmFjZSBuYW1lZCBpYjAuODAwMSB3aXRoIFBfS2V5IDB4ODAwMS4gIFRvCisgIHJlbW92ZSBhIHN1YmludGVyZmFjZSwgdXNlIHRoZSAiZGVsZXRlX2NoaWxkIiBmaWxlOgorCisgICAgZWNobyAweDgwMDEgPiAvc3lzL2NsYXNzL25ldC9pYjAvZGVsZXRlX2NoaWxkCisKKyAgVGhlIFBfS2V5IGZvciBhbnkgaW50ZXJmYWNlIGlzIGdpdmVuIGJ5IHRoZSAicGtleSIgZmlsZSwgYW5kIHRoZQorICBtYWluIGludGVyZmFjZSBmb3IgYSBzdWJpbnRlcmZhY2UgaXMgaW4gInBhcmVudC4iCisKK0RlYnVnZ2luZyBJbmZvcm1hdGlvbgorCisgIEJ5IGNvbXBpbGluZyB0aGUgSVBvSUIgZHJpdmVyIHdpdGggQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcgc2V0CisgIHRvICd5JywgdHJhY2luZyBtZXNzYWdlcyBhcmUgY29tcGlsZWQgaW50byB0aGUgZHJpdmVyLiAgVGhleSBhcmUKKyAgdHVybmVkIG9uIGJ5IHNldHRpbmcgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIGRlYnVnX2xldmVsIGFuZAorICBtY2FzdF9kZWJ1Z19sZXZlbCB0byAxLiAgVGhlc2UgcGFyYW1ldGVycyBjYW4gYmUgY29udHJvbGxlZCBhdAorICBydW50aW1lIHRocm91Z2ggZmlsZXMgaW4gL3N5cy9tb2R1bGUvaWJfaXBvaWIvLgorCisgIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHIGFsc28gZW5hYmxlcyB0aGUgImlwb2liX2RlYnVnZnMiCisgIHZpcnR1YWwgZmlsZXN5c3RlbS4gIEJ5IG1vdW50aW5nIHRoaXMgZmlsZXN5c3RlbSwgZm9yIGV4YW1wbGUgd2l0aAorCisgICAgbWtkaXIgLXAgL2lwb2liX2RlYnVnZnMKKyAgICBtb3VudCAtdCBpcG9pYl9kZWJ1Z2ZzIG5vbmUgL2lwb2liX2RlYnVmcworCisgIGl0IGlzIHBvc3NpYmxlIHRvIGdldCBzdGF0aXN0aWNzIGFib3V0IG11bHRpY2FzdCBncm91cHMgZnJvbSB0aGUKKyAgZmlsZXMgL2lwb2liX2RlYnVnZnMvaWIwX21jZyBhbmQgc28gb24uCisKKyAgVGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIG9wdGlvbiBpcyBuZWdsaWdpYmxlLCBzbyBpdAorICBpcyBzYWZlIHRvIGVuYWJsZSB0aGlzIG9wdGlvbiB3aXRoIGRlYnVnX2xldmVsIHNldCB0byAwIGZvciBub3JtYWwKKyAgb3BlcmF0aW9uLgorCisgIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgZW5hYmxlcyBldmVuIG1vcmUgZGVidWcgb3V0cHV0IGluCisgIHRoZSBkYXRhIHBhdGggd2hlbiBkYXRhX2RlYnVnX2xldmVsIGlzIHNldCB0byAxLiAgSG93ZXZlciwgZXZlbiB3aXRoCisgIHRoZSBvdXRwdXQgZGlzYWJsZWQsIGVuYWJsaW5nIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gd2lsbCBhZmZlY3QKKyAgcGVyZm9ybWFuY2UsIGJlY2F1c2UgaXQgYWRkcyB0ZXN0cyB0byB0aGUgZmFzdCBwYXRoLgorCitSZWZlcmVuY2VzCisKKyAgSUVURiBJUCBvdmVyIEluZmluaUJhbmQgKGlwb2liKSBXb3JraW5nIEdyb3VwCisgICAgaHR0cDovL2lldGYub3JnL2h0bWwuY2hhcnRlcnMvaXBvaWItY2hhcnRlci5odG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvc3lzZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3N5c2ZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGQ1MTliCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3N5c2ZzLnR4dApAQCAtMCwwICsxLDY2IEBACitTWVNGUyBGSUxFUworCisgIEZvciBlYWNoIEluZmluaUJhbmQgZGV2aWNlLCB0aGUgSW5maW5pQmFuZCBkcml2ZXJzIGNyZWF0ZSB0aGUKKyAgZm9sbG93aW5nIGZpbGVzIHVuZGVyIC9zeXMvY2xhc3MvaW5maW5pYmFuZC88ZGV2aWNlIG5hbWU+OgorCisgICAgbm9kZV90eXBlICAgICAgLSBOb2RlIHR5cGUgKENBLCBzd2l0Y2ggb3Igcm91dGVyKQorICAgIG5vZGVfZ3VpZCAgICAgIC0gTm9kZSBHVUlECisgICAgc3lzX2ltYWdlX2d1aWQgLSBTeXN0ZW0gaW1hZ2UgR1VJRAorCisgIEluIGFkZGl0aW9uLCB0aGVyZSBpcyBhICJwb3J0cyIgc3ViZGlyZWN0b3J5LCB3aXRoIG9uZSBzdWJkaXJlY3RvcnkKKyAgZm9yIGVhY2ggcG9ydC4gIEZvciBleGFtcGxlLCBpZiBtdGhjYTAgaXMgYSAyLXBvcnQgSENBLCB0aGVyZSB3aWxsCisgIGJlIHR3byBkaXJlY3RvcmllczoKKworICAgIC9zeXMvY2xhc3MvaW5maW5pYmFuZC9tdGhjYTAvcG9ydHMvMQorICAgIC9zeXMvY2xhc3MvaW5maW5pYmFuZC9tdGhjYTAvcG9ydHMvMgorCisgIChBIHN3aXRjaCB3aWxsIG9ubHkgaGF2ZSBhIHNpbmdsZSAiMCIgc3ViZGlyZWN0b3J5IGZvciBzd2l0Y2ggcG9ydAorICAwOyBubyBzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCBmb3Igbm9ybWFsIHN3aXRjaCBwb3J0cykKKworICBJbiBlYWNoIHBvcnQgc3ViZGlyZWN0b3J5LCB0aGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjcmVhdGVkOgorCisgICAgY2FwX21hc2sgICAgICAgLSBQb3J0IGNhcGFiaWxpdHkgbWFzaworICAgIGxpZCAgICAgICAgICAgIC0gUG9ydCBMSUQKKyAgICBsaWRfbWFza19jb3VudCAtIFBvcnQgTElEIG1hc2sgY291bnQKKyAgICByYXRlICAgICAgICAgICAtIFBvcnQgZGF0YSByYXRlIChhY3RpdmUgd2lkdGggKiBhY3RpdmUgc3BlZWQpCisgICAgc21fbGlkICAgICAgICAgLSBTdWJuZXQgbWFuYWdlciBMSUQgZm9yIHBvcnQncyBzdWJuZXQKKyAgICBzbV9zbCAgICAgICAgICAtIFN1Ym5ldCBtYW5hZ2VyIFNMIGZvciBwb3J0J3Mgc3VibmV0CisgICAgc3RhdGUgICAgICAgICAgLSBQb3J0IHN0YXRlIChET1dOLCBJTklULCBBUk1FRCwgQUNUSVZFIG9yIEFDVElWRV9ERUZFUikKKyAgICBwaHlzX3N0YXRlICAgICAtIFBvcnQgcGh5c2ljYWwgc3RhdGUgKFNsZWVwLCBQb2xsaW5nLCBMaW5rVXAsIGV0YykKKworICBUaGVyZSBpcyBhbHNvIGEgImNvdW50ZXJzIiBzdWJkaXJlY3RvcnksIHdpdGggZmlsZXMKKworICAgIFZMMTVfZHJvcHBlZAorICAgIGV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnMKKyAgICBsaW5rX2Rvd25lZAorICAgIGxpbmtfZXJyb3JfcmVjb3ZlcnkKKyAgICBsb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnMKKyAgICBwb3J0X3Jjdl9jb25zdHJhaW50X2Vycm9ycworICAgIHBvcnRfcmN2X2RhdGEKKyAgICBwb3J0X3Jjdl9lcnJvcnMKKyAgICBwb3J0X3Jjdl9wYWNrZXRzCisgICAgcG9ydF9yY3ZfcmVtb3RlX3BoeXNpY2FsX2Vycm9ycworICAgIHBvcnRfcmN2X3N3aXRjaF9yZWxheV9lcnJvcnMKKyAgICBwb3J0X3htaXRfY29uc3RyYWludF9lcnJvcnMKKyAgICBwb3J0X3htaXRfZGF0YQorICAgIHBvcnRfeG1pdF9kaXNjYXJkcworICAgIHBvcnRfeG1pdF9wYWNrZXRzCisgICAgc3ltYm9sX2Vycm9yCisKKyAgRWFjaCBvZiB0aGVzZSBmaWxlcyBjb250YWlucyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBmcm9tIHRoZSBwb3J0J3MKKyAgUGVyZm9ybWFuY2UgTWFuYWdlbWVudCBQb3J0Q291bnRlcnMgYXR0cmlidXRlLCBhcyBkZXNjcmliZWQgaW4KKyAgc2VjdGlvbiAxNi4xLjMuNSBvZiB0aGUgSW5maW5pQmFuZCBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbi4KKworICBUaGUgInBrZXlzIiBhbmQgImdpZHMiIHN1YmRpcmVjdG9yaWVzIGNvbnRhaW4gb25lIGZpbGUgZm9yIGVhY2gKKyAgZW50cnkgaW4gdGhlIHBvcnQncyBQX0tleSBvciBHSUQgdGFibGUgcmVzcGVjdGl2ZWx5LiAgRm9yIGV4YW1wbGUsCisgIHBvcnRzLzEvcGtleXMvMTAgY29udGFpbnMgdGhlIHZhbHVlIGF0IGluZGV4IDEwIGluIHBvcnQgMSdzIFBfS2V5CisgIHRhYmxlLgorCitNVEhDQQorCisgIFRoZSBNZWxsYW5veCBIQ0EgZHJpdmVyIGFsc28gY3JlYXRlcyB0aGUgZmlsZXM6CisKKyAgICBod19yZXYgICAtIEhhcmR3YXJlIHJldmlzaW9uIG51bWJlcgorICAgIGZ3X3ZlciAgIC0gRmlybXdhcmUgdmVyc2lvbgorICAgIGhjYV90eXBlIC0gSENBIHR5cGU6ICJNVDIzMTA4IiwgIk1UMjUyMDggKE1UMjMxMDggY29tcGF0IG1vZGUpIiwKKyAgICAgICAgICAgICAgIG9yICJNVDI1MjA4IgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfbWFkLnR4dCBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FlMGM4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQKQEAgLTAsMCArMSw5OSBAQAorVVNFUlNQQUNFIE1BRCBBQ0NFU1MKKworRGV2aWNlIGZpbGVzCisKKyAgRWFjaCBwb3J0IG9mIGVhY2ggSW5maW5pQmFuZCBkZXZpY2UgaGFzIGEgInVtYWQiIGRldmljZSBhbmQgYW4KKyAgImlzc20iIGRldmljZSBhdHRhY2hlZC4gIEZvciBleGFtcGxlLCBhIHR3by1wb3J0IEhDQSB3aWxsIGhhdmUgdHdvCisgIHVtYWQgZGV2aWNlcyBhbmQgdHdvIGlzc20gZGV2aWNlcywgd2hpbGUgYSBzd2l0Y2ggd2lsbCBoYXZlIG9uZQorICBkZXZpY2Ugb2YgZWFjaCB0eXBlIChmb3Igc3dpdGNoIHBvcnQgMCkuCisKK0NyZWF0aW5nIE1BRCBhZ2VudHMKKworICBBIE1BRCBhZ2VudCBjYW4gYmUgY3JlYXRlZCBieSBmaWxsaW5nIGluIGEgc3RydWN0IGliX3VzZXJfbWFkX3JlZ19yZXEKKyAgYW5kIHRoZW4gY2FsbGluZyB0aGUgSUJfVVNFUl9NQURfUkVHSVNURVJfQUdFTlQgaW9jdGwgb24gYSBmaWxlCisgIGRlc2NyaXB0b3IgZm9yIHRoZSBhcHByb3ByaWF0ZSBkZXZpY2UgZmlsZS4gIElmIHRoZSByZWdpc3RyYXRpb24KKyAgcmVxdWVzdCBzdWNjZWVkcywgYSAzMi1iaXQgaWQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgc3RydWN0dXJlLgorICBGb3IgZXhhbXBsZToKKworCXN0cnVjdCBpYl91c2VyX21hZF9yZWdfcmVxIHJlcSA9IHsgLyogLi4uICovIH07CisJcmV0ID0gaW9jdGwoZmQsIElCX1VTRVJfTUFEX1JFR0lTVEVSX0FHRU5ULCAoY2hhciAqKSAmcmVxKTsKKyAgICAgICAgaWYgKCFyZXQpCisJCW15X2FnZW50ID0gcmVxLmlkOworCWVsc2UKKwkJcGVycm9yKCJhZ2VudCByZWdpc3RlciIpOworCisgIEFnZW50cyBjYW4gYmUgdW5yZWdpc3RlcmVkIHdpdGggdGhlIElCX1VTRVJfTUFEX1VOUkVHSVNURVJfQUdFTlQKKyAgaW9jdGwuICBBbHNvLCBhbGwgYWdlbnRzIHJlZ2lzdGVyZWQgdGhyb3VnaCBhIGZpbGUgZGVzY3JpcHRvciB3aWxsCisgIGJlIHVucmVnaXN0ZXJlZCB3aGVuIHRoZSBkZXNjcmlwdG9yIGlzIGNsb3NlZC4KKworUmVjZWl2aW5nIE1BRHMKKworICBNQURzIGFyZSByZWNlaXZlZCB1c2luZyByZWFkKCkuICBUaGUgYnVmZmVyIHBhc3NlZCB0byByZWFkKCkgbXVzdCBiZQorICBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhdCBsZWFzdCBvbmUgc3RydWN0IGliX3VzZXJfbWFkLiAgRm9yIGV4YW1wbGU6CisKKwlzdHJ1Y3QgaWJfdXNlcl9tYWQgbWFkOworCXJldCA9IHJlYWQoZmQsICZtYWQsIHNpemVvZiBtYWQpOworCWlmIChyZXQgIT0gc2l6ZW9mIG1hZCkKKwkJcGVycm9yKCJyZWFkIik7CisKKyAgSW4gYWRkaXRpb24gdG8gdGhlIGFjdHVhbCBNQUQgY29udGVudHMsIHRoZSBvdGhlciBzdHJ1Y3QgaWJfdXNlcl9tYWQKKyAgZmllbGRzIHdpbGwgYmUgZmlsbGVkIGluIHdpdGggaW5mb3JtYXRpb24gb24gdGhlIHJlY2VpdmVkIE1BRC4gIEZvcgorICBleGFtcGxlLCB0aGUgcmVtb3RlIExJRCB3aWxsIGJlIGluIG1hZC5saWQuCisKKyAgSWYgYSBzZW5kIHRpbWVzIG91dCwgYSByZWNlaXZlIHdpbGwgYmUgZ2VuZXJhdGVkIHdpdGggbWFkLnN0YXR1cyBzZXQKKyAgdG8gRVRJTUVET1VULiAgT3RoZXJ3aXNlIHdoZW4gYSBNQUQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLAorICBtYWQuc3RhdHVzIHdpbGwgYmUgMC4KKworICBwb2xsKCkvc2VsZWN0KCkgbWF5IGJlIHVzZWQgdG8gd2FpdCB1bnRpbCBhIE1BRCBjYW4gYmUgcmVhZC4KKworU2VuZGluZyBNQURzCisKKyAgTUFEcyBhcmUgc2VudCB1c2luZyB3cml0ZSgpLiAgVGhlIGFnZW50IElEIGZvciBzZW5kaW5nIHNob3VsZCBiZQorICBmaWxsZWQgaW50byB0aGUgaWQgZmllbGQgb2YgdGhlIE1BRCwgdGhlIGRlc3RpbmF0aW9uIExJRCBzaG91bGQgYmUKKyAgZmlsbGVkIGludG8gdGhlIGxpZCBmaWVsZCwgYW5kIHNvIG9uLiAgRm9yIGV4YW1wbGU6CisKKwlzdHJ1Y3QgaWJfdXNlcl9tYWQgbWFkOworCisJLyogZmlsbCBpbiBtYWQuZGF0YSAqLworCisJbWFkLmlkICA9IG15X2FnZW50OwkvKiByZXEuaWQgZnJvbSBhZ2VudCByZWdpc3RyYXRpb24gKi8KKwltYWQubGlkID0gbXlfZGVzdDsJLyogaW4gbmV0d29yayBieXRlIG9yZGVyLi4uICovCisJLyogZXRjLiAqLworCisJcmV0ID0gd3JpdGUoZmQsICZtYWQsIHNpemVvZiBtYWQpOworCWlmIChyZXQgIT0gc2l6ZW9mIG1hZCkKKwkJcGVycm9yKCJ3cml0ZSIpOworCitTZXR0aW5nIElzU00gQ2FwYWJpbGl0eSBCaXQKKworICBUbyBzZXQgdGhlIElzU00gY2FwYWJpbGl0eSBiaXQgZm9yIGEgcG9ydCwgc2ltcGx5IG9wZW4gdGhlCisgIGNvcnJlc3BvbmRpbmcgaXNzbSBkZXZpY2UgZmlsZS4gIElmIHRoZSBJc1NNIGJpdCBpcyBhbHJlYWR5IHNldCwKKyAgdGhlbiB0aGUgb3BlbiBjYWxsIHdpbGwgYmxvY2sgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIChvciByZXR1cm4KKyAgaW1tZWRpYXRlbHkgd2l0aCBlcnJubyBzZXQgdG8gRUFHQUlOIGlmIHRoZSBPX05PTkJMT0NLIGZsYWcgaXMKKyAgcGFzc2VkIHRvIG9wZW4oKSkuICBUaGUgSXNTTSBiaXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIGlzc20gZmlsZQorICBpcyBjbG9zZWQuICBObyByZWFkLCB3cml0ZSBvciBvdGhlciBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24KKyAgdGhlIGlzc20gZmlsZS4KKworL2RldiBmaWxlcworCisgIFRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyBhdXRvbWF0aWNhbGx5IHdpdGgKKyAgdWRldiwgYSBydWxlIGxpa2UKKworICAgIEtFUk5FTD0idW1hZCoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD0iaXNzbSoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorCisgIGNhbiBiZSB1c2VkLiAgVGhpcyB3aWxsIGNyZWF0ZSBkZXZpY2Ugbm9kZXMgbmFtZWQKKworICAgIC9kZXYvaW5maW5pYmFuZC91bWFkMAorICAgIC9kZXYvaW5maW5pYmFuZC9pc3NtMAorCisgIGZvciB0aGUgZmlyc3QgcG9ydCwgYW5kIHNvIG9uLiAgVGhlIEluZmluaUJhbmQgZGV2aWNlIGFuZCBwb3J0CisgIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBkZXZpY2VzIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGZpbGVzCisKKyAgICAvc3lzL2NsYXNzL2luZmluaWJhbmRfbWFkL3VtYWQwL2liZGV2CisgICAgL3N5cy9jbGFzcy9pbmZpbmliYW5kX21hZC91bWFkMC9wb3J0CisKKyAgYW5kCisKKyAgICAvc3lzL2NsYXNzL2luZmluaWJhbmRfbWFkL2lzc20wL2liZGV2CisgICAgL3N5cy9jbGFzcy9pbmZpbmliYW5kX21hZC9pc3NtMC9wb3J0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luaXRyZC50eHQgYi9Eb2N1bWVudGF0aW9uL2luaXRyZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlMWM4MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5pdHJkLnR4dApAQCAtMCwwICsxLDM0MCBAQAorVXNpbmcgdGhlIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1dyaXR0ZW4gMTk5NiwyMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciA8d2VybmVyLmFsbWVzYmVyZ2VyQGVwZmwuY2g+IGFuZAorICAgICAgICAgICAgICAgICAgICAgSGFucyBMZXJtZW4gPGxlcm1lbkBmZ2FuLmRlPgorCisKK2luaXRyZCBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBsb2FkIGEgUkFNIGRpc2sgYnkgdGhlIGJvb3QgbG9hZGVyLgorVGhpcyBSQU0gZGlzayBjYW4gdGhlbiBiZSBtb3VudGVkIGFzIHRoZSByb290IGZpbGUgc3lzdGVtIGFuZCBwcm9ncmFtcworY2FuIGJlIHJ1biBmcm9tIGl0LiBBZnRlcndhcmRzLCBhIG5ldyByb290IGZpbGUgc3lzdGVtIGNhbiBiZSBtb3VudGVkCitmcm9tIGEgZGlmZmVyZW50IGRldmljZS4gVGhlIHByZXZpb3VzIHJvb3QgKGZyb20gaW5pdHJkKSBpcyB0aGVuIG1vdmVkCit0byBhIGRpcmVjdG9yeSBhbmQgY2FuIGJlIHN1YnNlcXVlbnRseSB1bm1vdW50ZWQuCisKK2luaXRyZCBpcyBtYWlubHkgZGVzaWduZWQgdG8gYWxsb3cgc3lzdGVtIHN0YXJ0dXAgdG8gb2NjdXIgaW4gdHdvIHBoYXNlcywKK3doZXJlIHRoZSBrZXJuZWwgY29tZXMgdXAgd2l0aCBhIG1pbmltdW0gc2V0IG9mIGNvbXBpbGVkLWluIGRyaXZlcnMsIGFuZAord2hlcmUgYWRkaXRpb25hbCBtb2R1bGVzIGFyZSBsb2FkZWQgZnJvbSBpbml0cmQuCisKK1RoaXMgZG9jdW1lbnQgZ2l2ZXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgdXNlIG9mIGluaXRyZC4gQSBtb3JlIGRldGFpbGVkCitkaXNjdXNzaW9uIG9mIHRoZSBib290IHByb2Nlc3MgY2FuIGJlIGZvdW5kIGluIFsxXS4KKworCitPcGVyYXRpb24KKy0tLS0tLS0tLQorCitXaGVuIHVzaW5nIGluaXRyZCwgdGhlIHN5c3RlbSB0eXBpY2FsbHkgYm9vdHMgYXMgZm9sbG93czoKKworICAxKSB0aGUgYm9vdCBsb2FkZXIgbG9hZHMgdGhlIGtlcm5lbCBhbmQgdGhlIGluaXRpYWwgUkFNIGRpc2sKKyAgMikgdGhlIGtlcm5lbCBjb252ZXJ0cyBpbml0cmQgaW50byBhICJub3JtYWwiIFJBTSBkaXNrIGFuZAorICAgICBmcmVlcyB0aGUgbWVtb3J5IHVzZWQgYnkgaW5pdHJkCisgIDMpIGluaXRyZCBpcyBtb3VudGVkIHJlYWQtd3JpdGUgYXMgcm9vdAorICA0KSAvbGludXhyYyBpcyBleGVjdXRlZCAodGhpcyBjYW4gYmUgYW55IHZhbGlkIGV4ZWN1dGFibGUsIGluY2x1ZGluZworICAgICBzaGVsbCBzY3JpcHRzOyBpdCBpcyBydW4gd2l0aCB1aWQgMCBhbmQgY2FuIGRvIGJhc2ljYWxseSBldmVyeXRoaW5nCisgICAgIGluaXQgY2FuIGRvKQorICA1KSBsaW51eHJjIG1vdW50cyB0aGUgInJlYWwiIHJvb3QgZmlsZSBzeXN0ZW0KKyAgNikgbGludXhyYyBwbGFjZXMgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gYXQgdGhlIHJvb3QgZGlyZWN0b3J5IHVzaW5nIHRoZQorICAgICBwaXZvdF9yb290IHN5c3RlbSBjYWxsCisgIDcpIHRoZSB1c3VhbCBib290IHNlcXVlbmNlIChlLmcuIGludm9jYXRpb24gb2YgL3NiaW4vaW5pdCkgaXMgcGVyZm9ybWVkCisgICAgIG9uIHRoZSByb290IGZpbGUgc3lzdGVtCisgIDgpIHRoZSBpbml0cmQgZmlsZSBzeXN0ZW0gaXMgcmVtb3ZlZAorCitOb3RlIHRoYXQgY2hhbmdpbmcgdGhlIHJvb3QgZGlyZWN0b3J5IGRvZXMgbm90IGludm9sdmUgdW5tb3VudGluZyBpdC4KK0l0IGlzIHRoZXJlZm9yZSBwb3NzaWJsZSB0byBsZWF2ZSBwcm9jZXNzZXMgcnVubmluZyBvbiBpbml0cmQgZHVyaW5nIHRoYXQKK3Byb2NlZHVyZS4gQWxzbyBub3RlIHRoYXQgZmlsZSBzeXN0ZW1zIG1vdW50ZWQgdW5kZXIgaW5pdHJkIGNvbnRpbnVlIHRvCitiZSBhY2Nlc3NpYmxlLgorCisKK0Jvb3QgY29tbWFuZC1saW5lIG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW5pdHJkIGFkZHMgdGhlIGZvbGxvd2luZyBuZXcgb3B0aW9uczoKKworICBpbml0cmQ9PHBhdGg+ICAgIChlLmcuIExPQURMSU4pCisKKyAgICBMb2FkcyB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgdGhlIGluaXRpYWwgUkFNIGRpc2suIFdoZW4gdXNpbmcgTElMTywgeW91CisgICAgaGF2ZSB0byBzcGVjaWZ5IHRoZSBSQU0gZGlzayBpbWFnZSBmaWxlIGluIC9ldGMvbGlsby5jb25mLCB1c2luZyB0aGUKKyAgICBJTklUUkQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICBub2luaXRyZAorCisgICAgaW5pdHJkIGRhdGEgaXMgcHJlc2VydmVkIGJ1dCBpdCBpcyBub3QgY29udmVydGVkIHRvIGEgUkFNIGRpc2sgYW5kCisgICAgdGhlICJub3JtYWwiIHJvb3QgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZC4gaW5pdHJkIGRhdGEgY2FuIGJlIHJlYWQKKyAgICBmcm9tIC9kZXYvaW5pdHJkLiBOb3RlIHRoYXQgdGhlIGRhdGEgaW4gaW5pdHJkIGNhbiBoYXZlIGFueSBzdHJ1Y3R1cmUKKyAgICBpbiB0aGlzIGNhc2UgYW5kIGRvZXNuJ3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBiZSBhIGZpbGUgc3lzdGVtIGltYWdlLgorICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgbWFpbmx5IGZvciBkZWJ1Z2dpbmcuCisKKyAgICBOb3RlOiAvZGV2L2luaXRyZCBpcyByZWFkLW9ubHkgYW5kIGl0IGNhbiBvbmx5IGJlIHVzZWQgb25jZS4gQXMgc29vbgorICAgIGFzIHRoZSBsYXN0IHByb2Nlc3MgaGFzIGNsb3NlZCBpdCwgYWxsIGRhdGEgaXMgZnJlZWQgYW5kIC9kZXYvaW5pdHJkCisgICAgY2FuJ3QgYmUgb3BlbmVkIGFueW1vcmUuCisKKyAgcm9vdD0vZGV2L3JhbTAgICAod2l0aG91dCBkZXZmcykKKyAgcm9vdD0vZGV2L3JkLzAgICAod2l0aCBkZXZmcykKKworICAgIGluaXRyZCBpcyBtb3VudGVkIGFzIHJvb3QsIGFuZCB0aGUgbm9ybWFsIGJvb3QgcHJvY2VkdXJlIGlzIGZvbGxvd2VkLAorICAgIHdpdGggdGhlIFJBTSBkaXNrIHN0aWxsIG1vdW50ZWQgYXMgcm9vdC4KKworCitJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLQorCitGaXJzdCwgYSBkaXJlY3RvcnkgZm9yIHRoZSBpbml0cmQgZmlsZSBzeXN0ZW0gaGFzIHRvIGJlIGNyZWF0ZWQgb24gdGhlCisibm9ybWFsIiByb290IGZpbGUgc3lzdGVtLCBlLmcuCisKKyMgbWtkaXIgL2luaXRyZAorCitUaGUgbmFtZSBpcyBub3QgcmVsZXZhbnQuIE1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgb24gdGhlIHBpdm90X3Jvb3QoMikKK21hbiBwYWdlLgorCitJZiB0aGUgcm9vdCBmaWxlIHN5c3RlbSBpcyBjcmVhdGVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZWR1cmUgKGkuZS4gaWYKK3lvdSdyZSBidWlsZGluZyBhbiBpbnN0YWxsIGZsb3BweSksIHRoZSByb290IGZpbGUgc3lzdGVtIGNyZWF0aW9uCitwcm9jZWR1cmUgc2hvdWxkIGNyZWF0ZSB0aGUgL2luaXRyZCBkaXJlY3RvcnkuCisKK0lmIGluaXRyZCB3aWxsIG5vdCBiZSBtb3VudGVkIGluIHNvbWUgY2FzZXMsIGl0cyBjb250ZW50IGlzIHN0aWxsCithY2Nlc3NpYmxlIGlmIHRoZSBmb2xsb3dpbmcgZGV2aWNlIGhhcyBiZWVuIGNyZWF0ZWQgKG5vdGUgdGhhdCB0aGlzCitkb2VzIG5vdCB3b3JrIGlmIHVzaW5nIGRldmZzKToKKworIyBta25vZCAvZGV2L2luaXRyZCBiIDEgMjUwIAorIyBjaG1vZCA0MDAgL2Rldi9pbml0cmQKKworU2Vjb25kLCB0aGUga2VybmVsIGhhcyB0byBiZSBjb21waWxlZCB3aXRoIFJBTSBkaXNrIHN1cHBvcnQgYW5kIHdpdGgKK3N1cHBvcnQgZm9yIHRoZSBpbml0aWFsIFJBTSBkaXNrIGVuYWJsZWQuIEFsc28sIGF0IGxlYXN0IGFsbCBjb21wb25lbnRzCituZWVkZWQgdG8gZXhlY3V0ZSBwcm9ncmFtcyBmcm9tIGluaXRyZCAoZS5nLiBleGVjdXRhYmxlIGZvcm1hdCBhbmQgZmlsZQorc3lzdGVtKSBtdXN0IGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4KKworVGhpcmQsIHlvdSBoYXZlIHRvIGNyZWF0ZSB0aGUgUkFNIGRpc2sgaW1hZ2UuIFRoaXMgaXMgZG9uZSBieSBjcmVhdGluZyBhCitmaWxlIHN5c3RlbSBvbiBhIGJsb2NrIGRldmljZSwgY29weWluZyBmaWxlcyB0byBpdCBhcyBuZWVkZWQsIGFuZCB0aGVuCitjb3B5aW5nIHRoZSBjb250ZW50IG9mIHRoZSBibG9jayBkZXZpY2UgdG8gdGhlIGluaXRyZCBmaWxlLiBXaXRoIHJlY2VudAora2VybmVscywgYXQgbGVhc3QgdGhyZWUgdHlwZXMgb2YgZGV2aWNlcyBhcmUgc3VpdGFibGUgZm9yIHRoYXQ6CisKKyAtIGEgZmxvcHB5IGRpc2sgKHdvcmtzIGV2ZXJ5d2hlcmUgYnV0IGl0J3MgcGFpbmZ1bGx5IHNsb3cpCisgLSBhIFJBTSBkaXNrIChmYXN0LCBidXQgYWxsb2NhdGVzIHBoeXNpY2FsIG1lbW9yeSkKKyAtIGEgbG9vcGJhY2sgZGV2aWNlICh0aGUgbW9zdCBlbGVnYW50IHNvbHV0aW9uKQorCitXZSdsbCBkZXNjcmliZSB0aGUgbG9vcGJhY2sgZGV2aWNlIG1ldGhvZDoKKworIDEpIG1ha2Ugc3VyZSBsb29wYmFjayBibG9jayBkZXZpY2VzIGFyZSBjb25maWd1cmVkIGludG8gdGhlIGtlcm5lbAorIDIpIGNyZWF0ZSBhbiBlbXB0eSBmaWxlIHN5c3RlbSBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6ZSwgZS5nLgorICAgICMgZGQgaWY9L2Rldi96ZXJvIG9mPWluaXRyZCBicz0zMDBrIGNvdW50PTEKKyAgICAjIG1rZTJmcyAtRiAtbTAgaW5pdHJkCisgICAgKGlmIHNwYWNlIGlzIGNyaXRpY2FsLCB5b3UgbWF5IHdhbnQgdG8gdXNlIHRoZSBNaW5peCBGUyBpbnN0ZWFkIG9mIEV4dDIpCisgMykgbW91bnQgdGhlIGZpbGUgc3lzdGVtLCBlLmcuCisgICAgIyBtb3VudCAtdCBleHQyIC1vIGxvb3AgaW5pdHJkIC9tbnQKKyA0KSBjcmVhdGUgdGhlIGNvbnNvbGUgZGV2aWNlIChub3QgbmVjZXNzYXJ5IGlmIHVzaW5nIGRldmZzLCBidXQgaXQgY2FuJ3QKKyAgICBodXJ0IHRvIGRvIGl0IGFueXdheSk6CisgICAgIyBta2RpciAvbW50L2RldgorICAgICMgbWtub2QgL21udC9kZXYvY29uc29sZSBjIDUgMQorIDUpIGNvcHkgYWxsIHRoZSBmaWxlcyB0aGF0IGFyZSBuZWVkZWQgdG8gcHJvcGVybHkgdXNlIHRoZSBpbml0cmQKKyAgICBlbnZpcm9ubWVudC4gRG9uJ3QgZm9yZ2V0IHRoZSBtb3N0IGltcG9ydGFudCBmaWxlLCAvbGludXhyYworICAgIE5vdGUgdGhhdCAvbGludXhyYydzIHBlcm1pc3Npb25zIG11c3QgaW5jbHVkZSAieCIgKGV4ZWN1dGUpLgorIDYpIGNvcnJlY3Qgb3BlcmF0aW9uIHRoZSBpbml0cmQgZW52aXJvbm1lbnQgY2FuIGZyZXF1ZW50bHkgYmUgdGVzdGVkCisgICAgZXZlbiB3aXRob3V0IHJlYm9vdGluZyB3aXRoIHRoZSBjb21tYW5kCisgICAgIyBjaHJvb3QgL21udCAvbGludXhyYworICAgIFRoaXMgaXMgb2YgY291cnNlIGxpbWl0ZWQgdG8gaW5pdHJkcyB0aGF0IGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUKKyAgICBnZW5lcmFsIHN5c3RlbSBzdGF0ZSAoZS5nLiBieSByZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcywKKyAgICBvdmVyd3JpdGluZyBtb3VudGVkIGRldmljZXMsIHRyeWluZyB0byBzdGFydCBhbHJlYWR5IHJ1bm5pbmcgZGVtb25zLAorICAgIGV0Yy4gTm90ZSBob3dldmVyIHRoYXQgaXQgaXMgdXN1YWxseSBwb3NzaWJsZSB0byB1c2UgcGl2b3Rfcm9vdCBpbgorICAgIHN1Y2ggYSBjaHJvb3QnZWQgaW5pdHJkIGVudmlyb25tZW50LikKKyA3KSB1bm1vdW50IHRoZSBmaWxlIHN5c3RlbQorICAgICMgdW1vdW50IC9tbnQKKyA4KSB0aGUgaW5pdHJkIGlzIG5vdyBpbiB0aGUgZmlsZSAiaW5pdHJkIi4gT3B0aW9uYWxseSwgaXQgY2FuIG5vdyBiZQorICAgIGNvbXByZXNzZWQKKyAgICAjIGd6aXAgLTkgaW5pdHJkCisKK0ZvciBleHBlcmltZW50aW5nIHdpdGggaW5pdHJkLCB5b3UgbWF5IHdhbnQgdG8gdGFrZSBhIHJlc2N1ZSBmbG9wcHkgYW5kCitvbmx5IGFkZCBhIHN5bWJvbGljIGxpbmsgZnJvbSAvbGludXhyYyB0byAvYmluL3NoLiBBbHRlcm5hdGl2ZWx5LCB5b3UKK2NhbiB0cnkgdGhlIGV4cGVyaW1lbnRhbCBuZXdsaWIgZW52aXJvbm1lbnQgWzJdIHRvIGNyZWF0ZSBhIHNtYWxsCitpbml0cmQuCisKK0ZpbmFsbHksIHlvdSBoYXZlIHRvIGJvb3QgdGhlIGtlcm5lbCBhbmQgbG9hZCBpbml0cmQuIEFsbW9zdCBhbGwgTGludXgKK2Jvb3QgbG9hZGVycyBzdXBwb3J0IGluaXRyZC4gU2luY2UgdGhlIGJvb3QgcHJvY2VzcyBpcyBzdGlsbCBjb21wYXRpYmxlCit3aXRoIGFuIG9sZGVyIG1lY2hhbmlzbSwgdGhlIGZvbGxvd2luZyBib290IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCitoYXZlIHRvIGJlIGdpdmVuOgorCisgIHJvb3Q9L2Rldi9yYW0wIGluaXQ9L2xpbnV4cmMgcncKKworaWYgbm90IHVzaW5nIGRldmZzLCBvcgorCisgIHJvb3Q9L2Rldi9yZC8wIGluaXQ9L2xpbnV4cmMgcncKKworaWYgdXNpbmcgZGV2ZnMuIChydyBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB3cml0aW5nIHRvIHRoZSBpbml0cmQgZmlsZQorc3lzdGVtLikKKworV2l0aCBMT0FETElOLCB5b3Ugc2ltcGx5IGV4ZWN1dGUKKworICAgICBMT0FETElOIDxrZXJuZWw+IGluaXRyZD08ZGlza19pbWFnZT4KK2UuZy4gTE9BRExJTiBDOlxMSU5VWFxCWklNQUdFIGluaXRyZD1DOlxMSU5VWFxJTklUUkQuR1ogcm9vdD0vZGV2L3JhbTAKKyAgICAgICBpbml0PS9saW51eHJjIHJ3CisKK1dpdGggTElMTywgeW91IGFkZCB0aGUgb3B0aW9uIElOSVRSRD08cGF0aD4gdG8gZWl0aGVyIHRoZSBnbG9iYWwgc2VjdGlvbgorb3IgdG8gdGhlIHNlY3Rpb24gb2YgdGhlIHJlc3BlY3RpdmUga2VybmVsIGluIC9ldGMvbGlsby5jb25mLCBhbmQgcGFzcwordGhlIG9wdGlvbnMgdXNpbmcgQVBQRU5ELCBlLmcuCisKKyAgaW1hZ2UgPSAvYnpJbWFnZQorICAgIGluaXRyZCA9IC9ib290L2luaXRyZC5negorICAgIGFwcGVuZCA9ICJyb290PS9kZXYvcmFtMCBpbml0PS9saW51eHJjIHJ3IgorCithbmQgcnVuIC9zYmluL2xpbG8KKworRm9yIG90aGVyIGJvb3QgbG9hZGVycywgcGxlYXNlIHJlZmVyIHRvIHRoZSByZXNwZWN0aXZlIGRvY3VtZW50YXRpb24uCisKK05vdyB5b3UgY2FuIGJvb3QgYW5kIGVuam95IHVzaW5nIGluaXRyZC4KKworCitDaGFuZ2luZyB0aGUgcm9vdCBkZXZpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGZpbmlzaGVkIHdpdGggaXRzIGR1dGllcywgbGludXhyYyB0eXBpY2FsbHkgY2hhbmdlcyB0aGUgcm9vdCBkZXZpY2UKK2FuZCBwcm9jZWVkcyB3aXRoIHN0YXJ0aW5nIHRoZSBMaW51eCBzeXN0ZW0gb24gdGhlICJyZWFsIiByb290IGRldmljZS4KKworVGhlIHByb2NlZHVyZSBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgorIC0gbW91bnRpbmcgdGhlIG5ldyByb290IGZpbGUgc3lzdGVtCisgLSB0dXJuaW5nIGl0IGludG8gdGhlIHJvb3QgZmlsZSBzeXN0ZW0KKyAtIHJlbW92aW5nIGFsbCBhY2Nlc3NlcyB0byB0aGUgb2xkIChpbml0cmQpIHJvb3QgZmlsZSBzeXN0ZW0KKyAtIHVubW91bnRpbmcgdGhlIGluaXRyZCBmaWxlIHN5c3RlbSBhbmQgZGUtYWxsb2NhdGluZyB0aGUgUkFNIGRpc2sKKworTW91bnRpbmcgdGhlIG5ldyByb290IGZpbGUgc3lzdGVtIGlzIGVhc3k6IGl0IGp1c3QgbmVlZHMgdG8gYmUgbW91bnRlZCBvbgorYSBkaXJlY3RvcnkgdW5kZXIgdGhlIGN1cnJlbnQgcm9vdC4gRXhhbXBsZToKKworIyBta2RpciAvbmV3LXJvb3QKKyMgbW91bnQgLW8gcm8gL2Rldi9oZGExIC9uZXctcm9vdAorCitUaGUgcm9vdCBjaGFuZ2UgaXMgYWNjb21wbGlzaGVkIHdpdGggdGhlIHBpdm90X3Jvb3Qgc3lzdGVtIGNhbGwsIHdoaWNoCitpcyBhbHNvIGF2YWlsYWJsZSB2aWEgdGhlIHBpdm90X3Jvb3QgdXRpbGl0eSAoc2VlIHBpdm90X3Jvb3QoOCkgbWFuCitwYWdlOyBwaXZvdF9yb290IGlzIGRpc3RyaWJ1dGVkIHdpdGggdXRpbC1saW51eCB2ZXJzaW9uIDIuMTBoIG9yIGhpZ2hlcgorWzNdKS4gcGl2b3Rfcm9vdCBtb3ZlcyB0aGUgY3VycmVudCByb290IHRvIGEgZGlyZWN0b3J5IHVuZGVyIHRoZSBuZXcKK3Jvb3QsIGFuZCBwdXRzIHRoZSBuZXcgcm9vdCBhdCBpdHMgcGxhY2UuIFRoZSBkaXJlY3RvcnkgZm9yIHRoZSBvbGQgcm9vdAorbXVzdCBleGlzdCBiZWZvcmUgY2FsbGluZyBwaXZvdF9yb290LiBFeGFtcGxlOgorCisjIGNkIC9uZXctcm9vdAorIyBta2RpciBpbml0cmQKKyMgcGl2b3Rfcm9vdCAuIGluaXRyZAorCitOb3csIHRoZSBsaW51eHJjIHByb2Nlc3MgbWF5IHN0aWxsIGFjY2VzcyB0aGUgb2xkIHJvb3QgdmlhIGl0cworZXhlY3V0YWJsZSwgc2hhcmVkIGxpYnJhcmllcywgc3RhbmRhcmQgaW5wdXQvb3V0cHV0L2Vycm9yLCBhbmQgaXRzCitjdXJyZW50IHJvb3QgZGlyZWN0b3J5LiBBbGwgdGhlc2UgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCBieSB0aGUKK2ZvbGxvd2luZyBjb21tYW5kOgorCisjIGV4ZWMgY2hyb290IC4gd2hhdC1mb2xsb3dzIDxkZXYvY29uc29sZSA+ZGV2L2NvbnNvbGUgMj4mMQorCitXaGVyZSB3aGF0LWZvbGxvd3MgaXMgYSBwcm9ncmFtIHVuZGVyIHRoZSBuZXcgcm9vdCwgZS5nLiAvc2Jpbi9pbml0CitJZiB0aGUgbmV3IHJvb3QgZmlsZSBzeXN0ZW0gd2lsbCBiZSB1c2VkIHdpdGggZGV2ZnMgYW5kIGhhcyBubyB2YWxpZAorL2RldiBkaXJlY3RvcnksIGRldmZzIG11c3QgYmUgbW91bnRlZCBiZWZvcmUgaW52b2tpbmcgY2hyb290IGluIG9yZGVyIHRvCitwcm92aWRlIC9kZXYvY29uc29sZS4KKworTm90ZTogaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBwaXZvdF9yb290IG1heSBjaGFuZ2Ugd2l0aCB0aW1lLiBJbiBvcmRlcgordG8gZW5zdXJlIGNvbXBhdGliaWxpdHksIHRoZSBmb2xsb3dpbmcgcG9pbnRzIHNob3VsZCBiZSBvYnNlcnZlZDoKKworIC0gYmVmb3JlIGNhbGxpbmcgcGl2b3Rfcm9vdCwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9mIHRoZSBpbnZva2luZworICAgcHJvY2VzcyBzaG91bGQgcG9pbnQgdG8gdGhlIG5ldyByb290IGRpcmVjdG9yeQorIC0gdXNlIC4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBhbmQgdGhlIF9yZWxhdGl2ZV8gcGF0aCBvZiB0aGUgZGlyZWN0b3J5CisgICBmb3IgdGhlIG9sZCByb290IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQKKyAtIGEgY2hyb290IHByb2dyYW0gbXVzdCBiZSBhdmFpbGFibGUgdW5kZXIgdGhlIG9sZCBhbmQgdGhlIG5ldyByb290CisgLSBjaHJvb3QgdG8gdGhlIG5ldyByb290IGFmdGVyd2FyZHMKKyAtIHVzZSByZWxhdGl2ZSBwYXRocyBmb3IgZGV2L2NvbnNvbGUgaW4gdGhlIGV4ZWMgY29tbWFuZAorCitOb3csIHRoZSBpbml0cmQgY2FuIGJlIHVubW91bnRlZCBhbmQgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIFJBTQorZGlzayBjYW4gYmUgZnJlZWQ6CisKKyMgdW1vdW50IC9pbml0cmQKKyMgYmxvY2tkZXYgLS1mbHVzaGJ1ZnMgL2Rldi9yYW0wICAgICMgL2Rldi9yZC8wIGlmIHVzaW5nIGRldmZzCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGluaXRyZCB3aXRoIGFuIE5GUy1tb3VudGVkIHJvb3QsIHNlZSB0aGUKK3Bpdm90X3Jvb3QoOCkgbWFuIHBhZ2UgZm9yIGRldGFpbHMuCisKK05vdGU6IGlmIGxpbnV4cmMgb3IgYW55IHByb2dyYW0gZXhlYydlZCBmcm9tIGl0IHRlcm1pbmF0ZXMgZm9yIHNvbWUKK3JlYXNvbiwgdGhlIG9sZCBjaGFuZ2Vfcm9vdCBtZWNoYW5pc20gaXMgaW52b2tlZCAoc2VlIHNlY3Rpb24gIk9ic29sZXRlCityb290IGNoYW5nZSBtZWNoYW5pc20iKS4KKworCitVc2FnZSBzY2VuYXJpb3MKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWFpbiBtb3RpdmF0aW9uIGZvciBpbXBsZW1lbnRpbmcgaW5pdHJkIHdhcyB0byBhbGxvdyBmb3IgbW9kdWxhcgora2VybmVsIGNvbmZpZ3VyYXRpb24gYXQgc3lzdGVtIGluc3RhbGxhdGlvbi4gVGhlIHByb2NlZHVyZSB3b3VsZCB3b3JrCithcyBmb2xsb3dzOgorCisgIDEpIHN5c3RlbSBib290cyBmcm9tIGZsb3BweSBvciBvdGhlciBtZWRpYSB3aXRoIGEgbWluaW1hbCBrZXJuZWwKKyAgICAgKGUuZy4gc3VwcG9ydCBmb3IgUkFNIGRpc2tzLCBpbml0cmQsIGEub3V0LCBhbmQgdGhlIEV4dDIgRlMpIGFuZAorICAgICBsb2FkcyBpbml0cmQKKyAgMikgL2xpbnV4cmMgZGV0ZXJtaW5lcyB3aGF0IGlzIG5lZWRlZCB0byAoMSkgbW91bnQgdGhlICJyZWFsIiByb290IEZTCisgICAgIChpLmUuIGRldmljZSB0eXBlLCBkZXZpY2UgZHJpdmVycywgZmlsZSBzeXN0ZW0pIGFuZCAoMikgdGhlCisgICAgIGRpc3RyaWJ1dGlvbiBtZWRpYSAoZS5nLiBDRC1ST00sIG5ldHdvcmssIHRhcGUsIC4uLikuIFRoaXMgY2FuIGJlCisgICAgIGRvbmUgYnkgYXNraW5nIHRoZSB1c2VyLCBieSBhdXRvLXByb2JpbmcsIG9yIGJ5IHVzaW5nIGEgaHlicmlkCisgICAgIGFwcHJvYWNoLgorICAzKSAvbGludXhyYyBsb2FkcyB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBtb2R1bGVzCisgIDQpIC9saW51eHJjIGNyZWF0ZXMgYW5kIHBvcHVsYXRlcyB0aGUgcm9vdCBmaWxlIHN5c3RlbSAodGhpcyBkb2Vzbid0CisgICAgIGhhdmUgdG8gYmUgYSB2ZXJ5IHVzYWJsZSBzeXN0ZW0geWV0KQorICA1KSAvbGludXhyYyBpbnZva2VzIHBpdm90X3Jvb3QgdG8gY2hhbmdlIHRoZSByb290IGZpbGUgc3lzdGVtIGFuZAorICAgICBleGVjcyAtIHZpYSBjaHJvb3QgLSBhIHByb2dyYW0gdGhhdCBjb250aW51ZXMgdGhlIGluc3RhbGxhdGlvbgorICA2KSB0aGUgYm9vdCBsb2FkZXIgaXMgaW5zdGFsbGVkCisgIDcpIHRoZSBib290IGxvYWRlciBpcyBjb25maWd1cmVkIHRvIGxvYWQgYW4gaW5pdHJkIHdpdGggdGhlIHNldCBvZgorICAgICBtb2R1bGVzIHRoYXQgd2FzIHVzZWQgdG8gYnJpbmcgdXAgdGhlIHN5c3RlbSAoZS5nLiAvaW5pdHJkIGNhbiBiZQorICAgICBtb2RpZmllZCwgdGhlbiB1bm1vdW50ZWQsIGFuZCBmaW5hbGx5LCB0aGUgaW1hZ2UgaXMgd3JpdHRlbiBmcm9tCisgICAgIC9kZXYvcmFtMCBvciAvZGV2L3JkLzAgdG8gYSBmaWxlKQorICA4KSBub3cgdGhlIHN5c3RlbSBpcyBib290YWJsZSBhbmQgYWRkaXRpb25hbCBpbnN0YWxsYXRpb24gdGFza3MgY2FuIGJlCisgICAgIHBlcmZvcm1lZAorCitUaGUga2V5IHJvbGUgb2YgaW5pdHJkIGhlcmUgaXMgdG8gcmUtdXNlIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgZHVyaW5nCitub3JtYWwgc3lzdGVtIG9wZXJhdGlvbiB3aXRob3V0IHJlcXVpcmluZyB0aGUgdXNlIG9mIGEgYmxvYXRlZCAiZ2VuZXJpYyIKK2tlcm5lbCBvciByZS1jb21waWxpbmcgb3IgcmUtbGlua2luZyB0aGUga2VybmVsLgorCitBIHNlY29uZCBzY2VuYXJpbyBpcyBmb3IgaW5zdGFsbGF0aW9ucyB3aGVyZSBMaW51eCBydW5zIG9uIHN5c3RlbXMgd2l0aAorZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGluIGEgc2luZ2xlIGFkbWluaXN0cmF0aXZlIGRvbWFpbi4gSW4KK3N1Y2ggY2FzZXMsIGl0IGlzIGRlc2lyYWJsZSB0byBnZW5lcmF0ZSBvbmx5IGEgc21hbGwgc2V0IG9mIGtlcm5lbHMKKyhpZGVhbGx5IG9ubHkgb25lKSBhbmQgdG8ga2VlcCB0aGUgc3lzdGVtLXNwZWNpZmljIHBhcnQgb2YgY29uZmlndXJhdGlvbgoraW5mb3JtYXRpb24gYXMgc21hbGwgYXMgcG9zc2libGUuIEluIHRoaXMgY2FzZSwgYSBjb21tb24gaW5pdHJkIGNvdWxkIGJlCitnZW5lcmF0ZWQgd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBtb2R1bGVzLiBUaGVuLCBvbmx5IC9saW51eHJjIG9yIGEgZmlsZQorcmVhZCBieSBpdCB3b3VsZCBoYXZlIHRvIGJlIGRpZmZlcmVudC4KKworQSB0aGlyZCBzY2VuYXJpbyBhcmUgbW9yZSBjb252ZW5pZW50IHJlY292ZXJ5IGRpc2tzLCBiZWNhdXNlIGluZm9ybWF0aW9uCitsaWtlIHRoZSBsb2NhdGlvbiBvZiB0aGUgcm9vdCBGUyBwYXJ0aXRpb24gZG9lc24ndCBoYXZlIHRvIGJlIHByb3ZpZGVkIGF0Citib290IHRpbWUsIGJ1dCB0aGUgc3lzdGVtIGxvYWRlZCBmcm9tIGluaXRyZCBjYW4gaW52b2tlIGEgdXNlci1mcmllbmRseQorZGlhbG9nIGFuZCBpdCBjYW4gYWxzbyBwZXJmb3JtIHNvbWUgc2FuaXR5IGNoZWNrcyAob3IgZXZlbiBzb21lIGZvcm0gb2YKK2F1dG8tZGV0ZWN0aW9uKS4KKworTGFzdCBub3QgbGVhc3QsIENELVJPTSBkaXN0cmlidXRvcnMgbWF5IHVzZSBpdCBmb3IgYmV0dGVyIGluc3RhbGxhdGlvbgorZnJvbSBDRCwgZS5nLiBieSB1c2luZyBhIGJvb3QgZmxvcHB5IGFuZCBib290c3RyYXBwaW5nIGEgYmlnZ2VyIFJBTSBkaXNrCit2aWEgaW5pdHJkIGZyb20gQ0Q7IG9yIGJ5IGJvb3RpbmcgdmlhIGEgbG9hZGVyIGxpa2UgTE9BRExJTiBvciBkaXJlY3RseQorZnJvbSB0aGUgQ0QtUk9NLCBhbmQgbG9hZGluZyB0aGUgUkFNIGRpc2sgZnJvbSBDRCB3aXRob3V0IG5lZWQgb2YKK2Zsb3BwaWVzLiAKKworCitPYnNvbGV0ZSByb290IGNoYW5nZSBtZWNoYW5pc20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIG1lY2hhbmlzbSB3YXMgdXNlZCBiZWZvcmUgdGhlIGludHJvZHVjdGlvbiBvZiBwaXZvdF9yb290LgorQ3VycmVudCBrZXJuZWxzIHN0aWxsIHN1cHBvcnQgaXQsIGJ1dCB5b3Ugc2hvdWxkIF9ub3RfIHJlbHkgb24gaXRzCitjb250aW51ZWQgYXZhaWxhYmlsaXR5LgorCitJdCB3b3JrcyBieSBtb3VudGluZyB0aGUgInJlYWwiIHJvb3QgZGV2aWNlIChpLmUuIHRoZSBvbmUgc2V0IHdpdGggcmRldgoraW4gdGhlIGtlcm5lbCBpbWFnZSBvciB3aXRoIHJvb3Q9Li4uIGF0IHRoZSBib290IGNvbW1hbmQgbGluZSkgYXMgdGhlCityb290IGZpbGUgc3lzdGVtIHdoZW4gbGludXhyYyBleGl0cy4gVGhlIGluaXRyZCBmaWxlIHN5c3RlbSBpcyB0aGVuCit1bm1vdW50ZWQsIG9yLCBpZiBpdCBpcyBzdGlsbCBidXN5LCBtb3ZlZCB0byBhIGRpcmVjdG9yeSAvaW5pdHJkLCBpZgorc3VjaCBhIGRpcmVjdG9yeSBleGlzdHMgb24gdGhlIG5ldyByb290IGZpbGUgc3lzdGVtLgorCitJbiBvcmRlciB0byB1c2UgdGhpcyBtZWNoYW5pc20sIHlvdSBkbyBub3QgaGF2ZSB0byBzcGVjaWZ5IHRoZSBib290Citjb21tYW5kIG9wdGlvbnMgcm9vdCwgaW5pdCwgb3IgcncuIChJZiBzcGVjaWZpZWQsIHRoZXkgd2lsbCBhZmZlY3QKK3RoZSByZWFsIHJvb3QgZmlsZSBzeXN0ZW0sIG5vdCB0aGUgaW5pdHJkIGVudmlyb25tZW50LikKKyAgCitJZiAvcHJvYyBpcyBtb3VudGVkLCB0aGUgInJlYWwiIHJvb3QgZGV2aWNlIGNhbiBiZSBjaGFuZ2VkIGZyb20gd2l0aGluCitsaW51eHJjIGJ5IHdyaXRpbmcgdGhlIG51bWJlciBvZiB0aGUgbmV3IHJvb3QgRlMgZGV2aWNlIHRvIHRoZSBzcGVjaWFsCitmaWxlIC9wcm9jL3N5cy9rZXJuZWwvcmVhbC1yb290LWRldiwgZS5nLgorCisgICMgZWNobyAweDMwMSA+L3Byb2Mvc3lzL2tlcm5lbC9yZWFsLXJvb3QtZGV2CisKK05vdGUgdGhhdCB0aGUgbWVjaGFuaXNtIGlzIGluY29tcGF0aWJsZSB3aXRoIE5GUyBhbmQgc2ltaWxhciBmaWxlCitzeXN0ZW1zLgorCitUaGlzIG9sZCwgZGVwcmVjYXRlZCBtZWNoYW5pc20gaXMgY29tbW9ubHkgY2FsbGVkICJjaGFuZ2Vfcm9vdCIsIHdoaWxlCit0aGUgbmV3LCBzdXBwb3J0ZWQgbWVjaGFuaXNtIGlzIGNhbGxlZCAicGl2b3Rfcm9vdCIuCisKKworUmVzb3VyY2VzCistLS0tLS0tLS0KKworWzFdIEFsbWVzYmVyZ2VyLCBXZXJuZXI7ICJCb290aW5nIExpbnV4OiBUaGUgSGlzdG9yeSBhbmQgdGhlIEZ1dHVyZSIKKyAgICBodHRwOi8vd3d3LmFsbWVzYmVyZ2VyLm5ldC9jdi9wYXBlcnMvb2xzMmstOS5wcy5negorWzJdIG5ld2xpYiBwYWNrYWdlIChleHBlcmltZW50YWwpLCB3aXRoIGluaXRyZCBleGFtcGxlCisgICAgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9uZXdsaWIvCitbM10gQnJvdXdlciwgQW5kcmllczsgInV0aWwtbGludXg6IE1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzIGZvciBMaW51eCIKKyAgICBmdHA6Ly9mdHAud2luLnR1ZS5ubC9wdWIvbGludXgtbG9jYWwvdXRpbHMvdXRpbC1saW51eC8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvYW1pam95LnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvYW1pam95LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjhiMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hbWlqb3kudHh0CkBAIC0wLDAgKzEsMTg0IEBACitBbWlnYSA0LWpveXN0aWNrIHBhcnBvcnQgZXh0ZW5zaW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitQYXJhbGxlbCBwb3J0IHBpbnM6CisKKyAoMikgLSBVcDEJICg2KSAtIFVwMgorICgzKSAtIERvd24xCSAoNykgLSBEb3duMgorICg0KSAtIExlZnQxCSAoOCkgLSBMZWZ0MgorICg1KSAtIFJpZ2h0MQkgKDkpIC0gUmlnaHQyCisoMTMpIC0gRmlyZTEJKDExKSAtIEZpcmUyCisoMTgpIC0gR25kMQkoMTgpIC0gR25kMgorCitBbWlnYSBkaWdpdGFsIGpveXN0aWNrIHBpbm91dAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKygxKSAtIFVwCisoMikgLSBEb3duCisoMykgLSBMZWZ0CisoNCkgLSBSaWdodAorKDUpIC0gbi9jCisoNikgLSBGaXJlIGJ1dHRvbgorKDcpIC0gKzVWICg1MG1BKQorKDgpIC0gR25kCisoOSkgLSBUaHVtYiBidXR0b24KKworQW1pZ2EgbW91c2UgcGlub3V0Cit+fn5+fn5+fn5+fn5+fn5+fn4KKygxKSAtIFYtcHVsc2UKKygyKSAtIEgtcHVsc2UKKygzKSAtIFZRLXB1bHNlCisoNCkgLSBIUS1wdWxzZQorKDUpIC0gTWlkZGxlIGJ1dHRvbgorKDYpIC0gTGVmdCBidXR0b24KKyg3KSAtICs1ViAoNTBtQSkKKyg4KSAtIEduZAorKDkpIC0gUmlnaHQgYnV0dG9uCisKK0FtaWdhIGFuYWxvZyBqb3lzdGljayBwaW5vdXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKygxKSAtIFRvcCBidXR0b24KKygyKSAtIFRvcDIgYnV0dG9uCisoMykgLSBUcmlnZ2VyIGJ1dHRvbgorKDQpIC0gVGh1bWIgYnV0dG9uCisoNSkgLSBBbmFsb2cgWAorKDYpIC0gbi9jCisoNykgLSArNVYgKDUwbUEpCisoOCkgLSBHbmQKKyg5KSAtIEFuYWxvZyBZCisKK0FtaWdhIGxpZ2h0cGVuIHBpbm91dAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisoMSkgLSBuL2MKKygyKSAtIG4vYworKDMpIC0gbi9jCisoNCkgLSBuL2MKKyg1KSAtIFRvdWNoIGJ1dHRvbgorKDYpIC0gL0JlYW10cmlnZ2VyCisoNykgLSArNVYgKDUwbUEpCisoOCkgLSBHbmQKKyg5KSAtIFN0eWx1cyBidXR0b24KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOQU1FICAgICByZXYgQUREUiB0eXBlIGNoaXAgICBEZXNjcmlwdGlvbgorSk9ZMERBVCAgICAgIDAwQSAgIFIgICBEZW5pc2UgSm95c3RpY2stbW91c2UgMCBkYXRhIChsZWZ0IHZlcnQsIGhvcml6KQorSk9ZMURBVCAgICAgIDAwQyAgIFIgICBEZW5pc2UgSm95c3RpY2stbW91c2UgMSBkYXRhIChyaWdodCB2ZXJ0LGhvcml6KQorCisgICAgICAgIFRoZXNlIGFkZHJlc3NlcyBlYWNoIHJlYWQgYSAxNiBiaXQgcmVnaXN0ZXIuIFRoZXNlIGluIHR1cm4KKyAgICAgICAgYXJlIGxvYWRlZCBmcm9tIHRoZSBNREFUIHNlcmlhbCBzdHJlYW0gYW5kIGFyZSBjbG9ja2VkIGluIG9uCisgICAgICAgIHRoZSByaXNpbmcgZWRnZSBvZiBTQ0xLLiBNTEQgb3V0cHV0IGlzIHVzZWQgdG8gcGFyYWxsZWwgbG9hZAorICAgICAgICB0aGUgZXh0ZXJuYWwgcGFyYWxsZWwtdG8tc2VyaWFsIGNvbnZlcnRlci5UaGlzIGluIHR1cm4gaXMKKyAgICAgICAgbG9hZGVkIHdpdGggdGhlIDQgcXVhZHJhdHVyZSBpbnB1dHMgZnJvbSBlYWNoIG9mIHR3byBnYW1lCisgICAgICAgIGNvbnRyb2xsZXIgcG9ydHMgKDggdG90YWwpIHBsdXMgOCBtaXNjZWxsYW5lb3VzIGNvbnRyb2wgYml0cworICAgICAgICB3aGljaCBhcmUgbmV3IGZvciBMSVNBIGFuZCBjYW4gYmUgcmVhZCBpbiB1cHBlciA4IGJpdHMgb2YKKyAgICAgICAgTElTQUlELgorICAgICAgICBSZWdpc3RlciBiaXRzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICBNb3VzZSBjb3VudGVyIHVzYWdlIChwaW5zICAxLDMgPVljbG9jaywgcGlucyAyLDQgPVhjbG9jaykKKworICAgIEJJVCMgIDE1ICAxNCAgMTMgIDEyICAxMSAgMTAgIDA5ICAwOCAgICAgMDcgIDA2ICAwNSAgMDQgIDAzICAwMiAgMDEgIDAwCitKT1kwREFUICAgWTcgIFk2ICBZNSAgWTQgIFkzICBZMiAgWTEgIFkwICAgICBYNyAgWDYgIFg1ICBYNCAgWDMgIFgyICBYMSAgWDAKK0pPWTFEQVQgICBZNyAgWTYgIFk1ICBZNCAgWTMgIFkyICBZMSAgWTAgICAgIFg3ICBYNiAgWDUgIFg0ICBYMyAgWDIgIFgxICBYMAorCisgICAgICAgIDA9TEVGVCBDT05UUk9MTEVSIFBBSVIsIDE9UklHSFQgQ09OVFJPTExFUiBQQUlSLgorICAgICAgICAoNCBjb3VudGVycyB0b3RhbCkuVGhlIGJpdCB1c2FnZSBmb3IgYm90aCBsZWZ0IGFuZCByaWdodAorICAgICAgICBhZGRyZXNzZXMgaXMgc2hvd24gYmVsb3cuIEVhY2ggNiBiaXQgY291bnRlciAoWTctWTIsWDctWDIpIGlzCisgICAgICAgIGNsb2NrZWQgYnkgMiBvZiB0aGUgc2lnbmFscyBpbnB1dCBmcm9tIHRoZSBtb3VzZSBzZXJpYWwKKyAgICAgICAgc3RyZWFtLiBTdGFydGluZyB3aXRoIGZpcnN0IGJpdCByZWNpdmVkOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgU2VyaWFsIHwgQml0IE5hbWUgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgMCAgICB8IE0wSCAgICAgIHwgSk9ZMERBVCBIb3Jpem9udGFsIENsb2NrICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAxICAgIHwgTTBIUSAgICAgfCBKT1kwREFUIEhvcml6b250YWwgQ2xvY2sgKHF1YWRyYXR1cmUpICAgfAorICAgICAgICAgfCAgIDIgICAgfCBNMFYgICAgICB8IEpPWTBEQVQgVmVydGljYWwgQ2xvY2sgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgMyAgICB8IE0wVlEgICAgIHwgSk9ZMERBVCBWZXJ0aWNhbCBDbG9jayAgKHF1YWRyYXR1cmUpICAgIHwKKyAgICAgICAgIHwgICA0ICAgIHwgTTFWICAgICAgfCBKT1kxREFUIEhvcml6b250YWxsIENsb2NrICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgIDUgICAgfCBNMVZRICAgICB8IEpPWTFEQVQgSG9yaXpvbnRhbGwgQ2xvY2sgKHF1YWRyYXR1cmUpICB8CisgICAgICAgICB8ICAgNiAgICB8IE0xViAgICAgIHwgSk9ZMURBVCBWZXJ0aWNhbCBDbG9jayAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICA3ICAgIHwgTTFWUSAgICAgfCBKT1kxREFUIFZlcnRpY2FsIENsb2NrIChxdWFkcmF0dXJlKSAgICAgfAorICAgICAgICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgIEJpdHMgMSBhbmQgMCBvZiBlYWNoIGNvdW50ZXIgKFkxLVkwLFgxLVgwKSBtYXkgYmUKKyAgICAgICAgIHJlYWQgdG8gZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiB0aGUgcmVsYXRlZCBpbnB1dCBzaWduYWwgcGFpci4KKyAgICAgICAgIFRoaXMgYWxsb3dzIHRoZXNlIHBpbnMgdG8gZG91YmxlIGFzIGpveXN0aWNrIHN3aXRjaCBpbnB1dHMuCisgICAgICAgICBKb3lzdGljayBzd2l0Y2ggY2xvc3VyZXMgY2FuIGJlIGRlY2lwaGVyZWQgYXMgZm9sbG93czoKKworICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCBEaXJlY3Rpb25zIHwgUGluIyB8IENvdW50ZXIgYml0cyAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCBGb3J3YXJkICAgIHwgIDEgICB8IFkxIHhvciBZMCAoQklUIzA5IHhvciBCSVQjMDgpICAgfAorICAgICAgICAgfCBMZWZ0ICAgICAgIHwgIDMgICB8IFkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCBCYWNrICAgICAgIHwgIDIgICB8IFgxIHhvciBYMCAoQklUIzAxIHhvciBCSVQjMDApICAgfAorICAgICAgICAgfCBSaWdodCAgICAgIHwgIDQgICB8IFgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05BTUUgICAgICByZXYgQUREUiB0eXBlIGNoaXAgICAgRGVzY3JpcHRpb24KK0pPWVRFU1QgICAgICAgMDM2ICAgVyAgIERlbmlzZSAgV3JpdGUgdG8gYWxsIDQgIGpveXN0aWNrLW1vdXNlIGNvdW50ZXJzIGF0IG9uY2UuCisKKyAgICAgICAgICAgICAgICAgIE1vdXNlIGNvdW50ZXIgd3JpdGUgdGVzdCBkYXRhOgorICAgICBCSVQjICAxNSAgMTQgIDEzICAxMiAgMTEgIDEwICAwOSAgMDggICAgIDA3ICAwNiAgMDUgIDA0ICAwMyAgMDIgIDAxICAwMAorICBKT1l4REFUICBZNyAgWTYgIFk1ICBZNCAgWTMgIFkyICB4eCAgeHggICAgIFg3ICBYNiAgWDUgIFg0ICBYMyAgWDIgIHh4ICB4eAorICBKT1l4REFUICBZNyAgWTYgIFk1ICBZNCAgWTMgIFkyICB4eCAgeHggICAgIFg3ICBYNiAgWDUgIFg0ICBYMyAgWDIgIHh4ICB4eAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05BTUUgICAgcmV2IEFERFIgdHlwZSBjaGlwICAgRGVzY3JpcHRpb24KK1BPVDBEQVQgIGggIDAxMiAgIFIgICBQYXVsYSAgUG90IGNvdW50ZXIgZGF0YSBsZWZ0IHBhaXIgKHZlcnQsIGhvcml6KQorUE9UMURBVCAgaCAgMDE0ICAgUiAgIFBhdWxhICBQb3QgY291bnRlciBkYXRhIHJpZ2h0IHBhaXIgKHZlcnQsaG9yaXopCisKKyAgICAgICAgVGhlc2UgYWRkcmVzc2VzIGVhY2ggcmVhZCBhIHBhaXIgb2YgOCBiaXQgcG90IGNvdW50ZXJzLgorICAgICAgICAoNCBjb3VudGVycyB0b3RhbCkuIFRoZSBiaXQgYXNzaWdubWVudCBmb3IgYm90aAorICAgICAgICBhZGRyZXNzZXMgaXMgc2hvd24gYmVsb3cuIFRoZSBjb3VudGVycyBhcmUgc3RvcHBlZCBieSBzaWduYWxzCisgICAgICAgIGZyb20gMiBjb250cm9sbGVyIGNvbm5lY3RvcnMgKGxlZnQtcmlnaHQpIHdpdGggMiBwaW5zIGVhY2guCisKKyAgQklUIyAgMTUgIDE0ICAxMyAgMTIgIDExICAxMCAgMDkgIDA4ICAgICAwNyAgMDYgIDA1ICAwNCAgMDMgIDAyICAwMSAgMDAKKyBSSUdIVCAgWTcgIFk2ICBZNSAgWTQgIFkzICBZMiAgWTEgIFkwICAgICBYNyAgWDYgIFg1ICBYNCAgWDMgIFgyICBYMSAgWDAKKyAgTEVGVCAgWTcgIFk2ICBZNSAgWTQgIFkzICBZMiAgWTEgIFkwICAgICBYNyAgWDYgIFg1ICBYNCAgWDMgIFgyICBYMSAgWDAKKworICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICAgICB8IENPTk5FQ1RPUlMgICAgICAgICAgICAgICB8IFBBVUxBIHwKKyAgICAgICAgICstLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0tKworICAgICAgICAgfCBMb2MuICB8IERpci4gfCBTeW0gfCBwaW4gfCBwaW4gICB8CisgICAgICAgICArLS0tLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgIHwgUklHSFQgfCBZICAgIHwgUlggIHwgOSAgIHwgMzMgICAgfAorICAgICAgICAgfCBSSUdIVCB8IFggICAgfCBSWCAgfCA1ICAgfCAzMiAgICB8CisgICAgICAgICB8IExFRlQgIHwgWSAgICB8IExZICB8IDkgICB8IDM2ICAgIHwKKyAgICAgICAgIHwgTEVGVCAgfCBYICAgIHwgTFggIHwgNSAgIHwgMzUgICAgfAorICAgICAgICAgKy0tLS0tLS0rLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0rCisKKyAgICAgICAgIFdpdGggbm9ybWFsIChOVFNDIG9yIFBBTCkgaG9yaXouIGxpbmUgcmF0ZSwgdGhlIHBvdHMgd2lsbAorICAgICAgICAgZ2l2ZSBhIGZ1bGwgc2NhbGUgKEZGKSByZWFkaW5nIHdpdGggYWJvdXQgNTAwa29obXMgaW4gb25lCisgICAgICAgICBmcmFtZSB0aW1lLiBXaXRoIHByb3BvcnRpb25hbGx5IGZhc3RlciBob3JpeiBsaW5lIHRpbWVzLAorICAgICAgICAgdGhlIGNvdW50ZXJzIHdpbGwgY291bnQgcHJvcG9ydGlvbmFsbHkgZmFzdGVyLgorICAgICAgICAgVGhpcyBzaG91bGQgYmUgbm90ZWQgd2hlbiBkb2luZyB2YXJpYWJsZSBiZWFtIGRpc3BsYXlzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05BTUUgICByZXYgQUREUiB0eXBlIGNoaXAgICBEZXNjcmlwdGlvbgorUE9UR08gICAgICAwMzQgICBXICAgUGF1bGEgIFBvdCBwb3J0ICg0IGJpdCkgYmktZGlyZWN0aW9uIGFuZCBkYXRhLCBhbmQgcG90IGNvdW50ZXIgc3RhcnQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTkFNRSAgIHJldiBBRERSIHR5cGUgY2hpcCAgIERlc2NyaXB0aW9uCitQT1RJTlAgICAgIDAxNiAgIFIgICBQYXVsYSAgUG90IHBpbiBkYXRhIHJlYWQKKworICAgICAgICBUaGlzIHJlZ2lzdGVyIGNvbnRyb2xzIGEgNCBiaXQgYmktZGlyZWN0aW9uIEkvTyBwb3J0CisgICAgICAgIHRoYXQgc2hhcmVzIHRoZSBzYW1lIDQgcGlucyBhcyB0aGUgNCBwb3QgY291bnRlcnMgYWJvdmUuCisKKyAgICAgICAgICstLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCBCSVQjICB8IEZVTkNUSU9OIHwgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgMTUgICAgfCBPVVRSWSAgICB8IE91dHB1dCBlbmFibGUgZm9yIFBhdWxhIHBpbiAzMyAgICAgICAgICAgICAgfAorICAgICAgICAgfCAxNCAgICB8IERBVFJZICAgIHwgSS9PIGRhdGEgUGF1bGEgcGluIDMzICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8IDEzICAgIHwgT1VUUlggICAgfCBPdXRwdXQgZW5hYmxlIGZvciBQYXVsYSBwaW4gMzIgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgMTIgICAgfCBEQVRSWCAgICB8IEkvTyBkYXRhIFBhdWxhIHBpbiAzMiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAxMSAgICB8IE9VVExZICAgIHwgT3V0IHB1dCBlbmFibGUgZm9yIFBhdWxhIHBpbiAzNiAgICAgICAgICAgICB8CisgICAgICAgICB8IDEwICAgIHwgREFUTFkgICAgfCBJL08gZGF0YSBQYXVsYSBwaW4gMzYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgMDkgICAgfCBPVVRMWCAgICB8IE91dHB1dCBlbmFibGUgZm9yIFBhdWxhIHBpbiAzNSAgICAgICAgICAgICAgfAorICAgICAgICAgfCAwOCAgICB8IERBVExYICAgIHwgSS9PIGRhdGEgIFBhdWxhIHBpbiAzNSAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8IDA3LTAxIHwgICBYICAgICAgfCBOb3QgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgMDAgICAgfCBTVEFSVCAgICB8IFN0YXJ0IHBvdHMgKGR1bXAgY2FwYWNpdG9ycyxzdGFydCBjb3VudGVycykgfAorICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvYXRhcmlrYmQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiODk2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvYXRhcmlrYmQudHh0CkBAIC0wLDAgKzEsNzA5IEBACitJbnRlbGxpZ2VudCBLZXlib2FyZCAoaWtiZCkgUHJvdG9jb2wKKworCisxLiBJbnRyb2R1Y3Rpb24KKworVGhlIEF0YXJpIENvcnAuIEludGVsbGlnZW50IEtleWJvYXJkIChpa2JkKSBpcyBhIGdlbmVyYWwgcHVycG9zZSBrZXlib2FyZAorY29udHJvbGxlciB0aGF0IGlzIGZsZXhpYmxlIGVub3VnaCB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIGEgdmFyaWV0eSBvZgorcHJvZHVjdHMgd2l0aG91dCBtb2RpZmljYXRpb24uIFRoZSBrZXlib2FyZCwgd2l0aCBpdHMgbWljcm9jb250cm9sbGVyLAorcHJvdmlkZXMgYSBjb252ZW5pZW50IGNvbm5lY3Rpb24gcG9pbnQgZm9yIGEgbW91c2UgYW5kIHN3aXRjaC10eXBlIGpveXN0aWNrcy4KK1RoZSBpa2JkIHByb2Nlc3NvciBhbHNvIG1haW50YWlucyBhIHRpbWUtb2YtZGF5IGNsb2NrIHdpdGggb25lIHNlY29uZAorcmVzb2x1dGlvbi4KK1RoZSBpa2JkIGhhcyBiZWVuIGRlc2lnbmVkIHRvIGJlIGdlbmVyYWwgZW5vdWdoIHRoYXQgaXQgY2FuIGJlIHVzZWQgd2l0aCBhCithcmlldHkgb2YgbmV3IGNvbXB1dGVyIHByb2R1Y3RzLiBQcm9kdWN0IHZhcmlhdGlvbnMgaW4gYSBudW1iZXIgb2YKK2tleXN3aXRjaGVzLCBtb3VzZSByZXNvbHV0aW9uLCBldGMuIGNhbiBiZSBhY2NvbW1vZGF0ZWQuCitUaGUgaWtiZCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgbWFpbiBwcm9jZXNzb3Igb3ZlciBhIGhpZ2ggc3BlZWQgYmktZGlyZWN0aW9uYWwKK3NlcmlhbCBpbnRlcmZhY2UuIEl0IGNhbiBmdW5jdGlvbiBpbiBhIHZhcmlldHkgb2YgbW9kZXMgdG8gZmFjaWxpdGF0ZQorZGlmZmVyZW50IGFwcGxpY2F0aW9ucyBvZiB0aGUga2V5Ym9hcmQsICBqb3lzdGlja3MsIG9yIG1vdXNlLiBMaW1pdGVkIHVzZSBvZgordGhlIGNvbnRyb2xsZXIgaXMgcG9zc2libGUgaW4gYXBwbGljYXRpb25zIGluIHdoaWNoIG9ubHkgYSB1bmlkaXJlY3Rpb25hbAorY29tbXVuaWNhdGlvbnMgbWVkaXVtIGlzIGF2YWlsYWJsZSBieSBjYXJlZnVsbHkgZGVzaWduaW5nIHRoZSBkZWZhdWx0IG1vZGVzLgorCiszLiBLZXlib2FyZAorCitUaGUga2V5Ym9hcmQgYWx3YXlzIHJldHVybnMga2V5IG1ha2UvYnJlYWsgc2NhbiBjb2Rlcy4gVGhlIGlrYmQgZ2VuZXJhdGVzCitrZXlib2FyZCBzY2FuIGNvZGVzIGZvciBlYWNoIGtleSBwcmVzcyBhbmQgcmVsZWFzZS4gVGhlIGtleSBzY2FuIG1ha2UgKGtleQorY2xvc3VyZSkgY29kZXMgc3RhcnQgYXQgMSwgYW5kIGFyZSBkZWZpbmVkIGluIEFwcGVuZGl4IEEuIEZvciBleGFtcGxlLCB0aGUKK0lTTyBrZXkgcG9zaXRpb24gaW4gdGhlIHNjYW4gY29kZSB0YWJsZSBzaG91bGQgZXhpc3QgZXZlbiBpZiBubyBrZXlzd2l0Y2gKK2V4aXN0cyBpbiB0aGF0IHBvc2l0aW9uIG9uIGEgcGFydGljdWxhciBrZXlib2FyZC4gVGhlIGJyZWFrIGNvZGUgZm9yIGVhY2gga2V5CitpcyBvYnRhaW5lZCBieSBPUmluZyAweDgwIHdpdGggdGhlIG1ha2UgY29kZS4KKworVGhlIHNwZWNpYWwgY29kZXMgMHhGNiB0aHJvdWdoIDB4RkYgYXJlIHJlc2VydmVkIGZvciB1c2UgYXMgZm9sbG93czoKKyAgICAweEY2ICAgICAgICAgICAgc3RhdHVzIHJlcG9ydAorICAgIDB4RjcgICAgICAgICAgICBhYnNvbHV0ZSBtb3VzZSBwb3NpdGlvbiByZWNvcmQKKyAgICAweEY4LTB4RkIgICAgICAgcmVsYXRpdmUgbW91c2UgcG9zaXRpb24gcmVjb3Jkcyhsc2JzIGRldGVybWluZCBieQorICAgICAgICAgICAgICAgICAgICAgbW91c2UgYnV0dG9uIHN0YXRlcykKKyAgICAweEZDICAgICAgICAgICAgdGltZS1vZi1kYXkKKyAgICAweEZEICAgICAgICAgICAgam95c3RpY2sgcmVwb3J0IChib3RoIHN0aWNrcykKKyAgICAweEZFICAgICAgICAgICAgam95c3RpY2sgMCBldmVudAorICAgIDB4RkYgICAgICAgICAgICBqb3lzdGljayAxIGV2ZW50CisKK1RoZSB0d28gc2hpZnQga2V5cyByZXR1cm4gZGlmZmVyZW50IHNjYW4gY29kZXMgaW4gdGhpcyBtb2RlLiBUaGUgRU5URVIga2V5CithbmQgdGhlIFJFVHVybiBrZXkgYXJlIGFsc28gZGlzdGluY3QuCisKKzQuIE1vdXNlCisKK1RoZSBtb3VzZSBwb3J0IHNob3VsZCBiZSBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgYSBtb3VzZSB3aXRoIHJlc29sdXRpb24gb2YKK2FwcHJveGltYXRlbHkgMjAwIGNvdW50cyAocGhhc2UgY2hhbmdlcyBvciAnY2xpY2tzJykgcGVyIGluY2ggb2YgdHJhdmVsLiBUaGUKK21vdXNlIHNob3VsZCBiZSBzY2FubmVkIGF0IGEgcmF0ZSB0aGF0IHdpbGwgcGVybWl0IGFjY3VyYXRlIHRyYWNraW5nIGF0Cit2ZWxvY2l0aWVzIHVwIHRvIDEwIGluY2hlcyBwZXIgc2Vjb25kLgorVGhlIGlrYmQgY2FuIHJlcG9ydCBtb3VzZSBtb3Rpb24gaW4gdGhyZWUgZGlzdGluY3RseSBkaWZmZXJlbnQgd2F5cy4gSXQgY2FuCityZXBvcnQgcmVsYXRpdmUgbW90aW9uLCBhYnNvbHV0ZSBtb3Rpb24gaW4gYSBjb29yZGluYXRlIHN5c3RlbSBtYWludGFpbmVkCit3aXRoaW4gdGhlIGlrYmQsIG9yIGJ5IGNvbnZlcnRpbmcgbW91c2UgbW90aW9uIGludG8ga2V5Ym9hcmQgY3Vyc29yIGNvbnRyb2wKK2tleSBlcXVpdmFsZW50cy4KK1RoZSBtb3VzZSBidXR0b25zIGNhbiBiZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIG1vdXNlIG9yIGFzIGFkZGl0aW9uYWwKK2tleWJvYXJkIGtleXMuCisKKzQuMSBSZWxhdGl2ZSBQb3NpdGlvbiBSZXBvcnRpbmcKKworSW4gcmVsYXRpdmUgcG9zaXRpb24gbW9kZSwgdGhlIGlrYmQgd2lsbCByZXR1cm4gcmVsYXRpdmUgbW91c2UgcG9zaXRpb24KK3JlY29yZHMgd2hlbmV2ZXIgYSBtb3VzZSBldmVudCBvY2N1cnMuIEEgbW91c2UgZXZlbnQgY29uc2lzdHMgb2YgYSBtb3VzZQorYnV0dG9uIGJlaW5nIHByZXNzZWQgb3IgcmVsZWFzZWQsIG9yIG1vdGlvbiBpbiBlaXRoZXIgYXhpcyBleGNlZWRpbmcgYQorc2V0dGFibGUgdGhyZXNob2xkIG9mIG1vdGlvbi4gUmVnYXJkbGVzcyBvZiB0aGUgdGhyZXNob2xkLCBhbGwgYml0cyBvZgorcmVzb2x1dGlvbiBhcmUgcmV0dXJuZWQgdG8gdGhlIGhvc3QgY29tcHV0ZXIuCitOb3RlIHRoYXQgdGhlIGlrYmQgbWF5IHJldHVybiBtb3VzZSByZWxhdGl2ZSBwb3NpdGlvbiByZXBvcnRzIHdpdGgKK3NpZ25pZmljYW50bHkgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQgZGVsdGEgeCBvciB5LiBUaGlzIG1heSBoYXBwZW4gc2luY2Ugbm8KK3JlbGF0aXZlIG1vdXNlIG1vdGlvbiBldmVudHMgd2lsbCBiZSBnZW5lcmF0ZWQ6IChhKSB3aGlsZSB0aGUga2V5Ym9hcmQgaGFzCitiZWVuICdwYXVzZWQnICggdGhlIGV2ZW50IHdpbGwgYmUgc3RvcmVkIHVudGlsIGtleWJvYXJkIGNvbW11bmljYXRpb25zIGlzCityZXN1bWVkKSAoYikgd2hpbGUgYW55IGV2ZW50IGlzIGJlaW5nIHRyYW5zbWl0dGVkLgorCitUaGUgcmVsYXRpdmUgbW91c2UgcG9zaXRpb24gcmVjb3JkIGlzIGEgdGhyZWUgYnl0ZSByZWNvcmQgb2YgdGhlIGZvcm0KKyhyZWdhcmRsZXNzIG9mIGtleWJvYXJkIG1vZGUpOgorICAgICUxMTExMTB4eSAgICAgICAgICAgOyBtb3VzZSBwb3NpdGlvbiByZWNvcmQgZmxhZworICAgICAgICAgICAgICAgICAgICAgICAgOyB3aGVyZSB5IGlzIHRoZSByaWdodCBidXR0b24gc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIHggaXMgdGhlIGxlZnQgYnV0dG9uIHN0YXRlCisgICAgWCAgICAgICAgICAgICAgICAgICA7IGRlbHRhIHggYXMgdHdvcyBjb21wbGVtZW50IGludGVnZXIKKyAgICBZICAgICAgICAgICAgICAgICAgIDsgZGVsdGEgeSBhcyB0d29zIGNvbXBsZW1lbnQgaW50ZWdlcgorCitOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBidXR0b24gc3RhdGUgYml0cyBzaG91bGQgYmUgdmFsaWQgZXZlbiBpZiB0aGUKK01PVVNFIEJVVFRPTiBBQ1RJT04gaGFzIHNldCB0aGUgYnV0dG9ucyB0byBhY3QgbGlrZSBwYXJ0IG9mIHRoZSBrZXlib2FyZC4KK0lmIHRoZSBhY2N1bXVsYXRlZCBtb3Rpb24gYmVmb3JlIHRoZSByZXBvcnQgcGFja2V0IGlzIGdlbmVyYXRlZCBleGNlZWRzIHRoZQorKzEyNy4uLi0xMjggcmFuZ2UsIHRoZSBtb3Rpb24gaXMgYnJva2VuIGludG8gbXVsdGlwbGUgcGFja2V0cy4KK05vdGUgdGhhdCB0aGUgc2lnbiBvZiB0aGUgZGVsdGEgeSByZXBvcnRlZCBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBZIG9yaWdpbgorc2VsZWN0ZWQuCisKKzQuMiBBYnNvbHV0ZSBQb3NpdGlvbiByZXBvcnRpbmcKKworVGhlIGlrYmQgY2FuIGFsc28gbWFpbnRhaW4gYWJzb2x1dGUgbW91c2UgcG9zaXRpb24uIENvbW1hbmRzIGV4aXN0IGZvcgorcmVzZXRpbmcgdGhlIG1vdXNlIHBvc2l0aW9uLCBzZXR0aW5nIFgvWSBzY2FsaW5nLCBhbmQgaW50ZXJyb2dhdGluZyB0aGUKK2N1cnJlbnQgbW91c2UgcG9zaXRpb24uCisKKzQuMyBNb3VzZSBDdXJzb3IgS2V5IE1vZGUKKworVGhlIGlrYmQgY2FuIHRyYW5zbGF0ZSBtb3VzZSBtb3Rpb24gaW50byB0aGUgZXF1aXZhbGVudCBjdXJzb3Iga2V5c3Ryb2tlcy4KK1RoZSBudW1iZXIgb2YgbW91c2UgY2xpY2tzIHBlciBrZXlzdHJva2UgaXMgaW5kZXBlbmRlbnRseSBwcm9ncmFtbWFibGUgaW4KK2VhY2ggYXhpcy4gVGhlIGlrYmQgaW50ZXJuYWxseSBtYWludGFpbnMgbW91c2UgbW90aW9uIGluZm9ybWF0aW9uIHRvIHRoZQoraGlnaGVzdCByZXNvbHV0aW9uIGF2YWlsYWJsZSwgYW5kIG1lcmVseSBnZW5lcmF0ZXMgYSBwYWlyIG9mIGN1cnNvciBrZXkgZXZlbnRzCitmb3IgZWFjaCBtdWx0aXBsZSBvZiB0aGUgc2NhbGUgZmFjdG9yLgorTW91c2UgbW90aW9uIHByb2R1Y2VzIHRoZSBjdXJzb3Iga2V5IG1ha2UgY29kZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSB0aGUKK2JyZWFrIGNvZGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBjdXJzb3Iga2V5LiBUaGUgbW91c2UgYnV0dG9ucyBwcm9kdWNlIHNjYW4KK2NvZGVzIGFib3ZlIHRob3NlIG5vcm1hbGx5IGFzc2lnbmVkIGZvciB0aGUgbGFyZ2VzdCBlbnZpc2lvbmVkIGtleWJvYXJkIChpLmUuCitMRUZUPTB4NzQgJiBSSUdIVD0weDc1KS4KKworNS4gSm95c3RpY2sKKworNS4xIEpveXN0aWNrIEV2ZW50IFJlcG9ydGluZworCitJbiB0aGlzIG1vZGUsIHRoZSBpa2JkIGdlbmVyYXRlcyBhIHJlY29yZCB3aGV2ZXIgdGhlIGpveXN0aWNrIHBvc2l0aW9uIGlzCitjaGFuZ2VkIChpLmUuIGZvciBlYWNoIG9wZW5pbmcgb3IgY2xvc2luZyBvZiBhIGpveXN0aWNrIHN3aXRjaCBvciB0cmlnZ2VyKS4KKworVGhlIGpveXN0aWNrIGV2ZW50IHJlY29yZCBpcyB0d28gYnl0ZXMgb2YgdGhlIGZvcm06CisgICAgJTExMTExMTF4ICAgICAgICAgICA7IEpveXN0aWNrIGV2ZW50IG1hcmtlcgorICAgICAgICAgICAgICAgICAgICAgICAgOyB3aGVyZSB4IGlzIEpveXN0aWNrIDAgb3IgMQorICAgICV4MDAweXl5eSAgICAgICAgICAgOyB3aGVyZSB5eXl5IGlzIHRoZSBzdGljayBwb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgeCBpcyB0aGUgdHJpZ2dlcgorCis1LjIgSm95c3RpY2sgSW50ZXJyb2dhdGlvbgorCitUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgam95c3RpY2sgcG9ydHMgbWF5IGJlIGludGVycm9nYXRlZCBhdCBhbnkgdGltZSBpbgordGhpcyBtb2RlIGJ5IHNlbmRpbmcgYW4gJ0ludGVycm9nYXRlIEpveXN0aWNrJyBjb21tYW5kIHRvIHRoZSBpa2JkLgorCitUaGUgaWtiZCByZXNwb25zZSB0byBqb3lzdGljayBpbnRlcnJvZ2F0aW9uIGlzIGEgdGhyZWUgYnl0ZSByZXBvcnQgb2YgdGhlIGZvcm0KKyAgICAweEZEICAgICAgICAgICAgICAgIDsgam95c3RpY2sgcmVwb3J0IGhlYWRlcgorICAgICV4MDAweXl5eSAgICAgICAgICAgOyBKb3lzdGljayAwCisgICAgJXgwMDB5eXl5ICAgICAgICAgICA7IEpveXN0aWNrIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgd2hlcmUgeCBpcyB0aGUgdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgeXl5IGlzIHRoZSBzdGljayBwb3NpdGlvbgorCis1LjMgSm95c3RpY2sgTW9uaXRvcmluZworCitBIG1vZGUgaXMgYXZhaWxhYmxlIHRoYXQgZGV2b3RlcyBuZWFybHkgYWxsIG9mIHRoZSBrZXlib2FyZCBjb21tdW5pY2F0aW9ucwordGltZSB0byByZXBvcnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBqb3lzdGljayBwb3J0cyBhdCBhIHVzZXIgc3BlY2lmaWFibGUgcmF0ZS4KK0l0IHJlbWFpbnMgaW4gdGhpcyBtb2RlIHVudGlsIHJlc2V0IG9yIGNvbW1hbmRlZCBpbnRvIGFub3RoZXIgbW9kZS4gVGhlIFBBVVNFCitjb21tYW5kIGluIHRoaXMgbW9kZSBub3Qgb25seSBzdG9wIHRoZSBvdXRwdXQgYnV0IGFsc28gdGVtcG9yYXJpbHkgc3RvcHMKK3NjYW5uaW5nIHRoZSBqb3lzdGlja3MgKHNhbXBsZXMgYXJlIG5vdCBxdWV1ZWQpLgorCis1LjQgRmlyZSBCdXR0b24gTW9uaXRvcmluZworCitBIG1vZGUgaXMgcHJvdmlkZWQgdG8gcGVybWl0IG1vbml0b3JpbmcgYSBzaW5nbGUgaW5wdXQgYml0IGF0IGEgaGlnaCByYXRlLiBJbgordGhpcyBtb2RlIHRoZSBpa2JkIG1vbml0b3JzIHRoZSBzdGF0ZSBvZiB0aGUgSm95c3RpY2sgMSBmaXJlIGJ1dHRvbiBhdCB0aGUKK21heGltdW0gcmF0ZSBwZXJtaXR0ZWQgYnkgdGhlIHNlcmlhbCBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIFRoZSBkYXRhIGlzIHBhY2tlZAorOCBiaXRzIHBlciBieXRlIGZvciB0cmFuc21pc3Npb24gdG8gdGhlIGhvc3QuIFRoZSBpa2JkIHJlbWFpbnMgaW4gdGhpcyBtb2RlCit1bnRpbCByZXNldCBvciBjb21tYW5kZWQgaW50byBhbm90aGVyIG1vZGUuIFRoZSBQQVVTRSBjb21tYW5kIGluIHRoaXMgbW9kZSBub3QKK29ubHkgc3RvcHMgdGhlIG91dHB1dCBidXQgYWxzbyB0ZW1wb3JhcmlseSBzdG9wcyBzY2FubmluZyB0aGUgYnV0dG9uIChzYW1wbGVzCithcmUgbm90IHF1ZXVlZCkuCisKKzUuNSBKb3lzdGljayBLZXkgQ29kZSBNb2RlCisKK1RoZSBpa2JkIG1heSBiZSBjb21tYW5kZWQgdG8gdHJhbnNsYXRlIHRoZSB1c2Ugb2YgZWl0aGVyIGpveXN0aWNrIGludG8gdGhlCitlcXVpdmFsZW50IGN1cnNvciBjb250cm9sIGtleXN0cm9rZShzKS4gVGhlIGlrYmQgcHJvdmlkZXMgYSBzaW5nbGUgYnJlYWtwb2ludAordmVsb2NpdHkgam95c3RpY2sgY3Vyc29yLgorSm95c3RpY2sgZXZlbnRzIHByb2R1Y2UgdGhlIG1ha2UgY29kZSwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgdGhlIGJyZWFrIGNvZGUKK2ZvciB0aGUgYXBwcm9wcmlhdGUgY3Vyc29yIG1vdGlvbiBrZXlzLiBUaGUgdHJpZ2dlciBvciBmaXJlIGJ1dHRvbnMgb2YgdGhlCitqb3lzdGlja3MgcHJvZHVjZSBwc2V1ZG8ga2V5IHNjYW4gY29kZXMgYWJvdmUgdGhvc2UgdXNlZCBieSB0aGUgbGFyZ2VzdCBrZXkKK21hdHJpeCBlbnZpc2lvbmVkIChpLmUuIEpPWVNUSUNLMD0weDc0LCBKT1lTVElDSzE9MHg3NSkuCisKKzYuIFRpbWUtb2YtRGF5IENsb2NrCisKK1RoZSBpa2JkIGFsc28gbWFpbnRhaW5zIGEgdGltZS1vZi1kYXkgY2xvY2sgZm9yIHRoZSBzeXN0ZW0uIENvbW1hbmRzIGFyZQorYXZhaWxhYmxlIHRvIHNldCBhbmQgaW50ZXJyb2dhdGUgdGhlIHRpbWVyLW9mLWRheSBjbG9jay4gVGltZS1rZWVwaW5nIGlzCittYWludGFpbmVkIGRvd24gdG8gYSByZXNvbHV0aW9uIG9mIG9uZSBzZWNvbmQuCisKKzcuIFN0YXR1cyBJbnF1aXJpZXMKKworVGhlIGN1cnJlbnQgc3RhdGUgb2YgaWtiZCBtb2RlcyBhbmQgcGFyYW1ldGVycyBtYXkgYmUgZm91bmQgYnkgc2VuZGluZyBzdGF0dXMKK2lucXVpcnkgY29tbWFuZHMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBpa2JkIHNldCBjb21tYW5kcy4KKworOC4gUG93ZXItVXAgTW9kZQorCitUaGUga2V5Ym9hcmQgY29udHJvbGxlciB3aWxsIHBlcmZvcm0gYSBzaW1wbGUgc2VsZi10ZXN0IG9uIHBvd2VyLXVwIHRvIGRldGVjdAorbWFqb3IgY29udHJvbGxlciBmYXVsdHMgKFJPTSBjaGVja3N1bSBhbmQgUkFNIHRlc3QpIGFuZCBzdWNoIHRoaW5ncyBhcyBzdHVjawora2V5cy4gQW55IGtleXMgZG93biBhdCBwb3dlci11cCBhcmUgcHJlc3VtZWQgdG8gYmUgc3R1Y2ssIGFuZCB0aGVpciBCUkVBSworKHNpYykgY29kZSBpcyByZXR1cm5lZCAod2hpY2ggd2l0aG91dCB0aGUgcHJlY2VkaW5nIE1BS0UgY29kZSBpcyBhIGZsYWcgZm9yIGEKK2tleWJvYXJkIGVycm9yKS4gSWYgdGhlIGNvbnRyb2xsZXIgc2VsZi10ZXN0IGNvbXBsZXRlcyB3aXRob3V0IGVycm9yLCB0aGUgY29kZQorMHhGMCBpcyByZXR1cm5lZC4gKFRoaXMgY29kZSB3aWxsIGJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHZlcnNpb24vcmxlYXNlIG9mCit0aGUgaWtiZCBjb250cm9sbGVyLiBUaGUgZmlyc3QgcmVsZWFzZSBvZiB0aGUgaWtiZCBpcyB2ZXJzaW9uIDB4RjAsIHNob3VsZAordGhlcmUgYmUgYSBzZWNvbmQgcmVsZWFzZSBpdCB3aWxsIGJlIDB4RjEsIGFuZCBzbyBvbi4pCitUaGUgaWtiZCBkZWZhdWx0cyB0byBhIG1vdXNlIHBvc2l0aW9uIHJlcG9ydGluZyB3aXRoIHRocmVzaG9sZCBvZiAxIHVuaXQgaW4KK2VpdGhlciBheGlzIGFuZCB0aGUgWT0wIG9yaWdpbiBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4sIGFuZCBqb3lzdGljayBldmVudAorcmVwb3J0aW5nIG1vZGUgZm9yIGpveXN0aWNrIDEsIHdpdGggYm90aCBidXR0b25zIGJlaW5nIGxvZ2ljYWxseSBhc3NpZ25lZCB0bwordGhlIG1vdXNlLiBBZnRlciBhbnkgam95c3RpY2sgY29tbWFuZCwgdGhlIGlrYmQgYXNzdW1lcyB0aGF0IGpveXN0aWNrcyBhcmUKK2Nvbm5lY3RlZCB0byBib3RoIEpveXN0aWNrMCBhbmQgSm95c3RpY2sxLiBBbnkgbW91c2UgY29tbWFuZCAoZXhjZXB0IE1PVVNFCitESVNBQkxFKSB0aGVuIGNhdXNlcyBwb3J0IDAgdG8gYWdhaW4gYmUgc2Nhbm5lZCBhcyBpZiBpdCB3ZXJlIGEgbW91c2UsIGFuZAorYm90aCBidXR0b25zIGFyZSBsb2dpY2FsbHkgY29ubmVjdGVkIHRvIGl0LiBJZiBhIG1vdXNlIGRpYWJsZSBjb21tYW5kIGlzCityZWNlaXZlZCB3aGlsZSBwb3J0IDAgaXMgcHJlc3VtZWQgdG8gYmUgYSBtb3VzZSwgdGhlIGJ1dHRvbiBpcyBsb2dpY2FsbHkKK2Fzc2lnbmVkIHRvIEpveXN0aWNrMSAoIHVudGlsIHRoZSBtb3VzZSBpcyByZWVuYWJsZWQgYnkgYW5vdGhlciBtb3VzZSBjb21tYW5kKS4KKworOS4gaWtiZCBDb21tYW5kIFNldAorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgYSBsaXN0IG9mIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHNlbnQgdG8gdGhlIGlrYmQuIENvbW1hbmQKK2NvZGVzIChzdWNoIGFzIDB4MDApIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIHNob3VsZCBwZXJmb3JtIG5vIG9wZXJhdGlvbgorKE5PUHMpLgorCis5LjEgUkVTRVQKKworICAgIDB4ODAKKyAgICAweDAxCisKK04uQi4gVGhlIFJFU0VUIGNvbW1hbmQgaXMgdGhlIG9ubHkgdHdvIGJ5dGUgY29tbWFuZCB1bmRlcnN0b29kIGJ5IHRoZSBpa2JkLgorQW55IGJ5dGUgZm9sbG93aW5nIGFuIDB4ODAgY29tbWFuZCBieXRlIG90aGVyIHRoYW4gMHgwMSBpcyBpZ25vcmVkIChhbmQgY2F1c2VzCit0aGUgMHg4MCB0byBiZSBpZ25vcmVkKS4KK0EgcmVzZXQgbWF5IGFsc28gYmUgY2F1c2VkIGJ5IHNlbmRpbmcgYSBicmVhayBsYXN0aW5nIGF0IGxlYXN0IDIwMG1TIHRvIHRoZQoraWtiZC4KK0V4ZWN1dGluZyB0aGUgUkVTRVQgY29tbWFuZCByZXR1cm5zIHRoZSBrZXlib2FyZCB0byBpdHMgZGVmYXVsdCAocG93ZXItdXApCittb2RlIGFuZCBwYXJhbWV0ZXIgc2V0dGluZ3MuIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgdGltZS1vZi1kYXkgY2xvY2suCitUaGUgUkVTRVQgY29tbWFuZCBvciBmdW5jdGlvbiBjYXVzZXMgdGhlIGlrYmQgdG8gcGVyZm9ybSBhIHNpbXBsZSBzZWxmLXRlc3QuCitJZiB0aGUgdGVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgaWtiZCB3aWxsIHNlbmQgdGhlIGNvZGUgb2YgMHhGMCB3aXRoaW4gMzAwbVMKK29mIHJlY2VpcHQgb2YgdGhlIFJFU0VUIGNvbW1hbmQgKG9yIHRoZSBlbmQgb2YgdGhlIGJyZWFrLCBvciBwb3dlci11cCkuIFRoZQoraWtiZCB3aWxsIHRoZW4gc2NhbiB0aGUga2V5IG1hdHJpeCBmb3IgYW55IHN0dWNrIChjbG9zZWQpIGtleXMuIEFueSBrZXlzIGZvdW5kCitjbG9zZWQgd2lsbCBjYXVzZSB0aGUgYnJlYWsgc2NhbiBjb2RlIHRvIGJlIGdlbmVyYXRlZCAodGhlIGJyZWFrIGNvZGUgYXJyaXZpbmcKK3dpdGhvdXQgYmVpbmcgcHJlY2VkZWQgYnkgdGhlIG1ha2UgY29kZSBpcyBhIGZsYWcgZm9yIGEga2V5IG1hdHJpeCBlcnJvcikuCisKKzkuMi4gU0VUIE1PVVNFIEJVVFRPTiBBQ1RJT04KKworICAgIDB4MDcKKyAgICAlMDAwMDBtc3MgICAgICAgICAgIDsgbW91c2UgYnV0dG9uIGFjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAobSBpcyBwcmVzdW1lZCA9IDEgd2hlbiBpbiBNT1VTRSBLRVlDT0RFIG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICA7IG1zcz0weHksIG1vdXNlIGJ1dHRvbiBwcmVzcyBvciByZWxlYXNlIGNhdXNlcyBtb3VzZQorICAgICAgICAgICAgICAgICAgICAgICAgOyAgcG9zaXRpb24gcmVwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICA7ICB3aGVyZSB5PTEsIG1vdXNlIGtleSBwcmVzcyBjYXVzZXMgYWJzb2x1dGUgcmVwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICA7ICBhbmQgeD0xLCBtb3VzZSBrZXkgcmVsZWFzZSBjYXVzZXMgYWJzb2x1dGUgcmVwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICA7IG1zcz0xMDAsIG1vdXNlIGJ1dHRvbnMgYWN0IGxpa2Uga2V5cyAKKworVGhpcyBjb21tYW5kIHNldHMgaG93IHRoZSBpa2JkIHNob3VsZCB0cmVhdCB0aGUgYnV0dG9ucyBvbiB0aGUgbW91c2UuIFRoZQorZGVmYXVsdCBtb3VzZSBidXR0b24gYWN0aW9uIG1vZGUgaXMgJTAwMDAwMDAwLCB0aGUgYnV0dG9ucyBhcmUgdHJlYXRlZCBhcyBwYXJ0CitvZiB0aGUgbW91c2UgbG9naWNhbGx5LgorV2hlbiBidXR0b25zIGFjdCBsaWtlIGtleXMsIExFRlQ9MHg3NCAmIFJJR0hUPTB4NzUuCisKKzkuMyBTRVQgUkVMQVRJVkUgTU9VU0UgUE9TSVRJT04gUkVQT1JUSU5HCisKKyAgICAweDA4CisKK1NldCByZWxhdGl2ZSBtb3VzZSBwb3NpdGlvbiByZXBvcnRpbmcuIChERUZBVUxUKSBNb3VzZSBwb3NpdGlvbiBwYWNrZXRzIGFyZQorZ2VuZXJhdGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBpa2JkIHdoZW5ldmVyIG1vdGlvbiBleGNlZWRzIHRoZSBzZXRhYmxlCit0aHJlc2hvbGQgaW4gZWl0aGVyIGF4aXMgKHNlZSBTRVQgTU9VU0UgVEhSRVNIT0xEKS4gRGVwZW5kaW5nIHVwb24gdGhlIG1vdXNlCitrZXkgbW9kZSwgbW91c2UgcG9zaXRpb24gcmVwb3J0cyBtYXkgYWxzbyBiZSBnZW5lcmF0ZWQgd2hlbiBlaXRoZXIgbW91c2UKK2J1dHRvbiBpcyBwcmVzc2VkIG9yIHJlbGVhc2VkLiBPdGhlcndpc2UgdGhlIG1vdXNlIGJ1dHRvbnMgYmVoYXZlIGFzIGlmIHRoZXkKK3dlcmUga2V5Ym9hcmQga2V5cy4KKworOS40IFNFVCBBQlNPTFVURSBNT1VTRSBQT1NJVElPTklORworCisgICAgMHgwOQorICAgIFhNU0IgICAgICAgICAgICAgICAgOyBYIG1heGltdW0gKGluIHNjYWxlZCBtb3VzZSBjbGlja3MpCisgICAgWExTQgorICAgIFlNU0IgICAgICAgICAgICAgICAgOyBZIG1heGltdW0gKGluIHNjYWxlZCBtb3VzZSBjbGlja3MpCisgICAgWUxTQgorCQorU2V0IGFic29sdXRlIG1vdXNlIHBvc2l0aW9uIG1haW50ZW5hbmNlLiBSZXNldHMgdGhlIGlrYmQgbWFpbnRhaW5lZCBYIGFuZCBZCitjb29yZGluYXRlcy4KK0luIHRoaXMgbW9kZSwgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbGx5IG1haW50YWluZWQgY29vcmRpbmF0ZXMgZG9lcyBOT1Qgd3JhcAorYmV0d2VlbiAwIGFuZCBsYXJnZSBwb3NpdGl2ZSBudW1iZXJzLiBFeGNlc3MgbW90aW9uIGJlbG93IDAgaXMgaWdub3JlZC4gVGhlCitjb21tYW5kIHNldHMgdGhlIG1heGltdW0gcG9zaXRpdmUgdmFsdWUgdGhhdCBjYW4gYmUgYXR0YWluZWQgaW4gdGhlIHNjYWxlZAorY29vcmRpbmF0ZSBzeXN0ZW0uIE1vdGlvbiBiZXlvbmQgdGhhdCB2YWx1ZSBpcyBhbHNvIGlnbm9yZWQuCisKKzkuNSBTRVQgTU9VU0UgS0VZQ09ERSBNT1NFCisKKyAgICAweDBBCisgICAgZGVsdGF4ICAgICAgICAgICAgICA7IGRpc3RhbmNlIGluIFggY2xpY2tzIHRvIHJldHVybiAoTEVGVCkgb3IgKFJJR0hUKQorICAgIGRlbHRheSAgICAgICAgICAgICAgOyBkaXN0YW5jZSBpbiBZIGNsaWNrcyB0byByZXR1cm4gKFVQKSBvciAoRE9XTikKKworU2V0IG1vdXNlIG1vbml0b3Jpbmcgcm91dGluZXMgdG8gcmV0dXJuIGN1cnNvciBtb3Rpb24ga2V5Y29kZXMgaW5zdGVhZCBvZgorZWl0aGVyIFJFTEFUSVZFIG9yIEFCU09MVVRFIG1vdGlvbiByZWNvcmRzLiBUaGUgaWtiZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZQorY3Vyc29yIGtleWNvZGUgYWZ0ZXIgbW91c2UgdHJhdmVsIGV4Y2VlZGluZyB0aGUgdXNlciBzcGVjaWZpZWQgZGVsdGFzIGluCitlaXRoZXIgYXhpcy4gV2hlbiB0aGUga2V5Ym9hcmQgaXMgaW4ga2V5IHNjYW4gY29kZSBtb2RlLCBtb3VzZSBtb3Rpb24gd2lsbAorY2F1c2UgdGhlIG1ha2UgY29kZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSB0aGUgYnJlYWsgY29kZS4gTm90ZSB0aGF0IHRoaXMKK2NvbW1hbmQgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBtb3VzZSBtb3Rpb24gb3JpZ2luLgorCis5Li42IFNFVCBNT1VTRSBUSFJFU0hPTEQKKworICAgIDB4MEIKKyAgICBYICAgICAgICAgICAgICAgICAgIDsgeCB0aHJlc2hvbGQgaW4gbW91c2UgdGlja3MgKHBvc2l0aXZlIGludGVnZXJzKQorICAgIFkgICAgICAgICAgICAgICAgICAgOyB5IHRocmVzaG9sZCBpbiBtb3VzZSB0aWNrcyAocG9zaXRpdmUgaW50ZWdlcnMpCisKK1RoaXMgY29tbWFuZCBzZXRzIHRoZSB0aHJlc2hvbGQgYmVmb3JlIGEgbW91c2UgZXZlbnQgaXMgZ2VuZXJhdGVkLiBOb3RlIHRoYXQKK2l0IGRvZXMgTk9UIGFmZmVjdCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZGF0YSByZXR1cm5lZCB0byB0aGUgaG9zdC4gVGhpcworY29tbWFuZCBpcyB2YWxpZCBvbmx5IGluIFJFTEFUSVZFIE1PVVNFIFBPU0lUSU9OSU5HIG1vZGUuIFRoZSB0aHJlc2hvbGRzCitkZWZhdWx0IHRvIDEgYXQgUkVTRVQgKG9yIHBvd2VyLXVwKS4KKworOS43IFNFVCBNT1VTRSBTQ0FMRQorCisgICAgMHgwQworICAgIFggICAgICAgICAgICAgICAgICAgOyBob3Jpem9udGFsIG1vdXNlIHRpY2tzIHBlciBpbnRlcm5lbCBYCisgICAgWSAgICAgICAgICAgICAgICAgICA7IHZlcnRpY2FsIG1vdXNlIHRpY2tzIHBlciBpbnRlcm5lbCBZCisKK1RoaXMgY29tbWFuZCBzZXRzIHRoZSBzY2FsZSBmYWN0b3IgZm9yIHRoZSBBQlNPTFVURSBNT1VTRSBQT1NJVElPTklORyBtb2RlLgorSW4gdGhpcyBtb2RlLCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtb3VzZSBwaGFzZSBjaGFuZ2VzICgnY2xpY2tzJykgbXVzdAorb2NjdXIgYmVmb3JlIHRoZSBpbnRlcm5hbGx5IG1haW50YWluZWQgY29vcmRpbmF0ZSBpcyBjaGFuZ2VkIGJ5IG9uZQorKGluZGVwZW5kZW50bHkgc2NhbGVkIGZvciBlYWNoIGF4aXMpLiBSZW1lbWJlciB0aGF0IHRoZSBtb3VzZSBwb3NpdGlvbgoraW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9ubHkgYnkgaW50ZXJyb2dhdGluZyB0aGUgaWtiZCBpbiB0aGUgQUJTT0xVVEUgTU9VU0UKK1BPU0lUSU9OSU5HIG1vZGUgdW5sZXNzIHRoZSBpa2JkIGhhcyBiZWVuIGNvbW1hbmRlZCB0byByZXBvcnQgb24gYnV0dG9uIHByZXNzCitvciByZWxlYXNlIChzZWUgU0VUIE1PU0UgQlVUVE9OIEFDVElPTikuCisKKzkuOCBJTlRFUlJPR0FURSBNT1VTRSBQT1NJVElPTgorCisgICAgMHgwRAorICAgIFJldHVybnM6CisgICAgICAgICAgICAweEY3ICAgICAgIDsgYWJzb2x1dGUgbW91c2UgcG9zaXRpb24gaGVhZGVyCisgICAgQlVUVE9OUworICAgICAgICAgICAgMDAwMGRjYmEgICA7IHdoZXJlIGEgaXMgcmlnaHQgYnV0dG9uIGRvd24gc2luY2UgbGFzdCBpbnRlcnJvZ2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgIDsgYiBpcyByaWdodCBidXR0b24gdXAgc2luY2UgbGFzdAorICAgICAgICAgICAgICAgICAgICAgICA7IGMgaXMgbGVmdCBidXR0b24gZG93biBzaW5jZSBsYXN0CisgICAgICAgICAgICAgICAgICAgICAgIDsgZCBpcyBsZWZ0IGJ1dHRvbiB1cCBzaW5jZSBsYXN0CisgICAgICAgICAgICBYTVNCICAgICAgIDsgWCBjb29yZGluYXRlCisgICAgICAgICAgICBYTFNCCisgICAgICAgICAgICBZTVNCICAgICAgIDsgWSBjb29yZGluYXRlCisgICAgICAgICAgICBZTFNCCisKK1RoZSBJTlRFUlJPR0FURSBNT1VTRSBQT1NJVElPTiBjb21tYW5kIGlzIHZhbGlkIHdoZW4gaW4gdGhlIEFCU09MVVRFIE1PVVNFCitQT1NJVElPTklORyBtb2RlLCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoZSBNT1VTRSBCVVRUT04gQUNUSU9OLgorCis5LjkgTE9BRCBNT1VTRSBQT1NJVElPTgorCisgICAgMHgwRQorICAgIDB4MDAgICAgICAgICAgICAgICAgOyBmaWxsZXIKKyAgICBYTVNCICAgICAgICAgICAgICAgIDsgWCBjb29yZGluYXRlCisgICAgWExTQiAgICAgICAgICAgICAgICA7IChpbiBzY2FsZWQgY29vcmRpbmF0ZSBzeXN0ZW0pCisgICAgWU1TQiAgICAgICAgICAgICAgICA7IFkgY29vcmRpbmF0ZQorICAgIFlMU0IKKworVGhpcyBjb21tYW5kIGFsbG93cyB0aGUgdXNlciB0byBwcmVzZXQgdGhlIGludGVybmFsbHkgbWFpbnRhaW5lZCBhYnNvbHV0ZQorbW91c2UgcG9zaXRpb24uCisKKzkuMTAgU0VUIFk9MCBBVCBCT1RUT00KKworICAgIDB4MEYKKworVGhpcyBjb21tYW5kIG1ha2VzIHRoZSBvcmlnaW4gb2YgdGhlIFkgYXhpcyB0byBiZSBhdCB0aGUgYm90dG9tIG9mIHRoZQorbG9naWNhbCBjb29yZGluYXRlIHN5c3RlbSBpbnRlcm5lbCB0byB0aGUgaWtiZCBmb3IgYWxsIHJlbGF0aXZlIG9yIGFic29sdXRlCittb3VzZSBtb3Rpb24uIFRoaXMgY2F1c2VzIG1vdXNlIG1vdGlvbiB0b3dhcmQgdGhlIHVzZXIgdG8gYmUgbmVnYXRpdmUgaW4gc2lnbgorYW5kIGF3YXkgZnJvbSB0aGUgdXNlciB0byBiZSBwb3NpdGl2ZS4KKworOS4xMSBTRVQgWT0wIEFUIFRPUAorCisgICAgMHgxMAorCitNYWtlcyB0aGUgb3JpZ2luIG9mIHRoZSBZIGF4aXMgdG8gYmUgYXQgdGhlIHRvcCBvZiB0aGUgbG9naWNhbCBjb29yZGluYXRlCitzeXN0ZW0gd2l0aGluIHRoZSBpa2JkIGZvciBhbGwgcmVsYXRpdmUgb3IgYWJzb2x1dGUgbW91c2UgbW90aW9uLiAoREVGQVVMVCkKK1RoaXMgY2F1c2VzIG1vdXNlIG1vdGlvbiB0b3dhcmQgdGhlIHVzZXIgdG8gYmUgcG9zaXRpdmUgaW4gc2lnbiBhbmQgYXdheSBmcm9tCit0aGUgdXNlciB0byBiZSBuZWdhdGl2ZS4KKworOS4xMiBSRVNVTUUKKworICAgIDB4MTEKKworUmVzdW1lIHNlbmRpbmcgZGF0YSB0byB0aGUgaG9zdC4gU2luY2UgYW55IGNvbW1hbmQgcmVjZWl2ZWQgYnkgdGhlIGlrYmQgYWZ0ZXIKK2l0cyBvdXRwdXQgaGFzIGJlZW4gcGF1c2VkIGFsc28gY2F1c2VzIGFuIGltcGxpY2l0IFJFU1VNRSB0aGlzIGNvbW1hbmQgY2FuIGJlCit0aG91Z2h0IG9mIGFzIGEgTk8gT1BFUkFUSU9OIGNvbW1hbmQuIElmIHRoaXMgY29tbWFuZCBpcyByZWNlaXZlZCBieSB0aGUgaWtiZAorYW5kIGl0IGlzIG5vdCBQQVVTRUQsIGl0IGlzIHNpbXBseSBpZ25vcmVkLgorCis5LjEzIERJU0FCTEUgTU9VU0UKKworICAgIDB4MTIKKworQWxsIG1vdXNlIGV2ZW50IHJlcG9ydGluZyBpcyBkaXNhYmxlZCAoYW5kIHNjYW5uaW5nIG1heSBiZSBpbnRlcm5hbGx5CitkaXNhYmxlZCkuIEFueSB2YWxpZCBtb3VzZSBtb2RlIGNvbW1hbmQgcmVzdW1lcyBtb3VzZSBtb3Rpb24gbW9uaXRvcmluZy4gKFRoZQordmFsaWQgbW91c2UgbW9kZSBjb21tYW5kcyBhcmUgU0VUIFJFTEFUSVZFIE1PVVNFIFBPU0lUSU9OIFJFUE9SVElORywgU0VUCitBQlNPTFVURSBNT1VTRSBQT1NJVElPTklORywgYW5kIFNFVCBNT1VTRSBLRVlDT0RFIE1PREUuICkKK04uQi4gSWYgdGhlIG1vdXNlIGJ1dHRvbnMgaGF2ZSBiZWVuIGNvbW1hbmRlZCB0byBhY3QgbGlrZSBrZXlib2FyZCBrZXlzLCB0aGlzCitjb21tYW5kIERPRVMgYWZmZWN0IHRoZWlyIGFjdGlvbnMuCisKKzkuMTQgUEFVU0UgT1VUUFVUCisKKyAgICAweDEzCisKK1N0b3Agc2VuZGluZyBkYXRhIHRvIHRoZSBob3N0IHVudGlsIGFub3RoZXIgdmFsaWQgY29tbWFuZCBpcyByZWNlaXZlZC4gS2V5CittYXRyaXggYWN0aXZpdHkgaXMgc3RpbGwgbW9uaXRvcmVkIGFuZCBzY2FuIGNvZGVzIG9yIEFTQ0lJIGNoYXJhY3RlcnMgZW5xdWV1ZWQKKyh1cCB0byB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgdGhlIG1pY3JvY29udHJvbGxlcikgdG8gYmUgc2VudCB3aGVuIHRoZSBob3N0CithbGxvd3MgdGhlIG91dHB1dCB0byBiZSByZXN1bWVkLiBJZiBpbiB0aGUgSk9ZU1RJQ0sgRVZFTlQgUkVQT1JUSU5HIG1vZGUsCitqb3lzdGljayBldmVudHMgYXJlIGFsc28gcXVldWVkLgorTW91c2UgbW90aW9uIHNob3VsZCBiZSBhY2N1bXVsYXRlZCB3aGlsZSB0aGUgb3V0cHV0IGlzIHBhdXNlZC4gSWYgdGhlIGlrYmQgaXMKK2luIFJFTEFUSVZFIE1PVVNFIFBPU0lUSU9OSU5HIFJFUE9SVElORyBtb2RlLCBtb3Rpb24gaXMgYWNjdW11bGF0ZWQgYmV5b25kIHRoZQorbm9ybWFsIHRocmVzaG9sZCBsaW1pdHMgdG8gcHJvZHVjZSB0aGUgbWluaW11bSBudW1iZXIgb2YgcGFja2V0cyBuZWNlc3NhcnkgZm9yCit0cmFuc21pc3Npb24gd2hlbiBvdXRwdXQgaXMgcmVzdW1lZC4gUHJlc3Npbmcgb3IgcmVsZWFzaW5nIGVpdGhlciBtb3VzZSBidXR0b24KK2NhdXNlcyBhbnkgYWNjdW11bGF0ZWQgbW90aW9uIHRvIGJlIGltbWVkaWF0ZWx5IHF1ZXVlZCBhcyBwYWNrZXRzLCBpZiB0aGUKK21vdXNlIGlzIGluIFJFTEFUSVZFIE1PVVNFIFBPU0lUSU9OIFJFUE9SVElORyBtb2RlLgorQmVjYXVzZSBvZiB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIG1pY3JvY29udHJvbGxlciBtZW1vcnkgdGhpcyBjb21tYW5kIHNob3VsZAorYmUgdXNlZCBzcGFyaW5nbHksIGFuZCB0aGUgb3V0cHV0IHNob3VsZCBub3QgYmUgc2h1dCBvZiBmb3IgbW9yZSB0aGFuIDx0YmQ+CittaWxsaXNlY29uZHMgYXQgYSB0aW1lLgorVGhlIG91dHB1dCBpcyBzdG9wcGVkIG9ubHkgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCAnZXZlbicuIElmIHRoZSBQQVVTRQorT1VUUFVUIGNvbW1hbmQgaXMgcmVjZWl2ZWQgaW4gdGhlIG1pZGRsZSBvZiBhIG11bHRpcGxlIGJ5dGUgcmVwb3J0LCB0aGUgcGFja2V0Cit3aWxsIHN0aWxsIGJlIHRyYW5zbWl0dGVkIHRvIGNvbmNsdXNpb24gYW5kIHRoZW4gdGhlIFBBVVNFIHdpbGwgdGFrZSBlZmZlY3QuCitXaGVuIHRoZSBpa2JkIGlzIGluIGVpdGhlciB0aGUgSk9ZU1RJQ0sgTU9OSVRPUklORyBtb2RlIG9yIHRoZSBGSVJFIEJVVFRPTgorTU9OSVRPUklORyBtb2RlLCB0aGUgUEFVU0UgT1VUUFVUIGNvbW1hbmQgYWxzbyB0ZW1wb3JhcmlseSBzdG9wcyB0aGUKK21vbml0b3JpbmcgcHJvY2VzcyAoaS5lLiB0aGUgc2FtcGxlcyBhcmUgbm90IGVucXVldWVkIGZvciB0cmFuc21pc3Npb24pLgorCiswLjE1IFNFVCBKT1lTVElDSyBFVkVOVCBSRVBPUlRJTkcKKworICAgIDB4MTQKKworRW50ZXIgSk9ZU1RJQ0sgRVZFTlQgUkVQT1JUSU5HIG1vZGUgKERFRkFVTFQpLiBFYWNoIG9wZW5pbmcgb3IgY2xvc3VyZSBvZiBhCitqb3lzdGljayBzd2l0Y2ggb3IgdHJpZ2dlciBjYXVzZXMgYSBqb3lzdGljayBldmVudCByZWNvcmQgdG8gYmUgZ2VuZXJhdGVkLgorCis5LjE2IFNFVCBKT1lTVElDSyBJTlRFUlJPR0FUSU9OIE1PREUKKworICAgIDB4MTUKKworRGlzYWJsZXMgSk9ZU1RJQ0sgRVZFTlQgUkVQT1JUSU5HLiBIb3N0IG11c3Qgc2VuZCBpbmRpdmlkdWFsIEpPWVNUSUNLCitJTlRFUlJPR0FURSBjb21tYW5kcyB0byBzZW5zZSBqb3lzdGljayBzdGF0ZS4KKworOS4xNyBKT1lTVElDSyBJTlRFUlJPR0FURQorCisgICAgMHgxNgorCitSZXR1cm4gYSByZWNvcmQgaW5kaWNhdGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgam95c3RpY2tzLiBUaGlzIGNvbW1hbmQKK2lzIHZhbGlkIGluIGVpdGhlciB0aGUgSk9ZU1RJQ0sgRVZFTlQgUkVQT1JUSU5HIG1vZGUgb3IgdGhlIEpPWVNUSUNLCitJTlRFUlJPR0FUSU9OIE1PREUuCisKKzkuMTggU0VUIEpPWVNUSUNLIE1PTklUT1JJTkcKKworICAgIDB4MTcKKyAgICByYXRlICAgICAgICAgICAgICAgIDsgdGltZSBiZXR3ZWVuIHNhbXBsZXMgaW4gaHVuZHJldGhzIG9mIGEgc2Vjb25kCisgICAgUmV0dXJuczogKGluIHBhY2tldHMgb2YgdHdvIGFzIGxvbmcgYXMgaW4gbW9kZSkKKyAgICAgICAgICAgICUwMDAwMDB4eSAgIDsgd2hlcmUgeSBpcyBKT1lTVElDSzEgRmlyZSBidXR0b24KKyAgICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIHggaXMgSk9ZU1RJQ0swIEZpcmUgYnV0dG9uCisgICAgICAgICAgICAlbm5ubm1tbW0gICA7IHdoZXJlIG0gaXMgSk9ZU1RJQ0sxIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBuIGlzIEpPWVNUSUNLMCBzdGF0ZQorCitTZXRzIHRoZSBpa2JkIHRvIGRvIG5vdGhpbmcgYnV0IG1vbml0b3IgdGhlIHNlcmlhbCBjb21tYW5kIGxuZSwgbWFpbnRhaW4gdGhlCit0aW1lLW9mLWRheSBjbG9jaywgYW5kIG1vbml0b3IgdGhlIGpveXN0aWNrLiBUaGUgcmF0ZSBzZXRzIHRoZSBpbnRlcnZhbAorYmV0d2VlbiBqb3lzdGljayBzYW1wbGVzLgorTi5CLiBUaGUgdXNlciBzaG91bGQgbm90IHNldCB0aGUgcmF0ZSBoaWdoZXIgdGhhbiB0aGUgc2VyaWFsIGNvbW11bmljYXRpb25zCitjaGFubmVsIHdpbGwgYWxsb3cgdGhlIDIgYnl0ZXMgcGFja2V0cyB0byBiZSB0cmFuc21pdHRlZC4KKworOS4xOSBTRVQgRklSRSBCVVRUT04gTU9OSVRPUklORworCisgICAgMHgxOAorICAgIFJldHVybnM6IChhcyBsb25nIGFzIGluIG1vZGUpCisgICAgICAgICAgICAlYmJiYmJiYmIgICA7IHN0YXRlIG9mIHRoZSBKT1lTVElDSzEgZmlyZSBidXR0b24gcGFja2VkCisgICAgICAgICAgICAgICAgICAgICAgICA7IDggYml0cyBwZXIgYnl0ZSwgdGhlIGZpcnN0IHNhbXBsZSBpZiB0aGUgTVNCCisKK1NldCB0aGUgaWtiZCB0byBkbyBub3RoaW5nIGJ1dCBtb25pdG9yIHRoZSBzZXJpYWwgY29tbWFuZCBsaW5lLCBtYWludGFpbiB0aGUKK3RpbWUtb2YtZGF5IGNsb2NrLCBhbmQgbW9uaXRvciB0aGUgZmlyZSBidXR0b24gb24gSm95c3RpY2sgMS4gVGhlIGZpcmUgYnV0dG9uCitpcyBzY2FubmVkIGF0IGEgcmF0ZSB0aGF0IGNhdXNlcyA4IHNhbXBsZXMgdG8gYmUgbWFkZSBpbiB0aGUgdGltZSBpdCB0YWtlcyBmb3IKK3RoZSBwcmV2aW91cyBieXRlIHRvIGJlIHNlbnQgdG8gdGhlIGhvc3QgKGkuZS4gc2NhbiByYXRlID0gOC8xMCAqIGJhdWQgcmF0ZSkuCitUaGUgc2FtcGxlIGludGVydmFsIHNob3VsZCBiZSBhcyBjb25zdGFudCBhcyBwb3NzaWJsZS4KKworOS4yMCBTRVQgSk9ZU1RJQ0sgS0VZQ09ERSBNT0RFCisKKyAgICAweDE5CisgICAgUlggICAgICAgICAgICAgICAgICA7IGxlbmd0aCBvZiB0aW1lIChpbiB0ZW50aHMgb2Ygc2Vjb25kcykgdW50aWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgaG9yaXpvbnRhbCB2ZWxvY2l0eSBicmVha3BvaW50IGlzIHJlYWNoZWQKKyAgICBSWSAgICAgICAgICAgICAgICAgIDsgbGVuZ3RoIG9mIHRpbWUgKGluIHRlbnRocyBvZiBzZWNvbmRzKSB1bnRpbAorICAgICAgICAgICAgICAgICAgICAgICAgOyB2ZXJ0aWNhbCB2ZWxvY2l0eSBicmVha3BvaW50IGlzIHJlYWNoZWQKKyAgICBUWCAgICAgICAgICAgICAgICAgIDsgbGVuZ3RoIChpbiB0ZW50aHMgb2Ygc2Vjb25kcykgb2Ygam95c3RpY2sgY2xvc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgOyB1bnRpbCBob3Jpem9udGFsIGN1cnNvciBrZXkgaXMgZ2VuZXJhdGVkIGJlZm9yZSBSWAorICAgICAgICAgICAgICAgICAgICAgICAgOyBoYXMgZWxhcHNlZAorICAgIFRZICAgICAgICAgICAgICAgICAgOyBsZW5ndGggKGluIHRlbnRocyBvZiBzZWNvbmRzKSBvZiBqb3lzdGljayBjbG9zdXJlCisgICAgICAgICAgICAgICAgICAgICAgICA7IHVudGlsIHZlcnRpY2FsIGN1cnNvciBrZXkgaXMgZ2VuZXJhdGVkIGJlZm9yZSBSWQorICAgICAgICAgICAgICAgICAgICAgICAgOyBoYXMgZWxhcHNlZAorICAgIFZYICAgICAgICAgICAgICAgICAgOyBsZW5ndGggKGluIHRlbnRocyBvZiBzZWNvbmRzKSBvZiBqb3lzdGljayBjbG9zdXJlCisgICAgICAgICAgICAgICAgICAgICAgICA7IHVudGlsIGhvcml6b250YWwgY3Vyc29yIGtleXN0b2tlcyBhcmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICA7IGFmdGVyIFJYIGhhcyBlbGFwc2VkCisgICAgVlkgICAgICAgICAgICAgICAgICA7IGxlbmd0aCAoaW4gdGVudGhzIG9mIHNlY29uZHMpIG9mIGpveXN0aWNrIGNsb3N1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgdW50aWwgdmVydGljYWwgY3Vyc29yIGtleXN0b2tlcyBhcmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICA7IGFmdGVyIFJZIGhhcyBlbGFwc2VkCisKK0luIHRoaXMgbW9kZSwgam95c3RpY2sgMCBpcyBzY2FubmVkIGluIGEgd2F5IHRoYXQgc2ltdWxhdGVzIGN1cnNvciBrZXlzdHJva2VzLgorT24gaW5pdGlhbCBjbG9zdXJlLCBhIGtleXN0cm9rZSBwYWlyIChtYWtlL2JyZWFrKSBpcyBnZW5lcmF0ZWQuIFRoZW4gdXAgdG8gUm4KK3RlbnRocyBvZiBzZWNvbmRzIGxhdGVyLCBrZXlzdHJva2UgcGFpcnMgYXJlIGdlbmVyYXRlZCBldmVyeSBUbiB0ZW50aHMgb2YKK3NlY29uZHMuIEFmdGVyIHRoZSBSbiBicmVha3BvaW50IGlzIHJlYWNoZWQsIGtleXN0cm9rZSBwYWlycyBhcmUgZ2VuZXJhdGVkCitldmVyeSBWbiB0ZW50aHMgb2Ygc2Vjb25kcy4gVGhpcyBwcm92aWRlcyBhIHZlbG9jaXR5IChhdXRvLXJlcGVhdCkgYnJlYWtwb2ludAorZmVhdHVyZS4KK05vdGUgdGhhdCBieSBzZXR0aW5nIFJYIGFuZC9vciBSeSB0byB6ZXJvLCB0aGUgdmVsb2NpdHkgZmVhdHVyZSBjYW4gYmUKK2Rpc2FibGVkLiBUaGUgdmFsdWVzIG9mIFRYIGFuZCBUWSB0aGVuIGJlY29tZSBtZWFuaW5nbGVzcywgYW5kIHRoZSBnZW5lcmF0aW9uCitvZiBjdXJzb3IgJ2tleXN0cm9rZXMnIGlzIHNldCBieSBWWCBhbmQgVlkuCisKKzkuMjEgRElTQUJMRSBKT1lTVElDS1MKKworICAgIDB4MUEKKworRGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBhbnkgam95c3RpY2sgZXZlbnRzIChhbmQgc2Nhbm5pbmcgbWF5IGJlIGludGVybmFsbHkKK2Rpc2FibGVkKS4gQW55IHZhbGlkIGpveXN0aWNrIG1vZGUgY29tbWFuZCByZXN1bWVzIGpveXN0aWNrIG1vbml0b3JpbmcuIChUaGUKK2pveXN0aWNrIG1vZGUgY29tbWFuZHMgYXJlIFNFVCBKT1lTVElDSyBFVkVOVCBSRVBPUlRJTkcsIFNFVCBKT1lTVElDSworSU5URVJST0dBVElPTiBNT0RFLCBTRVQgSk9ZU1RJQ0sgTU9OSVRPUklORywgU0VUIEZJUkUgQlVUVE9OIE1PTklUT1JJTkcsIGFuZAorU0VUIEpPWVNUSUNLIEtFWUNPREUgTU9ERS4pCisKKzkuMjIgVElNRS1PRi1EQVkgQ0xPQ0sgU0VUCisKKyAgICAweDFCCisgICAgWVkgICAgICAgICAgICAgICAgICA7IHllYXIgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgZGlnaXRzKQorICAgIE1NICAgICAgICAgICAgICAgICAgOyBtb250aAorICAgIEREICAgICAgICAgICAgICAgICAgOyBkYXkKKyAgICBoaCAgICAgICAgICAgICAgICAgIDsgaG91cgorICAgIG1tICAgICAgICAgICAgICAgICAgOyBtaW51dGUKKyAgICBzcyAgICAgICAgICAgICAgICAgIDsgc2Vjb25kCisKK0FsbCB0aW1lLW9mLWRheSBkYXRhIHNob3VsZCBiZSBzZW50IHRvIHRoZSBpa2JkIGluIHBhY2tlZCBCQ0QgZm9ybWF0LgorQW55IGRpZ2l0IHRoYXQgaXMgbm90IGEgdmFsaWQgQkNEIGRpZ2l0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgJ2Rvbid0IGNhcmUnCithbmQgbm90IGFsdGVyIHRoYXQgcGFydGljdWxhciBmaWVsZCBvZiB0aGUgZGF0ZSBvciB0aW1lLiBUaGlzIHBlcm1pdHMgc2V0dGluZworb25seSBzb21lIHN1YmZpZWxkcyBvZiB0aGUgdGltZS1vZi1kYXkgY2xvY2suCisKKzkuMjMgSU5URVJST0dBVEUgVElNRS1PRi1EQVQgQ0xPQ0sKKworICAgIDB4MUMKKyAgICBSZXR1cm5zOgorICAgICAgICAgICAgMHhGQyAgICAgICAgOyB0aW1lLW9mLWRheSBldmVudCBoZWFkZXIKKyAgICAgICAgICAgIFlZICAgICAgICAgIDsgeWVhciAoMiBsZWFzdCBzaWduaWZpY2FudCBkaWdpdHMpCisgICAgICAgICAgICBNTSAgICAgICAgICA7IG1vbnRoCisgICAgICAgICAgICBERCAgICAgICAgICA7IGRheQorICAgICAgICAgICAgaGggICAgICAgICAgOyBob3VyCisgICAgICAgICAgICBtbSAgICAgICAgICA7IG1pbnV0ZQorICAgICAgICAgICAgc3MgICAgICAgICAgOyBzZWNvbmQKKworICAgIEFsbCB0aW1lLW9mLWRheSBpcyBzZW50IGluIHBhY2tlZCBCQ0QgZm9ybWF0LgorCis5LjI0IE1FTU9SWSBMT0FECisKKyAgICAweDIwCisgICAgQURSTVNCICAgICAgICAgICAgICA7IGFkZHJlc3MgaW4gY29udHJvbGxlcgorICAgIEFEUkxTQiAgICAgICAgICAgICAgOyBtZW1vcnkgdG8gYmUgbG9hZGVkCisgICAgTlVNICAgICAgICAgICAgICAgICA7IG51bWJlciBvZiBieXRlcyAoMC0xMjgpCisgICAgeyBkYXRhIH0KKworVGhpcyBjb21tYW5kIHBlcm1pdHMgdGhlIGhvc3QgdG8gbG9hZCBhcmJpdHJhcnkgdmFsdWVzIGludG8gdGhlIGlrYmQKK2NvbnRyb2xsZXIgbWVtb3J5LiBUaGUgdGltZSBiZXR3ZWVuIGRhdGEgYnl0ZXMgbXVzdCBiZSBsZXNzIHRoYW4gMjBtcy4KKworOS4yNSBNRU1PUlkgUkVBRAorCisgICAgMHgyMQorICAgIEFEUk1TQiAgICAgICAgICAgICAgOyBhZGRyZXNzIGluIGNvbnRyb2xsZXIKKyAgICBBRFJMU0IgICAgICAgICAgICAgIDsgbWVtb3J5IHRvIGJlIHJlYWQKKyAgICBSZXR1cm5zOgorICAgICAgICAgICAgMHhGNiAgICAgICAgOyBzdGF0dXMgaGVhZGVyCisgICAgICAgICAgICAweDIwICAgICAgICA7IG1lbW9yeSBhY2Nlc3MKKyAgICAgICAgICAgIHsgZGF0YSB9ICAgIDsgNiBkYXRhIGJ5dGVzIHN0YXJ0aW5nIGF0IEFEUgorCitUaGlzIGNvbWFuZCBwZXJtaXRzIHRoZSBob3N0IHRvIHJlYWQgZnJvbSB0aGUgaWtiZCBjb250cm9sbGVyIG1lbW9yeS4KKworOS4yNiBDT05UUk9MTEVSIEVYRUNVVEUKKworICAgIDB4MjIKKyAgICBBRFJNU0IgICAgICAgICAgICAgIDsgYWRkcmVzcyBvZiBzdWJyb3V0aW5lIGluCisgICAgQURSTFNCICAgICAgICAgICAgICA7IGNvbnRyb2xsZXIgbWVtb3J5IHRvIGJlIGNhbGxlZAorCitUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBob3N0IHRvIGNvbW1hbmQgdGhlIGV4ZWN1dGlvbiBvZiBhIHN1YnJvdXRpbmUgaW4gdGhlCitpa2JkIGNvbnRyb2xsZXIgbWVtb3J5LgorCis5LjI3IFNUQVRVUyBJTlFVSVJJRVMKKwkKKyAgICBTdGF0dXMgY29tbWFuZHMgYXJlIGZvcm1lZCBieSBpbmNsdXNpdmVseSBPUmluZyAweDgwIHdpdGggdGhlCisgICAgcmVsZXZhbnQgU0VUIGNvbW1hbmQuCisKKyAgICBFeGFtcGxlOgorICAgIDB4ODggKG9yIDB4ODkgb3IgMHg4QSkgIDsgcmVxdWVzdCBtb3VzZSBtb2RlCisgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDB4RjYgICAgICAgIDsgc3RhdHVzIHJlc3BvbnNlIGhlYWRlcgorICAgICAgICAgICAgbW9kZSAgICAgICAgOyAweDA4IGlzIFJFTEFUSVZFCisgICAgICAgICAgICAgICAgICAgICAgICA7IDB4MDkgaXMgQUJTT0xVVEUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgMHgwQSBpcyBLRVlDT0RFCisgICAgICAgICAgICBwYXJhbTEgICAgICA7IDAgaXMgUkVMQVRJVkUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgWE1TQiBtYXhpbXVtIGlmIEFCU09MVVRFCisgICAgICAgICAgICAgICAgICAgICAgICA7IERFTFRBIFggaXMgS0VZQ09ERQorICAgICAgICAgICAgcGFyYW0yICAgICAgOyAwIGlzIFJFTEFUSVZFCisgICAgICAgICAgICAgICAgICAgICAgICA7IFlNU0IgbWF4aW11bSBpZiBBQlNPTFVURQorICAgICAgICAgICAgICAgICAgICAgICAgOyBERUxUQSBZIGlzIEtFWUNPREUKKyAgICAgICAgICAgIHBhcmFtMyAgICAgIDsgMCBpZiBSRUxBVElWRQorICAgICAgICAgICAgICAgICAgICAgICAgOyBvciBLRVlDT0RFCisgICAgICAgICAgICAgICAgICAgICAgICA7IFlNU0IgaXMgQUJTT0xVVEUKKyAgICAgICAgICAgIHBhcmFtNCAgICAgIDsgMCBpZiBSRUxBVElWRQorICAgICAgICAgICAgICAgICAgICAgICAgOyBvciBLRVlDT0RFCisgICAgICAgICAgICAgICAgICAgICAgICA7IFlMU0IgaXMgQUJTT0xVVEUKKyAgICAgICAgICAgIDAgICAgICAgICAgIDsgcGFkCisgICAgICAgICAgICAwCisKK1RoZSBTVEFUVVMgSU5RVUlSWSBjb21tYW5kcyByZXF1ZXN0IHRoZSBpa2JkIHRvIHJldHVybiBlaXRoZXIgdGhlIGN1cnJlbnQgbW9kZQorb3IgdGhlIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gY29tbWFuZC4gQWxsIHN0YXR1cyByZXBvcnRzIGFyZQorcGFkZGVkIHRvIGZvcm0gOCBieXRlIGxvbmcgcmV0dXJuIHBhY2tldHMuIFRoZSByZXNwb25zZXMgdG8gdGhlIHN0YXR1cworcmVxdWVzdHMgYXJlIGRlc2lnbmVkIHNvIHRoYXQgdGhlIGhvc3QgbWF5IHN0b3JlIHRoZW0gYXdheSAoYWZ0ZXIgc3RyaXBwaW5nCitvZmYgdGhlIHN0YXR1cyByZXBvcnQgaGVhZGVyIGJ5dGUpIGFuZCBsYXRlciBzZW5kIHRoZW0gYmFjayBhcyBjb21tYW5kcyB0bworaWtiZCB0byByZXN0b3JlIGl0cyBzdGF0ZS4gVGhlIDAgcGFkIGJ5dGVzIHdpbGwgYmUgdHJlYXRlZCBhcyBOT1BzIGJ5IHRoZQoraWtiZC4KKworICAgIFZhbGlkIFNUQVRVUyBJTlFVSVJZIGNvbW1hbmRzIGFyZToKKworICAgICAgICAgICAgMHg4NyAgICBtb3VzZSBidXR0b24gYWN0aW9uCisgICAgICAgICAgICAweDg4ICAgIG1vdXNlIG1vZGUKKyAgICAgICAgICAgIDB4ODkKKyAgICAgICAgICAgIDB4OEEKKyAgICAgICAgICAgIDB4OEIgICAgbW5vdXNlIHRocmVzaG9sZAorICAgICAgICAgICAgMHg4QyAgICBtb3VzZSBzY2FsZQorICAgICAgICAgICAgMHg4RiAgICBtb3VzZSB2ZXJ0aWNhbCBjb29yZGluYXRlcworICAgICAgICAgICAgMHg5MCAgICAoIHJldHVybnMgICAgICAgMHgwRiBZPTAgYXQgYm90dG9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCBZPTAgYXQgdG9wICkKKyAgICAgICAgICAgIDB4OTIgICAgbW91c2UgZW5hYmxlL2Rpc2FibGUKKyAgICAgICAgICAgICAgICAgICAgKCByZXR1cm5zICAgICAgIDB4MDAgZW5hYmxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyIGRpc2FibGVkICkKKyAgICAgICAgICAgIDB4OTQgICAgam95c3RpY2sgbW9kZQorICAgICAgICAgICAgMHg5NQorICAgICAgICAgICAgMHg5NgorICAgICAgICAgICAgMHg5QSAgICBqb3lzdGljayBlbmFibGUvZGlzYWJsZQorICAgICAgICAgICAgICAgICAgICAoIHJldHVybnMgICAgICAgMHgwMCBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSBkaXNhYmxlZCApCisKK0l0IGlzIHRoZSAoaG9zdCkgcHJvZ3JhbW1lcidzIHJlc3BvbnNpYmlsaXR5IHRvIGhhdmUgb25seSBvbmUgdW5hbnN3ZXJlZAoraW5xdWlyeSBpbiBwcm9jZXNzIGF0IGEgdGltZS4KK1NUQVRVUyBJTlFVSVJZIGNvbW1hbmRzIGFyZSBub3QgdmFsaWQgaWYgdGhlIGlrYmQgaXMgaW4gSk9ZU1RJQ0sgTU9OSVRPUklORworbW9kZSBvciBGSVJFIEJVVFRPTiBNT05JVE9SSU5HIG1vZGUuCisKKworMTAuIFNDQU4gQ09ERVMKKworVGhlIGtleSBzY2FuIGNvZGVzIHJldHVybiBieSB0aGUgaWtiZCBhcmUgY2hvc2VuIHRvIHNpbXBsaWZ5IHRoZQoraW1wbGVtZW50YWlvbiBvZiBHU1guCisKK0dTWCBTdGFuZGFyZCBLZXlib2FyZCBNYXBwaW5nLgorCitIZXgJS2V5dG9wCiswMQlFc2MKKzAyCTEKKzAzCTIKKzA0CTMKKzA1CTQKKzA2CTUKKzA3CTYKKzA4CTcKKzA5CTgKKzBBCTkKKzBCCTAKKzBDCS0KKzBECT09CiswRQlCUworMEYJVEFCCisxMAlRCisxMQlXCisxMglFCisxMwlSCisxNAlUCisxNQlZCisxNglVCisxNwlJCisxOAlPCisxOQlQCisxQQlbCisxQgldCisxQwlSRVQKKzFECUNUUkwKKzFFCUEKKzFGCVMKKzIwCUQKKzIxCUYKKzIyCUcKKzIzCUgKKzI0CUoKKzI1CUsKKzI2CUwKKzI3CTsKKzI4CScKKzI5CWAKKzJBCShMRUZUKSBTSElGVAorMkIJXAorMkMJWgorMkQJWAorMkUJQworMkYJVgorMzAJQgorMzEJTgorMzIJTQorMzMJLAorMzQJLgorMzUJLworMzYJKFJJR0hUKSBTSElGVAorMzcJeyBOT1QgVVNFRCB9CiszOAlBTFQKKzM5CVNQQUNFIEJBUgorM0EJQ0FQUyBMT0NLCiszQglGMQorM0MJRjIKKzNECUYzCiszRQlGNAorM0YJRjUKKzQwCUY2Cis0MQlGNworNDIJRjgKKzQzCUY5Cis0NAlGMTAKKzQ1CXsgTk9UIFVTRUQgfQorNDYJeyBOT1QgVVNFRCB9Cis0NwlIT01FCis0OAlVUCBBUlJPVworNDkJeyBOT1QgVVNFRCB9Cis0QQlLRVlQQUQgLQorNEIJTEVGVCBBUlJPVworNEMJeyBOT1QgVVNFRCB9Cis0RAlSSUdIVCBBUlJPVworNEUJS0VZUEFEICsKKzRGCXsgTk9UIFVTRUQgfQorNTAJRE9XTiBBUlJPVworNTEJeyBOT1QgVVNFRCB9Cis1MglJTlNFUlQKKzUzCURFTAorNTQJeyBOT1QgVVNFRCB9Cis1Rgl7IE5PVCBVU0VEIH0KKzYwCUlTTyBLRVkKKzYxCVVORE8KKzYyCUhFTFAKKzYzCUtFWVBBRCAoCis2NAlLRVlQQUQgLworNjUJS0VZUEFEICoKKzY2CUtFWVBBRCAqCis2NwlLRVlQQUQgNworNjgJS0VZUEFEIDgKKzY5CUtFWVBBRCA5Cis2QQlLRVlQQUQgNAorNkIJS0VZUEFEIDUKKzZDCUtFWVBBRCA2Cis2RAlLRVlQQUQgMQorNkUJS0VZUEFEIDIKKzZGCUtFWVBBRCAzCis3MAlLRVlQQUQgMAorNzEJS0VZUEFEIC4KKzcyCUtFWVBBRCBFTlRFUgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9jZDMyLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvY2QzMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwM2Q5YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvY2QzMi50eHQKQEAgLTAsMCArMSwxOSBAQAorSSBoYXZlIHdyaXR0ZW4gYSBzbWFsbCBwYXRjaCB0aGF0IGxldCdzIG1lIHVzZSBteSBBbWlnYSBDRDMyCitqb3lwYWQgY29ubmVjdGVkIHRvIHRoZSBwYXJhbGxlbCBwb3J0LiBUaG91Z2h0IEknZCBzaGFyZSBpdCB3aXRoIHlvdSBzbworeW91IGNhbiBhZGQgaXQgdG8gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGpveXN0aWNrcyAoaG9wZWZ1bGx5IHNvbWVvbmUgd2lsbAorZmluZCBpdCB1c2VmdWwpLgorCitJdCBuZWVkcyB0aGUgZm9sbG93aW5nIHdpcmluZzoKKworQ0QzMiBwYWQgICB8ICAgUGFyYWxsZWwgcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMSAoVXApICAgICB8ICAgIDIgKEQwKQorMiAoRG93bikgICB8ICAgIDMgKEQxKQorMyAoTGVmdCkgICB8ICAgIDQgKEQyKQorNCAoUmlnaHQpICB8ICAgIDUgKEQzKQorNSAoRmlyZTMpICB8ICAgMTQgKEFVVE9GRCkKKzYgKEZpcmUxKSAgfCAgIDE3IChTRUxJTikKKzcgKCs1VikgICAgfCAgICAxIChTVFJPQkUpCis4IChHbmQpICAgIHwgICAxOCAoR25kKQorOSAoRmlyZTIpICB8ICAgIDcgKEQ1KQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2NzNDYxeC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2NzNDYxeC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4MTc0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvY3M0NjF4LnR4dApAQCAtMCwwICsxLDQ1IEBACitQcmVmYWNlLgorCitUaGlzIGlzIGEgbmV3IGxvdy1sZXZlbCBkcml2ZXIgdG8gc3VwcG9ydCBhbmFsb2cgam95c3RpY2sgYXR0YWNoZWQgdG8KK0NyeXN0YWwgU291bmRGdXNpb24gQ1M0NjEwL0NTNDYxMi9DUzQ2MTUuIFRoaXMgY29kZSBpcyBiYXNlZCB1cG9uIAorVm9ydGV4L1NvbG8gZHJpdmVycyBhcyBhbiBleGFtcGxlIG9mIGRlY29yYXRpb24gc3R5bGUsIGFuZCBBTFNBCiswLjUuOGEga2VybmVsIGRyaXZlcnMgYXMgYW4gY2hpcHNldCBkb2N1bWVudGF0aW9uIGFuZCBzYW1wbGVzLgorCitUaGlzIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBjb29rZWQgbW9kZSBzdXBwb3J0OyB0aGUgYmFzaWMgY29kZSAKK2lzIHByZXNlbnQgaGVyZSwgYnV0IGhhdmUgbm90IHRlc3RlZCBjb21wbGV0ZWx5LiBUaGUgYnV0dG9uIGFuYWx5c2lzIAoraXMgY29tcGxldGVkIGluIHRoaXMgbW9kZSwgYnV0IHRoZSBheGlzIG1vdmVtZW50IGlzIG5vdC4gCisKK1JhdyBtb2RlIHdvcmtzIGZpbmUgd2l0aCBhbmFsb2cgam95c3RpY2sgZnJvbnQtZW5kIGRyaXZlciBhbmQgY3M0NjF4Citkcml2ZXIgYXMgYSBiYWNrZW5kLiBJJ3ZlIHRlc3RlZCB0aGlzIGRyaXZlciB3aXRoIENTNDYxMCwgNC1heGlzIGFuZCAKKzQtYnV0dG9uIGpveXN0aWNrOyBJIG1lYW4gdGhlIGpzdGVzdCB1dGlsaXR5LiBBbHNvIEkndmUgdHJpZWQgdG8KK3BsYXkgaW4geHJhY2VyIGdhbWUgdXNpbmcgam95c3RpY2ssIGFuZCB0aGUgcmVzdWx0IGlzIGJldHRlciB0aGFuCitrZXlib2FyZCBvbmx5IG1vZGUuCisKK1RoZSBzZW5zaXRpdml0eSBhbmQgY2FsaWJyYXRlIHF1YWxpdHkgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQ7IHRoZSB0d28KK3JlYXNvbnMgYXJlIHBlcmZvcm1lZDogdGhlIHNhbWUgaGFyZHdhcmUgY2Fubm90IHdvcmsgdW5kZXIgV2luOTUgKGJsdWUgCitzY3JlZW4gaW4gVkpPWUQpOyBJIGhhdmUgbm8gZG9jdW1lbnRhdGlvbiBvbiBteSBjaGlwOyBhbmQgdGhlIGV4aXN0aW5nIAorYmVoYXZpb3IgaW4gbXkgY2FzZSB3YXMgbm90IHJhaXNlZCB0aGUgcmVxdWlyZW1lbnQgb2Ygam95c3RpY2sgY2FsaWJyYXRpb24uIAorU28gdGhlIGRyaXZlciBoYXZlIG5vIGNvZGUgdG8gcGVyZm9ybSBoYXJkd2FyZSByZWxhdGVkIGNhbGlicmF0aW9uLgorCitUaGUgcGF0Y2ggY29udGFpbnMgbWlub3IgY2hhbmdlcyBvZiBDb25maWcuaW4gYW5kIE1ha2VmaWxlIGZpbGVzLiBBbGwKK25lZWRlZCBjb2RlIGhhdmUgYmVlbiBtb3ZlZCB0byBvbmUgc2VwYXJhdGUgZmlsZSBjczQ2MXguYyBsaWtlIG5zNTU4LmMKK1RoaXMgZHJpdmVyIGhhdmUgdGhlIGJhc2ljIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzIG9ubHk7IHRoZXJlIGlzIG5vCitJU0Egb3IgUG5QIElTQSBjYXJkcyBzdXBwb3J0ZWQuIEFGQUlLIHRoZSBuczU1OCBoYXZlIHN1cHBvcnQgZm9yIENyeXN0YWwgCitJU0EgYW5kIFBuUCBJU0Egc2VyaWVzLgorCitUaGUgZHJpdmVyIHdvcmtzIHdpdG4gQUxTQSBkcml2ZXJzIHNpbXVsdGFuZW91c2x5LiBGb3IgZXhtcGxlLCB0aGUgeHJhY2VyCit1c2VzIGpveXN0aWNrIGFzIGlucHV0IGRldmljZSBhbmQgUENNIGRldmljZSBhcyBzb3VuZCBvdXRwdXQgaW4gb25lIHRpbWUuCitUaGVyZSBhcmUgbm8gc291bmQgb3IgaW5wdXQgY29sbGlzaW9ucyBkZXRlY3RlZC4gVGhlIHNvdXJjZSBjb2RlIGhhdmUKK2NvbW1lbnRzIGFib3V0IHRoZW07IGJ1dCBJJ3ZlIGZvdW5kIHRoZSBqb3lzdGljayBjYW4gYmUgaW5pdGlhbGl6ZWQgCitzZXBhcmF0ZWx5IG9mIEFMU0EgbW9kdWxlcy4gU28sIHlvdSBjYW5tIHVzZSBvbmx5IG9uZSBqb3lzdGljayBkcml2ZXIKK3dpdGhvdXQgQUxTQSBkcml2ZXJzLiBUaGUgQUxTQSBkcml2ZXJzIGFyZSBub3QgbmVlZGVkIHRvIGNvbXBpbGUgb3IKK3J1biB0aGlzIGRyaXZlci4KKworVGhlcmUgYXJlIG5vIGRlYnVnIGluZm9ybWF0aW9uIHByaW50IGhhdmUgYmVlbiBwbGFjZWQgaW4gc291cmNlLCBhbmQgbm8KK3NwZWNpZmljIG9wdGlvbnMgcmVxdWlyZWQgdG8gd29yayB0aGlzIGRyaXZlci4gVGhlIGZvdW5kIGNoaXBzZXQgcGFyYW1ldGVycworYXJlIHByaW50ZWQgdmlhIHByaW50ayhLRVJOX0lORk8gIi4uLiIpLCBzZWUgdGhlIC92YXIvbG9nL21lc3NhZ2VzIHRvCitpbnNwZWN0IGNzNDYxeDogcHJlZml4ZWQgbWVzc2FnZXMgdG8gZGV0ZXJtaW5lIHBvc3NpYmxlIGNhcmQgZGV0ZWN0aW9uIAorZXJyb3JzLgorCitSZWdhcmRzLAorVmlrdG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2ZmLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvZmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYTdkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2ZmLnR4dApAQCAtMCwwICsxLDIyNyBAQAorRm9yY2UgZmVlZGJhY2sgZm9yIExpbnV4LgorQnkgSm9oYW5uIERlbmV1eCA8ZGVuZXV4QGlmcmFuY2UuY29tPiBvbiAyMDAxLzA0LzIyLgorWW91IG1heSByZWRpc3RyaWJ1dGUgdGhpcyBmaWxlLiBQbGVhc2UgcmVtZW1iZXIgdG8gaW5jbHVkZSBzaGFwZS5maWcgYW5kCitpbnRlcmFjdGl2ZS5maWcgYXMgd2VsbC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMC4gSW50cm9kdWN0aW9uCit+fn5+fn5+fn5+fn5+fn4KK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byB1c2UgZm9yY2UgZmVlZGJhY2sgZGV2aWNlcyB1bmRlciBMaW51eC4gVGhlCitnb2FsIGlzIG5vdCB0byBzdXBwb3J0IHRoZXNlIGRldmljZXMgYXMgaWYgdGhleSB3ZXJlIHNpbXBsZSBpbnB1dC1vbmx5IGRldmljZXMKKyhhcyBpdCBpcyBhbHJlYWR5IHRoZSBjYXNlKSwgYnV0IHRvIHJlYWxseSBlbmFibGUgdGhlIHJlbmRlcmluZyBvZiBmb3JjZQorZWZmZWN0cy4KK0F0IHRoZSBtb21lbnQsIG9ubHkgSS1Gb3JjZSBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQsIGFuZCBub3Qgb2ZmaWNpYWxseS4gVGhhdAorbWVhbnMgSSBoYWQgdG8gZmluZCBvdXQgaG93IHRoZSBwcm90b2NvbCB3b3JrcyBvbiBteSBvd24uIE9mIGNvdXJzZSwgdGhlCitpbmZvcm1hdGlvbiBJIG1hbmFnZWQgdG8gZ3Jhc3AgaXMgZmFyIGZyb20gYmVpbmcgY29tcGxldGUsIGFuZCBJIGNhbiBub3QKK2d1YXJyYW50eSB0aGF0IHRoaXMgZHJpdmVyIHdpbGwgd29yayBmb3IgeW91LgorVGhpcyBkb2N1bWVudCBvbmx5IGRlc2NyaWJlcyB0aGUgZm9yY2UgZmVlZGJhY2sgcGFydCBvZiB0aGUgZHJpdmVyIGZvciBJLUZvcmNlCitkZXZpY2VzLiBQbGVhc2UgcmVhZCBqb3lzdGljay50eHQgYmVmb3JlIHJlYWRpbmcgZnVydGhlciB0aGlzIGRvY3VtZW50LgorCisyLiBJbnN0cnVjdGlvbnMgdG8gdGhlIHVzZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSGVyZSBhcmUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBjb21waWxlIGFuZCB1c2UgdGhlIGRyaXZlci4gSW4gZmFjdCwgdGhpcworZHJpdmVyIGlzIHRoZSBub3JtYWwgaWZvcmNlLCBpbnB1dCBhbmQgZXZkZXYgZHJpdmVycyB3cml0dGVuIGJ5IFZvanRlY2gKK1BhdmxpaywgcGx1cyBhZGRpdGlvbnMgdG8gc3VwcG9ydCBmb3JjZSBmZWVkYmFjay4KKworQmVmb3JlIHlvdSBzdGFydCwgbGV0IG1lIFdBUk4geW91IHRoYXQgc29tZSBkZXZpY2VzIHNoYWtlIHZpb2xlbnRseSBkdXJpbmcgdGhlCitpbml0aWFsaXNhdGlvbiBwaGFzZS4gVGhpcyBoYXBwZW5zIGZvciBleGFtcGxlIHdpdGggbXkgIkFWQiBUb3AgU2hvdCBQZWdhc3VzIi4KK1RvIHN0b3AgdGhpcyBhbm5veWluZyBiZWhhdmlvdXIsIG1vdmUgeW91IGpveXN0aWNrIHRvIGl0cyBsaW1pdHMuIEFueXdheSwgeW91CitzaG91bGQga2VlcCBhIGhhbmQgb24geW91ciBkZXZpY2UsIGluIG9yZGVyIHRvIGF2b2lkIGl0IHRvIGJyYWtlIGRvd24gaWYKK3NvbWV0aGluZyBnb2VzIHdyb25nLgorCitBdCB0aGUga2VybmVsJ3MgY29tcGlsYXRpb246CisJLSBFbmFibGUgSUZvcmNlL1NlcmlhbAorCS0gRW5hYmxlIEV2ZW50IGludGVyZmFjZQorCitDb21waWxlIHRoZSBtb2R1bGVzLCBpbnN0YWxsIHRoZW0uCisKK1lvdSBhbHNvIG5lZWQgaW5wdXRhdHRhY2guCisKK1lvdSB0aGVuIG5lZWQgdG8gaW5zZXJ0IHRoZSBtb2R1bGVzIGludG8gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyUgbW9kcHJvYmUgam95ZGV2CislIG1vZHByb2JlIHNlcnBvcnQJCSMgT25seSBmb3Igc2VyaWFsCislIG1vZHByb2JlIGlmb3JjZQorJSBtb2Rwcm9iZSBldmRldgorJSAuL2lucHV0YXR0YWNoIC1pZm9yICQyICYJIyBPbmx5IGZvciBzZXJpYWwKK0lmIHlvdSBhcmUgdXNpbmcgVVNCLCB5b3UgZG9uJ3QgbmVlZCB0aGUgaW5wdXRhdHRhY2ggc3RlcC4KKworUGxlYXNlIGNoZWNrIHRoYXQgeW91IGhhdmUgYWxsIHRoZSAvZGV2L2lucHV0IGVudHJpZXMgbmVlZGVkOgorY2QgL2Rldgorcm0ganMqCitta2RpciBpbnB1dAorbWtub2QgaW5wdXQvanMwIGMgMTMgMAorbWtub2QgaW5wdXQvanMxIGMgMTMgMQorbWtub2QgaW5wdXQvanMyIGMgMTMgMgorbWtub2QgaW5wdXQvanMzIGMgMTMgMworbG4gLXMgaW5wdXQvanMwIGpzMAorbG4gLXMgaW5wdXQvanMxIGpzMQorbG4gLXMgaW5wdXQvanMyIGpzMgorbG4gLXMgaW5wdXQvanMzIGpzMworCitta25vZCBpbnB1dC9ldmVudDAgYyAxMyA2NAorbWtub2QgaW5wdXQvZXZlbnQxIGMgMTMgNjUKK21rbm9kIGlucHV0L2V2ZW50MiBjIDEzIDY2Citta25vZCBpbnB1dC9ldmVudDMgYyAxMyA2NworCisyLjEgRG9lcyBpdCB3b3JrID8KK35+fn5+fn5+fn5+fn5+fn5+fgorVGhlcmUgaXMgYW4gdXRpbGl0eSBjYWxsZWQgZmZ0ZXN0IHRoYXQgd2lsbCBhbGxvdyB5b3UgdG8gdGVzdCB0aGUgZHJpdmVyLgorJSBmZnRlc3QgL2Rldi9pbnB1dC9ldmVudFhYCisKKzMuIEluc3RydWN0aW9ucyB0byB0aGUgZGV2ZWxvcHBlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIEFsbCBpbnRlcmFjdGlvbnMgYXJlIGRvbmUgdXNpbmcgdGhlIGV2ZW50IEFQSS4gVGhhdCBpcywgeW91IGNhbiB1c2UgaW9jdGwoKQorYW5kIHdyaXRlKCkgb24gL2Rldi9pbnB1dC9ldmVudFhYLgorICBUaGlzIGluZm9ybWF0aW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLgorCiszLjEgUXVlcnlpbmcgZGV2aWNlIGNhcGFiaWxpdGllcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCit1bnNpZ25lZCBsb25nIGZlYXR1cmVzWzEgKyBGRl9NQVgvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKK2ludCBpb2N0bChpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgcmVxdWVzdCwgdW5zaWduZWQgbG9uZyAqZmVhdHVyZXMpOworCisicmVxdWVzdCIgbXVzdCBiZSBFVklPQ0dCSVQoRVZfRkYsIHNpemUgb2YgZmVhdHVyZXMgYXJyYXkgaW4gYnl0ZXMgKQorCitSZXR1cm5zIHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS4gZmVhdHVyZXMgaXMgYSBiaXRmaWVsZCB3aXRoIHRoZQorZm9sbG93aW5nIGJpdHM6CistIEZGX1gJCWhhcyBhbiBYIGF4aXMgKHVzdWFsbHkgam95c3RpY2tzKQorLSBGRl9ZCQloYXMgYW4gWSBheGlzICh1c3VhbGx5IGpveXN0aWNrcykKKy0gRkZfV0hFRUwJaGFzIGEgd2hlZWwgKHVzdWFsbHkgc3RlcnJpbmcgd2hlZWxzKQorLSBGRl9DT05TVEFOVAljYW4gcmVuZGVyIGNvbnN0YW50IGZvcmNlIGVmZmVjdHMKKy0gRkZfUEVSSU9ESUMJY2FuIHJlbmRlciBwZXJpb2RpYyBlZmZlY3RzIChzaW5lLCB0cmlhbmdsZSwgc3F1YXJlLi4uKQorLSBGRl9SQU1QICAgICAgIGNhbiByZW5kZXIgcmFtcCBlZmZlY3RzCistIEZGX1NQUklORwljYW4gc2ltdWxhdGUgdGhlIHByZXNlbmNlIG9mIGEgc3ByaW5nCistIEZGX0ZSSUNUSU9OCWNhbiBzaW11bGF0ZSBmcmljdGlvbiAKKy0gRkZfREFNUEVSCWNhbiBzaW11bGF0ZSBkYW1wZXIgZWZmZWN0cworLSBGRl9SVU1CTEUJcnVtYmxlIGVmZmVjdHMgKG5vcm1hbGx5IHRoZSBvbmx5IGVmZmVjdCBzdXBwb3J0ZWQgYnkgcnVtYmxlCisJCXBhZHMpCistIEZGX0lORVJUSUEgICAgY2FuIHNpbXVsYXRlIGluZXJ0aWEKKworCitpbnQgaW9jdGwoaW50IGZkLCBFVklPQ0dFRkZFQ1RTLCBpbnQgKm4pOworCitSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWZmZWN0cyB0aGUgZGV2aWNlIGNhbiBrZWVwIGluIGl0cyBtZW1vcnkuCisKKzMuMiBVcGxvYWRpbmcgZWZmZWN0cyB0byB0aGUgZGV2aWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgCitpbnQgaW9jdGwoaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IHJlcXVlc3QsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCk7CisKKyJyZXF1ZXN0IiBtdXN0IGJlIEVWSU9DU0ZGLgorCisiZWZmZWN0IiBwb2ludHMgdG8gYSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgZWZmZWN0IHRvIHVwbG9hZC4gVGhlIGVmZmVjdCBpcwordXBsb2FkZWQsIGJ1dCBub3QgcGxheWVkLgorVGhlIGNvbnRlbnQgb2YgZWZmZWN0IG1heSBiZSBtb2RpZmllZC4gSW4gcGFydGljdWxhciwgaXRzIGZpZWxkICJpZCIgaXMgc2V0Cit0byB0aGUgdW5pcXVlIGlkIGFzc2lnbmVkIGJ5IHRoZSBkcml2ZXIuIFRoaXMgZGF0YSBpcyByZXF1aXJlZCBmb3IgcGVyZm9ybWluZworc29tZSBvcGVyYXRpb25zIChyZW1vdmluZyBhbiBlZmZlY3QsIGNvbnRyb2xsaW5nIHRoZSBwbGF5YmFjaykuCitUaGlzIGlmIGZpZWxkIG11c3QgYmUgc2V0IHRvIC0xIGJ5IHRoZSB1c2VyIGluIG9yZGVyIHRvIHRlbGwgdGhlIGRyaXZlciB0bworYWxsb2NhdGUgYSBuZXcgZWZmZWN0LgorU2VlIDxsaW51eC9pbnB1dC5oPiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmZfZWZmZWN0IHN0dWN0LiBZb3Ugc2hvdWxkIGFsc28KK2ZpbmQgaGVscCBpbiBhIGZldyBza2V0Y2hlcywgY29udGFpbmVkIGluIGZpbGVzIHNoYXBlLmZpZyBhbmQgaW50ZXJhY3RpdmUuZmlnLgorWW91IG5lZWQgeGZpZyB0byB2aXN1YWxpemUgdGhlc2UgZmlsZXMuCisKKzMuMyBSZW1vdmluZyBhbiBlZmZlY3QgZnJvbSB0aGUgZGV2aWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgoraW50IGlvY3RsKGludCBmZCwgRVZJT0NSTUZGLCBlZmZlY3QuaWQpOworCitUaGlzIG1ha2VzIHJvb20gZm9yIG5ldyBlZmZlY3RzIGluIHRoZSBkZXZpY2UncyBtZW1vcnkuIFBsZWFzZSBub3RlIHRoaXMgd29uJ3QKK3N0b3AgdGhlIGVmZmVjdCBpZiBpdCB3YXMgcGxheWluZy4KKworMy40IENvbnRyb2xsaW5nIHRoZSBwbGF5YmFjayBvZiBlZmZlY3RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0NvbnRyb2wgb2YgcGxheWluZyBpcyBkb25lIHdpdGggd3JpdGUoKS4gQmVsb3cgaXMgYW4gZXhhbXBsZToKKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKwlzdHJ1Y3QgaW5wdXRfZXZlbnQgcGxheTsKKwlzdHJ1Y3QgaW5wdXRfZXZlbnQgc3RvcDsKKwlzdHJ1Y3QgZmZfZWZmZWN0IGVmZmVjdDsKKwlpbnQgZmQ7CisuLi4KKwlmZCA9IG9wZW4oIi9kZXYvaW5wdXQvZXZlbnRYWCIsIE9fUkRXUik7CisuLi4KKwkvKiBQbGF5IHRocmVlIHRpbWVzICovCisJcGxheS50eXBlID0gRVZfRkY7CisJcGxheS5jb2RlID0gZWZmZWN0LmlkOworCXBsYXkudmFsdWUgPSAzOworCQorCXdyaXRlKGZkLCAoY29uc3Qgdm9pZCopICZwbGF5LCBzaXplb2YocGxheSkpOworLi4uCisJLyogU3RvcCBhbiBlZmZlY3QgKi8KKwlzdG9wLnR5cGUgPSBFVl9GRjsKKwlzdG9wLmNvZGUgPSBlZmZlY3QuaWQ7CisJc3RvcC52YWx1ZSA9IDA7CisJCisJd3JpdGUoZmQsIChjb25zdCB2b2lkKikgJnBsYXksIHNpemVvZihzdG9wKSk7CisKKzMuNSBTZXR0aW5nIHRoZSBnYWluCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorTm90IGFsbCBkZXZpY2VzIGhhdmUgdGhlIHNhbWUgc3RyZW5ndGguIFRoZXJlZm9yZSwgdXNlcnMgc2hvdWxkIHNldCBhIGdhaW4KK2ZhY3RvciBkZXBlbmRpbmcgb24gaG93IHN0cm9uZyB0aGV5IHdhbnQgZWZmZWN0cyB0byBiZS4gVGhpcyBzZXR0aW5nIGlzCitwZXJzaXN0ZW50IGFjcm9zcyBhY2Nlc3MgdG8gdGhlIGRyaXZlciwgc28geW91IHNob3VsZCBub3QgY2FyZSBhYm91dCBpdCBpZgoreW91IGFyZSB3cml0aW5nIGdhbWVzLCBhcyBhbm90aGVyIHV0aWxpdHkgcHJvYmFibHkgYWxyZWFkeSBzZXQgdGhpcyBmb3IgeW91LgorCisvKiBTZXQgdGhlIGdhaW4gb2YgdGhlIGRldmljZQoraW50IGdhaW47CQkvKiBiZXR3ZWVuIDAgYW5kIDEwMCAqLworc3RydWN0IGlucHV0X2V2ZW50IGllOwkvKiBzdHJ1Y3R1cmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkcml2ZXIgKi8KKworaWUudHlwZSA9IEVWX0ZGOworaWUuY29kZSA9IEZGX0dBSU47CitpZS52YWx1ZSA9IDB4RkZGRlVMICogZ2FpbiAvIDEwMDsKKworaWYgKHdyaXRlKGZkLCAmaWUsIHNpemVvZihpZSkpID09IC0xKQorCXBlcnJvcigic2V0IGdhaW4iKTsKKworMy42IEVuYWJsaW5nL0Rpc2FibGluZyBhdXRvY2VudGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZSBhdXRvY2VudGVyIGZlYXR1cmUgcXVpdGUgZGlzdHVyYnMgdGhlIHJlbmRlcmluZyBvZiBlZmZlY3RzIGluIG15IG9waW5pb24sCithbmQgSSB0aGluayBpdCBzaG91bGQgYmUgYW4gZWZmZWN0LCB3aGljaCBjb21wdXRhdGlvbiBkZXBlbmRzIG9uIHRoZSBnYW1lCit0eXBlLiBCdXQgeW91IGNhbiBlbmFibGUgaXQgaWYgeW91IHdhbnQuCisKK2ludCBhdXRvY2VudGVyOwkJLyogYmV0d2VlbiAwIGFuZCAxMDAgKi8KK3N0cnVjdCBpbnB1dF9ldmVudCBpZTsKKworaWUudHlwZSA9IEVWX0ZGOworaWUuY29kZSA9IEZGX0FVVE9DRU5URVI7CitpZS52YWx1ZSA9IDB4RkZGRlVMICogYXV0b2NlbnRlciAvIDEwMDsKKworaWYgKHdyaXRlKGZkLCAmaWUsIHNpemVvZihpZSkpID09IC0xKQorCXBlcnJvcigic2V0IGF1dG8tY2VudGVyIik7CisKK0EgdmFsdWUgb2YgMCBtZWFucyAibm8gYXV0by1jZW50ZXIiLgorCiszLjcgRHluYW1pYyB1cGRhdGUgb2YgYW4gZWZmZWN0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitQcm9jZWVkIGFzIGlmIHlvdSB3YW50ZWQgdG8gdXBsb2FkIGEgbmV3IGVmZmVjdCwgZXhjZXB0IHRoYXQgaW5zdGVhZCBvZgorc2V0dGluZyB0aGUgaWQgZmllbGQgdG8gLTEsIHlvdSBzZXQgaXQgdG8gdGhlIHdhbnRlZCBlZmZlY3QgaWQuCitOb3JtYWxseSwgdGhlIGVmZmVjdCBpcyBub3Qgc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBIb3dldmVyLCBkZXBlbmRpbmcgb24gdGhlCit0eXBlIG9mIGRldmljZSwgbm90IGFsbCBwYXJhbWV0ZXJzIGNhbiBiZSBkeW5hbWljYWxseSB1cGRhdGVkLiBGb3IgZXhhbXBsZSwKK3RoZSBkaXJlY3Rpb24gb2YgYW4gZWZmZWN0IGNhbm5vdCBiZSB1cGRhdGVkIHdpdGggaWZvcmNlIGRldmljZXMuIEluIHRoaXMKK2Nhc2UsIHRoZSBkcml2ZXIgc3RvcHMgdGhlIGVmZmVjdCwgdXAtbG9hZCBpdCwgYW5kIHJlc3RhcnQgaXQuCisKKworMy44IEluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0dXMgb2YgZWZmZWN0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorRXZlcnkgdGltZSB0aGUgc3RhdHVzIG9mIGFuIGVmZmVjdCBpcyBjaGFuZ2VkLCBhbiBldmVudCBpcyBzZW50LiBUaGUgdmFsdWVzCithbmQgbWVhbmluZ3Mgb2YgdGhlIGZpZWxkcyBvZiB0aGUgZXZlbnQgYXJlIGFzIGZvbGxvd3M6CitzdHJ1Y3QgaW5wdXRfZXZlbnQgeworLyogV2hlbiB0aGUgc3RhdHVzIG9mIHRoZSBlZmZlY3QgY2hhbmdlZCAqLworCXN0cnVjdCB0aW1ldmFsIHRpbWU7CisKKy8qIFNldCB0byBFVl9GRl9TVEFUVVMgKi8KKwl1bnNpZ25lZCBzaG9ydCB0eXBlOworCisvKiBDb250YWlucyB0aGUgaWQgb2YgdGhlIGVmZmVjdCAqLworCXVuc2lnbmVkIHNob3J0IGNvZGU7CisKKy8qIEluZGljYXRlcyB0aGUgc3RhdHVzICovCisJdW5zaWduZWQgaW50IHZhbHVlOworfTsKKworRkZfU1RBVFVTX1NUT1BQRUQJVGhlIGVmZmVjdCBzdG9wcGVkIHBsYXlpbmcKK0ZGX1NUQVRVU19QTEFZSU5HCVRoZSBlZmZlY3Qgc3RhcnRlZCB0byBwbGF5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2dhbWVwb3J0LXByb2dyYW1taW5nLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvZ2FtZXBvcnQtcHJvZ3JhbW1pbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYTNkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2dhbWVwb3J0LXByb2dyYW1taW5nLnR4dApAQCAtMCwwICsxLDE4OSBAQAorJElkOiBnYW1lcG9ydC1wcm9ncmFtbWluZy50eHQsdiAxLjMgMjAwMS8wNC8yNCAxMzo1MTozNyB2b2p0ZWNoIEV4cCAkCisKK1Byb2dyYW1taW5nIGdhbWVwb3J0IGRyaXZlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworMS4gQSBiYXNpYyBjbGFzc2ljIGdhbWVwb3J0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgdGhlIGdhbWVwb3J0IGRvZXNuJ3QgcHJvdmlkZSBtb3JlIHRoYW4gdGhlIGluYigpL291dGIoKSBmdW5jdGlvbmFsaXR5LAordGhlIGNvZGUgbmVlZGVkIHRvIHJlZ2lzdGVyIGl0IHdpdGggdGhlIGpveXN0aWNrIGRyaXZlcnMgaXMgc2ltcGxlOgorCisJc3RydWN0IGdhbWVwb3J0IGdhbWVwb3J0OworCisJZ2FtZXBvcnQuaW8gPSBNWV9JT19BRERSRVNTOworCWdhbWVwb3J0X3JlZ2lzdGVyX3BvcnQoJmdhbWVwb3J0KTsKKworTWFrZSBzdXJlIHN0cnVjdCBnYW1lcG9ydCBpcyBpbml0aWFsaXplZCB0byAwIGluIGFsbCBvdGhlciBmaWVsZHMuIFRoZQorZ2FtZXBvcnQgZ2VuZXJpYyBjb2RlIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0LgorCitJZiB5b3VyIGhhcmR3YXJlIHN1cHBvcnRzIG1vcmUgdGhhbiBvbmUgaW8gYWRkcmVzcywgYW5kIHlvdXIgZHJpdmVyIGNhbgorY2hvb3NlIHdoaWNoIG9uZSBwcm9ncmFtIHRoZSBoYXJkd2FyZSB0bywgc3RhcnRpbmcgZnJvbSB0aGUgbW9yZSBleG90aWMKK2FkZHJlc3NlcyBpcyBwcmVmZXJyZWQsIGJlY2F1c2UgdGhlIGxpa2VseWhvb2Qgb2YgY2xhc2hpbmcgd2l0aCB0aGUgc3RhbmRhcmQKKzB4MjAxIGFkZHJlc3MgaXMgc21hbGxlci4KKworRWcuIGlmIHlvdXIgZHJpdmVyIHN1cHBvcnRzIGFkZHJlc3NlcyAweDIwMCwgMHgyMDgsIDB4MjEwIGFuZCAweDIxOCwgdGhlbgorMHgyMTggd291bGQgYmUgdGhlIGFkZHJlc3Mgb2YgZmlyc3QgY2hvaWNlLgorCitJZiB5b3VyIGhhcmR3YXJlIHN1cHBvcnRzIGEgZ2FtZXBvcnQgYWRkcmVzcyB0aGF0IGlzIG5vdCBtYXBwZWQgdG8gSVNBIGlvCitzcGFjZSAoaXMgYWJvdmUgMHgxMDAwKSwgdXNlIHRoYXQgb25lLCBhbmQgZG9uJ3QgbWFwIHRoZSBJU0EgbWlycm9yLgorCitBbHNvLCBhbHdheXMgcmVxdWVzdF9yZWdpb24oKSBvbiB0aGUgd2hvbGUgaW8gc3BhY2Ugb2NjdXBpZWQgYnkgdGhlCitnYW1lcG9ydC4gQWx0aG91Z2ggb25seSBvbmUgaW9wb3J0IGlzIHJlYWxseSB1c2VkLCB0aGUgZ2FtZXBvcnQgdXN1YWxseQorb2NjdXBpZXMgZnJvbSBvbmUgdG8gc2l4dGVlbiBhZGRyZXNzZXMgaW4gdGhlIGlvIHNwYWNlLgorCitQbGVhc2UgYWxzbyBjb25zaWRlciBlbmFibGluZyB0aGUgZ2FtZXBvcnQgb24gdGhlIGNhcmQgaW4gdGhlIC0+b3BlbigpCitjYWxsYmFjayBpZiB0aGUgaW8gaXMgbWFwcGVkIHRvIElTQSBzcGFjZSAtIHRoaXMgd2F5IGl0J2xsIG9jY3VweSB0aGUgaW8KK3NwYWNlIG9ubHkgd2hlbiBzb21ldGhpbmcgcmVhbGx5IGlzIHVzaW5nIGl0LiBEaXNhYmxlIGl0IGFnYWluIGluIHRoZQorLT5jbG9zZSgpIGNhbGxiYWNrLiBZb3UgYWxzbyBjYW4gc2VsZWN0IHRoZSBpbyBhZGRyZXNzIGluIHRoZSAtPm9wZW4oKQorY2FsbGJhY2ssIHNvIHRoYXQgaXQgZG9lc24ndCBmYWlsIGlmIHNvbWUgb2YgdGhlIHBvc3NpYmxlIGFkZHJlc3NlcyBhcmUKK2FscmVhZHkgb2NjdXBpZWQgYnkgb3RoZXIgZ2FtZXBvcnRzLgorCisyLiBNZW1vcnkgbWFwcGVkIGdhbWVwb3J0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gYSBnYW1lcG9ydCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBNTUlPLCB0aGlzIHdheSBpcyBwcmVmZXJyZWQsIGJlY2F1c2UKK2l0IGlzIGZhc3RlciwgYWxsb3dpbmcgbW9yZSByZWFkcyBwZXIgc2Vjb25kLiBSZWdpc3RlcmluZyBzdWNoIGEgZ2FtZXBvcnQKK2lzbid0IGFzIGVhc3kgYXMgYSBiYXNpYyBJTyBvbmUsIGJ1dCBub3Qgc28gbXVjaCBjb21wbGV4OgorCisJc3RydWN0IGdhbWVwb3J0IGdhbWVwb3J0OworCisJdm9pZCBteV90cmlnZ2VyKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCisJeworCQlteV9tbWlvID0gMHhmZjsKKwl9CisKKwl1bnNpZ25lZCBjaGFyIG15X3JlYWQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCkKKwl7CisJCXJldHVybiBteV9tbWlvOwkKKwl9CisKKwlnYW1lcG9ydC5yZWFkID0gbXlfcmVhZDsKKwlnYW1lcG9ydC50cmlnZ2VyID0gbXlfdHJpZ2dlcjsKKwlnYW1lcG9ydF9yZWdpc3Rlcl9wb3J0KCZnYW1lcG9ydCk7CisKKzMuIENvb2tlZCBtb2RlIGdhbWVwb3J0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVyZSBhcmUgZ2FtZXBvcnRzIHRoYXQgY2FuIHJlcG9ydCB0aGUgYXhpcyB2YWx1ZXMgYXMgbnVtYmVycywgdGhhdCBtZWFucwordGhlIGRyaXZlciBkb2Vzbid0IGhhdmUgdG8gbWVhc3VyZSB0aGVtIHRoZSBvbGQgd2F5IC0gYW4gQURDIGlzIGJ1aWx0IGludG8KK3RoZSBnYW1lcG9ydC4gVG8gcmVnaXN0ZXIgYSBjb29rZWQgZ2FtZXBvcnQ6CisKKwlzdHJ1Y3QgZ2FtZXBvcnQgZ2FtZXBvcnQ7CisKKwlpbnQgbXlfY29va2VkX3JlYWQoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgaW50ICpheGVzLCBpbnQgKmJ1dHRvbnMpCisJeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJYXhlc1tpXSA9IG15X21taW9baV07CisJCWJ1dHRvbnNbaV0gPSBteV9tbWlvWzRdOworCX0KKworCWludCBteV9vcGVuKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQsIGludCBtb2RlKQorCXsKKwkJcmV0dXJuIC0obW9kZSAhPSBHQU1FUE9SVF9NT0RFX0NPT0tFRCk7CisJfQorCisJZ2FtZXBvcnQuY29va2VkX3JlYWQgPSBteV9jb29rZWRfcmVhZDsKKwlnYW1lcG9ydC5vcGVuID0gbXlfb3BlbjsKKwlnYW1lcG9ydC5mdXp6ID0gODsKKwlnYW1lcG9ydF9yZWdpc3Rlcl9wb3J0KCZnYW1lcG9ydCk7CisKK1RoZSBvbmx5IGNvbmZ1c2luZyB0aGluZyBoZXJlIGlzIHRoZSBmdXp6IHZhbHVlLiBCZXN0IGRldGVybWluZWQgYnkKK2V4cGVyaW1lbnRhdGlvbiwgaXQgaXMgdGhlIGFtb3VudCBvZiBub2lzZSBpbiB0aGUgQURDIGRhdGEuIFBlcmZlY3QKK2dhbWVwb3J0cyBjYW4gc2V0IHRoaXMgdG8gemVybywgbW9zdCBjb21tb24gaGF2ZSBmdXp6IGJldHdlZW4gOCBhbmQgMzIuCitTZWUgYW5hbG9nLmMgYW5kIGlucHV0LmMgZm9yIGhhbmRsaW5nIG9mIGZ1enogLSB0aGUgZnV6eiB2YWx1ZSBkZXRlcm1pbmVzCit0aGUgc2l6ZSBvZiBhIGdhdXNzaWFuIGZpbHRlciB3aW5kb3cgdGhhdCBpcyB1c2VkIHRvIGVsaW1pbmF0ZSB0aGUgbm9pc2UKK2luIHRoZSBkYXRhLgorCis0LiBNb3JlIGNvbXBsZXggZ2FtZXBvcnRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0dhbWVwb3J0cyBjYW4gc3VwcG9ydCBib3RoIHJhdyBhbmQgY29va2VkIG1vZGVzLiBJbiB0aGF0IGNhc2UgY29tYmluZSBlaXRoZXIKK2V4YW1wbGVzIDErMiBvciAxKzMuIEdhbWVwb3J0cyBjYW4gc3VwcG9ydCBpbnRlcm5hbCBjYWxpYnJhdGlvbiAtIHNlZSBiZWxvdywKK2FuZCBhbHNvIGxpZ2h0bmluZy5jIGFuZCBhbmFsb2cuYyBvbiBob3cgdGhhdCB3b3Jrcy4gSWYgeW91ciBkcml2ZXIgc3VwcG9ydHMKK21vcmUgdGhhbiBvbmUgZ2FtZXBvcnQgaW5zdGFuY2Ugc2ltdWx0YW5lb3VzbHksIHVzZSB0aGUgLT5wcml2YXRlIG1lbWJlciBvZgordGhlIGdhbWVwb3J0IHN0cnVjdCB0byBwb2ludCB0byB5b3VyIGRhdGEuCisKKzUuIFVucmVnaXN0ZXJpbmcgYSBnYW1lcG9ydAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NpbXBsZToKKworZ2FtZXBvcnRfdW5yZWdpc3Rlcl9wb3J0KCZnYW1lcG9ydCk7CisKKzYuIFRoZSBnYW1lcG9ydCBzdHJ1Y3R1cmUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworc3RydWN0IGdhbWVwb3J0IHsKKworCXZvaWQgKnByaXZhdGU7CisKK0EgcHJpdmF0ZSBwb2ludGVyIGZvciBmcmVlIHVzZSBpbiB0aGUgZ2FtZXBvcnQgZHJpdmVyLiAoTm90IHRoZSBqb3lzdGljaworZHJpdmVyISkKKworCWludCBudW1iZXI7CisKK051bWJlciBhc3NpZ25lZCB0byB0aGUgZ2FtZXBvcnQgd2hlbiByZWdpc3RlcmVkLiBJbmZvcm1hdGlvbmFsIHB1cnBvc2Ugb25seS4KKworCWludCBpbzsKKworSS9PIGFkZHJlc3MgZm9yIHVzZSB3aXRoIHJhdyBtb2RlLiBZb3UgaGF2ZSB0byBlaXRoZXIgc2V0IHRoaXMsIG9yIC0+cmVhZCgpCit0byBzb21lIHZhbHVlIGlmIHlvdXIgZ2FtZXBvcnQgc3VwcG9ydHMgcmF3IG1vZGUuCisKKwlpbnQgc3BlZWQ7CisKK1JhdyBtb2RlIHNwZWVkIG9mIHRoZSBnYW1lcG9ydCByZWFkcyBpbiB0aG91c2FuZHMgb2YgcmVhZHMgcGVyIHNlY29uZC4KKworCWludCBmdXp6OworCitJZiB0aGUgZ2FtZXBvcnQgc3VwcG9ydHMgY29va2VkIG1vZGUsIHRoaXMgc2hvdWxkIGJlIHNldCB0byBhIHZhbHVlIHRoYXQKK3JlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBub2lzZSBpbiB0aGUgZGF0YS4gU2VlIHNlY3Rpb24gMy4KKworCXZvaWQgKCp0cmlnZ2VyKShzdHJ1Y3QgZ2FtZXBvcnQgKik7CisKK1RyaWdnZXIuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHRyaWdnZXIgdGhlIG5zNTU4IG9uZXNob3RzLiBJZiBzZXQgdG8gTlVMTCwKK291dGIoMHhmZiwgaW8pIHdpbGwgYmUgdXNlZC4KKworCXVuc2lnbmVkIGNoYXIgKCpyZWFkKShzdHJ1Y3QgZ2FtZXBvcnQgKik7CisKK1JlYWQgdGhlIGJ1dHRvbnMgYW5kIG5zNTU4IG9uZXNob3QgYml0cy4gSWYgc2V0IHRvIE5VTEwsIGluYihpbykgd2lsbCBiZQordXNlZCBpbnN0ZWFkLgorCisJaW50ICgqY29va2VkX3JlYWQpKHN0cnVjdCBnYW1lcG9ydCAqLCBpbnQgKmF4ZXMsIGludCAqYnV0dG9ucyk7CQorCitJZiB0aGUgZ2FtZXBvcnQgc3VwcG9ydHMgY29va2VkIG1vZGUsIGl0IHNob3VsZCBwb2ludCB0aGlzIHRvIGl0cyBjb29rZWQKK3JlYWQgZnVuY3Rpb24uIEl0IHNob3VsZCBmaWxsIGF4ZXNbMC4uM10gd2l0aCBmb3VyIHZhbHVlcyBvZiB0aGUgam95c3RpY2sgYXhlcworYW5kIGJ1dHRvbnNbMF0gd2l0aCBmb3VyIGJpdHMgcmVwcmVzZW50aW5nIHRoZSBidXR0b25zLgorCisJaW50ICgqY2FsaWJyYXRlKShzdHJ1Y3QgZ2FtZXBvcnQgKiwgaW50ICpheGVzLCBpbnQgKm1heCk7IAorCitGdW5jdGlvbiBmb3IgY2FsaWJyYXRpbmcgdGhlIEFEQyBoYXJkd2FyZS4gV2hlbiBjYWxsZWQsIGF4ZXNbMC4uM10gc2hvdWxkIGJlCitwcmUtZmlsbGVkIGJ5IGNvb2tlZCBkYXRhIGJ5IHRoZSBjYWxsZXIsIG1heFswLi4zXSBzaG91bGQgYmUgcHJlLWZpbGxlZCB3aXRoCitleHBlY3RlZCBtYXhpbXVtcyBmb3IgZWFjaCBheGlzLiBUaGUgY2FsaWJyYXRlKCkgZnVuY3Rpb24gc2hvdWxkIHNldCB0aGUKK3NlbnNpdGl2aXR5IG9mIHRoZSBBREMgaGFyZHdhcmUgc28gdGhhdCB0aGUgbWF4aW11bXMgZml0IGluIGl0cyByYW5nZSBhbmQKK3JlY29tcHV0ZSB0aGUgYXhlc1tdIHZhbHVlcyB0byBtYXRjaCB0aGUgbmV3IHNlbnNpdGl2aXR5IG9yIHJlLXJlYWQgdGhlbSBmcm9tCit0aGUgaGFyZHdhcmUgc28gdGhhdCB0aGV5IGdpdmUgdmFsaWQgdmFsdWVzLiAKKworCWludCAoKm9wZW4pKHN0cnVjdCBnYW1lcG9ydCAqLCBpbnQgbW9kZSk7CisKK09wZW4oKSBzZXJ2ZXMgdHdvIHB1cnBvc2VzLiBGaXJzdCBhIGRyaXZlciBlaXRoZXIgb3BlbnMgdGhlIHBvcnQgaW4gcmF3IG9yCitpbiBjb29rZWQgbW9kZSwgdGhlIG9wZW4oKSBjYWxsYmFjayBjYW4gZGVjaWRlIHdoaWNoIG1vZGVzIGFyZSBzdXBwb3J0ZWQuCitTZWNvbmQsIHJlc291cmNlIGFsbG9jYXRpb24gY2FuIGhhcHBlbiBoZXJlLiBUaGUgcG9ydCBjYW4gYWxzbyBiZSBlbmFibGVkCitoZXJlLiBQcmlvciB0byB0aGlzIGNhbGwsIG90aGVyIGZpZWxkcyBvZiB0aGUgZ2FtZXBvcnQgc3RydWN0IChuYW1lbHkgdGhlIGlvCittZW1iZXIpIG5lZWQgbm90IHRvIGJlIHZhbGlkLgorCisJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgZ2FtZXBvcnQgKik7CisKK0Nsb3NlKCkgc2hvdWxkIGZyZWUgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgb3BlbiwgcG9zc2libHkgZGlzYWJsaW5nIHRoZQorZ2FtZXBvcnQuCisKKwlzdHJ1Y3QgZ2FtZXBvcnRfZGV2ICpkZXY7CisJc3RydWN0IGdhbWVwb3J0ICpuZXh0OworCitGb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBnYW1lcG9ydCBsYXllci4KKworfTsKKworRW5qb3khCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2lmb3JjZS1wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2lmb3JjZS1wcm90b2NvbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkZjRjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvaWZvcmNlLXByb3RvY29sLnR4dApAQCAtMCwwICsxLDI1NCBAQAorKiogSW50cm9kdWN0aW9uDQorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgd2hhdCBJIG1hbmFnZWQgdG8gZGlzY292ZXIgYWJvdXQgdGhlIHByb3RvY29sIHVzZWQgdG8NCitzcGVjaWZ5IGZvcmNlIGVmZmVjdHMgdG8gSS1Gb3JjZSAyLjAgZGV2aWNlcy4gIE5vbmUgb2YgdGhpcyBpbmZvcm1hdGlvbiBjb21lcw0KK2Zyb20gSW1tZXJzZS4gVGhhdCdzIHdoeSB5b3Ugc2hvdWxkIG5vdCB0cnVzdCB3aGF0IGlzIHdyaXR0ZW4gaW4gdGhpcw0KK2RvY3VtZW50LiBUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGhlbHAgdW5kZXJzdGFuZGluZyB0aGUgcHJvdG9jb2wuDQorVGhpcyBpcyBub3QgYSByZWZlcmVuY2UuIENvbW1lbnRzIGFuZCBjb3JyZWN0aW9ucyBhcmUgd2VsY29tZS4gIFRvIGNvbnRhY3QgbWUsDQorc2VuZCBhbiBlbWFpbCB0bzogZGVuZXV4QGlmcmFuY2UuY29tDQorDQorKiogV0FSTklORyAqKg0KK0kgbWF5IG5vdCBiZSBoZWxkIHJlc3BvbnNpYmxlIGZvciBhbnkgZGFtbWFnZSBvciBoYXJtIGNhdXNlZCBpZiB5b3UgdHJ5IHRvDQorc2VuZCBkYXRhIHRvIHlvdXIgSS1Gb3JjZSBkZXZpY2UgYmFzZWQgb24gd2hhdCB5b3UgcmVhZCBpbiB0aGlzIGRvY3VtZW50Lg0KKw0KKyoqIFByZWxpbWluYXJ5IE5vdGVzOg0KK0FsbCB2YWx1ZXMgYXJlIGhleGFkZWNpbWFsIHdpdGggYmlnLWVuZGlhbiBlbmNvZGluZyAobXNiIG9uIHRoZSBsZWZ0KS4gQmV3YXJlLA0KK3ZhbHVlcyBpbnNpZGUgcGFja2V0cyBhcmUgZW5jb2RlZCB1c2luZyBsaXR0bGUtZW5kaWFuLiAgQnl0ZXMgd2hvc2Ugcm9sZXMgYXJlDQordW5rbm93biBhcmUgbWFya2VkID8/PyAgSW5mb3JtYXRpb24gdGhhdCBuZWVkcyBkZWVwZXIgaW5zcGVjdGlvbiBpcyBtYXJrZWQgKD8pDQorDQorKiogR2VuZXJhbCBmb3JtIG9mIGEgcGFja2V0ICoqDQorVGhpcyBpcyBob3cgcGFja2V0cyBsb29rIHdoZW4gdGhlIGRldmljZSB1c2VzIHRoZSByczIzMiB0byBjb21tdW5pY2F0ZS4NCisyQiBPUCBMRU4gREFUQSBDUw0KK0NTIGlzIHRoZSBjaGVja3N1bS4gSXQgaXMgZXF1YWwgdG8gdGhlIGV4Y2x1c2l2ZSBvciBvZiBhbGwgYnl0ZXMuDQorDQorV2hlbiB1c2luZyBVU0I6DQorT1AgREFUQQ0KK1RoZSAyQiwgTEVOIGFuZCBDUyBmaWVsZHMgaGF2ZSBkaXNhcHBlYXJlZCwgcHJvYmFibHkgYmVjYXVzZSBVU0IgaGFuZGxlcyBmcmFtZXMgYW5kDQorZGF0YSBjb3JydXB0aW9uIGlzIGhhbmRsZWQgb3IgdW5zaWduaWZpY2FudC4NCisNCitGaXJzdCwgSSBkZXNjcmliZSBlZmZlY3RzIHRoYXQgYXJlIHNlbnQgYnkgdGhlIGRldmljZSB0byB0aGUgY29tcHV0ZXINCisNCisqKiBEZXZpY2UgaW5wdXQgc3RhdGUNCitUaGlzIHBhY2tldCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdGF0ZSBvZiBlYWNoIGJ1dHRvbiBhbmQgdGhlIHZhbHVlIG9mIGVhY2gNCitheGlzDQorT1A9IDAxIGZvciBhIGpveXN0aWNrLCAwMyBmb3IgYSB3aGVlbA0KK0xFTj0gVmFyaWVzIGZyb20gZGV2aWNlIHRvIGRldmljZQ0KKzAwIFgtQXhpcyBsc2INCiswMSBYLUF4aXMgbXNiDQorMDIgWS1BeGlzIGxzYiwgb3IgZ2FzIHBlZGFsIGZvciBhIHdoZWVsDQorMDMgWS1BeGlzIG1zYiwgb3IgYnJha2UgcGVkYWwgZm9yIGEgd2hlZWwNCiswNCBUaHJvdHRsZQ0KKzA1IEJ1dHRvbnMNCiswNiBMb3dlciA0IGJpdHM6IEJ1dHRvbnMNCisgICBVcHBlciA0IGJpdHM6IEhhdA0KKzA3IFJ1ZGRlcg0KKw0KKyoqIERldmljZSBlZmZlY3RzIHN0YXRlcw0KK09QPSAwMg0KK0xFTj0gVmFyaWVzDQorMDAgPyBCaXQgMSAoVmFsdWUgMikgaXMgdGhlIHZhbHVlIG9mIHRoZSBkZWFkbWFuIHN3aXRjaA0KKzAxIEJpdCA4IGlzIHNldCBpZiB0aGUgZWZmZWN0IGlzIHBsYXlpbmcuIEJpdHMgMCB0byA3IGFyZSB0aGUgZWZmZWN0IGlkLg0KKzAyID8/DQorMDMgQWRkcmVzcyBvZiBwYXJhbWV0ZXIgYmxvY2sgY2hhbmdlZCAobHNiKQ0KKzA0IEFkZHJlc3Mgb2YgcGFyYW1ldGVyIGJsb2NrIGNoYW5nZWQgKG1zYikNCiswNSBBZGRyZXNzIG9mIHNlY29uZCBwYXJhbWV0ZXIgYmxvY2sgY2hhbmdlZCAobHNiKQ0KKy4uLiBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXIgYmxvY2tzIHVwZGF0ZWQNCisNCisqKiBGb3JjZSBlZmZlY3QgKioNCitPUD0gIDAxDQorTEVOPSAwZQ0KKzAwIENoYW5uZWwgKHdoZW4gcGxheWluZyBzZXZlcmFsIGVmZmVjdHMgYXQgdGhlIHNhbWUgdGltZSwgZWFjaCBtdXN0IGJlIGFzc2lnbmVkIGEgY2hhbm5lbCkNCiswMSBXYXZlIGZvcm0NCisJVmFsIDAwIENvbnN0YW50DQorCVZhbCAyMCBTcXVhcmUNCisJVmFsIDIxIFRyaWFuZ2xlDQorCVZhbCAyMiBTaW5lDQorCVZhbCAyMyBTYXd0b290aCB1cA0KKwlWYWwgMjQgU2F3dG9vdGggZG93bg0KKwlWYWwgNDAgU3ByaW5nIChGb3JjZSA9IGYocG9zKSkNCisJVmFsIDQxIEZyaWN0aW9uIChGb3JjZSA9IGYodmVsb2NpdHkpKSBhbmQgSW5lcnRpYSAoRm9yY2UgPSBmKGFjY2VsZXJhdGlvbikpDQorDQorCQ0KKzAyIEF4ZXMgYWZmZWN0ZWQgYW5kIHRyaWdnZXINCisJQml0cyA0LTc6IFZhbCAyID0gZWZmZWN0IGFsb25nIG9uZSBheGlzLiBCeXRlIDA1IGluZGljYXRlcyBkaXJlY3Rpb24NCisJICAgICAgICAgIFZhbCA0ID0gWCBheGlzIG9ubHkuIEJ5dGUgMDUgbXVzdCBjb250YWluIDVhDQorCSAgICAgICAgICBWYWwgOCA9IFkgYXhpcyBvbmx5LiBCeXRlIDA1IG11c3QgY29udGFpbiBiNA0KKwkgICAgICAgICAgVmFsIGMgPSBYIGFuZCBZIGF4ZXMuIEJ5dGVzIDA1IG11c3QgY29udGFpbiA2MA0KKwlCaXRzIDAtMzogVmFsIDAgPSBObyB0cmlnZ2VyDQorCSAgICAgICAgICBWYWwgeCsxID0gQnV0dG9uIHggdHJpZ2dlcnMgdGhlIGVmZmVjdA0KKwlXaGVuIHRoZSB3aG9sZSBieXRlIGlzIDAsIGNhbmNlbCB0aGUgcHJldmlvdXNseSBzZXQgdHJpZ2dlcg0KKw0KKzAzLTA0IER1cmF0aW9uIG9mIGVmZmVjdCAobGl0dGxlIGVuZGlhbiBlbmNvZGluZywgaW4gbXMpDQorDQorMDUgRGlyZWN0aW9uIG9mIGVmZmVjdCwgaWYgYXBwbGljYWJsZS4gRWxzZSwgc2VlIDAyIGZvciB2YWx1ZSB0byBhc3NpZ24uDQorDQorMDYtMDcgTWluaW11bSB0aW1lIGJldHdlZW4gdHJpZ2dlcmluZy4NCisNCiswOC0wOSBBZGRyZXNzIG9mIHBlcmlvZGljaXR5IG9yIG1hZ25pdHVkZSBwYXJhbWV0ZXJzDQorMGEtMGIgQWRkcmVzcyBvZiBhdHRhY2sgYW5kIGZhZGUgcGFyYW1ldGVycywgb3IgZmZmZiBpZiBub25lLg0KKypvcioNCiswOC0wOSBBZGRyZXNzIG9mIGludGVyYWN0aXZlIHBhcmFtZXRlcnMgZm9yIFgtYXhpcywgb3IgZmZmZiBpZiBub3QgYXBwbGljYWJsZQ0KKzBhLTBiIEFkZHJlc3Mgb2YgaW50ZXJhY3RpdmUgcGFyYW1ldGVycyBmb3IgWS1heGlzLCBvciBmZmZmIGlmIG5vdCBhcHBsaWNhYmxlDQorDQorMGMtMGQgRGVsYXkgYmVmb3JlIGV4ZWN1dGlvbiBvZiBlZmZlY3QgKGxpdHRsZSBlbmRpYW4gZW5jb2RpbmcsIGluIG1zKQ0KKw0KKw0KKyoqIFRpbWUgYmFzZWQgcGFyYW1ldGVycyAqKg0KKw0KKyoqKiBBdHRhY2sgYW5kIGZhZGUgKioqDQorT1A9ICAwMg0KK0xFTj0gMDgNCiswMC0wMSBBZGRyZXNzIHdoZXJlIHRvIHN0b3JlIHRoZSBwYXJhbWV0ZXJlcw0KKzAyLTAzIER1cmF0aW9uIG9mIGF0dGFjayAobGl0dGxlIGVuZGlhbiBlbmNvZGluZywgaW4gbXMpDQorMDQgTGV2ZWwgYXQgZW5kIG9mIGF0dGFjay4gU2lnbmVkIGJ5dGUuDQorMDUtMDYgRHVyYXRpb24gb2YgZmFkZS4NCiswNyBMZXZlbCBhdCBlbmQgb2YgZmFkZS4NCisNCisqKiogTWFnbml0dWRlICoqKg0KK09QPSAgMDMNCitMRU49IDAzDQorMDAtMDEgQWRkcmVzcw0KKzAyIExldmVsLiBTaWduZWQgYnl0ZS4NCisNCisqKiogUGVyaW9kaWNpdHkgKioqDQorT1A9ICAwNA0KK0xFTj0gMDcNCiswMC0wMSBBZGRyZXNzDQorMDIgTWFnbml0dWRlLiBTaWduZWQgYnl0ZS4NCiswMyBPZmZzZXQuIFNpZ25lZCBieXRlLg0KKzA0IFBoYXNlLiBWYWwgMDAgPSAwIGRlZywgVmFsIDQwID0gOTAgZGVncy4NCiswNS0wNiBQZXJpb2QgKGxpdHRsZSBlbmRpYW4gZW5jb2RpbmcsIGluIG1zKQ0KKw0KKyoqIEludGVyYWN0aXZlIHBhcmFtZXRlcnMgKioNCitPUD0gIDA1DQorTEVOPSAwYQ0KKzAwLTAxIEFkZHJlc3MNCiswMiBQb3NpdGl2ZSBDb2VmZg0KKzAzIE5lZ2F0aXZlIENvZWZmDQorMDQrMDUgT2Zmc2V0IChjZW50ZXIpDQorMDYrMDcgRGVhZCBiYW5kIChWYWwgMDFGNCA9IDUwMDAgKGRlY2ltYWwpKQ0KKzA4IFBvc2l0aXZlIHNhdHVyYXRpb24gKFZhbCAwYSA9IDEwMDAgKGRlY2ltYWwpIFZhbCA2NCA9IDEwMDAwIChkZWNpbWFsKSkNCiswOSBOZWdhdGl2ZSBzYXR1cmF0aW9uDQorDQorVGhlIGVuY29kaW5nIGlzIGEgYml0IGZ1bm55IGhlcmU6IEZvciBjb2VmZnMsIHRoZXNlIGFyZSBzaWduZWQgdmFsdWVzLiBUaGUNCittYXhpbXVtIHZhbHVlIGlzIDY0ICgxMDAgZGVjaW1hbCksIHRoZSBtaW4gaXMgOWMuDQorRm9yIHRoZSBvZmZzZXQsIHRoZSBtaW5pbXVtIHZhbHVlIGlzIEZFMEMsIHRoZSBtYXhpbXVtIHZhbHVlIGlzIDAxRjQuDQorRm9yIHRoZSBkZWFkYmFuZCwgdGhlIG1pbmltdW0gdmFsdWUgaXMgMCwgdGhlIG1heCBpcyAwM0U4Lg0KKw0KKyoqIENvbnRyb2xzICoqDQorT1A9ICA0MQ0KK0xFTj0gMDMNCiswMCBDaGFubmVsDQorMDEgU3RhcnQvU3RvcA0KKwlWYWwgMDA6IFN0b3ANCisJVmFsIDAxOiBTdGFydCBhbmQgcGxheSBvbmNlLg0KKwlWYWwgNDE6IFN0YXJ0IGFuZCBwbGF5IG4gdGltZXMgKFNlZSBieXRlIDAyIGJlbG93KQ0KKzAyIE51bWJlciBvZiBpdGVyYXRpb25zIG4uDQorDQorKiogSW5pdCAqKg0KKw0KKyoqKiBRdWVyeWluZyBmZWF0dXJlcyAqKioNCitPUD0gIGZmDQorUXVlcnkgY29tbWFuZC4gTGVuZ3RoIHZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIHF1ZXJ5IHR5cGUuDQorVGhlIGdlbmVyYWwgZm9ybWF0IG9mIHRoaXMgcGFja2V0IGlzOg0KK2ZmIDAxIFFVRVJZIFtJTkRFWF0gQ0hFQ0tTVU0NCityZXBvbnNlcyBhcmUgb2YgdGhlIHNhbWUgZm9ybToNCitGRiBMRU4gUVVFUlkgVkFMVUVfUVVFUklFRCBDSEVDS1NVTTINCit3aGVyZSBMRU4gPSAxICsgbGVuZ3RoKFZBTFVFX1FVRVJJRUQpDQorDQorKioqKiBRdWVyeSByYW0gc2l6ZSAqKioqDQorUVVFUlkgPSA0MiAoJ0IndWZmZXIgc2l6ZSkNCitUaGUgZGV2aWNlIHNob3VsZCByZXBseSB3aXRoIHRoZSBzYW1lIHBhY2tldCBwbHVzIHR3byBhZGRpdGlvbm5hbCBieXRlcw0KK2NvbnRhaW5pbmcgdGhlIHNpemUgb2YgdGhlIG1lbW9yeToNCitmZiAwMyA0MiAwMyBlOCBDUyB3b3VsZCBtZWFuIHRoYXQgdGhlIGRldmljZSBoYXMgMTAwMCBieXRlcyBvZiByYW0gYXZhaWxhYmxlLg0KKw0KKyoqKiogUXVlcnkgbnVtYmVyIG9mIGVmZmVjdHMgKioqKg0KK1FVRVJZID0gNGUgKCdOJ3VtYmVyIG9mIGVmZmVjdHMpDQorVGhlIGRldmljZSBzaG91bGQgcmVzcG9uZCBieSBzZW5kaW5nIHRoZSBudW1iZXIgb2YgZWZmZWN0cyB0aGF0IGNhbiBiZSBwbGF5ZWQNCithdCB0aGUgc2FtZSB0aW1lIChvbmUgYnl0ZSkNCitmZiAwMiA0ZSAxNCBDUyB3b3VsZCBzdGFuZCBmb3IgMjAgZWZmZWN0cy4NCisNCisqKioqIFZlbmRvcidzIGlkICoqKioNCitRVUVSWSA9IDRkICgnTSdhbnVmYWN0dXJlcikNCitRdWVyeSB0aGUgdmVuZG9ycydpZCAoMiBieXRlcykNCisNCisqKioqIFByb2R1Y3QgaWQgKioqKioNCitRVUVSWSA9IDUwICgnUCdyb2R1Y3QpDQorUXVlcnkgdGhlIHByb2R1Y3QgaWQgKDIgYnl0ZXMpDQorDQorKioqKiBPcGVuIGRldmljZSAqKioqDQorUVVFUlkgPSA0ZiAoJ08ncGVuKSANCitObyBkYXRhIHJldHVybmVkLg0KKw0KKyoqKiogQ2xvc2UgZGV2aWNlICoqKioqDQorUVVFUlkgPSA0MyAoJ0MnKWxvc2UNCitObyBkYXRhIHJldHVybmVkLg0KKw0KKyoqKiogUXVlcnkgZWZmZWN0ICoqKioNCitRVUVSWSA9IDQ1ICgnRScpIA0KK1NlbmQgZWZmZWN0IHR5cGUuDQorUmV0dXJucyBub256ZXJvIGlmIHN1cHBvcnRlZCAoMiBieXRlcykNCisNCisqKioqIEZpcm13YXJlIFZlcnNpb24gKioqKg0KK1FVRVJZID0gNTYgKCdWJ2Vyc2lvbikNCitTZW5kcyBiYWNrIDMgYnl0ZXMgLSBtYWpvciwgbWlub3IsIHN1Ym1pbm9yDQorDQorKioqIEluaXRpYWxpc2F0aW9uIG9mIHRoZSBkZXZpY2UgKioqDQorDQorKioqKiBTZXQgQ29udHJvbCAqKioqDQorISEhIERldmljZSBkZXBlbmRlbnQsIGNhbiBiZSBkaWZmZXJlbnQgb24gZGlmZmVyZW50IG1vZGVscyAhISENCitPUD0gIDQwIDxpZHg+IDx2YWw+IFs8dmFsPl0NCitMRU49IDIgb3IgMw0KKzAwIElkeA0KKyAgIElkeCAwMCBTZXQgZGVhZCB6b25lICgwLi4yMDQ4KSANCisgICBJZHggMDEgSWdub3JlIERlYWRtYW4gc2Vuc29yICgwLi4xKSAgICAgDQorICAgSWR4IDAyIEVuYWJsZSBjb21tIHdhdGNoZG9nICgwLi4xKSAgICAgDQorICAgSWR4IDAzIFNldCB0aGUgc3RyZW5ndGggb2YgdGhlIHNwcmluZyAoMC4uMTAwKSAgIA0KKyAgIElkeCAwNCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgc3ByaW5nICgwLzEpDQorICAgSWR4IDA1IFNldCBheGlzIHNhdHVyYXRpb24gdGhyZXNob2xkICgwLi4yMDQ4KSANCisNCisqKioqIFNldCBFZmZlY3QgU3RhdGUgKioqKg0KK09QPSAgNDIgPHZhbD4NCitMRU49IDENCiswMCBTdGF0ZQ0KKyAgIEJpdCAzIFBhdXNlIGZvcmNlIGZlZWRiYWNrDQorICAgQml0IDIgRW5hYmxlIGZvcmNlIGZlZWRiYWNrDQorICAgQml0IDAgU3RvcCBhbGwgZWZmZWN0cw0KKw0KKyoqKiogU2V0IG92ZXJhbGwgZ2FpbiAqKioqDQorT1A9ICA0MyA8dmFsPg0KK0xFTj0gMQ0KKzAwIEdhaW4NCisgICBWYWwgMDAgPSAwJQ0KKyAgIFZhbCA0MCA9IDUwJQ0KKyAgIFZhbCA4MCA9IDEwMCUNCisNCisqKiBQYXJhbWV0ZXIgbWVtb3J5ICoqDQorDQorRWFjaCBkZXZpY2UgaGFzIGEgY2VydGFpbiBhbW91bnQgb2YgbWVtb3J5IHRvIHN0b3JlIHBhcmFtZXRlcnMgb2YgZWZmZWN0cy4NCitUaGUgYW1vdW50IG9mIFJBTSBtYXkgdmFyeSwgSSBlbmNvdW50ZXJlZCB2YWx1ZXMgZnJvbSAyMDAgdG8gMTAwMCBieXRlcy4gQmVsb3cNCitpcyB0aGUgYW1vdW50IG9mIG1lbW9yeSBhcHBhcmVudGx5IG5lZWRlZCBmb3IgZXZlcnkgc2V0IG9mIHBhcmFtZXRlcnM6DQorIC0gcGVyaW9kIDogMGMNCisgLSBtYWduaXR1ZGUgOiAwMg0KKyAtIGF0dGFjayBhbmQgZmFkZSA6IDBlDQorIC0gaW50ZXJhY3RpdmUgOiAwOA0KKw0KKyoqIEFwcGVuZGl4OiBIb3cgdG8gc3R1ZHkgdGhlIHByb3RvY29sID8gKioNCisNCisxLiBHZW5lcmF0ZSBlZmZlY3RzIHVzaW5nIHRoZSBmb3JjZSBlZGl0b3IgcHJvdmlkZWQgd2l0aCB0aGUgRGlyZWN0WCBTREssIG9yIHVzZSBJbW1lcnNpb24gU3R1ZGlvIChmcmVlbHkgYXZhaWxhYmxlIGF0IHRoZWlyIHdlYiBzaXRlIGluIHRoZSBkZXZlbG9wZXIgc2VjdGlvbjogd3d3LmltbWVyc2lvbi5jb20pDQorMi4gU3RhcnQgYSBzb2Z0IHNweWluZyBSUzIzMiBvciBVU0IgKGRlcGVuZGluZyBvbiB3aGVyZSB5b3UgY29ubmVjdGVkIHlvdXIgam95c3RpY2svd2hlZWwpLiBJIHVzZWQgQ29tUG9ydFNweSBmcm9tIGZDb2RlciAoYWxwaGEgdmVyc2lvbiEpDQorMy4gUGxheSB0aGUgZWZmZWN0LCBhbmQgd2F0Y2ggd2hhdCBoYXBwZW5zIG9uIHRoZSBzcHkgc2NyZWVuLg0KKw0KK0EgZmV3IHdvcmRzIGFib3V0IENvbVBvcnRTcHk6DQorQXQgZmlyc3QgZ2xhbmNlLCB0aGlzIHNvZnQgc2VlbXMsIGh1bSwgd2VsbC4uLiBidWdneS4gSW4gZmFjdCwgZGF0YSBhcHBlYXIgd2l0aCBhIGZldyBzZWNvbmRzIGxhdGVuY3kuIFBlcnNvbm5hbHksIEkgcmVzdGFydCBpdCBldmVyeSB0aW1lIEkgcGxheSBhbiBlZmZlY3QuDQorUmVtZW1iZXIgaXQncyBmcmVlIChhcyBpbiBmcmVlIGJlZXIpIGFuZCBhbHBoYSENCisNCisqKiBVUkxTICoqDQorQ2hlY2sgd3d3LmltbWVyc2UuY29tIGZvciBJbW1lcnNpb24gU3R1ZGlvLCBhbmQgd3d3LmZjb2Rlci5jb20gZm9yIENvbVBvcnRTcHkuDQorDQorKiogQXV0aG9yIG9mIHRoaXMgZG9jdW1lbnQgKioNCitKb2hhbm4gRGVuZXV4IDxkZW5ldXhAaWZyYW5jZS5jb20+DQorSG9tZSBwYWdlIGF0IGh0dHA6Ly93d3cuZXNpbC51bml2LW1ycy5mci9+amRlbmV1eC9wcm9qZWN0cy9mZi8NCisNCitBZGRpdGlvbnMgYnkgVm9qdGVjaCBQYXZsaWsuDQorDQorSS1Gb3JjZSBpcyB0cmFkZW1hcmsgb2YgSW1tZXJzaW9uIENvcnAuDQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC1wcm9ncmFtbWluZy50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LXByb2dyYW1taW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBlMDY4OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQtcHJvZ3JhbW1pbmcudHh0CkBAIC0wLDAgKzEsMjgxIEBACiskSWQ6IGlucHV0LXByb2dyYW1taW5nLnR4dCx2IDEuNCAyMDAxLzA1LzA0IDA5OjQ3OjE0IHZvanRlY2ggRXhwICQKKworUHJvZ3JhbW1pbmcgaW5wdXQgZHJpdmVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisxLiBDcmVhdGluZyBhbiBpbnB1dCBkZXZpY2UgZHJpdmVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzEuMCBUaGUgc2ltcGxlc3QgZXhhbXBsZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0hlcmUgY29tZXMgYSB2ZXJ5IHNpbXBsZSBleGFtcGxlIG9mIGFuIGlucHV0IGRldmljZSBkcml2ZXIuIFRoZSBkZXZpY2UgaGFzCitqdXN0IG9uZSBidXR0b24gYW5kIHRoZSBidXR0b24gaXMgYWNjZXNzaWJsZSBhdCBpL28gcG9ydCBCVVRUT05fUE9SVC4gV2hlbgorcHJlc3NlZCBvciByZWxlYXNlZCBhIEJVVFRPTl9JUlEgaGFwcGVucy4gVGhlIGRyaXZlciBjb3VsZCBsb29rIGxpa2U6CisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIHZvaWQgYnV0dG9uX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkdW1teSwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWlucHV0X3JlcG9ydF9rZXkoJmJ1dHRvbl9kZXYsIEJUTl8xLCBpbmIoQlVUVE9OX1BPUlQpICYgMSk7CisJaW5wdXRfc3luYygmYnV0dG9uX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGJ1dHRvbl9pbml0KHZvaWQpCit7CisJaWYgKHJlcXVlc3RfaXJxKEJVVFRPTl9JUlEsIGJ1dHRvbl9pbnRlcnJ1cHQsIDAsICJidXR0b24iLCBOVUxMKSkgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiYnV0dG9uLmM6IENhbid0IGFsbG9jYXRlIGlycSAlZFxuIiwgYnV0dG9uX2lycSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAgICAgfQorCQorCWJ1dHRvbl9kZXYuZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwlidXR0b25fZGV2LmtleWJpdFtMT05HKEJUTl8wKV0gPSBCSVQoQlROXzApOworCQorCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmYnV0dG9uX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBidXR0b25fZXhpdCh2b2lkKQoreworICAgICAgICBpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmYnV0dG9uX2Rldik7CisJZnJlZV9pcnEoQlVUVE9OX0lSUSwgYnV0dG9uX2ludGVycnVwdCk7Cit9CisKK21vZHVsZV9pbml0KGJ1dHRvbl9pbml0KTsKK21vZHVsZV9leGl0KGJ1dHRvbl9leGl0KTsKKworMS4xIFdoYXQgdGhlIGV4YW1wbGUgZG9lcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitGaXJzdCBpdCBoYXMgdG8gaW5jbHVkZSB0aGUgPGxpbnV4L2lucHV0Lmg+IGZpbGUsIHdoaWNoIGludGVyZmFjZXMgdG8gdGhlCitpbnB1dCBzdWJzeXN0ZW0uIFRoaXMgcHJvdmlkZXMgYWxsIHRoZSBkZWZpbml0aW9ucyBuZWVkZWQuCisKK0luIHRoZSBfaW5pdCBmdW5jdGlvbiwgd2hpY2ggaXMgY2FsbGVkIGVpdGhlciB1cG9uIG1vZHVsZSBsb2FkIG9yIHdoZW4KK2Jvb3RpbmcgdGhlIGtlcm5lbCwgaXQgZ3JhYnMgdGhlIHJlcXVpcmVkIHJlc291cmNlcyAoaXQgc2hvdWxkIGFsc28gY2hlY2sKK2ZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGRldmljZSkuCisKK1RoZW4gaXQgc2V0cyB0aGUgaW5wdXQgYml0ZmllbGRzLiBUaGlzIHdheSB0aGUgZGV2aWNlIGRyaXZlciB0ZWxscyB0aGUgb3RoZXIKK3BhcnRzIG9mIHRoZSBpbnB1dCBzeXN0ZW1zIHdoYXQgaXQgaXMgLSB3aGF0IGV2ZW50cyBjYW4gYmUgZ2VuZXJhdGVkIG9yCithY2NlcHRlZCBieSB0aGlzIGlucHV0IGRldmljZS4gT3VyIGV4YW1wbGUgZGV2aWNlIGNhbiBvbmx5IGdlbmVyYXRlIEVWX0tFWSB0eXBlCitldmVudHMsIGFuZCBmcm9tIHRob3NlIG9ubHkgQlROXzAgZXZlbnQgY29kZS4gVGh1cyB3ZSBvbmx5IHNldCB0aGVzZSB0d28KK2JpdHMuIFdlIGNvdWxkIGhhdmUgdXNlZAorCisJc2V0X2JpdChFVl9LRVksIGJ1dHRvbl9kZXYuZXZiaXQpOworCXNldF9iaXQoQlROXzAsIGJ1dHRvbl9kZXYua2V5Yml0KTsKKworYXMgd2VsbCwgYnV0IHdpdGggbW9yZSB0aGFuIHNpbmdsZSBiaXRzIHRoZSBmaXJzdCBhcHByb2FjaCB0ZW5kcyB0byBiZQorc2hvcnRlci4gCisKK1RoZW4gdGhlIGV4YW1wbGUgZHJpdmVyIHJlZ2lzdGVycyB0aGUgaW5wdXQgZGV2aWNlIHN0cnVjdHVyZSBieSBjYWxsaW5nCisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmJ1dHRvbl9kZXYpOworCitUaGlzIGFkZHMgdGhlIGJ1dHRvbl9kZXYgc3RydWN0dXJlIHRvIGxpbmtlZCBsaXN0cyBvZiB0aGUgaW5wdXQgZHJpdmVyIGFuZAorY2FsbHMgZGV2aWNlIGhhbmRsZXIgbW9kdWxlcyBfY29ubmVjdCBmdW5jdGlvbnMgdG8gdGVsbCB0aGVtIGEgbmV3IGlucHV0CitkZXZpY2UgaGFzIGFwcGVhcmVkLiBCZWNhdXNlIHRoZSBfY29ubmVjdCBmdW5jdGlvbnMgbWF5IGNhbGwga21hbGxvYygsCitHRlBfS0VSTkVMKSwgd2hpY2ggY2FuIHNsZWVwLCBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoKSBtdXN0IG5vdCBiZSBjYWxsZWQKK2Zyb20gYW4gaW50ZXJydXB0IG9yIHdpdGggYSBzcGlubG9jayBoZWxkLgorCitXaGlsZSBpbiB1c2UsIHRoZSBvbmx5IHVzZWQgZnVuY3Rpb24gb2YgdGhlIGRyaXZlciBpcworCisJYnV0dG9uX2ludGVycnVwdCgpCisKK3doaWNoIHVwb24gZXZlcnkgaW50ZXJydXB0IGZyb20gdGhlIGJ1dHRvbiBjaGVja3MgaXRzIHN0YXRlIGFuZCByZXBvcnRzIGl0Cit2aWEgdGhlIAorCisJaW5wdXRfcmVwb3J0X2tleSgpCisKK2NhbGwgdG8gdGhlIGlucHV0IHN5c3RlbS4gVGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQKK3JvdXRpbmUgaXNuJ3QgcmVwb3J0aW5nIHR3byBzYW1lIHZhbHVlIGV2ZW50cyAocHJlc3MsIHByZXNzIGZvciBleGFtcGxlKSB0bwordGhlIGlucHV0IHN5c3RlbSwgYmVjYXVzZSB0aGUgaW5wdXRfcmVwb3J0XyogZnVuY3Rpb25zIGNoZWNrIHRoYXQKK3RoZW1zZWx2ZXMuCisKK1RoZW4gdGhlcmUgaXMgdGhlCisKKwlpbnB1dF9zeW5jKCkKKworY2FsbCB0byB0ZWxsIHRob3NlIHdobyByZWNlaXZlIHRoZSBldmVudHMgdGhhdCB3ZSd2ZSBzZW50IGEgY29tcGxldGUgcmVwb3J0LgorVGhpcyBkb2Vzbid0IHNlZW0gaW1wb3J0YW50IGluIHRoZSBvbmUgYnV0dG9uIGNhc2UsIGJ1dCBpcyBxdWl0ZSBpbXBvcnRhbnQKK2ZvciBmb3IgZXhhbXBsZSBtb3VzZSBtb3ZlbWVudCwgd2hlcmUgeW91IGRvbid0IHdhbnQgdGhlIFggYW5kIFkgdmFsdWVzCit0byBiZSBpbnRlcnByZXRlZCBzZXBhcmF0ZWx5LCBiZWNhdXNlIHRoYXQnZCByZXN1bHQgaW4gYSBkaWZmZXJlbnQgbW92ZW1lbnQuCisKKzEuMiBkZXYtPm9wZW4oKSBhbmQgZGV2LT5jbG9zZSgpCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJbiBjYXNlIHRoZSBkcml2ZXIgaGFzIHRvIHJlcGVhdGVkbHkgcG9sbCB0aGUgZGV2aWNlLCBiZWNhdXNlIGl0IGRvZXNuJ3QKK2hhdmUgYW4gaW50ZXJydXB0IGNvbWluZyBmcm9tIGl0IGFuZCB0aGUgcG9sbGluZyBpcyB0b28gZXhwZW5zaXZlIHRvIGJlIGRvbmUKK2FsbCB0aGUgdGltZSwgb3IgaWYgdGhlIGRldmljZSB1c2VzIGEgdmFsdWFibGUgcmVzb3VyY2UgKGVnLiBpbnRlcnJ1cHQpLCBpdAorY2FuIHVzZSB0aGUgb3BlbiBhbmQgY2xvc2UgY2FsbGJhY2sgdG8ga25vdyB3aGVuIGl0IGNhbiBzdG9wIHBvbGxpbmcgb3IKK3JlbGVhc2UgdGhlIGludGVycnVwdCBhbmQgd2hlbiBpdCBtdXN0IHJlc3VtZSBwb2xsaW5nIG9yIGdyYWIgdGhlIGludGVycnVwdAorYWdhaW4uIFRvIGRvIHRoYXQsIHdlIHdvdWxkIGFkZCB0aGlzIHRvIG91ciBleGFtcGxlIGRyaXZlcjoKKworaW50IGJ1dHRvbl91c2VkID0gMDsKKworc3RhdGljIGludCBidXR0b25fb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisgICAgICAgIGlmIChidXR0b25fdXNlZCsrKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisJaWYgKHJlcXVlc3RfaXJxKEJVVFRPTl9JUlEsIGJ1dHRvbl9pbnRlcnJ1cHQsIDAsICJidXR0b24iLCBOVUxMKSkgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiYnV0dG9uLmM6IENhbid0IGFsbG9jYXRlIGlycSAlZFxuIiwgYnV0dG9uX2lycSk7CisgICAgICAgICAgICAgICAgYnV0dG9uX3VzZWQtLTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJ1dHRvbl9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisgICAgICAgIGlmICghLS1idXR0b25fdXNlZCkKKyAgICAgICAgICAgICAgICBmcmVlX2lycShJUlFfQU1JR0FfVkVSVEIsIGJ1dHRvbl9pbnRlcnJ1cHQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBidXR0b25faW5pdCh2b2lkKQoreworCS4uLgorCWJ1dHRvbl9kZXYub3BlbiA9IGJ1dHRvbl9vcGVuOworCWJ1dHRvbl9kZXYuY2xvc2UgPSBidXR0b25fY2xvc2U7CisJLi4uCit9CisKK05vdGUgdGhlIGJ1dHRvbl91c2VkIHZhcmlhYmxlIC0gd2UgaGF2ZSB0byB0cmFjayBob3cgbWFueSB0aW1lcyB0aGUgb3BlbgorZnVuY3Rpb24gd2FzIGNhbGxlZCB0byBrbm93IHdoZW4gZXhhY3RseSBvdXIgZGV2aWNlIHN0b3BzIGJlaW5nIHVzZWQuCisKK1RoZSBvcGVuKCkgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhIDAgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIGFueSBub256ZXJvIHZhbHVlCitpbiBjYXNlIG9mIGZhaWx1cmUuIFRoZSBjbG9zZSgpIGNhbGxiYWNrICh3aGljaCBpcyB2b2lkKSBtdXN0IGFsd2F5cyBzdWNjZWVkLgorCisxLjMgQmFzaWMgZXZlbnQgdHlwZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgbW9zdCBzaW1wbGUgZXZlbnQgdHlwZSBpcyBFVl9LRVksIHdoaWNoIGlzIHVzZWQgZm9yIGtleXMgYW5kIGJ1dHRvbnMuCitJdCdzIHJlcG9ydGVkIHRvIHRoZSBpbnB1dCBzeXN0ZW0gdmlhOgorCisJaW5wdXRfcmVwb3J0X2tleShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBjb2RlLCBpbnQgdmFsdWUpCisKK1NlZSBsaW51eC9pbnB1dC5oIGZvciB0aGUgYWxsb3dhYmxlIHZhbHVlcyBvZiBjb2RlIChmcm9tIDAgdG8gS0VZX01BWCkuCitWYWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIHRydXRoIHZhbHVlLCBpZSBhbnkgbm9uemVybyB2YWx1ZSBtZWFucyBrZXkKK3ByZXNzZWQsIHplcm8gdmFsdWUgbWVhbnMga2V5IHJlbGVhc2VkLiBUaGUgaW5wdXQgY29kZSBnZW5lcmF0ZXMgZXZlbnRzIG9ubHkKK2luIGNhc2UgdGhlIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIGJlZm9yZS4KKworSW4gYWRkaXRpb24gdG8gRVZfS0VZLCB0aGVyZSBhcmUgdHdvIG1vcmUgYmFzaWMgZXZlbnQgdHlwZXM6IEVWX1JFTCBhbmQKK0VWX0FCUy4gVGhleSBhcmUgdXNlZCBmb3IgcmVsYXRpdmUgYW5kIGFic29sdXRlIHZhbHVlcyBzdXBwbGllZCBieSB0aGUKK2RldmljZS4gQSByZWxhdGl2ZSB2YWx1ZSBtYXkgYmUgZm9yIGV4YW1wbGUgYSBtb3VzZSBtb3ZlbWVudCBpbiB0aGUgWCBheGlzLgorVGhlIG1vdXNlIHJlcG9ydHMgaXQgYXMgYSByZWxhdGl2ZSBkaWZmZXJlbmNlIGZyb20gdGhlIGxhc3QgcG9zaXRpb24sCitiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgYWJzb2x1dGUgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gd29yayBpbi4gQWJzb2x1dGUKK2V2ZW50cyBhcmUgbmFtZWx5IGZvciBqb3lzdGlja3MgYW5kIGRpZ2l0aXplcnMgLSBkZXZpY2VzIHRoYXQgZG8gd29yayBpbiBhbgorYWJzb2x1dGUgY29vcmRpbmF0ZSBzeXN0ZW1zLgorCitIYXZpbmcgdGhlIGRldmljZSByZXBvcnQgRVZfUkVMIGJ1dHRvbnMgaXMgYXMgc2ltcGxlIGFzIHdpdGggRVZfS0VZLCBzaW1wbHkKK3NldCB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFuZCBjYWxsIHRoZQorCisJaW5wdXRfcmVwb3J0X3JlbChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBjb2RlLCBpbnQgdmFsdWUpCisKK2Z1bmN0aW9uLiBFdmVudHMgYXJlIGdlbmVyYXRlZCBvbmx5IGZvciBub256ZXJvIHZhbHVlLiAKKworSG93ZXZlciBFVl9BQlMgcmVxdWlyZXMgYSBsaXR0bGUgc3BlY2lhbCBjYXJlLiBCZWZvcmUgY2FsbGluZworaW5wdXRfcmVnaXN0ZXJfZGV2aWNlLCB5b3UgaGF2ZSB0byBmaWxsIGFkZGl0aW9uYWwgZmllbGRzIGluIHRoZSBpbnB1dF9kZXYKK3N0cnVjdCBmb3IgZWFjaCBhYnNvbHV0ZSBheGlzIHlvdXIgZGV2aWNlIGhhcy4gSWYgb3VyIGJ1dHRvbiBkZXZpY2UgaGFkIGFsc28KK3RoZSBBQlNfWCBheGlzOgorCisJYnV0dG9uX2Rldi5hYnNtaW5bQUJTX1hdID0gMDsKKwlidXR0b25fZGV2LmFic21heFtBQlNfWF0gPSAyNTU7CisJYnV0dG9uX2Rldi5hYnNmdXp6W0FCU19YXSA9IDQ7CisJYnV0dG9uX2Rldi5hYnNmbGF0W0FCU19YXSA9IDg7CisKK1RoaXMgc2V0dGluZyB3b3VsZCBiZSBhcHByb3ByaWF0ZSBmb3IgYSBqb3lzdGljayBYIGF4aXMsIHdpdGggdGhlIG1pbmltdW0gb2YKKzAsIG1heGltdW0gb2YgMjU1ICh3aGljaCB0aGUgam95c3RpY2sgKm11c3QqIGJlIGFibGUgdG8gcmVhY2gsIG5vIHByb2JsZW0gaWYKK2l0IHNvbWV0aW1lcyByZXBvcnRzIG1vcmUsIGJ1dCBpdCBtdXN0IGJlIGFibGUgdG8gYWx3YXlzIHJlYWNoIHRoZSBtaW4gYW5kCittYXggdmFsdWVzKSwgd2l0aCBub2lzZSBpbiB0aGUgZGF0YSB1cCB0byArLSA0LCBhbmQgd2l0aCBhIGNlbnRlciBmbGF0Citwb3NpdGlvbiBvZiBzaXplIDguCisKK0lmIHlvdSBkb24ndCBuZWVkIGFic2Z1enogYW5kIGFic2ZsYXQsIHlvdSBjYW4gc2V0IHRoZW0gdG8gemVybywgd2hpY2ggbWVhbgordGhhdCB0aGUgdGhpbmcgaXMgcHJlY2lzZSBhbmQgYWx3YXlzIHJldHVybnMgdG8gZXhhY3RseSB0aGUgY2VudGVyIHBvc2l0aW9uCisoaWYgaXQgaGFzIGFueSkuCisKKzEuNCBUaGUgdm9pZCAqcHJpdmF0ZSBmaWVsZAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgZmllbGQgaW4gdGhlIGlucHV0IHN0cnVjdHVyZSBjYW4gYmUgdXNlZCB0byBwb2ludCB0byBhbnkgcHJpdmF0ZSBkYXRhCitzdHJ1Y3R1cmVzIGluIHRoZSBpbnB1dCBkZXZpY2UgZHJpdmVyLCBpbiBjYXNlIHRoZSBkcml2ZXIgaGFuZGxlcyBtb3JlIHRoYW4KK29uZSBkZXZpY2UuIFlvdSdsbCBuZWVkIGl0IGluIHRoZSBvcGVuIGFuZCBjbG9zZSBjYWxsYmFja3MuCisKKzEuNSBOQklUUygpLCBMT05HKCksIEJJVCgpCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVzZSB0aHJlZSBtYWNyb3MgZnJvbSBpbnB1dC5oIGhlbHAgc29tZSBiaXRmaWVsZCBjb21wdXRhdGlvbnM6CisKKwlOQklUUyh4KSAtIHJldHVybnMgdGhlIGxlbmd0aCBvZiBhIGJpdGZpZWxkIGFycmF5IGluIGxvbmdzIGZvciB4IGJpdHMKKwlMT05HKHgpICAtIHJldHVybnMgdGhlIGluZGV4IGluIHRoZSBhcnJheSBpbiBsb25ncyBmb3IgYml0IHgKKwlCSVQoeCkgICAtIHJldHVybnMgdGhlIGluZGV4IGluIGEgbG9uZyBmb3IgYml0IHgKKworMS42IFRoZSBudW1iZXIsIGlkKiBhbmQgbmFtZSBmaWVsZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBkZXYtPm51bWJlciBpcyBhc3NpZ25lZCBieSB0aGUgaW5wdXQgc3lzdGVtIHRvIHRoZSBpbnB1dCBkZXZpY2Ugd2hlbiBpdAoraXMgcmVnaXN0ZXJlZC4gSXQgaGFzIG5vIHVzZSBleGNlcHQgZm9yIGlkZW50aWZ5aW5nIHRoZSBkZXZpY2UgdG8gdGhlIHVzZXIKK2luIHN5c3RlbSBtZXNzYWdlcy4KKworVGhlIGRldi0+bmFtZSBzaG91bGQgYmUgc2V0IGJlZm9yZSByZWdpc3RlcmluZyB0aGUgaW5wdXQgZGV2aWNlIGJ5IHRoZSBpbnB1dAorZGV2aWNlIGRyaXZlci4gSXQncyBhIHN0cmluZyBsaWtlICdHZW5lcmljIGJ1dHRvbiBkZXZpY2UnIGNvbnRhaW5pbmcgYQordXNlciBmcmllbmRseSBuYW1lIG9mIHRoZSBkZXZpY2UuCisKK1RoZSBpZCogZmllbGRzIGNvbnRhaW4gdGhlIGJ1cyBJRCAoUENJLCBVU0IsIC4uLiksIHZlbmRvciBJRCBhbmQgZGV2aWNlIElECitvZiB0aGUgZGV2aWNlLiBUaGUgYnVzIElEcyBhcmUgZGVmaW5lZCBpbiBpbnB1dC5oLiBUaGUgdmVuZG9yIGFuZCBkZXZpY2UgaWRzCithcmUgZGVmaW5lZCBpbiBwY2lfaWRzLmgsIHVzYl9pZHMuaCBhbmQgc2ltaWxhciBpbmNsdWRlIGZpbGVzLiBUaGVzZSBmaWVsZHMKK3Nob3VsZCBiZSBzZXQgYnkgdGhlIGlucHV0IGRldmljZSBkcml2ZXIgYmVmb3JlIHJlZ2lzdGVyaW5nIGl0LgorCitUaGUgaWR0eXBlIGZpZWxkIGNhbiBiZSB1c2VkIGZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgdGhlIGlucHV0IGRldmljZQorZHJpdmVyLgorCitUaGUgaWQgYW5kIG5hbWUgZmllbGRzIGNhbiBiZSBwYXNzZWQgdG8gdXNlcmxhbmQgdmlhIHRoZSBldmRldiBpbnRlcmZhY2UuCisKKzEuNyBUaGUga2V5Y29kZSwga2V5Y29kZW1heCwga2V5Y29kZXNpemUgZmllbGRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgdHdvIGZpZWxkcyB3aWxsIGJlIHVzZWQgZm9yIGFueSBpbnB1dCBkZXZpY2VzIHRoYXQgcmVwb3J0IHRoZWlyIGRhdGEKK2FzIHNjYW5jb2Rlcy4gSWYgbm90IGFsbCBzY2FuY29kZXMgY2FuIGJlIGtub3duIGJ5IGF1dG9kZXRlY3Rpb24sIHRoZXkgbWF5CituZWVkIHRvIGJlIHNldCBieSB1c2VybGFuZCB1dGlsaXRpZXMuIFRoZSBrZXljb2RlIGFycmF5IHRoZW4gaXMgYW4gYXJyYXkKK3VzZWQgdG8gbWFwIGZyb20gc2NhbmNvZGVzIHRvIGlucHV0IHN5c3RlbSBrZXljb2Rlcy4gVGhlIGtleWNvZGUgbWF4IHdpbGwKK2NvbnRhaW4gdGhlIHNpemUgb2YgdGhlIGFycmF5IGFuZCBrZXljb2Rlc2l6ZSB0aGUgc2l6ZSBvZiBlYWNoIGVudHJ5IGluIGl0CisoaW4gYnl0ZXMpLgorCisxLjggS2V5IGF1dG9yZXBlYXQKK35+fn5+fn5+fn5+fn5+fn5+fgorCisuLi4gaXMgc2ltcGxlLiBJdCBpcyBoYW5kbGVkIGJ5IHRoZSBpbnB1dC5jIG1vZHVsZS4gSGFyZHdhcmUgYXV0b3JlcGVhdCBpcworbm90IHVzZWQsIGJlY2F1c2UgaXQncyBub3QgcHJlc2VudCBpbiBtYW55IGRldmljZXMgYW5kIGV2ZW4gd2hlcmUgaXQgaXMKK3ByZXNlbnQsIGl0IGlzIGJyb2tlbiBzb21ldGltZXMgKGF0IGtleWJvYXJkczogVG9zaGliYSBub3RlYm9va3MpLiBUbyBlbmFibGUKK2F1dG9yZXBlYXQgZm9yIHlvdXIgZGV2aWNlLCBqdXN0IHNldCBFVl9SRVAgaW4gZGV2LT5ldmJpdC4gQWxsIHdpbGwgYmUKK2hhbmRsZWQgYnkgdGhlIGlucHV0IHN5c3RlbS4KKworMS45IE90aGVyIGV2ZW50IHR5cGVzLCBoYW5kbGluZyBvdXRwdXQgZXZlbnRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIG90aGVyIGV2ZW50IHR5cGVzIHVwIHRvIG5vdyBhcmU6CisKK0VWX0xFRCAtIHVzZWQgZm9yIHRoZSBrZXlib2FyZCBMRURzLgorRVZfU05EIC0gdXNlZCBmb3Iga2V5Ym9hcmQgYmVlcHMuCisKK1RoZXkgYXJlIHZlcnkgc2ltaWxhciB0byBmb3IgZXhhbXBsZSBrZXkgZXZlbnRzLCBidXQgdGhleSBnbyBpbiB0aGUgb3RoZXIKK2RpcmVjdGlvbiAtIGZyb20gdGhlIHN5c3RlbSB0byB0aGUgaW5wdXQgZGV2aWNlIGRyaXZlci4gSWYgeW91ciBpbnB1dCBkZXZpY2UKK2RyaXZlciBjYW4gaGFuZGxlIHRoZXNlIGV2ZW50cywgaXQgaGFzIHRvIHNldCB0aGUgcmVzcGVjdGl2ZSBiaXRzIGluIGV2Yml0LAorKmFuZCogYWxzbyB0aGUgY2FsbGJhY2sgcm91dGluZToKKworCWJ1dHRvbl9kZXYuZXZlbnQgPSBidXR0b25fZXZlbnQ7CisKK2ludCBidXR0b25fZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSk7Cit7CisJaWYgKHR5cGUgPT0gRVZfU05EICYmIGNvZGUgPT0gU05EX0JFTEwpIHsKKwkJb3V0Yih2YWx1ZSwgQlVUVE9OX0JFTEwpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitUaGlzIGNhbGxiYWNrIHJvdXRpbmUgY2FuIGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBvciBhIEJIIChhbHRob3VnaCB0aGF0Citpc24ndCBhIHJ1bGUpLCBhbmQgdGh1cyBtdXN0IG5vdCBzbGVlcCwgYW5kIG11c3Qgbm90IHRha2UgdG9vIGxvbmcgdG8gZmluaXNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzEzN2U3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC50eHQKQEAgLTAsMCArMSwzMTIgQEAKKwkJCSAgTGludXggSW5wdXQgZHJpdmVycyB2MS4wCisJICAgICAgIChjKSAxOTk5LTIwMDEgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PgorCQkJICAgICBTcG9uc29yZWQgYnkgU3VTRQorCSAgICAkSWQ6IGlucHV0LnR4dCx2IDEuOCAyMDAyLzA1LzI5IDAzOjE1OjAxIGJyYWRsZXltIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzAuIERpc2NsYWltZXIKK35+fn5+fn5+fn5+fn4KKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCit3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworICBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkgZS1tYWlsCistIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHVjdy5jej4sIG9yIGJ5IHBhcGVyIG1haWw6IFZvanRlY2ggUGF2bGlrLAorU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKworICBGb3IgeW91ciBjb252ZW5pZW5jZSwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBpcyBpbmNsdWRlZAoraW4gdGhlIHBhY2thZ2U6IFNlZSB0aGUgZmlsZSBDT1BZSU5HLgorCisxLiBJbnRyb2R1Y3Rpb24KK35+fn5+fn5+fn5+fn5+fgorICBUaGlzIGlzIGEgY29sbGVjdGlvbiBvZiBkcml2ZXJzIHRoYXQgaXMgZGVzaWduZWQgdG8gc3VwcG9ydCBhbGwgaW5wdXQKK2RldmljZXMgdW5kZXIgTGludXguIFdoaWxlIGl0IGlzIGN1cnJlbnRseSB1c2VkIG9ubHkgb24gZm9yIFVTQiBpbnB1dAorZGV2aWNlcywgZnV0dXJlIHVzZSAoc2F5IDIuNS8yLjYpIGlzIGV4cGVjdGVkIHRvIGV4cGFuZCB0byByZXBsYWNlCittb3N0IG9mIHRoZSBleGlzdGluZyBpbnB1dCBzeXN0ZW0sIHdoaWNoIGlzIHdoeSBpdCBsaXZlcyBpbgorZHJpdmVycy9pbnB1dC8gaW5zdGVhZCBvZiBkcml2ZXJzL3VzYi8uCisKKyAgVGhlIGNlbnRyZSBvZiB0aGUgaW5wdXQgZHJpdmVycyBpcyB0aGUgaW5wdXQgbW9kdWxlLCB3aGljaCBtdXN0IGJlCitsb2FkZWQgYmVmb3JlIGFueSBvdGhlciBvZiB0aGUgaW5wdXQgbW9kdWxlcyAtIGl0IHNlcnZlcyBhcyBhIHdheSBvZgorY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHR3byBncm91cHMgb2YgbW9kdWxlczoKKworMS4xIERldmljZSBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlc2UgbW9kdWxlcyB0YWxrIHRvIHRoZSBoYXJkd2FyZSAoZm9yIGV4YW1wbGUgdmlhIFVTQiksIGFuZCBwcm92aWRlCitldmVudHMgKGtleXN0cm9rZXMsIG1vdXNlIG1vdmVtZW50cykgdG8gdGhlIGlucHV0IG1vZHVsZS4KKworMS4yIEV2ZW50IGhhbmRsZXJzCit+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlc2UgbW9kdWxlcyBnZXQgZXZlbnRzIGZyb20gaW5wdXQgYW5kIHBhc3MgdGhlbSB3aGVyZSBuZWVkZWQgdmlhCit2YXJpb3VzIGludGVyZmFjZXMgLSBrZXlzdHJva2VzIHRvIHRoZSBrZXJuZWwsIG1vdXNlIG1vdmVtZW50cyB2aWEgYQorc2ltdWxhdGVkIFBTLzIgaW50ZXJmYWNlIHRvIEdQTSBhbmQgWCBhbmQgc28gb24uCisKKzIuIFNpbXBsZSBVc2FnZQorfn5+fn5+fn5+fn5+fn5+CisgIEZvciB0aGUgbW9zdCB1c3VhbCBjb25maWd1cmF0aW9uLCB3aXRoIG9uZSBVU0IgbW91c2UgYW5kIG9uZSBVU0Iga2V5Ym9hcmQsCit5b3UnbGwgaGF2ZSB0byBsb2FkIHRoZSBmb2xsb3dpbmcgbW9kdWxlcyAob3IgaGF2ZSB0aGVtIGJ1aWx0IGluIHRvIHRoZQora2VybmVsKToKKworCWlucHV0CisJbW91c2VkZXYKKwlrZXliZGV2CisJdXNiY29yZQorCXVoY2lfaGNkIG9yIG9oY2lfaGNkIG9yIGVoY2lfaGNkCisJdXNiaGlkCisKKyAgQWZ0ZXIgdGhpcywgdGhlIFVTQiBrZXlib2FyZCB3aWxsIHdvcmsgc3RyYWlnaHQgYXdheSwgYW5kIHRoZSBVU0IgbW91c2UKK3dpbGwgYmUgYXZhaWxhYmxlIGFzIGEgY2hhcmFjdGVyIGRldmljZSBvbiBtYWpvciAxMywgbWlub3IgNjM6CisKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICA2MyBNYXIgMjggMjI6NDUgbWljZQorCisgIFRoaXMgZGV2aWNlIGhhcyB0byBiZSBjcmVhdGVkLCB1bmxlc3MgeW91IHVzZSBkZXZmcywgaW4gd2hpY2ggY2FzZSBpdCdzCitjcmVhdGVkIGF1dG9tYXRpY2FsbHkuIFRoZSBjb21tYW5kcyB0byBkbyBjcmVhdGUgaXQgYnkgaGFuZCBhcmU6CisKKwljZCAvZGV2CisJbWtkaXIgaW5wdXQKKwlta25vZCBpbnB1dC9taWNlIGMgMTMgNjMKKworICBBZnRlciB0aGF0IHlvdSBoYXZlIHRvIHBvaW50IEdQTSAodGhlIHRleHRtb2RlIG1vdXNlIGN1dCZwYXN0ZSB0b29sKSBhbmQKK1hGcmVlIHRvIHRoaXMgZGV2aWNlIHRvIHVzZSBpdCAtIEdQTSBzaG91bGQgYmUgY2FsbGVkIGxpa2U6CisKKwlncG0gLXQgcHMyIC1tIC9kZXYvaW5wdXQvbWljZQorCisgIEFuZCBpbiBYOgorCisJU2VjdGlvbiAiUG9pbnRlciIKKwkgICAgUHJvdG9jb2wgICAgIkltUFMvMiIKKwkgICAgRGV2aWNlICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKwkgICAgWkF4aXNNYXBwaW5nIDQgNQorCUVuZFNlY3Rpb24KKworICBXaGVuIHlvdSBkbyBhbGwgb2YgdGhlIGFib3ZlLCB5b3UgY2FuIHVzZSB5b3VyIFVTQiBtb3VzZSBhbmQga2V5Ym9hcmQuCisKKzMuIERldGFpbGVkIERlc2NyaXB0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorMy4xIERldmljZSBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn4KKyAgRGV2aWNlIGRyaXZlcnMgYXJlIHRoZSBtb2R1bGVzIHRoYXQgZ2VuZXJhdGUgZXZlbnRzLiBUaGUgZXZlbnRzIGFyZQoraG93ZXZlciBub3QgdXNlZnVsIHdpdGhvdXQgYmVpbmcgaGFuZGxlZCwgc28geW91IGFsc28gd2lsbCBuZWVkIHRvIHVzZSBzb21lCitvZiB0aGUgbW9kdWxlcyBmcm9tIHNlY3Rpb24gMy4yLgorCiszLjEuMSB1c2JoaWQKK35+fn5+fn5+fn5+fgorICB1c2JoaWQgaXMgdGhlIGxhcmdlc3QgYW5kIG1vc3QgY29tcGxleCBkcml2ZXIgb2YgdGhlIHdob2xlIHN1aXRlLiBJdAoraGFuZGxlcyBhbGwgSElEIGRldmljZXMsIGFuZCBiZWNhdXNlIHRoZXJlIGlzIGEgdmVyeSB3aWRlIHZhcmlldHkgb2YgdGhlbSwKK2FuZCBiZWNhdXNlIHRoZSBVU0IgSElEIHNwZWNpZmljYXRpb24gaXNuJ3Qgc2ltcGxlLCBpdCBuZWVkcyB0byBiZSB0aGlzIGJpZy4KKworICBDdXJyZW50bHksIGl0IGhhbmRsZXMgVVNCIG1pY2UsIGpveXN0aWNrcywgZ2FtZXBhZHMsIHN0ZWVyaW5nIHdoZWVscwora2V5Ym9hcmRzLCB0cmFja2JhbGxzIGFuZCBkaWdpdGl6ZXJzLgorCisgSG93ZXZlciwgVVNCIHVzZXMgSElEIGFsc28gZm9yIG1vbml0b3IgY29udHJvbHMsIHNwZWFrZXIgY29udHJvbHMsIFVQU3MsCitMQ0RzIGFuZCBtYW55IG90aGVyIHB1cnBvc2VzLgorCisgVGhlIG1vbml0b3IgYW5kIHNwZWFrZXIgY29udHJvbHMgc2hvdWxkIGJlIGVhc3kgdG8gYWRkIHRvIHRoZSBoaWQvaW5wdXQKK2ludGVyZmFjZSwgYnV0IGZvciB0aGUgVVBTcyBhbmQgTENEcyBpdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4gRm9yIHRoaXMsCit0aGUgaGlkZGV2IGludGVyZmFjZSB3YXMgZGVzaWduZWQuIFNlZSBEb2N1bWVudGF0aW9uL3VzYi9oaWRkZXYudHh0Citmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBpdC4KKworICBUaGUgdXNhZ2Ugb2YgdGhlIHVzYmhpZCBtb2R1bGUgaXMgdmVyeSBzaW1wbGUsIGl0IHRha2VzIG5vIHBhcmFtZXRlcnMsCitkZXRlY3RzIGV2ZXJ5dGhpbmcgYXV0b21hdGljYWxseSBhbmQgd2hlbiBhIEhJRCBkZXZpY2UgaXMgaW5zZXJ0ZWQsIGl0CitkZXRlY3RzIGl0IGFwcHJvcHJpYXRlbHkuCisKKyAgSG93ZXZlciwgYmVjYXVzZSB0aGUgZGV2aWNlcyB2YXJ5IHdpbGRseSwgeW91IG1pZ2h0IGhhcHBlbiB0byBoYXZlIGEKK2RldmljZSB0aGF0IGRvZXNuJ3Qgd29yayB3ZWxsLiBJbiB0aGF0IGNhc2UgI2RlZmluZSBERUJVRyBhdCB0aGUgYmVnaW5uaW5nCitvZiBoaWQtY29yZS5jIGFuZCBzZW5kIG1lIHRoZSBzeXNsb2cgdHJhY2VzLgorCiszLjEuMiB1c2Jtb3VzZQorfn5+fn5+fn5+fn5+fn4KKyAgRm9yIGVtYmVkZGVkIHN5c3RlbXMsIGZvciBtaWNlIHdpdGggYnJva2VuIEhJRCBkZXNjcmlwdG9ycyBhbmQganVzdCBhbnkKK290aGVyIHVzZSB3aGVuIHRoZSBiaWcgdXNiaGlkIHdvdWxkbid0IGJlIGEgZ29vZCBjaG9pY2UsIHRoZXJlIGlzIHRoZQordXNibW91c2UgZHJpdmVyLiBJdCBoYW5kbGVzIFVTQiBtaWNlIG9ubHkuIEl0IHVzZXMgYSBzaW1wbGVyIEhJREJQCitwcm90b2NvbC4gVGhpcyBhbHNvIG1lYW5zIHRoZSBtaWNlIG11c3Qgc3VwcG9ydCB0aGlzIHNpbXBsZXIgcHJvdG9jb2wuIE5vdAorYWxsIGRvLiBJZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgc3Ryb25nIHJlYXNvbiB0byB1c2UgdGhpcyBtb2R1bGUsIHVzZSB1c2JoaWQKK2luc3RlYWQuCisKKzMuMS4zIHVzYmtiZAorfn5+fn5+fn5+fn5+CisgIE11Y2ggbGlrZSB1c2Jtb3VzZSwgdGhpcyBtb2R1bGUgdGFsa3MgdG8ga2V5Ym9hcmRzIHdpdGggYSBzaW1wbGlmaWVkCitISURCUCBwcm90b2NvbC4gSXQncyBzbWFsbGVyLCBidXQgZG9lc24ndCBzdXBwb3J0IGFueSBleHRyYSBzcGVjaWFsIGtleXMuCitVc2UgdXNiaGlkIGluc3RlYWQgaWYgdGhlcmUgaXNuJ3QgYW55IHNwZWNpYWwgcmVhc29uIHRvIHVzZSB0aGlzLgorCiszLjEuNCB3YWNvbQorfn5+fn5+fn5+fn4KKyAgVGhpcyBpcyBhIGRyaXZlciBmb3IgV2Fjb20gR3JhcGhpcmUgYW5kIEludHVvcyB0YWJsZXRzLiBOb3QgZm9yIFdhY29tCitQZW5QYXJ0bmVyLCB0aGF0IG9uZSBpcyBoYW5kbGVkIGJ5IHRoZSBISUQgZHJpdmVyLiBBbHRob3VnaCB0aGUgSW50dW9zIGFuZAorR3JhcGhpcmUgdGFibGV0cyBjbGFpbSB0aGF0IHRoZXkgYXJlIEhJRCB0YWJsZXRzIGFzIHdlbGwsIHRoZXkgYXJlIG5vdCBhbmQKK3RodXMgbmVlZCB0aGlzIHNwZWNpZmljIGRyaXZlci4KKworMy4xLjUgaWZvcmNlCit+fn5+fn5+fn5+fn4KKyAgQSBkcml2ZXIgZm9yIEktRm9yY2Ugam95c3RpY2tzIGFuZCB3aGVlbHMsIGJvdGggb3ZlciBVU0IgYW5kIFJTMjMyLiAKK0l0IGluY2x1ZGVzIEZvcmNlRmVlZGJhY2sgc3VwcG9ydCBub3csIGV2ZW4gdGhvdWdoIEltbWVyc2lvbgorQ29ycC4gY29uc2lkZXJzIHRoZSBwcm90b2NvbCBhIHRyYWRlIHNlY3JldCBhbmQgd29uJ3QgZGlzY2xvc2UgYSB3b3JkCithYm91dCBpdC4gCisKKzMuMiBFdmVudCBoYW5kbGVycworfn5+fn5+fn5+fn5+fn5+fn5+CisgIEV2ZW50IGhhbmRsZXJzIGRpc3RydWJpdGUgdGhlIGV2ZW50cyBmcm9tIHRoZSBkZXZpY2VzIHRvIHVzZXJsYW5kIGFuZAora2VybmVsLCBhcyBuZWVkZWQuCisKKzMuMi4xIGtleWJkZXYKK35+fn5+fn5+fn5+fn4KKyAga2V5YmRldiBpcyBjdXJyZW50bHkgYSByYXRoZXIgdWdseSBoYWNrIHRoYXQgdHJhbnNsYXRlcyB0aGUgaW5wdXQKK2V2ZW50cyBpbnRvIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXlib2FyZCByYXcgbW9kZSAoWGxhdGVkIEFUIFNldDIgb24KK3g4NiksIGFuZCBwYXNzZXMgdGhlbSBpbnRvIHRoZSBoYW5kbGVfc2NhbmNvZGUgZnVuY3Rpb24gb2YgdGhlCitrZXlib2FyZC5jIG1vZHVsZS4gVGhpcyB3b3JrcyB3ZWxsIGVub3VnaCBvbiBhbGwgYXJjaGl0ZWN0dXJlcyB0aGF0CitrZXliZGV2IGNhbiBnZW5lcmF0ZSByYXdtb2RlIG9uLCBvdGhlciBhcmNoaXRlY3R1cmVzIGNhbiBiZSBhZGRlZCB0bworaXQuCisKKyAgVGhlIHJpZ2h0IHdheSB3b3VsZCBiZSB0byBwYXNzIHRoZSBldmVudHMgdG8ga2V5Ym9hcmQuYyBkaXJlY3RseSwKK2Jlc3QgaWYga2V5Ym9hcmQuYyB3b3VsZCBpdHNlbGYgYmUgYW4gZXZlbnQgaGFuZGxlci4gVGhpcyBpcyBkb25lIGluCit0aGUgaW5wdXQgcGF0Y2gsIGF2YWlsYWJsZSBvbiB0aGUgd2VicGFnZSBtZW50aW9uZWQgYmVsb3cuIAorCiszLjIuMiBtb3VzZWRldgorfn5+fn5+fn5+fn5+fn4KKyAgbW91c2VkZXYgaXMgYWxzbyBhIGhhY2sgdG8gbWFrZSBwcm9ncmFtcyB0aGF0IHVzZSBtb3VzZSBpbnB1dAord29yay4gSXQgdGFrZXMgZXZlbnRzIGZyb20gZWl0aGVyIG1pY2Ugb3IgZGlnaXRpemVycy90YWJsZXRzIGFuZCBtYWtlcworYSBQUy8yLXN0eWxlIChhIGxhIC9kZXYvcHNhdXgpIG1vdXNlIGRldmljZSBhdmFpbGFibGUgdG8gdGhlCit1c2VybGFuZC4gSWRlYWxseSwgdGhlIHByb2dyYW1zIGNvdWxkIHVzZSBhIG1vcmUgcmVhc29uYWJsZSBpbnRlcmZhY2UsCitmb3IgZXhhbXBsZSBldmRldgorCisgIE1vdXNlZGV2IGRldmljZXMgaW4gL2Rldi9pbnB1dCAoYXMgc2hvd24gYWJvdmUpIGFyZToKKworCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgIDMyIE1hciAyOCAyMjo0NSBtb3VzZTAKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICAzMyBNYXIgMjkgMDA6NDEgbW91c2UxCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgMzQgTWFyIDI5IDAwOjQxIG1vdXNlMgorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgIDM1IEFwciAgMSAxMDo1MCBtb3VzZTMKKwkuLi4KKwkuLi4KKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICA2MiBBcHIgIDEgMTA6NTAgbW91c2UzMAorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgIDYzIEFwciAgMSAxMDo1MCBtaWNlCisKK0VhY2ggJ21vdXNlJyBkZXZpY2UgaXMgYXNzaWduZWQgdG8gYSBzaW5nbGUgbW91c2Ugb3IgZGlnaXRpemVyLCBleGNlcHQKK3RoZSBsYXN0IG9uZSAtICdtaWNlJy4gVGhpcyBzaW5nbGUgY2hhcmFjdGVyIGRldmljZSBpcyBzaGFyZWQgYnkgYWxsCittaWNlIGFuZCBkaWdpdGl6ZXJzLCBhbmQgZXZlbiBpZiBub25lIGFyZSBjb25uZWN0ZWQsIHRoZSBkZXZpY2UgaXMKK3ByZXNlbnQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgaG90cGx1Z2dpbmcgVVNCIG1pY2UsIHNvIHRoYXQgcHJvZ3JhbXMKK2NhbiBvcGVuIHRoZSBkZXZpY2UgZXZlbiB3aGVuIG5vIG1pY2UgYXJlIHByZXNlbnQuCisKKyAgQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9bWFldIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBhcmUKK3RoZSBzaXplIG9mIHlvdXIgc2NyZWVuIChpbiBwaXhlbHMpIGluIFhGcmVlODYuIFRoaXMgaXMgbmVlZGVkIGlmIHlvdQord2FudCB0byB1c2UgeW91ciBkaWdpdGl6ZXIgaW4gWCwgYmVjYXVzZSBpdHMgbW92ZW1lbnQgaXMgc2VudCB0byBYCit2aWEgYSB2aXJ0dWFsIFBTLzIgbW91c2UgYW5kIHRodXMgbmVlZHMgdG8gYmUgc2NhbGVkCithY2NvcmRpbmdseS4gVGhlc2UgdmFsdWVzIHdvbid0IGJlIHVzZWQgaWYgeW91IHVzZSBhIG1vdXNlIG9ubHkuCisKKyAgTW91c2VkZXYgd2lsbCBnZW5lcmF0ZSBlaXRoZXIgUFMvMiwgSW1QUy8yIChNaWNyb3NvZnQgSW50ZWxsaU1vdXNlKSBvcgorRXhwbG9yZXJQUy8yIChJbnRlbGxpTW91c2UgRXhwbG9yZXIpIHByb3RvY29scywgZGVwZW5kaW5nIG9uIHdoYXQgdGhlCitwcm9ncmFtIHJlYWRpbmcgdGhlIGRhdGEgd2lzaGVzLiBZb3UgY2FuIHNldCBHUE0gYW5kIFggdG8gYW55IG9mCit0aGVzZS4gWW91J2xsIG5lZWQgSW1QUy8yIGlmIHlvdSB3YW50IHRvIG1ha2UgdXNlIG9mIGEgd2hlZWwgb24gYSBVU0IKK21vdXNlIGFuZCBFeHBsb3JlclBTLzIgaWYgeW91IHdhbnQgdG8gdXNlIGV4dHJhICh1cCB0byA1KSBidXR0b25zLiAKKworMy4yLjMgam95ZGV2Cit+fn5+fn5+fn5+fn4KKyAgSm95ZGV2IGltcGxlbWVudHMgdjAueCBhbmQgdjEueCBMaW51eCBqb3lzdGljayBhcGksIG11Y2ggbGlrZQorZHJpdmVycy9jaGFyL2pveXN0aWNrL2pveXN0aWNrLmMgdXNlZCB0byBpbiBlYXJsaWVyIHZlcnNpb25zLiBTZWUKK2pveXN0aWNrLWFwaS50eHQgaW4gdGhlIERvY3VtZW50YXRpb24gc3ViZGlyZWN0b3J5IGZvciBkZXRhaWxzLiAgQXMKK3Nvb24gYXMgYW55IGpveXN0aWNrIGlzIGNvbm5lY3RlZCwgaXQgY2FuIGJlIGFjY2Vzc2VkIGluIC9kZXYvaW5wdXQKK29uOiAKKworCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgICAwIEFwciAgMSAxMDo1MCBqczAKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICAgMSBBcHIgIDEgMTA6NTAganMxCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgIDIgQXByICAxIDEwOjUwIGpzMgorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgICAzIEFwciAgMSAxMDo1MCBqczMKKwkuLi4KKworQW5kIHNvIG9uIHVwIHRvIGpzMzEuCisKKzMuMi40IGV2ZGV2Cit+fn5+fn5+fn5+fgorICBldmRldiBpcyB0aGUgZ2VuZXJpYyBpbnB1dCBldmVudCBpbnRlcmZhY2UuIEl0IHBhc3NlcyB0aGUgZXZlbnRzCitnZW5lcmF0ZWQgaW4gdGhlIGtlcm5lbCBzdHJhaWdodCB0byB0aGUgcHJvZ3JhbSwgd2l0aCB0aW1lc3RhbXBzLiBUaGUKK0FQSSBpcyBzdGlsbCBldm9sdmluZywgYnV0IHNob3VsZCBiZSB1c2VhYmxlIG5vdy4gSXQncyBkZXNjcmliZWQgaW4KK3NlY3Rpb24gNS4gCisKKyAgVGhpcyBzaG91bGQgYmUgdGhlIHdheSBmb3IgR1BNIGFuZCBYIHRvIGdldCBrZXlib2FyZCBhbmQgbW91c2UgbW91c2UKK2V2ZW50cy4gSXQgYWxsb3dzIGZvciBtdWx0aWhlYWQgaW4gWCB3aXRob3V0IGFueSBzcGVjaWZpYyBtdWx0aWhlYWQKK2tlcm5lbCBzdXBwb3J0LiBUaGUgZXZlbnQgY29kZXMgYXJlIHRoZSBzYW1lIG9uIGFsbCBhcmNoaXRlY3R1cmVzIGFuZAorYXJlIGhhcmR3YXJlIGluZGVwZW5kZW50LgorCisgIFRoZSBkZXZpY2VzIGFyZSBpbiAvZGV2L2lucHV0OgorCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgNjQgQXByICAxIDEwOjQ5IGV2ZW50MAorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgIDY1IEFwciAgMSAxMDo1MCBldmVudDEKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICA2NiBBcHIgIDEgMTA6NTAgZXZlbnQyCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgNjcgQXByICAxIDEwOjUwIGV2ZW50MworCS4uLgorCitBbmQgc28gb24gdXAgdG8gZXZlbnQzMS4KKworNC4gVmVyaWZ5aW5nIGlmIGl0IHdvcmtzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVHlwaW5nIGEgY291cGxlIGtleXMgb24gdGhlIGtleWJvYXJkIHNob3VsZCBiZSBlbm91Z2ggdG8gY2hlY2sgdGhhdAorYSBVU0Iga2V5Ym9hcmQgd29ya3MgYW5kIGlzIGNvcnJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIGtlcm5lbCBrZXlib2FyZAorZHJpdmVyLiAKKworICBEb2luZyBhIGNhdCAvZGV2L2lucHV0L21vdXNlMCAoYywgMTMsIDMyKSB3aWxsIHZlcmlmeSB0aGF0IGEgbW91c2UKK2lzIGFsc28gZW11bGF0ZWQsIGNoYXJhY3RlcnMgc2hvdWxkIGFwcGVhciBpZiB5b3UgbW92ZSBpdC4KKworICBZb3UgY2FuIHRlc3QgdGhlIGpveXN0aWNrIGVtdWxhdGlvbiB3aXRoIHRoZSAnanN0ZXN0JyB1dGlsaXR5LAorYXZhaWxhYmxlIGluIHRoZSBqb3lzdGljayBwYWNrYWdlIChzZWUgRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay50eHQpLgorCisgIFlvdSBjYW4gdGVzdCB0aGUgZXZlbnQgZGV2aWNlcyB3aXRoIHRoZSAnZXZ0ZXN0JyB1dGlsaXR5IGF2YWlsYWJsZQoraW4gdGhlIExpbnV4Q29uc29sZSBwcm9qZWN0IENWUyBhcmNoaXZlIChzZWUgdGhlIFVSTCBiZWxvdykuCisKKzUuIEV2ZW50IGludGVyZmFjZQorfn5+fn5+fn5+fn5+fn5+fn5+CisgIFNob3VsZCB5b3Ugd2FudCB0byBhZGQgZXZlbnQgZGV2aWNlIHN1cHBvcnQgaW50byBhbnkgYXBwbGljYXRpb24gKFgsIGdwbSwKK3N2Z2FsaWIgLi4uKSBJIDx2b2p0ZWNoQHVjdy5jej4gd2lsbCBiZSBoYXBweSB0byBwcm92aWRlIHlvdSBhbnkgaGVscCBJCitjYW4uIEhlcmUgZ29lcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncywgd2hpY2ggaXMgZ29pbmcKK3RvIGJlIGV4dGVuZGVkLCBidXQgbm90IGNoYW5nZWQgaW5jb21wYXRpYmx5IGFzIHRpbWUgZ29lczoKKworICBZb3UgY2FuIHVzZSBibG9ja2luZyBhbmQgbm9uYmxvY2tpbmcgcmVhZHMsIGFsc28gc2VsZWN0KCkgb24gdGhlCisvZGV2L2lucHV0L2V2ZW50WCBkZXZpY2VzLCBhbmQgeW91J2xsIGFsd2F5cyBnZXQgYSB3aG9sZSBudW1iZXIgb2YgaW5wdXQKK2V2ZW50cyBvbiBhIHJlYWQuIFRoZWlyIGxheW91dCBpczoKKworc3RydWN0IGlucHV0X2V2ZW50IHsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lOworCXVuc2lnbmVkIHNob3J0IHR5cGU7CisJdW5zaWduZWQgc2hvcnQgY29kZTsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7Cit9OworCisgICd0aW1lJyBpcyB0aGUgdGltZXN0YW1wLCBpdCByZXR1cm5zIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBldmVudCBoYXBwZW5lZC4KK1R5cGUgaXMgZm9yIGV4YW1wbGUgRVZfUkVMIGZvciByZWxhdGl2ZSBtb21lbWVudCwgUkVMX0tFWSBmb3IgYSBrZXlwcmVzcyBvcgorcmVsZWFzZS4gTW9yZSB0eXBlcyBhcmUgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2lucHV0LmguCisKKyAgJ2NvZGUnIGlzIGV2ZW50IGNvZGUsIGZvciBleGFtcGxlIFJFTF9YIG9yIEtFWV9CQUNLU1BBQ0UsIGFnYWluIGEgY29tcGxldGUKK2xpc3QgaXMgaW4gaW5jbHVkZS9saW51eC9pbnB1dC5oLgorCisgICd2YWx1ZScgaXMgdGhlIHZhbHVlIHRoZSBldmVudCBjYXJyaWVzLiBFaXRoZXIgYSByZWxhdGl2ZSBjaGFuZ2UgZm9yCitFVl9SRUwsIGFic29sdXRlIG5ldyB2YWx1ZSBmb3IgRVZfQUJTIChqb3lzdGlja3MgLi4uKSwgb3IgMCBmb3IgRVZfS0VZIGZvcgorcmVsZWFzZSwgMSBmb3Iga2V5cHJlc3MgYW5kIDIgZm9yIGF1dG9yZXBlYXQuCisKKzYuIENvbnRhY3RzCit+fn5+fn5+fn5+fgorICBUaGlzIGVmZm9ydCBoYXMgaXRzIGhvbWUgcGFnZSBhdDoKKworCWh0dHA6Ly93d3cuc3VzZS5jei9kZXZlbG9wbWVudC9pbnB1dC8KKworWW91J2xsIGZpbmQgYm90aCB0aGUgbGF0ZXN0IEhJRCBkcml2ZXIgYW5kIHRoZSBjb21wbGV0ZSBJbnB1dCBkcml2ZXIKK3RoZXJlIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gaG93IHRvIGFjY2VzcyB0aGUgQ1ZTIHJlcG9zaXRvcnkgZm9yCitsYXRlc3QgcmV2aXNpb25zIG9mIHRoZSBkcml2ZXJzLgorCisgIFRoZXJlIGlzIGFsc28gYSBtYWlsaW5nIGxpc3QgZm9yIHRoaXM6CisKKwltYWpvcmRvbW9AYXRyZXkua2FybGluLm1mZi5jdW5pLmN6CisKK1NlbmQgInN1YnNjcmliZSBsaW51eC1pbnB1dCIgdG8gc3Vic2NyaWJlIHRvIGl0LgorCitUaGUgaW5wdXQgY2hhbmdlcyBhcmUgYWxzbyBiZWluZyB3b3JrZWQgb24gYXMgcGFydCBvZiB0aGUgTGludXhDb25zb2xlCitwcm9qZWN0LCBzZWU6CisKKwkgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eGNvbnNvbGUvCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvaW50ZXJhY3RpdmUuZmlnIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnRlcmFjdGl2ZS5maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3ZGUzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvaW50ZXJhY3RpdmUuZmlnCkBAIC0wLDAgKzEsNDIgQEAKKyNGSUcgMy4yCitMYW5kc2NhcGUKK0NlbnRlcgorSW5jaGVzCitMZXR0ZXIgIAorMTAwLjAwCitTaW5nbGUKKy0yCisxMjAwIDIKKzIgMSAwIDIgMCA3IDUwIDAgLTEgNi4wMDAgMCAwIC0xIDAgMCA2CisJIDEyMDAgMzYwMCAxODAwIDM2MDAgMjQwMCA0ODAwIDMwMDAgNDgwMCA0MjAwIDU3MDAgNDgwMCA1NzAwCisyIDIgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgNQorCSAxMjAwIDMxNTAgNDgwMCAzMTUwIDQ4MDAgNjMwMCAxMjAwIDYzMDAgMTIwMCAzMTUwCisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSAxMjAwIDQ4MDAgNDgwMCA0ODAwCisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgNAorCSAyNDAwIDQ4MDAgMjQwMCA2NTI1IDE5NTAgNzEyNSAxOTUwIDc4MDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCA0CisJIDMwMDAgNDgwMCAzMDAwIDY1MjUgMzYwMCA3MTI1IDM2MDAgNzgwMAorMiAxIDAgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAxIDMKKwkwIDAgMS4wMCA2MC4wMCAxMjAuMDAKKwkgMzgyNSA1NDAwIDQxMjUgNTEwMCA1NDAwIDUxMDAKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMSAzCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJIDIxMDAgNDIwMCAyNDAwIDM5MDAgNTQwMCAzOTAwCisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSA0ODAwIDU3MDAgNTQwMCA1NzAwCisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSAxODAwIDM2MDAgNTQwMCAzNjAwCisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDEgMworCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCSAyNzAwIDQ4MDAgMjcwMCA0NDI1IDU0MDAgNDQyNQorMiAxIDAgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMSAxIDIKKwkwIDAgMS4wMCA2MC4wMCAxMjAuMDAKKwkwIDAgMS4wMCA2MC4wMCAxMjAuMDAKKwkgMTk1MCA3ODAwIDM2MDAgNzgwMAorNCAxIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDEzNSA4MTAgMjc3NSA3NzI1IERlYWQgYmFuZFwwMDEKKzQgMCAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxODAgMTE1NSA1NDAwIDU3MDAgcmlnaHQgc2F0dXJhdGlvblwwMDEKKzQgMCAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxMzUgMTA2NSA1NDAwIDM2MDAgbGVmdCBzYXR1cmF0aW9uXDAwMQorNCAwIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDE4MCAyNTA1IDU0MDAgMzkwMCBsZWZ0IGNvZWZmICggcG9zaXRpdmUgaW4gdGhhdCBjYXNlIClcMDAxCis0IDAgMCA1MCAwIDAgMTIgMC4wMDAwIDQgMTgwIDI2NDAgNTQ3NSA1MTAwIHJpZ2h0IGNvZWZmICggbmVnYXRpdmUgaW4gdGhhdCBjYXNlIClcMDAxCis0IDAgMCA1MCAwIDAgMTIgMC4wMDAwIDQgMTA1IDQ4MCA1NDAwIDQ0MjUgY2VudGVyXDAwMQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1hcGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYmQzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLWFwaS50eHQKQEAgLTAsMCArMSwzMTYgQEAKKwkJICAgICAgSm95c3RpY2sgQVBJIERvY3VtZW50YXRpb24gICAgICAgICAgICAgICAgLSotVGV4dC0qLQorCisJCSAgICAgICAgUmFnbmFyIEhvamxhbmQgRXNwaW5vc2EKKwkJCSAgPHJhZ25hckBtYWN1bGEubmV0PgorCisJCQkgICAgICA3IEF1ZyAxOTk4CisKKwkkSWQ6IGpveXN0aWNrLWFwaS50eHQsdiAxLjIgMjAwMS8wNS8wOCAyMToyMToyMyB2b2p0ZWNoIEV4cCAkCisKKzEuIEluaXRpYWxpemF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fgorCitPcGVuIHRoZSBqb3lzdGljayBkZXZpY2UgZm9sbG93aW5nIHRoZSB1c3VhbCBzZW1hbnRpY3MgKHRoYXQgaXMsIHdpdGggb3BlbikuCitTaW5jZSB0aGUgZHJpdmVyIG5vdyByZXBvcnRzIGV2ZW50cyBpbnN0ZWFkIG9mIHBvbGxpbmcgZm9yIGNoYW5nZXMsCitpbW1lZGlhdGVseSBhZnRlciB0aGUgb3BlbiBpdCB3aWxsIGlzc3VlIGEgc2VyaWVzIG9mIHN5bnRoZXRpYyBldmVudHMKKyhKU19FVkVOVF9JTklUKSB0aGF0IHlvdSBjYW4gcmVhZCB0byBjaGVjayB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUKK2pveXN0aWNrLgorCitCeSBkZWZhdWx0LCB0aGUgZGV2aWNlIGlzIG9wZW5lZCBpbiBibG9ja2luZyBtb2RlLgorCisJaW50IGZkID0gb3BlbiAoIi9kZXYvanMwIiwgT19SRE9OTFkpOworCisKKzIuIEV2ZW50IFJlYWRpbmcKK35+fn5+fn5+fn5+fn5+fn4KKworCXN0cnVjdCBqc19ldmVudCBlOworCXJlYWQgKGZkLCAmZSwgc2l6ZW9mKHN0cnVjdCBqc19ldmVudCkpOworCit3aGVyZSBqc19ldmVudCBpcyBkZWZpbmVkIGFzCisKKwlzdHJ1Y3QganNfZXZlbnQgeworCQlfX3UzMiB0aW1lOyAgICAgLyogZXZlbnQgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyAqLworCQlfX3MxNiB2YWx1ZTsgICAgLyogdmFsdWUgKi8KKwkJX191OCB0eXBlOyAgICAgIC8qIGV2ZW50IHR5cGUgKi8KKwkJX191OCBudW1iZXI7ICAgIC8qIGF4aXMvYnV0dG9uIG51bWJlciAqLworCX07CisKK0lmIHRoZSByZWFkIGlzIHN1Y2Nlc3NmdWwsIGl0IHdpbGwgcmV0dXJuIHNpemVvZihzdHJ1Y3QganNfZXZlbnQpLCB1bmxlc3MKK3lvdSB3YW50ZWQgdG8gcmVhZCBtb3JlIHRoYW4gb25lIGV2ZW50IHBlciByZWFkIGFzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMS4KKworCisyLjEganNfZXZlbnQudHlwZQorfn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBgYHR5cGUnJyBhcmUKKworCSNkZWZpbmUgSlNfRVZFTlRfQlVUVE9OICAgICAgICAgMHgwMSAgICAvKiBidXR0b24gcHJlc3NlZC9yZWxlYXNlZCAqLworCSNkZWZpbmUgSlNfRVZFTlRfQVhJUyAgICAgICAgICAgMHgwMiAgICAvKiBqb3lzdGljayBtb3ZlZCAqLworCSNkZWZpbmUgSlNfRVZFTlRfSU5JVCAgICAgICAgICAgMHg4MCAgICAvKiBpbml0aWFsIHN0YXRlIG9mIGRldmljZSAqLworCitBcyBtZW50aW9uZWQgYWJvdmUsIHRoZSBkcml2ZXIgd2lsbCBpc3N1ZSBzeW50aGV0aWMgSlNfRVZFTlRfSU5JVCBPUmVkCitldmVudHMgb24gb3Blbi4gVGhhdCBpcywgaWYgaXQncyBpc3N1aW5nIGEgSU5JVCBCVVRUT04gZXZlbnQsIHRoZQorY3VycmVudCB0eXBlIHZhbHVlIHdpbGwgYmUKKworCWludCB0eXBlID0gSlNfRVZFTlRfQlVUVE9OIHwgSlNfRVZFTlRfSU5JVDsJLyogMHg4MSAqLworCitJZiB5b3UgY2hvb3NlIG5vdCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gc3ludGhldGljIG9yIHJlYWwgZXZlbnRzCit5b3UgY2FuIHR1cm4gb2ZmIHRoZSBKU19FVkVOVF9JTklUIGJpdHMKKworCXR5cGUgJj0gfkpTX0VWRU5UX0lOSVQ7CQkJCS8qIDB4MDEgKi8KKworCisyLjIganNfZXZlbnQubnVtYmVyCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSB2YWx1ZXMgb2YgYGBudW1iZXInJyBjb3JyZXNwb25kIHRvIHRoZSBheGlzIG9yIGJ1dHRvbiB0aGF0CitnZW5lcmF0ZWQgdGhlIGV2ZW50LiBOb3RlIHRoYXQgdGhleSBjYXJyeSBzZXBhcmF0ZSBudW1lcmF0aW9uICh0aGF0CitpcywgeW91IGhhdmUgYm90aCBhbiBheGlzIDAgYW5kIGEgYnV0dG9uIDApLiBHZW5lcmFsbHksCisKKwkJCW51bWJlcgorCTFzdCBBeGlzIFgJMAorCTFzdCBBeGlzIFkJMQorCTJuZCBBeGlzIFgJMgorCTJuZCBBeGlzIFkJMworCS4uLmFuZCBzbyBvbgorCitIYXRzIHZhcnkgZnJvbSBvbmUgam95c3RpY2sgdHlwZSB0byBhbm90aGVyLiBTb21lIGNhbiBiZSBtb3ZlZCBpbiA4CitkaXJlY3Rpb25zLCBzb21lIG9ubHkgaW4gNCwgVGhlIGRyaXZlciwgaG93ZXZlciwgYWx3YXlzIHJlcG9ydHMgYSBoYXQgYXMgdHdvCitpbmRlcGVuZGVudCBheGlzLCBldmVuIGlmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGFsbG93IGluZGVwZW5kZW50IG1vdmVtZW50LgorCisKKzIuMyBqc19ldmVudC52YWx1ZQorfn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZvciBhbiBheGlzLCBgYHZhbHVlJycgaXMgYSBzaWduZWQgaW50ZWdlciBiZXR3ZWVuIC0zMjc2NyBhbmQgKzMyNzY3CityZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBqb3lzdGljayBhbG9uZyB0aGF0IGF4aXMuIElmIHlvdQorZG9uJ3QgcmVhZCBhIDAgd2hlbiB0aGUgam95c3RpY2sgaXMgYGRlYWQnLCBvciBpZiBpdCBkb2Vzbid0IHNwYW4gdGhlCitmdWxsIHJhbmdlLCB5b3Ugc2hvdWxkIHJlY2FsaWJyYXRlIGl0ICh3aXRoLCBmb3IgZXhhbXBsZSwganNjYWwpLgorCitGb3IgYSBidXR0b24sIGBgdmFsdWUnJyBmb3IgYSBwcmVzcyBidXR0b24gZXZlbnQgaXMgMSBhbmQgZm9yIGEgcmVsZWFzZQorYnV0dG9uIGV2ZW50IGlzIDAuCisKK1Rob3VnaCB0aGlzCisKKwlpZiAoanNfZXZlbnQudHlwZSA9PSBKU19FVkVOVF9CVVRUT04pIHsKKwkJYnV0dG9uc19zdGF0ZSBePSAoMSA8PCBqc19ldmVudC5udW1iZXIpOworCX0KKworbWF5IHdvcmsgd2VsbCBpZiB5b3UgaGFuZGxlIEpTX0VWRU5UX0lOSVQgZXZlbnRzIHNlcGFyYXRlbHksCisKKwlpZiAoKGpzX2V2ZW50LnR5cGUgJiB+SlNfRVZFTlRfSU5JVCkgPT0gSlNfRVZFTlRfQlVUVE9OKSB7CisJCWlmIChqc19ldmVudC52YWx1ZSkKKwkgICAgICAgIAlidXR0b25zX3N0YXRlIHw9ICgxIDw8IGpzX2V2ZW50Lm51bWJlcik7CisJICAgCWVsc2UKKwkgICAgICAJCWJ1dHRvbnNfc3RhdGUgJj0gfigxIDw8IGpzX2V2ZW50Lm51bWJlcik7CisJfQorCitpcyBtdWNoIHNhZmVyIHNpbmNlIGl0IGNhbid0IGxvc2Ugc3luYyB3aXRoIHRoZSBkcml2ZXIuIEFzIHlvdSB3b3VsZAoraGF2ZSB0byB3cml0ZSBhIHNlcGFyYXRlIGhhbmRsZXIgZm9yIEpTX0VWRU5UX0lOSVQgZXZlbnRzIGluIHRoZSBmaXJzdAorc25pcHBldCwgdGhpcyBlbmRzIHVwIGJlaW5nIHNob3J0ZXIuCisKKworMi40IGpzX2V2ZW50LnRpbWUKK35+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSB0aW1lIGFuIGV2ZW50IHdhcyBnZW5lcmF0ZWQgaXMgc3RvcmVkIGluIGBganNfZXZlbnQudGltZScnLiBJdCdzIGEgdGltZQoraW4gbWlsbGlzZWNvbmRzIHNpbmNlIC4uLiB3ZWxsLCBzaW5jZSBzb21ldGltZSBpbiB0aGUgcGFzdC4gIFRoaXMgZWFzZXMgdGhlCit0YXNrIG9mIGRldGVjdGluZyBkb3VibGUgY2xpY2tzLCBmaWd1cmluZyBvdXQgaWYgbW92ZW1lbnQgb2YgYXhpcyBhbmQgYnV0dG9uCitwcmVzc2VzIGhhcHBlbmVkIGF0IHRoZSBzYW1lIHRpbWUsIGFuZCBzaW1pbGFyLgorCisKKzMuIFJlYWRpbmcKK35+fn5+fn5+fn4KKworSWYgeW91IG9wZW4gdGhlIGRldmljZSBpbiBibG9ja2luZyBtb2RlLCBhIHJlYWQgd2lsbCBibG9jayAodGhhdCBpcywKK3dhaXQpIGZvcmV2ZXIgdW50aWwgYW4gZXZlbnQgaXMgZ2VuZXJhdGVkIGFuZCBlZmZlY3RpdmVseSByZWFkLiBUaGVyZQorYXJlIHR3byBhbHRlcm5hdGl2ZXMgaWYgeW91IGNhbid0IGFmZm9yZCB0byB3YWl0IGZvcmV2ZXIgKHdoaWNoIGlzLAorYWRtaXR0ZWRseSwgYSBsb25nIHRpbWU7KQorCisJYSkgdXNlIHNlbGVjdCB0byB3YWl0IHVudGlsIHRoZXJlJ3MgZGF0YSB0byBiZSByZWFkIG9uIGZkLCBvcgorCSAgIHVudGlsIGl0IHRpbWVvdXRzLiBUaGVyZSdzIGEgZ29vZCBleGFtcGxlIG9uIHRoZSBzZWxlY3QoMikKKwkgICBtYW4gcGFnZS4KKworCWIpIG9wZW4gdGhlIGRldmljZSBpbiBub24tYmxvY2tpbmcgbW9kZSAoT19OT05CTE9DSykKKworCiszLjEgT19OT05CTE9DSworfn5+fn5+fn5+fn5+fn4KKworSWYgcmVhZCByZXR1cm5zIC0xIHdoZW4gcmVhZGluZyBpbiBPX05PTkJMT0NLIG1vZGUsIHRoaXMgaXNuJ3QKK25lY2Vzc2FyaWx5IGEgInJlYWwiIGVycm9yIChjaGVjayBlcnJubygzKSk7IGl0IGNhbiBqdXN0IG1lYW4gdGhlcmUKK2FyZSBubyBldmVudHMgcGVuZGluZyB0byBiZSByZWFkIG9uIHRoZSBkcml2ZXIgcXVldWUuIFlvdSBzaG91bGQgcmVhZAorYWxsIGV2ZW50cyBvbiB0aGUgcXVldWUgKHRoYXQgaXMsIHVudGlsIHlvdSBnZXQgYSAtMSkuCisKK0ZvciBleGFtcGxlLAorCisJd2hpbGUgKDEpIHsKKwkJd2hpbGUgKHJlYWQgKGZkLCAmZSwgc2l6ZW9mKHN0cnVjdCBqc19ldmVudCkpID4gMCkgeworCSAgICAgICAgCXByb2Nlc3NfZXZlbnQgKGUpOworCSAgIAl9CisJICAgCS8qIEVBR0FJTiBpcyByZXR1cm5lZCB3aGVuIHRoZSBxdWV1ZSBpcyBlbXB0eSAqLworCSAgIAlpZiAoZXJybm8gIT0gRUFHQUlOKSB7CisJICAgICAgCQkvKiBlcnJvciAqLworCSAgIAl9CisJICAgCS8qIGRvIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoIHByb2Nlc3NlZCBldmVudHMgKi8KKwl9CisKK09uZSByZWFzb24gZm9yIGVtcHR5aW5nIHRoZSBxdWV1ZSBpcyB0aGF0IGlmIGl0IGdldHMgZnVsbCB5b3UnbGwgc3RhcnQKK21pc3NpbmcgZXZlbnRzIHNpbmNlIHRoZSBxdWV1ZSBpcyBmaW5pdGUsIGFuZCBvbGRlciBldmVudHMgd2lsbCBnZXQKK292ZXJ3cml0dGVuLgorCitUaGUgb3RoZXIgcmVhc29uIGlzIHRoYXQgeW91IHdhbnQgdG8ga25vdyBhbGwgd2hhdCBoYXBwZW5lZCwgYW5kIG5vdAorZGVsYXkgdGhlIHByb2Nlc3NpbmcgdGlsbCBsYXRlci4KKworV2h5IGNhbiBnZXQgdGhlIHF1ZXVlIGZ1bGw/IEJlY2F1c2UgeW91IGRvbid0IGVtcHR5IHRoZSBxdWV1ZSBhcworbWVudGlvbmVkLCBvciBiZWNhdXNlIHRvbyBtdWNoIHRpbWUgZWxhcHNlcyBmcm9tIG9uZSByZWFkIHRvIGFub3RoZXIKK2FuZCB0b28gbWFueSBldmVudHMgdG8gc3RvcmUgaW4gdGhlIHF1ZXVlIGdldCBnZW5lcmF0ZWQuIE5vdGUgdGhhdAoraGlnaCBzeXN0ZW0gbG9hZCBtYXkgY29udHJpYnV0ZSB0byBzcGFjZSB0aG9zZSByZWFkcyBldmVuIG1vcmUuCisKK0lmIHRpbWUgYmV0d2VlbiByZWFkcyBpcyBlbm91Z2ggdG8gZmlsbCB0aGUgcXVldWUgYW5kIGxvc2UgYW4gZXZlbnQsCit0aGUgZHJpdmVyIHdpbGwgc3dpdGNoIHRvIHN0YXJ0dXAgbW9kZSBhbmQgbmV4dCB0aW1lIHlvdSByZWFkIGl0LAorc3ludGhldGljIGV2ZW50cyAoSlNfRVZFTlRfSU5JVCkgd2lsbCBiZSBnZW5lcmF0ZWQgdG8gaW5mb3JtIHlvdSBvZgordGhlIGFjdHVhbCBzdGF0ZSBvZiB0aGUgam95c3RpY2suCisKK1tBcyBmb3IgdmVyc2lvbiAxLjIuOCwgdGhlIHF1ZXVlIGlzIGNpcmN1bGFyIGFuZCBhYmxlIHRvIGhvbGQgNjQKKyBldmVudHMuIFlvdSBjYW4gaW5jcmVtZW50IHRoaXMgc2l6ZSBidW1waW5nIHVwIEpTX0JVRkZfU0laRSBpbgorIGpveXN0aWNrLmggYW5kIHJlY29tcGlsaW5nIHRoZSBkcml2ZXIuXQorCisKK0luIHRoZSBhYm92ZSBjb2RlLCB5b3UgbWlnaHQgYXMgd2VsbCB3YW50IHRvIHJlYWQgbW9yZSB0aGFuIG9uZSBldmVudAorYXQgYSB0aW1lIHVzaW5nIHRoZSB0eXBpY2FsIHJlYWQoMikgZnVuY3Rpb25hbGl0eS4gRm9yIHRoYXQsIHlvdSB3b3VsZAorcmVwbGFjZSB0aGUgcmVhZCBhYm92ZSB3aXRoIHNvbWV0aGluZyBsaWtlCisKKwlzdHJ1Y3QganNfZXZlbnQgbXlidWZmZXJbMHhmZl07CisJaW50IGkgPSByZWFkIChmZCwgbXlidWZmZXIsIHNpemVvZihzdHJ1Y3QgbXlidWZmZXIpKTsKKworSW4gdGhpcyBjYXNlLCByZWFkIHdvdWxkIHJldHVybiAtMSBpZiB0aGUgcXVldWUgd2FzIGVtcHR5LCBvciBzb21lCitvdGhlciB2YWx1ZSBpbiB3aGljaCB0aGUgbnVtYmVyIG9mIGV2ZW50cyByZWFkIHdvdWxkIGJlIGkgLworc2l6ZW9mKGpzX2V2ZW50KSAgQWdhaW4sIGlmIHRoZSBidWZmZXIgd2FzIGZ1bGwsIGl0J3MgYSBnb29kIGlkZWEgdG8KK3Byb2Nlc3MgdGhlIGV2ZW50cyBhbmQga2VlcCByZWFkaW5nIGl0IHVudGlsIHlvdSBlbXB0eSB0aGUgZHJpdmVyIHF1ZXVlLgorCisKKzQuIElPQ1RMcworfn5+fn5+fn5+CisKK1RoZSBqb3lzdGljayBkcml2ZXIgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGlvY3RsKDIpIG9wZXJhdGlvbnMuCisKKwkJCQkvKiBmdW5jdGlvbgkJCTNyZCBhcmcgICovCisJI2RlZmluZSBKU0lPQ0dBWEVTCS8qIGdldCBudW1iZXIgb2YgYXhlcwkJY2hhcgkgKi8KKwkjZGVmaW5lIEpTSU9DR0JVVFRPTlMJLyogZ2V0IG51bWJlciBvZiBidXR0b25zCWNoYXIJICovCisJI2RlZmluZSBKU0lPQ0dWRVJTSU9OCS8qIGdldCBkcml2ZXIgdmVyc2lvbgkJaW50CSAqLworCSNkZWZpbmUgSlNJT0NHTkFNRShsZW4pIC8qIGdldCBpZGVudGlmaWVyIHN0cmluZwljaGFyCSAqLworCSNkZWZpbmUgSlNJT0NTQ09SUgkvKiBzZXQgY29ycmVjdGlvbiB2YWx1ZXMJJmpzX2NvcnIgKi8KKwkjZGVmaW5lIEpTSU9DR0NPUlIJLyogZ2V0IGNvcnJlY3Rpb24gdmFsdWVzCSZqc19jb3JyICovCisKK0ZvciBleGFtcGxlLCB0byByZWFkIHRoZSBudW1iZXIgb2YgYXhlcworCisJY2hhciBudW1iZXJfb2ZfYXhlczsKKwlpb2N0bCAoZmQsIEpTSU9DR0FYRVMsICZudW1iZXJfb2ZfYXhlcyk7CisKKworNC4xIEpTSU9HQ1ZFUlNJT04KK35+fn5+fn5+fn5+fn5+fn5+CisKK0pTSU9HQ1ZFUlNJT04gaXMgYSBnb29kIHdheSB0byBjaGVjayBpbiBydW4tdGltZSB3aGV0aGVyIHRoZSBydW5uaW5nCitkcml2ZXIgaXMgMS4wKyBhbmQgc3VwcG9ydHMgdGhlIGV2ZW50IGludGVyZmFjZS4gSWYgaXQgaXMgbm90LCB0aGUKK0lPQ1RMIHdpbGwgZmFpbC4gRm9yIGEgY29tcGlsZS10aW1lIGRlY2lzaW9uLCB5b3UgY2FuIHRlc3QgdGhlCitKU19WRVJTSU9OIHN5bWJvbAorCisJI2lmZGVmIEpTX1ZFUlNJT04KKwkjaWYgSlNfVkVSU0lPTiA+IDB4c29tZXRoaW5nCisKKworNC4yIEpTSU9DR05BTUUKK35+fn5+fn5+fn5+fn5+CisKK0pTSU9DR05BTUUobGVuKSBhbGxvd3MgeW91IHRvIGdldCB0aGUgbmFtZSBzdHJpbmcgb2YgdGhlIGpveXN0aWNrIC0gdGhlIHNhbWUKK2FzIGlzIGJlaW5nIHByaW50ZWQgYXQgYm9vdCB0aW1lLiBUaGUgJ2xlbicgYXJndW1lbnQgaXMgdGhlIGxlbmd0aCBvZiB0aGUKK2J1ZmZlciBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gYXNraW5nIGZvciB0aGUgbmFtZS4gSXQgaXMgdXNlZCB0byBhdm9pZAorcG9zc2libGUgb3ZlcnJ1biBzaG91bGQgdGhlIG5hbWUgYmUgdG9vIGxvbmcuCisKKwljaGFyIG5hbWVbMTI4XTsKKwlpZiAoaW9jdGwoZmQsIEpTSU9DR05BTUUoc2l6ZW9mKG5hbWUpKSwgbmFtZSkgPCAwKQorCQlzdHJuY3B5KG5hbWUsICJVbmtub3duIiwgc2l6ZW9mKG5hbWUpKTsKKwlwcmludGYoIk5hbWU6ICVzXG4iLCBuYW1lKTsKKworCis0LjMgSlNJT0NbU0ddQ09SUgorfn5+fn5+fn5+fn5+fn5+fn4KKworRm9yIHVzYWdlIG9uIEpTSU9DW1NHXUNPUlIgSSBzdWdnZXN0IHlvdSB0byBsb29rIGludG8ganNjYWwuYyAgVGhleSBhcmUKK25vdCBuZWVkZWQgaW4gYSBub3JtYWwgcHJvZ3JhbSwgb25seSBpbiBqb3lzdGljayBjYWxpYnJhdGlvbiBzb2Z0d2FyZQorc3VjaCBhcyBqc2NhbCBvciBrY21qb3kuIFRoZXNlIElPQ1RMcyBhbmQgZGF0YSB0eXBlcyBhcmVuJ3QgY29uc2lkZXJlZAordG8gYmUgaW4gdGhlIHN0YWJsZSBwYXJ0IG9mIHRoZSBBUEksIGFuZCB0aGVyZWZvcmUgbWF5IGNoYW5nZSB3aXRob3V0Cit3YXJuaW5nIGluIGZvbGxvd2luZyByZWxlYXNlcyBvZiB0aGUgZHJpdmVyLgorCitCb3RoIEpTSU9DU0NPUlIgYW5kIEpTSU9DR0NPUlIgZXhwZWN0ICZqc19jb3JyIHRvIGJlIGFibGUgdG8gaG9sZAoraW5mb3JtYXRpb24gZm9yIGFsbCBheGlzLiBUaGF0IGlzLCBzdHJ1Y3QganNfY29yciBjb3JyW01BWF9BWElTXTsKKworc3RydWN0IGpzX2NvcnIgaXMgZGVmaW5lZCBhcworCisJc3RydWN0IGpzX2NvcnIgeworCQlfX3MzMiBjb2VmWzhdOworCQlfX3UxNiBwcmVjOworCQlfX3UxNiB0eXBlOworCX07CisKK2FuZCBgYHR5cGUnJworCisJI2RlZmluZSBKU19DT1JSX05PTkUgICAgICAgICAgICAweDAwICAgIC8qIHJldHVybnMgcmF3IHZhbHVlcyAqLworCSNkZWZpbmUgSlNfQ09SUl9CUk9LRU4gICAgICAgICAgMHgwMSAgICAvKiBicm9rZW4gbGluZSAqLworCisKKzUuIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIDAueCBqb3lzdGljayBkcml2ZXIgQVBJIGlzIHF1aXRlIGxpbWl0ZWQgYW5kIGl0cyB1c2FnZSBpcyBkZXByZWNhdGVkLgorVGhlIGRyaXZlciBvZmZlcnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhvdWdoLiBIZXJlJ3MgYSBxdWljayBzdW1tYXJ5OgorCisJc3RydWN0IEpTX0RBVEFfVFlQRSBqczsKKwl3aGlsZSAoMSkgeworCQlpZiAocmVhZCAoZmQsICZqcywgSlNfUkVUVVJOKSAhPSBKU19SRVRVUk4pIHsKKwkgICAgICAJCS8qIGVycm9yICovCisJICAgCX0KKwkgICAJdXNsZWVwICgxMDAwKTsKKwl9CisKK0FzIHlvdSBjYW4gZmlndXJlIG91dCBmcm9tIHRoZSBleGFtcGxlLCB0aGUgcmVhZCByZXR1cm5zIGltbWVkaWF0ZWx5LAord2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBqb3lzdGljay4KKworCXN0cnVjdCBKU19EQVRBX1RZUEUgeworCQlpbnQgYnV0dG9uczsgICAgLyogaW1tZWRpYXRlIGJ1dHRvbiBzdGF0ZSAqLworCQlpbnQgeDsgICAgICAgICAgLyogaW1tZWRpYXRlIHggYXhpcyB2YWx1ZSAqLworCQlpbnQgeTsgICAgICAgICAgLyogaW1tZWRpYXRlIHkgYXhpcyB2YWx1ZSAqLworCX07CisKK2FuZCBKU19SRVRVUk4gaXMgZGVmaW5lZCBhcworCisJI2RlZmluZSBKU19SRVRVUk4gICAgICAgc2l6ZW9mKHN0cnVjdCBKU19EQVRBX1RZUEUpCisKK1RvIHRlc3QgdGhlIHN0YXRlIG9mIHRoZSBidXR0b25zLAorCisJZmlyc3RfYnV0dG9uX3N0YXRlICA9IGpzLmJ1dHRvbnMgJiAxOworCXNlY29uZF9idXR0b25fc3RhdGUgPSBqcy5idXR0b25zICYgMjsKKworVGhlIGF4aXMgdmFsdWVzIGRvIG5vdCBoYXZlIGEgZGVmaW5lZCByYW5nZSBpbiB0aGUgb3JpZ2luYWwgMC54IGRyaXZlciwKK2V4Y2VwdCBmb3IgdGhhdCB0aGUgdmFsdWVzIGFyZSBub24tbmVnYXRpdmUuIFRoZSAxLjIuOCsgZHJpdmVycyB1c2UgYQorZml4ZWQgcmFuZ2UgZm9yIHJlcG9ydGluZyB0aGUgdmFsdWVzLCAxIGJlaW5nIHRoZSBtaW5pbXVtLCAxMjggdGhlCitjZW50ZXIsIGFuZCAyNTUgbWF4aW11bSB2YWx1ZS4KKworVGhlIHYwLjguMC4yIGRyaXZlciBhbHNvIGhhZCBhbiBpbnRlcmZhY2UgZm9yICdkaWdpdGFsIGpveXN0aWNrcycsIChub3cKK2NhbGxlZCBNdWx0aXN5c3RlbSBqb3lzdGlja3MgaW4gdGhpcyBkcml2ZXIpLCB1bmRlciAvZGV2L2Rqc1guIFRoaXMgZHJpdmVyCitkb2Vzbid0IHRyeSB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhhdCBpbnRlcmZhY2UuCisKKworNi4gRmluYWwgTm90ZXMKK35+fn5+fn5+fn5+fn5+CisKK19fX18vfAlDb21tZW50cywgYWRkaXRpb25zLCBhbmQgc3BlY2lhbGx5IGNvcnJlY3Rpb25zIGFyZSB3ZWxjb21lLgorXCBvLk98CURvY3VtZW50YXRpb24gdmFsaWQgZm9yIGF0IGxlYXN0IHZlcnNpb24gMS4yLjggb2YgdGhlIGpveXN0aWNrCisgPShfKT0JZHJpdmVyIGFuZCBhcyB1c3VhbCwgdGhlIHVsdGltYXRlIHNvdXJjZSBmb3IgZG9jdW1lbnRhdGlvbiBpcworICAgVQl0byAiVXNlIFRoZSBTb3VyY2UgTHVrZSIgb3IsIGF0IHlvdXIgY29udmVuaWVuY2UsIFZvanRlY2ggOykKKworCQkJCQktIFJhZ25hcgorRU9GCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGEwMTFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dApAQCAtMCwwICsxLDU0MiBAQAorCQkgICAgTGludXggSm95c3RpY2sgcGFycG9ydCBkcml2ZXJzIHYyLjAKKwkgICAgICAgKGMpIDE5OTgtMjAwMCBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+CisJICAgICAgIChjKSAxOTk4IEFuZHJlZSBCb3JybWFubiA8YS5ib3JybWFubkB0dS1icy5kZT4KKwkJCSAgICAgU3BvbnNvcmVkIGJ5IFN1U0UKKwkkSWQ6IGpveXN0aWNrLXBhcnBvcnQudHh0LHYgMS42IDIwMDEvMDkvMjUgMDk6MzE6MzIgdm9qdGVjaCBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiswLiBEaXNjbGFpbWVyCit+fn5+fn5+fn5+fn5+CisgIEFueSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgYXMtaXMsIHdpdGhvdXQgYW55IGd1YXJhbnRlZSB0aGF0CitpdCB3aWxsIGJlIHRydWUuIFNvLCB1c2UgaXQgYXQgeW91ciBvd24gcmlzay4gVGhlIHBvc3NpYmxlIGRhbWFnZXMgdGhhdCBjYW4KK2hhcHBlbiBpbmNsdWRlIGJ1cm5pbmcgeW91ciBwYXJhbGxlbCBwb3J0LCBhbmQvb3IgdGhlIHN0aWNrcyBhbmQgam95c3RpY2sKK2FuZCBtYXliZSBldmVuIG1vcmUuIExpa2Ugd2hlbiBhIGxpZ2h0bmluZyBraWxscyB5b3UgaXQgaXMgbm90IG91ciBwcm9ibGVtLgorCisxLiBJbnRybworfn5+fn5+fn4KKyAgVGhlIGpveXN0aWNrIHBhcnBvcnQgZHJpdmVycyBhcmUgdXNlZCBmb3Igam95c3RpY2tzIGFuZCBnYW1lcGFkcyBub3QKK29yaWdpbmFsbHkgZGVzaWduZWQgZm9yIFBDcyBhbmQgb3RoZXIgY29tcHV0ZXJzIExpbnV4IHJ1bnMgb24uIEJlY2F1c2Ugb2YKK3RoYXQsIFBDcyB1c3VhbGx5IGxhY2sgdGhlIHJpZ2h0IHBvcnRzIHRvIGNvbm5lY3QgdGhlc2UgZGV2aWNlcyB0by4gUGFyYWxsZWwKK3BvcnQsIGJlY2F1c2Ugb2YgaXRzIGFiaWxpdHkgdG8gY2hhbmdlIHNpbmdsZSBiaXRzIGF0IHdpbGwsIGFuZCBwcm92aWRpbmcKK2JvdGggb3V0cHV0IGFuZCBpbnB1dCBiaXRzIGlzIHRoZSBtb3N0IHN1aXRhYmxlIHBvcnQgb24gdGhlIFBDIGZvcgorY29ubmVjdGluZyBzdWNoIGRldmljZXMuCisKKzIuIERldmljZXMgc3VwcG9ydGVkCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBNYW55IGNvbnNvbGUgYW5kIDgtYml0IGNvbXB1dGVyIGdhbWVwYWRzIGFuZCBqb3lzdGlja3MgYXJlIHN1cHBvcnRlZC4gVGhlCitmb2xsb3dpbmcgc3Vic2VjdGlvbnMgZGlzY3VzcyB1c2FnZSBvZiBlYWNoLgorCisyLjEgTkVTIGFuZCBTTkVTCit+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBOaW50ZW5kbyBFbnRlcnRhaW5tZW50IFN5c3RlbSBhbmQgU3VwZXIgTmludGVuZG8gRW50ZXJ0YWlubWVudCBTeXN0ZW0KK2dhbWVwYWRzIGFyZSB3aWRlbHkgYXZhaWxhYmxlLCBhbmQgZWFzeSB0byBnZXQuIEFsc28sIHRoZXkgYXJlIHF1aXRlIGVhc3kgdG8KK2Nvbm5lY3QgdG8gYSBQQywgYW5kIGRvbid0IG5lZWQgbXVjaCBwcm9jZXNzaW5nIHNwZWVkICgxMDggdXMgZm9yIE5FUyBhbmQKKzE2NSB1cyBmb3IgU05FUywgY29tcGFyZWQgdG8gYWJvdXQgMTAwMCB1cyBmb3IgUEMgZ2FtZXBhZHMpIHRvIGNvbW11bmljYXRlCit3aXRoIHRoZW0uCisKKyAgQWxsIE5FUyBhbmQgU05FUyB1c2UgdGhlIHNhbWUgc3luY2hyb25vdXMgc2VyaWFsIHByb3RvY29sLCBjbG9ja2VkIGZyb20KK3RoZSBjb21wdXRlcidzIHNpZGUgKGFuZCB0aHVzIHRpbWluZyBpbnNlbnNpdGl2ZSkuIFRvIGFsbG93IHVwIHRvIDUgTkVTCithbmQvb3IgU05FUyBnYW1lcGFkcyBjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQgYXQgb25jZSwgdGhlIG91dHB1dAorbGluZXMgb2YgdGhlIHBhcmFsbGVsIHBvcnQgYXJlIHNoYXJlZCwgd2hpbGUgb25lIG9mIDUgYXZhaWxhYmxlIGlucHV0IGxpbmVzCitpcyBhc3NpZ25lZCB0byBlYWNoIGdhbWVwYWQuCisKKyAgVGhpcyBwcm90b2NvbCBpcyBoYW5kbGVkIGJ5IHRoZSBnYW1lY29uLmMgZHJpdmVyLCBzbyB0aGF0J3MgdGhlIG9uZQoreW91J2xsIHVzZSBmb3IgTkVTIGFuZCBTTkVTIGdhbWVwYWRzLgorCisgIFRoZSBtYWluIHByb2JsZW0gd2l0aCBQQyBwYXJhbGxlbCBwb3J0cyBpcyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSArNVYgcG93ZXIKK3NvdXJjZSBvbiBhbnkgb2YgdGhlaXIgcGlucy4gU28sIGlmIHlvdSB3YW50IGEgcmVsaWFibGUgc291cmNlIG9mIHBvd2VyCitmb3IgeW91ciBwYWRzLCB1c2UgZWl0aGVyIGtleWJvYXJkIG9yIGpveXN0aWNrIHBvcnQsIGFuZCBtYWtlIGEgcGFzcy10aHJvdWdoCitjYWJsZS4gWW91IGNhbiBhbHNvIHB1bGwgdGhlIHBvd2VyIGRpcmVjdGx5IGZyb20gdGhlIHBvd2VyIHN1cHBseSAodGhlIHJlZAord2lyZSBpcyArNVYpLgorCisgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgcGFyYWxsZWwgcG9ydCBvbmx5LCB5b3UgY2FuIHRha2UgdGhlIHBvd2VyIGlzIGZyb20KK3NvbWUgZGF0YSBwaW4uIEZvciBtb3N0IGdhbWVwYWQgYW5kIHBhcnBvcnQgaW1wbGVtZW50YXRpb25zIG9ubHkgb25lIHBpbiBpcworbmVlZGVkLCBhbmQgSSdkIHJlY29tbWVuZCBwaW4gOSBmb3IgdGhhdCwgdGhlIGhpZ2hlc3QgZGF0YSBiaXQuIE9uIHRoZSBvdGhlcgoraGFuZCwgaWYgeW91IGFyZSBub3QgcGxhbm5pbmcgdG8gdXNlIGFueXRoaW5nIGVsc2UgdGhhbiBORVMgLyBTTkVTIG9uIHRoZQorcG9ydCwgYW55dGhpbmcgYmV0d2VlbiBhbmQgaW5jbHVkaW5nIHBpbiA0IGFuZCBwaW4gOSB3aWxsIHdvcmsuCisKKyhwaW4gOSkgLS0tLS0+IFBvd2VyCisKKyAgVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHBhZHMgdGhhdCBuZWVkIGEgbG90IG1vcmUgb2YgcG93ZXIsIGFuZCBwYXJhbGxlbAorcG9ydHMgdGhhdCBjYW4ndCBnaXZlIG11Y2ggY3VycmVudCB0aHJvdWdoIHRoZSBkYXRhIHBpbnMuIElmIHRoaXMgaXMgeW91cgorY2FzZSwgeW91J2xsIG5lZWQgdG8gdXNlIGRpb2RlcyAoYXMgYSBwcmV2ZW50aW9uIG9mIGRlc3Ryb3lpbmcgeW91ciBwYXJhbGxlbAorcG9ydCksIGFuZCBjb21iaW5lIHRoZSBjdXJyZW50cyBvZiB0d28gb3IgbW9yZSBkYXRhIGJpdHMgdG9nZXRoZXIuCisKKwkgICBEaW9kZXMKKyhwaW4gOSkgLS0tLXw+fC0tLS0tLS0rLS0tLS0tPiBQb3dlcgorCQkgICAgICB8CisocGluIDgpIC0tLS18PnwtLS0tLS0tKworCQkgICAgICB8CisocGluIDcpIC0tLS18PnwtLS0tLS0tKworCQkgICAgICB8CisgPGFuZCBzbyBvbj4gICAgICAgICAgOgorCQkgICAgICB8CisocGluIDQpIC0tLS18PnwtLS0tLS0tKworCisgIEdyb3VuZCBpcyBxdWl0ZSBlYXN5LiBPbiBQQydzIHBhcmFsbGVsIHBvcnQgdGhlIGdyb3VuZCBpcyBvbiBhbnkgb2YgdGhlCitwaW5zIGZyb20gcGluIDE4IHRvIHBpbiAyNS4gU28gdXNlIGFueSBwaW4gb2YgdGhlc2UgeW91IGxpa2UgZm9yIHRoZSBncm91bmQuCisKKyhwaW4gMTgpIC0tLS0tPiBHcm91bmQKKworICBORVMgYW5kIFNORVMgcGFkcyBoYXZlIHR3byBpbnB1dCBiaXRzLCBDbG9jayBhbmQgTGF0Y2gsIHdoaWNoIGRyaXZlIHRoZQorc2VyaWFsIHRyYW5zZmVyLiBUaGVzZSBhcmUgY29ubmVjdGVkIHRvIHBpbnMgMiBhbmQgMyBvZiB0aGUgcGFyYWxsZWwgcG9ydCwKK3Jlc3BlY3RpdmVseS4KKworKHBpbiAyKSAtLS0tLT4gQ2xvY2sKKyhwaW4gMykgLS0tLS0+IExhdGNoCisKKyAgQW5kIHRoZSBsYXN0IHRoaW5nIGlzIHRoZSBORVMgLyBTTkVTIGRhdGEgd2lyZS4gT25seSB0aGF0IGlzbid0IHNoYXJlZCBhbmQKK2VhY2ggcGFkIG5lZWRzIGl0cyBvd24gZGF0YSBwaW4uIFRoZSBwYXJhbGxlbCBwb3J0IHBpbnMgYXJlOgorCisocGluIDEwKSAtLS0tLT4gUGFkIDEgZGF0YQorKHBpbiAxMSkgLS0tLS0+IFBhZCAyIGRhdGEKKyhwaW4gMTIpIC0tLS0tPiBQYWQgMyBkYXRhCisocGluIDEzKSAtLS0tLT4gUGFkIDQgZGF0YQorKHBpbiAxNSkgLS0tLS0+IFBhZCA1IGRhdGEKKworICBOb3RlIHRoYXQgcGluIDE0IGlzIG5vdCB1c2VkLCBzaW5jZSBpdCBpcyBub3QgYW4gaW5wdXQgcGluIG9uIHRoZSBwYXJhbGxlbAorcG9ydC4KKworICBUaGlzIGlzIGV2ZXJ5dGhpbmcgeW91IG5lZWQgb24gdGhlIFBDJ3Mgc2lkZSBvZiB0aGUgY29ubmVjdGlvbiwgbm93IG9uIHRvCit0aGUgZ2FtZXBhZHMgc2lkZS4gVGhlIE5FUyBhbmQgU05FUyBoYXZlIGRpZmZlcmVudCBjb25uZWN0b3JzLiBBbHNvLCB0aGVyZQorYXJlIHF1aXRlIGEgbG90IG9mIE5FUyBjbG9uZXMsIGFuZCBiZWNhdXNlIE5pbnRlbmRvIHVzZWQgcHJvcHJpZXRhcnkKK2Nvbm5lY3RvcnMgZm9yIHRoZWlyIG1hY2hpbmVzLCB0aGUgY2xvbmVycyBjb3VsZG4ndCBhbmQgdXNlZCBzdGFuZGFyZCBELUNhbm5vbgorY29ubmVjdG9ycy4gQW55d2F5LCBpZiB5b3UndmUgZ290IGEgZ2FtZXBhZCwgYW5kIGl0IGhhcyBidXR0b25zIEEsIEIsIFR1cmJvCitBLCBUdXJibyBCLCBTZWxlY3QgYW5kIFN0YXJ0LCBhbmQgaXMgY29ubmVjdGVkIHRocm91Z2ggNSB3aXJlcywgdGhlbiBpdCBpcworZWl0aGVyIGEgTkVTIG9yIE5FUyBjbG9uZSBhbmQgd2lsbCB3b3JrIHdpdGggdGhpcyBjb25uZWN0aW9uLiBTTkVTIGdhbWVwYWRzCithbHNvIHVzZSA1IHdpcmVzLCBidXQgaGF2ZSBtb3JlIGJ1dHRvbnMuIFRoZXkgd2lsbCB3b3JrIGFzIHdlbGwsIG9mIGNvdXJzZS4KKworUGlub3V0IGZvciBORVMgZ2FtZXBhZHMgICAgICAgICAgICAgICAgIFBpbm91dCBmb3IgU05FUyBnYW1lcGFkcworCisJICAgKy0tLS0+IFBvd2VyICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgfCBvICBvICBvICBvIHwgIHggIHggIG8gIHwgMQorIDUgKy0tLS0tLS0tLSsgIDcgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworICAgfCB4ICB4ICBvICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8ICB8ICAgICAgICAgIHwKKyAgIHwgbyAgbyAgbyAgbyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgfCAgfCAgICAgICAgICArLT4gR3JvdW5kCisgNCArLS0tLS0tLS0tLS0tKyAxICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgICstLS0tLS0tLS0tLS0+IERhdGEKKyAgICAgfCAgfCAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgKy0tLS0tLS0tLS0tLS0tLT4gTGF0Y2gKKyAgICAgfCAgfCAgfCAgKy0+IEdyb3VuZCAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLT4gQ2xvY2sKKyAgICAgfCAgfCAgKy0tLS0+IENsb2NrICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gUG93ZXIKKyAgICAgfCAgKy0tLS0tLS0+IExhdGNoCisgICAgICstLS0tLS0tLS0tPiBEYXRhCisKK1Bpbm91dCBmb3IgTkVTIGNsb25lIChkYjkpIGdhbWVwYWRzICAgICBQaW5vdXQgZm9yIE5FUyBjbG9uZSAoZGIxNSkgZ2FtZXBhZHMKKworCSstLS0tLS0tLS0+IENsb2NrICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0+IERhdGEKKwl8ICstLS0tLS0tPiBMYXRjaCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICArLS0tPiBHcm91bmQKKwl8IHwgKy0tLS0tPiBEYXRhICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisJfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fCisgICAgX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgIDggXCBvIHggeCB4IHggeCB4IG8gLyAxCisgIDUgXCB4IG8gbyBvIHggLyAxICAgICAgICAgICAgICAgICAgICAgICAgIFwgbyB4IHggbyB4IHggbyAvCisgICAgIFwgeCBvIHggbyAvICAgICAgICAgICAgICAgICAgICAgICAgICAxNSBgfn5+fn5+fn5+fn5+ficgOQorICAgIDkgYH5+fn5+fn4nIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgIHwKKwkgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICstLS0tPiBDbG9jaworCSB8ICAgKy0tLS0+IFBvd2VyICAgICAgICAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0+IExhdGNoCisJICstLS0tLS0tLT4gR3JvdW5kICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLT4gUG93ZXIKKworMi4yIE11bHRpc3lzdGVtIGpveXN0aWNrcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBJbiB0aGUgZXJhIG9mIDgtYml0IG1hY2hpbmVzLCB0aGVyZSB3YXMgc29tZXRoaW5nIGxpa2UgZGUtZmFjdG8gc3RhbmRhcmQKK2ZvciBqb3lzdGljayBwb3J0cy4gVGhleSB3ZXJlIGFsbCBkaWdpdGFsLCBhbmQgYWxsIHVzZWQgRC1DYW5ub24gOSBwaW4KK2Nvbm5lY3RvcnMgKGRiOSkuIEJlY2F1c2Ugb2YgdGhhdCwgYSBzaW5nbGUgam95c3RpY2sgY291bGQgYmUgdXNlZCB3aXRob3V0CitoYXNzbGUgb24gQXRhcmkgKDEzMCwgODAwWEUsIDgwMFhMLCAyNjAwLCA3MjAwKSwgQW1pZ2EsIENvbW1vZG9yZSBDNjQsCitBbXN0cmFkIENQQywgU2luY2xhaXIgWlggU3BlY3RydW0gYW5kIG1hbnkgb3RoZXIgbWFjaGluZXMuIFRoYXQncyB3aHkgdGhlc2UKK2pveXN0aWNrcyBhcmUgY2FsbGVkICJNdWx0aXN5c3RlbSIuCisKKyAgTm93IHRoZWlyIHBpbm91dDoKKworICAgICAgKy0tLS0tLS0tLT4gUmlnaHQKKyAgICAgIHwgKy0tLS0tLS0+IExlZnQKKyAgICAgIHwgfCArLS0tLS0+IERvd24KKyAgICAgIHwgfCB8ICstLS0+IFVwCisgICAgICB8IHwgfCB8CisgIF9fX19fX19fX19fX18KKzUgXCB4IG8gbyBvIG8gLyAxCisgICBcIHggbyB4IG8gLworICA5IGB+fn5+fn5+JyA2CisgICAgICAgfCAgIHwKKyAgICAgICB8ICAgKy0tLS0+IEJ1dHRvbgorICAgICAgICstLS0tLS0tLT4gR3JvdW5kCisKKyAgSG93ZXZlciwgYXMgdGltZSBwYXNzZWQsIGV4dGVuc2lvbnMgdG8gdGhpcyBzdGFuZGFyZCBkZXZlbG9wZWQsIGFuZCB0aGVzZQord2VyZSBub3QgY29tcGF0aWJsZSB3aXRoIGVhY2ggb3RoZXI6CisKKworCUF0YXJpIDEzMCwgODAwL1hML1hFCQkgICBNU1gKKworCQkJCQkgKy0tLS0tLS0tLS0tPiBQb3dlcgorICAgICAgKy0tLS0tLS0tLT4gUmlnaHQgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0+IFJpZ2h0CisgICAgICB8ICstLS0tLS0tPiBMZWZ0ICAgICAgICAgICAgICAgICAgIHwgfCArLS0tLS0tLT4gTGVmdAorICAgICAgfCB8ICstLS0tLT4gRG93biAgICAgICAgICAgICAgICAgICB8IHwgfCArLS0tLS0+IERvd24KKyAgICAgIHwgfCB8ICstLS0+IFVwICAgICAgICAgICAgICAgICAgICAgfCB8IHwgfCArLS0tPiBVcAorICAgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8IHwKKyAgX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX18KKzUgXCB4IG8gbyBvIG8gLyAxICAgICAgICAgICAgICAgICAgICA1IFwgbyBvIG8gbyBvIC8gMQorICAgXCB4IG8gbyBvIC8gICAgICAgICAgICAgICAgICAgICAgICAgIFwgbyBvIG8gbyAvCisgIDkgYH5+fn5+fn4nIDYgICAgICAgICAgICAgICAgICAgICAgICA5IGB+fn5+fn5+JyA2CisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8CisgICAgICAgfCB8ICstLS0tPiBCdXR0b24gICAgICAgICAgICAgICAgICB8IHwgfCArLS0tLT4gQnV0dG9uIDEKKyAgICAgICB8ICstLS0tLS0+IFBvd2VyICAgICAgICAgICAgICAgICAgIHwgfCArLS0tLS0tPiBCdXR0b24gMgorICAgICAgICstLS0tLS0tLT4gR3JvdW5kICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0+IE91dHB1dCAzCisJCQkJCSAgKy0tLS0tLS0tLS0+IEdyb3VuZAorCisJQW1zdHJhZCBDUEMJCQkgICBDb21tb2RvcmUgQzY0CisKKwkJCQkJICstLS0tLS0tLS0tLT4gQW5hbG9nIFkKKyAgICAgICstLS0tLS0tLS0+IFJpZ2h0ICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tPiBSaWdodAorICAgICAgfCArLS0tLS0tLT4gTGVmdCAgICAgICAgICAgICAgICAgICB8IHwgKy0tLS0tLS0+IExlZnQKKyAgICAgIHwgfCArLS0tLS0+IERvd24gICAgICAgICAgICAgICAgICAgfCB8IHwgKy0tLS0tPiBEb3duCisgICAgICB8IHwgfCArLS0tPiBVcCAgICAgICAgICAgICAgICAgICAgIHwgfCB8IHwgKy0tLT4gVXAKKyAgICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IHwgfCB8CisgIF9fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fCis1IFwgeCBvIG8gbyBvIC8gMSAgICAgICAgICAgICAgICAgICAgNSBcIG8gbyBvIG8gbyAvIDEKKyAgIFwgeCBvIG8gbyAvICAgICAgICAgICAgICAgICAgICAgICAgICBcIG8gbyBvIG8gLworICA5IGB+fn5+fn5+JyA2ICAgICAgICAgICAgICAgICAgICAgICAgOSBgfn5+fn5+ficgNgorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IHwgfAorICAgICAgIHwgfCArLS0tLT4gQnV0dG9uIDEgICAgICAgICAgICAgICAgfCB8IHwgKy0tLS0+IEJ1dHRvbgorICAgICAgIHwgKy0tLS0tLT4gQnV0dG9uIDIgICAgICAgICAgICAgICAgfCB8ICstLS0tLS0+IFBvd2VyCisgICAgICAgKy0tLS0tLS0tPiBHcm91bmQgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLT4gR3JvdW5kCisJCQkJCSAgKy0tLS0tLS0tLS0+IEFuYWxvZyBYCisKKwlTaW5jbGFpciBTcGVjdHJ1bSArMkEvKzMgICAgICAgICAgIEFtaWdhIDEyMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICArLS0tLS0tLS0tLS0+IFVwICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tPiBCdXR0b24gMworICAgIHwgKy0tLS0tLS0tLT4gRmlyZSAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0+IFJpZ2h0CisgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCArLS0tLS0tLT4gTGVmdAorICAgIHwgfCAgICstLS0tLT4gR3JvdW5kICAgICAgICAgICAgICAgICB8IHwgfCArLS0tLS0+IERvd24KKyAgICB8IHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IHwgfCArLS0tPiBVcAorICAgIHwgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8IHwKKyAgX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX18KKzUgXCBvIG8geCBvIHggLyAxICAgICAgICAgICAgICAgICAgICA1IFwgbyBvIG8gbyBvIC8gMQorICAgXCBvIG8gbyBvIC8gICAgICAgICAgICAgICAgICAgICAgICAgIFwgbyBvIG8gbyAvCisgIDkgYH5+fn5+fn4nIDYgICAgICAgICAgICAgICAgICAgICAgICA5IGB+fn5+fn5+JyA2CisgICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8CisgICAgIHwgfCB8ICstLS0tPiBSaWdodCAgICAgICAgICAgICAgICAgICB8IHwgfCArLS0tLT4gQnV0dG9uIDEKKyAgICAgfCB8ICstLS0tLS0+IExlZnQgICAgICAgICAgICAgICAgICAgIHwgfCArLS0tLS0tPiBQb3dlcgorICAgICB8ICstLS0tLS0tLT4gR3JvdW5kICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0+IEdyb3VuZAorICAgICArLS0tLS0tLS0tLT4gRG93biAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0+IEJ1dHRvbiAyCisKKyAgQW5kIHRoZXJlIHdlcmUgbWFueSBvdGhlcnMuCisKKzIuMi4xIE11bHRpc3lzdGVtIGpveXN0aWNrcyB1c2luZyBkYjkuYworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIEZvciB0aGUgTXVsdGlzeXN0ZW0gam95c3RpY2tzLCBhbmQgdGhlaXIgZGVyaXZhdGl2ZXMsIHRoZSBkYjkuYyBkcml2ZXIKK3dhcyB3cml0dGVuLiBJdCBhbGxvd3Mgb25seSBvbmUgam95c3RpY2sgLyBnYW1lcGFkIHBlciBwYXJhbGxlbCBwb3J0LCBidXQKK3RoZSBpbnRlcmZhY2UgaXMgZWFzeSB0byBidWlsZCBhbmQgd29ya3Mgd2l0aCBhbG1vc3QgYW55dGhpbmcuCisKKyAgRm9yIHRoZSBiYXNpYyAxLWJ1dHRvbiBNdWx0aXN5c3RlbSBqb3lzdGljayB5b3UgY29ubmVjdCBpdHMgd2lyZXMgdG8gdGhlCitwYXJhbGxlbCBwb3J0IGxpa2UgdGhpczoKKworKHBpbiAgMSkgLS0tLS0+IFBvd2VyCisocGluIDE4KSAtLS0tLT4gR3JvdW5kCisKKyhwaW4gIDIpIC0tLS0tPiBVcAorKHBpbiAgMykgLS0tLS0+IERvd24KKyhwaW4gIDQpIC0tLS0tPiBMZWZ0CisocGluICA1KSAtLS0tLT4gUmlnaHQKKyhwaW4gIDYpIC0tLS0tPiBCdXR0b24gMQorCisgIEhvd2V2ZXIsIGlmIHRoZSBqb3lzdGljayBpcyBzd2l0Y2ggYmFzZWQgKGVnLiBjbGlja3Mgd2hlbiB5b3UgbW92ZSBpdCksCit5b3UgbWlnaHQgb3IgbWlnaHQgbm90LCBkZXBlbmRpbmcgb24geW91ciBwYXJhbGxlbCBwb3J0LCBuZWVkIDEwIGtPaG0gcHVsbHVwCityZXNpc3RvcnMgb24gZWFjaCBvZiB0aGUgZGlyZWN0aW9uIGFuZCBidXR0b24gc2lnbmFscywgbGlrZSB0aGlzOgorCisocGluIDIpIC0tLS0tLS0tLS0tLSstLS0tLS0+IFVwCisJICBSZXNpc3RvciAgfAorKHBpbiAxKSAtLVsxMGtPaG1dLS0rCisKKyAgVHJ5IHdpdGhvdXQsIGFuZCBpZiBpdCBkb2Vzbid0IHdvcmssIGFkZCB0aGVtLiBGb3IgVFRMIGJhc2VkIGpveXN0aWNrcyAvCitnYW1lcGFkcyB0aGUgcHVsbHVwcyBhcmUgbm90IG5lZWRlZC4KKworICBGb3Igam95c3RpY2tzIHdpdGggdHdvIGJ1dHRvbnMgeW91IGNvbm5lY3QgdGhlIHNlY29uZCBidXR0b24gdG8gcGluIDcgb24KK3RoZSBwYXJhbGxlbCBwb3J0LgorCisocGluIDcpIC0tLS0tPiBCdXR0b24gMgorCisgIEFuZCB0aGF0J3MgaXQuCisKKyAgT24gYSBzaWRlIG5vdGUsIGlmIHlvdSBoYXZlIGFscmVhZHkgYnVpbHQgYSBkaWZmZXJlbnQgYWRhcHRlciBmb3IgdXNlIHdpdGgKK3RoZSBkaWdpdGFsIGpveXN0aWNrIGRyaXZlciAwLjguMC4yLCB0aGlzIGlzIGFsc28gc3VwcG9ydGVkIGJ5IHRoZSBkYjkuYworZHJpdmVyLCBhcyBkZXZpY2UgdHlwZSA4LiAoU2VlIHNlY3Rpb24gMy4yKQorCisyLjIuMiBNdWx0aXN5c3RlbSBqb3lzdGlja3MgdXNpbmcgZ2FtZWNvbi5jCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIEZvciBzb21lIHBlb3BsZSBqdXN0IG9uZSBqb3lzdGljayBwZXIgcGFyYWxsZWwgcG9ydCBpcyBub3QgZW5vdWdoLCBhbmQvb3IKK3dhbnQgdG8gdXNlIHRoZW0gb24gb25lIHBhcmFsbGVsIHBvcnQgdG9nZXRoZXIgd2l0aCBORVMvU05FUy9QU1ggcGFkcy4gVGhpcyBpcworcG9zc2libGUgdXNpbmcgdGhlIGdhbWVjb24uYy4gSXQgc3VwcG9ydHMgdXAgdG8gNSBkZXZpY2VzIG9mIHRoZSBhYm92ZSB0eXBlcywKK2luY2x1ZGluZyAxIGFuZCAyIGJ1dHRvbnMgTXVsdGlzeXN0ZW0gam95c3RpY2tzLgorCisgIEhvd2V2ZXIsIHRoZXJlIGlzIG5vdGhpbmcgZm9yIGZyZWUuIFRvIGFsbG93IG1vcmUgc3RpY2tzIHRvIGJlIHVzZWQgYXQKK29uY2UsIHlvdSBuZWVkIHRoZSBzdGlja3MgdG8gYmUgcHVyZWx5IHN3aXRjaCBiYXNlZCAodGhhdCBpcyBub24tVFRMKSwgYW5kCitub3QgdG8gbmVlZCBwb3dlci4gSnVzdCBhIHBsYWluIHNpbXBsZSBzaXggc3dpdGNoZXMgaW5zaWRlLiBJZiB5b3VyCitqb3lzdGljayBjYW4gZG8gbW9yZSAoZWcuIHR1cmJvZmlyZSkgeW91J2xsIG5lZWQgdG8gZGlzYWJsZSBpdCB0b3RhbGx5IGZpcnN0CitpZiB5b3Ugd2FudCB0byB1c2UgZ2FtZWNvbi5jLgorCisgIEFsc28sIHRoZSBjb25uZWN0aW9uIGlzIGEgYml0IG1vcmUgY29tcGxleC4gWW91J2xsIG5lZWQgYSBidW5jaCBvZiBkaW9kZXMsCithbmQgb25lIHB1bGx1cCByZXNpc3Rvci4gRmlyc3QsIHlvdSBjb25uZWN0IHRoZSBEaXJlY3Rpb25zIGFuZCB0aGUgYnV0dG9uCit0aGUgc2FtZSBhcyBmb3IgZGI5LCBob3dldmVyIHdpdGggdGhlIGRpb2RlcyBpbmJldHdlZW4uCisKKwkgICAgRGlvZGVzCisocGluIDIpIC0tLS0tfDx8LS0tLT4gVXAKKyhwaW4gMykgLS0tLS18PHwtLS0tPiBEb3duCisocGluIDQpIC0tLS0tfDx8LS0tLT4gTGVmdAorKHBpbiA1KSAtLS0tLXw8fC0tLS0+IFJpZ2h0CisocGluIDYpIC0tLS0tfDx8LS0tLT4gQnV0dG9uIDEKKworICBGb3IgdHdvIGJ1dHRvbiBzdGlja3MgeW91IGFsc28gY29ubmVjdCB0aGUgb3RoZXIgYnV0dG9uLgorCisocGluIDcpIC0tLS0tfDx8LS0tLT4gQnV0dG9uIDIKKworICBBbmQgZmluYWxseSwgeW91IGNvbm5lY3QgdGhlIEdyb3VuZCB3aXJlIG9mIHRoZSBqb3lzdGljaywgbGlrZSBkb25lIGluCit0aGlzIGxpdHRsZSBzY2hlbWF0aWMgdG8gUG93ZXIgYW5kIERhdGEgb24gdGhlIHBhcmFsbGVsIHBvcnQsIGFzIGRlc2NyaWJlZAorZm9yIHRoZSBORVMgLyBTTkVTIHBhZHMgaW4gc2VjdGlvbiAyLjEgb2YgdGhpcyBmaWxlIC0gdGhhdCBpcywgb25lIGRhdGEgcGluCitmb3IgZWFjaCBqb3lzdGljay4gVGhlIHBvd2VyIHNvdXJjZSBpcyBzaGFyZWQuCisKK0RhdGEgICAgLS0tLS0tLS0tLS0tKy0tLS0tPiBHcm91bmQKKwkgIFJlc2lzdG9yICB8CitQb3dlciAgIC0tWzEwa09obV0tLSsKKworICBBbmQgdGhhdCdzIGFsbCwgaGVyZSB3ZSBnbyEKKworMi4yLjMgTXVsdGlzeXN0ZW0gam95c3RpY2tzIHVzaW5nIHR1cmJvZ3JhZnguYworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgVHVyYm9HcmFGWCBpbnRlcmZhY2UsIGRlc2lnbmVkIGJ5CisKKwlTdGVmZmVuIFNjaHdlbmtlIDxzY2h3ZW5rZUBidXJnLWhhbGxlLmRlPgorCisgIGFsbG93cyB1cCB0byA3IE11bHRpc3lzdGVtIGpveXN0aWNrcyBjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQuIEluCitTdGVmZmVuJ3MgdmVyc2lvbiwgdGhlcmUgaXMgc3VwcG9ydCBmb3IgdXAgdG8gNSBidXR0b25zIHBlciBqb3lzdGljay4gIEhvd2V2ZXIsCitzaW5jZSB0aGlzIGRvZXNuJ3Qgd29yayByZWxpYWJseSBvbiBhbGwgcGFyYWxsZWwgcG9ydHMsIHRoZSB0dXJib2dyYWZ4LmMgZHJpdmVyCitzdXBwb3J0cyBvbmx5IG9uZSBidXR0b24gcGVyIGpveXN0aWNrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYnVpbGQgdGhlCitpbnRlcmZhY2UsIHNlZQorCisJaHR0cDovL3d3dzIuYnVyZy1oYWxsZS5kZS9+c2Nod2Vua2UvcGFycG9ydC5odG1sCisKKzIuMyBTb255IFBsYXlzdGF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisgIFRoZSBQU1ggY29udHJvbGxlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIGdhbWVjb24uYy4gUGlub3V0IG9mIHRoZSBQU1gKK2NvbnRyb2xsZXIgKGNvbXBhdGlibGUgd2l0aCBEaXJlY3RQYWRQcm8pOgorCisgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKKzkgfCBvICBvICBvIHwgbyAgbyAgbyB8IG8gIG8gIG8gfCAxICAgICAgICAgICAgICAgcGFyYWxsZWwKKyAgIFxfX19fX19fX3xfX19fX19fX198X19fX19fX18vICAgICAgICAgICAgICAgICAgcG9ydCBwaW5zCisgICAgfCAgfCAgICAgIHwgIHwgIHwgICB8CisgICAgfCAgfCAgICAgIHwgIHwgIHwgICArLS0tLS0tLS0+ICBDbG9jayAgICAtLS0gICg0KQorICAgIHwgIHwgICAgICB8ICB8ICArLS0tLS0tLS0tLS0tPiAgU2VsZWN0ICAgLS0tICAoMykKKyAgICB8ICB8ICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLT4gIFBvd2VyICAgIC0tLSAgKDUtOSkKKyAgICB8ICB8ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLT4gIEdyb3VuZCAgIC0tLSAgKDE4LTI1KQorICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiAgQ29tbWFuZCAgLS0tICAoMikKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gIERhdGEgICAgIC0tLSAgKG9uZSBvZiAxMCwxMSwxMiwxMywxNSkKKworICBUaGUgZHJpdmVyIHN1cHBvcnRzIHRoZXNlIGNvbnRyb2xsZXJzOgorCisgKiBTdGFuZGFyZCBQU1ggUGFkCisgKiBOZWdDb24gUFNYIFBhZAorICogQW5hbG9nIFBTWCBQYWQgKHJlZCBtb2RlKQorICogQW5hbG9nIFBTWCBQYWQgKGdyZWVuIG1vZGUpCisgKiBQU1ggUnVtYmxlIFBhZAorICogUFNYIEREUiBQYWQKKworMi40IFNlZ2EKK35+fn5+fn5+CisgIEFsbCB0aGUgU2VnYSBjb250cm9sbGVycyBhcmUgbW9yZSBvciBsZXNzIGJhc2VkIG9uIHRoZSBzdGFuZGFyZCAyLWJ1dHRvbgorTXVsdGlzeXN0ZW0gam95c3RpY2suIEhvd2V2ZXIsIHNpbmNlIHRoZXkgZG9uJ3QgdXNlIHN3aXRjaGVzIGFuZCB1c2UgVFRMCitsb2dpYywgdGhlIG9ubHkgZHJpdmVyIHVzYWJsZSB3aXRoIHRoZW0gaXMgdGhlIGRiOS5jIGRyaXZlci4KKworMi40LjEgU2VnYSBNYXN0ZXIgU3lzdGVtCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIFNNUyBnYW1lcGFkcyBhcmUgYWxtb3N0IGV4YWN0bHkgdGhlIHNhbWUgYXMgbm9ybWFsIDItYnV0dG9uCitNdWx0aXN5c3RlbSBqb3lzdGlja3MuIFNldCB0aGUgZHJpdmVyIHRvIE11bHRpMiBtb2RlLCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcKK3BhcmFsbGVsIHBvcnQgcGlucywgYW5kIHRoZSBmb2xsb3dpbmcgc2NoZW1hdGljOgorCisgICAgKy0tLS0tLS0tLS0tPiBQb3dlcgorICAgIHwgKy0tLS0tLS0tLT4gUmlnaHQKKyAgICB8IHwgKy0tLS0tLS0+IExlZnQKKyAgICB8IHwgfCArLS0tLS0+IERvd24KKyAgICB8IHwgfCB8ICstLS0+IFVwCisgICAgfCB8IHwgfCB8CisgIF9fX19fX19fX19fX18KKzUgXCBvIG8gbyBvIG8gLyAxCisgICBcIG8gbyB4IG8gLworICA5IGB+fn5+fn5+JyA2CisgICAgIHwgfCAgIHwKKyAgICAgfCB8ICAgKy0tLS0+IEJ1dHRvbiAxCisgICAgIHwgKy0tLS0tLS0tPiBHcm91bmQKKyAgICAgKy0tLS0tLS0tLS0+IEJ1dHRvbiAyCisKKzIuNC4yIFNlZ2EgR2VuZXNpcyBha2EgTWVnYURyaXZlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgU2VnYSBHZW5lc2lzIChpbiBFdXJvcGUgc29sZCBhcyBTZWdhIE1lZ2FEcml2ZSkgcGFkcyBhcmUgYW4gZXh0ZW5zaW9uCit0byB0aGUgU2VnYSBNYXN0ZXIgU3lzdGVtIHBhZHMuIFRoZXkgdXNlIG1vcmUgYnV0dG9ucyAoMysxLCA1KzEsIDYrMSkuICBVc2UKK3RoZSBmb2xsb3dpbmcgc2NoZW1hdGljOgorCisgICAgKy0tLS0tLS0tLS0tPiBQb3dlcgorICAgIHwgKy0tLS0tLS0tLT4gUmlnaHQKKyAgICB8IHwgKy0tLS0tLS0+IExlZnQKKyAgICB8IHwgfCArLS0tLS0+IERvd24KKyAgICB8IHwgfCB8ICstLS0+IFVwCisgICAgfCB8IHwgfCB8CisgIF9fX19fX19fX19fX18KKzUgXCBvIG8gbyBvIG8gLyAxCisgICBcIG8gbyBvIG8gLworICA5IGB+fn5+fn5+JyA2CisgICAgIHwgfCB8IHwKKyAgICAgfCB8IHwgKy0tLS0+IEJ1dHRvbiAxCisgICAgIHwgfCArLS0tLS0tPiBTZWxlY3QKKyAgICAgfCArLS0tLS0tLS0+IEdyb3VuZAorICAgICArLS0tLS0tLS0tLT4gQnV0dG9uIDIKKworICBUaGUgU2VsZWN0IHBpbiBnb2VzIHRvIHBpbiAxNCBvbiB0aGUgcGFyYWxsZWwgcG9ydC4KKworKHBpbiAxNCkgLS0tLS0+IFNlbGVjdAorCisgIFRoZSByZXN0IGlzIHRoZSBzYW1lIGFzIGZvciBNdWx0aTIgam95c3RpY2tzIHVzaW5nIGRiOS5jCisKKzIuNC4zIFNlZ2EgU2F0dXJuCit+fn5+fn5+fn5+fn5+fn5+fgorICBTZWdhIFNhdHVybiBoYXMgZWlnaHQgYnV0dG9ucywgYW5kIHRvIHRyYW5zZmVyIHRoYXQsIHdpdGhvdXQgaGFja3MgbGlrZQorR2VuZXNpcyA2IHBhZHMgdXNlLCBpdCBuZWVkcyBvbmUgbW9yZSBzZWxlY3QgcGluLiBBbnl3YXksIGl0IGlzIHN0aWxsCitoYW5kbGVkIGJ5IHRoZSBkYjkuYyBkcml2ZXIuIEl0cyBwaW5vdXQgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSBhbnl0aGluZworZWxzZS4gIFVzZSB0aGlzIHNjaGVtYXRpYzoKKworICAgICstLS0tLS0tLS0tLT4gU2VsZWN0IDEKKyAgICB8ICstLS0tLS0tLS0+IFBvd2VyCisgICAgfCB8ICstLS0tLS0tPiBVcAorICAgIHwgfCB8ICstLS0tLT4gRG93bgorICAgIHwgfCB8IHwgKy0tLT4gR3JvdW5kCisgICAgfCB8IHwgfCB8CisgIF9fX19fX19fX19fX18KKzUgXCBvIG8gbyBvIG8gLyAxCisgICBcIG8gbyBvIG8gLworICA5IGB+fn5+fn5+JyA2CisgICAgIHwgfCB8IHwKKyAgICAgfCB8IHwgKy0tLS0+IFNlbGVjdCAyCisgICAgIHwgfCArLS0tLS0tPiBSaWdodAorICAgICB8ICstLS0tLS0tLT4gTGVmdAorICAgICArLS0tLS0tLS0tLT4gUG93ZXIKKworICBTZWxlY3QgMSBpcyBwaW4gMTQgb24gdGhlIHBhcmFsbGVsIHBvcnQsIFNlbGVjdCAyIGlzIHBpbiAxNiBvbiB0aGUKK3BhcmFsbGVsIHBvcnQuCisKKyhwaW4gMTQpIC0tLS0tPiBTZWxlY3QgMQorKHBpbiAxNikgLS0tLS0+IFNlbGVjdCAyCisKKyAgVGhlIG90aGVyIHBpbnMgKFVwLCBEb3duLCBSaWdodCwgTGVmdCwgUG93ZXIsIEdyb3VuZCkgYXJlIHRoZSBzYW1lIGFzIGZvcgorTXVsdGkgam95c3RpY2tzIHVzaW5nIGRiOS5jCisKKzMuIFRoZSBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fgorICBUaGVyZSBhcmUgdGhyZWUgZHJpdmVycyBmb3IgdGhlIHBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlcy4gRWFjaCwgYXMKK2Rlc2NyaWJlZCBhYm92ZSwgYWxsb3dzIHRvIGNvbm5lY3QgYSBkaWZmZXJlbnQgZ3JvdXAgb2Ygam95c3RpY2tzIGFuZCBwYWRzLgorSGVyZSBhcmUgZGVzY3JpYmVkIHRoZWlyIGNvbW1hbmQgbGluZXM6CisKKzMuMSBnYW1lY29uLmMKK35+fn5+fn5+fn5+fn4KKyAgVXNpbmcgZ2FtZWNvbi5jIHlvdSBjYW4gY29ubmVjdCB1cCB0byBmaXZlIGRldmljZXMgdG8gb25lIHBhcmFsbGVsIHBvcnQuIEl0Cit1c2VzIHRoZSBmb2xsb3dpbmcga2VybmVsL21vZHVsZSBjb21tYW5kIGxpbmU6CisKKwlnYW1lY29uLm1hcD1wb3J0LHBhZDEscGFkMixwYWQzLHBhZDQscGFkNQorCisgIFdoZXJlICdwb3J0JyB0aGUgbnVtYmVyIG9mIHRoZSBwYXJwb3J0IGludGVyZmFjZSAoZWcuIDAgZm9yIHBhcnBvcnQwKS4KKworICBBbmQgJ3BhZDEnIHRvICdwYWQ1JyBhcmUgcGFkIHR5cGVzIGNvbm5lY3RlZCB0byBkaWZmZXJlbnQgZGF0YSBpbnB1dCBwaW5zCisoMTAsMTEsMTIsMTMsMTUpLCBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAyLjEgb2YgdGhpcyBmaWxlLgorCisgIFRoZSB0eXBlcyBhcmU6CisKKwlUeXBlIHwgSm95c3RpY2svUGFkCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIDAgIHwgTm9uZQorCSAgMSAgfCBTTkVTIHBhZAorCSAgMiAgfCBORVMgcGFkCisJICA0ICB8IE11bHRpc3lzdGVtIDEtYnV0dG9uIGpveXN0aWNrCisJICA1ICB8IE11bHRpc3lzdGVtIDItYnV0dG9uIGpveXN0aWNrCisJICA2ICB8IE42NCBwYWQKKwkgIDcgIHwgU29ueSBQU1ggY29udHJvbGxlcgorCSAgOCAgfCBTb255IFBTWCBERFIgY29udHJvbGxlcgorCisgIFRoZSBleGFjdCB0eXBlIG9mIHRoZSBQU1ggY29udHJvbGxlciB0eXBlIGlzIGF1dG9wcm9iZWQgd2hlbiB1c2VkIHNvCitob3Qgc3dhcHBpbmcgc2hvdWxkIHdvcmsgKGJ1dCBpcyBub3QgcmVjb21lbmRlZCkuCisKKyAgU2hvdWxkIHlvdSB3YW50IHRvIHVzZSBtb3JlIHRoYW4gb25lIG9mIHBhcmFsbGVsIHBvcnRzIGF0IG9uY2UsIHlvdSBjYW4gdXNlCitnYW1lY29uLm1hcDIgYW5kIGdhbWVjb24ubWFwMyBhcyBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGZvciB0d28KK21vcmUgcGFyYWxsZWwgcG9ydHMuCisKKyAgVGhlcmUgYXJlIHR3byBvcHRpb25zIHNwZWNpZmljIHRvIFBTWCBkcml2ZXIgcG9ydGlvbi4gIGdhbWVjb24ucHN4X2RlbGF5IHNldHMKK3RoZSBjb21tYW5kIGRlbGF5IHdoZW4gdGFsa2luZyB0byB0aGUgY29udHJvbGxlcnMuIFRoZSBkZWZhdWx0IG9mIDI1IHNob3VsZAord29yayBidXQgeW91IGNhbiB0cnkgbG93ZXJpbmcgaXQgZm9yIGJldHRlciBwZXJmb3JtYWNlLiBJZiB5b3VyIHBhZHMgZG9uJ3QKK3Jlc3BvbmQgdHJ5IHJhaXNpbmcgaXQgdW50aWxsIHRoZXkgd29yay4gU2V0dGluZyB0aGUgdHlwZSB0byA4IGFsbG93cyB0aGUKK2RyaXZlciB0byBiZSB1c2VkIHdpdGggRGFuY2UgRGFuY2UgUmV2b2x1dGlvbiBvciBzaW1pbGFyIGdhbWVzLiBBcnJvdyBrZXlzIGFyZQorcmVnaXN0ZXJlZCBhcyBrZXkgcHJlc3NlcyBpbnN0ZWFkIG9mIFggYW5kIFkgYXhlcy4KKworMy4yIGRiOS5jCit+fn5+fn5+fn4KKyAgQXBhcnQgZnJvbSBtYWtpbmcgYW4gaW50ZXJmYWNlLCB0aGVyZSBpcyBub3RoaW5nIGRpZmZpY3VsdCBvbiB1c2luZyB0aGUKK2RiOS5jIGRyaXZlci4gSXQgdXNlcyB0aGUgZm9sbG93aW5nIGtlcm5lbC9tb2R1bGUgY29tbWFuZCBsaW5lOgorCisJZGI5LmRldj1wb3J0LHR5cGUKKworICBXaGVyZSAncG9ydCcgaXMgdGhlIG51bWJlciBvZiB0aGUgcGFycG9ydCBpbnRlcmZhY2UgKGVnLiAwIGZvciBwYXJwb3J0MCkuCisKKyAgQ2F2ZWF0IGhlcmU6IFRoaXMgZHJpdmVyIG9ubHkgd29ya3Mgb24gYmlkaXJlY3Rpb25hbCBwYXJhbGxlbCBwb3J0cy4gSWYKK3lvdXIgcGFyYWxsZWwgcG9ydCBpcyByZWNlbnQgZW5vdWdoLCB5b3Ugc2hvdWxkIGhhdmUgbm8gdHJvdWJsZSB3aXRoIHRoaXMuCitPbGQgcGFyYWxsZWwgcG9ydHMgbWF5IG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKworICAnVHlwZScgaXMgdGhlIHR5cGUgb2Ygam95c3RpY2sgb3IgcGFkIGF0dGFjaGVkOgorCisJVHlwZSB8IEpveXN0aWNrL1BhZAorCS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAwICB8IE5vbmUKKwkgIDEgIHwgTXVsdGlzeXN0ZW0gMS1idXR0b24gam95c3RpY2sKKwkgIDIgIHwgTXVsdGlzeXN0ZW0gMi1idXR0b24gam95c3RpY2sKKwkgIDMgIHwgR2VuZXNpcyBwYWQgKDMrMSBidXR0b25zKQorCSAgNSAgfCBHZW5lc2lzIHBhZCAoNSsxIGJ1dHRvbnMpCisJICA2ICB8IEdlbmVzaXMgcGFkICg2KzIgYnV0dG9ucykKKwkgIDcgIHwgU2F0dXJuIHBhZCAoOCBidXR0b25zKQorCSAgOCAgfCBNdWx0aXN5c3RlbSAxLWJ1dHRvbiBqb3lzdGljayAodjAuOC4wLjIgcGluLW91dCkKKwkgIDkgIHwgVHdvIE11bHRpc3lzdGVtIDEtYnV0dG9uIGpveXN0aWNrcyAodjAuOC4wLjIgcGluLW91dCkgCisJIDEwICB8IEFtaWdhIENEMzIgcGFkCisKKyAgU2hvdWxkIHlvdSB3YW50IHRvIHVzZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGpveXN0aWNrcy9wYWRzIGF0IG9uY2UsIHlvdQorY2FuIHVzZSBkYjkuZGV2MiBhbmQgZGI5LmRldjMgYXMgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyBmb3IgdHdvCittb3JlIGpveXN0aWNrcy9wYWRzLgorCiszLjMgdHVyYm9ncmFmeC5jCit+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSB0dXJib2dyYWZ4LmMgZHJpdmVyIHVzZXMgYSB2ZXJ5IHNpbXBsZSBrZXJuZWwvbW9kdWxlIGNvbW1hbmQgbGluZToKKworCXR1cmJvZ3JhZngubWFwPXBvcnQsanMxLGpzMixqczMsanM0LGpzNSxqczYsanM3CisKKyAgV2hlcmUgJ3BvcnQnIGlzIHRoZSBudW1iZXIgb2YgdGhlIHBhcnBvcnQgaW50ZXJmYWNlIChlZy4gMCBmb3IgcGFycG9ydDApLgorCisgICdqc1gnIGlzIHRoZSBudW1iZXIgb2YgYnV0dG9ucyB0aGUgTXVsdGlzeXN0ZW0gam95c3RpY2tzIGNvbm5lY3RlZCB0byB0aGUKK2ludGVyZmFjZSBwb3J0cyAxLTcgaGF2ZS4gRm9yIGEgc3RhbmRhcmQgbXVsdGlzeXN0ZW0gam95c3RpY2ssIHRoaXMgaXMgMS4KKworICBTaG91bGQgeW91IHdhbnQgdG8gdXNlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgaW50ZXJmYWNlcyBhdCBvbmNlLCB5b3UgY2FuCit1c2UgdHVyYm9ncmFmeC5tYXAyIGFuZCB0dXJib2dyYWZ4Lm1hcDMgYXMgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycworZm9yIHR3byBtb3JlIGludGVyZmFjZXMuCisKKzMuNCBQQyBwYXJhbGxlbCBwb3J0IHBpbm91dAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgICBBdCB0aGUgUEM6ICAgICBcIDEzIDEyIDExIDEwICA5ICA4ICA3ICA2ICA1ICA0ICAzICAyICAxIC8KKyAgICAgICAgICAgICAgICAgICBcICAyNSAyNCAyMyAyMiAyMSAyMCAxOSAxOCAxNyAxNiAxNSAxNCAvCisgICAgICAgICAgICAgICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworCSAgUGluIHwgTmFtZSAgICB8IERlc2NyaXB0aW9uCisJfn5+fn5+fH5+fn5+fn5+fnx+fn5+fn5+fn5+CisJICAgIDEgfCAvU1RST0JFIHwgU3Ryb2JlCisJICAyLTkgfCBEMC1ENyAgIHwgRGF0YSBCaXQgMC03CisJICAgMTAgfCAvQUNLICAgIHwgQWNrbm93bGVkZ2UKKwkgICAxMSB8IEJVU1kgICAgfCBCdXN5CisJICAgMTIgfCBQRSAgICAgIHwgUGFwZXIgRW5kCisJICAgMTMgfCBTRUxJTiAgIHwgU2VsZWN0IEluCisJICAgMTQgfCAvQVVUT0ZEIHwgQXV0b2ZlZWQKKwkgICAxNSB8IC9FUlJPUiAgfCBFcnJvcgorCSAgIDE2IHwgL0lOSVQgICB8IEluaXRpYWxpemUKKwkgICAxNyB8IC9TRUwgICAgfCBTZWxlY3QKKwkxOC0yNSB8IEdORCAgICAgfCBTaWduYWwgR3JvdW5kCisKKzMuNSBFbmQKK35+fn5+fn4KKyAgVGhhdCdzIGFsbCwgZm9sa3MhIEhhdmUgZnVuIQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNiODU3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay50eHQKQEAgLTAsMCArMSw1ODggQEAKKwkJICAgICAgIExpbnV4IEpveXN0aWNrIGRyaXZlciB2Mi4wLjAKKwkgICAgICAgKGMpIDE5OTYtMjAwMCBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+CisJCQkgICAgIFNwb25zb3JlZCBieSBTdVNFCisJICAgJElkOiBqb3lzdGljay50eHQsdiAxLjEyIDIwMDIvMDMvMDMgMTI6MTM6MDcgamRlbmV1eCBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiswLiBEaXNjbGFpbWVyCit+fn5+fn5+fn5+fn5+CisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKK21vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKK1RlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyAgU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5IGUtbWFpbAorLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEB1Y3cuY3o+LCBvciBieSBwYXBlciBtYWlsOiBWb2p0ZWNoIFBhdmxpaywKK1NpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisKKyAgRm9yIHlvdXIgY29udmVuaWVuY2UsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgaXMgaW5jbHVkZWQKK2luIHRoZSBwYWNrYWdlOiBTZWUgdGhlIGZpbGUgQ09QWUlORy4KKworMS4gSW50cm8KK35+fn5+fn5+CisgIFRoZSBqb3lzdGljayBkcml2ZXIgZm9yIExpbnV4IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGEgdmFyaWV0eSBvZiBqb3lzdGlja3MKK2FuZCBzaW1pbGFyIGRldmljZXMuIEl0IGlzIGJhc2VkIG9uIGEgbGFyZ2VyIHByb2plY3QgYWltaW5nIHRvIHN1cHBvcnQgYWxsCitpbnB1dCBkZXZpY2VzIGluIExpbnV4LgorCisgIFNob3VsZCB5b3UgZW5jb3VudGVyIGFueSBwcm9ibGVtcyB3aGlsZSB1c2luZyB0aGUgZHJpdmVyLCBvciBqb3lzdGlja3MKK3RoaXMgZHJpdmVyIGNhbid0IG1ha2UgY29tcGxldGUgdXNlIG9mLCBJJ20gdmVyeSBpbnRlcmVzdGVkIGluIGhlYXJpbmcgYWJvdXQKK3RoZW0uIEJ1ZyByZXBvcnRzIGFuZCBzdWNjZXNzIHN0b3JpZXMgYXJlIGFsc28gd2VsY29tZS4KKworICBUaGUgaW5wdXQgcHJvamVjdCB3ZWJzaXRlIGlzIGF0OgorCisJaHR0cDovL3d3dy5zdXNlLmN6L2RldmVsb3BtZW50L2lucHV0LworCWh0dHA6Ly9hdHJleS5rYXJsaW4ubWZmLmN1bmkuY3ovfnZvanRlY2gvaW5wdXQvCisKKyAgVGhlcmUgaXMgYWxzbyBhIG1haWxpbmcgbGlzdCBmb3IgdGhlIGRyaXZlciBhdDoKKworCWxpc3Rwcm9jQGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jegorCitzZW5kICJzdWJzY3JpYmUgbGludXgtam95c3RpY2sgWW91ciBOYW1lIiB0byBzdWJzY3JpYmUgdG8gaXQuCisKKzIuIFVzYWdlCit+fn5+fn5+fgorICBGb3IgYmFzaWMgdXNhZ2UgeW91IGp1c3QgY2hvb3NlIHRoZSByaWdodCBvcHRpb25zIGluIGtlcm5lbCBjb25maWcgYW5kCit5b3Ugc2hvdWxkIGJlIHNldC4KKworMi4xIGlucHV0dXRpbHMKK35+fn5+fn5+fn5+fn5+CitGb3IgdGVzdGluZyBhbmQgb3RoZXIgcHVycG9zZXMgKGZvciBleGFtcGxlIHNlcmlhbCBkZXZpY2VzKSwgYSBzZXQgb2YKK3V0aWxpdGllcyBpcyBhdmFpbGFibGUgYXQgdGhlIGFib3ZlbWVudGlvbmVkIHdlYnNpdGUuIEkgc3VnZ2VzdCB5b3UgZG93bmxvYWQKK2FuZCBpbnN0YWxsIGl0IGJlZm9yZSBnb2luZyBvbi4KKworMi4yIERldmljZSBub2Rlcworfn5+fn5+fn5+fn5+fn5+fgorRm9yIGFwcGxpY2F0aW9ucyB0byBiZSBhYmxlIHRvIHVzZSB0aGUgam95c3RpY2tzLCBpbiB5b3UgZG9uJ3QgdXNlIGRldmZzLAoreW91J2xsIGhhdmUgdG8gbWFudWFsbHkgY3JlYXRlIHRoZXNlIG5vZGVzIGluIC9kZXY6CisKK2NkIC9kZXYKK3JtIGpzKgorbWtkaXIgaW5wdXQKK21rbm9kIGlucHV0L2pzMCBjIDEzIDAKK21rbm9kIGlucHV0L2pzMSBjIDEzIDEKK21rbm9kIGlucHV0L2pzMiBjIDEzIDIKK21rbm9kIGlucHV0L2pzMyBjIDEzIDMKK2xuIC1zIGlucHV0L2pzMCBqczAKK2xuIC1zIGlucHV0L2pzMSBqczEKK2xuIC1zIGlucHV0L2pzMiBqczIKK2xuIC1zIGlucHV0L2pzMyBqczMKKworRm9yIHRlc3Rpbmcgd2l0aCBpbnB1dHV0aWxzIGl0J3MgYWxzbyBjb252ZW5pZW50IHRvIGNyZWF0ZSB0aGVzZToKKworbWtub2QgaW5wdXQvZXZlbnQwIGMgMTMgNjQKK21rbm9kIGlucHV0L2V2ZW50MSBjIDEzIDY1Citta25vZCBpbnB1dC9ldmVudDIgYyAxMyA2NgorbWtub2QgaW5wdXQvZXZlbnQzIGMgMTMgNjcKKworMi40IE1vZHVsZXMgbmVlZGVkIAorfn5+fn5+fn5+fn5+fn5+fn5+CisgIEZvciBhbGwgam95c3RpY2sgZHJpdmVycyB0byBmdW5jdGlvbiwgeW91J2xsIG5lZWQgdGhlIHVzZXJsYW5kIGludGVyZmFjZQorbW9kdWxlIGluIGtlcm5lbCwgZWl0aGVyIGxvYWRlZCBvciBjb21waWxlZCBpbjoKKworCW1vZHByb2JlIGpveWRldgorCisgIEZvciBnYW1lcG9ydCBqb3lzdGlja3MsIHlvdSdsbCBoYXZlIHRvIGxvYWQgdGhlIGdhbWVwb3J0IGRyaXZlciBhcyB3ZWxsOworCisJbW9kcHJvYmUgbnM1NTgKKworICBBbmQgZm9yIHNlcmlhbCBwb3J0IGpveXN0aWNrcywgeW91J2xsIG5lZWQgdGhlIHNlcmlhbCBpbnB1dCBsaW5lCitkaXNjaXBsaW5lIG1vZHVsZSBsb2FkZWQgYW5kIHRoZSBpbnB1dGF0dGFjaCB1dGlsaXR5IHN0YXJ0ZWQ6CisKKwltb2Rwcm9iZSBzZXJwb3J0CisJaW5wdXRhdHRhY2ggLXh4eCAvZGV2L3R0cy9YICYKKworICBJbiBhZGRpdGlvbiB0byB0aGF0LCB5b3UnbGwgbmVlZCB0aGUgam95c3RpY2sgZHJpdmVyIG1vZHVsZSBpdHNlbGYsIG1vc3QKK3VzdWFsbHkgeW91J2xsIGhhdmUgYW4gYW5hbG9nIGpveXN0aWNrOgorCisJbW9kcHJvYmUgYW5hbG9nCisJCisgIEZvciBhdXRvbWF0aWMgbW9kdWxlIGxvYWRpbmcsIHNvbWV0aGluZyBsaWtlIHRoaXMgbWlnaHQgd29yayAtIHRhaWxvciB0bworeW91ciBuZWVkczoKKworCWFsaWFzIHR0eS1sZGlzYy0yIHNlcnBvcnQKKwlhbGlhcyBjaGFyLW1ham9yLTEzIGlucHV0CisJYWJvdmUgaW5wdXQgam95ZGV2IG5zNTU4IGFuYWxvZworCW9wdGlvbnMgYW5hbG9nIG1hcD1nYW1lcGFkLG5vbmUsMmJ0bgorCisyLjUgVmVyaWZ5aW5nIHRoYXQgaXQgd29ya3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBGb3IgdGVzdGluZyB0aGUgam95c3RpY2sgZHJpdmVyIGZ1bmN0aW9uYWxpdHksIHRoZXJlIGlzIHRoZSBqc3Rlc3QKK3Byb2dyYW0gaW4gdGhlIHV0aWxpdGllcyBwYWNrYWdlLiBZb3UgcnVuIGl0IGJ5IHR5cGluZzoKKworCWpzdGVzdCAvZGV2L2pzMAorCisgIEFuZCBpdCBzaG91bGQgc2hvdyBhIGxpbmUgd2l0aCB0aGUgam95c3RpY2sgdmFsdWVzLCB3aGljaCB1cGRhdGUgYXMgeW91Cittb3ZlIHRoZSBzdGljaywgYW5kIHByZXNzIGl0cyBidXR0b25zLiBUaGUgYXhlcyBzaG91bGQgYWxsIGJlIHplcm8gd2hlbiB0aGUKK2pveXN0aWNrIGlzIGluIHRoZSBjZW50ZXIgcG9zaXRpb24uIFRoZXkgc2hvdWxkIG5vdCBqaXR0ZXIgYnkgdGhlbXNlbHZlcyB0bworb3RoZXIgY2xvc2UgdmFsdWVzLCBhbmQgdGhleSBhbHNvIHNob3VsZCBiZSBzdGVhZHkgaW4gYW55IG90aGVyIHBvc2l0aW9uIG9mCit0aGUgc3RpY2suIFRoZXkgc2hvdWxkIGhhdmUgdGhlIGZ1bGwgcmFuZ2UgZnJvbSAtMzI3NjcgdG8gMzI3NjcuIElmIGFsbCB0aGlzCitpcyBtZXQsIHRoZW4gaXQncyBhbGwgZmluZSwgYW5kIHlvdSBjYW4gcGxheSB0aGUgZ2FtZXMuIDopCisKKyAgSWYgaXQncyBub3QsIHRoZW4gdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtLiBUcnkgdG8gY2FsaWJyYXRlIHRoZSBqb3lzdGljaywKK2FuZCBpZiBpdCBzdGlsbCBkb2Vzbid0IHdvcmssIHJlYWQgdGhlIGRyaXZlcnMgc2VjdGlvbiBvZiB0aGlzIGZpbGUsIHRoZQordHJvdWJsZXNob290aW5nIHNlY3Rpb24sIGFuZCB0aGUgRkFRLgorCisyLjYuIENhbGlicmF0aW9uCit+fn5+fn5+fn5+fn5+fn5+CisgIEZvciBtb3N0IGpveXN0aWNrcyB5b3Ugd29uJ3QgbmVlZCBhbnkgbWFudWFsIGNhbGlicmF0aW9uLCBzaW5jZSB0aGUKK2pveXN0aWNrIHNob3VsZCBiZSBhdXRvY2FsaWJyYXRlZCBieSB0aGUgZHJpdmVyIGF1dG9tYWdpY2FsbHkuIEhvd2V2ZXIsIHdpdGgKK3NvbWUgYW5hbG9nIGpveXN0aWNrcywgdGhhdCBlaXRoZXIgZG8gbm90IHVzZSBsaW5lYXIgcmVzaXN0b3JzLCBvciBpZiB5b3UKK3dhbnQgYmV0dGVyIHByZWNpc2lvbiwgeW91IGNhbiB1c2UgdGhlIGpzY2FsIHByb2dyYW0KKworCWpzY2FsIC1jIC9kZXYvanMwCisKKyBpbmNsdWRlZCBpbiB0aGUgam95c3RpY2sgcGFja2FnZSB0byBzZXQgYmV0dGVyIGNvcnJlY3Rpb24gY29lZmZpY2llbnRzIHRoYW4KK3doYXQgdGhlIGRyaXZlciB3b3VsZCBjaG9vc2UgaXRzZWxmLgorCisgIEFmdGVyIGNhbGlicmF0aW5nIHRoZSBqb3lzdGljayB5b3UgY2FuIHZlcmlmeSBpZiB5b3UgbGlrZSB0aGUgbmV3CitjYWxpYnJhdGlvbiB1c2luZyB0aGUganN0ZXN0IGNvbW1hbmQsIGFuZCBpZiB5b3UgZG8sIHlvdSB0aGVuIGNhbiBzYXZlIHRoZQorY29ycmVjdGlvbiBjb2VmZmljaWVudHMgaW50byBhIGZpbGUKKworCWpzY2FsIC1wIC9kZXYvanMwID4gL2V0Yy9qb3lzdGljay5jYWwKKworICBBbmQgYWRkIGEgbGluZSB0byB5b3VyIHJjIHNjcmlwdCBleGVjdXRpbmcgdGhhdCBmaWxlCisKKwlzb3VyY2UgL2V0Yy9qb3lzdGljay5jYWwKKworICBUaGlzIHdheSwgYWZ0ZXIgdGhlIG5leHQgcmVib290IHlvdXIgam95c3RpY2sgd2lsbCByZW1haW4gY2FsaWJyYXRlZC4gWW91CitjYW4gYWxzbyBhZGQgdGhlIGpzY2FsIC1wIGxpbmUgdG8geW91ciBzaHV0ZG93biBzY3JpcHQuCisKKworMy4gSFcgc3BlY2lmaWMgZHJpdmVyIGluZm9ybWF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0luIHRoaXMgc2VjdGlvbiBlYWNoIG9mIHRoZSBzZXBhcmF0ZSBoYXJkd2FyZSBzcGVjaWZpYyBkcml2ZXJzIGlzIGRlc2NyaWJlZC4KKworMy4xIEFuYWxvZyBqb3lzdGlja3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBhbmFsb2cuYyB1c2VzIHRoZSBzdGFuZGFyZCBhbmFsb2cgaW5wdXRzIG9mIHRoZSBnYW1lcG9ydCwgYW5kIHRodXMKK3N1cHBvcnRzIGFsbCBzdGFuZGFyZCBqb3lzdGlja3MgYW5kIGdhbWVwYWRzLiBJdCB1c2VzIGEgdmVyeSBhZHZhbmNlZAorcm91dGluZSBmb3IgdGhpcywgYWxsb3dpbmcgZm9yIGRhdGEgcHJlY2lzaW9uIHRoYXQgY2FuJ3QgYmUgZm91bmQgb24gYW55CitvdGhlciBzeXN0ZW0uCisKKyAgSXQgYWxzbyBzdXBwb3J0cyBleHRlbnNpb25zIGxpa2UgYWRkaXRpb25hbCBoYXRzIGFuZCBidXR0b25zIGNvbXBhdGlibGUKK3dpdGggQ0ggRmxpZ2h0c3RpY2sgUHJvLCBUaHJ1c3RNYXN0ZXIgRkNTIG9yIDYgYW5kIDggYnV0dG9uIGdhbWVwYWRzLiBTYWl0ZWsKK0N5Ym9yZyAnZGlnaXRhbCcgam95c3RpY2tzIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgYmVjYXVzZQordGhleSdyZSBiYXNpY2FsbHkgc291cGVkIHVwIENIRiBzdGlja3MuCisKKyAgSG93ZXZlciB0aGUgb25seSB0eXBlcyB0aGF0IGNhbiBiZSBhdXRvZGV0ZWN0ZWQgYXJlOgorCisqIDItYXhpcywgNC1idXR0b24gam95c3RpY2sKKyogMy1heGlzLCA0LWJ1dHRvbiBqb3lzdGljaworKiA0LWF4aXMsIDQtYnV0dG9uIGpveXN0aWNrCisqIFNhaXRlayBDeWJvcmcgJ2RpZ2l0YWwnIGpveXN0aWNrcworCisgIEZvciBvdGhlciBqb3lzdGljayB0eXBlcyAobW9yZS9sZXNzIGF4ZXMsIGhhdHMsIGFuZCBidXR0b25zKSBzdXBwb3J0Cit5b3UnbGwgbmVlZCB0byBzcGVjaWZ5IHRoZSB0eXBlcyBlaXRoZXIgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgb3Igb24gdGhlCittb2R1bGUgY29tbWFuZCBsaW5lLCB3aGVuIGluc2VydGluZyBhbmFsb2cgaW50byB0aGUga2VybmVsLiBUaGUKK3BhcmFtZXRlcnMgYXJlOgorCisJYW5hbG9nLm1hcD08dHlwZTE+LDx0eXBlMj4sPHR5cGUzPiwuLi4uCisKKyAgJ3R5cGUnIGlzIHR5cGUgb2YgdGhlIGpveXN0aWNrIGZyb20gdGhlIHRhYmxlIGJlbG93LCBkZWZpbmluZyBqb3lzdGlja3MKK3ByZXNlbnQgb24gZ2FtZXBvcnRzIGluIHRoZSBzeXN0ZW0sIHN0YXJ0aW5nIHdpdGggZ2FtZXBvcnQwLCBzZWNvbmQgJ3R5cGUnCitlbnRyeSBkZWZpbmluZyBqb3lzdGljayBvbiBnYW1lcG9ydDEgYW5kIHNvIG9uLgorCisJVHlwZSAgICAgfCBNZWFuaW5nCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlub25lICAgICB8IE5vIGFuYWxvZyBqb3lzdGljayBvbiB0aGF0IHBvcnQKKwlhdXRvICAgICB8IEF1dG9kZXRlY3Qgam95c3RpY2sKKwkyYnRuICAgICB8IDItYnV0dG9uIG4tYXhpcyBqb3lzdGljaworCXktam95ICAgIHwgVHdvIDItYnV0dG9uIDItYXhpcyBqb3lzdGlja3Mgb24gYW4gWS1jYWJsZQorCXktcGFkICAgIHwgVHdvIDItYnV0dG9uIDItYXhpcyBnYW1lcGFkcyBvbiBhbiBZLWNhYmxlCisJZmNzICAgICAgfCBUaHJ1c3RtYXN0ZXIgRkNTIGNvbXBhdGlibGUgam95c3RpY2sKKwljaGYgICAgICB8IEpveXN0aWNrIHdpdGggYSBDSCBGbGlnaHRzdGljayBjb21wYXRpYmxlIGhhdAorCWZ1bGxjaGYgIHwgQ0ggRmxpZ2h0c3RpY2sgY29tcGF0aWJsZSB3aXRoIHR3byBoYXRzIGFuZCA2IGJ1dHRvbnMKKwlnYW1lcGFkICB8IDQvNi1idXR0b24gbi1heGlzIGdhbWVwYWQKKwlnYW1lcGFkOCB8IDgtYnV0dG9uIDItYXhpcyBnYW1lcGFkCisKKyAgSW4gY2FzZSB5b3VyIGpveXN0aWNrIGRvZXNuJ3QgZml0IGluIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcywgeW91IGNhbgorc3BlY2lmeSB0aGUgdHlwZSBhcyBhIG51bWJlciBieSBjb21iaW5pbmcgdGhlIGJpdHMgaW4gdGhlIHRhYmxlIGJlbG93LiBUaGlzCitpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IGFyZSB5b3UgZG9pbmcuIEl0J3Mgbm90CitkYW5nZXJvdXMsIGJ1dCBub3Qgc2ltcGxlIGVpdGhlci4KKworCUJpdCB8IE1lYW5pbmcKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAwICB8IEF4aXMgWDEKKwkgMSAgfCBBeGlzIFkxCisJIDIgIHwgQXhpcyBYMgorCSAzICB8IEF4aXMgWTIKKwkgNCAgfCBCdXR0b24gQQorCSA1ICB8IEJ1dHRvbiBCCisJIDYgIHwgQnV0dG9uIEMKKwkgNyAgfCBCdXR0b24gRAorCSA4ICB8IENIRiBCdXR0b25zIFggYW5kIFkKKwkgOSAgfCBDSEYgSGF0IDEKKwkxMCAgfCBDSEYgSGF0IDIKKwkxMSAgfCBGQ1MgSGF0CisJMTIgIHwgUGFkIEJ1dHRvbiBYCisJMTMgIHwgUGFkIEJ1dHRvbiBZCisJMTQgIHwgUGFkIEJ1dHRvbiBVCisJMTUgIHwgUGFkIEJ1dHRvbiBWCisJMTYgIHwgU2FpdGVrIEYxLUY0IEJ1dHRvbnMKKwkxNyAgfCBTYWl0ZWsgRGlnaXRhbCBNb2RlCisJMTkgIHwgR2FtZVBhZAorCTIwICB8IEpveTIgQXhpcyBYMQorCTIxICB8IEpveTIgQXhpcyBZMQorCTIyICB8IEpveTIgQXhpcyBYMgorCTIzICB8IEpveTIgQXhpcyBZMgorCTI0ICB8IEpveTIgQnV0dG9uIEEKKwkyNSAgfCBKb3kyIEJ1dHRvbiBCCisJMjYgIHwgSm95MiBCdXR0b24gQworCTI3ICB8IEpveTIgQnV0dG9uIEQKKwkzMSAgfCBKb3kyIEdhbWVQYWQKKworMy4yIE1pY3Jvc29mdCBTaWRlV2luZGVyIGpveXN0aWNrcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBNaWNyb3NvZnQgJ0RpZ2l0YWwgT3ZlcmRyaXZlJyBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHNpZGV3aW5kZXIuYworbW9kdWxlLiBBbGwgY3VycmVudGx5IHN1cHBvcnRlZCBqb3lzdGlja3M6CisKKyogTWljcm9zb2Z0IFNpZGVXaW5kZXIgM0QgUHJvCisqIE1pY3Jvc29mdCBTaWRlV2luZGVyIEZvcmNlIEZlZWRiYWNrIFBybworKiBNaWNyb3NvZnQgU2lkZVdpbmRlciBGb3JjZSBGZWVkYmFjayBXaGVlbAorKiBNaWNyb3NvZnQgU2lkZVdpbmRlciBGcmVlU3R5bGUgUHJvIAorKiBNaWNyb3NvZnQgU2lkZVdpbmRlciBHYW1lUGFkICh1cCB0byBmb3VyLCBjaGFpbmVkKQorKiBNaWNyb3NvZnQgU2lkZVdpbmRlciBQcmVjaXNpb24gUHJvIAorKiBNaWNyb3NvZnQgU2lkZVdpbmRlciBQcmVjaXNpb24gUHJvIFVTQiAKKworICBhcmUgYXV0b2RldGVjdGVkLCBhbmQgdGh1cyBubyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgbmVlZGVkLgorCisgIFRoZXJlIGlzIG9uZSBjYXZlYXQgd2l0aCB0aGUgM0QgUHJvLiBUaGVyZSBhcmUgOSBidXR0b25zIHJlcG9ydGVkLAorYWx0aG91Z2ggdGhlIGpveXN0aWNrIGhhcyBvbmx5IDguIFRoZSA5dGggYnV0dG9uIGlzIHRoZSBtb2RlIHN3aXRjaCBvbiB0aGUKK3JlYXIgc2lkZSBvZiB0aGUgam95c3RpY2suIEhvd2V2ZXIsIG1vdmluZyBpdCwgeW91J2xsIHJlc2V0IHRoZSBqb3lzdGljaywKK2FuZCBtYWtlIGl0IHVucmVzcG9uc2l2ZSBmb3IgYWJvdXQgYSBvbmUgdGhpcmQgb2YgYSBzZWNvbmQuIEZ1cnRoZXJtb3JlLCB0aGUKK2pveXN0aWNrIHdpbGwgYWxzbyByZS1jZW50ZXIgaXRzZWxmLCB0YWtpbmcgdGhlIHBvc2l0aW9uIGl0IHdhcyBpbiBkdXJpbmcKK3RoaXMgdGltZSBhcyBhIG5ldyBjZW50ZXIgcG9zaXRpb24uIFVzZSBpdCBpZiB5b3Ugd2FudCwgYnV0IHRoaW5rIGZpcnN0LgorCisgIFRoZSBTaWRlV2luZGVyIFN0YW5kYXJkIGlzIG5vdCBhIGRpZ2l0YWwgam95c3RpY2ssIGFuZCB0aHVzIGlzIHN1cHBvcnRlZAorYnkgdGhlIGFuYWxvZyBkcml2ZXIgZGVzY3JpYmVkIGFib3ZlLiAKKworMy4zIExvZ2l0ZWNoIEFESSBkZXZpY2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgTG9naXRlY2ggQURJIHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSB0aGUgYWRpLmMgbW9kdWxlLiBJdCBzaG91bGQgc3VwcG9ydAorYW55IExvZ2l0ZWNoIGRldmljZSB1c2luZyB0aGlzIHByb3RvY29sLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQKK3RvOgorCisqIExvZ2l0ZWNoIEN5YmVyTWFuIDIKKyogTG9naXRlY2ggVGh1bmRlclBhZCBEaWdpdGFsCisqIExvZ2l0ZWNoIFdpbmdNYW4gRXh0cmVtZSBEaWdpdGFsCisqIExvZ2l0ZWNoIFdpbmdNYW4gRm9ybXVsYQorKiBMb2dpdGVjaCBXaW5nTWFuIEludGVyY2VwdG9yCisqIExvZ2l0ZWNoIFdpbmdNYW4gR2FtZVBhZAorKiBMb2dpdGVjaCBXaW5nTWFuIEdhbWVQYWQgVVNCCisqIExvZ2l0ZWNoIFdpbmdNYW4gR2FtZVBhZCBFeHRyZW1lCisqIExvZ2l0ZWNoIFdpbmdNYW4gRXh0cmVtZSBEaWdpdGFsIDNECisKKyAgQURJIGRldmljZXMgYXJlIGF1dG9kZXRlY3RlZCwgYW5kIHRoZSBkcml2ZXIgc3VwcG9ydHMgdXAgdG8gdHdvIChhbnkKK2NvbWJpbmF0aW9uIG9mKSBkZXZpY2VzIG9uIGEgc2luZ2xlIGdhbWVwb3J0LCB1c2luZyBhbiBZLWNhYmxlIG9yIGNoYWluZWQKK3RvZ2V0aGVyLgorCisgIExvZ2l0ZWNoIFdpbmdNYW4gSm95c3RpY2ssIExvZ2l0ZWNoIFdpbmdNYW4gQXR0YWNrLCBMb2dpdGVjaCBXaW5nTWFuCitFeHRyZW1lIGFuZCBMb2dpdGVjaCBXaW5nTWFuIFRodW5kZXJQYWQgYXJlIG5vdCBkaWdpdGFsIGpveXN0aWNrcyBhbmQgYXJlCitoYW5kbGVkIGJ5IHRoZSBhbmFsb2cgZHJpdmVyIGRlc2NyaWJlZCBhYm92ZS4gTG9naXRlY2ggV2luZ01hbiBXYXJyaW9yIGFuZAorTG9naXRlY2ggTWFnZWxsYW4gYXJlIHN1cHBvcnRlZCBieSBzZXJpYWwgZHJpdmVycyBkZXNjcmliZWQgYmVsb3cuICBMb2dpdGVjaAorV2luZ01hbiBGb3JjZSBhbmQgTG9naXRlY2ggV2luZ01hbiBGb3JtdWxhIEZvcmNlIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitJLUZvcmNlIGRyaXZlciBkZXNjcmliZWQgYmVsb3cuIExvZ2l0ZWNoIEN5YmVyTWFuIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorCiszLjQgR3JhdmlzIEdySVAKK35+fn5+fn5+fn5+fn5+fgorICBHcmF2aXMgR3JJUCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGdyaXAuYyBtb2R1bGUuIEl0IGN1cnJlbnRseQorc3VwcG9ydHM6CisKKyogR3JhdmlzIEdhbWVQYWQgUHJvCisqIEdyYXZpcyBCbGFja0hhd2sgRGlnaXRhbAorKiBHcmF2aXMgWHRlcm1pbmF0b3IKKyogR3JhdmlzIFh0ZXJtaW5hdG9yIER1YWxDb250cm9sCisKKyAgQWxsIHRoZXNlIGRldmljZXMgYXJlIGF1dG9kZXRlY3RlZCwgYW5kIHlvdSBjYW4gZXZlbiB1c2UgYW55IGNvbWJpbmF0aW9uCitvZiB1cCB0byB0d28gb2YgdGhlc2UgcGFkcyBlaXRoZXIgY2hhaW5lZCB0b2dldGhlciBvciB1c2luZyBhbiBZLWNhYmxlIG9uIGEKK3NpbmdsZSBnYW1lcG9ydC4KKworR3JJUCBNdWx0aVBvcnQgaXNuJ3Qgc3VwcG9ydGVkIHlldC4gR3JhdmlzIFN0aW5nZXIgaXMgYSBzZXJpYWwgZGV2aWNlIGFuZCBpcworc3VwcG9ydGVkIGJ5IHRoZSBzdGluZ2VyIGRyaXZlci4gT3RoZXIgR3JhdmlzIGpveXN0aWNrcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZQorYW5hbG9nIGRyaXZlci4KKworMy41IEZQR2FtaW5nIEEzRCBhbmQgTWFkQ2F0eiBBM0QKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBBc3Nhc3NpbiAzRCBwcm90b2NvbCBjcmVhdGVkIGJ5IEZQR2FtaW5nLCBpcyB1c2VkIGJvdGggYnkgRlBHYW1pbmcKK3RoZW1zZWx2ZXMgYW5kIGlzIGxpY2Vuc2VkIHRvIE1hZENhdHouIEEzRCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCithM2QuYyBtb2R1bGUuIEl0IGN1cnJlbnRseSBzdXBwb3J0czoKKworKiBGUEdhbWluZyBBc3Nhc3NpbiAzRAorKiBNYWRDYXR6IFBhbnRoZXIKKyogTWFkQ2F0eiBQYW50aGVyIFhMCisKKyAgQWxsIHRoZXNlIGRldmljZXMgYXJlIGF1dG9kZXRlY3RlZC4gQmVjYXVzZSB0aGUgQXNzYXNzaW4gM0QgYW5kIHRoZSBQYW50aGVyCithbGxvdyBjb25uZWN0aW5nIGFuYWxvZyBqb3lzdGlja3MgdG8gdGhlbSwgeW91J2xsIG5lZWQgdG8gbG9hZCB0aGUgYW5hbG9nCitkcml2ZXIgYXMgd2VsbCB0byBoYW5kbGUgdGhlIGF0dGFjaGVkIGpveXN0aWNrcy4KKworICBUaGUgdHJhY2tiYWxsIHNob3VsZCB3b3JrIHdpdGggVVNCIG1vdXNlZGV2IG1vZHVsZSBhcyBhIG5vcm1hbCBtb3VzZS4gU2VlCit0aGUgVVNCIGRvY3VtZW50YXRpb24gZm9yIGhvdyB0byBzZXR1cCBhbiBVU0IgbW91c2UuCisKKzMuNiBUaHJ1c3RNYXN0ZXIgRGlyZWN0Q29ubmVjdCAoQlNQKQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBUTSBEaXJlY3RDb25uZWN0IChCU1ApIHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSB0aGUgdG1kYy5jCittb2R1bGUuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bzoKKworKiBUaHJ1c3RNYXN0ZXIgTWlsbGVuaXVtIDNEIEluY2VwdG9yCisqIFRocnVzdE1hc3RlciAzRCBSYWdlIFBhZAorKiBUaHJ1c3RNYXN0ZXIgRnVzaW9uIERpZ2l0YWwgR2FtZSBQYWQKKworICBEZXZpY2VzIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQsIGJ1dCBob3BlZnVsbHkgd29ya2luZyBhcmU6CisKKyogVGhydXN0TWFzdGVyIEZyYWdNYXN0ZXIKKyogVGhydXN0TWFzdGVyIEF0dGFjayBUaHJvdHRsZQorCisgIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSwgY29udGFjdCBtZS4KKworICBUTURDIGRldmljZXMgYXJlIGF1dG9kZXRlY3RlZCwgYW5kIHRodXMgbm8gcGFyYW1ldGVycyB0byB0aGUgbW9kdWxlCithcmUgbmVlZGVkLiBVcCB0byB0d28gVE1EQyBkZXZpY2VzIGNhbiBiZSBjb25uZWN0ZWQgdG8gb25lIGdhbWVwb3J0LCB1c2luZworYW4gWS1jYWJsZS4KKworMy43IENyZWF0aXZlIExhYnMgQmxhc3Rlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgQmxhc3RlciBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNvYnJhLmMgbW9kdWxlLiBJdCBzdXBwb3J0cyBvbmx5Cit0aGU6CisKKyogQ3JlYXRpdmUgQmxhc3RlciBHYW1lUGFkIENvYnJhCisKKyAgVXAgdG8gdHdvIG9mIHRoZXNlIGNhbiBiZSB1c2VkIG9uIGEgc2luZ2xlIGdhbWVwb3J0LCB1c2luZyBhbiBZLWNhYmxlLgorCiszLjggR2VuaXVzIERpZ2l0YWwgam95c3RpY2tzIAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgR2VuaXVzIGRpZ2l0YWxseSBjb21tdW5pY2F0aW5nIGpveXN0aWNrcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBnZjJrLmMKK21vZHVsZS4gVGhpcyBpbmNsdWRlczoKKworKiBHZW5pdXMgRmxpZ2h0MjAwMCBGLTIzIGpveXN0aWNrIAorKiBHZW5pdXMgRmxpZ2h0MjAwMCBGLTMxIGpveXN0aWNrIAorKiBHZW5pdXMgRy0wOUQgZ2FtZXBhZAorCisgIE90aGVyIEdlbml1cyBkaWdpdGFsIGpveXN0aWNrcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQsIGJ1dCBzdXBwb3J0IGNhbiBiZQorYWRkZWQgZmFpcmx5IGVhc2lseS4KKworMy45IEludGVyQWN0IERpZ2l0YWwgam95c3RpY2tzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIEludGVyQWN0IGRpZ2l0YWxseSBjb21tdW5pY2F0aW5nIGpveXN0aWNrcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZQoraW50ZXJhY3QuYyBtb2R1bGUuIFRoaXMgaW5jbHVkZXM6CisKKyogSW50ZXJBY3QgSGFtbWVySGVhZC9GWCBnYW1lcGFkCisqIEludGVyQWN0IFByb1BhZDggZ2FtZXBhZCAKKworICBPdGhlciBJbnRlckFjdCBkaWdpdGFsIGpveXN0aWNrcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQsIGJ1dCBzdXBwb3J0IGNhbiBiZSAKK2FkZGVkIGZhaXJseSBlYXNpbHkuCisKKzMuMTAgUERQSSBMaWdodG5pbmcgNCBnYW1lY2FyZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgUERQSSBMaWdodG5pbmcgNCBnYW1lY2FyZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlnaHRuaW5nLmMgbW9kdWxlLgorT25jZSB0aGUgbW9kdWxlIGlzIGxvYWRlZCwgdGhlIGFuYWxvZyBkcml2ZXIgY2FuIGJlIHVzZWQgdG8gaGFuZGxlIHRoZQoram95c3RpY2tzLiBEaWdpdGFsbHkgY29tbXVuaWNhdGluZyBqb3lzdGljayB3aWxsIHdvcmsgb25seSBvbiBwb3J0IDAsIHdoaWxlCit1c2luZyBZLWNhYmxlcywgeW91IGNhbiBjb25uZWN0IHVwIHRvIDggYW5hbG9nIGpveXN0aWNrcyB0byBhIHNpbmdsZSBMNAorY2FyZCwgMTYgaW4gY2FzZSB5b3UgaGF2ZSB0d28gaW4geW91ciBzeXN0ZW0uCisKKzMuMTEgVHJpZGVudCA0RFdhdmUgLyBBdXJlYWwgVm9ydGV4Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBTb3VuZGNhcmRzIHdpdGggYSBUcmlkZW50IDREV2F2ZSBEWC9OWCBvciBBdXJlYWwgVm9ydGV4L1ZvcnRleDIgY2hpcHNldHMKK3Byb3ZpZGUgYW4gIkVuaGFuY2VkIEdhbWUgUG9ydCIgbW9kZSB3aGVyZSB0aGUgc291bmRjYXJkIGhhbmRsZXMgcG9sbGluZyB0aGUKK2pveXN0aWNrLiAgVGhpcyBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGUgcGNpZ2FtZS5jIG1vZHVsZS4gT25jZSBsb2FkZWQgdGhlCithbmFsb2cgZHJpdmVyIGNhbiB1c2UgdGhlIGVuaGFuY2VkIGZlYXR1cmVzIG9mIHRoZXNlIGdhbWVwb3J0cy4uCisKKzMuMTMgQ3J5c3RhbCBTb3VuZEZ1c2lvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFNvdW5kY2FyZHMgd2l0aCBDcnlzdGFsIFNvdW5kRnVzaW9uIGNoaXBzZXRzIHByb3ZpZGUgYW4gIkVuaGFuY2VkIEdhbWUKK1BvcnQiLCBtdWNoIGxpa2UgdGhlIDREV2F2ZSBvciBWb3J0ZXggYWJvdmUuIFRoaXMsIGFuZCBhbHNvIHRoZSBub3JtYWwgbW9kZQorZm9yIHRoZSBwb3J0IG9mIHRoZSBTb3VuZEZ1c2lvbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNzNDYxeC5jIG1vZHVsZS4KKworMy4xNCBTb3VuZEJsYXN0ZXIgTGl2ZSEKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgTGl2ZSEgaGFzIGEgc3BlY2lhbCBQQ0kgZ2FtZXBvcnQsIHdoaWNoLCBhbHRob3VnaCBpdCBkb2Vzbid0IHByb3ZpZGUKK2FueSAiRW5oYW5jZWQiIHN0dWZmIGxpa2UgNERXYXZlIGFuZCBmcmllbmRzLCBpcyBxdWl0ZSBhIGJpdCBmYXN0ZXIgdGhhbgoraXQncyBJU0EgY291bnRlcnBhcnRzLiBJdCBhbHNvIHJlcXVpcmVzIHNwZWNpYWwgc3VwcG9ydCwgaGVuY2UgdGhlCitlbXUxMGsxLWdwLmMgbW9kdWxlIGZvciBpdCBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbnM1NTguYyBvbmUuCisKKzMuMTUgU291bmRCbGFzdGVyIDY0IGFuZCAxMjggLSBFUzEzNzAgYW5kIEVTMTM3MSwgRVNTIFNvbG8xIGFuZCBTMyBTb25pY1ZpYmVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGVzZSBQQ0kgc291bmRjYXJkcyBoYXZlIHNwZWNpZmljIGdhbWVwb3J0cy4gVGhleSBhcmUgaGFuZGxlZCBieSB0aGUKK3NvdW5kIGRyaXZlcnMgdGhlbXNlbHZlcy4gTWFrZSBzdXJlIHlvdSBzZWxlY3QgZ2FtZXBvcnQgc3VwcG9ydCBpbiB0aGUKK2pveXN0aWNrIG1lbnUgYW5kIHNvdW5kIGNhcmQgc3VwcG9ydCBpbiB0aGUgc291bmQgbWVudSBmb3IgeW91ciBhcHByb3ByaWF0ZQorY2FyZC4KKworMy4xNiBBbWlnYQorfn5+fn5+fn5+fgorICBBbWlnYSBqb3lzdGlja3MsIGNvbm5lY3RlZCB0byBhbiBBbWlnYSwgYXJlIHN1cHBvcnRlZCBieSB0aGUgYW1pam95LmMKK2RyaXZlci4gU2luY2UgdGhleSBjYW4ndCBiZSBhdXRvZGV0ZWN0ZWQsIHRoZSBkcml2ZXIgaGFzIGEgY29tbWFuZCBsaW5lLgorCisJYW1pam95Lm1hcD08YT4sPGI+CisKKyAgYSBhbmQgYiBkZWZpbmUgdGhlIGpveXN0aWNrcyBjb25uZWN0ZWQgdG8gdGhlIEpPWTBEQVQgYW5kIEpPWTFEQVQgcG9ydHMgb2YKK3RoZSBBbWlnYS4KKworCVZhbHVlIHwgSm95c3RpY2sgdHlwZQorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgMCAgIHwgTm9uZQorCSAgMSAgIHwgMS1idXR0b24gZGlnaXRhbCBqb3lzdGljaworCisgIE5vIG1vcmUgam95c3RpY2sgdHlwZXMgYXJlIHN1cHBvcnRlZCBub3csIGJ1dCB0aGF0IHNob3VsZCBjaGFuZ2UgaW4gdGhlCitmdXR1cmUgaWYgSSBnZXQgYW4gQW1pZ2EgaW4gdGhlIHJlYWNoIG9mIG15IGZpbmdlcnMuCisKKzMuMTcgR2FtZSBjb25zb2xlIGFuZCA4LWJpdCBwYWRzIGFuZCBqb3lzdGlja3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1NlZSBqb3lzdGljay1wYXJwb3J0LnR4dCBmb3IgbW9yZSBpbmZvLgorCiszLjE4IFNwYWNlVGVjL0xhYlRlYyBkZXZpY2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFNwYWNlVGVjIHNlcmlhbCBkZXZpY2VzIGNvbW11bmljYXRlIHVzaW5nIHRoZSBTcGFjZVdhcmUgcHJvdG9jb2wuIEl0IGlzCitzdXBwb3J0ZWQgYnkgdGhlIHNwYWNlb3JiLmMgYW5kIHNwYWNlYmFsbC5jIGRyaXZlcnMuIFRoZSBkZXZpY2VzIGN1cnJlbnRseQorc3VwcG9ydGVkIGJ5IHNwYWNlb3JiLmMgYXJlOgorCisqIFNwYWNlVGVjIFNwYWNlQmFsbCBBdmVuZ2VyCisqIFNwYWNlVGVjIFNwYWNlT3JiIDM2MAorCitEZXZpY2VzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgc3BhY2ViYWxsLmMgYXJlOgorCisqIFNwYWNlVGVjIFNwYWNlQmFsbCA0MDAwIEZMWAorCisgIEluIGFkZGl0aW9uIHRvIGhhdmluZyB0aGUgc3BhY2VvcmIvc3BhY2ViYWxsIGFuZCBzZXJwb3J0IG1vZHVsZXMgaW4gdGhlCitrZXJuZWwsIHlvdSBhbHNvIG5lZWQgdG8gYXR0YWNoIGEgc2VyaWFsIHBvcnQgdG8gaXQuIHRvIGRvIHRoYXQsIHJ1biB0aGUKK2lucHV0YXR0YWNoIHByb2dyYW06CisKKwlpbnB1dGF0dGFjaCAtLXNwYWNlb3JiIC9kZXYvdHRzL3ggJgorb3IKKwlpbnB1dGF0dGFjaCAtLXNwYWNlYmFsbCAvZGV2L3R0cy94ICYKKword2hlcmUgL2Rldi90dHMveCBpcyB0aGUgc2VyaWFsIHBvcnQgd2hpY2ggdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgdG8uIEFmdGVyCitkb2luZyB0aGlzLCB0aGUgZGV2aWNlIHdpbGwgYmUgcmVwb3J0ZWQgYW5kIHdpbGwgc3RhcnQgd29ya2luZy4KKworICBUaGVyZSBpcyBvbmUgY2F2ZWF0IHdpdGggdGhlIFNwYWNlT3JiLiBUaGUgYnV0dG9uICM2LCB0aGUgb24gdGhlIGJvdHRvbQorc2lkZSBvZiB0aGUgb3JiLCBhbHRob3VnaCByZXBvcnRlZCBhcyBhbiBvcmRpbmFyeSBidXR0b24sIGNhdXNlcyBpbnRlcm5hbAorcmVjZW50ZXJpbmcgb2YgdGhlIHNwYWNlb3JiLCBtb3ZpbmcgdGhlIHplcm8gcG9pbnQgdG8gdGhlIHBvc2l0aW9uIGluIHdoaWNoCit0aGUgYmFsbCBpcyBhdCB0aGUgbW9tZW50IG9mIHByZXNzaW5nIHRoZSBidXR0b24uIFNvLCB0aGluayBmaXJzdCBiZWZvcmUKK3lvdSBiaW5kIGl0IHRvIHNvbWUgb3RoZXIgZnVuY3Rpb24uCisKK1NwYWNlVGVjIFNwYWNlQmFsbCAyMDAzIEZMWCBhbmQgMzAwMyBGTFggYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiAKKworMy4xOSBMb2dpdGVjaCBTV0lGVCBkZXZpY2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIFNXSUZUIHNlcmlhbCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHdhcnJpb3IuYyBtb2R1bGUuIEl0CitjdXJyZW50bHkgc3VwcG9ydHMgb25seSB0aGU6CisKKyogTG9naXRlY2ggV2luZ01hbiBXYXJyaW9yCisKK2J1dCBpbiB0aGUgZnV0dXJlLCBMb2dpdGVjaCBDeWJlck1hbiAodGhlIG9yaWdpbmFsIG9uZSwgbm90IENNMikgY291bGQgYmUKK3N1cHBvcnRlZCBhcyB3ZWxsLiBUbyB1c2UgdGhlIG1vZHVsZSwgeW91IG5lZWQgdG8gcnVuIGlucHV0YXR0YWNoIGFmdGVyIHlvdQoraW5zZXJ0L2NvbXBpbGUgdGhlIG1vZHVsZSBpbnRvIHlvdXIga2VybmVsOgorCisJaW5wdXRhdHRhY2ggLS13YXJyaW9yIC9kZXYvdHRzL3ggJgorCisvZGV2L3R0cy94IGlzIHRoZSBzZXJpYWwgcG9ydCB5b3VyIFdhcnJpb3IgaXMgYXR0YWNoZWQgdG8uCisKKzMuMjAgTWFnZWxsYW4gLyBTcGFjZSBNb3VzZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBNYWdlbGxhbiAob3IgU3BhY2UgTW91c2UpLCBtYW51ZmFjdHVyZWQgYnkgTG9naUNhZDNkIChmb3JtZXJseSBTcGFjZQorU3lzdGVtcyksIGZvciBtYW55IG90aGVyIGNvbXBhbmllcyAoTG9naXRlY2gsIEhQLCAuLi4pIGlzIHN1cHBvcnRlZCBieSB0aGUKK2pveS1tYWdlbGxhbiBtb2R1bGUuIEl0IGN1cnJlbnRseSBzdXBwb3J0cyBvbmx5IHRoZToKKworKiBNYWdlbGxhbiAzRAorKiBTcGFjZSBNb3VzZQorCittb2RlbHMsIHRoZSBhZGRpdGlvbmFsIGJ1dHRvbnMgb24gdGhlICdQbHVzJyB2ZXJzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuCisKKyAgVG8gdXNlIGl0LCB5b3UgbmVlZCB0byBhdHRhY2ggdGhlIHNlcmlhbCBwb3J0IHRvIHRoZSBkcml2ZXIgdXNpbmcgdGhlCisKKwlpbnB1dGF0dGFjaCAtLW1hZ2VsbGFuIC9kZXYvdHRzL3ggJgorCitjb21tYW5kLiBBZnRlciB0aGF0IHRoZSBNYWdlbGxhbiB3aWxsIGJlIGRldGVjdGVkLCBpbml0aWFsaXplZCwgd2lsbCBiZWVwLAorYW5kIHRoZSAvZGV2L2lucHV0L2pzWCBkZXZpY2Ugc2hvdWxkIGJlY29tZSB1c2FibGUuCisKKzMuMjEgSS1Gb3JjZSBkZXZpY2VzIAorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgQWxsIEktRm9yY2UgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBpZm9yY2UgbW9kdWxlLiBUaGlzIGluY2x1ZGVzOgorCisqIEFWQiBNYWcgVHVyYm8gRm9yY2UKKyogQVZCIFRvcCBTaG90IFBlZ2FzdXMKKyogQVZCIFRvcCBTaG90IEZvcmNlIEZlZWRiYWNrIFJhY2luZyBXaGVlbAorKiBMb2dpdGVjaCBXaW5nTWFuIEZvcmNlCisqIExvZ2l0ZWNoIFdpbmdNYW4gRm9yY2UgV2hlZWwgCisqIEd1aWxsZW1vdCBSYWNlIExlYWRlciBGb3JjZSBGZWVkYmFjaworKiBHdWlsbGVtb3QgRm9yY2UgRmVlZGJhY2sgUmFjaW5nIFdoZWVsCisqIFRocnVzdG1hc3RlciBNb3RvciBTcG9ydCBHVAorCisgIFRvIHVzZSBpdCwgeW91IG5lZWQgdG8gYXR0YWNoIHRoZSBzZXJpYWwgcG9ydCB0byB0aGUgZHJpdmVyIHVzaW5nIHRoZQorCisJaW5wdXRhdHRhY2ggLS1pZm9yY2UgL2Rldi90dHMveCAmCisKK2NvbW1hbmQuIEFmdGVyIHRoYXQgdGhlIEktRm9yY2UgZGV2aWNlIHdpbGwgYmUgZGV0ZWN0ZWQsIGFuZCB0aGUKKy9kZXYvaW5wdXQvanNYIGRldmljZSBzaG91bGQgYmVjb21lIHVzYWJsZS4KKworICBJbiBjYXNlIHlvdSdyZSB1c2luZyB0aGUgZGV2aWNlIHZpYSB0aGUgVVNCIHBvcnQsIHRoZSBpbnB1dGF0dGFjaCBjb21tYW5kCitpc24ndCBuZWVkZWQuCisKKyAgVGhlIEktRm9yY2UgZHJpdmVyIG5vdyBzdXBwb3J0cyBmb3JjZSBmZWVkYmFjayB2aWEgdGhlIGV2ZW50IGludGVyZmFjZS4KKworICBQbGVhc2Ugbm90ZSB0aGF0IExvZ2l0ZWNoIFdpbmdNYW4gKjNEIGRldmljZXMgYXJlIF9ub3RfIHN1cHBvcnRlZCBieSB0aGlzCittb2R1bGUsIHJhdGhlciBieSBoaWQuIEZvcmNlIGZlZWRiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRob3NlIGRldmljZXMuCitMb2dpdGVjaCBnYW1lcGFkcyBhcmUgYWxzbyBoaWQgZGV2aWNlcy4KKworMy4yMiBHcmF2aXMgU3RpbmdlciBnYW1lcGFkIAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBHcmF2aXMgU3RpbmdlciBzZXJpYWwgcG9ydCBnYW1lcGFkLCBkZXNpZ25lZCBmb3IgdXNlIHdpdGggbGFwdG9wCitjb21wdXRlcnMsIGlzIHN1cHBvcnRlZCBieSB0aGUgc3Rpbmdlci5jIG1vZHVsZS4gVG8gdXNlIGl0LCBhdHRhY2ggdGhlCitzZXJpYWwgcG9ydCB0byB0aGUgZHJpdmVyIHVzaW5nOgorCisgICAgICAgIGlucHV0YXR0YWNoIC0tc3RpbmdlciAvZGV2L3R0eS94ICYKKword2hlcmUgeCBpcyB0aGUgbnVtYmVyIG9mIHRoZSBzZXJpYWwgcG9ydC4KKworNC4gVHJvdWJsZXNob290aW5nCit+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlcmUgaXMgcXVpdGUgYSBoaWdoIHByb2JhYmlsaXR5IHRoYXQgeW91IHJ1biBpbnRvIHNvbWUgcHJvYmxlbXMuIEZvcgordGVzdGluZyB3aGV0aGVyIHRoZSBkcml2ZXIgd29ya3MsIGlmIGluIGRvdWJ0LCB1c2UgdGhlIGpzdGVzdCB1dGlsaXR5IGluCitzb21lIG9mIGl0cyBtb2Rlcy4gVGhlIG1vc3QgdXNlZnVsIG1vZGVzIGFyZSAibm9ybWFsIiAtIGZvciB0aGUgMS54CitpbnRlcmZhY2UsIGFuZCAib2xkIiBmb3IgdGhlICIwLngiIGludGVyZmFjZS4gWW91IHJ1biBpdCBieSB0eXBpbmc6CisKKwlqc3Rlc3QgLS1ub3JtYWwgL2Rldi9pbnB1dC9qczAKKwlqc3Rlc3QgLS1vbGQgICAgL2Rldi9pbnB1dC9qczAKKworICBBZGRpdGlvbmFsbHkgeW91IGNhbiBkbyBhIHRlc3Qgd2l0aCB0aGUgZXZ0ZXN0IHV0aWxpdHk6CisKKwlldnRlc3QgL2Rldi9pbnB1dC9ldmVudDAKKworICBPaCwgYW5kIHJlYWQgdGhlIEZBUSEgOikKKworNS4gRkFRCit+fn5+fn4KK1E6IFJ1bm5pbmcgJ2pzdGVzdCAvZGV2L2pzMCcgcmVzdWx0cyBpbiAiRmlsZSBub3QgZm91bmQiIGVycm9yLiBXaGF0J3MgdGhlCisgICBjYXVzZT8KK0E6IFRoZSBkZXZpY2UgZmlsZXMgZG9uJ3QgZXhpc3QuIENyZWF0ZSB0aGVtIChzZWUgc2VjdGlvbiAyLjIpLgorCitROiBJcyBpdCBwb3NzaWJsZSB0byBjb25uZWN0IG15IG9sZCBBdGFyaS9Db21tb2RvcmUvQW1pZ2EvY29uc29sZSBqb3lzdGljaworICAgb3IgcGFkIHRoYXQgdXNlcyBhIDktcGluIEQtdHlwZSBjYW5ub24gY29ubmVjdG9yIHRvIHRoZSBzZXJpYWwgcG9ydCBvZiBteQorICAgUEM/CitBOiBZZXMsIGl0IGlzIHBvc3NpYmxlLCBidXQgaXQnbGwgYnVybiB5b3VyIHNlcmlhbCBwb3J0IG9yIHRoZSBwYWQuIEl0CisgICB3b24ndCB3b3JrLCBvZiBjb3Vyc2UuCisKK1E6IE15IGpveXN0aWNrIGRvZXNuJ3Qgd29yayB3aXRoIFF1YWtlIC8gUXVha2UgMi4gV2hhdCdzIHRoZSBjYXVzZT8KK0E6IFF1YWtlIC8gUXVha2UgMiBkb24ndCBzdXBwb3J0IGpveXN0aWNrLiBVc2Ugam95MmtleSB0byBzaW11bGF0ZSBrZXlwcmVzc2VzCisgICBmb3IgdGhlbS4KKworNi4gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIDEuMCBkcml2ZXIgdXNlcyBhIG5ldywgZXZlbnQgYmFzZWQgYXBwcm9hY2ggdG8gdGhlIGpveXN0aWNrIGRyaXZlci4KK0luc3RlYWQgb2YgdGhlIHVzZXIgcHJvZ3JhbSBwb2xsaW5nIGZvciB0aGUgam95c3RpY2sgdmFsdWVzLCB0aGUgam95c3RpY2sKK2RyaXZlciBub3cgcmVwb3J0cyBvbmx5IGFueSBjaGFuZ2VzIG9mIGl0cyBzdGF0ZS4gU2VlIGpveXN0aWNrLWFwaS50eHQsCitqb3lzdGljay5oIGFuZCBqc3Rlc3QuYyBpbmNsdWRlZCBpbiB0aGUgam95c3RpY2sgcGFja2FnZSBmb3IgbW9yZQoraW5mb3JtYXRpb24uIFRoZSBqb3lzdGljayBkZXZpY2UgY2FuIGJlIHVzZWQgaW4gZWl0aGVyIGJsb2NraW5nIG9yCitub25ibG9ja2luZyBtb2RlIGFuZCBzdXBwb3J0cyBzZWxlY3QoKSBjYWxscy4KKworICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB0aGUgb2xkICh2MC54KSBpbnRlcmZhY2UgaXMgc3RpbGwgaW5jbHVkZWQuCitBbnkgY2FsbCB0byB0aGUgam95c3RpY2sgZHJpdmVyIHVzaW5nIHRoZSBvbGQgaW50ZXJmYWNlIHdpbGwgcmV0dXJuIHZhbHVlcwordGhhdCBhcmUgY29tcGF0aWJsZSB0byB0aGUgb2xkIGludGVyZmFjZS4gIFRoaXMgaW50ZXJmYWNlIGlzIHN0aWxsIGxpbWl0ZWQKK3RvIDIgYXhlcywgYW5kIGFwcGxpY2F0aW9ucyB1c2luZyBpdCB1c3VhbGx5IGRlY29kZSBvbmx5IDIgYnV0dG9ucywgYWx0aG91Z2gKK3RoZSBkcml2ZXIgcHJvdmlkZXMgdXAgdG8gMzIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L3NoYXBlLmZpZyBiL0RvY3VtZW50YXRpb24vaW5wdXQvc2hhcGUuZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMmJmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3NoYXBlLmZpZwpAQCAtMCwwICsxLDY1IEBACisjRklHIDMuMgorTGFuZHNjYXBlCitDZW50ZXIKK0luY2hlcworTGV0dGVyICAKKzEwMC4wMAorU2luZ2xlCistMgorMTIwMCAyCisyIDEgMCAyIDAgNyA1MCAwIC0xIDAuMDAwIDAgMCAtMSAwIDAgNgorCSA0MjAwIDM2MDAgNDIwMCAzMDc1IDQ5NTAgMjMyNSA3NDI1IDIzMjUgODI1MCAzMTUwIDgyNTAgMzYwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDIKKwkgNDIwMCAzNjc1IDQyMDAgNTQwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDIKKwkgODI1MCAzNjc1IDgyNTAgNTQwMAorMiAxIDAgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDIKKwkgMzY3NSAzNjAwIDg3MDAgMzYwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDIKKwkgODc3NSAzNjAwIDEwMjAwIDM2MDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDgzMjUgMzE1MCA5MDc1IDMxNTAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDc1MDAgMjMyNSAxMDIwMCAyMzI1CisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSAzNjAwIDM2MDAgMzAwMCAzNjAwCisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSA0MTI1IDMwNzUgMzAwMCAzMDc1CisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAxIDEgMgorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCSA0MjAwIDU0MDAgODE3NSA1NDAwCisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAxIDEgMgorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCSAxMDEyNSAyMzI1IDEwMTI1IDM2MDAKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDEgMSAyCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJIDMwMDAgMzE1MCAzMDAwIDM2MDAKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDEgMSAyCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJIDkwNzUgMzE1MCA5MDc1IDM2MDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDQ5NTAgMjMyNSA0OTUwIDEyMDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDc0MjUgMjMyNSA3NDI1IDEyMDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCA0CisJIDQyMDAgMzA3NSA0MjAwIDI0MDAgMzYwMCAxODAwIDM2MDAgMTIwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDQKKwkgODI1MCAzMTUwIDgyNTAgMjQ3NSA4Nzc1IDE5NTAgODc3NSAxMjAwCisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAxIDEgMgorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCSAzNjAwIDEyNzUgNDk1MCAxMjc1CisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAxIDEgMgorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCSA3NDI1IDEyNzUgODcwMCAxMjc1Cis0IDEgMCA1MCAwIDAgMTIgMC4wMDAwIDQgMTM1IDExNDAgNjA3NSA1MzI1IEVmZmVjdCBkdXJhdGlvblwwMDEKKzQgMCAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxODAgMTMwNSAxMDIwMCAzMDAwIEVmZmVjdCBtYWduaXR1ZGVcMDAxCis0IDAgMCA1MCAwIDAgMTIgMC4wMDAwIDQgMTM1IDc4MCA5MTUwIDM0NTAgRmFkZSBsZXZlbFwwMDEKKzQgMSAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxODAgMTAzNSA0Mjc1IDEyMDAgQXR0YWNrIGxlbmd0aFwwMDEKKzQgMSAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxODAgODg1IDgxNzUgMTIwMCBGYWRlIGxlbmd0aFwwMDEKKzQgMiAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxMzUgOTMwIDI5MjUgMzM3NSBBdHRhY2sgbGV2ZWxcMDAxCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L3hwYWQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC94cGFkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTExMWE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC94cGFkLnR4dApAQCAtMCwwICsxLDExNiBAQAoreHBhZCAtIExpbnV4IFVTQiBkcml2ZXIgZm9yIFgtQm94IGdhbWVwYWRzCisKK1RoaXMgaXMgdGhlIHZlcnkgZmlyc3QgcmVsZWFzZSBvZiBhIGRyaXZlciBmb3IgWC1Cb3ggZ2FtZXBhZHMuCitCYXNpY2FsbHksIHRoaXMgd2FzIGhhY2tlZCBhd2F5IGluIGp1c3QgYSBmZXcgaG91cnMsIHNvIGRvbid0IGV4cGVjdAorbWlyYWNsZXMuCitJbiBwYXJ0aWN1bGFyLCB0aGVyZSBpcyBjdXJyZW50bHkgTk8gc3VwcG9ydCBmb3IgdGhlIHJ1bWJsZSBwYWNrLgorWW91IHdvbid0IGZpbmQgbWFueSBmZi1hd2FyZSBsaW51eCBhcHBsaWNhdGlvbnMgYW55d2F5LgorCisKKzAuIFN0YXR1cworLS0tLS0tLS0tCisKK0ZvciBub3csIHRoaXMgZHJpdmVyIGhhcyBvbmx5IGJlZW4gdGVzdGVkIG9uIGp1c3Qgb25lIExpbnV4LUJveC4KK1RoaXMgb25lIGlzIHJ1bm5pbmcgYSAyLjQuMTgga2VybmVsIHdpdGggdXNiLXVoY2kgb24gYW4gYW1kIGF0aGxvbiA2MDAuCisKK1RoZSBqc3Rlc3QtcHJvZ3JhbSBmcm9tIGpveXN0aWNrLTEuMi4xNSAoanN0ZXN0LXZlcnNpb24gMi4xLjApIHJlcG9ydHMKKzggYXhlcyBhbmQgMTAgYnV0dG9ucy4KKworQWxscyA4IGF4ZXMgd29yaywgdGhvdWdoIHRoZXkgYWxsIGhhdmUgdGhlIHNhbWUgcmFuZ2UgKC0zMjc2OC4uMzI3NjcpCithbmQgdGhlIHplcm8tc2V0dGluZyBpcyBub3QgY29ycmVjdCBmb3IgdGhlIHRyaWdnZXJzIChJIGRvbid0IGtub3cgaWYgdGhhdAoraXMgc29tZSBsaW1pdGF0aW9uIG9mIGpzdGVzdCwgc2luY2UgdGhlIGlucHV0IGRldmljZSBzZXR1cCBzaG91bGQgYmUgZmluZS4gSQorZGlkbid0IGhhdmUgYSBsb29rIGF0IGpzdGVzdCBpdHNlbGYgeWV0KS4KKworQWxsIG9mIHRoZSAxMCBidXR0b25zIHdvcmsgKGluIGRpZ2l0YWwgbW9kZSkuIFRoZSBzaXggYnV0dG9ucyBvbiB0aGUKK3JpZ2h0IHNpZGUgKEEsIEIsIFgsIFksIGJsYWNrLCB3aGl0ZSkgYXJlIHNhaWQgdG8gYmUgImFuYWxvZyIgYW5kCityZXBvcnQgdGhlaXIgdmFsdWVzIGFzIDggYml0IHVuc2lnbmVkLCBub3Qgc3VyZSB3aGF0IHRoaXMgaXMgZ29vZCBmb3IuCisKK0kgdGVzdGVkIHRoZSBjb250cm9sbGVyIHdpdGggcXVha2UzLCBhbmQgY29uZmlndXJhdGlvbiBhbmQKK2luIGdhbWUgZnVuY3Rpb25hbGl0eSB3ZXJlIE9LLiBIb3dldmVyLCBJIGZpbmQgaXQgcmF0aGVyIGRpZmZpY3VsdCB0bworcGxheSBmaXJzdCBwZXJzb24gc2hvb3RlcnMgd2l0aCBhIHBhZC4gWW91ciBtaWxlYWdlIG1heSB2YXJ5LgorCisKKzEuIFVTQiBhZGFwdGVyCistLS0tLS0tLS0tLS0tLQorCitCZWZvcmUgeW91IGNhbiBhY3R1YWxseSB1c2UgdGhlIGRyaXZlciwgeW91IG5lZWQgdG8gZ2V0IHlvdXJzZWxmIGFuCithZGFwdGVyIGNhYmxlIHRvIGNvbm5lY3QgdGhlIFgtQm94IGNvbnRyb2xsZXIgdG8geW91ciBMaW51eC1Cb3guCisKK1N1Y2ggYSBjYWJsZSBpcyBwcmV0dHkgZWFzeSB0byBidWlsZC4gVGhlIENvbnRyb2xsZXIgaXRzZWxmIGlzIGEgVVNCIGNvbXBvdW5kCitkZXZpY2UgKGEgaHViIHdpdGggdGhyZWUgcG9ydHMgZm9yIHR3byBleHBhbnNpb24gc2xvdHMgYW5kIHRoZSBjb250cm9sbGVyCitkZXZpY2UpIHdpdGggdGhlIG9ubHkgZGlmZmVyZW5jZSBpbiBhIG5vbnN0YW5kYXJkIGNvbm5lY3RvciAoNSBwaW5zIHZzLiA0IG9uCitzdGFuZGFyZCBVU0IgY29ubmVjdG9yKS4KKworWW91IGp1c3QgbmVlZCB0byBzb2xkZXIgYSBVU0IgY29ubmVjdG9yIG9udG8gdGhlIGNhYmxlIGFuZCBrZWVwIHRoZQoreWVsbG93IHdpcmUgdW5jb25uZWN0ZWQuIFRoZSBvdGhlciBwaW5zIGhhdmUgdGhlIHNhbWUgb3JkZXIgb24gYm90aAorY29ubmVjdG9ycyBzbyB0aGVyZSBpcyBubyBtYWdpYyB0byBpdC4gRGV0YWlsZWQgaW5mbyBvbiB0aGVzZSBtYXR0ZXJzCitjYW4gYmUgZm91bmQgb24gdGhlIG5ldCAoWzFdLCBbMl0sIFszXSkuCisKK1RoYW5rcyB0byB0aGUgdHJpcCBzcGxpdHRlciBmb3VuZCBvbiB0aGUgY2FibGUgeW91IGRvbid0IGV2ZW4gbmVlZCB0byBjdXQgdGhlCitvcmlnaW5hbCBvbmUuIFlvdSBjYW4gYnV5IGFuIGV4dGVuc2lvbiBjYWJsZSBhbmQgY3V0IHRoYXQgaW5zdGVhZC4gVGhhdCB3YXksCit5b3UgY2FuIHN0aWxsIHVzZSB0aGUgY29udHJvbGxlciB3aXRoIHlvdXIgWC1Cb3gsIGlmIHlvdSBoYXZlIG9uZSA7KQorCisKKzIuIGRyaXZlciBpbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT25jZSB5b3UgaGF2ZSB0aGUgYWRhcHRlciBjYWJsZSBhbmQgdGhlIGNvbnRyb2xsZXIgaXMgY29ubmVjdGVkLCB5b3UgbmVlZAordG8gbG9hZCB5b3VyIFVTQiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBjYXQgL3Byb2MvYnVzL3VzYi9kZXZpY2VzLgorVGhlcmUgc2hvdWxkIGJlIGFuIGVudHJ5IGxpa2UgdGhlIG9uZSBhdCB0aGUgZW5kIFs0XS4KKworQ3VycmVudGx5IChhcyBvZiB2ZXJzaW9uIDAuMC40KSwgdGhlIGZvbGxvd2luZyB0aHJlZSBkZXZpY2VzIGFyZSBpbmNsdWRlZDoKKyBvcmlnaW5hbCBNaWNyb3NvZnQgWEJPWCBjb250cm9sbGVyIChVUyksIHZlbmRvcj0weDA0NWUsIHByb2R1Y3Q9MHgwMjAyCisgb3JpZ2luYWwgTWljcm9zb2Z0IFhCT1ggY29udHJvbGxlciAoSmFwYW4pLCB2ZW5kb3I9MHgwNDVlLCBwcm9kdWN0PTB4MDI4NQorIEludGVyQWN0IFBvd2VyUGFkIFBybyAoR2VybWFueSksIHZlbmRvcj0weDA1ZmQsIHByb2R1Y3Q9MHgxMDdhCisKK0lmIHlvdSBoYXZlIGFub3RoZXIgY29udHJvbGxlciB0aGF0IGlzIG5vdCBsaXN0ZWQgYWJvdmUgYW5kIGlzIG5vdCByZWNvZ25pemVkCitieSB0aGUgZHJpdmVyLCBwbGVhc2UgZHJvcCBtZSBhIGxpbmUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgaW5mbyAodGhhdCBpcywgaW5jbHVkZQordGhlIG5hbWUsIHZlbmRvciBhbmQgcHJvZHVjdCBJRCwgYXMgd2VsbCBhcyB0aGUgY291bnRyeSB3aGVyZSB5b3UgYm91Z2h0IGl0Oworc2VuZGluZyB0aGUgd2hvbGUgZHVtcCBvdXQgb2YgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIGFsb25nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyKS4KKworSW4gdGhlb3J5LCB0aGUgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggb3RoZXIgY29udHJvbGxlcnMgdGhhbiBtaW5lCisoSW50ZXJBY3QgUG93ZXJQYWQgcHJvLCBib3VnaHQgaW4gR2VybWFueSkganVzdCBmaW5lLCBidXQgSSBjYW5ub3QgdGVzdCB0aGlzCitmb3IgSSBvbmx5IGhhdmUgdGhpcyBvbmUgY29udHJvbGxlci4KKworSWYgeW91IGNvbXBpbGVkIGFuZCBpbnN0YWxsZWQgdGhlIGRyaXZlciwgdGVzdCB0aGUgZnVuY3Rpb25hbGl0eToKKz4gbW9kcHJvYmUgeHBhZAorPiBtb2Rwcm9iZSBqb3lkZXYKKz4ganN0ZXN0IC9kZXYvanMwCisKK1RoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBsaW5lIHNob3dpbmcgMTggaW5wdXRzICg4IGF4ZXMsIDEwIGJ1dHRvbnMpLCBhbmQKK2l0J3MgdmFsdWVzIHNob3VsZCBjaGFuZ2UgaWYgeW91IG1vdmUgdGhlIHN0aWNrcyBhbmQgcHVzaCB0aGUgYnV0dG9ucy4KKworSXQgd29ya3M/IFZvaWxhLCB5b3VyIGRvbmUgOykKKworCiszLiBUaGFua3MKKy0tLS0tLS0tLQorCitJIGhhdmUgdG8gdGhhbmsgSVRPIFRha2F5dWtpIGZvciB0aGUgZGV0YWlsZWQgaW5mbyBvbiBoaXMgc2l0ZQorIGh0dHA6Ly9ldWMuanAvcGVyaXBocy94Ym94LWNvbnRyb2xsZXIuamEuaHRtbC4KKyAKK0hpcyB1c2VmdWwgaW5mbyBhbmQgYm90aCB0aGUgdXNiLXNrZWxldG9uIGFzIHdlbGwgYXMgdGhlIGlmb3JjZSBpbnB1dCBkcml2ZXIKKyhHcmVnIEtyb2FoLUhhcnRtYW5uOyBWb2p0ZWNoIFBhdmxpaykgaGVscGVkIGEgbG90IGluIHJhcGlkIHByb3RvdHlwaW5nCit0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eS4KKworCis0LiBSZWZlcmVuY2VzCistLS0tLS0tLS0tLS0tCisKKzEuIGh0dHA6Ly9ldWMuanAvcGVyaXBocy94Ym94LWNvbnRyb2xsZXIuamEuaHRtbCAoSVRPIFRha2F5dWtpKQorMi4gaHR0cDovL3hwYWQueGJveC1zY2VuZS5jb20vCiszLiBodHRwOi8vd3d3Lnhib3hoYWNrei5jb20vSGFja3otUmVmZXJlbmNlLmh0bQorCis0LiAvcHJvYy9idXMvdXNiL2RldmljZXMgLSBkdW1wIGZyb20gSW50ZXJBY3QgUG93ZXJQYWQgUHJvIChHZXJtYW55KToKKworVDogIEJ1cz0wMSBMZXY9MDMgUHJudD0wNCBQb3J0PTAwIENudD0wMSBEZXYjPSAgNSBTcGQ9MTIgIE14Q2g9IDAKK0Q6ICBWZXI9IDEuMTAgQ2xzPTAwKD5pZmMgKSBTdWI9MDAgUHJvdD0wMCBNeFBTPTMyICNDZmdzPSAgMQorUDogIFZlbmRvcj0wNWZkIFByb2RJRD0xMDdhIFJldj0gMS4wMAorQzoqICNJZnM9IDEgQ2ZnIz0gMSBBdHI9ODAgTXhQd3I9MTAwbUEKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDIgQ2xzPTU4KHVuay4gKSBTdWI9NDIgUHJvdD0wMCBEcml2ZXI9KG5vbmUpCitFOiAgQWQ9ODEoSSkgQXRyPTAzKEludC4pIE14UFM9ICAzMiBJdmw9IDEwbXMKK0U6ICBBZD0wMihPKSBBdHI9MDMoSW50LikgTXhQUz0gIDMyIEl2bD0gMTBtcworCistLSAKK01hcmtvIEZyaWVkZW1hbm4gPG1mckBibXgtY2hlbW5pdHouZGU+CisyMDAyLTA3LTE2CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvX29yZGVyaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vaW9fb3JkZXJpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYWFlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lvX29yZGVyaW5nLnR4dApAQCAtMCwwICsxLDQ3IEBACitPbiBzb21lIHBsYXRmb3Jtcywgc28tY2FsbGVkIG1lbW9yeS1tYXBwZWQgSS9PIGlzIHdlYWtseSBvcmRlcmVkLiAgT24gc3VjaAorcGxhdGZvcm1zLCBkcml2ZXIgd3JpdGVycyBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgSS9PIHdyaXRlcyB0bworbWVtb3J5LW1hcHBlZCBhZGRyZXNzZXMgb24gdGhlaXIgZGV2aWNlIGFycml2ZSBpbiB0aGUgb3JkZXIgaW50ZW5kZWQuICBUaGlzIGlzCit0eXBpY2FsbHkgZG9uZSBieSByZWFkaW5nIGEgJ3NhZmUnIGRldmljZSBvciBicmlkZ2UgcmVnaXN0ZXIsIGNhdXNpbmcgdGhlIEkvTworY2hpcHNldCB0byBmbHVzaCBwZW5kaW5nIHdyaXRlcyB0byB0aGUgZGV2aWNlIGJlZm9yZSBhbnkgcmVhZHMgYXJlIHBvc3RlZC4gIEEKK2RyaXZlciB3b3VsZCB1c3VhbGx5IHVzZSB0aGlzIHRlY2huaXF1ZSBpbW1lZGlhdGVseSBwcmlvciB0byB0aGUgZXhpdCBvZiBhCitjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUgcHJvdGVjdGVkIGJ5IHNwaW5sb2Nrcy4gIFRoaXMgd291bGQgZW5zdXJlIHRoYXQKK3N1YnNlcXVlbnQgd3JpdGVzIHRvIEkvTyBzcGFjZSBhcnJpdmVkIG9ubHkgYWZ0ZXIgYWxsIHByaW9yIHdyaXRlcyAobXVjaCBsaWtlIGEKK21lbW9yeSBiYXJyaWVyIG9wLCBtYigpLCBvbmx5IHdpdGggcmVzcGVjdCB0byBJL08pLgorCitBIG1vcmUgY29uY3JldGUgZXhhbXBsZSBmcm9tIGEgaHlwb3RoZXRpY2FsIGRldmljZSBkcml2ZXI6CisKKyAgICAgICAgLi4uCitDUFUgQTogIHNwaW5fbG9ja19pcnFzYXZlKCZkZXZfbG9jaywgZmxhZ3MpCitDUFUgQTogIHZhbCA9IHJlYWRsKG15X3N0YXR1cyk7CitDUFUgQTogIC4uLgorQ1BVIEE6ICB3cml0ZWwobmV3dmFsLCByaW5nX3B0cik7CitDUFUgQTogIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9sb2NrLCBmbGFncykKKyAgICAgICAgLi4uCitDUFUgQjogIHNwaW5fbG9ja19pcnFzYXZlKCZkZXZfbG9jaywgZmxhZ3MpCitDUFUgQjogIHZhbCA9IHJlYWRsKG15X3N0YXR1cyk7CitDUFUgQjogIC4uLgorQ1BVIEI6ICB3cml0ZWwobmV3dmFsMiwgcmluZ19wdHIpOworQ1BVIEI6ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfbG9jaywgZmxhZ3MpCisgICAgICAgIC4uLgorCitJbiB0aGUgY2FzZSBhYm92ZSwgdGhlIGRldmljZSBtYXkgcmVjZWl2ZSBuZXd2YWwyIGJlZm9yZSBpdCByZWNlaXZlcyBuZXd2YWwsCit3aGljaCBjb3VsZCBjYXVzZSBwcm9ibGVtcy4gIEZpeGluZyBpdCBpcyBlYXN5IGVub3VnaCB0aG91Z2g6CisKKyAgICAgICAgLi4uCitDUFUgQTogIHNwaW5fbG9ja19pcnFzYXZlKCZkZXZfbG9jaywgZmxhZ3MpCitDUFUgQTogIHZhbCA9IHJlYWRsKG15X3N0YXR1cyk7CitDUFUgQTogIC4uLgorQ1BVIEE6ICB3cml0ZWwobmV3dmFsLCByaW5nX3B0cik7CitDUFUgQTogICh2b2lkKXJlYWRsKHNhZmVfcmVnaXN0ZXIpOyAvKiBtYXliZSBhIGNvbmZpZyByZWdpc3Rlcj8gKi8KK0NQVSBBOiAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X2xvY2ssIGZsYWdzKQorICAgICAgICAuLi4KK0NQVSBCOiAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9sb2NrLCBmbGFncykKK0NQVSBCOiAgdmFsID0gcmVhZGwobXlfc3RhdHVzKTsKK0NQVSBCOiAgLi4uCitDUFUgQjogIHdyaXRlbChuZXd2YWwyLCByaW5nX3B0cik7CitDUFUgQjogICh2b2lkKXJlYWRsKHNhZmVfcmVnaXN0ZXIpOyAvKiBtYXliZSBhIGNvbmZpZyByZWdpc3Rlcj8gKi8KK0NQVSBCOiAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X2xvY2ssIGZsYWdzKQorCitIZXJlLCB0aGUgcmVhZHMgZnJvbSBzYWZlX3JlZ2lzdGVyIHdpbGwgY2F1c2UgdGhlIEkvTyBjaGlwc2V0IHRvIGZsdXNoIGFueQorcGVuZGluZyB3cml0ZXMgYmVmb3JlIGFjdHVhbGx5IHBvc3RpbmcgdGhlIHJlYWQgdG8gdGhlIGNoaXBzZXQsIHByZXZlbnRpbmcKK3Bvc3NpYmxlIGRhdGEgY29ycnVwdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjlmOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CkBAIC0wLDAgKzEsMTk2IEBACitJb2N0bCBOdW1iZXJzCisxOSBPY3RvYmVyIDE5OTkKK01pY2hhZWwgRWxpemFiZXRoIENoYXN0YWluCis8bWVjQHNob3V0Lm5ldD4KKworSWYgeW91IGFyZSBhZGRpbmcgbmV3IGlvY3RsJ3MgdG8gdGhlIGtlcm5lbCwgeW91IHNob3VsZCB1c2UgdGhlIF9JTworbWFjcm9zIGRlZmluZWQgaW4gPGxpbnV4L2lvY3RsLmg+OgorCisgICAgX0lPICAgIGFuIGlvY3RsIHdpdGggbm8gcGFyYW1ldGVycworICAgIF9JT1cgICBhbiBpb2N0bCB3aXRoIHdyaXRlIHBhcmFtZXRlcnMgKGNvcHlfZnJvbV91c2VyKQorICAgIF9JT1IgICBhbiBpb2N0bCB3aXRoIHJlYWQgcGFyYW1ldGVycyAgKGNvcHlfdG9fdXNlcikKKyAgICBfSU9XUiAgYW4gaW9jdGwgd2l0aCBib3RoIHdyaXRlIGFuZCByZWFkIHBhcmFtZXRlcnMuCisKKydXcml0ZScgYW5kICdyZWFkJyBhcmUgZnJvbSB0aGUgdXNlcidzIHBvaW50IG9mIHZpZXcsIGp1c3QgbGlrZSB0aGUKK3N5c3RlbSBjYWxscyAnd3JpdGUnIGFuZCAncmVhZCcuICBGb3IgZXhhbXBsZSwgYSBTRVRfRk9PIGlvY3RsIHdvdWxkCitiZSBfSU9XLCBhbHRob3VnaCB0aGUga2VybmVsIHdvdWxkIGFjdHVhbGx5IHJlYWQgZGF0YSBmcm9tIHVzZXIgc3BhY2U7CithIEdFVF9GT08gaW9jdGwgd291bGQgYmUgX0lPUiwgYWx0aG91Z2ggdGhlIGtlcm5lbCB3b3VsZCBhY3R1YWxseSB3cml0ZQorZGF0YSB0byB1c2VyIHNwYWNlLgorCitUaGUgZmlyc3QgYXJndW1lbnQgdG8gX0lPLCBfSU9XLCBfSU9SLCBvciBfSU9XUiBpcyBhbiBpZGVudGlmeWluZyBsZXR0ZXIKK29yIG51bWJlciBmcm9tIHRoZSB0YWJsZSBiZWxvdy4gIEJlY2F1c2Ugb2YgdGhlIGxhcmdlIG51bWJlciBvZiBkcml2ZXJzLAorbWFueSBkcml2ZXJzIHNoYXJlIGEgcGFydGlhbCBsZXR0ZXIgd2l0aCBvdGhlciBkcml2ZXJzLgorCitJZiB5b3UgYXJlIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgbmV3IGRldmljZSBhbmQgbmVlZCBhIGxldHRlciwgcGljayBhbgordW51c2VkIGJsb2NrIHdpdGggZW5vdWdoIHJvb20gZm9yIGV4cGFuc2lvbjogMzIgdG8gMjU2IGlvY3RsIGNvbW1hbmRzLgorWW91IGNhbiByZWdpc3RlciB0aGUgYmxvY2sgYnkgcGF0Y2hpbmcgdGhpcyBmaWxlIGFuZCBzdWJtaXR0aW5nIHRoZQorcGF0Y2ggdG8gTGludXMgVG9ydmFsZHMuICBPciB5b3UgY2FuIGUtbWFpbCBtZSBhdCA8bWVjQHNob3V0Lm5ldD4gYW5kCitJJ2xsIHJlZ2lzdGVyIG9uZSBmb3IgeW91LgorCitUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIF9JTywgX0lPVywgX0lPUiwgb3IgX0lPV1IgaXMgYSBzZXF1ZW5jZSBudW1iZXIKK3RvIGRpc3Rpbmd1aXNoIGlvY3RscyBmcm9tIGVhY2ggb3RoZXIuICBUaGUgdGhpcmQgYXJndW1lbnQgdG8gX0lPVywKK19JT1IsIG9yIF9JT1dSIGlzIHRoZSB0eXBlIG9mIHRoZSBkYXRhIGdvaW5nIGludG8gdGhlIGtlcm5lbCBvciBjb21pbmcKK291dCBvZiB0aGUga2VybmVsIChlLmcuICAnaW50JyBvciAnc3RydWN0IGZvbycpLiAgTk9URSEgIERvIE5PVCB1c2UKK3NpemVvZihhcmcpIGFzIHRoZSB0aGlyZCBhcmd1bWVudCBhcyB0aGlzIHJlc3VsdHMgaW4geW91ciBpb2N0bCB0aGlua2luZworaXQgcGFzc2VzIGFuIGFyZ3VtZW50IG9mIHR5cGUgc2l6ZV90LgorCitTb21lIGRldmljZXMgdXNlIHRoZWlyIG1ham9yIG51bWJlciBhcyB0aGUgaWRlbnRpZmllcjsgdGhpcyBpcyBPSywgYXMKK2xvbmcgYXMgaXQgaXMgdW5pcXVlLiAgU29tZSBkZXZpY2VzIGFyZSBpcnJlZ3VsYXIgYW5kIGRvbid0IGZvbGxvdyBhbnkKK2NvbnZlbnRpb24gYXQgYWxsLgorCitGb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uIGlzIGdvb2QgYmVjYXVzZToKKworKDEpIEtlZXBpbmcgdGhlIGlvY3RsJ3MgZ2xvYmFsbHkgdW5pcXVlIGhlbHBzIGVycm9yIGNoZWNraW5nOgorICAgIGlmIGEgcHJvZ3JhbSBjYWxscyBhbiBpb2N0bCBvbiB0aGUgd3JvbmcgZGV2aWNlLCBpdCB3aWxsIGdldCBhbgorICAgIGVycm9yIHJhdGhlciB0aGFuIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvdXIuCisKKygyKSBUaGUgJ3N0cmFjZScgYnVpbGQgcHJvY2VkdXJlIGF1dG9tYXRpY2FsbHkgZmluZHMgaW9jdGwgbnVtYmVycworICAgIGRlZmluZWQgd2l0aCBfSU8sIF9JT1csIF9JT1IsIG9yIF9JT1dSLgorCisoMykgJ3N0cmFjZScgY2FuIGRlY29kZSBudW1iZXJzIGJhY2sgaW50byB1c2VmdWwgbmFtZXMgd2hlbiB0aGUKKyAgICBudW1iZXJzIGFyZSB1bmlxdWUuCisKKyg0KSBQZW9wbGUgbG9va2luZyBmb3IgaW9jdGxzIGNhbiBncmVwIGZvciB0aGVtIG1vcmUgZWFzaWx5IHdoZW4KKyAgICB0aGlzIGNvbnZlbnRpb24gaXMgdXNlZCB0byBkZWZpbmUgdGhlIGlvY3RsIG51bWJlcnMuCisKKyg1KSBXaGVuIGZvbGxvd2luZyB0aGUgY29udmVudGlvbiwgdGhlIGRyaXZlciBjb2RlIGNhbiB1c2UgZ2VuZXJpYworICAgIGNvZGUgdG8gY29weSB0aGUgcGFyYW1ldGVycyBiZXR3ZWVuIHVzZXIgYW5kIGtlcm5lbCBzcGFjZS4KKworVGhpcyB0YWJsZSBsaXN0cyBpb2N0bHMgdmlzaWJsZSBmcm9tIHVzZXIgbGFuZCBmb3IgTGludXgvaTM4Ni4gIEl0IGNvbnRhaW5zCittb3N0IGRyaXZlcnMgdXAgdG8gMi4zLjE0LCBidXQgSSBrbm93IEkgYW0gbWlzc2luZyBzb21lLgorCitDb2RlCVNlcSMJSW5jbHVkZSBGaWxlCQlDb21tZW50cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzB4MDAJMDAtMUYJbGludXgvZnMuaAkJY29uZmxpY3QhCisweDAwCTAwLTFGCXNjc2kvc2NzaV9pb2N0bC5oCWNvbmZsaWN0IQorMHgwMAkwMC0xRglsaW51eC9mYi5oCQljb25mbGljdCEKKzB4MDAJMDAtMUYJbGludXgvd2F2ZWZyb250LmgJY29uZmxpY3QhCisweDAyCWFsbAlsaW51eC9mZC5oCisweDAzCWFsbAlsaW51eC9oZHJlZy5oCisweDA0CWFsbAlsaW51eC91bXNkb3NfZnMuaAorMHgwNglhbGwJbGludXgvbHAuaAorMHgwOQlhbGwJbGludXgvbWQuaAorMHgxMglhbGwJbGludXgvZnMuaAorCQlsaW51eC9ibGtwZy5oCisweDFiCWFsbAlJbmZpbmlCYW5kIFN1YnN5c3RlbQk8aHR0cDovL3d3dy5vcGVuaWIub3JnLz4KKzB4MjAJYWxsCWRyaXZlcnMvY2Ryb20vY20yMDYuaAorMHgyMglhbGwJc2NzaS9zZy5oCisnIycJMDAtM0YJSUVFRSAxMzk0IFN1YnN5c3RlbQlCbG9jayBmb3IgdGhlIGVudGlyZSBzdWJzeXN0ZW0KKycxJwkwMC0xRgk8bGludXgvdGltZXBwcy5oPglQUFMga2l0IGZyb20gVWxyaWNoIFdpbmRsCisJCQkJCTxmdHA6Ly9mdHAuZGUua2VybmVsLm9yZy9wdWIvbGludXgvZGFlbW9ucy9udHAvUFBTLz4KKyc2JwkwMC0xMAk8YXNtLWkzODYvcHJvY2Vzc29yLmg+CUludGVsIElBMzIgbWljcm9jb2RlIHVwZGF0ZSBkcml2ZXIKKwkJCQkJPG1haWx0bzp0aWdyYW5AdmVyaXRhcy5jb20+CisnOCcJYWxsCQkJCVNOUDgwMjMgYWR2YW5jZWQgTklDIGNhcmQKKwkJCQkJPG1haWx0bzptY3JAc29saWR1bS5jb20+CisnQScJMDAtMUYJbGludXgvYXBtX2Jpb3MuaAorJ0InCUMwLUZGCQkJCWFkdmFuY2VkIGJidXMKKwkJCQkJPG1haWx0bzptYWFzc2VuQHVuaS1mcmVpYnVyZy5kZT4KKydDJwlhbGwJbGludXgvc291bmRjYXJkLmgKKydEJwlhbGwJYXNtLXMzOTAvZGFzZC5oCisnRicJYWxsCWxpbnV4L2ZiLmgKKydJJwlhbGwJbGludXgvaXNkbi5oCisnSicJMDAtMUYJZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaAorJ0snCWFsbAlsaW51eC9rZC5oCisnTCcJMDAtMUYJbGludXgvbG9vcC5oCisnTCcJRTAtRkYJbGludXgvcHBkZC5oCQllbmNyeXB0ZWQgZGlzayBkZXZpY2UgZHJpdmVyCisJCQkJCTxodHRwOi8vbGludXgwMS5nd2RnLmRlL35hbGF0aGFtL3BwZGQuaHRtbD4KKydNJwlhbGwJbGludXgvc291bmRjYXJkLmgJY29uZmxpY3QhCisnTScJMDAtMUYJbGludXgvaXNpY29tLmgJCWNvbmZsaWN0IQorJ04nCTAwLTFGCWRyaXZlcnMvdXNiL3NjYW5uZXIuaAorJ1AnCWFsbAlsaW51eC9zb3VuZGNhcmQuaAorJ1EnCWFsbAlsaW51eC9zb3VuZGNhcmQuaAorJ1InCTAwLTFGCWxpbnV4L3JhbmRvbS5oCisnUycJYWxsCWxpbnV4L2Nkcm9tLmgJCWNvbmZsaWN0IQorJ1MnCTgwLTgxCXNjc2kvc2NzaV9pb2N0bC5oCWNvbmZsaWN0IQorJ1MnCTgyLUZGCXNjc2kvc2NzaS5oCQljb25mbGljdCEKKydUJwlhbGwJbGludXgvc291bmRjYXJkLmgJY29uZmxpY3QhCisnVCcJYWxsCWFzbS1pMzg2L2lvY3Rscy5oCWNvbmZsaWN0IQorJ1UnCTAwLUVGCWxpbnV4L2RyaXZlcnMvdXNiL3VzYi5oCisnVScJRjAtRkYJZHJpdmVycy91c2IvYXVlcnN3YWxkLmMKKydWJwlhbGwJbGludXgvdnQuaAorJ1cnCTAwLTFGCWxpbnV4L3dhdGNoZG9nLmgJY29uZmxpY3QhCisnVycJMDAtMUYJbGludXgvd2Fucm91dGVyLmgJY29uZmxpY3QhCisnWCcJYWxsCWxpbnV4L3hmc19mcy5oCisnWScJYWxsCWxpbnV4L2N5Y2xhZGVzLmgKKydhJwlhbGwJCQkJQVRNIG9uIGxpbnV4CisJCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWw+CisnYicJMDAtRkYJCQkJYml0MyB2bWUgaG9zdCBicmlkZ2UKKwkJCQkJPG1haWx0bzpuYXRhbGlhQG5pa2hlZmsubmlraGVmLm5sPgorJ2MnCTAwLTdGCWxpbnV4L2NvbXN0YXRzLmgJY29uZmxpY3QhCisnYycJMDAtN0YJbGludXgvY29kYS5oCQljb25mbGljdCEKKydkJwkwMC1GRglsaW51eC9jaGFyL2RybS9kcm0vaAljb25mbGljdCEKKydkJwkwMC0xRglsaW51eC9kZXZmc19mcy5oCWNvbmZsaWN0IQorJ2QnCTAwLURGCWxpbnV4L3ZpZGVvX2RlY29kZXIuaAljb25mbGljdCEKKydkJwlGMC1GRglsaW51eC9kaWdpMS5oCisnZScJYWxsCWxpbnV4L2RpZ2kxLmgJCWNvbmZsaWN0IQorJ2UnCTAwLTFGCWxpbnV4L3ZpZGVvX2VuY29kZXIuaAljb25mbGljdCEKKydlJwkwMC0xRgluZXQvaXJkYS9pcnR0eS5oCWNvbmZsaWN0IQorJ2YnCTAwLTFGCWxpbnV4L2V4dDJfZnMuaAorJ2gnCTAwLTdGCQkJCUNoYXJvbiBmaWxlc3lzdGVtCisJCQkJCTxtYWlsdG86emFwbWFuQGludGVybGFuLm5ldD4KKydpJwkwMC0zRglsaW51eC9pMm8uaAorJ2onCTAwLTNGCWxpbnV4L2pveXN0aWNrLmgKKydrJwlhbGwJYXNtLXNwYXJjL2tiaW8uaAorCQlhc20tc3BhcmM2NC9rYmlvLmgKKydsJwkwMC0zRglsaW51eC90Y2ZzX2ZzLmgJCXRyYW5zcGFyZW50IGNyeXB0b2dyYXBoaWMgZmlsZSBzeXN0ZW0KKwkJCQkJPGh0dHA6Ly9taWtvbm9zLmRpYS51bmlzYS5pdC90Y2ZzPgorJ2wnCTQwLTdGCWxpbnV4L3VkZl9mc19pLmgJaW4gZGV2ZWxvcG1lbnQ6CisJCQkJCTxodHRwOi8vd3d3LnRyeWxpbnV4LmNvbS9wcm9qZWN0cy91ZGYvPgorJ20nCWFsbAlsaW51eC9tdGlvLmgJCWNvbmZsaWN0IQorJ20nCWFsbAlsaW51eC9zb3VuZGNhcmQuaAljb25mbGljdCEKKydtJwlhbGwJbGludXgvc3luY2xpbmsuaAljb25mbGljdCEKKydtJwkwMC0xRgluZXQvaXJkYS9pcm1vZC5oCWNvbmZsaWN0IQorJ24nCTAwLTdGCWxpbnV4L25jcF9mcy5oCisnbicJRTAtRkYJdmlkZW8vbWF0cm94LmggICAgICAgICAgbWF0cm94ZmIKKydwJwkwMC0zRglsaW51eC9tYzE0NjgxOHJ0Yy5oCisncCcJNDAtN0YJbGludXgvbnZyYW0uaAorJ3AnCTgwLTlGCQkJCXVzZXItc3BhY2UgcGFycG9ydAorCQkJCQk8bWFpbHRvOnRpbUBjeWJlcmVsay5uZXQ+CisncScJMDAtMUYJbGludXgvc2VyaW8uaAorJ3EnCTgwLUZGCQkJCUludGVybmV0IFBob25lSkFDSywgSW50ZXJuZXQgTGluZUpBQ0sKKwkJCQkJPGh0dHA6Ly93d3cucXVpY2tuZXQubmV0PgorJ3InCTAwLTFGCWxpbnV4L21zZG9zX2ZzLmgKKydzJwlhbGwJbGludXgvY2RrLmgKKyd0JwkwMC03RglsaW51eC9pZl9wcHAuaAorJ3QnCTgwLThGCWxpbnV4L2lzZG5fcHBwLmgKKyd1JwkwMC0xRglsaW51eC9zbWJfZnMuaAorJ3YnCTAwLTFGCWxpbnV4L2V4dDJfZnMuaAkJY29uZmxpY3QhCisndicJYWxsCWxpbnV4L3ZpZGVvZGV2LmgJY29uZmxpY3QhCisndycJYWxsCQkJCUNFUk4gU0NJIGRyaXZlcgorJ3knCTAwLTFGCQkJCXBhY2tldCBiYXNlZCB1c2VyIGxldmVsIGNvbW11bmljYXRpb25zCisJCQkJCTxtYWlsdG86emFwbWFuQGludGVybGFuLm5ldD4KKyd6JwkwMC0zRgkJCQlDQU4gYnVzIGNhcmQKKwkJCQkJPG1haWx0bzpoZHN0aWNoQGNvbm5lY3R1LnVsbS5jaXJjdWxhci5kZT4KKyd6Jwk0MC03RgkJCQlDQU4gYnVzIGNhcmQKKwkJCQkJPG1haWx0bzpvZUBwb3J0LmRlPgorMHg4MAkwMC0xRglsaW51eC9mYi5oCisweDgxCTAwLTFGCWxpbnV4L3ZpZGVvdGV4dC5oCisweDg5CTAwLTA2CWFzbS1pMzg2L3NvY2tpb3MuaAorMHg4OQkwQi1ERglsaW51eC9zb2NraW9zLmgKKzB4ODkJRTAtRUYJbGludXgvc29ja2lvcy5oCQlTSU9DUFJPVE9QUklWQVRFIHJhbmdlCisweDg5CUYwLUZGCWxpbnV4L3NvY2tpb3MuaAkJU0lPQ0RFVlBSSVZBVEUgcmFuZ2UKKzB4OEIJYWxsCWxpbnV4L3dpcmVsZXNzLmgKKzB4OEMJMDAtM0YJCQkJV2lOUkFEaU8gZHJpdmVyCisJCQkJCTxodHRwOi8vd3d3LnByb3hpbWl0eS5jb20uYXUvfmJyaWFuL3dpbnJhZGlvLz4KKzB4OTAJMDAJZHJpdmVycy9jZHJvbS9zYnBjZC5oCisweDkzCTYwLTdGCWxpbnV4L2F1dG9fZnMuaAorMHg5OQkwMC0wRgkJCQk1MzctQWRkaW5ib2FyZCBkcml2ZXIKKwkJCQkJPG1haWx0bzpidWtAYnVrcy5pcG4uZGU+CisweEEwCWFsbAlsaW51eC9zZHAvc2RwLmgJCUluZHVzdHJpYWwgRGV2aWNlIFByb2plY3QKKwkJCQkJPG1haWx0bzprZW5qaUBiaXRnYXRlLmNvbT4KKzB4QTMJODAtOEYJUG9ydCBBQ0wJCWluIGRldmVsb3BtZW50OgorCQkJCQk8bWFpbHRvOnRsZXdpc0BtaW5kc3ByaW5nLmNvbT4KKzB4QTMJOTAtOUYJbGludXgvZHRsay5oCisweEFCCTAwLTFGCWxpbnV4L25iZC5oCisweEFDCTAwLTFGCWxpbnV4L3Jhdy5oCisweEFECTAwCU5ldGZpbHRlciBkZXZpY2UJaW4gZGV2ZWxvcG1lbnQ6CisJCQkJCTxtYWlsdG86cnVzdHlAcnVzdGNvcnAuY29tLmF1PgkKKzB4QjAJYWxsCVJBVElPIGRldmljZXMJCWluIGRldmVsb3BtZW50OgorCQkJCQk8bWFpbHRvOnZnb0ByYXRpby5kZT4KKzB4QjEJMDAtMUYJUFBQb1gJCQk8bWFpbHRvOm1vc3Ryb3dzQHN0eXgudXdhdGVybG9vLmNhPgorMHhDQgkwMC0xRglDQk0gc2VyaWFsIElFQyBidXMJaW4gZGV2ZWxvcG1lbnQ6CisJCQkJCTxtYWlsdG86bWljaGFlbC5rbGVpbkBwdWZmaW4ubGIuc2h1dHRsZS5kZT4KKzB4REQJMDAtM0YJWkZDUCBkZXZpY2UgZHJpdmVyCXNlZSBkcml2ZXJzL3MzOTAvc2NzaS8KKwkJCQkJPG1haWx0bzphaGVycm1hbkBkZS5pYm0uY29tPgorMHhGMwkwMC0zRgl2aWRlby9zaXNmYi5oCQlzaXNmYiAoaW4gZGV2ZWxvcG1lbnQpCisJCQkJCTxtYWlsdG86dGhvbWFzQHdpbmlzY2hob2Zlci5uZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2Nkcm9tLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvY2Ryb20udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjY2RjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2Nkcm9tLnR4dApAQCAtMCwwICsxLDk2NiBAQAorCQlTdW1tYXJ5IG9mIENEUk9NIGlvY3RsIGNhbGxzLgorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkJRWR3YXJkIEEuIEZhbGsgPGVmYWxrQGdvb2dsZS5jb20+CisKKwkJTm92ZW1iZXIsIDIwMDQKKworVGhpcyBkb2N1bWVudCBhdHRlbXB0cyB0byBkZXNjcmliZSB0aGUgaW9jdGwoMikgY2FsbHMgc3VwcG9ydGVkIGJ5Cit0aGUgQ0RST00gbGF5ZXIuICBUaGVzZSBhcmUgYnktYW5kLWxhcmdlIGltcGxlbWVudGVkIChhcyBvZiBMaW51eCAyLjYpCitpbiBkcml2ZXJzL2Nkcm9tL2Nkcm9tLmMgYW5kIGRyaXZlcnMvYmxvY2svc2NzaV9pb2N0bC5jCisKK2lvY3RsIHZhbHVlcyBhcmUgbGlzdGVkIGluIDxsaW51eC9jZHJvbS5oPi4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhleQorYXJlIGFzIGZvbGxvd3M6CisKKwlDRFJPTVBBVVNFCQlQYXVzZSBBdWRpbyBPcGVyYXRpb24KKwlDRFJPTVJFU1VNRQkJUmVzdW1lIHBhdXNlZCBBdWRpbyBPcGVyYXRpb24KKwlDRFJPTVBMQVlNU0YJCVBsYXkgQXVkaW8gTVNGIChzdHJ1Y3QgY2Ryb21fbXNmKQorCUNEUk9NUExBWVRSS0lORAkJUGxheSBBdWRpbyBUcmFjay9pbmRleCAoc3RydWN0IGNkcm9tX3RpKQorCUNEUk9NUkVBRFRPQ0hEUgkJUmVhZCBUT0MgaGVhZGVyIChzdHJ1Y3QgY2Ryb21fdG9jaGRyKQorCUNEUk9NUkVBRFRPQ0VOVFJZCVJlYWQgVE9DIGVudHJ5IChzdHJ1Y3QgY2Ryb21fdG9jZW50cnkpCisJQ0RST01TVE9QCQlTdG9wIHRoZSBjZHJvbSBkcml2ZQorCUNEUk9NU1RBUlQJCVN0YXJ0IHRoZSBjZHJvbSBkcml2ZQorCUNEUk9NRUpFQ1QJCUVqZWN0cyB0aGUgY2Ryb20gbWVkaWEKKwlDRFJPTVZPTENUUkwJCUNvbnRyb2wgb3V0cHV0IHZvbHVtZSAoc3RydWN0IGNkcm9tX3ZvbGN0cmwpCisJQ0RST01TVUJDSE5MCQlSZWFkIHN1YmNoYW5uZWwgZGF0YSAoc3RydWN0IGNkcm9tX3N1YmNobmwpCisJQ0RST01SRUFETU9ERTIJCVJlYWQgQ0RST00gbW9kZSAyIGRhdGEgKDIzMzYgQnl0ZXMpCisJCQkJCSAgIChzdHJ1Y3QgY2Ryb21fcmVhZCkKKwlDRFJPTVJFQURNT0RFMQkJUmVhZCBDRFJPTSBtb2RlIDEgZGF0YSAoMjA0OCBCeXRlcykKKwkJCQkJICAgKHN0cnVjdCBjZHJvbV9yZWFkKQorCUNEUk9NUkVBREFVRElPCQkoc3RydWN0IGNkcm9tX3JlYWRfYXVkaW8pCisJQ0RST01FSkVDVF9TVwkJZW5hYmxlKDEpL2Rpc2FibGUoMCkgYXV0by1lamVjdGluZworCUNEUk9NTVVMVElTRVNTSU9OCU9idGFpbiB0aGUgc3RhcnQtb2YtbGFzdC1zZXNzaW9uCisJCQkJICBhZGRyZXNzIG9mIG11bHRpIHNlc3Npb24gZGlza3MKKwkJCQkgIChzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uKQorCUNEUk9NX0dFVF9NQ04JCU9idGFpbiB0aGUgIlVuaXZlcnNhbCBQcm9kdWN0IENvZGUiCisJCQkJICAgaWYgYXZhaWxhYmxlIChzdHJ1Y3QgY2Ryb21fbWNuKQorCUNEUk9NX0dFVF9VUEMJCURlcHJlY2F0ZWQsIHVzZSBDRFJPTV9HRVRfTUNOIGluc3RlYWQuCisJQ0RST01SRVNFVAkJaGFyZC1yZXNldCB0aGUgZHJpdmUKKwlDRFJPTVZPTFJFQUQJCUdldCB0aGUgZHJpdmUncyB2b2x1bWUgc2V0dGluZworCQkJCQkgIChzdHJ1Y3QgY2Ryb21fdm9sY3RybCkKKwlDRFJPTVJFQURSQVcJCXJlYWQgZGF0YSBpbiByYXcgbW9kZSAoMjM1MiBCeXRlcykKKwkJCQkJICAgKHN0cnVjdCBjZHJvbV9yZWFkKQorCUNEUk9NUkVBRENPT0tFRAkJcmVhZCBkYXRhIGluIGNvb2tlZCBtb2RlCisJQ0RST01TRUVLCQlzZWVrIG1zZiBhZGRyZXNzCisJQ0RST01QTEFZQkxLCQlzY3NpLWNkIG9ubHksIChzdHJ1Y3QgY2Ryb21fYmxrKQorCUNEUk9NUkVBREFMTAkJcmVhZCBhbGwgMjY0NiBieXRlcworCUNEUk9NR0VUU1BJTkRPV04JcmV0dXJuIDQtYml0IHNwaW5kb3duIHZhbHVlCisJQ0RST01TRVRTUElORE9XTglzZXQgNC1iaXQgc3BpbmRvd24gdmFsdWUKKwlDRFJPTUNMT1NFVFJBWQkJcGVuZGFudCBvZiBDRFJPTUVKRUNUCisJQ0RST01fU0VUX09QVElPTlMJU2V0IGJlaGF2aW9yIG9wdGlvbnMKKwlDRFJPTV9DTEVBUl9PUFRJT05TCUNsZWFyIGJlaGF2aW9yIG9wdGlvbnMKKwlDRFJPTV9TRUxFQ1RfU1BFRUQJU2V0IHRoZSBDRC1ST00gc3BlZWQKKwlDRFJPTV9TRUxFQ1RfRElTQwlTZWxlY3QgZGlzYyAoZm9yIGp1a2UtYm94ZXMpCisJQ0RST01fTUVESUFfQ0hBTkdFRAlDaGVjayBpcyBtZWRpYSBjaGFuZ2VkCisJQ0RST01fRFJJVkVfU1RBVFVTCUdldCB0cmF5IHBvc2l0aW9uLCBldGMuCisJQ0RST01fRElTQ19TVEFUVVMJR2V0IGRpc2MgdHlwZSwgZXRjLgorCUNEUk9NX0NIQU5HRVJfTlNMT1RTCUdldCBudW1iZXIgb2Ygc2xvdHMKKwlDRFJPTV9MT0NLRE9PUgkJbG9jayBvciB1bmxvY2sgZG9vcgorCUNEUk9NX0RFQlVHCQlUdXJuIGRlYnVnIG1lc3NhZ2VzIG9uL29mZgorCUNEUk9NX0dFVF9DQVBBQklMSVRZCWdldCBjYXBhYmlsaXRpZXMKKwlDRFJPTUFVRElPQlVGU0laCXNldCB0aGUgYXVkaW8gYnVmZmVyIHNpemUKKwlEVkRfUkVBRF9TVFJVQ1QJCVJlYWQgc3RydWN0dXJlCisJRFZEX1dSSVRFX1NUUlVDVAlXcml0ZSBzdHJ1Y3R1cmUKKwlEVkRfQVVUSAkJQXV0aGVudGljYXRpb24KKwlDRFJPTV9TRU5EX1BBQ0tFVAlzZW5kIGEgcGFja2V0IHRvIHRoZSBkcml2ZQorCUNEUk9NX05FWFRfV1JJVEFCTEUJZ2V0IG5leHQgd3JpdGFibGUgYmxvY2sKKwlDRFJPTV9MQVNUX1dSSVRURU4JZ2V0IGxhc3QgYmxvY2sgd3JpdHRlbiBvbiBkaXNjCisKKworVGhlIGluZm9ybWF0aW9uIHRoYXQgZm9sbG93cyB3YXMgZGV0ZXJtaW5lZCBmcm9tIHJlYWRpbmcga2VybmVsIHNvdXJjZQorY29kZS4gIEl0IGlzIGxpa2VseSB0aGF0IHNvbWUgY29ycmVjdGlvbnMgd2lsbCBiZSBtYWRlIG92ZXIgdGltZS4KKworCisKKworCisKKworR2VuZXJhbDoKKworCVVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBhbGwgaW9jdGwgY2FsbHMgcmV0dXJuIDAgb24gc3VjY2VzcworCWFuZCAtMSB3aXRoIGVycm5vIHNldCB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBvbiBlcnJvci4gIChTb21lCisJaW9jdGxzIHJldHVybiBub24tbmVnYXRpdmUgZGF0YSB2YWx1ZXMuKQorCisJVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCBpb2N0bCBjYWxscyByZXR1cm4gLTEgYW5kIHNldAorCWVycm5vIHRvIEVGQVVMVCBvbiBhIGZhaWxlZCBhdHRlbXB0IHRvIGNvcHkgZGF0YSB0byBvciBmcm9tIHVzZXIKKwlhZGRyZXNzIHNwYWNlLgorCisJSW5kaXZpZHVhbCBkcml2ZXJzIG1heSByZXR1cm4gZXJyb3IgY29kZXMgbm90IGxpc3RlZCBoZXJlLgorCisJVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cworCWFyZSBkZWZpbmVkIGluIDxsaW51eC9jZHJvbS5oPgorCisKKworCitDRFJPTVBBVVNFCQkJUGF1c2UgQXVkaW8gT3BlcmF0aW9uCisKKwl1c2FnZToKKworCSAgaW9jdGwoZmQsIENEUk9NUEFVU0UsIDApOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBhdWRpby1jYXBhYmxlLgorCisKK0NEUk9NUkVTVU1FCQkJUmVzdW1lIHBhdXNlZCBBdWRpbyBPcGVyYXRpb24KKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01SRVNVTUUsIDApOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBhdWRpby1jYXBhYmxlLgorCisKK0NEUk9NUExBWU1TRgkJCVBsYXkgQXVkaW8gTVNGIChzdHJ1Y3QgY2Ryb21fbXNmKQorCisJdXNhZ2U6CisKKwkgIHN0cnVjdCBjZHJvbV9tc2YgbXNmOworCSAgaW9jdGwoZmQsIENEUk9NUExBWU1TRiwgJm1zZik7CisKKwlpbnB1dHM6CisJICBjZHJvbV9tc2Ygc3RydWN0dXJlLCBkZXNjcmliaW5nIGEgc2VnbWVudCBvZiBtdXNpYyB0byBwbGF5CisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJY2QgZHJpdmUgbm90IGF1ZGlvLWNhcGFibGUuCisKKwlub3RlczoKKwkgIE1TRiBzdGFuZHMgZm9yIG1pbnV0ZXMtc2Vjb25kcy1mcmFtZXMKKwkgIExCQSBzdGFuZHMgZm9yIGxvZ2ljYWwgYmxvY2sgYWRkcmVzcworCisJICBTZWdtZW50IGlzIGRlc2NyaWJlZCBhcyBzdGFydCBhbmQgZW5kIHRpbWVzLCB3aGVyZSBlYWNoIHRpbWUKKwkgIGlzIGRlc2NyaWJlZCBhcyBtaW51dGVzOnNlY29uZHM6ZnJhbWVzLiAgQSBmcmFtZSBpcyAxLzc1IG9mCisJICBhIHNlY29uZC4KKworCitDRFJPTVBMQVlUUktJTkQJCQlQbGF5IEF1ZGlvIFRyYWNrL2luZGV4IChzdHJ1Y3QgY2Ryb21fdGkpCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX3RpIHRpOworCSAgaW9jdGwoZmQsIENEUk9NUExBWVRSS0lORCwgJnRpKTsKKworCWlucHV0czoKKwkgIGNkcm9tX3RpIHN0cnVjdHVyZSwgZGVzY3JpYmluZyBhIHNlZ21lbnQgb2YgbXVzaWMgdG8gcGxheQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBhdWRpby1jYXBhYmxlLgorCisJbm90ZXM6CisJICBTZWdtZW50IGlzIGRlc2NyaWJlZCBhcyBzdGFydCBhbmQgZW5kIHRpbWVzLCB3aGVyZSBlYWNoIHRpbWUKKwkgIGlzIGRlc2NyaWJlZCBhcyBhIHRyYWNrIGFuZCBhbiBpbmRleC4KKworCisKK0NEUk9NUkVBRFRPQ0hEUgkJCVJlYWQgVE9DIGhlYWRlciAoc3RydWN0IGNkcm9tX3RvY2hkcikKKworCXVzYWdlOgorCisJICBjZHJvbV90b2NoZHIgaGVhZGVyOworCSAgaW9jdGwoZmQsIENEUk9NUkVBRFRPQ0hEUiwgJmhlYWRlcik7CisKKwlpbnB1dHM6CisJICBjZHJvbV90b2NoZHIgc3RydWN0dXJlCisKKwlvdXRwdXRzOgorCSAgY2Ryb21fdG9jaGRyIHN0cnVjdHVyZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBhdWRpby1jYXBhYmxlLgorCisKKworQ0RST01SRUFEVE9DRU5UUlkJCVJlYWQgVE9DIGVudHJ5IChzdHJ1Y3QgY2Ryb21fdG9jZW50cnkpCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX3RvY2VudHJ5IGVudHJ5OworCSAgaW9jdGwoZmQsIENEUk9NUkVBRFRPQ0VOVFJZLCAmZW50cnkpOworCisJaW5wdXRzOgorCSAgY2Ryb21fdG9jZW50cnkgc3RydWN0dXJlCisKKwlvdXRwdXRzOgorCSAgY2Ryb21fdG9jZW50cnkgc3RydWN0dXJlCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJY2QgZHJpdmUgbm90IGF1ZGlvLWNhcGFibGUuCisJICBFSU5WQUwJZW50cnkuY2R0ZV9mb3JtYXQgbm90IENEUk9NX01TRiBvciBDRFJPTV9MQkEKKwkgIEVJTlZBTAlyZXF1ZXN0ZWQgdHJhY2sgb3V0IG9mIGJvdW5kcworCSAgRUlPCQlJL08gZXJyb3IgcmVhZGluZyBUT0MKKworCW5vdGVzOgorCSAgVE9DIHN0YW5kcyBmb3IgVGFibGUgT2YgQ29udGVudHMKKwkgIE1TRiBzdGFuZHMgZm9yIG1pbnV0ZXMtc2Vjb25kcy1mcmFtZXMKKwkgIExCQSBzdGFuZHMgZm9yIGxvZ2ljYWwgYmxvY2sgYWRkcmVzcworCisKKworQ0RST01TVE9QCQkJU3RvcCB0aGUgY2Ryb20gZHJpdmUKKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01TVE9QLCAwKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwljZCBkcml2ZSBub3QgYXVkaW8tY2FwYWJsZS4KKworCW5vdGVzOgorCSAgRXhhY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBpb2N0bCBkZXBlbmRzIG9uIHRoZSBkZXZpY2UsCisJICBidXQgbW9zdCBzZWVtIHRvIHNwaW4gdGhlIGRyaXZlIGRvd24uCisKKworQ0RST01TVEFSVAkJCVN0YXJ0IHRoZSBjZHJvbSBkcml2ZQorCisJdXNhZ2U6CisKKwkgIGlvY3RsKGZkLCBDRFJPTVNUQVJULCAwKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwljZCBkcml2ZSBub3QgYXVkaW8tY2FwYWJsZS4KKworCW5vdGVzOgorCSAgRXhhY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBpb2N0bCBkZXBlbmRzIG9uIHRoZSBkZXZpY2UsCisJICBidXQgbW9zdCBzZWVtIHRvIHNwaW4gdGhlIGRyaXZlIHVwIGFuZC9vciBjbG9zZSB0aGUgdHJheS4KKwkgIE90aGVyIGRldmljZXMgaWdub3JlIHRoZSBpb2N0bCBjb21wbGV0ZWx5LgorCisKK0NEUk9NRUpFQ1QJCQlFamVjdHMgdGhlIGNkcm9tIG1lZGlhCisKKwl1c2FnZToKKworCSAgaW9jdGwoZmQsIENEUk9NRUpFQ1QsIDApOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVOT1NZUwljZCBkcml2ZSBub3QgY2FwYWJsZSBvZiBlamVjdGluZworCSAgRUJVU1kJCW90aGVyIHByb2Nlc3NlcyBhcmUgYWNjZXNzaW5nIGRyaXZlLCBvciBkb29yIGlzIGxvY2tlZAorCisJbm90ZXM6CisJICBTZWUgQ0RST01fTE9DS0RPT1IsIGJlbG93LgorCisKKworQ0RST01DTE9TRVRSQVkJCQlwZW5kYW50IG9mIENEUk9NRUpFQ1QKKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01FSkVDVCwgMCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm5zOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBjYXBhYmxlIG9mIGVqZWN0aW5nCisJICBFQlVTWQkJb3RoZXIgcHJvY2Vzc2VzIGFyZSBhY2Nlc3NpbmcgZHJpdmUsIG9yIGRvb3IgaXMgbG9ja2VkCisKKwlub3RlczoKKwkgIFNlZSBDRFJPTV9MT0NLRE9PUiwgYmVsb3cuCisKKworCitDRFJPTVZPTENUUkwJCQlDb250cm9sIG91dHB1dCB2b2x1bWUgKHN0cnVjdCBjZHJvbV92b2xjdHJsKQorCisJdXNhZ2U6CisKKwkgIHN0cnVjdCBjZHJvbV92b2xjdHJsIHZvbHVtZTsKKwkgIGlvY3RsKGZkLCBDRFJPTVZPTENUUkwsICZ2b2x1bWUpOworCisJaW5wdXRzOgorCSAgY2Ryb21fdm9sY3RybCBzdHJ1Y3R1cmUgY29udGFpbmluZyB2b2x1bWVzIGZvciB1cCB0byA0CisJICBjaGFubmVscy4KKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwljZCBkcml2ZSBub3QgYXVkaW8tY2FwYWJsZS4KKworCisKK0NEUk9NVk9MUkVBRAkJCUdldCB0aGUgZHJpdmUncyB2b2x1bWUgc2V0dGluZworCQkJCQkgIChzdHJ1Y3QgY2Ryb21fdm9sY3RybCkKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fdm9sY3RybCB2b2x1bWU7CisJICBpb2N0bChmZCwgQ0RST01WT0xSRUFELCAmdm9sdW1lKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBUaGUgY3VycmVudCB2b2x1bWUgc2V0dGluZ3MuCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJY2QgZHJpdmUgbm90IGF1ZGlvLWNhcGFibGUuCisKKworCitDRFJPTVNVQkNITkwJCQlSZWFkIHN1YmNoYW5uZWwgZGF0YSAoc3RydWN0IGNkcm9tX3N1YmNobmwpCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX3N1YmNobmwgcTsKKwkgIGlvY3RsKGZkLCBDRFJPTVNVQkNITkwsICZxKTsKKworCWlucHV0czoKKwkgIGNkcm9tX3N1YmNobmwgc3RydWN0dXJlCisKKwlvdXRwdXRzOgorCSAgY2Ryb21fc3ViY2hubCBzdHJ1Y3R1cmUKKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwljZCBkcml2ZSBub3QgYXVkaW8tY2FwYWJsZS4KKwkgIEVJTlZBTAlmb3JtYXQgbm90IENEUk9NX01TRiBvciBDRFJPTV9MQkEKKworCW5vdGVzOgorCSAgRm9ybWF0IGlzIGNvbnZlcnRlZCB0byBDRFJPTV9NU0Ygb24gcmV0dXJuCisKKworCitDRFJPTVJFQURSQVcJCQlyZWFkIGRhdGEgaW4gcmF3IG1vZGUgKDIzNTIgQnl0ZXMpCisJCQkJCSAgIChzdHJ1Y3QgY2Ryb21fcmVhZCkKKworCXVzYWdlOgorCisJICB1bmlvbiB7CisJICAgIHN0cnVjdCBjZHJvbV9tc2YgbXNmOwkJLyogaW5wdXQgKi8KKwkgICAgY2hhciBidWZmZXJbQ0RfRlJBTUVTSVpFX1JBV107CS8qIHJldHVybiAqLworCSAgfSBhcmc7CisJICBpb2N0bChmZCwgQ0RST01SRUFEUkFXLCAmYXJnKTsKKworCWlucHV0czoKKwkgIGNkcm9tX21zZiBzdHJ1Y3R1cmUgaW5kaWNhdGluZyBhbiBhZGRyZXNzIHRvIHJlYWQuCisJICBPbmx5IHRoZSBzdGFydCB2YWx1ZXMgYXJlIHNpZ25pZmljYW50LgorCisJb3V0cHV0czoKKwkgIERhdGEgd3JpdHRlbiB0byBhZGRyZXNzIHByb3ZpZGVkIGJ5IHVzZXIuCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJYWRkcmVzcyBsZXNzIHRoYW4gMCwgb3IgbXNmIGxlc3MgdGhhbiAwOjI6MAorCSAgRU5PTUVNCW91dCBvZiBtZW1vcnkKKworCW5vdGVzOgorCSAgQXMgb2YgMi42LjguMSwgY29tbWVudHMgaW4gPGxpbnV4L2Nkcm9tLmg+IGluZGljYXRlIHRoYXQgdGhpcworCSAgaW9jdGwgYWNjZXB0cyBhIGNkcm9tX3JlYWQgc3RydWN0dXJlLCBidXQgYWN0dWFsIHNvdXJjZSBjb2RlCisJICByZWFkcyBhIGNkcm9tX21zZiBzdHJ1Y3R1cmUgYW5kIHdyaXRlcyBhIGJ1ZmZlciBvZiBkYXRhIHRvCisJICB0aGUgc2FtZSBhZGRyZXNzLgorCisJICBNU0YgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gTEJBIHZhbHVlcyB2aWEgdGhpcyBmb3JtdWxhOgorCisJICAgIGxiYSA9ICgoKG0gKiBDRF9TRUNTKSArIHMpICogQ0RfRlJBTUVTICsgZikgLSBDRF9NU0ZfT0ZGU0VUOworCisKKworCitDRFJPTVJFQURNT0RFMQkJCVJlYWQgQ0RST00gbW9kZSAxIGRhdGEgKDIwNDggQnl0ZXMpCisJCQkJCSAgIChzdHJ1Y3QgY2Ryb21fcmVhZCkKKworCW5vdGVzOgorCSAgSWRlbnRpY2FsIHRvIENEUk9NUkVBRFJBVyBleGNlcHQgdGhhdCBibG9jayBzaXplIGlzCisJICBDRF9GUkFNRVNJWkUgKDIwNDgpIGJ5dGVzCisKKworCitDRFJPTVJFQURNT0RFMgkJCVJlYWQgQ0RST00gbW9kZSAyIGRhdGEgKDIzMzYgQnl0ZXMpCisJCQkJCSAgIChzdHJ1Y3QgY2Ryb21fcmVhZCkKKworCW5vdGVzOgorCSAgSWRlbnRpY2FsIHRvIENEUk9NUkVBRFJBVyBleGNlcHQgdGhhdCBibG9jayBzaXplIGlzCisJICBDRF9GUkFNRVNJWkVfUkFXMCAoMjMzNikgYnl0ZXMKKworCisKK0NEUk9NUkVBREFVRElPCQkJKHN0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvKQorCisJdXNhZ2U6CisKKwkgIHN0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvIHJhOworCSAgaW9jdGwoZmQsIENEUk9NUkVBREFVRElPLCAmcmEpOworCisJaW5wdXRzOgorCSAgY2Ryb21fcmVhZF9hdWRpbyBzdHJ1Y3R1cmUgY29udGFpbmluZyByZWFkIHN0YXJ0CisJICBwb2ludCBhbmQgbGVuZ3RoCisKKwlvdXRwdXRzOgorCSAgYXVkaW8gZGF0YSwgcmV0dXJuZWQgdG8gYnVmZmVyIGluZGljYXRlZCBieSByYQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCWZvcm1hdCBub3QgQ0RST01fTVNGIG9yIENEUk9NX0xCQQorCSAgRUlOVkFMCW5mcmFtZXMgbm90IGluIHJhbmdlIFsxIDc1XQorCSAgRU5YSU8JCWRyaXZlIGhhcyBubyBxdWV1ZSAocHJvYmFibHkgbWVhbnMgaW52YWxpZCBmZCkKKwkgIEVOT01FTQlvdXQgb2YgbWVtb3J5CisKKworQ0RST01FSkVDVF9TVwkJCWVuYWJsZSgxKS9kaXNhYmxlKDApIGF1dG8tZWplY3RpbmcKKworCXVzYWdlOgorCisJICBpbnQgdmFsOworCSAgaW9jdGwoZmQsIENEUk9NRUpFQ1RfU1csIHZhbCk7CisKKwlpbnB1dHM6CisJICBGbGFnIHNwZWNpZnlpbmcgYXV0by1lamVjdCBmbGFnLgorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCURyaXZlIGlzIG5vdCBjYXBhYmxlIG9mIGVqZWN0aW5nLgorCSAgRUJVU1kJCURvb3IgaXMgbG9ja2VkCisKKworCisKK0NEUk9NTVVMVElTRVNTSU9OCQlPYnRhaW4gdGhlIHN0YXJ0LW9mLWxhc3Qtc2Vzc2lvbgorCQkJCSAgYWRkcmVzcyBvZiBtdWx0aSBzZXNzaW9uIGRpc2tzCisJCQkJICAoc3RydWN0IGNkcm9tX211bHRpc2Vzc2lvbikKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX211bHRpc2Vzc2lvbiBtc19pbmZvOworCSAgaW9jdGwoZmQsIENEUk9NTVVMVElTRVNTSU9OLCAmbXNfaW5mbyk7CisKKwlpbnB1dHM6CisJICBjZHJvbV9tdWx0aXNlc3Npb24gc3RydWN0dXJlIGNvbnRhaW5pbmcgZGVzaXJlZAorCSAgZm9ybWF0LgorCisJb3V0cHV0czoKKwkgIGNkcm9tX211bHRpc2Vzc2lvbiBzdHJ1Y3R1cmUgaXMgZmlsbGVkIHdpdGggbGFzdF9zZXNzaW9uCisJICBpbmZvcm1hdGlvbi4KKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAlmb3JtYXQgbm90IENEUk9NX01TRiBvciBDRFJPTV9MQkEKKworCitDRFJPTV9HRVRfTUNOCQkJT2J0YWluIHRoZSAiVW5pdmVyc2FsIFByb2R1Y3QgQ29kZSIKKwkJCQkgICBpZiBhdmFpbGFibGUgKHN0cnVjdCBjZHJvbV9tY24pCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX21jbiBtY247CisJICBpb2N0bChmZCwgQ0RST01fR0VUX01DTiwgJm1jbik7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVW5pdmVyc2FsIFByb2R1Y3QgQ29kZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCURyaXZlIGlzIG5vdCBjYXBhYmxlIG9mIHJlYWRpbmcgTUNOIGRhdGEuCisKKwlub3RlczoKKwkgIFNvdXJjZSBjb2RlIGNvbW1lbnRzIHN0YXRlOgorCisJICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQsIGFsdGhvdWdoIHZlcnkgZmV3CisJICAgIGF1ZGlvIGRpc2NzIGdpdmUgVW5pdmVyc2FsIFByb2R1Y3QgQ29kZSBpbmZvcm1hdGlvbiwgd2hpY2gKKwkgICAgc2hvdWxkIGp1c3QgYmUgdGhlIE1lZGl1bSBDYXRhbG9nIE51bWJlciBvbiB0aGUgYm94LiAgTm90ZSwKKwkgICAgdGhhdCB0aGUgd2F5IHRoZSBjb2RlIGlzIHdyaXR0ZW4gb24gdGhlIENEIGlzIC9ub3QvIHVuaWZvcm0KKwkgICAgYWNyb3NzIGFsbCBkaXNjcyEKKworCisKKworQ0RST01fR0VUX1VQQwkJCUNEUk9NX0dFVF9NQ04gIChkZXByZWNhdGVkKQorCisJTm90IGltcGxlbWVudGVkLCBhcyBvZiAyLjYuOC4xCisKKworCitDRFJPTVJFU0VUCQkJaGFyZC1yZXNldCB0aGUgZHJpdmUKKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01SRVNFVCwgMCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVOT1NZUwlEcml2ZSBpcyBub3QgY2FwYWJsZSBvZiByZXNldHRpbmcuCisKKworCisKK0NEUk9NUkVBRENPT0tFRAkJCXJlYWQgZGF0YSBpbiBjb29rZWQgbW9kZQorCisJdXNhZ2U6CisKKwkgIHU4IGJ1ZmZlcltDRF9GUkFNRVNJWkVdCisJICBpb2N0bChmZCwgQ0RST01SRUFEQ09PS0VELCBidWZmZXIpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIDIwNDggYnl0ZXMgb2YgZGF0YSwgImNvb2tlZCIgbW9kZS4KKworCW5vdGVzOgorCSAgTm90IGltcGxlbWVudGVkIG9uIGFsbCBkcml2ZXMuCisKKworCisKK0NEUk9NUkVBREFMTAkJCXJlYWQgYWxsIDI2NDYgYnl0ZXMKKworCVNhbWUgYXMgQ0RST01SRUFEQ09PS0VELCBidXQgcmVhZHMgMjY0NiBieXRlcy4KKworCisKK0NEUk9NU0VFSwkJCXNlZWsgbXNmIGFkZHJlc3MKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fbXNmIG1zZjsKKwkgIGlvY3RsKGZkLCBDRFJPTVNFRUssICZtc2YpOworCisJaW5wdXRzOgorCSAgTVNGIGFkZHJlc3MgdG8gc2VlayB0by4KKworCW91dHB1dHM6CW5vbmUKKworCisKK0NEUk9NUExBWUJMSwkJCXNjc2ktY2Qgb25seSwgKHN0cnVjdCBjZHJvbV9ibGspCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX2JsayBibGs7CisJICBpb2N0bChmZCwgQ0RST01QTEFZQkxLLCAmYmxrKTsKKworCWlucHV0czoKKwkgIFJlZ2lvbiB0byBwbGF5CisKKwlvdXRwdXRzOglub25lCisKKworCitDRFJPTUdFVFNQSU5ET1dOCisKKwl1c2FnZToKKworCSAgY2hhciBzcGluZG93bjsKKwkgIGlvY3RsKGZkLCBDRFJPTUdFVFNQSU5ET1dOLCAmc3BpbmRvd24pOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCA0LWJpdCBzcGluZG93biB2YWx1ZS4KKworCisKKworQ0RST01TRVRTUElORE9XTgorCisJdXNhZ2U6CisKKwkgIGNoYXIgc3BpbmRvd24KKwkgIGlvY3RsKGZkLCBDRFJPTVNFVFNQSU5ET1dOLCAmc3BpbmRvd24pOworCisJaW5wdXRzOgorCSAgNC1iaXQgdmFsdWUgdXNlZCB0byBjb250cm9sIHNwaW5kb3duIChUT0RPOiBtb3JlIGRldGFpbCBoZXJlKQorCisJb3V0cHV0czoJbm9uZQorCisKKworCisKK0NEUk9NX1NFVF9PUFRJT05TCQlTZXQgYmVoYXZpb3Igb3B0aW9ucworCisJdXNhZ2U6CisKKwkgIGludCBvcHRpb25zOworCSAgaW9jdGwoZmQsIENEUk9NX1NFVF9PUFRJT05TLCBvcHRpb25zKTsKKworCWlucHV0czoKKwkgIE5ldyB2YWx1ZXMgZm9yIGRyaXZlIG9wdGlvbnMuICBUaGUgbG9naWNhbCAnb3InIG9mOgorCSAgICBDRE9fQVVUT19DTE9TRQljbG9zZSB0cmF5IG9uIGZpcnN0IG9wZW4oMikKKwkgICAgQ0RPX0FVVE9fRUpFQ1QJb3BlbiB0cmF5IG9uIGxhc3QgcmVsZWFzZQorCSAgICBDRE9fVVNFX0ZGTEFHUwl1c2UgT19OT05CTE9DSyBpbmZvcm1hdGlvbiBvbiBvcGVuCisJICAgIENET19MT0NLCQlsb2NrIHRyYXkgb24gb3BlbiBmaWxlcworCSAgICBDRE9fQ0hFQ0tfVFlQRQljaGVjayB0eXBlIG9uIG9wZW4gZm9yIGRhdGEKKworCW91dHB1dHM6CisJICBSZXR1cm5zIHRoZSByZXN1bHRpbmcgb3B0aW9ucyBzZXR0aW5ncyBpbiB0aGUKKwkgIGlvY3RsIHJldHVybiB2YWx1ZS4gIFJldHVybnMgLTEgb24gZXJyb3IuCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJc2VsZWN0ZWQgb3B0aW9uKHMpIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmUuCisKKworCisKK0NEUk9NX0NMRUFSX09QVElPTlMJCUNsZWFyIGJlaGF2aW9yIG9wdGlvbnMKKworCVNhbWUgYXMgQ0RST01fU0VUX09QVElPTlMsIGV4Y2VwdCB0aGF0IHNlbGVjdGVkIG9wdGlvbnMgYXJlCisJdHVybmVkIG9mZi4KKworCisKK0NEUk9NX1NFTEVDVF9TUEVFRAkJU2V0IHRoZSBDRC1ST00gc3BlZWQKKworCXVzYWdlOgorCisJICBpbnQgc3BlZWQ7CisJICBpb2N0bChmZCwgQ0RST01fU0VMRUNUX1NQRUVELCBzcGVlZCk7CisKKwlpbnB1dHM6CisJICBOZXcgZHJpdmUgc3BlZWQuCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJc3BlZWQgc2VsZWN0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmUuCisKKworCitDRFJPTV9TRUxFQ1RfRElTQwkJU2VsZWN0IGRpc2MgKGZvciBqdWtlLWJveGVzKQorCisJdXNhZ2U6CisKKwkgIGludCBkaXNrOworCSAgaW9jdGwoZmQsIENEUk9NX1NFTEVDVF9ESVNDLCBkaXNrKTsKKworCWlucHV0czoKKwkgIERpc2sgdG8gbG9hZCBpbnRvIGRyaXZlLgorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCURpc2sgbnVtYmVyIGJleW9uZCBjYXBhY2l0eSBvZiBkcml2ZQorCisKKworQ0RST01fTUVESUFfQ0hBTkdFRAkJQ2hlY2sgaXMgbWVkaWEgY2hhbmdlZAorCisJdXNhZ2U6CisKKwkgIGludCBzbG90OworCSAgaW9jdGwoZmQsIENEUk9NX01FRElBX0NIQU5HRUQsIHNsb3QpOworCisJaW5wdXRzOgorCSAgU2xvdCBudW1iZXIgdG8gYmUgdGVzdGVkLCBhbHdheXMgemVybyBleGNlcHQgZm9yIGp1a2Vib3hlcy4KKwkgIE1heSBhbHNvIGJlIHNwZWNpYWwgdmFsdWVzIENEU0xfTk9ORSBvciBDRFNMX0NVUlJFTlQKKworCW91dHB1dHM6CisJICBJb2N0bCByZXR1cm4gdmFsdWUgaXMgMCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBtZWRpYQorCSAgaGFzIGJlZW4gY2hhbmdlZCwgb3IgLTEgb24gZXJyb3IuCisKKwllcnJvciByZXR1cm5zOgorCSAgRU5PU1lTCURyaXZlIGNhbid0IGRldGVjdCBtZWRpYSBjaGFuZ2UKKwkgIEVJTlZBTAlTbG90IG51bWJlciBiZXlvbmQgY2FwYWNpdHkgb2YgZHJpdmUKKwkgIEVOT01FTQlPdXQgb2YgbWVtb3J5CisKKworCitDRFJPTV9EUklWRV9TVEFUVVMJCUdldCB0cmF5IHBvc2l0aW9uLCBldGMuCisKKwl1c2FnZToKKworCSAgaW50IHNsb3Q7CisJICBpb2N0bChmZCwgQ0RST01fRFJJVkVfU1RBVFVTLCBzbG90KTsKKworCWlucHV0czoKKwkgIFNsb3QgbnVtYmVyIHRvIGJlIHRlc3RlZCwgYWx3YXlzIHplcm8gZXhjZXB0IGZvciBqdWtlYm94ZXMuCisJICBNYXkgYWxzbyBiZSBzcGVjaWFsIHZhbHVlcyBDRFNMX05PTkUgb3IgQ0RTTF9DVVJSRU5UCisKKwlvdXRwdXRzOgorCSAgSW9jdGwgcmV0dXJuIHZhbHVlIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCisJICBmcm9tIDxsaW51eC9jZHJvbS5oPjoKKworCSAgICBDRFNfTk9fSU5GTwkJSW5mb3JtYXRpb24gbm90IGF2YWlsYWJsZS4KKwkgICAgQ0RTX05PX0RJU0MKKwkgICAgQ0RTX1RSQVlfT1BFTgorCSAgICBDRFNfRFJJVkVfTk9UX1JFQURZCisJICAgIENEU19ESVNDX09LCisJICAgIC0xCQkJZXJyb3IKKworCWVycm9yIHJldHVybnM6CisJICBFTk9TWVMJRHJpdmUgY2FuJ3QgZGV0ZWN0IGRyaXZlIHN0YXR1cworCSAgRUlOVkFMCVNsb3QgbnVtYmVyIGJleW9uZCBjYXBhY2l0eSBvZiBkcml2ZQorCSAgRU5PTUVNCU91dCBvZiBtZW1vcnkKKworCisKKworQ0RST01fRElTQ19TVEFUVVMJCUdldCBkaXNjIHR5cGUsIGV0Yy4KKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01fRElTQ19TVEFUVVMsIDApOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIElvY3RsIHJldHVybiB2YWx1ZSB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcworCSAgZnJvbSA8bGludXgvY2Ryb20uaD46CisJICAgIENEU19OT19JTkZPCisJICAgIENEU19BVURJTworCSAgICBDRFNfTUlYRUQKKwkgICAgQ0RTX1hBXzJfMgorCSAgICBDRFNfWEFfMl8xCisJICAgIENEU19EQVRBXzEKKworCWVycm9yIHJldHVybnM6CW5vbmUgYXQgcHJlc2VudAorCisJbm90ZXM6CisJICBTb3VyY2UgY29kZSBjb21tZW50cyBzdGF0ZToKKworCSAgICBPaywgdGhpcyBpcyB3aGVyZSBwcm9ibGVtcyBzdGFydC4gIFRoZSBjdXJyZW50IGludGVyZmFjZSBmb3IKKwkgICAgdGhlIENEUk9NX0RJU0NfU1RBVFVTIGlvY3RsIGlzIGZsYXdlZC4gIEl0IG1ha2VzIHRoZSBmYWxzZQorCSAgICBhc3N1bXB0aW9uIHRoYXQgQ0RzIGFyZSBhbGwgQ0RTX0RBVEFfMSBvciBhbGwgQ0RTX0FVRElPLCBldGMuCisJICAgIFVuZm9ydHVuYXRseSwgd2hpbGUgdGhpcyBpcyBvZnRlbiB0aGUgY2FzZSwgaXQgaXMgYWxzbworCSAgICB2ZXJ5IGNvbW1vbiBmb3IgQ0RzIHRvIGhhdmUgc29tZSB0cmFja3Mgd2l0aCBkYXRhLCBhbmQgc29tZQorCSAgICB0cmFja3Mgd2l0aCBhdWRpby4JSnVzdCBiZWNhdXNlIEkgZmVlbCBsaWtlIGl0LCBJIGRlY2xhcmUKKwkgICAgdGhlIGZvbGxvd2luZyB0byBiZSB0aGUgYmVzdCB3YXkgdG8gY29wZS4gIElmIHRoZSBDRCBoYXMKKwkgICAgQU5ZIGRhdGEgdHJhY2tzIG9uIGl0LCBpdCB3aWxsIGJlIHJldHVybmVkIGFzIGEgZGF0YSBDRC4KKwkgICAgSWYgaXQgaGFzIGFueSBYQSB0cmFja3MsIEkgd2lsbCByZXR1cm4gaXQgYXMgdGhhdC4JTm93IEkKKwkgICAgY291bGQgc2ltcGxpZnkgdGhpcyBpbnRlcmZhY2UgYnkgY29tYmluaW5nIHRoZXNlIHJldHVybnMgd2l0aAorCSAgICB0aGUgYWJvdmUsIGJ1dCB0aGlzIG1vcmUgY2xlYXJseSBkZW1vbnN0cmF0ZXMgdGhlIHByb2JsZW0KKwkgICAgd2l0aCB0aGUgY3VycmVudCBpbnRlcmZhY2UuICBUb28gYmFkIHRoaXMgd2Fzbid0IGRlc2lnbmVkCisJICAgIHRvIHVzZSBiaXRtYXNrcy4uLgkgICAgICAgLUVyaWsKKworCSAgICBXZWxsLCBub3cgd2UgaGF2ZSB0aGUgb3B0aW9uIENEU19NSVhFRDogYSBtaXhlZC10eXBlIENELgorCSAgICBVc2VyIGxldmVsIHByb2dyYW1tZXJzIG1pZ2h0IGZlZWwgdGhlIGlvY3RsIGlzIG5vdCB2ZXJ5CisJICAgIHVzZWZ1bC4KKwkJCS0tLWRhdmlkCisKKworCisKK0NEUk9NX0NIQU5HRVJfTlNMT1RTCQlHZXQgbnVtYmVyIG9mIHNsb3RzCisKKwl1c2FnZToKKworCSAgaW9jdGwoZmQsIENEUk9NX0NIQU5HRVJfTlNMT1RTLCAwKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBUaGUgaW9jdGwgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBzbG90cyBpbiBhCisJICBDRCBjaGFuZ2VyLiAgVHlwaWNhbGx5IDEgZm9yIG5vbi1tdWx0aS1kaXNrIGRldmljZXMuCisKKwllcnJvciByZXR1cm5zOglub25lCisKKworCitDRFJPTV9MT0NLRE9PUgkJCWxvY2sgb3IgdW5sb2NrIGRvb3IKKworCXVzYWdlOgorCisJICBpbnQgbG9jazsKKwkgIGlvY3RsKGZkLCBDRFJPTV9MT0NLRE9PUiwgbG9jayk7CisKKwlpbnB1dHM6CisJICBEb29yIGxvY2sgZmxhZywgMT1sb2NrLCAwPXVubG9jaworCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVEUklWRV9DQU5UX0RPX1RISVMJRG9vciBsb2NrIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQuCisJICBFQlVTWQkJCUF0dGVtcHQgdG8gdW5sb2NrIHdoZW4gbXVsdGlwbGUgdXNlcnMKKwkgIAkJCWhhdmUgdGhlIGRyaXZlIG9wZW4gYW5kIG5vdCBDQVBfU1lTX0FETUlOCisKKwlub3RlczoKKwkgIEFzIG9mIDIuNi44LjEsIHRoZSBsb2NrIGZsYWcgaXMgYSBnbG9iYWwgbG9jaywgbWVhbmluZyB0aGF0CisJICBhbGwgQ0QgZHJpdmVzIHdpbGwgYmUgbG9ja2VkIG9yIHVubG9ja2VkIHRvZ2V0aGVyLiAgVGhpcyBpcworCSAgcHJvYmFibHkgYSBidWcuCisKKwkgIFRoZSBFRFJJVkVfQ0FOVF9ET19USElTIHZhbHVlIGlzIGRlZmluZWQgaW4gPGxpbnV4L2Nkcm9tLmg+CisJICBhbmQgaXMgY3VycmVudGx5ICgyLjYuOC4xKSB0aGUgc2FtZSBhcyBFT1BOT1RTVVBQCisKKworCitDRFJPTV9ERUJVRwkJCVR1cm4gZGVidWcgbWVzc2FnZXMgb24vb2ZmCisKKwl1c2FnZToKKworCSAgaW50IGRlYnVnOworCSAgaW9jdGwoZmQsIENEUk9NX0RFQlVHLCBkZWJ1Zyk7CisKKwlpbnB1dHM6CisJICBDZHJvbSBkZWJ1ZyBmbGFnLCAwPWRpc2FibGUsIDE9ZW5hYmxlCisKKwlvdXRwdXRzOgorCSAgVGhlIGlvY3RsIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBuZXcgZGVidWcgZmxhZy4KKworCWVycm9yIHJldHVybjoKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCisKKworQ0RST01fR0VUX0NBUEFCSUxJVFkJCWdldCBjYXBhYmlsaXRpZXMKKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01fR0VUX0NBUEFCSUxJVFksIDApOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSBpb2N0bCByZXR1cm4gdmFsdWUgaXMgdGhlIGN1cnJlbnQgZGV2aWNlIGNhcGFiaWxpdHkKKwkgIGZsYWdzLiAgU2VlIENEQ19DTE9TRV9UUkFZLCBDRENfT1BFTl9UUkFZLCBldGMuCisKKworCitDRFJPTUFVRElPQlVGU0laCQlzZXQgdGhlIGF1ZGlvIGJ1ZmZlciBzaXplCisKKwl1c2FnZToKKworCSAgaW50IGFyZzsKKwkgIGlvY3RsKGZkLCBDRFJPTUFVRElPQlVGU0laLCB2YWwpOworCisJaW5wdXRzOgorCSAgTmV3IGF1ZGlvIGJ1ZmZlciBzaXplCisKKwlvdXRwdXRzOgorCSAgVGhlIGlvY3RsIHJldHVybiB2YWx1ZSBpcyB0aGUgbmV3IGF1ZGlvIGJ1ZmZlciBzaXplLCBvciAtMQorCSAgb24gZXJyb3IuCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJTm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KKworCW5vdGVzOgorCSAgTm90IHN1cHBvcnRlZCBieSBhbGwgZHJpdmVycy4KKworCisKK0RWRF9SRUFEX1NUUlVDVAkJCVJlYWQgc3RydWN0dXJlCisKKwl1c2FnZToKKworCSAgZHZkX3N0cnVjdCBzOworCSAgaW9jdGwoZmQsIERWRF9SRUFEX1NUUlVDVCwgJnMpOworCisJaW5wdXRzOgorCSAgZHZkX3N0cnVjdCBzdHJ1Y3R1cmUsIGNvbnRhaW5pbmc6CisJICAgIHR5cGUJCXNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24gZGVzaXJlZCwgb25lIG9mCisJICAgIAkJCURWRF9TVFJVQ1RfUEhZU0lDQUwsIERWRF9TVFJVQ1RfQ09QWVJJR0hULAorCQkJCURWRF9TVFJVQ1RfRElTQ0tFWSwgRFZEX1NUUlVDVF9CQ0EsCisJCQkJRFZEX1NUUlVDVF9NQU5VRkFDVAorCSAgICBwaHlzaWNhbC5sYXllcl9udW0JZGVzaXJlZCBsYXllciwgaW5kZXhlZCBmcm9tIDAKKwkgICAgY29weXJpZ2h0LmxheWVyX251bQlkZXNpcmVkIGxheWVyLCBpbmRleGVkIGZyb20gMAorCSAgICBkaXNja2V5LmFnaWQKKworCW91dHB1dHM6CisJICBkdmRfc3RydWN0IHN0cnVjdHVyZSwgY29udGFpbmluZzoKKwkgICAgcGh5c2ljYWwJCWZvciB0eXBlID09IERWRF9TVFJVQ1RfUEhZU0lDQUwKKwkgICAgY29weXJpZ2h0CQlmb3IgdHlwZSA9PSBEVkRfU1RSVUNUX0NPUFlSSUdIVAorCSAgICBkaXNja2V5LnZhbHVlCWZvciB0eXBlID09IERWRF9TVFJVQ1RfRElTQ0tFWQorCSAgICBiY2Eue2xlbix2YWx1ZX0JZm9yIHR5cGUgPT0gRFZEX1NUUlVDVF9CQ0EKKwkgICAgbWFudWZhY3Que2xlbix2YWx1fQlmb3IgdHlwZSA9PSBEVkRfU1RSVUNUX01BTlVGQUNUCisKKwllcnJvciByZXR1cm5zOgorCSAgRUlOVkFMCXBoeXNpY2FsLmxheWVyX251bSBleGNlZWRzIG51bWJlciBvZiBsYXllcnMKKwkgIEVJTwkJUmVjaWV2ZWQgaW52YWxpZCByZXNwb25zZSBmcm9tIGRyaXZlCisKKworCitEVkRfV1JJVEVfU1RSVUNUCQlXcml0ZSBzdHJ1Y3R1cmUKKworCU5vdCBpbXBsZW1lbnRlZCwgYXMgb2YgMi42LjguMQorCisKKworRFZEX0FVVEgJCQlBdXRoZW50aWNhdGlvbgorCisJdXNhZ2U6CisKKwkgIGR2ZF9hdXRoaW5mbyBhaTsKKwkgIGlvY3RsKGZkLCBEVkRfQVVUSCwgJmFpKTsKKworCWlucHV0czoKKwkgIGR2ZF9hdXRoaW5mbyBzdHJ1Y3R1cmUuICBTZWUgPGxpbnV4L2Nkcm9tLmg+CisKKwlvdXRwdXRzOgorCSAgZHZkX2F1dGhpbmZvIHN0cnVjdHVyZS4KKworCWVycm9yIHJldHVybjoKKwkgIEVOT1RUWQlhaS50eXBlIG5vdCByZWNvZ25pemVkLgorCisKKworQ0RST01fU0VORF9QQUNLRVQJCXNlbmQgYSBwYWNrZXQgdG8gdGhlIGRyaXZlCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX2dlbmVyaWNfY29tbWFuZCBjZ2M7CisJICBpb2N0bChmZCwgQ0RST01fU0VORF9QQUNLRVQsICZjZ2MpOworCisJaW5wdXRzOgorCSAgY2Ryb21fZ2VuZXJpY19jb21tYW5kIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBwYWNrZXQgdG8gc2VuZC4KKworCW91dHB1dHM6CW5vbmUKKwkgIGNkcm9tX2dlbmVyaWNfY29tbWFuZCBzdHJ1Y3R1cmUgY29udGFpbmluZyByZXN1bHRzLgorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlPCQljb21tYW5kIGZhaWxlZC4KKwkgIEVQRVJNCQlPcGVyYXRpb24gbm90IHBlcm1pdHRlZCwgZWl0aGVyIGJlY2F1c2UgYQorCQkJd3JpdGUgY29tbWFuZCB3YXMgYXR0ZW1wdGVkIG9uIGEgZHJpdmUgd2hpY2gKKwkJCWlzIG9wZW5lZCByZWFkLW9ubHksIG9yIGJlY2F1c2UgdGhlIGNvbW1hbmQKKwkJCXJlcXVpcmVzIENBUF9TWVNfUkFXSU8KKwkgIEVJTlZBTAljZ2MuZGF0YV9kaXJlY3Rpb24gbm90IHNldAorCisKKworQ0RST01fTkVYVF9XUklUQUJMRQkJZ2V0IG5leHQgd3JpdGFibGUgYmxvY2sKKworCXVzYWdlOgorCisJICBsb25nIG5leHQ7CisJICBpb2N0bChmZCwgQ0RST01fTkVYVF9XUklUQUJMRSwgJm5leHQpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSBuZXh0IHdyaXRhYmxlIGJsb2NrLgorCisJbm90ZXM6CisJICBJZiB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBpb2N0bCBkaXJlY3RseSwgdGhlCisJICBpb2N0bCB3aWxsIHJldHVybiBDRFJPTV9MQVNUX1dSSVRURU4gKyA3LgorCisKKworQ0RST01fTEFTVF9XUklUVEVOCQlnZXQgbGFzdCBibG9jayB3cml0dGVuIG9uIGRpc2MKKworCXVzYWdlOgorCisJICBsb25nIGxhc3Q7CisJICBpb2N0bChmZCwgQ0RST01fTEFTVF9XUklUVEVOLCAmbGFzdCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIGxhc3QgYmxvY2sgd3JpdHRlbiBvbiBkaXNjCisKKwlub3RlczoKKwkgIElmIHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsIGRpcmVjdGx5LCB0aGUKKwkgIHJlc3VsdCBpcyBkZXJpdmVkIGZyb20gdGhlIGRpc2MncyB0YWJsZSBvZiBjb250ZW50cy4gIElmIHRoZQorCSAgdGFibGUgb2YgY29udGVudHMgY2FuJ3QgYmUgcmVhZCwgdGhpcyBpb2N0bCByZXR1cm5zIGFuCisJICBlcnJvci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaGRpby50eHQgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2hkaW8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhN2FlYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2hkaW8udHh0CkBAIC0wLDAgKzEsMTA3MCBAQAorCQlTdW1tYXJ5IG9mIEhESU9fIGlvY3RsIGNhbGxzLgorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkJRWR3YXJkIEEuIEZhbGsgPGVmYWxrQGdvb2dsZS5jb20+CisKKwkJTm92ZW1iZXIsIDIwMDQKKworVGhpcyBkb2N1bWVudCBhdHRlbXB0cyB0byBkZXNjcmliZSB0aGUgaW9jdGwoMikgY2FsbHMgc3VwcG9ydGVkIGJ5Cit0aGUgSEQvSURFIGxheWVyLiAgVGhlc2UgYXJlIGJ5LWFuZC1sYXJnZSBpbXBsZW1lbnRlZCAoYXMgb2YgTGludXggMi42KQoraW4gZHJpdmVycy9pZGUvaWRlLmMgYW5kIGRyaXZlcnMvYmxvY2svc2NzaV9pb2N0bC5jCisKK2lvY3RsIHZhbHVlcyBhcmUgbGlzdGVkIGluIDxsaW51eC9oZHJlZy5oPi4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhleQorYXJlIGFzIGZvbGxvd3M6CisKKyAgICBpb2N0bHMgdGhhdCBwYXNzIGFyZ3VtZW50IHBvaW50ZXJzIHRvIHVzZXIgc3BhY2U6CisKKwlIRElPX0dFVEdFTwkJZ2V0IGRldmljZSBnZW9tZXRyeQorCUhESU9fR0VUX1VOTUFTS0lOVFIJZ2V0IGN1cnJlbnQgdW5tYXNrIHNldHRpbmcKKwlIRElPX0dFVF9NVUxUQ09VTlQJZ2V0IGN1cnJlbnQgSURFIGJsb2NrbW9kZSBzZXR0aW5nCisJSERJT19HRVRfUURNQQkJZ2V0IHVzZS1xZG1hIGZsYWcKKwlIRElPX1NFVF9YRkVSCQlzZXQgdHJhbnNmZXIgcmF0ZSB2aWEgcHJvYworCUhESU9fT0JTT0xFVEVfSURFTlRJVFkJT0JTT0xFVEUsIERPIE5PVCBVU0UKKwlIRElPX0dFVF9LRUVQU0VUVElOR1MJZ2V0IGtlZXAtc2V0dGluZ3Mtb24tcmVzZXQgZmxhZworCUhESU9fR0VUXzMyQklUCQlnZXQgY3VycmVudCBpb18zMmJpdCBzZXR0aW5nCisJSERJT19HRVRfTk9XRVJSCQlnZXQgaWdub3JlLXdyaXRlLWVycm9yIGZsYWcKKwlIRElPX0dFVF9ETUEJCWdldCB1c2UtZG1hIGZsYWcKKwlIRElPX0dFVF9OSUNFCQlnZXQgbmljZSBmbGFncworCUhESU9fR0VUX0lERU5USVRZCWdldCBJREUgaWRlbnRpZmljYXRpb24gaW5mbworCUhESU9fR0VUX1dDQUNIRQkJZ2V0IHdyaXRlIGNhY2hlIG1vZGUgb258b2ZmCisJSERJT19HRVRfQUNPVVNUSUMJZ2V0IGFjb3VzdGljIHZhbHVlCisJSERJT19HRVRfQUREUkVTUwlnZXQgc2VjdG9yIGFkZHJlc3NpbmcgbW9kZQorCUhESU9fR0VUX0JVU1NUQVRFCWdldCB0aGUgYnVzIHN0YXRlIG9mIHRoZSBod2lmCisJSERJT19UUklTVEFURV9IV0lGCWV4ZWN1dGUgYSBjaGFubmVsIHRyaXN0YXRlCisJSERJT19EUklWRV9SRVNFVAlleGVjdXRlIGEgZGV2aWNlIHJlc2V0CisJSERJT19EUklWRV9UQVNLRklMRQlleGVjdXRlIHJhdyB0YXNrZmlsZQorCUhESU9fRFJJVkVfVEFTSwkJZXhlY3V0ZSB0YXNrIGFuZCBzcGVjaWFsIGRyaXZlIGNvbW1hbmQKKwlIRElPX0RSSVZFX0NNRAkJZXhlY3V0ZSBhIHNwZWNpYWwgZHJpdmUgY29tbWFuZAorCUhESU9fRFJJVkVfQ01EX0FFQglIRElPX0RSSVZFX1RBU0sKKworICAgIGlvY3RscyB0aGF0IHBhc3Mgbm9uLXBvaW50ZXIgdmFsdWVzOgorCisJSERJT19TRVRfTVVMVENPVU5UCWNoYW5nZSBJREUgYmxvY2ttb2RlCisJSERJT19TRVRfVU5NQVNLSU5UUglwZXJtaXQgb3RoZXIgaXJxcyBkdXJpbmcgSS9PCisJSERJT19TRVRfS0VFUFNFVFRJTkdTCWtlZXAgaW9jdGwgc2V0dGluZ3Mgb24gcmVzZXQKKwlIRElPX1NFVF8zMkJJVAkJY2hhbmdlIGlvXzMyYml0IGZsYWdzCisJSERJT19TRVRfTk9XRVJSCQljaGFuZ2UgaWdub3JlLXdyaXRlLWVycm9yIGZsYWcKKwlIRElPX1NFVF9ETUEJCWNoYW5nZSB1c2UtZG1hIGZsYWcKKwlIRElPX1NFVF9QSU9fTU9ERQlyZWNvbmZpZyBpbnRlcmZhY2UgdG8gbmV3IHNwZWVkCisJSERJT19TQ0FOX0hXSUYJCXJlZ2lzdGVyIGFuZCAocmUpc2NhbiBpbnRlcmZhY2UKKwlIRElPX1NFVF9OSUNFCQlzZXQgbmljZSBmbGFncworCUhESU9fVU5SRUdJU1RFUl9IV0lGCXVucmVnaXN0ZXIgaW50ZXJmYWNlCisJSERJT19TRVRfV0NBQ0hFCQljaGFuZ2Ugd3JpdGUgY2FjaGUgZW5hYmxlLWRpc2FibGUKKwlIRElPX1NFVF9BQ09VU1RJQwljaGFuZ2UgYWNvdXN0aWMgYmVoYXZpb3IKKwlIRElPX1NFVF9CVVNTVEFURQlzZXQgdGhlIGJ1cyBzdGF0ZSBvZiB0aGUgaHdpZgorCUhESU9fU0VUX1FETUEJCWNoYW5nZSB1c2UtcWRtYSBmbGFnCisJSERJT19TRVRfQUREUkVTUwljaGFuZ2UgbGJhIGFkZHJlc3NpbmcgbW9kZXMKKworCUhESU9fU0VUX0lERV9TQ1NJCVNldCBzY3NpIGVtdWxhdGlvbiBtb2RlIG9uL29mZgorCUhESU9fU0VUX1NDU0lfSURFCW5vdCBpbXBsZW1lbnRlZCB5ZXQKKworCitUaGUgaW5mb3JtYXRpb24gdGhhdCBmb2xsb3dzIHdhcyBkZXRlcm1pbmVkIGZyb20gcmVhZGluZyBrZXJuZWwgc291cmNlCitjb2RlLiAgSXQgaXMgbGlrZWx5IHRoYXQgc29tZSBjb3JyZWN0aW9ucyB3aWxsIGJlIG1hZGUgb3ZlciB0aW1lLgorCisKKworCisKKworCitHZW5lcmFsOgorCisJVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCBpb2N0bCBjYWxscyByZXR1cm4gMCBvbiBzdWNjZXNzCisJYW5kIC0xIHdpdGggZXJybm8gc2V0IHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIG9uIGVycm9yLgorCisJVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCBpb2N0bCBjYWxscyByZXR1cm4gLTEgYW5kIHNldAorCWVycm5vIHRvIEVGQVVMVCBvbiBhIGZhaWxlZCBhdHRlbXB0IHRvIGNvcHkgZGF0YSB0byBvciBmcm9tIHVzZXIKKwlhZGRyZXNzIHNwYWNlLgorCisJVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cworCWFyZSBkZWZpbmVkIGluIDxsaW51eC9oZHJlZy5oPgorCisKKworSERJT19HRVRHRU8JCQlnZXQgZGV2aWNlIGdlb21ldHJ5CisKKwl1c2FnZToKKworCSAgc3RydWN0IGhkX2dlb21ldHJ5IGdlb207CisJICBpb2N0bChmZCwgSERJT19HRVRHRU8sICZnZW9tKTsKKworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKworCSAgaGRfZ2VvbWV0cnkgc3RydWN0dXJlIGNvbnRhaW5pbmc6CisKKwkgICAgaGVhZHMJbnVtYmVyIG9mIGhlYWRzCisJICAgIHNlY3RvcnMJbnVtYmVyIG9mIHNlY3RvcnMvdHJhY2sKKwkgICAgY3lsaW5kZXJzCW51bWJlciBvZiBjeWxpbmRlcnMsIG1vZCA2NTUzNgorCSAgICBzdGFydAlzdGFydGluZyBzZWN0b3Igb2YgdGhpcyBwYXJ0aXRpb24uCisKKworCWVycm9yIHJldHVybnM6CisJICBFSU5WQUwJaWYgdGhlIGRldmljZSBpcyBub3QgYSBkaXNrIGRyaXZlIG9yIGZsb3BweSBkcml2ZSwKKwkgIAkJb3IgaWYgdGhlIHVzZXIgcGFzc2VzIGEgbnVsbCBwb2ludGVyCisKKworCW5vdGVzOgorCisJICBOb3QgcGFydGljdWxhcmx5IHVzZWZ1bCB3aXRoIG1vZGVybiBkaXNrIGRyaXZlcywgd2hvc2UgZ2VvbWV0cnkKKwkgIGlzIGEgcG9saXRlIGZpY3Rpb24gYW55d2F5LiAgTW9kZXJuIGRyaXZlcyBhcmUgYWRkcmVzc2VkCisJICBwdXJlbHkgYnkgc2VjdG9yIG51bWJlciBub3dhZGF5cyAobGJhIGFkZHJlc3NpbmcpLCBhbmQgdGhlCisJICBkcml2ZSBnZW9tZXRyeSBpcyBhbiBhYnN0cmFjdGlvbiB3aGljaCBpcyBhY3R1YWxseSBzdWJqZWN0CisJICB0byBjaGFuZ2UuICBDdXJyZW50bHkgKGFzIG9mIE5vdiAyMDA0KSwgdGhlIGdlb21ldHJ5IHZhbHVlcworCSAgYXJlIHRoZSAiYmlvcyIgdmFsdWVzIC0tIHByZXN1bWFibHkgdGhlIHZhbHVlcyB0aGUgZHJpdmUgaGFkCisJICB3aGVuIExpbnV4IGZpcnN0IGJvb3RlZC4KKworCSAgSW4gYWRkaXRpb24sIHRoZSBjeWxpbmRlcnMgZmllbGQgb2YgdGhlIGhkX2dlb21ldHJ5IGlzIGFuCisJICB1bnNpZ25lZCBzaG9ydCwgbWVhbmluZyB0aGF0IG9uIG1vc3QgYXJjaGl0ZWN0dXJlcywgdGhpcworCSAgaW9jdGwgd2lsbCBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZSBvbiBkcml2ZXMgd2l0aCBtb3JlCisJICB0aGFuIDY1NTM1IHRyYWNrcy4KKworCSAgVGhlIHN0YXJ0IGZpZWxkIGlzIHVuc2lnbmVkIGxvbmcsIG1lYW5pbmcgdGhhdCBpdCB3aWxsIG5vdAorCSAgY29udGFpbiBhIG1lYW5pbmdmdWwgdmFsdWUgZm9yIGRpc2tzIG92ZXIgMjE5IEdiIGluIHNpemUuCisKKworCisKK0hESU9fR0VUX1VOTUFTS0lOVFIJCWdldCBjdXJyZW50IHVubWFzayBzZXR0aW5nCisKKwl1c2FnZToKKworCSAgbG9uZyB2YWw7CisJICBpb2N0bChmZCwgSERJT19HRVRfVU5NQVNLSU5UUiwgJnZhbCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIHZhbHVlIG9mIHRoZSBkcml2ZSdzIGN1cnJlbnQgdW5tYXNrIHNldHRpbmcKKworCisKK0hESU9fU0VUX1VOTUFTS0lOVFIJCXBlcm1pdCBvdGhlciBpcnFzIGR1cmluZyBJL08KKworCXVzYWdlOgorCisJICB1bnNpZ25lZCBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9VTk1BU0tJTlRSLCB2YWwpOworCisJaW5wdXRzOgorCSAgTmV3IHZhbHVlIGZvciB1bm1hc2sgZmxhZworCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCShiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSAobm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zKQorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisJICBFSU5WQUwJdmFsdWUgb3V0IG9mIHJhbmdlIFswIDFdCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5CisKKworCisKK0hESU9fR0VUX01VTFRDT1VOVAkJZ2V0IGN1cnJlbnQgSURFIGJsb2NrbW9kZSBzZXR0aW5nCisKKwl1c2FnZToKKworCSAgbG9uZyB2YWw7CisJICBpb2N0bChmZCwgSERJT19HRVRfTVVMVENPVU5ULCAmdmFsKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgSURFIGJsb2NrIG1vZGUgc2V0dGluZy4gIFRoaXMKKwkgIGNvbnRyb2xzIGhvdyBtYW55IHNlY3RvcnMgdGhlIGRyaXZlIHdpbGwgdHJhbnNmZXIgcGVyCisJICBpbnRlcnJ1cHQuCisKKworCitIRElPX1NFVF9NVUxUQ09VTlQJCWNoYW5nZSBJREUgYmxvY2ttb2RlCisKKwl1c2FnZToKKworCSAgaW50IHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9NVUxUQ09VTlQsIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgdmFsdWUgZm9yIElERSBibG9jayBtb2RlIHNldHRpbmcuICBUaGlzIGNvbnRyb2xzIGhvdyBtYW55CisJICBzZWN0b3JzIHRoZSBkcml2ZSB3aWxsIHRyYW5zZmVyIHBlciBpbnRlcnJ1cHQuCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIChub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMpCisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVJTlZBTAl2YWx1ZSBvdXQgb2YgcmFuZ2Ugc3VwcG9ydGVkIGJ5IGRpc2suCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5IG9yIGJsb2NrbW9kZSBhbHJlYWR5IHNldC4KKwkgIEVJTwkJRHJpdmUgZGlkIG5vdCBhY2NlcHQgbmV3IGJsb2NrIG1vZGUuCisKKwlub3RlczoKKworCSAgU291cmNlIGNvZGUgY29tbWVudHMgcmVhZDoKKworCSAgICBUaGlzIGlzIHRpZ2h0bHkgd292ZW4gaW50byB0aGUgZHJpdmVyLT5kb19zcGVjaWFsIGNhbiBub3QKKwkgICAgdG91Y2guICBET04nVCBkbyBpdCBhZ2FpbiB1bnRpbCBhIHRvdGFsIHBlcnNvbmFsaXR5IHJld3JpdGUKKwkgICAgaXMgY29tbWl0dGVkLgorCisJICBJZiBibG9ja21vZGUgaGFzIGFscmVhZHkgYmVlbiBzZXQsIHRoaXMgaW9jdGwgd2lsbCBmYWlsIHdpdGgKKwkgIEVCVVNZCisKKworCitIRElPX0dFVF9RRE1BCQkJZ2V0IHVzZS1xZG1hIGZsYWcKKworCU5vdCBpbXBsZW1lbnRlZCwgYXMgb2YgMi42LjguMQorCisKKworSERJT19TRVRfWEZFUgkJCXNldCB0cmFuc2ZlciByYXRlIHZpYSBwcm9jCisKKwlOb3QgaW1wbGVtZW50ZWQsIGFzIG9mIDIuNi44LjEKKworCisKK0hESU9fT0JTT0xFVEVfSURFTlRJVFkJCU9CU09MRVRFLCBETyBOT1QgVVNFCisKKwlTYW1lIGFzIEhESU9fR0VUX0lERU5USVRZIChzZWUgYmVsb3cpLCBleGNlcHQgdGhhdCBpdCBvbmx5CisJcmV0dXJucyB0aGUgZmlyc3QgMTQyIGJ5dGVzIG9mIGRyaXZlIGlkZW50aXR5IGluZm9ybWF0aW9uLgorCisKKworSERJT19HRVRfSURFTlRJVFkJCWdldCBJREUgaWRlbnRpZmljYXRpb24gaW5mbworCisJdXNhZ2U6CisKKwkgIHVuc2lnbmVkIGNoYXIgaWRlbnRpdHlbNTEyXTsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF9JREVOVElUWSwgaWRlbnRpdHkpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKworCSAgQVRBIGRyaXZlIGlkZW50aXR5IGluZm9ybWF0aW9uLiAgRm9yIGZ1bGwgZGVzY3JpcHRpb24sIHNlZQorCSAgdGhlIElERU5USUZZIERFVklDRSBhbmQgSURFTlRJRlkgUEFDS0VUIERFVklDRSBjb21tYW5kcyBpbgorCSAgdGhlIEFUQSBzcGVjaWZpY2F0aW9uLgorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVJTlZBTAkoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgKG5vdCBzdXJlIHdoYXQgdGhpcyBtZWFucykKKwkgIEVOT01TRwlJREVOVElGWSBERVZJQ0UgaW5mb3JtYXRpb24gbm90IGF2YWlsYWJsZQorCisJbm90ZXM6CisKKwkgIFJldHVybnMgaW5mb3JtYXRpb24gdGhhdCB3YXMgb2J0YWluZWQgd2hlbiB0aGUgZHJpdmUgd2FzCisJICBwcm9iZWQuICBTb21lIG9mIHRoaXMgaW5mb3JtYXRpb24gaXMgc3ViamVjdCB0byBjaGFuZ2UsIGFuZAorCSAgdGhpcyBpb2N0bCBkb2VzIG5vdCByZS1wcm9iZSB0aGUgZHJpdmUgdG8gdXBkYXRlIHRoZQorCSAgaW5mb3JtYXRpb24uCisKKwkgIFRoaXMgaW5mb3JtYXRpb24gaXMgYWxzbyBhdmFpbGFibGUgZnJvbSAvcHJvYy9pZGUvaGRYL2lkZW50aWZ5CisKKworCitIRElPX0dFVF9LRUVQU0VUVElOR1MJCWdldCBrZWVwLXNldHRpbmdzLW9uLXJlc2V0IGZsYWcKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF9LRUVQU0VUVElOR1MsICZ2YWwpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCAia2VlcCBzZXR0aW5ncyIgZmxhZworCisJbm90ZXM6CisKKwkgIFdoZW4gc2V0LCBpbmRpY2F0ZXMgdGhhdCBrZXJuZWwgc2hvdWxkIHJlc3RvcmUgc2V0dGluZ3MKKwkgIGFmdGVyIGEgZHJpdmUgcmVzZXQuCisKKworCitIRElPX1NFVF9LRUVQU0VUVElOR1MJCWtlZXAgaW9jdGwgc2V0dGluZ3Mgb24gcmVzZXQKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9LRUVQU0VUVElOR1MsIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgdmFsdWUgZm9yIGtlZXBfc2V0dGluZ3MgZmxhZworCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCShiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSAobm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zKQorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisJICBFSU5WQUwJdmFsdWUgb3V0IG9mIHJhbmdlIFswIDFdCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5CisKKworCitIRElPX0dFVF8zMkJJVAkJCWdldCBjdXJyZW50IGlvXzMyYml0IHNldHRpbmcKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF8zMkJJVCwgJnZhbCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGlvXzMyYml0IHNldHRpbmcKKworCW5vdGVzOgorCisJICAwPTE2LWJpdCwgMT0zMi1iaXQsIDIsMyA9IDMyYml0K3N5bmMKKworCisKK0hESU9fR0VUX05PV0VSUgkJCWdldCBpZ25vcmUtd3JpdGUtZXJyb3IgZmxhZworCisJdXNhZ2U6CisKKwkgIGxvbmcgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fR0VUX05PV0VSUiwgJnZhbCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGlnbm9yZS13cml0ZS1lcnJvciBmbGFnCisKKworCitIRElPX0dFVF9ETUEJCQlnZXQgdXNlLWRtYSBmbGFnCisKKwl1c2FnZToKKworCSAgbG9uZyB2YWw7CisJICBpb2N0bChmZCwgSERJT19HRVRfRE1BLCAmdmFsKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdXNlLWRtYSBmbGFnCisKKworCitIRElPX0dFVF9OSUNFCQkJZ2V0IG5pY2UgZmxhZ3MKKworCXVzYWdlOgorCisJICBsb25nIG5pY2U7CisJICBpb2N0bChmZCwgSERJT19HRVRfTklDRSwgJm5pY2UpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKworCSAgVGhlIGRyaXZlJ3MgIm5pY2UiIHZhbHVlcy4KKworCW5vdGVzOgorCisJICBQZXItZHJpdmUgZmxhZ3Mgd2hpY2ggZGV0ZXJtaW5lIHdoZW4gdGhlIHN5c3RlbSB3aWxsIGdpdmUgbW9yZQorCSAgYmFuZHdpZHRoIHRvIG90aGVyIGRldmljZXMgc2hhcmluZyB0aGUgc2FtZSBJREUgYnVzLgorCSAgU2VlIDxsaW51eC9oZHJlZy5oPiwgbmVhciBzeW1ib2wgSURFX05JQ0VfRFNDX09WRVJMQVAuCisKKworCisKK0hESU9fU0VUX05JQ0UJCQlzZXQgbmljZSBmbGFncworCisJdXNhZ2U6CisKKwkgIHVuc2lnbmVkIGxvbmcgbmljZTsKKwkgIC4uLgorCSAgaW9jdGwoZmQsIEhESU9fU0VUX05JQ0UsIG5pY2UpOworCisJaW5wdXRzOgorCSAgYml0bWFzayBvZiBuaWNlIGZsYWdzLgorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRVBFUk0JCUZsYWdzIG90aGVyIHRoYW4gRFNDX09WRVJMQVAgYW5kIE5JQ0VfMSBzZXQuCisJICBFUEVSTQkJRFNDX09WRVJMQVAgc3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlCisKKwlub3RlczoKKworCSAgVGhpcyBpb2N0bCBzZXRzIHRoZSBEU0NfT1ZFUkxBUCBhbmQgTklDRV8xIGZsYWdzIGZyb20gdmFsdWVzCisJICBwcm92aWRlZCBieSB0aGUgdXNlci4KKworCSAgTmljZSBmbGFncyBhcmUgbGlzdGVkIGluIDxsaW51eC9oZHJlZy5oPiwgc3RhcnRpbmcgd2l0aAorCSAgSURFX05JQ0VfRFNDX09WRVJMQVAuICBUaGVzZSB2YWx1ZXMgcmVwcmVzZW50IHNoaWZ0cy4KKworCisKKworCitIRElPX0dFVF9XQ0FDSEUJCQlnZXQgd3JpdGUgY2FjaGUgbW9kZSBvbnxvZmYKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF9XQ0FDSEUsICZ2YWwpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB3cml0ZSBjYWNoZSBtb2RlCisKKworCitIRElPX0dFVF9BQ09VU1RJQwkJZ2V0IGFjb3VzdGljIHZhbHVlCisKKwl1c2FnZToKKworCSAgbG9uZyB2YWw7CisJICBpb2N0bChmZCwgSERJT19HRVRfQUNPVVNUSUMsICZ2YWwpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhY291c3RpYyBzZXR0aW5ncworCisJbm90ZXM6CisKKwkgIFNlZSBIRElPX1NFVF9BQ09VU1RJQworCisKKworSERJT19HRVRfQUREUkVTUworCisJdXNhZ2U6CisKKwkgIGxvbmcgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fR0VUX0FERFJFU1MsICZ2YWwpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZGRyZXNzaW5nIG1vZGU6CisJICAgIDAgPSAyOC1iaXQKKwkgICAgMSA9IDQ4LWJpdAorCSAgICAyID0gNDgtYml0IGRvaW5nIDI4LWJpdAorCSAgICAzID0gNjQtYml0CisKKworCitIRElPX0dFVF9CVVNTVEFURQkJZ2V0IHRoZSBidXMgc3RhdGUgb2YgdGhlIGh3aWYKKworCXVzYWdlOgorCisJICBsb25nIHN0YXRlOworCSAgaW9jdGwoZmQsIEhESU9fU0NBTl9IV0lGLCAmc3RhdGUpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIEN1cnJlbnQgcG93ZXIgc3RhdGUgb2YgdGhlIElERSBidXMuICBPbmUgb2YgQlVTU1RBVEVfT0ZGLAorCSAgQlVTU1RBVEVfT04sIG9yIEJVU1NUQVRFX1RSSVNUQVRFCisKKwllcnJvciByZXR1cm5zOgorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisKKworCisKK0hESU9fU0VUX0JVU1NUQVRFCQlzZXQgdGhlIGJ1cyBzdGF0ZSBvZiB0aGUgaHdpZgorCisJdXNhZ2U6CisKKwkgIGludCBzdGF0ZTsKKwkgIC4uLgorCSAgaW9jdGwoZmQsIEhESU9fU0NBTl9IV0lGLCBzdGF0ZSk7CisKKwlpbnB1dHM6CisJICBEZXNpcmVkIElERSBwb3dlciBzdGF0ZS4gIE9uZSBvZiBCVVNTVEFURV9PRkYsIEJVU1NUQVRFX09OLAorCSAgb3IgQlVTU1RBVEVfVFJJU1RBVEUKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybnM6CisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfUkFXSU8KKwkgIEVPUE5PVFNVUFAJSGFyZHdhcmUgaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgYnVzIHBvd2VyIGNvbnRyb2wKKworCisKKworSERJT19UUklTVEFURV9IV0lGCQlleGVjdXRlIGEgY2hhbm5lbCB0cmlzdGF0ZQorCisJTm90IGltcGxlbWVudGVkLCBhcyBvZiAyLjYuOC4xLiAgU2VlIEhESU9fU0VUX0JVU1NUQVRFCisKKworCitIRElPX0RSSVZFX1JFU0VUCQlleGVjdXRlIGEgZGV2aWNlIHJlc2V0CisKKwl1c2FnZToKKworCSAgaW50IGFyZ3NbM10KKwkgIC4uLgorCSAgaW9jdGwoZmQsIEhESU9fRFJJVkVfUkVTRVQsIGFyZ3MpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCisJbm90ZXM6CisKKwkgIEFib3J0IGFueSBjdXJyZW50IGNvbW1hbmQsIHByZXZlbnQgYW55dGhpbmcgZWxzZSBmcm9tIGJlaW5nCisJICBxdWV1ZWQsIGV4ZWN1dGUgYSByZXNldCBvbiB0aGUgZGV2aWNlLCBhbmQgaXNzdWUgQkxLUlJQQVJUCisJICBpb2N0bCBvbiB0aGUgYmxvY2sgZGV2aWNlLgorCisJICBFeGVjdXRlcyBhbiBBVEFQSSBzb2Z0IHJlc2V0IGlmIGFwcGxpY2FibGUsIG90aGVyd2lzZQorCSAgZXhlY3V0ZXMgYW4gQVRBIHNvZnQgcmVzZXQgb24gdGhlIGNvbnRyb2xsZXIuCisKKworCitIRElPX0RSSVZFX1RBU0tGSUxFCQlleGVjdXRlIHJhdyB0YXNrZmlsZQorCisJTm90ZTogIElmIHlvdSBkb24ndCBoYXZlIGEgY29weSBvZiB0aGUgQU5TSSBBVEEgc3BlY2lmaWNhdGlvbgorCWhhbmR5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGlnbm9yZSB0aGlzIGlvY3RsLgorCisJRXhlY3V0ZSBhbiBBVEEgZGlzayBjb21tYW5kIGRpcmVjdGx5IGJ5IHdyaXRpbmcgdGhlICJ0YXNrZmlsZSIKKwlyZWdpc3RlcnMgb2YgdGhlIGRyaXZlLiAgUmVxdWlyZXMgQURNSU4gYW5kIFJBV0lPIGFjY2VzcworCXByaXZpbGVnZXMuCisKKwl1c2FnZToKKworCSAgc3RydWN0IHsKKwkgICAgaWRlX3Rhc2tfcmVxdWVzdF90IHJlcV90YXNrOworCSAgICB1OCBvdXRidWZbT1VUUFVUX1NJWkVdOworCSAgICB1OCBpbmJ1ZltJTlBVVF9TSVpFXTsKKwkgIH0gdGFzazsKKwkgIG1lbXNldCgmdGFzay5yZXFfdGFzaywgMCwgc2l6ZW9mKHRhc2sucmVxX3Rhc2spKTsKKwkgIHRhc2sucmVxX3Rhc2sub3V0X3NpemUgPSBzaXplb2YodGFzay5vdXRidWYpOworCSAgdGFzay5yZXFfdGFzay5pbl9zaXplID0gc2l6ZW9mKHRhc2suaW5idWYpOworCSAgLi4uCisJICBpb2N0bChmZCwgSERJT19EUklWRV9UQVNLRklMRSwgJnRhc2spOworCSAgLi4uCisKKwlpbnB1dHM6CisKKwkgIChTZWUgYmVsb3cgZm9yIGRldGFpbHMgb24gbWVtb3J5IGFyZWEgcGFzc2VkIHRvIGlvY3RsLikKKworCSAgaW9fcG9ydHNbOF0JdmFsdWVzIHRvIGJlIHdyaXR0ZW4gdG8gdGFza2ZpbGUgcmVnaXN0ZXJzCisJICBob2JfcG9ydHNbOF0JaGlnaC1vcmRlciBieXRlcywgZm9yIGV4dGVuZGVkIGNvbW1hbmRzLgorCSAgb3V0X2ZsYWdzCWZsYWdzIGluZGljYXRpbmcgd2hpY2ggcmVnaXN0ZXJzIGFyZSB2YWxpZAorCSAgaW5fZmxhZ3MJZmxhZ3MgaW5kaWNhdGluZyB3aGljaCByZWdpc3RlcnMgc2hvdWxkIGJlIHJldHVybmVkCisJICBkYXRhX3BoYXNlCXNlZSBiZWxvdworCSAgcmVxX2NtZAljb21tYW5kIHR5cGUgdG8gYmUgZXhlY3V0ZWQKKwkgIG91dF9zaXplCXNpemUgb2Ygb3V0cHV0IGJ1ZmZlcgorCSAgb3V0YnVmCWJ1ZmZlciBvZiBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkIHRvIGRpc2sKKwkgIGluYnVmCQlidWZmZXIgb2YgZGF0YSB0byBiZSByZWNlaXZlZCBmcm9tIGRpc2sgKHNlZSBbMV0pCisKKwlvdXRwdXRzOgorCisJICBpb19wb3J0c1tdCXZhbHVlcyByZXR1cm5lZCBpbiB0aGUgdGFza2ZpbGUgcmVnaXN0ZXJzCisJICBob2JfcG9ydHNbXQloaWdoLW9yZGVyIGJ5dGVzLCBmb3IgZXh0ZW5kZWQgY29tbWFuZHMuCisJICBvdXRfZmxhZ3MJZmxhZ3MgaW5kaWNhdGluZyB3aGljaCByZWdpc3RlcnMgYXJlIHZhbGlkIChzZWUgWzJdKQorCSAgaW5fZmxhZ3MJZmxhZ3MgaW5kaWNhdGluZyB3aGljaCByZWdpc3RlcnMgc2hvdWxkIGJlIHJldHVybmVkCisJICBvdXRidWYJYnVmZmVyIG9mIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgdG8gZGlzayAoc2VlIFsxXSkKKwkgIGluYnVmCQlidWZmZXIgb2YgZGF0YSB0byBiZSByZWNlaXZlZCBmcm9tIGRpc2sKKworCWVycm9yIHJldHVybnM6CisJICBFQUNDRVMJQ0FQX1NZU19BRE1JTiBvciBDQVBfU1lTX1JBV0lPIHByaXZpbGVnZSBub3Qgc2V0LgorCSAgRU5PTVNHCURldmljZSBpcyBub3QgYSBkaXNrIGRyaXZlLgorCSAgRU5PTUVNCVVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRhc2sKKwkgIEVGQVVMVAlyZXFfY21kID09IFRBU0tGSUxFX0lOX09VVCAobm90IGltcGxlbWVudGVkIGFzIG9mIDIuNi44KQorCSAgRVBFUk0JCXJlcV9jbWQgPT0gVEFTS0ZJTEVfTVVMVElfT1VUIGFuZCBkcml2ZQorCSAgCQltdWx0aS1jb3VudCBub3QgeWV0IHNldC4KKwkgIEVJTwkJRHJpdmUgZmFpbGVkIHRoZSBjb21tYW5kLgorCisJbm90ZXM6CisKKwkgIFsxXSBSRUFEIFRIRSBGT0xMT1dJTkcgTk9URVMgKkNBUkVGVUxMWSouICBUSElTIElPQ1RMIElTCisJICBGVUxMIE9GIEdPVENIQVMuICBFeHRyZW1lIGNhdXRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCB1c2luZworCSAgdGhpcyBpb2N0bC4gIEEgbWlzdGFrZSBjYW4gZWFzaWx5IGNvcnJ1cHQgZGF0YSBvciBoYW5nIHRoZQorCSAgc3lzdGVtLgorCisJICBbMl0gQm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFyZSBjb3BpZWQgZnJvbSB0aGUKKwkgIHVzZXIgYW5kIHdyaXR0ZW4gYmFjayB0byB0aGUgdXNlciwgZXZlbiB3aGVuIG5vdCB1c2VkLgorCisJICBbM10gSWYgb25lIG9yIG1vcmUgYml0cyBhcmUgc2V0IGluIG91dF9mbGFncyBhbmQgaW5fZmxhZ3MgaXMKKwkgIHplcm8sIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkIGZvciBpbl9mbGFncy5hbGwgYW5kCisJICB3cml0dGVuIGJhY2sgaW50byBpbl9mbGFncyBvbiBjb21wbGV0aW9uLgorCisJICAgKiBJREVfVEFTS0ZJTEVfU1REX0lOX0ZMQUdTIHwgKElERV9IT0JfU1REX0lOX0ZMQUdTIDw8IDgpCisJICAgICBpZiBMQkE0OCBhZGRyZXNzaW5nIGlzIGVuYWJsZWQgZm9yIHRoZSBkcml2ZQorCSAgICogSURFX1RBU0tGSUxFX1NURF9JTl9GTEFHUworCSAgICAgaWYgQ0hTL0xCQTI4CisKKwkgIFRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIGluX2ZsYWdzLmFsbCBhbmQgZWFjaCBlbmFibGUKKwkgIGJpdGZpZWxkIGZsaXBzIGRlcGVuZGluZyBvbiBlbmRpYW5lc3M7IGZvcnR1bmF0ZWx5LCBUQVNLRklMRQorCSAgb25seSB1c2VzIGluZmxhZ3MuYi5kYXRhIGJpdCBhbmQgaWdub3JlcyBhbGwgb3RoZXIgYml0cy4KKwkgIFRoZSBlbmQgcmVzdWx0IGlzIHRoYXQsIG9uIGFueSBlbmRpYW4gbWFjaGluZXMsIGl0IGhhcyBubworCSAgZWZmZWN0IG90aGVyIHRoYW4gbW9kaWZ5aW5nIGluX2ZsYWdzIG9uIGNvbXBsZXRpb24uCisKKwkgIFs0XSBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBTRUxFQ1QgaXMgKDB4YTB8REVWX2JpdHxMQkFfYml0KQorCSAgZXhjZXB0IGZvciBmb3VyIGRyaXZlcyBwZXIgcG9ydCBjaGlwc2V0cy4gIEZvciBmb3VyIGRyaXZlcworCSAgcGVyIHBvcnQgY2hpcHNldHMsIGl0J3MgKDB4YTB8REVWX2JpdHxMQkFfYml0KSBmb3IgdGhlIGZpcnN0CisJICBwYWlyIGFuZCAoMHg4MHxERVZfYml0fExCQV9iaXQpIGZvciB0aGUgc2Vjb25kIHBhaXIuCisKKwkgIFs1XSBUaGUgYXJndW1lbnQgdG8gdGhlIGlvY3RsIGlzIGEgcG9pbnRlciB0byBhIHJlZ2lvbiBvZgorCSAgbWVtb3J5IGNvbnRhaW5pbmcgYSBpZGVfdGFza19yZXF1ZXN0X3Qgc3RydWN0dXJlLCBmb2xsb3dlZAorCSAgYnkgYW4gb3B0aW9uYWwgYnVmZmVyIG9mIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgdG8gdGhlCisJICBkcml2ZSwgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgYnVmZmVyIHRvIHJlY2VpdmUgZGF0YSBmcm9tCisJICB0aGUgZHJpdmUuCisKKwkgIENvbW1hbmQgaXMgcGFzc2VkIHRvIHRoZSBkaXNrIGRyaXZlIHZpYSB0aGUgaWRlX3Rhc2tfcmVxdWVzdF90CisJICBzdHJ1Y3R1cmUsIHdoaWNoIGNvbnRhaW5zIHRoZXNlIGZpZWxkczoKKworCSAgICBpb19wb3J0c1s4XQkJdmFsdWVzIGZvciB0aGUgdGFza2ZpbGUgcmVnaXN0ZXJzCisJICAgIGhvYl9wb3J0c1s4XQloaWdoLW9yZGVyIGJ5dGVzLCBmb3IgZXh0ZW5kZWQgY29tbWFuZHMKKwkgICAgb3V0X2ZsYWdzCQlmbGFncyBpbmRpY2F0aW5nIHdoaWNoIGVudHJpZXMgaW4gdGhlCisJICAgIAkJCWlvX3BvcnRzW10gYW5kIGhvYl9wb3J0c1tdIGFycmF5cworCQkJCWNvbnRhaW4gdmFsaWQgdmFsdWVzLiAgVHlwZSBpZGVfcmVnX3ZhbGlkX3QuCisJICAgIGluX2ZsYWdzCQlmbGFncyBpbmRpY2F0aW5nIHdoaWNoIGVudHJpZXMgaW4gdGhlCisJICAgIAkJCWlvX3BvcnRzW10gYW5kIGhvYl9wb3J0c1tdIGFycmF5cworCQkJCWFyZSBleHBlY3RlZCB0byBjb250YWluIHZhbGlkIHZhbHVlcworCQkJCW9uIHJldHVybi4KKwkgICAgZGF0YV9waGFzZQkJU2VlIGJlbG93CisJICAgIHJlcV9jbWQJCUNvbW1hbmQgdHlwZSwgc2VlIGJlbG93CisJICAgIG91dF9zaXplCQlvdXRwdXQgKHVzZXItPmRyaXZlKSBidWZmZXIgc2l6ZSwgYnl0ZXMKKwkgICAgaW5fc2l6ZQkJaW5wdXQgKGRyaXZlLT51c2VyKSBidWZmZXIgc2l6ZSwgYnl0ZXMKKworCSAgV2hlbiBvdXRfZmxhZ3MgaXMgemVybywgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIGxvYWRlZC4KKworCSAgICBIT0JfRkVBVFVSRQkJSWYgdGhlIGRyaXZlIHN1cHBvcnRzIExCQTQ4CisJICAgIEhPQl9OU0VDVE9SCQlJZiB0aGUgZHJpdmUgc3VwcG9ydHMgTEJBNDgKKwkgICAgSE9CX1NFQ1RPUgkJSWYgdGhlIGRyaXZlIHN1cHBvcnRzIExCQTQ4CisJICAgIEhPQl9MQ1lMCQlJZiB0aGUgZHJpdmUgc3VwcG9ydHMgTEJBNDgKKwkgICAgSE9CX0hDWUwJCUlmIHRoZSBkcml2ZSBzdXBwb3J0cyBMQkE0OAorCSAgICBGRUFUVVJFCisJICAgIE5TRUNUT1IKKwkgICAgU0VDVE9SCisJICAgIExDWUwKKwkgICAgSENZTAorCSAgICBTRUxFQ1QJCUZpcnN0LCBtYXNrZWQgd2l0aCAweEUwIGlmIExCQTQ4LCAweEVGCisJCQkJb3RoZXJ3aXNlOyB0aGVuLCBvcidlZCB3aXRoIHRoZSBkZWZhdWx0CisJCQkJdmFsdWUgb2YgU0VMRUNULgorCisJICBJZiBhbnkgYml0IGluIG91dF9mbGFncyBpcyBzZXQsIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSBsb2FkZWQuCisKKwkgICAgSE9CX0RBVEEJCUlmIG91dF9mbGFncy5iLmRhdGEgaXMgc2V0LiAgSE9CX0RBVEEgd2lsbAorCQkJCXRyYXZlbCBvbiBERDgtREQxNSBvbiBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzCisJCQkJYW5kIG9uIEREMC1ERDcgb24gYmlnIGVuZGlhbiBtYWNoaW5lcy4KKwkgICAgREFUQQkJSWYgb3V0X2ZsYWdzLmIuZGF0YSBpcyBzZXQuICBEQVRBIHdpbGwKKwkJCQl0cmF2ZWwgb24gREQwLURENyBvbiBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzCisJCQkJYW5kIG9uIEREOC1ERDE1IG9uIGJpZyBlbmRpYW4gbWFjaGluZXMuCisJICAgIEhPQl9OU0VDVE9SCQlJZiBvdXRfZmxhZ3MuYi5uc2VjdG9yX2hvYiBpcyBzZXQKKwkgICAgSE9CX1NFQ1RPUgkJSWYgb3V0X2ZsYWdzLmIuc2VjdG9yX2hvYiBpcyBzZXQKKwkgICAgSE9CX0xDWUwJCUlmIG91dF9mbGFncy5iLmxjeWxfaG9iIGlzIHNldAorCSAgICBIT0JfSENZTAkJSWYgb3V0X2ZsYWdzLmIuaGN5bF9ob2IgaXMgc2V0CisJICAgIEZFQVRVUkUJCUlmIG91dF9mbGFncy5iLmZlYXR1cmUgaXMgc2V0CisJICAgIE5TRUNUT1IJCUlmIG91dF9mbGFncy5iLm5zZWN0b3IgaXMgc2V0CisJICAgIFNFQ1RPUgkJSWYgb3V0X2ZsYWdzLmIuc2VjdG9yIGlzIHNldAorCSAgICBMQ1lMCQlJZiBvdXRfZmxhZ3MuYi5sY3lsIGlzIHNldAorCSAgICBIQ1lMCQlJZiBvdXRfZmxhZ3MuYi5oY3lsIGlzIHNldAorCSAgICBTRUxFQ1QJCU9yJ2VkIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUgb2YgU0VMRUNUIGFuZAorCQkJCWxvYWRlZCByZWdhcmRsZXNzIG9mIG91dF9mbGFncy5iLnNlbGVjdC4KKworCSAgVGFza2ZpbGUgcmVnaXN0ZXJzIGFyZSByZWFkIGJhY2sgZnJvbSB0aGUgZHJpdmUgaW50bworCSAge2lvfGhvYn1fcG9ydHNbXSBhZnRlciB0aGUgY29tbWFuZCBjb21wbGV0ZXMgaWZmIG9uZSBvZiB0aGUKKwkgIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIG1ldDsgb3RoZXJ3aXNlLCB0aGUgb3JpZ2luYWwgdmFsdWVzCisJICB3aWxsIGJlIHdyaXR0ZW4gYmFjaywgdW5jaGFuZ2VkLgorCisJICAgIDEuIFRoZSBkcml2ZSBmYWlscyB0aGUgY29tbWFuZCAoRUlPKS4KKwkgICAgMi4gT25lIG9yIG1vcmUgdGhhbiBvbmUgYml0cyBhcmUgc2V0IGluIG91dF9mbGFncy4KKwkgICAgMy4gVGhlIHJlcXVlc3RlZCBkYXRhX3BoYXNlIGlzIFRBU0tGSUxFX05PX0RBVEEuCisKKwkgICAgSE9CX0RBVEEJCUlmIGluX2ZsYWdzLmIuZGF0YSBpcyBzZXQuICBJdCB3aWxsIGNvbnRhaW4KKwkJCQlERDgtREQxNSBvbiBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzIGFuZAorCQkJCUREMC1ERDcgb24gYmlnIGVuZGlhbiBtYWNoaW5lcy4KKwkgICAgREFUQQkJSWYgaW5fZmxhZ3MuYi5kYXRhIGlzIHNldC4gIEl0IHdpbGwgY29udGFpbgorCQkJCUREMC1ERDcgb24gbGl0dGxlIGVuZGlhbiBtYWNoaW5lcyBhbmQKKwkJCQlERDgtREQxNSBvbiBiaWcgZW5kaWFuIG1hY2hpbmVzLgorCSAgICBIT0JfRkVBVFVSRQkJSWYgdGhlIGRyaXZlIHN1cHBvcnRzIExCQTQ4CisJICAgIEhPQl9OU0VDVE9SCQlJZiB0aGUgZHJpdmUgc3VwcG9ydHMgTEJBNDgKKwkgICAgSE9CX1NFQ1RPUgkJSWYgdGhlIGRyaXZlIHN1cHBvcnRzIExCQTQ4CisJICAgIEhPQl9MQ1lMCQlJZiB0aGUgZHJpdmUgc3VwcG9ydHMgTEJBNDgKKwkgICAgSE9CX0hDWUwJCUlmIHRoZSBkcml2ZSBzdXBwb3J0cyBMQkE0OAorCSAgICBOU0VDVE9SCisJICAgIFNFQ1RPUgorCSAgICBMQ1lMCisJICAgIEhDWUwKKworCSAgVGhlIGRhdGFfcGhhc2UgZmllbGQgZGVzY3JpYmVzIHRoZSBkYXRhIHRyYW5zZmVyIHRvIGJlCisJICBwZXJmb3JtZWQuICBWYWx1ZSBpcyBvbmUgb2Y6CisKKwkgICAgVEFTS0ZJTEVfSU4KKwkgICAgVEFTS0ZJTEVfTVVMVElfSU4KKwkgICAgVEFTS0ZJTEVfT1VUCisJICAgIFRBU0tGSUxFX01VTFRJX09VVAorCSAgICBUQVNLRklMRV9JTl9PVVQKKwkgICAgVEFTS0ZJTEVfSU5fRE1BCisJICAgIFRBU0tGSUxFX0lOX0RNQVEJCT09IElOX0RNQSAocXVldWVpbmcgbm90IHN1cHBvcnRlZCkKKwkgICAgVEFTS0ZJTEVfT1VUX0RNQQorCSAgICBUQVNLRklMRV9PVVRfRE1BUQkJPT0gT1VUX0RNQSAocXVldWVpbmcgbm90IHN1cHBvcnRlZCkKKwkgICAgVEFTS0ZJTEVfUF9JTgkJdW5pbXBsZW1lbnRlZAorCSAgICBUQVNLRklMRV9QX0lOX0RNQQkJdW5pbXBsZW1lbnRlZAorCSAgICBUQVNLRklMRV9QX0lOX0RNQVEJCXVuaW1wbGVtZW50ZWQKKwkgICAgVEFTS0ZJTEVfUF9PVVQJCXVuaW1wbGVtZW50ZWQKKwkgICAgVEFTS0ZJTEVfUF9PVVRfRE1BCQl1bmltcGxlbWVudGVkCisJICAgIFRBU0tGSUxFX1BfT1VUX0RNQVEJCXVuaW1wbGVtZW50ZWQKKworCSAgVGhlIHJlcV9jbWQgZmllbGQgY2xhc3NpZmllcyB0aGUgY29tbWFuZCB0eXBlLiAgSXQgbWF5IGJlCisJICBvbmUgb2Y6CisKKwkgICAgSURFX0RSSVZFX1RBU0tfTk9fREFUQQorCSAgICBJREVfRFJJVkVfVEFTS19TRVRfWEZFUgl1bmltcGxlbWVudGVkCisJICAgIElERV9EUklWRV9UQVNLX0lOCisJICAgIElERV9EUklWRV9UQVNLX09VVAkJdW5pbXBsZW1lbnRlZAorCSAgICBJREVfRFJJVkVfVEFTS19SQVdfV1JJVEUKKworCSAgWzZdIERvIG5vdCBhY2Nlc3Mge2lufG91dH1fZmxhZ3MtPmFsbCBleGNlcHQgZm9yIHJlc2V0dGluZworCSAgYWxsIHRoZSBiaXRzLiAgQWx3YXlzIGFjY2VzcyBpbmRpdmlkdWFsIGJpdCBmaWVsZHMuICAtPmFsbAorCSAgdmFsdWUgd2lsbCBmbGlwIGRlcGVuZGluZyBvbiBlbmRpYW5lc3MuICBGb3IgdGhlIHNhbWUKKwkgIHJlYXNvbiwgZG8gbm90IHVzZSBJREVfe1RBU0tGSUxFfEhPQn1fU1REX3tPVVR8SU59X0ZMQUdTCisJICBjb25zdGFudHMgZGVmaW5lZCBpbiBoZHJlZy5oLgorCisKKworSERJT19EUklWRV9DTUQJCQlleGVjdXRlIGEgc3BlY2lhbCBkcml2ZSBjb21tYW5kCisKKwlOb3RlOiAgSWYgeW91IGRvbid0IGhhdmUgYSBjb3B5IG9mIHRoZSBBTlNJIEFUQSBzcGVjaWZpY2F0aW9uCisJaGFuZHksIHlvdSBzaG91bGQgcHJvYmFibHkgaWdub3JlIHRoaXMgaW9jdGwuCisKKwl1c2FnZToKKworCSAgdTggYXJnc1s0K1hGRVJfU0laRV07CisJICAuLi4KKwkgIGlvY3RsKGZkLCBIRElPX0RSSVZFX0NNRCwgYXJncyk7CisKKwlpbnB1dHM6CisKKwkgIENvbW1hbmRzIG90aGVyIHRoYW4gV0lOX1NNQVJUCisJICAgIGFyZ3NbMF0JQ09NTUFORAorCSAgICBhcmdzWzFdCU5TRUNUT1IKKwkgICAgYXJnc1syXQlGRUFUVVJFCisJICAgIGFyZ3NbM10JTlNFQ1RPUgorCisJICBXSU5fU01BUlQKKwkgICAgYXJnc1swXQlDT01NQU5ECisJICAgIGFyZ3NbMV0JU0VDVE9SCisJICAgIGFyZ3NbMl0JRkVBVFVSRQorCSAgICBhcmdzWzNdCU5TRUNUT1IKKworCW91dHB1dHM6CisKKwkgIGFyZ3NbXSBidWZmZXIgaXMgZmlsbGVkIHdpdGggcmVnaXN0ZXIgdmFsdWVzIGZvbGxvd2VkIGJ5IGFueQorCSAgZGF0YSByZXR1cm5lZCBieSB0aGUgZGlzay4KKwkgICAgYXJnc1swXQlzdGF0dXMKKwkgICAgYXJnc1sxXQllcnJvcgorCSAgICBhcmdzWzJdCU5TRUNUT1IKKwkgICAgYXJnc1szXQl1bmRlZmluZWQKKwkgICAgYXJnc1s0K10JTlNFQ1RPUiAqIDUxMiBieXRlcyBvZiBkYXRhIHJldHVybmVkIGJ5IHRoZSBjb21tYW5kLgorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19SQVdJTworCSAgRU5PTUVNCVVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRhc2sKKwkgIEVJTwkJRHJpdmUgcmVwb3J0cyBlcnJvcgorCisJbm90ZXM6CisKKwkgIFsxXSBGb3IgY29tbWFuZHMgb3RoZXIgdGhhbiBXSU5fU01BUlQsIGFyZ3NbMV0gc2hvdWxkIGVxdWFsCisJICBhcmdzWzNdLiAgU0VDVE9SLCBMQ1lMIGFuZCBIQ1lMIGFyZSB1bmRlZmluZWQuICBGb3IKKwkgIFdJTl9TTUFSVCwgMHg0ZiBhbmQgMHhjMiBhcmUgbG9hZGVkIGludG8gTENZTCBhbmQgSENZTAorCSAgcmVzcGVjdGl2ZWx5LiAgSW4gYm90aCBjYXNlcyBTRUxFQ1Qgd2lsbCBjb250YWluIHRoZSBkZWZhdWx0CisJICB2YWx1ZSBmb3IgdGhlIGRyaXZlLiAgUGxlYXNlIHJlZmVyIHRvIEhESU9fRFJJVkVfVEFTS0ZJTEUKKwkgIG5vdGVzIGZvciB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBTRUxFQ1QuCisKKwkgIFsyXSBJZiBOU0VDVE9SIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCB0aGUgZHJpdmUgc2V0cworCSAgRFJRIHdoZW4gaW50ZXJydXB0aW5nIGZvciB0aGUgY29tbWFuZCwgTlNFQ1RPUiAqIDUxMiBieXRlcworCSAgYXJlIHJlYWQgZnJvbSB0aGUgZGV2aWNlIGludG8gdGhlIGFyZWEgZm9sbG93aW5nIE5TRUNUT1IuCisJICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGFyZWEgd291bGQgYmUKKwkgIGFyZ3NbNC4uNCtYRkVSX1NJWkVdLiAgMTZiaXQgUElPIGlzIHVzZWQgcmVnYXJkbGVzcyBvZgorCSAgSERJT19TRVRfMzJCSVQgc2V0dGluZy4KKworCSAgWzNdIElmIENPTU1BTkQgPT0gV0lOX1NFVEZFQVRVUkVTICYmIEZFQVRVUkUgPT0gU0VURkVBVFVSRVNfWEZFUgorCSAgJiYgTlNFQ1RPUiA+PSBYRkVSX1NXX0RNQV8wICYmIHRoZSBkcml2ZSBzdXBwb3J0cyBhbnkgRE1BCisJICBtb2RlLCBJREUgZHJpdmVyIHdpbGwgdHJ5IHRvIHR1bmUgdGhlIHRyYW5zZmVyIG1vZGUgb2YgdGhlCisJICBkcml2ZSBhY2NvcmRpbmdseS4KKworCisKK0hESU9fRFJJVkVfVEFTSwkJCWV4ZWN1dGUgdGFzayBhbmQgc3BlY2lhbCBkcml2ZSBjb21tYW5kCisKKwlOb3RlOiAgSWYgeW91IGRvbid0IGhhdmUgYSBjb3B5IG9mIHRoZSBBTlNJIEFUQSBzcGVjaWZpY2F0aW9uCisJaGFuZHksIHlvdSBzaG91bGQgcHJvYmFibHkgaWdub3JlIHRoaXMgaW9jdGwuCisKKwl1c2FnZToKKworCSAgdTggYXJnc1s3XTsKKwkgIC4uLgorCSAgaW9jdGwoZmQsIEhESU9fRFJJVkVfVEFTSywgYXJncyk7CisKKwlpbnB1dHM6CisKKwkgIFRhc2tmaWxlIHJlZ2lzdGVyIHZhbHVlczoKKwkgICAgYXJnc1swXQlDT01NQU5ECisJICAgIGFyZ3NbMV0JRkVBVFVSRQorCSAgICBhcmdzWzJdCU5TRUNUT1IKKwkgICAgYXJnc1szXQlTRUNUT1IKKwkgICAgYXJnc1s0XQlMQ1lMCisJICAgIGFyZ3NbNV0JSENZTAorCSAgICBhcmdzWzZdCVNFTEVDVAorCisJb3V0cHV0czoKKworCSAgVGFza2ZpbGUgcmVnaXN0ZXIgdmFsdWVzOgorCSAgICBhcmdzWzBdCXN0YXR1cworCSAgICBhcmdzWzFdCWVycm9yCisJICAgIGFyZ3NbMl0JTlNFQ1RPUgorCSAgICBhcmdzWzNdCVNFQ1RPUgorCSAgICBhcmdzWzRdCUxDWUwKKwkgICAgYXJnc1s1XQlIQ1lMCisJICAgIGFyZ3NbNl0JU0VMRUNUCisKKwllcnJvciByZXR1cm5zOgorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX1JBV0lPCisJICBFTk9NRU0JVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGFzaworCSAgRU5PTVNHCURldmljZSBpcyBub3QgYSBkaXNrIGRyaXZlLgorCSAgRUlPCQlEcml2ZSBmYWlsZWQgdGhlIGNvbW1hbmQuCisKKwlub3RlczoKKworCSAgWzFdIERFViBiaXQgKDB4MTApIG9mIFNFTEVDVCByZWdpc3RlciBpcyBpZ25vcmVkIGFuZCB0aGUKKwkgIGFwcHJvcHJpYXRlIHZhbHVlIGZvciB0aGUgZHJpdmUgaXMgdXNlZC4gIEFsbCBvdGhlciBiaXRzCisJICBhcmUgdXNlZCB1bmFsdGVyZWQuCisKKworCitIRElPX0RSSVZFX0NNRF9BRUIJCUhESU9fRFJJVkVfVEFTSworCisJTm90IGltcGxlbWVudGVkLCBhcyBvZiAyLjYuOC4xCisKKworCitIRElPX1NFVF8zMkJJVAkJCWNoYW5nZSBpb18zMmJpdCBmbGFncworCisJdXNhZ2U6CisKKwkgIGludCB2YWw7CisJICBpb2N0bChmZCwgSERJT19TRVRfMzJCSVQsIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgdmFsdWUgZm9yIGlvXzMyYml0IGZsYWcKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAkoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgKG5vdCBzdXJlIHdoYXQgdGhpcyBtZWFucykKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRUlOVkFMCXZhbHVlIG91dCBvZiByYW5nZSBbMCAzXQorCSAgRUJVU1kJCUNvbnRyb2xsZXIgYnVzeQorCisKKworCitIRElPX1NFVF9OT1dFUlIJCQljaGFuZ2UgaWdub3JlLXdyaXRlLWVycm9yIGZsYWcKKworCXVzYWdlOgorCisJICBpbnQgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fU0VUX05PV0VSUiwgdmFsKTsKKworCWlucHV0czoKKwkgIE5ldyB2YWx1ZSBmb3IgaWdub3JlLXdyaXRlLWVycm9yIGZsYWcuICBVc2VkIGZvciBpZ25vcmluZworCSAgV1JFUlJfU1RBVAorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCShiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSAobm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zKQorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisJICBFSU5WQUwJdmFsdWUgb3V0IG9mIHJhbmdlIFswIDFdCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5CisKKworCitIRElPX1NFVF9ETUEJCQljaGFuZ2UgdXNlLWRtYSBmbGFnCisKKwl1c2FnZToKKworCSAgbG9uZyB2YWw7CisJICBpb2N0bChmZCwgSERJT19TRVRfRE1BLCB2YWwpOworCisJaW5wdXRzOgorCSAgTmV3IHZhbHVlIGZvciB1c2UtZG1hIGZsYWcKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAkoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgKG5vdCBzdXJlIHdoYXQgdGhpcyBtZWFucykKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRUlOVkFMCXZhbHVlIG91dCBvZiByYW5nZSBbMCAxXQorCSAgRUJVU1kJCUNvbnRyb2xsZXIgYnVzeQorCisKKworSERJT19TRVRfUElPX01PREUJCXJlY29uZmlnIGludGVyZmFjZSB0byBuZXcgc3BlZWQKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9QSU9fTU9ERSwgdmFsKTsKKworCWlucHV0czoKKwkgIE5ldyBpbnRlcmZhY2Ugc3BlZWQuCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIChub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMpCisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVJTlZBTAl2YWx1ZSBvdXQgb2YgcmFuZ2UgWzAgMjU1XQorCSAgRUJVU1kJCUNvbnRyb2xsZXIgYnVzeQorCisKKworSERJT19TQ0FOX0hXSUYJCQlyZWdpc3RlciBhbmQgKHJlKXNjYW4gaW50ZXJmYWNlCisKKwl1c2FnZToKKworCSAgaW50IGFyZ3NbM10KKwkgIC4uLgorCSAgaW9jdGwoZmQsIEhESU9fU0NBTl9IV0lGLCBhcmdzKTsKKworCWlucHV0czoKKwkgIGFyZ3NbMF0JaW8gYWRkcmVzcyB0byBwcm9iZQorCSAgYXJnc1sxXQljb250cm9sIGFkZHJlc3MgdG8gcHJvYmUKKwkgIGFyZ3NbMl0JaXJxIG51bWJlcgorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19SQVdJTworCSAgRUlPCQlQcm9iZSBmYWlsZWQuCisKKwlub3RlczoKKworCSAgVGhpcyBpb2N0bCBpbml0aWFsaXplcyB0aGUgYWRkcmVzc2VzIGFuZCBpcnEgZm9yIGEgZGlzaworCSAgY29udHJvbGxlciwgcHJvYmVzIGZvciBkcml2ZXMsIGFuZCBjcmVhdGVzIC9wcm9jL2lkZQorCSAgaW50ZXJmYWNlcyBhcyBhcHByb3BpYXRlLgorCisKKworSERJT19VTlJFR0lTVEVSX0hXSUYJCXVucmVnaXN0ZXIgaW50ZXJmYWNlCisKKwl1c2FnZToKKworCSAgaW50IGluZGV4OworCSAgaW9jdGwoZmQsIEhESU9fVU5SRUdJU1RFUl9IV0lGLCBpbmRleCk7CisKKwlpbnB1dHM6CisJICBpbmRleAkJaW5kZXggb2YgaGFyZHdhcmUgaW50ZXJmYWNlIHRvIHVucmVnaXN0ZXIKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybnM6CisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfUkFXSU8KKworCW5vdGVzOgorCisJICBUaGlzIGlvY3RsIHJlbW92ZXMgYSBoYXJkd2FyZSBpbnRlcmZhY2UgZnJvbSB0aGUga2VybmVsLgorCisJICBDdXJyZW50bHkgKDIuNi44KSB0aGlzIGlvY3RsIHNpbGVudGx5IGZhaWxzIGlmIGFueSBkcml2ZSBvbgorCSAgdGhlIGludGVyZmFjZSBpcyBidXN5LgorCisKKworSERJT19TRVRfV0NBQ0hFCQkJY2hhbmdlIHdyaXRlIGNhY2hlIGVuYWJsZS1kaXNhYmxlCisKKwl1c2FnZToKKworCSAgaW50IHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9XQ0FDSEUsIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgdmFsdWUgZm9yIHdyaXRlIGNhY2hlIGVuYWJsZQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCShiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSAobm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zKQorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisJICBFSU5WQUwJdmFsdWUgb3V0IG9mIHJhbmdlIFswIDFdCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5CisKKworCitIRElPX1NFVF9BQ09VU1RJQwkJY2hhbmdlIGFjb3VzdGljIGJlaGF2aW9yCisKKwl1c2FnZToKKworCSAgaW50IHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9BQ09VU1RJQywgdmFsKTsKKworCWlucHV0czoKKwkgIE5ldyB2YWx1ZSBmb3IgZHJpdmUgYWNvdXN0aWMgc2V0dGluZ3MKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAkoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgKG5vdCBzdXJlIHdoYXQgdGhpcyBtZWFucykKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRUlOVkFMCXZhbHVlIG91dCBvZiByYW5nZSBbMCAyNTRdCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5CisKKworCitIRElPX1NFVF9RRE1BCQkJY2hhbmdlIHVzZS1xZG1hIGZsYWcKKworCU5vdCBpbXBsZW1lbnRlZCwgYXMgb2YgMi42LjguMQorCisKKworSERJT19TRVRfQUREUkVTUwkJY2hhbmdlIGxiYSBhZGRyZXNzaW5nIG1vZGVzCisKKwl1c2FnZToKKworCSAgaW50IHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9BRERSRVNTLCB2YWwpOworCisJaW5wdXRzOgorCSAgTmV3IHZhbHVlIGZvciBhZGRyZXNzaW5nIG1vZGUKKwkgICAgMCA9IDI4LWJpdAorCSAgICAxID0gNDgtYml0CisJICAgIDIgPSA0OC1iaXQgZG9pbmcgMjgtYml0CisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIChub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMpCisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVJTlZBTAl2YWx1ZSBvdXQgb2YgcmFuZ2UgWzAgMl0KKwkgIEVCVVNZCQlDb250cm9sbGVyIGJ1c3kKKwkgIEVJTwkJRHJpdmUgZG9lcyBub3Qgc3VwcG9ydCBsYmE0OCBtb2RlLgorCisKK0hESU9fU0VUX0lERV9TQ1NJCisKKwl1c2FnZToKKworCSAgbG9uZyB2YWw7CisJICBpb2N0bChmZCwgSERJT19TRVRfSURFX1NDU0ksIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgdmFsdWUgZm9yIHNjc2kgZW11bGF0aW9uIG1vZGUgKD8pCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIChub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMpCisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVJTlZBTAl2YWx1ZSBvdXQgb2YgcmFuZ2UgWzAgMV0KKwkgIEVCVVNZCQlDb250cm9sbGVyIGJ1c3kKKworCisKK0hESU9fU0VUX1NDU0lfSURFCisKKwlOb3QgaW1wbGVtZW50ZWQsIGFzIG9mIDIuNi44LjEKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvc3RhdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9pb3N0YXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWExYmFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pb3N0YXRzLnR4dApAQCAtMCwwICsxLDE1MCBAQAorSS9PIHN0YXRpc3RpY3MgZmllbGRzCistLS0tLS0tLS0tLS0tLS0KKworTGFzdCBtb2RpZmllZCBTZXAgMzAsIDIwMDMKKworU2luY2UgMi40LjIwIChhbmQgc29tZSB2ZXJzaW9ucyBiZWZvcmUsIHdpdGggcGF0Y2hlcyksIGFuZCAyLjUuNDUsCittb3JlIGV4dGVuc2l2ZSBkaXNrIHN0YXRpc3RpY3MgaGF2ZSBiZWVuIGludHJvZHVjZWQgdG8gaGVscCBtZWFzdXJlIGRpc2sKK2FjdGl2aXR5LiBUb29scyBzdWNoIGFzIHNhciBhbmQgaW9zdGF0IHR5cGljYWxseSBpbnRlcnByZXQgdGhlc2UgYW5kIGRvCit0aGUgd29yayBmb3IgeW91LCBidXQgaW4gY2FzZSB5b3UgYXJlIGludGVyZXN0ZWQgaW4gY3JlYXRpbmcgeW91ciBvd24KK3Rvb2xzLCB0aGUgZmllbGRzIGFyZSBleHBsYWluZWQgaGVyZS4KKworSW4gMi40IG5vdywgdGhlIGluZm9ybWF0aW9uIGlzIGZvdW5kIGFzIGFkZGl0aW9uYWwgZmllbGRzIGluCisvcHJvYy9wYXJ0aXRpb25zLiAgSW4gMi42LCB0aGUgc2FtZSBpbmZvcm1hdGlvbiBpcyBmb3VuZCBpbiB0d28KK3BsYWNlczogb25lIGlzIGluIHRoZSBmaWxlIC9wcm9jL2Rpc2tzdGF0cywgYW5kIHRoZSBvdGhlciBpcyB3aXRoaW4KK3RoZSBzeXNmcyBmaWxlIHN5c3RlbSwgd2hpY2ggbXVzdCBiZSBtb3VudGVkIGluIG9yZGVyIHRvIG9idGFpbgordGhlIGluZm9ybWF0aW9uLiBUaHJvdWdob3V0IHRoaXMgZG9jdW1lbnQgd2UnbGwgYXNzdW1lIHRoYXQgc3lzZnMKK2lzIG1vdW50ZWQgb24gL3N5cywgYWx0aG91Z2ggb2YgY291cnNlIGl0IG1heSBiZSBtb3VudGVkIGFueXdoZXJlLgorQm90aCAvcHJvYy9kaXNrc3RhdHMgYW5kIHN5c2ZzIHVzZSB0aGUgc2FtZSBzb3VyY2UgZm9yIHRoZSBpbmZvcm1hdGlvbgorYW5kIHNvIHNob3VsZCBub3QgZGlmZmVyLgorCitIZXJlIGFyZSBleGFtcGxlcyBvZiB0aGVzZSBkaWZmZXJlbnQgZm9ybWF0czoKKworMi40OgorICAgMyAgICAgMCAgIDM5MDgyNjgwIGhkYSA0NDYyMTYgNzg0OTI2IDk1NTA2ODggNDM4MjMxMCA0MjQ4NDcgMzEyNzI2IDU5MjIwNTIgMTkzMTAzODAgMCAzMzc2MzQwIDIzNzA1MTYwCisgICAzICAgICAxICAgIDkyMjEyNzggaGRhMSAzNTQ4NiAwIDM1NDk2IDM4MDMwIDAgMCAwIDAgMCAzODAzMCAzODAzMAorCisKKzIuNiBzeXNmczoKKyAgIDQ0NjIxNiA3ODQ5MjYgOTU1MDY4OCA0MzgyMzEwIDQyNDg0NyAzMTI3MjYgNTkyMjA1MiAxOTMxMDM4MCAwIDMzNzYzNDAgMjM3MDUxNjAKKyAgIDM1NDg2ICAgIDM4MDMwICAgIDM4MDMwICAgIDM4MDMwCisKKzIuNiBkaXNrc3RhdHM6CisgICAzICAgIDAgICBoZGEgNDQ2MjE2IDc4NDkyNiA5NTUwNjg4IDQzODIzMTAgNDI0ODQ3IDMxMjcyNiA1OTIyMDUyIDE5MzEwMzgwIDAgMzM3NjM0MCAyMzcwNTE2MAorICAgMyAgICAxICAgaGRhMSAzNTQ4NiAzODAzMCAzODAzMCAzODAzMAorCitPbiAyLjQgeW91IG1pZ2h0IGV4ZWN1dGUgImdyZXAgJ2hkYSAnIC9wcm9jL3BhcnRpdGlvbnMiLiBPbiAyLjYsIHlvdSBoYXZlCithIGNob2ljZSBvZiAiY2F0IC9zeXMvYmxvY2svaGRhL3N0YXQiIG9yICJncmVwICdoZGEgJyAvcHJvYy9kaXNrc3RhdHMiLgorVGhlIGFkdmFudGFnZSBvZiBvbmUgb3ZlciB0aGUgb3RoZXIgaXMgdGhhdCB0aGUgc3lzZnMgY2hvaWNlIHdvcmtzIHdlbGwKK2lmIHlvdSBhcmUgd2F0Y2hpbmcgYSBrbm93biwgc21hbGwgc2V0IG9mIGRpc2tzLiAgL3Byb2MvZGlza3N0YXRzIG1heQorYmUgYSBiZXR0ZXIgY2hvaWNlIGlmIHlvdSBhcmUgd2F0Y2hpbmcgYSBsYXJnZSBudW1iZXIgb2YgZGlza3MgYmVjYXVzZQoreW91J2xsIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiA1MCwgMTAwLCBvciA1MDAgb3IgbW9yZSBvcGVucy9jbG9zZXMgd2l0aAorZWFjaCBzbmFwc2hvdCBvZiB5b3VyIGRpc2sgc3RhdGlzdGljcy4KKworSW4gMi40LCB0aGUgc3RhdGlzdGljcyBmaWVsZHMgYXJlIHRob3NlIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gSW4KK3RoZSBhYm92ZSBleGFtcGxlLCB0aGUgZmlyc3QgZmllbGQgb2Ygc3RhdGlzdGljcyB3b3VsZCBiZSA0NDYyMTYuCitCeSBjb250cmFzdCwgaW4gMi42IGlmIHlvdSBsb29rIGF0IC9zeXMvYmxvY2svaGRhL3N0YXQsIHlvdSdsbAorZmluZCBqdXN0IHRoZSBlbGV2ZW4gZmllbGRzLCBiZWdpbm5pbmcgd2l0aCA0NDYyMTYuICBJZiB5b3UgbG9vayBhdAorL3Byb2MvZGlza3N0YXRzLCB0aGUgZWxldmVuIGZpZWxkcyB3aWxsIGJlIHByZWNlZGVkIGJ5IHRoZSBtYWpvciBhbmQKK21pbm9yIGRldmljZSBudW1iZXJzLCBhbmQgZGV2aWNlIG5hbWUuICBFYWNoIG9mIHRoZXNlIGZvcm1hdHMgcHJvdmlkZQorZWxldmVuIGZpZWxkcyBvZiBzdGF0aXN0aWNzLCBlYWNoIG1lYW5pbmcgZXhhY3RseSB0aGUgc2FtZSB0aGluZ3MuCitBbGwgZmllbGRzIGV4Y2VwdCBmaWVsZCA5IGFyZSBjdW11bGF0aXZlIHNpbmNlIGJvb3QuICBGaWVsZCA5IHNob3VsZAorZ28gdG8gemVybyBhcyBJL09zIGNvbXBsZXRlOyBhbGwgb3RoZXJzIG9ubHkgaW5jcmVhc2UuICBZZXMsIHRoZXNlIGFyZQorMzIgYml0IHVuc2lnbmVkIG51bWJlcnMsIGFuZCBvbiBhIHZlcnkgYnVzeSBvciBsb25nLWxpdmVkIHN5c3RlbSB0aGV5CittYXkgd3JhcC4gQXBwbGljYXRpb25zIHNob3VsZCBiZSBwcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdDsgdW5sZXNzCit5b3VyIG9ic2VydmF0aW9ucyBhcmUgbWVhc3VyZWQgaW4gbGFyZ2UgbnVtYmVycyBvZiBtaW51dGVzIG9yIGhvdXJzLAordGhleSBzaG91bGQgbm90IHdyYXAgdHdpY2UgYmVmb3JlIHlvdSBub3RpY2UgdGhlbS4KKworRWFjaCBzZXQgb2Ygc3RhdHMgb25seSBhcHBsaWVzIHRvIHRoZSBpbmRpY2F0ZWQgZGV2aWNlOyBpZiB5b3Ugd2FudAorc3lzdGVtLXdpZGUgc3RhdHMgeW91J2xsIGhhdmUgdG8gZmluZCBhbGwgdGhlIGRldmljZXMgYW5kIHN1bSB0aGVtIGFsbCB1cC4KKworRmllbGQgIDEgLS0gIyBvZiByZWFkcyBpc3N1ZWQKKyAgICBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVhZHMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KK0ZpZWxkICAyIC0tICMgb2YgcmVhZHMgbWVyZ2VkLCBmaWVsZCA2IC0tICMgb2Ygd3JpdGVzIG1lcmdlZAorICAgIFJlYWRzIGFuZCB3cml0ZXMgd2hpY2ggYXJlIGFkamFjZW50IHRvIGVhY2ggb3RoZXIgbWF5IGJlIG1lcmdlZCBmb3IKKyAgICBlZmZpY2llbmN5LiAgVGh1cyB0d28gNEsgcmVhZHMgbWF5IGJlY29tZSBvbmUgOEsgcmVhZCBiZWZvcmUgaXQgaXMKKyAgICB1bHRpbWF0ZWx5IGhhbmRlZCB0byB0aGUgZGlzaywgYW5kIHNvIGl0IHdpbGwgYmUgY291bnRlZCAoYW5kIHF1ZXVlZCkKKyAgICBhcyBvbmx5IG9uZSBJL08uICBUaGlzIGZpZWxkIGxldHMgeW91IGtub3cgaG93IG9mdGVuIHRoaXMgd2FzIGRvbmUuCitGaWVsZCAgMyAtLSAjIG9mIHNlY3RvcnMgcmVhZAorICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzIHJlYWQgc3VjY2Vzc2Z1bGx5LgorRmllbGQgIDQgLS0gIyBvZiBtaWxsaXNlY29uZHMgc3BlbnQgcmVhZGluZworICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc3BlbnQgYnkgYWxsIHJlYWRzIChhcworICAgIG1lYXN1cmVkIGZyb20gX19tYWtlX3JlcXVlc3QoKSB0byBlbmRfdGhhdF9yZXF1ZXN0X2xhc3QoKSkuCitGaWVsZCAgNSAtLSAjIG9mIHdyaXRlcyBjb21wbGV0ZWQKKyAgICBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygd3JpdGVzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCitGaWVsZCAgNyAtLSAjIG9mIHNlY3RvcnMgd3JpdHRlbgorICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzIHdyaXR0ZW4gc3VjY2Vzc2Z1bGx5LgorRmllbGQgIDggLS0gIyBvZiBtaWxsaXNlY29uZHMgc3BlbnQgd3JpdGluZworICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc3BlbnQgYnkgYWxsIHdyaXRlcyAoYXMKKyAgICBtZWFzdXJlZCBmcm9tIF9fbWFrZV9yZXF1ZXN0KCkgdG8gZW5kX3RoYXRfcmVxdWVzdF9sYXN0KCkpLgorRmllbGQgIDkgLS0gIyBvZiBJL09zIGN1cnJlbnRseSBpbiBwcm9ncmVzcworICAgIFRoZSBvbmx5IGZpZWxkIHRoYXQgc2hvdWxkIGdvIHRvIHplcm8uIEluY3JlbWVudGVkIGFzIHJlcXVlc3RzIGFyZQorICAgIGdpdmVuIHRvIGFwcHJvcHJpYXRlIHJlcXVlc3RfcXVldWVfdCBhbmQgZGVjcmVtZW50ZWQgYXMgdGhleSBmaW5pc2guCitGaWVsZCAxMCAtLSAjIG9mIG1pbGxpc2Vjb25kcyBzcGVudCBkb2luZyBJL09zCisgICAgVGhpcyBmaWVsZCBpcyBpbmNyZWFzZXMgc28gbG9uZyBhcyBmaWVsZCA5IGlzIG5vbnplcm8uCitGaWVsZCAxMSAtLSB3ZWlnaHRlZCAjIG9mIG1pbGxpc2Vjb25kcyBzcGVudCBkb2luZyBJL09zCisgICAgVGhpcyBmaWVsZCBpcyBpbmNyZW1lbnRlZCBhdCBlYWNoIEkvTyBzdGFydCwgSS9PIGNvbXBsZXRpb24sIEkvTworICAgIG1lcmdlLCBvciByZWFkIG9mIHRoZXNlIHN0YXRzIGJ5IHRoZSBudW1iZXIgb2YgSS9PcyBpbiBwcm9ncmVzcworICAgIChmaWVsZCA5KSB0aW1lcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzcGVudCBkb2luZyBJL08gc2luY2UgdGhlCisgICAgbGFzdCB1cGRhdGUgb2YgdGhpcyBmaWVsZC4gIFRoaXMgY2FuIHByb3ZpZGUgYW4gZWFzeSBtZWFzdXJlIG9mIGJvdGgKKyAgICBJL08gY29tcGxldGlvbiB0aW1lIGFuZCB0aGUgYmFja2xvZyB0aGF0IG1heSBiZSBhY2N1bXVsYXRpbmcuCisKKworVG8gYXZvaWQgaW50cm9kdWNpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG5vIGxvY2tzIGFyZSBoZWxkIHdoaWxlCittb2RpZnlpbmcgdGhlc2UgY291bnRlcnMuICBUaGlzIGltcGxpZXMgdGhhdCBtaW5vciBpbmFjY3VyYWNpZXMgbWF5IGJlCitpbnRyb2R1Y2VkIHdoZW4gY2hhbmdlcyBjb2xsaWRlLCBzbyAoZm9yIGluc3RhbmNlKSBhZGRpbmcgdXAgYWxsIHRoZQorcmVhZCBJL09zIGlzc3VlZCBwZXIgcGFydGl0aW9uIHNob3VsZCBlcXVhbCB0aG9zZSBtYWRlIHRvIHRoZSBkaXNrcyAuLi4KK2J1dCBkdWUgdG8gdGhlIGxhY2sgb2YgbG9ja2luZyBpdCBtYXkgb25seSBiZSB2ZXJ5IGNsb3NlLgorCitJbiAyLjYsIHRoZXJlIGFyZSBjb3VudGVycyBmb3IgZWFjaCBjcHUsIHdoaWNoIG1hZGUgdGhlIGxhY2sgb2YgbG9ja2luZworYWxtb3N0IGEgbm9uLWlzc3VlLiAgV2hlbiB0aGUgc3RhdGlzdGljcyBhcmUgcmVhZCwgdGhlIHBlci1jcHUgY291bnRlcnMKK2FyZSBzdW1tZWQgKHBvc3NpYmx5IG92ZXJmbG93aW5nIHRoZSB1bnNpZ25lZCAzMi1iaXQgdmFyaWFibGUgdGhleSBhcmUKK3N1bW1lZCB0bykgYW5kIHRoZSByZXN1bHQgZ2l2ZW4gdG8gdGhlIHVzZXIuICBUaGVyZSBpcyBubyBjb252ZW5pZW50Cit1c2VyIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIHRoZSBwZXItY3B1IGNvdW50ZXJzIHRoZW1zZWx2ZXMuCisKK0Rpc2tzIHZzIFBhcnRpdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgd2VyZSBzaWduaWZpY2FudCBjaGFuZ2VzIGJldHdlZW4gMi40IGFuZCAyLjYgaW4gdGhlIEkvTyBzdWJzeXN0ZW0uCitBcyBhIHJlc3VsdCwgc29tZSBzdGF0aXN0aWMgaW5mb3JtYXRpb24gZGlzYXBwZWFyZWQuIFRoZSB0cmFuc2xhdGlvbiBmcm9tCithIGRpc2sgYWRkcmVzcyByZWxhdGl2ZSB0byBhIHBhcnRpdGlvbiB0byB0aGUgZGlzayBhZGRyZXNzIHJlbGF0aXZlIHRvCit0aGUgaG9zdCBkaXNrIGhhcHBlbnMgbXVjaCBlYXJsaWVyLiAgQWxsIG1lcmdlcyBhbmQgdGltaW5ncyBub3cgaGFwcGVuCithdCB0aGUgZGlzayBsZXZlbCByYXRoZXIgdGhhbiBhdCBib3RoIHRoZSBkaXNrIGFuZCBwYXJ0aXRpb24gbGV2ZWwgYXMKK2luIDIuNC4gIENvbnNlcXVlbnRseSwgeW91J2xsIHNlZSBhIGRpZmZlcmVudCBzdGF0aXN0aWNzIG91dHB1dCBvbiAyLjYgZm9yCitwYXJ0aXRpb25zIGZyb20gdGhhdCBmb3IgZGlza3MuICBUaGVyZSBhcmUgb25seSAqZm91ciogZmllbGRzIGF2YWlsYWJsZQorZm9yIHBhcnRpdGlvbnMgb24gMi42IG1hY2hpbmVzLiAgVGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlIGV4YW1wbGVzIGFib3ZlLgorCitGaWVsZCAgMSAtLSAjIG9mIHJlYWRzIGlzc3VlZAorICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiByZWFkcyBpc3N1ZWQgdG8gdGhpcyBwYXJ0aXRpb24uCitGaWVsZCAgMiAtLSAjIG9mIHNlY3RvcnMgcmVhZAorICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzIHJlcXVlc3RlZCB0byBiZSByZWFkIGZyb20gdGhpcworICAgIHBhcnRpdGlvbi4KK0ZpZWxkICAzIC0tICMgb2Ygd3JpdGVzIGlzc3VlZAorICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiB3cml0ZXMgaXNzdWVkIHRvIHRoaXMgcGFydGl0aW9uLgorRmllbGQgIDQgLS0gIyBvZiBzZWN0b3JzIHdyaXR0ZW4KKyAgICBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycyByZXF1ZXN0ZWQgdG8gYmUgd3JpdHRlbiB0bworICAgIHRoaXMgcGFydGl0aW9uLgorCitOb3RlIHRoYXQgc2luY2UgdGhlIGFkZHJlc3MgaXMgdHJhbnNsYXRlZCB0byBhIGRpc2stcmVsYXRpdmUgb25lLCBhbmQgbm8KK3JlY29yZCBvZiB0aGUgcGFydGl0aW9uLXJlbGF0aXZlIGFkZHJlc3MgaXMga2VwdCwgdGhlIHN1YnNlcXVlbnQgc3VjY2Vzcworb3IgZmFpbHVyZSBvZiB0aGUgcmVhZCBjYW5ub3QgYmUgYXR0cmlidXRlZCB0byB0aGUgcGFydGl0aW9uLiAgSW4gb3RoZXIKK3dvcmRzLCB0aGUgbnVtYmVyIG9mIHJlYWRzIGZvciBwYXJ0aXRpb25zIGlzIGNvdW50ZWQgc2xpZ2h0bHkgYmVmb3JlIHRpbWUKK29mIHF1ZXVpbmcgZm9yIHBhcnRpdGlvbnMsIGFuZCBhdCBjb21wbGV0aW9uIGZvciB3aG9sZSBkaXNrcy4gIFRoaXMgaXMKK2Egc3VidGxlIGRpc3RpbmN0aW9uIHRoYXQgaXMgcHJvYmFibHkgdW5pbnRlcmVzdGluZyBmb3IgbW9zdCBjYXNlcy4KKworQWRkaXRpb25hbCBub3RlcworLS0tLS0tLS0tLS0tLS0tLQorCitJbiAyLjYsIHN5c2ZzIGlzIG5vdCBtb3VudGVkIGJ5IGRlZmF1bHQuICBJZiB5b3VyIGRpc3RyaWJ1dGlvbiBvZgorTGludXggaGFzbid0IGFkZGVkIGl0IGFscmVhZHksIGhlcmUncyB0aGUgbGluZSB5b3UnbGwgd2FudCB0byBhZGQgdG8KK3lvdXIgL2V0Yy9mc3RhYjoKKworbm9uZSAvc3lzIHN5c2ZzIGRlZmF1bHRzIDAgMAorCisKK0luIDIuNiwgYWxsIGRpc2sgc3RhdGlzdGljcyB3ZXJlIHJlbW92ZWQgZnJvbSAvcHJvYy9zdGF0LiAgSW4gMi40LCB0aGV5CithcHBlYXIgaW4gYm90aCAvcHJvYy9wYXJ0aXRpb25zIGFuZCAvcHJvYy9zdGF0LCBhbHRob3VnaCB0aGUgb25lcyBpbgorL3Byb2Mvc3RhdCB0YWtlIGEgdmVyeSBkaWZmZXJlbnQgZm9ybWF0IGZyb20gdGhvc2UgaW4gL3Byb2MvcGFydGl0aW9ucworKHNlZSBwcm9jKDUpLCBpZiB5b3VyIHN5c3RlbSBoYXMgaXQuKQorCistLSByaWNrbGluZEB1cy5pYm0uY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzYXBucC50eHQgYi9Eb2N1bWVudGF0aW9uL2lzYXBucC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwZDFiNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNhcG5wLnR4dApAQCAtMCwwICsxLDE0IEBACitJU0EgUGx1ZyAmIFBsYXkgc3VwcG9ydCBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludGVyZmFjZSAvcHJvYy9pc2FwbnAKKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGludGVyZmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZWUgcG5wLnR4dCBmb3IgbW9yZSBkZXRhaWxzLgorCitJbnRlcmZhY2UgL3Byb2MvYnVzL2lzYXBucAorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgYWxsb3dzIGFjY2VzcyB0byBJU0EgUG5QIGNhcmRzIGFuZCBsb2dpY2FsIGRldmljZXMuCitUaGUgcmVndWxhciBmaWxlcyBjb250YWluIHRoZSBjb250ZW50cyBvZiBJU0EgUG5QIHJlZ2lzdGVycyBmb3IKK2EgbG9naWNhbCBkZXZpY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2lzZG4vMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlZTVmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi8wMC1JTkRFWApAQCAtMCwwICsxLDQzIEBACiswMC1JTkRFWAorCS0gdGhpcyBmaWxlIChpbmZvIG9uIElTRE4gaW1wbGVtZW50YXRpb24gZm9yIExpbnV4KQorQ1JFRElUUworCS0gbGlzdCBvZiB0aGUga2luZCBmb2xrcyB0aGF0IGJyb3VnaHQgeW91IHRoaXMgc3R1ZmYuCitJTlRFUkZBQ0UKKwktIGRlc2NyaXB0aW9uIG9mIExpbmtsZXZlbCBhbmQgSGFyZHdhcmVsZXZlbCBJU0ROIGludGVyZmFjZS4KK1JFQURNRQorCS0gZ2VuZXJhbCBpbmZvIG9uIHdoYXQgeW91IG5lZWQgYW5kIHdoYXQgdG8gZG8gZm9yIExpbnV4IElTRE4uCitSRUFETUUuRkFRCisJLSBnZW5lcmFsIGluZm8gZm9yIEZBUS4KK1JFQURNRS5hdWRpbworCS0gaW5mbyBmb3IgcnVubmluZyBhdWRpbyBvdmVyIElTRE4uCitSRUFETUUuZmF4CisJLSBpbmZvIGZvciB1c2luZyBGYXggb3ZlciBJU0ROLgorUkVBRE1FLmljbgorCS0gaW5mbyBvbiB0aGUgSUNOLUlTRE4tY2FyZCBhbmQgaXRzIGRyaXZlci4KK1JFQURNRS5IaVNheAorCS0gaW5mbyBvbiB0aGUgSGlTYXggZHJpdmVyIHdoaWNoIHJlcGxhY2VzIHRoZSBvbGQgdGVsZXMuCitSRUFETUUuaGZjLXBjaQorCS0gaW5mbyBvbiBoZmMtcGNpIGJhc2VkIGNhcmRzLgorUkVBRE1FLnBjYml0CisJLSBpbmZvIG9uIHRoZSBQQ0JJVC1EIElTRE4gYWRhcHRlciBhbmQgZHJpdmVyLgorUkVBRE1FLnN5bmNwcHAKKwktIGluZm8gb24gcnVubmluZyBTeW5jIFBQUCBvdmVyIElTRE4uCitzeW5jUFBQLkZBUQorCS0gZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMgYWJvdXQgcnVubmluZyBQUFAgb3ZlciBJU0ROLgorUkVBRE1FLmF2bWIxCisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQVZNLUIxIElTRE4gY2FyZC4KK1JFQURNRS5hY3QyMDAwCisJLSBpbmZvIG9uIGRyaXZlciBmb3IgSUJNIEFDVC0yMDAwIGNhcmQuCitSRUFETUUuZWljb24KKwktIGluZm8gb24gZHJpdmVyIGZvciBFaWNvbiBhY3RpdmUgY2FyZHMuCitSRUFETUUuY29uY2FwCisJLSBpbmZvIG9uICJDT05DQVAiIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaW50ZXJmYWNlIHVzZWQgZm9yIFguMjUuCitSRUFETUUuZGl2ZXJzaW9uCisJLSBpbmZvIG9uIG1vZHVsZSBmb3IgaXNkbiBkaXZlcnNpb24gc2VydmljZXMuCitSRUFETUUuc2MKKwktIGluZm8gb24gZHJpdmVyIGZvciBTcGVsbGNhc3RlciBjYXJkcy4KK1JFQURNRS54MjUKKyAgICBfIGluZm8gZm9yIHJ1bm5pbmcgWC4yNSBvdmVyIElTRE4uCitSRUFETUUuaHlzZG4KKyAgICAgICAgLSBpbmZvIG9uIGRyaXZlciBmb3IgSHlwZXJjb3BlIGFjdGl2ZSBIWVNETiBjYXJkcworIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL0NSRURJVFMgYi9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWIzMDIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL0NSRURJVFMKQEAgLTAsMCArMSw3MCBAQAorCitJIHdhbnQgdG8gdGhhbmsgYWxsIHdobyBjb250cmlidXRlZCB0byB0aGlzIHByb2plY3QgYW5kIGVzcGVjaWFsbHkgdG86CisoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKQorCitUaG9tYXMgQm9nZW5k9nJmZXIgKHRzYm9nZW5kQGJpZ2J1Zy5mcmFua2VuLmRlKQorICBUZXN0ZXIsIGxvdHMgb2YgYnVnZml4ZXMgYW5kIGhpbnRzLgorCitBbGFuIENveCAoYWxhbkByZWRoYXQuY29tKQorICBGb3IgaGVscCBnZXR0aW5nIGludG8gc3RhbmRhcmQta2VybmVsLgorCitIZW5uZXIgRWlzZW4gKGVpc0BiYXR5LmhhbnNlLmRlKQorICBGb3IgWC4yNSBpbXBsZW1lbnRhdGlvbi4KKworVm9sa2VyIEf2dHogKHZvbGtlckBvb3BzLmZyYW5rZW4uZGUpCisgIEZvciBjb250cmlidXRpb24gb2YgbWFuLXBhZ2VzLCB0aGUgaW1vbnR0eS10b29sIGFuZCBhIHBlcmZlY3QKKyAgbWFpbnRhaW5pbmcgb2YgdGhlIG1haWxpbmctbGlzdCBhdCBodWItd3VlLgorCitNYXR0aGlhcyBIZXNzbGVyIChoZXNzbGVyQGlzZG40bGludXguZGUpCisgIEZvciBjcmVhdGluZyBhbmQgbWFpbnRhaW5pbmcgdGhlIEZBUS4KKworQmVybmhhcmQgSGFpbGVyIChCZXJuaGFyZC5IYWlsZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkKKyAgRm9yIGNyZWF0aW5nIHRoZSBGQVEsIGFuZCB0aGUgbGVhZnNpdGUgSE9XVE8uIAorCitNaWNoYWVsICdHaGFuZGknIEhlcm9sZCAobWljaGFlbEBhYmFkb25uYS5mcmFua2VuLmRlKQorICBGb3IgY29udHJpYnV0aW9uIG9mIHRoZSB2Ym94IGFuc3dlcmluZyBtYWNoaW5lLgorCitNaWNoYWVsIEhpcHAgKE1pY2hhZWwuSGlwcEBzdHVkZW50LnVuaS10dWViaW5nZW4uZGUpCisgIEZvciBoaXMgU3luYy1QUFAtY29kZS4KKworS2Fyc3RlbiBLZWlsIChrZWlsQGlzZG40bGludXguZGUpCisgIEZvciBhZGRpbmcgMVRSNi1zdXBwb3J0IHRvIHRoZSBUZWxlcy1kcml2ZXIuCisgIEZvciB0aGUgSGlTYXgtZHJpdmVyLgorCitNaWNoYWVsIEtuaWdnZSAoa25pY2tAY292ZS5oYW4uZGUpCisgIEZvciBjb250cmlidXRpbmcgdGhlIGltb24tdG9vbAorCitBbmRyZWFzIEtvb2wgKGFrb29sQEtvb2wuZi5FVW5ldC5kZSkKKyAgRm9yIGNvbnRyaWJ1dGlvbiBvZiB0aGUgaXNkbmxvZy9pc2RucmVwLXRvb2wKKworUGVkcm8gUm9xdWUgTWFycXVlcyAocm9xdWVAZGkuZmMudWwucHQpCisgIEZvciBsb3Qgb2YgbmV3IGlkZWFzIGFuZCB0aGUgcGNiaXQgZHJpdmVyLgorCitFYmVyaGFyZCBNb2Vua2ViZXJnIChlbW9lbmtlQGd3ZGcuZGUpCisgIEZvciB0ZXN0aW5nIGFuZCBoZWxwIHRvIGdldCBpbnRvIGtlcm5lbC4KKworVGhvbWFzIE5ldW1hbm4gKHRuQHJ1aHIuZGUpCisgIEZvciBoZWxwIHdpdGggQ2lzY28tU0xBUlAgYW5kIGtlZXBhbGl2ZQorCitKYW4gZGVuIE91ZGVuIChkZW5vdWRlbkBncm9vdmluLnhzNGFsbC5ubCkKKyAgRm9yIGNvbnRyaWJ1dGlvbiBvZiB0aGUgb3JpZ2luYWwgdGVsZXMtZHJpdmVyCisKK0NhcnN0ZW4gUGFldGggKGNhbGxlQGNhbGxlLmluLWJlcmxpbi5kZSkKKyAgRm9yIHRoZSBBVk0tQjEtQ0FQSTIuMCBkcml2ZXIKKworVGhvbWFzIFBmZWlmZmVyIChwZmVpZmZlckBwZHMuZGUpCisgIEZvciBWLjExMCwgZXh0ZW5kZWQgVC43MCBhbmQgSHlsYWZheCBleHRlbnNpb25zIGluIGlzZG5fdHR5LmMKKworTWF4IFJpZWdlbCAocmllZ2VsQG1heC5mcmFua2VuLmRlKQorICBGb3IgbWFraW5nIHRoZSBJQ04gaGFyZHdhcmUtZG9jdW1lbnRhdGlvbiBhbmQgdGVzdC1lcXVpcG1lbnQgYXZhaWxhYmxlLgorCitBcm1pbiBTY2hpbmRsZXIgKG1hY0BtZWx3YXJlLmRlKQorICBGb3IgdGhlIGVpY29uIGFjdGl2ZSBjYXJkIGRyaXZlci4KKworR2VyaGFyZCAnRmlkbycgU2NobmVpZGVyIChmaWRvQHd1ZmYubWF5bi5kZSkKKyAgRm9yIGhlYXZ5LWR1dHktYmV0YS10ZXN0aW5nIHdpdGggaGlzIEJCUyA7KQorCitUaG9tYXMgVWhsICh1aGxAdGhpbmsuZGUpCisgIEZvciBkaXN0cmlidXRpbmcgdGhlIGNhcmRzLgorICBGb3IgcHVzaGluZyBtZSB0byB3b3JrIDstKQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vSGlTYXguY2VydCBiL0RvY3VtZW50YXRpb24vaXNkbi9IaVNheC5jZXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYTZmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vSGlTYXguY2VydApAQCAtMCwwICsxLDk2IEBACistLS0tLUJFR0lOIFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tCisKK0ZpcnN0OgorCisgICAgSGlTYXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworSG93ZXZlciwgaWYgeW91IHdpc2ggdG8gbW9kaWZ5IHRoZSBIaVNheCBzb3VyY2VzLCBwbGVhc2Ugbm90ZSB0aGUgZm9sbG93aW5nOgorCitIaVNheCBoYXMgcGFzc2VkIHRoZSBJVFUgYXBwcm92YWwgdGVzdCBzdWl0ZSB3aXRoIEVMU0EgUXVpY2tzdGVwIElTRE4gY2FyZHMKK2FuZCBFaWNvbiBUZWNobm9sb2d5IERpdmEgMi4wMSBQQ0kgY2FyZC4KK1RoZSBjZXJ0aWZpY2F0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdGVzdGVkIHNvZnR3YXJlCit2ZXJzaW9uIGFuZCB0aGUgdGVzdGVkIGhhcmR3YXJlLiBBbnkgY2hhbmdlcyB0byB0aGUgSGlTYXggc291cmNlIGNvZGUgbWF5Cit0aGVyZWZvcmUgYWZmZWN0IHRoZSBjZXJ0aWZpY2F0aW9uLgorCitBZGRpdGlvbmFsIElUVSBhcHByb3ZhbCB0ZXN0cyBoYXZlIGJlZW4gY2FycmllZCBvdXQgZm9yIGFsbCBnZW5lcmljIGNhcmRzCit1c2luZyBDb2xvZ25lY2hpcCBzaW5nbGUgY2hpcCBzb2x1dGlvbnMgSEZDLVMgUENJIEEgZm9yIFBDSSBjYXJkcyBhcyB3ZWxsCithcyBIRkMtUyBVU0IgYmFzZWQgVVNCIElTRE4gdGEgYWRhcHRlcnMuCitUaGVzZSB0ZXN0cyBpbmNsdWRlZCBhbGwgbGF5ZXJzIDEtMyBhbmQgYXMgd2VsbCBhbGwgZnVuY3Rpb25hbCB0ZXN0cyBmb3IgCit0aGUgbGF5ZXIgMS4gQmVjYXVzZSBhbGwgaGFyZHdhcmUgYmFzZWQgb24gdGhlc2UgY2hpcHMgYXJlIGNvbXBsZXRlIElTRE4KK3NvbHV0aW9ucyBpbiBvbmUgY2hpcCBhbGwgY2FyZHMgYW5kIFVTQi1UQXMgdXNpbmcgdGhlc2UgY2hpcHMgYXJlIHRvIGJlCityZWdhcmRlZCBhcyBhcHByb3ZlZCBmb3IgdGhvc2UgdGVzdHMuIFNvbWUgYWRkaXRpb25hbCBlbGVjdHJpY2FsIHRlc3RzCitvZiB0aGUgbGF5ZXIgMSB3aGljaCBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIGRyaXZlciBhbmQgcmVsYXRlZCB0byBhCitzcGVjaWFsIGhhcmR3YXJlIHVzZWQgd2lsbCBiZSByZWdhcmRlZCBhcyBhcHByb3ZlZCBpZiBhdCBsZWFzdCBvbmUgCitzb2x1dGlvbiBoYXMgYmVlbiB0ZXN0ZWQgaW5jbHVkaW5nIHRob3NlIGVsZWN0cmljYWwgdGVzdHMuIFNvIGlmIGNhcmRzIAorb3IgdGFzIGhhdmUgYmVlbiBjb21wbGV0ZWx5IGFwcHJvdmVkIGZvciBhbnkgb3RoZXIgb3MsIHRoZSBhcHByb3ZhbAorZm9yIHRob3NlIGVsZWN0cmljYWwgdGVzdHMgaXMgdmFsaWQgZm9yIGxpbnV4LCB0b28uCitQbGVhc2Ugc2VuZCBhbnkgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGlzIGRyaXZlcnMgb3IgYXBwcm92YWwgYWJvdXRzIHRvIAord2VybmVyQGlzZG4tZGV2ZWxvcG1lbnQuZGUgCitBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFuZCB0aGUgdHlwZSBhcHByb3ZhbCBkb2N1bWVudHMgd2lsbCBiZSBmb3VuZAorc2hvcnRseSBvbiB0aGUgQ29sb2duZWNoaXAgd2Vic2l0ZSB3d3cuY29sb2duZWNoaXAuY29tIAorCitJZiB5b3UgY2hhbmdlIHRoZSBtYWluIGZpbGVzIG9mIHRoZSBIaVNheCBJU0ROIHN0YWNrLCB0aGUgY2VydGlmaWNhdGlvbiB3aWxsCitiZWNvbWUgaW52YWxpZC4gQmVjYXVzZSBpbiBtb3N0IGNvdW50cmllcyBpdCBpcyBpbGxlZ2FsIHRvIGNvbm5lY3QKK3VuYXBwcm92ZWQgSVNETiBlcXVpcG1lbnQgdG8gdGhlIHB1YmxpYyBuZXR3b3JrLCBJIGhhdmUgdG8gZ3VhcmFudGVlIHRoYXQKK2NoYW5nZXMgaW4gSGlTYXggZG8gbm90IGFmZmVjdCB0aGUgY2VydGlmaWNhdGlvbi4KKworSW4gb3JkZXIgdG8gbWFrZSBhIHZhbGlkIGNlcnRpZmljYXRpb24gYXBwYXJlbnQgdG8gdGhlIHVzZXIsIEkgaGF2ZSBidWlsdCBpbgorc29tZSB2YWxpZGF0aW9uIGNoZWNrcyB0aGF0IGFyZSBtYWRlIGR1cmluZyB0aGUgbWFrZSBwcm9jZXNzLiBUaGUgSGlTYXggbWFpbgorZmlsZXMgYXJlIHByb3RlY3RlZCBieSBtZDUgY2hlY2tzdW1zIGFuZCB0aGUgbWQ1c3VtIGZpbGUgaXMgcGdwIHNpZ25lZCBieQorbXlzZWxmOgorCitLZXlJRCAxMDI0L0ZGOTkyRjZEIDE5OTcvMDEvMTYgS2Fyc3RlbiBLZWlsIDxra2VpbEBzdXNlLmRlPgorS2V5IGZpbmdlcnByaW50ID0gOTIgNkIgRjcgNTggRUUgODYgMjggQzggIEM0IDFBIEU2IERDIDM5IDg5IEYyIEFBCisKK09ubHkgaWYgdGhlIGNoZWNrc3VtcyBhcmUgT0ssIGFuZCB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmaWxlCisiZHJpdmVycy9pc2RuL2hpc2F4L21kNXN1bXMuYXNjIiBtYXRjaCwgaXMgdGhlIGNlcnRpZmljYXRpb24gdmFsaWQ7IGEKK21lc3NhZ2UgY29uZmlybWluZyB0aGlzIGlzIHRoZW4gZGlzcGxheWVkIGR1cmluZyB0aGUgaGlzYXggaW5pdCBwcm9jZXNzLgorCitUaGUgYWZmZWN0ZWQgZmlsZXMgYXJlOgorCitkcml2ZXJzL2lzZG4vaGlzYXgvaXNhYy5jCitkcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKK2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYworZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMy5jCitkcml2ZXJzL2lzZG4vaGlzYXgvdGVpLmMKK2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCitkcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKK2RyaXZlcnMvaXNkbi9oaXNheC9sM18xdHI2LmMKK2RyaXZlcnMvaXNkbi9oaXNheC9jZXJ0LmMKK2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKK2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKK2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKworUGxlYXNlIHNlbmQgYW55IGNoYW5nZXMsIGJ1Z2ZpeGVzIGFuZCBwYXRjaGVzIHRvIG1lIHJhdGhlciB0aGFuIGltcGxlbWVudGluZwordGhlbSBkaXJlY3RseSBpbnRvIHRoZSBIaVNheCBzb3VyY2VzLgorCitUaGlzIGRvZXMgbm90IHJlZHVjZSB5b3VyIHJpZ2h0cyBncmFudGVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0lmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGUgc291cmNlcywgZ28gYWhlYWQ7IGJ1dCBub3RlIHRoYXQgdGhlbiB0aGUKK2NlcnRpZmljYXRpb24gaXMgaW52YWxpZCBldmVuIGlmIHlvdSB1c2Ugb25lIG9mIHRoZSBhcHByb3ZlZCBjYXJkcy4KKworSGVyZSBhcmUgdGhlIGNlcnRpZmljYXRpb24gcmVnaXN0cmF0aW9uIG51bWJlcnMgZm9yIEVMU0EgUXVpY2tzdGVwIGNhcmRzOgorR2VybWFuICAgRDEzMzM2MUogQ0VURUNPTSBJQ1QgU2VydmljZXMgR21iSCAwNjgyCitFdXJvcGVhbiBEMTMzMzYySiBDRVRFQ09NIElDVCBTZXJ2aWNlcyBHbWJIIDA2ODIKKworCitLYXJzdGVuIEtlaWwKK2tlaWxAaXNkbjRsaW51eC5kZQorCistLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorVmVyc2lvbjogMi42LjNpCitDaGFyc2V0OiBub2NvbnYKKworaVFDVkF3VUJPRkF3cVRweEh2WC9tUzl0QVFGSTJRUDlHTERLMml5L0tCaHdSZUUzRjdMZU8rdFZoZmZUVlozYQorMjBxNS96L1djSWcvcG5IMHVUa2wyVWdEWEJGWFlsNDV6SnlER05wQXBvc0lGbVQrRWRkMTRvN1ZqMXcvQkJkbgorWSs1ckJtSmYrZ3lCdTYxZGE1ZDZidjBscHltd1JhL3VtK3JpK2lsWW5aL1hQZmc1SktoZGpHU0JDSnVKQUVsTQorZDJqRmJUcnNNWXc9Cis9TE5mOQorLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFIGIvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGYxN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRQpAQCAtMCwwICsxLDc1OSBAQAorJElkOiBJTlRFUkZBQ0UsdiAxLjE1LjguMiAyMDAxLzAzLzEzIDE2OjE3OjA3IGthaSBFeHAgJAorCitEZXNjcmlwdGlvbiBvZiB0aGUgSW50ZXJmYWNlIGJldHdlZW4gTGlua2xldmVsIGFuZCBIYXJkd2FyZWxldmVsCisgIG9mIGlzZG40bGludXg6CisKKworICBUaGUgQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIExpbmtsZXZlbCAoTEwpIGFuZCBIYXJkd2FyZWxldmVsIChITCkKKyAgaXMgYmFzZWQgb24gdGhlIHN0cnVjdCBpc2RuX2lmIChkZWZpbmVkIGluIGlzZG5pZi5oKS4KKworICBBbiBITC1kcml2ZXIgY2FuIHJlZ2lzdGVyIGl0c2VsZiBhdCBMTCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbgorICByZWdpc3Rlcl9pc2RuKCkgd2l0aCBhIHBvaW50ZXIgdG8gdGhhdCBzdHJ1Y3QuIFByaW9yIHRvIHRoYXQsIGl0IGhhcworICB0byBwcmVzZXQgc29tZSBvZiB0aGUgZmllbGRzIG9mIGlzZG5faWYuIFRoZSBMTCBzZXRzIHRoZSByZXN0IG9mCisgIHRoZSBmaWVsZHMuIEFsbCBmdXJ0aGVyIGNvbW11bmljYXRpb24gaXMgZG9uZSB2aWEgY2FsbGJhY2tzIHVzaW5nCisgIHRoZSBmdW5jdGlvbi1wb2ludGVycyBkZWZpbmVkIGluIGlzZG5faWYuCisKKyAgQ2hhbmdlcy9WZXJzaW9uIG51bWJlcmluZzoKKworICBEdXJpbmcgZGV2ZWxvcG1lbnQgb2YgdGhlIElTRE4gc3Vic3lzdGVtLCBzZXZlcmFsIGNoYW5nZXMgaGF2ZSBiZWVuCisgIG1hZGUgdG8gdGhlIGludGVyZmFjZS4gQmVmb3JlIGl0IHdlbnQgaW50byBrZXJuZWwsIHRoZSBwYWNrYWdlCisgIGhhZCBhIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci4gVGhlIGxhc3QgdmVyc2lvbiwgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseQorICB3YXMgMC43LjQuIFdoZW4gdGhlIHN1YnN5c3RlbSB3ZW50IGludG8ga2VybmVsLCBldmVyeSBmdW5jdGlvbmFsIHVuaXQKKyAgZ290IGEgc2VwYXJhdGUgdmVyc2lvbiBudW1iZXIuIFRoZXNlIG51bWJlcnMgYXJlIHNob3duIGF0IGluaXRpYWxpemF0aW9uLAorICBzZXBhcmF0ZWQgYnkgc2xhc2hlczoKKworICAgICBjLmMvdC50L24ubi9wLnAvYS5hL3YudgorCisgIHdoZXJlCisKKyAgIGMuYyBpcyB0aGUgcmV2aXNpb24gb2YgdGhlIGNvbW1vbiBjb2RlLgorICAgdC50IGlzIHRoZSByZXZpc2lvbiBvZiB0aGUgdHR5IHJlbGF0ZWQgY29kZS4KKyAgIG4ubiBpcyB0aGUgcmV2aXNpb24gb2YgdGhlIG5ldHdvcmsgcmVsYXRlZCBjb2RlLgorICAgcC5wIGlzIHRoZSByZXZpc2lvbiBvZiB0aGUgcHBwIHJlbGF0ZWQgY29kZS4KKyAgIGEuYSBpcyB0aGUgcmV2aXNpb24gb2YgdGhlIGF1ZGlvIHJlbGF0ZWQgY29kZS4KKyAgIHYudiBpcyB0aGUgcmV2aXNpb24gb2YgdGhlIFYuMTEwIHJlbGF0ZWQgY29kZS4KKworICBDaGFuZ2VzIGluIHRoaXMgZG9jdW1lbnQgYXJlIG1hcmtlZCB3aXRoICcqKipDSEFOR0V4JyB3aGVyZSB4IHJlcHJlc2VudGluZworICB0aGUgdmVyc2lvbiBudW1iZXIuIElmIHRoYXQgbnVtYmVyIHN0YXJ0cyB3aXRoIDAsIGl0IHJlZmVycyB0byB0aGUgb2xkLAorICBzZXBhcmF0ZWx5IGRpc3RyaWJ1dGVkIHBhY2thZ2UuIElmIGl0IHN0YXJ0cyB3aXRoIG9uZSBvZiB0aGUgbGV0dGVycworICBhYm92ZSwgaXQgcmVmZXJzIHRvIHRoZSByZXZpc2lvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUuIAorICAqKipDSEFOR0VJeCByZWZlcnMgdG8gdGhlIHJldmlzaW9uIG51bWJlciBvZiB0aGUgaXNkbmlmLmggIAorCisxLiBEZXNjcmlwdGlvbiBvZiB0aGUgZmllbGRzIG9mIGlzZG5faWY6CisKKyAgaW50IGNoYW5uZWxzOworCisgICAgVGhpcyBmaWVsZCBoYXMgdG8gYmUgc2V0IGJ5IHRoZSBITC1kcml2ZXIgdG8gdGhlIG51bWJlciBvZiBjaGFubmVscworICAgIHN1cHBvcnRlZCBwcmlvciB0byBjYWxsaW5nIHJlZ2lzdGVyX2lzZG4oKS4gVXBvbiByZXR1cm4gb2YgdGhlIGNhbGwsCisgICAgdGhlIExMIHB1dHMgYW4gaWQgdGhlcmUsIHdoaWNoIGhhcyB0byBiZSB1c2VkIGJ5IHRoZSBITC1kcml2ZXIgd2hlbgorICAgIGludm9raW5nIHRoZSBvdGhlciBjYWxsYmFja3MuCisKKyAgaW50IG1heGJ1ZnNpemU7CisKKyAgICAqKipDSEFOR0UwLjY6IE5ldyBzaW5jZSB0aGlzIHZlcnNpb24uCisKKyAgICBBbHNvIHRvIGJlIHByZXNldCBieSB0aGUgSEwtZHJpdmVyLiBXaXRoIHRoaXMgdmFsdWUgdGhlIEhMLWRyaXZlcgorICAgIHRlbGxzIHRoZSBMTCB0aGUgbWF4aW11bSBzaXplIG9mIGEgZGF0YS1wYWNrZXQgaXQgd2lsbCBhY2NlcHQuIAorCisgIHVuc2lnbmVkIGxvbmcgZmVhdHVyZXM7CisKKyAgICBUbyBiZSBwcmVzZXQgYnkgdGhlIEhMLWRyaXZlci4gVXNpbmcgdGhpcyBmaWVsZCwgdGhlIEhMLWRyaXZlcgorICAgIGFubm91bmNlcyB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkLiBBdCB0aGUgbW9tZW50IHRoaXMgaXMgbGltaXRlZCB0bworICAgIHJlcG9ydCB0aGUgc3VwcG9ydGVkIGxheWVyMiBhbmQgbGF5ZXIzLXByb3RvY29scy4gRm9yIHNldHRpbmcgdGhpcworICAgIGZpZWxkIHRoZSBjb25zdGFudHMgSVNETl9GRUFUVVJFLi4uLCBkZWNsYXJlZCBpbiBpc2RuaWYuaCBoYXZlIHRvIGJlCisgICAgdXNlZC4KKworICAgICoqKkNIQU5HRTAuNy4xOiBUaGUgbGluZSB0eXBlICgxVFI2LCBFRFNTMSkgaGFzIHRvIGJlIHNldC4KKworICB1bnNpZ25lZCBzaG9ydCBobF9oZHJsZW47CisKKyAgICAqKipDSEFOR0UwLjcuNDogTmV3IGZpZWxkLgorCisgICAgVG8gYmUgcHJlc2V0IGJ5IHRoZSBITC1kcml2ZXIsIGlmIGl0IHN1cHBvcnRzIHNrX2J1ZmYncy4gVGhlIGRyaXZlcgorICAgIHNob3VsZCBwdXQgaGVyZSB0aGUgYW1vdW50IG9mIGFkZGl0aW9uYWwgc3BhY2UgbmVlZGVkIGluIHNrX2J1ZmYncyBmb3IKKyAgICBpdHMgaW50ZXJuYWwgcHVycG9zZXMuIERyaXZlcnMgbm90IHN1cHBvcnRpbmcgc2tfYnVmZidzIHNob3VsZCAKKyAgICBpbml0aWFsaXplIHRoaXMgZmllbGQgdG8gMC4KKworICB2b2lkICgqcmN2Y2FsbGJfc2tiKShpbnQsIGludCwgc3RydWN0IHNrX2J1ZmYgKikKKworICAgICoqKkNIQU5HRTAuNy40OiBOZXcgZmllbGQuCisKKyAgICBUaGlzIGZpZWxkIHdpbGwgYmUgc2V0IGJ5IExMLiBUaGUgSEwtZHJpdmVyIGRlbGl2ZXJzIHJlY2VpdmVkIGRhdGEtCisgICAgcGFja2V0cyBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFVwb24gY2FsbGluZywgdGhlIEhMLWRyaXZlciBtdXN0CisgICAgYWxyZWFkeSBoYXZlIGl0cyBwcml2YXRlIGRhdGEgcHVsbGVkIG9mZiB0aGUgaGVhZCBvZiB0aGUgc2tfYnVmZi4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGludCAgICAgICAgICAgICAgZHJpdmVyLUlkCisgICAgICBpbnQgICAgICAgICAgICAgIENoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHN0cnVjdCBza19idWZmICogUG9pbnRlciB0byBza19idWZmLCBjb250YWluaW5nIHJlY2VpdmVkIGRhdGEuCisKKyAgaW50ICgqc3RhdGNhbGxiKShpc2RuX2N0cmwqKTsKKworICAgIFRoaXMgZmllbGQgd2lsbCBiZSBzZXQgYnkgTEwuIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZCBieSB0aGUKKyAgICBITC1kcml2ZXIgZm9yIHNpZ25hbGluZyBzdGF0dXMtY2hhbmdlcyBvciBvdGhlciBldmVudHMgdG8gdGhlIExMLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgaXNkbl9jdHJsKgorCisgICAgICBUaGUgc3RydWN0IGlzZG5fY3RybCBhbHNvIGRlZmluZWQgaW4gaXNkbl9pZi4gVGhlIGV4YWN0IG1lYW5pbmdzIG9mIGl0cworICAgICAgZmllbGRzIGFyZSBkZXNjcmliZWQgdG9nZXRoZXIgd2l0aCB0aGUgZGVzY3JpcHRpb25zIG9mIHRoZSBwb3NzaWJsZQorICAgICAgZXZlbnRzLiBIZXJlIGlzIG9ubHkgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgZmllbGRzOgorCisgICAgICAgIGRyaXZlciAgPSBkcml2ZXIgSWQuCisgICAgICAgIGNvbW1hbmQgPSBldmVudC10eXBlLiAob25lIG9mIHRoZSBjb25zdGFudHMgSVNETl9TVEFUXy4uLikKKyAgICAgICAgYXJnICAgICA9IGRlcGVuZHMgb24gZXZlbnQtdHlwZS4KKyAgICAgICAgbnVtICAgICA9IGRlcGVuZHMgb24gZXZlbnQtdHlwZS4KKworICAgIFJldHVybnZhbHVlOgorICAgICAgMCBvbiBzdWNjZXNzLCBlbHNlIC0xCisKKyAgaW50ICgqY29tbWFuZCkoaXNkbl9jdHJsKik7CisKKyAgICBUaGlzIGZpZWxkIGhhcyB0byBiZSBwcmVzZXQgYnkgdGhlIEhMLWRyaXZlci4gSXQgcG9pbnRzIHRvIGEgZnVuY3Rpb24sCisgICAgdG8gYmUgY2FsbGVkIGJ5IExMIHRvIHBlcmZvcm0gZnVuY3Rpb25zIGxpa2UgZGlhbGluZywgQi1jaGFubmVsCisgICAgc2V0dXAsIGV0Yy4gVGhlIGV4YWN0IG1lYW5pbmcgb2YgdGhlIHBhcmFtZXRlcnMgaXMgZGVzY3JpYmVkIHdpdGggdGhlCisgICAgZGVzY3JpcHRpb25zIG9mIHRoZSBwb3NzaWJsZSBjb21tYW5kcy4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGlzZG5fY3RybCoKKyAgICAgICAgZHJpdmVyICA9IGRyaXZlci1JZAorICAgICAgICBjb21tYW5kID0gY29tbWFuZCB0byBwZXJmb3JtLiAob25lIG9mIHRoZSBjb25zdGFudHMgSVNETl9DTURfLi4uKQorICAgICAgICBhcmcgICAgID0gZGVwZW5kcyBvbiBjb21tYW5kLgorICAgICAgICBudW0gICAgID0gZGVwZW5kcyBvbiBjb21tYW5kLgorICAgIAorICAgIFJldHVybnZhbHVlOgorICAgICAgPj0wIG9uIHN1Y2Nlc3MsIGVsc2UgZXJyb3ItY29kZSAoLUVOT0RFViBldGMuKQorCisgIGludCAoKndyaXRlYnVmX3NrYikoaW50LCBpbnQsIGludCwgc3RydWN0IHNrX2J1ZmYgKikKKworICAgICoqKkNIQU5HRTAuNy40OiBOZXcgZmllbGQuCisgICAgKioqQ0hBTkdFSS4xLjIxOiBOZXcgZmllbGQuCisKKyAgICBUaGlzIGZpZWxkIGhhcyB0byBiZSBwcmVzZXQgYnkgdGhlIEhMLWRyaXZlci4gVGhlIGdpdmVuIGZ1bmN0aW9uIHdpbGwKKyAgICBiZSBjYWxsZWQgYnkgdGhlIExMIGZvciBkZWxpdmVyaW5nIGRhdGEgdG8gYmUgc2VuZCB2aWEgQi1DaGFubmVsLgorCisgCisgICAgUGFyYW1ldGVyOgorICAgICAgaW50ICAgICAgICAgICAgICBkcml2ZXItSWQgKioqQ0hBTkdFMC43LjQ6IE5ldyBwYXJhbWV0ZXIuCisgICAgICBpbnQgICAgICAgICAgICAgIGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIEhMLWRyaXZlci4gKHN0YXJ0cyB3aXRoIDApCisgICAgICBpbnQJICAgICAgIGFjayAqKipDaGFuZ2VJMS4yMTogTmV3IHBhcmFtZXRlcgorCQkgICAgICAgSWYgdGhpcyBpcyAhMCwgdGhlIGRyaXZlciBoYXMgdG8gc2lnbmFsIHRoZSBkZWxpdmVyeQorCQkgICAgICAgYnkgc2VuZGluZyBhbiBJU0ROX1NUQVRfQlNFTlQuIElmIHRoaXMgaXMgMCwgdGhlIGRyaXZlcgorCQkgICAgICAgTVVTVCBOT1Qgc2VuZCBhbiBJU0ROX1NUQVRfQlNFTlQuCisgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIFBvaW50ZXIgdG8gc2tfYnVmZiBjb250YWluaW5nIGRhdGEgdG8gYmUgc2VuZCB2aWEKKyAgICAgICAgICAgICAgICAgICAgICAgQi1jaGFubmVsLgorCisgICAgUmV0dXJudmFsdWU6CisgICAgICBMZW5ndGggb2YgZGF0YSBhY2NlcHRlZCBvbiBzdWNjZXNzLCBlbHNlIGVycm9yLWNvZGUgKC1FSU5WQUwgb24KKyAgICAgIG92ZXJzaXplZCBwYWNrZXRzIGV0Yy4pCisKKyAgaW50ICgqd3JpdGVjbWQpKHVfY2hhciosIGludCwgaW50LCBpbnQsIGludCk7CisKKyAgICBUaGlzIGZpZWxkIGhhcyB0byBiZSBwcmVzZXQgYnkgdGhlIEhMLWRyaXZlci4gVGhlIGdpdmVuIGZ1bmN0aW9uIHdpbGwgYmUKKyAgICBjYWxsZWQgdG8gcGVyZm9ybSB3cml0ZS1yZXF1ZXN0cyBvbiAvZGV2L2lzZG5jdHJsIChpLmUuIHNlbmRpbmcgY29tbWFuZHMKKyAgICB0byB0aGUgY2FyZCkgVGhlIGRhdGEtZm9ybWF0IGlzIGhhcmR3YXJlLXNwZWNpZmljLiBUaGlzIGZ1bmN0aW9uIGlzCisgICAgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LiBJdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBub3JtYWwgb3BlcmF0aW9uCisgICAgYW5kIG5ldmVyIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSB0dHktZW11bGF0aW9uLSBvciBuZXR3b3JrLWNvZGUuIElmCisgICAgdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgZHJpdmVyIGhhcyB0byBzZXQgTlVMTCBoZXJlLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgdV9jaGFyKiBwb2ludGVyIHRvIGRhdGEuCisgICAgICBpbnQgICAgIGxlbmd0aCBvZiBkYXRhLgorICAgICAgaW50ICAgICBmbGFnOiAwID0gY2FsbCBmcm9tIHdpdGhpbiBrZXJuZWwtc3BhY2UuIChITC1kcml2ZXIgbXVzdCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSwgbWF5IE5PVCB1c2Ugc2NoZWR1bGUoKSkKKyAgICAgICAgICAgICAgICAgICAgMSA9IGNhbGwgZnJvbSB1c2VyLXNwYWNlLiAoSEwtZHJpdmVyIG11c3QgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHlfZnJvbWZzLCB1c2Ugb2Ygc2NoZWR1bGUoKSBhbGxvd2VkKQorICAgICAgaW50ICAgICBkcml2ZXItSWQuCisgICAgICBpbnQgICAgIGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIEhMLWRyaXZlci4gKHN0YXJ0cyB3aXRoIDApCisKKyoqKkNIQU5HRUkxLjE0OiBUaGUgZHJpdmVyLUlkIGFuZCBjaGFubmVsLW51bWJlciBhcmUgbmV3IHNpbmNlIHRoaXMgcmV2aXNpb24uCisKKyAgICBSZXR1cm52YWx1ZToKKyAgICAgIExlbmd0aCBvZiBkYXRhIGFjY2VwdGVkIG9uIHN1Y2Nlc3MsIGVsc2UgZXJyb3ItY29kZSAoLUVJTlZBTCBldGMuKQorCisgIGludCAoKnJlYWRzdGF0KSh1X2NoYXIqLCBpbnQsIGludCwgaW50LCBpbnQpOworCisgICAgVGhpcyBmaWVsZCBoYXMgdG8gYmUgcHJlc2V0IGJ5IHRoZSBITC1kcml2ZXIuIFRoZSBnaXZlbiBmdW5jdGlvbiB3aWxsIGJlCisgICAgY2FsbGVkIHRvIHBlcmZvcm0gcmVhZC1yZXF1ZXN0cyBvbiAvZGV2L2lzZG5jdHJsIChpLmUuIHJlYWRpbmcgcmVwbGllcworICAgIGZyb20gdGhlIGNhcmQpIFRoZSBkYXRhLWZvcm1hdCBpcyBoYXJkd2FyZS1zcGVjaWZpYy4gVGhpcyBmdW5jdGlvbiBpcworICAgIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4gSXQgaXMgbm90IG5lY2Vzc2FyeSBmb3Igbm9ybWFsIG9wZXJhdGlvbgorICAgIGFuZCBuZXZlciB3aWxsIGJlIGNhbGxlZCBieSB0aGUgdHR5LWVtdWxhdGlvbi0gb3IgbmV0d29yay1jb2RlLiBJZgorICAgIHRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCwgdGhlIGRyaXZlciBoYXMgdG8gc2V0IE5VTEwgaGVyZS4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIHVfY2hhciogcG9pbnRlciB0byBkYXRhLgorICAgICAgaW50ICAgICBsZW5ndGggb2YgZGF0YS4KKyAgICAgIGludCAgICAgZmxhZzogMCA9IGNhbGwgZnJvbSB3aXRoaW4ga2VybmVsLXNwYWNlLiAoSEwtZHJpdmVyIG11c3QgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHksIG1heSBOT1QgdXNlIHNjaGVkdWxlKCkpCisgICAgICAgICAgICAgICAgICAgIDEgPSBjYWxsIGZyb20gdXNlci1zcGFjZS4gKEhMLWRyaXZlciBtdXN0IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5X2Zyb21mcywgdXNlIG9mIHNjaGVkdWxlKCkgYWxsb3dlZCkKKyAgICAgIGludCAgICAgZHJpdmVyLUlkLgorICAgICAgaW50ICAgICBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBITC1kcml2ZXIuIChzdGFydHMgd2l0aCAwKQorCisqKipDSEFOR0VJMS4xNDogVGhlIGRyaXZlci1JZCBhbmQgY2hhbm5lbC1udW1iZXIgYXJlIG5ldyBzaW5jZSB0aGlzIHJldmlzaW9uLgorCisgICAgUmV0dXJudmFsdWU6CisgICAgICBMZW5ndGggb2YgZGF0YSBvbiBzdWNjZXNzLCBlbHNlIGVycm9yLWNvZGUgKC1FSU5WQUwgZXRjLikKKworICBjaGFyIGlkWzIwXTsKKyAgICAgICAqKipDSEFOR0UwLjc6IE5ldyBzaW5jZSB0aGlzIHZlcnNpb24uCisKKyAgIFRoaXMgc3RyaW5nIGhhcyB0byBiZSBwcmVzZXQgYnkgdGhlIEhMLWRyaXZlci4gSXRzIHB1cnBvc2UgaXMgZm9yCisgICBpZGVudGlmaWNhdGlvbiBvZiB0aGUgZHJpdmVyIGJ5IHRoZSB1c2VyLiBFZy46IGl0IGlzIHNob3duIGluIHRoZQorICAgc3RhdHVzLWluZm8gb2YgL2Rldi9pc2RuaW5mby4gRnVydGhlcm1vcmUgaXQgaXMgdXNlZCBhcyBJZCBmb3IgYmluZGluZworICAgbmV0LWludGVyZmFjZXMgdG8gYSBzcGVjaWZpYyBjaGFubmVsLiBJZiBhIHN0cmluZyBvZiBsZW5ndGggemVybyBpcworICAgZ2l2ZW4sIHVwb24gcmV0dXJuLCBpc2RuNGxpbnV4IHdpbGwgcmVwbGFjZSBpdCBieSBhIGdlbmVyaWMgbmFtZS4gKGxpbmUwLAorICAgbGluZTEgZXRjLikgSXQgaXMgcmVjb21tZW5kZWQgdG8gbWFrZSB0aGlzIHN0cmluZyBjb25maWd1cmFibGUgZHVyaW5nCisgICBtb2R1bGUtbG9hZC10aW1lLiAoY29weSBhIGdsb2JhbCB2YXJpYWJsZSB0byB0aGlzIHN0cmluZy4pIEZvciBkb2luZyB0aGF0LAorICAgbW9kdWxlcyAxLjIuOCBvciBuZXdlciBhcmUgbmVjZXNzYXJ5LgorCisyLiBEZXNjcmlwdGlvbiBvZiB0aGUgY29tbWFuZHMsIGEgSEwtZHJpdmVyIGhhcyB0byBzdXBwb3J0OgorCisgICBBbGwgY29tbWFuZHMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gY29tbWFuZCgpIGRlc2NyaWJlZAorICAgYWJvdmUgZnJvbSB3aXRoaW4gdGhlIExMLiBUaGUgZmllbGQgY29tbWFuZCBvZiB0aGUgc3RydWN0LXBhcmFtZXRlciB3aWxsCisgICBjb250YWluIHRoZSBkZXNpcmVkIGNvbW1hbmQsIHRoZSBmaWVsZCBkcml2ZXIgaXMgYWx3YXlzIHNldCB0byB0aGUKKyAgIGFwcHJvcHJpYXRlIGRyaXZlci1JZC4KKworICAgVW50aWwgbm93LCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBkZWZpbmVkOgorCisqKipDSEFOR0VJMS4zNDogVGhlIHBhcmFtZXRlciAibnVtIiBoYXMgYmVlbiByZXBsYWNlZCBieSBhIHVuaW9uICJwYXJtIiBjb250YWluaW5nCisgICAgICAgICAgICAgICAgdGhlIG9sZCAibnVtIiBhbmQgYSBuZXcgc2V0dXBfdHlwZSBzdHJ1Y3QgdXNlZCBmb3IgSVNETl9DTURfRElBTAorICAgICAgICAgICAgICAgIGFuZCBJU0ROX1NUQVRfSUNBTEwgY2FsbGJhY2suCisKKyAgIElTRE5fQ01EX0lPQ1RMOgorCisgICAgIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgcGVyZm9ybWluZyBpb2N0bC1jYWxscyBmb3IgY29uZmlndXJpbmcKKyAgICAgaGFyZHdhcmUgb3Igc2ltaWxhciBwdXJwb3NlcyAoc2V0dGluZyBwb3J0LWFkZHJlc3NlcywgbG9hZGluZyBmaXJtd2FyZQorICAgICBldGMuKSBGb3IgdGhpcyBwdXJwb3NlLCBpbiB0aGUgTEwgYWxsIGlvY3RsLWNhbGxzIHdpdGggYW4gYXJndW1lbnQKKyAgICAgPj0gSUlPQ0RSVkNUTCAoMHgxMDApIHdpbGwgYmUgaGFuZGVkIHRyYW5zcGFyZW50bHkgdG8gdGhpcworICAgICBmdW5jdGlvbiBhZnRlciBzdWJ0cmFjdGluZyAweDEwMCBhbmQgcGxhY2luZyB0aGUgcmVzdWx0IGluIGFyZy4KKyAgICAgRXhhbXBsZToKKyAgICAgICBJZiBhIHVzZXJsZXZlbC1wcm9ncmFtIGNhbGxzIGlvY3RsKDB4MTAxLC4uLikgdGhlIGZ1bmN0aW9uIGdldHMKKyAgICAgICBjYWxsZWQgd2l0aCB0aGUgZmllbGQgY29tbWFuZCBzZXQgdG8gMS4KKworICAgICBQYXJhbWV0ZXI6CisgICAgICAgZHJpdmVyICAgPSBkcml2ZXItSWQuCisgICAgICAgY29tbWFuZCAgPSBJU0ROX0NNRF9JT0NUTAorICAgICAgIGFyZyAgICAgID0gT3JpZ2luYWwgaW9jdGwtY21kIC0gSUlPQ0RSVkNUTAorICAgICAgIHBhcm0ubnVtID0gZmlyc3QgYnl0ZXMgZmlsbGVkIHdpdGggKHVuc2lnbmVkIGxvbmcpYXJnCisgICAKKyAgICAgUmV0dXJudmFsdWU6CisgICAgICAgRGVwZW5kaW5nIG9uIGRyaXZlci4KKworICAKKyAgSVNETl9DTURfRElBTDoKKworICAgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHRlbGwgdGhlIEhMLWRyaXZlciBpdCBzaG91bGQgZGlhbCBhIGdpdmVuCisgICAgbnVtYmVyLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX0RJQUwKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgCisgICAgICBwYXJtLnNldHVwLnBob25lICA9IEFuIEFTQ0lJLVN0cmluZyBjb250YWluaW5nIHRoZSBudW1iZXIgdG8gZGlhbC4KKyAgICAgIHBhcm0uc2V0dXAuZWF6bXNuID0gQW4gQVNDSUktU3RpbmcgY29udGFpbmluZyB0aGUgb3duIEVBWiBvciBNU04uCisgICAgICBwYXJtLnNldHVwLnNpMSAgICA9IFRoZSBTZXJ2aWNlLUluZGljYXRvci4KKyAgICAgIHBhcm0uc2V0dXAuc2kyICAgID0gQWRkaXRpb25hbCBTZXJ2aWNlLUluZGljYXRvci4KKworICAgICAgICAgICAgICAgICAgICBJZiB0aGUgTGluZSBoYXMgYmVlbiBkZXNpZ25lZCBhcyBTUFYgKGEgc3BlY2lhbCBnZXJtYW4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSwgbWVhbmluZyBzZW1pLWxlYXNlZC1saW5lKSB0aGUgcGhvbmUgaGFzIHRvCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0IHdpdGggYW4gIlMiLgorICAgICAgKioqQ0hBTkdFMC42OiBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGUgRUFaIGhhcyBiZWVuIGdpdmVuIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBoaWdoYnl0ZSBvZiBhcmcuCisgICAgKioqQ0hBTkdFMC43LjE6IE5ldyBzaW5jZSB0aGlzIHZlcnNpb246IFNlcnZpY2VJbmRpY2F0b3IgYW5kIEFkZEluZm8uCisKKyAgSVNETl9DTURfQUNDRVBURDoKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gYWNjZXB0IGEgRC1DaGFubmVsLXNldHVwLgorICAgIChSZXNwb25zZSB0byBhbiBpbmNvbWluZyBjYWxsKQorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX0FDQ0VQVEQKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9DTURfQUNDRVBUQjoKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gcGVyZm9ybSBhIEItQ2hhbm5lbC1zZXR1cC4KKyAgICAoYWZ0ZXIgZXN0YWJsaXNoaW5nIEQtQ2hhbm5lbC1Db25uZWN0aW9uKQorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX0FDQ0VQVEIKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9DTURfSEFOR1VQOgorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byBoYW5ndXAgKEItQ2hhbm5lbCBpZgorICAgIGVzdGFibGlzaGVkIGZpcnN0LCB0aGVuIEQtQ2hhbm5lbCkuIFRoaXMgY29tbWFuZCBpcyBhbHNvIHVzZWQgZm9yCisgICAgYWN0aXZlbHkgcmVqZWN0aW5nIGFuIGluY29taW5nIGNhbGwuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfSEFOR1VQCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorCisgIElTRE5fQ01EX0NMUkVBWjoKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgbm90IHRvIHNpZ25hbCBpbmNvbWluZworICAgIGNhbGxzIHRvIHRoZSBMTC4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9DTFJFQVoKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9DTURfU0VURUFaOgorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byBzaWduYWwgaW5jb21pbmcgY2FsbHMgZm9yCisgICAgdGhlIGdpdmVuIEVBWnMvTVNOcyB0byB0aGUgTEwuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfU0VURUFaCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0ubnVtICAgID0gQVNDSUktU3RyaW5nLCBjb250YWluaW5nIHRoZSBkZXNpcmVkIEVBWidzL01TTidzCisgICAgICAgICAgICAgICAgICAgIChjb21tYS1zZXBhcmF0ZWQpLiBJZiBhbiBlbXB0eSBTdHJpbmcgaXMgZ2l2ZW4sIHRoZQorICAgICAgICAgICAgICAgICAgICBITC1kcml2ZXIgc2hvdWxkIHJlc3BvbmQgdG8gQUxMIGluY29taW5nIGNhbGxzLAorICAgICAgICAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBkZXN0aW5hdGlvbi1hZGRyZXNzLgorICAgICAgKioqQ0hBTkdFMC42OiBOZXcgc2luY2UgdGhpcyB2ZXJzaW9uIHRoZSAiZW1wdHktc3RyaW5nIi1mZWF0dXJlLgorCisgIElTRE5fQ01EX0dFVEVBWjogKGN1cnJlbnRseSB1bnVzZWQpCisKKyAgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIEhMLWRyaXZlciBpcyB0b2xkIHRvIHJlcG9ydCB0aGUgY3VycmVudCBzZXR0aW5nCisgICAgZ2l2ZW4gd2l0aCBJU0ROX0NNRF9TRVRFQVouCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfR0VURUFaCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0ubnVtICAgID0gQVNDSUktU3RyaW5nLCBjb250YWluaW5nIHRoZSBjdXJyZW50IEVBWidzL01TTidzCisKKyAgSVNETl9DTURfU0VUU0lMOiAoY3VycmVudGx5IHVudXNlZCkKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gc2lnbmFsIG9ubHkgaW5jb21pbmcKKyAgICBjYWxscyB3aXRoIHRoZSBnaXZlbiBTZXJ2aWNlLUluZGljYXRvcnMuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfU0VUU0lMCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0ubnVtICAgID0gQVNDSUktU3RyaW5nLCBjb250YWluaW5nIHRoZSBkZXNpcmVkIFNlcnZpY2UtSW5kaWNhdG9ycy4KKworICBJU0ROX0NNRF9HRVRTSUw6IChjdXJyZW50bHkgdW51c2VkKQorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byByZXR1cm4gdGhlIGN1cnJlbnQKKyAgICBTZXJ2aWNlLUluZGljYXRvcnMgaXQgd2lsbCByZXNwb25kIHRvLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX1NFVFNJTAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtLm51bSAgICA9IEFTQ0lJLVN0cmluZywgY29udGFpbmluZyB0aGUgY3VycmVudCBTZXJ2aWNlLUluZGljYXRvcnMuCisKKyAgSVNETl9DTURfU0VUTDI6CisKKyAgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIEhMLWRyaXZlciBpcyB0b2xkIHRvIHNlbGVjdCB0aGUgZ2l2ZW4gTGF5ZXItMi0KKyAgICBwcm90b2NvbC4gVGhpcyBjb21tYW5kIGlzIGlzc3VlZCBieSB0aGUgTEwgcHJpb3IgdG8gSVNETl9DTURfRElBTCBvcgorICAgIElTRE5fQ01EX0FDQ0VQVEQuCisKKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9TRVRMMgorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWwgb3InZWQgd2l0aCAocHJvdG9jb2wtSWQgPDwgOCkKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wtSWQgaXMgb25lIG9mIHRoZSBjb25zdGFudHMgSVNETl9QUk9UT19MMi4uLgorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9DTURfR0VUTDI6IChjdXJyZW50bHkgdW51c2VkKQorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byByZXR1cm4gdGhlIGN1cnJlbnQKKyAgICBzZXR0aW5nIG9mIHRoZSBMYXllci0yLXByb3RvY29sLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX0dFVEwyCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorICAgIFJldHVybnZhbHVlOgorICAgICAgY3VycmVudCBwcm90b2NvbC1JZCAob25lIG9mIHRoZSBjb25zdGFudHMgSVNETl9MMl9QUk9UTykKKworICBJU0ROX0NNRF9TRVRMMzoKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gc2VsZWN0IHRoZSBnaXZlbiBMYXllci0zLQorICAgIHByb3RvY29sLiBUaGlzIGNvbW1hbmQgaXMgaXNzdWVkIGJ5IHRoZSBMTCBwcmlvciB0byBJU0ROX0NNRF9ESUFMIG9yCisgICAgSVNETl9DTURfQUNDRVBURC4KKworCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX1NFVEwzCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbCBvcidlZCB3aXRoIChwcm90b2NvbC1JZCA8PCA4KQorICAgICAgICAgICAgICAgICAgICBwcm90b2NvbC1JZCBpcyBvbmUgb2YgdGhlIGNvbnN0YW50cyBJU0ROX1BST1RPX0wzLi4uCisgICAgICBwYXJtLmZheCAgICA9IFBvaW50ZXIgdG8gVDMwX3MgZmF4IHN0cnVjdC4gKGZheCB1c2FnZSBvbmx5KQorCisgIElTRE5fQ01EX0dFVEwyOiAoY3VycmVudGx5IHVudXNlZCkKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gcmV0dXJuIHRoZSBjdXJyZW50CisgICAgc2V0dGluZyBvZiB0aGUgTGF5ZXItMy1wcm90b2NvbC4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9HRVRMMworICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKyAgICBSZXR1cm52YWx1ZToKKyAgICAgIGN1cnJlbnQgcHJvdG9jb2wtSWQgKG9uZSBvZiB0aGUgY29uc3RhbnRzIElTRE5fTDNfUFJPVE8pCisKKyAgSVNETl9DTURfUFJPQ0VFRDogCisKKyAgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIEhMLWRyaXZlciBpcyB0b2xkIHRvIHByb2NlZWQgd2l0aCBhIGluY29taW5nIGNhbGwuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfUFJPQ0VFRAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBzZXR1cC5lYXptc249IGVtcHR5IHN0cmluZyBvciBzdHJpbmcgc2VuZCBhcyB1dXMxIGluIERTUzEgd2l0aCAKKyAgICAgICAgICAgICAgICAgICAgUFJPQ0VFRCBtZXNzYWdlCisKKyAgSVNETl9DTURfQUxFUlQ6IAorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byBhbGVydCBhIHByb2NlZWRpbmcgY2FsbC4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9BTEVSVAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBzZXR1cC5lYXptc249IGVtcHR5IHN0cmluZyBvciBzdHJpbmcgc2VuZCBhcyB1dXMxIGluIERTUzEgd2l0aCAKKyAgICAgICAgICAgICAgICAgICAgQUxFUlQgbWVzc2FnZQorCisgIElTRE5fQ01EX1JFRElSOiAKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gcmVkaXJlY3QgYSBjYWxsIGluIHByb2NlZWRpbmcKKyAgICBvciBhbGVydGluZyBzdGF0ZS4gIAorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX1JFRElSCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHNldHVwLmVhem1zbj0gZW1wdHkgc3RyaW5nIG9yIHN0cmluZyBzZW5kIGFzIHV1czEgaW4gRFNTMSBwcm90b2NvbAorICAgICAgc2V0dXAuc2NyZWVuPSBzY3JlZW5pbmcgaW5kaWNhdG9yCisgICAgICBzZXR1cC5waG9uZSA9IHJlZGlyZWN0ZWQgdG8gcGFydHkgbnVtYmVyCisKKyAgSVNETl9DTURfUFJPVF9JTzoKKworICAgIFdpdGggdGhpcyBjYWxsLCB0aGUgTEwtZHJpdmVyIGludm9rZXMgcHJvdG9jb2wgc3BlY2lmaWMgZmVhdHVyZXMgdGhyb3VnaAorICAgIHRoZSBMTC4KKyAgICBUaGUgY2FsbCBpcyBub3QgaW1wbGljaXRlbHkgYm91bmQgdG8gYSBjb25uZWN0aW9uLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfUFJPVF9JTworICAgICAgYXJnICAgICAgICAgPSBUaGUgbG93ZXIgOCBCaXRzIGRlZmluZSB0aGUgYWRkcmVzc2VkIHByb3RvY29sIGFzIGRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gSVNETl9QVFlQRS4uLiwgdGhlIHVwcGVyIGJpdHMgYXJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZQorICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdG9jb2wgc3BlY2lmaWMgQ01ELiAgCisgICAgICAKKyAgICAgIHBhcmEgICAgICAgID0gcHJvdG9jb2wgYW5kIGZ1bmN0aW9uIHNwZWNpZmljLiBTZWUgaXNkbmlmLmggZm9yIGRldGFpbC4KKworCisgIElTRE5fQ01EX0ZBWENNRDoKKworICAgIFdpdGggdGhpcyBjb21tYW5kIHRoZSBITC1kcml2ZXIgcmVjZWl2ZXMgYSBmYXggc3ViLWNvbW1hbmQuCisgICAgRm9yIGRldGFpbHMgcmVmZXIgdG8gSU5URVJGQUNFLmZheAorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX0ZBWENNRAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworCiszLiBEZXNjcmlwdGlvbiBvZiB0aGUgZXZlbnRzIHRvIGJlIHNpZ25hbGVkIGJ5IHRoZSBITC1kcml2ZXIgdG8gdGhlIExMLgorCisgIEFsbCBzdGF0dXMtY2hhbmdlcyBhcmUgc2lnbmFsZWQgdmlhIGNhbGxpbmcgdGhlIHByZXZpb3VzbHkgZGVzY3JpYmVkCisgIGZ1bmN0aW9uIHN0YXRjYWxsYigpLiBUaGUgZmllbGQgY29tbWFuZCBvZiB0aGUgc3RydWN0IGlzZG5fY21kIGhhcworICB0byBiZSBzZXQgYnkgdGhlIEhMLWRyaXZlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBTdGF0dXMtSWQgKGV2ZW50LW51bWJlcikuCisgIFRoZSBmaWVsZCBhcmcgaGFzIHRvIGJlIHNldCB0byB0aGUgY2hhbm5lbC1udW1iZXIgKGxvY2FsbHkgdG8gdGhlIGRyaXZlciwKKyAgc3RhcnRpbmcgd2l0aCAwKSB0byB3aGljaCB0aGlzIGV2ZW50IGFwcGxpZXMuIChFeGNlcHRpb246IFNUQVZBSUwtZXZlbnQpCisKKyAgVW50aWwgbm93LCB0aGUgZm9sbG93aW5nIFN0YXR1cy1JZHMgYXJlIGRlZmluZWQ6CisKKyAgSVNETl9TVEFUX0FWQUlMOgorCisgICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBITC1kcml2ZXIgc2lnbmFscyB0aGUgYXZhaWxhYmlsaXR5IG9mIG5ldyBkYXRhCisgICAgZm9yIHJlYWRzdGF0KCkuIFVzZWQgb25seSBmb3IgZGVidWdnaW5nLXB1cnBvc2VzLCBzZWUgZGVzY3JpcHRpb24KKyAgICBvZiByZWFkc3RhdCgpLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX1NUQVZBSUwKKyAgICAgIGFyZyAgICAgICAgID0gbGVuZ3RoIG9mIGF2YWlsYWJsZSBkYXRhLgorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9TVEFUX0lDQUxMOgorICBJU0ROX1NUQVRfSUNBTExXOgorCisgICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBITC1kcml2ZXIgc2lnbmFscyBhbiBpbmNvbWluZyBjYWxsIHRvIHRoZSBMTC4KKyAgICBJZiBJQ0FMTFcgaXMgc2lnbmFsbGVkIHRoZSBpbmNvbWluZyBjYWxsIGlzIGEgd2FpdGluZyBjYWxsIHdpdGhvdXQKKyAgICBhIGF2YWlsYWJsZSBCLWNoYW4uCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICAgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgICAgICAgPSBJU0ROX1NUQVRfSUNBTEwKKyAgICAgIGFyZyAgICAgICAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcmEuc2V0dXAucGhvbmUgID0gQ2FsbGVybnVtYmVyLgorICAgICAgcGFyYS5zZXR1cC5lYXptc24gPSBDYWxsZWROdW1iZXIuCisgICAgICBwYXJhLnNldHVwLnNpMSAgICA9IFNlcnZpY2UgSW5kaWNhdG9yLgorICAgICAgcGFyYS5zZXR1cC5zaTIgICAgPSBBZGRpdGlvbmFsIFNlcnZpY2UgSW5kaWNhdG9yLgorICAgICAgcGFyYS5zZXR1cC5wbGFuICAgPSBvY3RldCAzIGZyb20gQ2FsbGluZyBwYXJ0eSBudW1iZXIgSW5mb3JtYXRpb24gRWxlbWVudC4KKyAgICAgIHBhcmEuc2V0dXAuc2NyZWVuID0gb2N0ZXQgM2EgZnJvbSBDYWxsaW5nIHBhcnR5IG51bWJlciBJbmZvcm1hdGlvbiBFbGVtZW50LgorCisgICAgUmV0dXJuOgorICAgICAgMCAgICAgICAgICAgPSBObyBkZXZpY2UgbWF0Y2hpbmcgdGhpcyBjYWxsLgorICAgICAgMSAgICAgICAgICAgPSBBdCBsZWFzdCBvbmUgZGV2aWNlIG1hdGNoaW5nIHRoaXMgY2FsbCAoUklORyBvbiB0dHlJKS4KKyAgICAgICAgICAgICAgICAgICAgSEwtZHJpdmVyIG1heSBzZW5kIEFMRVJUSU5HIG9uIHRoZSBELWNoYW5uZWwgaW4gdGhpcyBjYXNlLgorICAgICAgMiAgICAgICAgICAgPSBDYWxsIHdpbGwgYmUgcmVqZWN0ZWQuCisgICAgICAzICAgICAgICAgICA9IEluY29taW5nIGNhbGxlZCBwYXJ0eSBudW1iZXIgaXMgY3VycmVudGx5IGluY29tcGxldGUuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgZGlnaXRzIGFyZSByZXF1aXJlZC4gCisgICAgICAgICAgICAgICAgICAgIFVzZWQgZm9yIHNpZ25hbGxpbmcgd2l0aCBQdFAgY29ubmVjdGlvbnMuCisgICAgICA0CSAgICAgICAgICA9IENhbGwgd2lsbCBiZSBoZWxkIGluIGEgcHJvY2VlZGluZyBzdGF0ZSAKKyAgICAgICAgICAgICAgICAgICAgKEhMIGRyaXZlciBzZW5kcyBQUk9DRUVESU5HKQorICAgICAgICAgICAgICAgICAgICBVc2VkIHdoZW4gYSB1c2VyIHNwYWNlIHByb2cgbmVlZHMgdGltZSB0byBpbnRlcnByZXQgYSBjYWxsCisJCSAgICBwYXJhLnNldHVwLmVhem1zbiBtYXkgYmUgZmlsbGVkIHdpdGggYW4gdXVzMSBtZXNzYWdlIG9mCisJCSAgICAzMCBvY3RldHMgbWF4aW11bS4gRW1wdHkgc3RyaW5nIGlmIG5vIHV1cy4gCisgICAgICA1ICAgICAgICAgICA9IENhbGwgd2lsbCBiZSBhY3RpdmVseSBkZWZsZWN0ZWQgdG8gYW5vdGhlciBwYXJ0eQorICAgICAgICAgICAgICAgICAgICBPbmx5IGF2YWlsYWJsZSBpbiBEU1MxL0VVUk8gcHJvdG9jb2wKKwkJICAgIHBhcmEuc2V0dXAucGhvbmUgbXVzdCBiZSBzZXQgdG8gZGVzdGluYXRpb24gcGFydHkgbnVtYmVyCisJCSAgICBwYXJhLnNldHVwLmVhem1zbiBtYXkgYmUgZmlsbGVkIHdpdGggYW4gdXVzMSBtZXNzYWdlIG9mCisJCSAgICAzMCBvY3RldHMgbWF4aW11bS4gRW1wdHkgc3RyaW5nIGlmIG5vIHV1cy4gCisgICAgICAtMSAgICAgICAgICA9IEFuIGVycm9yIGhhcHBlbmVkLiAoSW52YWxpZCBwYXJhbWV0ZXJzIGZvciBleGFtcGxlLikKKyAgVGhlIGtleXBhZCBzdXBwb3J0IG5vdyBpcyBpbmNsdWRlZCBpbiB0aGUgZGlhbCBjb21tYW5kLgkgICAgICAgIAorCisKKyAgSVNETl9TVEFUX1JVTjoKKworICAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIHNpZ25hbHMgYXZhaWxhYmlsaXR5IG9mIHRoZSBJU0ROLWNhcmQuCisgICAgKGFmdGVyIGluaXRpYWxpemluZywgbG9hZGluZyBmaXJtd2FyZSkKKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkCisgICAgICBjb21tYW5kICAgICA9IElTRE5fU1RBVF9SVU4KKyAgICAgIGFyZyAgICAgICAgID0gdW51c2VkLgorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9TVEFUX1NUT1A6CisKKyAgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBzaWduYWxzIHVuYXZhaWxhYmlsaXR5IG9mIHRoZSBJU0ROLWNhcmQuCisgICAgKGJlZm9yZSB1bmxvYWRpbmcsIHdoaWxlIHJlc2V0dGluZy9yZWNvbmZpZ3VyaW5nIHRoZSBjYXJkKQorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX1NUT1AKKyAgICAgIGFyZyAgICAgICAgID0gdW51c2VkLgorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9TVEFUX0RDT05OOgorCisgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBzaWduYWxzIHRoZSBzdWNjZXNzZnVsIGVzdGFibGlzaG1lbnQgb2YKKyAgIGEgRC1DaGFubmVsLWNvbm5lY3Rpb24uIChSZXNwb25zZSB0byBJU0ROX0NNRF9BQ0NFUFREIG9yIElTRE5fQ01EX0RJQUwpCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfRENPTk4KKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorCisgIElTRE5fU1RBVF9CQ09OTjoKKworICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBITC1kcml2ZXIgc2lnbmFscyB0aGUgc3VjY2Vzc2Z1bCBlc3RhYmxpc2htZW50IG9mCisgICBhIEItQ2hhbm5lbC1jb25uZWN0aW9uLiAoUmVzcG9uc2UgdG8gSVNETl9DTURfQUNDRVBUQiBvciBiZWNhdXNlIHRoZQorICAgcmVtb3RlLXN0YXRpb24gaGFzIGluaXRpYXRlZCBlc3RhYmxpc2htZW50KQorCisgICBUaGUgSEwgZHJpdmVyIHNob3VsZCBjYWxsIHRoaXMgd2hlbiB0aGUgbG9naWNhbCBsMi9sMyBwcm90b2NvbCAKKyAgIGNvbm5lY3Rpb24gb24gdG9wIG9mIHRoZSBwaHlzaWNhbCBCLWNoYW5uZWwgaXMgZXN0YWJsaXNoZWQuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfQkNPTk4KKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0ubnVtICAgID0gQVNDSUktU3RyaW5nLCBjb250YWluaW5nIHR5cGUgb2YgY29ubmVjdGlvbiAoZm9yIGFuYWxvZworCQkgICAgbW9kZW0gb25seSkuIFRoaXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgQ09OTkVDVCBtZXNzYWdlCisJCSAgICBlLmcuIDE0NDAwL1YuMzJiaXMKKworICBJU0ROX1NUQVRfREhVUDoKKworICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBITC1kcml2ZXIgc2lnbmFscyB0aGUgc2h1dGRvd24gb2YgYQorICAgRC1DaGFubmVsLWNvbm5lY3Rpb24uIFRoaXMgY291bGQgYmUgYSByZXNwb25zZSB0byBhIHByaW9yIElTRE5fQ01EX0hBTkdVUCwKKyAgIG9yIGNhdXNlZCBieSBhIHJlbW90ZS1oYW5ndXAgb3IgaWYgdGhlIHJlbW90ZS1zdGF0aW9uIGhhcyBhY3RpdmVseQorICAgcmVqZWN0ZWQgYSBjYWxsLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX0RIVVAKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorCisgIElTRE5fU1RBVF9CSFVQOgorCisgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBzaWduYWxzIHRoZSBzaHV0ZG93biBvZiBhCisgICBCLUNoYW5uZWwtY29ubmVjdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHJlc3BvbnNlIHRvIGEgcHJpb3IgSVNETl9DTURfSEFOR1VQLAorICAgb3IgY2F1c2VkIGJ5IGEgcmVtb3RlLWhhbmd1cC4KKworICAgVGhlIEhMIGRyaXZlciBzaG91bGQgY2FsbCB0aGlzIGFzIHNvb24gYXMgdGhlIGxvZ2ljYWwgbDIvbDMgcHJvdG9jb2wgCisgICBjb25uZWN0aW9uIG9uIHRvcCBvZiB0aGUgcGh5c2ljYWwgQi1jaGFubmVsIGlzIHJlbGVhc2VkLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX0JIVVAKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorCisgIElTRE5fU1RBVF9DSU5GOgorCisgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBkZWxpdmVycyBjaGFyZ2UtdW5pdCBpbmZvcm1hdGlvbiB0byB0aGUKKyAgIExMLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX0NJTkYKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0ubnVtICAgID0gQVNDSUkgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmdlLXVuaXRzIChkaWdpdHMgb25seSkuCisKKyAgSVNETl9TVEFUX0xPQUQ6IChjdXJyZW50bHkgdW51c2VkKQorCisgIElTRE5fU1RBVF9VTkxPQUQ6CisKKyAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIHNpZ25hbHMgdGhhdCBpdCB3aWxsIGJlIHVubG9hZGVkIG5vdy4gVGhpcworICAgdGVsbHMgdGhlIExMIHRvIHJlbGVhc2UgYWxsIGNvcnJlc3BvbmRpbmcgZGF0YS1zdHJ1Y3R1cmVzLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX1VOTE9BRAorICAgICAgYXJnICAgICAgICAgPSB1bnVzZWQuCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX1NUQVRfQlNFTlQ6CisKKyAgICBXaXRoIHRoaXMgY2FsbCB0aGUgSEwtZHJpdmVyIHNpZ25hbHMgdGhlIGRlbGl2ZXJ5IG9mIGEgZGF0YS1wYWNrZXQuCisgICAgVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IHRoZSBuZXR3b3JrLWludGVyZmFjZXMgb25seSwgdHR5LUVtdWxhdGlvbgorICAgIGRvZXMgbm90IG5lZWQgdGhpcyBjYWxsLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX0JTRU5UCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyLCBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtLmxlbmd0aCA9ICoqKkNIQU5HRUkuMS4yMTogTmV3IGZpZWxkLgorCQkgICAgdGhlIGRyaXZlciBoYXMgdG8gc2V0IHRoaXMgdG8gdGhlIG9yaWdpbmFsIGxlbmd0aAorCQkgICAgb2YgdGhlIHNrYiBhdCB0aGUgdGltZSBvZiByZWNlaXZpbmcgaXQgZnJvbSB0aGUgbGlua2xldmVsLgorCisgIElTRE5fU1RBVF9OT0RDSDoKKworICAgIFdpdGggdGhpcyBjYWxsLCB0aGUgZHJpdmVyIGhhcyB0byByZXNwb25kIHRvIGEgcHJpb3IgSVNETl9DTURfRElBTCwgaWYKKyAgICBubyBELUNoYW5uZWwgaXMgYXZhaWxhYmxlLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX05PRENICisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyLCBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX1NUQVRfQUREQ0g6IAorCisgICAgVGhpcyBjYWxsIGlzIGZvciBITC1kcml2ZXJzLCB3aGljaCBhcmUgdW5hYmxlIHRvIGNoZWNrIGNhcmQtdHlwZQorICAgIG9yIG51bWJlcnMgb2Ygc3VwcG9ydGVkIGNoYW5uZWxzIGJlZm9yZSB0aGV5IGhhdmUgbG9hZGVkIGFueSBmaXJtd2FyZQorICAgIHVzaW5nIGlvY3RsLiBUaG9zZSBITC1kcml2ZXIgc2ltcGx5IHNldCB0aGUgY2hhbm5lbC1wYXJhbWV0ZXIgdG8gYQorICAgIG1pbmltdW0gY2hhbm5lbC1udW1iZXIgd2hlbiByZWdpc3RlcmluZywgYW5kIGxhdGVyIGlmIHRoZXkga25vdworICAgIHRoZSByZWFsIGFtb3VudCwgcGVyZm9ybSB0aGlzIGNhbGwsIGFsbG9jYXRpbmcgYWRkaXRpb25hbCBjaGFubmVscy4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkCisgICAgICBjb21tYW5kICAgICA9IElTRE5fU1RBVF9BRERDSAorICAgICAgYXJnICAgICAgICAgPSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gYmUgYWRkZWQuCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX1NUQVRfQ0FVU0U6CisKKyAgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBkZWxpdmVycyBDQVVTRS1tZXNzYWdlcyB0byB0aGUgTEwuCisgICAgQ3VycmVudGx5IHRoZSBMTCBkb2VzIG5vdCB1c2UgdGhpcyBtZXNzYWdlcy4gVGhlaXIgY29udGVudHMgaXMgc2ltcGx5CisgICAgbG9nZ2VkIHZpYSBrZXJuZWwtbWVzc2FnZXMuIFRoZXJlZm9yZSwgY3VycmVudGx5IHRoZSBmb3JtYXQgb2YgdGhlCisgICAgbWVzc2FnZXMgaXMgY29tcGxldGVseSBmcmVlLiBIb3dldmVyIHRoZXkgc2hvdWxkIGJlIHByaW50YWJsZS4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkCisgICAgICBjb21tYW5kICAgICA9IElTRE5fU1RBVF9OT0RDSAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybS5udW0gICAgPSBBU0NJSSBzdHJpbmcgY29udGFpbmluZyBDQVVTRS1tZXNzYWdlLgorCisgIElTRE5fU1RBVF9ESVNQTEFZOgorCisgICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBITC1kcml2ZXIgZGVsaXZlcnMgRElTUExBWS1tZXNzYWdlcyB0byB0aGUgTEwuCisgICAgQ3VycmVudGx5IHRoZSBMTCBkb2VzIG5vdCB1c2UgdGhpcyBtZXNzYWdlcy4gCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfRElTUExBWQorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFyYS5kaXNwbGF5PSBzdHJpbmcgY29udGFpbmluZyBESVNQTEFZLW1lc3NhZ2UuCisKKyAgSVNETl9TVEFUX1BST1Q6CisKKyAgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBkZWxpdmVycyBwcm90b2NvbCBzcGVjaWZpYyBpbmZvcyB0byB0aGUgTEwuCisgICAgVGhlIGNhbGwgaXMgbm90IGltcGxpY2l0ZWx5IGJvdW5kIHRvIGEgY29ubmVjdGlvbi4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkCisgICAgICBjb21tYW5kICAgICA9IElTRE5fU1RBVF9QUk9UCisgICAgICBhcmcgICAgICAgICA9IFRoZSBsb3dlciA4IEJpdHMgZGVmaW5lIHRoZSBhZGRyZXNzZWQgcHJvdG9jb2wgYXMgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICBpbiBJU0ROX1BUWVBFLi4uLCB0aGUgdXBwZXIgYml0cyBhcmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcm90b2NvbCBzcGVjaWZpYyBTVEFULiAgCisgICAgICAKKyAgICAgIHBhcmEgICAgICAgID0gcHJvdG9jb2wgYW5kIGZ1bmN0aW9uIHNwZWNpZmljLiBTZWUgaXNkbmlmLmggZm9yIGRldGFpbC4KKworICBJU0ROX1NUQVRfRElTQ0g6CisKKyAgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBzaWduYWxzIHRoZSBMTCB0byBkaXNhYmxlIG9yIGVuYWJsZSB0aGUKKyAgICB1c2Ugb2Ygc3VwcGxpZWQgY2hhbm5lbCBhbmQgZHJpdmVyLgorICAgIFRoZSBjYWxsIG1heSBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgYXZhaWxhYmxlIG51bWJlciBvZiBCLWNoYW5uZWxzIGFmdGVyCisgICAgbG9hZGluZyB0aGUgZHJpdmVyLiBUaGUgTEwgaGFzIHRvIGlnbm9yZSBhIGRpc2FibGVkIGNoYW5uZWwgd2hlbiBzZWFyY2hpbmcKKyAgICBmb3IgZnJlZSBjaGFubmVscy4gVGhlIEhMIGRyaXZlciBpdHNlbGYgbmV2ZXIgZGVsaXZlcnMgU1RBVCBjYWxsYmFja3MgZm9yCisgICAgZGlzYWJsZWQgY2hhbm5lbHMuIAkgICAgCisgICAgVGhlIExMIHJldHVybnMgYSBub256ZXJvIGNvZGUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwgb3IgdGhlCisgICAgc2VsZWN0ZWQgY2hhbm5lbCBpcyBhY3R1YWxseSByZWdhcmRlZCBhcyBidXN5LgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX0RJU0NICisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyLCBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtLm51bVswXSA9IDAgaWYgY2hhbm5lbCBzaGFsbCBiZSBkaXNhYmxlZCwgZWxzZSBlbmFibGVkLgorCisgIElTRE5fU1RBVF9MMUVSUjoKKworICAgICoqKkNIQU5HRUkxLjIxIG5ldyBzdGF0dXMgbWVzc2FnZS4KKyAgICBBIHNpZ25hbCBjYW4gYmUgc2VudCB0byB0aGUgbGlua2xldmVsIGlmIGFuIExheWVyMS1lcnJvciByZXN1bHRzIGluCisgICAgcGFja2V0LWxvc3Mgb24gcmVjZWl2ZSBvciBzZW5kLiBUaGUgZmllbGQgZXJyY29kZSBvZiB0aGUgY21kLnBhcm0KKyAgICB1bmlvbiBkZXNjcmliZXMgdGhlIGVycm9yIG1vcmUgcHJlY2lzZWx5LgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX0wxRVJSCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyLCBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtLmVycmNvZGU9IElTRE5fU1RBVF9MMUVSUl9TRU5EOiAgICAgUGFja2V0IGxvc3Qgd2hpbGUgc2VuZGluZy4KKwkJICAgIElTRE5fU1RBVF9MMUVSUl9SRUNWOiAgICAgUGFja2V0IGxvc3Qgd2hpbGUgcmVjZWl2aW5nLgorICBJU0ROX1NUQVRfRkFYSU5EOgorCisgICAgV2l0aCB0aGlzIGNhbGwgdGhlIEhMLWRyaXZlciBzaWduYWxzIGEgZmF4IHN1Yi1jb21tYW5kIHRvIHRoZSBMTC4KKyAgICBGb3IgZGV0YWlscyByZWZlciB0byBJTlRFUkZBQ0UuZmF4CisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX0ZBWElORAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuZmF4IGIvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5mYXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U1NzMxMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuZmF4CkBAIC0wLDAgKzEsMTYzIEBACiskSWQ6IElOVEVSRkFDRS5mYXgsdiAxLjIgMjAwMC8wOC8wNiAwOToyMjo1MCBhcm1pbiBFeHAgJAorCisKK0Rlc2NyaXB0aW9uIG9mIHRoZSBmYXgtc3ViaW50ZXJmYWNlIGJldHdlZW4gbGlua2xldmVsIGFuZCBoYXJkd2FyZWxldmVsIG9mIAorICBpc2RuNGxpbnV4LiAKKworICBUaGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGxpbmtsZXZlbCAoTEwpIGFuZCBoYXJkd2FyZWxldmVsIChITCkgZm9yIGZheAorICBpcyBiYXNlZCBvbiB0aGUgc3RydWN0IFQzMF9zIChkZWZpbmVkIGluIGlzZG5pZi5oKS4KKyAgVGhpcyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGluIHRoZSBMTC4gIAorICBJbiBvcmRlciB0byB1c2UgZmF4LCB0aGUgTEwgcHJvdmlkZXMgdGhlIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3Qgd2l0aCB0aGUgCisgIGNvbW1hbmQgSVNETl9DTURfU0VUTDMgKHBhcm0uZmF4KS4gVGhpcyBwb2ludGVyIGV4cGlyZXMgaW4gY2FzZSBvZiBoYW5ndXAgCisgIGFuZCB3aGVuIGEgbmV3IGNoYW5uZWwgdG8gYSBuZXcgY29ubmVjdGlvbiBpcyBhc3NpZ25lZC4gCisKKworRGF0YSBoYW5kbGluZzoKKyAgSW4gc2VuZC1tb2RlIHRoZSBITC1kcml2ZXIgaGFzIHRvIGhhbmRsZSB0aGUgPERMRT4gY29kZXMgYW5kIHRoZSBiaXQtb3JkZXIgCisgIGNvbnZlcnNpb24gYnkgaXRzZWxmLiAKKyAgSW4gcmVjZWl2ZS1tb2RlIHRoZSBMTC1kcml2ZXIgdGFrZXMgY2FyZSBvZiB0aGUgYml0LW9yZGVyIGNvbnZlcnNpb24KKyAgKHNwZWNpZmllZCBieSArRkJPUikKKworU3RydWN0dXJlIFQzMF9zIGRlc2NyaXB0aW9uOgorCisgIFRoaXMgc3RydWN0dXJlIHN0b3JlcyB0aGUgdmFsdWVzIChzZXQgYnkgQVQtY29tbWFuZHMpLCB0aGUgcmVtb3RlLQorICBjYXBhYmlsaXR5LXZhbHVlcyBhbmQgdGhlIGNvbW1hbmQtY29kZXMgYmV0d2VlbiBMTCBhbmQgSEwuCisKKyAgSWYgdGhlIEhMLWRyaXZlciByZWNlaXZlcyBJU0ROX0NNRF9GQVhDTUQsIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24KKyAgaXMgaW4gdGhpcyBzdHJ1Y3Qgc2V0IGJ5IHRoZSBMTC4KKyAgVG8gc2lnbmFsIGluZm9ybWF0aW9uIHRvIHRoZSBMTCwgdGhlIEhMLWRyaXZlciBoYXMgdG8gc2V0IHRoZSAKKyAgdGhlIHBhcmFtZXRlcnMgYW5kIHVzZSBJU0ROX1NUQVRfRkFYSU5ELgorICAoUGxlYXNlIHJlZmVyIHRvIElOVEVSRkFDRSkKKworU3RydWN0dXJlIFQzMF9zOgorCisgIEFsbCBtZW1iZXJzIGFyZSA4LWJpdCB1bnNpZ25lZCAoX191OCkKKworICAtICByZXNvbHV0aW9uICAgICAKKyAgLSAgcmF0ZQorICAtICB3aWR0aAorICAtICBsZW5ndGgKKyAgLSAgY29tcHJlc3Npb24KKyAgLSAgZWNtCisgIC0gIGJpbmFyeQorICAtICBzY2FudGltZQorICAtICBpZFtdCisgIExvY2FsIGZheG1hY2hpbmUncyBwYXJhbWV0ZXJzLCBzZXQgYnkgK0ZESVMsICtGRENTLCArRkxJRCwgLi4uCisKKyAgLSAgcl9yZXNvbHV0aW9uCisgIC0gIHJfcmF0ZQorICAtICByX3dpZHRoCisgIC0gIHJfbGVuZ3RoCisgIC0gIHJfY29tcHJlc3Npb24KKyAgLSAgcl9lY20KKyAgLSAgcl9iaW5hcnkKKyAgLSAgcl9zY2FudGltZQorICAtICByX2lkW10KKyAgUmVtb3RlIGZheG1hY2hpbmUncyBwYXJhbWV0ZXJzLiBUbyBiZSBzZXQgYnkgSEwtZHJpdmVyLgorCisgIC0gIHBoYXNlICAgICAgCisgIERlZmluZXMgdGhlIGFjdHVhbCBzdGF0ZSBvZiBmYXggY29ubmVjdGlvbi4gU2V0IGJ5IEhMIG9yIExMCisgIGRlcGVuZGluZyBvbiBwcm9ncmVzcyBhbmQgdHlwZSBvZiBjb25uZWN0aW9uLgorICBJZiB0aGUgcGhhc2UgY2hhbmdlcyBiZWNhdXNlIG9mIGFuIEFUIGNvbW1hbmQsIHRoZSBMTCBkcml2ZXIKKyAgY2hhbmdlcyB0aGlzIHZhbHVlLiBPdGhlcndpc2UgdGhlIEhMLWRyaXZlciB0YWtlcyBjYXJlIG9mIGl0LCBidXQKKyAgb25seSBuZWNlc3Nhcnkgb24gY2FsbCBlc3RhYmxpc2htZW50IChmcm9tIElETEUgdG8gUEhBU0VfQSkuCisgIChvbmUgb2YgdGhlIGNvbnN0YW50cyBJU0ROX0ZBWF9QSEFTRV9bSURMRSxBLEIsQyxELEVdKQorCisgIC0gIGRpcmVjdGlvbgorICBEZWZpbmVzIG91dGdvaW5nL3NlbmQgb3IgaW5jb21pbmcvcmVjZWl2ZSBjb25uZWN0aW9uLgorICAoSVNETl9UVFlfRkFYX0NPTk5fW0lOLE9VVF0pCisKKyAgLSAgY29kZQorICBDb21tYW5kcyBmcm9tIExMIHRvIEhMOyBwb3NzaWJsZSBjb25zdGFudHMgOiAKKyAgICAgIElTRE5fVFRZX0ZBWF9EUiAgICAgICAgc2lnbmFscyArRkRSIGNvbW1hbmQgdG8gSEwKKworICAgICAgSVNETl9UVFlfRkFYX0RUICAgICAgICBzaWduYWxzICtGRFQgY29tbWFuZCB0byBITCAKKworICAgICAgSVNETl9UVFlfRkFYX0VUICAgICAgICBzaWduYWxzICtGRVQgY29tbWFuZCB0byBITAorCisKKyAgT3RoZXIgdGhhbiB0aGF0IHRoZSAiY29kZSIgaXMgc2V0IHdpdGggdGhlIGhhbmd1cC1jb2RlIHZhbHVlIGF0CisgIHRoZSBlbmQgb2YgY29ubmVjdGlvbiBmb3IgdGhlICtGSE5HIG1lc3NhZ2UuCisgICAgICAgIAorICAtICByX2NvZGUgCisgIENvbW1hbmRzIGZyb20gSEwgdG8gTEw7IHBvc3NpYmxlIGNvbnN0YW50cyA6CisgICAgICBJU0ROX1RUWV9GQVhfQ0ZSICAgICAgIG91dHB1dCBvZiArRkNGUiBtZXNzYWdlLiAKKworICAgICAgSVNETl9UVFlfRkFYX1JJRCAgICAgICBvdXRwdXQgb2YgcmVtb3RlIElEIHNldCBpbiByX2lkW10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCtGQ1NJLytGVFNJIG9uIHNlbmQvcmVjZWl2ZSkKKworICAgICAgSVNETl9UVFlfRkFYX0RDUyAgICAgICBvdXRwdXQgb2YgK0ZEQ1MgYW5kIENPTk5FQ1QgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoaW5nIHRvIHBoYXNlIEMuCisKKyAgICAgIElTRE5fVFRZX0ZBWF9FVCAgICAgICAgc2lnbmFscyBlbmQgb2YgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoaW5nIHRvIHBoYXNlIEQuCisKKyAgICAgIElTRE5fVFRZX0ZBWF9GQ09OICAgICAgc2lnbmFscyB0aGUgZXN0YWJsaXNoZWQsIG91dGdvaW5nIGNvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGluZyB0byBwaGFzZSBCLgorCisgICAgICBJU0ROX1RUWV9GQVhfRkNPTl9JICAgIHNpZ25hbHMgdGhlIGVzdGFibGlzaGVkLCBpbmNvbWluZyBjb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hpbmcgdG8gcGhhc2UgQi4KKworICAgICAgSVNETl9UVFlfRkFYX0RJUyAgICAgICBvdXRwdXQgb2YgK0ZESVMgbWVzc2FnZSBhbmQgdmFsdWVzLgorCisgICAgICBJU0ROX1RUWV9GQVhfU0VOVCAgICAgIHNpZ25hbHMgdGhhdCBhbGwgZGF0YSBoYXMgYmVlbiBzZW50IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPERMRT48RVRYPiBpcyBhY2tub3dsZWRnZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9LIG1lc3NhZ2Ugd2lsbCBiZSBzZW50LgorCisgICAgICBJU0ROX1RUWV9GQVhfUFRTICAgICAgIHNpZ25hbHMgYSBtc2ctY29uZmlybWF0aW9uIChwYWdlIHNlbnQgc3VjY2Vzc2Z1bCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiBmZXQgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IG91dHB1dCBPSyBtZXNzYWdlIChtb3JlIHBhZ2VzIGZvbGxvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogc3dpdGNoaW5nIHRvIHBoYXNlIEIgKG5leHQgZG9jdW1lbnQpCisKKyAgICAgIElTRE5fVFRZX0ZBWF9UUkFJTl9PSyAgb3V0cHV0IG9mICtGRENTIGFuZCBPSyBtZXNzYWdlIChmb3IgcmVjZWl2ZSBtb2RlKS4KKworICAgICAgSVNETl9UVFlfRkFYX0VPUCAgICAgICBzaWduYWxzIGVuZCBvZiBkYXRhIGluIHJlY2VpdmUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoaW5nIHRvIHBoYXNlIEQuCisKKyAgICAgIElTRE5fVFRZX0ZBWF9ITkcgICAgICAgb3V0cHV0IG9mIHRoZSArRkhORyBhbmQgdmFsdWUgc2V0IGJ5IGNvZGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9LIG1lc3NhZ2UsIHN3aXRjaGluZyB0byBwaGFzZSBFLgorCisKKyAgLSAgYmFkbGluCisgIFZhbHVlIG9mICtGQkFETElOICAKKworICAtICBiYWRtdWwKKyAgVmFsdWUgb2YgK0ZCQURNVUwKKworICAtICBib3IKKyAgVmFsdWUgb2YgK0ZCT1IKKworICAtICBmZXQKKyAgVmFsdWUgb2YgK0ZFVCBjb21tYW5kIGluIHNlbmQtbW9kZS4KKyAgU2V0IGJ5IEhMIGluIHJlY2VpdmUtbW9kZSBmb3IgK0ZFVCBtZXNzYWdlLgorCisgIC0gIHBvbGxpZFtdICAKKyAgSUQtc3RyaW5nLCBzZXQgYnkgK0ZDSUcKKworICAtICBjcQorICBWYWx1ZSBvZiArRkNRCisKKyAgLSAgY3IKKyAgVmFsdWUgb2YgK0ZDUgorCisgIC0gIGN0Y3J0eQorICBWYWx1ZSBvZiArRkNUQ1JUWQorCisgIC0gIG1pbnNwCisgIFZhbHVlIG9mICtGTUlOU1AKKworICAtICBwaGN0bworICBWYWx1ZSBvZiArRlBIQ1RPCisKKyAgLSAgcmVsCisgIFZhbHVlIG9mICtGUkVMCisKKyAgLSAgbmJjCisgIFZhbHVlIG9mICtGTkJDICgwLDEpCisgICgrRk5CQyBpcyBub3QgYSBrbm93biBjbGFzcyAyIGZheCBjb21tYW5kLCBJIGFkZGVkIHRoaXMgdG8gY2hhbmdlIHRoZQorICAgYXV0b21hdGljICJiZXN0IGNhcGFiaWxpdGllcyIgY29ubmVjdGlvbiBpbiB0aGUgZWljb24gSEwtZHJpdmVyKQorCisgIAorQXJtaW4KK21hY0BtZWx3YXJlLmRlCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MTU5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FCkBAIC0wLDAgKzEsNTk5IEBACitSRUFETUUgZm9yIHRoZSBJU0ROLXN1YnN5c3RlbQorCisxLiBQcmVmYWNlCisKKyAgMS4xIEludHJvZHVjdGlvbgorCisgIFRoaXMgUkVBRE1FIGRlc2NyaWJlcyBob3cgdG8gc2V0IHVwIGFuZCBob3cgdG8gdXNlIHRoZSBkaWZmZXJlbnQgcGFydHMKKyAgb2YgdGhlIElTRE4tc3Vic3lzdGVtLgorCisgIEZvciB1c2luZyB0aGUgSVNETi1zdWJzeXN0ZW0sIHNvbWUgYWRkaXRpb25hbCB1c2VybGV2ZWwgcHJvZ3JhbXMgYXJlCisgIG5lY2Vzc2FyeS4gVGhvc2UgcHJvZ3JhbXMgYW5kIHNvbWUgY29udHJpYnV0ZWQgdXRpbGl0aWVzIGFyZSBhdmFpbGFibGUKKyAgYXQKKworICAgZnRwLmlzZG40bGludXguZGUKKworICAgL3B1Yi9pc2RuNGxpbnV4L2lzZG40ay11dGlscy08VmVyc2lvbk51bWJlcj4udGFyLmd6CisKKworICBXZSBhbHNvIGhhdmUgc2V0IHVwIGEgbWFpbGluZy1saXN0OgorCisgICBUaGUgaXNkbjRsaW51eC1wcm9qZWN0IG9yaWdpbmF0ZXMgaW4gR2VybWFueSwgYW5kIHRoZXJlZm9yZSBieSBoaXN0b3JpY2FsCisgICByZWFzb25zLCB0aGUgbWFpbGluZy1saXN0J3MgcHJpbWFyeSBsYW5ndWFnZSBpcyBnZXJtYW4uIEhvd2V2ZXIgbWFpbHMKKyAgIHdyaXR0ZW4gaW4gZW5nbGlzaCBoYXZlIGJlZW4gd2VsY29tZSBhbGwgdGhlIHRpbWUuCisKKyAgIHRvIHN1YnNjcmliZTogd3JpdGUgYSBlbWFpbCB0byBtYWpvcmRvbW9AbGlzdHNlcnYuaXNkbjRsaW51eC5kZSwKKyAgIFN1YmplY3QgaXJyZWxldmFudCwgaW4gdGhlIG1lc3NhZ2UgYm9keToKKyAgIHN1YnNjcmliZSBpc2RuNGxpbnV4IDx5b3VyX2VtYWlsX2FkZHJlc3M+CisKKyAgIFRvIHdyaXRlIHRvIHRoZSBtYWlsaW5nLWxpc3QsIHdyaXRlIHRvIGlzZG40bGludXhAbGlzdHNlcnYuaXNkbjRsaW51eC5kZQorCisgICBUaGlzIG1haWxpbmdsaXN0IGlzIGJpZGlyZWN0aW9uYWxseSBnYXRlZCB0byB0aGUgbmV3c2dyb3VwCisKKyAgICAgZGUuYWx0LmNvbW0uaXNkbjRsaW51eAorCisgIFRoZXJlIGlzIGFsc28gYSB3ZWxsIG1haW50YWluZWQgRkFRIGluIEVuZ2xpc2ggYXZhaWxhYmxlIGF0CisgICAgIGh0dHA6Ly93d3cubWhlc3NsZXIuZGUvaTRsZmFxLworICBJdCBjYW4gYmUgdmlld2VkIG9ubGluZSwgb3IgZG93bmxvYWRlZCBpbiBzZ21sL3RleHQvaHRtbCBmb3JtYXQuCisgIFRoZSBGQVEgY2FuIGFsc28gYmUgdmlld2VkIG9ubGluZSBhdAorICAgICBodHRwOi8vd3d3LmlzZG40aW51eC5kZS9mYXEvCisgIG9yIGRvd25sb2FkZWQgZnJvbQorICAgICBmdHA6Ly9mdHAuaXNkbjRsaW51eC5kZS9wdWIvaXNkbjRsaW51eC9GQVEvCisKKyAgMS4xIFRlY2huaWNhbCBkZXRhaWxzCisKKyAgSW4gdGhlIGZvbGxvd2luZyBUZXh0LCB0aGUgdGVybXMgTVNOIGFuZCBFQVogYXJlIHVzZWQuCisKKyAgTVNOIGlzIHRoZSBhYmJyZXZpYXRpb24gZm9yIChNKXVsdGlwbGUoUyl1YnNjcmliZXIoTil1bWJlciwgYW5kIGFwcGxpZXMKKyAgdG8gRXVybyhFRFNTMSktdHlwZSBsaW5lcy4gVXN1YWxseSBpdCBpcyBzaW1wbHkgdGhlIHBob25lIG51bWJlci4KKworICBFQVogaXMgdGhlIGFiYnJldmlhdGlvbiBvZiAoRSluZGdlcmFldGUoQSl1c3dhaGwoWilpZmZlciBhbmQKKyAgYXBwbGllcyB0byBHZXJtYW4gMVRSNi10eXBlIGxpbmVzLiBUaGlzIGlzIGEgb25lLWRpZ2l0IHN0cmluZywKKyAgc2ltcGx5IGFwcGVuZGVkIHRvIHRoZSBiYXNlIHBob25lIG51bWJlcgorCisgIFRoZSBpbnRlcm5hbCBoYW5kbGluZyBpcyBuZWFybHkgaWRlbnRpY2FsLCBzbyByZXBsYWNlIHRoZSBhcHByb3ByaWF0ZQorICB0ZXJtIHRvIHRoYXQgb25lLCB3aGljaCBhcHBsaWVzIHRvIHlvdXIgbG9jYWwgSVNETi1lbnZpcm9ubWVudC4KKworICBXaGVuIHRoZSBsaW5rLWxldmVsLW1vZHVsZSBpc2RuLm8gaXMgbG9hZGVkLCBpdCBzdXBwb3J0cyB1cCB0byAxNgorICBsb3ctbGV2ZWwtbW9kdWxlcyB3aXRoIHVwIHRvIDY0IGNoYW5uZWxzLiAoVGhlIG51bWJlciA2NCBpcyBhcmJpdHJhcmlseQorICBjaG9zZW4gYW5kIGNhbiBiZSBjb25maWd1cmVkIGF0IGNvbXBpbGUtdGltZSAtLUlTRE5fTUFYIGluIGlzZG4uaCkuCisgIEEgbG93LWxldmVsLWRyaXZlciBjYW4gcmVnaXN0ZXIgaXRzZWxmIHRocm91Z2ggYW4gaW50ZXJmYWNlICh3aGljaCBpcworICBkZWZpbmVkIGluIGlzZG5pZi5oKSBhbmQgZ2V0cyBhc3NpZ25lZCBhIHNsb3QuCisgIFRoZSBmb2xsb3dpbmcgY2hhci1kZXZpY2VzIGFyZSBtYWRlIGF2YWlsYWJsZSBmb3IgZWFjaCBjaGFubmVsOgorCisgIEEgcmF3LWNvbnRyb2wtZGV2aWNlIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgICAgIHdyaXRlOiByYXcgRC1jaGFubmVsLW1lc3NhZ2VzIChmb3JtYXQ6IGRlcGVuZHMgb24gZHJpdmVyKS4KKyAgICAgcmVhZDogIHJhdyBELWNoYW5uZWwtbWVzc2FnZXMgKGZvcm1hdDogZGVwZW5kcyBvbiBkcml2ZXIpLgorICAgICBpb2N0bDogZGVwZW5kcyBvbiBkcml2ZXIsIGkuZS4gZm9yIHRoZSBJQ04tZHJpdmVyLCB0aGUgYmFzZS1hZGRyZXNzIG9mCisgICAgICAgICAgICB0aGUgcG9ydHMgYW5kIHRoZSBzaGFyZWQgbWVtb3J5IG9uIHRoZSBjYXJkIGNhbiBiZSBzZXQgYW5kIHJlYWQKKyAgICAgICAgICAgIGFsc28gdGhlIGJvb3QtY29kZSBhbmQgdGhlIHByb3RvY29sIHNvZnR3YXJlIGNhbiBiZSBsb2FkZWQgaW50bworICAgICAgICAgICAgdGhlIGNhcmQuCisKKyAgIE8gTiBMIFkgISEhICBmb3IgZGVidWdnaW5nIChubyBsb2NraW5nIGFnYWluc3Qgb3RoZXIgZGV2aWNlcyk6CisgICBPbmUgcmF3LWRhdGEtZGV2aWNlIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgICAgIHdyaXRlOiBkYXRhIHRvIEItY2hhbm5lbC4KKyAgICAgcmVhZDogIGRhdGEgZnJvbSBCLWNoYW5uZWwuCisKKyAgIEluIGFkZGl0aW9uIHRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUgbWFkZSBhdmFpbGFibGU6CisKKyAgIDEyOCB0dHktZGV2aWNlcyAoNjQgY3VpeCBhbmQgNjQgdHR5SXgpIHdpdGggaW50ZWdyYXRlZCBtb2RlbS1lbXVsYXRvcjoKKyAgIFRoZSBmdW5jdGlvbmFsaXR5IGlzIGFsbW9zdCB0aGUgc2FtZSBhcyB0aGF0IG9mIGEgc2VyaWFsIGRldmljZQorICAgKHRoZSBsaW5lLWRpc2NzIGFyZSBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwpLCB3aGljaCBsZXRzIHlvdSBydW4KKyAgIFNMSVAsIENTTElQIGFuZCBhc3luY2hyb25vdXMgUFBQIHRocm91Z2ggdGhlIGRldmljZXMuIFdlIGhhdmUgdGVzdGVkCisgICBTZXlvbiwgbWluaWNvbSwgQ1NMSVAgKHVyaS1kaXApIFBQUCwgbWdldHR5LCBYQ2VwdCBhbmQgSHlsYWZheC4gCisKKyAgIFRoZSBtb2RlbS1lbXVsYXRpb24gc3VwcG9ydHMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgMS4zLjEgQ29tbWFuZHM6CisKKyAgICAgICAgICAgICAgIEFUQSAgICAgIEFuc3dlciBpbmNvbWluZyBjYWxsLgorICAgICAgICAgICAgICAgQVREPE5vLj4gRGlhbCwgdGhlIG51bWJlciBtYXkgY29udGFpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFswLTldIGFuZCBbLCMuKldQVC1TXQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhdHRlciBhcmUgaWdub3JlZCB1bnRpbCAnUycuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgJ1MnIG11c3QgcHJlY2VkZSB0aGUgbnVtYmVyLCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpbmUgaXMgYSBTUFYgKEdlcm1hbiAxVFI2KS4KKyAgICAgICAgICAgICAgIEFURTAgICAgIEVjaG8gb2ZmLgorICAgICAgICAgICAgICAgQVRFMSAgICAgRWNobyBvbiAoZGVmYXVsdCkuCisgICAgICAgICAgICAgICBBVEggICAgICBIYW5nLXVwLgorICAgICAgICAgICAgICAgQVRIMSAgICAgT2ZmIGhvb2sgKGlnbm9yZWQpLgorICAgICAgICAgICAgICAgQVRIMCAgICAgSGFuZy11cC4KKyAgICAgICAgICAgICAgIEFUSSAgICAgIFJldHVybiAiSVNETiBmb3IgTGludXguLi4iLgorICAgICAgICAgICAgICAgQVRJMCAgICAgICAgIgorICAgICAgICAgICAgICAgQVRJMSAgICAgICAgIgorICAgICAgICAgICAgICAgQVRJMiAgICAgUmVwb3J0IG9mIGxhc3QgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgIEFUTyAgICAgIE9uIGxpbmUgKGRhdGEgbW9kZSkuCisgICAgICAgICAgICAgICBBVFEwICAgICBFbmFibGUgcmVzdWx0IGNvZGVzIChkZWZhdWx0KS4KKyAgICAgICAgICAgICAgIEFUUTEgICAgIERpc2FibGUgcmVzdWx0IGNvZGVzIChkZWZhdWx0KS4KKyAgICAgICAgICAgICAgIEFUU3g9eSAgIFNldCByZWdpc3RlciB4IHRvIHkuCisgICAgICAgICAgICAgICBBVFN4PyAgICBTaG93IGNvbnRlbnRzIG9mIHJlZ2lzdGVyIHguCisgICAgICAgICAgICAgICBBVFYwICAgICBOdW1lcmljIHJlc3BvbnNlcy4KKyAgICAgICAgICAgICAgIEFUVjEgICAgIEVuZ2xpc2ggcmVzcG9uc2VzIChkZWZhdWx0KS4KKyAgICAgICAgICAgICAgIEFUWiAgICAgIExvYWQgcmVnaXN0ZXJzIGFuZCBFQVovTVNOIGZyb20gUHJvZmlsZS4KKyAgICAgICAgICAgICAgIEFUJkJ4ICAgIFNldCBTZW5kLVBhY2tldC1zaXplIHRvIHggKG1heC4gNDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWFsIHBhY2tldC1zaXplIG1heSBiZSBsaW1pdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbG93LWxldmVsLWRyaXZlciB1c2VkLiBlLmcuIHRoZSBIaVNheC1Nb2R1bGUtCisgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCBpcyAyMDAwLiBZb3Ugd2lsbCBnZXQgTk8gRXJyb3ItTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdSBzZXQgaXQgdG8gaGlnaGVyIHZhbHVlcywgYmVjYXVzZSBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgb2YgZ2l2aW5nIHRoaXMgY29tbWFuZCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIG1heSBub3QgYmUgc2VsZWN0ZWQgKHNlZSAiQXV0b21hdGljCisgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25tZW50IikgaG93ZXZlciB0aGUgc2l6ZSBvZiBvdXRnb2luZyBwYWNrZXRzCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGxpbWl0ZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgQVQmRDAgICAgSWdub3JlIERUUgorICAgICAgICAgICAgICAgQVQmRDIgICAgRFRSLWxvdy1lZGdlOiBIYW5nIHVwIGFuZCByZXR1cm4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbW9kZSAoZGVmYXVsdCkuCisgICAgICAgICAgICAgICBBVCZEMyAgICBTYW1lIGFzIEFUJkQyIGJ1dCBhbHNvIHJlc2V0cyBhbGwgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgQVQmRXggICAgU2V0IHRoZSBFQVovTVNOIGZvciB0aGlzIGNoYW5uZWwgdG8geC4KKyAgICAgICAgICAgICAgIEFUJkYgICAgIFJlc2V0IGFsbCByZWdpc3RlcnMgYW5kIHByb2ZpbGUgdG8gImZhY3RvcnktZGVmYXVsdHMiCisgICAgICAgICAgICAgICBBVCZMeCAgICBTZXQgbGlzdCBvZiBwaG9uZSBudW1iZXJzIHRvIGxpc3RlbiBvbi4gIHggaXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBvZiB3aWxkY2FyZCBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyBzZXQsIGl0IGhhcyBwcmVjZWRlbmNlIG92ZXIgdGhlIE1TTiBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IEFUJkUuCisgICAgICAgICAgICAgICBBVCZSeCAgICBTZWxlY3QgVi4xMTAgYml0cmF0ZSBhZGFwdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBlbmFibGVzIFYuMTEwIHByb3RvY29sIHdpdGggOTYwMCBiYXVkCisgICAgICAgICAgICAgICAgICAgICAgICAoeD05NjAwKSwgMTkyMDAgYmF1ZCAoeD0xOTIwMCkgb3IgMzg0MDAgYmF1ZAorICAgICAgICAgICAgICAgICAgICAgICAgKHg9Mzg0MDApLiBBIHZhbHVlIG9mIHg9MCBkaXNhYmxlcyBWLjExMCBzd2l0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2sgdG8gZGVmYXVsdCBYLjc1LiBUaGlzIGNvbW1hbmQgc2V0cyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZyAxNCAoTGF5ZXItMiBwcm90b2NvbCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDA6ICAgICAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDk2MDA6ICA3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDE5MjAwOiA4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDM4NDAwOiA5CisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZyAxOC4yID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICBSZWcgMTkgKEFkZGl0aW9uYWwgU2VydmljZSBJbmRpY2F0b3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAwOiAgICAgICAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDk2MDA6ICAxOTcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMTkyMDA6IDE5OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAzODQwMDogMTk4CisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgb24gdmFsdWUgaW4gUmVnIDE5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlIGlzIF9OT18gY29tbW9uIGNvbnZlbnRpb24gZm9yIDM4NDAwIGJhdWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIDE5OCBpcyBjaG9zZW4gYXJiaXRyYXJpbHkuIFVzZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01VU1RfIG5lZ290aWF0ZSB0aGlzIHZhbHVlIGJlZm9yZSBlc3RhYmxpc2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbm5lY3Rpb24uCisgICAgICAgICAgICAgICBBVCZTeCAgICBTZXQgd2luZG93LXNpemUgKHggPSAxLi44KSAobm90IHlldCBpbXBsZW1lbnRlZCkKKyAgICAgICAgICAgICAgIEFUJlYgICAgIFNob3cgYWxsIHNldHRpbmdzLgorICAgICAgICAgICAgICAgQVQmVzAgICAgV3JpdGUgcmVnaXN0ZXJzIGFuZCBFQVovTVNOIHRvIHByb2ZpbGUuIFNlZSBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgICBpcHJvZmQgKDUuYyBpbiB0aGlzIFJFQURNRSkuCisgICAgICAgICAgICAgICBBVCZYMCAgICBCVFgtbW9kZSBhbmQgVC43MC1tb2RlIG9mZiAoZGVmYXVsdCkKKyAgICAgICAgICAgICAgIEFUJlgxICAgIEJUWC1tb2RlIG9uLiAoUzEzLjE9MSwgUzEzLjU9MCBTMTQ9MCwgUzE2PTcsIFMxOD03LCBTMTk9MCkKKyAgICAgICAgICAgICAgIEFUJlgyICAgIFQuNzAtbW9kZSBvbi4gKFMxMy4xPTEsIFMxMy41PTEsIFMxND0wLCBTMTY9NywgUzE4PTcsIFMxOT0wKQorICAgICAgICAgICAgICAgQVQrUnggICAgUmVzdW1lIGEgc3VzcGVuZGVkIGNhbGwgd2l0aCBDYWxsSUQgeCAoeCA9IDEsMiwzLi4uKQorICAgICAgICAgICAgICAgQVQrU3ggICAgU3VzcGVuZCBhIGNhbGwgd2l0aCBDYWxsSUQgeCAoeCA9IDEsMiwzLi4uKQorCisgICAgICAgICAgIEZvciB2b2ljZS1tb2RlIGNvbW1hbmRzIHJlZmVyIHRvIFJFQURNRS5hdWRpbworCisgICAgICAgICAgIDEuMy4yIEVzY2FwZSBzZXF1ZW5jZToKKyAgICAgICAgICAgICAgIER1cmluZyBhIGNvbm5lY3Rpb24sIHRoZSBlbXVsYXRpb24gcmVhY3RzIGp1c3QgbGlrZQorICAgICAgICAgICAgICAgYSBub3JtYWwgbW9kZW0gdG8gdGhlIGVzY2FwZSBzZXF1ZW5jZSA8REVMQVk+KysrPERFTEFZPi4KKyAgICAgICAgICAgICAgIChUaGUgZXNjYXBlIGNoYXJhY3RlciAtIGRlZmF1bHQgJysnIC0gY2FuIGJlIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIDIpLgorICAgICAgICAgICAgICAgVGhlIERFTEFZIG11c3QgYXQgbGVhc3QgYmUgMS41IHNlY29uZHMgbG9uZyBhbmQgZGVsYXkKKyAgICAgICAgICAgICAgIGJldHdlZW4gdGhlIGVzY2FwZSBjaGFyYWN0ZXJzIG11c3Qgbm90IGV4Y2VlZCAwLjUgc2Vjb25kcy4KKworICAgICAgICAgICAxLjMuMyBSZWdpc3RlcnM6CisKKyAgICAgICAgICAgICAgTnIuICBEZWZhdWx0ICBEZXNjcmlwdGlvbgorICAgICAgICAgICAgICAwICAgIDAgICAgICAgIEFuc3dlciBvbiByaW5nIG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm8gYXV0by1hbnN3ZXIgaWYgUzA9MCkuCisgICAgICAgICAgICAgIDEgICAgMCAgICAgICAgQ291bnQgb2YgcmluZ3MuCisgICAgICAgICAgICAgIDIgICAgNDMgICAgICAgRXNjYXBlIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSB2YWx1ZSA+PSAxMjggZGlzYWJsZXMgdGhlIGVzY2FwZSBzZXF1ZW5jZSkuCisgICAgICAgICAgICAgIDMgICAgMTMgICAgICAgQ2FycmlhZ2UgcmV0dXJuIGNoYXJhY3RlciAoQVNDSUkpLgorICAgICAgICAgICAgICA0ICAgIDEwICAgICAgIExpbmUgZmVlZCBjaGFyYWN0ZXIgKEFTQ0lJKS4KKyAgICAgICAgICAgICAgNSAgICA4ICAgICAgICBCYWNrc3BhY2UgY2hhcmFjdGVyIChBU0NJSSkuCisgICAgICAgICAgICAgIDYgICAgMyAgICAgICAgRGVsYXkgaW4gc2Vjb25kcyBiZWZvcmUgZGlhbGluZy4KKyAgICAgICAgICAgICAgNyAgICA2MCAgICAgICBXYWl0IGZvciBjYXJyaWVyLgorICAgICAgICAgICAgICA4ICAgIDIgICAgICAgIFBhdXNlIHRpbWUgZm9yIGNvbW1hIChpZ25vcmVkKQorICAgICAgICAgICAgICA5ICAgIDYgICAgICAgIENhcnJpZXIgZGV0ZWN0IHRpbWUgKGlnbm9yZWQpCisgICAgICAgICAgICAgMTAgICAgNyAgICAgICAgQ2FycmllciBsb3NzIHRvIGRpc2Nvbm5lY3QgdGltZSAoaWdub3JlZCkuCisgICAgICAgICAgICAgMTEgICAgNzAgICAgICAgVG91Y2ggdG9uZSB0aW1pbmcgKGlnbm9yZWQpLgorICAgICAgICAgICAgIDEyICAgIDY5ICAgICAgIEJpdCBjb2RlZCByZWdpc3RlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMDogICAgMCA9IFN1cHByZXNzIHJlc3BvbnNlIG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gU2hvdyByZXNwb25zZSBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMTogICAgMCA9IEVuZ2xpc2ggcmVzcG9uc2UgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBOdW1lcmljIHJlc3BvbnNlIG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAyOiAgICAwID0gRWNobyBvZmYuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBFY2hvIG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAzICAgICAwID0gRENEIGFsd2F5cyBvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IERDRCBmb2xsb3dzIGNhcnJpZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDQgICAgIDAgPSBDVFMgZm9sbG93cyBSVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IElnbm9yZSBSVFMsIENUUyBhbHdheXMgb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDUgICAgIDAgPSByZXR1cm4gdG8gY29tbWFuZCBtb2RlIG9uIERUUiBsb3cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBTYW1lIGFzIDAgYnV0IGFsc28gcmVzZXRzIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgYWxzbyByZWdpc3RlciAxMywgYml0IDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNiAgICAgMCA9IERTUiBhbHdheXMgb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBEU1Igb25seSBvbiBpZiBjaGFubmVsIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNyAgICAgMCA9IENpc2NvLVBQUC1mbGFnLWhhY2sgb2ZmIChkZWZhdWx0KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IENpc2NvLVBQUC1mbGFnLWhhY2sgb24uCisgICAgICAgICAgICAgMTMgICAwICAgICAgICAgQml0IGNvZGVkIHJlZ2lzdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwOiAgICAwID0gVXNlIGRlbGF5ZWQgdHR5LXNlbmQtYWxnb3JpdGhtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBEaXJlY3QgdHR5LXNlbmQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDE6ICAgIDAgPSBULjcwIHByb3RvY29sIChPbmx5IGZvciBCVFghKSBvZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IFQuNzAgcHJvdG9jb2wgKE9ubHkgZm9yIEJUWCEpIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDI6ICAgIDAgPSBEb24ndCBoYW5ndXAgb24gRFRSIGxvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IEhhbmd1cCBvbiBEVFIgbG93LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAzOiAgICAwID0gU3RhbmRhcmQgcmVzcG9uc2UgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IEV4dGVuZGVkIHJlc3BvbnNlIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDQ6ICAgIDAgPSBDQUxMRVIgTlVNQkVSIGJlZm9yZSBldmVyeSBSSU5HLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gQ0FMTEVSIE5VTUJFUiBhZnRlciBmaXJzdCBSSU5HLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA1OiAgICAwID0gVC43MCBleHRlbmRlZCBwcm90b2NvbCBvZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IFQuNzAgZXh0ZW5kZWQgcHJvdG9jb2wgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNjogICAgMCA9IFNwZWNpYWwgUlVORyBNZXNzYWdlIG9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gU3BlY2lhbCBSVU5HIE1lc3NhZ2Ugb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSVU5HIiBpcyBkZWxpdmVyZWQgb24gYSB0dHlJLCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gaW5jb21pbmcgY2FsbCBoYXBwZW5lZCAoUklORykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVtb3RlIHBhcnR5IGh1bmcgdXAgYmVmb3JlIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgQVRBIHdhcyBnaXZlbi4KKwkJCSAgICBCaXQgNzogICAgMCA9IERvbid0IHNob3cgZGlzcGxheSBtZXNzYWdlcyBmcm9tIG5ldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gU2hvdyBkaXNwbGF5IG1lc3NhZ2VzIGZyb20gbmV0CisJCQkJICAgICAgICAgIChTMTIgQml0IDEgbXVzdCBiZSAwIHRvbykgICAgICAKKyAgICAgICAgICAgICAxNCAgIDAgICAgICAgICBMYXllci0yIHByb3RvY29sOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwID0gWDc1L0xBUEIgd2l0aCBJLWZyYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gWDc1L0xBUEIgd2l0aCBVSS1mcmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9IFg3NS9MQVBCIHdpdGggQlVJLWZyYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0gSERMQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ID0gVHJhbnNwYXJlbnQgKGF1ZGlvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ID0gVi4xMTAsIDk2MDAgYmF1ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ID0gVi4xMTAsIDE5MjAwIGJhdWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOSA9IFYuMTEwLCAzODQwMCBiYXVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgPSBBbmFsb2cgTW9kZW0gKG9ubHkgaWYgaGFyZHdhcmUgc3VwcG9ydHMgdGhpcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMSA9IEZheCBHMyAob25seSBpZiBoYXJkd2FyZSBzdXBwb3J0cyB0aGlzKQorICAgICAgICAgICAgIDE1ICAgMCAgICAgICAgIExheWVyLTMgcHJvdG9jb2w6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPSB0cmFuc3BhcmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gdHJhbnNwYXJlbnQgd2l0aCBhdWRpbyBmZWF0dXJlcyAoZS5nLiBEU1ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPSBGYXggRzMgQ2xhc3MgMiBjb21tYW5kcyAoUzE0IGhhcyB0byBiZSBzZXQgdG8gMTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgPSBGYXggRzMgQ2xhc3MgMSBjb21tYW5kcyAoUzE0IGhhcyB0byBiZSBzZXQgdG8gMTEpCisgICAgICAgICAgICAgMTYgICAyNTAgICAgICAgU2VuZC1QYWNrZXQtc2l6ZS8xNgorICAgICAgICAgICAgIDE3ICAgOCAgICAgICAgIFdpbmRvdy1zaXplIChub3QgeWV0IGltcGxlbWVudGVkKQorICAgICAgICAgICAgIDE4ICAgNCAgICAgICAgIEJpdCBjb2RlZCByZWdpc3RlciwgU2VydmljZS1PY3RldC0xIHRvIGFjY2VwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0byBiZSB1c2VkIG9uIGRpYWxvdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDA6ICAgIFNlcnZpY2UgMSAoYXVkaW8pIHdoZW4gc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAxOiAgICBTZXJ2aWNlIDUgKEJUWCkgd2hlbiBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDI6ICAgIFNlcnZpY2UgNyAoZGF0YSkgd2hlbiBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogSXQgaXMgcG9zc2libGUgdG8gc2V0IG1vcmUgdGhhbiBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXQuIEluIHRoaXMgY2FzZSwgb24gaW5jb21pbmcgY2FsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2VsZWN0ZWQgc2VydmljZXMgYXJlIGFjY2VwdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpZiB0aGUgc2VydmljZSBpcyAiYXVkaW8iLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllci0yLXByb3RvY29sIGlzIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHRvIDQgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHJlZ2lzdGVyIDE0LiBPbiBvdXRnb2luZyBjYWxscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbW9zdCBzaWduaWZpY2FudCAxLWJpdCBpcyBjaG9zZW4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgdGhlIG91dGdvaW5nIHNlcnZpY2Ugb2N0ZXQuCisgICAgICAgICAgICAgMTkgICAwICAgICAgICAgU2VydmljZS1PY3RldC0yCisgICAgICAgICAgICAgMjAgICAwICAgICAgICAgQml0IGNvZGVkIHJlZ2lzdGVyIChyZWFkb25seSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlLU9jdGV0LTEgb2YgbGFzdCBjYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCBtYXBwaW5nIGlzIHRoZSBzYW1lIGFzIHJlZ2lzdGVyIDE4CisgICAgICAgICAgICAgMjEgICAwICAgICAgICAgQml0IGNvZGVkIHJlZ2lzdGVyIChyZWFkb25seSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgb24gaW5jb21pbmcgY2FsbCAoZHVyaW5nIFJJTkcpIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0ZXQgMyBvZiBjYWxsaW5nIHBhcnR5IG51bWJlciBJRSAoTnVtYmVyaW5nIHBsYW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHNlY3Rpb24gNC41LjEwIG9mIElUVSBRLjkzMQorICAgICAgICAgICAgIDIyICAgMCAgICAgICAgIEJpdCBjb2RlZCByZWdpc3RlciAocmVhZG9ubHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IG9uIGluY29taW5nIGNhbGwgKGR1cmluZyBSSU5HKSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGV0IDNhIG9mIGNhbGxpbmcgcGFydHkgbnVtYmVyIElFIChTY3JlZW5pbmcgaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgc2VjdGlvbiA0LjUuMTAgb2YgSVRVIFEuOTMxCisgICAgICAgICAgICAgMjMgICAwICAgICAgICAgQml0IGNvZGVkIHJlZ2lzdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwOiAgICAwID0gQWRkIENQTiB0byBSSU5HIG1lc3NhZ2Ugb2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBBZGQgQ1BOIHRvIFJJTkcgbWVzc2FnZSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAxOiAgICAwID0gQWRkIENQTiB0byBGQ09OIG1lc3NhZ2Ugb2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBBZGQgQ1BOIHRvIEZDT04gbWVzc2FnZSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAyOiAgICAwID0gQWRkIENETiB0byBSSU5HL0ZDT04gbWVzc2FnZSBvZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IEFkZCBDRE4gdG8gUklORy9GQ09OIG1lc3NhZ2Ugb24KKworICBMYXN0IGJ1dCBub3QgbGVhc3QgYSAoYXQgdGhlIG1vbWVudCBmYWlybHkgcHJpbWl0aXZlKSBkZXZpY2UgdG8gcmVxdWVzdAorICB0aGUgbGluZS1zdGF0dXMgKC9kZXYvaXNkbmluZm8pIGlzIG1hZGUgYXZhaWxhYmxlLgorCisgIEF1dG9tYXRpYyBhc3NpZ25tZW50IG9mIGRldmljZXMgdG8gbGluZXM6CisKKyAgQWxsIGluYWN0aXZlIHBoeXNpY2FsIGxpbmVzIGFyZSBsaXN0ZW5pbmcgdG8gYWxsIEVBWnMgZm9yIGluY29taW5nCisgIGNhbGxzIGFuZCBhcmUgTk9UIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgdHR5IG9yIG5ldHdvcmsgaW50ZXJmYWNlLgorICBXaGVuIGFuIGluY29taW5nIGNhbGwgaXMgZGV0ZWN0ZWQsIHRoZSBkcml2ZXIgbG9va3MgZmlyc3QgZm9yIGEgbmV0d29yaworICBpbnRlcmZhY2UgYW5kIHRoZW4gZm9yIGFuIG9wZW5lZCB0dHkgd2hpY2g6CisKKyAgMS4gaXMgY29uZmlndXJlZCBmb3IgdGhlIHNhbWUgRUFaLgorICAyLiBoYXMgdGhlIHNhbWUgcHJvdG9jb2wgc2V0dGluZ3MgZm9yIHRoZSBCLWNoYW5uZWwuCisgIDMuIChvbmx5IGZvciBuZXR3b3JrIGludGVyZmFjZXMgaWYgdGhlIHNlY3VyaXR5IGZsYWcgaXMgc2V0KQorICAgICBjb250YWlucyB0aGUgY2FsbGVyIG51bWJlciBpbiBpdHMgYWNjZXNzIGxpc3QuCisgIDQuIEVpdGhlciB0aGUgY2hhbm5lbCBpcyBub3QgYm91bmQgZXhjbHVzaXZlbHkgdG8gYW5vdGhlciBOZXQtaW50ZXJmYWNlLCBvcgorICAgICBpdCBpcyBib3VuZCBBTkQgdGhlIG90aGVyIGNoZWNrcyBhcHBseSB0byBleGFjdGx5IHRoaXMgaW50ZXJmYWNlLgorICAgICAoRm9yIHVzYWdlIG9mIHRoZSBiaW5kLWZlYXR1cmVzLCByZWZlciB0byB0aGUgaXNkbmN0cmwtbWFuLXBhZ2UpCisKKyAgT25seSB3aGVuIGEgbWF0Y2hpbmcgaW50ZXJmYWNlIG9yIHR0eSBpcyBmb3VuZCBpcyB0aGUgY2FsbCBhY2NlcHRlZAorICBhbmQgdGhlICJjb25uZWN0aW9uIiBiZXR3ZWVuIHRoZSBsb3ctbGV2ZWwtbGF5ZXIgYW5kIHRoZSBsaW5rLWxldmVsLWxheWVyCisgIGlzIGVzdGFibGlzaGVkIGFuZCBrZXB0IHVudGlsIHRoZSBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCisgIEluIGFsbCBvdGhlciBjYXNlcyBubyBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLiBJc2RuNGxpbnV4IGNhbiBiZQorICBjb25maWd1cmVkIHRvIGVpdGhlciBkbyBOT1RISU5HIGluIHRoaXMgY2FzZSAod2hpY2ggaXMgdXNlZnVsLCBpZgorICBvdGhlciwgZXh0ZXJuYWwgZGV2aWNlcyB3aXRoIHRoZSBzYW1lIEVBWi9NU04gYXJlIGNvbm5lY3RlZCB0byB0aGUgYnVzKQorICBvciB0byByZWplY3QgdGhlIGNhbGwgYWN0aXZlbHkuIChpc2RuY3RybCBidXNyZWplY3QgLi4uKQorCisgIEZvciBhbiBvdXRnb2luZyBjYWxsLCB0aGUgaW5hY3RpdmUgcGh5c2ljYWwgbGluZXMgYXJlIHNlYXJjaGVkLgorICBUaGUgY2FsbCBpcyBwbGFjZWQgb24gdGhlIGZpcnN0IHBoeXNpY2FsIGxpbmUsIHdoaWNoIHN1cHBvcnRzIHRoZQorICByZXF1ZXN0ZWQgcHJvdG9jb2xzIGZvciB0aGUgQi1jaGFubmVsLiBJZiBhIG5ldC1pbnRlcmZhY2UsIGhvd2V2ZXIKKyAgaXMgcHJlLWJvdW5kIHRvIGEgY2hhbm5lbCwgdGhpcyBjaGFubmVsIGlzIHVzZWQgZGlyZWN0bHkuCisKKyAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb25maWd1cmUgc2V2ZXJhbCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHR0eXMKKyAgZm9yIG9uZSBFQVosIGlmIHRoZSBuZXR3b3JrIGludGVyZmFjZXMgYXJlIHNldCB0byBzZWN1cmUgb3BlcmF0aW9uLgorICBJZiBhbiBpbmNvbWluZyBjYWxsIG1hdGNoZXMgb25lIG5ldHdvcmsgaW50ZXJmYWNlLCBpdCBnZXRzIGNvbm5lY3RlZCB0byBpdC4KKyAgSWYgYW5vdGhlciBpbmNvbWluZyBjYWxsIGZvciB0aGUgc2FtZSBFQVogYXJyaXZlcywgd2hpY2ggZG9lcyBub3QgbWF0Y2gKKyAgYSBuZXR3b3JrIGludGVyZmFjZSwgdGhlIGZpcnN0IHR0eSBnZXRzIGEgIlJJTkciIGFuZCBzbyBvbi4KKworMiBTeXN0ZW0gcHJlcmVxdWlzaXRlczoKKworICBBVFRFTlRJT04hCisKKyAgQWx3YXlzIHVzZSB0aGUgbGF0ZXN0IG1vZHVsZSB1dGlsaXRpZXMuIFRoZSBjdXJyZW50IHZlcnNpb24gaXMKKyAgbmFtZWQgaW4gRG9jdW1lbnRhdGlvbi9DaGFuZ2VzLiBTb21lIG9sZCB2ZXJzaW9ucyBvZiBpbnNtb2QKKyAgYXJlIG5vdCBjYXBhYmxlIG9mIHNldHRpbmcgdGhlIGRyaXZlci1JZHMgY29ycmVjdGx5LgorCiszLiBMb3dsZXZlbC1kcml2ZXIgY29uZmlndXJhdGlvbi4KKworICAgQ29uZmlndXJhdGlvbiBkZXBlbmRzIG9uIGhvdyB0aGUgZHJpdmVycyBhcmUgYnVpbHQuIFNlZSB0aGUKKyAgIFJFQURNRS48eW91ckRyaXZlcj4gZm9yIGluZm9ybWF0aW9uIG9uIGRyaXZlci1zcGVjaWZpYyBzZXR1cC4KKworNC4gRGV2aWNlLWlub2RlcworCisgICBUaGUgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgYW5kIHRoZWlyIG5hbWVzIGFyZSBkZXNjcmliZWQgaW4KKyAgIERvY3VtZW50YXRpb24vZGV2aWNlcy50eHQuIFRoZSBtYWpvciBudW1iZXJzIGFyZToKKworICAgICA0MyBmb3IgdGhlIElTRE4tdHR5J3MuCisgICAgIDQ0IGZvciB0aGUgSVNETi1jYWxsb3V0LXR0eSdzLgorICAgICA0NSBmb3IgY29udHJvbC9pbmZvL2RlYnVnIGRldmljZXMuCisKKzUuIEFwcGxpY2F0aW9uCisKKyAgIGEpIEZvciBzb21lIGNhcmQtdHlwZXMsIGZpcm13YXJlIGhhcyB0byBiZSBsb2FkZWQgaW50byB0aGUgY2FyZHMsIGJlZm9yZQorICAgICAgcHJvY2VlZGluZyB3aXRoIGRldmljZS1pbmRlcGVuZGVudCBzZXR1cC4gU2VlIFJFQURNRS48eW91ckRyaXZlcj4KKyAgICAgIGZvciBob3cgdG8gZG8gdGhhdC4KKworICAgYikgSWYgeW91IG9ubHkgaW50ZW5kIHRvIHVzZSB0dHlzLCB5b3UgYXJlIG5lYXJseSByZWFkeSBub3cuCisKKyAgIGMpIElmIHlvdSB3YW50IHRvIGhhdmUgcmVhbGx5IHBlcm1hbmVudCAiTW9kZW0iLXNldHRpbmdzIG9uIGRpc2ssIHlvdQorICAgICAgY2FuIHN0YXJ0IHRoZSBkYWVtb24gaXByb2ZkLiBHaXZlIGl0IGEgcGF0aCB0byBhIGZpbGUgYXQgdGhlIGNvbW1hbmQtCisgICAgICBsaW5lLiBJdCB3aWxsIHN0b3JlIHRoZSBwcm9maWxlLXNldHRpbmdzIGluIHRoaXMgZmlsZSBldmVyeSB0aW1lCisgICAgICBhbiBBVCZXMCBpcyBwZXJmb3JtZWQgb24gYW55IElTRE4tdHR5LiBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywKKyAgICAgIGFsbCBwcm9maWxlcyBhcmUgaW5pdGlhbGl6ZWQgZnJvbSB0aGlzIGZpbGUuIElmIHlvdSB3YW50IHRvIHVubG9hZAorICAgICAgYW55IG9mIHRoZSBtb2R1bGVzLCBraWxsIGlwcm9mZCBmaXJzdC4KKworICAgZCkgRm9yIG5ldHdvcmtpbmcsIGNvbnRpbnVlOiBDcmVhdGUgYW4gaW50ZXJmYWNlOgorICAgICAgIGlzZG5jdHJsIGFkZGlmIGlzZG4wCisKKyAgIGUpIFNldCB0aGUgRUFaIChvciBNU04gZm9yIEV1cm8tSVNETik6CisgICAgICAgaXNkbmN0cmwgZWF6IGlzZG4wIDIKKworICAgICAoRm9yIDFUUjYgYSBzaW5nbGUgZGlnaXQgaXMgYWxsb3dlZCwgZm9yIEV1cm8tSVNETiB0aGUgbnVtYmVyIGlzIHlvdXIKKyAgICAgIHJlYWwgTVNOIGUuZy46IFBob25lLU51bWJlcikKKworICAgZikgU2V0IHRoZSBudW1iZXIgZm9yIG91dGdvaW5nIGNhbGxzIG9uIHRoZSBpbnRlcmZhY2U6CisgICAgICAgaXNkbmN0cmwgYWRkcGhvbmUgaXNkbjAgb3V0IDEyMzQ1NjcKKyAgICAgICAuLi4gKHRoaXMgY2FuIGJlIGV4ZWN1dGVkIG1vcmUgdGhhbiBvbmNlLCBhbGwgYXNzaWduZWQgbnVtYmVycyBhcmUKKyAgICAgICAgICAgIHRyaWVkIGluIG9yZGVyKQorICAgICAgYW5kIHRoZSBudW1iZXIocykgZm9yIGluY29taW5nIGNhbGxzOgorICAgICAgIGlzZG5jdHJsIGFkZHBob25lIGlzZG4wIGluIDEyMzQ1NjcKKworICAgZykgU2V0IHRoZSB0aW1lb3V0IGZvciBoYW5nLXVwOgorICAgICAgIGlzZG5jdHJsIGh1cHRpbWVvdXQgaXNkbjAgPHRpbWVvdXRfaW5fc2Vjb25kcz4KKworICAgaCkgYWRkaXRpb25hbGx5IHlvdSBtYXkgYWN0aXZhdGUgY2hhcmdlLWhhbmctdXAgKD0gSGFuZyB1cCBiZWZvcmUKKyAgICAgIG5leHQgY2hhcmdlLWluZm8sIHRoaXMgb25seSB3b3JrcywgaWYgeW91ciBpc2RuLXByb3ZpZGVyIHRyYW5zbWl0cworICAgICAgdGhlIGNoYXJnZS1pbmZvIGR1cmluZyBhbmQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24pOgorICAgICAgIGlzZG5jdHJsIGNoYXJnZWh1cCBpc2RuMCBvbgorCisgICBpKSBTZXQgdGhlIGRpYWwgbW9kZSBvZiB0aGUgaW50ZXJmYWNlOgorICAgICAgIGlzZG5jdHJsIGRpYWxtb2RlIGlzZG4wIGF1dG8KKyAgICAgICJvZmYiIG1lYW5zIHRoYXQgeW91IChvciB0aGUgc3lzdGVtKSBjYW5ub3QgbWFrZSBhbnkgY29ubmVjdGlvbgorICAgICAgICAobmVpdGhlciBpbmNvbWluZyBvciBvdXRnb2luZyBjb25uZWN0aW9ucyBhcmUgcG9zc2libGUpLiBVc2UKKyAgICAgICAgdGhpcyBpZiB5b3Ugd2FudCB0byBiZSBzdXJlIHRoYXQgbm8gY29ubmVjdGlvbnMgd2lsbCBiZSBtYWRlLgorICAgICAgImF1dG8iIG1lYW5zIHRoYXQgdGhlIGludGVyZmFjZSBpcyBpbiBhdXRvLWRpYWwgbW9kZSwgYW5kIHdpbGwKKyAgICAgICAgYXR0ZW1wdCB0byBtYWtlIGEgY29ubmVjdGlvbiB3aGVuZXZlciBhIG5ldHdvcmsgZGF0YSBwYWNrZXQgbmVlZHMKKyAgICAgICAgdGhlIGludGVyZmFjZSdzIGxpbmsuIE5vdGUgdGhhdCB0aGlzIGNhbiBjYXVzZSB1bmV4cGVjdGVkIGRpYWxvdXRzLAorICAgICAgICBhbmQgbGVhZCB0byBhIGhpZ2ggcGhvbmUgYmlsbCEgU29tZSBkYWVtb25zIG9yIG90aGVyIHBjJ3MgdGhhdCB1c2UKKyAgICAgICAgdGhpcyBpbnRlcmZhY2UgY2FuIGNhdXNlIHRoaXMuCisgICAgICAgIEluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhbHNvIHBvc3NpYmxlLgorICAgICAgIm1hbnVhbCIgaXMgYSBkaWFsIG1vZGUgY3JlYXRlZCB0byBwcmV2ZW50IHRoZSB1bmV4cGVjdGVkIGRpYWxvdXRzLgorICAgICAgICBJbiB0aGlzIG1vZGUsIHRoZSBpbnRlcmZhY2Ugd2lsbCBuZXZlciBtYWtlIGFueSBjb25uZWN0aW9ucyBvbiBpdHMKKyAgICAgICAgb3duLiBZb3UgbXVzdCBleHBsaWNpdGx5IGluaXRpYXRlIGEgY29ubmVjdGlvbiB3aXRoICJpc2RuY3RybCBkaWFsCisgICAgICAgIGlzZG4wIi4gSG93ZXZlciwgYWZ0ZXIgYW4gaWRsZSB0aW1lIG9mIG5vIHRyYWZmaWMgYXMgY29uZmlndXJlZCBmb3IKKwl0aGUgaHVwdGltZW91dCB2YWx1ZSB3aXRoIGlzZG5jdHJsLCB0aGUgY29ubmVjdGlvbiBfd2lsbF8gYmUgZW5kZWQuCisJSWYgeW91IGRvbid0IHdhbnQgYW55IGF1dG9tYXRpYyBoYW5ndXAsIHNldCB0aGUgaHVwdGltZW91dCB2YWx1ZSB0byAwLgorICAgICAgICAibWFudWFsIiBpcyB0aGUgZGVmYXVsdC4KKworICAgaikgU2V0dXAgdGhlIGludGVyZmFjZSB3aXRoIGlmY29uZmlnIGFzIHVzdWFsLCBhbmQgc2V0IGEgcm91dGUgdG8gaXQuCisKKyAgIGspIChvcHRpb25hbCkgSWYgeW91IHJ1biBYMTEgYW5kIGhhdmUgVGNsL1RrLXdpc2ggdmVyc2lvbiA0LjAsIHlvdSBjYW4gdXNlCisgICAgIHRoZSBzY3JpcHQgdG9vbHMvdGNsdGsvaXNkbm1vbi4gWW91IGNhbiBhZGQgYWN0aW9ucyBmb3IgbGluZS1zdGF0dXMKKyAgICAgY2hhbmdlcy4gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY3JpcHQgZm9yIGhvdyB0bworICAgICBkbyB0aGF0LiBUaGVyZSBhcmUgb3RoZXIgdHR5LWJhc2VkIHRvb2xzIGluIHRoZSB0b29scy1zdWJkaXJlY3RvcnkKKyAgICAgY29udHJpYnV0ZWQgYnkgTWljaGFlbCBLbmlnZ2UgKGltb24pLCBWb2xrZXIgR/Z0eiAoaW1vbnR0eSkgYW5kCisgICAgIEFuZHJlYXMgS29vbCAoaXNkbm1vbikuCisKKyAgIGwpIEZvciBpbml0aWFsIHRlc3RpbmcsIHlvdSBjYW4gc2V0IHRoZSB2ZXJib3NlLWxldmVsIHRvIDIgKGRlZmF1bHQ6IDApLgorICAgICAgVGhlbiBhbGwgaW5jb21pbmcgY2FsbHMgYXJlIGxvZ2dlZCwgZXZlbiBpZiB0aGV5IGFyZSBub3QgYWRkcmVzc2VkCisgICAgICB0byBvbmUgb2YgdGhlIGNvbmZpZ3VyZWQgbmV0LWludGVyZmFjZXM6CisgICAgICBpc2RuY3RybCB2ZXJib3NlIDIKKworICBOb3cgeW91IGFyZSByZWFkeSEgQSBwaW5nIHRvIHRoZSBzZXQgYWRkcmVzcyBzaG91bGQgbm93IHJlc3VsdCBpbiBhbgorICBhdXRvbWF0aWMgZGlhbC1vdXQgKGxvb2sgYXQgc3lzbG9nIGtlcm5lbC1tZXNzYWdlcykuCisgIFRoZSBwaG9uZSBudW1iZXJzIGFuZCBFQVpzIGNhbiBiZSBhc3NpZ25lZCBhdCBhbnkgdGltZSB3aXRoIGlzZG5jdHJsLgorICBZb3UgY2FuIGFkZCBhcyBtYW55IGludGVyZmFjZXMgYXMgeW91IGxpa2Ugd2l0aCBhZGRpZiBmb2xsb3dpbmcgdGhlCisgIGRpcmVjdGlvbnMgYWJvdmUuIE9mIGNvdXJzZSwgdGhlcmUgbWF5IGJlIHNvbWUgbGltaXRhdGlvbnMuIEJ1dCB3ZSBoYXZlCisgIHRlc3RlZCBhcyBtYW55IGFzIDIwIGludGVyZmFjZXMgd2l0aG91dCBhbnkgcHJvYmxlbS4gSG93ZXZlciwgaWYgeW91CisgIGRvbid0IGdpdmUgYW4gaW50ZXJmYWNlIG5hbWUgdG8gYWRkaWYsIHRoZSAga2VybmVsIHdpbGwgYXNzaWduIGEgbmFtZQorICB3aGljaCBzdGFydHMgd2l0aCAiZXRoIi4gVGhlIG51bWJlciBvZiAiZXRoIi1pbnRlcmZhY2VzIGlzIGxpbWl0ZWQgYnkKKyAgdGhlIGtlcm5lbC4KKworNS4gQWRkaXRpb25hbCBvcHRpb25zIGZvciBpc2RuY3RybDoKKworICAgImlzZG5jdHJsIHNlY3VyZSA8SW50ZXJmYWNlTmFtZT4gb24iCisgICBPbmx5IGluY29taW5nIGNhbGxzLCBmb3Igd2hpY2ggdGhlIGNhbGxlci1pZCBpcyBsaXN0ZWQgaW4gdGhlIGFjY2VzcworICAgbGlzdCBvZiB0aGUgaW50ZXJmYWNlIGFyZSBhY2NlcHRlZC4gWW91IGNhbiBhZGQgY2FsbGVyLWlkJ3MgV2l0aCB0aGUKKyAgIGNvbW1hbmQgImlzZG5jdHJsIGFkZHBob25lIDxJbnRlcmZhY2VOYW1lPiBpbiA8Y2FsbGVyLWlkPiIKKyAgIEV1cm8tSVNETiBkb2VzIG5vdCB0cmFuc21pdCB0aGUgbGVhZGluZyAnMCcgb2YgdGhlIGNhbGxlci1pZCBmb3IgYW4KKyAgIGluY29taW5nIGNhbGwsIHRoZXJlZm9yZSB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSBpdCBhY2NvcmRpbmdseS4KKyAgIElmIHRoZSByZWFsIG51bWJlciBmb3IgdGhlIGRpYWxvdXQgZS5nLiBpcyAiMDkzMTEyMzQ1NjciIHRoZSBudW1iZXIKKyAgIHRvIGNvbmZpZ3VyZSBoZXJlIGlzICI5MzExMjM0NTY3Ii4gVGhlIHBhdHRlcm4tbWF0Y2ggZnVuY3Rpb24KKyAgIHdvcmtzIHNpbWlsYXIgdG8gdGhlIHNoZWxsIG1lY2hhbmlzbS4KKworICAgICA/ICAgICBvbmUgYXJiaXRyYXJ5IGRpZ2l0CisgICAgICogICAgIHplcm8gb3IgYXJiaXRyYXJ5IG1hbnkgZGlnaXRzCisgICAgIFsxMjNdIG9uZSBvZiB0aGUgZGlnaXRzIGluIHRoZSBsaXN0CisgICAgIFsxLTVdIG9uZSBkaWdpdCBiZXR3ZWVuICcxJyBhbmQgJzUnCisgICAgICAgICAgIGEgJ14nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBsaXN0IGludmVydHMgdGhlIGxpc3QKKworCisgICAiaXNkbmN0cmwgc2VjdXJlIDxJbnRlcmZhY2VOYW1lPiBvZmYiCisgICBTd2l0Y2ggb2ZmIHNlY3VyZSBvcGVyYXRpb24gKGRlZmF1bHQpLgorCisgICAiaXNkbmN0cmwgaWh1cCA8SW50ZXJmYWNlTmFtZT4gW29ufG9mZl0iCisgICBTd2l0Y2ggdGhlIGhhbmctdXAtdGltZXIgZm9yIGluY29taW5nIGNhbGxzIG9uIG9yIG9mZi4KKworICAgImlzZG5jdHJsIGVheiA8SW50ZXJmYWNlTmFtZT4iCisgICBSZXR1cm5zIHRoZSBFQVogb2YgYW4gaW50ZXJmYWNlLgorCisgICAiaXNkbmN0cmwgZGVscGhvbmUgPEludGVyZmFjZU5hbWU+IGlufG91dCA8bnVtYmVyPiIKKyAgIERlbGV0ZXMgYSBudW1iZXIgZnJvbSBvbmUgb2YgdGhlIGFjY2Vzcy1saXN0cyBvZiB0aGUgaW50ZXJmYWNlLgorCisgICAiaXNkbmN0cmwgZGVsaWYgPEludGVyZmFjZU5hbWU+IgorICAgUmVtb3ZlcyB0aGUgaW50ZXJmYWNlIChhbmQgcG9zc2libGUgc2xhdmVzKSBmcm9tIHRoZSBrZXJuZWwuCisgICAoWW91IGhhdmUgdG8gdW5yZWdpc3RlciBpdCB3aXRoICJpZmNvbmZpZyA8SW50ZXJmYWNlTmFtZT4gZG93biIgYmVmb3JlKS4KKworICAgImlzZG5jdHJsIGNhbGxiYWNrIDxJbnRlcmZhY2VOYW1lPiBbb258b2ZmXSIKKyAgIFN3aXRjaGVzIGFuIGludGVyZmFjZSB0byBjYWxsYmFjay1tb2RlLiBJbiB0aGlzIG1vZGUsIGFuIGluY29taW5nIGNhbGwKKyAgIHdpbGwgYmUgcmVqZWN0ZWQgYW5kIGFmdGVyIHRoaXMgdGhlIHJlbW90ZS1zdGF0aW9uIHdpbGwgYmUgY2FsbGVkLiBJZgorICAgeW91IHRlc3QgdGhpcyBmZWF0dXJlIGJ5IHVzaW5nIHBpbmcsIHNvbWUgcm91dGVycyB3aWxsIHJlLWRpYWwgdmVyeQorICAgcXVpY2tseSwgc28gdGhhdCB0aGUgY2FsbGJhY2sgZnJvbSBpc2RuNGxpbnV4IG1heSBub3QgYmUgcmVjb2duaXplZC4KKyAgIEluIHRoaXMgY2FzZSB1c2UgcGluZyB3aXRoIHRoZSBvcHRpb24gLWkgPHNlYz4gdG8gaW5jcmVhc2UgdGhlIGludGVydmFsCisgICBiZXR3ZWVuIGVjaG8tcGFja2V0cy4KKworICAgImlzZG5jdHJsIGNiZGVsYXkgPEludGVyZmFjZU5hbWU+IFtzZWNvbmRzXSIKKyAgIFNldHMgdGhlIGRlbGF5IChkZWZhdWx0IDUgc2VjKSBiZXR3ZWVuIGFuIGluY29taW5nIGNhbGwgYW5kIHN0YXJ0IG9mCisgICBkaWFsaW5nIHdoZW4gY2FsbGJhY2sgaXMgZW5hYmxlZC4KKworICAgImlzZG5jdHJsIGNiaHVwIDxJbnRlcmZhY2VOYW1lPiBbb258b2ZmXSIKKyAgIFRoaXMgZW5hYmxlcyAoZGVmYXVsdCkgb3IgZGlzYWJsZXMgYW4gYWN0aXZlIGhhbmd1cCAocmVqZWN0KSB3aGVuIGdldHRpbmcgYW4KKyAgIGluY29taW5nIGNhbGwgZm9yIGFuIGludGVyZmFjZSB3aGljaCBpcyBjb25maWd1cmVkIGZvciBjYWxsYmFjay4KKworICAgImlzZG5jdHJsIGVuY2FwIDxJbnRlcmZhY2VOYW1lPiA8RW5jYXBUeXBlPiIKKyAgIFNlbGVjdHMgdGhlIHR5cGUgb2YgcGFja2V0LWVuY2Fwc3VsYXRpb24uIFRoZSBlbmNhcHN1bGF0aW9uIGNhbiBiZSBjaGFuZ2VkCisgICBvbmx5IHdoaWxlIGFuIGludGVyZmFjZSBpcyBkb3duLgorCisgICBBdCB0aGUgbW9tZW50IHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgIHJhd2lwICAgIChEZWZhdWx0KSBTZWxlY3RzIHJhdy1JUC1lbmNhcHN1bGF0aW9uLiBUaGlzIG1lYW5zLCBNQUMtaGVhZGVycworICAgICAgICAgICAgYXJlIHN0cmlwcGVkIG9mZi4KKyAgIGlwICAgICAgIElQIHdpdGggdHlwZS1maWVsZC4gU2FtZSBhcyBJUCBidXQgdGhlIHR5cGUtZmllbGQgb2YgdGhlIE1BQy1oZWFkZXIKKyAgICAgICAgICAgIGlzIHByZXNlcnZlZC4KKyAgIHgyNWlmYWNlIFguMjUgaW50ZXJmYWNlIGVuY2Fwc3VsYXRpb24gKGZpcnN0IGJ5dGUgc2VtYW50aWNzIGFzIGRlZmluZWQgaW4KKyAgICAgICAgICAgIC4uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dCkuIFVzZSB0aGlzIGZvciBydW5uaW5nIHRoZSBsaW51eAorICAgICAgICAgICAgWC4yNSBuZXR3b3JrIHByb3RvY29sIHN0YWNrIChBRl9YMjUgc29ja2V0cykgb24gdG9wIG9mIGlzZG4uCisgICBjaXNjby1oICBBIHNwZWNpYWwtbW9kZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGEgQ2lzY28sIHdoaWNoIGlzIGNvbmZpZ3VyZWQKKyAgICAgICAgICAgIHRvIGRvICJoZGxjIgorICAgZXRoZXJuZXQgTm8gc3RyaXBwaW5nLiBQYWNrZXRzIGFyZSBzZW50IHdpdGggZnVsbCBNQUMtaGVhZGVyLgorICAgICAgICAgICAgVGhlIEV0aGVybmV0LWFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZSBpcyBmYWtlZCwgZnJvbSBpdHMKKyAgICAgICAgICAgIElQLWFkZHJlc3M6IGZjOmZjOmkxOmkyOmkzOmk0LCB3aGVyZSBpMS00IGFyZSB0aGUgSVAtYWRkci4tdmFsdWVzLgorICAgc3luY3BwcCAgU3luY2hyb25vdXMgUFBQCisKKyAgIHVpaGRsYyAgIEhETEMgd2l0aCBVSS1mcmFtZS1oZWFkZXIgKGZvciB1c2Ugd2l0aCBET1MgSVNQQSwgb3B0aW9uIC1oMSkKKworCisgICBOT1RFOiAgICB4MjVpZmFjZSBlbmNhcHN1bGF0aW9uIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwuIFBsZWFzZQorICAgICAgICAgICAgcmVhZCBSRUFETUUueDI1IGZvciBmdXJ0aGVyIGRldGFpbHMKKworCisgICBXYXRjaGluZyBwYWNrZXRzLCB1c2luZyBzdGFuZGFyZC10Y3BkdW1wIHdpbGwgZmFpbCBmb3IgYWxsIGVuY2Fwc3VsYXRpb25zCisgICBleGNlcHQgZXRoZXJuZXQgYmVjYXVzZSB0Y3BkdW1wIGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZSBwYWNrZXRzCisgICB3aXRob3V0IE1BQy1oZWFkZXIuIEEgcGF0Y2ggZm9yIHRjcGR1bXAgaXMgaW5jbHVkZWQgaW4gdGhlIHV0aWxpdHktcGFja2FnZQorICAgbWVudGlvbmVkIGFib3ZlLgorCisgICAiaXNkbmN0cmwgbDJfcHJvdCA8SW50ZXJmYWNlTmFtZT4gPEwyLVByb3RvY29sTmFtZT4iCisgICBTZWxlY3RzIGEgbGF5ZXItMi1wcm90b2NvbC4KKyAgIChXaXRoIHRoZSBJQ04tZHJpdmVyIGFuZCB0aGUgSGlTYXgtZHJpdmVyLCAieDc1aSIgYW5kICJoZGxjIiBpcyBhdmFpbGFibGUuCisgICBXaXRoIG90aGVyIGRyaXZlcnMsICJ4NzV1aSIsICJ4NzVidWkiLCAieDI1ZHRlIiwgIngyNWRjZSIgbWF5IGJlCisgICBwb3NzaWJsZSB0b28uIFNlZSBSRUFETUUueDI1IGZvciB4MjUgcmVsYXRlZCBsMiBwcm90b2NvbHMuKQorCisgICBpc2RuY3RybCBsM19wcm90IDxJbnRlcmZhY2VOYW1lPiA8TDMtUHJvdG9jb2xOYW1lPgorICAgVGhlIHNhbWUgZm9yIGxheWVyLTMuIChBdCB0aGUgbW9tZW50IG9ubHkgInRyYW5zIiBpcyBhbGxvd2VkKQorCisgICAiaXNkbmN0cmwgbGlzdCA8SW50ZXJmYWNlTmFtZT4iCisgICBTaG93cyBhbGwgcGFyYW1ldGVycyBvZiBhbiBpbnRlcmZhY2UgYW5kIHRoZSBjaGFyZ2UtaW5mby4KKyAgIFRyeSAiYWxsIiBhcyB0aGUgaW50ZXJmYWNlIG5hbWUuCisKKyAgICJpc2RuY3RybCBoYW5ndXAgPEludGVyZmFjZU5hbWU+IgorICAgRm9yY2VzIGhhbmd1cCBvZiBhbiBpbnRlcmZhY2UuCisKKyAgICJpc2RuY3RybCBiaW5kIDxJbnRlcmZhY2VOYW1lPiA8RHJpdmVySWQ+LDxDaGFubmVsTnVtYmVyPiBbZXhjbHVzaXZlXSIKKyAgIElmIHlvdSBhcmUgdXNpbmcgbW9yZSB0aGFuIG9uZSBJU0ROIGNhcmQsIGl0IGlzIHNvbWV0aW1lcyBuZWNlc3NhcnkgdG8KKyAgIGRpYWwgb3V0IHVzaW5nIGEgc3BlY2lmaWMgY2FyZCBvciBldmVuIHByZXNlcnZlIGEgc3BlY2lmaWMgY2hhbm5lbCBmb3IKKyAgIGRpYWxvdXQgb2YgYSBzcGVjaWZpYyBuZXQtaW50ZXJmYWNlLiBUaGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIGFib3ZlCisgICBjb21tYW5kLiBSZXBsYWNlIDxEcml2ZXJJZD4gYnkgd2hhdGV2ZXIgeW91IGFzc2lnbmVkIHdoaWxlIGxvYWRpbmcgdGhlCisgICBtb2R1bGUuIFRoZSA8Q2hhbm5lbE51bWJlcj4gaXMgY291bnRlZCBmcm9tIHplcm8uIFRoZSB1cHBlciBsaW1pdAorICAgZGVwZW5kcyBvbiB0aGUgY2FyZCB1c2VkLiBBdCB0aGUgbW9tZW50IG5vIGNhcmQgc3VwcG9ydHMgbW9yZSB0aGFuCisgICAyIGNoYW5uZWxzLCBzbyB0aGUgdXBwZXIgbGltaXQgaXMgb25lLgorCisgICAiaXNkbmN0cmwgdW5iaW5kIDxJbnRlcmZhY2VOYW1lPiIKKyAgIHVuYmluZHMgYSBwcmV2aW91c2x5IGJvdW5kIGludGVyZmFjZS4KKworICAgImlzZG5jdHJsIGJ1c3JlamVjdCA8RHJpdmVySWQ+IG9ufG9mZiIKKyAgIElmIHN3aXRjaGVkIG9uLCBpc2RuNGxpbnV4IHJlcGxpZXMgYSBSRUpFQ1QgdG8gaW5jb21pbmcgY2FsbHMsIGl0CisgICBjYW5ub3QgbWF0Y2ggdG8gYW55IGNvbmZpZ3VyZWQgaW50ZXJmYWNlLgorICAgSWYgc3dpdGNoZWQgb2ZmLCBub3RoaW5nIGhhcHBlbnMgaW4gdGhpcyBjYXNlLgorICAgWW91IG5vcm1hbGx5IHNob3VsZCBOT1QgZW5hYmxlIHRoaXMgZmVhdHVyZSwgaWYgdGhlIElTRE4gYWRhcHRlciBpcyBub3QKKyAgIHRoZSBvbmx5IGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIFMwLWJ1cy4gT3RoZXJ3aXNlIGl0IGNvdWxkIGhhcHBlbiB0aGF0CisgICBpc2RuNGxpbnV4IHJlamVjdHMgYW4gaW5jb21pbmcgY2FsbCwgd2hpY2ggYmVsb25ncyB0byBhbm90aGVyIGRldmljZSBvbgorICAgdGhlIGJ1cy4KKworICAgImlzZG5jdHJsIGFkZHNsYXZlIDxJbnRlcmZhY2VOYW1lPiA8U2xhdmVOYW1lPgorICAgQ3JlYXRlcyBhIHNsYXZlIGludGVyZmFjZSBmb3IgY2hhbm5lbC1idW5kbGluZy4gU2xhdmUgaW50ZXJmYWNlcyBhcmUKKyAgIG5vdCBzZWVuIGJ5IHRoZSBrZXJuZWwsIGJ1dCB0aGVpciBJU0ROLXBhcnQgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aAorICAgaXNkbmN0cmwgYXMgdXN1YWwuIChQaG9uZSBudW1iZXJzLCBFQVovTVNOLCB0aW1lb3V0cyBldGMuKSBJZiBtb3JlCisgICB0aGFuIHR3byBjaGFubmVscyBhcmUgdG8gYmUgYnVuZGxlZCwgZmVlbCBmcmVlIHRvIGNyZWF0ZSBhcyBtYW55IGFzIHlvdQorICAgd2FudC4gSW50ZXJmYWNlTmFtZSBtdXN0IGJlIGEgcmVhbCBpbnRlcmZhY2UsIE5PVCBhIHNsYXZlLiBTbGF2ZSBpbnRlcmZhY2VzCisgICBzdGFydCBkaWFsaW5nLCBpZiB0aGUgbWFzdGVyIGludGVyZmFjZSByZXNwLiB0aGUgcHJldmlvdXMgc2xhdmUgaW50ZXJmYWNlCisgICBoYXMgYSBsb2FkIG9mIG1vcmUgdGhhbiA3MDAwIGNwcy4gVGhleSBoYW5ndXAgaWYgdGhlIGxvYWQgZ29lcyB1bmRlciA3MDAwCisgICBjcHMsIGFjY29yZGluZyB0byB0aGVpciAiaHVwdGltZW91dCItcGFyYW1ldGVyLgorCisgICAiaXNkbmN0cmwgc2RlbGF5IDxJbnRlcmZhY2VOYW1lPiBzZWNzLiIKKyAgIFRoaXMgc2V0cyB0aGUgbWluaW11bSB0aW1lIGFuIEludGVyZmFjZSBoYXMgdG8gYmUgZnVsbHkgbG9hZGVkLCB1bnRpbAorICAgaXQgc2VuZHMgYSBkaWFsLXJlcXVlc3QgdG8gaXRzIHNsYXZlLgorCisgICAiaXNkbmN0cmwgZGlhbCA8SW50ZXJmYWNlTmFtZT4iCisgICBGb3JjZXMgYW4gaW50ZXJmYWNlIHRvIHN0YXJ0IGRpYWxpbmcgZXZlbiBpZiBubyBwYWNrZXRzIGFyZSB0byBiZQorICAgdHJhbnNmZXJyZWQuCisKKyAgICJpc2RuY3RybCBtYXBwaW5nIDxEcml2ZXJJZD4gTVNOMCxNU04xLE1TTjIsLi4uTVNOOSIKKyAgIFRoaXMgaW5zdGFsbHMgYSBtYXBwaW5nIHRhYmxlIGZvciBFQVo8LT5NU04tbWFwcGluZyBmb3IgYSBzaW5nbGUgbGluZS4KKyAgIE1pc3NpbmcgTVNOJ3MgaGF2ZSB0byBiZSBnaXZlbiBhcyAiLSIgb3IgY2FuIGJlIG9taXR0ZWQsIGlmIGF0IHRoZSBlbmQKKyAgIG9mIHRoZSBjb21tYW5kbGluZS4KKyAgIFdpdGggdGhpcyBjb21tYW5kLCBpdCdzIG5vdyBwb3NzaWJsZSB0byBoYXZlIGFuIGludGVyZmFjZSBsaXN0ZW5pbmcgdG8KKyAgIG1peGVkIDFUUjYtIGFuZCBFdXJvLVR5cGUgbGluZXMuIEluIHRoaXMgY2FzZSwgdGhlIGludGVyZmFjZSBoYXMgdG8gYmUKKyAgIGNvbmZpZ3VyZWQgdG8gYSAxVFI2LXR5cGUgRUFaIChvbmUgZGlnaXQpLiBUaGUgbWFwcGluZyBpcyBhbHNvIHZhbGlkCisgICBmb3IgdHR5LWVtdWxhdGlvbi4gU2VlbiBmcm9tIHRoZSBpbnRlcmZhY2UvdHR5LWxldmVsIHRoZSBtYXBwaW5nCisgICBDQU4gYmUgdXNlZCwgaG93ZXZlciBpdCdzIHBvc3NpYmxlIHRvIHVzZSBzaW5nbGUgdHR5J3MvaW50ZXJmYWNlcyB3aXRoCisgICByZWFsIE1TTidzIChtb3JlIGRpZ2l0cykgYWxzbywgaW4gd2hpY2ggY2FzZSB0aGUgbWFwcGluZyB3aWxsIGJlIGlnbm9yZWQuCisgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisKKyAgIFlvdSBoYXZlIGEgMVRSNi10eXBlIGxpbmUgd2l0aCBiYXNlLW5yLiAxMjM0NTY3IGFuZCBhIEV1cm8tbGluZSB3aXRoCisgICBNU04ncyA5ODc2NTQsIDk4NzY1NSBhbmQgOTg3NjU2LiBUaGUgRHJpdmVySWQgZm9yIHRoZSBFdXJvLWxpbmUgaXMgIkVVUk8iLgorCisgICBpc2RuY3RybCBtYXBwaW5nIEVVUk8gLSw5ODc2NTQsOTg3NjU1LDk4NzY1NiwtLDk4NzY1NQorICAgLi4uCisgICBpc2RuY3RybCBlYXogaXNkbjAgMSAgICAgICMgbGlzdGVuIG9uIDEyMzQ1NjcxKDF0cjYpIGFuZCA5ODc2NTQoZXVybykKKyAgIC4uLgorICAgaXNkbmN0cmwgZWF6IGlzZG4xIDQgICAgICAjIGxpc3RlbiBvbiAxMjM0NTY3NCgxdHI2KSBvbmx5LgorICAgLi4uCisgICBpc2RuY3RybCBlYXogaXNkbjIgOTg3NjU0ICMgbGlzdGVuIG9uIDk4NzY1NChldXJvKSBvbmx5LgorCisgICBTYW1lIHNjaGVtZSBpcyB1c2VkIHdpdGggQVQmRS4uLiAgYXQgdGhlIHR0eSdzLgorCis2LiBJZiB5b3Ugd2FudCB0byB3cml0ZSBhIG5ldyBsb3ctbGV2ZWwtZHJpdmVyLCB5b3UgYXJlIHdlbGNvbWUuCisgICBUaGUgaW50ZXJmYWNlIHRvIHRoZSBsaW5rLWxldmVsLW1vZHVsZSBpcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgSU5URVJGQUNFLgorICAgSWYgdGhlIGludGVyZmFjZSBzaG91bGQgYmUgZXhwYW5kZWQgZm9yIGFueSByZWFzb24sIGRvbid0IGRvIGl0CisgICBvbiB5b3VyIG93biwgc2VuZCBtZSBhIG1haWwgY29udGFpbmluZyB0aGUgcHJvcG9zZWQgY2hhbmdlcyBhbmQKKyAgIHNvbWUgcmVhc29uaW5nIGFib3V0IHRoZW0uCisgICBJZiBvdGhlciBkcml2ZXJzIHdpbGwgbm90IGJlIGFmZmVjdGVkLCBJIHdpbGwgaW5jbHVkZSB0aGUgY2hhbmdlcworICAgaW4gdGhlIG5leHQgcmVsZWFzZS4KKyAgIEZvciBkZXZlbG9wZXJzIG9ubHksIHRoZXJlIGlzIGEgc2Vjb25kIG1haWxpbmctbGlzdC4gV3JpdGUgdG8gbWUKKyAgIChmcml0ekBpc2RuNGxpbnV4LmRlKSwgaWYgeW91IHdhbnQgdG8gam9pbiB0aGF0IGxpc3QuCisKK0hhdmUgZnVuIQorCisgLUZyaXR6CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuRkFRIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5GQVEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU2Zjc5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuRkFRCkBAIC0wLDAgKzEsMjYgQEAKKworVGhlIEZBUSBmb3IgaXNkbjRsaW51eAorPT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGlzIGEgYmlnIEZBUSBhdmFpbGFibGUgaW4gdGhlIGlzZG40ay11dGlscy4KK1lvdSBmaW5kIGl0IGluOgorIGlzZG40ay11dGlscy9GQVEvaTRsZmFxLnNnbWwKKworSW4gY2FzZSB5b3UganVzdCB3YW50IHRvIHNlZSB0aGUgRkFRIG9ubGluZSwgb3IgZG93bmxvYWQgdGhlIG5ld2VzdCB2ZXJzaW9uLAoreW91IGNhbiBoYXZlIGEgbG9vayBhdCBteSB3ZWJzaXRlOgoraHR0cDovL3d3dy5taGVzc2xlci5kZS9pNGxmYXEvICh2aWV3ICsgZG93bmxvYWQpCitvcjoKK2h0dHA6Ly93d3cuaXNkbjRsaW51eC5kZS9mYXEvICh2aWV3KQorCitBcyB0aGUgZXh0ZW5zaW9uIHRlbGxzLCB0aGUgRkFRIGlzIGluIFNHTUwgZm9ybWF0LCBhbmQgeW91IGNhbiBjb252ZXJ0IGl0CitpbnRvIHRleHQvaHRtbC8uLi4gZm9ybWF0IGJ5IHVzaW5nIHRoZSBzZ21sMnR4dC9zZ21sMmh0bWwvLi4uIHRvb2xzLgorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGRvIGEgJ2NvbmZpZ3VyZTsgbWFrZSBhbGwnIGluIHRoZSBGQVEgZGlyZWN0b3J5LgorCisKK1BsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGUgRkFRIGJlZm9yZSBwb3N0aW5nIGFueXRoaW5nIGluIHRoZSBNYWlsaW5nbGlzdCwKK29yIHRoZSBuZXdzZ3JvdXAhCisKKworTWF0dGhpYXMgSGVzc2xlcgoraGVzc2xlckBpc2RuNGxpbnV4LmRlCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXggYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLkhpU2F4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMWM4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLkhpU2F4CkBAIC0wLDAgKzEsNjU5IEBACitIaVNheCBpcyBhIExpbnV4IGhhcmR3YXJlLWxldmVsIGRyaXZlciBmb3IgcGFzc2l2ZSBJU0ROIGNhcmRzIHdpdGggU2llbWVucworY2hpcHNldCAoSVNBQ19TIDIwODUvMjA4Ni8yMTg2LCBIU0NYIFNBQiA4MjUyNSkuIEl0IGlzIGJhc2VkIG9uIHRoZSBUZWxlcworZHJpdmVyIGZyb20gSmFuIGRlbiBPdWRlbi4KK0l0IGlzIG1lYW50IHRvIGJlIHVzZWQgd2l0aCBpc2RuNGxpbnV4LCBhbiBJU0ROIGxpbmstbGV2ZWwgbW9kdWxlIGZvciBMaW51eAord3JpdHRlbiBieSBGcml0eiBFbGZlcnQuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCitTdXBwb3J0ZWQgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLQorCitUZWxlcyA4LjAvMTYuMC8xNi4zIGFuZCBjb21wYXRpYmxlIG9uZXMKK1RlbGVzIDE2LjNjCitUZWxlcyBTMC9QQ01DSUEKK1RlbGVzIFBDSQorVGVsZXMgUzBCb3gKK0NyZWF0aXggUzBCb3gKK0NyZWF0aXggUG5QIFMwCitDb21wYXEgSVNETiBTMCBJU0EgY2FyZAorQVZNIEExIChGcml0eiwgVGVsZWRhdCAxNTApCitBVk0gRnJpdHogUENNQ0lBCitBVk0gRnJpdHogUG5QCitBVk0gRnJpdHogUENJCitFTFNBIE1pY3JvbGluayBQQ0MtMTYsIFBDRiwgUENGLVBybywgUENDLTgKK0VMU0EgUXVpY2tzdGVwIDEwMDAKK0VMU0EgUXVpY2tzdGVwIDEwMDBQQ0kKK0VMU0EgUXVpY2tzdGVwIDMwMDAgKHNhbWUgc2V0dGluZ3MgYXMgUVMxMDAwKQorRUxTQSBRdWlja3N0ZXAgMzAwMFBDSQorRUxTQSBQQ01DSUEKK0lUSyBpeDEtbWljcm8gUmV2LjIKK0VpY29uIERpdmEgMi4wIElTQSBhbmQgUENJIChTMCBhbmQgVSBpbnRlcmZhY2UsIG5vIFBSTyB2ZXJzaW9uKQorRWljb24gRGl2YSAyLjAxIElTQSBhbmQgUENJCitFaWNvbiBEaXZhIDIuMDIgUENJCitFaWNvbiBEaXZhIFBpY2NvbGEKK0FTVVNDT00gTkVUV09SSyBJTkMuIElTRE5MaW5rIDEyOEsgUEMgYWRhcHRlciAob3JkZXIgY29kZSBJLUlOMTAwLVNULUQpCitEeW5hbGluayBJUzY0UEggKE9FTSB2ZXJzaW9uIG9mIEFTVVNDT00gTkVUV09SSyBJTkMuIElTRE5MaW5rIDEyOEsgYWRhcHRlcikKK1BDQklULURQIChPRU0gdmVyc2lvbiBvZiBBU1VTQ09NIE5FVFdPUksgSU5DLiBJU0ROTGluaykKK0hGQy0yQlMwIGJhc2VkIGNhcmRzIChUZWxlSW50IFNBMSkKK1NlZGxiYXVlciBTcGVlZCBDYXJkIChTcGVlZCBXaW4sIFRlbGVkYXQgMTAwLCBQQ0ksIEZheCspCitTZWRsYmF1ZXIgU3BlZWQgU3Rhci9TcGVlZCBTdGFyMiAoUENNQ0lBKQorU2VkbGJhdWVyIElTRE4tQ29udHJvbGxlciBQQy8xMDQKK1VTUiBTcG9ydHN0ZXIgaW50ZXJuYWwgVEEgKGNvbXBhdGlibGUgU3RvbGxtYW5uIHRpbmEtcHAgVjMpCitVU1IgaW50ZXJuYWwgVEEgUENJCitpdGggS29tbXVuaWthdGlvbnN0ZWNobmlrIEdtYkggTUlDIDE2IElTQSBjYXJkCitUcmF2ZXJzZSBUZWNobm9sb2dpZSBORVRqZXQgUENJIFMwIGNhcmQgYW5kIE5FVHNwaWRlciBVIGNhcmQKK092aXNsaW5rIElTRE4gc2MxMDAtcCBjYXJkIChORVRqZXQgZHJpdmVyKQorRHIuIE5ldWhhdXMgTmljY3kgUG5QL1BDSQorU2llbWVucyBJLVN1cmYgMS4wCitTaWVtZW5zIEktU3VyZiAyLjAgKHdpdGggSVBBQywgdHJ5IHR5cGUgMTIgYXN1c2NvbSkgCitBQ0VSIFAxMAorSFNUIFNhcGhpcgorQmVya29tIFRlbGVrb20gQTRUCitTY2l0ZWwgUXVhZHJvCitHYXplbCBJU0ROIGNhcmRzCitIRkMtUENJIGJhc2VkIGNhcmRzCitXaW5ib25kIFc2NjkyIGJhc2VkIGNhcmRzCitIRkMtUyssIEhGQy1TUC9QQ01DSUEgY2FyZHMKK2Zvcm11bGEtbiBlbnRlcm5vdworR2VyZGVzIFBvd2VyIElTRE4KKworTm90ZTogUENGLCBQQ0YtUHJvOiB1cCB0byBub3csIG9ubHkgdGhlIElTRE4gcGFydCBpcyBzdXBwb3J0ZWQKKyAgICAgIFBDQy04OiBub3QgdGVzdGVkIHlldAorICAgICAgRWljb24uRGllaGwgRGl2YSBVIGludGVyZmFjZSBub3QgdGVzdGVkCisKK0lmIHlvdSBrbm93IG90aGVyIHBhc3NpdmUgY2FyZHMgd2l0aCB0aGUgU2llbWVucyBjaGlwc2V0LCBwbGVhc2UgbGV0IG1lIGtub3cuCitZb3UgY2FuIGNvbWJpbmUgYW55IGNhcmQsIGlmIHRoZXJlIGlzIG5vIGNvbmZsaWN0IGJldHdlZW4gdGhlIHJlc291cmNlcworKGlvLCBtZW0sIGlycSkuCisKKworQ29uZmlndXJpbmcgdGhlIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgSGlTYXggZHJpdmVyIGNhbiBlaXRoZXIgYmUgYnVpbHQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIG9yIGFzIGEgbW9kdWxlLgorSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGNvbW1hbmQgbGluZSBmZWF0dXJlIHdoaWxlIGxvYWRpbmcgdGhlIGtlcm5lbAord2l0aCBMSUxPIG9yIExPQURMSU4gb3IsIGlmIGJ1aWx0IGFzIGEgbW9kdWxlLCB1c2luZyBpbnNtb2QvbW9kcHJvYmUgd2l0aAorcGFyYW1ldGVycy4KK1RoZXJlIGlzIGFsc28gc29tZSBjb25maWcgbmVlZGVkIGJlZm9yZSB5b3UgY29tcGlsZSB0aGUga2VybmVsIGFuZC9vcgorbW9kdWxlcy4gSXQgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCAibWFrZSBbbWVudV1jb25maWciIHRhcmdldCBhdCB0aGUKK2tlcm5lbC4gRG9uJ3QgZm9yZ2V0IGl0LCBlc3BlY2lhbGx5IHRvIHNlbGVjdCB0aGUgcmlnaHQgRC1jaGFubmVsIHByb3RvY29sLgorCitQbGVhc2Ugbm90ZTogSW4gb2xkZXIgdmVyc2lvbnMgb2YgdGhlIEhpU2F4IGRyaXZlciwgYWxsIFBuUCBjYXJkcworbmVlZGVkIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpc2FwbnAgYW5kIHdvcmtlZCBvbmx5IHdpdGggdGhlIEhpU2F4Citkcml2ZXIgdXNlZCBhcyBhIG1vZHVsZS4KKworSW4gdGhlIGN1cnJlbnQgdmVyc2lvbiwgSGlTYXggd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgaW4ta2VybmVsCitJU0FQblAgc3VwcG9ydCwgcHJvdmlkZWQgeW91IHNlbGVjdGVkIGl0IGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbgorKENPTkZJR19JU0FQTlApLCBpZiB5b3UgZG9uJ3QgZ2l2ZSB0aGUgaW89LCBpcnE9IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLgorCitUaGUgYWZmZWN0ZWQgY2FyZCB0eXBlcyBhcmU6IDQsNywxMiwxNCwxOSwyNy0zMAorCithKSB3aGVuIGJ1aWx0IGFzIGEgbW9kdWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2luc21vZC9tb2Rwcm9iZSAgaGlzYXgubyBcCisgIGlvPWlvYmFzZSBpcnE9SVJRIG1lbT1tZW1iYXNlIHR5cGU9Y2FyZF90eXBlIFwKKyAgcHJvdG9jb2w9RF9jaGFubmVsX3Byb3RvY29sIGlkPWlkc3RyaW5nCisKK29yLCBpZiBzZXZlcmFsIGNhcmRzIGFyZSBpbnN0YWxsZWQ6CisKK2luc21vZC9tb2Rwcm9iZSBoaXNheC5vIFwKKyAgaW89aW9iYXNlMSxpb2Jhc2UyLC4uLiBpcnE9SVJRMSxJUlEyLC4uLiBtZW09bWVtYmFzZTEsbWVtYmFzZTIsLi4uIFwKKyAgdHlwZT1jYXJkX3R5cGUxLGNhcmRfdHlwZTIsLi4uIFwKKyAgcHJvdG9jb2w9RF9jaGFubmVsX3Byb3RvY29sMSxEX2NoYW5uZWxfcHJvdG9jb2wyLC4uLiBcCisgIGlkPWlkc3RyaW5nMSVpZHN0cmluZzIgLi4uCisKK3doZXJlICJpb2Jhc2VOIiByZXByZXNlbnRzIHRoZSBJL08gYmFzZSBhZGRyZXNzIG9mIHRoZSBOdGggY2FyZCwgIm1lbWJhc2VOIgordGhlIG1lbW9yeSBiYXNlIGFkZHJlc3Mgb2YgdGhlIE50aCBjYXJkLCBldGMuCisKK1RoZSByZWFzb24gZm9yIHRoZSBkZWxpbWl0ZXIgIiUiIGJlaW5nIHVzZWQgaW4gdGhlIGlkc3RyaW5ncyBpcyB0aGF0ICIsIgord29uJ3Qgd29yayB3aXRoIHRoZSBjdXJyZW50IG1vZHVsZXMgcGFja2FnZS4KKworVGhlIHBhcmFtZXRlcnMgbWF5IGJlIHNwZWNpZmllZCBpbiBhbnkgb3JkZXIuIEZvciBleGFtcGxlLCB0aGUgImlvIgorcGFyYW1ldGVyIG1heSBwcmVjZWRlIHRoZSAiaXJxIiBwYXJhbWV0ZXIsIG9yIHZpY2UgdmVyc2EuIElmIHNldmVyYWwKK2NhcmRzIGFyZSBpbnN0YWxsZWQsIHRoZSBvcmRlcmluZyB3aXRoaW4gdGhlIGNvbW1hIHNlcGFyYXRlZCBwYXJhbWV0ZXIKK2xpc3RzIG11c3Qgb2YgY291cnNlIGJlIGNvbnNpc3RlbnQuCisKK09ubHkgcGFyYW1ldGVycyBhcHBsaWNhYmxlIHRvIHRoZSBjYXJkIHR5cGUgbmVlZCB0byBiZSBzcGVjaWZpZWQuIEZvcgorZXhhbXBsZSwgdGhlIFRlbGVzIDE2LjMgY2FyZCBpcyBub3QgbWVtb3J5LW1hcHBlZCwgc28gdGhlICJtZW0iCitwYXJhbWV0ZXIgbWF5IGJlIG9taXR0ZWQgZm9yIHRoaXMgY2FyZC4gU29tZXRpbWVzIGl0IG1heSBiZSBuZWNlc3NhcnkKK3RvIHNwZWNpZnkgYSBkdW1teSBwYXJhbWV0ZXIsIGhvd2V2ZXIuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcworYSBjYXJkIG9mIGEgZGlmZmVyZW50IHR5cGUgbGF0ZXIgaW4gdGhlIGxpc3QgdGhhdCBuZWVkcyBhIHBhcmFtZXRlcgord2hpY2ggdGhlIHByZWNlZGluZyBjYXJkIGRvZXMgbm90LiBGb3IgaW5zdGFuY2UsIGlmIGEgVGVsZXMgMTYuMCBjYXJkCitpcyBsaXN0ZWQgYWZ0ZXIgYSBUZWxlcyAxNi4zIGNhcmQsIGEgZHVtbXkgbWVtb3J5IGJhc2UgcGFyYW1ldGVyIG9mIDAKK211c3QgYmUgc3BlY2lmaWVkIGZvciB0aGUgMTYuMy4gSW5zdGVhZCBvZiBhIGR1bW15IHZhbHVlLCB0aGUgcGFyYW1ldGVyCitjYW4gYWxzbyBiZSBza2lwcGVkIGJ5IHNpbXBseSBvbWl0dGluZyB0aGUgdmFsdWUuIEZvciBleGFtcGxlOgorbWVtPSwweGQwMDAwLiBTZWUgZXhhbXBsZSA2IGJlbG93LgorCitUaGUgcGFyYW1ldGVyIGZvciB0aGUgRC1DaGFubmVsIHByb3RvY29sIG1heSBiZSBvbWl0dGVkIGlmIHlvdSBzZWxlY3RlZCB0aGUKK2NvcnJlY3Qgb25lIGR1cmluZyBrZXJuZWwgY29uZmlnLiBWYWxpZCB2YWx1ZXMgYXJlICIxIiBmb3IgR2VybWFuIDFUUjYsCisiMiIgZm9yIEVEU1MxIChFdXJvIElTRE4pLCAiMyIgZm9yIGxlYXNlZCBsaW5lcyAobm8gRC1DaGFubmVsKSBhbmQgIjQiCitmb3IgVVMgTkkxLgorV2l0aCBVUyBOSTEgeW91IGhhdmUgdG8gaW5jbHVkZSB5b3VyIFNQSUQgaW50byB0aGUgTVNOIHNldHRpbmcgaW4gdGhlIGZvcm0KKzxNU04+OjxTUElEPiBmb3IgZXhhbXBsZSAoeW91ciBwaG9uZW51bWJlciBpcyAxMjM0IHlvdXIgU1BJRCA1Njc4KToKK0FUJkUxMjM0OjU2NzggICAgICAgICAgICAgICAgICAgICAgIG9uIHR0eUkgaW50ZXJmYWNlcworaXNkbmN0cmwgZWF6IGlwcHAwIDEyMzQ6NTY3OCAgICAgICAgb24gbmV0d29yayBkZXZpY2VzCisKK1RoZSBDcmVhdGl4L1RlbGVzIFBuUCBjYXJkcyB1c2UgaW8xPSBhbmQgaW8yPSBpbnN0ZWFkIG9mIGlvPSBmb3Igc3BlY2lmeWluZwordGhlIEkvTyBhZGRyZXNzZXMgb2YgdGhlIElTQUMgYW5kIEhTQ1ggY2hpcHMsIHJlc3BlY3RpdmVseS4KKworQ2FyZCB0eXBlczoKKworICAgIFR5cGUgICAgICAgICAgICAgICAgUmVxdWlyZWQgcGFyYW1ldGVycyAoaW4gYWRkaXRpb24gdG8gdHlwZSBhbmQgcHJvdG9jb2wpCisKKyAgICAxICAgVGVsZXMgMTYuMCAgICAgICAgICAgICAgIGlycSwgbWVtLCBpbworICAgIDIgICBUZWxlcyAgOC4wICAgICAgICAgICAgICAgaXJxLCBtZW0KKyAgICAzICAgVGVsZXMgMTYuMyAobm9uIFBuUCkgICAgIGlycSwgaW8KKyAgICA0ICAgQ3JlYXRpeC9UZWxlcyBQblAgICAgICAgIGlycSwgaW8wIChJU0FDKSwgaW8xIChIU0NYKQorICAgIDUgICBBVk0gQTEgKEZyaXR6KSAgICAgICAgICAgaXJxLCBpbworICAgIDYgICBFTFNBIFBDQy9QQ0YgY2FyZHMgICAgICAgaW8gb3Igbm90aGluZyBmb3IgYXV0b2RldGVjdCAodGhlIGlvYmFzZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgb25seSBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIEVMU0EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQgaW4geW91ciBQQykKKyAgICA3ICAgRUxTQSBRdWlja3N0ZXAgMTAwMCAgICAgIGlycSwgaW8gIChmcm9tIGlzYXBucCBzZXR1cCkKKyAgICA4ICAgVGVsZXMgMTYuMyBQQ01DSUEgICAgIAkgaXJxLCBpbworICAgIDkgICBJVEsgaXgxLW1pY3JvIFJldi4yICAgICAgaXJxLCBpbworICAgMTAgICBFTFNBIFBDTUNJQQkJIGlycSwgaW8gIChzZXQgd2l0aCBjYXJkIG1hbmFnZXIpCisgICAxMSAgIEVpY29uLkRpZWhsIERpdmEgSVNBIFBuUCBpcnEsIGlvCisgICAxMSAgIEVpY29uLkRpZWhsIERpdmEgUENJICAgICBubyBwYXJhbWV0ZXIKKyAgIDEyICAgQVNVUyBDT00gSVNETkxpbmsgICAgICAgIGlycSwgaW8gIChmcm9tIGlzYXBucCBzZXR1cCkKKyAgIDEzICAgSEZDLTJCUzAgYmFzZWQgY2FyZHMgICAgIGlycSwgaW8KKyAgIDE0ICAgVGVsZXMgMTYuM2MgUG5QICAgICAgICAgIGlycSwgaW8KKyAgIDE1ICAgU2VkbGJhdWVyIFNwZWVkIENhcmQgICAgIGlycSwgaW8KKyAgIDE1ICAgU2VkbGJhdWVyIFBDLzEwNCAgICAgICAgIGlycSwgaW8KKyAgIDE1ICAgU2VkbGJhdWVyIFNwZWVkIFBDSQkgbm8gcGFyYW1ldGVyCisgICAxNiAgIFVTUiBTcG9ydHN0ZXIgaW50ZXJuYWwgICBpcnEsIGlvCisgICAxNyAgIE1JQyBjYXJkICAgICAgICAgICAgICAgICBpcnEsIGlvCisgICAxOCAgIEVMU0EgUXVpY2tzdGVwIDEwMDBQQ0kgICBubyBwYXJhbWV0ZXIKKyAgIDE5ICAgQ29tcGFxIElTRE4gUzAgSVNBIGNhcmQgIGlycSwgaW8wLCBpbzEsIGlvIChmcm9tIGlzYXBucCBzZXR1cCBpbz1JTzIpCisgICAyMCAgIE5FVGpldCBQQ0kgY2FyZCAgICAgICAgICBubyBwYXJhbWV0ZXIKKyAgIDIxICAgVGVsZXMgUENJICAgICAgICAgICAgICAgIG5vIHBhcmFtZXRlcgorICAgMjIgICBTZWRsYmF1ZXIgU3BlZWQgU3RhciAoUENNQ0lBKSBpcnEsIGlvIChzZXQgd2l0aCBjYXJkIG1hbmFnZXIpCisgICAyNCAgIERyLiBOZXVoYXVzIE5pY2N5IFBuUCAgICBpcnEsIGlvMCwgaW8xIChmcm9tIGlzYXBucCBzZXR1cCkKKyAgIDI0ICAgRHIuIE5ldWhhdXMgTmljY3kgUENJICAgIG5vIHBhcmFtZXRlcgorICAgMjUgICBUZWxlcyBTMEJveCAgICAgICAgICAgICAgaXJxLCBpbyAob2YgdGhlIHVzZWQgbHB0IHBvcnQpCisgICAyNiAgIEFWTSBBMSBQQ01DSUEgKEZyaXR6ISkgICBpcnEsIGlvIChzZXQgd2l0aCBjYXJkIG1hbmFnZXIpCisgICAyNyAgIEFWTSBQblAgKEZyaXR6IVBuUCkgICAgICBpcnEsIGlvICAoZnJvbSBpc2FwbnAgc2V0dXApCisgICAyNyAgIEFWTSBQQ0kgKEZyaXR6IVBDSSkgICAgICBubyBwYXJhbWV0ZXIKKyAgIDI4ICAgU2VkbGJhdWVyIFNwZWVkIEZheCsgICAgIGlycSwgaW8gKGZyb20gaXNhcG5wIHNldHVwKQorICAgMjkJU2llbWVucyBJLVN1cmYgMS4wICAgICAgIGlycSwgaW8sIG1lbW9yeSAoZnJvbSBpc2FwbnAgc2V0dXApICAgCisgICAzMAlBQ0VSIFAxMCAgICAgICAgICAgICAgICAgaXJxLCBpbyAoZnJvbSBpc2FwbnAgc2V0dXApICAgCisgICAzMQlIU1QgU2FwaGlyICAgICAgICAgICAgICAgaXJxLCBpbworICAgMzIJVGVsZWtvbSBBNFQgICAgICAgICAgICAgIG5vbmUKKyAgIDMzCVNjaXRlbCBRdWFkcm8JCSBzdWJjb250cm9sbGVyICg0KlMwLCBzdWJjdHJsIDEuLi40KQorICAgMzQJR2F6ZWwgSVNETiBjYXJkcyAoSVNBKSAgIGlycSxpbworICAgMzQJR2F6ZWwgSVNETiBjYXJkcyAoUENJKSAgIG5vbmUKKyAgIDM1CUhGQyAyQkRTMCBQQ0kgICAgICAgICAgICBub25lCisgICAzNglXNjY5MiBiYXNlZCBQQ0kgY2FyZHMgICAgbm9uZQorICAgMzcJSEZDIDJCRFMwIFMrLCBTUCAgICAgICAgIGlycSxpbyAKKyAgIDM4CU5FVHNwaWRlciBVIFBDSSBjYXJkICAgICBub25lCisgICAzOQlIRkMgMkJEUzAgU1AvUENNQ0lBICAgICAgaXJxLGlvIChzZXQgd2l0aCBjYXJkbWdyKQorICAgNDAgICBob3RwbHVnIGludGVyZmFjZQorICAgNDEgICBGb3JtdWxhLW4gZW50ZXI6bm93IFBDSSAgbm9uZQorCitBdCB0aGUgbW9tZW50IElSUSBzaGFyaW5nIGlzIG9ubHkgcG9zc2libGUgd2l0aCBQQ0kgY2FyZHMuIFBsZWFzZSBtYWtlIHN1cmUKK3RoYXQgeW91ciBJUlEgaXMgZnJlZSBhbmQgZW5hYmxlZCBmb3IgSVNBIHVzZS4KKworCitFeGFtcGxlcyBmb3IgbW9kdWxlIGxvYWRpbmcKKworMS4gVGVsZXMgMTYuMywgRXVybyBJU0ROLCBJL08gYmFzZSAyODAgaGV4LCBJUlEgMTAKKyAgIG1vZHByb2JlIGhpc2F4IHR5cGU9MyBwcm90b2NvbD0yIGlvPTB4MjgwIGlycT0xMAorCisyLiBUZWxlcyAxNi4wLCAxVFI2IElTRE4sIEkvTyBiYXNlIGQ4MCBoZXgsIElSUSA1LCBNZW1vcnkgZDAwMDAgaGV4CisgICBtb2Rwcm9iZSBoaXNheCBwcm90b2NvbD0xIHR5cGU9MSBpbz0weGQ4MCBtZW09MHhkMDAwMCBpcnE9NQorCiszLiBGcml0emNhcmQsIEV1cm8gSVNETiwgSS9PIGJhc2UgMzQwIGhleCwgSVJRIDEwIGFuZCBFTFNBIFBDRiwgRXVybyBJU0ROCisgICBtb2Rwcm9iZSBoaXNheCB0eXBlPTUsNiBwcm90b2NvbD0yLDIgaW89MHgzNDAgaXJxPTEwIGlkPUZyaXR6JUVsc2EKKworNC4gQW55IEVMU0EgUENDL1BDRiBjYXJkLCBFdXJvIElTRE4KKyAgIG1vZHByb2JlIGhpc2F4IHR5cGU9NiBwcm90b2NvbD0yCisKKzUuIFRlbGVzIDE2LjMgUG5QLCBFdXJvIElTRE4sIHdpdGggaXNhcG5wIGNvbmZpZ3VyZWQKKyAgIGlzYXBucCBjb25maWc6ICAoSU5UIDAgKElSUSAxMCAoTU9ERSArRSkpKQorIAkJICAgKElPIDAgKEJBU0UgMHgwNTgwKSkKKyAgICAgICAgICAgICAgICAgICAoSU8gMSAoQkFTRSAweDAxODApKQorICAgbW9kcHJvYmUgaGlzYXggdHlwZT00IHByb3RvY29sPTIgaXJxPTEwIGlvMD0weDU4MCBpbzE9MHgxODAKKworICAgSW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBIaVNheCwgeW91IGNhbiBpbnN0ZWFkIHNpbXBseSB1c2UKKworICAgbW9kcHJvYmUgaGlzYXggdHlwZT00IHByb3RvY29sPTIKKworICAgaWYgeW91IGNvbmZpZ3VyZWQgeW91ciBrZXJuZWwgZm9yIElTQVBuUC4gRG9uJ3QgcnVuIGlzYXBucCBpbgorICAgdGhpcyBjYXNlIQorCis2LiBUZWxlcyAxNi4zLCBFdXJvIElTRE4sIEkvTyBiYXNlIDI4MCBoZXgsIElSUSAxMiBhbmQKKyAgIFRlbGVzIDE2LjAsIDFUUjYsIElSUSA1LCBNZW1vcnkgZDAwMDAgaGV4CisgICBtb2Rwcm9iZSBoaXNheCB0eXBlPTMsMSBwcm90b2NvbD0yLDEgaW89MHgyODAgbWVtPTAsMHhkMDAwMAorCisgICBQbGVhc2Ugbm90ZSB0aGUgZHVtbXkgMCBtZW1vcnkgYWRkcmVzcyBmb3IgdGhlIFRlbGVzIDE2LjMsIHVzZWQgYXMgYQorICAgcGxhY2Vob2xkZXIgYXMgZGVzY3JpYmVkIGFib3ZlLCBpbiB0aGUgbGFzdCBleGFtcGxlLgorCis3LiBUZWxlcyBQQ01DSUEsIEV1cm8gSVNETiwgSS9PIGJhc2UgMTgwIGhleCwgSVJRIDE1IChkZWZhdWx0IHZhbHVlcykKKyAgIG1vZHByb2JlIGhpc2F4IHR5cGU9OCBwcm90b2NvbD0yIGlvPTB4MTgwIGlycT0xNQorCisKK2IpIHVzaW5nIExJTE8vTE9BRExJTiwgd2l0aCB0aGUgZHJpdmVyIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2hpc2F4PXR5cDEsZHAxLHBhXzEscGJfMSxwY18xWyx0eXAyLGRwMixwYV8yIC4uLiBcCisgICAgICB0eXBuLGRwbixwYV9uLHBiX24scGNfbl1bLGlkc3RyaW5nMVssaWRzdHJpbmcyLC4uLixpZHN0cmluZ25dXQorCit3aGVyZQorICAgICB0eXAxID0gdHlwZSBvZiAxc3QgY2FyZCAoZGVmYXVsdCBkZXBlbmRzIG9uIGtlcm5lbCBzZXR0aW5ncykKKyAgICAgZHAxICA9IEQtQ2hhbm5lbCBwcm90b2NvbCBvZiAxc3QgY2FyZC4gMT0xVFI2LCAyPUVEU1MxLCAzPWxlYXNlZAorICAgICBwYV8xID0gMXN0IHBhcmFtZXRlciAoZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRoZSBjYXJkKQorICAgICBwYl8xID0gMm5kIHBhcmFtZXRlciAoICAgICIgICAgICIgICAiICAgIiAgICIgICAiICAgIiAgKQorICAgICBwY18xID0gM3JkIHBhcmFtZXRlciAoICAgICIgICAgICIgICAiICAgIiAgICIgICAiICAgIiAgKQorCisgICAgIHR5cDIsZHAyLHBhXzIscGJfMixwY18yID0gUGFyYW1ldGVycyBvZiB0aGUgc2Vjb25kIGNhcmQgKGRlZmF1bHRzOiBub25lKQorICAgICB0eXBuLGRwbixwYV9uLHBiX24scGNfbiA9IFBhcmFtZXRlcnMgb2YgdGhlIG4ndGggY2FyZCAodXAgdG8gMTYgY2FyZHMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQpCisKKyAgICAgaWRzdHJpbmcgPSBEcml2ZXIgSUQgZm9yIGFjY2Vzc2luZyB0aGUgcGFydGljdWxhciBjYXJkIHdpdGggdXRpbGl0eQorICAgICAgICAgICAgICAgIHByb2dyYW1zIGFuZCBmb3IgaWRlbnRpZmljYXRpb24gd2hlbiB1c2luZyBhIGxpbmUgbW9uaXRvcgorICAgICAgICAgICAgICAgIChkZWZhdWx0OiAiSGlTYXgiKQorCisgICAgICAgICAgICAgICAgTm90ZTogdGhlIElEIHN0cmluZyBtdXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpY2FsIGNoYXJhY3RlciEKKworQ2FyZCB0eXBlczoKKwordHlwZQorICAgIDEgCVRlbGVzIDE2LjAgICAgIAkgICAgICAgIHBhPWlycSAgcGI9bWVtYmFzZSAgcGM9aW9iYXNlCisgICAgMiAJVGVsZXMgIDguMCAgICAgICAgICAgICAgcGE9aXJxICBwYj1tZW1iYXNlCisgICAgMyAJVGVsZXMgMTYuMyAgICAgICAgICAgICAgcGE9aXJxICBwYj1pb2Jhc2UKKyAgICA0IAlDcmVhdGl4L1RlbGVzIFBOUCAgICAgCU9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgIDUgCUFWTSBBMSAoRnJpdHopICAgICAgICAgIHBhPWlycSAgcGI9aW9iYXNlCisgICAgNiAJRUxTQSBQQ0MvUENGIGNhcmRzICAgICAgcGE9aW9iYXNlIG9yIG5vdGhpbmcgZm9yIGF1dG9kZXRlY3QKKyAgICA3ICAgRUxTQSBRdWlja3N0ZXAgMTAwMCAgICAgT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICAgOCAgIFRlbGVzIFMwIFBDTUNJQSAgICAgICAgIHBhPWlycSAgcGI9aW9iYXNlCisgICAgOSAgIElUSyBpeDEtbWljcm8gUmV2LjIgICAgIHBhPWlycSAgcGI9aW9iYXNlCisgICAxMCAgIEVMU0EgUENNQ0lBICAgICAgICAgICAgIHBhPWlycSwgcGI9aW8gIChzZXQgd2l0aCBjYXJkIG1hbmFnZXIpCisgICAxMSAgIEVpY29uLkRpZWhsIERpdmEgSVNBUG5QIE9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgMTEgICBFaWNvbi5EaWVobCBEaXZhIFBDSSAgICBubyBwYXJhbWV0ZXIKKyAgIDEyICAgQVNVUyBDT00gSVNETkxpbmsgICAgICAgT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICAxMwlIRkMtMkJTMCBiYXNlZCBjYXJkcyAgICBwYT1pcnEgIHBiPWlvCisgICAxNCAgIFRlbGVzIDE2LjNjIFBuUCAgICAgICAgIE9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgMTUJU2VkbGJhdWVyIFNwZWVkIENhcmQgICAgcGE9aXJxICBwYj1pbyAoU3BlZWQgV2luIG9ubHkgYXMgbW9kdWxlICEpCisgICAxNSAgIFNlZGxiYXVlciBQQy8xMDQgICAgICAgIHBhPWlycSAgcGI9aW8KKyAgIDE1ICAgU2VkbGJhdWVyIFNwZWVkIFBDSQlubyBwYXJhbWV0ZXIKKyAgIDE2ICAgVVNSIFNwb3J0c3RlciBpbnRlcm5hbCAgcGE9aXJxICBwYj1pbworICAgMTcgICBNSUMgY2FyZCAgICAgICAgICAgICAgICBwYT1pcnEgIHBiPWlvCisgICAxOCAgIEVMU0EgUXVpY2tzdGVwIDEwMDBQQ0kgIG5vIHBhcmFtZXRlcgorICAgMTkgICBDb21wYXEgSVNETiBTMCBJU0EgY2FyZCBPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgIDIwICAgTkVUamV0IFBDSSBjYXJkICAgICAgICAgbm8gcGFyYW1ldGVyCisgICAyMSAgIFRlbGVzIFBDSSAgICAgICAgICAgICAgIG5vIHBhcmFtZXRlcgorICAgMjIgICBTZWRsYmF1ZXIgU3BlZWQgU3RhciAoUENNQ0lBKSAgcGE9aXJxLCBwYj1pbyAgKHNldCB3aXRoIGNhcmQgbWFuYWdlcikKKyAgIDI0ICAgRHIuIE5ldWhhdXMgTmljY3kgUG5QICAgT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICAyNCAgIERyLiBOZXVoYXVzIE5pY2N5IFBDSSAgIG5vIHBhcmFtZXRlcgorICAgMjUgICBUZWxlcyBTMEJveCAgICAgICAgICAgICBwYT1pcnEsIHBiPWlvIChvZiB0aGUgdXNlZCBscHQgcG9ydCkKKyAgIDI2ICAgQVZNIEExIFBDTUNJQSAoRnJpdHohKSAgcGE9aXJxLCBwYj1pbyAoc2V0IHdpdGggY2FyZCBtYW5hZ2VyKQorICAgMjcgICBBVk0gUG5QIChGcml0eiFQblApICAgICBPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgIDI3ICAgQVZNIFBDSSAoRnJpdHohUENJKSAgICAgbm8gcGFyYW1ldGVyCisgICAyOCAgIFNlZGxiYXVlciBTcGVlZCBGYXgrICAgIE9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgMjkJU2llbWVucyBJLVN1cmYgMS4wICAgICAgT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICAzMAlBQ0VSIFAxMCAgICAgICAgICAgICAgICBPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgIDMxCUhTVCBTYXBoaXIgICAgICAgICAgICAgIHBhPWlycSwgcGI9aW8KKyAgIDMyCVRlbGVrb20gQTRUICAgICAgICAgICAgIG5vIHBhcmFtZXRlcgorICAgMzMJU2NpdGVsIFF1YWRybwkJc3ViY29udHJvbGxlciAoNCpTMCwgc3ViY3RybCAxLi4uNCkKKyAgIDM0CUdhemVsIElTRE4gY2FyZHMgKElTQSkgIHBhPWlycSwgcGI9aW8KKyAgIDM0CUdhemVsIElTRE4gY2FyZHMgKFBDSSkgIG5vIHBhcmFtZXRlcgorICAgMzUJSEZDIDJCRFMwIFBDSSAgICAgICAgICAgbm8gcGFyYW1ldGVyCisgICAzNglXNjY5MiBiYXNlZCBQQ0kgY2FyZHMgICBub25lCisgICAzNwlIRkMgMkJEUzAgUyssU1AvUENNQ0lBICBPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgIDM4CU5FVHNwaWRlciBVIFBDSSBjYXJkICAgIG5vbmUKKyAgIDM5CUhGQyAyQkRTMCBTUC9QQ01DSUEgICAgIE9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgNDAgICBob3RwbHVnIGludGVyZmFjZQlPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgIDQxICAgRm9ybXVsYS1uIGVudGVyOm5vdyBQQ0kgbm9uZQorCitSdW5uaW5nIHRoZSBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHlvdSBpbnNtb2QgaXNkbi5vIGFuZCBoaXNheC5vIChvciB3aXRoIHRoZSBpbi1rZXJuZWwgdmVyc2lvbiwgZHVyaW5nCitib290IHRpbWUpLCBhIGZldyBsaW5lcyBzaG91bGQgYXBwZWFyIGluIHlvdXIgc3lzbG9nLiBMb29rIGZvciBzb21ldGhpbmcgbGlrZToKKworQXByIDEzIDIxOjAxOjU5IGtrZTAxIGtlcm5lbDogSGlTYXg6IERyaXZlciBmb3IgU2llbWVucyBjaGlwIHNldCBJU0ROIGNhcmRzCitBcHIgMTMgMjE6MDE6NTkga2tlMDEga2VybmVsOiBIaVNheDogVmVyc2lvbiAyLjkKK0FwciAxMyAyMTowMTo1OSBra2UwMSBrZXJuZWw6IEhpU2F4OiBSZXZpc2lvbnMgMS4xNC8xLjkvMS4xMC8xLjI1LzEuOAorQXByIDEzIDIxOjAxOjU5IGtrZTAxIGtlcm5lbDogSGlTYXg6IFRvdGFsIDEgY2FyZCBkZWZpbmVkCitBcHIgMTMgMjE6MDE6NTkga2tlMDEga2VybmVsOiBIaVNheDogQ2FyZCAxIFByb3RvY29sIEVEU1MxIElkPUhpU2F4MSAoMCkKK0FwciAxMyAyMTowMTo1OSBra2UwMSBrZXJuZWw6IEhpU2F4OiBFbHNhIGRyaXZlciBSZXYuIDEuMTMKKy4uLgorQXByIDEzIDIxOjAxOjU5IGtrZTAxIGtlcm5lbDogRWxzYTogUENGLVBybyBmb3VuZCBhdCAweDM2MCBSZXYuOkMgSVJRIDEwCitBcHIgMTMgMjE6MDE6NTkga2tlMDEga2VybmVsOiBFbHNhOiB0aW1lciBPSzsgcmVzZXR0aW5nIGNhcmQKK0FwciAxMyAyMTowMTo1OSBra2UwMSBrZXJuZWw6IEVsc2E6IEhTQ1ggdmVyc2lvbiBBOiBWMi4xICBCOiBWMi4xCitBcHIgMTMgMjE6MDE6NTkga2tlMDEga2VybmVsOiBFbHNhOiBJU0FDIDIwODYvMjE4NiBWMS4xCisuLi4KK0FwciAxMyAyMTowMTo1OSBra2UwMSBrZXJuZWw6IEhpU2F4OiBEU1MxIFJldi4gMS4xNAorQXByIDEzIDIxOjAxOjU5IGtrZTAxIGtlcm5lbDogSGlTYXg6IDIgY2hhbm5lbHMgYWRkZWQKKworVGhpcyBtZWFucyB0aGF0IHRoZSBjYXJkIGlzIHJlYWR5IGZvciB1c2UuCitDYWJsaW5nIHByb2JsZW1zIG9yIGxpbmUtZG93bnMgYXJlIG5vdCBkZXRlY3RlZCwgYW5kIG9ubHkgc29tZSBFTFNBIGNhcmRzIGNhbgorZGV0ZWN0IHRoZSBTMCBwb3dlci4KKworUmVtZW1iZXIgdGhhdCwgYWNjb3JkaW5nIHRvIHRoZSBuZXcgc3RyYXRlZ3kgZm9yIGFjY2Vzc2luZyBsb3ctbGV2ZWwgZHJpdmVycworZnJvbSB3aXRoaW4gaXNkbjRsaW51eCwgeW91IHNob3VsZCBhbHNvIGRlZmluZSBhIGRyaXZlciBJRCB3aGlsZSBkb2luZworaW5zbW9kOiBTaW1wbHkgYXBwZW5kIGhpc2F4X2lkPTxTb21lU3RyaW5nPiB0byB0aGUgaW5zbW9kIGNvbW1hbmQgbGluZS4gVGhpcworc3RyaW5nIE1VU1QgTk9UIHN0YXJ0IHdpdGggYSBkaWdpdCBvciBhIHNtYWxsICd4JyEKKworQXQgdGhpcyBwb2ludCB5b3UgY2FuIHJ1biBhICdjYXQgL2Rldi9pc2RuY3RybDAnIGFuZCB2aWV3IGRlYnVnZ2luZyBtZXNzYWdlcy4KKworQXQgdGhlIG1vbWVudCwgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZSBlbmFibGVkIHdpdGggdGhlIGhpc2F4Y3RybCB0b29sOgorCisgICAgaGlzYXhjdHJsIDxEcml2ZXJJZD4gRGVidWdDbWQgPGRlYnVnZ2luZ19mbGFncz4KKworPERyaXZlcklkPiBkZWZhdWx0IGlzIEhpU2F4LCBpZiB5b3UgZGlkbid0IHNwZWNpZnkgb25lLgorCitEZWJ1Z0NtZCBpcyAgMSAgZm9yIGdlbmVyaWMgZGVidWdnaW5nCisgICAgICAgICAgICAxMSAgZm9yIGxheWVyIDEgZGV2ZWxvcG1lbnQgZGVidWdnaW5nCisgICAgICAgICAgICAxMyAgZm9yIGxheWVyIDMgZGV2ZWxvcG1lbnQgZGVidWdnaW5nCisKK3doZXJlIDxkZWJ1Z2dpbmdfZmxhZ3M+IGlzIHRoZSBpbnRlZ2VyIHN1bSBvZiB0aGUgZm9sbG93aW5nIGRlYnVnZ2luZworb3B0aW9ucyB5b3Ugd2lzaCBlbmFibGVkOgorCitXaXRoIERlYnVnQ21kIHNldCB0byAxOgorCisgICAweDAwMDEgIExpbmstbGV2ZWwgPC0tPiBoYXJkd2FyZS1sZXZlbCBjb21tdW5pY2F0aW9uCisgICAweDAwMDIgIFRvcCBzdGF0ZSBtYWNoaW5lCisgICAweDAwMDQgIEQtQ2hhbm5lbCBGcmFtZXMgZm9yIGlzZG5sb2cKKyAgIDB4MDAwOCAgRC1DaGFubmVsIFEuOTIxCisgICAweDAwMTAgIEItQ2hhbm5lbCBYLjc1CisgICAweDAwMjAgIEQtQ2hhbm5lbCBsMgorICAgMHgwMDQwICBCLUNoYW5uZWwgbDIKKyAgIDB4MDA4MCAgRC1DaGFubmVsIGxpbmsgc3RhdGUgZGVidWdnaW5nCisgICAweDAxMDAgIEItQ2hhbm5lbCBsaW5rIHN0YXRlIGRlYnVnZ2luZworICAgMHgwMjAwICBURUkgZGVidWcKKyAgIDB4MDQwMCAgTE9DSyBkZWJ1ZyBpbiBjYWxsYy5jCisgICAweDA4MDAgIE1vcmUgcGFyYW5vaWQgZGVidWcgaW4gY2FsbGMuYyAobm90IGZvciBub3JtYWwgdXNlKQorICAgMHgxMDAwICBELUNoYW5uZWwgbDEgc3RhdGUgZGVidWdnaW5nCisgICAweDIwMDAgIEItQ2hhbm5lbCBsMSBzdGF0ZSBkZWJ1Z2dpbmcKKworV2l0aCBEZWJ1Z0NtZCBzZXQgdG8gMTE6CisKKyAgIDB4MDAwMSAgV2FybmluZ3MgKGRlZmF1bHQ6IG9uKQorICAgMHgwMDAyICBJUlEgc3RhdHVzCisgICAweDAwMDQgIElTQUMKKyAgIDB4MDAwOCAgSVNBQyBGSUZPCisgICAweDAwMTAgIEhTQ1gKKyAgIDB4MDAyMCAgSFNDWCBGSUZPIChhdHRlbnRpb246IGZ1bGwgQi1DaGFubmVsIG91dHB1dCEpCisgICAweDAwNDAgIEQtQ2hhbm5lbCBMQVBEIGZyYW1lIHR5cGVzCisgICAweDAwODAgIElQQUMgZGVidWcKKyAgIDB4MDEwMCAgSEZDIHJlY2VpdmUgZGVidWcKKyAgIDB4MDIwMCAgSVNBQyBtb25pdG9yIGRlYnVnCisgICAweDA0MDAgIEQtQ2hhbm5lbCBmcmFtZXMgZm9yIGlzZG5sb2cgKHNldCB3aXRoIDEgMHg0IHRvbykKKyAgIDB4MDgwMCAgRC1DaGFubmVsIG1lc3NhZ2UgdmVyYm9zZQorCitXaXRoIERlYnVnQ21kIHNldCB0byAxMzoKKworICAgICAgICAgMSAgV2FybmluZ3MgKGRlZmF1bHQ6IG9uKQorICAgICAgICAgMiAgbDMgcHJvdG9jb2wgZGVzY3JpcHRvciBlcnJvcnMKKyAgICAgICAgIDQgIGwzIHN0YXRlIG1hY2hpbmUKKyAgICAgICAgIDggIGNoYXJnZSBpbmZvIGRlYnVnZ2luZyAoMVRSNikKKworRm9yIGV4YW1wbGUsICdoaXNheGN0cmwgSGlTYXggMSAweDNmZicgZW5hYmxlcyBmdWxsIGdlbmVyaWMgZGVidWdnaW5nLgorCitCZWNhdXNlIG9mIHNvbWUgb2JzY3VyZSBwcm9ibGVtcyB3aXRoIHNvbWUgc3dpdGNoIGVxdWlwbWVudCwgdGhlIGRlbGF5CitiZXR3ZWVuIHRoZSBDT05ORUNUIG1lc3NhZ2UgYW5kIHNlbmRpbmcgdGhlIGZpcnN0IGRhdGEgb24gdGhlIEItY2hhbm5lbCBpcyBub3cKK2NvbmZpZ3VyYWJsZSB3aXRoCisKK2hpc2F4Y3RybCA8RHJpdmVySWQ+IDIgPGRlbGF5PgorPGRlbGF5PiBpbiBtcyBWYWx1ZSBiZXR3ZWVuIDUwIGFuZCA4MDAgbXMgaXMgcmVjb21tZW5kZWQuCisKK0Rvd25sb2FkaW5nIEZpcm13YXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorQXQgdGhlIG1vbWVudCwgdGhlIFNlZGxiYXVlciBzcGVlZCBmYXgrIGlzIHRoZSBvbmx5IGNhcmQsIHdoaWNoCituZWVkcyB0byBkb3dubG9hZCBmaXJtd2FyZS4KK1RoZSBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIHdpdGggdGhlIGhpc2F4Y3RybCB0b29sOgorCisgICAgaGlzYXhjdHJsIDxEcml2ZXJJZD4gOSA8ZmlybXdhcmVfZmlsZW5hbWU+CisKKzxEcml2ZXJJZD4gZGVmYXVsdCBpcyBIaVNheCwgaWYgeW91IGRpZG4ndCBzcGVjaWZ5IG9uZSwKKword2hlcmUgPGZpcm13YXJlX2ZpbGVuYW1lPiBpcyB0aGUgZmlsZW5hbWUgb2YgdGhlIGZpcm13YXJlIGZpbGUuCisKK0ZvciBleGFtcGxlLCAnaGlzYXhjdHJsIEhpU2F4IDkgSVNBUi5CSU4nIGRvd25sb2FkcyB0aGUgZmlybXdhcmUgZm9yCitJU0FSIGJhc2VkIGNhcmRzIChsaWtlIHRoZSBTZWRsYmF1ZXIgc3BlZWQgZmF4KykuCisKK1dhcm5pbmcKKy0tLS0tLS0KK0hpU2F4IGlzIGEgd29yayBpbiBwcm9ncmVzcyBhbmQgbWF5IGNyYXNoIHlvdXIgbWFjaGluZS4KK0ZvciBjZXJ0aWZpY2F0aW9uIGxvb2sgYXQgSGlTYXguY2VydCBmaWxlLgorCitMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0KK0F0IHRoaXMgdGltZSwgSGlTYXggb25seSB3b3JrcyBvbiBFdXJvIElTRE4gbGluZXMgYW5kIEdlcm1hbiAxVFI2IGxpbmVzLgorRm9yIGxlYXNlZCBsaW5lcyBzZWUgYXBwZW5kaXguCisKK0J1Z3MKKy0tLS0KK0lmIHlvdSBmaW5kIGFueSwgcGxlYXNlIGxldCBtZSBrbm93LgorCisKK1RoYW5rcworLS0tLS0tCitTcGVjaWFsIHRoYW5rcyB0bzoKKworICAgICAgICBFbWlsIFN0ZXBoYW4gZm9yIHRoZSBuYW1lIEhpU2F4IHdoaWNoIGlzIGEgbWl4IG9mIEhTQ1ggYW5kIElTQUMuCisKKyAgICAgICAgRnJpdHogRWxmZXJ0LCBKYW4gZGVuIE91ZGVuLCBNaWNoYWVsIEhpcHAsIE1pY2hhZWwgV2VpbiwKKyAgICAgICAgQW5kcmVhcyBLb29sLCBQZWtrYSBTYXJuaWxhLCBTaW0gWXNrZXMsIEpvaGFuIE15cnJlJ2VuLAorCUtsYXVzLVBldGVyIE5pc2Noa2UgKElUSyBBRyksIENocmlzdG9mIFBldGlnLCBXZXJuZXIgRmVobiAoRUxTQSBHbWJIKSwKKwlWb2xrZXIgU2NobWlkdAorCUVkZ2FyIFRvZXJuaWcgYW5kIE1hcmN1cyBOaWVtYW5uIGZvciB0aGUgU2VkbGJhdWVyIGRyaXZlcgorCVN0ZXBoYW4gdm9uIEtyYXdjenluc2tpCisJSnVlcmdlbiBRdWFkZSBmb3IgdGhlIExlYXNlZCBMaW5lIHBhcnQKKwlLbGF1cyBMaWNodGVud2FsZGVyIChLbGF1cy5MaWNodGVud2FsZGVyQFdlYkZvcnVtLkRFKSwgZm9yIEVMU0EgUENNQ0lBIHN1cHBvcnQKKwlFbnJpayBCZXJraGFuIChlbnJpa0BzdGFyZmxlZXQuaW5rYS5kZSkgZm9yIFMwQk9YIHNwZWNpZmljIHN0dWZmCisJVG9uIHZhbiBSb3NtYWxlbiBmb3IgVGVsZXMgUENJCisJUGV0ciBOb3ZhayA8cGV0ci5ub3Zha0BpLmN6PiBmb3IgV2luYm9uZCBXNjY5MiBzdXBwb3J0CisJV2VybmVyIENvcm5lbGl1cyA8d2VybmVyQGlzZG40bGludXguZGU+IGZvciBIRkMtUENJLCBIRkMtUygrL1ApIGFuZCBzdXBwbGVtZW50YXJ5IHNlcnZpY2VzIHN1cHBvcnQKKyAgICAgICAgYW5kIG1vcmUgcGVvcGxlIHdobyBhcmUgaHVudGluZyBidWdzLiAoSWYgSSBmb3Jnb3Qgc29tZWJvZHksIHBsZWFzZQorCXNlbmQgbWUgYSBtYWlsKS4KKworICAgICAgICBGaXJtYSBFTFNBIEdtYkgKKyAgICAgICAgRmlybWEgRWljb24uRGllaGwgR21iSAorICAgICAgICBGaXJtYSBEeW5hbGluayBOTAorCUZpcm1hIEFTVVNDT00gTkVUV09SSyBJTkMuIFRhaXdhbgorCUZpcm1hIFMudS5TLkUKKwlGaXJtYSBpdGggS29tbXVuaWthdGlvbnN0ZWNobmlrIEdtYkgKKwlGaXJtYSBUcmF2ZXJzZSBUZWNobm9sb2dpZSBBdXN0cmFsaWEKKwlGaXJtYSBNZWR1c2EgR21iSCAgKHd3dy5tZWR1c2EuZGUpLgorCUZpcm1hIFF1YW50LVggQXVzdHJpYSBmb3Igc3BvbnNvcmluZyBhIERFQyBBbHBoYSBib2FyZCtDUFUKKwlGaXJtYSBDb2xvZ25lIENoaXAgRGVzaWducyBHbWJICisKKyAgICAgICAgTXkgZ2lybCBmcmllbmQgYW5kIHBhcnRuZXIgaW4gbGlmZSBVdGUgZm9yIGhlciBwYXRpZW5jZSB3aXRoIG1lLgorCisKK0Vuam95LAorCitLYXJzdGVuIEtlaWwKK2tlaWxAaXNkbjRsaW51eC5kZQorCisKK0FwcGVuZGl4OiBUZWxlcyBQQ01DSUEgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUKKyAgIGh0dHA6Ly93d3cuc3R1ZC51bmktd3VwcGVydGFsLmRlL35lYTAxNDEvcGNtY2lhLmh0bWwKK2ZvciBpbnN0cnVjdGlvbnMuCisKK0FwcGVuZGl4OiBMaW51eCBhbmQgSVNETi1sZWFzZWQgbGluZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3JpZ2luYWwgZnJvbSBKdWVyZ2VuIFF1YWRlLCBuZXcgdmVyc2lvbiBLS2UuCisKK0F0dGVudGlvbiBORVcgVkVSU0lPTiwgdGhlIG9sZCBsZWFzZWQgbGluZSBzeW50YXggd29uJ3Qgd29yayAhISEKKworWW91IGNhbiB1c2UgSGlTYXggdG8gY29ubmVjdCB5b3VyIExpbnV4LUJveCB2aWEgYW4gSVNETiBsZWFzZWQgbGluZQordG8gZS5nLiB0aGUgSW50ZXJuZXQ6CisKKzEuIEJ1aWxkIGEga2VybmVsIHdoaWNoIGluY2x1ZGVzIHRoZSBIaVNheCBkcml2ZXIgZWl0aGVyIGFzIGEgbW9kdWxlCisgICBvciBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwuCisgICAgIGNkIC91c3Ivc3JjL2xpbnV4CisgICAgIG1ha2UgbWVudWNvbmZpZworICAgICA8SVNETiBzdWJzeXN0ZW0gLSBJU0ROIHN1cHBvcnQgLS0gSGlTYXg+CisgICAgIG1ha2UgY2xlYW47IG1ha2UgekltYWdlOyBtYWtlIG1vZHVsZXM7IG1ha2UgbW9kdWxlc19pbnN0YWxsCisyLiBJbnN0YWxsIHRoZSBuZXcga2VybmVsCisgICAgIGNwIC91c3Ivc3JjL2xpbnV4L2FyY2gvaTM4Ni9ib290L3pJbWFnZSAvZXRjL2tlcm5lbC9saW51eC5pc2RuCisgICAgIHZpIC9ldGMvbGlsby5jb25mCisgICAgIDxhZGQgbmV3IGtlcm5lbCBpbiB0aGUgYm9vdGFibGUgaW1hZ2Ugc2VjdGlvbj4KKyAgICAgbGlsbworMy4gaW4gY2FzZSB0aGUgaGlzYXggZHJpdmVyIGlzIGEgImZpeGVkIiBwYXJ0IG9mIHRoZSBrZXJuZWwsIGNvbmZpZ3VyZQorICAgdGhlIGRyaXZlciB3aXRoIGxpbG86CisgICAgIHZpIC9ldGMvbGlsby5jb25mCisgICAgIDxhZGQgSGlTYXggZHJpdmVyIHBhcmFtZXRlciBpbiB0aGUgZ2xvYmFsIHNlY3Rpb24gKHNlZSBiZWxvdyk+CisgICAgIGxpbG8KKyAgIFlvdXIgbGlsby5jb25mIF9taWdodF8gbG9vayBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKwkjIExJTE8gY29uZmlndXJhdGlvbi1maWxlCisJIyBnbG9iYWwgc2VjdGlvbgorICAgICMgdGVsZXMgMTYuMCBvbiBJUlE9NSwgTUVNPTB4ZDgwMDAsIFBPUlQ9MHhkODAKKwlhcHBlbmQ9Imhpc2F4PTEsMyw1LDB4ZDgwMDAsMHhkODAsSGlTYXgiCisgICAgIyB0ZWxlcyAxNi4zIChub24gcG5wKSBvbiBJUlE9MTUsIFBPUlQ9MHhkODAKKwkjIGFwcGVuZD0iaGlzYXg9MywzLDUsMHhkODAwMCwweGQ4MCxIaVNheCIKKwlib290PS9kZXYvc2RhCisJY29tcGFjdCAgICAgICAgIyBmYXN0ZXIsIGJ1dCB3b24ndCB3b3JrIG9uIGFsbCBzeXN0ZW1zLgorCWxpbmVhcgorCXJlYWQtb25seQorCXByb21wdAorCXRpbWVvdXQ9MTAwCisJdmdhID0gbm9ybWFsICAgICMgZm9yY2Ugc2FuZSBzdGF0ZQorCSMgTGludXggYm9vdGFibGUgcGFydGl0aW9uIGNvbmZpZyBiZWdpbnMKKwlpbWFnZSA9IC9ldGMva2VybmVsL2xpbnV4LmlzZG4KKwlyb290ID0gL2Rldi9zZGExCisJbGFiZWwgPSBsaW51eC5pc2RuCisJIworCWltYWdlID0gL2V0Yy9rZXJuZWwvbGludXgtMi4wLjMwCisJcm9vdCA9IC9kZXYvc2RhMQorCWxhYmVsID0gbGludXguc2VjdXJlCisKKyAgIEluIHRoZSBsaW5lIHN0YXJ0aW5nIHdpdGggImFwcGVuZCIgeW91IGhhdmUgdG8gYWRhcHQgdGhlIHBhcmFtZXRlcnMKKyAgIGFjY29yZGluZyB0byB5b3VyIGNhcmQgKHNlZSBhYm92ZSBpbiB0aGlzIGZpbGUpCisKKzMuIGJvb3QgdGhlIG5ldyBsaW51eC5pc2RuIGtlcm5lbAorNC4gc3RhcnQgdGhlIElTRE4gc3Vic3lzdGVtOgorICAgYSkgbG9hZCAtIGlmIG5lY2Vzc2FyeSAtIHRoZSBtb2R1bGVzIChkZXBlbmRzLCB3aGV0aGVyIHlvdSBjb21waWxlZAorICAgICAgdGhlIElTRE4gZHJpdmVyIGFzIG1vZHVsZSBvciBub3QpCisgICAgICBBY2NvcmRpbmcgdG8gdGhlIHR5cGUgb2YgY2FyZCB5b3UgaGF2ZSB0byBzcGVjaWZ5IHRoZSBuZWNlc3NhcnkKKyAgICAgIGRyaXZlciBwYXJhbWV0ZXIgKGlycSwgaW8sIG1lbSwgdHlwZSwgcHJvdG9jb2wpLgorICAgICAgRm9yIHRoZSBsZWFzZWQgbGluZSB0aGUgcHJvdG9jb2wgaXMgIjMiLiBTZWUgdGhlIHRhYmxlIGFib3ZlIGZvcgorICAgICAgdGhlIHBhcmFtZXRlcnMsIHdoaWNoIHlvdSBoYXZlIHRvIHNwZWNpZnkgZGVwZW5kaW5nIG9uIHlvdXIgY2FyZC4KKyAgIGIpIGNvbmZpZ3VyZSBpNGwKKyAgICAgIC9zYmluL2lzZG5jdHJsIGFkZGlmIGlzZG4wCisgICAgICAjIEVBWiAgMSAtLSBCMSBjaGFubmVsICAgMiAtLUIyIGNoYW5uZWwKKyAgICAgIC9zYmluL2lzZG5jdHJsIGVheiBpc2RuMCAxCisgICAgICAvc2Jpbi9pc2RuY3RybCBzZWN1cmUgaXNkbjAgb24KKyAgICAgIC9zYmluL2lzZG5jdHJsIGh1cHRpbWVvdXQgaXNkbjAgMAorICAgICAgL3NiaW4vaXNkbmN0cmwgbDJfcHJvdCBpc2RuMCBoZGxjCisgICAgICAjIEF0dGVudGlvbiB5b3UgbXVzdCBub3Qgc2V0IGFuIG91dGdvaW5nIG51bWJlciAhISEgVGhpcyB3b24ndCB3b3JrICEhIQorICAgICAgIyBUaGUgaW5jb21pbmcgbnVtYmVyIGlzIExFQVNFRDAgZm9yIHRoZSBmaXJzdCBjYXJkLCBMRUFTRUQxIGZvciB0aGUKKyAgICAgICMgc2Vjb25kIGFuZCBzbyBvbi4KKyAgICAgIC9zYmluL2lzZG5jdHJsIGFkZHBob25lIGlzZG4wIGluIExFQVNFRDAKKyAgICAgICMgSGVyZSBpcyBubyBuZWVkIHRvIGJpbmQgdGhlIGNoYW5uZWwuCisgICBjKSBpbiBjYXNlIHRoZSByZW1vdGUgcGFydG5lciBpcyBhIENJU0NPOgorICAgICAgL3NiaW4vaXNkbmN0cmwgZW5jYXAgaXNkbjAgY2lzY28taAorICAgZCkgY29uZmlndXJlIHRoZSBpbnRlcmZhY2UKKyAgICAgIC9zYmluL2lmY29uZmlnIGlzZG4wICR7TE9DQUxfSVB9IHBvaW50b3BvaW50ICR7UkVNT1RFX0lQfQorICAgZSkgc2V0IHRoZSByb3V0ZXMKKyAgICAgIC9zYmluL3JvdXRlIGFkZCAtaG9zdCAke1JFTU9URV9JUH0gaXNkbjAKKyAgICAgIC9zYmluL3JvdXRlIGFkZCBkZWZhdWx0IGd3ICR7UkVNT1RFX0lQfQorICAgZikgc3dpdGNoIHRoZSBjYXJkIGludG8gbGVhc2VkIG1vZGUgZm9yIGVhY2ggdXNlZCBCLWNoYW5uZWwKKyAgICAgIC9zYmluL2hpc2F4Y3RybCBIaVNheCA1IDEKKworUmVtYXJrczoKK2EpIFVzZSBzdGF0ZSBvZiB0aGUgYXJ0IGlzZG40ay11dGlscworCitIZXJlIGFuIGV4YW1wbGUgc2NyaXB0OgorIyEvYmluL3NoCisjIFN0YXJ0L1N0b3AgSVNETiBsZWFzZWQgbGluZSBjb25uZWN0aW9uCisKK0k0TF9BU19NT0RVTEU9eWVzCitJNExfUkVNT1RFX0lTX0NJU0NPPW5vCitJNExfTU9EVUxFX1BBUkFNUz0idHlwZT0xNiBpbz0weDI2OCBpcnE9NyAiCitJNExfREVCVUc9bm8KK0k0TF9MRUFTRURfMTI4Sz15ZXMKK0xPQ0FMX0lQPTE5Mi4xNjguMS4xCitSRU1PVEVfSVA9MTkyLjE2OC4yLjEKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgSVNETiAuLi4iCisgICAgICAgIGlmIFsgJHtJNExfQVNfTU9EVUxFfSA9ICJ5ZXMiIF07IHRoZW4KKwkJZWNobyAibG9hZGluZyBtb2R1bGVzLi4uIgorCQkvc2Jpbi9tb2Rwcm9iZSBoaXNheCAke0k0TF9NT0RVTEVfUEFSQU1TfQorCWZpCisJIyBjb25maWd1cmUgaW50ZXJmYWNlCisJL3NiaW4vaXNkbmN0cmwgYWRkaWYgaXNkbjAKKwkvc2Jpbi9pc2RuY3RybCBzZWN1cmUgaXNkbjAgb24KKwlpZiBbICR7STRMX0RFQlVHfSA9ICJ5ZXMiIF07IHRoZW4KKwkJL3NiaW4vaXNkbmN0cmwgdmVyYm9zZSA3CisJCS9zYmluL2hpc2F4Y3RybCBIaVNheCAxIDB4ZmZmZgorCQkvc2Jpbi9oaXNheGN0cmwgSGlTYXggMTEgMHhmZgorCQljYXQgIC9kZXYvaXNkbmN0cmwgPi90bXAvbGVhLmxvZyAmCisJZmkKKwlpZiBbICR7STRMX1JFTU9URV9JU19DSVNDT30gPSAieWVzIiBdOyB0aGVuCisJCS9zYmluL2lzZG5jdHJsIGVuY2FwIGlzZG4wIGNpc2NvLWgKKwlmaQorCS9zYmluL2lzZG5jdHJsIGh1cHRpbWVvdXQgaXNkbjAgMAorCSMgQi1DSEFOTkVMIDEKKwkvc2Jpbi9pc2RuY3RybCBlYXogaXNkbjAgMQorCS9zYmluL2lzZG5jdHJsIGwyX3Byb3QgaXNkbjAgaGRsYworCSMgMS4gY2FyZAorCS9zYmluL2lzZG5jdHJsIGFkZHBob25lIGlzZG4wIGluIExFQVNFRDAKKyAgICAgICAgaWYgWyAke0k0TF9MRUFTRURfMTI4S30gPSAieWVzIiBdOyB0aGVuCisJCS9zYmluL2lzZG5jdHJsIGFkZHNsYXZlIGlzZG4wIGlzZG4wcworCQkvc2Jpbi9pc2RuY3RybCBzZWN1cmUgaXNkbjBzIG9uCisJCS9zYmluL2lzZG5jdHJsIGh1cHRpbWVvdXQgaXNkbjBzIDAKKwkJIyBCLUNIQU5ORUwgMgorCQkvc2Jpbi9pc2RuY3RybCBlYXogaXNkbjBzIDIKKwkJL3NiaW4vaXNkbmN0cmwgbDJfcHJvdCBpc2RuMHMgaGRsYworCQkjIDEuIGNhcmQKKwkJL3NiaW4vaXNkbmN0cmwgYWRkcGhvbmUgaXNkbjBzIGluIExFQVNFRDAKKwkJaWYgWyAke0k0TF9SRU1PVEVfSVNfQ0lTQ099ID0gInllcyIgXTsgdGhlbgorCQkJL3NiaW4vaXNkbmN0cmwgZW5jYXAgaXNkbjBzIGNpc2NvLWgKKwkJZmkKKwlmaQorCS9zYmluL2lzZG5jdHJsIGRpYWxtb2RlIGlzZG4wIG1hbnVhbAorCSMgY29uZmlndXJlIHRjcC9pcAorCS9zYmluL2lmY29uZmlnIGlzZG4wICR7TE9DQUxfSVB9IHBvaW50b3BvaW50ICR7UkVNT1RFX0lQfQorCS9zYmluL3JvdXRlIGFkZCAtaG9zdCAke1JFTU9URV9JUH0gaXNkbjAKKwkvc2Jpbi9yb3V0ZSBhZGQgZGVmYXVsdCBndyAke1JFTU9URV9JUH0KKwkjIHN3aXRjaCB0byBsZWFzZWQgbW9kZQorCSMgQi1DSEFOTkVMIDEKKwkvc2Jpbi9oaXNheGN0cmwgSGlTYXggNSAxCisgICAgICAgIGlmIFsgJHtJNExfTEVBU0VEXzEyOEt9ID0gInllcyIgXTsgdGhlbgorCQkjIEItQ0hBTk5FTCAyCisJCXNsZWVwIDEwOyAvKiBXYWl0IGZvciBtYXN0ZXIgKi8KKwkJL3NiaW4vaGlzYXhjdHJsIEhpU2F4IDUgMgorCWZpCisJOzsKKyAgICBzdG9wKQorCS9zYmluL2lmY29uZmlnIGlzZG4wIGRvd24KKwkvc2Jpbi9pc2RuY3RybCBkZWxpZiBpc2RuMAorCWlmIFsgJHtJNExfREVCVUd9ID0gInllcyIgXTsgdGhlbgorCQlraWxsYWxsIGNhdAorCWZpCisJaWYgWyAke0k0TF9BU19NT0RVTEV9ID0gInllcyIgXTsgdGhlbgorCQkvc2Jpbi9ybW1vZCBoaXNheAorCQkvc2Jpbi9ybW1vZCBpc2RuCisJCS9zYmluL3JtbW9kIHBwcAorCQkvc2Jpbi9ybW1vZCBzbGhjCisJZmkKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfSIKKwlleGl0IDEKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5hY3QyMDAwIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5hY3QyMDAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNzExNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmFjdDIwMDAKQEAgLTAsMCArMSwxMDQgQEAKKyRJZDogUkVBRE1FLmFjdDIwMDAsdiAxLjMgMjAwMC8wOC8wNiAwOToyMjo1MSBhcm1pbiBFeHAgJAorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgQUNUMjAwMCBkcml2ZXIgZm9yIHRoZQorSUJNIEFjdGl2ZSAyMDAwIElTRE4gY2FyZC4KKworVGhlcmUgYXJlIDMgVHlwZXMgb2YgdGhpcyBjYXJkIGF2YWlsYWJsZS4gQSBJU0EtLCBNQ0EtLCBhbmQgUENNQ0lBLUJ1cworVmVyc2lvbi4gQ3VycmVudGx5LCBvbmx5IHRoZSBJU0EtQnVzIHZlcnNpb24gb2YgdGhlIGNhcmQgaXMgc3VwcG9ydGVkLgorSG93ZXZlciBNQ0EgYW5kIFBDTUNJQSB3aWxsIGZvbGxvdyBzb29uLgorCitUaGUgSVNBLUJ1cyBWZXJzaW9uIHVzZXMgOCBJTy1wb3J0cy4gVGhlIGJhc2UgcG9ydCBhZGRyZXNzIGhhcyB0byBiZSBzZXQKK21hbnVhbGx5IHVzaW5nIHRoZSBESVAgc3dpdGNoZXMuCisKK1NldHRpbmcgdXAgdGhlIERJUCBzd2l0Y2hlcyBmb3IgdGhlIElCTSBBY3RpdmUgMjAwMCBJU0ROIGNhcmQ6CisKKwkgTm90ZTogUzUgYW5kIFM2IGFsd2F5cyBzZXQgb2ZmIQorCisgICAgIFMxICBTMiAgUzMgIFM0ICBCYXNlLXBvcnQKKyAgICAgb24gIG9uICBvbiAgb24gIDB4MDIwMCAoRmFjdG9yeSBkZWZhdWx0KQorICAgICBvZmYgb24gIG9uICBvbiAgMHgwMjQwIAorICAgICBvbiAgb2ZmIG9uICBvbiAgMHgwMjgwIAorICAgICBvZmYgb2ZmIG9uICBvbiAgMHgwMmMwIAorICAgICBvbiAgb24gIG9mZiBvbiAgMHgwMzAwIAorICAgICBvZmYgb24gIG9mZiBvbiAgMHgwMzQwIAorICAgICBvbiAgb2ZmIG9mZiBvbiAgMHgwMzgwIAorICAgICBvbiAgb24gIG9uICBvZmYgMHhjZmUwCisgICAgIG9mZiBvbiAgb24gIG9mZiAweGNmYTAgCisgICAgIG9uICBvZmYgb24gIG9mZiAweGNmNjAgCisgICAgIG9mZiBvZmYgb24gIG9mZiAweGNmMjAgCisgICAgIG9uICBvbiAgb2ZmIG9mZiAweGNlZTAgCisgICAgIG9mZiBvbiAgb2ZmIG9mZiAweGNlYTAgCisgICAgIG9uICBvZmYgb2ZmIG9mZiAweGNlNjAgCisgICAgIG9mZiBvZmYgb2ZmIG9mZiBDYXJkIGRpc2FibGVkIAorCitJUlEgaXMgY29uZmlndXJlZCBieSBzb2Z0d2FyZS4gUG9zc2libGUgdmFsdWVzIGFyZToKKworICAzLCA1LCA3LCAxMCwgMTEsIDEyLCAxNSBhbmQgbm9uZSAocG9sbGVkIG1vZGUpCisKKworVGhlIEFDVDIwMDAgZHJpdmVyIG1heSBlaXRoZXIgYmUgYnVpbHQgaW50byB0aGUga2VybmVsIG9yIGFzIGEgbW9kdWxlLgorSW5pdGlhbGl6YXRpb24gZGVwZW5kcyBvbiBob3cgdGhlIGRyaXZlciBpcyBidWlsdDoKKworRHJpdmVyIGJ1aWx0IGludG8gdGhlIGtlcm5lbDoKKworICBUaGUgQUNUMjAwMCBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGNvbW1hbmRsaW5lLWZlYXR1cmUgd2hpbGUKKyAgbG9hZGluZyB0aGUga2VybmVsIHdpdGggTElMTyBvciBMT0FETElOLiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorCisgIGFjdDIwMDA9YixwLGlbLGlkc3RyaW5nXQorCisgIHdoZXJlCisKKyAgICBiID0gQnVzLVR5cGUgICAgICAoMT1JU0EsIDI9TUNBLCAzPVBDTUNJQSkKKyAgICBwID0gcG9ydGJhc2UgICAgICAoLTEgbWVhbnMgYXV0b3Byb2JlKQorICAgIGkgPSBJbnRlcnJ1cHQgICAgICgtMSBtZWFucyB1c2UgbmV4dCBmcmVlIElSUSwgMCBtZWFucyBwb2xsZWQgbW9kZSkKKworICBUaGUgaWRzdHJpbmcgaXMgYW4gYXJiaXRyYXJ5IHN0cmluZyB1c2VkIGZvciByZWZlcmVuY2luZyB0aGUgY2FyZAorICBieSB0aGUgYWN0Y3RybCB0b29sIGxhdGVyLgorCisgIERlZmF1bHRzIHVzZWQsIHdoZW4gbm8gcGFyYW1ldGVycyBnaXZlbiBhdCBhbGw6CisKKyAgICAxLC0xLC0xLCIiCisKKyAgd2hpY2ggbWVhbnM6IEF1dG9wcm9iZSBmb3IgYW4gSVNBIGNhcmQsIHVzZSBuZXh0IGZyZWUgSVJRLCBsZXQgdGhlCisgIElTRE4gbGlua2xldmVsIGZpbGwgdGhlIElkU3RyaW5nICh1c3VhbGx5ICJsaW5lMCIgZm9yIHRoZSBmaXJzdCBjYXJkKS4KKyAKKyAgSWYgeW91IGxpa2UgdG8gdXNlIG1vcmUgdGhhbiBvbmUgY2FyZCwgeW91IGNhbiB1c2UgdGhlIHByb2dyYW0KKyAgImFjdGN0cmwiIGZyb20gdGhlIHV0aWxpdHktcGFja2FnZSB0byBjb25maWd1cmUgYWRkaXRpb25hbCBjYXJkcy4KKworICBVc2luZyB0aGUgImFjdGN0cmwiLXV0aWxpdHksIHBvcnRiYXNlIGFuZCBpcnEgY2FuIGFsc28gYmUgY2hhbmdlZAorICBkdXJpbmcgcnVudGltZS4gVGhlIEQtY2hhbm5lbCBwcm90b2NvbCBpcyBjb25maWd1cmVkIGJ5IHRoZSAiZHByb3RvIgorICBvcHRpb24gb2YgdGhlICJhY3RjdHJsIi11dGlsaXR5IGFmdGVyIGxvYWRpbmcgdGhlIGZpcm13YXJlIGludG8gdGhlCisgIGNhcmQncyBtZW1vcnkgdXNpbmcgdGhlICJhY3RjdHJsIi11dGlsaXR5LgorCitEcml2ZXIgYnVpbHQgYXMgbW9kdWxlOgorCisgIFRoZSBtb2R1bGUgYWN0MjAwMC5vIGNhbiBiZSBjb25maWd1cmVkIGR1cmluZyBtb2Rwcm9iZSAoaW5zbW9kKSBieQorICBhcHBlbmRpbmcgaXRzIHBhcmFtZXRlcnMgdG8gdGhlIG1vZHByb2JlIHJlc3AuIGluc21vZCBjb21tYW5kbGluZS4KKyAgVGhlIGZvbGxvd2luZyBzeW50YXggaXMgYWNjZXB0ZWQ6CisKKyAgICBhY3RfYnVzPWIgYWN0X3BvcnQ9cCBhY3RfaXJxPWkgYWN0X2lkPWlkc3RyaW5nCisKKyAgd2hlcmUgYiwgcCwgaSBhbmQgaWRzdHJpbmcgaGF2ZSB0aGUgc2FtZSBtZWFuaW5ncyBhcyB0aGUgcGFyYW1ldGVycworICBkZXNjcmliZWQgZm9yIHRoZSBidWlsdGluIHZlcnNpb24gYWJvdmUuCisKKyAgVXNpbmcgdGhlICJhY3RjdHJsIi11dGlsaXR5LCB0aGUgc2FtZSBmZWF0dXJlcyBhcHBseSB0byB0aGUgbW9kdWxhcml6ZWQKKyAgdmVyc2lvbiBhcyB0byB0aGUga2VybmVsLWJ1aWx0aW4gb25lLiAoaS5lLiBsb2FkaW5nIG9mIGZpcm13YXJlIGFuZAorICBjb25maWd1cmluZyB0aGUgRC1jaGFubmVsIHByb3RvY29sKQorCitMb2FkaW5nIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkOgorCisgIFRoZSBmaXJtd2FyZSBpcyBzdXBwbGllZCB0b2dldGhlciB3aXRoIHRoZSBpc2RuNGstdXRpbHMgcGFja2FnZS4gSXQKKyAgY2FuIGJlIGZvdW5kIGluIHRoZSBzdWJkaXJlY3RvcnkgYWN0MjAwMC9maXJtd2FyZS8KKworICBBc3N1bWluZyB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIHV0aWxpdHktcGFja2FnZSBjb3JyZWN0bHksIHRoZSBmaXJtd2FyZQorICB3aWxsIGJlIGRvd25sb2FkZWQgaW50byB0aGUgY2FyZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICBhY3RjdHJsIC1kIGlkc3RyaW5nIGxvYWQgL2V0Yy9pc2RuL2JpcDExLmJ0bAorCisgIHdoZXJlIGlkc3RyaW5nIGlzIHRoZSBOYW1lIG9mIHRoZSBjYXJkLCBnaXZlbiBkdXJpbmcgaW5zbW9kLXRpbWUgb3IKKyAgKGZvciBrZXJuZWwtYnVpbHRpbiBkcml2ZXIpIG9uIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUuIElmIG9ubHkgb25lCisgIElTRE4gY2FyZCBpcyB1c2VkLCB0aGUgLWQgaXNkc3RyaW4gbWF5IGJlIG9taXR0ZWQuCisKKyAgRm9yIGZ1cnRoZXIgZG9jdW1lbnRhdGlvbiAoYWRkaW5nIG1vcmUgSUJNIEFjdGl2ZSAyMDAwIGNhcmRzKSwgcmVmZXIgdG8KKyAgdGhlIG1hbnBhZ2UgYWN0Y3RybC44IHdoaWNoIGlzIGluY2x1ZGVkIGluIHRoZSBpc2RuNGstdXRpbHMgcGFja2FnZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5hdWRpbyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuYXVkaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViY2ExOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuYXVkaW8KQEAgLTAsMCArMSwxMzggQEAKKyRJZDogUkVBRE1FLmF1ZGlvLHYgMS44IDE5OTkvMDcvMTEgMTc6MTc6MjkgYXJtaW4gRXhwICQKKworSVNETiBzdWJzeXN0ZW0gZm9yIExpbnV4LgorICBEZXNjcmlwdGlvbiBvZiBhdWRpbyBtb2RlLgorCitXaGVuIGVuYWJsZWQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgdHR5IGVtdWxhdG9yIG9mIHRoZSBJU0ROCitzdWJzeXN0ZW0gaXMgY2FwYWJsZSBvZiBhIHJlZHVjZWQgc2V0IG9mIGNvbW1hbmRzIHRvIHN1cHBvcnQgYXVkaW8uCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgY29tbWFuZHMgc3VwcG9ydGVkIGFuZCB0aGUgZm9ybWF0IG9mCithdWRpbyBkYXRhLgorCitDb21tYW5kcyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGF1ZGlvIG1vZGU6CisKKyAgICAgICAgQVQrRkNMQVNTPTggICAgICBFbmFibGUgYXVkaW8gbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFmZmVjdHMgdGhlIGZvbGxvd2luZyByZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTMTg6IEJpdHMgMCBhbmQgMiBhcmUgc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgUzE2OiBTZXQgdG8gNDggYW5kIGFueSBmdXJ0aGVyIGNoYW5nZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXIgdmFsdWVzIGlzIGJsb2NrZWQuCisgICAgICAgIEFUK0ZDTEFTUz0wICAgICAgRGlzYWJsZSBhdWRpbyBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIDE4IGlzIHNldCB0byA0LgorICAgICAgICBBVCtGQ0xBU1M9PyAgICAgIFNob3cgcG9zc2libGUgbW9kZXMuCisgICAgICAgIEFUK0ZDTEFTUz8gICAgICAgUmVwb3J0IGN1cnJlbnQgbW9kZSAoMCBvciA4KS4KKworQ29tbWFuZHMgc3VwcG9ydGVkIGluIGF1ZGlvIG1vZGU6CisKK0FsbCBhdWRpbyBtb2RlIGNvbW1hbmRzIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisKKyAgICAgICAgQVQrVnh4PyAgICAgICAgICBTaG93IGN1cnJlbnQgc2V0dGluZy4KKyAgICAgICAgQVQrVnh4PT8gICAgICAgICBTaG93IHBvc3NpYmxlIHNldHRpbmdzLgorICAgICAgICBBVCtWeHg9diAgICAgICAgIFNldCBzaW1wbGUgcGFyYW1ldGVyLgorICAgICAgICBBVCtWeHg9dix2IC4uLiAgIFNldCBjb21wbGV4IHBhcmFtZXRlci4KKword2hlcmUgeHggaXMgYSB0d28tY2hhcmFjdGVyIGNvZGUgYW5kIHYgYXJlIGFscGhhbnVtZXJpY2FsIHBhcmFtZXRlcnMuCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICAgICAgQVQrVk5IPXggICAgICAgICBBdXRvIGhhbmd1cCBzZXR0aW5nLiBOTyBFRkZFQ1QsIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb21wYXRpYmlsaXR5IG9ubHkuCisgICAgICAgIEFUK1ZOSD8gICAgICAgICAgQWx3YXlzIHJlcG9ydGluZyAiMSIKKyAgICAgICAgQVQrVk5IPT8gICAgICAgICBBbHdheXMgcmVwb3J0aW5nICIxIgorCisgICAgICAgIEFUK1ZJUCAgICAgICAgICAgUmVzZXQgYWxsIGF1ZGlvIHBhcmFtZXRlcnMuCisKKyAgICAgICAgQVQrVkxTPXggICAgICAgICBMaW5lIHNlbGVjdC4geCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPSBObyBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gUGhvbmUgbGluZS4KKyAgICAgICAgQVQrVkxTPT8gICAgICAgICBBbHdheXMgcmVwb3J0aW5nICIwLDIiCisgICAgICAgIEFUK1ZMUz8gICAgICAgICAgU2hvdyBjdXJyZW50IGxpbmUuCisKKyAgICAgICAgQVQrVlJYICAgICAgICAgICBTdGFydCByZWNvcmRpbmcuIEVtdWxhdG9yIHJlc3BvbmRzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUIGFuZCBzdGFydHMgc2VuZGluZyBhdWRpbyBkYXRhIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uLiBTZWUgYmVsb3cgZm9yIGRhdGEgZm9ybWF0CisKKyAgICAgICAgQVQrVlNEPXgseSAgICAgICBTZXQgc2lsZW5jZS1kZXRlY3Rpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZSBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDAgLi4uIDMxICBzZW5zaXRpdml0eSB0aHJlc2hvbGQgbGV2ZWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDAgLCBkZWFjdGl2YXRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwIC4uLiAyNTUgcmFuZ2Ugb2YgaW50ZXJ2YWwgaW4gdW5pdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgMC4xIHNlY29uZC4gKGRlZmF1bHQgNzApCisgICAgICAgIEFUK1ZTRD0/ICAgICAgICAgUmVwb3J0IHBvc3NpYmxlIHBhcmFtZXRlcnMuCisgICAgICAgIEFUK1ZTRD8gICAgICAgICAgU2hvdyBjdXJyZW50IHBhcmFtZXRlcnMuCisKKyAgICAgICAgQVQrVkREPXgseSAgICAgICBTZXQgRFRNRi1kZXRlY3Rpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHBvc3NpYmxlIGlmIG9ubGluZSBhbmQgZHVyaW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZSBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDAgLi4uIDE1ICBzZW5zaXRpdml0eSB0aHJlc2hvbGQgbGV2ZWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDAgLCBJNEwgc29mdC1kZWNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLTE1IHNvZnQtZGVjb2RlIG9mZiwgaGFyZHdhcmUgb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gMCAuLi4gMjU1IHRvbmUgZHVyYXRpb24gaW4gdW5pdHMgb2YgNW1zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgZm9yIEk0TCBzb2Z0IGRlY29kZSAoZGVmYXVsdCA4LCA0MG1zKQorICAgICAgICBBVCtWREQ9PyAgICAgICAgIFJlcG9ydCBwb3NzaWJsZSBwYXJhbWV0ZXJzLgorICAgICAgICBBVCtWREQ/ICAgICAgICAgIFNob3cgY3VycmVudCBwYXJhbWV0ZXJzLgorCisgICAgICAgIEFUK1ZTTT14ICAgICAgICAgU2VsZWN0IGF1ZGlvIGRhdGEgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gQURQQ00tMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9IEFEUENNLTMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPSBBRFBDTS00CisgICAgICAgICAgICAgICAgICAgICAgICAgICA1ID0gYUxBVworICAgICAgICAgICAgICAgICAgICAgICAgICAgNiA9IHVMQVcKKyAgICAgICAgQVQrVlNNPT8gICAgICAgICBTaG93IHBvc3NpYmxlIGF1ZGlvIGZvcm1hdHMuCisKKyAgICAgICAgQVQrVlRYICAgICAgICAgICBTdGFydCBhdWRpbyBwbGF5YmFjay4gRW11bGF0b3IgcmVzcG9uZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENPTk5FQ1QgYW5kIHN0YXJ0cyBzZW5kaW5nIGF1ZGlvIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiB2aWEgcGhvbmUgbGluZS4KK0dlbmVyYWwgYmVoYXZpb3IgYW5kIGRlc2NyaXB0aW9uIG9mIGRhdGEgZm9ybWF0cy9wcm90b2NvbC4KKyAgICB3aGVuIGEgY29ubmVjdGlvbiBpcyBtYWRlOgorCisgICAgICBPbiBpbmNvbWluZyBjYWxscywgaWYgdGhlIGFwcGxpY2F0aW9uIHJlc3BvbmRzIHRvIGEgUklORworICAgICAgd2l0aCBBVEEsIGRlcGVuZGluZyBvbiB0aGUgY2FsbGluZyBzZXJ2aWNlLCB0aGUgZW11bGF0b3IKKyAgICAgIHJlc3BvbmRzIHdpdGggZWl0aGVyIENPTk5FQ1QgKGRhdGEgY2FsbCkgb3IgVkNPTiAodm9pY2UgY2FsbCkuCisgICAgICAKKyAgICAgIE9uIG91dGdvaW5nIHZvaWNlIGNhbGxzLCB0aGUgZW11bGF0b3IgcmVzcG9uZHMgd2l0aCBWQ09OCisgICAgICB1cG9uIGNvbm5lY3Rpb24gc2V0dXAuCisKKyAgQXVkaW8gcmVjb3JkaW5nLgorCisgICAgV2hlbiByZWNlaXZpbmcgYXVkaW8gZGF0YSwgYSBraW5kIG9mIGJpc3luYyBwcm90b2NvbCBpcyB1c2VkLgorICAgIFVwb24gQVQrVlJYIGNvbW1hbmQsIHRoZSBlbXVsYXRvciByZXNwb25kcyB3aXRoIENPTk5FQ1QsIGFuZAorICAgIHN0YXJ0cyBzZW5kaW5nIGF1ZGlvIGRhdGEgdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGVyZSBhcmUgc2V2ZXJhbAorICAgIGVzY2FwZSBzZXF1ZW5jZXMgZGVmaW5lZCwgYWxsIHVzaW5nIERMRSAoMHgxMCkgYXMgRXNjYXBlIGNoYXI6CisKKyAgICA8RExFPjxFVFg+ICAgICAgICAgICAgICBFbmQgb2YgYXVkaW8gZGF0YS4gKGkuZS4gY2F1c2VkIGJ5IGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5ndXAgb2YgdGhlIHJlbW90ZSBzaWRlKSBFbXVsYXRvciBzdG9wcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGluZywgcmVzcG9uZGluZyB3aXRoIFZDT04uCisgICAgPERMRT48REM0PgkJICAgIEFib3J0IHJlY29yZGluZywgKHNlbmQgYnkgYXBwbC4pIEVtdWxhdG9yCisJCQkgICAgc3RvcHMgcmVjb3JkaW5nLCBzZW5kcyBETEUsRVRYLgorICAgIDxETEU+PERMRT4gICAgICAgICAgICAgIEVzY2FwZSBzZXF1ZW5jZSBmb3IgRExFIGluIGRhdGEgc3RyZWFtLgorICAgIDxETEU+MCAgICAgICAgICAgICAgICAgIFRvdWNodG9uZSAiMCIgcmVjZWl2ZWQuCisgICAgICAgICAuLi4KKyAgICA8RExFPjkgICAgICAgICAgICAgICAgICBUb3VjaHRvbmUgIjkiIHJlY2VpdmVkLgorICAgIDxETEU+IyAgICAgICAgICAgICAgICAgIFRvdWNodG9uZSAiIyIgcmVjZWl2ZWQuCisgICAgPERMRT4qICAgICAgICAgICAgICAgICAgVG91Y2h0b25lICIqIiByZWNlaXZlZC4KKyAgICA8RExFPkEgICAgICAgICAgICAgICAgICBUb3VjaHRvbmUgIkEiIHJlY2VpdmVkLgorICAgIDxETEU+QiAgICAgICAgICAgICAgICAgIFRvdWNodG9uZSAiQiIgcmVjZWl2ZWQuCisgICAgPERMRT5DICAgICAgICAgICAgICAgICAgVG91Y2h0b25lICJDIiByZWNlaXZlZC4KKyAgICA8RExFPkQgICAgICAgICAgICAgICAgICBUb3VjaHRvbmUgIkQiIHJlY2VpdmVkLgorCisgICAgPERMRT5xICAgICAgICAgICAgICAgICAgcXVpZXQuIFNpbGVuY2UgZGV0ZWN0ZWQgYWZ0ZXIgbm9uLXNpbGVuY2UuCisgICAgPERMRT5zICAgICAgICAgICAgICAgICAgc2lsZW5jZS4gU2lsZW5jZSBkZXRlY3RlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IG9mIHJlY29yZGluZy4KKworICAgIEN1cnJlbnRseSB1bnN1cHBvcnRlZCBETEUgc2VxdWVuY2VzOgorCisgICAgPERMRT5jICAgICAgICAgICAgICAgICAgRkFYIGNhbGxpbmcgdG9uZSByZWNlaXZlZC4KKyAgICA8RExFPmIgICAgICAgICAgICAgICAgICBidXN5IHRvbmUgcmVjZWl2ZWQuCisKKyAgQXVkaW8gcGxheWJhY2suCisKKyAgICBXaGVuIHNlbmRpbmcgYXVkaW8gZGF0YSwgdXBvbiBBVCtWVFggY29tbWFuZCwgZW11bGF0b3IgcmVzcG9uZHMgd2l0aAorICAgIENPTk5FQ1QsIGFuZCBzdGFydHMgdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSBhcHBsaWNhdGlvbiB0byB0aGUgcGhvbmUgbGluZS4KKyAgICBUaGUgc2FtZSBETEUgc2VxdWVuY2VzIGFwcGx5IHRvIHRoaXMgbW9kZS4KKworICBGdWxsLUR1cGxleC1BdWRpbzoKKworICAgIFdoZW4gX2JvdGhfIGNvbW1hbmRzIGZvciByZWNvcmRpbmcgYW5kIHBsYXliYWNrIGFyZSBnaXZlbiBpbiBfb25lXworICAgIEFULWNvbW1hbmQtbGluZSAoaS5lLjogIkFUK1ZUWCtWUlgiKSwgZnVsbC1kdXBsZXgtbW9kZSBpcyBzZWxlY3RlZC4KKwlJbiB0aGlzIG1vZGUsIHRoZSBvbmx5IHdheSB0byBzdG9wIHJlY29yZGluZyBpcyBzZW5kaW5nIDxETEU+PERDND4KKyAgICBhbmQgdGhlIG9ubHkgd2F5IHRvIHN0b3AgcGxheWJhY2sgaXMgdG8gc2VuZCA8RExFPjxFVFg+LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmF2bWIxIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5hdm1iMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA3NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5hdm1iMQpAQCAtMCwwICsxLDE4NyBAQAorRHJpdmVyIGZvciBhY3RpdmUgQVZNIENvbnRyb2xsZXIuCisKK1RoZSBkcml2ZXIgcHJvdmlkZXMgYSBrZXJuZWwgY2FwaTIuMCBJbnRlcmZhY2UgKGtlcm5lbGNhcGkpIGFuZAorb24gdG9wIG9mIHRoaXMgYSBVc2VyLUxldmVsLUNBUEkyLjAtaW50ZXJmYWNlIChjYXBpKQorYW5kIGEgZHJpdmVyIHRvIGNvbm5lY3QgaXNkbjRsaW51eCB3aXRoIENBUEkyLjAgKGNhcGlkcnYpLgorVGhlIGxvd2xldmVsIGludGVyZmFjZSBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgYSBDQVBJMi4wCithbHNvIGZvciBwYXNzaXZlIGNhcmRzIHNpbmNlIEp1bHkgMTk5OS4KKworVGhlIGF1dGhvciBjYW4gYmUgcmVhY2hlZCBhdCBjYWxsZUBjYWxsZS5pbi1iZXJsaW4uZGUuCitUaGUgY29tbWFuZCBhdm1jYXBpY3RybCBpcyBwYXJ0IG9mIHRoZSBpc2RuNGstdXRpbHMuCit0NC1maWxlcyBjYW4gYmUgZm91bmQgYXQgZnRwOi8vZnRwLmF2bS5kZS9jYXJkd2FyZS9iMS9saW51eC9maXJtd2FyZQorCitDdXJyZW50bHkgc3VwcG9ydGVkIGNhcmRzOgorCUIxIElTQSAoYWxsIHZlcnNpb25zKQorCUIxIFBDSQorCVQxL1QxQiAoSEVNQSBjYXJkKQorCU0xCisJTTIKKwlCMSBQQ01DSUEKKworSW5zdGFsbGluZworLS0tLS0tLS0tLQorCitZb3UgbmVlZCBhdCBsZWFzdCAvZGV2L2NhcGkyMCB0byBsb2FkIHRoZSBmaXJtd2FyZS4KKworbWtub2QgL2Rldi9jYXBpMjAgYyA2OCAwCitta25vZCAvZGV2L2NhcGkyMC4wMCBjIDY4IDEKK21rbm9kIC9kZXYvY2FwaTIwLjAxIGMgNjggMgorLgorLgorLgorbWtub2QgL2Rldi9jYXBpMjAuMTkgYyA2OCAyMAorCitSdW5uaW5nCistLS0tLS0tCisKK1RvIHVzZSB0aGUgY2FyZCB5b3UgbmVlZCB0aGUgdDQtZmlsZXMgdG8gZG93bmxvYWQgdGhlIGZpcm13YXJlLgorQVZNIEdtYkggcHJvdmlkZXMgc2V2ZXJhbCB0NC1maWxlcyBmb3IgdGhlIGRpZmZlcmVudCBELWNoYW5uZWwKK3Byb3RvY29scyAoYjEudDQgZm9yIEV1cm8tSVNETikuIEluc3RhbGwgdGhlc2UgZmlsZSBpbiAvbGliL2lzZG4uCisKK2lmIHlvdSBjb25maWd1cmUgYXMgbW9kdWxlcyBsb2FkIHRoZSBtb2R1bGVzIHRoaXMgd2F5OgorCitpbnNtb2QgL2xpYi9tb2R1bGVzL2N1cnJlbnQvbWlzYy9jYXBpdXRpbC5vCitpbnNtb2QgL2xpYi9tb2R1bGVzL2N1cnJlbnQvbWlzYy9iMS5vCitpbnNtb2QgL2xpYi9tb2R1bGVzL2N1cnJlbnQvbWlzYy9rZXJuZWxjYXBpLm8KK2luc21vZCAvbGliL21vZHVsZXMvY3VycmVudC9taXNjL2NhcGlkcnYubworaW5zbW9kIC9saWIvbW9kdWxlcy9jdXJyZW50L21pc2MvY2FwaS5vCisKK2lmIHlvdSBoYXZlIGFuIEIxLVBDSSBjYXJkIGxvYWQgdGhlIG1vZHVsZSBiMXBjaS5vCitpbnNtb2QgL2xpYi9tb2R1bGVzL2N1cnJlbnQvbWlzYy9iMXBjaS5vCithbmQgbG9hZCB0aGUgZmlybXdhcmUgd2l0aAorYXZtY2FwaWN0cmwgbG9hZCAvbGliL2lzZG4vYjEudDQgMQorCitpZiB5b3UgaGF2ZSBhbiBCMS1JU0EgY2FyZCBsb2FkIHRoZSBtb2R1bGUgYjFpc2EubworYW5kIGFkZCB0aGUgY2FyZCBieSBjYWxsaW5nCithdm1jYXBpY3RybCBhZGQgMHgxNTAgMTUKK2FuZCBsb2FkIHRoZSBmaXJtd2FyZSBieSBjYWxsaW5nCithdm1jYXBpY3RybCBsb2FkIC9saWIvaXNkbi9iMS50NCAxCisKK2lmIHlvdSBoYXZlIGFuIFQxLUlTQSBjYXJkIGxvYWQgdGhlIG1vZHVsZSB0MWlzYS5vCithbmQgYWRkIHRoZSBjYXJkIGJ5IGNhbGxpbmcKK2F2bWNhcGljdHJsIGFkZCAweDQ1MCAxNSBUMSAwCithbmQgbG9hZCB0aGUgZmlybXdhcmUgYnkgY2FsbGluZworYXZtY2FwaWN0cmwgbG9hZCAvbGliL2lzZG4vdDEudDQgMQorCitpZiB5b3UgaGF2ZSBhbiBQQ01DSUEgY2FyZCAoQjEvTTEvTTIpIGxvYWQgdGhlIG1vZHVsZSBiMXBjbWNpYS5vCitiZWZvcmUgeW91IGluc2VydCB0aGUgY2FyZC4KKworTGVhc2VkIExpbmVzIHdpdGggQjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbml0IGNhcmQgYW5kIGxvYWQgZmlybXdhcmUuCitGb3IgYW4gRDY0UyB1c2UgIkZWOiAxIiBhcyBwaG9uZSBudW1iZXIKK0ZvciBhbiBENjRTMiB1c2UgIkZWOiAxIiBhbmQgIkZWOiAyIiBmb3IgbXVsdGlsaW5rCitvciAiRlY6IDEsMiIgdG8gdXNlIENBUEkgY2hhbm5lbCBidW5kbGluZy4KKworL3Byb2MtSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLQorCisvcHJvYy9jYXBpOgorICBkci14ci14ci14ICAgMiByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgLgorICBkci14ci14ci14ICA4MiByb290ICAgICByb290ICAgICAgICAgICAgMCBKdW4gMzAgMTk6MDggLi4KKyAgLXItLXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgIDAgSnVsICAxIDE0OjAzIGFwcGxpY2F0aW9ucworICAtci0tci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgYXBwbHN0YXRzCisgIC1yLS1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAwIEp1bCAgMSAxNDowMyBjYXBpMjAKKyAgLXItLXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgIDAgSnVsICAxIDE0OjAzIGNhcGlkcnYKKyAgLXItLXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgIDAgSnVsICAxIDE0OjAzIGNvbnRyb2xsZXIKKyAgLXItLXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgIDAgSnVsICAxIDE0OjAzIGNvbnRyc3RhdHMKKyAgLXItLXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgIDAgSnVsICAxIDE0OjAzIGRyaXZlcgorICAtci0tci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgbmNjaQorICAtci0tci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgdXNlcnMKKworL3Byb2MvY2FwaS9hcHBsaWNhdGlvbnM6CisgICBhcHBsaWQgbGV2ZWwzY250IGRhdGFibGtjbnQgZGF0YWJsa2xlbiBuY2NpLWNudCByZWN2cXVldWVsZW4KKwlsZXZlbDNjbnQ6IGNhcGlfcmVnaXN0ZXIgcGFyYW1ldGVyCisJZGF0YWJsa2NudDogY2FwaV9yZWdpc3RlciBwYXJhbWV0ZXIKKwluY2NpLWNudDogY3VycmVudCBudW1iZXIgb2YgbmNjaXMgKGNvbm5lY3Rpb25zKQorCXJlY3ZxdWV1ZWxlbjogbnVtYmVyIG9mIG1lc3NhZ2VzIG9uIHJlY2VpdmUgcXVldWUKKyAgIGZvciBleGFtcGxlOgorMSAtMiAxNiAyMDQ4IDEgMAorMiAyIDcgMjA0OCAxIDAKKworL3Byb2MvY2FwaS9hcHBsc3RhdHM6CisgICBhcHBsaWQgcmVjdmN0bG1zZyBucmVjdmRhdGFtc2cgbnNlbnRjdGxtc2cgbnNlbnRkYXRhbXNnCisJcmVjdmN0bG1zZzogY2FwaSBtZXNzYWdlcyByZWNlaXZlZCB3aXRob3V0IERBVEFfQjNfSU5ECisJcmVjdmRhdGFtc2c6IGNhcGkgREFUQV9CM19JTkQgcmVjZWl2ZWQKKwlzZW50Y3RsbXNnOiBjYXBpIG1lc3NhZ2VzIHNlbnQgd2l0aG91dCBEQVRBX0IzX1JFUQorCXNlbnRkYXRhbXNnOiBjYXBpIERBVEFfQjNfUkVRIHNlbnQKKyAgIGZvciBleGFtcGxlOgorMSAyMDU3IDE2OTkgMTcyMSAxNjk5CisKKy9wcm9jL2NhcGkvY2FwaTIwOiBzdGF0aXN0aWNzIG9mIGNhcGkubyAoL2Rldi9jYXBpMjApCisgICAgbWlub3Igbm9wZW4gbnJlY3Zkcm9wbXNnIG5yZWN2Y3RsbXNnIG5yZWN2ZGF0YW1zZyBzZW50Y3RsbXNnIHNlbnRkYXRhbXNnCisJbWlub3I6IG1pbm9yIGRldmljZSBudW1iZXIgb2YgY2FwaSBkZXZpY2UKKwlub3BlbjogbnVtYmVyIG9mIGNhbGxzIHRvIGRldmljZXMgb3BlbgorCW5yZWN2ZHJvcG1zZzogY2FwaSBtZXNzYWdlcyBkcm9wcGVkIChtZXNzYWdlcyBpbiByZWN2cXVldWUgaW4gY2xvc2UpCisJbnJlY3ZjdGxtc2c6IGNhcGkgbWVzc2FnZXMgcmVjZWl2ZWQgd2l0aG91dCBEQVRBX0IzX0lORAorCW5yZWN2ZGF0YW1zZzogY2FwaSBEQVRBX0IzX0lORCByZWNlaXZlZAorCW5zZW50Y3RsbXNnOiBjYXBpIG1lc3NhZ2VzIHNlbnQgd2l0aG91dCBEQVRBX0IzX1JFUQorCW5zZW50ZGF0YW1zZzogY2FwaSBEQVRBX0IzX1JFUSBzZW50CisKKyAgIGZvciBleGFtcGxlOgorMSAyIDE4IDAgMTYgMgorCisvcHJvYy9jYXBpL2NhcGlkcnY6IHN0YXRpc3RpY3Mgb2YgY2FwaWRydi5vIChjYXBpIG1lc3NhZ2VzKQorICAgIG5yZWN2Y3RsbXNnIG5yZWN2ZGF0YW1zZyBzZW50Y3RsbXNnIHNlbnRkYXRhbXNnCisJbnJlY3ZjdGxtc2c6IGNhcGkgbWVzc2FnZXMgcmVjZWl2ZWQgd2l0aG91dCBEQVRBX0IzX0lORAorCW5yZWN2ZGF0YW1zZzogY2FwaSBEQVRBX0IzX0lORCByZWNlaXZlZAorCW5zZW50Y3RsbXNnOiBjYXBpIG1lc3NhZ2VzIHNlbnQgd2l0aG91dCBEQVRBX0IzX1JFUQorCW5zZW50ZGF0YW1zZzogY2FwaSBEQVRBX0IzX1JFUSBzZW50CisgICBmb3IgZXhhbXBsZToKKzI3ODAgMjIyNiAyMjU2IDIyMjYKKworL3Byb2MvY2FwaS9jb250cm9sbGVyOgorICAgY29udHJvbGxlciBkcml2ZXJuYW1lIHN0YXRlIGNhcmRuYW1lICAgY29udHJvbGxlcmluZm8KKyAgIGZvciBleGFtcGxlOgorMSBiMXBjaSAgICAgIHJ1bm5pbmcgIGIxcGNpLWUwMDAgICAgICAgQjEgMy4wNy0wMSAweGUwMDAgMTkKKzIgdDFpc2EgICAgICBydW5uaW5nICB0MWlzYS00NTAgICAgICAgIEIxIDMuMDctMDEgMHg0NTAgMTEgMAorMyBiMXBjbWNpYSAgIHJ1bm5pbmcgIG0yLTE1MCAgICAgICAgICAgQjEgMy4wNy0wMSAweDE1MCA1CisKKy9wcm9jL2NhcGkvY29udHJzdGF0czoKKyAgICBjb250cm9sbGVyIG5yZWN2Y3RsbXNnIG5yZWN2ZGF0YW1zZyBzZW50Y3RsbXNnIHNlbnRkYXRhbXNnCisJbnJlY3ZjdGxtc2c6IGNhcGkgbWVzc2FnZXMgcmVjZWl2ZWQgd2l0aG91dCBEQVRBX0IzX0lORAorCW5yZWN2ZGF0YW1zZzogY2FwaSBEQVRBX0IzX0lORCByZWNlaXZlZAorCW5zZW50Y3RsbXNnOiBjYXBpIG1lc3NhZ2VzIHNlbnQgd2l0aG91dCBEQVRBX0IzX1JFUQorCW5zZW50ZGF0YW1zZzogY2FwaSBEQVRBX0IzX1JFUSBzZW50CisgICBmb3IgZXhhbXBsZToKKzEgMjg0NSAyMjcyIDIzMTAgMjI3NAorMiAyIDAgMiAwCiszIDIgMCAyIDAKKworL3Byb2MvY2FwaS9kcml2ZXI6CisgICBkcml2ZXJuYW1lIG5jb250cm9sbGVyCisgICBmb3IgZXhhbXBsZToKK2IxcGNpICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK3QxaXNhICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK2IxcGNtY2lhICAgICAgICAgICAgICAgICAgICAgICAgIDEKK2IxaXNhICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworL3Byb2MvY2FwaS9uY2NpOgorICAgYXBsbGlkIG5jY2kgd2luc2l6ZSBzZW5kd2luZG93CisgICBmb3IgZXhhbXBsZToKKzEgMHgxMDEwMSA4IDAKKworL3Byb2MvY2FwaS91c2Vyczoga2VybmVsbW9kdWxlcyB0aGF0IHVzZSB0aGUga2VybmVsY2FwaS4KKyAgIG5hbWUKKyAgIGZvciBleGFtcGxlOgorY2FwaWRydgorY2FwaTIwCisKK1F1ZXN0aW9ucworLS0tLS0tLS0tCitDaGVjayBvdXQgdGhlIEZBUSAoZnRwLmlzZG40bGludXguZGUpIG9yIHN1YnNjcmliZSB0byB0aGUKK2xpbnV4LWF2bWIxQGNhbGxlLmluLWJlcmxpbi5kZSBtYWlsaW5nIGxpc3QgYnkgc2VuZGluZworYSBtYWlsIHRvIG1ham9yZG9tb0BjYWxsZS5pbi1iZXJsaW4uZGUgd2l0aAorc3Vic2NyaWJlIGxpbnV4LWF2bWIxCitpbiB0aGUgYm9keS4KKworR2VybWFuIGRvY3VtZW50YXRpb24gYW5kIHNldmVyYWwgc2NyaXB0cyBjYW4gYmUgZm91bmQgYXQKK2Z0cDovL2Z0cC5hdm0uZGUvY2FyZHdhcmUvYjEvbGludXgvCisKK0J1Z3MgCistLS0tCitJZiB5b3UgZmluZCBhbnkgcGxlYXNlIGxldCBtZSBrbm93LiAKKworRW5qb3ksCisKK0NhcnN0ZW4gUGFldGggKGNhbGxlQGNhbGxlLmluLWJlcmxpbi5kZSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuY29uY2FwIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5jb25jYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxMTRiYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuY29uY2FwCkBAIC0wLDAgKzEsMjU5IEBACitEZXNjcmlwdGlvbiBvZiB0aGUgImNvbmNhcCIgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpbnRlcmZhY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgImNvbmNhcCIgaW50ZXJmYWNlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgbmV0d29yayBkZXZpY2UKK2RyaXZlcnMgdGhhdCBuZWVkIHRvIHByb2Nlc3MgYW4gZW5jYXBzdWxhdGlvbiBwcm90b2NvbC4gCitJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHByb3RvY29sIGludGVyYWN0cyB3aXRoIGEgbGludXggbmV0d29yayBkZXZpY2UgYnkKKy0gZGF0YSB0cmFuc21pc3Npb24KKy0gY29ubmVjdGlvbiBjb250cm9sIChlc3RhYmxpc2gsIHJlbGVhc2UpCitUaHVzLCB0aGUgbW5lbW9uaWM6ICJDT05uZWN0aW9uIENPTnRyb2xsaW5nIGVOQ0FQc3VsYXRpb24gUHJvdG9jb2wiLgorCitUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgaW5zaWRlIHRoZSBpc2RuIHN1YnN5c3RlbS4gQnV0IGl0IG1pZ2h0CithbHNvIGJlIHVzZWZ1bCB0byBvdGhlciBraW5kcyBvZiBuZXR3b3JrIGRldmljZXMuIFRodXMsIGlmIHlvdSB3YW50Cit0byBzdWdnZXN0IGNoYW5nZXMgdGhhdCBpbXByb3ZlIHVzYWJpbGl0eSBvciBwZXJmb3JtYW5jZSBvZiB0aGUKK2ludGVyZmFjZSwgcGxlYXNlIGxldCBtZSBrbm93LiBJJ20gd2lsbGluZyB0byBpbmNsdWRlIHRoZW0gaW4gZnV0dXJlCityZWxlYXNlcyAoZXZlbiBpZiBJIG5lZWRlZCB0byBhZGFwdCB0aGUgY3VycmVudCBpc2RuIGNvZGUgdG8gdGhlCitjaGFuZ2VkIGludGVyZmFjZSkuCisKKworV2h5IGlzIHRoaXMgdXNlZnVsPworPT09PT09PT09PT09PT09PT09PQorCitUaGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCB1c2VkIG9uIHRvcCBvZiBXQU4gY29ubmVjdGlvbnMgb3IgcGVybWFuZW50Citwb2ludC10by1wb2ludCBsaW5rcyBhcmUgZnJlcXVlbnRseSBjaG9zZW4gdXBvbiBiaWxhdGVyYWwgYWdyZWVtZW50LgorVGh1cywgYSBkZXZpY2UgZHJpdmVyIGZvciBhIGNlcnRhaW4gdHlwZSBvZiBoYXJkd2FyZSBtdXN0IHN1cHBvcnQKK3NldmVyYWwgZGlmZmVyZW50IGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xzIGF0IG9uY2UuCisKK1RoZSBpc2RuIGRldmljZSBkcml2ZXIgZGlkIGFscmVhZHkgc3VwcG9ydCBzZXZlcmFsIGRpZmZlcmVudAorZW5jYXBzdWxhdGlvbiBwcm90b2NvbHMuIFRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGlzIGNvbmZpZ3VyZWQgYnkgYQordXNlciBzcGFjZSB1dGlsaXR5IChpc2RuY3RybCkuIFRoZSBpc2RuIG5ldHdvcmsgaW50ZXJmYWNlIGNvZGUgdGhlbgordXNlcyBzZXZlcmFsIGNhc2Ugc3RhdGVtZW50cyB3aGljaCBzZWxlY3QgYXBwcm9wcmlhdGUgYWN0aW9ucworZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBlbmNhcHN1bGF0aW9uIHByb3RvY29sLgorCitJbiBjb250cmFzdCwgTEFOIG5ldHdvcmsgaW50ZXJmYWNlcyBhbHdheXMgdXNlZCBhIHNpbmdsZSBlbmNhcHN1bGF0aW9uCitwcm90b2NvbCB3aGljaCBpcyB1bmlxdWUgdG8gdGhlIGhhcmR3YXJlIHR5cGUgb2YgdGhlIGludGVyZmFjZS4gVGhlIExBTgorZW5jYXBzdWxhdGlvbiBpcyB1c3VhbGx5IGRvbmUgYnkganVzdCBzdGlja2luZyBhIGhlYWRlciBvbiB0aGUgZGF0YS4gVGh1cywKK3RyYWRpdGlvbmFsIGxpbnV4IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgdXNlZCB0byBwcm9jZXNzIHRoZQorZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBkaXJlY3RseSAodXN1YWxseSBieSBqdXN0IHByb3ZpZGluZyBhIGhhcmRfaGVhZGVyKCkKK21ldGhvZCBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSkgdXNpbmcgc29tZSBoYXJkd2FyZSB0eXBlIHNwZWNpZmljIHN1cHBvcnQKK2Z1bmN0aW9ucy4gVGhpcyBpcyBzaW1wbGUsIGRpcmVjdCBhbmQgZWZmaWNpZW50LiBCdXQgaXQgZG9lc24ndCBmaXQgYWxsCit0aGUgcmVxdWlyZW1lbnRzIGZvciBjb21wbGV4IFdBTiBlbmNhcHN1bGF0aW9ucy4gCisKKworICAgVGhlIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCB0byBiZSB1c2VkCisgICBtYWtlcyBpc2RuIG5ldHdvcmsgaW50ZXJmYWNlcyBtb3JlIGZsZXhpYmxlLCBidXQgYWxzbyBtdWNoIG1vcmUKKyAgIGNvbXBsZXggdGhhbiB0cmFkaXRpb25hbCBsYW4gbmV0d29yayBpbnRlcmZhY2VzLgorCisKK01hbnkgRW5jYXBzdWxhdGlvbiBwcm90b2NvbHMgdXNlZCBvbiB0b3Agb2YgV0FOIGNvbm5lY3Rpb25zIHdpbGwgbm90IGp1c3QKK3N0aWNrIGEgaGVhZGVyIG9uIHRoZSBkYXRhLiBUaGV5IGFsc28gbWlnaHQgbmVlZCB0byBzZXQgdXAgb3IgcmVsZWFzZQordGhlIFdBTiBjb25uZWN0aW9uLiBUaGV5IGFsc28gbWlnaHQgd2FudCB0byBzZW5kIG90aGVyIGRhdGEgZm9yIHRoZWlyCitwcml2YXRlIHB1cnBvc2Ugb3ZlciB0aGUgd2lyZSwgZS5nLiBwcHAgZG9lcyBhIGxvdCBvZiBsaW5rIGxldmVsCituZWdvdGlhdGlvbiBiZWZvcmUgdGhlIGZpcnN0IHBpZWNlIG9mIHVzZXIgZGF0YSBjYW4gYmUgdHJhbnNtaXR0ZWQuCitTdWNoIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xzIGZvciBXQU4gZGV2aWNlcyBhcmUgdHlwaWNhbGx5IG1vcmUgY29tcGxleAordGhhbiBlbmNhcHN1bGF0aW9uIHByb3RvY29scyBmb3IgbGFuIGRldmljZXMuIFRodXMsIG5ldHdvcmsgaW50ZXJmYWNlCitjb2RlIGZvciB0eXBpY2FsIFdBTiBkZXZpY2VzIGFsc28gdGVuZHMgdG8gYmUgbW9yZSBjb21wbGV4LgorCisKK0luIG9yZGVyIHRvIHN1cHBvcnQgTGludXgnIHgyNSBQTFAgaW1wbGVtZW50YXRpb24gb24gdG9wIG9mCitpc2RuIG5ldHdvcmsgaW50ZXJmYWNlcyBJIGNvdWxkIGhhdmUgaW50cm9kdWNlZCB5ZXQgYW5vdGhlciBicmFuY2ggdG8KK3RoZSB2YXJpb3VzIGNhc2Ugc3RhdGVtZW50cyBpbnNpZGUgZHJpdmVycy9pc2RuL2lzZG5fbmV0LmMuCitUaGlzIGV2ZW50dWFsbHkgbWFkZSBpc2RuX25ldC5jIGV2ZW4gbW9yZSBjb21wbGV4LiBJbiBhZGRpdGlvbiwgaXQgbWFkZQoraXNkbl9uZXQuYyBoYXJkZXIgdG8gbWFpbnRhaW4uIFRodXMsIGJ5IGlkZW50aWZ5aW5nIGFuIGFic3RyYWN0CitpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgY29kZSBhbmQgdGhlIGVuY2Fwc3VsYXRpb24KK3Byb3RvY29sLCBjb21wbGV4aXR5IGNvdWxkIGJlIHJlZHVjZWQgYW5kIG1haW50YWluYWJpbGl0eSBjb3VsZCBiZQoraW5jcmVhc2VkLgorCisKK0xpa2V3aXNlLCBhIHNpbWlsYXIgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCB3aWxsIGZyZXF1ZW50bHkgYmUgbmVlZGVkIGJ5CitzZXZlcmFsIGRpZmZlcmVudCBpbnRlcmZhY2VzIG9mIGV2ZW4gZGlmZmVyZW50IGhhcmR3YXJlIHR5cGUsIGUuZy4gdGhlCitzeW5jaHJvbm91cyBwcHAgaW1wbGVtZW50YXRpb24gdXNlZCBieSB0aGUgaXNkbiBkcml2ZXIgYW5kIHRoZQorYXN5bmNocm9ub3VzIHBwcCBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IHRoZSBwcHAgZHJpdmVyIGhhdmUgYSBsb3Qgb2YKK3NpbWlsYXIgY29kZSBpbiB0aGVtLiBCeSBjbGVhbmx5IHNlcGFyYXRpbmcgdGhlIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wKK2Zyb20gdGhlIGhhcmR3YXJlIHNwZWNpZmljIGludGVyZmFjZSBzdHVmZiBzdWNoIGNvZGUgY291bGQgYmUgc2hhcmVkCitiZXR0ZXIgaW4gZnV0dXJlLgorCisKK1doZW4gb3BlcmF0aW5nIG92ZXIgZGlhbC11cC1jb25uZWN0aW9ucyAoZS5nLiB0ZWxlcGhvbmUgbGluZXMgdmlhIG1vZGVtLAorbm9uLXBlcm1hbmVudCB2aXJ0dWFsIGNpcmN1aXRzIG9mIHdpZGUgYXJlYSBuZXR3b3JrcywgSVNETikgbWFueQorZW5jYXBzdWxhdGlvbiBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGNvbnRyb2wgdGhlIGNvbm5lY3Rpb24uIFRoZXJlZm9yZSwKK3NvbWUgYmFzaWMgY29ubmVjdGlvbiBjb250cm9sIHByaW1pdGl2ZXMgYXJlIHN1cHBvcnRlZC4gVGhlIHR5cGUgYW5kCitzZW1hbnRpY3Mgb2YgdGhlIGNvbm5lY3Rpb24gKGkuZSB0aGUgSVNPIGxheWVyIHdoZXJlIGNvbm5lY3Rpb24gc2VydmljZQoraXMgcHJvdmlkZWQpIGlzIG91dHNpZGUgb3VyIHNjb3BlIGFuZCBtaWdodCBiZSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uCit0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCB1c2VkLCBlLmcuIGZvciBhIHBwcCBtb2R1bGUgdXNpbmcgb3VyIHNlcnZpY2UKK29uIHRvcCBvZiBhIG1vZGVtIGNvbm5lY3Rpb24gYSBjb25uZWN0X3JlcXVlc3Qgd2lsbCByZXN1bHQgaW4gZGlhbGluZworYSAoc29tZXdoZXJlIGVsc2UgY29uZmlndXJlZCkgcmVtb3RlIHBob25lIG51bWJlci4gRm9yIGFuIFgyNS1pbnRlcmZhY2UKK21vZHVsZSAoTEFQQiBzZW1hbnRpY3MsIGFzIGRlZmluZWQgaW4gRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3gyNS1pZmFjZS50eHQpCithIGNvbm5lY3RfcmVxdWVzdCB3aWxsIGFzayBmb3IgZXN0YWJsaXNoaW5nIGEgcmVsaWFibGUgbGFwYgorZGF0YWxpbmsgY29ubmVjdGlvbi4KKworCitUaGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBjdXJyZW50bHkgcHJvdmlkZXMgdGhlIGZvbGxvd2luZworc2VydmljZSBwcmltaXRpdmVzIHRvIHRoZSBuZXR3b3JrIGRldmljZS4KKworLSBjcmVhdGUgYSBuZXcgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpbnN0YW5jZQorLSBkZWxldGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpbnN0YW5jZSBhbmQgZnJlZSBhbGwgaXRzIHJlc291cmNlcworLSBpbml0aWFsaXplIChvcGVuKSB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpbnN0YW5jZSBmb3IgdXNlLgorLSBkZWFjdGl2YXRlIChjbG9zZSkgYW4gZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpbnN0YW5jZS4KKy0gcHJvY2VzcyAoeG1pdCkgZGF0YSBoYW5kZWQgZG93biBieSB1cHBlciBwcm90b2NvbCBsYXllcgorLSByZWNlaXZlIGRhdGEgZnJvbSBsb3dlciAoaGFyZHdhcmUpIGxheWVyCistIHByb2Nlc3MgY29ubmVjdCBpbmRpY2F0aW9uIGZyb20gbG93ZXIgKGhhcmR3YXJlKSBsYXllcgorLSBwcm9jZXNzIGRpc2Nvbm5lY3QgaW5kaWNhdGlvbiBmcm9tIGxvd2VyIChoYXJkd2FyZSkgbGF5ZXIKKworCitUaGUgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVyIGFjY2Vzc2VzIHRob3NlIHByaW1pdGl2ZXMgdmlhIGNhbGxiYWNrcworcHJvdmlkZWQgYnkgdGhlIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaW5zdGFuY2Ugd2l0aGluIGEKK3N0cnVjdCBjb25jYXBfcHJvdG9fb3BzLgorCitzdHJ1Y3QgY29uY2FwX3Byb3RvX29wc3sKKworCS8qIGNyZWF0ZSBhIG5ldyBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGluc3RhbmNlIG9mIHNhbWUgdHlwZSAqLworCXN0cnVjdCBjb25jYXBfcHJvdG8gKiAgKCpwcm90b19uZXcpICh2b2lkKTsKKworCS8qIGRlbGV0ZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGluc3RhbmNlIGFuZCBmcmVlIGFsbCBpdHMgcmVzb3VyY2VzLgorCSAgIGNwcm90IG1heSBubyBsb2dlciBiZSByZWZlcmVuY2VkIGFmdGVyIGNhbGxpbmcgdGhpcyAqLworCXZvaWQgKCpwcm90b19kZWwpKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNwcm90KTsKKworCS8qIGluaXRpYWxpemUgdGhlIHByb3RvY29sJ3MgZGF0YS4gVG8gYmUgY2FsbGVkIGF0IGludGVyZmFjZSBzdGFydHVwCisJICAgb3Igd2hlbiB0aGUgZGV2aWNlIGRyaXZlciByZXNldHMgdGhlIGludGVyZmFjZS4gQWxsIHNlcnZpY2VzIG9mIHRoZQorCSAgIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgbWF5IGJlIHVzZWQgYWZ0ZXIgdGhpcyovCisJaW50ICgqcmVzdGFydCkoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QsIAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCSAgICAgICBzdHJ1Y3QgY29uY2FwX2RldmljZV9vcHMgKmRvcHMpOworCisJLyogZGVhY3RpdmF0ZSBhbiBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGluc3RhbmNlLiBUaGUgZW5jYXBzdWxhdGlvbgorCSAgIHByb3RvY29sIG1heSBub3QgY2FsbCBhbnkgKmRvcHMgbWV0aG9kcyBhZnRlciB0aGlzLiAqLworCWludCAoKmNsb3NlKShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCk7CisKKwkvKiBwcm9jZXNzIGEgZnJhbWUgaGFuZGVkIGRvd24gdG8gdXMgYnkgdXBwZXIgbGF5ZXIgKi8KKwlpbnQgKCplbmNhcF9hbmRfeG1pdCkoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QsIHN0cnVjdCBza19idWZmICpza2IpOworCisJLyogdG8gYmUgY2FsbGVkIGZvciBlYWNoIGRhdGEgZW50aXR5IHJlY2VpdmVkIGZyb20gbG93ZXIgbGF5ZXIqLyAKKwlpbnQgKCpkYXRhX2luZCkoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QsIHN0cnVjdCBza19idWZmICpza2IpOworCisJLyogdG8gYmUgY2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIHdhcyBzZXQgdXAvZG93bi4KKwkgICBQcm90b2NvbHMgdGhhdCBkb24ndCBwcm9jZXNzIHRoZXNlIHByaW1pdGl2ZXMgbWlnaHQgZmlsbCBpbgorCSAgIGR1bW15IG1ldGhvZHMgaGVyZSAqLworCWludCAoKmNvbm5lY3RfaW5kKShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCk7CisJaW50ICgqZGlzY29ubl9pbmQpKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNwcm90KTsKK307CisKKworVGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUgaW5jbHVkZS9saW51eC9jb25jYXAuaC4KKworCitBIE5ldHdvcmsgaW50ZXJmYWNlIHVzaW5nIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xzIG11c3QgYWxzbyBwcm92aWRlCitzb21lIHNlcnZpY2UgcHJpbWl0aXZlcyB0byB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbDoKKworLSByZXF1ZXN0IGRhdGEgYmVpbmcgc3VibWl0dGVkIGJ5IGxvd2VyIGxheWVyIChkZXZpY2UgaGFyZHdhcmUpIAorLSByZXF1ZXN0IGEgY29ubmVjdGlvbiBiZWluZyBzZXQgdXAgYnkgbG93ZXIgbGF5ZXIgCistIHJlcXVlc3QgYSBjb25uZWN0aW9uIGJlaW5nIHJlbGVhc2VkIGJ5IGxvd2VyIGxheWVyCisKK1RoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGFjY2Vzc2VzIHRob3NlIHByaW1pdGl2ZXMgdmlhIGNhbGxiYWNrcworcHJvdmlkZWQgYnkgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdpdGhpbiBhIHN0cnVjdCBjb25jYXBfZGV2aWNlX29wcy4KKworc3RydWN0IGNvbmNhcF9kZXZpY2Vfb3BzeworCisJLyogdG8gcmVxdWVzdCBkYXRhIGJlIHN1Ym1pdHRlZCBieSBkZXZpY2UgKi8gCisJaW50ICgqZGF0YV9yZXEpKHN0cnVjdCBjb25jYXBfcHJvdG8gKiwgc3RydWN0IHNrX2J1ZmYgKik7CisKKwkvKiBDb250cm9sIG1ldGhvZHMgbXVzdCBiZSBzZXQgdG8gTlVMTCBieSBkZXZpY2VzIHdoaWNoIGRvIG5vdAorCSAgIHN1cHBvcnQgY29ubmVjdGlvbiBjb250cm9sLiAqLworCS8qIHRvIHJlcXVlc3QgYSBjb25uZWN0aW9uIGJlIHNldCB1cCAqLyAKKwlpbnQgKCpjb25uZWN0X3JlcSkoc3RydWN0IGNvbmNhcF9wcm90byAqKTsKKworCS8qIHRvIHJlcXVlc3QgYSBjb25uZWN0aW9uIGJlIHJlbGVhc2VkICovCisJaW50ICgqZGlzY29ubl9yZXEpKHN0cnVjdCBjb25jYXBfcHJvdG8gKik7CQorfTsKKworVGhlIG5ldHdvcmsgaW50ZXJmYWNlIGRvZXMgbm90IGV4cGxpY2l0bHkgcHJvdmlkZSBhIHJlY2VpdmUgc2VydmljZQorYmVjYXVzZSB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBkaXJlY3RseSBjYWxscyBuZXRpZl9yeCgpLiAKKworCisKKworQW4gZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpdHNlbGYgaXMgYWN0dWFsbHkgdGhlCitzdHJ1Y3QgY29uY2FwX3Byb3RveworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OwkJLyogbmV0IGRldmljZSB1c2luZyBvdXIgc2VydmljZSAgKi8KKwlzdHJ1Y3QgY29uY2FwX2RldmljZV9vcHMgKmRvcHM7IC8qIGNhbGxiYWNrcyBwcm92aWRlZCBieSBkZXZpY2UgKi8KKyAJc3RydWN0IGNvbmNhcF9wcm90b19vcHMgICpwb3BzOyAvKiBjYWxsYmFja3MgcHJvdmlkZWQgYnkgdXMgKi8KKwlpbnQgZmxhZ3M7CisJdm9pZCAqcHJvdG9fZGF0YTsgICAgICAgICAgICAgICAvKiBwcm90b2NvbCBzcGVjaWZpYyBwcml2YXRlIGRhdGEsIHRvCisJCQkJCSAgIGJlIGFjY2Vzc2VkIHZpYSAqcG9wcyBtZXRob2RzIG9ubHkqLworCS8qCisJICA6CisJICB3aGF0ZXZlciAKKwkgIDoKKwkgICovCit9OworCitNb3N0IG9mIHRoaXMgaXMgZmlsbGVkIGluIHdoZW4gdGhlIGRldmljZSByZXF1ZXN0cyB0aGUgcHJvdG9jb2wgdG8gCitiZSByZXNldCAob3BlbmQpLiBUaGUgbmV0d29yayBpbnRlcmZhY2UgbXVzdCBwcm92aWRlIHRoZSBuZXRfZGV2IGFuZAorZG9wcyBwb2ludGVycy4gT3RoZXIgY29uY2FwX3Byb3RvIG1lbWJlcnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJpdmF0ZQorZGF0YSB0aGF0IGFyZSBvbmx5IGFjY2Vzc2VkIGJ5IHRoZSBwb3BzIGNhbGxiYWNrIGZ1bmN0aW9ucy4gTGlrZXdpc2UsCithIGNvbmNhcCBwcm90byBzaG91bGQgYWNjZXNzIHRoZSBuZXR3b3JrIGRldmljZSdzIHByaXZhdGUgZGF0YQorb25seSBieSBtZWFucyBvZiB0aGUgY2FsbGJhY2tzIHJlZmVycmVkIHRvIGJ5IHRoZSBkb3BzIHBvaW50ZXIuCisKKworQSBwb3NzaWJsZSBleHRlbmRlZCBkZXZpY2Ugc3RydWN0dXJlIHdoaWNoIHVzZXMgdGhlIGNvbm5lY3Rpb24gY29udHJvbGxpbmcKK2VuY2Fwc3VsYXRpb24gc2VydmljZXMgY291bGQgbG9vayBsaWtlIHRoaXM6CisKK3N0cnVjdCBjb25jYXBfZGV2aWNleworCXN0cnVjdCBuZXRfZGV2aWNlIG5ldF9kZXY7CisJc3RydWN0IG15X3ByaXYgIC8qIGRldmljZS0+bG9jYWwgc3R1ZmYgKi8KKwkJCS8qIHRoZSBteV9wcml2IHN0cnVjdCBtaWdodCBjb250YWluIGEgCisJCQkgICBzdHJ1Y3QgY29uY2FwX2RldmljZV9vcHMgKmRvcHM7CisJICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdGhlIGRldmljZSBzcGVjaWZpYyBjYWxsYmFja3MKKwkJCSovCisJc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3Q7ICAgICAgICAvKiBjYWxsYmFja3MgcHJvdmlkZWQgYnkgcHJvdG9jb2wgKi8KK307CisKKworCitNaXNjIFRob3VnaHRzCis9PT09PT09PT09PT09CisKK1RoZSBjb25jZXB0IG9mIHRoZSBjb25jYXAgcHJvdG8gbWlnaHQgaGVscCB0byByZXVzZSBwcm90b2NvbCBjb2RlIGFuZAorcmVkdWNlIHRoZSBjb21wbGV4aXR5IG9mIGNlcnRhaW4gbmV0d29yayBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25zLgorVGhlIHRyYWRlIG9mZiBpcyB0aGF0IGl0IGludHJvZHVjZXMgeWV0IGFub3RoZXIgcHJvY2VkdXJlIGNhbGwgbGF5ZXIKK3doZW4gcHJvY2Vzc2luZyB0aGUgcHJvdG9jb2wuIFRoaXMgaGFzIG9mIGNvdXJzZSBzb21lIGltcGFjdCBvbgorcGVyZm9ybWFuY2UuIEhvd2V2ZXIsIHR5cGljYWxseSB0aGUgY29uY2FwIGludGVyZmFjZSB3aWxsIGJlIHVzZWQgYnkKK2RldmljZXMgYXR0YWNoZWQgdG8gc2xvdyBsaW5lcyAobGlrZSB0ZWxlcGhvbmUsIGlzZG4sIGxlYXNlZCBzeW5jaHJvbm91cworbGluZXMpLiBGb3Igc3VjaCBzbG93IGxpbmVzLCB0aGUgb3ZlcmhlYWQgaXMgcHJvYmFibHkgbmVnbGlnaWJsZS4KK1RoaXMgbWlnaHQgbm8gbG9uZ2VyIGhvbGQgZm9yIGNlcnRhaW4gaGlnaCBzcGVlZCBXQU4gbGlua3MgKGxpa2UKK0FUTSkuCisKKworSWYgZ2VuZXJhbCBsaW51eCBuZXR3b3JrIGludGVyZmFjZXMgZXhwbGljaXRseSBzdXBwb3J0ZWQgY29uY2FwCitwcm90b2NvbHMgKGUuZy4gYnkgYSBtZW1iZXIgc3RydWN0IGNvbmNhcF9wcm90byogaW4gc3RydWN0IG5ldF9kZXZpY2UpCit0aGVuIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHNlcnZpY2UgZnVuY3Rpb24gY291bGQgYmUgY2hhbmdlZAorYnkgcGFzc2luZyBhIHBvaW50ZXIgb2YgdHlwZSAoc3RydWN0IG5ldF9kZXZpY2UqKSBpbnN0ZWFkIG9mCit0eXBlIChzdHJ1Y3QgY29uY2FwX3Byb3RvKikuIERvaW5nIHNvIHdvdWxkIG1ha2UgbWFueSBvZiB0aGUgc2VydmljZQorZnVuY3Rpb25zIGNvbXBhdGlibGUgdG8gbmV0d29yayBkZXZpY2Ugc3VwcG9ydCBmdW5jdGlvbnMuCisKK2UuZy4gaW5zdGVhZCBvZiB0aGUgY29uY2FwIHByb3RvY29sJ3Mgc2VydmljZSBmdW5jdGlvbgorCisgIGludCAoKmVuY2FwX2FuZF94bWl0KShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3dlIGNvdWxkIGhhdmUKKworICBpbnQgKCplbmNhcF9hbmRfeG1pdCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCitBcyB0aGlzIGlzIGNvbXBhdGlibGUgdG8gdGhlIGRldi0+aGFyZF9zdGFydF94bWl0KCkgbWV0aG9kLCB0aGUgZGV2aWNlCitkcml2ZXIgY291bGQgZGlyZWN0bHkgcmVnaXN0ZXIgdGhlIGNvbmNhcCBwcm90b2NvbCdzIGVuY2FwX2FuZF94bWl0KCkKK2Z1bmN0aW9uIGFzIGl0cyBoYXJkX3N0YXJ0X3htaXQoKSBtZXRob2QuIFRoaXMgd291bGQgZWxpbWluYXRlIG9uZQorcHJvY2VkdXJlIGNhbGwgbGF5ZXIuCisKKworVGhlIGRldmljZSdzIGRhdGEgcmVxdWVzdCBmdW5jdGlvbiBjb3VsZCBhbHNvIGJlIGRlZmluZWQgYXMKKyAKKyAgaW50ICgqZGF0YV9yZXEpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworVGhpcyBtaWdodCBldmVuIGFsbG93IGZvciBzb21lIHByb3RvY29sIHN0YWNraW5nLiBBbmQgdGhlIG5ldHdvcmsKK2ludGVyZmFjZSBtaWdodCBldmVuIHJlZ2lzdGVyIHRoZSBzYW1lIGRhdGFfcmVxKCkgZnVuY3Rpb24gZGlyZWN0bHkKK2FzIGl0cyBoYXJkX3N0YXJ0X3htaXQoKSBtZXRob2Qgd2hlbiBhIHplcm8gbGF5ZXIgZW5jYXBzdWxhdGlvbgorcHJvdG9jb2wgaXMgY29uZmlndXJlZC4gVGh1cywgZWxpbWluYXRpbmcgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkKK29mIHRoZSBjb25jYXAgaW50ZXJmYWNlIHdoZW4gYSB0cml2aWFsIGNvbmNhcCBwcm90b2NvbCBpcyB1c2VkLgorTmV2ZXJ0aGVsZXNzLCB0aGUgZGV2aWNlIHJlbWFpbnMgYWJsZSB0byBzdXBwb3J0IGVuY2Fwc3VsYXRpb24KK3Byb3RvY29sIGNvbmZpZ3VyYXRpb24uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZGl2ZXJzaW9uIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5kaXZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkY2Q1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZGl2ZXJzaW9uCkBAIC0wLDAgKzEsMTI3IEBACitUaGUgaXNkbiBkaXZlcnNpb24gc2VydmljZXMgYXJlIGEgc3VwcG9ydGluZyBtb2R1bGUgd29ya2luZyB0b2dldGhlciB3aXRoCit0aGUgaXNkbjRsaW51eCBhbmQgdGhlIEhpU2F4IG1vZHVsZSBmb3IgcGFzc2l2ZSBjYXJkcy4gCitBY3RpdmUgY2FyZHMsIFRBcyBhbmQgY2FyZHMgdXNpbmcgYSBvd24gb3Igb3RoZXIgZHJpdmVyIHRoYW4gdGhlIEhpU2F4IAorbW9kdWxlIG5lZWQgdG8gYmUgYWRhcHRlZCB0byB0aGUgSEw8LT5MTCBpbnRlcmZhY2UgZGVzY3JpYmVkIGluIGEgc2VwYXJhdGUgCitkb2N1bWVudC4gVGhlIGRpdmVyc2lvbiBzZXJ2aWNlcyBtYXkgYmUgdXNlZCB3aXRoIGFsbCBjYXJkcyBzdXBwb3J0ZWQgYnkgCit0aGUgSGlTYXggZHJpdmVyLgorVGhlIGRpdmVyc2lvbiBrZXJuZWwgaW50ZXJmYWNlIGFuZCBjb250cm9sbGluZyB0b29sIGRpdmVydGN0cmwgd2VyZSB3cml0dGVuCitieSBXZXJuZXIgQ29ybmVsaXVzICh3ZXJuZXJAaXNkbjRsaW51eC5kZSBvciB3ZXJuZXJAdGl0cm8uZGUpIHVuZGVyIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworVGFibGUgb2YgY29udGVudHMKKz09PT09PT09PT09PT09PT09CisKKzEuIEZlYXR1cmVzIG9mIHRoZSBpNGwgZGl2ZXJzaW9uIHNlcnZpY2VzIAorICAgKE9yIHdoYXQgY2FuIHRoZSBpNGwgZGl2ZXJzaW9uIHNlcnZpY2VzIGRvIGZvciBtZSkKKworMi4gUmVxdWlyZWQgaGFyZC0gYW5kIHNvZnR3YXJlCisKKzMuIENvbXBpbGluZywgaW5zdGFsbGluZyBhbmQgbG9hZGluZy91bmxvYWRpbmcgdGhlIG1vZHVsZSAgCisgICBUcmFjaW5nIGNhbGxpbmcgYW5kIGRpdmVyc2lvbiBpbmZvcm1hdGlvbiAKKworNC4gVHJhY2luZyBjYWxsaW5nIGFuZCBkaXZlcnNpb24gaW5mb3JtYXRpb24KKyAKKzUuIEZvcm1hdCBvZiB0aGUgZGl2ZXJ0IGRldmljZSBBU0NJSSBvdXRwdXQKKyAKKworMS4gRmVhdHVyZXMgb2YgdGhlIGk0bCBkaXZlcnNpb24gc2VydmljZXMgCisgICAoT3Igd2hhdCBjYW4gdGhlIGk0bCBkaXZlcnNpb24gc2VydmljZXMgZG8gZm9yIG1lKQorCisgICBUaGUgaTRsIGRpdmVyc2lvbiBzZXJ2aWNlcyBvZmZlcnMgY2FsbCBmb3J3YXJkaW5nIGFuZCBsb2dnaW5nIG5vcm1hbGx5IAorICAgb25seSBzdXBwb3J0ZWQgYnkgaXNkbiBwaG9uZXMuIEluY29taW5nIGNhbGxzIG1heSBiZSBkaXZlcnRlZCAKKyAgIHVuY29uZGl0aW9uYWxseSAoQ0ZVKSwgd2hlbiBub3QgcmVhY2hhYmxlIChDRk5SKSBvciBvbiBidXN5IGNvbmRpdGlvbiAKKyAgIChDRkIpLiAKKyAgIFRoZSBkaXZlcnNpb25zIG1heSBiZSBpbnZva2VkIHN0YXRpY2FsbHkgaW4gdGhlIHByb3ZpZGVycyBleGNoYW5nZQorICAgYXMgbm9ybWFsbHkgZG9uZSBieSBpc2RuIHBob25lcy4gSW4gdGhpcyBjYXNlIGFsbCBpbmNvbWluZyBjYWxscworICAgd2l0aCBhIHNwZWNpYWwgKG9yIGFsbCkgc2VydmljZSBpZGVudGlmaWVycyBhcmUgZm9yd2FyZGVkIGlmIHRoZSAKKyAgIGZvcndhcmRpbmcgcmVhc29uIGlzIG1ldC4gQWN0aXZhdGVkIHN0YXRpYyBzZXJ2aWNlcyBtYXkgYWxzbyBiZSAKKyAgIGludGVycm9nYXRlZCAocXVlcmllZCkuCisgICBUaGUgaTRsIGRpdmVyc2lvbiBzZXJ2aWNlcyBhZGRpdGlvbmFsbHkgb2ZmZXJzIGEgZHluYW1pYyB2ZXJzaW9uIG9mCisgICBjYWxsIGZvcndhcmRpbmcgd2hpY2ggaXMgbm90IHByZXByb2dyYW1tZWQgaW5zaWRlIHRoZSBwcm92aWRlcnMgZXhjaGFuZ2UKKyAgIGJ1dCBkeW5hbWljYWxseSBhY3RpdmF0ZWQgYnkgaTRsLgorICAgSW4gdGhpcyBjYXNlIGFsbCBpbmNvbWluZyBjYWxscyBhcmUgY2hlY2tlZCBieSBydWxlcyB0aGF0IG1heSBiZQorICAgY29tcGFyZWQgdG8gdGhlIG1lY2hhbmlzbSBvZiBpcGZ3YWRtIG9yIGlwY2hhaW5zLiBJZiBhIGdpdmVuIHJ1bGUgbWF0Y2hlcworICAgdGhlIGNoZWNraW5nIHByb2Nlc3MgaXMgZmluaXNoZWQgYW5kIHRoZSBydWxlIG1hdGNoaW5nIHdpbGwgYmUgYXBwbGllZAorICAgdG8gdGhlIGNhbGwuCisgICBUaGUgcnVsZXMgaW5jbHVkZSBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgc2VydmljZSBpZGVudGlmaWVycywgY2FsbGVkIAorICAgbnVtYmVyIGFuZCBzdWJhZGRyZXNzLCBjYWxsZXJzIG51bWJlciBhbmQgc3ViYWRkcmVzcyBhbmQgd2hldGhlciB0aGUgcnVsZQorICAgbWF0Y2hlcyB0byBhbGwgZmlsdGVyZWQgY2FsbHMgb3Igb25seSB0aG9zZSB3aGVuIGFsbCBCLWNoYW5uZWwgcmVzb3VyY2VzCisgICBhcmUgZXhoYXVzdGVkLgorICAgQWN0aW9ucyB0aGF0IG1heSBiZSBpbnZva2VkIGJ5IGEgcnVsZSBhcmUgaWdub3JlLCBwcm9jZWVkLCByZWplY3QsIAorICAgZGlyZWN0IGRpdmVydCBvciBkZWxheWVkIGRpdmVydCBvZiBhIGNhbGwuCisgICBBbGwgaW5jb21pbmcgY2FsbHMgbWF0Y2hpbmcgYSBydWxlIGV4Y2VwdCB0aGUgaWdub3JlIHJ1bGUgYSByZXBvcnRlZCBhbmQKKyAgIGxvZ2dlZCBhcyBBU0NJSSB2aWEgdGhlIHByb2MgZmlsZXN5c3RlbSAoL3Byb2MvbmV0L2lzZG4vZGl2ZXJ0KS4gSWYgcHJvY2VlZAorICAgaXMgc2VsZWN0ZWQgdGhlIGNhbGwgd2lsbCBiZSBoZWxkIGluIGEgcHJvY2VlZGluZyBzdGF0ZSAod2l0aG91dCByaW5naW5nKQorICAgZm9yIGEgY2VydGFpbiBhbW91bnQgb2YgdGltZSB0byBsZXQgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBvciBjbGllbnQgZGVjaWRlCisgICBob3cgdG8gaGFuZGxlIHRoZSBjYWxsLiAKKyAgICAgICAgICAgIAorCisyLiBSZXF1aXJlZCBoYXJkLSBhbmQgc29mdHdhcmUKKyAgIAorICAgRm9yIHVzaW5nIHRoZSBpNGwgZGl2ZXJzaW9uIHNlcnZpY2VzIHRoZSBpc2RuIGxpbmUgbXVzdCBiZSBvZiBhIEVVUk8vRFNTMQorICAgdHlwZS4gQWRkaXRpb25hbGx5IHRoZSBpNGwgc2VydmljZXMgb25seSB3b3JrIHRvZ2V0aGVyIHdpdGggdGhlIEhpU2F4IAorICAgZHJpdmVyIGZvciBwYXNzaXZlIGlzZG4gY2FyZHMuIEFsbCBIaVNheCBzdXBwb3J0ZWQgY2FyZHMgbWF5IGJlIHVzZWQgZm9yCisgICB0aGUgZGl2ZXJzaW9uIHB1cnBvc2VzLgorICAgVGhlIHN0YXRpYyBkaXZlcnNpb24gc2VydmljZXMgcmVxdWlyZSB0aGUgcHJvdmlkZXIgaGF2aW5nIHN0YXRpYyBzZXJ2aWNlcworICAgQ0ZVLCBDRk5SLCBDRkIgYWN0aXZhdGVkIG9uIGFuIE1TTi1saW5lLiBUaGUgc3RhdGljIHNlcnZpY2VzIG1heSBub3QgYmUgCisgICB1c2VkIG9uIGEgcG9pbnQtdG8tcG9pbnQgY29ubmVjdGlvbi4gRnVydGhlciB0aGUgc3RhdGljIHNlcnZpY2VzIGFyZSBvbmx5CisgICBhdmFpbGFibGUgaW4gc29tZSBjb3VudHJpZXMgKGZvciBleGFtcGxlIGdlcm1hbnkpLiBDb3VudHJpZXMgcmVxdWlyaW5nIHRoZSAKKyAgIGtleXBhZCBwcm90b2NvbCBmb3IgYWN0aXZhdGluZyBzdGF0aWMgZGl2ZXJzaW9ucyAobGlrZSB0aGUgbmV0aGVybGFuZHMpIGFyZQorICAgbm90IHN1cHBvcnRlZCBidXQgbWF5IHVzZSB0aGUgdHR5IGRldmljZXMgZm9yIHRoaXMgcHVycG9zZS4KKyAgIFRoZSBkeW5hbWljIGRpdmVyc2lvbiBzZXJ2aWNlcyBtYXkgYmUgdXNlZCBpbiBhbGwgY291bnRyaWVzIGlmIHRoZSBwcm92aWRlcgorICAgZW5hYmxlcyB0aGUgZmVhdHVyZSBDRiAoY2FsbCBmb3J3YXJkaW5nKS4gVGhpcyBzaG91bGQgd29yayBvbiBib3RoIE1TTi0gYW5kCisgICBwb2ludC10by1wb2ludCBsaW5lcy4KKyAgIFRvIGFkZCBhbmQgZGVsZXRlIHJ1bGVzIHRoZSBhZGRpdGlvbmFsIGRpdmVydGN0cmwgcHJvZ3JhbSBpcyBuZWVkZWQuIFRoaXMKKyAgIHByb2dyYW0gaXMgcGFydCBvZiB0aGUgaXNkbjRrdXRpbHMgcGFja2FnZS4gICAKKworMy4gQ29tcGlsaW5nLCBpbnN0YWxsaW5nIGFuZCBsb2FkaW5nL3VubG9hZGluZyB0aGUgbW9kdWxlICAKKyAgIFRyYWNpbmcgY2FsbGluZyBhbmQgZGl2ZXJzaW9uIGluZm9ybWF0aW9uIAorCisKKyAgIFRvIGNvbXBpbGUgdGhlIGk0bCBjb2RlIHdpdGggZGl2ZXJzaW9uIHN1cHBvcnQgeW91IG5lZWQgdG8gc2F5IHllcyB0byB0aGUgCisgICBEU1MxIGRpdmVyc2lvbiBzZXJ2aWNlcyB3aGVuIHNlbGVjdGluZyB0aGUgaTRsIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCAKKyAgIGNvbmZpZyAobWVudWNvbmZpZyBvciBjb25maWcpLgorICAgQWZ0ZXIgaGF2aW5nIHByb3Blcmx5IGFjdGl2YXRlZCBhIG1ha2UgbW9kdWxlcyBhbmQgbWFrZSBtb2R1bGVzX2luc3RhbGwgYWxsCisgICByZXF1aXJlZCBtb2R1bGVzIHdpbGwgYmUgY29ycmVjdGx5IGluc3RhbGxlZCBpbiB0aGUgbmVlZGVkIG1vZHVsZXMgZGlycy4KKyAgIEFzIHRoZSBkaXZlcnNpb24gc2VydmljZXMgYXJlIGN1cnJlbnRseSBub3QgaW5jbHVkZWQgaW4gdGhlIHNjcmlwdHMgb2YgbW9zdAorICAgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucyB5b3Ugd2lsbCBoYXZlIHRvIGFkZCBhICJpbnNtb2QgZHNzMV9kaXZlcnQiIGFmdGVyCisgICBoYXZpbmcgbG9hZGVkIHRoZSBnbG9iYWwgaXNkbiBtb2R1bGUuCisgICBUaGUgbW9kdWxlIGNhbiBiZSBsb2FkZWQgd2l0aG91dCBhbnkgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuCisgICBJZiB0aGUgbW9kdWxlIGlzIGFjdHVhbGx5IGxvYWRlZCBhbmQgYWN0aXZlIG1heSBiZSBjaGVja2VkIHdpdGggYSAKKyAgICJjYXQgL3Byb2MvbW9kdWxlcyIgb3IgImxzIC9wcm9jL25ldC9pc2RuL2RpdmVydCIuIFRoZSBkaXZlcnQgZmlsZSBpcyAKKyAgIGR5bmFtaWNhbGx5IGNyZWF0ZWQgYnkgdGhlIGRpdmVyc2lvbiBtb2R1bGUgYW5kIHJlbW92ZWQgd2hlbiB0aGUgbW9kdWxlIGlzCisgICB1bmxvYWRlZC4KKworCis0LiBUcmFjaW5nIGNhbGxpbmcgYW5kIGRpdmVyc2lvbiBpbmZvcm1hdGlvbgorIAorICAgWW91IGFsc28gbWF5IHB1dCBhICJjYXQgL3Byb2MvbmV0L2lzZG4vZGl2ZXJ0IiBpbiB0aGUgYmFja2dyb3VuZCB3aXRoIHRoZQorICAgb3V0cHV0IHJlZGlyZWN0ZWQgdG8gYSBmaWxlLiBUaGVuIGFsbCBhY3Rpb25zIG9mIHRoZSBtb2R1bGUgYXJlIGxvZ2dlZC4KKyAgIFRoZSBkaXZlcnQgZmlsZSBpbiB0aGUgcHJvYyBzeXN0ZW0gbWF5IGJlIG9wZW5lZCBtb3JlIHRoYW4gb25jZSwgc28gaW4gCisgICBjb25qdW5jdGlvbiB3aXRoIGluZXRkIGFuZCBhIHNtYWxsIHJlbW90ZSBjbGllbnQgb24gb3RoZXIgbWFjaGluZXMgaW5zaWRlCisgICB5b3VyIG5ldHdvcmsgaW5jb21pbmcgY2FsbHMgYW5kIHJlYWN0aW9ucyBieSB0aGUgbW9kdWxlIG1heSBiZSBzaG93biBvbiAKKyAgIGV2ZXJ5IGxpc3RlbmluZyBtYWNoaW5lLiAKKyAgIElmIGEgY2FsbCBpcyByZXBvcnRlZCBhcyBwcm9jZWVkaW5nIGFuIGV4dGVybmFsIHByb2dyYW0gb3IgY2xpZW50IG1heSAKKyAgIHNwZWNpZnkgZHVyaW5nIGEgY2VydGFpbiBhbW91bnQgb2YgdGltZSAobm9ybWFsbHkgNCB0byAxMCBzZWNvbmRzKSB3aGF0CisgICB0byBkbyB3aXRoIHRoYXQgY2FsbC4gICAgICAKKyAgIFRvIHVubG9hZCB0aGUgbW9kdWxlIGFsbCBvcGVuIGZpbGVzIHRvIHRoZSBkZXZpY2UgaW4gdGhlIHByb2Mgc3lzdGVtIG11c3QKKyAgIGJlIGNsb3NlZC4gT3RoZXJ3aXNlIHRoZSBtb2R1bGUgKGFuZCBpc2RuLm8pIG1heSBub3QgYmUgdW5sb2FkZWQuIAorCis1LiBGb3JtYXQgb2YgdGhlIGRpdmVydCBkZXZpY2UgQVNDSUkgb3V0cHV0CisgCisgICBUbyBiZSBkb25lIGxhdGVyCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZmF4IGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5mYXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxNDk1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmZheApAQCAtMCwwICsxLDQ1IEBACisKK0ZheCB3aXRoIGlzZG40bGludXgKKz09PT09PT09PT09PT09PT09PT0KKworV2hlbiBlbmFibGVkIGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbiwgdGhlIHR0eSBlbXVsYXRvcgorb2YgdGhlIElTRE4gc3Vic3lzdGVtIGlzIGNhcGFibGUgb2YgdGhlIEZheCBDbGFzcyAyIGNvbW1hbmRzLgorCitUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgdW5kZXIgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIDoKKworLSBZb3UgbmVlZCB0aGUgY29tbWFuZHMgYXMgZHVtbXksIGJlY2F1c2UgeW91IGFyZSB1c2luZworICBoeWxhZmF4ICh3aXRoIHBhdGNoKSBmb3IgQVZNIGNhcGkuCistIFlvdSB3YW50IHRvIHVzZSB0aGUgZmF4IGNhcGFiaWxpdGllcyBvZiB5b3VyIGlzZG4tY2FyZC4KKyAgKHN1cHBvcnRlZCBjYXJkcyBhcmUgbGlzdGVkIGJlbG93KQorCisKK05PVEU6IFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyAqbm90KiBzdXBwb3J0IGZheCB3aXRoIHBhc3NpdmUKKyAgICAgIElTRE4tY2FyZHMgKGtub3duIGFzIHNvZnRmYXgpLiBUaGUgbG93LWxldmVsIGRyaXZlciBvZgorICAgICAgdGhlIElTRE4tY2FyZCBhbmQvb3IgdGhlIGNhcmQgaXRzZWxmIG11c3Qgc3VwcG9ydCB0aGlzLgorCisKK1N1cHBvcnRlZCBJU0ROLUNhcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFaWNvbiBESVZBIFNlcnZlciBCUkkvUENJCisJLSBmdWxsIHN1cHBvcnQgd2l0aCBib3RoIEItY2hhbm5lbHMuCisKK0VpY29uIERJVkEgU2VydmVyIDRCUkkvUENJCisJLSBmdWxsIHN1cHBvcnQgd2l0aCBhbGwgQi1jaGFubmVscy4KKworRWljb24gRElWQSBTZXJ2ZXIgUFJJL1BDSQorCS0gZnVsbCBzdXBwb3J0IG9uIGFtb3VudCBvZiBCLWNoYW5uZWxzCisJCWRlcGVuZGluZyBvbiBEU1BzIG9uIGJvYXJkLgorCisKKworVGhlIGNvbW1hbmQgc2V0IGlzIGtub3duIGFzIENsYXNzIDIgKG5vdCBDbGFzcyAyLjApIGFuZAorY2FuIGJlIGFjdGl2YXRlZCBieSBBVCtGQ0xBU1M9MgorCisKK1RoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbGluay1sZXZlbC1tb2R1bGUgYW5kIHRoZSBoYXJkd2FyZS1sZXZlbCBkcml2ZXIKK2lzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZXMgSU5URVJGQUNFLmZheCBhbmQgSU5URVJGQUNFLgorCitBcm1pbgorbWFjQG1lbHdhcmUuZGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5oZmMtcGNpIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5oZmMtcGNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTRlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmhmYy1wY2kKQEAgLTAsMCArMSw0MSBAQAorVGhlIGRyaXZlciBmb3IgdGhlIEhGQy1QQ0kgYW5kIEhGQy1QQ0ktQSBjaGlwcyBmcm9tIENDRCBtYXkgYmUgdXNlZAorZm9yIG1hbnkgT0VNIGNhcmRzIHVzaW5nIHRoaXMgY2hpcHMuCitBZGRpdGlvbmFsbHkgdGhlIGRyaXZlciBoYXMgYSBzcGVjaWFsIGZlYXR1cmUgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUKK3RvIHJlYWQgdGhlIGVjaG8tY2hhbm5lbCBvZiB0aGUgaXNkbiBidXMuIFNvIGFsbCBmcmFtZXMgaW4gYm90aCBkaXJlY3Rpb25zCittYXkgYmUgbG9nZ2VkLgorV2hlbiB0aGUgZWNobyBsb2dnaW5nIGZlYXR1cmUgaXMgdXNlZCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBCLWNoYW5uZWxzCitmb3IgYSBIRkMtUENJIGNhcmQgaXMgcmVkdWNlZCB0byAxLiBPZiBjb3Vyc2UgdGhpcyBpcyBvbmx5IHJlbGV2YW50IHRvCit0aGUgY2FyZCwgbm90IHRvIHRoZSBpc2RuIGxpbmUuCitUbyBhY3RpdmF0ZSB0aGUgZWNobyBtb2RlIHRoZSBmb2xsb3dpbmcgaW9jdGxzIG11c3QgYmUgZW50ZXJlZDoKKworaGlzYXhjdHJsIDxkcml2ZXIvY2FyZG5hbWU+IDEwIDEKKworVGhpcyByZWR1Y2VzIHRoZSBhdmFpbGFibGUgY2hhbm5lbHMgdG8gMS4gVGhlcmUgbXVzdCBub3QgYmUgb3BlbiBjb25uZWN0aW9ucwordGhyb3VnaCB0aGlzIGNhcmQgd2hlbiBlbnRlcmluZyB0aGUgY29tbWFuZC4KK0FuZCB0aGVuOgorCitoaXNheGN0cmwgPGRyaXZlci9jYXJkbmFtZT4gMTIgMQorCitUaGlzIGVuYWJsZXMgdGhlIGVjaG8gbW9kZS4gSWYgSGV4IGxvZ2dpbmcgaXMgYWN0aXZhdGVkIHRoZSBpc2RuY3RybHggCitkZXZpY2VzIHNob3cgYSBvdXRwdXQgd2l0aCBhIGxpbmUgYmVnaW5uaW5nIG9mIEhFWDogZm9yIHRoZSBwcm92aWRlcnMKK2V4Y2hhbmdlIGFuZCBFQ0hPOiBmb3IgaXNkbiBkZXZpY2VzIHNlbmRpbmcgdG8gdGhlIHByb3ZpZGVyLgorCitJZiBtb3JlIHRoYW4gb25lIEhGQy1QQ0kgY2FyZHMgYXJlIGluc3RhbGxlZCwgYSBzcGVjaWZpYyBjYXJkIG1heSBiZSBzZWxlY3RlZAorYXQgdGhlIGhpc2F4IG1vZHVsZSBsb2FkIGNvbW1hbmQgbGluZS4gU3VwcGx5IHRoZSBsb2FkIGNvbW1hbmQgd2l0aCB0aGUgZGVzaXJlZAorSU8tYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBjYXJkLiAKK0V4YW1wbGU6CitUaGVyZSB0cmVlIGNhcmRzIGluc3RhbGxlZCBpbiB5b3VyIG1hY2hpbmUgYXQgSU8tYmFzZSBhZGRyZXNzZXMgMHhkMDAwLCAweGQ0MDAgCithbmQgMHhkYzAwCitJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGNhcmQgYXQgMHhkNDAwIHN0YW5kYWxvbmUgeW91IHNob3VsZCBzdXBwbHkgdGhlIGluc21vZAorb3IgZGVwbW9kIHdpdGggdHlwZT0zNSBpbz0weGQ0MDAuCitJZiB5b3Ugd2FudCB0byB1c2UgYWxsIHRocmVlIGNhcmRzLCBidXQgdGhlIG9yZGVyIG5lZWRzIHRvIGJlIGF0IDB4ZGMwMCwweGQ0MDAsCisweGQwMDAgeW91IG1heSBnaXZlIHRoZSBwYXJhbWV0ZXJzIHR5cGU9MzUsMzUsMzUgaW89MHhkYzAwLDB4ZDQwMCwweGQwMCAKK1RoZW4gdGhlIGRlc2lyZWQgY2FyZCB3aWxsIGJlIHRoZSBpbml0aWFsaXNlZCBpbiB0aGUgZGVzaXJlZCBvcmRlci4KK0lmIHRoZSBpbyBwYXJhbWV0ZXIgaXMgdXNlZCB0aGUgaW8gYWRkcmVzc2VzIG9mIGFsbCB1c2VkIGNhcmRzIHNob3VsZCBiZSAKK3N1cHBsaWVkIGVsc2UgdGhlIHBhcmFtZXRlciBpcyBhc3N1bWVkIDAgYW5kIGEgYXV0byBzZWFyY2ggZm9yIGEgZnJlZSBjYXJkIGlzCitpbnZva2VkIHdoaWNoIG1heSBub3QgZ2l2ZSB0aGUgd2FudGVkIHJlc3VsdC4gCisKK0NvbW1lbnRzIGFuZCByZXBvcnRzIHRvIHdlcm5lckBpc2RuNGxpbnV4LmRlIG9yIHdlcm5lckBpc2RuLWRldmVsb3BtZW50LmRlCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmh5c2RuIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5oeXNkbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmNjNTlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5oeXNkbgpAQCAtMCwwICsxLDE5NSBAQAorJElkOiBSRUFETUUuaHlzZG4sdiAxLjMuNi4xIDIwMDEvMDIvMTAgMTQ6NDE6MTkga2FpIEV4cCAkCitUaGUgaHlzZG4gZHJpdmVyIGhhcyBiZWVuIHdyaXR0ZW4gYnkKK2J5IFdlcm5lciBDb3JuZWxpdXMgKHdlcm5lckBpc2RuNGxpbnV4LmRlIG9yIHdlcm5lckB0aXRyby5kZSkgCitmb3IgSHlwZXJjb3BlIEdtYkggQWFjaGVuIEdlcm1hbnkuIEh5cGVyY29wZSBhZ3JlZWQgdG8gcHVibGlzaCB0aGlzIGRyaXZlcgordW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitUaGUgQ0FQSSAyLjAtc3VwcG9ydCB3YXMgYWRkZWQgYnkgVWxyaWNoIEFsYnJlY2h0ICh1YWxicmVjaHRAaHlwZXJjb3BlLmRlKQorZm9yIEh5cGVyY29wZSBHbWJIIEFhY2hlbiwgR2VybWFueS4KKworCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKK1RhYmxlIG9mIGNvbnRlbnRzCis9PT09PT09PT09PT09PT09PQorCisxLiBBYm91dCB0aGUgZHJpdmVyCisKKzIuIExvYWRpbmcvVW5sb2FkaW5nIHRoZSBkcml2ZXIKKworMy4gRW50cmllcyBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbQorCis0LiBUaGUgL3Byb2MvbmV0L2h5c2RuL2NhcmRjb25mWCBmaWxlCisKKzUuIFRoZSAvcHJvYy9uZXQvaHlzZG4vY2FyZGxvZ1ggZmlsZQorCis2LiBXaGVyZSB0byBnZXQgYWRkaXRpb25hbCBpbmZvIGFuZCBoZWxwCisKKworMS4gQWJvdXQgdGhlIGRyaXZlcgorCisgICBUaGUgZHJpdmVycy9pc2RuL2h5c2RuIHN1YmRpciBjb250YWlucyBhIGRyaXZlciBmb3IgSFlQRVJDT1BFcyBhY3RpdmUgCisgICBQQ0kgaXNkbiBjYXJkcyBDaGFtcCwgRXJnbyBhbmQgTWV0cm8uIFRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGlzIGNhcmRzCisgICBlbmFibGUgSVNETiBzdXBwb3J0IGluIHRoZSBrZXJuZWwgY29uZmlnIGFuZCBzdXBwb3J0IGZvciBIWVNETiBjYXJkcyBpbgorICAgdGhlIGFjdGl2ZSBjYXJkcyBzdWJtZW51LiBUaGUgZHJpdmVyIG1heSBvbmx5IGJlIGNvbXBpbGVkIGFuZCB1c2VkIGlmIAorICAgc3VwcG9ydCBmb3IgbG9hZGFibGUgbW9kdWxlcyBhbmQgdGhlIHByb2Nlc3MgZmlsZXN5c3RlbSBoYXZlIGJlZW4gZW5hYmxlZC4KKworICAgVGhlc2UgY2FyZHMgcHJvdmlkZSB0d28gZGlmZmVyZW50IGludGVyZmFjZXMgdG8gdGhlIGtlcm5lbC4gV2l0aG91dCB0aGUKKyAgIG9wdGlvbmFsIENBUEkgMi4wIHN1cHBvcnQsIHRoZXkgcmVnaXN0ZXIgYXMgZXRoZXJuZXQgY2FyZC4gSVAtcm91dGluZworICAgdG8gYSBJU0ROLWRlc3RpbmF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgY2FyZCBpdHNlbGYuIEFsbCBuZWNlc3NhcnkKKyAgIGhhbmRsZXJzIGZvciB2YXJpb3VzIHByb3RvY29scyBsaWtlIHBwcCBhbmQgb3RoZXJzIGFzIHdlbGwgYXMgY29uZmlnIGluZm8KKyAgIGFuZCBmaXJtd2FyZSBtYXkgYmUgZmV0Y2hlZCBmcm9tIEh5cGVyY29wZXMgV1dXLVNpdGUgd3d3Lmh5cGVyY29wZS5kZS4KKworICAgV2l0aCBDQVBJIDIuMCBzdXBwb3J0IGVuYWJsZWQsIHRoZSBjYXJkIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBDQVBJIDIuMCAKKyAgIGNvbXBsaWFudCBkZXZpY2VzIHdpdGggZWl0aGVyIENBUEkgMi4wIGFwcGxpY2F0aW9ucyAKKyAgIChjaGVjayBpc2RuNGstdXRpbHMpIG9yIC11c2luZyB0aGUgY2FwaWRydiBtb2R1bGUtIGFzIGEgcmVndWxhcgorICAgaXNkbjRsaW51eCBkZXZpY2UuIFRoaXMgaXMgZG9uZSB2aWEgdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHdpdGggdGhlIAorICAgYWN0aXZlIEFWTSBjYXJkcyBhbmQgaW4gZmFjdCB1c2VzIHRoZSBzYW1lIG1vZHVsZS4KKyAgIAorCisyLiBMb2FkaW5nL1VubG9hZGluZyB0aGUgZHJpdmVyCisKKyAgIFRoZSBtb2R1bGUgaGFzIG5vIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFuZCBhdXRvIGRldGVjdHMgdXAgdG8gMTAgY2FyZHMKKyAgIGluIHRoZSBpZC1yYW5nZSAwLTkuCisgICBJZiBhIGxvYWRlZCBkcml2ZXIgc2hhbGwgYmUgdW5sb2FkZWQgYWxsIG9wZW4gZmlsZXMgaW4gdGhlIC9wcm9jL25ldC9oeXNkbgorICAgc3ViZGlyIG5lZWQgdG8gYmUgY2xvc2VkIGFuZCBhbGwgZXRoZXJuZXQgaW50ZXJmYWNlcyBhbGxvY2F0ZWQgYnkgdGhpcyAKKyAgIGRyaXZlciBtdXN0IGJlIHNodXQgZG93bi4gT3RoZXJ3aXNlIHRoZSBtb2R1bGUgY291bnRlciB3aWxsIGF2b2lkIGEgbW9kdWxlCisgICB1bmxvYWQuCisgICAKKyAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIENBUEkgMi4wLWludGVyZmFjZSwgbWFrZSBzdXJlIHRvIGxvYWQvbW9kcHJvYmUgdGhlCisgICBrZXJuZWxjYXBpLW1vZHVsZSBmaXJzdC4KKworICAgSWYgeW91IHBsYW4gdG8gdXNlIHRoZSBjYXBpZHJ2LWxpbmsgdG8gaXNkbjRsaW51eCwgbWFrZSBzdXJlIHRvIGxvYWQKKyAgIGNhcGlkcnYubyBhZnRlciBhbGwgbW9kdWxlcyB1c2luZyB0aGlzIGRyaXZlciAoaS5lLiBhZnRlciBoeXNkbiBhbmQKKyAgIGFueSBhdm0tc3BlY2lmaWMgbW9kdWxlcykuCisKKzMuIEVudHJpZXMgaW4gdGhlIC9wcm9jIGZpbGVzeXN0ZW0KKworICAgV2hlbiB0aGUgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZCBpdCBhZGRzIHRoZSBkaXJlY3RvcnkgaHlzZG4gaW4gdGhlIAorICAgL3Byb2MvbmV0IHRyZWUuIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGV4YWN0bHkgMiBmaWxlIGVudHJpZXMgZm9yIGVhY2ggCisgICBjYXJkLiBPbmUgaXMgY2FsbGVkIGNhcmRjb25mWCBhbmQgdGhlIG90aGVyIGNhcmRsb2dYLCB3aGVyZSBYIGlzIHRoZQorICAgY2FyZCBpZCBudW1iZXIgZnJvbSAwIHRvIDkuIAorICAgVGhlIGNhcmRzIGFyZSBudW1iZXJlZCBpbiB0aGUgb3JkZXIgZm91bmQgaW4gdGhlIFBDSSBjb25maWcgZGF0YS4KKworNC4gVGhlIC9wcm9jL25ldC9oeXNkbi9jYXJkY29uZlggZmlsZQorCisgICBUaGlzIGZpbGUgbWF5IGJlIHJlYWQgdG8gZ2V0IGJ5IGV2ZXJ5b25lIHRvIGdldCBpbmZvIGFib3V0IHRoZSBjYXJkcyB0eXBlLCAKKyAgIGFjdHVhbCBzdGF0ZSwgYXZhaWxhYmxlIGZlYXR1cmVzIGFuZCB1c2VkIHJlc291cmNlcy4KKyAgIFRoZSBmaXJzdCAzIGVudHJpZXMgKGlkLCBidXMgYW5kIHNsb3QpIGFyZSBQQ0kgaW5mbyBmaWVsZHMsIHRoZSBmb2xsb3dpbmcKKyAgIHR5cGUgZmllbGQgZ2l2ZXMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXJkcyB0eXBlOgorCisgICA0IC0+IEVyZ28gY2FyZCAoc2VydmVyIGNhcmQgd2l0aCAyIGItY2hhbnMpCisgICA1IC0+IE1ldHJvIGNhcmQgKHNlcnZlciBjYXJkIHdpdGggNCBvciA4IGItY2hhbnMpCisgICA2IC0+IENoYW1wIGNhcmQgKGNsaWVudCBjYXJkIHdpdGggMiBiLWNoYW5zKSAgIAorCisgICBUaGUgZm9sbG93aW5nIDMgZmllbGRzIHNob3cgdGhlIGhhcmR3YXJlIGFzc2lnbm1lbnRzIGZvciBpcnEsIGlvYmFzZSBhbmQgdGhlCisgICBkdWFsIHBvcnRlZCBtZW1vcnkgKGRwLW1lbSkuCisgICBUaGUgZmllbGRzIGItY2hhbnMgYW5kIGZheC1jaGFucyBhbm5vdW5jZSB0aGUgYXZhaWxhYmxlIGNhcmQgcmVzb3VyY2VzIG9mCisgICB0aGlzIHR5cGVzIGZvciB0aGUgdXNlci4KKyAgIFRoZSBzdGF0ZSB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIGFjdHVhbCBkcml2ZXJzIHN0YXRlIGZvciB0aGlzIGNhcmQgd2l0aCB0aGUKKyAgIGZvbGxvd2luZyBhc3NpZ25tZW50cy4KKworICAgMCAtPiBjYXJkIGhhcyBub3QgYmVlbiBib290ZWQgc2luY2UgZHJpdmVyIGxvYWQKKyAgIDEgLT4gY2FyZCBib290aW5nIGlzIGFjdHVhbGx5IGluIHByb2dlc3MKKyAgIDIgLT4gY2FyZCBpcyBpbiBhbiBlcnJvciBzdGF0ZSBkdWUgdG8gYSBwcmV2aW91cyBib290IGZhaWx1cmUKKyAgIDMgLT4gY2FyZCBpcyBib290ZWQgYW5kIGFjdGl2ZQorCisgICBBbmQgdGhlIGxhc3QgZmllbGQgKGRldmljZSkgc2hvd3MgdGhlIG5hbWUgb2YgdGhlIGV0aGVybmV0IGRldmljZSBhc3NpZ25lZAorICAgdG8gdGhpcyBjYXJkLiBVcCB0byB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBib290IHRoaXMgZmllbGQgb25seSBzaG93cyBhIC0KKyAgIHRvIHRlbGwgdGhhdCBubyBuZXQgZGV2aWNlIGhhcyBiZWVuIGFsbG9jYXRlZCB1cCB0byBub3cuIE9uY2UgYSBuZXQgZGV2aWNlCisgICBoYXMgYmVlbiBhbGxvY2F0ZWQgaXQgcmVtYWlucyBhc3NpZ25lZCB0byB0aGlzIGNhcmQsIGV2ZW4gaWYgYSBjYXJkIGlzCisgICByZWJvb3RlZCBhbmQgYW4gYm9vdCBlcnJvciBvY2N1cnMuIAorCisgICBXcml0aW5nIHRvIHRoZSBjYXJkY29uZlggZmlsZSBib290cyB0aGUgY2FyZCBvciB0cmFuc2ZlcnMgY29uZmlnIGxpbmVzIHRvIAorICAgdGhlIGNhcmRzIGZpcm13YXJlLiBUaGUgdHlwZSBvZiBkYXRhIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgd2hlbiB0aGUgCisgICBmaXJzdCBkYXRhIGlzIHdyaXR0ZW4uIE9ubHkgcm9vdCBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoaXMgZmlsZS4KKyAgIFRoZSBmaXJtd2FyZSBib290IGZpbGVzIGFyZSBub3JtYWxseSBjYWxsZWQgaHljbGllbnQucG9mIGZvciBjbGllbnQgY2FyZHMKKyAgIGFuZCBoeXNlcnZlci5wb2YgZm9yIHNlcnZlciBjYXJkcy4KKyAgIEFmdGVyIHN1Y2Nlc3NmdWxseSB3cml0aW5nIHRoZSBib290IGZpbGUsIGNvbXBsZXRlIGNvbmZpZyBmaWxlcyBvciBzaW5nbGUKKyAgIGNvbmZpZyBsaW5lcyBtYXkgYmUgY29waWVkIHRvIHRoaXMgZmlsZS4KKyAgIElmIGFuIGVycm9yIG9jY3VycyB0aGUgcmV0dXJuIHZhbHVlIGdpdmVuIHRvIHRoZSB3cml0aW5nIHByb2Nlc3MgaGFzIHRoZSAKKyAgIGZvbGxvd2luZyBhZGRpdGlvbmFsIGNvZGVzIChkZWNpbWFsKToKKworICAgMTAwMCBBbm90aGVyIHByb2Nlc3MgaXMgY3VycmVudGx5IGJvb3RuZyB0aGUgY2FyZAorICAgMTAwMSBJbnZhbGlkIGZpcm13YXJlIGhlYWRlcgorICAgMTAwMiBCb2FyZHMgZHVhbC1wb3J0IFJBTSB0ZXN0IGZhaWxlZAorICAgMTAwMyBJbnRlcm5hbCBmaXJtd2FyZSBoYW5kbGVyIGVycm9yCisgICAxMDA0IEJvb3QgaW1hZ2Ugc2l6ZSBpbnZhbGlkCisgICAxMDA1IEZpcnN0IGJvb3Qgc3RhZ2UgKGJvb3RzdHJhcCBsb2FkZXIpIGZhaWxlZAorICAgMTAwNiBTZWNvbmQgYm9vdCBzdGFnZSBmYWlsdXJlCisgICAxMDA3IFRpbWVvdXQgd2FpdGluZyBmb3IgY2FyZCByZWFkeSBkdXJpbmcgYm9vdAorICAgMTAwOCBPcGVyYXRpb24gb25seSBhbGxvd2VkIGluIGJvb3RlZCBzdGF0ZQorICAgMTAwOSBDb25maWcgbGluZSB0b28gbG9uZyAKKyAgIDEwMTAgSW52YWxpZCBjaGFubmVsIG51bWJlciAKKyAgIDEwMTEgVGltZW91dCBzZW5kaW5nIGNvbmZpZyBkYXRhCisKKyAgIEFkZGl0aW9uYWwgaW5mbyBhYm91dCBlcnJvciByZWFzb25zIG1heSBiZSBmZXRjaGVkIGZyb20gdGhlIGxvZyBvdXRwdXQuIAorCis1LiBUaGUgL3Byb2MvbmV0L2h5c2RuL2NhcmRsb2dYIGZpbGUKKyAgIAkgIAorICAgVGhlIGNhcmRsb2dYIGZpbGUgZW50cnkgbWF5IGJlIG9wZW5lZCBtdWx0aXBsZSBmb3IgcmVhZGluZyBieSBldmVyeW9uZSB0byAKKyAgIGdldCB0aGUgY2FyZHMgYW5kIGRyaXZlcnMgbG9nIGRhdGEuIENhcmQgbWVzc2FnZXMgYWx3YXlzIHN0YXJ0IHdpdGggdGhlCisgICBrZXl3b3JkIExPRy4gQWxsIG90aGVyIGxpbmVzIGFyZSBvdXRwdXQgZnJvbSB0aGUgZHJpdmVyLiAKKyAgIFRoZSBkcml2ZXIgbG9nIGRhdGEgbWF5IGJlIHJlZGlyZWN0ZWQgdG8gdGhlIHN5c2xvZyBieSBzZWxlY3RpbmcgdGhlIAorICAgYXBwcm9wcmlhdGUgYml0bWFzay4gVGhlIGNhcmRzIGxvZyBtZXNzYWdlcyB3aWxsIGFsd2F5cyBiZSBzZW5kIHRvIHRoaXMKKyAgIGludGVyZmFjZSBidXQgbmV2ZXIgdG8gdGhlIHN5c2xvZy4KKworICAgQSByb290IHVzZXIgbWF5IHdyaXRlIGEgZGVjaW1hbCBvciBoZXggKHdpdGggMHgpIHZhbHVlIHQgdGhpcyBmaWxlIHRvIHNlbGVjdAorICAgZGVzaXJlZCBvdXRwdXQgb3B0aW9ucy4gQXMgbWVudGlvbmVkIGFib3ZlIHRoZSBjYXJkcyBsb2cgZGF0IGlzIGFsd2F5cyAKKyAgIHdyaXR0ZW4gdG8gdGhlIGNhcmRsb2cgZmlsZSBpbmRlcGVuZGVudCBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgb25seSB1c2VkCisgICB0byBjaGVjayBhbmQgZGVidWcgdGhlIGRyaXZlciBpdHNlbGY6CisKKyAgIEZvciBleGFtcGxlOiAKKyAgIGVjaG8gIjB4MzQ1NjAwNzgiID4gL3Byb2MvbmV0L2h5c2RuL2NhcmRsb2cwCisgICB0byBvdXRwdXQgdGhlIGhleCBsb2cgbWFzayAzNDU2MDA3OCBmb3IgY2FyZCAwLgorIAorICAgVGhlIHdyaXR0ZW4gdmFsdWUgaXMgcmVnYXJkZWQgYXMgYW4gdW5zaWduZWQgMzItQml0IHZhbHVlLCBiaXQgb3JlZCBmb3IgCisgICBkZXNpcmVkIG91dHB1dC4gVGhlIGZvbGxvd2luZyBiaXRzIGFyZSBhbHJlYWR5IGFzc2lnbmVkOgorCisgICAweDgwMDAwMDAwICAgQWxsIGRyaXZlciBsb2cgZGF0YSBpcyBhbHRlcm5hdGl2ZWx5IHZpYSBzeXNsb2cgCisgICAweDAwMDAwMDAxICAgTG9nIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9ycworICAgMHgwMDAwMDAxMCAgIEZpcm13YXJlIGxvYWQgc3RhcnQgYW5kIGNsb3NlIGFyZSBsb2dnZWQKKyAgIDB4MDAwMDAwMjAgICBMb2cgZmlybXdhcmUgcmVjb3JkIHBhcnNlcgorICAgMHgwMDAwMDA0MCAgIExvZyBldmVyeSBmaXJtd2FyZSB3cml0ZSBhY3Rpb25zCisgICAweDAwMDAwMDgwICAgTG9nIGFsbCBjYXJkIHJlbGF0ZWQgYm9vdCBtZXNzYWdlcworICAgMHgwMDAwMDEwMCAgIE91dHB1dCBhbGwgY29uZmlnIGRhdGEgc2VudCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCisgICAweDAwMDAwMjAwICAgT25seSBub24gY29tbWVudCBjb25maWcgbGluZXMgYXJlIHNob3duIHd0aCBjaGFubmVsCisgICAweDAwMDAwNDAwICAgQWRkaXRpb25hbCBjb25mIGxvZyBvdXRwdXQKKyAgIDB4MDAwMDEwMDAgICBMb2cgdGhlIGFzeW5jaHJvbm91cyBzY2hlZHVsZXIgYWN0aW9ucyAoY29uZmlnIGFuZCBsb2cpCisgICAweDAwMTAwMDAwICAgTG9nIGFsbCBvcGVuIGFuZCBjbG9zZSBhY3Rpb25zIHRvIC9wcm9jL25ldC9oeXNkbi9jYXJkIGZpbGVzCisgICAweDAwMjAwMDAwICAgTG9nIGFsbCBhY3Rpb25zIGZyb20gL3Byb2MgZmlsZSBlbnRyaWVzCisgICAweDAwMDEwMDAwICAgTG9nIG5ldHdvcmsgaW50ZXJmYWNlIGluaXQgYW5kIGRlaW5pdAorICAgCis2LiBXaGVyZSB0byBnZXQgYWRkaXRpb25hbCBpbmZvIGFuZCBoZWxwCisKKyAgIElmIHlvdSBoYXZlIGFueSBwcm9ibGVtcyBjb25jZXJuaW5nIHRoZSBkcml2ZXIgb3IgY29uZmlndXJhdGlvbiBjb250YWN0IAorICAgdGhlIEh5cGVyY29wZSBzdXBwb3J0IHRlYW0gKHN1cHBvcnRAaHlwZXJjb3BlLmRlKSBhbmQgb3IgdGhlIGF1dGhvcnMKKyAgIFdlcm5lciBDb3JuZWxpdXMgKHdlcm5lckBpc2RuNGxpbnV4IG9yIGNvcm5lbGl1c0B0aXRyby5kZSkgb3IKKyAgIFVscmljaCBBbGJyZWNodCAodWFsYnJlY2h0QGh5cGVyY29wZS5kZSkuCisKKworCisKKworCisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmljbiBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuaWNuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZjU1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmljbgpAQCAtMCwwICsxLDE0OCBAQAorJElkOiBSRUFETUUuaWNuLHYgMS43IDIwMDAvMDgvMDYgMDk6MjI6NTEgYXJtaW4gRXhwICQKKworWW91IGNhbiBnZXQgdGhlIElDTi1JU0ROLWNhcmQgZnJvbToKKworVGhpbmtpbmcgT2JqZWN0cyBTb2Z0d2FyZSBHbWJICitWZXJzYmFjaGVyIFL2dGhlIDE1OQorOTcwNzggV/xyemJ1cmcKK1RlbDogKzQ5IDkzMSAyODc3OTUwCitGYXg6ICs0OSA5MzEgMjg3Nzk1MQorCitlbWFpbCBpbmZvQHRoaW5rLmRlCitXV1cgICBodHRwOi93d3cudGhpbmsuZGUKKworCitUaGUgY2FyZCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgUEMgYnkgdHdvIGludGVyZmFjZXM6CisgIDEuIEEgcmFuZ2Ugb2YgNCBzdWNjZXNzaXZlIHBvcnQtYWRkcmVzc2VzLCB3aG9zZSBiYXNlIGFkZHJlc3MgY2FuIGJlIAorICAgICBjb25maWd1cmVkIHdpdGggdGhlIHN3aXRjaGVzLgorICAyLiBBIG1lbW9yeSB3aW5kb3cgd2l0aCAxNktCLTI1NktCIHNpemUsIHdoaWNoIGNhbiBiZSBzZXR1cCBpbiAxNmsgc3RlcHMKKyAgICAgb3ZlciB0aGUgd2hvbGUgcmFuZ2Ugb2YgMTZNQi4gSXNkbjRsaW51eCBvbmx5IHVzZXMgYSAxNmsgd2luZG93LgorICAgICBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB3aW5kb3cgY2FuIGJlIGNvbmZpZ3VyZWQgd2hlbiBsb2FkaW5nCisgICAgIHRoZSBsb3dsZXZlbC1tb2R1bGUgKHNlZSBSRUFETUUpLiBJZiB1c2luZyBtb3JlIHRoYW4gb25lIGNhcmQsCisgICAgIGFsbCBjYXJkcyBhcmUgbWFwcGVkIHRvIHRoZSBzYW1lIHdpbmRvdyBhbmQgYWN0aXZhdGVkIGFzIG5lZWRlZC4KKworU2V0dGluZyB1cCB0aGUgSU8tYWRkcmVzcyBkaXBzd2l0Y2hlcyBmb3IgdGhlIElDTi1JU0ROLWNhcmQ6CisKKyAgVHdvIHR5cGVzIG9mIGNhcmRzIGV4aXN0LCBvbmUgd2l0aCBkaXAtc3dpdGNoZXMgYW5kIG9uZSB3aXRoCisgIGhvb2stc3dpdGNoZXMuCisKKyAgMS4gU2V0dGluZyBmb3IgdGhlIGNhcmQgd2l0aCBob29rLXN3aXRjaGVzOgorCisgICAgICgwID0gc3dpdGNoIGNsb3NlZCwgMSA9IHN3aXRjaCBvcGVuKQorCisgICAgIFMzIFMyIFMxICBCYXNlLWFkZHJlc3MKKyAgICAgIDAgIDAgIDAgIDB4MzAwCisgICAgICAwICAwICAxICAweDMxMAorICAgICAgMCAgMSAgMCAgMHgzMjAgKERlZmF1bHQgZm9yIGlzZG40bGludXgpCisgICAgICAwICAxICAxICAweDMzMAorICAgICAgMSAgMCAgMCAgMHgzNDAKKyAgICAgIDEgIDAgIDEgIDB4MzUwCisgICAgICAxICAxICAwICAweDM2MAorICAgICAgMSAgMSAgMSAgTk9UIEFMTE9XRUQhCisgICAgCisgIDIuIFNldHRpbmcgZm9yIHRoZSBjYXJkIHdpdGggZGlwLXN3aXRjaGVzOgorCisgICAgICgwID0gc3dpdGNoIGNsb3NlZCwgMSA9IHN3aXRjaCBvcGVuKQorCisgICAgIFMxIFMyIFMzIFM0ICBCYXNlLUFkZHJlc3MKKyAgICAgIDAgIDAgIDAgIDAgIDB4MzAwCisgICAgICAwICAwICAwICAxICAweDMxMAorICAgICAgMCAgMCAgMSAgMCAgMHgzMjAgKERlZmF1bHQgZm9yIGlzZG40bGludXgpCisgICAgICAwICAwICAxICAxICAweDMzMAorICAgICAgMCAgMSAgMCAgMCAgMHgzNDAKKyAgICAgIDAgIDEgIDAgIDEgIDB4MzUwCisgICAgICAwICAxICAxICAwICAweDM2MAorICAgICAgMCAgMSAgMSAgMSAgTk9UIEFMTE9XRUQhCisgICAgICAxICAwICAwICAwICAweDMwOAorICAgICAgMSAgMCAgMCAgMSAgMHgzMTgKKyAgICAgIDEgIDAgIDEgIDAgIDB4MzI4CisgICAgICAxICAwICAxICAxICAweDMzOAorICAgICAgMSAgMSAgMCAgMCAgMHgzNDgKKyAgICAgIDEgIDEgIDAgIDEgIDB4MzU4CisgICAgICAxICAxICAxICAwICAweDM2OAorICAgICAgMSAgMSAgMSAgMSAgTk9UIEFMTE9XRUQhCisKK1RoZSBJQ04gZHJpdmVyIG1heSBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUuIEluaXRpYWxpemF0aW9uCitkZXBlbmRzIG9uIGhvdyB0aGUgZHJpdmVyIGlzIGJ1aWx0OgorCitEcml2ZXIgYnVpbHQgaW50byB0aGUga2VybmVsOgorCisgIFRoZSBJQ04gZHJpdmVyIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSBjb21tYW5kbGluZS1mZWF0dXJlIHdoaWxlCisgIGxvYWRpbmcgdGhlIGtlcm5lbCB3aXRoIExJTE8gb3IgTE9BRExJTi4gSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIHN5bnRheDoKKworICBpY249cCxtWyxpZHN0cmluZzFbLGlkc3RyaW5nMl1dCisKKyAgd2hlcmUKKworICAgIHAgPSBwb3J0YmFzZSAgICAgIChkZWZhdWx0OiAweDMyMCkKKyAgICBtID0gc2hhcmVkIG1lbW9yeSAoZGVmYXVsdDogMHhkMDAwMCkKKworICBXaGVuIHVzaW5nIHRoZSBJQ04gZG91YmxlIGNhcmQgKDRCKSwgeW91IE1VU1QgZGVmaW5lIFRXTyBpZHN0cmluZ3MuCisgIGlkc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhIGNoYXJhY3RlciEgVGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgZHJpdmVyCisgIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSAyQiBhbmQgNEIgdHlwZSBjYXJkLiBUaGVyZWZvcmUsIGJ5IHN1cHBseWluZworICBUV08gaWRzdHJpbmdzLCB5b3UgdGVsbCB0aGUgZHJpdmVyIHRoYXQgeW91IGhhdmUgYSA0QiBpbnN0YWxsZWQuCisgIAorICBJZiB5b3UgbGlrZSB0byB1c2UgbW9yZSB0aGFuIG9uZSBjYXJkLCB5b3UgY2FuIHVzZSB0aGUgcHJvZ3JhbQorICAiaWNuY3RybCIgZnJvbSB0aGUgdXRpbGl0eS1wYWNrYWdlIHRvIGNvbmZpZ3VyZSBhZGRpdGlvbmFsIGNhcmRzLgorICBZb3UgbmVlZCB0byBjb25maWd1cmUgc2hhcmVkIG1lbW9yeSBvbmx5IG9uY2UsIHNpbmNlIHRoZSBpY24tZHJpdmVyCisgIG1hcHMgYWxsIGNhcmRzIGludG8gdGhlIHNhbWUgYWRkcmVzcy1zcGFjZS4KKworICBVc2luZyB0aGUgImljbmN0cmwiLXV0aWxpdHksIHBvcnRiYXNlIGFuZCBzaGFyZWQgbWVtb3J5IGNhbiBhbHNvIGJlCisgIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUuCisKKyAgVGhlIEQtY2hhbm5lbCBwcm90b2NvbCBpcyBjb25maWd1cmVkIGJ5IGxvYWRpbmcgZGlmZmVyZW50IGZpcm13YXJlCisgIGludG8gdGhlIGNhcmQncyBtZW1vcnkgdXNpbmcgdGhlICJpY25jdHJsIi11dGlsaXR5LgorCisKK0RyaXZlciBidWlsdCBhcyBtb2R1bGU6CisKKyAgVGhlIG1vZHVsZSBpY24ubyBjYW4gYmUgY29uZmlndXJlZCBkdXJpbmcgImluc21vZCdpbmciIGl0IGJ5CisgIGFwcGVuZGluZyBpdHMgcGFyYW1ldGVycyB0byB0aGUgaW5zbW9kLWNvbW1hbmRsaW5lLiBUaGUgZm9sbG93aW5nCisgIHN5bnRheCBpcyBhY2NlcHRlZDoKKworICAgIHBvcnRiYXNlPXAgbWVtYmFzZT1tIGljbl9pZD1pZHN0cmluZyBbaWNuX2lkMj1pZHN0cmluZzJdCisKKyAgd2hlcmUgcCwgbSwgaWRzdHJpbmcxIGFuZCBpZHN0cmluZzIgaGF2ZSB0aGUgc2FtZSBtZWFuaW5ncyBhcyB0aGUKKyAgcGFyYW1ldGVycyBkZXNjcmliZWQgZm9yIHRoZSBrZXJuZWwtdmVyc2lvbiBhYm92ZS4KKyAgICAgIAorICBXaGVuIHVzaW5nIHRoZSBJQ04gZG91YmxlIGNhcmQgKDRCKSwgeW91IE1VU1QgZGVmaW5lIFRXTyBpZHN0cmluZ3MuCisgIGlkc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhIGNoYXJhY3RlciEgVGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgZHJpdmVyCisgIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSAyQiBhbmQgNEIgdHlwZSBjYXJkLiBUaGVyZWZvcmUsIGJ5IHN1cHBseWluZworICBUV08gaWRzdHJpbmdzLCB5b3UgdGVsbCB0aGUgZHJpdmVyIHRoYXQgeW91IGhhdmUgYSA0QiBpbnN0YWxsZWQuCisgIAorICBVc2luZyB0aGUgImljbmN0cmwiLXV0aWxpdHksIHRoZSBzYW1lIGZlYXR1cmVzIGFwcGx5IHRvIHRoZSBtb2R1bGFyaXplZAorICB2ZXJzaW9uIGxpa2UgdG8gdGhlIGtlcm5lbC1idWlsdGluIG9uZS4KKworICBUaGUgRC1jaGFubmVsIHByb3RvY29sIGlzIGNvbmZpZ3VyZWQgYnkgbG9hZGluZyBkaWZmZXJlbnQgZmlybXdhcmUKKyAgaW50byB0aGUgY2FyZCdzIG1lbW9yeSB1c2luZyB0aGUgImljbmN0cmwiLXV0aWxpdHkuCisKK0xvYWRpbmcgdGhlIGZpcm13YXJlIGludG8gdGhlIGNhcmQ6CisKKyAgVGhlIGZpcm13YXJlIGlzIHN1cHBsaWVkIHRvZ2V0aGVyIHdpdGggdGhlIGlzZG40ay11dGlscyBwYWNrYWdlLiBJdAorICBjYW4gYmUgZm91bmQgaW4gdGhlIHN1YmRpcmVjdG9yeSBpY25jdHJsL2Zpcm13YXJlLworCisgIFRoZXJlIGFyZSAzIGZpbGVzOgorCisgICAgbG9hZHBnLmJpbiAgIC0gSW1hZ2Ugb2YgdGhlIGJvb3RzdHJhcCBsb2FkZXIuCisgICAgcGNfMXRfY2EuYmluIC0gSW1hZ2Ugb2YgZmlybXdhcmUgZm9yIGdlcm1hbiAxVFI2IHByb3RvY29sLgorICAgIHBjX2V1X2NhLmJpbiAtIEltYWdlIGlmIGZpcm13YXJlIGZvciBFRFNTMSAoRXVyby1JU0ROKSBwcm90b2NvbC4KKworICBBc3N1bWluZyB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIHV0aWxpdHktcGFja2FnZSBjb3JyZWN0bHksIHRoZSBmaXJtd2FyZQorICB3aWxsIGJlIGRvd25sb2FkZWQgaW50byB0aGUgMkItY2FyZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICBpY25jdHJsIC1kIElkc3RyaW5nIGxvYWQgL2V0Yy9pc2RuL2xvYWRwZy5iaW4gL2V0Yy9pc2RuL3BjX1hYX2NhLmJpbgorCisgIHdoZXJlIFhYIGlzIGVpdGhlciAiMXQiIG9yICJldSIsIGRlcGVuZGluZyBvbiB0aGUgRC1DaGFubmVsIHByb3RvY29sCisgIHVzZWQgb24geW91ciBTMC1idXMgYW5kIElkc3RyaW5nIGlzIHRoZSBOYW1lIG9mIHRoZSBjYXJkLCBnaXZlbiBkdXJpbmcKKyAgaW5zbW9kLXRpbWUgb3IgKGZvciBrZXJuZWwtYnVpbHRpbiBkcml2ZXIpIG9uIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUuCisKKyAgVG8gbG9hZCBhIDRCLWNhcmQsIHRoZSBzYW1lIGNvbW1hbmQgaXMgdXNlZCwgZXhjZXB0IGEgc2Vjb25kIGZpcm13YXJlCisgIGZpbGUgaXMgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmRsaW5lIG9mIGljbmN0cmwuCisKKyAgLT4gQWZ0ZXIgZG93bmxvYWRpbmcgZmlybXdhcmUsIHRoZSB0d28gTEVEcyBhdCB0aGUgYmFjayBjb3ZlciBvZiB0aGUgY2FyZAorICAgICAoSUNOLTRCOiA0IExFRHMpIG11c3QgYmUgYmxpbmtpbmcgaW50ZXJtaXR0ZW50bHkgbm93LiBJZiBhIGNvbm5lY3Rpb24KKyAgICAgaXMgdXAsIHRoZSBjb3JyZXNwb25kaW5nIGxlZCBpcyBsaXQgY29udGludW91c2x5LgorCisgIEZvciBmdXJ0aGVyIGRvY3VtZW50YXRpb24gKGFkZGluZyBtb3JlIElDTi1jYXJkcyksIHJlZmVyIHRvIHRoZSBtYW5wYWdlCisgIGljbmN0cmwuOCB3aGljaCBpcyBpbmNsdWRlZCBpbiB0aGUgaXNkbjRrLXV0aWxzIHBhY2thZ2UuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUucGNiaXQgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLnBjYml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMjUwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLnBjYml0CkBAIC0wLDAgKzEsNDAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJFQURNRSBmaWxlIGZvciB0aGUgUENCSVQtRCBEZXZpY2UgRHJpdmVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBQQ0JJVCBpcyBhIEV1cm8gSVNETiBhZGFwdGVyIG1hbnVmYWN0dXJlZCBpbiBQb3J0dWdhbCBieSBPY3RhbCBhbmQKK2RldmVsb3BlZCBpbiBjb29wZXJhdGlvbiB3aXRoIFBvcnR1Z2FsIFRlbGVjb20gYW5kIEluZXNjLgorVGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHN0YW5kYXJkIGtlcm5lbCBpc2RuIGZhY2lsaXRpZXMKK29yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IEZyaXR6IEVsZmVydCBpbiB0aGUgaXNkbjRsaW51eCBwcm9qZWN0LgorCitUaGUgY29tbW9uIHZlcnNpb25zIG9mIHRoZSBwY2JpdCBib2FyZCByZXF1aXJlIGEgZmlybXdhcmUgdGhhdCBpcyAKK2Rpc3RyaWJ1dGVkIChhbmQgY29weXJpZ2h0ZWQpIGJ5IHRoZSBtYW51ZmFjdHVyZXIuIFRvIGxvYWQgdGhpcworZmlybXdhcmUgeW91IG5lZWQgInBjYml0Y3RsIiBhdmFpbGFibGUgb24gdGhlIHN0YW5kYXJkIGlzZG40ay11dGlscworcGFja2FnZSBvciBpbiB0aGUgcGNiaXQgcGFja2FnZSBhdmFpbGFibGUgaW46CisKK2Z0cDovL2Z0cC5kaS5mYy51bC5wdC9wdWIvc3lzdGVtcy9MaW51eC9pc2RuCisKK0tub3duIExpbWl0YXRpb25zOgorCistIFRoZSBib2FyZCByZXNldCBwcm9jZWR1cmUgaXMgYXQgdGhlIG1vbWVudCBpbmNvcnJlY3QgYW5kIHdpbGwgb25seQorYWxsb3cgeW91IHRvIGxvYWQgdGhlIGZpcm13YXJlIGFmdGVyIGEgaGFyZCByZXNldC4KKworLSBPbmx5IEhETEMgaW4gQi1jaGFubmVscyBpcyBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4gVGhlcmUgaXMgbm8KK2N1cnJlbnQgc3VwcG9ydCBmb3IgWC4yNSBpbiBCIG9yIEQgY2hhbm5lbHMgbm9yIExBUEQgaW4gQgorY2hhbm5lbHMuIFRoZSBtYWluIHJlYXNvbiBpcyB0aGF0IHRoZXNlIHR3byBvdGhlciBwcm90b2NvbCBtb2RlcyBoYXZlLAordG8gbXkga25vd2xlZGdlLCB2ZXJ5IGxpdHRsZSB1c2UuIElmIHlvdSB3YW50IHRvIHNlZSB0aGVtIGltcGxlbWVudGVkCisqZG8qIHNlbmQgbWUgYSBtYWlsLgorCistIFRoZSBkcml2ZXIgb2Z0ZW4gdHJpZ2dlcnMgZXJyb3JzIGluIHRoZSBib2FyZCB0aGF0IEkgYW5kIHRoZQorbWFudWZhY3R1cmVyIGJlbGlldmUgdG8gYmUgY2F1c2VkIGJ5IGJ1Z3MgaW4gdGhlIGZpcm13YXJlLiBUaGUgY3VycmVudAordmVyc2lvbiBpbmNsdWRlcyBzZXZlcmFsIHByb2NlZHVyZXMgZm9yIGVycm9yIHJlY292ZXJ5IHRoYXQgc2hvdWxkCithbGxvdyBub3JtYWwgb3BlcmF0aW9uLiBQbGFucyBmb3IgdGhlIGZ1dHVyZSBpbmNsdWRlIGNvb3BlcmF0aW9uIHdpdGgKK3RoZSBtYW51ZmFjdHVyZXIgaW4gb3JkZXIgdG8gc29sdmUgdGhpcyBwcm9ibGVtLgorCitJbmZvcm1hdGlvbi9oaW50cy9oZWxwIGNhbiBiZSBvYnRhaW5lZCBpbiB0aGUgbGludXggaXNkbgorbWFpbGluZyBsaXN0IChpc2RuNGxpbnV4QGxpc3RzZXJ2LmlzZG40bGludXguZGUpIG9yIGRpcmVjdGx5IGZyb20gbWUuCisKK3JlZ2FyZHMsCisgIFBlZHJvLgorCQkKKzxyb3F1ZUBkaS5mYy51bC5wdD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuc2MgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLnNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNTNjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLnNjCkBAIC0wLDAgKzEsMjgxIEBACitXZWxjb21lIHRvIEJldGEgUmVsZWFzZSAyIG9mIHRoZSBjb21iaW5hdGlvbiBJU0ROIGRyaXZlciBmb3IgU3BlbGxDYXN0ZXIncworSVNBIElTRE4gYWRhcHRlcnMuIFBsZWFzZSBub3RlIHRoaXMgcmVsZWFzZSAyIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZQorRGF0YUNvbW11dGUvQlJJIGFuZCBUZWxlQ29tbXV0ZS9CUkkgYWRhcHRlcnMgb25seSBhbmQgYW55IG90aGVyIHVzZSBpcyAKK2d1YXJhbnRlZWQgdG8gZmFpbC4gSWYgeW91IGhhdmUgYSBEYXRhQ29tbXV0ZS9QUkkgaW5zdGFsbGVkIGluIHRoZSB0ZXN0Citjb21wdXRlciwgd2UgcmVjb21tZW5kIHJlbW92aW5nIGl0IGFzIGl0IHdpbGwgYmUgZGV0ZWN0ZWQgYnV0IHdpbGwgbm90CitiZSB1c2FibGUuICBUbyBzZWUgd2hhdCB3ZSBoYXZlIGRvbmUgdG8gQmV0YSBSZWxlYXNlIDIsIHNlZSBzZWN0aW9uIDMuCisKK1NwZWFraW5nIG9mIGd1YXJhbnRlZXMsIFRISVMgSVMgQkVUQSBTT0ZUV0FSRSBhbmQgYXMgc3VjaCBjb250YWlucworYnVncyBhbmQgZGVmZWN0cyBlaXRoZXIga25vd24gb3IgdW5rbm93bi4gVXNlIHRoaXMgc29mdHdhcmUgYXQgeW91ciBvd24KK3Jpc2suIFRoZXJlIGlzIE5PIFNVUFBPUlQgZm9yIHRoaXMgc29mdHdhcmUuIFNvbWUgaGVscCBtYXkgYmUgYXZhaWxhYmxlCit0aHJvdWdoIHRoZSB3ZWIgc2l0ZSBvciB0aGUgbWFpbGluZyBsaXN0IGJ1dCBzdWNoIHN1cHBvcnQgaXMgdG90YWxseSBhdAorb3VyIG93biBvcHRpb24gYW5kIHdpdGhvdXQgd2FycmFudHkuIElmIHlvdSBjaG9vc2UgdG8gYXNzdW1lIGFsbCBhbmQKK3RvdGFsIHJpc2sgYnkgdXNpbmcgdGhpcyBkcml2ZXIsIHdlIGVuY291cmFnZSB5b3UgdG8gam9pbiB0aGUgYmV0YQorbWFpbGluZyBsaXN0LgorCitUbyBqb2luIHRoZSBMaW51eCBiZXRhIG1haWxpbmcgbGlzdCwgc2VuZCBhIG1lc3NhZ2UgdG86CittYWpvcmRvbW9Ac3BlbGxjYXN0LmNvbSB3aXRoIHRoZSB3b3JkcyAic3Vic2NyaWJlIGxpbnV4LWJldGEiIGFzIHRoZSBvbmx5Citjb250ZW50cyBvZiB0aGUgbWVzc2FnZS4gRG8gbm90IGluY2x1ZGUgYSBzaWduYXR1cmUuIElmIHlvdSBjaG9vc2UgdG8KK3JlbW92ZSB5b3Vyc2VsZiBmcm9tIHRoaXMgbGlzdCBhdCBhIGxhdGVyIGRhdGUsIHNlbmQgYW5vdGhlciBtZXNzYWdlIHRvCit0aGUgc2FtZSBhZGRyZXNzIHdpdGggdGhlIHdvcmRzICJ1bnN1YnNjcmliZSBsaW51eC1iZXRhIiBhcyBpdHMgb25seQorY29udGVudHMuCisKK1RBQkxFIE9GIENPTlRFTlRTCistLS0tLS0tLS0tLS0tLS0tLQorCTEuIEludHJvZHVjdGlvbgorCSAxLjEgV2hhdCBpcyBJU0RONExpbnV4PworCSAxLjIgV2hhdCBpcyBkaWZmZXJlbnQgYmV0d2VlbiB0aGlzIGRyaXZlciBhbmQgcHJldmlvdXMgZHJpdmVycz8KKwkgMS4zIEhvdyBkbyBJIHNldHVwIG15IHN5c3RlbSB3aXRoIHRoZSBjb3JyZWN0IHNvZnR3YXJlIHRvIHVzZQorCSAgICAgdGhpcyBkcml2ZXIgcmVsZWFzZT8KKwkKKwkyLiBCYXNpYyBPcGVyYXRpb25zCisJIDIuMSBVbnBhY2tpbmcgYW5kIGluc3RhbGxpbmcgdGhlIGRyaXZlcgorCSAyLjIgUmVhZCB0aGUgbWFuIHBhZ2VzISEhCisJIDIuMyBJbnN0YWxsaW5nIHRoZSBkcml2ZXIKKwkgMi40IFJlbW92aW5nIHRoZSBkcml2ZXIKKwkgMi41IFdoYXQgdG8gZG8gaWYgaXQgZG9lc24ndCBsb2FkCisJIDIuNiBIb3cgdG8gc2V0dXAgSVNETjRMaW51eCB3aXRoIHRoZSBkcml2ZXIKKworCTMuIEJldGEgQ2hhbmdlIFN1bW1hcmllcyBhbmQgTWlzY2VsbGFuZW91cyBOb3RlcworCisxLiBJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmV2aXNpb24gMiBMaW51eCBkcml2ZXIgZm9yIFNwZWxsQ2FzdGVyIElTQSBJU0ROIGFkYXB0ZXJzIGlzIGJ1aWx0Cit1cG9uIElTRE40TGludXggYXZhaWxhYmxlIHNlcGFyYXRlbHkgb3IgYXMgaW5jbHVkZWQgaW4gTGludXggMi4wIGFuZCBsYXRlci4KK1RoZSBkcml2ZXIgd2lsbCBzdXBwb3J0IGEgbWF4aW11bSBvZiA0IGFkYXB0ZXJzIGluIGFueSBvbmUgc3lzdGVtIG9mIGFueQordHlwZSBpbmNsdWRpbmcgRGF0YUNvbW11dGUvQlJJLCBEYXRhQ29tbXV0ZS9QUkkgYW5kIFRlbGVDb21tdXRlL0JSSSBmb3IgYQorbWF4aW11bSBvZiA5MiBjaGFubmVscyBmb3IgaG9zdC4gVGhlIGRyaXZlciBpcyBzdXBwbGllZCBhcyBhIG1vZHVsZSBpbgorc291cmNlIGZvcm0gYW5kIG5lZWRzIHRvIGJlIGNvbXBsaWVkIGJlZm9yZSBpdCBjYW4gYmUgdXNlZC4gSXQgaGFzIGJlZW4KK3Rlc3RlZCBvbiBMaW51eCAyLjAuMjAuCisKKzEuMSBXaGF0IElzIElTRE40TGludXgKKworSVNETjRMaW51eCBpcyBhIGRyaXZlciBhbmQgc2V0IG9mIHRvb2xzIHVzZWQgdG8gYWNjZXNzIGFuZCB1c2UgSVNETiBkZXZpY2VzCitvbiBhIExpbnV4IHBsYXRmb3JtIGluIGEgY29tbW9uIGFuZCBzdGFuZGFyZCB3YXkuIEl0IHN1cHBvcnRzIEhETEMgYW5kIFBQUAorcHJvdG9jb2xzIGFuZCBvZmZlcnMgY2hhbm5lbCBidW5kbGluZyBhbmQgTUxQUFAgc3VwcG9ydC4gVG8gdXNlIElTRE40TGludXgKK3lvdSBuZWVkIHRvIGNvbmZpZ3VyZSB5b3VyIGtlcm5lbCBmb3IgSVNETiBzdXBwb3J0IGFuZCBnZXQgdGhlIElTRE40TGludXgKK3Rvb2wga2l0IGZyb20gb3VyIHdlYiBzaXRlLgorCitJU0RONExpbnV4IGNyZWF0ZXMgYSBjaGFubmVsIHBvb2wgZnJvbSBhbGwgb2YgdGhlIGF2YWlsYWJsZSBJU0ROIGNoYW5uZWxzCithbmQgdGhlcmVmb3JlIGNhbiBmdW5jdGlvbiBhY3Jvc3MgYWRhcHRlcnMuIFdoZW4gYW4gSVNETjRMaW51eCBjb21wbGlhbnQKK2RyaXZlciAoc3VjaCBhcyBvdXJzKSBpcyBsb2FkZWQsIGFsbCBvZiB0aGUgY2hhbm5lbHMgZ28gaW50byBhIHBvb2wgYW5kCithcmUgdXNlZCBvbiBhIGZpcnN0LWNvbWUgZmlyc3Qtc2VydmVkIGJhc2lzLiBJbiBhZGRpdGlvbiwgaW5kaXZpZHVhbAorY2hhbm5lbHMgY2FuIGJlIHNwZWNpZmljYWxseSBib3VuZCB0byBwYXJ0aWN1bGFyIGludGVyZmFjZXMuCisKKzEuMiBXaGF0IGlzIGRpZmZlcmVudCBiZXR3ZWVuIHRoaXMgZHJpdmVyIGFuZCBwcmV2aW91cyBkcml2ZXJzPworCitUaGUgcmV2aXNpb24gMiBkcml2ZXIgYmVzaWRlcyBhZG9wdGluZyB0aGUgSVNETjRMaW51eCBhcmNoaXRlY3R1cmUgaGFzIG1hbnkKK3N1YnRsZSBhbmQgbm90IHNvIHN1YnRsZSBmdW5jdGlvbmFsIGRpZmZlcmVuY2VzIGZyb20gcHJldmlvdXMgcmVsZWFzZXMuIFRoZXNlCitpbmNsdWRlOgorCS0gTW9yZSBlZmZpY2llbnQgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50IGNvbWJpbmVkIHdpdGggYSBzaW1wbGVyCisJICBjb25maWd1cmF0aW9uLiBBbGwgYWRhcHRlcnMgbm93IHVzZSBvbmx5IDE2S2J5dGVzIG9mIHNoYXJlZCBSQU0KKwkgIHZlcnN1cyBiZXR3ZWVuIDE2SyBhbmQgNjRLLiBOZXcgbWV0aG9kcyBmb3IgdXNpbmcgdGhlIHNoYXJlZCBSQU0KKwkgIGFsbG93IHVzIHRvIHV0aWxpemUgYWxsIG9mIHRoZSBhdmFpbGFibGUgUkFNIG9uIHRoZSBhZGFwdGVyIHRocm91Z2gKKwkgIG9ubHkgb25lIDE2SyBwYWdlLgorCS0gQmV0dGVyIGRldGVjdGlvbiBvZiBhdmFpbGFibGUgdXBwZXIgbWVtb3J5LiBUaGUgcHJvYmluZyByb3V0aW5lcworCSAgaGF2ZSBiZWVuIGltcHJvdmVkIHRvIGJldHRlciBkZXRlY3QgYXZhaWxhYmxlIHNoYXJlZCBSQU0gcGFnZXMgYW5kCisJICB1c2VkIHBhZ2VzIGFyZSBub3cgbG9ja2VkLgorCS0gRGVjcmVhc2VkIGxvYWRpbmcgdGltZSBhbmQgYSB3aWRlciByYW5nZSBvZiBJL08gcG9ydHMgcHJvYmVkLgorCSAgV2UgaGF2ZSBzaWduaWZpY2FudGx5IHJlZHVjZWQgdGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIHRvIGxvYWQKKwkgIHRoZSBkcml2ZXIgYW5kIGF0IHRoZSBzYW1lIHRpbWUgZG91YmxlZCB0aGUgbnVtYmVyIG9mIEkvTyBwb3J0cworCSAgcHJvYmVkIGluY3JlYXNpbmcgdGhlIGxpa2VsaWhvb2Qgb2YgZmluZGluZyBhbiBhZGFwdGVyLgorCS0gV2Ugbm93IHN1cHBvcnQgYWxsIElTQSBhZGFwdGVyIG1vZGVscyB3aXRoIGEgc2luZ2xlIGRyaXZlciBpbnN0ZWFkCisJICBvZiBzZXBhcmF0ZSBkcml2ZXJzIGZvciBlYWNoIG1vZGVsLiBUaGUgcmV2aXNpb24gMiBkcml2ZXIgc3VwcG9ydHMKKwkgIHRoZSBEYXRhQ29tbXV0ZS9CUkksIERhdGFDb21tdXRlL1BSSSBhbmQgVGVsZUNvbW11dGUvQlJJIGluIGFueQorCSAgY29tYmluYXRpb24gdXAgdG8gYSBtYXhpbXVtIG9mIGZvdXIgYWRhcHRlcnMgcGVyIHN5c3RlbS4KKwktIE9uIGJvYXJkIFBQUCBwcm90b2NvbCBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQgaW4gZmF2b3VyIG9mIHRoZQorCSAgc3luYy1QUFAgc3VwcG9ydCB1c2VkIGluIElTRE40TGludXguIFRoaXMgbWVhbnMgbW9yZSBjb250cm9sIG9mCisJICB0aGUgcHJvdG9jb2wgcGFyYW1ldGVycywgZmFzdGVyIG5lZ290aWF0aW9uIHRpbWUgYW5kIGEgbW9yZQorCSAgZmFtaWxpYXIgaW50ZXJmYWNlLgorCisxLjMgSG93IGRvIEkgc2V0dXAgbXkgc3lzdGVtIHdpdGggdGhlIGNvcnJlY3Qgc29mdHdhcmUgdG8gdXNlCisgICAgdGhpcyBkcml2ZXIgcmVsZWFzZT8KKworQmVmb3JlIHlvdSBjYW4gY29tcGlsZSwgaW5zdGFsbCBhbmQgdXNlIHRoZSBTcGVsbENhc3RlciBJU0EgSVNETiBkcml2ZXIsIHlvdQorbXVzdCBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIHNvZnR3YXJlIGlzIGluc3RhbGxlZCwgY29uZmlndXJlZCBhbmQgcnVubmluZzoKKworCS0gTGludXgga2VybmVsIDIuMC4yMCBvciBsYXRlciB3aXRoIHRoZSByZXF1aXJlZCBpbml0IGFuZCBwcworCSAgdmVyc2lvbnMuIFBsZWFzZSBzZWUgeW91ciBkaXN0cmlidXRpb24gdmVuZG9yIGZvciB0aGUgY29ycmVjdAorCSAgdXRpbGl0eSBwYWNrYWdlcy4gVGhlIGxhdGVzdCBrZXJuZWwgaXMgYXZhaWxhYmxlIGZyb20KKwkgIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgva2VybmVsL3YyLjAvCisKKwktIFRoZSBsYXRlc3QgbW9kdWxlcyBwYWNrYWdlIChtb2R1bGVzLTIuMC4wLnRhci5neikgZnJvbQorCSAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9rZXJuZWwvbW9kdWxlcy0yLjAuMC50YXIuZ3oKKworCS0gVGhlIElTRE40TGludXggdG9vbHMgYXZhaWxhYmxlIGZyb20gCisJICBmdHA6Ly9mdHAuZnJhbmtlbi5kZS9wdWIvaXNkbjRsaW51eC92Mi4wL2lzZG40ay11dGlscy0yLjAudGFyLmd6CisJICBUaGlzIHBhY2thZ2UgbWF5IGZhaWwgdG8gY29tcGlsZSBmb3IgeW91IHNvIHlvdSBjYW4gYWx0ZXJuYXRpdmVseQorCSAgZ2V0IGEgcHJlLWNvbXBpbGVkIHZlcnNpb24gZnJvbQorCSAgZnRwOi8vZnRwLnNwZWxsY2FzdC5jb20vcHViL2RyaXZlcnMvaXNkbjRsaW51eC9pc2RuNGstYmluLTIuMC50YXIuZ3oKKworCisyLiBCYXNpYyBPcGVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKzIuMSBVbnBhY2tpbmcgYW5kIGluc3RhbGxpbmcgdGhlIGRyaXZlcgorCisJMS4gQXMgcm9vdCwgY3JlYXRlIGEgZGlyZWN0b3J5IGluIGEgY29udmVuaWVudCBwbGFjZS4gV2Ugc3VnZ2VzdAorCSAgIC91c3Ivc3JjL3NwZWxsY2FzdGVyLgorCQorCTIuIFVucGFjayB0aGUgYXJjaGl2ZSB3aXRoIDoKKwkJdGFyIHh6ZiBzYy1uLm5uLnRhci5neiAtQyAvdXNyL3NyYy9zcGVsbGNhc3RlcgorCQorCTMuIENoYW5nZSBkaXJlY3RvcnkgdG8gL3Vzci9zcmMvc3BlbGxjYXN0ZXIKKworCTQuIFJlYWQgdGhlIFJFQURNRSBhbmQgUkVMTk9URVMgZmlsZXMuCisKKwk1LiBSdW4gJ21ha2UnIGFuZCBpZiBhbGwgZ29lcyB3ZWxsLCBydW4gJ21ha2UgaW5zdGFsbCcuCisKKzIuMiBSZWFkIHRoZSBtYW4gcGFnZXMhISEKKworTWFrZSBzdXJlIHlvdSByZWFkIHRoZSBzY2N0cmwoOCkgYW5kIHNjKDQpIG1hbnVhbCBwYWdlcyBiZWZvcmUgY29udGludWluZworYW55IGZ1cnRoZXIuIFR5cGUgJ21hbiA4IHNjY3RybCcgYW5kICdtYW4gNCBzYycuCisKKzIuMyBJbnN0YWxsaW5nIHRoZSBkcml2ZXIKKworVG8gaW5zdGFsbCB0aGUgZHJpdmVyLCB0eXBlICcvc2Jpbi9pbnNtb2Qgc2MnIGFzIHJvb3QuIHNjKDQpIGRldGFpbHMgb3B0aW9ucworeW91IGNhbiBzcGVjaWZ5IGJ1dCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gdXNlIGFueSB1bmxlc3MgdGhpcyBkb2Vzbid0IHdvcmsuCisKK01ha2Ugc3VyZSB0aGUgZHJpdmVyIGxvYWRlZCBhbmQgZGV0ZWN0ZWQgYWxsIG9mIHRoZSBhZGFwdGVycyBieSB0eXBpbmcKKydkbWVzZycuCisKK1RoZSBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgc28gdGhhdCBpdCBpcyBsb2FkZWQgdXBvbiBzdGFydHVwLiAgVG8gZG8gdGhpcywgCitlZGl0IHRoZSBmaWxlICIvZXRjL21vZHVsZXMvJ3VuYW1lIC1mJy8ndW5hbWUgLXYnIiBhbmQgaW5zZXJ0IHRoZSBkcml2ZXIgbmFtZQorInNjIiBpbnRvIHRoaXMgZmlsZS4KKworMi40IFJlbW92aW5nIHRoZSBkcml2ZXIKKworVG8gcmVtb3ZlIHRoZSBkcml2ZXIsIGRlbGV0ZSBhbnkgaW50ZXJmYWNlcyB0aGF0IG1heSBleGlzdCAoc2VlIGlzZG5jdHJsKDgpCitmb3IgbW9yZSBvbiB0aGlzKSBhbmQgdGhlbiB0eXBlICcvc2Jpbi9ybW1vZCBzYycuCisKKzIuNSBXaGF0IHRvIGRvIGlmIGl0IGRvZXNuJ3QgbG9hZAorCitJZiwgd2hlbiB5b3UgdHJ5IHRvIGluc3RhbGwgdGhlIGRyaXZlciwgeW91IGdldCBhIG1lc3NhZ2UgbWVudGlvbmluZworJ3JlZ2lzdGVyX2lzZG4nIHRoZW4geW91IGRvIG5vdCBoYXZlIHRoZSBJU0RONExpbnV4IHN5c3RlbSBpbnN0YWxsZWQuIFBsZWFzZQorbWFrZSBzdXJlIHRoYXQgSVNETiBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4KKworSWYgeW91IGdldCBhIG1lc3NhZ2UgdGhhdCBzYXlzICdpbml0aWFsaXphdGlvbiBvZiBzYyBmYWlsZWQnLCB0aGVuIHRoZQorZHJpdmVyIGZhaWxlZCB0byBkZXRlY3QgYW4gYWRhcHRlciBvciBmYWlsZWQgdG8gZmluZCByZXNvdXJjZXMgbmVlZGVkIHN1Y2gKK2FzIGEgZnJlZSBJUlEgbGluZSBvciBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuIElmIHlvdSBhcmUgc3VyZSB0aGVyZSBhcmUgZnJlZQorcmVzb3VyY2VzIGF2YWlsYWJsZSwgdXNlIHRoZSBpbnNtb2Qgb3B0aW9ucyBkZXRhaWxlZCBpbiBzYyg0KSB0byBvdmVycmlkZQordGhlIHByb2JpbmcgZnVuY3Rpb24uICAKKworVXBvbiB0ZXN0aW5nLCB0aGUgZm9sbG93aW5nIHByb2JsZW0gd2FzIG5vdGVkLCB0aGUgZHJpdmVyIHdvdWxkIGxvYWQgd2l0aG91dAorcHJvYmxlbXMsIGJ1dCB0aGUgYm9hcmQgd291bGQgbm90IHJlc3BvbmQgYmV5b25kIHRoYXQgcG9pbnQuICBXaGVuIGEgY2hlY2sgd2FzIAorZG9uZSB3aXRoICdjYXQgL3Byb2MvaW50ZXJydXB0cycgdGhlIGludGVycnVwdCBjb3VudCBmb3Igc2Mgd2FzIDAuICBJbiB0aGUgZXZlbnQgCitvZiB0aGlzIHByb2JsZW0sIGNoYW5nZSB0aGUgQklPUyBzZXR0aW5ncyBzbyB0aGF0IHRoZSBpbnRlcnJ1cHRzIGluIHF1ZXN0aW9uIGFyZQorcmVzZXJ2ZWQgZm9yIElTQSB1c2Ugb25seS4gICAKKworCisyLjYgSG93IHRvIHNldHVwIElTRE40TGludXggd2l0aCB0aGUgZHJpdmVyCisKK1RoZXJlIGFyZSB0aHJlZSBtYWluIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHlvdSBjYW4gdXNlIHdpdGggdGhlIGRyaXZlcjoKKworQSkJQmFzaWMgSERMQyBjb25uZWN0aW9uCitCKQlQUFAgY29ubmVjdGlvbgorQykJTUxQUFAgY29ubmVjdGlvbgorCitJdCBzaG91bGQgYmUgbWVudGlvbmVkIGhlcmUgdGhhdCB5b3UgbWF5IGFsc28gdXNlIGEgdHR5IGNvbm5lY3Rpb24gaWYgeW91CitkZXNpcmUuIFRoZSBEb2N1bWVudGF0aW9uIGRpcmVjdG9yeSBvZiB0aGUgaXNkbjRsaW51eCBzdWJzeXN0ZW0gb2ZmZXJzIGdvb2QKK2RvY3VtZW50YXRpb24gb24gdGhpcyBmZWF0dXJlLgorCitBKSAxMCBzdGVwcyB0byB0aGUgZXN0YWJsaXNobWVudCBvZiBhIGJhc2ljIEhETEMgY29ubmVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLSBwbGVhc2Ugb3BlbiB0aGUgaXNkbi1oZGxjIGZpbGUgaW4gdGhlIGV4YW1wbGVzIGRpcmVjdG9yeSBhbmQgZm9sbG93IGFsb25nLi4uCisJCisJVGhpcyBmaWxlIGlzIGEgc2NyaXB0IHVzZWQgdG8gY29uZmlndXJlIGEgQlJJIElTRE4gVEEgdG8gZXN0YWJsaXNoIGEgCisJYmFzaWMgSERMQyBjb25uZWN0aW9uIGJldHdlZW4gaXRzIHR3byBjaGFubmVscy4gIFR3byBuZXR3b3JrIAorCWludGVyZmFjZXMgYXJlIGNyZWF0ZWQgYW5kIHR3byByb3V0ZXMgYWRkZWQgYmV0d2VlbiB0aGUgY2hhbm5lbHMuCisKKwlpKSAgIHVzaW5nIHRoZSBpc2RuY3RybCB1dGlsaXR5LCBhZGQgYW4gaW50ZXJmYWNlIHdpdGggImFkZGlmIiBhbmQgCisJICAgICBuYW1lIGl0ICJpc2RuMCIKKwlpaSkgIGFkZCB0aGUgb3V0Z29pbmcgYW5kIGluYm91bmQgdGVsZXBob25lIG51bWJlcnMKKwlpaWkpIHNldCB0aGUgTGF5ZXIgMiBwcm90b2NvbCB0byBoZGxjCisJaXYpICBzZXQgdGhlIGVheiBvZiB0aGUgaW50ZXJmYWNlIHRvIGJlIHRoZSBwaG9uZSBudW1iZXIgb2YgdGhhdCAKKwkgICAgIHNwZWNpZmljIGNoYW5uZWwKKwl2KSAgIHRvIHR1cm4gdGhlIGNhbGxiYWNrIGZlYXR1cmVzIG9mZiwgc2V0IHRoZSBjYWxsYmFjayB0byAib2ZmIiBhbmQKKwkgICAgIHRoZSBjYWxsYmFjayBkZWxheSAoY2JkZWxheSkgdG8gMC4KKwl2aSkgIHRoZSBoYW5ndXAgdGltZW91dCBjYW4gYmUgc2V0IHRvIGEgc3BlY2lmaWVkIG51bWJlciBvZiBzZWNvbmRzCisJdmlpKSB0aGUgaGFuZ3VwIHVwb24gaW5jb21pbmcgY2FsbCBjYW4gYmUgc2V0IG9uIG9yIG9mZiAKKwl2aWlpKSB1c2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8gYnJpbmcgdXAgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdpdGggCisJICAgICAgYSBzcGVjaWZpYyBJUCBhZGRyZXNzIGFuZCBwb2ludCB0byBwb2ludCBhZGRyZXNzCisJaXgpICBhZGQgYSByb3V0ZSB0byB0aGUgSVAgYWRkcmVzcyB0aHJvdWdoIHRoZSBpc2RuMCBpbnRlcmZhY2UKKwl4KSAgIGEgcGluZyBzaG91bGQgcmVzdWx0IGluIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSBjb25uZWN0aW9uCisKKwkKK0IpIEVzdGFibGlzaG1lbnQgb2YgYSBQUFAgY29ubmVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gcGxlYXNlIG9wZW4gdGhlIGlzZG4tcHBwIGZpbGUgaW4gdGhlIGV4YW1wbGVzIGRpcmVjdG9yeSBhbmQgZm9sbG93IGFsb25nLi4uCisJCisJVGhpcyBmaWxlIGlzIGEgc2NyaXB0IHVzZWQgdG8gY29uZmlndXJlIGEgQlJJIElTRE4gVEEgdG8gZXN0YWJsaXNoIGEgCisJUFBQIGNvbm5lY3Rpb24gCWJldHdlZW4gdGhlIHR3byBjaGFubmVscy4gIFRoZSBmaWxlIGlzIGFsbW9zdCAKKwlpZGVudGljYWwgdG8gdGhlIEhETEMgY29ubmVjdGlvbiBleGFtcGxlIGV4Y2VwdCB0aGF0IHRoZSBwYWNrZXQgCisJZW5jYXBzdWxhdGlvbiB0eXBlIGhhcyB0byBiZSBzZXQuCisJCisJdXNlIHRoZSBzYW1lIHByb2NlZHVyZSBhcyBpbiB0aGUgSERMQyBjb25uZWN0aW9uIGZyb20gc3RlcHMgaSkgdG8gCisJaWlpKSB0aGVuLCBhZnRlciB0aGUgTGF5ZXIgMiBwcm90b2NvbCBpcyBzZXQsIHNldCB0aGUgZW5jYXBzdWxhdGlvbiAKKwkiZW5jYXAiIHRvIHN5bmNwcHAuIFdpdGggdGhpcyBkb25lLCB0aGUgcmVzdCBvZiB0aGUgc3RlcHMsIGl2KSB0byB4KSAKKwljYW4gYmUgZm9sbG93ZWQgZnJvbSBhYm92ZS4KKworCVRoZW4sIHRoZSBpcHBwZCAoaXBwcCBkYWVtb24pIG11c3QgYmUgc2V0dXA6CisJCisJeGkpICAgdXNlIHRoZSBpcHBwZCBmdW5jdGlvbiBmb3VuZCBpbiAvc2Jpbi9pcHBwZCB0byBzZXQgdGhlIGZvbGxvd2luZzoKKwl4aWkpICB0YWtlIG91dCAobWludXMpIFZKIGNvbXByZXNzaW9uIGFuZCBic2QgY29tcHJlc3Npb24KKwl4aWlpKSBzZXQgdGhlIG1ydSBzaXplIHRvIDIwMDAKKwl4aXYpICBsaW5rIHRoZSB0d28gL2RldiBpbnRlcmZhY2VzIHRvIHRoZSBkYWVtb24KKworTk9URTogIEEgIioiIGluIHRoZSBpbmJvdW5kIHRlbGVwaG9uZSBudW1iZXIgc3BlY2lmaWVzIHRoYXQgYSBjYWxsIGNhbiBiZSAKK2FjY2VwdGVkIG9uIGFueSBudW1iZXIuCisKK0MpIEVzdGFibGlzaG1lbnQgb2YgYSBNTFBQUCBjb25uZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIHBsZWFzZSBvcGVuIHRoZSBpc2RuLW1wcHAgZmlsZSBpbiB0aGUgZXhhbXBsZXMgZGlyZWN0b3J5IGFuZCBmb2xsb3cgYWxvbmcuLi4KKwkKKwlUaGlzIGZpbGUgaXMgYSBzY3JpcHQgdXNlZCB0byBjb25maWd1cmUgYSBCUkkgSVNETiBUQSB0byBhY2NlcHQgYSAKKwlNdWx0aSBMaW5rIFBQUCBjb25uZWN0aW9uLiAKKwkKKwlpKSAgIHVzaW5nIHRoZSBpc2RuY3RybCB1dGlsaXR5LCBhZGQgYW4gaW50ZXJmYWNlIHdpdGggImFkZGlmIiBhbmQgCisJICAgICBuYW1lIGl0ICJpcHBwMCIKKwlpaSkgIGFkZCB0aGUgaW5ib3VuZCB0ZWxlcGhvbmUgbnVtYmVyCisJaWlpKSBzZXQgdGhlIExheWVyIDIgcHJvdG9jb2wgdG8gaGRsYyBhbmQgdGhlIExheWVyIDMgcHJvdG9jb2wgdG8gCisJICAgICB0cmFucyAodHJhbnNwYXJlbnQpCisJaXYpICBzZXQgdGhlIHBhY2tldCBlbmNhcHN1bGF0aW9uIHRvIHN5bmNwcHAKKwl2KSAgIHNldCB0aGUgZWF6IG9mIHRoZSBpbnRlcmZhY2UgdG8gYmUgdGhlIHBob25lIG51bWJlciBvZiB0aGF0IAorCSAgICAgc3BlY2lmaWMgY2hhbm5lbAorCXZpKSAgdG8gdHVybiB0aGUgY2FsbGJhY2sgZmVhdHVyZXMgb2ZmLCBzZXQgdGhlIGNhbGxiYWNrIHRvICJvZmYiIGFuZAorCSAgICAgdGhlIGNhbGxiYWNrIGRlbGF5IChjYmRlbGF5KSB0byAwLgorCXZpKSAgdGhlIGhhbmd1cCB0aW1lb3V0IGNhbiBiZSBzZXQgdG8gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNlY29uZHMKKwl2aWkpIHRoZSBoYW5ndXAgdXBvbiBpbmNvbWluZyBjYWxsIGNhbiBiZSBzZXQgb24gb3Igb2ZmIAorCXZpaWkpIGFkZCBhIHNsYXZlIGludGVyZmFjZSBhbmQgbmFtZSBpdCAiaXBwcDMyIiBmb3IgZXhhbXBsZQorCWl4KSAgc2V0IHRoZSBzaW1pbGFyIHBhcmFtZXRlcnMgZm9yIHRoZSBpcHBwMzIgaW50ZXJmYWNlCisJeCkgICB1c2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8gYnJpbmctdXAgdGhlIGlwcHAwIGludGVyZmFjZSB3aXRoIGEgCisJICAgICBzcGVjaWZpYyBJUCBhZGRyZXNzIGFuZCBwb2ludCB0byBwb2ludCBhZGRyZXNzCisJeGkpICBhZGQgYSByb3V0ZSB0byB0aGUgSVAgYWRkcmVzcyB0aHJvdWdoIHRoZSBpcHBwMCBpbnRlcmZhY2UKKwl4aWkpIHVzZSB0aGUgaXBwcGQgZnVuY3Rpb24gZm91bmQgaW4gL3NiaW4vaXBwcGQgdG8gc2V0IHRoZSBmb2xsb3dpbmc6CisJeGlpaSkgdGFrZSBvdXQgKG1pbnVzKSBic2QgY29tcHJlc3Npb24KKwl4aXYpIHNldCB0aGUgbXJ1IHNpemUgdG8gMjAwMAorCXh2KSAgYWRkICgrKSB0aGUgbXVsdGktbGluayBmdW5jdGlvbiAiK21wIgorCXh2aSkgIGxpbmsgdGhlIHR3byAvZGV2IGludGVyZmFjZXMgdG8gdGhlIGRhZW1vbgorCitOT1RFOiAgVG8gdXNlIHRoZSBNTFBQUCBjb25uZWN0aW9uIHRvIGRpYWwgT1VUIHRvIGEgTUxQUFAgY29ubmVjdGlvbiwgY2hhbmdlIAordGhlIGluYm91bmQgdGVsZXBob25lIG51bWJlcnMgdG8gdGhlIG91dGdvaW5nIHRlbGVwaG9uZSBudW1iZXJzIG9mIHRoZSBNTFBQUCAKK2hvc3QuCisKKwkKKzMuIEJldGEgQ2hhbmdlIFN1bW1hcmllcyBhbmQgTWlzY2VsbGFuZW91cyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGVuIHVzaW5nIHRoZSAic2NjdHJsIiB1dGlsaXR5IHRvIHVwbG9hZCBmaXJtd2FyZSByZXZpc2lvbnMgb24gdGhlIGJvYXJkLAorcGxlYXNlIG5vdGUgdGhhdCB0aGUgYnl0ZSBjb3VudCBkaXNwbGF5ZWQgYXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uIG1heSBiZQorZGlmZmVyZW50IGZyb20gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiB0aGUgImRjYmZ3bi5ubi5zciIgZmlsZS4gUGxlYXNlCitkaXNyZWdhcmQgdGhlIGRpc3BsYXllZCBieXRlIGNvdW50LgorCitJdCB3YXMgbm90ZWQgdGhhdCBpbiBCZXRhIFJlbGVhc2UgMSwgdGhlIG1vZHVsZSB3b3VsZCBmYWlsIHRvIGxvYWQgYW5kIHJlc3VsdAoraW4gYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiAnaW5zbW9kJ2VkLiBUaGlzIHByb2JsZW0gd2FzIGNyZWF0ZWQgd2hlbiBvbmUgb2YKK3RoZSBpc2RuNGxpbnV4IHBhcmFtZXRlcnMsIChpc2RuX2N0cmwsIGRhdGEgZmllbGQpIHdhcyBmaWxsZWQgaW4uIEluIHNvbWUKK2Nhc2VzLCB0aGlzIGRhdGEgZmllbGQgd2FzIE5VTEwsIGFuZCB3YXMgbGVmdCB1bmNoZWNrZWQsIHNvIHdoZW4gaXQgd2FzCityZWZlcmVuY2VkLi4uIHNlZ3YuIFRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYXJvdW5kIGxpbmUgNjMtNjggb2YgZXZlbnQuYy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5zeW5jcHBwIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5zeW5jcHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDI2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLnN5bmNwcHAKQEAgLTAsMCArMSw1OCBAQAorU29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBzZXR0aW5nIHVwIGEgc3luY1BQUAorY29ubmVjdGlvbiB1c2luZyBuZXR3b3JrIGludGVyZmFjZXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IG5lZWQgb25lIHRoaW5nIGJlc2lkZSB0aGUgaXNkbjRsaW51eCBwYWNrYWdlOgorCisgIGEgcGF0Y2hlZCBwcHBkIC4uIChJIGNhbGxlZCBpdCBpcHBwZCB0byBzaG93IHRoZSBkaWZmZXJlbmNlKQorCitDb21waWxpbmcgaXNkbjRsaW51eCB3aXRoIHN5bmMgUFBQOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGNvbXBpbGUgaXNkbjRsaW51eCB3aXRoIHRoZSBzeW5jIFBQUCBwYXJ0LCB5b3UgaGF2ZQordG8gYW5zd2VyIHRoZSBhcHByb3ByaWF0ZSBxdWVzdGlvbiB3aGVuIGRvaW5nIGEgIm1ha2UgY29uZmlnIgorRG9uJ3QgZm9yZ2V0IHRvIGxvYWQgdGhlIHNsaGMubworbW9kdWxlIGJlZm9yZSB0aGUgaXNkbi5vIG1vZHVsZSwgaWYgVkotY29tcHJlc3Npb24gc3VwcG9ydAoraXMgbm90IGNvbXBpbGVkIGludG8geW91ciBrZXJuZWwuIChlLmcgaWYgeW91IGhhdmUgbm8gUFBQIG9yCitDU0xJUCBpbiB0aGUga2VybmVsKQorCitVc2luZyBpc2RuNGxpbnV4IHdpdGggc3luYyBQUFA6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTeW5jIFBQUCBpcyBqdXN0IGFub3RoZXIgZW5jYXBzdWxhdGlvbiBmb3IgaXNkbjRsaW51eC4gVGhlCituYW1lIHRvIGVuYWJsZSBzeW5jIFBQUCBlbmNhcHN1bGF0aW9uIGlzICdzeW5jcHBwJyAuLiBlLmc6CisKKyAgL3NiaW4vaXNkbmN0cmwgZW5jYXAgaXBwcDAgc3luY3BwcAorCitUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGlzIGhlcmUgJ2lwcHAwJy4gWW91IG5lZWQgCitvbmUgaW50ZXJmYWNlIHdpdGggdGhlIG5hbWUgJ2lwcHAwJyB0byBzYXR1cmF0ZSB0aGUKK2lwcHBkLCB3aGljaCBjaGVja3MgdGhlIHBwcCB2ZXJzaW9uIHZpYSB0aGlzIGludGVyZmFjZS4KK0N1cnJlbnRseSwgYWxsIGRldmljZXMgbXVzdCBoYXZlIHRoZSBuYW1lIGlwcHBYIHdoZXJlCisnWCcgaXMgYSBkZWNpbWFsIHZhbHVlLgorCitUbyBzZXQgdXAgYSBQUFAgY29ubmVjdGlvbiB5b3UgbmVlZCB0aGUgaXBwcGQgLi4gWW91IG11c3Qgc3RhcnQgCit0aGUgaXBwcGQgb25jZSBhZnRlciBpbnN0YWxsaW5nIHRoZSBtb2R1bGVzLiBUaGUgaXBwcGQgCitjb21tdW5pY2F0ZXMgd2l0aCB0aGUgaXNkbjRsaW51eCBsaW5rLWxldmVsIGRyaXZlciB1c2luZyB0aGUKKy9kZXYvaXBwcDAgdG8gL2Rldi9pcHBwMTUgZGV2aWNlcy4gT25lIGlwcHBkIGNhbiBoYW5kbGUKK2FsbCBkZXZpY2VzIGF0IG9uY2UuIElmIHlvdSB3YW50IHRvIHVzZSB0d28gUFBQIGNvbm5lY3Rpb25zCithdCB0aGUgc2FtZSB0aW1lLCB5b3UgaGF2ZSB0byBjb25uZWN0IHRoZSBpcHBwZCB0byB0d28KK2RldmljZXMgLi4gYW5kIHNvIG9uLiAKK0kndmUgaW1wbGVtZW50ZWQgb25lIGFkZGl0aW9uYWwgb3B0aW9uIGZvciB0aGUgaXBwcGQ6CisgJ3VzZWlmaXAnIHdpbGwgZ2V0IChpZiBzZXQgdG8gbm90IDAuMC4wLjApIHRoZSBJUCBhZGRyZXNzIAorIGZvciB0aGUgbmVnb3RpYXRpb24gZnJvbSB0aGUgYXR0YWNoZWQgbmV0d29yay1pbnRlcmZhY2UuIAorKGFsc286IGlwcHBkIHdpbGwgdHJ5IHRvIG5lZ290aWF0ZSBwb2ludG9wb2ludCBJUCBhcyByZW1vdGUgSVApCitZb3UgbXVzdCBkaXNhYmxlIEJTRC1jb21wcmVzc2lvbiwgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4ndAoraGFuZGxlIGNvbXByZXNzZWQgcGFja2V0cy4KKworQ2hlY2sgdGhlIGV0Yy9yYy5pc2RuLnN5bmNwcHAgaW4gdGhlIGlzZG40a2VybmVsLXV0aWwgcGFja2FnZQorZm9yIGFuIGV4YW1wbGUgc2V0dXAgc2NyaXB0LgorCitUbyB1c2UgdGhlIE1QUFAgc3R1ZmYsIHlvdSBtdXN0IGNvbmZpZ3VyZSBhIHNsYXZlIGRldmljZQord2l0aCBpc2RuNGxpbnV4LiBOb3cgY2FsbCB0aGUgaXBwcGQgd2l0aCB0aGUgJyttcCcgb3B0aW9uLgorVG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBsaW5rcywgeW91IG11c3QgdXNlIHRoZQorJ2FkZGxpbmsnIG9wdGlvbiBvZiB0aGUgaXNkbmN0cmwgdG9vbC4gKHJjLmlzZG4uc3luY3BwcC5NUFBQIGlzCithbiBleGFtcGxlIHNjcmlwdCkKKworZW5qb3kgaXQsCisgICAgbWljaGFlbAorICAgICAKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLngyNSBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUueDI1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NjFhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLngyNQpAQCAtMCwwICsxLDE4NCBAQAorICAKK1guMjUgc3VwcG9ydCB3aXRoaW4gaXNkbjRsaW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYWxwaGEvYmV0YSB0ZXN0IGNvZGUuIFVzZSBpdCBjb21wbGV0ZWx5IGF0IHlvdXIgb3duIHJpc2suCitBcyBuZXcgdmVyc2lvbnMgYXBwZWFyLCB0aGUgc3R1ZmYgZGVzY3JpYmVkIGhlcmUgbWlnaHQgc3VkZGVubHkgY2hhbmdlCitvciBiZWNvbWUgaW52YWxpZCB3aXRob3V0IG5vdGljZS4KKworS2VlcCBpbiBtaW5kOgorCitZb3UgYXJlIHVzaW5nIHNldmVyYWwgbmV3IHBhcnRzIG9mIHRoZSAyLjIueCBrZXJuZWwgc2VyaWVzIHdoaWNoCitoYXZlIG5vdCBiZWVuIHRlc3RlZCBpbiBhIGxhcmdlIHNjYWxlLiBUaGVyZWZvcmUsIHlvdSBtaWdodCBlbmNvdW50ZXIKK21vcmUgYnVncyBhcyB1c3VhbC4KKworLSBJZiB5b3UgY29ubmVjdCB0byBhbiBYLjI1IG5laWdoYm91ciBub3Qgb3BlcmF0ZWQgYnkgeW91cnNlbGYsIEFTSyB0aGUKKyAgb3RoZXIgc2lkZSBmaXJzdC4gQmUgcHJlcGFyZWQgdGhhdCBidWdzIGluIHRoZSBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorICBtaWdodCByZXN1bHQgaW4gcHJvYmxlbXMuCisKKy0gVGhpcyBpbXBsZW1lbnRhdGlvbiBoYXMgbmV2ZXIgd2lwZWQgb3V0IG15IHdob2xlIGhhcmQgZGlzayB5ZXQuIEJ1dCBhcworICB0aGlzIGlzIGV4cGVyaW1lbnRhbCBjb2RlLCBkb24ndCBibGFtZSBtZSBpZiB0aGF0IGhhcHBlbmVkIHRvIHlvdS4KKyAgQmFja2luZyB1cCBpbXBvcnRhbnQgZGF0YSB3aWxsIG5ldmVyIGhhcm0uCisKKy0gTW9uaXRvciB5b3VyIGlzZG4gY29ubmVjdGlvbnMgd2hpbGUgdXNpbmcgdGhpcyBzb2Z0d2FyZS4gVGhpcyBzaG91bGQKKyAgcHJldmVudCB5b3UgZnJvbSB1bmRlc2lyZWQgcGhvbmUgYmlsbHMgaW4gY2FzZSBvZiBkcml2ZXIgcHJvYmxlbXMuCisgIAorIAorCisKK0hvdyB0byBjb25maWd1cmUgdGhlIGtlcm5lbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCitUaGUgSVRVLVQgKGZvcm1lciBDQ0lUVCkgWC4yNSBuZXR3b3JrIHByb3RvY29sIGxheWVyIGhhcyBiZWVuIGltcGxlbWVudGVkCitpbiB0aGUgTGludXggc291cmNlIHRyZWUgc2luY2UgdmVyc2lvbiAyLjEuMTYuIFRoZSBpc2RuIHN1YnN5c3RlbSBtaWdodCBiZSAKK3VzZWZ1bCB0byBydW4gWC4yNSBvbiB0b3Agb2YgSVNETi4gSWYgeW91IHdhbnQgdG8gdHJ5IGl0LCBzZWxlY3QKKworICAgIkNDSVRUIFguMjUgUGFja2V0IExheWVyIgorCitmcm9tIHRoZSBuZXR3b3JraW5nIG9wdGlvbnMgYXMgd2VsbCBhcworCisgICAiSVNETiBTdXBwb3J0IiBhbmQgIlguMjUgUExQIG9uIFRvcCBvZiBJU0ROIgorCitmcm9tIHRoZSBJU0ROIHN1YnN5c3RlbSBvcHRpb25zIHdoZW4geW91IGNvbmZpZ3VyZSB5b3VyIGtlcm5lbCBmb3IKK2NvbXBpbGF0aW9uLiBZb3UgY3VycmVudGx5IGFsc28gbmVlZCB0byBlbmFibGUKKyJQcm9tcHQgZm9yIGRldmVsb3BtZW50IGFuZC9vciBpbmNvbXBsZXRlIGNvZGUvZHJpdmVycyIgZnJvbSB0aGUKKyJDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMiIG1lbnUuIEZvciB0aGUgeDI1dHJhY2UgdXRpbGl0eSB0byB3b3JrCit5b3UgYWxzbyBuZWVkIHRvIGVuYWJsZSAiUGFja2V0IHNvY2tldCIuCisKK0ZvciBsb2NhbCB0ZXN0aW5nIGl0IGlzIGFsc28gcmVjb21tZW5kZWQgdG8gZW5hYmxlIHRoZSBpc2RubG9vcCBkcml2ZXIKK2Zyb20gdGhlIGlzZG4gc3Vic3lzdGVtJ3MgY29uZmlndXJhdGlvbiBtZW51LgorCitGb3IgdGVzdGluZywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgaXNkbiBkcml2ZXJzIGFuZCB0aGUgWC4yNSBQTFAKK3Byb3RvY29sIGFyZSBjb21waWxlZCBhcyBsb2FkYWJsZSBtb2R1bGVzLiBMaWtlIHRoaXMsIHlvdSBjYW4gcmVjb3ZlcgorZnJvbSBjZXJ0YWluIGVycm9ycyBieSBzaW1wbHkgdW5sb2FkaW5nIGFuZCByZWxvYWRpbmcgdGhlIG1vZHVsZXMuCisKKworCitXaGF0J3MgaXQgZm9yPyBIb3cgdG8gdXNlIGl0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWC4yNSBvbiB0b3Agb2YgaXNkbiBtaWdodCBiZSB1c2VmdWwgd2l0aCB0d28gZGlmZmVyZW50IHNjZW5hcmlvczoKKworLSBZb3UgbWlnaHQgd2FudCB0byBhY2Nlc3MgYSBwdWJsaWMgWC4yNSBkYXRhIG5ldHdvcmsgZnJvbSB5b3VyIExpbnV4IGJveC4KKyAgWW91IGNhbiB1c2UgaTRsIGlmIHlvdSB3ZXJlIHBoeXNpY2FsbHkgY29ubmVjdGVkIHRvIHRoZSBYLjI1IHN3aXRjaAorICBieSBhbiBJU0ROIEItY2hhbm5lbCAobGVhc2VkIGxpbmUgYXMgd2VsbCBhcyBkaWFsIHVwIGNvbm5lY3Rpb24gc2hvdWxkCisgIHdvcmspLgorCisgIFRoaXMgY29ycmVzcG9uZHMgdG8gSVRVLVQgcmVjb21tZW5kYXRpb24gWC4zMSBDYXNlIEEgKGNpcmN1aXQtbW9kZQorICBhY2Nlc3MgdG8gUFNQRE4gW3BhY2tldCBzd2l0Y2hlZCBwdWJsaWMgZGF0YSBuZXR3b3JrXSkuCisKKyAgTk9URTogWC4zMSBhbHNvIGNvdmVycyBhIENhc2UgQiAoYWNjZXNzIHRvIFBTUEROIHZpYSB2aXJ0dWFsCisgIGNpcmN1aXQgLyBwYWNrZXQgbW9kZSBzZXJ2aWNlKS4gVGhlIGxhdHRlciBtb2RlICh3aGljaCBpbiB0aGVvcnkKKyAgYWxzbyBhbGxvd3MgdXNpbmcgdGhlIEQtY2hhbm5lbCkgaXMgbm90IHN1cHBvcnRlZCBieSBpc2RuNGxpbnV4LgorICBJdCBzaG91bGQgaG93ZXZlciBiZSBwb3NzaWJsZSB0byBlc3RhYmxpc2ggc3VjaCBwYWNrZXQgbW9kZSBjb25uZWN0aW9ucworICB3aXRoIGNlcnRhaW4gYWN0aXZlIGlzZG4gY2FyZHMgcHJvdmlkZWQgdGhhdCB0aGUgZmlybXdhcmUgc3VwcG9ydHMgWC4zMQorICBhbmQgdGhlIGRyaXZlciBleHBvcnRzIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB0aGUgdXNlci4gQ3VycmVudGx5LCAKKyAgdGhlIEFWTSBCMSBkcml2ZXIgaXMgdGhlIG9ubHkgZHJpdmVyIHdoaWNoIGRvZXMgc28uIChJdCBzaG91bGQgYmUKKyAgcG9zc2libGUgdG8gYWNjZXNzIEQtY2hhbm5lbCBYLjMxIHdpdGggYWN0aXZlIEFWTSBjYXJkcyB1c2luZyB0aGUKKyAgQ0FQSSBpbnRlcmZhY2Ugb2YgdGhlIEFWTS1CMSBkcml2ZXIpLgorCistIE9yIHlvdSBtaWdodCB3YW50IHRvIG9wZXJhdGUgY2VydGFpbiBJU0ROIHRlbGVzZXJ2aWNlcyBvbiB5b3VyIGxpbnV4CisgIGJveC4gQSBsb3Qgb2YgdGhvc2UgdGVsZXNlcnZpY2VzIHJ1biBvbiB0b3Agb2YgdGhlIElTTy04MjA4CisgIChEVEUtRFRFIG1vZGUpIG5ldHdvcmsgbGF5ZXIgcHJvdG9jb2wuIElTTy04MjA4IGlzIGVzc2VudGlhbGx5IHRoZQorICBzYW1lIGFzIElUVS1UIFguMjUuCisKKyAgUG9wdWxhciBjYW5kaWRhdGVzIG9mIHN1Y2ggdGVsZXNlcnZpY2VzIGFyZSBFVVJPZmlsZSB0cmFuc2ZlciBvciBhbnkKKyAgdGVsZXNlcnZpY2UgYXBwbHlpbmcgSVRVLVQgcmVjb21tZW5kYXRpb24gVC45MC4KKworVG8gdXNlIHRoZSBYLjI1IHByb3RvY29sIG9uIHRvcCBvZiBpc2RuLCBqdXN0IGNyZWF0ZSBhbiBpc2RuIG5ldHdvcmsKK2ludGVyZmFjZSBhcyB1c3VhbCwgY29uZmlndXJlIHlvdXIgb3duIGFuZC9vciBwZWVyJ3MgSVNETiBudW1iZXJzLAorYW5kIGNob29zZSB4MjVpZmFjZSBlbmNhcHN1bGF0aW9uIGJ5CisKKyAgIGlzZG5jdHJsIGVuY2FwIDxpZmFjZS1uYW1lPiB4MjVpZmFjZS4KKworT25jZSBlbmNhcCBpcyBzZXQgbGlrZSB0aGlzLCB0aGUgZGV2aWNlIGNhbiBiZSB1c2VkIGJ5IHRoZSBYLjI1IHBhY2tldCBsYXllci4KKworQWxsIHRoZSBzdHVmZiBuZWVkZWQgZm9yIFguMjUgaXMgaW1wbGVtZW50ZWQgaW5zaWRlIHRoZSBpc2RuIGxpbmsKK2xldmVsIChtYWlubHkgaXNkbl9uZXQuYyBhbmQgc29tZSBuZXcgc291cmNlIGZpbGVzKS4gVGh1cywgaXQgc2hvdWxkCit3b3JrIHdpdGggZXZlcnkgZXhpc3RpbmcgSEwgZHJpdmVyLiBJIHdhcyBhYmxlIHRvIHN1Y2Nlc3NmdWxseSBvcGVuIFguMjUKK2Nvbm5lY3Rpb25zIG9uIHRvcCBvZiB0aGUgaXNkbmxvb3AgZHJpdmVyIGFuZCB0aGUgaGlzYXggZHJpdmVyLgorIngyNWlmYWNlIi1lbmNhcHN1bGF0aW9uIGJ5cGFzc2VzIGRlbWFuZCBkaWFsaW5nLiBEaWFsaW5nIHdpbGwgYmUKK2luaXRpYXRlZCB3aGVuIHRoZSB1cHBlciAoWC4yNSBwYWNrZXQpIGxheWVyIHJlcXVlc3RzIHRoZSBsYXBiIGRhdGFsaW5rIHRvCitiZSBlc3RhYmxpc2hlZC4gQnV0IGhhbmd1cCB0aW1lb3V0IGlzIHN0aWxsIGFjdGl2ZS4gV2hlbmV2ZXIgYSBoYW5ndXAKK29jY3VycywgYWxsIGV4aXN0aW5nIFguMjUgY29ubmVjdGlvbnMgb24gdGhhdCBsaW5rIHdpbGwgYmUgY2xlYXJlZAorSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHN1ZmZpY2llbnRseSBsYXJnZSBoYW5ndXAtdGltZW91dHMgZm9yIHRoZQoraXNkbiBpbnRlcmZhY2VzLgorCisKK0luIG9yZGVyIHRvIHNldCB1cCBhIGNvbmZvcm1pbmcgcHJvdG9jb2wgc3RhY2sgeW91IGFsc28gbmVlZCB0bworc3BlY2lmeSB0aGUgcHJvcGVyIGwyX3Byb3QgcGFyYW1ldGVyOgorCitUbyBvcGVyYXRlIGluIElTTy04MjA4ICBYLjI1IERURS1EVEUgbW9kZSwgdXNlCisKKyAgIGlzZG5jdHJsIGwyX3Byb3QgPGlmYWNlLW5hbWU+IHg3NWkKKworVG8gYWNjZXNzIGFuIFguMjUgbmV0d29yayBzd2l0Y2ggdmlhIGlzZG4gKHlvdXIgbGludXggYm94IGlzIHRoZSBEVEUpLCB1c2UKKworICAgaXNkbmN0cmwgbDJfcHJvdCA8aWZhY2UtbmFtZT4geDI1ZHRlCisKK1RvIG1pbWljIGFuIFguMjUgbmV0d29yayBzd2l0Y2ggKERDRSBzaWRlIG9mIHRoZSBjb25uZWN0aW9uKSwgdXNlCisKKyAgIGlzZG5jdHJsIGwyX3Byb3QgPGlmYWNlLW5hbWU+IHgyNWRjZQorCitIb3dldmVyLCB4MjVkdGUgb3IgeDI1ZGNlIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJ5IGFueSByZWFsIEhMCitsZXZlbCBkcml2ZXIuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB4NzVpIGFuZCB4MjVkdGUvZGNlIGlzIHRoYXQKK3gyNWRbdGNdZSB1c2VzIGZpeGVkIGxhcF9iIGFkZHJlc3Nlcy4gV2l0aCB4NzVpLCB0aGUgc2lkZSB3aGljaAoraW5pdGlhdGVzIHRoZSBpc2RuIGNvbm5lY3Rpb24gdXNlcyB0aGUgRFRFJ3MgbGFwX2IgYWRkcmVzcyB3aGlsZSB0aGUKK2NhbGxlZCBzaWRlIHVzZWQgdGhlIERDRSdzIGxhcF9iIGFkZHJlc3MuIFRodXMsIGwyX3Byb3QgeDc1aSBtaWdodAorcHJvYmFibHkgd29yayBpZiB5b3UgYWNjZXNzIGEgcHVibGljIFguMjUgbmV0d29yayBhcyBsb25nIGFzIHRoZQorY29ycmVzcG9uZGluZyBpc2RuIGNvbm5lY3Rpb24gaXMgc2V0IHVwIGJ5IHlvdS4gQXQgbGVhc3Qgb25lIHRlc3QKK3dhcyBzdWNjZXNzZnVsIHRvIGNvbm5lY3QgdmlhIGlzZG40bGludXggdG8gYW4gWC4yNSBzd2l0Y2ggdXNpbmcgdGhpcwordHJpY2suIEF0IHRoZSBzd2l0Y2ggc2lkZSwgYSB0ZXJtaW5hbCBhZGFwdGVyIFguMjEgd2FzIHVzZWQgdG8gY29ubmVjdAoraXQgdG8gdGhlIGlzZG4uCisKKworSG93IHRvIHNldCB1cCBhIHRlc3QgaW5zdGFsbGF0aW9uPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyB0ZXN0IFguMjUgb24gdG9wIG9mIGlzZG4sIHlvdSBuZWVkIHRvIGdldAorCistIGEgcmVjZW50IHZlcnNpb24gb2YgdGhlICJpc2RuY3RybCIgcHJvZ3JhbSB0aGF0IHN1cHBvcnRzIHNldHRpbmcgdGhlIG5ldworICBYLjI1IHNwZWNpZmljIHBhcmFtZXRlcnMuCisKKy0gdGhlIHgyNS11dGlscy0yLlggcGFja2FnZSBmcm9tIAorICBmdHA6Ly9mdHAuaGVzLmlraS5maS9wdWIvaGFtL2xpbnV4L2F4MjUveDI1dXRpbHMtKgorICAoZG9uJ3QgY29uZnVzZSB0aGUgeDI1LXV0aWxzIHdpdGggdGhlIGF4MjUtdXRpbHMpCisKKy0gYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMgbGludXggUEZfWDI1IHNvY2tldHMgKHNvbWUgYXJlCisgIGNvbnRhaW5lZCBpbiB0aGUgeDI1LXV0aWwgcGFja2FnZSkuCisKK0JlZm9yZSBjb21waWxpbmcgdGhlIHVzZXIgbGV2ZWwgdXRpbGl0aWVzIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb21waWxlci8KK3ByZXByb2Nlc3NvciB3aWxsIGZldGNoIHRoZSBwcm9wZXIga2VybmVsIGhlYWRlciBmaWxlcyBvZiB0aGlzIGtlcm5lbAorc291cmNlIHRyZWUuIEVpdGhlciBtYWtlIC91c3IvaW5jbHVkZS9saW51eCBhIHN5bWJvbGljIGxpbmsgcG9pbnRpbmcgdG8gCit0aGlzIGtlcm5lbCdzIGluY2x1ZGUvbGludXggZGlyZWN0b3J5IG9yIHNldCB0aGUgYXBwcm9wcmlhdGUgY29tcGlsZXIgZmxhZ3MuCisKK1doZW4gYWxsIGRyaXZlcnMgYW5kIGludGVyZmFjZXMgYXJlIGxvYWRlZCBhbmQgY29uZmlndXJlZCB5b3UgbmVlZCB0bworaWZjb25maWcgdGhlIG5ldHdvcmsgaW50ZXJmYWNlcyB1cCBhbmQgYWRkIFguMjUtcm91dGVzIHRvIHRoZW0uIFVzZQordGhlIHVzdWFsIGlmY29uZmlnIHRvb2wuCisKK2lmY29uZmlnIDxpZmFjZS1uYW1lPiB1cAorCitCdXQgYSBzcGVjaWFsIHgyNXJvdXRlIHRvb2wgKGRpc3RyaWJ1dGVkIHdpdGggdGhlIHgyNS11dGlsIHBhY2thZ2UpCitpcyBuZWVkZWQgdG8gc2V0IHVwIFguMjUgcm91dGVzLiBJLmUuIAorCit4MjVyb3V0ZSBhZGQgMDEgPGlmYWNlLW5hbWU+CisKK3dpbGwgY2F1c2UgYWxsIHguMjUgY29ubmVjdGlvbnMgdG8gdGhlIGRlc3RpbmF0aW9uIFguMjUtYWRkcmVzcworIjAxIiB0byBiZSByb3V0ZWQgdG8geW91ciBjcmVhdGVkIGlzZG4gbmV0d29yayBpbnRlcmZhY2UuCisKK1RoZXJlIGFyZSBjdXJyZW50bHkgbm8gcmVhbCBYLjI1IGFwcGxpY2F0aW9ucyBhdmFpbGFibGUuIEhvd2V2ZXIsIGZvcgordGVzdHMsIHRoZSB4MjUtdXRpbHMgcGFja2FnZSBjb250YWlucyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGVsbmV0CithbmQgdGVsbmV0ZCB0aGF0IHVzZXMgWC4yNSBzb2NrZXRzIGluc3RlYWQgb2YgdGNwL2lwIHNvY2tldHMuIFlvdSBjYW4KK3VzZSB0aG9zZSBmb3IgeW91ciBmaXJzdCB0ZXN0cy4gRnVydGhlcm1vcmUsIHlvdSBtaWdodCBjaGVjaworZnRwOi8vZnRwLmhhbWJ1cmcucG9wLmRlL3B1Yi9MT0NBTC9saW51eC9pNGwtZWZ0LyB3aGljaCBjb250YWlucyBzb21lCithbHBoYS10ZXN0IGltcGxlbWVudGF0aW9uICgiZWZ0cDRsaW51eCIpIG9mIHRoZSBFVVJPZmlsZSB0cmFuc2ZlcgorcHJvdG9jb2wuCisKK1RoZSBzY3JpcHRzIGRpc3RyaWJ1dGVkIHdpdGggdGhlIGVmdHA0bGludXggdGVzdCByZWxlYXNlcyBtaWdodCBhbHNvCitwcm92aWRlIHVzZWZ1bCBleGFtcGxlcyBmb3Igc2V0dGluZyB1cCBYLjI1IG9uIHRvcCBvZiBpc2RuLgorCitUaGUgeDI1LXV0aWxpdHkgcGFja2FnZSBhbHNvIGNvbnRhaW5zIGFuIHgyNXRyYWNlIHRvb2wgdGhhdCBjYW4gYmUKK3VzZWQgdG8gbW9uaXRvciBYLjI1IHBhY2tldHMgcmVjZWl2ZWQgYnkgdGhlIG5ldHdvcmsgaW50ZXJmYWNlcy4KK1RoZSAvcHJvYy9uZXQveDI1KiBmaWxlcyBhbHNvIGNvbnRhaW4gdXNlZnVsIGluZm9ybWF0aW9uLiAKKworLSBIZW5uZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9zeW5jUFBQLkZBUSBiL0RvY3VtZW50YXRpb24vaXNkbi9zeW5jUFBQLkZBUQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU3YTRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL3N5bmNQUFAuRkFRCkBAIC0wLDAgKzEsMjI0IEBACitzaW1wbGUgaXNkbjRsaW51eCBQUFAgRkFRIC4uIHRvIGJlIGNvbnRpbnVlZCAuLiBub3QgJ2RlYnVnZ2VkJyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUTAxOiB3aGF0J3MgcHBwZCwgaXBwcGQsIHN5bmNQUFAsIGFzeW5jUFBQID8/CitRMDI6IGVycm9yIG1lc3NhZ2UgInRoaXMgc3lzdGVtIGxhY2tzIFBQUCBzdXBwb3J0IgorUTAzOiBzdHJhbmdlIGluZm9ybWF0aW9uIHVzaW5nICdpZmNvbmZpZycKK1EwNDogTVBQUD8/IFdoYXQncyB0aGF0IGFuZCBob3cgY2FuIEkgdXNlIGl0IC4uLgorUTA1OiBJIHRyaWVkIE1QUFAgYnV0IGl0IGRvZXNuJ3Qgd29yayAKK1EwNjogY2FuIEkgdXNlIGFzeW5jaHJvbm91cyBQUFAgZW5jYXBzdWxhdGlvbiB3aXRoIG5ldHdvcmsgZGV2aWNlcworUTA3OiBBIFN1bklTRE4gbWFjaGluZSBjYW4ndCBjb25uZWN0IHRvIG15IGk0bCBzeXN0ZW0KK1EwODogSSB3YW5uYSB0YWxrIHRvIHNldmVyYWwgbWFjaGluZXMsIHdoaWNoIG5lZWQgZGlmZmVyZW50IGNvbmZpZ3MKK1EwOTogU3RhcnRpbmcgdGhlIGlwcHBkLCBJIGdldCBvbmx5IGVycm9yIG1lc3NhZ2VzIGZyb20gaTRsCitRMTA6IEkgd2FubmEgdXNlIGR5bmFtaWMgSVAgYWRkcmVzcyBhc3NpZ25tZW50IAorUTExOiBJIGNhbid0IGNvbm5lY3QuIEhvdyBjYW4gSSBjaGVjayB3aGVyZSB0aGUgcHJvYmxlbSBpcy4KK1ExMjogSG93IGNhbiBJIHJlZHVjZSBsb2dpbiBkZWxheT8gCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUTAxOiBwcHBkLCBpcHBwZCwgc3luY1BQUCwgYXN5bmNQUFAgLi4gd2hhdCBpcyB0aGF0ID8KKyAgIHdoYXQgc2hvdWxkIEkgdXNlPworQTogVGhlIHBwcGQgaXMgZm9yIGFzeW5jaHJvbm91cyBQUFAgLi4gYXN5bmNocm9ub3VzIG1lYW5zCisgICBoZXJlLCB0aGUgZnJhbWluZyBpcyBjaGFyYWN0ZXIgYmFzZWQuIChlLmcgd2hlbgorICAgdXNpbmcgdHR5SSogb3IgdHR5KiBkZXZpY2VzKQorCisgICBUaGUgaXBwcGQgaGFuZGxlcyBQUFAgcGFja2V0cyBjb21pbmcgaW4gSERMQworICAgZnJhbWVzIChiaXQgYmFzZWQgcHJvdG9jb2wpIC4uLiBUaGUgUFBQIGRyaXZlcgorICAgaW4gaXNkbjRsaW51eCBwdXNoZXMgYWxsIElQIHBhY2tldHMgZGlyZWN0CisgICB0byB0aGUgbmV0d29yayBsYXllciBhbmQgYWxsIFBQUCBwcm90b2NvbAorICAgZnJhbWVzIHRvIHRoZSAvZGV2L2lwcHAqIGRldmljZS4gCisgICBTbywgdGhlIGlwcHBkIGlzIGEgc2ltcGxlIGV4dGVybmFsIG5ldHdvcmsKKyAgIHByb3RvY29sIGhhbmRsZXIuCisKKyAgIElmIHlvdSBsb2dpbiBpbnRvIGEgcmVtb3RlIG1hY2hpbmUgdXNpbmcgdGhlCisgICAvZGV2L3R0eUkqIGRldmljZXMgYW5kIHRoZW4gZW5hYmxlIFBQUCBvbiB0aGUKKyAgIHJlbW90ZSB0ZXJtaW5hbCBzZXJ2ZXIgLT4gdXNlIHRoZSAnb2xkJyBwcHBkCisKKyAgIElmIHlvdXIgcmVtb3RlIHNpZGUgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIHNlbmQKKyAgIGZyYW1lcyAuLi4geW91IHByb2JhYmx5IGNvbm5lY3QgdG8gYSAKKyAgIHN5bmNQUFAgbWFjaGluZSAuLiB1c2UgdGhlIG5ldHdvcmsgZGV2aWNlIHBhcnQKKyAgIG9mIGlzZG40bGludXggd2l0aCB0aGUgJ3N5bmNwcHAnIGVuY2Fwc3VsYXRpb24KKyAgIGFuZCBtYWtlIHN1cmUsIHRoYXQgdGhlIGlwcHBkIGlzIHJ1bm5pbmcgYW5kIAorICAgY29ubmVjdGVkIHRvIGF0IGxlYXN0IG9uZSAvZGV2L2lwcHAqLiBDaGVjayB0aGUgCisgICBpc2RuNGxpbnV4IG1hbnVhbCBvbiBob3cgdG8gY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UuCisKKy0tCisKK1EwMjogd2hlbiBJIHN0YXJ0IHRoZSBpcHBwZCAuLiBJIG9ubHkgZ2V0IHRoZQorICAgZXJyb3IgbWVzc2FnZSAidGhpcyBzeXN0ZW0gbGFja3MgUFBQIHN1cHBvcnQiCitBOiBjaGVjayB0aGF0IGF0IGxlYXN0IHRoZSBkZXZpY2UgJ2lwcHAwJyBleGlzdHMuCisgICAoeW91IGNhbiBjaGVjayB0aGlzIGUuZyB3aXRoIHRoZSBwcm9ncmFtICdpZmNvbmZpZycpCisgICBUaGUgaXBwcGQgTkVFRFMgdGhpcyBkZXZpY2UgdW5kZXIgVEhJUyBuYW1lIC4uIAorICAgSWYgdGhpcyBkZXZpY2UgZG9lc24ndCBleGlzdHMsIHVzZToKKwlpc2RuY3RybCBhZGRpZiBpcHBwMAorCWlzZG5jdHJsIGVuY2FwIGlwcHAwIHN5bmNwcHAKKwkuLi4gKHNlZSBpc2RuNGxpbnV4IGRvYyBmb3IgbW9yZSkgLi4uCitBOiBNYXliZSB5b3UgaGF2ZSBjb21waWxlZCB0aGUgaXBwcGQgd2l0aCBhbm90aGVyCisgICBrZXJuZWwgc291cmNlIHRyZWUgdGhhbiB0aGUga2VybmVsIHlvdSBjdXJyZW50bHkKKyAgIHJ1biAuLi4gCisKKy0tCisKK1EwMzogd2hlbiBJIGxpc3QgdGhlIG5ldGRldmljZXMgd2l0aCBpZmNvbmZpZyBJIHNlZSwgdGhhdAorICAgbXkgSVNETiBpbnRlcmZhY2UgaGFzIGEgSFdhZGRyIGFuZCBJUlE9MCBhbmQgQmFzZSAKKyAgIGFkZHJlc3MgPSAwIAorQTogVGhlIGRldmljZSBpcyBhIGZha2UgZXRoZXJuZXQgZGV2aWNlIC4uIGlnbm9yZSBJUlEgYW5kIGJhc2VhZGRyCisgICBZb3UgbmVlZCB0aGUgSFdhZGRyIG9ubHkgZm9yIGV0aGVybmV0IGVuY2Fwc3VsYXRpb24uCisgICAKKy0tCisKK1EwNDogTVBQUD8/IFdoYXQncyB0aGF0IGFuZCBob3cgY2FuIEkgdXNlIGl0IC4uLgorCitBOiBNUFBQIG9yIE1QIG9yIE1QUCAoV2FybmluZzogTVAgaXMgYWxzbyBhbiAKKyAgIGFjcm9ueW0gZm9yICdNdWx0aSBQcm9jZXNzb3InKSBzdGFuZHMgZm9yCisgICBNdWx0aSBQb2ludCB0byBQb2ludCBhbmQgbWVhbnMgYnVuZGxpbmcKKyAgIG9mIHNldmVyYWwgY2hhbm5lbHMgdG8gb25lIGxvZ2ljYWwgc3RyZWFtLgorICAgVG8gZW5hYmxlIE1QUFAgbmVnb3RpYXRpb24geW91IG11c3QgY2FsbCB0aGUKKyAgIGlwcHBkIHdpdGggdGhlICcrbXAnIG9wdGlvbi4gCisgICBZb3UgbXVzdCBhbHNvIGNvbmZpZ3VyZSBhIHNsYXZlIGRldmljZSBmb3IKKyAgIGV2ZXJ5IGFkZGl0aW9uYWwgY2hhbm5lbC4gKHNlZSB0aGUgaTRsIG1hbnVhbAorICAgZm9yIG1vcmUpCisgICBUbyB1c2UgY2hhbm5lbCBidW5kbGluZyB5b3UgbXVzdCBmaXJzdCBhY3RpdmF0ZQorICAgdGhlICdtYXN0ZXInIG9yIGluaXRpYWwgY2FsbC4gTm93IHlvdSBjYW4gYWRkIAorICAgdGhlIHNsYXZlIGNoYW5uZWxzIHdpdGggdGhlIGNvbW1hbmQ6CisgICAgICAgaXNkbmN0cmwgYWRkbGluayA8ZGV2aWNlPgorICAgZS5nOgorICAgICAgIGlzZG5jdHJsIGFkZGxpbmsgaXBwcDAKKyAgIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gb3RoZXIgZW5jYXBzdWxhdGlvbnMgb2YKKyAgIGlzZG40bGludXghIFdpdGggc3luY1BQUCwgdGhlcmUgaXMgbm8gYXV0b21hdGljCisgICBhY3RpdmF0aW9uIG9mIHNsYXZlIGRldmljZXMuCisKKy0tCisKK1EwNTogSSB0cmllZCBNUFBQIGJ1dCBpdCBkb2Vzbid0IHdvcmsgLi4gdGhlIGlwcHBkCisgICB3cml0ZXMgaW4gdGhlIGRlYnVnIGxvZyBzb21ldGhpbmcgbGlrZToKKyAgIC4uIHJjdmQgWzBdW3Byb3RvPTB4M2RdIGMwIDAwIDAwIDAwIDgwIGZkIDAxIDAxIDAwIDBhIC4uLgorICAgLi4gc2VudCBbMF1bTENQIFByb3RSZWogaWQ9MHgyIDAwIDNkIGMwIDAwIDAwIDAwIDgwIGZkIDAxIC4uLgorCitBOiB5b3UgZm9yZ290IHRvIGNvbXBpbGUgTVBQUC9SRkMxNzE3IHN1cHBvcnQgaW50byB0aGUKKyAgIElTRE4gU3Vic3lzdGVtLiBSZWNvbXBpbGUgd2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLgorCistLQorCitRMDY6IGNhbiBJIHVzZSBhc3luY2hyb25vdXMgUFBQIGVuY2Fwc3VsYXRpb24KKyAgIG92ZXIgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9mIGlzZG40bGludXggLi4KKworQTogTm8gLi4gdGhhdCdzIG5vdCBwb3NzaWJsZSAuLiBVc2UgdGhlIHN0YW5kYXJkCisgICBQUFAgcGFja2FnZSBvdmVyIHRoZSAvZGV2L3R0eUkqIGRldmljZXMuIFlvdQorICAgbXVzdCBub3QgdXNlIHRoZSBpcHBwZCBmb3IgdGhpcy4KKyAgIAorLS0KKworUTA3OiBBIFN1bklTRE4gbWFjaGluZSB0cmllcyB0byBjb25uZWN0IG15IGk0bCBzeXN0ZW0sCisgICB3aGljaCBkb2Vzbid0IHdvcmsuCisgICBDaGVja2luZyB0aGUgZGVidWcgbG9nIEkganVzdCBzYXcgZ2FyYmFnZSBsaWtlOgorISFbIC4uLiBmaWxsIGluIHRoZSBsaW5lIC4uLiBdISEKKworQTogVGhlIFN1biB0cmllcyB0byB0YWxrIGFzeW5jaHJvbm91cyBQUFAgLi4uIGk0bAorICAgY2FuJ3QgdW5kZXJzdGFuZCB0aGlzIC4uLiB0cnkgdG8gdXNlIHRoZSB0dHlJKgorICAgZGV2aWNlcyB3aXRoIHRoZSBzdGFuZGFyZCBQUFAvcHBwZCBwYWNrYWdlCisKK0E6IChmcm9tIEFsZXhhbnRlciBTdHJhdXNzOiApCishIVsgLi4uIGZpbGwgaW4gbWFpbCBdISEKKworLS0KKworUTA4OiBJIHdhbm5hIHRhbGsgdG8gcmVtb3RlIG1hY2hpbmVzLCB3aGljaCBuZWVkCisgICBhIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLiBUaGUgb25seSB3YXkKKyAgIEkgZm91bmQgdG8gZG8gdGhpcyBpcyB0byBraWxsIHRoZSBpcHBwZCBhbmQKKyAgIHN0YXJ0IGEgbmV3IG9uZSB3aXRoIGFub3RoZXIgY29uZmlnIHRvIGNvbm5lY3QKKyAgIHRvIHRoZSBzZWNvbmQgbWFjaGluZS4gCisKK0E6IHlvdSBtdXN0IGJpbmQgYSBuZXR3b3JrIGludGVyZmFjZSBleHBsaWNpdGx5IHRvCisgICBhbiBpcHBwIGRldmljZSwgd2hlcmUgeW91IGNhbiBjb25uZWN0IGEgKGZvciB0aGlzCisgICBpbnRlcmZhY2UpIGluZGl2aWR1YWxseSBjb25maWd1cmVkIGlwcHBkLgorCistLQorCitRMDk6IFdoZW4gSSBzdGFydCB0aGUgaXBwcGQgSSBvbmx5IGdldCBlcnJvciBtZXNzYWdlcworICAgZnJvbSB0aGUgaTRsIGRyaXZlciAuLiAKKworQTogV2hlbiBzdGFydGluZywgdGhlIGlwcHBkIGNhbGxzIGZ1bmN0aW9ucyB3aGljaCBtYXkgCisgICB0cmlnZ2VyIGEgbmV0d29yayBwYWNrZXQuIChlLmcgZ2V0aG9zdGJ5bmFtZSgpKS4KKyAgIFdpdGhvdXQgdGhlIGlwcHBkIChhdCB0aGlzIG1vbWVudCwgaXQgaXMgbm90CisgICBmdWxseSBzdGFydGVkKSB3ZSBjYW4ndCBoYW5kbGUgdGhpcyBuZXR3b3JrIHJlcXVlc3QuCisgICBUcnkgdG8gY29uZmlndXJlIGhvc3RuYW1lcyBuZWNlc3NhcnkgZm9yIHRoZSBpcHBwZAorICAgaW4geW91ciBsb2NhbCAvZXRjL2hvc3RzIGZpbGUgb3IgaW4gYSB3YXksIHRoYXQKKyAgIHlvdXIgc3lzdGVtIGNhbiByZXNvbHZlIGl0IHdpdGhvdXQgdXNpbmcgYW4KKyAgIGlzZG4vaXBwcCBuZXR3b3JrLWludGVyZmFjZS4KKworLS0KKworUTEwOiBJIHdhbm5hIHVzZSBkeW5hbWljIElQIGFkZHJlc3MgYXNzaWdubWVudCAuLi4gSG93IAorICAgbXVzdCBJIGNvbmZpZ3VyZSB0aGUgbmV0d29yayBkZXZpY2UuCisKK0E6IEF0IGxlYXN0IHlvdSBtdXN0IGhhdmUgYSByb3V0ZSB3aGljaCBmb3J3YXJkcworICAgYSBwYWNrZXQgdG8gdGhlIGlwcHAgbmV0d29yay1pbnRlcmZhY2UgdG8gdHJpZ2dlcgorICAgdGhlIGRpYWwtb24tZGVtYW5kLgorICAgQSBkZWZhdWx0IHJvdXRlIHRvIHRoZSBpcHBwLWludGVyZmFjZSB3aWxsIHdvcmsuCisgICBOb3cgeW91IG11c3QgY2hvb3NlIGEgZHVtbXkgSVAgYWRkcmVzcyBmb3IgeW91cgorICAgaW50ZXJmYWNlLgorICAgSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW4ndCBzZXQgdGhlIGRlZmF1bHQKKyAgIHJvdXRlIHRvIHRoZSBpcHBwIGludGVyZmFjZSwgeW91IG1heSB0YWtlIGFueSAKKyAgIGFkZHJlc3Mgb2YgdGhlIHN1Ym5ldCBmcm9tIHdoaWNoIHlvdSBleHBlY3QgeW91cgorICAgZHluYW1pYyBJUCBudW1iZXIgYW5kIHNldCBhICduZXR3b3JrIHJvdXRlJyBmb3IKKyAgIHRoaXMgc3VibmV0IHRvIHRoZSBpcHBwIGludGVyZmFjZS4KKyAgIFRvIGFsbG93IG92ZXJyaWRpbmcgb2YgdGhlIGR1bW15IGFkZHJlc3MgeW91CisgICBtdXN0IGNhbGwgdGhlIGlwcHBkIHdpdGggdGhlICdpcGNwLWFjY2VwdC1sb2NhbCcgb3B0aW9uLgorCitBOiBZb3UgbXVzdCBrbm93LCBob3cgdGhlIGlwcHBkIGdldHMgdGhlIGFkZHJlc3NlcyBpdCB3YW5uYQorICAgY29uZmlndXJlLiBJZiB5b3UgZG9uJ3QgZ2l2ZSBhbnkgb3B0aW9uLCB0aGUgaXBwcGQKKyAgIHRyaWVzIHRvIG5lZ290aWF0ZSB0aGUgbG9jYWwgaG9zdCBhZGRyZXNzIQorICAgV2l0aCB0aGUgb3B0aW9uICdub2lwZGVmYXVsdCcgaXQgcmVxdWVzdHMgYW4gYWRkcmVzcworICAgZnJvbSB0aGUgcmVtb3RlIG1hY2hpbmUuIFdpdGggJ3VzZWlmaXAnIGl0IGdldHMgdGhlCisgICBhZGRyZXNzZXMgZnJvbSB0aGUgbmV0IGludGVyZmFjZS4gT3IgeW91IHNldCB0aGUgYWRkcmVzcworICAgb24gdGhlIG9wdGlvbiBsaW5lIHdpdGggdGhlIDxhLmIuYy5kOmUuZi5nLmg+IG9wdGlvbi4KKyAgIE5vdGU6IHRoZSBJUCBhZGRyZXNzIG9mIHRoZSByZW1vdGUgbWFjaGluZSBtdXN0IGJlIGNvbmZpZ3VyZWQKKyAgIGxvY2FsbHkgb3IgdGhlIHJlbW90ZSBtYWNoaW5lIG11c3Qgc2VuZCBpdCBpbiBhbiBJUENQIHJlcXVlc3QuCisgICBJZiB5b3VyIHNpZGUgZG9lc24ndCBrbm93IHRoZSBJUCBhZGRyZXNzIGFmdGVyIG5lZ290aWF0aW9uLCBpdAorICAgY2xvc2VzIHRoZSBjb25uZWN0aW9uIQorICAgWW91IG11c3QgYWxsb3cgb3ZlcnJpZGluZyBvZiBhZGRyZXNzIHdpdGggdGhlICdpcGNwLWFjY2VwdC0qJworICAgb3B0aW9ucywgaWYgeW91IGhhdmUgc2V0IHlvdXIgb3duIG9yIHRoZSByZW1vdGUgYWRkcmVzcyAKKyAgIGV4cGxpY2l0bHkuCisKK0E6IE1heWJlIHlvdSB0cnkgdGhlc2Ugb3B0aW9ucyAuLiBlLmc6ICAgCisKKyAgICAvc2Jpbi9pcHBwZCA6JFJFTU9URSBub2lwZGVmYXVsdCAvZGV2L2lwcHAwCisKKyAgIHdoZXJlIFJFTU9URSBtdXN0IGJlIHRoZSBhZGRyZXNzIG9mIHRoZSByZW1vdGUgbWFjaGluZSAodGhlCisgICBtYWNoaW5lLCB3aGljaCBnaXZlcyB5b3UgeW91ciBhZGRyZXNzKQorCistLQorCitRMTE6IEkgY2FuJ3QgY29ubmVjdC4gSG93IGNhbiBJIGNoZWNrIHdoZXJlIHRoZSBwcm9ibGVtIGlzLgorCitBOiBBIGdvb2QgaGVscCBsb2cgaXMgdGhlIGRlYnVnIG91dHB1dCBmcm9tIHRoZSBpcHBwZC4uLgorICAgQ2hlY2sgd2hldGhlciB5b3UgY2FuIGZpbmQgdGhlcmU6CisgICAtIG9ubHkgYSBmZXcgTENQLWNvbmYtcmVxIFNFTlQgbWVzc2FnZXMgKGxlc3MgdGhlbiAxMCkKKyAgICAgYW5kIHRoZW4gYSBUZXJtLVJFUToKKyAgICAgLT4gY2hlY2sgd2hldGhlciB5b3VyIElTRE4gY2FyZCBpcyB3ZWxsIGNvbmZpZ3VyZWQKKyAgICAgICAgaXQgc2VlbXMsIHRoYXQgeW91ciBtYWNoaW5lIGRvZXNuJ3QgZGlhbAorICAgICAgICAoSVJRLElPLFByb3RvLCBldGMgcHJvYmxlbXMpCisgICAgICAgIENvbmZpZ3VyZSB5b3VyIElTRE4gY2FyZCB0byBwcmludCBkZWJ1ZyBtZXNzYWdlcyBhbmQKKyAgICAgICAgY2hlY2sgdGhlIC9kZXYvaXNkbmN0cmwgb3V0cHV0IG5leHQgdGltZS4gVGhlcmUKKyAgICAgICAgeW91IGNhbiBzZWUsIHdoZXRoZXIgdGhlcmUgaXMgYWN0aXZpdHkgb24gdGhlIGNhcmQvbGluZS4KKyAgIC0gdGhlcmUgYXJlIGF0IGxlYXN0IGEgZmV3IFJFQ1YgbWVzc2FnZXMgaW4gdGhlIGxvZzoKKyAgICAgLT4gZmluZTogeW91ciBjYXJkIGlzIGRpYWxpbmcgYW5kIHlvdXIgcmVtb3RlIG1hY2hpbmUKKyAgICAgICAgdHJpZXMgdG8gdGFsayB3aXRoIHlvdS4gTWF5YmUgb25seSBhIG1pc3NpbmcgCisgICAgICAgIGF1dGhlbnRpY2F0aW9uLiBDaGVjayB5b3VyIGlwcHBkIGNvbmZpZ3VyYXRpb24gYWdhaW4uCisgICAtIHRoZSBpcHBwZCBleGl0cyBmb3Igc29tZSByZWFzb246CisgICAgIC0+IG5vdCBnb29kIC4uLiBjaGVjayAvdmFyL2FkbS9zeXNsb2cgYW5kIC92YXIvYWRtL2RhZW1vbi4KKyAgICAgICAgQ291bGQgYmUgYSBidWcgaW4gdGhlIGlwcHBkLgorCistLQorCitRMTI6IEhvdyBjYW4gSSByZWR1Y2UgbG9naW4gZGVsYXk/CisKK0E6IExvZyBhIGxvZ2luIHNlc3Npb24gKCdkZWJ1ZycgbG9nKSBhbmQgY2hlY2sgd2hpY2ggb3B0aW9ucyAKKyAgeW91ciByZW1vdGUgc2lkZSByZWplY3RzLiBOZXh0IHRpbWUgY29uZmlndXJlIHlvdXIgaXBwcGQKKyAgdG8gbm90IG5lZ290aWF0ZSB0aGVzZSBvcHRpb25zLiBBbm90aGVyICdzaWRlIGVmZmVjdCcgaXMsIHRoYXQKKyAgdGhpcyBpbmNyZWFzZXMgcmVkdW5kYW5jeS4gKGUuZyB5b3VyIHJlbW90ZSBzaWRlIGlzIGJ1Z2d5IGFuZAorICByZWplY3RzIG9wdGlvbnMgaW4gYSB3cm9uZyB3YXkpLgorCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9qYXZhLnR4dCBiL0RvY3VtZW50YXRpb24vamF2YS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4MTRjMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vamF2YS50eHQKQEAgLTAsMCArMSwzOTYgQEAKKyAgICAgICAgICAgICAgIEphdmEodG0pIEJpbmFyeSBLZXJuZWwgU3VwcG9ydCBmb3IgTGludXggdjEuMDMKKyAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGludXggYmVhdHMgdGhlbSBBTEwhIFdoaWxlIGFsbCBvdGhlciBPUydzIGFyZSBUQUxLSU5HIGFib3V0IGRpcmVjdAorc3VwcG9ydCBvZiBKYXZhIEJpbmFyaWVzIGluIHRoZSBPUywgTGludXggaXMgZG9pbmcgaXQhCisKK1lvdSBjYW4gZXhlY3V0ZSBKYXZhIGFwcGxpY2F0aW9ucyBhbmQgSmF2YSBBcHBsZXRzIGp1c3QgbGlrZSBhbnkKK290aGVyIHByb2dyYW0gYWZ0ZXIgeW91IGhhdmUgZG9uZSB0aGUgZm9sbG93aW5nOgorCisxKSBZb3UgTVVTVCBGSVJTVCBpbnN0YWxsIHRoZSBKYXZhIERldmVsb3BlcnMgS2l0IGZvciBMaW51eC4KKyAgIFRoZSBKYXZhIG9uIExpbnV4IEhPV1RPIGdpdmVzIHRoZSBkZXRhaWxzIG9uIGdldHRpbmcgYW5kCisgICBpbnN0YWxsaW5nIHRoaXMuIFRoaXMgSE9XVE8gY2FuIGJlIGZvdW5kIGF0OgorCisJZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9kb2NzL0hPV1RPL0phdmEtSE9XVE8KKworICAgWW91IHNob3VsZCBhbHNvIHNldCB1cCBhIHJlYXNvbmFibGUgQ0xBU1NQQVRIIGVudmlyb25tZW50CisgICB2YXJpYWJsZSB0byB1c2UgSmF2YSBhcHBsaWNhdGlvbnMgdGhhdCBtYWtlIHVzZSBvZiBhbnkKKyAgIG5vbnN0YW5kYXJkIGNsYXNzZXMgKG5vdCBpbmNsdWRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgIGFzIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYpLgorCisyKSBZb3UgaGF2ZSB0byBjb21waWxlIEJJTkZNVF9NSVNDIGVpdGhlciBhcyBhIG1vZHVsZSBvciBpbnRvCisgICB0aGUga2VybmVsIChDT05GSUdfQklORk1UX01JU0MpIGFuZCBzZXQgaXQgdXAgcHJvcGVybHkuCisgICBJZiB5b3UgY2hvb3NlIHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIHlvdSB3aWxsIGhhdmUKKyAgIHRvIGluc2VydCBpdCBtYW51YWxseSB3aXRoIG1vZHByb2JlL2luc21vZCwgYXMga21vZAorICAgY2FuIG5vdCBlYXNpbHkgYmUgc3VwcG9ydGVkIHdpdGggYmluZm10X21pc2MuIAorICAgUmVhZCB0aGUgZmlsZSAnYmluZm10X21pc2MudHh0JyBpbiB0aGlzIGRpcmVjdG9yeSB0byBrbm93CisgICBtb3JlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKKzMpIEFkZCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gaXRlbXMgdG8gYmluZm10X21pc2MKKyAgICh5b3Ugc2hvdWxkIHJlYWxseSBoYXZlIHJlYWQgYmluZm10X21pc2MudHh0IG5vdyk6CisgICBzdXBwb3J0IGZvciBKYXZhIGFwcGxpY2F0aW9uczoKKyAgICAgJzpKYXZhOk06Olx4Y2FceGZlXHhiYVx4YmU6Oi91c3IvbG9jYWwvYmluL2phdmF3cmFwcGVyOicKKyAgIHN1cHBvcnQgZm9yIGV4ZWN1dGFibGUgSmFyIGZpbGVzOgorICAgICAnOkV4ZWN1dGFibGVKQVI6RTo6amFyOjovdXNyL2xvY2FsL2Jpbi9qYXJ3cmFwcGVyOicKKyAgIHN1cHBvcnQgZm9yIEphdmEgQXBwbGV0czoKKyAgICAgJzpBcHBsZXQ6RTo6aHRtbDo6L3Vzci9iaW4vYXBwbGV0dmlld2VyOicKKyAgIG9yIHRoZSBmb2xsb3dpbmcsIGlmIHlvdSB3YW50IHRvIGJlIG1vcmUgc2VsZWN0aXZlOgorICAgICAnOkFwcGxldDpNOjo8IS0tYXBwbGV0OjovdXNyL2Jpbi9hcHBsZXR2aWV3ZXI6JworCisgICBPZiBjYXVzZSB5b3UgaGF2ZSB0byBmaXggdGhlIHBhdGggbmFtZXMuIEdpdmVuIHBhdGgvZmlsZSBuYW1lcyBpbiB0aGlzCisgICBkb2N1bWVudCBtYXRjaCB0aGUgRGViaWFuIDIuMSBzeXN0ZW0uIChpLmUuIGpkayBpbnN0YWxsZWQgaW4gL3VzciwKKyAgIGN1c3RvbSB3cmFwcGVycyBmcm9tIHRoaXMgZG9jdW1lbnQgaW4gL3Vzci9sb2NhbCkKKworICAgTm90ZSwgdGhhdCBmb3IgdGhlIG1vcmUgc2VsZWN0aXZlIGFwcGxldCBzdXBwb3J0IHlvdSBoYXZlIHRvIG1vZGlmeQorICAgZXhpc3RpbmcgaHRtbC1maWxlcyB0byBjb250YWluIDwhLS1hcHBsZXQtLT4gaW4gdGhlIGZpcnN0IGxpbmUKKyAgICgnPCcgaGFzIHRvIGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIhKSB0byBsZXQgdGhpcyB3b3JrIQorCisgICBGb3IgdGhlIGNvbXBpbGVkIEphdmEgcHJvZ3JhbXMgeW91IG5lZWQgYSB3cmFwcGVyIHNjcmlwdCBsaWtlIHRoZQorICAgZm9sbG93aW5nICh0aGlzIGlzIGJlY2F1c2UgSmF2YSBpcyBicm9rZW4gaW4gY2FzZSBvZiB0aGUgZmlsZW5hbWUKKyAgIGhhbmRsaW5nKSwgYWdhaW4gZml4IHRoZSBwYXRoIG5hbWVzLCBib3RoIGluIHRoZSBzY3JpcHQgYW5kIGluIHRoZQorICAgYWJvdmUgZ2l2ZW4gY29uZmlndXJhdGlvbiBzdHJpbmcuCisKKyAgIFlvdSwgdG9vLCBuZWVkIHRoZSBsaXR0bGUgcHJvZ3JhbSBhZnRlciB0aGUgc2NyaXB0LiBDb21waWxlIGxpa2UKKyAgIGdjYyAtTzIgLW8gamF2YWNsYXNzbmFtZSBqYXZhY2xhc3NuYW1lLmMKKyAgIGFuZCBzdGljayBpdCB0byAvdXNyL2xvY2FsL2Jpbi4KKworICAgQm90aCB0aGUgamF2YXdyYXBwZXIgc2hlbGxzY3JpcHQgYW5kIHRoZSBqYXZhY2xhc3NuYW1lIHByb2dyYW0KKyAgIHdlcmUgc3VwcGxpZWQgYnkgQ29saW4gSi4gV2F0c29uIDxjanc0NEBjYW0uYWMudWs+LgorCis9PT09PT09PT09PT09PT09PT09PT09IEN1dCBoZXJlID09PT09PT09PT09PT09PT09PT0KKyMhL2Jpbi9iYXNoCisjIC91c3IvbG9jYWwvYmluL2phdmF3cmFwcGVyIC0gdGhlIHdyYXBwZXIgZm9yIGJpbmZtdF9taXNjL2phdmEKKworaWYgWyAteiAiJDEiIF07IHRoZW4KKwlleGVjIDE+JjIKKwllY2hvIFVzYWdlOiAkMCBjbGFzcy1maWxlCisJZXhpdCAxCitmaQorCitDTEFTUz0kMQorRlFDTEFTUz1gL3Vzci9sb2NhbC9iaW4vamF2YWNsYXNzbmFtZSAkMWAKK0ZRQ0xBU1NOPWBlY2hvICRGUUNMQVNTIHwgc2VkIC1lICdzL14uKlwuXChbXi5dKlwpJC9cMS8nYAorRlFDTEFTU1A9YGVjaG8gJEZRQ0xBU1MgfCBzZWQgLWUgJ3MtXC4tLy1nJyAtZSAncy1eW14vXSokLS0nIC1lICdzLS9bXi9dKiQtLSdgCisKKyMgZm9yIGV4YW1wbGU6CisjIENMQVNTPVRlc3QuY2xhc3MKKyMgRlFDTEFTUz1mb28uYmFyLlRlc3QKKyMgRlFDTEFTU049VGVzdAorIyBGUUNMQVNTUD1mb28vYmFyCisKK3Vuc2V0IENMQVNTQkFTRQorCitkZWNsYXJlIC1pIExJTktMRVZFTD0wCisKK3doaWxlIDo7IGRvCisJaWYgWyAiYGJhc2VuYW1lICRDTEFTUyAuY2xhc3NgIiA9PSAiJEZRQ0xBU1NOIiBdOyB0aGVuCisJCSMgU2VlIGlmIHRoaXMgZGlyZWN0b3J5IHdvcmtzIHN0cmFpZ2h0IG9mZgorCQljZCAtTCBgZGlybmFtZSAkQ0xBU1NgCisJCUNMQVNTRElSPSRQV0QKKwkJY2QgJE9MRFBXRAorCQlpZiBlY2hvICRDTEFTU0RJUiB8IGdyZXAgLXEgIiRGUUNMQVNTUCQiOyB0aGVuCisJCQlDTEFTU0JBU0U9YGVjaG8gJENMQVNTRElSIHwgc2VkIC1lICJzLiRGUUNMQVNTUCQuLiJgCisJCQlicmVhazsKKwkJZmkKKwkJIyBUcnkgZGVyZWZlcmVuY2luZyB0aGUgZGlyZWN0b3J5IG5hbWUKKwkJY2QgLVAgYGRpcm5hbWUgJENMQVNTYAorCQlDTEFTU0RJUj0kUFdECisJCWNkICRPTERQV0QKKwkJaWYgZWNobyAkQ0xBU1NESVIgfCBncmVwIC1xICIkRlFDTEFTU1AkIjsgdGhlbgorCQkJQ0xBU1NCQVNFPWBlY2hvICRDTEFTU0RJUiB8IHNlZCAtZSAicy4kRlFDTEFTU1AkLi4iYAorCQkJYnJlYWs7CisJCWZpCisJCSMgSWYgbm8gb3RoZXIgcG9zc2libGUgZmlsZW5hbWUgZXhpc3RzCisJCWlmIFsgISAtTCAkQ0xBU1MgXTsgdGhlbgorCQkJZXhlYyAxPiYyCisJCQllY2hvICQwOgorCQkJZWNobyAiICAkQ0xBU1Mgc2hvdWxkIGJlIGluIGEiIFwKKwkJCSAgICAgImRpcmVjdG9yeSB0cmVlIGNhbGxlZCAkRlFDTEFTU1AiCisJCQlleGl0IDEKKwkJZmkKKwlmaQorCWlmIFsgISAtTCAkQ0xBU1MgXTsgdGhlbiBicmVhazsgZmkKKwkjIEdvIGRvd24gb25lIG1vcmUgbGV2ZWwgb2Ygc3ltYm9saWMgbGlua3MKKwlsZXQgTElOS0xFVkVMKz0xCisJaWYgWyAkTElOS0xFVkVMIC1ndCA1IF07IHRoZW4KKwkJZXhlYyAxPiYyCisJCWVjaG8gJDA6CisJCWVjaG8gIiAgVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQiCisJCWV4aXQgMQorCWZpCisJQ0xBU1M9YGxzIC0tY29sb3I9bm8gLWwgJENMQVNTIHwgc2VkIC1lICdzL14uKiBcKFteIF0qXCkkL1wxLydgCitkb25lCisKK2lmIFsgLXogIiRDTEFTU0JBU0UiIF07IHRoZW4KKwlpZiBbIC16ICIkRlFDTEFTU1AiIF07IHRoZW4KKwkJR09PRE5BTUU9JEZRQ0xBU1NOLmNsYXNzCisJZWxzZQorCQlHT09ETkFNRT0kRlFDTEFTU1AvJEZRQ0xBU1NOLmNsYXNzCisJZmkKKwlleGVjIDE+JjIKKwllY2hvICQwOgorCWVjaG8gIiAgJEZRQ0xBU1Mgc2hvdWxkIGJlIGluIGEgZmlsZSBjYWxsZWQgJEdPT0ROQU1FIgorCWV4aXQgMQorZmkKKworaWYgISBlY2hvICRDTEFTU1BBVEggfCBncmVwIC1xICJeXCguKjpcKSokQ0xBU1NCQVNFXCg6LipcKSoiOyB0aGVuCisJIyBjbGFzcyBpcyBub3QgaW4gQ0xBU1NQQVRILCBzbyBwcmVwZW5kIGRpciBvZiBjbGFzcyB0byBDTEFTU1BBVEgKKwlpZiBbIC16ICIke0NMQVNTUEFUSH0iIF0gOyB0aGVuCisJCWV4cG9ydCBDTEFTU1BBVEg9JENMQVNTQkFTRQorCWVsc2UKKwkJZXhwb3J0IENMQVNTUEFUSD0kQ0xBU1NCQVNFOiRDTEFTU1BBVEgKKwlmaQorZmkKKworc2hpZnQKKy91c3IvYmluL2phdmEgJEZRQ0xBU1MgIiRAIgorPT09PT09PT09PT09PT09PT09PT09PSBDdXQgaGVyZSA9PT09PT09PT09PT09PT09PT09CisKKworPT09PT09PT09PT09PT09PT09PT09PSBDdXQgaGVyZSA9PT09PT09PT09PT09PT09PT09CisvKiBqYXZhY2xhc3NuYW1lLmMKKyAqCisgKiBFeHRyYWN0cyB0aGUgY2xhc3MgbmFtZSBmcm9tIGEgSmF2YSBjbGFzcyBmaWxlOyBpbnRlbmRlZCBmb3IgdXNlIGluIGEgSmF2YQorICogd3JhcHBlciBvZiB0aGUgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGJpbmZtdF9taXNjIG9wdGlvbiBpbiB0aGUgTGludXgga2VybmVsLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBDb2xpbiBKLiBXYXRzb24gPGNqdzQ0QGNhbS5hYy51az4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBGcm9tIFN1bidzIEphdmEgVk0gU3BlY2lmaWNhdGlvbiwgYXMgdGFnIGVudHJpZXMgaW4gdGhlIGNvbnN0YW50IHBvb2wuICovCisKKyNkZWZpbmUgQ1BfVVRGOCAxCisjZGVmaW5lIENQX0lOVEVHRVIgMworI2RlZmluZSBDUF9GTE9BVCA0CisjZGVmaW5lIENQX0xPTkcgNQorI2RlZmluZSBDUF9ET1VCTEUgNgorI2RlZmluZSBDUF9DTEFTUyA3CisjZGVmaW5lIENQX1NUUklORyA4CisjZGVmaW5lIENQX0ZJRUxEUkVGIDkKKyNkZWZpbmUgQ1BfTUVUSE9EUkVGIDEwCisjZGVmaW5lIENQX0lOVEVSRkFDRU1FVEhPRFJFRiAxMQorI2RlZmluZSBDUF9OQU1FQU5EVFlQRSAxMgorCisvKiBEZWZpbmUgc29tZSBjb21tb25seSB1c2VkIGVycm9yIG1lc3NhZ2VzICovCisKKyNkZWZpbmUgc2Vla19lcnJvcigpIGVycm9yKCIlczogQ2Fubm90IHNlZWtcbiIsIHByb2dyYW0pCisjZGVmaW5lIGNvcnJ1cHRfZXJyb3IoKSBlcnJvcigiJXM6IENsYXNzIGZpbGUgY29ycnVwdFxuIiwgcHJvZ3JhbSkKKyNkZWZpbmUgZW9mX2Vycm9yKCkgZXJyb3IoIiVzOiBVbmV4cGVjdGVkIGVuZCBvZiBmaWxlXG4iLCBwcm9ncmFtKQorI2RlZmluZSB1dGY4X2Vycm9yKCkgZXJyb3IoIiVzOiBPbmx5IEFTQ0lJIDEtMjU1IHN1cHBvcnRlZFxuIiwgcHJvZ3JhbSk7CisKK2NoYXIgKnByb2dyYW07CisKK2xvbmcgKnBvb2w7CisKK3VfaW50OF90IHJlYWRfOChGSUxFICpjbGFzc2ZpbGUpOwordV9pbnQxNl90IHJlYWRfMTYoRklMRSAqY2xhc3NmaWxlKTsKK3ZvaWQgc2tpcF9jb25zdGFudChGSUxFICpjbGFzc2ZpbGUsIHVfaW50MTZfdCAqY3VyKTsKK3ZvaWQgZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworLyogUmVhZHMgaW4gYW4gdW5zaWduZWQgOC1iaXQgaW50ZWdlci4gKi8KK3VfaW50OF90IHJlYWRfOChGSUxFICpjbGFzc2ZpbGUpCit7CisJaW50IGIgPSBmZ2V0YyhjbGFzc2ZpbGUpOworCWlmKGIgPT0gRU9GKQorCQllb2ZfZXJyb3IoKTsKKwlyZXR1cm4gKHVfaW50OF90KWI7Cit9CisKKy8qIFJlYWRzIGluIGFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLiAqLwordV9pbnQxNl90IHJlYWRfMTYoRklMRSAqY2xhc3NmaWxlKQoreworCWludCBiMSwgYjI7CisJYjEgPSBmZ2V0YyhjbGFzc2ZpbGUpOworCWlmKGIxID09IEVPRikKKwkJZW9mX2Vycm9yKCk7CisJYjIgPSBmZ2V0YyhjbGFzc2ZpbGUpOworCWlmKGIyID09IEVPRikKKwkJZW9mX2Vycm9yKCk7CisJcmV0dXJuICh1X2ludDE2X3QpKChiMSA8PCA4KSB8IGIyKTsKK30KKworLyogUmVhZHMgaW4gYSB2YWx1ZSBmcm9tIHRoZSBjb25zdGFudCBwb29sLiAqLwordm9pZCBza2lwX2NvbnN0YW50KEZJTEUgKmNsYXNzZmlsZSwgdV9pbnQxNl90ICpjdXIpCit7CisJdV9pbnQxNl90IGxlbjsKKwlpbnQgc2Vla2VyciA9IDE7CisJcG9vbFsqY3VyXSA9IGZ0ZWxsKGNsYXNzZmlsZSk7CisJc3dpdGNoKHJlYWRfOChjbGFzc2ZpbGUpKQorCXsKKwljYXNlIENQX1VURjg6CisJCWxlbiA9IHJlYWRfMTYoY2xhc3NmaWxlKTsKKwkJc2Vla2VyciA9IGZzZWVrKGNsYXNzZmlsZSwgbGVuLCBTRUVLX0NVUik7CisJCWJyZWFrOworCWNhc2UgQ1BfQ0xBU1M6CisJY2FzZSBDUF9TVFJJTkc6CisJCXNlZWtlcnIgPSBmc2VlayhjbGFzc2ZpbGUsIDIsIFNFRUtfQ1VSKTsKKwkJYnJlYWs7CisJY2FzZSBDUF9JTlRFR0VSOgorCWNhc2UgQ1BfRkxPQVQ6CisJY2FzZSBDUF9GSUVMRFJFRjoKKwljYXNlIENQX01FVEhPRFJFRjoKKwljYXNlIENQX0lOVEVSRkFDRU1FVEhPRFJFRjoKKwljYXNlIENQX05BTUVBTkRUWVBFOgorCQlzZWVrZXJyID0gZnNlZWsoY2xhc3NmaWxlLCA0LCBTRUVLX0NVUik7CisJCWJyZWFrOworCWNhc2UgQ1BfTE9ORzoKKwljYXNlIENQX0RPVUJMRToKKwkJc2Vla2VyciA9IGZzZWVrKGNsYXNzZmlsZSwgOCwgU0VFS19DVVIpOworCQkrKygqY3VyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29ycnVwdF9lcnJvcigpOworCX0KKwlpZihzZWVrZXJyKQorCQlzZWVrX2Vycm9yKCk7Cit9CisKK3ZvaWQgZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7CisJZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCUZJTEUgKmNsYXNzZmlsZTsKKwl1X2ludDE2X3QgY3BfY291bnQsIGksIHRoaXNfY2xhc3MsIGNsYXNzaW5mb19wdHI7CisJdV9pbnQ4X3QgbGVuZ3RoOworCisJcHJvZ3JhbSA9IGFyZ3ZbMF07CisKKwlpZighYXJndlsxXSkKKwkJZXJyb3IoIiVzOiBNaXNzaW5nIGlucHV0IGZpbGVcbiIsIHByb2dyYW0pOworCWNsYXNzZmlsZSA9IGZvcGVuKGFyZ3ZbMV0sICJyYiIpOworCWlmKCFjbGFzc2ZpbGUpCisJCWVycm9yKCIlczogRXJyb3Igb3BlbmluZyAlc1xuIiwgcHJvZ3JhbSwgYXJndlsxXSk7CisKKwlpZihmc2VlayhjbGFzc2ZpbGUsIDgsIFNFRUtfU0VUKSkgIC8qIHNraXAgbWFnaWMgYW5kIHZlcnNpb24gbnVtYmVycyAqLworCQlzZWVrX2Vycm9yKCk7CisJY3BfY291bnQgPSByZWFkXzE2KGNsYXNzZmlsZSk7CisJcG9vbCA9IGNhbGxvYyhjcF9jb3VudCwgc2l6ZW9mKGxvbmcpKTsKKwlpZighcG9vbCkKKwkJZXJyb3IoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBjb25zdGFudCBwb29sXG4iLCBwcm9ncmFtKTsKKworCWZvcihpID0gMTsgaSA8IGNwX2NvdW50OyArK2kpCisJCXNraXBfY29uc3RhbnQoY2xhc3NmaWxlLCAmaSk7CisJaWYoZnNlZWsoY2xhc3NmaWxlLCAyLCBTRUVLX0NVUikpCS8qIHNraXAgYWNjZXNzIGZsYWdzICovCisJCXNlZWtfZXJyb3IoKTsKKworCXRoaXNfY2xhc3MgPSByZWFkXzE2KGNsYXNzZmlsZSk7CisJaWYodGhpc19jbGFzcyA8IDEgfHwgdGhpc19jbGFzcyA+PSBjcF9jb3VudCkKKwkJY29ycnVwdF9lcnJvcigpOworCWlmKCFwb29sW3RoaXNfY2xhc3NdIHx8IHBvb2xbdGhpc19jbGFzc10gPT0gLTEpCisJCWNvcnJ1cHRfZXJyb3IoKTsKKwlpZihmc2VlayhjbGFzc2ZpbGUsIHBvb2xbdGhpc19jbGFzc10gKyAxLCBTRUVLX1NFVCkpCisJCXNlZWtfZXJyb3IoKTsKKworCWNsYXNzaW5mb19wdHIgPSByZWFkXzE2KGNsYXNzZmlsZSk7CisJaWYoY2xhc3NpbmZvX3B0ciA8IDEgfHwgY2xhc3NpbmZvX3B0ciA+PSBjcF9jb3VudCkKKwkJY29ycnVwdF9lcnJvcigpOworCWlmKCFwb29sW2NsYXNzaW5mb19wdHJdIHx8IHBvb2xbY2xhc3NpbmZvX3B0cl0gPT0gLTEpCisJCWNvcnJ1cHRfZXJyb3IoKTsKKwlpZihmc2VlayhjbGFzc2ZpbGUsIHBvb2xbY2xhc3NpbmZvX3B0cl0gKyAxLCBTRUVLX1NFVCkpCisJCXNlZWtfZXJyb3IoKTsKKworCWxlbmd0aCA9IHJlYWRfMTYoY2xhc3NmaWxlKTsKKwlmb3IoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKwl7CisJCXVfaW50OF90IHggPSByZWFkXzgoY2xhc3NmaWxlKTsKKwkJaWYoKHggJiAweDgwKSB8fCAheCkKKwkJeworCQkJaWYoKHggJiAweEUwKSA9PSAweEMwKQorCQkJeworCQkJCXVfaW50OF90IHkgPSByZWFkXzgoY2xhc3NmaWxlKTsKKwkJCQlpZigoeSAmIDB4QzApID09IDB4ODApCisJCQkJeworCQkJCQlpbnQgYyA9ICgoeCAmIDB4MWYpIDw8IDYpICsgKHkgJiAweDNmKTsKKwkJCQkJaWYoYykgcHV0Y2hhcihjKTsKKwkJCQkJZWxzZSB1dGY4X2Vycm9yKCk7CisJCQkJfQorCQkJCWVsc2UgdXRmOF9lcnJvcigpOworCQkJfQorCQkJZWxzZSB1dGY4X2Vycm9yKCk7CisJCX0KKwkJZWxzZSBpZih4ID09ICcvJykgcHV0Y2hhcignLicpOworCQllbHNlIHB1dGNoYXIoeCk7CisJfQorCXB1dGNoYXIoJ1xuJyk7CisJZnJlZShwb29sKTsKKwlmY2xvc2UoY2xhc3NmaWxlKTsKKwlyZXR1cm4gMDsKK30KKz09PT09PT09PT09PT09PT09PT09PT0gQ3V0IGhlcmUgPT09PT09PT09PT09PT09PT09PQorCisKKz09PT09PT09PT09PT09PT09PT09PT0gQ3V0IGhlcmUgPT09PT09PT09PT09PT09PT09PQorIyEvYmluL2Jhc2gKKyMgL3Vzci9sb2NhbC9qYXZhL2Jpbi9qYXJ3cmFwcGVyIC0gdGhlIHdyYXBwZXIgZm9yIGJpbmZtdF9taXNjL2phcgorCitqYXZhIC1qYXIgJDEKKz09PT09PT09PT09PT09PT09PT09PT0gQ3V0IGhlcmUgPT09PT09PT09PT09PT09PT09PQorCisKK05vdyBzaW1wbHkgY2htb2QgK3ggdGhlIC5jbGFzcywgLmphciBhbmQvb3IgLmh0bWwgZmlsZXMgeW91IHdhbnQgdG8gZXhlY3V0ZS4KK1RvIGFkZCBhIEphdmEgcHJvZ3JhbSB0byB5b3VyIHBhdGggYmVzdCBwdXQgYSBzeW1ib2xpYyBsaW5rIHRvIHRoZSBtYWluCisuY2xhc3MgZmlsZSBpbnRvIC91c3IvYmluIChvciBhbm90aGVyIHBsYWNlIHlvdSBsaWtlKSBvbWl0dGluZyB0aGUgLmNsYXNzCitleHRlbnNpb24uIFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgLmNsYXNzIGZpbGUgd2lsbCBiZQorYWRkZWQgdG8geW91ciBDTEFTU1BBVEggZHVyaW5nIGV4ZWN1dGlvbi4KKworCitUbyB0ZXN0IHlvdXIgbmV3IHNldHVwLCBlbnRlciBpbiB0aGUgZm9sbG93aW5nIHNpbXBsZSBKYXZhIGFwcCwgYW5kIG5hbWUKK2l0ICJIZWxsb1dvcmxkLmphdmEiOgorCisJY2xhc3MgSGVsbG9Xb3JsZCB7CisJCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8gV29ybGQhIik7CisJCX0KKwl9CisKK05vdyBjb21waWxlIHRoZSBhcHBsaWNhdGlvbiB3aXRoOgorCWphdmFjIEhlbGxvV29ybGQuamF2YQorCitTZXQgdGhlIGV4ZWN1dGFibGUgcGVybWlzc2lvbnMgb2YgdGhlIGJpbmFyeSBmaWxlLCB3aXRoOgorCWNobW9kIDc1NSBIZWxsb1dvcmxkLmNsYXNzCisKK0FuZCB0aGVuIGV4ZWN1dGUgaXQ6CisJLi9IZWxsb1dvcmxkLmNsYXNzCisKKworVG8gZXhlY3V0ZSBKYXZhIEphciBmaWxlcywgc2ltcGxlIGNobW9kIHRoZSAqLmphciBmaWxlcyB0byBpbmNsdWRlCit0aGUgZXhlY3V0aW9uIGJpdCwgdGhlbiBqdXN0IGRvCisgICAgICAgLi9BcHBsaWNhdGlvbi5qYXIKKworCitUbyBleGVjdXRlIEphdmEgQXBwbGV0cywgc2ltcGxlIGNobW9kIHRoZSAqLmh0bWwgZmlsZXMgdG8gaW5jbHVkZQordGhlIGV4ZWN1dGlvbiBiaXQsIHRoZW4ganVzdCBkbworCS4vQXBwbGV0Lmh0bWwKKworCitvcmlnaW5hbGx5IGJ5IEJyaWFuIEEuIExhbnR6LCBicmlhbkBsYW50ei5jb20KK2hlYXZpbHkgZWRpdGVkIGZvciBiaW5mbXRfbWlzYyBieSBSaWNoYXJkIEf8bnRoZXIKK25ldyBzY3JpcHRzIGJ5IENvbGluIEouIFdhdHNvbiA8Y2p3NDRAY2FtLmFjLnVrPgorYWRkZWQgZXhlY3V0YWJsZSBKYXIgZmlsZSBzdXBwb3J0IGJ5IEt1cnQgSHV3aWcgPGt1cnRAaWt1LW5ldHouZGU+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0NjQ0MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24va2J1aWxkLzAwLUlOREVYCkBAIC0wLDAgKzEsOCBAQAorMDAtSU5ERVgKKyAgICAJLSB0aGlzIGZpbGU6IGluZm8gb24gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzCitrY29uZmlnLWxhbmd1YWdlLnR4dAorCS0gc3BlY2lmaWNhdGlvbiBvZiBDb25maWcgTGFuZ3VhZ2UsIHRoZSBsYW5ndWFnZSBpbiBLY29uZmlnIGZpbGVzCittYWtlZmlsZXMudHh0CisJLSBkZXZlbG9wZXIgaW5mb3JtYXRpb24gZm9yIGxpbnV4IGtlcm5lbCBtYWtlZmlsZXMKK21vZHVsZXMudHh0CisJLSBob3cgdG8gYnVpbGQgbW9kdWxlcyBhbmQgdG8gaW5zdGFsbCB0aGVtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTk2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dApAQCAtMCwwICsxLDI4MiBAQAorSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworVGhlIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgaXMgY29sbGVjdGlvbiBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMKK29yZ2FuaXplZCBpbiBhIHRyZWUgc3RydWN0dXJlOgorCisJKy0gQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisJfCAgKy0gUHJvbXB0IGZvciBkZXZlbG9wbWVudCBhbmQvb3IgaW5jb21wbGV0ZSBjb2RlL2RyaXZlcnMKKwkrLSBHZW5lcmFsIHNldHVwCisJfCAgKy0gTmV0d29ya2luZyBzdXBwb3J0CisJfCAgKy0gU3lzdGVtIFYgSVBDCisJfCAgKy0gQlNEIFByb2Nlc3MgQWNjb3VudGluZworCXwgICstIFN5c2N0bCBzdXBwb3J0CisJKy0gTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKwl8ICArLSBFbmFibGUgbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKwl8ICAgICArLSBTZXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgbW9kdWxlIHN5bWJvbHMKKwl8ICAgICArLSBLZXJuZWwgbW9kdWxlIGxvYWRlcgorCSstIC4uLgorCitFdmVyeSBlbnRyeSBoYXMgaXRzIG93biBkZXBlbmRlbmNpZXMuIFRoZXNlIGRlcGVuZGVuY2llcyBhcmUgdXNlZAordG8gZGV0ZXJtaW5lIHRoZSB2aXNpYmlsaXR5IG9mIGFuIGVudHJ5LiBBbnkgY2hpbGQgZW50cnkgaXMgb25seQordmlzaWJsZSBpZiBpdHMgcGFyZW50IGVudHJ5IGlzIGFsc28gdmlzaWJsZS4KKworTWVudSBlbnRyaWVzCistLS0tLS0tLS0tLS0KKworTW9zdCBlbnRyaWVzIGRlZmluZSBhIGNvbmZpZyBvcHRpb24sIGFsbCBvdGhlciBlbnRyaWVzIGhlbHAgdG8gb3JnYW5pemUKK3RoZW0uIEEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgbGlrZSB0aGlzOgorCitjb25maWcgTU9EVkVSU0lPTlMKKwlib29sICJTZXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgbW9kdWxlIHN5bWJvbHMiCisJZGVwZW5kcyBNT0RVTEVTCisJaGVscAorCSAgVXN1YWxseSwgbW9kdWxlcyBoYXZlIHRvIGJlIHJlY29tcGlsZWQgd2hlbmV2ZXIgeW91IHN3aXRjaCB0byBhIG5ldworCSAga2VybmVsLiAgLi4uCisKK0V2ZXJ5IGxpbmUgc3RhcnRzIHdpdGggYSBrZXkgd29yZCBhbmQgY2FuIGJlIGZvbGxvd2VkIGJ5IG11bHRpcGxlCithcmd1bWVudHMuICAiY29uZmlnIiBzdGFydHMgYSBuZXcgY29uZmlnIGVudHJ5LiBUaGUgZm9sbG93aW5nIGxpbmVzCitkZWZpbmUgYXR0cmlidXRlcyBmb3IgdGhpcyBjb25maWcgb3B0aW9uLiBBdHRyaWJ1dGVzIGNhbiBiZSB0aGUgdHlwZSBvZgordGhlIGNvbmZpZyBvcHRpb24sIGlucHV0IHByb21wdCwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQgYW5kIGRlZmF1bHQKK3ZhbHVlcy4gQSBjb25maWcgb3B0aW9uIGNhbiBiZSBkZWZpbmVkIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUKK25hbWUsIGJ1dCBldmVyeSBkZWZpbml0aW9uIGNhbiBoYXZlIG9ubHkgYSBzaW5nbGUgaW5wdXQgcHJvbXB0IGFuZCB0aGUKK3R5cGUgbXVzdCBub3QgY29uZmxpY3QuCisKK01lbnUgYXR0cmlidXRlcworLS0tLS0tLS0tLS0tLS0tCisKK0EgbWVudSBlbnRyeSBjYW4gaGF2ZSBhIG51bWJlciBvZiBhdHRyaWJ1dGVzLiBOb3QgYWxsIG9mIHRoZW0gYXJlCithcHBsaWNhYmxlIGV2ZXJ5d2hlcmUgKHNlZSBzeW50YXgpLgorCistIHR5cGUgZGVmaW5pdGlvbjogImJvb2wiLyJ0cmlzdGF0ZSIvInN0cmluZyIvImhleCIvImludCIKKyAgRXZlcnkgY29uZmlnIG9wdGlvbiBtdXN0IGhhdmUgYSB0eXBlLiBUaGVyZSBhcmUgb25seSB0d28gYmFzaWMgdHlwZXM6CisgIHRyaXN0YXRlIGFuZCBzdHJpbmcsIHRoZSBvdGhlciB0eXBlcyBhcmUgYmFzZWQgb24gdGhlc2UgdHdvLiBUaGUgdHlwZQorICBkZWZpbml0aW9uIG9wdGlvbmFsbHkgYWNjZXB0cyBhbiBpbnB1dCBwcm9tcHQsIHNvIHRoZXNlIHR3byBleGFtcGxlcworICBhcmUgZXF1aXZhbGVudDoKKworCWJvb2wgIk5ldHdvcmtpbmcgc3VwcG9ydCIKKyAgYW5kCisJYm9vbAorCXByb21wdCAiTmV0d29ya2luZyBzdXBwb3J0IgorCistIGlucHV0IHByb21wdDogInByb21wdCIgPHByb21wdD4gWyJpZiIgPGV4cHI+XQorICBFdmVyeSBtZW51IGVudHJ5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIHByb21wdCwgd2hpY2ggaXMgdXNlZCB0byBkaXNwbGF5CisgIHRvIHRoZSB1c2VyLiBPcHRpb25hbGx5IGRlcGVuZGVuY2llcyBvbmx5IGZvciB0aGlzIHByb21wdCBjYW4gYmUgYWRkZWQKKyAgd2l0aCAiaWYiLgorCistIGRlZmF1bHQgdmFsdWU6ICJkZWZhdWx0IiA8ZXhwcj4gWyJpZiIgPGV4cHI+XQorICBBIGNvbmZpZyBvcHRpb24gY2FuIGhhdmUgYW55IG51bWJlciBvZiBkZWZhdWx0IHZhbHVlcy4gSWYgbXVsdGlwbGUKKyAgZGVmYXVsdCB2YWx1ZXMgYXJlIHZpc2libGUsIG9ubHkgdGhlIGZpcnN0IGRlZmluZWQgb25lIGlzIGFjdGl2ZS4KKyAgRGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBsaW1pdGVkIHRvIHRoZSBtZW51IGVudHJ5LCB3aGVyZSB0aGV5IGFyZQorICBkZWZpbmVkLCB0aGlzIG1lYW5zIHRoZSBkZWZhdWx0IGNhbiBiZSBkZWZpbmVkIHNvbWV3aGVyZSBlbHNlIG9yIGJlCisgIG92ZXJyaWRkZW4gYnkgYW4gZWFybGllciBkZWZpbml0aW9uLgorICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBvbmx5IGFzc2lnbmVkIHRvIHRoZSBjb25maWcgc3ltYm9sIGlmIG5vIG90aGVyCisgIHZhbHVlIHdhcyBzZXQgYnkgdGhlIHVzZXIgKHZpYSB0aGUgaW5wdXQgcHJvbXB0IGFib3ZlKS4gSWYgYW4gaW5wdXQKKyAgcHJvbXB0IGlzIHZpc2libGUgdGhlIGRlZmF1bHQgdmFsdWUgaXMgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFuZCBjYW4KKyAgYmUgb3ZlcnJpZGRlbiBieSBoaW0uCisgIE9wdGlvbmFsbHkgZGVwZW5kZW5jaWVzIG9ubHkgZm9yIHRoaXMgZGVmYXVsdCB2YWx1ZSBjYW4gYmUgYWRkZWQgd2l0aAorICAiaWYiLgorCistIGRlcGVuZGVuY2llczogImRlcGVuZHMgb24iLyJyZXF1aXJlcyIgPGV4cHI+CisgIFRoaXMgZGVmaW5lcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgbWVudSBlbnRyeS4gSWYgbXVsdGlwbGUKKyAgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIHRoZXkgYXJlIGNvbm5lY3RlZCB3aXRoICcmJicuIERlcGVuZGVuY2llcworICBhcmUgYXBwbGllZCB0byBhbGwgb3RoZXIgb3B0aW9ucyB3aXRoaW4gdGhpcyBtZW51IGVudHJ5ICh3aGljaCBhbHNvCisgIGFjY2VwdCBhbiAiaWYiIGV4cHJlc3Npb24pLCBzbyB0aGVzZSB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQ6CisKKwlib29sICJmb28iIGlmIEJBUgorCWRlZmF1bHQgeSBpZiBCQVIKKyAgYW5kCisJZGVwZW5kcyBvbiBCQVIKKwlib29sICJmb28iCisJZGVmYXVsdCB5CisKKy0gcmV2ZXJzZSBkZXBlbmRlbmNpZXM6ICJzZWxlY3QiIDxzeW1ib2w+IFsiaWYiIDxleHByPl0KKyAgV2hpbGUgbm9ybWFsIGRlcGVuZGVuY2llcyByZWR1Y2UgdGhlIHVwcGVyIGxpbWl0IG9mIGEgc3ltYm9sIChzZWUKKyAgYmVsb3cpLCByZXZlcnNlIGRlcGVuZGVuY2llcyBjYW4gYmUgdXNlZCB0byBmb3JjZSBhIGxvd2VyIGxpbWl0IG9mCisgIGFub3RoZXIgc3ltYm9sLiBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgbWVudSBzeW1ib2wgaXMgdXNlZCBhcyB0aGUKKyAgbWluaW1hbCB2YWx1ZSA8c3ltYm9sPiBjYW4gYmUgc2V0IHRvLiBJZiA8c3ltYm9sPiBpcyBzZWxlY3RlZCBtdWx0aXBsZQorICB0aW1lcywgdGhlIGxpbWl0IGlzIHNldCB0byB0aGUgbGFyZ2VzdCBzZWxlY3Rpb24uCisgIFJldmVyc2UgZGVwZW5kZW5jaWVzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBib29sZWFuIG9yIHRyaXN0YXRlCisgIHN5bWJvbHMuCisKKy0gbnVtZXJpY2FsIHJhbmdlczogInJhbmdlIiA8c3ltYm9sPiA8c3ltYm9sPiBbImlmIiA8ZXhwcj5dCisgIFRoaXMgYWxsb3dzIHRvIGxpbWl0IHRoZSByYW5nZSBvZiBwb3NzaWJsZSBpbnB1dCB2YWx1ZXMgZm9yIGludAorICBhbmQgaGV4IHN5bWJvbHMuIFRoZSB1c2VyIGNhbiBvbmx5IGlucHV0IGEgdmFsdWUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4KKyAgb3IgZXF1YWwgdG8gdGhlIGZpcnN0IHN5bWJvbCBhbmQgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZWNvbmQKKyAgc3ltYm9sLgorCistIGhlbHAgdGV4dDogImhlbHAiIG9yICItLS1oZWxwLS0tIgorICBUaGlzIGRlZmluZXMgYSBoZWxwIHRleHQuIFRoZSBlbmQgb2YgdGhlIGhlbHAgdGV4dCBpcyBkZXRlcm1pbmVkIGJ5CisgIHRoZSBpbmRlbnRhdGlvbiBsZXZlbCwgdGhpcyBtZWFucyBpdCBlbmRzIGF0IHRoZSBmaXJzdCBsaW5lIHdoaWNoIGhhcworICBhIHNtYWxsZXIgaW5kZW50YXRpb24gdGhhbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgaGVscCB0ZXh0LgorICAiLS0taGVscC0tLSIgYW5kICJoZWxwIiBkbyBub3QgZGlmZmVyIGluIGJlaGF2aW91ciwgIi0tLWhlbHAtLS0iIGlzCisgIHVzZWQgdG8gaGVscCB2aXN1YWxseSBzZXBlcmF0ZSBjb25maWd1cmF0aW9uIGxvZ2ljIGZyb20gaGVscCB3aXRoaW4KKyAgdGhlIGZpbGUgYXMgYW4gYWlkIHRvIGRldmVsb3BlcnMuCisKKworTWVudSBkZXBlbmRlbmNpZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0RlcGVuZGVuY2llcyBkZWZpbmUgdGhlIHZpc2liaWxpdHkgb2YgYSBtZW51IGVudHJ5IGFuZCBjYW4gYWxzbyByZWR1Y2UKK3RoZSBpbnB1dCByYW5nZSBvZiB0cmlzdGF0ZSBzeW1ib2xzLiBUaGUgdHJpc3RhdGUgbG9naWMgdXNlZCBpbiB0aGUKK2V4cHJlc3Npb25zIHVzZXMgb25lIG1vcmUgc3RhdGUgdGhhbiBub3JtYWwgYm9vbGVhbiBsb2dpYyB0byBleHByZXNzIHRoZQorbW9kdWxlIHN0YXRlLiBEZXBlbmRlbmN5IGV4cHJlc3Npb25zIGhhdmUgdGhlIGZvbGxvd2luZyBzeW50YXg6CisKKzxleHByPiA6Oj0gPHN5bWJvbD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorICAgICAgICAgICA8c3ltYm9sPiAnPScgPHN5bWJvbD4gICAgICAgICAgICAgICAgKDIpCisgICAgICAgICAgIDxzeW1ib2w+ICchPScgPHN5bWJvbD4gICAgICAgICAgICAgICAoMykKKyAgICAgICAgICAgJygnIDxleHByPiAnKScgICAgICAgICAgICAgICAgICAgICAgICg0KQorICAgICAgICAgICAnIScgPGV4cHI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCisgICAgICAgICAgIDxleHByPiAnJiYnIDxleHByPiAgICAgICAgICAgICAgICAgICAoNikKKyAgICAgICAgICAgPGV4cHI+ICd8fCcgPGV4cHI+ICAgICAgICAgICAgICAgICAgICg3KQorCitFeHByZXNzaW9ucyBhcmUgbGlzdGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgcHJlY2VkZW5jZS4gCisKKygxKSBDb252ZXJ0IHRoZSBzeW1ib2wgaW50byBhbiBleHByZXNzaW9uLiBCb29sZWFuIGFuZCB0cmlzdGF0ZSBzeW1ib2xzCisgICAgYXJlIHNpbXBseSBjb252ZXJ0ZWQgaW50byB0aGUgcmVzcGVjdGl2ZSBleHByZXNzaW9uIHZhbHVlcy4gQWxsCisgICAgb3RoZXIgc3ltYm9sIHR5cGVzIHJlc3VsdCBpbiAnbicuCisoMikgSWYgdGhlIHZhbHVlcyBvZiBib3RoIHN5bWJvbHMgYXJlIGVxdWFsLCBpdCByZXR1cm5zICd5JywKKyAgICBvdGhlcndpc2UgJ24nLgorKDMpIElmIHRoZSB2YWx1ZXMgb2YgYm90aCBzeW1ib2xzIGFyZSBlcXVhbCwgaXQgcmV0dXJucyAnbicsCisgICAgb3RoZXJ3aXNlICd5Jy4KKyg0KSBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4gVXNlZCB0byBvdmVycmlkZSBwcmVjZWRlbmNlLgorKDUpIFJldHVybnMgdGhlIHJlc3VsdCBvZiAoMi0vZXhwci8pLgorKDYpIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtaW4oL2V4cHIvLCAvZXhwci8pLgorKDcpIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtYXgoL2V4cHIvLCAvZXhwci8pLgorCitBbiBleHByZXNzaW9uIGNhbiBoYXZlIGEgdmFsdWUgb2YgJ24nLCAnbScgb3IgJ3knIChvciAwLCAxLCAyCityZXNwZWN0aXZlbHkgZm9yIGNhbGN1bGF0aW9ucykuIEEgbWVudSBlbnRyeSBiZWNvbWVzIHZpc2libGUgd2hlbiBpdCdzCitleHByZXNzaW9uIGV2YWx1YXRlcyB0byAnbScgb3IgJ3knLgorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIHN5bWJvbHM6IGNvbnN0YW50IGFuZCBub25jb25zdGFudCBzeW1ib2xzLgorTm9uY29uc3RhbnQgc3ltYm9scyBhcmUgdGhlIG1vc3QgY29tbW9uIG9uZXMgYW5kIGFyZSBkZWZpbmVkIHdpdGggdGhlCisnY29uZmlnJyBzdGF0ZW1lbnQuIE5vbmNvbnN0YW50IHN5bWJvbHMgY29uc2lzdCBlbnRpcmVseSBvZiBhbHBoYW51bWVyaWMKK2NoYXJhY3RlcnMgb3IgdW5kZXJzY29yZXMuCitDb25zdGFudCBzeW1ib2xzIGFyZSBvbmx5IHBhcnQgb2YgZXhwcmVzc2lvbnMuIENvbnN0YW50IHN5bWJvbHMgYXJlCithbHdheXMgc3Vycm91bmRlZCBieSBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gV2l0aGluIHRoZSBxdW90ZSBhbnkKK290aGVyIGNoYXJhY3RlciBpcyBhbGxvd2VkIGFuZCB0aGUgcXVvdGVzIGNhbiBiZSBlc2NhcGVkIHVzaW5nICdcJy4KKworTWVudSBzdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBwb3NpdGlvbiBvZiBhIG1lbnUgZW50cnkgaW4gdGhlIHRyZWUgaXMgZGV0ZXJtaW5lZCBpbiB0d28gd2F5cy4gRmlyc3QKK2l0IGNhbiBiZSBzcGVjaWZpZWQgZXhwbGljaXRseToKKworbWVudSAiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIE5FVAorCitjb25maWcgTkVUREVWSUNFUworCS4uLgorCitlbmRtZW51CisKK0FsbCBlbnRyaWVzIHdpdGhpbiB0aGUgIm1lbnUiIC4uLiAiZW5kbWVudSIgYmxvY2sgYmVjb21lIGEgc3VibWVudSBvZgorIk5ldHdvcmsgZGV2aWNlIHN1cHBvcnQiLiBBbGwgc3ViZW50cmllcyBpbmhlcml0IHRoZSBkZXBlbmRlbmNpZXMgZnJvbQordGhlIG1lbnUgZW50cnksIGUuZy4gdGhpcyBtZWFucyB0aGUgZGVwZW5kZW5jeSAiTkVUIiBpcyBhZGRlZCB0byB0aGUKK2RlcGVuZGVuY3kgbGlzdCBvZiB0aGUgY29uZmlnIG9wdGlvbiBORVRERVZJQ0VTLgorCitUaGUgb3RoZXIgd2F5IHRvIGdlbmVyYXRlIHRoZSBtZW51IHN0cnVjdHVyZSBpcyBkb25lIGJ5IGFuYWx5emluZyB0aGUKK2RlcGVuZGVuY2llcy4gSWYgYSBtZW51IGVudHJ5IHNvbWVob3cgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgZW50cnksIGl0CitjYW4gYmUgbWFkZSBhIHN1Ym1lbnUgb2YgaXQuIEZpcnN0LCB0aGUgcHJldmlvdXMgKHBhcmVudCkgc3ltYm9sIG11c3QKK2JlIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kgbGlzdCBhbmQgdGhlbiBvbmUgb2YgdGhlc2UgdHdvIGNvbmRpdGlvbnMKK211c3QgYmUgdHJ1ZToKKy0gdGhlIGNoaWxkIGVudHJ5IG11c3QgYmVjb21lIGludmlzaWJsZSwgaWYgdGhlIHBhcmVudCBpcyBzZXQgdG8gJ24nCistIHRoZSBjaGlsZCBlbnRyeSBtdXN0IG9ubHkgYmUgdmlzaWJsZSwgaWYgdGhlIHBhcmVudCBpcyB2aXNpYmxlCisKK2NvbmZpZyBNT0RVTEVTCisJYm9vbCAiRW5hYmxlIGxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0IgorCitjb25maWcgTU9EVkVSU0lPTlMKKwlib29sICJTZXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgbW9kdWxlIHN5bWJvbHMiCisJZGVwZW5kcyBNT0RVTEVTCisKK2NvbW1lbnQgIm1vZHVsZSBzdXBwb3J0IGRpc2FibGVkIgorCWRlcGVuZHMgIU1PRFVMRVMKKworTU9EVkVSU0lPTlMgZGlyZWN0bHkgZGVwZW5kcyBvbiBNT0RVTEVTLCB0aGlzIG1lYW5zIGl0J3Mgb25seSB2aXNpYmxlIGlmCitNT0RVTEVTIGlzIGRpZmZlcmVudCBmcm9tICduJy4gVGhlIGNvbW1lbnQgb24gdGhlIG90aGVyIGhhbmQgaXMgYWx3YXlzCit2aXNpYmxlIHdoZW4gTU9EVUxFUyBpcyB2aXNpYmxlICh0aGUgKGVtcHR5KSBkZXBlbmRlbmN5IG9mIE1PRFVMRVMgaXMKK2Fsc28gcGFydCBvZiB0aGUgY29tbWVudCBkZXBlbmRlbmNpZXMpLgorCisKK0tjb25maWcgc3ludGF4CistLS0tLS0tLS0tLS0tLQorCitUaGUgY29uZmlndXJhdGlvbiBmaWxlIGRlc2NyaWJlcyBhIHNlcmllcyBvZiBtZW51IGVudHJpZXMsIHdoZXJlIGV2ZXJ5CitsaW5lIHN0YXJ0cyB3aXRoIGEga2V5d29yZCAoZXhjZXB0IGhlbHAgdGV4dHMpLiBUaGUgZm9sbG93aW5nIGtleXdvcmRzCitlbmQgYSBtZW51IGVudHJ5OgorLSBjb25maWcKKy0gbWVudWNvbmZpZworLSBjaG9pY2UvZW5kY2hvaWNlCistIGNvbW1lbnQKKy0gbWVudS9lbmRtZW51CistIGlmL2VuZGlmCistIHNvdXJjZQorVGhlIGZpcnN0IGZpdmUgYWxzbyBzdGFydCB0aGUgZGVmaW5pdGlvbiBvZiBhIG1lbnUgZW50cnkuCisKK2NvbmZpZzoKKworCSJjb25maWciIDxzeW1ib2w+CisJPGNvbmZpZyBvcHRpb25zPgorCitUaGlzIGRlZmluZXMgYSBjb25maWcgc3ltYm9sIDxzeW1ib2w+IGFuZCBhY2NlcHRzIGFueSBvZiBhYm92ZQorYXR0cmlidXRlcyBhcyBvcHRpb25zLgorCittZW51Y29uZmlnOgorCSJtZW51Y29uZmlnIiA8c3ltYm9sPgorCTxjb25maWcgb3B0aW9ucz4KKworVGhpcyBpcyBzaW1pbGlhciB0byB0aGUgc2ltcGxlIGNvbmZpZyBlbnRyeSBhYm92ZSwgYnV0IGl0IGFsc28gZ2l2ZXMgYQoraGludCB0byBmcm9udCBlbmRzLCB0aGF0IGFsbCBzdWJvcHRpb25zIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgYQorc2VwYXJhdGUgbGlzdCBvZiBvcHRpb25zLgorCitjaG9pY2VzOgorCisJImNob2ljZSIKKwk8Y2hvaWNlIG9wdGlvbnM+CisJPGNob2ljZSBibG9jaz4KKwkiZW5kY2hvaWNlIgorCitUaGlzIGRlZmluZXMgYSBjaG9pY2UgZ3JvdXAgYW5kIGFjY2VwdHMgYW55IG9mIGFib3ZlIGF0dHJpYnV0ZXMgYXMKK29wdGlvbnMuIEEgY2hvaWNlIGNhbiBvbmx5IGJlIG9mIHR5cGUgYm9vbCBvciB0cmlzdGF0ZSwgd2hpbGUgYSBib29sZWFuCitjaG9pY2Ugb25seSBhbGxvd3MgYSBzaW5nbGUgY29uZmlnIGVudHJ5IHRvIGJlIHNlbGVjdGVkLCBhIHRyaXN0YXRlCitjaG9pY2UgYWxzbyBhbGxvd3MgYW55IG51bWJlciBvZiBjb25maWcgZW50cmllcyB0byBiZSBzZXQgdG8gJ20nLiBUaGlzCitjYW4gYmUgdXNlZCBpZiBtdWx0aXBsZSBkcml2ZXJzIGZvciBhIHNpbmdsZSBoYXJkd2FyZSBleGlzdHMgYW5kIG9ubHkgYQorc2luZ2xlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQvbG9hZGVkIGludG8gdGhlIGtlcm5lbCwgYnV0IGFsbCBkcml2ZXJzCitjYW4gYmUgY29tcGlsZWQgYXMgbW9kdWxlcy4KK0EgY2hvaWNlIGFjY2VwdHMgYW5vdGhlciBvcHRpb24gIm9wdGlvbmFsIiwgd2hpY2ggYWxsb3dzIHRvIHNldCB0aGUKK2Nob2ljZSB0byAnbicgYW5kIG5vIGVudHJ5IG5lZWRzIHRvIGJlIHNlbGVjdGVkLgorCitjb21tZW50OgorCisJImNvbW1lbnQiIDxwcm9tcHQ+CisJPGNvbW1lbnQgb3B0aW9ucz4KKworVGhpcyBkZWZpbmVzIGEgY29tbWVudCB3aGljaCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgZHVyaW5nIHRoZQorY29uZmlndXJhdGlvbiBwcm9jZXNzIGFuZCBpcyBhbHNvIGVjaG9lZCB0byB0aGUgb3V0cHV0IGZpbGVzLiBUaGUgb25seQorcG9zc2libGUgb3B0aW9ucyBhcmUgZGVwZW5kZW5jaWVzLgorCittZW51OgorCisJIm1lbnUiIDxwcm9tcHQ+CisJPG1lbnUgb3B0aW9ucz4KKwk8bWVudSBibG9jaz4KKwkiZW5kbWVudSIKKworVGhpcyBkZWZpbmVzIGEgbWVudSBibG9jaywgc2VlICJNZW51IHN0cnVjdHVyZSIgYWJvdmUgZm9yIG1vcmUKK2luZm9ybWF0aW9uLiBUaGUgb25seSBwb3NzaWJsZSBvcHRpb25zIGFyZSBkZXBlbmRlbmNpZXMuCisKK2lmOgorCisJImlmIiA8ZXhwcj4KKwk8aWYgYmxvY2s+CisJImVuZGlmIgorCitUaGlzIGRlZmluZXMgYW4gaWYgYmxvY2suIFRoZSBkZXBlbmRlbmN5IGV4cHJlc3Npb24gPGV4cHI+IGlzIGFwcGVuZGVkCit0byBhbGwgZW5jbG9zZWQgbWVudSBlbnRyaWVzLgorCitzb3VyY2U6CisKKwkic291cmNlIiA8cHJvbXB0PgorCitUaGlzIHJlYWRzIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBmaWxlLiBUaGlzIGZpbGUgaXMgYWx3YXlzIHBhcnNlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTZhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0CkBAIC0wLDAgKzEsMTEyMiBAQAorTGludXggS2VybmVsIE1ha2VmaWxlcworCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgTGludXgga2VybmVsIE1ha2VmaWxlcy4KKworPT09IFRhYmxlIG9mIENvbnRlbnRzCisKKwk9PT0gMSBPdmVydmlldworCT09PSAyIFdobyBkb2VzIHdoYXQKKwk9PT0gMyBUaGUga2J1aWxkIGZpbGVzCisJICAgLS0tIDMuMSBHb2FsIGRlZmluaXRpb25zCisJICAgLS0tIDMuMiBCdWlsdC1pbiBvYmplY3QgZ29hbHMgLSBvYmoteQorCSAgIC0tLSAzLjMgTG9hZGFibGUgbW9kdWxlIGdvYWxzIC0gb2JqLW0KKwkgICAtLS0gMy40IE9iamVjdHMgd2hpY2ggZXhwb3J0IHN5bWJvbHMKKwkgICAtLS0gMy41IExpYnJhcnkgZmlsZSBnb2FscyAtIGxpYi15CisJICAgLS0tIDMuNiBEZXNjZW5kaW5nIGRvd24gaW4gZGlyZWN0b3JpZXMKKwkgICAtLS0gMy43IENvbXBpbGF0aW9uIGZsYWdzCisJICAgLS0tIDMuOCBDb21tYW5kIGxpbmUgZGVwZW5kZW5jeQorCSAgIC0tLSAzLjkgRGVwZW5kZW5jeSB0cmFja2luZworCSAgIC0tLSAzLjEwIFNwZWNpYWwgUnVsZXMKKworCT09PSA0IEhvc3QgUHJvZ3JhbSBzdXBwb3J0CisJICAgLS0tIDQuMSBTaW1wbGUgSG9zdCBQcm9ncmFtCisJICAgLS0tIDQuMiBDb21wb3NpdGUgSG9zdCBQcm9ncmFtcworCSAgIC0tLSA0LjMgRGVmaW5pbmcgc2hhcmVkIGxpYnJhcmllcyAgCisJICAgLS0tIDQuNCBVc2luZyBDKysgZm9yIGhvc3QgcHJvZ3JhbXMKKwkgICAtLS0gNC41IENvbnRyb2xsaW5nIGNvbXBpbGVyIG9wdGlvbnMgZm9yIGhvc3QgcHJvZ3JhbXMKKwkgICAtLS0gNC42IFdoZW4gaG9zdCBwcm9ncmFtcyBhcmUgYWN0dWFsbHkgYnVpbHQKKwkgICAtLS0gNC43IFVzaW5nIGhvc3Rwcm9ncy0kKENPTkZJR19GT08pCisKKwk9PT0gNSBLYnVpbGQgY2xlYW4gaW5mcmFzdHJ1Y3R1cmUKKworCT09PSA2IEFyY2hpdGVjdHVyZSBNYWtlZmlsZXMKKwkgICAtLS0gNi4xIFNldCB2YXJpYWJsZXMgdG8gdHdlYWsgdGhlIGJ1aWxkIHRvIHRoZSBhcmNoaXRlY3R1cmUKKwkgICAtLS0gNi4yIEFkZCBwcmVyZXF1aXNpdGVzIHRvIHByZXBhcmU6CisJICAgLS0tIDYuMyBMaXN0IGRpcmVjdG9yaWVzIHRvIHZpc2l0IHdoZW4gZGVzY2VuZGluZworCSAgIC0tLSA2LjQgQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJvb3QgaW1hZ2VzCisJICAgLS0tIDYuNSBCdWlsZGluZyBub24ta2J1aWxkIHRhcmdldHMKKwkgICAtLS0gNi42IENvbW1hbmRzIHVzZWZ1bCBmb3IgYnVpbGRpbmcgYSBib290IGltYWdlCisJICAgLS0tIDYuNyBDdXN0b20ga2J1aWxkIGNvbW1hbmRzCisJICAgLS0tIDYuOCBQcmVwcm9jZXNzaW5nIGxpbmtlciBzY3JpcHRzCisJICAgLS0tIDYuOSAkKENDKSBzdXBwb3J0IGZ1bmN0aW9ucworCisJPT09IDcgS2J1aWxkIFZhcmlhYmxlcworCT09PSA4IE1ha2VmaWxlIGxhbmd1YWdlCisJPT09IDkgQ3JlZGl0cworCT09PSAxMCBUT0RPCisKKz09PSAxIE92ZXJ2aWV3CisKK1RoZSBNYWtlZmlsZXMgaGF2ZSBmaXZlIHBhcnRzOgorCisJTWFrZWZpbGUJCXRoZSB0b3AgTWFrZWZpbGUuCisJLmNvbmZpZwkJCXRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLgorCWFyY2gvJChBUkNIKS9NYWtlZmlsZQl0aGUgYXJjaCBNYWtlZmlsZS4KKwlzY3JpcHRzL01ha2VmaWxlLioJY29tbW9uIHJ1bGVzIGV0Yy4gZm9yIGFsbCBrYnVpbGQgTWFrZWZpbGVzLgorCWtidWlsZCBNYWtlZmlsZXMJdGhlcmUgYXJlIGFib3V0IDUwMCBvZiB0aGVzZS4KKworVGhlIHRvcCBNYWtlZmlsZSByZWFkcyB0aGUgLmNvbmZpZyBmaWxlLCB3aGljaCBjb21lcyBmcm9tIHRoZSBrZXJuZWwKK2NvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworVGhlIHRvcCBNYWtlZmlsZSBpcyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdHdvIG1ham9yIHByb2R1Y3RzOiB2bWxpbnV4CisodGhlIHJlc2lkZW50IGtlcm5lbCBpbWFnZSkgYW5kIG1vZHVsZXMgKGFueSBtb2R1bGUgZmlsZXMpLgorSXQgYnVpbGRzIHRoZXNlIGdvYWxzIGJ5IHJlY3Vyc2l2ZWx5IGRlc2NlbmRpbmcgaW50byB0aGUgc3ViZGlyZWN0b3JpZXMgb2YKK3RoZSBrZXJuZWwgc291cmNlIHRyZWUuCitUaGUgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyB3aGljaCBhcmUgdmlzaXRlZCBkZXBlbmRzIHVwb24gdGhlIGtlcm5lbAorY29uZmlndXJhdGlvbi4gVGhlIHRvcCBNYWtlZmlsZSB0ZXh0dWFsbHkgaW5jbHVkZXMgYW4gYXJjaCBNYWtlZmlsZQord2l0aCB0aGUgbmFtZSBhcmNoLyQoQVJDSCkvTWFrZWZpbGUuIFRoZSBhcmNoIE1ha2VmaWxlIHN1cHBsaWVzCithcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdGhlIHRvcCBNYWtlZmlsZS4KKworRWFjaCBzdWJkaXJlY3RvcnkgaGFzIGEga2J1aWxkIE1ha2VmaWxlIHdoaWNoIGNhcnJpZXMgb3V0IHRoZSBjb21tYW5kcworcGFzc2VkIGRvd24gZnJvbSBhYm92ZS4gVGhlIGtidWlsZCBNYWtlZmlsZSB1c2VzIGluZm9ybWF0aW9uIGZyb20gdGhlCisuY29uZmlnIGZpbGUgdG8gY29uc3RydWN0IHZhcmlvdXMgZmlsZSBsaXN0cyB1c2VkIGJ5IGtidWlsZCB0byBidWlsZCAKK2FueSBidWlsdC1pbiBvciBtb2R1bGFyIHRhcmdldHMuCisKK3NjcmlwdHMvTWFrZWZpbGUuKiBjb250YWlucyBhbGwgdGhlIGRlZmluaXRpb25zL3J1bGVzIGV0Yy4gdGhhdAorYXJlIHVzZWQgdG8gYnVpbGQgdGhlIGtlcm5lbCBiYXNlZCBvbiB0aGUga2J1aWxkIG1ha2VmaWxlcy4KKworCis9PT0gMiBXaG8gZG9lcyB3aGF0CisKK1Blb3BsZSBoYXZlIGZvdXIgZGlmZmVyZW50IHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUga2VybmVsIE1ha2VmaWxlcy4KKworKlVzZXJzKiBhcmUgcGVvcGxlIHdobyBidWlsZCBrZXJuZWxzLiAgVGhlc2UgcGVvcGxlIHR5cGUgY29tbWFuZHMgc3VjaCBhcworIm1ha2UgbWVudWNvbmZpZyIgb3IgIm1ha2UiLiAgVGhleSB1c3VhbGx5IGRvIG5vdCByZWFkIG9yIGVkaXQKK2FueSBrZXJuZWwgTWFrZWZpbGVzIChvciBhbnkgb3RoZXIgc291cmNlIGZpbGVzKS4KKworKk5vcm1hbCBkZXZlbG9wZXJzKiBhcmUgcGVvcGxlIHdobyB3b3JrIG9uIGZlYXR1cmVzIHN1Y2ggYXMgZGV2aWNlCitkcml2ZXJzLCBmaWxlIHN5c3RlbXMsIGFuZCBuZXR3b3JrIHByb3RvY29scy4gIFRoZXNlIHBlb3BsZSBuZWVkIHRvCittYWludGFpbiB0aGUga2J1aWxkIE1ha2VmaWxlcyBmb3IgdGhlIHN1YnN5c3RlbSB0aGF0IHRoZXkgYXJlCit3b3JraW5nIG9uLiAgSW4gb3JkZXIgdG8gZG8gdGhpcyBlZmZlY3RpdmVseSwgdGhleSBuZWVkIHNvbWUgb3ZlcmFsbAora25vd2xlZGdlIGFib3V0IHRoZSBrZXJuZWwgTWFrZWZpbGVzLCBwbHVzIGRldGFpbGVkIGtub3dsZWRnZSBhYm91dCB0aGUKK3B1YmxpYyBpbnRlcmZhY2UgZm9yIGtidWlsZC4KKworKkFyY2ggZGV2ZWxvcGVycyogYXJlIHBlb3BsZSB3aG8gd29yayBvbiBhbiBlbnRpcmUgYXJjaGl0ZWN0dXJlLCBzdWNoCithcyBzcGFyYyBvciBpYTY0LiAgQXJjaCBkZXZlbG9wZXJzIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgYXJjaCBNYWtlZmlsZQorYXMgd2VsbCBhcyBrYnVpbGQgTWFrZWZpbGVzLgorCisqS2J1aWxkIGRldmVsb3BlcnMqIGFyZSBwZW9wbGUgd2hvIHdvcmsgb24gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXRzZWxmLgorVGhlc2UgcGVvcGxlIG5lZWQgdG8ga25vdyBhYm91dCBhbGwgYXNwZWN0cyBvZiB0aGUga2VybmVsIE1ha2VmaWxlcy4KKworVGhpcyBkb2N1bWVudCBpcyBhaW1lZCB0b3dhcmRzIG5vcm1hbCBkZXZlbG9wZXJzIGFuZCBhcmNoIGRldmVsb3BlcnMuCisKKworPT09IDMgVGhlIGtidWlsZCBmaWxlcworCitNb3N0IE1ha2VmaWxlcyB3aXRoaW4gdGhlIGtlcm5lbCBhcmUga2J1aWxkIE1ha2VmaWxlcyB0aGF0IHVzZSB0aGUKK2tidWlsZCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBjaGFwdGVyIGludHJvZHVjZSB0aGUgc3ludGF4IHVzZWQgaW4gdGhlCitrYnVpbGQgbWFrZWZpbGVzLgorVGhlIHByZWZlcnJlZCBuYW1lIGZvciB0aGUga2J1aWxkIGZpbGVzIGlzICdLYnVpbGQnIGJ1dCAnTWFrZWZpbGUnIHdpbGwKK2NvbnRpbnVlIHRvIGJlIHN1cHBvcnRlZC4gQWxsIG5ldyBkZXZlbG9wbWVuIGlzIGV4cGVjdGVkIHRvIHVzZSB0aGUKK0tidWlsZCBmaWxlbmFtZS4KKworU2VjdGlvbiAzLjEgIkdvYWwgZGVmaW5pdGlvbnMiIGlzIGEgcXVpY2sgaW50cm8sIGZ1cnRoZXIgY2hhcHRlcnMgcHJvdmlkZQorbW9yZSBkZXRhaWxzLCB3aXRoIHJlYWwgZXhhbXBsZXMuCisKKy0tLSAzLjEgR29hbCBkZWZpbml0aW9ucworCisJR29hbCBkZWZpbml0aW9ucyBhcmUgdGhlIG1haW4gcGFydCAoaGVhcnQpIG9mIHRoZSBrYnVpbGQgTWFrZWZpbGUuCisJVGhlc2UgbGluZXMgZGVmaW5lIHRoZSBmaWxlcyB0byBiZSBidWlsdCwgYW55IHNwZWNpYWwgY29tcGlsYXRpb24KKwlvcHRpb25zLCBhbmQgYW55IHN1YmRpcmVjdG9yaWVzIHRvIGJlIGVudGVyZWQgcmVjdXJzaXZlbHkuCisKKwlUaGUgbW9zdCBzaW1wbGUga2J1aWxkIG1ha2VmaWxlIGNvbnRhaW5zIG9uZSBsaW5lOgorCisJRXhhbXBsZToKKwkJb2JqLXkgKz0gZm9vLm8KKworCVRoaXMgdGVsbCBrYnVpbGQgdGhhdCB0aGVyZSBpcyBvbmUgb2JqZWN0IGluIHRoYXQgZGlyZWN0b3J5IG5hbWVkCisJZm9vLm8uIGZvby5vIHdpbGwgYmUgYnVpbHQgZnJvbSBmb28uYyBvciBmb28uUy4KKworCUlmIGZvby5vIHNoYWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgdmFyaWFibGUgb2JqLW0gaXMgdXNlZC4KKwlUaGVyZWZvcmUgdGhlIGZvbGxvd2luZyBwYXR0ZXJuIGlzIG9mdGVuIHVzZWQ6CisKKwlFeGFtcGxlOgorCQlvYmotJChDT05GSUdfRk9PKSArPSBmb28ubworCisJJChDT05GSUdfRk9PKSBldmFsdWF0ZXMgdG8gZWl0aGVyIHkgKGZvciBidWlsdC1pbikgb3IgbSAoZm9yIG1vZHVsZSkuCisJSWYgQ09ORklHX0ZPTyBpcyBuZWl0aGVyIHkgbm9yIG0sIHRoZW4gdGhlIGZpbGUgd2lsbCBub3QgYmUgY29tcGlsZWQKKwlub3IgbGlua2VkLgorCistLS0gMy4yIEJ1aWx0LWluIG9iamVjdCBnb2FscyAtIG9iai15CisKKwlUaGUga2J1aWxkIE1ha2VmaWxlIHNwZWNpZmllcyBvYmplY3QgZmlsZXMgZm9yIHZtbGludXgKKwlpbiB0aGUgbGlzdHMgJChvYmoteSkuICBUaGVzZSBsaXN0cyBkZXBlbmQgb24gdGhlIGtlcm5lbAorCWNvbmZpZ3VyYXRpb24uCisKKwlLYnVpbGQgY29tcGlsZXMgYWxsIHRoZSAkKG9iai15KSBmaWxlcy4gIEl0IHRoZW4gY2FsbHMKKwkiJChMRCkgLXIiIHRvIG1lcmdlIHRoZXNlIGZpbGVzIGludG8gb25lIGJ1aWx0LWluLm8gZmlsZS4KKwlidWlsdC1pbi5vIGlzIGxhdGVyIGxpbmtlZCBpbnRvIHZtbGludXggYnkgdGhlIHBhcmVudCBNYWtlZmlsZS4KKworCVRoZSBvcmRlciBvZiBmaWxlcyBpbiAkKG9iai15KSBpcyBzaWduaWZpY2FudC4gIER1cGxpY2F0ZXMgaW4KKwl0aGUgbGlzdHMgYXJlIGFsbG93ZWQ6IHRoZSBmaXJzdCBpbnN0YW5jZSB3aWxsIGJlIGxpbmtlZCBpbnRvCisJYnVpbHQtaW4ubyBhbmQgc3VjY2VlZGluZyBpbnN0YW5jZXMgd2lsbCBiZSBpZ25vcmVkLgorCisJTGluayBvcmRlciBpcyBzaWduaWZpY2FudCwgYmVjYXVzZSBjZXJ0YWluIGZ1bmN0aW9ucworCShtb2R1bGVfaW5pdCgpIC8gX19pbml0Y2FsbCkgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGJvb3QgaW4gdGhlCisJb3JkZXIgdGhleSBhcHBlYXIuIFNvIGtlZXAgaW4gbWluZCB0aGF0IGNoYW5naW5nIHRoZSBsaW5rCisJb3JkZXIgbWF5IGUuZy4gIGNoYW5nZSB0aGUgb3JkZXIgaW4gd2hpY2ggeW91ciBTQ1NJCisJY29udHJvbGxlcnMgYXJlIGRldGVjdGVkLCBhbmQgdGh1cyB5b3UgZGlza3MgYXJlIHJlbnVtYmVyZWQuCisKKwlFeGFtcGxlOgorCQkjZHJpdmVycy9pc2RuL2k0bC9NYWtlZmlsZQorCQkjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIElTRE4gc3Vic3lzdGVtIGFuZCBkZXZpY2UgZHJpdmVycy4KKwkJIyBFYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVuYWJsZXMgYSBsaXN0IG9mIGZpbGVzLgorCQlvYmotJChDT05GSUdfSVNETikgICAgICAgICAgICAgKz0gaXNkbi5vCisJCW9iai0kKENPTkZJR19JU0ROX1BQUF9CU0RDT01QKSArPSBpc2RuX2JzZGNvbXAubworCistLS0gMy4zIExvYWRhYmxlIG1vZHVsZSBnb2FscyAtIG9iai1tCisKKwkkKG9iai1tKSBzcGVjaWZ5IG9iamVjdCBmaWxlcyB3aGljaCBhcmUgYnVpbHQgYXMgbG9hZGFibGUKKwlrZXJuZWwgbW9kdWxlcy4KKworCUEgbW9kdWxlIG1heSBiZSBidWlsdCBmcm9tIG9uZSBzb3VyY2UgZmlsZSBvciBzZXZlcmFsIHNvdXJjZQorCWZpbGVzLiBJbiB0aGUgY2FzZSBvZiBvbmUgc291cmNlIGZpbGUsIHRoZSBrYnVpbGQgbWFrZWZpbGUKKwlzaW1wbHkgYWRkcyB0aGUgZmlsZSB0byAkKG9iai1tKS4KKworCUV4YW1wbGU6CisJCSNkcml2ZXJzL2lzZG4vaTRsL01ha2VmaWxlCisJCW9iai0kKENPTkZJR19JU0ROX1BQUF9CU0RDT01QKSArPSBpc2RuX2JzZGNvbXAubworCisJTm90ZTogSW4gdGhpcyBleGFtcGxlICQoQ09ORklHX0lTRE5fUFBQX0JTRENPTVApIGV2YWx1YXRlcyB0byAnbScKKworCUlmIGEga2VybmVsIG1vZHVsZSBpcyBidWlsdCBmcm9tIHNldmVyYWwgc291cmNlIGZpbGVzLCB5b3Ugc3BlY2lmeQorCXRoYXQgeW91IHdhbnQgdG8gYnVpbGQgYSBtb2R1bGUgaW4gdGhlIHNhbWUgd2F5IGFzIGFib3ZlLgorCisJS2J1aWxkIG5lZWRzIHRvIGtub3cgd2hpY2ggdGhlIHBhcnRzIHRoYXQgeW91IHdhbnQgdG8gYnVpbGQgeW91cgorCW1vZHVsZSBmcm9tLCBzbyB5b3UgaGF2ZSB0byB0ZWxsIGl0IGJ5IHNldHRpbmcgYW4KKwkkKDxtb2R1bGVfbmFtZT4tb2JqcykgdmFyaWFibGUuCisKKwlFeGFtcGxlOgorCQkjZHJpdmVycy9pc2RuL2k0bC9NYWtlZmlsZQorCQlvYmotJChDT05GSUdfSVNETikgKz0gaXNkbi5vCisJCWlzZG4tb2JqcyA6PSBpc2RuX25ldF9saWIubyBpc2RuX3YxMTAubyBpc2RuX2NvbW1vbi5vCisKKwlJbiB0aGlzIGV4YW1wbGUsIHRoZSBtb2R1bGUgbmFtZSB3aWxsIGJlIGlzZG4uby4gS2J1aWxkIHdpbGwKKwljb21waWxlIHRoZSBvYmplY3RzIGxpc3RlZCBpbiAkKGlzZG4tb2JqcykgYW5kIHRoZW4gcnVuCisJIiQoTEQpIC1yIiBvbiB0aGUgbGlzdCBvZiB0aGVzZSBmaWxlcyB0byBnZW5lcmF0ZSBpc2RuLm8uCisKKwlLYnVpbGQgcmVjb2duaXNlcyBvYmplY3RzIHVzZWQgZm9yIGNvbXBvc2l0ZSBvYmplY3RzIGJ5IHRoZSBzdWZmaXgKKwktb2JqcywgYW5kIHRoZSBzdWZmaXggLXkuIFRoaXMgYWxsb3dzIHRoZSBNYWtlZmlsZXMgdG8gdXNlCisJdGhlIHZhbHVlIG9mIGEgQ09ORklHXyBzeW1ib2wgdG8gZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBwYXJ0CisJb2YgYSBjb21wb3NpdGUgb2JqZWN0LgorCisJRXhhbXBsZToKKwkJI2ZzL2V4dDIvTWFrZWZpbGUKKwkgICAgICAgIG9iai0kKENPTkZJR19FWFQyX0ZTKSAgICAgICAgKz0gZXh0Mi5vCisJIAlleHQyLXkgICAgICAgICAgICAgICAgICAgICAgIDo9IGJhbGxvYy5vIGJpdG1hcC5vCisJICAgICAgICBleHQyLSQoQ09ORklHX0VYVDJfRlNfWEFUVFIpICs9IHhhdHRyLm8KKwkKKwlJbiB0aGlzIGV4YW1wbGUgeGF0dHIubyBpcyBvbmx5IHBhcnQgb2YgdGhlIGNvbXBvc2l0ZSBvYmplY3QKKwlleHQyLm8sIGlmICQoQ09ORklHX0VYVDJfRlNfWEFUVFIpIGV2YWx1YXRlcyB0byAneScuCisKKwlOb3RlOiBPZiBjb3Vyc2UsIHdoZW4geW91IGFyZSBidWlsZGluZyBvYmplY3RzIGludG8gdGhlIGtlcm5lbCwKKwl0aGUgc3ludGF4IGFib3ZlIHdpbGwgYWxzbyB3b3JrLiBTbywgaWYgeW91IGhhdmUgQ09ORklHX0VYVDJfRlM9eSwKKwlrYnVpbGQgd2lsbCBidWlsZCBhbiBleHQyLm8gZmlsZSBmb3IgeW91IG91dCBvZiB0aGUgaW5kaXZpZHVhbAorCXBhcnRzIGFuZCB0aGVuIGxpbmsgdGhpcyBpbnRvIGJ1aWx0LWluLm8sIGFzIHlvdSB3b3VsZCBleHBlY3QuCisKKy0tLSAzLjQgT2JqZWN0cyB3aGljaCBleHBvcnQgc3ltYm9scworCisJTm8gc3BlY2lhbCBub3RhdGlvbiBpcyByZXF1aXJlZCBpbiB0aGUgbWFrZWZpbGVzIGZvcgorCW1vZHVsZXMgZXhwb3J0aW5nIHN5bWJvbHMuCisKKy0tLSAzLjUgTGlicmFyeSBmaWxlIGdvYWxzIC0gbGliLXkKKworCU9iamVjdHMgbGlzdGVkIHdpdGggb2JqLSogYXJlIHVzZWQgZm9yIG1vZHVsZXMgb3IKKwljb21iaW5lZCBpbiBhIGJ1aWx0LWluLm8gZm9yIHRoYXQgc3BlY2lmaWMgZGlyZWN0b3J5LgorCVRoZXJlIGlzIGFsc28gdGhlIHBvc3NpYmlsaXR5IHRvIGxpc3Qgb2JqZWN0cyB0aGF0IHdpbGwKKwliZSBpbmNsdWRlZCBpbiBhIGxpYnJhcnksIGxpYi5hLgorCUFsbCBvYmplY3RzIGxpc3RlZCB3aXRoIGxpYi15IGFyZSBjb21iaW5lZCBpbiBhIHNpbmdsZQorCWxpYnJhcnkgZm9yIHRoYXQgZGlyZWN0b3J5LgorCU9iamVjdHMgdGhhdCBhcmUgbGlzdGVkIGluIG9iai15IGFuZCBhZGRpdGlvbmFsIGxpc3RlZCBpbgorCWxpYi15IHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LCBzaW5jZSB0aGV5IHdpbGwgYW55d2F5CisJYmUgYWNjZXNzaWJsZS4KKwlGb3IgY29uc2lzdGVuY3kgb2JqZWN0cyBsaXN0ZWQgaW4gbGliLW0gd2lsbCBiZSBpbmNsdWRlZCBpbiBsaWIuYS4gCisKKwlOb3RlIHRoYXQgdGhlIHNhbWUga2J1aWxkIG1ha2VmaWxlIG1heSBsaXN0IGZpbGVzIHRvIGJlIGJ1aWx0LWluCisJYW5kIHRvIGJlIHBhcnQgb2YgYSBsaWJyYXJ5LiBUaGVyZWZvcmUgdGhlIHNhbWUgZGlyZWN0b3J5CisJbWF5IGNvbnRhaW4gYm90aCBhIGJ1aWx0LWluLm8gYW5kIGEgbGliLmEgZmlsZS4KKworCUV4YW1wbGU6CisJCSNhcmNoL2kzODYvbGliL01ha2VmaWxlCisJCWxpYi15ICAgIDo9IGNoZWNrc3VtLm8gZGVsYXkubworCisJVGhpcyB3aWxsIGNyZWF0ZSBhIGxpYnJhcnkgbGliLmEgYmFzZWQgb24gY2hlY2tzdW0ubyBhbmQgZGVsYXkuby4KKwlGb3Iga2J1aWxkIHRvIGFjdHVhbGx5IHJlY29nbml6ZSB0aGF0IHRoZXJlIGlzIGEgbGliLmEgYmVpbmcgYnVpbGQKKwl0aGUgZGlyZWN0b3J5IHNoYWxsIGJlIGxpc3RlZCBpbiBsaWJzLXkuCisJU2VlIGFsc28gIjYuMyBMaXN0IGRpcmVjdG9yaWVzIHRvIHZpc2l0IHdoZW4gZGVzY2VuZGluZyIuCisgCisJVXNhZ2Ugb2YgbGliLXkgaXMgbm9ybWFsbHkgcmVzdHJpY3RlZCB0byBsaWIvIGFuZCBhcmNoLyovbGliLgorCistLS0gMy42IERlc2NlbmRpbmcgZG93biBpbiBkaXJlY3RvcmllcworCisJQSBNYWtlZmlsZSBpcyBvbmx5IHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyBvYmplY3RzIGluIGl0cyBvd24KKwlkaXJlY3RvcnkuIEZpbGVzIGluIHN1YmRpcmVjdG9yaWVzIHNob3VsZCBiZSB0YWtlbiBjYXJlIG9mIGJ5CisJTWFrZWZpbGVzIGluIHRoZXNlIHN1YmRpcnMuIFRoZSBidWlsZCBzeXN0ZW0gd2lsbCBhdXRvbWF0aWNhbGx5CisJaW52b2tlIG1ha2UgcmVjdXJzaXZlbHkgaW4gc3ViZGlyZWN0b3JpZXMsIHByb3ZpZGVkIHlvdSBsZXQgaXQga25vdyBvZgorCXRoZW0uCisKKwlUbyBkbyBzbyBvYmoteSBhbmQgb2JqLW0gYXJlIHVzZWQuCisJZXh0MiBsaXZlcyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSwgYW5kIHRoZSBNYWtlZmlsZSBwcmVzZW50IGluIGZzLworCXRlbGxzIGtidWlsZCB0byBkZXNjZW5kIGRvd24gdXNpbmcgdGhlIGZvbGxvd2luZyBhc3NpZ25tZW50LgorCisJRXhhbXBsZToKKwkJI2ZzL01ha2VmaWxlCisJCW9iai0kKENPTkZJR19FWFQyX0ZTKSArPSBleHQyLworCisJSWYgQ09ORklHX0VYVDJfRlMgaXMgc2V0IHRvIGVpdGhlciAneScgKGJ1aWx0LWluKSBvciAnbScgKG1vZHVsYXIpCisJdGhlIGNvcnJlc3BvbmRpbmcgb2JqLSB2YXJpYWJsZSB3aWxsIGJlIHNldCwgYW5kIGtidWlsZCB3aWxsIGRlc2NlbmQKKwlkb3duIGluIHRoZSBleHQyIGRpcmVjdG9yeS4KKwlLYnVpbGQgb25seSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gZGVjaWRlIHRoYXQgaXQgbmVlZHMgdG8gdmlzaXQKKwl0aGUgZGlyZWN0b3J5LCBpdCBpcyB0aGUgTWFrZWZpbGUgaW4gdGhlIHN1YmRpcmVjdG9yeSB0aGF0CisJc3BlY2lmaWVzIHdoYXQgaXMgbW9kdWxlcyBhbmQgd2hhdCBpcyBidWlsdC1pbi4KKworCUl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gdXNlIGEgQ09ORklHXyB2YXJpYWJsZSB3aGVuIGFzc2lnbmluZyBkaXJlY3RvcnkKKwluYW1lcy4gVGhpcyBhbGxvd3Mga2J1aWxkIHRvIHRvdGFsbHkgc2tpcCB0aGUgZGlyZWN0b3J5IGlmIHRoZQorCWNvcnJlc3BvbmRpbmcgQ09ORklHXyBvcHRpb24gaXMgbmVpdGhlciAneScgbm9yICdtJy4KKworLS0tIDMuNyBDb21waWxhdGlvbiBmbGFncworCisgICAgRVhUUkFfQ0ZMQUdTLCBFWFRSQV9BRkxBR1MsIEVYVFJBX0xERkxBR1MsIEVYVFJBX0FSRkxBR1MKKworCUFsbCB0aGUgRVhUUkFfIHZhcmlhYmxlcyBhcHBseSBvbmx5IHRvIHRoZSBrYnVpbGQgbWFrZWZpbGUKKwl3aGVyZSB0aGV5IGFyZSBhc3NpZ25lZC4gVGhlIEVYVFJBXyB2YXJpYWJsZXMgYXBwbHkgdG8gYWxsCisJY29tbWFuZHMgZXhlY3V0ZWQgaW4gdGhlIGtidWlsZCBtYWtlZmlsZS4KKworCSQoRVhUUkFfQ0ZMQUdTKSBzcGVjaWZpZXMgb3B0aW9ucyBmb3IgY29tcGlsaW5nIEMgZmlsZXMgd2l0aAorCSQoQ0MpLgorCisJRXhhbXBsZToKKwkJIyBkcml2ZXJzL3NvdW5kL2VtdTEwazEvTWFrZWZpbGUKKwkJRVhUUkFfQ0ZMQUdTICs9IC1JJChvYmopCisJCWlmZGVmIERFQlVHCisJCSAgICBFWFRSQV9DRkxBR1MgKz0gLURFTVUxMEsxX0RFQlVHCisJCWVuZGlmCisKKworCVRoaXMgdmFyaWFibGUgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHRvcCBNYWtlZmlsZSBvd25zIHRoZQorCXZhcmlhYmxlICQoQ0ZMQUdTKSBhbmQgdXNlcyBpdCBmb3IgY29tcGlsYXRpb24gZmxhZ3MgZm9yIHRoZQorCWVudGlyZSB0cmVlLgorCisJJChFWFRSQV9BRkxBR1MpIGlzIGEgc2ltaWxhciBzdHJpbmcgZm9yIHBlci1kaXJlY3Rvcnkgb3B0aW9ucworCXdoZW4gY29tcGlsaW5nIGFzc2VtYmx5IGxhbmd1YWdlIHNvdXJjZS4KKworCUV4YW1wbGU6CisJCSNhcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUKKwkJRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAorCisKKwkkKEVYVFJBX0xERkxBR1MpIGFuZCAkKEVYVFJBX0FSRkxBR1MpIGFyZSBzaW1pbGFyIHN0cmluZ3MgZm9yCisJcGVyLWRpcmVjdG9yeSBvcHRpb25zIHRvICQoTEQpIGFuZCAkKEFSKS4KKworCUV4YW1wbGU6CisJCSNhcmNoL202OGsvZnBzcDA0MC9NYWtlZmlsZQorCQlFWFRSQV9MREZMQUdTIDo9IC14CisKKyAgICBDRkxBR1NfJEAsIEFGTEFHU18kQAorCisJQ0ZMQUdTXyRAIGFuZCBBRkxBR1NfJEAgb25seSBhcHBseSB0byBjb21tYW5kcyBpbiBjdXJyZW50CisJa2J1aWxkIG1ha2VmaWxlLgorCisJJChDRkxBR1NfJEApIHNwZWNpZmllcyBwZXItZmlsZSBvcHRpb25zIGZvciAkKENDKS4gIFRoZSAkQAorCXBhcnQgaGFzIGEgbGl0ZXJhbCB2YWx1ZSB3aGljaCBzcGVjaWZpZXMgdGhlIGZpbGUgdGhhdCBpdCBpcyBmb3IuCisKKwlFeGFtcGxlOgorCQkjIGRyaXZlcnMvc2NzaS9NYWtlZmlsZQorCQlDRkxBR1NfYWhhMTUyeC5vID0gICAtREFIQTE1MlhfU1RBVCAtREFVVE9DT05GCisJCUNGTEFHU19nZHRoLm8gICAgPSAjIC1EREVCVUdfR0RUSD0yIC1EX19TRVJJQUxfXyAtRF9fQ09NMl9fIFwKKwkJCQkgICAgIC1ER0RUSF9TVEFUSVNUSUNTCisJCUNGTEFHU19zZWFnYXRlLm8gPSAgIC1EQVJCSVRSQVRFIC1EUEFSSVRZIC1EU0VBR0FURV9VU0VfQVNNCisKKwlUaGVzZSB0aHJlZSBsaW5lcyBzcGVjaWZ5IGNvbXBpbGF0aW9uIGZsYWdzIGZvciBhaGExNTJ4Lm8sCisJZ2R0aC5vLCBhbmQgc2VhZ2F0ZS5vCisKKwkkKEFGTEFHU18kQCkgaXMgYSBzaW1pbGFyIGZlYXR1cmUgZm9yIHNvdXJjZSBmaWxlcyBpbiBhc3NlbWJseQorCWxhbmd1YWdlcy4KKworCUV4YW1wbGU6CisJCSMgYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisJCUFGTEFHU19oZWFkLWFybXYubyA6PSAtRFRFWFRBRERSPSQoVEVYVEFERFIpIC10cmFkaXRpb25hbAorCQlBRkxBR1NfaGVhZC1hcm1vLm8gOj0gLURURVhUQUREUj0kKFRFWFRBRERSKSAtdHJhZGl0aW9uYWwKKworLS0tIDMuOSBEZXBlbmRlbmN5IHRyYWNraW5nCisKKwlLYnVpbGQgdHJhY2tzIGRlcGVuZGVuY2llcyBvbiB0aGUgZm9sbG93aW5nOgorCTEpIEFsbCBwcmVyZXF1aXNpdGUgZmlsZXMgKGJvdGggKi5jIGFuZCAqLmgpCisJMikgQ09ORklHXyBvcHRpb25zIHVzZWQgaW4gYWxsIHByZXJlcXVpc2l0ZSBmaWxlcworCTMpIENvbW1hbmQtbGluZSB1c2VkIHRvIGNvbXBpbGUgdGFyZ2V0CisKKwlUaHVzLCBpZiB5b3UgY2hhbmdlIGFuIG9wdGlvbiB0byAkKENDKSBhbGwgYWZmZWN0ZWQgZmlsZXMgd2lsbAorCWJlIHJlLWNvbXBpbGVkLgorCistLS0gMy4xMCBTcGVjaWFsIFJ1bGVzCisKKwlTcGVjaWFsIHJ1bGVzIGFyZSB1c2VkIHdoZW4gdGhlIGtidWlsZCBpbmZyYXN0cnVjdHVyZSBkb2VzCisJbm90IHByb3ZpZGUgdGhlIHJlcXVpcmVkIHN1cHBvcnQuIEEgdHlwaWNhbCBleGFtcGxlIGlzCisJaGVhZGVyIGZpbGVzIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuCisJQW5vdGhlciBleGFtcGxlIGlzIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgTWFrZWZpbGVzIHdoaWNoCisJbmVlZHMgc3BlY2lhbCBydWxlcyB0byBwcmVwYXJlIGJvb3QgaW1hZ2VzIGV0Yy4KKworCVNwZWNpYWwgcnVsZXMgYXJlIHdyaXR0ZW4gYXMgbm9ybWFsIE1ha2UgcnVsZXMuCisJS2J1aWxkIGlzIG5vdCBleGVjdXRpbmcgaW4gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgTWFrZWZpbGUgaXMKKwlsb2NhdGVkLCBzbyBhbGwgc3BlY2lhbCBydWxlcyBzaGFsbCBwcm92aWRlIGEgcmVsYXRpdmUKKwlwYXRoIHRvIHByZXJlcXVpc2l0ZSBmaWxlcyBhbmQgdGFyZ2V0IGZpbGVzLgorCisJVHdvIHZhcmlhYmxlcyBhcmUgdXNlZCB3aGVuIGRlZmluaW5nIHNwZWNpYWwgcnVsZXM6CisKKyAgICAkKHNyYykKKwkkKHNyYykgaXMgYSByZWxhdGl2ZSBwYXRoIHdoaWNoIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5CisJd2hlcmUgdGhlIE1ha2VmaWxlIGlzIGxvY2F0ZWQuIEFsd2F5cyB1c2UgJChzcmMpIHdoZW4KKwlyZWZlcnJpbmcgdG8gZmlsZXMgbG9jYXRlZCBpbiB0aGUgc3JjIHRyZWUuCisKKyAgICAkKG9iaikKKwkkKG9iaikgaXMgYSByZWxhdGl2ZSBwYXRoIHdoaWNoIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5CisJd2hlcmUgdGhlIHRhcmdldCBpcyBzYXZlZC4gQWx3YXlzIHVzZSAkKG9iaikgd2hlbgorCXJlZmVycmluZyB0byBnZW5lcmF0ZWQgZmlsZXMuCisKKwlFeGFtcGxlOgorCQkjZHJpdmVycy9zY3NpL01ha2VmaWxlCisJCSQob2JqKS81M2M4eHhfZC5oOiAkKHNyYykvNTNjNyw4eHguc2NyICQoc3JjKS9zY3JpcHRfYXNtLnBsCisJCQkkKENQUCkgLURDSElQPTgxMCAtIDwgJDwgfCAuLi4gJChzcmMpL3NjcmlwdF9hc20ucGwKKworCVRoaXMgaXMgYSBzcGVjaWFsIHJ1bGUsIGZvbGxvd2luZyB0aGUgbm9ybWFsIHN5bnRheAorCXJlcXVpcmVkIGJ5IG1ha2UuCisJVGhlIHRhcmdldCBmaWxlIGRlcGVuZHMgb24gdHdvIHByZXJlcXVpc2l0ZSBmaWxlcy4gUmVmZXJlbmNlcworCXRvIHRoZSB0YXJnZXQgZmlsZSBhcmUgcHJlZml4ZWQgd2l0aCAkKG9iaiksIHJlZmVyZW5jZXMKKwl0byBwcmVyZXF1aXNpdGVzIGFyZSByZWZlcmVuY2VkIHdpdGggJChzcmMpIChiZWNhdXNlIHRoZXkgYXJlIG5vdAorCWdlbmVyYXRlZCBmaWxlcykuCisKKworPT09IDQgSG9zdCBQcm9ncmFtIHN1cHBvcnQKKworS2J1aWxkIHN1cHBvcnRzIGJ1aWxkaW5nIGV4ZWN1dGFibGVzIG9uIHRoZSBob3N0IGZvciB1c2UgZHVyaW5nIHRoZQorY29tcGlsYXRpb24gc3RhZ2UuCitUd28gc3RlcHMgYXJlIHJlcXVpcmVkIGluIG9yZGVyIHRvIHVzZSBhIGhvc3QgZXhlY3V0YWJsZS4KKworVGhlIGZpcnN0IHN0ZXAgaXMgdG8gdGVsbCBrYnVpbGQgdGhhdCBhIGhvc3QgcHJvZ3JhbSBleGlzdHMuIFRoaXMgaXMKK2RvbmUgdXRpbGlzaW5nIHRoZSB2YXJpYWJsZSBob3N0cHJvZ3MteS4KKworVGhlIHNlY29uZCBzdGVwIGlzIHRvIGFkZCBhbiBleHBsaWNpdCBkZXBlbmRlbmN5IHRvIHRoZSBleGVjdXRhYmxlLgorVGhpcyBjYW4gYmUgZG9uZSBpbiB0d28gd2F5cy4gRWl0aGVyIGFkZCB0aGUgZGVwZW5kZW5jeSBpbiBhIHJ1bGUsIAorb3IgdXRpbGlzZSB0aGUgdmFyaWFibGUgJChhbHdheXMpLgorQm90aCBwb3NzaWJpbGl0aWVzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZy4KKworLS0tIDQuMSBTaW1wbGUgSG9zdCBQcm9ncmFtCisKKwlJbiBzb21lIGNhc2VzIHRoZXJlIGlzIGEgbmVlZCB0byBjb21waWxlIGFuZCBydW4gYSBwcm9ncmFtIG9uIHRoZQorCWNvbXB1dGVyIHdoZXJlIHRoZSBidWlsZCBpcyBydW5uaW5nLgorCVRoZSBmb2xsb3dpbmcgbGluZSB0ZWxscyBrYnVpbGQgdGhhdCB0aGUgcHJvZ3JhbSBiaW4yaGV4IHNoYWxsIGJlCisJYnVpbHQgb24gdGhlIGJ1aWxkIGhvc3QuCisKKwlFeGFtcGxlOgorCQlob3N0cHJvZ3MteSA6PSBiaW4yaGV4CisKKwlLYnVpbGQgYXNzdW1lcyBpbiB0aGUgYWJvdmUgZXhhbXBsZSB0aGF0IGJpbjJoZXggaXMgbWFkZSBmcm9tIGEgc2luZ2xlCisJYy1zb3VyY2UgZmlsZSBuYW1lZCBiaW4yaGV4LmMgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKKwl0aGUgTWFrZWZpbGUuCisgIAorLS0tIDQuMiBDb21wb3NpdGUgSG9zdCBQcm9ncmFtcworCisJSG9zdCBwcm9ncmFtcyBjYW4gYmUgbWFkZSB1cCBiYXNlZCBvbiBjb21wb3NpdGUgb2JqZWN0cy4KKwlUaGUgc3ludGF4IHVzZWQgdG8gZGVmaW5lIGNvbXBvc2l0ZSBvYmplY3RzIGZvciBob3N0IHByb2dyYW1zIGlzCisJc2ltaWxhciB0byB0aGUgc3ludGF4IHVzZWQgZm9yIGtlcm5lbCBvYmplY3RzLgorCSQoPGV4ZWN1dGVhYmxlPi1vYmpzKSBsaXN0IGFsbCBvYmplY3RzIHVzZWQgdG8gbGluayB0aGUgZmluYWwKKwlleGVjdXRhYmxlLgorCisJRXhhbXBsZToKKwkJI3NjcmlwdHMvbHhkaWFsb2cvTWFrZWZpbGUKKwkJaG9zdHByb2dzLXkgICA6PSBseGRpYWxvZyAgCisJCWx4ZGlhbG9nLW9ianMgOj0gY2hlY2tsaXN0Lm8gbHhkaWFsb2cubworCisJT2JqZWN0cyB3aXRoIGV4dGVuc2lvbiAubyBhcmUgY29tcGlsZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyAuYworCWZpbGVzLiBJbiB0aGUgYWJvdmUgZXhhbXBsZSBjaGVja2xpc3QuYyBpcyBjb21waWxlZCB0byBjaGVja2xpc3QubworCWFuZCBseGRpYWxvZy5jIGlzIGNvbXBpbGVkIHRvIGx4ZGlhbG9nLm8uCisJRmluYWxseSB0aGUgdHdvIC5vIGZpbGVzIGFyZSBsaW5rZWQgdG8gdGhlIGV4ZWN1dGFibGUsIGx4ZGlhbG9nLgorCU5vdGU6IFRoZSBzeW50YXggPGV4ZWN1dGFibGU+LXkgaXMgbm90IHBlcm1pdHRlZCBmb3IgaG9zdC1wcm9ncmFtcy4KKworLS0tIDQuMyBEZWZpbmluZyBzaGFyZWQgbGlicmFyaWVzICAKKyAgCisJT2JqZWN0cyB3aXRoIGV4dGVuc2lvbiAuc28gYXJlIGNvbnNpZGVyZWQgc2hhcmVkIGxpYnJhcmllcywgYW5kCisJd2lsbCBiZSBjb21waWxlZCBhcyBwb3NpdGlvbiBpbmRlcGVuZGVudCBvYmplY3RzLgorCUtidWlsZCBwcm92aWRlcyBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzLCBidXQgdGhlIHVzYWdlCisJc2hhbGwgYmUgcmVzdHJpY3RlZC4KKwlJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgdGhlIGxpYmtjb25maWcuc28gc2hhcmVkIGxpYnJhcnkgaXMgdXNlZAorCXRvIGxpbmsgdGhlIGV4ZWN1dGFibGUgY29uZi4KKworCUV4YW1wbGU6CisJCSNzY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKwkJaG9zdHByb2dzLXkgICAgIDo9IGNvbmYKKwkJY29uZi1vYmpzICAgICAgIDo9IGNvbmYubyBsaWJrY29uZmlnLnNvCisJCWxpYmtjb25maWctb2JqcyA6PSBleHByLm8gdHlwZS5vCisgIAorCVNoYXJlZCBsaWJyYXJpZXMgYWx3YXlzIHJlcXVpcmUgYSBjb3JyZXNwb25kaW5nIC1vYmpzIGxpbmUsIGFuZAorCWluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSBzaGFyZWQgbGlicmFyeSBsaWJrY29uZmlnIGlzIGNvbXBvc2VkIGJ5CisJdGhlIHR3byBvYmplY3RzIGV4cHIubyBhbmQgdHlwZS5vLgorCWV4cHIubyBhbmQgdHlwZS5vIHdpbGwgYmUgYnVpbHQgYXMgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBhbmQKKwlsaW5rZWQgYXMgYSBzaGFyZWQgbGlicmFyeSBsaWJrY29uZmlnLnNvLiBDKysgaXMgbm90IHN1cHBvcnRlZCBmb3IKKwlzaGFyZWQgbGlicmFyaWVzLgorCistLS0gNC40IFVzaW5nIEMrKyBmb3IgaG9zdCBwcm9ncmFtcworCisJa2J1aWxkIG9mZmVycyBzdXBwb3J0IGZvciBob3N0IHByb2dyYW1zIHdyaXR0ZW4gaW4gQysrLiBUaGlzIHdhcworCWludHJvZHVjZWQgc29sZWx5IHRvIHN1cHBvcnQga2NvbmZpZywgYW5kIGlzIG5vdCByZWNvbW1lbmRlZAorCWZvciBnZW5lcmFsIHVzZS4KKworCUV4YW1wbGU6CisJCSNzY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKwkJaG9zdHByb2dzLXkgICA6PSBxY29uZgorCQlxY29uZi1jeHhvYmpzIDo9IHFjb25mLm8KKworCUluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSBleGVjdXRhYmxlIGlzIGNvbXBvc2VkIG9mIHRoZSBDKysgZmlsZQorCXFjb25mLmNjIC0gaWRlbnRpZmllZCBieSAkKHFjb25mLWN4eG9ianMpLgorCQorCUlmIHFjb25mIGlzIGNvbXBvc2VkIGJ5IGEgbWl4dHVyZSBvZiAuYyBhbmQgLmNjIGZpbGVzLCB0aGVuIGFuCisJYWRkaXRpb25hbCBsaW5lIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoaXMuCisKKwlFeGFtcGxlOgorCQkjc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCisJCWhvc3Rwcm9ncy15ICAgOj0gcWNvbmYKKwkJcWNvbmYtY3h4b2JqcyA6PSBxY29uZi5vCisJCXFjb25mLW9ianMgICAgOj0gY2hlY2subworCQorLS0tIDQuNSBDb250cm9sbGluZyBjb21waWxlciBvcHRpb25zIGZvciBob3N0IHByb2dyYW1zCisKKwlXaGVuIGNvbXBpbGluZyBob3N0IHByb2dyYW1zLCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgc3BlY2lmaWMgZmxhZ3MuCisJVGhlIHByb2dyYW1zIHdpbGwgYWx3YXlzIGJlIGNvbXBpbGVkIHV0aWxpc2luZyAkKEhPU1RDQykgcGFzc2VkCisJdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGluICQoSE9TVENGTEFHUykuCisJVG8gc2V0IGZsYWdzIHRoYXQgd2lsbCB0YWtlIGVmZmVjdCBmb3IgYWxsIGhvc3QgcHJvZ3JhbXMgY3JlYXRlZAorCWluIHRoYXQgTWFrZWZpbGUgdXNlIHRoZSB2YXJpYWJsZSBIT1NUX0VYVFJBQ0ZMQUdTLgorCisJRXhhbXBsZToKKwkJI3NjcmlwdHMvbHhkaWFsb2cvTWFrZWZpbGUKKwkJSE9TVF9FWFRSQUNGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzCisgIAorCVRvIHNldCBzcGVjaWZpYyBmbGFncyBmb3IgYSBzaW5nbGUgZmlsZSB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdGlvbgorCWlzIHVzZWQ6CisKKwlFeGFtcGxlOgorCQkjYXJjaC9wcGM2NC9ib290L01ha2VmaWxlCisJCUhPU1RDRkxBR1NfcGlnZ3liYWNrLm8gOj0gLURLRVJORUxCQVNFPSQoS0VSTkVMQkFTRSkKKyAgCisJSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUgbGlua2VyLgorICAKKwlFeGFtcGxlOgorCQkjc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCisJCUhPU1RMT0FETElCRVNfcWNvbmYgOj0gLUwkKFFURElSKS9saWIKKworCVdoZW4gbGlua2luZyBxY29uZiBpdCB3aWxsIGJlIHBhc3NlZCB0aGUgZXh0cmEgb3B0aW9uICItTCQoUVRESVIpL2xpYiIuCisgCistLS0gNC42IFdoZW4gaG9zdCBwcm9ncmFtcyBhcmUgYWN0dWFsbHkgYnVpbHQKKworCUtidWlsZCB3aWxsIG9ubHkgYnVpbGQgaG9zdC1wcm9ncmFtcyB3aGVuIHRoZXkgYXJlIHJlZmVyZW5jZWQKKwlhcyBhIHByZXJlcXVpc2l0ZS4KKwlUaGlzIGlzIHBvc3NpYmxlIGluIHR3byB3YXlzOgorCisJKDEpIExpc3QgdGhlIHByZXJlcXVpc2l0ZSBleHBsaWNpdGx5IGluIGEgc3BlY2lhbCBydWxlLgorCisJRXhhbXBsZToKKwkJI2RyaXZlcnMvcGNpL01ha2VmaWxlCisJCWhvc3Rwcm9ncy15IDo9IGdlbi1kZXZsaXN0CisJCSQob2JqKS9kZXZsaXN0Lmg6ICQoc3JjKS9wY2kuaWRzICQob2JqKS9nZW4tZGV2bGlzdAorCQkJKCBjZCAkKG9iaik7IC4vZ2VuLWRldmxpc3QgKSA8ICQ8CisKKwlUaGUgdGFyZ2V0ICQob2JqKS9kZXZsaXN0Lmggd2lsbCBub3QgYmUgYnVpbHQgYmVmb3JlIAorCSQob2JqKS9nZW4tZGV2bGlzdCBpcyB1cGRhdGVkLiBOb3RlIHRoYXQgcmVmZXJlbmNlcyB0bworCXRoZSBob3N0IHByb2dyYW1zIGluIHNwZWNpYWwgcnVsZXMgbXVzdCBiZSBwcmVmaXhlZCB3aXRoICQob2JqKS4KKworCSgyKSBVc2UgJChhbHdheXMpCisJV2hlbiB0aGVyZSBpcyBubyBzdWl0YWJsZSBzcGVjaWFsIHJ1bGUsIGFuZCB0aGUgaG9zdCBwcm9ncmFtCisJc2hhbGwgYmUgYnVpbHQgd2hlbiBhIG1ha2VmaWxlIGlzIGVudGVyZWQsIHRoZSAkKGFsd2F5cykKKwl2YXJpYWJsZSBzaGFsbCBiZSB1c2VkLgorCisJRXhhbXBsZToKKwkJI3NjcmlwdHMvbHhkaWFsb2cvTWFrZWZpbGUKKwkJaG9zdHByb2dzLXkgICA6PSBseGRpYWxvZworCQlhbHdheXMgICAgICAgIDo9ICQoaG9zdHByb2dzLXkpCisKKwlUaGlzIHdpbGwgdGVsbCBrYnVpbGQgdG8gYnVpbGQgbHhkaWFsb2cgZXZlbiBpZiBub3QgcmVmZXJlbmNlZCBpbgorCWFueSBydWxlLgorCistLS0gNC43IFVzaW5nIGhvc3Rwcm9ncy0kKENPTkZJR19GT08pCisKKwlBIHR5cGNhbCBwYXR0ZXJuIGluIGEgS2J1aWxkIGZpbGUgbG9rIGxpa2UgdGhpczoKKworCUV4YW1wbGU6CisJCSNzY3JpcHRzL01ha2VmaWxlCisJCWhvc3Rwcm9ncy0kKENPTkZJR19LQUxMU1lNUykgKz0ga2FsbHN5bXMKKworCUtidWlsZCBrbm93cyBhYm91dCBib3RoICd5JyBmb3IgYnVpbHQtaW4gYW5kICdtJyBmb3IgbW9kdWxlLgorCVNvIGlmIGEgY29uZmlnIHN5bWJvbCBldmFsdWF0ZSB0byAnbScsIGtidWlsZCB3aWxsIHN0aWxsIGJ1aWxkCisJdGhlIGJpbmFyeS4gSW4gb3RoZXIgd29yZHMgS2J1aWxkIGhhbmRsZSBob3N0cHJvZ3MtbSBleGFjdGx5CisJbGlrZSBob3N0cHJvZ3MteS4gQnV0IG9ubHkgaG9zdHByb2dzLXkgaXMgcmVjb21tZW5kIHVzZWQKKwl3aGVuIG5vIENPTkZJRyBzeW1ib2wgYXJlIGludm9sdmVkLgorCis9PT0gNSBLYnVpbGQgY2xlYW4gaW5mcmFzdHJ1Y3R1cmUKKworIm1ha2UgY2xlYW4iIGRlbGV0ZXMgbW9zdCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHNyYyB0cmVlIHdoZXJlIHRoZSBrZXJuZWwKK2lzIGNvbXBpbGVkLiBUaGlzIGluY2x1ZGVzIGdlbmVyYXRlZCBmaWxlcyBzdWNoIGFzIGhvc3QgcHJvZ3JhbXMuCitLYnVpbGQga25vd3MgdGFyZ2V0cyBsaXN0ZWQgaW4gJChob3N0cHJvZ3MteSksICQoaG9zdHByb2dzLW0pLCAkKGFsd2F5cyksCiskKGV4dHJhLXkpIGFuZCAkKHRhcmdldHMpLiBUaGV5IGFyZSBhbGwgZGVsZXRlZCBkdXJpbmcgIm1ha2UgY2xlYW4iLgorRmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm5zICIqLltvYXNdIiwgIioua28iLCBwbHVzIHNvbWUgYWRkaXRpb25hbCBmaWxlcworZ2VuZXJhdGVkIGJ5IGtidWlsZCBhcmUgZGVsZXRlZCBhbGwgb3ZlciB0aGUga2VybmVsIHNyYyB0cmVlIHdoZW4KKyJtYWtlIGNsZWFuIiBpcyBleGVjdXRlZC4KKworQWRkaXRpb25hbCBmaWxlcyBjYW4gYmUgc3BlY2lmaWVkIGluIGtidWlsZCBtYWtlZmlsZXMgYnkgdXNlIG9mICQoY2xlYW4tZmlsZXMpLgorCisJRXhhbXBsZToKKwkJI2RyaXZlcnMvcGNpL01ha2VmaWxlCisJCWNsZWFuLWZpbGVzIDo9IGRldmxpc3QuaCBjbGFzc2xpc3QuaAorCitXaGVuIGV4ZWN1dGluZyAibWFrZSBjbGVhbiIsIHRoZSB0d28gZmlsZXMgImRldmxpc3QuaCBjbGFzc2xpc3QuaCIgd2lsbAorYmUgZGVsZXRlZC4gS2J1aWxkIHdpbGwgYXNzdW1lIGZpbGVzIHRvIGJlIGluIHNhbWUgcmVsYXRpdmUgZGlyZWN0b3J5IGFzIHRoZQorTWFrZWZpbGUgZXhjZXB0IGlmIGFuIGFic29sdXRlIHBhdGggaXMgc3BlY2lmaWVkIChwYXRoIHN0YXJ0aW5nIHdpdGggJy8nKS4KKworVG8gZGVsZXRlIGEgZGlyZWN0b3J5IGhpcmFjaHkgdXNlOgorCUV4YW1wbGU6CisJCSNzY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKKwkJY2xlYW4tZGlycyA6PSAkKG9ianRyZWUpL2RlYmlhbi8KKworVGhpcyB3aWxsIGRlbGV0ZSB0aGUgZGlyZWN0b3J5IGRlYmlhbiwgaW5jbHVkaW5nIGFsbCBzdWJkaXJlY3Rvcmllcy4KK0tidWlsZCB3aWxsIGFzc3VtZSB0aGUgZGlyZWN0b3JpZXMgdG8gYmUgaW4gdGhlIHNhbWUgcmVsYXRpdmUgcGF0aCBhcyB0aGUKK01ha2VmaWxlIGlmIG5vIGFic29sdXRlIHBhdGggaXMgc3BlY2lmaWVkIChwYXRoIGRvZXMgbm90IHN0YXJ0IHdpdGggJy8nKS4KKworVXN1YWxseSBrYnVpbGQgZGVzY2VuZHMgZG93biBpbiBzdWJkaXJlY3RvcmllcyBkdWUgdG8gIm9iai0qIDo9IGRpci8iLAorYnV0IGluIHRoZSBhcmNoaXRlY3R1cmUgbWFrZWZpbGVzIHdoZXJlIHRoZSBrYnVpbGQgaW5mcmFzdHJ1Y3R1cmUKK2lzIG5vdCBzdWZmaWNpZW50IHRoaXMgc29tZXRpbWVzIG5lZWRzIHRvIGJlIGV4cGxpY2l0LgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9ib290L01ha2VmaWxlCisJCXN1YmRpci0gOj0gY29tcHJlc3NlZC8KKworVGhlIGFib3ZlIGFzc2lnbm1lbnQgaW5zdHJ1Y3RzIGtidWlsZCB0byBkZXNjZW5kIGRvd24gaW4gdGhlCitkaXJlY3RvcnkgY29tcHJlc3NlZC8gd2hlbiAibWFrZSBjbGVhbiIgaXMgZXhlY3V0ZWQuCisKK1RvIHN1cHBvcnQgdGhlIGNsZWFuIGluZnJhc3RydWN0dXJlIGluIHRoZSBNYWtlZmlsZXMgdGhhdCBidWlsZHMgdGhlCitmaW5hbCBib290aW1hZ2UgdGhlcmUgaXMgYW4gb3B0aW9uYWwgdGFyZ2V0IG5hbWVkIGFyY2hjbGVhbjoKKworCUV4YW1wbGU6CisJCSNhcmNoL2kzODYvTWFrZWZpbGUKKwkJYXJjaGNsZWFuOgorCQkJJChRKSQoTUFLRSkgJChjbGVhbik9YXJjaC9pMzg2L2Jvb3QKKworV2hlbiAibWFrZSBjbGVhbiIgaXMgZXhlY3V0ZWQsIG1ha2Ugd2lsbCBkZXNjZW5kIGRvd24gaW4gYXJjaC9pMzg2L2Jvb3QsCithbmQgY2xlYW4gYXMgdXN1YWwuIFRoZSBNYWtlZmlsZSBsb2NhdGVkIGluIGFyY2gvaTM4Ni9ib290LyBtYXkgdXNlCit0aGUgc3ViZGlyLSB0cmljayB0byBkZXNjZW5kIGZ1cnRoZXIgZG93bi4KKworTm90ZSAxOiBhcmNoLyQoQVJDSCkvTWFrZWZpbGUgY2Fubm90IHVzZSAic3ViZGlyLSIsIGJlY2F1c2UgdGhhdCBmaWxlIGlzCitpbmNsdWRlZCBpbiB0aGUgdG9wIGxldmVsIG1ha2VmaWxlLCBhbmQgdGhlIGtidWlsZCBpbmZyYXN0cnVjdHVyZQoraXMgbm90IG9wZXJhdGlvbmFsIGF0IHRoYXQgcG9pbnQuCisKK05vdGUgMjogQWxsIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiBjb3JlLXksIGxpYnMteSwgZHJpdmVycy15IGFuZCBuZXQteSB3aWxsCitiZSB2aXNpdGVkIGR1cmluZyAibWFrZSBjbGVhbiIuCisKKz09PSA2IEFyY2hpdGVjdHVyZSBNYWtlZmlsZXMKKworVGhlIHRvcCBsZXZlbCBNYWtlZmlsZSBzZXRzIHVwIHRoZSBlbnZpcm9ubWVudCBhbmQgZG9lcyB0aGUgcHJlcGFyYXRpb24sCitiZWZvcmUgc3RhcnRpbmcgdG8gZGVzY2VuZCBkb3duIGluIHRoZSBpbmRpdmlkdWFsIGRpcmVjdG9yaWVzLgorVGhlIHRvcCBsZXZlbCBtYWtlZmlsZSBjb250YWlucyB0aGUgZ2VuZXJpYyBwYXJ0LCB3aGVyZWFzIHRoZQorYXJjaC8kKEFSQ0gpL01ha2VmaWxlIGNvbnRhaW5zIHdoYXQgaXMgcmVxdWlyZWQgdG8gc2V0LXVwIGtidWlsZAordG8gdGhlIHNhaWQgYXJjaGl0ZWN0dXJlLgorVG8gZG8gc28gYXJjaC8kKEFSQ0gpL01ha2VmaWxlIHNldHMgYSBudW1iZXIgb2YgdmFyaWFibGVzLCBhbmQgZGVmaW5lcworYSBmZXcgdGFyZ2V0cy4KKworV2hlbiBrYnVpbGQgZXhlY3V0ZXMgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgZm9sbG93ZWQgKHJvdWdobHkpOgorMSkgQ29uZmlndXJhdGlvbiBvZiB0aGUga2VybmVsID0+IHByb2R1Y2VkIC5jb25maWcKKzIpIFN0b3JlIGtlcm5lbCB2ZXJzaW9uIGluIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oCiszKSBTeW1saW5rIGluY2x1ZGUvYXNtIHRvIGluY2x1ZGUvYXNtLSQoQVJDSCkKKzQpIFVwZGF0aW5nIGFsbCBvdGhlciBwcmVyZXF1aXNpdGVzIHRvIHRoZSB0YXJnZXQgcHJlcGFyZToKKyAgIC0gQWRkaXRpb25hbCBwcmVyZXF1aXNpdGVzIGFyZSBzcGVjaWZpZWQgaW4gYXJjaC8kKEFSQ0gpL01ha2VmaWxlCis1KSBSZWN1cnNpdmVseSBkZXNjZW5kIGRvd24gaW4gYWxsIGRpcmVjdG9yaWVzIGxpc3RlZCBpbgorICAgaW5pdC0qIGNvcmUqIGRyaXZlcnMtKiBuZXQtKiBsaWJzLSogYW5kIGJ1aWxkIGFsbCB0YXJnZXRzLgorICAgLSBUaGUgdmFsdWUgb2YgdGhlIGFib3ZlIHZhcmlhYmxlcyBhcmUgZXh0ZW5kZWQgaW4gYXJjaC8kKEFSQ0gpL01ha2VmaWxlLgorNikgQWxsIG9iamVjdCBmaWxlcyBhcmUgdGhlbiBsaW5rZWQgYW5kIHRoZSByZXN1bHRpbmcgZmlsZSB2bWxpbnV4IGlzIAorICAgbG9jYXRlZCBhdCB0aGUgcm9vdCBvZiB0aGUgc3JjIHRyZWUuCisgICBUaGUgdmVyeSBmaXJzdCBvYmplY3RzIGxpbmtlZCBhcmUgbGlzdGVkIGluIGhlYWQteSwgYXNzaWduZWQgYnkKKyAgIGFyY2gvJChBUkNIKS9NYWtlZmlsZS4KKzcpIEZpbmFsbHkgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBwYXJ0IGRvZXMgYW55IHJlcXVpcmVkIHBvc3QgcHJvY2Vzc2luZworICAgYW5kIGJ1aWxkcyB0aGUgZmluYWwgYm9vdGltYWdlLgorICAgLSBUaGlzIGluY2x1ZGVzIGJ1aWxkaW5nIGJvb3QgcmVjb3JkcworICAgLSBQcmVwYXJpbmcgaW5pdHJkIGltYWdlcyBhbmQgdGhlIGxpa2UKKworCistLS0gNi4xIFNldCB2YXJpYWJsZXMgdG8gdHdlYWsgdGhlIGJ1aWxkIHRvIHRoZSBhcmNoaXRlY3R1cmUKKworICAgIExERkxBR1MJCUdlbmVyaWMgJChMRCkgb3B0aW9ucworCisJRmxhZ3MgdXNlZCBmb3IgYWxsIGludm9jYXRpb25zIG9mIHRoZSBsaW5rZXIuCisJT2Z0ZW4gc3BlY2lmeWluZyB0aGUgZW11bGF0aW9uIGlzIHN1ZmZpY2llbnQuCisKKwlFeGFtcGxlOgorCQkjYXJjaC9zMzkwL01ha2VmaWxlCisJCUxERkxBR1MgICAgICAgICA6PSAtbSBlbGZfczM5MAorCU5vdGU6IEVYVFJBX0xERkxBR1MgYW5kIExERkxBR1NfJEAgY2FuIGJlIHVzZWQgdG8gZnVydGhlciBjdXN0b21pc2UKKwl0aGUgZmxhZ3MgdXNlZC4gU2VlIGNoYXB0ZXIgNy4KKwkKKyAgICBMREZMQUdTX01PRFVMRQlPcHRpb25zIGZvciAkKExEKSB3aGVuIGxpbmtpbmcgbW9kdWxlcworCisJTERGTEFHU19NT0RVTEUgaXMgdXNlZCB0byBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yICQoTEQpIHdoZW4KKwlsaW5raW5nIHRoZSAua28gZmlsZXMgdXNlZCBmb3IgbW9kdWxlcy4KKwlEZWZhdWx0IGlzICItciIsIGZvciByZWxvY2F0YWJsZSBvdXRwdXQuCisKKyAgICBMREZMQUdTX3ZtbGludXgJT3B0aW9ucyBmb3IgJChMRCkgd2hlbiBsaW5raW5nIHZtbGludXgKKworCUxERkxBR1Nfdm1saW51eCBpcyB1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBmbGFncyB0byBwYXNzIHRvCisJdGhlIGxpbmtlciB3aGVuIGxpbmtpbmcgdGhlIGZpbmFsIHZtbGludXguCisJTERGTEFHU192bWxpbnV4IHVzZXMgdGhlIExERkxBR1NfJEAgc3VwcG9ydC4KKworCUV4YW1wbGU6CisJCSNhcmNoL2kzODYvTWFrZWZpbGUKKwkJTERGTEFHU192bWxpbnV4IDo9IC1lIHN0ZXh0CisKKyAgICBPQkpDT1BZRkxBR1MJb2JqY29weSBmbGFncworCisJV2hlbiAkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KSBpcyB1c2VkIHRvIHRyYW5zbGF0ZSBhIC5vIGZpbGUsCisJdGhlbiB0aGUgZmxhZ3Mgc3BlY2lmaWVkIGluIE9CSkNPUFlGTEFHUyB3aWxsIGJlIHVzZWQuCisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkgaXMgb2Z0ZW4gdXNlZCB0byBnZW5lcmF0ZSByYXcgYmluYXJpZXMgb24KKwl2bWxpbnV4LgorCisJRXhhbXBsZToKKwkJI2FyY2gvczM5MC9NYWtlZmlsZQorCQlPQkpDT1BZRkxBR1MgOj0gLU8gYmluYXJ5CisKKwkJI2FyY2gvczM5MC9ib290L01ha2VmaWxlCisJCSQob2JqKS9pbWFnZTogdm1saW51eCBGT1JDRQorCQkJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKworCUluIHRoaXMgZXhhbXBsZSB0aGUgYmluYXJ5ICQob2JqKS9pbWFnZSBpcyBhIGJpbmFyeSB2ZXJzaW9uIG9mCisJdm1saW51eC4gVGhlIHVzYWdlIG9mICQoY2FsbCBpZl9jaGFuZ2VkLHh4eCkgd2lsbCBiZSBkZXNjcmliZWQgbGF0ZXIuCisKKyAgICBBRkxBR1MJCSQoQVMpIGFzc2VtYmxlciBmbGFncworCisJRGVmYXVsdCB2YWx1ZSAtIHNlZSB0b3AgbGV2ZWwgTWFrZWZpbGUKKwlBcHBlbmQgb3IgbW9kaWZ5IGFzIHJlcXVpcmVkIHBlciBhcmNoaXRlY3R1cmUuCisKKwlFeGFtcGxlOgorCQkjYXJjaC9zcGFyYzY0L01ha2VmaWxlCisJCUFGTEFHUyArPSAtbTY0IC1tY3B1PXVsdHJhc3BhcmMKKworICAgIENGTEFHUwkJJChDQykgY29tcGlsZXIgZmxhZ3MKKworCURlZmF1bHQgdmFsdWUgLSBzZWUgdG9wIGxldmVsIE1ha2VmaWxlCisJQXBwZW5kIG9yIG1vZGlmeSBhcyByZXF1aXJlZCBwZXIgYXJjaGl0ZWN0dXJlLgorCisJT2Z0ZW4gdGhlIENGTEFHUyB2YXJpYWJsZSBkZXBlbmRzIG9uIHRoZSBjb25maWd1cmF0aW9uLgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9NYWtlZmlsZQorCQljZmxhZ3MtJChDT05GSUdfTTM4NikgKz0gLW1hcmNoPWkzODYKKwkJQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCisKKwlNYW55IGFyY2ggTWFrZWZpbGVzIGR5bmFtaWNhbGx5IHJ1biB0aGUgdGFyZ2V0IEMgY29tcGlsZXIgdG8KKwlwcm9iZSBzdXBwb3J0ZWQgb3B0aW9uczoKKworCQkjYXJjaC9pMzg2L01ha2VmaWxlCisKKwkJLi4uCisJCWNmbGFncy0kKENPTkZJR19NUEVOVElVTUlJKSAgICAgKz0gJChjYWxsIGNjLW9wdGlvbixcCisJCQkJCQktbWFyY2g9cGVudGl1bTIsLW1hcmNoPWk2ODYpCisJCS4uLgorCQkjIERpc2FibGUgdW5pdC1hdC1hLXRpbWUgbW9kZSAuLi4KKwkJQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLWZuby11bml0LWF0LWEtdGltZSkKKwkJLi4uCisKKworCVRoZSBmaXJzdCBleGFtcGxlcyB1dGlsaXNlcyB0aGUgdHJpY2sgdGhhdCBhIGNvbmZpZyBvcHRpb24gZXhwYW5kcworCXRvICd5JyB3aGVuIHNlbGVjdGVkLgorCisgICAgQ0ZMQUdTX0tFUk5FTAkkKENDKSBvcHRpb25zIHNwZWNpZmljIGZvciBidWlsdC1pbgorCisJJChDRkxBR1NfS0VSTkVMKSBjb250YWlucyBleHRyYSBDIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gY29tcGlsZQorCXJlc2lkZW50IGtlcm5lbCBjb2RlLgorCisgICAgQ0ZMQUdTX01PRFVMRQkkKENDKSBvcHRpb25zIHNwZWNpZmljIGZvciBtb2R1bGVzCisKKwkkKENGTEFHU19NT0RVTEUpIGNvbnRhaW5zIGV4dHJhIEMgY29tcGlsZXIgZmxhZ3MgdXNlZCB0byBjb21waWxlIGNvZGUKKwlmb3IgbG9hZGFibGUga2VybmVsIG1vZHVsZXMuCisKKyAKKy0tLSA2LjIgQWRkIHByZXJlcXVpc2l0ZXMgdG8gcHJlcGFyZToKKworCVRoZSBwcmVwYXJlOiBydWxlIGlzIHVzZWQgdG8gbGlzdCBwcmVyZXF1aXNpdGVzIHRoYXQgbmVlZHMgdG8gYmUKKwlidWlsdCBiZWZvcmUgc3RhcnRpbmcgdG8gZGVzY2VuZCBkb3duIGluIHRoZSBzdWJkaXJlY3Rvcmllcy4KKwlUaGlzIGlzIHVzdWFsIGhlYWRlciBmaWxlcyBjb250YWluaW5nIGFzc2VtYmxlciBjb25zdGFudHMuCisKKwkJRXhhbXBsZToKKwkJI2FyY2gvczM5MC9NYWtlZmlsZQorCQlwcmVwYXJlOiBpbmNsdWRlL2FzbS0kKEFSQ0gpL29mZnNldHMuaAorCisJSW4gdGhpcyBleGFtcGxlIHRoZSBmaWxlIGluY2x1ZGUvYXNtLSQoQVJDSCkvb2Zmc2V0cy5oIHdpbGwKKwliZSBidWlsdCBiZWZvcmUgZGVzY2VuZGluZyBkb3duIGluIHRoZSBzdWJkaXJlY3Rvcmllcy4KKwlTZWUgYWxzbyBjaGFwdGVyIFhYWC1UT0RPIHRoYXQgZGVzY3JpYmUgaG93IGtidWlsZCBzdXBwb3J0cworCWdlbmVyYXRpbmcgb2Zmc2V0IGhlYWRlciBmaWxlcy4KKworCistLS0gNi4zIExpc3QgZGlyZWN0b3JpZXMgdG8gdmlzaXQgd2hlbiBkZXNjZW5kaW5nCisKKwlBbiBhcmNoIE1ha2VmaWxlIGNvb3BlcmF0ZXMgd2l0aCB0aGUgdG9wIE1ha2VmaWxlIHRvIGRlZmluZSB2YXJpYWJsZXMKKwl3aGljaCBzcGVjaWZ5IGhvdyB0byBidWlsZCB0aGUgdm1saW51eCBmaWxlLiAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vCisJY29ycmVzcG9uZGluZyBhcmNoLXNwZWNpZmljIHNlY3Rpb24gZm9yIG1vZHVsZXM7IHRoZSBtb2R1bGUtYnVpbGRpbmcKKwltYWNoaW5lcnkgaXMgYWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudC4KKworCQorICAgIGhlYWQteSwgaW5pdC15LCBjb3JlLXksIGxpYnMteSwgZHJpdmVycy15LCBuZXQteQorCisJJChoZWFkLXkpIGxpc3Qgb2JqZWN0cyB0byBiZSBsaW5rZWQgZmlyc3QgaW4gdm1saW51eC4KKwkkKGxpYnMteSkgbGlzdCBkaXJlY3RvcmllcyB3aGVyZSBhIGxpYi5hIGFyY2hpdmUgY2FuIGJlIGxvY2F0ZWQuCisJVGhlIHJlc3QgbGlzdCBkaXJlY3RvcmllcyB3aGVyZSBhIGJ1aWx0LWluLm8gb2JqZWN0IGZpbGUgY2FuIGJlIGxvY2F0ZWQuCisKKwkkKGluaXQteSkgb2JqZWN0cyB3aWxsIGJlIGxvY2F0ZWQgYWZ0ZXIgJChoZWFkLXkpLgorCVRoZW4gdGhlIHJlc3QgZm9sbG93cyBpbiB0aGlzIG9yZGVyOgorCSQoY29yZS15KSwgJChsaWJzLXkpLCAkKGRyaXZlcnMteSkgYW5kICQobmV0LXkpLgorCisJVGhlIHRvcCBsZXZlbCBNYWtlZmlsZSBkZWZpbmUgdmFsdWVzIGZvciBhbGwgZ2VuZXJpYyBkaXJlY3RvcmllcywKKwlhbmQgYXJjaC8kKEFSQ0gpL01ha2VmaWxlIG9ubHkgYWRkcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZGlyZWN0b3JpZXMuCisKKwlFeGFtcGxlOgorCQkjYXJjaC9zcGFyYzY0L01ha2VmaWxlCisJCWNvcmUteSArPSBhcmNoL3NwYXJjNjQva2VybmVsLworCQlsaWJzLXkgKz0gYXJjaC9zcGFyYzY0L3Byb20vIGFyY2gvc3BhcmM2NC9saWIvCisJCWRyaXZlcnMtJChDT05GSUdfT1BST0ZJTEUpICArPSBhcmNoL3NwYXJjNjQvb3Byb2ZpbGUvCisKKworLS0tIDYuNCBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgYm9vdCBpbWFnZXMKKworCUFuIGFyY2ggTWFrZWZpbGUgc3BlY2lmaWVzIGdvYWxzIHRoYXQgdGFrZSB0aGUgdm1saW51eCBmaWxlLCBjb21wcmVzcworCWl0LCB3cmFwIGl0IGluIGJvb3RzdHJhcHBpbmcgY29kZSwgYW5kIGNvcHkgdGhlIHJlc3VsdGluZyBmaWxlcworCXNvbWV3aGVyZS4gVGhpcyBpbmNsdWRlcyB2YXJpb3VzIGtpbmRzIG9mIGluc3RhbGxhdGlvbiBjb21tYW5kcy4KKwlUaGUgYWN0dWFsIGdvYWxzIGFyZSBub3Qgc3RhbmRhcmRpemVkIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgorCisJSXQgaXMgY29tbW9uIHRvIGxvY2F0ZSBhbnkgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGluIGEgYm9vdC8KKwlkaXJlY3RvcnkgYmVsb3cgYXJjaC8kKEFSQ0gpLy4KKworCUtidWlsZCBkb2VzIG5vdCBwcm92aWRlIGFueSBzbWFydCB3YXkgdG8gc3VwcG9ydCBidWlsZGluZyBhCisJdGFyZ2V0IHNwZWNpZmllZCBpbiBib290Ly4gVGhlcmVmb3JlIGFyY2gvJChBUkNIKS9NYWtlZmlsZSBzaGFsbAorCWNhbGwgbWFrZSBtYW51YWxseSB0byBidWlsZCBhIHRhcmdldCBpbiBib290Ly4KKworCVRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBpcyB0byBpbmNsdWRlIHNob3J0Y3V0cyBpbgorCWFyY2gvJChBUkNIKS9NYWtlZmlsZSwgYW5kIHVzZSB0aGUgZnVsbCBwYXRoIHdoZW4gY2FsbGluZyBkb3duCisJaW50byB0aGUgYXJjaC8kKEFSQ0gpL2Jvb3QvTWFrZWZpbGUuCisKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L01ha2VmaWxlCisJCWJvb3QgOj0gYXJjaC9pMzg2L2Jvb3QKKwkJYnpJbWFnZTogdm1saW51eAorCQkJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkKGJvb3QpLyRACisKKwkiJChRKSQoTUFLRSkgJChidWlsZCk9PGRpcj4iIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gaW52b2tlCisJbWFrZSBpbiBhIHN1YmRpcmVjdG9yeS4KKworCVRoZXJlIGFyZSBubyBydWxlcyBmb3IgbmFtaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdGFyZ2V0cywKKwlidXQgZXhlY3V0aW5nICJtYWtlIGhlbHAiIHdpbGwgbGlzdCBhbGwgcmVsZXZhbnQgdGFyZ2V0cy4KKwlUbyBzdXBwb3J0IHRoaXMgJChhcmNoaGVscCkgbXVzdCBiZSBkZWZpbmVkLgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9NYWtlZmlsZQorCQlkZWZpbmUgYXJjaGhlbHAKKwkJICBlY2hvICAnKiBiekltYWdlICAgICAgLSBJbWFnZSAoYXJjaC8kKEFSQ0gpL2Jvb3QvYnpJbWFnZSknCisJCWVuZGVmCisKKwlXaGVuIG1ha2UgaXMgZXhlY3V0ZWQgd2l0aG91dCBhcmd1bWVudHMsIHRoZSBmaXJzdCBnb2FsIGVuY291bnRlcmVkCisJd2lsbCBiZSBidWlsdC4gSW4gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZSB0aGUgZmlyc3QgZ29hbCBwcmVzZW50CisJaXMgYWxsOi4KKwlBbiBhcmNoaXRlY3R1cmUgc2hhbGwgYWx3YXlzIHBlciBkZWZhdWx0IGJ1aWxkIGEgYm9vdGFibGUgaW1hZ2UuCisJSW4gIm1ha2UgaGVscCIgdGhlIGRlZmF1bHQgZ29hbCBpcyBoaWdobGlnaHRlZCB3aXRoIGEgJyonLgorCUFkZCBhIG5ldyBwcmVyZXF1aXNpdGUgdG8gYWxsOiB0byBzZWxlY3QgYSBkZWZhdWx0IGdvYWwgZGlmZmVyZW50CisJZnJvbSB2bWxpbnV4LgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9NYWtlZmlsZQorCQlhbGw6IGJ6SW1hZ2UgCisKKwlXaGVuICJtYWtlIiBpcyBleGVjdXRlZCB3aXRob3V0IGFyZ3VtZW50cywgYnpJbWFnZSB3aWxsIGJlIGJ1aWx0LgorCistLS0gNi41IEJ1aWxkaW5nIG5vbi1rYnVpbGQgdGFyZ2V0cworCisgICAgZXh0cmEteQorCisJZXh0cmEteSBzcGVjaWZ5IGFkZGl0aW9uYWwgdGFyZ2V0cyBjcmVhdGVkIGluIHRoZSBjdXJyZW50CisJZGlyZWN0b3J5LCBpbiBhZGRpdGlvbiB0byBhbnkgdGFyZ2V0cyBzcGVjaWZpZWQgYnkgb2JqLSouCisKKwlMaXN0aW5nIGFsbCB0YXJnZXRzIGluIGV4dHJhLXkgaXMgcmVxdWlyZWQgZm9yIHR3byBwdXJwb3NlczoKKwkxKSBFbmFibGUga2J1aWxkIHRvIGNoZWNrIGNoYW5nZXMgaW4gY29tbWFuZCBsaW5lcworCSAgIC0gV2hlbiAkKGNhbGwgaWZfY2hhbmdlZCx4eHgpIGlzIHVzZWQKKwkyKSBrYnVpbGQga25vd3Mgd2hhdCBmaWxlcyB0byBkZWxldGUgZHVyaW5nICJtYWtlIGNsZWFuIgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKKwkJZXh0cmEteSA6PSBoZWFkLm8gaW5pdF90YXNrLm8KKworCUluIHRoaXMgZXhhbXBsZSBleHRyYS15IGlzIHVzZWQgdG8gbGlzdCBvYmplY3QgZmlsZXMgdGhhdAorCXNoYWxsIGJlIGJ1aWx0LCBidXQgc2hhbGwgbm90IGJlIGxpbmtlZCBhcyBwYXJ0IG9mIGJ1aWx0LWluLm8uCisKKwkKKy0tLSA2LjYgQ29tbWFuZHMgdXNlZnVsIGZvciBidWlsZGluZyBhIGJvb3QgaW1hZ2UKKworCUtidWlsZCBwcm92aWRlcyBhIGZldyBtYWNyb3MgdGhhdCBhcmUgdXNlZnVsIHdoZW4gYnVpbGRpbmcgYQorCWJvb3QgaW1hZ2UuCisKKyAgICBpZl9jaGFuZ2VkCisKKwlpZl9jaGFuZ2VkIGlzIHRoZSBpbmZyYXN0cnVjdHVyZSB1c2VkIGZvciB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLgorCisJVXNhZ2U6CisJCXRhcmdldDogc291cmNlKHMpIEZPUkNFCisJCQkkKGNhbGwgaWZfY2hhbmdlZCxsZC9vYmpjb3B5L2d6aXApCisKKwlXaGVuIHRoZSBydWxlIGlzIGV2YWx1YXRlZCBpdCBpcyBjaGVja2VkIHRvIHNlZSBpZiBhbnkgZmlsZXMKKwluZWVkcyBhbiB1cGRhdGUsIG9yIHRoZSBjb21tYW5kbGluZSBoYXMgY2hhbmdlZCBzaW5jZSBsYXN0CisJaW52b2NhdGlvbi4gVGhlIGxhdHRlciB3aWxsIGZvcmNlIGEgcmVidWlsZCBpZiBhbnkgb3B0aW9ucworCXRvIHRoZSBleGVjdXRhYmxlIGhhdmUgY2hhbmdlZC4KKwlBbnkgdGFyZ2V0IHRoYXQgdXRpbGlzZXMgaWZfY2hhbmdlZCBtdXN0IGJlIGxpc3RlZCBpbiAkKHRhcmdldHMpLAorCW90aGVyd2lzZSB0aGUgY29tbWFuZCBsaW5lIGNoZWNrIHdpbGwgZmFpbCwgYW5kIHRoZSB0YXJnZXQgd2lsbAorCWFsd2F5cyBiZSBidWlsdC4KKwlBc3NpZ25tZW50cyB0byAkKHRhcmdldHMpIGFyZSB3aXRob3V0ICQob2JqKS8gcHJlZml4LgorCWlmX2NoYW5nZWQgbWF5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBjdXN0b20gY29tbWFuZHMgYXMKKwlkZWZpbmVkIGluIDYuNyAiQ3VzdG9tIGtidWlsZCBjb21tYW5kcyIuCisJTm90ZTogSXQgaXMgYSB0eXBpY2FsIG1pc3Rha2UgdG8gZm9yZ2V0IHRoZSBGT1JDRSBwcmVyZXF1aXNpdGUuCisKKyAgICBsZAorCUxpbmsgdGFyZ2V0LiBPZnRlbiBMREZMQUdTXyRAIGlzIHVzZWQgdG8gc2V0IHNwZWNpZmljIG9wdGlvbnMgdG8gbGQuCisJCisgICAgb2JqY29weQorCUNvcHkgYmluYXJ5LiBVc2VzIE9CSkNPUFlGTEFHUyB1c3VhbGx5IHNwZWNpZmllZCBpbgorCWFyY2gvJChBUkNIKS9NYWtlZmlsZS4KKwlPQkpDT1BZRkxBR1NfJEAgbWF5IGJlIHVzZWQgdG8gc2V0IGFkZGl0aW9uYWwgb3B0aW9ucy4KKworICAgIGd6aXAKKwlDb21wcmVzcyB0YXJnZXQuIFVzZSBtYXhpbXVtIGNvbXByZXNzaW9uIHRvIGNvbXByZXNzIHRhcmdldC4KKworCUV4YW1wbGU6CisJCSNhcmNoL2kzODYvYm9vdC9NYWtlZmlsZQorCQlMREZMQUdTX2Jvb3RzZWN0IDo9IC1UdGV4dCAweDAgLXMgLS1vZm9ybWF0IGJpbmFyeQorCQlMREZMQUdTX3NldHVwICAgIDo9IC1UdGV4dCAweDAgLXMgLS1vZm9ybWF0IGJpbmFyeSAtZSBiZWd0ZXh0CisKKwkJdGFyZ2V0cyArPSBzZXR1cCBzZXR1cC5vIGJvb3RzZWN0IGJvb3RzZWN0Lm8KKwkJJChvYmopL3NldHVwICQob2JqKS9ib290c2VjdDogJTogJS5vIEZPUkNFCisJCQkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKKworCUluIHRoaXMgZXhhbXBsZSB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIHRhcmdldHMsIHJlcXVpcmluZyBkaWZmZXJlbnQKKwlvcHRpb25zIHRvIHRoZSBsaW5rZXIuIHRoZSBsaW5rZXIgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIHVzaW5nIHRoZQorCUxERkxBR1NfJEAgc3ludGF4IC0gb25lIGZvciBlYWNoIHBvdGVudGlhbCB0YXJnZXQuCisJJCh0YXJnZXRzKSBhcmUgYXNzaW5nZWQgYWxsIHBvdGVudGlhbCB0YXJnZXRzLCBoZXJieSBrYnVpbGQga25vd3MKKwl0aGUgdGFyZ2V0cyBhbmQgd2lsbDoKKwkJMSkgY2hlY2sgZm9yIGNvbW1hbmRsaW5lIGNoYW5nZXMKKwkJMikgZGVsZXRlIHRhcmdldCBkdXJpbmcgbWFrZSBjbGVhbgorCisJVGhlICI6ICU6ICUubyIgcGFydCBvZiB0aGUgcHJlcmVxdWlzaXRlIGlzIGEgc2hvcnRoYW5kIHRoYXQKKwlmcmVlIHVzIGZyb20gbGlzdGluZyB0aGUgc2V0dXAubyBhbmQgYm9vdHNlY3QubyBmaWxlcy4KKwlOb3RlOiBJdCBpcyBhIGNvbW1vbiBtaXN0YWtlIHRvIGZvcmdldCB0aGUgInRhcmdldCA6PSIgYXNzaWdubWVudCwKKwkgICAgICByZXN1bHRpbmcgaW4gdGhlIHRhcmdldCBmaWxlIGJlaW5nIHJlY29tcGlsZWQgZm9yIG5vCisJICAgICAgb2J2aW91cyByZWFzb24uCisKKworLS0tIDYuNyBDdXN0b20ga2J1aWxkIGNvbW1hbmRzCisKKwlXaGVuIGtidWlsZCBpcyBleGVjdXRpbmcgd2l0aCBLQlVJTERfVkVSQk9TRT0wIHRoZW4gb25seSBhIHNob3J0aGFuZAorCW9mIGEgY29tbWFuZCBpcyBub3JtYWxseSBkaXNwbGF5ZWQuCisJVG8gZW5hYmxlIHRoaXMgYmVoYXZpb3VyIGZvciBjdXN0b20gY29tbWFuZHMga2J1aWxkIHJlcXVpcmVzCisJdHdvIHZhcmlhYmxlcyB0byBiZSBzZXQ6CisJcXVpZXRfY21kXzxjb21tYW5kPgktIHdoYXQgc2hhbGwgYmUgZWNob2VkCisJICAgICAgY21kXzxjb21tYW5kPgktIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGUKKworCUV4YW1wbGU6CisJCSMKKwkJcXVpZXRfY21kX2ltYWdlID0gQlVJTEQgICAkQAorCQkgICAgICBjbWRfaW1hZ2UgPSAkKG9iaikvdG9vbHMvYnVpbGQgJChCVUlMREZMQUdTKSBcCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG9iaikvdm1saW51eC5iaW4gPiAkQAorCisJCXRhcmdldHMgKz0gYnpJbWFnZQorCQkkKG9iaikvYnpJbWFnZTogJChvYmopL3ZtbGludXguYmluICQob2JqKS90b29scy9idWlsZCBGT1JDRQorCQkJJChjYWxsIGlmX2NoYW5nZWQsaW1hZ2UpCisJCQlAZWNobyAnS2VybmVsOiAkQCBpcyByZWFkeScKKworCVdoZW4gdXBkYXRpbmcgdGhlICQob2JqKS9iekltYWdlIHRhcmdldCB0aGUgbGluZToKKworCUJVSUxEICAgIGFyY2gvaTM4Ni9ib290L2J6SW1hZ2UKKworCXdpbGwgYmUgZGlzcGxheWVkIHdpdGggIm1ha2UgS0JVSUxEX1ZFUkJPU0U9MCIuCisJCisKKy0tLSA2LjggUHJlcHJvY2Vzc2luZyBsaW5rZXIgc2NyaXB0cworCisJV2hlbiB0aGUgdm1saW51eCBpbWFnZSBpcyBidWlsZCB0aGUgbGlua2VyIHNjcmlwdDoKKwlhcmNoLyQoQVJDSCkva2VybmVsL3ZtbGludXgubGRzIGlzIHVzZWQuCisJVGhlIHNjcmlwdCBpcyBhIHByZXByb2Nlc3NlZCB2YXJpYW50IG9mIHRoZSBmaWxlIHZtbGludXgubGRzLlMKKwlsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKwlrYnVpbGQga25vd3MgLmxkcyBmaWxlIGFuZCBpbmNsdWRlcyBhIHJ1bGUgKmxkcy5TIC0+ICpsZHMuCisJCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKKwkJYWx3YXlzIDo9IHZtbGludXgubGRzCisJCisJCSNNYWtlZmlsZQorCQlleHBvcnQgQ1BQRkxBR1Nfdm1saW51eC5sZHMgKz0gLVAgLUMgLVUkKEFSQ0gpCisJCQorCVRoZSBhc3NpZ21lbnQgdG8gJChhbHdheXMpIGlzIHVzZWQgdG8gdGVsbCBrYnVpbGQgdG8gYnVpbGQgdGhlCisJdGFyZ2V0OiB2bWxpbnV4Lmxkcy4KKwlUaGUgYXNzaWdubWVudCB0byAkKENQUEZMQUdTX3ZtbGludXgubGRzKSB0ZWxsIGtidWlsZCB0byB1c2UgdGhlCisJc3BlY2lmaWVkIG9wdGlvbnMgd2hlbiBidWlsZGluZyB0aGUgdGFyZ2V0IHZtbGludXgubGRzLgorCQorCVdoZW4gYnVpbGRpbmcgdGhlICoubGRzIHRhcmdldCBrYnVpbGQgdXNlZCB0aGUgdmFyaWFrbGVzOgorCUNQUEZMQUdTCTogU2V0IGluIHRvcC1sZXZlbCBNYWtlZmlsZQorCUVYVFJBX0NQUEZMQUdTCTogTWF5IGJlIHNldCBpbiB0aGUga2J1aWxkIG1ha2VmaWxlCisJQ1BQRkxBR1NfJChARikgIDogVGFyZ2V0IHNwZWNpZmljIGZsYWdzLgorCSAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZnVsbCBmaWxlbmFtZSBpcyB1c2VkIGluIHRoaXMKKwkgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50LgorCisJVGhlIGtidWlsZCBpbmZyYXN0cnVjdHVyZSBmb3IgKmxkcyBmaWxlIGFyZSB1c2VkIGluIHNldmVyYWwKKwlhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmlsZXMuCisKKworLS0tIDYuOSAkKENDKSBzdXBwb3J0IGZ1bmN0aW9ucworCisJVGhlIGtlcm5lbCBtYXkgYmUgYnVpbGQgd2l0aCBzZXZlcmFsIGRpZmZlcmVudCB2ZXJzaW9ucyBvZgorCSQoQ0MpLCBlYWNoIHN1cHBvcnRpbmcgYSB1bmlxdWUgc2V0IG9mIGZlYXR1cmVzIGFuZCBvcHRpb25zLgorCWtidWlsZCBwcm92aWRlIGJhc2ljIHN1cHBvcnQgdG8gY2hlY2sgZm9yIHZhbGlkIG9wdGlvbnMgZm9yICQoQ0MpLgorCSQoQ0MpIGlzIHVzZWFsbHkgdGhlIGdjYyBjb21waWxlciwgYnV0IG90aGVyIGFsdGVybmF0aXZlcyBhcmUKKwlhdmFpbGFibGUuCisKKyAgICBjYy1vcHRpb24KKwljYy1vcHRpb24gaXMgdXNlZCB0byBjaGVjayBpZiAkKENDKSBzdXBwb3J0IGEgZ2l2ZW4gb3B0aW9uLCBhbmQgbm90CisJc3VwcG9ydGVkIHRvIHVzZSBhbiBvcHRpb25hbCBzZWNvbmQgb3B0aW9uLgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9NYWtlZmlsZQorCQljZmxhZ3MteSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1wZW50aXVtLW1teCwtbWFyY2g9aTU4NikKKworCUluIHRoZSBhYm92ZSBleGFtcGxlIGNmbGFncy15IHdpbGwgYmUgYXNzaWduZWQgdGhlIG9wdGlvbgorCS1tYXJjaD1wZW50aXVtLW1teCBpZiBzdXBwb3J0ZWQgYnkgJChDQyksIG90aGVyd2lzZSAtbWFyY2gtaTU4Ni4KKwlUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGNjLW9wdGlvbiBpcyBvcHRpb25hbCwgYW5kIGlmIG9taXR0ZWQKKwljZmxhZ3MteSB3aWxsIGJlIGFzc2lnbmVkIG5vIHZhbHVlIGlmIGZpcnN0IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgorCisgICBjYy1vcHRpb24teW4KKyAgIAljYy1vcHRpb24teW4gaXMgdXNlZCB0byBjaGVjayBpZiBnY2Mgc3VwcG9ydHMgYSBnaXZlbiBvcHRpb24KKwlhbmQgcmV0dXJuICd5JyBpZiBzdXBwb3J0ZWQsIG90aGVyd2lzZSAnbicuCisKKwlFeGFtcGxlOgorCQkjYXJjaC9wcGMvTWFrZWZpbGUKKwkJYmlhcmNoIDo9ICQoY2FsbCBjYy1vcHRpb24teW4sIC1tMzIpCisJCWFmbGFncy0kKGJpYXJjaCkgKz0gLWEzMgorCQljZmxhZ3MtJChiaWFyY2gpICs9IC1tMzIKKwkKKwlJbiB0aGUgYWJvdmUgZXhhbXBsZSAkKGJpYXJjaCkgaXMgc2V0IHRvIHkgaWYgJChDQykgc3VwcG9ydHMgdGhlIC1tMzIKKwlvcHRpb24uIFdoZW4gJChiaWFyY2gpIGVxdWFscyB0byB5IHRoZSBleHBhbmRlZCB2YXJpYWJsZXMgJChhZmxhZ3MteSkKKwlhbmQgJChjZmxhZ3MteSkgd2lsbCBiZSBhc3NpZ25lZCB0aGUgdmFsdWVzIC1hMzIgYW5kIC1tMzIuCisKKyAgICBjYy1vcHRpb24tYWxpZ24KKwlnY2MgdmVyc2lvbiA+PSAzLjAgc2hpZnRlZCB0eXBlIG9mIG9wdGlvbnMgdXNlZCB0byBzcGVpZnkKKwlhbGlnbm1lbnQgb2YgZnVuY3Rpb25zLCBsb29wcyBldGMuICQoY2Mtb3B0aW9uLWFsaWduKSB3aHJuIHVzZWQKKwlhcyBwcmVmaXggdG8gdGhlIGFsaWduIG9wdGlvbnMgd2lsbCBzZWxlY3QgdGhlIHJpZ2h0IHByZWZpeDoKKwlnY2MgPCAzLjAwCisJCWNjLW9wdGlvbi1hbGlnbiA9IC1tYWxpZ24KKwlnY2MgPj0gMy4wMAorCQljYy1vcHRpb24tYWxpZ24gPSAtZmFsaWduCisJCisJRXhhbXBsZToKKwkJQ0ZMQUdTICs9ICQoY2Mtb3B0aW9uLWFsaWduKS1mdW5jdGlvbnM9NAorCisJSW4gdGhlIGFib3ZlIGV4YW1wbGUgdGhlIG9wdGlvbiAtZmFsaWduLWZ1bmN0aW9ucz00IGlzIHVzZWQgZm9yCisJZ2NjID49IDMuMDAuIEZvciBnY2MgPCAzLjAwIC1tYWxpZ24tZnVuY3Rpb25zPTQgaXMgdXNlZC4KKwkKKyAgICBjYy12ZXJzaW9uCisJY2MtdmVyc2lvbiByZXR1cm4gYSBudW1lcmljYWwgdmVyc2lvbiBvZiB0aGUgJChDQykgY29tcGlsZXIgdmVyc2lvbi4KKwlUaGUgZm9ybWF0IGlzIDxtYWpvcj48bWlub3I+IHdoZXJlIGJvdGggYXJlIHR3byBkaWdpdHMuIFNvIGZvciBleGFtcGxlCisJZ2NjIDMuNDEgd291bGQgcmV0dXJuIDAzNDEuCisJY2MtdmVyc2lvbiBpcyB1c2VmdWwgd2hlbiBhIHNwZWNpZmljICQoQ0MpIHZlcnNpb24gaXMgZmF1bHR5IGluIG9uZQorCWFyZWEsIGZvciBleGFtcGxlIHRoZSAtbXJlZ3Bhcm09MyB3ZXJlIGJyb2tlbiBpbiBzb21lIGdjYyB2ZXJzaW9uCisJZXZlbiB0aG91Z2ggdGhlIG9wdGlvbiB3YXMgYWNjZXB0ZWQgYnkgZ2NjLgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9NYWtlZmlsZQorCQlHQ0NfVkVSU0lPTiA6PSAkKGNhbGwgY2MtdmVyc2lvbikKKwkJY2ZsYWdzLXkgKz0gJChzaGVsbCBcCisJCWlmIFsgJChHQ0NfVkVSU0lPTikgLWdlIDAzMDAgXSA7IHRoZW4gZWNobyAiLW1yZWdwYXJtPTMiOyBmaSA7KQorCisJSW4gdGhlIGFib3ZlIGV4YW1wbGUgLW1yZWdwYXJtPTMgaXMgb25seSB1c2VkIGZvciBnY2MgdmVyc2lvbiBncmVhdGVyCisJdGhhbiBvciBlcXVhbCB0byBnY2MgMy4wLgorCQorCis9PT0gNyBLYnVpbGQgVmFyaWFibGVzCisKK1RoZSB0b3AgTWFrZWZpbGUgZXhwb3J0cyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKworICAgIFZFUlNJT04sIFBBVENITEVWRUwsIFNVQkxFVkVMLCBFWFRSQVZFUlNJT04KKworCVRoZXNlIHZhcmlhYmxlcyBkZWZpbmUgdGhlIGN1cnJlbnQga2VybmVsIHZlcnNpb24uICBBIGZldyBhcmNoCisJTWFrZWZpbGVzIGFjdHVhbGx5IHVzZSB0aGVzZSB2YWx1ZXMgZGlyZWN0bHk7IHRoZXkgc2hvdWxkIHVzZQorCSQoS0VSTkVMUkVMRUFTRSkgaW5zdGVhZC4KKworCSQoVkVSU0lPTiksICQoUEFUQ0hMRVZFTCksIGFuZCAkKFNVQkxFVkVMKSBkZWZpbmUgdGhlIGJhc2ljCisJdGhyZWUtcGFydCB2ZXJzaW9uIG51bWJlciwgc3VjaCBhcyAiMiIsICI0IiwgYW5kICIwIi4gIFRoZXNlIHRocmVlCisJdmFsdWVzIGFyZSBhbHdheXMgbnVtZXJpYy4KKworCSQoRVhUUkFWRVJTSU9OKSBkZWZpbmVzIGFuIGV2ZW4gdGluaWVyIHN1YmxldmVsIGZvciBwcmUtcGF0Y2hlcworCW9yIGFkZGl0aW9uYWwgcGF0Y2hlcy4JSXQgaXMgdXN1YWxseSBzb21lIG5vbi1udW1lcmljIHN0cmluZworCXN1Y2ggYXMgIi1wcmU0IiwgYW5kIGlzIG9mdGVuIGJsYW5rLgorCisgICAgS0VSTkVMUkVMRUFTRQorCisJJChLRVJORUxSRUxFQVNFKSBpcyBhIHNpbmdsZSBzdHJpbmcgc3VjaCBhcyAiMi40LjAtcHJlNCIsIHN1aXRhYmxlCisJZm9yIGNvbnN0cnVjdGluZyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG5hbWVzIG9yIHNob3dpbmcgaW4KKwl2ZXJzaW9uIHN0cmluZ3MuICBTb21lIGFyY2ggTWFrZWZpbGVzIHVzZSBpdCBmb3IgdGhpcyBwdXJwb3NlLgorCisgICAgQVJDSAorCisJVGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBzdWNoIGFzICJpMzg2IiwKKwkiYXJtIiwgb3IgInNwYXJjIi4gU29tZSBrYnVpbGQgTWFrZWZpbGVzIHRlc3QgJChBUkNIKSB0bworCWRldGVybWluZSB3aGljaCBmaWxlcyB0byBjb21waWxlLgorCisJQnkgZGVmYXVsdCwgdGhlIHRvcCBNYWtlZmlsZSBzZXRzICQoQVJDSCkgdG8gYmUgdGhlIHNhbWUgYXMgdGhlCisJaG9zdCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiAgRm9yIGEgY3Jvc3MgYnVpbGQsIGEgdXNlciBtYXkKKwlvdmVycmlkZSB0aGUgdmFsdWUgb2YgJChBUkNIKSBvbiB0aGUgY29tbWFuZCBsaW5lOgorCisJICAgIG1ha2UgQVJDSD1tNjhrIC4uLgorCisKKyAgICBJTlNUQUxMX1BBVEgKKworCVRoaXMgdmFyaWFibGUgZGVmaW5lcyBhIHBsYWNlIGZvciB0aGUgYXJjaCBNYWtlZmlsZXMgdG8gaW5zdGFsbAorCXRoZSByZXNpZGVudCBrZXJuZWwgaW1hZ2UgYW5kIFN5c3RlbS5tYXAgZmlsZS4KKwlVc2UgdGhpcyBmb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGluc3RhbGwgdGFyZ2V0cy4KKworICAgIElOU1RBTExfTU9EX1BBVEgsIE1PRExJQgorCisJJChJTlNUQUxMX01PRF9QQVRIKSBzcGVjaWZpZXMgYSBwcmVmaXggdG8gJChNT0RMSUIpIGZvciBtb2R1bGUKKwlpbnN0YWxsYXRpb24uICBUaGlzIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBNYWtlZmlsZSBidXQKKwltYXkgYmUgcGFzc2VkIGluIGJ5IHRoZSB1c2VyIGlmIGRlc2lyZWQuCisKKwkkKE1PRExJQikgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uCisJVGhlIHRvcCBNYWtlZmlsZSBkZWZpbmVzICQoTU9ETElCKSB0bworCSQoSU5TVEFMTF9NT0RfUEFUSCkvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS4gIFRoZSB1c2VyIG1heQorCW92ZXJyaWRlIHRoaXMgdmFsdWUgb24gdGhlIGNvbW1hbmQgbGluZSBpZiBkZXNpcmVkLgorCis9PT0gOCBNYWtlZmlsZSBsYW5ndWFnZQorCitUaGUga2VybmVsIE1ha2VmaWxlcyBhcmUgZGVzaWduZWQgdG8gcnVuIHdpdGggR05VIE1ha2UuICBUaGUgTWFrZWZpbGVzCit1c2Ugb25seSB0aGUgZG9jdW1lbnRlZCBmZWF0dXJlcyBvZiBHTlUgTWFrZSwgYnV0IHRoZXkgZG8gdXNlIG1hbnkKK0dOVSBleHRlbnNpb25zLgorCitHTlUgTWFrZSBzdXBwb3J0cyBlbGVtZW50YXJ5IGxpc3QtcHJvY2Vzc2luZyBmdW5jdGlvbnMuICBUaGUga2VybmVsCitNYWtlZmlsZXMgdXNlIGEgbm92ZWwgc3R5bGUgb2YgbGlzdCBidWlsZGluZyBhbmQgbWFuaXB1bGF0aW9uIHdpdGggZmV3CisiaWYiIHN0YXRlbWVudHMuCisKK0dOVSBNYWtlIGhhcyB0d28gYXNzaWdubWVudCBvcGVyYXRvcnMsICI6PSIgYW5kICI9Ii4gICI6PSIgcGVyZm9ybXMKK2ltbWVkaWF0ZSBldmFsdWF0aW9uIG9mIHRoZSByaWdodC1oYW5kIHNpZGUgYW5kIHN0b3JlcyBhbiBhY3R1YWwgc3RyaW5nCitpbnRvIHRoZSBsZWZ0LWhhbmQgc2lkZS4gICI9IiBpcyBsaWtlIGEgZm9ybXVsYSBkZWZpbml0aW9uOyBpdCBzdG9yZXMgdGhlCityaWdodC1oYW5kIHNpZGUgaW4gYW4gdW5ldmFsdWF0ZWQgZm9ybSBhbmQgdGhlbiBldmFsdWF0ZXMgdGhpcyBmb3JtIGVhY2gKK3RpbWUgdGhlIGxlZnQtaGFuZCBzaWRlIGlzIHVzZWQuCisKK1RoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlICI9IiBpcyBhcHByb3ByaWF0ZS4gIFVzdWFsbHksIHRob3VnaCwgIjo9IgoraXMgdGhlIHJpZ2h0IGNob2ljZS4KKworPT09IDkgQ3JlZGl0cworCitPcmlnaW5hbCB2ZXJzaW9uIG1hZGUgYnkgTWljaGFlbCBFbGl6YWJldGggQ2hhc3RhaW4sIDxtYWlsdG86bWVjQHNob3V0Lm5ldD4KK1VwZGF0ZXMgYnkgS2FpIEdlcm1hc2NoZXdza2kgPGthaUB0cDEucnVoci11bmktYm9jaHVtLmRlPgorVXBkYXRlcyBieSBTYW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+CisKKz09PSAxMCBUT0RPCisKKy0gRGVzY3JpYmUgaG93IGtidWlsZCBzdXBwb3J0IHNoaXBwZWQgZmlsZXMgd2l0aCBfc2hpcHBlZC4KKy0gR2VuZXJhdGluZyBvZmZzZXQgaGVhZGVyIGZpbGVzLgorLSBBZGQgbW9yZSB2YXJpYWJsZXMgdG8gc2VjdGlvbiA3PworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWNhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dApAQCAtMCwwICsxLDQxOSBAQAorCitJbiB0aGlzIGRvY3VtZW50IHlvdSB3aWxsIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQ6CistIGhvdyB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzCistIGhvdyB0byBtYWtlIHlvdXIgbW9kdWxlIHVzZSBrYnVpbGQgaW5mcmFzdHJ1Y3R1cmUKKy0gaG93IGtidWlsZCB3aWxsIGluc3RhbGwgYSBrZXJuZWwKKy0gaG93IHRvIGluc3RhbGwgbW9kdWxlcyBpbiBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbgorCis9PT0gVGFibGUgb2YgQ29udGVudHMKKworCT09PSAxIEludHJvZHVjdGlvbgorCT09PSAyIEhvdyB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzCisJICAgLS0tIDIuMSBCdWlsZGluZyBleHRlcm5hbCBtb2R1bGVzCisJICAgLS0tIDIuMiBBdmFpbGFibGUgdGFyZ2V0cworCSAgIC0tLSAyLjMgQXZhaWxhYmxlIG9wdGlvbnMKKwkgICAtLS0gMi40IFByZXBhcmluZyB0aGUga2VybmVsIHRyZWUgZm9yIG1vZHVsZSBidWlsZAorCT09PSAzLiBFeGFtcGxlIGNvbW1hbmRzCisJPT09IDQuIENyZWF0aW5nIGEga2J1aWxkIGZpbGUgZm9yIGFuIGV4dGVybmFsIG1vZHVsZQorCT09PSA1LiBJbmNsdWRlIGZpbGVzCisJICAgLS0tIDUuMSBIb3cgdG8gaW5jbHVkZSBmaWxlcyBmcm9tIHRoZSBrZXJuZWwgaW5jbHVkZSBkaXIKKwkgICAtLS0gNS4yIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgYW4gaW5jbHVkZS8gZGlyCisJPT09IDYuIE1vZHVsZSBpbnN0YWxsYXRpb24KKwkgICAtLS0gNi4xIElOU1RBTExfTU9EX1BBVEgKKwkgICAtLS0gNi4yIElOU1RBTExfTU9EX0RJUgorCT09PSA3LiBNb2R1bGUgdmVyc2lvbmluZworCT09PSA4LiBUaXBzICYgVHJpY2tzCisJICAgLS0tIDguMSBUZXN0aW5nIGZvciBDT05GSUdfRk9PX0JBUgorCisKKworPT09IDEuIEludHJvZHVjdGlvbgorCitrYnVpbGQgaW5jbHVkZXMgZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGRpbmcgbW9kdWxlcyBib3RoCit3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBhbmQgb3V0c2lkZSB0aGUga2VybmVsIHNvdXJjZSB0cmVlLgorVGhlIGxhdHRlciBpcyB1c3VhbGx5IHJlZmVycmVkIHRvIGFzIGV4dGVybmFsIG1vZHVsZXMgYW5kIGlzIHVzZWQKK2JvdGggZHVyaW5nIGRldmVsb3BtZW50IGFuZCBmb3IgbW9kdWxlcyB0aGF0IGFyZSBub3QgcGxhbm5lZCB0byBiZQoraW5jbHVkZWQgaW4gdGhlIGtlcm5lbCB0cmVlLgorCitXaGF0IGlzIGNvdmVyZWQgd2l0aGluIHRoaXMgZmlsZSBpcyBtYWlubHkgaW5mb3JtYXRpb24gdG8gYXV0aG9ycworb2YgbW9kdWxlcy4gVGhlIGF1dGhvciBvZiBhbiBleHRlcm5hbCBtb2R1bGVzIHNob3VsZCBzdXBwbHkKK2EgbWFrZWZpbGUgdGhhdCBoaWRlcyBtb3N0IG9mIHRoZSBjb21wbGV4aXR5IHNvIG9uZSBvbmx5IGhhcyB0byB0eXBlCisnbWFrZScgdG8gYnVsZCB0aGUgbW9kdWxlLiBBIGNvbXBsZXRlIGV4YW1wbGUgd2lsbCBiZSBwcmVzZW50IGluCitjaGFwdGVyIKQuIENyZWF0aW5nIGEga2J1aWxkIGZpbGUgZm9yIGFuIGV4dGVybmFsIG1vZHVsZSIuCisKKworPT09IDIuIEhvdyB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzCisKK2tidWlsZCBvZmZlcnMgZnVuY3Rpb25hbGl0eSB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzLCB3aXRoIHRoZQorcHJlcmVxdWlzaXRlIHRoYXQgdGhlcmUgaXMgYSBwcmUtYnVpbHQga2VybmVsIGF2YWlsYWJsZSB3aXRoIGZ1bGwgc291cmNlLgorQSBzdWJzZXQgb2YgdGhlIHRhcmdldHMgYXZhaWxhYmxlIHdoZW4gYnVpbGRpbmcgdGhlIGtlcm5lbCBpcyBhdmFpbGFibGUKK3doZW4gYnVpbGRpbmcgYW4gZXh0ZXJuYWwgbW9kdWxlLgorCistLS0gMi4xIEJ1aWxkaW5nIGV4dGVybmFsIG1vZHVsZXMKKworCVVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYnVpbGQgYW4gZXh0ZXJuYWwgbW9kdWxlOgorCisJCW1ha2UgLUMgPHBhdGgtdG8ta2VybmVsPiBNPWBwd2RgCisKKwlGb3IgdGhlIHJ1bm5pbmcga2VybmVsIHVzZToKKwkJbWFrZSAtQyAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZCBNPWBwd2RgCisKKwlGb3IgdGhlIGFib3ZlIGNvbW1hbmQgdG8gc3VjY2VlZCB0aGUga2VybmVsIG11c3QgaGF2ZSBiZWVuIGJ1aWx0IHdpdGgKKwltb2R1bGVzIGVuYWJsZWQuCisKKwlUbyBpbnN0YWxsIHRoZSBtb2R1bGVzIHRoYXQgd2VyZSBqdXN0IGJ1aWx0OgorCisJCW1ha2UgLUMgPHBhdGgtdG8ta2VybmVsPiBNPWBwd2RgIG1vZHVsZXNfaW5zdGFsbAorCisJTW9yZSBjb21wbGV4IGV4YW1wbGVzIGxhdGVyLCB0aGUgYWJvdmUgc2hvdWxkIGdldCB5b3UgZ29pbmcuCisKKy0tLSAyLjIgQXZhaWxhYmxlIHRhcmdldHMKKworCSRLRElSIHJlZmVycyB0byBwYXRoIHRvIGtlcm5lbCBzb3VyY2UgdG9wLWxldmVsIGRpcmVjdG9yeQorCisJbWFrZSAtQyAkS0RJUiBNPWBwd2RgCisJCVdpbGwgYnVpbGQgdGhlIG1vZHVsZShzKSBsb2NhdGVkIGluIGN1cnJlbnQgZGlyZWN0b3J5LgorCQlBbGwgb3V0cHV0IGZpbGVzIHdpbGwgYmUgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKwkJYXMgdGhlIG1vZHVsZSBzb3VyY2UuCisJCU5vIGF0dGVtcHRzIGFyZSBtYWRlIHRvIHVwZGF0ZSB0aGUga2VybmVsIHNvdXJjZSwgYW5kIGl0IGlzCisJCWEgcHJlY29uZGl0aW9uIHRoYXQgYSBzdWNjZXNzZnVsIG1ha2UgaGFzIGJlZW4gZXhlY3V0ZWQKKwkJZm9yIHRoZSBrZXJuZWwuCisKKwltYWtlIC1DICRLRElSIE09YHB3ZGAgbW9kdWxlcworCQlUaGUgbW9kdWxlcyB0YXJnZXQgaXMgaW1wbGllZCB3aGVuIG5vIHRhcmdldCBpcyBnaXZlbi4KKwkJU2FtZSBmdW5jdGlvbmFsaXR5IGFzIGlmIG5vIHRhcmdldCB3YXMgc3BlY2lmaWVkLgorCQlTZWUgZGVzY3JpcHRpb24gYWJvdmUuCisKKwltYWtlIC1DICRLRElSIE09JFBXRCBtb2R1bGVzX2luc3RhbGwKKwkJSW5zdGFsbCB0aGUgZXh0ZXJuYWwgbW9kdWxlKHMpLgorCQlJbnN0YWxsYXRpb24gZGVmYXVsdCBpcyBpbiAvbGliL21vZHVsZXMvPGtlcm5lbC12ZXJzaW9uPi9leHRyYSwKKwkJYnV0IG1heSBiZSBwcmVmaXhlZCB3aXRoIElOU1RBTExfTU9EX1BBVEggLSBzZWUgc2VwYXJhdGUgY2hhdGVyLgorCisJbWFrZSAtQyAkS0RJUiBNPSRQV0QgY2xlYW4KKwkJUmVtb3ZlIGFsbCBnZW5lcmF0ZWQgZmlsZXMgZm9yIHRoZSBtb2R1bGUgLSB0aGUga2VybmVsCisJCXNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IG1vZGRpZmllZC4KKworCW1ha2UgLUMgJEtESVIgTT1gcHdkYCBoZWxwCisJCWhlbHAgd2lsbCBsaXN0IHRoZSBhdmFpbGFibGUgdGFyZ2V0IHdoZW4gYnVpbGRpbmcgZXh0ZXJuYWwKKwkJbW9kdWxlcy4KKworLS0tIDIuMyBBdmFpbGFibGUgb3B0aW9uczoKKworCSRLRElSIHJlZmVyIHRvIHBhdGggdG8ga2VybmVsIHNyYworCisJbWFrZSAtQyAkS0RJUgorCQlVc2VkIHRvIHNwZWNpZnkgd2hlcmUgdG8gZmluZCB0aGUga2VybmVsIHNvdXJjZS4KKwkJJyRLRElSJyByZXByZXNlbnQgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUga2VybmVsIHNvdXJjZSBpcy4KKwkJTWFrZSB3aWxsIGFjdHVhbGx5IGNoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkKKwkJd2hlbiBleGVjdXRlZCBidXQgY2hhbmdlIGJhY2sgd2hlbiBmaW5pc2hlZC4KKworCW1ha2UgLUMgJEtESVIgTT1gcHdkYAorCQlNPSBpcyB1c2VkIHRvIHRlbGwga2J1aWxkIHRoYXQgYW4gZXh0ZXJuYWwgbW9kdWxlIGlzCisJCWJlaW5nIGJ1aWx0LgorCQlUaGUgb3B0aW9uIGdpdmVuIHRvIE09IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGV4dGVybmFsCisJCW1vZHVsZSAoa2J1aWxkIGZpbGUpIGlzIGxvY2F0ZWQuCisJCVdoZW4gYW4gZXh0ZXJuYWwgbW9kdWxlIGlzIGJlaW5nIGJ1aWx0IG9ubHkgYSBzdWJzZXQgb2YgdGhlCisJCXVzdWFsIHRhcmdldHMgYXJlIGF2YWlsYWJsZS4KKworCW1ha2UgLUMgJEtESVIgU1VCRElSUz1gcHdkYAorCQlTYW1lIGFzIE09LiBUaGUgU1VCRElSUz0gc3ludGF4IGlzIGtlcHQgZm9yIGJhY2t3YXJkcworCQljb21wYXRpYmlsaXR5LgorCistLS0gMi40IFByZXBhcmluZyB0aGUga2VybmVsIHRyZWUgZm9yIG1vZHVsZSBidWlsZAorCisJVG8gbWFrZSBzdXJlIHRoZSBrZXJuZWwgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvCisJYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcyB0aGUgdGFyZ2V0ICdtb2R1bGVzX3ByZXBhcmUnIG11c3QgYmUgdXNlZC4KKwknbW9kdWxlX3ByZXBhcmUnIHNvbGVseSBleGlzdHMgYXMgYSBzaW1wbGUgd2F5IHRvIHByZXBhcmUKKwlhIGtlcm5lbCBmb3IgYnVpbGRpbmcgZXh0ZXJuYWwgbW9kdWxlcy4KKwlOb3RlOiBtb2R1bGVzX3ByZXBhcmUgd2lsbCBub3QgYnVpbGQgTW9kdWxlLnN5bXZlcnMgZXZlbiBpZgorCSAgICAgIENPTkZJR19NT0RVTEVWRVJTSU9OSU5HIGlzIHNldC4KKwkgICAgICBUaGVyZWZvcmUgYSBmdWxsIGtlcm5lbCBidWlsZCBuZWVkcyB0byBiZSBleGVjdXRlZCB0byBtYWtlCisJICAgICAgbW9kdWxlIHZlcnNpb25pbmcgd29yay4KKworCis9PT0gMy4gRXhhbXBsZSBjb21tYW5kcworCitUaGlzIGV4YW1wbGUgc2hvd3MgdGhlIGFjdHVhbCBjb21tYW5kcyB0byBiZSBleGVjdXRlZCB3aGVuIGJ1aWxkaW5nCithbiBleHRlcm5hbCBtb2R1bGUgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyBrZXJuZWwuCitJbiB0aGUgZXhhbXBsZSBiZWxvdyB0aGUgZGlzdHJpYnV0aW9uIGlzIHN1cHBvc2VkIHRvIHVzZSB0aGUKK2ZhY2lsaXR5IHRvIGxvY2F0ZSBvdXRwdXQgZmlsZXMgZm9yIGEga2VybmVsIGNvbXBpbGUgaW4gYSBkaWZmZXJlbnQKK2RpcmVjdG9yeSB0aGFuIHRoZSBrZXJuZWwgc291cmNlIC0gYnV0IHRoZSBleGFtcGxlcyB3aWxsIGFsc28gd29yaword2hlbiB0aGUgc291cmNlIGFuZCB0aGUgb3V0cHV0IGZpbGVzIGFyZSBtaXhlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisKKyMgS2VybmVsIHNvdXJjZQorL2xpYi9tb2R1bGVzLzxrZXJuZWwtdmVyc2lvbj4vc291cmNlIC0+IC91c3Ivc3JjL2xpbnV4LTx2ZXJzaW9uPgorCisjIE91dHB1dCBmcm9tIGtlcm5lbCBjb21waWxlCisvbGliL21vZHVsZXMvPGtlcm5lbC12ZXJzaW9uPi9idWlsZCAtPiAvdXNyL3NyYy9saW51eC08dmVyc2lvbj4tdXAKKworQ2hhbmdlIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGtidWlsZCBmaWxlIGlzIGxvY2F0ZWQgYW5kIGV4ZWN1dGUKK3RoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gYnVpbGQgdGhlIG1vZHVsZToKKworCWNkIC9ob21lL3VzZXIvc3JjL21vZHVsZQorCW1ha2UgLUMgL3Vzci9zcmMvYHVuYW1lIC1yYC9zb3VyY2UgICAgICAgICAgICBcCisJICAgICAgICBPPS9saWIvbW9kdWxlcy9gdW5hbWUtcmAvYnVpbGQgICAgICAgIFwKKwkgICAgICAgIE09YHB3ZGAKKworVGhlbiB0byBpbnN0YWxsIHRoZSBtb2R1bGUgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworCW1ha2UgLUMgL3Vzci9zcmMvYHVuYW1lIC1yYC9zb3VyY2UgICAgICAgICAgICBcCisJICAgICAgICBPPS9saWIvbW9kdWxlcy9gdW5hbWUtcmAvYnVpbGQgICAgICAgIFwKKwkgICAgICAgIE09YHB3ZGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQltb2R1bGVzX2luc3RhbGwKKworSWYgb25lIGxvb2tzIGNsb3NlbHkgeW91IHdpbGwgc2VlIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBjb21tYW5kcyBhcworbGlzdGVkIGJlZm9yZSAtIHdpdGggdGhlIGRpcmVjdG9yaWVzIHNwZWxsZWQgb3V0LgorCitUaGUgYWJvdmUgYXJlIHJhdGhlciBsb25nIGNvbW1hbmRzLCBhbmQgdGhlIGZvbGxvd2luZyBjaGFwdGVyCitsaXN0cyBhIGZldyB0cmlja3MgdG8gbWFrZSBpdCBhbGwgZWFzaWVyLgorCisKKz09PSA0LiBDcmVhdGluZyBhIGtidWlsZCBmaWxlIGZvciBhbiBleHRlcm5hbCBtb2R1bGUKKwora2J1aWxkIGlzIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHRoZSBrZXJuZWwsIGFuZCBleHRlcm5hbCBtb2R1bGVzCittdXN0IHVzZSBrYnVpbGQgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggY2hhbmdlcyBpbiB0aGUgYnVpbGQgc3lzdGVtCithbmQgdG8gcGljayB1cCB0aGUgcmlnaHQgZmxhZ3MgdG8gZ2NjIGV0Yy4KKworVGhlIGtidWlsZCBmaWxlIHVzZWQgYXMgaW5wdXQgc2hhbGwgZm9sbG93IHRoZSBzeW50YXggZGVzY3JpYmVkCitpbiBEb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0LiBUaGlzIGNoYXB0ZXIgd2lsbCBpbnRyb2R1Y2UgYSBmZXcKK21vcmUgdHJpY2tzIHRvIGJlIHVzZWQgd2hlbiBkZWFsaW5nIHdpdGggZXh0ZXJuYWwgbW9kdWxlcy4KKworSW4gdGhlIGZvbGxvd2luZyBhIE1ha2VmaWxlIHdpbGwgYmUgY3JlYXRlZCBmb3IgYSBtb2R1bGUgd2l0aCB0aGUKK2ZvbGxvd2luZyBmaWxlczoKKwk4MTIzX2lmLmMKKwk4MTIzX2lmLmgKKwk4MTIzX3BjaS5jCisJODEyM19iaW4ub19zaGlwcGVkCTw9IEJpbmFyeSBibG9iCisKKy0tLSA0LjEgU2hhcmVkIE1ha2VmaWxlIGZvciBtb2R1bGUgYW5kIGtlcm5lbAorCisJQW4gZXh0ZXJuYWwgbW9kdWxlIGFsd2F5cyBpbmNsdWRlcyBhIHdyYXBwZXIgTWFrZWZpbGUgc3VwcG9ydGluZworCWJ1aWxkaW5nIHRoZSBtb2R1bGUgdXNpbmcgJ21ha2UnIHdpdGggbm8gYXJndW1lbnRzLgorCVRoZSBNYWtlZmlsZSBwcm92aWRlZCB3aWxsIG1vc3QgbGlrZWx5IGluY2x1ZGUgYWRkaXRpb25hbAorCWZ1bmN0aW9uYWxpdHkgc3VjaCBhcyB0ZXN0IHRhcmdldHMgZXRjLiBhbmQgdGhpcyBwYXJ0IHNoYWxsCisJYmUgZmlsdGVyZWQgYXdheSBmcm9tIGtidWlsZCBzaW5jZSBpdCBtYXkgaW1wYWN0IGtidWlsZCBpZgorCW5hbWUgY2xhc2hlcyBvY2N1cnMuCisKKwlFeGFtcGxlIDE6CisJCS0tPiBmaWxlbmFtZTogTWFrZWZpbGUKKwkJaWZuZXEgKCQoS0VSTkVMUkVMRUFTRSksKQorCQkjIGtidWlsZCBwYXJ0IG9mIG1ha2VmaWxlCisJCW9iai1tICA6PSA4MTIzLm8KKwkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KKworCQllbHNlCisJCSMgTm9ybWFsIE1ha2VmaWxlCisKKwkJS0VSTkVMRElSIDo9IC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCisJCWFsbDo6CisJCQkkKE1BS0UpIC1DICRLRVJORUxESVIgTT1gcHdkYCAkQAorCisJCSMgTW9kdWxlIHNwZWNpZmljIHRhcmdldHMKKwkJZ2VuYmluOgorCQkJZWNobyAiWCIgPiA4MTIzX2Jpbmkub19zaGlwcGVkCisKKwkJZW5kaWYKKworCUluIGV4YW1wbGUgMSB0aGUgY2hlY2sgZm9yIEtFUk5FTFJFTEVBU0UgaXMgdXNlZCB0byBzZXBhcmF0ZQorCXRoZSB0d28gcGFydHMgb2YgdGhlIE1ha2VmaWxlLiBrYnVpbGQgd2lsbCBvbmx5IHNlZSB0aGUgdHdvCisJYXNzaWdubWVudHMgd2hlcmVhcyBtYWtlIHdpbGwgc2VlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSB0d28KKwlrYnVpbGQgYXNzaWdubWVudHMuCisKKwlJbiByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbCwga2J1aWxkIHdpbGwgbG9vayBmb3IgYSBmaWxlIG5hbWVkCisJS2J1aWxkIGFuZCBhcyBzZWNvbmQgb3B0aW9uIGxvb2sgZm9yIGEgZmlsZSBuYW1lZCBNYWtlZmlsZS4KKwlVdGlsaXNpbmcgdGhlIEtidWlsZCBmaWxlIG1ha2VzIHVzIHNwbGl0IHVwIHRoZSBNYWtlZmlsZSBpbiBleGFtcGxlIDEKKwlpbnRvIHR3byBmaWxlcyBhcyBzaG93biBpbiBleGFtcGxlIDI6CisKKwlFeGFtcGxlIDI6CisJCS0tPiBmaWxlbmFtZTogS2J1aWxkCisJCW9iai1tICA6PSA4MTIzLm8KKwkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KKworCQktLT4gZmlsZW5hbWU6IE1ha2VmaWxlCisJCUtFUk5FTERJUiA6PSAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZAorCQlhbGw6OgorCQkJJChNQUtFKSAtQyAkS0VSTkVMRElSIE09YHB3ZGAgJEAKKworCQkjIE1vZHVsZSBzcGVjaWZpYyB0YXJnZXRzCisJCWdlbmJpbjoKKwkJCWVjaG8gIlgiID4gODEyM19iaW5fc2hpcHBlZAorCisKKwlJbiBleGFtcGxlIDIgd2UgYXJlIGRvd24gdG8gdHdvIGZhaXJseSBzaW1wbGUgZmlsZXMgYW5kIGZvciBzaW1wbGUKKwlmaWxlcyBhcyB1c2VkIGluIHRoaXMgZXhhbXBsZSB0aGUgc3BsaXQgaXMgcXVlc3Rpb25hYmxlLiBCdXQgc29tZQorCWV4dGVybmFsIG1vZHVsZXMgdXNlIE1ha2VmaWxlcyBvZiBzZXZlcmFsIGh1bmRyZWQgbGluZXMgYW5kIGhlcmUgaXQKKwlyZWFsbHkgcGF5cyBvZmYgdG8gc2VwYXJhdGUgdGhlIGtidWlsZCBwYXJ0IGZyb20gdGhlIHJlc3QuCisJRXhhbXBsZSAzIHNob3dzIGEgYmFja3dhcmQgY29tcGF0aWJsZSB2ZXJzaW9uLgorCisJRXhhbXBsZSAzOgorCQktLT4gZmlsZW5hbWU6IEtidWlsZAorCQlvYmotbSAgOj0gODEyMy5vCisJCTgxMjMteSA6PSA4MTIzX2lmLm8gODEyM19wY2kubyA4MTIzX2Jpbi5vCisKKwkJLS0+IGZpbGVuYW1lOiBNYWtlZmlsZQorCQlpZm5lcSAoJChLRVJORUxSRUxFQVNFKSwpCisJCWluY2x1ZGUgS2J1aWxkCisJCWVsc2UKKwkJIyBOb3JtYWwgTWFrZWZpbGUKKworCQlLRVJORUxESVIgOj0gL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvYnVpbGQKKwkJYWxsOjoKKwkJCSQoTUFLRSkgLUMgJEtFUk5FTERJUiBNPWBwd2RgICRACisKKwkJIyBNb2R1bGUgc3BlY2lmaWMgdGFyZ2V0cworCQlnZW5iaW46CisJCQllY2hvICJYIiA+IDgxMjNfYmluX3NoaXBwZWQKKworCQllbmRpZgorCisJCVRoZSB0cmljayBoZXJlIGlzIHRvIGluY2x1ZGUgdGhlIEtidWlsZCBmaWxlIGZyb20gTWFrZWZpbGUgc28KKwkJaWYgYW4gb2xkZXIgdmVyc2lvbiBvZiBrYnVpbGQgcGlja3MgdXAgdGhlIE1ha2VmaWxlIHRoZSBLYnVpbGQKKwkJZmlsZSB3aWxsIGJlIGluY2x1ZGVkLgorCistLS0gNC4yIEJpbmFyeSBibG9icyBpbmNsdWRlZCBpbiBhIG1vZHVsZQorCisJU29tZSBleHRlcm5hbCBtb2R1bGVzIG5lZWRzIHRvIGluY2x1ZGUgYSAubyBhcyBhIGJsb2IuIGtidWlsZAorCWhhcyBzdXBwb3J0IGZvciB0aGlzLCBidXQgcmVxdWlyZXMgdGhlIGJsb2IgZmlsZSB0byBiZSBuYW1lZAorCTxmaWxlbmFtZT5fc2hpcHBlZC4gSW4gb3VyIGV4YW1wbGUgdGhlIGJsb2IgaXMgbmFtZWQKKwk4MTIzX2Jpbi5vX3NoaXBwZWQgYW5kIHdoZW4gdGhlIGtidWlsZCBydWxlcyBraWNrIGluIHRoZSBmaWxlCisJODEyM19iaW4ubyBpcyBjcmVhdGVkIGFzIGEgc2ltcGxlIGNvcHkgb2ZmIHRoZSA4MjEzX2Jpbi5vX3NoaXBwZWQgZmlsZQorCXdpdGggdGhlIF9zaGlwcGVkIHBhcnQgc3RyaXBwZWQgb2YgdGhlIGZpbGVuYW1lLgorCVRoaXMgYWxsb3dzIHRoZSA4MTIzX2Jpbi5vIGZpbGVuYW1lIHRvIGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQgdG8KKwl0aGUgbW9kdWxlLgorCisJRXhhbXBsZSA0OgorCQlvYmotbSAgOj0gODEyMy5vCisJCTgxMjMteSA6PSA4MTIzX2lmLm8gODEyM19wY2kubyA4MTIzX2Jpbi5vCisKKwlJbiBleGFtcGxlIDQgdGhlcmUgaXMgbm8gZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgb3JkaW5hcnkgLmMvLmggZmlsZXMKKwlhbmQgdGhlIGJpbmFyeSBmaWxlLiBCdXQga2J1aWxkIHdpbGwgcGljayB1cCBkaWZmZXJlbnQgcnVsZXMgdG8gY3JlYXRlCisJdGhlIC5vIGZpbGUuCisKKworPT09IDUuIEluY2x1ZGUgZmlsZXMKKworSW5jbHVkZSBmaWxlcyBhcmUgYSBuZWNlc3NpdHkgd2hlbiBhIC5jIGZpbGUgdXNlcyBzb21ldGhpbmcgZnJvbSBhbm90aGVyIC5jCitmaWxlcyAobm90IHN0cmljdGx5IGluIHRoZSBzZW5zZSBvZiAuYyBidXQgaWYgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSBpcwordXNlZCkuIEFueSBtb2R1bGUgdGhhdCBjb25zaXN0IG9mIG1vcmUgdGhhbiBvbmUgLmMgZmlsZSB3aWxsIGhhdmUgYSAuaCBmaWxlCitmb3Igb25lIG9mIHRoZSAuYyBmaWxlcy4gCistIElmIHRoZSAuaCBmaWxlIG9ubHkgZGVzY3JpYmVzIGEgbW9kdWxlIGludGVybmFsIGludGVyZmFjZSB0aGVuIHRoZSAuaCBmaWxlCisgIHNoYWxsIGJlIHBsYWNlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIC5jIGZpbGVzLgorLSBJZiB0aGUgLmggZmlsZXMgZGVzY3JpYmUgYW4gaW50ZXJmYWNlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbAorICBsb2NhdGVkIGluIGRpZmZlcmVudCBkaXJlY3RvcmllcywgdGhlIC5oIGZpbGVzIHNoYWxsIGJlIGxvY2F0ZWQgaW4KKyAgaW5jbHVkZS9saW51eC8gb3Igb3RoZXIgaW5jbHVkZS8gZGlyZWN0b3JpZXMgYXMgYXBwcm9wcmlhdGUuCisKK09uZSBleGNlcHRpb24gZm9yIHRoaXMgcnVsZSBpcyBsYXJnZXIgc3Vic3lzdGVtcyB0aGF0IGhhdmUgdGhlaXIgb3duIGRpcmVjdG9yeQordW5kZXIgaW5jbHVkZS8gc3VjaCBhcyBpbmNsdWRlL3Njc2kuIEFub3RoZXIgZXhjZXB0aW9uIGlzIGFyY2gtc3BlY2lmaWMKKy5oIGZpbGVzIHdoaWNoIGFyZSBsb2NhdGVkIHVuZGVyIGluY2x1ZGUvYXNtLSQoQVJDSCkvKi4KKworRXh0ZXJuYWwgbW9kdWxlcyBoYXZlIGEgdGVuZGVuY3kgdG8gbG9jYXRlIGluY2x1ZGUgZmlsZXMgaW4gYSBzZXBhcmF0ZSBpbmNsdWRlLworZGlyZWN0b3J5IGFuZCB0aGVyZWZvcmUgbmVlZHMgdG8gZGVhbCB3aXRoIHRoaXMgaW4gdGhlaXIga2J1aWxkIGZpbGUuCisKKy0tLSA1LjEgSG93IHRvIGluY2x1ZGUgZmlsZXMgZnJvbSB0aGUga2VybmVsIGluY2x1ZGUgZGlyCisKKwlXaGVuIGEgbW9kdWxlIG5lZWRzIHRvIGluY2x1ZGUgYSBmaWxlIGZyb20gaW5jbHVkZS9saW51eC8gdGhlbiBvbmUKKwlqdXN0IHVzZXM6CisKKwkJI2luY2x1ZGUgPGxpbnV4L21vZHVsZXMuaD4KKworCWtidWlsZCB3aWxsIG1ha2Ugc3VyZSB0byBhZGQgb3B0aW9ucyB0byBnY2Mgc28gdGhlIHJlbGV2YW50CisJZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkLgorCUxpa2V3aXNlIGZvciAuaCBmaWxlcyBwbGFjZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSAuYyBmaWxlLgorCisJCSNpbmNsdWRlICI4MTIzX2lmLmgiCisKKwl3aWxsIGRvIHRoZSBqb2IuCisKKy0tLSA1LjIgRXh0ZXJuYWwgbW9kdWxlcyB1c2luZyBhbiBpbmNsdWRlLyBkaXIKKworCUV4dGVybmFsIG1vZHVsZXMgb2Z0ZW4gbG9jYXRlIHRoZWlyIC5oIGZpbGVzIGluIGEgc2VwYXJhdGUgaW5jbHVkZS8KKwlkaXJlY3RvcnkgYWx0aG91Z2ggdGhpcyBpcyBub3QgdXN1YWwga2VybmVsIHN0eWxlLiBXaGVuIGFuIGV4dGVybmFsCisJbW9kdWxlIHVzZXMgYW4gaW5jbHVkZS8gZGlyIHRoZW4ga2J1aWxkIG5lZWRzIHRvIGJlIHRvbGQgc28uCisJVGhlIHRyaWNrIGhlcmUgaXMgdG8gdXNlIGVpdGhlciBFWFRSQV9DRkxBR1MgKHRha2UgZWZmZWN0IGZvciBhbGwgLmMKKwlmaWxlcykgb3IgQ0ZMQUdTXyRGLm8gKHRha2UgZWZmZWN0IG9ubHkgZm9yIGEgc2luZ2xlIGZpbGUpLgorCisJSW4gb3VyIGV4YW1wbGUgaWYgd2UgbW92ZSA4MTIzX2lmLmggdG8gYSBzdWJkaXJlY3RvcnkgbmFtZWQgaW5jbHVkZS8KKwl0aGUgcmVzdWx0aW5nIEtidWlsZCBmaWxlIHdvdWxkIGxvb2sgbGlrZToKKworCQktLT4gZmlsZW5hbWU6IEtidWlsZAorCQlvYmotbSAgOj0gODEyMy5vCisKKwkJRVhUUkFfQ0ZMQUdTIDo9IC1JaW5jbHVkZQorCQk4MTIzLXkgOj0gODEyM19pZi5vIDgxMjNfcGNpLm8gODEyM19iaW4ubworCisJTm90ZSB0aGF0IGluIHRoZSBhc3NpbmdtZW50IHRoZXJlIGlzIG5vIHNwYWNlIGJldHdlZW4gLUkgYW5kIHRoZSBwYXRoLgorCVRoaXMgaXMgYSBrYnVpbGQgbGltaXRhdGlvbiBhbmQgbm8gc3BhY2UgbXVzdCBiZSBwcmVzZW50LgorCisKKz09PSA2LiBNb2R1bGUgaW5zdGFsbGF0aW9uCisKK01vZHVsZXMgd2hpY2ggYXJlIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgaXMgaW5zdGFsbGVkIGluIHRoZSBkaXJlY3Rvcnk6CisKKwkvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS9rZXJuZWwKKworRXh0ZXJuYWwgbW9kdWxlcyBhcmUgaW5zdGFsbGVkIGluIHRoZSBkaXJlY3Rvcnk6CisKKwkvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS9leHRyYQorCistLS0gNi4xIElOU1RBTExfTU9EX1BBVEgKKworCUFib3ZlIGFyZSB0aGUgZGVmYXVsdCBkaXJlY3RvcmllcywgYnV0IGFzIGFsd2F5cyBzb21lIGxldmVsIG9mCisJY3VzdG9taXphdGlvbiBpcyBwb3NzaWJsZS4gT25lIGNhbiBwcmVmaXggdGhlIHBhdGggdXNpbmcgdGhlIHZhcmlhYmxlCisJSU5TVEFMTF9NT0RfUEFUSDoKKworCQkkIG1ha2UgSU5TVEFMTF9NT0RfUEFUSD0vZnJvZG8gbW9kdWxlc19pbnN0YWxsCisJCT0+IEluc3RhbGwgZGlyOiAvZnJvZG8vbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS9rZXJuZWwKKworCUlOU1RBTExfTU9EX1BBVEggbWF5IGJlIHNldCBhcyBhbiBvcmRpbmFyeSBzaGVsbCB2YXJpYWJsZSBvciBhcyBpbiB0aGUKKwlleGFtcGxlIGFib3ZlIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUgd2hlbiBjYWxsaW5nIG1ha2UuCisJSU5TVEFMTF9NT0RfUEFUSCBoYXMgZWZmZWN0IGJvdGggd2hlbiBpbnN0YWxsaW5nIG1vZHVsZXMgaW5jbHVkZWQgaW4KKwl0aGUga2VybmVsIGFzIHdlbGwgYXMgd2hlbiBpbnN0YWxsaW5nIGV4dGVybmFsIG1vZHVsZXMuCisKKy0tLSA2LjIgSU5TVEFMTF9NT0RfRElSCisKKwlXaGVuIGluc3RhbGxpbmcgZXh0ZXJuYWwgbW9kdWxlcyB0aGV5IGFyZSBkZWZhdWx0IGluc3RhbGxlZCBpbiBhCisJZGlyZWN0b3J5IHVuZGVyIC9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2V4dHJhLCBidXQgb25lIG1heSB3aXNoCisJdG8gbG9jYXRlIG1vZHVsZXMgZm9yIGEgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBpbiBhIHNlcGFyYXRlCisJZGlyZWN0b3J5LiBGb3IgdGhpcyBwdXJwb3NlIG9uZSBjYW4gdXNlIElOU1RBTExfTU9EX0RJUiB0byBzcGVjaWZ5IGFuCisJYWx0ZXJuYXRpdmUgbmFtZSB0aGFuICdleHRyYScuCisKKwkJJCBtYWtlIElOU1RBTExfTU9EX0RJUj1nYW5kYWxmIC1DIEtFUk5FTERJUiBcCisJCQlNPWBwd2RgIG1vZHVsZXNfaW5zdGFsbAorCQk9PiBJbnN0YWxsIGRpcjogL2xpYi9tb2R1bGVzLyQoS0VSTkVMUkVMRUFTRSkvZ2FuZGFsZgorCisKKz09PSA3LiBNb2R1bGUgdmVyc2lvbmluZworCitNb2R1bGUgdmVyc2lvbmluZyBhcmUgZW5hYmxlZCBieSB0aGUgQ09ORklHX01PRFZFUlNJT05TIHRhZy4KKworTW9kdWxlIHZlcnNpb25pbmcgaXMgdXNlZCBhcyBhIHNpbXBsZSBBQkkgY29uc2lzdGVuY3kgY2hlY2suIFRoZSBNb2R1bGUKK3ZlcnNpb25pbmcgY3JlYXRlcyBhIENSQyB2YWx1ZSBvZiB0aGUgZnVsbCBwcm90b3R5cGUgZm9yIGFuIGV4cG9ydGVkIHN5bWJvbCBhbmQKK3doZW4gYSBtb2R1bGUgaXMgbG9hZGVkL3VzZWQgdGhlbiB0aGUgQ1JDIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGtlcm5lbCBhcmUKK2NvbXBhcmVkIHdpdGggc2ltaWxhciB2YWx1ZXMgaW4gdGhlIG1vZHVsZS4gSWYgdGhleSBhcmUgbm90IGVxdWFsIHRoZW4gdGhlCitrZXJuZWwgcmVmdXNlcyB0byBsb2FkIHRoZSBtb2R1bGUuCisKK0R1cmluZyBhIGtlcm5lbCBidWlsZCBhIGZpbGUgbmFtZWQgTW9kdWxlLnN5bXZlcnMgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoaXMKK2ZpbGUgaW5jbHVkZXMgdGhlIHN5bWJvbCB2ZXJzaW9uIG9mIGFsbCBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsLiBJZiB0aGUgCitNb2R1bGUuc3ltdmVycyBmaWxlIGlzIHNhdmVkIGZyb20gdGhlIGxhc3QgZnVsbCBrZXJuZWwgY29tcGlsZSBvbmUgZG9lcyBub3QKK2hhdmUgdG8gZG8gYSBmdWxsIGtlcm5lbCBjb21waWxlIHRvIGJ1aWxkIGEgbW9kdWxlIHZlcnNpb24ncyBjb21wYXRpYmxlIG1vZHVsZS4KKworPT09IDguIFRpcHMgJiBUcmlja3MKKworLS0tIDguMSBUZXN0aW5nIGZvciBDT05GSUdfRk9PX0JBUgorCisJTW9kdWxlcyBvZnRlbiBuZWVkcyB0byBjaGVjayBmb3IgY2VydGFpbiBDT05GSUdfIG9wdGlvbnMgdG8gZGVjaWRlIGlmCisJYSBzcGVjaWZpYyBmZWF0dXJlIHNoYWxsIGJlIGluY2x1ZGVkIGluIHRoZSBtb2R1bGUuIFdoZW4ga2J1aWxkIGlzIHVzZWQKKwl0aGlzIGlzIGRvbmUgYnkgcmVmZXJlbmNpbmcgdGhlIENPTkZJR18gdmFyaWFibGUgZGlyZWN0bHkuCisKKwkJI2ZzL2V4dDIvTWFrZWZpbGUKKwkJb2JqLSQoQ09ORklHX0VYVDJfRlMpICs9IGV4dDIubworCisJCWV4dDIteSA6PSBiYWxsb2MubyBiaXRtYXAubyBkaXIubworCQlleHQyLSQoQ09ORklHX0VYVDJfRlNfWEFUVFIpICs9IHhhdHRyLm8KKworCUV4dGVybmFsIG1vZHVsZXMgaGF2ZSB0cmFkaXRpb25hbGx5IHVzZWQgZ3JlcCB0byBjaGVjayBmb3Igc3BlY2lmaWMKKwlDT05GSUdfIHNldHRpbmdzIGRpcmVjdGx5IGluIC5jb25maWcuIFRoaXMgdXNhZ2UgaXMgYnJva2VuLgorCUFzIGludHJvZHVjZWQgYmVmb3JlIGV4dGVybmFsIG1vZHVsZXMgc2hhbGwgdXNlIGtidWlsZCB3aGVuIGJ1aWxkaW5nCisJYW5kIHRoZXJlZm9yZSBjYW4gdXNlIHRoZSBzYW1lIG1ldGhvZHMgYXMgaW4ta2VybmVsIG1vZHVsZXMgd2hlbiB0ZXN0aW5nCisJZm9yIENPTkZJR18gZGVmaW5pdGlvbnMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLWRvYy1uYW5vLUhPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvYy1uYW5vLUhPV1RPLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDA2Y2U2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0CkBAIC0wLDAgKzEsMTUwIEBACitrZXJuZWwtZG9jIG5hbm8tSE9XVE8KKz09PT09PT09PT09PT09PT09PT09PQorCitNYW55IHBsYWNlcyBpbiB0aGUgc291cmNlIHRyZWUgaGF2ZSBleHRyYWN0YWJsZSBkb2N1bWVudGF0aW9uIGluIHRoZQorZm9ybSBvZiBibG9jayBjb21tZW50cyBhYm92ZSBmdW5jdGlvbnMuICBUaGUgY29tcG9uZW50cyBvZiB0aGlzIHN5c3RlbQorYXJlOgorCistIHNjcmlwdHMva2VybmVsLWRvYworCisgIFRoaXMgaXMgYSBwZXJsIHNjcmlwdCB0aGF0IGh1bnRzIGZvciB0aGUgYmxvY2sgY29tbWVudHMgYW5kIGNhbiBtYXJrCisgIHRoZW0gdXAgZGlyZWN0bHkgaW50byBEb2NCb29rLCBtYW4sIHRleHQsIGFuZCBIVE1MLiAoTm8sIG5vdAorICB0ZXhpbmZvLikKKworLSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svKi50bXBsCisKKyAgVGhlc2UgYXJlIFNHTUwgdGVtcGxhdGUgZmlsZXMsIHdoaWNoIGFyZSBub3JtYWwgU0dNTCBmaWxlcyB3aXRoCisgIHNwZWNpYWwgcGxhY2UtaG9sZGVycyBmb3Igd2hlcmUgdGhlIGV4dHJhY3RlZCBkb2N1bWVudGF0aW9uIHNob3VsZAorICBnby4KKworLSBzY3JpcHRzL2RvY3Byb2MuYworCisgIFRoaXMgaXMgYSBwcm9ncmFtIGZvciBjb252ZXJ0aW5nIFNHTUwgdGVtcGxhdGUgZmlsZXMgaW50byBTR01MCisgIGZpbGVzLiBXaGVuIGEgZmlsZSBpcyByZWZlcmVuY2VkIGl0IGlzIHNlYXJjaGVkIGZvciBzeW1ib2xzCisgIGV4cG9ydGVkIChFWFBPUlRfU1lNQk9MKSwgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGludGVybmFsCisgIGFuZCBleHRlcm5hbCBmdW5jdGlvbnMuCisgIEl0IGludm9rZXMga2VybmVsLWRvYywgZ2l2aW5nIGl0IHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0CisgIGFyZSB0byBiZSBkb2N1bWVudGVkLgorICBBZGRpdGlvbmFsbHkgaXQgaXMgdXNlZCB0byBzY2FuIHRoZSBTR01MIHRlbXBsYXRlIGZpbGVzIHRvIGxvY2F0ZQorICBhbGwgdGhlIGZpbGVzIHJlZmVyZW5jZWQgaGVyZWluLiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jeQorICBpbmZvcm1hdGlvbiBhcyB1c2VkIGJ5IG1ha2UuCisKKy0gTWFrZWZpbGUKKworICBUaGUgdGFyZ2V0cyAnc2dtbGRvY3MnLCAncHNkb2NzJywgJ3BkZmRvY3MnLCBhbmQgJ2h0bWxkb2NzJyBhcmUgdXNlZAorICB0byBidWlsZCBEb2NCb29rIGZpbGVzLCBQb3N0U2NyaXB0IGZpbGVzLCBQREYgZmlsZXMsIGFuZCBodG1sIGZpbGVzCisgIGluIERvY3VtZW50YXRpb24vRG9jQm9vay4KKworLSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKworICBUaGlzIGlzIHdoZXJlIEMgZmlsZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBTR01MIHRlbXBsYXRlcy4KKworCitIb3cgdG8gZXh0cmFjdCB0aGUgZG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGp1c3Qgd2FudCB0byByZWFkIHRoZSByZWFkeS1tYWRlIGJvb2tzIG9uIHRoZSB2YXJpb3VzCitzdWJzeXN0ZW1zIChzZWUgRG9jdW1lbnRhdGlvbi9Eb2NCb29rLyoudG1wbCksIGp1c3QgdHlwZSAnbWFrZQorcHNkb2NzJywgb3IgJ21ha2UgcGRmZG9jcycsIG9yICdtYWtlIGh0bWxkb2NzJywgZGVwZW5kaW5nIG9uIHlvdXIgCitwcmVmZXJlbmNlLiAgSWYgeW91IHdvdWxkIHJhdGhlciByZWFkIGEgZGlmZmVyZW50IGZvcm1hdCwgeW91IGNhbiB0eXBlIAorJ21ha2Ugc2dtbGRvY3MnIGFuZCB0aGVuIHVzZSBEb2NCb29rIHRvb2xzIHRvIGNvbnZlcnQgCitEb2N1bWVudGF0aW9uL0RvY0Jvb2svKi5zZ21sIHRvIGEgZm9ybWF0IG9mIHlvdXIgY2hvaWNlIChmb3IgZXhhbXBsZSwgCisnZGIyaHRtbCAuLi4nIGlmICdtYWtlIGh0bWxkb2NzJyB3YXMgbm90IGRlZmluZWQpLgorCitJZiB5b3Ugd2FudCB0byBzZWUgbWFuIHBhZ2VzIGluc3RlYWQsIHlvdSBjYW4gZG8gdGhpczoKKworJCBjZCBsaW51eAorJCBzY3JpcHRzL2tlcm5lbC1kb2MgLW1hbiAkKGZpbmQgLW5hbWUgJyouYycpIHwgc3BsaXQtbWFuLnBsIC90bXAvbWFuCiskIHNjcmlwdHMva2VybmVsLWRvYyAtbWFuICQoZmluZCAtbmFtZSAnKi5oJykgfCBzcGxpdC1tYW4ucGwgL3RtcC9tYW4KKworSGVyZSBpcyBzcGxpdC1tYW4ucGw6CisKKy0tPgorIyEvdXNyL2Jpbi9wZXJsCisKK2lmICgkI0FSR1YgPCAwKSB7CisgICBkaWUgIndoZXJlIGRvIEkgcHV0IHRoZSByZXN1bHRzP1xuIjsKK30KKworbWtkaXIgJEFSR1ZbMF0sMDc3NzsKKyRzdGF0ZSA9IDA7Cit3aGlsZSAoPFNURElOPikgeworICAgIGlmICgvXlwuVEggXCJbXlwiXSpcIiA0IFwiKFteXCJdKilcIi8pIHsKKwlpZiAoJHN0YXRlID09IDEpIHsgY2xvc2UgT1VUIH0KKwkkc3RhdGUgPSAxOworCSRmbiA9ICIkQVJHVlswXS8kMS40IjsKKwlwcmludCBTVERFUlIgIkNyZWF0aW5nICRmblxuIjsKKwlvcGVuIE9VVCwgIj4kZm4iIG9yIGRpZSAiY2FuJ3Qgb3BlbiAkZm46ICQhXG4iOworCXByaW50IE9VVCAkXzsKKyAgICB9IGVsc2lmICgkc3RhdGUgIT0gMCkgeworCXByaW50IE9VVCAkXzsKKyAgICB9Cit9CisKK2Nsb3NlIE9VVDsKKzwtLQorCitJZiB5b3UganVzdCB3YW50IHRvIHZpZXcgdGhlIGRvY3VtZW50YXRpb24gZm9yIG9uZSBmdW5jdGlvbiBpbiBvbmUKK2ZpbGUsIHlvdSBjYW4gZG8gdGhpczoKKworJCBzY3JpcHRzL2tlcm5lbC1kb2MgLW1hbiAtZnVuY3Rpb24gZm4gZmlsZSB8IG5yb2ZmIC1tYW4gfCBsZXNzCisKK29yIHRoaXM6CisKKyQgc2NyaXB0cy9rZXJuZWwtZG9jIC10ZXh0IC1mdW5jdGlvbiBmbiBmaWxlCisKKworSG93IHRvIGFkZCBleHRyYWN0YWJsZSBkb2N1bWVudGF0aW9uIHRvIHlvdXIgc291cmNlIGZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvcm1hdCBvZiB0aGUgYmxvY2sgY29tbWVudCBpcyBsaWtlIHRoaXM6CisKKy8qKgorICogZnVuY3Rpb25fbmFtZSg6KT8gKC0gc2hvcnQgZGVzY3JpcHRpb24pPworKCogQHBhcmFtZXRlcng6IChkZXNjcmlwdGlvbiBvZiBwYXJhbWV0ZXIgeCk/KSoKKygqIGEgYmxhbmsgbGluZSk/CisgKiAoRGVzY3JpcHRpb246KT8gKERlc2NyaXB0aW9uIG9mIGZ1bmN0aW9uKT8KKyAqIChzZWN0aW9uIGhlYWRlcjogKHNlY3Rpb24gZGVzY3JpcHRpb24pPyApKgorKCopPyovCisKK1RoZSBzaG9ydCBmdW5jdGlvbiBkZXNjcmlwdGlvbiBjYW5ub3QgYmUgbXVsdGlsaW5lLCBidXQgdGhlIG90aGVyCitkZXNjcmlwdGlvbnMgY2FuIGJlIChhbmQgdGhleSBjYW4gY29udGFpbiBibGFuayBsaW5lcykuIEF2b2lkIHB1dHRpbmcgYQorc3B1cmlvdXMgYmxhbmsgbGluZSBhZnRlciB0aGUgZnVuY3Rpb24gbmFtZSwgb3IgZWxzZSB0aGUgZGVzY3JpcHRpb24gd2lsbAorYmUgcmVwZWF0ZWQhCisKK0FsbCBkZXNjcmlwdGl2ZSB0ZXh0IGlzIGZ1cnRoZXIgcHJvY2Vzc2VkLCBzY2FubmluZyBmb3IgdGhlIGZvbGxvd2luZyBzcGVjaWFsCitwYXR0ZXJucywgd2hpY2ggYXJlIGhpZ2hsaWdodGVkIGFwcHJvcHJpYXRlbHkuCisKKydmdW5jbmFtZSgpJyAtIGZ1bmN0aW9uCisnJEVOVlZBUicgLSBlbnZpcm9ubWVudCB2YXJpYWJsZQorJyZzdHJ1Y3RfbmFtZScgLSBuYW1lIG9mIGEgc3RydWN0dXJlICh1cCB0byB0d28gd29yZHMgaW5jbHVkaW5nICdzdHJ1Y3QnKQorJ0BwYXJhbWV0ZXInIC0gbmFtZSBvZiBhIHBhcmFtZXRlcgorJyVDT05TVCcgLSBuYW1lIG9mIGEgY29uc3RhbnQuCisKK1Rha2UgYSBsb29rIGFyb3VuZCB0aGUgc291cmNlIHRyZWUgZm9yIGV4YW1wbGVzLgorCisKK0hvdyB0byBtYWtlIG5ldyBTR01MIHRlbXBsYXRlIGZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTR01MIHRlbXBsYXRlIGZpbGVzICgqLnRtcGwpIGFyZSBsaWtlIG5vcm1hbCBTR01MIGZpbGVzLCBleGNlcHQgdGhhdAordGhleSBjYW4gY29udGFpbiBlc2NhcGUgc2VxdWVuY2VzIHdoZXJlIGV4dHJhY3RlZCBkb2N1bWVudGF0aW9uIHNob3VsZAorYmUgaW5zZXJ0ZWQuCisKKyFFPGZpbGVuYW1lPiBpcyByZXBsYWNlZCBieSB0aGUgZG9jdW1lbnRhdGlvbiwgaW4gPGZpbGVuYW1lPiwgZm9yCitmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3J0ZWQgdXNpbmcgRVhQT1JUX1NZTUJPTDogdGhlIGZ1bmN0aW9uIGxpc3QgaXMKK2NvbGxlY3RlZCBmcm9tIGZpbGVzIGxpc3RlZCBpbiBEb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUuCisKKyFJPGZpbGVuYW1lPiBpcyByZXBsYWNlZCBieSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlCitfbm90XyBleHBvcnRlZCB1c2luZyBFWFBPUlRfU1lNQk9MLgorCishRDxmaWxlbmFtZT4gaXMgdXNlZCB0byBuYW1lIGFkZGl0aW9uYWwgZmlsZXMgdG8gc2VhcmNoIGZvciBmdW5jdGlvbnMKK2V4cG9ydGVkIHVzaW5nIEVYUE9SVF9TWU1CT0wuCisKKyFGPGZpbGVuYW1lPiA8ZnVuY3Rpb24gW2Z1bmN0aW9ucy4uLl0+IGlzIHJlcGxhY2VkIGJ5IHRoZQorZG9jdW1lbnRhdGlvbiwgaW4gPGZpbGVuYW1lPiwgZm9yIHRoZSBmdW5jdGlvbnMgbGlzdGVkLgorCisKK1RpbS4KKyovIDx0d2F1Z2hAcmVkaGF0LmNvbT4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2NzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg5ZmIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQKQEAgLTAsMCArMSw3NzcgQEAKKworICAgICAgIEluZGV4IG9mIERvY3VtZW50YXRpb24gZm9yIFBlb3BsZSBJbnRlcmVzdGVkIGluIFdyaXRpbmcgYW5kL29yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgdGhlIExpbnV4IEtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICBKdWFuLU1hcmlhbm8gZGUgR295ZW5lY2hlIDxqbXNleWFzQGRpdC51cG0uZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IG1heSBiZSBmb3VuZCBhdDoKKyAqICAgaHR0cDovL3d3dy5kaXQudXBtLmVzL35qbXNleWFzL2xpbnV4L2tlcm5lbC9oYWNrZXJzLWRvY3MuaHRtbAorICovCisKKyAgIFRoZSBuZWVkIGZvciBhIGRvY3VtZW50IGxpa2UgdGhpcyBvbmUgYmVjYW1lIGFwcGFyZW50IGluIHRoZQorICAgbGludXgta2VybmVsIG1haWxpbmcgbGlzdCBhcyB0aGUgc2FtZSBxdWVzdGlvbnMsIGFza2luZyBmb3IgcG9pbnRlcnMKKyAgIHRvIGluZm9ybWF0aW9uLCBhcHBlYXJlZCBhZ2FpbiBhbmQgYWdhaW4uCisgICAKKyAgIEZvcnR1bmF0ZWx5LCBhcyBtb3JlIGFuZCBtb3JlIHBlb3BsZSBnZXQgdG8gR05VL0xpbnV4LCBtb3JlIGFuZCBtb3JlCisgICBnZXQgaW50ZXJlc3RlZCBpbiB0aGUgS2VybmVsLiBCdXQgcmVhZGluZyB0aGUgc291cmNlcyBpcyBub3QgYWx3YXlzCisgICBlbm91Z2guIEl0IGlzIGVhc3kgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSwgYnV0IG1pc3MgdGhlIGNvbmNlcHRzLCB0aGUKKyAgIHBoaWxvc29waHkgYW5kIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5kIHRoaXMgY29kZS4KKyAgIAorICAgVW5mb3J0dW5hdGVseSwgbm90IG1hbnkgZG9jdW1lbnRzIGFyZSBhdmFpbGFibGUgZm9yIGJlZ2lubmVycyB0bworICAgc3RhcnQuIEFuZCwgZXZlbiBpZiB0aGV5IGV4aXN0LCB0aGVyZSB3YXMgbm8gIndlbGwta25vd24iIHBsYWNlIHdoaWNoCisgICBrZXB0IHRyYWNrIG9mIHRoZW0uIFRoZXNlIGxpbmVzIHRyeSB0byBjb3ZlciB0aGlzIGxhY2suIEFsbCBkb2N1bWVudHMKKyAgIGF2YWlsYWJsZSBvbiBsaW5lIGtub3duIGJ5IHRoZSBhdXRob3IgYXJlIGxpc3RlZCwgd2hpbGUgc29tZSByZWZlcmVuY2UKKyAgIGJvb2tzIGFyZSBhbHNvIG1lbnRpb25lZC4KKyAgIAorICAgUExFQVNFLCBpZiB5b3Uga25vdyBhbnkgcGFwZXIgbm90IGxpc3RlZCBoZXJlIG9yIHdyaXRlIGEgbmV3IGRvY3VtZW50LAorICAgc2VuZCBtZSBhbiBlLW1haWwsIGFuZCBJJ2xsIGluY2x1ZGUgYSByZWZlcmVuY2UgdG8gaXQgaGVyZS4gQW55CisgICBjb3JyZWN0aW9ucywgaWRlYXMgb3IgY29tbWVudHMgYXJlIGFsc28gd2VsY29tZWQuCisgICAKKyAgIFRoZSBwYXBlcnMgdGhhdCBmb2xsb3cgYXJlIGxpc3RlZCBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyLiBBbGwgYXJlCisgICBjYXRhbG9nZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczogdGhlIGRvY3VtZW50J3MgIlRpdGxlIiwgdGhlCisgICAiQXV0aG9yIi9zLCB0aGUgIlVSTCIgd2hlcmUgdGhleSBjYW4gYmUgZm91bmQsIHNvbWUgIktleXdvcmRzIiBoZWxwZnVsCisgICB3aGVuIHNlYXJjaGluZyBmb3Igc3BlY2lmaWMgdG9waWNzLCBhbmQgYSBicmllZiAiRGVzY3JpcHRpb24iIG9mIHRoZQorICAgRG9jdW1lbnQuCisgICAKKyAgIEVuam95IQorICAgCisgICAgIE9OLUxJTkUgRE9DUzoKKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IERldmljZSBEcml2ZXJzLCBUaGlyZCBFZGl0aW9uIgorICAgICAgIEF1dGhvcjogSm9uYXRoYW4gQ29yYmV0LCBBbGVzc2FuZHJvIFJ1YmluaSwgR3JlZyBLcm9haC1IYXJ0bWFuCisgICAgICAgVVJMOiBodHRwOi8vbHduLm5ldC9LZXJuZWwvTEREMy8KKyAgICAgICBEZXNjcmlwdGlvbjogQSA2MDAtcGFnZSBib29rIGNvdmVyaW5nIHRoZSAoMi42LjEwKSBkcml2ZXIKKyAgICAgICBwcm9ncmFtbWluZyBBUEkgYW5kIGtlcm5lbCBoYWNraW5nIGluIGdlbmVyYWwuICBBdmFpbGFibGUgdW5kZXIgdGhlCisgICAgICAgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuMCBsaWNlbnNlLgorCisgICAgICogVGl0bGU6ICJUaGUgTGludXggS2VybmVsIgorICAgICAgIEF1dGhvcjogRGF2aWQgQS4gUnVzbGluZy4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cudGxkcC5vcmcvTERQL3Rsay90bGsuaHRtbAorICAgICAgIEtleXdvcmRzOiBldmVyeXRoaW5nISwgYm9vay4KKyAgICAgICBEZXNjcmlwdGlvbjogT24gbGluZSwgMjAwIHBhZ2VzIGJvb2sgZGVzY3JpYmluZyBtb3N0IGFzcGVjdHMgb2YKKyAgICAgICB0aGUgTGludXggS2VybmVsLiBQcm9iYWJseSwgdGhlIGZpcnN0IHJlZmVyZW5jZSBmb3IgYmVnaW5uZXJzLgorICAgICAgIExvdHMgb2YgaWxsdXN0cmF0aW9ucyBleHBsYWluaW5nIGRhdGEgc3RydWN0dXJlcyB1c2UgYW5kCisgICAgICAgcmVsYXRpb25zaGlwcyBpbiB0aGUgcHVyZXN0IFJpY2hhcmQgVy4gU3RldmVucycgc3R5bGUuIENvbnRlbnRzOgorICAgICAgICIxLi1IYXJkd2FyZSBCYXNpY3MsIDIuLVNvZnR3YXJlIEJhc2ljcywgMy4tTWVtb3J5IE1hbmFnZW1lbnQsCisgICAgICAgNC4tUHJvY2Vzc2VzLCA1Li1JbnRlcnByb2Nlc3MgQ29tbXVuaWNhdGlvbiBNZWNoYW5pc21zLCA2Li1QQ0ksCisgICAgICAgNy4tSW50ZXJydXB0cyBhbmQgSW50ZXJydXB0IEhhbmRsaW5nLCA4Li1EZXZpY2UgRHJpdmVycywgOS4tVGhlCisgICAgICAgRmlsZSBzeXN0ZW0sIDEwLi1OZXR3b3JrcywgMTEuLUtlcm5lbCBNZWNoYW5pc21zLCAxMi4tTW9kdWxlcywKKyAgICAgICAxMy4tVGhlIExpbnV4IEtlcm5lbCBTb3VyY2VzLCBBLi1MaW51eCBEYXRhIFN0cnVjdHVyZXMsIEIuLVRoZQorICAgICAgIEFscGhhIEFYUCBQcm9jZXNzb3IsIEMuLVVzZWZ1bCBXZWIgYW5kIEZUUCBTaXRlcywgRC4tVGhlIEdOVQorICAgICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIEdsb3NzYXJ5Ii4gSW4gc2hvcnQ6IGEgbXVzdCBoYXZlLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIExpbnV4IEtlcm5lbCBIYWNrZXJzJyBHdWlkZSIKKyAgICAgICBBdXRob3I6IE1pY2hhZWwgSy5Kb2huc29uIGFuZCBvdGhlcnMuCisgICAgICAgVVJMOiBodHRwOi8vd3d3LnRsZHAub3JnL0xEUC9raGcvSHlwZXJOZXdzL2dldC9raGcuaHRtbAorICAgICAgIEtleXdvcmRzOiBldmVyeXRoaW5nIQorICAgICAgIERlc2NyaXB0aW9uOiBObyBtb3JlIFBvc3RzY3JpcHQgYm9vay1saWtlIHZlcnNpb24uIE9ubHkgSFRNTCBub3cuCisgICAgICAgTWFueSBwZW9wbGUgaGF2ZSBjb250cmlidXRlZC4gVGhlIGludGVyZmFjZSBpcyBzaW1pbGFyIHRvIHdlYgorICAgICAgIGF2YWlsYWJsZSBtYWlsaW5nIGxpc3RzIGFyY2hpdmVzLiBZb3UgY2FuIGZpbmQgc29tZSBhcnRpY2xlcyBhbmQKKyAgICAgICB0aGVuIHNvbWUgbWFpbHMgYXNraW5nIHF1ZXN0aW9ucyBhYm91dCB0aGVtIGFuZC9vciBjb21wbGVtZW50aW5nCisgICAgICAgcHJldmlvdXMgY29udHJpYnV0aW9ucy4gQSBsaXR0bGUgYml0IGFuYXJjaGljIGluIHRoaXMgYXNwZWN0LCBidXQKKyAgICAgICB3aXRoIHNvbWUgdmFsdWFibGUgaW5mb3JtYXRpb24gaW4gc29tZSBjYXNlcy4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkNvbmNlcHR1YWwgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBLZXJuZWwiCisgICAgICAgQXV0aG9yOiBJdmFuIFQuIEJvd21hbi4KKyAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhL35pdGJvd21hbi9wYXBlcnMvQ1M3NDZHLWExLmh0bWwKKyAgICAgICBLZXl3b3JkczogY29uY2VwdHVhbCBzb2Z0d2FyZSBhcnF1aXRlY3R1cmUsIGV4dHJhY3RlZCBkZXNpZ24sCisgICAgICAgcmV2ZXJzZSBlbmdpbmVlcmluZywgc3lzdGVtIHN0cnVjdHVyZS4KKyAgICAgICBEZXNjcmlwdGlvbjogQ29uY2VwdHVhbCBzb2Z0d2FyZSBhcnF1aXRlY3R1cmUgb2YgdGhlIExpbnV4IGtlcm5lbCwKKyAgICAgICBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSBzb3VyY2UgY29kZS4gVmVyeSBkZXRhaWxlZC4gR29vZAorICAgICAgIGZpZ3VyZXMuIEdpdmVzIGdvb2Qgb3ZlcmFsbCBrZXJuZWwgdW5kZXJzdGFuZGluZy4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkNvbmNyZXRlIEFyY2hpdGVjdHVyZSBvZiB0aGUgTGludXggS2VybmVsIgorICAgICAgIEF1dGhvcjogSXZhbiBULiBCb3dtYW4sIFNhaGVlbSBTaWRkaXFpLCBhbmQgTWV5ZXIgQy4gVGFudWFuLgorICAgICAgIFVSTDogaHR0cDovL3BsZy51d2F0ZXJsb28uY2Evfml0Ym93bWFuL3BhcGVycy9DUzc0NkctYTIuaHRtbAorICAgICAgIEtleXdvcmRzOiBjb25jcmV0ZSBhcnF1aXRlY3R1cmUsIGV4dHJhY3RlZCBkZXNpZ24sIHJldmVyc2UKKyAgICAgICBlbmdpbmVlcmluZywgc3lzdGVtIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLgorICAgICAgIERlc2NyaXB0aW9uOiBDb25jcmV0ZSBhcnF1aXRlY3R1cmUgb2YgdGhlIExpbnV4IGtlcm5lbCwKKyAgICAgICBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSBzb3VyY2UgY29kZS4gVmVyeSBkZXRhaWxlZC4gR29vZAorICAgICAgIGZpZ3VyZXMuIEdpdmVzIGdvb2Qgb3ZlcmFsbCBrZXJuZWwgdW5kZXJzdGFuZGluZy4gVGhpcyBwYXBlcnMKKyAgICAgICBmb2N1cyBvbiBsb3dlciBkZXRhaWxzIHRoYW4gaXRzIHByZWRlY2Vzc29yIChmaWxlcywgdmFyaWFibGVzLi4uKS4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IGFzIGEgQ2FzZSBTdHVkeTogSXRzIEV4dHJhY3RlZCBTb2Z0d2FyZQorICAgICAgIEFyY2hpdGVjdHVyZSIKKyAgICAgICBBdXRob3I6IEl2YW4gVC4gQm93bWFuLCBSaWNoYXJkIEMuIEhvbHQgYW5kIE5laWwgVi4gQnJld3N0ZXIuCisgICAgICAgVVJMOiBodHRwOi8vcGxnLnV3YXRlcmxvby5jYS9+aXRib3dtYW4vcGFwZXJzL2xpbnV4Y2FzZS5odG1sCisgICAgICAgS2V5d29yZHM6IHNvZnR3YXJlIGFyY2hpdGVjdHVyZSwgYXJjaGl0ZWN0dXJlIHJlY292ZXJ5LAorICAgICAgIHJlZG9jdW1lbnRhdGlvbi4KKyAgICAgICBEZXNjcmlwdGlvbjogUGFwZXIgYXBwZWFyZWQgYXQgSUNTRSc5OSwgTG9zIEFuZ2VsZXMsIE1heSAxNi0yMiwKKyAgICAgICAxOTk5LiBBIG1peHR1cmUgb2YgdGhlIHByZXZpb3VzIHR3byBkb2N1bWVudHMgZnJvbSB0aGUgc2FtZQorICAgICAgIGF1dGhvci4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIk92ZXJ2aWV3IG9mIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIgorICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L3Zmcy50eHQKKyAgICAgICBLZXl3b3JkczogVkZTLCBGaWxlIFN5c3RlbSwgbW91bnRpbmcgZmlsZXN5c3RlbXMsIG9wZW5pbmcgZmlsZXMsCisgICAgICAgZGVudHJpZXMsIGRjYWNoZS4KKyAgICAgICBEZXNjcmlwdGlvbjogQnJpZWYgaW50cm9kdWN0aW9uIHRvIHRoZSBMaW51eCBWaXJ0dWFsIEZpbGUgU3lzdGVtLgorICAgICAgIFdoYXQgaXMgaXQsIGhvdyBpdCB3b3Jrcywgb3BlcmF0aW9ucyB0YWtlbiB3aGVuIG9wZW5pbmcgYSBmaWxlIG9yCisgICAgICAgbW91bnRpbmcgYSBmaWxlIHN5c3RlbSBhbmQgZGVzY3JpcHRpb24gb2YgaW1wb3J0YW50IGRhdGEKKyAgICAgICBzdHJ1Y3R1cmVzIGV4cGxhaW5pbmcgdGhlIHB1cnBvc2Ugb2YgZWFjaCBvZiB0aGVpciBlbnRyaWVzLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIExpbnV4IFJBSUQtMSwgNCwgNSBDb2RlIgorICAgICAgIEF1dGhvcjogSW5nbyBNb2xuYXIsIEdhZGkgT3htYW4gYW5kIE1pZ3VlbCBkZSBJY2F6YS4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlNDQvMjM5MS5odG1sCisgICAgICAgS2V5d29yZHM6IFJBSUQsIE1EIGRyaXZlci4KKyAgICAgICBEZXNjcmlwdGlvbjogTGludXggSm91cm5hbCBLZXJuZWwgS29ybmVyIGFydGljbGUuIEhlcmUgaXMgaXQncworICAgICAgIGFic3RyYWN0OiAiQSBkZXNjcmlwdGlvbiBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJBSUQtMSwKKyAgICAgICBSQUlELTQgYW5kIFJBSUQtNSBwZXJzb25hbGl0aWVzIG9mIHRoZSBNRCBkZXZpY2UgZHJpdmVyIGluIHRoZQorICAgICAgIExpbnV4IGtlcm5lbCwgcHJvdmlkaW5nIHVzZXJzIHdpdGggaGlnaCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFibGUsCisgICAgICAgc2Vjb25kYXJ5LXN0b3JhZ2UgY2FwYWJpbGl0eSB1c2luZyBzb2Z0d2FyZSIuCisgICAgICAgCisgICAgICogVGl0bGU6ICJEeW5hbWljIEtlcm5lbHM6IE1vZHVsYXJpemVkIERldmljZSBEcml2ZXJzIgorICAgICAgIEF1dGhvcjogQWxlc3NhbmRybyBSdWJpbmkuCisgICAgICAgVVJMOiBodHRwOi8vd3d3Mi5saW51eGpvdXJuYWwuY29tL2xqLWlzc3Vlcy9pc3N1ZTIzLzEyMTkuaHRtbAorICAgICAgIEtleXdvcmRzOiBkZXZpY2UgZHJpdmVyLCBtb2R1bGUsIGxvYWRpbmcvdW5sb2FkaW5nIG1vZHVsZXMsCisgICAgICAgYWxsb2NhdGluZyByZXNvdXJjZXMuCisgICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lciBhcnRpY2xlLiBIZXJlIGlzIGl0J3MKKyAgICAgICBhYnN0cmFjdDogIlRoaXMgaXMgdGhlIGZpcnN0IG9mIGEgc2VyaWVzIG9mIGZvdXIgYXJ0aWNsZXMKKyAgICAgICBjby1hdXRob3JlZCBieSBBbGVzc2FuZHJvIFJ1YmluaSBhbmQgR2VvcmcgWmV6Y2h3aXR6IHdoaWNoIHByZXNlbnQKKyAgICAgICBhIHByYWN0aWNhbCBhcHByb2FjaCB0byB3cml0aW5nIExpbnV4IGRldmljZSBkcml2ZXJzIGFzIGtlcm5lbAorICAgICAgIGxvYWRhYmxlIG1vZHVsZXMuIFRoaXMgaW5zdGFsbG1lbnQgcHJlc2VudHMgYW4gaW50cm9kdWN0aW9uIHRvIHRoZQorICAgICAgIHRvcGljLCBwcmVwYXJpbmcgdGhlIHJlYWRlciB0byB1bmRlcnN0YW5kIG5leHQgbW9udGgncworICAgICAgIGluc3RhbGxtZW50Ii4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkR5bmFtaWMgS2VybmVsczogRGlzY292ZXJ5IgorICAgICAgIEF1dGhvcjogQWxlc3NhbmRybyBSdWJpbmkuCisgICAgICAgVVJMOiBodHRwOi8vd3d3Mi5saW51eGpvdXJuYWwuY29tL2xqLWlzc3Vlcy9pc3N1ZTI0LzEyMjAuaHRtbAorICAgICAgIEtleXdvcmRzOiBjaGFyYWN0ZXIgZHJpdmVyLCBpbml0X21vZHVsZSwgY2xlYW5fdXAgbW9kdWxlLAorICAgICAgIGF1dG9kZXRlY3Rpb24sIG1heW9yIG51bWJlciwgbWlub3IgbnVtYmVyLCBmaWxlIG9wZXJhdGlvbnMsCisgICAgICAgb3BlbigpLCBjbG9zZSgpLgorICAgICAgIERlc2NyaXB0aW9uOiBMaW51eCBKb3VybmFsIEtlcm5lbCBLb3JuZXIgYXJ0aWNsZS4gSGVyZSBpcyBpdCdzCisgICAgICAgYWJzdHJhY3Q6ICJUaGlzIGFydGljbGUsIHRoZSBzZWNvbmQgb2YgZm91ciwgaW50cm9kdWNlcyBwYXJ0IG9mCisgICAgICAgdGhlIGFjdHVhbCBjb2RlIHRvIGNyZWF0ZSBjdXN0b20gbW9kdWxlIGltcGxlbWVudGluZyBhIGNoYXJhY3RlcgorICAgICAgIGRldmljZSBkcml2ZXIuIEl0IGRlc2NyaWJlcyB0aGUgY29kZSBmb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZAorICAgICAgIGNsZWFudXAsIGFzIHdlbGwgYXMgdGhlIG9wZW4oKSBhbmQgY2xvc2UoKSBzeXN0ZW0gY2FsbHMiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIERldmlsJ3MgaW4gdGhlIERldGFpbHMiCisgICAgICAgQXV0aG9yOiBHZW9yZyB2LiBaZXpzY2h3aXR6IGFuZCBBbGVzc2FuZHJvIFJ1YmluaS4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMjUvMTIyMS5odG1sCisgICAgICAgS2V5d29yZHM6IHJlYWQoKSwgd3JpdGUoKSwgc2VsZWN0KCksIGlvY3RsKCksIGJsb2NraW5nL25vbgorICAgICAgIGJsb2NraW5nIG1vZGUsIGludGVycnVwdCBoYW5kbGVyLgorICAgICAgIERlc2NyaXB0aW9uOiBMaW51eCBKb3VybmFsIEtlcm5lbCBLb3JuZXIgYXJ0aWNsZS4gSGVyZSBpcyBpdCdzCisgICAgICAgYWJzdHJhY3Q6ICJUaGlzIGFydGljbGUsIHRoZSB0aGlyZCBvZiBmb3VyIG9uIHdyaXRpbmcgY2hhcmFjdGVyCisgICAgICAgZGV2aWNlIGRyaXZlcnMsIGludHJvZHVjZXMgY29uY2VwdHMgb2YgcmVhZGluZywgd3JpdGluZywgYW5kIHVzaW5nCisgICAgICAgaW9jdGwtY2FsbHMiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiRGlzc2VjdGluZyBJbnRlcnJ1cHRzIGFuZCBCcm93c2luZyBETUEiCisgICAgICAgQXV0aG9yOiBBbGVzc2FuZHJvIFJ1YmluaSBhbmQgR2Vvcmcgdi4gWmV6c2Nod2l0ei4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMjYvMTIyMi5odG1sCisgICAgICAgS2V5d29yZHM6IGludGVycnVwdHMsIGlycXMsIERNQSwgYm90dG9tIGhhbHZlcywgdGFzayBxdWV1ZXMuCisgICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lciBhcnRpY2xlLiBIZXJlIGlzIGl0J3MKKyAgICAgICBhYnN0cmFjdDogIlRoaXMgaXMgdGhlIGZvdXJ0aCBpbiBhIHNlcmllcyBvZiBhcnRpY2xlcyBhYm91dAorICAgICAgIHdyaXRpbmcgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzIGFzIGxvYWRhYmxlIGtlcm5lbCBtb2R1bGVzLiBUaGlzCisgICAgICAgbW9udGgsIHdlIGZ1cnRoZXIgaW52ZXN0aWdhdGUgdGhlIGZpZWxkIG9mIGludGVycnVwdCBoYW5kbGluZy4KKyAgICAgICBUaG91Z2ggaXQgaXMgY29uY2VwdHVhbGx5IHNpbXBsZSwgcHJhY3RpY2FsIGxpbWl0YXRpb25zIGFuZAorICAgICAgIGNvbnN0cmFpbnRzIG1ha2UgdGhpcyBhbiBgYGludGVyZXN0aW5nJycgcGFydCBvZiBkZXZpY2UgZHJpdmVyCisgICAgICAgd3JpdGluZywgYW5kIHNldmVyYWwgZGlmZmVyZW50IGZhY2lsaXRpZXMgaGF2ZSBiZWVuIHByb3ZpZGVkIGZvcgorICAgICAgIGRpZmZlcmVudCBzaXR1YXRpb25zLiBXZSBhbHNvIGludmVzdGlnYXRlIHRoZSBjb21wbGV4IHRvcGljIG9mCisgICAgICAgRE1BIi4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkRldmljZSBEcml2ZXJzIENvbmNsdWRlZCIKKyAgICAgICBBdXRob3I6IEdlb3JnIHYuIFplenNjaHdpdHouCisgICAgICAgVVJMOiBodHRwOi8vd3d3Mi5saW51eGpvdXJuYWwuY29tL2xqLWlzc3Vlcy9pc3N1ZTI4LzEyODcuaHRtbAorICAgICAgIEtleXdvcmRzOiBhZGRyZXNzIHNwYWNlcywgcGFnZXMsIHBhZ2luYXRpb24sIHBhZ2UgbWFuYWdlbWVudCwKKyAgICAgICBkZW1hbmQgbG9hZGluZywgc3dhcHBpbmcsIG1lbW9yeSBwcm90ZWN0aW9uLCBtZW1vcnkgbWFwcGluZywgbW1hcCwKKyAgICAgICB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcyksIHZyZW1hcCwgUENJLgorICAgICAgIERlc2NyaXB0aW9uOiBGaW5hbGx5LCB0aGUgYWJvdmUgdHVybmVkIG91dCBpbnRvIGEgZml2ZSBhcnRpY2xlcworICAgICAgIHNlcmllcy4gVGhpcyBsYXRlc3Qgb25lJ3MgaW50cm9kdWN0aW9uIHJlYWRzOiAiVGhpcyBpcyB0aGUgbGFzdCBvZgorICAgICAgIGZpdmUgYXJ0aWNsZXMgYWJvdXQgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLiBJbiB0aGlzIGZpbmFsCisgICAgICAgc2VjdGlvbiwgR2VvcmcgZGVhbHMgd2l0aCBtZW1vcnkgbWFwcGluZyBkZXZpY2VzLCBiZWdpbm5pbmcgd2l0aAorICAgICAgIGFuIG92ZXJhbGwgZGVzY3JpcHRpb24gb2YgdGhlIExpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IGNvbmNlcHRzIi4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIk5ldHdvcmsgQnVmZmVycyBBbmQgTWVtb3J5IE1hbmFnZW1lbnQiCisgICAgICAgQXV0aG9yOiBBbGFuIENveC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMzAvMTMxMi5odG1sCisgICAgICAgS2V5d29yZHM6IHNrX2J1ZmZzLCBuZXR3b3JrIGRldmljZXMsIHByb3RvY29sL2xpbmsgbGF5ZXIKKyAgICAgICB2YXJpYWJsZXMsIG5ldHdvcmsgZGV2aWNlcyBmbGFncywgdHJhbnNtaXQsIHJlY2VpdmUsCisgICAgICAgY29uZmlndXJhdGlvbiwgbXVsdGljYXN0LgorICAgICAgIERlc2NyaXB0aW9uOiBMaW51eCBKb3VybmFsIEtlcm5lbCBLb3JuZXIuIEhlcmUgaXMgdGhlIGFic3RyYWN0OgorICAgICAgICJXcml0aW5nIGEgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCBpcyBmdW5kYW1lbnRhbGx5CisgICAgICAgc2ltcGxlLS0tbW9zdCBvZiB0aGUgY29tcGxleGl0eSAob3RoZXIgdGhhbiB0YWxraW5nIHRvIHRoZQorICAgICAgIGhhcmR3YXJlKSBpbnZvbHZlcyBtYW5hZ2luZyBuZXR3b3JrIHBhY2tldHMgaW4gbWVtb3J5Ii4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIldyaXRpbmcgTGludXggRGV2aWNlIERyaXZlcnMiCisgICAgICAgQXV0aG9yOiBNaWNoYWVsIEsuIEpvaG5zb24uCisgICAgICAgVVJMOiBodHRwOi8vcGVvcGxlLnJlZGhhdC5jb20vam9obnNvbm0vZGV2aWNlcy5odG1sCisgICAgICAgS2V5d29yZHM6IGZpbGVzLCBWRlMsIGZpbGUgb3BlcmF0aW9ucywga2VybmVsIGludGVyZmFjZSwgY2hhcmFjdGVyCisgICAgICAgdnMgYmxvY2sgZGV2aWNlcywgSS9PIGFjY2VzcywgaGFyZHdhcmUgaW50ZXJydXB0cywgRE1BLCBhY2Nlc3MgdG8KKyAgICAgICB1c2VyIG1lbW9yeSwgbWVtb3J5IGFsbG9jYXRpb24sIHRpbWVycy4KKyAgICAgICBEZXNjcmlwdGlvbjogSW50cm9kdWN0b3J5IDUwLW1pbnV0ZXMgKHNpYykgdHV0b3JpYWwgb24gd3JpdGluZworICAgICAgIGRldmljZSBkcml2ZXJzLiAxMiBwYWdlcyB3cml0dGVuIGJ5IHRoZSBzYW1lIGF1dGhvciBvZiB0aGUgIktlcm5lbAorICAgICAgIEhhY2tlcnMnIEd1aWRlIiB3aGljaCBnaXZlIGEgdmVyeSBnb29kIG92ZXJ2aWV3IG9mIHRoZSB0b3BpYy4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlRoZSBWZW51cyBrZXJuZWwgaW50ZXJmYWNlIgorICAgICAgIEF1dGhvcjogUGV0ZXIgSi4gQnJhYW0uCisgICAgICAgVVJMOgorICAgICAgIGh0dHA6Ly93d3cuY29kYS5jcy5jbXUuZWR1L2RvYy9odG1sL2tlcm5lbC12ZW51cy1wcm90b2NvbC5odG1sCisgICAgICAgS2V5d29yZHM6IGNvZGEsIGZpbGVzeXN0ZW0sIHZlbnVzLCBjYWNoZSBtYW5hZ2VyLgorICAgICAgIERlc2NyaXB0aW9uOiAiVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbgorICAgICAgIFZlbnVzIGFuZCBrZXJuZWwgbGV2ZWwgZmlsZSBzeXN0ZW0gY29kZSBuZWVkZWQgZm9yIHRoZSBvcGVyYXRpb24KKyAgICAgICBvZiB0aGUgQ29kYSBmaWxlc3lzdGVtLiBUaGlzIHZlcnNpb24gZG9jdW1lbnQgaXMgbWVhbnQgdG8gZGVzY3JpYmUKKyAgICAgICB0aGUgY3VycmVudCBpbnRlcmZhY2UgKHZlcnNpb24gMS4wKSBhcyB3ZWxsIGFzIGltcHJvdmVtZW50cyB3ZQorICAgICAgIGVudmlzYWdlIi4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlByb2dyYW1taW5nIFBDSS1EZXZpY2VzIHVuZGVyIExpbnV4IgorICAgICAgIEF1dGhvcjogQ2xhdXMgU2Nocm9ldGVyLgorICAgICAgIFVSTDoKKyAgICAgICBmdHA6Ly9mdHAubGxwLmZ1LWJlcmxpbi5kZS9wdWIvbGludXgvTElOVVgtTEFCL3doaXRlcGFwZXJzL3BjaXAucHMKKyAgICAgICAuZ3oKKyAgICAgICBLZXl3b3JkczogUENJLCBkZXZpY2UsIGJ1c21hc3RlcmluZy4KKyAgICAgICBEZXNjcmlwdGlvbjogNiBwYWdlcyB0dXRvcmlhbCBvbiBQQ0kgcHJvZ3JhbW1pbmcgdW5kZXIgTGludXguCisgICAgICAgR2l2ZXMgdGhlIGJhc2ljIGNvbmNlcHRzIG9uIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIFBDSSBzdWJzeXN0ZW0sCisgICAgICAgYXMgbG9uZyBhcyBiYXNpYyBmdW5jdGlvbnMgYW5kIG1hY3JvcyB0byByZWFkL3dyaXRlIHRoZSBkZXZpY2VzCisgICAgICAgYW5kIHBlcmZvcm0gYnVzbWFzdGVyaW5nLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiV3JpdGluZyBDaGFyYWN0ZXIgRGV2aWNlIERyaXZlciBmb3IgTGludXgiCisgICAgICAgQXV0aG9yOiBSLiBCYXJ1Y2ggYW5kIEMuIFNjaHJvZXRlci4KKyAgICAgICBVUkw6CisgICAgICAgZnRwOi8vZnRwLmxscC5mdS1iZXJsaW4uZGUvcHViL2xpbnV4L0xJTlVYLUxBQi93aGl0ZXBhcGVycy9kcml2ZXJzCisgICAgICAgLnBzLmd6CisgICAgICAgS2V5d29yZHM6IGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycywgSS9PLCBzaWduYWxzLCBETUEsIGFjY2Vzc2luZworICAgICAgIHBvcnRzIGluIHVzZXIgc3BhY2UsIGtlcm5lbCBlbnZpcm9ubWVudC4KKyAgICAgICBEZXNjcmlwdGlvbjogNjggcGFnZXMgcGFwZXIgb24gd3JpdGluZyBjaGFyYWN0ZXIgZHJpdmVycy4gQSBsaXR0bGUKKyAgICAgICBiaXQgb2xkICgxLjk5MywgMS45OTQpIGFsdGhvdWdoIHN0aWxsIHVzZWZ1bC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkRlc2lnbiBhbmQgSW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY29uZCBFeHRlbmRlZAorICAgICAgIEZpbGVzeXN0ZW0iCisgICAgICAgQXV0aG9yOiBS6W15IENhcmQsIFRoZW9kb3JlIFRzJ28sIFN0ZXBoZW4gVHdlZWRpZS4KKyAgICAgICBVUkw6IGh0dHA6Ly93ZWIubWl0LmVkdS90eXRzby93d3cvbGludXgvZXh0MmludHJvLmh0bWwKKyAgICAgICBLZXl3b3JkczogZXh0MiwgbGludXggZnMgaGlzdG9yeSwgaW5vZGUsIGRpcmVjdG9yeSwgbGluaywgZGV2aWNlcywKKyAgICAgICBWRlMsIHBoeXNpY2FsIHN0cnVjdHVyZSwgcGVyZm9ybWFuY2UsIGJlbmNobWFya3MsIGV4dDJmcyBsaWJyYXJ5LAorICAgICAgIGV4dDJmcyB0b29scywgZTJmc2NrLgorICAgICAgIERlc2NyaXB0aW9uOiBQYXBlciB3cml0dGVuIGJ5IHRocmVlIG9mIHRoZSB0b3AgZXh0MiBoYWNrZXJzLgorICAgICAgIENvdmVycyBMaW51eCBmaWxlc3lzdGVtcyBoaXN0b3J5LCBleHQyIG1vdGl2YXRpb24sIGV4dDIgZmVhdHVyZXMsCisgICAgICAgZGVzaWduLCBwaHlzaWNhbCBzdHJ1Y3R1cmUgb24gZGlzaywgcGVyZm9ybWFuY2UsIGJlbmNobWFya3MsCisgICAgICAgZTJmc2NrJ3MgcGFzc2VzIGRlc2NyaXB0aW9uLi4uIEEgbXVzdCByZWFkIQorICAgICAgIE5vdGVzOiBUaGlzIHBhcGVyIHdhcyBmaXJzdCBwdWJsaXNoZWQgaW4gdGhlIFByb2NlZWRpbmdzIG9mIHRoZQorICAgICAgIEZpcnN0IER1dGNoIEludGVybmF0aW9uYWwgU3ltcG9zaXVtIG9uIExpbnV4LCBJU0JOIDkwLTM2Ny0wMzg1LTkuCisgICAgICAgCisgICAgICogVGl0bGU6ICJBbmFseXNpcyBvZiB0aGUgRXh0MmZzIHN0cnVjdHVyZSIKKyAgICAgICBBdXRob3I6IExvdWlzLURvbWluaXF1ZSBEdWJlYXUuCisgICAgICAgVVJMOiBodHRwOi8vc3RlcC5wb2x5bXRsLmNhL35sZGQvZXh0MmZzL2V4dDJmc190b2MuaHRtbAorICAgICAgIEtleXdvcmRzOiBleHQyLCBmaWxlc3lzdGVtLCBleHQyZnMuCisgICAgICAgRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIG9mIGV4dDIncyBibG9ja3MsIGRpcmVjdG9yaWVzLCBpbm9kZXMsCisgICAgICAgYml0bWFwcywgaW52YXJpYW50cy4uLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiSm91cm5hbGluZyB0aGUgTGludXggZXh0MmZzIEZpbGVzeXN0ZW0iCisgICAgICAgQXV0aG9yOiBTdGVwaGVuIEMuIFR3ZWVkaWUuCisgICAgICAgVVJMOgorICAgICAgIGZ0cDovL2Z0cC51ay5saW51eC5vcmcvcHViL2xpbnV4L3NjdC9mcy9qZnMvam91cm5hbC1kZXNpZ24ucHMuZ3oKKyAgICAgICBLZXl3b3JkczogZXh0Mywgam91cm5hbGluZy4KKyAgICAgICBEZXNjcmlwdGlvbjogRXhjZWxsZW50IDgtcGFnZXMgcGFwZXIgZXhwbGFpbmluZyB0aGUgam91cm5hbGluZworICAgICAgIGNhcGFiaWxpdGllcyBhZGRlZCB0byBleHQyIGJ5IHRoZSBhdXRob3IsIHNob3dpbmcgZGlmZmVyZW50CisgICAgICAgcHJvYmxlbXMgZmFjZWQgYW5kIHRoZSBhbHRlcm5hdGl2ZXMgY2hvc2VuLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiS2VybmVsIEFQSSBjaGFuZ2VzIGZyb20gMi4wIHRvIDIuMiIKKyAgICAgICBBdXRob3I6IFJpY2hhcmQgR29vY2guCisgICAgICAgVVJMOgorICAgICAgIGh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvcG9ydGluZy10by0yLjIuaHRtbAorICAgICAgIEtleXdvcmRzOiAyLjIsIGNoYW5nZXMuCisgICAgICAgRGVzY3JpcHRpb246IEtlcm5lbCBmdW5jdGlvbnMvc3RydWN0dXJlcy92YXJpYWJsZXMgd2hpY2ggY2hhbmdlZAorICAgICAgIGZyb20gMi4wLnggdG8gMi4yLnguCisgICAgICAgCisgICAgICogVGl0bGU6ICJLZXJuZWwgQVBJIGNoYW5nZXMgZnJvbSAyLjIgdG8gMi40IgorICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KKyAgICAgICBVUkw6CisgICAgICAgaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvZG9jcy9wb3J0aW5nLXRvLTIuNC5odG1sCisgICAgICAgS2V5d29yZHM6IDIuNCwgY2hhbmdlcy4KKyAgICAgICBEZXNjcmlwdGlvbjogS2VybmVsIGZ1bmN0aW9ucy9zdHJ1Y3R1cmVzL3ZhcmlhYmxlcyB3aGljaCBjaGFuZ2VkCisgICAgICAgZnJvbSAyLjIueCB0byAyLjQueC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IEtlcm5lbCBNb2R1bGUgUHJvZ3JhbW1pbmcgR3VpZGUiCisgICAgICAgQXV0aG9yOiBPcmkgUG9tZXJhbnR6LgorICAgICAgIFVSTDogaHR0cDovL3d3dy50bGRwLm9yZy9MRFAvbGttcGcvbXBnLmh0bWwKKyAgICAgICBLZXl3b3JkczogbW9kdWxlcywgR1BMIGJvb2ssIC9wcm9jLCBpb2N0bHMsIHN5c3RlbSBjYWxscywKKyAgICAgICBpbnRlcnJ1cHQgaGFuZGxlcnMgLgorICAgICAgIERlc2NyaXB0aW9uOiBWZXJ5IG5pY2UgOTIgcGFnZXMgR1BMIGJvb2sgb24gdGhlIHRvcGljIG9mIG1vZHVsZXMKKyAgICAgICBwcm9ncmFtbWluZy4gTG90cyBvZiBleGFtcGxlcy4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkRldmljZSBGaWxlIFN5c3RlbSAoZGV2ZnMpIE92ZXJ2aWV3IgorICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvZGV2ZnMudHh0CisgICAgICAgS2V5d29yZHM6IGZpbGVzeXN0ZW0sIC9kZXYsIGRldmZzLCBkeW5hbWljIGRldmljZXMsIG1ham9yL21pbm9yCisgICAgICAgYWxsb2NhdGlvbiwgZGV2aWNlIG1hbmFnZW1lbnQuCisgICAgICAgRGVzY3JpcHRpb246IERvY3VtZW50IGRlc2NyaWJpbmcgUmljaGFyZCBHb29jaCdzIGNvbnRyb3ZlcnNpYWwKKyAgICAgICBkZXZmcywgd2hpY2ggYWxsb3dzIGZvciBkeW5hbWljIGRldmljZXMsIG9ubHkgc2hvd3MgcHJlc2VudAorICAgICAgIGRldmljZXMgaW4gL2RldiwgZ2V0cyByaWQgb2YgbWFqb3IvbWlub3IgbnVtYmVycyBhbGxvY2F0aW9uCisgICAgICAgcHJvYmxlbXMsIGFuZCBhbGxvd3MgZm9yIGh1bmRyZWRzIG9mIGlkZW50aWNhbCBkZXZpY2VzICh3aGljaCBzb21lCisgICAgICAgVVNCIHN5c3RlbXMgbWlnaHQgZGVtYW5kIHNvb24pLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiSS9PIEV2ZW50IEhhbmRsaW5nIFVuZGVyIExpbnV4IgorICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvaW8tZXZlbnRzLmh0bWwKKyAgICAgICBLZXl3b3JkczogSU8sIEkvTywgc2VsZWN0KDIpLCBwb2xsKDIpLCBGRHMsIGFpb19yZWFkKDIpLCByZWFkaW5lc3MKKyAgICAgICBldmVudCBxdWV1ZXMuCisgICAgICAgRGVzY3JpcHRpb246IEZyb20gdGhlIEludHJvZHVjdGlvbjogIkkvTyBFdmVudCBoYW5kbGluZyBpcyBhYm91dAorICAgICAgIGhvdyB5b3VyIE9wZXJhdGluZyBTeXN0ZW0gYWxsb3dzIHlvdSB0byBtYW5hZ2UgYSBsYXJnZSBudW1iZXIgb2YKKyAgICAgICBvcGVuIGZpbGVzIChmaWxlIGRlc2NyaXB0b3JzIGluIFVOSVgvUE9TSVgsIG9yIEZEcykgaW4geW91cgorICAgICAgIGFwcGxpY2F0aW9uLiBZb3Ugd2FudCB0aGUgT1MgdG8gbm90aWZ5IHlvdSB3aGVuIEZEcyBiZWNvbWUgYWN0aXZlCisgICAgICAgKGhhdmUgZGF0YSByZWFkeSB0byBiZSByZWFkIG9yIGFyZSByZWFkeSBmb3Igd3JpdGluZykuIElkZWFsbHkgeW91CisgICAgICAgd2FudCBhIG1lY2hhbmlzbSB0aGF0IGlzIHNjYWxhYmxlLiBUaGlzIG1lYW5zIGEgbGFyZ2UgbnVtYmVyIG9mCisgICAgICAgaW5hY3RpdmUgRkRzIGNvc3QgdmVyeSBsaXR0bGUgaW4gbWVtb3J5IGFuZCBDUFUgdGltZSB0byBtYW5hZ2UiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIEtlcm5lbCBIYWNraW5nIEhPV1RPIgorICAgICAgIEF1dGhvcjogVmFyaW91cyBUYWxlbnRlZCBQZW9wbGUsIGFuZCBSdXN0eS4KKyAgICAgICBVUkw6CisgICAgICAgaHR0cDovL3d3dy5saXNvbGVnLm5ldC9kb2MvS2VybmVsLUhhY2tpbmctSE9XVE8va2VybmVsLWhhY2tpbmctSE9XCisgICAgICAgVE8uaHRtbAorICAgICAgIEtleXdvcmRzOiBIT1dUTywga2VybmVsIGNvbnRleHRzLCBkZWFkbG9jaywgbG9ja2luZywgbW9kdWxlcywKKyAgICAgICBzeW1ib2xzLCByZXR1cm4gY29udmVudGlvbnMuCisgICAgICAgRGVzY3JpcHRpb246IEZyb20gdGhlIEludHJvZHVjdGlvbjogIlBsZWFzZSB1bmRlcnN0YW5kIHRoYXQgSQorICAgICAgIG5ldmVyIHdhbnRlZCB0byB3cml0ZSB0aGlzIGRvY3VtZW50LCBiZWluZyBncm9zc2x5IHVuZGVycXVhbGlmaWVkLAorICAgICAgIGJ1dCBJIGFsd2F5cyB3YW50ZWQgdG8gcmVhZCBpdCwgYW5kIHRoaXMgd2FzIHRoZSBvbmx5IHdheS4gSQorICAgICAgIHNpbXBseSBleHBsYWluIHNvbWUgYmVzdCBwcmFjdGljZXMsIGFuZCBnaXZlIHJlYWRpbmcgZW50cnktcG9pbnRzCisgICAgICAgaW50byB0aGUga2VybmVsIHNvdXJjZXMuIEkgYXZvaWQgaW1wbGVtZW50YXRpb24gZGV0YWlsczogdGhhdCdzCisgICAgICAgd2hhdCB0aGUgY29kZSBpcyBmb3IsIGFuZCBJIGlnbm9yZSB3aG9sZSB0cmFjdHMgb2YgdXNlZnVsCisgICAgICAgcm91dGluZXMuIFRoaXMgZG9jdW1lbnQgYXNzdW1lcyBmYW1pbGlhcml0eSB3aXRoIEMsIGFuZCBhbgorICAgICAgIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUga2VybmVsIGlzLCBhbmQgaG93IGl0IGlzIHVzZWQuIEl0IHdhcworICAgICAgIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgdGhlIDIuMyBrZXJuZWxzLCBidXQgbmVhcmx5IGFsbCBvZiBpdAorICAgICAgIGFwcGxpZXMgdG8gMi4yIHRvbzsgMi4wIGlzIHNsaWdodGx5IGRpZmZlcmVudCIuCisgICAgICAgCisgICAgICogVGl0bGU6ICJBTFNBIDAuNS4wIERldmVsb3BlciBkb2N1bWVudGF0aW9uIgorICAgICAgIEF1dGhvcjogU3RlcGhhbiAnSnVtcHknIEJhcnRlbHMgLgorICAgICAgIFVSTDogaHR0cDovL3d3dy5tYXRoLlRVLUJlcmxpbi5kZS9+c2JhcnRlbHMvYWxzYS8KKyAgICAgICBLZXl3b3JkczogQUxTQSwgc291bmQsIHNvdW5kY2FyZCwgZHJpdmVyLCBsb3dsZXZlbCwgaGFyZHdhcmUuCisgICAgICAgRGVzY3JpcHRpb246IEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZSBmb3IgZGV2ZWxvcGVycywKKyAgICAgICBib3RoIGF0IGtlcm5lbCBhbmQgdXNlci1sZXZlbCBzaWRlcy4gV29yayBpbiBwcm9ncmVzcy4gQUxTQSBpcworICAgICAgIHN1cHBvc2VkIHRvIGJlIExpbnV4J3MgbmV4dCBnZW5lcmF0aW9uIHNvdW5kIGFyY2hpdGVjdHVyZS4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlByb2dyYW1taW5nIEd1aWRlIGZvciBMaW51eCBVU0IgRGV2aWNlIERyaXZlcnMiCisgICAgICAgQXV0aG9yOiBEZXRsZWYgRmxpZWdsLgorICAgICAgIFVSTDogaHR0cDovL3VzYi5pbi50dW0uZGUvdXNiZG9jLworICAgICAgIEtleXdvcmRzOiBVU0IsIHVuaXZlcnNhbCBzZXJpYWwgYnVzLgorICAgICAgIERlc2NyaXB0aW9uOiBBIG11c3QtcmVhZC4gRnJvbSB0aGUgUHJlZmFjZTogIlRoaXMgZG9jdW1lbnQgc2hvdWxkCisgICAgICAgZ2l2ZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgVVNCCisgICAgICAgc3Vic3lzdGVtIGFuZCBpdHMgQVBJIGZvciBVU0IgZGV2aWNlIGRyaXZlcnMuIFRoZSBmaXJzdCBzZWN0aW9uCisgICAgICAgd2lsbCBkZWFsIHdpdGggdGhlIGJhc2ljcyBvZiBVU0IgZGV2aWNlcy4gWW91IHdpbGwgbGVhcm4gYWJvdXQKKyAgICAgICBkaWZmZXJlbnQgdHlwZXMgb2YgZGV2aWNlcyBhbmQgdGhlaXIgcHJvcGVydGllcy4gR29pbmcgaW50byBkZXRhaWwKKyAgICAgICB5b3Ugd2lsbCBzZWUgaG93IFVTQiBkZXZpY2VzIGNvbW11bmljYXRlIG9uIHRoZSBidXMuIFRoZSBzZWNvbmQKKyAgICAgICBzZWN0aW9uIGdpdmVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBMaW51eCBVU0Igc3Vic3lzdGVtIFsyXSBhbmQgdGhlCisgICAgICAgZGV2aWNlIGRyaXZlciBmcmFtZXdvcmsuIFRoZW4gdGhlIEFQSSBhbmQgaXRzIGRhdGEgc3RydWN0dXJlcyB3aWxsCisgICAgICAgYmUgZXhwbGFpbmVkIHN0ZXAgYnkgc3RlcC4gVGhlIGxhc3Qgc2VjdGlvbiBvZiB0aGlzIGRvY3VtZW50CisgICAgICAgY29udGFpbnMgYSByZWZlcmVuY2Ugb2YgYWxsIEFQSSBjYWxscyBhbmQgdGhlaXIgcmV0dXJuIGNvZGVzIi4KKyAgICAgICBOb3RlczogQmV3YXJlOiB0aGUgbWFpbiBwYWdlIHN0YXRlczogIlRoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZQorICAgICAgIHB1Ymxpc2hlZCwgcHJpbnRlZCBvciB1c2VkIGluIGV4Y2VycHRzIHdpdGhvdXQgZXhwbGljaXQgcGVybWlzc2lvbgorICAgICAgIG9mIHRoZSBhdXRob3IiLiBGb3J0dW5hdGVseSwgaXQgbWF5IHN0aWxsIGJlIHJlYWQuLi4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlRvdXIgT2YgdGhlIExpbnV4IEtlcm5lbCBTb3VyY2UiCisgICAgICAgQXV0aG9yOiBWaWpvIENoZXJpYW4uCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lmdlb2NpdGllcy5jb20vdmlqb2MvdG9sa3MvdG9sa3MuaHRtbAorICAgICAgIEtleXdvcmRzOiAuCisgICAgICAgRGVzY3JpcHRpb246IEEgY2xhc3NpYyBvZiB0aGlzIHBhZ2UhIFdhcyBsb3N0IGZvciBhIHdoaWxlIGFuZCBpcworICAgICAgIGJhY2sgYWdhaW4uIFRoYW5rcyBWaWpvISBUT0xLUzogdGhlIG5hbWUgc2F5cyBpdCBhbGwuIEEgdG91ciBvZgorICAgICAgIHRoZSBzb3VyY2VzLCBkZXNjcmliaW5nIGRpcmVjdG9yaWVzLCBmaWxlcywgdmFyaWFibGVzLCBkYXRhCisgICAgICAgc3RydWN0dXJlcy4uLiBJdCBjb3ZlcnMgZ2VuZXJhbCBzdHVmZiwgZGV2aWNlIGRyaXZlcnMsCisgICAgICAgZmlsZXN5c3RlbXMsIElQQyBhbmQgTmV0d29ya2luZyBDb2RlLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggS2VybmVsIE1haWxpbmcgTGlzdCBHbG9zc2FyeSIKKyAgICAgICBBdXRob3I6IEpvaG4gTGV2b24uCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lm1vdmVtZW50LnVrbGludXgubmV0L2dsb3NzYXJ5Lmh0bWwKKyAgICAgICBLZXl3b3JkczogZ2xvc3NhcnksIHRlcm1zLCBsaW51eC1rZXJuZWwuCisgICAgICAgRGVzY3JpcHRpb246IEZyb20gdGhlIGludHJvZHVjdGlvbjogIlRoaXMgZ2xvc3NhcnkgaXMgaW50ZW5kZWQgYXMKKyAgICAgICBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHNvbWUgb2YgdGhlIGFjcm9ueW1zIGFuZCB0ZXJtcyB5b3UgbWF5IGhlYXIKKyAgICAgICBkdXJpbmcgZGlzY3Vzc2lvbiBvZiB0aGUgTGludXgga2VybmVsIi4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IEtlcm5lbCBMb2NraW5nIEhPV1RPIgorICAgICAgIEF1dGhvcjogVmFyaW91cyBUYWxlbnRlZCBQZW9wbGUsIGFuZCBSdXN0eS4KKyAgICAgICBVUkw6CisgICAgICAgaHR0cDovL25ldGZpbHRlci5rZXJuZWxub3Rlcy5vcmcvdW5yZWxpYWJsZS1ndWlkZXMva2VybmVsLWxvY2tpbmctCisgICAgICAgSE9XVE8uaHRtbAorICAgICAgIEtleXdvcmRzOiBsb2NrcywgbG9ja2luZywgc3BpbmxvY2ssIHNlbWFwaG9yZSwgYXRvbWljLCByYWNlCisgICAgICAgY29uZGl0aW9uLCBib3R0b20gaGFsdmVzLCB0YXNrbGV0cywgc29mdGlycXMuCisgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbDogZG9jdW1lbnQgZGVzY3JpYmluZyB0aGUKKyAgICAgICBsb2NraW5nIHN5c3RlbSBpbiB0aGUgTGludXggS2VybmVsIGVpdGhlciBpbiB1bmlwcm9jZXNzb3Igb3IgU01QCisgICAgICAgc3lzdGVtcy4KKyAgICAgICBOb3RlczogIkl0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBsYXRlciAoPjIuMy40NykgMi4zCisgICAgICAga2VybmVscywgYnV0IG1vc3Qgb2YgaXQgYXBwbGllcyB0byAyLjIgdG9vOyAyLjAgaXMgc2xpZ2h0bHkKKyAgICAgICBkaWZmZXJlbnQiLiBGcmVlbHkgcmVkaXN0cmlidXRhYmxlIHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyAgICAgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiUG9ydGluZyBMaW51eCAyLjAgRHJpdmVycyBUbyBMaW51eCAyLjI6IENoYW5nZXMgYW5kIE5ldworICAgICAgIEZlYXR1cmVzICIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMDUvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IHBvcnRzLCBwb3J0aW5nLgorICAgICAgIERlc2NyaXB0aW9uOiBBcnRpY2xlIGZyb20gTGludXggTWFnYXppbmUgb24gcG9ydGluZyBmcm9tIDIuMCB0bworICAgICAgIDIuMiBrZXJuZWxzLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiUG9ydGluZyBEZXZpY2UgRHJpdmVycyBUbyBMaW51eCAyLjI6IHBhcnQgSUkiCisgICAgICAgQXV0aG9yOiBBbGFuIENveC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTA2L2dlYXJfMDEuaHRtbAorICAgICAgIEtleXdvcmRzOiBwb3J0cywgcG9ydGluZy4KKyAgICAgICBEZXNjcmlwdGlvbjogU2Vjb25kIHBhcnQgb24gcG9ydGluZyBmcm9tIDIuMCB0byAyLjIga2VybmVscy4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkhvdyBUbyBNYWtlIFN1cmUgWW91ciBEcml2ZXIgV2lsbCBXb3JrIE9uIFRoZSBQb3dlcgorICAgICAgIE1hY2ludG9zaCIKKyAgICAgICBBdXRob3I6IFBhdWwgTWFja2VycmFzLgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMDcvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IE1hYywgUG93ZXIgTWFjaW50b3NoLCBwb3J0aW5nLCBkcml2ZXJzLCBjb21wYXRpYmlsaXR5LgorICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCisgICAgICAgCisgICAgICogVGl0bGU6ICJBbiBJbnRyb2R1Y3Rpb24gdG8gU0NTSSBEcml2ZXJzIgorICAgICAgIEF1dGhvcjogQWxhbiBDb3guCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0wOC9nZWFyXzAxLmh0bWwKKyAgICAgICBLZXl3b3JkczogU0NTSSwgZGV2aWNlLCBkcml2ZXIuCisgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkFkdmFuY2VkIFNDU0kgRHJpdmVycyBBbmQgT3RoZXIgVGFsZXMiCisgICAgICAgQXV0aG9yOiBBbGFuIENveC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTA5L2dlYXJfMDEuaHRtbAorICAgICAgIEtleXdvcmRzOiBTQ1NJLCBkZXZpY2UsIGRyaXZlciwgYWR2YW5jZWQuCisgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIldyaXRpbmcgTGludXggTW91c2UgRHJpdmVycyIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMTAvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IG1vdXNlLCBkcml2ZXIsIGdwbS4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTW9yZSBvbiBNb3VzZSBEcml2ZXJzIgorICAgICAgIEF1dGhvcjogQWxhbiBDb3guCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0xMS9nZWFyXzAxLmh0bWwKKyAgICAgICBLZXl3b3JkczogbW91c2UsIGRyaXZlciwgZ3BtLCByYWNlcywgYXN5bmNocm9ub3VzIEkvTy4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHN0aWxsIHNheXMgaXQgYWxsLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiV3JpdGluZyBWaWRlbzRsaW51eCBSYWRpbyBEcml2ZXIiCisgICAgICAgQXV0aG9yOiBBbGFuIENveC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTEyL2dlYXJfMDEuaHRtbAorICAgICAgIEtleXdvcmRzOiB2aWRlbzRsaW51eCwgZHJpdmVyLCByYWRpbywgcmFkaW8gZGV2aWNlcy4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVmlkZW80bGludXggRHJpdmVycywgUGFydCAxOiBWaWRlby1DYXB0dXJlIERldmljZSIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzIwMDAtMDEvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IHZpZGVvNGxpbnV4LCBkcml2ZXIsIHZpZGVvIGNhcHR1cmUsIGNhcHR1cmUgZGV2aWNlcywKKyAgICAgICBjYW1lcmEgZHJpdmVyLgorICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCisgICAgICAgCisgICAgICogVGl0bGU6ICJWaWRlbzRsaW51eCBEcml2ZXJzLCBQYXJ0IDI6IFZpZGVvLWNhcHR1cmUgRGV2aWNlcyIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzIwMDAtMDIvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IHZpZGVvNGxpbnV4LCBkcml2ZXIsIHZpZGVvIGNhcHR1cmUsIGNhcHR1cmUgZGV2aWNlcywKKyAgICAgICBjYW1lcmEgZHJpdmVyLCBjb250cm9sLCBxdWVyeSBjYXBhYmlsaXRpZXMsIGNhcGFiaWxpdHksIGZhY2lsaXR5LgorICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCisgICAgICAgCisgICAgICogVGl0bGU6ICJQQ0kgTWFuYWdlbWVudCBpbiBMaW51eCAyLjIiCisgICAgICAgQXV0aG9yOiBBbGFuIENveC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8yMDAwLTAzL2dlYXJfMDEuaHRtbAorICAgICAgIEtleXdvcmRzOiBQQ0ksIGJ1cywgYnVzLW1hc3RlcmluZy4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggMi40IEtlcm5lbCBJbnRlcm5hbHMiCisgICAgICAgQXV0aG9yOiBUaWdyYW4gQWl2YXppYW4gYW5kIENocmlzdG9waCBIZWxsd2lnLgorICAgICAgIFVSTDogaHR0cDovL3d3dy5tb3Nlcy51a2xpbnV4Lm5ldC9wYXRjaGVzL2xraS5odG1sCisgICAgICAgS2V5d29yZHM6IExpbnV4LCBrZXJuZWwsIGJvb3RpbmcsIFNNQiBib290LCBWRlMsIHBhZ2UgY2FjaGUuCisgICAgICAgRGVzY3JpcHRpb246IEEgbGl0dGxlIGJvb2sgdXNlZCBmb3IgYSBzaG9ydCB0cmFpbmluZyBjb3Vyc2UuCisgICAgICAgQ292ZXJzIGJ1aWxkaW5nIHRoZSBrZXJuZWwgaW1hZ2UsIGJvb3RpbmcgKGluY2x1ZGluZyBTTVAgYm9vdHVwKSwKKyAgICAgICBwcm9jZXNzIG1hbmFnZW1lbnQsIFZGUyBhbmQgbW9yZS4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IElQIE5ldHdvcmtpbmcuIEEgR3VpZGUgdG8gdGhlIEltcGxlbWVudGF0aW9uIGFuZAorICAgICAgIE1vZGlmaWNhdGlvbiBvZiB0aGUgTGludXggUHJvdG9jb2wgU3RhY2suIgorICAgICAgIEF1dGhvcjogR2xlbm4gSGVycmluLgorICAgICAgIFVSTDoKKyAgICAgICBodHRwOi8va2VybmVsbmV3Ymllcy5vcmcvZG9jdW1lbnRzL2lwbmV0d29ya2luZy9saW51eGlwbmV0d29ya2luZy4KKyAgICAgICBodG1sCisgICAgICAgS2V5d29yZHM6IG5ldHdvcmssIG5ldHdvcmtpbmcsIHByb3RvY29sLCBJUCwgVURQLCBUQ1AsIGNvbm5lY3Rpb24sCisgICAgICAgc29ja2V0LCByZWNlaXZpbmcsIHRyYW5zbWl0dGluZywgZm9yd2FyZGluZywgcm91dGluZywgcGFja2V0cywKKyAgICAgICBtb2R1bGVzLCAvcHJvYywgc2tfYnVmZiwgRklCLCB0YWdzLgorICAgICAgIERlc2NyaXB0aW9uOiBFeGNlbGxlbnQgcGFwZXIgZGV2b3RlZCB0byB0aGUgTGludXggSVAgTmV0d29ya2luZywKKyAgICAgICBleHBsYWluaW5nIGFueXRoaW5nIGZyb20gdGhlIGtlcm5lbCdzIHRvIHRoZSB1c2VyIHNwYWNlCisgICAgICAgY29uZmlndXJhdGlvbiB0b29scycgY29kZS4gVmVyeSBnb29kIHRvIGdldCBhIGdlbmVyYWwgb3ZlcnZpZXcgb2YKKyAgICAgICB0aGUga2VybmVsIG5ldHdvcmtpbmcgaW1wbGVtZW50YXRpb24gYW5kIHVuZGVyc3RhbmQgYWxsIHN0ZXBzCisgICAgICAgcGFja2V0cyBmb2xsb3cgZnJvbSB0aGUgdGltZSB0aGV5IGFyZSByZWNlaXZlZCBhdCB0aGUgbmV0d29yaworICAgICAgIGRldmljZSB0aWxsIHRoZXkgYXJlIGRlbGl2ZXJlZCB0byBhcHBsaWNhdGlvbnMuIFRoZSBzdHVkaWVkIGtlcm5lbAorICAgICAgIGNvZGUgaXMgZnJvbSAyLjIuMTQgdmVyc2lvbi4gUHJvdmlkZXMgY29kZSBmb3IgYSB3b3JraW5nIHBhY2tldAorICAgICAgIGRyb3BwZXIgZXhhbXBsZS4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkdldCB0aG9zZSBib2FyZHMgdGFsa2luZyB1bmRlciBMaW51eC4iCisgICAgICAgQXV0aG9yOiBBbGV4IEl2Y2hlbmtvLgorICAgICAgIFVSTDogaHR0cDovL3d3dy5lZG5tYWcuY29tL2Vkbm1hZy9yZWcvMjAwMC8wNjIyMjAwMC8xM2RmMi5odG0KKyAgICAgICBLZXl3b3JkczogZGF0YS1hY3F1aXNpdGlvbiBib2FyZHMsIGRyaXZlcnMsIG1vZHVsZXMsIGludGVycnVwdHMsCisgICAgICAgbWVtb3J5IGFsbG9jYXRpb24uCisgICAgICAgRGVzY3JpcHRpb246IEFydGljbGUgd3JpdHRlbiBmb3IgcGVvcGxlIHdpc2hpbmcgdG8gbWFrZSB0aGVpciBkYXRhCisgICAgICAgYWNxdWlzaXRpb24gYm9hcmRzIHdvcmsgb24gdGhlaXIgR05VL0xpbnV4IG1hY2hpbmVzLiBHaXZlcyBhIGJhc2ljCisgICAgICAgb3ZlcnZpZXcgb24gd3JpdGluZyBkcml2ZXJzLCBmcm9tIHRoZSBuYW1pbmcgb2YgZnVuY3Rpb25zIHRvCisgICAgICAgaW50ZXJydXB0IGhhbmRsaW5nLgorICAgICAgIE5vdGVzOiBUd28tcGFydHMgYXJ0aWNsZS4gUGFydCBJSSBpcyBhdAorICAgICAgIGh0dHA6Ly93d3cuZWRubWFnLmNvbS9lZG5tYWcvcmVnLzIwMDAvMDcwNjIwMDAvMTRkZi5odG0KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IFBDTUNJQSBQcm9ncmFtbWVyJ3MgR3VpZGUiCisgICAgICAgQXV0aG9yOiBEYXZpZCBIaW5kcy4KKyAgICAgICBVUkw6IGh0dHA6Ly9wY21jaWEtY3Muc291cmNlZm9yZ2UubmV0L2Z0cC9kb2MvUENNQ0lBLVBST0cuaHRtbAorICAgICAgIEtleXdvcmRzOiBQQ01DSUEuCisgICAgICAgRGVzY3JpcHRpb246ICJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUga2VybmVsIGRldmljZQorICAgICAgIGRyaXZlcnMgZm9yIHRoZSBMaW51eCBQQ01DSUEgQ2FyZCBTZXJ2aWNlcyBpbnRlcmZhY2UuIEl0IGFsc28KKyAgICAgICBkZXNjcmliZXMgaG93IHRvIHdyaXRlIHVzZXItbW9kZSB1dGlsaXRpZXMgZm9yIGNvbW11bmljYXRpbmcgd2l0aAorICAgICAgIENhcmQgU2VydmljZXMuCisgICAgICAgCisgICAgICogVGl0bGU6ICJUaGUgTGludXggS2VybmVsIE5GU0QgSW1wbGVtZW50YXRpb24iCisgICAgICAgQXV0aG9yOiBOZWlsIEJyb3duLgorICAgICAgIFVSTDoKKyAgICAgICBodHRwOi8vd3d3LmNzZS51bnN3LmVkdS5hdS9+bmVpbGIvb3NzL2xpbnV4LWNvbW1lbnRhcnkvbmZzZC5odG1sCisgICAgICAgS2V5d29yZHM6IGtuZnNkLCBuZnNkLCBORlMsIFJQQywgbG9ja2QsIG1vdW50ZCwgc3RhdGQuCisgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KKyAgICAgICBOb3RlczogQ292ZXJzIGtuZnNkJ3MgdmVyc2lvbiAxLjQuNyAocGF0Y2ggYWdhaW5zdCAyLjIuNyBrZXJuZWwpLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiQSBMaW51eCB2bSBSRUFETUUiCisgICAgICAgQXV0aG9yOiBLYW5vaiBTYXJjYXIuCisgICAgICAgVVJMOiBodHRwOi8vcmVhbGl0eS5zZ2kuY29tL2thbm9qX2VuZ3Ivdm0yMjkuaHRtbAorICAgICAgIEtleXdvcmRzOiB2aXJ0dWFsIG1lbW9yeSwgbW0sIHBnZCwgdm1hLCBwYWdlLCBwYWdlIGZsYWdzLCBwYWdlCisgICAgICAgY2FjaGUsIHN3YXAgY2FjaGUsIGtzd2FwZC4KKyAgICAgICBEZXNjcmlwdGlvbjogVGVsZWdyYXBoaWMsIHNob3J0IGRlc2NyaXB0aW9ucyBhbmQgZGVmaW5pdGlvbnMKKyAgICAgICByZWxhdGluZyB0aGUgTGludXggdmlydHVhbCBtZW1vcnkgaW1wbGVtZW50YXRpb24uCisgICAgICAgCisgICAgICogVGl0bGU6ICIobmVhcmx5KSBDb21wbGV0ZSBMaW51eCBMb2FkYWJsZSBLZXJuZWwgTW9kdWxlcy4gVGhlCisgICAgICAgZGVmaW5pdGl2ZSBndWlkZSBmb3IgaGFja2VycywgdmlydXMgY29kZXJzIGFuZCBzeXN0ZW0KKyAgICAgICBhZG1pbmlzdHJhdG9ycy4iCisgICAgICAgQXV0aG9yOiBwcmFnbWF0aWMvVEhDLgorICAgICAgIFVSTDogaHR0cDovL3BhY2tldHN0b3JtLnNlY3VyaWZ5LmNvbS9ncm91cHMvdGhjL0xLTV9IQUNLSU5HLmh0bWwKKyAgICAgICBLZXl3b3Jkczogc3lzY2FsbHMsIGludGVyY2VwdCwgaGlkZSwgYWJ1c2UsIHN5bWJvbCB0YWJsZS4KKyAgICAgICBEZXNjcmlwdGlvbjogSW50ZXJlc3RpbmcgcGFwZXIgb24gaG93IHRvIGFidXNlIHRoZSBMaW51eCBrZXJuZWwgaW4KKyAgICAgICBvcmRlciB0byBpbnRlcmNlcHQgYW5kIG1vZGlmeSBzeXNjYWxscywgbWFrZQorICAgICAgIGZpbGVzL2RpcmVjdG9yaWVzL3Byb2Nlc3NlcyBpbnZpc2libGUsIGJlY29tZSByb290LCBoaWphY2sgdHR5cywKKyAgICAgICB3cml0ZSBrZXJuZWwgbW9kdWxlcyBiYXNlZCB2aXJ1cy4uLiBhbmQgc29sdXRpb25zIGZvciBhZG1pbnMgdG8KKyAgICAgICBhdm9pZCBhbGwgdGhvc2UgYWJ1c2VzLgorICAgICAgIE5vdGVzOiBGb3IgMi4wLngga2VybmVscy4gR2l2ZXMgZ3VpZGFuY2VzIHRvIHBvcnQgaXQgdG8gMi4yLngKKyAgICAgICBrZXJuZWxzLiBBbHNvIGF2YWlsYWJsZSBpbiB0eHQgZm9ybWF0IGF0CisgICAgICAgaHR0cDovL3d3dy5ibGFja25lbWVzaXMub3JnL2hhY2tpbmcvdHh0L2NsbGttLnR4dAorICAgICAgIAorICAgICBCT09LUzogKE5vdCBvbi1saW5lKQorICAgCisgICAgICogVGl0bGU6ICJMaW51eCBEZXZpY2UgRHJpdmVycyIKKyAgICAgICBBdXRob3I6IEFsZXNzYW5kcm8gUnViaW5pLgorICAgICAgIFB1Ymxpc2hlcjogTydSZWlsbHkgJiBBc3NvY2lhdGVzLgorICAgICAgIERhdGU6IDE5OTguCisgICAgICAgUGFnZXM6IDQzOS4KKyAgICAgICBJU0JOOiAxLTU2NTkyLTI5Mi0xCisgICAgICAgCisgICAgICogVGl0bGU6ICJMaW51eCBEZXZpY2UgRHJpdmVycywgMm5kIEVkaXRpb24iCisgICAgICAgQXV0aG9yOiBBbGVzc2FuZHJvIFJ1YmluaSBhbmQgSm9uYXRoYW4gQ29yYmV0LgorICAgICAgIFB1Ymxpc2hlcjogTydSZWlsbHkgJiBBc3NvY2lhdGVzLgorICAgICAgIERhdGU6IDIwMDEuCisgICAgICAgUGFnZXM6IDU4Ni4KKyAgICAgICBJU0JOOiAwLTU5NjAwLTAwOC0xCisgICAgICAgTm90ZXM6IEZ1cnRoZXIgaW5mb3JtYXRpb24gaW4KKyAgICAgICBodHRwOi8vd3d3Lm9yZWlsbHkuY29tL2NhdGFsb2cvbGludXhkcml2ZTIvCisgICAgICAgCisgICAgICogVGl0bGU6ICJMaW51eCBLZXJuZWwgSW50ZXJuYWxzIgorICAgICAgIEF1dGhvcjogTWljaGFlbCBCZWNrLgorICAgICAgIFB1Ymxpc2hlcjogQWRkaXNvbi1XZXNsZXkuCisgICAgICAgRGF0ZTogMTk5Ny4KKyAgICAgICBJU0JOOiAwLTIwMS0zMzE0My04IChzZWNvbmQgZWRpdGlvbikKKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlRoZSBEZXNpZ24gb2YgdGhlIFVOSVggT3BlcmF0aW5nIFN5c3RlbSIKKyAgICAgICBBdXRob3I6IE1hdXJpY2UgSi4gQmFjaC4KKyAgICAgICBQdWJsaXNoZXI6IFByZW50aWNlIEhhbGwuCisgICAgICAgRGF0ZTogMTk4Ni4KKyAgICAgICBQYWdlczogNDcxLgorICAgICAgIElTQk46IDAtMTMtMjAxNzU3LTEKKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlRoZSBEZXNpZ24gYW5kIEltcGxlbWVudGF0aW9uIG9mIHRoZSA0LjMgQlNEIFVOSVgKKyAgICAgICBPcGVyYXRpbmcgU3lzdGVtIgorICAgICAgIEF1dGhvcjogU2FtdWVsIEouIExlZmZsZXIsIE1hcnNoYWxsIEtpcmsgTWNLdXNpY2ssIE1pY2hhZWwgSi4KKyAgICAgICBLYXJlbHMsIEpvaG4gUy4gUXVhcnRlcm1hbi4KKyAgICAgICBQdWJsaXNoZXI6IEFkZGlzb24tV2VzbGV5LgorICAgICAgIERhdGU6IDE5ODkgKHJlcHJpbnRlZCB3aXRoIGNvcnJlY3Rpb25zIG9uIE9jdG9iZXIsIDE5OTApLgorICAgICAgIElTQk46IDAtMjAxLTA2MTk2LTEKKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlRoZSBEZXNpZ24gYW5kIEltcGxlbWVudGF0aW9uIG9mIHRoZSA0LjQgQlNEIFVOSVgKKyAgICAgICBPcGVyYXRpbmcgU3lzdGVtIgorICAgICAgIEF1dGhvcjogTWFyc2hhbGwgS2lyayBNY0t1c2ljaywgS2VpdGggQm9zdGljLCBNaWNoYWVsIEouIEthcmVscywKKyAgICAgICBKb2huIFMuIFF1YXJ0ZXJtYW4uCisgICAgICAgUHVibGlzaGVyOiBBZGRpc29uLVdlc2xleS4KKyAgICAgICBEYXRlOiAxOTk2LgorICAgICAgIElTQk46IDAtMjAxLTU0OTc5LTQKKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlByb2dyYW1tYXRpb24gTGludXggMi4wIEFQSSBzeXN0ZW1lIGV0IGZvbmN0aW9ubmVtZW50IGR1CisgICAgICAgbm95YXUiCisgICAgICAgQXV0aG9yOiBSZW15IENhcmQsIEVyaWMgRHVtYXMsIEZyYW5jayBNZXZlbC4KKyAgICAgICBQdWJsaXNoZXI6IEV5cm9sbGVzLgorICAgICAgIERhdGU6IDE5OTcuCisgICAgICAgUGFnZXM6IDUyMC4KKyAgICAgICBJU0JOOiAyLTIxMi0wODkzMi01CisgICAgICAgTm90ZXM6IEZyZW5jaC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlRoZSBMaW51eCBLZXJuZWwgQm9vayIKKyAgICAgICBBdXRob3I6IFJlbXkgQ2FyZCwgRXJpYyBEdW1hcywgRnJhbmNrIE1ldmVsLgorICAgICAgIFB1Ymxpc2hlcjogSm9obiBXaWxleSAmIFNvbnMuCisgICAgICAgRGF0ZTogMTk5OC4KKyAgICAgICBJU0JOOiAwLTQ3MS05ODE0MS05CisgICAgICAgTm90ZXM6IEVuZ2xpc2ggdHJhbnNsYXRpb24uCisgICAgICAgCisgICAgICogVGl0bGU6ICJMaW51eCAyLjAiCisgICAgICAgQXV0aG9yOiBSZW15IENhcmQsIEVyaWMgRHVtYXMsIEZyYW5jayBNZXZlbC4KKyAgICAgICBQdWJsaXNoZXI6IEdlc3Rp824gMjAwMC4KKyAgICAgICBEYXRlOiAxOTk3LgorICAgICAgIFBhZ2VzOiA1MDEuCisgICAgICAgSVNCTjogOC00ODAtODgyMDgtNQorICAgICAgIE5vdGVzOiBTcGFuaXNoIHRyYW5zbGF0aW9uLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVW5peCBpbnRlcm5hbHMgLS0gdGhlIG5ldyBmcm9udGllcnMiCisgICAgICAgQXV0aG9yOiBVcmVzaCBWYWhhbGlhLgorICAgICAgIFB1Ymxpc2hlcjogUHJlbnRpY2UgSGFsbC4KKyAgICAgICBEYXRlOiAxOTk2LgorICAgICAgIFBhZ2VzOiA2MDAuCisgICAgICAgSVNCTjogMC0xMy0xMDE5MDgtMgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggQ29yZSBLZXJuZWwgQ29tbWVudGFyeS4gR3VpZGUgdG8gSW5zaWRlcidzIEtub3dsZWRnZQorICAgICAgIG9uIHRoZSBDb3JlIEtlcm5lbCBvZiB0aGUgTGludXggQ29kZSIKKyAgICAgICBBdXRob3I6IFNjb3R0IE1heHdlbGwuCisgICAgICAgUHVibGlzaGVyOiBDb3Jpb2xpcy4KKyAgICAgICBEYXRlOiAxOTk5LgorICAgICAgIFBhZ2VzOiA1OTIuCisgICAgICAgSVNCTjogMS01NzYxMC00NjktOQorICAgICAgIE5vdGVzOiBDRC1ST00gaW5jbHVkZWQuIExpbmUgYnkgbGluZSBjb21tZW50YXJ5IG9mIHRoZSBrZXJuZWwKKyAgICAgICBjb2RlLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggSVAgU3RhY2tzIENvbW1lbnRhcnkiCisgICAgICAgQXV0aG9yOiBTdGVwaGVuIFNhdGNoZWxsIGFuZCBIQkogQ2xpZmZvcmQuCisgICAgICAgUHVibGlzaGVyOiBDb3Jpb2xpcy4KKyAgICAgICBEYXRlOiAyMDAwLgorICAgICAgIFBhZ2VzOiA/Pz8uCisgICAgICAgSVNCTjogMS01NzYxMC00NzAtMgorICAgICAgIE5vdGVzOiBMaW5lIGJ5IGxpbmUgc291cmNlIGNvZGUgY29tbWVudGFyeSBib29rLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiUHJvZ3JhbW1pbmcgZm9yIHRoZSByZWFsIHdvcmxkIC0gUE9TSVguNCIKKyAgICAgICBBdXRob3I6IEJpbGwgTy4gR2FsbG1laXN0ZXIuCisgICAgICAgUHVibGlzaGVyOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMsIEluYy4uCisgICAgICAgRGF0ZTogMTk5NS4KKyAgICAgICBQYWdlczogPz8/LgorICAgICAgIElTQk46IEktNTY1OTItMDc0LTAKKyAgICAgICBOb3RlczogVGhvdWdoIG5vdCBiZWluZyBkaXJlY3RseSBhYm91dCBMaW51eCwgTGludXggYWltcyB0byBiZQorICAgICAgIFBPU0lYLiBHb29kIHJlZmVyZW5jZS4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlVuZGVyc3RhbmRpbmcgdGhlIExpbnV4IEtlcm5lbCIKKyAgICAgICBBdXRob3I6IERhbmllbCBQLiBCb3ZldCBhbmQgTWFyY28gQ2VzYXRpLgorICAgICAgIFB1Ymxpc2hlcjogTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLgorICAgICAgIERhdGU6IDIwMDAuCisgICAgICAgUGFnZXM6IDcwMi4KKyAgICAgICBJU0JOOiAwLTU5Ni0wMDAwMi0yCisgICAgICAgTm90ZXM6IEZ1cnRoZXIgaW5mb3JtYXRpb24gaW4KKyAgICAgICBodHRwOi8vd3d3Lm9yZWlsbHkuY29tL2NhdGFsb2cvbGludXhrZXJuZWwvCisgICAgICAgCisgICAgIE1JU0NFTExBTkVPVVM6CisgICAKKyAgICAgKiBOYW1lOiBsaW51eC9Eb2N1bWVudGF0aW9uCisgICAgICAgQXV0aG9yOiBNYW55LgorICAgICAgIFVSTDogSnVzdCBsb29rIGluc2lkZSB5b3VyIGtlcm5lbCBzb3VyY2VzLgorICAgICAgIEtleXdvcmRzOiBhbnl0aGluZywgRG9jQm9vay4KKyAgICAgICBEZXNjcmlwdGlvbjogRG9jdW1lbnRhdGlvbiB0aGF0IGNvbWVzIHdpdGggdGhlIGtlcm5lbCBzb3VyY2VzLAorICAgICAgIGluc2lkZSB0aGUgRG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIFNvbWUgcGFnZXMgZnJvbSB0aGlzIGRvY3VtZW50CisgICAgICAgKGluY2x1ZGluZyB0aGlzIGRvY3VtZW50IGl0c2VsZikgaGF2ZSBiZWVuIG1vdmVkIHRoZXJlLCBhbmQgbWlnaHQKKyAgICAgICBiZSBtb3JlIHVwIHRvIGRhdGUgdGhhbiB0aGUgd2ViIHZlcnNpb24uCisgICAgICAgCisgICAgICogTmFtZTogIkxpbnV4IFNvdXJjZSBEcml2ZXIiCisgICAgICAgVVJMOiBodHRwOi8vbHNkLmxpbnV4LmN6CisgICAgICAgS2V5d29yZHM6IEJyb3dzaW5nIHNvdXJjZSBjb2RlLgorICAgICAgIERlc2NyaXB0aW9uOiAiTGludXggU291cmNlIERyaXZlciAoTFNEKSBpcyBhbiBhcHBsaWNhdGlvbiwgd2hpY2gKKyAgICAgICBjYW4gbWFrZSBicm93c2luZyBzb3VyY2UgY29kZXMgb2YgTGludXgga2VybmVsIGVhc2llciB0aGFuIHlvdSBjYW4KKyAgICAgICBpbWFnaW5lLiBZb3UgY2FuIHNlbGVjdCBiZXR3ZWVuIG11bHRpcGxlIHZlcnNpb25zIG9mIGtlcm5lbCAoZS5nLgorICAgICAgIDAuMDEsIDEuMC4wLCAyLjAuMzMsIDIuMC4zNHByZTEzLCAyLjAuMCwgMi4xLjEwMSBldGMuKS4gV2l0aCBMU0QKKyAgICAgICB5b3UgY2FuIHNlYXJjaCBMaW51eCBrZXJuZWwgKGZ1bGx0ZXh0LCBtYWNyb3MsIHR5cGVzLCBmdW5jdGlvbnMKKyAgICAgICBhbmQgdmFyaWFibGVzKSBhbmQgTFNEIGNhbiBnZW5lcmF0ZSBwYXRjaGVzIGZvciB5b3Ugb24gdGhlIGZseQorICAgICAgIChmaWxlcywgZGlyZWN0b3JpZXMgb3Iga2VybmVsKSIuCisgICAgICAgCisgICAgICogTmFtZTogIkxpbnV4IEtlcm5lbCBTb3VyY2UgUmVmZXJlbmNlIgorICAgICAgIEF1dGhvcjogVGhvbWFzIEdyYWljaGVuLgorICAgICAgIFVSTDogaHR0cDovL2lubm9taW5hdGUub3JnL35ncmFpY2hlbi9wcm9qZWN0cy9sa3NyLworICAgICAgIEtleXdvcmRzOiBDVlMsIHdlYiwgY3Zzd2ViLCBicm93c2luZyBzb3VyY2UgY29kZS4KKyAgICAgICBEZXNjcmlwdGlvbjogV2ViIGludGVyZmFjZSB0byBhIENWUyBzZXJ2ZXIgd2l0aCB0aGUga2VybmVsCisgICAgICAgc291cmNlcy4gIkhlcmUgeW91IGNhbiBoYXZlIGEgbG9vayBhdCBhbnkgZmlsZSBvZiB0aGUgTGludXgga2VybmVsCisgICAgICAgc291cmNlcyBvZiBhbnkgdmVyc2lvbiBzdGFydGluZyBmcm9tIDEuMCB1cCB0byB0aGUgKGRhaWx5IHVwZGF0ZWQpCisgICAgICAgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZS4gQWxzbyB5b3UgY2FuIGNoZWNrIHRoZSBkaWZmZXJlbmNlcworICAgICAgIGJldHdlZW4gdHdvIHZlcnNpb25zIG9mIGEgZmlsZSIuCisgICAgICAgCisgICAgICogTmFtZTogIkNyb3NzLVJlZmVyZW5jaW5nIExpbnV4IgorICAgICAgIFVSTDogaHR0cDovL2x4ci5saW51eC5uby9zb3VyY2UvCisgICAgICAgS2V5d29yZHM6IEJyb3dzaW5nIHNvdXJjZSBjb2RlLgorICAgICAgIERlc2NyaXB0aW9uOiBBbm90aGVyIHdlYi1iYXNlZCBMaW51eCBrZXJuZWwgc291cmNlIGNvZGUgYnJvd3Nlci4KKyAgICAgICBMb3RzIG9mIGNyb3NzIHJlZmVyZW5jZXMgdG8gdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuIFlvdSBjYW4gc2VlCisgICAgICAgd2hlcmUgdGhleSBhcmUgZGVmaW5lZCBhbmQgd2hlcmUgdGhleSBhcmUgdXNlZC4KKyAgICAgICAKKyAgICAgKiBOYW1lOiAiTGludXggV2Vla2x5IE5ld3MiCisgICAgICAgVVJMOiBodHRwOi8vbHduLm5ldAorICAgICAgIEtleXdvcmRzOiBsYXRlc3Qga2VybmVsIG5ld3MuCisgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4gVGhlcmUncyBhIGZpeGVkIGtlcm5lbCBzZWN0aW9uCisgICAgICAgc3VtbWFyaXppbmcgZGV2ZWxvcGVycycgd29yaywgYnVnIGZpeGVzLCBuZXcgZmVhdHVyZXMgYW5kIHZlcnNpb25zCisgICAgICAgcHJvZHVjZWQgZHVyaW5nIHRoZSB3ZWVrLiBQdWJsaXNoZWQgZXZlcnkgVGh1cnNkYXkuCisgICAgICAgCisgICAgICogTmFtZTogIktlcm5lbCBUcmFmZmljIgorICAgICAgIFVSTDogaHR0cDovL3d3dy5rZXJuZWx0cmFmZmljLm9yZy9rZXJuZWwtdHJhZmZpYy8KKyAgICAgICBLZXl3b3JkczogbGludXgta2VybmVsIG1haWxpbmcgbGlzdCwgd2Vla2x5IGtlcm5lbCBuZXdzLgorICAgICAgIERlc2NyaXB0aW9uOiBXZWVrbHkgbmV3c2xldHRlciBjb3ZlcmluZyB0aGUgbW9zdCByZWxldmFudAorICAgICAgIGRpc2N1c3Npb25zIG9mIHRoZSBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0LgorICAgICAgIAorICAgICAqIE5hbWU6ICJDdVRUaU5HLmVER2UuTGlOdVgiCisgICAgICAgVVJMOiBodHRwOi8vZWRnZS5rZXJuZWxub3Rlcy5vcmcKKyAgICAgICBLZXl3b3JkczogY2hhbmdlbGlzdC4KKyAgICAgICBEZXNjcmlwdGlvbjogU2l0ZSB3aGljaCBwcm92aWRlcyB0aGUgY2hhbmdlbGlzdCBmb3IgZXZlcnkga2VybmVsCisgICAgICAgcmVsZWFzZS4gV2hhdCdzIG5ldywgd2hhdCdzIGJldHRlciwgd2hhdCdzIGNoYW5nZWQuIE15cmRyYWFsIHJlYWRzCisgICAgICAgdGhlIHBhdGNoZXMgYW5kIGRlc2NyaWJlcyB0aGVtLiBQb2ludGVycyB0byB0aGUgcGF0Y2hlcyBhcmUgdGhlcmUsCisgICAgICAgdG9vLgorICAgICAgIAorICAgICAqIE5hbWU6ICJOZXcgbGludXgta2VybmVsIE1haWxpbmcgTGlzdCBGQVEiCisgICAgICAgVVJMOiBodHRwOi8vd3d3LnR1eC5vcmcvbGttbC8KKyAgICAgICBLZXl3b3JkczogbGludXgta2VybmVsIG1haWxpbmcgbGlzdCBGQVEuCisgICAgICAgRGVzY3JpcHRpb246IGxpbnV4LWtlcm5lbCBpcyBhIG1haWxpbmcgbGlzdCBmb3IgZGV2ZWxvcGVycyB0bworICAgICAgIGNvbW11bmljYXRlLiBUaGlzIEZBUSBidWlsZHMgb24gdGhlIHByZXZpb3VzIGxpbnV4LWtlcm5lbCBtYWlsaW5nCisgICAgICAgbGlzdCBGQVEgbWFpbnRhaW5lZCBieSBGcm9od2FsdCBFZ2VyZXIsIHdobyBubyBsb25nZXIgbWFpbnRhaW5zCisgICAgICAgaXQuIFJlYWQgaXQgdG8gc2VlIGhvdyB0byBqb2luIHRoZSBtYWlsaW5nIGxpc3QuIERvemVucyBvZgorICAgICAgIGludGVyZXN0aW5nIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIGxpc3QsIExpbnV4LCBkZXZlbG9wZXJzICh3aG8KKyAgICAgICBpcyAuLi4/KSwgdGVybXMgKHdoYXQgaXMuLi4/KSBhcmUgYW5zd2VyZWQgaGVyZSB0b28uIEp1c3QgcmVhZCBpdC4KKyAgICAgICAKKyAgICAgKiBOYW1lOiAiTGludXggVmlydHVhbCBGaWxlIFN5c3RlbSIKKyAgICAgICBBdXRob3I6IFBldGVyIEouIEJyYWFtLgorICAgICAgIFVSTDogaHR0cDovL3d3dy5jb2RhLmNzLmNtdS5lZHUvZG9jL3RhbGtzL2xpbnV4dmZzLworICAgICAgIEtleXdvcmRzOiBzbGlkZXMsIFZGUywgaW5vZGUsIHN1cGVyYmxvY2ssIGRlbnRyeSwgZGNhY2hlLgorICAgICAgIERlc2NyaXB0aW9uOiBTZXQgb2Ygc2xpZGVzLCBwcmVzdW1hYmx5IGZyb20gYSBwcmVzZW50YXRpb24gb24gdGhlCisgICAgICAgTGludXggVkZTIGxheWVyLiBDb3ZlcnMgdmVyc2lvbiAyLjEueCwgd2l0aCBkZW50cmllcyBhbmQgdGhlCisgICAgICAgZGNhY2hlLgorICAgICAgIAorICAgICAqIE5hbWU6ICJHYXJ5J3MgRW5jeWNsb3BlZGlhIC0gVGhlIExpbnV4IEtlcm5lbCIKKyAgICAgICBBdXRob3I6IEdhcnkgKEkgc3VwcG9zZS4uLikuCisgICAgICAgVVJMOiBodHRwOi8vbWVtYmVycy5hYS5uZXQvfnN3ZWFyL3BlZGlhL2tlcm5lbC5odG1sCisgICAgICAgS2V5d29yZHM6IGxpbmtzLCBub3QgZm91bmQgaGVyZT8uCisgICAgICAgRGVzY3JpcHRpb246IEdhcnkncyBFbmN5Y2xvcGVkaWEgZXhpc3RzIHRvIGFsbG93IHRoZSByYXBpZCBmaW5kaW5nCisgICAgICAgb2YgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgaW5mb3JtYXRpb24gb2YgaW50ZXJlc3QgdG8gR05VL0xpbnV4CisgICAgICAgdXNlcnMuIEl0IGhhcyBhYm91dCA0MDAwIGxpbmtzIHRvIGV4dGVybmFsIHBhZ2VzIGluIDE1MCBtYWpvcgorICAgICAgIGNhdGVnb3JpZXMuIFRoaXMgbGluayBpcyBmb3Iga2VybmVsLXNwZWNpZmljIGxpbmtzLCBkb2N1bWVudHMsCisgICAgICAgc2l0ZXMuLi4gTG9vayB0aGVyZSBpZiB5b3UgY291bGQgbm90IGZpbmQgaGVyZSB3aGF0IHlvdSB3ZXJlCisgICAgICAgbG9va2luZyBmb3IuCisgICAgICAgCisgICAgICogTmFtZTogIlRoZSBob21lIHBhZ2Ugb2YgTGludXgtTU0iCisgICAgICAgQXV0aG9yOiBUaGUgTGludXgtTU0gdGVhbS4KKyAgICAgICBVUkw6IGh0dHA6Ly9saW51eC1tbS5vcmcvCisgICAgICAgS2V5d29yZHM6IG1lbW9yeSBtYW5hZ2VtZW50LCBMaW51eC1NTSwgbW0gcGF0Y2hlcywgVE9ETywgZG9jcywKKyAgICAgICBtYWlsaW5nIGxpc3QuCisgICAgICAgRGVzY3JpcHRpb246IFNpdGUgZGV2b3RlZCB0byBMaW51eCBNZW1vcnkgTWFuYWdlbWVudCBkZXZlbG9wbWVudC4KKyAgICAgICBNZW1vcnkgcmVsYXRlZCBwYXRjaGVzLCBIT1dUT3MsIGxpbmtzLCBtbSBkZXZlbG9wZXJzLi4uIERvbid0IG1pc3MKKyAgICAgICBpdCBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgZGV2ZWxvcG1lbnQhCisgICAgICAgCisgICAgICogTmFtZTogIktlcm5lbCBOZXdiaWVzIElSQyBDaGFubmVsIgorICAgICAgIFVSTDogaHR0cDovL3d3dy5rZXJuZWxuZXdiaWVzLm9yZworICAgICAgIEtleXdvcmRzOiBJUkMsIG5ld2JpZXMsIGNoYW5uZWwsIGFza2luZyBkb3VidHMuCisgICAgICAgRGVzY3JpcHRpb246ICNrZXJuZWxuZXdiaWVzIG9uIGlyYy5vcGVucHJvamVjdHMubmV0LiBGcm9tIHRoZSB3ZWIKKyAgICAgICBwYWdlOiAiI2tlcm5lbG5ld2JpZXMgaXMgYW4gSVJDIG5ldHdvcmsgZGVkaWNhdGVkIHRvIHRoZSAnbmV3YmllJworICAgICAgIGtlcm5lbCBoYWNrZXIuIFRoZSBhdWRpZW5jZSBtb3N0bHkgY29uc2lzdHMgb2YgcGVvcGxlIHdobyBhcmUKKyAgICAgICBsZWFybmluZyBhYm91dCB0aGUga2VybmVsLCB3b3JraW5nIG9uIGtlcm5lbCBwcm9qZWN0cyBvcgorICAgICAgIHByb2Zlc3Npb25hbCBrZXJuZWwgaGFja2VycyB0aGF0IHdhbnQgdG8gaGVscCBsZXNzIHNlYXNvbmVkIGtlcm5lbAorICAgICAgIHBlb3BsZS4gWy4uLl0gI2tlcm5lbG5ld2JpZXMgaXMgb24gdGhlIE9wZW4gUHJvamVjdHMgSVJDIE5ldHdvcmssCisgICAgICAgdHJ5IGlyYy5vcGVucHJvamVjdHMubmV0IG9yIGlyYy48Y291bnRyeT4ub3BlbnByb2plY3RzLm5ldCBhcyB5b3VyCisgICAgICAgc2VydmVyIGFuZCB0aGVuIC9qb2luICNrZXJuZWxuZXdiaWVzIi4gSXQgYWxzbyBob3N0cyBhcnRpY2xlcywKKyAgICAgICBkb2N1bWVudHMsIEZBUXMuLi4KKyAgICAgICAKKyAgICAgKiBOYW1lOiAibGludXgta2VybmVsIG1haWxpbmcgbGlzdCBhcmNoaXZlcyBhbmQgc2VhcmNoIGVuZ2luZXMiCisgICAgICAgVVJMOiBodHRwOi8vd3d3LnV3c2cuaW5kaWFuYS5lZHUvaHlwZXJtYWlsL2xpbnV4L2tlcm5lbC9pbmRleC5odG1sCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lmtlcm5lbG5vdGVzLm9yZy9sbnhsaXN0cy9saW51eC1rZXJuZWwvCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lmdlb2NyYXdsZXIuY29tCisgICAgICAgS2V5d29yZHM6IGxpbnV4LWtlcm5lbCwgYXJjaGl2ZXMsIHNlYXJjaC4KKyAgICAgICBEZXNjcmlwdGlvbjogU29tZSBvZiB0aGUgbGludXgta2VybmVsIG1haWxpbmcgbGlzdCBhcmNoaXZlcnMuIElmCisgICAgICAgeW91IGhhdmUgYSBiZXR0ZXIvYW5vdGhlciBvbmUsIHBsZWFzZSBsZXQgbWUga25vdy4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorICAgRG9jdW1lbnQgbGFzdCB1cGRhdGVkIG9uIFRodSBKdW4gMjggMTU6MDk6MzkgQ0VTVCAyMDAxCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjRkMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTAsMCArMSwxNTExIEBACitGZWJydWFyeSAyMDAzICAgICAgICAgICAgIEtlcm5lbCBQYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgdjIuNS41OQorICAgICAgICAgICAgICAgICAgICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZm9sbG93aW5nIGlzIGEgY29uc29saWRhdGVkIGxpc3Qgb2YgdGhlIGtlcm5lbCBwYXJhbWV0ZXJzIGFzIGltcGxlbWVudGVkCisobW9zdGx5KSBieSB0aGUgX19zZXR1cCgpIG1hY3JvIGFuZCBzb3J0ZWQgaW50byBFbmdsaXNoIERpY3Rpb25hcnkgb3JkZXIKKyhkZWZpbmVkIGFzIGlnbm9yaW5nIGFsbCBwdW5jdHVhdGlvbiBhbmQgc29ydGluZyBkaWdpdHMgYmVmb3JlIGxldHRlcnMgaW4gYQorY2FzZSBpbnNlbnNpdGl2ZSBtYW5uZXIpLCBhbmQgd2l0aCBkZXNjcmlwdGlvbnMgd2hlcmUga25vd24uCisKK01vZHVsZSBwYXJhbWV0ZXJzIGZvciBsb2FkYWJsZSBtb2R1bGVzIGFyZSBzcGVjaWZpZWQgb25seSBhcyB0aGUKK3BhcmFtZXRlciBuYW1lIHdpdGggb3B0aW9uYWwgJz0nIGFuZCB2YWx1ZSBhcyBhcHByb3ByaWF0ZSwgc3VjaCBhczoKKworCW1vZHByb2JlIHVzYmNvcmUgYmxpbmtlbmxpZ2h0cz0xCisKK01vZHVsZSBwYXJhbWV0ZXJzIGZvciBtb2R1bGVzIHRoYXQgYXJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBpbWFnZQorYXJlIHNwZWNpZmllZCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2R1bGUgbmFtZSBwbHVzCisnLicgcGx1cyBwYXJhbWV0ZXIgbmFtZSwgd2l0aCAnPScgYW5kIHZhbHVlIGlmIGFwcHJvcHJpYXRlLCBzdWNoIGFzOgorCisJdXNiY29yZS5ibGlua2VubGlnaHRzPTEKKworVGhlIHRleHQgaW4gc3F1YXJlIGJyYWNrZXRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRlc2NyaXB0aW9uIHN0YXRlIHRoZQorcmVzdHJpY3Rpb25zIG9uIHRoZSBrZXJuZWwgZm9yIHRoZSBzYWlkIGtlcm5lbCBwYXJhbWV0ZXIgdG8gYmUgdmFsaWQuIFRoZQorcmVzdHJpY3Rpb25zIHJlZmVycmVkIHRvIGFyZSB0aGF0IHRoZSByZWxldmFudCBvcHRpb24gaXMgdmFsaWQgaWY6CisKKwlBQ1BJCUFDUEkgc3VwcG9ydCBpcyBlbmFibGVkLgorCUFMU0EJQUxTQSBzb3VuZCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJQVBJQwlBUElDIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlBUE0JQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJQVgyNQlBcHByb3ByaWF0ZSBBWC4yNSBzdXBwb3J0IGlzIGVuYWJsZWQuCisJQ0QJQXBwcm9wcmlhdGUgQ0Qgc3VwcG9ydCBpcyBlbmFibGVkLgorCURFVkZTCWRldmZzIHN1cHBvcnQgaXMgZW5hYmxlZC4gCisJRFJNCURpcmVjdCBSZW5kZXJpbmcgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuIAorCUVERAlCSU9TIEVuaGFuY2VkIERpc2sgRHJpdmUgU2VydmljZXMgKEVERCkgaXMgZW5hYmxlZAorCUVGSQlFRkkgUGFydGl0aW9uaW5nIChHUFQpIGlzIGVuYWJsZWQKKwlFSURFCUVJREUvQVRBUEkgc3VwcG9ydCBpcyBlbmFibGVkLgorCUZCCVRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGlzIGVuYWJsZWQuCisJSFcJQXBwcm9wcmlhdGUgaGFyZHdhcmUgaXMgZW5hYmxlZC4KKwlJQS0zMglJQS0zMiBha2EgaTM4NiBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlJQS02NAlJQS02NCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlJT1NDSEVECU1vcmUgdGhhbiBvbmUgSS9PIHNjaGVkdWxlciBpcyBlbmFibGVkLgorCUlQX1BOUAlJUCBEQ0hQLCBCT09UUCwgb3IgUkFSUCBpcyBlbmFibGVkLgorCUlTQVBOUAlJU0EgUG5QIGNvZGUgaXMgZW5hYmxlZC4KKwlJU0ROCUFwcHJvcHJpYXRlIElTRE4gc3VwcG9ydCBpcyBlbmFibGVkLgorCUpPWQlBcHByb3ByaWF0ZSBqb3lzdGljayBzdXBwb3J0IGlzIGVuYWJsZWQuCisJTFAJUHJpbnRlciBzdXBwb3J0IGlzIGVuYWJsZWQuCisJTE9PUAlMb29wYmFjayBkZXZpY2Ugc3VwcG9ydCBpcyBlbmFibGVkLgorCU02OGsJTTY4ayBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwkJCVRoZXNlIG9wdGlvbnMgaGF2ZSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluc2lkZSBvZgorCQkJRG9jdW1lbnRhdGlvbi9tNjhrL2tlcm5lbC1vcHRpb25zLnR4dC4KKwlNQ0EJTUNBIGJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQuCisJTURBCU1EQSBjb25zb2xlIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlNT1VTRQlBcHByb3ByaWF0ZSBtb3VzZSBzdXBwb3J0IGlzIGVuYWJsZWQuCisJTVRECU1URCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJTkVUCUFwcHJvcHJpYXRlIG5ldHdvcmsgc3VwcG9ydCBpcyBlbmFibGVkLgorCU5VTUEJTlVNQSBzdXBwb3J0IGlzIGVuYWJsZWQuCisJTkZTCUFwcHJvcHJpYXRlIE5GUyBzdXBwb3J0IGlzIGVuYWJsZWQuCisJT1NTCU9TUyBzb3VuZCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJUEFSSURFCVRoZSBQYXJJREUgc3Vic3lzdGVtIGlzIGVuYWJsZWQuCisJUEFSSVNDCVRoZSBQQS1SSVNDIGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCVBDSQlQQ0kgYnVzIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlQQ01DSUEJVGhlIFBDTUNJQSBzdWJzeXN0ZW0gaXMgZW5hYmxlZC4KKwlQTlAJUGx1ZyAmIFBsYXkgc3VwcG9ydCBpcyBlbmFibGVkLgorCVBQQwlQb3dlclBDIGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCVBQVAlQYXJhbGxlbCBwb3J0IHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlQUzIJQXBwcm9wcmlhdGUgUFMvMiBzdXBwb3J0IGlzIGVuYWJsZWQuCisJUkFNCVJBTSBkaXNrIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlTMzkwCVMzOTAgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCisJU0NTSQlBcHByb3ByaWF0ZSBTQ1NJIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwkJCUEgbG90IG9mIGRyaXZlcnMgaGFzIHRoZWlyIG9wdGlvbnMgZGVzY3JpYmVkIGluc2lkZSBvZgorCQkJRG9jdW1lbnRhdGlvbi9zY3NpLy4KKwlTRUxJTlVYIFNFTGludXggc3VwcG9ydCBpcyBlbmFibGVkLgorCVNFUklBTAlTZXJpYWwgc3VwcG9ydCBpcyBlbmFibGVkLgorCVNNUAlUaGUga2VybmVsIGlzIGFuIFNNUCBrZXJuZWwuCisJU1BBUkMJU3BhcmMgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCisJU1dTVVNQCVNvZnR3YXJlIHN1c3BlbnNpb24gaXMgZW5hYmxlZC4KKwlUUwlBcHByb3ByaWF0ZSB0b3VjaHNjcmVlbiBzdXBwb3J0IGlzIGVuYWJsZWQuCisJVVNCCVVTQiBzdXBwb3J0IGlzIGVuYWJsZWQuCisJVVNCSElECVVTQiBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlWNEwJVmlkZW8gRm9yIExpbnV4IHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlWR0EJVGhlIFZHQSBjb25zb2xlIGhhcyBiZWVuIGVuYWJsZWQuCisJVlQJVmlydHVhbCB0ZXJtaW5hbCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJV0RUCVdhdGNoZG9nIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlYVAlJQk0gUEMvWFQgTUZNIGhhcmQgZGlzayBzdXBwb3J0IGlzIGVuYWJsZWQuCisJWDg2LTY0CVg4Ni02NCBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwkJCU1vcmUgWDg2LTY0IGJvb3Qgb3B0aW9ucyBjYW4gYmUgZm91bmQgaW4KKwkJCURvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgLgorCitJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyB0ZXh0IGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb246CisKKwlCVUdTPQlSZWxhdGVzIHRvIHBvc3NpYmxlIHByb2Nlc3NvciBidWdzIG9uIHRoZSBzYWlkIHByb2Nlc3Nvci4KKwlLTkwJSXMgYSBrZXJuZWwgc3RhcnQtdXAgcGFyYW1ldGVyLgorCUJPT1QJSXMgYSBib290IGxvYWRlciBwYXJhbWV0ZXIuCisKK1BhcmFtZXRlcnMgZGVub3RlZCB3aXRoIEJPT1QgYXJlIGFjdHVhbGx5IGludGVycHJldGVkIGJ5IHRoZSBib290Citsb2FkZXIsIGFuZCBoYXZlIG5vIG1lYW5pbmcgdG8gdGhlIGtlcm5lbCBkaXJlY3RseS4KK0RvIG5vdCBtb2RpZnkgdGhlIHN5bnRheCBvZiBib290IGxvYWRlciBwYXJhbWV0ZXJzIHdpdGhvdXQgZXh0cmVtZQorbmVlZCBvciBjb29yZGluYXRpb24gd2l0aCA8RG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0Pi4KKworTm90ZSB0aGF0IEFMTCBrZXJuZWwgcGFyYW1ldGVycyBsaXN0ZWQgYmVsb3cgYXJlIENBU0UgU0VOU0lUSVZFLCBhbmQgdGhhdAorYSB0cmFpbGluZyA9IG9uIHRoZSBuYW1lIG9mIGFueSBwYXJhbWV0ZXIgc3RhdGVzIHRoYXQgdGhhdCBwYXJhbWV0ZXIgd2lsbAorYmUgZW50ZXJlZCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hlcmVhcyBpdHMgYWJzZW5jZSBpbmRpY2F0ZXMgdGhhdAoraXQgd2lsbCBhcHBlYXIgYXMgYSBrZXJuZWwgYXJndW1lbnQgcmVhZGFibGUgdmlhIC9wcm9jL2NtZGxpbmUgYnkgcHJvZ3JhbXMKK3J1bm5pbmcgb25jZSB0aGUgc3lzdGVtIGlzIHVwLgorCisJNTNjN3h4PQkJW0hXLFNDU0ldIEFtaWdhIFNDU0kgY29udHJvbGxlcnMKKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpLzUzYzd4eC5jLgorCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzd4eC50eHQuCisKKwlhY3BpPQkJW0hXLEFDUEldIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSAKKwkJCUZvcm1hdDogeyBmb3JjZSB8IG9mZiB8IGh0IHwgc3RyaWN0IH0KKwkJCWZvcmNlIC0tIGVuYWJsZSBBQ1BJIGlmIGRlZmF1bHQgd2FzIG9mZgorCQkJb2ZmIC0tIGRpc2FibGUgQUNQSSBpZiBkZWZhdWx0IHdhcyBvbgorCQkJbm9pcnEgLS0gZG8gbm90IHVzZSBBQ1BJIGZvciBJUlEgcm91dGluZworCQkJaHQgLS0gcnVuIG9ubHkgZW5vdWdoIEFDUEkgdG8gZW5hYmxlIEh5cGVyIFRocmVhZGluZworCQkJc3RyaWN0IC0tICBCZSBsZXNzIHRvbGVyYW50IG9mIHBsYXRmb3JtcyB0aGF0IGFyZSBub3QKKwkJCQlzdHJpY3RseSBBQ1BJIHNwZWNpZmljYXRpb24gY29tcGxpYW50LgorCisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3BtLnR4dCwgcGNpPW5vYWNwaQorCisJYWNwaV9zbGVlcD0JW0hXLEFDUEldIFNsZWVwIG9wdGlvbnMKKwkJCUZvcm1hdDogeyBzM19iaW9zLCBzM19tb2RlIH0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dAorIAorCWFjcGlfc2NpPQlbSFcsQUNQSV0gQUNQSSBTeXN0ZW0gQ29udHJvbCBJbnRlcnJ1cHQgdHJpZ2dlciBtb2RlCisJCQlGb3JtYXQ6IHsgbGV2ZWwgfCBlZGdlIHwgIGhpZ2ggfCBsb3cgfQorCisJYWNwaV9pcnFfYmFsYW5jZQlbSFcsQUNQSV0gQUNQSSB3aWxsIGJhbGFuY2UgYWN0aXZlIElSUXMKKwkJCQlkZWZhdWx0IGluIEFQSUMgbW9kZQorCisJYWNwaV9pcnFfbm9iYWxhbmNlCVtIVyxBQ1BJXSBBQ1BJIHdpbGwgbm90IG1vdmUgYWN0aXZlIElSUXMgKGRlZmF1bHQpCisJCQkJZGVmYXVsdCBpbiBQSUMgbW9kZQorCisJYWNwaV9pcnFfcGNpPQlbSFcsQUNQSV0gSWYgaXJxX2JhbGFuY2UsIENsZWFyIGxpc3RlZCBJUlFzIGZvciB1c2UgYnkgUENJCisJCQlGb3JtYXQ6IDxpcnE+LDxpcnE+Li4uCisKKwlhY3BpX2lycV9pc2E9CVtIVyxBQ1BJXSBJZiBpcnFfYmFsYW5jZSwgTWFyayBsaXN0ZWQgSVJRcyB1c2VkIGJ5IElTQQorCQkJRm9ybWF0OiA8aXJxPiw8aXJxPi4uLgorCisJYWNwaV9vc2k9CVtIVyxBQ1BJXSBlbXB0eSBwYXJhbSBkaXNhYmxlcyBfT1NJCisKKwlhY3BpX3NlcmlhbGl6ZQlbSFcsQUNQSV0gZm9yY2Ugc2VyaWFsaXphdGlvbiBvZiBBTUwgbWV0aG9kcworCisJYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlIFtIVyxBQ1BJXQorCQkJUmVjb2duaXplIGFuZCBpZ25vcmUgSVJRMC9waW4yIEludGVycnVwdCBPdmVycmlkZS4KKwkJCUZvciBicm9rZW4gbkZvcmNlMiBCSU9TIHJlc3VsdGluZyBpbiBYVC1QSUMgdGltZXIuCisKKwlhY3BpX2RiZ19sYXllcj0JW0hXLEFDUEldCisJCQlGb3JtYXQ6IDxpbnQ+CisJCQlFYWNoIGJpdCBvZiB0aGUgPGludD4gaW5kaWNhdGVzIGFuIGFjcGkgZGVidWcgbGF5ZXIsCisJCQkxOiBlbmFibGUsIDA6IGRpc2FibGUuIEl0IGlzIHVzZWZ1bCBmb3IgYm9vdCB0aW1lCisJCQlkZWJ1Z2dpbmcuIEFmdGVyIHN5c3RlbSBoYXMgYm9vdGVkIHVwLCBpdCBjYW4gYmUgc2V0CisJCQl2aWEgL3Byb2MvYWNwaS9kZWJ1Z19sYXllci4KKworCWFjcGlfZGJnX2xldmVsPQlbSFcsQUNQSV0KKwkJCUZvcm1hdDogPGludD4KKwkJCUVhY2ggYml0IG9mIHRoZSA8aW50PiBpbmRpY2F0ZXMgYW4gYWNwaSBkZWJ1ZyBsZXZlbCwKKwkJCTE6IGVuYWJsZSwgMDogZGlzYWJsZS4gSXQgaXMgdXNlZnVsIGZvciBib290IHRpbWUKKwkJCWRlYnVnZ2luZy4gQWZ0ZXIgc3lzdGVtIGhhcyBib290ZWQgdXAsIGl0IGNhbiBiZSBzZXQKKwkJCXZpYSAvcHJvYy9hY3BpL2RlYnVnX2xldmVsLgorCisJYWNwaV9mYWtlX2VjZHQJW0hXLEFDUEldIFdvcmthcm91bmQgZmFpbHVyZSBkdWUgdG8gQklPUyBsYWNraW5nIEVDRFQKKworCWFkMTgxNj0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+CisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BRDE4MTYuCisKKwlhZDE4NDg9CQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8dHlwZT4KKworCWFkbGliPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPgorIAorCWFkdmFuc3lzPQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMuCisKKwlhZHZ3ZHQ9CQlbSFcsV0RUXSBBZHZhbnRlY2ggV0RUCisJCQlGb3JtYXQ6IDxpb3N0YXJ0Piw8aW9zdG9wPgorCisJYWVkc3AxNj0JW0hXLE9TU10gQXVkaW8gRXhjZWwgRFNQIDE2CisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPG1zc19pbz4sPG1wdV9pbz4sPG1wdV9pcnE+CisJCQlTZWUgYWxzbyBoZWFkZXIgb2Ygc291bmQvb3NzL2FlZHNwMTYuYy4KKyAKKwlhaGExNTJ4PQlbSFcsU0NTSV0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQuCisKKwlhaGExNTQyPQlbSFcsU0NTSV0KKwkJCUZvcm1hdDogPHBvcnRiYXNlPlssPGJ1c29uPiw8YnVzb2ZmPlssPGRtYXNwZWVkPl1dCisKKwlhaWM3eHh4PQlbSFcsU0NTSV0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eC50eHQuCisKKwlhaWM3OXh4PQlbSFcsU0NTSV0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQuCisKKwlBTTUzQzk3ND0JW0hXLFNDU0ldCisJCQlGb3JtYXQ6IDxob3N0LXNjc2ktaWQ+LDx0YXJnZXQtc2NzaS1pZD4sPG1heC1yYXRlPiw8bWF4LW9mZnNldD4KKwkJCVNlZSBhbHNvIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvQU01M0M5NzQuYy4KKworCWFtaWpveS5tYXA9CVtIVyxKT1ldIEFtaWdhIGpveXN0aWNrIHN1cHBvcnQKKwkJCU1hcCBvZiBkZXZpY2VzIGF0dGFjaGVkIHRvIEpPWTBEQVQgYW5kIEpPWTFEQVQKKwkJCUZvcm1hdDogPGE+LDxiPgorCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9rZXJuZWwvaW5wdXQvam95c3RpY2sudHh0CisKKwlhbmFsb2cubWFwPQlbSFcsSk9ZXSBBbmFsb2cgam95c3RpY2sgYW5kIGdhbWVwYWQgc3VwcG9ydAorCQkJU3BlY2lmaWVzIHR5cGUgb3IgY2FwYWJpbGl0aWVzIG9mIGFuIGFuYWxvZyBqb3lzdGljaworCQkJY29ubmVjdGVkIHRvIG9uZSBvZiAxNiBnYW1lcG9ydHMKKwkJCUZvcm1hdDogPHR5cGUxPiw8dHlwZTI+LC4uPHR5cGUxNj4KKworCWFwYz0JCVtIVyxTUEFSQ10gUG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMgKFNQQVJDc3RhdGlvbi00LzUgKyBkZXJpdi4pCisJCQlGb3JtYXQ6IG5vaWRsZQorCQkJRGlzYWJsZSBBUEMgQ1BVIHN0YW5kYnkgc3VwcG9ydC4gU1BBUkNzdGF0aW9uLUZveCBkb2VzCisJCQlub3QgcGxheSB3ZWxsIHdpdGggQVBDIENQVSBpZGxlIC0gZGlzYWJsZSBpdCBpZiB5b3UgaGF2ZQorCQkJQVBDIGFuZCB5b3VyIHN5c3RlbSBjcmFzaGVzIHJhbmRvbWx5LgorCisJYXBpYz0JCVtBUElDLGkzODZdIENoYW5nZSB0aGUgb3V0cHV0IHZlcmJvc2l0eSAgd2hpbHN0IGJvb3RpbmcKKwkJCUZvcm1hdDogeyBxdWlldCAoZGVmYXVsdCkgfCB2ZXJib3NlIHwgZGVidWcgfQorCQkJQ2hhbmdlIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uIG91dHB1dAorCQkJd2hlbiBpbml0aWFsaXNpbmcgdGhlIEFQSUMgYW5kIElPLUFQSUMgY29tcG9uZW50cy4KKyAKKwlhcG09CQlbQVBNXSBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50CisJCQlTZWUgaGVhZGVyIG9mIGFyY2gvaTM4Ni9rZXJuZWwvYXBtLmMuCisKKwlhcHBsaWNvbT0JW0hXXQorCQkJRm9ybWF0OiA8bWVtPiw8aXJxPgorIAorCWFyY3JpbWk9CVtIVyxORVRdIEFSQ25ldCAtICJSSU0gSSIgKGVudGlyZWx5IG1lbS1tYXBwZWQpIGNhcmRzCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPG5vZGVJRD4KKworCWF0YWZsb3A9CVtIVyxNNjhrXQorCisJYXRhcmltb3VzZT0JW0hXLE1PVVNFXSBBdGFyaSBNb3VzZQorCisJYXRhc2NzaT0JW0hXLFNDU0ldIEF0YXJpIFNDU0kKKworCWF0a2JkLmV4dHJhPQlbSFddIEVuYWJsZSBleHRyYSBMRURzIGFuZCBrZXlzIG9uIElCTSBSYXBpZEFjY2VzcywKKwkJCUV6S2V5IGFuZCBzaW1pbGFyIGtleWJvYXJkcworCisJYXRrYmQucmVzZXQ9CVtIV10gUmVzZXQga2V5Ym9hcmQgZHVyaW5nIGluaXRpYWxpemF0aW9uCisKKwlhdGtiZC5zZXQ9CVtIV10gU2VsZWN0IGtleWJvYXJkIGNvZGUgc2V0IAorCQkJRm9ybWF0OiA8aW50PiAoMiA9IEFUIChkZWZhdWx0KSAzID0gUFMvMikKKworCWF0a2JkLnNjcm9sbD0JW0hXXSBFbmFibGUgc2Nyb2xsIHdoZWVsIG9uIE1TIE9mZmljZSBhbmQgc2ltaWxhcgorCQkJa2V5Ym9hcmRzCisKKwlhdGtiZC5zb2Z0cmF3PQlbSFddIENob29zZSBiZXR3ZWVuIHN5bnRoZXRpYyBhbmQgcmVhbCByYXcgbW9kZQorCQkJRm9ybWF0OiA8Ym9vbD4gKDAgPSByZWFsLCAxID0gc3ludGhldGljIChkZWZhdWx0KSkKKwkKKwlhdGtiZC5zb2Z0cmVwZWF0PQorCQkJW0hXXSBVc2Ugc29mdHdhcmUga2V5Ym9hcmQgcmVwZWF0CisKKwlhdXRvdGVzdAlbSUE2NF0KKworCWF3ZT0JCVtIVyxPU1NdIEFXRTMyL1NCMzIvQVdFNjQgd2F2ZSB0YWJsZSBzeW50aAorCQkJRm9ybWF0OiA8aW8+LDxtZW1zaXplPiw8aXNhcG5wPgorIAorCWF6dGNkPQkJW0hXLENEXSBBenRlY2ggQ0QyNjggQ0RST00gZHJpdmVyCisJCQlGb3JtYXQ6IDxpbz4sMHg3OSAoPykKKworCWJheWNvbV9lcHA9CVtIVyxBWDI1XQorCQkJRm9ybWF0OiA8aW8+LDxtb2RlPgorIAorCWJheWNvbV9wYXI9CVtIVyxBWDI1XSBCYXlDb20gUGFyYWxsZWwgUG9ydCBBWC4yNSBNb2RlbQorCQkJRm9ybWF0OiA8aW8+LDxtb2RlPgorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fcGFyLmMuCisKKwliYXljb21fc2VyX2ZkeD0JW0hXLEFYMjVdIEJheUNvbSBTZXJpYWwgUG9ydCBBWC4yNSBNb2RlbSAoRnVsbCBEdXBsZXggTW9kZSkKKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8bW9kZT5bLDxiYXVkPl0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYy4KKworCWJheWNvbV9zZXJfaGR4PQlbSFcsQVgyNV0gQmF5Q29tIFNlcmlhbCBQb3J0IEFYLjI1IE1vZGVtIChIYWxmIER1cGxleCBNb2RlKQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxtb2RlPgorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jLgorCisJYmxrbXRkX2RldmljZT0JW0hXLE1URF0KKwlibGttdGRfZXJhc2Vzej0KKwlibGttdGRfcm89CisJYmxrbXRkX2JzPQorCWJsa210ZF9jb3VudD0KKworCWJ0dHYuY2FyZD0JW0hXLFY0TF0gYnR0diAoYnQ4NDggKyBidDg3OCBiYXNlZCBncmFiYmVyIGNhcmRzKQorCWJ0dHYucmFkaW89CU1vc3QgaW1wb3J0YW50IGluc21vZCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYXMga2VybmVsIGFyZ3MgdG9vLgorCWJ0dHYucGxsPQlTZWUgRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCisJYnR0di50dW5lcj0JYW5kIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DQVJETElTVAorCisJQnVzTG9naWM9CVtIVyxTQ1NJXQorCQkJU2VlIGRyaXZlcnMvc2NzaS9CdXNMb2dpYy5jLCBjb21tZW50IGJlZm9yZSBmdW5jdGlvbgorCQkJQnVzTG9naWNfUGFyc2VEcml2ZXJPcHRpb25zKCkuCisKKwljMTAxPQkJW05FVF0gTW94YSBDMTAxIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkCisKKwljYWNoZXNpemU9CVtCVUdTPUlBLTMyXSBPdmVycmlkZSBsZXZlbCAyIENQVSBjYWNoZSBzaXplIGRldGVjdGlvbi4KKwkJCVNvbWV0aW1lcyBDUFUgaGFyZHdhcmUgYnVncyBtYWtlIHRoZW0gcmVwb3J0IHRoZSBjYWNoZQorCQkJc2l6ZSBpbmNvcnJlY3RseS4gVGhlIGtlcm5lbCB3aWxsIGF0dGVtcHQgd29yayBhcm91bmRzCisJCQl0byBmaXgga25vd24gcHJvYmxlbXMsIGJ1dCBmb3Igc29tZSBDUFVzIGl0IGlzIG5vdAorCQkJcG9zc2libGUgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3Qgc2l6ZSBzaG91bGQgYmUuCisJCQlUaGlzIG9wdGlvbiBwcm92aWRlcyBhbiBvdmVycmlkZSBmb3IgdGhlc2Ugc2l0dWF0aW9ucy4KKworCWNkdTMxYT0JCVtIVyxDRF0KKwkJCUZvcm1hdDogPGlvPiw8aXJxPlssUEFTXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Nkcm9tL2NkdTMxYS5jLgorCisJY2hhbmRldj0JW0hXLE5FVF0gR2VuZXJpYyBjaGFubmVsIGRldmljZSBpbml0aWFsaXNhdGlvbgorCisJY2hlY2tyZXFwcm90CVtTRUxJTlVYXSBTZXQgaW5pdGlhbCBjaGVja3JlcXByb3QgZmxhZyB2YWx1ZS4KKwkJCUZvcm1hdDogeyAiMCIgfCAiMSIgfQorCQkJU2VlIHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZyBoZWxwIHRleHQuCisJCQkwIC0tIGNoZWNrIHByb3RlY3Rpb24gYXBwbGllZCBieSBrZXJuZWwgKGluY2x1ZGVzIGFueSBpbXBsaWVkIGV4ZWN1dGUgcHJvdGVjdGlvbikuCisJCQkxIC0tIGNoZWNrIHByb3RlY3Rpb24gcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9uLgorCQkJRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdmlhIGEga2VybmVsIGNvbmZpZyBvcHRpb24uCisJCQlWYWx1ZSBjYW4gYmUgY2hhbmdlZCBhdCBydW50aW1lIHZpYSAvc2VsaW51eC9jaGVja3JlcXByb3QuCisgCisgCWNsb2NrPQkJW0JVR1M9SUEtMzIsIEhXXSBnZXR0aW1lb2ZkYXkgdGltZXNvdXJjZSBvdmVycmlkZS4gCisJCQlGb3JjZXMgc3BlY2lmaWVkIHRpbWVzb3VyY2UgKGlmIGF2YWxpYWJsZSkgdG8gYmUgdXNlZAorCQkJd2hlbiBjYWxjdWxhdGluZyBnZXR0aW1lb2ZkYXkoKS4gSWYgc3BlY2ljaWZpZWQgdGltZXNvdXJjZQorCQkJaXMgbm90IGF2YWxpYmxlLCBpdCBkZWZhdWx0cyB0byBQSVQuIAorCQkJRm9ybWF0OiB7IHBpdCB8IHRzYyB8IGN5Y2xvbmUgfCBwbXRtciB9CisKKwlocGV0PQkJW0lBLTMyLEhQRVRdIG9wdGlvbiB0byBkaXNhYmxlIEhQRVQgYW5kIHVzZSBQSVQuCisJCQlGb3JtYXQ6IGRpc2FibGUKKworCWNtMjA2PQkJW0hXLENEXQorCQkJRm9ybWF0OiB7IGF1dG8gfCBbPGlvPixdWzxpcnE+XSB9CisKKwljb20yMDAyMD0JW0hXLE5FVF0gQVJDbmV0IC0gQ09NMjAwMjAgY2hpcHNldAorCQkJRm9ybWF0OiA8aW8+Wyw8aXJxPlssPG5vZGVJRD5bLDxiYWNrcGxhbmU+Wyw8Y2twPlssPHRpbWVvdXQ+XV1dXV0KKworCWNvbTkwaW89CVtIVyxORVRdIEFSQ25ldCAtIENPTTkweHggY2hpcHNldCAoSU8tbWFwcGVkIGJ1ZmZlcnMpCisJCQlGb3JtYXQ6IDxpbz5bLDxpcnE+XQorCisJY29tOTB4eD0JW0hXLE5FVF0gQVJDbmV0IC0gQ09NOTB4eCBjaGlwc2V0IChtZW1vcnktbWFwcGVkIGJ1ZmZlcnMpCisJCQlGb3JtYXQ6IDxpbz5bLDxpcnE+Wyw8bWVtc3RhcnQ+XV0KKworCWNvbmRldj0JCVtIVyxTMzkwXSBjb25zb2xlIGRldmljZQorCWNvbm1vZGU9CisgCisJY29uc29sZT0JW0tOTF0gT3V0cHV0IGNvbnNvbGUgZGV2aWNlIGFuZCBvcHRpb25zLgorCisJCXR0eTxuPglVc2UgdGhlIHZpcnR1YWwgY29uc29sZSBkZXZpY2UgPG4+LgorCisJCXR0eVM8bj5bLG9wdGlvbnNdCisJCQlVc2UgdGhlIHNwZWNpZmllZCBzZXJpYWwgcG9ydC4gIFRoZSBvcHRpb25zIGFyZSBvZgorCQkJdGhlIGZvcm0gImJiYmJwbiIsIHdoZXJlICJiYmJiIiBpcyB0aGUgYmF1ZCByYXRlLAorCQkJInAiIGlzIHBhcml0eSAoIm4iLCAibyIsIG9yICJlIiksIGFuZCAibiIgaXMgYml0cy4KKwkJCURlZmF1bHQgaXMgIjk2MDBuOCIuCisKKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0LgorCisJCXVhcnQsaW8sPGFkZHI+WyxvcHRpb25zXQorCQl1YXJ0LG1taW8sPGFkZHI+WyxvcHRpb25zXQorCQkJU3RhcnQgYW4gZWFybHksIHBvbGxlZC1tb2RlIGNvbnNvbGUgb24gdGhlIDgyNTAvMTY1NTAKKwkJCVVBUlQgYXQgdGhlIHNwZWNpZmllZCBJL08gcG9ydCBvciBNTUlPIGFkZHJlc3MsCisJCQlzd2l0Y2hpbmcgdG8gdGhlIG1hdGNoaW5nIHR0eVMgZGV2aWNlIGxhdGVyLiAgVGhlCisJCQlvcHRpb25zIGFyZSB0aGUgc2FtZSBhcyBmb3IgdHR5UywgYWJvdmUuCisKKwljcGNpaHBfZ2VuZXJpYz0JW0hXLFBDSV0gR2VuZXJpYyBwb3J0IEkvTyBDb21wYWN0UENJIGRyaXZlcgorCQkJRm9ybWF0OiA8Zmlyc3Rfc2xvdD4sPGxhc3Rfc2xvdD4sPHBvcnQ+LDxlbnVtX2JpdD5bLDxkZWJ1Zz5dCisKKwljcGlhX3BwPQlbSFcsUFBUXQorCQkJRm9ybWF0OiB7IHBhcnBvcnQ8bnI+IHwgYXV0byB8IG5vbmUgfQorCisJY3M0MjMyPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1wdWlvPiw8bXB1aXJxPgorCisJY3M4OXgwX2RtYT0JW0hXLE5FVF0KKwkJCUZvcm1hdDogPGRtYT4KKworCWNzODl4MF9tZWRpYT0JW0hXLE5FVF0KKwkJCUZvcm1hdDogeyByajQ1IHwgYXVpIHwgYm5jIH0KKyAKKwljeWNsYWRlcz0JW0hXLFNFUklBTF0gQ3ljbGFkZXMgbXVsdGktc2VyaWFsIHBvcnQgYWRhcHRlci4KKyAKKwlkYXNkPQkJW0hXLE5FVF0gICAgCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLgorCisJZGI5LmRldlsyfDNdPQlbSFcsSk9ZXSBNdWx0aXN5c3RlbSBqb3lzdGljayBzdXBwb3J0IHZpYSBwYXJhbGxlbCBwb3J0CisJCQkob25lIGRldmljZSBwZXIgcG9ydCkKKwkJCUZvcm1hdDogPHBvcnQjPiw8dHlwZT4KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKKworCWRlYnVnCQlbS05MXSBFbmFibGUga2VybmVsIGRlYnVnZ2luZyAoZXZlbnRzIGxvZyBsZXZlbCkuCisKKwlkZWNuZXQ9CQlbSFcsTkVUXQorCQkJRm9ybWF0OiA8YXJlYT5bLDxub2RlPl0KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0LgorCisJZGV2ZnM9CQlbREVWRlNdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9ib290LW9wdGlvbnMuCisKKwlkaGFzaF9lbnRyaWVzPQlbS05MXQorCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIGRlbnRyeSBjYWNoZS4KKyAKKwlkaWdpPQkJW0hXLFNFUklBTF0KKwkJCUlPIHBhcmFtZXRlcnMgKyBlbmFibGUvZGlzYWJsZSBjb21tYW5kLgorCisJZGlnaWVwY2E9CVtIVyxTRVJJQUxdCisJCQlTZWUgZHJpdmVycy9jaGFyL1JFQURNRS5lcGNhIGFuZAorCQkJRG9jdW1lbnRhdGlvbi9kaWdpZXBjYS50eHQuCisKKwlkbWFzY2M9CQlbSFcsQVgyNSxTRVJJQUxdIEFYLjI1IFo4MFNDQyBkcml2ZXIgd2l0aCBETUEKKwkJCXN1cHBvcnQgYXZhaWxhYmxlLgorCQkJRm9ybWF0OiA8aW9fZGV2MD5bLDxpb19kZXYxPlssLi48aW9fZGV2MzI+XV0KKworCWRtYXNvdW5kPQlbSFcsT1NTXSBTb3VuZCBzdWJzeXN0ZW0gYnVmZmVycworCisJZHNjYzQuc2V0dXA9CVtORVRdCisKKwlkdGMzMTgxZT0JW0hXLFNDU0ldCisKKwllYXJseXByaW50az0JW0lBLTMyLCBYODYtNjRdCisJCQllYXJseXByaW50az12Z2EKKwkJCWVhcmx5cHJpbnRrPXNlcmlhbFssdHR5U25bLGJhdWRyYXRlXV0KKworCQkJQXBwZW5kICxrZWVwIHRvIG5vdCBkaXNhYmxlIGl0IHdoZW4gdGhlIHJlYWwgY29uc29sZQorCQkJdGFrZXMgb3Zlci4KKworCQkJT25seSB2Z2Egb3Igc2VyaWFsIGF0IGEgdGltZSwgbm90IGJvdGguCisKKwkJCUN1cnJlbnRseSBvbmx5IHR0eVMwIGFuZCB0dHlTMSBhcmUgc3VwcG9ydGVkLgorCisJCQlJbnRlcmFjdGlvbiB3aXRoIHRoZSBzdGFuZGFyZCBzZXJpYWwgZHJpdmVyIGlzIG5vdAorCQkJdmVyeSBnb29kLgorCisJCQlUaGUgVkdBIG91dHB1dCBpcyBldmVudHVhbGx5IG92ZXJ3cml0dGVuIGJ5IHRoZSByZWFsCisJCQljb25zb2xlLgorCisJZWF0YT0JCVtIVyxTQ1NJXQorCisJZWRhPQkJW0hXLFBTMl0KKworCWVkYj0JCVtIVyxQUzJdCisKKwllZGQ9CQlbRUREXQorCQkJRm9ybWF0OiB7Im9mW2ZdIiB8ICJza1tpcG1icl0ifQorCQkJU2VlIGNvbW1lbnQgaW4gYXJjaC9pMzg2L2Jvb3QvZWRkLlMKKworCWVpY29uPQkJW0hXLElTRE5dIAorCQkJRm9ybWF0OiA8aWQ+LDxtZW1iYXNlPiw8aXJxPgorCisJZWlzYV9pcnFfZWRnZT0JW1BBUklTQyxIV10KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9wYXJpc2MvZWlzYS5jLgorCisJZWxhbmZyZXE9CVtJQS0zMl0KKwkJCVNlZSBjb21tZW50IGJlZm9yZSBmdW5jdGlvbiBlbGFuZnJlcV9zZXR1cCgpIGluCisJCQlhcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMuCisKKwllbGV2YXRvcj0JW0lPU0NIRURdCisJCQlGb3JtYXQ6IHsiYXMifCJjZnEifCJkZWFkbGluZSJ8Im5vb3AifQorCQkJU2VlIERvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQKKwkJCWFuZCBEb2N1bWVudGF0aW9uL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQudHh0IGZvciBkZXRhaWxzLgorCisJZW5mb3JjaW5nCVtTRUxJTlVYXSBTZXQgaW5pdGlhbCBlbmZvcmNpbmcgc3RhdHVzLgorCQkJRm9ybWF0OiB7IjAiIHwgIjEifQorCQkJU2VlIHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZyBoZWxwIHRleHQuCisJCQkwIC0tIHBlcm1pc3NpdmUgKGxvZyBvbmx5LCBubyBkZW5pYWxzKS4KKwkJCTEgLS0gZW5mb3JjaW5nIChkZW55IGFuZCBsb2cpLgorCQkJRGVmYXVsdCB2YWx1ZSBpcyAwLgorCQkJVmFsdWUgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSB2aWEgL3NlbGludXgvZW5mb3JjZS4KKworCWVzMTM3MD0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxsaW5lb3V0PlssPG1pY2JpYXM+XQorCQkJU2VlIGFsc28gaGVhZGVyIG9mIHNvdW5kL29zcy9lczEzNzAuYy4KKworCWVzMTM3MT0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxzcGRpZj4sWzxub21peD4sWzxhbXBsaWZpZXI+XV0KKwkJCVNlZSBhbHNvIGhlYWRlciBvZiBzb3VuZC9vc3MvZXMxMzcxLmMuCisgCisJZXRoZXI9CQlbSFcsTkVUXSBFdGhlcm5ldCBjYXJkcyBwYXJhbWV0ZXJzCisJCQlUaGlzIG9wdGlvbiBpcyBvYnNvbGV0ZWQgYnkgdGhlICJuZXRkZXY9IiBvcHRpb24sIHdoaWNoCisJCQloYXMgZXF1aXZhbGVudCB1c2FnZS4gU2VlIGl0cyBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCisJZXVyd2R0PQkJW0hXLFdEVF0gRXVyb3RlY2ggQ1BVLTEyMjAvMTQxMCBvbmJvYXJkIHdhdGNoZG9nLgorCQkJRm9ybWF0OiA8aW8+Wyw8aXJxPl0KKworCWZkX21jcz0JCVtIVyxTQ1NJXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvZmRfbWNzLmMuCisKKwlmZG9tYWluPQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2Zkb21haW4uYy4KKworCWZsb3BweT0JCVtIV10KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2Zsb3BweS50eHQuCisKKwlmdGFwZT0JCVtIV10gRmxvcHB5IFRhcGUgc3Vic3lzdGVtIGRlYnVnZ2luZyBvcHRpb25zLgorCQkJU2VlIERvY3VtZW50YXRpb24vZnRhcGUudHh0LgorCisJZ2FtZWNvbi5tYXBbMnwzXT0KKwkJCVtIVyxKT1ldIE11bHRpc3lzdGVtIGpveXN0aWNrIGFuZCBORVMvU05FUy9QU1ggcGFkCisJCQlzdXBwb3J0IHZpYSBwYXJhbGxlbCBwb3J0ICh1cCB0byA1IGRldmljZXMgcGVyIHBvcnQpCisJCQlGb3JtYXQ6IDxwb3J0Iz4sPHBhZDE+LDxwYWQyPiw8cGFkMz4sPHBhZDQ+LDxwYWQ1PgorCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dAorCisJZ2FtbWE9CQlbSFcsRFJNXQorCisJZ2R0aD0JCVtIVyxTQ1NJXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvZ2R0aC5jLgorCisJZ3B0CQlbRUZJXSBGb3JjZXMgZGlzayB3aXRoIHZhbGlkIEdQVCBzaWduYXR1cmUgYnV0CisJCQlpbnZhbGlkIFByb3RlY3RpdmUgTUJSIHRvIGJlIHRyZWF0ZWQgYXMgR1BULgorCisJZ3NjZD0JCVtIVyxDRF0KKwkJCUZvcm1hdDogPGlvPgorCisJZ3Q5NjEwMGV0aD0JW05FVF0gTUlQUyBHVDk2MTAwIEFkdmFuY2VkIENvbW11bmljYXRpb24gQ29udHJvbGxlcgorCisJZ3VzPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMTY+CisgCisJZ3ZwMTE9CQlbSFcsU0NTSV0KKworCWhhc2hkaXN0PQlbS05MLE5VTUFdIExhcmdlIGhhc2hlcyBhbGxvY2F0ZWQgZHVyaW5nIGJvb3QKKwkJCWFyZSBkaXN0cmlidXRlZCBhY3Jvc3MgTlVNQSBub2Rlcy4gIERlZmF1bHRzIG9uCisJCQlmb3IgSUEtNjQsIG9mZiBvdGhlcndpc2UuCisKKwloY2w9CQlbSUEtNjRdIFNHSSdzIEhhcmR3YXJlIEdyYXBoIGNvbXBhdGliaWxpdHkgbGF5ZXIKKworCWhkPQkJW0VJREVdIChFKUlERSBoYXJkIGRyaXZlIHN1YnN5c3RlbSBnZW9tZXRyeQorCQkJRm9ybWF0OiA8Y3lsPiw8aGVhZD4sPHNlY3Q+CisKKwloZD89CQlbSFddIChFKUlERSBzdWJzeXN0ZW0KKwloZD9sdW49CQlTZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LgorCisJaGlnaG1lbT1ubltLTUddCVtLTkwsQk9PVF0gZm9yY2VzIHRoZSBoaWdobWVtIHpvbmUgdG8gaGF2ZSBhbiBleGFjdAorCQkJc2l6ZSBvZiA8bm4+LiBUaGlzIHdvcmtzIGV2ZW4gb24gYm94ZXMgdGhhdCBoYXZlIG5vCisJCQloaWdobWVtIG90aGVyd2lzZS4gVGhpcyBhbHNvIHdvcmtzIHRvIHJlZHVjZSBoaWdobWVtCisJCQlzaXplIG9uIGJpZ2dlciBib3hlcy4KKworCWhpc2F4PQkJW0hXLElTRE5dCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5IaVNheC4KKworCWh1Z2VwYWdlcz0JW0hXLElBLTMyLElBLTY0XSBNYXhpbWFsIG51bWJlciBvZiBIdWdlVExCIHBhZ2VzLgorCisJbm9pcnFiYWxhbmNlCVtJQS0zMixTTVAsS05MXSBEaXNhYmxlIGtlcm5lbCBpcnEgYmFsYW5jaW5nCisKKwlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKKwlpODA0Mi5kdW1ia2JkCVtIV10gUHJldGVuZCB0aGF0IGNvbnRyb2xsZWQgY2FuIG9ubHkgcmVhZCBkYXRhIGZyb20KKwkJCSAgICAga2V5Ym9hcmQgYW5kIGNhbiBub3QgY29udHJvbCBpdHMgc3RhdGUKKwkJCSAgICAgKERvbid0IGF0dGVtcHQgdG8gYmxpbmsgdGhlIGxlZHMpCisJaTgwNDIubm9hdXgJW0hXXSBEb24ndCBjaGVjayBmb3IgYXV4aWxpYXJ5ICg9PSBtb3VzZSkgcG9ydAorCWk4MDQyLm5vbXV4CVtIV10gRG9uJ3QgY2hlY2sgcHJlc2VuY2Ugb2YgYW4gYWN0aXZlIG11bHRpcGxleGluZworCQkJICAgICBjb250cm9sbGVyCisJaTgwNDIubm9wbnAJW0hXXSBEb24ndCB1c2UgQUNQSVBuUCAvIFBuUEJJT1MgdG8gZGlzY292ZXIgS0JEL0FVWAorCQkJICAgICBjb250cm9sbGVycworCWk4MDQyLnBhbmljYmxpbms9CisJCQlbSFddIEZyZXF1ZW5jeSB3aXRoIHdoaWNoIGtleWJvYXJkIExFRHMgc2hvdWxkIGJsaW5rCisJCQkgICAgIHdoZW4ga2VybmVsIHBhbmljcyAoZGVmYXVsdCBpcyAwLjUgc2VjKQorCWk4MDQyLnJlc2V0CVtIV10gUmVzZXQgdGhlIGNvbnRyb2xsZXIgZHVyaW5nIGluaXQgYW5kIGNsZWFudXAKKwlpODA0Mi51bmxvY2sJW0hXXSBVbmxvY2sgKGlnbm9yZSkgdGhlIGtleWxvY2sKKworCWk4MTA9CQlbSFcsRFJNXQorCisJaThrLmZvcmNlCVtIV10gQWN0aXZhdGUgaThrIGRyaXZlciBldmVuIGlmIFNNTSBCSU9TIHNpZ25hdHVyZQorCQkJZG9lcyBub3QgbWF0Y2ggbGlzdCBvZiBzdXBwb3J0ZWQgbW9kZWxzLgorCWk4ay5wb3dlcl9zdGF0dXMKKwkJCVtIV10gUmVwb3J0IHBvd2VyIHN0YXR1cyBpbiAvcHJvYy9pOGsKKwkJCShkaXNhYmxlZCBieSBkZWZhdWx0KQorCWk4ay5yZXN0cmljdGVkCVtIV10gQWxsb3cgY29udHJvbGxpbmcgZmFucyBvbmx5IGlmIFNZU19BRE1JTgorCQkJY2FwYWJpbGl0eSBpcyBzZXQuCisKKwlpYm1tY2FzY3NpPQlbSFcsTUNBLFNDU0ldIElCTSBNaWNyb0NoYW5uZWwgU0NTSSBhZGFwdGVyCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9tY2EudHh0LgorCisJaWNuPQkJW0hXLElTRE5dCisJCQlGb3JtYXQ6IDxpbz5bLDxtZW1iYXNlPlssPGljbl9pZD5bLDxpY25faWQyPl1dXQorCisJaWRlPQkJW0hXXSAoRSlJREUgc3Vic3lzdGVtCisJCQlGb3JtYXQ6IGlkZT1ub2RtYSBvciBpZGU9ZG91YmxlciBvciBpZGU9cmV2ZXJzZQorCQkJU2VlIERvY3VtZW50YXRpb24vaWRlLnR4dC4KKworCWlkZT89CQlbSFddIChFKUlERSBzdWJzeXN0ZW0KKwkJCUZvcm1hdDogaWRlPz1ub3Byb2JlIG9yIGNoaXBzZXQgc3BlY2lmaWMgcGFyYW1ldGVycy4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQuCisJCisJaWRlYnVzPQkJW0hXXSAoRSlJREUgc3Vic3lzdGVtIC0gVkxCL1BDSSBidXMgc3BlZWQKKwkJCVNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQuCisKKwlpZGxlPQkJW0hXXQorCQkJRm9ybWF0OiBpZGxlPXBvbGwgb3IgaWRsZT1oYWx0CisgCisJaWhhc2hfZW50cmllcz0JW0tOTF0KKwkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBpbm9kZSBjYWNoZS4KKworCWluMjAwMD0JCVtIVyxTQ1NJXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvaW4yMDAwLmMuCisKKwlpbml0PQkJW0tOTF0KKwkJCUZvcm1hdDogPGZ1bGxfcGF0aD4KKwkJCVJ1biBzcGVjaWZpZWQgYmluYXJ5IGluc3RlYWQgb2YgL3NiaW4vaW5pdCBhcyBpbml0CisJCQlwcm9jZXNzLgorCisJaW5pdGNhbGxfZGVidWcJW0tOTF0gVHJhY2UgaW5pdGNhbGxzIGFzIHRoZXkgYXJlIGV4ZWN1dGVkLiAgVXNlZnVsCisJCQlmb3Igd29ya2luZyBvdXQgd2hlcmUgdGhlIGtlcm5lbCBpcyBkeWluZyBkdXJpbmcKKwkJCXN0YXJ0dXAuCisKKwlpbml0cmQ9CQlbQk9PVF0gU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGluaXRpYWwgcmFtZGlzaworCisJaW5wb3J0LmlycT0JW0hXXSBJbnBvcnQgKEFUSSBYTCBhbmQgTWljcm9zb2Z0KSBidXNtb3VzZSBkcml2ZXIKKwkJCUZvcm1hdDogPGlycT4KKworCWludHRlc3Q9CVtJQTY0XQorCisJaW83PQkJW0hXXSBJTzcgZm9yIE1hcnZlbCBiYXNlZCBhbHBoYSBzeXN0ZW1zCisJCQlTZWUgY29tbWVudCBiZWZvcmUgbWFydmVsX3NwZWNpZnlfaW83IGluCisJCQlhcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLgorCisJaXA9CQlbSVBfUE5QXQorCQkJU2VlIERvY3VtZW50YXRpb24vbmZzcm9vdC50eHQuCisKKwlpcDI9CQlbSFddIFNldCBJTy9JUlEgcGFpcnMgZm9yIHVwIHRvIDQgSW50ZWxsaVBvcnQgYm9hcmRzCisJCQlTZWUgY29tbWVudCBiZWZvcmUgaXAyX3NldHVwKCkgaW4gZHJpdmVycy9jaGFyL2lwMi5jLgorCisJaXBzPQkJW0hXLFNDU0ldIEFkYXB0ZWMgLyBJQk0gU2VydmVSQUlEIGNvbnRyb2xsZXIKKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2lwcy5jLgorCisJaXNhcG5wPQkJW0lTQVBOUF0KKwkJCUZvcm1hdDogPFJEUD4sIDxyZXNldD4sIDxwY2lfc2Nhbj4sIDx2ZXJib3NpdHk+CisKKwlpc29sY3B1cz0JW0tOTCxTTVBdIElzb2xhdGUgQ1BVcyBmcm9tIHRoZSBnZW5lcmFsIHNjaGVkdWxlci4KKwkJCUZvcm1hdDogPGNwdSBudW1iZXI+LC4uLiw8Y3B1IG51bWJlcj4KKwkJCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgQ1BVcworCQkJdG8gaXNvbGF0ZSBmcm9tIHRoZSBnZW5lcmFsIFNNUCBiYWxhbmNpbmcgYW5kIHNjaGVkdWxpbmcKKwkJCWFsZ29yaXRobXMuIFRoZSBvbmx5IHdheSB0byBtb3ZlIGEgcHJvY2VzcyBvbnRvIG9yIG9mZgorCQkJYW4gImlzb2xhdGVkIiBDUFUgaXMgdmlhIHRoZSBDUFUgYWZmaW5pdHkgc3lzY2FsbHMuCisJCQk8Y3B1IG51bWJlcj4gYmVnaW5zIGF0IDAgYW5kIHRoZSBtYXhpbXVtIHZhbHVlIGlzCisJCQkibnVtYmVyIG9mIENQVXMgaW4gc3lzdGVtIC0gMSIuCisKKwkJCVRoaXMgb3B0aW9uIGlzIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGlzb2xhdGUgQ1BVcy4gVGhlCisJCQlhbHRlcm5hdGl2ZSAtIG1hbnVhbGx5IHNldHRpbmcgdGhlIENQVSBtYXNrIG9mIGFsbCB0YXNrcworCQkJaW4gdGhlIHN5c3RlbSBjYW4gY2F1c2UgcHJvYmxlbXMgYW5kIHN1Ym9wdGltYWwgbG9hZAorCQkJYmFsYW5jZXIgcGVyZm9ybWFuY2UuCisKKwlpc3AxNj0JCVtIVyxDRF0KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8c2V0dXA+CisKKwlpdWN2PQkJW0hXLE5FVF0gCisKKwlqcz0JCVtIVyxKT1ldIEFuYWxvZyBqb3lzdGljaworCQkJU2VlIERvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0LgorCisJa2VlcGluaXRyZAlbSFcsQVJNXQorCisJa3N0YWNrPU4JW0lBLTMyLCBYODYtNjRdIFByaW50IE4gd29yZHMgZnJvbSB0aGUga2VybmVsIHN0YWNrCisJCQlpbiBvb3BzIGR1bXBzLgorCisJbDJjcj0JCVtQUENdCisKKwlsYXBpYwkJW0lBLTMyLEFQSUNdIEVuYWJsZSB0aGUgbG9jYWwgQVBJQyBldmVuIGlmIEJJT1MgZGlzYWJsZWQgaXQuCisKKwlsYXNpPQkJW0hXLFNDU0ldIFBBUklTQyBMQVNJIGRyaXZlciBmb3IgdGhlIDUzYzcwMCBjaGlwCisJCQlGb3JtYXQ6IGFkZHI6PGlvPixpcnE6PGlycT4KKworCWxsc2MqPQkJW0lBNjRdCisJCQlTZWUgZnVuY3Rpb24gcHJpbnRfcGFyYW1zKCkgaW4gYXJjaC9pYTY0L3NuL2tlcm5lbC9sbHNjNC5jLgorCisJbG9hZF9yYW1kaXNrPQlbUkFNXSBMaXN0IG9mIHJhbWRpc2tzIHRvIGxvYWQgZnJvbSBmbG9wcHkKKwkJCVNlZSBEb2N1bWVudGF0aW9uL3JhbWRpc2sudHh0LgorCisJbG9ja2QudWRwcG9ydD0JW05GU10KKworCWxvY2tkLnRjcHBvcnQ9CVtORlNdCisKKwlsb2dpYm0uaXJxPQlbSFcsTU9VU0VdIExvZ2l0ZWNoIEJ1cyBNb3VzZSBEcml2ZXIKKwkJCUZvcm1hdDogPGlycT4KKworCWxvZ2xldmVsPQlBbGwgS2VybmVsIE1lc3NhZ2VzIHdpdGggYSBsb2dsZXZlbCBzbWFsbGVyIHRoYW4gdGhlCisJCQljb25zb2xlIGxvZ2xldmVsIHdpbGwgYmUgcHJpbnRlZCB0byB0aGUgY29uc29sZS4gSXQgY2FuCisJCQlhbHNvIGJlIGNoYW5nZWQgd2l0aCBrbG9nZCBvciBvdGhlciBwcm9ncmFtcy4gVGhlCisJCQlsb2dsZXZlbHMgYXJlIGRlZmluZWQgYXMgZm9sbG93czoKKworCQkJMCAoS0VSTl9FTUVSRykJCXN5c3RlbSBpcyB1bnVzYWJsZQorCQkJMSAoS0VSTl9BTEVSVCkJCWFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5CisJCQkyIChLRVJOX0NSSVQpCQljcml0aWNhbCBjb25kaXRpb25zCisJCQkzIChLRVJOX0VSUikJCWVycm9yIGNvbmRpdGlvbnMKKwkJCTQgKEtFUk5fV0FSTklORykJd2FybmluZyBjb25kaXRpb25zCisJCQk1IChLRVJOX05PVElDRSkJCW5vcm1hbCBidXQgc2lnbmlmaWNhbnQgY29uZGl0aW9uCisJCQk2IChLRVJOX0lORk8pCQlpbmZvcm1hdGlvbmFsCisJCQk3IChLRVJOX0RFQlVHKQkJZGVidWctbGV2ZWwgbWVzc2FnZXMKKworCWxvZ19idWZfbGVuPW4JU2V0cyB0aGUgc2l6ZSBvZiB0aGUgcHJpbnRrIHJpbmcgYnVmZmVyLCBpbiBieXRlcy4KKwkJCUZvcm1hdCBpcyBuLCBuaywgbk0uICBuIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBUaGUKKwkJCWRlZmF1bHQgaXMgc2V0IGluIGtlcm5lbCBjb25maWcuCisKKwlscD0wCQlbTFBdCVNwZWNpZnkgcGFyYWxsZWwgcG9ydHMgdG8gdXNlLCBlLmcsCisJbHA9cG9ydFsscG9ydC4uLl0JbHA9bm9uZSxwYXJwb3J0MCAobHAwIG5vdCBjb25maWd1cmVkLCBscDEgdXNlcworCWxwPXJlc2V0CQlmaXJzdCBwYXJhbGxlbCBwb3J0KS4gJ2xwPTAnIGRpc2FibGVzIHRoZQorCWxwPWF1dG8JCQlwcmludGVyIGRyaXZlci4gJ2xwPXJlc2V0JyAod2hpY2ggY2FuIGJlCisJCQkJc3BlY2lmaWVkIGluIGFkZGl0aW9uIHRvIHRoZSBwb3J0cykgY2F1c2VzCisJCQkJYXR0YWNoZWQgcHJpbnRlcnMgdG8gYmUgcmVzZXQuIFVzaW5nCisJCQkJbHA9cG9ydDEscG9ydDIsLi4uIHNwZWNpZmllcyB0aGUgcGFyYWxsZWwgcG9ydHMKKwkJCQl0byBhc3NvY2lhdGUgbHAgZGV2aWNlcyB3aXRoLCBzdGFydGluZyB3aXRoCisJCQkJbHAwLiBBIHBvcnQgc3BlY2lmaWNhdGlvbiBtYXkgYmUgJ25vbmUnIHRvIHNraXAKKwkJCQl0aGF0IGxwIGRldmljZSwgb3IgYSBwYXJwb3J0IG5hbWUgc3VjaCBhcworCQkJCSdwYXJwb3J0MCcuIFNwZWNpZnlpbmcgJ2xwPWF1dG8nIGluc3RlYWQgb2YgYQorCQkJCXBvcnQgc3BlY2lmaWNhdGlvbiBsaXN0IG1lYW5zIHRoYXQgZGV2aWNlIElEcworCQkJCWZyb20gZWFjaCBwb3J0IHNob3VsZCBiZSBleGFtaW5lZCwgdG8gc2VlIGlmCisJCQkJYW4gSUVFRSAxMjg0LWNvbXBsaWFudCBwcmludGVyIGlzIGF0dGFjaGVkOyBpZgorCQkJCXNvLCB0aGUgZHJpdmVyIHdpbGwgbWFuYWdlIHRoYXQgcHJpbnRlci4KKwkJCQlTZWUgYWxzbyBoZWFkZXIgb2YgZHJpdmVycy9jaGFyL2xwLmMuCisKKwlscGo9bgkJW0tOTF0KKwkJCVNldHMgbG9vcHNfcGVyX2ppZmZ5IHRvIGdpdmVuIGNvbnN0YW50LCB0aHVzIGF2b2lkaW5nCisJCQl0aW1lLWNvbnN1bWluZyBib290LXRpbWUgYXV0b2RldGVjdGlvbiAodXAgdG8gMjUwIG1zIHBlcgorCQkJQ1BVKS4gMCBlbmFibGVzIGF1dG9kZXRlY3Rpb24gKGRlZmF1bHQpLiBUbyBkZXRlcm1pbmUKKwkJCXRoZSBjb3JyZWN0IHZhbHVlIGZvciB5b3VyIGtlcm5lbCwgYm9vdCB3aXRoIG5vcm1hbAorCQkJYXV0b2RldGVjdGlvbiBhbmQgc2VlIHdoYXQgdmFsdWUgaXMgcHJpbnRlZC4gTm90ZSB0aGF0CisJCQlvbiBTTVAgc3lzdGVtcyB0aGUgcHJlc2V0IHdpbGwgYmUgYXBwbGllZCB0byBhbGwgQ1BVcywKKwkJCXdoaWNoIGlzIGxpa2VseSB0byBjYXVzZSBwcm9ibGVtcyBpZiB5b3VyIENQVXMgbmVlZAorCQkJc2lnbmlmaWNhbnRseSBkaXZlcmdlbnQgc2V0dGluZ3MuIEFuIGluY29ycmVjdCB2YWx1ZQorCQkJd2lsbCBjYXVzZSBkZWxheXMgaW4gdGhlIGtlcm5lbCB0byBiZSB3cm9uZywgbGVhZGluZyB0bworCQkJdW5wcmVkaWN0YWJsZSBJL08gZXJyb3JzIGFuZCBvdGhlciBicmVha2FnZS4gQWx0aG91Z2gKKwkJCXVubGlrZWx5LCBpbiB0aGUgZXh0cmVtZSBjYXNlIHRoaXMgbWlnaHQgZGFtYWdlIHlvdXIKKwkJCWhhcmR3YXJlLgorCisJbHRwYz0JCVtORVRdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4KKworCW1hYzUzODA9CVtIVyxTQ1NJXQorCQkJRm9ybWF0OiA8Y2FuX3F1ZXVlPiw8Y21kX3Blcl9sdW4+LDxzZ190YWJsZXNpemU+LDxob3N0aWQ+LDx1c2VfdGFncz4KKworCW1hYzUzYzl4PQlbSFcsU0NTSV0KKwkJCUZvcm1hdDogPG51bV9lc3BzPiw8ZGlzY29ubmVjdD4sPG5vc3luYz4sPGNhbl9xdWV1ZT4sPGNtZF9wZXJfbHVuPiw8c2dfdGFibGVzaXplPiw8aG9zdGlkPiw8dXNlX3RhZ3M+CisKKwltYWNodmVjPQlbSUE2NF0KKwkJCUZvcmNlIHRoZSB1c2Ugb2YgYSBwYXJ0aWN1bGFyIG1hY2hpbmUtdmVjdG9yIChtYWNodmVjKSBpbiBhIGdlbmVyaWMKKwkJCWtlcm5lbC4gIEV4YW1wbGU6IG1hY2h2ZWM9aHB6eDFfc3dpb3RsYgorCisJbWFkMTY9CQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWExNj4sPG1wdV9pbz4sPG1wdV9pcnE+LDxqb3lzdGljaz4KKworCW1hdWk9CQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+CisgCisJbWF4X2xvb3A9ICAgICAgIFtMT09QXSBNYXhpbXVtIG51bWJlciBvZiBsb29wYmFjayBkZXZpY2VzIHRoYXQgY2FuCisJCQliZSBtb3VudGVkCisJCQlGb3JtYXQ6IDwxLTI1Nj4KKworCW1heGNwdXM9CVtTTVBdIE1heGltdW0gbnVtYmVyIG9mIHByb2Nlc3NvcnMgdGhhdAlhbiBTTVAga2VybmVsCisJCQlzaG91bGQgbWFrZSB1c2Ugb2YKKworCW1heF9sdW5zPQlbU0NTSV0gTWF4aW11bSBudW1iZXIgb2YgTFVOcyB0byBwcm9iZQorCQkJU2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMl4zMi0xLgorCisJbWF4X3JlcG9ydF9sdW5zPQorCQkJW1NDU0ldIE1heGltdW0gbnVtYmVyIG9mIExVTnMgcmVjZWl2ZWQKKwkJCVNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDE2Mzg0LgorCisJbWNhLXBlbnRpdW0JW0JVR1M9SUEtMzJdCisKKwltY2F0ZXN0PQlbSUEtNjRdCisKKwltY2Q9CQlbSFcsQ0RdCisJCQlGb3JtYXQ6IDxwb3J0Piw8aXJxPiw8bWl0c3VtaV9idWdfOTNfd2FpdD4KKworCW1jZHg9CQlbSFcsQ0RdCisKKwltY2UJCVtJQS0zMl0gTWFjaGluZSBDaGVjayBFeGNlcHRpb24KKworCW1kPQkJW0hXXSBSQUlEIHN1YnN5c3RlbXMgZGV2aWNlcyBhbmQgbGV2ZWwKKwkJCVNlZSBEb2N1bWVudGF0aW9uL21kLnR4dC4KKyAKKwltZGFjb249CQlbTURBXQorCQkJRm9ybWF0OiA8Zmlyc3Q+LDxsYXN0PgorCQkJU3BlY2lmaWVzIHJhbmdlIG9mIGNvbnNvbGVzIHRvIGJlIGNhcHR1cmVkIGJ5IHRoZSBNREEuCisgCisJbWVtPW5uW0tNR10JW0tOTCxCT09UXSBGb3JjZSB1c2FnZSBvZiBhIHNwZWNpZmljIGFtb3VudCBvZiBtZW1vcnkKKwkJCUFtb3VudCBvZiBtZW1vcnkgdG8gYmUgdXNlZCB3aGVuIHRoZSBrZXJuZWwgaXMgbm90IGFibGUKKwkJCXRvIHNlZSB0aGUgd2hvbGUgc3lzdGVtIG1lbW9yeSBvciBmb3IgdGVzdC4KKwkJCVtJQS0zMl0gVXNlIHRvZ2V0aGVyIHdpdGggbWVtbWFwPSB0byBhdm9pZCBwaHlzaWNhbAorCQkJYWRkcmVzcyBzcGFjZSBjb2xsaXNpb25zLiBXaXRob3V0IG1lbW1hcD0gUENJIGRldmljZXMKKwkJCWNvdWxkIGJlIHBsYWNlZCBhdCBhZGRyZXNzZXMgYmVsb25naW5nIHRvIHVudXNlZCBSQU0uCisKKwltZW09bm9wZW50aXVtCVtCVUdTPUlBLTMyXSBEaXNhYmxlIHVzYWdlIG9mIDRNQiBwYWdlcyBmb3Iga2VybmVsCisJCQltZW1vcnkuCisKKwltZW1tYXA9ZXhhY3RtYXAJW0tOTCxJQS0zMl0gRW5hYmxlIHNldHRpbmcgb2YgYW4gZXhhY3QKKwkJCUU4MjAgbWVtb3J5IG1hcCwgYXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorCQkJU3VjaCBtZW1tYXA9ZXhhY3RtYXAgbGluZXMgY2FuIGJlIGNvbnN0cnVjdGVkIGJhc2VkIG9uCisJCQlCSU9TIG91dHB1dCBvciBvdGhlciByZXF1aXJlbWVudHMuIFNlZSB0aGUgbWVtbWFwPW5uQHNzCisJCQlvcHRpb24gZGVzY3JpcHRpb24uCisKKwltZW1tYXA9bm5bS01HXUBzc1tLTUddCisJCQlbS05MXSBGb3JjZSB1c2FnZSBvZiBhIHNwZWNpZmljIHJlZ2lvbiBvZiBtZW1vcnkKKwkJCVJlZ2lvbiBvZiBtZW1vcnkgdG8gYmUgdXNlZCwgZnJvbSBzcyB0byBzcytubi4KKworCW1lbW1hcD1ubltLTUddI3NzW0tNR10KKwkJCVtLTkwsQUNQSV0gTWFyayBzcGVjaWZpYyBtZW1vcnkgYXMgQUNQSSBkYXRhLgorCQkJUmVnaW9uIG9mIG1lbW9yeSB0byBiZSB1c2VkLCBmcm9tIHNzIHRvIHNzK25uLgorCisJbWVtbWFwPW5uW0tNR10kc3NbS01HXQorCQkJW0tOTCxBQ1BJXSBNYXJrIHNwZWNpZmljIG1lbW9yeSBhcyByZXNlcnZlZC4KKwkJCVJlZ2lvbiBvZiBtZW1vcnkgdG8gYmUgdXNlZCwgZnJvbSBzcyB0byBzcytubi4KKworCW1leWUuKj0JCVtIV10gU2V0IE1vdGlvbkV5ZSBDYW1lcmEgcGFyYW1ldGVycworCQkJU2VlIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvbWV5ZS50eHQuCisKKwltZ2E9CQlbSFcsRFJNXQorCisJbW91c2VkZXYudGFwX3RpbWU9CisJCQlbTU9VU0VdIE1heGltdW0gdGltZSBiZXR3ZWVuIGZpbmdlciB0b3VjaGluZyBhbmQKKwkJCWxlYXZpbmcgdG91Y2hwYWQgc3VyZmFjZSBmb3IgdG91Y2ggdG8gYmUgY29uc2lkZXJlZAorCQkJYSB0YXAgYW5kIGJlIHJlcG9ydGVkIGFzIGEgbGVmdCBidXR0b24gY2xpY2sgKGZvcgorCQkJdG91Y2hwYWRzIHdvcmtpbmcgaW4gYWJzb2x1dGUgbW9kZSBvbmx5KS4KKwkJCUZvcm1hdDogPG1zZWNzPgorCW1vdXNlZGV2LnhyZXM9CVtNT1VTRV0gSG9yaXpvbnRhbCBzY3JlZW4gcmVzb2x1dGlvbiwgdXNlZCBmb3IgZGV2aWNlcworCQkJcmVwb3J0aW5nIGFic29sdXRlIGNvb3JkaW5hdGVzLCBzdWNoIGFzIHRhYmxldHMKKwltb3VzZWRldi55cmVzPQlbTU9VU0VdIFZlcnRpY2FsIHNjcmVlbiByZXNvbHV0aW9uLCB1c2VkIGZvciBkZXZpY2VzCisJCQlyZXBvcnRpbmcgYWJzb2x1dGUgY29vcmRpbmF0ZXMsIHN1Y2ggYXMgdGFibGV0cworCisJbXB1NDAxPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPgorCisJTVREX1BhcnRpdGlvbj0JW01URF0KKwkJCUZvcm1hdDogPG5hbWU+LDxyZWdpb24tbnVtYmVyPiw8c2l6ZT4sPG9mZnNldD4KKworCU1URF9SZWdpb249CVtNVERdCisJCQlGb3JtYXQ6IDxuYW1lPiw8cmVnaW9uLW51bWJlcj5bLDxiYXNlPiw8c2l6ZT4sPGJ1c3dpZHRoPiw8YWx0YnVzd2lkdGg+XQorCisJbXRkcGFydHM9CVtNVERdCisJCQlTZWUgZHJpdmVycy9tdGQvY21kbGluZS5jLgorCisJbXRvdWNodXNiLnJhd19jb29yZGluYXRlcz0KKwkJCVtIV10gTWFrZSB0aGUgTWljcm9Ub3VjaCBVU0IgZHJpdmVyIHVzZSByYXcgY29vcmRpbmF0ZXMgKCd5JywgZGVmYXVsdCkKKwkJCW9yIGNvb2tlZCBjb29yZGluYXRlcyAoJ24nKQorCisJbjI9CQlbTkVUXSBTREwgSW5jLiBSSVNDb20vTjIgc3luY2hyb25vdXMgc2VyaWFsIGNhcmQKKworCU5DUl9ENzAwPQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL05DUl9ENzAwLmMuCisKKwluY3I1MzgwPQlbSFcsU0NTSV0KKworCW5jcjUzYzQwMD0JW0hXLFNDU0ldCisKKwluY3I1M2M0MDBhPQlbSFcsU0NTSV0KKworCW5jcjUzYzQwNmE9CVtIVyxTQ1NJXQorCisJbmNyNTNjOHh4PQlbSFcsU0NTSV0KKworCW5ldGRldj0JCVtORVRdIE5ldHdvcmsgZGV2aWNlcyBwYXJhbWV0ZXJzCisJCQlGb3JtYXQ6IDxpcnE+LDxpbz4sPG1lbV9zdGFydD4sPG1lbV9lbmQ+LDxuYW1lPgorCQkJTm90ZSB0aGF0IG1lbV9zdGFydCBpcyBvZnRlbiBvdmVybG9hZGVkIHRvIG1lYW4KKwkJCXNvbWV0aGluZyBkaWZmZXJlbnQgYW5kIGRyaXZlci1zcGVjaWZpYy4KKyAKKwluZnNhZGRycz0JW05GU10KKwkJCVNlZSBEb2N1bWVudGF0aW9uL25mc3Jvb3QudHh0LgorCisJbmZzcm9vdD0JW05GU10gbmZzIHJvb3QgZmlsZXN5c3RlbSBmb3IgZGlzay1sZXNzIGJveGVzLgorCQkJU2VlIERvY3VtZW50YXRpb24vbmZzcm9vdC50eHQuCisKKwlubWlfd2F0Y2hkb2c9CVtLTkwsQlVHUz1JQS0zMl0gRGVidWdnaW5nIGZlYXR1cmVzIGZvciBTTVAga2VybmVscworCisJbm8zODcJCVtCVUdTPUlBLTMyXSBUZWxscyB0aGUga2VybmVsIHRvIHVzZSB0aGUgMzg3IG1hdGhzCisJCQllbXVsYXRpb24gbGlicmFyeSBldmVuIGlmIGEgMzg3IG1hdGhzIGNvcHJvY2Vzc29yCisJCQlpcyBwcmVzZW50LgorCisJbm9hbGlnbgkJW0tOTCxBUk1dIAorIAorCW5vYXBpYwkJW1NNUCxBUElDXSBUZWxscyB0aGUga2VybmVsIHRvIG5vdCBtYWtlIHVzZSBvZiBhbnkKKwkJCUlPQVBJQ3MgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLgorCisJbm9hc3luYwkJW0hXLE02OEtdIERpc2FibGVzIGFzeW5jIGFuZCBzeW5jIG5lZ290aWF0aW9uIGZvcgorCQkJYWxsIGRldmljZXMuCisKKwlub2JhdHMJCVtQUENdIERvIG5vdCB1c2UgQkFUcyBmb3IgbWFwcGluZyBrZXJuZWwgbG93bWVtCisJCQlvbiAiQ2xhc3NpYyIgUFBDIGNvcmVzLgorCisJbm9jYWNoZQkJW0FSTV0KKyAKKwlub2Rpc2Nvbm5lY3QJW0hXLFNDU0ksTTY4S10gRGlzYWJsZXMgU0NTSSBkaXNjb25uZWN0cy4KKworCW5vZXhlYwkJW0lBLTY0XQorCisJbm9leGVjCQlbSUEtMzIsIFg4Ni02NF0KKwkJCW5vZXhlYz1vbjogZW5hYmxlIG5vbi1leGVjdXRhYmxlIG1hcHBpbmdzIChkZWZhdWx0KQorCQkJbm9leGVjPW9mZjogZGlzYWJsZSBubi1leGVjdXRhYmxlIG1hcHBpbmdzCisKKwlub2Z4c3IJCVtCVUdTPUlBLTMyXQorCisJbm9obHQJCVtCVUdTPUFSTV0KKyAKKwluby1obHQJCVtCVUdTPUlBLTMyXSBUZWxscyB0aGUga2VybmVsIHRoYXQgdGhlIGhsdAorCQkJaW5zdHJ1Y3Rpb24gZG9lc24ndCB3b3JrIGNvcnJlY3RseSBhbmQgbm90IHRvCisJCQl1c2UgaXQuCisKKwlub2hhbHQJCVtJQS02NF0gVGVsbHMgdGhlIGtlcm5lbCBub3QgdG8gdXNlIHRoZSBwb3dlciBzYXZpbmcKKwkJCWZ1bmN0aW9uIFBBTF9IQUxUX0xJR0hUIHdoZW4gaWRsZS4gVGhpcyBpbmNyZWFzZXMKKwkJCXBvd2VyLWNvbnN1bXB0aW9uLiBPbiB0aGUgcG9zaXRpdmUgc2lkZSwgaXQgcmVkdWNlcworCQkJaW50ZXJydXB0IHdha2UtdXAgbGF0ZW5jeSwgd2hpY2ggbWF5IGltcHJvdmUgcGVyZm9ybWFuY2UKKwkJCWluIGNlcnRhaW4gZW52aXJvbm1lbnRzIHN1Y2ggYXMgbmV0d29ya2VkIHNlcnZlcnMgb3IKKwkJCXJlYWwtdGltZSBzeXN0ZW1zLgorCisJbm9pcnFkZWJ1ZwlbSUEtMzJdIERpc2FibGVzIHRoZSBjb2RlIHdoaWNoIGF0dGVtcHRzIHRvIGRldGVjdCBhbmQKKwkJCWRpc2FibGUgdW5oYW5kbGVkIGludGVycnVwdCBzb3VyY2VzLgorCisJbm9pc2FwbnAJW0lTQVBOUF0gRGlzYWJsZXMgSVNBIFBuUCBjb2RlLgorCisJbm9pbml0cmQJW1JBTV0gVGVsbHMgdGhlIGtlcm5lbCBub3QgdG8gbG9hZCBhbnkgY29uZmlndXJlZAorCQkJaW5pdGlhbCBSQU0gZGlzay4KKworCW5vaW50cm91dGUJW0lBLTY0XQorCisJbm9sYXBpYwkJW0lBLTMyLEFQSUNdIERvIG5vdCBlbmFibGUgb3IgdXNlIHRoZSBsb2NhbCBBUElDLgorCisJbm9sdGxicwkJW1BQQ10gRG8gbm90IHVzZSBsYXJnZSBwYWdlL3RsYiBlbnRyaWVzIGZvciBrZXJuZWwKKwkJCWxvd21lbSBtYXBwaW5nIG9uIFBQQzQweC4KKworCW5vbWNlCQlbSUEtMzJdIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uCisKKwlub3Jlc2lkdWFsCVtQUENdIERvbid0IHVzZSByZXNpZHVhbCBkYXRhIG9uIFBSZVAgbWFjaGluZXMuCisKKwlub3Jlc3VtZQlbU1dTVVNQXSBEaXNhYmxlcyByZXN1bWUgYW5kIHJlc3RvcmUgb3JpZ2luYWwgc3dhcCBzcGFjZS4KKyAKKwluby1zY3JvbGwJW1ZHQV0gRGlzYWJsZXMgc2Nyb2xsYmFjay4KKwkJCVRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBCcmFpbGxleCBpYjgwLXBpZXpvIEJyYWlsbGUKKwkJCXJlYWRlciBtYWRlIGJ5IEYuSC4gUGFwZW5tZWllciAoR2VybWFueSkuCisKKwlub3NiYWdhcnQJW0lBLTY0XQorCisJbm9zbXAJCVtTTVBdIFRlbGxzIGFuIFNNUCBrZXJuZWwgdG8gYWN0IGFzIGEgVVAga2VybmVsLgorCisJbm9zeW5jCQlbSFcsTTY4S10gRGlzYWJsZXMgc3luYyBuZWdvdGlhdGlvbiBmb3IgYWxsIGRldmljZXMuCisKKwlub3RzYwkJW0JVR1M9SUEtMzJdIERpc2FibGUgVGltZSBTdGFtcCBDb3VudGVyCisKKwlub3VzYgkJW1VTQl0gRGlzYWJsZSB0aGUgVVNCIHN1YnN5c3RlbQorCisJbm93YgkJW0FSTV0KKyAKKwlvcGwzPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPgorCisJb3BsM3NhPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1wdV9pbz4sPG1wdV9pcnE+CisKKwlvcGwzc2EyPQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8bXNzX2lvPiw8bXB1X2lvPiw8eW1vZGU+LDxsb29wYmFjaz5bLDxpc2FwbnA+LDxtdWx0aXBsZV0KKyAKKwlvcHJvZmlsZS50aW1lcj0JW0hXXQorCQkJVXNlIHRpbWVyIGludGVycnVwdCBpbnN0ZWFkIG9mIHBlcmZvcm1hbmNlIGNvdW50ZXJzCisKKwlvcHRjZD0JCVtIVyxDRF0KKwkJCUZvcm1hdDogPGlvPgorCisJb3NzdD0JCVtIVyxTQ1NJXSBTQ1NJIFRhcGUgRHJpdmVyCisJCQlGb3JtYXQ6IDxidWZmZXJfc2l6ZT4sPHdyaXRlX3RocmVzaG9sZD4KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vc2NzaS9zdC50eHQuCisKKwlwYW5pYz0JCVtLTkxdIEtlcm5lbCBiZWhhdmlvdXIgb24gcGFuaWMKKwkJCUZvcm1hdDogPHRpbWVvdXQ+CisKKwlwYXJrYmQucG9ydD0JW0hXXSBQYXJhbGxlbCBwb3J0IG51bWJlciB0aGUga2V5Ym9hcmQgYWRhcHRlciBpcworCQkJY29ubmVjdGVkIHRvLCBkZWZhdWx0IGlzIDAuCisJCQlGb3JtYXQ6IDxwYXJwb3J0Iz4KKwlwYXJrYmQubW9kZT0JW0hXXSBQYXJhbGxlbCBwb3J0IGtleWJvYXJkIGFkYXB0ZXIgbW9kZSBvZiBvcGVyYXRpb24sCisJCQkwIGZvciBYVCwgMSBmb3IgQVQgKGRlZmF1bHQgaXMgQVQpLgorCQkJRm9ybWF0OiA8bW9kZT4gCisKKwlwYXJwb3J0PTAJW0hXLFBQVF0JU3BlY2lmeSBwYXJhbGxlbCBwb3J0cy4gMCBkaXNhYmxlcy4KKwlwYXJwb3J0PWF1dG8JCQlVc2UgJ2F1dG8nIHRvIGZvcmNlIHRoZSBkcml2ZXIgdG8gdXNlCisJcGFycG9ydD0weEJCQlssSVJRWyxETUFdXQlhbnkgSVJRL0RNQSBzZXR0aW5ncyBkZXRlY3RlZCAodGhlCisJCQkJCWRlZmF1bHQgaXMgdG8gaWdub3JlIGRldGVjdGVkIElSUS9ETUEKKwkJCQkJc2V0dGluZ3MgYmVjYXVzZSBvZiBwb3NzaWJsZQorCQkJCQljb25mbGljdHMpLiBZb3UgY2FuIHNwZWNpZnkgdGhlIGJhc2UKKwkJCQkJYWRkcmVzcywgSVJRLCBhbmQgRE1BIHNldHRpbmdzOyBJUlEgYW5kCisJCQkJCURNQSBzaG91bGQgYmUgbnVtYmVycywgb3IgJ2F1dG8nIChmb3IKKwkJCQkJdXNpbmcgZGV0ZWN0ZWQgc2V0dGluZ3Mgb24gdGhhdAorCQkJCQlwYXJ0aWN1bGFyIHBvcnQpLCBvciAnbm9maWZvJyAodG8gYXZvaWQKKwkJCQkJdXNpbmcgYSBGSUZPIGV2ZW4gaWYgaXQgaXMgZGV0ZWN0ZWQpLgorCQkJCQlQYXJhbGxlbCBwb3J0cyBhcmUgYXNzaWduZWQgaW4gdGhlCisJCQkJCW9yZGVyIHRoZXkgYXJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZAorCQkJCQlsaW5lLCBzdGFydGluZyB3aXRoIHBhcnBvcnQwLgorCisJcGFycG9ydF9pbml0X21vZGU9CisJCQlbSFcsUFBUXQlDb25maWd1cmUgVklBIHBhcmFsbGVsIHBvcnQgdG8KKwkJCQkJb3BlcmF0ZSBpbiBzcGVjaWZpYyBtb2RlLiBUaGlzIGlzCisJCQkJCW5lY2Vzc2FyeSBvbiBQZWdhc29zIGNvbXB1dGVyIHdoZXJlCisJCQkJCWZpcm13YXJlIGhhcyBubyBvcHRpb25zIGZvciBzZXR0aW5nIHVwCisJCQkJCXBhcmFsbGVsIHBvcnQgbW9kZSBhbmQgc2V0cyBpdCB0bworCQkJCQlzcHAuIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIGtub3dzCisJCQkJCTY4NmEgYW5kIDgyMzEgY2hpcHMuCisJCQlGb3JtYXQ6IFtzcHB8cHMyfGVwcHxlY3B8ZWNwZXBwXQorCisJcGFzMj0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTE2Piw8c2JfaW8+LDxzYl9pcnE+LDxzYl9kbWE+LDxzYl9kbWExNj4KKyAKKwlwYXMxNj0JCVtIVyxTQ1NJXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvcGFzMTYuYy4KKworCXBjYml0PQkJW0hXLElTRE5dCisKKwlwY2QuCQlbUEFSSURFXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYy4KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vcGFyaWRlLnR4dC4KKworCXBjaT1vcHRpb25bLG9wdGlvbi4uLl0JCVtQQ0ldIHZhcmlvdXMgUENJIHN1YnN5c3RlbSBvcHRpb25zOgorCQlvZmYJCQlbSUEtMzJdIGRvbid0IHByb2JlIGZvciB0aGUgUENJIGJ1cworCQliaW9zCQkJW0lBLTMyXSBmb3JjZSB1c2Ugb2YgUENJIEJJT1MsIGRvbid0IGFjY2VzcworCQkJCQl0aGUgaGFyZHdhcmUgZGlyZWN0bHkuIFVzZSB0aGlzIGlmIHlvdXIgbWFjaGluZQorCQkJCQloYXMgYSBub24tc3RhbmRhcmQgUENJIGhvc3QgYnJpZGdlLgorCQlub2Jpb3MJCQlbSUEtMzJdIGRpc2FsbG93IHVzZSBvZiBQQ0kgQklPUywgb25seSBkaXJlY3QKKwkJCQkJaGFyZHdhcmUgYWNjZXNzIG1ldGhvZHMgYXJlIGFsbG93ZWQuIFVzZSB0aGlzCisJCQkJCWlmIHlvdSBleHBlcmllbmNlIGNyYXNoZXMgdXBvbiBib290dXAgYW5kIHlvdQorCQkJCQlzdXNwZWN0IHRoZXkgYXJlIGNhdXNlZCBieSB0aGUgQklPUy4KKwkJY29uZjEJCQlbSUEtMzJdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbiBNZWNoYW5pc20gMS4KKwkJY29uZjIJCQlbSUEtMzJdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbiBNZWNoYW5pc20gMi4KKwkJbm9zb3J0CQkJW0lBLTMyXSBEb24ndCBzb3J0IFBDSSBkZXZpY2VzIGFjY29yZGluZyB0bworCQkJCQlvcmRlciBnaXZlbiBieSB0aGUgUENJIEJJT1MuIFRoaXMgc29ydGluZyBpcyBkb25lCisJCQkJCXRvIGdldCBhIGRldmljZSBvcmRlciBjb21wYXRpYmxlIHdpdGggb2xkZXIga2VybmVscy4KKwkJYmlvc2lycQkJCVtJQS0zMl0gVXNlIFBDSSBCSU9TIGNhbGxzIHRvIGdldCB0aGUgaW50ZXJydXB0CisJCQkJCXJvdXRpbmcgdGFibGUuIFRoZXNlIGNhbGxzIGFyZSBrbm93biB0byBiZSBidWdneQorCQkJCQlvbiBzZXZlcmFsIG1hY2hpbmVzIGFuZCB0aGV5IGhhbmcgdGhlIG1hY2hpbmUgd2hlbiB1c2VkLAorCQkJCQlidXQgb24gb3RoZXIgY29tcHV0ZXJzIGl0J3MgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUKKwkJCQkJaW50ZXJydXB0IHJvdXRpbmcgdGFibGUuIFRyeSB0aGlzIG9wdGlvbiBpZiB0aGUga2VybmVsCisJCQkJCWlzIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlFzIG9yIGRpc2NvdmVyIHNlY29uZGFyeSBQQ0kKKwkJCQkJYnVzZXMgb24geW91ciBtb3RoZXJib2FyZC4KKwkJcm9tCQkJW0lBLTMyXSBBc3NpZ24gYWRkcmVzcyBzcGFjZSB0byBleHBhbnNpb24gUk9Ncy4KKwkJCQkJVXNlIHdpdGggY2F1dGlvbiBhcyBjZXJ0YWluIGRldmljZXMgc2hhcmUgYWRkcmVzcworCQkJCQlkZWNvZGVycyBiZXR3ZWVuIFJPTXMgYW5kIG90aGVyIHJlc291cmNlcy4KKwkJaXJxbWFzaz0weE1NTU0JCVtJQS0zMl0gU2V0IGEgYml0IG1hc2sgb2YgSVJRcyBhbGxvd2VkIHRvIGJlIGFzc2lnbmVkCisJCQkJCWF1dG9tYXRpY2FsbHkgdG8gUENJIGRldmljZXMuIFlvdSBjYW4gbWFrZSB0aGUga2VybmVsCisJCQkJCWV4Y2x1ZGUgSVJRcyBvZiB5b3VyIElTQSBjYXJkcyB0aGlzIHdheS4KKwkJbGFzdGJ1cz1OCQlbSUEtMzJdIFNjYW4gYWxsIGJ1c2VzIHRpbGwgYnVzICNOLiBDYW4gYmUgdXNlZnVsCisJCQkJCWlmIHRoZSBrZXJuZWwgaXMgdW5hYmxlIHRvIGZpbmQgeW91ciBzZWNvbmRhcnkgYnVzZXMKKwkJCQkJYW5kIHlvdSB3YW50IHRvIHRlbGwgaXQgZXhwbGljaXRseSB3aGljaCBvbmVzIHRoZXkgYXJlLgorCQlhc3NpZ24tYnVzc2VzCQlbSUEtMzJdIEFsd2F5cyBhc3NpZ24gYWxsIFBDSSBidXMKKwkJCQkJbnVtYmVycyBvdXJzZWx2ZXMsIG92ZXJyaWRpbmcKKwkJCQkJd2hhdGV2ZXIgdGhlIGZpcm13YXJlIG1heSBoYXZlCisJCQkJCWRvbmUuCisJCXVzZXBpcnFtYXNrCQlbSUEtMzJdIEhvbm9yIHRoZSBwb3NzaWJsZSBJUlEgbWFzaworCQkJCQlzdG9yZWQgaW4gdGhlIEJJT1MgJFBJUiB0YWJsZS4gVGhpcyBpcworCQkJCQluZWVkZWQgb24gc29tZSBzeXN0ZW1zIHdpdGggYnJva2VuCisJCQkJCUJJT1Nlcywgbm90YWJseSBzb21lIEhQIFBhdmlsaW9uIE41NDAwCisJCQkJCWFuZCBPbW5pYm9vayBYRTMgbm90ZWJvb2tzLiBUaGlzIHdpbGwKKwkJCQkJaGF2ZSBubyBlZmZlY3QgaWYgQUNQSSBJUlEgcm91dGluZyBpcworCQkJCQllbmFibGVkLgorCQlub2FjcGkJCQlbSUEtMzJdIERvIG5vdCB1c2UgQUNQSSBmb3IgSVJRIHJvdXRpbmcKKwkJCQkJb3IgZm9yIFBDSSBzY2FubmluZy4KKwkJcm91dGVpcnEJCURvIElSUSByb3V0aW5nIGZvciBhbGwgUENJIGRldmljZXMuCisJCQkJCVRoaXMgaXMgbm9ybWFsbHkgZG9uZSBpbiBwY2lfZW5hYmxlX2RldmljZSgpLAorCQkJCQlzbyB0aGlzIG9wdGlvbiBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kCisJCQkJCWZvciBicm9rZW4gZHJpdmVycyB0aGF0IGRvbid0IGNhbGwgaXQuCisKKwkJZmlybXdhcmUJCVtBUk1dIERvIG5vdCByZS1lbnVtZXJhdGUgdGhlIGJ1cyBidXQKKwkJCQkJaW5zdGVhZCBqdXN0IHVzZSB0aGUgY29uZmlndXJhdGlvbgorCQkJCQlmcm9tIHRoZSBib290bG9hZGVyLiBUaGlzIGlzIGN1cnJlbnRseQorCQkJCQl1c2VkIG9uIElYUDIwMDAgc3lzdGVtcyB3aGVyZSB0aGUKKwkJCQkJYnVzIGhhcyB0byBiZSBjb25maWd1cmVkIGEgY2VydGFpbiB3YXkKKwkJCQkJZm9yIGFkanVuY3QgQ1BVcy4KKworCXBjbXY9CQlbSFcsUENNQ0lBXSBCYWRnZVBBRCA0CisKKwlwZC4JCVtQQVJJREVdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9wYXJpZGUudHh0LgorCisJcGRjY2hhc3Npcz0JW1BBUklTQyxIV10gRGlzYWJsZS9FbmFibGUgUERDIENoYXNzaXMgU3RhdHVzIGNvZGVzIGF0CisJCQlib290IHRpbWUuCisJCQlGb3JtYXQ6IHsgMCB8IDEgfQorCQkJU2VlIGFyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY2hhc3Npcy5jCisKKwlwZi4JCVtQQVJJREVdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9wYXJpZGUudHh0LgorCisJcGcuCQlbUEFSSURFXQorCQkJU2VlIERvY3VtZW50YXRpb24vcGFyaWRlLnR4dC4KKworCXBpcnE9CQlbU01QLEFQSUNdIE1hbnVhbCBtcC10YWJsZSBzZXR1cAorCQkJU2VlIERvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dC4KKworCXBsaXA9CQlbUFBULE5FVF0gUGFyYWxsZWwgcG9ydCBuZXR3b3JrIGxpbmsKKwkJCUZvcm1hdDogeyBwYXJwb3J0PG5yPiB8IHRpbWlkIHwgMCB9CisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3BhcnBvcnQudHh0LgorCisJcG5wYWNwaT0JW0FDUEldCisJCQl7IG9mZiB9CisKKwlwbnBiaW9zPQlbSVNBUE5QXQorCQkJeyBvbiB8IG9mZiB8IGN1cnIgfCByZXMgfCBuby1jdXJyIHwgbm8tcmVzIH0KKworCXBucF9yZXNlcnZlX2lycT0KKwkJCVtJU0FQTlBdIEV4Y2x1ZGUgSVJRcyBmb3IgdGhlIGF1dG9jb25maWd1cmF0aW9uCisKKwlwbnBfcmVzZXJ2ZV9kbWE9CisJCQlbSVNBUE5QXSBFeGNsdWRlIERNQXMgZm9yIHRoZSBhdXRvY29uZmlndXJhdGlvbgorCisJcG5wX3Jlc2VydmVfaW89CVtJU0FQTlBdIEV4Y2x1ZGUgSS9PIHBvcnRzIGZvciB0aGUgYXV0b2NvbmZpZ3VyYXRpb24KKwkJICAgICAJUmFuZ2VzIGFyZSBpbiBwYWlycyAoSS9PIHBvcnQgYmFzZSBhbmQgc2l6ZSkuCisKKwlwbnBfcmVzZXJ2ZV9tZW09CisJCQlbSVNBUE5QXSBFeGNsdWRlIG1lbW9yeSByZWdpb25zIGZvciB0aGUgYXV0b2NvbmZpZ3VyYXRpb24KKwkJCVJhbmdlcyBhcmUgaW4gcGFpcnMgKG1lbW9yeSBiYXNlIGFuZCBzaXplKS4KKworCXByb2ZpbGU9CVtLTkxdIEVuYWJsZSBrZXJuZWwgcHJvZmlsaW5nIHZpYSAvcHJvYy9wcm9maWxlCisJCQl7IHNjaGVkdWxlIHwgPG51bWJlcj4gfQorCQkJKHBhcmFtOiBzY2hlZHVsZSAtIHByb2ZpbGUgc2NoZWR1bGUgcG9pbnRzfQorCQkJKHBhcmFtOiBwcm9maWxlIHN0ZXAvYnVja2V0IHNpemUgYXMgYSBwb3dlciBvZiAyIGZvcgorCQkJCXN0YXRpc3RpY2FsIHRpbWUgYmFzZWQgcHJvZmlsaW5nKQorCisJcHJvY2Vzc29yLm1heF9jc3RhdGU9ICAgW0hXLCBBQ1BJXQorCQkJTGltaXQgcHJvY2Vzc29yIHRvIG1heGltdW0gQy1zdGF0ZQorCQkJbWF4X2NzdGF0ZT05IG92ZXJyaWRlcyBhbnkgRE1JIGJsYWNrbGlzdCBsaW1pdC4KKworCXByb21wdF9yYW1kaXNrPQlbUkFNXSBMaXN0IG9mIFJBTSBkaXNrcyB0byBwcm9tcHQgZm9yIGZsb3BweSBkaXNrCisJCQliZWZvcmUgbG9hZGluZy4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3JhbWRpc2sudHh0LgorCisJcHNtb3VzZS5wcm90bz0gIFtIVyxNT1VTRV0gSGlnaGVzdCBQUzIgbW91c2UgcHJvdG9jb2wgZXh0ZW5zaW9uIHRvCisJCQlwcm9iZSBmb3IgKGJhcmV8aW1wc3xleHBzKS4KKwlwc21vdXNlLnJhdGU9CVtIVyxNT1VTRV0gU2V0IGRlc2lyZWQgbW91c2UgcmVwb3J0IHJhdGUsIGluIHJlcG9ydHMKKwkJCXBlciBzZWNvbmQuCisJcHNtb3VzZS5yZXNldGFmdGVyPQorCQkJW0hXLE1PVVNFXSBUcnkgdG8gcmVzZXQgdGhlIGRldmljZSBhZnRlciBzbyBtYW55IGJhZCBwYWNrZXRzCisJCQkoMCA9IG5ldmVyKS4KKwlwc21vdXNlLnJlc29sdXRpb249CisJCQlbSFcsTU9VU0VdIFNldCBkZXNpcmVkIG1vdXNlIHJlc29sdXRpb24sIGluIGRwaS4KKwlwc21vdXNlLnNtYXJ0c2Nyb2xsPQorCQkJW0hXLE1PVVNFXSBDb250cm9scyBMb2dpdGVjaCBzbWFydHNjcm9sbCBhdXRvcmVwZWF0LAorCQkJMCA9IGRpc2FibGVkLCAxID0gZW5hYmxlZCAoZGVmYXVsdCkuCisKKwlwc3M9CQlbSFcsT1NTXSBQZXJzb25hbCBTb3VuZCBTeXN0ZW0gKEVDSE8gRVNDNjE0KQorCQkJRm9ybWF0OiA8aW8+LDxtc3NfaW8+LDxtc3NfaXJxPiw8bXNzX2RtYT4sPG1wdV9pbz4sPG1wdV9pcnE+CisKKwlwdC4JCVtQQVJJREVdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9wYXJpZGUudHh0LgorCisJcXVpZXQ9CQlbS05MXSBEaXNhYmxlIGxvZyBtZXNzYWdlcworIAorCXIxMjg9CQlbSFcsRFJNXQorCisJcmFpZD0JCVtIVyxSQUlEXQorCQkJU2VlIERvY3VtZW50YXRpb24vbWQudHh0LgorCisJcmFtZGlzaz0JW1JBTV0gU2l6ZXMgb2YgUkFNIGRpc2tzIGluIGtpbG9ieXRlcyBbZGVwcmVjYXRlZF0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3JhbWRpc2sudHh0LgorCisJcmFtZGlza19ibG9ja3NpemU9CisJCQlbUkFNXQorCQkJU2VlIERvY3VtZW50YXRpb24vcmFtZGlzay50eHQuCisgCisJcmFtZGlza19zaXplPQlbUkFNXSBTaXplcyBvZiBSQU0gZGlza3MgaW4ga2lsb2J5dGVzCisJCQlOZXcgbmFtZSBmb3IgdGhlIHJhbWRpc2sgcGFyYW1ldGVyLgorCQkJU2VlIERvY3VtZW50YXRpb24vcmFtZGlzay50eHQuCisKKwlyZWJvb3Q9CQlbQlVHUz1JQS0zMixCVUdTPUFSTSxCVUdTPUlBLTY0XSBSZWJvb3RpbmcgbW9kZQorCQkJRm9ybWF0OiA8cmVib290X21vZGU+Wyw8cmVib290X21vZGUyPlssLi4uXV0KKwkJCVNlZSBhcmNoLyova2VybmVsL3JlYm9vdC5jLgorCisJcmVzZXJ2ZT0JW0tOTCxCVUdTXSBGb3JjZSB0aGUga2VybmVsIHRvIGlnbm9yZSBzb21lIGlvbWVtIGFyZWEKKworCXJlc3VtZT0JCVtTV1NVU1BdIFNwZWNpZnkgdGhlIHBhcnRpdGlvbiBkZXZpY2UgZm9yIHNvZnR3YXJlIHN1c3BlbnNpb24KKworCXJoYXNoX2VudHJpZXM9CVtLTkwsTkVUXQorCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHJvdXRlIGNhY2hlCisKKwlyaXNjb204PQlbSFcsU0VSSUFMXQorCQkJRm9ybWF0OiA8aW9fYm9hcmQxPlssPGlvX2JvYXJkMj5bLC4uLjxpb19ib2FyZE4+XV0KKworCXJvCQlbS05MXSBNb3VudCByb290IGRldmljZSByZWFkLW9ubHkgb24gYm9vdAorCisJcm9vdD0JCVtLTkxdIFJvb3QgZmlsZXN5c3RlbQorCisJcm9vdGRlbGF5PQlbS05MXSBEZWxheSAoaW4gc2Vjb25kcykgdG8gcGF1c2UgYmVmb3JlIGF0dGVtcHRpbmcgdG8KKwkJCW1vdW50IHRoZSByb290IGZpbGVzeXN0ZW0KKworCXJvb3RmbGFncz0JW0tOTF0gU2V0IHJvb3QgZmlsZXN5c3RlbSBtb3VudCBvcHRpb24gc3RyaW5nCisKKwlyb290ZnN0eXBlPQlbS05MXSBTZXQgcm9vdCBmaWxlc3lzdGVtIHR5cGUKKworCXJ3CQlbS05MXSBNb3VudCByb290IGRldmljZSByZWFkLXdyaXRlIG9uIGJvb3QKKworCVMJCVtLTkxdIFJ1biBpbml0IGluIHNpbmdsZSBtb2RlCisKKwlzYTExMDBpcglbTkVUXQorCQkJU2VlIGRyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMuCisKKwlzYj0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+CisKKwlzYm5pPQkJW05FVF0gR3JhbmNoIFNCTkkxMiBsZWFzZWQgbGluZSBhZGFwdGVyCisgCisJc2JwY2Q9CQlbSFcsQ0RdIFNvdW5kYmxhc3RlciBDRCBhZGFwdGVyCisJCQlGb3JtYXQ6IDxpbz4sPHR5cGU+CisJCQlTZWUgYSBjb21tZW50IGJlZm9yZSBmdW5jdGlvbiBzYnBjZF9zZXR1cCgpIGluCisJCQlkcml2ZXJzL2Nkcm9tL3NicGNkLmMuCisKKwlzYzEyMDB3ZHQ9CVtIVyxXRFRdIFNDMTIwMCBXRFQgKHdhdGNoZG9nKSBkcml2ZXIKKwkJCUZvcm1hdDogPGlvPlssPHRpbWVvdXQ+Wyw8aXNhcG5wPl1dCisKKwlzY3NpX2RlYnVnXyo9CVtTQ1NJXQorCQkJU2VlIGRyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMuCisKKwlzY3NpX2RlZmF1bHRfZGV2X2ZsYWdzPQorCQkJW1NDU0ldIFNDU0kgZGVmYXVsdCBkZXZpY2UgZmxhZ3MKKwkJCUZvcm1hdDogPGludGVnZXI+CisKKwlzY3NpX2Rldl9mbGFncz0JW1NDU0ldIEJsYWNrL3doaXRlIGxpc3QgZW50cnkgZm9yIHZlbmRvciBhbmQgbW9kZWwKKwkJCUZvcm1hdDogPHZlbmRvcj46PG1vZGVsPjo8ZmxhZ3M+CisJCQkoZmxhZ3MgYXJlIGludGVnZXIgdmFsdWUpCisKKwlzY3NpX2xvZ2dpbmc9CVtTQ1NJXQorCisJc2VsaW51eAkJW1NFTElOVVhdIERpc2FibGUgb3IgZW5hYmxlIFNFTGludXggYXQgYm9vdCB0aW1lLgorCQkJRm9ybWF0OiB7ICIwIiB8ICIxIiB9CisJCQlTZWUgc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnIGhlbHAgdGV4dC4KKwkJCTAgLS0gZGlzYWJsZS4KKwkJCTEgLS0gZW5hYmxlLgorCQkJRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdmlhIGtlcm5lbCBjb25maWcgb3B0aW9uLgorCQkJSWYgZW5hYmxlZCBhdCBib290IHRpbWUsIC9zZWxpbnV4L2Rpc2FibGUgY2FuIGJlIHVzZWQKKwkJCWxhdGVyIHRvIGRpc2FibGUgcHJpb3IgdG8gaW5pdGlhbCBwb2xpY3kgbG9hZC4KKworCXNlcmlhbG51bWJlcglbQlVHUz1JQS0zMl0KKworCXNnX2RlZl9yZXNlcnZlZF9zaXplPQorCQkJW1NDU0ldCisgCisJc2dhbGF4eT0JW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPHNnYmFzZT4KKworCXNoYXBlcnM9CVtORVRdCisJCQlNYXhpbWFsIG51bWJlciBvZiBzaGFwZXJzLgorIAorCXNpbTcxMD0JCVtTQ1NJLEhXXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvc2ltNzEwLmMuCisKKwlzaW1ldGg9CQlbSUEtNjRdCisJc2ltc2NzaT0KKyAKKwlzamNkPQkJW0hXLENEXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+CisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvY2Ryb20vc2pjZC5jLgorCisJc2xyYW09CQlbSFcsTVREXQorCisJc21hcnQyPQkJW0hXXQorCQkJRm9ybWF0OiA8aW8xPlssPGlvMj5bLC4uLiw8aW84Pl1dCisKKwlzbmQtYWQxODE2YT0JW0hXLEFMU0FdCisKKwlzbmQtYWQxODQ4PQlbSFcsQUxTQV0KKworCXNuZC1hbGk1NDUxPQlbSFcsQUxTQV0KKworCXNuZC1hbHMxMDA9CVtIVyxBTFNBXQorCisJc25kLWFsczQwMDA9CVtIVyxBTFNBXQorCisJc25kLWF6dDIzMjA9CVtIVyxBTFNBXQorCisJc25kLWNtaTgzMzA9CVtIVyxBTFNBXQorCisJc25kLWNtaXBjaT0JW0hXLEFMU0FdCisKKwlzbmQtY3M0MjMxPQlbSFcsQUxTQV0KKworCXNuZC1jczQyMzI9CVtIVyxBTFNBXQorCisJc25kLWNzNDIzNj0JW0hXLEFMU0FdCisKKwlzbmQtY3M0MjgxPQlbSFcsQUxTQV0KKworCXNuZC1jczQ2eHg9CVtIVyxBTFNBXQorCisJc25kLWR0MDE5eD0JW0hXLEFMU0FdCisKKwlzbmQtZHVtbXk9CVtIVyxBTFNBXQorCisJc25kLWVtdTEwazE9CVtIVyxBTFNBXQorCisJc25kLWVuczEzNzA9CVtIVyxBTFNBXQorCisJc25kLWVuczEzNzE9CVtIVyxBTFNBXQorCisJc25kLWVzOTY4PQlbSFcsQUxTQV0KKworCXNuZC1lczE2ODg9CVtIVyxBTFNBXQorCisJc25kLWVzMTh4eD0JW0hXLEFMU0FdCisKKwlzbmQtZXMxOTM4PQlbSFcsQUxTQV0KKworCXNuZC1lczE5Njg9CVtIVyxBTFNBXQorCisJc25kLWZtODAxPQlbSFcsQUxTQV0KKworCXNuZC1ndXNjbGFzc2ljPQlbSFcsQUxTQV0KKworCXNuZC1ndXNleHRyZW1lPQlbSFcsQUxTQV0KKworCXNuZC1ndXNtYXg9CVtIVyxBTFNBXQorCisJc25kLWhkc3A9CVtIVyxBTFNBXQorCisJc25kLWljZTE3MTI9CVtIVyxBTFNBXQorCisJc25kLWludGVsOHgwPQlbSFcsQUxTQV0KKworCXNuZC1pbnRlcndhdmU9CVtIVyxBTFNBXQorCisJc25kLWludGVyd2F2ZS1zdGI9CisJCQlbSFcsQUxTQV0KKworCXNuZC1rb3JnMTIxMj0JW0hXLEFMU0FdCisKKwlzbmQtbWFlc3RybzM9CVtIVyxBTFNBXQorCisJc25kLW1wdTQwMT0JW0hXLEFMU0FdCisKKwlzbmQtbXRwYXY9CVtIVyxBTFNBXQorCisJc25kLW5tMjU2PQlbSFcsQUxTQV0KKworCXNuZC1vcGwzc2EyPQlbSFcsQUxTQV0KKworCXNuZC1vcHRpOTJ4LWFkMTg0OD0KKwkJCVtIVyxBTFNBXQorCisJc25kLW9wdGk5MngtY3M0MjMxPQorCQkJW0hXLEFMU0FdCisKKwlzbmQtb3B0aTkzeD0JW0hXLEFMU0FdCisKKwlzbmQtcG1hYz0JW0hXLEFMU0FdCisKKwlzbmQtcm1lMzI9CVtIVyxBTFNBXQorCisJc25kLXJtZTk2PQlbSFcsQUxTQV0KKworCXNuZC1ybWU5NjUyPQlbSFcsQUxTQV0KKworCXNuZC1zYjg9CVtIVyxBTFNBXQorCisJc25kLXNiMTY9CVtIVyxBTFNBXQorCisJc25kLXNiYXdlPQlbSFcsQUxTQV0KKworCXNuZC1zZXJpYWw9CVtIVyxBTFNBXQorCisJc25kLXNnYWxheHk9CVtIVyxBTFNBXQorCisJc25kLXNvbmljdmliZXM9CVtIVyxBTFNBXQorCisJc25kLXN1bi1hbWQ3OTMwPQorCQkJW0hXLEFMU0FdCisKKwlzbmQtc3VuLWNzNDIzMT0JW0hXLEFMU0FdCisKKwlzbmQtdHJpZGVudD0JW0hXLEFMU0FdCisKKwlzbmQtdXNiLWF1ZGlvPQlbSFcsQUxTQSxVU0JdCisKKwlzbmQtdmlhODJ4eD0JW0hXLEFMU0FdCisKKwlzbmQtdmlybWlkaT0JW0hXLEFMU0FdCisKKwlzbmQtd2F2ZWZyb250PQlbSFcsQUxTQV0KKworCXNuZC15bWZwY2k9CVtIVyxBTFNBXQorIAorCXNvbmljdmliZXM9CVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxyZXZlcmI+CisgCisJc29ueWNkNTM1PQlbSFcsQ0RdCisJCQlGb3JtYXQ6IDxpbz5bLDxpcnE+XQorCisJc29ueXBpLio9CVtIV10gU29ueSBQcm9ncmFtbWFibGUgSS9PIENvbnRyb2wgRGV2aWNlIGRyaXZlcgorCQkJU2VlIERvY3VtZW50YXRpb24vc29ueXBpLnR4dAorCisJc3BlY2lhbGl4PQlbSFcsU0VSSUFMXSBTcGVjaWFsaXggbXVsdGktc2VyaWFsIHBvcnQgYWRhcHRlcgorCQkJU2VlIERvY3VtZW50YXRpb24vc3BlY2lhbGl4LnR4dC4KKworCXNwaWFfaW9fYmFzZT0JW0hXLE1URF0KKwlzcGlhX2Zpb19iYXNlPQorCXNwaWFfcGVkcj0KKwlzcGlhX3BlZGRyPQorCisJc3NjYXBlPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8bXB1X2lvPiw8bXB1X2lycT4KKyAKKwlzdD0JCVtIVyxTQ1NJXSBTQ1NJIHRhcGUgcGFyYW1ldGVycyAoYnVmZmVycywgZXRjLikKKwkJCVNlZSBEb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0LgorCisJc3QweD0JCVtIVyxTQ1NJXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvc2VhZ2F0ZS5jLgorCisJc3RpPQkJW1BBUklTQyxIV10KKwkJCUZvcm1hdDogPG51bT4KKwkJCVNldCB0aGUgU1RJIChidWlsdGluIGRpc3BsYXkva2V5Ym9hcmQgb24gdGhlIEhQLVBBUklTQworCQkJbWFjaGluZXMpIGNvbnNvbGUgKGdyYXBoaWMgY2FyZCkgd2hpY2ggc2hvdWxkIGJlIHVzZWQKKwkJCWFzIHRoZSBpbml0aWFsIGJvb3QtY29uc29sZS4KKwkJCVNlZSBhbHNvIGNvbW1lbnQgaW4gZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvcmUuYy4KKworCXN0aV9mb250PQlbSFddCisJCQlTZWUgY29tbWVudCBpbiBkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29yZS5jLgorCisJc3RpZmI9CQlbSFddCisJCQlGb3JtYXQ6IGJwcDo8YnBwMT5bOjxicHAyPls6PGJwcDM+Li4uXV0KKworCXN0cmFtX3N3YXA9CVtIVyxNNjhrXQorCisJc3dpb3RsYj0JW0lBLTY0XSBOdW1iZXIgb2YgSS9PIFRMQiBzbGFicworIAorCXN3aXRjaGVzPQlbSFcsTTY4a10KKworCXN5bTUzYzQxNj0JW0hXLFNDU0ldCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9zeW01M2M0MTYuYy4KKworCXQxMjg9CQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL3QxMjguYy4KKworCXRkZng9CQlbSFcsRFJNXQorCisJdGhhc2hfZW50cmllcz0JW0tOTCxORVRdCisJCQlTZXQgbnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgVENQIGNvbm5lY3Rpb24KKworCXRpbWUJCVNob3cgdGltaW5nIGRhdGEgcHJlZml4ZWQgdG8gZWFjaCBwcmludGsgbWVzc2FnZSBsaW5lCisKKwl0aXBhci50aW1lb3V0PQlbSFcsUFBUXQorCQkJU2V0IGNvbW11bmljYXRpb25zIHRpbWVvdXQgaW4gdGVudGhzIG9mIGEgc2Vjb25kCisJCQkoZGVmYXVsdCAxNSkuCisKKwl0aXBhci5kZWxheT0JW0hXLFBQVF0KKwkJCVNldCBpbnRlci1iaXQgZGVsYXkgaW4gbWljcm9zZWNvbmRzIChkZWZhdWx0IDEwKS4KKworCXRtYzh4eD0JCVtIVyxTQ1NJXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvc2VhZ2F0ZS5jLgorCisJdG1zY3NpbT0JW0hXLFNDU0ldCisJCQlTZWUgY29tbWVudCBiZWZvcmUgZnVuY3Rpb24gZGMzOTBfc2V0dXAoKSBpbgorCQkJZHJpdmVycy9zY3NpL3Rtc2NzaW0uYy4KKworCXRwNzIwPQkJW0hXLFBTMl0KKworCXRyaXg9CQlbSFcsT1NTXSBNZWRpYVRyaXggQXVkaW9Ucml4IFBybworCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2JfaW8+LDxzYl9pcnE+LDxzYl9kbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgorIAorCXRzZGV2LnhyZXM9CVtUU10gSG9yaXpvbnRhbCBzY3JlZW4gcmVzb2x1dGlvbi4KKwl0c2Rldi55cmVzPQlbVFNdIFZlcnRpY2FsIHNjcmVlbiByZXNvbHV0aW9uLgorCisJdHVyYm9ncmFmeC5tYXBbMnwzXT0KKwkJCVtIVyxKT1ldIFR1cmJvR3JhRlggcGFyYWxsZWwgcG9ydCBpbnRlcmZhY2UKKwkJCUZvcm1hdDogPHBvcnQjPiw8anMxPiw8anMyPiw8anMzPiw8anM0Piw8anM1Piw8anM2Piw8anM3PgorCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dAorCisJdTE0LTM0Zj0JW0hXLFNDU0ldIFVsdHJhU3RvciAxNEYvMzRGIFNDU0kgaG9zdCBhZGFwdGVyCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS91MTQtMzRmLmMuCisKKwl1YXJ0NDAxPQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+CisKKwl1YXJ0Njg1MD0JW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPgorCisJdXNiLWhhbmRvZmYJW0hXXSBFbmFibGUgZWFybHkgVVNCIEJJT1MgLT4gT1MgaGFuZG9mZgorCisJdXNiaGlkLm1vdXNlcG9sbD0KKwkJCVtVU0JISURdIFRoZSBpbnRlcnZhbCB3aGljaCBtaWNlIGFyZSB0byBiZSBwb2xsZWQgYXQuCisgCisJdmlkZW89CQlbRkJdIEZyYW1lIGJ1ZmZlciBjb25maWd1cmF0aW9uCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9mYi9tb2RlZGIudHh0LgorCisJdmdhPQkJW0JPT1QsSUEtMzJdIFNlbGVjdCBhIHBhcnRpY3VsYXIgdmlkZW8gbW9kZQorCQkJU2VlIERvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dCBhbmQgRG9jdW1lbnRhdGlvbi9zdmdhLnR4dC4KKwkJCVVzZSB2Z2E9YXNrIGZvciBtZW51LgorCQkJVGhpcyBpcyBhY3R1YWxseSBhIGJvb3QgbG9hZGVyIHBhcmFtZXRlcjsgdGhlIHZhbHVlIGlzCisJCQlwYXNzZWQgdG8gdGhlIGtlcm5lbCB1c2luZyBhIHNwZWNpYWwgcHJvdG9jb2wuCisKKwl2bWFsbG9jPW5uW0tNR10JW0tOTCxCT09UXSBmb3JjZXMgdGhlIHZtYWxsb2MgYXJlYSB0byBoYXZlIGFuIGV4YWN0CisJCQlzaXplIG9mIDxubj4uIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UgdGhlCisJCQltaW5pbXVtIHNpemUgKDEyOE1CIG9uIHg4NikuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8KKwkJCWRlY3JlYXNlIHRoZSBzaXplIGFuZCBsZWF2ZSBtb3JlIHJvb20gZm9yIGRpcmVjdGx5CisJCQltYXBwZWQga2VybmVsIFJBTS4KKworCXZtaGFsdD0JCVtLTkwsUzM5MF0KKworCXZtcG9mZj0JCVtLTkwsUzM5MF0gCisgCisJd2F2ZWFydGlzdD0JW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4KKyAKKwl3ZDMzYzkzPQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL3dkMzNjOTMuYy4KKworCXdkNzAwMD0JCVtIVyxTQ1NJXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvd2Q3MDAwLmMuCisKKwl3ZHQ9CQlbV0RUXSBXYXRjaGRvZworCQkJU2VlIERvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2cudHh0LgorCisJeGQ9CQlbSFcsWFRdIE9yaWdpbmFsIFhUIHByZS1JREUgKFJMTCBlbmNvZGVkKSBkaXNrcy4KKwl4ZF9nZW89CQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvYmxvY2sveGQuYy4KKworCXhpcmMycHNfY3M9CVtORVQsUENNQ0lBXQorCQkJRm9ybWF0OiA8aXJxPiw8aXJxX21hc2s+LDxpbz4sPGZ1bGxfZHVwbGV4Piw8ZG9fc291bmQ+LDxsb2NrdXBfaGFjaz5bLDxpcnEyPlssPGlycTM+Wyw8aXJxND5dXV0KKworCisKK0NoYW5nZWxvZzoKKworCVRoZSBsYXN0IGtub3duIHVwZGF0ZSAoZm9yIDIuNC4wKSAtIHRoZSBjaGFuZ2Vsb2cgd2FzIG5vdCBrZXB0IGJlZm9yZS4KKwkyMDAwLTA2LT8/CU1yLiBVbmtub3duCisKKwlVcGRhdGUgZm9yIDIuNS40OSwgZGVzY3JpcHRpb24gZm9yIG1vc3Qgb2YgdGhlIG9wdGlvbnMgaW50cm9kdWNlZCwKKwlyZWZlcmVuY2VzIHRvIG90aGVyIGRvY3VtZW50YXRpb24gKEMgZmlsZXMsIFJFQURNRXMsIC4uKSwgYWRkZWQgUzM5MCwKKwlQUEMsIFNQQVJDLCBNVEQsIEFMU0EgYW5kIE9TUyBjYXRlZ29yeS4gTWlub3IgY29ycmVjdGlvbnMgYW5kCisJcmVmb3JtYXR0aW5nLgorCTIwMDItMTEtMjQJUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4KKwkJCVJhbmR5IER1bmxhcCA8cmFuZHkuZHVubGFwQHZlcml6b24ubmV0PgorCitUT0RPOgorCisJQWRkIGRvY3VtZW50YXRpb24gZm9yIEFMU0Egb3B0aW9ucy4KKwlBZGQgbW9yZSBEUk0gZHJpdmVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2V5cy50eHQgYi9Eb2N1bWVudGF0aW9uL2tleXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZDgwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2tleXMudHh0CkBAIC0wLDAgKzEsODY5IEBACisJCQkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJIEtFUk5FTCBLRVkgUkVURU5USU9OIFNFUlZJQ0UKKwkJCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VydmljZSBhbGxvd3MgY3J5cHRvZ3JhcGhpYyBrZXlzLCBhdXRoZW50aWNhdGlvbiB0b2tlbnMsIGNyb3NzLWRvbWFpbgordXNlciBtYXBwaW5ncywgYW5kIHNpbWlsYXIgdG8gYmUgY2FjaGVkIGluIHRoZSBrZXJuZWwgZm9yIHRoZSB1c2Ugb2YKK2ZpbGVzeXN0ZW1zIG90aGVyIGtlcm5lbCBzZXJ2aWNlcy4KKworS2V5cmluZ3MgYXJlIHBlcm1pdHRlZDsgdGhlc2UgYXJlIGEgc3BlY2lhbCB0eXBlIG9mIGtleSB0aGF0IGNhbiBob2xkIGxpbmtzIHRvCitvdGhlciBrZXlzLiBQcm9jZXNzZXMgZWFjaCBoYXZlIHRocmVlIHN0YW5kYXJkIGtleXJpbmcgc3Vic2NyaXB0aW9ucyB0aGF0IGEKK2tlcm5lbCBzZXJ2aWNlIGNhbiBzZWFyY2ggZm9yIHJlbGV2YW50IGtleXMuCisKK1RoZSBrZXkgc2VydmljZSBjYW4gYmUgY29uZmlndXJlZCBvbiBieSBlbmFibGluZzoKKworCSJTZWN1cml0eSBvcHRpb25zIi8iRW5hYmxlIGFjY2VzcyBrZXkgcmV0ZW50aW9uIHN1cHBvcnQiIChDT05GSUdfS0VZUykKKworVGhpcyBkb2N1bWVudCBoYXMgdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworCS0gS2V5IG92ZXJ2aWV3CisJLSBLZXkgc2VydmljZSBvdmVydmlldworCS0gS2V5IGFjY2VzcyBwZXJtaXNzaW9ucworCS0gTmV3IHByb2NmcyBmaWxlcworCS0gVXNlcnNwYWNlIHN5c3RlbSBjYWxsIGludGVyZmFjZQorCS0gS2VybmVsIHNlcnZpY2VzCisJLSBEZWZpbmluZyBhIGtleSB0eXBlCisJLSBSZXF1ZXN0LWtleSBjYWxsYmFjayBzZXJ2aWNlCisJLSBLZXkgYWNjZXNzIGZpbGVzeXN0ZW0KKworCis9PT09PT09PT09PT0KK0tFWSBPVkVSVklFVworPT09PT09PT09PT09CisKK0luIHRoaXMgY29udGV4dCwga2V5cyByZXByZXNlbnQgdW5pdHMgb2YgY3J5cHRvZ3JhcGhpYyBkYXRhLCBhdXRoZW50aWNhdGlvbgordG9rZW5zLCBrZXlyaW5ncywgZXRjLi4gVGhlc2UgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBrZXJuZWwgYnkgc3RydWN0IGtleS4KKworRWFjaCBrZXkgaGFzIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXM6CisKKwktIEEgc2VyaWFsIG51bWJlci4KKwktIEEgdHlwZS4KKwktIEEgZGVzY3JpcHRpb24gKGZvciBtYXRjaGluZyBhIGtleSBpbiBhIHNlYXJjaCkuCisJLSBBY2Nlc3MgY29udHJvbCBpbmZvcm1hdGlvbi4KKwktIEFuIGV4cGlyeSB0aW1lLgorCS0gQSBwYXlsb2FkLgorCS0gU3RhdGUuCisKKworICgqKSBFYWNoIGtleSBpcyBpc3N1ZWQgYSBzZXJpYWwgbnVtYmVyIG9mIHR5cGUga2V5X3NlcmlhbF90IHRoYXQgaXMgdW5pcXVlCisgICAgIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhhdCBrZXkuIEFsbCBzZXJpYWwgbnVtYmVycyBhcmUgcG9zaXRpdmUgbm9uLXplcm8KKyAgICAgMzItYml0IGludGVnZXJzLgorCisgICAgIFVzZXJzcGFjZSBwcm9ncmFtcyBjYW4gdXNlIGEga2V5J3Mgc2VyaWFsIG51bWJlcnMgYXMgYSB3YXkgdG8gZ2FpbiBhY2Nlc3MKKyAgICAgdG8gaXQsIHN1YmplY3QgdG8gcGVybWlzc2lvbiBjaGVja2luZy4KKworICgqKSBFYWNoIGtleSBpcyBvZiBhIGRlZmluZWQgInR5cGUiLiBUeXBlcyBtdXN0IGJlIHJlZ2lzdGVyZWQgaW5zaWRlIHRoZQorICAgICBrZXJuZWwgYnkgYSBrZXJuZWwgc2VydmljZSAoc3VjaCBhcyBhIGZpbGVzeXN0ZW0pIGJlZm9yZSBrZXlzIG9mIHRoYXQKKyAgICAgdHlwZSBjYW4gYmUgYWRkZWQgb3IgdXNlZC4gVXNlcnNwYWNlIHByb2dyYW1zIGNhbm5vdCBkZWZpbmUgbmV3IHR5cGVzCisgICAgIGRpcmVjdGx5LgorCisgICAgIEtleSB0eXBlcyBhcmUgcmVwcmVzZW50ZWQgaW4gdGhlIGtlcm5lbCBieSBzdHJ1Y3Qga2V5X3R5cGUuIFRoaXMgZGVmaW5lcworICAgICBhIG51bWJlciBvZiBvcGVyYXRpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBhIGtleSBvZiB0aGF0IHR5cGUuCisKKyAgICAgU2hvdWxkIGEgdHlwZSBiZSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSwgYWxsIHRoZSBrZXlzIG9mIHRoYXQgdHlwZSB3aWxsCisgICAgIGJlIGludmFsaWRhdGVkLgorCisgKCopIEVhY2gga2V5IGhhcyBhIGRlc2NyaXB0aW9uLiBUaGlzIHNob3VsZCBiZSBhIHByaW50YWJsZSBzdHJpbmcuIFRoZSBrZXkKKyAgICAgdHlwZSBwcm92aWRlcyBhbiBvcGVyYXRpb24gdG8gcGVyZm9ybSBhIG1hdGNoIGJldHdlZW4gdGhlIGRlc2NyaXB0aW9uIG9uCisgICAgIGEga2V5IGFuZCBhIGNyaXRlcmlvbiBzdHJpbmcuCisKKyAoKikgRWFjaCBrZXkgaGFzIGFuIG93bmVyIHVzZXIgSUQsIGEgZ3JvdXAgSUQgYW5kIGEgcGVybWlzc2lvbnMgbWFzay4gVGhlc2UKKyAgICAgYXJlIHVzZWQgdG8gY29udHJvbCB3aGF0IGEgcHJvY2VzcyBtYXkgZG8gdG8gYSBrZXkgZnJvbSB1c2Vyc3BhY2UsIGFuZAorICAgICB3aGV0aGVyIGEga2VybmVsIHNlcnZpY2Ugd2lsbCBiZSBhYmxlIHRvIGZpbmQgdGhlIGtleS4KKworICgqKSBFYWNoIGtleSBjYW4gYmUgc2V0IHRvIGV4cGlyZSBhdCBhIHNwZWNpZmljIHRpbWUgYnkgdGhlIGtleSB0eXBlJ3MKKyAgICAgaW5zdGFudGlhdGlvbiBmdW5jdGlvbi4gS2V5cyBjYW4gYWxzbyBiZSBpbW1vcnRhbC4KKworICgqKSBFYWNoIGtleSBjYW4gaGF2ZSBhIHBheWxvYWQuIFRoaXMgaXMgYSBxdWFudGl0eSBvZiBkYXRhIHRoYXQgcmVwcmVzZW50CisgICAgIHRoZSBhY3R1YWwgImtleSIuIEluIHRoZSBjYXNlIG9mIGEga2V5cmluZywgdGhpcyBpcyBhIGxpc3Qgb2Yga2V5cyB0bworICAgICB3aGljaCB0aGUga2V5cmluZyBsaW5rczsgaW4gdGhlIGNhc2Ugb2YgYSB1c2VyLWRlZmluZWQga2V5LCBpdCdzIGFuCisgICAgIGFyYml0cmFyeSBibG9iIG9mIGRhdGEuCisKKyAgICAgSGF2aW5nIGEgcGF5bG9hZCBpcyBub3QgcmVxdWlyZWQ7IGFuZCB0aGUgcGF5bG9hZCBjYW4sIGluIGZhY3QsIGp1c3QgYmUgYQorICAgICB2YWx1ZSBzdG9yZWQgaW4gdGhlIHN0cnVjdCBrZXkgaXRzZWxmLgorCisgICAgIFdoZW4gYSBrZXkgaXMgaW5zdGFudGlhdGVkLCB0aGUga2V5IHR5cGUncyBpbnN0YW50aWF0aW9uIGZ1bmN0aW9uIGlzCisgICAgIGNhbGxlZCB3aXRoIGEgYmxvYiBvZiBkYXRhLCBhbmQgdGhhdCB0aGVuIGNyZWF0ZXMgdGhlIGtleSdzIHBheWxvYWQgaW4KKyAgICAgc29tZSB3YXkuCisKKyAgICAgU2ltaWxhcmx5LCB3aGVuIHVzZXJzcGFjZSB3YW50cyB0byByZWFkIGJhY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBrZXksIGlmCisgICAgIHBlcm1pdHRlZCwgYW5vdGhlciBrZXkgdHlwZSBvcGVyYXRpb24gd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCB0aGUga2V5J3MKKyAgICAgYXR0YWNoZWQgcGF5bG9hZCBiYWNrIGludG8gYSBibG9iIG9mIGRhdGEuCisKKyAoKikgRWFjaCBrZXkgY2FuIGJlIGluIG9uZSBvZiBhIG51bWJlciBvZiBiYXNpYyBzdGF0ZXM6CisKKyAgICAgKCopIFVuaW5zdGFudGlhdGVkLiBUaGUga2V5IGV4aXN0cywgYnV0IGRvZXMgbm90IGhhdmUgYW55IGRhdGEKKwkgYXR0YWNoZWQuIEtleXMgYmVpbmcgcmVxdWVzdGVkIGZyb20gdXNlcnNwYWNlIHdpbGwgYmUgaW4gdGhpcyBzdGF0ZS4KKworICAgICAoKikgSW5zdGFudGlhdGVkLiBUaGlzIGlzIHRoZSBub3JtYWwgc3RhdGUuIFRoZSBrZXkgaXMgZnVsbHkgZm9ybWVkLCBhbmQKKwkgaGFzIGRhdGEgYXR0YWNoZWQuCisKKyAgICAgKCopIE5lZ2F0aXZlLiBUaGlzIGlzIGEgcmVsYXRpdmVseSBzaG9ydC1saXZlZCBzdGF0ZS4gVGhlIGtleSBhY3RzIGFzIGEKKwkgbm90ZSBzYXlpbmcgdGhhdCBhIHByZXZpb3VzIGNhbGwgb3V0IHRvIHVzZXJzcGFjZSBmYWlsZWQsIGFuZCBhY3RzIGFzCisJIGEgdGhyb3R0bGUgb24ga2V5IGxvb2t1cHMuIEEgbmVnYXRpdmUga2V5IGNhbiBiZSB1cGRhdGVkIHRvIGEgbm9ybWFsCisJIHN0YXRlLgorCisgICAgICgqKSBFeHBpcmVkLiBLZXlzIGNhbiBoYXZlIGxpZmV0aW1lcyBzZXQuIElmIHRoZWlyIGxpZmV0aW1lIGlzIGV4Y2VlZGVkLAorCSB0aGV5IHRyYXZlcnNlIHRvIHRoaXMgc3RhdGUuIEFuIGV4cGlyZWQga2V5IGNhbiBiZSB1cGRhdGVkIGJhY2sgdG8gYQorCSBub3JtYWwgc3RhdGUuCisKKyAgICAgKCopIFJldm9rZWQuIEEga2V5IGlzIHB1dCBpbiB0aGlzIHN0YXRlIGJ5IHVzZXJzcGFjZSBhY3Rpb24uIEl0IGNhbid0IGJlCisJIGZvdW5kIG9yIG9wZXJhdGVkIHVwb24gKGFwYXJ0IGZyb20gYnkgdW5saW5raW5nIGl0KS4KKworICAgICAoKikgRGVhZC4gVGhlIGtleSdzIHR5cGUgd2FzIHVucmVnaXN0ZXJlZCwgYW5kIHNvIHRoZSBrZXkgaXMgbm93IHVzZWxlc3MuCisKKworPT09PT09PT09PT09PT09PT09PT0KK0tFWSBTRVJWSUNFIE9WRVJWSUVXCis9PT09PT09PT09PT09PT09PT09PQorCitUaGUga2V5IHNlcnZpY2UgcHJvdmlkZXMgYSBudW1iZXIgb2YgZmVhdHVyZXMgYmVzaWRlcyBrZXlzOgorCisgKCopIFRoZSBrZXkgc2VydmljZSBkZWZpbmVzIHR3byBzcGVjaWFsIGtleSB0eXBlczoKKworICAgICAoKykgImtleXJpbmciCisKKwkgS2V5cmluZ3MgYXJlIHNwZWNpYWwga2V5cyB0aGF0IGNvbnRhaW4gYSBsaXN0IG9mIG90aGVyIGtleXMuIEtleXJpbmcKKwkgbGlzdHMgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHZhcmlvdXMgc3lzdGVtIGNhbGxzLiBLZXlyaW5ncyBzaG91bGQgbm90CisJIGJlIGdpdmVuIGEgcGF5bG9hZCB3aGVuIGNyZWF0ZWQuCisKKyAgICAgKCspICJ1c2VyIgorCisJIEEga2V5IG9mIHRoaXMgdHlwZSBoYXMgYSBkZXNjcmlwdGlvbiBhbmQgYSBwYXlsb2FkIHRoYXQgYXJlIGFyYml0cmFyeQorCSBibG9icyBvZiBkYXRhLiBUaGVzZSBjYW4gYmUgY3JlYXRlZCwgdXBkYXRlZCBhbmQgcmVhZCBieSB1c2Vyc3BhY2UsCisJIGFuZCBhcmVuJ3QgaW50ZW5kZWQgZm9yIHVzZSBieSBrZXJuZWwgc2VydmljZXMuCisKKyAoKikgRWFjaCBwcm9jZXNzIHN1YnNjcmliZXMgdG8gdGhyZWUga2V5cmluZ3M6IGEgdGhyZWFkLXNwZWNpZmljIGtleXJpbmcsIGEKKyAgICAgcHJvY2Vzcy1zcGVjaWZpYyBrZXlyaW5nLCBhbmQgYSBzZXNzaW9uLXNwZWNpZmljIGtleXJpbmcuCisKKyAgICAgVGhlIHRocmVhZC1zcGVjaWZpYyBrZXlyaW5nIGlzIGRpc2NhcmRlZCBmcm9tIHRoZSBjaGlsZCB3aGVuIGFueSBzb3J0IG9mCisgICAgIGNsb25lLCBmb3JrLCB2Zm9yayBvciBleGVjdmUgb2NjdXJzLiBBIG5ldyBrZXlyaW5nIGlzIGNyZWF0ZWQgb25seSB3aGVuCisgICAgIHJlcXVpcmVkLgorCisgICAgIFRoZSBwcm9jZXNzLXNwZWNpZmljIGtleXJpbmcgaXMgcmVwbGFjZWQgd2l0aCBhbiBlbXB0eSBvbmUgaW4gdGhlIGNoaWxkCisgICAgIG9uIGNsb25lLCBmb3JrLCB2Zm9yayB1bmxlc3MgQ0xPTkVfVEhSRUFEIGlzIHN1cHBsaWVkLCBpbiB3aGljaCBjYXNlIGl0CisgICAgIGlzIHNoYXJlZC4gZXhlY3ZlIGFsc28gZGlzY2FyZHMgdGhlIHByb2Nlc3MncyBwcm9jZXNzIGtleXJpbmcgYW5kIGNyZWF0ZXMKKyAgICAgYSBuZXcgb25lLgorCisgICAgIFRoZSBzZXNzaW9uLXNwZWNpZmljIGtleXJpbmcgaXMgcGVyc2lzdGVudCBhY3Jvc3MgY2xvbmUsIGZvcmssIHZmb3JrIGFuZAorICAgICBleGVjdmUsIGV2ZW4gd2hlbiB0aGUgbGF0dGVyIGV4ZWN1dGVzIGEgc2V0LVVJRCBvciBzZXQtR0lEIGJpbmFyeS4gQQorICAgICBwcm9jZXNzIGNhbiwgaG93ZXZlciwgcmVwbGFjZSBpdHMgY3VycmVudCBzZXNzaW9uIGtleXJpbmcgd2l0aCBhIG5ldyBvbmUKKyAgICAgYnkgdXNpbmcgUFJfSk9JTl9TRVNTSU9OX0tFWVJJTkcuIEl0IGlzIHBlcm1pdHRlZCB0byByZXF1ZXN0IGFuIGFub255bW91cworICAgICBuZXcgb25lLCBvciB0byBhdHRlbXB0IHRvIGNyZWF0ZSBvciBqb2luIG9uZSBvZiBhIHNwZWNpZmljIG5hbWUuCisKKyAgICAgVGhlIG93bmVyc2hpcCBvZiB0aGUgdGhyZWFkIGtleXJpbmcgY2hhbmdlcyB3aGVuIHRoZSByZWFsIFVJRCBhbmQgR0lEIG9mCisgICAgIHRoZSB0aHJlYWQgY2hhbmdlcy4KKworICgqKSBFYWNoIHVzZXIgSUQgcmVzaWRlbnQgaW4gdGhlIHN5c3RlbSBob2xkcyB0d28gc3BlY2lhbCBrZXlyaW5nczogYSB1c2VyCisgICAgIHNwZWNpZmljIGtleXJpbmcgYW5kIGEgZGVmYXVsdCB1c2VyIHNlc3Npb24ga2V5cmluZy4gVGhlIGRlZmF1bHQgc2Vzc2lvbgorICAgICBrZXlyaW5nIGlzIGluaXRpYWxpc2VkIHdpdGggYSBsaW5rIHRvIHRoZSB1c2VyLXNwZWNpZmljIGtleXJpbmcuCisKKyAgICAgV2hlbiBhIHByb2Nlc3MgY2hhbmdlcyBpdHMgcmVhbCBVSUQsIGlmIGl0IHVzZWQgdG8gaGF2ZSBubyBzZXNzaW9uIGtleSwgaXQKKyAgICAgd2lsbCBiZSBzdWJzY3JpYmVkIHRvIHRoZSBkZWZhdWx0IHNlc3Npb24ga2V5IGZvciB0aGUgbmV3IFVJRC4KKworICAgICBJZiBhIHByb2Nlc3MgYXR0ZW1wdHMgdG8gYWNjZXNzIGl0cyBzZXNzaW9uIGtleSB3aGVuIGl0IGRvZXNuJ3QgaGF2ZSBvbmUsCisgICAgIGl0IHdpbGwgYmUgc3Vic2NyaWJlZCB0byB0aGUgZGVmYXVsdCBmb3IgaXRzIGN1cnJlbnQgVUlELgorCisgKCopIEVhY2ggdXNlciBoYXMgdHdvIHF1b3RhcyBhZ2FpbnN0IHdoaWNoIHRoZSBrZXlzIHRoZXkgb3duIGFyZSB0cmFja2VkLiBPbmUKKyAgICAgbGltaXRzIHRoZSB0b3RhbCBudW1iZXIgb2Yga2V5cyBhbmQga2V5cmluZ3MsIHRoZSBvdGhlciBsaW1pdHMgdGhlIHRvdGFsCisgICAgIGFtb3VudCBvZiBkZXNjcmlwdGlvbiBhbmQgcGF5bG9hZCBzcGFjZSB0aGF0IGNhbiBiZSBjb25zdW1lZC4KKworICAgICBUaGUgdXNlciBjYW4gdmlldyBpbmZvcm1hdGlvbiBvbiB0aGlzIGFuZCBvdGhlciBzdGF0aXN0aWNzIHRocm91Z2ggcHJvY2ZzCisgICAgIGZpbGVzLgorCisgICAgIFByb2Nlc3Mtc3BlY2lmaWMgYW5kIHRocmVhZC1zcGVjaWZpYyBrZXlyaW5ncyBhcmUgbm90IGNvdW50ZWQgdG93YXJkcyBhCisgICAgIHVzZXIncyBxdW90YS4KKworICAgICBJZiBhIHN5c3RlbSBjYWxsIHRoYXQgbW9kaWZpZXMgYSBrZXkgb3Iga2V5cmluZyBpbiBzb21lIHdheSB3b3VsZCBwdXQgdGhlCisgICAgIHVzZXIgb3ZlciBxdW90YSwgdGhlIG9wZXJhdGlvbiBpcyByZWZ1c2VkIGFuZCBlcnJvciBFRFFVT1QgaXMgcmV0dXJuZWQuCisKKyAoKikgVGhlcmUncyBhIHN5c3RlbSBjYWxsIGludGVyZmFjZSBieSB3aGljaCB1c2Vyc3BhY2UgcHJvZ3JhbXMgY2FuIGNyZWF0ZQorICAgICBhbmQgbWFuaXB1bGF0ZSBrZXlzIGFuZCBrZXlyaW5ncy4KKworICgqKSBUaGVyZSdzIGEga2VybmVsIGludGVyZmFjZSBieSB3aGljaCBzZXJ2aWNlcyBjYW4gcmVnaXN0ZXIgdHlwZXMgYW5kCisgICAgIHNlYXJjaCBmb3Iga2V5cy4KKworICgqKSBUaGVyZSdzIGEgd2F5IGZvciB0aGUgYSBzZWFyY2ggZG9uZSBmcm9tIHRoZSBrZXJuZWwgdG8gY2FsbCBiYWNrIHRvCisgICAgIHVzZXJzcGFjZSB0byByZXF1ZXN0IGEga2V5IHRoYXQgY2FuJ3QgYmUgZm91bmQgaW4gYSBwcm9jZXNzJ3Mga2V5cmluZ3MuCisKKyAoKikgQW4gb3B0aW9uYWwgZmlsZXN5c3RlbSBpcyBhdmFpbGFibGUgdGhyb3VnaCB3aGljaCB0aGUga2V5IGRhdGFiYXNlIGNhbiBiZQorICAgICB2aWV3ZWQgYW5kIG1hbmlwdWxhdGVkLgorCisKKz09PT09PT09PT09PT09PT09PT09PT0KK0tFWSBBQ0NFU1MgUEVSTUlTU0lPTlMKKz09PT09PT09PT09PT09PT09PT09PT0KKworS2V5cyBoYXZlIGFuIG93bmVyIHVzZXIgSUQsIGEgZ3JvdXAgYWNjZXNzIElELCBhbmQgYSBwZXJtaXNzaW9ucyBtYXNrLiBUaGUKK21hc2sgaGFzIHVwIHRvIGVpZ2h0IGJpdHMgZWFjaCBmb3IgdXNlciwgZ3JvdXAgYW5kIG90aGVyIGFjY2Vzcy4gT25seSBmaXZlIG9mCitlYWNoIHNldCBvZiBlaWdodCBiaXRzIGFyZSBkZWZpbmVkLiBUaGVzZSBwZXJtaXNzaW9ucyBncmFudGVkIGFyZToKKworICgqKSBWaWV3CisKKyAgICAgVGhpcyBwZXJtaXRzIGEga2V5IG9yIGtleXJpbmcncyBhdHRyaWJ1dGVzIHRvIGJlIHZpZXdlZCAtIGluY2x1ZGluZyBrZXkKKyAgICAgdHlwZSBhbmQgZGVzY3JpcHRpb24uCisKKyAoKikgUmVhZAorCisgICAgIFRoaXMgcGVybWl0cyBhIGtleSdzIHBheWxvYWQgdG8gYmUgdmlld2VkIG9yIGEga2V5cmluZydzIGxpc3Qgb2YgbGlua2VkCisgICAgIGtleXMuCisKKyAoKikgV3JpdGUKKworICAgICBUaGlzIHBlcm1pdHMgYSBrZXkncyBwYXlsb2FkIHRvIGJlIGluc3RhbnRpYXRlZCBvciB1cGRhdGVkLCBvciBpdCBhbGxvd3MKKyAgICAgYSBsaW5rIHRvIGJlIGFkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSBhIGtleXJpbmcuCisKKyAoKikgU2VhcmNoCisKKyAgICAgVGhpcyBwZXJtaXRzIGtleXJpbmdzIHRvIGJlIHNlYXJjaGVkIGFuZCBrZXlzIHRvIGJlIGZvdW5kLiBTZWFyY2hlcyBjYW4KKyAgICAgb25seSByZWN1cnNlIGludG8gbmVzdGVkIGtleXJpbmdzIHRoYXQgaGF2ZSBzZWFyY2ggcGVybWlzc2lvbiBzZXQuCisKKyAoKikgTGluaworCisgICAgIFRoaXMgcGVybWl0cyBhIGtleSBvciBrZXlyaW5nIHRvIGJlIGxpbmtlZCB0by4gVG8gY3JlYXRlIGEgbGluayBmcm9tIGEKKyAgICAga2V5cmluZyB0byBhIGtleSwgYSBwcm9jZXNzIG11c3QgaGF2ZSBXcml0ZSBwZXJtaXNzaW9uIG9uIHRoZSBrZXlyaW5nIGFuZAorICAgICBMaW5rIHBlcm1pc3Npb24gb24gdGhlIGtleS4KKworRm9yIGNoYW5naW5nIHRoZSBvd25lcnNoaXAsIGdyb3VwIElEIG9yIHBlcm1pc3Npb25zIG1hc2ssIGJlaW5nIHRoZSBvd25lciBvZgordGhlIGtleSBvciBoYXZpbmcgdGhlIHN5c2FkbWluIGNhcGFiaWxpdHkgaXMgc3VmZmljaWVudC4KKworCis9PT09PT09PT09PT09PT09CitORVcgUFJPQ0ZTIEZJTEVTCis9PT09PT09PT09PT09PT09CisKK1R3byBmaWxlcyBoYXZlIGJlZW4gYWRkZWQgdG8gcHJvY2ZzIGJ5IHdoaWNoIGFuIGFkbWluaXN0cmF0b3IgY2FuIGZpbmQgb3V0CithYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBrZXkgc2VydmljZToKKworICgqKSAvcHJvYy9rZXlzCisKKyAgICAgVGhpcyBsaXN0cyBhbGwgdGhlIGtleXMgb24gdGhlIHN5c3RlbSwgZ2l2aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyCisgICAgIHR5cGUsIGRlc2NyaXB0aW9uIGFuZCBwZXJtaXNzaW9ucy4gVGhlIHBheWxvYWQgb2YgdGhlIGtleSBpcyBub3QKKyAgICAgYXZhaWxhYmxlIHRoaXMgd2F5OgorCisJU0VSSUFMICAgRkxBR1MgIFVTQUdFIEVYUFkgUEVSTSAgIFVJRCAgIEdJRCAgIFRZUEUgICAgICBERVNDUklQVElPTjogU1VNTUFSWQorCTAwMDAwMDAxIEktLS0tLSAgICAzOSBwZXJtIDFmMDAwMCAgICAgMCAgICAgMCBrZXlyaW5nICAgX3VpZF9zZXMuMDogMS80CisJMDAwMDAwMDIgSS0tLS0tICAgICAyIHBlcm0gMWYwMDAwICAgICAwICAgICAwIGtleXJpbmcgICBfdWlkLjA6IGVtcHR5CisJMDAwMDAwMDcgSS0tLS0tICAgICAxIHBlcm0gMWYwMDAwICAgICAwICAgICAwIGtleXJpbmcgICBfcGlkLjE6IGVtcHR5CisJMDAwMDAxOGQgSS0tLS0tICAgICAxIHBlcm0gMWYwMDAwICAgICAwICAgICAwIGtleXJpbmcgICBfcGlkLjQxMjogZW1wdHkKKwkwMDAwMDRkMiBJLS1RLS0gICAgIDEgcGVybSAxZjAwMDAgICAgMzIgICAgLTEga2V5cmluZyAgIF91aWQuMzI6IDEvNAorCTAwMDAwNGQzIEktLVEtLSAgICAgMyBwZXJtIDFmMDAwMCAgICAzMiAgICAtMSBrZXlyaW5nICAgX3VpZF9zZXMuMzI6IGVtcHR5CisJMDAwMDA4OTIgSS0tUVUtICAgICAxIHBlcm0gMWYwMDAwICAgICAwICAgICAwIHVzZXIgICAgICBtZXRhbDpjb3BwZXI6IDAKKwkwMDAwMDg5MyBJLS1RLU4gICAgIDEgIDM1cyAxZjAwMDAgICAgIDAgICAgIDAgdXNlciAgICAgIG1ldGFsOnNpbHZlcjogMAorCTAwMDAwODk0IEktLVEtLSAgICAgMSAgMTBoIDFmMDAwMCAgICAgMCAgICAgMCB1c2VyICAgICAgbWV0YWw6Z29sZDogMAorCisgICAgIFRoZSBmbGFncyBhcmU6CisKKwlJCUluc3RhbnRpYXRlZAorCVIJUmV2b2tlZAorCUQJRGVhZAorCVEJQ29udHJpYnV0ZXMgdG8gdXNlcidzIHF1b3RhCisJVQlVbmRlciBjb250cnVjdGlvbiBieSBjYWxsYmFjayB0byB1c2Vyc3BhY2UKKwlOCU5lZ2F0aXZlIGtleQorCisgICAgIFRoaXMgZmlsZSBtdXN0IGJlIGVuYWJsZWQgYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gdGltZSBhcyBpdCBhbGxvd3MgYW55b25lCisgICAgIHRvIGxpc3QgdGhlIGtleXMgZGF0YWJhc2UuCisKKyAoKikgL3Byb2Mva2V5LXVzZXJzCisKKyAgICAgVGhpcyBmaWxlIGxpc3RzIHRoZSB0cmFja2luZyBkYXRhIGZvciBlYWNoIHVzZXIgdGhhdCBoYXMgYXQgbGVhc3Qgb25lIGtleQorICAgICBvbiB0aGUgc3lzdGVtLiBTdWNoIGRhdGEgaW5jbHVkZXMgcXVvdGEgaW5mb3JtYXRpb24gYW5kIHN0YXRpc3RpY3M6CisKKwlbcm9vdEBhbmRyb21lZGEgcm9vdF0jIGNhdCAvcHJvYy9rZXktdXNlcnMKKwkwOiAgICAgNDYgNDUvNDUgMS8xMDAgMTMvMTAwMDAKKwkyOTogICAgIDIgMi8yIDIvMTAwIDQwLzEwMDAwCisJMzI6ICAgICAyIDIvMiAyLzEwMCA0MC8xMDAwMAorCTM4OiAgICAgMiAyLzIgMi8xMDAgNDAvMTAwMDAKKworICAgICBUaGUgZm9ybWF0IG9mIGVhY2ggbGluZSBpcworCTxVSUQ+OgkJCVVzZXIgSUQgdG8gd2hpY2ggdGhpcyBhcHBsaWVzCisJPHVzYWdlPgkJCVN0cnVjdHVyZSByZWZjb3VudAorCTxpbnN0Pi88a2V5cz4JCVRvdGFsIG51bWJlciBvZiBrZXlzIGFuZCBudW1iZXIgaW5zdGFudGlhdGVkCisJPGtleXM+LzxtYXg+CQlLZXkgY291bnQgcXVvdGEKKwk8Ynl0ZXM+LzxtYXg+CQlLZXkgc2l6ZSBxdW90YQorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VTRVJTUEFDRSBTWVNURU0gQ0FMTCBJTlRFUkZBQ0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVXNlcnNwYWNlIGNhbiBtYW5pcHVsYXRlIGtleXMgZGlyZWN0bHkgdGhyb3VnaCB0aHJlZSBuZXcgc3lzY2FsbHM6IGFkZF9rZXksCityZXF1ZXN0X2tleSBhbmQga2V5Y3RsLiBUaGUgbGF0dGVyIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBmb3IKK21hbmlwdWxhdGluZyBrZXlzLgorCitXaGVuIHJlZmVycmluZyB0byBhIGtleSBkaXJlY3RseSwgdXNlcnNwYWNlIHByb2dyYW1zIHNob3VsZCB1c2UgdGhlIGtleSdzCitzZXJpYWwgbnVtYmVyIChhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyKS4gSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgc3BlY2lhbAordmFsdWVzIGF2YWlsYWJsZSBmb3IgcmVmZXJyaW5nIHRvIHNwZWNpYWwga2V5cyBhbmQga2V5cmluZ3MgdGhhdCByZWxhdGUgdG8gdGhlCitwcm9jZXNzIG1ha2luZyB0aGUgY2FsbDoKKworCUNPTlNUQU5UCQkJVkFMVUUJS0VZIFJFRkVSRU5DRUQKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUtFWV9TUEVDX1RIUkVBRF9LRVlSSU5HCQktMQl0aHJlYWQtc3BlY2lmaWMga2V5cmluZworCUtFWV9TUEVDX1BST0NFU1NfS0VZUklORwktMglwcm9jZXNzLXNwZWNpZmljIGtleXJpbmcKKwlLRVlfU1BFQ19TRVNTSU9OX0tFWVJJTkcJLTMJc2Vzc2lvbi1zcGVjaWZpYyBrZXlyaW5nCisJS0VZX1NQRUNfVVNFUl9LRVlSSU5HCQktNAlVSUQtc3BlY2lmaWMga2V5cmluZworCUtFWV9TUEVDX1VTRVJfU0VTU0lPTl9LRVlSSU5HCS01CVVJRC1zZXNzaW9uIGtleXJpbmcKKwlLRVlfU1BFQ19HUk9VUF9LRVlSSU5HCQktNglHSUQtc3BlY2lmaWMga2V5cmluZworCisKK1RoZSBtYWluIHN5c2NhbGxzIGFyZToKKworICgqKSBDcmVhdGUgYSBuZXcga2V5IG9mIGdpdmVuIHR5cGUsIGRlc2NyaXB0aW9uIGFuZCBwYXlsb2FkIGFuZCBhZGQgaXQgdG8gdGhlCisgICAgIG5vbWluYXRlZCBrZXlyaW5nOgorCisJa2V5X3NlcmlhbF90IGFkZF9rZXkoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqZGVzYywKKwkJCSAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHBsZW4sCisJCQkgICAgIGtleV9zZXJpYWxfdCBrZXlyaW5nKTsKKworICAgICBJZiBhIGtleSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBkZXNjcmlwdGlvbiBhcyB0aGF0IHByb3Bvc2VkIGFscmVhZHkgZXhpc3RzCisgICAgIGluIHRoZSBrZXlyaW5nLCB0aGlzIHdpbGwgdHJ5IHRvIHVwZGF0ZSBpdCB3aXRoIHRoZSBnaXZlbiBwYXlsb2FkLCBvciBpdAorICAgICB3aWxsIHJldHVybiBlcnJvciBFRVhJU1QgaWYgdGhhdCBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXkKKyAgICAgdHlwZS4gVGhlIHByb2Nlc3MgbXVzdCBhbHNvIGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUga2V5IHRvIGJlCisgICAgIGFibGUgdG8gdXBkYXRlIGl0LiBUaGUgbmV3IGtleSB3aWxsIGhhdmUgYWxsIHVzZXIgcGVybWlzc2lvbnMgZ3JhbnRlZCBhbmQKKyAgICAgbm8gZ3JvdXAgb3IgdGhpcmQgcGFydHkgcGVybWlzc2lvbnMuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGlzIHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgYSBuZXcga2V5IG9mIHRoZSBzcGVjaWZpZWQgdHlwZQorICAgICBhbmQgZGVzY3JpcHRpb24sIGFuZCB0byBpbnN0YW50aWF0ZSBpdCB3aXRoIHRoZSBzdXBwbGllZCBwYXlsb2FkIGFuZAorICAgICBhdHRhY2ggaXQgdG8gdGhlIGtleXJpbmcuIEluIHRoaXMgY2FzZSwgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgaWYgdGhlCisgICAgIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIHRoZSBrZXlyaW5nLgorCisgICAgIFRoZSBwYXlsb2FkIGlzIG9wdGlvbmFsLCBhbmQgdGhlIHBvaW50ZXIgY2FuIGJlIE5VTEwgaWYgbm90IHJlcXVpcmVkIGJ5CisgICAgIHRoZSB0eXBlLiBUaGUgcGF5bG9hZCBpcyBwbGVuIGluIHNpemUsIGFuZCBwbGVuIGNhbiBiZSB6ZXJvIGZvciBhbiBlbXB0eQorICAgICBwYXlsb2FkLgorCisgICAgIEEgbmV3IGtleXJpbmcgY2FuIGJlIGdlbmVyYXRlZCBieSBzZXR0aW5nIHR5cGUgImtleXJpbmciLCB0aGUga2V5cmluZworICAgICBuYW1lIGFzIHRoZSBkZXNjcmlwdGlvbiAob3IgTlVMTCkgYW5kIHNldHRpbmcgdGhlIHBheWxvYWQgdG8gTlVMTC4KKworICAgICBVc2VyIGRlZmluZWQga2V5cyBjYW4gYmUgY3JlYXRlZCBieSBzcGVjaWZ5aW5nIHR5cGUgInVzZXIiLiBJdCBpcworICAgICByZWNvbW1lbmRlZCB0aGF0IGEgdXNlciBkZWZpbmVkIGtleSdzIGRlc2NyaXB0aW9uIGJ5IHByZWZpeGVkIHdpdGggYSB0eXBlCisgICAgIElEIGFuZCBhIGNvbG9uLCBzdWNoIGFzICJrcmI1dGd0OiIgZm9yIGEgS2VyYmVyb3MgNSB0aWNrZXQgZ3JhbnRpbmcKKyAgICAgdGlja2V0LgorCisgICAgIEFueSBvdGhlciB0eXBlIG11c3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUga2VybmVsIGluIGFkdmFuY2UgYnkgYQorICAgICBrZXJuZWwgc2VydmljZSBzdWNoIGFzIGEgZmlsZXN5c3RlbS4KKworICAgICBUaGUgSUQgb2YgdGhlIG5ldyBvciB1cGRhdGVkIGtleSBpcyByZXR1cm5lZCBpZiBzdWNjZXNzZnVsLgorCisKKyAoKikgU2VhcmNoIHRoZSBwcm9jZXNzJ3Mga2V5cmluZ3MgZm9yIGEga2V5LCBwb3RlbnRpYWxseSBjYWxsaW5nIG91dCB0bworICAgICB1c2Vyc3BhY2UgdG8gY3JlYXRlIGl0LgorCisJa2V5X3NlcmlhbF90IHJlcXVlc3Rfa2V5KGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAorCQkJCSBjb25zdCBjaGFyICpjYWxsb3V0X2luZm8sCisJCQkJIGtleV9zZXJpYWxfdCBkZXN0X2tleXJpbmcpOworCisgICAgIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgYWxsIHRoZSBwcm9jZXNzJ3Mga2V5cmluZ3MgaW4gdGhlIG9yZGVyIHRocmVhZCwKKyAgICAgcHJvY2Vzcywgc2Vzc2lvbiBmb3IgYSBtYXRjaGluZyBrZXkuIFRoaXMgd29ya3MgdmVyeSBtdWNoIGxpa2UKKyAgICAgS0VZQ1RMX1NFQVJDSCwgaW5jbHVkaW5nIHRoZSBvcHRpb25hbCBhdHRhY2htZW50IG9mIHRoZSBkaXNjb3ZlcmVkIGtleSB0bworICAgICBhIGtleXJpbmcuCisKKyAgICAgSWYgYSBrZXkgY2Fubm90IGJlIGZvdW5kLCBhbmQgaWYgY2FsbG91dF9pbmZvIGlzIG5vdCBOVUxMLCB0aGVuCisgICAgIC9zYmluL3JlcXVlc3Qta2V5IHdpbGwgYmUgaW52b2tlZCBpbiBhbiBhdHRlbXB0IHRvIG9idGFpbiBhIGtleS4gVGhlCisgICAgIGNhbGxvdXRfaW5mbyBzdHJpbmcgd2lsbCBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHByb2dyYW0uCisKKworVGhlIGtleWN0bCBzeXNjYWxsIGZ1bmN0aW9ucyBhcmU6CisKKyAoKikgTWFwIGEgc3BlY2lhbCBrZXkgSUQgdG8gYSByZWFsIGtleSBJRCBmb3IgdGhpcyBwcm9jZXNzOgorCisJa2V5X3NlcmlhbF90IGtleWN0bChLRVlDVExfR0VUX0tFWVJJTkdfSUQsIGtleV9zZXJpYWxfdCBpZCwKKwkJCSAgICBpbnQgY3JlYXRlKTsKKworICAgICBUaGUgc3BlY2lhbCBrZXkgc3BlY2lmaWVkIGJ5ICJpZCIgaXMgbG9va2VkIHVwICh3aXRoIHRoZSBrZXkgYmVpbmcKKyAgICAgY3JlYXRlZCBpZiBuZWNlc3NhcnkpIGFuZCB0aGUgSUQgb2YgdGhlIGtleSBvciBrZXlyaW5nIHRodXMgZm91bmQgaXMKKyAgICAgcmV0dXJuZWQgaWYgaXQgZXhpc3RzLgorCisgICAgIElmIHRoZSBrZXkgZG9lcyBub3QgeWV0IGV4aXN0LCB0aGUga2V5IHdpbGwgYmUgY3JlYXRlZCBpZiAiY3JlYXRlIiBpcworICAgICBub24temVybzsgYW5kIHRoZSBlcnJvciBFTk9LRVkgd2lsbCBiZSByZXR1cm5lZCBpZiAiY3JlYXRlIiBpcyB6ZXJvLgorCisKKyAoKikgUmVwbGFjZSB0aGUgc2Vzc2lvbiBrZXlyaW5nIHRoaXMgcHJvY2VzcyBzdWJzY3JpYmVzIHRvIHdpdGggYSBuZXcgb25lOgorCisJa2V5X3NlcmlhbF90IGtleWN0bChLRVlDVExfSk9JTl9TRVNTSU9OX0tFWVJJTkcsIGNvbnN0IGNoYXIgKm5hbWUpOworCisgICAgIElmIG5hbWUgaXMgTlVMTCwgYW4gYW5vbnltb3VzIGtleXJpbmcgaXMgY3JlYXRlZCBhdHRhY2hlZCB0byB0aGUgcHJvY2VzcworICAgICBhcyBpdHMgc2Vzc2lvbiBrZXlyaW5nLCBkaXNwbGFjaW5nIHRoZSBvbGQgc2Vzc2lvbiBrZXlyaW5nLgorCisgICAgIElmIG5hbWUgaXMgbm90IE5VTEwsIGlmIGEga2V5cmluZyBvZiB0aGF0IG5hbWUgZXhpc3RzLCB0aGUgcHJvY2VzcworICAgICBhdHRlbXB0cyB0byBhdHRhY2ggaXQgYXMgdGhlIHNlc3Npb24ga2V5cmluZywgcmV0dXJuaW5nIGFuIGVycm9yIGlmIHRoYXQKKyAgICAgaXMgbm90IHBlcm1pdHRlZDsgb3RoZXJ3aXNlIGEgbmV3IGtleXJpbmcgb2YgdGhhdCBuYW1lIGlzIGNyZWF0ZWQgYW5kCisgICAgIGF0dGFjaGVkIGFzIHRoZSBzZXNzaW9uIGtleXJpbmcuCisKKyAgICAgVG8gYXR0YWNoIHRvIGEgbmFtZWQga2V5cmluZywgdGhlIGtleXJpbmcgbXVzdCBoYXZlIHNlYXJjaCBwZXJtaXNzaW9uIGZvcgorICAgICB0aGUgcHJvY2VzcydzIG93bmVyc2hpcC4KKworICAgICBUaGUgSUQgb2YgdGhlIG5ldyBzZXNzaW9uIGtleXJpbmcgaXMgcmV0dXJuZWQgaWYgc3VjY2Vzc2Z1bC4KKworCisgKCopIFVwZGF0ZSB0aGUgc3BlY2lmaWVkIGtleToKKworCWxvbmcga2V5Y3RsKEtFWUNUTF9VUERBVEUsIGtleV9zZXJpYWxfdCBrZXksIGNvbnN0IHZvaWQgKnBheWxvYWQsCisJCSAgICBzaXplX3QgcGxlbik7CisKKyAgICAgVGhpcyB3aWxsIHRyeSB0byB1cGRhdGUgdGhlIHNwZWNpZmllZCBrZXkgd2l0aCB0aGUgZ2l2ZW4gcGF5bG9hZCwgb3IgaXQKKyAgICAgd2lsbCByZXR1cm4gZXJyb3IgRU9QTk9UU1VQUCBpZiB0aGF0IGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGtleQorICAgICB0eXBlLiBUaGUgcHJvY2VzcyBtdXN0IGFsc28gaGF2ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIHRoZSBrZXkgdG8gYmUKKyAgICAgYWJsZSB0byB1cGRhdGUgaXQuCisKKyAgICAgVGhlIHBheWxvYWQgaXMgb2YgbGVuZ3RoIHBsZW4sIGFuZCBtYXkgYmUgYWJzZW50IG9yIGVtcHR5IGFzIGZvcgorICAgICBhZGRfa2V5KCkuCisKKworICgqKSBSZXZva2UgYSBrZXk6CisKKwlsb25nIGtleWN0bChLRVlDVExfUkVWT0tFLCBrZXlfc2VyaWFsX3Qga2V5KTsKKworICAgICBUaGlzIG1ha2VzIGEga2V5IHVuYXZhaWxhYmxlIGZvciBmdXJ0aGVyIG9wZXJhdGlvbnMuIEZ1cnRoZXIgYXR0ZW1wdHMgdG8KKyAgICAgdXNlIHRoZSBrZXkgd2lsbCBiZSBtZXQgd2l0aCBlcnJvciBFS0VZUkVWT0tFRCwgYW5kIHRoZSBrZXkgd2lsbCBubyBsb25nZXIKKyAgICAgYmUgZmluZGFibGUuCisKKworICgqKSBDaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiBhIGtleToKKworCWxvbmcga2V5Y3RsKEtFWUNUTF9DSE9XTiwga2V5X3NlcmlhbF90IGtleSwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpOworCisgICAgIFRoaXMgZnVuY3Rpb24gcGVybWl0cyBhIGtleSdzIG93bmVyIGFuZCBncm91cCBJRCB0byBiZSBjaGFuZ2VkLiBFaXRoZXIKKyAgICAgb25lIG9mIHVpZCBvciBnaWQgY2FuIGJlIHNldCB0byAtMSB0byBzdXBwcmVzcyB0aGF0IGNoYW5nZS4KKworICAgICBPbmx5IHRoZSBzdXBlcnVzZXIgY2FuIGNoYW5nZSBhIGtleSdzIG93bmVyIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZQorICAgICBrZXkncyBjdXJyZW50IG93bmVyLiBTaW1pbGFybHksIG9ubHkgdGhlIHN1cGVydXNlciBjYW4gY2hhbmdlIGEga2V5J3MKKyAgICAgZ3JvdXAgSUQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGNhbGxpbmcgcHJvY2VzcydzIGdyb3VwIElEIG9yIG9uZSBvZgorICAgICBpdHMgZ3JvdXAgbGlzdCBtZW1iZXJzLgorCisKKyAoKikgQ2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBtYXNrIG9uIGEga2V5OgorCisJbG9uZyBrZXljdGwoS0VZQ1RMX1NFVFBFUk0sIGtleV9zZXJpYWxfdCBrZXksIGtleV9wZXJtX3QgcGVybSk7CisKKyAgICAgVGhpcyBmdW5jdGlvbiBwZXJtaXRzIHRoZSBvd25lciBvZiBhIGtleSBvciB0aGUgc3VwZXJ1c2VyIHRvIGNoYW5nZSB0aGUKKyAgICAgcGVybWlzc2lvbnMgbWFzayBvbiBhIGtleS4KKworICAgICBPbmx5IGJpdHMgdGhlIGF2YWlsYWJsZSBiaXRzIGFyZSBwZXJtaXR0ZWQ7IGlmIGFueSBvdGhlciBiaXRzIGFyZSBzZXQsCisgICAgIGVycm9yIEVJTlZBTCB3aWxsIGJlIHJldHVybmVkLgorCisKKyAoKikgRGVzY3JpYmUgYSBrZXk6CisKKwlsb25nIGtleWN0bChLRVlDVExfREVTQ1JJQkUsIGtleV9zZXJpYWxfdCBrZXksIGNoYXIgKmJ1ZmZlciwKKwkJICAgIHNpemVfdCBidWZsZW4pOworCisgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN1bW1hcnkgb2YgdGhlIGtleSdzIGF0dHJpYnV0ZXMgKGJ1dCBub3QgaXRzCisgICAgIHBheWxvYWQgZGF0YSkgYXMgYSBzdHJpbmcgaW4gdGhlIGJ1ZmZlciBwcm92aWRlZC4KKworICAgICBVbmxlc3MgdGhlcmUncyBhbiBlcnJvciwgaXQgYWx3YXlzIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGl0IGNvdWxkCisgICAgIHByb2R1Y2UsIGV2ZW4gaWYgdGhhdCdzIHRvbyBiaWcgZm9yIHRoZSBidWZmZXIsIGJ1dCBpdCB3b24ndCBjb3B5IG1vcmUKKyAgICAgdGhhbiByZXF1ZXN0ZWQgdG8gdXNlcnNwYWNlLiBJZiB0aGUgYnVmZmVyIHBvaW50ZXIgaXMgTlVMTCB0aGVuIG5vIGNvcHkKKyAgICAgd2lsbCB0YWtlIHBsYWNlLgorCisgICAgIEEgcHJvY2VzcyBtdXN0IGhhdmUgdmlldyBwZXJtaXNzaW9uIG9uIHRoZSBrZXkgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUKKyAgICAgc3VjY2Vzc2Z1bC4KKworICAgICBJZiBzdWNjZXNzZnVsLCBhIHN0cmluZyBpcyBwbGFjZWQgaW4gdGhlIGJ1ZmZlciBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworCTx0eXBlPjs8dWlkPjs8Z2lkPjs8cGVybT47PGRlc2NyaXB0aW9uPgorCisgICAgIFdoZXJlIHR5cGUgYW5kIGRlc2NyaXB0aW9uIGFyZSBzdHJpbmdzLCB1aWQgYW5kIGdpZCBhcmUgZGVjaW1hbCwgYW5kIHBlcm0KKyAgICAgaXMgaGV4YWRlY2ltYWwuIEEgTlVMIGNoYXJhY3RlciBpcyBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgaWYKKyAgICAgdGhlIGJ1ZmZlciBpcyBzdWZmaWNpZW50bHkgYmlnLgorCisgICAgIFRoaXMgY2FuIGJlIHBhcnNlZCB3aXRoCisKKwlzc2NhbmYoYnVmZmVyLCAiJVteO107JWQ7JWQ7JW87JXMiLCB0eXBlLCAmdWlkLCAmZ2lkLCAmbW9kZSwgZGVzYyk7CisKKworICgqKSBDbGVhciBvdXQgYSBrZXlyaW5nOgorCisJbG9uZyBrZXljdGwoS0VZQ1RMX0NMRUFSLCBrZXlfc2VyaWFsX3Qga2V5cmluZyk7CisKKyAgICAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGxpc3Qgb2Yga2V5cyBhdHRhY2hlZCB0byBhIGtleXJpbmcuIFRoZSBjYWxsaW5nCisgICAgIHByb2Nlc3MgbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gb24gdGhlIGtleXJpbmcsIGFuZCBpdCBtdXN0IGJlIGEKKyAgICAga2V5cmluZyAob3IgZWxzZSBlcnJvciBFTk9URElSIHdpbGwgcmVzdWx0KS4KKworCisgKCopIExpbmsgYSBrZXkgaW50byBhIGtleXJpbmc6CisKKwlsb25nIGtleWN0bChLRVlDVExfTElOSywga2V5X3NlcmlhbF90IGtleXJpbmcsIGtleV9zZXJpYWxfdCBrZXkpOworCisgICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGxpbmsgZnJvbSB0aGUga2V5cmluZyB0byB0aGUga2V5LiBUaGUgcHJvY2VzcworICAgICBtdXN0IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBvbiB0aGUga2V5cmluZyBhbmQgbXVzdCBoYXZlIGxpbmsgcGVybWlzc2lvbgorICAgICBvbiB0aGUga2V5LgorCisgICAgIFNob3VsZCB0aGUga2V5cmluZyBub3QgYmUgYSBrZXlyaW5nLCBlcnJvciBFTk9URElSIHdpbGwgcmVzdWx0OyBhbmQgaWYKKyAgICAgdGhlIGtleXJpbmcgaXMgZnVsbCwgZXJyb3IgRU5GSUxFIHdpbGwgcmVzdWx0LgorCisgICAgIFRoZSBsaW5rIHByb2NlZHVyZSBjaGVja3MgdGhlIG5lc3Rpbmcgb2YgdGhlIGtleXJpbmdzLCByZXR1cm5pbmcgRUxPT1AgaWYKKyAgICAgaXQgYXBwZWFycyB0byBkZWVwIG9yIEVERUFETEsgaWYgdGhlIGxpbmsgd291bGQgaW50cm9kdWNlIGEgY3ljbGUuCisKKworICgqKSBVbmxpbmsgYSBrZXkgb3Iga2V5cmluZyBmcm9tIGFub3RoZXIga2V5cmluZzoKKworCWxvbmcga2V5Y3RsKEtFWUNUTF9VTkxJTkssIGtleV9zZXJpYWxfdCBrZXlyaW5nLCBrZXlfc2VyaWFsX3Qga2V5KTsKKworICAgICBUaGlzIGZ1bmN0aW9uIGxvb2tzIHRocm91Z2ggdGhlIGtleXJpbmcgZm9yIHRoZSBmaXJzdCBsaW5rIHRvIHRoZQorICAgICBzcGVjaWZpZWQga2V5LCBhbmQgcmVtb3ZlcyBpdCBpZiBmb3VuZC4gU3Vic2VxdWVudCBsaW5rcyB0byB0aGF0IGtleSBhcmUKKyAgICAgaWdub3JlZC4gVGhlIHByb2Nlc3MgbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gb24gdGhlIGtleXJpbmcuCisKKyAgICAgSWYgdGhlIGtleXJpbmcgaXMgbm90IGEga2V5cmluZywgZXJyb3IgRU5PVERJUiB3aWxsIHJlc3VsdDsgYW5kIGlmIHRoZQorICAgICBrZXkgaXMgbm90IHByZXNlbnQsIGVycm9yIEVOT0VOVCB3aWxsIGJlIHRoZSByZXN1bHQuCisKKworICgqKSBTZWFyY2ggYSBrZXlyaW5nIHRyZWUgZm9yIGEga2V5OgorCisJa2V5X3NlcmlhbF90IGtleWN0bChLRVlDVExfU0VBUkNILCBrZXlfc2VyaWFsX3Qga2V5cmluZywKKwkJCSAgICBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKKwkJCSAgICBrZXlfc2VyaWFsX3QgZGVzdF9rZXlyaW5nKTsKKworICAgICBUaGlzIHNlYXJjaGVzIHRoZSBrZXlyaW5nIHRyZWUgaGVhZGVkIGJ5IHRoZSBzcGVjaWZpZWQga2V5cmluZyB1bnRpbCBhCisgICAgIGtleSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIHR5cGUgYW5kIGRlc2NyaXB0aW9uIGNyaXRlcmlhLiBFYWNoIGtleXJpbmcKKyAgICAgaXMgY2hlY2tlZCBmb3Iga2V5cyBiZWZvcmUgcmVjdXJzaW9uIGludG8gaXRzIGNoaWxkcmVuIG9jY3Vycy4KKworICAgICBUaGUgcHJvY2VzcyBtdXN0IGhhdmUgc2VhcmNoIHBlcm1pc3Npb24gb24gdGhlIHRvcCBsZXZlbCBrZXlyaW5nLCBvciBlbHNlCisgICAgIGVycm9yIEVBQ0NFUyB3aWxsIHJlc3VsdC4gT25seSBrZXlyaW5ncyB0aGF0IHRoZSBwcm9jZXNzIGhhcyBzZWFyY2gKKyAgICAgcGVybWlzc2lvbiBvbiB3aWxsIGJlIHJlY3Vyc2VkIGludG8sIGFuZCBvbmx5IGtleXMgYW5kIGtleXJpbmdzIGZvciB3aGljaAorICAgICBhIHByb2Nlc3MgaGFzIHNlYXJjaCBwZXJtaXNzaW9uIGNhbiBiZSBtYXRjaGVkLiBJZiB0aGUgc3BlY2lmaWVkIGtleXJpbmcKKyAgICAgaXMgbm90IGEga2V5cmluZywgRU5PVERJUiB3aWxsIHJlc3VsdC4KKworICAgICBJZiB0aGUgc2VhcmNoIHN1Y2NlZWRzLCB0aGUgZnVuY3Rpb24gd2lsbCBhdHRlbXB0IHRvIGxpbmsgdGhlIGZvdW5kIGtleQorICAgICBpbnRvIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGlmIG9uZSBpcyBzdXBwbGllZCAobm9uLXplcm8gSUQpLiBBbGwgdGhlCisgICAgIGNvbnN0cmFpbnRzIGFwcGxpY2FibGUgdG8gS0VZQ1RMX0xJTksgYXBwbHkgaW4gdGhpcyBjYXNlIHRvby4KKworICAgICBFcnJvciBFTk9LRVksIEVLRVlSRVZPS0VEIG9yIEVLRVlFWFBJUkVEIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHNlYXJjaAorICAgICBmYWlscy4gT24gc3VjY2VzcywgdGhlIHJlc3VsdGluZyBrZXkgSUQgd2lsbCBiZSByZXR1cm5lZC4KKworCisgKCopIFJlYWQgdGhlIHBheWxvYWQgZGF0YSBmcm9tIGEga2V5OgorCisJa2V5X3NlcmlhbF90IGtleWN0bChLRVlDVExfUkVBRCwga2V5X3NlcmlhbF90IGtleXJpbmcsIGNoYXIgKmJ1ZmZlciwKKwkJCSAgICBzaXplX3QgYnVmbGVuKTsKKworICAgICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlYWQgdGhlIHBheWxvYWQgZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQga2V5CisgICAgIGludG8gdGhlIGJ1ZmZlci4gVGhlIHByb2Nlc3MgbXVzdCBoYXZlIHJlYWQgcGVybWlzc2lvbiBvbiB0aGUga2V5IHRvCisgICAgIHN1Y2NlZWQuCisKKyAgICAgVGhlIHJldHVybmVkIGRhdGEgd2lsbCBiZSBwcm9jZXNzZWQgZm9yIHByZXNlbnRhdGlvbiBieSB0aGUga2V5IHR5cGUuIEZvcgorICAgICBpbnN0YW5jZSwgYSBrZXlyaW5nIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIGtleV9zZXJpYWxfdCBlbnRyaWVzCisgICAgIHJlcHJlc2VudGluZyB0aGUgSURzIG9mIGFsbCB0aGUga2V5cyB0byB3aGljaCBpdCBpcyBzdWJzY3JpYmVkLiBUaGUgdXNlcgorICAgICBkZWZpbmVkIGtleSB0eXBlIHdpbGwgcmV0dXJuIGl0cyBkYXRhIGFzIGlzLiBJZiBhIGtleSB0eXBlIGRvZXMgbm90CisgICAgIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLCBlcnJvciBFT1BOT1RTVVBQIHdpbGwgcmVzdWx0LgorCisgICAgIEFzIG11Y2ggb2YgdGhlIGRhdGEgYXMgY2FuIGJlIGZpdHRlZCBpbnRvIHRoZSBidWZmZXIgd2lsbCBiZSBjb3BpZWQgdG8KKyAgICAgdXNlcnNwYWNlIGlmIHRoZSBidWZmZXIgcG9pbnRlciBpcyBub3QgTlVMTC4KKworICAgICBPbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLCB0aGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBhbW91bnQgb2YKKyAgICAgZGF0YSBhdmFpbGFibGUgcmF0aGVyIHRoYW4gdGhlIGFtb3VudCBjb3BpZWQuCisKKworICgqKSBJbnN0YW50aWF0ZSBhIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBrZXkuCisKKwlrZXlfc2VyaWFsX3Qga2V5Y3RsKEtFWUNUTF9JTlNUQU5USUFURSwga2V5X3NlcmlhbF90IGtleSwKKwkJCSAgICBjb25zdCB2b2lkICpwYXlsb2FkLCBzaXplX3QgcGxlbiwKKwkJCSAgICBrZXlfc2VyaWFsX3Qga2V5cmluZyk7CisKKyAgICAgSWYgdGhlIGtlcm5lbCBjYWxscyBiYWNrIHRvIHVzZXJzcGFjZSB0byBjb21wbGV0ZSB0aGUgaW5zdGFudGlhdGlvbiBvZiBhCisgICAgIGtleSwgdXNlcnNwYWNlIHNob3VsZCB1c2UgdGhpcyBjYWxsIHRvIHN1cHBseSBkYXRhIGZvciB0aGUga2V5IGJlZm9yZSB0aGUKKyAgICAgaW52b2tlZCBwcm9jZXNzIHJldHVybnMsIG9yIGVsc2UgdGhlIGtleSB3aWxsIGJlIG1hcmtlZCBuZWdhdGl2ZQorICAgICBhdXRvbWF0aWNhbGx5LgorCisgICAgIFRoZSBwcm9jZXNzIG11c3QgaGF2ZSB3cml0ZSBhY2Nlc3Mgb24gdGhlIGtleSB0byBiZSBhYmxlIHRvIGluc3RhbnRpYXRlCisgICAgIGl0LCBhbmQgdGhlIGtleSBtdXN0IGJlIHVuaW5zdGFudGlhdGVkLgorCisgICAgIElmIGEga2V5cmluZyBpcyBzcGVjaWZpZWQgKG5vbi16ZXJvKSwgdGhlIGtleSB3aWxsIGFsc28gYmUgbGlua2VkIGludG8KKyAgICAgdGhhdCBrZXlyaW5nLCBob3dldmVyIGFsbCB0aGUgY29uc3RyYWludHMgYXBwbHlpbmcgaW4gS0VZQ1RMX0xJTksgYXBwbHkKKyAgICAgaW4gdGhpcyBjYXNlIHRvby4KKworICAgICBUaGUgcGF5bG9hZCBhbmQgcGxlbiBhcmd1bWVudHMgZGVzY3JpYmUgdGhlIHBheWxvYWQgZGF0YSBhcyBmb3IgYWRkX2tleSgpLgorCisKKyAoKikgTmVnYXRpdmVseSBpbnN0YW50aWF0ZSBhIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBrZXkuCisKKwlrZXlfc2VyaWFsX3Qga2V5Y3RsKEtFWUNUTF9ORUdBVEUsIGtleV9zZXJpYWxfdCBrZXksCisJCQkgICAgdW5zaWduZWQgdGltZW91dCwga2V5X3NlcmlhbF90IGtleXJpbmcpOworCisgICAgIElmIHRoZSBrZXJuZWwgY2FsbHMgYmFjayB0byB1c2Vyc3BhY2UgdG8gY29tcGxldGUgdGhlIGluc3RhbnRpYXRpb24gb2YgYQorICAgICBrZXksIHVzZXJzcGFjZSBzaG91bGQgdXNlIHRoaXMgY2FsbCBtYXJrIHRoZSBrZXkgYXMgbmVnYXRpdmUgYmVmb3JlIHRoZQorICAgICBpbnZva2VkIHByb2Nlc3MgcmV0dXJucyBpZiBpdCBpcyB1bmFibGUgdG8gZnVsZmlsIHRoZSByZXF1ZXN0LgorCisgICAgIFRoZSBwcm9jZXNzIG11c3QgaGF2ZSB3cml0ZSBhY2Nlc3Mgb24gdGhlIGtleSB0byBiZSBhYmxlIHRvIGluc3RhbnRpYXRlCisgICAgIGl0LCBhbmQgdGhlIGtleSBtdXN0IGJlIHVuaW5zdGFudGlhdGVkLgorCisgICAgIElmIGEga2V5cmluZyBpcyBzcGVjaWZpZWQgKG5vbi16ZXJvKSwgdGhlIGtleSB3aWxsIGFsc28gYmUgbGlua2VkIGludG8KKyAgICAgdGhhdCBrZXlyaW5nLCBob3dldmVyIGFsbCB0aGUgY29uc3RyYWludHMgYXBwbHlpbmcgaW4gS0VZQ1RMX0xJTksgYXBwbHkKKyAgICAgaW4gdGhpcyBjYXNlIHRvby4KKworCis9PT09PT09PT09PT09PT0KK0tFUk5FTCBTRVJWSUNFUworPT09PT09PT09PT09PT09CisKK1RoZSBrZXJuZWwgc2VydmljZXMgZm9yIGtleSBtYW5hZ21lbnQgYXJlIGZhaXJseSBzaW1wbGUgdG8gZGVhbCB3aXRoLiBUaGV5IGNhbgorYmUgYnJva2VuIGRvd24gaW50byB0d28gYXJlYXM6IGtleXMgYW5kIGtleSB0eXBlcy4KKworRGVhbGluZyB3aXRoIGtleXMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gRmlyc3RseSwgdGhlIGtlcm5lbCBzZXJ2aWNlCityZWdpc3RlcnMgaXRzIHR5cGUsIHRoZW4gaXQgc2VhcmNoZXMgZm9yIGEga2V5IG9mIHRoYXQgdHlwZS4gSXQgc2hvdWxkIHJldGFpbgordGhlIGtleSBhcyBsb25nIGFzIGl0IGhhcyBuZWVkIG9mIGl0LCBhbmQgdGhlbiBpdCBzaG91bGQgcmVsZWFzZSBpdC4gRm9yIGEKK2ZpbGVzeXN0ZW0gb3IgZGV2aWNlIGZpbGUsIGEgc2VhcmNoIHdvdWxkIHByb2JhYmx5IGJlIHBlcmZvcm1lZCBkdXJpbmcgdGhlCitvcGVuIGNhbGwsIGFuZCB0aGUga2V5IHJlbGVhc2VkIHVwb24gY2xvc2UuIEhvdyB0byBkZWFsIHdpdGggY29uZmxpY3Rpbmcga2V5cworZHVlIHRvIHR3byBkaWZmZXJlbnQgdXNlcnMgb3BlbmluZyB0aGUgc2FtZSBmaWxlIGlzIGxlZnQgdG8gdGhlIGZpbGVzeXN0ZW0KK2F1dGhvciB0byBzb2x2ZS4KKworV2hlbiBhY2Nlc3NpbmcgYSBrZXkncyBwYXlsb2FkIGRhdGEsIGtleS0+bG9jayBzaG91bGQgYmUgYXQgbGVhc3QgcmVhZCBsb2NrZWQsCitvciBlbHNlIHRoZSBkYXRhIG1heSBiZSBjaGFuZ2VkIGJ5IGFuIHVwZGF0ZSBiZWluZyBwZXJmb3JtZWQgZnJvbSB1c2Vyc3BhY2UKK3doaWxzdCB0aGUgZHJpdmVyIG9yIGZpbGVzeXN0ZW0gaXMgdHJ5aW5nIHRvIGFjY2VzcyBpdC4gSWYgbm8gdXBkYXRlIG1ldGhvZCBpcworc3VwcGxpZWQsIHRoZW4gdGhlIGtleSdzIHBheWxvYWQgbWF5IGJlIGFjY2Vzc2VkIHdpdGhvdXQgaG9sZGluZyBhIGxvY2sgYXMKK3RoZXJlIGlzIG5vIHdheSB0byBjaGFuZ2UgaXQsIHByb3ZpZGVkIGl0IGNhbiBiZSBndWFyYW50ZWVkIHRoYXQgdGhlIGtleSdzCit0eXBlIGRlZmluaXRpb24gd29uJ3QgZ28gYXdheS4KKworKCopIFRvIHNlYXJjaCBmb3IgYSBrZXksIGNhbGw6CisKKwlzdHJ1Y3Qga2V5ICpyZXF1ZXN0X2tleShjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCisJCQkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkJY29uc3QgY2hhciAqY2FsbG91dF9zdHJpbmcpOworCisgICAgVGhpcyBpcyB1c2VkIHRvIHJlcXVlc3QgYSBrZXkgb3Iga2V5cmluZyB3aXRoIGEgZGVzY3JpcHRpb24gdGhhdCBtYXRjaGVzCisgICAgdGhlIGRlc2NyaXB0aW9uIHNwZWNpZmllZCBhY2NvcmRpbmcgdG8gdGhlIGtleSB0eXBlJ3MgbWF0Y2ggZnVuY3Rpb24uIFRoaXMKKyAgICBwZXJtaXRzIGFwcHJveGltYXRlIG1hdGNoaW5nIHRvIG9jY3VyLiBJZiBjYWxsb3V0X3N0cmluZyBpcyBub3QgTlVMTCwgdGhlbgorICAgIC9zYmluL3JlcXVlc3Qta2V5IHdpbGwgYmUgaW52b2tlZCBpbiBhbiBhdHRlbXB0IHRvIG9idGFpbiB0aGUga2V5IGZyb20KKyAgICB1c2Vyc3BhY2UuIEluIHRoYXQgY2FzZSwgY2FsbG91dF9zdHJpbmcgd2lsbCBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8KKyAgICB0aGUgcHJvZ3JhbS4KKworICAgIFNob3VsZCB0aGUgZnVuY3Rpb24gZmFpbCBlcnJvciBFTk9LRVksIEVLRVlFWFBJUkVEIG9yIEVLRVlSRVZPS0VEIHdpbGwgYmUKKyAgICByZXR1cm5lZC4KKworCisoKikgV2hlbiBpdCBpcyBubyBsb25nZXIgcmVxdWlyZWQsIHRoZSBrZXkgc2hvdWxkIGJlIHJlbGVhc2VkIHVzaW5nOgorCisJdm9pZCBrZXlfcHV0KHN0cnVjdCBrZXkgKmtleSk7CisKKyAgICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gSWYgQ09ORklHX0tFWVMgaXMgbm90IHNldCB0aGVuCisgICAgdGhlIGFyZ3VtZW50IHdpbGwgbm90IGJlIHBhcnNlZC4KKworCisoKikgRXh0cmEgcmVmZXJlbmNlcyBjYW4gYmUgbWFkZSB0byBhIGtleSBieSBjYWxsaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKKwlzdHJ1Y3Qga2V5ICprZXlfZ2V0KHN0cnVjdCBrZXkgKmtleSk7CisKKyAgICBUaGVzZSBuZWVkIHRvIGJlIGRpc3Bvc2VkIG9mIGJ5IGNhbGxpbmcga2V5X3B1dCgpIHdoZW4gdGhleSd2ZSBiZWVuCisgICAgZmluaXNoZWQgd2l0aC4gVGhlIGtleSBwb2ludGVyIHBhc3NlZCBpbiB3aWxsIGJlIHJldHVybmVkLiBJZiB0aGUgcG9pbnRlcgorICAgIGlzIE5VTEwgb3IgQ09ORklHX0tFWVMgaXMgbm90IHNldCB0aGVuIHRoZSBrZXkgd2lsbCBub3QgYmUgZGVyZWZlcmVuY2VkIGFuZAorICAgIG5vIGluY3JlbWVudCB3aWxsIHRha2UgcGxhY2UuCisKKworKCopIEEga2V5J3Mgc2VyaWFsIG51bWJlciBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZzoKKworCWtleV9zZXJpYWxfdCBrZXlfc2VyaWFsKHN0cnVjdCBrZXkgKmtleSk7CisKKyAgICBJZiBrZXkgaXMgTlVMTCBvciBpZiBDT05GSUdfS0VZUyBpcyBub3Qgc2V0IHRoZW4gMCB3aWxsIGJlIHJldHVybmVkIChpbiB0aGUKKyAgICBsYXR0ZXIgY2FzZSB3aXRob3V0IHBhcnNpbmcgdGhlIGFyZ3VtZW50KS4KKworCisoKikgSWYgYSBrZXlyaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2VhcmNoLCB0aGlzIGNhbiBiZSBmdXJ0aGVyIHNlYXJjaGVkIGJ5OgorCisJc3RydWN0IGtleSAqa2V5cmluZ19zZWFyY2goc3RydWN0IGtleSAqa2V5cmluZywKKwkJCQkgICBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCisJCQkJICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCisKKyAgICBUaGlzIHNlYXJjaGVzIHRoZSBrZXlyaW5nIHRyZWUgc3BlY2lmaWVkIGZvciBhIG1hdGNoaW5nIGtleS4gRXJyb3IgRU5PS0VZCisgICAgaXMgcmV0dXJuZWQgdXBvbiBmYWlsdXJlLiBJZiBzdWNjZXNzZnVsLCB0aGUgcmV0dXJuZWQga2V5IHdpbGwgbmVlZCB0byBiZQorICAgIHJlbGVhc2VkLgorCisKKygqKSBUbyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgYSBrZXksIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZDoKKworCWludCB2YWxpZGF0ZV9rZXkoc3RydWN0IGtleSAqa2V5KTsKKworICAgIFRoaXMgY2hlY2tzIHRoYXQgdGhlIGtleSBpbiBxdWVzdGlvbiBoYXNuJ3QgZXhwaXJlZCBvciBhbmQgaGFzbid0IGJlZW4KKyAgICByZXZva2VkLiBTaG91bGQgdGhlIGtleSBiZSBpbnZhbGlkLCBlcnJvciBFS0VZRVhQSVJFRCBvciBFS0VZUkVWT0tFRCB3aWxsCisgICAgYmUgcmV0dXJuZWQuIElmIHRoZSBrZXkgaXMgTlVMTCBvciBpZiBDT05GSUdfS0VZUyBpcyBub3Qgc2V0IHRoZW4gMCB3aWxsIGJlCisgICAgcmV0dXJuZWQgKGluIHRoZSBsYXR0ZXIgY2FzZSB3aXRob3V0IHBhcnNpbmcgdGhlIGFyZ3VtZW50KS4KKworCisoKikgVG8gcmVnaXN0ZXIgYSBrZXkgdHlwZSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkOgorCisJaW50IHJlZ2lzdGVyX2tleV90eXBlKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSk7CisKKyAgICBUaGlzIHdpbGwgcmV0dXJuIGVycm9yIEVFWElTVCBpZiBhIHR5cGUgb2YgdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5CisgICAgcHJlc2VudC4KKworCisoKikgVG8gdW5yZWdpc3RlciBhIGtleSB0eXBlLCBjYWxsOgorCisJdm9pZCB1bnJlZ2lzdGVyX2tleV90eXBlKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSk7CisKKworPT09PT09PT09PT09PT09PT09PQorREVGSU5JTkcgQSBLRVkgVFlQRQorPT09PT09PT09PT09PT09PT09PQorCitBIGtlcm5lbCBzZXJ2aWNlIG1heSB3YW50IHRvIGRlZmluZSBpdHMgb3duIGtleSB0eXBlLiBGb3IgaW5zdGFuY2UsIGFuIEFGUworZmlsZXN5c3RlbSBtaWdodCB3YW50IHRvIGRlZmluZSBhIEtlcmJlcm9zIDUgdGlja2V0IGtleSB0eXBlLiBUbyBkbyB0aGlzLCBpdAorYXV0aG9yIGZpbGxzIGluIGEgc3RydWN0IGtleV90eXBlIGFuZCByZWdpc3RlcnMgaXQgd2l0aCB0aGUgc3lzdGVtLgorCitUaGUgc3RydWN0dXJlIGhhcyBhIG51bWJlciBvZiBmaWVsZHMsIHNvbWUgb2Ygd2hpY2ggYXJlIG1hbmRhdG9yeToKKworICgqKSBjb25zdCBjaGFyICpuYW1lCisKKyAgICAgVGhlIG5hbWUgb2YgdGhlIGtleSB0eXBlLiBUaGlzIGlzIHVzZWQgdG8gdHJhbnNsYXRlIGEga2V5IHR5cGUgbmFtZQorICAgICBzdXBwbGllZCBieSB1c2Vyc3BhY2UgaW50byBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZS4KKworCisgKCopIHNpemVfdCBkZWZfZGF0YWxlbgorCisgICAgIFRoaXMgaXMgb3B0aW9uYWwgLSBpdCBzdXBwbGllcyB0aGUgZGVmYXVsdCBwYXlsb2FkIGRhdGEgbGVuZ3RoIGFzCisgICAgIGNvbnRyaWJ1dGVkIHRvIHRoZSBxdW90YS4gSWYgdGhlIGtleSB0eXBlJ3MgcGF5bG9hZCBpcyBhbHdheXMgb3IgYWxtb3N0CisgICAgIGFsd2F5cyB0aGUgc2FtZSBzaXplLCB0aGVuIHRoaXMgaXMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpbmdzLgorCisgICAgIFRoZSBkYXRhIGxlbmd0aCAoYW5kIHF1b3RhKSBvbiBhIHBhcnRpY3VsYXIga2V5IGNhbiBhbHdheXMgYmUgY2hhbmdlZAorICAgICBkdXJpbmcgaW5zdGFudGlhdGlvbiBvciB1cGRhdGUgYnkgY2FsbGluZzoKKworCWludCBrZXlfcGF5bG9hZF9yZXNlcnZlKHN0cnVjdCBrZXkgKmtleSwgc2l6ZV90IGRhdGFsZW4pOworCisgICAgIFdpdGggdGhlIHJldmlzZWQgZGF0YSBsZW5ndGguIEVycm9yIEVEUVVPVCB3aWxsIGJlIHJldHVybmVkIGlmIHRoaXMgaXMKKyAgICAgbm90IHZpYWJsZS4KKworCisgKCopIGludCAoKmluc3RhbnRpYXRlKShzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuKTsKKworICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gYXR0YWNoIGEgcGF5bG9hZCB0byBhIGtleSBkdXJpbmcgY29uc3RydWN0aW9uLgorICAgICBUaGUgcGF5bG9hZCBhdHRhY2hlZCBuZWVkIG5vdCBiZWFyIGFueSByZWxhdGlvbiB0byB0aGUgZGF0YSBwYXNzZWQgdG8KKyAgICAgdGhpcyBmdW5jdGlvbi4KKworICAgICBJZiB0aGUgYW1vdW50IG9mIGRhdGEgYXR0YWNoZWQgdG8gdGhlIGtleSBkaWZmZXJzIGZyb20gdGhlIHNpemUgaW4KKyAgICAga2V5dHlwZS0+ZGVmX2RhdGFsZW4sIHRoZW4ga2V5X3BheWxvYWRfcmVzZXJ2ZSgpIHNob3VsZCBiZSBjYWxsZWQuCisKKyAgICAgVGhpcyBtZXRob2QgZG9lcyBub3QgaGF2ZSB0byBsb2NrIHRoZSBrZXkgaW4gb3JkZXIgdG8gYXR0YWNoIGEgcGF5bG9hZC4KKyAgICAgVGhlIGZhY3QgdGhhdCBLRVlfRkxBR19JTlNUQU5USUFURUQgaXMgbm90IHNldCBpbiBrZXktPmZsYWdzIHByZXZlbnRzCisgICAgIGFueXRoaW5nIGVsc2UgZnJvbSBnYWluaW5nIGFjY2VzcyB0byB0aGUga2V5LgorCisgICAgIFRoaXMgbWV0aG9kIG1heSBzbGVlcCBpZiBpdCB3aXNoZXMuCisKKworICgqKSBpbnQgKCpkdXBsaWNhdGUpKHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgc3RydWN0IGtleSAqc291cmNlKTsKKworICAgICBJZiB0aGlzIHR5cGUgb2Yga2V5IGNhbiBiZSBkdXBsaWNhdGVkLCB0aGVuIHRoaXMgbWV0aG9kIHNob3VsZCBiZQorICAgICBwcm92aWRlZC4gSXQgaXMgY2FsbGVkIHRvIGNvcHkgdGhlIHBheWxvYWQgYXR0YWNoZWQgdG8gdGhlIHNvdXJjZSBpbnRvCisgICAgIHRoZSBuZXcga2V5LiBUaGUgZGF0YSBsZW5ndGggb24gdGhlIG5ldyBrZXkgd2lsbCBoYXZlIGJlZW4gdXBkYXRlZCBhbmQKKyAgICAgdGhlIHF1b3RhIGFkanVzdGVkIGFscmVhZHkuCisKKyAgICAgVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc291cmNlIGtleSdzIHNlbWFwaG9yZSByZWFkLWxvY2tlZCB0bworICAgICBwcmV2ZW50IGl0cyBwYXlsb2FkIGZyb20gYmVpbmcgY2hhbmdlZC4gSXQgaXMgc2FmZSB0byBzbGVlcCBoZXJlLgorCisKKyAoKikgaW50ICgqdXBkYXRlKShzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuKTsKKworICAgICBJZiB0aGlzIHR5cGUgb2Yga2V5IGNhbiBiZSB1cGRhdGVkLCB0aGVuIHRoaXMgbWV0aG9kIHNob3VsZCBiZQorICAgICBwcm92aWRlZC4gSXQgaXMgY2FsbGVkIHRvIHVwZGF0ZSBhIGtleSdzIHBheWxvYWQgZnJvbSB0aGUgYmxvYiBvZiBkYXRhCisgICAgIHByb3ZpZGVkLgorCisgICAgIGtleV9wYXlsb2FkX3Jlc2VydmUoKSBzaG91bGQgYmUgY2FsbGVkIGlmIHRoZSBkYXRhIGxlbmd0aCBtaWdodCBjaGFuZ2UKKyAgICAgYmVmb3JlIGFueSBjaGFuZ2VzIGFyZSBhY3R1YWxseSBtYWRlLiBOb3RlIHRoYXQgaWYgdGhpcyBzdWNjZWVkcywgdGhlCisgICAgIHR5cGUgaXMgY29tbWl0dGVkIHRvIGNoYW5naW5nIHRoZSBrZXkgYmVjYXVzZSBpdCdzIGFscmVhZHkgYmVlbiBhbHRlcmVkLAorICAgICBzbyBhbGwgbWVtb3J5IGFsbG9jYXRpb24gbXVzdCBiZSBkb25lIGZpcnN0LgorCisgICAgIGtleV9wYXlsb2FkX3Jlc2VydmUoKSBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGtleS0+bG9jayB3cml0ZSBsb2NrZWQsCisgICAgIGFuZCB0aGUgY2hhbmdlcyB0byB0aGUga2V5J3MgYXR0YWNoZWQgcGF5bG9hZCBzaG91bGQgYmUgbWFkZSBiZWZvcmUgdGhlCisgICAgIGtleSBpcyBsb2NrZWQuCisKKyAgICAgVGhlIGtleSB3aWxsIGhhdmUgaXRzIHNlbWFwaG9yZSB3cml0ZS1sb2NrZWQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzCisgICAgIGNhbGxlZC4gQW55IGNoYW5nZXMgdG8gdGhlIGtleSBzaG91bGQgYmUgbWFkZSB3aXRoIHRoZSBrZXkncyByd2xvY2sKKyAgICAgd3JpdGUtbG9ja2VkIGFsc28uIEl0IGlzIHNhZmUgdG8gc2xlZXAgaGVyZS4KKworCisgKCopIGludCAoKm1hdGNoKShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHZvaWQgKmRlc2MpOworCisgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBtYXRjaCBhIGtleSBhZ2FpbnN0IGEgZGVzY3JpcHRpb24uIEl0IHNob3VsZAorICAgICByZXR1cm4gbm9uLXplcm8gaWYgdGhlIHR3byBtYXRjaCwgemVybyBpZiB0aGV5IGRvbid0LgorCisgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgbmVlZCB0byBsb2NrIHRoZSBrZXkgaW4gYW55IHdheS4gVGhlIHR5cGUgYW5kCisgICAgIGRlc2NyaXB0aW9uIGNhbiBiZSBjb25zaWRlcmVkIGludmFyaWFudCwgYW5kIHRoZSBwYXlsb2FkIHNob3VsZCBub3QgYmUKKyAgICAgYWNjZXNzZWQgKHRoZSBrZXkgbWF5IG5vdCB5ZXQgYmUgaW5zdGFudGlhdGVkKS4KKworICAgICBJdCBpcyBub3Qgc2FmZSB0byBzbGVlcCBpbiB0aGlzIG1ldGhvZDsgdGhlIGNhbGxlciBtYXkgaG9sZCBzcGlubG9ja3MuCisKKworICgqKSB2b2lkICgqZGVzdHJveSkoc3RydWN0IGtleSAqa2V5KTsKKworICAgICBUaGlzIG1ldGhvZCBpcyBvcHRpb25hbC4gSXQgaXMgY2FsbGVkIHRvIGRpc2NhcmQgdGhlIHBheWxvYWQgZGF0YSBvbiBhCisgICAgIGtleSB3aGVuIGl0IGlzIGJlaW5nIGRlc3Ryb3llZC4KKworICAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBuZWVkIHRvIGxvY2sgdGhlIGtleTsgaXQgY2FuIGNvbnNpZGVyIHRoZSBrZXkgYXMKKyAgICAgYmVpbmcgaW5hY2Nlc3NpYmxlLiBOb3RlIHRoYXQgdGhlIGtleSdzIHR5cGUgbWF5IGhhdmUgY2hhbmdlZCBiZWZvcmUgdGhpcworICAgICBmdW5jdGlvbiBpcyBjYWxsZWQuCisKKyAgICAgSXQgaXMgbm90IHNhZmUgdG8gc2xlZXAgaW4gdGhpcyBtZXRob2Q7IHRoZSBjYWxsZXIgbWF5IGhvbGQgc3BpbmxvY2tzLgorCisKKyAoKikgdm9pZCAoKmRlc2NyaWJlKShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBzZXFfZmlsZSAqcCk7CisKKyAgICAgVGhpcyBtZXRob2QgaXMgb3B0aW9uYWwuIEl0IGlzIGNhbGxlZCBkdXJpbmcgL3Byb2Mva2V5cyByZWFkaW5nIHRvCisgICAgIHN1bW1hcmlzZSBhIGtleSdzIGRlc2NyaXB0aW9uIGFuZCBwYXlsb2FkIGluIHRleHQgZm9ybS4KKworICAgICBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBrZXkncyByd2xvY2sgcmVhZC1sb2NrZWQuIFRoaXMgd2lsbAorICAgICBwcmV2ZW50IHRoZSBrZXkncyBwYXlsb2FkIGFuZCBzdGF0ZSBjaGFuZ2luZzsgYWxzbyB0aGUgZGVzY3JpcHRpb24gc2hvdWxkCisgICAgIG5vdCBjaGFuZ2UuIFRoaXMgYWxzbyBtZWFucyBpdCBpcyBub3Qgc2FmZSB0byBzbGVlcCBpbiB0aGlzIG1ldGhvZC4KKworCisgKCopIGxvbmcgKCpyZWFkKShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBidWZsZW4pOworCisgICAgIFRoaXMgbWV0aG9kIGlzIG9wdGlvbmFsLiBJdCBpcyBjYWxsZWQgYnkgS0VZQ1RMX1JFQUQgdG8gdHJhbnNsYXRlIHRoZQorICAgICBrZXkncyBwYXlsb2FkIGludG8gc29tZXRoaW5nIGEgYmxvYiBvZiBkYXRhIGZvciB1c2Vyc3BhY2UgdG8gZGVhbAorICAgICB3aXRoLiBJZGVhbGx5LCB0aGUgYmxvYiBzaG91bGQgYmUgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoYXQgcGFzc2VkIGluIHRvCisgICAgIHRoZSBpbnN0YW50aWF0ZSBhbmQgdXBkYXRlIG1ldGhvZHMuCisKKyAgICAgSWYgc3VjY2Vzc2Z1bCwgdGhlIGJsb2Igc2l6ZSB0aGF0IGNvdWxkIGJlIHByb2R1Y2VkIHNob3VsZCBiZSByZXR1cm5lZAorICAgICByYXRoZXIgdGhhbiB0aGUgc2l6ZSBjb3BpZWQuCisKKyAgICAgVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUga2V5J3Mgc2VtYXBob3JlIHJlYWQtbG9ja2VkLiBUaGlzCisgICAgIHdpbGwgcHJldmVudCB0aGUga2V5J3MgcGF5bG9hZCBjaGFuZ2luZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBhbHNvCisgICAgIHJlYWQtbG9jayBrZXktPmxvY2sgd2hlbiBhY2Nlc3NpbmcgdGhlIGtleSdzIHBheWxvYWQuIEl0IGlzIHNhZmUgdG8gc2xlZXAKKyAgICAgaW4gdGhpcyBtZXRob2QsIHN1Y2ggYXMgbWlnaHQgaGFwcGVuIHdoZW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgaXMKKyAgICAgYWNjZXNzZWQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVRVUVTVC1LRVkgQ0FMTEJBQ0sgU0VSVklDRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyBjcmVhdGUgYSBuZXcga2V5LCB0aGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0byBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZAorbGluZToKKworCS9zYmluL3JlcXVlc3Qta2V5IGNyZWF0ZSA8a2V5PiA8dWlkPiA8Z2lkPiBcCisJCTx0aHJlYWRyaW5nPiA8cHJvY2Vzc3Jpbmc+IDxzZXNzaW9ucmluZz4gPGNhbGxvdXRfaW5mbz4KKworPGtleT4gaXMgdGhlIGtleSBiZWluZyBjb25zdHJ1Y3RlZCwgYW5kIHRoZSB0aHJlZSBrZXlyaW5ncyBhcmUgdGhlIHByb2Nlc3MKK2tleXJpbmdzIGZyb20gdGhlIHByb2Nlc3MgdGhhdCBjYXVzZWQgdGhlIHNlYXJjaCB0byBiZSBpc3N1ZWQuIFRoZXNlIGFyZQoraW5jbHVkZWQgZm9yIHR3byByZWFzb25zOgorCisgICgxKSBUaGVyZSBtYXkgYmUgYW4gYXV0aGVudGljYXRpb24gdG9rZW4gaW4gb25lIG9mIHRoZSBrZXlyaW5ncyB0aGF0IGlzCisgICAgICByZXF1aXJlZCB0byBvYnRhaW4gdGhlIGtleSwgZWc6IGEgS2VyYmVyb3MgVGlja2V0LUdyYW50aW5nIFRpY2tldC4KKworICAoMikgVGhlIG5ldyBrZXkgc2hvdWxkIHByb2JhYmx5IGJlIGNhY2hlZCBpbiBvbmUgb2YgdGhlc2UgcmluZ3MuCisKK1RoaXMgcHJvZ3JhbSBzaG91bGQgc2V0IGl0IFVJRCBhbmQgR0lEIHRvIHRob3NlIHNwZWNpZmllZCBiZWZvcmUgYXR0ZW1wdGluZyB0bworYWNjZXNzIGFueSBtb3JlIGtleXMuIEl0IG1heSB0aGVuIGxvb2sgYXJvdW5kIGZvciBhIHVzZXIgc3BlY2lmaWMgcHJvY2VzcyB0bworaGFuZCB0aGUgcmVxdWVzdCBvZmYgdG8gKHBlcmhhcHMgYSBwYXRoIGhlbGQgaW4gcGxhY2VkIGluIGFub3RoZXIga2V5IGJ5LCBmb3IKK2V4YW1wbGUsIHRoZSBLREUgZGVza3RvcCBtYW5hZ2VyKS4KKworVGhlIHByb2dyYW0gKG9yIHdoYXRldmVyIGl0IGNhbGxzKSBzaG91bGQgZmluaXNoIGNvbnN0cnVjdGlvbiBvZiB0aGUga2V5IGJ5CitjYWxsaW5nIEtFWUNUTF9JTlNUQU5USUFURSwgd2hpY2ggYWxzbyBwZXJtaXRzIGl0IHRvIGNhY2hlIHRoZSBrZXkgaW4gb25lIG9mCit0aGUga2V5cmluZ3MgKHByb2JhYmx5IHRoZSBzZXNzaW9uIHJpbmcpIGJlZm9yZSByZXR1cm5pbmcuIEFsdGVybmF0aXZlbHksIHRoZQora2V5IGNhbiBiZSBtYXJrZWQgYXMgbmVnYXRpdmUgd2l0aCBLRVlDVExfTkVHQVRFOyB0aGlzIGFsc28gcGVybWl0cyB0aGUga2V5IHRvCitiZSBjYWNoZWQgaW4gb25lIG9mIHRoZSBrZXlyaW5ncy4KKworSWYgaXQgcmV0dXJucyB3aXRoIHRoZSBrZXkgcmVtYWluaW5nIGluIHRoZSB1bmNvbnN0cnVjdGVkIHN0YXRlLCB0aGUga2V5IHdpbGwKK2JlIG1hcmtlZCBhcyBiZWluZyBuZWdhdGl2ZSwgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2Vzc2lvbiBrZXlyaW5nLCBhbmQgYW4KK2Vycm9yIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGtleSByZXF1ZXN0b3IuCisKK1N1cHBsZW1lbnRhcnkgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkIGZyb20gd2hvZXZlciBvciB3aGF0ZXZlciBpbnZva2VkCit0aGlzIHNlcnZpY2UuIFRoaXMgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIDxjYWxsb3V0X2luZm8+IHBhcmFtZXRlci4gSWYgbm8gc3VjaAoraW5mb3JtYXRpb24gd2FzIG1hZGUgYXZhaWxhYmxlLCB0aGVuICItIiB3aWxsIGJlIHBhc3NlZCBhcyB0aGlzIHBhcmFtZXRlcgoraW5zdGVhZC4KKworCitTaW1pbGFybHksIHRoZSBrZXJuZWwgbWF5IGF0dGVtcHQgdG8gdXBkYXRlIGFuIGV4cGlyZWQgb3IgYSBzb29uIHRvIGV4cGlyZSBrZXkKK2J5IGV4ZWN1dGluZzoKKworCS9zYmluL3JlcXVlc3Qta2V5IHVwZGF0ZSA8a2V5PiA8dWlkPiA8Z2lkPiBcCisJCTx0aHJlYWRyaW5nPiA8cHJvY2Vzc3Jpbmc+IDxzZXNzaW9ucmluZz4KKworSW4gdGhpcyBjYXNlLCB0aGUgcHJvZ3JhbSBpc24ndCByZXF1aXJlZCB0byBhY3R1YWxseSBhdHRhY2ggdGhlIGtleSB0byBhIHJpbmc7Cit0aGUgcmluZ3MgYXJlIHByb3ZpZGVkIGZvciByZWZlcmVuY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tvYmplY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDliZmZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dApAQCAtMCwwICsxLDM2NyBAQAorVGhlIGtvYmplY3QgSW5mcmFzdHJ1Y3R1cmUKKworUGF0cmljayBNb2NoZWwgPG1vY2hlbEBvc2RsLm9yZz4KKworVXBkYXRlZDogMyBKdW5lIDIwMDMKKworCitDb3B5cmlnaHQgKGMpICAyMDAzIFBhdHJpY2sgTW9jaGVsCitDb3B5cmlnaHQgKGMpICAyMDAzIE9wZW4gU291cmNlIERldmVsb3BtZW50IExhYnMKKworCiswLiBJbnRyb2R1Y3Rpb24KKworVGhlIGtvYmplY3QgaW5mcmFzdHJ1Y3R1cmUgcGVyZm9ybXMgYmFzaWMgb2JqZWN0IG1hbmFnZW1lbnQgdGhhdCBsYXJnZXIKK2RhdGEgc3RydWN0dXJlcyBhbmQgc3Vic3lzdGVtcyBjYW4gbGV2ZXJhZ2UsIHJhdGhlciB0aGFuIHJlaW1wbGVtZW50CitzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuIFRoaXMgZnVuY3Rpb25hbGl0eSBwcmltYXJpbHkgY29uY2VybnM6CisKKy0gT2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZy4KKy0gTWFpbnRhaW5pbmcgbGlzdHMgKHNldHMpIG9mIG9iamVjdHMuCistIE9iamVjdCBzZXQgbG9ja2luZy4KKy0gVXNlcnNwYWNlIHJlcHJlc2VudGF0aW9uLiAKKworVGhlIGluZnJhc3RydWN0dXJlIGNvbnNpc3RzIG9mIGEgbnVtYmVyIG9mIG9iamVjdCB0eXBlcyB0byBzdXBwb3J0Cit0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZWlyIHByb2dyYW1taW5nIGludGVyZmFjZXMgYXJlIGRlc2NyaWJlZCBiZWxvdworaW4gZGV0YWlsLCBhbmQgYnJpZWZseSBoZXJlOgorCistIGtvYmplY3RzCWEgc2ltcGxlIG9iamVjdC4KKy0ga3NldAkJYSBzZXQgb2Ygb2JqZWN0cyBvZiBhIGNlcnRhaW4gdHlwZS4KKy0ga3R5cGUJCWEgc2V0IG9mIGhlbHBlcnMgZm9yIG9iamVjdHMgb2YgYSBjb21tb24gdHlwZS4gCistIHN1YnN5c3RlbQlhIGNvbnRyb2xsaW5nIG9iamVjdCBmb3IgYSBudW1iZXIgb2Yga3NldHMuCisKKworVGhlIGtvYmplY3QgaW5mcmFzdHJ1Y3R1cmUgbWFpbnRhaW5zIGEgY2xvc2UgcmVsYXRpb25zaGlwIHdpdGggdGhlCitzeXNmcyBmaWxlc3lzdGVtLiBFYWNoIGtvYmplY3QgdGhhdCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGtvYmplY3QKK2NvcmUgcmVjZWl2ZXMgYSBkaXJlY3RvcnkgaW4gc3lzZnMuIEF0dHJpYnV0ZXMgYWJvdXQgdGhlIGtvYmplY3QgY2FuCit0aGVuIGJlIGV4cG9ydGVkLiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0IGZvcgorbW9yZSBpbmZvcm1hdGlvbi4gCisKK1RoZSBrb2JqZWN0IGluZnJhc3RydWN0dXJlIHByb3ZpZGVzIGEgZmxleGlibGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLAorYW5kIGFsbG93cyBrb2JqZWN0cyBhbmQga3NldHMgdG8gYmUgdXNlZCB3aXRob3V0IGJlaW5nIHJlZ2lzdGVyZWQKKyhpLmUuIHdpdGggbm8gc3lzZnMgcmVwcmVzZW50YXRpb24pLiBUaGlzIGlzIGFsc28gZGVzY3JpYmVkIGxhdGVyLiAKKworCisxLiBrb2JqZWN0cworCisxLjEgRGVzY3JpcHRpb24KKworCitzdHJ1Y3Qga29iamVjdCBpcyBhIHNpbXBsZSBkYXRhIHR5cGUgdGhhdCBwcm92aWRlcyBhIGZvdW5kYXRpb24gZm9yCittb3JlIGNvbXBsZXggb2JqZWN0IHR5cGVzLiBJdCBwcm92aWRlcyBhIHNldCBvZiBiYXNpYyBmaWVsZHMgdGhhdAorYWxtb3N0IGFsbCBjb21wbGV4IGRhdGEgdHlwZXMgc2hhcmUuIGtvYmplY3RzIGFyZSBpbnRlbmRlZCB0byBiZQorZW1iZWRkZWQgaW4gbGFyZ2VyIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVwbGFjZSBmaWVsZHMgdGhleSBkdXBsaWNhdGUuIAorCisxLjIgRGVmaW50aW9uCisKK3N0cnVjdCBrb2JqZWN0IHsKKwljaGFyCQkJbmFtZVtLT0JKX05BTUVfTEVOXTsKKwlhdG9taWNfdAkJcmVmY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZAllbnRyeTsKKwlzdHJ1Y3Qga29iamVjdAkJKiBwYXJlbnQ7CisJc3RydWN0IGtzZXQJCSoga3NldDsKKwlzdHJ1Y3Qga29ial90eXBlCSoga3R5cGU7CisJc3RydWN0IGRlbnRyeQkJKiBkZW50cnk7Cit9OworCit2b2lkIGtvYmplY3RfaW5pdChzdHJ1Y3Qga29iamVjdCAqKTsKK2ludCBrb2JqZWN0X2FkZChzdHJ1Y3Qga29iamVjdCAqKTsKK2ludCBrb2JqZWN0X3JlZ2lzdGVyKHN0cnVjdCBrb2JqZWN0ICopOworCit2b2lkIGtvYmplY3RfZGVsKHN0cnVjdCBrb2JqZWN0ICopOwordm9pZCBrb2JqZWN0X3VucmVnaXN0ZXIoc3RydWN0IGtvYmplY3QgKik7CisKK3N0cnVjdCBrb2JqZWN0ICoga29iamVjdF9nZXQoc3RydWN0IGtvYmplY3QgKik7Cit2b2lkIGtvYmplY3RfcHV0KHN0cnVjdCBrb2JqZWN0ICopOworCisKKzEuMyBrb2JqZWN0IFByb2dyYW1taW5nIEludGVyZmFjZQorCitrb2JqZWN0cyBtYXkgYmUgZHluYW1pY2FsbHkgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUga29iamVjdCBjb3JlCit1c2luZyBrb2JqZWN0X3JlZ2lzdGVyKCkgYW5kIGtvYmplY3RfdW5yZWdpc3RlcigpLiBSZWdpc3RyYXRpb24KK2luY2x1ZGVzIGluc2VydGluZyB0aGUga29iamVjdCBpbiB0aGUgbGlzdCBvZiBpdHMgZG9taW5hbnQga3NldCBhbmQKK2NyZWF0aW5nIGEgZGlyZWN0b3J5IGZvciBpdCBpbiBzeXNmcy4KKworQWx0ZXJuYXRpdmVseSwgb25lIG1heSB1c2UgYSBrb2JqZWN0IHdpdGhvdXQgYWRkaW5nIGl0IHRvIGl0cyBrc2V0J3MgbGlzdAorb3IgZXhwb3J0aW5nIGl0IHZpYSBzeXNmcywgYnkgc2ltcGx5IGNhbGxpbmcga29iamVjdF9pbml0KCkuIEFuCitpbml0aWFsaXplZCBrb2JqZWN0IG1heSBsYXRlciBiZSBhZGRlZCB0byB0aGUgb2JqZWN0IGhpZXJhcmNoeSBieQorY2FsbGluZyBrb2JqZWN0X2FkZCgpLiBBbiBpbml0aWFsaXplZCBrb2JqZWN0IG1heSBiZSB1c2VkIGZvcgorcmVmZXJlbmNlIGNvdW50aW5nLgorCitOb3RlOiBjYWxsaW5nIGtvYmplY3RfaW5pdCgpIHRoZW4ga29iamVjdF9hZGQoKSBpcyBmdW5jdGlvbmFsbHkKK2VxdWl2YWxlbnQgdG8gY2FsbGluZyBrb2JqZWN0X3JlZ2lzdGVyKCkuCisKK1doZW4gYSBrb2JqZWN0IGlzIHVucmVnaXN0ZXJlZCwgaXQgaXMgcmVtb3ZlZCBmcm9tIGl0cyBrc2V0J3MgbGlzdCwKK3JlbW92ZWQgZnJvbSB0aGUgc3lzZnMgZmlsZXN5c3RlbSwgYW5kIGl0cyByZWZlcmVuY2UgY291bnQgaXMgZGVjcmVtZW50ZWQuCitMaXN0IGFuZCBzeXNmcyByZW1vdmFsIGhhcHBlbiBpbiBrb2JqZWN0X2RlbCgpLCBhbmQgbWF5IGJlIGNhbGxlZAorbWFudWFsbHkuIGtvYmplY3RfcHV0KCkgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50LCBhbmQgbWF5IGFsc28KK2JlIGNhbGxlZCBtYW51YWxseS4gCisKK0Ega29iamVjdCdzIHJlZmVyZW5jZSBjb3VudCBtYXkgYmUgaW5jcmVtZW50ZWQgd2l0aCBrb2JqZWN0X2dldCgpLAord2hpY2ggcmV0dXJucyBhIHZhbGlkIHJlZmVyZW5jZSB0byBhIGtvYmplY3Q7IGFuZCBkZWNyZW1lbnRlZCB3aXRoIAora29iamVjdF9wdXQoKS4gQW4gb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50IG1heSBvbmx5IGJlIGluY3JlbWVudGVkIGlmCitpdCBpcyBhbHJlYWR5IHBvc2l0aXZlLiAKKworV2hlbiBhIGtvYmplY3QncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwLCB0aGUgbWV0aG9kIHN0cnVjdAora29ial90eXBlOjpyZWxlYXNlKCkgKHdoaWNoIHRoZSBrb2JqZWN0J3Mga3NldCBwb2ludHMgdG8pIGlzIGNhbGxlZC4KK1RoaXMgYWxsb3dzIGFueSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgb2JqZWN0IHRvIGJlIGZyZWVkLgorCisKK05PVEUhISEgCisKK0l0IGlzIF9pbXBlcmF0aXZlXyB0aGF0IHlvdSBzdXBwbHkgYSBkZXN0cnVjdG9yIGZvciBkeW5hbWljYWxseQorYWxsb2NhdGVkIGtvYmplY3RzIHRvIGZyZWUgdGhlbSBpZiB5b3UgYXJlIHVzaW5nIGtvYmplY3QgcmVmZXJlbmNlCitjb3VudHMuIFRoZSByZWZlcmVuY2UgY291bnQgY29udHJvbHMgdGhlIGxpZmV0aW1lIG9mIHRoZSBvYmplY3QuCitJZiBpdCBnb2VzIHRvIDAsIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBvYmplY3Qgd2lsbAorYmUgZnJlZWQgYW5kIGNhbm5vdCBiZSB1c2VkLiAKKworTW9yZSBpbXBvcnRhbnRseSwgeW91IG11c3QgZnJlZSB0aGUgb2JqZWN0IHRoZXJlLCBhbmQgbm90IGltbWVkaWF0ZWx5CithZnRlciBhbiB1bnJlZ2lzdGVyIGNhbGwuIElmIHNvbWVvbmUgZWxzZSBpcyByZWZlcmVuY2luZyB0aGUgb2JqZWN0CisoZS5nLiB0aHJvdWdoIGEgc3lzZnMgZmlsZSksIHRoZXkgd2lsbCBvYnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlCitvYmplY3QsIGFzc3VtZSBpdCdzIHZhbGlkIGFuZCBvcGVyYXRlIG9uIGl0LiBJZiB0aGUgb2JqZWN0IGlzCit1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGluIHRoZSBtZWFudGltZSwgdGhlIG9wZXJhdGlvbiB3aWxsIHRoZW4KK3JlZmVyZW5jZSBmcmVlZCBtZW1vcnkgYW5kIGdvIGJvb20uIAorCitUaGlzIGNhbiBiZSBwcmV2ZW50ZWQsIGluIHRoZSBzaW1wbGVzdCBjYXNlLCBieSBkZWZpbmluZyBhIHJlbGVhc2UKK21ldGhvZCBhbmQgZnJlZWluZyB0aGUgb2JqZWN0IGZyb20gdGhlcmUgb25seS4gTm90ZSB0aGF0IHRoaXMgd2lsbCBub3QKK3NlY3VyZSByZWZlcmVuY2UgY291bnQvb2JqZWN0IG1hbmFnZW1lbnQgbW9kZWxzIHRoYXQgdXNlIGEgZHVhbAorcmVmZXJlbmNlIGNvdW50IG9yIGRvIG90aGVyIHdhY2t5IHRoaW5ncyB3aXRoIHRoZSByZWZlcmVuY2UgY291bnQKKyhsaWtlIHRoZSBuZXR3b3JraW5nIGxheWVyKS4gCisKKworMS40IHN5c2ZzCisKK0VhY2gga29iamVjdCByZWNlaXZlcyBhIGRpcmVjdG9yeSBpbiBzeXNmcy4gVGhpcyBkaXJlY3RvcnkgaXMgY3JlYXRlZAordW5kZXIgdGhlIGtvYmplY3QncyBwYXJlbnQgZGlyZWN0b3J5LiAKKworSWYgYSBrb2JqZWN0IGRvZXMgbm90IGhhdmUgYSBwYXJlbnQgd2hlbiBpdCBpcyByZWdpc3RlcmVkLCBpdHMgcGFyZW50CitiZWNvbWVzIGl0cyBkb21pbmFudCBrc2V0LiAKKworSWYgYSBrb2JqZWN0IGRvZXMgbm90IGhhdmUgYSBwYXJlbnQgbm9yIGEgZG9taW5hbnQga3NldCwgaXRzIGRpcmVjdG9yeQoraXMgY3JlYXRlZCBhdCB0aGUgdG9wLWxldmVsIG9mIHRoZSBzeXNmcyBwYXJ0aXRpb24uIFRoaXMgc2hvdWxkIG9ubHkKK2hhcHBlbiBmb3Iga29iamVjdHMgdGhhdCBhcmUgZW1iZWRkZWQgaW4gYSBzdHJ1Y3Qgc3Vic3lzdGVtLiAKKworCisKKzIuIGtzZXRzCisKKzIuMSBEZXNjcmlwdGlvbgorCitBIGtzZXQgaXMgYSBzZXQgb2Yga29iamVjdHMgdGhhdCBhcmUgZW1iZWRkZWQgaW4gdGhlIHNhbWUgdHlwZS4gCisKKworc3RydWN0IGtzZXQgeworCXN0cnVjdCBzdWJzeXN0ZW0JKiBzdWJzeXM7CisJc3RydWN0IGtvYmpfdHlwZQkqIGt0eXBlOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3Qga29iamVjdAkJa29iajsKK307CisKKwordm9pZCBrc2V0X2luaXQoc3RydWN0IGtzZXQgKiBrKTsKK2ludCBrc2V0X2FkZChzdHJ1Y3Qga3NldCAqIGspOworaW50IGtzZXRfcmVnaXN0ZXIoc3RydWN0IGtzZXQgKiBrKTsKK3ZvaWQga3NldF91bnJlZ2lzdGVyKHN0cnVjdCBrc2V0ICogayk7CisKK3N0cnVjdCBrc2V0ICoga3NldF9nZXQoc3RydWN0IGtzZXQgKiBrKTsKK3ZvaWQga3NldF9wdXQoc3RydWN0IGtzZXQgKiBrKTsKKworc3RydWN0IGtvYmplY3QgKiBrc2V0X2ZpbmRfb2JqKHN0cnVjdCBrc2V0ICosIGNoYXIgKik7CisKKworVGhlIHR5cGUgdGhhdCB0aGUga29iamVjdHMgYXJlIGVtYmVkZGVkIGluIGlzIGRlc2NyaWJlZCBieSB0aGUga3R5cGUKK3BvaW50ZXIuIFRoZSBzdWJzeXN0ZW0gdGhhdCB0aGUga29iamVjdCBiZWxvbmdzIHRvIGlzIHBvaW50ZWQgdG8gYnkgdGhlCitzdWJzeXMgcG9pbnRlci4gCisKK0Ega3NldCBjb250YWlucyBhIGtvYmplY3QgaXRzZWxmLCBtZWFuaW5nIHRoYXQgaXQgbWF5IGJlIHJlZ2lzdGVyZWQgaW4KK3RoZSBrb2JqZWN0IGhpZXJhcmNoeSBhbmQgZXhwb3J0ZWQgdmlhIHN5c2ZzLiBNb3JlIGltcG9ydGFudGx5LCB0aGUKK2tzZXQgbWF5IGJlIGVtYmVkZGVkIGluIGEgbGFyZ2VyIGRhdGEgdHlwZSwgYW5kIG1heSBiZSBwYXJ0IG9mIGFub3RoZXIKK2tzZXQgKG9mIHRoYXQgb2JqZWN0IHR5cGUpLiAKKworRm9yIGV4YW1wbGUsIGEgYmxvY2sgZGV2aWNlIGlzIGFuIG9iamVjdCAoc3RydWN0IGdlbmRpc2spIHRoYXQgaXMKK2NvbnRhaW5lZCBpbiBhIHNldCBvZiBibG9jayBkZXZpY2VzLiBJdCBtYXkgYWxzbyBjb250YWluIGEgc2V0IG9mCitwYXJ0aXRpb25zIChzdHJ1Y3QgaGRfc3RydWN0KSB0aGF0IGhhdmUgYmVlbiBmb3VuZCBvbiB0aGUgZGV2aWNlLiBUaGUKK2ZvbGxvd2luZyBjb2RlIHNuaXBwZXQgaWxsdXN0cmF0ZXMgaG93IHRvIGV4cHJlc3MgdGhpcyBwcm9wZXJseS4KKworCSBzdHJ1Y3QgZ2VuZGlzayAqIGRpc2s7CisJIC4uLgorCSBkaXNrLT5rc2V0LmtvYmoua3NldCA9ICZibG9ja19rc2V0OworCSBkaXNrLT5rc2V0Lmt0eXBlID0gJnBhcnRpdGlvbl9rdHlwZTsKKwkga3NldF9yZWdpc3RlcigmZGlzay0+a3NldCk7CisKKy0gVGhlIGtzZXQgdGhhdCB0aGUgZGlzaydzIGVtYmVkZGVkIG9iamVjdCBiZWxvbmdzIHRvIGlzIHRoZQorICBibG9ja19rc2V0LCBhbmQgaXMgcG9pbnRlZCB0byBieSBkaXNrLT5rc2V0LmtvYmoua3NldC4gCisKKy0gVGhlIHR5cGUgb2Ygb2JqZWN0cyBvbiB0aGUgZGlzaydzIF9zdWJvcmRpbmF0ZV8gbGlzdCBhcmUgcGFydGl0aW9ucywgCisgIGFuZCBpcyBzZXQgaW4gZGlzay0+a3NldC5rdHlwZS4gCisKKy0gVGhlIGtzZXQgaXMgdGhlbiByZWdpc3RlcmVkLCB3aGljaCBoYW5kbGVzIGluaXRpYWxpemluZyBhbmQgYWRkaW5nCisgIHRoZSBlbWJlZGRlZCBrb2JqZWN0IHRvIHRoZSBoaWVyYXJjaHkuIAorCisKKzIuMiBrc2V0IFByb2dyYW1taW5nIEludGVyZmFjZSAKKworQWxsIGtzZXQgZnVuY3Rpb25zLCBleGNlcHQga3NldF9maW5kX29iaigpLCBldmVudHVhbGx5IGZvcndhcmQgdGhlCitjYWxscyB0byB0aGVpciBlbWJlZGRlZCBrb2JqZWN0cyBhZnRlciBwZXJmb3JtaW5nIGtzZXQtc3BlY2lmaWMKK29wZXJhdGlvbnMuIGtzZXRzIG9mZmVyIGEgc2ltaWxhciBwcm9ncmFtbWluZyBtb2RlbCB0byBrb2JqZWN0czogdGhleQorbWF5IGJlIHVzZWQgYWZ0ZXIgdGhleSBhcmUgaW5pdGlhbGl6ZWQsIHdpdGhvdXQgcmVnaXN0ZXJpbmcgdGhlbSBpbgordGhlIGhpZXJhcmNoeS4gCisKK2tzZXRfZmluZF9vYmooKSBtYXkgYmUgdXNlZCB0byBsb2NhdGUgYSBrb2JqZWN0IHdpdGggYSBwYXJ0aWN1bGFyCituYW1lLiBUaGUga29iamVjdCwgaWYgZm91bmQsIGlzIHJldHVybmVkLiAKKworCisyLjMgc3lzZnMKKwora3NldHMgYXJlIHJlcHJlc2VudGVkIGluIHN5c2ZzIHdoZW4gdGhlaXIgZW1iZWRkZWQga29iamVjdHMgYXJlCityZWdpc3RlcmVkLiBUaGV5IGZvbGxvdyB0aGUgc2FtZSBydWxlcyBvZiBwYXJlbnRpbmcsIHdpdGggb25lCitleGNlcHRpb24uIElmIGEga3NldCBkb2VzIG5vdCBoYXZlIGEgcGFyZW50LCBub3IgaXMgaXRzIGVtYmVkZGVkCitrb2JqZWN0IHBhcnQgb2YgYW5vdGhlciBrc2V0LCB0aGUga3NldCdzIHBhcmVudCBiZWNvbWVzIGl0cyBkb21pbmFudAorc3Vic3lzdGVtLiAKKworSWYgdGhlIGtzZXQgZG9lcyBub3QgaGF2ZSBhIHBhcmVudCwgaXRzIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGF0IHRoZQorc3lzZnMgcm9vdC4gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gd2hlbiB0aGUga3NldCByZWdpc3RlcmVkIGlzCitlbWJlZGRlZCBpbiBhIHN1YnN5c3RlbSBpdHNlbGYuIAorCisKKzMuIHN0cnVjdCBrdHlwZQorCiszLjEuIERlc2NyaXB0aW9uCisKK3N0cnVjdCBrb2JqX3R5cGUgeworCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3Qga29iamVjdCAqKTsKKwlzdHJ1Y3Qgc3lzZnNfb3BzCSogc3lzZnNfb3BzOworCXN0cnVjdCBhdHRyaWJ1dGUJKiogZGVmYXVsdF9hdHRyczsKK307CisKKworT2JqZWN0IHR5cGVzIHJlcXVpcmUgc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gdGhlCitnZW5lcmljIG9iamVjdCBhbmQgdGhlIG1vcmUgY29tcGxleCB0eXBlLiBzdHJ1Y3Qga29ial90eXBlIHByb3ZpZGVzCit0aGUgb2JqZWN0LXNwZWNpZmljIGZpZWxkcywgd2hpY2ggaW5jbHVkZToKKworLSByZWxlYXNlOiBDYWxsZWQgd2hlbiB0aGUga29iamVjdCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAuIFRoaXMKKyAgc2hvdWxkIGNvbnZlcnQgdGhlIG9iamVjdCB0byB0aGUgbW9yZSBjb21wbGV4IHR5cGUgYW5kIGZyZWUgaXQuIAorCistIHN5c2ZzX29wczogUHJvdmlkZXMgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHN5c2ZzIGFjY2Vzcy4gUGxlYXNlCisgIHNlZSB0aGUgc3lzZnMgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gCisKKy0gZGVmYXVsdF9hdHRyczogRGVmYXVsdCBhdHRyaWJ1dGVzIHRvIGJlIGV4cG9ydGVkIHZpYSBzeXNmcyB3aGVuIHRoZQorICBvYmplY3QgaXMgcmVnaXN0ZXJlZC5Ob3RlIHRoYXQgdGhlIGxhc3QgYXR0cmlidXRlIGhhcyB0byBiZQorICBpbml0aWFsaXplZCB0byBOVUxMICEgWW91IGNhbiBmaW5kIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24KKyAgaW4gZHJpdmVycy9ibG9jay9nZW5oZC5jCisKKworSW5zdGFuY2VzIG9mIHN0cnVjdCBrb2JqX3R5cGUgYXJlIG5vdCByZWdpc3RlcmVkOyBvbmx5IHJlZmVyZW5jZWQgYnkKK3RoZSBrc2V0LiBBIGtvYmpfdHlwZSBtYXkgYmUgcmVmZXJlbmNlZCBieSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCitrc2V0cywgYXMgdGhlcmUgbWF5IGJlIGRpc3BhcmF0ZSBzZXRzIG9mIGlkZW50aWNhbCBvYmplY3RzLiAKKworCisKKzQuIHN1YnN5c3RlbXMKKworNC4xIERlc2NyaXB0aW9uCisKK0Egc3Vic3lzdGVtIHJlcHJlc2VudHMgYSBzaWduaWZpY2FudCBlbnRpdHkgb2YgY29kZSB0aGF0IG1haW50YWlucyBhbgorYXJiaXRyYXJ5IG51bWJlciBvZiBzZXRzIG9mIG9iamVjdHMgb2YgdmFyaW91cyB0eXBlcy4gU2luY2UgdGhlIG51bWJlcgorb2Yga3NldHMgYW5kIHRoZSB0eXBlIG9mIG9iamVjdHMgdGhleSBjb250YWluIGFyZSB2YXJpYWJsZSwgYQorZ2VuZXJpYyByZXByZXNlbnRhdGlvbiBvZiBhIHN1YnN5c3RlbSBpcyBtaW5pbWFsLiAKKworCitzdHJ1Y3Qgc3Vic3lzdGVtIHsKKwlzdHJ1Y3Qga3NldAkJa3NldDsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlCXJ3c2VtOworfTsKKworaW50IHN1YnN5c3RlbV9yZWdpc3RlcihzdHJ1Y3Qgc3Vic3lzdGVtICopOwordm9pZCBzdWJzeXN0ZW1fdW5yZWdpc3RlcihzdHJ1Y3Qgc3Vic3lzdGVtICopOworCitzdHJ1Y3Qgc3Vic3lzdGVtICogc3Vic3lzX2dldChzdHJ1Y3Qgc3Vic3lzdGVtICogcyk7Cit2b2lkIHN1YnN5c19wdXQoc3RydWN0IHN1YnN5c3RlbSAqIHMpOworCisKK0Egc3Vic3lzdGVtIGNvbnRhaW5zIGFuIGVtYmVkZGVkIGtzZXQgc286CisKKy0gSXQgY2FuIGJlIHJlcHJlc2VudGVkIGluIHRoZSBvYmplY3QgaGllcmFyY2h5IHZpYSB0aGUga3NldCdzCisgIGVtYmVkZGVkIGtvYmplY3QuIAorCistIEl0IGNhbiBtYWludGFpbiBhIGRlZmF1bHQgbGlzdCBvZiBvYmplY3RzIG9mIG9uZSB0eXBlLiAKKworQWRkaXRpb25hbCBrc2V0cyBtYXkgYXR0YWNoIHRvIHRoZSBzdWJzeXN0ZW0gc2ltcGx5IGJ5IHJlZmVyZW5jaW5nIHRoZQorc3Vic3lzdGVtIGJlZm9yZSB0aGV5IGFyZSByZWdpc3RlcmVkLiAoVGhpcyBvbmUtd2F5IHJlZmVyZW5jZSBtZWFucwordGhhdCB0aGVyZSBpcyBubyB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBrc2V0cyB0aGF0IGFyZSBhdHRhY2hlZCB0byB0aGUKK3N1YnN5c3RlbS4pIAorCitBbGwga3NldHMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBzdWJzeXN0ZW0gc2hhcmUgdGhlIHN1YnN5c3RlbSdzIFIvVworc2VtYXBob3JlLiAKKworCis0LjIgc3Vic3lzdGVtIFByb2dyYW1taW5nIEludGVyZmFjZS4KKworVGhlIHN1YnN5c3RlbSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgaXMgc2ltcGxlIGFuZCBkb2VzIG5vdCBvZmZlciB0aGUKK2ZsZXhpYmlsaXR5IHRoYXQgdGhlIGtzZXQgYW5kIGtvYmplY3QgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBkby4gVGhleQorbWF5IGJlIHJlZ2lzdGVyZWQgYW5kIHVucmVnaXN0ZXJlZCwgYXMgd2VsbCBhcyByZWZlcmVuY2UgY291bnRlZC4gRWFjaAorY2FsbCBmb3J3YXJkcyB0aGUgY2FsbHMgdG8gdGhlaXIgZW1iZWRkZWQga3NldHMgKHdoaWNoIGZvcndhcmQgdGhlCitjYWxscyB0byB0aGVpciBlbWJlZGRlZCBrb2JqZWN0cykuCisKKworNC4zIEhlbHBlcnMKKworQSBudW1iZXIgb2YgbWFjcm9zIGFyZSBhdmFpbGFibGUgdG8gbWFrZSBkZWFsaW5nIHdpdGggc3Vic3lzdGVtcyBhbmQKK3RoZWlyIGVtYmVkZGVkIG9iamVjdHMgZWFzaWVyLiAKKworCitkZWNsX3N1YnN5cyhuYW1lLHR5cGUpCisKK0RlY2xhcmVzIGEgc3Vic3lzdGVtIG5hbWVkICc8bmFtZT5fc3Vic3lzJywgd2l0aCBhbiBlbWJlZGRlZCBrc2V0IG9mCit0eXBlIDx0eXBlPi4gRm9yIGV4YW1wbGUsIAorCitkZWNsX3N1YnN5cyhkZXZpY2VzLCZrdHlwZV9kZXZpY2VzKTsKKworaXMgZXF1aXZhbGVudCB0byBkb2luZzoKKworc3RydWN0IHN1YnN5c3RlbSBkZXZpY2Vfc3Vic3lzID0geworICAgICAgIC5rc2V0ID0geworCSAgICAgLmtvYmogPSB7CisJCSAgIC5uYW1lID0gImRldmljZXMiLAorCSAgICAgfSwKKwkgICAgIC5rdHlwZSA9ICZrdHlwZV9kZXZpY2VzLAorCX0KK307IAorCisKK1RoZSBvYmplY3RzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgd2l0aCBhIHN1YnN5c3RlbSB0aGF0IHVzZSB0aGUKK3N1YnN5c3RlbSdzIGRlZmF1bHQgbGlzdCBtdXN0IGhhdmUgdGhlaXIga3NldCBwdHIgc2V0IHByb3Blcmx5LiBUaGVzZQorb2JqZWN0cyBtYXkgaGF2ZSBlbWJlZGRlZCBrb2JqZWN0cywga3NldHMsIG9yIG90aGVyIHN1YnN5c3RlbXMuIFRoZQorZm9sbG93aW5nIGhlbHBlcnMgbWFrZSBzZXR0aW5nIHRoZSBrc2V0IGVhc2llcjogCisKKwora29ial9zZXRfa3NldF9zKG9iaixzdWJzeXMpCisKKy0gQXNzdW1lcyB0aGF0IG9iai0+a29iaiBleGlzdHMsIGFuZCBpcyBhIHN0cnVjdCBrb2JqZWN0LiAKKy0gU2V0cyB0aGUga3NldCBvZiB0aGF0IGtvYmplY3QgdG8gdGhlIHN1YnN5c3RlbSdzIGVtYmVkZGVkIGtzZXQuCisKKwora3NldF9zZXRfa3NldF9zKG9iaixzdWJzeXMpCisKKy0gQXNzdW1lcyB0aGF0IG9iai0+a3NldCBleGlzdHMsIGFuZCBpcyBhIHN0cnVjdCBrc2V0LgorLSBTZXRzIHRoZSBrc2V0IG9mIHRoZSBlbWJlZGRlZCBrb2JqZWN0IHRvIHRoZSBzdWJzeXN0ZW0ncyAKKyAgZW1iZWRkZWQga3NldC4gCisKK3N1YnN5c19zZXRfa3NldChvYmosc3Vic3lzKQorCistIEFzc3VtZXMgb2JqLT5zdWJzeXMgZXhpc3RzLCBhbmQgaXMgYSBzdHJ1Y3Qgc3Vic3lzdGVtLgorLSBTZXRzIG9iai0+c3Vic3lzLmtzZXQua29iai5rc2V0IHRvIHRoZSBzdWJzeXN0ZW0ncyBlbWJlZGRlZCBrc2V0LgorCisKKzQuNCBzeXNmcworCitzdWJzeXN0ZW1zIGFyZSByZXByZXNlbnRlZCBpbiBzeXNmcyB2aWEgdGhlaXIgZW1iZWRkZWQga29iamVjdHMuIFRoZXkKK2ZvbGxvdyB0aGUgc2FtZSBydWxlcyBhcyBwcmV2aW91c2x5IG1lbnRpb25lZCB3aXRoIG5vIGV4Y2VwdGlvbnMuIFRoZXkKK3R5cGljYWxseSByZWNlaXZlIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBpbiBzeXNmcywgZXhjZXB0IHdoZW4gdGhlaXIKK2VtYmVkZGVkIGtvYmplY3QgaXMgcGFydCBvZiBhbm90aGVyIGtzZXQsIG9yIHRoZSBwYXJlbnQgb2YgdGhlCitlbWJlZGRlZCBrb2JqZWN0IGlzIGV4cGxpY2l0bHkgc2V0LiAKKworTm90ZSB0aGF0IHRoZSBzdWJzeXN0ZW0ncyBlbWJlZGRlZCBrc2V0IG11c3QgYmUgJ2F0dGFjaGVkJyB0byB0aGUKK3N1YnN5c3RlbSBpdHNlbGYgaW4gb3JkZXIgdG8gdXNlIGl0cyByd3NlbS4gVGhpcyBpcyBkb25lIGFmdGVyCitrc2V0X2FkZCgpIGhhcyBiZWVuIGNhbGxlZC4gKE5vdCBiZWZvcmUsIGJlY2F1c2Uga3NldF9hZGQoKSB1c2VzIGl0cworc3Vic3lzdGVtIGZvciBhIGRlZmF1bHQgcGFyZW50IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZSkuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3AtbW9kZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0ZTgxMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CkBAIC0wLDAgKzEsOTUwIEBACitIb3cgdG8gY29uc2VydmUgYmF0dGVyeSBwb3dlciB1c2luZyBsYXB0b3AtbW9kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG9jdW1lbnQgQXV0aG9yOiBCYXJ0IFNhbXdlbCAoYmFydEBzYW13ZWwudGspCitEYXRlIGNyZWF0ZWQ6IEphbnVhcnkgMiwgMjAwNAorTGFzdCBtb2RpZmllZDogSnVseSAxMCwgMjAwNAorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitMYXB0b3AgbW9kZSBpcyB1c2VkIHRvIG1pbmltaXplIHRoZSB0aW1lIHRoYXQgdGhlIGhhcmQgZGlzayBuZWVkcyB0byBiZSBzcHVuIHVwLAordG8gY29uc2VydmUgYmF0dGVyeSBwb3dlciBvbiBsYXB0b3BzLiBJdCBoYXMgYmVlbiByZXBvcnRlZCB0byBjYXVzZSBzaWduaWZpY2FudAorcG93ZXIgc2F2aW5ncy4KKworQ29udGVudHMKKy0tLS0tLS0tCisKKyogSW50cm9kdWN0aW9uCisqIEluc3RhbGxhdGlvbgorKiBDYXZlYXRzCisqIFRoZSBEZXRhaWxzCisqIFRpcHMgJiBUcmlja3MKKyogQ29udHJvbCBzY3JpcHQKKyogQUNQSSBpbnRlZ3JhdGlvbgorKiBNb25pdG9yaW5nIHRvb2wKKworCitJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLQorCitUbyB1c2UgbGFwdG9wIG1vZGUsIHlvdSBkb24ndCBuZWVkIHRvIHNldCBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworb3IgYW55dGhpbmcuIFNpbXBseSBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW5jbHVkZWQgaW4gdGhpcyBkb2N1bWVudCwgYW5kCitsYXB0b3AgbW9kZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc3RhcnRlZCB3aGVuIHlvdSdyZSBvbiBiYXR0ZXJ5LiBGb3IKK3lvdXIgY29udmVuaWVuY2UsIGEgdGFyYmFsbCBjb250YWluaW5nIGFuIGluc3RhbGxlciBjYW4gYmUgZG93bmxvYWRlZCBhdDoKKworaHR0cDovL3d3dy54czRhbGwubmwvfmJzYW13ZWwvbGFwdG9wX21vZGUvdG9vbHMKKworVG8gY29uZmlndXJlIGxhcHRvcCBtb2RlLCB5b3UgbmVlZCB0byBlZGl0IHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGlzCitsb2NhdGVkIGluIC9ldGMvZGVmYXVsdC9sYXB0b3AtbW9kZSBvbiBEZWJpYW4tYmFzZWQgc3lzdGVtcywgb3IgaW4KKy9ldGMvc3lzY29uZmlnL2xhcHRvcC1tb2RlIG9uIG90aGVyIHN5c3RlbXMuCisKK1VuZm9ydHVuYXRlbHksIGF1dG9tYXRpYyBlbmFibGluZyBvZiBsYXB0b3AgbW9kZSBkb2VzIG5vdCB3b3JrIGZvcgorbGFwdG9wcyB0aGF0IGRvbid0IGhhdmUgQUNQSS4gT24gdGhvc2UgbGFwdG9wcywgeW91IG5lZWQgdG8gc3RhcnQgbGFwdG9wCittb2RlIG1hbnVhbGx5LiBUbyBzdGFydCBsYXB0b3AgbW9kZSwgcnVuICJsYXB0b3BfbW9kZSBzdGFydCIsIGFuZCB0bworc3RvcCBpdCwgcnVuICJsYXB0b3BfbW9kZSBzdG9wIi4gKE5vdGU6IFRoZSBsYXB0b3AgbW9kZSB0b29scyBwYWNrYWdlIG5vdworaGFzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBBUE0sIHlvdSBtaWdodCB3YW50IHRvIHRyeSB0aGF0IGZpcnN0LikKKworCitDYXZlYXRzCistLS0tLS0tCisKKyogVGhlIGRvd25zaWRlIG9mIGxhcHRvcCBtb2RlIGlzIHRoYXQgeW91IGhhdmUgYSBjaGFuY2Ugb2YgbG9zaW5nIHVwIHRvIDEwCisgIG1pbnV0ZXMgb2Ygd29yay4gSWYgeW91IGNhbm5vdCBhZmZvcmQgdGhpcywgZG9uJ3QgdXNlIGl0ISBUaGUgc3VwcGxpZWQgQUNQSQorICBzY3JpcHRzIGF1dG9tYXRpY2FsbHkgdHVybiBvZmYgbGFwdG9wIG1vZGUgd2hlbiB0aGUgYmF0dGVyeSBhbG1vc3QgcnVucyBvdXQsCisgIHNvIHRoYXQgeW91IHdvbid0IGxvc2UgYW55IGRhdGEgYXQgdGhlIGVuZCBvZiB5b3VyIGJhdHRlcnkgbGlmZS4KKworKiBNb3N0IGRlc2t0b3AgaGFyZCBkcml2ZXMgaGF2ZSBhIHZlcnkgbGltaXRlZCBsaWZldGltZSBtZWFzdXJlZCBpbiBzcGluZG93bgorICBjeWNsZXMsIHR5cGljYWxseSBhYm91dCA1MC4wMDAgdGltZXMgKGl0J3MgdXN1YWxseSBsaXN0ZWQgb24gdGhlIHNwZWMgc2hlZXQpLgorICBDaGVjayB5b3VyIGRyaXZlJ3MgcmF0aW5nLCBhbmQgZG9uJ3Qgd2VhciBkb3duIHlvdXIgZHJpdmUncyBsaWZldGltZSBpZiB5b3UKKyAgZG9uJ3QgbmVlZCB0by4KKworKiBJZiB5b3UgbW91bnQgc29tZSBvZiB5b3VyIGV4dDMvcmVpc2VyZnMgZmlsZXN5c3RlbXMgd2l0aCB0aGUgLW4gb3B0aW9uLCB0aGVuCisgIHRoZSBjb250cm9sIHNjcmlwdCB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlbW91bnQgdGhlbSBjb3JyZWN0bHkuIFlvdSBtdXN0IHNldAorICBET19SRU1PVU5UUz0wIGluIHRoZSBjb250cm9sIHNjcmlwdCwgb3RoZXJ3aXNlIGl0IHdpbGwgcmVtb3VudCB0aGVtIHdpdGggdGhlCisgIHdyb25nIG9wdGlvbnMgLS0gb3IgaXQgd2lsbCBmYWlsIGJlY2F1c2UgaXQgY2Fubm90IHdyaXRlIHRvIC9ldGMvbXRhYi4KKworKiBJZiB5b3UgaGF2ZSB5b3VyIGZpbGVzeXN0ZW1zIGxpc3RlZCBhcyB0eXBlICJhdXRvIiBpbiBmc3RhYiwgbGlrZSBJIGRpZCwgdGhlbgorICB0aGUgY29udHJvbCBzY3JpcHQgd2lsbCBub3QgcmVjb2duaXplIHRoZW0gYXMgZmlsZXN5c3RlbXMgdGhhdCBuZWVkIHJlbW91bnRpbmcuCisgIFlvdSBtdXN0IGxpc3QgdGhlIGZpbGVzeXN0ZW1zIHdpdGggdGhlaXIgdHJ1ZSB0eXBlIGluc3RlYWQuCisKKyogSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdGhhdCBzb21lIHZlcnNpb25zIG9mIHRoZSBtdXR0IG1haWwgY2xpZW50IHVzZSBmaWxlIGFjY2VzcworICB0aW1lcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZvbGRlciBjb250YWlucyBuZXcgbWFpbC4gSWYgeW91IHVzZSBtdXR0IGFuZAorICBleHBlcmllbmNlIHRoaXMsIHlvdSBtdXN0IGRpc2FibGUgdGhlIG5vYXRpbWUgcmVtb3VudGluZyBieSBzZXR0aW5nIHRoZSBvcHRpb24KKyAgRE9fUkVNT1VOVF9OT0FUSU1FIHRvIDAgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworCitUaGUgRGV0YWlscworLS0tLS0tLS0tLS0KKworTGFwdG9wIG1vZGUgaXMgY29udHJvbGxlZCBieSB0aGUga25vYiAvcHJvYy9zeXMvdm0vbGFwdG9wX21vZGUuIFRoaXMga25vYiBpcworcHJlc2VudCBmb3IgYWxsIGtlcm5lbHMgdGhhdCBoYXZlIHRoZSBsYXB0b3AgbW9kZSBwYXRjaCwgcmVnYXJkbGVzcyBvZiBhbnkKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucy4gV2hlbiB0aGUga25vYiBpcyBzZXQsIGFueSBwaHlzaWNhbCBkaXNrIEkvTyAodGhhdCBtaWdodAoraGF2ZSBjYXVzZWQgdGhlIGhhcmQgZGlzayB0byBzcGluIHVwKSBjYXVzZXMgTGludXggdG8gZmx1c2ggYWxsIGRpcnR5IGJsb2Nrcy4gVGhlCityZXN1bHQgb2YgdGhpcyBpcyB0aGF0IGFmdGVyIGEgZGlzayBoYXMgc3B1biBkb3duLCBpdCB3aWxsIG5vdCBiZSBzcHVuIHVwCithbnltb3JlIHRvIHdyaXRlIGRpcnR5IGJsb2NrcywgYmVjYXVzZSB0aG9zZSBibG9ja3MgaGFkIGFscmVhZHkgYmVlbiB3cml0dGVuCitpbW1lZGlhdGVseSBhZnRlciB0aGUgbW9zdCByZWNlbnQgcmVhZCBvcGVyYXRpb24uIFRoZSB2YWx1ZSBvZiB0aGUgbGFwdG9wX21vZGUKK2tub2IgZGV0ZXJtaW5lcyB0aGUgdGltZSBiZXR3ZWVuIHRoZSBvY2N1cnJlbmNlIG9mIGRpc2sgSS9PIGFuZCB3aGVuIHRoZSBmbHVzaAoraXMgdHJpZ2dlcmVkLiBBIHNlbnNpYmxlIHZhbHVlIGZvciB0aGUga25vYiBpcyA1IHNlY29uZHMuIFNldHRpbmcgdGhlIGtub2IgdG8KKzAgZGlzYWJsZXMgbGFwdG9wIG1vZGUuCisKK1RvIGluY3JlYXNlIHRoZSBlZmZlY3RpdmVuZXNzIG9mIHRoZSBsYXB0b3BfbW9kZSBzdHJhdGVneSwgdGhlIGxhcHRvcF9tb2RlCitjb250cm9sIHNjcmlwdCBpbmNyZWFzZXMgZGlydHlfZXhwaXJlX2NlbnRpc2VjcyBhbmQgZGlydHlfd3JpdGViYWNrX2NlbnRpc2VjcyBpbgorL3Byb2Mvc3lzL3ZtIHRvIGFib3V0IDEwIG1pbnV0ZXMgKGJ5IGRlZmF1bHQpLCB3aGljaCBtZWFucyB0aGF0IHBhZ2VzIHRoYXQgYXJlCitkaXJ0aWVkIGFyZSBub3QgZm9yY2VkIHRvIGJlIHdyaXR0ZW4gdG8gZGlzayBhcyBvZnRlbi4gVGhlIGNvbnRyb2wgc2NyaXB0IGFsc28KK2NoYW5nZXMgdGhlIGRpcnR5IGJhY2tncm91bmQgcmF0aW8sIHNvIHRoYXQgYmFja2dyb3VuZCB3cml0ZWJhY2sgb2YgZGlydHkgcGFnZXMKK2lzIG5vdCBkb25lIGFueW1vcmUuIENvbWJpbmVkIHdpdGggYSBoaWdoZXIgY29tbWl0IHZhbHVlIChhbHNvIDEwIG1pbnV0ZXMpIGZvcgorZXh0MyBvciBSZWlzZXJGUyBmaWxlc3lzdGVtcyAoYWxzbyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvbnRyb2wgc2NyaXB0KSwKK3RoaXMgcmVzdWx0cyBpbiBjb25jZW50cmF0aW9uIG9mIGRpc2sgYWN0aXZpdHkgaW4gYSBzbWFsbCB0aW1lIGludGVydmFsIHdoaWNoCitvY2N1cnMgb25seSBvbmNlIGV2ZXJ5IDEwIG1pbnV0ZXMsIG9yIHdoZW5ldmVyIHRoZSBkaXNrIGlzIGZvcmNlZCB0byBzcGluIHVwIGJ5CithIGNhY2hlIG1pc3MuIFRoZSBkaXNrIGNhbiB0aGVuIGJlIHNwdW4gZG93biBpbiB0aGUgcGVyaW9kcyBvZiBpbmFjdGl2aXR5LgorCitJZiB5b3Ugd2FudCB0byBmaW5kIG91dCB3aGljaCBwcm9jZXNzIGNhdXNlZCB0aGUgZGlzayB0byBzcGluIHVwLCB5b3UgY2FuCitnYXRoZXIgaW5mb3JtYXRpb24gYnkgc2V0dGluZyB0aGUgZmxhZyAvcHJvYy9zeXMvdm0vYmxvY2tfZHVtcC4gV2hlbiB0aGlzIGZsYWcKK2lzIHNldCwgTGludXggcmVwb3J0cyBhbGwgZGlzayByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIHRoYXQgdGFrZSBwbGFjZSwgYW5kCithbGwgYmxvY2sgZGlydHlpbmdzIGRvbmUgdG8gZmlsZXMuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZGVidWcgd2h5IGEgZGlzaworbmVlZHMgdG8gc3BpbiB1cCwgYW5kIHRvIGluY3JlYXNlIGJhdHRlcnkgbGlmZSBldmVuIG1vcmUuIFRoZSBvdXRwdXQgb2YKK2Jsb2NrX2R1bXAgaXMgd3JpdHRlbiB0byB0aGUga2VybmVsIG91dHB1dCwgYW5kIGl0IGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcKKyJkbWVzZyIuIFdoZW4geW91IHVzZSBibG9ja19kdW1wIGFuZCB5b3VyIGtlcm5lbCBsb2dnaW5nIGxldmVsIGFsc28gaW5jbHVkZXMKK2tlcm5lbCBkZWJ1Z2dpbmcgbWVzc2FnZXMsIHlvdSBwcm9iYWJseSB3YW50IHRvIHR1cm4gb2ZmIGtsb2dkLCBvdGhlcndpc2UKK3RoZSBvdXRwdXQgb2YgYmxvY2tfZHVtcCB3aWxsIGJlIGxvZ2dlZCwgY2F1c2luZyBkaXNrIGFjdGl2aXR5IHRoYXQgaXMgbm90Citub3JtYWxseSB0aGVyZS4KKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1RoZSBsYXB0b3AgbW9kZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgbG9jYXRlZCBpbiAvZXRjL2RlZmF1bHQvbGFwdG9wLW1vZGUgb24KK0RlYmlhbi1iYXNlZCBzeXN0ZW1zLCBvciBpbiAvZXRjL3N5c2NvbmZpZy9sYXB0b3AtbW9kZSBvbiBvdGhlciBzeXN0ZW1zLiBJdAorY29udGFpbnMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCitNQVhfQUdFOgorCitNYXhpbXVtIHRpbWUsIGluIHNlY29uZHMsIG9mIGhhcmQgZHJpdmUgc3BpbmRvd24gdGltZSB0aGF0IHlvdSBhcmUKK2NvbmZvcnRhYmxlIHdpdGguIFdvcnN0IGNhc2UsIGl0J3MgcG9zc2libGUgdGhhdCB5b3UgY291bGQgbG9zZSB0aGlzCithbW91bnQgb2Ygd29yayBpZiB5b3VyIGJhdHRlcnkgZmFpbHMgd2hpbGUgeW91J3JlIGluIGxhcHRvcCBtb2RlLgorCitNSU5JTVVNX0JBVFRFUllfTUlOVVRFUzoKKworQXV0b21hdGljYWxseSBkaXNhYmxlIGxhcHRvcCBtb2RlIGlmIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIG1pbnV0ZXMgb2YKK2JhdHRlcnkgcG93ZXIgaXMgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIERlZmF1bHQgaXMgMTAgbWludXRlcy4KKworQUNfSEQvQkFUVF9IRDoKKworVGhlIGlkbGUgdGltZW91dCB0aGF0IHNob3VsZCBiZSBzZXQgb24geW91ciBoYXJkIGRyaXZlIHdoZW4gbGFwdG9wIG1vZGUKK2lzIGFjdGl2ZSAoQkFUVF9IRCkgYW5kIHdoZW4gaXQgaXMgbm90IGFjdGl2ZSAoQUNfSEQpLiBUaGUgZGVmYXVsdHMgYXJlCisyMCBzZWNvbmRzICh2YWx1ZSA0KSBmb3IgQkFUVF9IRCAgYW5kIDIgaG91cnMgKHZhbHVlIDI0NCkgZm9yIEFDX0hELiBUaGUKK3Bvc3NpYmxlIHZhbHVlcyBhcmUgdGhvc2UgbGlzdGVkIGluIHRoZSBtYW51YWwgcGFnZSBmb3IgImhkcGFybSIgZm9yIHRoZQorIi1TIiBvcHRpb24uCisKK0hEOgorCitUaGUgZGV2aWNlcyBmb3Igd2hpY2ggdGhlIHNwaW5kb3duIHRpbWVvdXQgc2hvdWxkIGJlIGFkanVzdGVkIGJ5IGxhcHRvcCBtb2RlLgorRGVmYXVsdCBpcyAvZGV2L2hkYS4gSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgZGV2aWNlcywgc2VwYXJhdGUgdGhlbSBieSBhIHNwYWNlLgorCitSRUFEQUhFQUQ6CisKK0Rpc2sgcmVhZGFoZWFkLCBpbiA1MTItYnl0ZSBzZWN0b3JzLCB3aGlsZSBsYXB0b3AgbW9kZSBpcyBhY3RpdmUuIEEgbGFyZ2UKK3JlYWRhaGVhZCBjYW4gcHJldmVudCBkaXNrIGFjY2Vzc2VzIGZvciB0aGluZ3MgbGlrZSBleGVjdXRhYmxlIHBhZ2VzICh3aGljaCBhcmUKK2xvYWRlZCBvbiBkZW1hbmQgd2hpbGUgdGhlIGFwcGxpY2F0aW9uIGV4ZWN1dGVzKSBhbmQgc2VxdWVudGlhbGx5IGFjY2Vzc2VkIGRhdGEKKyhNUDNzKS4KKworRE9fUkVNT1VOVFM6CisKK1RoZSBjb250cm9sIHNjcmlwdCBhdXRvbWF0aWNhbGx5IHJlbW91bnRzIGFueSBtb3VudGVkIGpvdXJuYWxlZCBmaWxlc3lzdGVtcword2l0aCBhcHByb3JpYXRlIGNvbW1pdCBpbnRlcnZhbCBvcHRpb25zLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byAwLCB0aGlzCitmZWF0dXJlIGlzIGRpc2FibGVkLgorCitET19SRU1PVU5UX05PQVRJTUU6CisKK1doZW4gcmVtb3VudGluZywgc2hvdWxkIHRoZSBmaWxlc3lzdGVtcyBiZSByZW1vdW50ZWQgd2l0aCB0aGUgbm9hdGltZSBvcHRpb24/CitOb3JtYWxseSwgdGhpcyBpcyBzZXQgdG8gIjEiIChlbmFibGVkKSwgYnV0IHRoZXJlIG1heSBiZSBwcm9ncmFtcyB0aGF0IHJlcXVpcmUKK2FjY2VzcyB0aW1lIHJlY29yZGluZy4KKworRElSVFlfUkFUSU86CisKK1RoZSBwZXJjZW50YWdlIG9mIG1lbW9yeSB0aGF0IGlzIGFsbG93ZWQgdG8gY29udGFpbiAiZGlydHkiIG9yIHVuc2F2ZWQgZGF0YQorYmVmb3JlIGEgd3JpdGViYWNrIGlzIGZvcmNlZCwgd2hpbGUgbGFwdG9wIG1vZGUgaXMgYWN0aXZlLiBDb3JyZXNwb25kcyB0bwordGhlIC9wcm9jL3N5cy92bS9kaXJ0eV9yYXRpbyBzeXNjdGwuCisKK0RJUlRZX0JBQ0tHUk9VTkRfUkFUSU86CisKK1RoZSBwZXJjZW50YWdlIG9mIG1lbW9yeSB0aGF0IGlzIGFsbG93ZWQgdG8gY29udGFpbiAiZGlydHkiIG9yIHVuc2F2ZWQgZGF0YQorYWZ0ZXIgYSBmb3JjZWQgd3JpdGViYWNrIGlzIGRvbmUgZHVlIHRvIGFuIGV4Y2VlZGluZyBvZiBESVJUWV9SQVRJTy4gU2V0Cit0aGlzIG5pY2UgYW5kIGxvdy4gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgL3Byb2Mvc3lzL3ZtL2RpcnR5X2JhY2tncm91bmRfcmF0aW8KK3N5c2N0bC4KKworTm90ZSB0aGF0IHRoZSBiZWhhdmlvdXIgb2YgZGlydHlfYmFja2dyb3VuZF9yYXRpbyBpcyBxdWl0ZSBkaWZmZXJlbnQKK3doZW4gbGFwdG9wIG1vZGUgaXMgYWN0aXZlIGFuZCB3aGVuIGl0IGlzbid0LiBXaGVuIGxhcHRvcCBtb2RlIGlzIGluYWN0aXZlLAorZGlydHlfYmFja2dyb3VuZF9yYXRpbyBpcyB0aGUgdGhyZXNob2xkIHBlcmNlbnRhZ2UgYXQgd2hpY2ggYmFja2dyb3VuZCB3cml0ZW91dHMKK3N0YXJ0IHRha2luZyBwbGFjZS4gV2hlbiBsYXB0b3AgbW9kZSBpcyBhY3RpdmUsIGhvd2V2ZXIsIGJhY2tncm91bmQgd3JpdGVvdXRzCithcmUgZGlzYWJsZWQsIGFuZCB0aGUgZGlydHlfYmFja2dyb3VuZF9yYXRpbyBvbmx5IGRldGVybWluZXMgaG93IG11Y2ggd3JpdGViYWNrCitpcyBkb25lIHdoZW4gZGlydHlfcmF0aW8gaXMgcmVhY2hlZC4KKworRE9fQ1BVOgorCitFbmFibGUgQ1BVIGZyZXF1ZW5jeSBzY2FsaW5nIHdoZW4gaW4gbGFwdG9wIG1vZGUuIChSZXF1aXJlcyBDUFVGcmVxIHRvIGJlIHNldHVwLgorU2VlIERvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQgZm9yIG1vcmUgaW5mby4gRGlzYWJsZWQgYnkgZGVmYXVsdC4pCisKK0NQVV9NQVhGUkVROgorCitXaGVuIG9uIGJhdHRlcnksIHdoYXQgaXMgdGhlIG1heGltdW0gQ1BVIHNwZWVkIHRoYXQgdGhlIHN5c3RlbSBzaG91bGQgdXNlPyBMZWdhbAordmFsdWVzIGFyZSAic2xvd2VzdCIgZm9yIHRoZSBzbG93ZXN0IHNwZWVkIHRoYXQgeW91ciBDUFUgaXMgYWJsZSB0byBvcGVyYXRlIGF0LAorb3IgYSB2YWx1ZSBsaXN0ZWQgaW4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzLgorCisKK1RpcHMgJiBUcmlja3MKKy0tLS0tLS0tLS0tLS0KKworKiBCYXJ0ZWsgS2FuaWEgcmVwb3J0cyBnZXR0aW5nIHVwIHRvIDUwIG1pbnV0ZXMgb2YgZXh0cmEgYmF0dGVyeSBsaWZlIChvbiB0b3AKKyAgb2YgaGlzIHJlZ3VsYXIgMyB0byAzLjUgaG91cnMpIHVzaW5nIGEgc3BpbmRvd24gdGltZSBvZiA1IHNlY29uZHMgKEJBVFRfSEQ9MSkuCisKKyogWW91IGNhbiBzcGluIGRvd24gdGhlIGRpc2sgd2hpbGUgcGxheWluZyBNUDMsIGJ5IHNldHRpbmcgZGlzayByZWFkYWhlYWQKKyAgdG8gOE1CIChSRUFEQUhFQUQ9MTYzODQpLiBFZmZlY3RpdmVseSwgdGhlIGRpc2sgd2lsbCByZWFkIGEgY29tcGxldGUgTVAzIGF0CisgIG9uY2UsIGFuZCB3aWxsIHRoZW4gc3BpbiBkb3duIHdoaWxlIHRoZSBNUDMgaXMgcGxheWluZy4gKFRoYW5rcyB0byBCYXJ0ZWsKKyAgS2FuaWEuKQorCisqIERyZXcgU2NvdHQgRGFuaWVscyBvYnNlcnZlZDogIkkgZG9uJ3Qga25vdyB3aHksIGJ1dCB3aGVuIEkgZGVjcmVhc2UgdGhlIG51bWJlcgorICBvZiBjb2xvdXJzIHRoYXQgbXkgZGlzcGxheSB1c2VzIGl0IGNvbnN1bWVzIGxlc3MgYmF0dGVyeSBwb3dlci4gSSd2ZSBzZWVuCisgIHRoaXMgb24gcG93ZXJib29rcyB0b28uIEkgaG9wZSB0aGF0IHRoaXMgaXMgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0aGF0CisgIG1pZ2h0IGJlIHVzZWZ1bCB0byB0aGUgTGFwdG9wIE1vZGUgcGF0Y2ggb3IgaXQncyB1c2Vycy4iCisKKyogSW4gc3lzbG9nLmNvbmYsIHlvdSBjYW4gcHJlZml4IGVudHJpZXMgd2l0aCBhIGRhc2ggYGAtJycgdG8gb21pdCBzeW5jaW5nIHRoZQorICBmaWxlIGFmdGVyIGV2ZXJ5IGxvZ2dpbmcuIFdoZW4geW91J3JlIHVzaW5nIGxhcHRvcC1tb2RlIGFuZCB5b3VyIGRpc2sgZG9lc24ndAorICBzcGluIGRvd24sIHRoaXMgaXMgYSBsaWtlbHkgY3VscHJpdC4KKworKiBSaWNoYXJkIEF0dGVyZXIgb2JzZXJ2ZWQgdGhhdCBsYXB0b3AgbW9kZSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBub2ZsdXNoZAorICAoaHR0cDovL25vZmx1c2hkLnNvdXJjZWZvcmdlLm5ldC8pLCBpdCBzZWVtcyB0aGF0IG5vZmx1c2hkIHByZXZlbnRzIGxhcHRvcC1tb2RlCisgIGZyb20gZG9pbmcgaXRzIHRoaW5nLgorCisqIElmIHlvdSdyZSB3b3JyaWVkIGFib3V0IHlvdXIgZGF0YSwgeW91IG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIgdXNpbmcgYSBVU0IKKyAgbWVtb3J5IHN0aWNrIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgYXMgYSAid29ya2luZyBhcmVhIi4gKEJlIGF3YXJlIHRob3VnaAorICB0aGF0IGZsYXNoIG1lbW9yeSBjYW4gb25seSBoYW5kbGUgYSBsaW1pdGVkIG51bWJlciBvZiB3cml0ZXMsIGFuZCBvdmVydXNlCisgIG1heSB3ZWFyIG91dCB5b3VyIG1lbW9yeSBzdGljayBwcmV0dHkgcXVpY2tseS4gRG8gX25vdF8gdXNlIGpvdXJuYWxsaW5nCisgIGZpbGVzeXN0ZW1zIG9uIGZsYXNoIG1lbW9yeSBzdGlja3MuKQorCisKK0NvbmZpZ3VyYXRpb24gZmlsZSBmb3IgY29udHJvbCBhbmQgQUNQSSBiYXR0ZXJ5IHNjcmlwdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBhbGxvd3MgdGhlIHR1bmFibGVzIHRvIGJlIGNoYW5nZWQgZm9yIHRoZSBzY3JpcHRzIHZpYSBhbiBleHRlcm5hbAorY29uZmlndXJhdGlvbiBmaWxlCisKK0l0IHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgL2V0Yy9kZWZhdWx0L2xhcHRvcC1tb2RlIG9uIERlYmlhbiwgYW5kIGFzCisvZXRjL3N5c2NvbmZpZy9sYXB0b3AtbW9kZSBvbiBSZWQgSGF0LCBTVVNFLCBNYW5kcmFrZSwgYW5kIG90aGVyIHdvcmstYWxpa2VzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLUNPTkZJRyBGSUxFIEJFR0lOLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYXhpbXVtIHRpbWUsIGluIHNlY29uZHMsIG9mIGhhcmQgZHJpdmUgc3BpbmRvd24gdGltZSB0aGF0IHlvdSBhcmUKKyMgY29uZm9ydGFibGUgd2l0aC4gV29yc3QgY2FzZSwgaXQncyBwb3NzaWJsZSB0aGF0IHlvdSBjb3VsZCBsb3NlIHRoaXMKKyMgYW1vdW50IG9mIHdvcmsgaWYgeW91ciBiYXR0ZXJ5IGZhaWxzIHlvdSB3aGlsZSBpbiBsYXB0b3AgbW9kZS4KKyNNQVhfQUdFPTYwMAorCisjIEF1dG9tYXRpY2FsbHkgZGlzYWJsZSBsYXB0b3AgbW9kZSB3aGVuIHRoZSBudW1iZXIgb2YgbWludXRlcyBvZiBiYXR0ZXJ5CisjIHRoYXQgeW91IGhhdmUgbGVmdCBnb2VzIGJlbG93IHRoaXMgdGhyZXNob2xkLgorTUlOSU1VTV9CQVRURVJZX01JTlVURVM9MTAKKworIyBSZWFkLWFoZWFkLCBpbiA1MTItYnl0ZSBzZWN0b3JzLiBZb3UgY2FuIHNwaW4gZG93biB0aGUgZGlzayB3aGlsZSBwbGF5aW5nIE1QMy9PR0cKKyMgYnkgc2V0dGluZyB0aGUgZGlzayByZWFkYWhlYWQgdG8gOE1CIChSRUFEQUhFQUQ9MTYzODQpLiBFZmZlY3RpdmVseSwgdGhlIGRpc2sKKyMgd2lsbCByZWFkIGEgY29tcGxldGUgTVAzIGF0IG9uY2UsIGFuZCB3aWxsIHRoZW4gc3BpbiBkb3duIHdoaWxlIHRoZSBNUDMvT0dHIGlzCisjIHBsYXlpbmcuCisjUkVBREFIRUFEPTQwOTYKKworIyBTaGFsbCB3ZSByZW1vdW50IGpvdXJuYWxlZCBmcy4gd2l0aCBhcHByb3ByaWF0ZSBjb21taXQgaW50ZXJ2YWw/ICgxPXllcykKKyNET19SRU1PVU5UUz0xCisKKyMgQW5kIHNoYWxsIHdlIGFkZCB0aGUgIm5vYXRpbWUiIG9wdGlvbiB0byB0aGF0IGFzIHdlbGw/ICgxPXllcykKKyNET19SRU1PVU5UX05PQVRJTUU9MQorCisjIERpcnR5IHN5bmNocm9ub3VzIHJhdGlvLiAgQXQgdGhpcyBwZXJjZW50YWdlIG9mIGRpcnR5IHBhZ2VzIHRoZSBwcm9jZXNzCisjIHdoaWNoCisjIGNhbGxzIHdyaXRlKCkgZG9lcyBpdHMgb3duIHdyaXRlYmFjaworI0RJUlRZX1JBVElPPTQwCisKKyMKKyMgQWxsb3dlZCBkaXJ0eSBiYWNrZ3JvdW5kIHJhdGlvLCBpbiBwZXJjZW50LiAgT25jZSBESVJUWV9SQVRJTyBoYXMgYmVlbgorIyBleGNlZWRlZCwgdGhlIGtlcm5lbCB3aWxsIHdha2UgcGRmbHVzaCB3aGljaCB3aWxsIHRoZW4gcmVkdWNlIHRoZSBhbW91bnQKKyMgb2YgZGlydHkgbWVtb3J5IHRvIGRpcnR5X2JhY2tncm91bmRfcmF0aW8uICBTZXQgdGhpcyBuaWNlIGFuZCBsb3csIHNvIG9uY2UKKyMgc29tZSB3cml0ZW91dCBoYXMgY29tbWVuY2VkLCB3ZSBkbyBhIGxvdCBvZiBpdC4KKyMKKyNESVJUWV9CQUNLR1JPVU5EX1JBVElPPTUKKworIyBrZXJuZWwgZGVmYXVsdCBkaXJ0eSBidWZmZXIgYWdlCisjREVGX0FHRT0zMAorI0RFRl9VUERBVEU9NQorI0RFRl9ESVJUWV9CQUNLR1JPVU5EX1JBVElPPTEwCisjREVGX0RJUlRZX1JBVElPPTQwCisjREVGX1hGU19BR0VfQlVGRkVSPTE1CisjREVGX1hGU19TWU5DX0lOVEVSVkFMPTMwCisjREVGX1hGU19CVUZEX0lOVEVSVkFMPTEKKworIyBUaGlzIG11c3QgYmUgYWRqdXN0ZWQgbWFudWFsbHkgdG8gdGhlIHZhbHVlIG9mIEhaIGluIHRoZSBydW5uaW5nIGtlcm5lbAorIyBvbiAyLjQsIHVudGlsIHRoZSBYRlMgcGVvcGxlIGNoYW5nZSB0aGVpciAyLjQgZXh0ZXJuYWwgaW50ZXJmYWNlcyB0byB3b3JrIGluCisjIGNlbnRpc2Vjcy4gVGhpcyBjYW4gYmUgYXV0b21hdGVkLCBidXQgaXQncyBhIHdvcmsgaW4gcHJvZ3Jlc3MgdGhhdCBzdGlsbAorIyBuZWVkcyMgc29tZSBmaXhlcy4gT24gMi42IGtlcm5lbHMsIFhGUyB1c2VzIFVTRVJfSFogaW5zdGVhZCBvZiBIWiBmb3IKKyMgZXh0ZXJuYWwgaW50ZXJmYWNlcywgYW5kIHRoYXQgaXMgY3VycmVudGx5IGFsd2F5cyBzZXQgdG8gMTAwLiBTbyB5b3UgZG9uJ3QKKyMgbmVlZCB0byBjaGFuZ2UgdGhpcyBvbiAyLjYuCisjWEZTX0haPTEwMAorCisjIFNob3VsZCB0aGUgbWF4aW11bSBDUFUgZnJlcXVlbmN5IGJlIGFkanVzdGVkIGRvd24gd2hpbGUgb24gYmF0dGVyeT8KKyMgUmVxdWlyZXMgQ1BVRnJlcSB0byBiZSBzZXR1cC4KKyMgU2VlIERvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQgZm9yIG1vcmUgaW5mbworI0RPX0NQVT0wCisKKyMgV2hlbiBvbiBiYXR0ZXJ5IHdoYXQgaXMgdGhlIG1heGltdW0gQ1BVIHNwZWVkIHRoYXQgdGhlIHN5c3RlbSBzaG91bGQKKyMgdXNlPyBMZWdhbCB2YWx1ZXMgYXJlICJzbG93ZXN0IiBmb3IgdGhlIHNsb3dlc3Qgc3BlZWQgdGhhdCB5b3VyCisjIENQVSBpcyBhYmxlIHRvIG9wZXJhdGUgYXQsIG9yIGEgdmFsdWUgbGlzdGVkIGluOgorIyAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvc2NhbGluZ19hdmFpbGFibGVfZnJlcXVlbmNpZXMKKyMgT25seSBhcHBsaWNhYmxlIGlmIERPX0NQVT0xLgorI0NQVV9NQVhGUkVRPXNsb3dlc3QKKworIyBJZGxlIHRpbWVvdXQgZm9yIHlvdXIgaGFyZCBkcml2ZSAobWFuIGhkcGFybSBmb3IgdmFsaWQgdmFsdWVzLCAtUyBvcHRpb24pCisjIERlZmF1bHQgaXMgMiBob3VycyBvbiBBQyAoQUNfSEQ9MjQ0KSBhbmQgMjAgc2Vjb25kcyBmb3IgYmF0dGVyeSAoQkFUVF9IRD00KS4KKyNBQ19IRD0yNDQKKyNCQVRUX0hEPTQKKworIyBUaGUgZHJpdmVzIGZvciB3aGljaCB0byBhZGp1c3QgdGhlIGlkbGUgdGltZW91dC4gU2VwYXJhdGUgdGhlbSBieSBhIHNwYWNlLAorIyBlLmcuIEhEPSIvZGV2L2hkYSAvZGV2L2hkYiIuCisjSEQ9Ii9kZXYvaGRhIgorCisjIFNldCB0aGUgc3BpbmRvd24gdGltZW91dCBvbiBhIGhhcmQgZHJpdmU/CisjRE9fSEQ9MQorCistLS0tLS0tLS0tLS0tLS0tLS0tLUNPTkZJRyBGSUxFIEVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0NvbnRyb2wgc2NyaXB0CistLS0tLS0tLS0tLS0tLQorCitQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgY29udHJvbCBzY3JpcHQgd29ya3MgZm9yIHRoZSBMaW51eCAyLjQgYW5kIDIuNiBzZXJpZXMgKHRoYW5rcwordG8gS2lrbyBQaXJpcykuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tQ09OVFJPTCBTQ1JJUFQgQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIS9iaW4vYmFzaAorCisjIHN0YXJ0IG9yIHN0b3AgbGFwdG9wX21vZGUsIGJlc3QgcnVuIGJ5IGEgcG93ZXIgbWFuYWdlbWVudCBkYWVtb24gd2hlbgorIyBhYyBnZXRzIGNvbm5lY3RlZC9kaXNjb25uZWN0ZWQgZnJvbSBhIGxhcHRvcAorIworIyBpbnN0YWxsIGFzIC9zYmluL2xhcHRvcF9tb2RlCisjCisjIENvbnRyaWJ1dG9ycyB0byB0aGlzIHNjcmlwdDogICBLaWtvIFBpcmlzCisjCQkJCSBCYXJ0IFNhbXdlbAorIwkJCQkgTWljaGEgRmVpZ2luCisjCQkJCSBBbmRyZXcgTW9ydG9uCisjCQkJCSBIZXJ2ZSBFeWNoZW5uZQorIwkJCQkgRGF4IEtlbHNvbgorIworIyBPcmlnaW5hbCBMaW51eCAyLjQgdmVyc2lvbiBieTogSmVucyBBeGJvZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFNvdXJjZSBjb25maWcKK2lmIFsgLWYgL2V0Yy9kZWZhdWx0L2xhcHRvcC1tb2RlIF0gOyB0aGVuCisJIyBEZWJpYW4KKwkuIC9ldGMvZGVmYXVsdC9sYXB0b3AtbW9kZQorZWxpZiBbIC1mIC9ldGMvc3lzY29uZmlnL2xhcHRvcC1tb2RlIF0gOyB0aGVuCisJIyBPdGhlcnMKKyAgICAgICAgLiAvZXRjL3N5c2NvbmZpZy9sYXB0b3AtbW9kZQorZmkKKworIyBEb24ndCByYWlzZSBhbiBlcnJvciBpZiB0aGUgY29uZmlnIGZpbGUgaXMgaW5jb21wbGV0ZQorIyBzZXQgZGVmYXVsdHMgaW5zdGVhZDoKKworIyBNYXhpbXVtIHRpbWUsIGluIHNlY29uZHMsIG9mIGhhcmQgZHJpdmUgc3BpbmRvd24gdGltZSB0aGF0IHlvdSBhcmUKKyMgY29uZm9ydGFibGUgd2l0aC4gV29yc3QgY2FzZSwgaXQncyBwb3NzaWJsZSB0aGF0IHlvdSBjb3VsZCBsb3NlIHRoaXMKKyMgYW1vdW50IG9mIHdvcmsgaWYgeW91ciBiYXR0ZXJ5IGZhaWxzIHlvdSB3aGlsZSBpbiBsYXB0b3AgbW9kZS4KK01BWF9BR0U9JHtNQVhfQUdFOi0nNjAwJ30KKworIyBSZWFkLWFoZWFkLCBpbiBraWxvYnl0ZXMKK1JFQURBSEVBRD0ke1JFQURBSEVBRDotJzQwOTYnfQorCisjIFNoYWxsIHdlIHJlbW91bnQgam91cm5hbGVkIGZzLiB3aXRoIGFwcHJvcGlhdGUgY29tbWl0IGludGVydmFsPyAoMT15ZXMpCitET19SRU1PVU5UUz0ke0RPX1JFTU9VTlRTOi0nMSd9CisKKyMgQW5kIHNoYWxsIHdlIGFkZCB0aGUgIm5vYXRpbWUiIG9wdGlvbiB0byB0aGF0IGFzIHdlbGw/ICgxPXllcykKK0RPX1JFTU9VTlRfTk9BVElNRT0ke0RPX1JFTU9VTlRfTk9BVElNRTotJzEnfQorCisjIFNoYWxsIHdlIGFkanVzdCB0aGUgaWRsZSB0aW1lb3V0IG9uIGEgaGFyZCBkcml2ZT8KK0RPX0hEPSR7RE9fSEQ6LScxJ30KKworIyBBZGp1c3QgaWRsZSB0aW1lb3V0IG9uIHdoaWNoIGhhcmQgZHJpdmU/CitIRD0iJHtIRDotJy9kZXYvaGRhJ30iCisKKyMgc3BpbmRvd24gdGltZSBmb3IgSEQgKGhkcGFybSAtUyB2YWx1ZXMpCitBQ19IRD0ke0FDX0hEOi0nMjQ0J30KK0JBVFRfSEQ9JHtCQVRUX0hEOi0nNCd9CisKKyMgRGlydHkgc3luY2hyb25vdXMgcmF0aW8uICBBdCB0aGlzIHBlcmNlbnRhZ2Ugb2YgZGlydHkgcGFnZXMgdGhlIHByb2Nlc3Mgd2hpY2gKKyMgY2FsbHMgd3JpdGUoKSBkb2VzIGl0cyBvd24gd3JpdGViYWNrCitESVJUWV9SQVRJTz0ke0RJUlRZX1JBVElPOi0nNDAnfQorCisjIGNwdSBmcmVxdWVuY3kgc2NhbGluZworIyBTZWUgRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dCBmb3IgbW9yZSBpbmZvCitET19DUFU9JHtDUFVfTUFOQUdFOi0nMCd9CitDUFVfTUFYRlJFUT0ke0NQVV9NQVhGUkVROi0nc2xvd2VzdCd9CisKKyMKKyMgQWxsb3dlZCBkaXJ0eSBiYWNrZ3JvdW5kIHJhdGlvLCBpbiBwZXJjZW50LiAgT25jZSBESVJUWV9SQVRJTyBoYXMgYmVlbgorIyBleGNlZWRlZCwgdGhlIGtlcm5lbCB3aWxsIHdha2UgcGRmbHVzaCB3aGljaCB3aWxsIHRoZW4gcmVkdWNlIHRoZSBhbW91bnQKKyMgb2YgZGlydHkgbWVtb3J5IHRvIGRpcnR5X2JhY2tncm91bmRfcmF0aW8uICBTZXQgdGhpcyBuaWNlIGFuZCBsb3csIHNvIG9uY2UKKyMgc29tZSB3cml0ZW91dCBoYXMgY29tbWVuY2VkLCB3ZSBkbyBhIGxvdCBvZiBpdC4KKyMKK0RJUlRZX0JBQ0tHUk9VTkRfUkFUSU89JHtESVJUWV9CQUNLR1JPVU5EX1JBVElPOi0nNSd9CisKKyMga2VybmVsIGRlZmF1bHQgZGlydHkgYnVmZmVyIGFnZQorREVGX0FHRT0ke0RFRl9BR0U6LSczMCd9CitERUZfVVBEQVRFPSR7REVGX1VQREFURTotJzUnfQorREVGX0RJUlRZX0JBQ0tHUk9VTkRfUkFUSU89JHtERUZfRElSVFlfQkFDS0dST1VORF9SQVRJTzotJzEwJ30KK0RFRl9ESVJUWV9SQVRJTz0ke0RFRl9ESVJUWV9SQVRJTzotJzQwJ30KK0RFRl9YRlNfQUdFX0JVRkZFUj0ke0RFRl9YRlNfQUdFX0JVRkZFUjotJzE1J30KK0RFRl9YRlNfU1lOQ19JTlRFUlZBTD0ke0RFRl9YRlNfU1lOQ19JTlRFUlZBTDotJzMwJ30KK0RFRl9YRlNfQlVGRF9JTlRFUlZBTD0ke0RFRl9YRlNfQlVGRF9JTlRFUlZBTDotJzEnfQorCisjIFRoaXMgbXVzdCBiZSBhZGp1c3RlZCBtYW51YWxseSB0byB0aGUgdmFsdWUgb2YgSFogaW4gdGhlIHJ1bm5pbmcga2VybmVsCisjIG9uIDIuNCwgdW50aWwgdGhlIFhGUyBwZW9wbGUgY2hhbmdlIHRoZWlyIDIuNCBleHRlcm5hbCBpbnRlcmZhY2VzIHRvIHdvcmsgaW4KKyMgY2VudGlzZWNzLiBUaGlzIGNhbiBiZSBhdXRvbWF0ZWQsIGJ1dCBpdCdzIGEgd29yayBpbiBwcm9ncmVzcyB0aGF0IHN0aWxsIG5lZWRzCisjIHNvbWUgZml4ZXMuIE9uIDIuNiBrZXJuZWxzLCBYRlMgdXNlcyBVU0VSX0haIGluc3RlYWQgb2YgSFogZm9yIGV4dGVybmFsCisjIGludGVyZmFjZXMsIGFuZCB0aGF0IGlzIGN1cnJlbnRseSBhbHdheXMgc2V0IHRvIDEwMC4gU28geW91IGRvbid0IG5lZWQgdG8KKyMgY2hhbmdlIHRoaXMgb24gMi42LgorWEZTX0haPSR7WEZTX0haOi0nMTAwJ30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworS0xFVkVMPSIkKHVuYW1lIC1yIHwKKyAgICAgICAgICAgICB7CisJICAgICAgIElGUz0nLicgcmVhZCBhIGIgYworCSAgICAgICBlY2hvICRhLiRiCisJICAgICB9CispIgorY2FzZSAiJEtMRVZFTCIgaW4KKwkiMi40InwiMi42IikKKwkJOzsKKwkqKQorCQllY2hvICJVbmhhbmRsZWQga2VybmVsIHZlcnNpb246ICRLTEVWRUwgKCd1bmFtZSAtcicgPSAnJCh1bmFtZSAtciknKSIgPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCitpZiBbICEgLWUgL3Byb2Mvc3lzL3ZtL2xhcHRvcF9tb2RlIF0gOyB0aGVuCisJZWNobyAiS2VybmVsIGlzIG5vdCBwYXRjaGVkIHdpdGggbGFwdG9wX21vZGUgcGF0Y2guIiA+JjIKKwlleGl0IDEKK2ZpCisKK2lmIFsgISAtdyAvcHJvYy9zeXMvdm0vbGFwdG9wX21vZGUgXSA7IHRoZW4KKwllY2hvICJZb3UgZG8gbm90IGhhdmUgZW5vdWdoIHByaXZpbGVnZXMgdG8gZW5hYmxlIGxhcHRvcF9tb2RlLiIgPiYyCisJZXhpdCAxCitmaQorCisjIFJlbW92ZSBhbiBvcHRpb24gKHRoZSBmaXJzdCBwYXJhbWV0ZXIpIG9mIHRoZSBmb3JtIG9wdGlvbj08bnVtYmVyPiBmcm9tCisjIGEgbW91bnQgb3B0aW9ucyBzdHJpbmcgKHRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzKS4KK3BhcnNlX21vdW50X29wdHMgKCkgeworCU9QVD0iJDEiCisJc2hpZnQKKwllY2hvICIsJCosIiB8IHNlZAkJXAorCSAtZSAncy8sJyIkT1BUIic9WzAtOV0qLC8sL2cnCVwKKwkgLWUgJ3MvLCwqLywvZycJCQlcCisJIC1lICdzL14sLy8nCQkJXAorCSAtZSAncy8sJC8vJworfQorCisjIFJlbW92ZSBhbiBvcHRpb24gKHRoZSBmaXJzdCBwYXJhbWV0ZXIpIHdpdGhvdXQgYW55IGFyZ3VtZW50cyBmcm9tCisjIGEgbW91bnQgb3B0aW9uIHN0cmluZyAodGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMpLgorcGFyc2Vfbm9udW1iZXJfbW91bnRfb3B0cyAoKSB7CisJT1BUPSIkMSIKKwlzaGlmdAorCWVjaG8gIiwkKiwiIHwgc2VkCQlcCisJIC1lICdzLywnIiRPUFQiJywvLC9nJwkJXAorCSAtZSAncy8sLCovLC9nJwkJCVwKKwkgLWUgJ3MvXiwvLycJCQlcCisJIC1lICdzLywkLy8nCit9CisKKyMgRmluZCBvdXQgdGhlIHN0YXRlIG9mIGEgeWVzL25vIG9wdGlvbiAoZS5nLiAiYXRpbWUiLyJub2F0aW1lIikgaW4KKyMgZnN0YWIgZm9yIGEgZ2l2ZW4gZmlsZXN5c3RlbSwgYW5kIHVzZSB0aGlzIHN0YXRlIHRvIHJlcGxhY2UgdGhlCisjIHZhbHVlIG9mIHRoZSBvcHRpb24gaW4gYW5vdGhlciBtb3VudCBvcHRpb25zIHN0cmluZy4gVGhlIGRldmljZQorIyBpcyB0aGUgZmlyc3QgYXJndW1lbnQsIHRoZSBvcHRpb24gbmFtZSB0aGUgc2Vjb25kLCBhbmQgdGhlIGRlZmF1bHQKKyMgdmFsdWUgdGhlIHRoaXJkLiBUaGUgcmVtYWluZGVyIGlzIHRoZSBtb3VudCBvcHRpb25zIHN0cmluZy4KKyMKKyMgRXhhbXBsZToKKyMgcGFyc2VfeWVzbm9fb3B0c193ZnN0YWIgL2Rldi9oZGExIGF0aW1lIGF0aW1lIGRlZmF1bHRzLG5vYXRpbWUKKyMKKyMgSWYgZnN0YWIgY29udGFpbnMsIHNheSwgInJ3IiBmb3IgdGhpcyBmaWxlc3lzdGVtLCB0aGVuIHRoZSByZXN1bHQKKyMgd2lsbCBiZSAiZGVmYXVsdHMsYXRpbWUiLgorcGFyc2VfeWVzbm9fb3B0c193ZnN0YWIgKCkgeworCUxfREVWPSIkMSIKKwlPUFQ9IiQyIgorCURFRl9PUFQ9IiQzIgorCXNoaWZ0IDMKKwlMX09QVFM9IiQqIgorCVBBUlNFRE9QVFMxPSIkKHBhcnNlX25vbnVtYmVyX21vdW50X29wdHMgJE9QVCAkTF9PUFRTKSIKKwlQQVJTRURPUFRTMT0iJChwYXJzZV9ub251bWJlcl9tb3VudF9vcHRzIG5vJE9QVCAkUEFSU0VET1BUUzEpIgorCSMgV2F0Y2ggZm9yIGEgZGVmYXVsdCBhdGltZSBpbiBmc3RhYgorCUZTVEFCX09QVFM9IiQoYXdrICckMSA9PSAiJyRMX0RFViciIHsgcHJpbnQgJDQgfScgL2V0Yy9mc3RhYikiCisJaWYgZWNobyAiJEZTVEFCX09QVFMiIHwgZ3JlcCAiJE9QVCIgPiAvZGV2L251bGwgOyB0aGVuCisJCSMgb3B0aW9uIHNwZWNpZmllZCBpbiBmc3RhYjogZXh0cmFjdCB0aGUgdmFsdWUgYW5kIHVzZSBpdAorCQlpZiBlY2hvICIkRlNUQUJfT1BUUyIgfCBncmVwICJubyRPUFQiID4gL2Rldi9udWxsIDsgdGhlbgorCQkJZWNobyAiJFBBUlNFRE9QVFMxLG5vJE9QVCIKKwkJZWxzZQorCQkJIyBubyRPUFQgbm90IGZvdW5kIC0tIHNvIHdlIG11c3QgaGF2ZSAkT1BULgorCQkJZWNobyAiJFBBUlNFRE9QVFMxLCRPUFQiCisJCWZpCisJZWxzZQorCQkjIG9wdGlvbiBub3Qgc3BlY2lmaWVkIGluIGZzdGFiIC0tIGNob29zZSB0aGUgZGVmYXVsdC4KKwkJZWNobyAiJFBBUlNFRE9QVFMxLCRERUZfT1BUIgorCWZpCit9CisKKyMgRmluZCBvdXQgdGhlIHN0YXRlIG9mIGEgbnVtYmVyZWQgb3B0aW9uIChlLmcuICJjb21taXQ9Tk5OIikgaW4KKyMgZnN0YWIgZm9yIGEgZ2l2ZW4gZmlsZXN5c3RlbSwgYW5kIHVzZSB0aGlzIHN0YXRlIHRvIHJlcGxhY2UgdGhlCisjIHZhbHVlIG9mIHRoZSBvcHRpb24gaW4gYW5vdGhlciBtb3VudCBvcHRpb25zIHN0cmluZy4gVGhlIGRldmljZQorIyBpcyB0aGUgZmlyc3QgYXJndW1lbnQsIGFuZCB0aGUgb3B0aW9uIG5hbWUgdGhlIHNlY29uZC4gVGhlCisjIHJlbWFpbmRlciBpcyB0aGUgbW91bnQgb3B0aW9ucyBzdHJpbmcgaW4gd2hpY2ggdGhlIHJlcGxhY2VtZW50CisjIG11c3QgYmUgZG9uZS4KKyMKKyMgRXhhbXBsZToKKyMgcGFyc2VfbW91bnRfb3B0c193ZnN0YWIgL2Rldi9oZGExIGNvbW1pdCBkZWZhdWx0cyxjb21taXQ9NworIworIyBJZiBmc3RhYiBjb250YWlucywgc2F5LCAiY29tbWl0PTMscnciIGZvciB0aGlzIGZpbGVzeXN0ZW0sIHRoZW4gdGhlCisjIHJlc3VsdCB3aWxsIGJlICJydyxjb21taXQ9MyIuCitwYXJzZV9tb3VudF9vcHRzX3dmc3RhYiAoKSB7CisJTF9ERVY9IiQxIgorCU9QVD0iJDIiCisJc2hpZnQgMgorCUxfT1BUUz0iJCoiCisJUEFSU0VET1BUUzE9IiQocGFyc2VfbW91bnRfb3B0cyAkT1BUICRMX09QVFMpIgorCSMgV2F0Y2ggZm9yIGEgZGVmYXVsdCBjb21taXQgaW4gZnN0YWIKKwlGU1RBQl9PUFRTPSIkKGF3ayAnJDEgPT0gIickTF9ERVYnIiB7IHByaW50ICQ0IH0nIC9ldGMvZnN0YWIpIgorCWlmIGVjaG8gIiRGU1RBQl9PUFRTIiB8IGdyZXAgIiRPUFQ9IiA+IC9kZXYvbnVsbCA7IHRoZW4KKwkJIyBvcHRpb24gc3BlY2lmaWVkIGluIGZzdGFiOiBleHRyYWN0IHRoZSB2YWx1ZSwgYW5kIHVzZSBpdAorCQllY2hvIC1uICIkUEFSU0VET1BUUzEsJE9QVD0iCisJCWVjaG8gIiwkRlNUQUJfT1BUUywiIHwgc2VkIFwKKwkJIC1lICdzLy4qLCciJE9QVCInPS8vJwlcCisJCSAtZSAncy8sLiovLycKKwllbHNlCisJCSMgb3B0aW9uIG5vdCBzcGVjaWZpZWQgaW4gZnN0YWI6IHNldCBpdCB0byAwCisJCWVjaG8gIiRQQVJTRURPUFRTMSwkT1BUPTAiCisJZmkKK30KKworZGVkdWNlX2ZzdHlwZSAoKSB7CisJTVA9IiQxIgorCSMgTXkgcm9vdCBmaWxlc3lzdGVtIHVuZm9ydHVuYXRlbHkgaGFzCisJIyB0eXBlICJ1bmtub3duIiBpbiAvZXRjL210YWIuIElmIHdlIGVuY291bnRlcgorCSMgInVua25vd24iLCB3ZSB0cnkgdG8gZ2V0IHRoZSB0eXBlIGZyb20gZnN0YWIuCisJY2F0IC9ldGMvZnN0YWIgfAorCWdyZXAgLXYgJ14jJyB8CisJd2hpbGUgcmVhZCBGU1RBQl9ERVYgRlNUQUJfTVAgRlNUQUJfRlNUIEZTVEFCX09QVFMgRlNUQUJfRFVNUCBGU1RBQl9EVU1QIDsgZG8KKwkJaWYgWyAiJEZTVEFCX01QIiA9ICIkTVAiIF07IHRoZW4KKwkJCWVjaG8gJEZTVEFCX0ZTVAorCQkJZXhpdCAwCisJCWZpCisJZG9uZQorfQorCitpZiBbICRET19SRU1PVU5UX05PQVRJTUUgLWVxIDEgXSA7IHRoZW4KKwlOT0FUSU1FX09QVD0iLG5vYXRpbWUiCitmaQorCitjYXNlICIkMSIgaW4KKwlzdGFydCkKKwkJQUdFPSQoKDEwMCokTUFYX0FHRSkpCisJCVhGU19BR0U9JCgoJFhGU19IWiokTUFYX0FHRSkpCisJCWVjaG8gLW4gIlN0YXJ0aW5nIGxhcHRvcF9tb2RlIgorCisJCWlmIFsgLWQgL3Byb2Mvc3lzL3ZtL3BhZ2VidWYgXSA7IHRoZW4KKwkJCSMgKEZvciAyLjQgYW5kIGVhcmx5IDIuNi4pCisJCQkjIFRoaXMgb25seSBuZWVkcyB0byBiZSBzZXQsIG5vdCByZXNldCAtLSBpdCBpcyBvbmx5IHVzZWQgd2hlbgorCQkJIyBsYXB0b3AgbW9kZSBpcyBlbmFibGVkLgorCQkJZWNobyAkWEZTX0FHRSA+IC9wcm9jL3N5cy92bS9wYWdlYnVmL2xtX2ZsdXNoX2FnZQorCQkJZWNobyAkWEZTX0FHRSA+IC9wcm9jL3N5cy9mcy94ZnMvbG1fc3luY19pbnRlcnZhbAorCQllbGlmIFsgLWYgL3Byb2Mvc3lzL2ZzL3hmcy9sbV9hZ2VfYnVmZmVyIF0gOyB0aGVuCisJCQkjIChBIGNvdXBsZSBvZiBlYXJseSAyLjYgbGFwdG9wIG1vZGUgcGF0Y2hlcyBoYWQgdGhlc2UuKQorCQkJIyBUaGUgc2FtZSBnb2VzIGZvciB0aGVzZS4KKwkJCWVjaG8gJFhGU19BR0UgPiAvcHJvYy9zeXMvZnMveGZzL2xtX2FnZV9idWZmZXIKKwkJCWVjaG8gJFhGU19BR0UgPiAvcHJvYy9zeXMvZnMveGZzL2xtX3N5bmNfaW50ZXJ2YWwKKwkJZWxpZiBbIC1mIC9wcm9jL3N5cy9mcy94ZnMvYWdlX2J1ZmZlciBdIDsgdGhlbgorCQkJIyAoMi42LjYpCisJCQkjIEJ1dCBub3QgZm9yIHRoZXNlIC0tIHRoZXkgYXJlIGFsc28gdXNlZCBpbiBub3JtYWwKKwkJCSMgb3BlcmF0aW9uLgorCQkJZWNobyAkWEZTX0FHRSA+IC9wcm9jL3N5cy9mcy94ZnMvYWdlX2J1ZmZlcgorCQkJZWNobyAkWEZTX0FHRSA+IC9wcm9jL3N5cy9mcy94ZnMvc3luY19pbnRlcnZhbAorCQllbGlmIFsgLWYgL3Byb2Mvc3lzL2ZzL3hmcy9hZ2VfYnVmZmVyX2NlbnRpc2VjcyBdIDsgdGhlbgorCQkJIyAoMi42LjcgdXB3YXJkcykKKwkJCSMgQW5kIG5vdCBmb3IgdGhlc2UgZWl0aGVyLiBUaGVzZSBhcmUgaW4gY2VudGlzZWNzLAorCQkJIyBub3QgVVNFUl9IWiwgc28gd2UgaGF2ZSB0byB1c2UgJEFHRSwgbm90ICRYRlNfQUdFLgorCQkJZWNobyAkQUdFID4gL3Byb2Mvc3lzL2ZzL3hmcy9hZ2VfYnVmZmVyX2NlbnRpc2VjcworCQkJZWNobyAkQUdFID4gL3Byb2Mvc3lzL2ZzL3hmcy94ZnNzeW5jZF9jZW50aXNlY3MKKwkJCWVjaG8gMzAwMCA+IC9wcm9jL3N5cy9mcy94ZnMveGZzYnVmZF9jZW50aXNlY3MKKwkJZmkKKworCQljYXNlICIkS0xFVkVMIiBpbgorCQkJIjIuNCIpCisJCQkJZWNobyAxCQkJCQk+IC9wcm9jL3N5cy92bS9sYXB0b3BfbW9kZQorCQkJCWVjaG8gIjMwIDUwMCAwIDAgJEFHRSAkQUdFIDYwIDIwIDAiCT4gL3Byb2Mvc3lzL3ZtL2JkZmx1c2gKKwkJCQk7OworCQkJIjIuNiIpCisJCQkJZWNobyA1CQkJCQk+IC9wcm9jL3N5cy92bS9sYXB0b3BfbW9kZQorCQkJCWVjaG8gIiRBR0UiCQkJCT4gL3Byb2Mvc3lzL3ZtL2RpcnR5X3dyaXRlYmFja19jZW50aXNlY3MKKwkJCQllY2hvICIkQUdFIgkJCQk+IC9wcm9jL3N5cy92bS9kaXJ0eV9leHBpcmVfY2VudGlzZWNzCisJCQkJZWNobyAiJERJUlRZX1JBVElPIgkJCT4gL3Byb2Mvc3lzL3ZtL2RpcnR5X3JhdGlvCisJCQkJZWNobyAiJERJUlRZX0JBQ0tHUk9VTkRfUkFUSU8iCQk+IC9wcm9jL3N5cy92bS9kaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvCisJCQkJOzsKKwkJZXNhYworCQlpZiBbICRET19SRU1PVU5UUyAtZXEgMSBdOyB0aGVuCisJCQljYXQgL2V0Yy9tdGFiIHwgd2hpbGUgcmVhZCBERVYgTVAgRlNUIE9QVFMgRFVNUCBQQVNTIDsgZG8KKwkJCQlQQVJTRURPUFRTPSIkKHBhcnNlX21vdW50X29wdHMgIiRPUFRTIikiCisJCQkJaWYgWyAiJEZTVCIgPSAndW5rbm93bicgXTsgdGhlbgorCQkJCQlGU1Q9JChkZWR1Y2VfZnN0eXBlICRNUCkKKwkJCQlmaQorCQkJCWNhc2UgIiRGU1QiIGluCisJCQkJCSJleHQzInwicmVpc2VyZnMiKQorCQkJCQkJUEFSU0VET1BUUz0iJChwYXJzZV9tb3VudF9vcHRzIGNvbW1pdCAiJE9QVFMiKSIKKwkJCQkJCW1vdW50ICRERVYgLXQgJEZTVCAkTVAgLW8gcmVtb3VudCwkUEFSU0VET1BUUyxjb21taXQ9JE1BWF9BR0UkTk9BVElNRV9PUFQKKwkJCQkJCTs7CisJCQkJCSJ4ZnMiKQorCQkJCQkJbW91bnQgJERFViAtdCAkRlNUICRNUCAtbyByZW1vdW50LCRPUFRTJE5PQVRJTUVfT1BUCisJCQkJCQk7OworCQkJCWVzYWMKKwkJCQlpZiBbIC1iICRERVYgXSA7IHRoZW4KKwkJCQkJYmxvY2tkZXYgLS1zZXRyYSAkKCgkUkVBREFIRUFEICogMikpICRERVYKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCQlpZiBbICRET19IRCAtZXEgMSBdIDsgdGhlbgorCQkJZm9yIFRISVNIRCBpbiAkSEQgOyBkbworCQkJCS9zYmluL2hkcGFybSAtUyAkQkFUVF9IRCAkVEhJU0hEID4gL2Rldi9udWxsIDI+JjEKKwkJCQkvc2Jpbi9oZHBhcm0gLUIgMSAkVEhJU0hEID4gL2Rldi9udWxsIDI+JjEKKwkJCWRvbmUKKwkJZmkKKwkJaWYgWyAkRE9fQ1BVIC1lcSAxIC1hIC1lIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9jcHVpbmZvX21pbl9mcmVxIF07IHRoZW4KKwkJCWlmIFsgJENQVV9NQVhGUkVRID0gJ3Nsb3dlc3QnIF07IHRoZW4KKwkJCQlDUFVfTUFYRlJFUT1gY2F0IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9jcHVpbmZvX21pbl9mcmVxYAorCQkJZmkKKwkJCWVjaG8gJENQVV9NQVhGUkVRID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfbWF4X2ZyZXEKKwkJZmkKKwkJZWNobyAiLiIKKwkJOzsKKwlzdG9wKQorCQlVX0FHRT0kKCgxMDAqJERFRl9VUERBVEUpKQorCQlCX0FHRT0kKCgxMDAqJERFRl9BR0UpKQorCQllY2hvIC1uICJTdG9wcGluZyBsYXB0b3BfbW9kZSIKKwkJZWNobyAwID4gL3Byb2Mvc3lzL3ZtL2xhcHRvcF9tb2RlCisJCWlmIFsgLWYgL3Byb2Mvc3lzL2ZzL3hmcy9hZ2VfYnVmZmVyIC1hICEgLWYgL3Byb2Mvc3lzL2ZzL3hmcy9sbV9hZ2VfYnVmZmVyIF0gOyB0aGVuCisJCQkjIFRoZXNlIG5lZWQgdG8gYmUgcmVzdG9yZWQsIGlmIHRoZXJlIGFyZSBubyBsbV8qLgorCQkJZWNobyAkKCgkWEZTX0haKiRERUZfWEZTX0FHRV9CVUZGRVIpKQkgCT4gL3Byb2Mvc3lzL2ZzL3hmcy9hZ2VfYnVmZmVyCisJCQllY2hvICQoKCRYRlNfSFoqJERFRl9YRlNfU1lOQ19JTlRFUlZBTCkpIAk+IC9wcm9jL3N5cy9mcy94ZnMvc3luY19pbnRlcnZhbAorCQllbGlmIFsgLWYgL3Byb2Mvc3lzL2ZzL3hmcy9hZ2VfYnVmZmVyX2NlbnRpc2VjcyBdIDsgdGhlbgorCQkJIyBUaGVzZSBuZWVkIHRvIGJlIHJlc3RvcmVkIGFzIHdlbGwuCisJCQllY2hvICQoKDEwMCokREVGX1hGU19BR0VfQlVGRkVSKSkJPiAvcHJvYy9zeXMvZnMveGZzL2FnZV9idWZmZXJfY2VudGlzZWNzCisJCQllY2hvICQoKDEwMCokREVGX1hGU19TWU5DX0lOVEVSVkFMKSkJPiAvcHJvYy9zeXMvZnMveGZzL3hmc3N5bmNkX2NlbnRpc2VjcworCQkJZWNobyAkKCgxMDAqJERFRl9YRlNfQlVGRF9JTlRFUlZBTCkpCT4gL3Byb2Mvc3lzL2ZzL3hmcy94ZnNidWZkX2NlbnRpc2VjcworCQlmaQorCQljYXNlICIkS0xFVkVMIiBpbgorCQkJIjIuNCIpCisJCQkJZWNobyAiMzAgNTAwIDAgMCAkVV9BR0UgJEJfQUdFIDYwIDIwIDAiCT4gL3Byb2Mvc3lzL3ZtL2JkZmx1c2gKKwkJCQk7OworCQkJIjIuNiIpCisJCQkJZWNobyAiJFVfQUdFIgkJCQk+IC9wcm9jL3N5cy92bS9kaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCisJCQkJZWNobyAiJEJfQUdFIgkJCQk+IC9wcm9jL3N5cy92bS9kaXJ0eV9leHBpcmVfY2VudGlzZWNzCisJCQkJZWNobyAiJERFRl9ESVJUWV9SQVRJTyIJCQk+IC9wcm9jL3N5cy92bS9kaXJ0eV9yYXRpbworCQkJCWVjaG8gIiRERUZfRElSVFlfQkFDS0dST1VORF9SQVRJTyIJPiAvcHJvYy9zeXMvdm0vZGlydHlfYmFja2dyb3VuZF9yYXRpbworCQkJCTs7CisJCWVzYWMKKwkJaWYgWyAkRE9fUkVNT1VOVFMgLWVxIDEgXSA7IHRoZW4KKwkJCWNhdCAvZXRjL210YWIgfCB3aGlsZSByZWFkIERFViBNUCBGU1QgT1BUUyBEVU1QIFBBU1MgOyBkbworCQkJCSMgUmVzZXQgY29tbWl0IGFuZCBhdGltZSBvcHRpb25zIHRvIGRlZmF1bHRzLgorCQkJCWlmIFsgIiRGU1QiID0gJ3Vua25vd24nIF07IHRoZW4KKwkJCQkJRlNUPSQoZGVkdWNlX2ZzdHlwZSAkTVApCisJCQkJZmkKKwkJCQljYXNlICIkRlNUIiBpbgorCQkJCQkiZXh0MyJ8InJlaXNlcmZzIikKKwkJCQkJCVBBUlNFRE9QVFM9IiQocGFyc2VfbW91bnRfb3B0c193ZnN0YWIgJERFViBjb21taXQgJE9QVFMpIgorCQkJCQkJUEFSU0VET1BUUz0iJChwYXJzZV95ZXNub19vcHRzX3dmc3RhYiAkREVWIGF0aW1lIGF0aW1lICRQQVJTRURPUFRTKSIKKwkJCQkJCW1vdW50ICRERVYgLXQgJEZTVCAkTVAgLW8gcmVtb3VudCwkUEFSU0VET1BUUworCQkJCQkJOzsKKwkJCQkJInhmcyIpCisJCQkJCQlQQVJTRURPUFRTPSIkKHBhcnNlX3llc25vX29wdHNfd2ZzdGFiICRERVYgYXRpbWUgYXRpbWUgJE9QVFMpIgorCQkJCQkJbW91bnQgJERFViAtdCAkRlNUICRNUCAtbyByZW1vdW50LCRQQVJTRURPUFRTCisJCQkJCQk7OworCQkJCWVzYWMKKwkJCQlpZiBbIC1iICRERVYgXSA7IHRoZW4KKwkJCQkJYmxvY2tkZXYgLS1zZXRyYSAyNTYgJERFVgorCQkJCWZpCisJCQlkb25lCisJCWZpCisJCWlmIFsgJERPX0hEIC1lcSAxIF0gOyB0aGVuCisJCQlmb3IgVEhJU0hEIGluICRIRCA7IGRvCisJCQkJL3NiaW4vaGRwYXJtIC1TICRBQ19IRCAkVEhJU0hEID4gL2Rldi9udWxsIDI+JjEKKwkJCQkvc2Jpbi9oZHBhcm0gLUIgMjU1ICRUSElTSEQgPiAvZGV2L251bGwgMj4mMQorCQkJZG9uZQorCQlmaQorCQlpZiBbICRET19DUFUgLWVxIDEgLWEgLWUgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL2NwdWluZm9fbWluX2ZyZXEgXTsgdGhlbgorCQkJZWNobyBgY2F0IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9jcHVpbmZvX21heF9mcmVxYCA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX21heF9mcmVxCisJCWZpCisJCWVjaG8gIi4iCisJCTs7CisJKikKKwkJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfSIgMj4mMQorCQlleGl0IDEKKwkJOzsKKworZXNhYworCitleGl0IDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tQ09OVFJPTCBTQ1JJUFQgRU5ELS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQUNQSSBpbnRlZ3JhdGlvbgorLS0tLS0tLS0tLS0tLS0tLQorCitEYXggS2Vsc29uIHN1Ym1pdHRlZCB0aGlzIHNvIHRoYXQgdGhlIEFDUEkgYWNwaWQgZGFlbW9uIHdpbGwKK2tpY2sgb2ZmIHRoZSBsYXB0b3BfbW9kZSBzY3JpcHQgYW5kIHJ1biBoZHBhcm0uIFRoZSBwYXJ0IHRoYXQKK2F1dG9tYXRpY2FsbHkgZGlzYWJsZXMgbGFwdG9wIG1vZGUgd2hlbiB0aGUgYmF0dGVyeSBpcyBsb3cgd2FzCit3cml0ZW4gYnkgSmFuIFRvcGluc2tpLgorCistLS0tLS0tLS0tLS0tLS0tLS9ldGMvYWNwaS9ldmVudHMvYWNfYWRhcHRlciBCRUdJTi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZXZlbnQ9YWNfYWRhcHRlcgorYWN0aW9uPS9ldGMvYWNwaS9hY3Rpb25zL2FjLnNoICVlCistLS0tLS0tLS0tLS0tLS0tL2V0Yy9hY3BpL2V2ZW50cy9hY19hZGFwdGVyIEVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKy0tLS0tLS0tLS0tLS0tLS0tL2V0Yy9hY3BpL2V2ZW50cy9iYXR0ZXJ5IEJFR0lOLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitldmVudD1iYXR0ZXJ5LioKK2FjdGlvbj0vZXRjL2FjcGkvYWN0aW9ucy9iYXR0ZXJ5LnNoICVlCistLS0tLS0tLS0tLS0tLS0tL2V0Yy9hY3BpL2V2ZW50cy9iYXR0ZXJ5IEVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKy0tLS0tLS0tLS0tLS0tLS0vZXRjL2FjcGkvYWN0aW9ucy9hYy5zaCBCRUdJTi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIS9iaW4vYmFzaAorCisjIGFjIG9uL29mZmxpbmUgZXZlbnQgaGFuZGxlcgorCitzdGF0dXM9YGF3ayAnL15zdGF0ZTogLyB7IHByaW50ICQyIH0nIC9wcm9jL2FjcGkvYWNfYWRhcHRlci8kMi9zdGF0ZWAKKworY2FzZSAkc3RhdHVzIGluCisgICAgICAgICJvbi1saW5lIikKKyAgICAgICAgICAgICAgICAvc2Jpbi9sYXB0b3BfbW9kZSBzdG9wCisgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgIDs7CisgICAgICAgICJvZmYtbGluZSIpCisgICAgICAgICAgICAgICAgL3NiaW4vbGFwdG9wX21vZGUgc3RhcnQKKyAgICAgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgOzsKK2VzYWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS9ldGMvYWNwaS9hY3Rpb25zL2FjLnNoIEVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tL2V0Yy9hY3BpL2FjdGlvbnMvYmF0dGVyeS5zaCBCRUdJTi0tLS0tLS0tLS0tLS0tLS0tLS0KKyMhIC9iaW4vYmFzaAorCisjIEF1dG9tYXRpY2FsbHkgZGlzYWJsZSBsYXB0b3AgbW9kZSB3aGVuIHRoZSBiYXR0ZXJ5IGFsbW9zdCBydW5zIG91dC4KKworQkFUVF9JTkZPPS9wcm9jL2FjcGkvYmF0dGVyeS8kMi9zdGF0ZQorCitpZiBbWyAtZiAvcHJvYy9zeXMvdm0vbGFwdG9wX21vZGUgXV0KK3RoZW4KKyAgIExNPWBjYXQgL3Byb2Mvc3lzL3ZtL2xhcHRvcF9tb2RlYAorICAgaWYgW1sgJExNIC1ndCAwIF1dCisgICB0aGVuCisgICAgIGlmIFtbIC1mICRCQVRUX0lORk8gXV0KKyAgICAgdGhlbgorICAgICAgICAjIFNvdXJjZSB0aGUgY29uZmlnIGZpbGUgb25seSBub3cgdGhhdCB3ZSBrbm93IHdlIG5lZWQKKyAgICAgICAgaWYgWyAtZiAvZXRjL2RlZmF1bHQvbGFwdG9wLW1vZGUgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAjIERlYmlhbgorICAgICAgICAgICAgICAgIC4gL2V0Yy9kZWZhdWx0L2xhcHRvcC1tb2RlCisgICAgICAgIGVsaWYgWyAtZiAvZXRjL3N5c2NvbmZpZy9sYXB0b3AtbW9kZSBdIDsgdGhlbgorICAgICAgICAgICAgICAgICMgT3RoZXJzCisgICAgICAgICAgICAgICAgLiAvZXRjL3N5c2NvbmZpZy9sYXB0b3AtbW9kZQorICAgICAgICBmaQorICAgICAgICBNSU5JTVVNX0JBVFRFUllfTUlOVVRFUz0ke01JTklNVU1fQkFUVEVSWV9NSU5VVEVTOi0nMTAnfQorCisgICAgICAgIEFDVElPTj0iYGNhdCAkQkFUVF9JTkZPIHwgZ3JlcCBjaGFyZ2luZyB8IGN1dCAtYyAyNi1gIgorICAgICAgICBpZiBbWyBBQ1RJT04gLWVxICJkaXNjaGFyZ2luZyIgXV0KKyAgICAgICAgdGhlbgorICAgICAgICAgICBQUkVTRU5UX1JBVEU9YGNhdCAkQkFUVF9JTkZPIHwgZ3JlcCAicHJlc2VudCByYXRlOiIgfCBzZWQgICJzLy4qIFwoWzAtOV1bMC05XSogXCkuKi9cMS8iIGAKKyAgICAgICAgICAgUkVNQUlOSU5HPWBjYXQgJEJBVFRfSU5GTyB8IGdyZXAgInJlbWFpbmluZyBjYXBhY2l0eToiIHwgc2VkICAicy8uKiBcKFswLTldWzAtOV0qIFwpLiovXDEvIiBgCisgICAgICAgIGZpCisgICAgICAgIGlmICgoJFJFTUFJTklORyAqIDYwIC8gJFBSRVNFTlRfUkFURSA8ICRNSU5JTVVNX0JBVFRFUllfTUlOVVRFUykpCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgL3NiaW4vbGFwdG9wX21vZGUgc3RvcAorICAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbG9nZ2VyIC1wIGRhZW1vbi53YXJuaW5nICJZb3UgYXJlIHVzaW5nIGxhcHRvcCBtb2RlIGFuZCB5b3VyIGJhdHRlcnkgaW50ZXJmYWNlICRCQVRUX0lORk8gaXMgbWlzc2luZy4gVGhpcyBtYXkgbGVhZCB0byBsb3NzIG9mIGRhdGEgd2hlbiB0aGUgYmF0dGVyeSBydW5zIG91dC4gQ2hlY2sga2VybmVsIEFDUEkgc3VwcG9ydCBhbmQgL3Byb2MvYWNwaS9iYXR0ZXJ5IGZvbGRlciwgYW5kIGVkaXQgL2V0Yy9hY3BpL2JhdHRlcnkuc2ggdG8gc2V0IEJBVFRfSU5GTyB0byB0aGUgY29ycmVjdCBwYXRoLiIKKyAgICAgZmkKKyAgIGZpCitmaQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tL2V0Yy9hY3BpL2FjdGlvbnMvYmF0dGVyeS5zaCBFTkQtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK01vbml0b3JpbmcgdG9vbAorLS0tLS0tLS0tLS0tLS0tCisKK0JhcnRlayBLYW5pYSBzdWJtaXR0ZWQgdGhpcywgaXQgY2FuIGJlIHVzZWQgdG8gbWVhc3VyZSBob3cgbXVjaCB0aW1lIHlvdXIgZGlzaworc3BlbmRzIHNwdW4gdXAvZG93bi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tZHNsbS5jIEJFR0lOLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBTaW1wbGUgRGlzayBTbGVlcCBNb25pdG9yCisgKiAgYnkgQmFydGVrIEthbmlhCisgKiBMaWNlbmNlZCB1bmRlciB0aGUgR1BMCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIEQoeCkgeAorI2Vsc2UKKyNkZWZpbmUgRCh4KQorI2VuZGlmCisKK2ludCBlbmRpdCA9IDA7CisKKy8qIENoZWNrIGlmIHRoZSBkaXNrIGlzIGluIHBvd2Vyc2F2ZS1tb2RlCisgKiBNb3N0IG9mIHRoZSBjb2RlIGlzIHN0b2xlbiBmcm9tIGhkcGFybS4KKyAqIDEgPSBhY3RpdmUsIDAgPSBzdGFuZGJ5L3NsZWVwLCAtMSA9IHVua25vd24gKi8KK2ludCBjaGVja19wb3dlcm1vZGUoaW50IGZkKQoreworICAgIHVuc2lnbmVkIGNoYXIgYXJnc1s0XSA9IHtXSU5fQ0hFQ0tQT1dFUk1PREUxLDAsMCwwfTsKKyAgICBpbnQgc3RhdGU7CisKKyAgICBpZiAoaW9jdGwoZmQsIEhESU9fRFJJVkVfQ01ELCAmYXJncykKKwkmJiAoYXJnc1swXSA9IFdJTl9DSEVDS1BPV0VSTU9ERTIpIC8qIHRyeSBhZ2FpbiB3aXRoIDB4OTggKi8KKwkmJiBpb2N0bChmZCwgSERJT19EUklWRV9DTUQsICZhcmdzKSkgeworCWlmIChlcnJubyAhPSBFSU8gfHwgYXJnc1swXSAhPSAwIHx8IGFyZ3NbMV0gIT0gMCkgeworCSAgICBzdGF0ZSA9IC0xOyAvKiAidW5rbm93biI7ICovCisJfSBlbHNlCisJICAgIHN0YXRlID0gMDsgLyogInNsZWVwaW5nIjsgKi8KKyAgICB9IGVsc2UgeworCXN0YXRlID0gKGFyZ3NbMl0gPT0gMjU1KSA/IDEgOiAwOworICAgIH0KKyAgICBEKHByaW50ZigiIGRyaXZlIHN0YXRlIGlzOiAgJWRcbiIsIHN0YXRlKSk7CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK2NoYXIgKnN0YXRlX25hbWUoaW50IGkpCit7CisgICAgaWYgKGkgPT0gLTEpIHJldHVybiAidW5rbm93biI7CisgICAgaWYgKGkgPT0gMCkgcmV0dXJuICJzbGVlcGluZyI7CisgICAgaWYgKGkgPT0gMSkgcmV0dXJuICJhY3RpdmUiOworCisgICAgcmV0dXJuICJpbnRlcm5hbCBlcnJvciI7Cit9CisKK2NoYXIgKm15Y3RpbWUodGltZV90IHRpbWUpCit7CisgICAgY2hhciAqdHMgPSBjdGltZSgmdGltZSk7CisgICAgdHNbc3RybGVuKHRzKSAtIDFdID0gMDsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBtZWFzdXJlKGludCBmZCkKK3sKKyAgICB0aW1lX3Qgc3RhcnRfdGltZTsKKyAgICBpbnQgbGFzdF9zdGF0ZTsKKyAgICB0aW1lX3QgbGFzdF90aW1lOworICAgIGludCBjdXJyX3N0YXRlOworICAgIHRpbWVfdCBjdXJyX3RpbWUgPSAwOworICAgIHRpbWVfdCB0aW1lX2RpZmY7CisgICAgdGltZV90IGFjdGl2ZV90aW1lID0gMDsKKyAgICB0aW1lX3Qgc2xlZXBfdGltZSA9IDA7CisgICAgdGltZV90IHVua25vd25fdGltZSA9IDA7CisgICAgdGltZV90IHRvdGFsX3RpbWUgPSAwOworICAgIGludCBjaGFuZ2VzID0gMDsKKyAgICBmbG9hdCB0bXA7CisKKyAgICBwcmludGYoIlN0YXJ0aW5nIG1lYXN1cmVtZW50c1xuIik7CisKKyAgICBsYXN0X3N0YXRlID0gY2hlY2tfcG93ZXJtb2RlKGZkKTsKKyAgICBzdGFydF90aW1lID0gbGFzdF90aW1lID0gdGltZSgwKTsKKyAgICBwcmludGYoIiAgU3lzdGVtIGlzIGluIHN0YXRlICVzXG5cbiIsIHN0YXRlX25hbWUobGFzdF9zdGF0ZSkpOworCisgICAgd2hpbGUoIWVuZGl0KSB7CisJc2xlZXAoMSk7CisJY3Vycl9zdGF0ZSA9IGNoZWNrX3Bvd2VybW9kZShmZCk7CisKKwlpZiAoY3Vycl9zdGF0ZSAhPSBsYXN0X3N0YXRlIHx8IGVuZGl0KSB7CisJICAgIGNoYW5nZXMrKzsKKwkgICAgY3Vycl90aW1lID0gdGltZSgwKTsKKwkgICAgdGltZV9kaWZmID0gY3Vycl90aW1lIC0gbGFzdF90aW1lOworCisJICAgIGlmIChsYXN0X3N0YXRlID09IDEpIGFjdGl2ZV90aW1lICs9IHRpbWVfZGlmZjsKKwkgICAgZWxzZSBpZiAobGFzdF9zdGF0ZSA9PSAwKSBzbGVlcF90aW1lICs9IHRpbWVfZGlmZjsKKwkgICAgZWxzZSB1bmtub3duX3RpbWUgKz0gdGltZV9kaWZmOworCisJICAgIGxhc3Rfc3RhdGUgPSBjdXJyX3N0YXRlOworCSAgICBsYXN0X3RpbWUgPSBjdXJyX3RpbWU7CisKKwkgICAgcHJpbnRmKCIlczogU3RhdGUtY2hhbmdlIHRvICVzXG4iLCBteWN0aW1lKGN1cnJfdGltZSksCisJCSAgIHN0YXRlX25hbWUoY3Vycl9zdGF0ZSkpOworCX0KKyAgICB9CisgICAgY2hhbmdlcy0tOyAvKiBDb21wZW5zYXRlIGZvciBTSUdJTlQgKi8KKworICAgIHRvdGFsX3RpbWUgPSB0aW1lKDApIC0gc3RhcnRfdGltZTsKKyAgICBwcmludGYoIlxuVG90YWwgcnVubmluZyB0aW1lOiAgJWx1c1xuIiwgY3Vycl90aW1lIC0gc3RhcnRfdGltZSk7CisgICAgcHJpbnRmKCIgU3RhdGUgY2hhbmdlZCAlZCB0aW1lc1xuIiwgY2hhbmdlcyk7CisKKyAgICB0bXAgPSAoZmxvYXQpc2xlZXBfdGltZSAvIChmbG9hdCl0b3RhbF90aW1lICogMTAwOworICAgIHByaW50ZigiIFRpbWUgaW4gc2xlZXAgc3RhdGU6ICAgJWx1cyAoJS4yZiUlKVxuIiwgc2xlZXBfdGltZSwgdG1wKTsKKyAgICB0bXAgPSAoZmxvYXQpYWN0aXZlX3RpbWUgLyAoZmxvYXQpdG90YWxfdGltZSAqIDEwMDsKKyAgICBwcmludGYoIiBUaW1lIGluIGFjdGl2ZSBzdGF0ZTogICVsdXMgKCUuMmYlJSlcbiIsIGFjdGl2ZV90aW1lLCB0bXApOworICAgIHRtcCA9IChmbG9hdCl1bmtub3duX3RpbWUgLyAoZmxvYXQpdG90YWxfdGltZSAqIDEwMDsKKyAgICBwcmludGYoIiBUaW1lIGluIHVua25vd24gc3RhdGU6ICVsdXMgKCUuMmYlJSlcbiIsIHVua25vd25fdGltZSwgdG1wKTsKK30KKwordm9pZCBlbmRlcihpbnQgcykKK3sKKyAgICBlbmRpdCA9IDE7Cit9CisKK3ZvaWQgdXNhZ2UoKQoreworICAgIHB1dHMoInVzYWdlOiBkc2xtIFstdyA8dGltZT5dIDxkaXNrPiIpOworICAgIGV4aXQoMCk7Cit9CisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworICAgIGludCBmZDsKKyAgICBjaGFyICpkaXNrID0gMDsKKyAgICBpbnQgc2V0dGxlX3RpbWUgPSA2MDsKKworICAgIC8qIFBhcnNlIHRoZSBzaW1wbGUgY29tbWFuZC1saW5lICovCisgICAgaWYgKGFjID09IDIpCisJZGlzayA9IGF2WzFdOworICAgIGVsc2UgaWYgKGFjID09IDQpIHsKKwlzZXR0bGVfdGltZSA9IGF0b2koYXZbMl0pOworCWRpc2sgPSBhdlszXTsKKyAgICB9IGVsc2UKKwl1c2FnZSgpOworCisgICAgaWYgKCEoZmQgPSBvcGVuKGRpc2ssIE9fUkRPTkxZfE9fTk9OQkxPQ0spKSkgeworCXByaW50ZigiQ2FuJ3Qgb3BlbiAlcywgYmVjYXVzZTogJXNcbiIsIGRpc2ssIHN0cmVycm9yKGVycm5vKSk7CisJZXhpdCgtMSk7CisgICAgfQorCisgICAgaWYgKHNldHRsZV90aW1lKSB7CisJcHJpbnRmKCJXYWl0aW5nICVkIHNlY29uZHMgZm9yIHRoZSBzeXN0ZW0gdG8gc2V0dGxlIGRvd24gdG8gIgorCSAgICAgICAiJ25vcm1hbCdcbiIsIHNldHRsZV90aW1lKTsKKwlzbGVlcChzZXR0bGVfdGltZSk7CisgICAgfSBlbHNlCisJcHV0cygiTm90IHdhaXRpbmcgZm9yIHN5c3RlbSB0byBzZXR0bGUgZG93biIpOworCisgICAgc2lnbmFsKFNJR0lOVCwgZW5kZXIpOworCisgICAgbWVhc3VyZShmZCk7CisKKyAgICBjbG9zZShmZCk7CisKKyAgICByZXR1cm4gMDsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWRzbG0uYyBFTkQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xkbS50eHQgYi9Eb2N1bWVudGF0aW9uL2xkbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2NmUxMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbGRtLnR4dApAQCAtMCwwICsxLDEwMiBAQAorCisgICAgICAgICAgICBMRE0gLSBMb2dpY2FsIERpc2sgTWFuYWdlciAoRHluYW1pYyBEaXNrcykKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPdmVydmlldworLS0tLS0tLS0KKworV2luZG93cyAyMDAwIGFuZCBYUCB1c2UgYSBuZXcgcGFydGl0aW9uaW5nIHNjaGVtZS4gIEl0IGlzIGEgY29tcGxldGUKK3JlcGxhY2VtZW50IGZvciB0aGUgTVNET1Mgc3R5bGUgcGFydGl0aW9ucy4gIEl0IHN0b3JlcyBpdHMgaW5mb3JtYXRpb24gaW4gYQorMU1pQiBqb3VybmFsbGVkIGRhdGFiYXNlIGF0IHRoZSBlbmQgb2YgdGhlIHBoeXNpY2FsIGRpc2suICBUaGUgc2l6ZSBvZgorcGFydGl0aW9ucyBpcyBsaW1pdGVkIG9ubHkgYnkgZGlzayBzcGFjZS4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aXRpb25zIGlzCituZWFybHkgMjAwMC4KKworQW55IHBhcnRpdGlvbnMgY3JlYXRlZCB1bmRlciB0aGUgTERNIGFyZSBjYWxsZWQgIkR5bmFtaWMgRGlza3MiLiAgVGhlcmUgYXJlIG5vCitsb25nZXIgYW55IHByaW1hcnkgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4gIE5vcm1hbCBNU0RPUyBzdHlsZSBwYXJ0aXRpb25zIGFyZQorbm93IGtub3duIGFzIEJhc2ljIERpc2tzLgorCitJZiB5b3Ugd2lzaCB0byB1c2UgU3Bhbm5lZCwgU3RyaXBlZCwgTWlycm9yZWQgb3IgUkFJRCA1IFZvbHVtZXMsIHlvdSBtdXN0IHVzZQorRHluYW1pYyBEaXNrcy4gIFRoZSBqb3VybmFsbGluZyBhbGxvd3MgV2luZG93cyB0byBtYWtlIGNoYW5nZXMgdG8gdGhlc2UKK3BhcnRpdGlvbnMgYW5kIGZpbGVzeXN0ZW1zIHdpdGhvdXQgdGhlIG5lZWQgdG8gcmVib290LgorCitPbmNlIHRoZSBMRE0gZHJpdmVyIGhhcyBkaXZpZGVkIHVwIHRoZSBkaXNrLCB5b3UgY2FuIHVzZSB0aGUgTUQgZHJpdmVyIHRvCithc3NlbWJsZSBhbnkgbXVsdGktcGFydGl0aW9uIHZvbHVtZXMsIGUuZy4gIFN0cmlwZXMsIFJBSUQ1LgorCitUbyBwcmV2ZW50IGxlZ2FjeSBhcHBsaWNhdGlvbnMgZnJvbSByZXBhcnRpdGlvbmluZyB0aGUgZGlzaywgdGhlIExETSBjcmVhdGVzIGEKK2R1bW15IE1TRE9TIHBhcnRpdGlvbiBjb250YWluaW5nIG9uZSBkaXNrLXNpemVkIHBhcnRpdGlvbi4KKworCitFeGFtcGxlCistLS0tLS0tCisKK0JlbG93IHdlIGhhdmUgYSA1ME1pQiBkaXNrLCBkaXZpZGVkIGludG8gc2V2ZW4gcGFydGl0aW9ucy4KK04uQi4gIFRoZSBtaXNzaW5nIDFNaUIgYXQgdGhlIGVuZCBvZiB0aGUgZGlzayBpcyB3aGVyZSB0aGUgTERNIGRhdGFiYXNlIGlzCisgICAgICBzdG9yZWQuCisKKyAgRGV2aWNlIHwgT2Zmc2V0IEJ5dGVzICBTZWN0b3JzICBNaUIgfCBTaXplICAgQnl0ZXMgIFNlY3RvcnMgIE1pQgorICAtLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGhkYSAgICB8ICAgICAgICAgICAgMCAgICAgICAgMCAgICAwIHwgICAgIDUyNDI4ODAwICAgMTAyNDAwICAgNTAKKyAgaGRhMSAgIHwgICAgIDUxMzgwMjI0ICAgMTAwMzUyICAgNDkgfCAgICAgIDEwNDg1NzYgICAgIDIwNDggICAgMQorICBoZGEyICAgfCAgICAgICAgMTYzODQgICAgICAgMzIgICAgMCB8ICAgICAgNjk3OTU4NCAgICAxMzYzMiAgICA2CisgIGhkYTMgICB8ICAgICAgNjk5NTk2OCAgICAxMzY2NCAgICA2IHwgICAgIDEwNDg1NzYwICAgIDIwNDgwICAgMTAKKyAgaGRhNCAgIHwgICAgIDE3NDgxNzI4ICAgIDM0MTQ0ICAgMTYgfCAgICAgIDQxOTQzMDQgICAgIDgxOTIgICAgNAorICBoZGE1ICAgfCAgICAgMjE2NzYwMzIgICAgNDIzMzYgICAyMCB8ICAgICAgNTI0Mjg4MCAgICAxMDI0MCAgICA1CisgIGhkYTYgICB8ICAgICAyNjkxODkxMiAgICA1MjU3NiAgIDI1IHwgICAgIDEwNDg1NzYwICAgIDIwNDgwICAgMTAKKyAgaGRhNyAgIHwgICAgIDM3NDA0NjcyICAgIDczMDU2ICAgMzUgfCAgICAgMTM5NTkxNjggICAgMjcyNjQgICAxMworCitUaGUgTERNIERhdGFiYXNlIG1heSBub3Qgc3RvcmUgdGhlIHBhcnRpdGlvbnMgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcHBlYXIgb24KK2Rpc2ssIGJ1dCB0aGUgZHJpdmVyIHdpbGwgc29ydCB0aGVtLgorCitXaGVuIExpbnV4IGJvb3RzLCB5b3Ugd2lsbCBzZWUgc29tZXRoaW5nIGxpa2U6CisKKyAgaGRhOiAxMDI0MDAgc2VjdG9ycyB3LzMyS2lCIENhY2hlLCBDSFM9NTAvNjQvMzIKKyAgaGRhOiBbTERNXSBoZGExIGhkYTIgaGRhMyBoZGE0IGhkYTUgaGRhNiBoZGE3CisKKworQ29tcGlsaW5nIExETSBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gZW5hYmxlIExETSwgY2hvb3NlIHRoZSBmb2xsb3dpbmcgdHdvIG9wdGlvbnM6IAorCisgICJBZHZhbmNlZCBwYXJ0aXRpb24gc2VsZWN0aW9uIiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VECisgICJXaW5kb3dzIExvZ2ljYWwgRGlzayBNYW5hZ2VyIChEeW5hbWljIERpc2spIHN1cHBvcnQiIENPTkZJR19MRE1fUEFSVElUSU9OCisKK0lmIHlvdSBiZWxpZXZlIHRoZSBkcml2ZXIgaXNuJ3Qgd29ya2luZyBhcyBpdCBzaG91bGQsIHlvdSBjYW4gZW5hYmxlIHRoZSBleHRyYQorZGVidWdnaW5nIGNvZGUuICBUaGlzIHdpbGwgcHJvZHVjZSBhIExPVCBvZiBvdXRwdXQuICBUaGUgb3B0aW9uIGlzOgorCisgICJXaW5kb3dzIExETSBleHRyYSBsb2dnaW5nIiBDT05GSUdfTERNX0RFQlVHCisKK04uQi4gVGhlIHBhcnRpdGlvbiBjb2RlIGNhbm5vdCBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS4KKworQXMgd2l0aCBhbGwgdGhlIHBhcnRpdGlvbiBjb2RlLCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgc2VlIHNpZ25zIG9mIGl0cyB0eXBlIG9mCitwYXJ0aXRpb24sIGl0IHdpbGwgcGFzcyBjb250cm9sIHRvIGFub3RoZXIgZHJpdmVyLCBzbyB0aGVyZSBpcyBubyBoYXJtIGluCitlbmFibGluZyBpdC4KKworSWYgeW91IGhhdmUgRHluYW1pYyBEaXNrcyBidXQgZG9uJ3QgZW5hYmxlIHRoZSBkcml2ZXIsIHRoZW4gYWxsIHlvdSB3aWxsIHNlZQoraXMgYSBkdW1teSBNU0RPUyBwYXJ0aXRpb24gZmlsbGluZyB0aGUgd2hvbGUgZGlzay4gIFlvdSB3b24ndCBiZSBhYmxlIHRvIG1vdW50Cithbnkgb2YgdGhlIHZvbHVtZXMgb24gdGhlIGRpc2suCisKKworQm9vdGluZworLS0tLS0tLQorCitJZiB5b3UgZW5hYmxlIExETSBzdXBwb3J0LCB0aGVuIGxpbG8gaXMgY2FwYWJsZSBvZiBib290aW5nIGZyb20gYW55IG9mIHRoZQorZGlzY292ZXJlZCBwYXJ0aXRpb25zLiAgSG93ZXZlciwgZ3J1YiBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSBMRE0gcGFydGl0aW9uaW5nCithbmQgY2Fubm90IGJvb3QgZnJvbSBhIER5bmFtaWMgRGlzay4KKworCitNb3JlIERvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBhbiBPdmVydmlldyBvZiB0aGUgTERNIG9ubGluZSB0b2dldGhlciB3aXRoIGNvbXBsZXRlIFRlY2huaWNhbAorRG9jdW1lbnRhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIGRvd25sb2FkZWQgaW4gaHRtbC4KKworICBodHRwOi8vbGludXgtbnRmcy5zb3VyY2Vmb3JnZS5uZXQvbGRtL2luZGV4Lmh0bWwKKyAgaHR0cDovL2xpbnV4LW50ZnMuc291cmNlZm9yZ2UubmV0L2Rvd25sb2Fkcy5odG1sCisKK0lmIHlvdSBoYXZlIGFueSBMRE0gcXVlc3Rpb25zIHRoYXQgYXJlbid0IGFuc3dlcmVkIG9uIHRoZSB3ZWJzaXRlLCBlbWFpbCBtZS4KKworQ2hlZXJzLAorICAgIEZsYXRDYXAgLSBSaWNoYXJkIFJ1c3NvbgorICAgIGxkbUBmbGF0Y2FwLm9yZworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvY2tzLnR4dCBiL0RvY3VtZW50YXRpb24vbG9ja3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMWJlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvY2tzLnR4dApAQCAtMCwwICsxLDg0IEBACisJCSAgICAgIEZpbGUgTG9ja2luZyBSZWxlYXNlIE5vdGVzCisKKwkJQW5keSBXYWxrZXIgPGFuZHlAbHlzYWtlci5rdmFlcm5lci5ubz4KKworCQkJICAgIDEyIE1heSAxOTk3CisKKworMS4gV2hhdCdzIE5ldz8KKy0tLS0tLS0tLS0tLS0tCisKKzEuMSBCcm9rZW4gRmxvY2sgRW11bGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgb2xkIGZsb2NrKDIpIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIHdhcyBzd2FwcGVkIGZvciBwcm9wZXIgQlNECitjb21wYXRpYmxlIGZsb2NrKDIpIHN1cHBvcnQgaW4gdGhlIDEuMy54IHNlcmllcyBvZiBrZXJuZWxzLiBXaXRoIHRoZQorcmVsZWFzZSBvZiB0aGUgMi4xLngga2VybmVsIHNlcmllcywgc3VwcG9ydCBmb3IgdGhlIG9sZCBlbXVsYXRpb24gaGFzCitiZWVuIHRvdGFsbHkgcmVtb3ZlZCwgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGNhcnJ5IHRoaXMgYmFnZ2FnZQorZm9yZXZlci4KKworVGhpcyBzaG91bGQgbm90IGNhdXNlIHByb2JsZW1zIGZvciBhbnlib2R5LCBzaW5jZSBldmVyeWJvZHkgdXNpbmcgYQorMi4xLngga2VybmVsIHNob3VsZCBoYXZlIHVwZGF0ZWQgdGhlaXIgQyBsaWJyYXJ5IHRvIGEgc3VpdGFibGUgdmVyc2lvbgorYW55d2F5IChzZWUgdGhlIGZpbGUgIkRvY3VtZW50YXRpb24vQ2hhbmdlcyIuKQorCisxLjIgQWxsb3cgTWl4ZWQgTG9ja3MgQWdhaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLjIuMSBUeXBpY2FsIFByb2JsZW1zIC0gU2VuZG1haWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQmVjYXVzZSBzZW5kbWFpbCB3YXMgdW5hYmxlIHRvIHVzZSB0aGUgb2xkIGZsb2NrKCkgZW11bGF0aW9uLCBtYW55IHNlbmRtYWlsCitpbnN0YWxsYXRpb25zIHVzZSBmY250bCgpIGluc3RlYWQgb2YgZmxvY2soKS4gVGhpcyBpcyB0cnVlIG9mIFNsYWNrd2FyZSAzLjAKK2ZvciBleGFtcGxlLiBUaGlzIGdhdmUgcmlzZSB0byBzb21lIG90aGVyIHN1YnRsZSBwcm9ibGVtcyBpZiBzZW5kbWFpbCB3YXMKK2NvbmZpZ3VyZWQgdG8gcmVidWlsZCB0aGUgYWxpYXMgZmlsZS4gU2VuZG1haWwgdHJpZWQgdG8gbG9jayB0aGUgYWxpYXNlcy5kaXIKK2ZpbGUgd2l0aCBmY250bCgpIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdEQk0gcm91dGluZXMgdHJpZWQgdG8gbG9jayB0aGlzCitmaWxlIHdpdGggZmxvY2soKS4gV2l0aCBwcmUgMS4zLjk2IGtlcm5lbHMgdGhpcyBjb3VsZCByZXN1bHQgaW4gZGVhZGxvY2tzIHRoYXQsCitvdmVyIHRpbWUsIG9yIHVuZGVyIGEgdmVyeSBoZWF2eSBtYWlsIGxvYWQsIHdvdWxkIGV2ZW50dWFsbHkgY2F1c2UgdGhlIGtlcm5lbAordG8gbG9jayBzb2xpZCB3aXRoIGRlYWRsb2NrZWQgcHJvY2Vzc2VzLgorCisKKzEuMi4yIFRoZSBTb2x1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgc29sdXRpb24gSSBoYXZlIGNob3NlbiwgYWZ0ZXIgbXVjaCBleHBlcmltZW50YXRpb24gYW5kIGRpc2N1c3Npb24sCitpcyB0byBtYWtlIGZsb2NrKCkgYW5kIGZjbnRsKCkgbG9ja3Mgb2JsaXZpb3VzIHRvIGVhY2ggb3RoZXIuIEJvdGggY2FuCitleGlzdHMsIGFuZCBuZWl0aGVyIHdpbGwgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBvdGhlci4KKworSSB3YW50ZWQgdGhlIHR3byBsb2NrIHN0eWxlcyB0byBiZSBjb29wZXJhdGl2ZSwgYnV0IHRoZXJlIHdlcmUgc28gbWFueQorcmFjZSBhbmQgZGVhZGxvY2sgY29uZGl0aW9ucyB0aGF0IHRoZSBjdXJyZW50IHNvbHV0aW9uIHdhcyB0aGUgb25seQorcHJhY3RpY2FsIG9uZS4gSXQgcHV0cyB1cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcywgZm9yIGV4YW1wbGUsIFN1bk9TCis0LjEueCBhbmQgc2V2ZXJhbCBvdGhlciBjb21tZXJjaWFsIFVuaWNlcy4gVGhlIG9ubHkgT1MncyB0aGF0IHN1cHBvcnQKK2Nvb3BlcmF0aXZlIGZsb2NrKCkvZmNudGwoKSBhcmUgdGhvc2UgdGhhdCBlbXVsYXRlIGZsb2NrKCkgdXNpbmcKK2ZjbnRsKCksIHdpdGggYWxsIHRoZSBwcm9ibGVtcyB0aGF0IGltcGxpZXMuCisKKworMS4zIE1hbmRhdG9yeSBMb2NraW5nIEFzIEEgTW91bnQgT3B0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFuZGF0b3J5IGxvY2tpbmcsIGFzIGRlc2NyaWJlZCBpbiAnRG9jdW1lbnRhdGlvbi9tYW5kYXRvcnkudHh0JyB3YXMgcHJpb3IKK3RvIHRoaXMgcmVsZWFzZSBhIGdlbmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCB3YXMgdmFsaWQgZm9yIGFsbAorbW91bnRlZCBmaWxlc3lzdGVtcy4gVGhpcyBoYWQgYSBudW1iZXIgb2YgaW5oZXJlbnQgZGFuZ2Vycywgbm90IHRoZSBsZWFzdAorb2Ygd2hpY2ggd2FzIHRoZSBhYmlsaXR5IHRvIGZyZWV6ZSBhbiBORlMgc2VydmVyIGJ5IGFza2luZyBpdCB0byByZWFkIGEKK2ZpbGUgZm9yIHdoaWNoIGEgbWFuZGF0b3J5IGxvY2sgZXhpc3RlZC4KKworRnJvbSB0aGlzIHJlbGVhc2Ugb2YgdGhlIGtlcm5lbCwgbWFuZGF0b3J5IGxvY2tpbmcgY2FuIGJlIHR1cm5lZCBvbiBhbmQgb2ZmCitvbiBhIHBlci1maWxlc3lzdGVtIGJhc2lzLCB1c2luZyB0aGUgbW91bnQgb3B0aW9ucyAnbWFuZCcgYW5kICdub21hbmQnLgorVGhlIGRlZmF1bHQgaXMgdG8gZGlzYWxsb3cgbWFuZGF0b3J5IGxvY2tpbmcuIFRoZSBpbnRlbnRpb24gaXMgdGhhdAorbWFuZGF0b3J5IGxvY2tpbmcgb25seSBiZSBlbmFibGVkIG9uIGEgbG9jYWwgZmlsZXN5c3RlbSBhcyB0aGUgc3BlY2lmaWMgbmVlZAorYXJpc2VzLgorCitVbnRpbCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgbW91bnQoOCkgYmVjb21lcyBhdmFpbGFibGUgeW91IG1heSBoYXZlIHRvIGFwcGx5Cit0aGlzIHBhdGNoIHRvIHRoZSBtb3VudCBzb3VyY2VzIChiYXNlZCBvbiB0aGUgdmVyc2lvbiBkaXN0cmlidXRlZCB3aXRoIFJpY2sKK0ZhaXRoJ3MgdXRpbC1saW51eC0yLjUgcGFja2FnZSk6CisKKyoqKiBtb3VudC5jLm9yaWcJU2F0IEp1biAgOCAwOToxNDozMSAxOTk2CistLS0gbW91bnQuYwlTYXQgSnVuICA4IDA5OjEzOjAyIDE5OTYKKyoqKioqKioqKioqKioqKgorKioqIDEwMCwxMDUgKioqKgorLS0tIDEwMCwxMDcgLS0tLQorICAgIHsgIm5vYXV0byIsCTAsIE1TX05PQVVUTwl9LAkvKiBDYW4gIG9ubHkgYmUgbW91bnRlZCBleHBsaWNpdGx5ICovCisgICAgeyAidXNlciIsCTAsIE1TX1VTRVIJfSwJLyogQWxsb3cgb3JkaW5hcnkgdXNlciB0byBtb3VudCAqLworICAgIHsgIm5vdXNlciIsCTEsIE1TX1VTRVIJfSwJLyogRm9yYmlkIG9yZGluYXJ5IHVzZXIgdG8gbW91bnQgKi8KKysgICB7ICJtYW5kIiwJMCwgTVNfTUFORExPQ0sJfSwJLyogQWxsb3cgbWFuZGF0b3J5IGxvY2tzIG9uIHRoaXMgRlMgKi8KKysgICB7ICJub21hbmQiLAkxLCBNU19NQU5ETE9DSwl9LAkvKiBGb3JiaWQgbWFuZGF0b3J5IGxvY2tzIG9uIHRoaXMgRlMgKi8KKyAgICAvKiBhZGQgbmV3IG9wdGlvbnMgaGVyZSAqLworICAjaWZkZWYgTVNfTk9TVUIKKyAgICB7ICJzdWIiLAkxLCBNU19OT1NVQgl9LAkvKiBhbGxvdyBzdWJtb3VudHMgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbG9nby5naWYgYi9Eb2N1bWVudGF0aW9uL2xvZ28uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWU3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvZ28uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbG9nby50eHQgYi9Eb2N1bWVudGF0aW9uL2xvZ28udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NmYwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvZ28udHh0CkBAIC0wLDAgKzEsMTMgQEAKK1RoaXMgaXMgdGhlIGZ1bGwtY29sb3VyIHZlcnNpb24gb2YgdGhlIGN1cnJlbnRseSB1bm9mZmljaWFsIExpbnV4IGxvZ28KKygiY3VycmVudGx5IHVub2ZmaWNpYWwiIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSBoYXMgYmVlbiBubyBwYXBlcndvcmsgYW5kCit0aGF0IEkgaGF2ZSBub3QgcmVhbGx5IGFubm91bmNlZCBpdCB5ZXQpLiAgSXQgd2FzIGNyZWF0ZWQgYnkgTGFycnkgRXdpbmcsCithbmQgaXMgZnJlZWx5IHVzYWJsZSBhcyBsb25nIGFzIHlvdSBhY2tub3dsZWRnZSBMYXJyeSBhcyB0aGUgb3JpZ2luYWwKK2FydGlzdC4gCisKK05vdGUgdGhhdCB0aGVyZSBhcmUgYmxhY2stYW5kLXdoaXRlIHZlcnNpb25zIG9mIHRoaXMgYXZhaWxhYmxlIHRoYXQKK3NjYWxlIGRvd24gdG8gc21hbGxlciBzaXplcyBhbmQgYXJlIGJldHRlciBmb3IgbGV0dGVyaGVhZHMgb3Igd2hhdGV2ZXIKK3lvdSB3YW50IHRvIHVzZSBpdCBmb3I6IGZvciB0aGUgZnVsbCByYW5nZSBvZiBsb2dvcyB0YWtlIGEgbG9vayBhdAorTGFycnkncyB3ZWItcGFnZToKKworCWh0dHA6Ly93d3cuaXNjLnRhbXUuZWR1L35sZXdpbmcvbGludXgvCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbTY4ay8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vbTY4ay8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE0ZTlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tNjhrLzAwLUlOREVYCkBAIC0wLDAgKzEsNSBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZQora2VybmVsLW9wdGlvbnMudHh0CisJLSBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgTGludXgvbTY4aworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL202OGsvUkVBRE1FLmJ1ZGRoYSBiL0RvY3VtZW50YXRpb24vbTY4ay9SRUFETUUuYnVkZGhhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODAyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL202OGsvUkVBRE1FLmJ1ZGRoYQpAQCAtMCwwICsxLDIxMCBAQAorCitUaGUgQW1pZ2EgQnVkZGhhIGFuZCBDYXR3ZWFzZWwgSURFIERyaXZlciAocGFydCBvZiBpZGUuYykgd2FzIHdyaXR0ZW4gYnkKK0dlZXJ0IFV5dHRlcmhvZXZlbiBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHNwZWNpZmljYXRpb25zOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXIgbWFwIG9mIHRoZSBCdWRkaGEgSURFIGNvbnRyb2xsZXIgYW5kIHRoZQorQnVkZGhhLXBhcnQgb2YgdGhlIENhdHdlYXNlbCBab3Jyby1JSSB2ZXJzaW9uCisKK1RoZSBBdXRvY29uZmlndXJhdGlvbiBoYXMgYmVlbiBpbXBsZW1lbnRlZCBqdXN0IGFzIENvbW1vZG9yZQorZGVzY3JpYmVkICBpbiAgdGhlaXIgIG1hbnVhbHMsIG5vIHRyaWNrcyBoYXZlIGJlZW4gdXNlZCAoZm9yCitleGFtcGxlIGxlYXZpbmcgc29tZSBhZGRyZXNzIGxpbmVzIG91dCBvZiB0aGUgZXF1YXRpb25zLi4uKS4KK0lmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSB0aGUgYm9hcmQgeW91cnNlbGYgKGZvciBleGFtcGxlIGxldAorYSAgTGludXggIGtlcm5lbCAgY29uZmlndXJlIHRoZSBjYXJkKSwgbG9vayBhdCB0aGUgQ29tbW9kb3JlCitEb2NzLiAgUmVhZGluZyB0aGUgbmliYmxlcyBzaG91bGQgZ2l2ZSB0aGlzIGluZm9ybWF0aW9uOgorCitWZW5kb3IgbnVtYmVyOiA0NjI2ICgkMTIxMikKK3Byb2R1Y3QgbnVtYmVyOiAwICg0MiBmb3IgQ2F0d2Vhc2VsIFotSUkpCitTZXJpYWwgbnVtYmVyOiAwCitSb20tdmVjdG9yOiAkMTAwMAorCitUaGUgIGNhcmQgIHNob3VsZCBiZSBhIFotSUkgYm9hcmQsIHNpemUgNjRLLCBub3QgZm9yIGZyZWVtZW0KK2xpc3QsIFJvbS1WZWt0b3IgaXMgdmFsaWQsIG5vIHNlY29uZCBBdXRvY29uZmlnLWJvYXJkIG9uIHRoZQorc2FtZSBjYXJkLCBubyBzcGFjZSBwcmVmZXJlbmNlLCBzdXBwb3J0cyAiU2h1dHVwX2ZvcmV2ZXIiLgorCitTZXR0aW5nICB0aGUgIGJhc2UgYWRkcmVzcyBzaG91bGQgYmUgZG9uZSBpbiB0d28gc3RlcHMsIGp1c3QKK2FzICB0aGUgQW1pZ2EgS2lja3N0YXJ0IGRvZXM6ICBUaGUgbG93ZXIgbmliYmxlIG9mIHRoZSA4LUJpdAorYWRkcmVzcyBpcyB3cml0dGVuIHRvICQ0YSwgdGhlbiB0aGUgd2hvbGUgQnl0ZSBpcyB3cml0dGVuIHRvCiskNDgsIHdoaWxlIGl0IGRvZXNuJ3QgbWF0dGVyIGhvdyBvZnRlbiB5b3UncmUgd3JpdGluZyB0byAkNGEKK2FzICBsb25nIGFzICQ0OCBpcyBub3QgdG91Y2hlZC4gIEFmdGVyICQ0OCBoYXMgYmVlbiB3cml0dGVuLAordGhlICB3aG9sZSBjYXJkIGRpc2FwcGVhcnMgZnJvbSAkZTggYW5kIGlzIG1hcHBlZCB0byB0aGUgbmV3CithZGRyZXNzIGp1c3Qgd3JpdHRlbi4gIE1ha2Ugc2h1cmUgJDRhIGlzIHdyaXR0ZW4gYmVmb3JlICQ0OCwKK290aGVyd2lzZSB5b3VyIGNoYW5jZSBpcyBvbmx5IDE6MTYgdG8gZmluZCB0aGUgYm9hcmQgOi0pLgorCitUaGUgbG9jYWwgbWVtb3J5LW1hcCBpcyBldmVuIGFjdGl2ZSB3aGVuIG1hcHBlZCB0byAkZTg6CisKKyQwLSQ3ZQkJQXV0b2tvbmZpZy1zcGFjZSwgc2VlIFotSUkgZG9jcy4KKworJDgwLSQ3ZmQJcmVzZXJ2ZWQKKworJDdmZQkJU3BlZWQtc2VsZWN0IFJlZ2lzdGVyOiBSZWFkICYgV3JpdGUKKwkJKGRlc2NyaXB0aW9uIHNlZSBmdXJ0aGVyIGRvd24pCisKKyQ4MDAtJDhmZglJREUtU2VsZWN0IDAgKFBvcnQgMCwgUmVnaXN0ZXIgc2V0IDApCisKKyQ5MDAtJDlmZglJREUtU2VsZWN0IDEgKFBvcnQgMCwgUmVnaXN0ZXIgc2V0IDEpCisKKyRhMDAtJGFmZglJREUtU2VsZWN0IDIgKFBvcnQgMSwgUmVnaXN0ZXIgc2V0IDApCisKKyRiMDAtJGJmZglJREUtU2VsZWN0IDMgKFBvcnQgMSwgUmVnaXN0ZXIgc2V0IDEpCisKKyRjMDAtJGNmZglJREUtU2VsZWN0IDQgKFBvcnQgMiwgUmVnaXN0ZXIgc2V0IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENhdHdlYXNlbCBvbmx5ISkKKworJGQwMC0kZGZmCUlERS1TZWxlY3QgNSAoUG9ydCAzLCBSZWdpc3RlciBzZXQgMSwKKwkJCSAgICAgIENhdHdlYXNlbCBvbmx5ISkKKworJGUwMC0kZWZmCWxvY2FsIGV4cGFuc2lvbiBwb3J0LCBvbiBDYXR3ZWFzZWwgWi1JSSB0aGUgCisJCUNhdHdlYXNlbCByZWdpc3RlcnMgYXJlIGFsc28gbWFwcGVkIGhlcmUuCisJCU5ldmVyIHRvdWNoLCB1c2UgbXVsdGlkaXNrLmRldmljZSEKKwkJCiskZjAwCQlyZWFkIG9ubHksIEJ5dGUtYWNjZXNzOiBCaXQgNyBzaG93cyB0aGUgCisJCWxldmVsIG9mIHRoZSBJUlEtbGluZSBvZiBJREUgcG9ydCAwLiAKKworJGYwMS0kZjNmCW1pcnJvciBvZiAkZjAwCisKKyRmNDAJCXJlYWQgb25seSwgQnl0ZS1hY2Nlc3M6IEJpdCA3IHNob3dzIHRoZSAKKwkJbGV2ZWwgb2YgdGhlIElSUS1saW5lIG9mIElERSBwb3J0IDEuIAorCiskZjQxLSRmN2YJbWlycm9yIG9mICRmNDAKKworJGY4MAkJcmVhZCBvbmx5LCBCeXRlLWFjY2VzczogQml0IDcgc2hvd3MgdGhlIAorCQlsZXZlbCBvZiB0aGUgSVJRLWxpbmUgb2YgSURFIHBvcnQgMi4gCisJCShDYXR3ZWFzZWwgb25seSEpCisKKyRmODEtJGZiZgltaXJyb3Igb2YgJGY4MAorCiskZmMwCQl3cml0ZS1vbmx5OiBXcml0aW5nIGFueSB2YWx1ZSB0byB0aGlzCisJCXJlZ2lzdGVyIGVuYWJsZXMgSVJRcyB0byBiZSBwYXNzZWQgZnJvbSB0aGUgCisJCUlERSBwb3J0cyB0byB0aGUgWm9ycm8gYnVzLiBUaGlzIG1lY2hhbmlzbSAKKwkJaGFzIGJlZW4gaW1wbGVtZW50ZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIAorCQloYXJkZGlza3MgdGhhdCBhcmUgZWl0aGVyIGRlZmVjdGl2ZSBvciBoYXZlCisJCWEgYnVnZ3kgZmlybXdhcmUgYW5kIHB1bGwgdGhlIElSUSBsaW5lIHVwIAorCQl3aGlsZSBzdGFydGluZyB1cC4gSWYgaW50ZXJydXB0cyB3b3VsZCAKKwkJYWx3YXlzIGJlIHBhc3NlZCB0byB0aGUgYnVzLCB0aGUgY29tcHV0ZXIgCisJCW1pZ2h0IG5vdCBzdGFydCB1cC4gT25jZSBlbmFibGVkLCB0aGlzIGZsYWcgCisJCWNhbiBub3QgYmUgZGlzYWJsZWQgYWdhaW4uIFRoZSBsZXZlbCBvZiB0aGUgCisJCWZsYWcgY2FuIG5vdCBiZSBkZXRlcm1pbmVkIGJ5IHNvZnR3YXJlIAorCQkod2hhdCBmb3I/IFdyaXRlIHRvIG1lIGlmIGl0J3MgbmVjZXNzYXJ5ISkuCisKKyRmYzEtJGZmZgltaXJyb3Igb2YgJGZjMAorCiskMTAwMC0kZmZmZglCdWRkaGEtUm9tIHdpdGggb2Zmc2V0ICQxMDAwIGluIHRoZSByb20KKwkJY2hpcC4gVGhlIGFkZHJlc3NlcyAkMCB0byAkZmZmIG9mIHRoZSByb20gCisJCWNoaXAgY2Fubm90IGJlIHJlYWQuIFJvbSBpcyBCeXRlLXdpZGUgYW5kCisJCW1hcHBlZCB0byBldmVuIGFkZHJlc3Nlcy4KKworVGhlICBJREUgcG9ydHMgaXNzdWUgYW4gSU5UMi4gIFlvdSBjYW4gcmVhZCB0aGUgbGV2ZWwgb2YgdGhlCitJUlEtbGluZXMgIG9mICB0aGUgIElERS1wb3J0cyBieSByZWFkaW5nIGZyb20gdGhlIHRocmVlICh0d28KK2ZvciAgQnVkZGhhLW9ubHkpICByZWdpc3RlcnMgICRmMDAsICRmNDAgYW5kICRmODAuICBUaGlzIHdheQorbW9yZSAgdGhhbiBvbmUgSS9PIHJlcXVlc3QgY2FuIGJlIGhhbmRsZWQgYW5kIHlvdSBjYW4gZWFzaWx5CitkZXRlcm1pbmUgIHdoYXQgIGRyaXZlciAgaGFzICB0byBzZXJ2ZSB0aGUgSU5UMi4gIEJ1ZGRoYSBhbmQKK0NhdHdlYXNlbCAgZXhwYW5zaW9uICBib2FyZHMgIGNhbiBpc3N1ZSBhbiBJTlQ2LiAgQSBzZXBhcmF0ZQorbWVtb3J5ICBtYXAgIGlzIGF2YWlsYWJsZSBmb3IgdGhlIEkvTyBtb2R1bGUgYW5kIHRoZSBzeXNvcCdzCitJL08gbW9kdWxlLgorCitUaGUgSURFIHBvcnRzIGFyZSBmZWQgYnkgdGhlIGFkZHJlc3MgbGluZXMgQTIgdG8gQTQsIGp1c3QgYXMKK3RoZSAgQW1pZ2EgIDEyMDAgIGFuZCAgQW1pZ2EgIDQwMDAgIElERSBwb3J0cyBhcmUuICBUaGlzIHdheQorZXhpc3RpbmcgIGRyaXZlcnMgIGNhbiBiZSBlYXNpbHkgcG9ydGVkIHRvIEJ1ZGRoYS4gIEEgbW92ZS5sCitwb2xscyAgdHdvICB3b3JkcyAgb3V0IG9mIHRoZSBzYW1lIGFkZHJlc3Mgb2YgSURFIHBvcnQgc2luY2UKK2V2ZXJ5ICB3b3JkICBpcyAgbWlycm9yZWQgIG9uY2UuICBtb3ZlbSBpcyBub3QgcG9zc2libGUsIGJ1dAoraXQncyAgbm90ICBuZWNlc3NhcnkgIGVpdGhlciwgIGJlY2F1c2UgIHlvdSBjYW4gb25seSBzcGVlZHVwCis2ODAwMCAgc3lzdGVtcyAgd2l0aCAgdGhpcyAgdGVjaG5pcXVlLiAgIEEgNjgwMjAgc3lzdGVtIHdpdGgKK2Zhc3RtZW0gaXMgZmFzdGVyIHdpdGggbW92ZS5sLgorCitJZiB5b3UncmUgdXNpbmcgdGhlIG1pcnJvcmVkIHJlZ2lzdGVycyBvZiB0aGUgSURFLXBvcnRzIHdpdGgKK0E2PTEsICB0aGUgQnVkZGhhIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgc3BlZWQgdGhhdCB5b3UgaGF2ZQorc2VsZWN0ZWQgIGluICB0aGUgIHNwZWVkICByZWdpc3RlciAoc2VlIGZ1cnRoZXIgZG93bikuICBXaXRoCitBNj0xICAoZm9yIGV4YW1wbGUgJDg0MCBmb3IgcG9ydCAwLCByZWdpc3RlciBzZXQgMCksIGEgNzgwbnMKK2FjY2VzcyAgaXMgYmVpbmcgbWFkZS4gIFRoZXNlIHJlZ2lzdGVycyBzaG91bGQgYmUgdXNlZCBmb3IgYQorY29tbWFuZCAgIGFjY2VzcyAgIHRvICB0aGUgIGhhcmRkaXNrL0NELVJvbSwgIHNpbmNlICBjb21tYW5kCithY2Nlc3NlcyAgYXJlIEJ5dGUtd2lkZSBhbmQgaGF2ZSB0byBiZSBtYWRlIHNsb3dlciBhY2NvcmRpbmcKK3RvIHRoZSBBVEEtWDNUOSBtYW51YWwuCisKK05vdyAgZm9yIHRoZSBzcGVlZC1yZWdpc3RlcjogIFRoZSByZWdpc3RlciBpcyBieXRlLXdpZGUsIGFuZAorb25seSAgdGhlICB1cHBlciAgdGhyZWUgIGJpdHMgYXJlIHVzZWQgKEJpdHMgNyB0byA1KS4gIEJpdCA0CittdXN0ICBhbHdheXMgIGJlIHNldCB0byAxIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBsYXRlciBCdWRkaGEKK3ZlcnNpb25zICAoaWYgIEknbGwgIGV2ZXIgIHVwZGF0ZSB0aGlzIG9uZSkuICBJIHByZXN1bWUgdGhhdAorSSdsbCAgbmV2ZXIgdXNlIHRoZSBsb3dlciBmb3VyIGJpdHMsIGJ1dCB0aGV5IGhhdmUgdG8gYmUgc2V0Cit0byAxIGJ5IGRlZmluaXRpb24uCisgIFRoZSAgdmFsdWVzIGluIHRoaXMgdGFibGUgaGF2ZSB0byBiZSBzaGlmdGVkIDUgYml0cyB0byB0aGUKK2xlZnQgYW5kIG9yJ2Qgd2l0aCAkMWYgKHRoaXMgc2V0cyB0aGUgbG93ZXIgNSBiaXRzKS4KKworQWxsICB0aGUgdGltaW5ncyBoYXZlIGluIGNvbW1vbjogIFNlbGVjdCBhbmQgSU9SL0lPVyByaXNlIGF0Cit0aGUgIHNhbWUgIHRpbWUuICAgSU9SICBhbmQgIElPVyBoYXZlIGEgcHJvcGFnYXRpb24gZGVsYXkgb2YKK2Fib3V0ICAzMG5zICB0byAgdGhlIGNsb2NrcyBvbiB0aGUgWm9ycm8gYnVzLCB0aGF0J3Mgd2h5IHRoZQordmFsdWVzICBhcmUgbm8gbXVsdGlwbGUgb2YgNzEuICBPbmUgY2xvY2stY3ljbGUgaXMgNzFucyBsb25nCisoZXhhY3RseSA3MCw1IGF0IDE0LDE4IE1oeiBvbiBQQUwgc3lzdGVtcykuCisKK3ZhbHVlIDAgKERlZmF1bHQgYWZ0ZXIgcmVzZXQpCisKKzQ5N25zIFNlbGVjdCAoNyBjbG9jayBjeWNsZXMpICwgSU9SL0lPVyBhZnRlciAxNzJucyAoMiBjbG9jayBjeWNsZXMpCisoc2FtZSB0aW1pbmcgYXMgdGhlIEFtaWdhIDEyMDAgZG9lcyBvbiBpdCdzIElERSBwb3J0IHdpdGhvdXQKK2FjY2VsZXJhdG9yIGNhcmQpCisKK3ZhbHVlIDEKKworNjM5bnMgU2VsZWN0ICg5IGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMjQzbnMgKDMgY2xvY2sgY3ljbGVzKQorCit2YWx1ZSAyCisKKzc4MW5zIFNlbGVjdCAoMTEgY2xvY2sgY3ljbGVzKSwgSU9SL0lPVyBhZnRlciAzMTRucyAoNCBjbG9jayBjeWNsZXMpCisKK3ZhbHVlIDMKKworMzU1bnMgU2VsZWN0ICg1IGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMTAxbnMgKDEgY2xvY2sgY3ljbGUpCisKK3ZhbHVlIDQKKworMzU1bnMgU2VsZWN0ICg1IGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMTcybnMgKDIgY2xvY2sgY3ljbGVzKQorCit2YWx1ZSA1CisKKzM1NW5zIFNlbGVjdCAoNSBjbG9jayBjeWNsZXMpLCBJT1IvSU9XIGFmdGVyIDI0M25zICgzIGNsb2NrIGN5Y2xlcykKKwordmFsdWUgNgorCisxMDY1bnMgU2VsZWN0ICgxNSBjbG9jayBjeWNsZXMpLCBJT1IvSU9XIGFmdGVyIDMxNG5zICg0IGNsb2NrIGN5Y2xlcykKKwordmFsdWUgNworCiszNTVucyBTZWxlY3QsICg1IGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMTAxbnMgKDEgY2xvY2sgY3ljbGUpCisKK1doZW4gYWNjZXNzaW5nIElERSByZWdpc3RlcnMgd2l0aCBBNj0xIChmb3IgZXhhbXBsZSAkODR4KSwKK3RoZSB0aW1pbmcgd2lsbCBhbHdheXMgYmUgbW9kZSAwIDgtYml0IGNvbXBhdGlibGUsIG5vIG1hdHRlcgord2hhdCB5b3UgaGF2ZSBzZWxlY3RlZCBpbiB0aGUgc3BlZWQgcmVnaXN0ZXI6CisKKzc4MW5zIHNlbGVjdCwgSU9SL0lPVyBhZnRlciA0IGNsb2NrIGN5Y2xlcyAoPTMxNG5zKSBha3RpdmUuIAorCitBbGwgIHRoZSAgdGltaW5ncyB3aXRoIGEgdmVyeSBzaG9ydCBzZWxlY3Qtc2lnbmFsICh0aGUgMzU1bnMKK2Zhc3QgIGFjY2Vzc2VzKSAgZGVwZW5kICBvbiB0aGUgYWNjZWxlcmF0b3IgY2FyZCB1c2VkIGluIHRoZQorc3lzdGVtOiAgU29tZXRpbWVzIHR3byBtb3JlIGNsb2NrIGN5Y2xlcyBhcmUgaW5zZXJ0ZWQgYnkgdGhlCitidXMgIGludGVyZmFjZSwgIG1ha2luZyAgdGhlICB3aG9sZSBhY2Nlc3MgNDk3bnMgbG9uZy4gIFRoaXMKK2RvZXNuJ3QgIGFmZmVjdCAgdGhlICByZWxpYWJpbGl0eSAgb2YgdGhlIGNvbnRyb2xsZXIgbm9yIHRoZQorcGVyZm9ybWFuY2UgIG9mICB0aGUgIGNhcmQsICBzaW5jZSAgdGhpcyBkb2Vzbid0IGhhcHBlbiB2ZXJ5CitvZnRlbi4KKworQWxsICB0aGUgIHRpbWluZ3MgIGFyZSAgY2FsY3VsYXRlZCAgYW5kICBvbmx5ICBjb25maXJtZWQgIGJ5CittZWFzdXJlbWVudHMgIHRoYXQgYWxsb3dlZCBtZSB0byBjb3VudCB0aGUgY2xvY2sgY3ljbGVzLiAgSWYKK3RoZSAgc3lzdGVtICBpcyBjbG9ja2VkIGJ5IGFuIG9zY2lsbGF0b3Igb3RoZXIgdGhhbiAyOCwzNzUxNgorTWh6ICAoZm9yICBleGFtcGxlICB0aGUgIE5UU0MtZnJlcXVlbmN5ICAyOCw2MzYzNiBNaHopLCBlYWNoCitjbG9jayAgY3ljbGUgaXMgc2hvcnRlbmVkIHRvIGEgYml0IGxlc3MgdGhhbiA3MG5zIChub3Qgd29ydGgKK21lbnRpb25pbmcpLiAgIFlvdSAgY291bGQgdGhpbmsgb2YgYSBzbWFsbCBwZXJmb3JtYW5jZSBib29zdAorYnkgIG92ZXJjbG9ja2luZyAgdGhlICBzeXN0ZW0sICBidXQgIHlvdSB3b3VsZCBlaXRoZXIgbmVlZCBhCittdWx0aXN5bmMgIG1vbml0b3IsICBvciAgYSAgZ3JhcGhpY3MgY2FyZCwgYW5kIHlvdXIgaW50ZXJuYWwKK2Rpc2tkcml2ZSB3b3VsZCBnbyBjcmF6eSwgdGhhdCdzIHdoeSB5b3Ugc2hvdWxkbid0IHR1bmUgeW91cgorQW1pZ2EgdGhpcyB3YXkuCisKK0dpdmluZyAgeW91ICB0aGUgIHBvc3NpYmlsaXR5ICB0byAgd3JpdGUgIHNvZnR3YXJlICB0aGF0ICBpcworY29tcGF0aWJsZSAgd2l0aCBib3RoIHRoZSBCdWRkaGEgYW5kIHRoZSBDYXR3ZWFzZWwgWi1JSSwgVGhlCitCdWRkaGEgIGFjdHMgIGp1c3QgIGxpa2UgIGEgIENhdHdlYXNlbCAgWi1JSSAgd2l0aCBubyBkZXZpY2UKK2Nvbm5lY3RlZCAgdG8gIHRoZSAgdGhpcmQgIElERS1wb3J0LiAgIFRoZSBJUlEtcmVnaXN0ZXIgJGY4MAorYWx3YXlzICBzaG93cyBhICJubyBJUlEgaGVyZSIgb24gdGhlIEJ1ZGRoYSwgYW5kIGFjY2Vzc2VzIHRvCit0aGUgIHRoaXJkICBJREUgIHBvcnQgIGFyZSAgZ29pbmcgaW50byBkYXRhJ3MgTmlyd2FuYSBvbiB0aGUKK0J1ZGRoYS4KKworCQkJICAgIEplbnMgU2No9m5mZWxkIGZlYnJ1YXJ5IDE5dGgsIDE5OTcKKwkJCQkJdXBkYXRlZCBtYXkgMjd0aCwgMTk5NworCQkJICAgICBlTWFpbDogc3lzb3BAbm9zdGxnaWMudG5nLm9jaGUuZGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tNjhrL2tlcm5lbC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vbTY4ay9rZXJuZWwtb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5MWJhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbTY4ay9rZXJuZWwtb3B0aW9ucy50eHQKQEAgLTAsMCArMSw5NjQgQEAKKworCisJCQkJICBDb21tYW5kIExpbmUgT3B0aW9ucyBmb3IgTGludXgvbTY4aworCQkJCSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTGFzdCBVcGRhdGU6IDIgTWF5IDE5OTkKK0xpbnV4L202OGsgdmVyc2lvbjogMi4yLjYKK0F1dGhvcjogUm9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGUgKFJvbWFuIEhvZGVrKQorVXBkYXRlOiBqZHNAa29tLmF1Yy5kayAoSmVzIFNvcmVuc2VuKSBhbmQgZmFxQGxpbnV4LW02OGsub3JnIChDaHJpcyBMYXdyZW5jZSkKKworMCkgSW50cm9kdWN0aW9uCis9PT09PT09PT09PT09PT0KKworICBPZnRlbiBJJ3ZlIGJlZW4gYXNrZWQgd2hpY2ggY29tbWFuZCBsaW5lIG9wdGlvbnMgdGhlIExpbnV4L202OGsKK2tlcm5lbCB1bmRlcnN0YW5kcywgb3IgaG93IHRoZSBleGFjdCBzeW50YXggZm9yIHRoZSAuLi4gb3B0aW9uIGlzLCBvcgorLi4uIGFib3V0IHRoZSBvcHRpb24gLi4uIC4gSSBob3BlLCB0aGlzIGRvY3VtZW50IHN1cHBsaWVzIGFsbCB0aGUKK2Fuc3dlcnMuLi4KKworICBOb3RlIHRoYXQgc29tZSBvcHRpb25zIG1pZ2h0IGJlIG91dGRhdGVkLCB0aGVpciBkZXNjcmlwdGlvbnMgYmVpbmcKK2luY29tcGxldGUgb3IgbWlzc2luZy4gUGxlYXNlIHVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYW5kIHNlbmQgaW4gdGhlCitwYXRjaGVzLgorCisKKzEpIE92ZXJ2aWV3IG9mIHRoZSBLZXJuZWwncyBPcHRpb24gUHJvY2Vzc2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBrZXJuZWwga25vd3MgdGhyZWUga2luZHMgb2Ygb3B0aW9ucyBvbiBpdHMgY29tbWFuZCBsaW5lOgorCisgIDEpIGtlcm5lbCBvcHRpb25zCisgIDIpIGVudmlyb25tZW50IHNldHRpbmdzCisgIDMpIGFyZ3VtZW50cyBmb3IgaW5pdAorCitUbyB3aGljaCBvZiB0aGVzZSBjbGFzc2VzIGFuIGFyZ3VtZW50IGJlbG9uZ3MgaXMgZGV0ZXJtaW5lZCBhcworZm9sbG93czogSWYgdGhlIG9wdGlvbiBpcyBrbm93biB0byB0aGUga2VybmVsIGl0c2VsZiwgaS5lLiBpZiB0aGUgbmFtZQorKHRoZSBwYXJ0IGJlZm9yZSB0aGUgJz0nKSBvciwgaW4gc29tZSBjYXNlcywgdGhlIHdob2xlIGFyZ3VtZW50IHN0cmluZworaXMga25vd24gdG8gdGhlIGtlcm5lbCwgaXQgYmVsb25ncyB0byBjbGFzcyAxLiBPdGhlcndpc2UsIGlmIHRoZQorYXJndW1lbnQgY29udGFpbnMgYW4gJz0nLCBpdCBpcyBvZiBjbGFzcyAyLCBhbmQgdGhlIGRlZmluaXRpb24gaXMgcHV0CitpbnRvIGluaXQncyBlbnZpcm9ubWVudC4gQWxsIG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIGluaXQgYXMKK2NvbW1hbmQgbGluZSBvcHRpb25zLgorCisgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB2YWxpZCBrZXJuZWwgb3B0aW9ucyBmb3IgTGludXgvbTY4ayBpbgordGhlIHZlcnNpb24gbWVudGlvbmVkIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuIExhdGVyIHJldmlzaW9ucyBtYXkKK2FkZCBuZXcgc3VjaCBvcHRpb25zLCBhbmQgc29tZSBtYXkgYmUgbWlzc2luZyBpbiBvbGRlciB2ZXJzaW9ucy4KKworICBJbiBnZW5lcmFsLCB0aGUgdmFsdWUgKHRoZSBwYXJ0IGFmdGVyIHRoZSAnPScpIG9mIGFuIG9wdGlvbiBpcyBhCitsaXN0IG9mIHZhbHVlcyBzZXBhcmF0ZWQgYnkgY29tbWFzLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdmFsdWVzCitpcyB1cCB0byB0aGUgZHJpdmVyIHRoYXQgIm93bnMiIHRoZSBvcHRpb24uIFRoaXMgYXNzb2NpYXRpb24gb2YKK29wdGlvbnMgd2l0aCBkcml2ZXJzIGlzIGFsc28gdGhlIHJlYXNvbiB0aGF0IHNvbWUgYXJlIGZ1cnRoZXIKK3N1YmRpdmlkZWQuCisKKworMikgR2VuZXJhbCBLZXJuZWwgT3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisyLjEpIHJvb3Q9CistLS0tLS0tLS0tCisKK1N5bnRheDogcm9vdD0vZGV2LzxkZXZpY2U+CisgICAgb3I6IHJvb3Q9PGhleF9udW1iZXI+CisKK1RoaXMgdGVsbHMgdGhlIGtlcm5lbCB3aGljaCBkZXZpY2UgaXQgc2hvdWxkIG1vdW50IGFzIHRoZSByb290CitmaWxlc3lzdGVtLiBUaGUgZGV2aWNlIG11c3QgYmUgYSBibG9jayBkZXZpY2Ugd2l0aCBhIHZhbGlkIGZpbGVzeXN0ZW0KK29uIGl0LgorCisgIFRoZSBmaXJzdCBzeW50YXggZ2l2ZXMgdGhlIGRldmljZSBieSBuYW1lLiBUaGVzZSBuYW1lcyBhcmUgY29udmVydGVkCitpbnRvIGEgbWFqb3IvbWlub3IgbnVtYmVyIGludGVybmFsbHkgaW4gdGhlIGtlcm5lbCBpbiBhbiB1bnVzdWFsIHdheS4KK05vcm1hbGx5LCB0aGlzICJjb252ZXJzaW9uIiBpcyBkb25lIGJ5IHRoZSBkZXZpY2UgZmlsZXMgaW4gL2RldiwgYnV0Cit0aGlzIGlzbid0IHBvc3NpYmxlIGhlcmUsIGJlY2F1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSAod2l0aCAvZGV2KQoraXNuJ3QgbW91bnRlZCB5ZXQuLi4gU28gdGhlIGtlcm5lbCBwYXJzZXMgdGhlIG5hbWUgaXRzZWxmLCB3aXRoIHNvbWUKK2hhcmRjb2RlZCBuYW1lIHRvIG51bWJlciBtYXBwaW5ncy4gVGhlIG5hbWUgbXVzdCBhbHdheXMgYmUgYQorY29tYmluYXRpb24gb2YgdHdvIG9yIHRocmVlIGxldHRlcnMsIGZvbGxvd2VkIGJ5IGEgZGVjaW1hbCBudW1iZXIuCitWYWxpZCBuYW1lcyBhcmU6CisKKyAgL2Rldi9yYW06IC0+IDB4MDEwMCAoaW5pdGlhbCByYW1kaXNrKQorICAvZGV2L2hkYTogLT4gMHgwMzAwIChmaXJzdCBJREUgZGlzaykKKyAgL2Rldi9oZGI6IC0+IDB4MDM0MCAoc2Vjb25kIElERSBkaXNrKQorICAvZGV2L3NkYTogLT4gMHgwODAwIChmaXJzdCBTQ1NJIGRpc2spCisgIC9kZXYvc2RiOiAtPiAweDA4MTAgKHNlY29uZCBTQ1NJIGRpc2spCisgIC9kZXYvc2RjOiAtPiAweDA4MjAgKHRoaXJkIFNDU0kgZGlzaykKKyAgL2Rldi9zZGQ6IC0+IDB4MDgzMCAoZm9ydGggU0NTSSBkaXNrKQorICAvZGV2L3NkZTogLT4gMHgwODQwIChmaWZ0aCBTQ1NJIGRpc2spCisgIC9kZXYvZmQgOiAtPiAweDAyMDAgKGZsb3BweSBkaXNrKQorICAvZGV2L3hkYTogLT4gMHgwYzAwIChmaXJzdCBYVCBkaXNrLCB1bnVzZWQgaW4gTGludXgvbTY4aykKKyAgL2Rldi94ZGI6IC0+IDB4MGM0MCAoc2Vjb25kIFhUIGRpc2ssIHVudXNlZCBpbiBMaW51eC9tNjhrKQorICAvZGV2L2FkYTogLT4gMHgxYzAwIChmaXJzdCBBQ1NJIGRldmljZSkKKyAgL2Rldi9hZGI6IC0+IDB4MWMxMCAoc2Vjb25kIEFDU0kgZGV2aWNlKQorICAvZGV2L2FkYzogLT4gMHgxYzIwICh0aGlyZCBBQ1NJIGRldmljZSkKKyAgL2Rldi9hZGQ6IC0+IDB4MWMzMCAoZm9ydGggQUNTSSBkZXZpY2UpCisKK1RoZSBsYXN0IGZvdXIgbmFtZXMgYXJlIGF2YWlsYWJsZSBvbmx5IGlmIHRoZSBrZXJuZWwgaGFzIGJlZW4gY29tcGlsZWQKK3dpdGggQXRhcmkgYW5kIEFDU0kgc3VwcG9ydC4KKworICBUaGUgbmFtZSBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgZGVjaW1hbCBudW1iZXIsIHRoYXQgc3RhbmRzIGZvciB0aGUKK3BhcnRpdGlvbiBudW1iZXIuIEludGVybmFsbHksIHRoZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIGlzIGp1c3QKK2FkZGVkIHRvIHRoZSBkZXZpY2UgbnVtYmVyIG1lbnRpb25lZCBpbiB0aGUgdGFibGUgYWJvdmUuIFRoZQorZXhjZXB0aW9ucyBhcmUgL2Rldi9yYW0gYW5kIC9kZXYvZmQsIHdoZXJlIC9kZXYvcmFtIHJlZmVycyB0byBhbgoraW5pdGlhbCByYW1kaXNrIGxvYWRlZCBieSB5b3VyIGJvb3RzdHJhcCBwcm9ncmFtIChwbGVhc2UgY29uc3VsdCB0aGUKK2luc3RydWN0aW9ucyBmb3IgeW91ciBib290c3RyYXAgcHJvZ3JhbSB0byBmaW5kIG91dCBob3cgdG8gbG9hZCBhbgoraW5pdGlhbCByYW1kaXNrKS4gQXMgb2Yga2VybmVsIHZlcnNpb24gMi4wLjE4IHlvdSBtdXN0IHNwZWNpZnkKKy9kZXYvcmFtIGFzIHRoZSByb290IGRldmljZSBpZiB5b3Ugd2FudCB0byBib290IGZyb20gYW4gaW5pdGlhbAorcmFtZGlzay4gRm9yIHRoZSBmbG9wcHkgZGV2aWNlcywgL2Rldi9mZCwgdGhlIG51bWJlciBzdGFuZHMgZm9yIHRoZQorZmxvcHB5IGRyaXZlIG51bWJlciAodGhlcmUgYXJlIG5vIHBhcnRpdGlvbnMgb24gZmxvcHB5IGRpc2tzKS4gSS5lLiwKKy9kZXYvZmQwIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGRyaXZlLCAvZGV2L2ZkMSBmb3IgdGhlIHNlY29uZCwgYW5kIHNvCitvbi4gU2luY2UgdGhlIG51bWJlciBpcyBqdXN0IGFkZGVkLCB5b3UgY2FuIGFsc28gZm9yY2UgdGhlIGRpc2sgZm9ybWF0CitieSBhZGRpbmcgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDMuIElmIHlvdSBsb29rIGludG8geW91ciAvZGV2CitkaXJlY3RvcnksIHVzZSBjYW4gc2VlIHRoZSAvZGV2L2ZkMEQ3MjAgaGFzIG1ham9yIDIgYW5kIG1pbm9yIDE2LiBZb3UKK2NhbiBzcGVjaWZ5IHRoaXMgZGV2aWNlIGZvciB0aGUgcm9vdCBGUyBieSB3cml0aW5nICJyb290PS9kZXYvZmQxNiIgb24KK3RoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorCitbU3RyYW5nZSBhbmQgbWF5YmUgdW5pbnRlcmVzdGluZyBzdHVmZiBPTl0KKworICBUaGlzIHVudXN1YWwgdHJhbnNsYXRpb24gb2YgZGV2aWNlIG5hbWVzIGhhcyBzb21lIHN0cmFuZ2UKK2NvbnNlcXVlbmNlczogSWYsIGZvciBleGFtcGxlLCB5b3UgaGF2ZSBhIHN5bWJvbGljIGxpbmsgZnJvbSAvZGV2L2ZkCit0byAvZGV2L2ZkMEQ3MjAgYXMgYW4gYWJicmV2aWF0aW9uIGZvciBmbG9wcHkgZHJpdmVyICMwIGluIEREIGZvcm1hdCwKK3lvdSBjYW5ub3QgdXNlIHRoaXMgbmFtZSBmb3Igc3BlY2lmeWluZyB0aGUgcm9vdCBkZXZpY2UsIGJlY2F1c2UgdGhlCitrZXJuZWwgY2Fubm90IHNlZSB0aGlzIHN5bWxpbmsgYmVmb3JlIG1vdW50aW5nIHRoZSByb290IEZTIGFuZCBpdAoraXNuJ3QgaW4gdGhlIHRhYmxlIGFib3ZlLiBJZiB5b3UgdXNlIGl0LCB0aGUgcm9vdCBkZXZpY2Ugd2lsbCBub3QgYmUgCitzZXQgYXQgYWxsLCB3aXRob3V0IGFuIGVycm9yIG1lc3NhZ2UuIEFub3RoZXIgZXhhbXBsZTogWW91IGNhbm5vdCB1c2UgYQorcGFydGl0aW9uIG9uIGUuZy4gdGhlIHNpeHRoIFNDU0kgZGlzayBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLCBpZiB5b3UKK3dhbnQgdG8gc3BlY2lmeSBpdCBieSBuYW1lLiBUaGlzIGlzLCBiZWNhdXNlIG9ubHkgdGhlIGRldmljZXMgdXAgdG8KKy9kZXYvc2RlIGFyZSBpbiB0aGUgdGFibGUgYWJvdmUsIGJ1dCBub3QgL2Rldi9zZGYuIEFsdGhvdWdoLCB5b3UgY2FuCit1c2UgdGhlIHNpeHRoIFNDU0kgZGlzayBmb3IgdGhlIHJvb3QgRlMsIGJ1dCB5b3UgaGF2ZSB0byBzcGVjaWZ5IHRoZQorZGV2aWNlIGJ5IG51bWJlci4uLiAoc2VlIGJlbG93KS4gT3IsIGV2ZW4gbW9yZSBzdHJhbmdlLCB5b3UgY2FuIHVzZSB0aGUKK2ZhY3QgdGhhdCB0aGVyZSBpcyBubyByYW5nZSBjaGVja2luZyBvZiB0aGUgcGFydGl0aW9uIG51bWJlciwgYW5kIHlvdXIKK2tub3dsZWRnZSB0aGF0IGVhY2ggZGlzayB1c2VzIDE2IG1pbm9ycywgYW5kIHdyaXRlICJyb290PS9kZXYvc2RlMTciCisoZm9yIC9kZXYvc2RmMSkuCisKK1tTdHJhbmdlIGFuZCBtYXliZSB1bmludGVyZXN0aW5nIHN0dWZmIE9GRl0KKworICBJZiB0aGUgZGV2aWNlIGNvbnRhaW5pbmcgeW91ciByb290IHBhcnRpdGlvbiBpc24ndCBpbiB0aGUgdGFibGUKK2Fib3ZlLCB5b3UgY2FuIGFsc28gc3BlY2lmeSBpdCBieSBtYWpvciBhbmQgbWlub3IgbnVtYmVycy4gVGhlc2UgYXJlCit3cml0dGVuIGluIGhleCwgd2l0aCBubyBwcmVmaXggYW5kIG5vIHNlcGFyYXRvciBiZXR3ZWVuLiBFLmcuLCBpZiB5b3UKK2hhdmUgYSBDRCB3aXRoIGNvbnRlbnRzIGFwcHJvcHJpYXRlIGFzIGEgcm9vdCBmaWxlc3lzdGVtIGluIHRoZSBmaXJzdAorU0NTSSBDRC1ST00gZHJpdmUsIHlvdSBib290IGZyb20gaXQgYnkgInJvb3Q9MGIwMCIuIEhlcmUsIGhleCAiMGIiID0KK2RlY2ltYWwgMTEgaXMgdGhlIG1ham9yIG9mIFNDU0kgQ0QtUk9NcywgYW5kIHRoZSBtaW5vciAwIHN0YW5kcyBmb3IKK3RoZSBmaXJzdCBvZiB0aGVzZS4gWW91IGNhbiBmaW5kIG91dCBhbGwgdmFsaWQgbWFqb3IgbnVtYmVycyBieQorbG9va2luZyBpbnRvIGluY2x1ZGUvbGludXgvbWFqb3IuaC4KKworCisyLjIpIHJvLCBydworLS0tLS0tLS0tLS0KKworU3ludGF4OiBybworICAgIG9yOiBydworCitUaGVzZSB0d28gb3B0aW9ucyB0ZWxsIHRoZSBrZXJuZWwgd2hldGhlciBpdCBzaG91bGQgbW91bnQgdGhlIHJvb3QKK2ZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9yIHJlYWQtd3JpdGUuIFRoZSBkZWZhdWx0IGlzIHJlYWQtb25seSwgZXhjZXB0Citmb3IgcmFtZGlza3MsIHdoaWNoIGRlZmF1bHQgdG8gcmVhZC13cml0ZS4KKworCisyLjMpIGRlYnVnCistLS0tLS0tLS0tCisKK1N5bnRheDogZGVidWcKKworVGhpcyByYWlzZXMgdGhlIGtlcm5lbCBsb2cgbGV2ZWwgdG8gMTAgKHRoZSBkZWZhdWx0IGlzIDcpLiBUaGlzIGlzIHRoZQorc2FtZSBsZXZlbCBhcyBzZXQgYnkgdGhlICJkbWVzZyIgY29tbWFuZCwganVzdCB0aGF0IHRoZSBtYXhpbXVtIGxldmVsCitzZWxlY3RhYmxlIGJ5IGRtZXNnIGlzIDguCisKKworMi40KSBkZWJ1Zz0KKy0tLS0tLS0tLS0tCisKK1N5bnRheDogZGVidWc9PGRldmljZT4KKworVGhpcyBvcHRpb24gY2F1c2VzIGNlcnRhaW4ga2VybmVsIG1lc3NhZ2VzIGJlIHByaW50ZWQgdG8gdGhlIHNlbGVjdGVkCitkZWJ1Z2dpbmcgZGV2aWNlLiBUaGlzIGNhbiBhaWQgZGVidWdnaW5nIHRoZSBrZXJuZWwsIHNpbmNlIHRoZQorbWVzc2FnZXMgY2FuIGJlIGNhcHR1cmVkIGFuZCBhbmFseXplZCBvbiBzb21lIG90aGVyIG1hY2hpbmUuIFdoaWNoCitkZXZpY2VzIGFyZSBwb3NzaWJsZSBkZXBlbmRzIG9uIHRoZSBtYWNoaW5lIHR5cGUuIFRoZXJlIGFyZSBubyBjaGVja3MKK2ZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIGRldmljZSBuYW1lLiBJZiB0aGUgZGV2aWNlIGlzbid0IGltcGxlbWVudGVkLAorbm90aGluZyBoYXBwZW5zLgorCisgIE1lc3NhZ2VzIGxvZ2dlZCB0aGlzIHdheSBhcmUgaW4gZ2VuZXJhbCBzdGFjayBkdW1wcyBhZnRlciBrZXJuZWwKK21lbW9yeSBmYXVsdHMgb3IgYmFkIGtlcm5lbCB0cmFwcywgYW5kIGtlcm5lbCBwYW5pY3MuIFRvIGJlIGV4YWN0OiBhbGwKK21lc3NhZ2VzIG9mIGxldmVsIDAgKHBhbmljIG1lc3NhZ2VzKSBhbmQgYWxsIG1lc3NhZ2VzIHByaW50ZWQgd2hpbGUKK3RoZSBsb2cgbGV2ZWwgaXMgOCBvciBtb3JlICh0aGVpciBsZXZlbCBkb2Vzbid0IG1hdHRlcikuIEJlZm9yZSBzdGFjaworZHVtcHMsIHRoZSBrZXJuZWwgc2V0cyB0aGUgbG9nIGxldmVsIHRvIDEwIGF1dG9tYXRpY2FsbHkuIEEgbGV2ZWwgb2YKK2F0IGxlYXN0IDggY2FuIGFsc28gYmUgc2V0IGJ5IHRoZSAiZGVidWciIGNvbW1hbmQgbGluZSBvcHRpb24gKHNlZQorMi4zKSBhbmQgYXQgcnVuIHRpbWUgd2l0aCAiZG1lc2cgLW4gOCIuCisKK0RldmljZXMgcG9zc2libGUgZm9yIEFtaWdhOgorCisgLSAic2VyIjogYnVpbHQtaW4gc2VyaWFsIHBvcnQ7IHBhcmFtZXRlcnM6IDk2MDBicHMsIDhOMQorIC0gIm1lbSI6IFNhdmUgdGhlIG1lc3NhZ2VzIHRvIGEgcmVzZXJ2ZWQgYXJlYSBpbiBjaGlwIG1lbS4gQWZ0ZXIKKyAgICAgICAgICByZWJvb3RpbmcsIHRoZXkgY2FuIGJlIHJlYWQgdW5kZXIgQW1pZ2FPUyB3aXRoIHRoZSB0b29sCisgICAgICAgICAgJ2RtZXNnJy4KKworRGV2aWNlcyBwb3NzaWJsZSBmb3IgQXRhcmk6CisKKyAtICJzZXIxIjogU1QtTUZQIHNlcmlhbCBwb3J0ICgiTW9kZW0xIik7IHBhcmFtZXRlcnM6IDk2MDBicHMsIDhOMQorIC0gInNlcjIiOiBTQ0MgY2hhbm5lbCBCIHNlcmlhbCBwb3J0ICgiTW9kZW0yIik7IHBhcmFtZXRlcnM6IDk2MDBicHMsIDhOMQorIC0gInNlciIgOiBkZWZhdWx0IHNlcmlhbCBwb3J0CisgICAgICAgICAgIFRoaXMgaXMgInNlcjIiIGZvciBhIEZhbGNvbiwgYW5kICJzZXIxIiBmb3IgYW55IG90aGVyIG1hY2hpbmUKKyAtICJtaWRpIjogVGhlIE1JREkgcG9ydDsgcGFyYW1ldGVyczogMzEyNTBicHMsIDhOMQorIC0gInBhciIgOiBwYXJhbGxlbCBwb3J0CisgICAgICAgICAgIFRoZSBwcmludGluZyByb3V0aW5lIGZvciB0aGlzIGltcGxlbWVudHMgYSB0aW1lb3V0IGZvciB0aGUKKyAgICAgICAgICAgY2FzZSB0aGVyZSdzIG5vIHByaW50ZXIgY29ubmVjdGVkIChlbHNlIHRoZSBrZXJuZWwgd291bGQKKyAgICAgICAgICAgbG9jayB1cCkuIFRoZSB0aW1lb3V0IGlzIG5vdCBleGFjdCwgYnV0IHVzdWFsbHkgYSBmZXcKKyAgICAgICAgICAgc2Vjb25kcy4KKworCisyLjYpIHJhbWRpc2s9CistLS0tLS0tLS0tLS0tCisKK1N5bnRheDogcmFtZGlzaz08c2l6ZT4KKworICBUaGlzIG9wdGlvbiBpbnN0cnVjdHMgdGhlIGtlcm5lbCB0byBzZXQgdXAgYSByYW1kaXNrIG9mIHRoZSBnaXZlbgorc2l6ZSBpbiBLQnl0ZXMuIERvIG5vdCB1c2UgdGhpcyBvcHRpb24gaWYgdGhlIHJhbWRpc2sgY29udGVudHMgYXJlCitwYXNzZWQgYnkgYm9vdHN0cmFwISBJbiB0aGlzIGNhc2UsIHRoZSBzaXplIGlzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkKK2FuZCBzaG91bGQgbm90IGJlIG92ZXJ3cml0dGVuLgorCisgIFRoZSBvbmx5IGFwcGxpY2F0aW9uIGlzIGZvciByb290IGZpbGVzeXN0ZW1zIG9uIGZsb3BweSBkaXNrcywgdGhhdAorc2hvdWxkIGJlIGxvYWRlZCBpbnRvIG1lbW9yeS4gVG8gZG8gdGhhdCwgc2VsZWN0IHRoZSBjb3JyZXNwb25kaW5nCitzaXplIG9mIHRoZSBkaXNrIGFzIHJhbWRpc2sgc2l6ZSwgYW5kIHNldCB0aGUgcm9vdCBkZXZpY2UgdG8gdGhlIGRpc2sKK2RyaXZlICh3aXRoICJyb290PSIpLgorCisKKzIuNykgc3dhcD0KKzIuOCkgYnVmZj0KKy0tLS0tLS0tLS0tCisKKyAgSSBjYW4ndCBmaW5kIGFueSBzaWduIG9mIHRoZXNlIG9wdGlvbnMgaW4gMi4yLjYuCisKKworMykgR2VuZXJhbCBEZXZpY2UgT3B0aW9ucyAoQW1pZ2EgYW5kIEF0YXJpKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiszLjEpIGV0aGVyPQorLS0tLS0tLS0tLS0KKworU3ludGF4OiBldGhlcj1bPGlycT5bLDxiYXNlX2FkZHI+Wyw8bWVtX3N0YXJ0PlssPG1lbV9lbmQ+XV1dXSw8ZGV2LW5hbWU+CisKKyAgPGRldi1uYW1lPiBpcyB0aGUgbmFtZSBvZiBhIG5ldCBkcml2ZXIsIGFzIHNwZWNpZmllZCBpbgorZHJpdmVycy9uZXQvU3BhY2UuYyBpbiB0aGUgTGludXggc291cmNlLiBNb3N0IHByb21pbmVudCBhcmUgZXRoMCwgLi4uCitldGgzLCBzbDAsIC4uLiBzbDMsIHBwcDAsIC4uLiwgcHBwMywgZHVtbXksIGFuZCBsby4KKworICBUaGUgbm9uLWV0aGVybmV0IGRyaXZlcnMgKHNsLCBwcHAsIGR1bW15LCBsbykgb2J2aW91c2x5IGlnbm9yZSB0aGUKK3NldHRpbmdzIGJ5IHRoaXMgb3B0aW9ucy4gQWxzbywgdGhlIGV4aXN0aW5nIGV0aGVybmV0IGRyaXZlcnMgZm9yCitMaW51eC9tNjhrIChhcmlhZG5lLCBhMjA2NSwgaHlkcmEpIGRvbid0IHVzZSB0aGVtIGJlY2F1c2UgWm9ycm8gYm9hcmRzCithcmUgcmVhbGx5IFBsdWctJ24tUGxheSwgc28gdGhlICJldGhlcj0iIG9wdGlvbiBpcyB1c2VsZXNzIGFsdG9nZXRoZXIKK2ZvciBMaW51eC9tNjhrLgorCisKKzMuMikgaGQ9CistLS0tLS0tLQorCitTeW50YXg6IGhkPTxjeWxpbmRlcnM+LDxoZWFkcz4sPHNlY3RvcnM+CisKKyAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGlzayBnZW9tZXRyeSBvZiBhbiBJREUgZGlzay4gVGhlIGZpcnN0IGhkPQorb3B0aW9uIGlzIGZvciB0aGUgZmlyc3QgSURFIGRpc2ssIHRoZSBzZWNvbmQgZm9yIHRoZSBzZWNvbmQgb25lLgorKEkuZS4sIHlvdSBjYW4gZ2l2ZSB0aGlzIG9wdGlvbiB0d2ljZS4pIEluIG1vc3QgY2FzZXMsIHlvdSB3b24ndCBoYXZlCit0byB1c2UgdGhpcyBvcHRpb24sIHNpbmNlIHRoZSBrZXJuZWwgY2FuIG9idGFpbiB0aGUgZ2VvbWV0cnkgZGF0YQoraXRzZWxmLiBJdCBleGlzdHMganVzdCBmb3IgdGhlIGNhc2UgdGhhdCB0aGlzIGZhaWxzIGZvciBvbmUgb2YgeW91cgorZGlza3MuCisKKworMy4zKSBtYXhfc2NzaV9sdW5zPQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IG1heF9zY3NpX2x1bnM9PG4+CisKKyAgU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgTFVOcyAobG9naWNhbCB1bml0cykgb2YgU0NTSSBkZXZpY2VzIHRvCitiZSBzY2FubmVkLiBWYWxpZCB2YWx1ZXMgZm9yIDxuPiBhcmUgYmV0d2VlbiAxIGFuZCA4LiBEZWZhdWx0IGlzIDggaWYKKyJQcm9iZSBhbGwgTFVOcyBvbiBlYWNoIFNDU0kgZGV2aWNlIiB3YXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBrZXJuZWwKK2NvbmZpZ3VyYXRpb24sIGVsc2UgMS4KKworCiszLjQpIHN0PQorLS0tLS0tLS0KKworU3ludGF4OiBzdD08YnVmZmVyX3NpemU+LFs8d3JpdGVfdGhyZXM+LFs8bWF4X2J1ZmZlcnM+XV0KKworICBTZXRzIHNldmVyYWwgcGFyYW1ldGVycyBvZiB0aGUgU0NTSSB0YXBlIGRyaXZlci4gPGJ1ZmZlcl9zaXplPiBpcwordGhlIG51bWJlciBvZiA1MTItYnl0ZSBidWZmZXJzIHJlc2VydmVkIGZvciB0YXBlIG9wZXJhdGlvbnMgZm9yIGVhY2gKK2RldmljZS4gPHdyaXRlX3RocmVzPiBzZXRzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHdoaWNoIG11c3QgYmUgZmlsbGVkCit0byBzdGFydCBhbiBhY3R1YWwgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSB0YXBlLiBNYXhpbXVtIHZhbHVlIGlzIHRoZQordG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMuIDxtYXhfYnVmZmVyPiBsaW1pdHMgdGhlIHRvdGFsIG51bWJlciBvZgorYnVmZmVycyBhbGxvY2F0ZWQgZm9yIGFsbCB0YXBlIGRldmljZXMuCisKKworMy41KSBkbWFzb3VuZD0KKy0tLS0tLS0tLS0tLS0tCisKK1N5bnRheDogZG1hc291bmQ9WzxidWZmZXJzPiw8YnVmZmVyLXNpemU+Wyw8Y2F0Y2gtcmFkaXVzPl1dCisKKyAgVGhpcyBvcHRpb24gY29udHJvbHMgc29tZSBjb25maWd1cmF0aW9ucyBvZiB0aGUgTGludXgvbTY4ayBETUEgc291bmQKK2RyaXZlciAoQW1pZ2EgYW5kIEF0YXJpKTogPGJ1ZmZlcnM+IGlzIHRoZSBudW1iZXIgb2YgYnVmZmVycyB5b3Ugd2FudAordG8gdXNlIChtaW5pbXVtIDQsIGRlZmF1bHQgNCksIDxidWZmZXItc2l6ZT4gaXMgdGhlIHNpemUgb2YgZWFjaAorYnVmZmVyIGluIGtpbG9ieXRlcyAobWluaW11bSA0LCBkZWZhdWx0IDMyKSBhbmQgPGNhdGNoLXJhZGl1cz4gc2F5cworaG93IG11Y2ggcGVyY2VudCBvZiBlcnJvciB3aWxsIGJlIHRvbGVyYXRlZCB3aGVuIHNldHRpbmcgYSBmcmVxdWVuY3kKKyhtYXhpbXVtIDEwLCBkZWZhdWx0IDApLiBGb3IgZXhhbXBsZSB3aXRoIDMlIHlvdSBjYW4gcGxheSA4MDAwSHoKK0FVLUZpbGVzIG9uIHRoZSBGYWxjb24gd2l0aCBpdHMgaGFyZHdhcmUgZnJlcXVlbmN5IG9mIDgxOTVIeiBhbmQgdGh1cworZG9uJ3QgbmVlZCB0byBleHBhbmQgdGhlIHNvdW5kLgorCisKKworNCkgT3B0aW9ucyBmb3IgQXRhcmkgT25seQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCis0LjEpIHZpZGVvPQorLS0tLS0tLS0tLS0KKworU3ludGF4OiB2aWRlbz08ZmJuYW1lPjo8c3ViLW9wdGlvbnMuLi4+CisKK1RoZSA8ZmJuYW1lPiBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmcmFtZSBidWZmZXIsCitlZy4gbW9zdCBhdGFyaSB1c2VycyB3aWxsIHdhbnQgdG8gc3BlY2lmeSBgYXRhZmInIGhlcmUuIFRoZQorPHN1Yi1vcHRpb25zPiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBzdWItb3B0aW9ucyBsaXN0ZWQKK2JlbG93LgorCitOQjogUGxlYXNlIG5vdGljZSB0aGF0IHRoaXMgb3B0aW9uIHdhcyByZW5hbWVkIGZyb20gYGF0YXZpZGVvJyB0bworICAgIGB2aWRlbycgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgMS4zLngga2VybmVscywgdGh1cyB5b3UKKyAgICBtaWdodCBuZWVkIHRvIHVwZGF0ZSB5b3VyIGJvb3Qtc2NyaXB0cyBpZiB1cGdyYWRpbmcgdG8gMi54IGZyb20KKyAgICBhbiAxLjIueCBrZXJuZWwuCisKK05CQjogVGhlIGJlaGF2aW9yIG9mIHZpZGVvPSB3YXMgY2hhbmdlZCBpbiAyLjEuNTcgc28gdGhlIHJlY29tbWVuZGVkCitvcHRpb24gaXMgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZnJhbWUgYnVmZmVyLgorCis0LjEuMSkgVmlkZW8gTW9kZQorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzdWItb3B0aW9uIG1heSBiZSBhbnkgb2YgdGhlIHByZWRlZmluZWQgdmlkZW8gbW9kZXMsIGFzIGxpc3RlZAoraW4gYXRhcmkvYXRhZmIuYyBpbiB0aGUgTGludXgvbTY4ayBzb3VyY2UgdHJlZS4gVGhlIGtlcm5lbCB3aWxsCithY3RpdmF0ZSB0aGUgZ2l2ZW4gdmlkZW8gbW9kZSBhdCBib290IHRpbWUgYW5kIG1ha2UgaXQgdGhlIGRlZmF1bHQKK21vZGUsIGlmIHRoZSBoYXJkd2FyZSBhbGxvd3MuIEN1cnJlbnRseSBkZWZpbmVkIG5hbWVzIGFyZToKKworIC0gc3Rsb3cgICAgICAgICAgIDogMzIweDIwMHg0CisgLSBzdG1pZCwgZGVmYXVsdDUgOiA2NDB4MjAweDIKKyAtIHN0aGlnaCwgZGVmYXVsdDQ6IDY0MHg0MDB4MQorIC0gdHRsb3cgICAgICAgICAgIDogMzIweDQ4MHg4LCBUVCBvbmx5CisgLSB0dG1pZCwgZGVmYXVsdDEgOiA2NDB4NDgweDQsIFRUIG9ubHkKKyAtIHR0aGlnaCwgZGVmYXVsdDI6IDEyODB4OTYweDEsIFRUIG9ubHkKKyAtIHZnYTIgICAgICAgICAgICA6IDY0MHg0ODB4MSwgRmFsY29uIG9ubHkKKyAtIHZnYTQgICAgICAgICAgICA6IDY0MHg0ODB4MiwgRmFsY29uIG9ubHkKKyAtIHZnYTE2LCBkZWZhdWx0MyA6IDY0MHg0ODB4NCwgRmFsY29uIG9ubHkKKyAtIHZnYTI1NiAgICAgICAgICA6IDY0MHg0ODB4OCwgRmFsY29uIG9ubHkKKyAtIGZhbGgyICAgICAgICAgICA6IDg5Nng2MDh4MSwgRmFsY29uIG9ubHkKKyAtIGZhbGgxNiAgICAgICAgICA6IDg5Nng2MDh4NCwgRmFsY29uIG9ubHkKKworICBJZiBubyB2aWRlbyBtb2RlIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBrZXJuZWwgdHJpZXMgdGhlCittb2RlcyBuYW1lcyAiZGVmYXVsdDxuPiIgaW4gdHVybiwgdW50aWwgb25lIGlzIHBvc3NpYmxlIHdpdGggdGhlCitoYXJkd2FyZSBpbiB1c2UuCisKKyAgQSB2aWRlbyBtb2RlIHNldHRpbmcgZG9lc24ndCBtYWtlIHNlbnNlLCBpZiB0aGUgZXh0ZXJuYWwgZHJpdmVyIGlzCithY3RpdmF0ZWQgYnkgYSAiZXh0ZXJuYWw6IiBzdWItb3B0aW9uLgorCis0LjEuMikgaW52ZXJzZQorLS0tLS0tLS0tLS0tLS0KKworSW52ZXJ0IHRoZSBkaXNwbGF5LiBUaGlzIGFmZmVjdHMgYm90aCwgdGV4dCAoY29uc29sZXMpIGFuZCBncmFwaGljcworKFgpIGRpc3BsYXkuIFVzdWFsbHksIHRoZSBiYWNrZ3JvdW5kIGlzIGNob3NlbiB0byBiZSBibGFjay4gV2l0aCB0aGlzCitvcHRpb24sIHlvdSBjYW4gbWFrZSB0aGUgYmFja2dyb3VuZCB3aGl0ZS4KKworNC4xLjMpIGZvbnQKKy0tLS0tLS0tLS0tCisKK1N5bnRheDogZm9udDo8Zm9udG5hbWU+CisKK1NwZWNpZnkgdGhlIGZvbnQgdG8gdXNlIGluIHRleHQgbW9kZXMuIEN1cnJlbnRseSB5b3UgY2FuIGNob29zZSBvbmx5CitiZXR3ZWVuIGBWR0E4eDgnLCBgVkdBOHgxNicgYW5kIGBQRUFSTDh4OCcuIGBWR0E4eDgnIGlzIGRlZmF1bHQsIGlmIHRoZQordmVydGljYWwgc2l6ZSBvZiB0aGUgZGlzcGxheSBpcyBsZXNzIHRoYW4gNDAwIHBpeGVsIHJvd3MuIE90aGVyd2lzZSwgdGhlCitgVkdBOHgxNicgZm9udCBpcyB0aGUgZGVmYXVsdC4KKworNC4xLjQpIGh3c2Nyb2xsXworLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IGh3c2Nyb2xsXzxuPgorCitUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbGluZXMgb2YgdmlkZW8gbWVtb3J5IHRvIHJlc2VydmUgZm9yCitzcGVlZGluZyB1cCB0aGUgc2Nyb2xsaW5nICgiaGFyZHdhcmUgc2Nyb2xsaW5nIikuIEhhcmR3YXJlIHNjcm9sbGluZworaXMgcG9zc2libGUgb25seSBpZiB0aGUga2VybmVsIGNhbiBzZXQgdGhlIHZpZGVvIGJhc2UgYWRkcmVzcyBpbiBzdGVwcworZmluZSBlbm91Z2guIFRoaXMgaXMgdHJ1ZSBmb3IgU1RFLCBNZWdhU1RFLCBUVCwgYW5kIEZhbGNvbi4gSXQgaXMgbm90Citwb3NzaWJsZSB3aXRoIHBsYWluIFNUcyBhbmQgZ3JhcGhpY3MgY2FyZHMgKFRoZSBmb3JtZXIgYmVjYXVzZSB0aGUKK2Jhc2UgYWRkcmVzcyBtdXN0IGJlIG9uIGEgMjU2IGJ5dGUgYm91bmRhcnkgdGhlcmUsIHRoZSBsYXR0ZXIgYmVjYXVzZQordGhlIGtlcm5lbCBkb2Vzbid0IGtub3cgaG93IHRvIHNldCB0aGUgYmFzZSBhZGRyZXNzIGF0IGFsbC4pCisKKyAgQnkgZGVmYXVsdCwgPG4+IGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHZpc2libGUgdGV4dCBsaW5lcyBvbiB0aGUKK2Rpc3BsYXkuIFRodXMsIHRoZSBhbW91bnQgb2YgdmlkZW8gbWVtb3J5IGlzIGRvdWJsZWQsIGNvbXBhcmVkIHRvIG5vCitoYXJkd2FyZSBzY3JvbGxpbmcuIFlvdSBjYW4gdHVybiBvZmYgdGhlIGhhcmR3YXJlIHNjcm9sbGluZyBhbHRvZ2V0aGVyCitieSBzZXR0aW5nIDxuPiB0byAwLgorCis0LjEuNSkgaW50ZXJuYWw6CistLS0tLS0tLS0tLS0tLS0tCisKK1N5bnRheDogaW50ZXJuYWw6PHhyZXM+Ozx5cmVzPls7PHhyZXNfbWF4Pjs8eXJlc19tYXg+OzxvZmZzZXQ+XQorCitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGNhcGFiaWxpdGllcyBvZiBzb21lIGV4dGVuZGVkIGludGVybmFsIHZpZGVvCitoYXJkd2FyZSwgbGlrZSBlLmcuIE92ZXJTY2FuLiA8eHJlcz4gYW5kIDx5cmVzPiBnaXZlIHRoZSAoZXh0ZW5kZWQpCitkaW1lbnNpb25zIG9mIHRoZSBzY3JlZW4uCisKKyAgSWYgeW91ciBPdmVyU2NhbiBuZWVkcyBhIGJsYWNrIGJvcmRlciwgeW91IGhhdmUgdG8gd3JpdGUgdGhlIGxhc3QKK3RocmVlIGFyZ3VtZW50cyBvZiB0aGUgImludGVybmFsOiIuIDx4cmVzX21heD4gaXMgdGhlIG1heGltdW0gbGluZQorbGVuZ3RoIHRoZSBoYXJkd2FyZSBhbGxvd3MsIDx5cmVzX21heD4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzLgorPG9mZnNldD4gaXMgdGhlIG9mZnNldCBvZiB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBzY3JlZW4gbWVtb3J5IHRvIGl0cworcGh5c2ljYWwgc3RhcnQsIGluIGJ5dGVzLgorCisgIE9mdGVuLCBleHRlbmRlZCBpbnRlcnZhbCB2aWRlbyBoYXJkd2FyZSBoYXMgdG8gYmUgYWN0aXZhdGVkIHNvbWVob3cuCitGb3IgdGhpcywgc2VlIHRoZSAic3dfKiIgb3B0aW9ucyBiZWxvdy4KKworNC4xLjYpIGV4dGVybmFsOgorLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6CisgIGV4dGVybmFsOjx4cmVzPjs8eXJlcz47PGRlcHRoPjs8b3JnPjs8c2NybWVtPls7PHNjcmxlbj5bOzx2Z2FiYXNlPlwKKyAgICAgICAgICAgWzs8Y29sdz5bOzxjb2x0eXBlPls7PHhyZXNfdmlydHVhbD5dXV1dXQorCitbSSBoYWQgdG8gYnJlYWsgdGhpcyBsaW5lLi4uXQorCisgIFRoaXMgaXMgcHJvYmFibHkgdGhlIG1vc3QgY29tcGxpY2F0ZWQgcGFyYW1ldGVyLi4uIEl0IHNwZWNpZmllcyB0aGF0Cit5b3UgaGF2ZSBzb21lIGV4dGVybmFsIHZpZGVvIGhhcmR3YXJlIChhIGdyYXBoaWNzIGJvYXJkKSwgYW5kIGhvdyB0bwordXNlIGl0IHVuZGVyIExpbnV4L202OGsuIFRoZSBrZXJuZWwgY2Fubm90IGtub3cgbW9yZSBhYm91dCB0aGUgaGFyZHdhcmUKK3RoYW4geW91IHRlbGwgaXQgaGVyZSEgVGhlIGtlcm5lbCBhbHNvIGlzIHVuYWJsZSB0byBzZXQgb3IgY2hhbmdlIGFueQordmlkZW8gbW9kZXMsIHNpbmNlIGl0IGRvZXNuJ3Qga25vdyBhYm91dCBhbnkgYm9hcmQgaW50ZXJuYWwuIFNvLCB5b3UKK2hhdmUgdG8gc3dpdGNoIHRvIHRoYXQgdmlkZW8gbW9kZSBiZWZvcmUgeW91IHN0YXJ0IExpbnV4LCBhbmQgY2Fubm90Citzd2l0Y2ggdG8gYW5vdGhlciBtb2RlIG9uY2UgTGludXggaGFzIHN0YXJ0ZWQuCisKKyAgVGhlIGZpcnN0IDMgcGFyYW1ldGVycyBvZiB0aGlzIHN1Yi1vcHRpb24gc2hvdWxkIGJlIG9idmlvdXM6IDx4cmVzPiwKKzx5cmVzPiBhbmQgPGRlcHRoPiBnaXZlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBzY3JlZW4gYW5kIHRoZSBudW1iZXIgb2YKK3BsYW5lcyAoZGVwdGgpLiBUaGUgZGVwdGggaXMgaXMgdGhlIGxvZ2FyaXRobSB0byBiYXNlIDIgb2YgdGhlIG51bWJlcgorb2YgY29sb3JzIHBvc3NpYmxlLiAoT3IsIHRoZSBvdGhlciB3YXkgcm91bmQ6IFRoZSBudW1iZXIgb2YgY29sb3JzIGlzCisyXmRlcHRoKS4KKworICBZb3UgaGF2ZSB0byB0ZWxsIHRoZSBrZXJuZWwgZnVydGhlcm1vcmUgaG93IHRoZSB2aWRlbyBtZW1vcnkgaXMKK29yZ2FuaXplZC4gVGhpcyBpcyBkb25lIGJ5IGEgbGV0dGVyIGFzIDxvcmc+IHBhcmFtZXRlcjoKKworICduJzogIm5vcm1hbCBwbGFuZXMiLCBpLmUuIG9uZSB3aG9sZSBwbGFuZSBhZnRlciBhbm90aGVyCisgJ2knOiAiaW50ZXJsZWF2ZWQgcGxhbmVzIiwgaS5lLiAxNiBiaXQgb2YgdGhlIGZpcnN0IHBsYW5lLCB0aGFuIDE2IGJpdAorICAgICAgb2YgdGhlIG5leHQsIGFuZCBzbyBvbi4uLiBUaGlzIG1vZGUgaXMgdXNlZCBvbmx5IHdpdGggdGhlCisJICBidWlsdC1pbiBBdGFyaSB2aWRlbyBtb2RlcywgSSB0aGluayB0aGVyZSBpcyBubyBjYXJkIHRoYXQKKwkgIHN1cHBvcnRzIHRoaXMgbW9kZS4KKyAncCc6ICJwYWNrZWQgcGl4ZWxzIiwgaS5lLiA8ZGVwdGg+IGNvbnNlY3V0aXZlIGJpdHMgc3RhbmQgZm9yIGFsbAorCSAgcGxhbmVzIG9mIG9uZSBwaXhlbDsgdGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBmb3IgOCBwbGFuZXMKKwkgICgyNTYgY29sb3JzKSBvbiBncmFwaGljIGNhcmRzCisgJ3QnOiAidHJ1ZSBjb2xvciIgKG1vcmUgb3IgbGVzcyBwYWNrZWQgcGl4ZWxzLCBidXQgd2l0aG91dCBhIGNvbG9yCisJICBsb29rdXAgdGFibGUpOyB1c3VhbGx5IGRlcHRoIGlzIDI0CisKK0ZvciBtb25vY2hyb21lIG1vZGVzIChpLmUuLCA8ZGVwdGg+IGlzIDEpLCB0aGUgPG9yZz4gbGV0dGVyIGhhcyBhCitkaWZmZXJlbnQgbWVhbmluZzoKKworICduJzogbm9ybWFsIGNvbG9ycywgaS5lLiAwPXdoaXRlLCAxPWJsYWNrCisgJ2knOiBpbnZlcnRlZCBjb2xvcnMsIGkuZS4gMD1ibGFjaywgMT13aGl0ZQorCisgIFRoZSBuZXh0IGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmlkZW8gaGFyZHdhcmUgaXMgdGhlIGJhc2UKK2FkZHJlc3Mgb2YgdGhlIHZpZGVvIG1lbW9yeS4gVGhhdCBpcyBnaXZlbiBpbiB0aGUgPHNjcm1lbT4gcGFyYW1ldGVyLAorYXMgYSBoZXhhZGVjaW1hbCBudW1iZXIgd2l0aCBhICIweCIgcHJlZml4LiBZb3UgaGF2ZSB0byBmaW5kIG91dCB0aGlzCithZGRyZXNzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgaGFyZHdhcmUuCisKKyAgVGhlIG5leHQgcGFyYW1ldGVyLCA8c2NybGVuPiwgdGVsbHMgdGhlIGtlcm5lbCBhYm91dCB0aGUgc2l6ZSBvZiB0aGUKK3ZpZGVvIG1lbW9yeS4gSWYgaXQncyBtaXNzaW5nLCB0aGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGZyb20gPHhyZXM+LAorPHlyZXM+LCBhbmQgPGRlcHRoPi4gRm9yIG5vdywgaXQgaXMgbm90IHVzZWZ1bCB0byB3cml0ZSBhIHZhbHVlIGhlcmUuCitJdCB3b3VsZCBiZSB1c2VkIG9ubHkgZm9yIGhhcmR3YXJlIHNjcm9sbGluZyAod2hpY2ggaXNuJ3QgcG9zc2libGUKK3dpdGggdGhlIGV4dGVybmFsIGRyaXZlciwgYmVjYXVzZSB0aGUga2VybmVsIGNhbm5vdCBzZXQgdGhlIHZpZGVvIGJhc2UKK2FkZHJlc3MpLCBvciBmb3IgdmlydHVhbCByZXNvbHV0aW9ucyB1bmRlciBYICh3aGljaCB0aGUgWCBzZXJ2ZXIKK2RvZXNuJ3Qgc3VwcG9ydCB5ZXQpLiBTbywgaXQncyBjdXJyZW50bHkgYmVzdCB0byBsZWF2ZSB0aGlzIGZpZWxkCitlbXB0eSwgZWl0aGVyIGJ5IGVuZGluZyB0aGUgImV4dGVybmFsOiIgYWZ0ZXIgdGhlIHZpZGVvIGFkZHJlc3Mgb3IgYnkKK3dyaXRpbmcgdHdvIGNvbnNlY3V0aXZlIHNlbWljb2xvbnMsIGlmIHlvdSB3YW50IHRvIGdpdmUgYSA8dmdhYmFzZT4KKyhpdCBpcyBhbGxvd2VkIHRvIGxlYXZlIHRoaXMgcGFyYW1ldGVyIGVtcHR5KS4KKworICBUaGUgPHZnYWJhc2U+IHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSWYgaXQgaXMgbm90IGdpdmVuLCB0aGUga2VybmVsCitjYW5ub3QgcmVhZCBvciB3cml0ZSBhbnkgY29sb3IgcmVnaXN0ZXJzIG9mIHRoZSB2aWRlbyBoYXJkd2FyZSwgYW5kCit0aHVzIHlvdSBoYXZlIHRvIHNldCBhcHByb3ByaWF0ZSBjb2xvcnMgYmVmb3JlIHlvdSBzdGFydCBMaW51eC4gQnV0IGlmCit5b3VyIGNhcmQgaXMgc29tZWhvdyBWR0EgY29tcGF0aWJsZSwgeW91IGNhbiB0ZWxsIHRoZSBrZXJuZWwgdGhlIGJhc2UKK2FkZHJlc3Mgb2YgdGhlIFZHQSByZWdpc3RlciBzZXQsIHNvIGl0IGNhbiBjaGFuZ2UgdGhlIGNvbG9yIGxvb2t1cAordGFibGUuIFlvdSBoYXZlIHRvIGxvb2sgdXAgdGhpcyBhZGRyZXNzIGluIHlvdXIgYm9hcmQncyBkb2N1bWVudGF0aW9uLgorVG8gYXZvaWQgbWlzdW5kZXJzdGFuZGluZ3M6IDx2Z2FiYXNlPiBpcyB0aGUgX2Jhc2VfIGFkZHJlc3MsIGkuZS4gYSA0aworYWxpZ25lZCBhZGRyZXNzLiBGb3IgcmVhZC93cml0aW5nIHRoZSBjb2xvciByZWdpc3RlcnMsIHRoZSBrZXJuZWwKK3VzZXMgdGhlIGFkZHJlc3NlcyB2Z2FiYXNlKzB4M2M3Li4udmdhYmFzZSsweDNjOS4gVGhlIDx2Z2FiYXNlPgorcGFyYW1ldGVyIGlzIHdyaXR0ZW4gaW4gaGV4YWRlY2ltYWwgd2l0aCBhICIweCIgcHJlZml4LCBqdXN0IGFzCis8c2NybWVtPi4KKworICA8Y29sdz4gaXMgbWVhbmluZ2Z1bCBvbmx5IGlmIDx2Z2FiYXNlPiBpcyBzcGVjaWZpZWQuIEl0IHRlbGxzIHRoZQora2VybmVsIGhvdyB3aWRlIGVhY2ggb2YgdGhlIGNvbG9yIHJlZ2lzdGVyIGlzLCBpLmUuIHRoZSBudW1iZXIgb2YgYml0cworcGVyIHNpbmdsZSBjb2xvciAocmVkL2dyZWVuL2JsdWUpLiBEZWZhdWx0IGlzIDYsIGFub3RoZXIgcXVpdGUgdXN1YWwKK3ZhbHVlIGlzIDguCisKKyAgQWxzbyA8Y29sdHlwZT4gaXMgdXNlZCB0b2dldGhlciB3aXRoIDx2Z2FiYXNlPi4gSXQgdGVsbHMgdGhlIGtlcm5lbAorYWJvdXQgdGhlIGNvbG9yIHJlZ2lzdGVyIG1vZGVsIG9mIHlvdXIgZ2Z4IGJvYXJkLiBDdXJyZW50bHksIHRoZSB0eXBlcworInZnYSIgKHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQpIGFuZCAibXYzMDAiIChTQU5HIE1WMzAwKSBhcmUKK2ltcGxlbWVudGVkLgorCisgIFBhcmFtZXRlciA8eHJlc192aXJ0dWFsPiBpcyByZXF1aXJlZCBmb3IgUHJvTVNUIG9yIEVUNDAwMCBjYXJkcyB3aGVyZQordGhlIHBoeXNpY2FsIGxpbmVsZW5ndGggZGlmZmVycyBmcm9tIHRoZSB2aXNpYmxlIGxlbmd0aC4gV2l0aCBQcm9NU1QsIAoreHJlc192aXJ0dWFsIG11c3QgYmUgc2V0IHRvIDIwNDguIEZvciBFVDQwMDAsIHhyZXNfdmlydHVhbCBkZXBlbmRzIG9uIHRoZQoraW5pdGlhbGlzYXRpb24gb2YgdGhlIHZpZGVvLWNhcmQuCitJZiB5b3UncmUgbWlzc2luZyBhIGNvcnJlc3BvbmRpbmcgeXJlc192aXJ0dWFsOiB0aGUgZXh0ZXJuYWwgcGFydCBpcyBsZWdhY3ksCit0aGVyZWZvcmUgd2UgZG9uJ3Qgc3VwcG9ydCBoYXJkd2FyZS1kZXBlbmRlbnQgZnVuY3Rpb25zIGxpa2UgaGFyZHdhcmUtc2Nyb2xsLAorcGFubmluZyBvciBibGFua2luZy4KKworNC4xLjcpIGVjbG9jazoKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBleHRlcm5hbCBwaXhlbCBjbG9jayBhdHRhY2hlZCB0byB0aGUgRmFsY29uIFZJREVMIHNoaWZ0ZXIuIFRoaXMKK2N1cnJlbnRseSB3b3JrcyBvbmx5IHdpdGggdGhlIFNjcmVlbldvbmRlciEKKworNC4xLjgpIG1vbml0b3JjYXA6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N5bnRheDogbW9uaXRvcmNhcDo8dm1pbj47PHZtYXg+OzxobWluPjs8aG1heD4KKworVGhpcyBkZXNjcmliZXMgdGhlIGNhcGFiaWxpdGllcyBvZiBhIG11bHRpc3luYyBtb25pdG9yLiBEb24ndCB1c2UgaXQKK3dpdGggYSBmaXhlZC1mcmVxdWVuY3kgbW9uaXRvciEgRm9yIG5vdywgb25seSB0aGUgRmFsY29uIGZyYW1lIGJ1ZmZlcgordXNlcyB0aGUgc2V0dGluZ3Mgb2YgIm1vbml0b3JjYXA6Ii4KKworICA8dm1pbj4gYW5kIDx2bWF4PiBhcmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0sIHJlc3AuLCB2ZXJ0aWNhbCBmcmVxdWVuY2llcworeW91ciBtb25pdG9yIGNhbiB3b3JrIHdpdGgsIGluIEh6LiA8aG1pbj4gYW5kIDxobWF4PiBhcmUgdGhlIHNhbWUgZm9yCit0aGUgaG9yaXpvbnRhbCBmcmVxdWVuY3ksIGluIGtIei4KKworICBUaGUgZGVmYXVsdHMgYXJlIDU4OzYyOzMxOzMyIChWR0EgY29tcGF0aWJsZSkuCisKKyAgVGhlIGRlZmF1bHRzIGZvciBUVi9TQzEyMjQvU0MxNDM1IGNvdmVyIGJvdGggUEFMIGFuZCBOVFNDIHN0YW5kYXJkcy4KKworNC4xLjkpIGtlZXAKKy0tLS0tLS0tLS0tLQorCitJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiwgdGhlIGZyYW1lYnVmZmVyIGRldmljZSBkb2Vzbid0IGRvIGFueSB2aWRlbworbW9kZSBjYWxjdWxhdGlvbnMgYW5kIHNldHRpbmdzIG9uIGl0cyBvd24uIFRoZSBvbmx5IEF0YXJpIGZiIGRldmljZQordGhhdCBkb2VzIHRoaXMgY3VycmVudGx5IGlzIHRoZSBGYWxjb24uCisKKyAgV2hhdCB5b3UgcmVhY2ggd2l0aCB0aGlzOiBTZXR0aW5ncyBmb3IgdW5rbm93biB2aWRlbyBleHRlbnNpb25zCithcmVuJ3Qgb3ZlcnJpZGRlbiBieSB0aGUgZHJpdmVyLCBzbyB5b3UgY2FuIHN0aWxsIHVzZSB0aGUgbW9kZSBmb3VuZAord2hlbiBib290aW5nLCB3aGVuIHRoZSBkcml2ZXIgZG9lc24ndCBrbm93IHRvIHNldCB0aGlzIG1vZGUgaXRzZWxmLgorQnV0IHRoaXMgYWxzbyBtZWFucywgdGhhdCB5b3UgY2FuJ3Qgc3dpdGNoIHZpZGVvIG1vZGVzIGFueW1vcmUuLi4KKworICBBbiBleGFtcGxlIHdoZXJlIHlvdSBtYXkgd2FudCB0byB1c2UgImtlZXAiIGlzIHRoZSBTY3JlZW5CbGFzdGVyIGZvcgordGhlIEZhbGNvbi4KKworCis0LjIpIGF0YW1vdXNlPQorLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBhdGFtb3VzZT08eC10aHJlc2hvbGQ+LFs8eS10aHJlc2hvbGQ+XQorCisgIFdpdGggdGhpcyBvcHRpb24sIHlvdSBjYW4gc2V0IHRoZSBtb3VzZSBtb3ZlbWVudCByZXBvcnRpbmcgdGhyZXNob2xkLgorVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHBpeGVscyBvZiBtb3VzZSBtb3ZlbWVudCB0aGF0IGhhdmUgdG8gYWNjdW11bGF0ZQorYmVmb3JlIHRoZSBJS0JEIHNlbmRzIGEgbmV3IG1vdXNlIHBhY2tldCB0byB0aGUga2VybmVsLiBIaWdoZXIgdmFsdWVzCityZWR1Y2UgdGhlIG1vdXNlIGludGVycnVwdCBsb2FkIGFuZCB0aHVzIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGtleWJvYXJkCitvdmVycnVucy4gTG93ZXIgdmFsdWVzIGdpdmUgYSBzbGlnaHRseSBmYXN0ZXIgbW91c2UgcmVzcG9uc2VzIGFuZAorc2xpZ2h0bHkgYmV0dGVyIG1vdXNlIHRyYWNraW5nLgorCisgIFlvdSBjYW4gc2V0IHRoZSB0aHJlc2hvbGQgaW4geCBhbmQgeSBzZXBhcmF0ZWx5LCBidXQgdXN1YWxseSB0aGlzIGlzCitvZiBsaXR0bGUgcHJhY3RpY2FsIHVzZS4gSWYgdGhlcmUncyBqdXN0IG9uZSBudW1iZXIgaW4gdGhlIG9wdGlvbiwgaXQKK2lzIHVzZWQgZm9yIGJvdGggZGltZW5zaW9ucy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMiBmb3IgYm90aAordGhyZXNob2xkcy4KKworCis0LjMpIGF0YWZsb3A9CistLS0tLS0tLS0tLS0tCisKK1N5bnRheDogYXRhZmxvcD08ZHJpdmUgdHlwZT5bLDx0cmFja2J1ZmZlcmluZz5bLDxzdGVwcmF0ZUE+Wyw8c3RlcHJhdGVCPl1dXQorCisgICBUaGUgZHJpdmUgdHlwZSBtYXkgYmUgMCwgMSwgb3IgMiwgZm9yIERELCBIRCwgYW5kIEVELCByZXNwLiBUaGlzCisgICBzZXR0aW5nIGFmZmVjdHMgaG93IG1hbnkgYnVmZmVycyBhcmUgcmVzZXJ2ZWQgYW5kIHdoaWNoIGZvcm1hdHMgYXJlCisgICBwcm9iZWQgKHNlZSBhbHNvIGJlbG93KS4gVGhlIGRlZmF1bHQgaXMgMSAoSEQpLiBPbmx5IG9uZSBkcml2ZSB0eXBlCisgICBjYW4gYmUgc2VsZWN0ZWQuIElmIHlvdSBoYXZlIHR3byBkaXNrIGRyaXZlcywgc2VsZWN0IHRoZSAiYmV0dGVyIgorICAgdHlwZS4KKworICAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgPHRyYWNrYnVmZmVyPiB0ZWxscyB0aGUga2VybmVsIHdoZXRoZXIgdG8gdXNlCisgICB0cmFjayBidWZmZXJpbmcgKDEpIG9yIG5vdCAoMCkuIFRoZSBkZWZhdWx0IGlzIG1hY2hpbmUtZGVwZW5kZW50OgorICAgbm8gZm9yIHRoZSBNZWR1c2EgYW5kIHllcyBmb3IgYWxsIG90aGVycy4KKworICAgV2l0aCB0aGUgdHdvIGZvbGxvd2luZyBwYXJhbWV0ZXJzLCB5b3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdAorICAgc3RlcHJhdGUgdXNlZCBmb3IgZHJpdmUgQSBhbmQgQiwgcmVzcC4gCisKKworNC40KSBhdGFzY3NpPQorLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IGF0YXNjc2k9PGNhbl9xdWV1ZT5bLDxjbWRfcGVyX2x1bj5bLDxzY2F0LWdhdD5bLDxob3N0LWlkPlssPHRhZ2dlZD5dXV1dCisKKyAgVGhpcyBvcHRpb24gc2V0cyBzb21lIHBhcmFtZXRlcnMgZm9yIHRoZSBBdGFyaSBuYXRpdmUgU0NTSSBkcml2ZXIuCitHZW5lcmFsbHksIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGNhbiBiZSBvbWl0dGVkIGZyb20gdGhlIGVuZC4gQW5kCitmb3IgZWFjaCBvZiB0aGUgbnVtYmVycywgYSBuZWdhdGl2ZSB2YWx1ZSBtZWFucyAidXNlIGRlZmF1bHQiLiBUaGUKK2RlZmF1bHRzIGRlcGVuZCBvbiB3aGV0aGVyIFRULXN0eWxlIG9yIEZhbGNvbi1zdHlsZSBTQ1NJIGlzIHVzZWQuCitCZWxvdywgZGVmYXVsdHMgYXJlIG5vdGVkIGFzIG4vbSwgd2hlcmUgdGhlIGZpcnN0IHZhbHVlIHJlZmVycyB0bworVFQtU0NTSSBhbmQgdGhlIGxhdHRlciB0byBGYWxjb24tU0NTSS4gSWYgYW4gaWxsZWdhbCB2YWx1ZSBpcyBnaXZlbgorZm9yIG9uZSBwYXJhbWV0ZXIsIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCBhbmQgdGhhdCBvbmUgc2V0dGluZyBpcworaWdub3JlZCAob3RoZXJzIGFyZW4ndCBhZmZlY3RlZCkuCisKKyAgPGNhbl9xdWV1ZT46CisgICAgVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgU0NTSSBjb21tYW5kcyBxdWV1ZWQgaW50ZXJuYWxseSB0byB0aGUKKyAgICBBdGFyaSBTQ1NJIGRyaXZlci4gQSB2YWx1ZSBvZiAxIGVmZmVjdGl2ZWx5IHR1cm5zIG9mZiB0aGUgZHJpdmVyCisgICAgaW50ZXJuYWwgbXVsdGl0YXNraW5nIChpZiBpdCBjYXVzZXMgcHJvYmxlbXMpLiBMZWdhbCB2YWx1ZXMgYXJlID49CisgICAgMS4gPGNhbl9xdWV1ZT4gY2FuIGJlIGFzIGhpZ2ggYXMgeW91IGxpa2UsIGJ1dCB2YWx1ZXMgZ3JlYXRlciB0aGFuCisgICAgPGNtZF9wZXJfbHVuPiB0aW1lcyB0aGUgbnVtYmVyIG9mIFNDU0kgdGFyZ2V0cyAoTFVOcykgeW91IGhhdmUKKyAgICBkb24ndCBtYWtlIHNlbnNlLiBEZWZhdWx0OiAxNi84LgorCisgIDxjbWRfcGVyX2x1bj46CisgICAgTWF4aW11bSBudW1iZXIgb2YgU0NTSSBjb21tYW5kcyBpc3N1ZWQgdG8gdGhlIGRyaXZlciBmb3Igb25lCisgICAgbG9naWNhbCB1bml0IChMVU4sIHVzdWFsbHkgb25lIFNDU0kgdGFyZ2V0KS4gTGVnYWwgdmFsdWVzIHN0YXJ0CisgICAgZnJvbSAxLiBJZiB0YWdnZWQgcXVldWluZyAoc2VlIGJlbG93KSBpcyBub3QgdXNlZCwgdmFsdWVzIGdyZWF0ZXIKKyAgICB0aGFuIDIgZG9uJ3QgbWFrZSBzZW5zZSwgYnV0IHdhc3RlIG1lbW9yeS4gT3RoZXJ3aXNlLCB0aGUgbWF4aW11bQorICAgIGlzIHRoZSBudW1iZXIgb2YgY29tbWFuZCB0YWdzIGF2YWlsYWJsZSB0byB0aGUgZHJpdmVyIChjdXJyZW50bHkKKyAgICAzMikuIERlZmF1bHQ6IDgvMS4gKE5vdGU6IFZhbHVlcyA+IDEgc2VlbSB0byBjYXVzZSBwcm9ibGVtcyBvbiBhCisgICAgRmFsY29uLCBjYXVzZSBub3QgeWV0IGtub3duLikKKworICAgICAgVGhlIDxjbWRfcGVyX2x1bj4gdmFsdWUgYXQgYSBncmVhdCBwYXJ0IGRldGVybWluZXMgdGhlIGFtb3VudCBvZgorICAgIG1lbW9yeSBTQ1NJIHJlc2VydmVzIGZvciBpdHNlbGYuIFRoZSBmb3JtdWxhIGlzIHJhdGhlcgorICAgIGNvbXBsaWNhdGVkLCBidXQgSSBjYW4gZ2l2ZSB5b3Ugc29tZSBoaW50czoKKyAgICAgIG5vIHNjYXR0ZXItZ2F0aGVyICA6IGNtZF9wZXJfbHVuICogMjMyIGJ5dGVzCisgICAgICBmdWxsIHNjYXR0ZXItZ2F0aGVyOiBjbWRfcGVyX2x1biAqIGFwcHJveC4gMTcgS2J5dGVzCisKKyAgPHNjYXQtZ2F0PjoKKyAgICBTaXplIG9mIHRoZSBzY2F0dGVyLWdhdGhlciB0YWJsZSwgaS5lLiB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzCisgICAgY29uc2VjdXRpdmUgb24gdGhlIGRpc2sgdGhhdCBjYW4gYmUgbWVyZ2VkIGludG8gb25lIFNDU0kgY29tbWFuZC4KKyAgICBMZWdhbCB2YWx1ZXMgYXJlIGJldHdlZW4gMCBhbmQgMjU1LiBEZWZhdWx0OiAyNTUvMC4gTm90ZTogVGhpcworICAgIHZhbHVlIGlzIGZvcmNlZCB0byAwIG9uIGEgRmFsY29uLCBzaW5jZSBzY2F0dGVyLWdhdGhlciBpc24ndAorICAgIHBvc3NpYmxlIHdpdGggdGhlIFNULURNQS4gTm90IHVzaW5nIHNjYXR0ZXItZ2F0aGVyIGh1cnRzCisgICAgcGVyZm9ybWFuY2Ugc2lnbmlmaWNhbnRseS4KKworICA8aG9zdC1pZD46CisgICAgVGhlIFNDU0kgSUQgdG8gYmUgdXNlZCBieSB0aGUgaW5pdGlhdG9yICh5b3VyIEF0YXJpKS4gVGhpcyBpcworICAgIHVzdWFsbHkgNywgdGhlIGhpZ2hlc3QgcG9zc2libGUgSUQuIEV2ZXJ5IElEIG9uIHRoZSBTQ1NJIGJ1cyBtdXN0CisgICAgYmUgdW5pcXVlLiBEZWZhdWx0OiBkZXRlcm1pbmVkIGF0IHJ1biB0aW1lOiBJZiB0aGUgTlYtUkFNIGNoZWNrc3VtCisgICAgaXMgdmFsaWQsIGFuZCBiaXQgNyBpbiBieXRlIDMwIG9mIHRoZSBOVi1SQU0gaXMgc2V0LCB0aGUgbG93ZXIgMworICAgIGJpdHMgb2YgdGhpcyBieXRlIGFyZSB1c2VkIGFzIHRoZSBob3N0IElELiAoVGhpcyBtZXRob2QgaXMgZGVmaW5lZAorICAgIGJ5IEF0YXJpIGFuZCBhbHNvIHVzZWQgYnkgc29tZSBUT1MgSEQgZHJpdmVycy4pIElmIHRoZSBhYm92ZQorICAgIGlzbid0IGdpdmVuLCB0aGUgZGVmYXVsdCBJRCBpcyA3LiAoYm90aCwgVFQgYW5kIEZhbGNvbikuCisKKyAgPHRhZ2dlZD46CisgICAgMCBtZWFucyB0dXJuIG9mZiB0YWdnZWQgcXVldWluZyBzdXBwb3J0LCBhbGwgb3RoZXIgdmFsdWVzID4gMCBtZWFuCisgICAgdXNlIHRhZ2dlZCBxdWV1aW5nIGZvciB0YXJnZXRzIHRoYXQgc3VwcG9ydCBpdC4gRGVmYXVsdDogY3VycmVudGx5CisgICAgb2ZmLCBidXQgdGhpcyBtYXkgY2hhbmdlIHdoZW4gdGFnZ2VkIHF1ZXVpbmcgaGFuZGxpbmcgaGFzIGJlZW4KKyAgICBwcm92ZWQgdG8gYmUgcmVsaWFibGUuCisKKyAgICBUYWdnZWQgcXVldWluZyBtZWFucyB0aGF0IG1vcmUgdGhhbiBvbmUgY29tbWFuZCBjYW4gYmUgaXNzdWVkIHRvCisgICAgb25lIExVTiwgYW5kIHRoZSBTQ1NJIGRldmljZSBpdHNlbGYgb3JkZXJzIHRoZSByZXF1ZXN0cyBzbyB0aGV5CisgICAgY2FuIGJlIHBlcmZvcm1lZCBpbiBvcHRpbWFsIG9yZGVyLiBOb3QgYWxsIFNDU0kgZGV2aWNlcyBzdXBwb3J0CisgICAgdGFnZ2VkIHF1ZXVpbmcgKDotKCkuCisKKzQuNiBzd2l0Y2hlcz0KKy0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBzd2l0Y2hlcz08bGlzdCBvZiBzd2l0Y2hlcz4KKworICBXaXRoIHRoaXMgb3B0aW9uIHlvdSBjYW4gc3dpdGNoIHNvbWUgaGFyZHdhcmUgbGluZXMgdGhhdCBhcmUgb2Z0ZW4KK3VzZWQgdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBoYXJkd2FyZSBleHRlbnNpb25zLiBFeGFtcGxlcyBhcmUKK092ZXJTY2FuLCBvdmVyY2xvY2tpbmcsIC4uLgorCisgIFRoZSA8bGlzdCBvZiBzd2l0Y2hlcz4gaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgZm9sbG93aW5nCitpdGVtczoKKworICBpa2JkOiBzZXQgUlRTIG9mIHRoZSBrZXlib2FyZCBBQ0lBIGhpZ2gKKyAgbWlkaTogc2V0IFJUUyBvZiB0aGUgTUlESSBBQ0lBIGhpZ2gKKyAgc25kNjogc2V0IGJpdCA2IG9mIHRoZSBQU0cgcG9ydCBBCisgIHNuZDc6IHNldCBiaXQgNiBvZiB0aGUgUFNHIHBvcnQgQQorCitJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbWVudGlvbiBhIHN3aXRjaCBtb3JlIHRoYW4gb25jZSAobm8KK2RpZmZlcmVuY2UgdG8gb25seSBvbmNlKSwgYnV0IHlvdSBjYW4gZ2l2ZSBhcyBtYW55IHN3aXRjaGVzIGFzIHlvdQord2FudCB0byBlbmFibGUgZGlmZmVyZW50IGZlYXR1cmVzLiBUaGUgc3dpdGNoIGxpbmVzIGFyZSBzZXQgYXMgZWFybHkKK2FzIHBvc3NpYmxlIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24gKGV2ZW4gYmVmb3JlIGRldGVybWluaW5nIHRoZQorcHJlc2VudCBoYXJkd2FyZS4pCisKKyAgQWxsIG9mIHRoZSBpdGVtcyBjYW4gYWxzbyBiZSBwcmVmaXhlZCB3aXRoICJvdl8iLCBpLmUuICJvdl9pa2JkIiwKKyJvdl9taWRpIiwgLi4uIFRoZXNlIG9wdGlvbnMgYXJlIG1lYW50IGZvciBzd2l0Y2hpbmcgb24gYW4gT3ZlclNjYW4KK3ZpZGVvIGV4dGVuc2lvbi4gVGhlIGRpZmZlcmVuY2UgdG8gdGhlIGJhcmUgb3B0aW9uIGlzIHRoYXQgdGhlCitzd2l0Y2gtb24gaXMgZG9uZSBhZnRlciB2aWRlbyBpbml0aWFsaXphdGlvbiwgYW5kIHNvbWVob3cgc3luY2hyb25pemVkCit0byB0aGUgSEJMQU5LLiBBIHNwZWNpYWxpdHkgaXMgdGhhdCBvdl9pa2JkIGFuZCBvdl9taWRpIGFyZSBzd2l0Y2hlZAorb2ZmIGJlZm9yZSByZWJvb3RpbmcsIHNvIHRoYXQgT3ZlclNjYW4gaXMgZGlzYWJsZWQgYW5kIFRPUyBib290cworY29ycmVjdGx5LgorCisgIElmIHlvdSBnaXZlIGFuIG9wdGlvbiBib3RoLCB3aXRoIGFuZCB3aXRob3V0IHRoZSAib3ZfIiBwcmVmaXgsIHRoZQorZWFybGllciBpbml0aWFsaXphdGlvbiAoIm92XyItbGVzcykgdGFrZXMgcHJlY2VkZW5jZS4gQnV0IHRoZQorc3dpdGNoaW5nLW9mZiBvbiByZXNldCBzdGlsbCBoYXBwZW5zIGluIHRoaXMgY2FzZS4KKworNC41KSBzdHJhbV9zd2FwPQorLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IHN0cmFtX3N3YXA9PGRvX3N3YXA+Wyw8bWF4X3N3YXA+XQorCisgIFRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHRoZSBrZXJuZWwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aAorQ09ORklHX1NUUkFNX1NXQVAgZW5hYmxlZC4gTm9ybWFsbHksIHRoZSBrZXJuZWwgdGhlbiBkZXRlcm1pbmVzCitkeW5hbWljYWxseSB3aGV0aGVyIHRvIGFjdHVhbGx5IHVzZSBTVC1SQU0gYXMgc3dhcCBzcGFjZS4gKEN1cnJlbnRseSwKK3RoZSBmcmFjdGlvbiBvZiBTVC1SQU0gbXVzdCBiZSBsZXNzIG9yIGVxdWFsIDEvMyBvZiB0b3RhbCBtZW1vcnkgdG8KK2VuYWJsZSB0aGlzIHN3YXBwaW5nLikgWW91IGNhbiBvdmVycmlkZSB0aGUga2VybmVsJ3MgZGVjaXNpb24gYnkKK3NwZWNpZnlpbmcgdGhpcyBvcHRpb24uIDEgZm9yIDxkb19zd2FwPiBtZWFucyBhbHdheXMgZW5hYmxlIHRoZSBzd2FwLAorZXZlbiBpZiB5b3UgaGF2ZSBsZXNzIGFsdGVybmF0ZSBSQU0uIDAgc3RhbmRzIGZvciBuZXZlciBzd2FwIHRvCitTVC1SQU0sIGV2ZW4gaWYgaXQncyBzbWFsbCBlbm91Z2ggY29tcGFyZWQgdG8gdGhlIHJlc3Qgb2YgbWVtb3J5LgorCisgIElmIFNULVJBTSBzd2FwcGluZyBpcyBlbmFibGVkLCB0aGUga2VybmVsIHVzdWFsbHkgdXNlcyBhbGwgZnJlZQorU1QtUkFNIGFzIHN3YXAgImRldmljZSIuIElmIHRoZSBrZXJuZWwgcmVzaWRlcyBpbiBTVC1SQU0sIHRoZSByZWdpb24KK2FsbG9jYXRlZCBieSBpdCBpcyBvYnZpb3VzbHkgbmV2ZXIgdXNlZCBmb3Igc3dhcHBpbmcgOi0pIFlvdSBjYW4gYWxzbworbGltaXQgdGhpcyBhbW91bnQgYnkgc3BlY2lmeWluZyB0aGUgc2Vjb25kIHBhcmFtZXRlciwgPG1heF9zd2FwPiwgaWYKK3lvdSB3YW50IHRvIHVzZSBwYXJ0cyBvZiBTVC1SQU0gYXMgbm9ybWFsIHN5c3RlbSBtZW1vcnkuIDxtYXhfc3dhcD4gaXMKK2luIGtCeXRlcyBhbmQgdGhlIG51bWJlciBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA0IChvdGhlcndpc2U6IHJvdW5kZWQKK2Rvd24pLgorCis1KSBPcHRpb25zIGZvciBBbWlnYSBPbmx5OgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNS4xKSB2aWRlbz0KKy0tLS0tLS0tLS0tCisKK1N5bnRheDogdmlkZW89PGZibmFtZT46PHN1Yi1vcHRpb25zLi4uPgorCitUaGUgPGZibmFtZT4gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUgYnVmZmVyLCB2YWxpZAorb3B0aW9ucyBhcmUgYGFtaWZiJywgYGN5YmVyJywgJ3ZpcmdlJywgYHJldHozJyBhbmQgYGNsZ2VuJywgcHJvdmlkZWQKK3RoYXQgdGhlIHJlc3BlY3RpdmUgZnJhbWUgYnVmZmVyIGRldmljZXMgaGF2ZSBiZWVuIGNvbXBpbGVkIGludG8gdGhlCitrZXJuZWwgKG9yIGNvbXBpbGVkIGFzIGxvYWRhYmxlIG1vZHVsZXMpLiBUaGUgYmVoYXZpb3Igb2YgdGhlIDxmYm5hbWU+CitvcHRpb24gd2FzIGNoYW5nZWQgaW4gMi4xLjU3IHNvIGl0IGlzIG5vdyByZWNvbW1lbmRlZCB0byBzcGVjaWZ5IHRoaXMKK29wdGlvbi4KKworVGhlIDxzdWItb3B0aW9ucz4gaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgc3ViLW9wdGlvbnMgbGlzdGVkCitiZWxvdy4gVGhpcyBvcHRpb24gaXMgb3JnYW5pemVkIHNpbWlsYXIgdG8gdGhlIEF0YXJpIHZlcnNpb24gb2YgdGhlCisidmlkZW8iLW9wdGlvbiAoNC4xKSwgYnV0IGtub3dzIGZld2VyIHN1Yi1vcHRpb25zLgorCis1LjEuMSkgdmlkZW8gbW9kZQorLS0tLS0tLS0tLS0tLS0tLS0KKworQWdhaW4sIHNpbWlsYXIgdG8gdGhlIHZpZGVvIG1vZGUgZm9yIHRoZSBBdGFyaSAoc2VlIDQuMS4xKS4gUHJlZGVmaW5lZAorbW9kZXMgZGVwZW5kIG9uIHRoZSB1c2VkIGZyYW1lIGJ1ZmZlciBkZXZpY2UuCisKK09DUywgRUNTIGFuZCBBR0EgbWFjaGluZXMgYWxsIHVzZSB0aGUgY29sb3IgZnJhbWUgYnVmZmVyLiBUaGUgZm9sbG93aW5nCitwcmVkZWZpbmVkIHZpZGVvIG1vZGVzIGFyZSBhdmFpbGFibGU6CisKK05UU0MgbW9kZXM6CisgLSBudHNjICAgICAgICAgICAgOiA2NDB4MjAwLCAxNSBrSHosIDYwIEh6CisgLSBudHNjLWxhY2UgICAgICAgOiA2NDB4NDAwLCAxNSBrSHosIDYwIEh6IGludGVybGFjZWQKK1BBTCBtb2RlczoKKyAtIHBhbCAgICAgICAgICAgICA6IDY0MHgyNTYsIDE1IGtIeiwgNTAgSHoKKyAtIHBhbC1sYWNlICAgICAgICA6IDY0MHg1MTIsIDE1IGtIeiwgNTAgSHogaW50ZXJsYWNlZAorRUNTIG1vZGVzOgorIC0gbXVsdGlzY2FuICAgICAgIDogNjQweDQ4MCwgMjkga0h6LCA1NyBIegorIC0gbXVsdGlzY2FuLWxhY2UgIDogNjQweDk2MCwgMjkga0h6LCA1NyBIeiBpbnRlcmxhY2VkCisgLSBldXJvMzYgICAgICAgICAgOiA2NDB4MjAwLCAxNSBrSHosIDcyIEh6CisgLSBldXJvMzYtbGFjZSAgICAgOiA2NDB4NDAwLCAxNSBrSHosIDcyIEh6IGludGVybGFjZWQKKyAtIGV1cm83MiAgICAgICAgICA6IDY0MHg0MDAsIDI5IGtIeiwgNjggSHoKKyAtIGV1cm83Mi1sYWNlICAgICA6IDY0MHg4MDAsIDI5IGtIeiwgNjggSHogaW50ZXJsYWNlZAorIC0gc3VwZXI3MiAgICAgICAgIDogODAweDMwMCwgMjMga0h6LCA3MCBIegorIC0gc3VwZXI3Mi1sYWNlICAgIDogODAweDYwMCwgMjMga0h6LCA3MCBIeiBpbnRlcmxhY2VkCisgLSBkYmxudHNjLWZmICAgICAgOiA2NDB4NDAwLCAyNyBrSHosIDU3IEh6CisgLSBkYmxudHNjLWxhY2UgICAgOiA2NDB4ODAwLCAyNyBrSHosIDU3IEh6IGludGVybGFjZWQKKyAtIGRibHBhbC1mZiAgICAgICA6IDY0MHg1MTIsIDI3IGtIeiwgNDcgSHoKKyAtIGRibHBhbC1sYWNlICAgICA6IDY0MHgxMDI0LCAyNyBrSHosIDQ3IEh6IGludGVybGFjZWQKKyAtIGRibG50c2MgICAgICAgICA6IDY0MHgyMDAsIDI3IGtIeiwgNTcgSHogZG91Ymxlc2NhbgorIC0gZGJscGFsICAgICAgICAgIDogNjQweDI1NiwgMjcga0h6LCA0NyBIeiBkb3VibGVzY2FuCitWR0EgbW9kZXM6CisgLSB2Z2EgICAgICAgICAgICAgOiA2NDB4NDgwLCAzMSBrSHosIDYwIEh6CisgLSB2Z2E3MCAgICAgICAgICAgOiA2NDB4NDAwLCAzMSBrSHosIDcwIEh6CisKK1BsZWFzZSBub3RpY2UgdGhhdCB0aGUgRUNTIGFuZCBWR0EgbW9kZXMgcmVxdWlyZSBlaXRoZXIgYW4gRUNTIG9yIEFHQQorY2hpcHNldCwgYW5kIHRoYXQgdGhlc2UgbW9kZXMgYXJlIGxpbWl0ZWQgdG8gMi1iaXQgY29sb3IgZm9yIHRoZSBFQ1MKK2NoaXBzZXQgYW5kIDgtYml0IGNvbG9yIGZvciB0aGUgQUdBIGNoaXBzZXQuCisKKzUuMS4yKSBkZXB0aAorLS0tLS0tLS0tLS0tCisKK1N5bnRheDogZGVwdGg6PG5yLiBvZiBiaXQtcGxhbmVzPgorCitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0LXBsYW5lcyBmb3IgdGhlIHNlbGVjdGVkIHZpZGVvLW1vZGUuCisKKzUuMS4zKSBpbnZlcnNlCistLS0tLS0tLS0tLS0tLQorCitVc2UgaW52ZXJ0ZWQgZGlzcGxheSAoYmxhY2sgb24gd2hpdGUpLiBGdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgdGhlCisiaW52ZXJzZSIgc3ViLW9wdGlvbiBmb3IgdGhlIEF0YXJpLgorCis1LjEuNCkgZm9udAorLS0tLS0tLS0tLS0KKworU3ludGF4OiBmb250Ojxmb250bmFtZT4KKworU3BlY2lmeSB0aGUgZm9udCB0byB1c2UgaW4gdGV4dCBtb2Rlcy4gRnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIHRoZQorImZvbnQiIHN1Yi1vcHRpb24gZm9yIHRoZSBBdGFyaSwgZXhjZXB0IHRoYXQgYFBFQVJMOHg4JyBpcyB1c2VkIGluc3RlYWQKK29mIGBWR0E4eDgnIGlmIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSBkaXNwbGF5IGlzIGxlc3MgdGhhbiA0MDAgcGl4ZWwKK3Jvd3MuCisKKzUuMS41KSBtb25pdG9yY2FwOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IG1vbml0b3JjYXA6PHZtaW4+Ozx2bWF4Pjs8aG1pbj47PGhtYXg+CisKK1RoaXMgZGVzY3JpYmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBtdWx0aXN5bmMgbW9uaXRvci4gRm9yIG5vdywgb25seQordGhlIGNvbG9yIGZyYW1lIGJ1ZmZlciB1c2VzIHRoZSBzZXR0aW5ncyBvZiAibW9uaXRvcmNhcDoiLgorCisgIDx2bWluPiBhbmQgPHZtYXg+IGFyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSwgcmVzcC4sIHZlcnRpY2FsIGZyZXF1ZW5jaWVzCit5b3VyIG1vbml0b3IgY2FuIHdvcmsgd2l0aCwgaW4gSHouIDxobWluPiBhbmQgPGhtYXg+IGFyZSB0aGUgc2FtZSBmb3IKK3RoZSBob3Jpem9udGFsIGZyZXF1ZW5jeSwgaW4ga0h6LgorCisgIFRoZSBkZWZhdWx0cyBhcmUgNTA7OTA7MTU7MzggKEdlbmVyaWMgQW1pZ2EgbXVsdGlzeW5jIG1vbml0b3IpLgorCisKKzUuMikgZmRfZGVmX2RmMD0KKy0tLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBmZF9kZWZfZGYwPTx2YWx1ZT4KKworU2V0cyB0aGUgZGYwIHZhbHVlIGZvciAic2lsZW50IiBmbG9wcHkgZHJpdmVzLiBUaGUgdmFsdWUgc2hvdWxkIGJlIGluCitoZXhhZGVjaW1hbCB3aXRoICIweCIgcHJlZml4LgorCisKKzUuMykgd2QzM2M5Mz0KKy0tLS0tLS0tLS0tLS0KKworU3ludGF4OiB3ZDMzYzkzPTxzdWItb3B0aW9ucy4uLj4KKworVGhlc2Ugb3B0aW9ucyBhZmZlY3QgdGhlIEE1OTAvQTIwOTEsIEEzMDAwIGFuZCBHVlAgU2VyaWVzIElJIFNDU0kKK2NvbnRyb2xsZXJzLgorCitUaGUgPHN1Yi1vcHRpb25zPiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBzdWItb3B0aW9ucyBsaXN0ZWQKK2JlbG93LgorCis1LjMuMSkgbm9zeW5jCistLS0tLS0tLS0tLS0tCisKK1N5bnRheDogbm9zeW5jOmJpdG1hc2sKKworICBiaXRtYXNrIGlzIGEgYnl0ZSB3aGVyZSB0aGUgMXN0IDcgYml0cyBjb3JyZXNwb25kIHdpdGggdGhlIDcKK3Bvc3NpYmxlIFNDU0kgZGV2aWNlcy4gU2V0IGEgYml0IHRvIHByZXZlbnQgc3luYyBuZWdvdGlhdGlvbiBvbiB0aGF0CitkZXZpY2UuIFRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhIGNvbW1hbmQtbGluZSBzdWNoIGFzCisid2QzM2M5Mz0yNTUiIHdpbGwgYmUgYXV0b21hdGljYWxseSB0cmFuc2xhdGVkIHRvCisid2QzM2M5Mz1ub3N5bmM6MHhmZiIuIFRoZSBkZWZhdWx0IGlzIHRvIGRpc2FibGUgc3luYyBuZWdvdGlhdGlvbiBmb3IKK2FsbCBkZXZpY2VzLCBlZy4gbm9zeW5jOjB4ZmYuCisKKzUuMy4yKSBwZXJpb2QKKy0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBwZXJpb2Q6bnMKKworICBgbnMnIGlzIHRoZSBtaW5pbXVtICMgb2YgbmFub3NlY29uZHMgaW4gYSBTQ1NJIGRhdGEgdHJhbnNmZXIKK3BlcmlvZC4gRGVmYXVsdCBpcyA1MDA7IGFjY2VwdGFibGUgdmFsdWVzIGFyZSAyNTAgLSAxMDAwLgorCis1LjMuMykgZGlzY29ubmVjdAorLS0tLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBkaXNjb25uZWN0OngKKworICBTcGVjaWZ5IHggPSAwIHRvIG5ldmVyIGFsbG93IGRpc2Nvbm5lY3RzLCAyIHRvIGFsd2F5cyBhbGxvdyB0aGVtLgoreCA9IDEgZG9lcyAnYWRhcHRpdmUnIGRpc2Nvbm5lY3RzLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBhbmQgZ2VuZXJhbGx5Cit0aGUgYmVzdCBjaG9pY2UuCisKKzUuMy40KSBkZWJ1ZworLS0tLS0tLS0tLS0tCisKK1N5bnRheDogZGVidWc6eAorCisgIElmIGBERUJVR0dJTkdfT04nIGlzIGRlZmluZWQsIHggaXMgYSBiaXQgbWFzayB0aGF0IGNhdXNlcyB2YXJpb3VzCit0eXBlcyBvZiBkZWJ1ZyBvdXRwdXQgdG8gcHJpbnRlZCAtIHNlZSB0aGUgREJfeHh4IGRlZmluZXMgaW4KK3dkMzNjOTMuaC4KKworNS4zLjUpIGNsb2NrCistLS0tLS0tLS0tLS0KKworU3ludGF4OiBjbG9jazp4CisKKyAgeCA9IGNsb2NrIGlucHV0IGluIE1IeiBmb3IgV0QzM2M5MyBjaGlwLiBOb3JtYWwgdmFsdWVzIHdvdWxkIGJlIGZyb20KKzggdGhyb3VnaCAyMC4gVGhlIGRlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbiB5b3VyIGhvc3RhZGFwdGVyKHMpLAorZGVmYXVsdCBmb3IgdGhlIEEzMDAwIGludGVybmFsIGNvbnRyb2xsZXIgaXMgMTQsIGZvciB0aGUgQTIwOTEgaXQncyA4CithbmQgZm9yIHRoZSBHVlAgaG9zdGFkYXB0ZXJzIGl0J3MgZWl0aGVyIDggb3IgMTQsIGRlcGVuZGluZyBvbiB0aGUKK2hvc3RhZGFwdGVyIGFuZCB0aGUgU0NTSS1jbG9jayBqdW1wZXIgcHJlc2VudCBvbiBzb21lIEdWUAoraG9zdGFkYXB0ZXJzLgorCis1LjMuNikgbmV4dAorLS0tLS0tLS0tLS0KKworICBObyBhcmd1bWVudC4gVXNlZCB0byBzZXBhcmF0ZSBibG9ja3Mgb2Yga2V5d29yZHMgd2hlbiB0aGVyZSdzIG1vcmUKK3RoYW4gb25lIHdkMzNjOTMtYmFzZWQgaG9zdCBhZGFwdGVyIGluIHRoZSBzeXN0ZW0uCisKKzUuMy43KSBub2RtYQorLS0tLS0tLS0tLS0tCisKK1N5bnRheDogbm9kbWE6eAorCisgIElmIHggaXMgMSAob3IgaWYgdGhlIG9wdGlvbiBpcyBqdXN0IHdyaXR0ZW4gYXMgIm5vZG1hIiksIHRoZSBXRDMzYzkzCitjb250cm9sbGVyIHdpbGwgbm90IHVzZSBETUEgKD0gZGlyZWN0IG1lbW9yeSBhY2Nlc3MpIHRvIGFjY2VzcyB0aGUKK0FtaWdhJ3MgbWVtb3J5LiAgVGhpcyBpcyB1c2VmdWwgZm9yIHNvbWUgc3lzdGVtcyAobGlrZSBBMzAwMCdzIGFuZAorQTQwMDAncyB3aXRoIHRoZSBBMzY0MCBhY2NlbGVyYXRvciwgcmV2aXNpb24gMy4wKSB0aGF0IGhhdmUgcHJvYmxlbXMKK3VzaW5nIERNQSB0byBjaGlwIG1lbW9yeS4gIFRoZSBkZWZhdWx0IGlzIDAsIGkuZS4gdG8gdXNlIERNQSBpZgorcG9zc2libGUuCisKKworNS40KSBndnAxMT0KKy0tLS0tLS0tLS0tCisKK1N5bnRheDogZ3ZwMTE9PGFkZHItbWFzaz4KKworICBUaGUgZWFybGllciB2ZXJzaW9ucyBvZiB0aGUgR1ZQIGRyaXZlciBkaWQgbm90IGhhbmRsZSBETUEKK2FkZHJlc3MtbWFzayBzZXR0aW5ncyBjb3JyZWN0bHkgd2hpY2ggbWFkZSBpdCBuZWNlc3NhcnkgZm9yIHNvbWUKK3Blb3BsZSB0byB1c2UgdGhpcyBvcHRpb24sIGluIG9yZGVyIHRvIGdldCB0aGVpciBHVlAgY29udHJvbGxlcgorcnVubmluZyB1bmRlciBMaW51eC4gVGhlc2UgcHJvYmxlbXMgaGF2ZSBob3BlZnVsbHkgYmVlbiBzb2x2ZWQgYW5kIHRoZQordXNlIG9mIHRoaXMgb3B0aW9uIGlzIG5vdyBoaWdobHkgdW5yZWNvbW1lbmRlZCEKKworICBJbmNvcnJlY3QgdXNlIGNhbiBsZWFkIHRvIHVucHJlZGljdGFibGUgYmVoYXZpb3IsIHNvIHBsZWFzZSBvbmx5IHVzZQordGhpcyBvcHRpb24gaWYgeW91ICprbm93KiB3aGF0IHlvdSBhcmUgZG9pbmcgYW5kIGhhdmUgYSByZWFzb24gdG8gZG8KK3NvLiBJbiBhbnkgY2FzZSBpZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBhbmQgbmVlZCB0byB1c2UgdGhpcworb3B0aW9uLCBwbGVhc2UgaW5mb3JtIHVzIGFib3V0IGl0IGJ5IG1haWxpbmcgdG8gdGhlIExpbnV4LzY4ayBrZXJuZWwKK21haWxpbmcgbGlzdC4KKworICBUaGUgYWRkcmVzcyBtYXNrIHNldCBieSB0aGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hpY2ggYWRkcmVzc2VzIGFyZQordmFsaWQgZm9yIERNQSB3aXRoIHRoZSBHVlAgU2VyaWVzIElJIFNDU0kgY29udHJvbGxlci4gQW4gYWRkcmVzcyBpcwordmFsaWQsIGlmIG5vIGJpdHMgYXJlIHNldCBleGNlcHQgdGhlIGJpdHMgdGhhdCBhcmUgc2V0IGluIHRoZSBtYXNrLAordG9vLgorCisgIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEdWUCBjYW4gb25seSBETUEgaW50byBhIDI0IGJpdCBhZGRyZXNzIHJhbmdlLAorc29tZSBjYW4gYWRkcmVzcyBhIDI1IGJpdCBhZGRyZXNzIHJhbmdlIHdoaWxlIG90aGVycyBjYW4gdXNlIHRoZSB3aG9sZQorMzIgYml0IGFkZHJlc3MgcmFuZ2UgZm9yIERNQS4gVGhlIGNvcnJlY3Qgc2V0dGluZyBkZXBlbmRzIG9uIHlvdXIKK2NvbnRyb2xsZXIgYW5kIHNob3VsZCBiZSBhdXRvZGV0ZWN0ZWQgYnkgdGhlIGRyaXZlci4gQW4gZXhhbXBsZSBpcyB0aGUKKzI0IGJpdCByZWdpb24gd2hpY2ggaXMgc3BlY2lmaWVkIGJ5IGEgbWFzayBvZiAweDAwZmZmZmZlLgorCisKKzUuNSkgNTNjN3h4PQorLS0tLS0tLS0tLS0tCisKK1N5bnRheDogNTNjN3h4PTxzdWItb3B0aW9ucy4uLj4KKworVGhlc2Ugb3B0aW9ucyBhZmZlY3QgdGhlIEE0MDAwVCwgQTQwOTEsIFdhcnBFbmdpbmUsIEJsaXp6YXJkIDYwM2UrLAorYW5kIEdGb3JjZSAwNDAvMDYwIFNDU0kgY29udHJvbGxlcnMgb24gdGhlIEFtaWdhLCBhcyB3ZWxsIGFzIHRoZQorYnVpbHRpbiBNVk1FIDE2eCBTQ1NJIGNvbnRyb2xsZXIuCisKK1RoZSA8c3ViLW9wdGlvbnM+IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHN1Yi1vcHRpb25zIGxpc3RlZAorYmVsb3cuCisKKzUuNS4xKSBub3N5bmMKKy0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBub3N5bmM6MAorCisgIERpc2FibGVzIHN5bmMgbmVnb3RpYXRpb24gZm9yIGFsbCBkZXZpY2VzLiAgQW55IHZhbHVlIGFmdGVyIHRoZQorICBjb2xvbiBpcyBhY2NlcHRhYmxlIChhbmQgaGFzIHRoZSBzYW1lIGVmZmVjdCkuCisKKzUuNS4yKSBub2FzeW5jCistLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IG5vYXN5bmM6MAorCisgIERpc2FibGVzIGFzeW5jIGFuZCBzeW5jIG5lZ290aWF0aW9uIGZvciBhbGwgZGV2aWNlcy4gIEFueSB2YWx1ZQorICBhZnRlciB0aGUgY29sb24gaXMgYWNjZXB0YWJsZSAoYW5kIGhhcyB0aGUgc2FtZSBlZmZlY3QpLgorCis1LjUuMykgbm9kaXNjb25uZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N5bnRheDogbm9kaXNjb25uZWN0OjAKKworICBEaXNhYmxlcyBTQ1NJIGRpc2Nvbm5lY3RzLiAgQW55IHZhbHVlIGFmdGVyIHRoZSBjb2xvbiBpcyBhY2NlcHRhYmxlCisgIChhbmQgaGFzIHRoZSBzYW1lIGVmZmVjdCkuCisKKzUuNS40KSB2YWxpZGlkcworLS0tLS0tLS0tLS0tLS0tCisKK1N5bnRheDogdmFsaWRpZHM6MHhOTgorCisgIFNwZWNpZnkgd2hpY2ggU0NTSSBpZHMgdGhlIGRyaXZlciBzaG91bGQgcGF5IGF0dGVudGlvbiB0by4gIFRoaXMgaXMKKyAgYSBiaXRtYXNrIChpLmUuIHRvIG9ubHkgcGF5IGF0dGVudGlvbiB0byBJRCM0LCB5b3UnZCB1c2UgMHgxMCkuCisgIERlZmF1bHQgaXMgMHg3ZiAoZGV2aWNlcyAwLTYpLgorCis1LjUuNSkgb3B0aGkKKzUuNS42KSBvcHRsbworLS0tLS0tLS0tLS0tCisKK1N5bnRheDogb3B0aGk6TSxvcHRsbzpOCisKKyAgU3BlY2lmeSBvcHRpb25zIGZvciAiaG9zdGRhdGEtPm9wdGlvbnMiLiAgVGhlIGFjY2VwdGFibGUgZGVmaW5pdGlvbnMKKyAgYXJlIGxpc3RlZCBpbiBkcml2ZXJzL3Njc2kvNTNjN3h4Lmg7IHRoZSAzMiBoaWdoIGJpdHMgc2hvdWxkIGJlIGluCisgIG9wdGhpIGFuZCB0aGUgMzIgbG93IGJpdHMgaW4gb3B0bG8uICBUaGV5IG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZQorICBvcmRlciBvcHRoaT1NLG9wdGxvPU4uCisKKzUuNS43KSBuZXh0CistLS0tLS0tLS0tLQorCisgIE5vIGFyZ3VtZW50LiBVc2VkIHRvIHNlcGFyYXRlIGJsb2NrcyBvZiBrZXl3b3JkcyB3aGVuIHRoZXJlJ3MgbW9yZQorICB0aGFuIG9uZSA1M2M3eHggaG9zdCBhZGFwdGVyIGluIHRoZSBzeXN0ZW0uCisKKworLyogTG9jYWwgVmFyaWFibGVzOiAqLworLyogbW9kZTogdGV4dCAgICAgICAqLworLyogRW5kOiAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYWdpYy1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9tYWdpYy1udW1iZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOGVlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hZ2ljLW51bWJlci50eHQKQEAgLTAsMCArMSwxNzQgQEAKK1RoaXMgZmlsZSBpcyBhIHJlZ2lzdHJ5IG9mIG1hZ2ljIG51bWJlcnMgd2hpY2ggYXJlIGluIHVzZS4gIFdoZW4geW91CithZGQgYSBtYWdpYyBudW1iZXIgdG8gYSBzdHJ1Y3R1cmUsIHlvdSBzaG91bGQgYWxzbyBhZGQgaXQgdG8gdGhpcworZmlsZSwgc2luY2UgaXQgaXMgYmVzdCBpZiB0aGUgbWFnaWMgbnVtYmVycyB1c2VkIGJ5IHZhcmlvdXMgc3RydWN0dXJlcworYXJlIHVuaXF1ZS4KKworSXQgaXMgYSAqdmVyeSogZ29vZCBpZGVhIHRvIHByb3RlY3Qga2VybmVsIGRhdGEgc3RydWN0dXJlcyB3aXRoIG1hZ2ljCitudW1iZXJzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGNoZWNrIGF0IHJ1biB0aW1lIHdoZXRoZXIgKGEpIGEgc3RydWN0dXJlCitoYXMgYmVlbiBjbG9iYmVyZWQsIG9yIChiKSB5b3UndmUgcGFzc2VkIHRoZSB3cm9uZyBzdHJ1Y3R1cmUgdG8gYQorcm91dGluZS4gIFRoaXMgbGFzdCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCAtLS0gcGFydGljdWxhcmx5IHdoZW4geW91IGFyZQorcGFzc2luZyBwb2ludGVycyB0byBzdHJ1Y3R1cmVzIHZpYSBhIHZvaWQgKiBwb2ludGVyLiAgVGhlIHR0eSBjb2RlLAorZm9yIGV4YW1wbGUsIGRvZXMgdGhpcyBmcmVxdWVudGx5IHRvIHBhc3MgZHJpdmVyLXNwZWNpZmljIGFuZCBsaW5lCitkaXNjaXBsaW5lLXNwZWNpZmljIHN0cnVjdHVyZXMgYmFjayBhbmQgZm9ydGguCisKK1RoZSB3YXkgdG8gdXNlIG1hZ2ljIG51bWJlcnMgaXMgdG8gZGVjbGFyZSB0aGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YKK3RoZSBzdHJ1Y3R1cmUsIGxpa2Ugc286CisKK3N0cnVjdCB0dHlfbGRpc2MgeworCWludAltYWdpYzsKKwkuLi4KK307CisKK1BsZWFzZSBmb2xsb3cgdGhpcyBkaXNjaXBsaW5lIHdoZW4geW91IGFyZSBhZGRpbmcgZnV0dXJlIGVuaGFuY2VtZW50cwordG8gdGhlIGtlcm5lbCEgIEl0IGhhcyBzYXZlZCBtZSBjb3VudGxlc3MgaG91cnMgb2YgZGVidWdnaW5nLAorZXNwZWNpYWxseSBpbiB0aGUgc2NyZXd5IGNhc2VzIHdoZXJlIGFuIGFycmF5IGhhcyBiZWVuIG92ZXJydW4gYW5kCitzdHJ1Y3R1cmVzIGZvbGxvd2luZyB0aGUgYXJyYXkgaGF2ZSBiZWVuIG92ZXJ3cml0dGVuLiAgVXNpbmcgdGhpcworZGlzY2lwbGluZSwgdGhlc2UgY2FzZXMgZ2V0IGRldGVjdGVkIHF1aWNrbHkgYW5kIHNhZmVseS4KKworCQkJCQlUaGVvZG9yZSBUcydvCisJCQkJCTMxIE1hciA5NAorCitUaGUgbWFnaWMgdGFibGUgaXMgY3VycmVudCB0byBMaW51eCAyLjEuNTUuCisKKwkJCQkJTWljaGFlbCBDaGFzdGFpbgorCQkJCQk8bWFpbHRvOm1lY0BzaG91dC5uZXQ+CisJCQkJCTIyIFNlcCAxOTk3CisKK05vdyBpdCBzaG91bGQgYmUgdXAgdG8gZGF0ZSB3aXRoIExpbnV4IDIuMS4xMTIuIEJlY2F1c2UKK3dlIGFyZSBpbiBmZWF0dXJlIGZyZWV6ZSB0aW1lIGl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdAorc29tZXRoaW5nIHdpbGwgY2hhbmdlIGJlZm9yZSAyLjIueC4gVGhlIGVudHJpZXMgYXJlCitzb3J0ZWQgYnkgbnVtYmVyIGZpZWxkLgorCisJCQkJCUtyenlzenRvZiBHLiBCYXJhbm93c2tpCisJCQkJCTxtYWlsdG86IGtnYkBrbm0ub3JnLnBsPgorCQkJCQkyOSBKdWwgMTk5OAorCitVcGRhdGVkIHRoZSBtYWdpYyB0YWJsZSB0byBMaW51eCAyLjUuNDUuIFJpZ2h0IG92ZXIgdGhlIGZlYXR1cmUgZnJlZXplLAorYnV0IGl0IGlzIHBvc3NpYmxlIHRoYXQgc29tZSBuZXcgbWFnaWMgbnVtYmVycyB3aWxsIHNuZWFrIGludG8gdGhlCitrZXJuZWwgYmVmb3JlIDIuNi54IHlldC4KKworCQkJCQlQZXRyIEJhdWRpcworCQkJCQk8cGFza3lAdWN3LmN6PgorCQkJCQkwMyBOb3YgMjAwMgorCitVcGRhdGVkIHRoZSBtYWdpYyB0YWJsZSB0byBMaW51eCAyLjUuNzQuCisKKwkJCQkJRmFiaWFuIEZyZWRlcmljaworCQkJCQk8ZmZyZWRlcmlja0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisJCQkJCTA5IEp1bCAyMDAzCisKKworTWFnaWMgTmFtZSAgICAgICAgICAgIE51bWJlciAgICAgIFN0cnVjdHVyZSAgICAgICAgICAgIEZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUEdfTUFHSUMgICAgICAgICAgICAgICdQJyAgICAgICAgIHBnX3tyZWFkLHdyaXRlfV9oZHIgaW5jbHVkZS9saW51eC9wZy5oCitDTUFHSUMgICAgICAgICAgICAgICAgMHgwMTExICAgICAgdXNlciAgICAgICAgICAgICAgaW5jbHVkZS9saW51eC9hLm91dC5oCitNS0lTU19EUklWRVJfTUFHSUMgICAgMHgwNGJmICAgICAgbWtpc3NfY2hhbm5lbCAgICAgZHJpdmVycy9uZXQvbWtpc3MuaAorUklTQ09NOF9NQUdJQyAgICAgICAgIDB4MDkwNyAgICAgIHJpc2NvbV9wb3J0ICAgICAgIGRyaXZlcnMvY2hhci9yaXNjb204LmgKK1NQRUNJQUxJWF9NQUdJQyAgICAgICAweDA5MDcgICAgICBzcGVjaWFsaXhfcG9ydCAgICBkcml2ZXJzL2NoYXIvc3BlY2lhbGl4X2lvOC5oCitBVVJPUkFfTUFHSUMgICAgICAgICAgMHgwQTE4ICAgICAgQXVyb3JhX3BvcnQgICAgICAgZHJpdmVycy9zYnVzL2NoYXIvYXVyb3JhLmgKK0hETENfTUFHSUMgICAgICAgICAgICAweDIzOWUgICAgICBuX2hkbGMgICAgICAgICAgICBkcml2ZXJzL2NoYXIvbl9oZGxjLmMKK0FQTV9CSU9TX01BR0lDICAgICAgICAweDQxMDEgICAgICBhcG1fdXNlciAgICAgICAgICBhcmNoL2kzODYva2VybmVsL2FwbS5jCitDWUNMQURFU19NQUdJQyAgICAgICAgMHg0MzU5ICAgICAgY3ljbGFkZXNfcG9ydCAgICAgaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCitEQl9NQUdJQyAgICAgICAgICAgICAgMHg0NDQyICAgICAgZmNfaW5mbyAgICAgICAgICAgZHJpdmVycy9uZXQvaXBoNTUyNl9ub3ZyYW0uYworRExfTUFHSUMgICAgICAgICAgICAgIDB4NDQ0ZCAgICAgIGZjX2luZm8gICAgICAgICAgIGRyaXZlcnMvbmV0L2lwaDU1MjZfbm92cmFtLmMKK0ZBU1lOQ19NQUdJQyAgICAgICAgICAweDQ2MDEgICAgICBmYXN5bmNfc3RydWN0ICAgICBpbmNsdWRlL2xpbnV4L2ZzLmgKK0ZGX01BR0lDICAgICAgICAgICAgICAweDQ2NDYgICAgICBmY19pbmZvICAgICAgICAgICBkcml2ZXJzL25ldC9pcGg1NTI2X25vdnJhbS5jCitJU0lDT01fTUFHSUMgICAgICAgICAgMHg0ZDU0ICAgICAgaXNpX3BvcnQgICAgICAgICAgaW5jbHVkZS9saW51eC9pc2ljb20uaAorUFRZX01BR0lDICAgICAgICAgICAgIDB4NTAwMSAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcnMvY2hhci9wdHkuYworUFBQX01BR0lDICAgICAgICAgICAgIDB4NTAwMiAgICAgIHBwcCAgICAgICAgICAgICAgIGluY2x1ZGUvbGludXgvaWZfcHBwdmFyLmgKK1NFUklBTF9NQUdJQyAgICAgICAgICAweDUzMDEgICAgICBhc3luY19zdHJ1Y3QgICAgICBpbmNsdWRlL2xpbnV4L3NlcmlhbC5oCitTU1RBVEVfTUFHSUMgICAgICAgICAgMHg1MzAyICAgICAgc2VyaWFsX3N0YXRlICAgICAgaW5jbHVkZS9saW51eC9zZXJpYWwuaAorU0xJUF9NQUdJQyAgICAgICAgICAgIDB4NTMwMiAgICAgIHNsaXAgICAgICAgICAgICAgIGRyaXZlcnMvbmV0L3NsaXAuaAorU1RSSVBfTUFHSUMgICAgICAgICAgIDB4NTMwMyAgICAgIHN0cmlwICAgICAgICAgICAgIGRyaXZlcnMvbmV0L3N0cmlwLmMKK1gyNV9BU1lfTUFHSUMgICAgICAgICAweDUzMDMgICAgICB4MjVfYXN5ICAgICAgICAgICBkcml2ZXJzL25ldC94MjVfYXN5LmgKK1NJWFBBQ0tfTUFHSUMgICAgICAgICAweDUzMDQgICAgICBzaXhwYWNrICAgICAgICAgICBkcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5oCitBWDI1X01BR0lDICAgICAgICAgICAgMHg1MzE2ICAgICAgYXhfZGlzcCAgICAgICAgICAgZHJpdmVycy9uZXQvbWtpc3MuaAorRVNQX01BR0lDICAgICAgICAgICAgIDB4NTNlZSAgICAgIGVzcF9zdHJ1Y3QgICAgICAgIGRyaXZlcnMvY2hhci9lc3AuaAorVFRZX01BR0lDICAgICAgICAgICAgIDB4NTQwMSAgICAgIHR0eV9zdHJ1Y3QgICAgICAgIGluY2x1ZGUvbGludXgvdHR5LmgKK01HU0xfTUFHSUMgICAgICAgICAgICAweDU0MDEgICAgICBtZ3NsX2luZm8gICAgICAgICBkcml2ZXJzL2NoYXIvc3luY2xpbmsuYworVFRZX0RSSVZFUl9NQUdJQyAgICAgIDB4NTQwMiAgICAgIHR0eV9kcml2ZXIgICAgICAgIGluY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCitNR1NMUENfTUFHSUMgICAgICAgICAgMHg1NDAyICAgICAgbWdzbHBjX2luZm8gICAgICAgZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCitUVFlfTERJU0NfTUFHSUMgICAgICAgMHg1NDAzICAgICAgdHR5X2xkaXNjICAgICAgICAgaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAorVVNCX1NFUklBTF9NQUdJQyAgICAgIDB4NjcwMiAgICAgIHVzYl9zZXJpYWwgICAgICAgIGRyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKK0ZVTExfRFVQTEVYX01BR0lDICAgICAweDY5NjkgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKK1VTQl9CTFVFVE9PVEhfTUFHSUMgICAweDZkMDIgICAgICB1c2JfYmx1ZXRvb3RoICAgICBkcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMKK1JGQ09NTV9UVFlfTUFHSUMgICAgICAweDZkMDIgICAgICAgICAgICAgICAgICAgICAgICBuZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYworVVNCX1NFUklBTF9QT1JUX01BR0lDIDB4NzMwMSAgICAgIHVzYl9zZXJpYWxfcG9ydCAgIGRyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKK0NHX01BR0lDICAgICAgICAgICAgICAweDAwMDkwMjU1ICB1ZnNfY3lsaW5kZXJfZ3JvdXAgaW5jbHVkZS9saW51eC91ZnNfZnMuaAorQTIyMzJfTUFHSUMgICAgICAgICAgIDB4MDAwYTIyMzIgIGdzX3BvcnQgICAgICAgICAgIGRyaXZlcnMvY2hhci9zZXJfYTIyMzIuaAorU09MQVJJU19TT0NLRVRfTUFHSUMgIDB4MDAwQURERUQgIHNvbF9zb2NrZXRfc3RydWN0IGFyY2gvc3BhcmM2NC9zb2xhcmlzL3NvY2tzeXMuaAorUlBPUlRfTUFHSUMgICAgICAgICAgIDB4MDA1MjUwMDEgIHJfcG9ydCAgICAgICAgICAgIGRyaXZlcnMvY2hhci9yb2NrZXRfaW50LmgKK0xTRU1BR0lDICAgICAgICAgICAgICAweDA1MDkxOTk4ICBsc2UgICAgICAgICAgICAgICBkcml2ZXJzL2ZjNC9mYy5jCitHRFRJT0NUTF9NQUdJQyAgICAgICAgMHgwNjAzMGYwNyAgZ2R0aF9pb3dyX3N0ciAgICAgZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaAorUklFQkxfTUFHSUMgICAgICAgICAgIDB4MDkwNTE5OTAgICAgICAgICAgICAgICAgICAgIGRyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYworUklPX01BR0lDICAgICAgICAgICAgIDB4MTIzNDU2NzggIGdzX3BvcnQgICAgICAgICAgIGRyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKK1NYX01BR0lDICAgICAgICAgICAgICAweDEyMzQ1Njc4ICBnc19wb3J0ICAgICAgICAgICBkcml2ZXJzL2NoYXIvc3guaAorTkJEX1JFUVVFU1RfTUFHSUMgICAgIDB4MTI1NjA5NTMgIG5iZF9yZXF1ZXN0ICAgICAgIGluY2x1ZGUvbGludXgvbmJkLmgKK1JFRF9NQUdJQzIgICAgICAgICAgICAweDE3MGZjMmE1ICAoYW55KSAgICAgICAgICAgICBtbS9zbGFiLmMKK0JBWUNPTV9NQUdJQyAgICAgICAgICAweDE5NzMwNTEwICBiYXljb21fc3RhdGUgICAgICBkcml2ZXJzL25ldC9iYXljb21fZXBwLmMKK0lTRE5fWDI1SUZBQ0VfTUFHSUMgICAweDFlNzVhMmI5ICBpc2RuX3gyNWlmYWNlX3Byb3RvX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJzL2lzZG4vaXNkbl94MjVpZmFjZS5oCitFQ1BfTUFHSUMgICAgICAgICAgICAgMHgyMTUwNDM0NSAgY2RrZWNwc2lnICAgICAgICAgaW5jbHVkZS9saW51eC9jZGsuaAorTFNPTUFHSUMgICAgICAgICAgICAgIDB4MjcwOTE5OTcgIGxzbyAgICAgICAgICAgICAgIGRyaXZlcnMvZmM0L2ZjLmMKK0xTTUFHSUMgICAgICAgICAgICAgICAweDJhM2I0ZDJhICBscyAgICAgICAgICAgICAgICBkcml2ZXJzL2ZjNC9mYy5jCitXQU5QSVBFX01BR0lDICAgICAgICAgMHg0MTRDNDQ1MyAgc2RsYV97ZHVtcCxleGVjfSAgaW5jbHVkZS9saW51eC93YW5waXBlLmgKK0NTX0NBUkRfTUFHSUMgICAgICAgICAweDQzNTI1NTUzICBjc19jYXJkICAgICAgICAgICBzb3VuZC9vc3MvY3M0Nnh4LmMKK0xBQkVMQ0xfTUFHSUMgICAgICAgICAweDQ4NTc0MzRjICBsYWJlbGNsX2luZm9fcyAgICBpbmNsdWRlL2FzbS9pYTY0L3NuL2xhYmVsY2wuaAorSVNETl9BU1lOQ19NQUdJQyAgICAgIDB4NDkzNDRDMDEgIG1vZGVtX2luZm8gICAgICAgIGluY2x1ZGUvbGludXgvaXNkbi5oCitDVENfQVNZTkNfTUFHSUMgICAgICAgMHg0OTM0NEMwMSAgY3RjX3R0eV9pbmZvICAgICAgZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYworSVNETl9ORVRfTUFHSUMgICAgICAgIDB4NDkzNDRDMDIgIGlzZG5fbmV0X2xvY2FsX3MgIGRyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXRfbGliLmgKK1NBVkVLTVNHX01BR0lDMiAgICAgICAweDRCNEQ1MzQ3ICBzYXZla21zZyAgICAgICAgICBhcmNoLyovYW1pZ2EvY29uZmlnLmMKK1NUTElfQk9BUkRNQUdJQyAgICAgICAweDRiYzZjODI1ICBzdGxpYnJkICAgICAgICAgICBpbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCitDU19TVEFURV9NQUdJQyAgICAgICAgMHg0YzRmNDc0OSAgY3Nfc3RhdGUgICAgICAgICAgc291bmQvb3NzL2NzNDZ4eC5jCitTTEFCX0NfTUFHSUMgICAgICAgICAgMHg0ZjE3YTM2ZCAga21lbV9jYWNoZV9zICAgICAgbW0vc2xhYi5jCitDT1dfTUFHSUMgICAgICAgICAgICAgMHg0ZjRmNGY0ZCAgY293X2hlYWRlcl92MSAgICAgYXJjaC91bS9kcml2ZXJzL3ViZF91c2VyLmMKK0k4MTBfQ0FSRF9NQUdJQyAgICAgICAweDUwNzI2OTZFICBpODEwX2NhcmQgICAgICAgICBzb3VuZC9vc3MvaTgxMF9hdWRpby5jCitUUklERU5UX0NBUkRfTUFHSUMgICAgMHg1MDcyNjk2RSAgdHJpZGVudF9jYXJkICAgICAgc291bmQvb3NzL3RyaWRlbnQuYworUk9VVEVSX01BR0lDICAgICAgICAgIDB4NTI0ZDQxNTcgIHdhbl9kZXZpY2UgICAgICAgIGluY2x1ZGUvbGludXgvd2Fucm91dGVyLmgKK1NDQ19NQUdJQyAgICAgICAgICAgICAweDUyNjk2MzY4ICBnc19wb3J0ICAgICAgICAgICBkcml2ZXJzL2NoYXIvc2NjLmgKK1NBVkVLTVNHX01BR0lDMSAgICAgICAweDUzNDE1NjQ1ICBzYXZla21zZyAgICAgICAgICBhcmNoLyovYW1pZ2EvY29uZmlnLmMKK0dEQV9NQUdJQyAgICAgICAgICAgICAweDU4NDY0NTUyICBnZGEgICAgICAgICAgICAgICBpbmNsdWRlL2FzbS1taXBzNjQvc24vZ2RhLmgKK1JFRF9NQUdJQzEgICAgICAgICAgICAweDVhMmNmMDcxICAoYW55KSAgICAgICAgICAgICBtbS9zbGFiLmMKK1NUTF9QT1JUTUFHSUMgICAgICAgICAweDVhNzE4MmM5ICBzdGxwb3J0ICAgICAgICAgICBpbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmgKK0VFUFJPTV9NQUdJQ19WQUxVRSAgICAwWDVhYjQ3OGQyICBsYW5haV9kZXYgICAgICAgICBkcml2ZXJzL2F0bS9sYW5haS5jCitIRExDRFJWX01BR0lDICAgICAgICAgMHg1YWM2ZTc3OCAgaGRsY2Rydl9zdGF0ZSAgICAgaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKK0VQQ0FfTUFHSUMgICAgICAgICAgICAweDVjNmRmMTA0ICBjaGFubmVsICAgICAgICAgICBpbmNsdWRlL2xpbnV4L2VwY2EuaAorUENYWF9NQUdJQyAgICAgICAgICAgIDB4NWM2ZGYxMDQgIGNoYW5uZWwgICAgICAgICAgIGRyaXZlcnMvY2hhci9wY3h4LmgKK0tWX01BR0lDICAgICAgICAgICAgICAweDVmNGI1NjVmICBrZXJuZWxfdmFyc19zICAgICBpbmNsdWRlL2FzbS1taXBzNjQvc24va2xrZXJudmFycy5oCitJODEwX1NUQVRFX01BR0lDICAgICAgMHg2MzY1NzM3MyAgaTgxMF9zdGF0ZSAgICAgICAgc291bmQvb3NzL2k4MTBfYXVkaW8uYworVFJJREVOVF9TVEFURV9NQUdJQyAgIDB4NjM2NTczNzMgIHRyaWVudF9zdGF0ZSAgICAgIHNvdW5kL29zcy90cmlkZW50LmMKK00zX0NBUkRfTUFHSUMgICAgICAgICAweDY0NmU2ZjUwICBtM19jYXJkICAgICAgICAgICBzb3VuZC9vc3MvbWFlc3RybzMuYworRldfSEVBREVSX01BR0lDICAgICAgIDB4NjU3MjZGNjYgIGZ3X2hlYWRlciAgICAgICAgIGRyaXZlcnMvYXRtL2ZvcmUyMDBlLmgKK1NMT1RfTUFHSUMgICAgICAgICAgICAweDY3MjY3MzIxICBzbG90ICAgICAgICAgICAgICBkcml2ZXJzL2hvdHBsdWcvY3BxcGhwLmgKK1NMT1RfTUFHSUMgICAgICAgICAgICAweDY3MjY3MzIyICBzbG90ICAgICAgICAgICAgICBkcml2ZXJzL2hvdHBsdWcvYWNwaXBocC5oCitMT19NQUdJQyAgICAgICAgICAgICAgMHg2ODc5NzU0OCAgbmJkX2RldmljZSAgICAgICAgaW5jbHVkZS9saW51eC9uYmQuaAorT1BST0ZJTEVfTUFHSUMgICAgICAgIDB4NmY3MDcyNmYgIHN1cGVyX2Jsb2NrICAgICAgIGRyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVmcy5oCitNM19TVEFURV9NQUdJQyAgICAgICAgMHg3MzRkNzI0ZCAgbTNfc3RhdGUgICAgICAgICAgc291bmQvb3NzL21hZXN0cm8zLmMKK1NUTF9QQU5FTE1BR0lDICAgICAgICAweDdlZjYyMWExICBzdGxwYW5lbCAgICAgICAgICBpbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmgKK1ZNQUxMT0NfTUFHSUMgICAgICAgICAweDg3NjU0MzIwICBzbmRfYWxsb2NfdHJhY2sgICBzb3VuZC9jb3JlL21lbW9yeS5jCitLTUFMTE9DX01BR0lDICAgICAgICAgMHg4NzY1NDMyMSAgc25kX2FsbG9jX3RyYWNrICAgc291bmQvY29yZS9tZW1vcnkuYworUFdDX01BR0lDICAgICAgICAgICAgIDB4ODlEQzEwQUIgIHB3Y19kZXZpY2UgICAgICAgIGRyaXZlcnMvdXNiL21lZGlhL3B3Yy5oCitOQkRfUkVQTFlfTUFHSUMgICAgICAgMHg5Njc0NDY2OCAgbmJkX3JlcGx5ICAgICAgICAgaW5jbHVkZS9saW51eC9uYmQuaAorU1RMX0JPQVJETUFHSUMgICAgICAgIDB4YTIyNjdmNTIgIHN0bGJyZCAgICAgICAgICAgIGluY2x1ZGUvbGludXgvc3RhbGxpb24uaAorRU5JMTU1X01BR0lDICAgICAgICAgIDB4YTU0Yjg3MmQgIG1pZHdheV9lcHJvbQkgICAgZHJpdmVycy9hdG0vZW5pLmgKK1NDSV9NQUdJQyAgICAgICAgICAgICAweGJhYmVmYWNlICBnc19wb3J0ICAgICAgICAgICBkcml2ZXJzL2NoYXIvc2gtc2NpLmgKK0NPREFfTUFHSUMgICAgICAgICAgICAweEMwREFDMERBICBjb2RhX2ZpbGVfaW5mbyAgICBpbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oCitEUE1FTV9NQUdJQyAgICAgICAgICAgMHhjMGZmZWUxMSAgZ2R0X3BjaV9zcmFtICAgICAgZHJpdmVycy9zY3NpL2dkdGguaAorU1RMSV9QT1JUTUFHSUMgICAgICAgIDB4ZTY3MWM3YTEgIHN0bGlwb3J0ICAgICAgICAgIGluY2x1ZGUvbGludXgvaXN0YWxsaW9uLmgKK1lBTV9NQUdJQyAgICAgICAgICAgICAweEYxMEE3NjU0ICB5YW1fcG9ydCAgICAgICAgICBkcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworQ0NCX01BR0lDICAgICAgICAgICAgIDB4ZjI2OTFhZDIgIGNjYiAgICAgICAgICAgICAgIGRyaXZlcnMvc2NzaS9uY3I1M2M4eHguYworUVVFVUVfTUFHSUNfRlJFRSAgICAgIDB4ZjdlMWM5YTMgIHF1ZXVlX2VudHJ5ICAgICAgIGRyaXZlcnMvc2NzaS9hcm0vcXVldWUuYworUVVFVUVfTUFHSUNfVVNFRCAgICAgIDB4ZjdlMWNjMzMgIHF1ZXVlX2VudHJ5ICAgICAgIGRyaXZlcnMvc2NzaS9hcm0vcXVldWUuYworSFRCX0NNQUdJQyAgICAgICAgICAgIDB4RkVGQUZFRjEgIGh0Yl9jbGFzcyAgICAgICAgIG5ldC9zY2hlZC9zY2hfaHRiLmMKK05NSV9NQUdJQyAgICAgICAgICAgICAweDQ4NDE0ZDRkNDU1MjAxIG5taV9zICAgICAgICBpbmNsdWRlL2FzbS1taXBzNjQvc24vbm1pLmgKKworTm90ZSB0aGF0IHRoZXJlIGFyZSBhbHNvIGRlZmluZWQgc3BlY2lhbCBwZXItZHJpdmVyIG1hZ2ljIG51bWJlcnMgaW4gc291bmQKK21lbW9yeSBtYW5hZ2VtZW50LiBTZWUgaW5jbHVkZS9zb3VuZC9zbmRtYWdpYy5oIGZvciBjb21wbGV0ZSBsaXN0IG9mIHRoZW0uIE1hbnkKK09TUyBzb3VuZCBkcml2ZXJzIGhhdmUgdGhlaXIgbWFnaWMgbnVtYmVycyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBzb3VuZGNhcmQgUENJCitJRCAtIHRoZXNlIGFyZSBub3QgbGlzdGVkIGhlcmUgYXMgd2VsbC4KKworSXJEQSBzdWJzeXN0ZW0gYWxzbyB1c2VzIGxhcmdlIG51bWJlciBvZiBvd24gbWFnaWMgbnVtYmVycywgc2VlCitpbmNsdWRlL25ldC9pcmRhL2lyZGEuaCBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHRoZW0uCisKK0hGUyBpcyBhbm90aGVyIGxhcmdlciB1c2VyIG9mIG1hZ2ljIG51bWJlcnMgLSB5b3UgY2FuIGZpbmQgdGhlbSBpbgorZnMvaGZzL2hmcy5oLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5kYXRvcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9tYW5kYXRvcnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNDQ5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbmRhdG9yeS50eHQKQEAgLTAsMCArMSwxNTIgQEAKKwlNYW5kYXRvcnkgRmlsZSBMb2NraW5nIEZvciBUaGUgTGludXggT3BlcmF0aW5nIFN5c3RlbQorCisJCUFuZHkgV2Fsa2VyIDxhbmR5QGx5c2FrZXIua3ZhZXJuZXIubm8+CisKKwkJCSAgIDE1IEFwcmlsIDE5OTYKKworCisxLiBXaGF0IGlzICBtYW5kYXRvcnkgbG9ja2luZz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYW5kYXRvcnkgbG9ja2luZyBpcyBrZXJuZWwgZW5mb3JjZWQgZmlsZSBsb2NraW5nLCBhcyBvcHBvc2VkIHRvIHRoZSBtb3JlIHVzdWFsCitjb29wZXJhdGl2ZSBmaWxlIGxvY2tpbmcgdXNlZCB0byBndWFyYW50ZWUgc2VxdWVudGlhbCBhY2Nlc3MgdG8gZmlsZXMgYW1vbmcKK3Byb2Nlc3Nlcy4gRmlsZSBsb2NrcyBhcmUgYXBwbGllZCB1c2luZyB0aGUgZmxvY2soKSBhbmQgZmNudGwoKSBzeXN0ZW0gY2FsbHMKKyhhbmQgdGhlIGxvY2tmKCkgbGlicmFyeSByb3V0aW5lIHdoaWNoIGlzIGEgd3JhcHBlciBhcm91bmQgZmNudGwoKS4pIEl0IGlzCitub3JtYWxseSBhIHByb2Nlc3MnIHJlc3BvbnNpYmlsaXR5IHRvIGNoZWNrIGZvciBsb2NrcyBvbiBhIGZpbGUgaXQgd2lzaGVzIHRvCit1cGRhdGUsIGJlZm9yZSBhcHBseWluZyBpdHMgb3duIGxvY2ssIHVwZGF0aW5nIHRoZSBmaWxlIGFuZCB1bmxvY2tpbmcgaXQgYWdhaW4uCitUaGUgbW9zdCBjb21tb25seSB1c2VkIGV4YW1wbGUgb2YgdGhpcyAoYW5kIGluIHRoZSBjYXNlIG9mIHNlbmRtYWlsLCB0aGUgbW9zdAordHJvdWJsZXNvbWUpIGlzIGFjY2VzcyB0byBhIHVzZXIncyBtYWlsYm94LiBUaGUgbWFpbCB1c2VyIGFnZW50IGFuZCB0aGUgbWFpbAordHJhbnNmZXIgYWdlbnQgbXVzdCBndWFyZCBhZ2FpbnN0IHVwZGF0aW5nIHRoZSBtYWlsYm94IGF0IHRoZSBzYW1lIHRpbWUsIGFuZAorcHJldmVudCByZWFkaW5nIHRoZSBtYWlsYm94IHdoaWxlIGl0IGlzIGJlaW5nIHVwZGF0ZWQuCisKK0luIGEgcGVyZmVjdCB3b3JsZCBhbGwgcHJvY2Vzc2VzIHdvdWxkIHVzZSBhbmQgaG9ub3VyIGEgY29vcGVyYXRpdmUsIG9yCisiYWR2aXNvcnkiIGxvY2tpbmcgc2NoZW1lLiBIb3dldmVyLCB0aGUgd29ybGQgaXNuJ3QgcGVyZmVjdCwgYW5kIHRoZXJlJ3MKK2EgbG90IG9mIHBvb3JseSB3cml0dGVuIGNvZGUgb3V0IHRoZXJlLgorCitJbiB0cnlpbmcgdG8gYWRkcmVzcyB0aGlzIHByb2JsZW0sIHRoZSBkZXNpZ25lcnMgb2YgU3lzdGVtIFYgVU5JWCBjYW1lIHVwCit3aXRoIGEgIm1hbmRhdG9yeSIgbG9ja2luZyBzY2hlbWUsIHdoZXJlYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIHdvdWxkCitibG9jayBhdHRlbXB0cyBieSBhIHByb2Nlc3MgdG8gd3JpdGUgdG8gYSBmaWxlIHRoYXQgYW5vdGhlciBwcm9jZXNzIGhvbGRzIGEKKyJyZWFkIiAtb3ItICJzaGFyZWQiIGxvY2sgb24sIGFuZCBibG9jayBhdHRlbXB0cyB0byBib3RoIHJlYWQgYW5kIHdyaXRlIHRvIGEgCitmaWxlIHRoYXQgYSBwcm9jZXNzIGhvbGRzIGEgIndyaXRlICIgLW9yLSAiZXhjbHVzaXZlIiBsb2NrIG9uLgorCitUaGUgU3lzdGVtIFYgbWFuZGF0b3J5IGxvY2tpbmcgc2NoZW1lIHdhcyBpbnRlbmRlZCB0byBoYXZlIGFzIGxpdHRsZSBpbXBhY3QgYXMKK3Bvc3NpYmxlIG9uIGV4aXN0aW5nIHVzZXIgY29kZS4gVGhlIHNjaGVtZSBpcyBiYXNlZCBvbiBtYXJraW5nIGluZGl2aWR1YWwgZmlsZXMKK2FzIGNhbmRpZGF0ZXMgZm9yIG1hbmRhdG9yeSBsb2NraW5nLCBhbmQgdXNpbmcgdGhlIGV4aXN0aW5nIGZjbnRsKCkvbG9ja2YoKQoraW50ZXJmYWNlIGZvciBhcHBseWluZyBsb2NrcyBqdXN0IGFzIGlmIHRoZXkgd2VyZSBub3JtYWwsIGFkdmlzb3J5IGxvY2tzLgorCitOb3RlIDE6IEluIHNheWluZyAiZmlsZSIgaW4gdGhlIHBhcmFncmFwaHMgYWJvdmUgSSBhbSBhY3R1YWxseSBub3QgdGVsbGluZwordGhlIHdob2xlIHRydXRoLiBTeXN0ZW0gViBsb2NraW5nIGlzIGJhc2VkIG9uIGZjbnRsKCkuIFRoZSBncmFudWxhcml0eSBvZgorZmNudGwoKSBpcyBzdWNoIHRoYXQgaXQgYWxsb3dzIHRoZSBsb2NraW5nIG9mIGJ5dGUgcmFuZ2VzIGluIGZpbGVzLCBpbiBhZGRpdGlvbgordG8gZW50aXJlIGZpbGVzLCBzbyB0aGUgbWFuZGF0b3J5IGxvY2tpbmcgcnVsZXMgYWxzbyBoYXZlIGJ5dGUgbGV2ZWwKK2dyYW51bGFyaXR5LgorCitOb3RlIDI6IFBPU0lYLjEgZG9lcyBub3Qgc3BlY2lmeSBhbnkgc2NoZW1lIGZvciBtYW5kYXRvcnkgbG9ja2luZywgZGVzcGl0ZQorYm9ycm93aW5nIHRoZSBmY250bCgpIGxvY2tpbmcgc2NoZW1lIGZyb20gU3lzdGVtIFYuIFRoZSBtYW5kYXRvcnkgbG9ja2luZworc2NoZW1lIGlzIGRlZmluZWQgYnkgdGhlIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uIChTVklEKSBWZXJzaW9uIDMuCisKKzIuIE1hcmtpbmcgYSBmaWxlIGZvciBtYW5kYXRvcnkgbG9ja2luZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZmlsZSBpcyBtYXJrZWQgYXMgYSBjYW5kaWRhdGUgZm9yIG1hbmRhdG9yeSBsb2NraW5nIGJ5IHNldHRpbmcgdGhlIGdyb3VwLWlkCitiaXQgaW4gaXRzIGZpbGUgbW9kZSBidXQgcmVtb3ZpbmcgdGhlIGdyb3VwLWV4ZWN1dGUgYml0LiBUaGlzIGlzIGFuIG90aGVyd2lzZQorbWVhbmluZ2xlc3MgY29tYmluYXRpb24sIGFuZCB3YXMgY2hvc2VuIGJ5IHRoZSBTeXN0ZW0gViBpbXBsZW1lbnRvcnMgc28gYXMgbm90Cit0byBicmVhayBleGlzdGluZyB1c2VyIHByb2dyYW1zLgorCitOb3RlIHRoYXQgdGhlIGdyb3VwLWlkIGJpdCBpcyB1c3VhbGx5IGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBieSB0aGUga2VybmVsIHdoZW4KK2Egc2V0Z2lkIGZpbGUgaXMgd3JpdHRlbiB0by4gVGhpcyBpcyBhIHNlY3VyaXR5IG1lYXN1cmUuIFRoZSBrZXJuZWwgaGFzIGJlZW4KK21vZGlmaWVkIHRvIHJlY29nbml6ZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgbWFuZGF0b3J5IGxvY2sgY2FuZGlkYXRlIGFuZCB0bworcmVmcmFpbiBmcm9tIGNsZWFyaW5nIHRoaXMgYml0LiBTaW1pbGFybHkgdGhlIGtlcm5lbCBoYXMgYmVlbiBtb2RpZmllZCBub3QKK3RvIHJ1biBtYW5kYXRvcnkgbG9jayBjYW5kaWRhdGVzIHdpdGggc2V0Z2lkIHByaXZpbGVnZXMuCisKKzMuIEF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSSBoYXZlIGNvbnNpZGVyZWQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBtYW5kYXRvcnkgbG9ja2luZyBhdmFpbGFibGUgd2l0aAorU3VuT1MgNC4xLngsIFNvbGFyaXMgMi54IGFuZCBIUC1VWCA5LnguCisKK0dlbmVyYWxseSBJIGhhdmUgdHJpZWQgdG8gbWFrZSB0aGUgbW9zdCBzZW5zZSBvdXQgb2YgdGhlIGJlaGF2aW91ciBleGhpYml0ZWQKK2J5IHRoZXNlIHRocmVlIHJlZmVyZW5jZSBzeXN0ZW1zLiBUaGVyZSBhcmUgbWFueSBhbm9tYWxpZXMuCisKK0FsbCB0aGUgcmVmZXJlbmNlIHN5c3RlbXMgcmVqZWN0IGFsbCBjYWxscyB0byBvcGVuKCkgZm9yIGEgZmlsZSBvbiB3aGljaAorYW5vdGhlciBwcm9jZXNzIGhhcyBvdXRzdGFuZGluZyBtYW5kYXRvcnkgbG9ja3MuIFRoaXMgaXMgaW4gZGlyZWN0Citjb250cmF2ZW50aW9uIG9mIFNWSUQgMywgd2hpY2ggc3RhdGVzIHRoYXQgb25seSBjYWxscyB0byBvcGVuKCkgd2l0aCB0aGUKK09fVFJVTkMgZmxhZyBzZXQgc2hvdWxkIGJlIHJlamVjdGVkLiBUaGUgTGludXggaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgU1ZJRAorZGVmaW5pdGlvbiwgd2hpY2ggaXMgdGhlICJSaWdodCBUaGluZyIsIHNpbmNlIG9ubHkgY2FsbHMgd2l0aCBPX1RSVU5DIGNhbgorbW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KKworSFAtVVggZXZlbiBkaXNhbGxvd3Mgb3BlbigpIHdpdGggT19UUlVOQyBmb3IgYSBmaWxlIHdpdGggYWR2aXNvcnkgbG9ja3MsIG5vdAoranVzdCBtYW5kYXRvcnkgbG9ja3MuIFRoYXQgd291bGQgYXBwZWFyIHRvIGNvbnRyYXZlbmUgUE9TSVguMS4KKworbW1hcCgpIGlzIGFub3RoZXIgaW50ZXJlc3RpbmcgY2FzZS4gQWxsIHRoZSBvcGVyYXRpbmcgc3lzdGVtcyBtZW50aW9uZWQKK3ByZXZlbnQgbWFuZGF0b3J5IGxvY2tzIGZyb20gYmVpbmcgYXBwbGllZCB0byBhbiBtbWFwKCknZWQgZmlsZSwgYnV0ICBIUC1VWAorYWxzbyBkaXNhbGxvd3MgYWR2aXNvcnkgbG9ja3MgZm9yIHN1Y2ggYSBmaWxlLiBTVklEIGFjdHVhbGx5IHNwZWNpZmllcyB0aGUKK3BhcmFub2lkIEhQLVVYIGJlaGF2aW91ci4KKworSW4gbXkgb3BpbmlvbiBvbmx5IE1BUF9TSEFSRUQgbWFwcGluZ3Mgc2hvdWxkIGJlIGltbXVuZSBmcm9tIGxvY2tpbmcsIGFuZCB0aGVuCitvbmx5IGZyb20gbWFuZGF0b3J5IGxvY2tzIC0gdGhhdCBpcyB3aGF0IGlzIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKworU3VuT1MgaXMgc28gaG9wZWxlc3MgdGhhdCBpdCBkb2Vzbid0IGV2ZW4gaG9ub3VyIHRoZSBPX05PTkJMT0NLIGZsYWcgZm9yCittYW5kYXRvcnkgbG9ja3MsIHNvIHJlYWRzIGFuZCB3cml0ZXMgdG8gbG9ja2VkIGZpbGVzIGFsd2F5cyBibG9jayB3aGVuIHRoZXkKK3Nob3VsZCByZXR1cm4gRUFHQUlOLgorCitJJ20gYWZyYWlkIHRoYXQgdGhpcyBpcyBzdWNoIGFuIGVzb3RlcmljIGFyZWEgdGhhdCB0aGUgc2VtYW50aWNzIGRlc2NyaWJlZAorYmVsb3cgYXJlIGp1c3QgYXMgdmFsaWQgYXMgYW55IG90aGVycywgc28gbG9uZyBhcyB0aGUgbWFpbiBwb2ludHMgc2VlbSB0bworYWdyZWUuIAorCis0LiBTZW1hbnRpY3MKKy0tLS0tLS0tLS0tLQorCisxLiBNYW5kYXRvcnkgbG9ja3MgY2FuIG9ubHkgYmUgYXBwbGllZCB2aWEgdGhlIGZjbnRsKCkvbG9ja2YoKSBsb2NraW5nCisgICBpbnRlcmZhY2UgLSBpbiBvdGhlciB3b3JkcyB0aGUgU3lzdGVtIFYvUE9TSVggaW50ZXJmYWNlLiBCU0Qgc3R5bGUKKyAgIGxvY2tzIHVzaW5nIGZsb2NrKCkgbmV2ZXIgcmVzdWx0IGluIGEgbWFuZGF0b3J5IGxvY2suCisKKzIuIElmIGEgcHJvY2VzcyBoYXMgbG9ja2VkIGEgcmVnaW9uIG9mIGEgZmlsZSB3aXRoIGEgbWFuZGF0b3J5IHJlYWQgbG9jaywgdGhlbgorICAgb3RoZXIgcHJvY2Vzc2VzIGFyZSBwZXJtaXR0ZWQgdG8gcmVhZCBmcm9tIHRoYXQgcmVnaW9uLiBJZiBhbnkgb2YgdGhlc2UKKyAgIHByb2Nlc3NlcyBhdHRlbXB0cyB0byB3cml0ZSB0byB0aGUgcmVnaW9uIGl0IHdpbGwgYmxvY2sgdW50aWwgdGhlIGxvY2sgaXMKKyAgIHJlbGVhc2VkLCB1bmxlc3MgdGhlIHByb2Nlc3MgaGFzIG9wZW5lZCB0aGUgZmlsZSB3aXRoIHRoZSBPX05PTkJMT0NLCisgICBmbGFnIGluIHdoaWNoIGNhc2UgdGhlIHN5c3RlbSBjYWxsIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggdGhlIGVycm9yCisgICBzdGF0dXMgRUFHQUlOLgorCiszLiBJZiBhIHByb2Nlc3MgaGFzIGxvY2tlZCBhIHJlZ2lvbiBvZiBhIGZpbGUgd2l0aCBhIG1hbmRhdG9yeSB3cml0ZSBsb2NrLCBhbGwKKyAgIGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgdG8gdGhhdCByZWdpb24gYmxvY2sgdW50aWwgdGhlIGxvY2sgaXMgcmVsZWFzZWQsCisgICB1bmxlc3MgYSBwcm9jZXNzIGhhcyBvcGVuZWQgdGhlIGZpbGUgd2l0aCB0aGUgT19OT05CTE9DSyBmbGFnIGluIHdoaWNoIGNhc2UKKyAgIHRoZSBzeXN0ZW0gY2FsbCB3aWxsIHJldHVybiBpbW1lZGlhdGVseSB3aXRoIHRoZSBlcnJvciBzdGF0dXMgRUFHQUlOLgorCis0LiBDYWxscyB0byBvcGVuKCkgd2l0aCBPX1RSVU5DLCBvciB0byBjcmVhdCgpLCBvbiBhIGV4aXN0aW5nIGZpbGUgdGhhdCBoYXMKKyAgIGFueSBtYW5kYXRvcnkgbG9ja3Mgb3duZWQgYnkgb3RoZXIgcHJvY2Vzc2VzIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUKKyAgIGVycm9yIHN0YXR1cyBFQUdBSU4uCisKKzUuIEF0dGVtcHRzIHRvIGFwcGx5IGEgbWFuZGF0b3J5IGxvY2sgdG8gYSBmaWxlIHRoYXQgaXMgbWVtb3J5IG1hcHBlZCBhbmQKKyAgIHNoYXJlZCAodmlhIG1tYXAoKSB3aXRoIE1BUF9TSEFSRUQpIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgZXJyb3Igc3RhdHVzCisgICBFQUdBSU4uCisKKzYuIEF0dGVtcHRzIHRvIGNyZWF0ZSBhIHNoYXJlZCBtZW1vcnkgbWFwIG9mIGEgZmlsZSAodmlhIG1tYXAoKSB3aXRoIE1BUF9TSEFSRUQpCisgICB0aGF0IGhhcyBhbnkgbWFuZGF0b3J5IGxvY2tzIGluIGVmZmVjdCB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIGVycm9yIHN0YXR1cworICAgRUFHQUlOLgorCis1LiBXaGljaCBzeXN0ZW0gY2FsbHMgYXJlIGFmZmVjdGVkPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhvc2Ugd2hpY2ggbW9kaWZ5IGEgZmlsZSdzIGNvbnRlbnRzLCBub3QganVzdCB0aGUgaW5vZGUuIFRoYXQgZ2l2ZXMgcmVhZCgpLAord3JpdGUoKSwgcmVhZHYoKSwgd3JpdGV2KCksIG9wZW4oKSwgY3JlYXQoKSwgbW1hcCgpLCB0cnVuY2F0ZSgpIGFuZAorZnRydW5jYXRlKCkuIHRydW5jYXRlKCkgYW5kIGZ0cnVuY2F0ZSgpIGFyZSBjb25zaWRlcmVkIHRvIGJlICJ3cml0ZSIgYWN0aW9ucworZm9yIHRoZSBwdXJwb3NlcyBvZiBtYW5kYXRvcnkgbG9ja2luZy4KKworVGhlIGFmZmVjdGVkIHJlZ2lvbiBpcyB1c3VhbGx5IGRlZmluZWQgYXMgc3RyZXRjaGluZyBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uCitmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyByZWFkIG9yIHdyaXR0ZW4uIEZvciB0aGUgdHJ1bmNhdGUgY2FsbHMgaXQgaXMKK2RlZmluZWQgYXMgdGhlIGJ5dGVzIG9mIGEgZmlsZSByZW1vdmVkIG9yIGFkZGVkICh3ZSBtdXN0IGFsc28gY29uc2lkZXIgYnl0ZXMKK2FkZGVkLCBhcyBhIGxvY2sgY2FuIHNwZWNpZnkganVzdCAidGhlIHdob2xlIGZpbGUiLCByYXRoZXIgdGhhbiBhIHNwZWNpZmljCityYW5nZSBvZiBieXRlcy4pCisKK05vdGUgMzogSSBtYXkgaGF2ZSBvdmVybG9va2VkIHNvbWUgc3lzdGVtIGNhbGxzIHRoYXQgbmVlZCBtYW5kYXRvcnkgbG9jaworY2hlY2tpbmcgaW4gbXkgZWFnZXJuZXNzIHRvIGdldCB0aGlzIGNvZGUgb3V0IHRoZSBkb29yLiBQbGVhc2UgbGV0IG1lIGtub3csIG9yCitiZXR0ZXIgc3RpbGwgZml4IHRoZSBzeXN0ZW0gY2FsbHMgeW91cnNlbGYgYW5kIHN1Ym1pdCBhIHBhdGNoIHRvIG1lIG9yIExpbnVzLgorCis2LiBXYXJuaW5nIQorLS0tLS0tLS0tLS0KKworTm90IGV2ZW4gcm9vdCBjYW4gb3ZlcnJpZGUgYSBtYW5kYXRvcnkgbG9jaywgc28gcnVuYXdheSBwcm9jZXNzZXMgY2FuIHdyZWFrCitoYXZvYyBpZiB0aGV5IGxvY2sgY3J1Y2lhbCBmaWxlcy4gVGhlIHdheSBhcm91bmQgaXQgaXMgdG8gY2hhbmdlIHRoZSBmaWxlCitwZXJtaXNzaW9ucyAocmVtb3ZlIHRoZSBzZXRnaWQgYml0KSBiZWZvcmUgdHJ5aW5nIHRvIHJlYWQgb3Igd3JpdGUgdG8gaXQuCitPZiBjb3Vyc2UsIHRoYXQgbWlnaHQgYmUgYSBiaXQgdHJpY2t5IGlmIHRoZSBzeXN0ZW0gaXMgaHVuZyA6LSgKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tY2EudHh0IGIvRG9jdW1lbnRhdGlvbi9tY2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzJjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21jYS50eHQKQEAgLTAsMCArMSwzMjAgQEAKK2kzODYgTWljcm8gQ2hhbm5lbCBBcmNoaXRlY3R1cmUgU3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01DQSBzdXBwb3J0IGlzIGVuYWJsZWQgdXNpbmcgdGhlIENPTkZJR19NQ0EgZGVmaW5lLiAgQSBtYWNoaW5lIHdpdGggYSBNQ0EKK2J1cyB3aWxsIGhhdmUgdGhlIGtlcm5lbCB2YXJpYWJsZSBNQ0FfYnVzIHNldCwgYXNzdW1pbmcgdGhlIEJJT1MgZmVhdHVyZQorYml0cyBhcmUgc2V0IHByb3Blcmx5IChzZWUgYXJjaC9pMzg2L2Jvb3Qvc2V0dXAuUyBmb3IgaW5mb3JtYXRpb24gb24KK2hvdyB0aGlzIGRldGVjdGlvbiBpcyBkb25lKS4KKworQWRhcHRlciBEZXRlY3Rpb24KKz09PT09PT09PT09PT09PT09CisKK1RoZSBpZGVhbCBNQ0EgYWRhcHRlciBkZXRlY3Rpb24gaXMgZG9uZSB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlCitQcm9ncmFtbWFibGUgT3B0aW9uIFNlbGVjdCByZWdpc3RlcnMuICBHZW5lcmljIGZ1bmN0aW9ucyBmb3IgZG9pbmcKK3RoaXMgaGF2ZSBiZWVuIGFkZGVkIGluIGluY2x1ZGUvbGludXgvbWNhLmggYW5kIGFyY2gvaTM4Ni9rZXJuZWwvbWNhLmMuCitFdmVyeXRoaW5nIG5lZWRlZCB0byBkZXRlY3QgYWRhcHRlcnMgYW5kIHJlYWQgKGFuZCB3cml0ZSkgY29uZmlndXJhdGlvbgoraW5mb3JtYXRpb24gaXMgdGhlcmUuICBBIG51bWJlciBvZiBNQ0Etc3BlY2lmaWMgZHJpdmVycyBhbHJlYWR5IHVzZQordGhpcy4gIFRoZSB0eXBpY2FsIHByb2JlIGNvZGUgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOgorCisJI2luY2x1ZGUgPGxpbnV4L21jYS5oPgorCisJdW5zaWduZWQgY2hhciBwb3MyLCBwb3MzLCBwb3M0LCBwb3M1OworCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXY7CisJaW50IHNsb3Q7CisKKwlpZiggTUNBX2J1cyApIHsKKwkJc2xvdCA9IG1jYV9maW5kX2FkYXB0ZXIoIEFEQVBURVJfSUQsIDAgKTsKKwkJaWYoIHNsb3QgPT0gTUNBX05PVEZPVU5EICkgeworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJLyogb3B0aW9uYWwgLSBzZWUgYmVsb3cgKi8KKwkJbWNhX3NldF9hZGFwdGVyX25hbWUoIHNsb3QsICJhZGFwdGVyIG5hbWUgJiBkZXNjcmlwdGlvbiIgKTsKKwkJbWNhX3NldF9hZGFwdGVyX3Byb2Nmbiggc2xvdCwgZGV2X2dldGluZm8sIGRldiApOworCisJCS8qIHJlYWQgdGhlIFBPUyByZWdpc3RlcnMuICBNb3N0IGRldmljZXMgb25seSB1c2UgMiBhbmQgMyAqLworCQlwb3MyID0gbWNhX3JlYWRfc3RvcmVkX3Bvcyggc2xvdCwgMiApOworCQlwb3MzID0gbWNhX3JlYWRfc3RvcmVkX3Bvcyggc2xvdCwgMyApOworCQlwb3M0ID0gbWNhX3JlYWRfc3RvcmVkX3Bvcyggc2xvdCwgNCApOworCQlwb3M1ID0gbWNhX3JlYWRfc3RvcmVkX3Bvcyggc2xvdCwgNSApOworCX0gZWxzZSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIGV4dHJhY3QgY29uZmlndXJhdGlvbiBmcm9tIHBvc1syMzQ1XSBhbmQgc2V0IGV2ZXJ5dGhpbmcgdXAgKi8KKworTG9hZGFibGUgbW9kdWxlcyBzaG91bGQgbW9kaWZ5IHRoaXMgdG8gdGVzdCB0aGF0IHRoZSBzcGVjaWZpZWQgSVJRIGFuZAorSU8gcG9ydHMgKHBsdXMgd2hhdGV2ZXIgb3RoZXIgc3R1ZmYpIG1hdGNoLiAgU2VlIDNjNTIzLmMgZm9yIGV4YW1wbGUKK2NvZGUgKGFjdHVhbGx5LCBzbWMtbWNhLmMgaGFzIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IGV4YW1wbGUgdGhhdCBjYW4KK2hhbmRsZSBhIGxpc3Qgb2YgYWRhcHRlciBpZHMpLgorCitLZWVwIGluIG1pbmQgdGhhdCBkZXZpY2VzIHNob3VsZCBuZXZlciBkaXJlY3RseSBhY2Nlc3MgdGhlIFBPUyByZWdpc3RlcnMKKyh2aWEgaW5iKCksIG91dGIoKSwgZXRjKS4gIFdoaWxlIGl0J3MgZ2VuZXJhbGx5IHNhZmUsIHRoZXJlIGlzIGEgc21hbGwKK3BvdGVudGlhbCBmb3IgYmxvd2luZyB1cCBoYXJkd2FyZSB3aGVuIGl0J3MgZG9uZSBhdCB0aGUgd3JvbmcgdGltZS4KK0Z1cnRoZXJtb3JlLCBhY2Nlc3NpbmcgYSBQT1MgcmVnaXN0ZXIgZGlzYWJsZXMgYSBkZXZpY2UgdGVtcG9yYXJpbHkuCitUaGlzIGlzIHVzdWFsbHkgb2theSBkdXJpbmcgc3RhcnR1cCwgYnV0IGRvIF95b3VfIHdhbnQgdG8gcmVseSBvbiBpdD8KK0R1cmluZyBpbml0aWFsIGNvbmZpZ3VyYXRpb24sIG1jYV9pbml0KCkgcmVhZHMgYWxsIHRoZSBQT1MgcmVnaXN0ZXJzCitpbnRvIG1lbW9yeS4gIG1jYV9yZWFkX3N0b3JlZF9wb3MoKSBhY2Nlc3NlcyB0aGF0IGRhdGEuICBtY2FfcmVhZF9wb3MoKQorYW5kIG1jYV93cml0ZV9wb3MoKSBhcmUgYWxzbyBhdmFpbGFibGUgZm9yIChzYWZlcikgZGlyZWN0IFBPUyBhY2Nlc3MsCitidXQgdGhlaXIgdXNlIGlzIF9oaWdobHlfIGRpc2NvdXJhZ2VkLiAgbWNhX3dyaXRlX3BvcygpIGlzIHBhcnRpY3VsYXJseQorZGFuZ2Vyb3VzLCBhcyBpdCBpcyBwb3NzaWJsZSBmb3IgYWRhcHRlcnMgdG8gYmUgcHV0IGluIGluY29uc2lzdGVudAorc3RhdGVzIChpLmUuIHNoYXJpbmcgSU8gYWRkcmVzcywgZXRjKSBhbmQgbWF5IHJlc3VsdCBpbiBjcmFzaGVzLCB0b2FzdGVkCitoYXJkd2FyZSwgYW5kIGJsaW5kbmVzcy4KKworVXNlciBsZXZlbCBkcml2ZXJzIChzdWNoIGFzIHRoZSBBR1ggWCBzZXJ2ZXIpIGNhbiB1c2UgL3Byb2MvbWNhL3BvcyB0bworZmluZCBhZGFwdGVycyAoc2VlIGJlbG93KS4KKworU29tZSBNQ0EgYWRhcHRlcnMgY2FuIGFsc28gYmUgZGV0ZWN0ZWQgdmlhIHRoZSB1c3VhbCBJU0Etc3R5bGUgZGV2aWNlCitwcm9iaW5nIChtYW55IFNDU0kgYWRhcHRlcnMsIGZvciBleGFtcGxlKS4gIFRoaXMgc29ydCBvZiB0aGluZyBpcyBoaWdobHkKK2Rpc2NvdXJhZ2VkLiAgUGVyZmVjdGx5IGdvb2QgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRlbGxpbmcgeW91IHdoYXQncwordGhlcmUsIHNvIHRoZXJlJ3Mgbm8gZXhjdXNlIGZvciBtZXNzaW5nIHdpdGggcmFuZG9tIElPIHBvcnRzLiAgSG93ZXZlciwKK3dlIE1DQSBwZW9wbGUgc3RpbGwgYXBwcmVjaWF0ZSBhbnkgSVNBLXN0eWxlIGRyaXZlciB0aGF0IHdpbGwgd29yayB3aXRoCitvdXIgaGFyZHdhcmUuICBZb3UgdGFrZSB3aGF0IHlvdSBjYW4gZ2V0Li4uCisKK0xldmVsLVRyaWdnZXJlZCBJbnRlcnJ1cHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCZWNhdXNlIE1DQSB1c2VzIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLCBhIGZldyBwcm9ibGVtcyBhcmlzZSB3aXRoCit3aGF0IG1pZ2h0IGJlc3QgYmUgZGVzY3JpYmVkIGFzIHRoZSBJU0EgbWluZHNldCBhbmQgaXRzIGVmZmVjdHMgb24KK2RyaXZlcnMuICBUaGVzZSBzb3J0cyBvZiBwcm9ibGVtcyBhcmUgZXhwZWN0ZWQgdG8gYmVjb21lIGxlc3MgY29tbW9uIGFzCittb3JlIHBlb3BsZSB1c2Ugc2hhcmVkIElSUXMgb24gUENJIG1hY2hpbmVzLgorCitJbiBnZW5lcmFsLCBhbiBpbnRlcnJ1cHQgbXVzdCBiZSBhY2tub3dsZWRnZWQgbm90IG9ubHkgYXQgdGhlIElDVSAod2hpY2gKK2lzIGRvbmUgYXV0b21hZ2ljYWxseSBieSB0aGUga2VybmVsKSwgYnV0IGF0IHRoZSBkZXZpY2UgbGV2ZWwuICBJbgorcGFydGljdWxhciwgSVJRIDAgbXVzdCBiZSByZXNldCBhZnRlciBhIHRpbWVyIGludGVycnVwdCAobm93IGRvbmUgaW4KK2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jKSBvciB0aGUgZmlyc3QgdGltZXIgaW50ZXJydXB0IGhhbmdzIHRoZSBzeXN0ZW0uCitUaGVyZSB3ZXJlIGFsc28gcHJvYmxlbXMgd2l0aCB0aGUgMS4zLnggZmxvcHB5IGRyaXZlcnMsIGJ1dCB0aGF0IHNlZW1zCit0byBoYXZlIGJlZW4gZml4ZWQuCisKK0lSUXMgYXJlIGFsc28gc2hhcmVhYmxlLCBhbmQgbW9zdCBNQ0Etc3BlY2lmaWMgZGV2aWNlcyBzaG91bGQgYmUgY29kZWQKK3dpdGggc2hhcmVkIElSUXMgaW4gbWluZC4KKworL3Byb2MvbWNhCis9PT09PT09PT0KKworL3Byb2MvbWNhIGlzIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdmFyaW91cyBmaWxlcyBmb3IgYWRhcHRlcnMgYW5kCitvdGhlciBzdHVmZi4KKworCS9wcm9jL21jYS9wb3MJCVN0cmFpZ2h0IGxpc3Rpbmcgb2YgUE9TIHJlZ2lzdGVycworCS9wcm9jL21jYS9zbG90WzEtOF0JSW5mb3JtYXRpb24gb24gYWRhcHRlciBpbiBzcGVjaWZpYyBzbG90CisJL3Byb2MvbWNhL3ZpZGVvCQlTYW1lIGZvciBpbnRlZ3JhdGVkIHZpZGVvCisJL3Byb2MvbWNhL3Njc2kJCVNhbWUgZm9yIGludGVncmF0ZWQgU0NTSQorCS9wcm9jL21jYS9tYWNoaW5lCU1hY2hpbmUgaW5mb3JtYXRpb24KKworU2VlIEFwcGVuZGl4IEEgZm9yIGEgc2FtcGxlLgorCitEZXZpY2UgZHJpdmVycyBjYW4gZWFzaWx5IGFkZCB0aGVpciBvd24gaW5mb3JtYXRpb24gZnVuY3Rpb24gZm9yCitzcGVjaWZpYyBzbG90cyAoaW5jbHVkaW5nIGludGVncmF0ZWQgb25lcykgdmlhIHRoZQorbWNhX3NldF9hZGFwdGVyX3Byb2NmbigpIGNhbGwuICBEcml2ZXJzIHRoYXQgc3VwcG9ydCB0aGlzIGFyZSBFU0RJLCBJQk0KK1NDU0ksIGFuZCAzYzUyMy4gIElmIGEgZGV2aWNlIGlzIGFsc28gYSBtb2R1bGUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBwcm9jCitmdW5jdGlvbiBpcyByZW1vdmVkIGluIHRoZSBtb2R1bGUgY2xlYW51cC4gIFRoaXMgd2lsbCByZXF1aXJlIHN0b3JpbmcKK3RoZSBzbG90IGluZm9ybWF0aW9uIGluIGEgcHJpdmF0ZSBzdHJ1Y3R1cmUgc29tZXdoZXJlLiAgU2VlIHRoZSAzYzUyMworZHJpdmVyIGZvciBkZXRhaWxzLgorCitZb3VyIHR5cGljYWwgcHJvYyBmdW5jdGlvbiB3aWxsIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKKworCXN0YXRpYyBpbnQKKwlkZXZfZ2V0aW5mbyggY2hhciogYnVmLCBpbnQgc2xvdCwgdm9pZCogZCApIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSopIGQ7CisJCWludCBsZW4gPSAwOworCisJCWxlbiArPSBzcHJpbnRmKCBidWYrbGVuLCAiRGV2aWNlOiAlc1xuIiwgZGV2LT5uYW1lICk7CisJCWxlbiArPSBzcHJpbnRmKCBidWYrbGVuLCAiSVJROiAlZFxuIiwgZGV2LT5pcnEgKTsKKwkJbGVuICs9IHNwcmludGYoIGJ1ZitsZW4sICJJTyBQb3J0OiAlI2x4LSUjbHhcbiIsIC4uLiApOworCQkuLi4KKworCQlyZXR1cm4gbGVuOworCX0KKworU29tZSBvZiB0aGUgc3RhbmRhcmQgTUNBIGluZm9ybWF0aW9uIHdpbGwgYWxyZWFkeSBiZSBwcmludGVkLCBzbyBkb24ndAorYm90aGVyIHJlcGVhdGluZyBpdC4gIERvbid0IHRyeSBwdXR0aW5nIGluIG1vcmUgdGhhbiAzSyBvZiBpbmZvcm1hdGlvbi4KKworRW5hYmxlIHRoaXMgZnVuY3Rpb24gd2l0aDoKKwltY2Ffc2V0X2FkYXB0ZXJfcHJvY2ZuKCBzbG90LCBkZXZfZ2V0aW5mbywgZGV2ICk7CisKK0Rpc2FibGUgaXQgd2l0aDoKKwltY2Ffc2V0X2FkYXB0ZXJfcHJvY2ZuKCBzbG90LCBOVUxMLCBOVUxMICk7CisKK0l0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCwgZXZlbiBpZiB5b3UgZG9uJ3Qgd3JpdGUgYSBwcm9jIGZ1bmN0aW9uLCB0bworc2V0IHRoZSBuYW1lIG9mIHRoZSBhZGFwdGVyIChpLmUuICJQUy8yIEVTREkgQ29udHJvbGxlciIpIHZpYQorbWNhX3NldF9hZGFwdGVyX25hbWUoIGludCBzbG90LCBjaGFyKiBuYW1lICkuCisKK01DQSBEZXZpY2UgRHJpdmVycworPT09PT09PT09PT09PT09PT09CisKK0N1cnJlbnRseSwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIE1DQS1zcGVjaWZpYyBkZXZpY2UgZHJpdmVycy4KKworMSkgUFMvMiBFU0RJCisJZHJpdmVycy9ibG9jay9wczJlc2RpLmMKKwlpbmNsdWRlL2xpbnV4L3BzMmVzZGkuaAorICAgVXNlcyBtYWpvciBudW1iZXIgMzYsIGFuZCBzaG91bGQgdXNlIC9kZXYgZmlsZXMgL2Rldi9lZGEsIC9kZXYvZWRiLgorICAgU3VwcG9ydHMgdHdvIGRyaXZlcywgYnV0IG9ubHkgb25lIGNvbnRyb2xsZXIuICBNYXkgdXNlIHRoZQorICAgY29tbWFuZC1saW5lIGFyZ3MgImVkPWN5bCxoZWFkLHNlYyIgYW5kICJ0cDcyMCIuCisKKzIpIFBTLzIgU0NTSQorCWRyaXZlcnMvc2NzaS9pYm1tY2EuYworCWRyaXZlcnMvc2NzaS9pYm1tY2EuaAorICAgVGhlIGRyaXZlciBmb3IgdGhlIElCTSBTQ1NJIHN1YnN5c3RlbS4gIEluY2x1ZGVzIGJvdGggaW50ZWdyYXRlZAorICAgY29udHJvbGxlcnMgYW5kIGFkYXB0ZXIgY2FyZHMuICBNYXkgcmVxdWlyZSBjb21tYW5kLWxpbmUgYXJnCisgICAiaWJtbWNhc2NzaT1pb19wb3J0IiB0byBmb3JjZSBkZXRlY3Rpb24gb2YgYW4gYWRhcHRlci4gIElmIHlvdSBoYXZlIGEKKyAgIG1hY2hpbmUgd2l0aCBhIGZyb250LXBhbmVsIGRpc3BsYXkgKGkuZS4gbW9kZWwgOTUpLCB5b3UgY2FuIHVzZQorICAgImlibW1jYXNjc2k9ZGlzcGxheSIgdG8gZW5hYmxlIGEgZHJpdmUgYWN0aXZpdHkgaW5kaWNhdG9yLgorCiszKSAzYzUyMworCWRyaXZlcnMvbmV0LzNjNTIzLmMKKwlkcml2ZXJzL25ldC8zYzUyMy5oCisgICAzQ29tIDNjNTIzIEV0aGVybGluay9NQyBldGhlcm5ldCBkcml2ZXIuCisKKzQpIFNNQyBVbHRyYS9NQ0EgYW5kIElCTSBBZGFwdGVyL0EKKwlkcml2ZXJzL25ldC9zbWMtbWNhLmMKKwlkcml2ZXJzL25ldC9zbWMtbWNhLmgKKwlEcml2ZXIgZm9yIHRoZSBNQ0EgdmVyc2lvbiBvZiB0aGUgU01DIFVsdHJhIGFuZCB2YXJpb3VzIG90aGVyCisJT0VNJ2VkIGFuZCB3b3JrLWFsaWtlIGNhcmRzIChFbGl0ZSwgQWRhcHRlci9BLCBldGMpLgorCis1KSBORS8yCisJZHJpdmVyL25ldC9uZTIuYworCWRyaXZlci9uZXQvbmUyLmgKKwlUaGUgTkUvMiBpcyB0aGUgTUNBIHZlcnNpb24gb2YgdGhlIE5FMjAwMC4gIFRoaXMgbWF5IG5vdCB3b3JrCisJd2l0aCBjbG9uZXMgdGhhdCBoYXZlIGEgZGlmZmVyZW50IGFkYXB0ZXIgaWQgdGhhbiB0aGUgb3JpZ2luYWwKKwlORS8yLgorCis2KSBGdXR1cmUgRG9tYWluIE1DUy02MDAvNzAwLCBPRU0nZCBJQk0gRmFzdCBTQ1NJIEFhcHRlci9BIGFuZAorICAgUmVwbHkgU291bmQgQmxhc3Rlci9TQ1NJIChTQ1NJIHBhcnQpCisJQmV0dGVyIHN1cHBvcnQgZm9yIHRoZXNlIGNhcmRzIHRoYW4gdGhlIGRyaXZlciBmb3IgSVNBLgorICAgU3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgd2l0aCBJUlEgc2hhcmluZy4KKworQWxzbyBhZGRlZCBib290IHRpbWUgb3B0aW9uIG9mIHNjc2ktcHJvYmUsIHdoaWNoIGNhbiBkbyByZW9yZGVyaW5nIG9mCitTQ1NJIGhvc3QgYWRhcHRlcnMuIFRoaXMgd2lsbCBkaXJlY3QgdGhlIGtlcm5lbCBvbiB0aGUgb3JkZXIgd2hpY2gKK1NDU0kgYWRhcHRlciBzaG91bGQgYmUgZGV0ZWN0ZWQuIEV4YW1wbGU6CisgIHNjc2ktcHJvYmU9aWJtbWNhLGZkX21jcyxhZGFwdGVjMTU0MixidXNsb2dpYworCitUaGUgc2VyaWFsIGRyaXZlcnMgd2VyZSBtb2RpZmllZCB0byBzdXBwb3J0IHRoZSBleHRlbmRlZCBJTyBwb3J0IHJhbmdlCitvZiB0aGUgdHlwaWNhbCBNQ0Egc3lzdGVtIChhbHNvICNpZmRlZiBDT05GSUdfTUNBKS4KKworVGhlIGZvbGxvd2luZyBkZXZpY2VzIHdvcmsgd2l0aCBleGlzdGluZyBkcml2ZXJzOgorMSkgVG9rZW4tcmluZworMikgRnV0dXJlIERvbWFpbiBTQ1NJIChNQ1MtNjAwLCBNQ1MtNzAwLCBub3QgTUNTLTM1MCwgT0VNJ2VkIElCTSBTQ1NJKQorMykgQWRhcHRlYyAxNjQwIFNDU0kgKHVzaW5nIHRoZSBhaGExNTQyIGRyaXZlcikKKzQpIEJ1c3Rlay9CdXNsb2dpYyBTQ1NJICh2YXJpb3VzKQorNSkgUHJvYmFibHkgYWxsIEFyY25ldCBjYXJkcy4KKzYpIFNvbWUsIHBvc3NpYmx5IGFsbCwgTUNBIElERSBjb250cm9sbGVycy4KKzcpIDNDb20gM2M1MjkgKE1DQSB2ZXJzaW9uIG9mIDNjNTA5KSAocGF0Y2hlZCkKKworOCkgSW50ZWwgRXRoZXJFeHByZXNzTUMgIChwYXRjaGVkIHZlcnNpb24pCisgICBZb3UgbmVlZCB0byBoYXZlIENPTkZJR19NQ0EgZGVmaW5lZCB0byBoYXZlIEV0aGVyRXhwcmVzc01DIHN1cHBvcnQuCis5KSBSZXBseSBTb3VuZCBCbGFzdGVyL1NDU0kgKFNCIHBhcnQpIChwYXRjaGVkIHZlcnNpb24pCisKK0J1Z3MgJiBPdGhlciBXZWlyZG5lc3MKKz09PT09PT09PT09PT09PT09PT09PT0KKworTk1JcyB0ZW5kIHRvIG9jY3VyIHdpdGggTUNBIG1hY2hpbmVzIGJlY2F1c2Ugb2YgdmFyaW91cyBoYXJkd2FyZQord2VpcmRuZXNzLCBidXMgdGltZW91dHMsIGFuZCBtYW55IG90aGVyIG5vbi1jcml0aWNhbCB0aGluZ3MuICBTb21lIGJhc2ljCitjb2RlIHRvIGhhbmRsZSB0aGVtIChpbnNwaXJlZCBieSB0aGUgTmV0QlNEIE1DQSBjb2RlKSBoYXMgYmVlbiBhZGRlZCB0bworZGV0ZWN0IHRoZSBndWlsdHkgZGV2aWNlLCBidXQgaXQncyBwcmV0dHkgaW5jb21wbGV0ZS4gIElmIE5NSXMgYXJlIGEKK3BlcnNpc3RlbnQgcHJvYmxlbSAob24gc29tZSBtb2RlbCA3MCBvciA4MHMsIHRoZXkgb2NjdXIgZXZlcnkgY291cGxlCitzaGVsbCBjb21tYW5kcyksIHRoZSBDT05GSUdfSUdOT1JFX05NSSBmbGFnIHdpbGwgdGFrZSBjYXJlIG9mIHRoYXQuCisKK1ZhcmlvdXMgUGVudGl1bSBtYWNoaW5lcyBoYXZlIGhhZCBzZXJpb3VzIHByb2JsZW1zIHdpdGggdGhlIEZQVSB0ZXN0IGluCitidWdzLmguICBCYXNpY2FsbHksIHRoZSBtYWNoaW5lIGhhbmdzIGFmdGVyIHRoZSBITFQgdGVzdC4gIFRoaXMgb2NjdXJzLAorYXMgZmFyIGFzIHdlIGtub3csIG9uIHRoZSBQZW50aXVtLWVxdWlwcGVkIDg1cywgOTVzLCBhbmQgc29tZSBQQyBTZXJ2ZXJzLgorVGhlIFBDSS9NQ0EgUEMgNzUwcyBhcmUgZmluZSBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gIFRoZSBgYG1jYS1wZW50aXVtJycKK2Jvb3QtcHJvbXB0IGZsYWcgd2lsbCBkaXNhYmxlIHRoZSBGUFUgYnVnIGNoZWNrIGlmIHRoaXMgaXMgYSBwcm9ibGVtCit3aXRoIHlvdXIgbWFjaGluZS4KKworVGhlIG1vZGVsIDgwIGhhcyBhIHJhZnQgb2YgcHJvYmxlbXMgdGhhdCBhcmUganVzdCB0b28gd2VpcmQgYW5kIHVuaXF1ZQordG8gZ2V0IGludG8gaGVyZS4gIFNvbWUgcGVvcGxlIGhhdmUgbm8gdHJvdWJsZSB3aGlsZSBvdGhlcnMgaGF2ZSBub3RoaW5nCitidXQgcHJvYmxlbXMuICBJJ2Qgc3VzcGVjdCBzb21lIHByb2JsZW1zIGFyZSByZWxhdGVkIHRvIHRoZSBhZ2Ugb2YgdGhlCithdmVyYWdlIDgwIGFuZCBhY2NvbXBhbnlpbmcgaGFyZHdhcmUgZGV0ZXJpb3JhdGlvbiwgYWx0aG91Z2ggb3RoZXJzCithcmUgZGVmaW5pdGVseSBkZXNpZ24gcHJvYmxlbXMgd2l0aCB0aGUgaGFyZHdhcmUuICBBbW9uZyB0aGUgcHJvYmxlbXMKK2luY2x1ZGUgU0NTSSBjb250cm9sbGVyIHByb2JsZW1zLCBFU0RJIGNvbnRyb2xsZXIgcHJvYmxlbXMsIGFuZCBzZXJpb3VzCitzY3Jldy11cHMgaW4gdGhlIGZsb3BweSBjb250cm9sbGVyLiAgT2gsIGFuZCB0aGUgcGFyYWxsZWwgcG9ydCBpcyBhbHNvCitwcmV0dHkgZmxha3kuICBUaGVyZSB3ZXJlIGFib3V0IDUgb3IgNiBkaWZmZXJlbnQgbW9kZWwgODAgbW90aGVyYm9hcmRzCitwcm9kdWNlZCB0byBmaXggdmFyaW91cyBvYnNjdXJlIHByb2JsZW1zLiAgQXMgZmFyIGFzIEkga25vdywgaXQncyBwcmV0dHkKK211Y2ggaW1wb3NzaWJsZSB0byB0ZWxsIHdoaWNoIGJ1Z3MgYSBwYXJ0aWN1bGFyIG1vZGVsIDgwIGhhcyAob3RoZXIgdGhhbgordHJpZ2dlcmluZyB0aGVtLCB0aGF0IGlzKS4KKworRHJpdmVycyBhcmUgcmVxdWlyZWQgZm9yIHNvbWUgTUNBIG1lbW9yeSBhZGFwdGVycy4gIElmIHlvdSdyZSBzdWRkZW5seQorc2hvcnQgYSBmZXcgbWVncyBvZiBSQU0sIHRoaXMgbWlnaHQgYmUgdGhlIHJlYXNvbi4gIFRoZSAoSSB0aGluaykgRW5oYW5jZWQKK01lbW9yeSBBZGFwdGVyIGNvbW1vbmx5IGZvdW5kIG9uIHRoZSBtb2RlbCA3MCBpcyBvbmUuICBUaGVyZSdzIGEgdmVyeQorYWxwaGEgZHJpdmVyIGZsb2F0aW5nIGFyb3VuZCwgYnV0IGl0J3MgcHJldHR5IHVnbHkgKGRpc2Fzc2VtYmxlZCBmcm9tCit0aGUgRE9TIGRyaXZlciwgYWN0dWFsbHkpLiAgU2VlIHRoZSBNQ0EgTGludXggd2ViIHBhZ2UgKFVSTCBiZWxvdykKK2ZvciBtb3JlIGN1cnJlbnQgbWVtb3J5IGluZm8uCisKK1RoZSBUaGlua3BhZCA3MDAgYW5kIDcyMCB3aWxsIHdvcmssIGJ1dCB2YXJpb3VzIGNvbXBvbmVudHMgYXJlIGVpdGhlcgorbm9uLWZ1bmN0aW9uYWwsIGZsYWt5LCBvciB3ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZW0uICBUaGUKK2dyYXBoaWNzIGNvbnRyb2xsZXIgaXMgc3VwcG9zZWQgdG8gYmUgc29tZSBXRCwgYnV0IHdlIGNhbid0IGdldCB0aGluZ3MKK3dvcmtpbmcgcHJvcGVybHkuICBUaGUgUENNQ0lBIHNsb3RzIGRvbid0IHNlZW0gdG8gd29yay4gIERpdHRvIGZvciBBUE0uCitUaGUgc2VyaWFsIHBvcnRzIHdvcmssIGJ1dCBkZXRlY3Rpb24gc2VlbXMgdG8gYmUgZmxha3kuCisKK0NyZWRpdHMKKz09PT09PT0KK0Egd2hvbGUgcGlsZSBvZiBwZW9wbGUgaGF2ZSBjb250cmlidXRlZCB0byB0aGUgTUNBIGNvZGUuICBJJ2QgaW5jbHVkZQordGhlaXIgbmFtZXMgaGVyZSwgYnV0IEkgZG9uJ3QgaGF2ZSBhIGxpc3QgaGFuZHkuICBDaGVjayB0aGUgTUNBIExpbnV4Citob21lIHBhZ2UgKFVSTCBiZWxvdykgZm9yIGEgcGVycGV0dWFsbHkgb3V0LW9mLWRhdGUgbGlzdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitNQ0EgTGludXggSG9tZSBQYWdlOiBodHRwOi8vZ2x5Y2VyaW5lLml0c21tLnVuaS5lZHUvbWNhLworCitDaHJpc3RvcGhlIEJlYXVyZWdhcmQKK2NocmlzYkB0cnVlc3BlY3RyYS5jb20KK2NwYmVhdXJlQGNhbHVtLmNzY2x1Yi51d2F0ZXJsb28uY2EKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBcHBlbmRpeCBBOiBTYW1wbGUgL3Byb2MvbWNhCisKK1RoaXMgaXMgZnJvbSBteSBtb2RlbCA4NTk1LiAgU2xvdCAxIGNvbnRhaW5zIHRoZSBzdGFuZGFyZCBJQk0gU0NTSQorYWRhcHRlciwgc2xvdCAzIGlzIGFuIEFkYXB0ZWMgQUhBLTE2NDAsIHNsb3QgNSBpcyBhIFhHQS0xIHZpZGVvIGFkYXB0ZXIsCithbmQgc2xvdCA3IGlzIHRoZSAzYzUyMyBFdGhlcmxpbmsvTUMuCisKKy9wcm9jL21jYS9tYWNoaW5lOgorTW9kZWwgSWQ6IDB4ZjgKK1N1Ym1vZGVsIElkOiAweDE0CitCSU9TIFJldmlzaW9uOiAweDUKKworL3Byb2MvbWNhL3BvczoKK1Nsb3QgMTogZmYgOGUgZjEgZmMgYTAgZmYgZmYgZmYgIElCTSBTQ1NJIEFkYXB0ZXIgdy9DYWNoZQorU2xvdCAyOiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgCitTbG90IDM6IDFmIDBmIDgxIDNiIGJmIGI2IGZmIGZmICAKK1Nsb3QgNDogZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIAorU2xvdCA1OiBkYiA4ZiAxZCA1ZSBmZCBjMCAwMCAwMCAgCitTbG90IDY6IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAKK1Nsb3QgNzogNDIgNjAgZmYgMDggZmYgZmYgZmYgZmYgIDNDb20gM2M1MjMgRXRoZXJsaW5rL01DCitTbG90IDg6IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAKK1ZpZGVvIDogZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIAorU0NTSSAgOiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgCisKKy9wcm9jL21jYS9zbG90MToKK1Nsb3Q6IDEKK0FkYXB0ZXIgTmFtZTogSUJNIFNDU0kgQWRhcHRlciB3L0NhY2hlCitJZDogOGVmZgorRW5hYmxlZDogWWVzCitQT1M6IGZmIDhlIGYxIGZjIGEwIGZmIGZmIGZmIAorU3Vic3lzdGVtIFBVTjogNworRGV0ZWN0ZWQgYXQgYm9vdDogWWVzCisKKy9wcm9jL21jYS9zbG90MzoKK1Nsb3Q6IDMKK0FkYXB0ZXIgTmFtZTogVW5rbm93bgorSWQ6IDBmMWYKK0VuYWJsZWQ6IFllcworUE9TOiAxZiAwZiA4MSAzYiBiZiBiNiBmZiBmZiAKKworL3Byb2MvbWNhL3Nsb3Q1OgorU2xvdDogNQorQWRhcHRlciBOYW1lOiBVbmtub3duCitJZDogOGZkYgorRW5hYmxlZDogWWVzCitQT1M6IGRiIDhmIDFkIDVlIGZkIGMwIDAwIDAwIAorCisvcHJvYy9tY2Evc2xvdDc6CitTbG90OiA3CitBZGFwdGVyIE5hbWU6IDNDb20gM2M1MjMgRXRoZXJsaW5rL01DCitJZDogNjA0MgorRW5hYmxlZDogWWVzCitQT1M6IDQyIDYwIGZmIDA4IGZmIGZmIGZmIGZmIAorUmV2aXNpb246IDB4ZQorSVJROiA5CitJTyBBZGRyZXNzOiAweDMzMDAtMHgzMzA4CitNZW1vcnk6IDB4ZDgwMDAtMHhkYmZmZgorVHJhbnNjZWl2ZXI6IEV4dGVybmFsCitEZXZpY2U6IGV0aDAKK0hhcmR3YXJlIEFkZHJlc3M6IDAyIDYwIDhjIDQ1IGM0IDJhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21kLnR4dCBiL0RvY3VtZW50YXRpb24vbWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjUzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21kLnR4dApAQCAtMCwwICsxLDExOCBAQAorVG9vbHMgdGhhdCBtYW5hZ2UgbWQgZGV2aWNlcyBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHA6Ly93d3cuPGNvdW50cnk+Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3JhaWQvLi4uLgorCisKK0Jvb3QgdGltZSBhc3NlbWJseSBvZiBSQUlEIGFycmF5cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYm9vdCB3aXRoIHlvdXIgbWQgZGV2aWNlIHdpdGggdGhlIGZvbGxvd2luZyBrZXJuZWwgY29tbWFuZAorbGluZXM6CisKK2ZvciBvbGQgcmFpZCBhcnJheXMgd2l0aG91dCBwZXJzaXN0ZW50IHN1cGVyYmxvY2tzOgorICBtZD08bWQgZGV2aWNlIG5vLj4sPHJhaWQgbGV2ZWw+LDxjaHVuayBzaXplIGZhY3Rvcj4sPGZhdWx0IGxldmVsPixkZXYwLGRldjEsLi4uLGRldm4KKworZm9yIHJhaWQgYXJyYXlzIHdpdGggcGVyc2lzdGVudCBzdXBlcmJsb2NrcworICBtZD08bWQgZGV2aWNlIG5vLj4sZGV2MCxkZXYxLC4uLixkZXZuCitvciwgdG8gYXNzZW1ibGUgYSBwYXJ0aXRpb25hYmxlIGFycmF5OgorICBtZD1kPG1kIGRldmljZSBuby4+LGRldjAsZGV2MSwuLi4sZGV2bgorICAKK21kIGRldmljZSBuby4gPSB0aGUgbnVtYmVyIG9mIHRoZSBtZCBkZXZpY2UgLi4uIAorICAgICAgICAgICAgICAwIG1lYW5zIG1kMCwgCisJICAgICAgMSBtZDEsCisJICAgICAgMiBtZDIsCisJICAgICAgMyBtZDMsCisJICAgICAgNCBtZDQKKworcmFpZCBsZXZlbCA9IC0xIGxpbmVhciBtb2RlCisgICAgICAgICAgICAgIDAgc3RyaXBlZCBtb2RlCisJICAgICAgb3RoZXIgbW9kZXMgYXJlIG9ubHkgc3VwcG9ydGVkIHdpdGggcGVyc2lzdGVudCBzdXBlciBibG9ja3MKKworY2h1bmsgc2l6ZSBmYWN0b3IgPSAocmFpZC0wIGFuZCByYWlkLTEgb25seSkKKyAgICAgICAgICAgICAgU2V0ICB0aGUgY2h1bmsgc2l6ZSBhcyA0ayA8PCBuLgorCSAgICAgIAorZmF1bHQgbGV2ZWwgPSB0b3RhbGx5IGlnbm9yZWQKKwkJCSAgICAKK2RldjAtZGV2bjogZS5nLiAvZGV2L2hkYTEsL2Rldi9oZGMxLC9kZXYvc2RhMSwvZGV2L3NkYjEKKwkJCSAgICAKK0EgcG9zc2libGUgbG9hZGxpbiBsaW5lIChIYXJhbGQgSG95ZXIgPEhhcnJ5SEBSb3lhbC5OZXQ+KSAgbG9va3MgbGlrZSB0aGlzOgorCitlOlxsb2FkbGluXGxvYWRsaW4gZTpcemltYWdlIHJvb3Q9L2Rldi9tZDAgbWQ9MCwwLDQsMCwvZGV2L2hkYjIsL2Rldi9oZGMzIHJvCisKKworQm9vdCB0aW1lIGF1dG9kZXRlY3Rpb24gb2YgUkFJRCBhcnJheXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gbWQgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIChub3QgYXMgbW9kdWxlKSwgcGFydGl0aW9ucyBvZgordHlwZSAweGZkIGFyZSBzY2FubmVkIGFuZCBhdXRvbWF0aWNhbGx5IGFzc2VtYmxlZCBpbnRvIFJBSUQgYXJyYXlzLgorVGhpcyBhdXRvZGV0ZWN0aW9uIG1heSBiZSBzdXBwcmVzc2VkIHdpdGggdGhlIGtlcm5lbCBwYXJhbWV0ZXIKKyJyYWlkPW5vYXV0b2RldGVjdCIuICBBcyBvZiBrZXJuZWwgMi42LjksIG9ubHkgZHJpdmVzIHdpdGggYSB0eXBlIDAKK3N1cGVyYmxvY2sgY2FuIGJlIGF1dG9kZXRlY3RlZCBhbmQgcnVuIGF0IGJvb3QgdGltZS4KKworVGhlIGtlcm5lbCBwYXJhbWV0ZXIgInJhaWQ9cGFydGl0aW9uYWJsZSIgKG9yICJyYWlkPXBhcnQiKSBtZWFucwordGhhdCBhbGwgYXV0by1kZXRlY3RlZCBhcnJheXMgYXJlIGFzc2VtYmxlZCBhcyBwYXJ0aXRpb25hYmxlLgorCisKK1N1cGVyYmxvY2sgZm9ybWF0cworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZCBkcml2ZXIgY2FuIHN1cHBvcnQgYSB2YXJpZXR5IG9mIGRpZmZlcmVudCBzdXBlcmJsb2NrIGZvcm1hdHMuCitDdXJyZW50bHksIGl0IHN1cHBvcnRzIHN1cGVyYmxvY2sgZm9ybWF0cyAiMC45MC4wIiBhbmQgdGhlICJtZC0xIiBmb3JtYXQKK2ludHJvZHVjZWQgaW4gdGhlIDIuNSBkZXZlbG9wbWVudCBzZXJpZXMuCisKK1RoZSBrZXJuZWwgd2lsbCBhdXRvZGV0ZWN0IHdoaWNoIGZvcm1hdCBzdXBlcmJsb2NrIGlzIGJlaW5nIHVzZWQuCisKK1N1cGVyYmxvY2sgZm9ybWF0ICcwJyBpcyB0cmVhdGVkIGRpZmZlcmVudGx5IHRvIG90aGVycyBmb3IgbGVnYWN5CityZWFzb25zIC0gaXQgaXMgdGhlIG9yaWdpbmFsIHN1cGVyYmxvY2sgZm9ybWF0LgorCisKK0dlbmVyYWwgUnVsZXMgLSBhcHBseSBmb3IgYWxsIHN1cGVyYmxvY2sgZm9ybWF0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGFycmF5IGlzICdjcmVhdGVkJyBieSB3cml0aW5nIGFwcHJvcHJpYXRlIHN1cGVyYmxvY2tzIHRvIGFsbAorZGV2aWNlcy4KKworSXQgaXMgJ2Fzc2VtYmxlZCcgYnkgYXNzb2NpYXRpbmcgZWFjaCBvZiB0aGVzZSBkZXZpY2VzIHdpdGggYW4KK3BhcnRpY3VsYXIgbWQgdmlydHVhbCBkZXZpY2UuICBPbmNlIGl0IGlzIGNvbXBsZXRlbHkgYXNzZW1ibGVkLCBpdCBjYW4KK2JlIGFjY2Vzc2VkLgorCitBbiBhcnJheSBzaG91bGQgYmUgY3JlYXRlZCBieSBhIHVzZXItc3BhY2UgdG9vbC4gIFRoaXMgd2lsbCB3cml0ZQorc3VwZXJibG9ja3MgdG8gYWxsIGRldmljZXMuICBJdCB3aWxsIHVzdWFsbHkgbWFyayB0aGUgYXJyYXkgYXMKKyd1bmNsZWFuJywgb3Igd2l0aCBzb21lIGRldmljZXMgbWlzc2luZyBzbyB0aGF0IHRoZSBrZXJuZWwgbWQgZHJpdmVyCitjYW4gY3JlYXRlIGFwcHJvcHJpYXRlIHJlZHVuZGFuY3kgKGNvcHlpbmcgaW4gcmFpZDEsIHBhcml0eQorY2FsY3VsYXRpb24gaW4gcmFpZDQvNSkuCisKK1doZW4gYW4gYXJyYXkgaXMgYXNzZW1ibGVkLCBpdCBpcyBmaXJzdCBpbml0aWFsaXplZCB3aXRoIHRoZQorU0VUX0FSUkFZX0lORk8gaW9jdGwuICBUaGlzIGNvbnRhaW5zLCBpbiBwYXJ0aWN1bGFyLCBhIG1ham9yIGFuZCBtaW5vcgordmVyc2lvbiBudW1iZXIuICBUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgc2VsZWN0cyB3aGljaCBzdXBlcmJsb2NrCitmb3JtYXQgaXMgdG8gYmUgdXNlZC4gIFRoZSBtaW5vciBudW1iZXIgbWlnaHQgYmUgdXNlZCB0byB0dW5lIGhhbmRsaW5nCitvZiB0aGUgZm9ybWF0LCBzdWNoIGFzIHN1Z2dlc3Rpbmcgd2hlcmUgb24gZWFjaCBkZXZpY2UgdG8gbG9vayBmb3IgdGhlCitzdXBlcmJsb2NrLgorCitUaGVuIGVhY2ggZGV2aWNlIGlzIGFkZGVkIHVzaW5nIHRoZSBBRERfTkVXX0RJU0sgaW9jdGwuICBUaGlzCitwcm92aWRlcywgaW4gcGFydGljdWxhciwgYSBtYWpvciBhbmQgbWlub3IgbnVtYmVyIGlkZW50aWZ5aW5nIHRoZQorZGV2aWNlIHRvIGFkZC4KKworVGhlIGFycmF5IGlzIHN0YXJ0ZWQgd2l0aCB0aGUgUlVOX0FSUkFZIGlvY3RsLgorCitPbmNlIHN0YXJ0ZWQsIG5ldyBkZXZpY2VzIGNhbiBiZSBhZGRlZC4gIFRoZXkgc2hvdWxkIGhhdmUgYW4KK2FwcHJvcHJpYXRlIHN1cGVyYmxvY2sgd3JpdHRlbiB0byB0aGVtLCBhbmQgdGhlbiBwYXNzZWQgYmUgaW4gd2l0aAorQUREX05FV19ESVNLLgorCitEZXZpY2VzIHRoYXQgaGF2ZSBmYWlsZWQgb3IgYXJlIG5vdCB5ZXQgYWN0aXZlIGNhbiBiZSBkZXRhY2hlZCBmcm9tIGFuCithcnJheSB1c2luZyBIT1RfUkVNT1ZFX0RJU0suCisKKworU3BlY2lmaWMgUnVsZXMgdGhhdCBhcHBseSB0byBmb3JtYXQtMCBzdXBlciBibG9jayBhcnJheXMsIGFuZAorICAgICAgIGFycmF5cyB3aXRoIG5vIHN1cGVyYmxvY2sgKG5vbi1wZXJzaXN0ZW50KS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gYXJyYXkgY2FuIGJlICdjcmVhdGVkJyBieSBkZXNjcmliaW5nIHRoZSBhcnJheSAobGV2ZWwsIGNodW5rc2l6ZQorZXRjKSBpbiBhIFNFVF9BUlJBWV9JTkZPIGlvY3RsLiAgVGhpcyBtdXN0IGhhcyBtYWpvcl92ZXJzaW9uPT0wIGFuZAorcmFpZF9kaXNrcyAhPSAwLgorCitUaGVuIHVuaW5pdGlhbGl6ZWQgZGV2aWNlcyBjYW4gYmUgYWRkZWQgd2l0aCBBRERfTkVXX0RJU0suICBUaGUKK3N0cnVjdHVyZSBwYXNzZWQgdG8gQUREX05FV19ESVNLIG11c3Qgc3BlY2lmeSB0aGUgc3RhdGUgb2YgdGhlIGRldmljZQorYW5kIGl0J3Mgcm9sZSBpbiB0aGUgYXJyYXkuCisKK09uY2Ugc3RhcnRlZCB3aXRoIFJVTl9BUlJBWSwgdW5pbml0aWFsaXplZCBzcGFyZXMgY2FuIGJlIGFkZGVkIHdpdGgKK0hPVF9BRERfRElTSy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vbWVtb3J5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjNkZWRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tZW1vcnkudHh0CkBAIC0wLDAgKzEsNjAgQEAKK1RoZXJlIGFyZSBzZXZlcmFsIGNsYXNzaWMgcHJvYmxlbXMgcmVsYXRlZCB0byBtZW1vcnkgb24gTGludXgKK3N5c3RlbXMuCisKKwkxKSBUaGVyZSBhcmUgc29tZSBidWdneSBtb3RoZXJib2FyZHMgd2hpY2ggY2Fubm90IHByb3Blcmx5IAorCSAgIGRlYWwgd2l0aCB0aGUgbWVtb3J5IGFib3ZlIDE2TUIuICBDb25zaWRlciBleGNoYW5naW5nCisJICAgeW91ciBtb3RoZXJib2FyZC4KKworCTIpIFlvdSBjYW5ub3QgZG8gRE1BIG9uIHRoZSBJU0EgYnVzIHRvIGFkZHJlc3NlcyBhYm92ZQorCSAgIDE2TS4gIE1vc3QgZGV2aWNlIGRyaXZlcnMgdW5kZXIgTGludXggYWxsb3cgdGhlIHVzZQorICAgICAgICAgICBvZiBib3VuY2UgYnVmZmVycyB3aGljaCB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0uICBEcml2ZXJzCisJICAgdGhhdCBkb24ndCB1c2UgYm91bmNlIGJ1ZmZlcnMgd2lsbCBiZSB1bnN0YWJsZSB3aXRoCisJICAgbW9yZSB0aGFuIDE2TSBpbnN0YWxsZWQuICBEcml2ZXJzIHRoYXQgdXNlIGJvdW5jZSBidWZmZXJzCisJICAgd2lsbCBiZSBPSywgYnV0IG1heSBoYXZlIHNsaWdodGx5IGhpZ2hlciBvdmVyaGVhZC4KKwkKKwkzKSBUaGVyZSBhcmUgc29tZSBtb3RoZXJib2FyZHMgdGhhdCB3aWxsIG5vdCBjYWNoZSBhYm92ZQorCSAgIGEgY2VydGFpbiBxdWFudGl0eSBvZiBtZW1vcnkuICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UKKwkgICBtb3RoZXJib2FyZHMsIHlvdXIgc3lzdGVtIHdpbGwgYmUgU0xPV0VSLCBub3QgZmFzdGVyCisJICAgYXMgeW91IGFkZCBtb3JlIG1lbW9yeS4gIENvbnNpZGVyIGV4Y2hhbmdpbmcgeW91ciAKKyAgICAgICAgICAgbW90aGVyYm9hcmQuCisKK0FsbCBvZiB0aGVzZSBwcm9ibGVtcyBjYW4gYmUgYWRkcmVzc2VkIHdpdGggdGhlICJtZW09WFhYTSIgYm9vdCBvcHRpb24KKyh3aGVyZSBYWFggaXMgdGhlIHNpemUgb2YgUkFNIHRvIHVzZSBpbiBtZWdhYnl0ZXMpLiAgCitJdCBjYW4gYWxzbyB0ZWxsIExpbnV4IHRvIHVzZSBsZXNzIG1lbW9yeSB0aGFuIGlzIGFjdHVhbGx5IGluc3RhbGxlZC4KK0lmIHlvdSB1c2UgIm1lbT0iIG9uIGEgbWFjaGluZSB3aXRoIFBDSSwgY29uc2lkZXIgdXNpbmcgIm1lbW1hcD0iIHRvIGF2b2lkCitwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGNvbGxpc2lvbnMuCisKK1NlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIGJvb3QgbG9hZGVyIChMSUxPLCBsb2FkbGluLCBldGMuKSBhYm91dAoraG93IHRvIHBhc3Mgb3B0aW9ucyB0byB0aGUga2VybmVsLgorCitUaGVyZSBhcmUgb3RoZXIgbWVtb3J5IHByb2JsZW1zIHdoaWNoIExpbnV4IGNhbm5vdCBkZWFsIHdpdGguICBSYW5kb20KK2NvcnJ1cHRpb24gb2YgbWVtb3J5IGlzIHVzdWFsbHkgYSBzaWduIG9mIHNlcmlvdXMgaGFyZHdhcmUgdHJvdWJsZS4KK1RyeToKKworCSogUmVkdWNpbmcgbWVtb3J5IHNldHRpbmdzIGluIHRoZSBCSU9TIHRvIHRoZSBtb3N0IGNvbnNlcnZhdGl2ZSAKKyAgICAgICAgICB0aW1pbmdzLgorCisJKiBBZGRpbmcgYSBjb29saW5nIGZhbi4KKworCSogTm90IG92ZXJjbG9ja2luZyB5b3VyIENQVS4KKworCSogSGF2aW5nIHRoZSBtZW1vcnkgdGVzdGVkIGluIGEgbWVtb3J5IHRlc3RlciBvciBleGNoYW5nZWQKKwkgIHdpdGggdGhlIHZlbmRvci4gQ29uc2lkZXIgdGVzdGluZyBpdCB3aXRoIG1lbXRlc3Q4NiB5b3Vyc2VsZi4KKwkKKwkqIEV4Y2hhbmdpbmcgeW91ciBDUFUsIGNhY2hlLCBvciBtb3RoZXJib2FyZCBmb3Igb25lIHRoYXQgd29ya3MuCisKKwkqIERpc2FibGluZyB0aGUgY2FjaGUgZnJvbSB0aGUgQklPUy4KKworCSogVHJ5IHBhc3NpbmcgdGhlICJtZW09NE0iIG9wdGlvbiB0byB0aGUga2VybmVsIHRvIGxpbWl0CisJICBMaW51eCB0byB1c2luZyBhIHZlcnkgc21hbGwgYW1vdW50IG9mIG1lbW9yeS4gVXNlICJtZW1tYXA9Ii1vcHRpb24KKwkgIHRvZ2V0aGVyIHdpdGggIm1lbT0iIG9uIHN5c3RlbXMgd2l0aCBQQ0kgdG8gYXZvaWQgcGh5c2ljYWwgYWRkcmVzcworCSAgc3BhY2UgY29sbGlzaW9ucy4KKworCitPdGhlciB0cmlja3M6CisKKwkqIFRyeSBwYXNzaW5nIHRoZSAibm8tMzg3IiBvcHRpb24gdG8gdGhlIGtlcm5lbCB0byBpZ25vcmUKKwkgIGEgYnVnZ3kgRlBVLgorCisJKiBUcnkgcGFzc2luZyB0aGUgIm5vLWhsdCIgb3B0aW9uIHRvIGRpc2FibGUgdGhlIHBvdGVudGlhbGx5CisgICAgICAgICAgYnVnZ3kgSExUIGluc3RydWN0aW9uIGluIHlvdXIgQ1BVLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9taXBzL0dUNjQxMjAuUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9taXBzL0dUNjQxMjAuUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMGVlYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21pcHMvR1Q2NDEyMC5SRUFETUUKQEAgLTAsMCArMSw2NSBAQAorUkVBRE1FIGZvciBhcmNoL21pcHMvZ3Q2NDEyMCBkaXJlY3RvcnkgYW5kIHN1YmRpcmVjdG9yaWVzCisKK0p1biBTdW4sIGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKKzAxLzI3LCAyMDAxCisKK01PVElWQVRJT04KKy0tLS0tLS0tLS0KKworTWFueSBNSVBTIGJvYXJkcyBzaGFyZSB0aGUgc2FtZSBzeXN0ZW0gY29udHJvbGxlciAob3IgQ1BVIGNvbXBhbmlhbiBjaGlwKSwKK3N1Y2ggYXMgR1QtNjQxMjAuICBJdCBpcyBoaWdobHkgZGVzaXJhYmxlIHRvIGxldCB0aGVzZSBib2FyZHMgc2hhcmUKK3RoZSBzYW1lIGNvbnRyb2xsZXIgY29kZSBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZW0uCisKK1RoaXMgZGlyZWN0b3J5IGlzIG1lYW50IHRvIGhvbGQgYWxsIE1JUFMgYm9hcmRzIHRoYXQgdXNlIEdULTY0MTIwIG9yIEdULTY0MTIwQS4KKworCitIT1cgVE8gQUREIEEgQk9BUkQKKy0tLS0tLS0tLS0tLS0tLS0tLQorIAorLiBDcmVhdGUgYSBzdWJkaXJlY3RvcnkgaW5jbHVkZS9hc20vZ3Q2NDEyMC88Ym9hcmQ+LiAgCisKKy4gQ3JlYXRlIGEgZmlsZSBjYWxsZWQgZ3Q2NDEyMF9kZXAuaCB1bmRlciB0aGF0IGRpcmVjdG9yeS4KKworLiBNb2RpZnkgaW5jbHVkZS9hc20vZ3Q2NDEyMC9ndDY0MTIwLmggZmlsZSB0byBpbmNsdWRlIHRoZSBuZXcgZ3Q2NDEyMF9kZXAuaAorICBiYXNlZCBvbiBjb25maWcgb3B0aW9ucy4gIFRoZSBib2FyZC1kZXAgc2VjdGlvbiBpcyBhdCB0aGUgZW5kIG9mIAorICBpbmNsdWRlL2FzbS9ndDY0MTIwL2d0NjQxMjAuaCBmaWxlLiBUaGVyZSB5b3UgY2FuIGZpbmQgYWxsIHJlcXVpcmVkCisgIGRlZmluaXRpb25zIGluY2x1ZGUvYXNtL2d0NjQxMjAvPGJvYXJkPi9ndDY0MTIwX2RlcC5oIGZpbGUgbXVzdCBzdXBwbHkuCisKKy4gQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IGFyY2gvbWlwcy9ndDY0MTIwLzxib2FyZD4gZGlyZWN0b3J5IHRvIGhvbGQKKyAgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMuCisKKy4gVGhlIEdULTY0MTIwIGNvbW1vbiBjb2RlIGlzIHN1cHBsaWVkIHVuZGVyIGFyY2gvbWlwcy9ndDY0MTIwL2NvbW1vbiBkaXJlY3RvcnkuCisgIEl0IGluY2x1ZGVzOgorCTEpIGFyY2gvbWlwcy9ndDY0MTIwL3BjaS5jIC0KKwkJY29tbW9uIFBDSSByb3V0aW5lLCBpbmNsdWRlIHRoZSB0b3AtbGV2ZWwgcGNpYmlvc19pbml0KCkKKwkyKSBhcmNoL21pcHMvZ3Q2NDEyMC9pcnEuYyAtCisJCWNvbW1vbiBJUlEgcm91dGluZSwgaW5jbHVkZSB0aGUgdG9wLWxldmVsIGRvX0lSUSgpIAorCSAgIFtUaGlzIHBhcnQgcmVhbGx5IGJlbG9uZ3MgdG8gYXJjaC9taXBzL2tlcm5lbC4ganN1bl0KKyAJMykgYXJjaC9taXBzL2d0NjQxMjAvZ3RfaXJxLmMgLQorCQljb21tb24gSVJRIHJvdXRpbmVzIGZvciBHVC02NDEyMCBjaGlwLiAgQ3VycmVudGx5IGl0IG9ubHkgaGFuZGxlcworCSAJdGhlIHRpbWVyIGludGVycnVwdC4KKworLiBCb2FyZC1zcGVjaWZpYyByb3V0aW5lcyBhcmUgc3VwcGxpZWQgdW5kZXIgYXJjaC9taXBzL2d0NjQxMjAvPGJvYXJkPiBkaXIuCisJMSkgYXJjaC9taXBzL2d0NjQxMjAvPGJvYXJkPi9wY2kuYyAtIGl0IHByb3ZpZGVzIGJ1cyBmaXh1cCByb3V0aW5lCisJMikgYXJjaC9taXBzL2d0NjQxMjAvPGJvYXJkPi9pcnEuYyAtIGl0IHByb3ZpZGVzIGVuYWJsZS9kaXNhYmxlIGlycXMKKwkJYW5kIGJvYXJkIGlycSBzZXR1cCByb3V0aW5lIChpcnFfc2V0dXApCisJMykgYXJjaC9taXBzL2d0NjQxMjAvPGJvYXJkPi9pbnQtaGFuZGxlci5TIC0KKwkJVGhlIGZpcnN0LWxldmVsIGludGVycnVwdCBkaXNwYXRjaGluZyByb3V0aW5lLgorCTQpIGEgYnVuY2ggb2Ygb3RoZXIgIm5vcm1hbCIgc3R1ZmYgKHNldHVwLCBwcm9tLCBkYmdfaW8sIHJlc2V0LCBldGMpCisKKy4gRm9sbG93IG90aGVyICJub3JtYWwiIHByb2NlZHVyZSB0byBtb2RpZnkgY29uZmlndXJhdGlvbiBmaWxlcywgZXRjLgorCisKK1RPLURPIExJU1QKKy0tLS0tLS0tLS0KKworLiBFeHBhbmQgYXJjaC9taXBzL2d0NjQxMjAvZ3RfaXJxLmMgdG8gaGFuZGxlIGFsbCBHVC02NDEyMCBpbnRlcnJ1cHRzLgorICBXZSBwcm9iYWJseSBuZWVkIHRvIGludHJvZHVjZSBHVF9JUlFfQkFTRSAgaW4gYm9hcmQtZGVwIGhlYWRlciBmaWxlLAorICB3aGljaCBpcyB1c2VkIHRoZSBzdGFydGluZyBpcnFfbnIgZm9yIGFsbCBHVCBpcnFzLgorCisgIEEgZnVuY3Rpb24sIGd0NjQxMjBfaGFuZGxlX2lycSgpLCB3aWxsIGJlIGFkZGVkIHNvIHRoYXQgdGhlIGZpcnN0LWxldmVsCisgIGlycSBkaXNwYXRjaGVyIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIGl0IGRldGVjdHMgYW4gaW50ZXJydXB0CisgIGZyb20gR1QtNjQxMjAuCisKKy4gTW9yZSBzdXBwb3J0IGZvciBHVC02NDEyMCBQQ0kgZmVhdHVyZXMgKDJuZCBQQ0kgYnVzLCBwZXJoYXBzKQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pcHMvcGNpL3BjaS5SRUFETUUgYi9Eb2N1bWVudGF0aW9uL21pcHMvcGNpL3BjaS5SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5N2VlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWlwcy9wY2kvcGNpLlJFQURNRQpAQCAtMCwwICsxLDU0IEBACisKK1BldGUgUG9wb3YsIHBwb3BvdkBwYWNiZWxsLm5ldAorMDcvMTEvMjAwMQorCitUaGlzIFJFQURNRSBicmllZmx5IGV4cGxhaW5zIGhvdyB0byB1c2UgdGhlIHBjaSBhbmQgcGNpX2F1dG8KK2NvZGUgaW4gYXJjaC9taXBzL2tlcm5lbC4gIFRoZSBjb2RlIHdhcyBwb3J0ZWQgZnJvbSBQb3dlclBDIGFuZAorbW9kaWZpZWQgc2xpZ2h0bHkuIEl0IGhhcyBiZWVuIHRlc3RlZCBwcmV0dHkgd2VsbCBvbiBQUEMgb24gc29tZQorcmF0aGVyIGNvbXBsZXggc3lzdGVtcyB3aXRoIG11bHRpcGxlIGJyaWRnZXMgYW5kIGRldmljZXMgYmVoaW5kCitlYWNoIGJyaWRnZS4gSG93ZXZlciwgYXQgdGhlIHRpbWUgdGhpcyBSRUFETUUgd2FzIHdyaXR0ZW4sIHRoZQorbWlwcyBwb3J0IHdhcyB0ZXN0ZWQgb25seSBvbiBib2FyZHMgd2l0aCBhIHNpbmdsZSBwY2kgYnVzIGFuZAorbm8gUDJQIGJyaWRnZXMuICBJdCdzIHZlcnkgcG9zc2libGUgdGhhdCBvbiBib2FyZHMgd2l0aCBQMlAKK2JyaWRnZXMgc29tZSBtb2RpZmljYXRpb25zIGhhdmUgdG8gYmUgbWFkZS4gVGhlIGNvZGUgd2lsbCAKK2V2b2x2ZSwgbm8gZG91YnQsIGJ1dCBjdXJyZW50bHkgZXZlcnkgc2luZ2xlIG1pcHMgYm9hcmQKK2lzIGRvaW5nIGl0cyBvd24gcGNpYmlvcyB0aGluZyBhbmQgaXQgaGFzIGJlY29tZSBhIGJpZworbWVzcy4gIFRoaXMgZ2VuZXJpYyBwY2kgY29kZSBpcyBtZWFudCB0byBjbGVhbiB1cCB0aGUgbWlwcworcGNpIG1lc3MgYW5kIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBwY2kgc3VwcG9ydCB0byBuZXcgYm9hcmRzLgorCitpbnNpZGUgdGhlIGRlZmluZSBmb3IgeW91ciBib2FyZCBpbiBhcmNoL21pcHMvY29uZmlnLmluLiAKK0ZvciBleGFtcGxlLCB0aGUgR2FsaWxlbyBFVjk2MTAwIGJvYXJkICBsb29rcyBsaWtlIHRoaXM6CisKK2lmIFsgIiRDT05GSUdfTUlQU19FVjk2MTAwIiA9ICJ5IiBdOyB0aGVuCisJZGVmaW5lX2Jvb2wgQ09ORklHX1BDSSB5CisJZGVmaW5lX2Jvb2wgQ09ORklHX01JUFNfR1Q5NjEwMCB5CisJZGVmaW5lX2Jvb2wgQ09ORklHX05FV19QQ0kgeQorCWRlZmluZV9ib29sIENPTkZJR19TV0FQX0lPX1NQQUNFIHkKK2ZpIAorCisKK05leHQsIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgYXJjaC9taXBzL2tlcm5lbC9wY2kgY29kZSwgd2hpY2ggaGFzIHRoZQorcGNpYmlvc19pbml0KCkgZnVuY3Rpb24sIGFkZAorCitkZWZpbmVfYm9vbCBDT05GSUdfTkVXX1BDSSB5CisgCitpbnNpZGUgdGhlIGRlZmluZSBmb3IgeW91ciBib2FyZC4gQWdhaW4sIHRoZSBFVjk2MTAwIGV4YW1wbGUgYWJvdmUKK3Nob3cgTkVXX1BDSSB0dXJuZWQgb24uCisKKworTm93IHlvdSBuZWVkIHRvIGFkZCB5b3VyIGZpbGVzIHRvIGhvb2sgaW4geW91ciBwY2kgY29uZmlndXJhdGlvbgorY3ljbGVzLiAgVXN1YWxseSB5b3UnbGwgbmVlZCBvbmx5IGEgY291cGxlIG9mIGZpbGVzIG5hbWVkIHNvbWV0aGluZworbGlrZSBwY2lfZml4dXBzLmMgYW5kIHBjaV9vcHMuYy4gIFlvdSBjYW4gY29weSB0aGUgdGVtcGxhdGVzCitwcm92aWRlZCBhbmQgZmlsbCBpbiB0aGUgY29kZS4KKworVGhlIGZpbGUgcGNpX29wcy5jIHNob3VsZCBjb250YWluIHRoZSBwY2kgY29uZmlndXJhdGlvbiBjeWNsZXMgcm91dGluZXMuCitJdCBhbHNvIGhhcyB0aGUgbWlwc19wY2lfY2hhbm5lbHNbXSBhcnJheSB3aGljaCBjb250YWlucyB0aGUgZGVzY3JpcHRvcnMKK29mIGVhY2ggcGNpIGNvbnRyb2xsZXIuCisKK1RoZSBmaWxlIHBjaV9maXh1cHMuYyBjb250YWlucyBhIGZldyByb3V0aW5lcyB0byBkbyBpbnRlcnJ1cHQgZml4dXBzLAorcmVzb3VyY2VzIGZpeHVwcywgYW5kLCBpZiBuZWVkZWQsIHBjaSBiaW9zIGZpeHVwcy4KKworVXN1YWxseSB5b3UnbGwgcHV0IHlvdXIgcGNpX2ZpeHVwcy5jIGZpbGUgaW4geW91ciBib2FyZCBzcGVjaWZpYyBkaXJlY3RvcnksIAorc2luY2UgdGhlIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUgYXJlIGJvYXJkIHNwZWNpZmljLiAgVGhlIGZ1bmN0aW9ucyBpbgorcGNpX29wcy5jLCBvbiB0aGUgb3RoZXIgaGFuZCwgYXJlIHVzdWFsbHkgcGNpIGNvbnRyb2xsZXIgc3BlY2lmaWMgc28gdGhhdAorZmlsZSBjb3VsZCBiZSBzaGFyZWQgYW1vbmcgYSBmZXcgZGlmZmVyZW50IGJvYXJkcyB1c2luZyB0aGUgc2FtZQorcGNpIGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pcHMvdGltZS5SRUFETUUgYi9Eb2N1bWVudGF0aW9uL21pcHMvdGltZS5SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiYzBkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWlwcy90aW1lLlJFQURNRQpAQCAtMCwwICsxLDE5OCBAQAorUkVBRE1FIGZvciBNSVBTIHRpbWUgc2VydmljZXMKKworSnVuIFN1bgoranN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAorCisKK0FCT1VUCistLS0tLQorVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgbmV3IGFyY2gvbWlwcy9rZXJuZWwvdGltZS5jLCByZWxhdGVkIGZpbGVzIGFuZCB0aGUgCitzZXJ2aWNlcyB0aGV5IHByb3ZpZGUuIAorCitJZiB5b3UgYXJlIHNob3J0IGluIHBhdGllbmNlIGFuZCBqdXN0IHdhbnQgdG8ga25vdyBob3cgdG8gdXNlIHRpbWUuYyBmb3IgYSAKK25ldyBib2FyZCBvciBjb252ZXJ0IGFuIGV4aXN0aW5nIGJvYXJkLCBnbyB0byB0aGUgbGFzdCBzZWN0aW9uLgorCisKK0ZJTEVTLCBDT01QQVRBQklMSVRZIEFORCBDT05GSUdTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG9sZCBhcmNoL21pcHMva2VybmVsL3RpbWUuYyBpcyByZW5hbWVkIHRvIG9sZC10aW1lLmMuCisKK0EgbmV3IHRpbWUuYyBpcyBwdXQgdGhlcmUsIHRvZ2V0aGVyIHdpdGggaW5jbHVkZS9hc20tbWlwcy90aW1lLmguCisKK1R3byBjb25maWdzIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCwgQ09ORklHX09MRF9USU1FX0MgYW5kIENPTkZJR19ORVdfVElNRV9DLgorU28gd2UgYWxsb3cgYm9hcmRzIHVzaW5nIAorCisJMSkgb2xkIHRpbWUuYyAoQ09ORklHX09MRF9USU1FX0MpCisJMikgbmV3IHRpbWUuYyAoQ09ORklHX05FV19USU1FX0MpCisJMykgbmVpdGhlciAodGhlaXIgb3duIHByaXZhdGUgdGltZS5jKQorCitIb3dldmVyLCBpdCBpcyBleHBlY3RlZCBldmVyeSBib2FyZCB3aWxsIG1vdmUgdG8gdGhlIG5ldyB0aW1lLmMgaW4gdGhlIG5lYXIKK2Z1dHVyZS4KKworCitXSEFUIFRIRSBORVcgQ09ERSBQUk9WSURFUz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworVGhlIG5ldyB0aW1lIGNvZGUgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHNlcnZpY2VzOgorCisgIGEpIEltcGxlbWVudHMgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IExpbnV4IGNvbW1vbiBjb2RlOgorCXRpbWVfaW5pdAorCWRvX2dldHRpbWVvZmRheQorCWRvX3NldHRpbWVvZmRheQorCisgIGIpIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIG9mIFJUQyBhbmQgbnVsbCBSVEMgaW1wbGVtZW50YXRpb24gYXMgZGVmYXVsdC4KKwlleHRlcm4gdW5zaWduZWQgbG9uZyAoKnJ0Y19nZXRfdGltZSkodm9pZCk7CisJZXh0ZXJuIGludCAoKnJ0Y19zZXRfdGltZSkodW5zaWduZWQgbG9uZyk7CisKKyAgYykgYSBzZXQgb2YgZ2V0dGltZW9mZnNldCBmdW5jdGlvbnMgZm9yIGRpZmZlcmVudCBDUFVzIGFuZCBkaWZmZXJlbnQKKyAgICAgbmVlZHMuCisKKyAgZCkgaGlnaC1sZXZlbCBhbmQgbG93LWxldmVsIHRpbWVyIGludGVycnVwdCByb3V0aW5lcyB3aGVyZSB0aGUgdGltZXIgCisgICAgIGludGVycnVwdCBzb3VyY2UgIG1heSBvciBtYXkgbm90IGJlIHRoZSBDUFUgdGltZXIuICBUaGUgaGlnaC1sZXZlbCAKKyAgICAgcm91dGluZSBpcyBkaXNwYXRjaGVkIHRocm91Z2ggZG9fSVJRKCkgd2hpbGUgdGhlIGxvdy1sZXZlbCBpcyAKKyAgICAgZGlzcGF0Y2hlZCBpbiBhc3NlbWFibHkgY29kZSAodXN1YWxseSBpbnQtaGFuZGxlci5TKQorCisKK1dIQVQgVEhFIE5FVyBDT0RFIFJFUVVJUkVTPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciB0aGUgbmV3IGNvZGUgdG8gd29yayBwcm9wZXJseSwgZWFjaCBib2FyZCBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBzdXBwbHkKK3RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG9yIHZhbHVlczoKKworICBhKSBib2FyZF90aW1lX2luaXQgLSBhIGZ1bmN0aW9uIHBvaW50ZXIuICBJbnZva2VkIGF0IHRoZSBiZWdpbm5pZyBvZgorICAgICB0aW1lX2luaXQoKS4gIEl0IGlzIG9wdGlvbmFsLgorCTEuIChvcHRpb25hbCkgc2V0IHVwIFJUQyByb3V0aW5lcworCTIuIChvcHRpb25hbCkgY2FsaWJyYXRlIGFuZCBzZXQgdGhlIG1pcHNfY291bnRlcl9mcmVxdWVuY3kKKworICBiKSBib2FyZF90aW1lcl9zZXR1cCAtIGEgZnVuY3Rpb24gcG9pbnRlci4gIEludm9rZWQgYXQgdGhlIGVuZCBvZiB0aW1lX2luaXQoKQorCTEuIChvcHRpb25hbCkgb3Zlci1yaWRlIGFueSBkZWNpc2lvbnMgbWFkZSBpbiB0aW1lX2luaXQoKQorCTIuIHNldCB1cCB0aGUgaXJxYWN0aW9uIGZvciB0aW1lciBpbnRlcnJ1cHQuCisJMy4gZW5hYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQKKworICBjKSAob3B0aW9uYWwpIGJvYXJkLXNwZWNpZmljIFJUQyByb3V0aW5lcy4KKworICBkKSAob3B0aW9uYWwpIG1pcHNfY291bnRlcl9mcmVxdWVuY3kgLSBJdCBtdXN0IGJlIGRlZmluaWVkIGlmIHRoZSBib2FyZAorICAgICBpcyB1c2luZyBDUFUgY291bnRlciBmb3IgdGltZXIgaW50ZXJydXB0IG9yIGl0IGlzIHVzaW5nIGZpeGVkIHJhdGUKKyAgICAgZ2V0dGltZW9mZnNldCgpLgorCisKK1BPUlRJTkcgR1VJREUKKy0tLS0tLS0tLS0tLS0KKworU3RlcCAxOiBkZWNpZGUgaG93IHlvdSBsaWtlIHRvIGltcGxlbWVudCB0aGUgdGltZSBzZXJ2aWNlcy4KKworICBhKSBkb2VzIHRoaXMgYm9hcmQgaGF2ZSBhIFJUQz8gIElmIHllcywgaW1wbGVtZW50IHRoZSB0d28gUlRDIGZ1bmNzLgorCisgIGIpIGRvZXMgdGhlIENQVSBoYXZlIGNvdW50ZXIvY29tcGFyZSByZWdpc3RlcnM/IAorCisgICAgIElmIHRoZSBhbnN3ZXIgaXMgbm8sIHlvdSBuZWVkIGEgdGltZXIgdG8gcHJvdmlkZSB0aGUgdGltZXIgaW50ZXJydXB0CisgICAgIGF0IDEwMCBIWiBzcGVlZC4KKworICAgICBZb3UgY2Fubm90IHVzZSB0aGUgZmFzdCBnZXR0aW1lb2Zmc2V0IGZ1bmN0aW9ucywgaS5lLiwKKworCXVuc2lnbmVkIGxvbmcgZml4ZWRfcmF0ZV9nZXR0aW1lb2Zmc2V0KHZvaWQpOworCXVuc2lnbmVkIGxvbmcgY2FsaWJyYXRlX2RpdjMyX2dldHRpbWVvZmZzZXQodm9pZCk7CisJdW5zaWduZWQgbG9uZyBjYWxpYnJhdGVfZGl2NjRfZ2V0dGltZW9mZnNldCh2b2lkKTsKKworICAgIFlvdSBjYW4gdXNlIG51bGxfZ2V0dGltZW9mZnNldCgpIHdpbGwgZ2l2ZXMgdGhlIHNhbWUgdGltZSByZXNvbHV0aW9uIGFzCisgICAgamlmZnkuICBPciB5b3UgY2FuIGltcGxlbWVudCB5b3VyIG93biBnZXR0aW1lb2Zmc2V0IChwcm9iYWJseSBiYXNlZCBvbiAKKyAgICBzb21lIGFkIGhvYyBoYXJkd2FyZSBvbiB5b3VyIG1hY2hpbmUuKQorCisgIGMpIFRoZSBmb2xsb3dpbmcgc3ViIHN0ZXBzIGFzc3VtZSB5b3VyIENQVSBoYXMgY291bnRlciByZWdpc3Rlci4KKyAgICAgRG8geW91IHBsYW4gdG8gdXNlIHRoZSBDUFUgY291bnRlciByZWdpc3RlciBhcyB0aGUgdGltZXIgaW50ZXJydXB0CisgICAgIG9yIHVzZSBhbiBleG50ZXJuYWwgdGltZXI/CisKKyAgICAgSW4gb3JkZXIgdG8gdXNlIENQVSBjb3VudGVyIHJlZ2lzdGVyIGFzIHRoZSB0aW1lciBpbnRlcnJ1cHQgc291cmNlLCB5b3UKKyAgICAgbXVzdCBrbm93IHRoZSBjb3VudGVyIHNwZWVkIChtaXBzX2NvdW50ZXJfZnJlcXVlbmN5KS4gIEl0IGlzIHVzdWFsbHkgdGhlCisgICAgIHNhbWUgYXMgdGhlIENQVSBzcGVlZCBvciBhbiBpbnRlZ3JhbCBkaXZpc29yIG9mIGl0LgorCisgIGQpIGRlY2lkZSBvbiB3aGV0aGVyIHlvdSB3YW50IHRvIHVzZSBoaWdoLWxldmVsIG9yIGxvdy1sZXZlbCB0aW1lcgorICAgICBpbnRlcnJ1cHQgcm91dGluZXMuICBUaGUgbG93LWxldmVsIG9uZSBpcyBwcmVzdW1hYmx5IGZhc3RlciwgYnV0IHNob3VsZAorICAgICBub3QgbWFrZSB0b28gbWN1aCBkaWZmZXJlbmNlLgorCisKK1N0ZXAgMjogIHRoZSBtYWNoaW5lIHNldHVwKCkgZnVuY3Rpb24KKworICBJZiB5b3Ugc3VwcGx5IGJvYXJkX3RpbWVfaW5pdCgpLCBzZXQgdGhlIGZ1bmN0aW9uIHBvb2ludGVyLgorCisgIFNldCB0aGUgZnVuY3Rpb24gcG9pbnRlciBib2FyZF90aW1lcl9zZXR1cCgpIChtYW5kYXRvcnkpCisKKworU3RlcCAzOiBpbXBsZW1lbnQgcnRjIHJvdXRpbmVzLCBib2FyZF90aW1lX2luaXQoKSBhbmQgYm9hcmRfdGltZXJfc2V0dXAoKQorICBpZiBuZWVkZWQuCisKKyAgYm9hcmRfdGltZV9pbml0KCkgLSAKKyAgCWEpIChvcHRpb25hbCkgc2V0IHVwIFJUQyByb3V0aW5lcywgCisgICAgICAgIGIpIChvcHRpb25hbCkgY2FsaWJyYXRlIGFuZCBzZXQgdGhlIG1pcHNfY291bnRlcl9mcmVxdWVuY3kKKyAJICAgIChvbmx5IG5lZWRlZCBpZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGZpeGVkX3JhdGVfZ2V0dGltZW9mZnNldAorIAkgICAgIG9yIHVzZSBjcHUgY291bnRlciBhcyB0aW1lciBpbnRlcnJ1cHQgc291cmNlKQorCisgIGJvYXJkX3RpbWVyX3NldHVwKCkgLSAKKyAJYSkgKG9wdGlvbmFsKSBvdmVyLXdyaXRlIGFueSBjaG9pY2VzIG1hZGUgYWJvdmUgYnkgdGltZV9pbml0KCkuCisgCWIpIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBzaG91bGQgc2V0dXAgdGhlIHRpbWVyIGlycWFjdGlvbi4KKyAJYykgZW5hYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQKKworCisgIElmIHRoZSBSVEMgY2hpcCBpcyBhIGNvbW1vbiBjaGlwLCBJIHN1Z2dlc3QgdGhlIHJvdXRpbmVzIGFyZSBwdXQgdW5kZXIKKyAgYXJjaC9taXBzL2xpYnMuICBGb3IgZXhhbXBsZSwgZm9yIERTMTM4NiBjaGlwLCBvbmUgd291bGQgY3JlYXRlCisgIHJ0Yy1kczEzODYuYyB1bmRlciBhcmNoL21pcHMvbGliIGRpcmVjdG9yeS4gIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8KKyAgdGhlIGFyY2gvbWlwcy9saWIvTWFrZWZpbGU6CisKKwlvYmotJChDT05GSUdfRERCNTQ3NikgKz0gcnRjLWRzMTM4Ni5vCisKK1N0ZXAgNDogaWYgeW91IGFyZSB1c2luZyBsb3ctbGV2ZWwgdGltZXIgaW50ZXJydXB0LCBjaGFuZ2UgeW91ciBpbnRlcnJ1cHQKKyAgZGlzcGF0aGNpbmcgY29kZSB0byBjaGVjayBmb3IgdGltZXIgaW50ZXJydXB0IGFuZCBqdW1wIHRvIAorICBsbF90aW1lcl9pbnRlcnJ1cHQoKSBkaXJlY3RseSAgaWYgb25lIGlzIGRldGVjdGVkLgorCitTdGVwIDU6IE1vZGlmeSBhcmNoL21pcHMvY29uZmlnLmluIGFuZCBhZGQgQ09ORklHX05FV19USU1FX0MgdG8geW91ciBtYWNoaW5lLgorICBNb2RpZnkgdGhlIGFwcHJvcHJpYXRlIGRlZmNvbmZpZyBpZiBhcHBsaWNhYmxlLgorCitGaW5hbCBub3RlczogCisKK0ZvciBzb21lIHRyaWNreSBjYXNlcywgeW91IG1heSBuZWVkIHRvIGFkZCB5b3VyIG93biB3cmFwcGVyIGZ1bmN0aW9ucyAKK2ZvciBzb21lIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGltZS5jLiAgCisKK0ZvciBleGFtcGxlLCB5b3UgbWF5IGRlZmluZSB5b3VyIG93biB0aW1lciBpbnRlcnJ1cHQgcm91dGluZSwgd2hpY2ggZG9lcworc29tZSBvZiBpdHMgb3duIHByb2Nlc3NpbmcgYW5kIHRoZW4gY2FsbHMgdGltZXJfaW50ZXJydXB0KCkuCisKK1lvdSBjYW4gYWxzbyBvdmVyLXJpZGUgYW55IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgKGdldHRpbWVvZmZzZXQsCitSVEMgcm91dGluZXMgYW5kL29yIHRpbWVyIGludGVycnVwdCByb3V0aW5lKS4KKworCitQT1JUSU5HIE5PVEVTIEZPUiBTTVAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGhhdmUgYSBTTVAgYm94LCB0aGluZ3MgYXJlIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQuCisKK1RoZSB0aW1lIHNlcnZpY2UgcnVubmluZyBldmVyeSBqaWZmeSBpcyBsb2dpY2FsbHkgZGl2aWRlZCBpbnRvIHR3byBwYXJ0czoKKworICAxKSB0aGUgb25lIGZvciB0aGUgd2hvbGUgc3lzdGVtICAoZGVmaW5lZCBpbiB0aW1lcl9pbnRlcnJ1cHQoKSkKKyAgMikgdGhlIG9uZSB0aGF0IHNob3VsZCBydW4gZm9yIGVhY2ggQ1BVIChkZWZpbmVkIGluIGxvY2FsX3RpbWVyX2ludGVycnVwdCgpKQorCitZb3UgbmVlZCB0byBkZWNpZGUgb24geW91ciB0aW1lciBpbnRlcnJ1cHQgc291cmNlcy4KKworICBjYXNlIDEpIC0gd2hvbGUgc3lzdGVtIGhhcyBvbmx5IG9uZSB0aW1lciBpbnRlcnJ1cHQgZGVsaXZlcmVkIHRvIG9uZSBDUFUKKworCUluIHRoaXMgY2FzZSwgeW91IHNldCB1cCB0aW1lciBpbnRlcnJ1cHQgYXMgaW4gVVAgc3lzdGVtcy4gIEluIGFkZHRpb24sCisJeW91IG5lZWQgdG8gc2V0IGVtdWxhdGVfbG9jYWxfdGltZXJfaW50ZXJydXB0IHRvIDEgc28gdGhhdCBvdGhlcgorCUNQVXMgZ2V0IHRvIGNhbGwgbG9jYWxfdGltZXJfaW50ZXJydXB0KCkuCisKKwlUSElTIElTIENVUlJFTlRMWSBOT1QgSU1QTEVNTkVURUQuICBIb3dldmVyLCBpdCBpcyByYXRoZXIgZWFzeSB0byB3cml0ZQorCW9uZSBzaG91bGQgc3VjaCBhIG5lZWQgYXJpc2UuICBZb3Ugc2ltcGx5IG1ha2UgYSBJUEkgY2FsbC4KKworICBjYXNlIDIpIC0gZWFjaCBDUFUgaGFzIGEgc2VwYXJhdGUgdGltZXIgaW50ZXJydXB0CisKKwlJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIHNldCB1cCBJUlEgc3VjaCB0aGF0IGVhY2ggb2YgdGhlbSB3aWxsCisJY2FsbCBsb2NhbF90aW1lcl9pbnRlcnJ1cHQoKS4gIEluIGFkZGl0aW9uLCB5b3UgbmVlZCB0byBhcnJhbmdlCisJb25lIGFuZCBvbmx5IG9uZSBvZiB0aGVtIHRvIGNhbGwgdGltZXJfaW50ZXJydXB0KCkuCisKKwlZb3UgY2FuIGFsc28gZG8gdGhlIGxvdy1sZXZlbCB2ZXJzaW9uIG9mIHRob3NlIGludGVycnVwdCByb3V0aW5lcywKKwlmb2xsb3dpbmcgc2ltaWxhciBkaXNwYXRjaGluZyByb3V0ZXMgZGVzY3JpYmVkIGFib3ZlLgorCitOb3RlIGFib3V0IGRvX2dldHRpbWVvZmZzZXQoKToKKworICBJdCBpcyB2ZXJ5IGxpa2VseSB0aGUgQ1BVIGNvdW50ZXIgcmVnaXN0ZXJzIGFyZSBub3Qgc3luYydlZCB1cCBpbiBhIFNNUCBib3guCisgIFRoZXJlZm9yZSB5b3UgY2Fubm90IHJlYWxseSB1c2UgdGhlIG1hbnkgb2YgdGhlIGV4aXN0aW5nIHJvdXRpbmVzIHRoYXQKKyAgYXJlIGJhc2VkIG9uIENQVSBjb3VudGVyLiAgWW91IHNob3VsZCB3aXJ0ZSB5b3VyIG93biBnZXR0aW1lb2Zmc2V0IHJvdWludGUKKyAgaWYgeW91IHdhbnQgaW50cmEtamlmZnkgcmVzb2x1dGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW9uby50eHQgYi9Eb2N1bWVudGF0aW9uL21vbm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MzlhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21vbm8udHh0CkBAIC0wLDAgKzEsNjYgQEAKKyAgICAgICAgICAgICAgIE1vbm8odG0pIEJpbmFyeSBLZXJuZWwgU3VwcG9ydCBmb3IgTGludXgKKyAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGNvbmZpZ3VyZSBMaW51eCB0byBhdXRvbWF0aWNhbGx5IGV4ZWN1dGUgTW9uby1iYXNlZCAuTkVUIGJpbmFyaWVzCisoaW4gdGhlIGZvcm0gb2YgLmV4ZSBmaWxlcykgd2l0aG91dCB0aGUgbmVlZCB0byB1c2UgdGhlIG1vbm8gQ0xSCit3cmFwcGVyLCB5b3UgY2FuIHVzZSB0aGUgQklORk1UX01JU0Mga2VybmVsIHN1cHBvcnQuCisKK1RoaXMgd2lsbCBhbGxvdyB5b3UgdG8gZXhlY3V0ZSBNb25vLWJhc2VkIC5ORVQgYmluYXJpZXMganVzdCBsaWtlIGFueQorb3RoZXIgcHJvZ3JhbSBhZnRlciB5b3UgaGF2ZSBkb25lIHRoZSBmb2xsb3dpbmc6CisKKzEpIFlvdSBNVVNUIEZJUlNUIGluc3RhbGwgdGhlIE1vbm8gQ0xSIHN1cHBvcnQsIGVpdGhlciBieSBkb3dubG9hZGluZworICAgYSBiaW5hcnkgcGFja2FnZSwgYSBzb3VyY2UgdGFyYmFsbCBvciBieSBpbnN0YWxsaW5nIGZyb20gQ1ZTLiBCaW5hcnkKKyAgIHBhY2thZ2VzIGZvciBzZXZlcmFsIGRpc3RyaWJ1dGlvbnMgY2FuIGJlIGZvdW5kIGF0OgorCisJaHR0cDovL2dvLW1vbm8uY29tL2Rvd25sb2FkLmh0bWwKKworICAgSW5zdHJ1Y3Rpb25zIGZvciBjb21waWxpbmcgTW9ubyBjYW4gYmUgZm91bmQgYXQ6CisKKwlodHRwOi8vd3d3LmdvLW1vbm8uY29tL2NvbXBpbGluZy5odG1sCisKKyAgIE9uY2UgdGhlIE1vbm8gQ0xSIHN1cHBvcnQgaGFzIGJlZW4gaW5zdGFsbGVkLCBqdXN0IGNoZWNrIHRoYXQKKyAgIC91c3IvYmluL21vbm8gKHdoaWNoIGNvdWxkIGJlIGxvY2F0ZWQgZWxzZXdoZXJlLCBmb3IgZXhhbXBsZQorICAgL3Vzci9sb2NhbC9iaW4vbW9ubykgaXMgd29ya2luZy4KKworMikgWW91IGhhdmUgdG8gY29tcGlsZSBCSU5GTVRfTUlTQyBlaXRoZXIgYXMgYSBtb2R1bGUgb3IgaW50bworICAgdGhlIGtlcm5lbCAoQ09ORklHX0JJTkZNVF9NSVNDKSBhbmQgc2V0IGl0IHVwIHByb3Blcmx5LgorICAgSWYgeW91IGNob29zZSB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCB5b3Ugd2lsbCBoYXZlCisgICB0byBpbnNlcnQgaXQgbWFudWFsbHkgd2l0aCBtb2Rwcm9iZS9pbnNtb2QsIGFzIGttb2QKKyAgIGNhbiBub3QgYmUgZWFzaWx5IHN1cHBvcnRlZCB3aXRoIGJpbmZtdF9taXNjLiAKKyAgIFJlYWQgdGhlIGZpbGUgJ2JpbmZtdF9taXNjLnR4dCcgaW4gdGhpcyBkaXJlY3RvcnkgdG8ga25vdworICAgbW9yZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgorCiszKSBBZGQgdGhlIGZvbGxvd2luZyBlbnJpZXMgdG8gL2V0Yy9yYy5sb2NhbCBvciBzaW1pbGFyIHNjcmlwdAorICAgdG8gYmUgcnVuIGF0IHN5c3RlbSBzdGFydHVwOgorCisjIEluc2VydCBCSU5GTVRfTUlTQyBtb2R1bGUgaW50byB0aGUga2VybmVsCitpZiBbICEgLWUgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyIF07IHRoZW4KKyAgICAgICAgL3NiaW4vbW9kcHJvYmUgYmluZm10X21pc2MKKwkjIFNvbWUgZGlzdHJpYnV0aW9ucywgbGlrZSBGZWRvcmEgQ29yZSwgcGVyZm9ybQorCSMgdGhlIGZvbGxvd2luZyBjb21tYW5kIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUKKwkjIGJpbmZtdF9taXNjIG1vZHVsZSBpcyBsb2FkZWQgaW50byB0aGUga2VybmVsLgorCSMgVGh1cywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZm9sbG93aW5nIGxpbmUKKwkjIGlzIG5vdCBuZWVkZWQgYXQgYWxsLiBMb29rIGF0IC9ldGMvbW9kcHJvYmUuY29uZgorCSMgdG8gY2hlY2sgd2hldGhlciB0aGlzIGlzIGFwcGxpY2FibGUgb3Igbm90LgorICAgICAgICBtb3VudCAtdCBiaW5mbXRfbWlzYyBub25lIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYworZmkKKworIyBSZWdpc3RlciBzdXBwb3J0IGZvciAuTkVUIENMUiBiaW5hcmllcworaWYgWyAtZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXIgXTsgdGhlbgorCSMgUmVwbGFjZSAvdXNyL2Jpbi9tb25vIHdpdGggdGhlIGNvcnJlY3QgcGF0aG5hbWUgdG8KKwkjIHRoZSBNb25vIENMUiBydW50aW1lICh1c3VhbGx5IC91c3IvbG9jYWwvYmluL21vbm8KKwkjIHdoZW4gY29tcGlsaW5nIGZyb20gc291cmNlcyBvciBDVlMpLgorICAgICAgICBlY2hvICc6Q0xSOk06Ok1aOjovdXNyL2Jpbi9tb25vOicgPiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXIKK2Vsc2UKKyAgICAgICAgZWNobyAiTm8gYmluZm10X21pc2Mgc3VwcG9ydCIKKyAgICAgICAgZXhpdCAxCitmaQorCis0KSBDaGVjayB0aGF0IC5leGUgYmluYXJpZXMgY2FuIGJlIHJhbiB3aXRob3V0IHRoZSBuZWVkIG9mIGEKKyAgIHdyYXBwZXIgc2NyaXB0LCBzaW1wbHkgYnkgbGF1bmNoaW5nIHRoZSAuZXhlIGZpbGUgZGlyZWN0bHkKKyAgIGZyb20gYSBjb21tYW5kIHByb21wdCwgZm9yIGV4YW1wbGU6CisKKwkvdXNyL2Jpbi94c2QuZXhlCisKKyAgIE5PVEU6IElmIHRoaXMgZmFpbHMgd2l0aCBhIHBlcm1pc3Npb24gZGVuaWVkIGVycm9yLCBjaGVjaworICAgICAgICAgdGhhdCB0aGUgLmV4ZSBmaWxlIGhhcyBleGVjdXRlIHBlcm1pc3Npb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tb3hhLXNtYXJ0aW8gYi9Eb2N1bWVudGF0aW9uL21veGEtc21hcnRpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTI0ZWNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tb3hhLXNtYXJ0aW8KQEAgLTAsMCArMSw0MTEgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlNT1hBIFNtYXJ0aW8gRmFtaWx5IERldmljZSBEcml2ZXIgVmVyIDEuMSBJbnN0YWxsYXRpb24gR3VpZGUKKwkJICAgIGZvciBMaW51eCBLZXJuZWwgMi4yLnggYW5kIDIuMC4zeAorCSAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTksIE1veGEgVGVjaG5vbG9naWVzIENvLCBMdGQuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29udGVudAorCisxLiBJbnRyb2R1Y3Rpb24KKzIuIFN5c3RlbSBSZXF1aXJlbWVudAorMy4gSW5zdGFsbGF0aW9uCis0LiBVdGlsaXRpZXMKKzUuIFNldHNlcmlhbAorNi4gVHJvdWJsZXNob290aW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxLiBJbnRyb2R1Y3Rpb24KKworICAgVGhlIFNtYXJ0aW8gZmFtaWx5IExpbnV4IGRyaXZlciwgVmVyLiAxLjEsIHN1cHBvcnRzIGZvbGxvd2luZyBtdWx0aXBvcnQKKyAgIGJvYXJkcy4KKworICAgIC1DMTA0UC9IL0hTLCBDMTA0SC9QQ0ksIEMxMDRIUy9QQ0ksIENJLTEwNEogNCBwb3J0IG11bHRpcG9ydCBib2FyZC4KKyAgICAtQzE2OFAvSC9IUywgQzE2OEgvUENJIDggcG9ydCBtdWx0aXBvcnQgYm9hcmQuCisKKyAgIFRoaXMgZHJpdmVyIGhhcyBiZWVuIG1vZGlmaWVkIGEgbGl0dGxlIGFuZCBjbGVhbmVkIHVwIGZyb20gdGhlIE1veGEKKyAgIGNvbnRyaWJ1dGVkIGRyaXZlciBjb2RlIGFuZCBtZXJnZWQgaW50byBMaW51eCAyLjIuMTRwcmUuIEluIHBhcnRpY3VsYXIKKyAgIG9mZmljaWFsIG1ham9yL21pbm9yIG51bWJlcnMgaGF2ZSBiZWVuIGFzc2lnbmVkIHdoaWNoIGFyZSBkaWZmZXJlbnQgdG8KKyAgIHRob3NlIHRoZSBvcmlnaW5hbCBNb3hhIHN1cHBsaWVkIGRyaXZlciB1c2VkLgorCisgICBUaGlzIGRyaXZlciBhbmQgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBoYXZlIGJlZW4gZGV2ZWxvcGVkIHVwb24gTGludXggS2VybmVsCisgICAyLjIuNSBhbmQgYmFja3dhcmQgY29tcGF0aWJsZSB0byAyLjAuM3guIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsIHg4NiBhbmQKKyAgIEFscGhhIGhhcmR3YXJlIHBsYXRmb3JtLiBJbiBvcmRlciB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5LCB0aGlzIHZlcnNpb24KKyAgIGhhcyBhbHNvIGJlZW4gcHJvcGVybHkgdGVzdGVkIHdpdGggUmVkSGF0LCBPcGVuTGludXgsIFR1cmJvTGludXggYW5kCisgICBTLnUuUy5FIExpbnV4LiBIb3dldmVyLCBpZiBjb21wYXRpYmlsaXR5IHByb2JsZW0gb2NjdXJzLCBwbGVhc2UgY29udGFjdAorICAgTW94YSBhdCBzdXBwb3J0QG1veGEuY29tLnR3LgorCisgICBJbiBhZGRpdGlvbiB0byBkZXZpY2UgZHJpdmVyLCB1c2VmdWwgdXRpbGl0aWVzIGFyZSBhbHNvIHByb3ZpZGVkIGluIHRoaXMKKyAgIHZlcnNpb24uIFRoZXkgYXJlCisgICAgLSBtc2RpYWcgICAgIERpYWdub3N0aWMgcHJvZ3JhbSBmb3IgZGV0ZWN0aW5nIGluc3RhbGxlZCBNb3hhIFNtYXJ0aW8gYm9hcmRzLgorICAgIC0gbXNtb24gICAgICBNb25pdG9yIHByb2dyYW0gdG8gb2JzZXJ2ZSBkYXRhIGNvdW50IGFuZCBsaW5lIHN0YXR1cyBzaWduYWxzLgorICAgIC0gbXN0ZXJtICAgICBBIHNpbXBsZSB0ZXJtaW5hbCBwcm9ncmFtIHdoaWNoIGlzIHVzZWZ1bCBpbiB0ZXN0aW5nIHNlcmlhbAorCSAgICAgICAgIHBvcnRzLgorICAgIC0gaW8taXJxLmV4ZSBDb25maWd1cmF0aW9uIHByb2dyYW0gdG8gc2V0dXAgSVNBIGJvYXJkcy4gUGxlYXNlIG5vdGUgdGhhdAorICAgICAgICAgICAgICAgICB0aGlzIHByb2dyYW0gY2FuIG9ubHkgYmUgZXhlY3V0ZWQgdW5kZXIgRE9TLgorCisgICBBbGwgdGhlIGRyaXZlcnMgYW5kIHV0aWxpdGllcyBhcmUgcHVibGlzaGVkIGluIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluIHRoaXMgdmVyc2lvbi4gUGxlYXNlIHJlZmVyIHRvIEdOVSBHZW5lcmFsCisgICBQdWJsaWMgTGljZW5zZSBhbm5vdW5jZW1lbnQgaW4gZWFjaCBzb3VyY2UgY29kZSBmaWxlIGZvciBtb3JlIGRldGFpbC4KKworICAgSW4gTW94YSdzIGZ0cCBzaXRlcywgeW91IG1heSBhbHdheXMgZmluZCBsYXRlc3QgZHJpdmVyIGF0CisgICBmdHA6Ly9mdHAubW94YS5jb20gIG9yIGZ0cDovL2Z0cC5tb3hhLmNvbS50dy4KKworICAgVGhpcyB2ZXJzaW9uIG9mIGRyaXZlciBjYW4gYmUgaW5zdGFsbGVkIGFzIExvYWRhYmxlIE1vZHVsZSAoTW9kdWxlIGRyaXZlcikKKyAgIG9yIGJ1aWx0LWluIGludG8ga2VybmVsIChTdGF0aWMgZHJpdmVyKS4gWW91IG1heSByZWZlciB0byBmb2xsb3dpbmcKKyAgIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgZm9yIHN1aXRhYmxlIG9uZS4gQmVmb3JlIHlvdSBpbnN0YWxsIHRoZSBkcml2ZXIsCisgICBwbGVhc2UgcmVmZXIgdG8gaGFyZHdhcmUgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBpbiB0aGUgVXNlcidzIE1hbnVhbC4KKworICAgV2UgYXNzdW1lIHRoZSB1c2VyIHNob3VsZCBiZSBmYW1pbGlhciB3aXRoIGZvbGxvd2luZyBkb2N1bWVudHMuCisgICAtIFNlcmlhbC1IT1dUTworICAgLSBLZXJuZWwtSE9XVE8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIuIFN5c3RlbSBSZXF1aXJlbWVudAorICAgLSBIYXJkd2FyZSBwbGF0Zm9ybTogSW50ZWwgeDg2IG9yIEFscGhhIG1hY2hpbmUKKyAgIC0gS2VybmVsIHZlcnNpb246IDIuMC4zeCBvciAyLjIueAorICAgLSBnY2MgdmVyc2lvbiAyLjcyIG9yIGxhdGVyCisgICAtIE1heGltdW0gNCBib2FyZHMgY2FuIGJlIGluc3RhbGxlZCBpbiBjb21iaW5hdGlvbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMy4gSW5zdGFsbGF0aW9uCisKKyAgIDMuMSBIYXJkd2FyZSBpbnN0YWxsYXRpb24KKworICAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgYnVzZXMsIElTQSBhbmQgUENJLCBmb3IgU21hcnRpbyBmYW1pbHkgbXVsdGlwb3J0CisgICAgICAgYm9hcmQuCisKKyAgICAgICBJU0EgYm9hcmQKKyAgICAgICAtLS0tLS0tLS0KKyAgICAgICBZb3UnbGwgaGF2ZSB0byBjb25maWd1cmUgQ0FQIGFkZHJlc3MsIEkvTyBhZGRyZXNzLCBJbnRlcnJ1cHQgVmVjdG9yCisgICAgICAgYXMgd2VsbCBhcyBJUlEgYmVmb3JlIGluc3RhbGxpbmcgdGhpcyBkcml2ZXIuIFBsZWFzZSByZWZlciB0byBoYXJkd2FyZQorICAgICAgIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgaW4gVXNlcidzIE1hbnVhbCBiZWZvcmUgcHJvY2VlZCBhbnkgZnVydGhlci4KKyAgICAgICBQbGVhc2UgbWFrZSBzdXJlIHRoZSBKUDEgaXMgb3BlbiBhZnRlciB0aGUgSVNBIGJvYXJkIGlzIHNldCBwcm9wZXJseS4KKworICAgICAgIFBDSSBib2FyZAorICAgICAgIC0tLS0tLS0tLQorICAgICAgIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgSVJRIHVzYWdlIGluIEJJT1MgdG8gYXZvaWQgZnJvbSBJUlEgY29uZmxpY3QKKyAgICAgICB3aXRoIG90aGVyIElTQSBkZXZpY2VzLiBQbGVhc2UgcmVmZXIgdG8gaGFyZHdhcmUgaW5zdGFsbGF0aW9uCisgICAgICAgcHJvY2VkdXJlIGluIFVzZXIncyBNYW51YWwgaW4gYWR2YW5jZS4KKworICAgICAgIElSUSBTaGFyaW5nCisgICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICBFYWNoIHBvcnQgd2l0aGluIHRoZSBzYW1lIG11bHRpcG9ydCBib2FyZCBzaGFyZXMgdGhlIHNhbWUgSVJRLiBVcCB0bworICAgICAgIDQgTW94YSBTbWFydGlvIEZhbWlseSBtdWx0aXBvcnQgYm9hcmRzIGNhbiBiZSBpbnN0YWxsZWQgdG9nZXRoZXIgb24KKyAgICAgICBvbmUgc3lzdGVtIGFuZCB0aGV5IGNhbiBzaGFyZSB0aGUgc2FtZSBJUlEuCisKKyAgIDMuMiBEcml2ZXIgZmlsZXMgYW5kIGRldmljZSBuYW1pbmcgY29udmVudGlvbgorCisgICAgICAgVGhlIGRyaXZlciBmaWxlIG1heSBiZSBvYnRhaW5lZCBmcm9tIGZ0cCwgQ0QtUk9NIG9yIGZsb3BweSBkaXNrLiBUaGUKKyAgICAgICBmaXJzdCBzdGVwLCBhbnl3YXksIGlzIHRvIGNvcHkgZHJpdmVyIGZpbGUgIm14c2VyLnRneiIgaW50byBzcGVjaWZpZWQKKyAgICAgICBkaXJlY3RvcnkuIGUuZy4gL21veGEuIFRoZSBleGVjdXRlIGNvbW1hbmRzIGFzIGJlbG93LgorCisgICAgICAgIyBjZCAvbW94YQorICAgICAgICMgdGFyIHh2ZiAvZGV2L2ZkMCAKKyAgICAgICBvcgorICAgICAgICMgY2QgL21veGEKKyAgICAgICAjIGNwIC9tbnQvY2Ryb20vPGRyaXZlciBkaXJlY3Rvcnk+L214c2VyLnRneiAuCisgICAgICAgIyB0YXIgeHZmeiBteHNlci50Z3oKKworICAgICAgIFlvdSBtYXkgZmluZCBhbGwgdGhlIGRyaXZlciBhbmQgdXRpbGl0aWVzIGZpbGVzIGluIC9tb3hhL214c2VyLgorICAgICAgIEZvbGxvd2luZyBpbnN0YWxsYXRpb24gcHJvY2VkdXJlIGRlcGVuZHMgb24gdGhlIG1vZGVsIHlvdSdkIGxpa2UgdG8KKyAgICAgICBydW4gdGhlIGRyaXZlci4gSWYgeW91IHByZWZlciBtb2R1bGUgZHJpdmVyLCBwbGVhc2UgcmVmZXIgdG8gMy4zLgorICAgICAgIElmIHN0YXRpYyBkcml2ZXIgaXMgcmVxdWlyZWQsIHBsZWFzZSByZWZlciB0byAzLjQuCisKKyAgICAgICBEaWFsaW4gYW5kIGNhbGxvdXQgcG9ydAorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgVGhpcyBkcml2ZXIgcmVtYWlucyB0cmFkaXRpb25hbCBzZXJpYWwgZGV2aWNlIHByb3BlcnRpZXMuIFRoZXJlJ3JlCisgICAgICAgdHdvIHNwZWNpYWwgZmlsZSBuYW1lIGZvciBlYWNoIHNlcmlhbCBwb3J0LiBPbmUgaXMgZGlhbC1pbiBwb3J0CisgICAgICAgd2hpY2ggaXMgbmFtZWQgInR0eU14eCIuIEZvciBjYWxsb3V0IHBvcnQsIHRoZSBuYW1pbmcgY29udmVudGlvbgorICAgICAgIGlzICJjdW14eCIuCisKKyAgICAgICBEZXZpY2UgbmFtaW5nIHdoZW4gbW9yZSB0aGFuIDIgYm9hcmRzIGluc3RhbGxlZAorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgTmFtaW5nIGNvbnZlbnRpb24gZm9yIGVhY2ggU21hcnRpbyBtdWx0aXBvcnQgYm9hcmQgaXMgcHJlLWRlZmluZWQKKyAgICAgICBhcyBiZWxvdy4KKworICAgICAgIEJvYXJkIE51bS4JIERpYWwtaW4gUG9ydAkgICAgICBDYWxsb3V0IHBvcnQKKyAgICAgICAxc3QgYm9hcmQJdHR5TTAgIC0gdHR5TTcJICAgICAgY3VtMCAgLSBjdW03CisgICAgICAgMm5kIGJvYXJkCXR0eU04ICAtIHR0eU0xNSAgICAgICBjdW04ICAtIGN1bTE1CisgICAgICAgM3JkIGJvYXJkCXR0eU0xNiAtIHR0eU0yMyAgICAgICBjdW0xNiAtIGN1bTIzCisgICAgICAgNHRoIGJvYXJkCXR0eU0yNCAtIHR0eW0zMSAgICAgICBjdW0yNCAtIGN1bTMxCisKKyAgICAgICBCb2FyZCBzZXF1ZW5jZQorICAgICAgIC0tLS0tLS0tLS0tLS0tCisgICAgICAgVGhpcyBkcml2ZXIgd2lsbCBhY3RpdmF0ZSBJU0EgYm9hcmRzIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVyIHNldAorICAgICAgIGluIHRoZSBkcml2ZXIuIEFmdGVyIGFsbCBzcGVjaWZpZWQgSVNBIGJvYXJkIGFjdGl2YXRlZCwgUENJIGJvYXJkCisgICAgICAgd2lsbCBiZSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRyaXZlbi4KKyAgICAgICBUaGVyZWZvcmUgdGhlIGJvYXJkIG51bWJlciBpcyBzb3J0ZWQgYnkgdGhlIENBUCBhZGRyZXNzIG9mIElTQSBib2FyZHMuCisgICAgICAgRm9yIFBDSSBib2FyZHMsIHRoZWlyIHNlcXVlbmNlIHdpbGwgYmUgYWZ0ZXIgSVNBIGJvYXJkcyBhbmQgQzE2OEgvUENJCisgICAgICAgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIEMxMDRIL1BDSSBib2FyZHMuCisKKyAgIDMuMyBNb2R1bGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICBNb2R1bGUgZHJpdmVyIGlzIGVhc2llc3Qgd2F5IHRvIGluc3RhbGwuIElmIHlvdSBwcmVmZXIgc3RhdGljIGRyaXZlcgorICAgICAgIGluc3RhbGxhdGlvbiwgcGxlYXNlIHNraXAgdGhpcyBwYXJhZ3JhcGguCisgICAgICAgMS4gRmluZCAiTWFrZWZpbGUiIGluIC9tb3hhL214c2VyLCB0aGVuIHJ1bgorCisJICAjIG1ha2UgaW5zdGFsbAorCisJICBUaGUgZHJpdmVyIGZpbGVzICJteHNlci5vIiBhbmQgdXRpbGl0aWVzIHdpbGwgYmUgcHJvcGVybHkgY29tcGlsZWQKKwkgIGFuZCBjb3BpZWQgdG8gc3lzdGVtIGRpcmVjdG9yaWVzIHJlc3BlY3RpdmVseS5UaGVuIHJ1bgorCisJICAjIGluc21vZCBteHNlcgorCisJICB0byBhY3RpdmF0ZSB0aGUgbW9kdWxhciBkcml2ZXIuIFlvdSBtYXkgcnVuICJsc21vZCIgdG8gY2hlY2sKKwkgIGlmICJteHNlci5vIiBpcyBhY3RpdmF0ZWQuCisKKyAgICAgICAyLiBDcmVhdGUgc3BlY2lhbCBmaWxlcyBieSBleGVjdXRpbmcgIm1zbWtub2QiLgorCSAgIyBjZCAvbW94YS9teHNlci9kcml2ZXIKKwkgICMgLi9tc21rbm9kCisKKwkgIERlZmF1bHQgbWFqb3IgbnVtYmVycyBmb3IgZGlhbC1pbiBkZXZpY2UgYW5kIGNhbGxvdXQgZGV2aWNlIGFyZQorCSAgMTc0LCAxNzUuIE1zbWtub2Qgd2lsbCBkZWxldGUgYW55IHNwZWNpYWwgZmlsZXMgb2NjdXB5aW5nIHRoZSBzYW1lCisJICBkZXZpY2UgbmFtaW5nLgorCisgICAgICAgMy4gVXAgdG8gbm93LCB5b3UgbWF5IG1hbnVhbGx5IGV4ZWN1dGUgImluc21vZCBteHNlciIgdG8gYWN0aXZhdGUKKwkgIHRoaXMgZHJpdmVyIGFuZCBydW4gInJtbW9kIG14c2VyIiB0byByZW1vdmUgaXQuIEhvd2V2ZXIsIGl0J3MKKwkgIGJldHRlciB0byBoYXZlIGEgYm9vdCB0aW1lIGNvbmZpZ3VyYXRpb24gdG8gZWxpbWluYXRlIG1hbnVhbAorCSAgb3BlcmF0aW9uLgorCSAgQm9vdCB0aW1lIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGFjaGlldmVkIGJ5IHJjIGZpbGUuIFJ1biBmb2xsb3dpbmcKKwkgIGNvbW1hbmQgZm9yIHNldHRpbmcgcmMgZmlsZXMuCisKKwkgICMgY2QgL21veGEvbXhzZXIvZHJpdmVyCisJICAjIGNwIC4vcmMubXhzZXIgL2V0Yy9yYy5kCisJICAjIGNkIC9ldGMvcmMuZAorCisJICBZb3UgbWF5IGhhdmUgdG8gbW9kaWZ5IHBhcnQgb2YgdGhlIGNvbnRlbnQgaW4gcmMubXhzZXIgdG8gc3BlY2lmeQorICAgICAgICAgIHBhcmFtZXRlcnMgZm9yIElTQSBib2FyZC4gUGxlYXNlIHJlZmVyIHRvIHJjLm14c2VyIGZvciBtb3JlIGRldGFpbC4KKyAgICAgICAgICBGaW5kICJyYy5zZXJpYWwiLiBJZiAicmMuc2VyaWFsIiBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQgYnkgdmkuCisJICBBZGQgInJjLm14c2VyIiBpbiBsYXN0IGxpbmUuIE5leHQsIG9wZW4gcmMubG9jYWwgYnkgdmkKKwkgIGFuZCBhcHBlbmQgZm9sbG93aW5nIGNvbnRlbnQuCisKKwkgIGlmIFsgLWYgL2V0Yy9yYy5kL3JjLnNlcmlhbCBdOyB0aGVuCisJICAgICBzaCAvZXRjL3JjLmQvcmMuc2VyaWFsCisJICBmaQorCisgICAgICAgNC4gUmVib290IGFuZCBjaGVjayBpZiBteHNlci5vIGFjdGl2YXRlZCBieSAibHNtb2QiIGNvbW1hbmQuCisgICAgICAgNS4gSWYgeW91J2QgbGlrZSB0byBkcml2ZSBTbWFydGlvIElTQSBib2FyZHMgaW4gdGhlIHN5c3RlbSwgeW91J2xsCisJICBoYXZlIHRvIGFkZCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBDQVAgYWRkcmVzcyBvZiBnaXZlbiBib2FyZCB3aGlsZQorICAgICAgICAgIGFjdGl2YXRpbmcgIm14c2VyLm8iLiBUaGUgZm9ybWF0IGZvciBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzLgorCisJICBpbnNtb2QgbXhzZXIgaW9hZGRyPTB4Pz8/LDB4Pz8/LDB4Pz8/LDB4Pz8/CisJCQkJfCAgICAgIHwgICAgIHwJICB8CisJCQkJfCAgICAgIHwgICAgIHwJICArLSA0dGggSVNBIGJvYXJkCisJCQkJfCAgICAgIHwgICAgICstLS0tLS0gM3JkIElTQSBib2FyZAorCQkJCXwgICAgICArLS0tLS0tLS0tLS0tIDJuZCBJU0EgYm9hcmQKKwkJCQkrLS0tLS0tLS0tLS0tLS0tLS0tLSAxc3QgSVNBIGJvYXJkCisKKyAgIDMuNCBTdGF0aWMgZHJpdmVyIGNvbmZpZ3VyYXRpb24KKworICAgICAgIDEuIENyZWF0ZSBsaW5rCisJICAjIGNkIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvY2hhcgorCSAgIyBsbiAtcyAvbW94YS9teHNlci9kcml2ZXIvbXhzZXIuYyBteHNlci5jCisKKyAgICAgICAyLiBBZGQgQ0FQIGFkZHJlc3MgbGlzdCBmb3IgSVNBIGJvYXJkcworCSAgSW4gbW9kdWxlIG1vZGUsIHRoZSBDQVAgYWRkcmVzcyBmb3IgSVNBIGJvYXJkIGlzIGdpdmVuIGJ5CisJICBwYXJhbWV0ZXIuIEluIHN0YXRpYyBkcml2ZXIgY29uZmlndXJhdGlvbiwgeW91J2xsIGhhdmUgdG8KKwkgIGFzc2lnbiBpdCB3aXRoaW4gZHJpdmVyJ3Mgc291cmNlIGNvZGUuIElmIHlvdSB3aWxsIG5vdAorCSAgaW5zdGFsbCBhbnkgSVNBIGJvYXJkcywgeW91IG1heSBza2lwIHRvIG5leHQgcG9ydGlvbi4KKwkgIFRoZSBpbnN0cnVjdGlvbnMgdG8gbW9kaWZ5IGRyaXZlciBzb3VyY2UgY29kZSBhcmUgYXMKKwkgIGJlbG93LgorCSAgYS4gIyBjZCAvbW94YS9teHNlci9kcml2ZXIKKwkgICAgICMgdmkgbXhzZXIuYworCSAgYi4gRmluZCB0aGUgYXJyYXkgbXhzZXJCb2FyZENBUFtdIGFzIGJlbG93LgorCisJICAgICBzdGF0aWMgaW50IG14c2VyQm9hcmRDQVBbXQorCSAgICAgPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisKKwkgIGMuIENoYW5nZSB0aGUgYWRkcmVzcyB3aXRoaW4gdGhpcyBhcnJheSB1c2luZyB2aS4gRm9yCisJICAgICBleGFtcGxlLCB0byBkcml2ZXIgMiBJU0EgYm9hcmRzIHdpdGggQ0FQIGFkZHJlc3MKKwkgICAgIDB4MjgwIGFuZCAweDE4MCBhcyAxc3QgYW5kIDJuZCBib2FyZC4gSnVzdCB0byBjaGFuZ2UKKwkgICAgIHRoZSBzb3VyY2UgY29kZSBhcyBmb2xsb3dzLgorCisJICAgICBzdGF0aWMgaW50IG14c2VyQm9hcmRDQVBbXQorCSAgICAgPSB7MHgyODAsIDB4MTgwLCAweDAwLCAweDAwfTsKKworICAgICAgIDMuIE1vZGlmeSB0dHlfaW8uYworCSAgIyBjZCAvdXNyL3NyYy9saW51eC9kcml2ZXJzL2NoYXIvCisJICAjIHZpIHR0eV9pby5jCisJICAgIEZpbmQgcHR5X2luaXQoKSwgaW5zZXJ0ICJteHNlcl9pbml0KCkiIGFzCisKKwkgICAgcHR5X2luaXQoKTsKKwkgICAgbXhzZXJfaW5pdCgpOworCisgICAgICAgNC4gTW9kaWZ5IHR0eS5oCisJICAjIGNkIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgKKwkgICMgdmkgdHR5LmgKKwkgICAgRmluZCBleHRlcm4gaW50IHR0eV9pbml0KHZvaWQpLCBpbnNlcnQgIm14c2VyX2luaXQoKSIgYXMKKworCSAgICBleHRlcm4gaW50IHR0eV9pbml0KHZvaWQpOworCSAgICBleHRlcm4gaW50IG14c2VyX2luaXQodm9pZCk7CisgICAgIAorICAgICAgIDUuIE1vZGlmeSBNYWtlZmlsZQorCSAgIyBjZCAvdXNyL3NyYy9saW51eC9kcml2ZXJzL2NoYXIKKwkgICMgdmkgTWFrZWZpbGUKKwkgICAgRmluZCBMX09CSlMgOj0gdHR5X2lvLm8gLi4uLi4uIHJhbmRvbS5vLCBhZGQKKwkgICAgIm14c2VyLm8iIGF0IGxhc3Qgb2YgdGhpcyBsaW5lIGFzCisJICAgIExfT0JKUyA6PSB0dHlfaW8ubyAuLi4uLi4uIG14c2VyLm8KKworICAgICAgIDYuIFJlYnVpbGQga2VybmVsCisJICBUaGUgZm9sbG93aW5nIGFyZSBmb3IgTGludXgga2VybmVsIHJlYnVpbGRpbmcsZm9yIHlvdXIgcmVmZXJlbmNlIG9ubHkuCisJICBGb3IgYXBwcm9wcmlhdGUgZGV0YWlscywgcGxlYXNlIHJlZmVyIHRvIHRoZSBMaW51eCBkb2N1bWVudC4KKworCSAgSWYgJ2xpbG8nIHV0aWxpdHkgaXMgaW5zdGFsbGVkLCBwbGVhc2UgdXNlICdtYWtlIHpsaWxvJyB0byByZWJ1aWxkCisJICBrZXJuZWwuIElmICdsaWxvJyBpcyBub3QgaW5zdGFsbGVkLCBwbGVhc2UgZm9sbG93IHRoZSBmb2xsb3dpbmcgc3RlcHMuCisKKwkgICBhLiBjZCAvdXNyL3NyYy9saW51eAorCSAgIGIuIG1ha2UgY2xlYW4JCQkgICAgIC8qIHRha2UgYSBmZXcgbWludXRlcyAqLworCSAgIGMuIG1ha2UgYnpJbWFnZQkJICAgLyogdGFrZSBwcm9iYWJseSAxMC0yMCBtaW51dGVzICovCisJICAgZC4gQmFja3VwIG9yaWdpbmFsIGJvb3Qga2VybmVsLgkJICAvKiBvcHRpb25hbCBzdGVwICovCisJICAgZS4gY3AgL3Vzci9zcmMvbGludXgvYXJjaC9pMzg2L2Jvb3QvYnpJbWFnZSAvYm9vdC92bWxpbnV6CisJICAgZi4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgYm9vdCBrZXJuZWwgKHZtbGludXopIGlzIGluIHRoZQorCSAgICAgIGNvcnJlY3QgcG9zaXRpb24uIElmIHlvdSB1c2UgJ2xpbG8nIHV0aWxpdHksIHlvdSBzaG91bGQKKwkgICAgICBjaGVjayAvZXRjL2xpbG8uY29uZiAnaW1hZ2UnIGl0ZW0gc3BlY2lmaWVkIHRoZSBwYXRoCisJICAgICAgd2hpY2ggaXMgdGhlICd2bWxpbnV6JyBwYXRoLCBvciB5b3Ugd2lsbCBsb2FkIHdyb25nCisJICAgICAgKG9yIG9sZCkgYm9vdCBrZXJuZWwgaW1hZ2UgKHZtbGludXopLgorCSAgIGcuIGNobW9kIDQwMCAvdm1saW51egorCSAgIGguIGxpbG8KKwkgICBpLiByZGV2IC1SIC92bWxpbnV6IDEKKwkgICBqLiBzeW5jCisKKwkgIE5vdGUgdGhhdCBpZiB0aGUgcmVzdWx0IG9mICJtYWtlIHpJbWFnZSIgaXMgRVJST1IsIHRoZW4geW91IGhhdmUgdG8KKwkgIGdvIGJhY2sgdG8gTGludXggY29uZmlndXJhdGlvbiBTZXR1cC4gVHlwZSAibWFrZSBjb25maWciIGluIGRpcmVjdG9yeQorCSAgL3Vzci9zcmMvbGludXggb3IgInNldHVwIi4KKworCSAgU2luY2Ugc3lzdGVtIGluY2x1ZGUgZmlsZSwgL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCwKKwkgIGlzIG1vZGlmaWVkIGVhY2ggdGltZSB0aGUgTU9YQSBkcml2ZXIgaXMgaW5zdGFsbGVkLCBrZXJuZWwgcmVidWlsZGluZworCSAgaXMgaW5ldml0YWJsZS4gQW5kIGl0IHRha2VzIGFib3V0IDEwIHRvIDIwIG1pbnV0ZXMgZGVwZW5kcyBvbiB0aGUKKwkgIG1hY2hpbmUuCisKKyAgICAgICA3LiBNYWtlIHV0aWxpdHkKKwkgICMgY2QgL21veGEvbXhzZXIvdXRpbGl0eQorCSAgIyBtYWtlIGluc3RhbGwKKyAgICAgICAKKyAgICAgICA4LiBNYWtlIHNwZWNpYWwgZmlsZQorICAgICAgICAgICMgY2QgL21veGEvbXhzZXIvZHJpdmVyCisgICAgICAgICAgIyAuL21zbWtub2QKKworICAgICAgIDkuIFJlYm9vdAorCisgICAzLjUgQ3VzdG9tIGNvbmZpZ3VyYXRpb24KKyAgICAgICBBbHRob3VnaCB0aGlzIGRyaXZlciBhbHJlYWR5IHByb3ZpZGVzIHlvdSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHlvdQorICAgICAgIHN0aWxsIGNhbiBjaGFuZ2UgdGhlIGRldmljZSBuYW1lIGFuZCBtYWpvciBudW1iZXIuVGhlIGluc3RydWN0aW9uIHRvCisgICAgICAgY2hhbmdlIHRoZXNlIHBhcmFtZXRlcnMgYXJlIHNob3duIGFzIGJlbG93LgorCisgICAgICAgQ2hhbmdlIERldmljZSBuYW1lCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgSWYgeW91J2QgbGlrZSB0byB1c2Ugb3RoZXIgZGV2aWNlIG5hbWVzIGluc3RlYWQgb2YgZGVmYXVsdCBuYW1pbmcKKyAgICAgICBjb252ZW50aW9uLCBhbGwgeW91IGhhdmUgdG8gZG8gaXMgdG8gbW9kaWZ5IHRoZSBpbnRlcm5hbCBjb2RlCisgICAgICAgd2l0aGluIHRoZSBzaGVsbCBzY3JpcHQgIm1zbWtub2QiLiBGaXJzdCwgeW91IGhhdmUgdG8gb3BlbiAibXNta25vZCIKKyAgICAgICBieSB2aS4gTG9jYXRlIGVhY2ggbGluZSBjb250YWlucyAidHR5TSIgYW5kICJjdW0iIGFuZCBjaGFuZ2UgdGhlbQorICAgICAgIHRvIHRoZSBkZXZpY2UgbmFtZSB5b3UgZGVzaXJlZC4gIm1zbWtub2QiIGNyZWF0ZXMgdGhlIGRldmljZSBuYW1lcworICAgICAgIHlvdSBuZWVkIG5leHQgdGltZSBleGVjdXRlZC4KKworICAgICAgIENoYW5nZSBNYWpvciBudW1iZXIKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgSWYgbWFqb3IgbnVtYmVyIDMwIGFuZCAzNSBoYWQgYmVlbiBvY2N1cGllZCwgeW91IG1heSBoYXZlIHRvIHNlbGVjdAorICAgICAgIDIgZnJlZSBtYWpvciBudW1iZXJzIGZvciB0aGlzIGRyaXZlci4gVGhlcmUgYXJlIDMgc3RlcHMgdG8gY2hhbmdlCisgICAgICAgbWFqb3IgbnVtYmVycy4KKworICAgICAgIDEuIEZpbmQgZnJlZSBtYWpvciBudW1iZXJzCisJICBJbiAvcHJvYy9kZXZpY2VzLCB5b3UgbWF5IGZpbmQgYWxsIHRoZSBtYWpvciBudW1iZXJzIG9jY3VwaWVkCisJICBpbiB0aGUgc3lzdGVtLiBQbGVhc2Ugc2VsZWN0IDIgbWFqb3IgbnVtYmVycyB0aGF0IGFyZSBhdmFpbGFibGUuCisJICBlLmcuIDQwLCA0NS4KKyAgICAgICAyLiBDcmVhdGUgc3BlY2lhbCBmaWxlcworCSAgUnVuIC9tb3hhL214c2VyL2RyaXZlci9tc21rbm9kIHRvIGNyZWF0ZSBzcGVjaWFsIGZpbGVzIHdpdGgKKwkgIHNwZWNpZmllZCBtYWpvciBudW1iZXJzLgorICAgICAgIDMuIE1vZGlmeSBkcml2ZXIgd2l0aCBuZXcgbWFqb3IgbnVtYmVyCisJICBSdW4gdmkgdG8gb3BlbiAvbW94YS9teHNlci9kcml2ZXIvbXhzZXIuYy4gTG9jYXRlIHRoZSBsaW5lCisJICBjb250YWlucyAiTVhTRVJNQUpPUiIuIENoYW5nZSB0aGUgY29udGVudCBhcyBiZWxvdy4KKwkgICNkZWZpbmUJICBNWFNFUk1BSk9SCQkgIDQwCisJICAjZGVmaW5lCSAgTVhTRVJDVU1BSk9SCQkgIDQ1CisgICAgICAgNC4gUnVuICMgbWFrZSBpbnN0YWxsIGluIC9tb3hhL214c2VyL2RyaXZlci4KKworICAgMy42IFZlcmlmeSBkcml2ZXIgaW5zdGFsbGF0aW9uCisgICAgICAgWW91IG1heSByZWZlciB0byAvdmFyL2xvZy9tZXNzYWdlcyB0byBjaGVjayB0aGUgbGF0ZXN0IHN0YXR1cworICAgICAgIGxvZyByZXBvcnRlZCBieSB0aGlzIGRyaXZlciB3aGVuZXZlciBpdCdzIGFjdGl2YXRlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis0LiBVdGlsaXRpZXMKKyAgIFRoZXJlIGFyZSAzIHV0aWxpdGllcyBjb250YWluZWQgaW4gdGhpcyBkcml2ZXIuIFRoZXkgYXJlIG1zZGlhZywgbXNtb24gYW5kCisgICBtc3Rlcm0uIFRoZXNlIDMgdXRpbGl0aWVzIGFyZSByZWxlYXNlZCBpbiBmb3JtIG9mIHNvdXJjZSBjb2RlLiBUaGV5IHNob3VsZAorICAgYmUgY29tcGlsZWQgaW50byBleGVjdXRhYmxlIGZpbGUgYW5kIGNvcGllZCBpbnRvIC91c3IvYmluLgorCisgICBtc2RpYWcgLSBEaWFnbm9zdGljCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhpcyB1dGlsaXR5IHByb3ZpZGVzIHRoZSBmdW5jdGlvbiB0byBkZXRlY3Qgd2hhdCBNb3hhIFNtYXJ0aW8gbXVsdGlwb3J0CisgICBib2FyZCBleGlzdHMgaW4gdGhlIHN5c3RlbS4KKworICAgbXNtb24gLSBQb3J0IE1vbml0b3JpbmcKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGlzIHV0aWxpdHkgZ2l2ZXMgdGhlIHVzZXIgYSBxdWljayB2aWV3IGFib3V0IGFsbCB0aGUgTU9YQSBwb3J0cycKKyAgIGFjdGl2aXRpZXMuIE9uZSBjYW4gZWFzaWx5IGxlYXJuIGVhY2ggcG9ydCdzIHRvdGFsIHJlY2VpdmVkL3RyYW5zbWl0dGVkCisgICAoUngvVHgpIGNoYXJhY3RlciBjb3VudCBzaW5jZSB0aGUgdGltZSB3aGVuIHRoZSBtb25pdG9yaW5nIGlzIHN0YXJ0ZWQuCisgICBSeC9UeCB0aHJvdWdocHV0cyBwZXIgc2Vjb25kIGFyZSBhbHNvIHJlcG9ydGVkIGluIGludGVydmFsIGJhc2lzIChlLmcuCisgICB0aGUgbGFzdCA1IHNlY29uZHMpIGFuZCBpbiBhdmVyYWdlIGJhc2lzIChzaW5jZSB0aGUgdGltZSB0aGUgbW9uaXRvcmluZworICAgaXMgc3RhcnRlZCkuIFlvdSBjYW4gcmVzZXQgYWxsIHBvcnRzJyBjb3VudCBieSA8SE9NRT4ga2V5LiA8Kz4gPC0+CisgICAocGx1cy9taW51cykga2V5cyB0byBjaGFuZ2UgdGhlIGRpc3BsYXlpbmcgdGltZSBpbnRlcnZhbC4gUHJlc3MgPEVOVEVSPgorICAgb24gdGhlIHBvcnQsIHRoYXQgY3Vyc29yIHN0YXksIHRvIHZpZXcgdGhlIHBvcnQncyBjb21tdW5pY2F0aW9uCisgICBwYXJhbWV0ZXJzLCBzaWduYWwgc3RhdHVzLCBhbmQgaW5wdXQvb3V0cHV0IHF1ZXVlLgorCisgICBtc3Rlcm0gLSBUZXJtaW5hbCBFbXVsYXRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhpcyB1dGlsaXR5IHByb3ZpZGVzIGRhdGEgc2VuZGluZyBhbmQgcmVjZWl2aW5nIGFiaWxpdHkgb2YgYWxsIHR0eSBwb3J0cywKKyAgIGVzcGVjaWFsbHkgZm9yIE1PWEEgcG9ydHMuIEl0IGlzIHF1aXRlIHVzZWZ1bCBmb3IgdGVzdGluZyBzaW1wbGUKKyAgIGFwcGxpY2F0aW9uLCBmb3IgZXhhbXBsZSwgc2VuZGluZyBBVCBjb21tYW5kIHRvIGEgbW9kZW0gY29ubmVjdGVkIHRvIHRoZQorICAgcG9ydCBvciB1c2VkIGFzIGEgdGVybWluYWwgZm9yIGxvZ2luIHB1cnBvc2UuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgYQorICAgZHVtYiB0ZXJtaW5hbCBlbXVsYXRpb24gd2l0aG91dCBoYW5kbGluZyBmdWxsIHNjcmVlbiBvcGVyYXRpb24uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNS4gU2V0c2VyaWFsCisKKyAgIFN1cHBvcnRlZCBTZXRzZXJpYWwgcGFyYW1ldGVycyBhcmUgbGlzdGVkIGFzIGJlbG93LgorCisgICB1YXJ0IAkgIHNldCBVQVJUIHR5cGUoMTY0NTAtLT5kaXNhYmxlIEZJRk8sIDE2NTUwQS0tPmVuYWJsZSBGSUZPKQorICAgY2xvc2VfZGVsYXkJICBzZXQgdGhlIGFtb3VudCBvZiB0aW1lKGluIDEvMTAwIG9mIGEgc2Vjb25kKSB0aGF0IERUUgorCQkgIHNob3VsZCBiZSBrZXB0IGxvdyB3aGlsZSBiZWluZyBjbG9zZWQuCisgICBjbG9zaW5nX3dhaXQgICBzZXQgdGhlIGFtb3VudCBvZiB0aW1lKGluIDEvMTAwIG9mIGEgc2Vjb25kKSB0aGF0IHRoZQorCQkgIHNlcmlhbCBwb3J0IHNob3VsZCB3YWl0IGZvciBkYXRhIHRvIGJlIGRyYWluZWQgd2hpbGUKKwkJICBiZWluZyBjbG9zZWQsIGJlZm9yZSB0aGUgcmVjZWl2ZXIgaXMgZGlzYWJsZS4KKyAgIHNwZF9oaQkgIFVzZSAgNTcuNmtiICB3aGVuICB0aGUgYXBwbGljYXRpb24gcmVxdWVzdHMgMzguNGtiLgorICAgc3BkX3ZoaQkgIFVzZSAgMTE1LjJrYgl3aGVuICB0aGUgYXBwbGljYXRpb24gcmVxdWVzdHMgMzguNGtiLgorICAgc3BkX25vcm1hbAkgIFVzZSAgMzguNGtiICB3aGVuICB0aGUgYXBwbGljYXRpb24gcmVxdWVzdHMgMzguNGtiLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNi4gVHJvdWJsZXNob290aW5nCisKKyAgIFRoZSBib290IHRpbWUgZXJyb3IgbWVzc2FnZXMgYW5kIHNvbHV0aW9ucyBhcmUgc3RhdGVkIGFzIGNsZWFybHkgYXMKKyAgIHBvc3NpYmxlLiBJZiBhbGwgdGhlIHBvc3NpYmxlIHNvbHV0aW9ucyBmYWlsLCBwbGVhc2UgY29udGFjdCBvdXIgdGVjaG5pY2FsCisgICBzdXBwb3J0IHRlYW0gdG8gZ2V0IG1vcmUgaGVscC4KKworICAgRXJyb3IgbXNnOiBNb3JlIHRoYW4gNCBNb3hhIFNtYXJ0aW8gZmFtaWx5IGJvYXJkcyBmb3VuZC4gRmlmdGggYm9hcmQgYW5kCisJICAgICAgYWZ0ZXIgYXJlIGlnbm9yZWQuCisgICBTb2x1dGlvbjoKKyAgIFRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgcGxlYXNlIHVucGx1ZyBmaWZ0aCBhbmQgYWZ0ZXIgYm9hcmQsIGJlY2F1c2UgTW94YQorICAgZHJpdmVyIHN1cHBvcnRzIHVwIHRvIDQgYm9hcmRzLgorCisgICBFcnJvciBtc2c6IFJlcXVlc3RfaXJxIGZhaWwsIElSUSg/KSBtYXkgYmUgY29uZmxpY3Qgd2l0aCBhbm90aGVyIGRldmljZS4KKyAgIFNvbHV0aW9uOgorICAgT3RoZXIgUENJIG9yIElTQSBkZXZpY2VzIG9jY3VweSB0aGUgYXNzaWduZWQgSVJRLiBJZiB5b3UgYXJlIG5vdCBzdXJlCisgICB3aGljaCBkZXZpY2UgY2F1c2VzIHRoZSBzaXR1YXRpb24scGxlYXNlIGNoZWNrIC9wcm9jL2ludGVycnVwdHMgdG8gZmluZAorICAgZnJlZSBJUlEgYW5kIHNpbXBseSBjaGFuZ2UgYW5vdGhlciBmcmVlIElSUSBmb3IgTW94YSBib2FyZC4KKworICAgRXJyb3IgbXNnOiBCb2FyZCAjOiBDMXh4IFNlcmllcyhDQVA9eHh4KSBpbnRlcnJ1cHQgbnVtYmVyIGludmFsaWQuCisgICBTb2x1dGlvbjoKKyAgIEVhY2ggcG9ydCB3aXRoaW4gdGhlIHNhbWUgbXVsdGlwb3J0IGJvYXJkIHNoYXJlcyB0aGUgc2FtZSBJUlEuIFBsZWFzZSBzZXQKKyAgIG9uZSBJUlEgKElSUSBkb2Vzbid0IGVxdWFsIHRvIHplcm8pIGZvciBvbmUgTW94YSBib2FyZC4KKworICAgRXJyb3IgbXNnOiBObyBpbnRlcnJ1cHQgdmVjdG9yIGJlIHNldCBmb3IgTW94YSBJU0EgYm9hcmQoQ0FQPXh4eCkuCisgICBTb2x1dGlvbjoKKyAgIE1veGEgSVNBIGJvYXJkIG5lZWRzIGFuIGludGVycnVwdCB2ZWN0b3IuUGxlYXNlIHJlZmVyIHRvIHVzZXIncyBtYW51YWwKKyAgICJIYXJkd2FyZSBJbnN0YWxsYXRpb24iIGNoYXB0ZXIgdG8gc2V0IGludGVycnVwdCB2ZWN0b3IuCisKKyAgIEVycm9yIG1zZzogQ291bGRuJ3QgaW5zdGFsbCBNT1hBIFNtYXJ0aW8gZmFtaWx5IGRyaXZlciEKKyAgIFNvbHV0aW9uOgorICAgTG9hZCBNb3hhIGRyaXZlciBmYWlsLCB0aGUgbWFqb3IgbnVtYmVyIG1heSBjb25mbGljdCB3aXRoIG90aGVyIGRldmljZXMuCisgICBQbGVhc2UgcmVmZXIgdG8gcHJldmlvdXMgc2VjdGlvbiAzLjUgdG8gY2hhbmdlIGEgZnJlZSBtYWpvciBudW1iZXIgZm9yCisgICBNb3hhIGRyaXZlci4KKworICAgRXJyb3IgbXNnOiBDb3VsZG4ndCBpbnN0YWxsIE1PWEEgU21hcnRpbyBmYW1pbHkgY2FsbG91dCBkcml2ZXIhCisgICBTb2x1dGlvbjoKKyAgIExvYWQgTW94YSBjYWxsb3V0IGRyaXZlciBmYWlsLCB0aGUgY2FsbG91dCBkZXZpY2UgbWFqb3IgbnVtYmVyIG1heQorICAgY29uZmxpY3Qgd2l0aCBvdGhlciBkZXZpY2VzLiBQbGVhc2UgcmVmZXIgdG8gcHJldmlvdXMgc2VjdGlvbiAzLjUgdG8KKyAgIGNoYW5nZSBhIGZyZWUgY2FsbG91dCBkZXZpY2UgbWFqb3IgbnVtYmVyIGZvciBNb3hhIGRyaXZlci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL210cnIudHh0IGIvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzhhZjFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dApAQCAtMCwwICsxLDI4NiBAQAorTVRSUiAoTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXIpIGNvbnRyb2wKKzMgSnVuIDE5OTkKK1JpY2hhcmQgR29vY2gKKzxyZ29vY2hAYXRuZi5jc2lyby5hdT4KKworICBPbiBJbnRlbCBQNiBmYW1pbHkgcHJvY2Vzc29ycyAoUGVudGl1bSBQcm8sIFBlbnRpdW0gSUkgYW5kIGxhdGVyKQorICB0aGUgTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXJzIChNVFJScykgbWF5IGJlIHVzZWQgdG8gY29udHJvbAorICBwcm9jZXNzb3IgYWNjZXNzIHRvIG1lbW9yeSByYW5nZXMuIFRoaXMgaXMgbW9zdCB1c2VmdWwgd2hlbiB5b3UgaGF2ZQorICBhIHZpZGVvIChWR0EpIGNhcmQgb24gYSBQQ0kgb3IgQUdQIGJ1cy4gRW5hYmxpbmcgd3JpdGUtY29tYmluaW5nCisgIGFsbG93cyBidXMgd3JpdGUgdHJhbnNmZXJzIHRvIGJlIGNvbWJpbmVkIGludG8gYSBsYXJnZXIgdHJhbnNmZXIKKyAgYmVmb3JlIGJ1cnN0aW5nIG92ZXIgdGhlIFBDSS9BR1AgYnVzLiBUaGlzIGNhbiBpbmNyZWFzZSBwZXJmb3JtYW5jZQorICBvZiBpbWFnZSB3cml0ZSBvcGVyYXRpb25zIDIuNSB0aW1lcyBvciBtb3JlLgorCisgIFRoZSBDeXJpeCA2eDg2LCA2eDg2TVggYW5kIE0gSUkgcHJvY2Vzc29ycyBoYXZlIEFkZHJlc3MgUmFuZ2UKKyAgUmVnaXN0ZXJzIChBUlJzKSB3aGljaCBwcm92aWRlIGEgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHRvIE1UUlJzLiBGb3IKKyAgdGhlc2UsIHRoZSBBUlJzIGFyZSB1c2VkIHRvIGVtdWxhdGUgdGhlIE1UUlJzLgorCisgIFRoZSBBTUQgSzYtMiAoc3RlcHBpbmcgOCBhbmQgYWJvdmUpIGFuZCBLNi0zIHByb2Nlc3NvcnMgaGF2ZSB0d28KKyAgTVRSUnMuIFRoZXNlIGFyZSBzdXBwb3J0ZWQuICBUaGUgQU1EIEF0aGxvbiBmYW1pbHkgcHJvdmlkZSA4IEludGVsCisgIHN0eWxlIE1UUlJzLgorICAKKyAgVGhlIENlbnRhdXIgQzYgKFdpbkNoaXApIGhhcyA4IE1DUnMsIGFsbG93aW5nIHdyaXRlLWNvbWJpbmluZy4gVGhlc2UKKyAgYXJlIHN1cHBvcnRlZC4KKworICBUaGUgVklBIEN5cml4IElJSSBhbmQgVklBIEMzIENQVXMgb2ZmZXIgOCBJbnRlbCBzdHlsZSBNVFJScy4KKworICBUaGUgQ09ORklHX01UUlIgb3B0aW9uIGNyZWF0ZXMgYSAvcHJvYy9tdHJyIGZpbGUgd2hpY2ggbWF5IGJlIHVzZWQKKyAgdG8gbWFuaXB1bGF0ZSB5b3VyIE1UUlJzLiBUeXBpY2FsbHkgdGhlIFggc2VydmVyIHNob3VsZCB1c2UKKyAgdGhpcy4gVGhpcyBzaG91bGQgaGF2ZSBhIHJlYXNvbmFibHkgZ2VuZXJpYyBpbnRlcmZhY2Ugc28gdGhhdAorICBzaW1pbGFyIGNvbnRyb2wgcmVnaXN0ZXJzIG9uIG90aGVyIHByb2Nlc3NvcnMgY2FuIGJlIGVhc2lseQorICBzdXBwb3J0ZWQuCisKKworVGhlcmUgYXJlIHR3byBpbnRlcmZhY2VzIHRvIC9wcm9jL210cnI6IG9uZSBpcyBhbiBBU0NJSSBpbnRlcmZhY2UKK3doaWNoIGFsbG93cyB5b3UgdG8gcmVhZCBhbmQgd3JpdGUuIFRoZSBvdGhlciBpcyBhbiBpb2N0bCgpCitpbnRlcmZhY2UuIFRoZSBBU0NJSSBpbnRlcmZhY2UgaXMgbWVhbnQgZm9yIGFkbWluaXN0cmF0aW9uLiBUaGUKK2lvY3RsKCkgaW50ZXJmYWNlIGlzIG1lYW50IGZvciBDIHByb2dyYW1zIChpLmUuIHRoZSBYIHNlcnZlcikuIFRoZQoraW50ZXJmYWNlcyBhcmUgZGVzY3JpYmVkIGJlbG93LCB3aXRoIHNhbXBsZSBjb21tYW5kcyBhbmQgQyBjb2RlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZWFkaW5nIE1UUlJzIGZyb20gdGhlIHNoZWxsOgorCislIGNhdCAvcHJvYy9tdHJyCityZWcwMDogYmFzZT0weDAwMDAwMDAwICggICAwTUIpLCBzaXplPSAxMjhNQjogd3JpdGUtYmFjaywgY291bnQ9MQorcmVnMDE6IGJhc2U9MHgwODAwMDAwMCAoIDEyOE1CKSwgc2l6ZT0gIDY0TUI6IHdyaXRlLWJhY2ssIGNvdW50PTEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NyZWF0aW5nIE1UUlJzIGZyb20gdGhlIEMtc2hlbGw6CisjIGVjaG8gImJhc2U9MHhmODAwMDAwMCBzaXplPTB4NDAwMDAwIHR5cGU9d3JpdGUtY29tYmluaW5nIiA+ISAvcHJvYy9tdHJyCitvciBpZiB5b3UgdXNlIGJhc2g6CisjIGVjaG8gImJhc2U9MHhmODAwMDAwMCBzaXplPTB4NDAwMDAwIHR5cGU9d3JpdGUtY29tYmluaW5nIiA+fCAvcHJvYy9tdHJyCisKK0FuZCB0aGUgcmVzdWx0IHRoZXJlb2Y6CislIGNhdCAvcHJvYy9tdHJyCityZWcwMDogYmFzZT0weDAwMDAwMDAwICggICAwTUIpLCBzaXplPSAxMjhNQjogd3JpdGUtYmFjaywgY291bnQ9MQorcmVnMDE6IGJhc2U9MHgwODAwMDAwMCAoIDEyOE1CKSwgc2l6ZT0gIDY0TUI6IHdyaXRlLWJhY2ssIGNvdW50PTEKK3JlZzAyOiBiYXNlPTB4ZjgwMDAwMDAgKDM5NjhNQiksIHNpemU9ICAgNE1COiB3cml0ZS1jb21iaW5pbmcsIGNvdW50PTEKKworVGhpcyBpcyBmb3IgdmlkZW8gUkFNIGF0IGJhc2UgYWRkcmVzcyAweGY4MDAwMDAwIGFuZCBzaXplIDQgbWVnYWJ5dGVzLiBUbworZmluZCBvdXQgeW91ciBiYXNlIGFkZHJlc3MsIHlvdSBuZWVkIHRvIGxvb2sgYXQgdGhlIG91dHB1dCBvZiB5b3VyIFgKK3NlcnZlciwgd2hpY2ggdGVsbHMgeW91IHdoZXJlIHRoZSBsaW5lYXIgZnJhbWVidWZmZXIgYWRkcmVzcyBpcy4gQQordHlwaWNhbCBsaW5lIHRoYXQgeW91IG1heSBnZXQgaXM6CisKKygtLSkgUzM6IFBDSTogOTY4IHJldiAwLCBMaW5lYXIgRkIgQCAweGY4MDAwMDAwCisKK05vdGUgdGhhdCB5b3Ugc2hvdWxkIG9ubHkgdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBYIHNlcnZlciwgYXMgaXQgbWF5Cittb3ZlIHRoZSBmcmFtZWJ1ZmZlciBiYXNlIGFkZHJlc3MsIHNvIHRoZSBvbmx5IHZhbHVlIHlvdSBjYW4gdHJ1c3QgaXMKK3RoYXQgcmVwb3J0ZWQgYnkgdGhlIFggc2VydmVyLgorCitUbyBmaW5kIG91dCB0aGUgc2l6ZSBvZiB5b3VyIGZyYW1lYnVmZmVyICh3aGF0LCB5b3UgZG9uJ3QgYWN0dWFsbHkKK2tub3c/KSwgdGhlIGZvbGxvd2luZyBsaW5lIHdpbGwgdGVsbCB5b3U6CisKKygtLSkgUzM6IHZpZGVvcmFtOiAgNDA5NmsKKworVGhhdCdzIDQgbWVnYWJ5dGVzLCB3aGljaCBpcyAweDQwMDAwMCBieXRlcyAoaW4gaGV4YWRlY2ltYWwpLgorQSBwYXRjaCBpcyBiZWluZyB3cml0dGVuIGZvciBYRnJlZTg2IHdoaWNoIHdpbGwgbWFrZSB0aGlzIGF1dG9tYXRpYzoKK2luIG90aGVyIHdvcmRzIHRoZSBYIHNlcnZlciB3aWxsIG1hbmlwdWxhdGUgL3Byb2MvbXRyciB1c2luZyB0aGUKK2lvY3RsKCkgaW50ZXJmYWNlLCBzbyB1c2VycyB3b24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLiBJZiB5b3UgdXNlIGEKK2NvbW1lcmNpYWwgWCBzZXJ2ZXIsIGxvYmJ5IHlvdXIgdmVuZG9yIHRvIGFkZCBzdXBwb3J0IGZvciBNVFJScy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NyZWF0aW5nIG92ZXJsYXBwaW5nIE1UUlJzOgorCislZWNobyAiYmFzZT0weGZiMDAwMDAwIHNpemU9MHgxMDAwMDAwIHR5cGU9d3JpdGUtY29tYmluaW5nIiA+L3Byb2MvbXRycgorJWVjaG8gImJhc2U9MHhmYjAwMDAwMCBzaXplPTB4MTAwMCB0eXBlPXVuY2FjaGFibGUiID4vcHJvYy9tdHJyCisKK0FuZCB0aGUgcmVzdWx0czogY2F0IC9wcm9jL210cnIKK3JlZzAwOiBiYXNlPTB4MDAwMDAwMDAgKCAgIDBNQiksIHNpemU9ICA2NE1COiB3cml0ZS1iYWNrLCBjb3VudD0xCityZWcwMTogYmFzZT0weGZiMDAwMDAwICg0MDE2TUIpLCBzaXplPSAgMTZNQjogd3JpdGUtY29tYmluaW5nLCBjb3VudD0xCityZWcwMjogYmFzZT0weGZiMDAwMDAwICg0MDE2TUIpLCBzaXplPSAgIDRrQjogdW5jYWNoYWJsZSwgY291bnQ9MQorCitTb21lIGNhcmRzIChlc3BlY2lhbGx5IFZvb2RvbyBHcmFwaGljcyBib2FyZHMpIG5lZWQgdGhpcyA0IGtCIGFyZWEgCitleGNsdWRlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZ2lvbiBiZWNhdXNlIGl0IGlzIHVzZWQgZm9yCityZWdpc3RlcnMuCisKK05PVEU6IFlvdSBjYW4gb25seSBjcmVhdGUgdHlwZT11bmNhY2hhYmxlIHJlZ2lvbiwgaWYgdGhlIGZpcnN0CityZWdpb24gdGhhdCB5b3UgY3JlYXRlZCBpcyB0eXBlPXdyaXRlLWNvbWJpbmluZy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbW92aW5nIE1UUlJzIGZyb20gdGhlIEMtc2hlbGw6CislIGVjaG8gImRpc2FibGU9MiIgPiEgL3Byb2MvbXRycgorb3IgdXNpbmcgYmFzaDoKKyUgZWNobyAiZGlzYWJsZT0yIiA+fCAvcHJvYy9tdHJyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZWFkaW5nIE1UUlJzIGZyb20gYSBDIHByb2dyYW0gdXNpbmcgaW9jdGwoKSdzOgorCisvKiAgbXRyci1zaG93LmMKKworICAgIFNvdXJjZSBmaWxlIGZvciBtdHJyLXNob3cgKGV4YW1wbGUgcHJvZ3JhbSB0byBzaG93IE1UUlJzIHVzaW5nIGlvY3RsKCkncykKKworICAgIENvcHlyaWdodCAoQykgMTk5Ny0xOTk4ICBSaWNoYXJkIEdvb2NoCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAgIFJpY2hhcmQgR29vY2ggbWF5IGJlIHJlYWNoZWQgYnkgZW1haWwgYXQgIHJnb29jaEBhdG5mLmNzaXJvLmF1CisgICAgVGhlIHBvc3RhbCBhZGRyZXNzIGlzOgorICAgICAgUmljaGFyZCBHb29jaCwgYy9vIEFUTkYsIFAuIE8uIEJveCA3NiwgRXBwaW5nLCBOLlMuVy4sIDIxMjEsIEF1c3RyYWxpYS4KKyovCisKKy8qCisgICAgVGhpcyBwcm9ncmFtIHdpbGwgdXNlIGFuIGlvY3RsKCkgb24gL3Byb2MvbXRyciB0byBzaG93IHRoZSBjdXJyZW50IE1UUlIKKyAgICBzZXR0aW5ncy4gVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byByZWFkaW5nIC9wcm9jL210cnIuCisKKworICAgIFdyaXR0ZW4gYnkgICAgICBSaWNoYXJkIEdvb2NoICAgMTctREVDLTE5OTcKKworICAgIExhc3QgdXBkYXRlZCBieSBSaWNoYXJkIEdvb2NoICAgMi1NQVktMTk5OAorCisKKyovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNkZWZpbmUgTVRSUl9ORUVEX1NUUklOR1MKKyNpbmNsdWRlIDxhc20vbXRyci5oPgorCisjZGVmaW5lIFRSVUUgMQorI2RlZmluZSBGQUxTRSAwCisjZGVmaW5lIEVSUlNUUklORyBzdHJlcnJvciAoZXJybm8pCisKKworaW50IG1haW4gKCkKK3sKKyAgICBpbnQgZmQ7CisgICAgc3RydWN0IG10cnJfZ2VudHJ5IGdlbnRyeTsKKworICAgIGlmICggKCBmZCA9IG9wZW4gKCIvcHJvYy9tdHJyIiwgT19SRE9OTFksIDApICkgPT0gLTEgKQorICAgIHsKKwlpZiAoZXJybm8gPT0gRU5PRU5UKQorCXsKKwkgICAgZnB1dHMgKCIvcHJvYy9tdHJyIG5vdCBmb3VuZDogbm90IHN1cHBvcnRlZCBvciB5b3UgZG9uJ3QgaGF2ZSBhIFBQcm8/XG4iLAorCQkgICBzdGRlcnIpOworCSAgICBleGl0ICgxKTsKKwl9CisJZnByaW50ZiAoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyAvcHJvYy9tdHJyXHQlc1xuIiwgRVJSU1RSSU5HKTsKKwlleGl0ICgyKTsKKyAgICB9CisgICAgZm9yIChnZW50cnkucmVnbnVtID0gMDsgaW9jdGwgKGZkLCBNVFJSSU9DX0dFVF9FTlRSWSwgJmdlbnRyeSkgPT0gMDsKKwkgKytnZW50cnkucmVnbnVtKQorICAgIHsKKwlpZiAoZ2VudHJ5LnNpemUgPCAxKQorCXsKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAiUmVnaXN0ZXI6ICV1IGRpc2FibGVkXG4iLCBnZW50cnkucmVnbnVtKTsKKwkgICAgY29udGludWU7CisJfQorCWZwcmludGYgKHN0ZGVyciwgIlJlZ2lzdGVyOiAldSBiYXNlOiAweCVseCBzaXplOiAweCVseCB0eXBlOiAlc1xuIiwKKwkJIGdlbnRyeS5yZWdudW0sIGdlbnRyeS5iYXNlLCBnZW50cnkuc2l6ZSwKKwkJIG10cnJfc3RyaW5nc1tnZW50cnkudHlwZV0pOworICAgIH0KKyAgICBpZiAoZXJybm8gPT0gRUlOVkFMKSBleGl0ICgwKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJFcnJvciBkb2luZyBpb2N0bCgyKSBvbiAvZGV2L210cnJcdCVzXG4iLCBFUlJTVFJJTkcpOworICAgIGV4aXQgKDMpOworfSAgIC8qICBFbmQgRnVuY3Rpb24gbWFpbiAgKi8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NyZWF0aW5nIE1UUlJzIGZyb20gYSBDIHByb2dyYW1tZSB1c2luZyBpb2N0bCgpJ3M6CisKKy8qICBtdHJyLWFkZC5jCisKKyAgICBTb3VyY2UgZmlsZSBmb3IgbXRyci1hZGQgKGV4YW1wbGUgcHJvZ3JhbW1lIHRvIGFkZCBhbiBNVFJScyB1c2luZyBpb2N0bCgpKQorCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTggIFJpY2hhcmQgR29vY2gKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgICAgUmljaGFyZCBHb29jaCBtYXkgYmUgcmVhY2hlZCBieSBlbWFpbCBhdCAgcmdvb2NoQGF0bmYuY3Npcm8uYXUKKyAgICBUaGUgcG9zdGFsIGFkZHJlc3MgaXM6CisgICAgICBSaWNoYXJkIEdvb2NoLCBjL28gQVRORiwgUC4gTy4gQm94IDc2LCBFcHBpbmcsIE4uUy5XLiwgMjEyMSwgQXVzdHJhbGlhLgorKi8KKworLyoKKyAgICBUaGlzIHByb2dyYW1tZSB3aWxsIHVzZSBhbiBpb2N0bCgpIG9uIC9wcm9jL210cnIgdG8gYWRkIGFuIGVudHJ5LiBUaGUgZmlyc3QKKyAgICBhdmFpbGFibGUgbXRyciBpcyB1c2VkLiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHdyaXRpbmcgL3Byb2MvbXRyci4KKworCisgICAgV3JpdHRlbiBieSAgICAgIFJpY2hhcmQgR29vY2ggICAxNy1ERUMtMTk5NworCisgICAgTGFzdCB1cGRhdGVkIGJ5IFJpY2hhcmQgR29vY2ggICAyLU1BWS0xOTk4CisKKworKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2RlZmluZSBNVFJSX05FRURfU1RSSU5HUworI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIEZBTFNFIDAKKyNkZWZpbmUgRVJSU1RSSU5HIHN0cmVycm9yIChlcnJubykKKworCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBmZDsKKyAgICBzdHJ1Y3QgbXRycl9zZW50cnkgc2VudHJ5OworCisgICAgaWYgKGFyZ2MgIT0gNCkKKyAgICB7CisJZnByaW50ZiAoc3RkZXJyLCAiVXNhZ2U6XHRtdHJyLWFkZCBiYXNlIHNpemUgdHlwZVxuIik7CisJZXhpdCAoMSk7CisgICAgfQorICAgIHNlbnRyeS5iYXNlID0gc3RydG91bCAoYXJndlsxXSwgTlVMTCwgMCk7CisgICAgc2VudHJ5LnNpemUgPSBzdHJ0b3VsIChhcmd2WzJdLCBOVUxMLCAwKTsKKyAgICBmb3IgKHNlbnRyeS50eXBlID0gMDsgc2VudHJ5LnR5cGUgPCBNVFJSX05VTV9UWVBFUzsgKytzZW50cnkudHlwZSkKKyAgICB7CisJaWYgKHN0cmNtcCAoYXJndlszXSwgbXRycl9zdHJpbmdzW3NlbnRyeS50eXBlXSkgPT0gMCkgYnJlYWs7CisgICAgfQorICAgIGlmIChzZW50cnkudHlwZSA+PSBNVFJSX05VTV9UWVBFUykKKyAgICB7CisJZnByaW50ZiAoc3RkZXJyLCAiSWxsZWdhbCB0eXBlOiBcIiVzXCJcbiIsIGFyZ3ZbM10pOworCWV4aXQgKDIpOworICAgIH0KKyAgICBpZiAoICggZmQgPSBvcGVuICgiL3Byb2MvbXRyciIsIE9fV1JPTkxZLCAwKSApID09IC0xICkKKyAgICB7CisJaWYgKGVycm5vID09IEVOT0VOVCkKKwl7CisJICAgIGZwdXRzICgiL3Byb2MvbXRyciBub3QgZm91bmQ6IG5vdCBzdXBwb3J0ZWQgb3IgeW91IGRvbid0IGhhdmUgYSBQUHJvP1xuIiwKKwkJICAgc3RkZXJyKTsKKwkgICAgZXhpdCAoMyk7CisJfQorCWZwcmludGYgKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgL3Byb2MvbXRyclx0JXNcbiIsIEVSUlNUUklORyk7CisJZXhpdCAoNCk7CisgICAgfQorICAgIGlmIChpb2N0bCAoZmQsIE1UUlJJT0NfQUREX0VOVFJZLCAmc2VudHJ5KSA9PSAtMSkKKyAgICB7CisJZnByaW50ZiAoc3RkZXJyLCAiRXJyb3IgZG9pbmcgaW9jdGwoMikgb24gL2Rldi9tdHJyXHQlc1xuIiwgRVJSU1RSSU5HKTsKKwlleGl0ICg1KTsKKyAgICB9CisgICAgZnByaW50ZiAoc3RkZXJyLCAiU2xlZXBpbmcgZm9yIDUgc2Vjb25kcyBzbyB5b3UgY2FuIHNlZSB0aGUgbmV3IGVudHJ5XG4iKTsKKyAgICBzbGVlcCAoNSk7CisgICAgY2xvc2UgKGZkKTsKKyAgICBmcHV0cyAoIkkndmUganVzdCBjbG9zZWQgL3Byb2MvbXRyciBzbyBub3cgdGhlIG5ldyBlbnRyeSBzaG91bGQgYmUgZ29uZVxuIiwKKwkgICBzdGRlcnIpOworfSAgIC8qICBFbmQgRnVuY3Rpb24gbWFpbiAgKi8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmJkLnR4dCBiL0RvY3VtZW50YXRpb24vbmJkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWI5M2ZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uYmQudHh0CkBAIC0wLDAgKzEsNDcgQEAKKyAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrIEJsb2NrIERldmljZSAoVENQIHZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIFdoYXQgaXMgaXQ6IFdpdGggdGhpcyBjb21waWxlZCBpbiB0aGUga2VybmVsIChvciBhcyBhIG1vZHVsZSksIExpbnV4CisgICBjYW4gdXNlIGEgcmVtb3RlIHNlcnZlciBhcyBvbmUgb2YgaXRzIGJsb2NrIGRldmljZXMuIFNvIGV2ZXJ5IHRpbWUKKyAgIHRoZSBjbGllbnQgY29tcHV0ZXIgd2FudHMgdG8gcmVhZCwgZS5nLiwgL2Rldi9uYjAsIGl0IHNlbmRzIGEKKyAgIHJlcXVlc3Qgb3ZlciBUQ1AgdG8gdGhlIHNlcnZlciwgd2hpY2ggd2lsbCByZXBseSB3aXRoIHRoZSBkYXRhIHJlYWQuCisgICBUaGlzIGNhbiBiZSB1c2VkIGZvciBzdGF0aW9ucyB3aXRoIGxvdyBkaXNrIHNwYWNlIChvciBldmVuIGRpc2tsZXNzIC0KKyAgIGlmIHlvdSBib290IGZyb20gZmxvcHB5KSB0byBib3Jyb3cgZGlzayBzcGFjZSBmcm9tIGFub3RoZXIgY29tcHV0ZXIuCisgICBVbmxpa2UgTkZTLCBpdCBpcyBwb3NzaWJsZSB0byBwdXQgYW55IGZpbGVzeXN0ZW0gb24gaXQsIGV0Yy4gSXQgc2hvdWxkCisgICBldmVuIGJlIHBvc3NpYmxlIHRvIHVzZSBOQkQgYXMgYSByb290IGZpbGVzeXN0ZW0gKEkndmUgbmV2ZXIgdHJpZWQpLAorICAgYnV0IGl0IHJlcXVpcmVzIGEgdXNlci1sZXZlbCBwcm9ncmFtIHRvIGJlIGluIHRoZSBpbml0cmQgdG8gc3RhcnQuCisgICBJdCBhbHNvIGFsbG93cyB5b3UgdG8gcnVuIGJsb2NrLWRldmljZSBpbiB1c2VyIGxhbmQgKG1ha2luZyBzZXJ2ZXIKKyAgIGFuZCBjbGllbnQgcGh5c2ljYWxseSB0aGUgc2FtZSBjb21wdXRlciwgY29tbXVuaWNhdGluZyB1c2luZyBsb29wYmFjaykuCisgICAKKyAgIEN1cnJlbnQgc3RhdGU6IEl0IGN1cnJlbnRseSB3b3Jrcy4gTmV0d29yayBibG9jayBkZXZpY2UgaXMgc3RhYmxlLgorICAgSSBvcmlnaW5hbGx5IHRob3VnaHQgdGhhdCBpdCB3YXMgaW1wb3NzaWJsZSB0byBzd2FwIG92ZXIgVENQLiBJdAorICAgdHVybmVkIG91dCBub3QgdG8gYmUgdHJ1ZSAtIHN3YXBwaW5nIG92ZXIgVENQIG5vdyB3b3JrcyBhbmQgc2VlbXMKKyAgIHRvIGJlIGRlYWRsb2NrLWZyZWUsIGJ1dCBpdCByZXF1aXJlcyBoZWF2eSBwYXRjaGVzIGludG8gTGludXgncworICAgbmV0d29yayBsYXllci4KKyAgIAorICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIG9yIHRvIGRvd25sb2FkIHRoZSBuYmQtY2xpZW50IGFuZCBuYmQtc2VydmVyCisgICB0b29scywgZ28gdG8gaHR0cDovL25iZC5zZi5uZXQvLgorCisgICBIb3d0bzogVG8gc2V0dXAgbmJkLCB5b3UgY2FuIHNpbXBseSBkbyB0aGUgZm9sbG93aW5nOgorCisgICBGaXJzdCwgc2VydmUgYSBkZXZpY2Ugb3IgZmlsZSBmcm9tIGEgcmVtb3RlIHNlcnZlcjoKKworICAgbmJkLXNlcnZlciA8cG9ydC1udW1iZXI+IDxkZXZpY2Utb3ItZmlsZS10by1zZXJ2ZS10by1jbGllbnQ+CisKKyAgIGUuZy4sCisJcm9vdEBzZXJ2ZXIxICMgbmJkLXNlcnZlciAxMjM0IC9kZXYvc2RiMQorCisJKHNlcnZlcyBzZGIxIHBhcnRpdGlvbiBvbiBUQ1AgcG9ydCAxMjM0KQorCisgICBUaGVuLCBvbiB0aGUgbG9jYWwgKGNsaWVudCkgc3lzdGVtOgorCisgICBuYmQtY2xpZW50IDxzZXJ2ZXItbmFtZS1vci1JUD4gPHNlcnZlci1wb3J0LW51bWJlcj4gL2Rldi9uYlswLW5dCisKKyAgIGUuZy4sCisJcm9vdEBjbGllbnQxICMgbmJkLWNsaWVudCBzZXJ2ZXIxIDEyMzQgL2Rldi9uYjAKKworCShjcmVhdGVzIHRoZSBuYjAgZGV2aWNlIG9uIGNsaWVudDEpCisKKyAgIFRoZSBuYmQga2VybmVsIG1vZHVsZSBuZWVkIG9ubHkgYmUgaW5zdGFsbGVkIG9uIHRoZSBjbGllbnQKKyAgIHN5c3RlbSwgYXMgdGhlIG5iZC1zZXJ2ZXIgaXMgY29tcGxldGVseSBpbiB1c2Vyc3BhY2UuIEluIGZhY3QsCisgICB0aGUgbmJkLXNlcnZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcG9ydGVkIHRvIG90aGVyIG9wZXJhdGluZworICAgc3lzdGVtcywgaW5jbHVkaW5nIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0OTkzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApAQCAtMCwwICsxLDEyNyBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZQorM2M1MDUudHh0CisJLSBpbmZvcm1hdGlvbiBvbiB0aGUgM0NvbSBFdGhlckxpbmsgUGx1cyAoM2M1MDUpIGRyaXZlci4KKzZwYWNrLnR4dAorCS0gaW5mbyBvbiB0aGUgNnBhY2sgcHJvdG9jb2wsIGFuIGFsdGVybmF0aXZlIHRvIEtJU1MgZm9yIEFYLjI1CitDb25maWd1cmFibGUKKwktIGluZm8gb24gc29tZSBvZiB0aGUgY29uZmlndXJhYmxlIG5ldHdvcmsgcGFyYW1ldGVycworRExJTksudHh0CisJLSBpbmZvIG9uIHRoZSBELUxpbmsgREUtNjAwL0RFLTYyMCBwYXJhbGxlbCBwb3J0IHBvY2tldCBhZGFwdGVycworUExJUC50eHQKKwktIFBMSVA6IFRoZSBQYXJhbGxlbCBMaW5lIEludGVybmV0IFByb3RvY29sIGRldmljZSBkcml2ZXIKK1JFQURNRS5zYjEwMDAKKwktIGluZm8gb24gR2VuZXJhbCBJbnN0cnVtZW50L05leHRMZXZlbCBTVVJGYm9hcmQxMDAwIGNhYmxlIG1vZGVtLgorYWxpYXMudHh0CisJLSBpbmZvIG9uIHVzaW5nIGFsaWFzIG5ldHdvcmsgZGV2aWNlcyAKK2FyY25ldC1oYXJkd2FyZS50eHQKKwktIHRvbnMgb2YgaW5mbyBvbiBBUkNuZXQsIGh1YnMsIGp1bXBlciBzZXR0aW5ncyBmb3IgQVJDbmV0IGNhcmRzLCBldGMuCithcmNuZXQudHh0CisJLSBpbmZvIG9uIHRoZSB1c2luZyB0aGUgQVJDbmV0IGRyaXZlciBpdHNlbGYuCithdG0udHh0CisJLSBpbmZvIG9uIHdoZXJlIHRvIGdldCBBVE0gcHJvZ3JhbXMgYW5kIHN1cHBvcnQgZm9yIExpbnV4LgorYXgyNS50eHQKKwktIGluZm8gb24gdXNpbmcgQVguMjUgYW5kIE5FVC9ST00gY29kZSBmb3IgTGludXgKK2JheWNvbS50eHQKKwktIGluZm8gb24gdGhlIGRyaXZlciBmb3IgQmF5Y29tIHN0eWxlIGFtYXRldXIgcmFkaW8gbW9kZW1zCiticmlkZ2UudHh0CisJLSB3aGVyZSB0byBnZXQgdXNlciBzcGFjZSBwcm9ncmFtcyBmb3IgZXRoZXJuZXQgYnJpZGdpbmcgd2l0aCBMaW51eC4KK2NvbXgudHh0CisJLSBpbmZvIG9uIGRyaXZlcnMgZm9yIENPTVggbGluZSBvZiBzeW5jaHJvbm91cyBzZXJpYWwgYWRhcHRlcnMuCitjb3BzLnR4dAorCS0gaW5mbyBvbiB0aGUgQ09QUyBMb2NhbFRhbGsgTGludXggZHJpdmVyCitjczg5eDAudHh0CisJLSB0aGUgQ3J5c3RhbCBMQU4gKENTODkwMC8yMC1iYXNlZCkgRXRoZXJuZXQgSVNBIGFkYXB0ZXIgZHJpdmVyCitkZTR4NS50eHQKKwktIHRoZSBEaWdpdGFsIEV0aGVyV09SS1MgREU0Pz8gYW5kIERFNT8/IFBDSSBFdGhlcm5ldCBkcml2ZXIKK2RlY25ldC50eHQKKwktIGluZm8gb24gdXNpbmcgdGhlIERFQ25ldCBuZXR3b3JraW5nIGxheWVyIGluIExpbnV4LgorZGVwY2EudHh0CisJLSB0aGUgRGlnaXRhbCBERVBDQS9FdGhlcldPUktTIERFMT8/IGFuZCBERTI/PyBMQU5DRSBFdGhlcm5ldCBkcml2ZXIKK2RncnMudHh0CisJLSB0aGUgRGlnaSBJbnRlcm5hdGlvbmFsIFJpZ2h0U3dpdGNoIFNFLVggRXRoZXJuZXQgZHJpdmVyCitkbWZlLnR4dAorCS0gaW5mbyBvbiB0aGUgRGF2aWNvbSBETTkxMDIoQSkvRE05MTMyL0RNOTgwMSBmYXN0IGV0aGVybmV0IGRyaXZlci4KK2UxMDAudHh0CisJLSBpbmZvIG9uIEludGVsJ3MgRXRoZXJFeHByZXNzIFBSTy8xMDAgbGluZSBvZiAxMC8xMDAgYm9hcmRzCitlMTAwMC50eHQKKwktIGluZm8gb24gSW50ZWwncyBFMTAwMCBsaW5lIG9mIGdpZ2FiaXQgZXRoZXJuZXQgYm9hcmRzCitlcWwudHh0CisJLSBzZXJpYWwgSVAgbG9hZCBiYWxhbmNpbmcKK2V0aGVydGFwLnR4dAorCS0gdGhlIEV0aGVydGFwIHVzZXIgc3BhY2UgcGFja2V0IHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uIGRyaXZlcgorZXdyazMudHh0CisJLSB0aGUgRGlnaXRhbCBFdGhlcldPUktTIDMgREUyMDMvNC81IEV0aGVybmV0IGRyaXZlcgorZmlsdGVyLnR4dAorCS0gTGludXggU29ja2V0IEZpbHRlcmluZworZm9yZTIwMGUudHh0CisJLSBGT1JFIFN5c3RlbXMgUENBLTIwMEUvU0JBLTIwMEUgQVRNIE5JQyBkcml2ZXIgaW5mby4KK2ZyYW1lcmVsYXkudHh0CisJLSBpbmZvIG9uIHVzaW5nIEZyYW1lIFJlbGF5L0RhdGEgTGluayBDb25uZWN0aW9uIElkZW50aWZpZXIgKERMQ0kpLgoraXAtc3lzY3RsLnR4dAorCS0gL3Byb2Mvc3lzL25ldC9pcHY0LyogdmFyaWFibGVzCitpcF9keW5hZGRyLnR4dAorCS0gSVAgZHluYW1pYyBhZGRyZXNzIGhhY2sgZS5nLiBmb3IgYXV0by1kaWFsdXAgbGlua3MKK2lwZGRwLnR4dAorCS0gQXBwbGVUYWxrLUlQIERlY2Fwc3VsYXRpb24gYW5kIEFwcGxlVGFsay1JUCBFbmNhcHN1bGF0aW9uCitpcGhhc2UudHh0CisJLSBJbnRlcnBoYXNlIFBDSSBBVE0gKGkpQ2hpcCBJQSBMaW51eCBkcml2ZXIgaW5mby4KK2lyZGEudHh0CisJLSB3aGVyZSB0byBnZXQgSXJEQSAoaW5mcmFyZWQpIHV0aWxpdGllcyBhbmQgaW5mbyBmb3IgTGludXguCitsYXBiLW1vZHVsZS50eHQKKwktIHByb2dyYW1taW5nIGluZm9ybWF0aW9uIG9mIHRoZSBMQVBCIG1vZHVsZS4KK2x0cGMudHh0CisJLSB0aGUgQXBwbGUgb3IgRmFyYWxsb24gTG9jYWxUYWxrIFBDIGNhcmQgZHJpdmVyCittdWx0aWNhc3QudHh0CisJLSBCZWhhdmlvdXIgb2YgY2FyZHMgdW5kZXIgTXVsdGljYXN0CituY3NhLXRlbG5ldAorCS0gbm90ZXMgb24gaG93IE5DU0EgdGVsbmV0IChET1MpIGJyZWFrcyB3aXRoIE1UVSBkaXNjb3ZlcnkgZW5hYmxlZC4KK25ldC1tb2R1bGVzLnR4dAorCS0gaW5mbyBhbmQgImluc21vZCIgcGFyYW1ldGVycyBmb3IgYWxsIG5ldHdvcmsgZHJpdmVyIG1vZHVsZXMuCituZXRkZXZpY2VzLnR4dAorCS0gaW5mbyBvbiBuZXR3b3JrIGRldmljZSBkcml2ZXIgZnVuY3Rpb25zIGV4cG9ydGVkIHRvIHRoZSBrZXJuZWwuCitvbHltcGljLnR4dAorCS0gSUJNIFBDSSBQaXQvUGl0LVBoeS9PbHltcGljIFRva2VuIFJpbmcgZHJpdmVyIGluZm8uCitwb2xpY3ktcm91dGluZy50eHQKKwktIElQIHBvbGljeS1iYXNlZCByb3V0aW5nCitwdC50eHQKKwktIHRoZSBHcmFjaWxpcyBQYWNrZXR3aW4gQVguMjUgZGV2aWNlIGRyaXZlcgorcmF5X2NzLnR4dAorCS0gUmF5bGluayBXaXJlbGVzcyBMQU4gY2FyZCBkcml2ZXIgaW5mby4KK3JvdXRpbmcudHh0CisJLSB0aGUgbmV3IHJvdXRpbmcgbWVjaGFuaXNtCitzaGFwZXIudHh0CisJLSBpbmZvIG9uIHRoZSBtb2R1bGUgdGhhdCBjYW4gc2hhcGUvbGltaXQgdHJhbnNtaXR0ZWQgdHJhZmZpYy4KK3NpczkwMC50eHQKKwktIFNpUyA5MDAvNzAxNiBGYXN0IEV0aGVybmV0IGRldmljZSBkcml2ZXIgaW5mby4KK3NrOThsaW4udHh0CisJLSBNYXJ2ZWxsIFl1a29uIENoaXBzZXQgLyBTeXNLb25uZWN0IFNLLTk4eHggY29tcGxpYW50IEdpZ2FiaXQKKwkgIEV0aGVybmV0IEFkYXB0ZXIgZmFtaWx5IGRyaXZlciBpbmZvCitza2ZwLnR4dAorCS0gU3lzS29ubmVjdCBGRERJIChTSy01eHh4LCBDb21wYXEgTmV0ZWxsaWdlbnQpIGRyaXZlciBpbmZvLgorc21jOS50eHQKKwktIHRoZSBkcml2ZXIgZm9yIFNNQydzIDkwMDAgc2VyaWVzIG9mIEV0aGVybmV0IGNhcmRzCitzbWN0ci50eHQKKwktIFNNQyBUb2tlbkNhcmQgVG9rZW5SaW5nIExpbnV4IGRyaXZlciBpbmZvLgordGNwLnR4dAorCS0gc2hvcnQgYmx1cmIgb24gaG93IFRDUCBvdXRwdXQgdGFrZXMgcGxhY2UuCit0bGFuLnR4dAorCS0gVGh1bmRlckxBTiAoQ29tcGFxIE5ldGVsbGlnZW50IDEwLzEwMCwgT2xpY29tIE9DLTJ4eHgpIGRyaXZlciBpbmZvLgordG1zMzgwdHIudHh0CisJLSBTeXNLb25uZWN0IFRva2VuIFJpbmcgSVNBL1BDSSBhZGFwdGVyIGRyaXZlciBpbmZvLgordHVudGFwLnR4dAorCS0gVFVOL1RBUCBkZXZpY2UgZHJpdmVyLCBhbGxvd2luZyB1c2VyIHNwYWNlIFJ4L1R4IG9mIHBhY2tldHMuCit2b3J0ZXgudHh0CisJLSBpbmZvIG9uIHVzaW5nIDNDb20gVm9ydGV4ICgzYzU5MCwgM2M1OTIsIDNjNTk1LCAzYzU5NykgRXRoZXJuZXQgY2FyZHMuCit3YW4tcm91dGVyLnR4dAorCS0gV2FuIHJvdXRlciBkb2N1bWVudGF0aW9uCit3YW5waXBlLnR4dAorCS0gV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gRHJpdmVyIGZvciBMaW51eCBXQU4gUm91dGVyCit3YXZlbGFuLnR4dAorCS0gQVQmVCBHSVMgKG5lZSBOQ1IpIFdhdmVMQU4gY2FyZDogQW4gRXRoZXJuZXQtbGlrZSByYWRpbyB0cmFuc2NlaXZlcgoreDI1LnR4dAorCS0gZ2VuZXJhbCBpbmZvIG9uIFguMjUgZGV2ZWxvcG1lbnQuCit4MjUtaWZhY2UudHh0CisJLSBkZXNjcmlwdGlvbiBvZiB0aGUgWC4yNSBQYWNrZXQgTGF5ZXIgdG8gTEFQQiBkZXZpY2UgaW50ZXJmYWNlLgorejg1MzBkcnYudHh0CisJLSBpbmZvIGFib3V0IExpbnV4IGRyaXZlciBmb3IgWjg1MzAgYmFzZWQgSERMQyBjYXJkcyBmb3IgQVguMjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2MzNTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjgwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2MzNTkudHh0CkBAIC0wLDAgKzEsNTggQEAKKworM0NPTSBQQ0kgVE9LRU4gTElOSyBWRUxPQ0lUWSBYTCBUT0tFTiBSSU5HIENBUkRTIFJFQURNRQorCitSZWxlYXNlIDAuOS4wIC0gUmVsZWFzZSAgIAorCUp1bCAxN3RoIDIwMDAgTWlrZSBQaGlsbGlwcyAKKworCTEuMi4wIC0gRmluYWwKKwlGZWIgMTd0aCAyMDAyIE1pa2UgUGhpbGxpcHMgCisJVXBkYXRlZCBmb3Igc3VibWlzc2lvbiB0byB0aGUgMi40Lngga2VybmVsLgorCitUaGFua3M6CisJVGVycnkgTXVycGh5IGZyb20gM0NvbSBmb3IgdGVjaCBkb2NzIGFuZCBzdXBwb3J0LAorCUFkYW0gRC4gTGlnYXMgZm9yIHRlc3RpbmcgdGhlIGRyaXZlci4KKyAKK05vdGU6CisJVGhpcyBkcml2ZXIgd2lsbCBOT1Qgd29yayB3aXRoIHRoZSAzQzMzOSBUb2tlbiBSaW5nIGNhcmRzLCB5b3UgbmVlZAordG8gdXNlIHRoZSB0bXMzODAgZHJpdmVyIGluc3RlYWQuCisKK09wdGlvbnM6CisKK1RoZSBkcml2ZXIgYWNjZXB0cyB0aHJlZSBvcHRpb25zOiByaW5nc3BlZWQsIHBrdF9idWZfc3ogYW5kIG1lc3NhZ2VfbGV2ZWwuCisKK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBkaWZmZXJlbnRseSBmb3IgZWFjaCBjYXJkIGZvdW5kLiAKKworcmluZ3NwZWVkOiAgSGFzIG9uZSBvZiB0aHJlZSBzZXR0aW5ncyAwIChkZWZhdWx0KSwgNCBvciAxNi4gIDAgd2lsbCAKK21ha2UgdGhlIGNhcmQgYXV0b3NlbnNlIHRoZSByaW5nc3BlZWQgYW5kIGpvaW4gYXQgdGhlIGFwcHJvcHJpYXRlIHNwZWVkLCAKK3RoaXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBvcHRpb24gZm9yIG1vc3QgcGVvcGxlLiAgNCBvciAxNiBhbGxvdyB5b3UgdG8gCitleHBsaWNpdGx5IGZvcmNlIHRoZSBjYXJkIHRvIG9wZXJhdGUgYXQgYSBjZXJ0YWluIHNwZWVkLiAgVGhlIGNhcmQgd2lsbCBmYWlsIAoraWYgeW91IHRyeSB0byBpbnNlcnQgaXQgYXQgdGhlIHdyb25nIHNwZWVkLiAoQWx0aG91Z2ggc29tZSBodWJzIHdpbGwgYWxsb3cgCit0aGlzIHNvIGJlICp2ZXJ5KiBjYXJlZnVsKS4gIFRoZSBtYWluIHB1cnBvc2UgZm9yIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgcmluZworc3BlZWQgaXMgZm9yIHdoZW4gdGhlIGNhcmQgaXMgZmlyc3Qgb24gdGhlIHJpbmcuICBJbiBhdXRvc2Vuc2UgbW9kZSwgaWYgdGhlIGNhcmQKK2Nhbm5vdCBkZXRlY3QgYW55IGFjdGl2ZSBtb25pdG9ycyBvbiB0aGUgcmluZyBpdCB3aWxsIG9wZW4gYXQgdGhlIHNhbWUgc3BlZWQgYXMKK2l0cyBsYXN0IG9wZW5pbmcuIFRoaXMgY2FuIGJlIGhhemFyZG91cyBpZiB0aGlzIHNwZWVkIGRvZXMgbm90IG1hdGNoIHRoZSBzcGVlZAoreW91IHdhbnQgdGhlIHJpbmcgdG8gb3BlcmF0ZSBhdC4gIAorCitwa3RfYnVmX3N6OiAgVGhpcyBpcyB0aGlzIGluaXRpYWwgcmVjZWl2ZSBidWZmZXIgYWxsb2NhdGlvbiBzaXplLiAgVGhpcyB3aWxsCitkZWZhdWx0IHRvIDQwOTYgaWYgbm8gdmFsdWUgaXMgZW50ZXJlZC4gWW91IG1heSBpbmNyZWFzZSBwZXJmb3JtYW5jZSBvZiB0aGUgCitkcml2ZXIgYnkgc2V0dGluZyB0aGlzIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIG5ldHdvcmsgcGFja2V0IHNpemUsIGFsdGhvdWdoCit0aGUgZHJpdmVyIG5vdyByZS1zaXplcyBidWZmZXJzIGJhc2VkIG9uIE1UVSBzZXR0aW5ncyBhcyB3ZWxsLiAKKworbWVzc2FnZV9sZXZlbDogQ29udHJvbHMgbGV2ZWwgb2YgbWVzc2FnZXMgY3JlYXRlZCBieSB0aGUgZHJpdmVyLiBEZWZhdWx0cyB0byAwOgord2hpY2ggb25seSBkaXNwbGF5cyBzdGFydC11cCBhbmQgY3JpdGljYWwgbWVzc2FnZXMuICBQcmVzZW50bHkgYW55IG5vbi16ZXJvIAordmFsdWUgd2lsbCBkaXNwbGF5IGFsbCBzb2Z0IG1lc3NhZ2VzIGFzIHdlbGwuICBOQiBUaGlzIGRvZXMgbm90IHR1cm4gCitkZWJ1Z2dpbmcgbWVzc2FnZXMgb24sIHRoYXQgbXVzdCBiZSBkb25lIGJ5IG1vZGlmaWVkIHRoZSBzb3VyY2UgY29kZS4KKworVmFyaWFibGUgTVRVIHNpemU6CisKK1RoZSBkcml2ZXIgY2FuIGhhbmRsZSBhIE1UVSBzaXplIHVwdG8gZWl0aGVyIDQ1MDAgb3IgMTgwMDAgZGVwZW5kaW5nIHVwb24gCityaW5nIHNwZWVkLiAgVGhlIGRyaXZlciBhbHNvIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVycyBhcyBwYXJ0CitvZiB0aGUgbXR1IHJlLXNpemluZywgc28gaWYgeW91IHNldCBtdHUgPSAxODAwMCwgeW91IHdpbGwgbmVlZCB0byBiZSBhYmxlCit0byBhbGxvY2F0ZSAxNiAqIChza19idWZmIHdpdGggMTgwMDAgYnVmZmVyIHNpemUpIGNhbGwgaXQgMTg1MDAgYnl0ZXMgcGVyIHJpbmcgCitwb3NpdGlvbiA9IDI5NiwwMDAgYnl0ZXMgb2YgbWVtb3J5IHNwYWNlLCBwbHVzIG9mIGNvdXJzZSBhbnl0aGluZyAKK25lY2Vzc2FyeSBmb3IgdGhlIHR4IHNrX2J1ZmYncy4gIFJlbWVtYmVyIHRoaXMgaXMgcGVyIGNhcmQsIHNvIGlmIHlvdSBhcmUKK2J1aWxkaW5nIHJvdXRlcnMsIGdhdGV3YXkncyBldGMsIHlvdSBjb3VsZCBzdGFydCB0byB1c2UgYSBsb3Qgb2YgbWVtb3J5CityZWFsIGZhc3QuCisKKzIvMTcvMDIgTWlrZSBQaGlsbGlwcworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQ1YjcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA1LnR4dApAQCAtMCwwICsxLDQ2IEBACitUaGUgM0NvbSBFdGhlcmxpbmsgUGx1cyAoM2M1MDUpIGRyaXZlci4KKworVGhpcyBkcml2ZXIgbm93IHVzZXMgRE1BLiAgVGhlcmUgaXMgY3VycmVudGx5IG5vIHN1cHBvcnQgZm9yIFBJTyBvcGVyYXRpb24uCitUaGUgZGVmYXVsdCBETUEgY2hhbm5lbCBpcyA2OyB0aGlzIGlzIF9ub3RfIGF1dG9wcm9iZWQsIHNvIHlvdSBtdXN0CittYWtlIHN1cmUgeW91IGNvbmZpZ3VyZSBpdCBjb3JyZWN0bHkuICBJZiBsb2FkaW5nIHRoZSBkcml2ZXIgYXMgYQorbW9kdWxlLCB5b3UgY2FuIGRvIHRoaXMgd2l0aCAibW9kcHJvYmUgM2M1MDUgZG1hPW4iLiAgSWYgdGhlIGRyaXZlciBpcworbGlua2VkIHN0YXRpY2FsbHkgaW50byB0aGUga2VybmVsLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGFuICJldGhlcj0iCitzdGF0ZW1lbnQgb24gdGhlIGNvbW1hbmQgbGluZSwgb3IgY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIEVMUF9ETUEgaW4gM2M1MDUuaC4KKworVGhlIGRyaXZlciB3aWxsIHdhcm4geW91IGlmIGl0IGhhcyB0byBmYWxsIGJhY2sgb24gdGhlIGNvbXBpbGVkIGluCitkZWZhdWx0IERNQSBjaGFubmVsLiAKKworSWYgbm8gYmFzZSBhZGRyZXNzIGlzIGdpdmVuIGF0IGJvb3QgdGltZSwgdGhlIGRyaXZlciB3aWxsIGF1dG9wcm9iZQorcG9ydHMgMHgzMDAsIDB4MjgwIGFuZCAweDMxMCAoaW4gdGhhdCBvcmRlcikuICBJZiBubyBJUlEgaXMgZ2l2ZW4sIHRoZSBkcml2ZXIKK3dpbGwgdHJ5IHRvIHByb2JlIGZvciBpdC4KKworVGhlIGRyaXZlciBjYW4gYmUgdXNlZCBhcyBhIGxvYWRhYmxlIG1vZHVsZS4gIFNlZSBuZXQtbW9kdWxlcy50eHQgZm9yIGRldGFpbHMKK29mIHRoZSBwYXJhbWV0ZXJzIGl0IGNhbiB0YWtlLiAgCisKK1RoZW9yZXRpY2FsbHksIG9uZSBpbnN0YW5jZSBvZiB0aGUgZHJpdmVyIGNhbiBub3cgcnVuIG11bHRpcGxlIGNhcmRzLAoraW4gdGhlIHN0YW5kYXJkIHdheSAod2hlbiBsb2FkaW5nIGEgbW9kdWxlLCBzYXkgIm1vZHByb2JlIDNjNTA1Citpbz0weDMwMCwweDM0MCBpcnE9MTAsMTEgZG1hPTYsNyIgb3Igd2hhdGV2ZXIpLiAgSSBoYXZlIG5vdCB0ZXN0ZWQKK3RoaXMsIHRob3VnaC4KKworVGhlIGRyaXZlciBtYXkgbm93IHN1cHBvcnQgcmV2aXNpb24gMiBoYXJkd2FyZTsgdGhlIGRlcGVuZGVuY3kgb24KK2JlaW5nIGFibGUgdG8gcmVhZCB0aGUgaG9zdCBjb250cm9sIHJlZ2lzdGVyIGhhcyBiZWVuIHJlbW92ZWQuICBUaGlzCitpcyBhbHNvIHVudGVzdGVkLCBzaW5jZSBJIGRvbid0IGhhdmUgYSBzdWl0YWJsZSBjYXJkLgorCitLbm93biBwcm9ibGVtczoKKyBJIHN0aWxsIHNlZSAiRE1BIHVwbG9hZCB0aW1lZCBvdXQiIG1lc3NhZ2VzIGZyb20gdGltZSB0byB0aW1lLiAgVGhlc2UKK3NlZW0gdG8gYmUgZmFpcmx5IG5vbi1mYXRhbCB0aG91Z2guCisgVGhlIGNhcmQgaXMgb2xkIGFuZCBzbG93LgorCitUbyBkbzoKKyBJbXByb3ZlIHByb2JlL3NldHVwIGNvZGUKKyBUZXN0IG11bHRpY2FzdCBhbmQgcHJvbWlzY3VvdXMgb3BlcmF0aW9uCisKK0F1dGhvcnM6CisgVGhlIGRyaXZlciBpcyBtYWlubHkgd3JpdHRlbiBieSBDcmFpZyBTb3V0aGVyZW4sIGVtYWlsCisgPGNyYWlnc0BpbmVsdWtpLmFwYW5hLm9yZy5hdT4uCisgUGFydHMgb2YgdGhlIGRyaXZlciAoYWRhcHRpbmcgdGhlIGRyaXZlciB0byAxLjEuNCsga2VybmVscywKKyBJUlEvYWRkcmVzcyBkZXRlY3Rpb24sIHNvbWUgY2hhbmdlcykgYW5kIHRoaXMgUkVBRE1FIGJ5CisgSnVoYSBMYWlobyA8amxhaWhvQGljaGFvcy5udWxsbmV0LmZpPi4KKyBETUEgbW9kZSwgbW9yZSBmaXhlcywgZXRjLCBieSBQaGlsaXAgQmx1bmRlbGwgPHBqYjI3QGNhbS5hYy51az4KKyBNdWx0aWNhcmQgc3VwcG9ydCwgU29mdHdhcmUgY29uZmlndXJhYmxlIERNQSwgZXRjLiwgYnkKKyBDaHJpc3RvcGhlciBDb2xsaW5zIDxjY29sbGluc0BwY3VnLm9yZy5hdT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwOS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2E5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDkudHh0CkBAIC0wLDAgKzEsMjEwIEBACitMaW51eCBhbmQgdGhlIDNDb20gRXRoZXJMaW5rIElJSSBTZXJpZXMgRXRoZXJjYXJkcyAoZHJpdmVyIHYxLjE4YyBhbmQgaGlnaGVyKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGluc3RydWN0aW9ucyBhbmQgY2F2ZWF0cyBmb3IgdjEuMThjIGFuZCBoaWdoZXIgdmVyc2lvbnMKK29mIHRoZSAzYzUwOSBkcml2ZXIuIFlvdSBzaG91bGQgbm90IHVzZSB0aGUgZHJpdmVyIHdpdGhvdXQgcmVhZGluZyB0aGlzIGZpbGUuCisKK3JlbGVhc2UgMS4wCisyOCBGZWJydWFyeSAyMDAyCitDdXJyZW50IG1haW50YWluZXIgKGNvcnJlY3Rpb25zIHRvKToKKyAgRGF2aWQgUnVnZ2llcm8gPGpkckBmYXJmYWxsZS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKDApIEludHJvZHVjdGlvbgorCitUaGUgZm9sbG93aW5nIGFyZSBub3RlcyBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIDNDb20gRXRoZXJMaW5rIElJSSBzZXJpZXMKK2V0aGVyY2FyZHMgaW4gTGludXguIFRoZXNlIGNhcmRzIGFyZSBjb21tb25seSBrbm93biBieSB0aGUgbW9zdCB3aWRlbHktdXNlZAorY2FyZCdzIDNDb20gbW9kZWwgbnVtYmVyLCAzYzUwOS4gVGhleSBhcmUgYWxsIDEwbWIvcyBJU0EtYnVzIGNhcmRzIGFuZCBzaG91bGRuJ3QKK2JlIChidXQgc29tZXRpbWVzIGFyZSkgY29uZnVzZWQgd2l0aCB0aGUgc2ltaWxhcmx5LW51bWJlcmVkIFBDSS1idXMgIjNjOTA1IgorKGFrYSAiVm9ydGV4IiBvciAiQm9vbWVyYW5nIikgc2VyaWVzLiAgS2VybmVsIHN1cHBvcnQgZm9yIHRoZSAzYzUwOSBmYW1pbHkgaXMKK3Byb3ZpZGVkIGJ5IHRoZSBtb2R1bGUgM2M1MDkuYywgd2hpY2ggaGFzIGNvZGUgdG8gc3VwcG9ydCBhbGwgb2YgdGhlIGZvbGxvd2luZworbW9kZWxzOgorCisgIDNjNTA5IChvcmlnaW5hbCBJU0EgY2FyZCkKKyAgM2M1MDlCIChsYXRlciByZXZpc2lvbiBvZiB0aGUgSVNBIGNhcmQ7IHN1cHBvcnRzIGZ1bGwtZHVwbGV4KQorICAzYzU4OSAoUENNQ0lBKQorICAzYzU4OUIgKGxhdGVyIHJldmlzaW9uIG9mIHRoZSAzYzU4OTsgc3VwcG9ydHMgZnVsbC1kdXBsZXgpCisgIDNjNTI5IChNQ0EpCisgIDNjNTc5IChFSVNBKQorCitMYXJnZSBwb3J0aW9ucyBvZiB0aGlzIGRvY3VtZW50YXRpb24gd2VyZSBoZWF2aWx5IGJvcnJvd2VkIGZyb20gdGhlIGd1aWRlCit3cml0dGVuIHRoZSBvcmlnaW5hbCBhdXRob3Igb2YgdGhlIDNjNTA5IGRyaXZlciwgRG9uYWxkIEJlY2tlci4gVGhlIG1hc3RlcgorY29weSBvZiB0aGF0IGRvY3VtZW50LCB3aGljaCBjb250YWlucyBub3RlcyBvbiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLAorY3VycmVudGx5IHJlc2lkZXMgb24gU2N5bGQgd2ViIHNlcnZlcjogaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay8zYzUwOS5odG1sLgorCisKKygxKSBTcGVjaWFsIERyaXZlciBGZWF0dXJlcworCitPdmVycmlkaW5nIGNhcmQgc2V0dGluZ3MKKworVGhlIGRyaXZlciBhbGxvd3MgYm9vdC0gb3IgbG9hZC10aW1lIG92ZXJyaWRpbmcgb2YgdGhlIGNhcmQncyBkZXRlY3RlZCBJT0FERFIsCitJUlEsIGFuZCB0cmFuc2NlaXZlciBzZXR0aW5ncywgYWx0aG91Z2ggdGhpcyBjYXBhYmlsaXR5IHNob3VsZG4ndCBnZW5lcmFsbHkgYmUKK25lZWRlZCBleGNlcHQgdG8gZW5hYmxlIGZ1bGwtZHVwbGV4IG1vZGUgKHNlZSBiZWxvdykuIEFuIGV4YW1wbGUgb2YgdGhlIHN5bnRheAorZm9yIExJTE8gcGFyYW1ldGVycyBmb3IgZG9pbmcgdGhpczoKKworICAgIGV0aGVyPTEwLDB4MzEwLDMsMHgzYzUwOSxldGgwIAorCitUaGlzIGNvbmZpZ3VyZXMgdGhlIGZpcnN0IGZvdW5kIDNjNTA5IGNhcmQgZm9yIElSUSAxMCwgYmFzZSBJL08gMHgzMTAsIGFuZAordHJhbnNjZWl2ZXIgdHlwZSAzICgxMGJhc2UyKS4gVGhlIGZsYWcgIjB4M2M1MDkiIG11c3QgYmUgc2V0IHRvIGF2b2lkIGNvbmZsaWN0cword2l0aCBvdGhlciBjYXJkIHR5cGVzIHdoZW4gb3ZlcnJpZGluZyB0aGUgSS9PIGFkZHJlc3MuIFdoZW4gdGhlIGRyaXZlciBpcworbG9hZGVkIGFzIGEgbW9kdWxlLCBvbmx5IHRoZSBJUlEgYW5kIHRyYW5zY2VpdmVyIHNldHRpbmcgbWF5IGJlIG92ZXJyaWRkZW4uCitGb3IgZXhhbXBsZSwgc2V0dGluZyB0d28gY2FyZHMgdG8gMTBiYXNlMi9JUlExMCBhbmQgQVVJL0lSUTExIGlzIGRvbmUgYnkgdXNpbmcKK3RoZSB4Y3ZyIGFuZCBpcnEgbW9kdWxlIG9wdGlvbnM6CisKKyAgIG9wdGlvbnMgM2M1MDkgeGN2cj0zLDEgaXJxPTEwLDExCisKKworKDIpIEZ1bGwtZHVwbGV4IG1vZGUKKworVGhlIHYxLjE4YyBkcml2ZXIgYWRkZWQgc3VwcG9ydCBmb3IgdGhlIDNjNTA5QidzIGZ1bGwtZHVwbGV4IGNhcGFiaWxpdGllcy4KK0luIG9yZGVyIHRvIGVuYWJsZSBhbmQgc3VjY2Vzc2Z1bGx5IHVzZSBmdWxsLWR1cGxleCBtb2RlLCB0aHJlZSBjb25kaXRpb25zCittdXN0IGJlIG1ldDogCisKKyhhKSBZb3UgbXVzdCBoYXZlIGEgRXRoZXJsaW5rIElJSSBjYXJkIG1vZGVsIHdob3NlIGhhcmR3YXJlIHN1cHBvcnRzIGZ1bGwtCitkdXBsZXggb3BlcmF0aW9ucy4gQ3VycmVudGx5LCB0aGUgb25seSBtZW1iZXJzIG9mIHRoZSAzYzUwOSBmYW1pbHkgdGhhdCBhcmUKK3Bvc2l0aXZlbHkga25vd24gdG8gc3VwcG9ydCBmdWxsLWR1cGxleCBhcmUgdGhlIDNjNTA5QiAoSVNBIGJ1cykgYW5kIDNjNTg5QgorKFBDTUNJQSkgY2FyZHMuIENhcmRzIHdpdGhvdXQgdGhlICJCIiBtb2RlbCBkZXNpZ25hdGlvbiBkbyAqbm90KiBzdXBwb3J0CitmdWxsLWR1cGxleCBtb2RlOyB0aGVzZSBpbmNsdWRlIHRoZSBvcmlnaW5hbCAzYzUwOSAobm8gIkIiKSwgdGhlIG9yaWdpbmFsCiszYzU4OSwgdGhlIDNjNTI5IChNQ0EgYnVzKSwgYW5kIHRoZSAzYzU3OSAoRUlTQSBidXMpLgorCisoYikgWW91IG11c3QgYmUgdXNpbmcgeW91ciBjYXJkJ3MgMTBiYXNlVCB0cmFuc2NlaXZlciAoaS5lLiwgdGhlIFJKLTQ1Citjb25uZWN0b3IpLCBub3QgaXRzIEFVSSAodGhpY2stbmV0KSBvciAxMGJhc2UyICh0aGluLW5ldC9jb2F4KSBpbnRlcmZhY2VzLgorQVVJIGFuZCAxMGJhc2UyIG5ldHdvcmsgY2FibGluZyBpcyBwaHlzaWNhbGx5IGluY2FwYWJsZSBvZiBmdWxsLWR1cGxleAorb3BlcmF0aW9uLgorCisoYykgTW9zdCBpbXBvcnRhbnRseSwgeW91ciAzYzUwOUIgbXVzdCBiZSBjb25uZWN0ZWQgdG8gYSBsaW5rIHBhcnRuZXIgdGhhdCBpcworaXRzZWxmIGZ1bGwtZHVwbGV4IGNhcGFibGUuIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBvbmUgb2YgdHdvIHRoaW5nczogYSBmdWxsLQorZHVwbGV4LWNhcGFibGUgIEV0aGVybmV0IHN3aXRjaCAoKm5vdCogYSBodWIpLCBvciBhIGZ1bGwtZHVwbGV4LWNhcGFibGUgTklDIG9uCithbm90aGVyIHN5c3RlbSB0aGF0J3MgY29ubmVjdGVkIGRpcmVjdGx5IHRvIHRoZSAzYzUwOUIgdmlhIGEgY3Jvc3NvdmVyIGNhYmxlLgorIAorLy8vLy9FeHRyZW1lbHkgaW1wb3J0YW50IGNhdXRpb24gY29uY2VybmluZyBmdWxsLWR1cGxleCBtb2RlLy8vLy8KK1VuZGVyc3RhbmQgdGhhdCB0aGUgM2M1MDlCJ3MgaGFyZHdhcmUncyBmdWxsLWR1cGxleCBzdXBwb3J0IGlzIG11Y2ggbW9yZQorbGltaXRlZCB0aGFuIHRoYXQgcHJvdmlkZSBieSBtb3JlIG1vZGVybiBuZXR3b3JrIGludGVyZmFjZSBjYXJkcy4gQWx0aG91Z2gKK2F0IHRoZSBwaHlzaWNhbCBsYXllciBvZiB0aGUgbmV0d29yayBpdCBmdWxseSBzdXBwb3J0cyBmdWxsLWR1cGxleCBvcGVyYXRpb24sCit0aGUgY2FyZCB3YXMgZGVzaWduZWQgYmVmb3JlIHRoZSBjdXJyZW50IEV0aGVybmV0IGF1dG8tbmVnb3RpYXRpb24gKE4td2F5KQorc3BlYyB3YXMgd3JpdHRlbi4gVGhpcyBtZWFucyB0aGF0IHRoZSAzYzUwOUIgZmFtaWx5ICoqKmNhbm5vdCBhbmQgd2lsbCBub3QKK2F1dG8tbmVnb3RpYXRlIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbiB3aXRoIGl0cyBsaW5rIHBhcnRuZXIgdW5kZXIgYW55CitjaXJjdW1zdGFuY2VzLCBubyBtYXR0ZXIgaG93IGl0IGlzIGluaXRpYWxpemVkKioqLiBJZiB0aGUgZnVsbC1kdXBsZXggbW9kZQorb2YgdGhlIDNjNTA5QiBpcyBlbmFibGVkLCBpdHMgbGluayBwYXJ0bmVyIHdpbGwgdmVyeSBsaWtlbHkgbmVlZCB0byBiZQoraW5kZXBlbmRlbnRseSBfZm9yY2VkXyBpbnRvIGZ1bGwtZHVwbGV4IG1vZGUgYXMgd2VsbDsgb3RoZXJ3aXNlIHZhcmlvdXMgbmFzdHkKK2ZhaWx1cmVzIHdpbGwgb2NjdXIgLSBhdCB0aGUgdmVyeSBsZWFzdCwgeW91J2xsIHNlZSBtYXNzaXZlIG51bWJlcnMgb2YgcGFja2V0Citjb2xsaXNpb25zLiBUaGlzIGlzIG9uZSBvZiB2ZXJ5IHJhcmUgY2lyY3Vtc3RhbmNlcyB3aGVyZSBkaXNhYmxpbmcgYXV0by0KK25lZ290aWF0aW9uIGFuZCBmb3JjaW5nIHRoZSBkdXBsZXggbW9kZSBvZiBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgb3Igc3dpdGNoCit3b3VsZCBldmVyIGJlIG5lY2Vzc2FyeSBvciBkZXNpcmFibGUuCisKKworKDMpIEF2YWlsYWJsZSBUcmFuc2NlaXZlciBUeXBlcworCitGb3IgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciB2MS4xOGMgYW5kIGFib3ZlLCB0aGUgYXZhaWxhYmxlIHRyYW5zY2VpdmVyIHR5cGVzIGFyZToKKyAKKzAgIHRyYW5zY2VpdmVyIHR5cGUgZnJvbSBFRVBST00gY29uZmlnIChub3JtYWxseSAxMGJhc2VUKTsgZm9yY2UgaGFsZi1kdXBsZXgKKzEgIEFVSSAodGhpY2stbmV0IC8gREIxNSBjb25uZWN0b3IpCisyICAodW5kZWZpbmVkKQorMyAgMTBiYXNlMiAodGhpbi1uZXQgPT0gY29heCAvIEJOQyBjb25uZWN0b3IpCis0ICAxMGJhc2VUIChSSi00NSBjb25uZWN0b3IpOyBmb3JjZSBoYWxmLWR1cGxleCBtb2RlCis4ICB0cmFuc2NlaXZlciB0eXBlIGFuZCBkdXBsZXggbW9kZSB0YWtlbiBmcm9tIGNhcmQncyBFRVBST00gY29uZmlnIHNldHRpbmdzCisxMiAxMGJhc2VUIChSSi00NSBjb25uZWN0b3IpOyBmb3JjZSBmdWxsLWR1cGxleCBtb2RlCisKK1ByaW9yIHRvIGRyaXZlciB2ZXJzaW9uIDEuMThjLCBvbmx5IHRyYW5zY2VpdmVyIGNvZGVzIDAtNCB3ZXJlIHN1cHBvcnRlZC4gTm90ZQordGhhdCB0aGUgbmV3IHRyYW5zY2VpdmVyIGNvZGVzIDggYW5kIDEyIGFyZSB0aGUgKm9ubHkqIG9uZXMgdGhhdCB3aWxsIGVuYWJsZQorZnVsbC1kdXBsZXggbW9kZSwgbm8gbWF0dGVyIHdoYXQgdGhlIGNhcmQncyBkZXRlY3RlZCBFRVBST00gc2V0dGluZ3MgbWlnaHQgYmUuCitUaGlzIGluc3VyZWQgdGhhdCBtZXJlbHkgdXBncmFkaW5nIHRoZSBkcml2ZXIgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24gd291bGQKK25ldmVyIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGZ1bGwtZHVwbGV4IG1vZGUgaW4gYW4gZXhpc3RpbmcgaW5zdGFsbGF0aW9uOworaXQgbXVzdCBhbHdheXMgYmUgZXhwbGljaXRseSBlbmFibGVkIHZpYSBvbmUgb2YgdGhlc2UgY29kZSBpbiBvcmRlciB0byBiZQorYWN0aXZhdGVkLgorICAKKworKDRhKSBJbnRlcnByZXRhdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBhbmQgY29tbW9uIHByb2JsZW1zCisKK0Vycm9yIE1lc3NhZ2VzCisKK2V0aDA6IEluZmluaXRlIGxvb3AgaW4gaW50ZXJydXB0LCBzdGF0dXMgMjAxMS4gCitUaGVzZSBhcmUgIm1vc3RseSBoYXJtbGVzcyIgbWVzc2FnZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGRyaXZlciBoYWQgdG9vIG11Y2gKK3dvcmsgZHVyaW5nIHRoYXQgaW50ZXJydXB0IGN5Y2xlLiBXaXRoIGEgc3RhdHVzIG9mIDB4MjAxMSB5b3UgYXJlIHJlY2VpdmluZworcGFja2V0cyBmYXN0ZXIgdGhhbiB0aGV5IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGNhcmQuIFRoaXMgc2hvdWxkIGJlIHJhcmUKK29yIGltcG9zc2libGUgaW4gbm9ybWFsIG9wZXJhdGlvbi4gUG9zc2libGUgY2F1c2VzIG9mIHRoaXMgZXJyb3IgcmVwb3J0IGFyZToKKyAKKyAgIC0gYSAiZ3JlZW4iIG1vZGUgZW5hYmxlZCB0aGF0IHNsb3dzIHRoZSBwcm9jZXNzb3IgZG93biB3aGVuIHRoZXJlIGlzIG5vCisgICAgIGtleWJvYXJkIGFjdGl2aXRpeS4gCisKKyAgIC0gc29tZSBvdGhlciBkZXZpY2Ugb3IgZGV2aWNlIGRyaXZlciBob2dnaW5nIHRoZSBidXMgb3IgZGlzYWJsaW5nIGludGVycnVwdHMuCisgICAgIENoZWNrIC9wcm9jL2ludGVycnVwdHMgZm9yIGV4Y2Vzc2l2ZSBpbnRlcnJ1cHQgY291bnRzLiBUaGUgdGltZXIgdGljaworICAgICBpbnRlcnJ1cHQgc2hvdWxkIGFsd2F5cyBiZSBpbmNyZW1lbnRpbmcgZmFzdGVyIHRoYW4gdGhlIG90aGVycy4gCisKK05vIHJlY2VpdmVkIHBhY2tldHMgCitJZiBhIDNjNTA5LCAzYzU2MiBvciAzYzU4OSBjYW4gc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0IHBhY2tldHMsIGJ1dCBuZXZlcgorcmVjZWl2ZXMgcGFja2V0cyAoYXMgcmVwb3J0ZWQgYnkgL3Byb2MvbmV0L2RldiBvciAnaWZjb25maWcnKSB5b3UgbGlrZWx5CitoYXZlIGFuIGludGVycnVwdCBsaW5lIHByb2JsZW0uIENoZWNrIC9wcm9jL2ludGVycnVwdHMgdG8gdmVyaWZ5IHRoYXQgdGhlCitjYXJkIGlzIGFjdHVhbGx5IGdlbmVyYXRpbmcgaW50ZXJydXB0cy4gSWYgdGhlIGludGVycnVwdCBjb3VudCBpcyBub3QKK2luY3JlYXNpbmcgeW91IGxpa2VseSBoYXZlIGEgcGh5c2ljYWwgY29uZmxpY3Qgd2l0aCB0d28gZGV2aWNlcyB0cnlpbmcgdG8KK3VzZSB0aGUgc2FtZSBJU0EgSVJRIGxpbmUuIFRoZSBjb21tb24gY29uZmxpY3QgaXMgd2l0aCBhIHNvdW5kIGNhcmQgb24gSVJRMTAKK29yIElSUTUsIGFuZCB0aGUgZWFzaWVzdCBzb2x1dGlvbiBpcyB0byBtb3ZlIHRoZSAzYzUwOSB0byBhIGRpZmZlcmVudAoraW50ZXJydXB0IGxpbmUuIElmIHRoZSBkZXZpY2UgaXMgcmVjZWl2aW5nIHBhY2tldHMgYnV0ICdwaW5nJyBkb2Vzbid0IHdvcmssCit5b3UgaGF2ZSBhIHJvdXRpbmcgcHJvYmxlbS4KKworVHggQ2FycmllciBFcnJvcnMgUmVwb3J0ZWQgaW4gL3Byb2MvbmV0L2RldiAKK0lmIGFuIEV0aGVyTGluayBJSUkgYXBwZWFycyB0byB0cmFuc21pdCBwYWNrZXRzLCBidXQgdGhlICJUeCBjYXJyaWVyIGVycm9ycyIKK2ZpZWxkIGluIC9wcm9jL25ldC9kZXYgaW5jcmVtZW50cyBhcyBxdWlja2x5IGFzIHRoZSBUeCBwYWNrZXQgY291bnQsIHlvdQorbGlrZWx5IGhhdmUgYW4gdW50ZXJtaW5hdGVkIG5ldHdvcmsgb3IgdGhlIGluY29ycmVjdCBtZWRpYSB0cmFuc2NlaXZlciBzZWxlY3RlZC4gCisKKzNjNTA5QiBjYXJkIGlzIG5vdCBkZXRlY3RlZCBvbiBtYWNoaW5lcyB3aXRoIGFuIElTQSBQblAgQklPUy4gCitXaGlsZSB0aGUgdXBkYXRlZCBkcml2ZXIgd29ya3Mgd2l0aCBtb3N0IFBuUCBCSU9TIHByb2dyYW1zLCBpdCBkb2VzIG5vdCB3b3JrCit3aXRoIGFsbC4gVGhpcyBjYW4gYmUgZml4ZWQgYnkgZGlzYWJsaW5nIFBuUCBzdXBwb3J0IHVzaW5nIHRoZSAzQ29tLXN1cHBsaWVkCitzZXR1cCBwcm9ncmFtLiAKKworM2M1MDkgY2FyZCBpcyBub3QgZGV0ZWN0ZWQgb24gb3ZlcmNsb2NrZWQgbWFjaGluZXMgCitJbmNyZWFzZSB0aGUgZGVsYXkgdGltZSBpbiBpZF9yZWFkX2VlcHJvbSgpIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUsIDUwMCwKK3RvIGFuIGFic3VyZGx5IGhpZ2ggdmFsdWUsIHN1Y2ggYXMgNTAwMC4gCisKKworKDRiKSBEZWNvZGluZyBTdGF0dXMgYW5kIEVycm9yIE1lc3NhZ2VzCisKK1RoZSBiaXRzIGluIHRoZSBtYWluIHN0YXR1cyByZWdpc3RlciBhcmU6IAorCit2YWx1ZSAJZGVzY3JpcHRpb24KKzB4MDEgCUludGVycnVwdCBsYXRjaAorMHgwMiAJVHggb3ZlcnJ1biwgb3IgUnggdW5kZXJydW4KKzB4MDQgCVR4IGNvbXBsZXRlCisweDA4IAlUeCBGSUZPIHJvb20gYXZhaWxhYmxlCisweDEwIAlBIGNvbXBsZXRlIFJ4IHBhY2tldCBoYXMgYXJyaXZlZAorMHgyMCAJQSBSeCBwYWNrZXQgaGFzIHN0YXJ0ZWQgdG8gYXJyaXZlCisweDQwIAlUaGUgZHJpdmVyIGhhcyByZXF1ZXN0ZWQgYW4gaW50ZXJydXB0CisweDgwIAlTdGF0aXN0aWNzIGNvdW50ZXIgbmVhcmx5IGZ1bGwKKworVGhlIGJpdHMgaW4gdGhlIHRyYW5zbWl0IChUeCkgc3RhdHVzIHdvcmQgYXJlOiAKKwordmFsdWUgCWRlc2NyaXB0aW9uCisweDAyIAlPdXQtb2Ytd2luZG93IGNvbGxpc2lvbi4KKzB4MDQgCVN0YXR1cyBzdGFjayBvdmVyZmxvdyAobm9ybWFsbHkgaW1wb3NzaWJsZSkuCisweDA4IAkxNiBjb2xsaXNpb25zLgorMHgxMCAJVHggdW5kZXJydW4gKG5vdCBlbm91Z2ggUENJIGJ1cyBiYW5kd2lkdGgpLgorMHgyMCAJVHggamFiYmVyLgorMHg0MCAJVHggaW50ZXJydXB0IHJlcXVlc3RlZC4KKzB4ODAgCVN0YXR1cyBpcyB2YWxpZCAodGhpcyBzaG91bGQgYWx3YXlzIGJlIHNldCkuCisKKworV2hlbiBhIHRyYW5zbWl0IGVycm9yIG9jY3VycyB0aGUgZHJpdmVyIHByb2R1Y2VzIGEgc3RhdHVzIG1lc3NhZ2Ugc3VjaCBhcyAKKworICAgZXRoMDogVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyByZWdpc3RlciA4MgorCitUaGUgdHdvIHZhbHVlcyB0eXBpY2FsbHkgc2VlbiBoZXJlIGFyZToKKworMHg4MiAKK091dCBvZiB3aW5kb3cgY29sbGlzaW9uLiBUaGlzIHR5cGljYWxseSBvY2N1cnMgd2hlbiBzb21lIG90aGVyIEV0aGVybmV0Citob3N0IGlzIGluY29ycmVjdGx5IHNldCB0byBmdWxsIGR1cGxleCBvbiBhIGhhbGYgZHVwbGV4IG5ldHdvcmsuIAorCisweDg4IAorMTYgY29sbGlzaW9ucy4gVGhpcyB0eXBpY2FsbHkgb2NjdXJzIHdoZW4gdGhlIG5ldHdvcmsgaXMgZXhjZXB0aW9uYWxseSBidXN5CitvciB3aGVuIGFub3RoZXIgaG9zdCBkb2Vzbid0IGNvcnJlY3RseSBiYWNrIG9mZiBhZnRlciBhIGNvbGxpc2lvbi4gSWYgdGhpcworZXJyb3IgaXMgbWl4ZWQgd2l0aCAweDgyIGVycm9ycyBpdCBpcyB0aGUgcmVzdWx0IG9mIGEgaG9zdCBpbmNvcnJlY3RseSBzZXQKK3RvIGZ1bGwgZHVwbGV4IChzZWUgYWJvdmUpLgorCitCb3RoIG9mIHRoZXNlIGVycm9ycyBhcmUgdGhlIHJlc3VsdCBvZiBuZXR3b3JrIHByb2JsZW1zIHRoYXQgc2hvdWxkIGJlCitjb3JyZWN0ZWQuIFRoZXkgZG8gbm90IHJlcHJlc2VudCBkcml2ZXIgbWFsZnVuY3Rpb24uCisKKworKDUpIFJldmlzaW9uIGhpc3RvcnkgKHRoaXMgZmlsZSkKKworMjhGZWIwMiB2MS4wICBEUiAgIE5ldzsgbWFqb3IgcG9ydGlvbnMgYmFzZWQgb24gQmVja2VyIG9yaWdpbmFsIDNjNTA5IGRvY3MKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzZwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy82cGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlZDJiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy82cGFjay50eHQKQEAgLTAsMCArMSwxNzUgQEAKK1RoaXMgaXMgdGhlIDZwYWNrLW1pbmktSE9XVE8sIHdyaXR0ZW4gYnkKKworQW5kcmVhcyBL9m5zZ2VuIERHM0tRCitJbnRlcm5ldDogYWprQGllaGsucnd0aC1hYWNoZW4uZGUKK0FNUFItbmV0OiBkZzNrcUBkYjBwcmEuYW1wci5vcmcKK0FYLjI1OiAgICBkZzNrcUBkYjBhY2guI25ydy5kZXUuZXUKKworTGFzdCB1cGRhdGU6IEFwcmlsIDcsIDE5OTgKKworMS4gV2hhdCBpcyA2cGFjaywgYW5kIHdoYXQgYXJlIHRoZSBhZHZhbnRhZ2VzIHRvIEtJU1M/CisKKzZwYWNrIGlzIGEgdHJhbnNtaXNzaW9uIHByb3RvY29sIGZvciBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIFBDIGFuZAordGhlIFROQyBvdmVyIGEgc2VyaWFsIGxpbmUuIEl0IGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIEtJU1MuCisKKzZwYWNrIGhhcyB0d28gbWFqb3IgYWR2YW50YWdlczoKKy0gVGhlIFBDIGlzIGdpdmVuIGZ1bGwgY29udHJvbCBvdmVyIHRoZSByYWRpbworICBjaGFubmVsLiBTcGVjaWFsIGNvbnRyb2wgZGF0YSBpcyBleGNoYW5nZWQgYmV0d2VlbiB0aGUgUEMgYW5kIHRoZSBUTkMgc28KKyAgdGhhdCB0aGUgUEMga25vd3MgYXQgYW55IHRpbWUgaWYgdGhlIFROQyBpcyByZWNlaXZpbmcgZGF0YSwgaWYgYSBUTkMKKyAgYnVmZmVyIHVuZGVycnVuIG9yIG92ZXJydW4gaGFzIG9jY3VycmVkLCBpZiB0aGUgUFRUIGlzCisgIHNldCBhbmQgc28gb24uIFRoaXMgY29udHJvbCBkYXRhIGlzIHByb2Nlc3NlZCBhdCBhIGhpZ2hlciBwcmlvcml0eSB0aGFuCisgIG5vcm1hbCBkYXRhLCBzbyBhIGRhdGEgc3RyZWFtIGNhbiBiZSBpbnRlcnJ1cHRlZCBhdCBhbnkgdGltZSB0byBpc3N1ZSBhbgorICBpbXBvcnRhbnQgZXZlbnQuIFRoaXMgaGVscHMgdG8gaW1wcm92ZSB0aGUgY2hhbm5lbCBhY2Nlc3MgYW5kIHRpbWluZyAKKyAgYWxnb3JpdGhtcyBhcyBldmVyeXRoaW5nIGlzIGNvbXB1dGVkIGluIHRoZSBQQy4gSXQgd291bGQgZXZlbiBiZSBwb3NzaWJsZSAKKyAgdG8gZXhwZXJpbWVudCB3aXRoIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tIHRoZSBrbm93biBDU01BIGFuZCAKKyAgREFNQSBjaGFubmVsIGFjY2VzcyBtZXRob2RzLgorICBUaGlzIGtpbmQgb2YgcmVhbC10aW1lIGNvbnRyb2wgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gc3VwcGx5IHNldmVyYWwKKyAgVE5DcyB0aGF0IGFyZSBjb25uZWN0ZWQgYmV0d2VlbiBlYWNoIG90aGVyIGFuZCB0aGUgUEMgYnkgYSBkYWlzeSBjaGFpbgorICAoaG93ZXZlciwgdGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGJ5IHRoZSBMaW51eCA2cGFjayBkcml2ZXIpLgorCistIEVhY2ggcGFja2V0IHRyYW5zZmVycmVkIG92ZXIgdGhlIHNlcmlhbCBsaW5lIGlzIHN1cHBsaWVkIHdpdGggYSBjaGVja3N1bSwKKyAgc28gaXQgaXMgZWFzeSB0byBkZXRlY3QgZXJyb3JzIGR1ZSB0byBwcm9ibGVtcyBvbiB0aGUgc2VyaWFsIGxpbmUuCisgIFJlY2VpdmVkIHBhY2tldHMgdGhhdCBhcmUgY29ycnVwdCBhcmUgbm90IHBhc3NlZCBvbiB0byB0aGUgQVguMjUgbGF5ZXIuCisgIERhbWFnZWQgcGFja2V0cyB0aGF0IHRoZSBUTkMgaGFzIHJlY2VpdmVkIGZyb20gdGhlIFBDIGFyZSBub3QgdHJhbnNtaXR0ZWQuCisKK01vcmUgZGV0YWlscyBhYm91dCA2cGFjayBhcmUgZGVzY3JpYmVkIGluIHRoZSBmaWxlIDZwYWNrLnBzIHRoYXQgaXMgbG9jYXRlZAoraW4gdGhlIGRvYyBkaXJlY3Rvcnkgb2YgdGhlIEFYLjI1IHV0aWxpdGllcyBwYWNrYWdlLgorCisyLiBXaG8gaGFzIGRldmVsb3BlZCB0aGUgNnBhY2sgcHJvdG9jb2w/CisKK1RoZSA2cGFjayBwcm90b2NvbCBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgRWtraSBQbGljaHQgREY0T1IsIEhlbm5pbmcgUmVjaAorREY5SUMgYW5kIEd1bnRlciBKb3N0IERLN1dKLiBBIGRyaXZlciBmb3IgNnBhY2ssIHdyaXR0ZW4gYnkgR3VudGVyIEpvc3QgYW5kCitNYXR0aGlhcyBXZWx3YXJza3kgREcyRkVGLCBjb21lcyBhbG9uZyB3aXRoIHRoZSBQQyB2ZXJzaW9uIG9mIEZsZXhOZXQuCitUaGV5IGhhdmUgYWxzbyB3cml0dGVuIGEgZmlybXdhcmUgZm9yIFROQ3MgdG8gcGVyZm9ybSB0aGUgNnBhY2sKK3Byb3RvY29sIChzZWUgc2VjdGlvbiA0IGJlbG93KS4KKworMy4gV2hlcmUgY2FuIEkgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiA2cGFjayBmb3IgTGludVg/CisKK0F0IHRoZSBtb21lbnQsIHRoZSA2cGFjayBzdHVmZiBjYW4gb2J0YWluZWQgdmlhIGFub255bW91cyBmdHAgZnJvbQorZGIwYm0uYXV0b21hdGlvbi5maC1hYWNoZW4uZGUuIEluIHRoZSBkaXJlY3RvcnkgL2luY29taW5nL2RnM2txLAordGhlcmUgaXMgYSBmaWxlIG5hbWVkIDZwYWNrLnRnei4KKworNC4gUHJlcGFyaW5nIHRoZSBUTkMgZm9yIDZwYWNrIG9wZXJhdGlvbgorCitUbyBiZSBhYmxlIHRvIHVzZSA2cGFjaywgYSBzcGVjaWFsIGZpcm13YXJlIGZvciB0aGUgVE5DIGlzIG5lZWRlZC4gVGhlIEVQUk9NCitvZiBhIG5ld2x5IGJvdWdodCBUTkMgZG9lcyBub3QgY29udGFpbiA2cGFjaywgc28geW91IHdpbGwgaGF2ZSB0bworcHJvZ3JhbSBhbiBFUFJPTSB5b3Vyc2VsZi4gVGhlIGltYWdlIGZpbGUgZm9yIDZwYWNrIEVQUk9NcyBzaG91bGQgYmUKK2F2YWlsYWJsZSBvbiBhbnkgcGFja2V0IHJhZGlvIGJveCB3aGVyZSBQQy9GbGV4TmV0IGNhbiBiZSBmb3VuZC4gVGhlIG5hbWUgb2YKK3RoZSBmaWxlIGlzIDZwYWNrLmJpbi4gVGhpcyBmaWxlIGlzIGNvcHlyaWdodGVkIGFuZCBtYWludGFpbmVkIGJ5IHRoZSBGbGV4TmV0Cit0ZWFtLiBJdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgdGhhdCBjb21lcyBhbG9uZword2l0aCBQQy9GbGV4TmV0LiBQbGVhc2UgZG8gbm90IGFzayBtZSBhYm91dCB0aGUgaW50ZXJuYWxzIG9mIHRoaXMgZmlsZSBhcyBJCitkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IGl0LiBJIHVzZWQgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSA2cGFjaworcHJvdG9jb2wgdG8gcHJvZ3JhbSB0aGUgTGludXggZHJpdmVyLgorCitUTkNzIGNvbnRhaW4gYSA2NGtCeXRlIEVQUk9NLCB0aGUgbG93ZXIgaGFsZiBvZiB3aGljaCBpcyB1c2VkIGZvcgordGhlIGZpcm13YXJlL0tJU1MuIFRoZSB1cHBlciBoYWxmIGlzIGVpdGhlciBlbXB0eSBvciBpcyBzb21ldGltZXMKK3Byb2dyYW1tZWQgd2l0aCBzb2Z0d2FyZSBjYWxsZWQgVEFQUi4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgVE5DCitpcyBzdXBwbGllZCB3aXRoIGEgRElQIHN3aXRjaCBzbyB5b3UgY2FuIGVhc2lseSBjaGFuZ2UgYmV0d2VlbiB0aGUKK3R3byBzeXN0ZW1zLiBXaGVuIHByb2dyYW1taW5nIGEgbmV3IEVQUk9NLCBvbmUgb2YgdGhlIHN5c3RlbXMgaXMgcmVwbGFjZWQKK2J5IDZwYWNrLiBJdCBpcyB1c2VmdWwgdG8gcmVwbGFjZSBUQVBSLCBhcyB0aGlzIHNvZnR3YXJlIGlzIHJhcmVseSB1c2VkCitub3dhZGF5cy4gSWYgeW91ciBUTkMgaXMgbm90IGVxdWlwcGVkIHdpdGggdGhlIHN3aXRjaCBtZW50aW9uZWQgYWJvdmUsIHlvdQorY2FuIGJ1aWxkIGluIG9uZSB5b3Vyc2VsZiB0aGF0IHN3aXRjaGVzIG92ZXIgdGhlIGhpZ2hlc3QgYWRkcmVzcyBwaW4KK29mIHRoZSBFUFJPTSBiZXR3ZWVuIEhJR0ggYW5kIExPVyBsZXZlbC4gQWZ0ZXIgaGF2aW5nIGluc2VydGVkIHRoZSBuZXcgRVBST00KK2FuZCBzd2l0Y2hlZCB0byA2cGFjaywgYXBwbHkgcG93ZXIgdG8gdGhlIFROQyBmb3IgYSBmaXJzdCB0ZXN0LiBUaGUgY29ubmVjdAorYW5kIHRoZSBzdGF0dXMgTEVEIGFyZSBsaXQgZm9yIGFib3V0IGEgc2Vjb25kIGlmIHRoZSBmaXJtd2FyZSBpbml0aWFsaXNlcwordGhlIFROQyBjb3JyZWN0bHkuCisKKzUuIEJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSA2cGFjayBkcml2ZXIKKworVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBrZXJuZWwgdmVyc2lvbiAyLjEuOTAuIFVzZSB3aXRoIG9sZGVyCitrZXJuZWxzIG1heSBsZWFkIHRvIGEgY29tcGlsYXRpb24gZXJyb3IgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIHRvIGEga2VybmVsCitmdW5jdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSAyLjEuOHgga2VybmVscy4KKworSG93IHRvIHR1cm4gb24gNnBhY2sgc3VwcG9ydDoKKworLSBJbiB0aGUgbGludXgga2VybmVsIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbSwgc2VsZWN0IHRoZSBjb2RlIG1hdHVyaXR5IGxldmVsCisgIG9wdGlvbnMgbWVudSBhbmQgdHVybiBvbiB0aGUgcHJvbXB0aW5nIGZvciBkZXZlbG9wbWVudCBkcml2ZXJzLgorCistIFNlbGVjdCB0aGUgYW1hdGV1ciByYWRpbyBzdXBwb3J0IG1lbnUgYW5kIHR1cm4gb24gdGhlIHNlcmlhbCBwb3J0IDZwYWNrCisgIGRyaXZlci4KKworLSBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIHRoZSBtb2R1bGVzLgorCitUbyB1c2UgdGhlIGRyaXZlciwgdGhlIGtpc3NhdHRhY2ggcHJvZ3JhbSBkZWxpdmVyZWQgd2l0aCB0aGUgQVguMjUgdXRpbGl0aWVzCitoYXMgdG8gYmUgbW9kaWZpZWQuCisKKy0gRG8gYSBjZCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgdGhlIGtpc3NhdHRhY2ggc291cmNlcy4gRWRpdCB0aGUKKyAga2lzc2F0dGFjaC5jIGZpbGUuIEF0IHRoZSB0b3AsIGluc2VydCB0aGUgZm9sbG93aW5nIGxpbmVzOgorCisgICNpZm5kZWYgTl82UEFDSworICAjZGVmaW5lIE5fNlBBQ0sgKE5fQVgyNSsxKQorICAjZW5kaWYKKworICBUaGVuIGZpbmQgdGhlIGxpbmUKKyAgIAorICBpbnQgZGlzYyA9IE5fQVgyNTsKKworICBhbmQgcmVwbGFjZSBOX0FYMjUgYnkgTl82UEFDSy4KKworLSBSZWNvbXBpbGUga2lzc2F0dGFjaC4gUmVuYW1lIGl0IHRvIHNwYXR0YWNoIHRvIGF2b2lkIGNvbmZ1c2lvbnMuCisKK0luc3RhbGxpbmcgdGhlIGRyaXZlcjoKKworLSBEbyBhbiBpbnNtb2QgNnBhY2suIExvb2sgYXQgeW91ciAvdmFyL2xvZy9tZXNzYWdlcyBmaWxlIHRvIGNoZWNrIGlmIHRoZSAKKyAgbW9kdWxlIGhhcyBwcmludGVkIGl0cyBpbml0aWFsaXphdGlvbiBtZXNzYWdlLgorCistIERvIGEgc3BhdHRhY2ggYXMgeW91IHdvdWxkIGxhdW5jaCBraXNzYXR0YWNoIHdoZW4gc3RhcnRpbmcgYSBLSVNTIHBvcnQuCisgIENoZWNrIGlmIHRoZSBrZXJuZWwgcHJpbnRzIHRoZSBtZXNzYWdlICc2cGFjazogVE5DIGZvdW5kJy4gCisKKy0gRnJvbSBoZXJlLCBldmVyeXRoaW5nIHNob3VsZCB3b3JrIGFzIGlmIHlvdSB3ZXJlIHNldHRpbmcgdXAgYSBLSVNTIHBvcnQuCisgIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgbmV0d29yayBkZXZpY2UgdGhhdCByZXByZXNlbnRzCisgIHRoZSA2cGFjayBwb3J0IGlzIGNhbGxlZCBzcCBpbnN0ZWFkIG9mIHNsIG9yIGF4LiBTbywgc3AwIHdvdWxkIGJlIHRoZQorICBmaXJzdCA2cGFjayBwb3J0LgorCitBbHRob3VnaCB0aGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiB2YXJpb3VzIHBsYXRmb3JtcywgSSBzdGlsbCBkZWNsYXJlIGl0CitBTFBIQS4gQkUgQ0FSRUZVTCEgU3luYyB5b3VyIGRpc2tzIGJlZm9yZSBpbnNtb2RpbmcgdGhlIDZwYWNrIG1vZHVsZQorYW5kIHNwYXR0YWNoaW5nLiBXYXRjaCBvdXQgaWYgeW91ciBjb21wdXRlciBiZWhhdmVzIHN0cmFuZ2VseS4gUmVhZCBzZWN0aW9uCis2IG9mIHRoaXMgZmlsZSBhYm91dCBrbm93biBwcm9ibGVtcy4KKworTm90ZSB0aGF0IHRoZSBjb25uZWN0IGFuZCBzdGF0dXMgTEVEcyBvZiB0aGUgVE5DIGFyZSBjb250cm9sbGVkIGluIGEKK2RpZmZlcmVudCB3YXkgdGhhbiB0aGV5IGFyZSB3aGVuIHRoZSBUTkMgaXMgdXNlZCB3aXRoIFBDL0ZsZXhOZXQuIFdoZW4gdXNpbmcKK0ZsZXhOZXQsIHRoZSBjb25uZWN0IExFRCBpcyBvbiBpZiB0aGVyZSBpcyBhIGNvbm5lY3Rpb247IHRoZSBzdGF0dXMgTEVEIGlzCitvbiBpZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBidWZmZXIgb2YgdGhlIFBDJ3MgQVguMjUgZW5naW5lIHRoYXQgaGFzIHRvIGJlCit0cmFuc21pdHRlZC4gVW5kZXIgTGludXgsIHRoZSA2cGFjayBsYXllciBpcyBiZXlvbmQgdGhlIEFYLjI1IGxheWVyLAorc28gdGhlIDZwYWNrIGRyaXZlciBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQgY29ubmVjdHMgb3IgZGF0YSB0aGF0CitoYXMgbm90IHlldCBiZWVuIHRyYW5zbWl0dGVkLiBUaGVyZWZvcmUgdGhlIExFRHMgYXJlIGNvbnRyb2xsZWQKK2FzIHRoZXkgYXJlIGluIEtJU1MgbW9kZTogVGhlIGNvbm5lY3QgTEVEIGlzIHR1cm5lZCBvbiBpZiBkYXRhIGlzIHRyYW5zZmVycmVkCitmcm9tIHRoZSBQQyB0byB0aGUgVE5DIG92ZXIgdGhlIHNlcmlhbCBsaW5lLCB0aGUgc3RhdHVzIExFRCBpZiBkYXRhIGlzCitzZW50IHRvIHRoZSBQQy4KKworNi4gS25vd24gcHJvYmxlbXMKKworV2hlbiB0ZXN0aW5nIHRoZSBkcml2ZXIgd2l0aCAyLjAuM3gga2VybmVscyBhbmQKK29wZXJhdGluZyB3aXRoIGRhdGEgcmF0ZXMgb24gdGhlIHJhZGlvIGNoYW5uZWwgb2YgOTYwMCBCYXVkIG9yIGhpZ2hlciwKK3RoZSBkcml2ZXIgbWF5LCBvbiBjZXJ0YWluIHN5c3RlbXMsIHNvbWV0aW1lcyBwcmludCB0aGUgbWVzc2FnZSAnNnBhY2s6CitiYWQgY2hlY2tzdW0nLCB3aGljaCBpcyBkdWUgdG8gZGF0YSBsb3NzIGlmIHRoZSBvdGhlciBzdGF0aW9uIHNlbmRzIHR3bworb3IgbW9yZSBzdWJzZXF1ZW50IHBhY2tldHMuIEkgaGF2ZSBiZWVuIHRvbGQgdGhhdCB0aGlzIGlzIGR1ZSB0byBhIHByb2JsZW0KK3dpdGggdGhlIHNlcmlhbCBkcml2ZXIgb2YgMi4wLjN4IGtlcm5lbHMuIEkgZG9uJ3Qga25vdyB5ZXQgaWYgdGhlIHByb2JsZW0KK3N0aWxsIGV4aXN0cyB3aXRoIDIuMS54IGtlcm5lbHMsIGFzIEkgaGF2ZSBoZWFyZCB0aGF0IHRoZSBzZXJpYWwgZHJpdmVyCitjb2RlIGhhcyBiZWVuIGNoYW5nZWQgd2l0aCAyLjEueC4KKworV2hlbiBzaHV0dGluZyBkb3duIHRoZSBzcCBpbnRlcmZhY2Ugd2l0aCBpZmNvbmZpZywgdGhlIGtlcm5lbCBjcmFzaGVzIGlmCit0aGVyZSBpcyBzdGlsbCBhbiBBWC4yNSBjb25uZWN0aW9uIGxlZnQgb3ZlciB3aGljaCBhbiBJUCBjb25uZWN0aW9uIHdhcworcnVubmluZywgZXZlbiBpZiB0aGF0IElQIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBjbG9zZWQuIFRoZSBwcm9ibGVtIGRvZXMgbm90CitvY2N1ciB3aGVuIHRoZXJlIGlzIGEgYmFyZSBBWC4yNSBjb25uZWN0aW9uIHN0aWxsIHJ1bm5pbmcuIEkgZG9uJ3Qga25vdyBpZgordGhpcyBpcyBhIHByb2JsZW0gb2YgdGhlIDZwYWNrIGRyaXZlciBvciBzb21ldGhpbmcgZWxzZSBpbiB0aGUga2VybmVsLgorCitUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBhcyBhIG1vZHVsZSwgbm90IHlldCBhcyBhIGtlcm5lbC1idWlsdGluIGRyaXZlci4KKworVGhlIDZwYWNrIHByb3RvY29sIHN1cHBvcnRzIGRhaXN5LWNoYWluaW5nIG9mIFROQ3MgaW4gYSB0b2tlbiByaW5nLCB3aGljaCBpcworY29ubmVjdGVkIHRvIG9uZSBzZXJpYWwgcG9ydCBvZiB0aGUgUEMuIFRoaXMgZmVhdHVyZSBpcyBub3QgaW1wbGVtZW50ZWQKK2FuZCBhdCBsZWFzdCBhdCB0aGUgbW9tZW50IEkgd29uJ3QgYmUgYWJsZSB0byBkbyBpdCBiZWNhdXNlIEkgZG8gbm90IGhhdmUKK3RoZSBvcHBvcnR1bml0eSB0byBidWlsZCBhIFROQyBkYWlzeS1jaGFpbiBhbmQgdGVzdCBpdC4KKworU29tZSBvZiB0aGUgY29tbWVudHMgaW4gdGhlIHNvdXJjZSBjb2RlIGFyZSBpbmFjY3VyYXRlLiBUaGV5IGFyZSBsZWZ0IGZyb20KK3RoZSBTTElQL0tJU1MgZHJpdmVyLCBmcm9tIHdoaWNoIHRoZSA2cGFjayBkcml2ZXIgaGFzIGJlZW4gZGVyaXZlZC4KK0kgaGF2ZW4ndCBtb2RpZmllZCBvciByZW1vdmVkIHRoZW0geWV0IC0tIHNvcnJ5ISBUaGUgY29kZSBpdHNlbGYgbmVlZHMKK3NvbWUgY2xlYW5pbmcgYW5kIG9wdGltaXppbmcuIFRoaXMgd2lsbCBiZSBkb25lIGluIGEgbGF0ZXIgcmVsZWFzZS4KKworSWYgeW91IGVuY291bnRlciBhIGJ1ZyBvciBpZiB5b3UgaGF2ZSBhIHF1ZXN0aW9uIG9yIHN1Z2dlc3Rpb24gY29uY2VybmluZyB0aGUKK2RyaXZlciwgZmVlbCBmcmVlIHRvIG1haWwgbWUsIHVzaW5nIHRoZSBhZGRyZXNzZXMgZ2l2ZW4gYXQgdGhlIGJlZ2lubmluZyBvZgordGhpcyBmaWxlLgorCitIYXZlIGZ1biEKKworQW5kcmVhcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0NvbmZpZ3VyYWJsZSBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9Db25maWd1cmFibGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljMGRkNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9Db25maWd1cmFibGUKQEAgLTAsMCArMSwzNCBAQAorCitUaGVyZSBhcmUgYSBmZXcgbmV0d29yayBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHR1bmVkIHRvIGJldHRlciBtYXRjaAordGhlIGtlcm5lbCB0byB5b3VyIHN5c3RlbSBoYXJkd2FyZSBhbmQgaW50ZW5kZWQgdXNhZ2UuIFRoZSBkZWZhdWx0cworYXJlIHVzdWFsbHkgYSBnb29kIGNob2ljZSBmb3IgOTklIG9mIHRoZSBwZW9wbGUgOTklIG9mIHRoZSB0aW1lLCBidXQKK3lvdSBzaG91bGQgYmUgYXdhcmUgdGhleSBkbyBleGlzdCBhbmQgY2FuIGJlIGNoYW5nZWQuCisKK1RoZSBjdXJyZW50IGxpc3Qgb2YgcGFyYW1ldGVycyBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGVzOgorCisJbGludXgvbmV0L1RVTkFCTEUKKwlEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorCitTb21lIG9mIHRoZXNlIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgc3lzY3RsIGludGVyZmFjZSwgYW5kIG1hbnkgbW9yZSBhcmUKK3NjaGVkdWxlZCB0byBiZSBhZGRlZCBpbiB0aGlzIHdheS4gRm9yIGV4YW1wbGUsIHNvbWUgcGFyYW1ldGVycyByZWxhdGVkIAordG8gQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sIChBUlApIGFyZSB2ZXJ5IGVhc2lseSB2aWV3ZWQgYW5kIGFsdGVyZWQuCisKKwkjIGNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvYXJwX3RpbWVvdXQKKwk2MDAwCisJIyBlY2hvIDcwMDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvYXJwX3RpbWVvdXQKKwkjIGNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvYXJwX3RpbWVvdXQKKwk3MDAwCisKK090aGVycyBhcmUgYWxyZWFkeSBhY2Nlc3NpYmxlIHZpYSB0aGUgcmVsYXRlZCB1c2VyIHNwYWNlIHByb2dyYW1zLgorRm9yIGV4YW1wbGUsIE1BWF9XSU5ET1cgaGFzIGEgZGVmYXVsdCBvZiAzMiBrIHdoaWNoIGlzIGEgZ29vZCBjaG9pY2UgZm9yCittb2Rlcm4gaGFyZHdhcmUsIGJ1dCBpZiB5b3UgaGF2ZSBhIHNsb3cgKDggYml0KSBFdGhlcm5ldCBjYXJkIGFuZC9vciBhIHNsb3cKK21hY2hpbmUsIHRoZW4gdGhpcyB3aWxsIGJlIGZhciB0b28gYmlnIGZvciB0aGUgY2FyZCB0byBrZWVwIHVwIHdpdGggZmFzdCAKK21hY2hpbmVzIHRyYW5zbWl0dGluZyBvbiB0aGUgc2FtZSBuZXQsIHJlc3VsdGluZyBpbiBvdmVycnVucyBhbmQgcmVjZWl2ZSBlcnJvcnMuCitBIHZhbHVlIG9mIGFib3V0IDQgayB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCB3aGljaCBjYW4gYmUgc2V0IHZpYToKKworCSMgcm91dGUgYWRkIC1uZXQgMTkyLjE2OC4zLjAgd2luZG93IDQwOTYKKworVGhlIHJlbWFpbmRlciBvZiB0aGVzZSBjYW4gb25seSBiZSBwcmVzZW50bHkgY2hhbmdlZCBieSBhbHRlcmluZyBhICNkZWZpbmUKK2luIHRoZSByZWxhdGVkIGhlYWRlciBmaWxlLiBUaGlzIG1lYW5zIGFuIGVkaXQgYW5kIHJlY29tcGlsZSBjeWNsZS4KKworCQkJCQkJUGF1bCBHb3J0bWFrZXIgMDYvOTYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ETElOSy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvRExJTksudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4M2QyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvRExJTksudHh0CkBAIC0wLDAgKzEsMjA0IEBACitSZWxlYXNlZCAxOTk0LTA2LTEzCisKKworCUNPTlRFTlRTOgorCisJMS4gSW50cm9kdWN0aW9uLgorCTIuIExpY2Vuc2UuCisJMy4gRmlsZXMgaW4gdGhpcyByZWxlYXNlLgorCTQuIEluc3RhbGxhdGlvbi4KKwk1LiBQcm9ibGVtcyBhbmQgdHVuaW5nLgorCTYuIFVzaW5nIHRoZSBkcml2ZXJzIHdpdGggZWFybGllciByZWxlYXNlcy4KKwk3LiBBY2tub3dsZWRnbWVudHMuCisKKworCTEuIElOVFJPRFVDVElPTi4KKworCVRoaXMgaXMgYSBzZXQgb2YgRXRoZXJuZXQgZHJpdmVycyBmb3IgdGhlIEQtTGluayBERS02MDAvREUtNjIwCisJcG9ja2V0IGFkYXB0ZXJzLCBmb3IgdGhlIHBhcmFsbGVsIHBvcnQgb24gYSBMaW51eCBiYXNlZCBtYWNoaW5lLgorCVNvbWUgYWRhcHRlciAiY2xvbmVzIiB3aWxsIGFsc28gd29yay4gIFhpcmNvbSBpcyBfbm90XyBhIGNsb25lLi4uCisJVGhlc2UgZHJpdmVycyBfY2FuXyBiZSB1c2VkIGFzIGxvYWRhYmxlIG1vZHVsZXMsCisJYW5kIHdlcmUgZGV2ZWxvcGVkIGZvciB1c2Ugb24gTGludXggMS4xLjEzIGFuZCBhYm92ZS4KKwlGb3IgdXNlIG9uIExpbnV4IDEuMC5YLCBvciBlYXJsaWVyIHJlbGVhc2VzLCBzZWUgYmVsb3cuCisKKwlJIGhhdmUgdXNlZCB0aGVzZSBkcml2ZXJzIGZvciBORlMsIGZ0cCwgdGVsbmV0IGFuZCBYLWNsaWVudHMgb24KKwlyZW1vdGUgbWFjaGluZXMuIFRyYW5zbWlzc2lvbnMgd2l0aCBmdHAgc2VlbXMgdG8gd29yayBhcworCWdvb2QgYXMgY2FuIGJlIGV4cGVjdGVkIChpLmUuID4gODBrIGJ5dGVzL3NlYykgZnJvbSBhCisJcGFyYWxsZWwgcG9ydC4uLjotKSAgUmVjZWl2ZSBzcGVlZHMgd2lsbCBiZSBhYm91dCA2MC04MCUgb2YgdGhpcy4KKwlEZXBlbmRpbmcgb24geW91ciBtYWNoaW5lLCBzb21ld2hhdCBoaWdoZXIgc3BlZWRzIGNhbiBiZSBhY2hpZXZlZC4KKworCUFsbCBjb21tZW50cy9maXhlcyB0byBCam9ybiBFa3dhbGwgKGJqMHJuQGJsb3guc2UpLgorCisKKwkyLiBMSUNFTlNFLgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CisJYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworCUxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorCXZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKwl1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisJd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorCVBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKwlkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisJTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorCVNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQQorCTAyMTM5LCBVU0EuCisKKworCTMuIEZJTEVTIElOIFRISVMgUkVMRUFTRS4KKworCVJFQURNRS5ETElOSyAgVGhpcyBmaWxlLgorCWRlNjAwLmMgICAgICAgVGhlIFNvdXJjZSAobWF5IGl0IGJlIHdpdGggWW91IDotKSBmb3IgdGhlIERFLTYwMAorCWRlNjIwLmMgICAgICAgZGl0dG8gZm9yIHRoZSBERS02MjAKKwlkZTYyMC5oICAgICAgIE1hY3JvcyBmb3IgZGU2MjAuYworCisJSWYgeW91IGFyZSB1cGdyYWRpbmcgZnJvbSB0aGUgZC1saW5rIHRhciByZWxlYXNlLCB0aGVyZSB3aWxsCisJYWxzbyBiZSBhICJkbGluay1wYXRjaGVzIiBmaWxlIHRoYXQgd2lsbCBwYXRjaCBMaW51eCAxLjEuMTg6CisJCWxpbnV4L2RyaXZlcnMvbmV0L01ha2VmaWxlCisJCWxpbnV4L2RyaXZlcnMvbmV0L0NPTkZJRworCQlsaW51eC9kcml2ZXJzL25ldC9NT0RVTEVTCisJCWxpbnV4L2RyaXZlcnMvbmV0L1NwYWNlLmMKKwkJbGludXgvY29uZmlnLmluCisJQXBwbHkgdGhlIHBhdGNoIGJ5OgorCSJjZCAvdXNyL3NyYzsgcGF0Y2ggLXAwIDwgbGludXgvZHJpdmVycy9uZXQvZGxpbmstcGF0Y2hlcyIKKwlUaGUgb2xkIHNvdXJjZSwgImxpbnV4L2RyaXZlcnMvbmV0L2RfbGluay5jIiwgY2FuIGJlIHJlbW92ZWQuCisKKworCTQuIElOU1RBTExBVElPTi4KKworCW8gR2V0IHRoZSBsYXRlc3QgbmV0IGJpbmFyaWVzLCBhY2NvcmRpbmcgdG8gY3VycmVudCBuZXQud2lzZG9tLgorCisJbyBSZWFkIHRoZSBORVQtMiBhbmQgRXRoZXJuZXQgSE9XVE9zIGFuZCBtb2RpZnkgeW91ciBzZXR1cC4KKworCW8gSWYgeW91ciBwYXJhbGxlbCBwb3J0IGhhcyBhIHN0cmFuZ2UgYWRkcmVzcyBvciBpcnEsCisJICBtb2RpZnkgImxpbnV4L2RyaXZlcnMvbmV0L0NPTkZJRyIgYWNjb3JkaW5nbHksIG9yIGFkanVzdAorCSAgdGhlIHBhcmFtZXRlcnMgaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24gaW4gdGhlIHNvdXJjZXMuCisKKwlJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgZHJpdmVycyBhcyBsb2FkYWJsZSBtb2R1bGVzLCBkbyBfbm90XworCWVuYWJsZSB0aGVtIHdoaWxlIGRvaW5nICJtYWtlIGNvbmZpZyIsIGJ1dCBpbnN0ZWFkIG1ha2Ugc3VyZSB0aGF0CisJdGhlIGRyaXZlcnMgYXJlIGluY2x1ZGVkIGluICJsaW51eC9kcml2ZXJzL25ldC9NT0RVTEVTIi4KKworCUlmIHlvdSBhcmUgX25vdF8gZ29pbmcgdG8gdXNlIHRoZSBkcml2ZXIocykgYXMgbG9hZGFibGUgbW9kdWxlcywKKwlidXQgaW5zdGVhZCBoYXZlIHRoZW0gaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCwgcmVtZW1iZXIgdG8gZW5hYmxlCisJdGhlIGRyaXZlcnMgd2hpbGUgZG9pbmcgIm1ha2UgY29uZmlnIi4KKworCW8gVG8gaW5jbHVkZSBuZXR3b3JraW5nIGFuZCBERTYwMC9ERTYyMCBzdXBwb3J0IGluIHlvdXIga2VybmVsOgorCSAgIyBjZCAvbGludXgKKwkgIChhcyBtb2R1bGVzOikKKwkgICMgIG1ha2UgY29uZmlnIChhbnN3ZXIgeWVzIG9uIENPTkZJR19ORVQgYW5kIENPTkZJR19JTkVUKQorCSAgKGVsc2UgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbDopCisJICAjICBtYWtlIGNvbmZpZyAoYW5zd2VyIHllcyBvbiBDT05GSUcgX05FVCwgX0lORVQgYW5kIF9ERTYwMCBvciBfREU2MjApCisJICAjIG1ha2UgY2xlYW4KKwkgICMgbWFrZSB6SW1hZ2UgKG9yIHdoYXRldmVyIG1hZ2ljIHlvdSB1c3VhbGx5IGRvKQorCisJbyBJIHVzZSBsaWxvIHRvIGJvb3QgbXVsdGlwbGUga2VybmVscywgc28gdGhhdCBJIGF0IGxlYXN0CisJICBjYW4gaGF2ZSBvbmUgd29ya2luZyBrZXJuZWwgOi0pLiBJZiB5b3UgZG8gdG9vLCBhcHBlbmQKKwkgIHRoZXNlIGxpbmVzIHRvIC9ldGMvbGlsby9jb25maWc6CisKKwkJaW1hZ2UgPSAvbGludXgvekltYWdlCisJCWxhYmVsID0gbmV3bGludXgKKwkJcm9vdCA9IC9kZXYvaGRhMiAob3Igd2hhdGV2ZXIgWU9VIGhhdmUuLi4pCisKKwkgICMgL2V0Yy9saWxvL2luc3RhbGwKKworCW8gRG8gInN5bmMiIGFuZCByZWJvb3QgdGhlIG5ldyBrZXJuZWwgd2l0aCBhIEQtTGluaworCSAgREUtNjAwL0RFLTYyMCBwb2NrZXQgYWRhcHRlciBjb25uZWN0ZWQuCisKKwlvIFRoZSBhZGFwdGVyIGNhbiBiZSBjb25maWd1cmVkIHdpdGggaWZjb25maWcgZXRoPworCSAgd2hlcmUgdGhlIGFjdHVhbCBudW1iZXIgaXMgZGVjaWRlZCBieSB0aGUga2VybmVsCisJICB3aGVuIHRoZSBkcml2ZXJzIGFyZSBpbml0aWFsaXplZC4KKworCisJNS4gIlBST0JMRU1TIiBBTkQgVFVOSU5HLAorCisJbyBJZiB5b3Ugc2VlIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIGRyaXZlciwgYW5kIGlmIHRoZSB0cmFmZmljCisJICBzdG9wcyBvbiB0aGUgYWRhcHRlciwgdHJ5IHRvIGRvICJpZmNvbmZpZyIgYW5kICJyb3V0ZSIgb25jZQorCSAgbW9yZSwganVzdCBhcyBpbiAicmMuaW5ldDEiLiAgVGhpcyBzaG91bGQgdGFrZSBjYXJlIG9mIG1vc3QKKwkgIHByb2JsZW1zLCBpbmNsdWRpbmcgZWZmZWN0cyBmcm9tIHBvd2VyIGxvc3MsIG9yIGFkYXB0ZXJzIHRoYXQKKwkgIGFyZW4ndCBjb25uZWN0ZWQgdG8gdGhlIHByaW50ZXIgcG9ydCBpbiBzb21lIHdheSBvciBhbm90aGVyLgorCSAgWW91IGNhbiBzb21ld2hhdCBjaGFuZ2UgdGhlIGJlaGF2aW91ciBieSBlbmFibGluZy9kaXNhYmxpbmcKKwkgIHRoZSBtYWNybyAgU0hVVERPV05fV0hFTl9MT1NUICBpbiB0aGUgInR1bmluZyIgc2VjdGlvbi4KKwkgIEZvciB0aGUgREUtNjAwIHRoZXJlIGlzIGFub3RoZXIgbWFjcm8sIENIRUNLX0xPU1RfREU2MDAsCisJICB0aGF0IHlvdSBtaWdodCB3YW50IHRvIHJlYWQgYWJvdXQgaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24uCisKKwlvIFNvbWUgbWFjaGluZXMgaGF2ZSB0cm91YmxlIGhhbmRsaW5nIHRoZSBwYXJhbGxlbCBwb3J0IGFuZAorCSAgdGhlIGFkYXB0ZXIgYXQgaGlnaCBzcGVlZC4gSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXM6CisKKwkgIERFLTYwMDoKKwkgIC0gVGhlIGFkYXB0ZXIgaXMgbm90IHJlY29nbml6ZWQgYXQgYm9vdCwgaS5lLiBhbiBFdGhlcm5ldAorCSAgICBhZGRyZXNzIG9mIDAwOjgwOmM4Oi4uLiBpcyBub3Qgc2hvd24sIHRyeSB0byBhZGQgYW5vdGhlcgorCSAgICAgICI7IFNMT1dfRE9XTl9JTyIKKwkgICAgYXQgREU2MDBfU0xPV19ET1dOIGluIHRoZSAidHVuaW5nIiBzZWN0aW9uLiBBcyBhIGxhc3QgcmVzb3J0LAorCSAgICB1bmNvbW1lbnQ6ICIjZGVmaW5lIFJFQUxMWV9TTE9XX0lPIiAoc2VlIDxhc20vaW8uaD4gZm9yIGhpbnRzKS4KKworCSAgLSBZb3UgZXhwZXJpZW5jZSAidGltZW91dCIgbWVzc2FnZXM6IGZpcnN0IHRyeSB0byBhZGQgYW5vdGhlcgorCSAgICAgICI7IFNMT1dfRE9XTl9JTyIKKwkgICAgYXQgREU2MDBfU0xPV19ET1dOIGluIHRoZSAidHVuaW5nIiBzZWN0aW9uLCBfdGhlbl8gdHJ5IHRvCisJICAgIGluY3JlYXNlIHRoZSB2YWx1ZSAob3JpZ2luYWwgdmFsdWU6IDUpIGF0CisJICAgICJpZiAodGlja3Nzb2ZhciA8IDUpIiBuZWFyIGxpbmUgNDIyLgorCisJICBERS02MjA6CisJICAtIFlvdXIgcGFyYWxsZWwgcG9ydCBtaWdodCBiZSAic2x1Z2dpc2giLiAgVG8gY2F0ZXIgZm9yCisJICAgIHRoaXMsIHRoZXJlIGFyZSB0aGUgbWFjcm9zIExPV1NQRUVEIGFuZCBSRUFEX0RFTEFZL1dSSVRFX0RFTEFZCisJICAgIGluIHRoZSAidHVuaW5nIiBzZWN0aW9uLiBZb3VyIGZpcnN0IHN0ZXAgc2hvdWxkIGJlIHRvIGVuYWJsZQorCSAgICBMT1dTUEVFRCwgYW5kIGFmdGVyIHRoYXQgeW91IGNhbiAidHVuZSIgdGhlIFhYWF9ERUxBWSB2YWx1ZXMuCisKKwlvIElmIHRoZSBhZGFwdGVyIF9pc18gcmVjb2duaXplZCBhdCBib290IGJ1dCB5b3UgZ2V0IG1lc3NhZ2VzCisJICBhYm91dCAiTmV0d29yayBVbnJlYWNoYWJsZSIsIHRoZW4gdGhlIHByb2JsZW0gaXMgcHJvYmFibHkKKwkgIF9ub3RfIHdpdGggdGhlIGRyaXZlci4gIENoZWNrIHlvdXIgbmV0IGNvbmZpZ3VyYXRpb24gaW5zdGVhZAorCSAgKGlmY29uZmlnIGFuZCByb3V0ZSkgaW4gInJjLmluZXQxIi4KKworCW8gVGhlcmUgaXMgc29tZSBydWRpbWVudGFyeSBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcsIGxvb2sgYXQKKwkgIHRoZSBzb3VyY2UuIFVzZSAiLURERTYwMF9ERUJVRz0zIiBvciAiLURERTYyMF9ERUJVRz0zIgorCSAgd2hlbiBjb21waWxpbmcsIG9yIGluY2x1ZGUgaXQgaW4gImxpbnV4L2RyaXZlcnMvbmV0L0NPTkZJRyIuCisJICBJRiBZT1UgSEFWRSBQUk9CTEVNUyBZT1UgQ0FOJ1QgU09MVkU6IFBMRUFTRSBDT01QSUxFIFRIRSBEUklWRVIKKwkgIFdJVEggREVCVUdHSU5HIEVOQUJMRUQsIEFORCBTRU5EIE1FIFRIRSBSRVNVTFRJTkcgT1VUUFVUIQorCisKKwk2LiBVU0lORyBUSEUgRFJJVkVSUyBXSVRIIEVBUkxJRVIgUkVMRUFTRVMuCisKKwlUaGUgbGF0ZXIgMS4xLlggcmVsZWFzZXMgb2YgdGhlIExpbnV4IGtlcm5lbCBpbmNsdWRlIHNvbWUKKwljaGFuZ2VzIGluIHRoZSBuZXR3b3JraW5nIGxheWVyIChhLmsuYS4gTkVUMykuIFRoaXMgYWZmZWN0cworCXRoZXNlIGRyaXZlcnMgaW4gYSBmZXcgcGxhY2VzLiAgVGhlIGhpbnRzIHRoYXQgZm9sbG93IGFyZQorCV9ub3RfIHRlc3RlZCBieSBtZSwgc2luY2UgSSBkb24ndCBoYXZlIHRoZSBkaXNrIHNwYWNlIHRvIGtlZXAKKwlhbGwgcmVsZWFzZXMgb24tbGluZS4KKwlLbm93biBuZWVkZWQgY2hhbmdlcyB0byBkYXRlOgorCS0gcmVsZWFzZSBwYXRjaGZpbGU6IHNvbWUgcGF0Y2hlcyB3aWxsIGZhaWwsIGJ1dCB0aGV5IHNob3VsZAorCSAgYmUgZWFzeSB0byBhcHBseSAiYnkgaGFuZCIsIHNpbmNlIHRoZXkgYXJlIHRyaXZpYWwuCisJICAoU3BhY2UuYzogZF9saW5rX2luaXQoKSBpcyBub3cgY2FsbGVkIGRlNjAwX3Byb2JlKCkpCisJLSBkZTYwMC5jOiBjaGFuZ2UgICJtYXJrX2JoKE5FVF9CSCkiIHRvICAibWFya19iaChJTkVUX0JIKSIuCisJLSBkZTYyMC5jOiAobWF5YmUpIGNoYW5nZSB0aGUgY29kZSBhcm91bmQgIm5ldGlmX3J4KHNrYik7IiB0byBiZQorCQkgICBzaW1pbGFyIHRvIHRoZSBjb2RlIGFyb3VuZCAiZGV2X3JpbnQoLi4uKSIgaW4gZGU2MDAuYworCisKKwk3LiBBQ0tOT1dMRURHTUVOVFMuCisKKwlUaGVzZSBkcml2ZXJzIHdvdWxkbid0IGhhdmUgYmVlbiBkb25lIHdpdGhvdXQgdGhlIGJhc2UKKwkoYW5kIHN1cHBvcnQpIGZyb20gUm9zcyBCaXJvIDxiaXI3QGxlbGFuZC5zdGFuZm9yZC5lZHU+LAorCWFuZCBELUxpbmsgU3lzdGVtcyBJbmMuICBUaGUgZHJpdmVyIHJlbGllcyB1cG9uIEdQTC1lZAorCXNvdXJjZSBmcm9tIEQtTGluayBTeXN0ZW1zIEluYy4gYW5kIGZyb20gUnVzc2VsIE5lbHNvbiBhdAorCUNyeW53ciBTb2Z0d2FyZSA8bmVsc29uQGNyeW53ci5jb20+LgorCisJQWRkaXRpb25hbCBpbnB1dCBhbHNvIGZyb206CisJRG9uYWxkIEJlY2tlciA8YmVja2VyQHN1cGVyLm9yZz4sIEFsYW4gQ294IDxBLkNveEBzd2Fuc2VhLmFjLnVrPgorCWFuZCBGcmVkIE4uIHZhbiBLZW1wZW4gPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorCisJREUtNjAwIGFscGhhIHJlbGVhc2UgcHJpbWFyeSB2aWN0aW1eSF5IXkheSF5IXkh0ZXN0ZXI6CisJLSBFcmlrIFByb3BlciA8ZXJpa3BAY3Mua3VuLm5sPi4KKwlHb29kIGlucHV0IGFsc28gZnJvbSBzZXZlcmFsIHVzZXJzLCBtb3N0IG5vdGFibHkKKwktIE1hcmsgQnVydG9uIDxtYXJrYkBvcmRlcm4uZGVtb24uY28udWs+LgorCisJREUtNjIwIGFscGhhIHJlbGVhc2UgdmljdGltc15IXkheSF5IXkheSF5IdGVzdGVyczoKKwktIEouIEpvc2h1YSBLb3BwZXIgPGtvcHBlckBydHNnLm1vdC5jb20+CisJLSBPbGF2IEt2aXR0ZW0gPE9sYXYuS3ZpdHRlbUB1bmluZXR0Lm5vPgorCS0gR2VybWFubyBDYXJvbm5pIDxjYXJvbm5pQG5lc3NpZS5jcy5pZC5ldGh6LmNoPgorCS0gSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QHN1aXRlLnN3Lm96LmF1PgorCisKKwlIYXBweSBoYWNraW5nIQorCisJQmpvcm4gRWt3YWxsID09IGJqMHJuQGJsb3guc2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDM3NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0CkBAIC0wLDAgKzEsNzY2IEBACitISVNUT1JZOgorRmVicnVhcnkgMTYvMjAwMiAtLSByZXZpc2lvbiAwLjIuMToKK0NPUiB0eXBvIGNvcnJlY3RlZAorRmVicnVhcnkgMTAvMjAwMiAtLSByZXZpc2lvbiAwLjI6Citzb21lIHNwZWxsIGNoZWNraW5nIDstPgorSmFudWFyeSAxMi8yMDAyIC0tIHJldmlzaW9uIDAuMQorVGhpcyBpcyBzdGlsbCB3b3JrIGluIHByb2dyZXNzIHNvIG1heSBjaGFuZ2UuCitUbyBrZWVwIHVwIHRvIGRhdGUgcGxlYXNlIHdhdGNoIHRoaXMgc3BhY2UuCisKK0ludHJvZHVjdGlvbiB0byBOQVBJCis9PT09PT09PT09PT09PT09PT09PQorCitOQVBJIGlzIGEgcHJvdmVuICh3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6KSB0ZWNobmlxdWUKK3RvIGltcHJvdmUgbmV0d29yayBwZXJmb3JtYW5jZSBvbiBMaW51eC4gRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UKK3JlYWQgdGhhdCBwYXBlci4KK05BUEkgcHJvdmlkZXMgYSAiaW5oZXJlbnQgbWl0aWdhdGlvbiIgd2hpY2ggaXMgYm91bmQgYnkgc3lzdGVtIGNhcGFjaXR5CithcyBjYW4gYmUgc2VlbiBmcm9tIHRoZSBmb2xsb3dpbmcgZGF0YSBjb2xsZWN0ZWQgYnkgUm9iZXJ0IG9uIEdpZ2FiaXQgCitldGhlcm5ldCAoZTEwMDApOgorCisgUHNpemUgICAgSXBwcyAgICAgICBUcHV0ICAgICBSeGludCAgICAgVHhpbnQgICAgRG9uZSAgICAgTmRvbmUKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIDYwICAgIDg5MDAwMCAgICAgNDA5MzYyICAgICAgICAxNyAgICAgMjc2MjIgICAgICAgIDcgICAgIDY4MjMKKyAgMTI4ICAgIDc1ODE1MCAgICAgNDY0MzY0ICAgICAgICAyMSAgICAgIDkzMDEgICAgICAgMTAgICAgIDc3MzgKKyAgMjU2ICAgIDQ0NTYzMiAgICAgNzc0NjQ2ICAgICAgICA0MiAgICAgMTU1MDcgICAgICAgMjEgICAgMTI5MDYKKyAgNTEyICAgIDIzMjY2NiAgICAgOTk0NDQ1ICAgIDI0MTI5MiAgICAgMTkxNDcgICAyNDExOTIgICAgIDEwNjIKKyAxMDI0ICAgIDExOTA2MSAgICAxMDAwMDAzICAgIDg3MjUxOSAgICAgMTkyNTggICA4NzI1MTEgICAgICAgIDAKKyAxNDQwICAgICA4NTE5MyAgICAxMDAwMDAzICAgIDk0NjU3NiAgICAgMTk1MDUgICA5NDY1NjkgICAgICAgIDAKKyAKKworTGVnZW5kOgorIklwcHMiIHN0YW5kcyBmb3IgaW5wdXQgcGFja2V0cyBwZXIgc2Vjb25kLiAKKyJUcHV0IiA9PSBwYWNrZXRzIG91dCBvZiB0b3RhbCAxTSB0aGF0IG1hZGUgaXQgb3V0LgorInR4aW50IiA9PSB0cmFuc21pdCBjb21wbGV0aW9uIGludGVycnVwdHMgc2VlbgorIkRvbmUiID09IFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgcG9sbCgpIG1hbmFnZWQgdG8gcHVsbCBhbGwKK3BhY2tldHMgb3V0IG9mIHRoZSByeCByaW5nLiBOb3RlIGZyb20gdGhpcyB0aGF0IHRoZSBsb3dlciB0aGUKK2xvYWQgdGhlIG1vcmUgd2UgY291bGQgY2xlYW4gdXAgdGhlIHJ4cmluZworIk5kb25lIiA9PSBpcyB0aGUgY29udmVyc2Ugb2YgIkRvbmUiLiBOb3RlIGFnYWluLCB0aGF0IHRoZSBoaWdoZXIKK3RoZSBsb2FkIHRoZSBtb3JlIHRpbWVzIHdlIGNvdWxkbnQgY2xlYW4gdXAgdGhlIHJ4cmluZy4KKworT2JzZXJ2ZSB0aGF0Ogord2hlbiB0aGUgTklDIHJlY2VpdmVzIDg5MEtwYWNrZXRzL3NlYyBvbmx5IDE3IHJ4IGludGVycnVwdHMgYXJlIGdlbmVyYXRlZC4gCitUaGUgc3lzdGVtIGNhbnQgaGFuZGxlIHRoZSBwcm9jZXNzaW5nIGF0IDEgaW50ZXJydXB0L3BhY2tldCBhdCB0aGF0IGxvYWQgbGV2ZWwuIAorQXQgbG93ZXIgcmF0ZXMgb24gdGhlIG90aGVyIGhhbmQsIHJ4IGludGVycnVwdHMgZ28gdXAgYW5kIHRoZXJlZm9yZSB0aGUKK2ludGVycnVwdC9wYWNrZXQgcmF0aW8gZ29lcyB1cCAoYXMgb2JzZXJ2YWJsZSBmcm9tIHRoYXQgdGFibGUpLiBTbyB0aGVyZSBpcworcG9zc2liaWxpdHkgdGhhdCB1bmRlciBsb3cgZW5vdWdoIGlucHV0LCB5b3UgZ2V0IG9uZSBwb2xsIGNhbGwgZm9yIGVhY2gKK2lucHV0IHBhY2tldCBjYXVzZWQgYnkgYSBzaW5nbGUgaW50ZXJydXB0IGVhY2ggdGltZS4gQW5kIGlmIHRoZSBzeXN0ZW0gCitjYW50IGhhbmRsZSBpbnRlcnJ1cHQgcGVyIHBhY2tldCByYXRpbyBvZiAxLCB0aGVuIGl0IHdpbGwganVzdCBoYXZlIHRvIAorY2h1ZyBhbG9uZyAuLi4uCisKKworMCkgUHJlcmVxdWlzaXRlczoKKz09PT09PT09PT09PT09PT09PQorQSBkcml2ZXIgTUFZIGNvbnRpbnVlIHVzaW5nIHRoZSBvbGQgMi40IHRlY2huaXF1ZSBmb3IgaW50ZXJmYWNpbmcKK3RvIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCBub3QgYmVuZWZpdCBmcm9tIHRoZSBOQVBJIGNoYW5nZXMuCitOQVBJIGFkZGl0aW9ucyB0byB0aGUga2VybmVsIGRvIG5vdCBicmVhayBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorTkFQSSwgaG93ZXZlciwgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyB0byBiZSBhdmFpbGFibGU6CisKK0EpIERNQSByaW5nIG9yIGVub3VnaCBSQU0gdG8gc3RvcmUgcGFja2V0cyBpbiBzb2Z0d2FyZSBkZXZpY2VzLgorCitCKSBBYmlsaXR5IHRvIHR1cm4gb2ZmIGludGVycnVwdHMgb3IgbWF5YmUgZXZlbnRzIHRoYXQgc2VuZCBwYWNrZXRzIHVwIAordGhlIHN0YWNrLgorCitOQVBJIHByb2Nlc3NlcyBwYWNrZXQgZXZlbnRzIGluIHdoYXQgaXMga25vd24gYXMgZGV2LT5wb2xsKCkgbWV0aG9kLgorVHlwaWNhbGx5LCBvbmx5IHBhY2tldCByZWNlaXZlIGV2ZW50cyBhcmUgcHJvY2Vzc2VkIGluIGRldi0+cG9sbCgpLiAKK1RoZSByZXN0IG9mIHRoZSBldmVudHMgTUFZIGJlIHByb2Nlc3NlZCBieSB0aGUgcmVndWxhciBpbnRlcnJ1cHQgaGFuZGxlciAKK3RvIHJlZHVjZSBwcm9jZXNzaW5nIGxhdGVuY3kgKGp1c3RpZmllZCBhbHNvIGJlY2F1c2UgdGhlcmUgYXJlIG5vdCB0aGF0IAorbWFueSBvZiB0aGVtKS4KK05vdGUsIGhvd2V2ZXIsIE5BUEkgZG9lcyBub3QgZW5mb3JjZSB0aGF0IGRldi0+cG9sbCgpIG9ubHkgcHJvY2Vzc2VzIAorcmVjZWl2ZSBldmVudHMuIAorVGVzdHMgd2l0aCB0aGUgdHVsaXAgZHJpdmVyIGluZGljYXRlZCBzbGlnaHRseSBpbmNyZWFzZWQgbGF0ZW5jeSBpZgorYWxsIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBtb3ZlZCB0byBkZXYtPnBvbGwoKS4gQWxzbyBNSUkgaGFuZGxpbmcKK2dldHMgYSBsaXR0bGUgdHJpY2tpZXIuCitUaGUgZXhhbXBsZSB1c2VkIGluIHRoaXMgZG9jdW1lbnQgaXMgdG8gbW92ZSB0aGUgcmVjZWl2ZSBwcm9jZXNzaW5nIG9ubHkKK3RvIGRldi0+cG9sbCgpOyB0aGlzIGlzIHNob3duIHdpdGggdGhlIHBhdGNoIGZvciB0aGUgdHVsaXAgZHJpdmVyLgorRm9yIGFuIGV4YW1wbGUgb2YgY29kZSB0aGF0IG1vdmVzIGFsbCB0aGUgaW50ZXJydXB0IGRyaXZlciB0byAKK2Rldi0+cG9sbCgpIGxvb2sgYXQgdGhlIHBvcnRlZCBlMTAwMCBjb2RlLgorCitUaGVyZSBhcmUgY2F2ZWF0cyB0aGF0IG1pZ2h0IGZvcmNlIHlvdSB0byBnbyB3aXRoIG1vdmluZyBldmVyeXRoaW5nIHRvIAorZGV2LT5wb2xsKCkuIERpZmZlcmVudCBOSUNzIHdvcmsgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZWlyIHN0YXR1cy9ldmVudCAKK2Fja25vd2xlZGdlbWVudCBzZXR1cC4gCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGV2ZW50IHJlZ2lzdGVyIEFDSyBtZWNoYW5pc21zLgorCUkpICB3aGF0IGlzIGtub3duIGFzIENsZWFyLW9uLXJlYWQgKENPUikuCisJd2hlbiB5b3UgcmVhZCB0aGUgc3RhdHVzL2V2ZW50IHJlZ2lzdGVyLCBpdCBjbGVhcnMgZXZlcnl0aGluZyEKKwlUaGUgbmF0c2VtaSBhbmQgc3VuYm1hYyBOSUNzIGFyZSBrbm93biB0byBkbyB0aGlzLgorCUluIHRoaXMgY2FzZSB5b3VyIG9ubHkgY2hvaWNlIGlzIHRvIG1vdmUgYWxsIHRvIGRldi0+cG9sbCgpCisKKwlJSSkgQ2xlYXItb24td3JpdGUgKENPVykKKwkgaSkgeW91IGNsZWFyIHRoZSBzdGF0dXMgYnkgd3JpdGluZyBhIDEgaW4gdGhlIGJpdC1sb2NhdGlvbiB5b3Ugd2FudC4KKwkJVGhlc2UgYXJlIHRoZSBtYWpvcml0eSBvZiB0aGUgTklDcyBhbmQgd29yayB0aGUgYmVzdCB3aXRoIE5BUEkuCisJCVB1dCBvbmx5IHJlY2VpdmUgZXZlbnRzIGluIGRldi0+cG9sbCgpOyBsZWF2ZSB0aGUgcmVzdCBpbgorCQl0aGUgb2xkIGludGVycnVwdCBoYW5kbGVyLgorCSBpaSkgd2hhdGV2ZXIgeW91IHdyaXRlIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgY2xlYXJzIGV2ZXJ5IHRoaW5nIDstPgorCQlDYW50IHNlZW0gdG8gZmluZCBhbnkgc3VwcG9ydGVkIGJ5IExpbnV4IHdoaWNoIGRvIHRoaXMuIElmCisJCXNvbWVvbmUga25vd3Mgc3VjaCBhIGNoaXAgZW1haWwgdXMgcGxlYXNlLgorCQlNb3ZlIGFsbCB0byBkZXYtPnBvbGwoKQorCitDKSBBYmlsaXR5IHRvIGRldGVjdCBuZXcgd29yayBjb3JyZWN0bHkuCitOQVBJIHdvcmtzIGJ5IHNodXR0aW5nIGRvd24gZXZlbnQgaW50ZXJydXB0cyB3aGVuIHRoZXJlcyB3b3JrIGFuZAordHVybmluZyB0aGVtIG9uIHdoZW4gdGhlcmVzIG5vbmUuIAorTmV3IHBhY2tldHMgbWlnaHQgc2hvdyB1cCBpbiB0aGUgc21hbGwgd2luZG93IHdoaWxlIGludGVycnVwdHMgd2VyZSBiZWluZyAKK3JlLWVuYWJsZWQgKHJlZmVyIHRvIGFwcGVuZGl4IDIpLiAgQSBwYWNrZXQgbWlnaHQgc25lYWsgaW4gZHVyaW5nIHRoZSBwZXJpb2QgCit3ZSBhcmUgZW5hYmxpbmcgaW50ZXJydXB0cy4gV2Ugb25seSBnZXQgdG8ga25vdyBhYm91dCBzdWNoIGEgcGFja2V0IHdoZW4gdGhlIAorbmV4dCBuZXcgcGFja2V0IGFycml2ZXMgYW5kIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQuIAorRXNzZW50aWFsbHksIHRoZXJlIGlzIGEgc21hbGwgd2luZG93IG9mIG9wcG9ydHVuaXR5IGZvciBhIHJhY2UgY29uZGl0aW9uCit3aGljaCBmb3IgY2xhcml0eSB3ZSdsbCByZWZlciB0byBhcyB0aGUgInJvdHRpbmcgcGFja2V0Ii4KKworVGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IHRvcGljIGFuZCBhcHBlbmRpeCAyIGlzIGRlZGljYXRlZCBmb3IgbW9yZSAKK2Rpc2N1c3Npb24uCisKK0xvY2tpbmcgcnVsZXMgYW5kIGVudmlyb25tZW50YWwgZ3VhcmFudGVlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy1HdWFyYW50ZWU6IE9ubHkgb25lIENQVSBhdCBhbnkgdGltZSBjYW4gY2FsbCBkZXYtPnBvbGwoKTsgdGhpcyBpcyBiZWNhdXNlCitvbmx5IG9uZSBDUFUgY2FuIHBpY2sgdGhlIGluaXRpYWwgaW50ZXJydXB0IGFuZCBoZW5jZSB0aGUgaW5pdGlhbAorbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKKy0gVGhlIGNvcmUgbGF5ZXIgaW52b2tlcyBkZXZpY2VzIHRvIHNlbmQgcGFja2V0cyBpbiBhIHJvdW5kIHJvYmluIGZvcm1hdC4KK1RoaXMgaW1wbGllcyByZWNlaXZlIGlzIHRvdGFseSBsb2NrbGVzcyBiZWNhdXNlIG9mIHRoZSBndWFyYW50ZWUgb25seSB0aGF0IAorb25lIENQVSBpcyBleGVjdXRpbmcgaXQuCistICBjb250ZW50aW9uIGNhbiBvbmx5IGJlIHRoZSByZXN1bHQgb2Ygc29tZSBvdGhlciBDUFUgYWNjZXNzaW5nIHRoZSByeAorcmluZy4gVGhpcyBoYXBwZW5zIG9ubHkgaW4gY2xvc2UoKSBhbmQgc3VzcGVuZCgpICh3aGVuIHRoZXNlIG1ldGhvZHMKK3RyeSB0byBjbGVhbiB0aGUgcnggcmluZyk7IAorKioqKmd1YXJhbnRlZTogZHJpdmVyIGF1dGhvcnMgbmVlZCBub3Qgd29ycnkgYWJvdXQgdGhpczsgc3luY2hyb25pemF0aW9uIAoraXMgdGFrZW4gY2FyZSBmb3IgdGhlbSBieSB0aGUgdG9wIG5ldCBsYXllci4KKy1sb2NhbCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIChpZiB5b3UgZG9udCBtb3ZlIGFsbCB0byBkZXYtPnBvbGwoKSkuIEZvciAKK2V4YW1wbGUgbGluay9NSUkgYW5kIHR4Y29tcGxldGUgY29udGludWUgZnVuY3Rpb25pbmcganVzdCBzYW1lIG9sZCB3YXkuIAorVGhpcyBpbXByb3ZlcyB0aGUgbGF0ZW5jeSBvZiBwcm9jZXNzaW5nIHRoZXNlIGV2ZW50cy4gSXQgaXMgYWxzbyBhc3N1bWVkIHRoYXQgCit0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgdGhlIGxhcmdlc3QgY2F1c2Ugb2Ygbm9pc2UuIE5vdGUgdGhpcyBtaWdodCBub3QgCithbHdheXMgYmUgdHJ1ZS4gCitbYWNjb3JkaW5nIHRvIE1hbmZyZWQgU3ByYXVsLCB0aGUgd2luYm9uZCBpbnNpc3RzIG9uIHNlbmRpbmcgb25lIAordHhtaXRjb21wbGV0ZSBpbnRlcnJ1cHQgZm9yIGVhY2ggcGFja2V0IChhbHRob3VnaCB0aGlzIGNhbiBiZSBtaXRpZ2F0ZWQpXS4KK0ZvciB0aGVzZSBicm9rZW4gZHJpdmVycywgbW92ZSBhbGwgdG8gZGV2LT5wb2xsKCkuCisKK0ZvciB0aGUgcmVzdCBvZiB0aGlzIHRleHQsIHdlJ2xsIGFzc3VtZSB0aGF0IGRldi0+cG9sbCgpIG9ubHkKK3Byb2Nlc3NlcyByZWNlaXZlIGV2ZW50cy4KKworbmV3IG1ldGhvZHMgaW50cm9kdWNlIGJ5IE5BUEkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2EpIG5ldGlmX3J4X3NjaGVkdWxlKGRldikKK0NhbGxlZCBieSBhbiBJUlEgaGFuZGxlciB0byBzY2hlZHVsZSBhIHBvbGwgZm9yIGRldmljZQorCitiKSBuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldikKK3B1dHMgdGhlIGRldmljZSBpbiBhIHN0YXRlIHdoaWNoIGFsbG93cyBmb3IgaXQgdG8gYmUgYWRkZWQgdG8gdGhlCitDUFUgcG9sbGluZyBsaXN0IGlmIGl0IGlzIHVwIGFuZCBydW5uaW5nLiBZb3UgY2FuIGxvb2sgYXQgdGhpcyBhcwordGhlIGZpcnN0IGhhbGYgb2YgIG5ldGlmX3J4X3NjaGVkdWxlKGRldikgYWJvdmU7IHRoZSBzZWNvbmQgaGFsZgorYmVpbmcgYykgYmVsb3cuCisKK2MpIF9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2KQorQWRkIGRldmljZSB0byB0aGUgcG9sbCBsaXN0IGZvciB0aGlzIENQVTsgYXNzdW1pbmcgdGhhdCBfcHJlcCBhYm92ZQoraGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgYW5kIHJldHVybmVkIDEuCisKK2QpIG5ldGlmX3J4X3Jlc2NoZWR1bGUoZGV2LCB1bmRvKQorQ2FsbGVkIHRvIHJlc2NoZWR1bGUgcG9sbGluZyBmb3IgZGV2aWNlIHNwZWNpZmljYWxseSBmb3Igc29tZQorZGVmaWNpZW50IGhhcmR3YXJlLiBSZWFkIEFwcGVuZGl4IDIgZm9yIG1vcmUgZGV0YWlscy4KKworZSkgbmV0aWZfcnhfY29tcGxldGUoZGV2KQorCitSZW1vdmUgaW50ZXJmYWNlIGZyb20gdGhlIENQVSBwb2xsIGxpc3Q6IGl0IG11c3QgYmUgaW4gdGhlIHBvbGwgbGlzdAorb24gY3VycmVudCBjcHUuIFRoaXMgcHJpbWl0aXZlIGlzIGNhbGxlZCBieSBkZXYtPnBvbGwoKSwgd2hlbgoraXQgY29tcGxldGVzIGl0cyB3b3JrLiBUaGUgZGV2aWNlIGNhbm5vdCBiZSBvdXQgb2YgcG9sbCBsaXN0IGF0IHRoaXMKK2NhbGwsIGlmIGl0IGlzIHRoZW4gY2xlYXJseSBpdCBpcyBhIEJVRygpLiBZb3UnbGwga25vdyA7LT4KKworQWxsIHRoZXNlIGFib3ZlIG5ldGhvZHMgYXJlIHVzZWQgYmVsb3cuIFNvIGtlZXAgcmVhZGluZyBmb3IgY2xhcml0eS4KKworRGV2aWNlIGRyaXZlciBjaGFuZ2VzIHRvIGJlIG1hZGUgd2hlbiBwb3J0aW5nIE5BUEkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0JlbG93IHdlIGRlc2NyaWJlIHdoYXQga2luZCBvZiBjaGFuZ2VzIGFyZSByZXF1aXJlZCBmb3IgTkFQSSB0byB3b3JrLgorCisxKSBpbnRyb2R1Y3Rpb24gb2YgZGV2LT5wb2xsKCkgbWV0aG9kIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBpcyBpbnZva2VkIGJ5IHRoZSBuZXR3b3JrIGNvcmUgd2hlbiBpdCByZXF1ZXN0cworZm9yIG5ldyBwYWNrZXRzIGZyb20gdGhlIGRyaXZlci4gQSBkcml2ZXIgaXMgYWxsb3dlZCB0byBzZW5kIHVwdG8KK2Rldi0+cXVvdGEgcGFja2V0cyBieSB0aGUgY3VycmVudCBDUFUgYmVmb3JlIHlpZWxkaW5nIHRvIHRoZSBuZXR3b3JrCitzdWJzeXN0ZW0gKHNvIG90aGVyIGRldmljZXMgY2FuIGFsc28gZ2V0IG9wcG9ydHVuaXR5IHRvIHNlbmQgdG8gdGhlIHN0YWNrKS4KKworZGV2LT5wb2xsKCkgcHJvdG90eXBlIGxvb2tzIGFzIGZvbGxvd3M6CitpbnQgbXlfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKKworYnVkZ2V0IGlzIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIHBhY2tldHMgdGhlIG5ldHdvcmsgc3Vic3lzdGVtIG9uIHRoZQorY3VycmVudCBDUFUgY2FuIHNlbmQgdXAgdGhlIHN0YWNrIGJlZm9yZSB5aWVsZGluZyB0byBvdGhlciBzeXN0ZW0gdGFza3MuCisqRWFjaCBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlY3JlbWVudGluZyBidWRnZXQgYnkgdGhlIHRvdGFsIG51bWJlciBvZgorcGFja2V0cyBzZW50LgorCVRvdGFsIG51bWJlciBvZiBwYWNrZXRzIGNhbm5vdCBleGNlZWQgZGV2LT5xdW90YS4KKworZGV2LT5wb2xsKCkgbWV0aG9kIGlzIGludm9rZWQgYnkgdGhlIHRvcCBsYXllciwgdGhlIGRyaXZlciBqdXN0IHNlbmRzIGlmIGl0IAorY2FuIHRvIHRoZSBzdGFjayB0aGUgcGFja2V0IHF1YW50aXR5IHJlcXVlc3RlZC4KKworbW9yZSBvbiBkZXYtPnBvbGwoKSBiZWxvdyBhZnRlciB0aGUgaW50ZXJydXB0IGNoYW5nZXMgYXJlIGV4cGxhaW5lZC4KKworMikgcmVnaXN0ZXJpbmcgZGV2LT5wb2xsKCkgbWV0aG9kCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZXYtPnBvbGwgc2hvdWxkIGJlIHNldCBpbiB0aGUgZGV2LT5wcm9iZSgpIG1ldGhvZC4gCitlLmc6CitkZXYtPm9wZW4gPSBteV9vcGVuOworLgorLgorLyogdHdvIG5ldyBhZGRpdGlvbnMgKi8KKy8qIGZpcnN0IHJlZ2lzdGVyIG15IHBvbGwgbWV0aG9kICovCitkZXYtPnBvbGwgPSBteV9wb2xsOworLyogbmV4dCByZWdpc3RlciBteSB3ZWlnaHQvcXVhbnRhOyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiAvcHJvYyAqLworZGV2LT53ZWlnaHQgPSAxNjsKKy4KKy4KK2Rldi0+c3RvcCA9IG15X2Nsb3NlOworCisKKworMykgc2NoZWR1bGluZyBkZXYtPnBvbGwoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgaW52b2x2ZXMgbW9kaWZ5aW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgdGhlIGNvZGUKK3BhdGggd2hpY2ggdGFrZXMgdGhlIHBhY2tldCBvZmYgdGhlIE5JQyBhbmQgc2VuZHMgdGhlbSB0byB0aGUgCitzdGFjay4KKworaXQncyBpbXBvcnRhbnQgYXQgdGhpcyBwb2ludCB0byBpbnRyb2R1Y2UgdGhlIGNsYXNzaWNhbCBEIEJlY2tlciAKK2ludGVycnVwdCBwcm9jZXNzb3I6CisKKy0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGlycXJldHVybl90CituZXRkZXZpY2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2luc3RhbmNlOworCXN0cnVjdCBteV9wcml2YXRlICp0cCA9IChzdHJ1Y3QgbXlfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKworCWludCB3b3JrX2NvdW50ID0gbXlfd29ya19jb3VudDsKKyAgICAgICAgc3RhdHVzID0gcmVhZF9pbnRlcnJ1cHRfc3RhdHVzX3JlZygpOworICAgICAgICBpZiAoc3RhdHVzID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIElSUV9OT05FOyAvKiBTaGFyZWQgSVJROiBub3QgdXMgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA9PSAweGZmZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOyAgICAgIC8qIEhvdCB1bnBsdWcgKi8KKyAgICAgICAgaWYgKHN0YXR1cyAmIGVycm9yKQorCQlkb19zb21lX2Vycm9yX2hhbmRsaW5nKCkKKyAgICAgICAgCisJZG8geworCQlhY2tub3dsZWRnZV9pbnRzX0FTQVAoKTsKKworCQlpZiAoc3RhdHVzICYgbGlua19pbnRlcnJ1cHQpIHsKKwkJCXNwaW5fbG9jaygmdHAtPmxpbmtfbG9jayk7CisJCQlkb19zb21lX2xpbmtfc3RhdF9zdHVmZigpOworCQkJc3Bpbl9sb2NrKCZ0cC0+bGlua19sb2NrKTsKKwkJfQorCQkKKwkJaWYgKHN0YXR1cyAmIHJ4X2ludGVycnVwdCkgeworCQkJcmVjZWl2ZV9wYWNrZXRzKGRldik7CisJCX0KKworCQlpZiAoc3RhdHVzICYgcnhfbm9idWZzKSB7CisJCQltYWtlX3J4X2J1ZmZzX2F2YWlsKCk7CisJCX0KKwkJCQorCQlpZiAoc3RhdHVzICYgdHhfcmVsYXRlZCkgeworCQkJc3Bpbl9sb2NrKCZ0cC0+bG9jayk7CisJCQl0eF9yaW5nX2ZyZWUoZGV2KTsKKwkJCWlmICh0eF9kaWVkKQorCQkJCXJlc3RhcnRfdHgoKTsKKwkJCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7CisJCX0KKworCQlzdGF0dXMgPSByZWFkX2ludGVycnVwdF9zdGF0dXNfcmVnKCk7CisKKwl9IHdoaWxlICghKHN0YXR1cyAmIGVycm9yKSB8fCBtb3JlX3dvcmtfdG9fYmVfZG9uZSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIG5vdyBjaGFuZ2UgdGhpcyB0byB3aGF0IGlzIHNob3duIGJlbG93IHRvIE5BUEktZW5hYmxlIGl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaXJxcmV0dXJuX3QKK25ldGRldmljZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2luc3RhbmNlOworCXN0cnVjdCBteV9wcml2YXRlICp0cCA9IChzdHJ1Y3QgbXlfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKworICAgICAgICBzdGF0dXMgPSByZWFkX2ludGVycnVwdF9zdGF0dXNfcmVnKCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSVJRX05PTkU7ICAgICAgICAgLyogU2hhcmVkIElSUTogbm90IHVzICovCisgICAgICAgIGlmIChzdGF0dXMgPT0gMHhmZmZmKQorICAgICAgICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsgICAgICAgICAvKiBIb3QgdW5wbHVnICovCisgICAgICAgIGlmIChzdGF0dXMgJiBlcnJvcikKKwkJZG9fc29tZV9lcnJvcl9oYW5kbGluZygpOworICAgICAgICAKKwlkbyB7CisvKioqKioqKioqKioqKioqKioqKioqKioqIHN0YXJ0IG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJCWFja25vd2xlZGdlX2ludHNfQVNBUCgpOyAgLy8gZG9udCBhY2sgcnggYW5kIHJ4bm9idWZmIGhlcmUKKy8qKioqKioqKioqKioqKioqKioqKioqKiogZW5kIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisKKwkJaWYgKHN0YXR1cyAmIGxpbmtfaW50ZXJydXB0KSB7CisJCQlzcGluX2xvY2soJnRwLT5saW5rX2xvY2spOworCQkJZG9fc29tZV9saW5rX3N0YXRfc3R1ZmYoKTsKKwkJCXNwaW5fdW5sb2NrKCZ0cC0+bGlua19sb2NrKTsKKwkJfQorLyoqKioqKioqKioqKioqKioqKioqKioqKiBzdGFydCBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCQlpZiAoc3RhdHVzICYgcnhfaW50ZXJydXB0IHx8IChzdGF0dXMgJiByeF9ub2J1ZmZzKSkgeworCQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KSkgeworCisJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGNhdXNlZCAKKwkJCSAgICAgICAgICoJYnkgYXJyaXZpbmcgcGFja2V0cyAqLworCQkJCWRpc2FibGVfcnhfYW5kX3J4bm9idWZmX2ludHMoKTsKKwkJCQkvKiB0ZWxsIHN5c3RlbSB3ZSBoYXZlIHdvcmsgdG8gYmUgZG9uZS4gKi8KKwkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldik7CisJCQl9IGVsc2UgeworCQkJCXByaW50aygiZHJpdmVyIGJ1ZyEgaW50ZXJydXB0IHdoaWxlIGluIHBvbGxcbiIpOworCQkJCS8qIEZJWCBieSBkaXNhYmxpbmcgaW50ZXJydXB0cyAgKi8KKwkJCQlkaXNhYmxlX3J4X2FuZF9yeG5vYnVmZl9pbnRzKCk7CisJCQl9CisJCX0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogZW5kIG5vdGUgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKwkJCQorCQlpZiAoc3RhdHVzICYgdHhfcmVsYXRlZCkgeworCQkJc3Bpbl9sb2NrKCZ0cC0+bG9jayk7CisJCQl0eF9yaW5nX2ZyZWUoZGV2KTsKKworCQkJaWYgKHR4X2RpZWQpCisJCQkJcmVzdGFydF90eCgpOworCQkJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKKwkJfQorCisJCXN0YXR1cyA9IHJlYWRfaW50ZXJydXB0X3N0YXR1c19yZWcoKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBzdGFydCBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCX0gd2hpbGUgKCEoc3RhdHVzICYgZXJyb3IpIHx8IG1vcmVfd29ya190b19iZV9kb25lKHN0YXR1cykpOworLyoqKioqKioqKioqKioqKioqKioqKioqKiBlbmQgbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworV2Ugbm90ZSBzZXZlcmFsIHRoaW5ncyBmcm9tIGFib3ZlOgorCitJKSBBbnkgaW50ZXJydXB0IHNvdXJjZSB3aGljaCBpcyBjYXVzZWQgYnkgYXJyaXZpbmcgcGFja2V0cyBpcyBub3cKK3R1cm5lZCBvZmYgd2hlbiBpdCBvY2N1cnMuIERlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUsIHRoZXJlIGNvdWxkIGJlCitzZXZlcmFsIHJlYXNvbnMgdGhhdCBhcnJpdmluZyBwYWNrZXRzIHdvdWxkIGNhdXNlIGludGVycnVwdHM7IHRoZXNlIGFyZSB0aGUKK2ludGVycnVwdCBzb3VyY2VzIHdlIHdpc2ggdG8gYXZvaWQuIFRoZSB0d28gY29tbW9uIG9uZXMgYXJlIGEpIGEgcGFja2V0IAorYXJyaXZpbmcgKHJ4aW50KSBiKSBhIHBhY2tldCBhcnJpdmluZyBhbmQgZmluZGluZyBubyBETUEgYnVmZmVycyBhdmFpbGFibGUKKyhyeG5vYnVmZikgLgorVGhpcyBtZWFucyBhbHNvIGFja25vd2xlZGdlX2ludHNfQVNBUCgpIHdpbGwgbm90IGNsZWFyIHRoZSBzdGF0dXMKK3JlZ2lzdGVyIGZvciB0aG9zZSB0d28gaXRlbXMgYWJvdmU7IGNsZWFyaW5nIGlzIGRvbmUgaW4gdGhlIHBsYWNlIHdoZXJlIAorcHJvcGVyIHdvcmsgaXMgZG9uZSB3aXRoaW4gTkFQSTsgYXQgdGhlIHBvbGwoKSBhbmQgcmVmaWxsX3J4X3JpbmcoKSAKK2Rpc2N1c3NlZCBmdXJ0aGVyIGJlbG93LgorbmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgpIHJldHVybnMgMSBpZiBkZXZpY2UgaXMgaW4gcnVubmluZyBzdGF0ZSBhbmQKK2dldHMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBjb3JlIHBvbGwgbGlzdC4gSWYgd2UgZ2V0IGEgemVybyB2YWx1ZQord2UgY2FuIF9hbG1vc3RfIGFzc3VtZSBhcmUgYWxyZWFkeSBhZGRlZCB0byB0aGUgbGlzdCAoaW5zdGVhZCBvZiBub3QgcnVubmluZy4gCitMb2dpYyBiYXNlZCBvbiB0aGUgZmFjdCB0aGF0IHlvdSBzaG91bGRuJ3QgZ2V0IGludGVycnVwdCBpZiBub3QgcnVubmluZykKK1dlIHJlY3RpZnkgdGhpcyBieSBkaXNhYmxpbmcgcnggYW5kIHJ4bm9idWYgaW50ZXJydXB0cy4KKworSUkpIHRoYXQgcmVjZWl2ZV9wYWNrZXRzKGRldikgYW5kIG1ha2VfcnhfYnVmZnNfYXZhaWwoKSBtYXkgaGF2ZSBkaXNhcHBlYXJlZC4KK1RoZXNlIGZ1bmN0aW9uYWxpdGllcyBhcmUgc3RpbGwgYXJvdW5kIGFjdHVhbGx5Li4uLi4uCisKK2luZmFjdCwgcmVjZWl2ZV9wYWNrZXRzKGRldikgaXMgdmVyeSBjbG9zZSB0byBteV9wb2xsKCkgYW5kIAorbWFrZV9yeF9idWZmc19hdmFpbCgpIGlzIGludm9rZWQgZnJvbSBteV9wb2xsKCkKKworNCkgY29udmVydGluZyByZWNlaXZlX3BhY2tldHMoKSB0byBkZXYtPnBvbGwoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2UgbmVlZCB0byBjb252ZXJ0IHRoZSBjbGFzc2ljYWwgRCBCZWNrZXIgcmVjZWl2ZV9wYWNrZXRzKGRldikgdG8gbXlfcG9sbCgpCisKK0ZpcnN0IHRoZSB0eXBpY2FsIHJlY2VpdmVfcGFja2V0cygpIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKiB0aGlzIGlzIGNhbGxlZCBieSBpbnRlcnJ1cHQgaGFuZGxlciAqLworc3RhdGljIHZvaWQgcmVjZWl2ZV9wYWNrZXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCisJc3RydWN0IG15X3ByaXZhdGUgKnRwID0gKHN0cnVjdCBteV9wcml2YXRlICopZGV2LT5wcml2OworCXJ4X3JpbmcgPSB0cC0+cnhfcmluZzsKKwljdXJfcnggPSB0cC0+Y3VyX3J4OworCWludCBlbnRyeSA9IGN1cl9yeCAlIFJYX1JJTkdfU0laRTsKKwlpbnQgcmVjZWl2ZWQgPSAwOworCWludCByeF93b3JrX2xpbWl0ID0gdHAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFIC0gdHAtPmN1cl9yeDsKKworCXdoaWxlIChyeF9yaW5nX25vdF9lbXB0eSkgeworCQl1MzIgcnhfc3RhdHVzOworCQl1bnNpZ25lZCBpbnQgcnhfc2l6ZTsKKwkJdW5zaWduZWQgaW50IHBrdF9zaXplOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworICAgICAgICAgICAgICAgIC8qIHJlYWQgc2l6ZStzdGF0dXMgb2YgbmV4dCBmcmFtZSBmcm9tIERNQSByaW5nIGJ1ZmZlciAqLworCQkvKiB0aGUgbnVtYmVyIDE2IGFuZCA0IGFyZSBqdXN0IGV4YW1wbGVzICovCisgICAgICAgICAgICAgICAgcnhfc3RhdHVzID0gbGUzMl90b19jcHUgKCoodTMyICopIChyeF9yaW5nICsgcmluZ19vZmZzZXQpKTsKKyAgICAgICAgICAgICAgICByeF9zaXplID0gcnhfc3RhdHVzID4+IDE2OworICAgICAgICAgICAgICAgIHBrdF9zaXplID0gcnhfc2l6ZSAtIDQ7CisKKwkJLyogcHJvY2VzcyBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJ4X3NpemUgPiAoTUFYX0VUSF9GUkFNRV9TSVpFKzQpKSB8fAorICAgICAgICAgICAgICAgICAgICAoIShyeF9zdGF0dXMgJiBSeFN0YXR1c09LKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldGRydl9yeF9lcnIgKHJ4X3N0YXR1cywgZGV2LCB0cCwgaW9hZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoLS1yeF93b3JrX2xpbWl0IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisJCS8qIGdyYWIgYSBza2IgKi8KKyAgICAgICAgICAgICAgICBza2IgPSBkZXZfYWxsb2Nfc2tiIChwa3Rfc2l6ZSArIDIpOworICAgICAgICAgICAgICAgIGlmIChza2IpIHsKKwkJCS4KKwkJCS4KKwkJCW5ldGlmX3J4IChza2IpOworCQkJLgorCQkJLgorICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAvKiBPT00gKi8KKwkJCS8qc2VlbXMgdmVyeSBkcml2ZXIgc3BlY2lmaWMgLi4uIHNvbWUganVzdCBwYXNzCisJCQl3aGF0ZXZlciBpcyBvbiB0aGUgcmluZyBhbHJlYWR5LiAqLworICAgICAgICAgICAgICAgIH0KKworCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IHNrYiBvbiB0aGUgcmluZyAqLworCQllbnRyeSA9ICgrK3RwLT5jdXJfcngpICUgUlhfUklOR19TSVpFOworCQlyZWNlaXZlZCsrIDsKKworICAgICAgICB9CisKKwkvKiBzdG9yZSBjdXJyZW50IHJpbmcgcG9pbnRlciBzdGF0ZSAqLworICAgICAgICB0cC0+Y3VyX3J4ID0gY3VyX3J4OworCisgICAgICAgIC8qIFJlZmlsbCB0aGUgUnggcmluZyBidWZmZXJzIGlmIHRoZXkgYXJlIG5lZWRlZCAqLworCXJlZmlsbF9yeF9yaW5nKCk7CisJLgorCS4KKworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2UgY2hhbmdlIGl0IHRvIGEgbmV3IG9uZSBiZWxvdzsgbm90ZSB0aGUgYWRkaXRpb25hbCBwYXJhbWV0ZXIgaW4KK3RoZSBjYWxsLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIHRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBuZXR3b3JrIGNvcmUgKi8KK3N0YXRpYyBpbnQgbXlfcG9sbCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCit7CisKKwlzdHJ1Y3QgbXlfcHJpdmF0ZSAqdHAgPSAoc3RydWN0IG15X3ByaXZhdGUgKilkZXYtPnByaXY7CisJcnhfcmluZyA9IHRwLT5yeF9yaW5nOworCWN1cl9yeCA9IHRwLT5jdXJfcng7CisJaW50IGVudHJ5ID0gY3VyX3J4ICUgUlhfQlVGX0xFTjsKKwkvKiBtYXhpbXVtIHBhY2tldHMgdG8gc2VuZCB0byB0aGUgc3RhY2sgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiogbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCWludCByeF93b3JrX2xpbWl0ID0gZGV2LT5xdW90YTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBlbmQgbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorICAgIGRvIHsgIC8vIG91dGVyIGJlZ2lubmluZyBsb29wIHN0YXJ0cyBoZXJlCisKKwljbGVhcl9yeF9zdGF0dXNfcmVnaXN0ZXJfYml0KCk7CisKKwl3aGlsZSAocnhfcmluZ19ub3RfZW1wdHkpIHsKKwkJdTMyIHJ4X3N0YXR1czsKKwkJdW5zaWduZWQgaW50IHJ4X3NpemU7CisJCXVuc2lnbmVkIGludCBwa3Rfc2l6ZTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKyAgICAgICAgICAgICAgICAvKiByZWFkIHNpemUrc3RhdHVzIG9mIG5leHQgZnJhbWUgZnJvbSBETUEgcmluZyBidWZmZXIgKi8KKwkJLyogdGhlIG51bWJlciAxNiBhbmQgNCBhcmUganVzdCBleGFtcGxlcyAqLworICAgICAgICAgICAgICAgIHJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1ICgqKHUzMiAqKSAocnhfcmluZyArIHJpbmdfb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcnhfc2l6ZSA9IHJ4X3N0YXR1cyA+PiAxNjsKKyAgICAgICAgICAgICAgICBwa3Rfc2l6ZSA9IHJ4X3NpemUgLSA0OworCisJCS8qIHByb2Nlc3MgZXJyb3JzICovCisgICAgICAgICAgICAgICAgaWYgKChyeF9zaXplID4gKE1BWF9FVEhfRlJBTUVfU0laRSs0KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCEocnhfc3RhdHVzICYgUnhTdGF0dXNPSykpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRkcnZfcnhfZXJyIChyeF9zdGF0dXMsIGRldiwgdHAsIGlvYWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorICAgICAgICAgICAgICAgIGlmICgtLXJ4X3dvcmtfbGltaXQgPCAwKSB7IC8qIHdlIGdvdCBwYWNrZXRzLCBidXQgbm8gcXVvdGEgKi8KKwkJCS8qIHN0b3JlIGN1cnJlbnQgcmluZyBwb2ludGVyIHN0YXRlICovCisJCQl0cC0+Y3VyX3J4ID0gY3VyX3J4OworCisJCQkvKiBSZWZpbGwgdGhlIFJ4IHJpbmcgYnVmZmVycyBpZiB0aGV5IGFyZSBuZWVkZWQgKi8KKwkJCXJlZmlsbF9yeF9yaW5nKGRldik7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5vdF9kb25lOworCQl9CisvKioqKioqKioqKioqKioqKioqKioqKiAgZW5kIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBncmFiIGEgc2tiICovCisgICAgICAgICAgICAgICAgc2tiID0gZGV2X2FsbG9jX3NrYiAocGt0X3NpemUgKyAyKTsKKyAgICAgICAgICAgICAgICBpZiAoc2tiKSB7CisJCQkuCisJCQkuCisvKioqKioqKioqKioqKioqKioqKioqKioqIG5vdGUgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKwkJCW5ldGlmX3JlY2VpdmVfc2tiIChza2IpOworLyoqKioqKioqKioqKioqKioqKioqKiogIGVuZCBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkuCisJCQkuCisgICAgICAgICAgICAgICAgfSBlbHNlIHsgIC8qIE9PTSAqLworCQkJLypzZWVtcyB2ZXJ5IGRyaXZlciBzcGVjaWZpYyAuLi4gY29tbW9uIGlzIGp1c3QgcGFzcworCQkJd2hhdGV2ZXIgaXMgb24gdGhlIHJpbmcgYWxyZWFkeS4gKi8KKyAgICAgICAgICAgICAgICB9CisKKwkJLyogbW92ZSB0byB0aGUgbmV4dCBza2Igb24gdGhlIHJpbmcgKi8KKwkJZW50cnkgPSAoKyt0cC0+Y3VyX3J4KSAlIFJYX1JJTkdfU0laRTsKKwkJcmVjZWl2ZWQrKyA7CisKKyAgICAgICAgfQorCisJLyogc3RvcmUgY3VycmVudCByaW5nIHBvaW50ZXIgc3RhdGUgKi8KKyAgICAgICAgdHAtPmN1cl9yeCA9IGN1cl9yeDsKKworICAgICAgICAvKiBSZWZpbGwgdGhlIFJ4IHJpbmcgYnVmZmVycyBpZiB0aGV5IGFyZSBuZWVkZWQgKi8KKwlyZWZpbGxfcnhfcmluZyhkZXYpOworCQorCS8qIG5vIHBhY2tldHMgb24gcmluZzsgYnV0IG5ldyBvbmVzIGNhbiBhcnJpdmUgc2luY2Ugd2UgbGFzdCAKKwkgICBjaGVja2VkICAqLworCXN0YXR1cyA9IHJlYWRfaW50ZXJydXB0X3N0YXR1c19yZWcoKTsKKwlpZiAocnggc3RhdHVzIGlzIG5vdCBzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHNvbWV0aGluZyBhcnJpdmVzIGluIHRoaXMgbmFycm93IHdpbmRvdywKKwkJCWFuIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKwkvKiBkb25lISBhdCBsZWFzdCB0aGF0cyB3aGF0IGl0IGxvb2tzIGxpa2UgOy0+CisJaWYgbmV3IHBhY2tldHMgY2FtZSBpbiBhZnRlciBvdXIgbGFzdCBjaGVjayBvbiBzdGF0dXMgYml0cworCXRoZXknbGwgYmUgY2F1Z2h0IGJ5IHRoZSB3aGlsZSBjaGVjayBhbmQgd2UgZ28gYmFjayBhbmQgY2xlYXIgdGhlbSAKKwlzaW5jZSB3ZSBoYXZlbnQgZXhjZWVkZWQgb3VyIHF1b3RhICovCisgICAgfSB3aGlsZSAocnhfc3RhdHVzX2lzX3NldCk7IAorCitkb25lOgorCisvKioqKioqKioqKioqKioqKioqKioqKioqIG5vdGUgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKyAgICAgICAgZGV2LT5xdW90YSAtPSByZWNlaXZlZDsKKyAgICAgICAgKmJ1ZGdldCAtPSByZWNlaXZlZDsKKworICAgICAgICAvKiBJZiBSWCByaW5nIGlzIG5vdCBmdWxsIHdlIGFyZSBvdXQgb2YgbWVtb3J5LiAqLworICAgICAgICBpZiAodHAtPnJ4X2J1ZmZlcnNbdHAtPmRpcnR5X3J4ICUgUlhfUklOR19TSVpFXS5za2IgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIG9vbTsKKworCS8qIHdlIGFyZSBoYXBweS9kb25lLCBubyBtb3JlIHBhY2tldHMgb24gcmluZzsgcHV0IHVzIGJhY2sKKwl0byB3aGVyZSB3ZSBjYW4gc3RhcnQgcHJvY2Vzc2luZyBpbnRlcnJ1cHRzIGFnYWluICovCisgICAgICAgIG5ldGlmX3J4X2NvbXBsZXRlKGRldik7CisJZW5hYmxlX3J4X2FuZF9yeG5vYnVmX2ludHMoKTsKKworICAgICAgIC8qIFRoZSBsYXN0IG9wIGhhcHBlbnMgYWZ0ZXIgcG9sbCBjb21wbGV0aW9uLiBXaGljaCBtZWFucyB0aGUgZm9sbG93aW5nOgorICAgICAgICAqIDEuIGl0IGNhbiByYWNlIHdpdGggZGlzYWJsaW5nIGlycXMgaW4gaXJxIGhhbmRsZXIgKHdoaWNoIGFyZSBkb25lIHRvIAorCSogc2NoZWR1bGUgcG9sbHMpCisgICAgICAgICogMi4gaXQgY2FuIHJhY2Ugd2l0aCBkaXMvZW5hYmxpbmcgaXJxcyBpbiBvdGhlciBwb2xsIHRocmVhZHMKKyAgICAgICAgKiAzLiBpZiBhbiBpcnEgcmFpc2VkIGFmdGVyIHRoZSBiZWdpbmluZyBvZiB0aGUgb3V0ZXIgIGJlZ2lubmluZyAKKyAgICAgICAgKiBsb29wKG1hcmtlZCBpbiB0aGUgY29kZSBhYm92ZSksIGl0IHdpbGwgYmUgaW1tZWRpYXRlbHkKKyAgICAgICAgKiB0cmlnZ2VyZWQgaGVyZS4KKyAgICAgICAgKgorICAgICAgICAqIFN1bW1hcml6aW5nOiB0aGUgbG9naWMgbWF5IHJlc3VsdHMgaW4gc29tZSByZWR1bmRhbnQgaXJxcyBib3RoCisgICAgICAgICogZHVlIHRvIHJhY2VzIGluIG1hc2tpbmcgYW5kIGR1ZSB0byB0b28gbGF0ZSBhY2tpbmcgb2YgYWxyZWFkeQorICAgICAgICAqIHByb2Nlc3NlZCBpcnFzLiBUaGUgZ29vZCBuZXdzOiBubyBldmVudHMgYXJlIGV2ZXIgbG9zdC4KKyAgICAgICAgKi8KKworICAgICAgICByZXR1cm4gMDsgICAvKiBkb25lICovCisKK25vdF9kb25lOgorICAgICAgICBpZiAodHAtPmN1cl9yeCAtIHRwLT5kaXJ0eV9yeCA+IFJYX1JJTkdfU0laRS8yIHx8CisgICAgICAgICAgICB0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJlZmlsbF9yeF9yaW5nKGRldik7CisKKyAgICAgICAgaWYgKCFyZWNlaXZlZCkgeworICAgICAgICAgICAgICAgIHByaW50aygicmVjZWl2ZWQ9PTBcbiIpOworICAgICAgICAgICAgICAgIHJlY2VpdmVkID0gMTsKKyAgICAgICAgfQorICAgICAgICBkZXYtPnF1b3RhIC09IHJlY2VpdmVkOworICAgICAgICAqYnVkZ2V0IC09IHJlY2VpdmVkOworICAgICAgICByZXR1cm4gMTsgIC8qIG5vdF9kb25lICovCisKK29vbToKKyAgICAgICAgLyogU3RhcnQgdGltZXIsIHN0b3AgcG9sbGluZywgYnV0IGRvIG5vdCBlbmFibGUgcnggaW50ZXJydXB0cy4gKi8KKwlzdGFydF9wb2xsX3RpbWVyKGRldik7CisgICAgICAgIHJldHVybiAwOyAgLyogd2UnbGwgdGFrZSBpdCBmcm9tIGhlcmUgc28gdGVsbCBjb3JlICJkb25lIiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG5vdGUgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnJvbSBhYm92ZSB3ZSBub3RlIHRoYXQ6CiswKSByeF93b3JrX2xpbWl0ID0gZGV2LT5xdW90YSAKKzEpIHJlZmlsbF9yeF9yaW5nKCkgaXMgaW4gY2hhcmdlIG9mIGNsZWFyaW5nIHRoZSBiaXQgZm9yIHJ4bm9idWZmIHdoZW4KK2l0IGRvZXMgdGhlIHdvcmsuCisyKSBXZSBoYXZlIGEgZG9uZSBhbmQgbm90X2RvbmUgc3RhdGUuCiszKSBpbnN0ZWFkIG9mIG5ldGlmX3J4KCkgd2UgY2FsbCBuZXRpZl9yZWNlaXZlX3NrYigpIHRvIHBhc3MgdGhlIHNrYi4KKzQpIHdlIGhhdmUgYSBuZXcgd2F5IG9mIGhhbmRsaW5nIG9vbSBjb25kaXRpb24KKzUpIEEgbmV3IG91dGVyIGZvciAoOzspIGxvb3AgaGFzIGJlZW4gYWRkZWQuIFRoaXMgc2VydmVzIHRoZSBwdXJwb3NlIG9mCitlbnN1cmluZyB0aGF0IGlmIGEgbmV3IHBhY2tldCBoYXMgY29tZSBpbiwgYWZ0ZXIgd2UgYXJlIGFsbCBzZXQgYW5kIGRvbmUsCithbmQgd2UgaGF2ZSBub3QgZXhjZWVkZWQgb3VyIHF1b3RhIHRoYXQgd2UgY29udGludWUgc2VuZGluZyBwYWNrZXRzIHVwLgorIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUG9sbCB0aW1lciBjb2RlIHdpbGwgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSAKKworICAgICAgICBpZiAodHAtPmN1cl9yeCAtIHRwLT5kaXJ0eV9yeCA+IFJYX1JJTkdfU0laRS8yIHx8CisgICAgICAgICAgICB0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKSAKKyAgICAgICAgICAgICAgICByZWZpbGxfcnhfcmluZyhkZXYpOworCisgICAgICAgIC8qIElmIFJYIHJpbmcgaXMgbm90IGZ1bGwgd2UgYXJlIHN0aWxsIG91dCBvZiBtZW1vcnkuCisJICAgUmVzdGFydCB0aGUgdGltZXIgYWdhaW4uIEVsc2Ugd2UgcmUtYWRkIG91cnNlbHZlcyAKKyAgICAgICAgICAgdG8gdGhlIG1hc3RlciBwb2xsIGxpc3QuCisgICAgICAgICAqLworCisgICAgICAgIGlmICh0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJlc3RhcnRfdGltZXIoKTsKKworCWVsc2UgbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsgIC8qIHdlIGFyZSBiYWNrIG9uIHRoZSBwb2xsIGxpc3QgKi8KKwkKKzUpIGRldi0+Y2xvc2UoKSBhbmQgZGV2LT5zdXNwZW5kKCkgaXNzdWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBkcml2ZXIgd3JpdHRlciBuZWVkbnQgd29ycnkgYWJvdXQgdGhpcy4gVGhlIHRvcCBuZXQgbGF5ZXIgdGFrZXMKK2NhcmUgb2YgaXQuCisKKzYpIEFkZGluZyBuZXcgU3RhdHMgdG8gL3Byb2MgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSW4gb3JkZXIgdG8gZGVidWcgc29tZSBvZiB0aGUgbmV3IGZlYXR1cmVzLCB3ZSBpbnRyb2R1Y2UgbmV3IHN0YXRzCit0aGF0IG5lZWQgdG8gYmUgY29sbGVjdGVkLgorVE9ETzogRmlsbCB0aGlzIGxhdGVyLgorCitBUFBFTkRJWCAxOiBkaXNjdXNzaW9uIG9uIHVzaW5nIGV0aGVybmV0IEhXIEZDCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitNb3N0IGNoaXBzIHdpdGggRkMgb25seSBzZW5kIGEgcGF1c2UgcGFja2V0IHdoZW4gdGhleSBydW4gb3V0IG9mIFJ4IGJ1ZmZlcnMuCitTaW5jZSBwYWNrZXRzIGFyZSBwdWxsZWQgb2ZmIHRoZSBETUEgcmluZyBieSBhIHNvZnRpcnEgaW4gTkFQSSwKK2lmIHRoZSBzeXN0ZW0gaXMgc2xvdyBpbiBncmFiYmluZyB0aGVtIGFuZCB3ZSBoYXZlIGEgaGlnaCBpbnB1dAorcmF0ZSAoZmFzdGVyIHRoYW4gdGhlIHN5c3RlbSdzIGNhcGFjaXR5IHRvIHJlbW92ZSBwYWNrZXRzKSwgdGhlbiB0aGVvcmV0aWNhbGx5Cit0aGVyZSB3aWxsIG9ubHkgYmUgb25lIHJ4IGludGVycnVwdCBmb3IgYWxsIHBhY2tldHMgZHVyaW5nIGEgZ2l2ZW4gcGFja2V0c3Rvcm0uCitVbmRlciBsb3cgbG9hZCwgd2UgbWlnaHQgaGF2ZSBhIHNpbmdsZSBpbnRlcnJ1cHQgcGVyIHBhY2tldC4KK0ZDIHNob3VsZCBiZSBwcm9ncmFtbWVkIHRvIGFwcGx5IGluIHRoZSBjYXNlIHdoZW4gdGhlIHN5c3RlbSBjYW50IHB1bGwgb3V0CitwYWNrZXRzIGZhc3QgZW5vdWdoIGkuZSBzZW5kIGEgcGF1c2Ugb25seSB3aGVuIHlvdSBydW4gb3V0IG9mIHJ4IGJ1ZmZlcnMuCitOb3RlIEZDIGluIGl0c2VsZiBpcyBhIGdvb2Qgc29sdXRpb24gYnV0IHdlIGhhdmUgZm91bmQgaXQgdG8gbm90IGJlCittdWNoIG9mIGEgY29tbW9kaXR5IGZlYXR1cmUgKGJvdGggaW4gTklDcyBhbmQgc3dpdGNoZXMpIGFuZCBoZW5jZSBmYWxscwordW5kZXIgdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdXNpbmcgTklDIGJhc2VkIG1pdGlnYXRpb24uIEFsc28gZXhwZXJpbWVudHMKK2luZGljYXRlIHRoYXQgaXRzIG11Y2ggaGFyZGVyIHRvIHJlc29sdmUgdGhlIHJlc291cmNlIGFsbG9jYXRpb24KK2lzc3VlIChha2EgbGF6eSByZWNlaXZpbmcgdGhhdCBOQVBJIG9mZmVycykgYW5kIGhlbmNlIHF1YW50aWZ5IGl0cyB1c2VmdWxsbmVzcworcHJvdmVkIGhhcmRlci4gSW4gYW55IGNhc2UsIEZDIHdvcmtzIGV2ZW4gYmV0dGVyIHdpdGggTkFQSSBidXQgaXMgbm90CituZWNlc3NhcnkuCisKKworQVBQRU5ESVggMjogdGhlICJyb3R0aW5nIHBhY2tldCIgcmFjZS13aW5kb3cgYXZvaWRhbmNlIHNjaGVtZSAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBhc3NvY2lhdGlvbnMgc2VlbiBoZXJlCisKKzEpIHN0YXR1cy9pbnQgd2hpY2ggaG9ub3JzIGxldmVsIHRyaWdnZXJlZCBJUlEKKworSWYgYSBzdGF0dXMgYml0IGZvciByZWNlaXZlIG9yIHJ4bm9idWZmIGlzIHNldCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgCitpbnRlcnJ1cHQtZW5hYmxlIGJpdCBpcyBub3Qgb24sIHRoZW4gbm8gaW50ZXJydXB0cyB3aWxsIGJlIGdlbmVyYXRlZC4gSG93ZXZlciwgCithcyBzb29uIGFzIHRoZSAiaW50ZXJydXB0LWVuYWJsZSIgYml0IGlzIHVubWFza2VkLCBhbiBpbW1lZGlhdGUgaW50ZXJydXB0IGlzIAorZ2VuZXJhdGVkLiAgW2Fzc3VtaW5nIHRoZSBzdGF0dXMgYml0IHdhcyBub3QgdHVybmVkIG9mZl0uCitHZW5lcmFsbHkgdGhlIGNvbmNlcHQgb2YgbGV2ZWwgdHJpZ2dlcmVkIElSUXMgaW4gYXNzb2NpYXRpb24gd2l0aCBhIHN0YXR1cyBhbmQKK2ludGVycnVwdC1lbmFibGUgQ1NSIHJlZ2lzdGVyIHNldCBpcyB1c2VkIHRvIGF2b2lkIHRoZSByYWNlLgorCitJZiB3ZSB0YWtlIHRoZSBleGFtcGxlIG9mIHRoZSB0dWxpcDoKKyJwZW5kaW5nIHdvcmsiIGlzIGluZGljYXRlZCBieSB0aGUgc3RhdHVzIGJpdChDU1I1IGluIHR1bGlwKS4KK3RoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCBiaXQgKENTUjcgaW4gdHVsaXApIG1pZ2h0IGJlIHR1cm5lZCBvZmYgKGJ1dAordGhlIENTUjUgd2lsbCBjb250aW51ZSB0byBiZSB0dXJuZWQgb24gd2l0aCBuZXcgcGFja2V0IGFycml2YWxzIGV2ZW4gaWYKK3dlIGNsZWFyIGl0IHRoZSBmaXJzdCB0aW1lKQorVmVyeSBpbXBvcnRhbnQgaXMgdGhlIGZhY3QgdGhhdCBpZiB3ZSB0dXJuIG9uIHRoZSBpbnRlcnJ1cHQgYml0IG9uIHdoZW4KK3N0YXR1cyBpcyBzZXQgdGhhdCBhbiBpbW1lZGlhdGUgaXJxIGlzIHRyaWdnZXJlZC4KKyAKK0lmIHdlIGNsZWFyZWQgdGhlIHJ4IHJpbmcgYW5kIHByb2NsYWltZWQgdGhlcmUgd2FzICJubyBtb3JlIHdvcmsKK3RvIGJlIGRvbmUiIGFuZCB0aGVuIHdlbnQgb24gdG8gZG8gYSBmZXcgb3RoZXIgdGhpbmdzOyAgdGhlbiB3aGVuIHdlIGVuYWJsZQoraW50ZXJydXB0cywgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IGEgbmV3IHBhY2tldCBtaWdodCBzbmVhayBpbiBkdXJpbmcKK3RoaXMgcGhhc2UuIEl0IGhlbHBzIHRvIGxvb2sgYXQgdGhlIHBzZXVkbyBjb2RlIGZvciB0aGUgdHVsaXAgcG9sbAorcm91dGluZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIEFDSzsKKyAgICAgICAgICAgICAgICB3aGlsZSAocmluZ19pc19ub3RfZW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yay13b3JrLXdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHF1b3RhIGlzIGV4Y2VlZGVkOiBleGl0LCBubyB0b3VjaGluZyBpcnEgc3RhdHVzL21hc2sKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogTm8gcGFja2V0cywgYnV0IG5ldyBjYW4gYXJyaXZlIHdoaWxlIHdlIGFyZSBkb2luZyB0aGlzKi8KKyAgICAgICAgICAgICAgICBDU1I1IDo9IHJlYWQKKyAgICAgICAgICAgICAgICBpZiAoQ1NSNSBpcyBub3Qgc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBzb21ldGhpbmcgYXJyaXZlcyBpbiB0aGlzIG5hcnJvdyB3aW5kb3cgaGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICogIHdoZXJlIHRoZSBjb21tZW50cyBhcmUgOy0+IGlycSB3aWxsIGJlIGdlbmVyYXRlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXNrIGlycXM7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHBvbGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChyeF9zdGF0dXNfaXNfc2V0KTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDU1I1IGJpdCBvZiBpbnRlcmVzdCBpcyBvbmx5IHRoZSByeCBzdGF0dXMuIAorSWYgeW91IGxvb2sgYXQgdGhlIGxhc3QgaWYgc3RhdGVtZW50OiAKK3lvdSBqdXN0IGZpbmlzaGVkIGdyYWJiaW5nIGFsbCB0aGUgcGFja2V0cyBmcm9tIHRoZSByeCByaW5nIC4uIHlvdSBjaGVjayBpZgorc3RhdHVzIGJpdCBzYXlzIHRoZXJlcyBtb3JlIHBhY2tldHMganVzdCBpbiAuLi4gaXQgc2F5cyBub25lOyB5b3UgdGhlbgorZW5hYmxlIHJ4IGludGVycnVwdHMgYWdhaW47IGlmIGEgbmV3IHBhY2tldCBqdXN0IGNhbWUgaW4gZHVyaW5nIHRoaXMgY2hlY2ssCit3ZSBhcmUgY291bnRpbmcgdGhhdCBDU1I1IHdpbGwgYmUgc2V0IGluIHRoYXQgc21hbGwgd2luZG93IG9mIG9wcG9ydHVuaXR5CithbmQgdGhhdCBieSByZS1lbmFibGluZyBpbnRlcnJ1cHRzLCB3ZSB3b3VsZCBhY3R1YWxseSB0cmlnZXIgYW4gaW50ZXJydXB0Cit0byByZWdpc3RlciB0aGUgbmV3IHBhY2tldCBmb3IgcHJvY2Vzc2luZy4KKworW1RoZSBhYm92ZSBkZXNjcmlwdGlvbiBuYXkgYmUgdmVyeSB2ZXJib3NlLCBpZiB5b3UgaGF2ZSBiZXR0ZXIgd29yZGluZyAKK3RoYXQgd2lsbCBtYWtlIHRoaXMgbW9yZSB1bmRlcnN0YW5kYWJsZSwgcGxlYXNlIHN1Z2dlc3QgaXQuXQorCisyKSBub24tY2FwYWJsZSBoYXJkd2FyZQorCitUaGVzZSBkbyBub3QgZ2VuZXJhbGx5IHJlc3BlY3QgbGV2ZWwgdHJpZ2dlcmVkIElSUXMuIE5vcm1hbGx5LAoraXJxcyBtYXkgYmUgbG9zdCB3aGlsZSBiZWluZyBtYXNrZWQgYW5kIHRoZSBvbmx5IHdheSB0byBsZWF2ZSBwb2xsIGlzIHRvIGRvCithIGRvdWJsZSBjaGVjayBmb3IgbmV3IGlucHV0IGFmdGVyIG5ldGlmX3J4X2NvbXBsZXRlKCkgaXMgaW52b2tlZAorYW5kIHJlLWVuYWJsZSBwb2xsaW5nIChhZnRlciBzZWVpbmcgdGhpcyBuZXcgaW5wdXQpLgorCitTYW1wbGUgY29kZToKKworLS0tLS0tLS0tCisJLgorCS4KK3Jlc3RhcnRfcG9sbDoKKwl3aGlsZSAocmluZ19pc19ub3RfZW1wdHkoKSkgeworCQl3b3JrLXdvcmstd29yaworCQlpZiBxdW90YSBpcyBleGNlZWRlZDogZXhpdCwgbm90IHRvdWNoaW5nIGlycSBzdGF0dXMvbWFzaworCX0KKwkuCisJLgorCS4KKwllbmFibGVfcnhfaW50ZXJydXB0cygpCisJbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKwlpZiAocmluZ19oYXNfbmV3X3BhY2tldCgpICYmIG5ldGlmX3J4X3Jlc2NoZWR1bGUoZGV2LCByZWNlaXZlZCkpIHsKKwkJZGlzYWJsZV9yeF9hbmRfcnhub2J1ZnMoKQorCQlnb3RvIHJlc3RhcnRfcG9sbAorCX0gd2hpbGUgKHJ4X3N0YXR1c19pc19zZXQpOworLS0tLS0tLS0tCisJCQorQmFzaWNhbGx5IG5ldGlmX3J4X2NvbXBsZXRlKCkgcmVtb3ZlcyB1cyBmcm9tIHRoZSBwb2xsIGxpc3QsIGJ1dCBiZWNhdXNlIGEKK25ldyBwYWNrZXQgd2hpY2ggd2lsbCBuZXZlciBiZSBjYXVnaHQgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJhY2UKK21pZ2h0IGNvbWUgaW4sIHdlIGF0dGVtcHQgdG8gcmUtYWRkIG91cnNlbHZlcyB0byB0aGUgcG9sbCBsaXN0LiAKKworCisKKworQVBQRU5ESVggMzogU2NoZWR1bGluZyBpc3N1ZXMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0FzIHNlZW4gTkFQSSBtb3ZlcyBwcm9jZXNzaW5nIHRvIHNvZnRpcnEgbGV2ZWwuIExpbnV4IHVzZXMgdGhlIGtzb2Z0aXJxZCBhcyB0aGUgCitnZW5lcmFsIHNvbHV0aW9uIHRvIHNjaGVkdWxlIHNvZnRpcnEncyB0byBydW4gYmVmb3JlIG5leHQgaW50ZXJydXB0IGFuZCBieSBwdXR0aW5nIAordGhlbSB1bmRlciBzY2hlZHVsZXIgY29udHJvbC4gQWxzbyB0aGlzIHByZXZlbnRzIGNvbnNlY3V0aXZlIHNvZnRpcnEncyBmcm9tIAorbW9ub3BvbGl6ZSB0aGUgQ1BVLiBUaGlzIGFsc28gaGF2ZSB0aGUgZWZmZWN0IHRoYXQgdGhlIHByaW9yaXR5IG9mIGtzb2Z0aXJxIG5lZWRzIAordG8gYmUgY29uc2lkZXJlZCB3aGVuIHJ1bm5pbmcgdmVyeSBDUFUtaW50ZW5zaXZlIGFwcGxpY2F0aW9ucyBhbmQgbmV0d29ya2luZyB0bworZ2V0IHRoZSBwcm9wZXIgYmFsYW5jZSBvZiBzb2Z0aXJxL3VzZXIgYmFsYW5jZS4gSW5jcmVhc2luZyBrc29mdGlycSBwcmlvcml0eSB0byAwIAorKGV2ZW50dWFsbHkgbW9yZSkgaXMgcmVwb3J0ZWQgY3VyZSBwcm9ibGVtcyB3aXRoIGxvdyBuZXR3b3JrIHBlcmZvcm1hbmNlIGF0IGhpZ2ggCitDUFUgbG9hZC4KKworTW9zdCB1c2VkIHByb2Nlc3NlcyBpbiBhIEdJR0Ugcm91dGVyOgorVVNFUiAgICAgICBQSUQgJUNQVSAlTUVNICBTSVpFICAgUlNTIFRUWSBTVEFUIFNUQVJUICAgVElNRSBDT01NQU5ECityb290ICAgICAgICAgMyAgMC4yICAwLjAgICAgIDAgICAgIDAgID8gIFJXTiBBdWcgMTUgNjAyOjAwIChrc29mdGlycWRfQ1BVMCkKK3Jvb3QgICAgICAgMjMyICAwLjAgIDcuOSA0MTQwMCA0MDg4NCAgPyAgUyAgIEF1ZyAxNSAgNzQ6MTIgZ2F0ZWQgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3JlbGV2YW50IHNpdGVzOgorPT09PT09PT09PT09PT09PT09CitmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9OQVBJLworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUT0RPOiBXcml0ZSBuZXQtc2tlbGV0b24uYyBkcml2ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F1dGhvcnM6Cis9PT09PT09PQorQWxleGV5IEt1em5ldHNvdiA8a3V6bmV0QG1zMi5pbnIuYWMucnU+CitKYW1hbCBIYWRpIFNhbGltIDxoYWRpQGN5YmVydXMuY2E+CitSb2JlcnQgT2xzc29uIDxSb2JlcnQuT2xzc29uQGRhdGEuc2x1LnNlPgorCitBY2tub3dsZWRnZW1lbnRzOgorPT09PT09PT09PT09PT09PQorUGVvcGxlIHdobyBtYWRlIHRoaXMgZG9jdW1lbnQgYmV0dGVyOgorCitMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBnbnUub3JnPgorQW5kcmV3IE1vcnRvbiAgPGFrcG1AemlwLmNvbS5hdT4KK01hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+CitEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPgorSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1BMSVAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1BMSVAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkN2UzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUExJUC50eHQKQEAgLTAsMCArMSwyMTUgQEAKK1BMSVA6IFRoZSBQYXJhbGxlbCBMaW5lIEludGVybmV0IFByb3RvY29sIERldmljZQorCitEb25hbGQgQmVja2VyIChiZWNrZXJAc3VwZXIub3JnKQorSS5ELkEuIFN1cGVyY29tcHV0aW5nIFJlc2VhcmNoIENlbnRlciwgQm93aWUgTUQgMjA3MTUKKworQXQgc29tZSBwb2ludCBULiBUaG9ybiB3aWxsIHByb2JhYmx5IGNvbnRyaWJ1dGUgdGV4dCwKK1RvbW15IFRob3JuICh0dGhvcm5AZGFpbWkuYWF1LmRrKQorCitQTElQIEludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHBhcmFsbGVsIHBvcnQgcGFja2V0IHB1c2hlciBmb3IgTmV0L0xHWC4KK1RoaXMgZGV2aWNlIGludGVyZmFjZSBhbGxvd3MgYSBwb2ludC10by1wb2ludCBjb25uZWN0aW9uIGJldHdlZW4gdHdvCitwYXJhbGxlbCBwb3J0cyB0byBhcHBlYXIgYXMgYSBJUCBuZXR3b3JrIGludGVyZmFjZS4KKworV2hhdCBpcyBQTElQPworPT09PT09PT09PT09PQorCitQTElQIGlzIFBhcmFsbGVsIExpbmUgSVAsIHRoYXQgaXMsIHRoZSB0cmFuc3BvcnRhdGlvbiBvZiBJUCBwYWNrYWdlcworb3ZlciBhIHBhcmFsbGVsIHBvcnQuIEluIHRoZSBjYXNlIG9mIGEgUEMsIHRoZSBvYnZpb3VzIGNob2ljZSBpcyB0aGUKK3ByaW50ZXIgcG9ydC4gIFBMSVAgaXMgYSBub24tc3RhbmRhcmQsIGJ1dCBbY2FuIHVzZV0gdXNlcyB0aGUgc3RhbmRhcmQKK0xhcExpbmsgbnVsbC1wcmludGVyIGNhYmxlIFtjYW4gYWxzbyB3b3JrIGluIHR1cmJvIG1vZGUsIHdpdGggYSBQTElQCitjYWJsZV0uIFtUaGUgcHJvdG9jb2wgdXNlZCB0byBwYWNrIElQIHBhY2thZ2VzLCBpcyBhIHNpbXBsZSBvbmUKK2luaXRpYXRlZCBieSBDcnlud3IuXQorCitBZHZhbnRhZ2VzIG9mIFBMSVAKKz09PT09PT09PT09PT09PT09PQorCitJdCdzIGNoZWFwLCBpdCdzIGF2YWlsYWJsZSBldmVyeXdoZXJlLCBhbmQgaXQncyBlYXN5LgorCitUaGUgUExJUCBjYWJsZSBpcyBhbGwgdGhhdCdzIG5lZWRlZCB0byBjb25uZWN0IHR3byBMaW51eCBib3hlcywgYW5kIGl0CitjYW4gYmUgYnVpbHQgZm9yIHZlcnkgZmV3IGJ1Y2tzLgorCitDb25uZWN0aW5nIHR3byBMaW51eCBib3hlcyB0YWtlcyBvbmx5IGEgc2Vjb25kJ3MgZGVjaXNpb24gYW5kIGEgZmV3CittaW51dGVzJyB3b3JrLCBubyBuZWVkIHRvIHNlYXJjaCBmb3IgYSBbc3VwcG9ydGVkXSBuZXRjYXJkLiBUaGlzIG1pZ2h0CitldmVuIGJlIGVzcGVjaWFsbHkgaW1wb3J0YW50IGluIHRoZSBjYXNlIG9mIG5vdGVib29rcywgd2hlcmUgbmV0Y2FyZHMKK2FyZSBub3QgZWFzaWx5IGF2YWlsYWJsZS4KKworTm90IHJlcXVpcmluZyBhIG5ldGNhcmQgYWxzbyBtZWFucyB0aGF0IGFwYXJ0IGZyb20gY29ubmVjdGluZyB0aGUKK2NhYmxlcywgZXZlcnl0aGluZyBlbHNlIGlzIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24gW3doaWNoIGluIHByaW5jaXBsZQorY291bGQgYmUgbWFkZSB2ZXJ5IGVhc3kuXQorCitEaXNhZHZhbnRhZ2VzIG9mIFBMSVAKKz09PT09PT09PT09PT09PT09PT09PQorCitEb2Vzbid0IHdvcmsgb3ZlciBhIG1vZGVtLCBsaWtlIFNMSVAgYW5kIFBQUC4gTGltaXRlZCByYW5nZSwgMTUgbS4KK0NhbiBvbmx5IGJlIHVzZWQgdG8gY29ubmVjdCB0aHJlZSAoPykgTGludXggYm94ZXMuIERvZXNuJ3QgY29ubmVjdCB0bworYW4gZXhpc3RpbmcgRXRoZXJuZXQuIElzbid0IHN0YW5kYXJkIChub3QgZXZlbiBkZSBmYWN0byBzdGFuZGFyZCwgbGlrZQorU0xJUCkuCisKK1BlcmZvcm1hbmNlCis9PT09PT09PT09PQorCitQTElQIGVhc2lseSBvdXRwZXJmb3JtcyBFdGhlcm5ldCBjYXJkcy4uLi4odXBzLCBJIHdhcyBkcmVhbWluZywgYnV0CitpdCAqaXMqIGdldHRpbmcgbGF0ZS4gRU9CKQorCitQTElQIGRyaXZlciBkZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBMaW51eCBQTElQIGRyaXZlciBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3JpZ2luYWwgQ3J5bndyIHByb3RvY29sLAordGhhdCB1c2VzIHRoZSBwYXJhbGxlbCBwb3J0IHN1YnN5c3RlbSBvZiB0aGUga2VybmVsIGluIG9yZGVyIHRvIHByb3Blcmx5CitzaGFyZSBwYXJhbGxlbCBwb3J0cyBiZXR3ZWVuIFBMSVAgYW5kIG90aGVyIHNlcnZpY2VzLgorCitJUlFzIGFuZCB0cmlnZ2VyIHRpbWVvdXRzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gYSBwYXJhbGxlbCBwb3J0IHVzZWQgZm9yIGEgUExJUCBkcml2ZXIgaGFzIGFuIElSUSBjb25maWd1cmVkIHRvIGl0LCB0aGUKK1BMSVAgZHJpdmVyIGlzIHNpZ25hbGVkIHdoZW5ldmVyIGRhdGEgaXMgc2VudCB0byBpdCB2aWEgdGhlIGNhYmxlLCBzdWNoIHRoYXQKK3doZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUsIHRoZSBkcml2ZXIgaXNuJ3QgYmVpbmcgdXNlZC4KKworSG93ZXZlciwgb24gc29tZSBtYWNoaW5lcyBpdCBpcyBoYXJkLCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gY29uZmlndXJlIGFuIElSUQordG8gYSBjZXJ0YWluIHBhcmFsbGVsIHBvcnQsIG1haW5seSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgc29tZSBvdGhlciBkZXZpY2UuCitPbiB0aGVzZSBtYWNoaW5lcywgdGhlIFBMSVAgZHJpdmVyIGNhbiBiZSB1c2VkIGluIElSUS1sZXNzIG1vZGUsIHdoZXJlCit0aGUgUExJUCBkcml2ZXIgd291bGQgY29uc3RhbnRseSBwb2xsIHRoZSBwYXJhbGxlbCBwb3J0IGZvciBkYXRhIHdhaXRpbmcsCithbmQgaWYgc3VjaCBkYXRhIGlzIGF2YWlsYWJsZSwgcHJvY2VzcyBpdC4gVGhpcyBtb2RlIGlzIGxlc3MgZWZmaWNpZW50IHRoYW4KK3RoZSBJUlEgbW9kZSwgYmVjYXVzZSB0aGUgZHJpdmVyIGhhcyB0byBjaGVjayB0aGUgcGFyYWxsZWwgcG9ydCBtYW55IHRpbWVzCitwZXIgc2Vjb25kLCBldmVuIHdoZW4gbm8gZGF0YSBhdCBhbGwgaXMgc2VudC4gU29tZSByb3VnaCBtZWFzdXJlbWVudHMKK2luZGljYXRlIHRoYXQgdGhlcmUgaXNuJ3QgYSBub3RpY2VhYmxlIHBlcmZvcm1hbmNlIGRyb3Agd2hlbiB1c2luZyBJUlEtbGVzcworbW9kZSBhcyBjb21wYXJlZCB0byBJUlEgbW9kZSBhcyBmYXIgYXMgdGhlIGRhdGEgdHJhbnNmZXIgc3BlZWQgaXMgaW52b2x2ZWQuCitUaGVyZSBpcyBhIHBlcmZvcm1hbmNlIGRyb3Agb24gdGhlIG1hY2hpbmUgaG9zdGluZyB0aGUgZHJpdmVyLgorCitXaGVuIHRoZSBQTElQIGRyaXZlciBpcyB1c2VkIGluIElSUSBtb2RlLCB0aGUgdGltZW91dCB1c2VkIGZvciB0cmlnZ2VyaW5nIGEKK2RhdGEgdHJhbnNmZXIgKHRoZSBtYXhpbWFsIHRpbWUgdGhlIFBMSVAgZHJpdmVyIHdvdWxkIGFsbG93IHRoZSBvdGhlciBzaWRlCitiZWZvcmUgYW5ub3VuY2luZyBhIHRpbWVvdXQsIHdoZW4gdHJ5aW5nIHRvIGhhbmRzaGFrZSBhIHRyYW5zZmVyIG9mIHNvbWUKK2RhdGEpIGlzLCBieSBkZWZhdWx0LCA1MDB1c2VjLiBBcyBJUlEgZGVsaXZlcnkgaXMgbW9yZSBvciBsZXNzIGltbWVkaWF0ZSwKK3RoaXMgdGltZW91dCBpcyBxdWl0ZSBzdWZmaWNpZW50LiAKKworV2hlbiBpbiBJUlEtbGVzcyBtb2RlLCB0aGUgUExJUCBkcml2ZXIgcG9sbHMgdGhlIHBhcmFsbGVsIHBvcnQgSFogdGltZXMKK3BlciBzZWNvbmQgKHdoZXJlIEhaIGlzIHR5cGljYWxseSAxMDAgb24gbW9zdCBwbGF0Zm9ybXMsIGFuZCAxMDI0IG9uIGFuCitBbHBoYSwgYXMgb2YgdGhpcyB3cml0aW5nKS4gQmV0d2VlbiB0d28gc3VjaCBwb2xscywgdGhlcmUgYXJlIDEwXjYvSFogdXNlY3MuCitPbiBhbiBpMzg2LCBmb3IgZXhhbXBsZSwgMTBeNi8xMDAgPSAxMDAwMHVzZWMuIEl0IGlzIGVhc3kgdG8gc2VlIHRoYXQgaXQgaXMKK3F1aXRlIHBvc3NpYmxlIGZvciB0aGUgdHJpZ2dlciB0aW1lb3V0IHRvIGV4cGlyZSBiZXR3ZWVuIHR3byBzdWNoIHBvbGxzLCBhcwordGhlIHRpbWVvdXQgaXMgb25seSA1MDB1c2VjIGxvbmcuIEFzIGEgcmVzdWx0LCBpdCBpcyByZXF1aXJlZCB0byBjaGFuZ2UgdGhlCit0cmlnZ2VyIHRpbWVvdXQgb24gdGhlICpvdGhlciogc2lkZSBvZiBhIFBMSVAgY29ubmVjdGlvbiwgdG8gYWJvdXQKKzEwXjYvSFogdXNlY3MuIElmIGJvdGggc2lkZXMgb2YgYSBQTElQIGNvbm5lY3Rpb24gYXJlIHVzZWQgaW4gSVJRLWxlc3MgbW9kZSwKK3RoaXMgdGltZW91dCBpcyByZXF1aXJlZCBvbiBib3RoIHNpZGVzLgorCitJdCBhcHBlYXJzIHRoYXQgaW4gcHJhY3RpY2UsIHRoZSB0cmlnZ2VyIHRpbWVvdXQgY2FuIGJlIHNob3J0ZXIgdGhhbiBpbiB0aGUKK2Fib3ZlIGNhbGN1bGF0aW9uLiBJdCBpc24ndCBhbiBpbXBvcnRhbnQgaXNzdWUsIHVubGVzcyB0aGUgd2lyZSBpcyBmYXVsdHksCitpbiB3aGljaCBjYXNlIGEgbG9uZyB0aW1lb3V0IHdvdWxkIHN0YWxsIHRoZSBtYWNoaW5lIHdoZW4sIGZvciB3aGF0ZXZlcgorcmVhc29uLCBiaXRzIGFyZSBkcm9wcGVkLgorCitBIHV0aWxpdHkgdGhhdCBjYW4gcGVyZm9ybSB0aGlzIGNoYW5nZSBpbiBMaW51eCBpcyBwbGlwY29uZmlnLCB3aGljaCBpcyBwYXJ0CitvZiB0aGUgbmV0LXRvb2xzIHBhY2thZ2UgKGl0cyBsb2NhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlCitEb2N1bWVudGF0aW9uL0NoYW5nZXMgZmlsZSkuIEFuIGV4YW1wbGUgY29tbWFuZCB3b3VsZCBiZQorJ3BsaXBjb25maWcgcGxpcFggdHJpZ2dlciAxMDAwMCcsIHdoZXJlIHBsaXBYIGlzIHRoZSBhcHByb3ByaWF0ZQorUExJUCBkZXZpY2UuCisKK1BMSVAgaGFyZHdhcmUgaW50ZXJjb25uZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQTElQIHVzZXMgc2V2ZXJhbCBkaWZmZXJlbnQgZGF0YSB0cmFuc2ZlciBtZXRob2RzLiAgVGhlIGZpcnN0IChhbmQgdGhlCitvbmx5IG9uZSBpbXBsZW1lbnRlZCBpbiB0aGUgZWFybHkgdmVyc2lvbiBvZiB0aGUgY29kZSkgdXNlcyBhIHN0YW5kYXJkCitwcmludGVyICJudWxsIiBjYWJsZSB0byB0cmFuc2ZlciBkYXRhIGZvdXIgYml0cyBhdCBhIHRpbWUgdXNpbmcKK2RhdGEgYml0IG91dHB1dHMgY29ubmVjdGVkIHRvIHN0YXR1cyBiaXQgaW5wdXRzLgorCitUaGUgc2Vjb25kIGRhdGEgdHJhbnNmZXIgbWV0aG9kIHJlbGllcyBvbiBib3RoIG1hY2hpbmVzIGhhdmluZworYmktZGlyZWN0aW9uYWwgcGFyYWxsZWwgcG9ydHMsIHJhdGhlciB0aGFuIG91dHB1dC1vbmx5IGBgcHJpbnRlcicnCitwb3J0cy4gIFRoaXMgYWxsb3dzIGJ5dGUtd2lkZSB0cmFuc2ZlcnMgYW5kIGF2b2lkcyByZWNvbnN0cnVjdGluZworbmliYmxlcyBpbnRvIGJ5dGVzLCBsZWFkaW5nIHRvIG11Y2ggZmFzdGVyIHRyYW5zZmVycy4KKworUGFyYWxsZWwgVHJhbnNmZXIgTW9kZSAwIENhYmxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGNhYmxlIGZvciB0aGUgZmlyc3QgdHJhbnNmZXIgbW9kZSBpcyBhIHN0YW5kYXJkCitwcmludGVyICJudWxsIiBjYWJsZSB3aGljaCB0cmFuc2ZlcnMgZGF0YSBmb3VyIGJpdHMgYXQgYSB0aW1lIHVzaW5nCitkYXRhIGJpdCBvdXRwdXRzIG9mIHRoZSBmaXJzdCBwb3J0IChtYWNoaW5lIFQpIGNvbm5lY3RlZCB0byB0aGUKK3N0YXR1cyBiaXQgaW5wdXRzIG9mIHRoZSBzZWNvbmQgcG9ydCAobWFjaGluZSBSKS4gIFRoZXJlIGFyZSBmaXZlCitzdGF0dXMgaW5wdXRzLCBhbmQgdGhleSBhcmUgdXNlZCBhcyBmb3VyIGRhdGEgaW5wdXRzIGFuZCBhIGNsb2NrIChkYXRhCitzdHJvYmUpIGlucHV0LCBhcnJhbmdlZCBzbyB0aGF0IHRoZSBkYXRhIGlucHV0IGJpdHMgYXBwZWFyIGFzIGNvbnRpZ3VvdXMKK2JpdHMgd2l0aCBzdGFuZGFyZCBzdGF0dXMgcmVnaXN0ZXIgaW1wbGVtZW50YXRpb24uCisKK0EgY2FibGUgdGhhdCBpbXBsZW1lbnRzIHRoaXMgcHJvdG9jb2wgaXMgYXZhaWxhYmxlIGNvbW1lcmNpYWxseSBhcyBhCisiTnVsbCBQcmludGVyIiBvciAiVHVyYm8gTGFwbGluayIgY2FibGUuICBJdCBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aAordHdvIERCLTI1IG1hbGUgY29ubmVjdG9ycyBzeW1tZXRyaWNhbGx5IGNvbm5lY3RlZCBhcyBmb2xsb3dzOgorCisgICAgU1RST0JFIG91dHB1dAkxKgorICAgIEQwLT5FUlJPUgkyIC0gMTUJCTE1IC0gMgorICAgIEQxLT5TTENUCTMgLSAxMwkJMTMgLSAzCisgICAgRDItPlBBUE9VVAk0IC0gMTIJCTEyIC0gNAorICAgIEQzLT5BQ0sJNSAtIDEwCQkxMCAtIDUKKyAgICBENC0+QlVTWQk2IC0gMTEJCTExIC0gNgorICAgIEQ1LEQ2LEQ3IGFyZSAgIDcqLCA4KiwgOSoKKyAgICBBVVRPRkQgb3V0cHV0IDE0KgorICAgIElOSVQgICBvdXRwdXQgMTYqCisgICAgU0xDVElOCTE3IC0gMTcKKyAgICBleHRyYSBncm91bmRzIGFyZSAxOCosMTkqLDIwKiwyMSosMjIqLDIzKiwyNCoKKyAgICBHUk9VTkQJMjUgLSAyNQorKiBEbyBub3QgY29ubmVjdCB0aGVzZSBwaW5zIG9uIGVpdGhlciBlbmQKKworSWYgdGhlIGNhYmxlIHlvdSBhcmUgdXNpbmcgaGFzIGEgbWV0YWxsaWMgc2hpZWxkIGl0IHNob3VsZCBiZQorY29ubmVjdGVkIHRvIHRoZSBtZXRhbGxpYyBEQi0yNSBzaGVsbCBhdCBvbmUgZW5kIG9ubHkuCisKK1BhcmFsbGVsIFRyYW5zZmVyIE1vZGUgMQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzZWNvbmQgZGF0YSB0cmFuc2ZlciBtZXRob2QgcmVsaWVzIG9uIGJvdGggbWFjaGluZXMgaGF2aW5nCitiaS1kaXJlY3Rpb25hbCBwYXJhbGxlbCBwb3J0cywgcmF0aGVyIHRoYW4gb3V0cHV0LW9ubHkgYGBwcmludGVyJycKK3BvcnRzLiAgVGhpcyBhbGxvd3MgYnl0ZS13aWRlIHRyYW5zZmVycywgYW5kIGF2b2lkcyByZWNvbnN0cnVjdGluZworbmliYmxlcyBpbnRvIGJ5dGVzLiAgVGhpcyBjYWJsZSBzaG91bGQgbm90IGJlIHVzZWQgb24gdW5pZGlyZWN0aW9uYWwKK2BgcHJpbnRlcicnIChhcyBvcHBvc2VkIHRvIGBgcGFyYWxsZWwnJykgcG9ydHMgb3Igd2hlbiB0aGUgbWFjaGluZQoraXNuJ3QgY29uZmlndXJlZCBmb3IgUExJUCwgYXMgaXQgd2lsbCByZXN1bHQgaW4gb3V0cHV0IGRyaXZlcgorY29uZmxpY3RzIGFuZCB0aGUgKHVubGlrZWx5KSBwb3NzaWJpbGl0eSBvZiBkYW1hZ2UuCisKK1RoZSBjYWJsZSBmb3IgdGhpcyB0cmFuc2ZlciBtb2RlIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBhcyBmb2xsb3dzOgorCisgICAgU1RST0JFLT5CVVNZIDEgLSAxMQorICAgIEQwLT5EMAkyIC0gMgorICAgIEQxLT5EMQkzIC0gMworICAgIEQyLT5EMgk0IC0gNAorICAgIEQzLT5EMwk1IC0gNQorICAgIEQ0LT5ENAk2IC0gNgorICAgIEQ1LT5ENQk3IC0gNworICAgIEQ2LT5ENgk4IC0gOAorICAgIEQ3LT5ENwk5IC0gOQorICAgIElOSVQgLT4gQUNLICAxNiAtIDEwCisgICAgQVVUT0ZELT5QQVBPVVQgMTQgLSAxMgorICAgIFNMQ1QtPlNMQ1RJTiAxMyAtIDE3CisgICAgR05ELT5FUlJPUgkxOCAtIDE1CisgICAgZXh0cmEgZ3JvdW5kcyBhcmUgMTkqLDIwKiwyMSosMjIqLDIzKiwyNCoKKyAgICBHUk9VTkQJMjUgLSAyNQorKiBEbyBub3QgY29ubmVjdCB0aGVzZSBwaW5zIG9uIGVpdGhlciBlbmQKKworT25jZSBhZ2FpbiwgaWYgdGhlIGNhYmxlIHlvdSBhcmUgdXNpbmcgaGFzIGEgbWV0YWxsaWMgc2hpZWxkIGl0IHNob3VsZAorYmUgY29ubmVjdGVkIHRvIHRoZSBtZXRhbGxpYyBEQi0yNSBzaGVsbCBhdCBvbmUgZW5kIG9ubHkuCisKK1BMSVAgTW9kZSAwIHRyYW5zZmVyIHByb3RvY29sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgUExJUCBkcml2ZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSAiQ3J5bndyIiBwYXJhbGxlbCBwb3J0IHRyYW5zZmVyCitzdGFuZGFyZCBpbiBNb2RlIDAuICBUaGF0IHN0YW5kYXJkIHNwZWNpZmllcyB0aGUgZm9sbG93aW5nIHByb3RvY29sOgorCisgICBzZW5kIGhlYWRlciBuaWJibGUgJzB4OCcKKyAgIGNvdW50LWxvdyBvY3RldAorICAgY291bnQtaGlnaCBvY3RldAorICAgLi4uIGRhdGEgb2N0ZXRzCisgICBjaGVja3N1bSBvY3RldAorCitFYWNoIG9jdGV0IGlzIHNlbnQgYXMKKwk8d2FpdCBmb3IgcnguICcweDE/Jz4JPHNlbmQgMHgxMCsob2N0ZXQmMHgwRik+CisJPHdhaXQgZm9yIHJ4LiAnMHgwPyc+CTxzZW5kIDB4MDArKChvY3RldD4+NCkmMHgwRik+CisKK1RvIHN0YXJ0IGEgdHJhbnNmZXIgdGhlIHRyYW5zbWl0dGluZyBtYWNoaW5lIG91dHB1dHMgYSBuaWJibGUgMHgwOC4KK1RoYXQgcmFpc2VzIHRoZSBBQ0sgbGluZSwgdHJpZ2dlcmluZyBhbiBpbnRlcnJ1cHQgaW4gdGhlIHJlY2VpdmluZworbWFjaGluZS4gIFRoZSByZWNlaXZpbmcgbWFjaGluZSBkaXNhYmxlcyBpbnRlcnJ1cHRzIGFuZCByYWlzZXMgaXRzIG93biBBQ0sKK2xpbmUuIAorCitSZXN0YXRlZDoKKworKE9VVCBpcyBiaXQgMC00LCBPVVQuaiBpcyBiaXQgaiBmcm9tIE9VVC4gSU4gbGlrZXdpc2UpCitTZW5kX0J5dGU6CisgICBPVVQgOj0gbG93IG5pYmJsZSwgT1VULjQgOj0gMQorICAgV0FJVCBGT1IgSU4uNCA9IDEKKyAgIE9VVCA6PSBoaWdoIG5pYmJsZSwgT1VULjQgOj0gMAorICAgV0FJVCBGT1IgSU4uNCA9IDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuc2IxMDAwIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyZDQyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuc2IxMDAwCkBAIC0wLDAgKzEsMjA3IEBACitzYjEwMDAgaXMgYSBtb2R1bGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciB0aGUgR2VuZXJhbCBJbnN0cnVtZW50IChhbHNvIGtub3duCithcyBOZXh0TGV2ZWwpIFNVUkZib2FyZDEwMDAgaW50ZXJuYWwgY2FibGUgbW9kZW0gYm9hcmQuICBUaGlzIGlzIGFuIElTQSBjYXJkCit3aGljaCBpcyB1c2VkIGJ5IGEgbnVtYmVyIG9mIGNhYmxlIFRWIGNvbXBhbmllcyB0byBwcm92aWRlIGNhYmxlIG1vZGVtIGFjY2Vzcy4KK0l0J3MgYSBvbmUtd2F5IGRvd25zdHJlYW0tb25seSBjYWJsZSBtb2RlbSwgbWVhbmluZyB0aGF0IHlvdXIgdXBzdHJlYW0gbmV0IGxpbmsKK2lzIHByb3ZpZGVkIGJ5IHlvdXIgcmVndWxhciBwaG9uZSBtb2RlbS4KKworVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgRnJhbmNvIFZlbnR1cmkgPGZ2ZW50dXJpQG1lZGlhb25lLm5ldD4uICBIZSBkZXNlcnZlcworYSBncmVhdCBkZWFsIG9mIHRoYW5rcyBmb3IgdGhpcyB3b25kZXJmdWwgcGllY2Ugb2YgY29kZSEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9ydCBmb3IgdGhpcyBkZXZpY2UgaXMgbm93IGEgcGFydCBvZiB0aGUgc3RhbmRhcmQgTGludXgga2VybmVsLiAgVGhlCitkcml2ZXIgc291cmNlIGNvZGUgZmlsZSBpcyBkcml2ZXJzL25ldC9zYjEwMDAuYy4gIEluIGFkZGl0aW9uIHRvIHRoaXMKK3lvdSB3aWxsIG5lZWQ6CisKKzEuKSBUaGUgImNtY29uZmlnIiBwcm9ncmFtLiAgVGhpcyBpcyBhIHV0aWxpdHkgd2hpY2ggc3VwcGxlbWVudHMgImlmY29uZmlnIgordG8gY29uZmlndXJlIHRoZSBjYWJsZSBtb2RlbSBhbmQgbmV0d29yayBpbnRlcmZhY2UgKHVzdWFsbHkgY2FsbGVkICJjbTAiKTsKK2FuZAorCisyLikgU2V2ZXJhbCBQUFAgc2NyaXB0cyB3aGljaCBsaXZlIGluIC9ldGMvcHBwIHRvIG1ha2UgY29ubmVjdGluZyB2aWEgeW91cgorY2FibGUgbW9kZW0gZWFzeS4KKworICAgVGhlc2UgdXRpbGl0aWVzIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgorCisgICAgICBodHRwOi8vd3d3LmphY2tzb252aWxsZS5uZXQvfmZ2ZW50dXJpLworCisgICBpbiBGcmFuY28ncyBvcmlnaW5hbCBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gLnRhci5neiBmaWxlLiAgU3VwcG9ydCBmb3IKKyAgIHRoZSBzYjEwMDAgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKKworICAgICAgaHR0cDovL2hvbWUuYWRlbHBoaWEubmV0L35zaWdsZXJjbS9zYjEwMDAuaHRtbAorICAgICAgaHR0cDovL2xpbnV4cG93ZXIuY3gvfmNhYmxlLworCisgICBhbG9uZyB3aXRoIHRoZXNlIHV0aWxpdGllcy4KKworMy4pIFRoZSBzdGFuZGFyZCBpc2FwbnAgdG9vbHMuICBUaGVzZSBhcmUgbmVjZXNzYXJ5IHRvIGNvbmZpZ3VyZSB5b3VyIFNCMTAwMAorY2FyZCBhdCBib290IHRpbWUgKG9yIGFmdGVyd2FyZHMgYnkgaGFuZCkgc2luY2UgaXQncyBhIFBuUCBjYXJkLgorCisgICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGVzZSBpbnN0YWxsZWQgYXMgYSBzdGFuZGFyZCBwYXJ0IG9mIHlvdXIgTGludXgKKyAgIGRpc3RyaWJ1dGlvbiwgeW91IGNhbiBmaW5kIHRoZW0gYXQ6CisKKyAgICAgIGh0dHA6Ly93d3cucm9lc3RvY2suZGVtb24uY28udWsvaXNhcG5wdG9vbHMvCisKKyAgIG9yIGNoZWNrIHlvdXIgTGludXggZGlzdHJpYnV0aW9uIGJpbmFyeSBDRCBvciB0aGVpciB3ZWIgc2l0ZS4gIEZvciBoZWxwIHdpdGgKKyAgIGlzYXBucCwgcG5wZHVtcCwgb3IgL2V0Yy9pc2FwbnAuY29uZiwgZ28gdG86CisKKyAgICAgIGh0dHA6Ly93d3cucm9lc3RvY2suZGVtb24uY28udWsvaXNhcG5wdG9vbHMvaXNhcG5wZmFxLmh0bWwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gbWFrZSB0aGUgU0IxMDAwIGNhcmQgd29yaywgZm9sbG93IHRoZXNlIHN0ZXBzOgorCisxLikgUnVuIGBtYWtlIGNvbmZpZycsIG9yIGBtYWtlIG1lbnVjb25maWcnLCBvciBgbWFrZSB4Y29uZmlnJywgd2hpY2hldmVyCit5b3UgcHJlZmVyLCBpbiB0aGUgdG9wIGtlcm5lbCB0cmVlIGRpcmVjdG9yeSB0byBzZXQgdXAgeW91ciBrZXJuZWwKK2NvbmZpZ3VyYXRpb24uICBNYWtlIHN1cmUgdG8gc2F5ICJZIiB0byAiUHJvbXB0IGZvciBkZXZlbG9wbWVudCBkcml2ZXJzIgorYW5kIHRvIHNheSAiTSIgdG8gdGhlIHNiMTAwMCBkcml2ZXIuICBBbHNvIHNheSAiWSIgb3IgIk0iIHRvIGFsbCB0aGUgc3RhbmRhcmQKK25ldHdvcmtpbmcgcXVlc3Rpb25zIHRvIGdldCBUQ1AvSVAgYW5kIFBQUCBuZXR3b3JraW5nIHN1cHBvcnQuCisKKzIuKSAqQkVGT1JFKiB5b3UgYnVpbGQgdGhlIGtlcm5lbCwgZWRpdCBkcml2ZXJzL25ldC9zYjEwMDAuYy4gIE1ha2Ugc3VyZQordG8gcmVkZWZpbmUgdGhlIHZhbHVlIG9mIFJFQURfREFUQV9QT1JUIHRvIG1hdGNoIHRoZSBJL08gYWRkcmVzcyB1c2VkCitieSBpc2FwbnAgdG8gYWNjZXNzIHlvdXIgUG5QIGNhcmRzLiAgVGhpcyBpcyB0aGUgdmFsdWUgb2YgUkVBRFBPUlQgaW4KKy9ldGMvaXNhcG5wLmNvbmYgb3IgZ2l2ZW4gYnkgdGhlIG91dHB1dCBvZiBwbnBkdW1wLgorCiszLikgQnVpbGQgYW5kIGluc3RhbGwgdGhlIGtlcm5lbCBhbmQgbW9kdWxlcyBhcyB1c3VhbC4KKworNC4pIEJvb3QgeW91ciBuZXcga2VybmVsIGZvbGxvd2luZyB0aGUgdXN1YWwgcHJvY2VkdXJlcy4KKworNS4pIFNldCB1cCB0byBjb25maWd1cmUgdGhlIG5ldyBTQjEwMDAgUG5QIGNhcmQgYnkgY2FwdHVyaW5nIHRoZSBvdXRwdXQKK29mICJwbnBkdW1wIiB0byBhIGZpbGUgYW5kIGVkaXRpbmcgdGhpcyBmaWxlIHRvIHNldCB0aGUgY29ycmVjdCBJL08gcG9ydHMsCitJUlEsIGFuZCBETUEgc2V0dGluZ3MgZm9yIGFsbCB5b3VyIFBuUCBjYXJkcy4gIE1ha2Ugc3VyZSBub25lIG9mIHRoZSBzZXR0aW5ncworY29uZmxpY3Qgd2l0aCBvbmUgYW5vdGhlci4gIFRoZW4gdGVzdCB0aGlzIGNvbmZpZ3VyYXRpb24gYnkgcnVubmluZyB0aGUKKyJpc2FwbnAiIGNvbW1hbmQgd2l0aCB5b3VyIG5ldyBjb25maWcgZmlsZSBhcyB0aGUgaW5wdXQuICBDaGVjayBmb3IKK2Vycm9ycyBhbmQgZml4IGFzIG5lY2Vzc2FyeS4gIChBcyBhbiBhc2lkZSwgSSB1c2UgSS9PIHBvcnRzIDB4MTEwIGFuZAorMHgzMTAgYW5kIElSUSAxMSBmb3IgbXkgU0IxMDAwIGNhcmQgYW5kIHRoZXNlIHdvcmsgd2VsbCBmb3IgbWUuICBZTU1WLikKK1RoZW4gc2F2ZSB0aGUgZmluaXNoZWQgY29uZmlnIGZpbGUgYXMgL2V0Yy9pc2FwbnAuY29uZiBmb3IgcHJvcGVyIGNvbmZpZ3VyYXRpb24KK29uIHN1YnNlcXVlbnQgcmVib290cy4KKworNi4pIERvd25sb2FkIHRoZSBvcmlnaW5hbCBmaWxlIHNiMTAwMC0xLjEuMi50YXIuZ3ogZnJvbSBGcmFuY28ncyBzaXRlIG9yIG9uZSBvZgordGhlIG90aGVycyByZWZlcmVuY2VkIGFib3ZlLiAgQXMgcm9vdCwgdW5wYWNrIGl0IGludG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZAorZG8gYSBgbWFrZSBjbWNvbmZpZycgYW5kIHRoZW4gYGluc3RhbGwgLWMgY21jb25maWcgL3Vzci9sb2NhbC9zYmluJy4gIERvbid0IGRvCitgbWFrZSBpbnN0YWxsJyBiZWNhdXNlIGl0IGV4cGVjdHMgdG8gZmluZCBhbGwgdGhlIHV0aWxpdGllcyBidWlsdCBhbmQgcmVhZHkgZm9yCitpbnN0YWxsYXRpb24sIG5vdCBqdXN0IGNtY29uZmlnLgorCis3LikgQXMgcm9vdCwgY29weSBhbGwgdGhlIGZpbGVzIHVuZGVyIHRoZSBwcHAvIHN1YmRpcmVjdG9yeSBpbiBGcmFuY28ncwordGFyIGZpbGUgaW50byAvZXRjL3BwcCwgYmVpbmcgY2FyZWZ1bCBub3QgdG8gb3ZlcndyaXRlIGFueSBmaWxlcyB0aGF0IGFyZQorYWxyZWFkeSBpbiB0aGVyZS4gIFRoZW4gbW9kaWZ5IHBwcEBnaS1vbiB0byBzZXQgdGhlIGNvcnJlY3QgbG9naW4gbmFtZSwKK3Bob25lIG51bWJlciwgYW5kIGZyZXF1ZW5jeSBmb3IgdGhlIGNhYmxlIG1vZGVtLiAgQWxzbyBlZGl0IHBhcC1zZWNyZXRzCit0byBzcGVjaWZ5IHlvdXIgbG9naW4gbmFtZSBhbmQgcGFzc3dvcmQgYW5kIGFueSBzaXRlLXNwZWNpZmljIGluZm9ybWF0aW9uCit5b3UgbmVlZC4KKworOC4pIEJlIHN1cmUgdG8gbW9kaWZ5IC9ldGMvcHBwL2ZpcmV3YWxsIHRvIHVzZSBpcGNoYWlucyBpbnN0ZWFkIG9mCit0aGUgb2xkZXIgaXBmd2FkbSBjb21tYW5kcyBmcm9tIHRoZSAyLjAueCBrZXJuZWxzLiAgVGhlcmUncyBhIG5lYXQgdXRpbGl0eSB0bworY29udmVydCBpcGZ3YWRtIGNvbW1hbmRzIHRvIGlwY2hhaW5zIGNvbW1hbmRzOgorCisgICBodHRwOi8vdXNlcnMuZGhwLmNvbS9+d2hpc3Blci9pcGZ3YWRtMmlwY2hhaW5zLworCitZb3UgbWF5IGFsc28gd2lzaCB0byBtb2RpZnkgdGhlIGZpcmV3YWxsIHNjcmlwdCB0byBpbXBsZW1lbnQgYSBkaWZmZXJlbnQKK2ZpcmV3YWxsaW5nIHNjaGVtZS4KKworOS4pIFN0YXJ0IHRoZSBQUFAgY29ubmVjdGlvbiB2aWEgdGhlIHNjcmlwdCAvZXRjL3BwcC9wcHBAZ2ktb24uICBZb3UgbXVzdCBiZQorcm9vdCB0byBkbyB0aGlzLiAgSXQncyBiZXR0ZXIgdG8gdXNlIGEgdXRpbGl0eSBsaWtlIHN1ZG8gdG8gZXhlY3V0ZQorZnJlcXVlbnRseSB1c2VkIGNvbW1hbmRzIGxpa2UgdGhpcyB3aXRoIHJvb3QgcGVybWlzc2lvbnMgaWYgcG9zc2libGUuICBJZiB5b3UKK2Nvbm5lY3Qgc3VjY2Vzc2Z1bGx5IHRoZSBjYWJsZSBtb2RlbSBpbnRlcmZhY2Ugd2lsbCBjb21lIHVwIGFuZCB5b3UnbGwgc2VlIGEKK2RyaXZlciBtZXNzYWdlIGxpa2UgdGhpcyBhdCB0aGUgY29uc29sZToKKworICAgICAgICAgY20wOiBzYjEwMDAgYXQgKDB4MTEwLDB4MzEwKSwgY3NuIDEsIFMvTiAweDJhMGQxNmQ4LCBJUlEgMTEuCisgICAgICAgICBzYjEwMDAuYzp2MS4xLjIgNi8wMS85OCAoZnZlbnR1cmlAbWVkaWFvbmUubmV0KQorCitUaGUgImlmY29uZmlnIiBjb21tYW5kIHNob3VsZCBzaG93IHR3byBuZXcgaW50ZXJmYWNlcywgcHBwMCBhbmQgY20wLgorVGhlIGNvbW1hbmQgImNtY29uZmlnIGNtMCIgd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FibGUgbW9kZW0KK2ludGVyZmFjZS4KKworMTAuKSBUcnkgcGluZ2luZyBhIHNpdGUgdmlhIGBwaW5nIC1jIDUgd3d3LnlhaG9vLmNvbScsIGZvciBleGFtcGxlLiAgWW91IHNob3VsZAorc2VlIHBhY2tldHMgcmVjZWl2ZWQuCisKKzExLikgSWYgeW91IGNhbid0IGdldCBzaXRlIG5hbWVzIChsaWtlIHd3dy55YWhvby5jb20pIHRvIHJlc29sdmUgaW50bworSVAgYWRkcmVzc2VzIChsaWtlIDIwNC43MS4yMDAuNjcpLCBiZSBzdXJlIHlvdXIgL2V0Yy9yZXNvbHYuY29uZiBmaWxlCitoYXMgbm8gc3ludGF4IGVycm9ycyBhbmQgaGFzIHRoZSByaWdodCBuYW1lc2VydmVyIElQIGFkZHJlc3NlcyBpbiBpdC4KK0lmIHRoaXMgZG9lc24ndCBoZWxwLCB0cnkgc29tZXRoaW5nIGxpa2UgYHBpbmcgLWMgNSAyMDQuNzEuMjAwLjY3JyB0bworc2VlIGlmIHRoZSBuZXR3b3JraW5nIGlzIHJ1bm5pbmcgYnV0IHRoZSBETlMgcmVzb2x1dGlvbiBpcyB3aGVyZSB0aGUKK3Byb2JsZW0gbGllcy4KKworMTIuKSBJZiB5b3Ugc3RpbGwgaGF2ZSBwcm9ibGVtcywgZ28gdG8gdGhlIHN1cHBvcnQgd2ViIHNpdGVzIG1lbnRpb25lZCBhYm92ZQorYW5kIHJlYWQgdGhlIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudGF0aW9uIHRoZXJlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb21tb24gcHJvYmxlbXM6CisKKzEuKSBQYWNrZXRzIGdvIG91dCBvbiB0aGUgcHBwMCBpbnRlcmZhY2UgYnV0IGRvbid0IGNvbWUgYmFjayBvbiB0aGUgY20wCitpbnRlcmZhY2UuICBJdCBsb29rcyBsaWtlIEknbSBjb25uZWN0ZWQgYnV0IEkgY2FuJ3QgZXZlbiBwaW5nIGFueQorbnVtZXJpY2FsIElQIGFkZHJlc3Nlcy4gIChUaGlzIGhhcHBlbnMgcHJlZG9taW5hbnRseSBvbiBEZWJpYW4gc3lzdGVtcyBkdWUKK3RvIGEgZGVmYXVsdCBib290LXRpbWUgY29uZmlndXJhdGlvbiBzY3JpcHQuKQorCitTb2x1dGlvbiAtLSBBcyByb290IGBlY2hvIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9jbTAvcnBfZmlsdGVyJyBzbyBpdAorY2FuIHNoYXJlIHRoZSBzYW1lIElQIGFkZHJlc3MgYXMgdGhlIHBwcDAgaW50ZXJmYWNlLiAgTm90ZSB0aGF0IHRoaXMKK2NvbW1hbmQgc2hvdWxkIHByb2JhYmx5IGJlIGFkZGVkIHRvIHRoZSAvZXRjL3BwcC9jYWJsZW1vZGVtIHNjcmlwdAorKnJpZ2h0KmJldHdlZW4qIHRoZSAiL3NiaW4vaWZjb25maWciIGFuZCAiL3NiaW4vY21jb25maWciIGNvbW1hbmRzLgorWW91IG1heSBuZWVkIHRvIGRvIHRoaXMgdG8gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvcHBwMC9ycF9maWx0ZXIgYXMgd2VsbC4KK0lmIHlvdSBkbyB0aGlzIHRvIC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2RlZmF1bHQvcnBfZmlsdGVyIG9uIGVhY2ggcmVib290CisoaW4gcmMubG9jYWwgb3Igc29tZSBzdWNoKSB0aGVuIGFueSBpbnRlcmZhY2VzIGNhbiBzaGFyZSB0aGUgc2FtZSBJUAorYWRkcmVzc2VzLgorCisyLikgSSBnZXQgInVucmVzb2x2ZWQgc3ltYm9sIiBlcnJvciBtZXNzYWdlcyBvbiBleGVjdXRpbmcgYGluc21vZCBzYjEwMDAubycuCisKK1NvbHV0aW9uIC0tIFlvdSBwcm9iYWJseSBoYXZlIGEgbm9uLW1hdGNoaW5nIGtlcm5lbCBzb3VyY2UgdHJlZSBhbmQKKy91c3IvaW5jbHVkZS9saW51eCBhbmQgL3Vzci9pbmNsdWRlL2FzbSBoZWFkZXIgZmlsZXMuICBNYWtlIHN1cmUgeW91CitpbnN0YWxsIHRoZSBjb3JyZWN0IHZlcnNpb25zIG9mIHRoZSBoZWFkZXIgZmlsZXMgaW4gdGhlc2UgdHdvIGRpcmVjdG9yaWVzLgorVGhlbiByZWJ1aWxkIGFuZCByZWluc3RhbGwgdGhlIGtlcm5lbC4KKworMy4pIFdoZW4gaXNhcG5wIHJ1bnMgaXQgcmVwb3J0cyBhbiBlcnJvciwgYW5kIG15IFNCMTAwMCBjYXJkIGlzbid0IHdvcmtpbmcuCisKK1NvbHV0aW9uIC0tIFRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgaXNhcG5wIHVzaW5nIHRoZSAiKENIRUNLKSIKK29wdGlvbiBpbiB0aGUgbGluZXMgdGhhdCBhbGxvY2F0ZSB0aGUgdHdvIEkvTyBhZGRyZXNzZXMgZm9yIHRoZSBTQjEwMDAgY2FyZC4KK1RoaXMgZmlyc3QgcG9wcGVkIHVwIG9uIFJIIDYuMC4gIERlbGV0ZSAiKENIRUNLKSIgZm9yIHRoZSBTQjEwMDAgSS9PIGFkZHJlc3Nlcy4KK01ha2Ugc3VyZSB0aGV5IGRvbid0IGNvbmZsaWN0IHdpdGggYW55IG90aGVyIHBpZWNlcyBvZiBoYXJkd2FyZSBmaXJzdCEgIFRoZW4KK3JlcnVuIGlzYXBucCBhbmQgZ28gZnJvbSB0aGVyZS4KKworNC4pIEkgY2FuJ3QgZXhlY3V0ZSB0aGUgL2V0Yy9wcHAvcHBwQGdpLW9uIGZpbGUuCisKK1NvbHV0aW9uIC0tIEFzIHJvb3QgZG8gYGNobW9kIHVnK3ggL2V0Yy9wcHAvcHBwQGdpLW9uJy4KKworNS4pIFRoZSBmaXJld2FsbCBzY3JpcHQgaXNuJ3Qgd29ya2luZyAod2l0aCAyLjIueCBhbmQgaGlnaGVyIGtlcm5lbHMpLgorCitTb2x1dGlvbiAtLSBVc2UgdGhlIGlwZndhZG0yaXBjaGFpbnMgc2NyaXB0IHJlZmVyZW5jZWQgYWJvdmUgdG8gY29udmVydCB0aGUKKy9ldGMvcHBwL2ZpcmV3YWxsIHNjcmlwdCBmcm9tIHRoZSBkZXByZWNhdGVkIGlwZndhZG0gY29tbWFuZHMgdG8gaXBjaGFpbnMuCisKKzYuKSBJJ20gZ2V0dGluZyAqdG9ucyogb2YgZmlyZXdhbGwgZGVueSBtZXNzYWdlcyBpbiB0aGUgL3Zhci9rZXJuLmxvZywKKy92YXIvbWVzc2FnZXMsIGFuZC9vciAvdmFyL3N5c2xvZyBmaWxlcywgYW5kIHRoZXkncmUgZmlsbGluZyB1cCBteSAvdmFyCitwYXJ0aXRpb24hISEKKworU29sdXRpb24gLS0gRmlyc3QsIHRlbGwgeW91ciBJU1AgdGhhdCB5b3UncmUgcmVjZWl2aW5nIERvUyAoRGVuaWFsIG9mIFNlcnZpY2UpCithbmQvb3IgcG9ydHNjYW5uaW5nIChVRFAgY29ubmVjdGlvbiBhdHRlbXB0cykgYXR0YWNrcyEgIExvb2sgb3ZlciB0aGUgZGVueQorbWVzc2FnZXMgdG8gZmlndXJlIG91dCB3aGF0IHRoZSBhdHRhY2sgaXMgYW5kIHdoZXJlIGl0J3MgY29taW5nIGZyb20uICBOZXh0LAorZWRpdCAvZXRjL3BwcC9jYWJsZW1vZGVtIGFuZCBtYWtlIHN1cmUgdGhlICIsbm9icm9hZGNhc3QiIG9wdGlvbiBpcyB0dXJuZWQgb24KK3RvIHRoZSAiY21jb25maWciIGNvbW1hbmQgKHVuY29tbWVudCB0aGF0IGxpbmUpLiAgSWYgeW91J3JlIG5vdCByZWNlaXZpbmcgdGhlc2UKK2RlbmllZCBwYWNrZXRzIG9uIHlvdXIgYnJvYWRjYXN0IGludGVyZmFjZSAoSVAgYWRkcmVzcyB4eHgueXl5Lnp6ei4yNTUKK3R5cGljYWxseSksIHRoZW4gc29tZW9uZSBpcyBhdHRhY2tpbmcgeW91ciBtYWNoaW5lIGluIHBhcnRpY3VsYXIuICBCZSBjYXJlZnVsCitvdXQgdGhlcmUuLi4uCisKKzcuKSBFdmVyeXRoaW5nIHNlZW1zIHRvIHdvcmsgZmluZSBidXQgbXkgY29tcHV0ZXIgbG9ja3MgdXAgYWZ0ZXIgYSB3aGlsZQorKGFuZCB0eXBpY2FsbHkgZHVyaW5nIGEgbGVuZ3RoeSBkb3dubG9hZCB0aHJvdWdoIHRoZSBjYWJsZSBtb2RlbSkhCisKK1NvbHV0aW9uIC0tIFlvdSBtYXkgbmVlZCB0byBhZGQgYSBzaG9ydCBkZWxheSBpbiB0aGUgZHJpdmVyIHRvICdzbG93IGRvd24nIHRoZQorU1VSRmJvYXJkIGJlY2F1c2UgeW91ciBQQyBtaWdodCBub3QgYmUgYWJsZSB0byBrZWVwIHVwIHdpdGggdGhlIHRyYW5zZmVyIHJhdGUKK29mIHRoZSBTQjEwMDAuIFRvIGRvIHRoaXMsIGl0J3MgcHJvYmFibHkgYmVzdCB0byBkb3dubG9hZCBGcmFuY28ncworc2IxMDAwLTEuMS4yLnRhci5neiBhcmNoaXZlIGFuZCBidWlsZCBhbmQgaW5zdGFsbCBzYjEwMDAubyBtYW51YWxseS4gIFlvdSdsbAord2FudCB0byBlZGl0IHRoZSAnTWFrZWZpbGUnIGFuZCBsb29rIGZvciB0aGUgJ1NCMTAwMF9ERUxBWScKK2RlZmluZS4gIFVuY29tbWVudCB0aG9zZSAnQ0ZMQUdTJyBsaW5lcyAoYW5kIGNvbW1lbnQgb3V0IHRoZSBkZWZhdWx0IG9uZXMpCithbmQgdHJ5IHNldHRpbmcgdGhlIGRlbGF5IHRvIHNvbWV0aGluZyBsaWtlIDYwIG1pY3Jvc2Vjb25kcyB3aXRoOgorJy1EU0IxMDAwX0RFTEFZPTYwJy4gIFRoZW4gZG8gYG1ha2UnIGFuZCBhcyByb290IGBtYWtlIGluc3RhbGwnIGFuZCB0cnkKK2l0IG91dC4gIElmIGl0IHN0aWxsIGRvZXNuJ3Qgd29yayBvciB5b3UgbGlrZSBwbGF5aW5nIHdpdGggdGhlIGRyaXZlciwgeW91IG1heQordHJ5IG90aGVyIG51bWJlcnMuICBSZW1lbWJlciB0aG91Z2ggdGhhdCB0aGUgaGlnaGVyIHRoZSBkZWxheSwgdGhlIHNsb3dlciB0aGUKK2RyaXZlciAod2hpY2ggc2xvd3MgZG93biB0aGUgcmVzdCBvZiB0aGUgUEMgdG9vIHdoZW4gaXQgaXMgYWN0aXZlbHkKK3VzZWQpLiBUaGFua3MgdG8gRWQgRGFpZ2EgZm9yIHRoaXMgdGlwIQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVkaXRzOiAgVGhpcyBSRUFETUUgY2FtZSBmcm9tIEZyYW5jbyBWZW50dXJpJ3Mgb3JpZ2luYWwgUkVBRE1FIGZpbGUgd2hpY2ggaXMKK3N0aWxsIHN1cHBsaWVkIHdpdGggaGlzIGRyaXZlciAudGFyLmd6IGFyY2hpdmUuICBJIGFuZCBhbGwgb3RoZXIgc2IxMDAwIHVzZXJzCitvd2UgRnJhbmNvIGEgdHJlbWVuZG91cyAiVGhhbmsgeW91ISIgIEFkZGl0aW9uYWwgdGhhbmtzIGdvZXMgdG8gQ2FybCBQYXR0ZW4KK2FuZCBSYWxwaCBCb25uZWxsIHdobyBhcmUgbm93IG1hbmFnaW5nIHRoZSBMaW51eCBTQjEwMDAgd2ViIHNpdGUsIGFuZCB0bwordGhlIFNCMTAwMCB1c2VycyB3aG8gcmVwb3J0ZWQgYW5kIGhlbHBlZCBkZWJ1ZyB0aGUgY29tbW9uIHByb2JsZW1zIGxpc3RlZAorYWJvdmUuCisKKworCQkJCQlDbGVtbWl0dCBTaWdsZXIKKwkJCQkJY3NpZ2xlckB2dC5lZHUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9UT0RPIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZkMzZmZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9UT0RPCkBAIC0wLDAgKzEsMTggQEAKK1RvLWRvIGl0ZW1zIGZvciBuZXR3b3JrIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNb3ZlIGV0aGVybmV0IGNyYyByb3V0aW5lIHRvIGdlbmVyaWMgY29kZQorCisqIChmb3IgMi41KSBJbnRlZ3JhdGUgSmFtYWwgSGFkaSBTYWxpbSdzIG5ldGRldiBSeCBwb2xsaW5nIEFQSSBjaGFuZ2UKKworKiBBdWRpdCBhbGwgbmV0IGRyaXZlcnMgdG8gbWFrZSBzdXJlIG1hZ2ljIHBhY2tldCAvIHdha2Utb24tbGFuIC8KKyAgc2ltaWxhciBmZWF0dXJlcyBhcmUgZGlzYWJsZWQgaW4gdGhlIGRyaXZlciBieSBkZWZhdWx0LgorCisqIEF1ZGl0IGFsbCBuZXQgZHJpdmVycyB0byBtYWtlIHN1cmUgdGhlIG1vZHVsZSBhbHdheXMgcHJpbnRzIG91dCBhCisgIHZlcnNpb24gc3RyaW5nIHdoZW4gbG9hZGVkIGFzIGEgbW9kdWxlLCBidXQgb25seSBwcmludHMgYSB2ZXJzaW9uCisgIHN0cmluZyB3aGVuIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBpZiBhIGRldmljZSBpcyBkZXRlY3RlZC4KKworKiBBZGQgRVRIVE9PTF9HRFJWSU5GTyBpb2N0bCBzdXBwb3J0IHRvIGFsbCBldGhlcm5ldCBkcml2ZXJzLgorCisqIGRtZmUgUENJIERNQSBpcyB0b3RhbGx5IHdyb25nIGFuZCBvbmx5IHdvcmtzIG9uIHg4NgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWxpYXMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FsaWFzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDEyYzJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FsaWFzLnR4dApAQCAtMCwwICsxLDUzIEBACisKK0lQLUFsaWFzaW5nOgorPT09PT09PT09PT09CisKK0lQLWFsaWFzZXMgYXJlIGFkZGl0aW9uYWwgSVAtYWRkcmVzc2VzL21hc2tzIGhvb2tlZCB1cCB0byBhIGJhc2UgCitpbnRlcmZhY2UgYnkgYWRkaW5nIGEgY29sb24gYW5kIGEgc3RyaW5nIHdoZW4gcnVubmluZyBpZmNvbmZpZy4gCitUaGlzIHN0cmluZyBpcyB1c3VhbGx5IG51bWVyaWMsIGJ1dCB0aGlzIGlzIG5vdCBhIG11c3QuCisKK0lQLUFsaWFzZXMgYXJlIGF2YWlsIGlmIENPTkZJR19JTkVUIChgc3RhbmRhcmQnIElQdjQgbmV0d29ya2luZykgCitpcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuCisKKworbyBBbGlhcyBjcmVhdGlvbi4KKyAgQWxpYXMgY3JlYXRpb24gaXMgZG9uZSBieSAnbWFnaWMnIGludGVyZmFjZSBuYW1pbmc6IGVnLiB0byBjcmVhdGUgYQorICAyMDAuMS4xLjEgYWxpYXMgZm9yIGV0aDAgLi4uCisgIAorICAgICMgaWZjb25maWcgZXRoMDowIDIwMC4xLjEuMSAgZXRjLGV0Yy4uLi4KKyAgICAgICAgICAgICAgICAgICB+fiAtPiByZXF1ZXN0IGFsaWFzICMwIGNyZWF0aW9uIChpZiBub3QgeWV0IGV4aXN0cykgZm9yIGV0aDAKKworICAgIFRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGlzIGFsc28gc2V0IHVwIGJ5IHRoaXMgY29tbWFuZC4gCisgICAgUGxlYXNlIG5vdGU6IFRoZSByb3V0ZSBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIGludGVyZmFjZS4KKwkKKworbyBBbGlhcyBkZWxldGlvbi4KKyAgVGhlIGFsaWFzIGlzIHJlbW92ZWQgYnkgc2h1dHRpbmcgdGhlIGFsaWFzIGRvd246CisKKyAgICAjIGlmY29uZmlnIGV0aDA6MCBkb3duCisgICAgICAgICAgICAgICAgIH5+fn5+fn5+fn4gLT4gd2lsbCBkZWxldGUgYWxpYXMKKworICAJCSAgIAkJICAgCitvIEFsaWFzIChyZS0pY29uZmlndXJpbmcKKworICBBbGlhc2VzIGFyZSBub3QgcmVhbCBkZXZpY2VzLCBidXQgcHJvZ3JhbXMgc2hvdWxkIGJlIGFibGUgdG8gY29uZmlndXJlIGFuZAorICByZWZlciB0byB0aGVtIGFzIHVzdWFsIChpZmNvbmZpZywgcm91dGUsIGV0YykuCisKKworbyBSZWxhdGlvbnNoaXAgd2l0aCBtYWluIGRldmljZQorCisgIElmIHRoZSBiYXNlIGRldmljZSBpcyBzaHV0IGRvd24gdGhlIGFkZGVkIGFsaWFzZXMgd2lsbCBiZSBkZWxldGVkIAorICB0b28uCisKKworQ29udGFjdAorLS0tLS0tLQorUGxlYXNlIGZpbmdlciBvciBlLW1haWwgbWU6CisgICBKdWFuIEpvc2UgQ2lhcmxhbnRlIDxqamNpYXJsYUByYWl6LnVuY3UuZWR1LmFyPgorCitVcGRhdGVkIGJ5IEVyaWsgU2Nob2VuZmVsZGVyIDxzY2hvZW5mckBnYWVydG5lci5ERT4KKworOyBsb2NhbCB2YXJpYWJsZXM6Cis7IG1vZGU6IGluZGVudGVkLXRleHQKKzsgbW9kZTogYXV0by1maWxsCis7IGVuZDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hcmNuZXQtaGFyZHdhcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC1oYXJkd2FyZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhNWYwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hcmNuZXQtaGFyZHdhcmUudHh0CkBAIC0wLDAgKzEsMzEzMyBAQAorIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIFRoaXMgZmlsZSBpcyBhIHN1cHBsZW1lbnQgdG8gYXJjbmV0LnR4dC4gIFBsZWFzZSByZWFkIHRoYXQgZm9yIGdlbmVyYWwKKyAgIGRyaXZlciBjb25maWd1cmF0aW9uIGhlbHAuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMikgVGhpcyBmaWxlIGlzIG5vIGxvbmdlciBMaW51eC1zcGVjaWZpYy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCBvdXQgb2YKKyAgIHRoZSBrZXJuZWwgc291cmNlcy4gIElkZWFzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVjYXVzZSBzbyBtYW55IHBlb3BsZSAobXlzZWxmIGluY2x1ZGVkKSBzZWVtIHRvIGhhdmUgb2J0YWluZWQgQVJDbmV0IGNhcmRzCit3aXRob3V0IG1hbnVhbHMsIHRoaXMgZmlsZSBjb250YWlucyBhIHF1aWNrIGludHJvZHVjdGlvbiB0byBBUkNuZXQgaGFyZHdhcmUsCitzb21lIGNhYmxpbmcgdGlwcywgYW5kIGEgbGlzdGluZyBvZiBhbGwganVtcGVyIHNldHRpbmdzIEkgY2FuIGZpbmQuIFBsZWFzZQorZS1tYWlsIGFwZW53YXJyQHdvcmxkdmlzaW9ucy5jYSB3aXRoIGFueSBzZXR0aW5ncyBmb3IgeW91ciBwYXJ0aWN1bGFyIGNhcmQsCitvciBhbnkgb3RoZXIgaW5mb3JtYXRpb24geW91IGhhdmUhCisKKworSU5UUk9EVUNUSU9OIFRPIEFSQ05FVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBUkNuZXQgaXMgYSBuZXR3b3JrIHR5cGUgd2hpY2ggd29ya3MgaW4gYSB3YXkgc2ltaWxhciB0byBwb3B1bGFyIEV0aGVybmV0CituZXR3b3JrcyBidXQgd2hpY2ggaXMgYWxzbyBkaWZmZXJlbnQgaW4gc29tZSB2ZXJ5IGltcG9ydGFudCB3YXlzLgorCitGaXJzdCBvZiBhbGwsIHlvdSBjYW4gZ2V0IEFSQ25ldCBjYXJkcyBpbiBhdCBsZWFzdCB0d28gc3BlZWRzOiAyLjUgTWJwcworKHNsb3dlciB0aGFuIEV0aGVybmV0KSBhbmQgMTAwIE1icHMgKGZhc3RlciB0aGFuIG5vcm1hbCBFdGhlcm5ldCkuICBJbiBmYWN0LAordGhlcmUgYXJlIG90aGVycyBhcyB3ZWxsLCBidXQgdGhlc2UgYXJlIGxlc3MgY29tbW9uLiAgVGhlIGRpZmZlcmVudCBoYXJkd2FyZQordHlwZXMsIGFzIGZhciBhcyBJJ20gYXdhcmUsIGFyZSBub3QgY29tcGF0aWJsZSBhbmQgc28geW91IGNhbm5vdCB3aXJlIGEKKzEwMCBNYnBzIGNhcmQgdG8gYSAyLjUgTWJwcyBjYXJkLCBhbmQgc28gb24uICBGcm9tIHdoYXQgSSBoZWFyLCBteSBkcml2ZXIgZG9lcword29yayB3aXRoIDEwMCBNYnBzIGNhcmRzLCBidXQgSSBoYXZlbid0IGJlZW4gYWJsZSB0byB2ZXJpZnkgdGhpcyBteXNlbGYsCitzaW5jZSBJIG9ubHkgaGF2ZSB0aGUgMi41IE1icHMgdmFyaWV0eS4gIEl0IGlzIHByb2JhYmx5IG5vdCBnb2luZyB0byBzYXR1cmF0ZQoreW91ciAxMDAgTWJwcyBjYXJkLiAgU3RvcCBjb21wbGFpbmluZy4gOikKKworWW91IGFsc28gY2Fubm90IGNvbm5lY3QgYW4gQVJDbmV0IGNhcmQgdG8gYW55IGtpbmQgb2YgRXRoZXJuZXQgY2FyZCBhbmQKK2V4cGVjdCBpdCB0byB3b3JrLiAgCisKK1RoZXJlIGFyZSB0d28gInR5cGVzIiBvZiBBUkNuZXQgLSBTVEFSIHRvcG9sb2d5IGFuZCBCVVMgdG9wb2xvZ3kuICBUaGlzCityZWZlcnMgdG8gaG93IHRoZSBjYXJkcyBhcmUgbWVhbnQgdG8gYmUgd2lyZWQgdG9nZXRoZXIuICBBY2NvcmRpbmcgdG8gbW9zdAorYXZhaWxhYmxlIGRvY3VtZW50YXRpb24sIHlvdSBjYW4gb25seSBjb25uZWN0IFNUQVIgY2FyZHMgdG8gU1RBUiBjYXJkcyBhbmQKK0JVUyBjYXJkcyB0byBCVVMgY2FyZHMuICBUaGF0IG1ha2VzIHNlbnNlLCByaWdodD8gIFdlbGwsIGl0J3Mgbm90IHF1aXRlCit0cnVlOyBzZWUgYmVsb3cgdW5kZXIgIkNhYmxpbmcuIgorCitPbmNlIHlvdSBnZXQgcGFzdCB0aGVzZSBsaXR0bGUgc3R1bWJsaW5nIGJsb2NrcywgQVJDbmV0IGlzIGFjdHVhbGx5IHF1aXRlIGEKK3dlbGwtZGVzaWduZWQgc3RhbmRhcmQuICBJdCB1c2VzIHNvbWV0aGluZyBjYWxsZWQgIm1vZGlmaWVkIHRva2VuIHBhc3NpbmciCit3aGljaCBtYWtlcyBpdCBjb21wbGV0ZWx5IGluY29tcGF0aWJsZSB3aXRoIHNvLWNhbGxlZCAiVG9rZW4gUmluZyIgY2FyZHMsCitidXQgd2hpY2ggbWFrZXMgdHJhbnNmZXJzIG11Y2ggbW9yZSByZWxpYWJsZSB0aGFuIEV0aGVybmV0IGRvZXMuICBJbiBmYWN0LAorQVJDbmV0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYSBwYWNrZXQgYXJyaXZlcyBzYWZlbHkgYXQgdGhlIGRlc3RpbmF0aW9uLCBhbmQKK2V2ZW4gaWYgaXQgY2FuJ3QgcG9zc2libHkgYmUgZGVsaXZlcmVkIHByb3Blcmx5IChpZS4gYmVjYXVzZSBvZiBhIGNhYmxlCiticmVhaywgb3IgYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gY29tcHV0ZXIgZG9lcyBub3QgZXhpc3QpIGl0IHdpbGwgYXQgbGVhc3QKK3RlbGwgdGhlIHNlbmRlciBhYm91dCBpdC4KKworQmVjYXVzZSBvZiB0aGUgY2FyZWZ1bGx5IGRlZmluZWQgYWN0aW9uIG9mIHRoZSAidG9rZW4iLCBpdCB3aWxsIGFsd2F5cyBtYWtlCithIHBhc3MgYXJvdW5kIHRoZSAicmluZyIgd2l0aGluIGEgbWF4aW11bSBsZW5ndGggb2YgdGltZS4gIFRoaXMgbWFrZXMgaXQKK3VzZWZ1bCBmb3IgcmVhbHRpbWUgbmV0d29ya3MuCisKK0luIGFkZGl0aW9uLCBhbGwga25vd24gQVJDbmV0IGNhcmRzIGhhdmUgYW4gKGFsbW9zdCkgaWRlbnRpY2FsIHByb2dyYW1taW5nCitpbnRlcmZhY2UuICBUaGlzIG1lYW5zIHRoYXQgd2l0aCBvbmUgQVJDbmV0IGRyaXZlciB5b3UgY2FuIHN1cHBvcnQgYW55CitjYXJkLCB3aGVyZWFzIHdpdGggRXRoZXJuZXQgZWFjaCBtYW51ZmFjdHVyZXIgdXNlcyB3aGF0IGlzIHNvbWV0aW1lcyBhCitjb21wbGV0ZWx5IGRpZmZlcmVudCBwcm9ncmFtbWluZyBpbnRlcmZhY2UsIGxlYWRpbmcgdG8gYSBsb3Qgb2YgZGlmZmVyZW50LAorc29tZXRpbWVzIHZlcnkgc2ltaWxhciwgRXRoZXJuZXQgZHJpdmVycy4gIE9mIGNvdXJzZSwgYWx3YXlzIHVzaW5nIHRoZSBzYW1lCitwcm9ncmFtbWluZyBpbnRlcmZhY2UgYWxzbyBtZWFucyB0aGF0IHdoZW4gaGlnaC1wZXJmb3JtYW5jZSBoYXJkd2FyZQorZmFjaWxpdGllcyBsaWtlIFBDSSBidXMgbWFzdGVyaW5nIERNQSBhcHBlYXIsIGl0J3MgaGFyZCB0byB0YWtlIGFkdmFudGFnZSBvZgordGhlbS4gIExldCdzIG5vdCBnbyBpbnRvIHRoYXQuCisKK09uZSB0aGluZyB0aGF0IG1ha2VzIEFSQ25ldCBjYXJkcyBkaWZmaWN1bHQgdG8gcHJvZ3JhbSBmb3IsIGhvd2V2ZXIsIGlzIHRoZQorbGltaXQgb24gdGhlaXIgcGFja2V0IHNpemVzOyBzdGFuZGFyZCBBUkNuZXQgY2FuIG9ubHkgc2VuZCBwYWNrZXRzIHRoYXQgYXJlCit1cCB0byA1MDggYnl0ZXMgaW4gbGVuZ3RoLiAgVGhpcyBpcyBzbWFsbGVyIHRoYW4gdGhlIEludGVybmV0ICJiYXJlIG1pbmltdW0iCitvZiA1NzYgYnl0ZXMsIGxldCBhbG9uZSB0aGUgRXRoZXJuZXQgTVRVIG9mIDE1MDAuICBUbyBjb21wZW5zYXRlLCBhbiBleHRyYQorbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbiBpcyBkZWZpbmVkIGJ5IFJGQzEyMDEsIHdoaWNoIEkgY2FsbCAicGFja2V0CitzcGxpdHRpbmcsIiB0aGF0IGFsbG93cyAidmlydHVhbCBwYWNrZXRzIiB0byBncm93IGFzIGxhcmdlIGFzIDY0SyBlYWNoLAorYWx0aG91Z2ggdGhleSBhcmUgZ2VuZXJhbGx5IGtlcHQgZG93biB0byB0aGUgRXRoZXJuZXQtc3R5bGUgMTUwMCBieXRlcy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMgKG1vc3RseSB0aGUKK2FkdmFudGFnZXMpIG9mIEFSQ25ldCBuZXR3b3JrcywgeW91IG1pZ2h0IHRyeSB0aGUgIkFSQ25ldCBUcmFkZSBBc3NvY2lhdGlvbiIKK1dXVyBwYWdlOgorCWh0dHA6Ly93d3cuYXJjbmV0LmNvbQorCisKK0NBQkxJTkcgQVJDTkVUIE5FVFdPUktTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gd2FzIHJld3JpdHRlbiBieSAKKyAgICAgICAgVm9qdGVjaCBQYXZsaWsgICAgIDx2b2p0ZWNoQHN1c2UuY3o+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHNldmVyYWwgcGVvcGxlLCBpbmNsdWRpbmc6CisgICAgICAgIEF2ZXJ5IFBlbm5yYXVuICAgICA8YXBlbndhcnJAd29ybGR2aXNpb25zLmNhPgorIAlTdGVwaGVuIEEuIFdvb2QgICAgPHNhd0BoYWxsYzEuY2ViYWYuZ292PgorIAlKb2huIFBhdWwgTW9ycmlzb24gPGptb3JyaXNvQGJvZ29taXBzLmVlLnViYy5jYT4KKyAJSm9hY2hpbSBLb2VuaWcgICAgIDxqb2pvQHJlcGFzLmRlPgorYW5kIEF2ZXJ5IHRvdWNoZWQgaXQgdXAgYSBiaXQsIGF0IFZvanRlY2gncyByZXF1ZXN0LgorCitBUkNuZXQgKHRoZSBjbGFzc2ljIDIuNSBNYnBzIHZlcnNpb24pIGNhbiBiZSBjb25uZWN0ZWQgYnkgdHdvIGRpZmZlcmVudAordHlwZXMgb2YgY2FibGluZzogY29heCBhbmQgdHdpc3RlZCBwYWlyLiAgVGhlIG90aGVyIEFSQ25ldC10eXBlIG5ldHdvcmtzCisoMTAwIE1icHMgVENOUyBhbmQgMzIwIGticHMgLSAzMiBNYnBzIEFSQ25ldCBQbHVzKSB1c2UgZGlmZmVyZW50IHR5cGVzIG9mCitjYWJsaW5nIChUeXBlMSwgRmliZXIsIEMxLCBDNCwgQzUpLgorCitGb3IgYSBjb2F4IG5ldHdvcmssIHlvdSAic2hvdWxkIiB1c2UgOTMgT2htIFJHLTYyIGNhYmxlLiAgQnV0IG90aGVyIGNhYmxlcworYWxzbyB3b3JrIGZpbmUsIGJlY2F1c2UgQVJDbmV0IGlzIGEgdmVyeSBzdGFibGUgbmV0d29yay4gSSBwZXJzb25hbGx5IHVzZSA3NQorT2htIFRWIGFudGVubmEgY2FibGUuCisKK0NhcmRzIGZvciBjb2F4IGNhYmxpbmcgYXJlIHNoaXBwZWQgaW4gdHdvIGRpZmZlcmVudCB2YXJpYW50czogZm9yIEJVUyBhbmQKK1NUQVIgbmV0d29yayB0b3BvbG9naWVzLiAgVGhleSBhcmUgbW9zdGx5IHRoZSBzYW1lLiAgVGhlIG9ubHkgZGlmZmVyZW5jZQorbGllcyBpbiB0aGUgaHlicmlkIGNoaXAgaW5zdGFsbGVkLiAgQlVTIGNhcmRzIHVzZSBoaWdoIGltcGVkYW5jZSBvdXRwdXQsCit3aGlsZSBTVEFSIHVzZSBsb3cgaW1wZWRhbmNlLiAgTG93IGltcGVkYW5jZSBjYXJkIChTVEFSKSBpcyBlbGVjdHJpY2FsbHkKK2VxdWFsIHRvIGEgaGlnaCBpbXBlZGFuY2Ugb25lIHdpdGggYSB0ZXJtaW5hdG9yIGluc3RhbGxlZC4KKworVXN1YWxseSwgdGhlIEFSQ25ldCBuZXR3b3JrcyBhcmUgYnVpbHQgdXAgZnJvbSBTVEFSIGNhcmRzIGFuZCBodWJzLiAgVGhlcmUKK2FyZSB0d28gdHlwZXMgb2YgaHVicyAtIGFjdGl2ZSBhbmQgcGFzc2l2ZS4gIFBhc3NpdmUgaHVicyBhcmUgc21hbGwgYm94ZXMKK3dpdGggZm91ciBCTkMgY29ubmVjdG9ycyBjb250YWluaW5nIGZvdXIgNDcgT2htIHJlc2lzdG9yczoKKworICAgfCAgICAgICAgIHwgd2lyZXMKKyAgIFIgICAgICAgICArIGp1bmN0aW9uCistUi0rLVItICAgICAgUiA0NyBPaG0gcmVzaXN0b3JzCisgICBSCisgICB8CisKK1RoZSBzaGllbGRpbmcgaXMgY29ubmVjdGVkIHRvZ2V0aGVyLiAgQWN0aXZlIGh1YnMgYXJlIG11Y2ggbW9yZSBjb21wbGljYXRlZDsKK3RoZXkgYXJlIHBvd2VyZWQgYW5kIGNvbnRhaW4gZWxlY3Ryb25pY3MgdG8gYW1wbGlmeSB0aGUgc2lnbmFsIGFuZCBzZW5kIGl0Cit0byBvdGhlciBzZWdtZW50cyBvZiB0aGUgbmV0LiAgVGhleSB1c3VhbGx5IGhhdmUgZWlnaHQgY29ubmVjdG9ycy4gIEFjdGl2ZQoraHVicyBjb21lIGluIHR3byB2YXJpYW50cyAtIGR1bWIgYW5kIHNtYXJ0LiAgVGhlIGR1bWIgdmFyaWFudCBqdXN0CithbXBsaWZpZXMsIGJ1dCB0aGUgc21hcnQgb25lIGRlY29kZXMgdG8gZGlnaXRhbCBhbmQgZW5jb2RlcyBiYWNrIGFsbCBwYWNrZXRzCitjb21pbmcgdGhyb3VnaC4gIFRoaXMgaXMgbXVjaCBiZXR0ZXIgaWYgeW91IGhhdmUgc2V2ZXJhbCBodWJzIGluIHRoZSBuZXQsCitzaW5jZSBtYW55IGR1bWIgYWN0aXZlIGh1YnMgbWF5IHdvcnNlbiB0aGUgc2lnbmFsIHF1YWxpdHkuCisKK0FuZCBub3cgdG8gdGhlIGNhYmxpbmcuICBXaGF0IHlvdSBjYW4gY29ubmVjdCB0b2dldGhlcjoKKworMS4gQSBjYXJkIHRvIGEgY2FyZC4gIFRoaXMgaXMgdGhlIHNpbXBsZXN0IHdheSBvZiBjcmVhdGluZyBhIDItY29tcHV0ZXIKKyAgIG5ldHdvcmsuCisKKzIuIEEgY2FyZCB0byBhIHBhc3NpdmUgaHViLiAgUmVtZW1iZXIgdGhhdCBhbGwgdW51c2VkIGNvbm5lY3RvcnMgb24gdGhlIGh1YgorICAgbXVzdCBiZSBwcm9wZXJseSB0ZXJtaW5hdGVkIHdpdGggOTMgT2htIChvciBzb21ldGhpbmcgZWxzZSBpZiB5b3UgZG9uJ3QKKyAgIGhhdmUgdGhlIHJpZ2h0IG9uZXMpIHRlcm1pbmF0b3JzLgorICAgCShBdmVyeSdzIG5vdGU6IG9vcHMsIEkgZGlkbid0IGtub3cgdGhhdC4gIE1pbmUgKFRWIGNhYmxlKSB3b3JrcworCWFueXdheSwgdGhvdWdoLikKKworMy4gQSBjYXJkIHRvIGFuIGFjdGl2ZSBodWIuICBIZXJlIGlzIG5vIG5lZWQgdG8gdGVybWluYXRlIHRoZSB1bnVzZWQKKyAgIGNvbm5lY3RvcnMgZXhjZXB0IHNvbWUga2luZCBvZiBhZXN0aGV0aWMgZmVlbGluZy4gIEJ1dCwgdGhlcmUgbWF5IG5vdCBiZQorICAgbW9yZSB0aGFuIGVsZXZlbiBhY3RpdmUgaHVicyBiZXR3ZWVuIGFueSB0d28gY29tcHV0ZXJzLiAgVGhhdCBvZiBjb3Vyc2UKKyAgIGRvZXNuJ3QgbGltaXQgdGhlIG51bWJlciBvZiBhY3RpdmUgaHVicyBvbiB0aGUgbmV0d29yay4KKyAgIAorNC4gQW4gYWN0aXZlIGh1YiB0byBhbm90aGVyLgorCis1LiBBbiBhY3RpdmUgaHViIHRvIHBhc3NpdmUgaHViLgorCitSZW1lbWJlciwgdGhhdCB5b3UgY2FuIG5vdCBjb25uZWN0IHR3byBwYXNzaXZlIGh1YnMgdG9nZXRoZXIuICBUaGUgcG93ZXIgbG9zcworaW1wbGllZCBieSBzdWNoIGEgY29ubmVjdGlvbiBpcyB0b28gaGlnaCBmb3IgdGhlIG5ldCB0byBvcGVyYXRlIHJlbGlhYmx5LgorCitBbiBleGFtcGxlIG9mIGEgdHlwaWNhbCBBUkNuZXQgbmV0d29yazoKKworICAgICAgICAgICBSICAgICAgICAgICAgICAgICAgICAgUyAtIFNUQVIgdHlwZSBjYXJkICAgICAgICAgICAgICAKKyAgICBTLS0tLS0tSC0tLS0tLS0tQS0tLS0tLS1TICAgIFIgLSBUZXJtaW5hdG9yCisgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICBIIC0gSHViICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgQSAtIEFjdGl2ZSBodWIgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgfCAgIFMtLS0tSC0tLS1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIFMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorVGhlIEJVUyB0b3BvbG9neSBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIG9uZSB1c2VkIGJ5IEV0aGVybmV0LiAgVGhlIG9ubHkKK2RpZmZlcmVuY2UgaXMgaW4gY2FibGUgYW5kIHRlcm1pbmF0b3JzOiB0aGV5IHNob3VsZCBiZSA5MyBPaG0uICBFdGhlcm5ldAordXNlcyA1MCBPaG0gaW1wZWRhbmNlLiBZb3UgdXNlIFQgY29ubmVjdG9ycyB0byBwdXQgdGhlIGNvbXB1dGVycyBvbiBhIHNpbmdsZQorbGluZSBvZiBjYWJsZSwgdGhlIGJ1cy4gWW91IGhhdmUgdG8gcHV0IHRlcm1pbmF0b3JzIGF0IGJvdGggZW5kcyBvZiB0aGUKK2NhYmxlLiBBIHR5cGljYWwgQlVTIEFSQ25ldCBuZXR3b3JrIGxvb2tzIGxpa2U6CisKKyAgICBSVC0tLS1ULS0tLS0tVC0tLS0tLVQtLS0tLS1ULS0tLS0tVFIKKyAgICAgQiAgICBCICAgICAgQiAgICAgIEIgICAgICBCICAgICAgQgorCisgIEIgLSBCVVMgdHlwZSBjYXJkCisgIFIgLSBUZXJtaW5hdG9yCisgIFQgLSBUIGNvbm5lY3RvcgorCitCdXQgdGhhdCBpcyBub3QgYWxsISBUaGUgdHdvIHR5cGVzIGNhbiBiZSBjb25uZWN0ZWQgdG9nZXRoZXIuICBBY2NvcmRpbmcgdG8KK3RoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIHRoZSBvbmx5IHdheSBvZiBjb25uZWN0aW5nIHRoZW0gaXMgdXNpbmcgYW4gYWN0aXZlCitodWI6CisKKyAgICAgICAgIEEtLS0tLS1ULS0tLS0tVC0tLS0tLVRSCisgICAgICAgICB8ICAgICAgQiAgICAgIEIgICAgICBCCisgICAgIFMtLS1ILS0tUworICAgICAgICAgfAorICAgICAgICAgUworCitUaGUgb2ZmaWNpYWwgZG9jcyBhbHNvIHN0YXRlIHRoYXQgeW91IGNhbiB1c2UgU1RBUiBjYXJkcyBhdCB0aGUgZW5kcyBvZgorQlVTIG5ldHdvcmsgaW4gcGxhY2Ugb2YgYSBCVVMgY2FyZCBhbmQgYSB0ZXJtaW5hdG9yOgorCisgICAgIFMtLS0tLS1ULS0tLS0tVC0tLS0tLVMKKyAgICAgICAgICAgIEIgICAgICBCCisKK0J1dCwgYWNjb3JkaW5nIHRvIG15IG93biBleHBlcmltZW50cywgeW91IGNhbiBzaW1wbHkgaGFuZyBhIEJVUyB0eXBlIGNhcmQKK2FueXdoZXJlIGluIG1pZGRsZSBvZiBhIGNhYmxlIGluIGEgU1RBUiB0b3BvbG9neSBuZXR3b3JrLiAgQW5kIG1vcmUgLSB5b3UKK2NhbiB1c2UgdGhlIGJ1cyBjYXJkIGluIHBsYWNlIG9mIGFueSBzdGFyIGNhcmQgaWYgeW91IHVzZSBhIHRlcm1pbmF0b3IuIFRoZW4KK3lvdSBjYW4gYnVpbGQgdmVyeSBjb21wbGljYXRlZCBuZXR3b3JrcyBmdWxmaWxsaW5nIGFsbCB5b3VyIG5lZWRzISAgQW4KK2V4YW1wbGU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICBSVC0tLS0tLVQtLS0tLS0tVC0tLS0tLUgtLS0tLS1TCisgICAgICAgICAgICBCICAgICAgQiAgICAgICBCICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgUgorICAgIFMtLS0tLS1BLS0tLS0tVC0tLS0tLS1ULS0tLS0tLUEtLS0tLS0tSC0tLS0tLVRSICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgfCAgICAgIEIgICAgICAgQiAgICAgICB8ICAgICAgIHwgICAgICBCICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgUyAgICAgICAgICAgICAgICAgQlQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgfCAgICAgICAgICAgICAgICAgIHwgIFMtLS0tQS0tLS0tUworICAgIFMtLS0tLS1ILS0tQS0tLS1TICAgICAgICAgICAgIHwgICAgICAgfCAKKyAgICAgICAgICAgfCAgIHwgICAgICBTLS0tLS0tVC0tLS1ILS0tUyAgIHwKKyAgICAgICAgICAgUyAgIFMgICAgICAgICAgICAgQiAgICBSICAgICAgIFMgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitBIGJhc2ljYWxseSBkaWZmZXJlbnQgY2FibGluZyBzY2hlbWUgaXMgdXNlZCB3aXRoIFR3aXN0ZWQgUGFpciBjYWJsaW5nLiBFYWNoCitvZiB0aGUgVFAgY2FyZHMgaGFzIHR3byBSSiAocGhvbmUtY29yZCBzdHlsZSkgY29ubmVjdG9ycy4gIFRoZSBjYXJkcyBhcmUKK3RoZW4gZGFpc3ktY2hhaW5lZCB0b2dldGhlciB1c2luZyBhIGNhYmxlIGNvbm5lY3RpbmcgZXZlcnkgdHdvIG5laWdoYm9yaW5nCitjYXJkcy4gIFRoZSBlbmRzIGFyZSB0ZXJtaW5hdGVkIHdpdGggUkogOTMgT2htIHRlcm1pbmF0b3JzIHdoaWNoIHBsdWcgaW50bwordGhlIGVtcHR5IGNvbm5lY3RvcnMgb2YgY2FyZHMgb24gdGhlIGVuZHMgb2YgdGhlIGNoYWluLiAgQW4gZXhhbXBsZToKKworICAgICAgICAgIF9fX19fX19fX19fICAgX19fX19fX19fX18KKyAgICAgIF9SX3xfICAgICAgICAgX3xffF8gICAgICAgICBffF9SXyAgCisgICAgIHwgICAgIHwgICAgICAgfCAgICAgfCAgICAgICB8ICAgICB8ICAgICAgCisgICAgIHxDYXJkIHwgICAgICAgfENhcmQgfCAgICAgICB8Q2FyZCB8ICAgICAKKyAgICAgfF9fX19ffCAgICAgICB8X19fX198ICAgICAgIHxfX19fX3wgICAgICAgICAgCisKKworVGhlcmUgYXJlIGFsc28gaHVicyBmb3IgdGhlIFRQIHRvcG9sb2d5LiAgVGhlcmUgaXMgbm90aGluZyBkaWZmaWN1bHQKK2ludm9sdmVkIGluIHVzaW5nIHRoZW07IHlvdSBqdXN0IGNvbm5lY3QgYSBUUCBjaGFpbiB0byBhIGh1YiBvbiBhbnkgZW5kIG9yCitldmVuIGF0IGJvdGguICBUaGlzIHdheSB5b3UgY2FuIGNyZWF0ZSBhbG1vc3QgYW55IG5ldHdvcmsgY29uZmlndXJhdGlvbi4gCitUaGUgbWF4aW11bSBvZiAxMSBodWJzIGJldHdlZW4gYW55IHR3byBjb21wdXRlcnMgb24gdGhlIG5ldCBhcHBsaWVzIGhlcmUgYXMKK3dlbGwuICBBbiBleGFtcGxlOgorCisgICAgUlAtLS0tLS0tUC0tLS0tLS0tUC0tLS0tLS0tSC0tLS0tUC0tLS0tLVAtLS0tLVBSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgUlAtLS0tLUgtLS0tLS0tLVAtLS0tLS0tLUgtLS0tLVAtLS0tLS1QUgorICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICBQUiAgICAgICAgICAgICAgICBQUgorCisgICAgUiAtIFJKIFRlcm1pbmF0b3IKKyAgICBQIC0gVFAgQ2FyZAorICAgIEggLSBUUCBIdWIKKworTGlrZSBhbnkgbmV0d29yaywgQVJDbmV0IGhhcyBhIGxpbWl0ZWQgY2FibGUgbGVuZ3RoLiAgVGhlc2UgYXJlIHRoZSBtYXhpbXVtCitjYWJsZSBsZW5ndGhzIGJldHdlZW4gdHdvIGFjdGl2ZSBlbmRzIChhbiBhY3RpdmUgZW5kIGJlaW5nIGFuIGFjdGl2ZSBodWIgb3IKK2EgU1RBUiBjYXJkKS4KKworCQlSRy02MiAgICAgICA5MyBPaG0gdXAgdG8gNjUwIG0KKwkJUkctNTkvVSAgICAgNzUgT2htIHVwIHRvIDQ1NyBtCisJCVJHLTExL1UgICAgIDc1IE9obSB1cCB0byA1MzMgbQorCQlJQk0gVHlwZSAxIDE1MCBPaG0gdXAgdG8gMjAwIG0KKwkJSUJNIFR5cGUgMyAxMDAgT2htIHVwIHRvIDEwMCBtCisKK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbGwgY2FibGVzIGNvbm5lY3RlZCB0byBhIHBhc3NpdmUgaHViIGlzIGxpbWl0ZWQgdG8gNjUKK21ldGVycyBmb3IgUkctNjIgY2FibGluZzsgbGVzcyBmb3Igb3RoZXJzLiAgWW91IGNhbiBzZWUgdGhhdCB1c2luZyBwYXNzaXZlCitodWJzIGluIGEgbGFyZ2UgbmV0d29yayBpcyBhIGJhZCBpZGVhLiBUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBzaW5nbGUgIkJVUworVHJ1bmsiIGlzIGFib3V0IDMwMCBtZXRlcnMgZm9yIFJHLTYyLiBUaGUgbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28KK21vc3QgZGlzdGFudCBwb2ludHMgb2YgdGhlIG5ldCBpcyBsaW1pdGVkIHRvIDMwMDAgbWV0ZXJzLiBUaGUgbWF4aW11bSBsZW5ndGgKK29mIGEgVFAgY2FibGUgYmV0d2VlbiB0d28gY2FyZHMvaHVicyBpcyA2NTAgbWV0ZXJzLgorCisKK1NFVFRJTkcgVEhFIEpVTVBFUlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIEFSQ25ldCBjYXJkcyBzaG91bGQgaGF2ZSBhIHRvdGFsIG9mIGZvdXIgb3IgZml2ZSBkaWZmZXJlbnQgc2V0dGluZ3M6CisKKyAgLSB0aGUgSS9PIGFkZHJlc3M6ICB0aGlzIGlzIHRoZSAicG9ydCIgeW91ciBBUkNuZXQgY2FyZCBpcyBvbi4gIFByb2JlZAorICAgIHZhbHVlcyBpbiB0aGUgTGludXggQVJDbmV0IGRyaXZlciBhcmUgb25seSBmcm9tIDB4MjAwIHRocm91Z2ggMHgzRjAuIChJZgorICAgIHlvdXIgY2FyZCBoYXMgYWRkaXRpb25hbCBvbmVzLCB3aGljaCBpcyBwb3NzaWJsZSwgcGxlYXNlIHRlbGwgbWUuKSBUaGlzCisgICAgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyBhbnkgb3RoZXIgZGV2aWNlIG9uIHlvdXIgc3lzdGVtLiAgQWNjb3JkaW5nIHRvCisgICAgYSBkb2MgSSBnb3QgZnJvbSBOb3ZlbGwsIE1TIFdpbmRvd3MgcHJlZmVycyB2YWx1ZXMgb2YgMHgzMDAgb3IgbW9yZSwKKyAgICBlYXRpbmcgbmV0IGNvbm5lY3Rpb25zIG9uIG15IHN5c3RlbSAoYXQgbGVhc3QpIG90aGVyd2lzZS4gIE15IGd1ZXNzIGlzCisgICAgdGhpcyBtYXkgYmUgYmVjYXVzZSwgaWYgeW91ciBjYXJkIGlzIGF0IDB4MkUwLCBwcm9iaW5nIGZvciBhIHNlcmlhbCBwb3J0CisgICAgYXQgMHgyRTggd2lsbCByZXNldCB0aGUgY2FyZCBhbmQgcHJvYmFibHkgbWVzcyB0aGluZ3MgdXAgcm95YWxseS4KKwktIEF2ZXJ5J3MgZmF2b3VyaXRlOiAweDMwMC4KKworICAtIHRoZSBJUlE6IG9uICA4LWJpdCBjYXJkcywgaXQgbWlnaHQgYmUgMiAoOSksIDMsIDQsIDUsIG9yIDcuCisgICAgICAgICAgICAgb24gMTYtYml0IGNhcmRzLCBpdCBtaWdodCBiZSAyICg5KSwgMywgNCwgNSwgNywgb3IgMTAtMTUuCisgICAgICAgICAgICAgCisgICAgTWFrZSBzdXJlIHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYW55IG90aGVyIGNhcmQgb24geW91ciBzeXN0ZW0uICBOb3RlCisgICAgdGhhdCBJUlEyIGlzIHRoZSBzYW1lIGFzIElSUTksIGFzIGZhciBhcyBMaW51eCBpcyBjb25jZXJuZWQuICBZb3UgY2FuCisgICAgImNhdCAvcHJvYy9pbnRlcnJ1cHRzIiBmb3IgYSBzb21ld2hhdCBjb21wbGV0ZSBsaXN0IG9mIHdoaWNoIG9uZXMgYXJlIGluCisgICAgdXNlIGF0IGFueSBnaXZlbiB0aW1lLiAgSGVyZSBpcyBhIGxpc3Qgb2YgY29tbW9uIHVzYWdlcyBmcm9tIFZvanRlY2gKKyAgICBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej46CisgICAgCSgiTm90IG9uIGJ1cyIgbWVhbnMgdGhlcmUgaXMgbm8gd2F5IGZvciBhIGNhcmQgdG8gZ2VuZXJhdGUgdGhpcworCWludGVycnVwdCkKKwlJUlEgIDAgLSBUaW1lciAwIChOb3Qgb24gYnVzKQorCUlSUSAgMSAtIEtleWJvYXJkIChOb3Qgb24gYnVzKQorCUlSUSAgMiAtIElSUSBDb250cm9sbGVyIDIgKE5vdCBvbiBidXMsIG5vciBkb2VzIGludGVycnVwdCB0aGUgQ1BVKQorCUlSUSAgMyAtIENPTTIKKwlJUlEgIDQgLSBDT00xCisJSVJRICA1IC0gRlJFRSAoTFBUMiBpZiB5b3UgaGF2ZSBpdDsgc29tZXRpbWVzIENPTTM7IG1heWJlIFBMSVApCisJSVJRICA2IC0gRmxvcHB5IGRpc2sgY29udHJvbGxlcgorCUlSUSAgNyAtIEZSRUUgKExQVDEgaWYgeW91IGRvbid0IHVzZSB0aGUgcG9sbGluZyBkcml2ZXI7IFBMSVApIAorCUlSUSAgOCAtIFJlYWx0aW1lIENsb2NrIEludGVycnVwdCAoTm90IG9uIGJ1cykKKwlJUlEgIDkgLSBGUkVFIChWR0EgdmVydGljYWwgc3luYyBpbnRlcnJ1cHQgaWYgZW5hYmxlZCkKKwlJUlEgMTAgLSBGUkVFCisJSVJRIDExIC0gRlJFRQorCUlSUSAxMiAtIEZSRUUKKwlJUlEgMTMgLSBOdW1lcmljIENvcHJvY2Vzc29yIChOb3Qgb24gYnVzKQorCUlSUSAxNCAtIEZpeGVkIERpc2sgQ29udHJvbGxlcgorCUlSUSAxNSAtIEZSRUUgKEZpeGVkIERpc2sgQ29udHJvbGxlciAyIGlmIHlvdSBoYXZlIGl0KSAKKwkKKwlOb3RlOiBJUlEgOSBpcyB1c2VkIG9uIHNvbWUgdmlkZW8gY2FyZHMgZm9yIHRoZSAidmVydGljYWwgcmV0cmFjZSIKKwlpbnRlcnJ1cHQuICBUaGlzIGludGVycnVwdCB3b3VsZCBoYXZlIGJlZW4gaGFuZHkgZm9yIHRoaW5ncyBsaWtlCisJdmlkZW8gZ2FtZXMsIGFzIGl0IG9jY3VycyBleGFjdGx5IG9uY2UgcGVyIHNjcmVlbiByZWZyZXNoLCBidXQKKwl1bmZvcnR1bmF0ZWx5IElCTSBjYW5jZWxsZWQgdGhpcyBmZWF0dXJlIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsCisJVkdBIGFuZCB0aHVzIG1hbnkgVkdBL1NWR0EgY2FyZHMgZG8gbm90IHN1cHBvcnQgaXQuICBGb3IgdGhpcworCXJlYXNvbiwgbm8gbW9kZXJuIHNvZnR3YXJlIHVzZXMgdGhpcyBpbnRlcnJ1cHQgYW5kIGl0IGNhbiBhbG1vc3QKKwlhbHdheXMgYmUgc2FmZWx5IGRpc2FibGVkLCBpZiB5b3VyIHZpZGVvIGNhcmQgc3VwcG9ydHMgaXQgYXQgYWxsLgorCQorCUlmIHlvdXIgY2FyZCBmb3Igc29tZSByZWFzb24gQ0FOTk9UIGRpc2FibGUgdGhpcyBJUlEgKHVzdWFsbHkgdGhlcmUKKwlpcyBhIGp1bXBlciksIG9uZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBjbGlwIHRoZSBwcmludGVkIGNpcmN1aXQKKwljb250YWN0IG9uIHRoZSBib2FyZDogaXQncyB0aGUgZm91cnRoIGNvbnRhY3QgZnJvbSB0aGUgbGVmdCBvbiB0aGUKKwliYWNrIHNpZGUuICBJIHRha2Ugbm8gcmVzcG9uc2liaWxpdHkgaWYgeW91IHRyeSB0aGlzLgorCisJLSBBdmVyeSdzIGZhdm91cml0ZTogSVJRMiAoYWN0dWFsbHkgSVJROSkuICBXYXRjaCB0aGF0IFZHQSwgdGhvdWdoLgorCisgIC0gdGhlIG1lbW9yeSBhZGRyZXNzOiAgVW5saWtlIG1vc3QgY2FyZHMsIEFSQ25ldHMgdXNlICJzaGFyZWQgbWVtb3J5IiBmb3IKKyAgICBjb3B5aW5nIGJ1ZmZlcnMgYXJvdW5kLiAgTWFrZSBTVVJFIGl0IGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBhbnkgb3RoZXIKKyAgICB1c2VkIG1lbW9yeSBpbiB5b3VyIHN5c3RlbSEKKwlBMDAwMAkJLSBWR0EgZ3JhcGhpY3MgbWVtb3J5IChvayBpZiB5b3UgZG9uJ3QgaGF2ZSBWR0EpCisgICAgICAgIEIwMDAwCQktIE1vbm9jaHJvbWUgdGV4dCBtb2RlCisgICAgICAgIEMwMDAwCQlcICBPbmUgb2YgdGhlc2UgaXMgeW91ciBWR0EgQklPUyAtIHVzdWFsbHkgQzAwMDAuCisgICAgICAgIEUwMDAwCQkvCisgICAgICAgIEYwMDAwCQktIFN5c3RlbSBCSU9TCisKKyAgICBBbnl0aGluZyBsZXNzIHRoYW4gMHhBMDAwMCBpcywgd2VsbCwgYSBCQUQgaWRlYSBzaW5jZSBpdCBpc24ndCBhYm92ZQorICAgIDY0MGsuCisJLSBBdmVyeSdzIGZhdm91cml0ZTogMHhEMDAwMAorCisgIC0gdGhlIHN0YXRpb24gYWRkcmVzczogIEV2ZXJ5IEFSQ25ldCBjYXJkIGhhcyBpdHMgb3duICJ1bmlxdWUiIG5ldHdvcmsKKyAgICBhZGRyZXNzIGZyb20gMCB0byAyNTUuICBVbmxpa2UgRXRoZXJuZXQsIHlvdSBjYW4gc2V0IHRoaXMgYWRkcmVzcworICAgIHlvdXJzZWxmIHdpdGggYSBqdW1wZXIgb3Igc3dpdGNoIChvciBvbiBzb21lIGNhcmRzLCB3aXRoIHNwZWNpYWwKKyAgICBzb2Z0d2FyZSkuICBTaW5jZSBpdCdzIG9ubHkgOCBiaXRzLCB5b3UgY2FuIG9ubHkgaGF2ZSAyNTQgQVJDbmV0IGNhcmRzCisgICAgb24gYSBuZXR3b3JrLiAgRE9OJ1QgdXNlIDAgb3IgMjU1LCBzaW5jZSB0aGVzZSBhcmUgcmVzZXJ2ZWQgKGFsdGhvdWdoCisgICAgbmVhdCBzdHVmZiB3aWxsIHByb2JhYmx5IGhhcHBlbiBpZiB5b3UgRE8gdXNlIHRoZW0pLiAgQnkgdGhlIHdheSwgaWYgeW91CisgICAgaGF2ZW4ndCBhbHJlYWR5IGd1ZXNzZWQsIGRvbid0IHNldCB0aGlzIHRoZSBzYW1lIGFzIGFueSBvdGhlciBBUkNuZXQgb24KKyAgICB5b3VyIG5ldHdvcmshCisJLSBBdmVyeSdzIGZhdm91cml0ZTogIDMgYW5kIDQuICBOb3QgdGhhdCBpdCBtYXR0ZXJzLgorCisgIC0gVGhlcmUgbWF5IGJlIEVUUzEgYW5kIEVUUzIgc2V0dGluZ3MuICBUaGVzZSBtYXkgb3IgbWF5IG5vdCBtYWtlIGEKKyAgICBkaWZmZXJlbmNlIG9uIHlvdXIgY2FyZCAobWFueSBtYW51YWxzIGNhbGwgdGhlbSAicmVzZXJ2ZWQiKSwgYnV0IGFyZQorICAgIHVzZWQgdG8gY2hhbmdlIHRoZSBkZWxheXMgdXNlZCB3aGVuIHBvd2VyaW5nIHVwIGEgY29tcHV0ZXIgb24gdGhlCisgICAgbmV0d29yay4gIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiB3aXJpbmcgVkVSWSBsb25nIHJhbmdlIEFSQ25ldAorICAgIG5ldHdvcmtzLCBvbiB0aGUgb3JkZXIgb2YgNGttIG9yIHNvOyBpbiBhbnkgY2FzZSwgdGhlIG9ubHkgcmVhbAorICAgIHJlcXVpcmVtZW50IGhlcmUgaXMgdGhhdCBhbGwgY2FyZHMgb24gdGhlIG5ldHdvcmsgd2l0aCBFVFMxIGFuZCBFVFMyCisgICAganVtcGVycyBoYXZlIHRoZW0gaW4gdGhlIHNhbWUgcG9zaXRpb24uICBDaHJpcyBIaW5keSA8Y2hyaXNoQGlvLm9yZz4KKyAgICBzZW50IGluIGEgY2hhcnQgd2l0aCBhY3R1YWwgdmFsdWVzIGZvciB0aGlzOgorCUVUMQlFVDIJUmVzcG9uc2UgVGltZQlSZWNvbmZpZ3VyYXRpb24gVGltZQorCS0tLQktLS0JLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLQorCW9wZW4Jb3Blbgk3NC43dXMJCTg0MHVzCisJb3BlbgljbG9zZWQJMjgzLjR1cwkJMTY4MHVzCisJY2xvc2VkCW9wZW4JNTYxLjh1cwkJMTY4MHVzCisJY2xvc2VkCWNsb3NlZAkxMTE4LjZ1cwkxNjgwdXMKKyAgICAKKyAgICBNYWtlIHN1cmUgeW91IHNldCBFVFMxIGFuZCBFVFMyIHRvIHRoZSBTQU1FIFZBTFVFIGZvciBhbGwgY2FyZHMgb24geW91cgorICAgIG5ldHdvcmsuCisgICAgCitBbHNvLCBvbiBtYW55IGNhcmRzIChub3QgbWluZSwgdGhvdWdoKSB0aGVyZSBhcmUgcmVkIGFuZCBncmVlbiBMRUQncy4gCitWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PiB0ZWxscyBtZSB0aGlzIGlzIHdoYXQgdGhleSBtZWFuOgorCUdSRUVOICAgICAgICAgICBSRUQgICAgICAgICAgICAgU3RhdHVzCisJLS0tLS0JCS0tLQkJLS0tLS0tCisJT0ZGICAgICAgICAgICAgIE9GRiAgICAgICAgICAgICBQb3dlciBvZmYKKwlPRkYgICAgICAgICAgICAgU2hvcnQgZmxhc2hlcyAgIENhYmxpbmcgcHJvYmxlbXMgKGJyb2tlbiBjYWJsZSBvciBub3QKKwkJCQkJICB0ZXJtaW5hdGVkKQorCU9GRiAoc2hvcnQpICAgICBPTiAgICAgICAgICAgICAgQ2FyZCBpbml0CisJT04gICAgICAgICAgICAgIE9OICAgICAgICAgICAgICBOb3JtYWwgc3RhdGUgLSBldmVyeXRoaW5nIE9LLCBub3RoaW5nCisJCQkJCSAgaGFwcGVucworCU9OICAgICAgICAgICAgICBMb25nIGZsYXNoZXMgICAgRGF0YSB0cmFuc2ZlcgorCU9OICAgICAgICAgICAgICBPRkYgICAgICAgICAgICAgTmV2ZXIgaGFwcGVucyAobWF5YmUgd2hlbiB3cm9uZyBJRCkKKworCitUaGUgZm9sbG93aW5nIGlzIGFsbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcGVvcGxlIGhhdmUgc2VudCBtZSBhYm91dAordGhlaXIgb3duIHBhcnRpY3VsYXIgQVJDbmV0IGNhcmRzLiAgSXQgaXMgb2ZmaWNpYWxseSBhIG1lc3MsIGFuZCBjb250YWlucworaHVnZSBhbW91bnRzIG9mIGR1cGxpY2F0ZWQgaW5mb3JtYXRpb24uICBJIGhhdmUgbm8gdGltZSB0byBmaXggaXQuICBJZiB5b3UKK3dhbnQgdG8sIFBMRUFTRSBETyEgIEp1c3Qgc2VuZCBtZSBhICdkaWZmIC11JyBvZiBhbGwgeW91ciBjaGFuZ2VzLgorCitUaGUgbW9kZWwgIyBpcyBsaXN0ZWQgcmlnaHQgYWJvdmUgc3BlY2lmaWNzIGZvciB0aGF0IGNhcmQsIHNvIHlvdSBzaG91bGQgYmUKK2FibGUgdG8gdXNlIHlvdXIgdGV4dCB2aWV3ZXIncyAic2VhcmNoIiBmdW5jdGlvbiB0byBmaW5kIHRoZSBlbnRyeSB5b3Ugd2FudC4gCitJZiB5b3UgZG9uJ3QgS05PVyB3aGF0IGtpbmQgb2YgY2FyZCB5b3UgaGF2ZSwgdHJ5IGxvb2tpbmcgdGhyb3VnaCB0aGUKK3ZhcmlvdXMgZGlhZ3JhbXMgdG8gc2VlIGlmIHlvdSBjYW4gdGVsbC4KKworSWYgeW91ciBtb2RlbCBpc24ndCBsaXN0ZWQgYW5kL29yIGhhcyBkaWZmZXJlbnQgc2V0dGluZ3MsIFBMRUFTRSBQTEVBU0UKK3RlbGwgbWUuICBJIGhhZCB0byBmaWd1cmUgbWluZSBvdXQgd2l0aG91dCB0aGUgbWFudWFsLCBhbmQgaXQgV0FTTidUIEZVTiEKKworRXZlbiBpZiB5b3VyIEFSQ25ldCBtb2RlbCBpc24ndCBsaXN0ZWQsIGJ1dCBoYXMgdGhlIHNhbWUganVtcGVycyBhcyBhbm90aGVyCittb2RlbCB0aGF0IGlzLCBwbGVhc2UgZS1tYWlsIG1lIHRvIHNheSBzby4KKworQ2FyZHMgTGlzdGVkIGluIHRoaXMgZmlsZSAoaW4gdGhpcyBvcmRlciwgbW9zdGx5KToKKworCU1hbnVmYWN0dXJlcglNb2RlbCAjCQkJQml0cworCS0tLS0tLS0tLS0tLQktLS0tLS0tCQkJLS0tLQorCVNNQwkJUEMxMDAJCQk4CisJU01DCQlQQzExMAkJCTgKKwlTTUMJCVBDMTIwCQkJOAorCVNNQwkJUEMxMzAJCQk4CisJU01DCQlQQzI3MEUJCQk4CisJU01DCQlQQzUwMAkJCTE2CisJU01DCQlQQzUwMExvbmdib2FyZAkJMTYKKwlTTUMJCVBDNTUwTG9uZ2JvYXJkCQkxNgorCVNNQwkJUEM2MDAJCQkxNgorCVNNQwkJUEM3MTAJCQk4CisJU01DPwkJTENTLTg4MzAoLVQpCQk4LzE2CisJUHVyZWRhdGEJUERJNTA3CQkJOAorCUNOZXQgVGVjaAlDTjEyMC1TZXJpZXMJCTgKKwlDTmV0IFRlY2gJQ04xNjAtU2VyaWVzCQkxNgorCUxhbnRlY2g/CVVNOTA2NUwgY2hpcHNldAkJOAorCUFjZXIJCTUyMTAtMDAzCQk4CisJRGF0YXBvaW50PwlMQU4tQVJDLTgJCTgKKwlUb3B3YXJlCQlUQS1BUkMvMTAJCTgKKwlUaG9tYXMtQ29ucmFkCTUwMC02MjQyLTAwOTcgUkVWIEEJOAorCVdhdGVybG9vPwkoQykxOTg1IFdhdGVybG9vIE1pY3JvLiA4CisJTm8gTmFtZQkJLS0JCQk4LzE2CisJTm8gTmFtZQkJVGFpd2FuIFIuTy5DPwkJOAorCU5vIE5hbWUJCU1vZGVsIDkwNTgJCTgKKwlUaWFyYQkJVGlhcmEgTGFuY2FyZD8JCTgKKwkKKworKiogU01DID0gU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnAuCisqKiBDTmV0IFRlY2ggPSBDTmV0IFRlY2hub2xvZ3ksIEluYy4KKworCitVbmNsYXNzaWZpZWQgU3R1ZmYKKy0tLS0tLS0tLS0tLS0tLS0tLQorICAtIFBsZWFzZSBzZW5kIGFueSBvdGhlciBpbmZvcm1hdGlvbiB5b3UgY2FuIGZpbmQuCisgIAorICAtIEFuZCBzb21lIG90aGVyIHN0dWZmIChtb3JlIGluZm8gaXMgd2VsY29tZSEpOgorICAgICBGcm9tOiByb290QHVsdHJhd29ybGQueHM0YWxsLm5sIChUaW1vIEhpbGJyaW5rKQorICAgICBUbzogYXBlbndhcnJAZm94bmV0Lm5ldCAoQXZlcnkgUGVubmFydW4pCisgICAgIERhdGU6IFdlZCwgMjYgT2N0IDE5OTQgMDI6MTA6MzIgKzAwMDAgKEdNVCkKKyAgICAgUmVwbHktVG86IHRpbW9oQHhzNGFsbC5ubAorCisgICAgIFsuLi5wYXJ0cyBkZWxldGVkLi4uXQorCisgICAgIEFib3V0IHRoZSBqdW1wZXJzOiBPbiBteSBQQzEzMCB0aGVyZSBpcyBvbmUgbW9yZSBqdW1wZXIsIGxvY2F0ZWQgbmVhciB0aGUKKyAgICAgY2FibGUtY29ubmVjdG9yIGFuZCBpdCdzIGZvciBjaGFuZ2luZyB0byBzdGFyIG9yIGJ1cyB0b3BvbG9neTsgCisgICAgIGNsb3NlZDogc3RhciAtIG9wZW46IGJ1cworICAgICBPbiB0aGUgUEM1MDAgYXJlIHNvbWUgbW9yZSBqdW1wZXItcGlucywgb25lIGJsb2NrIGxhYmVsZWQgd2l0aCBSWCxQRE4sVFhJCisgICAgIGFuZCBhbm90aGVyIHdpdGggQUxFLExBMTcsTEExOCxMQTE5IHRoZXNlIGFyZSB1bmRvY3VtZW50ZWQuLgorCisgICAgIFsuLi5tb3JlIHBhcnRzIGRlbGV0ZWQuLi5dCisKKyAgICAgLS0tIENVVCAtLS0KKworCisqKiBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgQ29ycCAoU01DKSAqKgorUEMxMDAsIFBDMTEwLCBQQzEyMCwgUEMxMzAgKDgtYml0IGNhcmRzKQorUEM1MDAsIFBDNjAwICgxNi1iaXQgY2FyZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBtYWlubHkgZnJvbSBBdmVyeSBQZW5uYXJ1biA8YXBlbndhcnJAd29ybGR2aXNpb25zLmNhPi4gIFZhbHVlcyBkZXBpY3RlZAorICAgIGFyZSBmcm9tIEF2ZXJ5J3Mgc2V0dXAuCisgIC0gc3BlY2lhbCB0aGFua3MgdG8gVGltbyBIaWxicmluayA8dGltb2hAeHM0YWxsLm5sPiBmb3Igbm90aW5nIHRoYXQgUEMxMjAsCisgICAgMTMwLCA1MDAsIGFuZCA2MDAgYWxsIGhhdmUgdGhlIHNhbWUgc3dpdGNoZXMgYXMgQXZlcnkncyBQQzEwMC4gCisgICAgUEM1MDAvNjAwIGhhdmUgc2V2ZXJhbCBleHRyYSwgdW5kb2N1bWVudGVkIHBpbnMgdGhvdWdoLiAoPykKKyAgLSBQQzExMCBzZXR0aW5ncyB3ZXJlIHZlcmlmaWVkIGJ5IFN0ZXBoZW4gQS4gV29vZCA8c2F3QGNlYmFmLmdvdj4KKyAgLSBBbHNvLCB0aGUgSlAtIGFuZCBTLW51bWJlcnMgcHJvYmFibHkgZG9uJ3QgbWF0Y2ggeW91ciBjYXJkIGV4YWN0bHkuICBUcnkKKyAgICB0byBmaW5kIGp1bXBlcnMvc3dpdGNoZXMgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2Ygc2V0dGluZ3MgLSBpdCdzCisgICAgcHJvYmFibHkgbW9yZSByZWxpYWJsZS4KKyAgCisKKyAgICAgSlA1CQkgICAgICAgW3xdICAgIDogICAgOiAgICA6ICAgIDoKKyhJUlEgU2V0dGluZykJCSAgICAgIElSUTIgIElSUTMgSVJRNCBJUlE1IElSUTcKKwkJUHV0IGV4YWN0bHkgb25lIGp1bXBlciBvbiBleGFjdGx5IG9uZSBzZXQgb2YgcGlucy4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDIgICAzICA0ICA1ICA2ICAgNyAgOCAgOSAxMAorICAgICBTMSAgICAgICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKKyhJL08gYW5kIE1lbW9yeSAgICAgICAgfCAgMSAgMSAqIDAgIDAgIDAgIDAgKiAxICAxICAwICAxICB8CisgYWRkcmVzc2VzKSAgICAgICAgICAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworICAgICAgICAgICAgICAgICAgICAgICAgICB8LS18ICAgfC0tLS0tLS0tfCAgIHwtLS0tLS0tLXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGEpICAgICAgIChiKSAgICAgICAgICAgKG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFdBUk5JTkcuICBJdCdzIHZlcnkgaW1wb3J0YW50IHdoZW4gc2V0dGluZyB0aGVzZSB3aGljaCB3YXkKKyAgICAgICAgICAgICAgICB5b3UncmUgaG9sZGluZyB0aGUgY2FyZCwgYW5kIHdoaWNoIHdheSB5b3UgdGhpbmsgaXMgJzEnIQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIElmIHlvdSBzdXNwZWN0IHRoYXQgeW91ciBzZXR0aW5ncyBhcmUgbm90IGJlaW5nIG1hZGUKKwkJY29ycmVjdGx5LCB0cnkgcmV2ZXJzaW5nIHRoZSBkaXJlY3Rpb24gb3IgaW52ZXJ0aW5nIHRoZQorCQlzd2l0Y2ggcG9zaXRpb25zLgorCisJCWE6IFRoZSBmaXJzdCBkaWdpdCBvZiB0aGUgSS9PIGFkZHJlc3MuCisJCQlTZXR0aW5nCQlWYWx1ZQorCQkJLS0tLS0tLQkJLS0tLS0KKwkJCTAwCQkwCisJCQkwMQkJMQorCQkJMTAJCTIKKwkJCTExCQkzCisKKwkJYjogVGhlIHNlY29uZCBkaWdpdCBvZiB0aGUgSS9PIGFkZHJlc3MuCisJCQlTZXR0aW5nCQlWYWx1ZQorCQkJLS0tLS0tLQkJLS0tLS0KKwkJCTAwMDAJCTAKKwkJCTAwMDEJCTEKKwkJCTAwMTAJCTIKKwkJCS4uLgkJLi4uCisJCQkxMTEwCQlFCisJCQkxMTExCQlGCisKKwkJVGhlIEkvTyBhZGRyZXNzIGlzIGluIHRoZSBmb3JtIGFiMC4gIEZvciBleGFtcGxlLCBpZgorCQlhIGlzIDB4MiBhbmQgYiBpcyAweEUsIHRoZSBhZGRyZXNzIHdpbGwgYmUgMHgyRTAuCisKKwkJRE8gTk9UIFNFVCBUSElTIExFU1MgVEhBTiAweDIwMCEhISEhCisKKworCQltOiBUaGUgZmlyc3QgZGlnaXQgb2YgdGhlIG1lbW9yeSBhZGRyZXNzLgorCQkJU2V0dGluZwkJVmFsdWUKKwkJCS0tLS0tLS0JCS0tLS0tCisJCQkwMDAwCQkwCisJCQkwMDAxCQkxCisJCQkwMDEwCQkyCisJCQkuLi4JCS4uLgorCQkJMTExMAkJRQorCQkJMTExMQkJRgorCisJCVRoZSBtZW1vcnkgYWRkcmVzcyBpcyBpbiB0aGUgZm9ybSBtMDAwMC4gIEZvciBleGFtcGxlLCBpZgorCQltIGlzIEQsIHRoZSBhZGRyZXNzIHdpbGwgYmUgMHhEMDAwMC4KKworCQlETyBOT1QgU0VUIFRISVMgVE8gQzAwMDAsIEYwMDAwLCBPUiBMRVNTIFRIQU4gQTAwMDAhCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOAorICAgICBTMiAgICAgICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cCisoU3RhdGlvbiBBZGRyZXNzKSAgICAgIHwgIDEgIDEgIDAgIDAgIDAgIDAgIDAgIDAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworCisJCQlTZXR0aW5nCQlWYWx1ZQorCQkJLS0tLS0tLQkJLS0tLS0KKwkJCTAwMDAwMDAwCTAwCisJCQkxMDAwMDAwMAkwMQorCQkJMDEwMDAwMDAJMDIKKwkJCS4uLgorCQkJMDExMTExMTEJRkUKKwkJCTExMTExMTExCUZGCisKKwkJTm90ZSB0aGF0IHRoaXMgaXMgYmluYXJ5IHdpdGggdGhlIGRpZ2l0cyByZXZlcnNlZCEKKworCQlETyBOT1QgU0VUIFRISVMgVE8gMCBPUiAyNTUgKDB4RkYpIQorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3JwIChTTUMpICoqCitQQzEzMEUvUEMyNzBFICg4LWJpdCBjYXJkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+CisKKworU1RBTkRBUkQgTUlDUk9TWVNURU1TIENPUlBPUkFUSU9OIChTTUMpIEFSQ05FVChSKS1QQzEzMEUvUEMyNzBFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXNjcmlwdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgordXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgZm9sbG93aW5nIE9yaWdpbmFsIFNNQyBNYW51YWwgCisKKyAgICAgICAgICAgICAiQ29uZmlndXJhdGlvbiBHdWlkZSBmb3IKKyAgICAgICAgICAgICBBUkNORVQoUiktUEMxMzBFL1BDMjcwCisgICAgICAgICAgICBOZXR3b3JrIENvbnRyb2xsZXIgQm9hcmRzCisgICAgICAgICAgICAgICAgUHViLiAjIDkwMC4wNDRBCisgICAgICAgICAgICAgICAgICAgSnVuZSwgMTk4OSIKKworQVJDTkVUIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIERhdGFwb2ludCBDb3Jwb3JhdGlvbgorU01DIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3Jwb3JhdGlvbiAgCisKK1RoZSBQQzEzMEUgaXMgYW4gZW5oYW5jZWQgdmVyc2lvbiBvZiB0aGUgUEMxMzAgYm9hcmQsIGlzIGVxdWlwcGVkIHdpdGggYSAKK3N0YW5kYXJkIEJOQyBmZW1hbGUgY29ubmVjdG9yIGZvciBjb25uZWN0aW9uIHRvIFJHLTYyL1UgY29heCBjYWJsZS4KK1NpbmNlIHRoaXMgYm9hcmQgaXMgZGVzaWduZWQgYm90aCBmb3IgcG9pbnQtdG8tcG9pbnQgY29ubmVjdGlvbiBpbiBzdGFyCituZXR3b3JrcyBhbmQgZm9yIGNvbm5lY3Rpb24gdG8gYnVzIG5ldHdvcmtzLCBpdCBpcyBkb3dud2FyZGx5IGNvbXBhdGlibGUgCit3aXRoIGFsbCB0aGUgb3RoZXIgc3RhbmRhcmQgYm9hcmRzIGRlc2lnbmVkIGZvciBjb2F4IG5ldHdvcmtzICh0aGF0IGlzLAordGhlIFBDMTIwLCBQQzExMCBhbmQgUEMxMDAgc3RhciB0b3BvbG9neSBib2FyZHMgYW5kIHRoZSBQQzIyMCwgUEMyMTAgYW5kIAorUEMyMDAgYnVzIHRvcG9sb2d5IGJvYXJkcykuCisKK1RoZSBQQzI3MEUgaXMgYW4gZW5oYW5jZWQgdmVyc2lvbiBvZiB0aGUgUEMyNjAgYm9hcmQsIGlzIGVxdWlwcGVkIHdpdGggdHdvIAorbW9kdWxhciBSSjExLXR5cGUgamFja3MgZm9yIGNvbm5lY3Rpb24gdG8gdHdpc3RlZCBwYWlyIHdpcmluZy4KK0l0IGNhbiBiZSB1c2VkIGluIGEgc3RhciBvciBhIGRhaXN5LWNoYWluZWQgbmV0d29yay4KKworCisgICAgICAgICA4IDcgNiA1IDQgMyAyIDEKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICB8ICAgfCAgICAgICBTMSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICB8X19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICBPZmZzfEJhc2UgfEkvTyBBZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICBSQU0gQWRkciB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICBfX18gIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSMyB8X19ffAorICAgfCAgICAgICAgfCAgIFwvICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1I0IHxfX198CisgICB8ICAgICAgICB8ICBQUk9NICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTiB8ICAgfCA4CisgICB8ICAgICAgICB8IFNPQ0tFVCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gfCAgIHwgNworICAgfCAgICAgICAgfF9fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIHwgICB8IDYKKyAgIHwgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgZSB8ICAgfCA1CisgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIEEgfCBTIHwgNAorICAgfCAgICAgICB8b298IEVYVDIgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBkIHwgMiB8IDMKKyAgIHwgICAgICAgfG9vfCBFWFQxICB8ICAgICAgIFNNQyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgZCB8ICAgfCAyCisgICB8ICAgICAgIHxvb3wgUk9NICAgfCAgICAgIDkwQzYzICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHIgfF9fX3wgMQorICAgfCAgICAgICB8b298IElSUTcgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxvfCAgX19fX198CisgICB8ICAgICAgIHxvb3wgSVJRNSAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfG98IHwgSjEgIHwKKyAgIHwgICAgICAgfG9vfCBJUlE0ICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFNUQVIgfF9fX19ffAorICAgfCAgICAgICB8b298IElSUTMgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IEoyICB8CisgICB8ICAgICAgIHxvb3wgSVJRMiAgfF9fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgIHxfX19fX3wKKyAgIHxfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCitTTUMgOTBDNjMJQVJDTkVUIENvbnRyb2xsZXIgLyBUcmFuc2NlaXZlciAvTG9naWMKK1MxCTEtMzoJSS9PIEJhc2UgQWRkcmVzcyBTZWxlY3QKKwk0LTY6CU1lbW9yeSBCYXNlIEFkZHJlc3MgU2VsZWN0CisJNy04OglSQU0gT2Zmc2V0IFNlbGVjdAorUzIJMS04OglOb2RlIElEIFNlbGVjdAorRVhUCQlFeHRlbmRlZCBUaW1lb3V0IFNlbGVjdAorUk9NCQlST00gRW5hYmxlIFNlbGVjdAorU1RBUgkJU2VsZWN0ZWQgLSBTdGFyIFRvcG9sb2d5CShQQzEzMEUgb25seSkKKwkJRGVzZWxlY3RlZCAtIEJ1cyBUb3BvbG9neQkoUEMxMzBFIG9ubHkpCitDUjMvQ1I0CQlEaWFnbm9zdGljIExFRHMKK0oxCQlCTkMgUkc2Mi9VIENvbm5lY3RvcgkJKFBDMTMwRSBvbmx5KQorSjEJCTYtcG9zaXRpb24gVGVsZXBob25lIEphY2sJKFBDMjcwRSBvbmx5KQorSjIJCTYtcG9zaXRpb24gVGVsZXBob25lIEphY2sJKFBDMjcwRSBvbmx5KQorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmL09wZW4gbWVhbnMgIjEiLCBPbi9DbG9zZWQgbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFMyIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4KK1RoZXNlIHN3aXRjaGVzIHdvcmsgaW4gYSB3YXkgc2ltaWxhciB0byB0aGUgUEMxMDAtc2VyaWVzIGNhcmRzOyBzZWUgdGhhdAorZW50cnkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGdyb3VwIFMxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKworICAgU3dpdGNoIHwgSGV4IEkvTworICAgMSAyIDMgIHwgQWRkcmVzcworICAgLS0tLS0tLXwtLS0tLS0tLQorICAgMCAwIDAgIHwgIDI2MAorICAgMCAwIDEgIHwgIDI5MAorICAgMCAxIDAgIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgMSAgfCAgMkYwCisgICAxIDAgMCAgfCAgMzAwCisgICAxIDAgMSAgfCAgMzUwCisgICAxIDEgMCAgfCAgMzgwCisgICAxIDEgMSAgfCAgM0UwCisKKworU2V0dGluZyB0aGUgQmFzZSBNZW1vcnkgKFJBTSkgYnVmZmVyIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIHJlcXVpcmVzIDJLIG9mIGEgMTZLIGJsb2NrIG9mIFJBTS4gVGhlIGJhc2Ugb2YgdGhpcworMTZLIGJsb2NrIGNhbiBiZSBsb2NhdGVkIGluIGFueSBvZiBlaWdodCBwb3NpdGlvbnMuCitTd2l0Y2hlcyA0LTYgb2Ygc3dpdGNoIGdyb3VwIFMxIHNlbGVjdCB0aGUgQmFzZSBvZiB0aGUgMTZLIGJsb2NrLgorV2l0aGluIHRoYXQgMTZLIGFkZHJlc3Mgc3BhY2UsIHRoZSBidWZmZXIgbWF5IGJlIGFzc2lnbmVkIGFueSBvbmUgb2YgZm91ciAKK3Bvc2l0aW9ucywgZGV0ZXJtaW5lZCBieSB0aGUgb2Zmc2V0LCBzd2l0Y2hlcyA3IGFuZCA4IG9mIGdyb3VwIFMxLgorCisgICBTd2l0Y2ggICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgIDQgNSA2ICA3IDggfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICAwIDAgMCAgMCAwIHwgIEMwMDAwICB8ICBDMjAwMAorICAgMCAwIDAgIDAgMSB8ICBDMDgwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDAgfCAgQzEwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMSAxIHwgIEMxODAwICB8ICBDMjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAwIDEgIDAgMCB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAwIDEgfCAgQzQ4MDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAwIHwgIEM1MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDEgMSB8ICBDNTgwMCAgfCAgQzYwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwICAwIDAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICAwIDEgMCAgMCAxIHwgIENDODAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMCB8ICBDRDAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAxIDEgfCAgQ0Q4MDAgIHwgIENFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMSAgMCAwIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgMSAgMCAxIHwgIEQwODAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMCB8ICBEMTAwMCAgfCAgRDIwMDAKKyAgIDAgMSAxICAxIDEgfCAgRDE4MDAgIHwgIEQyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMCAgMCAwIHwgIEQ0MDAwICB8ICBENjAwMAorICAgMSAwIDAgIDAgMSB8ICBENDgwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDAgfCAgRDUwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMSAxIHwgIEQ1ODAwICB8ICBENjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgIDAgMCB8ICBEODAwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAwIDEgfCAgRDg4MDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAwIHwgIEQ5MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDEgMSB8ICBEOTgwMCAgfCAgREEwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAwICAwIDAgfCAgREMwMDAgIHwgIERFMDAwCisgICAxIDEgMCAgMCAxIHwgIERDODAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMCB8ICBERDAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAxIDEgfCAgREQ4MDAgIHwgIERFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDEgMSAgMCAwIHwgIEUwMDAwICB8ICBFMjAwMAorICAgMSAxIDEgIDAgMSB8ICBFMDgwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDAgfCAgRTEwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMSAxIHwgIEUxODAwICB8ICBFMjAwMAorICAKKyopIFRvIGVuYWJsZSB0aGUgOEsgQm9vdCBQUk9NIGluc3RhbGwgdGhlIGp1bXBlciBST00uCisgICBUaGUgZGVmYXVsdCBpcyBqdW1wZXIgUk9NIG5vdCBpbnN0YWxsZWQuCisKKworU2V0dGluZyB0aGUgVGltZW91dHMgYW5kIEludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUganVtcGVycyBsYWJlbGVkIEVYVDEgYW5kIEVYVDIgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IAorcGFyYW1ldGVycy4gVGhlc2UgdHdvIGp1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgb3Blbi4KKworVG8gc2VsZWN0IGEgaGFyZHdhcmUgaW50ZXJydXB0IGxldmVsIHNldCBvbmUgKG9ubHkgb25lISkgb2YgdGhlIGp1bXBlcnMKK0lSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTcuIFRoZSBNYW51ZmFjdHVyZXIncyBkZWZhdWx0IGlzIElSUTIuCisgCisKK0NvbmZpZ3VyaW5nIHRoZSBQQzEzMEUgZm9yIFN0YXIgb3IgQnVzIFRvcG9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc2luZ2xlIGp1bXBlciBsYWJlbGVkIFNUQVIgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIFBDMTMwRSBib2FyZCBmb3IgCitzdGFyIG9yIGJ1cyB0b3BvbG9neS4KK1doZW4gdGhlIGp1bXBlciBpcyBpbnN0YWxsZWQsIHRoZSBib2FyZCBtYXkgYmUgdXNlZCBpbiBhIHN0YXIgbmV0d29yaywgd2hlbiAKK2l0IGlzIHJlbW92ZWQsIHRoZSBib2FyZCBjYW4gYmUgdXNlZCBpbiBhIGJ1cyB0b3BvbG9neS4KKworCitEaWFnbm9zdGljIExFRHMKKy0tLS0tLS0tLS0tLS0tLQorCitUd28gZGlhZ25vc3RpYyBMRURzIGFyZSB2aXNpYmxlIG9uIHRoZSByZWFyIGJyYWNrZXQgb2YgdGhlIGJvYXJkLgorVGhlIGdyZWVuIExFRCBtb25pdG9ycyB0aGUgbmV0d29yayBhY3Rpdml0eTogdGhlIHJlZCBvbmUgc2hvd3MgdGhlCitib2FyZCBhY3Rpdml0eToKKworIEdyZWVuICB8IFN0YXR1cyAgICAgICAgICAgICAgIFJlZCAgICAgIHwgU3RhdHVzCisgLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgb24gICAgfCBub3JtYWwgYWN0aXZpdHkgICAgICBmbGFzaC9vbiB8IGRhdGEgdHJhbnNmZXIKKyAgYmxpbmsgfCByZWNvbmZpZ3VyYXRpb24gICAgICBvZmYgICAgICB8IG5vIGRhdGEgdHJhbnNmZXI7CisgIG9mZiAgIHwgZGVmZWN0aXZlIGJvYXJkIG9yICAgICAgICAgICAgfCBpbmNvcnJlY3QgbWVtb3J5IG9yCisgICAgICAgIHwgbm9kZSBJRCBpcyB6ZXJvICAgICAgICAgICAgICAgfCBJL08gYWRkcmVzcworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3JwIChTTUMpICoqCitQQzUwMC9QQzU1MCBMb25nYm9hcmQgKDE2LWJpdCBjYXJkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgorCisKK1NUQU5EQVJEIE1JQ1JPU1lTVEVNUyBDT1JQT1JBVElPTiAoU01DKSBBUkNORVQtUEM1MDAvUEM1NTAgTG9uZyBCb2FyZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGU6IFRoZXJlIGlzIGFub3RoZXIgVmVyc2lvbiBvZiB0aGUgUEM1MDAgY2FsbGVkIFNob3J0IFZlcnNpb24sIHdoaWNoIAorICAgICAgaXMgZGlmZmVyZW50IGluIGhhcmQtIGFuZCBzb2Z0d2FyZSEgVGhlIG1vc3QgaW1wb3J0YW50IGRpZmZlcmVuY2VzCisgICAgICBhcmU6CisgICAgICAtIFRoZSBsb25nIGJvYXJkIGhhcyBubyBTaGFyZWQgbWVtb3J5LgorICAgICAgLSBPbiB0aGUgbG9uZyBib2FyZCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBpbnRlcnJ1cHQgaXMgZG9uZSBieSBiaW5hcnkKKyAgICAgICAgY29kZWQgc3dpdGNoLCBvbiB0aGUgc2hvcnQgYm9hcmQgZGlyZWN0bHkgYnkganVtcGVyLgorICAgICAgICAKK1tBdmVyeSdzIG5vdGU6IHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byB0aGF0OiB0aGUgbG9uZyBib2FyZCBIQVMgTk8gU0hBUkVECitNRU1PUlkuICBUaGlzIG1lYW5zIHRoZSBjdXJyZW50IExpbnV4LUFSQ25ldCBkcml2ZXIgY2FuJ3QgdXNlIHRoZXNlIGNhcmRzLiAKK0kgaGF2ZSBvYnRhaW5lZCBhIFBDNTAwTG9uZ2JvYXJkIGFuZCB3aWxsIGJlIGRvaW5nIHNvbWUgZXhwZXJpbWVudHMgb24gaXQgaW4KK3RoZSBmdXR1cmUsIGJ1dCBkb24ndCBob2xkIHlvdXIgYnJlYXRoLiAgVGhhbmtzIGFnYWluIHRvIEp1ZXJnZW4gU2VpZmVydCBmb3IKK2hpcyBhZHZpY2UgYWJvdXQgdGhpcyFdCisKK1RoaXMgZGVzY3JpcHRpb24gaGFzIGJlZW4gd3JpdHRlbiBieSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KK3VzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGZvbGxvd2luZyBPcmlnaW5hbCBTTUMgTWFudWFsIAorCisgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24gR3VpZGUgZm9yCisgICAgICAgICAgICAgU01DIEFSQ05FVC1QQzUwMC9QQzU1MAorICAgICAgICAgU2VyaWVzIE5ldHdvcmsgQ29udHJvbGxlciBCb2FyZHMKKyAgICAgICAgICAgICBQdWIuICMgOTAwLjAzMyBSZXYuIEEKKyAgICAgICAgICAgICAgICBOb3ZlbWJlciwgMTk4OSIKKworQVJDTkVUIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIERhdGFwb2ludCBDb3Jwb3JhdGlvbgorU01DIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3Jwb3JhdGlvbiAgCisKK1RoZSBQQzUwMCBpcyBlcXVpcHBlZCB3aXRoIGEgc3RhbmRhcmQgQk5DIGZlbWFsZSBjb25uZWN0b3IgZm9yIGNvbm5lY3Rpb24KK3RvIFJHLTYyL1UgY29heCBjYWJsZS4KK1RoZSBib2FyZCBpcyBkZXNpZ25lZCBib3RoIGZvciBwb2ludC10by1wb2ludCBjb25uZWN0aW9uIGluIHN0YXIgbmV0d29ya3MKK2FuZCBmb3IgY29ubmVjdGlvbiB0byBidXMgbmV0d29ya3MuCisKK1RoZSBQQzU1MCBpcyBlcXVpcHBlZCB3aXRoIHR3byBtb2R1bGFyIFJKMTEtdHlwZSBqYWNrcyBmb3IgY29ubmVjdGlvbgordG8gdHdpc3RlZCBwYWlyIHdpcmluZy4KK0l0IGNhbiBiZSB1c2VkIGluIGEgc3RhciBvciBhIGRhaXN5LWNoYWluZWQgKEJVUykgbmV0d29yay4KKworICAgICAgIDEgCisgICAgICAgMCA5IDggNyA2IDUgNCAzIDIgMSAgICAgNiA1IDQgMyAyIDEKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgPCB8ICAgICAgICAgU1cxICAgICAgICAgfCB8ICAgICBTVzIgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgPiB8X19fX19fX19fX19fX19fX19fX19ffCB8X19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgPCAgIElSUSAgICB8SS9PIEFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSNCB8X19ffAorICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSMyB8X19ffAorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTiB8ICAgfCA4CisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIHwgICB8IDcKKyAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgfCBTIHwgNgorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSB8IFcgfCA1CisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHwgMyB8IDQKKyAgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgfCAgIHwgMworICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCB8ICAgfCAyCisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIHxfX198IDEKKyAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfCAgICBfX19fX3wKKyAgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfCAgIHwgSjEgIHwKKyAgID4gIDMgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpQNiAgIHxfX19fX3wKKyAgIDwgfG98b3wgSlAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSjIgIHwKKyAgID4gfG98b3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX3wKKyAgIDwgIDQgMl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wKKyAgID4gICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIDxfX19ffCAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCitTVzEJMS02OglJL08gQmFzZSBBZGRyZXNzIFNlbGVjdAorCTctMTA6CUludGVycnVwdCBTZWxlY3QKK1NXMgkxLTY6CVJlc2VydmVkIGZvciBGdXR1cmUgVXNlCitTVzMJMS04OglOb2RlIElEIFNlbGVjdAorSlAyCTEtNDoJRXh0ZW5kZWQgVGltZW91dCBTZWxlY3QKK0pQNgkJU2VsZWN0ZWQgLSBTdGFyIFRvcG9sb2d5CShQQzUwMCBvbmx5KQorCQlEZXNlbGVjdGVkIC0gQnVzIFRvcG9sb2d5CShQQzUwMCBvbmx5KQorQ1IzCUdyZWVuCU1vbml0b3JzIE5ldHdvcmsgQWN0aXZpdHkKK0NSNAlSZWQJTW9uaXRvcnMgQm9hcmQgQWN0aXZpdHkKK0oxCQlCTkMgUkc2Mi9VIENvbm5lY3RvcgkJKFBDNTAwIG9ubHkpCitKMQkJNi1wb3NpdGlvbiBUZWxlcGhvbmUgSmFjawkoUEM1NTAgb25seSkKK0oyCQk2LXBvc2l0aW9uIFRlbGVwaG9uZSBKYWNrCShQQzU1MCBvbmx5KQorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmL09wZW4gbWVhbnMgIjEiLCBPbi9DbG9zZWQgbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFNXMyBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZQorYXR0YWNoZWQgdG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3QgYmUgCitkaWZmZXJlbnQgZnJvbSAwLgorU3dpdGNoIDEgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICAgU3dpdGNoIHwgVmFsdWUKKyAgICAtLS0tLS0tfC0tLS0tLS0KKyAgICAgIDEgICAgfCAgIDEKKyAgICAgIDIgICAgfCAgIDIKKyAgICAgIDMgICAgfCAgIDQKKyAgICAgIDQgICAgfCAgIDgKKyAgICAgIDUgICAgfCAgMTYKKyAgICAgIDYgICAgfCAgMzIKKyAgICAgIDcgICAgfCAgNjQKKyAgICAgIDggICAgfCAxMjgKKworU29tZSBFeGFtcGxlczoKKworICAgIFN3aXRjaCAgICAgICAgIHwgSGV4ICAgICB8IERlY2ltYWwgCisgICA4IDcgNiA1IDQgMyAyIDEgfCBOb2RlIElEIHwgTm9kZSBJRAorICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tCisgICAwIDAgMCAwIDAgMCAwIDAgfCAgICBub3QgYWxsb3dlZAorICAgMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgCisgICAwIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMgorICAgMCAwIDAgMCAwIDAgMSAxIHwgICAgMyAgICB8ICAgIDMKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgMSAwIDEgMCAxIHwgICA1NSAgICB8ICAgODUKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgCisgICAxIDEgMSAxIDEgMSAwIDEgfCAgIEZEICAgIHwgIDI1MworICAgMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQKKyAgIDEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1IAorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IHNpeCBzd2l0Y2hlcyBpbiBzd2l0Y2ggZ3JvdXAgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIDMyIHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKyAgIFN3aXRjaCAgICAgICB8IEhleCBJL08KKyAgIDYgNSAgNCAzIDIgMSB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIDAgMSAgMCAwIDAgMCB8ICAyMDAKKyAgIDAgMSAgMCAwIDAgMSB8ICAyMTAKKyAgIDAgMSAgMCAwIDEgMCB8ICAyMjAKKyAgIDAgMSAgMCAwIDEgMSB8ICAyMzAKKyAgIDAgMSAgMCAxIDAgMCB8ICAyNDAKKyAgIDAgMSAgMCAxIDAgMSB8ICAyNTAKKyAgIDAgMSAgMCAxIDEgMCB8ICAyNjAKKyAgIDAgMSAgMCAxIDEgMSB8ICAyNzAKKyAgIDAgMSAgMSAwIDAgMCB8ICAyODAKKyAgIDAgMSAgMSAwIDAgMSB8ICAyOTAKKyAgIDAgMSAgMSAwIDEgMCB8ICAyQTAKKyAgIDAgMSAgMSAwIDEgMSB8ICAyQjAKKyAgIDAgMSAgMSAxIDAgMCB8ICAyQzAKKyAgIDAgMSAgMSAxIDAgMSB8ICAyRDAKKyAgIDAgMSAgMSAxIDEgMCB8ICAyRTAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgIDEgMSAxIDEgfCAgMkYwCisgICAxIDEgIDAgMCAwIDAgfCAgMzAwCisgICAxIDEgIDAgMCAwIDEgfCAgMzEwCisgICAxIDEgIDAgMCAxIDAgfCAgMzIwCisgICAxIDEgIDAgMCAxIDEgfCAgMzMwCisgICAxIDEgIDAgMSAwIDAgfCAgMzQwCisgICAxIDEgIDAgMSAwIDEgfCAgMzUwCisgICAxIDEgIDAgMSAxIDAgfCAgMzYwCisgICAxIDEgIDAgMSAxIDEgfCAgMzcwCisgICAxIDEgIDEgMCAwIDAgfCAgMzgwCisgICAxIDEgIDEgMCAwIDEgfCAgMzkwCisgICAxIDEgIDEgMCAxIDAgfCAgM0EwCisgICAxIDEgIDEgMCAxIDEgfCAgM0IwCisgICAxIDEgIDEgMSAwIDAgfCAgM0MwCisgICAxIDEgIDEgMSAwIDEgfCAgM0QwCisgICAxIDEgIDEgMSAxIDAgfCAgM0UwCisgICAxIDEgIDEgMSAxIDEgfCAgM0YwCisKKworU2V0dGluZyB0aGUgSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3dpdGNoZXMgc2V2ZW4gdGhyb3VnaCB0ZW4gb2Ygc3dpdGNoIGdyb3VwIFNXMSBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIAoraW50ZXJydXB0IGxldmVsLiBUaGUgaW50ZXJydXB0IGxldmVsIGlzIGJpbmFyeSBjb2RlZCwgc28gc2VsZWN0aW9ucyAKK2Zyb20gMCB0byAxNSB3b3VsZCBiZSBwb3NzaWJsZSwgYnV0IG9ubHkgdGhlIGZvbGxvd2luZyBlaWdodCB2YWx1ZXMgd2lsbAorYmUgc3VwcG9ydGVkOiAzLCA0LCA1LCA3LCA5LCAxMCwgMTEsIDEyLgorCisgICBTd2l0Y2ggICB8IElSUQorICAgMTAgOSA4IDcgfCAKKyAgIC0tLS0tLS0tLXwtLS0tLS0tLSAKKyAgICAwIDAgMSAxIHwgIDMKKyAgICAwIDEgMCAwIHwgIDQKKyAgICAwIDEgMCAxIHwgIDUKKyAgICAwIDEgMSAxIHwgIDcKKyAgICAxIDAgMCAxIHwgIDkgKD0yKSAoZGVmYXVsdCkKKyAgICAxIDAgMSAwIHwgMTAKKyAgICAxIDAgMSAxIHwgMTEKKyAgICAxIDEgMCAwIHwgMTIKKworCitTZXR0aW5nIHRoZSBUaW1lb3V0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0d28ganVtcGVycyBKUDIgKDEtNCkgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IHBhcmFtZXRlcnMuIAorVGhlc2UgdHdvIGp1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgb3Blbi4KK1JlZmVyIHRvIHRoZSBDT005MDI2IERhdGEgU2hlZXQgZm9yIGFsdGVybmF0ZSBjb25maWd1cmF0aW9ucy4KKworCitDb25maWd1cmluZyB0aGUgUEM1MDAgZm9yIFN0YXIgb3IgQnVzIFRvcG9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzaW5nbGUganVtcGVyIGxhYmVsZWQgSlA2IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBQQzUwMCBib2FyZCBmb3IgCitzdGFyIG9yIGJ1cyB0b3BvbG9neS4KK1doZW4gdGhlIGp1bXBlciBpcyBpbnN0YWxsZWQsIHRoZSBib2FyZCBtYXkgYmUgdXNlZCBpbiBhIHN0YXIgbmV0d29yaywgd2hlbiAKK2l0IGlzIHJlbW92ZWQsIHRoZSBib2FyZCBjYW4gYmUgdXNlZCBpbiBhIGJ1cyB0b3BvbG9neS4KKworCitEaWFnbm9zdGljIExFRHMKKy0tLS0tLS0tLS0tLS0tLQorCitUd28gZGlhZ25vc3RpYyBMRURzIGFyZSB2aXNpYmxlIG9uIHRoZSByZWFyIGJyYWNrZXQgb2YgdGhlIGJvYXJkLgorVGhlIGdyZWVuIExFRCBtb25pdG9ycyB0aGUgbmV0d29yayBhY3Rpdml0eTogdGhlIHJlZCBvbmUgc2hvd3MgdGhlCitib2FyZCBhY3Rpdml0eToKKworIEdyZWVuICB8IFN0YXR1cyAgICAgICAgICAgICAgIFJlZCAgICAgIHwgU3RhdHVzCisgLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgb24gICAgfCBub3JtYWwgYWN0aXZpdHkgICAgICBmbGFzaC9vbiB8IGRhdGEgdHJhbnNmZXIKKyAgYmxpbmsgfCByZWNvbmZpZ3VyYXRpb24gICAgICBvZmYgICAgICB8IG5vIGRhdGEgdHJhbnNmZXI7CisgIG9mZiAgIHwgZGVmZWN0aXZlIGJvYXJkIG9yICAgICAgICAgICAgfCBpbmNvcnJlY3QgbWVtb3J5IG9yCisgICAgICAgIHwgbm9kZSBJRCBpcyB6ZXJvICAgICAgICAgICAgICAgfCBJL08gYWRkcmVzcworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFNNQyAqKgorUEM3MTAgKDgtYml0IGNhcmQpCistLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIEouUy4gdmFuIE9vc3RlbiA8anZvb3N0ZW5AY29tcGlsZXIudGRjbmV0Lm5sPgorICAKK05vdGU6IHRoaXMgZGF0YSBpcyBnYXRoZXJlZCBieSBleHBlcmltZW50aW5nIGFuZCBsb29raW5nIGF0IGluZm8gb2Ygb3RoZXIKK2NhcmRzLiBIb3dldmVyLCBJJ20gc3VyZSBJIGdvdCA5OSUgb2YgdGhlIHNldHRpbmdzIHJpZ2h0LgorCitUaGUgU01DNzEwIGNhcmQgcmVzZW1ibGVzIHRoZSBQQzI3MCBjYXJkLCBidXQgaXMgbXVjaCBtb3JlIGJhc2ljIChpLmUuIG5vCitMRURzLCBSSjExIGphY2tzLCBldGMuKSBhbmQgOCBiaXQuIEhlcmUncyBhIGxpdHRsZSBkcmF3aW5nOgorCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgCisgICB8ICstLS0tLS0tLS0rICArLS0tLS0tLS0tKyAgICAgICAgICAgICAgfF9fX18KKyAgIHwgfCAgIFMyICAgIHwgIHwgICBTMSAgICB8ICAgICAgICAgICAgICB8CisgICB8ICstLS0tLS0tLS0rICArLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICs9PT0rICAgIF9fICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICB8IFIgfCAgIHwgIHwgWC10YWwgICAgICAgICAgICAgICAgICMjI19fXworICAgfCAgfCBPIHwgICB8X198ICAgICAgICAgICAgICAgICAgICAgICMjIyNfXyd8CisgICB8ICB8IE0gfCAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICMjIworICAgfCAgKz09PSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgLi4gSlAxICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgfAorICAgfCAgIC4uICAgICAgIHwgYmlnIGNoaXAgfCAgICAgICAgICAgICAgIHwgICAKKyAgIHwgICAuLiAgICAgICB8ICA5MEM2MyAgIHwgICAgICAgICAgICAgICB8CisgICB8ICAgLi4gICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICAgfCAgIC4uICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwKKyAgICAtLS0tLS0tICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICAgICAgfHx8fHx8fHx8fHx8fHx8fHx8fHx8CisKK1RoZSByb3cgb2YganVtcGVycyBhdCBKUDEgYWN0dWFsbHkgY29uc2lzdHMgb2YgOCBqdW1wZXJzLCAoc29tZXRpbWVzCitsYWJlbGxlZCkgdGhlIHNhbWUgYXMgb24gdGhlIFBDMjcwLCBmcm9tIHRvcCB0byBib3R0b206IEVYVDIsIEVYVDEsIFJPTSwKK0lSUTcsIElSUTUsIElSUTQsIElSUTMsIElSUTIgKGdlZSwgd29uZGVyIHdoYXQgdGhleSB3b3VsZCBkbz8gOi0pICkKKworUzEgYW5kIFMyIHBlcmZvcm0gdGhlIHNhbWUgZnVuY3Rpb24gYXMgb24gdGhlIFBDMjcwLCBvbmx5IHRoZWlyIG51bWJlcnMKK2FyZSBzd2FwcGVkIChTMSBpcyB0aGUgbm9kZWFkZHJlc3MsIFMyIHNldHMgSU8tIGFuZCBSQU0tYWRkcmVzcykuCisKK0kga25vdyBpdCB3b3JrcyB3aGVuIGNvbm5lY3RlZCB0byBhIFBDMTEwIHR5cGUgQVJDbmV0IGJvYXJkLgorCisJCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBQb3NzaWJseSBTTUMgKioKK0xDUy04ODMwKC1UKSAoOCBhbmQgMTYtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBNYXRoaWFzIEthdHplciA8bWthdHplckBIUlouVW5pLUJpZWxlZmVsZC5ERT4KKyAgLSBNYXJlayBNaWNoYWxraWV3aWN6IDxtYXJla21AaTE3bGludXhiLmlzdHMucHdyLndyb2MucGw+IHNheXMgdGhlCisgICAgTENTLTg4MzAgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gTENTLTg4MzAtVC4gIFRoZXNlIGFyZSA4IGJpdCwgQlVTCisgICAgb25seSAodGhlIEpQMCBqdW1wZXIgaXMgaGFyZHdpcmVkKSwgYW5kIEJOQyBvbmx5LgorCQorVGhpcyBpcyBhIExDUy04ODMwLVQgbWFkZSBieSBTTUMsIEkgdGhpbmsgKCdTTUMnIG9ubHkgYXBwZWFycyBvbiBvbmUgUExDQywKK25vd2hlcmUgZWxzZSwgbm90IGV2ZW4gb24gdGhlIGZldyBYZXJveGVkIHNoZWV0cyBmcm9tIHRoZSBtYW51YWwpLgorCitTTUMgQVJDbmV0IEJvYXJkIFR5cGUgTENTLTg4MzAtVAorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgSlAzIDg4ICA4IEpQMiAgICAgICAgIHwKKyAgfCAgICAgICAjIyMjIyAgICAgIHwgXCAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAjIyMjIyAgICBFVDEgRVQyICAgICAgICAgICMjI3wKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICMjI3wKKyAgfCAgVTMgICBTVyAxICAgICAgICAgICAgICAgICAgSlAwICMjI3wgIFBob25lIEphY2tzCisgIHwgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyN8CisgIHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgfCAgfCAgIFNXMiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgfCAgfCAgIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgIC0tICAgIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICMjIyMgIEJOQyBDb25uZWN0b3IgCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMKKyAgfCAgIDg4ODg4OCBKUDEgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgIDIzNDU2NyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLQorICAgICB8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHwKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworU1cxOiBESVAtU3dpdGNoZXMgZm9yIFN0YXRpb24gQWRkcmVzcworU1cyOiBESVAtU3dpdGNoZXMgZm9yIE1lbW9yeSBCYXNlIGFuZCBJL08gQmFzZSBhZGRyZXNzZXMKKworSlAwOiBJZiBjbG9zZWQsIGludGVybmFsIHRlcm1pbmF0aW9uIG9uIChkZWZhdWx0IG9wZW4pCitKUDE6IElSUSBKdW1wZXJzCitKUDI6IEJvb3QtUk9NIGVuYWJsZWQgaWYgY2xvc2VkCitKUDM6IEp1bXBlcnMgZm9yIHJlc3BvbnNlIHRpbWVvdXQKKyAKK1UzOiBCb290LVJPTSBTb2NrZXQgICAgICAgICAgCisKKworRVQxIEVUMiAgICAgUmVzcG9uc2UgVGltZSAgICAgSWRsZSBUaW1lICAgIFJlY29uZmlndXJhdGlvbiBUaW1lCisKKyAgICAgICAgICAgICAgIDc4ICAgICAgICAgICAgICAgIDg2ICAgICAgICAgICAgICAgODQwCisgWCAgICAgICAgICAgIDI4NSAgICAgICAgICAgICAgIDMxNiAgICAgICAgICAgICAgMTY4MAorICAgICBYICAgICAgICA1NjMgICAgICAgICAgICAgICA2MjQgICAgICAgICAgICAgIDE2ODAKKyBYICAgWCAgICAgICAxMTMwICAgICAgICAgICAgICAxMjM3ICAgICAgICAgICAgICAxNjgwCisKKyhYIG1lYW5zIGNsb3NlZCBqdW1wZXIpCisKKyhESVAtU3dpdGNoIGRvd253YXJkcyBtZWFucyAiMCIpCisKK1RoZSBzdGF0aW9uIGFkZHJlc3MgaXMgYmluYXJ5LWNvZGVkIHdpdGggU1cxLgorCitUaGUgSS9PIGJhc2UgYWRkcmVzcyBpcyBjb2RlZCB3aXRoIERJUC1Td2l0Y2hlcyA2LDcgYW5kIDggb2YgU1cyOgorCitTd2l0Y2hlcyAgICAgICAgQmFzZQorNjc4ICAgICAgICAgICAgIEFkZHJlc3MKKzAwMAkJMjYwLTI2ZgorMTAwCQkyOTAtMjlmCiswMTAJCTJlMC0yZWYKKzExMAkJMmYwLTJmZgorMDAxCQkzMDAtMzBmCisxMDEJCTM1MC0zNWYKKzAxMQkJMzgwLTM4ZgorMTExIAkJM2UwLTNlZgorCisKK0RJUCBTd2l0Y2hlcyAxLTUgb2YgU1cyIGVuY29kZSB0aGUgUkFNIGFuZCBST00gQWRkcmVzcyBSYW5nZToKKworU3dpdGNoZXMgICAgICAgIFJBTSAgICAgICAgICAgUk9NCisxMjM0NSAgICAgICAgICAgQWRkcmVzcyBSYW5nZSAgQWRkcmVzcyBSYW5nZQorMDAwMDAJCUM6MDAwMC1DOjA3ZmYJQzoyMDAwLUM6M2ZmZgorMTAwMDAJCUM6MDgwMC1DOjBmZmYKKzAxMDAwCQlDOjEwMDAtQzoxN2ZmCisxMTAwMAkJQzoxODAwLUM6MWZmZgorMDAxMDAJCUM6NDAwMC1DOjQ3ZmYJQzo2MDAwLUM6N2ZmZgorMTAxMDAJCUM6NDgwMC1DOjRmZmYKKzAxMTAwCQlDOjUwMDAtQzo1N2ZmIAorMTExMDAJCUM6NTgwMC1DOjVmZmYKKzAwMDEwCQlDOkMwMDAtQzpDN2ZmCUM6RTAwMC1DOmZmZmYKKzEwMDEwCQlDOkM4MDAtQzpDZmZmCiswMTAxMAkJQzpEMDAwLUM6RDdmZgorMTEwMTAJCUM6RDgwMC1DOkRmZmYKKzAwMTEwCQlEOjAwMDAtRDowN2ZmCUQ6MjAwMC1EOjNmZmYKKzEwMTEwCQlEOjA4MDAtRDowZmZmCiswMTExMAkJRDoxMDAwLUQ6MTdmZgorMTExMTAJCUQ6MTgwMC1EOjFmZmYKKzAwMDAxCQlEOjQwMDAtRDo0N2ZmCUQ6NjAwMC1EOjdmZmYKKzEwMDAxCQlEOjQ4MDAtRDo0ZmZmCiswMTAwMQkJRDo1MDAwLUQ6NTdmZgorMTEwMDEJCUQ6NTgwMC1EOjVmZmYKKzAwMTAxCQlEOjgwMDAtRDo4N2ZmCUQ6QTAwMC1EOmJmZmYKKzEwMTAxCQlEOjg4MDAtRDo4ZmZmCiswMTEwMQkJRDo5MDAwLUQ6OTdmZgorMTExMDEJCUQ6OTgwMC1EOjlmZmYgCiswMDAxMQkJRDpDMDAwLUQ6YzdmZglEOkUwMDAtRDpmZmZmCisxMDAxMQkJRDpDODAwLUQ6Y2ZmZgorMDEwMTEJCUQ6RDAwMC1EOmQ3ZmYKKzExMDExCQlEOkQ4MDAtRDpkZmZmCiswMDExMQkJRTowMDAwLUU6MDdmZglFOjIwMDAtRTozZmZmCisxMDExMQkJRTowODAwLUU6MGZmZgorMDExMTEJCUU6MTAwMC1FOjE3ZmYKKzExMTExCQlFOjE4MDAtRToxZmZmCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogUHVyZURhdGEgQ29ycCAqKgorUERJNTA3ICg4LWJpdCBjYXJkKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIE1hcmsgUmVqaG9uIDxtZHJlamhvbkBtYWdpLmNvbT4gKHNsaWdodCBtb2RpZmljYXRpb25zIGJ5IEF2ZXJ5KQorICAtIEF2ZXJ5J3Mgbm90ZTogSSB0aGluayBQREk1MDggY2FyZHMgKGJ1dCBkZWZpbml0ZWx5IE5PVCBQREk1MDhQbHVzIGNhcmRzKQorICAgIGFyZSBtb3N0bHkgdGhlIHNhbWUgYXMgdGhpcy4gIFBESTUwOFBsdXMgY2FyZHMgYXBwZWFyIHRvIGJlIG1haW5seQorICAgIHNvZnR3YXJlLWNvbmZpZ3VyZWQuCisKK0p1bXBlcnM6CisJVGhlcmUgaXMgYSBqdW1wZXIgYXJyYXkgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2FyZCwgbmVhciB0aGUgZWRnZQorICAgICAgICBjb25uZWN0b3IuICBUaGlzIGFycmF5IGlzIGxhYmVsbGVkIEoxLiAgVGhleSBjb250cm9sIHRoZSBJUlFzIGFuZAorICAgICAgICBzb21ldGhpbmcgZWxzZS4gIFB1dCBvbmx5IG9uZSBqdW1wZXIgb24gdGhlIElSUSBwaW5zLgorCisJRVRTMSwgRVRTMiBhcmUgZm9yIHRpbWluZyBvbiB2ZXJ5IGxvbmcgZGlzdGFuY2UgbmV0d29ya3MuICBTZWUgdGhlCisJbW9yZSBnZW5lcmFsIGluZm9ybWF0aW9uIG5lYXIgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCisKKwlUaGVyZSBpcyBhIEoyIGp1bXBlciBvbiB0d28gcGlucy4gIEEganVtcGVyIHNob3VsZCBiZSBwdXQgb24gdGhlbSwKKyAgICAgICAgc2luY2UgaXQgd2FzIGFscmVhZHkgdGhlcmUgd2hlbiBJIGdvdCB0aGUgY2FyZC4gIEkgZG9uJ3Qga25vdyB3aGF0CisgICAgICAgIHRoaXMganVtcGVyIGlzIGZvciB0aG91Z2guCisKKwlUaGVyZSBpcyBhIHR3by1qdW1wZXIgYXJyYXkgZm9yIEozLiAgSSBkb24ndCBrbm93IHdoYXQgaXQgaXMgZm9yLAorICAgICAgICBidXQgdGhlcmUgd2VyZSBhbHJlYWR5IHR3byBqdW1wZXJzIG9uIGl0IHdoZW4gSSBnb3QgdGhlIGNhcmQuICBJdCdzCisgICAgICAgIGEgc2l4IHBpbiBncmlkIGluIGEgdHdvLWJ5LXRocmVlIGZhc2hpb24uICBUaGUganVtcGVycyB3ZXJlCisgICAgICAgIGNvbmZpZ3VyZWQgYXMgZm9sbG93czoKKworCSAgIC4tLS0tLS0tLgorCSBvIHwgbyAgIG8gfAorCSAgIDotLS0tLS0tOiAgICAtLS0tLS0+IEFjY2Vzc2libGUgZW5kIG9mIGNhcmQgd2l0aCBjb25uZWN0b3JzCisJIG8gfCBvICAgbyB8ICAgICAgICAgICAgIGluIHRoaXMgZGlyZWN0aW9uIC0tLS0tLS0+CisJICAgYC0tLS0tLS0nCisKK0NhcmwgZGUgQmlsbHkgPENBUkxAY2FyYWluZm8uY29tPiBleHBsYWlucyBKMyBhbmQgSjQ6CisKKwlKMyBEaWFncmFtOgorCisgICAgICAgICAgIC4tLS0tLS0tLgorICAgICAgICAgbyB8IG8gICBvIHwKKyAgICAgICAgICAgOi0tLS0tLS06ICAgIFRXSVNUIFRlY2hub2xvZ3kKKyAgICAgICAgIG8gfCBvICAgbyB8CisgICAgICAgICAgIGAtLS0tLS0tJworICAgICAgICAgICAuLS0tLS0tLS4KKyAgICAgICAgICAgfCBvICAgbyB8IG8KKyAgICAgICAgICAgOi0tLS0tLS06ICAgIENPQVggVGVjaG5vbG9neQorICAgICAgICAgICB8IG8gICBvIHwgbworICAgICAgICAgICBgLS0tLS0tLScKKworICAtIElmIHVzaW5nIGNvYXggY2FibGUgaW4gYSBidXMgdG9wb2xvZ3kgdGhlIEo0IGp1bXBlciBtdXN0IGJlIHJlbW92ZWQ7CisgICAgcGxhY2UgaXQgb24gb25lIHBpbi4KKworICAtIElmIHVzaW5nIGJ1cyB0b3BvbG9neSB3aXRoIHR3aXN0ZWQgcGFpciB3aXJpbmcgbW92ZSB0aGUgSjMgCisgICAganVtcGVycyBzbyB0aGV5IGNvbm5lY3QgdGhlIG1pZGRsZSBwaW4gYW5kIHRoZSBwaW5zIGNsb3Nlc3QgdG8gdGhlIFJKMTEKKyAgICBDb25uZWN0b3JzLiAgQWxzbyB0aGUgSjQganVtcGVyIG11c3QgYmUgcmVtb3ZlZDsgcGxhY2UgaXQgb24gb25lIHBpbiBvZgorICAgIEo0IGp1bXBlciBmb3Igc3RvcmFnZS4KKworICAtIElmIHVzaW5nICBzdGFyIHRvcG9sb2d5IHdpdGggdHdpc3RlZCBwYWlyIHdpcmluZyBtb3ZlIHRoZSBKMyAKKyAgICBqdW1wZXJzIHNvIHRoZXkgY29ubmVjdCB0aGUgbWlkZGxlIHBpbiBhbmQgdGhlIHBpbnMgY2xvc2VzdCB0byB0aGUgUkoxMQorICAgIGNvbm5lY3RvcnMuCisKKworRElQIFN3aXRjaGVzOgorCisJVGhlIERJUCBzd2l0Y2hlcyBhY2Nlc3NpYmxlIG9uIHRoZSBhY2Nlc3NpYmxlIGVuZCBvZiB0aGUgY2FyZCB3aGlsZQorICAgICAgICBpdCBpcyBpbnN0YWxsZWQsIGlzIHVzZWQgdG8gc2V0IHRoZSBBUkNuZXQgYWRkcmVzcy4gIFRoZXJlIGFyZSA4CisgICAgICAgIHN3aXRjaGVzLiAgVXNlIGFuIGFkZHJlc3MgZnJvbSAxIHRvIDI1NC4KKworCVN3aXRjaCBOby4KKwkxMjM0NTY3OAlBUkNuZXQgYWRkcmVzcworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJMDAwMDAwMDAJRkYgIAkoRG9uJ3QgdXNlIHRoaXMhKQorCTAwMDAwMDAxCUZFCisJMDAwMDAwMTAJRkQKKwkuLi4uCisJMTExMTExMDEJMgkKKwkxMTExMTExMAkxCisJMTExMTExMTEJMAkoRG9uJ3QgdXNlIHRoaXMhKQorCisJVGhlcmUgaXMgYW5vdGhlciBhcnJheSBvZiBlaWdodCBESVAgc3dpdGNoZXMgYXQgdGhlIHRvcCBvZiB0aGUKKyAgICAgICAgY2FyZC4gIFRoZXJlIGFyZSBmaXZlIGxhYmVsbGVkIE1TMC1NUzQgd2hpY2ggc2VlbSB0byBjb250cm9sIHRoZQorICAgICAgICBtZW1vcnkgYWRkcmVzcywgYW5kIGFub3RoZXIgdGhyZWUgbGFiZWxsZWQgSU8wLUlPMiB3aGljaCBzZWVtIHRvCisgICAgICAgIGNvbnRyb2wgdGhlIGJhc2UgSS9PIGFkZHJlc3Mgb2YgdGhlIGNhcmQuCisKKwlUaGlzIHdhcyBkaWZmaWN1bHQgdG8gdGVzdCBieSB0cmlhbCBhbmQgZXJyb3IsIGFuZCB0aGUgSS9PIGFkZHJlc3NlcworICAgICAgICBhcmUgaW4gYSB3ZWlyZCBvcmRlci4gIFRoaXMgd2FzIHRlc3RlZCBieSBzZXR0aW5nIHRoZSBESVAgc3dpdGNoZXMsCisgICAgICAgIHJlYm9vdGluZyB0aGUgY29tcHV0ZXIsIGFuZCBhdHRlbXB0aW5nIHRvIGxvYWQgQVJDRVRIRVIgYXQgdmFyaW91cworICAgICAgICBhZGRyZXNzZXMgKG1vc3RseSBiZXR3ZWVuIDB4MjAwIGFuZCAweDQwMCkuICBUaGUgYWRkcmVzcyB0aGF0IGNhdXNlZAorICAgICAgICB0aGUgcmVkIHRyYW5zbWl0IExFRCB0byBibGluaywgaXMgdGhlIG9uZSB0aGF0IEkgdGhvdWdodCB3b3Jrcy4KKworCUFsc28sIHRoZSBhZGRyZXNzIDB4M0QwIHNlZW0gdG8gaGF2ZSBhIHNwZWNpYWwgbWVhbmluZywgc2luY2UgdGhlCisgICAgICAgIEFSQ0VUSEVSIHBhY2tldCBkcml2ZXIgbG9hZGVkIGZpbmUsIGJ1dCB3aXRob3V0IHRoZSByZWQgTEVECisgICAgICAgIGJsaW5raW5nLiAgSSBkb24ndCBrbm93IHdoYXQgMHgzRDAgaXMgZm9yIHRob3VnaC4gIEkgcmVjb21tZW5kIHVzaW5nCisgICAgICAgIGFuIGFkZHJlc3Mgb2YgMHgzMDAgc2luY2UgV2luZG93cyBtYXkgbm90IGxpa2UgYWRkcmVzc2VzIGJlbG93CisgICAgICAgIDB4MzAwLgorCisJSU8gU3dpdGNoIE5vLgorCTIxMCAgICAgICAgICAgICBJL08gYWRkcmVzcworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkxMTEgICAgICAgICAgICAgMHgyNjAKKwkxMTAgICAgICAgICAgICAgMHgyOTAKKwkxMDEgICAgICAgICAgICAgMHgyRTAKKwkxMDAgICAgICAgICAgICAgMHgyRjAKKwkwMTEgICAgICAgICAgICAgMHgzMDAKKwkwMTAgICAgICAgICAgICAgMHgzNTAKKwkwMDEgICAgICAgICAgICAgMHgzODAKKwkwMDAgICAgICAgICAgICAgMHgzRTAKKworCVRoZSBtZW1vcnkgc3dpdGNoZXMgc2V0IGEgcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZSBvZiAweDEwMDAgYnl0ZXMKKyAgICAgICAgKDB4MTAwIHNlZ21lbnQgdW5pdHMsIG9yIDRrKS4gIEZvciBleGFtcGxlIGlmIEkgc2V0IGFuIGFkZHJlc3Mgb2YKKyAgICAgICAgMHhEMDAwLCBpdCB3aWxsIHVzZSB1cCBhZGRyZXNzZXMgMHhEMDAwIHRvIDB4RDEwMC4KKworCVRoZSBtZW1vcnkgc3dpdGNoZXMgd2VyZSB0ZXN0ZWQgYnkgYm9vdGluZyB1c2luZyBRRU1NMzg2IHN0ZWFsdGgsCisgICAgICAgIGFuZCB1c2luZyBMT0FESEkgdG8gc2VlIHdoYXQgYWRkcmVzcyBhdXRvbWF0aWNhbGx5IGJlY2FtZSBleGNsdWRlZAorICAgICAgICBmcm9tIHRoZSB1cHBlciBtZW1vcnkgcmVnaW9ucywgYW5kIHRoZW4gYXR0ZW1wdGluZyB0byBsb2FkIEFSQ0VUSEVSCisgICAgICAgIHVzaW5nIHRoZXNlIGFkZHJlc3Nlcy4KKworCUkgcmVjb21tZW5kIHVzaW5nIGFuIEFSQ25ldCBtZW1vcnkgYWRkcmVzcyBvZiAweEQwMDAsIGFuZCBwdXR0aW5nCisgICAgICAgIHRoZSBFTVMgcGFnZSBmcmFtZSBhdCAweEMwMDAgd2hpbGUgdXNpbmcgUUVNTSBzdGVhbHRoIG1vZGUuICBUaGF0CisgICAgICAgIHdheSwgeW91IGdldCBjb250aWd1b3VzIGhpZ2ggbWVtb3J5IGZyb20gMHhEMTAwIGFsbW9zdCBhbGwgdGhlIHdheQorICAgICAgICB0aGUgZW5kIG9mIHRoZSBtZWdhYnl0ZS4KKworCU1lbW9yeSBTd2l0Y2ggMCAoTVMwKSBkaWRuJ3Qgc2VlbSB0byB3b3JrIHByb3Blcmx5IHdoZW4gc2V0IHRvIE9GRgorICAgICAgICBvbiBteSBjYXJkLiAgSXQgY291bGQgYmUgbWFsZnVuY3Rpb25pbmcgb24gbXkgY2FyZC4gIEV4cGVyaW1lbnQgd2l0aAorICAgICAgICBpdCBPTiBmaXJzdCwgYW5kIGlmIGl0IGRvZXNuJ3Qgd29yaywgc2V0IGl0IHRvIE9GRi4gIChJdCBtYXkgYmUgYQorICAgICAgICBtb2RpZmllciBmb3IgdGhlIDB4MjAwIGJpdD8pCisKKwlNUyBTd2l0Y2ggTm8uCisJNDMyMTAgICAgICAgICAgIE1lbW9yeSBhZGRyZXNzCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkwMDAwMSAgICAgICAgICAgMHhFMTAwICAoZ3Vlc3NlZCAtIHdhcyBub3QgZGV0ZWN0ZWQgYnkgUUVNTSkKKwkwMDAxMSAgICAgICAgICAgMHhFMDAwICAoZ3Vlc3NlZCAtIHdhcyBub3QgZGV0ZWN0ZWQgYnkgUUVNTSkKKwkwMDEwMSAgICAgICAgICAgMHhERDAwCisJMDAxMTEgICAgICAgICAgIDB4REMwMAorCTAxMDAxICAgICAgICAgICAweEQ5MDAKKwkwMTAxMSAgICAgICAgICAgMHhEODAwCisJMDExMDEgICAgICAgICAgIDB4RDUwMAorCTAxMTExICAgICAgICAgICAweEQ0MDAKKwkxMDAwMSAgICAgICAgICAgMHhEMTAwCisJMTAwMTEgICAgICAgICAgIDB4RDAwMAorCTEwMTAxICAgICAgICAgICAweENEMDAKKwkxMDExMSAgICAgICAgICAgMHhDQzAwCisJMTEwMDEgICAgICAgICAgIDB4QzkwMCAoZ3Vlc3NlZCAtIGNyYXNoZXMgdGVzdGVkIHN5c3RlbSkKKwkxMTAxMSAgICAgICAgICAgMHhDODAwIChndWVzc2VkIC0gY3Jhc2hlcyB0ZXN0ZWQgc3lzdGVtKQorCTExMTAxICAgICAgICAgICAweEM1MDAgKGd1ZXNzZWQgLSBjcmFzaGVzIHRlc3RlZCBzeXN0ZW0pCisJMTExMTEgICAgICAgICAgIDB4QzQwMCAoZ3Vlc3NlZCAtIGNyYXNoZXMgdGVzdGVkIHN5c3RlbSkKKwkKKwkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIENOZXQgVGVjaG5vbG9neSBJbmMuICoqCisxMjAgU2VyaWVzICg4LWJpdCBjYXJkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+CisKKworQ05FVCBURUNITk9MT0dZIElOQy4gKENOZXQpIEFSQ05FVCAxMjBBIFNFUklFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgT3JpZ2luYWwgQ05ldCBNYW51YWwgCisKKyAgICAgICAgICAgICAgIkFSQ05FVAorICAgICAgICAgICAgVVNFUidTIE1BTlVBTCAKKyAgICAgICAgICAgICAgICBmb3IKKyAgICAgICAgICAgICAgIENOMTIwQQorICAgICAgICAgICAgICAgQ04xMjBBQgorICAgICAgICAgICAgICAgQ04xMjBUUAorICAgICAgICAgICAgICAgQ04xMjBTVAorICAgICAgICAgICAgICAgQ04xMjBTQlQKKyAgICAgICAgICAgICBQL046MTItMDEtMDAwNworICAgICAgICAgICAgIFJldmlzaW9uIDMuMDAiCisKK0FSQ05FVCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIHRoZSBEYXRhcG9pbnQgQ29ycG9yYXRpb24KKworUC9OIDEyMEEgICBBUkNORVQgOCBiaXQgWFQvQVQgU3RhcgorUC9OIDEyMEFCICBBUkNORVQgOCBiaXQgWFQvQVQgQnVzCitQL04gMTIwVFAgIEFSQ05FVCA4IGJpdCBYVC9BVCBUd2lzdGVkIFBhaXIKK1AvTiAxMjBTVCAgQVJDTkVUIDggYml0IFhUL0FUIFN0YXIsIFR3aXN0ZWQgUGFpcgorUC9OIDEyMFNCVCBBUkNORVQgOCBiaXQgWFQvQVQgU3RhciwgQnVzLCBUd2lzdGVkIFBhaXIKKworICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFRCB8X19ffAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOIHwgICB8IElENworICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gfCAgIHwgSUQ2CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCB8IFMgfCBJRDUKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlIHwgVyB8IElENAorICAgfCAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgIEEgfCAyIHwgSUQzCisgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgZCB8ICAgfCBJRDIKKyAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgMSAyIDMgNCA1IDYgNyA4ICBkIHwgICB8IElEMQorICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IF9fX19fX19fX19fX19fX19fIHIgfF9fX3wgSUQwCisgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgOTBDNjUgICAgICAgIHx8ICAgICAgIFNXMSAgICAgICB8ICBfX19ffAorICAgfCAgSlAgOCA3ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8fF9fX19fX19fX19fX19fX19ffCB8ICAgIHwKKyAgIHwgICAgfG98b3wgIEpQMSAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBKMiB8CisgICB8ICAgIHxvfG98ICB8b298ICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICBKUCAxIDEgMSAgIHwgICAgfAorICAgfCAgIF9fX19fX19fX19fX19fICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgMCAxIDIgICB8X19fX3wKKyAgIHwgIHwgIFBST00gICAgICAgIHwgIHxfX19fX19fX19fX19fX19fX19ffCAgICAgICAgICAgfG98b3xvfCAgX19fX198CisgICB8ICA+ICBTT0NLRVQgICAgICB8ICBKUCA2IDUgNCAzIDIgICAgICAgICAgICAgICAgICAgIHxvfG98b3wgfCBKMSAgfAorICAgfCAgfF9fX19fX19fX19fX19ffCAgICB8b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICB8b3xvfG98IHxfX19fX3wKKyAgIHxfX19fXyAgICAgICAgICAgICAgICAgfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCis5MEM2NSAgICAgICBBUkNORVQgUHJvYmUKK1MxICAxLTU6ICAgIEJhc2UgTWVtb3J5IEFkZHJlc3MgU2VsZWN0CisgICAgNi04OiAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorUzIgIDEtODogICAgTm9kZSBJRCBTZWxlY3QgKElEMC1JRDcpCitKUDEgICAgIFJPTSBFbmFibGUgU2VsZWN0CitKUDIgICAgIElSUTIKK0pQMyAgICAgSVJRMworSlA0ICAgICBJUlE0CitKUDUgICAgIElSUTUKK0pQNiAgICAgSVJRNworSlA3L0pQOCAgICAgRVQxLCBFVDIgVGltZW91dCBQYXJhbWV0ZXJzCitKUDEwL0pQMTEgICBDb2F4IC8gVHdpc3RlZCBQYWlyIFNlbGVjdCAgKENOMTIwU1QvU0JUIG9ubHkpCitKUDEyICAgICAgICBUZXJtaW5hdG9yIFNlbGVjdCAgICAgICAoQ04xMjBBQi9TVC9TQlQgb25seSkKK0oxICAgICAgQk5DIFJHNjIvVSBDb25uZWN0b3IgICAgICAgIChhbGwgZXhjZXB0IENOMTIwVFApCitKMiAgICAgIFR3byA2LXBvc2l0aW9uIFRlbGVwaG9uZSBKYWNrICAgKENOMTIwVFAvU1QvU0JUIG9ubHkpCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gU1cyIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlIGF0dGFjaGVkCit0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSAwLgorU3dpdGNoIDEgKElEMCkgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBMYWJlbCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS18LS0tLS0tLQorICAgICAxICAgIHwgSUQwICAgfCAgIDEKKyAgICAgMiAgICB8IElEMSAgIHwgICAyCisgICAgIDMgICAgfCBJRDIgICB8ICAgNAorICAgICA0ICAgIHwgSUQzICAgfCAgIDgKKyAgICAgNSAgICB8IElENCAgIHwgIDE2CisgICAgIDYgICAgfCBJRDUgICB8ICAzMgorICAgICA3ICAgIHwgSUQ2ICAgfCAgNjQKKyAgICAgOCAgICB8IElENyAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2ggICAgICAgICB8IEhleCAgICAgfCBEZWNpbWFsIAorICAgOCA3IDYgNSA0IDMgMiAxIHwgTm9kZSBJRCB8IE5vZGUgSUQKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorICAgMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQKKyAgIDAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxIAorICAgMCAwIDAgMCAwIDAgMSAwIHwgICAgMiAgICB8ICAgIDIKKyAgIDAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1CisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgIAorICAgMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMKKyAgIDEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0CisgICAxIDEgMSAxIDEgMSAxIDEgfCAgIEZGICAgIHwgIDI1NQorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDYgICA3ICAgOCAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT0ZGIE9OICBPTiAgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT0ZGIE9GRiBPTiAgfCAgMkYwCisgICBPTiAgT04gIE9GRiB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT04gIE9GRiBPRkYgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZSAKK2xvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4gVGhlIGFkZHJlc3Mgb2YgdGhlIEJvb3QgUHJvbSBpcworbWVtb3J5IGJhc2UgKyA4SyBvciBtZW1vcnkgYmFzZSArIDB4MjAwMC4KK1N3aXRjaGVzIDEtNSBvZiBzd2l0Y2ggYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgMSAgIDIgICAzICAgNCAgIDUgIHwgQWRkcmVzcyB8IEFkZHJlc3MgKikKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT04gIE9OICBPTiAgT04gIE9OICB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPTiAgfCAgQzQwMDAgIHwgIEM2MDAwCisgICBPTiAgT04gIE9OICBPRkYgT04gIHwgIENDMDAwICB8ICBDRTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9OICB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9OICBPTiAgT04gIE9GRiB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPRkYgfCAgRDgwMDAgIHwgIERBMDAwCisgICBPTiAgT04gIE9OICBPRkYgT0ZGIHwgIERDMDAwICB8ICBERTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9GRiB8ICBFMDAwMCAgfCAgRTIwMDAKKyAgCisqKSBUbyBlbmFibGUgdGhlIEJvb3QgUk9NIGluc3RhbGwgdGhlIGp1bXBlciBKUDEKKworTm90ZTogU2luY2UgdGhlIHN3aXRjaGVzIDEgYW5kIDIgYXJlIGFsd2F5cyBzZXQgdG8gT04gaXQgbWF5IGJlIHBvc3NpYmxlCisgICAgICB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgdG8gYWRkIGFuIG9mZnNldCBvZiAySywgNEsgb3IgNksgdG8gdGhlIGJhc2UKKyAgICAgIGFkZHJlc3MsIGJ1dCB0aGlzIGZlYXR1cmUgaXMgbm90IGRvY3VtZW50ZWQgaW4gdGhlIG1hbnVhbCBhbmQgSQorICAgICAgaGF2ZW4ndCB0ZXN0ZWQgaXQgeWV0LgorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgaW5zdGFsbCBvbmUgKG9ubHkgb25lISkgb2YgdGhlIGp1bXBlcnMKK0pQMiwgSlAzLCBKUDQsIEpQNSwgSlA2LiBKUDIgaXMgdGhlIGRlZmF1bHQuCisKKyAgIEp1bXBlciB8IElSUSAgICAgCisgICAtLS0tLS0tfC0tLS0tCisgICAgIDIgICAgfCAgMgorICAgICAzICAgIHwgIDMKKyAgICAgNCAgICB8ICA0CisgICAgIDUgICAgfCAgNQorICAgICA2ICAgIHwgIDcKKworCitTZXR0aW5nIHRoZSBJbnRlcm5hbCBUZXJtaW5hdG9yIG9uIENOMTIwQUIvVFAvU0JUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUganVtcGVyIEpQMTIgaXMgdXNlZCB0byBlbmFibGUgdGhlIGludGVybmFsIHRlcm1pbmF0b3IuIAorCisgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0KKyAgICAgICAwICAgICAgICAgICAgICAgIHwgIDAgIHwgICAgIAorICAgICAtLS0tLSAgIE9OICAgICAgICAgfCAgICAgfCAgT04KKyAgICB8ICAwICB8ICAgICAgICAgICAgIHwgIDAgIHwKKyAgICB8ICAgICB8ICBPRkYgICAgICAgICAtLS0tLSAgIE9GRgorICAgIHwgIDAgIHwgICAgICAgICAgICAgICAgMAorICAgICAtLS0tLQorICAgVGVybWluYXRvciAgICAgICAgICBUZXJtaW5hdG9yIAorICAgIGRpc2FibGVkICAgICAgICAgICAgZW5hYmxlZAorICAKKworU2VsZWN0aW5nIHRoZSBDb25uZWN0b3IgVHlwZSBvbiBDTjEyMFNUL1NCVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgIEpQMTAgICAgSlAxMSAgICAgICAgSlAxMCAgICBKUDExCisgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gICAtLS0tLQorICAgICAgIDAgICAgICAgMCAgICAgICAgfCAgMCAgfCB8ICAwICB8ICAgICAgIAorICAgICAtLS0tLSAgIC0tLS0tICAgICAgfCAgICAgfCB8ICAgICB8CisgICAgfCAgMCAgfCB8ICAwICB8ICAgICB8ICAwICB8IHwgIDAgIHwKKyAgICB8ICAgICB8IHwgICAgIHwgICAgICAtLS0tLSAgIC0tLS0tCisgICAgfCAgMCAgfCB8ICAwICB8ICAgICAgICAwICAgICAgIDAgCisgICAgIC0tLS0tICAgLS0tLS0KKyAgICAgQ29heGlhbCBDYWJsZSAgICAgICBUd2lzdGVkIFBhaXIgQ2FibGUgCisgICAgICAgKERlZmF1bHQpCisKKworU2V0dGluZyB0aGUgVGltZW91dCBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGp1bXBlcnMgbGFiZWxlZCBFWFQxIGFuZCBFWFQyIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGltZW91dCAKK3BhcmFtZXRlcnMuIFRoZXNlIHR3byBqdW1wZXJzIGFyZSBub3JtYWxseSBsZWZ0IG9wZW4uCisKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBDTmV0IFRlY2hub2xvZ3kgSW5jLiAqKgorMTYwIFNlcmllcyAoMTYtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+CisKK0NORVQgVEVDSE5PTE9HWSBJTkMuIChDTmV0KSBBUkNORVQgMTYwQSBTRVJJRVMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXNjcmlwdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgordXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgZm9sbG93aW5nIE9yaWdpbmFsIENOZXQgTWFudWFsIAorCisgICAgICAgICAgICAgICJBUkNORVQKKyAgICAgICAgICAgIFVTRVInUyBNQU5VQUwgCisgICAgICAgICAgICAgICAgZm9yCisgICAgICAgICAgICAgICBDTjE2MEEKKyAgICAgICAgICAgICAgIENOMTYwQUIKKyAgICAgICAgICAgICAgIENOMTYwVFAKKyAgICAgICAgICAgICBQL046MTItMDEtMDAwNgorICAgICAgICAgICAgIFJldmlzaW9uIDMuMDAiCisKK0FSQ05FVCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIHRoZSBEYXRhcG9pbnQgQ29ycG9yYXRpb24KKworUC9OIDE2MEEgICBBUkNORVQgMTYgYml0IFhUL0FUIFN0YXIKK1AvTiAxNjBBQiAgQVJDTkVUIDE2IGJpdCBYVC9BVCBCdXMKK1AvTiAxNjBUUCAgQVJDTkVUIDE2IGJpdCBYVC9BVCBUd2lzdGVkIFBhaXIKKworICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fICAgICAgICAgIF9fX3wKKyAgPiAgICAgICAgICAgICAgIHxvb3wgSlAyICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgTEVEIHxfX198CisgIDwgICAgICAgICAgICAgICB8b298IEpQMSAgICAgfCAgICAgICAgOTAyNiAgICAgICAgICAgICB8ICAgIExFRCB8X19ffAorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19ffCAgICAgICAgIF9fX3wKKyAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOIHwgICB8IElENworICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgIG8gfCAgIHwgSUQ2CisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgMyA0IDUgNiA3IDggOSAwICAgICAgZCB8IFMgfCBJRDUKKyAgPiAgICAgICAgIF9fX19fX19fX19fX19fXyAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fICAgICBlIHwgVyB8IElENAorICA8ICAgICAgICB8ICAgICBQUk9NICAgICAgfCAgICAgICAgIHwgICAgICAgICBTVzEgICAgICAgICB8ICAgIEEgfCAyIHwgSUQzCisgID4gICAgICAgID4gICAgU09DS0VUICAgICB8ICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX3wgICAgZCB8ICAgfCBJRDIKKyAgPCAgICAgICAgfF9fX19fX19fX19fX19fX3wgICAgICAgICAgfCBJTy1CYXNlICAgfCBNRU0gICB8ICAgICBkIHwgICB8IElEMQorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgfF9fX3wgSUQwCisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19ffAorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBKMSB8CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX3wKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDEgMSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgIDMgNCA1IDYgNyAgICAgIEpQICAgICA4IDkgMCAxIDIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICA+IHxvfG98b3xvfG98ICAgICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCB8b3xvfG98b3xvfCBfXyAgICAgICAgfG98b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX198CisgID4gICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICA8X19fX19fX19fX19ffCAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCis5MDI2ICAgICAgICAgICAgQVJDTkVUIFByb2JlCitTVzEgMS02OiAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorICAgIDctMTA6ICAgQmFzZSBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKK1NXMiAxLTg6ICAgIE5vZGUgSUQgU2VsZWN0IChJRDAtSUQ3KQorSlAxL0pQMiAgICAgRVQxLCBFVDIgVGltZW91dCBQYXJhbWV0ZXJzCitKUDMtSlAxMyAgICBJbnRlcnJ1cHQgU2VsZWN0CitKMSAgICAgIEJOQyBSRzYyL1UgQ29ubmVjdG9yICAgICAgICAoQ04xNjBBL0FCIG9ubHkpCitKMSAgICAgIFR3byA2LXBvc2l0aW9uIFRlbGVwaG9uZSBKYWNrICAgKENOMTYwVFAgb25seSkKK0xFRAorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZSBhdHRhY2hlZAordG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3QgYmUgZGlmZmVyZW50IGZyb20gMC4KK1N3aXRjaCAxIChJRDApIHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIgIAorVGhlc2UgdmFsdWVzIGFyZToKKworICAgU3dpdGNoIHwgTGFiZWwgfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0KKyAgICAgMSAgICB8IElEMCAgIHwgICAxCisgICAgIDIgICAgfCBJRDEgICB8ICAgMgorICAgICAzICAgIHwgSUQyICAgfCAgIDQKKyAgICAgNCAgICB8IElEMyAgIHwgICA4CisgICAgIDUgICAgfCBJRDQgICB8ICAxNgorICAgICA2ICAgIHwgSUQ1ICAgfCAgMzIKKyAgICAgNyAgICB8IElENiAgIHwgIDY0CisgICAgIDggICAgfCBJRDcgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoICAgICAgICAgfCBIZXggICAgIHwgRGVjaW1hbCAKKyAgIDggNyA2IDUgNCAzIDIgMSB8IE5vZGUgSUQgfCBOb2RlIElECisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIDAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkCisgICAwIDAgMCAwIDAgMCAwIDEgfCAgICAxICAgIHwgICAgMSAKKyAgIDAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyCisgICAwIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMworICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NQorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAwIDEgMCAxIDAgfCAgIEFBICAgIHwgIDE3MAorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAKKyAgIDEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzCisgICAxIDEgMSAxIDEgMSAxIDAgfCAgIEZFICAgIHwgIDI1NAorICAgMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUKKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCBzaXggc3dpdGNoZXMgaW4gc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIEkvTyBCYXNlCithZGRyZXNzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGU6CisKKyAgICAgICAgICAgICBTd2l0Y2ggICAgICAgIHwgSGV4IEkvTworICAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9GRiBPTiAgT04gIE9GRiBPRkYgT04gIHwgIDI2MAorICAgT0ZGIE9OICBPRkYgT04gIE9OICBPRkYgfCAgMjkwCisgICBPRkYgT04gIE9GRiBPRkYgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT0ZGIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgMkYwCisgICBPRkYgT0ZGIE9OICBPTiAgT04gIE9OICB8ICAzMDAKKyAgIE9GRiBPRkYgT04gIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT0ZGIE9GRiBPRkYgT04gIE9OICBPTiAgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiBPRkYgT0ZGIE9OICB8ICAzRTAKKworTm90ZTogT3RoZXIgSU8tQmFzZSBhZGRyZXNzZXMgc2VlbSB0byBiZSBzZWxlY3RhYmxlLCBidXQgb25seSB0aGUgYWJvdmUKKyAgICAgIGNvbWJpbmF0aW9ucyBhcmUgZG9jdW1lbnRlZC4KKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHN3aXRjaGVzIDctMTAgb2Ygc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIE1lbW9yeQorQmFzZSBhZGRyZXNzIG9mIHRoZSBSQU0gKDJLKSBhbmQgdGhlIFBST00uCisKKyAgIFN3aXRjaCAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgNyAgIDggICA5ICAxMCAgfCBBZGRyZXNzIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIE9GRiBPRkYgT04gIE9OICB8ICBDMDAwMCAgfCAgQzgwMDAKKyAgIE9GRiBPRkYgT04gIE9GRiB8ICBEMDAwMCAgfCAgRDgwMDAgKERlZmF1bHQpCisgICBPRkYgT0ZGIE9GRiBPTiAgfCAgRTAwMDAgIHwgIEU4MDAwCisKK05vdGU6IE90aGVyIE1FTS1CYXNlIGFkZHJlc3NlcyBzZWVtIHRvIGJlIHNlbGVjdGFibGUsIGJ1dCBvbmx5IHRoZSBhYm92ZQorICAgICAgY29tYmluYXRpb25zIGFyZSBkb2N1bWVudGVkLgorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgaW5zdGFsbCBvbmUgKG9ubHkgb25lISkgb2YgdGhlIGp1bXBlcnMKK0pQMyB0aHJvdWdoIEpQMTMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZToKKworICAgSnVtcGVyIHwgSVJRICAgICAKKyAgIC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgMyAgICB8ICAxNAorICAgICA0ICAgIHwgIDE1CisgICAgIDUgICAgfCAgMTIKKyAgICAgNiAgICB8ICAxMQorICAgICA3ICAgIHwgIDEwCisgICAgIDggICAgfCAgIDMKKyAgICAgOSAgICB8ICAgNAorICAgIDEwICAgIHwgICA1CisgICAgMTEgICAgfCAgIDYKKyAgICAxMiAgICB8ICAgNworICAgIDEzICAgIHwgICAyICg9OSkgRGVmYXVsdCEKKworTm90ZTogIC0gRG8gbm90IHVzZSBKUDExPUlSUTYsIGl0IG1heSBjb25mbGljdCB3aXRoIHlvdXIgRmxvcHB5IERpc2sKKyAgICAgICAgIENvbnRyb2xsZXIKKyAgICAgICAtIFVzZSBKUDM9SVJRMTQgb25seSwgaWYgeW91IGRvbid0IGhhdmUgYW4gSURFLSwgTUZNLSwgb3IgUkxMLQorICAgICAgICAgSGFyZCBEaXNrLCBpdCBtYXkgY29uZmxpY3Qgd2l0aCB0aGVpciBjb250cm9sbGVycworCisKK1NldHRpbmcgdGhlIFRpbWVvdXQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXJzIGxhYmVsZWQgSlAxIGFuZCBKUDIgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0CitwYXJhbWV0ZXJzLiBUaGVzZSB0d28ganVtcGVycyBhcmUgbm9ybWFsbHkgbGVmdCBvcGVuLgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIExhbnRlY2ggKioKKzgtYml0IGNhcmQsIHVua25vd24gbW9kZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIFZsYWQgTHVuZ3UgPHZsdW5ndUB1Z2FsLnJvPiAtIGhpcyBlLW1haWwgYWRkcmVzcyBzZWVtZWQgYnJva2VuIGF0CisgICAgdGhlIHRpbWUgSSB0cmllZCB0byByZWFjaCBoaW0uICBTb3JyeSBWbGFkLCBpZiB5b3UgZGlkbid0IGdldCBteSByZXBseS4KKworICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgfCAgIDEgICAgICAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICBfX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX198CisgICB8ICAgfCAgIFNXMSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRUQgfF9ffAorICAgfCAgIHxfX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICB8ICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgfFMgfCA4CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFcgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwyIHwKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8X198IDEKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgIFVNOTA2NUwgICAgICB8ICAgICB8b3wgIEpQNCAgICAgICAgIF9fX198X19fXworICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgIHxvfCAgICAgICAgICAgICAgfCAgQ04gICAgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19ffAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICBfX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgIHwgICAgUFJPTSAgICB8ICAgICAgICB8b29vb298ICBKUDYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICB8X19fX19fX19fX19ffCAgICAgICAgfG9vb29vfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8X19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBffAorICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wgfF9ffAorCisKK1VNOTA2NUwgOiBBUkNuZXQgQ29udHJvbGxlcgorCitTVyAxICAgIDogU2hhcmVkIE1lbW9yeSBBZGRyZXNzIGFuZCBJL08gQmFzZQorCisgICAgICAgIE9OPTAKKworICAgICAgICAxMjM0NXxNZW1vcnkgQWRkcmVzcworICAgICAgICAtLS0tLXwtLS0tLS0tLS0tLS0tLQorICAgICAgICAwMDAwMXwgIEQ0MDAwCisgICAgICAgIDAwMDEwfCAgQ0MwMDAKKyAgICAgICAgMDAxMTB8ICBEMDAwMAorICAgICAgICAwMTExMHwgIEQxMDAwCisgICAgICAgIDAxMTAxfCAgRDkwMDAKKyAgICAgICAgMTAwMTB8ICBDQzgwMAorICAgICAgICAxMDAxMXwgIERDODAwCisgICAgICAgIDExMTEwfCAgRDE4MDAKKworSXQgc2VlbXMgdGhhdCB0aGUgYml0cyBhcmUgY29uc2lkZXJlZCBpbiByZXZlcnNlIG9yZGVyLiAgQWxzbywgeW91IG11c3QKK29ic2VydmUgdGhhdCBzb21lIG9mIHRob3NlIGFkZHJlc3NlcyBhcmUgdW51c3VhbCBhbmQgSSBkaWRuJ3QgcHJvYmUgdGhlbTsgSQordXNlZCBhIG1lbW9yeSBkdW1wIGluIERPUyB0byBpZGVudGlmeSB0aGVtLiAgRm9yIHRoZSAwMDAwMCBjb25maWd1cmF0aW9uIGFuZAorc29tZSBvdGhlcnMgdGhhdCBJIGRpZG4ndCB3cml0ZSBoZXJlIHRoZSBjYXJkIHNlZW1zIHRvIGNvbmZsaWN0IHdpdGggdGhlCit2aWRlbyBjYXJkIChhbiBTMyBHRU5EQUMpLiBJIGxlYXZlIHRoZSBmdWxsIGRlY29kaW5nIG9mIHRob3NlIGFkZHJlc3NlcyB0bworeW91LgorCisgICAgICAgIDY3OHwgSS9PIEFkZHJlc3MKKyAgICAgICAgLS0tfC0tLS0tLS0tLS0tLQorICAgICAgICAwMDB8ICAgIDI2MAorICAgICAgICAwMDF8ICAgIGZhaWxlZCBwcm9iZQorICAgICAgICAwMTB8ICAgIDJFMAorICAgICAgICAwMTF8ICAgIDM4MAorICAgICAgICAxMDB8ICAgIDI5MAorICAgICAgICAxMDF8ICAgIDM1MAorICAgICAgICAxMTB8ICAgIGZhaWxlZCBwcm9iZQorICAgICAgICAxMTF8ICAgIDNFMAorCitTVyAyICA6IE5vZGUgSUQgKGJpbmFyeSBjb2RlZCkKKworSlAgNCAgOiBCb290IFBST00gZW5hYmxlICAgQ0xPU0UgLSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVOICAtIGRpc2FibGVkCisKK0pQIDYgIDogSVJRIHNldCAoT05MWSBPTkUganVtcGVyIG9uIDEtNSBmb3IgSVJRIDItNikKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBBY2VyICoqCis4LWJpdCBjYXJkLCBNb2RlbCA1MjEwLTAwMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+IHVzaW5nIHBvcnRpb25zIG9mIHRoZSBleGlzdGluZworICAgIGFyY25ldC1oYXJkd2FyZSBmaWxlLgorCitUaGlzIGlzIGEgOTBDMjYgYmFzZWQgY2FyZC4gIEl0cyBjb25maWd1cmF0aW9uIHNlZW1zIHNpbWlsYXIgdG8gdGhlIFNNQworUEMxMDAsIGJ1dCBoYXMgc29tZSBhZGRpdGlvbmFsIGp1bXBlcnMgSSBkb24ndCBrbm93IHRoZSBtZWFuaW5nIG9mLgorCisgICAgICAgICAgICAgICBfXworICAgICAgICAgICAgICB8ICB8CisgICBfX19fX19fX19fX3xfX3xfX19fX19fX19fX19fX19fX19fX19fX19fCisgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgfCBCTkMgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgIHxfX19fX198ICAgICAgICAgICAgICAgICAgICBfX198CisgIHwgIF9fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICB8X19fICAKKyAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8CisgIHwgfCBIeWJyaWQgSUMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIG98byBKMSAgIHwKKyAgfCB8X19fX19fX19fX19fX19fX19fX19ffCAgICAgICA4fDggICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOHw4IEo1ICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG98byAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggICAgICB8CisgIHxfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOHw4ICAgICAgfAorICh8X198IExFRCAgICAgICAgICAgICAgICAgICAgICAgIG98byAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOHw4IEoxNSAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgX19fX18gICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgIF9fX19fICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHwgIF9fX3wKKyAgfCAgICAgICAgICAgICAgICAgICB8ICAgICB8ICB8ICAgICB8IHwgICAgCisgIHwgIF9fX19fICAgICAgICAgICAgfCBST00gfCAgfCBVRlMgfCB8ICAgIAorICB8IHwgICAgIHwgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHwgICAgIHwgICAgIF9fXyAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHwgICAgIHwgICAgfCAgIHwgIHxfXy5fX3wgIHxfXy5fX3wgfCAgIAorICB8IHwgTkNSIHwgICAgfFhUTHwgICBfX19fXyAgICBfX19fXyAgfCAgIAorICB8IHwgICAgIHwgICAgfF9fX3wgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHw5MEMyNnwgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHwgICAgIHwgICAgICAgICAgIHwgUkFNIHwgIHwgVUZTIHwgfCAgIAorICB8IHwgICAgIHwgSjE3IG98byAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHwgICAgIHwgSjE2IG98byAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHxfXy5fX3wgICAgICAgICAgIHxfXy5fX3wgIHxfXy5fX3wgfCAgIAorICB8ICBfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHwgICB8OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHxTVzJ8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHxfX198MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8ICBfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHwgICB8MTAgICAgICAgICAgIEoxOCBvfG8gICAgICAgICAgfCAgIAorICB8IHwgICB8ICAgICAgICAgICAgICAgICBvfG8gICAgICAgICAgfCAgIAorICB8IHxTVzF8ICAgICAgICAgICAgICAgICBvfG8gICAgICAgICAgfCAgIAorICB8IHwgICB8ICAgICAgICAgICAgIEoyMSBvfG8gICAgICAgICAgfCAgIAorICB8IHxfX198MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffCAgIAorCisKK0xlZ2VuZDoKKworOTBDMjYgICAgICAgQVJDTkVUIENoaXAKK1hUTCAgICAgICAgIDIwIE1IeiBDcnlzdGFsCitTVzEgMS02ICAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorICAgIDctMTAgICAgTWVtb3J5IEFkZHJlc3MgU2VsZWN0CitTVzIgMS04ICAgICBOb2RlIElEIFNlbGVjdCAoSUQwLUlENykKK0oxLUo1ICAgICAgIElSUSBTZWxlY3QKK0o2LUoyMSAgICAgIFVua25vd24gKFByb2JhYmx5IGV4dHJhIHRpbWVvdXRzICYgUk9NIGVuYWJsZSAuLi4pCitMRUQxICAgICAgICBBY3Rpdml0eSBMRUQgCitCTkMgICAgICAgICBDb2F4IGNvbm5lY3RvciAoU1RBUiBBUkNuZXQpCitSQU0gICAgICAgICAyayBvZiBTUkFNCitST00gICAgICAgICBCb290IFJPTSBzb2NrZXQKK1VGUyAgICAgICAgIFVuaWRlbnRpZmllZCBGbHlpbmcgU29ja2V0cworCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZSBhdHRhY2hlZAordG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3Qgbm90IGJlIDAuCitTd2l0Y2ggMSAoSUQwKSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworU2V0dGluZyBvbmUgb2YgdGhlIHN3aXRjaGVzIHRvIE9GRiBtZWFucyAiMSIsIE9OIG1lYW5zICIwIi4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCAgIDEKKyAgICAgMiAgICB8ICAgMgorICAgICAzICAgIHwgICA0CisgICAgIDQgICAgfCAgIDgKKyAgICAgNSAgICB8ICAxNgorICAgICA2ICAgIHwgIDMyCisgICAgIDcgICAgfCAgNjQKKyAgICAgOCAgICB8IDEyOAorCitEb24ndCBzZXQgdGhpcyB0byAwIG9yIDI1NTsgdGhlc2UgdmFsdWVzIGFyZSByZXNlcnZlZC4KKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzd2l0Y2hlcyAxIHRvIDYgb2Ygc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiAzMiBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZXMKKyAgIAorICAgICAgICAgIHwgSGV4CisgICBTd2l0Y2ggfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCAyMDAgIAorICAgICAyICAgIHwgMTAwICAKKyAgICAgMyAgICB8ICA4MCAgCisgICAgIDQgICAgfCAgNDAgIAorICAgICA1ICAgIHwgIDIwICAKKyAgICAgNiAgICB8ICAxMCAKKworVGhlIEkvTyBhZGRyZXNzIGlzIHN1bSBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIi4gUmVtZW1iZXIgdGhhdAordGhlIEkvTyBhZGRyZXNzIHNwYWNlIGJlbGxvdyAweDIwMCBpcyBSRVNFUlZFRCBmb3IgbWFpbmJvYXJkLCBzbworc3dpdGNoIDEgc2hvdWxkIGJlIEFMV0FZUyBTRVQgVE8gT0ZGLiAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZQorbG9jYXRlZCBpbiBhbnkgb2Ygc2l4dGVlbiBwb3NpdGlvbnMuIEhvd2V2ZXIsIHRoZSBhZGRyZXNzZXMgYmVsb3cKK0EwMDAwIGFyZSBsaWtlbHkgdG8gY2F1c2Ugc3lzdGVtIGhhbmcgYmVjYXVzZSB0aGVyZSdzIG1haW4gUkFNLgorCitKdW1wZXJzIDctMTAgb2Ygc3dpdGNoIGJsb2NrIFNXMSBzZWxlY3QgdGhlIE1lbW9yeSBCYXNlIGFkZHJlc3MuCisKKyAgIFN3aXRjaCAgICAgICAgICB8IEhleCBSQU0KKyAgICA3ICAgOCAgIDkgIDEwICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tCisgICBPRkYgT0ZGIE9GRiBPRkYgfCAgRjAwMDAgKGNvbmZsaWN0cyB3aXRoIG1haW4gQklPUykKKyAgIE9GRiBPRkYgT0ZGIE9OICB8ICBFMDAwMCAKKyAgIE9GRiBPRkYgT04gIE9GRiB8ICBEMDAwMAorICAgT0ZGIE9GRiBPTiAgT04gIHwgIEMwMDAwIChjb25mbGljdHMgd2l0aCB2aWRlbyBCSU9TKQorICAgT0ZGIE9OICBPRkYgT0ZGIHwgIEIwMDAwIChjb25mbGljdHMgd2l0aCBtb25vIHZpZGVvKQorICAgT0ZGIE9OICBPRkYgT04gIHwgIEEwMDAwIChjb25mbGljdHMgd2l0aCBncmFwaGljcykKKworCitTZXR0aW5nIHRoZSBJbnRlcnJ1cHQgTGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSnVtcGVycyAxLTUgb2YgdGhlIGp1bXBlciBibG9jayBKMSBjb250cm9sIHRoZSBJUlEgbGV2ZWwuIE9OIG1lYW5zIAorc2hvcnRlZCwgT0ZGIG1lYW5zIG9wZW4uCisKKyAgICBKdW1wZXIgICAgICAgICAgICAgIHwgIElSUQorICAgIDEgICAyICAgMyAgIDQgICA1ICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgNworICAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgfCAgNQorICAgIE9GRiBPRkYgT04gIE9GRiBPRkYgfCAgNAorICAgIE9GRiBPRkYgT0ZGIE9OICBPRkYgfCAgMworICAgIE9GRiBPRkYgT0ZGIE9GRiBPTiAgfCAgMgorCisKK1Vua25vd24ganVtcGVycyAmIHNvY2tldHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSSBrbm93IG5vdGhpbmcgYWJvdXQgdGhlc2UuIEkganVzdCBndWVzcyB0aGF0IEoxNiZKMTcgYXJlIHRpbWVvdXQKK2p1bXBlcnMgYW5kIG1heWJlIG9uZSBvZiBKMTgtSjIxIHNlbGVjdHMgUk9NLiBBbHNvIEo2LUoxMCBhbmQKK0oxMS1KMTUgYXJlIGNvbm5lY3RpbmcgSVJRMi03IHRvIHNvbWUgcGlucyBvbiB0aGUgVUZTcy4gSSBjYW4ndAorZ3Vlc3MgdGhlIHB1cnBvc2UuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogRGF0YXBvaW50PyAqKgorTEFOLUFSQy04LCBhbiA4LWJpdCBjYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisKK1RoaXMgaXMgYW5vdGhlciBTTUMgOTBDNjUtYmFzZWQgQVJDbmV0IGNhcmQuIEkgY291bGRuJ3QgaWRlbnRpZnkgdGhlCittYW51ZmFjdHVyZXIsIGJ1dCBpdCBtaWdodCBiZSBEYXRhUG9pbnQsIGJlY2F1c2UgdGhlIGNhcmQgaGFzIHRoZQorb3JpZ2luYWwgYXJjTmV0IGxvZ28gaW4gaXRzIHVwcGVyIHJpZ2h0IGNvcm5lci4KKworICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICBTVzIgICB8IE9OICAgICAgYXJjTmV0ICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX3wgT0ZGICAgICAgICAgICAgIF9fX3wKKyAgICAgICAgIHwgIF9fX19fX19fX19fX18gICAgICAgICAxIF9fX19fXyAgOCAgICAgICAgICAgICAgICB8ICAgfCA4ICAKKyAgICAgICAgIHwgfCAgICAgICAgICAgICB8IFNXMSAgICAgfCBYVEFMIHwgX19fX19fX19fX19fICAgICB8IFMgfCAgICAKKyAgICAgICAgIHwgPiBSQU0gKDJrKSAgICB8ICAgICAgICAgfF9fX19fX3x8ICAgICAgICAgICAgfCAgICB8IFcgfCAgICAKKyAgICAgICAgIHwgfF9fX19fX19fX19fX198ICAgICAgICAgICAgICAgICB8ICAgICAgSCAgICAgfCAgICB8IDMgfCAgICAKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX198X19fX18geSAgICAgfCAgICB8X19ffCAxICAKKyAgICAgICAgIHwgIF9fX19fX19fXyAgICAgICAgICAgIHwgICAgICAgICB8ICAgICB8YiAgICAgfCAgICAgICAgfCAgICAKKyAgICAgICAgIHwgfF9fX19fX19fX3wgICAgICAgICAgIHwgICAgICAgICB8ICAgICB8ciAgICAgfCAgICAgICAgfCAgICAKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIFNNQyB8ICAgICB8aSAgICAgfCAgICAgICAgfCAgICAKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOTBDNjV8ICAgICB8ZCAgICAgfCAgICAgICAgfCAgICAgIAorICAgICAgICAgfCAgX19fX19fX19fICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIHwgICAgICB8ICAgICAgICB8CisgICAgICAgICB8IHwgICBTVzEgICB8IE9OICAgICAgICB8ICAgICAgICAgfCAgICAgfEkgICAgIHwgICAgICAgIHwKKyAgICAgICAgIHwgfF9fX19fX19fX3wgT0ZGICAgICAgIHxfX19fX19fX198X19fX18vQyAgICAgfCAgIF9fX19ffAorICAgICAgICAgfCAgMSAgICAgICA4ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICB8ICAgICB8X19fCisgICAgICAgICB8ICBfX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgIHwgQk5DIHxfX198CisgICAgICAgICB8IHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX3wgIHxfX19fX3wKKyAgICAgICAgIHwgPiBFUFJPTSBTT0NLRVQgfCAgICAgICAgICAgICAgX19fX19fX19fX19fXyAgICAgICAgICAgfAorICAgICAgICAgfCB8X19fX19fX19fX19fX198ICAgICAgICAgICAgIHxfX19fX19fX19fX19ffCAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKKzkwQzY1ICAgICAgIEFSQ05FVCBDaGlwIAorU1cxIDEtNTogICAgQmFzZSBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKKyAgICA2LTg6ICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CitTVzIgMS04OiAgICBOb2RlIElEIFNlbGVjdAorU1czIDEtNTogICAgSVJRIFNlbGVjdCAgIAorICAgIDYtNzogICAgRXh0cmEgVGltZW91dAorICAgIDggIDogICAgUk9NIEVuYWJsZSAgIAorQk5DICAgICAgICAgQ29heCBjb25uZWN0b3IKK1hUQUwgICAgICAgIDIwIE1IeiBDcnlzdGFsCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gU1czIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlIGF0dGFjaGVkCit0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBub3QgYmUgMC4KK1N3aXRjaCAxIHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIgIAorVGhlc2UgdmFsdWVzIGFyZToKKworICAgU3dpdGNoIHwgVmFsdWUKKyAgIC0tLS0tLS18LS0tLS0tLQorICAgICAxICAgIHwgICAxCisgICAgIDIgICAgfCAgIDIKKyAgICAgMyAgICB8ICAgNAorICAgICA0ICAgIHwgICA4CisgICAgIDUgICAgfCAgMTYKKyAgICAgNiAgICB8ICAzMgorICAgICA3ICAgIHwgIDY0CisgICAgIDggICAgfCAxMjgKKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IHRocmVlIHN3aXRjaGVzIGluIHN3aXRjaCBibG9jayBTVzEgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworCisgICBTd2l0Y2ggICAgICB8IEhleCBJL08KKyAgICA2ICAgNyAgIDggIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tfC0tLS0tLS0tCisgICBPTiAgT04gIE9OICB8ICAyNjAKKyAgIE9GRiBPTiAgT04gIHwgIDI5MAorICAgT04gIE9GRiBPTiAgfCAgMkUwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIE9GRiBPRkYgT04gIHwgIDJGMAorICAgT04gIE9OICBPRkYgfCAgMzAwCisgICBPRkYgT04gIE9GRiB8ICAzNTAKKyAgIE9OICBPRkYgT0ZGIHwgIDM4MAorICAgT0ZGIE9GRiBPRkYgfCAgM0UwCisKKworU2V0dGluZyB0aGUgQmFzZSBNZW1vcnkgKFJBTSkgYnVmZmVyIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIChSQU0pIHJlcXVpcmVzIDJLLiBUaGUgYmFzZSBvZiB0aGlzIGJ1ZmZlciBjYW4gYmUgCitsb2NhdGVkIGluIGFueSBvZiBlaWdodCBwb3NpdGlvbnMuIFRoZSBhZGRyZXNzIG9mIHRoZSBCb290IFByb20gaXMKK21lbW9yeSBiYXNlICsgMHgyMDAwLgorSnVtcGVycyAzLTUgb2Ygc3dpdGNoIGJsb2NrIFNXMSBzZWxlY3QgdGhlIE1lbW9yeSBCYXNlIGFkZHJlc3MuCisKKyAgIFN3aXRjaCAgICAgICAgICAgICAgfCBIZXggUkFNIHwgSGV4IFJPTQorICAgIDEgICAyICAgMyAgIDQgICA1ICB8IEFkZHJlc3MgfCBBZGRyZXNzICopCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIE9OICBPTiAgfCAgQzAwMDAgIHwgIEMyMDAwCisgICBPTiAgT04gIE9GRiBPTiAgT04gIHwgIEM0MDAwICB8ICBDNjAwMAorICAgT04gIE9OICBPTiAgT0ZGIE9OICB8ICBDQzAwMCAgfCAgQ0UwMDAKKyAgIE9OICBPTiAgT0ZGIE9GRiBPTiAgfCAgRDAwMDAgIHwgIEQyMDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIE9OICBPTiAgT04gIE9OICBPRkYgfCAgRDQwMDAgIHwgIEQ2MDAwCisgICBPTiAgT04gIE9GRiBPTiAgT0ZGIHwgIEQ4MDAwICB8ICBEQTAwMAorICAgT04gIE9OICBPTiAgT0ZGIE9GRiB8ICBEQzAwMCAgfCAgREUwMDAKKyAgIE9OICBPTiAgT0ZGIE9GRiBPRkYgfCAgRTAwMDAgIHwgIEUyMDAwCisgIAorKikgVG8gZW5hYmxlIHRoZSBCb290IFJPTSBzZXQgdGhlIHN3aXRjaCA4IG9mIHN3aXRjaCBibG9jayBTVzMgdG8gcG9zaXRpb24gT04uCisKK1RoZSBzd2l0Y2hlcyAxIGFuZCAyIHByb2JhYmx5IGFkZCAweDA4MDAgYW5kIDB4MTAwMCB0byBSQU0gYmFzZSBhZGRyZXNzLgorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTd2l0Y2hlcyAxLTUgb2YgdGhlIHN3aXRjaCBibG9jayBTVzMgY29udHJvbCB0aGUgSVJRIGxldmVsLgorCisgICAgSnVtcGVyICAgICAgICAgICAgICB8ICBJUlEKKyAgICAxICAgMiAgIDMgICA0ICAgNSAgIHwKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBPTiAgT0ZGIE9GRiBPRkYgT0ZGIHwgIDMKKyAgICBPRkYgT04gIE9GRiBPRkYgT0ZGIHwgIDQKKyAgICBPRkYgT0ZGIE9OICBPRkYgT0ZGIHwgIDUKKyAgICBPRkYgT0ZGIE9GRiBPTiAgT0ZGIHwgIDcKKyAgICBPRkYgT0ZGIE9GRiBPRkYgT04gIHwgIDIKKworCitTZXR0aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3dpdGNoZXMgNi03IG9mIHRoZSBzd2l0Y2ggYmxvY2sgU1czIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGltZW91dAorcGFyYW1ldGVycy4gIFRoZXNlIHR3byBzd2l0Y2hlcyBhcmUgbm9ybWFsbHkgbGVmdCBpbiB0aGUgT0ZGIHBvc2l0aW9uLgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFRvcHdhcmUgKioKKzgtYml0IGNhcmQsIFRBLUFSQy8xMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKworVGhpcyBpcyBhbm90aGVyIHZlcnkgc2ltaWxhciA5MEM2NSBjYXJkLiBNb3N0IG9mIHRoZSBzd2l0Y2hlcyBhbmQganVtcGVycworYXJlIHRoZSBzYW1lIGFzIG9uIG90aGVyIGNsb25lcy4KKworIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworfCAgX19fX19fX19fX18gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBfX19fX18gICAgICAgIHwKK3wgfFNXMiBOT0RFIElEfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IFhUQUwgfCAgICAgICB8Cit8IHxfX19fX19fX19fX3wgIHwgIEh5YnJpZCBJQyAgICAgICAgICAgICAgfCAgICAgICAgICAgfF9fX19fX3wgICAgICAgfAorfCAgX19fX19fX19fX18gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBfX3wgICAgCit8IHxTVzEgTUVNK0kvT3wgIHxfX19fX19fX19fX19fX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICBMRUQxfF9ffCkgICAKK3wgfF9fX19fX19fX19ffCAgICAgICAgICAgMSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAKK3wgICAgICAgICAgICAgICAgICAgICBKMyB8b3xvfCBUSU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX198ICAgIAorfCAgICAgX19fX19fX19fX19fX18gICAgIHxvfG98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgICAgCit8ICAgIHwgICAgICAgICAgICAgIHwgIF9fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICB8IFJKICAgfCAgICAKK3wgICAgPiBFUFJPTSBTT0NLRVQgfCB8ICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgIHwtLS0tLS18ICAgICAKK3xKMiAgfF9fX19fX19fX19fX19ffCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICB8ICAgIAorfHxvfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfF9fX19fX3wKK3x8b3wgUk9NIEVOQUJMRSAgICAgICB8ICAgICAgICBTTUMgICAgICAgICB8ICAgIF9fX19fX19fXyAgICAgICAgICAgICB8Cit8ICAgICBfX19fX19fX19fX19fICAgfCAgICAgICA5MEM2NSAgICAgICAgfCAgIHxfX19fX19fX198ICAgICAgIF9fX19ffCAgICAKK3wgICAgfCAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICB8X19fIAorfCAgICA+IFJBTSAoMmspICAgIHwgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgQk5DIHxfX198Cit8ICAgIHxfX19fX19fX19fX19ffCAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfF9fX19ffCAgICAKK3wgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIAorfCBfX19fX19fXyBJUlEgMiAzIDQgNSA3ICAgICAgICAgICAgICAgICAgX19fX19fX19fX18gICAgICAgICAgICAgICAgIHwKK3x8X19fX19fX198ICAgfG98b3xvfG98b3wgICAgICAgICAgICAgICAgfF9fX19fX19fX19ffCAgICAgICAgICAgICAgICB8Cit8X19fX19fX18gICBKMXxvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisKK0xlZ2VuZDoKKworOTBDNjUgICAgICAgQVJDTkVUIENoaXAKK1hUQUwgICAgICAgIDIwIE1IeiBDcnlzdGFsCitTVzEgMS01ICAgICBCYXNlIE1lbW9yeSBBZGRyZXNzIFNlbGVjdAorICAgIDYtOCAgICAgQmFzZSBJL08gQWRkcmVzcyBTZWxlY3QKK1NXMiAxLTggICAgIE5vZGUgSUQgU2VsZWN0IChJRDAtSUQ3KQorSjEgICAgICAgICAgSVJRIFNlbGVjdAorSjIgICAgICAgICAgUk9NIEVuYWJsZQorSjMgICAgICAgICAgRXh0cmEgVGltZW91dAorTEVEMSAgICAgICAgQWN0aXZpdHkgTEVEIAorQk5DICAgICAgICAgQ29heCBjb25uZWN0b3IgKEJVUyBBUkNuZXQpCitSSiAgICAgICAgICBUd2lzdGVkIFBhaXIgQ29ubmVjdG9yIChkYWlzeSBjaGFpbikKKworCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBTVzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELiBFYWNoIG5vZGUgYXR0YWNoZWQgdG8KK3RoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaCBtdXN0IG5vdCBiZSAwLiAgU3dpdGNoIDEgKElEMCkKK3NlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgIFN3aXRjaCB8IExhYmVsIHwgVmFsdWUKKyAgIC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCBJRDAgICB8ICAgMQorICAgICAyICAgIHwgSUQxICAgfCAgIDIKKyAgICAgMyAgICB8IElEMiAgIHwgICA0CisgICAgIDQgICAgfCBJRDMgICB8ICAgOAorICAgICA1ICAgIHwgSUQ0ICAgfCAgMTYKKyAgICAgNiAgICB8IElENSAgIHwgIDMyCisgICAgIDcgICAgfCBJRDYgICB8ICA2NAorICAgICA4ICAgIHwgSUQ3ICAgfCAxMjgKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlOgorCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDYgICA3ICAgOCAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPRkYgT04gIE9OICB8ICAyOTAKKyAgIE9OICBPRkYgT04gIHwgIDJFMCAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIE9GRiBPRkYgT04gIHwgIDJGMAorICAgT04gIE9OICBPRkYgfCAgMzAwCisgICBPRkYgT04gIE9GRiB8ICAzNTAKKyAgIE9OICBPRkYgT0ZGIHwgIDM4MAorICAgT0ZGIE9GRiBPRkYgfCAgM0UwCisKKworU2V0dGluZyB0aGUgQmFzZSBNZW1vcnkgKFJBTSkgYnVmZmVyIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIChSQU0pIHJlcXVpcmVzIDJLLiBUaGUgYmFzZSBvZiB0aGlzIGJ1ZmZlciBjYW4gYmUKK2xvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4gVGhlIGFkZHJlc3Mgb2YgdGhlIEJvb3QgUHJvbSBpcworbWVtb3J5IGJhc2UgKyAweDIwMDAuCitKdW1wZXJzIDMtNSBvZiBzd2l0Y2ggYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgMSAgIDIgICAzICAgNCAgIDUgIHwgQWRkcmVzcyB8IEFkZHJlc3MgKikKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT04gIE9OICBPTiAgT04gIE9OICB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPTiAgfCAgQzQwMDAgIHwgIEM2MDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkgCisgICBPTiAgT04gIE9OICBPRkYgT04gIHwgIENDMDAwICB8ICBDRTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9OICB8ICBEMDAwMCAgfCAgRDIwMDAgIAorICAgT04gIE9OICBPTiAgT04gIE9GRiB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPRkYgfCAgRDgwMDAgIHwgIERBMDAwCisgICBPTiAgT04gIE9OICBPRkYgT0ZGIHwgIERDMDAwICB8ICBERTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9GRiB8ICBFMDAwMCAgfCAgRTIwMDAKKworKikgVG8gZW5hYmxlIHRoZSBCb290IFJPTSBzaG9ydCB0aGUganVtcGVyIEoyLgorCitUaGUganVtcGVycyAxIGFuZCAyIHByb2JhYmx5IGFkZCAweDA4MDAgYW5kIDB4MTAwMCB0byBSQU0gYWRkcmVzcy4KKworCitTZXR0aW5nIHRoZSBJbnRlcnJ1cHQgTGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSnVtcGVycyAxLTUgb2YgdGhlIGp1bXBlciBibG9jayBKMSBjb250cm9sIHRoZSBJUlEgbGV2ZWwuICBPTiBtZWFucworc2hvcnRlZCwgT0ZGIG1lYW5zIG9wZW4uCisKKyAgICBKdW1wZXIgICAgICAgICAgICAgIHwgIElSUQorICAgIDEgICAyICAgMyAgIDQgICA1ICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgMgorICAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgfCAgMworICAgIE9GRiBPRkYgT04gIE9GRiBPRkYgfCAgNAorICAgIE9GRiBPRkYgT0ZGIE9OICBPRkYgfCAgNQorICAgIE9GRiBPRkYgT0ZGIE9GRiBPTiAgfCAgNworCisKK1NldHRpbmcgdGhlIFRpbWVvdXQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXJzIEozIGFyZSB1c2VkIHRvIHNldCB0aGUgdGltZW91dCBwYXJhbWV0ZXJzLiBUaGVzZSB0d28gCitqdW1wZXJzIGFyZSBub3JtYWxseSBsZWZ0IG9wZW4uCisKKyAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBUaG9tYXMtQ29ucmFkICoqCitNb2RlbCAjNTAwLTYyNDItMDA5NyBSRVYgQSAoOC1iaXQgY2FyZCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gTGFycyBLYXJsc3NvbiA8MTAwNjE3LjM0NzNAY29tcHVzZXJ2ZS5jb20+CisKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIHwgICAgICAgICAgX19fX19fX18gICBfX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fXworICAgfCAgICAgICAgIHwuLi4uLi4uLnwgfC4uLi4uLi4ufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgfF9fX19fX19ffCB8X19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICAgICBTVyAzICAgICAgIFNXIDEgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorICAgfCAgICAgICAgIEJhc2UgSS9PICAgQmFzZSBBZGRyLiAgICAgICAgICAgICAgICBTdGF0aW9uIHwgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgfCAgIHwKKyAgIHwgICAgX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICB8ICAgfAorICAgfCAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8CisgICB8ICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX3wgICAgCisgICB8ICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX18gICAgICAgIHxfX18uXworICAgfCAgIHxfX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX19ffCAgICAgICAgIF9fX198IEJOQworICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVtcGVyLSAgICAgICAgX19fX198IENvbm5lY3RvcgorICAgfCAgIE1haW4gY2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgIF8gICAgX198ICAgJyAgCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgIHwgICAgUkogQ29ubmVjdG9yCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X3wgIHwgICAgd2l0aCAxMTAgT2htCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfXyAgVGVybWluYXRvcgorICAgfCAgICBfX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX198CisgICB8ICAgfC4uLi4uLi4uLi4ufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgUkotamFjaworICAgfCAgIHwuLi4uLi4uLi4uLnwgICAgX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICh1bnVzZWQpCisgICB8ICAgfF9fX19fX19fX19ffCAgIHxfX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfXworICAgfCAgQm9vdCBQUk9NIHNvY2tldCBJUlEtanVtcGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XyAgRGlhZ25vc3RpYworICAgfF9fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX18gICAgICAgICAgX3wgTEVEIChyZWQpCisgICAgICAgICAgICB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCAgfF9fX19fX19ffAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworQW5kIGhlcmUgYXJlIHRoZSBzZXR0aW5ncyBmb3Igc29tZSBvZiB0aGUgc3dpdGNoZXMgYW5kIGp1bXBlcnMgb24gdGhlIGNhcmRzLgorCisKKyAgICAgICAgICBJL08KKworICAgICAgICAgMSAyIDMgNCA1IDYgNyA4CisKKzJFMC0tLS0tIDAgMCAwIDEgMCAwIDAgMQorMkYwLS0tLS0gMCAwIDAgMSAwIDAgMCAwCiszMDAtLS0tLSAwIDAgMCAwIDEgMSAxIDEKKzM1MC0tLS0tIDAgMCAwIDAgMSAxIDEgMAorCisiMCIgaW4gdGhlIGFib3ZlIGV4YW1wbGUgbWVhbnMgc3dpdGNoIGlzIG9mZiAiMSIgbWVhbnMgdGhhdCBpdCBpcyBvbi4KKworCisgICAgU2hNZW0gYWRkcmVzcy4KKworICAgICAgMSAyIDMgNCA1IDYgNyA4CisKK0NYMDAtLTAgMCAxIDEgfCB8ICAgfAorRFgwMC0tMCAwIDEgMCAgICAgICB8CitYMDAwLS0tLS0tLS0tIDEgMSAgIHwKK1g0MDAtLS0tLS0tLS0gMSAwICAgfAorWDgwMC0tLS0tLS0tLSAwIDEgICB8CitYQzAwLS0tLS0tLS0tIDAgMCAgIAorRU5IQU5DRUQtLS0tLS0tLS0tLSAxCitDT01QQVRJQkxFLS0tLS0tLS0tIDAKKworCisgICAgICAgSVJRCisKKworICAgMyA0IDUgNyAyCisgICAuIC4gLiAuIC4KKyAgIC4gLiAuIC4gLgorCisKK1RoZXJlIGlzIGEgRElQLXN3aXRjaCB3aXRoIDggc3dpdGNoZXMsIHVzZWQgdG8gc2V0IHRoZSBzaGFyZWQgbWVtb3J5IGFkZHJlc3MKK3RvIGJlIHVzZWQuIFRoZSBmaXJzdCA2IHN3aXRjaGVzIHNldCB0aGUgYWRkcmVzcywgdGhlIDd0aCBkb2Vzbid0IGhhdmUgYW55CitmdW5jdGlvbiwgYW5kIHRoZSA4dGggc3dpdGNoIGlzIHVzZWQgdG8gc2VsZWN0ICJjb21wYXRpYmxlIiBvciAiZW5oYW5jZWQiLgorV2hlbiBJIGdvdCBteSB0d28gY2FyZHMsIG9uZSBvZiB0aGVtIGhhZCB0aGlzIHN3aXRjaCBzZXQgdG8gImVuaGFuY2VkIi4gVGhhdAorY2FyZCBkaWRuJ3Qgd29yayBhdCBhbGwsIGl0IHdhc24ndCBldmVuIHJlY29nbml6ZWQgYnkgdGhlIGRyaXZlci4gVGhlIG90aGVyCitjYXJkIGhhZCB0aGlzIHN3aXRjaCBzZXQgdG8gImNvbXBhdGlibGUiIGFuZCBpdCBiZWhhdmVkIGFic29sdXRlbHkgbm9ybWFsbHkuIEkKK2d1ZXNzIHRoYXQgdGhlIHN3aXRjaCBvbiBvbmUgb2YgdGhlIGNhcmRzLCBtdXN0IGhhdmUgYmVlbiBjaGFuZ2VkIGFjY2lkZW50YWxseQord2hlbiB0aGUgY2FyZCB3YXMgdGFrZW4gb3V0IG9mIGl0cyBmb3JtZXIgaG9zdC4gVGhlIHF1ZXN0aW9uIHJlbWFpbnMKK3VuYW5zd2VyZWQsIHdoYXQgaXMgdGhlIHB1cnBvc2Ugb2YgdGhlICJlbmhhbmNlZCIgcG9zaXRpb24/CisKK1tBdmVyeSdzIG5vdGU6ICJlbmhhbmNlZCIgcHJvYmFibHkgZWl0aGVyIGRpc2FibGVzIHNoYXJlZCBtZW1vcnkgKHVzZSBJTworcG9ydHMgaW5zdGVhZCkgb3IgZGlzYWJsZXMgSU8gcG9ydHMgKHVzZSBtZW1vcnkgYWRkcmVzc2VzIGluc3RlYWQpLiAgVGhpcwordmFyaWVzIGJ5IHRoZSB0eXBlIG9mIGNhcmQgaW52b2x2ZWQuICBJIGZhaWwgdG8gc2VlIGhvdyBlaXRoZXIgb2YgdGhlc2UKK2VuaGFuY2UgYW55dGhpbmcuICBTZW5kIG1lIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtb2RlLCBvcgoranVzdCB1c2UgImNvbXBhdGlibGUiIG1vZGUgaW5zdGVhZC5dCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogV2F0ZXJsb28gTWljcm9zeXN0ZW1zIEluYy4gPz8gKioKKzgtYml0IGNhcmQgKEMpIDE5ODUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIFJvYmVydCBNaWNoYWVsIEJlc3QgPHJtYjExN0Bjcy51c2Fzay5jYT4KKworW0F2ZXJ5J3Mgbm90ZTogdGhlc2UgZG9uJ3Qgd29yayB3aXRoIG15IGRyaXZlciBmb3Igc29tZSByZWFzb24uICBUaGVzZSBjYXJkcworU0VFTSB0byBoYXZlIHNldHRpbmdzIHNpbWlsYXIgdG8gdGhlIFBESTUwOFBsdXMsIHdoaWNoIGlzCitzb2Z0d2FyZS1jb25maWd1cmVkIGFuZCBkb2Vzbid0IHdvcmsgd2l0aCBteSBkcml2ZXIgZWl0aGVyLiAgVGhlICJXYXRlcmxvbworY2hpcCIgaXMgYSBib290IFBST00sIHByb2JhYmx5IGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgdGhlIFVuaXZlcnNpdHkgb2YKK1dhdGVybG9vLiAgSWYgeW91IGhhdmUgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjYXJkLCBwbGVhc2UKK2UtbWFpbCBtZS5dCisKK1RoZSBwcm9iZSBoYXMgbm90IGJlZW4gYWJsZSB0byBkZXRlY3QgdGhlIGNhcmQgb24gYW55IG9mIHRoZSBKMiBzZXR0aW5ncywKK2FuZCBJIHRyaWVkIHRoZW0gYWdhaW4gd2l0aCB0aGUgIldhdGVybG9vIiBjaGlwIHJlbW92ZWQuCisgCisgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCit8IFwvICBcLyAgICAgICAgICAgICAgX19fICBfXyBfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBDNCAgQzQgICAgIHxefCAgICAgfCBNIHx8ICBeICB8fF58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgLS0gIC0tICAgICB8X3wgICAgIHwgNSB8fCAgICAgfHwgfCBDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFwvICBcLyAgICAgIEMxMCAgICB8X19ffHwgICAgIHx8X3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKK3wgQzQgIEM0ICAgICAgICAgICAgIF8gIF8gfCAgICAgfCAgICAgICAgICAgICAgICAgPz8gICAgICAgICAgICAgICAgICB8IAorfCAtLSAgLS0gICAgICAgICAgICB8IFwvIHx8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCit8ICAgICAgICAgICAgICAgICAgIHwgICAgfHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgQzEgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorfCAgICAgICAgICAgICAgICAgICB8ICAgIHx8ICAgICB8ICBcLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX3wgICAgCit8ICAgICAgICAgICAgICAgICAgIHwgQzYgfHwgICAgIHwgIEM5ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfF9fXyAKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgICAgfCAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJOQyB8X19ffCAKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgICAgfCAgICAgICAgICA+Qzd8ICAgICAgICAgICAgICAgICB8X19fX198Cit8ICAgICAgICAgICAgICAgICAgIHwgICAgfHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBfXyBfXyAgICAgICAgICAgICB8X19fX3x8X19fX198ICAgICAgIDEgMiAzICAgICA2ICAgICAgICAgICAgICAgICAgIHwKK3x8ICBeICB8ICAgICA+QzR8ICAgICAgICAgICAgICAgICAgICAgIHxvfG98b3xvfG98b3wgSjIgICAgPkM0fCAgICAgICB8Cit8fCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgfAorfHwgQzIgIHwgICAgID5DNHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+QzR8ICAgICAgIHwKK3x8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Qzh8ICAgICAgICAgICAgICAgICAgICAgICB8Cit8fCAgICAgfCAgICAgICAyIDMgNCA1IDYgNyAgSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgID5DNHwgICAgICAgfAorfHxfX19fX3wgICAgICB8b3xvfG98b3xvfG98IEozICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3xfX19fX19fICAgICAgfG98b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX198CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisKK0MxIC0tICJDT005MDI2CisgICAgICAgU01DIDg2MzgiCisgICAgICBJbiBhIGNoaXAgc29ja2V0LgorCitDMiAtLSAiQENvcHlyaWdodAorICAgICAgIFdhdGVybG9vIE1pY3Jvc3lzdGVtcyBJbmMuCisgICAgICAgMTk4NSIKKyAgICAgIEluIGEgY2hpcCBTb2NrZXQgd2l0aCBpbmZvIHByaW50ZWQgb24gYSBsYWJlbCBjb3ZlcmluZyBhIHJvdW5kIHdpbmRvdworICAgICAgc2hvd2luZyB0aGUgY2lyY3VpdCBpbnNpZGUuIChUaGUgd2luZG93IGluZGljYXRlcyBpdCBpcyBhbiBFUFJPTSBjaGlwLikKKworQzMgLS0gIkNPTTkwMzIKKyAgICAgICBTTUMgODY0MyIKKyAgICAgIEluIGEgY2hpcCBzb2NrZXQuCisKK0M0IC0tICI3NExTIgorICAgICAgOSB0b3RhbCBubyBzb2NrZXRzLgorCitNNSAtLSAiNTAwMDYtMTM2CisgICAgICAgMjAuMDAwMDAwIE1IWgorICAgICAgIE1UUS1UMS1TMworICAgICAgIDAgTS1UUk9OIDg2LTQwIgorICAgICAgTWV0YWxsaWMgY2FzZSB3aXRoIDQgcGlucywgbm8gc29ja2V0LgorCitDNiAtLSAiTU9TVEVLQFRDODY0MworICAgICAgIE1LNjExNk4tMjAKKyAgICAgICBNQUxBWVNJQSIKKyAgICAgIE5vIHNvY2tldC4KKworQzcgLS0gTm8gc3RhbXAgb3IgbGFiZWwgYnV0IGluIGEgMjAgcGluIGNoaXAgc29ja2V0LgorCitDOCAtLSAiUEFMMTBMOENOCisgICAgICAgODYyMyIKKyAgICAgIEluIGEgMjAgcGluIHNvY2tldC4KKworQzkgLS0gIlBBbDE2UjRBLTJDTgorICAgICAgIDg2NDEiCisgICAgICBJbiBhIDIwIHBpbiBzb2NrZXQuCisKK0MxMCAtLSAiTTg2NDAKKyAgICAgICAgICBOTUMKKyAgICAgICAgOTMwNk4iCisgICAgICAgSW4gYW4gOCBwaW4gc29ja2V0LgorCis/PyAtLSBTb21lIGNvbXBvbmVudHMgb24gYSBzbWFsbGVyIGJvYXJkIGFuZCBhdHRhY2hlZCB3aXRoIDIwIHBpbnMgYWxsIAorICAgICAgYWxvbmcgdGhlIHNpZGUgY2xvc2VzdCB0byB0aGUgQk5DIGNvbm5lY3Rvci4gIFRoZSBhcmUgY29hdGVkIGluIGEgZGFyayAKKyAgICAgIHJlc2luLgorCitPbiB0aGUgYm9hcmQgdGhlcmUgYXJlIHR3byBqdW1wZXIgYmFua3MgbGFiZWxlZCBKMiBhbmQgSjMuIFRoZSAKK21hbnVmYWN0dXJlciBkaWRuJ3QgcHV0IGEgSjEgb24gdGhlIGJvYXJkLiBUaGUgdHdvIGJvYXJkcyBJIGhhdmUgYm90aCAKK2NhbWUgd2l0aCBhIGp1bXBlciBib3ggZm9yIGVhY2ggYmFuay4KKworSjIgLS0gTnVtYmVyZWQgMSAyIDMgNCA1IDYuIAorICAgICAgNCBhbmQgNSBhcmUgbm90IHN0YW1wZWQgZHVlIHRvIHNvbGRlciBwb2ludHMuCisgICAgICAgCitKMyAtLSBJUlEgMiAzIDQgNSA2IDcKKworVGhlIGJvYXJkIGl0c2VsZiBoYXMgYSBtYXBsZSBsZWFmIHN0YW1wZWQganVzdCBhYm92ZSB0aGUgaXJxIGp1bXBlcnMgCithbmQgIi0yIDQ2LTg2IiBiZXNpZGUgQzIuIEJldHdlZW4gQzEgYW5kIEM2ICJBU1MgJ1kgMzAwMTYzIiBhbmQgIkAxOTg2IAorQ09STUFOIENVU1RPTSBFTEVDVFJPTklDUyBDT1JQLiIgc3RhbXBlZCBqdXN0IGJlbG93IHRoZSBCTkMgY29ubmVjdG9yLgorQmVsb3cgdGhhdCAiTUFERSBJTiBDQU5BREEiCisKKyAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBObyBOYW1lICoqCis4LWJpdCBjYXJkcywgMTYtYml0IGNhcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KKyAgCitOT05BTUUgOC1CSVQgQVJDTkVUCis9PT09PT09PT09PT09PT09PT09CisKK0kgaGF2ZSBuYW1lZCB0aGlzIEFSQ25ldCBjYXJkICJOT05BTUUiLCBzaW5jZSB0aGVyZSBpcyBubyBuYW1lIG9mIGFueQorbWFudWZhY3R1cmVyIG9uIHRoZSBJbnN0YWxsYXRpb24gbWFudWFsIG5vciBvbiB0aGUgc2hpcHBpbmcgYm94LiBUaGUgb25seQoraGludCB0byB0aGUgZXhpc3RlbmNlIG9mIGEgbWFudWZhY3R1cmVyIGF0IGFsbCBpcyB3cml0dGVuIGluIGNvcHBlciwKK2l0IGlzICJNYWRlIGluIFRhaXdhbiIKKworVGhpcyBkZXNjcmlwdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgordXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgT3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgIkFSQ25ldCBJbnN0YWxsYXRpb24gTWFudWFsIgorCisKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICB8IHxTVEFSfCBCVVN8IFQvUHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgfF9fX198X19fX3xfX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgU01DICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgQ09NOTBDNjUgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fLV9fX19fX19fX198ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX3wKKyAgIHwgICAgICBfX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgQ04gfAorICAgfCAgICAgfCBQUk9NICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX198CisgICB8ICAgICA+IFNPQ0tFVCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgIHxfX19fX19fX19fX19fX198ICAgICAgICAgMSAyIDMgNCA1IDYgNyA4ICAxIDIgMyA0IDUgNiA3IDggfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX18gIF9fX19fX19fX19fX19fXyB8CisgICB8ICAgICAgICAgICB8b3xvfG98b3xvfG98b3xvfCAgfCAgICAgIFNXMSAgICAgIHx8ICAgICAgU1cyICAgICAgfHwKKyAgIHwgICAgICAgICAgIHxvfG98b3xvfG98b3xvfG98ICB8X19fX19fX19fX19fX19ffHxfX19fX19fX19fX19fX198fAorICAgfF9fXyAgICAgICAgIDIgMyA0IDUgNyBFIEUgUiAgICAgICAgTm9kZSBJRCAgICAgICBJT0JfX3xfX01FTV9fX198CisgICAgICAgfCAgICAgICAgXCBJUlEgICAvIFQgVCBPICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICB8X19fX19fX19fX19fX19fX19fMV8yX01fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKK0NPTTkwQzY1OiAgICAgICBBUkNuZXQgUHJvYmUKK1MxICAxLTg6ICAgIE5vZGUgSUQgU2VsZWN0CitTMiAgMS0zOiAgICBJL08gQmFzZSBBZGRyZXNzIFNlbGVjdAorICAgIDQtNjogICAgTWVtb3J5IEJhc2UgQWRkcmVzcyBTZWxlY3QKKyAgICA3LTg6ICAgIFJBTSBPZmZzZXQgU2VsZWN0CitFVDEsIEVUMiAgICBFeHRlbmRlZCBUaW1lb3V0IFNlbGVjdAorUk9NICAgICBST00gRW5hYmxlIFNlbGVjdAorQ04gICAgICAgICAgICAgIFJHNjIgQ29heCBDb25uZWN0b3IKK1NUQVJ8IEJVUyB8IFQvUCBUaHJlZSBmaWVsZHMgZm9yIHBsYWNpbmcgYSBzaWduIChjb2xvcmVkIGNpcmNsZSkKKyAgICAgICAgICAgICAgICBpbmRpY2F0aW5nIHRoZSB0b3BvbG9neSBvZiB0aGUgY2FyZAorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFNXMSBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuCitFYWNoIG5vZGUgYXR0YWNoZWQgdG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoCittdXN0IGJlIGRpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggOCBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgICBTd2l0Y2ggfCBWYWx1ZQorICAgIC0tLS0tLS18LS0tLS0tLQorICAgICAgOCAgICB8ICAgMQorICAgICAgNyAgICB8ICAgMgorICAgICAgNiAgICB8ICAgNAorICAgICAgNSAgICB8ICAgOAorICAgICAgNCAgICB8ICAxNgorICAgICAgMyAgICB8ICAzMgorICAgICAgMiAgICB8ICA2NAorICAgICAgMSAgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoICAgICAgICAgfCBIZXggICAgIHwgRGVjaW1hbCAKKyAgIDEgMiAzIDQgNSA2IDcgOCB8IE5vZGUgSUQgfCBOb2RlIElECisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIDAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkCisgICAwIDAgMCAwIDAgMCAwIDEgfCAgICAxICAgIHwgICAgMSAKKyAgIDAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyCisgICAwIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMworICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NQorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAwIDEgMCAxIDAgfCAgIEFBICAgIHwgIDE3MAorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAKKyAgIDEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzCisgICAxIDEgMSAxIDEgMSAxIDAgfCAgIEZFICAgIHwgIDI1NAorICAgMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUKKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggZ3JvdXAgU1cyIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDEgICAyICAgMyAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT04gIE9OICBPRkYgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9GRiBPRkYgfCAgMkYwCisgICBPRkYgT04gIE9OICB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT0ZGIE9GRiBPTiAgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgcmVxdWlyZXMgMksgb2YgYSAxNksgYmxvY2sgb2YgUkFNLiBUaGUgYmFzZSBvZiB0aGlzCisxNksgYmxvY2sgY2FuIGJlIGxvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4KK1N3aXRjaGVzIDQtNiBvZiBzd2l0Y2ggZ3JvdXAgU1cyIHNlbGVjdCB0aGUgQmFzZSBvZiB0aGUgMTZLIGJsb2NrLgorV2l0aGluIHRoYXQgMTZLIGFkZHJlc3Mgc3BhY2UsIHRoZSBidWZmZXIgbWF5IGJlIGFzc2lnbmVkIGFueSBvbmUgb2YgZm91cgorcG9zaXRpb25zLCBkZXRlcm1pbmVkIGJ5IHRoZSBvZmZzZXQsIHN3aXRjaGVzIDcgYW5kIDggb2YgZ3JvdXAgU1cyLgorCisgICBTd2l0Y2ggICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgIDQgNSA2ICA3IDggfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICAwIDAgMCAgMCAwIHwgIEMwMDAwICB8ICBDMjAwMAorICAgMCAwIDAgIDAgMSB8ICBDMDgwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDAgfCAgQzEwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMSAxIHwgIEMxODAwICB8ICBDMjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAwIDEgIDAgMCB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAwIDEgfCAgQzQ4MDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAwIHwgIEM1MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDEgMSB8ICBDNTgwMCAgfCAgQzYwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwICAwIDAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICAwIDEgMCAgMCAxIHwgIENDODAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMCB8ICBDRDAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAxIDEgfCAgQ0Q4MDAgIHwgIENFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMSAgMCAwIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgMSAgMCAxIHwgIEQwODAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMCB8ICBEMTAwMCAgfCAgRDIwMDAKKyAgIDAgMSAxICAxIDEgfCAgRDE4MDAgIHwgIEQyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMCAgMCAwIHwgIEQ0MDAwICB8ICBENjAwMAorICAgMSAwIDAgIDAgMSB8ICBENDgwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDAgfCAgRDUwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMSAxIHwgIEQ1ODAwICB8ICBENjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgIDAgMCB8ICBEODAwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAwIDEgfCAgRDg4MDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAwIHwgIEQ5MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDEgMSB8ICBEOTgwMCAgfCAgREEwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAwICAwIDAgfCAgREMwMDAgIHwgIERFMDAwCisgICAxIDEgMCAgMCAxIHwgIERDODAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMCB8ICBERDAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAxIDEgfCAgREQ4MDAgIHwgIERFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDEgMSAgMCAwIHwgIEUwMDAwICB8ICBFMjAwMAorICAgMSAxIDEgIDAgMSB8ICBFMDgwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDAgfCAgRTEwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMSAxIHwgIEUxODAwICB8ICBFMjAwMAorICAKKyopIFRvIGVuYWJsZSB0aGUgOEsgQm9vdCBQUk9NIGluc3RhbGwgdGhlIGp1bXBlciBST00uCisgICBUaGUgZGVmYXVsdCBpcyBqdW1wZXIgUk9NIG5vdCBpbnN0YWxsZWQuCisKKworU2V0dGluZyBJbnRlcnJ1cHQgUmVxdWVzdCBMaW5lcyAoSVJRKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgc2V0IG9uZSAob25seSBvbmUhKSBvZiB0aGUganVtcGVycworSVJRMiwgSVJRMywgSVJRNCwgSVJRNSBvciBJUlE3LiBUaGUgbWFudWZhY3R1cmVyJ3MgZGVmYXVsdCBpcyBJUlEyLgorIAorCitTZXR0aW5nIHRoZSBUaW1lb3V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHR3byBqdW1wZXJzIGxhYmVsZWQgRVQxIGFuZCBFVDIgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0CitwYXJhbWV0ZXJzIChyZXNwb25zZSBhbmQgcmVjb25maWd1cmF0aW9uIHRpbWUpLiBFdmVyeSBub2RlIGluIGEgbmV0d29yaworbXVzdCBiZSBzZXQgdG8gdGhlIHNhbWUgdGltZW91dCB2YWx1ZXMuCisKKyAgIEVUMSBFVDIgfCBSZXNwb25zZSBUaW1lICh1cykgfCBSZWNvbmZpZ3VyYXRpb24gVGltZSAobXMpCisgICAtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgT2ZmIE9mZiB8ICAgICAgICA3OCAgICAgICAgICB8ICAgICAgICAgIDg0MCAgIChEZWZhdWx0KQorICAgT2ZmIE9uICB8ICAgICAgIDI4NSAgICAgICAgICB8ICAgICAgICAgMTY4MAorICAgT24gIE9mZiB8ICAgICAgIDU2MyAgICAgICAgICB8ICAgICAgICAgMTY4MAorICAgT24gIE9uICB8ICAgICAgMTEzMCAgICAgICAgICB8ICAgICAgICAgMTY4MAorCitPbiBtZWFucyBqdW1wZXIgaW5zdGFsbGVkLCBPZmYgbWVhbnMganVtcGVyIG5vdCBpbnN0YWxsZWQKKworCitOT05BTUUgMTYtQklUIEFSQ05FVAorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIG1hbnVhbCBvZiBteSA4LUJpdCBOT05BTUUgQVJDbmV0IENhcmQgY29udGFpbnMgYW5vdGhlciBkZXNjcmlwdGlvbgorb2YgYSAxNi1CaXQgQ29heCAvIFR3aXN0ZWQgUGFpciBDYXJkLiBUaGlzIGRlc2NyaXB0aW9uIGlzIGluY29tcGxldGUsCitiZWNhdXNlIHRoZXJlIGFyZSBtaXNzaW5nIHR3byBwYWdlcyBpbiB0aGUgbWFudWFsIGJvb2tsZXQuIChUaGUgdGFibGUKK29mIGNvbnRlbnRzIHJlcG9ydHMgcGFnZXMgLi4uIDItOSwgMi0xMSwgMi0xMiwgMy0xLCAuLi4gYnV0IGluc2lkZQordGhlIGJvb2tsZXQgdGhlcmUgaXMgYSBkaWZmZXJlbnQgd2F5IG9mIGNvdW50aW5nIC4uLiAyLTksIDItMTAsIEEtMSwKKyhlbXB0eSBwYWdlKSwgMy0xLCAuLi4sIDMtMTgsIEEtMSAoYWdhaW4pLCBBLTIpCitBbHNvIHRoZSBwaWN0dXJlIG9mIHRoZSBib2FyZCBsYXlvdXQgaXMgbm90IGFzIGdvb2QgYXMgdGhlIHBpY3R1cmUgb2YKKzgtQml0IGNhcmQsIGJlY2F1c2UgdGhlcmUgaXNuJ3QgYW55IGxldHRlciBsaWtlICJTVzEiIHdyaXR0ZW4gdG8gdGhlCitwaWN0dXJlLgorU2hvdWxkIHNvbWVib2R5IGhhdmUgc3VjaCBhIGJvYXJkLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbXBsZXRlIHRoaXMKK2Rlc2NyaXB0aW9uIG9yIHRvIHNlbmQgYSBtYWlsIHRvIG1lIQorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAiQVJDbmV0IEluc3RhbGxhdGlvbiBNYW51YWwiCisKKworICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICA8ICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fXyAgX19fX19fX19fX19fX19fX18gICAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICB8ICAgICAgIFNXPyAgICAgICB8fCAgICAgIFNXPyAgICAgICAgfCAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19ffHxfX19fX19fX19fX19fX19fX3wgICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgID4gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgID4gICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX3wKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgfCAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgSjEgfAorICA+ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIDwgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX19fX198ICA/ID8gPyA/ID8gPyAgICAgfF9fX198CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfG98b3xvfG98b3xvfCAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19ffAorICA+ICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPF9fX19fX19fX19fX3wgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisKKworU2V0dGluZyBvbmUgb2YgdGhlIHN3aXRjaGVzIHRvIE9mZiBtZWFucyAiMSIsIE9uIG1lYW5zICIwIi4KKworCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBncm91cCBTVzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELgorRWFjaCBub2RlIGF0dGFjaGVkIHRvIHRoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaAorbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSAwLgorU3dpdGNoIDggc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICAgU3dpdGNoIHwgVmFsdWUKKyAgICAtLS0tLS0tfC0tLS0tLS0KKyAgICAgIDggICAgfCAgIDEKKyAgICAgIDcgICAgfCAgIDIKKyAgICAgIDYgICAgfCAgIDQKKyAgICAgIDUgICAgfCAgIDgKKyAgICAgIDQgICAgfCAgMTYKKyAgICAgIDMgICAgfCAgMzIKKyAgICAgIDIgICAgfCAgNjQKKyAgICAgIDEgICAgfCAxMjgKKworU29tZSBFeGFtcGxlczoKKworICAgIFN3aXRjaCAgICAgICAgIHwgSGV4ICAgICB8IERlY2ltYWwgCisgICAxIDIgMyA0IDUgNiA3IDggfCBOb2RlIElEIHwgTm9kZSBJRAorICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tCisgICAwIDAgMCAwIDAgMCAwIDAgfCAgICBub3QgYWxsb3dlZAorICAgMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgCisgICAwIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMgorICAgMCAwIDAgMCAwIDAgMSAxIHwgICAgMyAgICB8ICAgIDMKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgMSAwIDEgMCAxIHwgICA1NSAgICB8ICAgODUKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgCisgICAxIDEgMSAxIDEgMSAwIDEgfCAgIEZEICAgIHwgIDI1MworICAgMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQKKyAgIDEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1CisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGdyb3VwIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisgICBTd2l0Y2ggICAgICB8IEhleCBJL08KKyAgICAzICAgMiAgIDEgIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tfC0tLS0tLS0tCisgICBPTiAgT04gIE9OICB8ICAyNjAKKyAgIE9OICBPTiAgT0ZGIHwgIDI5MAorICAgT04gIE9GRiBPTiAgfCAgMkUwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIE9OICBPRkYgT0ZGIHwgIDJGMAorICAgT0ZGIE9OICBPTiAgfCAgMzAwCisgICBPRkYgT04gIE9GRiB8ICAzNTAKKyAgIE9GRiBPRkYgT04gIHwgIDM4MAorICAgT0ZGIE9GRiBPRkYgfCAgM0UwCisKKworU2V0dGluZyB0aGUgQmFzZSBNZW1vcnkgKFJBTSkgYnVmZmVyIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIHJlcXVpcmVzIDJLIG9mIGEgMTZLIGJsb2NrIG9mIFJBTS4gVGhlIGJhc2Ugb2YgdGhpcworMTZLIGJsb2NrIGNhbiBiZSBsb2NhdGVkIGluIGFueSBvZiBlaWdodCBwb3NpdGlvbnMuCitTd2l0Y2hlcyA2LTggb2Ygc3dpdGNoIGdyb3VwIFNXMSBzZWxlY3QgdGhlIEJhc2Ugb2YgdGhlIDE2SyBibG9jay4KK1dpdGhpbiB0aGF0IDE2SyBhZGRyZXNzIHNwYWNlLCB0aGUgYnVmZmVyIG1heSBiZSBhc3NpZ25lZCBhbnkgb25lIG9mIGZvdXIKK3Bvc2l0aW9ucywgZGV0ZXJtaW5lZCBieSB0aGUgb2Zmc2V0LCBzd2l0Y2hlcyA0IGFuZCA1IG9mIGdyb3VwIFNXMS4KKworICAgU3dpdGNoICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICA4IDcgNiAgNSA0IHwgQWRkcmVzcyB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgMCAwIDAgIDAgMCB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAwIDEgfCAgQzA4MDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMSAwIHwgIEMxMDAwICB8ICBDMjAwMAorICAgMCAwIDAgIDEgMSB8ICBDMTgwMCAgfCAgQzIwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMCAxICAwIDAgfCAgQzQwMDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMCAxIHwgIEM0ODAwICB8ICBDNjAwMAorICAgMCAwIDEgIDEgMCB8ICBDNTAwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAxIDEgfCAgQzU4MDAgIHwgIEM2MDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAgMCAwIHwgIENDMDAwICB8ICBDRTAwMAorICAgMCAxIDAgIDAgMSB8ICBDQzgwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAxIDAgfCAgQ0QwMDAgIHwgIENFMDAwCisgICAwIDEgMCAgMSAxIHwgIENEODAwICB8ICBDRTAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDEgIDAgMCB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgMCAxIDEgIDAgMSB8ICBEMDgwMCAgfCAgRDIwMDAKKyAgIDAgMSAxICAxIDAgfCAgRDEwMDAgIHwgIEQyMDAwCisgICAwIDEgMSAgMSAxIHwgIEQxODAwICB8ICBEMjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDAgIDAgMCB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAwIDEgfCAgRDQ4MDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMSAwIHwgIEQ1MDAwICB8ICBENjAwMAorICAgMSAwIDAgIDEgMSB8ICBENTgwMCAgfCAgRDYwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxICAwIDAgfCAgRDgwMDAgIHwgIERBMDAwCisgICAxIDAgMSAgMCAxIHwgIEQ4ODAwICB8ICBEQTAwMAorICAgMSAwIDEgIDEgMCB8ICBEOTAwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAxIDEgfCAgRDk4MDAgIHwgIERBMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDEgMCAgMCAwIHwgIERDMDAwICB8ICBERTAwMAorICAgMSAxIDAgIDAgMSB8ICBEQzgwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAxIDAgfCAgREQwMDAgIHwgIERFMDAwCisgICAxIDEgMCAgMSAxIHwgIEREODAwICB8ICBERTAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAxIDEgIDAgMCB8ICBFMDAwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAwIDEgfCAgRTA4MDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMSAwIHwgIEUxMDAwICB8ICBFMjAwMAorICAgMSAxIDEgIDEgMSB8ICBFMTgwMCAgfCAgRTIwMDAKKyAgCisKK1NldHRpbmcgSW50ZXJydXB0IFJlcXVlc3QgTGluZXMgKElSUSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8KKworCitTZXR0aW5nIHRoZSBUaW1lb3V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBObyBOYW1lICoqCis4LWJpdCBjYXJkcyAoIk1hZGUgaW4gVGFpd2FuIFIuTy5DLiIpCistLS0tLS0tLS0tLQorICAtIGZyb20gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKworSSBoYXZlIG5hbWVkIHRoaXMgQVJDbmV0IGNhcmQgIk5PTkFNRSIsIHNpbmNlIEkgZ290IG9ubHkgdGhlIGNhcmQgd2l0aAorbm8gbWFudWFsIGF0IGFsbCBhbmQgdGhlIG9ubHkgdGV4dCBpZGVudGlmeWluZyB0aGUgbWFudWZhY3R1cmVyIGlzIAorIk1BREUgSU4gVEFJV0FOIFIuTy5DIiBwcmludGVkIG9uIHRoZSBjYXJkLgorCisgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAxIDIgMyA0IDUgNiA3IDggICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCB8b3xvfCBKUDEgICAgICAgb3xvfG98b3xvfG98b3xvfCBPTiAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICsgICAgICAgICAgICAgIG98b3xvfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICAgICAgICB8ICBfX19fX19fX19fX19fICBvfG98b3xvfG98b3xvfG98IE9GRiAgICAgICAgIF9fX19fICAgICB8ICAgfCBJRDcKKyAgICAgICAgIHwgfCAgICAgICAgICAgICB8IFNXMSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgIHwgICB8IElENgorICAgICAgICAgfCA+IFJBTSAoMmspICAgIHwgICAgICAgIF9fX19fX19fX19fX19fX19fX19fIHwgIEggIHwgICAgfCBTIHwgSUQ1CisgICAgICAgICB8IHxfX19fX19fX19fX19ffCAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgeSAgfCAgICB8IFcgfCBJRDQKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8ICBiICB8ICAgIHwgMiB8IElEMworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwgIHIgIHwgICAgfCAgIHwgSUQyCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgaSAgfCAgICB8ICAgfCBJRDEKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOTBDNjUgICAgICAgIHx8ICBkICB8ICAgIHxfX198IElEMAorICAgICAgICAgfCAgICAgIFNXMyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwgICAgIHwgICAgICAgIHwgICAgICAKKyAgICAgICAgIHwgfG98b3xvfG98b3xvfG98b3wgT04gIHwgICAgICAgICAgICAgICAgICAgIHx8ICBJICB8ICAgICAgICB8CisgICAgICAgICB8IHxvfG98b3xvfG98b3xvfG98ICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgQyAgfCAgICAgICAgfAorICAgICAgICAgfCB8b3xvfG98b3xvfG98b3xvfCBPRkYgfF9fX19fX19fX19fX19fX19fX19ffHwgICAgIHwgICBfX19fX3wKKyAgICAgICAgIHwgIDEgMiAzIDQgNSA2IDcgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICB8ICAgICB8X19fCisgICAgICAgICB8ICBfX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgfCBCTkMgfF9fX3wKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX198ICB8X19fX198CisgICAgICAgICB8ID4gRVBST00gU09DS0VUIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCB8X19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCis5MEM2NSAgICAgICBBUkNORVQgQ2hpcCAKK1NXMSAxLTU6ICAgIEJhc2UgTWVtb3J5IEFkZHJlc3MgU2VsZWN0CisgICAgNi04OiAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorU1cyIDEtODogICAgTm9kZSBJRCBTZWxlY3QgKElEMC1JRDcpCitTVzMgMS01OiAgICBJUlEgU2VsZWN0ICAgCisgICAgNi03OiAgICBFeHRyYSBUaW1lb3V0CisgICAgOCAgOiAgICBST00gRW5hYmxlICAgCitKUDEgICAgICAgICBMZWQgY29ubmVjdG9yCitCTkMgICAgICAgICBDb2F4IGNvbm5lY3RvcgorCitBbHRob3VnaCB0aGUganVtcGVycyBTVzEgYW5kIFNXMyBhcmUgbWFya2VkIFNXLCBub3QgSlAsIHRoZXkgYXJlIGp1bXBlcnMsIG5vdCAKK3N3aXRjaGVzLgorCitTZXR0aW5nIHRoZSBqdW1wZXJzIHRvIE9OIG1lYW5zIGNvbm5lY3RpbmcgdGhlIHVwcGVyIHR3byBwaW5zLCBvZmYgdGhlIGJvdHRvbSAKK3R3byAtIG9yIC0gaW4gY2FzZSBvZiBJUlEgc2V0dGluZywgY29ubmVjdGluZyBub25lIG9mIHRoZW0gYXQgYWxsLgorCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBTVzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELiBFYWNoIG5vZGUgYXR0YWNoZWQKK3RvIHRoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaCBtdXN0IG5vdCBiZSAwLgorU3dpdGNoIDEgKElEMCkgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBMYWJlbCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS18LS0tLS0tLQorICAgICAxICAgIHwgSUQwICAgfCAgIDEKKyAgICAgMiAgICB8IElEMSAgIHwgICAyCisgICAgIDMgICAgfCBJRDIgICB8ICAgNAorICAgICA0ICAgIHwgSUQzICAgfCAgIDgKKyAgICAgNSAgICB8IElENCAgIHwgIDE2CisgICAgIDYgICAgfCBJRDUgICB8ICAzMgorICAgICA3ICAgIHwgSUQ2ICAgfCAgNjQKKyAgICAgOCAgICB8IElENyAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2ggICAgICAgICB8IEhleCAgICAgfCBEZWNpbWFsIAorICAgOCA3IDYgNSA0IDMgMiAxIHwgTm9kZSBJRCB8IE5vZGUgSUQKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorICAgMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQKKyAgIDAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxIAorICAgMCAwIDAgMCAwIDAgMSAwIHwgICAgMiAgICB8ICAgIDIKKyAgIDAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1CisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgIAorICAgMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMKKyAgIDEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0CisgICAxIDEgMSAxIDEgMSAxIDEgfCAgIEZGICAgIHwgIDI1NQorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDYgICA3ICAgOCAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT0ZGIE9OICBPTiAgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT0ZGIE9GRiBPTiAgfCAgMkYwCisgICBPTiAgT04gIE9GRiB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT04gIE9GRiBPRkYgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZSAKK2xvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4gVGhlIGFkZHJlc3Mgb2YgdGhlIEJvb3QgUHJvbSBpcworbWVtb3J5IGJhc2UgKyAweDIwMDAuCitKdW1wZXJzIDMtNSBvZiBqdW1wZXIgYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgMSAgIDIgICAzICAgNCAgIDUgIHwgQWRkcmVzcyB8IEFkZHJlc3MgKikKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT04gIE9OICBPTiAgT04gIE9OICB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPTiAgfCAgQzQwMDAgIHwgIEM2MDAwCisgICBPTiAgT04gIE9OICBPRkYgT04gIHwgIENDMDAwICB8ICBDRTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9OICB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9OICBPTiAgT04gIE9GRiB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPRkYgfCAgRDgwMDAgIHwgIERBMDAwCisgICBPTiAgT04gIE9OICBPRkYgT0ZGIHwgIERDMDAwICB8ICBERTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9GRiB8ICBFMDAwMCAgfCAgRTIwMDAKKyAgCisqKSBUbyBlbmFibGUgdGhlIEJvb3QgUk9NIHNldCB0aGUganVtcGVyIDggb2YganVtcGVyIGJsb2NrIFNXMyB0byBwb3NpdGlvbiBPTi4KKworVGhlIGp1bXBlcnMgMSBhbmQgMiBwcm9iYWJseSBhZGQgMHgwODAwLCAweDEwMDAgYW5kIDB4MTgwMCB0byBSQU0gYWRkZXJzLgorCitTZXR0aW5nIHRoZSBJbnRlcnJ1cHQgTGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSnVtcGVycyAxLTUgb2YgdGhlIGp1bXBlciBibG9jayBTVzMgY29udHJvbCB0aGUgSVJRIGxldmVsLgorCisgICAgSnVtcGVyICAgICAgICAgICAgICB8ICBJUlEKKyAgICAxICAgMiAgIDMgICA0ICAgNSAgIHwKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBPTiAgT0ZGIE9GRiBPRkYgT0ZGIHwgIDIKKyAgICBPRkYgT04gIE9GRiBPRkYgT0ZGIHwgIDMKKyAgICBPRkYgT0ZGIE9OICBPRkYgT0ZGIHwgIDQKKyAgICBPRkYgT0ZGIE9GRiBPTiAgT0ZGIHwgIDUKKyAgICBPRkYgT0ZGIE9GRiBPRkYgT04gIHwgIDcKKworCitTZXR0aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUganVtcGVycyA2LTcgb2YgdGhlIGp1bXBlciBibG9jayBTVzMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IAorcGFyYW1ldGVycy4gVGhlc2UgdHdvIGp1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgaW4gdGhlIE9GRiBwb3NpdGlvbi4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBObyBOYW1lICoqCisoR2VuZXJpYyBNb2RlbCA5MDU4KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIEFuZHJldyBKLiBLcm9sbCA8YWc3ODRAZnJlZW5ldC5idWZmYWxvLmVkdT4KKyAgLSBTb3JyeSB0aGlzIHNhdCBpbiBteSB0by1kbyBib3ggZm9yIHNvIGxvbmcsIEFuZHJldyEgKHlpa2VzIC0gb3ZlciBhCisgICAgeWVhciEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgPAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuLS0tJworICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gfCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgU1cyICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgIHwgICBfX19fX19fX19fXyAgICAgICAgICAgICB8X19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgfCAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgMSAyIDMgNCA1IDYgICAgICAgICAgICAgICAgICAgICBfX198ICB8CisgICB8ICA+ICA2MTE2IFJBTSB8ICAgICAgICAgX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgIDggfCAgIHwgIHwKKyAgIHwgIHxfX19fX19fX19fX3wgICAgICAgIHwyME1Ielh0YWx8ICAgICAgICAgICAgICAgICAgICAgICAgNyB8ICAgfCAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX3wgICAgICAgX19fX19fX19fXyAgICAgICA2IHwgUyB8ICB8CisgICB8ICAgIDc0TFMzNzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfC0gICAgIDUgfCBXIHwgIHwKKyAgIHwgICBfX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIEUgICB8LSAgICAgNCB8ICAgfCAgfAorICAgfCAgID5fX19fX19ffCAgICAgICAgICAgICAgX19fX19fX19fX19fX198Li4uLi4gUCAgIHwtICAgICAzIHwgMyB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgOiBPICAgfC0gICAgIDIgfCAgIHwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICA6IFggICB8LSAgICAgMSB8X19ffCAgfAorICAgfCAgIF9fX19fX19fX19fX19fX18gICAgICB8ICAgICAgICAgICAgICB8ICAgIDogWSAgIHwtICAgICAgICAgICB8ICB8CisgICB8ICB8ICAgICAgU1cxICAgICAgIHwgICAgIHwgICAgICBTTDkwQzY1IHwgICAgOiAgICAgfC0gICAgICAgICAgIHwgIHwKKyAgIHwgIHxfX19fX19fX19fX19fX19ffCAgICAgfCAgICAgICAgICAgICAgfCAgICA6IEIgICB8LSAgICAgICAgICAgfCAgfAorICAgfCAgICAxIDIgMyA0IDUgNiA3IDggICAgICB8ICAgICAgICAgICAgICB8ICAgIDogTyAgIHwtICAgICAgICAgICB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19vX19fX3wuLi4uLyBBICAgfC0gICAgX19fX19fX3wgIHwKKyAgIHwgICAgX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgfCAgICAgIFIgICB8LSAgIHwgICAgICAgfC0tLS0tLSwgICAKKyAgIHwgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgIEQgICB8LSAgIHwgIEJOQyAgfCAgICMgIHwKKyAgIHwgICA+IDI3NjQgUFJPTSBTT0NLRVQgICB8ICAgICAgICAgICAgICAgfF9fX19fX19fX198LSAgIHxfX19fX19ffC0tLS0tLScKKyAgIHwgICB8X19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICBfX19fX19fX18gICAgICAgICAgICAgICAgfCAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5fX19fX19fX3wgPC0gNzRMUzI0NSAgICB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgIHxfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffCAgfAorICAgICAgIHxIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEh8ICAgICAgICAgICAgICAgfCB8CisgICAgICAgfFVfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVXwgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcfAorTGVnZW5kOgorCitTTDkwQzY1IAlBUkNORVQgQ29udHJvbGxlciAvIFRyYW5zY2VpdmVyIC9Mb2dpYworU1cxCTEtNToJSVJRIFNlbGVjdAorCSAgNjoJRVQxCisJICA3OglFVDIKKwkgIDg6CVJPTSBFTkFCTEUgCitTVzIJMS0zOiAgICBNZW1vcnkgQnVmZmVyL1BST00gQWRkcmVzcworCTMtNjoJSS9PIEFkZHJlc3MgTWFwCitTVzMJMS04OglOb2RlIElEIFNlbGVjdAorQk5DCQlCTkMgUkc2Mi9VIENvbm5lY3Rpb24gCisJCSpJKiBoYXZlIGhhZCBzdWNjZXNzIHVzaW5nIFJHNTlCL1Ugd2l0aCAqTk8qIHRlcm1pbmF0b3JzIQorCQlXaGF0IGdpdmVzPyEKKworU1cxOiBUaW1lb3V0cywgSW50ZXJydXB0IGFuZCBST00KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgc2V0IG9uZSAob25seSBvbmUhKSBvZiB0aGUgZGlwIHN3aXRjaGVzCit1cCAob24pIFNXMS4uLihzd2l0Y2hlcyAxLTUpCitJUlEzLCBJUlE0LCBJUlE1LCBJUlE3LCBJUlEyLiBUaGUgTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCBpcyBJUlEyLgorCitUaGUgc3dpdGNoZXMgb24gU1cxIGxhYmVsZWQgRVhUMSAoc3dpdGNoIDYpIGFuZCBFWFQyIChzd2l0Y2ggNykKK2FyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGltZW91dCBwYXJhbWV0ZXJzLiBUaGVzZSB0d28gZGlwIHN3aXRjaGVzCithcmUgbm9ybWFsbHkgbGVmdCBvZmYgKGRvd24pLgorCisgICBUbyBlbmFibGUgdGhlIDhLIEJvb3QgUFJPTSBwb3NpdGlvbiBTVzEgc3dpdGNoIDggb24gKFVQKSBsYWJlbGVkIFJPTS4KKyAgIFRoZSBkZWZhdWx0IGlzIGp1bXBlciBST00gbm90IGluc3RhbGxlZC4KKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IHRocmVlIHN3aXRjaGVzIGluIHN3aXRjaCBncm91cCBTVzIgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworCisgICBTd2l0Y2ggfCBIZXggSS9PCisgICA0IDUgNiAgfCBBZGRyZXNzCisgICAtLS0tLS0tfC0tLS0tLS0tCisgICAwIDAgMCAgfCAgMjYwCisgICAwIDAgMSAgfCAgMjkwCisgICAwIDEgMCAgfCAgMkUwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAxICB8ICAyRjAKKyAgIDEgMCAwICB8ICAzMDAKKyAgIDEgMCAxICB8ICAzNTAKKyAgIDEgMSAwICB8ICAzODAKKyAgIDEgMSAxICB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSBBZGRyZXNzIChSQU0gJiBST00pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIHJlcXVpcmVzIDJLIG9mIGEgMTZLIGJsb2NrIG9mIFJBTS4gVGhlIGJhc2Ugb2YgdGhpcworMTZLIGJsb2NrIGNhbiBiZSBsb2NhdGVkIGluIGFueSBvZiBlaWdodCBwb3NpdGlvbnMuCitTd2l0Y2hlcyAxLTMgb2Ygc3dpdGNoIGdyb3VwIFNXMiBzZWxlY3QgdGhlIEJhc2Ugb2YgdGhlIDE2SyBibG9jay4KKygwID0gRE9XTiwgMSA9IFVQKQorSSBjb3VsZCwgaG93ZXZlciwgb25seSB2ZXJpZnkgdHdvIHNldHRpbmdzLi4uCisKKyAgIFN3aXRjaHwgSGV4IFJBTSB8IEhleCBST00KKyAgIDEgMiAzIHwgQWRkcmVzcyB8IEFkZHJlc3MKKyAgIC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIDAgMCAwIHwgIEUwMDAwICB8ICBFMjAwMAorICAgMCAwIDEgfCAgRDAwMDAgIHwgIEQyMDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAwIHwgID8/Pz8/ICB8ICA/Pz8/PworICAgMCAxIDEgfCAgPz8/Pz8gIHwgID8/Pz8/ICAKKyAgIDEgMCAwIHwgID8/Pz8/ICB8ICA/Pz8/PworICAgMSAwIDEgfCAgPz8/Pz8gIHwgID8/Pz8/CisgICAxIDEgMCB8ICA/Pz8/PyAgfCAgPz8/Pz8KKyAgIDEgMSAxIHwgID8/Pz8/ICB8ICA/Pz8/PworCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFNXMyBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuCitFYWNoIG5vZGUgYXR0YWNoZWQgdG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoCittdXN0IGJlIGRpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggMSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KK3N3aXRjaGVzIGluIHRoZSBET1dOIHBvc2l0aW9uIGFyZSBPRkYgKDApIGFuZCBpbiB0aGUgVVAgcG9zaXRpb24gYXJlIE9OICgxKQorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIgIAorVGhlc2UgdmFsdWVzIGFyZToKKyAgICBTd2l0Y2ggfCBWYWx1ZQorICAgIC0tLS0tLS18LS0tLS0tLQorICAgICAgMSAgICB8ICAgMQorICAgICAgMiAgICB8ICAgMgorICAgICAgMyAgICB8ICAgNAorICAgICAgNCAgICB8ICAgOAorICAgICAgNSAgICB8ICAxNgorICAgICAgNiAgICB8ICAzMgorICAgICAgNyAgICB8ICA2NAorICAgICAgOCAgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoIyAgICAgfCAgIEhleCAgIHwgRGVjaW1hbCAKKzggNyA2IDUgNCAzIDIgMSB8IE5vZGUgSUQgfCBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKzAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkICA8LS4KKzAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxICAgIHwgCiswIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMiAgICB8CiswIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMyAgICB8CisgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgICAgICAgICB8CiswIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NSAgICB8CisgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgICAgICAgICArIERvbid0IHVzZSAwIG9yIDI1NSEKKzEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwICAgIHwKKyAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwKKzEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzICAgIHwKKzEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0ICAgIHwKKzEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1ICA8LScKKyAgCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFRpYXJhICoqCisobW9kZWwgdW5rbm93bikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIENocmlzdG9waCBMYW1ldGVyIDxjaHJpc3RvcGhAbGFtZXRlci5jb20+CisgIAorCitIZXJlIGlzIGluZm9ybWF0aW9uIGFib3V0IG15IGNhcmQgYXMgZmFyIGFzIEkgY291bGQgZmlndXJlIGl0IG91dDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRpYXJhCitUaWFyYSBMYW5DYXJkIG9mIFRpYXJhIENvbXB1dGVyIFN5c3RlbXMuCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworISAgICAgICAgICAgISBUcmFuc21pdHRlciBVbml0ICEgICAgICAgICAgICAgICAhCishICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAtLS0tLS0tCishICAgICAgICAgIE1FTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvYXggQ29ubmVjdG9yCishICBST00gICAgNzY1NDMyMSA8LSBJL08gICAgICAgICAgICAgICAgICAgICAtLS0tLS0tCishICA6ICA6ICAgKy0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICEKKyEgIDogIDogICAhIDkwQzY2TEohICAgICAgICAgICAgICAgICAgICAgICAgICsrKworISAgOiAgOiAgICEgICAgICAgICEgICAgICAgICAgICAgICAgICAgICAgICAgIUQgIFN3aXRjaCB0byBzZXQKKyEgIDogIDogICAhICAgICAgICAhICAgICAgICAgICAgICAgICAgICAgICAgICFJICB0aGUgTm9kZW51bWJlcgorISAgOiAgOiAgICstLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgIVAKKyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICErKworISAgICAgICAgIDIzNDU2NyA8LSBJUlEgICAgICAgICAgICAgICAgICAgICAgIQorKy0tLS0tLS0tLS0tLSEhISEhISEhISEhISEhISEhISEhISEhIS0tLS0tLS0tKworICAgICAgICAgICAgICEhISEhISEhISEhISEhISEhISEhISEhIQorCiswID0gSnVtcGVyIEluc3RhbGxlZAorMSA9IE9wZW4KKworVG9wIEp1bXBlciBsaW5lIEJpdCA3ID0gUk9NIEVuYWJsZSA2NTQ9TWVtb3J5IGxvY2F0aW9uIDMyMT1JL08KKworU2V0dGluZ3MgZm9yIE1lbW9yeSBMb2NhdGlvbiAoVG9wIEp1bXBlciBMaW5lKQorNDU2ICAgICBBZGRyZXNzIHNlbGVjdGVkCiswMDAJQzAwMDAKKzAwMSAgICAgQzQwMDAKKzAxMCAgICAgQ0MwMDAKKzAxMSAgICAgRDAwMDAKKzEwMCAgICAgRDQwMDAKKzEwMSAgICAgRDgwMDAKKzExMCAgICAgREMwMDAgICAgIAorMTExICAgICBFMDAwMAorCitTZXR0aW5ncyBmb3IgSS9PIEFkZHJlc3MgKFRvcCBKdW1wZXIgTGluZSkKKzEyMyAgICAgUG9ydAorMDAwCTI2MAorMDAxCTI5MAorMDEwCTJFMAorMDExCTJGMAorMTAwCTMwMAorMTAxCTM1MAorMTEwCTM4MAorMTExCTNFMAorCitTZXR0aW5ncyBmb3IgSVJRIFNlbGVjdGlvbiAoTG93ZXIgSnVtcGVyIExpbmUpCisyMzQ1NjcKKzAxMTExMSBJUlEgMgorMTAxMTExIElSUSAzCisxMTAxMTEgSVJRIDQKKzExMTAxMSBJUlEgNQorMTExMTEwIElSUSA3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworT3RoZXIgQ2FyZHMKKy0tLS0tLS0tLS0tCisKK0kgaGF2ZSBubyBpbmZvcm1hdGlvbiBvbiBvdGhlciBtb2RlbHMgb2YgQVJDbmV0IGNhcmRzIGF0IHRoZSBtb21lbnQuICBQbGVhc2UKK3NlbmQgYW55IGFuZCBhbGwgaW5mbyB0bzoKKwlhcGVud2FyckB3b3JsZHZpc2lvbnMuY2EKKworVGhhbmtzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzBmYzQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC50eHQKQEAgLTAsMCArMSw1NTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05PVEU6ICBTZWUgYWxzbyBhcmNuZXQtaGFyZHdhcmUudHh0IGluIHRoaXMgZGlyZWN0b3J5IGZvciBqdW1wZXItc2V0dGluZworYW5kIGNhYmxpbmcgaW5mb3JtYXRpb24gaWYgeW91J3JlIGxpa2UgbWFueSBvZiB1cyBhbmQgZGlkbid0IGhhcHBlbiB0byBnZXQgYQorbWFudWFsIHdpdGggeW91ciBBUkNuZXQgY2FyZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2luY2Ugbm8gb25lIHNlZW1zIHRvIGxpc3RlbiB0byBtZSBvdGhlcndpc2UsIHBlcmhhcHMgYSBwb2VtIHdpbGwgZ2V0IHlvdXIKK2F0dGVudGlvbjoKKwkJVGhpcyBkcml2ZXIncyBnZXR0aW5nIGZhdCBhbmQgYmVlZnksCisJCUJ1dCBteSBjYXQgaXMgc3RpbGwgbmFtZWQgRmlmaS4KKworSG1tLCBJIHRoaW5rIEknbSBhbGxvd2VkIHRvIGNhbGwgdGhhdCBhIHBvZW0sIGV2ZW4gdGhvdWdoIGl0J3Mgb25seSB0d28KK2xpbmVzLiAgSGV5LCBJJ20gaW4gQ29tcHV0ZXIgU2NpZW5jZSwgbm90IEVuZ2xpc2guICBHaXZlIG1lIGEgYnJlYWsuCisKK1RoZSBwb2ludCBpczogIEkgUkVBTExZIFJFQUxMWSBSRUFMTFkgUkVBTExZIFJFQUxMWSB3YW50IHRvIGhlYXIgZnJvbSB5b3UgaWYKK3lvdSB0ZXN0IHRoaXMgYW5kIGdldCBpdCB3b3JraW5nLiAgT3IgaWYgeW91IGRvbid0LiAgT3IgYW55dGhpbmcuCisKK0FSQ25ldCAwLjMyIEFMUEhBIGZpcnN0IG1hZGUgaXQgaW50byB0aGUgTGludXgga2VybmVsIDEuMS44MCAtIHRoaXMgd2FzCituaWNlLCBidXQgYWZ0ZXIgdGhhdCBldmVuIEZFV0VSIHBlb3BsZSBzdGFydGVkIHdyaXRpbmcgdG8gbWUgYmVjYXVzZSB0aGV5CitkaWRuJ3QgZXZlbiBoYXZlIHRvIGluc3RhbGwgdGhlIHBhdGNoLiAgPHNpZ2g+CisKK0NvbWUgb24sIGJlIGEgc3BvcnQhICBTZW5kIG1lIGEgc3VjY2VzcyByZXBvcnQhCisKKyhoZXksIHRoYXQgd2FzIGV2ZW4gYmV0dGVyIHRoYW4gbXkgb3JpZ2luYWwgcG9lbS4uLiB0aGlzIGlzIGdldHRpbmcgYmFkISkKKworCistLS0tLS0tLQorV0FSTklORzoKKy0tLS0tLS0tCisKK0lmIHlvdSBkb24ndCBlLW1haWwgbWUgYWJvdXQgeW91ciBzdWNjZXNzL2ZhaWx1cmUgc29vbiwgSSBtYXkgYmUgZm9yY2VkIHRvCitzdGFydCBTSU5HSU5HLiAgQW5kIHdlIGRvbid0IHdhbnQgdGhhdCwgZG8gd2U/CisKKyhZb3Uga25vdywgaXQgbWlnaHQgYmUgYXJndWVkIHRoYXQgSSdtIHB1c2hpbmcgdGhpcyBwb2ludCBhIGxpdHRsZSB0b28gbXVjaC4gCitJZiB5b3UgdGhpbmsgc28sIHdoeSBub3QgZmxhbWUgbWUgaW4gYSBxdWljayBsaXR0bGUgZS1tYWlsPyAgUGxlYXNlIGFsc28KK2luY2x1ZGUgdGhlIHR5cGUgb2YgY2FyZChzKSB5b3UncmUgdXNpbmcsIHNvZnR3YXJlLCBzaXplIG9mIG5ldHdvcmssIGFuZAord2hldGhlciBpdCdzIHdvcmtpbmcgb3Igbm90LikKKworTXkgZS1tYWlsIGFkZHJlc3MgaXM6IGFwZW53YXJyQHdvcmxkdmlzaW9ucy5jYQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCQkKK1RoZXNlIGFyZSB0aGUgQVJDbmV0IGRyaXZlcnMgZm9yIExpbnV4LgorCisKK1RoaXMgbmV3IHJlbGVhc2UgKDIuOTEpIGhhcyBiZWVuIHB1dCB0b2dldGhlciBieSBEYXZpZCBXb29kaG91c2UgCis8ZHdtdzJAY2FtLmFjLnVrPiwgaW4gYW4gYXR0ZW1wdCB0byB0aWR5IHVwIHRoZSBkcml2ZXIgYWZ0ZXIgYWRkaW5nIHN1cHBvcnQgCitmb3IgeWV0IGFub3RoZXIgY2hpcHNldC4gTm93IHRoZSBnZW5lcmljIHN1cHBvcnQgaGFzIGJlZW4gc2VwYXJhdGVkIGZyb20gdGhlCitpbmRpdmlkdWFsIGNoaXBzZXQgZHJpdmVycywgYW5kIHRoZSBzb3VyY2UgZmlsZXMgYXJlbid0IHF1aXRlIHNvIHBhY2tlZCB3aXRoCisjaWZkZWZzISBJJ3ZlIGNoYW5nZWQgdGhpcyBmaWxlIGEgYml0LCBidXQga2VwdCBpdCBpbiB0aGUgZmlyc3QgcGVyc29uIGZyb20KK0F2ZXJ5LCBiZWNhdXNlIEkgZGlkbid0IHdhbnQgdG8gY29tcGxldGVseSByZXdyaXRlIGl0LgorCitUaGUgcHJldmlvdXMgcmVsZWFzZSByZXN1bHRlZCBmcm9tIG1hbnkgbW9udGhzIG9mIG9uLWFuZC1vZmYgZWZmb3J0IGZyb20gbWUKKyhBdmVyeSBQZW5uYXJ1biksIG1hbnkgYnVnIHJlcG9ydHMvZml4ZXMgYW5kIHN1Z2dlc3Rpb25zIGZyb20gb3RoZXJzLCBhbmQgaW4KK3BhcnRpY3VsYXIgYSBsb3Qgb2YgaW5wdXQgYW5kIGNvZGluZyBmcm9tIFRvbWFzeiBNb3R5bGV3c2tpLiAgU3RhcnRpbmcgd2l0aAorQVJDbmV0IDIuMTAgQUxQSEEsIFRvbWFzeidzIGFsbC1uZXctYW5kLWltcHJvdmVkIFJGQzEwNTEgc3VwcG9ydCBoYXMgYmVlbgoraW5jbHVkZWQgYW5kIHNlZW1zIHRvIGJlIHdvcmtpbmcgZmluZSEKKworCitXaGVyZSBkbyBJIGRpc2N1c3MgdGhlc2UgZHJpdmVycz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUb21hc3ogaGFzIGJlZW4gc28ga2luZCBhcyB0byBzZXQgdXAgYSBuZXcgYW5kIGltcHJvdmVkIG1haWxpbmcgbGlzdC4gCitTdWJzY3JpYmUgYnkgc2VuZGluZyBhIG1lc3NhZ2Ugd2l0aCB0aGUgQk9EWSAic3Vic2NyaWJlIGxpbnV4LWFyY25ldCBZT1VSCitSRUFMIE5BTUUiIHRvIGxpc3RzZXJ2QHRpY2h5LmNoLnVqLmVkdS5wbC4gIFRoZW4sIHRvIHN1Ym1pdCBtZXNzYWdlcyB0byB0aGUKK2xpc3QsIG1haWwgdG8gbGludXgtYXJjbmV0QHRpY2h5LmNoLnVqLmVkdS5wbC4KKworVGhlcmUgYXJlIGFyY2hpdmVzIG9mIHRoZSBtYWlsaW5nIGxpc3QgYXQ6CisJaHR0cDovL3RpY2h5LmNoLnVqLmVkdS5wbC9saXN0cy9saW51eC1hcmNuZXQKKworVGhlIHBlb3BsZSBvbiBsaW51eC1uZXRAdmdlci5rZXJuZWwub3JnIGhhdmUgYWxzbyBiZWVuIGtub3duIHRvIGJlIHZlcnkKK2hlbHBmdWwsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSB0YWxraW5nIGFib3V0IEFMUEhBIExpbnV4IGtlcm5lbHMgdGhhdCBtYXkgb3IKK21heSBub3Qgd29yayByaWdodCBpbiB0aGUgZmlyc3QgcGxhY2UuCisKKworT3RoZXIgRHJpdmVycyBhbmQgSW5mbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHRyeSBteSBBUkNORVQgcGFnZSBvbiB0aGUgV29ybGQgV2lkZSBXZWIgYXQ6CisJaHR0cDovL3d3dy53b3JsZHZpc2lvbnMuY2EvfmFwZW53YXJyL2FyY25ldC8KKworQWxzbywgU01DIChvbmUgb2YgdGhlIGNvbXBhbmllcyB0aGF0IG1ha2VzIEFSQ25ldCBjYXJkcykgaGFzIGEgV1dXIHNpdGUgeW91CittaWdodCBiZSBpbnRlcmVzdGVkIGluLCB3aGljaCBpbmNsdWRlcyBzZXZlcmFsIGRyaXZlcnMgZm9yIHZhcmlvdXMgY2FyZHMKK2luY2x1ZGluZyBBUkNuZXQuICBUcnk6CisJaHR0cDovL3d3dy5zbWMuY29tLworCQorUGVyZm9ybWFuY2UgVGVjaG5vbG9naWVzIG1ha2VzIHZhcmlvdXMgbmV0d29yayBzb2Z0d2FyZSB0aGF0IHN1cHBvcnRzCitBUkNuZXQ6CisJaHR0cDovL3d3dy5wZXJmdGVjaC5jb20vIG9yIGZ0cCB0byBmdHAucGVyZnRlY2guY29tLgorCQorTm92ZWxsIG1ha2VzIGEgbmV0d29ya2luZyBzdGFjayBmb3IgRE9TIHdoaWNoIGluY2x1ZGVzIEFSQ25ldCBkcml2ZXJzLiAgVHJ5CitGVFBpbmcgdG8gZnRwLm5vdmVsbC5jb20uCisKK1lvdSBjYW4gZ2V0IHRoZSBDcnlud3IgcGFja2V0IGRyaXZlciBjb2xsZWN0aW9uIChpbmNsdWRpbmcgYXJjZXRoZXIuY29tLCB0aGUKK29uZSB5b3UnbGwgd2FudCB0byB1c2Ugd2l0aCBBUkNuZXQgY2FyZHMpIGZyb20KK29hay5vYWtsYW5kLmVkdTovc2ltdGVsL21zZG9zL3BrdGRydnIuIEl0IHdvbid0IHdvcmsgcGVyZmVjdGx5IG9uIGEgMzg2Kword2l0aG91dCBwYXRjaGVzLCB0aG91Z2gsIGFuZCBhbHNvIGRvZXNuJ3QgbGlrZSBzZXZlcmFsIGNhcmRzLiAgRml4ZWQKK3ZlcnNpb25zIGFyZSBhdmFpbGFibGUgb24gbXkgV1dXIHBhZ2UsIG9yIHZpYSBlLW1haWwgaWYgeW91IGRvbid0IGhhdmUgV1dXCithY2Nlc3MuIAorCisKK0luc3RhbGxpbmcgdGhlIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCB5b3Ugd2lsbCBuZWVkIHRvIGRvIGluIG9yZGVyIHRvIGluc3RhbGwgdGhlIGRyaXZlciBpczoKKwltYWtlIGNvbmZpZworCQkoYmUgc3VyZSB0byBjaG9vc2UgQVJDbmV0IGluIHRoZSBuZXR3b3JrIGRldmljZXMgCisJCWFuZCBhdCBsZWFzdCBvbmUgY2hpcHNldCBkcml2ZXIuKQorCW1ha2UgY2xlYW4KKwltYWtlIHpJbWFnZQorCQorSWYgeW91IG9idGFpbmVkIHRoaXMgQVJDbmV0IHBhY2thZ2UgYXMgYW4gdXBncmFkZSB0byB0aGUgQVJDbmV0IGRyaXZlciBpbgoreW91ciBjdXJyZW50IGtlcm5lbCwgeW91IHdpbGwgbmVlZCB0byBmaXJzdCBjb3B5IGFyY25ldC5jIG92ZXIgdGhlIG9uZSBpbgordGhlIGxpbnV4L2RyaXZlcnMvbmV0IGRpcmVjdG9yeS4KKworWW91IHdpbGwga25vdyB0aGUgZHJpdmVyIGlzIGluc3RhbGxlZCBwcm9wZXJseSBpZiB5b3UgZ2V0IHNvbWUgQVJDbmV0CittZXNzYWdlcyB3aGVuIHlvdSByZWJvb3QgaW50byB0aGUgbmV3IExpbnV4IGtlcm5lbC4KKworVGhlcmUgYXJlIGZvdXIgY2hpcHNldCBvcHRpb25zOgorCisgMS4gU3RhbmRhcmQgQVJDbmV0IENPTTkweHggY2hpcHNldC4KKworVGhpcyBpcyB0aGUgbm9ybWFsIEFSQ25ldCBjYXJkLCB3aGljaCB5b3UndmUgcHJvYmFibHkgZ290LiBUaGlzIGlzIHRoZSBvbmx5CitjaGlwc2V0IGRyaXZlciB3aGljaCB3aWxsIGF1dG9wcm9iZSBpZiBub3QgdG9sZCB3aGVyZSB0aGUgY2FyZCBpcy4KK0l0IGZvbGxvd2luZyBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmU6CisgY29tOTB4eD1bPGlvPlssPGlycT5bLDxzaG1lbT5dXV1bLDxuYW1lPl0gfCA8bmFtZT4KKworSWYgeW91IGxvYWQgdGhlIGNoaXBzZXQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgdGhlIG9wdGlvbnMgYXJlOgorIGlvPTxpbz4gaXJxPTxpcnE+IHNobWVtPTxzaG1lbT4gZGV2aWNlPTxuYW1lPgorCitUbyBkaXNhYmxlIHRoZSBhdXRvcHJvYmUsIGp1c3Qgc3BlY2lmeSAiY29tOTB4eD0iIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorVG8gc3BlY2lmeSB0aGUgbmFtZSBhbG9uZSwgYnV0IGFsbG93IGF1dG9wcm9iZSwganVzdCBwdXQgImNvbTkweHg9PG5hbWU+IgorCisgMi4gQVJDbmV0IENPTTIwMDIwIGNoaXBzZXQuCisKK1RoaXMgaXMgdGhlIG5ldyBjaGlwc2V0IGZyb20gU01DIHdpdGggc3VwcG9ydCBmb3IgcHJvbWlzY3VvdXMgbW9kZSAocGFja2V0IAorc25pZmZpbmcpLCBleHRyYSBkaWFnbm9zdGljIGluZm9ybWF0aW9uLCBldGMuIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vCitzZW5zaWJsZSBtZXRob2Qgb2YgYXV0b3Byb2JpbmcgZm9yIHRoZXNlIGNhcmRzLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBJL08KK2FkZHJlc3Mgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCitUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlOgorIGNvbTIwMDIwPTxpbz5bLDxpcnE+Wyw8bm9kZV9JRD5bLGJhY2twbGFuZVssQ0tQWyx0aW1lb3V0XV1dXV1bLG5hbWVdCisKK0lmIHlvdSBsb2FkIHRoZSBjaGlwc2V0IHN1cHBvcnQgYXMgYSBtb2R1bGUsIHRoZSBvcHRpb25zIGFyZToKKyBpbz08aW8+IGlycT08aXJxPiBub2RlPTxub2RlX0lEPiBiYWNrcGxhbmU9PGJhY2twbGFuZT4gY2xvY2s9PENLUD4KKyB0aW1lb3V0PTx0aW1lb3V0PiBkZXZpY2U9PG5hbWU+CisKK1RoZSBDT00yMDAyMCBjaGlwc2V0IGFsbG93cyB5b3UgdG8gc2V0IHRoZSBub2RlIElEIGluIHNvZnR3YXJlLCBvdmVycmlkaW5nIHRoZQorZGVmYXVsdCB3aGljaCBpcyBzdGlsbCBzZXQgaW4gRElQIHN3aXRjaGVzIG9uIHRoZSBjYXJkLiBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUKK0NPTTIwMDIwIGRhdGEgc2hlZXRzLCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCB0aGUgb3RoZXIgdGhyZWUgb3B0aW9ucyByZWZlcgordG8sIHRoZW4gdGhleSB3b24ndCBpbnRlcmVzdCB5b3UgLSBmb3JnZXQgdGhlbS4KKworIDMuIEFSQ25ldCBDT005MHh4IGNoaXBzZXQgaW4gSU8tbWFwcGVkIG1vZGUuCisKK1RoaXMgd2lsbCBhbHNvIHdvcmsgd2l0aCB0aGUgbm9ybWFsIEFSQ25ldCBjYXJkcywgYnV0IGRvZXNuJ3QgdXNlIHRoZSBzaGFyZWQKK21lbW9yeS4gSXQgcGVyZm9ybXMgbGVzcyB3ZWxsIHRoYW4gdGhlIGFib3ZlIGRyaXZlciwgYnV0IGlzIHByb3ZpZGVkIGluIGNhc2UKK3lvdSBoYXZlIGEgY2FyZCB3aGljaCBkb2Vzbid0IHN1cHBvcnQgc2hhcmVkIG1lbW9yeSwgb3IgKHN0cmFuZ2VseSkgaW4gY2FzZQoreW91IGhhdmUgc28gbWFueSBBUkNuZXQgY2FyZHMgaW4geW91ciBtYWNoaW5lIHRoYXQgeW91IHJ1biBvdXQgb2Ygc2htZW0gc2xvdHMuCitJZiB5b3UgZG9uJ3QgZ2l2ZSB0aGUgSU8gYWRkcmVzcyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSwgdGhlbiB0aGUgZHJpdmVyCit3aWxsIG5vdCBmaW5kIHRoZSBjYXJkLgorVGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZToKKyBjb205MGlvPTxpbz5bLDxpcnE+XVssPG5hbWU+XSAKKworSWYgeW91IGxvYWQgdGhlIGNoaXBzZXQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgdGhlIG9wdGlvbnMgYXJlOgorIGlvPTxpbz4gaXJxPTxpcnE+IGRldmljZT08bmFtZT4KKworIDQuIEFSQ25ldCBSSU0gSSBjYXJkcy4KKworVGhlc2UgYXJlIENPTTkweHggY2hpcHMgd2hpY2ggYXJlIF9jb21wbGV0ZWx5XyBtZW1vcnkgbWFwcGVkLiBUaGUgc3VwcG9ydCBmb3IKK3RoZXNlIGlzIG5vdCB0ZXN0ZWQuIElmIHlvdSBoYXZlIG9uZSwgcGxlYXNlIG1haWwgdGhlIGF1dGhvciB3aXRoIGEgc3VjY2VzcyAKK3JlcG9ydC4gQWxsIG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQsIGV4Y2VwdCB0aGUgZGV2aWNlIG5hbWUuCitDb21tYW5kIGxpbmUgb3B0aW9uczoKKyBhcmNyaW1pPTxzaG1lbT4sPGlycT4sPG5vZGVfSUQ+Wyw8bmFtZT5dCisKK0lmIHlvdSBsb2FkIHRoZSBjaGlwc2V0IHN1cHBvcnQgYXMgYSBtb2R1bGUsIHRoZSBvcHRpb25zIGFyZToKKyBzaG1lbT08c2htZW0+IGlycT08aXJxPiBub2RlPTxub2RlX0lEPiBkZXZpY2U9PG5hbWU+CisKKworTG9hZGFibGUgTW9kdWxlIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbmZpZ3VyZSBhbmQgcmVidWlsZCBMaW51eC4gIFdoZW4gYXNrZWQsIGFuc3dlciAnbScgdG8gIkdlbmVyaWMgQVJDbmV0IAorc3VwcG9ydCIgYW5kIHRvIHN1cHBvcnQgZm9yIHlvdXIgQVJDbmV0IGNoaXBzZXQgaWYgeW91IHdhbnQgdG8gdXNlIHRoZQorbG9hZGFibGUgbW9kdWxlLiBZb3UgY2FuIGFsc28gc2F5ICd5JyB0byAiR2VuZXJpYyBBUkNuZXQgc3VwcG9ydCIgYW5kICdtJyAKK3RvIHRoZSBjaGlwc2V0IHN1cHBvcnQgaWYgeW91IHdpc2guCisKKwltYWtlIGNvbmZpZworCW1ha2UgY2xlYW4JCisJbWFrZSB6SW1hZ2UKKwltYWtlIG1vZHVsZXMKKwkKK0lmIHlvdSdyZSB1c2luZyBhIGxvYWRhYmxlIG1vZHVsZSwgeW91IG5lZWQgdG8gdXNlIGluc21vZCB0byBsb2FkIGl0LCBhbmQKK3lvdSBjYW4gc3BlY2lmeSB2YXJpb3VzIGNoYXJhY3RlcmlzdGljcyBvZiB5b3VyIGNhcmQgb24gdGhlIGNvbW1hbmQKK2xpbmUuICAoSW4gcmVjZW50IHZlcnNpb25zIG9mIHRoZSBkcml2ZXIsIGF1dG9wcm9iaW5nIGlzIG11Y2ggbW9yZSByZWxpYWJsZQorYW5kIHdvcmtzIGFzIGEgbW9kdWxlLCBzbyBtb3N0IG9mIHRoaXMgaXMgbm93IHVubmVjZXNzYXJ5LikKKworRm9yIGV4YW1wbGU6CisJY2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcworCWluc21vZCBhcmNuZXQubworCWluc21vZCBjb205MHh4Lm8KKwlpbnNtb2QgY29tMjAwMjAubyBpbz0weDJlMCBkZXZpY2U9ZXRoMQorCQorCitVc2luZyB0aGUgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBidWlsZCB5b3VyIGtlcm5lbCB3aXRoIEFSQ25ldCBDT005MHh4IHN1cHBvcnQgaW5jbHVkZWQsIGl0IHNob3VsZCAKK3Byb2JlIGZvciB5b3VyIGNhcmQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBib290LiBJZiB5b3UgdXNlIGEgZGlmZmVyZW50CitjaGlwc2V0IGRyaXZlciBjb21wbGllZCBpbnRvIHRoZSBrZXJuZWwsIHlvdSBtdXN0IGdpdmUgdGhlIG5lY2Vzc2FyeSBvcHRpb25zCitvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSwgYXMgZGV0YWlsZWQgYWJvdmUuCisKK0dvIHJlYWQgdGhlIE5FVC0yLUhPV1RPIGFuZCBFVEhFUk5FVC1IT1dUTyBmb3IgTGludXg7IHRoZXkgc2hvdWxkIGJlCithdmFpbGFibGUgd2hlcmUgeW91IHBpY2tlZCB1cCB0aGlzIGRyaXZlci4gIFRoaW5rIG9mIHlvdXIgQVJDbmV0IGFzIGEKK3NvdXBlZC11cCAob3IgZG93biwgYXMgdGhlIGNhc2UgbWF5IGJlKSBFdGhlcm5ldCBjYXJkLgorCitCeSB0aGUgd2F5LCBiZSBzdXJlIHRvIGNoYW5nZSBhbGwgcmVmZXJlbmNlcyBmcm9tICJldGgwIiB0byAiYXJjMCIgaW4gdGhlCitIT1dUT3MuICBSZW1lbWJlciB0aGF0IEFSQ25ldCBpc24ndCBhICJ0cnVlIiBFdGhlcm5ldCwgYW5kIHRoZSBkZXZpY2UgbmFtZQoraXMgRElGRkVSRU5ULgorCisKK011bHRpcGxlIENhcmRzIGluIE9uZSBDb21wdXRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpbnV4IGhhcyBwcmV0dHkgZ29vZCBzdXBwb3J0IGZvciB0aGlzIG5vdywgYnV0IHNpbmNlIEkndmUgYmVlbiBidXN5LCB0aGUKK0FSQ25ldCBkcml2ZXIgaGFzIHNvbWV3aGF0IHN1ZmZlcmVkIGluIHRoaXMgcmVzcGVjdC4gQ09NOTB4eCBzdXBwb3J0LCBpZiAKK2NvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgd2lsbCAodHJ5IHRvKSBhdXRvZGV0ZWN0IGFsbCB0aGUgaW5zdGFsbGVkIGNhcmRzLiAKKworSWYgeW91IGhhdmUgb3RoZXIgY2FyZHMsIHdpdGggc3VwcG9ydCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHRoZW4geW91IGNhbiAKK2p1c3QgcmVwZWF0IHRoZSBvcHRpb25zIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBlLmcuOgorTElMTzogbGludXggY29tMjAwMjA9MHgyZTAgY29tMjAwMjA9MHgzODAgY29tOTBpbz0weDI2MAorCitJZiB5b3UgaGF2ZSB0aGUgY2hpcHNldCBzdXBwb3J0IGJ1aWx0IGFzIGEgbG9hZGFibGUgbW9kdWxlLCB0aGVuIHlvdSBuZWVkIHRvIAorZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKwlpbnNtb2QgLW8gYXJjMCBjb205MHh4CisJaW5zbW9kIC1vIGFyYzEgY29tMjAwMjAgaW89MHgyZTAKKwlpbnNtb2QgLW8gYXJjMiBjb205MHh4CitUaGUgQVJDbmV0IGRyaXZlcnMgd2lsbCBub3cgc29ydCBvdXQgdGhlaXIgbmFtZXMgYXV0b21hdGljYWxseS4KKworCitIb3cgZG8gSSBnZXQgaXQgdG8gd29yayB3aXRoLi4uPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTkZTOiBTaG91bGQgYmUgZmluZSBsaW51eC0+bGludXgsIGp1c3QgcHJldGVuZCB5b3UncmUgdXNpbmcgRXRoZXJuZXQgY2FyZHMuIAorICAgICAgICBvYWsub2FrbGFuZC5lZHU6L3NpbXRlbC9tc2Rvcy9uZnMgaGFzIHNvbWUgbmljZSBET1MgY2xpZW50cy4gIFRoZXJlCisgICAgICAgIGlzIGFsc28gYSBET1MtYmFzZWQgTkZTIHNlcnZlciBjYWxsZWQgU09TUy4gIEl0IGRvZXNuJ3QgbXVsdGl0YXNrCisgICAgICAgIHF1aXRlIHRoZSB3YXkgTGludXggZG9lcyAoYWN0dWFsbHksIGl0IGRvZXNuJ3QgbXVsdGl0YXNrIEFUIEFMTCkgYnV0CisgICAgICAgIHlvdSBuZXZlciBrbm93IHdoYXQgeW91IG1pZ2h0IG5lZWQuCisgICAgICAgIAorICAgICAgICBXaXRoIEFtaVRDUCAoYW5kIHBvc3NpYmx5IG90aGVycyksIHlvdSBtYXkgbmVlZCB0byBzZXQgdGhlIGZvbGxvd2luZworICAgICAgICBvcHRpb25zIGluIHlvdXIgQW1pZ2EgbmZzdGFiOiAgTUQgMTAyNCBNUiAxMDI0IE1XIDEwMjQKKyAgICAgICAgKFRoYW5rcyB0byBDaHJpc3RpYW4gR290dHNjaGxpbmcgPGZlcmtzeUBpbmRpZ28udG5nLm9jaGUuZGU+CisJZm9yIHRoaXMuKQorCQorCVByb2JhYmx5IHRoZXNlIHJlZmVyIHRvIG1heGltdW0gTkZTIGRhdGEvcmVhZC93cml0ZSBibG9jayBzaXplcy4gIEkKKwlkb24ndCBrbm93IHdoeSB0aGUgZGVmYXVsdHMgb24gdGhlIEFtaWdhIGRpZG4ndCB3b3JrOyB3cml0ZSB0byBtZSBpZgorCXlvdSBrbm93IG1vcmUuCisKK0RPUzogSWYgeW91J3JlIHVzaW5nIHRoZSBmcmVld2FyZSBhcmNldGhlci5jb20sIHlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwKKyAgICAgICAgdGhlIGRyaXZlciBwYXRjaCBmcm9tIG15IHdlYiBwYWdlLiAgSXQgaGVscHMgd2l0aCBQQy9UQ1AsIGFuZCBhbHNvCisgICAgICAgIGNhbiBnZXQgYXJjZXRoZXIgdG8gbG9hZCBpZiBpdCB0aW1lZCBvdXQgdG9vIHF1aWNrbHkgZHVyaW5nCisgICAgICAgIGluaXRpYWxpemF0aW9uLiAgSW4gZmFjdCwgaWYgeW91IHVzZSBpdCBvbiBhIDM4NisgeW91IFJFQUxMWSBuZWVkCisgICAgICAgIHRoZSBwYXRjaCwgcmVhbGx5LgorCQorV2luZG93czogIFNlZSBET1MgOikgIFRydW1wZXQgV2luc29jayB3b3JrcyBmaW5lIHdpdGggZWl0aGVyIHRoZSBOb3ZlbGwgb3IKKwlBcmNldGhlciBjbGllbnQsIGFzc3VtaW5nIHlvdSByZW1lbWJlciB0byBsb2FkIHdpbnBrdCBvZiBjb3Vyc2UuCisKK0xBTiBNYW5hZ2VyIGFuZCBXaW5kb3dzIGZvciBXb3JrZ3JvdXBzOiBUaGVzZSBwcm9ncmFtcyB1c2UgcHJvdG9jb2xzIHRoYXQKKyAgICAgICAgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBJbnRlcm5ldCBzdGFuZGFyZC4gIFRoZXkgdHJ5IHRvIHByZXRlbmQKKyAgICAgICAgdGhlIGNhcmRzIGFyZSBFdGhlcm5ldCwgYW5kIGNvbmZ1c2UgZXZlcnlvbmUgZWxzZSBvbiB0aGUgbmV0d29yay4gCisgICAgICAgIAorICAgICAgICBIb3dldmVyLCB2Mi4wMCBhbmQgaGlnaGVyIG9mIHRoZSBMaW51eCBBUkNuZXQgZHJpdmVyIHN1cHBvcnRzIHRoaXMKKyAgICAgICAgcHJvdG9jb2wgdmlhIHRoZSAnYXJjMGUnIGRldmljZS4gIFNlZSB0aGUgc2VjdGlvbiBvbiAiTXVsdGlwcm90b2NvbAorICAgICAgICBTdXBwb3J0IiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCVVzaW5nIHRoZSBmcmVld2FyZSBTYW1iYSBzZXJ2ZXIgYW5kIGNsaWVudHMgZm9yIExpbnV4LCB5b3UgY2FuIG5vdworCWludGVyZmFjZSBxdWl0ZSBuaWNlbHkgd2l0aCBUQ1AvSVAtYmFzZWQgV2ZXZyBvciBMYW4gTWFuYWdlcgorCW5ldHdvcmtzLgorCQorV2luZG93cyA5NTogVG9vbHMgYXJlIGluY2x1ZGVkIHdpdGggV2luOTUgdGhhdCBsZXQgeW91IHVzZSBlaXRoZXIgdGhlIExBTk1BTgorCXN0eWxlIG5ldHdvcmsgZHJpdmVycyAoTkRJUykgb3IgTm92ZWxsIGRyaXZlcnMgKE9ESSkgdG8gaGFuZGxlIHlvdXIKKwlBUkNuZXQgcGFja2V0cy4gIElmIHlvdSB1c2UgT0RJLCB5b3UnbGwgbmVlZCB0byB1c2UgdGhlICdhcmMwJworCWRldmljZSB3aXRoIExpbnV4LiAgSWYgeW91IHVzZSBORElTLCB0aGVuIHRyeSB0aGUgJ2FyYzBlJyBkZXZpY2UuIAorCVNlZSB0aGUgIk11bHRpcHJvdG9jb2wgU3VwcG9ydCIgc2VjdGlvbiBiZWxvdyBpZiB5b3UgbmVlZCBhcmMwZSwKKwl5b3UncmUgY29tcGxldGVseSBpbnNhbmUsIGFuZC9vciB5b3UgbmVlZCB0byBidWlsZCBzb21lIGtpbmQgb2YKKwloeWJyaWQgbmV0d29yayB0aGF0IHVzZXMgYm90aCBlbmNhcHN1bGF0aW9uIHR5cGVzLgorCitPUy8yOiBJJ3ZlIGJlZW4gdG9sZCBpdCB3b3JrcyB1bmRlciBXYXJwIENvbm5lY3Qgd2l0aCBhbiBBUkNuZXQgZHJpdmVyIGZyb20KKwlTTUMuICBZb3UgbmVlZCB0byB1c2UgdGhlICdhcmMwZScgaW50ZXJmYWNlIGZvciB0aGlzLiAgSWYgeW91IGdldAorCXRoZSBTTUMgZHJpdmVyIHRvIHdvcmsgd2l0aCB0aGUgVENQL0lQIHN0dWZmIGluY2x1ZGVkIGluIHRoZQorCSJub3JtYWwiIFdhcnAgQm9udXMgUGFjaywgbGV0IG1lIGtub3cuCisKKwlmdHAubWljcm9zb2Z0LmNvbSBhbHNvIGhhcyBhIGZyZWV3YXJlICJMYW4gTWFuYWdlciBmb3IgT1MvMiIgY2xpZW50CisJd2hpY2ggc2hvdWxkIHVzZSB0aGUgc2FtZSBwcm90b2NvbCBhcyBXZldnIGRvZXMuICBJIGhhZCBubyBsdWNrCisJaW5zdGFsbGluZyBpdCB1bmRlciBXYXJwLCBob3dldmVyLiAgUGxlYXNlIG1haWwgbWUgd2l0aCBhbnkgcmVzdWx0cy4KKworTmV0QlNEL0FtaVRDUDogVGhlc2UgdXNlIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBJbnRlcm5ldCBzdGFuZGFyZCBBUkNuZXQKKwlwcm90b2NvbCAoUkZDMTA1MSkgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBMaW51eCBkcml2ZXIgdjIuMTAKKwlBTFBIQSBhbmQgYWJvdmUgdXNpbmcgdGhlIGFyYzBzIGRldmljZS4gKFNlZSAiTXVsdGlwcm90b2NvbCBBUkNuZXQiCisJYmVsb3cuKSAgKiogTmV3ZXIgdmVyc2lvbnMgb2YgTmV0QlNEIGFwcGFyZW50bHkgc3VwcG9ydCBSRkMxMjAxLgorCisKK1VzaW5nIE11bHRpcHJvdG9jb2wgQVJDbmV0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQVJDbmV0IGRyaXZlciB2Mi4xMCBBTFBIQSBzdXBwb3J0cyB0aHJlZSBwcm90b2NvbHMsIGVhY2ggb24gaXRzIG93bgorInZpcnR1YWwgbmV0d29yayBkZXZpY2UiOgorCisJYXJjMCAgLSBSRkMxMjAxIHByb3RvY29sLCB0aGUgb2ZmaWNpYWwgSW50ZXJuZXQgc3RhbmRhcmQgd2hpY2gganVzdAorCQloYXBwZW5zIHRvIGJlIDEwMCUgY29tcGF0aWJsZSB3aXRoIE5vdmVsbCdzIFRSWE5FVCBkcml2ZXIuIAorCQlWZXJzaW9uIDEuMDAgb2YgdGhlIEFSQ25ldCBkcml2ZXIgc3VwcG9ydGVkIF9vbmx5XyB0aGlzCisJCXByb3RvY29sLiAgYXJjMCBpcyB0aGUgZmFzdGVzdCBvZiB0aGUgdGhyZWUgcHJvdG9jb2xzIChmb3IKKwkJd2hhdGV2ZXIgcmVhc29uKSwgYW5kIGFsbG93cyBsYXJnZXIgcGFja2V0cyB0byBiZSB1c2VkCisJCWJlY2F1c2UgaXQgc3VwcG9ydHMgUkZDMTIwMSAicGFja2V0IHNwbGl0dGluZyIgb3BlcmF0aW9ucy4gCisJCVVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIG5lZWQgdG8gdXNlIGEgZGlmZmVyZW50IHByb3RvY29sLAorCQlJIHN0cm9uZ2x5IHN1Z2dlc3QgdGhhdCB5b3Ugc3RpY2sgd2l0aCB0aGlzIG9uZS4KKwkJCisJYXJjMGUgLSAiRXRoZXJuZXQtRW5jYXBzdWxhdGlvbiIgd2hpY2ggc2VuZHMgcGFja2V0cyBvdmVyIEFSQ25ldAorCQl0aGF0IGFyZSBhY3R1YWxseSBhIGxvdCBsaWtlIEV0aGVybmV0IHBhY2tldHMsIGluY2x1ZGluZyB0aGUKKwkJNi1ieXRlIGhhcmR3YXJlIGFkZHJlc3Nlcy4gIFRoaXMgcHJvdG9jb2wgaXMgY29tcGF0aWJsZSB3aXRoCisJCU1pY3Jvc29mdCdzIE5ESVMgQVJDbmV0IGRyaXZlciwgbGlrZSB0aGUgb25lIGluIFdmV2cgYW5kCisJCUxBTk1BTi4gIEJlY2F1c2UgdGhlIE1UVSBvZiA0OTMgaXMgYWN0dWFsbHkgc21hbGxlciB0aGFuIHRoZQorCQlvbmUgInJlcXVpcmVkIiBieSBUQ1AvSVAgKDU3NiksIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgc29tZQorCQluZXR3b3JrIG9wZXJhdGlvbnMgd2lsbCBub3QgZnVuY3Rpb24gcHJvcGVybHkuICBUaGUgTGludXgKKwkJVENQL0lQIGxheWVyIGNhbiBjb21wZW5zYXRlIGluIG1vc3QgY2FzZXMsIGhvd2V2ZXIsIGJ5CisJCWF1dG9tYXRpY2FsbHkgZnJhZ21lbnRpbmcgdGhlIFRDUC9JUCBwYWNrZXRzIHRvIG1ha2UgdGhlbQorCQlmaXQuICBhcmMwZSBhbHNvIHdvcmtzIHNsaWdodGx5IG1vcmUgc2xvd2x5IHRoYW4gYXJjMCwgZm9yCisJCXJlYXNvbnMgeWV0IHRvIGJlIGRldGVybWluZWQuICAoUHJvYmFibHkgaXQncyB0aGUgc21hbGxlcgorCQlNVFUgdGhhdCBkb2VzIGl0LikKKwkJCisJYXJjMHMgLSBUaGUgIltzXWltcGxlIiBSRkMxMDUxIHByb3RvY29sIGlzIHRoZSAicHJldmlvdXMiIEludGVybmV0CisJCXN0YW5kYXJkIHRoYXQgaXMgY29tcGxldGVseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3CisJCXN0YW5kYXJkLiAgU29tZSBzb2Z0d2FyZSB0b2RheSwgaG93ZXZlciwgY29udGludWVzIHRvCisJCXN1cHBvcnQgdGhlIG9sZCBzdGFuZGFyZCAoYW5kIG9ubHkgdGhlIG9sZCBzdGFuZGFyZCkKKwkJaW5jbHVkaW5nIE5ldEJTRCBhbmQgQW1pVENQLiAgUkZDMTA1MSBhbHNvIGRvZXMgbm90IHN1cHBvcnQKKwkJUkZDMTIwMSdzIHBhY2tldCBzcGxpdHRpbmcsIGFuZCB0aGUgTVRVIG9mIDUwNyBpcyBzdGlsbAorCQlzbWFsbGVyIHRoYW4gdGhlIEludGVybmV0ICJyZXF1aXJlbWVudCwiIHNvIGl0J3MgcXVpdGUKKwkJcG9zc2libGUgdGhhdCB5b3UgbWF5IHJ1biBpbnRvIHByb2JsZW1zLiAgSXQncyBhbHNvIHNsb3dlcgorCQl0aGFuIFJGQzEyMDEgYnkgYWJvdXQgMjUlLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGFyYzBlLgorCQkKKwkJVGhlIGFyYzBzIHN1cHBvcnQgd2FzIGNvbnRyaWJ1dGVkIGJ5IFRvbWFzeiBNb3R5bGV3c2tpCisJCWFuZCBtb2RpZmllZCBzb21ld2hhdCBieSBtZS4gIEJ1Z3MgYXJlIHByb2JhYmx5IG15IGZhdWx0LgorCitZb3UgY2FuIGNob29zZSBub3QgdG8gY29tcGlsZSBhcmMwZSBhbmQgYXJjMHMgaW50byB0aGUgZHJpdmVyIGlmIHlvdSB3YW50IC0KK3RoaXMgd2lsbCBzYXZlIHlvdSBhIGJpdCBvZiBtZW1vcnkgYW5kIGF2b2lkIGNvbmZ1c2lvbiB3aGVuIGVnLiB0cnlpbmcgdG8KK3VzZSB0aGUgIk5GUy1yb290IiBzdHVmZiBpbiByZWNlbnQgTGludXgga2VybmVscy4KKworVGhlIGFyYzBlIGFuZCBhcmMwcyBkZXZpY2VzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgZmlyc3QKK2lmY29uZmlnIHRoZSBhcmMwIGRldmljZS4gIFRvIGFjdHVhbGx5IHVzZSB0aGVtLCB0aG91Z2gsIHlvdSBuZWVkIHRvIGFsc28KK2lmY29uZmlnIHRoZSBvdGhlciB2aXJ0dWFsIGRldmljZXMgeW91IG5lZWQuICBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygd2F5cyB5b3UKK2NhbiBzZXQgdXAgeW91ciBuZXR3b3JrIHRoZW46CisKKworMS4gU2luZ2xlIFByb3RvY29sLgorCisgICBUaGlzIGlzIHRoZSBzaW1wbGVzdCB3YXkgdG8gY29uZmlndXJlIHlvdXIgbmV0d29yazogdXNlIGp1c3Qgb25lIG9mIHRoZQorICAgdHdvIGF2YWlsYWJsZSBwcm90b2NvbHMuICBBcyBtZW50aW9uZWQgYWJvdmUsIGl0J3MgYSBnb29kIGlkZWEgdG8gdXNlCisgICBvbmx5IGFyYzAgdW5sZXNzIHlvdSBoYXZlIGEgZ29vZCByZWFzb24gKGxpa2Ugc29tZSBvdGhlciBzb2Z0d2FyZSwgaWUuCisgICBXZldnLCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBhcmMwZSkuCisgICAKKyAgIElmIHlvdSBuZWVkIG9ubHkgYXJjMCwgdGhlbiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHNob3VsZCBnZXQgeW91IGdvaW5nOgorICAgCWlmY29uZmlnIGFyYzAgTVkuSVAuQURELlJFU1MKKyAgIAlyb3V0ZSBhZGQgTVkuSVAuQURELlJFU1MgYXJjMAorICAgCXJvdXRlIGFkZCAtbmV0IFNVQi5ORVQuQURELlJFU1MgYXJjMAorICAgCVthZGQgb3RoZXIgbG9jYWwgcm91dGVzIGhlcmVdCisgICAJCisgICBJZiB5b3UgbmVlZCBhcmMwZSAoYW5kIG9ubHkgYXJjMGUpLCBpdCdzIGEgbGl0dGxlIGRpZmZlcmVudDoKKyAgIAlpZmNvbmZpZyBhcmMwIE1ZLklQLkFERC5SRVNTCisgICAJaWZjb25maWcgYXJjMGUgTVkuSVAuQURELlJFU1MKKyAgIAlyb3V0ZSBhZGQgTVkuSVAuQURELlJFU1MgYXJjMGUKKyAgIAlyb3V0ZSBhZGQgLW5ldCBTVUIuTkVULkFERC5SRVNTIGFyYzBlCisgICAKKyAgIGFyYzBzIHdvcmtzIG11Y2ggdGhlIHNhbWUgd2F5IGFzIGFyYzBlLgorCisKKzIuIE1vcmUgdGhhbiBvbmUgcHJvdG9jb2wgb24gdGhlIHNhbWUgd2lyZS4KKworICAgTm93IHRoaW5ncyBzdGFydCBnZXR0aW5nIGNvbmZ1c2luZy4gIFRvIGV2ZW4gdHJ5IGl0LCB5b3UgbWF5IG5lZWQgdG8gYmUKKyAgIHBhcnRseSBjcmF6eS4gIEhlcmUncyB3aGF0ICpJKiBkaWQuIDopIE5vdGUgdGhhdCBJIGRvbid0IGluY2x1ZGUgYXJjMHMgaW4KKyAgIG15IGhvbWUgbmV0d29yazsgSSBkb24ndCBoYXZlIGFueSBOZXRCU0Qgb3IgQW1pVENQIGNvbXB1dGVycywgc28gSSBvbmx5CisgICB1c2UgYXJjMHMgZHVyaW5nIGxpbWl0ZWQgdGVzdGluZy4KKworICAgSSBoYXZlIHRocmVlIGNvbXB1dGVycyBvbiBteSBob21lIG5ldHdvcms7IHR3byBMaW51eCBib3hlcyAod2hpY2ggcHJlZmVyCisgICBSRkMxMjAxIHByb3RvY29sLCBmb3IgcmVhc29ucyBsaXN0ZWQgYWJvdmUpLCBhbmQgb25lIFhUIHRoYXQgY2FuJ3QgcnVuCisgICBMaW51eCBidXQgcnVucyB0aGUgZnJlZSBNaWNyb3NvZnQgTEFOTUFOIENsaWVudCBpbnN0ZWFkLgorCisgICBXb3JzZSwgb25lIG9mIHRoZSBMaW51eCBjb21wdXRlcnMgKGZyZWVkb20pIGFsc28gaGFzIGEgbW9kZW0gYW5kIGFjdHMgYXMKKyAgIGEgcm91dGVyIHRvIG15IEludGVybmV0IHByb3ZpZGVyLiAgVGhlIG90aGVyIExpbnV4IGJveCAoaW5zaWdodCkgYWxzbyBoYXMKKyAgIGl0cyBvd24gSVAgYWRkcmVzcyBhbmQgbmVlZHMgdG8gdXNlIGZyZWVkb20gYXMgaXRzIGRlZmF1bHQgZ2F0ZXdheS4gIFRoZQorICAgWFQgKHBhdGllbmNlKSwgaG93ZXZlciwgZG9lcyBub3QgaGF2ZSBpdHMgb3duIEludGVybmV0IElQIGFkZHJlc3MgYW5kIHNvCisgICBJIGFzc2lnbmVkIGl0IG9uZSBvbiBhICJwcml2YXRlIHN1Ym5ldCIgKGFzIGRlZmluZWQgYnkgUkZDMTU5NykuCisKKyAgIFRvIHN0YXJ0IHdpdGgsIHRha2UgYSBzaW1wbGUgbmV0d29yayB3aXRoIGp1c3QgaW5zaWdodCBhbmQgZnJlZWRvbS4gCisgICBJbnNpZ2h0IG5lZWRzIHRvOgorICAgCS0gdGFsayB0byBmcmVlZG9tIHZpYSBSRkMxMjAxIChhcmMwKSBwcm90b2NvbCwgYmVjYXVzZSBJIGxpa2UgaXQKKwkgIG1vcmUgYW5kIGl0J3MgZmFzdGVyLgorCS0gdXNlIGZyZWVkb20gYXMgaXRzIEludGVybmV0IGdhdGV3YXkuCisJCisgICBUaGF0J3MgcHJldHR5IGVhc3kgdG8gZG8uICBTZXQgdXAgaW5zaWdodCBsaWtlIHRoaXM6CisgICAJaWZjb25maWcgYXJjMCBpbnNpZ2h0CisgICAJcm91dGUgYWRkIGluc2lnaHQgYXJjMAorICAgCXJvdXRlIGFkZCBmcmVlZG9tIGFyYzAJLyogSSB3b3VsZCB1c2UgdGhlIHN1Ym5ldCBoZXJlIChsaWtlIEkgc2FpZAorCQkJCQl0byB0byBpbiAic2luZ2xlIHByb3RvY29sIiBhYm92ZSksCisgICAJCQkJCWJ1dCB0aGUgcmVzdCBvZiB0aGUgc3VibmV0CisgICAJCQkJCXVuZm9ydHVuYXRlbHkgbGllcyBhY3Jvc3MgdGhlIFBQUAorICAgCQkJCQlsaW5rIG9uIGZyZWVkb20sIHdoaWNoIGNvbmZ1c2VzCisgICAJCQkJCXRoaW5ncy4gKi8KKyAgIAlyb3V0ZSBhZGQgZGVmYXVsdCBndyBmcmVlZG9tCisgICAJCisgICBBbmQgZnJlZWRvbSBnZXRzIGNvbmZpZ3VyZWQgbGlrZSBzbzoKKyAgIAlpZmNvbmZpZyBhcmMwIGZyZWVkb20KKyAgIAlyb3V0ZSBhZGQgZnJlZWRvbSBhcmMwCisgICAJcm91dGUgYWRkIGluc2lnaHQgYXJjMAorICAgCS8qIGFuZCBkZWZhdWx0IGdhdGV3YXkgaXMgY29uZmlndXJlZCBieSBwcHBkICovCisgICAJCisgICBHcmVhdCwgbm93IGluc2lnaHQgdGFsa3MgdG8gZnJlZWRvbSBkaXJlY3RseSBvbiBhcmMwLCBhbmQgc2VuZHMgcGFja2V0cworICAgdG8gdGhlIEludGVybmV0IHRocm91Z2ggZnJlZWRvbS4gIElmIHlvdSBkaWRuJ3Qga25vdyBob3cgdG8gZG8gdGhlIGFib3ZlLAorICAgeW91IHNob3VsZCBwcm9iYWJseSBzdG9wIHJlYWRpbmcgdGhpcyBzZWN0aW9uIG5vdyBiZWNhdXNlIGl0IG9ubHkgZ2V0cworICAgd29yc2UuCisKKyAgIE5vdywgaG93IGRvIEkgYWRkIHBhdGllbmNlIGludG8gdGhlIG5ldHdvcms/ICBJdCB3aWxsIGJlIHVzaW5nIExBTk1BTgorICAgQ2xpZW50LCB3aGljaCBtZWFucyBJIG5lZWQgdGhlIGFyYzBlIGRldmljZS4gIEl0IG5lZWRzIHRvIGJlIGFibGUgdG8gdGFsaworICAgdG8gYm90aCBpbnNpZ2h0IGFuZCBmcmVlZG9tLCBhbmQgYWxzbyB1c2UgZnJlZWRvbSBhcyBhIGdhdGV3YXkgdG8gdGhlCisgICBJbnRlcm5ldC4gIChSZWNhbGwgdGhhdCBwYXRpZW5jZSBoYXMgYSAicHJpdmF0ZSBJUCBhZGRyZXNzIiB3aGljaCB3b24ndAorICAgd29yayBvbiB0aGUgSW50ZXJuZXQ7IHRoYXQncyBva2F5LCBJIGNvbmZpZ3VyZWQgTGludXggSVAgbWFzcXVlcmFkaW5nIG9uCisgICBmcmVlZG9tIGZvciB0aGlzIHN1Ym5ldCkuCisgICAKKyAgIFNvIHBhdGllbmNlIChuZWNlc3NhcmlseTsgSSBkb24ndCBoYXZlIGFub3RoZXIgSVAgbnVtYmVyIGZyb20gbXkKKyAgIHByb3ZpZGVyKSBoYXMgYW4gSVAgYWRkcmVzcyBvbiBhIGRpZmZlcmVudCBzdWJuZXQgdGhhbiBmcmVlZG9tIGFuZAorICAgaW5zaWdodCwgYnV0IG5lZWRzIHRvIHVzZSBmcmVlZG9tIGFzIGFuIEludGVybmV0IGdhdGV3YXkuICBXb3JzZSwgbW9zdAorICAgRE9TIG5ldHdvcmtpbmcgcHJvZ3JhbXMsIGluY2x1ZGluZyBMQU5NQU4sIGhhdmUgYnJhaW5kZWFkIG5ldHdvcmtpbmcKKyAgIHNjaGVtZXMgdGhhdCByZWx5IGNvbXBsZXRlbHkgb24gdGhlIG5ldG1hc2sgYW5kIGEgJ2RlZmF1bHQgZ2F0ZXdheScgdG8KKyAgIGRldGVybWluZSBob3cgdG8gcm91dGUgcGFja2V0cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBnZXQgdG8gZnJlZWRvbSBvcgorICAgaW5zaWdodCwgcGF0aWVuY2UgV0lMTCBzZW5kIHRocm91Z2ggaXRzIGRlZmF1bHQgZ2F0ZXdheSwgcmVnYXJkbGVzcyBvZgorICAgdGhlIGZhY3QgdGhhdCBib3RoIGZyZWVkb20gYW5kIGluc2lnaHQgKGNvdXJ0ZXN5IG9mIHRoZSBhcmMwZSBkZXZpY2UpCisgICBjb3VsZCB1bmRlcnN0YW5kIGEgZGlyZWN0IHRyYW5zbWlzc2lvbi4KKyAgIAorICAgSSBjb21wZW5zYXRlIGJ5IGdpdmluZyBmcmVlZG9tIGFuIGV4dHJhIElQIGFkZHJlc3MgLSBhbGlhc2VkICdnYXRla2VlcGVyJworICAgLSB0aGF0IGlzIG9uIG15IHByaXZhdGUgc3VibmV0LCB0aGUgc2FtZSBzdWJuZXQgdGhhdCBwYXRpZW5jZSBpcyBvbi4gIEkKKyAgIHRoZW4gZGVmaW5lIGdhdGVrZWVwZXIgdG8gYmUgdGhlIGRlZmF1bHQgZ2F0ZXdheSBmb3IgcGF0aWVuY2UuCisgICAKKyAgIFRvIGNvbmZpZ3VyZSBmcmVlZG9tIChpbiBhZGRpdGlvbiB0byB0aGUgY29tbWFuZHMgYWJvdmUpOgorICAgCWlmY29uZmlnIGFyYzBlIGdhdGVrZWVwZXIKKyAgIAlyb3V0ZSBhZGQgZ2F0ZWtlZXBlciBhcmMwZQorICAgCXJvdXRlIGFkZCBwYXRpZW5jZSBhcmMwZQorICAgCisgICBUaGlzIHdheSwgZnJlZWRvbSB3aWxsIHNlbmQgYWxsIHBhY2tldHMgZm9yIHBhdGllbmNlIHRocm91Z2ggYXJjMGUsCisgICBnaXZpbmcgaXRzIElQIGFkZHJlc3MgYXMgZ2F0ZWtlZXBlciAob24gdGhlIHByaXZhdGUgc3VibmV0KS4gIFdoZW4gaXQKKyAgIHRhbGtzIHRvIGluc2lnaHQgb3IgdGhlIEludGVybmV0LCBpdCB3aWxsIHVzZSBpdHMgImZyZWVkb20iIEludGVybmV0IElQCisgICBhZGRyZXNzLgorICAgCisgICBZb3Ugd2lsbCBub3RpY2UgdGhhdCB3ZSBoYXZlbid0IGNvbmZpZ3VyZWQgdGhlIGFyYzBlIGRldmljZSBvbiBpbnNpZ2h0LiAKKyAgIFRoaXMgd291bGQgd29yaywgYnV0IGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5LCBhbmQgd291bGQgcmVxdWlyZSBtZSB0bworICAgYXNzaWduIGluc2lnaHQgYW5vdGhlciBzcGVjaWFsIElQIG51bWJlciBmcm9tIG15IHByaXZhdGUgc3VibmV0LiAgU2luY2UKKyAgIGJvdGggaW5zaWdodCBhbmQgcGF0aWVuY2UgYXJlIHVzaW5nIGZyZWVkb20gYXMgdGhlaXIgZGVmYXVsdCBnYXRld2F5LCB0aGUKKyAgIHR3byBjYW4gYWxyZWFkeSB0YWxrIHRvIGVhY2ggb3RoZXIuCisgICAKKyAgIEl0J3MgcXVpdGUgZm9ydHVuYXRlIHRoYXQgSSBzZXQgdGhpbmdzIHVwIGxpa2UgdGhpcyB0aGUgZmlyc3QgdGltZSAoY291Z2gKKyAgIGNvdWdoKSBiZWNhdXNlIGl0J3MgcmVhbGx5IGhhbmR5IHdoZW4gSSBib290IGluc2lnaHQgaW50byBET1MuICBUaGVyZSwgaXQKKyAgIHJ1bnMgdGhlIE5vdmVsbCBPREkgcHJvdG9jb2wgc3RhY2ssIHdoaWNoIG9ubHkgd29ya3Mgd2l0aCBSRkMxMjAxIEFSQ25ldC4gCisgICBJbiB0aGlzIG1vZGUgaXQgd291bGQgYmUgaW1wb3NzaWJsZSBmb3IgaW5zaWdodCB0byBjb21tdW5pY2F0ZSBkaXJlY3RseQorICAgd2l0aCBwYXRpZW5jZSwgc2luY2UgdGhlIE5vdmVsbCBzdGFjayBpcyBpbmNvbXBhdGlibGUgd2l0aCBNaWNyb3NvZnQncworICAgRXRoZXJuZXQtRW5jYXAuICBXaXRob3V0IGNoYW5naW5nIGFueSBzZXR0aW5ncyBvbiBmcmVlZG9tIG9yIHBhdGllbmNlLCBJCisgICBzaW1wbHkgc2V0IGZyZWVkb20gYXMgdGhlIGRlZmF1bHQgZ2F0ZXdheSBmb3IgaW5zaWdodCAobm93IGluIERPUywKKyAgIHJlbWVtYmVyKSBhbmQgYWxsIHRoZSBmb3J3YXJkaW5nIGhhcHBlbnMgImF1dG9tYWdpY2FsbHkiIGJldHdlZW4gdGhlIHR3bworICAgaG9zdHMgdGhhdCB3b3VsZCBub3JtYWxseSBub3QgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSBhdCBhbGwuCisgICAKKyAgIEZvciB0aG9zZSB3aG8gbGlrZSBkaWFncmFtcywgSSBoYXZlIGNyZWF0ZWQgdHdvICJ2aXJ0dWFsIHN1Ym5ldHMiIG9uIHRoZQorICAgc2FtZSBwaHlzaWNhbCBBUkNuZXQgd2lyZS4gIFlvdSBjYW4gcGljdHVyZSBpdCBsaWtlIHRoaXM6CisgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICBbUkZDMTIwMSBORVRXT1JLXSAgICAgICAgICAgICAgICAgICBbRVRIRVItRU5DQVAgTkVUV09SS10KKyAgICAgIChyZWdpc3RlcmVkIEludGVybmV0IHN1Ym5ldCkgICAgICAgICAgIChSRkMxNTk3IHByaXZhdGUgc3VibmV0KQorICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElQIE1hc3F1ZXJhZGUpCisgICAgICAgICAgLy0tLS0tLS0tLS0tLS0tLVwgICAgICAgICAqICAgICAgICAgICAgLy0tLS0tLS0tLS0tLS0tLVwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICAgICAgICAgIHwgICAgICAgICAgICAgICArLUZyZWVkb20tKi1HYXRla2VlcGVyLSsgICAgICAgICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgfCAgICAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgICBcLS0tLS0tLSstLS0tLS0tLyAgICB8ICAgICogICAgICAgICAgICBcLS0tLS0tLSstLS0tLS0tLworICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgSW5zaWdodCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgUGF0aWVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnRlcm5ldCkKKworCisKK0l0IHdvcmtzOiB3aGF0IG5vdz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VuZCBtYWlsIGRlc2NyaWJpbmcgeW91ciBzZXR1cCwgcHJlZmVyYWJseSBpbmNsdWRpbmcgZHJpdmVyIHZlcnNpb24sIGtlcm5lbAordmVyc2lvbiwgQVJDbmV0IGNhcmQgbW9kZWwsIENQVSB0eXBlLCBudW1iZXIgb2Ygc3lzdGVtcyBvbiB5b3VyIG5ldHdvcmssIGFuZAorbGlzdCBvZiBzb2Z0d2FyZSBpbiB1c2UgdG8gbWUgYXQgdGhlIGZvbGxvd2luZyBhZGRyZXNzOgorCWFwZW53YXJyQHdvcmxkdmlzaW9ucy5jYQorCitJIGRvIHNlbmQgKHNvbWV0aW1lcyBhdXRvbWF0ZWQpIHJlcGxpZXMgdG8gYWxsIG1lc3NhZ2VzIEkgcmVjZWl2ZS4gIE15IGVtYWlsCitjYW4gYmUgd2VpcmQgKGFuZCBhbHNvIHVzdWFsbHkgZ2V0cyBmb3J3YXJkZWQgYWxsIG92ZXIgdGhlIHBsYWNlIGFsb25nIHRoZQord2F5IHRvIG1lKSwgc28gaWYgeW91IGRvbid0IGdldCBhIHJlcGx5IHdpdGhpbiBhIHJlYXNvbmFibGUgdGltZSwgcGxlYXNlCityZXNlbmQuCisKKworSXQgZG9lc24ndCB3b3JrOiB3aGF0IG5vdz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RvIHRoZSBzYW1lIGFzIGFib3ZlLCBidXQgYWxzbyBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgdGhlIGlmY29uZmlnIGFuZCByb3V0ZQorY29tbWFuZHMsIGFzIHdlbGwgYXMgYW55IHBlcnRpbmVudCBsb2cgZW50cmllcyAoaWUuIGFueXRoaW5nIHRoYXQgc3RhcnRzCit3aXRoICJhcmNuZXQ6IiBhbmQgaGFzIHNob3duIHVwIHNpbmNlIHRoZSBsYXN0IHJlYm9vdCkgaW4geW91ciBtYWlsLgorCitJZiB5b3Ugd2FudCB0byB0cnkgZml4aW5nIGl0IHlvdXJzZWxmIChJIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGF0IHlvdSBtYWlsIG1lCithYm91dCB0aGUgcHJvYmxlbSBmaXJzdCwgc2luY2UgaXQgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gc29sdmVkKSB5b3UgbWF5Cit3YW50IHRvIHRyeSBzb21lIG9mIHRoZSBkZWJ1ZyBsZXZlbHMgYXZhaWxhYmxlLiAgRm9yIGhlYXZ5IHRlc3Rpbmcgb24KK0RfRFVSSU5HIG9yIG1vcmUsIGl0IHdvdWxkIGJlIGEgUkVBTExZIGdvb2QgaWRlYSB0byBraWxsIHlvdXIga2xvZ2QgZGFlbW9uCitmaXJzdCEgIERfRFVSSU5HIGRpc3BsYXlzIDQtNSBsaW5lcyBmb3IgZWFjaCBwYWNrZXQgc2VudCBvciByZWNlaXZlZC4gIERfVFgsCitEX1JYLCBhbmQgRF9TS0IgYWN0dWFsbHkgRElTUExBWSBlYWNoIHBhY2tldCBhcyBpdCBpcyBzZW50IG9yIHJlY2VpdmVkLAord2hpY2ggaXMgb2J2aW91c2x5IHF1aXRlIGJpZy4KKworU3RhcnRpbmcgd2l0aCB2Mi40MCBBTFBIQSwgdGhlIGF1dG9wcm9iZSByb3V0aW5lcyBoYXZlIGNoYW5nZWQKK3NpZ25pZmljYW50bHkuICBJbiBwYXJ0aWN1bGFyLCB0aGV5IHdvbid0IHRlbGwgeW91IHdoeSB0aGUgY2FyZCB3YXMgbm90Citmb3VuZCB1bmxlc3MgeW91IHR1cm4gb24gdGhlIERfSU5JVF9SRUFTT05TIGRlYnVnZ2luZyBmbGFnLgorCitPbmNlIHRoZSBkcml2ZXIgaXMgcnVubmluZywgeW91IGNhbiBydW4gdGhlIGFyY2R1bXAgc2hlbGwgc2NyaXB0IChhdmFpbGFibGUKK2Zyb20gbWUgb3IgaW4gdGhlIGZ1bGwgQVJDbmV0IHBhY2thZ2UsIGlmIHlvdSBoYXZlIGl0KSBhcyByb290IHRvIGxpc3QgdGhlCitjb250ZW50cyBvZiB0aGUgYXJjbmV0IGJ1ZmZlcnMgYXQgYW55IHRpbWUuICBUbyBtYWtlIGFueSBzZW5zZSBhdCBhbGwgb3V0IG9mCit0aGlzLCB5b3Ugc2hvdWxkIGdyYWIgdGhlIHBlcnRpbmVudCBSRkNzLiAoc29tZSBhcmUgbGlzdGVkIG5lYXIgdGhlIHRvcCBvZgorYXJjbmV0LmMpLiAgYXJjZHVtcCBhc3N1bWVzIHlvdXIgY2FyZCBpcyBhdCAweEQwMDAwLiAgSWYgaXQgaXNuJ3QsIGVkaXQgdGhlCitzY3JpcHQuCisKK0J1ZmZlcnMgMCBhbmQgMSBhcmUgdXNlZCBmb3IgcmVjZWl2aW5nLCBhbmQgQnVmZmVycyAyIGFuZCAzIGFyZSBmb3Igc2VuZGluZy4gCitQaW5nLXBvbmcgYnVmZmVycyBhcmUgaW1wbGVtZW50ZWQgYm90aCB3YXlzLgorCitJZiB5b3VyIGRlYnVnIGxldmVsIGluY2x1ZGVzIERfRFVSSU5HIGFuZCB5b3UgZGlkIE5PVCBkZWZpbmUgU0xPV19YTUlUX0NPUFksCit0aGUgYnVmZmVycyBhcmUgY2xlYXJlZCB0byBhIGNvbnN0YW50IHZhbHVlIG9mIDB4NDIgZXZlcnkgdGltZSB0aGUgY2FyZCBpcworcmVzZXQgKHdoaWNoIHNob3VsZCBvbmx5IGhhcHBlbiB3aGVuIHlvdSBkbyBhbiBpZmNvbmZpZyB1cCwgb3Igd2hlbiBMaW51eAorZGVjaWRlcyB0aGF0IHRoZSBkcml2ZXIgaXMgYnJva2VuKS4gIER1cmluZyBhIHRyYW5zbWl0LCB1bnVzZWQgcGFydHMgb2YgdGhlCitidWZmZXIgd2lsbCBiZSBjbGVhcmVkIHRvIDB4NDIgYXMgd2VsbC4gIFRoaXMgaXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmlndXJlCitvdXQgd2hpY2ggYnl0ZXMgYXJlIGJlaW5nIHVzZWQgYnkgYSBwYWNrZXQuCisKK1lvdSBjYW4gY2hhbmdlIHRoZSBkZWJ1ZyBsZXZlbCB3aXRob3V0IHJlY29tcGlsaW5nIHRoZSBrZXJuZWwgYnkgdHlwaW5nOgorCWlmY29uZmlnIGFyYzAgZG93biBtZXRyaWMgMXh4eAorCS9ldGMvcmMuZC9yYy5pbmV0MQord2hlcmUgInh4eCIgaXMgdGhlIGRlYnVnIGxldmVsIHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsICJtZXRyaWMgMTAxNSIgd291bGQgcHV0Cit5b3UgYXQgZGVidWcgbGV2ZWwgMTUuICBEZWJ1ZyBsZXZlbCA3IGlzIGN1cnJlbnRseSB0aGUgZGVmYXVsdC4KKworTm90ZSB0aGF0IHRoZSBkZWJ1ZyBsZXZlbCBpcyAoc3RhcnRpbmcgd2l0aCB2MS45MCBBTFBIQSkgYSBiaW5hcnkKK2NvbWJpbmF0aW9uIG9mIGRpZmZlcmVudCBkZWJ1ZyBmbGFnczsgc28gZGVidWcgbGV2ZWwgNyBpcyByZWFsbHkgMSsyKzQgb3IKK0RfTk9STUFMK0RfRVhUUkErRF9JTklULiAgVG8gaW5jbHVkZSBEX0RVUklORywgeW91IHdvdWxkIGFkZCAxNiB0byB0aGlzLAorcmVzdWx0aW5nIGluIGRlYnVnIGxldmVsIDIzLgorCitJZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0LCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBrbm93IGFueXdheS4gCitFLW1haWwgbWUgYWJvdXQgeW91ciBwcm9ibGVtLgorCisKK0kgd2FudCB0byBzZW5kIG1vbmV5OiB3aGF0IG5vdz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR28gdGFrZSBhIG5hcCBvciBzb21ldGhpbmcuICBZb3UnbGwgZmVlbCBiZXR0ZXIgaW4gdGhlIG1vcm5pbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTIxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnR4dApAQCAtMCwwICsxLDggQEAKK0luIG9yZGVyIHRvIHVzZSBhbnl0aGluZyBidXQgdGhlIG1vc3QgcHJpbWl0aXZlIGZ1bmN0aW9ucyBvZiBBVE0sCitzZXZlcmFsIHVzZXItbW9kZSBwcm9ncmFtcyBhcmUgcmVxdWlyZWQgdG8gYXNzaXN0IHRoZSBrZXJuZWwuIFRoZXNlCitwcm9ncmFtcyBhbmQgcmVsYXRlZCBtYXRlcmlhbCBjYW4gYmUgZm91bmQgdmlhIHRoZSBBVE0gb24gTGludXggV2ViCitwYWdlIGF0IGh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0LworCitJZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zIHdpdGggQVRNLCBwbGVhc2UgcmVwb3J0IHRoZW0gb24gdGhlIEFUTQorb24gTGludXggbWFpbGluZyBsaXN0LiBTdWJzY3JpcHRpb24gaW5mb3JtYXRpb24sIGFyY2hpdmVzLCBldGMuLAorY2FuIGJlIGZvdW5kIG9uIGh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2F4MjUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2F4MjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzI1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXgyNS50eHQKQEAgLTAsMCArMSwxNiBAQAorVG8gdXNlIHRoZSBhbWF0ZXVyIHJhZGlvIHByb3RvY29scyB3aXRoaW4gTGludXggeW91IHdpbGwgbmVlZCB0byBnZXQgYQorc3VpdGFibGUgY29weSBvZiB0aGUgQVguMjUgVXRpbGl0aWVzLiBNb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlCithbmQgYXNzb2NpYXRlZCBwcm9ncmFtcyBjYW4gYmUgZm91bmQgb24gaHR0cDovL3pvbmUucHNwdC5maS9+anNuLy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFYLjI1LCBORVQvUk9NIGFuZCBST1NFIHByb3RvY29sIHN0YWNrcywgc2VlCit0aGUgQVgyNS1IT1dUTyB3cml0dGVuIGJ5IFRlcnJ5IERhd3NvbiA8dGVycnlAcGVyZi5uby5pdGcudGVsc3RyYS5jb20uYXU+Cit3aG8gaXMgYWxzbyB0aGUgQVguMjUgVXRpbGl0aWVzIG1haW50YWluZXIuCisKK1RoZXJlIGlzIGFuIGFjdGl2ZSBtYWlsaW5nIGxpc3QgZm9yIGRpc2N1c3NpbmcgTGludXggYW1hdGV1ciByYWRpbyBtYXR0ZXJzCitjYWxsZWQgbGludXgtaGFtcy4gVG8gc3Vic2NyaWJlIHRvIGl0LCBzZW5kIGEgbWVzc2FnZSB0bworbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZyB3aXRoIHRoZSB3b3JkcyAic3Vic2NyaWJlIGxpbnV4LWhhbXMiIGluIHRoZSBib2R5CitvZiB0aGUgbWVzc2FnZSwgdGhlIHN1YmplY3QgZmllbGQgaXMgaWdub3JlZC4KKworSm9uYXRoYW4gRzRLTFgKKworZzRrbHhAZzRrbHguZGVtb24uY28udWsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iYXljb20udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JheWNvbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2ODg0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iYXljb20udHh0CkBAIC0wLDAgKzEsMTU4IEBACisJCSAgICBMSU5VWCBEUklWRVJTIEZPUiBCQVlDT00gTU9ERU1TCisKKyAgICAgICBUaG9tYXMgTS4gU2FpbGVyLCBIQjlKTlgvQUU0V0EsIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CisKKyEhTkVXISEgKDA0Lzk4KSBUaGUgZHJpdmVycyBmb3IgdGhlIGJheWNvbSBtb2RlbXMgaGF2ZSBiZWVuIHNwbGl0IGludG8KK3NlcGFyYXRlIGRyaXZlcnMgYXMgdGhleSBkaWQgbm90IHNoYXJlIGFueSBjb2RlLCBhbmQgdGhlIGRyaXZlcgorYW5kIGRldmljZSBuYW1lcyBoYXZlIGNoYW5nZWQuCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBMaW51eCBLZXJuZWwgRHJpdmVycyBmb3Igc2ltcGxlIEJheWNvbSBzdHlsZQorYW1hdGV1ciByYWRpbyBtb2RlbXMuIAorCitUaGUgZm9sbG93aW5nIGRyaXZlcnMgYXJlIGF2YWlsYWJsZToKKworYmF5Y29tX3Nlcl9mZHg6CisgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBTRVIxMiBtb2RlbXMgZWl0aGVyIGZ1bGwgb3IgaGFsZiBkdXBsZXguCisgIEl0cyBiYXVkIHJhdGUgbWF5IGJlIGNoYW5nZWQgdmlhIHRoZSBgYmF1ZCcgbW9kdWxlIHBhcmFtZXRlciwKKyAgdGhlcmVmb3JlIGl0IHN1cHBvcnRzIGp1c3QgYWJvdXQgZXZlcnkgYml0IGJhbmcgbW9kZW0gb24gYQorICBzZXJpYWwgcG9ydC4gSXRzIGRldmljZXMgYXJlIGNhbGxlZCBiY3NmMCB0aHJvdWdoIGJjc2YzLgorICBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBkcml2ZXIgZm9yIFNFUjEyIHR5cGUgbW9kZW1zLAorICBob3dldmVyIGlmIHlvdSBoYXZlIGEgYnJva2VuIFVBUlQgY2xvbmUgdGhhdCBkb2VzIG5vdCBoYXZlIHdvcmtpbmcKKyAgZGVsdGEgc3RhdHVzIGJpdHMsIHlvdSBtYXkgdHJ5IGJheWNvbV9zZXJfaGR4LiAKKworYmF5Y29tX3Nlcl9oZHg6IAorICBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIGRyaXZlciBmb3IgU0VSMTIgdHlwZSBtb2RlbXMuCisgIEl0IG9ubHkgc3VwcG9ydHMgaGFsZiBkdXBsZXgsIGFuZCBvbmx5IDEyMDAgYmF1ZC4gSXRzIGRldmljZXMKKyAgYXJlIGNhbGxlZCBiY3NoMCB0aHJvdWdoIGJjc2gzLiBVc2UgdGhpcyBkcml2ZXIgb25seSBpZiBiYXljb21fc2VyX2ZkeAorICBkb2VzIG5vdCB3b3JrIHdpdGggeW91ciBVQVJULgorCitiYXljb21fcGFyOgorICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgcGFyOTYgYW5kIHBpY3BhciBtb2RlbXMuCisgIEl0cyBkZXZpY2VzIGFyZSBjYWxsZWQgYmNwMCB0aHJvdWdoIGJjcDMuCisKK2JheWNvbV9lcHA6CisgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBFUFAgbW9kZW0uCisgIEl0cyBkZXZpY2VzIGFyZSBjYWxsZWQgYmNlMCB0aHJvdWdoIGJjZTMuCisgIFRoaXMgZHJpdmVyIGlzIHdvcmstaW4tcHJvZ3Jlc3MuCisKK1RoZSBmb2xsb3dpbmcgbW9kZW1zIGFyZSBzdXBwb3J0ZWQ6CisKK3NlcjEyOiAgVGhpcyBpcyBhIHZlcnkgc2ltcGxlIDEyMDAgYmF1ZCBBRlNLIG1vZGVtLiBUaGUgbW9kZW0gY29uc2lzdHMgb25seQorICAgICAgICBvZiBhIG1vZHVsYXRvci9kZW1vZHVsYXRvciBjaGlwLCB1c3VhbGx5IGEgVEkgVENNMzEwNS4gVGhlIGNvbXB1dGVyCisgICAgICAgIGlzIHJlc3BvbnNpYmxlIGZvciByZWdlbmVyYXRpbmcgdGhlIHJlY2VpdmVyIGJpdCBjbG9jaywgYXMgd2VsbCBhcworICAgICAgICBmb3IgaGFuZGxpbmcgdGhlIEhETEMgcHJvdG9jb2wuIFRoZSBtb2RlbSBjb25uZWN0cyB0byBhIHNlcmlhbCBwb3J0LAorICAgICAgICBoZW5jZSB0aGUgbmFtZS4gU2luY2UgdGhlIHNlcmlhbCBwb3J0IGlzIG5vdCB1c2VkIGFzIGFuIGFzeW5jIHNlcmlhbAorICAgICAgICBwb3J0LCB0aGUga2VybmVsIGRyaXZlciBmb3Igc2VyaWFsIHBvcnRzIGNhbm5vdCBiZSB1c2VkLCBhbmQgdGhpcworICAgICAgICBkcml2ZXIgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBzZXJpYWwgaGFyZHdhcmUgKDgyNTAsIDE2NDUwLCAxNjU1MCkKKworcGFyOTY6ICBUaGlzIGlzIGEgbW9kZW0gZm9yIDk2MDAgYmF1ZCBGU0sgY29tcGF0aWJsZSB0byB0aGUgRzNSVUggc3RhbmRhcmQuCisgICAgICAgIFRoZSBtb2RlbSBkb2VzIGFsbCB0aGUgZmlsdGVyaW5nIGFuZCByZWdlbmVyYXRlcyB0aGUgcmVjZWl2ZXIgY2xvY2suCisgICAgICAgIERhdGEgaXMgdHJhbnNmZXJyZWQgZnJvbSBhbmQgdG8gdGhlIFBDIHZpYSBhIHNoaWZ0IHJlZ2lzdGVyLgorICAgICAgICBUaGUgc2hpZnQgcmVnaXN0ZXIgaXMgZmlsbGVkIHdpdGggMTYgYml0cyBhbmQgYW4gaW50ZXJydXB0IGlzIHNpZ25hbGxlZC4KKyAgICAgICAgVGhlIFBDIHRoZW4gZW1wdGllcyB0aGUgc2hpZnQgcmVnaXN0ZXIgaW4gYSBidXJzdC4gVGhpcyBtb2RlbSBjb25uZWN0cworICAgICAgICB0byB0aGUgcGFyYWxsZWwgcG9ydCwgaGVuY2UgdGhlIG5hbWUuIFRoZSBtb2RlbSBsZWF2ZXMgdGhlIAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSERMQyBwcm90b2NvbCBhbmQgdGhlIHNjcmFtYmxlciBwb2x5bm9taWFsIHRvCisgICAgICAgIHRoZSBQQy4KKworcGljcGFyOiBUaGlzIGlzIGEgcmVkZXNpZ24gb2YgdGhlIHBhcjk2IG1vZGVtIGJ5IEhlbm5pbmcgUmVjaCwgREY5SUMuIFRoZSBtb2RlbQorICAgICAgICBpcyBwcm90b2NvbCBjb21wYXRpYmxlIHRvIHBhcjk2LCBidXQgdXNlcyBvbmx5IHRocmVlIGxvdyBwb3dlciBJQ3MKKyAgICAgICAgYW5kIGNhbiB0aGVyZWZvcmUgYmUgZmVkIGZyb20gdGhlIHBhcmFsbGVsIHBvcnQgYW5kIGRvZXMgbm90IHJlcXVpcmUKKyAgICAgICAgYW4gYWRkaXRpb25hbCBwb3dlciBzdXBwbHkuIEZ1cnRoZXJtb3JlLCBpdCBpbmNvcnBvcmF0ZXMgYSBjYXJyaWVyCisgICAgICAgIGRldGVjdCBjaXJjdWl0cnkuCisKK0VQUDogICAgVGhpcyBpcyBhIGhpZ2gtc3BlZWQgbW9kZW0gYWRhcHRvciB0aGF0IGNvbm5lY3RzIHRvIGFuIGVuaGFuY2VkIHBhcmFsbGVsIHBvcnQuCisgICAgICAgIEl0cyB0YXJnZXQgYXVkaWVuY2UgaXMgdXNlcnMgd29ya2luZyBvdmVyIGEgaGlnaCBzcGVlZCBodWIgKDc2LjhrYml0L3MpLgorCitlcHBmcGdhOiBUaGlzIGlzIGEgcmVkZXNpZ24gb2YgdGhlIEVQUCBhZGFwdG9yLgorCisKKworQWxsIG9mIHRoZSBhYm92ZSBtb2RlbXMgb25seSBzdXBwb3J0IGhhbGYgZHVwbGV4IGNvbW11bmljYXRpb25zLiBIb3dldmVyLAordGhlIGRyaXZlciBzdXBwb3J0cyB0aGUgS0lTUyAoc2VlIGJlbG93KSBmdWxsZHVwbGV4IGNvbW1hbmQuIEl0IHRoZW4gc2ltcGx5CitzdGFydHMgdG8gc2VuZCBhcyBzb29uIGFzIHRoZXJlJ3MgYSBwYWNrZXQgdG8gdHJhbnNtaXQgYW5kIGRvZXMgbm90IGNhcmUKK2Fib3V0IERDRCwgaS5lLiBpdCBzdGFydHMgdG8gc2VuZCBldmVuIGlmIHRoZXJlJ3Mgc29tZW9uZSBlbHNlIG9uIHRoZSBjaGFubmVsLgorVGhpcyBjb21tYW5kIGlzIHJlcXVpcmVkIGJ5IHNvbWUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBEQU1BIGNoYW5uZWwgCithY2Nlc3MgcHJvdG9jb2wuCisKKworVGhlIEludGVyZmFjZSBvZiB0aGUgZHJpdmVycworCitVbmxpa2UgcHJldmlvdXMgZHJpdmVycywgdGhlc2UgZHJpdmVycyBhcmUgbm8gbG9uZ2VyIGNoYXJhY3RlciBkZXZpY2VzLAorYnV0IHRoZXkgYXJlIG5vdyB0cnVlIGtlcm5lbCBuZXR3b3JrIGludGVyZmFjZXMuIEluc3RhbGxhdGlvbiBpcyB0aGVyZWZvcmUKK3NpbXBsZS4gT25jZSBpbnN0YWxsZWQsIGZvdXIgaW50ZXJmYWNlcyBuYW1lZCBiY3tzZixzaCxwLGV9WzAtM10gYXJlIGF2YWlsYWJsZS4KK3NldGhkbGMgZnJvbSB0aGUgYXgyNSB1dGlsaXRpZXMgbWF5IGJlIHVzZWQgdG8gc2V0IGRyaXZlciBzdGF0ZXMgZXRjLgorVXNlcnMgb2YgdXNlcmxhbmQgQVguMjUgc3RhY2tzIG1heSB1c2UgdGhlIG5ldDJraXNzIHV0aWxpdHkgKGFsc28gYXZhaWxhYmxlCitpbiB0aGUgYXgyNSB1dGlsaXRpZXMgcGFja2FnZSkgdG8gY29udmVydCBwYWNrZXRzIG9mIGEgbmV0d29yayBpbnRlcmZhY2UKK3RvIGEgS0lTUyBzdHJlYW0gb24gYSBwc2V1ZG8gdHR5LiBUaGVyZSdzIGFsc28gYSBwYXRjaCBhdmFpbGFibGUgZnJvbQorbWUgZm9yIFdBTVBFUyB3aGljaCBhbGxvd3MgYXR0YWNoaW5nIGEga2VybmVsIG5ldHdvcmsgaW50ZXJmYWNlIGRpcmVjdGx5LgorCisKK0NvbmZpZ3VyaW5nIHRoZSBkcml2ZXIKKworRXZlcnkgdGltZSBhIGRyaXZlciBpcyBpbnNlcnRlZCBpbnRvIHRoZSBrZXJuZWwsIGl0IGhhcyB0byBrbm93IHdoaWNoCittb2RlbXMgaXQgc2hvdWxkIGFjY2VzcyBhdCB3aGljaCBwb3J0cy4gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIHRoZSBzZXRiYXljb20KK3V0aWxpdHkuIElmIHlvdSBhcmUgb25seSB1c2luZyBvbmUgbW9kZW0sIHlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlCitkcml2ZXIgZnJvbSB0aGUgaW5zbW9kIGNvbW1hbmQgbGluZSAob3IgYnkgbWVhbnMgb2YgYW4gb3B0aW9uIGxpbmUgaW4KKy9ldGMvbW9kcHJvYmUuY29uZikuCisKK0V4YW1wbGVzOgorICBtb2Rwcm9iZSBiYXljb21fc2VyX2ZkeCBtb2RlPSJzZXIxMioiIGlvYmFzZT0weDNmOCBpcnE9NAorICBzZXRoZGxjIC1pIGJjc2YwIC1wIG1vZGUgInNlcjEyKiIgaW8gMHgzZjggaXJxIDQKKworQm90aCBsaW5lcyBjb25maWd1cmUgdGhlIGZpcnN0IHBvcnQgdG8gZHJpdmUgYSBzZXIxMiBtb2RlbSBhdCB0aGUgZmlyc3QKK3NlcmlhbCBwb3J0IChDT00xIHVuZGVyIERPUykuIFRoZSAqIGluIHRoZSBtb2RlIHBhcmFtZXRlciBpbnN0cnVjdHMgdGhlIGRyaXZlciB0byB1c2UKK3RoZSBzb2Z0d2FyZSBEQ0QgYWxnb3JpdGhtIChzZWUgYmVsb3cpLgorCisgIGluc21vZCBiYXljb21fcGFyIG1vZGU9InBpY3BhciIgaW9iYXNlPTB4Mzc4CisgIHNldGhkbGMgLWkgYmNwMCAtcCBtb2RlICJwaWNwYXIiIGlvIDB4Mzc4CisKK0JvdGggbGluZXMgY29uZmlndXJlIHRoZSBmaXJzdCBwb3J0IHRvIGRyaXZlIGEgcGljcGFyIG1vZGVtIGF0IHRoZQorZmlyc3QgcGFyYWxsZWwgcG9ydCAoTFBUMSB1bmRlciBET1MpLiAoTm90ZTogcGljcGFyIGltcGxpZXMKK2hhcmR3YXJlIERDRCwgcGFyOTYgaW1wbGllcyBzb2Z0d2FyZSBEQ0QpLgorCitUaGUgY2hhbm5lbCBhY2Nlc3MgcGFyYW1ldGVycyBjYW4gYmUgc2V0IHdpdGggc2V0aGRsYyAtYSBvciBraXNzcGFybXMuCitOb3RlIHRoYXQgYm90aCB1dGlsaXRpZXMgaW50ZXJwcmV0IHRoZSB2YWx1ZXMgc2xpZ2h0bHkgZGlmZmVyZW50bHkuCisKKworSGFyZHdhcmUgRENEIHZlcnN1cyBTb2Z0d2FyZSBEQ0QKKworVG8gYXZvaWQgY29sbGlzaW9ucyBvbiB0aGUgYWlyLCB0aGUgZHJpdmVyIG11c3Qga25vdyB3aGVuIHRoZSBjaGFubmVsIGlzCitidXN5LiBUaGlzIGlzIHRoZSB0YXNrIG9mIHRoZSBEQ0QgY2lyY3VpdHJ5L3NvZnR3YXJlLiBUaGUgZHJpdmVyIG1heSBlaXRoZXIKK3V0aWxpc2UgYSBzb2Z0d2FyZSBEQ0QgYWxnb3JpdGhtIChvcHRpb25zPTEpIG9yIHVzZSBhIERDRCBzaWduYWwgZnJvbQordGhlIGhhcmR3YXJlIChvcHRpb25zPTApLgorCitzZXIxMjogIGlmIHNvZnR3YXJlIERDRCBpcyB1dGlsaXNlZCwgdGhlIHJhZGlvJ3Mgc3F1ZWxjaCBzaG91bGQgYWx3YXlzIGJlCisgICAgICAgIG9wZW4uIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHNvZnR3YXJlIERDRCBhbGdvcml0aG0sCisgICAgICAgIGFzIGl0IGlzIG11Y2ggZmFzdGVyIHRoYW4gbW9zdCBoYXJkd2FyZSBzcXVlbGNoIGNpcmN1aXRyeS4gVGhlCisgICAgICAgIGRpc2FkdmFudGFnZSBpcyBhIHNsaWdodGx5IGhpZ2hlciBsb2FkIG9uIHRoZSBzeXN0ZW0uCisKK3Bhcjk2OiAgdGhlIHNvZnR3YXJlIERDRCBhbGdvcml0aG0gZm9yIHRoaXMgdHlwZSBvZiBtb2RlbSBpcyByYXRoZXIgcG9vci4KKyAgICAgICAgVGhlIG1vZGVtIHNpbXBseSBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBpbXBsZW1lbnQKKyAgICAgICAgYSByZWFzb25hYmxlIERDRCBhbGdvcml0aG0gaW4gc29mdHdhcmUuIFRoZXJlZm9yZSwgaWYgeW91ciByYWRpbworICAgICAgICBmZWVkcyB0aGUgRENEIGlucHV0IG9mIHRoZSBQQVI5NiBtb2RlbSwgdGhlIHVzZSBvZiB0aGUgaGFyZHdhcmUKKyAgICAgICAgRENEIGNpcmN1aXRyeSBpcyByZWNvbW1lbmRlZC4KKworcGljcGFyOiB0aGUgcGljcGFyIG1vZGVtIGZlYXR1cmVzIGEgYnVpbHRpbiBEQ0QgaGFyZHdhcmUsIHdoaWNoIGlzIGhpZ2hseQorICAgICAgICByZWNvbW1lbmRlZC4KKworCisKK0NvbXBhdGliaWxpdHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTGludXgga2VybmVsCisKK1RoZSBzZXJpYWwgZHJpdmVyIGFuZCB0aGUgYmF5Y29tIHNlcmlhbCBkcml2ZXJzIGNvbXBldGUKK2ZvciB0aGUgc2FtZSBoYXJkd2FyZSByZXNvdXJjZXMuIE9mIGNvdXJzZSBvbmx5IG9uZSBkcml2ZXIgY2FuIGFjY2VzcyBhIGdpdmVuCitpbnRlcmZhY2UgYXQgYSB0aW1lLiBUaGUgc2VyaWFsIGRyaXZlciBncmFicyBhbGwgaW50ZXJmYWNlcyBpdCBjYW4gZmluZCBhdAorc3RhcnR1cCB0aW1lLiBUaGVyZWZvcmUgdGhlIGJheWNvbSBkcml2ZXJzIHN1YnNlcXVlbnRseSB3b24ndCBiZSBhYmxlIHRvCithY2Nlc3MgYSBzZXJpYWwgcG9ydC4gWW91IG1pZ2h0IHRoZXJlZm9yZSBmaW5kIGl0IG5lY2Vzc2FyeSB0byByZWxlYXNlCithIHBvcnQgb3duZWQgYnkgdGhlIHNlcmlhbCBkcml2ZXIgd2l0aCAnc2V0c2VyaWFsIC9kZXYvdHR5UyMgdWFydCBub25lJywgd2hlcmUKKyMgaXMgdGhlIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBUaGUgYmF5Y29tIGRyaXZlcnMgZG8gbm90IHJlc2VydmUgYW55Citwb3J0cyBhdCBzdGFydHVwLCB1bmxlc3Mgb25lIGlzIHNwZWNpZmllZCBvbiB0aGUgJ2luc21vZCcgY29tbWFuZCBsaW5lLiBBbm90aGVyCittZXRob2QgdG8gc29sdmUgdGhlIHByb2JsZW0gaXMgdG8gY29tcGlsZSBhbGwgZHJpdmVycyBhcyBtb2R1bGVzIGFuZAorbGVhdmUgaXQgdG8ga21vZCB0byBsb2FkIHRoZSBjb3JyZWN0IGRyaXZlciBkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uLgorCitUaGUgcGFyYWxsZWwgcG9ydCBkcml2ZXJzIChiYXljb21fcGFyLCBiYXljb21fZXBwKSBub3cgdXNlIHRoZSBwYXJwb3J0IHN1YnN5c3RlbQordG8gYXJiaXRyYXRlIHRoZSBwb3J0cyBiZXR3ZWVuIGRpZmZlcmVudCBjbGllbnQgZHJpdmVycy4KKwordnkgNzNzIGRlCitUb20gU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gKK2hiOWpueCBAIGhiOXcuYW1wci5vcmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmMyZWQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CkBAIC0wLDAgKzEsMTYxOCBAQAorCisgICAgICAgICAgICAgICAgICAgTGludXggRXRoZXJuZXQgQm9uZGluZyBEcml2ZXIgSE9XVE8KKworSW5pdGlhbCByZWxlYXNlIDogVGhvbWFzIERhdmlzIDx0YWRhdmlzIGF0IGxibC5nb3Y+CitDb3JyZWN0aW9ucywgSEEgZXh0ZW5zaW9ucyA6IDIwMDAvMTAvMDMtMTUgOgorICAtIFdpbGx5IFRhcnJlYXUgPHdpbGx5IGF0IG1ldGEteC5vcmc+CisgIC0gQ29uc3RhbnRpbmUgR2F2cmlsb3YgPGNvbnN0LWcgYXQgeHBlcnQuY29tPgorICAtIENoYWQgTi4gVGluZGVsIDxjdGluZGVsIGF0IGllZWUgZG90IG9yZz4KKyAgLSBKYW5pY2UgR2lyb3VhcmQgPGdpcm91YXJkIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KKyAgLSBKYXkgVm9zYnVyZ2ggPGZ1YmFyIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KKworUmVvcmdhbml6ZWQgYW5kIHVwZGF0ZWQgRmViIDIwMDUgYnkgSmF5IFZvc2J1cmdoCisKK05vdGUgOgorLS0tLS0tCisJCitUaGUgYm9uZGluZyBkcml2ZXIgb3JpZ2luYWxseSBjYW1lIGZyb20gRG9uYWxkIEJlY2tlcidzIGJlb3d1bGYgcGF0Y2hlcyBmb3IKK2tlcm5lbCAyLjAuIEl0IGhhcyBjaGFuZ2VkIHF1aXRlIGEgYml0IHNpbmNlLCBhbmQgdGhlIG9yaWdpbmFsIHRvb2xzIGZyb20KK2V4dHJlbWUtbGludXggYW5kIGJlb3d1bGYgc2l0ZXMgd2lsbCBub3Qgd29yayB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLgorCitGb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBkcml2ZXIsIHBhdGNoZXMgZm9yIG9sZGVyIGtlcm5lbHMgYW5kIHRoZSB1cGRhdGVkCit1c2Vyc3BhY2UgdG9vbHMsIHBsZWFzZSBmb2xsb3cgdGhlIGxpbmtzIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorCitUYWJsZSBvZiBDb250ZW50cworPT09PT09PT09PT09PT09PT0KKworMS4gQm9uZGluZyBEcml2ZXIgSW5zdGFsbGF0aW9uCisKKzIuIEJvbmRpbmcgRHJpdmVyIE9wdGlvbnMKKworMy4gQ29uZmlndXJpbmcgQm9uZGluZyBEZXZpY2VzCiszLjEJQ29uZmlndXJhdGlvbiB3aXRoIHN5c2NvbmZpZyBzdXBwb3J0CiszLjIJQ29uZmlndXJhdGlvbiB3aXRoIGluaXRzY3JpcHRzIHN1cHBvcnQKKzMuMwlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5CiszLjQJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMKKworNS4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uCis1LjEJQm9uZGluZyBDb25maWd1cmF0aW9uCis1LjIJTmV0d29yayBDb25maWd1cmF0aW9uCisKKzYuIFN3aXRjaCBDb25maWd1cmF0aW9uCisKKzcuIDgwMi4xcSBWTEFOIFN1cHBvcnQKKworOC4gTGluayBNb25pdG9yaW5nCis4LjEJQVJQIE1vbml0b3IgT3BlcmF0aW9uCis4LjIJQ29uZmlndXJpbmcgTXVsdGlwbGUgQVJQIFRhcmdldHMKKzguMwlNSUkgTW9uaXRvciBPcGVyYXRpb24KKworOS4gUG90ZW50aWFsIFRyb3VibGUgU291cmNlcworOS4xCUFkdmVudHVyZXMgaW4gUm91dGluZworOS4yCUV0aGVybmV0IERldmljZSBSZW5hbWluZworOS4zCVBhaW5mdWxseSBTbG93IE9yIE5vIEZhaWxlZCBMaW5rIERldGVjdGlvbiBCeSBNaWltb24KKworMTAuIFNOTVAgYWdlbnRzCisKKzExLiBQcm9taXNjdW91cyBtb2RlCisKKzEyLiBIaWdoIEF2YWlsYWJpbGl0eSBJbmZvcm1hdGlvbgorMTIuMQlIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjEuMQkJQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMS4yCQlMaW5rIE1vbml0b3JpbmcgZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIJSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIuMQkJQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4yLjIJCUxpbmsgTW9uaXRvcmluZyBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4zCVN3aXRjaCBCZWhhdmlvciBJc3N1ZXMgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5CisKKzEzLiBIYXJkd2FyZSBTcGVjaWZpYyBDb25zaWRlcmF0aW9ucworMTMuMQlJQk0gQmxhZGVDZW50ZXIKKworMTQuIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCisKKzE1LiBSZXNvdXJjZXMgYW5kIExpbmtzCisKKworMS4gQm9uZGluZyBEcml2ZXIgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCU1vc3QgcG9wdWxhciBkaXN0cm8ga2VybmVscyBzaGlwIHdpdGggdGhlIGJvbmRpbmcgZHJpdmVyCithbHJlYWR5IGF2YWlsYWJsZSBhcyBhIG1vZHVsZSBhbmQgdGhlIGlmZW5zbGF2ZSB1c2VyIGxldmVsIGNvbnRyb2wKK3Byb2dyYW0gaW5zdGFsbGVkIGFuZCByZWFkeSBmb3IgdXNlLiBJZiB5b3VyIGRpc3RybyBkb2VzIG5vdCwgb3IgeW91CitoYXZlIG5lZWQgdG8gY29tcGlsZSBib25kaW5nIGZyb20gc291cmNlIChlLmcuLCBjb25maWd1cmluZyBhbmQKK2luc3RhbGxpbmcgYSBtYWlubGluZSBrZXJuZWwgZnJvbSBrZXJuZWwub3JnKSwgeW91J2xsIG5lZWQgdG8gcGVyZm9ybQordGhlIGZvbGxvd2luZyBzdGVwczoKKworMS4xIENvbmZpZ3VyZSBhbmQgYnVpbGQgdGhlIGtlcm5lbCB3aXRoIGJvbmRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIGF2YWlsYWJsZSBpbiB0aGUKK2RyaXZlcnMvbmV0L2JvbmRpbmcgc3ViZGlyZWN0b3J5IG9mIHRoZSBtb3N0IHJlY2VudCBrZXJuZWwgc291cmNlCisod2hpY2ggaXMgYXZhaWxhYmxlIG9uIGh0dHA6Ly9rZXJuZWwub3JnKS4KKworCVByaW9yIHRvIHRoZSAyLjQuMTEga2VybmVsLCB0aGUgYm9uZGluZyBkcml2ZXIgd2FzIG1haW50YWluZWQKK2xhcmdlbHkgb3V0c2lkZSB0aGUga2VybmVsIHRyZWU7IHBhdGNoZXMgZm9yIHNvbWUgZWFybGllciBrZXJuZWxzIGFyZQorYXZhaWxhYmxlIG9uIHRoZSBib25kaW5nIHNvdXJjZWZvcmdlIHNpdGUsIGFsdGhvdWdoIHRob3NlIHBhdGNoZXMgYXJlCitzdGlsbCBzZXZlcmFsIHllYXJzIG91dCBvZiBkYXRlLiAgTW9zdCB1c2VycyB3aWxsIHdhbnQgdG8gdXNlIGVpdGhlcgordGhlIG1vc3QgcmVjZW50IGtlcm5lbCBmcm9tIGtlcm5lbC5vcmcgb3Igd2hhdGV2ZXIga2VybmVsIGNhbWUgd2l0aAordGhlaXIgZGlzdHJvLgorCisJQ29uZmlndXJlIGtlcm5lbCB3aXRoICJtYWtlIG1lbnVjb25maWciIChvciAibWFrZSB4Y29uZmlnIiBvcgorIm1ha2UgY29uZmlnIiksIHRoZW4gc2VsZWN0ICJCb25kaW5nIGRyaXZlciBzdXBwb3J0IiBpbiB0aGUgIk5ldHdvcmsKK2RldmljZSBzdXBwb3J0IiBzZWN0aW9uLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29uZmlndXJlIHRoZQorZHJpdmVyIGFzIG1vZHVsZSBzaW5jZSBpdCBpcyBjdXJyZW50bHkgdGhlIG9ubHkgd2F5IHRvIHBhc3MgcGFyYW1ldGVycwordG8gdGhlIGRyaXZlciBvciBjb25maWd1cmUgbW9yZSB0aGFuIG9uZSBib25kaW5nIGRldmljZS4KKworCUJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBuZXcga2VybmVsIGFuZCBtb2R1bGVzLCB0aGVuIHByb2NlZWQgdG8KK3N0ZXAgMi4KKworMS4yIEluc3RhbGwgaWZlbnNsYXZlIENvbnRyb2wgVXRpbGl0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIGlmZW5zbGF2ZSB1c2VyIGxldmVsIGNvbnRyb2wgcHJvZ3JhbSBpcyBpbmNsdWRlZCBpbiB0aGUKK2tlcm5lbCBzb3VyY2UgdHJlZSwgaW4gdGhlIGZpbGUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lmZW5zbGF2ZS5jLgorSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUgaWZlbnNsYXZlIHRoYXQKK2NvcnJlc3BvbmRzIHRvIHRoZSBrZXJuZWwgdGhhdCB5b3UgYXJlIHVzaW5nIChlaXRoZXIgZnJvbSB0aGUgc2FtZQorc291cmNlIHRyZWUgb3Igc3VwcGxpZWQgd2l0aCB0aGUgZGlzdHJvKSwgaG93ZXZlciwgaWZlbnNsYXZlCitleGVjdXRhYmxlcyBmcm9tIG9sZGVyIGtlcm5lbHMgc2hvdWxkIGZ1bmN0aW9uIChidXQgZmVhdHVyZXMgbmV3ZXIKK3RoYW4gdGhlIGlmZW5zbGF2ZSByZWxlYXNlIGFyZSBub3Qgc3VwcG9ydGVkKS4gIFJ1bm5pbmcgYW4gaWZlbnNsYXZlCit0aGF0IGlzIG5ld2VyIHRoYW4gdGhlIGtlcm5lbCBpcyBub3Qgc3VwcG9ydGVkLCBhbmQgbWF5IG9yIG1heSBub3QKK3dvcmsuCisKKwlUbyBpbnN0YWxsIGlmZW5zbGF2ZSwgZG8gdGhlIGZvbGxvd2luZzoKKworIyBnY2MgLVdhbGwgLU8gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIGlmZW5zbGF2ZS5jIC1vIGlmZW5zbGF2ZQorIyBjcCBpZmVuc2xhdmUgL3NiaW4vaWZlbnNsYXZlCisKKwlJZiB5b3VyIGtlcm5lbCBzb3VyY2UgaXMgbm90IGluICIvdXNyL3NyYy9saW51eCwiIHRoZW4gcmVwbGFjZQorIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUiIGluIHRoZSBhYm92ZSB3aXRoIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGtlcm5lbAorc291cmNlIGluY2x1ZGUgZGlyZWN0b3J5LgorCisJWW91IG1heSB3aXNoIHRvIGJhY2sgdXAgYW55IGV4aXN0aW5nIC9zYmluL2lmZW5zbGF2ZSwgb3IsIGZvcgordGVzdGluZyBvciBpbmZvcm1hbCB1c2UsIHRhZyB0aGUgaWZlbnNsYXZlIHRvIHRoZSBrZXJuZWwgdmVyc2lvbgorKGUuZy4sIG5hbWUgdGhlIGlmZW5zbGF2ZSBleGVjdXRhYmxlIC9zYmluL2lmZW5zbGF2ZS0yLjYuMTApLgorCitJTVBPUlRBTlQgTk9URToKKworCUlmIHlvdSBvbWl0IHRoZSAiLUkiIG9yIHNwZWNpZnkgYW4gaW5jb3JyZWN0IGRpcmVjdG9yeSwgeW91CittYXkgZW5kIHVwIHdpdGggYW4gaWZlbnNsYXZlIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGtlcm5lbAoreW91J3JlIHRyeWluZyB0byBidWlsZCBpdCBmb3IuICBTb21lIGRpc3Ryb3MgKGUuZy4sIFJlZCBIYXQgZnJvbSA3LjEKK29ud2FyZHMpIGRvIG5vdCBoYXZlIC91c3IvaW5jbHVkZS9saW51eCBzeW1ib2xpY2FsbHkgbGlua2VkIHRvIHRoZQorZGVmYXVsdCBrZXJuZWwgc291cmNlIGluY2x1ZGUgZGlyZWN0b3J5LgorCisKKzIuIEJvbmRpbmcgRHJpdmVyIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworCU9wdGlvbnMgZm9yIHRoZSBib25kaW5nIGRyaXZlciBhcmUgc3VwcGxpZWQgYXMgcGFyYW1ldGVycyB0bwordGhlIGJvbmRpbmcgbW9kdWxlIGF0IGxvYWQgdGltZS4gIFRoZXkgbWF5IGJlIGdpdmVuIGFzIGNvbW1hbmQgbGluZQorYXJndW1lbnRzIHRvIHRoZSBpbnNtb2Qgb3IgbW9kcHJvYmUgY29tbWFuZCwgYnV0IGFyZSB1c3VhbGx5IHNwZWNpZmllZAoraW4gZWl0aGVyIHRoZSAvZXRjL21vZHByb2JlLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLCBvciBpbiBhCitkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzb21lIG9mIHdoaWNoIGFyZSBkZXRhaWxlZCBpbiB0aGUKK25leHQgc2VjdGlvbikuCisKKwlUaGUgYXZhaWxhYmxlIGJvbmRpbmcgZHJpdmVyIHBhcmFtZXRlcnMgYXJlIGxpc3RlZCBiZWxvdy4gSWYgYQorcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4gIFdoZW4gaW5pdGlhbGx5Citjb25maWd1cmluZyBhIGJvbmQsIGl0IGlzIHJlY29tbWVuZGVkICJ0YWlsIC1mIC92YXIvbG9nL21lc3NhZ2VzIiBiZQorcnVuIGluIGEgc2VwYXJhdGUgd2luZG93IHRvIHdhdGNoIGZvciBib25kaW5nIGRyaXZlciBlcnJvciBtZXNzYWdlcy4KKworCUl0IGlzIGNyaXRpY2FsIHRoYXQgZWl0aGVyIHRoZSBtaWltb24gb3IgYXJwX2ludGVydmFsIGFuZAorYXJwX2lwX3RhcmdldCBwYXJhbWV0ZXJzIGJlIHNwZWNpZmllZCwgb3RoZXJ3aXNlIHNlcmlvdXMgbmV0d29yaworZGVncmFkYXRpb24gd2lsbCBvY2N1ciBkdXJpbmcgbGluayBmYWlsdXJlcy4gIFZlcnkgZmV3IGRldmljZXMgZG8gbm90CitzdXBwb3J0IGF0IGxlYXN0IG1paW1vbiwgc28gdGhlcmUgaXMgcmVhbGx5IG5vIHJlYXNvbiBub3QgdG8gdXNlIGl0LgorCisJT3B0aW9ucyB3aXRoIHRleHR1YWwgdmFsdWVzIHdpbGwgYWNjZXB0IGVpdGhlciB0aGUgdGV4dCBuYW1lCisJb3IsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhlIG9wdGlvbiB2YWx1ZS4gIEUuZy4sCisJIm1vZGU9ODAyLjNhZCIgYW5kICJtb2RlPTQiIHNldCB0aGUgc2FtZSBtb2RlLgorCisJVGhlIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CisKK2FycF9pbnRlcnZhbAorCisJU3BlY2lmaWVzIHRoZSBBUlAgbW9uaXRvcmluZyBmcmVxdWVuY3kgaW4gbWlsbGktc2Vjb25kcy4gSWYKKwlBUlAgbW9uaXRvcmluZyBpcyB1c2VkIGluIGEgbG9hZC1iYWxhbmNpbmcgbW9kZSAobW9kZSAwIG9yIDIpLAorCXRoZSBzd2l0Y2ggc2hvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gYSBtb2RlIHRoYXQgZXZlbmx5CisJZGlzdHJpYnV0ZXMgcGFja2V0cyBhY3Jvc3MgYWxsIGxpbmtzIC0gc3VjaCBhcyByb3VuZC1yb2Jpbi4gSWYKKwl0aGUgc3dpdGNoIGlzIGNvbmZpZ3VyZWQgdG8gZGlzdHJpYnV0ZSB0aGUgcGFja2V0cyBpbiBhbiBYT1IKKwlmYXNoaW9uLCBhbGwgcmVwbGllcyBmcm9tIHRoZSBBUlAgdGFyZ2V0cyB3aWxsIGJlIHJlY2VpdmVkIG9uCisJdGhlIHNhbWUgbGluayB3aGljaCBjb3VsZCBjYXVzZSB0aGUgb3RoZXIgdGVhbSBtZW1iZXJzIHRvCisJZmFpbC4gQVJQIG1vbml0b3Jpbmcgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKwltaWltb24uIEEgdmFsdWUgb2YgMCBkaXNhYmxlcyBBUlAgbW9uaXRvcmluZy4gVGhlIGRlZmF1bHQKKwl2YWx1ZSBpcyAwLgorCithcnBfaXBfdGFyZ2V0CisKKwlTcGVjaWZpZXMgdGhlIGlwIGFkZHJlc3NlcyB0byB1c2Ugd2hlbiBhcnBfaW50ZXJ2YWwgaXMgPiAwLgorCVRoZXNlIGFyZSB0aGUgdGFyZ2V0cyBvZiB0aGUgQVJQIHJlcXVlc3Qgc2VudCB0byBkZXRlcm1pbmUgdGhlCisJaGVhbHRoIG9mIHRoZSBsaW5rIHRvIHRoZSB0YXJnZXRzLiAgU3BlY2lmeSB0aGVzZSB2YWx1ZXMgaW4KKwlkZGQuZGRkLmRkZC5kZGQgZm9ybWF0LiAgTXVsdGlwbGUgaXAgYWRyZXNzZXMgbXVzdCBiZQorCXNlcGVyYXRlZCBieSBhIGNvbW1hLiAgQXQgbGVhc3Qgb25lIElQIGFkZHJlc3MgbXVzdCBiZSBnaXZlbgorCWZvciBBUlAgbW9uaXRvcmluZyB0byBmdW5jdGlvbi4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXJnZXRzCisJdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGlzIDE2LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgbm8gSVAKKwlhZGRyZXNzZXMuCisKK2Rvd25kZWxheQorCisJU3BlY2lmaWVzIHRoZSB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgYmVmb3JlIGRpc2FibGluZworCWEgc2xhdmUgYWZ0ZXIgYSBsaW5rIGZhaWx1cmUgaGFzIGJlZW4gZGV0ZWN0ZWQuICBUaGlzIG9wdGlvbgorCWlzIG9ubHkgdmFsaWQgZm9yIHRoZSBtaWltb24gbGluayBtb25pdG9yLiAgVGhlIGRvd25kZWxheQorCXZhbHVlIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIHRoZSBtaWltb24gdmFsdWU7IGlmIG5vdCwgaXQKKwl3aWxsIGJlIHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZS4gIFRoZSBkZWZhdWx0CisJdmFsdWUgaXMgMC4KKworbGFjcF9yYXRlCisKKwlPcHRpb24gc3BlY2lmeWluZyB0aGUgcmF0ZSBpbiB3aGljaCB3ZSdsbCBhc2sgb3VyIGxpbmsgcGFydG5lcgorCXRvIHRyYW5zbWl0IExBQ1BEVSBwYWNrZXRzIGluIDgwMi4zYWQgbW9kZS4gIFBvc3NpYmxlIHZhbHVlcworCWFyZToKKworCXNsb3cgb3IgMAorCQlSZXF1ZXN0IHBhcnRuZXIgdG8gdHJhbnNtaXQgTEFDUERVcyBldmVyeSAzMCBzZWNvbmRzIChkZWZhdWx0KQorCisJZmFzdCBvciAxCisJCVJlcXVlc3QgcGFydG5lciB0byB0cmFuc21pdCBMQUNQRFVzIGV2ZXJ5IDEgc2Vjb25kCisKK21heF9ib25kcworCisJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYm9uZGluZyBkZXZpY2VzIHRvIGNyZWF0ZSBmb3IgdGhpcworCWluc3RhbmNlIG9mIHRoZSBib25kaW5nIGRyaXZlci4gIEUuZy4sIGlmIG1heF9ib25kcyBpcyAzLCBhbmQKKwl0aGUgYm9uZGluZyBkcml2ZXIgaXMgbm90IGFscmVhZHkgbG9hZGVkLCB0aGVuIGJvbmQwLCBib25kMQorCWFuZCBib25kMiB3aWxsIGJlIGNyZWF0ZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLgorCittaWltb24KKworCVNwZWNpZmllcyB0aGUgZnJlcXVlbmN5IGluIG1pbGxpLXNlY29uZHMgdGhhdCBNSUkgbGluaworCW1vbml0b3Jpbmcgd2lsbCBvY2N1ci4gIEEgdmFsdWUgb2YgemVybyBkaXNhYmxlcyBNSUkgbGluaworCW1vbml0b3JpbmcuICBBIHZhbHVlIG9mIDEwMCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuICBUaGUKKwl1c2VfY2FycmllciBvcHRpb24sIGJlbG93LCBhZmZlY3RzIGhvdyB0aGUgbGluayBzdGF0ZSBpcworCWRldGVybWluZWQuICBTZWUgdGhlIEhpZ2ggQXZhaWxhYmlsaXR5IHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwKKwlpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuCisKK21vZGUKKworCVNwZWNpZmllcyBvbmUgb2YgdGhlIGJvbmRpbmcgcG9saWNpZXMuIFRoZSBkZWZhdWx0IGlzCisJYmFsYW5jZS1yciAocm91bmQgcm9iaW4pLiAgUG9zc2libGUgdmFsdWVzIGFyZToKKworCWJhbGFuY2UtcnIgb3IgMAorCisJCVJvdW5kLXJvYmluIHBvbGljeTogVHJhbnNtaXQgcGFja2V0cyBpbiBzZXF1ZW50aWFsCisJCW9yZGVyIGZyb20gdGhlIGZpcnN0IGF2YWlsYWJsZSBzbGF2ZSB0aHJvdWdoIHRoZQorCQlsYXN0LiAgVGhpcyBtb2RlIHByb3ZpZGVzIGxvYWQgYmFsYW5jaW5nIGFuZCBmYXVsdAorCQl0b2xlcmFuY2UuCisKKwlhY3RpdmUtYmFja3VwIG9yIDEKKworCQlBY3RpdmUtYmFja3VwIHBvbGljeTogT25seSBvbmUgc2xhdmUgaW4gdGhlIGJvbmQgaXMKKwkJYWN0aXZlLiAgQSBkaWZmZXJlbnQgc2xhdmUgYmVjb21lcyBhY3RpdmUgaWYsIGFuZCBvbmx5CisJCWlmLCB0aGUgYWN0aXZlIHNsYXZlIGZhaWxzLiAgVGhlIGJvbmQncyBNQUMgYWRkcmVzcyBpcworCQlleHRlcm5hbGx5IHZpc2libGUgb24gb25seSBvbmUgcG9ydCAobmV0d29yayBhZGFwdGVyKQorCQl0byBhdm9pZCBjb25mdXNpbmcgdGhlIHN3aXRjaC4gIFRoaXMgbW9kZSBwcm92aWRlcworCQlmYXVsdCB0b2xlcmFuY2UuICBUaGUgcHJpbWFyeSBvcHRpb24gYWZmZWN0cyB0aGUKKwkJYmVoYXZpb3Igb2YgdGhpcyBtb2RlLgorCisJYmFsYW5jZS14b3Igb3IgMgorCisJCVhPUiBwb2xpY3k6IFRyYW5zbWl0IGJhc2VkIG9uIFsoc291cmNlIE1BQyBhZGRyZXNzCisJCVhPUidkIHdpdGggZGVzdGluYXRpb24gTUFDIGFkZHJlc3MpIG1vZHVsbyBzbGF2ZQorCQljb3VudF0uICBUaGlzIHNlbGVjdHMgdGhlIHNhbWUgc2xhdmUgZm9yIGVhY2gKKwkJZGVzdGluYXRpb24gTUFDIGFkZHJlc3MuICBUaGlzIG1vZGUgcHJvdmlkZXMgbG9hZAorCQliYWxhbmNpbmcgYW5kIGZhdWx0IHRvbGVyYW5jZS4KKworCWJyb2FkY2FzdCBvciAzCisKKwkJQnJvYWRjYXN0IHBvbGljeTogdHJhbnNtaXRzIGV2ZXJ5dGhpbmcgb24gYWxsIHNsYXZlCisJCWludGVyZmFjZXMuICBUaGlzIG1vZGUgcHJvdmlkZXMgZmF1bHQgdG9sZXJhbmNlLgorCisJODAyLjNhZCBvciA0CisKKwkJSUVFRSA4MDIuM2FkIER5bmFtaWMgbGluayBhZ2dyZWdhdGlvbi4gIENyZWF0ZXMKKwkJYWdncmVnYXRpb24gZ3JvdXBzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc3BlZWQgYW5kCisJCWR1cGxleCBzZXR0aW5ncy4gIFV0aWxpemVzIGFsbCBzbGF2ZXMgaW4gdGhlIGFjdGl2ZQorCQlhZ2dyZWdhdG9yIGFjY29yZGluZyB0byB0aGUgODAyLjNhZCBzcGVjaWZpY2F0aW9uLgorCisJCVByZS1yZXF1aXNpdGVzOgorCisJCTEuIEV0aHRvb2wgc3VwcG9ydCBpbiB0aGUgYmFzZSBkcml2ZXJzIGZvciByZXRyaWV2aW5nCisJCXRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIGVhY2ggc2xhdmUuCisKKwkJMi4gQSBzd2l0Y2ggdGhhdCBzdXBwb3J0cyBJRUVFIDgwMi4zYWQgRHluYW1pYyBsaW5rCisJCWFnZ3JlZ2F0aW9uLgorCisJCU1vc3Qgc3dpdGNoZXMgd2lsbCByZXF1aXJlIHNvbWUgdHlwZSBvZiBjb25maWd1cmF0aW9uCisJCXRvIGVuYWJsZSA4MDIuM2FkIG1vZGUuCisKKwliYWxhbmNlLXRsYiBvciA1CisKKwkJQWRhcHRpdmUgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmc6IGNoYW5uZWwgYm9uZGluZyB0aGF0CisJCWRvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpYWwgc3dpdGNoIHN1cHBvcnQuICBUaGUKKwkJb3V0Z29pbmcgdHJhZmZpYyBpcyBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlCisJCWN1cnJlbnQgbG9hZCAoY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIHNwZWVkKSBvbiBlYWNoCisJCXNsYXZlLiAgSW5jb21pbmcgdHJhZmZpYyBpcyByZWNlaXZlZCBieSB0aGUgY3VycmVudAorCQlzbGF2ZS4gIElmIHRoZSByZWNlaXZpbmcgc2xhdmUgZmFpbHMsIGFub3RoZXIgc2xhdmUKKwkJdGFrZXMgb3ZlciB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGZhaWxlZCByZWNlaXZpbmcKKwkJc2xhdmUuCisKKwkJUHJlcmVxdWlzaXRlOgorCisJCUV0aHRvb2wgc3VwcG9ydCBpbiB0aGUgYmFzZSBkcml2ZXJzIGZvciByZXRyaWV2aW5nIHRoZQorCQlzcGVlZCBvZiBlYWNoIHNsYXZlLgorCisJYmFsYW5jZS1hbGIgb3IgNgorCisJCUFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nOiBpbmNsdWRlcyBiYWxhbmNlLXRsYiBwbHVzCisJCXJlY2VpdmUgbG9hZCBiYWxhbmNpbmcgKHJsYikgZm9yIElQVjQgdHJhZmZpYywgYW5kCisJCWRvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpYWwgc3dpdGNoIHN1cHBvcnQuICBUaGUKKwkJcmVjZWl2ZSBsb2FkIGJhbGFuY2luZyBpcyBhY2hpZXZlZCBieSBBUlAgbmVnb3RpYXRpb24uCisJCVRoZSBib25kaW5nIGRyaXZlciBpbnRlcmNlcHRzIHRoZSBBUlAgUmVwbGllcyBzZW50IGJ5CisJCXRoZSBsb2NhbCBzeXN0ZW0gb24gdGhlaXIgd2F5IG91dCBhbmQgb3ZlcndyaXRlcyB0aGUKKwkJc291cmNlIGhhcmR3YXJlIGFkZHJlc3Mgd2l0aCB0aGUgdW5pcXVlIGhhcmR3YXJlCisJCWFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBzbGF2ZXMgaW4gdGhlIGJvbmQgc3VjaCB0aGF0CisJCWRpZmZlcmVudCBwZWVycyB1c2UgZGlmZmVyZW50IGhhcmR3YXJlIGFkZHJlc3NlcyBmb3IKKwkJdGhlIHNlcnZlci4KKworCQlSZWNlaXZlIHRyYWZmaWMgZnJvbSBjb25uZWN0aW9ucyBjcmVhdGVkIGJ5IHRoZSBzZXJ2ZXIKKwkJaXMgYWxzbyBiYWxhbmNlZC4gIFdoZW4gdGhlIGxvY2FsIHN5c3RlbSBzZW5kcyBhbiBBUlAKKwkJUmVxdWVzdCB0aGUgYm9uZGluZyBkcml2ZXIgY29waWVzIGFuZCBzYXZlcyB0aGUgcGVlcidzCisJCUlQIGluZm9ybWF0aW9uIGZyb20gdGhlIEFSUCBwYWNrZXQuICBXaGVuIHRoZSBBUlAKKwkJUmVwbHkgYXJyaXZlcyBmcm9tIHRoZSBwZWVyLCBpdHMgaGFyZHdhcmUgYWRkcmVzcyBpcworCQlyZXRyaWV2ZWQgYW5kIHRoZSBib25kaW5nIGRyaXZlciBpbml0aWF0ZXMgYW4gQVJQCisJCXJlcGx5IHRvIHRoaXMgcGVlciBhc3NpZ25pbmcgaXQgdG8gb25lIG9mIHRoZSBzbGF2ZXMKKwkJaW4gdGhlIGJvbmQuICBBIHByb2JsZW1hdGljIG91dGNvbWUgb2YgdXNpbmcgQVJQCisJCW5lZ290aWF0aW9uIGZvciBiYWxhbmNpbmcgaXMgdGhhdCBlYWNoIHRpbWUgdGhhdCBhbgorCQlBUlAgcmVxdWVzdCBpcyBicm9hZGNhc3QgaXQgdXNlcyB0aGUgaGFyZHdhcmUgYWRkcmVzcworCQlvZiB0aGUgYm9uZC4gIEhlbmNlLCBwZWVycyBsZWFybiB0aGUgaGFyZHdhcmUgYWRkcmVzcworCQlvZiB0aGUgYm9uZCBhbmQgdGhlIGJhbGFuY2luZyBvZiByZWNlaXZlIHRyYWZmaWMKKwkJY29sbGFwc2VzIHRvIHRoZSBjdXJyZW50IHNsYXZlLiAgVGhpcyBpcyBoYW5kbGVkIGJ5CisJCXNlbmRpbmcgdXBkYXRlcyAoQVJQIFJlcGxpZXMpIHRvIGFsbCB0aGUgcGVlcnMgd2l0aAorCQl0aGVpciBpbmRpdmlkdWFsbHkgYXNzaWduZWQgaGFyZHdhcmUgYWRkcmVzcyBzdWNoIHRoYXQKKwkJdGhlIHRyYWZmaWMgaXMgcmVkaXN0cmlidXRlZC4gIFJlY2VpdmUgdHJhZmZpYyBpcyBhbHNvCisJCXJlZGlzdHJpYnV0ZWQgd2hlbiBhIG5ldyBzbGF2ZSBpcyBhZGRlZCB0byB0aGUgYm9uZAorCQlhbmQgd2hlbiBhbiBpbmFjdGl2ZSBzbGF2ZSBpcyByZS1hY3RpdmF0ZWQuICBUaGUKKwkJcmVjZWl2ZSBsb2FkIGlzIGRpc3RyaWJ1dGVkIHNlcXVlbnRpYWxseSAocm91bmQgcm9iaW4pCisJCWFtb25nIHRoZSBncm91cCBvZiBoaWdoZXN0IHNwZWVkIHNsYXZlcyBpbiB0aGUgYm9uZC4KKworCQlXaGVuIGEgbGluayBpcyByZWNvbm5lY3RlZCBvciBhIG5ldyBzbGF2ZSBqb2lucyB0aGUKKwkJYm9uZCB0aGUgcmVjZWl2ZSB0cmFmZmljIGlzIHJlZGlzdHJpYnV0ZWQgYW1vbmcgYWxsCisJCWFjdGl2ZSBzbGF2ZXMgaW4gdGhlIGJvbmQgYnkgaW50aWF0aW5nIEFSUCBSZXBsaWVzCisJCXdpdGggdGhlIHNlbGVjdGVkIG1hYyBhZGRyZXNzIHRvIGVhY2ggb2YgdGhlCisJCWNsaWVudHMuIFRoZSB1cGRlbGF5IHBhcmFtZXRlciAoZGV0YWlsZWQgYmVsb3cpIG11c3QKKwkJYmUgc2V0IHRvIGEgdmFsdWUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBzd2l0Y2gncworCQlmb3J3YXJkaW5nIGRlbGF5IHNvIHRoYXQgdGhlIEFSUCBSZXBsaWVzIHNlbnQgdG8gdGhlCisJCXBlZXJzIHdpbGwgbm90IGJlIGJsb2NrZWQgYnkgdGhlIHN3aXRjaC4KKworCQlQcmVyZXF1aXNpdGVzOgorCisJCTEuIEV0aHRvb2wgc3VwcG9ydCBpbiB0aGUgYmFzZSBkcml2ZXJzIGZvciByZXRyaWV2aW5nCisJCXRoZSBzcGVlZCBvZiBlYWNoIHNsYXZlLgorCisJCTIuIEJhc2UgZHJpdmVyIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGhhcmR3YXJlCisJCWFkZHJlc3Mgb2YgYSBkZXZpY2Ugd2hpbGUgaXQgaXMgb3Blbi4gIFRoaXMgaXMKKwkJcmVxdWlyZWQgc28gdGhhdCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBvbmUgc2xhdmUgaW4gdGhlCisJCXRlYW0gdXNpbmcgdGhlIGJvbmQgaGFyZHdhcmUgYWRkcmVzcyAodGhlCisJCWN1cnJfYWN0aXZlX3NsYXZlKSB3aGlsZSBoYXZpbmcgYSB1bmlxdWUgaGFyZHdhcmUKKwkJYWRkcmVzcyBmb3IgZWFjaCBzbGF2ZSBpbiB0aGUgYm9uZC4gIElmIHRoZQorCQljdXJyX2FjdGl2ZV9zbGF2ZSBmYWlscyBpdHMgaGFyZHdhcmUgYWRkcmVzcyBpcworCQlzd2FwcGVkIHdpdGggdGhlIG5ldyBjdXJyX2FjdGl2ZV9zbGF2ZSB0aGF0IHdhcworCQljaG9zZW4uCisKK3ByaW1hcnkKKworCUEgc3RyaW5nIChldGgwLCBldGgyLCBldGMpIHNwZWNpZnlpbmcgd2hpY2ggc2xhdmUgaXMgdGhlCisJcHJpbWFyeSBkZXZpY2UuICBUaGUgc3BlY2lmaWVkIGRldmljZSB3aWxsIGFsd2F5cyBiZSB0aGUKKwlhY3RpdmUgc2xhdmUgd2hpbGUgaXQgaXMgYXZhaWxhYmxlLiAgT25seSB3aGVuIHRoZSBwcmltYXJ5IGlzCisJb2ZmLWxpbmUgd2lsbCBhbHRlcm5hdGUgZGV2aWNlcyBiZSB1c2VkLiAgVGhpcyBpcyB1c2VmdWwgd2hlbgorCW9uZSBzbGF2ZSBpcyBwcmVmZXJyZWQgb3ZlciBhbm90aGVyLCBlLmcuLCB3aGVuIG9uZSBzbGF2ZSBoYXMKKwloaWdoZXIgdGhyb3VnaHB1dCB0aGFuIGFub3RoZXIuCisKKwlUaGUgcHJpbWFyeSBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWN0aXZlLWJhY2t1cCBtb2RlLgorCit1cGRlbGF5CisKKwlTcGVjaWZpZXMgdGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBiZWZvcmUgZW5hYmxpbmcgYQorCXNsYXZlIGFmdGVyIGEgbGluayByZWNvdmVyeSBoYXMgYmVlbiBkZXRlY3RlZC4gIFRoaXMgb3B0aW9uIGlzCisJb25seSB2YWxpZCBmb3IgdGhlIG1paW1vbiBsaW5rIG1vbml0b3IuICBUaGUgdXBkZWxheSB2YWx1ZQorCXNob3VsZCBiZSBhIG11bHRpcGxlIG9mIHRoZSBtaWltb24gdmFsdWU7IGlmIG5vdCwgaXQgd2lsbCBiZQorCXJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuCisKK3VzZV9jYXJyaWVyCisKKwlTcGVjaWZpZXMgd2hldGhlciBvciBub3QgbWlpbW9uIHNob3VsZCB1c2UgTUlJIG9yIEVUSFRPT0wKKwlpb2N0bHMgdnMuIG5ldGlmX2NhcnJpZXJfb2soKSB0byBkZXRlcm1pbmUgdGhlIGxpbmsKKwlzdGF0dXMuIFRoZSBNSUkgb3IgRVRIVE9PTCBpb2N0bHMgYXJlIGxlc3MgZWZmaWNpZW50IGFuZAorCXV0aWxpemUgYSBkZXByZWNhdGVkIGNhbGxpbmcgc2VxdWVuY2Ugd2l0aGluIHRoZSBrZXJuZWwuICBUaGUKKwluZXRpZl9jYXJyaWVyX29rKCkgcmVsaWVzIG9uIHRoZSBkZXZpY2UgZHJpdmVyIHRvIG1haW50YWluIGl0cworCXN0YXRlIHdpdGggbmV0aWZfY2Fycmllcl9vbi9vZmY7IGF0IHRoaXMgd3JpdGluZywgbW9zdCwgYnV0CisJbm90IGFsbCwgZGV2aWNlIGRyaXZlcnMgc3VwcG9ydCB0aGlzIGZhY2lsaXR5LgorCisJSWYgYm9uZGluZyBpbnNpc3RzIHRoYXQgdGhlIGxpbmsgaXMgdXAgd2hlbiBpdCBzaG91bGQgbm90IGJlLAorCWl0IG1heSBiZSB0aGF0IHlvdXIgbmV0d29yayBkZXZpY2UgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQKKwluZXRpZl9jYXJyaWVyX29uL29mZi4gIFRoZSBkZWZhdWx0IHN0YXRlIGZvciBuZXRpZl9jYXJyaWVyIGlzCisJImNhcnJpZXIgb24sIiBzbyBpZiBhIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IG5ldGlmX2NhcnJpZXIsCisJaXQgd2lsbCBhcHBlYXIgYXMgaWYgdGhlIGxpbmsgaXMgYWx3YXlzIHVwLiAgSW4gdGhpcyBjYXNlLAorCXNldHRpbmcgdXNlX2NhcnJpZXIgdG8gMCB3aWxsIGNhdXNlIGJvbmRpbmcgdG8gcmV2ZXJ0IHRvIHRoZQorCU1JSSAvIEVUSFRPT0wgaW9jdGwgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgbGluayBzdGF0ZS4KKworCUEgdmFsdWUgb2YgMSBlbmFibGVzIHRoZSB1c2Ugb2YgbmV0aWZfY2Fycmllcl9vaygpLCBhIHZhbHVlIG9mCisJMCB3aWxsIHVzZSB0aGUgZGVwcmVjYXRlZCBNSUkgLyBFVEhUT09MIGlvY3Rscy4gIFRoZSBkZWZhdWx0CisJdmFsdWUgaXMgMS4KKworCisKKzMuIENvbmZpZ3VyaW5nIEJvbmRpbmcgRGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlUaGVyZSBhcmUsIGVzc2VudGlhbGx5LCB0d28gbWV0aG9kcyBmb3IgY29uZmlndXJpbmcgYm9uZGluZzoKK3dpdGggc3VwcG9ydCBmcm9tIHRoZSBkaXN0cm8ncyBuZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIGFuZAord2l0aG91dC4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdHdvIHBhY2thZ2VzIGZvciB0aGUgbmV0d29yaworaW5pdGlhbGl6YXRpb24gc2NyaXB0czogaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnLiAgUmVjZW50IHZlcnNpb25zIG9mCit0aGVzZSBwYWNrYWdlcyBoYXZlIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHdoaWxlIG9sZGVyIHZlcnNpb25zIGRvIG5vdC4KKworCVdlIHdpbGwgZmlyc3QgZGVzY3JpYmUgdGhlIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGJvbmRpbmcgZm9yCitkaXN0cm9zIHVzaW5nIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzIGFuZCBzeXNjb25maWcgd2l0aCBmdWxsIG9yCitwYXJ0aWFsIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHRoZW4gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBlbmFibGluZworYm9uZGluZyB3aXRob3V0IHN1cHBvcnQgZnJvbSB0aGUgbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzIChpLmUuLAorb2xkZXIgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnKS4KKworCUlmIHlvdSdyZSB1bnN1cmUgd2hldGhlciB5b3VyIGRpc3RybyB1c2VzIHN5c2NvbmZpZyBvcgoraW5pdHNjcmlwdHMsIG9yIGRvbid0IGtub3cgaWYgaXQncyBuZXcgZW5vdWdoLCBoYXZlIG5vIGZlYXIuCitEZXRlcm1pbmluZyB0aGlzIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuCisKKwlGaXJzdCwgaXNzdWUgdGhlIGNvbW1hbmQ6CisKKyQgcnBtIC1xZiAvc2Jpbi9pZnVwCisKKwlJdCB3aWxsIHJlc3BvbmQgd2l0aCBhIGxpbmUgb2YgdGV4dCBzdGFydGluZyB3aXRoIGVpdGhlcgorImluaXRzY3JpcHRzIiBvciAic3lzY29uZmlnLCIgZm9sbG93ZWQgYnkgc29tZSBudW1iZXJzLiAgVGhpcyBpcyB0aGUKK3BhY2thZ2UgdGhhdCBwcm92aWRlcyB5b3VyIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cy4KKworCU5leHQsIHRvIGRldGVybWluZSBpZiB5b3VyIGluc3RhbGxhdGlvbiBzdXBwb3J0cyBib25kaW5nLAoraXNzdWUgdGhlIGNvbW1hbmQ6CisKKyQgZ3JlcCBpZmVuc2xhdmUgL3NiaW4vaWZ1cAorCisJSWYgdGhpcyByZXR1cm5zIGFueSBtYXRjaGVzLCB0aGVuIHlvdXIgaW5pdHNjcmlwdHMgb3IKK3N5c2NvbmZpZyBoYXMgc3VwcG9ydCBmb3IgYm9uZGluZy4KKworMy4xIENvbmZpZ3VyYXRpb24gd2l0aCBzeXNjb25maWcgc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB1c2luZyBhIHZlcnNpb24gb2Ygc3lzY29uZmlnCit3aXRoIGJvbmRpbmcgc3VwcG9ydCwgZm9yIGV4YW1wbGUsIFN1U0UgTGludXggRW50ZXJwcmlzZSBTZXJ2ZXIgOS4KKworCVN1U0UgU0xFUyA5J3MgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIHN5c3RlbSBkb2VzIHN1cHBvcnQKK2JvbmRpbmcsIGhvd2V2ZXIsIGF0IHRoaXMgd3JpdGluZywgdGhlIFlhU1Qgc3lzdGVtIGNvbmZpZ3VyYXRpb24KK2Zyb250ZW5kIGRvZXMgbm90IHByb3ZpZGUgYW55IG1lYW5zIHRvIHdvcmsgd2l0aCBib25kaW5nIGRldmljZXMuCitCb25kaW5nIGRldmljZXMgY2FuIGJlIG1hbmFnZWQgYnkgaGFuZCwgaG93ZXZlciwgYXMgZm9sbG93cy4KKworCUZpcnN0LCBpZiB0aGV5IGhhdmUgbm90IGFscmVhZHkgYmVlbiBjb25maWd1cmVkLCBjb25maWd1cmUgdGhlCitzbGF2ZSBkZXZpY2VzLiAgT24gU0xFUyA5LCB0aGlzIGlzIG1vc3QgZWFzaWx5IGRvbmUgYnkgcnVubmluZyB0aGUKK3lhc3QyIHN5c2NvbmZpZyBjb25maWd1cmF0aW9uIHV0aWxpdHkuICBUaGUgZ29hbCBpcyBmb3IgdG8gY3JlYXRlIGFuCitpZmNmZy1pZCBmaWxlIGZvciBlYWNoIHNsYXZlIGRldmljZS4gIFRoZSBzaW1wbGVzdCB3YXkgdG8gYWNjb21wbGlzaAordGhpcyBpcyB0byBjb25maWd1cmUgdGhlIGRldmljZXMgZm9yIERIQ1AuICBUaGUgbmFtZSBvZiB0aGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBmb3IgZWFjaCBkZXZpY2Ugd2lsbCBiZSBvZiB0aGUgZm9ybToKKworaWZjZmctaWQteHg6eHg6eHg6eHg6eHg6eHgKKworCVdoZXJlIHRoZSAieHgiIHBvcnRpb24gd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBkaWdpdHMgZnJvbQordGhlIGRldmljZSdzIHBlcm1hbmVudCBNQUMgYWRkcmVzcy4KKworCU9uY2UgdGhlIHNldCBvZiBpZmNmZy1pZC14eDp4eDp4eDp4eDp4eDp4eCBmaWxlcyBoYXMgYmVlbgorY3JlYXRlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGVkaXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBzbGF2ZQorZGV2aWNlcyAodGhlIE1BQyBhZGRyZXNzZXMgY29ycmVzcG9uZCB0byB0aG9zZSBvZiB0aGUgc2xhdmUgZGV2aWNlcykuCitCZWZvcmUgZWRpdGluZywgdGhlIGZpbGUgd2lsbCBjb250YWluIG11bGlwbGUgbGluZXMsIGFuZCB3aWxsIGxvb2sKK3NvbWV0aGluZyBsaWtlIHRoaXM6CisKK0JPT1RQUk9UTz0nZGhjcCcKK1NUQVJUTU9ERT0nb24nCitVU0VSQ1RMPSdubycKK1VOSVFVRT0nWE56dS5XZVpHT0dGKzR3RScKK19ubV9uYW1lPSdidXMtcGNpLTAwMDE6NjE6MDEuMCcKKworCUNoYW5nZSB0aGUgQk9PVFBST1RPIGFuZCBTVEFSVE1PREUgbGluZXMgdG8gdGhlIGZvbGxvd2luZzoKKworQk9PVFBST1RPPSdub25lJworU1RBUlRNT0RFPSdvZmYnCisKKwlEbyBub3QgYWx0ZXIgdGhlIFVOSVFVRSBvciBfbm1fbmFtZSBsaW5lcy4gIFJlbW92ZSBhbnkgb3RoZXIKK2xpbmVzIChVU0VSQ1RMLCBldGMpLgorCisJT25jZSB0aGUgaWZjZmctaWQteHg6eHg6eHg6eHg6eHg6eHggZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLAoraXQncyB0aW1lIHRvIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgYm9uZGluZyBkZXZpY2UKK2l0c2VsZi4gIFRoaXMgZmlsZSBpcyBuYW1lZCBpZmNmZy1ib25kWCwgd2hlcmUgWCBpcyB0aGUgbnVtYmVyIG9mIHRoZQorYm9uZGluZyBkZXZpY2UgdG8gY3JlYXRlLCBzdGFydGluZyBhdCAwLiAgVGhlIGZpcnN0IHN1Y2ggZmlsZSBpcworaWZjZmctYm9uZDAsIHRoZSBzZWNvbmQgaXMgaWZjZmctYm9uZDEsIGFuZCBzbyBvbi4gIFRoZSBzeXNjb25maWcKK25ldHdvcmsgY29uZmlndXJhdGlvbiBzeXN0ZW0gd2lsbCBjb3JyZWN0bHkgc3RhcnQgbXVsdGlwbGUgaW5zdGFuY2VzCitvZiBib25kaW5nLgorCisJVGhlIGNvbnRlbnRzIG9mIHRoZSBpZmNmZy1ib25kWCBmaWxlIGlzIGFzIGZvbGxvd3M6CisKK0JPT1RQUk9UTz0ic3RhdGljIgorQlJPQURDQVNUPSIxMC4wLjIuMjU1IgorSVBBRERSPSIxMC4wLjIuMTAiCitORVRNQVNLPSIyNTUuMjU1LjAuMCIKK05FVFdPUks9IjEwLjAuMi4wIgorUkVNT1RFX0lQQUREUj0iIgorU1RBUlRNT0RFPSJvbmJvb3QiCitCT05ESU5HX01BU1RFUj0ieWVzIgorQk9ORElOR19NT0RVTEVfT1BUUz0ibW9kZT1hY3RpdmUtYmFja3VwIG1paW1vbj0xMDAiCitCT05ESU5HX1NMQVZFMD0iZXRoMCIKK0JPTkRJTkdfU0xBVkUxPSJldGgxIgorCisJUmVwbGFjZSB0aGUgc2FtcGxlIEJST0FEQ0FTVCwgSVBBRERSLCBORVRNQVNLIGFuZCBORVRXT1JLCit2YWx1ZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciB5b3VyIG5ldHdvcmsuCisKKwlOb3RlIHRoYXQgY29uZmlndXJpbmcgdGhlIGJvbmRpbmcgZGV2aWNlIHdpdGggQk9PVFBST1RPPSdkaGNwJworZG9lcyBub3Qgd29yazsgdGhlIHNjcmlwdHMgYXR0ZW1wdCB0byBvYnRhaW4gdGhlIGRldmljZSBhZGRyZXNzIGZyb20KK0RIQ1AgcHJpb3IgdG8gYWRkaW5nIGFueSBvZiB0aGUgc2xhdmUgZGV2aWNlcy4gIFdpdGhvdXQgYWN0aXZlIHNsYXZlcywKK3RoZSBESENQIHJlcXVlc3RzIGFyZSBub3Qgc2VudCB0byB0aGUgbmV0d29yay4KKworCVRoZSBTVEFSVE1PREUgc3BlY2lmaWVzIHdoZW4gdGhlIGRldmljZSBpcyBicm91Z2h0IG9ubGluZS4KK1RoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOgorCisJb25ib290OgkgVGhlIGRldmljZSBpcyBzdGFydGVkIGF0IGJvb3QgdGltZS4gIElmIHlvdSdyZSBub3QKKwkJIHN1cmUsIHRoaXMgaXMgcHJvYmFibHkgd2hhdCB5b3Ugd2FudC4KKworCW1hbnVhbDoJIFRoZSBkZXZpY2UgaXMgc3RhcnRlZCBvbmx5IHdoZW4gaWZ1cCBpcyBjYWxsZWQKKwkJIG1hbnVhbGx5LiAgQm9uZGluZyBkZXZpY2VzIG1heSBiZSBjb25maWd1cmVkIHRoaXMKKwkJIHdheSBpZiB5b3UgZG8gbm90IHdpc2ggdGhlbSB0byBzdGFydCBhdXRvbWF0aWNhbGx5CisJCSBhdCBib290IGZvciBzb21lIHJlYXNvbi4KKworCWhvdHBsdWc6IFRoZSBkZXZpY2UgaXMgc3RhcnRlZCBieSBhIGhvdHBsdWcgZXZlbnQuICBUaGlzIGlzIG5vdAorCQkgYSB2YWxpZCBjaG9pY2UgZm9yIGEgYm9uZGluZyBkZXZpY2UuCisKKwlvZmYgb3IgaWdub3JlOiBUaGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gaXMgaWdub3JlZC4KKworCVRoZSBsaW5lIEJPTkRJTkdfTUFTVEVSPSd5ZXMnIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UgaXMgYQorYm9uZGluZyBtYXN0ZXIgZGV2aWNlLiAgVGhlIG9ubHkgdXNlZnVsIHZhbHVlIGlzICJ5ZXMuIgorCisJVGhlIGNvbnRlbnRzIG9mIEJPTkRJTkdfTU9EVUxFX09QVFMgYXJlIHN1cHBsaWVkIHRvIHRoZQoraW5zdGFuY2Ugb2YgdGhlIGJvbmRpbmcgbW9kdWxlIGZvciB0aGlzIGRldmljZS4gIFNwZWNpZnkgdGhlIG9wdGlvbnMKK2ZvciB0aGUgYm9uZGluZyBtb2RlLCBsaW5rIG1vbml0b3JpbmcsIGFuZCBzbyBvbiBoZXJlLiAgRG8gbm90IGluY2x1ZGUKK3RoZSBtYXhfYm9uZHMgYm9uZGluZyBwYXJhbWV0ZXI7IHRoaXMgd2lsbCBjb25mdXNlIHRoZSBjb25maWd1cmF0aW9uCitzeXN0ZW0gaWYgeW91IGhhdmUgbXVsdGlwbGUgYm9uZGluZyBkZXZpY2VzLgorCisJRmluYWxseSwgc3VwcGx5IG9uZSBCT05ESU5HX1NMQVZFbj0iZXRoWCIgZm9yIGVhY2ggc2xhdmUsCit3aGVyZSAibiIgaXMgYW4gaW5jcmVhc2luZyB2YWx1ZSwgb25lIGZvciBlYWNoIHNsYXZlLCBhbmQgImV0aFgiIGlzCit0aGUgbmFtZSBvZiB0aGUgc2xhdmUgZGV2aWNlIChldGgwLCBldGgxLCBldGMpLgorCisJV2hlbiBhbGwgY29uZmlndXJhdGlvbiBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgY3JlYXRlZCwKK25ldHdvcmtpbmcgbXVzdCBiZSByZXN0YXJ0ZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGFrZQorZWZmZWN0LiAgVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIHZpYSB0aGUgZm9sbG93aW5nOgorCisjIC9ldGMvaW5pdC5kL25ldHdvcmsgcmVzdGFydAorCisJTm90ZSB0aGF0IHRoZSBuZXR3b3JrIGNvbnRyb2wgc2NyaXB0ICgvc2Jpbi9pZmRvd24pIHdpbGwKK3JlbW92ZSB0aGUgYm9uZGluZyBtb2R1bGUgYXMgcGFydCBvZiB0aGUgbmV0d29yayBzaHV0ZG93biBwcm9jZXNzaW5nLAorc28gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byByZW1vdmUgdGhlIG1vZHVsZSBieSBoYW5kIGlmLCBlLmcuLCB0aGUKK21vZHVsZSBwYXJhbXRlcnMgaGF2ZSBjaGFuZ2VkLgorCisJQWxzbywgYXQgdGhpcyB3cml0aW5nLCBZYVNUL1lhU1QyIHdpbGwgbm90IG1hbmFnZSBib25kaW5nCitkZXZpY2VzICh0aGV5IGRvIG5vdCBzaG93IGJvbmRpbmcgaW50ZXJmYWNlcyBvbiBpdHMgbGlzdCBvZiBuZXR3b3JrCitkZXZpY2VzKS4gIEl0IGlzIG5lY2Vzc2FyeSB0byBlZGl0IHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYnkgaGFuZCB0bworY2hhbmdlIHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24uCisKKwlBZGRpdGlvbmFsIGdlbmVyYWwgb3B0aW9ucyBhbmQgZGV0YWlscyBvZiB0aGUgaWZjZmcgZmlsZQorZm9ybWF0IGNhbiBiZSBmb3VuZCBpbiBhbiBleGFtcGxlIGlmY2ZnIHRlbXBsYXRlIGZpbGU6CisKKy9ldGMvc3lzY29uZmlnL25ldHdvcmsvaWZjZmcudGVtcGxhdGUKKworCU5vdGUgdGhhdCB0aGUgdGVtcGxhdGUgZG9lcyBub3QgZG9jdW1lbnQgdGhlIHZhcmlvdXMgQk9ORElOR18KK3NldHRpbmdzIGRlc2NyaWJlZCBhYm92ZSwgYnV0IGRvZXMgZGVzY3JpYmUgbWFueSBvZiB0aGUgb3RoZXIgb3B0aW9ucy4KKworMy4yIENvbmZpZ3VyYXRpb24gd2l0aCBpbml0c2NyaXB0cyBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIGRpc3Ryb3MgdXNpbmcgYSB2ZXJzaW9uIG9mIGluaXRzY3JpcHRzCit3aXRoIGJvbmRpbmcgc3VwcG9ydCwgZm9yIGV4YW1wbGUsIFJlZCBIYXQgTGludXggOSBvciBSZWQgSGF0CitFbnRlcnByaXNlIExpbnV4IHZlcnNpb24gMy4gIE9uIHRoZXNlIHN5c3RlbXMsIHRoZSBuZXR3b3JrCitpbml0aWFsaXphdGlvbiBzY3JpcHRzIGhhdmUgc29tZSBrbm93bGVkZ2Ugb2YgYm9uZGluZywgYW5kIGNhbiBiZQorY29uZmlndXJlZCB0byBjb250cm9sIGJvbmRpbmcgZGV2aWNlcy4KKworCVRoZXNlIGRpc3Ryb3Mgd2lsbCBub3QgYXV0b21hdGljYWxseSBsb2FkIHRoZSBuZXR3b3JrIGFkYXB0ZXIKK2RyaXZlciB1bmxlc3MgdGhlIGV0aFggZGV2aWNlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhbiBJUCBhZGRyZXNzLgorQmVjYXVzZSBvZiB0aGlzIGNvbnN0cmFpbnQsIHVzZXJzIG11c3QgbWFudWFsbHkgY29uZmlndXJlIGEKK25ldHdvcmstc2NyaXB0IGZpbGUgZm9yIGFsbCBwaHlzaWNhbCBhZGFwdGVycyB0aGF0IHdpbGwgYmUgbWVtYmVycyBvZgorYSBib25kWCBsaW5rLiAgTmV0d29yayBzY3JpcHQgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeToKKworL2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzCisKKwlUaGUgZmlsZSBuYW1lIG11c3QgYmUgcHJlZml4ZWQgd2l0aCAiaWZjZmctZXRoIiBhbmQgc3VmZml4ZWQKK3dpdGggdGhlIGFkYXB0ZXIncyBwaHlzaWNhbCBhZGFwdGVyIG51bWJlci4gIEZvciBleGFtcGxlLCB0aGUgc2NyaXB0Citmb3IgZXRoMCB3b3VsZCBiZSBuYW1lZCAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvaWZjZmctZXRoMC4KK1BsYWNlIHRoZSBmb2xsb3dpbmcgdGV4dCBpbiB0aGUgZmlsZToKKworREVWSUNFPWV0aDAKK1VTRVJDVEw9bm8KK09OQk9PVD15ZXMKK01BU1RFUj1ib25kMAorU0xBVkU9eWVzCitCT09UUFJPVE89bm9uZQorCisJVGhlIERFVklDRT0gbGluZSB3aWxsIGJlIGRpZmZlcmVudCBmb3IgZXZlcnkgZXRoWCBkZXZpY2UgYW5kCittdXN0IGNvcnJlc3BvbmQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgaS5lLiwgaWZjZmctZXRoMSBtdXN0IGhhdmUKK2EgZGV2aWNlIGxpbmUgb2YgREVWSUNFPWV0aDEuICBUaGUgc2V0dGluZyBvZiB0aGUgTUFTVEVSPSBsaW5lIHdpbGwKK2Fsc28gZGVwZW5kIG9uIHRoZSBmaW5hbCBib25kaW5nIGludGVyZmFjZSBuYW1lIGNob3NlbiBmb3IgeW91ciBib25kLgorQXMgd2l0aCBvdGhlciBuZXR3b3JrIGRldmljZXMsIHRoZXNlIHR5cGljYWxseSBzdGFydCBhdCAwLCBhbmQgZ28gdXAKK29uZSBmb3IgZWFjaCBkZXZpY2UsIGkuZS4sIHRoZSBmaXJzdCBib25kaW5nIGluc3RhbmNlIGlzIGJvbmQwLCB0aGUKK3NlY29uZCBpcyBib25kMSwgYW5kIHNvIG9uLgorCisJTmV4dCwgY3JlYXRlIGEgYm9uZCBuZXR3b3JrIHNjcmlwdC4gIFRoZSBmaWxlIG5hbWUgZm9yIHRoaXMKK3NjcmlwdCB3aWxsIGJlIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ib25kWCB3aGVyZSBYIGlzCit0aGUgbnVtYmVyIG9mIHRoZSBib25kLiAgRm9yIGJvbmQwIHRoZSBmaWxlIGlzIG5hbWVkICJpZmNmZy1ib25kMCIsCitmb3IgYm9uZDEgaXQgaXMgbmFtZWQgImlmY2ZnLWJvbmQxIiwgYW5kIHNvIG9uLiAgV2l0aGluIHRoYXQgZmlsZSwKK3BsYWNlIHRoZSBmb2xsb3dpbmcgdGV4dDoKKworREVWSUNFPWJvbmQwCitJUEFERFI9MTkyLjE2OC4xLjEKK05FVE1BU0s9MjU1LjI1NS4yNTUuMAorTkVUV09SSz0xOTIuMTY4LjEuMAorQlJPQURDQVNUPTE5Mi4xNjguMS4yNTUKK09OQk9PVD15ZXMKK0JPT1RQUk9UTz1ub25lCitVU0VSQ1RMPW5vCisKKwlCZSBzdXJlIHRvIGNoYW5nZSB0aGUgbmV0d29ya2luZyBzcGVjaWZpYyBsaW5lcyAoSVBBRERSLAorTkVUTUFTSywgTkVUV09SSyBhbmQgQlJPQURDQVNUKSB0byBtYXRjaCB5b3VyIG5ldHdvcmsgY29uZmlndXJhdGlvbi4KKworCUZpbmFsbHksIGl0IGlzIG5lY2Vzc2FyeSB0byBlZGl0IC9ldGMvbW9kdWxlcy5jb25mIHRvIGxvYWQgdGhlCitib25kaW5nIG1vZHVsZSB3aGVuIHRoZSBib25kMCBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4gIFRoZSBmb2xsb3dpbmcKK3NhbXBsZSBsaW5lcyBpbiAvZXRjL21vZHVsZXMuY29uZiB3aWxsIGxvYWQgdGhlIGJvbmRpbmcgbW9kdWxlLCBhbmQKK3NlbGVjdCBpdHMgb3B0aW9uczoKKworYWxpYXMgYm9uZDAgYm9uZGluZworb3B0aW9ucyBib25kMCBtb2RlPWJhbGFuY2UtYWxiIG1paW1vbj0xMDAKKworCVJlcGxhY2UgdGhlIHNhbXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNldCBvZgorb3B0aW9ucyBmb3IgeW91ciBjb25maWd1cmF0aW9uLgorCisJRmluYWxseSBydW4gIi9ldGMvcmMuZC9pbml0LmQvbmV0d29yayByZXN0YXJ0IiBhcyByb290LiAgVGhpcword2lsbCByZXN0YXJ0IHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgeW91ciBib25kIGxpbmsgc2hvdWxkIGJlIG5vdwordXAgYW5kIHJ1bm5pbmcuCisKKworMy4zIENvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIHNlY3Rpb24gYXBwbGllcyB0byBkaXN0cm9zIHdob3NlIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24KK3NjcmlwdHMgKHRoZSBzeXNjb25maWcgb3IgaW5pdHNjcmlwdHMgcGFja2FnZSkgZG8gbm90IGhhdmUgc3BlY2lmaWMKK2tub3dsZWRnZSBvZiBib25kaW5nLiAgT25lIHN1Y2ggZGlzdHJvIGlzIFN1U0UgTGludXggRW50ZXJwcmlzZSBTZXJ2ZXIKK3ZlcnNpb24gOC4KKworCVRoZSBnZW5lcmFsIG1ldGhvZG9sb2d5IGZvciB0aGVzZSBzeXN0ZW1zIGlzIHRvIHBsYWNlIHRoZQorYm9uZGluZyBtb2R1bGUgcGFyYW1ldGVycyBpbnRvIC9ldGMvbW9kcHJvYmUuY29uZiwgdGhlbiBhZGQgbW9kcHJvYmUKK2FuZC9vciBpZmVuc2xhdmUgY29tbWFuZHMgdG8gdGhlIHN5c3RlbSdzIGdsb2JhbCBpbml0IHNjcmlwdC4gIFRoZQorbmFtZSBvZiB0aGUgZ2xvYmFsIGluaXQgc2NyaXB0IGRpZmZlcnM7IGZvciBzeXNjb25maWcsIGl0IGlzCisvZXRjL2luaXQuZC9ib290LmxvY2FsIGFuZCBmb3IgaW5pdHNjcmlwdHMgaXQgaXMgL2V0Yy9yYy5kL3JjLmxvY2FsLgorCisJRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgdG8gbWFrZSBhIHNpbXBsZSBib25kIG9mIHR3byBlMTAwCitkZXZpY2VzIChwcmVzdW1lZCB0byBiZSBldGgwIGFuZCBldGgxKSwgYW5kIGhhdmUgaXQgcGVyc2lzdCBhY3Jvc3MKK3JlYm9vdHMsIGVkaXQgdGhlIGFwcHJvcHJpYXRlIGZpbGUgKC9ldGMvaW5pdC5kL2Jvb3QubG9jYWwgb3IKKy9ldGMvcmMuZC9yYy5sb2NhbCksIGFuZCBhZGQgdGhlIGZvbGxvd2luZzoKKworbW9kcHJvYmUgYm9uZGluZyAtb2JvbmQwIG1vZGU9YmFsYW5jZS1hbGIgbWlpbW9uPTEwMAorbW9kcHJvYmUgZTEwMAoraWZjb25maWcgYm9uZDAgMTkyLjE2OC4xLjEgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHVwCitpZmVuc2xhdmUgYm9uZDAgZXRoMAoraWZlbnNsYXZlIGJvbmQwIGV0aDEKKworCVJlcGxhY2UgdGhlIGV4YW1wbGUgYm9uZGluZyBtb2R1bGUgcGFyYW1ldGVycyBhbmQgYm9uZDAKK25ldHdvcmsgY29uZmlndXJhdGlvbiAoSVAgYWRkcmVzcywgbmV0bWFzaywgZXRjKSB3aXRoIHRoZSBhcHByb3ByaWF0ZQordmFsdWVzIGZvciB5b3VyIGNvbmZpZ3VyYXRpb24uICBUaGUgYWJvdmUgZXhhbXBsZSBsb2FkcyB0aGUgYm9uZGluZworbW9kdWxlIHdpdGggdGhlIG5hbWUgImJvbmQwLCIgdGhpcyBzaW1wbGlmaWVzIHRoZSBuYW1pbmcgaWYgbXVsdGlwbGUKK2JvbmRpbmcgbW9kdWxlcyBhcmUgbG9hZGVkIChlYWNoIHN1Y2Nlc3NpdmUgaW5zdGFuY2Ugb2YgdGhlIG1vZHVsZSBpcworZ2l2ZW4gYSBkaWZmZXJlbnQgbmFtZSwgYW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgbmFtZXMgbWF0Y2ggdGhlCitib25kaW5nIGludGVyZmFjZSBuYW1lcykuCisKKwlVbmZvcnR1bmF0ZWx5LCB0aGlzIG1ldGhvZCB3aWxsIG5vdCBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZQoraWZ1cCBhbmQgaWZkb3duIHNjcmlwdHMgb24gdGhlIGJvbmQgZGV2aWNlcy4gIFRvIHJlbG9hZCB0aGUgYm9uZGluZworY29uZmlndXJhdGlvbiwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJ1biB0aGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0LCBlLmcuLAorCisjIC9ldGMvaW5pdC5kL2Jvb3QubG9jYWwKKworCW9yCisKKyMgL2V0Yy9yYy5kL3JjLmxvY2FsCisKKwlJdCBtYXkgYmUgZGVzaXJhYmxlIGluIHN1Y2ggYSBjYXNlIHRvIGNyZWF0ZSBhIHNlcGFyYXRlIHNjcmlwdAord2hpY2ggb25seSBpbml0aWFsaXplcyB0aGUgYm9uZGluZyBjb25maWd1cmF0aW9uLCB0aGVuIGNhbGwgdGhhdAorc2VwYXJhdGUgc2NyaXB0IGZyb20gd2l0aGluIGJvb3QubG9jYWwuICBUaGlzIGFsbG93cyBmb3IgYm9uZGluZyB0byBiZQorZW5hYmxlZCB3aXRob3V0IHJlLXJ1bm5pbmcgdGhlIGVudGlyZSBnbG9iYWwgaW5pdCBzY3JpcHQuCisKKwlUbyBzaHV0IGRvd24gdGhlIGJvbmRpbmcgZGV2aWNlcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGZpcnN0CittYXJrIHRoZSBib25kaW5nIGRldmljZSBpdHNlbGYgYXMgYmVpbmcgZG93biwgdGhlbiByZW1vdmUgdGhlCithcHByb3ByaWF0ZSBkZXZpY2UgZHJpdmVyIG1vZHVsZXMuICBGb3Igb3VyIGV4YW1wbGUgYWJvdmUsIHlvdSBjYW4gZG8KK3RoZSBmb2xsb3dpbmc6CisKKyMgaWZjb25maWcgYm9uZDAgZG93bgorIyBybW1vZCBib25kMAorIyBybW1vZCBlMTAwCisKKwlBZ2FpbiwgZm9yIGNvbnZlbmllbmNlLCBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGNyZWF0ZSBhIHNjcmlwdAord2l0aCB0aGVzZSBjb21tYW5kcy4KKworCiszLjQgQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIG11bHRpcGxlCitib25kaW5nIGRldmljZXMgd2l0aCBkaWZmZXJpbmcgb3B0aW9ucy4gIElmIHlvdSByZXF1aXJlIG11bHRpcGxlCitib25kaW5nIGRldmljZXMsIGJ1dCBhbGwgd2l0aCB0aGUgc2FtZSBvcHRpb25zLCBzZWUgdGhlICJtYXhfYm9uZHMiCittb2R1bGUgcGFyYW10ZXIsIGRvY3VtZW50ZWQgYWJvdmUuCisKKwlUbyBjcmVhdGUgbXVsdGlwbGUgYm9uZGluZyBkZXZpY2VzIHdpdGggZGlmZmVyaW5nIG9wdGlvbnMsIGl0CitpcyBuZWNlc3NhcnkgdG8gbG9hZCB0aGUgYm9uZGluZyBkcml2ZXIgbXVsdGlwbGUgdGltZXMuICBOb3RlIHRoYXQKK2N1cnJlbnQgdmVyc2lvbnMgb2YgdGhlIHN5c2NvbmZpZyBuZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHMKK2hhbmRsZSB0aGlzIGF1dG9tYXRpY2FsbHk7IGlmIHlvdXIgZGlzdHJvIHVzZXMgdGhlc2Ugc2NyaXB0cywgbm8KK3NwZWNpYWwgYWN0aW9uIGlzIG5lZWRlZC4gIFNlZSB0aGUgc2VjdGlvbiBDb25maWd1cmluZyBCb25kaW5nCitEZXZpY2VzLCBhYm92ZSwgaWYgeW91J3JlIG5vdCBzdXJlIGFib3V0IHlvdXIgbmV0d29yayBpbml0aWFsaXphdGlvbgorc2NyaXB0cy4KKworCVRvIGxvYWQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBtb2R1bGUsIGl0IGlzIG5lY2Vzc2FyeSB0bworc3BlY2lmeSBhIGRpZmZlcmVudCBuYW1lIGZvciBlYWNoIGluc3RhbmNlICh0aGUgbW9kdWxlIGxvYWRpbmcgc3lzdGVtCityZXF1aXJlcyB0aGF0IGV2ZXJ5IGxvYWRlZCBtb2R1bGUsIGV2ZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lCittb2R1bGUsIGhhdmUgYSB1bmlxdWUgbmFtZSkuICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBzdXBwbHlpbmcKK211bHRpcGxlIHNldHMgb2YgYm9uZGluZyBvcHRpb25zIGluIC9ldGMvbW9kcHJvYmUuY29uZiwgZm9yIGV4YW1wbGU6CisJCithbGlhcyBib25kMCBib25kaW5nCitvcHRpb25zIGJvbmQwIC1vIGJvbmQwIG1vZGU9YmFsYW5jZS1yciBtaWltb249MTAwCisKK2FsaWFzIGJvbmQxIGJvbmRpbmcKK29wdGlvbnMgYm9uZDEgLW8gYm9uZDEgbW9kZT1iYWxhbmNlLWFsYiBtaWltb249NTAKKworCXdpbGwgbG9hZCB0aGUgYm9uZGluZyBtb2R1bGUgdHdvIHRpbWVzLiAgVGhlIGZpcnN0IGluc3RhbmNlIGlzCituYW1lZCAiYm9uZDAiIGFuZCBjcmVhdGVzIHRoZSBib25kMCBkZXZpY2UgaW4gYmFsYW5jZS1yciBtb2RlIHdpdGggYW4KK21paW1vbiBvZiAxMDAuICBUaGUgc2Vjb25kIGluc3RhbmNlIGlzIG5hbWVkICJib25kMSIgYW5kIGNyZWF0ZXMgdGhlCitib25kMSBkZXZpY2UgaW4gYmFsYW5jZS1hbGIgbW9kZSB3aXRoIGFuIG1paW1vbiBvZiA1MC4KKworCVRoaXMgbWF5IGJlIHJlcGVhdGVkIGFueSBudW1iZXIgb2YgdGltZXMsIHNwZWNpZnlpbmcgYSBuZXcgYW5kCit1bmlxdWUgbmFtZSBpbiBwbGFjZSBvZiBib25kMCBvciBib25kMSBmb3IgZWFjaCBpbnN0YW5jZS4KKworCVdoZW4gdGhlIGFwcHJvcHJpYXRlIG1vZHVsZSBwYXJhbXRlcnMgYXJlIGluIHBsYWNlLCB0aGVuCitjb25maWd1cmUgYm9uZGluZyBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBmb3IgeW91ciBkaXN0cm8uCisKKzUuIFF1ZXJ5aW5nIEJvbmRpbmcgQ29uZmlndXJhdGlvbiAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis1LjEgQm9uZGluZyBDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlFYWNoIGJvbmRpbmcgZGV2aWNlIGhhcyBhIHJlYWQtb25seSBmaWxlIHJlc2lkaW5nIGluIHRoZQorL3Byb2MvbmV0L2JvbmRpbmcgZGlyZWN0b3J5LiAgVGhlIGZpbGUgY29udGVudHMgaW5jbHVkZSBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGJvbmRpbmcgY29uZmlndXJhdGlvbiwgb3B0aW9ucyBhbmQgc3RhdGUgb2YgZWFjaCBzbGF2ZS4KKworCUZvciBleGFtcGxlLCB0aGUgY29udGVudHMgb2YgL3Byb2MvbmV0L2JvbmRpbmcvYm9uZDAgYWZ0ZXIgdGhlCitkcml2ZXIgaXMgbG9hZGVkIHdpdGggcGFyYW1ldGVycyBvZiBtb2RlPTAgYW5kIG1paW1vbj0xMDAwIGlzCitnZW5lcmFsbHkgYXMgZm9sbG93czoKKworCUV0aGVybmV0IENoYW5uZWwgQm9uZGluZyBEcml2ZXI6IDIuNi4xIChPY3RvYmVyIDI5LCAyMDA0KQorICAgICAgICBCb25kaW5nIE1vZGU6IGxvYWQgYmFsYW5jaW5nIChyb3VuZC1yb2JpbikKKyAgICAgICAgQ3VycmVudGx5IEFjdGl2ZSBTbGF2ZTogZXRoMAorICAgICAgICBNSUkgU3RhdHVzOiB1cAorICAgICAgICBNSUkgUG9sbGluZyBJbnRlcnZhbCAobXMpOiAxMDAwCisgICAgICAgIFVwIERlbGF5IChtcyk6IDAKKyAgICAgICAgRG93biBEZWxheSAobXMpOiAwCisKKyAgICAgICAgU2xhdmUgSW50ZXJmYWNlOiBldGgxCisgICAgICAgIE1JSSBTdGF0dXM6IHVwCisgICAgICAgIExpbmsgRmFpbHVyZSBDb3VudDogMQorCisgICAgICAgIFNsYXZlIEludGVyZmFjZTogZXRoMAorICAgICAgICBNSUkgU3RhdHVzOiB1cAorICAgICAgICBMaW5rIEZhaWx1cmUgQ291bnQ6IDEKKworCVRoZSBwcmVjaXNlIGZvcm1hdCBhbmQgY29udGVudHMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIHVwb24gdGhlCitib25kaW5nIGNvbmZpZ3VyYXRpb24sIHN0YXRlLCBhbmQgdmVyc2lvbiBvZiB0aGUgYm9uZGluZyBkcml2ZXIuCisKKzUuMiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGluc3BlY3RlZCB1c2luZyB0aGUgaWZjb25maWcKK2NvbW1hbmQuICBCb25kaW5nIGRldmljZXMgd2lsbCBoYXZlIHRoZSBNQVNURVIgZmxhZyBzZXQ7IEJvbmRpbmcgc2xhdmUKK2RldmljZXMgd2lsbCBoYXZlIHRoZSBTTEFWRSBmbGFnIHNldC4gIFRoZSBpZmNvbmZpZyBvdXRwdXQgZG9lcyBub3QKK2NvbnRhaW4gaW5mb3JtYXRpb24gb24gd2hpY2ggc2xhdmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggd2hpY2ggbWFzdGVycy4KKworCUluIHRoZSBleGFtcGxlIGJlbG93LCB0aGUgYm9uZDAgaW50ZXJmYWNlIGlzIHRoZSBtYXN0ZXIKKyhNQVNURVIpIHdoaWxlIGV0aDAgYW5kIGV0aDEgYXJlIHNsYXZlcyAoU0xBVkUpLiBOb3RpY2UgYWxsIHNsYXZlcyBvZgorYm9uZDAgaGF2ZSB0aGUgc2FtZSBNQUMgYWRkcmVzcyAoSFdhZGRyKSBhcyBib25kMCBmb3IgYWxsIG1vZGVzIGV4Y2VwdAorVExCIGFuZCBBTEIgdGhhdCByZXF1aXJlIGEgdW5pcXVlIE1BQyBhZGRyZXNzIGZvciBlYWNoIHNsYXZlLgorCisjIC9zYmluL2lmY29uZmlnCitib25kMCAgICAgTGluayBlbmNhcDpFdGhlcm5ldCAgSFdhZGRyIDAwOkMwOkYwOjFGOjM3OkI0CisgICAgICAgICAgaW5ldCBhZGRyOlhYWC5YWFguWFhYLllZWSAgQmNhc3Q6WFhYLlhYWC5YWFguMjU1ICBNYXNrOjI1NS4yNTUuMjUyLjAKKyAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBNQVNURVIgTVVMVElDQVNUICBNVFU6MTUwMCAgTWV0cmljOjEKKyAgICAgICAgICBSWCBwYWNrZXRzOjcyMjQ3OTQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6MzI4NjY0NyBlcnJvcnM6MSBkcm9wcGVkOjAgb3ZlcnJ1bnM6MSBjYXJyaWVyOjAKKyAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjowCisKK2V0aDAgICAgICBMaW5rIGVuY2FwOkV0aGVybmV0ICBIV2FkZHIgMDA6QzA6RjA6MUY6Mzc6QjQKKyAgICAgICAgICBpbmV0IGFkZHI6WFhYLlhYWC5YWFguWVlZICBCY2FzdDpYWFguWFhYLlhYWC4yNTUgIE1hc2s6MjU1LjI1NS4yNTIuMAorICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIFNMQVZFIE1VTFRJQ0FTVCAgTVRVOjE1MDAgIE1ldHJpYzoxCisgICAgICAgICAgUlggcGFja2V0czozNTczMDI1IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKKyAgICAgICAgICBUWCBwYWNrZXRzOjE2NDMxNjcgZXJyb3JzOjEgZHJvcHBlZDowIG92ZXJydW5zOjEgY2FycmllcjowCisgICAgICAgICAgY29sbGlzaW9uczowIHR4cXVldWVsZW46MTAwCisgICAgICAgICAgSW50ZXJydXB0OjEwIEJhc2UgYWRkcmVzczoweDEwODAKKworZXRoMSAgICAgIExpbmsgZW5jYXA6RXRoZXJuZXQgIEhXYWRkciAwMDpDMDpGMDoxRjozNzpCNAorICAgICAgICAgIGluZXQgYWRkcjpYWFguWFhYLlhYWC5ZWVkgIEJjYXN0OlhYWC5YWFguWFhYLjI1NSAgTWFzazoyNTUuMjU1LjI1Mi4wCisgICAgICAgICAgVVAgQlJPQURDQVNUIFJVTk5JTkcgU0xBVkUgTVVMVElDQVNUICBNVFU6MTUwMCAgTWV0cmljOjEKKyAgICAgICAgICBSWCBwYWNrZXRzOjM2NTE3NjkgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6MTY0MzQ4MCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKKyAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjoxMDAKKyAgICAgICAgICBJbnRlcnJ1cHQ6OSBCYXNlIGFkZHJlc3M6MHgxNDAwCisKKzYuIFN3aXRjaCBDb25maWd1cmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorCisJRm9yIHRoaXMgc2VjdGlvbiwgInN3aXRjaCIgcmVmZXJzIHRvIHdoYXRldmVyIHN5c3RlbSB0aGUKK2JvbmRlZCBkZXZpY2VzIGFyZSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gKGkuZS4sIHdoZXJlIHRoZSBvdGhlciBlbmQgb2YKK3RoZSBjYWJsZSBwbHVncyBpbnRvKS4gIFRoaXMgbWF5IGJlIGFuIGFjdHVhbCBkZWRpY2F0ZWQgc3dpdGNoIGRldmljZSwKK29yIGl0IG1heSBiZSBhbm90aGVyIHJlZ3VsYXIgc3lzdGVtIChlLmcuLCBhbm90aGVyIGNvbXB1dGVyIHJ1bm5pbmcKK0xpbnV4KSwKKworCVRoZSBhY3RpdmUtYmFja3VwLCBiYWxhbmNlLXRsYiBhbmQgYmFsYW5jZS1hbGIgbW9kZXMgZG8gbm90CityZXF1aXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBzd2l0Y2guCisKKwlUaGUgODAyLjNhZCBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIHN3aXRjaCBoYXZlIHRoZSBhcHByb3ByaWF0ZQorcG9ydHMgY29uZmlndXJlZCBhcyBhbiA4MDIuM2FkIGFnZ3JlZ2F0aW9uLiAgVGhlIHByZWNpc2UgbWV0aG9kIHVzZWQKK3RvIGNvbmZpZ3VyZSB0aGlzIHZhcmllcyBmcm9tIHN3aXRjaCB0byBzd2l0Y2gsIGJ1dCwgZm9yIGV4YW1wbGUsIGEKK0Npc2NvIDM1NTAgc2VyaWVzIHN3aXRjaCByZXF1aXJlcyB0aGF0IHRoZSBhcHByb3ByaWF0ZSBwb3J0cyBmaXJzdCBiZQorZ3JvdXBlZCB0b2dldGhlciBpbiBhIHNpbmdsZSBldGhlcmNoYW5uZWwgaW5zdGFuY2UsIHRoZW4gdGhhdAorZXRoZXJjaGFubmVsIGlzIHNldCB0byBtb2RlICJsYWNwIiB0byBlbmFibGUgODAyLjNhZCAoaW5zdGVhZCBvZgorc3RhbmRhcmQgRXRoZXJDaGFubmVsKS4KKworCVRoZSBiYWxhbmNlLXJyLCBiYWxhbmNlLXhvciBhbmQgYnJvYWRjYXN0IG1vZGVzIGdlbmVyYWxseQorcmVxdWlyZSB0aGF0IHRoZSBzd2l0Y2ggaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcG9ydHMgZ3JvdXBlZCB0b2dldGhlci4KK1RoZSBub21lbmNsYXR1cmUgZm9yIHN1Y2ggYSBncm91cCBkaWZmZXJzIGJldHdlZW4gc3dpdGNoZXMsIGl0IG1heSBiZQorY2FsbGVkIGFuICJldGhlcmNoYW5uZWwiIChhcyBpbiB0aGUgQ2lzY28gZXhhbXBsZSwgYWJvdmUpLCBhICJ0cnVuaworZ3JvdXAiIG9yIHNvbWUgb3RoZXIgc2ltaWxhciB2YXJpYXRpb24uICBGb3IgdGhlc2UgbW9kZXMsIGVhY2ggc3dpdGNoCit3aWxsIGFsc28gaGF2ZSBpdHMgb3duIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHN3aXRjaCdzIHRyYW5zbWl0Citwb2xpY3kgdG8gdGhlIGJvbmQuICBUeXBpY2FsIGNob2ljZXMgaW5jbHVkZSBYT1Igb2YgZWl0aGVyIHRoZSBNQUMgb3IKK0lQIGFkZHJlc3Nlcy4gIFRoZSB0cmFuc21pdCBwb2xpY3kgb2YgdGhlIHR3byBwZWVycyBkb2VzIG5vdCBuZWVkIHRvCittYXRjaC4gIEZvciB0aGVzZSB0aHJlZSBtb2RlcywgdGhlIGJvbmRpbmcgbW9kZSByZWFsbHkgc2VsZWN0cyBhCit0cmFuc21pdCBwb2xpY3kgZm9yIGFuIEV0aGVyQ2hhbm5lbCBncm91cDsgYWxsIHRocmVlIHdpbGwgaW50ZXJvcGVyYXRlCit3aXRoIGFub3RoZXIgRXRoZXJDaGFubmVsIGdyb3VwLgorCisKKzcuIDgwMi4xcSBWTEFOIFN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT0KKworCUl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBWTEFOIGRldmljZXMgb3ZlciBhIGJvbmQgaW50ZXJmYWNlCit1c2luZyB0aGUgODAyMXEgZHJpdmVyLiAgSG93ZXZlciwgb25seSBwYWNrZXRzIGNvbWluZyBmcm9tIHRoZSA4MDIxcQorZHJpdmVyIGFuZCBwYXNzaW5nIHRocm91Z2ggYm9uZGluZyB3aWxsIGJlIHRhZ2dlZCBieSBkZWZhdWx0LiAgU2VsZgorZ2VuZXJhdGVkIHBhY2tldHMsIGZvciBleGFtcGxlLCBib25kaW5nJ3MgbGVhcm5pbmcgcGFja2V0cyBvciBBUlAKK3BhY2tldHMgZ2VuZXJhdGVkIGJ5IGVpdGhlciBBTEIgbW9kZSBvciB0aGUgQVJQIG1vbml0b3IgbWVjaGFuaXNtLCBhcmUKK3RhZ2dlZCBpbnRlcm5hbGx5IGJ5IGJvbmRpbmcgaXRzZWxmLiAgQXMgYSByZXN1bHQsIGJvbmRpbmcgbXVzdAorImxlYXJuIiB0aGUgVkxBTiBJRHMgY29uZmlndXJlZCBhYm92ZSBpdCwgYW5kIHVzZSB0aG9zZSBJRHMgdG8gdGFnCitzZWxmIGdlbmVyYXRlZCBwYWNrZXRzLgorCisJRm9yIHJlYXNvbnMgb2Ygc2ltcGxpY2l0eSwgYW5kIHRvIHN1cHBvcnQgdGhlIHVzZSBvZiBhZGFwdGVycwordGhhdCBjYW4gZG8gVkxBTiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb2ZmbG9kaW5nLCB0aGUgYm9uZGluZworaW50ZXJmYWNlIGRlY2xhcmVzIGl0c2VsZiBhcyBmdWxseSBoYXJkd2FyZSBvZmZsb2FpbmcgY2FwYWJsZSwgaXQgZ2V0cwordGhlIGFkZF92aWQva2lsbF92aWQgbm90aWZpY2F0aW9ucyB0byBnYXRoZXIgdGhlIG5lY2Vzc2FyeQoraW5mb3JtYXRpb24sIGFuZCBpdCBwcm9wYWdhdGVzIHRob3NlIGFjdGlvbnMgdG8gdGhlIHNsYXZlcy4gIEluIGNhc2UKK29mIG1peGVkIGFkYXB0ZXIgdHlwZXMsIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRhZ2dlZCBwYWNrZXRzIHRoYXQKK3Nob3VsZCBnbyB0aHJvdWdoIGFuIGFkYXB0ZXIgdGhhdCBpcyBub3Qgb2ZmbG9hZGluZyBjYXBhYmxlIGFyZQorInVuLWFjY2VsZXJhdGVkIiBieSB0aGUgYm9uZGluZyBkcml2ZXIgc28gdGhlIFZMQU4gdGFnIHNpdHMgaW4gdGhlCityZWd1bGFyIGxvY2F0aW9uLgorCisJVkxBTiBpbnRlcmZhY2VzICptdXN0KiBiZSBhZGRlZCBvbiB0b3Agb2YgYSBib25kaW5nIGludGVyZmFjZQorb25seSBhZnRlciBlbnNsYXZpbmcgYXQgbGVhc3Qgb25lIHNsYXZlLiAgVGhlIGJvbmRpbmcgaW50ZXJmYWNlIGhhcyBhCitoYXJkd2FyZSBhZGRyZXNzIG9mIDAwOjAwOjAwOjAwOjAwOjAwIHVudGlsIHRoZSBmaXJzdCBzbGF2ZSBpcyBhZGRlZC4KK0lmIHRoZSBWTEFOIGludGVyZmFjZSBpcyBjcmVhdGVkIHByaW9yIHRvIHRoZSBmaXJzdCBlbnNsYXZlbWVudCwgaXQKK3dvdWxkIHBpY2sgdXAgdGhlIGFsbC16ZXJvZXMgaGFyZHdhcmUgYWRkcmVzcy4gIE9uY2UgdGhlIGZpcnN0IHNsYXZlCitpcyBhdHRhY2hlZCB0byB0aGUgYm9uZCwgdGhlIGJvbmQgZGV2aWNlIGl0c2VsZiB3aWxsIHBpY2sgdXAgdGhlCitzbGF2ZSdzIGhhcmR3YXJlIGFkZHJlc3MsIHdoaWNoIGlzIHRoZW4gYXZhaWxhYmxlIGZvciB0aGUgVkxBTiBkZXZpY2UuCisKKwlBbHNvLCBiZSBhd2FyZSB0aGF0IGEgc2ltaWxhciBwcm9ibGVtIGNhbiBvY2N1ciBpZiBhbGwgc2xhdmVzCithcmUgcmVsZWFzZWQgZnJvbSBhIGJvbmQgdGhhdCBzdGlsbCBoYXMgb25lIG9yIG1vcmUgVkxBTiBpbnRlcmZhY2VzIG9uCit0b3Agb2YgaXQuICBXaGVuIGEgbmV3IHNsYXZlIGlzIGFkZGVkLCB0aGUgYm9uZGluZyBpbnRlcmZhY2Ugd2lsbAorb2J0YWluIGl0cyBoYXJkd2FyZSBhZGRyZXNzIGZyb20gdGhlIGZpcnN0IHNsYXZlLCB3aGljaCBtaWdodCBub3QKK21hdGNoIHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9mIHRoZSBWTEFOIGludGVyZmFjZXMgKHdoaWNoIHdhcwordWx0aW1hdGVseSBjb3BpZWQgZnJvbSBhbiBlYXJsaWVyIHNsYXZlKS4KKworCVRoZXJlIGFyZSB0d28gbWV0aG9kcyB0byBpbnN1cmUgdGhhdCB0aGUgVkxBTiBkZXZpY2Ugb3BlcmF0ZXMKK3dpdGggdGhlIGNvcnJlY3QgaGFyZHdhcmUgYWRkcmVzcyBpZiBhbGwgc2xhdmVzIGFyZSByZW1vdmVkIGZyb20gYQorYm9uZCBpbnRlcmZhY2U6CisKKwkxLiBSZW1vdmUgYWxsIFZMQU4gaW50ZXJmYWNlcyB0aGVuIHJlY3JlYXRlIHRoZW0KKworCTIuIFNldCB0aGUgYm9uZGluZyBpbnRlcmZhY2UncyBoYXJkd2FyZSBhZGRyZXNzIHNvIHRoYXQgaXQKK21hdGNoZXMgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb2YgdGhlIFZMQU4gaW50ZXJmYWNlcy4KKworCU5vdGUgdGhhdCBjaGFuZ2luZyBhIFZMQU4gaW50ZXJmYWNlJ3MgSFcgYWRkcmVzcyB3b3VsZCBzZXQgdGhlCit1bmRlcmx5aW5nIGRldmljZSAtLSBpLmUuIHRoZSBib25kaW5nIGludGVyZmFjZSAtLSB0byBwcm9taXNjb3VvcworbW9kZSwgd2hpY2ggbWlnaHQgbm90IGJlIHdoYXQgeW91IHdhbnQuCisKKworOC4gTGluayBNb25pdG9yaW5nCis9PT09PT09PT09PT09PT09PT0KKworCVRoZSBib25kaW5nIGRyaXZlciBhdCBwcmVzZW50IHN1cHBvcnRzIHR3byBzY2hlbWVzIGZvcgorbW9uaXRvcmluZyBhIHNsYXZlIGRldmljZSdzIGxpbmsgc3RhdGU6IHRoZSBBUlAgbW9uaXRvciBhbmQgdGhlIE1JSQorbW9uaXRvci4KKworCUF0IHRoZSBwcmVzZW50IHRpbWUsIGR1ZSB0byBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbnMgaW4gdGhlCitib25kaW5nIGRyaXZlciBpdHNlbGYsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBlbmFibGUgYm90aCBBUlAgYW5kIE1JSQorbW9uaXRvcmluZyBzaW11bHRhbmVvdXNseS4KKworOC4xIEFSUCBNb25pdG9yIE9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIEFSUCBtb25pdG9yIG9wZXJhdGVzIGFzIGl0cyBuYW1lIHN1Z2dlc3RzOiBpdCBzZW5kcyBBUlAKK3F1ZXJpZXMgdG8gb25lIG9yIG1vcmUgZGVzaWduYXRlZCBwZWVyIHN5c3RlbXMgb24gdGhlIG5ldHdvcmssIGFuZAordXNlcyB0aGUgcmVzcG9uc2UgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBsaW5rIGlzIG9wZXJhdGluZy4gIFRoaXMKK2dpdmVzIHNvbWUgYXNzdXJhbmNlIHRoYXQgdHJhZmZpYyBpcyBhY3R1YWxseSBmbG93aW5nIHRvIGFuZCBmcm9tIG9uZQorb3IgbW9yZSBwZWVycyBvbiB0aGUgbG9jYWwgbmV0d29yay4KKworCVRoZSBBUlAgbW9uaXRvciByZWxpZXMgb24gdGhlIGRldmljZSBkcml2ZXIgaXRzZWxmIHRvIHZlcmlmeQordGhhdCB0cmFmZmljIGlzIGZsb3dpbmcuICBJbiBwYXJ0aWN1bGFyLCB0aGUgZHJpdmVyIG11c3Qga2VlcCB1cCB0bworZGF0ZSB0aGUgbGFzdCByZWNlaXZlIHRpbWUsIGRldi0+bGFzdF9yeCwgYW5kIHRyYW5zbWl0IHN0YXJ0IHRpbWUsCitkZXYtPnRyYW5zX3N0YXJ0LiAgSWYgdGhlc2UgYXJlIG5vdCB1cGRhdGVkIGJ5IHRoZSBkcml2ZXIsIHRoZW4gdGhlCitBUlAgbW9uaXRvciB3aWxsIGltbWVkaWF0ZWx5IGZhaWwgYW55IHNsYXZlcyB1c2luZyB0aGF0IGRyaXZlciwgYW5kCit0aG9zZSBzbGF2ZXMgd2lsbCBzdGF5IGRvd24uICBJZiBuZXR3b3JraW5nIG1vbml0b3JpbmcgKHRjcGR1bXAsIGV0YykKK3Nob3dzIHRoZSBBUlAgcmVxdWVzdHMgYW5kIHJlcGxpZXMgb24gdGhlIG5ldHdvcmssIHRoZW4gaXQgbWF5IGJlIHRoYXQKK3lvdXIgZGV2aWNlIGRyaXZlciBpcyBub3QgdXBkYXRpbmcgbGFzdF9yeCBhbmQgdHJhbnNfc3RhcnQuCisKKzguMiBDb25maWd1cmluZyBNdWx0aXBsZSBBUlAgVGFyZ2V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlXaGlsZSBBUlAgbW9uaXRvcmluZyBjYW4gYmUgZG9uZSB3aXRoIGp1c3Qgb25lIHRhcmdldCwgaXQgY2FuCitiZSB1c2VmdWwgaW4gYSBIaWdoIEF2YWlsYWJpbGl0eSBzZXR1cCB0byBoYXZlIHNldmVyYWwgdGFyZ2V0cyB0bworbW9uaXRvci4gIEluIHRoZSBjYXNlIG9mIGp1c3Qgb25lIHRhcmdldCwgdGhlIHRhcmdldCBpdHNlbGYgbWF5IGdvCitkb3duIG9yIGhhdmUgYSBwcm9ibGVtIG1ha2luZyBpdCB1bnJlc3BvbnNpdmUgdG8gQVJQIHJlcXVlc3RzLiAgSGF2aW5nCithbiBhZGRpdGlvbmFsIHRhcmdldCAob3Igc2V2ZXJhbCkgaW5jcmVhc2VzIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgQVJQCittb25pdG9yaW5nLgorCisJTXVsdGlwbGUgQVJQIHRhcmdldHMgbXVzdCBiZSBzZXBlcmF0ZWQgYnkgY29tbWFzIGFzIGZvbGxvd3M6CisKKyMgZXhhbXBsZSBvcHRpb25zIGZvciBBUlAgbW9uaXRvcmluZyB3aXRoIHRocmVlIHRhcmdldHMKK2FsaWFzIGJvbmQwIGJvbmRpbmcKK29wdGlvbnMgYm9uZDAgYXJwX2ludGVydmFsPTYwIGFycF9pcF90YXJnZXQ9MTkyLjE2OC4wLjEsMTkyLjE2OC4wLjMsMTkyLjE2OC4wLjkKKworCUZvciBqdXN0IGEgc2luZ2xlIHRhcmdldCB0aGUgb3B0aW9ucyB3b3VsZCByZXNlbWJsZToKKworIyBleGFtcGxlIG9wdGlvbnMgZm9yIEFSUCBtb25pdG9yaW5nIHdpdGggb25lIHRhcmdldAorYWxpYXMgYm9uZDAgYm9uZGluZworb3B0aW9ucyBib25kMCBhcnBfaW50ZXJ2YWw9NjAgYXJwX2lwX3RhcmdldD0xOTIuMTY4LjAuMTAwCisKKworOC4zIE1JSSBNb25pdG9yIE9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIE1JSSBtb25pdG9yIG1vbml0b3JzIG9ubHkgdGhlIGNhcnJpZXIgc3RhdGUgb2YgdGhlIGxvY2FsCituZXR3b3JrIGludGVyZmFjZS4gIEl0IGFjY29tcGxpc2hlcyB0aGlzIGluIG9uZSBvZiB0aHJlZSB3YXlzOiBieQorZGVwZW5kaW5nIHVwb24gdGhlIGRldmljZSBkcml2ZXIgdG8gbWFpbnRhaW4gaXRzIGNhcnJpZXIgc3RhdGUsIGJ5CitxdWVyeWluZyB0aGUgZGV2aWNlJ3MgTUlJIHJlZ2lzdGVycywgb3IgYnkgbWFraW5nIGFuIGV0aHRvb2wgcXVlcnkgdG8KK3RoZSBkZXZpY2UuCisKKwlJZiB0aGUgdXNlX2NhcnJpZXIgbW9kdWxlIHBhcmFtZXRlciBpcyAxICh0aGUgZGVmYXVsdCB2YWx1ZSksCit0aGVuIHRoZSBNSUkgbW9uaXRvciB3aWxsIHJlbHkgb24gdGhlIGRyaXZlciBmb3IgY2FycmllciBzdGF0ZQoraW5mb3JtYXRpb24gKHZpYSB0aGUgbmV0aWZfY2FycmllciBzdWJzeXN0ZW0pLiAgQXMgZXhwbGFpbmVkIGluIHRoZQordXNlX2NhcnJpZXIgcGFyYW1ldGVyIGluZm9ybWF0aW9uLCBhYm92ZSwgaWYgdGhlIE1JSSBtb25pdG9yIGZhaWxzIHRvCitkZXRlY3QgY2FycmllciBsb3NzIG9uIHRoZSBkZXZpY2UgKGUuZy4sIHdoZW4gdGhlIGNhYmxlIGlzIHBoeXNpY2FsbHkKK2Rpc2Nvbm5lY3RlZCksIGl0IG1heSBiZSB0aGF0IHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydAorbmV0aWZfY2Fycmllci4KKworCUlmIHVzZV9jYXJyaWVyIGlzIDAsIHRoZW4gdGhlIE1JSSBtb25pdG9yIHdpbGwgZmlyc3QgcXVlcnkgdGhlCitkZXZpY2UncyAodmlhIGlvY3RsKSBNSUkgcmVnaXN0ZXJzIGFuZCBjaGVjayB0aGUgbGluayBzdGF0ZS4gIElmIHRoYXQKK3JlcXVlc3QgZmFpbHMgKG5vdCBqdXN0IHRoYXQgaXQgcmV0dXJucyBjYXJyaWVyIGRvd24pLCB0aGVuIHRoZSBNSUkKK21vbml0b3Igd2lsbCBtYWtlIGFuIGV0aHRvb2wgRVRIT09MX0dMSU5LIHJlcXVlc3QgdG8gYXR0ZW1wdCB0byBvYnRhaW4KK3RoZSBzYW1lIGluZm9ybWF0aW9uLiAgSWYgYm90aCBtZXRob2RzIGZhaWwgKGkuZS4sIHRoZSBkcml2ZXIgZWl0aGVyCitkb2VzIG5vdCBzdXBwb3J0IG9yIGhhZCBzb21lIGVycm9yIGluIHByb2Nlc3NpbmcgYm90aCB0aGUgTUlJIHJlZ2lzdGVyCithbmQgZXRodG9vbCByZXF1ZXN0cyksIHRoZW4gdGhlIE1JSSBtb25pdG9yIHdpbGwgYXNzdW1lIHRoZSBsaW5rIGlzCit1cC4KKworOS4gUG90ZW50aWFsIFNvdXJjZXMgb2YgVHJvdWJsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis5LjEgQWR2ZW50dXJlcyBpbiBSb3V0aW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlXaGVuIGJvbmRpbmcgaXMgY29uZmlndXJlZCwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIHNsYXZlCitkZXZpY2VzIG5vdCBoYXZlIHJvdXRlcyB0aGF0IHN1cGVyY2VkZSByb3V0ZXMgb2YgdGhlIG1hc3RlciAob3IsCitnZW5lcmFsbHksIG5vdCBoYXZlIHJvdXRlcyBhdCBhbGwpLiAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlIGJvbmRpbmcKK2RldmljZSBib25kMCBoYXMgdHdvIHNsYXZlcywgZXRoMCBhbmQgZXRoMSwgYW5kIHRoZSByb3V0aW5nIHRhYmxlIGlzCithcyBmb2xsb3dzOgorCitLZXJuZWwgSVAgcm91dGluZyB0YWJsZQorRGVzdGluYXRpb24gICAgIEdhdGV3YXkgICAgICAgICBHZW5tYXNrICAgICAgICAgRmxhZ3MgICBNU1MgV2luZG93ICBpcnR0IElmYWNlCisxMC4wLjAuMCAgICAgICAgMC4wLjAuMCAgICAgICAgIDI1NS4yNTUuMC4wICAgICBVICAgICAgICA0MCAwICAgICAgICAgIDAgZXRoMAorMTAuMC4wLjAgICAgICAgIDAuMC4wLjAgICAgICAgICAyNTUuMjU1LjAuMCAgICAgVSAgICAgICAgNDAgMCAgICAgICAgICAwIGV0aDEKKzEwLjAuMC4wICAgICAgICAwLjAuMC4wICAgICAgICAgMjU1LjI1NS4wLjAgICAgIFUgICAgICAgIDQwIDAgICAgICAgICAgMCBib25kMAorMTI3LjAuMC4wICAgICAgIDAuMC4wLjAgICAgICAgICAyNTUuMC4wLjAgICAgICAgVSAgICAgICAgNDAgMCAgICAgICAgICAwIGxvCisKKwlUaGlzIHJvdXRpbmcgY29uZmlndXJhdGlvbiB3aWxsIGxpa2VseSBzdGlsbCB1cGRhdGUgdGhlCityZWNlaXZlL3RyYW5zbWl0IHRpbWVzIGluIHRoZSBkcml2ZXIgKG5lZWRlZCBieSB0aGUgQVJQIG1vbml0b3IpLCBidXQKK21heSBieXBhc3MgdGhlIGJvbmRpbmcgZHJpdmVyIChiZWNhdXNlIG91dGdvaW5nIHRyYWZmaWMgdG8sIGluIHRoaXMKK2Nhc2UsIGFub3RoZXIgaG9zdCBvbiBuZXR3b3JrIDEwIHdvdWxkIHVzZSBldGgwIG9yIGV0aDEgYmVmb3JlIGJvbmQwKS4KKworCVRoZSBBUlAgbW9uaXRvciAoYW5kIEFSUCBpdHNlbGYpIG1heSBiZWNvbWUgY29uZnVzZWQgYnkgdGhpcworY29uZmlndXJhdGlvbiwgYmVjYXVzZSBBUlAgcmVxdWVzdHMgKGdlbmVyYXRlZCBieSB0aGUgQVJQIG1vbml0b3IpCit3aWxsIGJlIHNlbnQgb24gb25lIGludGVyZmFjZSAoYm9uZDApLCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgcmVwbHkKK3dpbGwgYXJyaXZlIG9uIGEgZGlmZmVyZW50IGludGVyZmFjZSAoZXRoMCkuICBUaGlzIHJlcGx5IGxvb2tzIHRvIEFSUAorYXMgYW4gdW5zb2xpY2l0ZWQgQVJQIHJlcGx5IChiZWNhdXNlIEFSUCBtYXRjaGVzIHJlcGxpZXMgb24gYW4KK2ludGVyZmFjZSBiYXNpcyksIGFuZCBpcyBkaXNjYXJkZWQuICBUaGUgTUlJIG1vbml0b3IgaXMgbm90IGFmZmVjdGVkCitieSB0aGUgc3RhdGUgb2YgdGhlIHJvdXRpbmcgdGFibGUuCisKKwlUaGUgc29sdXRpb24gaGVyZSBpcyBzaW1wbHkgdG8gaW5zdXJlIHRoYXQgc2xhdmVzIGRvIG5vdCBoYXZlCityb3V0ZXMgb2YgdGhlaXIgb3duLCBhbmQgaWYgZm9yIHNvbWUgcmVhc29uIHRoZXkgbXVzdCwgdGhvc2Ugcm91dGVzIGRvCitub3Qgc3VwZXJjZWRlIHJvdXRlcyBvZiB0aGVpciBtYXN0ZXIuICBUaGlzIHNob3VsZCBnZW5lcmFsbHkgYmUgdGhlCitjYXNlLCBidXQgdW51c3VhbCBjb25maWd1cmF0aW9ucyBvciBlcnJhbnQgbWFudWFsIG9yIGF1dG9tYXRpYyBzdGF0aWMKK3JvdXRlIGFkZGl0aW9ucyBtYXkgY2F1c2UgdHJvdWJsZS4KKworOS4yIEV0aGVybmV0IERldmljZSBSZW5hbWluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJT24gc3lzdGVtcyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgZG8gbm90Cithc3NvY2lhdGUgcGh5c2ljYWwgZGV2aWNlcyBkaXJlY3RseSB3aXRoIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWVzIChzbwordGhhdCB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UgYWx3YXlzIGhhcyB0aGUgc2FtZSAiZXRoWCIgbmFtZSksIGl0IG1heQorYmUgbmVjZXNzYXJ5IHRvIGFkZCBzb21lIHNwZWNpYWwgbG9naWMgdG8gZWl0aGVyIC9ldGMvbW9kdWxlcy5jb25mIG9yCisvZXRjL21vZHByb2JlLmNvbmYgKGRlcGVuZGluZyB1cG9uIHdoaWNoIGlzIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtKS4KKworCUZvciBleGFtcGxlLCBnaXZlbiBhIG1vZHVsZXMuY29uZiBjb250YWluaW5nIHRoZSBmb2xsb3dpbmc6CisKK2FsaWFzIGJvbmQwIGJvbmRpbmcKK29wdGlvbnMgYm9uZDAgbW9kZT1zb21lLW1vZGUgbWlpbW9uPTUwCithbGlhcyBldGgwIHRnMworYWxpYXMgZXRoMSB0ZzMKK2FsaWFzIGV0aDIgZTEwMDAKK2FsaWFzIGV0aDMgZTEwMDAKKworCUlmIG5laXRoZXIgZXRoMCBhbmQgZXRoMSBhcmUgc2xhdmVzIHRvIGJvbmQwLCB0aGVuIHdoZW4gdGhlCitib25kMCBpbnRlcmZhY2UgY29tZXMgdXAsIHRoZSBkZXZpY2VzIG1heSBlbmQgdXAgcmVvcmRlcmVkLiAgVGhpcworaGFwcGVucyBiZWNhdXNlIGJvbmRpbmcgaXMgbG9hZGVkIGZpcnN0LCB0aGVuIGl0cyBzbGF2ZSBkZXZpY2UncworZHJpdmVycyBhcmUgbG9hZGVkIG5leHQuICBTaW5jZSBubyBvdGhlciBkcml2ZXJzIGhhdmUgYmVlbiBsb2FkZWQsCit3aGVuIHRoZSBlMTAwMCBkcml2ZXIgbG9hZHMsIGl0IHdpbGwgcmVjZWl2ZSBldGgwIGFuZCBldGgxIGZvciBpdHMKK2RldmljZXMsIGJ1dCB0aGUgYm9uZGluZyBjb25maWd1cmF0aW9uIHRyaWVzIHRvIGVuc2xhdmUgZXRoMiBhbmQgZXRoMworKHdoaWNoIG1heSBsYXRlciBiZSBhc3NpZ25lZCB0byB0aGUgdGczIGRldmljZXMpLgorCisJQWRkaW5nIHRoZSBmb2xsb3dpbmc6CisKK2FkZCBhYm92ZSBib25kaW5nIGUxMDAwIHRnMworCisJY2F1c2VzIG1vZHByb2JlIHRvIGxvYWQgZTEwMDAgdGhlbiB0ZzMsIGluIHRoYXQgb3JkZXIsIHdoZW4KK2JvbmRpbmcgaXMgbG9hZGVkLiAgVGhpcyBjb21tYW5kIGlzIGZ1bGx5IGRvY3VtZW50ZWQgaW4gdGhlCittb2R1bGVzLmNvbmYgbWFudWFsIHBhZ2UuCisKKwlPbiBzeXN0ZW1zIHV0aWxpemluZyBtb2Rwcm9iZS5jb25mIChvciBtb2Rwcm9iZS5jb25mLmxvY2FsKSwKK2FuIGVxdWl2YWxlbnQgcHJvYmxlbSBjYW4gb2NjdXIuICBJbiB0aGlzIGNhc2UsIHRoZSBmb2xsb3dpbmcgY2FuIGJlCithZGRlZCB0byBtb2Rwcm9iZS5jb25mIChvciBtb2Rwcm9iZS5jb25mLmxvY2FsLCBhcyBhcHByb3ByaWF0ZSksIGFzCitmb2xsb3dzIChhbGwgb24gb25lIGxpbmU7IGl0IGhhcyBiZWVuIHNwbGl0IGhlcmUgZm9yIGNsYXJpdHkpOgorCitpbnN0YWxsIGJvbmRpbmcgL3NiaW4vbW9kcHJvYmUgdGczOyAvc2Jpbi9tb2Rwcm9iZSBlMTAwMDsKKwkvc2Jpbi9tb2Rwcm9iZSAtLWlnbm9yZS1pbnN0YWxsIGJvbmRpbmcKKworCVRoaXMgd2lsbCwgd2hlbiBsb2FkaW5nIHRoZSBib25kaW5nIG1vZHVsZSwgcmF0aGVyIHRoYW4KK3BlcmZvcm1pbmcgdGhlIG5vcm1hbCBhY3Rpb24sIGluc3RlYWQgZXhlY3V0ZSB0aGUgcHJvdmlkZWQgY29tbWFuZC4KK1RoaXMgY29tbWFuZCBsb2FkcyB0aGUgZGV2aWNlIGRyaXZlcnMgaW4gdGhlIG9yZGVyIG5lZWRlZCwgdGhlbiBjYWxscworbW9kcHJvYmUgd2l0aCAtLWluZ29yZS1pbnN0YWxsIHRvIGNhdXNlIHRoZSBub3JtYWwgYWN0aW9uIHRvIHRoZW4gdGFrZQorcGxhY2UuICBGdWxsIGRvY3VtZW50YXRpb24gb24gdGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIG1vZHByb2JlLmNvbmYKK2FuZCBtb2Rwcm9iZSBtYW51YWwgcGFnZXMuCisKKzkuMy4gUGFpbmZ1bGx5IFNsb3cgT3IgTm8gRmFpbGVkIExpbmsgRGV0ZWN0aW9uIEJ5IE1paW1vbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlCeSBkZWZhdWx0LCBib25kaW5nIGVuYWJsZXMgdGhlIHVzZV9jYXJyaWVyIG9wdGlvbiwgd2hpY2gKK2luc3RydWN0cyBib25kaW5nIHRvIHRydXN0IHRoZSBkcml2ZXIgdG8gbWFpbnRhaW4gY2FycmllciBzdGF0ZS4KKworCUFzIGRpc2N1c3NlZCBpbiB0aGUgb3B0aW9ucyBzZWN0aW9uLCBhYm92ZSwgc29tZSBkcml2ZXJzIGRvCitub3Qgc3VwcG9ydCB0aGUgbmV0aWZfY2Fycmllcl9vbi9fb2ZmIGxpbmsgc3RhdGUgdHJhY2tpbmcgc3lzdGVtLgorV2l0aCB1c2VfY2FycmllciBlbmFibGVkLCBib25kaW5nIHdpbGwgYWx3YXlzIHNlZSB0aGVzZSBsaW5rcyBhcyB1cCwKK3JlZ2FyZGxlc3Mgb2YgdGhlaXIgYWN0dWFsIHN0YXRlLgorCisJQWRkaXRpb25hbGx5LCBvdGhlciBkcml2ZXJzIGRvIHN1cHBvcnQgbmV0aWZfY2FycmllciwgYnV0IGRvCitub3QgbWFpbnRhaW4gaXQgaW4gcmVhbCB0aW1lLCBlLmcuLCBvbmx5IHBvbGxpbmcgdGhlIGxpbmsgc3RhdGUgYXQKK3NvbWUgZml4ZWQgaW50ZXJ2YWwuICBJbiB0aGlzIGNhc2UsIG1paW1vbiB3aWxsIGRldGVjdCBmYWlsdXJlcywgYnV0Citvbmx5IGFmdGVyIHNvbWUgbG9uZyBwZXJpb2Qgb2YgdGltZSBoYXMgZXhwaXJlZC4gIElmIGl0IGFwcGVhcnMgdGhhdAorbWlpbW9uIGlzIHZlcnkgc2xvdyBpbiBkZXRlY3RpbmcgbGluayBmYWlsdXJlcywgdHJ5IHNwZWNpZnlpbmcKK3VzZV9jYXJyaWVyPTAgdG8gc2VlIGlmIHRoYXQgaW1wcm92ZXMgdGhlIGZhaWx1cmUgZGV0ZWN0aW9uIHRpbWUuICBJZgoraXQgZG9lcywgdGhlbiBpdCBtYXkgYmUgdGhhdCB0aGUgZHJpdmVyIGNoZWNrcyB0aGUgY2FycmllciBzdGF0ZSBhdCBhCitmaXhlZCBpbnRlcnZhbCwgYnV0IGRvZXMgbm90IGNhY2hlIHRoZSBNSUkgcmVnaXN0ZXIgdmFsdWVzIChzbyB0aGUKK3VzZV9jYXJyaWVyPTAgbWV0aG9kIG9mIHF1ZXJ5aW5nIHRoZSByZWdpc3RlcnMgZGlyZWN0bHkgd29ya3MpLiAgSWYKK3VzZV9jYXJyaWVyPTAgZG9lcyBub3QgaW1wcm92ZSB0aGUgZmFpbG92ZXIsIHRoZW4gdGhlIGRyaXZlciBtYXkgY2FjaGUKK3RoZSByZWdpc3RlcnMsIG9yIHRoZSBwcm9ibGVtIG1heSBiZSBlbHNld2hlcmUuCisKKwlBbHNvLCByZW1lbWJlciB0aGF0IG1paW1vbiBvbmx5IGNoZWNrcyBmb3IgdGhlIGRldmljZSdzCitjYXJyaWVyIHN0YXRlLiAgSXQgaGFzIG5vIHdheSB0byBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIGRldmljZXMgb24gb3IKK2JleW9uZCBvdGhlciBwb3J0cyBvZiBhIHN3aXRjaCwgb3IgaWYgYSBzd2l0Y2ggaXMgcmVmdXNpbmcgdG8gcGFzcwordHJhZmZpYyB3aGlsZSBzdGlsbCBtYWludGFpbmluZyBjYXJyaWVyIG9uLgorCisxMC4gU05NUCBhZ2VudHMKKz09PT09PT09PT09PT09PQorCisJSWYgcnVubmluZyBTTk1QIGFnZW50cywgdGhlIGJvbmRpbmcgZHJpdmVyIHNob3VsZCBiZSBsb2FkZWQKK2JlZm9yZSBhbnkgbmV0d29yayBkcml2ZXJzIHBhcnRpY2lwYXRpbmcgaW4gYSBib25kLiAgVGhpcyByZXF1aXJlbWVudAoraXMgZHVlIHRvIHRoZSB0aGUgaW50ZXJmYWNlIGluZGV4IChpcEFkRW50SWZJbmRleCkgYmVpbmcgYXNzb2NpYXRlZCB0bwordGhlIGZpcnN0IGludGVyZmFjZSBmb3VuZCB3aXRoIGEgZ2l2ZW4gSVAgYWRkcmVzcy4gIFRoYXQgaXMsIHRoZXJlIGlzCitvbmx5IG9uZSBpcEFkRW50SWZJbmRleCBmb3IgZWFjaCBJUCBhZGRyZXNzLiAgRm9yIGV4YW1wbGUsIGlmIGV0aDAgYW5kCitldGgxIGFyZSBzbGF2ZXMgb2YgYm9uZDAgYW5kIHRoZSBkcml2ZXIgZm9yIGV0aDAgaXMgbG9hZGVkIGJlZm9yZSB0aGUKK2JvbmRpbmcgZHJpdmVyLCB0aGUgaW50ZXJmYWNlIGZvciB0aGUgSVAgYWRkcmVzcyB3aWxsIGJlIGFzc29jaWF0ZWQKK3dpdGggdGhlIGV0aDAgaW50ZXJmYWNlLiAgVGhpcyBjb25maWd1cmF0aW9uIGlzIHNob3duIGJlbG93LCB0aGUgSVAKK2FkZHJlc3MgMTkyLjE2OC4xLjEgaGFzIGFuIGludGVyZmFjZSBpbmRleCBvZiAyIHdoaWNoIGluZGV4ZXMgdG8gZXRoMAoraW4gdGhlIGlmRGVzY3IgdGFibGUgKGlmRGVzY3IuMikuCisKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4xID0gbG8KKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4yID0gZXRoMAorICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjMgPSBldGgxCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuNCA9IGV0aDIKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci41ID0gZXRoMworICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjYgPSBib25kMAorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMC4xMC4xMC4xMCA9IDUKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTkyLjE2OC4xLjEgPSAyCisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjEwLjc0LjIwLjk0ID0gNAorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMjcuMC4wLjEgPSAxCisKKwlUaGlzIHByb2JsZW0gaXMgYXZvaWRlZCBieSBsb2FkaW5nIHRoZSBib25kaW5nIGRyaXZlciBiZWZvcmUKK2FueSBuZXR3b3JrIGRyaXZlcnMgcGFydGljaXBhdGluZyBpbiBhIGJvbmQuICBCZWxvdyBpcyBhbiBleGFtcGxlIG9mCitsb2FkaW5nIHRoZSBib25kaW5nIGRyaXZlciBmaXJzdCwgdGhlIElQIGFkZHJlc3MgMTkyLjE2OC4xLjEgaXMKK2NvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggaWZEZXNjci4yLgorCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuMSA9IGxvCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuMiA9IGJvbmQwCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuMyA9IGV0aDAKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci40ID0gZXRoMQorICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjUgPSBldGgyCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuNiA9IGV0aDMKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTAuMTAuMTAuMTAgPSA2CisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjE5Mi4xNjguMS4xID0gMgorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMC43NC4yMC45NCA9IDUKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTI3LjAuMC4xID0gMQorCisJV2hpbGUgc29tZSBkaXN0cmlidXRpb25zIG1heSBub3QgcmVwb3J0IHRoZSBpbnRlcmZhY2UgbmFtZSBpbgoraWZEZXNjciwgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIElQIGFkZHJlc3MgYW5kIElmSW5kZXggcmVtYWlucworYW5kIFNOTVAgZnVuY3Rpb25zIHN1Y2ggYXMgSW50ZXJmYWNlX1NjYW5fTmV4dCB3aWxsIHJlcG9ydCB0aGF0Cithc3NvY2lhdGlvbi4KKworMTEuIFByb21pc2N1b3VzIG1vZGUKKz09PT09PT09PT09PT09PT09PT09CisKKwlXaGVuIHJ1bm5pbmcgbmV0d29yayBtb25pdG9yaW5nIHRvb2xzLCBlLmcuLCB0Y3BkdW1wLCBpdCBpcworY29tbW9uIHRvIGVuYWJsZSBwcm9taXNjdW91cyBtb2RlIG9uIHRoZSBkZXZpY2UsIHNvIHRoYXQgYWxsIHRyYWZmaWMKK2lzIHNlZW4gKGluc3RlYWQgb2Ygc2VlaW5nIG9ubHkgdHJhZmZpYyBkZXN0aW5lZCBmb3IgdGhlIGxvY2FsIGhvc3QpLgorVGhlIGJvbmRpbmcgZHJpdmVyIGhhbmRsZXMgcHJvbWlzY3VvdXMgbW9kZSBjaGFuZ2VzIHRvIHRoZSBib25kaW5nCittYXN0ZXIgZGV2aWNlIChlLmcuLCBib25kMCksIGFuZCBwcm9wb2dhdGVzIHRoZSBzZXR0aW5nIHRvIHRoZSBzbGF2ZQorZGV2aWNlcy4KKworCUZvciB0aGUgYmFsYW5jZS1yciwgYmFsYW5jZS14b3IsIGJyb2FkY2FzdCwgYW5kIDgwMi4zYWQgbW9kZXMsCit0aGUgcHJvbWlzY3VvdXMgbW9kZSBzZXR0aW5nIGlzIHByb3BvZ2F0ZWQgdG8gYWxsIHNsYXZlcy4KKworCUZvciB0aGUgYWN0aXZlLWJhY2t1cCwgYmFsYW5jZS10bGIgYW5kIGJhbGFuY2UtYWxiIG1vZGVzLCB0aGUKK3Byb21pc2N1b3VzIG1vZGUgc2V0dGluZyBpcyBwcm9wb2dhdGVkIG9ubHkgdG8gdGhlIGFjdGl2ZSBzbGF2ZS4KKworCUZvciBiYWxhbmNlLXRsYiBtb2RlLCB0aGUgYWN0aXZlIHNsYXZlIGlzIHRoZSBzbGF2ZSBjdXJyZW50bHkKK3JlY2VpdmluZyBpbmJvdW5kIHRyYWZmaWMuCisKKwlGb3IgYmFsYW5jZS1hbGIgbW9kZSwgdGhlIGFjdGl2ZSBzbGF2ZSBpcyB0aGUgc2xhdmUgdXNlZCBhcyBhCisicHJpbWFyeS4iICBUaGlzIHNsYXZlIGlzIHVzZWQgZm9yIG1vZGUtc3BlY2lmaWMgY29udHJvbCB0cmFmZmljLCBmb3IKK3NlbmRpbmcgdG8gcGVlcnMgdGhhdCBhcmUgdW5hc3NpZ25lZCBvciBpZiB0aGUgbG9hZCBpcyB1bmJhbGFuY2VkLgorCisJRm9yIHRoZSBhY3RpdmUtYmFja3VwLCBiYWxhbmNlLXRsYiBhbmQgYmFsYW5jZS1hbGIgbW9kZXMsIHdoZW4KK3RoZSBhY3RpdmUgc2xhdmUgY2hhbmdlcyAoZS5nLiwgZHVlIHRvIGEgbGluayBmYWlsdXJlKSwgdGhlCitwcm9taXNjdW91cyBzZXR0aW5nIHdpbGwgYmUgcHJvcG9nYXRlZCB0byB0aGUgbmV3IGFjdGl2ZSBzbGF2ZS4KKworMTIuIEhpZ2ggQXZhaWxhYmlsaXR5IEluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCUhpZ2ggQXZhaWxhYmlsaXR5IHJlZmVycyB0byBjb25maWd1cmF0aW9ucyB0aGF0IHByb3ZpZGUKK21heGltdW0gbmV0d29yayBhdmFpbGFiaWxpdHkgYnkgaGF2aW5nIHJlZHVuZGFudCBvciBiYWNrdXAgZGV2aWNlcywKK2xpbmtzIGFuZCBzd2l0Y2hlcyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgcmVzdCBvZiB0aGUgd29ybGQuCisKKwlUaGVyZSBhcmUgY3VycmVudGx5IHR3byBiYXNpYyBtZXRob2RzIGZvciBjb25maWd1cmluZyB0bworbWF4aW1pemUgYXZhaWxhYmlsaXR5LiBUaGV5IGFyZSBkZXBlbmRlbnQgb24gdGhlIG5ldHdvcmsgdG9wb2xvZ3kgYW5kCit0aGUgcHJpbWFyeSBnb2FsIG9mIHRoZSBjb25maWd1cmF0aW9uLCBidXQgaW4gZ2VuZXJhbCwgYSBjb25maWd1cmF0aW9uCitjYW4gYmUgb3B0aW1pemVkIGZvciBtYXhpbXVtIGF2YWlsYWJsZSBiYW5kd2lkdGgsIG9yIGZvciBtYXhpbXVtCituZXR3b3JrIGF2YWlsYWJpbGl0eS4KKworMTIuMSBIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlJZiB0d28gaG9zdHMgKG9yIGEgaG9zdCBhbmQgYSBzd2l0Y2gpIGFyZSBkaXJlY3RseSBjb25uZWN0ZWQKK3ZpYSBtdWx0aXBsZSBwaHlzaWNhbCBsaW5rcywgdGhlbiB0aGVyZSBpcyBubyBuZXR3b3JrIGF2YWlsYWJpbGl0eQorcGVuYWx0eSBmb3Igb3B0aW1pemluZyBmb3IgbWF4aW11bSBiYW5kd2lkdGg6IHRoZXJlIGlzIG9ubHkgb25lIHN3aXRjaAorKG9yIHBlZXIpLCBzbyBpZiBpdCBmYWlscywgeW91IGhhdmUgbm8gYWx0ZXJuYXRpdmUgYWNjZXNzIHRvIGZhaWwgb3ZlcgordG8uCisKK0V4YW1wbGUgMSA6IGhvc3QgdG8gc3dpdGNoIChvciBvdGhlciBob3N0KQorCisgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgIHxldGgwICAgICAgICAgICAgICAgICAgZXRoMHwgIHN3aXRjaCAgfAorICAgICAgICAgIHwgSG9zdCBBICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICBvciAgICB8CisgICAgICAgICAgfCAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICBvdGhlciAgIHwKKyAgICAgICAgICB8ICAgICAgICAgIHxldGgxICAgICAgICAgICAgICAgICAgZXRoMXwgIGhvc3QgICAgfAorICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rCisKKworMTIuMS4xIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIHNpbmdsZSBzd2l0Y2ggdG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGVhc2llc3QgdG8gc2V0IHVwIGFuZCB0byB1bmRlcnN0YW5kLAorYWx0aG91Z2ggeW91IHdpbGwgaGF2ZSB0byBkZWNpZGUgd2hpY2ggYm9uZGluZyBtb2RlIGJlc3Qgc3VpdHMgeW91cgorbmVlZHMuICBUaGUgdHJhZGVvZmZzIGZvciBlYWNoIG1vZGUgYXJlIGRldGFpbGVkIGJlbG93OgorCitiYWxhbmNlLXJyOiBUaGlzIG1vZGUgaXMgdGhlIG9ubHkgbW9kZSB0aGF0IHdpbGwgcGVybWl0IGEgc2luZ2xlCisJVENQL0lQIGNvbm5lY3Rpb24gdG8gc3RyaXBlIHRyYWZmaWMgYWNyb3NzIG11bHRpcGxlCisJaW50ZXJmYWNlcy4gSXQgaXMgdGhlcmVmb3JlIHRoZSBvbmx5IG1vZGUgdGhhdCB3aWxsIGFsbG93IGEKKwlzaW5nbGUgVENQL0lQIHN0cmVhbSB0byB1dGlsaXplIG1vcmUgdGhhbiBvbmUgaW50ZXJmYWNlJ3MKKwl3b3J0aCBvZiB0aHJvdWdocHV0LiAgVGhpcyBjb21lcyBhdCBhIGNvc3QsIGhvd2V2ZXI6IHRoZQorCXN0cmlwaW5nIG9mdGVuIHJlc3VsdHMgaW4gcGVlciBzeXN0ZW1zIHJlY2VpdmluZyBwYWNrZXRzIG91dAorCW9mIG9yZGVyLCBjYXVzaW5nIFRDUC9JUCdzIGNvbmdlc3Rpb24gY29udHJvbCBzeXN0ZW0gdG8ga2ljaworCWluLCBvZnRlbiBieSByZXRyYW5zbWl0dGluZyBzZWdtZW50cy4KKworCUl0IGlzIHBvc3NpYmxlIHRvIGFkanVzdCBUQ1AvSVAncyBjb25nZXN0aW9uIGxpbWl0cyBieQorCWFsdGVyaW5nIHRoZSBuZXQuaXB2NC50Y3BfcmVvcmRlcmluZyBzeXNjdGwgcGFyYW1ldGVyLiAgVGhlCisJdXN1YWwgZGVmYXVsdCB2YWx1ZSBpcyAzLCBhbmQgdGhlIG1heGltdW0gdXNlZnVsIHZhbHVlIGlzIDEyNy4KKwlGb3IgYSBmb3VyIGludGVyZmFjZSBiYWxhbmNlLXJyIGJvbmQsIGV4cGVjdCB0aGF0IGEgc2luZ2xlCisJVENQL0lQIHN0cmVhbSB3aWxsIHV0aWxpemUgbm8gbW9yZSB0aGFuIGFwcHJveGltYXRlbHkgMi4zCisJaW50ZXJmYWNlJ3Mgd29ydGggb2YgdGhyb3VnaHB1dCwgZXZlbiBhZnRlciBhZGp1c3RpbmcKKwl0Y3BfcmVvcmRlcmluZy4KKworCUlmIHlvdSBhcmUgdXRpbGl6aW5nIHByb3RvY29scyBvdGhlciB0aGFuIFRDUC9JUCwgVURQIGZvcgorCWV4YW1wbGUsIGFuZCB5b3VyIGFwcGxpY2F0aW9uIGNhbiB0b2xlcmF0ZSBvdXQgb2Ygb3JkZXIKKwlkZWxpdmVyeSwgdGhlbiB0aGlzIG1vZGUgY2FuIGFsbG93IGZvciBzaW5nbGUgc3RyZWFtIGRhdGFncmFtCisJcGVyZm9ybWFuY2UgdGhhdCBzY2FsZXMgbmVhciBsaW5lYXJseSBhcyBpbnRlcmZhY2VzIGFyZSBhZGRlZAorCXRvIHRoZSBib25kLgorCisJVGhpcyBtb2RlIHJlcXVpcmVzIHRoZSBzd2l0Y2ggdG8gaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcG9ydHMKKwljb25maWd1cmVkIGZvciAiZXRoZXJjaGFubmVsIiBvciAidHJ1bmtpbmcuIgorCithY3RpdmUtYmFja3VwOiBUaGVyZSBpcyBub3QgbXVjaCBhZHZhbnRhZ2UgaW4gdGhpcyBuZXR3b3JrIHRvcG9sb2d5IHRvCisJdGhlIGFjdGl2ZS1iYWNrdXAgbW9kZSwgYXMgdGhlIGluYWN0aXZlIGJhY2t1cCBkZXZpY2VzIGFyZSBhbGwKKwljb25uZWN0ZWQgdG8gdGhlIHNhbWUgcGVlciBhcyB0aGUgcHJpbWFyeS4gIEluIHRoaXMgY2FzZSwgYQorCWxvYWQgYmFsYW5jaW5nIG1vZGUgKHdpdGggbGluayBtb25pdG9yaW5nKSB3aWxsIHByb3ZpZGUgdGhlCisJc2FtZSBsZXZlbCBvZiBuZXR3b3JrIGF2YWlsYWJpbGl0eSwgYnV0IHdpdGggaW5jcmVhc2VkCisJYXZhaWxhYmxlIGJhbmR3aWR0aC4gIE9uIHRoZSBwbHVzIHNpZGUsIGl0IGRvZXMgbm90IHJlcXVpcmUKKwlhbnkgY29uZmlndXJhdGlvbiBvZiB0aGUgc3dpdGNoLgorCitiYWxhbmNlLXhvcjogVGhpcyBtb2RlIHdpbGwgbGltaXQgdHJhZmZpYyBzdWNoIHRoYXQgcGFja2V0cyBkZXN0aW5lZAorCWZvciBzcGVjaWZpYyBwZWVycyB3aWxsIGFsd2F5cyBiZSBzZW50IG92ZXIgdGhlIHNhbWUKKwlpbnRlcmZhY2UuICBTaW5jZSB0aGUgZGVzdGluYXRpb24gaXMgZGV0ZXJtaW5lZCBieSB0aGUgTUFDCisJYWRkcmVzc2VzIGludm9sdmVkLCB0aGlzIG1heSBiZSBkZXNpcmFibGUgaWYgeW91IGhhdmUgYSBsYXJnZQorCW5ldHdvcmsgd2l0aCBtYW55IGhvc3RzLiAgSXQgaXMgbGlrZWx5IHRvIGJlIHN1Ym9wdGltYWwgaWYgYWxsCisJeW91ciB0cmFmZmljIGlzIHBhc3NlZCB0aHJvdWdoIGEgc2luZ2xlIHJvdXRlciwgaG93ZXZlci4gIEFzCisJd2l0aCBiYWxhbmNlLXJyLCB0aGUgc3dpdGNoIHBvcnRzIG5lZWQgdG8gYmUgY29uZmlndXJlZCBmb3IKKwkiZXRoZXJjaGFubmVsIiBvciAidHJ1bmtpbmcuIgorCiticm9hZGNhc3Q6IExpa2UgYWN0aXZlLWJhY2t1cCwgdGhlcmUgaXMgbm90IG11Y2ggYWR2YW50YWdlIHRvIHRoaXMKKwltb2RlIGluIHRoaXMgdHlwZSBvZiBuZXR3b3JrIHRvcG9sb2d5LgorCis4MDIuM2FkOiBUaGlzIG1vZGUgY2FuIGJlIGEgZ29vZCBjaG9pY2UgZm9yIHRoaXMgdHlwZSBvZiBuZXR3b3JrCisJdG9wb2xvZ3kuICBUaGUgODAyLjNhZCBtb2RlIGlzIGFuIElFRUUgc3RhbmRhcmQsIHNvIGFsbCBwZWVycworCXRoYXQgaW1wbGVtZW50IDgwMi4zYWQgc2hvdWxkIGludGVyb3BlcmF0ZSB3ZWxsLiAgVGhlIDgwMi4zYWQKKwlwcm90b2NvbCBpbmNsdWRlcyBhdXRvbWF0aWMgY29uZmlndXJhdGlvbiBvZiB0aGUgYWdncmVnYXRlcywKKwlzbyBtaW5pbWFsIG1hbnVhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBzd2l0Y2ggaXMgbmVlZGVkCisJKHR5cGljYWxseSBvbmx5IHRvIGRlc2lnbmF0ZSB0aGF0IHNvbWUgc2V0IG9mIGRldmljZXMgaXMKKwl1c2FibGUgZm9yIDgwMi4zYWQpLiAgVGhlIDgwMi4zYWQgc3RhbmRhcmQgYWxzbyBtYW5kYXRlcyB0aGF0CisJZnJhbWVzIGJlIGRlbGl2ZXJlZCBpbiBvcmRlciAod2l0aGluIGNlcnRhaW4gbGltaXRzKSwgc28gaW4KKwlnZW5lcmFsIHNpbmdsZSBjb25uZWN0aW9ucyB3aWxsIG5vdCBzZWUgbWlzb3JkZXJpbmcgb2YKKwlwYWNrZXRzLiAgVGhlIDgwMi4zYWQgbW9kZSBkb2VzIGhhdmUgc29tZSBkcmF3YmFja3M6IHRoZQorCXN0YW5kYXJkIG1hbmRhdGVzIHRoYXQgYWxsIGRldmljZXMgaW4gdGhlIGFnZ3JlZ2F0ZSBvcGVyYXRlIGF0CisJdGhlIHNhbWUgc3BlZWQgYW5kIGR1cGxleC4gIEFsc28sIGFzIHdpdGggYWxsIGJvbmRpbmcgbG9hZAorCWJhbGFuY2UgbW9kZXMgb3RoZXIgdGhhbiBiYWxhbmNlLXJyLCBubyBzaW5nbGUgY29ubmVjdGlvbiB3aWxsCisJYmUgYWJsZSB0byB1dGlsaXplIG1vcmUgdGhhbiBhIHNpbmdsZSBpbnRlcmZhY2UncyB3b3J0aCBvZgorCWJhbmR3aWR0aC4gIEFkZGl0aW9uYWxseSwgdGhlIGxpbnV4IGJvbmRpbmcgODAyLjNhZAorCWltcGxlbWVudGF0aW9uIGRpc3RyaWJ1dGVzIHRyYWZmaWMgYnkgcGVlciAodXNpbmcgYW4gWE9SIG9mCisJTUFDIGFkZHJlc3NlcyksIHNvIGluIGdlbmVyYWwgYWxsIHRyYWZmaWMgdG8gYSBwYXJ0aWN1bGFyCisJZGVzdGluYXRpb24gd2lsbCB1c2UgdGhlIHNhbWUgaW50ZXJmYWNlLiAgRmluYWxseSwgdGhlIDgwMi4zYWQKKwltb2RlIG1hbmRhdGVzIHRoZSB1c2Ugb2YgdGhlIE1JSSBtb25pdG9yLCB0aGVyZWZvcmUsIHRoZSBBUlAKKwltb25pdG9yIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBtb2RlLgorCitiYWxhbmNlLXRsYjogVGhpcyBtb2RlIGlzIGFsc28gYSBnb29kIGNob2ljZSBmb3IgdGhpcyB0eXBlIG9mCisJdG9wb2xvZ3kuICBJdCBoYXMgbm8gc3BlY2lhbCBzd2l0Y2ggY29uZmlndXJhdGlvbgorCXJlcXVpcmVtZW50cywgYW5kIGJhbGFuY2VzIG91dGdvaW5nIHRyYWZmaWMgYnkgcGVlciwgaW4gYQorCXZhZ3VlbHkgaW50ZWxsaWdlbnQgbWFubmVyIChub3QgYSBzaW1wbGUgWE9SIGFzIGluIGJhbGFuY2UteG9yCisJb3IgODAyLjNhZCBtb2RlKSwgc28gdGhhdCB1bmx1Y2t5IE1BQyBhZGRyZXNzZXMgd2lsbCBub3QgYWxsCisJImJ1bmNoIHVwIiBvbiBhIHNpbmdsZSBpbnRlcmZhY2UuICBJbnRlcmZhY2VzIG1heSBiZSBvZgorCWRpZmZlcmluZyBzcGVlZHMuICBPbiB0aGUgZG93biBzaWRlLCBpbiB0aGlzIG1vZGUgYWxsIGluY29taW5nCisJdHJhZmZpYyBhcnJpdmVzIG92ZXIgYSBzaW5nbGUgaW50ZXJmYWNlLCB0aGlzIG1vZGUgcmVxdWlyZXMKKwljZXJ0YWluIGV0aHRvb2wgc3VwcG9ydCBpbiB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIG9mIHRoZQorCXNsYXZlIGludGVyZmFjZXMsIGFuZCB0aGUgQVJQIG1vbml0b3IgaXMgbm90IGF2YWlsYWJsZS4KKworYmFsYW5jZS1hbGI6IFRoaXMgbW9kZSBpcyBldmVyeXRoaW5nIHRoYXQgYmFsYW5jZS10bGIgaXMsIGFuZCBtb3JlLiBJdAorCWhhcyBhbGwgb2YgdGhlIGZlYXR1cmVzIChhbmQgcmVzdHJpY3Rpb25zKSBvZiBiYWxhbmNlLXRsYiwgYW5kCisJd2lsbCBhbHNvIGJhbGFuY2UgaW5jb21pbmcgdHJhZmZpYyBmcm9tIHBlZXJzIChhcyBkZXNjcmliZWQgaW4KKwl0aGUgQm9uZGluZyBNb2R1bGUgT3B0aW9ucyBzZWN0aW9uLCBhYm92ZSkuICBUaGUgb25seSBleHRyYQorCWRvd24gc2lkZSB0byB0aGlzIG1vZGUgaXMgdGhhdCB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIG11c3QKKwlzdXBwb3J0IGNoYW5naW5nIHRoZSBoYXJkd2FyZSBhZGRyZXNzIHdoaWxlIHRoZSBkZXZpY2UgaXMKKwlvcGVuLgorCisxMi4xLjIgTGluayBNb25pdG9yaW5nIGZvciBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgY2hvaWNlIG9mIGxpbmsgbW9uaXRvcmluZyBtYXkgbGFyZ2VseSBkZXBlbmQgdXBvbiB3aGljaAorbW9kZSB5b3UgY2hvb3NlIHRvIHVzZS4gIFRoZSBtb3JlIGFkdmFuY2VkIGxvYWQgYmFsYW5jaW5nIG1vZGVzIGRvIG5vdAorc3VwcG9ydCB0aGUgdXNlIG9mIHRoZSBBUlAgbW9uaXRvciwgYW5kIGFyZSB0aHVzIHJlc3RyaWN0ZWQgdG8gdXNpbmcKK3RoZSBNSUkgbW9uaXRvciAod2hpY2ggZG9lcyBub3QgcHJvdmlkZSBhcyBoaWdoIGEgbGV2ZWwgb2YgYXNzdXJhbmNlCithcyB0aGUgQVJQIG1vbml0b3IpLgorCisKKzEyLjIgSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVdpdGggbXVsdGlwbGUgc3dpdGNoZXMsIHRoZSBjb25maWd1cmF0aW9uIG9mIGJvbmRpbmcgYW5kIHRoZQorbmV0d29yayBjaGFuZ2VzIGRyYW1hdGljYWxseS4gIEluIG11bHRpcGxlIHN3aXRjaCB0b3BvbG9naWVzLCB0aGVyZSBpcworYSB0cmFkZW9mZiBiZXR3ZWVuIG5ldHdvcmsgYXZhaWxhYmlsaXR5IGFuZCB1c2FibGUgYmFuZHdpZHRoLgorCisJQmVsb3cgaXMgYSBzYW1wbGUgbmV0d29yaywgY29uZmlndXJlZCB0byBtYXhpbWl6ZSB0aGUKK2F2YWlsYWJpbGl0eSBvZiB0aGUgbmV0d29yazoKKworICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgIHxwb3J0MyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQzfAorICAgICAgICAgICstLS0tLSstLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0rCisgICAgICAgICAgfCAgICAgICAgICB8cG9ydDIgICAgICAgSVNMICAgICAgcG9ydDJ8ICAgICAgICAgIHwKKyAgICAgICAgICB8IHN3aXRjaCBBICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgc3dpdGNoIEIgfAorICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8CisgICAgICAgICAgKy0tLS0tKy0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rKy0tLSsKKyAgICAgICAgICAgICAgICB8cG9ydDEgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MXwKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsgaG9zdDEgKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICBldGgwICstLS0tLS0tKyBldGgxCisKKwlJbiB0aGlzIGNvbmZpZ3VyYXRpb24sIHRoZXJlIGlzIGEgbGluayBiZXR3ZWVuIHRoZSB0d28KK3N3aXRjaGVzIChJU0wsIG9yIGludGVyIHN3aXRjaCBsaW5rKSwgYW5kIG11bHRpcGxlIHBvcnRzIGNvbm5lY3RpbmcgdG8KK3RoZSBvdXRzaWRlIHdvcmxkICgicG9ydDMiIG9uIGVhY2ggc3dpdGNoKS4gIFRoZXJlIGlzIG5vIHRlY2huaWNhbAorcmVhc29uIHRoYXQgdGhpcyBjb3VsZCBub3QgYmUgZXh0ZW5kZWQgdG8gYSB0aGlyZCBzd2l0Y2guCisKKzEyLjIuMSBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUluIGEgdG9wb2xvZ3kgc3VjaCBhcyB0aGlzLCB0aGUgYWN0aXZlLWJhY2t1cCBhbmQgYnJvYWRjYXN0Cittb2RlcyBhcmUgdGhlIG9ubHkgdXNlZnVsIGJvbmRpbmcgbW9kZXM7IHRoZSBvdGhlciBtb2RlcyByZXF1aXJlIGFsbAorbGlua3MgdG8gdGVybWluYXRlIG9uIHRoZSBzYW1lIHBlZXIgZm9yIHRoZW0gdG8gYmVoYXZlIHJhdGlvbmFsbHkuCisKK2FjdGl2ZS1iYWNrdXA6IFRoaXMgaXMgZ2VuZXJhbGx5IHRoZSBwcmVmZXJyZWQgbW9kZSwgcGFydGljdWxhcmx5IGlmCisJdGhlIHN3aXRjaGVzIGhhdmUgYW4gSVNMIGFuZCBwbGF5IHRvZ2V0aGVyIHdlbGwuICBJZiB0aGUKKwluZXR3b3JrIGNvbmZpZ3VyYXRpb24gaXMgc3VjaCB0aGF0IG9uZSBzd2l0Y2ggaXMgc3BlY2lmaWNhbGx5CisJYSBiYWNrdXAgc3dpdGNoIChlLmcuLCBoYXMgbG93ZXIgY2FwYWNpdHksIGhpZ2hlciBjb3N0LCBldGMpLAorCXRoZW4gdGhlIHByaW1hcnkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGluc3VyZSB0aGF0IHRoZQorCXByZWZlcnJlZCBsaW5rIGlzIGFsd2F5cyB1c2VkIHdoZW4gaXQgaXMgYXZhaWxhYmxlLgorCiticm9hZGNhc3Q6IFRoaXMgbW9kZSBpcyByZWFsbHkgYSBzcGVjaWFsIHB1cnBvc2UgbW9kZSwgYW5kIGlzIHN1aXRhYmxlCisJb25seSBmb3IgdmVyeSBzcGVjaWZpYyBuZWVkcy4gIEZvciBleGFtcGxlLCBpZiB0aGUgdHdvCisJc3dpdGNoZXMgYXJlIG5vdCBjb25uZWN0ZWQgKG5vIElTTCksIGFuZCB0aGUgbmV0d29ya3MgYmV5b25kCisJdGhlbSBhcmUgdG90YWxseSBpbmRlcGVuZGFudC4gIEluIHRoaXMgY2FzZSwgaWYgaXQgaXMKKwluZWNlc3NhcnkgZm9yIHNvbWUgc3BlY2lmaWMgb25lLXdheSB0cmFmZmljIHRvIHJlYWNoIGJvdGgKKwlpbmRlcGVuZGVudCBuZXR3b3JrcywgdGhlbiB0aGUgYnJvYWRjYXN0IG1vZGUgbWF5IGJlIHN1aXRhYmxlLgorCisxMi4yLjIgTGluayBNb25pdG9yaW5nIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgY2hvaWNlIG9mIGxpbmsgbW9uaXRvcmluZyB1bHRpbWF0ZWx5IGRlcGVuZHMgdXBvbiB5b3VyCitzd2l0Y2guICBJZiB0aGUgc3dpdGNoIGNhbiByZWxpYWJseSBmYWlsIHBvcnRzIGluIHJlc3BvbnNlIHRvIG90aGVyCitmYWlsdXJlcywgdGhlbiBlaXRoZXIgdGhlIE1JSSBvciBBUlAgbW9uaXRvcnMgc2hvdWxkIHdvcmsuICBGb3IKK2V4YW1wbGUsIGluIHRoZSBhYm92ZSBleGFtcGxlLCBpZiB0aGUgInBvcnQzIiBsaW5rIGZhaWxzIGF0IHRoZSByZW1vdGUKK2VuZCwgdGhlIE1JSSBtb25pdG9yIGhhcyBubyBkaXJlY3QgbWVhbnMgdG8gZGV0ZWN0IHRoaXMuICBUaGUgQVJQCittb25pdG9yIGNvdWxkIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIHRhcmdldCBhdCB0aGUgcmVtb3RlIGVuZCBvZiBwb3J0MywKK3RodXMgZGV0ZWN0aW5nIHRoYXQgZmFpbHVyZSB3aXRob3V0IHN3aXRjaCBzdXBwb3J0LgorCisJSW4gZ2VuZXJhbCwgaG93ZXZlciwgaW4gYSBtdWx0aXBsZSBzd2l0Y2ggdG9wb2xvZ3ksIHRoZSBBUlAKK21vbml0b3IgY2FuIHByb3ZpZGUgYSBoaWdoZXIgbGV2ZWwgb2YgcmVsaWFiaWxpdHkgaW4gZGV0ZWN0aW5nIGxpbmsKK2ZhaWx1cmVzLiAgQWRkaXRpb25hbGx5LCBpdCBzaG91bGQgYmUgY29uZmlndXJlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMKKyhhdCBsZWFzdCBvbmUgZm9yIGVhY2ggc3dpdGNoIGluIHRoZSBuZXR3b3JrKS4gIFRoaXMgd2lsbCBpbnN1cmUgdGhhdCwKK3JlZ2FyZGxlc3Mgb2Ygd2hpY2ggc3dpdGNoIGlzIGFjdGl2ZSwgdGhlIEFSUCBtb25pdG9yIGhhcyBhIHN1aXRhYmxlCit0YXJnZXQgdG8gcXVlcnkuCisKKworMTIuMyBTd2l0Y2ggQmVoYXZpb3IgSXNzdWVzIGZvciBIaWdoIEF2YWlsYWJpbGl0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJWW91IG1heSBlbmNvdW50ZXIgaXNzdWVzIHdpdGggdGhlIHRpbWluZyBvZiBsaW5rIHVwIGFuZCBkb3duCityZXBvcnRpbmcgYnkgdGhlIHN3aXRjaC4KKworCUZpcnN0LCB3aGVuIGEgbGluayBjb21lcyB1cCwgc29tZSBzd2l0Y2hlcyBtYXkgaW5kaWNhdGUgdGhhdAordGhlIGxpbmsgaXMgdXAgKGNhcnJpZXIgYXZhaWxhYmxlKSwgYnV0IG5vdCBwYXNzIHRyYWZmaWMgb3ZlciB0aGUKK2ludGVyZmFjZSBmb3Igc29tZSBwZXJpb2Qgb2YgdGltZS4gIFRoaXMgZGVsYXkgaXMgdHlwaWNhbGx5IGR1ZSB0bworc29tZSB0eXBlIG9mIGF1dG9uZWdvdGlhdGlvbiBvciByb3V0aW5nIHByb3RvY29sLCBidXQgbWF5IGFsc28gb2NjdXIKK2R1cmluZyBzd2l0Y2ggaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyByZWNvdmVyeSBhZnRlciBhIHN3aXRjaAorZmFpbHVyZSkuICBJZiB5b3UgZmluZCB0aGlzIHRvIGJlIGEgcHJvYmxlbSwgc3BlY2lmeSBhbiBhcHByb3ByaWF0ZQordmFsdWUgdG8gdGhlIHVwZGVsYXkgYm9uZGluZyBtb2R1bGUgb3B0aW9uIHRvIGRlbGF5IHRoZSB1c2Ugb2YgdGhlCityZWxldmFudCBpbnRlcmZhY2UocykuCisKKwlTZWNvbmQsIHNvbWUgc3dpdGNoZXMgbWF5ICJib3VuY2UiIHRoZSBsaW5rIHN0YXRlIG9uZSBvciBtb3JlCit0aW1lcyB3aGlsZSBhIGxpbmsgaXMgY2hhbmdpbmcgc3RhdGUuICBUaGlzIG9jY3VycyBtb3N0IGNvbW1vbmx5IHdoaWxlCit0aGUgc3dpdGNoIGlzIGluaXRpYWxpemluZy4gIEFnYWluLCBhbiBhcHByb3ByaWF0ZSB1cGRlbGF5IHZhbHVlIG1heQoraGVscCwgYnV0IG5vdGUgdGhhdCBpZiBhbGwgbGlua3MgYXJlIGRvd24sIHRoZW4gdXBkZWxheSBpcyBpZ25vcmVkCit3aGVuIGFueSBsaW5rIGJlY29tZXMgYWN0aXZlICh0aGUgc2xhdmUgY2xvc2VzdCB0byBjb21wbGV0aW5nIGl0cwordXBkZWxheSBpcyBjaG9zZW4pLgorCisJTm90ZSB0aGF0IHdoZW4gYSBib25kaW5nIGludGVyZmFjZSBoYXMgbm8gYWN0aXZlIGxpbmtzLCB0aGUKK2RyaXZlciB3aWxsIGltbWVkaWF0ZWx5IHJldXNlIHRoZSBmaXJzdCBsaW5rIHRoYXQgZ29lcyB1cCwgZXZlbiBpZgordXBkZWxheSBwYXJhbWV0ZXIgd2FzIHNwZWNpZmllZC4gIElmIHRoZXJlIGFyZSBzbGF2ZSBpbnRlcmZhY2VzCit3YWl0aW5nIGZvciB0aGUgdXBkZWxheSB0aW1lb3V0IHRvIGV4cGlyZSwgdGhlIGludGVyZmFjZSB0aGF0IGZpcnN0Cit3ZW50IGludG8gdGhhdCBzdGF0ZSB3aWxsIGJlIGltbWVkaWF0ZWx5IHJldXNlZC4gIFRoaXMgcmVkdWNlcyBkb3duCit0aW1lIG9mIHRoZSBuZXR3b3JrIGlmIHRoZSB2YWx1ZSBvZiB1cGRlbGF5IGhhcyBiZWVuIG92ZXJlc3RpbWF0ZWQuCisKKwlJbiBhZGRpdGlvbiB0byB0aGUgY29uY2VybnMgYWJvdXQgc3dpdGNoIHRpbWluZ3MsIGlmIHlvdXIKK3N3aXRjaGVzIHRha2UgYSBsb25nIHRpbWUgdG8gZ28gaW50byBiYWNrdXAgbW9kZSwgaXQgbWF5IGJlIGRlc2lyYWJsZQordG8gbm90IGFjdGl2YXRlIGEgYmFja3VwIGludGVyZmFjZSBpbW1lZGlhdGVseSBhZnRlciBhIGxpbmsgZ29lcyBkb3duLgorRmFpbG92ZXIgbWF5IGJlIGRlbGF5ZWQgdmlhIHRoZSBkb3duZGVsYXkgYm9uZGluZyBtb2R1bGUgb3B0aW9uLgorCisxMy4gSGFyZHdhcmUgU3BlY2lmaWMgQ29uc2lkZXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGNvbmZpZ3VyaW5nCitib25kaW5nIG9uIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3Jtcywgb3IgZm9yIGludGVyZmFjaW5nIGJvbmRpbmcKK3dpdGggcGFydGljdWxhciBzd2l0Y2hlcyBvciBvdGhlciBkZXZpY2VzLgorCisxMy4xIElCTSBCbGFkZUNlbnRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgYXBwbGllcyB0byB0aGUgSlMyMCBhbmQgc2ltaWxhciBzeXN0ZW1zLgorCisJT24gdGhlIEpTMjAgYmxhZGVzLCB0aGUgYm9uZGluZyBkcml2ZXIgc3VwcG9ydHMgb25seQorYmFsYW5jZS1yciwgYWN0aXZlLWJhY2t1cCwgYmFsYW5jZS10bGIgYW5kIGJhbGFuY2UtYWxiIG1vZGVzLiAgVGhpcyBpcworbGFyZ2VseSBkdWUgdG8gdGhlIG5ldHdvcmsgdG9wb2xvZ3kgaW5zaWRlIHRoZSBCbGFkZUNlbnRlciwgZGV0YWlsZWQKK2JlbG93LgorCitKUzIwIG5ldHdvcmsgYWRhcHRlciBpbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUFsbCBKUzIwcyBjb21lIHdpdGggdHdvIEJyb2FkY29tIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMKK2ludGVncmF0ZWQgb24gdGhlIHBsYW5hci4gIEluIHRoZSBCbGFkZUNlbnRlciBjaGFzc2lzLCB0aGUgZXRoMCBwb3J0CitvZiBhbGwgSlMyMCBibGFkZXMgaXMgaGFyZCB3aXJlZCB0byBJL08gTW9kdWxlICMxOyBzaW1pbGFybHksIGFsbCBldGgxCitwb3J0cyBhcmUgd2lyZWQgdG8gSS9PIE1vZHVsZSAjMi4gIEFuIGFkZC1vbiBCcm9hZGNvbSBkYXVnaHRlciBjYXJkCitjYW4gYmUgaW5zdGFsbGVkIG9uIGEgSlMyMCB0byBwcm92aWRlIHR3byBtb3JlIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMuCitUaGVzZSBwb3J0cywgZXRoMiBhbmQgZXRoMywgYXJlIHdpcmVkIHRvIEkvTyBNb2R1bGVzIDMgYW5kIDQsCityZXNwZWN0aXZlbHkuCisKKwlFYWNoIEkvTyBNb2R1bGUgbWF5IGNvbnRhaW4gZWl0aGVyIGEgc3dpdGNoIG9yIGEgcGFzc3Rocm91Z2gKK21vZHVsZSAod2hpY2ggYWxsb3dzIHBvcnRzIHRvIGJlIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBhbiBleHRlcm5hbAorc3dpdGNoKS4gIFNvbWUgYm9uZGluZyBtb2RlcyByZXF1aXJlIGEgc3BlY2lmaWMgQmxhZGVDZW50ZXIgaW50ZXJuYWwKK25ldHdvcmsgdG9wb2xvZ3kgaW4gb3JkZXIgdG8gZnVuY3Rpb247IHRoZXNlIGFyZSBkZXRhaWxlZCBiZWxvdy4KKworCUFkZGl0aW9uYWwgQmxhZGVDZW50ZXItc3BlY2lmaWMgbmV0d29ya2luZyBpbmZvcm1hdGlvbiBjYW4gYmUKK2ZvdW5kIGluIHR3byBJQk0gUmVkYm9va3MgKHd3dy5pYm0uY29tL3JlZGJvb2tzKToKKworIklCTSBlU2VydmVyIEJsYWRlQ2VudGVyIE5ldHdvcmtpbmcgT3B0aW9ucyIKKyJJQk0gZVNlcnZlciBCbGFkZUNlbnRlciBMYXllciAyLTcgTmV0d29yayBTd2l0Y2hpbmciCisKK0JsYWRlQ2VudGVyIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlCZWNhdXNlIGEgQmxhZGVDZW50ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gYSB2ZXJ5IGxhcmdlIG51bWJlcgorb2Ygd2F5cywgdGhpcyBkaXNjdXNzaW9uIHdpbGwgYmUgY29uZmluZWQgdG8gZGVzY3JpYmluZyBiYXNpYworY29uZmlndXJhdGlvbnMuCisKKwlOb3JtYWxseSwgRXRoZXJuZXQgU3dpdGNoIE1vZHVsZXMgKEVTTSkgYXJlIHVzZWQgaW4gSS9PCittb2R1bGVzIDEgYW5kIDIuICBJbiB0aGlzIGNvbmZpZ3VyYXRpb24sIHRoZSBldGgwIGFuZCBldGgxIHBvcnRzIG9mIGEKK0pTMjAgd2lsbCBiZSBjb25uZWN0ZWQgdG8gZGlmZmVyZW50IGludGVybmFsIHN3aXRjaGVzIChpbiB0aGUKK3Jlc3BlY3RpdmUgSS9PIG1vZHVsZXMpLgorCisJQW4gb3B0aWNhbCBwYXNzdGhydSBtb2R1bGUgKE9QTSkgY29ubmVjdHMgdGhlIEkvTyBtb2R1bGUKK2RpcmVjdGx5IHRvIGFuIGV4dGVybmFsIHN3aXRjaC4gIEJ5IHVzaW5nIE9QTXMgaW4gSS9PIG1vZHVsZSAjMSBhbmQKKyMyLCB0aGUgZXRoMCBhbmQgZXRoMSBpbnRlcmZhY2VzIG9mIGEgSlMyMCBjYW4gYmUgcmVkaXJlY3RlZCB0byB0aGUKK291dHNpZGUgd29ybGQgYW5kIGNvbm5lY3RlZCB0byBhIGNvbW1vbiBleHRlcm5hbCBzd2l0Y2guCisKKwlEZXBlbmRpbmcgdXBvbiB0aGUgbWl4IG9mIEVTTSBhbmQgT1BNIG1vZHVsZXMsIHRoZSBuZXR3b3JrCit3aWxsIGFwcGVhciB0byBib25kaW5nIGFzIGVpdGhlciBhIHNpbmdsZSBzd2l0Y2ggdG9wb2xvZ3kgKGFsbCBPUE0KK21vZHVsZXMpIG9yIGFzIGEgbXVsdGlwbGUgc3dpdGNoIHRvcG9sb2d5IChvbmUgb3IgbW9yZSBFU00gbW9kdWxlcywKK3plcm8gb3IgbW9yZSBPUE0gbW9kdWxlcykuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNvbm5lY3QgRVNNIG1vZHVsZXMKK3RvZ2V0aGVyLCByZXN1bHRpbmcgaW4gYSBjb25maWd1cmF0aW9uIG11Y2ggbGlrZSB0aGUgZXhhbXBsZSBpbiAiSGlnaAorQXZhaWxhYmlsaXR5IGluIGEgbXVsdGlwbGUgc3dpdGNoIHRvcG9sb2d5LiIKKworUmVxdWlyZW1lbnRzIGZvciBzcGVjaWZjIG1vZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBiYWxhbmNlLXJyIG1vZGUgcmVxdWlyZXMgdGhlIHVzZSBvZiBPUE0gbW9kdWxlcyBmb3IKK2RldmljZXMgaW4gdGhlIGJvbmQsIGFsbCBjb25uZWN0ZWQgdG8gYW4gY29tbW9uIGV4dGVybmFsIHN3aXRjaC4gIFRoYXQKK3N3aXRjaCBtdXN0IGJlIGNvbmZpZ3VyZWQgZm9yICJldGhlcmNoYW5uZWwiIG9yICJ0cnVua2luZyIgb24gdGhlCithcHByb3ByaWF0ZSBwb3J0cywgYXMgaXMgdXN1YWwgZm9yIGJhbGFuY2UtcnIuCisKKwlUaGUgYmFsYW5jZS1hbGIgYW5kIGJhbGFuY2UtdGxiIG1vZGVzIHdpbGwgZnVuY3Rpb24gd2l0aAorZWl0aGVyIHN3aXRjaCBtb2R1bGVzIG9yIHBhc3N0aHJvdWdoIG1vZHVsZXMgKG9yIGEgbWl4KS4gIFRoZSBvbmx5CitzcGVjaWZpYyByZXF1aXJlbWVudCBmb3IgdGhlc2UgbW9kZXMgaXMgdGhhdCBhbGwgbmV0d29yayBpbnRlcmZhY2VzCittdXN0IGJlIGFibGUgdG8gcmVhY2ggYWxsIGRlc3RpbmF0aW9ucyBmb3IgdHJhZmZpYyBzZW50IG92ZXIgdGhlCitib25kaW5nIGRldmljZSAoaS5lLiwgdGhlIG5ldHdvcmsgbXVzdCBjb252ZXJnZSBhdCBzb21lIHBvaW50IG91dHNpZGUKK3RoZSBCbGFkZUNlbnRlcikuCisKKwlUaGUgYWN0aXZlLWJhY2t1cCBtb2RlIGhhcyBubyBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cy4KKworTGluayBtb25pdG9yaW5nIGlzc3VlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJV2hlbiBhbiBFdGhlcm5ldCBTd2l0Y2ggTW9kdWxlIGlzIGluIHBsYWNlLCBvbmx5IHRoZSBBUlAKK21vbml0b3Igd2lsbCByZWxpYWJseSBkZXRlY3QgbGluayBsb3NzIHRvIGFuIGV4dGVybmFsIHN3aXRjaC4gIFRoaXMgaXMKK25vdGhpbmcgdW51c3VhbCwgYnV0IGV4YW1pbmF0aW9uIG9mIHRoZSBCbGFkZUNlbnRlciBjYWJpbmV0IHdvdWxkCitzdWdnZXN0IHRoYXQgdGhlICJleHRlcm5hbCIgbmV0d29yayBwb3J0cyBhcmUgdGhlIGV0aGVybmV0IHBvcnRzIGZvcgordGhlIHN5c3RlbSwgd2hlbiBpdCBmYWN0IHRoZXJlIGlzIGEgc3dpdGNoIGJldHdlZW4gdGhlc2UgImV4dGVybmFsIgorcG9ydHMgYW5kIHRoZSBkZXZpY2VzIG9uIHRoZSBKUzIwIHN5c3RlbSBpdHNlbGYuICBUaGUgTUlJIG1vbml0b3IgaXMKK29ubHkgYWJsZSB0byBkZXRlY3QgbGluayBmYWlsdXJlcyBiZXR3ZWVuIHRoZSBFU00gYW5kIHRoZSBKUzIwIHN5c3RlbS4KKworCVdoZW4gYSBwYXNzdGhyb3VnaCBtb2R1bGUgaXMgaW4gcGxhY2UsIHRoZSBNSUkgbW9uaXRvciBkb2VzCitkZXRlY3QgZmFpbHVyZXMgdG8gdGhlICJleHRlcm5hbCIgcG9ydCwgd2hpY2ggaXMgdGhlbiBkaXJlY3RseQorY29ubmVjdGVkIHRvIHRoZSBKUzIwIHN5c3RlbS4KKworT3RoZXIgY29uY2VybnMKKy0tLS0tLS0tLS0tLS0tCisKKwlUaGUgU2VyaWFsIE92ZXIgTEFOIGxpbmsgaXMgZXN0YWJsaXNoZWQgb3ZlciB0aGUgcHJpbWFyeQorZXRoZXJuZXQgKGV0aDApIG9ubHksIHRoZXJlZm9yZSwgYW55IGxvc3Mgb2YgbGluayB0byBldGgwIHdpbGwgcmVzdWx0CitpbiBsb3NpbmcgeW91ciBTb0wgY29ubmVjdGlvbi4gIEl0IHdpbGwgbm90IGZhaWwgb3ZlciB3aXRoIG90aGVyCituZXR3b3JrIHRyYWZmaWMuCisKKwlJdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGRpc2FibGUgc3Bhbm5pbmcgdHJlZSBvbiB0aGUgc3dpdGNoCisoZWl0aGVyIHRoZSBpbnRlcm5hbCBFdGhlcm5ldCBTd2l0Y2ggTW9kdWxlLCBvciBhbiBleHRlcm5hbCBzd2l0Y2gpIHRvCithdm9pZCBmYWlsLW92ZXIgZGVsYXlzIGlzc3VlcyB3aGVuIHVzaW5nIGJvbmRpbmcuCisKKwkKKzE0LiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuICBJcyBpdCBTTVAgc2FmZT8KKworCVllcy4gVGhlIG9sZCAyLjAueHggY2hhbm5lbCBib25kaW5nIHBhdGNoIHdhcyBub3QgU01QIHNhZmUuCitUaGUgbmV3IGRyaXZlciB3YXMgZGVzaWduZWQgdG8gYmUgU01QIHNhZmUgZnJvbSB0aGUgc3RhcnQuCisKKzIuICBXaGF0IHR5cGUgb2YgY2FyZHMgd2lsbCB3b3JrIHdpdGggaXQ/CisKKwlBbnkgRXRoZXJuZXQgdHlwZSBjYXJkcyAoeW91IGNhbiBldmVuIG1peCBjYXJkcyAtIGEgSW50ZWwKK0V0aGVyRXhwcmVzcyBQUk8vMTAwIGFuZCBhIDNjb20gM2M5MDViLCBmb3IgZXhhbXBsZSkuICBUaGV5IG5lZWQgbm90CitiZSBvZiB0aGUgc2FtZSBzcGVlZC4KKworMy4gIEhvdyBtYW55IGJvbmRpbmcgZGV2aWNlcyBjYW4gSSBoYXZlPworCisJVGhlcmUgaXMgbm8gbGltaXQuCisKKzQuICBIb3cgbWFueSBzbGF2ZXMgY2FuIGEgYm9uZGluZyBkZXZpY2UgaGF2ZT8KKworCVRoaXMgaXMgbGltaXRlZCBvbmx5IGJ5IHRoZSBudW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2VzIExpbnV4CitzdXBwb3J0cyBhbmQvb3IgdGhlIG51bWJlciBvZiBuZXR3b3JrIGNhcmRzIHlvdSBjYW4gcGxhY2UgaW4geW91cgorc3lzdGVtLgorCis1LiAgV2hhdCBoYXBwZW5zIHdoZW4gYSBzbGF2ZSBsaW5rIGRpZXM/CisKKwlJZiBsaW5rIG1vbml0b3JpbmcgaXMgZW5hYmxlZCwgdGhlbiB0aGUgZmFpbGluZyBkZXZpY2Ugd2lsbCBiZQorZGlzYWJsZWQuICBUaGUgYWN0aXZlLWJhY2t1cCBtb2RlIHdpbGwgZmFpbCBvdmVyIHRvIGEgYmFja3VwIGxpbmssIGFuZAorb3RoZXIgbW9kZXMgd2lsbCBpZ25vcmUgdGhlIGZhaWxlZCBsaW5rLiAgVGhlIGxpbmsgd2lsbCBjb250aW51ZSB0byBiZQorbW9uaXRvcmVkLCBhbmQgc2hvdWxkIGl0IHJlY292ZXIsIGl0IHdpbGwgcmVqb2luIHRoZSBib25kIChpbiB3aGF0ZXZlcgorbWFubmVyIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgbW9kZSkuIFNlZSB0aGUgc2VjdGlvbiBvbiBIaWdoCitBdmFpbGFiaWxpdHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisJCisJTGluayBtb25pdG9yaW5nIGNhbiBiZSBlbmFibGVkIHZpYSBlaXRoZXIgdGhlIG1paW1vbiBvcgorYXJwX2ludGVydmFsIHBhcmFtdGVycyAoZGVzY3JpYmVkIGluIHRoZSBtb2R1bGUgcGFyYW10ZXJzIHNlY3Rpb24sCithYm92ZSkuICBJbiBnZW5lcmFsLCBtaWltb24gbW9uaXRvcnMgdGhlIGNhcnJpZXIgc3RhdGUgYXMgc2Vuc2VkIGJ5Cit0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSwgYW5kIHRoZSBhcnAgbW9uaXRvciAoYXJwX2ludGVydmFsKQorbW9uaXRvcnMgY29ubmVjdGl2aXR5IHRvIGFub3RoZXIgaG9zdCBvbiB0aGUgbG9jYWwgbmV0d29yay4KKworCUlmIG5vIGxpbmsgbW9uaXRvcmluZyBpcyBjb25maWd1cmVkLCB0aGUgYm9uZGluZyBkcml2ZXIgd2lsbAorYmUgdW5hYmxlIHRvIGRldGVjdCBsaW5rIGZhaWx1cmVzLCBhbmQgd2lsbCBhc3N1bWUgdGhhdCBhbGwgbGlua3MgYXJlCithbHdheXMgYXZhaWxhYmxlLiAgVGhpcyB3aWxsIGxpa2VseSByZXN1bHQgaW4gbG9zdCBwYWNrZXRzLCBhbmQgYQorcmVzdWx0aW5nIGRlZ3JlZGF0aW9uIG9mIHBlcmZvcm1hbmNlLiAgVGhlIHByZWNpc2UgcGVyZm9ybWFuY2UgbG9zcworZGVwZW5kcyB1cG9uIHRoZSBib25kaW5nIG1vZGUgYW5kIG5ldHdvcmsgY29uZmlndXJhdGlvbi4KKworNi4gIENhbiBib25kaW5nIGJlIHVzZWQgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5PworCisJWWVzLiAgU2VlIHRoZSBzZWN0aW9uIG9uIEhpZ2ggQXZhaWxhYmlsaXR5IGZvciBkZXRhaWxzLgorCis3LiAgV2hpY2ggc3dpdGNoZXMvc3lzdGVtcyBkb2VzIGl0IHdvcmsgd2l0aD8KKworCVRoZSBmdWxsIGFuc3dlciB0byB0aGlzIGRlcGVuZHMgdXBvbiB0aGUgZGVzaXJlZCBtb2RlLgorCisJSW4gdGhlIGJhc2ljIGJhbGFuY2UgbW9kZXMgKGJhbGFuY2UtcnIgYW5kIGJhbGFuY2UteG9yKSwgaXQKK3dvcmtzIHdpdGggYW55IHN5c3RlbSB0aGF0IHN1cHBvcnRzIGV0aGVyY2hhbm5lbCAoYWxzbyBjYWxsZWQKK3RydW5raW5nKS4gIE1vc3QgbWFuYWdlZCBzd2l0Y2hlcyBjdXJyZW50bHkgYXZhaWxhYmxlIGhhdmUgc3VjaAorc3VwcG9ydCwgYW5kIG1hbnkgdW5tYW5hbmdlZCBzd2l0Y2hlcyBhcyB3ZWxsLgorCisJVGhlIGFkdmFuY2VkIGJhbGFuY2UgbW9kZXMgKGJhbGFuY2UtdGxiIGFuZCBiYWxhbmNlLWFsYikgZG8KK25vdCBoYXZlIHNwZWNpYWwgc3dpdGNoIHJlcXVpcmVtZW50cywgYnV0IGRvIG5lZWQgZGV2aWNlIGRyaXZlcnMgdGhhdAorc3VwcG9ydCBzcGVjaWZpYyBmZWF0dXJlcyAoZGVzY3JpYmVkIGluIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIHVuZGVyCittb2R1bGUgcGFyYW10ZXJzLCBhYm92ZSkuCisKKwlJbiA4MDIuM2FkIG1vZGUsIGl0IHdvcmtzIHdpdGggd2l0aCBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBJRUVFCis4MDIuM2FkIER5bmFtaWMgTGluayBBZ2dyZWdhdGlvbi4gIE1vc3QgbWFuYWdlZCBhbmQgbWFueSB1bm1hbmFnZWQKK3N3aXRjaGVzIGN1cnJlbnRseSBhdmFpbGFibGUgc3VwcG9ydCA4MDIuM2FkLgorCisgICAgICAgIFRoZSBhY3RpdmUtYmFja3VwIG1vZGUgc2hvdWxkIHdvcmsgd2l0aCBhbnkgTGF5ZXItSUkgc3dpdGNoLgorCis4LiAgV2hlcmUgZG9lcyBhIGJvbmRpbmcgZGV2aWNlIGdldCBpdHMgTUFDIGFkZHJlc3MgZnJvbT8KKworCUlmIG5vdCBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgd2l0aCBpZmNvbmZpZywgdGhlIE1BQyBhZGRyZXNzIG9mCit0aGUgYm9uZGluZyBkZXZpY2UgaXMgdGFrZW4gZnJvbSBpdHMgZmlyc3Qgc2xhdmUgZGV2aWNlLiBUaGlzIE1BQworYWRkcmVzcyBpcyB0aGVuIHBhc3NlZCB0byBhbGwgZm9sbG93aW5nIHNsYXZlcyBhbmQgcmVtYWlucyBwZXJzaXN0ZW50CisoZXZlbiBpZiB0aGUgdGhlIGZpcnN0IHNsYXZlIGlzIHJlbW92ZWQpIHVudGlsIHRoZSBib25kaW5nIGRldmljZSBpcworYnJvdWdodCBkb3duIG9yIHJlY29uZmlndXJlZC4KKworCUlmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGUgTUFDIGFkZHJlc3MsIHlvdSBjYW4gc2V0IGl0IHdpdGgKK2lmY29uZmlnOgorCisjIGlmY29uZmlnIGJvbmQwIGh3IGV0aGVyIDAwOjExOjIyOjMzOjQ0OjU1CisKKwlUaGUgTUFDIGFkZHJlc3MgY2FuIGJlIGFsc28gY2hhbmdlZCBieSBicmluZ2luZyBkb3duL3VwIHRoZQorZGV2aWNlIGFuZCB0aGVuIGNoYW5naW5nIGl0cyBzbGF2ZXMgKG9yIHRoZWlyIG9yZGVyKToKKworIyBpZmNvbmZpZyBib25kMCBkb3duIDsgbW9kcHJvYmUgLXIgYm9uZGluZworIyBpZmNvbmZpZyBib25kMCAuLi4uIHVwCisjIGlmZW5zbGF2ZSBib25kMCBldGguLi4KKworCVRoaXMgbWV0aG9kIHdpbGwgYXV0b21hdGljYWxseSB0YWtlIHRoZSBhZGRyZXNzIGZyb20gdGhlIG5leHQKK3NsYXZlIHRoYXQgaXMgYWRkZWQuCisKKwlUbyByZXN0b3JlIHlvdXIgc2xhdmVzJyBNQUMgYWRkcmVzc2VzLCB5b3UgbmVlZCB0byBkZXRhY2ggdGhlbQorZnJvbSB0aGUgYm9uZCAoYGlmZW5zbGF2ZSAtZCBib25kMCBldGgwJykuIFRoZSBib25kaW5nIGRyaXZlciB3aWxsCit0aGVuIHJlc3RvcmUgdGhlIE1BQyBhZGRyZXNzZXMgdGhhdCB0aGUgc2xhdmVzIGhhZCBiZWZvcmUgdGhleSB3ZXJlCitlbnNsYXZlZC4KKworMTUuIFJlc291cmNlcyBhbmQgTGlua3MKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgYm9uZGluZyBkcml2ZXIgY2FuIGJlIGZvdW5kIGluIHRoZSBsYXRlc3QKK3ZlcnNpb24gb2YgdGhlIGxpbnV4IGtlcm5lbCwgZm91bmQgb24gaHR0cDovL2tlcm5lbC5vcmcKKworRGlzY3Vzc2lvbnMgcmVnYXJkaW5nIHRoZSBib25kaW5nIGRyaXZlciB0YWtlIHBsYWNlIHByaW1hcmlseSBvbiB0aGUKK2JvbmRpbmctZGV2ZWwgbWFpbGluZyBsaXN0LCBob3N0ZWQgYXQgc291cmNlZm9yZ2UubmV0LiAgSWYgeW91IGhhdmUKK3F1ZXN0aW9ucyBvciBwcm9ibGVtcywgcG9zdCB0aGVtIHRvIHRoZSBsaXN0LgorCitib25kaW5nLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCitodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9ib25kaW5nLWRldmVsCisKK1RoZXJlIGlzIGFsc28gYSBwcm9qZWN0IHNpdGUgb24gc291cmNlZm9yZ2UuCisKK2h0dHA6Ly93d3cuc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2JvbmRpbmcKKworRG9uYWxkIEJlY2tlcidzIEV0aGVybmV0IERyaXZlcnMgYW5kIGRpYWcgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0IDoKKyAtIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvCisKK1lvdSB3aWxsIGFsc28gZmluZCBhIGxvdCBvZiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgRXRoZXJuZXQsIE5XYXksIE1JSSwKK2V0Yy4gYXQgd3d3LnNjeWxkLmNvbS4KKworLS0gRU5EIC0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYWUyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnR4dApAQCAtMCwwICsxLDggQEAKK0luIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSwgeW91J2xsIG5lZWQgdGhlCit1c2Vyc3BhY2UgdG9vbHMuIFRoZXNlIHByb2dyYW1zIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBhdmFpbGFibGUKK2F0IGh0dHA6Ly9icmlkZ2Uuc291cmNlZm9yZ2UubmV0LiAgVGhlIGRvd25sb2FkIHBhZ2UgaXMKK2h0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvYnJpZGdlLgorCitJZiB5b3Ugc3RpbGwgaGF2ZSBxdWVzdGlvbnMsIGRvbid0IGhlc2l0YXRlIHRvIHBvc3QgdG8gdGhlIG1haWxpbmcgbGlzdCAKKyhtb3JlIGluZm8gaHR0cDovL2xpc3RzLm9zZGwub3JnL21haWxtYW4vbGlzdGluZm8vYnJpZGdlKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NvbXgudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NvbXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTI2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29teC50eHQKQEAgLTAsMCArMSwyNDggQEAKKworCQlDT01YIGRyaXZlcnMgZm9yIHRoZSAyLjIga2VybmVsCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieTogVGl2YWRhciBTemVtZXRoeSwgPHRpdkBpdGMuaHU+CitDdXJyZW50bHkgbWFpbnRhaW5lZCBieTogR2VyZ2VseSBNYWRhcmFzeiA8Z29yZ29AaXRjLmh1PgorCitMYXN0IGNoYW5nZTogMjEvMDYvMTk5OS4KKworSU5UUk9EVUNUSU9OCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBzb2Z0d2FyZSBkcml2ZXJzIGFuZCB0aGVpciB1c2UgZm9yIHRoZSAKK0NPTVggbGluZSBvZiBzeW5jaHJvbm91cyBzZXJpYWwgYWRhcHRlcnMgZm9yIExpbnV4IHZlcnNpb24gMi4yLjAgYW5kCithYm92ZS4KK1RoZSBjYXJkcyBhcmUgcHJvZHVjZWQgYW5kIHNvbGQgYnkgSVRDLVBybyBMdGQuIEJ1ZGFwZXN0LCBIdW5nYXJ5CitGb3IgZnVydGhlciBpbmZvIGNvbnRhY3QgPGluZm9AaXRjLmh1PiAKK29yIGh0dHA6Ly93d3cuaXRjLmh1IChtb3N0bHkgaW4gSHVuZ2FyaWFuKS4KK1RoZSBmaXJtd2FyZSBmaWxlcyBhbmQgc29mdHdhcmUgYXJlIGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC5pdGMuaHUKKworQ3VycmVudGx5LCB0aGUgZHJpdmVycyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgY2FyZHMgYW5kIHByb3RvY29sczoKKworQ09NWCAoMng2NCBrYnBzIGludGVsbGlnZW50IGJvYXJkKQorQ01YICgxeDI1NiArIDF4MTI4IGticHMgaW50ZWxsaWdlbnQgYm9hcmQpCitIaUNPTVggKDJ4Mk1icHMgaW50ZWxsaWdlbnQgYm9hcmQpCitMb0NPTVggKDF4NTEyIGticHMgcGFzc2l2ZSBib2FyZCkKK01peENPTSAoMXg1MTIgb3IgMng1MTJrYnBzIHBhc3NpdmUgYm9hcmQgd2l0aCBhIGhhcmR3YXJlIHdhdGNoZG9nIGFuCisJb3B0aW9uYWwgQlJJIGludGVyZmFjZSBhbmQgb3B0aW9uYWwgZmxhc2hST00gKDEtMzJNKSkKK1NsaWNlQ09NCSgxeDJNYnBzIGNoYW5uZWxpemVkIEUxIGJvYXJkKQorUGNpQ09NCShYMjEpCisKK0F0IHRoZSBtb21lbnQgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50LCB0aGUgKENpc2NvKS1IRExDLCBMQVBCLCBTeW5jUFBQIGFuZAorRnJhbWUgUmVsYXkgKERURSwgcmZjMTI5NCBJUCBlbmNhcHN1bGF0aW9uIHdpdGggcGFydGlhbGx5IGltcGxlbWVudGVkIFE5MzNhIAorTE1JKSBwcm90b2NvbHMgYXJlIGF2YWlsYWJsZSBhcyBsaW5rLWxldmVsIHByb3RvY29sLiAKK1guMjUgc3VwcG9ydCBpcyBiZWluZyB3b3JrZWQgb24uCisKK1VTQUdFCisKK0xvYWQgdGhlIGNvbXgubyBtb2R1bGUgYW5kIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgcHJvdG9jb2wtc3BlY2lmaWMgCittb2R1bGVzIHlvdSdsbCBuZWVkIGludG8gdGhlIHJ1bm5pbmcga2VybmVsIHVzaW5nIHRoZSBpbnNtb2QgdXRpbGl0eS4KK1RoaXMgY3JlYXRlcyB0aGUgL3Byb2MvY29teCBkaXJlY3RvcnkuCitTZWUgdGhlIGV4YW1wbGUgc2NyaXB0cyBpbiB0aGUgJ2V0YycgZGlyZWN0b3J5LgorCisvcHJvYyBJTlRFUkZBQ0UgSU5UUk8KKworVGhlIENPTVggZHJpdmVyIHNldCBoYXMgYSBuZXcgdHlwZSBvZiB1c2VyIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgL3Byb2MgCitmaWxlc3lzdGVtIHdoaWNoIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGV4dGVybmFsIHVzZXItbGFuZCBzb2Z0d2FyZSBkb2luZyAKK0lPQ1RMIGNhbGxzLiAKK0VhY2ggbmV0d29yayBpbnRlcmZhY2Ugb3IgZGV2aWNlIChpLmUuIHRob3NlIG9uZXMgeW91IGNvbmZpZ3VyZSB3aXRoICdpZmNvbmZpZycKK2FuZCAncm91dGUnIGV0Yy4pIGhhcyBhIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5IHVuZGVyIC9wcm9jL2NvbXguIFlvdSBjYW4KK2R5bmFtaWNhbGx5IGNyZWF0ZSBhIG5ldyBpbnRlcmZhY2UgYnkgc2F5aW5nICdta2RpciAvcHJvYy9jb214L2NvbXgwJyAob3IgeW91CitjYW4gbmFtZSBpdCB3aGF0ZXZlciB5b3Ugd2FudCB1cCB0byA4IGNoYXJhY3RlcnMgbG9uZywgY29teFtuXSBpcyBqdXN0IGEgCitjb252ZW50aW9uKS4KK0dlbmVyYWxseSB0aGUgZmlsZXMgY29udGFpbmVkIGluIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSB0ZXh0IGZpbGVzLCB3aGljaCBjYW4KK2JlIHZpZXdlZCBieSAnY2F0IGZpbGVuYW1lJyBhbmQgeW91IGNhbiB3cml0ZSBhIHN0cmluZyB0byBzdWNoIGEgZmlsZSBieQorc2F5aW5nICdlY2hvIF9zdHJpbmdfID5maWxlbmFtZScuIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBzeXNjdGwgaW50ZXJmYWNlLgorRG9uJ3QgdXNlIGEgdGV4dCBlZGl0b3IgdG8gZWRpdCB0aGVzZSBmaWxlcywgYWx3YXlzIHVzZSAnZWNobycgKG9yICdjYXQnCit3aGVyZSBhcHByb3ByaWF0ZSkuCitXaGVuIHlvdSd2ZSBjcmVhdGVkIHRoZSBjb214W25dIGRpcmVjdG9yeSwgdHdvIGZpbGVzIGFyZSBjcmVhdGVkIGF1dG9tYWdpY2FsbHkKK2luIGl0OiAnYm9hcmR0eXBlJyBhbmQgJ3Byb3RvY29sJy4gWW91IGhhdmUgdG8gZmlsbCBpbiB0aGVzZSBmaWxlcyBjb3JyZWN0bHkKK2ZvciB5b3VyIGJvYXJkIGFuZCBwcm90b2NvbCB5b3UgaW50ZW5kIHRvIHVzZSAoc2VlIHRoZSBib2FyZCBhbmQgcHJvdG9jb2wgCitkZXNjcmlwdGlvbnMgaW4gdGhpcyBmaWxlIGJlbG93IG9yIHRoZSBleGFtcGxlIHNjcmlwdHMgaW4gdGhlICdldGMnIGRpcmVjdG9yeSkuCitBZnRlciBmaWxsaW5nIGluIHRoZXNlIGZpbGVzLCBvdGhlciBmaWxlcyB3aWxsIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5IGZvciAKK3NldHRpbmcgdGhlIHZhcmlvdXMgaGFyZHdhcmUtIGFuZCBwcm90b2NvbC1yZWxhdGVkIGluZm9ybWF0aW9ucyAoZm9yIGV4YW1wbGUKK2lycSBhbmQgaW8gYWRkcmVzc2VzLCBrZWVwYWxpdmUgdmFsdWVzIGV0Yy4pIFRoZXNlIGZpbGVzIGFyZSBzZXQgdG8gZGVmYXVsdCAKK3ZhbHVlcyB1cG9uIGNyZWF0aW9uLCBzbyB5b3UgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBjaGFuZ2UgYWxsIG9mIHRoZW0uCisKK1doZW4geW91J3JlIHJlYWR5IHdpdGggZmlsbGluZyBpbiB0aGUgZmlsZXMgaW4gdGhlIGNvbXhbbl0gZGlyZWN0b3J5LCB5b3UgY2FuCitjb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgbmV0d29yayBpbnRlcmZhY2Ugd2l0aCB0aGUgc3RhbmRhcmQgbmV0d29yayAKK2NvbmZpZ3VyYXRpb24gdXRpbGl0aWVzLiBJZiB5b3UncmUgdW5hYmxlIHRvIGJyaW5nIHRoZSBpbnRlcmZhY2VzIHVwLCBsb29rIHVwCit0aGUgdmFyaW91cyBrZXJuZWwgbG9nIGZpbGVzIG9uIHlvdXIgc3lzdGVtLCBhbmQgY29uc3VsdCB0aGUgbWVzc2FnZXMgZm9yCithIHByb2JhYmxlIHJlYXNvbi4KKworRVhBTVBMRQorCitUbyBjcmVhdGUgdGhlIGludGVyZmFjZSAnY29teDAnIHdoaWNoIGlzIHRoZSBmaXJzdCBjaGFubmVsIG9mIGEgQ09NWCBjYXJkOgorCitpbnNtb2QgY29teCAKKyMgaW5zbW9kIGNvbXgtaHctY29teCA7IGluc21vZCBjb214LXByb3RvLXBwcCAgKHRoZXNlIGFyZSB1c3VhbGx5CithdXRvbG9hZGVkIGlmIHlvdSB1c2UgdGhlIGtlcm5lbCBtb2R1bGUgbG9hZGVyKQorCitta2RpciAvcHJvYy9jb214L2NvbXgwCitlY2hvIGNvbXggPi9wcm9jL2NvbXgvY29teDAvYm9hcmR0eXBlCitlY2hvIDB4MzYwID4vcHJvYy9jb214L2NvbXgwL2lvCQk8LSBqdW1wZXItc2VsZWN0YWJsZSBJL08gcG9ydCAKK2VjaG8gMHgwYSA+L3Byb2MvY29teC9jb214MC9pcnEJCTwtIGp1bXBlci1zZWxlY3RhYmxlIElSUSBsaW5lCitlY2hvIDB4ZDAwMCA+L3Byb2MvY29teC9jb214MC9tZW1hZGRyCTwtIHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBtZW1vcnkKKwkJCQkJICAgYWRkcmVzcy4gQ09NWCB1c2VzIDY0IEtCLCBhbmQgdGhpcworCQkJCQkgICBjYW4gYmU6IDB4YTAwMCwgMHhiMDAwLCAweGMwMDAsIAorCQkJCQkgICAweGQwMDAsIDB4ZTAwMC4gQXZvaWQgY29uZmxpY3RzCisJCQkJCSAgIHdpdGggb3RoZXIgaGFyZHdhcmUuCitjYXQgPC9ldGMvc2lvbDEucm9tID4vcHJvYy9jb214L2NvbXgwL2Zpcm13YXJlIDwtIHRoZSBmaXJtd2FyZSBmb3IgdGhlIGNhcmQKK2VjaG8gSERMQyA+L3Byb2MvY29teC9jb214MC9wcm90b2NvbAk8LSB0aGUgZGF0YS1saW5rIHByb3RvY29sCitlY2hvIDEwID4vcHJvYy9jb214L2NvbXgwL2tlZXBhbGl2ZQk8LSB0aGUga2VlcGFsaXZlIGZvciB0aGUgcHJvdG9jb2wKK2lmY29uZmlnIGNvbXgwIDEuMi4zLjQgcG9pbnRvcG9pbnQgNS42LjcuOCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1NSA8LQorCQkJCQkgICBmaW5hbGx5IGNvbmZpZ3VyZSBpdCB3aXRoIGlmY29uZmlnCitDaGVjayBpdHMgc3RhdHVzOgorY2F0IC9wcm9jL2NvbXgvY29teDAvc3RhdHVzCisKK0lmIHlvdSB3YW50IHRvIHVzZSB0aGUgc2Vjb25kIGNoYW5uZWwgb2YgdGhpcyBib2FyZDoKKworbWtkaXIgL3Byb2MvY29teC9jb214MQorZWNobyBjb214ID4vcHJvYy9jb214L2NvbXgxL2JvYXJkdHlwZQorZWNobyAweDM2MCA+L3Byb2MvY29teC9jb214MS9pbwkKK2VjaG8gMTAgPi9wcm9jL2NvbXgvY29teDEvaXJxCQkKK2VjaG8gMHhkMDAwID4vcHJvYy9jb214L2NvbXgxL21lbWFkZHIKK2VjaG8gMSA+L3Byb2MvY29teC9jb214MS9jaGFubmVsCTwtIGNoYW5uZWxzIGFyZSBudW1iZXJlZCAKKwkJCQkJICAgYXMgMCAoZGVmYXVsdCkgYW5kIDEKKworTm93LCBjaGVjayBpZiB0aGUgZHJpdmVyIHJlY29nbml6ZWQgdGhhdCB5b3UncmUgZ29pbmcgdG8gdXNlIHRoZSBvdGhlcgorY2hhbm5lbCBvZiB0aGUgc2FtZSBhZGFwdGVyOgorCitjYXQgL3Byb2MvY29teC9jb214MC90d2luCitjb214MQorY2F0IC9wcm9jL2NvbXgvY29teDEvdHdpbgorY29teDAKKworWW91IGRvbid0IGhhdmUgdG8gbG9hZCB0aGUgZmlybXdhcmUgdHdpY2UsIGlmIHlvdSB1c2UgYm90aCBjaGFubmVscyBvZgorYW4gYWRhcHRlciwganVzdCB3cml0ZSBpdCBpbnRvIHRoZSBjaGFubmVsIDAncyAvcHJvYyBmaXJtd2FyZSBmaWxlLgorCitEZWZhdWx0IHZhbHVlczogaW8gMHgzNjAgZm9yIENPTVgsIDB4MzIwIChISUNPTVgpLCBpcnEgMTAsIG1lbWFkZHIgMHhkMDAwMAorCitUSEUgTE9DT01YIEhBUkRXQVJFIERSSVZFUgorCitUaGUgTG9DT01YIGRyaXZlciBkb2Vzbid0IHJlcXVpcmUgZmlybXdhcmUsIGFuZCBpdCBkb2Vzbid0IHVzZSBtZW1vcnkgZWl0aGVyLAorYnV0IGl0IHVzZXMgRE1BIGNoYW5uZWxzIDEgYW5kIDMuIFlvdSBjYW4gc2V0IHRoZSBjbG9jayByYXRlIChpZiBlbmFibGVkIGJ5CitqdW1wZXJzIG9uIHRoZSBib2FyZCkgYnkgd3JpdGluZyB0aGUga2JwcyB2YWx1ZSBpbnRvIHRoZSBmaWxlIG5hbWVkICdjbG9jaycuCitTZXQgaXQgdG8gJ2V4dGVybmFsJyAoaXQgaXMgdGhlIGRlZmF1bHQpIGlmIHlvdSBoYXZlIGV4dGVybmFsIGNsb2NrIHNvdXJjZS4KKworKE5vdGU6IGN1cnJlbnRseSB0aGUgTG9DT01YIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBpbnRlcm5hbCBjbG9jaykKKworVEhFIENPTVgsIENNWCBBTkQgSElDT01YIERSSVZFUlMKKworT24gdGhlIEhJQ09NWCwgQ09NWCBhbmQgQ01YLCB5b3UgaGF2ZSB0byBsb2FkIHRoZSBmaXJtd2FyZSAoaXQgaXMgZGlmZmVyZW50IGZvcgordGhlIHRocmVlIGNhcmRzISkuIEFsbCB0aGVzZSBhZGFwdGVycyBjYW4gc2hhcmUgdGhlIHNhbWUgbWVtb3J5CithZGRyZXNzICh3ZSB1c3VhbGx5IHVzZSAweGQwMDAwKS4gT24gdGhlIENNWCB5b3UgY2FuIHNldCB0aGUgaW50ZXJuYWwKK2Nsb2NrIHJhdGUgKGlmIGVuYWJsZWQgYnkganVtcGVycyBvbiB0aGUgc21hbGwgYWRhcHRlciBib2FyZHMpIGJ5IHdyaXRpbmcKK3RoZSBrYnBzIHZhbHVlIGludG8gdGhlICdjbG9jaycgZmlsZS4gWW91IGhhdmUgdG8gZG8gdGhpcyBiZWZvcmUgaW5pdGlhbGl6aW5nCit0aGUgY2FyZC4gSWYgeW91IHVzZSBib3RoIEhJQ09NWCBhbmQgQ01YL0NPTVggY2FyZHMsIGluaXRpYWxpemUgdGhlIEhJQ09NWAorZmlyc3QuIFRoZSBJL08gYWRkcmVzcyBvZiB0aGUgSElDT01YIGJvYXJkIGlzIG5vdCBjb25maWd1cmFibGUgYnkgYW55CittZXRob2QgYXZhaWxhYmxlIHRvIHRoZSB1c2VyOiBpdCBpcyBoYXJkd2lyZWQgdG8gMHgzMjAsIGFuZCBpZiB5b3UgaGF2ZSB0byAKK2NoYW5nZSBpdCwgY29uc3VsdCBJVEMtUHJvIEx0ZC4KKworVEhFIE1JWENPTSBEUklWRVIKKworVGhlIE1peENPTSBib2FyZCBkb2Vzbid0IHJlcXVpcmUgZmlybXdhcmUsIHRoZSBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGgKK2l0IHRocm91Z2ggSS9PIHBvcnRzLiBZb3UgY2FuIGhhdmUgdGhyZWUgb2YgdGhlc2UgY2FyZHMgaW4gb25lIG1hY2hpbmUuCisKK1RIRSBTTElDRUNPTSBEUklWRVIKKworVGhlIFNsaWNlQ09NIGJvYXJkIGRvZXNuJ3QgcmVxdWlyZSBmaXJtd2FyZS4gWW91IGNhbiBoYXZlIDQgb2YgdGhlc2UgY2FyZHMKK2luIG9uZSBtYWNoaW5lLiBUaGUgZHJpdmVyIGRvZXNuJ3QgKHlldCkgc3VwcG9ydCBzaGFyZWQgaW50ZXJydXB0cywgc28KK3lvdSB3aWxsIG5lZWQgYSBzZXBhcmF0ZSBJUlEgbGluZSBmb3IgZXZlcnkgYm9hcmQuCitSZWFkIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS50eHQgZm9yIGhlbHAgb24gY29uZmlndXJpbmcKK3RoaXMgYWRhcHRlci4KKworVEhFIEhETEMvUFBQIExJTkUgUFJPVE9DT0wgRFJJVkVSCisKK1RoZSBIRExDL1N5bmNQUFAgbGluZSBwcm90b2NvbCBkcml2ZXIgdXNlcyB0aGUga2VybmVsJ3MgYnVpbHQtaW4gc3luY3BwcAorZHJpdmVyIChzeW5jcHBwLm8pLiBZb3UgZG9uJ3QgaGF2ZSB0byBtYW51YWxseSBzZWxlY3Qgc3luY3BwcC5vIHdoZW4gYnVpbGRpbmcKK3RoZSBrZXJuZWwsIHRoZSBkZXBlbmRlbmNpZXMgY29tcGlsZSBpdCBpbiBhdXRvbWF0aWNhbGx5LgorCisKKworCitFWEFNUExFCisoc2V0dGluZyB1cCBodyBwYXJhbWV0ZXJzLCBzZWUgYWJvdmUpCisKKyMgdXNpbmcgSERMQzoKK2VjaG8gaGRsYyA+L3Byb2MvY29teC9jb214MC9wcm90b2NvbAorZWNobyAxMCA+L3Byb2MvY29teC9jb214MC9rZWVwYWxpdmUJPC0gbm90IG5lY2Vzc2FyeSwgMTAgaXMgdGhlIGRlZmF1bHQKK2lmY29uZmlnIGNvbXgwIDEuMi4zLjQgcG9pbnRvcG9pbnQgNS42LjcuOCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1NQorCisoc2V0dGluZyB1cCBodyBwYXJhbWV0ZXJzLCBzZWUgYWJvdmUpCisKKyMgdXNpbmcgUFBQOgorZWNobyBwcHAgPi9wcm9jL2NvbXgvY29teDAvcHJvdG9jb2wKK2lmY29uZmlnIGNvbXgwIHVwCitpZmNvbmZpZyBjb214MCAxLjIuMy40IHBvaW50b3BvaW50IDUuNi43LjggbmV0bWFzayAyNTUuMjU1LjI1NS4yNTUKKworCitUSEUgTEFQQiBMSU5FIFBST1RPQ09MIERSSVZFUgorCitGb3IgdGhpcywgeW91J2xsIG5lZWQgdG8gY29uZmlndXJlIExBUEIgc3VwcG9ydCAoU2VlICdMQVBCIERhdGEgTGluayBEcml2ZXInIGluCisnTmV0d29yayBvcHRpb25zJyBzZWN0aW9uKSBpbnRvIHlvdXIga2VybmVsICh0aGFua3MgdG8gSm9uYXRoYW4gTmF5bG9yIGZvciBoaXMgCitleGNlbGxlbnQgaW1wbGVtZW50YXRpb24pLiAKK2NvbXgtcHJvdG8tbGFwYi5vIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZmlsZXMgaW4gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeQorKHRoZSBkZWZhdWx0IHZhbHVlcyBpbiBwYXJlbnMpOiB0MSAoNSksIHQyICgxKSwgbjIgKDIwKSwgbW9kZSAoRFRFLCBTVEQpIGFuZAord2luZG93ICg3KS4gQWdyZWUgd2l0aCB0aGUgYWRtaW5pc3RyYXRvciBvZiB5b3VyIHBlZXIgcm91dGVyIG9uIHRoZXNlCitzZXR0aW5ncyAobW9zdCBwZW9wbGUgdXNlIGRlZmF1bHRzLCBidXQgeW91IGhhdmUgdG8ga25vdyBpZiB5b3UgYXJlIERURSBvcgorRENFKS4KKworRVhBTVBMRQorCisoc2V0dGluZyB1cCBodyBwYXJhbWV0ZXJzLCBzZWUgYWJvdmUpCitlY2hvIGxhcGIgPi9wcm9jL2NvbXgvY29teDAvcHJvdG9jb2wKK2VjaG8gZGNlID4vcHJvYy9jb214L2NvbXgwL21vZGUJCTwtIERDRSBpbnRlcmZhY2UgaW4gdGhpcyBleGFtcGxlCitpZmNvbmZpZyBjb214MCAxLjIuMy40IHBvaW50b3BvaW50IDUuNi43LjggbmV0bWFzayAyNTUuMjU1LjI1NS4yNTUKKworCitUSEUgRlJBTUUgUkVMQVkgUFJPVE9DT0wgRFJJVkVSCisKK1lvdSBET04nVCBuZWVkIGFueSBvdGhlciBmcmFtZSByZWxheSByZWxhdGVkIG1vZHVsZXMgZnJvbSB0aGUga2VybmVsIHRvIHVzZQorQ09NWC1GcmFtZSBSZWxheS4gVGhpcyBwcm90b2NvbCBpcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gdGhlIG90aGVycywgCitiZWNhdXNlIGl0IGFsbG93cyB0byB1c2UgJ3N1YmludGVyZmFjZXMnIG9yIERMQ0lzIHdpdGhpbiBvbmUgcGh5c2ljYWwgZGV2aWNlLgorRmlyc3QgeW91IGhhdmUgdG8gY3JlYXRlIHRoZSAnbWFzdGVyJyBkZXZpY2UgKHRoZSBhY3R1YWwgcGh5c2ljYWwgaW50ZXJmYWNlKQorYXMgeW91IHdvdWxkIGRvIGZvciBvdGhlciBwcm90b2NvbHMuIFNwZWNpZnkgJ2ZyYWQnIGFzIHByb3RvY29sIHR5cGUuCitOb3cgeW91IGNhbiBicmluZyB0aGlzIGludGVyZmFjZSB1cCBieSBzYXlpbmcgJ2lmY29uZmlnIGNvbXgwIHVwJyAob3Igd2hhdGV2ZXIKK3lvdSd2ZSBuYW1lZCB0aGUgaW50ZXJmYWNlKS4gRG8gbm90IGFzc2lnbiBhbnkgSVAgYWRkcmVzcyB0byB0aGlzIGludGVyZmFjZQorYW5kIGRvIG5vdCBzZXQgYW55IHJvdXRlcyB0aHJvdWdoIGl0LgorVGhlbiwgc2V0IHVwIHlvdXIgRExDSXMgdGhlIGZvbGxvd2luZyB3YXk6IGNyZWF0ZSBhIGNvbXggaW50ZXJmYWNlIGZvciBlYWNoCitETENJIHlvdSBpbnRlbmQgdG8gdXNlICh3aXRoIG1rZGlyKSwgYW5kIHdyaXRlICdkbGNpJyB0byB0aGUgJ2JvYXJkdHlwZScgZmlsZSwgCithbmQgJ2lldGYtaXAnIHRvIHRoZSAncHJvdG9jb2wnIGZpbGUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIAorZW5jYXBzdWxhdGlvbiB0eXBlIGlzIHRoaXMgKGFsc28gY2FsbGVkIGFzIFJGQzEyOTQvMTQ5MCBJUCBlbmNhcHN1bGF0aW9uKS4KK1dyaXRlIHRoZSBETENJIG51bWJlciB0byB0aGUgJ2RsY2knIGZpbGUsIGFuZCB3cml0ZSB0aGUgbmFtZSBvZiB0aGUgcGh5c2ljYWwKK0NPTVggZGV2aWNlIHRvIHRoZSBmaWxlIGNhbGxlZCAnbWFzdGVyJy4gCitOb3cgeW91IGNhbiBhc3NpZ24gYW4gSVAgYWRkcmVzcyB0byB0aGlzIGludGVyZmFjZSBhbmQgc2V0IHJvdXRlcyB1c2luZyBpdC4KK1NlZSB0aGUgZXhhbXBsZSBmaWxlIGZvciBmdXJ0aGVyIGluZm8gYW5kIGV4YW1wbGUgY29uZmlnIHNjcmlwdC4KK05vdGVzOiB0aGlzIGRyaXZlciBpbXBsZW1lbnRzIGEgRFRFIGludGVyZmFjZSB3aXRoIHBhcnRpYWxseSBpbXBsZW1lbnRlZAorUTkzM2EgTE1JLgorWW91IGNhbiBmaW5kIGFuIGV4dGVuc2l2ZWx5IGNvbW1lbnRlZCBleGFtcGxlIGluIHRoZSAnZXRjJyBkaXJlY3RvcnkuCisKK0ZVUlRIRVIgL3Byb2MgRklMRVMKKworYm9hcmR0eXBlOgorVHlwZSBvZiB0aGUgaGFyZHdhcmUuIFZhbGlkIHZhbHVlcyBhcmU6CisgJ2NvbXgnLCAnaGljb214JywgJ2xvY29teCcsICdjbXgnLCAnc2xpY2Vjb20nLgorCitwcm90b2NvbDoKK0RhdGEtbGluayBwcm90b2NvbCBvbiB0aGlzIGNoYW5uZWwuIENhbiBiZTogSERMQywgTEFQQiwgUFBQLCBGUkFECisKK3N0YXR1czoKK1lvdSBjYW4gcmVhZCB0aGUgY2hhbm5lbCdzIGFjdHVhbCBzdGF0dXMgZnJvbSB0aGUgJ3N0YXR1cycgZmlsZSwgZm9yIGV4YW1wbGUKKydjYXQgL3Byb2MvY29teC9jb214My9zdGF0dXMnLgorCitsaW5ldXBfZGVsYXk6CitJbnRlcnByZXRlZCBpbiBzZWNvbmRzIChkZWZhdWx0IGlzIDEpLiBVc2VkIHRvIGF2b2lkIGxpbmUgaml0dGVyOiB0aGUgc3lzdGVtCit3aWxsIGNvbnNpZGVyIHRoZSBsaW5lIHN0YXR1cyAnVVAnIG9ubHkgaWYgaXQgaXMgdXAgZm9yIGF0IGxlYXN0IHRoaXMgbnVtYmVyCitvZiBzZWNvbmRzLgorCitkZWJ1ZzogCitZb3UgY2FuIHNldCB2YXJpb3VzIGRlYnVnIG9wdGlvbnMgdGhyb3VnaCB0aGlzIGZpbGUuIFZhbGlkIG9wdGlvbnMgYXJlOgorJ2NvbXhfZXZlbnRzJywgJ2NvbXhfdHgnLCAnY29teF9yeCcsICdod19ldmVudHMnLCAnaHdfdHgnLCAnaHdfcngnLgorWW91IGNhbiBlbmFibGUgYSBkZWJ1ZyBvcHRpb25zIGJ5IHdyaXRpbmcgaXRzIG5hbWUgcHJlcGVuZGVkIGJ5IGEgJysnIGludG8KK3RoZSBkZWJ1ZyBmaWxlLCBmb3IgZXhhbXBsZSAnZWNobyArY29teF9yeCA+Y29teDAvZGVidWcnLiAKK0Rpc2FibGluZyBhbiBvcHRpb24gaGFwcGVucyBzaW1pbGFybHksIHVzZSB0aGUgJy0nIHByZWZpeCAKKyhlLmcuICdlY2hvIC1od19yeCA+ZGVidWcnKS4KK0RlYnVnIHJlc3VsdHMgY2FuIGJlIHJlYWQgZnJvbSB0aGUgZGVidWcgZmlsZSwgZm9yIGV4YW1wbGU6IAordGFpbCAtZiAvcHJvYy9jb214L2NvbXgyL2RlYnVnCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NvcHMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NvcHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzQ0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29wcy50eHQKQEAgLTAsMCArMSw2MyBAQAorVGV4dCBGaWxlIGZvciB0aGUgQ09QUyBMb2NhbFRhbGsgTGludXggZHJpdmVyIChjb3BzLmMpLgorCUJ5IEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+CisKK1RoaXMgZHJpdmVyIGhhcyB0d28gbW9kZXMgYW5kIHRoZXkgYXJlOiBEYXluYSBtb2RlIGFuZCBUYW5nZW50IG1vZGUuCitFYWNoIG1vZGUgY29ycmVzcG9uZHMgd2l0aCB0aGUgdHlwZSBvZiBjYXJkLiBJdCBoYXMgYmVlbiBmb3VuZAordGhhdCB0aGVyZSBhcmUgMiBtYWluIHR5cGVzIG9mIGNhcmRzIGFuZCBhbGwgb3RoZXIgY2FyZHMgYXJlCit0aGUgc2FtZSBhbmQganVzdCBoYXZlIGRpZmZlcmVudCBuYW1lcyBvciBvbmx5IGhhdmUgbWlub3IgZGlmZmVyZW5jZXMKK3N1Y2ggYXMgbW9yZSBJTyBwb3J0cy4gQXMgdGhpcyBkcml2ZXIgaXMgdGVzdGVkIGl0IHdpbGwKK2JlY29tZSBtb3JlIGNsZWFyIGV4YWN0bHkgd2hhdCBjYXJkcyBhcmUgc3VwcG9ydGVkLiAKKworUmlnaHQgbm93IHRoZXNlIGNhcmRzIGFyZSBrbm93biB0byB3b3JrIHdpdGggdGhlIENPUFMgZHJpdmVyLiBUaGUKK0xULTIwMCBjYXJkcyB3b3JrIGluIGEgc29tZXdoYXQgbW9yZSBsaW1pdGVkIGNhcGFjaXR5IHRoYW4gdGhlCitETDIwMCBjYXJkcywgd2hpY2ggd29yayB2ZXJ5IHdlbGwgYW5kIGFyZSBpbiB1c2UgYnkgbWFueSBwZW9wbGUuCisKK1RBTkdFTlQgZHJpdmVyIG1vZGU6CisJVGFuZ2VudCBBVEItSUksIE5vdmVsbCBOTC0xMDAwLCBEYXlzdGFyIERpZ2l0YWwgTFQtMjAwCitEQVlOQSBkcml2ZXIgbW9kZToKKwlEYXluYSBETDIwMDAvRGF5bmFUYWxrIFBDIChIYWxmIExlbmd0aCksIENPUFMgTFQtOTUsCisJRmFyYWxsb24gUGhvbmVORVQgUEMgSUlJLCBGYXJhbGxvbiBQaG9uZU5FVCBQQyBJSQorT3RoZXIgY2FyZHMgcG9zc2libHkgc3VwcG9ydGVkIG1vZGUgdW5rbm93biB0aG91Z2g6CisJRGF5bmEgREwyMDAwIChGdWxsIGxlbmd0aCkKKworVGhlIENPUFMgZHJpdmVyIGRlZmF1bHRzIHRvIHVzaW5nIERheW5hIG1vZGUuIFRvIGNoYW5nZSB0aGUgZHJpdmVyJ3MgCittb2RlIGlmIHlvdSBidWlsdCBhIGRyaXZlciB3aXRoIGR1YWwgc3VwcG9ydCB1c2UgYm9hcmRfdHlwZT0xIG9yCitib2FyZF90eXBlPTIgZm9yIERheW5hIG9yIFRhbmdlbnQgd2l0aCBpbnNtb2QuCisKKyoqIE9wZXJhdGlvbi9sb2FkaW5nIG9mIHRoZSBkcml2ZXIuCitVc2UgbW9kcHJvYmUgbGlrZSB0aGlzOgkvc2Jpbi9tb2Rwcm9iZSBjb3BzLm8gKElPICMpIChJUlEgIykKK0lmIHlvdSBkbyBub3Qgc3BlY2lmeSBhbnkgb3B0aW9ucyB0aGUgZHJpdmVyIHdpbGwgdHJ5IGFuZCB1c2UgdGhlIElPID0gMHgyNDAsCitJUlEgPSA1LiBBcyBvZiByaWdodCBub3cgSSB3b3VsZCBvbmx5IHVzZSBJUlEgNSBmb3IgdGhlIGNhcmQsIGlmIGF1dG9wcm9iaW5nLgorCitUbyBsb2FkIG11bHRpcGxlIENPUFMgZHJpdmVyIExvY2FsdGFsayBjYXJkcyB5b3UgY2FuIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nLgorCitpbnNtb2QgY29wcyBpbz0weDI0MCBpcnE9NQoraW5zbW9kIC1vIGNvcHMyIGNvcHMgaW89MHgyNjAgaXJxPTMKKworT3IgaW4gbGlsby5jb25mIHB1dCBzb21ldGhpbmcgbGlrZSB0aGlzOgorCWFwcGVuZD0iZXRoZXI9NSwweDI0MCxsdDAgZXRoZXI9MywweDI2MCxsdDEiCisKK1RoZW4gYnJpbmcgdXAgdGhlIGludGVyZmFjZSB3aXRoIGlmY29uZmlnLiBJdCB3aWxsIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKK2x0MCAgICAgICBMaW5rIGVuY2FwOlVOU1BFQyAgSFdhZGRyIDAwLTAwLTAwLTAwLTAwLTAwLTAwLUY3LTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwCisgICAgICAgICAgaW5ldCBhZGRyOjE5Mi4xNjguMS4yICBCY2FzdDoxOTIuMTY4LjEuMjU1ICBNYXNrOjI1NS4yNTUuMjU1LjAKKyAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBOT0FSUCBNVUxUSUNBU1QgIE1UVTo2MDAgIE1ldHJpYzoxCisgICAgICAgICAgUlggcGFja2V0czowIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKKyAgICAgICAgICBUWCBwYWNrZXRzOjAgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowIGNvbGw6MAorCisqKiBOZXRhdGFsayBDb25maWd1cmF0aW9uCitZb3Ugd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZSBhdGFsa2Qgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHRvIG1ha2UKK2l0IHdvcmsgd2l0aCB0aGUgY29wcy5jIGRyaXZlci4KKworKiBGb3Igc2luZ2xlIExUYWxrIGNhcmQgdXNlLgorZHVtbXkgLXNlZWQgLXBoYXNlIDIgLW5ldCAyMDAwIC1hZGRyIDIwMDAuMTAgLXpvbmUgIjEwMzMiCitsdDAgLXNlZWQgLXBoYXNlIDEgLW5ldCAxMDAwIC1hZGRyIDEwMDAuNTAgLXpvbmUgIjEwMzMiCisKKyogRm9yIG11bHRpcGxlIGNhcmRzLCBFdGhlcm5ldCBhbmQgTG9jYWxUYWxrLgorZXRoMCAtc2VlZCAtcGhhc2UgMiAtbmV0IDMwMDAgLWFkZHIgMzAwMC4yMCAtem9uZSAiMTAzMyIKK2x0MCAtc2VlZCAtcGhhc2UgMSAtbmV0IDEwMDAgLWFkZHIgMTAwMC41MCAtem9uZSAiMTAzMyIKKworKiBGb3IgbXVsdGlwbGUgTG9jYWxUYWxrIGNhcmRzLCBhbmQgYW4gRXRoZXJuZXQgY2FyZC4KKyogT3JkZXIgc2VlbXMgdG8gbWF0dGVyIGhlcmUsIEV0aGVybmV0IGxhc3QuCitsdDAgLXNlZWQgLXBoYXNlIDEgLW5ldCAxMDAwIC1hZGRyIDEwMDAuMTAgLXpvbmUgIkxvY2FsVGFsazEiCitsdDEgLXNlZWQgLXBoYXNlIDEgLW5ldCAyMDAwIC1hZGRyIDIwMDAuMjAgLXpvbmUgIkxvY2FsVGFsazIiCitldGgwIC1zZWVkIC1waGFzZSAyIC1uZXQgMzAwMCAtYWRkciAzMDAwLjMwIC16b25lICJFdGhlclRhbGsiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OGJlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dApAQCAtMCwwICsxLDcwMyBAQAorCitOT1RFCistLS0tCisKK1RoaXMgZG9jdW1lbnQgd2FzIGNvbnRyaWJ1dGVkIGJ5IENpcnJ1cyBMb2dpYyBmb3Iga2VybmVsIDIuMi41LiAgVGhpcyB2ZXJzaW9uCitoYXMgYmVlbiB1cGRhdGVkIGZvciAyLjMuNDggYnkgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorCitDaXJydXMgbWFrZSBhIGNvcHkgb2YgdGhpcyBkcml2ZXIgYXZhaWxhYmxlIGF0IHRoZWlyIHdlYnNpdGUsIGFzCitkZXNjcmliZWQgYmVsb3cuICBJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIHVzZSB0aGUgZHJpdmVyIHZlcnNpb24gd2hpY2gKK2NvbWVzIHdpdGggeW91ciBMaW51eCBkaXN0cmlidXRpb24uCisKKworCitDSVJSVVMgTE9HSUMgTEFOIENTODkwMC9DUzg5MjAgRVRIRVJORVQgQURBUFRFUlMKK0xpbnV4IE5ldHdvcmsgSW50ZXJmYWNlIERyaXZlciB2ZXIuIDIuMDAgPGtlcm5lbCAyLjMuNDg+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCisKK1RBQkxFIE9GIENPTlRFTlRTCisKKzEuMCBDSVJSVVMgTE9HSUMgTEFOIENTODkwMC9DUzg5MjAgRVRIRVJORVQgQURBUFRFUlMKKyAgICAxLjEgUHJvZHVjdCBPdmVydmlldyAKKyAgICAxLjIgRHJpdmVyIERlc2NyaXB0aW9uCisJMS4yLjEgRHJpdmVyIE5hbWUKKwkxLjIuMiBGaWxlIGluIHRoZSBEcml2ZXIgUGFja2FnZQorICAgIDEuMyBTeXN0ZW0gUmVxdWlyZW1lbnRzCisgICAgMS40IExpY2Vuc2luZyBJbmZvcm1hdGlvbgorCisyLjAgQURBUFRFUiBJTlNUQUxMQVRJT04gYW5kIENPTkZJR1VSQVRJT04KKyAgICAyLjEgQ1M4OTAwLWJhc2VkIEFkYXB0ZXIgQ29uZmlndXJhdGlvbgorICAgIDIuMiBDUzg5MjAtYmFzZWQgQWRhcHRlciBDb25maWd1cmF0aW9uIAorCiszLjAgTE9BRElORyBUSEUgRFJJVkVSIEFTIEEgTU9EVUxFCisKKzQuMCBDT01QSUxJTkcgVEhFIERSSVZFUgorICAgIDQuMSBDb21waWxpbmcgdGhlIERyaXZlciBhcyBhIExvYWRhYmxlIE1vZHVsZQorICAgIDQuMiBDb21waWxpbmcgdGhlIGRyaXZlciB0byBzdXBwb3J0IG1lbW9yeSBtb2RlCisgICAgNC4zIENvbXBpbGluZyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgUnggRE1BIAorICAgIDQuNCBDb21waWxpbmcgdGhlIERyaXZlciBpbnRvIHRoZSBLZXJuZWwKKworNS4wIFRFU1RJTkcgQU5EIFRST1VCTEVTSE9PVElORworICAgIDUuMSBLbm93biBEZWZlY3RzIGFuZCBMaW1pdGF0aW9ucworICAgIDUuMiBUZXN0aW5nIHRoZSBBZGFwdGVyCisgICAgICAgIDUuMi4xIERpYWdub3N0aWMgU2VsZi1UZXN0CisgICAgICAgIDUuMi4yIERpYWdub3N0aWMgTmV0d29yayBUZXN0CisgICAgNS4zIFVzaW5nIHRoZSBBZGFwdGVyJ3MgTEVEcworICAgIDUuNCBSZXNvbHZpbmcgSS9PIENvbmZsaWN0cworCis2LjAgVEVDSE5JQ0FMIFNVUFBPUlQKKyAgICA2LjEgQ29udGFjdGluZyBDaXJydXMgTG9naWMncyBUZWNobmljYWwgU3VwcG9ydAorICAgIDYuMiBJbmZvcm1hdGlvbiBSZXF1aXJlZCBCZWZvcmUgQ29udGFjdGluZyBUZWNobmljYWwgU3VwcG9ydAorICAgIDYuMyBPYnRhaW5pbmcgdGhlIExhdGVzdCBEcml2ZXIgVmVyc2lvbgorICAgIDYuNCBDdXJyZW50IG1haW50YWluZXIKKyAgICA2LjUgS2VybmVsIGJvb3QgcGFyYW1ldGVycworCisKKzEuMCBDSVJSVVMgTE9HSUMgTEFOIENTODkwMC9DUzg5MjAgRVRIRVJORVQgQURBUFRFUlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisxLjEgUFJPRFVDVCBPVkVSVklFVworCitUaGUgQ1M4OTAwLWJhc2VkIElTQSBFdGhlcm5ldCBBZGFwdGVycyBmcm9tIENpcnJ1cyBMb2dpYyBmb2xsb3cgCitJRUVFIDgwMi4zIHN0YW5kYXJkcyBhbmQgc3VwcG9ydCBoYWxmIG9yIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBpbiBJU0EgYnVzIAorY29tcHV0ZXJzIG9uIDEwIE1icHMgRXRoZXJuZXQgbmV0d29ya3MuICBUaGUgYWRhcHRlcnMgYXJlIGRlc2lnbmVkIGZvciBvcGVyYXRpb24gCitpbiAxNi1iaXQgSVNBIG9yIEVJU0EgYnVzIGV4cGFuc2lvbiBzbG90cyBhbmQgYXJlIGF2YWlsYWJsZSBpbiAKKzEwQmFzZVQtb25seSBvciAzLW1lZGlhIGNvbmZpZ3VyYXRpb25zICgxMEJhc2VULCAxMEJhc2UyLCBhbmQgQVVJIGZvciAxMEJhc2UtNSAKK29yIGZpYmVyIG5ldHdvcmtzKS4gIAorCitDUzg5MjAtYmFzZWQgYWRhcHRlcnMgYXJlIHNpbWlsYXIgdG8gdGhlIENTODkwMC1iYXNlZCBhZGFwdGVyIHdpdGggYWRkaXRpb25hbCAKK2ZlYXR1cmVzIGZvciBQbHVnIGFuZCBQbGF5IChQblApIHN1cHBvcnQgYW5kIFdha2V1cCBGcmFtZSByZWNvZ25pdGlvbi4gIEFzIAorc3VjaCwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VkdXJlcyBkaWZmZXIgc29tZXdoYXQgYmV0d2VlbiB0aGUgdHdvIHR5cGVzIG9mIAorYWRhcHRlcnMuICBSZWZlciB0byB0aGUgIkFkYXB0ZXIgQ29uZmlndXJhdGlvbiIgc2VjdGlvbiBmb3IgZGV0YWlscyBvbiAKK2NvbmZpZ3VyaW5nIGJvdGggdHlwZXMgb2YgYWRhcHRlcnMuCisKKworMS4yIERSSVZFUiBERVNDUklQVElPTgorCitUaGUgQ1M4OTAwL0NTODkyMCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciBmb3IgTGludXggc3VwcG9ydHMgdGhlIExpbnV4Cit2Mi4zLjQ4IG9yIGdyZWF0ZXIga2VybmVsLiAgSXQgY2FuIGJlIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbAorb3IgbG9hZGVkIGF0IHJ1bi10aW1lIGFzIGEgZGV2aWNlIGRyaXZlciBtb2R1bGUuCisKKzEuMi4xIERyaXZlciBOYW1lOiBjczg5eDAKKworMS4yLjIgRmlsZXMgaW4gdGhlIERyaXZlciBBcmNoaXZlOgorCitUaGUgZmlsZXMgaW4gdGhlIGRyaXZlciBhdCBDaXJydXMnIHdlYnNpdGUgaW5jbHVkZToKKworICByZWFkbWUudHh0ICAgICAgICAgLSB0aGlzIGZpbGUKKyAgYnVpbGQgICAgICAgICAgICAgIC0gYmF0Y2ggZmlsZSB0byBjb21waWxlIGNzODl4MC5jLgorICBjczg5eDAuYyAgICAgICAgICAgLSBkcml2ZXIgQyBjb2RlCisgIGNzODl4MC5oICAgICAgICAgICAtIGRyaXZlciBoZWFkZXIgZmlsZQorICBjczg5eDAubyAgICAgICAgICAgLSBwcmUtY29tcGlsZWQgbW9kdWxlIChmb3IgdjIuMi41IGtlcm5lbCkKKyAgY29uZmlnL0NvbmZpZy5pbiAgIC0gc2FtcGxlIGZpbGUgdG8gaW5jbHVkZSBjczg5eDAgZHJpdmVyIGluIHRoZSBrZXJuZWwuCisgIGNvbmZpZy9NYWtlZmlsZSAgICAtIHNhbXBsZSBmaWxlIHRvIGluY2x1ZGUgY3M4OXgwIGRyaXZlciBpbiB0aGUga2VybmVsLgorICBjb25maWcvU3BhY2UuYyAgICAgLSBzYW1wbGUgZmlsZSB0byBpbmNsdWRlIGNzODl4MCBkcml2ZXIgaW4gdGhlIGtlcm5lbC4KKworCisKKzEuMyBTWVNURU0gUkVRVUlSRU1FTlRTCisKK1RoZSBmb2xsb3dpbmcgaGFyZHdhcmUgaXMgcmVxdWlyZWQ6CisKKyAgICogQ2lycnVzIExvZ2ljIExBTiAoQ1M4OTAwLzIwLWJhc2VkKSBFdGhlcm5ldCBJU0EgQWRhcHRlciAgIAorCisgICAqIElCTSBvciBJQk0tY29tcGF0aWJsZSBQQyB3aXRoOgorICAgICAqIEFuIDgwMzg2IG9yIGhpZ2hlciBwcm9jZXNzb3IKKyAgICAgKiAxNiBieXRlcyBvZiBjb250aWd1b3VzIElPIHNwYWNlIGF2YWlsYWJsZSBiZXR3ZWVuIDIxMGggLSAzNzBoCisgICAgICogT25lIGF2YWlsYWJsZSBJUlEgKDUsMTAsMTEsb3IgMTIgZm9yIHRoZSBDUzg5MDAsIDMtNyw5LTE1IGZvciBDUzg5MjApLgorCisgICAqIEFwcHJvcHJpYXRlIGNhYmxlIChhbmQgY29ubmVjdG9yIGZvciBBVUksIDEwQkFTRS0yKSBmb3IgeW91ciBuZXR3b3JrCisgICAgIHRvcG9sb2d5LgorCitUaGUgZm9sbG93aW5nIHNvZnR3YXJlIGlzIHJlcXVpcmVkOgorCisqIExJTlVYIGtlcm5lbCB2ZXJzaW9uIDIuMy40OCBvciBoaWdoZXIKKworICAgKiBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSAoRE9TLWJhc2VkKQorCisgICAqIExJTlVYIGtlcm5lbCBzb3VyY2VzIGZvciB5b3VyIGtlcm5lbCAoaWYgY29tcGlsaW5nIGludG8ga2VybmVsKQorCisgICAqIEdOVSBUb29sa2l0IChnY2MgYW5kIG1ha2UpIHYyLjYgb3IgYWJvdmUgKGlmIGNvbXBpbGluZyBpbnRvIGtlcm5lbCAKKyAgICAgb3IgYSBtb2R1bGUpICAgCisKKworCisxLjQgTElDRU5TSU5HIElORk9STUFUSU9OCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgdmVyc2lvbiAxLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciAKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgCittb3JlIGRldGFpbHMuCisKK0ZvciBhIGZ1bGwgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCisKKzIuMCBBREFQVEVSIElOU1RBTExBVElPTiBhbmQgQ09ORklHVVJBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCb3RoIHRoZSBDUzg5MDAgYW5kIENTODkyMC1iYXNlZCBhZGFwdGVycyBjYW4gYmUgY29uZmlndXJlZCB1c2luZyBwYXJhbWV0ZXJzIAorc3RvcmVkIGluIGFuIG9uLWJvYXJkIEVFUFJPTS4gWW91IG11c3QgdXNlIHRoZSBET1MtYmFzZWQgQ1M4OTAwLzIwIFNldHVwIAorVXRpbGl0eSBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGFkYXB0ZXIncyBjb25maWd1cmF0aW9uIGluIEVFUFJPTS4gIAorCitXaGVuIGxvYWRpbmcgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IG1hbnkgb2YgdGhlIGFkYXB0ZXIncyAKK2NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBvbiB0aGUgY29tbWFuZC1saW5lIHRvIG92ZXJyaWRlIHRoZSBFRVBST00ncyBzZXR0aW5ncyAKK29yIGZvciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiB3aGVuIGFuIEVFUFJPTSBpcyBub3QgdXNlZC4gKENTODkyMC1iYXNlZCAKK2FkYXB0ZXJzIG11c3QgdXNlIGFuIEVFUFJPTS4pIFNlZSBTZWN0aW9uIDMuMCBMT0FESU5HIFRIRSBEUklWRVIgQVMgQSBNT0RVTEUuCisKK1NpbmNlIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSBpcyBhIERPUy1iYXNlZCBhcHBsaWNhdGlvbiwgeW91IG11c3QgaW5zdGFsbCAKK2FuZCBjb25maWd1cmUgdGhlIGFkYXB0ZXIgaW4gYSBET1MtYmFzZWQgc3lzdGVtIHVzaW5nIHRoZSBDUzg5MDAvMjAgU2V0dXAgCitVdGlsaXR5IGJlZm9yZSBpbnN0YWxsYXRpb24gaW4gdGhlIHRhcmdldCBMSU5VWCBzeXN0ZW0uICAoTm90IHJlcXVpcmVkIGlmIAoraW5zdGFsbGluZyBhIENTODkwMC1iYXNlZCBhZGFwdGVyIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGFjY2VwdGFibGUuKQorICAgICAKKworMi4xIENTODkwMC1CQVNFRCBBREFQVEVSIENPTkZJR1VSQVRJT04KKworQ1M4OTAwLWJhc2VkIGFkYXB0ZXJzIHNoaXBwZWQgZnJvbSBDaXJydXMgTG9naWMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgCit3aXRoIHRoZSBmb2xsb3dpbmcgImRlZmF1bHQiIHNldHRpbmdzOgorCisgIE9wZXJhdGlvbiBNb2RlOiAgICAgIE1lbW9yeSBNb2RlCisgIElSUTogICAgICAgICAgICAgICAgIDEwCisgIEJhc2UgSS9PIEFkZHJlc3M6ICAgIDMwMAorICBNZW1vcnkgQmFzZSBBZGRyZXNzOiBEMDAwMAorICBPcHRpbWl6YXRpb246CSAgICAgICBET1MgQ2xpZW50CisgIFRyYW5zbWlzc2lvbiBNb2RlOiAgIEhhbGYtZHVwbGV4CisgIEJvb3RQcm9tOiAgICAgICAgICAgIE5vbmUKKyAgTWVkaWEgVHlwZToJICAgICAgIEF1dG9kZXRlY3QgKDMtbWVkaWEgY2FyZHMpIG9yIAorICAgICAgICAgICAgICAgICAgICAgICAxMEJBU0UtVCAoMTBCQVNFLVQgb25seSBhZGFwdGVyKQorCitZb3Ugc2hvdWxkIG9ubHkgY2hhbmdlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaWYgY29uZmxpY3RzIHdpdGggCithbm90aGVyIGFkYXB0ZXIgZXhpc3RzLiBUbyBjaGFuZ2UgdGhlIGFkYXB0ZXIncyBjb25maWd1cmF0aW9uLCBydW4gdGhlIAorQ1M4OTAwLzIwIFNldHVwIFV0aWxpdHkuIAorCisKKzIuMiBDUzg5MjAtQkFTRUQgQURBUFRFUiBDT05GSUdVUkFUSU9OCisKK0NTODkyMC1iYXNlZCBhZGFwdGVycyBhcmUgc2hpcHBlZCBmcm9tIENpcnJ1cyBMb2dpYyBjb25maWd1cmVkIGFzIFBsdWcKK2FuZCBQbGF5IChQblApIGVuYWJsZWQuICBIb3dldmVyLCBzaW5jZSB0aGUgY3M4OXgwIGRyaXZlciBkb2VzIE5PVAorc3VwcG9ydCBQblAsIHlvdSBtdXN0IGluc3RhbGwgdGhlIENTODkyMCBhZGFwdGVyIGluIGEgRE9TLWJhc2VkIFBDIGFuZAorcnVuIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSB0byBkaXNhYmxlIFBuUCBhbmQgY29uZmlndXJlIHRoZQorYWRhcHRlciBiZWZvcmUgaW5zdGFsbGF0aW9uIGluIHRoZSB0YXJnZXQgTGludXggc3lzdGVtLiAgRmFpbHVyZSB0byBkbwordGhpcyB3aWxsIGxlYXZlIHRoZSBhZGFwdGVyIGluYWN0aXZlIGFuZCB0aGUgZHJpdmVyIHdpbGwgYmUgdW5hYmxlIHRvCitjb21tdW5pY2F0ZSB3aXRoIHRoZSBhZGFwdGVyLiAgCisKKworICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICAgICAgICAqICAgICAgICAgICAgICAgICAgICBDUzg5MjAtQkFTRUQgQURBUFRFUlM6ICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCisgICAgICAgICogQ1M4OTIwLUJBU0VEIEFEQVBURVJTIEFSRSBQTFVHIGFuZCBQTEFZIEVOQUJMRUQgQlkgREVGQVVMVC4gICogCisgICAgICAgICogVEhFIENTODlYMCBEUklWRVIgRE9FUyBOT1QgU1VQUE9SVCBQblAuIFRIRVJFRk9SRSwgWU9VIE1VU1QgICoKKyAgICAgICAgKiBSVU4gVEhFIENTODkwMC8yMCBTRVRVUCBVVElMSVRZIFRPIERJU0FCTEUgUG5QIFNVUFBPUlQgQU5EICAgKgorICAgICAgICAqIFRPIEFDVElWQVRFIFRIRSBBREFQVEVSLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisKKworMy4wIExPQURJTkcgVEhFIERSSVZFUiBBUyBBIE1PRFVMRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbG9hZGFibGUgbW9kdWxlLCB5b3UgY2FuIGxvYWQgdGhlIGRyaXZlciBtb2R1bGUKK3dpdGggdGhlICdtb2Rwcm9iZScgY29tbWFuZC4gIE1hbnkgb2YgdGhlIGFkYXB0ZXIncyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgY2FuIAorYmUgc3BlY2lmaWVkIGFzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdG8gdGhlIGxvYWQgY29tbWFuZC4gIFRoaXMgZmFjaWxpdHkgCitwcm92aWRlcyBhIG1lYW5zIHRvIG92ZXJyaWRlIHRoZSBFRVBST00ncyBzZXR0aW5ncyBvciBmb3IgaW50ZXJmYWNlIAorY29uZmlndXJhdGlvbiB3aGVuIGFuIEVFUFJPTSBpcyBub3QgdXNlZC4KKworRXhhbXBsZToKKworICAgIGluc21vZCBjczg5eDAubyBpbz0weDIwMCBpcnE9MHhBIG1lZGlhPWF1aQorCitUaGlzIGV4YW1wbGUgbG9hZHMgdGhlIG1vZHVsZSBhbmQgY29uZmlndXJlcyB0aGUgYWRhcHRlciB0byB1c2UgYW4gSU8gcG9ydCBiYXNlCithZGRyZXNzIG9mIDIwMGgsIGludGVycnVwdCAxMCwgYW5kIHVzZSB0aGUgQVVJIG1lZGlhIGNvbm5lY3Rpb24uICBUaGUgZm9sbG93aW5nCitjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgY29tbWFuZCBsaW5lOgorCisqIGlvPSMjIyAgICAgICAgICAgICAgIC0gc3BlY2lmeSBJTyBhZGRyZXNzICgyMDBoLTM2MGgpCisqIGlycT0jIyAgICAgICAgICAgICAgIC0gc3BlY2lmeSBpbnRlcnJ1cHQgbGV2ZWwKKyogdXNlX2RtYT0xICAgICAgICAgICAgLSBFbmFibGUgRE1BCisqIGRtYT0jICAgICAgICAgICAgICAgIC0gc3BlY2lmeSBkbWEgY2hhbm5lbCAoRHJpdmVyIGlzIGNvbXBpbGVkIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICBSeCBETUEgb25seSkKKyogZG1hc2l6ZT0jICgxNiBvciA2NCkgLSBETUEgc2l6ZSAxNksgb3IgNjRLLiAgRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gMTYuCisqIG1lZGlhPXJqNDUgICAgICAgICAgIC0gc3BlY2lmeSBtZWRpYSB0eXBlCisgICBvciBtZWRpYT1ibmMKKyAgIG9yIG1lZGlhPWF1aQorICAgb3IgbWVkYWk9YXV0bworKiBkdXBsZXg9ZnVsbCAgICAgICAgICAtIHNwZWNpZnkgZm9yY2VkIGhhbGYvZnVsbC9hdXRvbmVnb3RpYXRlIGR1cGxleAorICAgb3IgZHVwbGV4PWhhbGYKKyAgIG9yIGR1cGxleD1hdXRvCisqIGRlYnVnPSMgICAgICAgICAgICAgIC0gZGVidWcgbGV2ZWwgKG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBkcml2ZXIgd2FzIGNvbXBpbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlYnVnZ2luZykKKworTk9URVM6CisKK2EpIElmIGFuIEVFUFJPTSBpcyBwcmVzZW50LCBhbnkgc3BlY2lmaWVkIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIKKyAgIHdpbGwgb3ZlcnJpZGUgdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YWx1ZSBzdG9yZWQgaW4KKyAgIEVFUFJPTS4KKworYikgVGhlICJpbyIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kLWxpbmUuICAKKworYykgVGhlIGRyaXZlcidzIGhhcmR3YXJlIHByb2JlIHJvdXRpbmUgaXMgZGVzaWduZWQgdG8gYXZvaWQKKyAgIHdyaXRpbmcgdG8gSS9PIHNwYWNlIHVudGlsIGl0IGtub3dzIHRoYXQgdGhlcmUgaXMgYSBjczg5eDAKKyAgIGNhcmQgYXQgdGhlIHdyaXR0ZW4gYWRkcmVzc2VzLiAgVGhpcyBjb3VsZCBjYXVzZSBwcm9ibGVtcworICAgd2l0aCBkZXZpY2UgcHJvYmluZy4gIFRvIGF2b2lkIHRoaXMgYmVoYXZpb3VyLCBhZGQgb25lCisgICB0byB0aGUgYGlvPScgbW9kdWxlIHBhcmFtZXRlci4gIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UKKyAgIHRoZSBJL08gYWRkcmVzcywgYnV0IGl0IGlzIGEgZmxhZyB0byB0ZWxsIHRoZSBkcml2ZXIKKyAgIHRvcGFydGlhbGx5IGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlIGJlZm9yZSB0cnlpbmcgdG8KKyAgIGlkZW50aWZ5IHRoZSBjYXJkLiAgVGhpcyBjb3VsZCBiZSBkYW5nZXJvdXMgaWYgeW91IGFyZQorICAgbm90IHN1cmUgdGhhdCB0aGVyZSBpcyBhIGNzODl4MCBjYXJkIGF0IHRoZSBwcm92aWRlZCBhZGRyZXNzLgorCisgICBGb3IgZXhhbXBsZSwgdG8gc2NhbiBmb3IgYW4gYWRhcHRlciBsb2NhdGVkIGF0IElPIGJhc2UgMHgzMDAsCisgICBzcGVjaWZ5IGFuIElPIGFkZHJlc3Mgb2YgMHgzMDEuICAKKworZCkgVGhlICJkdXBsZXg9YXV0byIgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgQ1M4OTIwLgorCitlKSBUaGUgbWluaW11bSBjb21tYW5kLWxpbmUgY29uZmlndXJhdGlvbiByZXF1aXJlZCBpZiBhbiBFRVBST00gaXMKKyAgIG5vdCBwcmVzZW50IGlzOgorCisgICBpbyAKKyAgIGlycSAKKyAgIG1lZGlhIHR5cGUgKG5vIGF1dG9kZXRlY3QpCisKK2YpIFRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZSBDUzg5WFggZGVmYXVsdHMgKHZhbHVlcworICAgdXNlZCB3aXRoIG5vIEVFUFJPTSBvciBjb21tYW5kLWxpbmUgYXJndW1lbnQpLgorCisgICAqIERNQSBCdXJzdCA9IGVuYWJsZWQKKyAgICogSU9DSFJEWSBFbmFibGVkID0gZW5hYmxlZAorICAgKiBVc2VTQSA9IGVuYWJsZWQKKyAgICogQ1M4OTAwIGRlZmF1bHRzIHRvIGhhbGYtZHVwbGV4IGlmIG5vdCBzcGVjaWZpZWQgb24gY29tbWFuZC1saW5lCisgICAqIENTODkyMCBkZWZhdWx0cyB0byBhdXRvbmVnIGlmIG5vdCBzcGVjaWZpZWQgb24gY29tbWFuZC1saW5lCisgICAqIFVzZSByZXNldCBkZWZhdWx0cyBmb3Igb3RoZXIgY29uZmlnIHBhcmFtZXRlcnMKKyAgICogZG1hX21vZGUgPSAwCisKK2cpIFlvdSBjYW4gdXNlIGlmY29uZmlnIHRvIHNldCB0aGUgYWRhcHRlcidzIEV0aGVybmV0IGFkZHJlc3MuCisKK2gpIE1hbnkgTGludXggZGlzdHJpYnV0aW9ucyB1c2UgdGhlICdtb2Rwcm9iZScgY29tbWFuZCB0byBsb2FkCisgICBtb2R1bGVzLiAgVGhpcyBwcm9ncmFtIHVzZXMgdGhlICcvZXRjL2NvbmYubW9kdWxlcycgZmlsZSB0bworICAgZGV0ZXJtaW5lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gd2hpY2ggaXMgcGFzc2VkIHRvIGEgZHJpdmVyCisgICBtb2R1bGUgd2hlbiBpdCBpcyBsb2FkZWQuICBBbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aGljaCBhcmUKKyAgIGRlc2NyaWJlZCBhYm92ZSBtYXkgYmUgcGxhY2VkIHdpdGhpbiAvZXRjL2NvbmYubW9kdWxlcy4KKworICAgRm9yIGV4YW1wbGU6CisKKyAgID4gY2F0IC9ldGMvY29uZi5tb2R1bGVzCisgICAuLi4KKyAgIGFsaWFzIGV0aDAgY3M4OXgwCisgICBvcHRpb25zIGNzODl4MCBpbz0weDAyMDAgZG1hPTUgdXNlX2RtYT0xCisgICAuLi4KKworICAgSW4gdGhpcyBleGFtcGxlIHdlIGFyZSB0ZWxsaW5nIHRoZSBtb2R1bGUgc3lzdGVtIHRoYXQgdGhlCisgICBldGhlcm5ldCBkcml2ZXIgZm9yIHRoaXMgbWFjaGluZSBzaG91bGQgdXNlIHRoZSBjczg5eDAgZHJpdmVyLiAgV2UKKyAgIGFyZSBhc2tpbmcgJ21vZHByb2JlJyB0byBwYXNzIHRoZSAnaW8nLCAnZG1hJyBhbmQgJ3VzZV9kbWEnCisgICBhcmd1bWVudHMgdG8gdGhlIGRyaXZlciB3aGVuIGl0IGlzIGxvYWRlZC4KKworaSkgQ2lycnVzIHJlY29tbWVuZCB0aGF0IHRoZSBjczg5eDAgdXNlIHRoZSBJU0EgRE1BIGNoYW5uZWxzIDUsIDYgb3IKKyAgIDcuICBZb3Ugd2lsbCBwcm9iYWJseSBmaW5kIHRoYXQgb3RoZXIgRE1BIGNoYW5uZWxzIHdpbGwgbm90IHdvcmsuCisKK2opIFRoZSBjczg5eDAgc3VwcG9ydHMgRE1BIGZvciByZWNlaXZpbmcgb25seS4gIERNQSBtb2RlIGlzCisgICBzaWduaWZpY2FudGx5IG1vcmUgZWZmaWNpZW50LiAgRmxvb2RpbmcgYSA0MDAgTUh6IENlbGVyb24gbWFjaGluZQorICAgd2l0aCBsYXJnZSBwaW5nIHBhY2tldHMgY29uc3VtZXMgODIlIG9mIGl0cyBDUFUgY2FwYWNpdHkgaW4gbm9uLURNQQorICAgbW9kZS4gIFdpdGggRE1BIHRoaXMgaXMgcmVkdWNlZCB0byA0NSUuCisKK2spIElmIHlvdXIgTGludXgga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIGluYnVpbHQgcGx1Zy1hbmQtcGxheQorICAgc3VwcG9ydCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNzODl4MCBjYXJkCisgICB3aXRoIHRoZSBjb21tYW5kCisKKyAgIGNhdCAvcHJvYy9pc2FwbnAKKworbCkgSWYgZHVyaW5nIERNQSBvcGVyYXRpb24geW91IGZpbmQgZXJyYXRpYyBiZWhhdmlvciBvciBuZXR3b3JrIGRhdGEKKyAgIGNvcnJ1cHRpb24geW91IHNob3VsZCB1c2UgeW91ciBQQydzIEJJT1MgdG8gc2xvdyB0aGUgRUlTQSBidXMgY2xvY2suCisKK20pIElmIHRoZSBjczg5eDAgZHJpdmVyIGlzIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbAorICAgKG5vbi1tb2R1bGFyKSB0aGVuIGl0cyBJL08gYWRkcmVzcyBpcyBhdXRvbWF0aWNhbGx5IGRldGVybWluZWQgYnkKKyAgIElTQSBidXMgcHJvYmluZy4gIFRoZSBJUlEgbnVtYmVyLCBtZWRpYSBvcHRpb25zLCBldGMgYXJlIGRldGVybWluZWQKKyAgIGZyb20gdGhlIGNhcmQncyBFRVBST00uCisKK24pIElmIHRoZSBjczg5eDAgZHJpdmVyIGlzIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCwgRE1BCisgICBtb2RlIG1heSBiZSBzZWxlY3RlZCBieSBwcm92aWRpbmcgdGhlIGtlcm5lbCB3aXRoIGEgYm9vdCBvcHRpb24KKyAgICdjczg5eDBfZG1hPU4nIHdoZXJlICdOJyBpcyB0aGUgZGVzaXJlZCBETUEgY2hhbm5lbCBudW1iZXIgKDUsIDYgb3IgNykuCisKKyAgIEtlcm5lbCBib290IG9wdGlvbnMgbWF5IGJlIHByb3ZpZGVkIG9uIHRoZSBMSUxPIGNvbW1hbmQgbGluZToKKworCUxJTE8gYm9vdDogbGludXggY3M4OXgwX2RtYT01CisKKyAgIG9yIHRoZXkgbWF5IGJlIHBsYWNlZCBpbiAvZXRjL2xpbG8uY29uZjoKKworCWltYWdlPS9ib290L2J6SW1hZ2UtMi4zLjQ4CisJICBhcHBlbmQ9ImNzODl4MF9kbWE9NSIKKwkgIGxhYmVsPWxpbnV4CisJICByb290PS9kZXYvaGRhNQorCSAgcmVhZC1vbmx5CisKKyAgIFRoZSBETUEgUnggYnVmZmVyIHNpemUgaXMgaGFyZHdpcmVkIHRvIDE2IGtieXRlcyBpbiB0aGlzIG1vZGUuCisgICAoNjRrIG1vZGUgaXMgbm90IGF2YWlsYWJsZSkuCisKKworNC4wIENPTVBJTElORyBUSEUgRFJJVkVSCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBjczg5eDAgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgb3IgY29tcGlsZWQgaW50bworYSBsb2FkYWJsZSBkZXZpY2UgZHJpdmVyIG1vZHVsZS4KKworCis0LjEgQ09NUElMSU5HIFRIRSBEUklWRVIgQVMgQSBMT0FEQUJMRSBNT0RVTEUKKworVG8gY29tcGlsZSB0aGUgZHJpdmVyIGludG8gYSBsb2FkYWJsZSBtb2R1bGUsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgCisoc2luZ2xlIGNvbW1hbmQgbGluZSwgd2l0aG91dCBxdW90ZXMpOgorCisiZ2NjIC1EX19LRVJORUxfXyAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgLUkvdXNyL3NyYy9saW51eC9uZXQvaW5ldCAtV2FsbCAKKy1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETU9EVUxFIC1EQ09ORklHX01PRFZFUlNJT05TIAorLWMgY3M4OXgwLmMiCisKKzQuMiBDT01QSUxJTkcgVEhFIERSSVZFUiBUTyBTVVBQT1JUIE1FTU9SWSBNT0RFCisKK1N1cHBvcnQgZm9yIG1lbW9yeSBtb2RlIHdhcyBub3QgY2FycmllZCBvdmVyIGludG8gdGhlIDIuMyBzZXJpZXMga2VybmVscy4KKworNC4zIENPTVBJTElORyBUSEUgRFJJVkVSIFRPIFNVUFBPUlQgUnggRE1BCisKK1RoZSBjb21waWxlLXRpbWUgb3B0aW9uYWxpdHkgZm9yIERNQSB3YXMgcmVtb3ZlZCBpbiB0aGUgMi4zIGtlcm5lbAorc2VyaWVzLiAgRE1BIHN1cHBvcnQgaXMgbm93IHVuY29uZGl0aW9uYWxseSBwYXJ0IG9mIHRoZSBkcml2ZXIuICBJdCBpcworZW5hYmxlZCBieSB0aGUgJ3VzZV9kbWE9MScgbW9kdWxlIG9wdGlvbi4KKworNC40IENPTVBJTElORyBUSEUgRFJJVkVSIElOVE8gVEhFIEtFUk5FTAorCitJZiB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbiBhbHJlYWR5IGhhcyBzdXBwb3J0IGZvciB0aGUgY3M4OXgwIGRyaXZlcgordGhlbiBzaW1wbHkgY29weSB0aGUgc291cmNlIGZpbGUgdG8gdGhlIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0CitkaXJlY3RvcnkgdG8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgb25lcyBhbmQgcnVuIHRoZSBtYWtlIHV0aWxpdHkgdG8KK3JlYnVpbGQgdGhlIGtlcm5lbC4gIFNlZSBTdGVwIDMgZm9yIHJlYnVpbGRpbmcgdGhlIGtlcm5lbC4KKworSWYgeW91ciBMaW51eCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBjczg5eDAgZHJpdmVyLCB5b3UgbmVlZCB0byBlZGl0IHRocmVlIAorY29uZmlndXJhdGlvbiBmaWxlcywgY29weSB0aGUgc291cmNlIGZpbGUgdG8gdGhlIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0CitkaXJlY3RvcnksIGFuZCB0aGVuIHJ1biB0aGUgbWFrZSB1dGlsaXR5IHRvIHJlYnVpbGQgdGhlIGtlcm5lbC4KKworMS4gRWRpdCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgYnkgYWRkaW5nIHRoZSBzdGF0ZW1lbnRzIGFzCitpbmRpY2F0ZWQuICAoV2hlbiBwb3NzaWJsZSwgdHJ5IHRvIGxvY2F0ZSB0aGUgYWRkZWQgdGV4dCB0byB0aGUgc2VjdGlvbiBvZiB0aGUKK2ZpbGUgY29udGFpbmluZyBzaW1pbGFyIHN0YXRlbWVudHMpLgorCisKK2EuKSBJbiAvdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldC9Db25maWcuaW4sIGFkZDoKKwordHJpc3RhdGUgJ0NTODl4MCBzdXBwb3J0JyBDT05GSUdfQ1M4OXgwCisKK0V4YW1wbGU6CisKKyAgICAgaWYgWyAiJENPTkZJR19FWFBFUklNRU5UQUwiID0gInkiIF07IHRoZW4KKyAgICAgICB0cmlzdGF0ZSAnSUNMIEV0aGVyVGVhbSAxNmkvMzIgc3VwcG9ydCcgQ09ORklHX0VUSDE2SQorICAgICBmaQorCisgICAgIHRyaXN0YXRlICdDUzg5eDAgc3VwcG9ydCcgQ09ORklHX0NTODl4MAorCisgICAgIHRyaXN0YXRlICdORTIwMDAvTkUxMDAwIHN1cHBvcnQnIENPTkZJR19ORTIwMDAKKyAgICAgaWYgWyAiJENPTkZJR19FWFBFUklNRU5UQUwiID0gInkiIF07IHRoZW4KKyAgICAgICB0cmlzdGF0ZSAnTkk1MjEwIHN1cHBvcnQnIENPTkZJR19OSTUyCisKKworYi4pIEluIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0L01ha2VmaWxlLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lczogCisKK2lmZXEgKCQoQ09ORklHX0NTODl4MCkseSkKK0xfT0JKUyArPSBjczg5eDAubworZWxzZQorICBpZmVxICgkKENPTkZJR19DUzg5eDApLG0pCisgIE1fT0JKUyArPSBjczg5eDAubworICBlbmRpZgorZW5kaWYKKworCitjLikgSW4gL2xpbnV4L2RyaXZlcnMvbmV0L1NwYWNlLmMgZmlsZSwgYWRkIHRoZSBsaW5lOgorCitleHRlcm4gaW50IGNzODl4MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisKK0V4YW1wbGU6CisKKyBleHRlcm4gaW50IHVsdHJhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgZXh0ZXJuIGludCB3ZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworIGV4dGVybiBpbnQgZWwyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyBleHRlcm4gaW50IGNzODl4MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisgZXh0ZXJuIGludCBuZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworIGV4dGVybiBpbnQgaHBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKKyBleHRlcm4gaW50IGhwX3BsdXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKKworCitBbHNvIGFkZDoKKworICNpZmRlZiBDT05GSUdfQ1M4OXgwCisgCXsgY3M4OXgwX3Byb2JlLDAgfSwKKyAjZW5kaWYKKworCisyLikgQ29weSB0aGUgZHJpdmVyIHNvdXJjZSBmaWxlcyAoY3M4OXgwLmMgYW5kIGNzODl4MC5oKSAKK2ludG8gdGhlIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0IGRpcmVjdG9yeS4KKworCiszLikgR28gdG8gL3Vzci9zcmMvbGludXggZGlyZWN0b3J5IGFuZCBydW4gJ21ha2UgY29uZmlnJyBmb2xsb3dlZCBieSAnbWFrZScgCisob3IgbWFrZSBiekltYWdlKSB0byByZWJ1aWxkIHRoZSBrZXJuZWwuIAorCis0LikgVXNlIHRoZSBET1MgJ3NldHVwJyB1dGlsaXR5IHRvIGRpc2FibGUgcGx1ZyBhbmQgcGxheSBvbiB0aGUgTklDLgorCisKKzUuMCBURVNUSU5HIEFORCBUUk9VQkxFU0hPT1RJTkcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNS4xIEtOT1dOIERFRkVDVFMgYW5kIExJTUlUQVRJT05TCisKK1JlZmVyIHRvIHRoZSBSRUxFQVNFLlRYVCBmaWxlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhpcyBhcmNoaXZlIGZvciBhIGxpc3Qgb2YgCitrbm93biBkZWZlY3RzLCBkcml2ZXIgbGltaXRhdGlvbnMsIGFuZCB3b3JrIGFyb3VuZHMuCisKKworNS4yIFRFU1RJTkcgVEhFIEFEQVBURVIKKworT25jZSB0aGUgYWRhcHRlciBoYXMgYmVlbiBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQsIHRoZSBkaWFnbm9zdGljIG9wdGlvbiBvZiAKK3RoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSBjYW4gYmUgdXNlZCB0byB0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSAKK2FkYXB0ZXIgYW5kIGl0cyBuZXR3b3JrIGNvbm5lY3Rpb24uICBVc2UgdGhlIGRpYWdub3N0aWNzICdTZWxmIFRlc3QnIG9wdGlvbiB0bwordGVzdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYWRhcHRlciB3aXRoIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHlvdSBoYXZlCithc3NpZ25lZC4gWW91IGNhbiB1c2UgdGhlIGRpYWdub3N0aWNzICdOZXR3b3JrIFRlc3QnIHRvIHRlc3QgdGhlIGFiaWxpdHkgb2YgdGhlCithZGFwdGVyIHRvIGNvbW11bmljYXRlIGFjcm9zcyB0aGUgRXRoZXJuZXQgd2l0aCBhbm90aGVyIFBDIGVxdWlwcGVkIHdpdGggYSAKK0NTODkwMC8yMC1iYXNlZCBhZGFwdGVyIGNhcmQgKGl0IG11c3QgYWxzbyBiZSBydW5uaW5nIHRoZSBDUzg5MDAvMjAgU2V0dXAgCitVdGlsaXR5KS4KKworICAgICAgICAgTk9URTogVGhlIFNldHVwIFV0aWxpdHkncyBkaWFnbm9zdGljcyBhcmUgZGVzaWduZWQgdG8gcnVuIGluIGEKKyAgICAgICAgIERPUy1vbmx5IG9wZXJhdGluZyBzeXN0ZW0gZW52aXJvbm1lbnQuICBETyBOT1QgcnVuIHRoZSBkaWFnbm9zdGljcyAKKyAgICAgICAgIGZyb20gYSBET1Mgb3IgY29tbWFuZCBwcm9tcHQgc2Vzc2lvbiB1bmRlciBXaW5kb3dzIDk1LCBXaW5kb3dzIE5ULCAKKyAgICAgICAgIE9TLzIsIG9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW0uCisKK1RvIHJ1biB0aGUgZGlhZ25vc3RpY3MgdGVzdHMgb24gdGhlIENTODkwMC8yMCBhZGFwdGVyOgorCisgICAxLikgQm9vdCBET1Mgb24gdGhlIFBDIGFuZCBzdGFydCB0aGUgQ1M4OTAwLzIwIFNldHVwIFV0aWxpdHkuCisKKyAgIDIuKSBUaGUgYWRhcHRlcidzIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBkaXNwbGF5ZWQuICBIaXQgdGhlIEVOVEVSIGtleSB0bworICAgICAgIGdldCB0byB0aGUgbWFpbiBtZW51LgorCisgICA0LikgU2VsZWN0ICdEaWFnbm9zdGljcycgKEFMVC1HKSBmcm9tIHRoZSBtYWluIG1lbnUuICAKKyAgICAgICAqIFNlbGVjdCAnU2VsZi1UZXN0JyB0byB0ZXN0IHRoZSBhZGFwdGVyJ3MgYmFzaWMgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAqIFNlbGVjdCAnTmV0d29yayBUZXN0JyB0byB0ZXN0IHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYW5kIGNhYmxpbmcuCisKKworNS4yLjEgRElBR05PU1RJQyBTRUxGLVRFU1QKKworVGhlIGRpYWdub3N0aWMgc2VsZi10ZXN0IGNoZWNrcyB0aGUgYWRhcHRlcidzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgYXMgd2VsbCBhcyAKK2l0cyBhYmlsaXR5IHRvIGNvbW11bmljYXRlIGFjcm9zcyB0aGUgSVNBIGJ1cyBiYXNlZCBvbiB0aGUgc3lzdGVtIHJlc291cmNlcyAKK2Fzc2lnbmVkIGR1cmluZyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiAgVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgcGVyZm9ybWVkOgorCisgICAqIElPIFJlZ2lzdGVyIFJlYWQvV3JpdGUgVGVzdAorICAgICBUaGUgSU8gUmVnaXN0ZXIgUmVhZC9Xcml0ZSB0ZXN0IGluc3VyZXMgdGhhdCB0aGUgQ1M4OTAwLzIwIGNhbiBiZSAKKyAgICAgYWNjZXNzZWQgaW4gSU8gbW9kZSwgYW5kIHRoYXQgdGhlIElPIGJhc2UgYWRkcmVzcyBpcyBjb3JyZWN0LgorCisgICAqIFNoYXJlZCBNZW1vcnkgVGVzdAorICAgICBUaGUgU2hhcmVkIE1lbW9yeSB0ZXN0IGluc3VyZXMgdGhlIENTODkwMC8yMCBjYW4gYmUgYWNjZXNzZWQgaW4gbWVtb3J5IAorICAgICBtb2RlIGFuZCB0aGF0IHRoZSByYW5nZSBvZiBtZW1vcnkgYWRkcmVzc2VzIGFzc2lnbmVkIGRvZXMgbm90IGNvbmZsaWN0IAorICAgICB3aXRoIG90aGVyIGRldmljZXMgaW4gdGhlIHN5c3RlbS4KKworICAgKiBJbnRlcnJ1cHQgVGVzdAorICAgICBUaGUgSW50ZXJydXB0IHRlc3QgaW5zdXJlcyB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIHdpdGggdGhlIGFzc2lnbmVkIElSUQorICAgICBzaWduYWwuCisKKyAgICogRUVQUk9NIFRlc3QKKyAgICAgVGhlIEVFUFJPTSB0ZXN0IGluc3VyZXMgdGhlIEVFUFJPTSBjYW4gYmUgcmVhZC4KKworICAgKiBDaGlwIFJBTSBUZXN0CisgICAgIFRoZSBDaGlwIFJBTSB0ZXN0IGluc3VyZXMgdGhlIDRLIG9mIG1lbW9yeSBpbnRlcm5hbCB0byB0aGUgQ1M4OTAwLzIwIGlzCisgICAgIHdvcmtpbmcgcHJvcGVybHkuCisKKyAgICogSW50ZXJuYWwgTG9vcC1iYWNrIFRlc3QKKyAgICAgVGhlIEludGVybmFsIExvb3AgQmFjayB0ZXN0IGluc3VyZXMgdGhlIGFkYXB0ZXIncyB0cmFuc21pdHRlciBhbmQgCisgICAgIHJlY2VpdmVyIGFyZSBvcGVyYXRpbmcgcHJvcGVybHkuICBJZiB0aGlzIHRlc3QgZmFpbHMsIG1ha2Ugc3VyZSB0aGUgCisgICAgIGFkYXB0ZXIncyBjYWJsZSBpcyBjb25uZWN0ZWQgdG8gdGhlIG5ldHdvcmsgKGNoZWNrIGZvciBMRUQgYWN0aXZpdHkgZm9yIAorICAgICBleGFtcGxlKS4KKworICAgKiBCb290IFBST00gVGVzdAorICAgICBUaGUgQm9vdCBQUk9NICB0ZXN0IGluc3VyZXMgdGhlIEJvb3QgUFJPTSBpcyBwcmVzZW50LCBhbmQgY2FuIGJlIHJlYWQuCisgICAgIEZhaWx1cmUgaW5kaWNhdGVzIHRoZSBCb290IFBST00gIHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IHJlYWQgZHVlIHRvIGEKKyAgICAgaGFyZHdhcmUgcHJvYmxlbSBvciBkdWUgdG8gYSBjb25mbGljdHMgb24gdGhlIEJvb3QgUFJPTSBhZGRyZXNzCisgICAgIGFzc2lnbm1lbnQuIChUZXN0IG9ubHkgYXBwbGllcyBpZiB0aGUgYWRhcHRlciBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUKKyAgICAgQm9vdCBQUk9NIG9wdGlvbi4pCisKK0ZhaWx1cmUgb2YgYSB0ZXN0IGl0ZW0gaW5kaWNhdGVzIGEgcG9zc2libGUgc3lzdGVtIHJlc291cmNlIGNvbmZsaWN0IHdpdGggCithbm90aGVyIGRldmljZSBvbiB0aGUgSVNBIGJ1cy4gIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCB1c2UgdGhlIE1hbnVhbCBTZXR1cCAKK29wdGlvbiB0byByZWNvbmZpZ3VyZSB0aGUgYWRhcHRlciBieSBzZWxlY3RpbmcgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIHRoZSBzeXN0ZW0KK3Jlc291cmNlIHRoYXQgZmFpbGVkLgorCisKKzUuMi4yIERJQUdOT1NUSUMgTkVUV09SSyBURVNUCisKK1RoZSBEaWFnbm9zdGljIE5ldHdvcmsgVGVzdCB2ZXJpZmllcyBhIHdvcmtpbmcgbmV0d29yayBjb25uZWN0aW9uIGJ5IAordHJhbnNmZXJyaW5nIGRhdGEgYmV0d2VlbiB0d28gQ1M4OTAwLzIwIGFkYXB0ZXJzIGluc3RhbGxlZCBpbiBkaWZmZXJlbnQgUENzIAorb24gdGhlIHNhbWUgbmV0d29yay4gKE5vdGU6IHRoZSBkaWFnbm9zdGljIG5ldHdvcmsgdGVzdCBzaG91bGQgbm90IGJlIHJ1biAKK2JldHdlZW4gdHdvIG5vZGVzIGFjcm9zcyBhIHJvdXRlci4pIAorCitUaGlzIHRlc3QgcmVxdWlyZXMgdGhhdCBlYWNoIG9mIHRoZSB0d28gUENzIGhhdmUgYSBDUzg5MDAvMjAtYmFzZWQgYWRhcHRlcgoraW5zdGFsbGVkIGFuZCBoYXZlIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSBydW5uaW5nLiAgVGhlIGZpcnN0IFBDIGlzIAorY29uZmlndXJlZCBhcyBhIFJlc3BvbmRlciBhbmQgdGhlIG90aGVyIFBDIGlzIGNvbmZpZ3VyZWQgYXMgYW4gSW5pdGlhdG9yLiAgCitPbmNlIHRoZSBJbml0aWF0b3IgaXMgc3RhcnRlZCwgaXQgc2VuZHMgZGF0YSBmcmFtZXMgdG8gdGhlIFJlc3BvbmRlciB3aGljaCAKK3JldHVybnMgdGhlIGZyYW1lcyB0byB0aGUgSW5pdGlhdG9yLgorCitUaGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBhbmQgdHJhbnNtaXR0ZWQgYXJlIGRpc3BsYXllZCBvbiB0aGUgCitJbml0aWF0b3IncyBkaXNwbGF5LCBhbG9uZyB3aXRoIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgYW5kIAordHJhbnNtaXR0ZWQgT0sgb3IgaW4gZXJyb3IuICBUaGUgdGVzdCBjYW4gYmUgdGVybWluYXRlZCBhbnl0aW1lIGJ5IHRoZSB1c2VyIGF0IAorZWl0aGVyIFBDLgorCitUbyBzZXR1cCB0aGUgRGlhZ25vc3RpYyBOZXR3b3JrIFRlc3Q6CisKKyAgICAxLikgU2VsZWN0IGEgUEMgd2l0aCBhIENTODkwMC8yMC1iYXNlZCBhZGFwdGVyIGFuZCBhIGtub3duIHdvcmtpbmcgbmV0d29yaworICAgICAgICBjb25uZWN0aW9uIHRvIGFjdCBhcyB0aGUgUmVzcG9uZGVyLiAgUnVuIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSAKKyAgICAgICAgYW5kIHNlbGVjdCAnRGlhZ25vc3RpY3MgLT4gTmV0d29yayBUZXN0IC0+IFJlc3BvbmRlcicgZnJvbSB0aGUgbWFpbiAKKyAgICAgICAgbWVudS4gIEhpdCBFTlRFUiB0byBzdGFydCB0aGUgUmVzcG9uZGVyLgorCisgICAgMi4pIFJldHVybiB0byB0aGUgUEMgd2l0aCB0aGUgQ1M4OTAwLzIwLWJhc2VkIGFkYXB0ZXIgeW91IHdhbnQgdG8gdGVzdCBhbmQKKyAgICAgICAgc3RhcnQgdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5LiAKKworICAgIDMuKSBGcm9tIHRoZSBtYWluIG1lbnUsIFNlbGVjdCAnRGlhZ25vc3RpYyAtPiBOZXR3b3JrIFRlc3QgLT4gSW5pdGlhdG9yJy4KKyAgICAgICAgSGl0IEVOVEVSIHRvIHN0YXJ0IHRoZSB0ZXN0LgorIAorWW91IG1heSBzdG9wIHRoZSB0ZXN0IG9uIHRoZSBJbml0aWF0b3IgYXQgYW55IHRpbWUgd2hpbGUgYWxsb3dpbmcgdGhlIFJlc3BvbmRlcgordG8gY29udGludWUgcnVubmluZy4gIEluIHRoaXMgbWFubmVyLCB5b3UgY2FuIG1vdmUgdG8gYWRkaXRpb25hbCBQQ3MgYW5kIHRlc3QgCit0aGVtIGJ5IHN0YXJ0aW5nIHRoZSBJbml0aWF0b3Igb24gYW5vdGhlciBQQyB3aXRob3V0IGhhdmluZyB0byBzdG9wL3N0YXJ0IHRoZSAKK1Jlc3BvbmRlci4KKyAKKworCis1LjMgVVNJTkcgVEhFIEFEQVBURVInUyBMRURzCisKK1RoZSAyIGFuZCAzLW1lZGlhIGFkYXB0ZXJzIGhhdmUgdHdvIExFRHMgdmlzaWJsZSBvbiB0aGUgYmFjayBlbmQgb2YgdGhlIGJvYXJkIAorbG9jYXRlZCBuZWFyIHRoZSAxMEJhc2UtVCBjb25uZWN0b3IuICAKKworTGluayBJbnRlZ3JpdHkgTEVEOiBBICJzdGVhZHkiIE9OIG9mIHRoZSBncmVlbiBMRUQgaW5kaWNhdGVzIGEgdmFsaWQgMTBCYXNlLVQgCitjb25uZWN0aW9uLiAgKE9ubHkgYXBwbGllcyB0byAxMEJhc2UtVC4gIFRoZSBncmVlbiBMRUQgaGFzIG5vIHNpZ25pZmljYW5jZSBmb3IKK2EgMTBCYXNlLTIgb3IgQVVJIGNvbm5lY3Rpb24uKQorCitUWC9SWCBMRUQ6IFRoZSB5ZWxsb3cgTEVEIGxpZ2h0cyBicmllZmx5IGVhY2ggdGltZSB0aGUgYWRhcHRlciB0cmFuc21pdHMgb3IgCityZWNlaXZlcyBkYXRhLiAoVGhlIHllbGxvdyBMRUQgd2lsbCBhcHBlYXIgdG8gImZsaWNrZXIiIG9uIGEgdHlwaWNhbCBuZXR3b3JrLikKKworCis1LjQgUkVTT0xWSU5HIEkvTyBDT05GTElDVFMKKworQW4gSU8gY29uZmxpY3Qgb2NjdXJzIHdoZW4gdHdvIG9yIG1vcmUgYWRhcHRlciB1c2UgdGhlIHNhbWUgSVNBIHJlc291cmNlIChJTyAKK2FkZHJlc3MsIG1lbW9yeSBhZGRyZXNzIG9yIElSUSkuICBZb3UgY2FuIHVzdWFsbHkgZGV0ZWN0IGFuIElPIGNvbmZsaWN0IGluIG9uZSAKK29mIGZvdXIgd2F5cyBhZnRlciBpbnN0YWxsaW5nIGFuZCBvciBjb25maWd1cmluZyB0aGUgQ1M4OTAwLzIwLWJhc2VkIGFkYXB0ZXI6CisKKyAgICAxLikgVGhlIHN5c3RlbSBkb2VzIG5vdCBib290IHByb3Blcmx5IChvciBhdCBhbGwpLgorCisgICAgMi4pIFRoZSBkcml2ZXIgY2FuIG5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBhZGFwdGVyLCByZXBvcnRpbmcgYW4gIkFkYXB0ZXIKKyAgICAgICAgbm90IGZvdW5kIiBlcnJvciBtZXNzYWdlLgorCisgICAgMy4pIFlvdSBjYW5ub3QgY29ubmVjdCB0byB0aGUgbmV0d29yayBvciB0aGUgZHJpdmVyIHdpbGwgbm90IGxvYWQuCisKKyAgICA0LikgSWYgeW91IGhhdmUgY29uZmlndXJlZCB0aGUgYWRhcHRlciB0byBydW4gaW4gbWVtb3J5IG1vZGUgYnV0IHRoZSBkcml2ZXIKKyAgICAgICAgcmVwb3J0cyBpdCBpcyB1c2luZyBJTyBtb2RlIHdoZW4gbG9hZGluZywgdGhpcyBpcyBhbiBpbmRpY2F0aW9uIG9mIGEKKyAgICAgICAgbWVtb3J5IGFkZHJlc3MgY29uZmxpY3QuCisKK0lmIGFuIElPIGNvbmZsaWN0IG9jY3VycywgcnVuIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSBhbmQgcGVyZm9ybSBhIAorZGlhZ25vc3RpYyBzZWxmLXRlc3QuICBOb3JtYWxseSwgdGhlIElTQSByZXNvdXJjZSBpbiBjb25mbGljdCB3aWxsIGZhaWwgdGhlIAorc2VsZi10ZXN0LiAgSWYgc28sIHJlY29uZmlndXJlIHRoZSBhZGFwdGVyIHNlbGVjdGluZyBhbm90aGVyIGNob2ljZSBmb3IgdGhlIAorcmVzb3VyY2UgaW4gY29uZmxpY3QuICBSdW4gdGhlIGRpYWdub3N0aWNzIGFnYWluIHRvIGNoZWNrIGZvciBmdXJ0aGVyIElPIAorY29uZmxpY3RzLgorCitJbiBzb21lIGNhc2VzLCBzdWNoIGFzIHdoZW4gdGhlIFBDIHdpbGwgbm90IGJvb3QsIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gcmVtb3ZlCit0aGUgYWRhcHRlciBhbmQgcmVjb25maWd1cmUgaXQgYnkgaW5zdGFsbGluZyBpdCBpbiBhbm90aGVyIFBDIHRvIHJ1biB0aGUgCitDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eS4gIE9uY2UgcmVpbnN0YWxsZWQgaW4gdGhlIHRhcmdldCBzeXN0ZW0sIHJ1biB0aGUgCitkaWFnbm9zdGljcyBzZWxmLXRlc3QgdG8gZW5zdXJlIHRoZSBuZXcgY29uZmlndXJhdGlvbiBpcyBmcmVlIG9mIGNvbmZsaWN0cyAKK2JlZm9yZSBsb2FkaW5nIHRoZSBkcml2ZXIgYWdhaW4uCisKK1doZW4gbWFudWFsbHkgY29uZmlndXJpbmcgdGhlIGFkYXB0ZXIsIGtlZXAgaW4gbWluZCB0aGUgdHlwaWNhbCBJU0Egc3lzdGVtIAorcmVzb3VyY2UgdXNhZ2UgYXMgaW5kaWNhdGVkIGluIHRoZSB0YWJsZXMgYmVsb3cuCisKK0kvTyBBZGRyZXNzICAgIAlEZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICBJUlEgICAgICBEZXZpY2UKKy0tLS0tLS0tLS0tICAgIAktLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAtLS0gICAgICAtLS0tLS0tLQorIDIwMC0yMEYgICAgICAgCUdhbWUgSS9PIGFkYXB0ZXIgICAgICAgICAgICAgICAzICAgICAgIENPTTIsIEJ1cyBNb3VzZQorIDIzMC0yM0YgICAgICAgCUJ1cyBNb3VzZSAgICAgICAgICAgICAgICAgICAgICA0ICAgICAgIENPTTEKKyAyNzAtMjdGICAgICAgIAlMUFQzOiB0aGlyZCBwYXJhbGxlbCBwb3J0ICAgICAgNSAgICAgICBMUFQyCisgMkYwLTJGRiAgICAgICAJQ09NMjogc2Vjb25kIHNlcmlhbCBwb3J0ICAgICAgIDYgICAgICAgRmxvcHB5IERpc2sgY29udHJvbGxlcgorIDMyMC0zMkYgICAgICAgCUZpeGVkIGRpc2sgY29udHJvbGxlciAgICAgICAgICA3ICAgICAgIExQVDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICA4ICAgICAgIFJlYWwtdGltZSBDbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgICAgICAgRUdBL1ZHQSBkaXNwbGF5IGFkYXB0ZXIgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiAgICAgICBNb3VzZSAoUFMvMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK01lbW9yeSBBZGRyZXNzICBEZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAgICAgIE1hdGggQ29wcm9jZXNzb3IKKy0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIDE0ICAgICAgIEhhcmQgRGlzayBjb250cm9sbGVyCitBMDAwLUJGRkYJRUdBIEdyYXBoaWNzIEFkcGF0ZXIKK0EwMDAtQzdGRglWR0EgR3JhcGhpY3MgQWRwYXRlcgorQjAwMC1CRkZGCU1vbm8gR3JhcGhpY3MgQWRhcHRlcgorQjgwMC1CRkZGCUNvbG9yIEdyYXBoaWNzIEFkYXB0ZXIKK0UwMDAtRkZGRglBVCBCSU9TCisKKworCisKKzYuMCBURUNITklDQUwgU1VQUE9SVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis2LjEgQ09OVEFDVElORyBDSVJSVVMgTE9HSUMnUyBURUNITklDQUwgU1VQUE9SVAorCitDaXJydXMgTG9naWMncyBDUzg5WFggVGVjaG5pY2FsIEFwcGxpY2F0aW9uIFN1cHBvcnQgY2FuIGJlIHJlYWNoZWQgYXQ6CisKK1RlbGVwaG9uZSAgOig4MDApIDg4OC01MDE2IChmcm9tIGluc2lkZSBVLlMuIGFuZCBDYW5hZGEpCisgICAgICAgICAgIDooNTEyKSA0NDItNzU1NSAoZnJvbSBvdXRzaWRlIHRoZSBVLlMuIGFuZCBDYW5hZGEpCitGYXggICAgICAgIDooNTEyKSA5MTItMzg3MQorRW1haWwgICAgICA6ZXRoZXJuZXRAY3J5c3RhbC5jaXJydXMuY29tCitXV1cgICAgICAgIDpodHRwOi8vd3d3LmNpcnJ1cy5jb20KKworCis2LjIgSU5GT1JNQVRJT04gUkVRVUlSRUQgQkVGT1JFIENPTlRBQ1RJTkcgVEVDSE5JQ0FMIFNVUFBPUlQKKworQmVmb3JlIGNvbnRhY3RpbmcgQ2lycnVzIExvZ2ljIGZvciB0ZWNobmljYWwgc3VwcG9ydCwgYmUgcHJlcGFyZWQgdG8gcHJvdmlkZSBhcyAKK011Y2ggb2YgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZS4gCisKKzEuKSBBZGFwdGVyIHR5cGUgKENSRDg5MDAsIENEQjg5MDAsIENEQjg5MjAsIGV0Yy4pCisKKzIuKSBBZGFwdGVyIGNvbmZpZ3VyYXRpb24KKworICAgICogSU8gQmFzZSwgTWVtb3J5IEJhc2UsIElPIG9yIG1lbW9yeSBtb2RlIGVuYWJsZWQsIElSUSwgRE1BIGNoYW5uZWwKKyAgICAqIFBsdWcgYW5kIFBsYXkgZW5hYmxlZC9kaXNhYmxlZCAoQ1M4OTIwLWJhc2VkIGFkYXB0ZXJzIG9ubHkpCisgICAgKiBDb25maWd1cmVkIGZvciBtZWRpYSBhdXRvLWRldGVjdCBvciBzcGVjaWZpYyBtZWRpYSB0eXBlICh3aGljaCB0eXBlKS4gICAgCisKKzMuKSBQQyBTeXN0ZW0ncyBDb25maWd1cmF0aW9uCisKKyAgICAqIFBsdWcgYW5kIFBsYXkgc3lzdGVtICh5ZXMvbm8pCisgICAgKiBCSU9TIChtYWtlIGFuZCB2ZXJzaW9uKQorICAgICogU3lzdGVtIG1ha2UgYW5kIG1vZGVsCisgICAgKiBDUFUgKHR5cGUgYW5kIHNwZWVkKQorICAgICogU3lzdGVtIFJBTQorICAgICogU0NTSSBBZGFwdGVyCisKKzQuKSBTb2Z0d2FyZQorCisgICAgKiBDUzg5WFggZHJpdmVyIGFuZCB2ZXJzaW9uCisgICAgKiBZb3VyIG5ldHdvcmsgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdmVyc2lvbgorICAgICogWW91ciBzeXN0ZW0ncyBPUyB2ZXJzaW9uIAorICAgICogVmVyc2lvbiBvZiBhbGwgcHJvdG9jb2wgc3VwcG9ydCBmaWxlcworCis1LikgQW55IEVycm9yIE1lc3NhZ2UgZGlzcGxheWVkLgorCisKKworNi4zIE9CVEFJTklORyBUSEUgTEFURVNUIERSSVZFUiBWRVJTSU9OCisKK1lvdSBjYW4gb2J0YWluIHRoZSBsYXRlc3QgQ1M4OVhYIGRyaXZlcnMgYW5kIHN1cHBvcnQgc29mdHdhcmUgZnJvbSBDaXJydXMgTG9naWMncyAKK1dlYiBzaXRlLiAgWW91IGNhbiBhbHNvIGNvbnRhY3QgQ2lycnVzIExvZ2ljJ3MgVGVjaG5pY2FsIFN1cHBvcnQgKGVtYWlsOgorZXRoZXJuZXRAY3J5c3RhbC5jaXJydXMuY29tKSBhbmQgcmVxdWVzdCB0aGF0IHlvdSBiZSByZWdpc3RlcmVkIGZvciBhdXRvbWF0aWMgCitzb2Z0d2FyZS11cGRhdGUgbm90aWZpY2F0aW9uLgorCitDaXJydXMgTG9naWMgbWFpbnRhaW5zIGEgd2ViIHBhZ2UgYXQgaHR0cDovL3d3dy5jaXJydXMuY29tIHdpdGggdGhlCit0aGUgbGF0ZXN0IGRyaXZlcnMgYW5kIHRlY2huaWNhbCBwdWJsaWNhdGlvbnMuCisKKworNi40IEN1cnJlbnQgbWFpbnRhaW5lcgorCitJbiBGZWJydWFyeSAyMDAwIHRoZSBtYWludGVuYW5jZSBvZiB0aGlzIGRyaXZlciB3YXMgYXNzdW1lZCBieSBBbmRyZXcKK01vcnRvbiA8YWtwbUB6aXAuY29tLmF1PgorCis2LjUgS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzCisKK0ZvciB1c2UgaW4gZW1iZWRkZWQgZW52aXJvbm1lbnRzIHdpdGggbm8gY3M4OXgwIEVFUFJPTSwgdGhlIGtlcm5lbCBib290CitwYXJhbWV0ZXIgYGNzODl4MF9tZWRpYT0nIGhhcyBiZWVuIGltcGxlbWVudGVkLiAgVXNhZ2UgaXM6CisKKwljczg5eDBfbWVkaWE9cmo0NSAgICBvcgorCWNzODl4MF9tZWRpYT1hdWkgICAgIG9yCisJY3M4OXgwX21lZGlhPWJuYworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGU0eDUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlNHg1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGU0Y2E5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlNHg1LnR4dApAQCAtMCwwICsxLDE3OCBAQAorICAgIE9yaWdpbmFsbHksICAgdGhpcyAgZHJpdmVyICB3YXMgICAgd3JpdHRlbiAgZm9yIHRoZSAgRGlnaXRhbCAgIEVxdWlwbWVudAorICAgIENvcnBvcmF0aW9uIHNlcmllcyBvZiBFdGhlcldPUktTIEV0aGVybmV0IGNhcmRzOgorCisgICAgICAgIERFNDI1IFRQL0NPQVggRUlTQQorCURFNDM0IFRQIFBDSQorCURFNDM1IFRQL0NPQVgvQVVJIFBDSQorCURFNDUwIFRQL0NPQVgvQVVJIFBDSQorCURFNTAwIDEwLzEwMCBQQ0kgRmFzdGVybmV0CisKKyAgICBidXQgaXQgIHdpbGwgIG5vdyBhdHRlbXB0ICB0byAgc3VwcG9ydCBhbGwgIGNhcmRzIHdoaWNoICAgY29uZm9ybSB0byB0aGUKKyAgICBEaWdpdGFsIFNlbWljb25kdWN0b3IgICBTUk9NICAgU3BlY2lmaWNhdGlvbi4gICAgVGhlICBkcml2ZXIgICBjdXJyZW50bHkKKyAgICByZWNvZ25pc2VzIHRoZSBmb2xsb3dpbmcgY2hpcHM6CisKKyAgICAgICAgREMyMTA0MCAgKG5vIFNST00pIAorCURDMjEwNDFbQV0gIAorCURDMjExNDBbQV0gCisJREMyMTE0MiAKKwlEQzIxMTQzIAorCisgICAgU28gZmFyIHRoZSBkcml2ZXIgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcgY2FyZHM6CisKKyAgICAgICAgS0lOR1NUT04KKwlMaW5rc3lzCisJWk5ZWDM0MgorCVNNQzg0MzIKKwlTTUM5MzMyICh3L25ldyBTUk9NKQorCVpOWVgzMVs0NV0KKwlaTllYMzQ2IDEwLzEwMCA0IHBvcnQgKGNhbiBhY3QgYXMgYSAxMC8xMDAgYnJpZGdlISkgCisKKyAgICBUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBhIHJlbGF0aXZlbHkgYnVzeSBuZXR3b3JrIHVzaW5nIHRoZSBERTQyNSwKKyAgICBERTQzNCwgREU0MzUgYW5kIERFNTAwIGNhcmRzIGFuZCBiZW5jaG1hcmtlZCB3aXRoICd0dGNwJzogaXQgdHJhbnNmZXJyZWQKKyAgICAxNk0gb2YgZGF0YSB0byBhIERFQ3N0YXRpb24gNTAwMC8yMDAgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICAgIFRDUCAgICAgICAgICAgVURQCisgICAgICAgICAgICAgVFggICAgIFJYICAgICBUWCAgICAgUlgKKyAgICBERTQyNSAgIDEwMzBrICA5OTdrICAgMTE3MGsgIDExMjhrCisgICAgREU0MzQgICAxMDYzayAgOTk1ayAgIDExNzBrICAxMTI1aworICAgIERFNDM1ICAgMTA2M2sgIDk5NWsgICAxMTcwayAgMTEyNWsKKyAgICBERTUwMCAgIDEwNjNrICA5OThrICAgMTE3MGsgIDExMjVrICBpbiAxME1iL3MgbW9kZQorCisgICAgQWxsICB2YWx1ZXMgYXJlIHR5cGljYWwgKGluICAga0J5dGVzL3NlYykgZnJvbSBhICBzYW1wbGUgIG9mIDQgZm9yICBlYWNoCisgICAgbWVhc3VyZW1lbnQuIFRoZWlyIGVycm9yIGlzICsvLTIwayBvbiBhIHF1aWV0IChwcml2YXRlKSBuZXR3b3JrIGFuZCBhbHNvCisgICAgZGVwZW5kIG9uIHdoYXQgbG9hZCB0aGUgQ1BVIGhhcy4KKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyAgZHJpdmVyIGFzIGEgbG9hZGFibGUgIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZAorICAgIGFuZCB1c2VkIGV4dGVuc2l2ZWx5ICBkdXJpbmcgdGhlIGRyaXZlciBkZXZlbG9wbWVudCAgKHRvIHNhdmUgdGhvc2UgbG9uZworICAgIHJlYm9vdCBzZXF1ZW5jZXMpLiAgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQgIHVuZGVyIFBDSSBhbmQgRUlTQSBoYXMgYmVlbgorICAgIGFjaGlldmVkIGJ5IGxldHRpbmcgdGhlIGRyaXZlciBhdXRvcHJvYmUgYXMgaWYgaXQgd2VyZSBjb21waWxlZCBpbnRvIHRoZQorICAgIGtlcm5lbC4gRG8gbWFrZSBzdXJlICB5b3UncmUgbm90IHNoYXJpbmcgIGludGVycnVwdHMgd2l0aCBhbnl0aGluZyAgdGhhdAorICAgIGNhbm5vdCBhY2NvbW1vZGF0ZSAgaW50ZXJydXB0ICBzaGFyaW5nIQorCisgICAgVG8gdXRpbGlzZSB0aGlzIGFiaWxpdHksIHlvdSBoYXZlIHRvIGRvIDggdGhpbmdzOgorCisgICAgMCkgaGF2ZSBhIGNvcHkgb2YgdGhlIGxvYWRhYmxlIG1vZHVsZXMgY29kZSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uCisgICAgMSkgY29weSBkZTR4NS5jIGZyb20gdGhlICAvbGludXgvZHJpdmVycy9uZXQgZGlyZWN0b3J5IHRvIHlvdXIgZmF2b3VyaXRlCisgICAgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAgICAyKSBmb3IgZml4ZWQgIGF1dG9wcm9iZXMgKG5vdCAgcmVjb21tZW5kZWQpLCAgZWRpdCB0aGUgc291cmNlIGNvZGUgIG5lYXIKKyAgICBsaW5lIDU1OTQgdG8gcmVmbGVjdCB0aGUgSS9PIGFkZHJlc3MgIHlvdSdyZSB1c2luZywgb3IgYXNzaWduIHRoZXNlIHdoZW4KKyAgICBsb2FkaW5nIGJ5OgorCisgICAgICAgICAgICAgICAgICAgaW5zbW9kIGRlNHg1IGlvPTB4Z2hoICAgICAgICAgICB3aGVyZSBnID0gYnVzIG51bWJlcgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGggPSBkZXZpY2UgbnVtYmVyICAgCisKKyAgICAgICBOQjogYXV0b3Byb2JpbmcgZm9yIG1vZHVsZXMgaXMgbm93IHN1cHBvcnRlZCBieSBkZWZhdWx0LiBZb3UgbWF5IGp1c3QKKyAgICAgICAgICAgdXNlOgorCisgICAgICAgICAgICAgICAgICAgaW5zbW9kIGRlNHg1CisKKyAgICAgICAgICAgdG8gbG9hZCBhbGwgYXZhaWxhYmxlIGJvYXJkcy4gRm9yIGEgc3BlY2lmaWMgYm9hcmQsIHN0aWxsIHVzZQorCSAgIHRoZSAnaW89PycgYWJvdmUuCisgICAgMykgY29tcGlsZSAgZGU0eDUuYywgYnV0IGluY2x1ZGUgLURNT0RVTEUgaW4gIHRoZSBjb21tYW5kIGxpbmUgdG8gZW5zdXJlCisgICAgdGhhdCB0aGUgY29ycmVjdCBiaXRzIGFyZSBjb21waWxlZCAoc2VlIGVuZCBvZiBzb3VyY2UgY29kZSkuCisgICAgNCkgaWYgeW91IGFyZSB3YW50aW5nIHRvIGFkZCBhIG5ldyAgY2FyZCwgZ290byA1LiBPdGhlcndpc2UsIHJlY29tcGlsZSBhCisgICAga2VybmVsIHdpdGggdGhlIGRlNHg1IGNvbmZpZ3VyYXRpb24gdHVybmVkIG9mZiBhbmQgcmVib290LgorICAgIDUpIGluc21vZCBkZTR4NSBbaW89MHhnaGhdCisgICAgNikgcnVuIHRoZSBuZXQgc3RhcnR1cCBiaXRzIGZvciB5b3VyIG5ldyBldGg/PyBpbnRlcmZhY2UocykgbWFudWFsbHkgCisgICAgKHVzdWFsbHkgL2V0Yy9yYy5pbmV0WzEyXSBhdCBib290IHRpbWUpLiAKKyAgICA3KSBlbmpveSEKKworICAgIFRvIHVubG9hZCBhIG1vZHVsZSwgdHVybiBvZmYgdGhlIGFzc29jaWF0ZWQgaW50ZXJmYWNlKHMpIAorICAgICdpZmNvbmZpZyBldGg/PyBkb3duJyB0aGVuICdybW1vZCBkZTR4NScuCisKKyAgICBBdXRvbWVkaWEgZGV0ZWN0aW9uIGlzIGluY2x1ZGVkIHNvIHRoYXQgaW4gIHByaW5jaXBsZSB5b3UgY2FuIGRpc2Nvbm5lY3QKKyAgICBmcm9tLCBlLmcuICBUUCwgcmVjb25uZWN0ICB0byBCTkMgIGFuZCAgdGhpbmdzIHdpbGwgc3RpbGwgd29yayAgKGFmdGVyIGEKKyAgICBwYXVzZSB3aGlsc3QgdGhlICAgZHJpdmVyIGZpZ3VyZXMgb3V0ICAgd2hlcmUgaXRzIG1lZGlhIHdlbnQpLiAgTXkgdGVzdHMKKyAgICB1c2luZyBwaW5nIHNob3dlZCB0aGF0IGl0IGFwcGVhcnMgdG8gd29yay4uLi4KKworICAgIEJ5ICBkZWZhdWx0LCAgdGhlIGRyaXZlciB3aWxsICBub3cgICBhdXRvZGV0ZWN0IGFueSAgREVDY2hpcCBiYXNlZCBjYXJkLgorICAgIFNob3VsZCB5b3UgaGF2ZSBhIG5lZWQgdG8gcmVzdHJpY3QgdGhlIGRyaXZlciB0byBESUdJVEFMIG9ubHkgY2FyZHMsIHlvdQorICAgIGNhbiBjb21waWxlIHdpdGggYSAgREVDX09OTFkgZGVmaW5lLCBvciBpZiAgbG9hZGluZyBhcyBhIG1vZHVsZSwgdXNlIHRoZQorICAgICdkZWNfb25seT0xJyAgcGFyYW1ldGVyLiAKKworICAgIEkndmUgY2hhbmdlZCB0aGUgdGltaW5nIHJvdXRpbmVzIHRvICB1c2UgdGhlIGtlcm5lbCB0aW1lciBhbmQgc2NoZWR1bGluZworICAgIGZ1bmN0aW9ucyAgc28gdGhhdCB0aGUgIGhhbmdzICBhbmQgb3RoZXIgYXNzb3J0ZWQgcHJvYmxlbXMgdGhhdCBvY2N1cnJlZAorICAgIHdoaWxlIGF1dG9zZW5zaW5nIHRoZSAgbWVkaWEgIHNob3VsZCBiZSBnb25lLiAgQSAgYm9udXMgIGZvciB0aGUgREMyMTA0MAorICAgIGF1dG8gIG1lZGlhIHNlbnNlIGFsZ29yaXRobSBpcyAgdGhhdCBpdCBjYW4gbm93ICB1c2Ugb25lIHRoYXQgaXMgbW9yZSBpbgorICAgIGxpbmUgd2l0aCB0aGUgIHJlc3QgKHRoZSBEQzIxMDQwICBjaGlwIGRvZXNuJ3QgIGhhdmUgYSBoYXJkd2FyZSAgdGltZXIpLgorICAgIFRoZSBkb3duc2lkZSBpcyB0aGUgMSAnamlmZmllcycgKDEwbXMpIHJlc29sdXRpb24uCisKKyAgICBJRUVFIDgwMi4zdSBNSUkgaW50ZXJmYWNlIGNvZGUgaGFzICBiZWVuIGFkZGVkIGluIGFudGljaXBhdGlvbiB0aGF0IHNvbWUKKyAgICBwcm9kdWN0cyBtYXkgdXNlIGl0IGluIHRoZSBmdXR1cmUuCisKKyAgICBUaGUgU01DOTMzMiBjYXJkICBoYXMgYSBub24tY29tcGxpYW50IFNST00gIHdoaWNoIG5lZWRzIGZpeGluZyAtICBJIGhhdmUKKyAgICBwYXRjaGVkIHRoaXMgIGRyaXZlciB0byBkZXRlY3QgaXQgIGJlY2F1c2UgdGhlIFNST00gZm9ybWF0IHVzZWQgY29tcGxpZXMKKyAgICB0byBhIHByZXZpb3VzIERFQy1TVEQgZm9ybWF0LgorCisgICAgSSBoYXZlIHJlbW92ZWQgdGhlIGJ1ZmZlciBjb3BpZXMgbmVlZGVkIGZvciByZWNlaXZlIG9uIEludGVscy4gIEkgY2Fubm90CisgICAgcmVtb3ZlIHRoZW0gZm9yICAgQWxwaGFzIHNpbmNlICB0aGUgIFR1bGlwIGhhcmR3YXJlICAgb25seSBkb2VzIGxvbmd3b3JkCisgICAgYWxpZ25lZCAgRE1BIHRyYW5zZmVycyAgYW5kICB0aGUgIEFscGhhcyBnZXQgICBhbGlnbm1lbnQgdHJhcHMgd2l0aCAgbm9uCisgICAgbG9uZ3dvcmQgYWxpZ25lZCBkYXRhIGNvcGllcyAod2hpY2ggbWFrZXMgdGhlbSByZWFsbHkgc2xvdykuIE5vIGNvbW1lbnQuCisKKyAgICBJICBoYXZlIGFkZGVkIFNST00gZGVjb2RpbmcgIHJvdXRpbmVzIHRvIG1ha2UgdGhpcyAgZHJpdmVyIHdvcmsgd2l0aCBhbnkKKyAgICBjYXJkIHRoYXQgIHN1cHBvcnRzIHRoZSBEaWdpdGFsICBTZW1pY29uZHVjdG9yIFNST00gc3BlYy4gVGhpcyB3aWxsIGhlbHAKKyAgICBhbGwgIGNhcmRzIHJ1bm5pbmcgdGhlIGRjMjExNHggIHNlcmllcyBjaGlwcyBpbiBwYXJ0aWN1bGFyLiAgQ2FyZHMgdXNpbmcKKyAgICB0aGUgZGMyMTA0eCAgY2hpcHMgc2hvdWxkIHJ1biBjb3JyZWN0bHkgd2l0aCAgdGhlIGJhc2ljICBkcml2ZXIuICBJJ20gaW4KKyAgICBkZWJ0IHRvIDxtamFjb2JAZmVyYWwuY29tPiBmb3IgdGhlICB0ZXN0aW5nIGFuZCBmZWVkYmFjayB0aGF0IGhlbHBlZCBnZXQKKyAgICB0aGlzIGZlYXR1cmUgd29ya2luZy4gIFNvIGZhciB3ZSBoYXZlICB0ZXN0ZWQgS0lOR1NUT04sIFNNQzg0MzIsIFNNQzkzMzIKKyAgICAod2l0aCB0aGUgbGF0ZXN0IFNST00gY29tcGx5aW5nICB3aXRoIHRoZSBTUk9NIHNwZWMgIFYzOiB0aGVpciBmaXJzdCB3YXMKKyAgICBicm9rZW4pLCBaTllYMzQyICBhbmQgIExpbmtTeXMuIFpOWVgzMTQgKGR1YWwgIDIxMDQxICBNQUMpIGFuZCAgWk5ZWCAzMTUKKyAgICAocXVhZCAyMTA0MSBNQUMpICBjYXJkcyBhbHNvICBhcHBlYXIgIHRvIHdvcmsgZGVzcGl0ZSB0aGVpciAgaW5jb3JyZWN0bHkKKyAgICB3aXJlZCBJUlFzLgorCisgICAgSSBoYXZlIGFkZGVkIGEgdGVtcG9yYXJ5IGZpeCBmb3IgaW50ZXJydXB0IHByb2JsZW1zIHdoZW4gc29tZSBTQ1NJIGNhcmRzCisgICAgc2hhcmUgdGhlIHNhbWUgaW50ZXJydXB0IGFzIHRoZSBERUNjaGlwIGJhc2VkICBjYXJkcy4gVGhlIHByb2JsZW0gb2NjdXJzCisgICAgYmVjYXVzZSAgdGhlIFNDU0kgY2FyZCB3YW50cyB0byAgZ3JhYiB0aGUgaW50ZXJydXB0ICBhcyBhIGZhc3QgaW50ZXJydXB0CisgICAgKHJ1bnMgdGhlICAgc2VydmljZSByb3V0aW5lIHdpdGggaW50ZXJydXB0cyB0dXJuZWQgICBvZmYpIHZzLiAgdGhpcyBjYXJkCisgICAgd2hpY2ggcmVhbGx5IG5lZWRzIHRvIHJ1biB0aGUgc2VydmljZSByb3V0aW5lIHdpdGggaW50ZXJydXB0cyB0dXJuZWQgb24uCisgICAgVGhpcyBkcml2ZXIgd2lsbCAgbm93ICAgYWRkIHRoZSBpbnRlcnJ1cHQgc2VydmljZSAgIHJvdXRpbmUgIGFzICBhICBmYXN0CisgICAgaW50ZXJydXB0IGlmIGl0ICAgaXMgYm91bmNlZCBmcm9tIHRoZSAgIHNsb3cgaW50ZXJydXB0LiAgVEhJUyBJUyBOT1QgICBBCisgICAgUkVDT01NRU5ERUQgV0FZIFRPIFJVTiBUSEUgRFJJVkVSICBhbmQgaGFzIGJlZW4gZG9uZSAgZm9yIGEgbGltaXRlZCB0aW1lCisgICAgdW50aWwgIHBlb3BsZSAgIHNvcnQgIG91dCB0aGVpciAgY29tcGF0aWJpbGl0eSAgICBpc3N1ZXMgYW5kIHRoZSAga2VybmVsCisgICAgaW50ZXJydXB0ICBzZXJ2aWNlIGNvZGUgIGlzICBmaXhlZC4gICBZT1UgIFNIT1VMRCBTRVBBUkFURSBPVVQgIFRIRSBGQVNUCisgICAgSU5URVJSVVBUIENBUkRTIEZST00gVEhFIFNMT1cgSU5URVJSVVBUIENBUkRTIHRvIGVuc3VyZSB0aGF0IHRoZXkgZG8gbm90CisgICAgcnVuIG9uIHRoZSBzYW1lIGludGVycnVwdC4gUENNQ0lBL0NhcmRCdXMgaXMgYW5vdGhlciBjYW4gb2Ygd29ybXMuLi4KKworICAgIEZpbmFsbHksIEkgdGhpbmsgIEkgaGF2ZSByZWFsbHkgIGZpeGVkICB0aGUgbW9kdWxlICBsb2FkaW5nIHByb2JsZW0gd2l0aAorICAgIG1vcmUgdGhhbiBvbmUgREVDY2hpcCBiYXNlZCAgY2FyZC4gIEFzIGEgIHNpZGUgZWZmZWN0LCBJIGRvbid0IG1lc3Mgd2l0aAorICAgIHRoZSAgZGV2aWNlIHN0cnVjdHVyZSBhbnkgIG1vcmUgd2hpY2ggbWVhbnMgdGhhdCAgaWYgbW9yZSB0aGFuIDEgY2FyZCBpbgorICAgIDIuMC54IGlzICAgIGluc3RhbGxlZCAoNCAgaW4gICAyLjEueCksICB0aGUgIHVzZXIgICB3aWxsIGhhdmUgICB0byAgZWRpdAorICAgIGxpbnV4L2RyaXZlcnMvbmV0L1NwYWNlLmMgIHRvIG1ha2Ugcm9vbSBmb3IgIHRoZW0uIEhlbmNlLCBtb2R1bGUgbG9hZGluZworICAgIGlzICB0aGUgcHJlZmVycmVkIHdheSB0byB1c2UgICB0aGlzIGRyaXZlciwgc2luY2UgIGl0ICBkb2Vzbid0IGhhdmUgdGhpcworICAgIGxpbWl0YXRpb24uCisKKyAgICBXaGVyZSBTUk9NIG1lZGlhICBkZXRlY3Rpb24gaXMgdXNlZCBhbmQgIGZ1bGwgZHVwbGV4IGlzIHNwZWNpZmllZCBpbiB0aGUKKyAgICBTUk9NLCAgdGhlIGZlYXR1cmUgaXMgIGlnbm9yZWQgdW5sZXNzICBscC0+cGFyYW1zLmZkeCAgaXMgc2V0IGF0IGNvbXBpbGUKKyAgICB0aW1lICBPUiBkdXJpbmcgIGEgICBtb2R1bGUgbG9hZCAgKGluc21vZCAgZGU0eDUgICBhcmdzPSdldGg/PzpmZHgnIFtzZWUKKyAgICBiZWxvd10pLiAgVGhpcyBpcyBiZWNhdXNlIHRoZXJlICBpcyBubyB3YXkgIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGZ1bGwKKyAgICBkdXBsZXggICBsaW5rcyAgZXhjZXB0IHRocm91Z2ggICBhdXRvbmVnb3RpYXRpb24uICAgIFdoZW4gSSAgaW5jbHVkZSB0aGUKKyAgICBhdXRvbmVnb3RpYXRpb24gZmVhdHVyZSBpbiAgdGhlIFNST00gYXV0b2NvbmYgIGNvZGUsIHRoaXMgZGV0ZWN0aW9uIHdpbGwKKyAgICBvY2N1ciBhdXRvbWF0aWNhbGx5IGZvciB0aGF0IGNhc2UuCisKKyAgICBDb21tYW5kIGxpbmUgIGFyZ3VtZW50cyBhcmUgIG5vdyBhbGxvd2VkLCBzaW1pbGFyIHRvICBwYXNzaW5nICBhcmd1bWVudHMKKyAgICB0aHJvdWdoIExJTE8uIFRoaXMgd2lsbCBhbGxvdyBhIHBlciBhZGFwdGVyIGJvYXJkIHNldCAgdXAgb2YgZnVsbCBkdXBsZXgKKyAgICBhbmQgbWVkaWEuIFRoZSBvbmx5IGxleGljYWwgY29uc3RyYWludHMgYXJlOiAgdGhlIGJvYXJkIG5hbWUgKGRldi0+bmFtZSkKKyAgICBhcHBlYXJzIGluICB0aGUgbGlzdCBiZWZvcmUgaXRzIHBhcmFtZXRlcnMuICBUaGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGVuZHMKKyAgICBlaXRoZXIgYXQgdGhlIGVuZCBvZiB0aGUgcGFyYW1ldGVyIGxpc3Qgb3Igd2l0aCBhbm90aGVyIGJvYXJkIG5hbWUuICBUaGUKKyAgICBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYWxsb3dlZDoKKworICAgICAgICAgICAgZmR4ICAgICAgICBmb3IgZnVsbCBkdXBsZXgKKwkgICAgYXV0b3NlbnNlICB0byBzZXQgdGhlIG1lZGlhL3NwZWVkOyB3aXRoIHRoZSBmb2xsb3dpbmcgCisJICAgICAgICAgICAgICAgc3ViLXBhcmFtZXRlcnM6CisJCSAgICAgICBUUCwgVFBfTlcsIEJOQywgQVVJLCBCTkNfQVVJLCAxMDBNYiwgMTBNYiwgQVVUTworCisgICAgQ2FzZSBzZW5zaXRpdml0eSBpcyBpbXBvcnRhbnQgIGZvciAgdGhlIHN1Yi1wYXJhbWV0ZXJzLiBUaGV5ICptdXN0KiAgIGJlCisgICAgdXBwZXIgY2FzZS4gRXhhbXBsZXM6CisKKyAgICAgICAgaW5zbW9kIGRlNHg1IGFyZ3M9J2V0aDE6ZmR4IGF1dG9zZW5zZT1CTkMgZXRoMDphdXRvc2Vuc2U9MTAwTWInLgorCisgICAgRm9yIGEgY29tcGlsZWQgaW4gZHJpdmVyLCBpbiBsaW51eC9kcml2ZXJzL25ldC9DT05GSUcsIHBsYWNlIGUuZy4KKwlERTRYNV9PUFRTID0gLURERTRYNV9QQVJNPSciZXRoMDpmZHggYXV0b3NlbnNlPUFVSSBldGgyOmF1dG9zZW5zZT1UUCInIAorCisgICAgWWVzLCAgSSBrbm93IGZ1bGwgZHVwbGV4ICBpc24ndCBwZXJtaXNzaWJsZSBvbiBCTkMgIG9yIEFVSTsgdGhleSdyZSBqdXN0CisgICAgZXhhbXBsZXMuIEJ5IGRlZmF1bHQsIGZ1bGwgZHVwbGV4IGlzIHR1cm5lZCAgb2ZmIGFuZCBBVVRPIGlzIHRoZSBkZWZhdWx0CisgICAgYXV0b3NlbnNlIHNldHRpbmcuIEluICByZWFsaXR5LCBJIGV4cGVjdCBvbmx5IHRoZSAgZnVsbCBkdXBsZXggb3B0aW9uIHRvCisgICAgYmUgdXNlZC4gTm90ZSB0aGUgdXNlIG9mIHNpbmdsZSBxdW90ZXMgaW4gdGhlIHR3byBleGFtcGxlcyBhYm92ZSBhbmQgdGhlCisgICAgbGFjayBvZiBjb21tYXMgdG8gc2VwYXJhdGUgaXRlbXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YmQyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dApAQCAtMCwwICsxLDIzNCBAQAorICAgICAgICAgICAgICAgICAgICBMaW51eCBERUNuZXQgTmV0d29ya2luZyBMYXllciBJbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMSkgT3RoZXIgZG9jdW1lbnRhdGlvbi4uLi4KKworICAgbyBQcm9qZWN0IEhvbWUgUGFnZXMKKyAgICAgICBodHRwOi8vd3d3LmNoeWd3eW4uY29tL0RFQ25ldC8gICAgICAgICAgICAgICAgICAgICAgLSBLZXJuZWwgaW5mbworICAgICAgIGh0dHA6Ly9saW51eC1kZWNuZXQuc291cmNlZm9yZ2UubmV0LyAgICAgICAgICAgICAgICAtIFVzZXJsYW5kIHRvb2xzCisgICAgICAgaHR0cDovL3d3dy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtZGVjbmV0LyAgIC0gU3RhdHVzIHBhZ2UKKworMikgQ29uZmlndXJpbmcgdGhlIGtlcm5lbAorCitCZSBzdXJlIHRvIHR1cm4gb24gdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgICAgQ09ORklHX0RFQ05FVCAob2J2aW91c2x5KQorICAgIENPTkZJR19QUk9DX0ZTICh0byBzZWUgd2hhdCdzIGdvaW5nIG9uKQorICAgIENPTkZJR19TWVNDVEwgKGZvciBlYXN5IGNvbmZpZ3VyYXRpb24pCisKK2lmIHlvdSB3YW50IHRvIHRyeSBvdXQgcm91dGVyIHN1cHBvcnQgKG5vdCBwcm9wZXJseSBkZWJ1Z2dlZCB5ZXQpCit5b3UnbGwgbmVlZCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXMgd2VsbC4uLgorCisgICAgQ09ORklHX0RFQ05FVF9ST1VURVIgKHRvIGJlIGFibGUgdG8gYWRkL2RlbGV0ZSByb3V0ZXMpCisgICAgQ09ORklHX05FVEZJTFRFUiAod2lsbCBiZSByZXF1aXJlZCBmb3IgdGhlIERFQ25ldCByb3V0aW5nIGRhZW1vbikKKworICAgIENPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLIGlzIG9wdGlvbmFsCisKK0Rvbid0IHR1cm4gb24gU0lPQ0dJRkNPTkYgc3VwcG9ydCBmb3IgREVDbmV0IHVubGVzcyB5b3UgYXJlIHJlYWxseSBzdXJlCit0aGF0IHlvdSBuZWVkIGl0LCBpbiBnZW5lcmFsIHlvdSB3b24ndCBhbmQgaXQgY2FuIGNhdXNlIGlmY29uZmlnIHRvCittYWxmdW5jdGlvbi4KKworUnVuIHRpbWUgY29uZmlndXJhdGlvbiBoYXMgY2hhbmdlZCBzbGlnaHRseSBmcm9tIHRoZSAyLjQgc3lzdGVtLiBJZiB5b3UKK3dhbnQgdG8gY29uZmlndXJlIGFuIGVuZG5vZGUsIHRoZW4gdGhlIHNpbXBsaWZpZWQgcHJvY2VkdXJlIGlzIGFzIGZvbGxvd3M6CisKKyBvIFNldCB0aGUgTUFDIGFkZHJlc3Mgb24geW91ciBldGhlcm5ldCBjYXJkIGJlZm9yZSBzdGFydGluZyBfYW55XyBvdGhlcgorICAgbmV0d29yayBwcm90b2NvbHMuCisKK0FzIHNvb24gYXMgeW91ciBuZXR3b3JrIGNhcmQgaXMgYnJvdWdodCBpbnRvIHRoZSBVUCBzdGF0ZSwgREVDbmV0IHNob3VsZAorc3RhcnQgd29ya2luZy4gSWYgeW91IG5lZWQgc29tZXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQgb3IgYXJlIHVuc3VyZSBob3cKK3RvIHNldCB0aGUgTUFDIGFkZHJlc3MsIHNlZSB0aGUgbmV4dCBzZWN0aW9uLiBBbHNvIGFsbCBjb25maWd1cmF0aW9ucyB3aGljaAord29ya2VkIHdpdGggMi40IHdpbGwgd29yayB1bmRlciAyLjUgd2l0aCBubyBjaGFuZ2UuCisKKzMpIENvbW1hbmQgbGluZSBvcHRpb25zCisKK1lvdSBjYW4gc2V0IGEgREVDbmV0IGFkZHJlc3Mgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggdGhlIDIuNCBjb25maWd1cmF0aW9uIHByb2NlZHVyZSwgYnV0IGluIGdlbmVyYWwgaXQncyBub3QgbmVlZGVkIGFueSBtb3JlLgorSWYgeW91IGRvIHN0IGEgREVDbmV0IGFkZHJlc3Mgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgaGFzIG9ubHkgb25lIHB1cnBvc2UKK3doaWNoIGlzIHRoYXQgaXRzIGFkZGVkIHRvIHRoZSBhZGRyZXNzZXMgb24gdGhlIGxvb3BiYWNrIGRldmljZS4KKworV2l0aCAyLjQga2VybmVscywgREVDbmV0IHdvdWxkIG9ubHkgcmVjb2duaXNlIGFkZHJlc3NlcyBhcyBsb2NhbCBpZiB0aGV5Cit3ZXJlIGFkZGVkIHRvIHRoZSBsb29wYmFjayBkZXZpY2UuIEluIDIuNSwgYW55IGxvY2FsIGludGVyZmFjZSBhZGRyZXNzCitjYW4gYmUgdXNlZCB0byBsb29wIGJhY2sgdG8gdGhlIGxvY2FsIG1hY2hpbmUuIE9mIGNvdXJzZSB0aGlzIGRvZXMgbm90CitwcmV2ZW50IHlvdSBhZGRpbmcgZnVydGhlciBhZGRyZXNzZXMgdG8gdGhlIGxvb3BiYWNrIGRldmljZSBpZiB5b3UKK3dhbnQgdG8uCisKK04uQi4gU2luY2UgdGhlIGFkZHJlc3MgbGlzdCBvZiBhbiBpbnRlcmZhY2UgZGV0ZXJtaW5lcyB0aGUgYWRkcmVzc2VzIGZvcgord2hpY2ggImhlbGxvIiBtZXNzYWdlcyBhcmUgc2VudCwgaWYgeW91IGRvbid0IHNldCBhbiBhZGRyZXNzIG9uIHRoZSBsb29wYmFjaworaW50ZXJmYWNlIHRoZW4geW91IHdvbid0IHNlZSBhbnkgZW50cmllcyBpbiAvcHJvYy9uZXQvbmVpZ2ggZm9yIHRoZSBsb2NhbAoraG9zdCB1bnRpbCBzdWNoIHRpbWUgYXMgeW91IHN0YXJ0IGEgY29ubmVjdGlvbi4gVGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUKK29wZXJhdGlvbiBvZiB0aGUgbG9jYWwgY29tbXVuaWNhdGlvbnMgaW4gYW55IG90aGVyIHdheSB0aG91Z2guCisKK1RoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHRha2VzIG9wdGlvbnMgbG9va2luZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICBkZWNuZXQ9MSwyCisKK3RoZSB0d28gbnVtYmVycyBhcmUgdGhlIG5vZGUgYWRkcmVzcyAxLDIgPSAxLjIgRm9yIDIuMi54eCBrZXJuZWxzCithbmQgZWFybHkgMi4zLnh4IGtlcm5lbHMsIHlvdSBtdXN0IHVzZSBhIGNvbW1hIHdoZW4gc3BlY2lmeWluZyB0aGUKK0RFQ25ldCBhZGRyZXNzIGxpa2UgdGhpcy4gRm9yIG1vcmUgcmVjZW50IDIuMy54eCBrZXJuZWxzLCB5b3UgbWF5Cit1c2UgYWxtb3N0IGFueSBjaGFyYWN0ZXIgZXhjZXB0IHNwYWNlLCBhbHRob3VnaCBhIGAuYCB3b3VsZCBiZSB0aGUgbW9zdAorb2J2aW91cyBjaG9pY2UgOi0pCisKK1RoZXJlIHVzZWQgdG8gYmUgYSB0aGlyZCBudW1iZXIgc3BlY2lmeWluZyB0aGUgbm9kZSB0eXBlLiBUaGlzIG9wdGlvbgoraGFzIGdvbmUgYXdheSBpbiBmYXZvdXIgb2YgYSBwZXIgaW50ZXJmYWNlIG5vZGUgdHlwZS4gVGhpcyBpcyBub3cgc2V0Cit1c2luZyAvcHJvYy9zeXMvbmV0L2RlY25ldC9jb25mLzxkZXY+L2ZvcndhcmRpbmcuIFRoaXMgZmlsZSBjYW4gYmUKK3NldCB3aXRoIGEgc2luZ2xlIGRpZ2l0LCAwPUVuZE5vZGUsIDE9TDEgUm91dGVyIGFuZCAgMj1MMiBSb3V0ZXIuCisKK1RoZXJlIGFyZSBhbHNvIGVxdWl2YWxlbnQgb3B0aW9ucyBmb3IgbW9kdWxlcy4gVGhlIG5vZGUgYWRkcmVzcyBjYW4KK2Fsc28gYmUgc2V0IHRocm91Z2ggdGhlIC9wcm9jL3N5cy9uZXQvZGVjbmV0LyBmaWxlcywgYXMgY2FuIG90aGVyIHN5c3RlbQorcGFyYW1ldGVycy4KKworQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZCBkZXZpY2VzIGFyZSBldGhlcm5ldCBhbmQgaXBfZ3JlLiBUaGUKK2V0aGVybmV0IGFkZHJlc3Mgb2YgeW91ciBldGhlcm5ldCBjYXJkIGhhcyB0byBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBERUNuZXQKK2FkZHJlc3Mgb2YgdGhlIG5vZGUgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIGF1dG9jb25maWd1cmVkIChhbmQgdGhlbiBhcHBlYXIgaW4KKy9wcm9jL25ldC9kZWNuZXRfZGV2KS4gVGhlcmUgaXMgYSB1dGlsaXR5IGF2YWlsYWJsZSBhdCB0aGUgYWJvdmUKK0ZUUCBzaXRlcyBjYWxsZWQgZG4yZXRoYWRkciB3aGljaCBjYW4gY29tcHV0ZSB0aGUgY29ycmVjdCBldGhlcm5ldAorYWRkcmVzcyB0byB1c2UuIFRoZSBhZGRyZXNzIGNhbiBiZSBzZXQgYnkgaWZjb25maWcgZWl0aGVyIGJlZm9yZSBhdAorYXQgdGhlIHRpbWUgdGhlIGRldmljZSBpcyBicm91Z2h0IHVwLiBJZiB5b3UgYXJlIHVzaW5nIFJlZEhhdCB5b3UgY2FuCithZGQgdGhlIGxpbmU6CisKKyAgICBNQUNBRERSPUFBOjAwOjA0OjAwOjAzOjA0CisKK29yIHNvbWV0aGluZyBzaW1pbGFyLCB0byAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvaWZjZmctZXRoMCBvcgord2hlcmV2ZXIgeW91ciBuZXR3b3JrIGNhcmQncyBjb25maWd1cmF0aW9uIGxpdmVzLiBTZXR0aW5nIHRoZSBNQUMgYWRkcmVzcworb2YgeW91ciBldGhlcm5ldCBjYXJkIHRvIGFuIGFkZHJlc3Mgc3RhcnRpbmcgd2l0aCAiaGktb3JkIiB3aWxsIGNhdXNlIGEKK0RFQ25ldCBhZGRyZXNzIHdoaWNoIG1hdGNoZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGludGVyZmFjZSAod2hpY2ggeW91IGNhbgordmVyaWZ5IHdpdGggaXByb3V0ZTIpLgorCitUaGUgZGVmYXVsdCBkZXZpY2UgZm9yIHJvdXRpbmcgY2FuIGJlIHNldCB0aHJvdWdoIHRoZSAvcHJvYyBmaWxlc3lzdGVtCitieSBzZXR0aW5nIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2RlZmF1bHRfZGV2aWNlIHRvIHRoZQorZGV2aWNlIHlvdSB3YW50IERFQ25ldCB0byByb3V0ZSBwYWNrZXRzIG91dCBvZiB3aGVuIG5vIHNwZWNpZmljIHJvdXRlCitpcyBhdmFpbGFibGUuIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGV0aDAsIGZvciBleGFtcGxlOgorCisgICAgZWNobyAtbiAiZXRoMCIgPi9wcm9jL3N5cy9uZXQvZGVjbmV0L2RlZmF1bHRfZGV2aWNlCisKK0lmIHlvdSBkb24ndCBzZXQgdGhlIGRlZmF1bHQgZGV2aWNlLCB0aGVuIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZmlyc3QKK2V0aGVybmV0IGNhcmQgd2hpY2ggaGFzIGJlZW4gYXV0b2NvbmZpZ3VyZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiBZb3UgY2FuCitjb25maXJtIHRoYXQgYnkgbG9va2luZyBpbiB0aGUgZGVmYXVsdF9kZXZpY2UgZmlsZSBvZiBjb3Vyc2UuCisKK1RoZXJlIGlzIGEgbGlzdCBvZiB3aGF0IHRoZSBvdGhlciBmaWxlcyB1bmRlciAvcHJvYy9zeXMvbmV0L2RlY25ldC8gZG8KK29uIHRoZSBrZXJuZWwgcGF0Y2ggd2ViIHNpdGUgKHNob3duIGFib3ZlKS4KKworNCkgUnVuIHRpbWUga2VybmVsIGNvbmZpZ3VyYXRpb24KKworVGhpcyBpcyBlaXRoZXIgZG9uZSB0aHJvdWdoIHRoZSBzeXNjdGwvcHJvYyBpbnRlcmZhY2UgKHNlZSB0aGUga2VybmVsIHdlYgorcGFnZXMgZm9yIGRldGFpbHMgb24gd2hhdCB0aGUgdmFyaW91cyBvcHRpb25zIGRvKSBvciB0aHJvdWdoIHRoZSBpcHJvdXRlMgorcGFja2FnZSBpbiB0aGUgc2FtZSB3YXkgYXMgSVB2NC82IGNvbmZpZ3VyYXRpb24gaXMgcGVyZm9ybWVkLgorCitEb2N1bWVudGF0aW9uIGZvciBpcHJvdXRlMiBpcyBpbmNsdWRlZCB3aXRoIHRoZSBwYWNrYWdlLCBhbHRob3VnaCB0aGVyZSBpcworYXMgeWV0IG5vIHNwZWNpZmljIHNlY3Rpb24gb24gREVDbmV0LCBtb3N0IG9mIHRoZSBmZWF0dXJlcyBhcHBseSB0byBib3RoCitJUCBhbmQgREVDbmV0LCBhbGJlaXQgd2l0aCBERUNuZXQgYWRkcmVzc2VzIGluc3RlYWQgb2YgSVAgYWRkcmVzc2VzIGFuZAorYSByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkuCisKK0lmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSBhIERFQ25ldCByb3V0ZXIgeW91J2xsIG5lZWQgdGhlIGlwcm91dGUyIHBhY2thZ2UKK3NpbmNlIGl0cyB0aGUgX29ubHlfIHdheSB0byBhZGQgYW5kIGRlbGV0ZSByb3V0ZXMgY3VycmVudGx5LiBFdmVudHVhbGx5Cit0aGVyZSB3aWxsIGJlIGEgcm91dGluZyBkYWVtb24gdG8gc2VuZCBhbmQgcmVjZWl2ZSByb3V0aW5nIG1lc3NhZ2VzIGZvcgorZWFjaCBpbnRlcmZhY2UgYW5kIHVwZGF0ZSB0aGUga2VybmVsIHJvdXRpbmcgdGFibGVzIGFjY29yZGluZ2x5LiBUaGUKK3JvdXRpbmcgZGFlbW9uIHdpbGwgdXNlIG5ldGZpbHRlciB0byBsaXN0ZW4gdG8gcm91dGluZyBwYWNrZXRzLCBhbmQKK3J0bmV0bGluayB0byB1cGRhdGUgdGhlIGtlcm5lbHMgcm91dGluZyB0YWJsZXMuIAorCitUaGUgREVDbmV0IHJhdyBzb2NrZXQgbGF5ZXIgaGFzIGJlZW4gcmVtb3ZlZCBzaW5jZSBpdCB3YXMgdGhlcmUgcHVyZWx5Citmb3IgdXNlIGJ5IHRoZSByb3V0aW5nIGRhZW1vbiB3aGljaCB3aWxsIG5vdyB1c2UgbmV0ZmlsdGVyIChhIG11Y2ggY2xlYW5lcgorYW5kIG1vcmUgZ2VuZXJpYyBzb2x1dGlvbikgaW5zdGVhZC4KKworNSkgSG93IGNhbiBJIHRlbGwgaWYgaXRzIHdvcmtpbmcgPworCitIZXJlIGlzIGEgcXVpY2sgZ3VpZGUgb2Ygd2hhdCB0byBsb29rIGZvciBpbiBvcmRlciB0byBrbm93IGlmIHlvdXIgREVDbmV0CitrZXJuZWwgc3Vic3lzdGVtIGlzIHdvcmtpbmcuCisKKyAgIC0gSXMgdGhlIG5vZGUgYWRkcmVzcyBzZXQgKHNlZSAvcHJvYy9zeXMvbmV0L2RlY25ldC9ub2RlX2FkZHJlc3MpCisgICAtIElzIHRoZSBub2RlIG9mIHRoZSBjb3JyZWN0IHR5cGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgL3Byb2Mvc3lzL25ldC9kZWNuZXQvY29uZi88ZGV2Pi9mb3J3YXJkaW5nKQorICAgLSBJcyB0aGUgRXRoZXJuZXQgTUFDIGFkZHJlc3Mgb2YgZWFjaCBFdGhlcm5ldCBjYXJkIHNldCB0byBtYXRjaAorICAgICB0aGUgREVDbmV0IGFkZHJlc3MuIElmIGluIGRvdWJ0IHVzZSB0aGUgZG4yZXRoYWRkciB1dGlsaXR5IGF2YWlsYWJsZQorICAgICBhdCB0aGUgZnRwIGFyY2hpdmUuCisgICAtIElmIHRoZSBwcmV2aW91cyB0d28gc3RlcHMgYXJlIHNhdGlzZmllZCwgYW5kIHRoZSBFdGhlcm5ldCBjYXJkIGlzIHVwLAorICAgICB5b3Ugc2hvdWxkIGZpbmQgdGhhdCBpdCBpcyBsaXN0ZWQgaW4gL3Byb2MvbmV0L2RlY25ldF9kZXYgYW5kIGFsc28KKyAgICAgdGhhdCBpdCBhcHBlYXJzIGFzIGEgZGlyZWN0b3J5IGluIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2NvbmYvLiBUaGUKKyAgICAgbG9vcGJhY2sgZGV2aWNlIChsbykgc2hvdWxkIGFsc28gYXBwZWFyIGFuZCBpcyByZXF1aXJlZCB0byBjb21tdW5pY2F0ZQorICAgICB3aXRoaW4gYSBub2RlLgorICAgLSBJZiB5b3UgaGF2ZSBhbnkgREVDbmV0IHJvdXRlcnMgb24geW91ciBuZXR3b3JrLCB0aGV5IHNob3VsZCBhcHBlYXIKKyAgICAgaW4gL3Byb2MvbmV0L2RlY25ldF9uZWlnaCwgb3RoZXJ3aXNlIHRoaXMgZmlsZSB3aWxsIG9ubHkgY29udGFpbiB0aGUKKyAgICAgZW50cnkgZm9yIHRoZSBub2RlIGl0c2VsZiAoaWYgaXQgZG9lc24ndCBjaGVjayB0byBzZWUgaWYgbG8gaXMgdXApLgorICAgLSBJZiB5b3Ugd2FudCB0byBzZW5kIHRvIGFueSBub2RlIHdoaWNoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlCisgICAgIC9wcm9jL25ldC9kZWNuZXRfbmVpZ2ggZmlsZSwgeW91J2xsIG5lZWQgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmljZQorICAgICB0byBwb2ludCB0byBhbiBFdGhlcm5ldCBjYXJkIHdpdGggY29ubmVjdGlvbiB0byBhIHJvdXRlci4gVGhpcyBpcworICAgICBhZ2FpbiBkb25lIHdpdGggdGhlIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2RlZmF1bHRfZGV2aWNlIGZpbGUuCisgICAtIFRyeSBzdGFydGluZyBhIHNpbXBsZSBzZXJ2ZXIgYW5kIGNsaWVudCwgbGlrZSB0aGUgZG5waW5nL2RubWlycm9yCisgICAgIG92ZXIgdGhlIGxvb3BiYWNrIGludGVyZmFjZS4gV2l0aCBsdWNrIHRoZXkgc2hvdWxkIGNvbW11bmljYXRlLgorICAgICBGb3IgdGhpcyBzdGVwIGFuZCB0aG9zZSBhZnRlciwgeW91J2xsIG5lZWQgdGhlIERFQ25ldCBsaWJyYXJ5CisgICAgIHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBhYm92ZSBmdHAgc2l0ZXMgYXMgd2VsbCBhcyB0aGUKKyAgICAgYWN0dWFsIHV0aWxpdGllcyB0aGVtc2VsdmVzLgorICAgLSBJZiB0aGlzIHNlZW1zIHRvIHdvcmssIHRoZW4gdHJ5IHRhbGtpbmcgdG8gYSBub2RlIG9uIHlvdXIgbG9jYWwKKyAgICAgbmV0d29yaywgYW5kIHNlZSBpZiB5b3UgY2FuIG9idGFpbiB0aGUgc2FtZSByZXN1bHRzLgorICAgLSBBdCB0aGlzIHBvaW50IHlvdSBhcmUgb24geW91ciBvd24uLi4gOi0pCisKKzYpIEhvdyB0byBzZW5kIGEgYnVnIHJlcG9ydAorCitJZiB5b3UndmUgZm91bmQgYSBidWcgYW5kIHdhbnQgdG8gcmVwb3J0IGl0LCB0aGVuIHRoZXJlIGFyZSBzZXZlcmFsIHRoaW5ncworeW91IGNhbiBkbyB0byBoZWxwIG1lIHdvcmsgb3V0IGV4YWN0bHkgd2hhdCBpdCBpcyB0aGF0IGlzIHdyb25nLiBVc2VmdWwKK2luZm9ybWF0aW9uIChfbW9zdF8gb2Ygd2hpY2ggX2lzXyBfZXNzZW50aWFsXykgaW5jbHVkZXM6CisKKyAtIFdoYXQga2VybmVsIHZlcnNpb24gYXJlIHlvdSBydW5uaW5nID8KKyAtIFdoYXQgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggYXJlIHlvdSBydW5uaW5nID8KKyAtIEhvdyBmYXIgdGhvdWdoIHRoZSBhYm92ZSBzZXQgb2YgdGVzdHMgY2FuIHlvdSBnZXQgPworIC0gV2hhdCBpcyBpbiB0aGUgL3Byb2MvZGVjbmV0KiBmaWxlcyBhbmQgL3Byb2Mvc3lzL25ldC9kZWNuZXQvKiBmaWxlcyA/CisgLSBXaGljaCBzZXJ2aWNlcyBhcmUgeW91IHJ1bm5pbmcgPworIC0gV2hpY2ggY2xpZW50IGNhdXNlZCB0aGUgcHJvYmxlbSA/CisgLSBIb3cgbXVjaCBkYXRhIHdhcyBiZWluZyB0cmFuc2ZlcnJlZCA/CisgLSBXYXMgdGhlIG5ldHdvcmsgY29uZ2VzdGVkID8KKyAtIElmIHRoZXJlIHdhcyBhIGtlcm5lbCBwYW5pYywgcGxlYXNlIHJ1biB0aGUgb3V0cHV0IHRocm91Z2gga3N5bW9vcHMKKyAgIGJlZm9yZSBzZW5kaW5nIGl0IHRvIG1lLCBvdGhlcndpc2UgaXRzIF91c2VsZXNzXy4KKyAtIEhvdyBjYW4gdGhlIHByb2JsZW0gYmUgcmVwcm9kdWNlZCA/CisgLSBDYW4geW91IHVzZSB0Y3BkdW1wIHRvIGdldCBhIHRyYWNlID8gKE4uQi4gTW9zdCAoYWxsPykgdmVyc2lvbnMgb2YgCisgICB0Y3BkdW1wIGRvbid0IHVuZGVyc3RhbmQgaG93IHRvIGR1bXAgREVDbmV0IHByb3Blcmx5LCBzbyBpbmNsdWRpbmcKKyAgIHRoZSBoZXggbGlzdGluZyBvZiB0aGUgcGFja2V0IGNvbnRlbnRzIGlzIF9lc3NlbnRpYWxfLCB1c3VhbGx5IHRoZSAteCBmbGFnLgorICAgWW91IG1heSBhbHNvIG5lZWQgdG8gaW5jcmVhc2UgdGhlIGxlbmd0aCBncmFiYmVkIHdpdGggdGhlIC1zIGZsYWcuIFRoZQorICAgLWUgZmxhZyBhbHNvIHByb3ZpZGVzIHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uIChldGhlcm5ldCBNQUMgYWRkcmVzc2VzKSkKKworNykgTUFDIEZBUQorCitBIHF1aWNrIEZBUSBvbiBldGhlcm5ldCBNQUMgYWRkcmVzc2VzIHRvIGV4cGxhaW4gaG93IExpbnV4IGFuZCBERUNuZXQKK2ludGVyYWN0IGFuZCBob3cgdG8gZ2V0IHRoZSBiZXN0IHBlcmZvcm1hbmNlIGZyb20geW91ciBoYXJkd2FyZS4gCisKK0V0aGVybmV0IGNhcmRzIGFyZSBkZXNpZ25lZCB0byBub3JtYWxseSBvbmx5IHBhc3MgcmVjZWl2ZWQgbmV0d29yayBmcmFtZXMgCit0byBhIGhvc3QgY29tcHV0ZXIgd2hlbiB0aGV5IGFyZSBhZGRyZXNzZWQgdG8gaXQsIG9yIHRvIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KKworTGludXggaGFzIGFuIGludGVyZmFjZSB3aGljaCBhbGxvd3MgdGhlIHNldHRpbmcgb2YgZXh0cmEgYWRkcmVzc2VzIGZvcgorYW4gZXRoZXJuZXQgY2FyZCB0byBsaXN0ZW4gdG8uIElmIHRoZSBldGhlcm5ldCBjYXJkIHN1cHBvcnRzIGl0LCB0aGUKK2ZpbHRlcmluZyBvcGVyYXRpb24gd2lsbCBiZSBkb25lIGluIGhhcmR3YXJlLCBpZiBub3QgdGhlIGV4dHJhIHVud2FudGVkIHBhY2tldHMKK3JlY2VpdmVkIHdpbGwgYmUgZGlzY2FyZGVkIGJ5IHRoZSBob3N0IGNvbXB1dGVyLiBJbiB0aGUgbGF0dGVyIGNhc2UsCitzaWduaWZpY2FudCBwcm9jZXNzb3IgdGltZSBhbmQgYnVzIGJhbmR3aWR0aCBjYW4gYmUgdXNlZCB1cCBvbiBhIGJ1c3kKK25ldHdvcmsgKHNlZSB0aGUgTkFQSSBkb2N1bWVudGF0aW9uIGZvciBhIGxvbmdlciBleHBsYW5hdGlvbiBvZiB0aGVzZQorZWZmZWN0cykuCisKK0RFQ25ldCBtYWtlcyB1c2Ugb2YgdGhpcyBpbnRlcmZhY2UgdG8gYWxsb3cgcnVubmluZyBERUNuZXQgb24gYW4gZXRoZXJuZXQgCitjYXJkIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gY29uZmlndXJlZCB1c2luZyBUQ1AvSVAgKHByZXN1bWFibHkgdXNpbmcgdGhlIAorYnVpbHQgaW4gTUFDIGFkZHJlc3Mgb2YgdGhlIGNhcmQsIGFzIHVzdWFsKSBhbmQvb3IgdG8gYWxsb3cgbXVsdGlwbGUgREVDbmV0CithZGRyZXNzZXMgb24gZWFjaCBwaHlzaWNhbCBpbnRlcmZhY2UuIElmIHlvdSBkbyB0aGlzLCBiZSBhd2FyZSB0aGF0IGlmIHlvdXIKK2V0aGVybmV0IGNhcmQgZG9lc24ndCBzdXBwb3J0IHBlcmZlY3QgaGFzaGluZyBpbiBpdHMgTUFDIGFkZHJlc3MgZmlsdGVyCit0aGVuIHlvdXIgY29tcHV0ZXIgd2lsbCBiZSBkb2luZyBtb3JlIHdvcmsgdGhhbiByZXF1aXJlZC4gU29tZSBjYXJkcword2lsbCBzaW1wbHkgc2V0IHRoZW1zZWx2ZXMgaW50byBwcm9taXNjdW91cyBtb2RlIGluIG9yZGVyIHRvIHJlY2VpdmUKK3BhY2tldHMgZnJvbSB0aGUgREVDbmV0IHNwZWNpZmllZCBhZGRyZXNzZXMuIFNvIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZQorY2FyZHMgaXRzIGJldHRlciB0byBzZXQgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBjYXJkIGFzIGRlc2NyaWJlZCBhYm92ZQordG8gZ2FpbiB0aGUgYmVzdCBlZmZpY2llbmN5LiBCZXR0ZXIgc3RpbGwgaXMgdG8gdXNlIGEgY2FyZCB3aGljaCBzdXBwb3J0cworTkFQSSBhcyB3ZWxsLgorCisKKzgpIE1haWxpbmcgbGlzdAorCitJZiB5b3UgYXJlIGtlZW4gdG8gZ2V0IGludm9sdmVkIGluIGRldmVsb3BtZW50LCBvciB3YW50IHRvIGFzayBxdWVzdGlvbnMKK2Fib3V0IGNvbmZpZ3VyYXRpb24sIG9yIGV2ZW4ganVzdCByZXBvcnQgYnVncywgdGhlbiB0aGVyZSBpcyBhIG1haWxpbmcKK2xpc3QgdGhhdCB5b3UgY2FuIGpvaW4sIGRldGFpbHMgYXJlIGF0OgorCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWwvP2dyb3VwX2lkPTQ5OTMKKworOSkgTGVnYWwgSW5mbworCitUaGUgTGludXggREVDbmV0IHByb2plY3QgdGVhbSBoYXZlIHBsYWNlZCB0aGVpciBjb2RlIHVuZGVyIHRoZSBHUEwuIFRoZQorc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiBhbmQgd2l0aG91dCB3YXJyYW50eSBleHByZXNzIG9yIGltcGxpZWQuCitERUNuZXQgaXMgYSB0cmFkZW1hcmsgb2YgQ29tcGFxLiBUaGlzIHNvZnR3YXJlIGlzIG5vdCBhIHByb2R1Y3Qgb2YKK0NvbXBhcS4gV2UgYWNrbm93bGVkZ2UgdGhlIGhlbHAgb2YgcGVvcGxlIGF0IENvbXBhcSBpbiBwcm92aWRpbmcgZXh0cmEKK2RvY3VtZW50YXRpb24gYWJvdmUgYW5kIGJleW9uZCB3aGF0IHdhcyBwcmV2aW91c2x5IHB1YmxpY2x5IGF2YWlsYWJsZS4KKworU3RldmUgV2hpdGVob3VzZSA8U3RldmVXQEFDTS5vcmc+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXBjYS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVwY2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YzZiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVwY2EudHh0CkBAIC0wLDAgKzEsOTIgQEAKKworREUxMHgKKz09PT09CisKK01lbW9yeSBBZGRyZXNzZXM6CisKKwlTVzEJU1cyCVNXMwlTVzQKKzY0SwlvbglvbglvbglvbglkMDAwMAlkYmZmZgorCW9mZglvbglvbglvbgljMDAwMAljYmZmZgorCW9mZglvZmYJb24Jb24JZTAwMDAJZWJmZmYKKworMzJLCW9uCW9uCW9mZglvbglkODAwMAlkYmZmZgorCW9mZglvbglvZmYJb24JYzgwMDAJY2JmZmYKKwlvZmYJb2ZmCW9mZglvbgllODAwMAllYmZmZgorCitEQlIgUk9NCW9uCW9uCQkJZGMwMDAJZGZmZmYKKwlvZmYJb24JCQljYzAwMAljZmZmZgorCW9mZglvZmYJCQllYzAwMAllZmZmZgorCitOb3RlICB0aGF0IHRoZSAySyAgbW9kZSAgIGlzIHNldCAgYnkgICBTVzMvU1c0ICBvbi9vZmYgb3IgIG9mZi9vZmYuICBBZGRyZXNzCithc3NpZ25tZW50IGlzIHRocm91Z2ggdGhlIFJCU0EgcmVnaXN0ZXIuCisKK0kvTyBBZGRyZXNzOgorCVNXNQorMHgzMDAJb24KKzB4MjAwCW9mZgorCitSZW1vdGUgQm9vdDoKKwlTVzYKK0Rpc2FibGUJb24KK0VuYWJsZQlvZmYKKworUmVtb3RlIEJvb3QgVGltZW91dDoKKwlTVzcKKzIuNW1pbglvbgorMzBzCW9mZgorCitJUlE6CisJU1c4CVNXOQlTVzEwCVNXMTEJU1cxMgorMglvbglvZmYJb2ZmCW9mZglvZmYKKzMJb2ZmCW9uCW9mZglvZmYJb2ZmCis0CW9mZglvZmYJb24Jb2ZmCW9mZgorNQlvZmYJb2ZmCW9mZglvbglvZmYKKzcJb2ZmCW9mZglvZmYJb2ZmCW9uCisKK0RFMjB4Cis9PT09PQorCitNZW1vcnkgU2l6ZToKKworCVNXMwlTVzQKKzY0SwlvbglvbgorMzJLCW9mZglvbgorMksJb24gCW9mZgorMksJb2ZmCW9mZgorCitTdGFydCBBZGRyZXNzZXM6CisKKwlTVzEJU1cyCVNXMwlTVzQKKzY0SwlvbglvbglvbglvbgljMDAwMAljZmZmZgorCW9uCW9mZglvbglvbglkMDAwMAlkZmZmZgorCW9mZglvbglvbglvbgllMDAwMAllZmZmZgorCiszMksJb24Jb24Jb2ZmCW9mZgljODAwMAljZmZmZgorCW9uCW9mZglvZmYJb2ZmCWQ4MDAwCWRmZmZmCisJb2ZmCW9uCW9mZglvZmYJZTgwMDAJZWZmZmYKKworSWxsZWdhbAlvZmYJb2ZmCSAtCSAtCSAgLQkgIC0KKworSS9PIEFkZHJlc3M6CisJU1c1CisweDMwMAlvbgorMHgyMDAJb2ZmCisKK1JlbW90ZSBCb290OgorCVNXNgorRGlzYWJsZQlvbgorRW5hYmxlCW9mZgorCitSZW1vdGUgQm9vdCBUaW1lb3V0OgorCVNXNworMi41bWluCW9uCiszMHMJb2ZmCisKK0lSUToKKwlTVzgJU1c5CVNXMTAJU1cxMQlTVzEyCis1CW9uCW9mZglvZmYJb2ZmCW9mZgorOQlvZmYJb24Jb2ZmCW9mZglvZmYKKzEwCW9mZglvZmYJb24Jb2ZmCW9mZgorMTEJb2ZmCW9mZglvZmYJb24Jb2ZmCisxNQlvZmYJb2ZmCW9mZglvZmYJb24KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RncnMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RncnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTFiYjNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RncnMudHh0CkBAIC0wLDAgKzEsNTIgQEAKKyAgICBUaGUgRGlnaSBJbnRlcm5hdGlvbmFsIFJpZ2h0U3dpdGNoIFNFLVggKGRncnMpIERldmljZSBEcml2ZXIKKworVGhpcyBpcyBhIExpbnV4IGRyaXZlciBmb3IgdGhlIERpZ2kgSW50ZXJuYXRpb25hbCBSaWdodFN3aXRjaCBTRS1YCitFSVNBIGFuZCBQQ0kgYm9hcmRzLiAgVGhlc2UgYXJlIDQgKEVJU0EpIG9yIDYgKFBDSSkgcG9ydCBFdGhlcm5ldAorc3dpdGNoZXMgYW5kIGEgTklDIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgYm9hcmQuICBUaGlzIGRyaXZlciBjYW4KK2JlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBzdGF0aWNhbGx5IG9yIGFzIGEgbG9hZGFibGUgbW9kdWxlLgorCitUaGVyZSBpcyBhbHNvIGEgY29tcGFuaW9uIG1hbmFnZW1lbnQgdG9vbCwgY2FsbGVkICJ4cmlnaHRzd2l0Y2giLgorVGhlIG1hbmFnZW1lbnQgdG9vbCBsZXRzIHlvdSB3YXRjaCB0aGUgcGVyZm9ybWFuY2UgZ3JhcGhpY2FsbHksCithcyB3ZWxsIGFzIHNldCB0aGUgU05NUCBhZ2VudCBJUCBhbmQgSVBYIGFkZHJlc3NlcywgSUVFRSBTcGFubmluZworVHJlZSwgYW5kIEFnaW5nIHRpbWUuICBUaGVzZSBjYW4gYWxzbyBiZSBzZXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lCit3aGVuIHRoZSBkcml2ZXIgaXMgbG9hZGVkLiAgVGhlIGRyaXZlciBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmU6CisKKwlkZWJ1Zz1OTk4JCURlYnVnIHByaW50aW5nIGxldmVsCisJZG1hPTAvMQkJCURpc2FibGUvRW5hYmxlIERNQSBvbiBQQ0kgY2FyZAorCXNwYW50cmVlPTAvMQkJRGlzYWJsZS9FbmFibGUgSUVFRSBzcGFubmluZyB0cmVlCisJaGFzaGV4cGlyZT1OTk4JCUNoYW5nZSBhZGRyZXNzIGFnaW5nIHRpbWUgKGRlZmF1bHQgMzAwIHNlY29uZHMpCisJaXBhZGRyPUEsQixDLEQJCVNldCBTTk1QIGFnZW50IElQIGFkZHJlc3MgaS5lLiAxOTksODYsOCwyMjEKKwlpcHRyYXA9QSxCLEMsRAkJU2V0IFNOTVAgYWdlbnQgSVAgdHJhcCBhZGRyZXNzIGkuZS4gMTk5LDg2LDgsMjIxCisJaXB4bmV0PU5OTgkJU2V0IFNOTVAgYWdlbnQgSVBYIG5ldHdvcmsgbnVtYmVyCisJbmljbW9kZT0wLzEJCURpc2FibGUvRW5hYmxlIG11bHRpcGxlIE5JQyBtb2RlCisKK1RoZXJlIGlzIGFsc28gYSB0b29sIGZvciBzZXR0aW5nIHVwIGlucHV0IGFuZCBvdXRwdXQgcGFja2V0IGZpbHRlcnMKK29uIGVhY2ggcG9ydCwgY2FsbGVkICJkZ3JzZmlsdCIuCisKK0JvdGggdGhlIG1hbmFnZW1lbnQgdG9vbCBhbmQgdGhlIGZpbHRlcmluZyB0b29sIGFyZSBhdmFpbGFibGUKK3NlcGFyYXRlbHkgZnJvbSB0aGUgZm9sbG93aW5nIEZUUCBzaXRlOgorCisJZnRwOi8vZnRwLmRnaWkuY29tL2RyaXZlcnMvcmlnaHRzd2l0Y2gvbGludXgvCisKK1doZW4gbmljbW9kZT0xLCB0aGUgYm9hcmQgYW5kIGRyaXZlciBvcGVyYXRlIGFzIDQgb3IgNiBpbmRpdmlkdWFsCitOSUMgcG9ydHMgKGV0aDAuLi5ldGg1KSBpbnN0ZWFkIG9mIGFzIGEgc3dpdGNoLiAgQWxsIHN3aXRjaGluZworZnVuY3Rpb25zIGFyZSBkaXNhYmxlZC4gIEluIHRoZSBmdXR1cmUsIHRoZSBib2FyZCBmaXJtd2FyZSBtYXkgaW5jbHVkZQorYSByb3V0aW5nIGNhY2hlIHdoZW4gaW4gdGhpcyBtb2RlLgorCitDb3B5cmlnaHQgMTk5NS0xOTk2IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisKK1RoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKK29mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisKK0ZvciBpbmZvcm1hdGlvbiBvbiBwdXJjaGFzaW5nIGEgUmlnaHRTd2l0Y2ggU0UtNCBvciBTRS02Citib2FyZCwgcGxlYXNlIGNvbnRhY3QgRGlnaSdzIHNhbGVzIGRlcGFydG1lbnQgYXQgMS02MTItOTEyLTM0NDQKK29yIDEtODAwLURJR0lCUkQuICBPdXRzaWRlIHRoZSBVLlMuLCBwbGVhc2UgY2hlY2sgb3VyIFdlYiBwYWdlIGF0OgorCisJaHR0cDovL3d3dy5kZ2lpLmNvbQorCitmb3Igc2FsZXMgb2ZmaWNlcyB3b3JsZHdpZGUuICBUZWNoIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaAordGhlIGNoYW5uZWxzIGxpc3RlZCBvbiB0aGUgV2ViIHNpdGUsIGFsdGhvdWdoIGFzIGxvbmcgYXMgSSBhbQorZW1wbG95ZWQgb24gbmV0d29ya2luZyBwcm9kdWN0cyBhdCBEaWdpIEkgd2lsbCBiZSBoYXBweSB0byBwcm92aWRlCithbnkgYnVnIGZpeGVzIHRoYXQgbWF5IGJlIG5lZWRlZC4KKworLVJpY2sgUmljaGFyZHNvbiwgcmlja0BkZ2lpLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RsMmsudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RsMmsudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjA0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGwyay50eHQKQEAgLTAsMCArMSwyODEgQEAKKworICAgIEQtTGluayBETDIwMDAtYmFzZWQgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyIEluc3RhbGxhdGlvbgorICAgIGZvciBMaW51eAorICAgIE1heSAyMywgMjAwMgorCitDb250ZW50cworPT09PT09PT0KKyAtIENvbXBhdGliaWxpdHkgTGlzdAorIC0gUXVpY2sgSW5zdGFsbAorIC0gQ29tcGlsaW5nIHRoZSBEcml2ZXIKKyAtIEluc3RhbGxpbmcgdGhlIERyaXZlcgorIC0gT3B0aW9uIHBhcmFtZXRlcgorIC0gQ29uZmlndXJhdGlvbiBTY3JpcHQgU2FtcGxlCisgLSBUcm91Ymxlc2hvb3RpbmcKKworCitDb21wYXRpYmlsaXR5IExpc3QKKz09PT09PT09PT09PT09PT09CitBZGFwdGVyIFN1cHBvcnQ6CisKK0QtTGluayBER0UtNTUwVCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIuCitELUxpbmsgREdFLTU1MFNYIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlci4KK0QtTGluayBETDIwMDAtYmFzZWQgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyLgorCisKK1RoZSBkcml2ZXIgc3VwcG9ydCBMaW51eCBrZXJuZWwgMi40LjcgbGF0ZXIuIFdlIGhhZCB0ZXN0ZWQgaXQKK29uIHRoZSBlbnZpcm9ubWVudHMgYmVsb3cuCisKKyAuIFJlZCBIYXQgdjYuMiAodXBkYXRlIGtlcm5lbCB0byAyLjQuNykKKyAuIFJlZCBIYXQgdjcuMCAodXBkYXRlIGtlcm5lbCB0byAyLjQuNykKKyAuIFJlZCBIYXQgdjcuMSAoa2VybmVsIDIuNC43KQorIC4gUmVkIEhhdCB2Ny4yIChrZXJuZWwgMi40LjctMTApCisKKworUXVpY2sgSW5zdGFsbAorPT09PT09PT09PT09PQorSW5zdGFsbCBsaW51eCBkcml2ZXIgYXMgZm9sbG93aW5nIGNvbW1hbmQ6CisKKzEuIG1ha2UgYWxsCisyLiBpbnNtb2QgZGwyay5rbworMy4gaWZjb25maWcgZXRoMCB1cCAxMC54eHgueHh4Lnh4eCBuZXRtYXNrIDI1NS4wLjAuMAorCQkgICAgXl5eXl5eXl5eXl5eXl5eXAkgICAgXl5eXl5eXl5cCisJCQkJICAgIElQCQkgICAgIE5FVE1BU0sKK05vdyBldGgwIHNob3VsZCBhY3RpdmUsIHlvdSBjYW4gdGVzdCBpdCBieSAicGluZyIgb3IgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYnkKKyJpZmNvbmZpZyIuIElmIHRlc3RlZCBvaywgY29udGludWUgdGhlIG5leHQgc3RlcC4KKworNC4gY3AgZGwyay5rbyAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9rZXJuZWwvZHJpdmVycy9uZXQKKzUuIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mOgorCWFsaWFzIGV0aDAgZGwyaworNi4gUnVuICJuZXRjb25maWciIG9yICJuZXRjb25mIiB0byBjcmVhdGUgY29uZmlndXJhdGlvbiBzY3JpcHQgaWZjZmctZXRoMAorICAgbG9jYXRlZCBhdCAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMgb3IgY3JlYXRlIGl0IG1hbnVhbGx5LgorICAgW3NlZSAtIENvbmZpZ3VyYXRpb24gU2NyaXB0IFNhbXBsZV0KKzcuIERyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgbG9hZCBhbmQgY29uZmlndXJlIGF0IG5leHQgYm9vdCB0aW1lLgorCitDb21waWxpbmcgdGhlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT0KKyAgSW4gTGludXgsIE5JQyBkcml2ZXJzIGFyZSBtb3N0IGNvbW1vbmx5IGNvbmZpZ3VyZWQgYXMgbG9hZGFibGUgbW9kdWxlcy4KK1RoZSBhcHByb2FjaCBvZiBidWlsZGluZyBhIG1vbm9saXRoaWMga2VybmVsIGhhcyBiZWNvbWUgb2Jzb2xldGUuIFRoZSBkcml2ZXIKK2NhbiBiZSBjb21waWxlZCBhcyBwYXJ0IG9mIGEgbW9ub2xpdGhpYyBrZXJuZWwsIGJ1dCBpcyBzdHJvbmdseSBkaXNjb3VyYWdlZC4KK1RoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGFzc3VtZXMgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIGxvYWRhYmxlIG1vZHVsZS4KK0luIHRoZSBMaW51eCBlbnZpcm9ubWVudCwgaXQgaXMgYSBnb29kIGlkZWEgdG8gcmVidWlsZCB0aGUgZHJpdmVyIGZyb20gdGhlCitzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgcHJlY29tcGlsZWQgdmVyc2lvbi4gVGhpcyBhcHByb2FjaCBwcm92aWRlcworYmV0dGVyIHJlbGlhYmlsaXR5IHNpbmNlIGEgcHJlY29tcGlsZWQgZHJpdmVyIG1pZ2h0IGRlcGVuZCBvbiBsaWJyYXJpZXMgb3IKK2tlcm5lbCBmZWF0dXJlcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiBhIGdpdmVuIExpbnV4IGluc3RhbGxhdGlvbi4KKworVGhlIDMgZmlsZXMgbmVjZXNzYXJ5IHRvIGJ1aWxkIExpbnV4IGRldmljZSBkcml2ZXIgYXJlIGRsMmsuYywgZGwyay5oIGFuZAorTWFrZWZpbGUuIFRvIGNvbXBpbGUsIHRoZSBMaW51eCBpbnN0YWxsYXRpb24gbXVzdCBpbmNsdWRlIHRoZSBnY2MgY29tcGlsZXIsCit0aGUga2VybmVsIHNvdXJjZSwgYW5kIHRoZSBrZXJuZWwgaGVhZGVycy4gVGhlIExpbnV4IGRyaXZlciBzdXBwb3J0cyBMaW51eAorS2VybmVscyAyLjQuNy4gQ29weSB0aGUgZmlsZXMgdG8gYSBkaXJlY3RvcnkgYW5kIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZAordG8gY29tcGlsZSBhbmQgbGluayB0aGUgZHJpdmVyOgorCitDRC1ST00gZHJpdmUKKy0tLS0tLS0tLS0tLQorCitbcm9vdEBYWFggL10gbWtkaXIgY2Ryb20KK1tyb290QFhYWCAvXSBtb3VudCAtciAtdCBpc285NjYwIC1vIGNvbnY9YXV0byAvZGV2L2Nkcm9tIC9jZHJvbQorW3Jvb3RAWFhYIC9dIGNkIHJvb3QKK1tyb290QFhYWCAvcm9vdF0gbWtkaXIgZGwyaworW3Jvb3RAWFhYIC9yb290XSBjZCBkbDJrCitbcm9vdEBYWFggZGwya10gY3AgL2Nkcm9tL2xpbnV4L2RsMmsudGd6IC9yb290L2RsMmsKK1tyb290QFhYWCBkbDJrXSB0YXIgeGZ2eiBkbDJrLnRnegorW3Jvb3RAWFhYIGRsMmtdIG1ha2UgYWxsCisKK0Zsb3BweSBkaXNjIGRyaXZlCistLS0tLS0tLS0tLS0tLS0tLQorCitbcm9vdEBYWFggL10gY2Qgcm9vdAorW3Jvb3RAWFhYIC9yb290XSBta2RpciBkbDJrCitbcm9vdEBYWFggL3Jvb3RdIGNkIGRsMmsKK1tyb290QFhYWCBkbDJrXSBtY29weSBhOi9saW51eC9kbDJrLnRneiAvcm9vdC9kbDJrCitbcm9vdEBYWFggZGwya10gdGFyIHhmdnogZGwyay50Z3oKK1tyb290QFhYWCBkbDJrXSBtYWtlIGFsbAorCitJbnN0YWxsaW5nIHRoZSBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PQorCisgIE1hbnVhbCBJbnN0YWxsYXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICBPbmNlIHRoZSBkcml2ZXIgaGFzIGJlZW4gY29tcGlsZWQsIGl0IG11c3QgYmUgbG9hZGVkLCBlbmFibGVkLCBhbmQgYm91bmQKKyAgdG8gYSBwcm90b2NvbCBzdGFjayBpbiBvcmRlciB0byBlc3RhYmxpc2ggbmV0d29yayBjb25uZWN0aXZpdHkuIFRvIGxvYWQgYQorICBtb2R1bGUgZW50ZXIgdGhlIGNvbW1hbmQ6CisKKyAgaW5zbW9kIGRsMmsubworCisgIG9yCisKKyAgaW5zbW9kIGRsMmsubyA8b3B0aW9uYWwgcGFyYW1ldGVyPgk7IGFkZCBwYXJhbWV0ZXIKKworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIGV4YW1wbGU6IGluc21vZCBkbDJrLm8gbWVkaWE9MTAwbWJwc19oZAorICAgb3IJICAgIGluc21vZCBkbDJrLm8gbWVkaWE9MworICAgb3IJICAgIGluc21vZCBkbDJrLm8gbWVkaWE9MywyCTsgZm9yIDIgY2FyZHMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgUGxlYXNlIHJlZmVyZW5jZSB0aGUgbGlzdCBvZiB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgc3VwcG9ydGVkIGJ5CisgIHRoZSBMaW51eCBkZXZpY2UgZHJpdmVyIGJlbG93LgorCisgIFRoZSBpbnNtb2QgY29tbWFuZCBvbmx5IGxvYWRzIHRoZSBkcml2ZXIgYW5kIGdpdmVzIGl0IGEgbmFtZSBvZiB0aGUgZm9ybQorICBldGgwLCBldGgxLCBldGMuIFRvIGJyaW5nIHRoZSBOSUMgaW50byBhbiBvcGVyYXRpb25hbCBzdGF0ZSwKKyAgaXQgaXMgbmVjZXNzYXJ5IHRvIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICBpZmNvbmZpZyBldGgwIHVwCisKKyAgRmluYWxseSwgdG8gYmluZCB0aGUgZHJpdmVyIHRvIHRoZSBhY3RpdmUgcHJvdG9jb2wgKGUuZy4sIFRDUC9JUCB3aXRoCisgIExpbnV4KSwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgIGlmdXAgZXRoMAorCisgIE5vdGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdmdWwgb25seSBpZiB0aGUgc3lzdGVtIGNhbiBmaW5kIGEgY29uZmlndXJhdGlvbgorICBzY3JpcHQgdGhhdCBjb250YWlucyB0aGUgbmVjZXNzYXJ5IG5ldHdvcmsgaW5mb3JtYXRpb24uIEEgc2FtcGxlIHdpbGwgYmUKKyAgZ2l2ZW4gaW4gdGhlIG5leHQgcGFyYWdyYXBoLgorCisgIFRoZSBjb21tYW5kcyB0byB1bmxvYWQgYSBkcml2ZXIgYXJlIGFzIGZvbGxvd3M6CisKKyAgaWZkb3duIGV0aDAKKyAgaWZjb25maWcgZXRoMCBkb3duCisgIHJtbW9kIGRsMmsubworCisgIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBjb21tYW5kcyB0byBsaXN0IHRoZSBjdXJyZW50bHkgbG9hZGVkIG1vZHVsZXMgYW5kCisgIHRvIHNlZSB0aGUgY3VycmVudCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uCisKKyAgbHNtb2QKKyAgaWZjb25maWcKKworCisgIEF1dG9tYXRlZCBJbnN0YWxsYXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBpbnN0YWxsIHRoZSBkcml2ZXIgc3VjaCB0aGF0IGl0IGlzCisgIGF1dG9tYXRpY2FsbHkgbG9hZGVkIGFuZCBjb25maWd1cmVkIGF0IGJvb3QgdGltZS4gVGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbgorICBpcyBiYXNlZCBvbiBhIFJlZCBIYXQgNi4wLzcuMCBkaXN0cmlidXRpb24sIGJ1dCBpdCBjYW4gZWFzaWx5IGJlIHBvcnRlZCB0bworICBvdGhlciBkaXN0cmlidXRpb25zIGFzIHdlbGwuCisKKyAgUmVkIEhhdCB2Ni54L3Y3LngKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgMS4gQ29weSBkbDJrLm8gdG8gdGhlIG5ldHdvcmsgbW9kdWxlcyBkaXJlY3RvcnksIHR5cGljYWxseQorICAgICAvbGliL21vZHVsZXMvMi54LngteHgvbmV0IG9yIC9saWIvbW9kdWxlcy8yLngueC9rZXJuZWwvZHJpdmVycy9uZXQuCisgIDIuIExvY2F0ZSB0aGUgYm9vdCBtb2R1bGUgY29uZmlndXJhdGlvbiBmaWxlLCBtb3N0IGNvbW1vbmx5IG1vZHByb2JlLmNvbmYKKyAgICAgb3IgbW9kdWxlcy5jb25mIChmb3IgMi40KSBpbiB0aGUgL2V0YyBkaXJlY3RvcnkuIEFkZCB0aGUgZm9sbG93aW5nIGxpbmVzOgorCisgICAgIGFsaWFzIGV0aHggZGwyaworICAgICBvcHRpb25zIGRsMmsgPG9wdGlvbmFsIHBhcmFtZXRlcnM+CisKKyAgICAgd2hlcmUgZXRoeCB3aWxsIGJlIGV0aDAgaWYgdGhlIE5JQyBpcyB0aGUgb25seSBldGhlcm5ldCBhZGFwdGVyLCBldGgxIGlmCisgICAgIG9uZSBvdGhlciBldGhlcm5ldCBhZGFwdGVyIGlzIGluc3RhbGxlZCwgZXRjLiBSZWZlciB0byB0aGUgdGFibGUgaW4gdGhlCisgICAgIHByZXZpb3VzIHNlY3Rpb24gZm9yIHRoZSBsaXN0IG9mIG9wdGlvbmFsIHBhcmFtZXRlcnMuCisgIDMuIExvY2F0ZSB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIHNjcmlwdHMsIG5vcm1hbGx5IHRoZQorICAgICAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMgZGlyZWN0b3J5LCBhbmQgY3JlYXRlIGEgY29uZmlndXJhdGlvbgorICAgICBzY3JpcHQgbmFtZWQgaWZjZmctZXRoeCB0aGF0IGNvbnRhaW5zIG5ldHdvcmsgaW5mb3JtYXRpb24uCisgIDQuIE5vdGUgdGhhdCBmb3IgbW9zdCBMaW51eCBkaXN0cmlidXRpb25zLCBSZWQgSGF0IGluY2x1ZGVkLCBhIGNvbmZpZ3VyYXRpb24KKyAgICAgdXRpbGl0eSB3aXRoIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIHRvIHBlcmZvcm0gc3RlcHMgMgorICAgICBhbmQgMyBhYm92ZS4KKworCitQYXJhbWV0ZXIgRGVzY3JpcHRpb24KKz09PT09PT09PT09PT09PT09PT09PQorWW91IGNhbiBpbnN0YWxsIHRoaXMgZHJpdmVyIHdpdGhvdXQgYW55IGFkZHRpb25hbCBwYXJhbWV0ZXIuIEhvd2V2ZXIsIGlmIHlvdQorYXJlIGdvaW5nIHRvIGhhdmUgZXh0ZW5zaXZlIGZ1bmN0aW9ucyB0aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBzZXQgZXh0cmEKK3BhcmFtZXRlci4gQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyBzdXBwb3J0ZWQgYnkgdGhlCitMaW51eCBkZXZpY2UKK2RyaXZlci4KKworbXR1PXBhY2tldF9zaXplCQkJLSBTcGVjaWZpZXMgdGhlIG1heGltdW0gcGFja2V0IHNpemUuIGRlZmF1bHQKKwkJCQkgIGlzIDE1MDAuCisKK21lZGlhPW1lZGlhX3R5cGUJCS0gU3BlY2lmaWVzIHRoZSBtZWRpYSB0eXBlIHRoZSBOSUMgb3BlcmF0ZXMgYXQuCisJCQkJICBhdXRvc2Vuc2UJQXV0b3NlbnNpbmcgYWN0aXZlIG1lZGlhLgorCQkJCSAgMTBtYnBzX2hkCTEwTWJwcyBoYWxmIGR1cGxleC4KKwkJCQkgIDEwbWJwc19mZAkxME1icHMgZnVsbCBkdXBsZXguCisJCQkJICAxMDBtYnBzX2hkCTEwME1icHMgaGFsZiBkdXBsZXguCisJCQkJICAxMDBtYnBzX2ZkCTEwME1icHMgZnVsbCBkdXBsZXguCisJCQkJICAxMDAwbWJwc19mZAkxMDAwTWJwcyBmdWxsIGR1cGxleC4KKwkJCQkgIDEwMDBtYnBzX2hkCTEwMDBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgMAkJQXV0b3NlbnNpbmcgYWN0aXZlIG1lZGlhLgorCQkJCSAgMQkJMTBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgMgkJMTBNYnBzIGZ1bGwgZHVwbGV4LgorCQkJCSAgMwkJMTAwTWJwcyBoYWxmIGR1cGxleC4KKwkJCQkgIDQJCTEwME1icHMgZnVsbCBkdXBsZXguCisJCQkJICA1ICAgICAgICAgIAkxMDAwTWJwcyBoYWxmIGR1cGxleC4KKwkJCQkgIDYgICAgICAgICAgCTEwMDBNYnBzIGZ1bGwgZHVwbGV4LgorCisJCQkJICBCeSBkZWZhdWx0LCB0aGUgTklDIG9wZXJhdGVzIGF0IGF1dG9zZW5zZS4KKwkJCQkgIDEwMDBtYnBzX2ZkIGFuZCAxMDAwbWJwc19oZCB0eXBlcyBhcmUgb25seQorCQkJCSAgYXZhaWxhYmxlIGZvciBmaWJlciBhZGFwdGVyLgorCit2bGFuPW4JCQkJLSBTcGVjaWZpZXMgdGhlIFZMQU4gSUQuIElmIHZsYW49MCwgdGhlCisJCQkJICBWaXJ0dWFsIExvY2FsIEFyZWEgTmV0d29yayAoVkxBTikgZnVuY3Rpb24gaXMKKwkJCQkgIGRpc2FibGUuCisKK2p1bWJvPVswfDFdCQkJLSBTcGVjaWZpZXMgdGhlIGp1bWJvIGZyYW1lIHN1cHBvcnQuIElmIGp1bWJvPTEsCisJCQkJICB0aGUgTklDIGFjY2VwdCBqdW1ibyBmcmFtZXMuIEJ5IGRlZmF1bHQsIHRoaXMKKwkJCQkgIGZ1bmN0aW9uIGlzIGRpc2FibGVkLgorCQkJCSAgSnVtYm8gZnJhbWUgdXN1YWxseSBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZQorCQkJCSAgaW50IGdpZ2FiaXQuCisJCQkJICBUaGlzIGZlYXR1cmUgbmVlZCBqdW1ibyBmcmFtZSBjb21wYXRpYmxlIAorCQkJCSAgcmVtb3RlLgorCQkJCSAgCityeF9jb2FsZXNjZT1tCQkJLSBOdW1iZXIgb2YgcnggZnJhbWUgaGFuZGxlZCBlYWNoIGludGVycnVwdC4KK3J4X3RpbWVvdXQ9bgkJCS0gUnggRE1BIHdhaXQgdGltZSBmb3IgYW4gaW50ZXJydXB0LiAKKwkJCQkgIElmIHNldCByeF9jb2FsZXNjZSA+IDAsIGhhcmR3YXJlIG9ubHkgYXNzZXJ0IAorCQkJCSAgYW4gaW50ZXJydXB0IGZvciBtIGZyYW1lcy4gSGFyZHdhcmUgd29uJ3QgCisJCQkJICBhc3NlcnQgcnggaW50ZXJydXB0IHVudGlsIG0gZnJhbWVzIHJlY2VpdmVkIG9yCisJCQkJICByZWFjaCB0aW1lb3V0IG9mIG4gKiA2NDAgbmFubyBzZWNvbmRzLiAKKwkJCQkgIFNldCBwcm9wZXIgcnhfY29hbGVzY2UgYW5kIHJ4X3RpbWVvdXQgY2FuIAorCQkJCSAgcmVkdWNlIGNvbmdlc3Rpb24gY29sbGFwc2UgYW5kIG92ZXJsb2FkIHdoaWNoCisJCQkJICBoYXMgYmVlbiBhIGJvdHRsZW5lY3QgZm9yIGhpZ2ggc3BlZWQgbmV0d29yay4KKwkJCQkgIAorCQkJCSAgRm9yIGV4YW1wbGUsIHJ4X2NvYWxlc2NlPTEwIHJ4X3RpbWVvdXQ9ODAwLgorCQkJCSAgdGhhdCBpcywgaGFyZHdhcmUgYXNzZXJ0IG9ubHkgMSBpbnRlcnJ1cHQgCisJCQkJICBmb3IgMTAgZnJhbWVzIHJlY2VpdmVkIG9yIHRpbWVvdXQgb2YgNTEyIHVzLiAKKwordHhfY29hbGVzY2U9bgkJCS0gTnVtYmVyIG9mIHR4IGZyYW1lIGhhbmRsZWQgZWFjaCBpbnRlcnJ1cHQuCisJCQkJICBTZXQgbiA+IDEgY2FuIHJlZHVjZSB0aGUgaW50ZXJydXB0cyAKKwkJCQkgIGNvbmdlc3Rpb24gdXN1YWxseSBsb3dlciBwZXJmb3JtYW5jZSBvZgorCQkJCSAgaGlnaCBzcGVlZCBuZXR3b3JrIGNhcmQuIERlZmF1bHQgaXMgMTYuCisJCQkJICAKK3R4X2Zsb3c9WzF8MF0JCQktIFNwZWNpZmllcyB0aGUgVHggZmxvdyBjb250cm9sLiBJZiB0eF9mbG93PTAsIAorCQkJCSAgdGhlIFR4IGZsb3cgY29udHJvbCBkaXNhYmxlIGVsc2UgZHJpdmVyCisJCQkJICBhdXRvZGV0ZWN0LgorcnhfZmxvdz1bMXwwXQkJCS0gU3BlY2lmaWVzIHRoZSBSeCBmbG93IGNvbnRyb2wuIElmIHJ4X2Zsb3c9MCwgCisJCQkJICB0aGUgUnggZmxvdyBjb250cm9sIGVuYWJsZSBlbHNlIGRyaXZlcgorCQkJCSAgYXV0b2RldGVjdC4KKworCitDb25maWd1cmF0aW9uIFNjcmlwdCBTYW1wbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorSGVyZSBpcyBhIHNhbXBsZSBvZiBhIHNpbXBsZSBjb25maWd1cmF0aW9uIHNjcmlwdDoKKworREVWSUNFPWV0aDAKK1VTRVJDVEw9bm8KK09OQk9PVD15ZXMKK1BPT1RQUk9UTz1ub25lCitCUk9BRENBU1Q9MjA3LjIwMC41LjI1NQorTkVUV09SSz0yMDcuMjAwLjUuMAorTkVUTUFTSz0yNTUuMjU1LjI1NS4wCitJUEFERFI9MjA3LjIwMC41LjIKKworCitUcm91Ymxlc2hvb3RpbmcKKz09PT09PT09PT09PT09PQorUTEuIFNvdXJjZSBmaWxlcyBjb250YWluIF4gTSBiZWhpbmQgZXZlcnkgbGluZS4KKwlNYWtlIHN1cmUgYWxsIGZpbGVzIGFyZSBVbml4IGZpbGUgZm9ybWF0IChubyBMRikuIFRyeSB0aGUgZm9sbG93aW5nCisgICAgc2hlbGwgY29tbWFuZCB0byBjb252ZXJ0IGZpbGVzLgorCisJY2F0IGRsMmsuYyB8IGNvbCAtYiA+IGRsMmsudG1wCisJbXYgZGwyay50bXAgZGwyay5jCisKKwlPUgorCisJY2F0IGRsMmsuYyB8IHRyIC1kICJcciIgPiBkbDJrLnRtcAorCW12IGRsMmsudG1wIGRsMmsuYworCitRMjogQ291bGQgbm90IGZpbmQgaGVhZGVyIGZpbGVzICgqLmgpID8KKwlUbyBjb21waWxlIHRoZSBkcml2ZXIsIHlvdSBuZWVkIGtlcm5lbCBoZWFkZXIgZmlsZXMuIEFmdGVyCisgICAgaW5zdGFsbGluZyB0aGUga2VybmVsIHNvdXJjZSwgdGhlIGhlYWRlciBmaWxlcyBhcmUgdXN1YWxseSBsb2NhdGVkIGluCisgICAgL3Vzci9zcmMvbGludXgvaW5jbHVkZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgaW5jbHVkZSBkaXJlY3RvcnkgY29uZmlndXJlZAorICAgIGluIE1ha2VmaWxlLiBGb3Igc29tZSBkaXN0cmlidXRpb25zLCB0aGVyZSBpcyBhIGNvcHkgb2YgaGVhZGVyIGZpbGVzIGluCisgICAgL3Vzci9zcmMvaW5jbHVkZS9saW51eCBhbmQgL3Vzci9zcmMvaW5jbHVkZS9hc20sIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlCisgICAgSU5DTFVERURJUiBpbiBNYWtlZmlsZSB0byAvdXNyL2luY2x1ZGUgd2l0aG91dCBpbnN0YWxsaW5nIGtlcm5lbCBzb3VyY2UuCisJTm90ZSB0aGF0IFJIIDcuMCBkaWRuJ3QgcHJvdmlkZSBjb3JyZWN0IGhlYWRlciBmaWxlcyBpbiAvdXNyL2luY2x1ZGUsCisgICAgaW5jbHVkaW5nIHRob3NlIGZpbGVzIHdpbGwgbWFrZSBhIHdyb25nIHZlcnNpb24gZHJpdmVyLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG1mZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG1mZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlODM5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbWZlLnR4dApAQCAtMCwwICsxLDU5IEBACisgIGRtZmUuYzogVmVyc2lvbiAxLjI4ICAgICAgICAwMS8xOC8yMDAwCisKKyAgICAgICAgQSBEYXZpY29tIERNOTEwMihBKS9ETTkxMzIvRE05ODAxIGZhc3QgZXRoZXJuZXQgZHJpdmVyIGZvciBMaW51eC4gCisgICAgICAgIENvcHlyaWdodCAoQykgMTk5NyAgU3RlbiBXYW5nCisKKyAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICAgICAgICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisKKyAgQS4gQ29tcGlsZXIgY29tbWFuZDoKKworICAgICBBLTE6IEZvciBub3JtYWwgc2luZ2xlIG9yIG11bHRpcGxlIHByb2Nlc3NvciBrZXJuZWwKKyAgICAgICAgICAiZ2NjIC1ETU9EVUxFIC1EX19LRVJORUxfXyAtSS91c3Ivc3JjL2xpbnV4L25ldC9pbmV0IC1XYWxsIAorICAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzYgLWMgZG1mZS5jIgorCisgICAgIEEtMjogRm9yIHNpbmdsZSBvciBtdWx0aXBsZSBwcm9jZXNzb3Igd2l0aCBrZXJuZWwgbW9kdWxlIHZlcnNpb24gZnVuY3Rpb24KKyAgICAgICAgICAiZ2NjIC1ETU9EVUxFIC1ETU9EVkVSU0lPTlMgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvbmV0L2luZXQgCisgICAgICAgICAgICAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtYyBkbWZlLmMiCisKKworICBCLiBUaGUgZm9sbG93aW5nIHN0ZXBzIHRlYWNoIHlvdSBob3cgdG8gYWN0aXZhdGUgYSBETTkxMDIgYm9hcmQ6CisKKyAgICAgICAgMS4gVXNlZCB0aGUgdXBwZXIgY29tcGlsZXIgY29tbWFuZCB0byBjb21waWxlIGRtZmUuYworCisgICAgICAgIDIuIEluc2VydCBkbWZlIG1vZHVsZSBpbnRvIGtlcm5lbAorICAgICAgICAgICAiaW5zbW9kIGRtZmUiICAgICAgICA7O0F1dG8gRGV0ZWN0aW9uIE1vZGUgKFN1Z2dlc3QpCisgICAgICAgICAgICJpbnNtb2QgZG1mZSBtb2RlPTAiIDs7Rm9yY2UgMTBNIEhhbGYgRHVwbGV4CisgICAgICAgICAgICJpbnNtb2QgZG1mZSBtb2RlPTEiIDs7Rm9yY2UgMTAwTSBIYWxmIER1cGxleAorICAgICAgICAgICAiaW5zbW9kIGRtZmUgbW9kZT00IiA7O0ZvcmNlIDEwTSBGdWxsIER1cGxleAorICAgICAgICAgICAiaW5zbW9kIGRtZmUgbW9kZT01IiA7O0ZvcmNlIDEwME0gRnVsbCBEdXBsZXgKKworICAgICAgICAzLiBDb25maWcgYSBkbTkxMDIgbmV0d29yayBpbnRlcmZhY2UKKyAgICAgICAgICAgImlmY29uZmlnIGV0aDAgMTcyLjIyLjMuMTgiCisgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eIFlvdXIgSVAgYWRkcmVzcworCisgICAgICAgIDQuIEFjdGl2YXRlIHRoZSBJUCByb3V0aW5nIHRhYmxlLiBGb3Igc29tZSBkaXN0cmlidXRpb25zLCBpdCBpcyBub3QKKyAgICAgICAgICAgbmVjZXNzYXJ5LiBZb3UgY2FuIHR5cGUgInJvdXRlIiB0byBjaGVjay4KKworICAgICAgICAgICAicm91dGUgYWRkIGRlZmF1bHQgZXRoMCIKKworCisgICAgICAgIDUuIFdlbGwgZG9uZS4gWW91ciBETTkxMDIgYWRhcHRlciBpcyBub3cgYWN0aXZhdGVkLgorCisKKyAgIEMuIE9iamVjdCBmaWxlcyBkZXNjcmlwdGlvbjoKKyAgICAgICAgMS4gZG1mZV9yaDYxLm86ICAgICAgIAlGb3IgUmVkaGF0IDYuMQorCisgICAgICAgIElmIHlvdSBjYW4gbWFrZSBzdXJlIHlvdXIga2VybmVsIHZlcnNpb24sIHlvdSBjYW4gcmVuYW1lCisgICAgICAgIHRvIGRtZmUubyBhbmQgZGlyZWN0bHkgdXNlIGl0IHdpdGhvdXQgcmUtY29tcGlsaW5nLgorCisKKyAgQXV0aG9yOiBTdGVuIFdhbmcsIDg4Ni0zLTU3OTg3OTctODUxNywgRS1tYWlsOiBzdGVuX3dhbmdAZGF2aWNvbS5jb20udHcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kcml2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RyaXZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmZDBlZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kcml2ZXIudHh0CkBAIC0wLDAgKzEsOTQgQEAKK0RvY3VtZW50cyBhYm91dCBzb2Z0bmV0IGRyaXZlciBpc3N1ZXMgaW4gZ2VuZXJhbCBjYW4gYmUgZm91bmQKK2F0OgorCisJaHR0cDovL3d3dy5maXJzdGZsb29yLm9yZy9+YW5kaS9zb2Z0bmV0LworCitUcmFuc21pdCBwYXRoIGd1aWRlbGluZXM6CisKKzEpIFRoZSBoYXJkX3N0YXJ0X3htaXQgbWV0aG9kIG11c3QgbmV2ZXIgcmV0dXJuICcxJyB1bmRlciBhbnkKKyAgIG5vcm1hbCBjaXJjdW1zdGFuY2VzLiAgSXQgaXMgY29uc2lkZXJlZCBhIGhhcmQgZXJyb3IgdW5sZXNzCisgICB0aGVyZSBpcyBubyB3YXkgeW91ciBkZXZpY2UgY2FuIHRlbGwgYWhlYWQgb2YgdGltZSB3aGVuIGl0J3MKKyAgIHRyYW5zbWl0IGZ1bmN0aW9uIHdpbGwgYmVjb21lIGJ1c3kuCisKKyAgIEluc3RlYWQgaXQgbXVzdCBtYWludGFpbiB0aGUgcXVldWUgcHJvcGVybHkuICBGb3IgZXhhbXBsZSwKKyAgIGZvciBhIGRyaXZlciBpbXBsZW1lbnRpbmcgc2NhdHRlci1nYXRoZXIgdGhpcyBtZWFuczoKKworCXN0YXRpYyBpbnQgZHJ2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorCXsKKwkJc3RydWN0IGRydiAqZHAgPSBkZXYtPnByaXY7CisKKwkJbG9ja190eChkcCk7CisJCS4uLgorCQkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciBsb2cgaXQuICovCisJCWlmIChUWF9CVUZGU19BVkFJTChkcCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJdW5sb2NrX3R4KGRwKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkuLi4gcXVldWUgcGFja2V0IHRvIGNhcmQgLi4uCisJCS4uLiB1cGRhdGUgdHggY29uc3VtZXIgaW5kZXggLi4uCisKKwkJaWYgKFRYX0JVRkZTX0FWQUlMKGRwKSA8PSAoTUFYX1NLQl9GUkFHUyArIDEpKQorCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJCS4uLgorCQl1bmxvY2tfdHgoZHApOworCQkuLi4KKwl9CisKKyAgIEFuZCB0aGVuIGF0IHRoZSBlbmQgb2YgeW91ciBUWCByZWNsYWltYXRpb24gZXZlbnQgaGFuZGxpbmc6CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkcC0+ZGV2KSAmJgorICAgICAgICAgICAgVFhfQlVGRlNfQVZBSUwoZHApID4gKE1BWF9TS0JfRlJBR1MgKyAxKSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkcC0+ZGV2KTsKKworICAgRm9yIGEgbm9uLXNjYXR0ZXItZ2F0aGVyIHN1cHBvcnRpbmcgY2FyZCwgdGhlIHRocmVlIHRlc3RzIHNpbXBseSBiZWNvbWU6CisKKwkJLyogVGhpcyBpcyBhIGhhcmQgZXJyb3IgbG9nIGl0LiAqLworCQlpZiAoVFhfQlVGRlNfQVZBSUwoZHApIDw9IDApCisKKyAgIGFuZDoKKworCQlpZiAoVFhfQlVGRlNfQVZBSUwoZHApID09IDApCisKKyAgIGFuZDoKKworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRwLT5kZXYpICYmCisgICAgICAgICAgICBUWF9CVUZGU19BVkFJTChkcCkgPiAwKQorCQluZXRpZl93YWtlX3F1ZXVlKGRwLT5kZXYpOworCisyKSBEbyBub3QgZm9yZ2V0IHRvIHVwZGF0ZSBuZXRkZXYtPnRyYW5zX3N0YXJ0IHRvIGppZmZpZXMgYWZ0ZXIKKyAgIGVhY2ggbmV3IHR4IHBhY2tldCBpcyBnaXZlbiB0byB0aGUgaGFyZHdhcmUuCisKKzMpIERvIG5vdCBmb3JnZXQgdGhhdCBvbmNlIHlvdSByZXR1cm4gMCBmcm9tIHlvdXIgaGFyZF9zdGFydF94bWl0CisgICBtZXRob2QsIGl0IGlzIHlvdXIgZHJpdmVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB1cCB0aGUgU0tCCisgICBhbmQgaW4gc29tZSBmaW5pdGUgYW1vdW50IG9mIHRpbWUuCisKKyAgIEZvciBleGFtcGxlLCB0aGlzIG1lYW5zIHRoYXQgaXQgaXMgbm90IGFsbG93ZWQgZm9yIHlvdXIgVFgKKyAgIG1pdGlnYXRpb24gc2NoZW1lIHRvIGxldCBUWCBwYWNrZXRzICJoYW5nIG91dCIgaW4gdGhlIFRYCisgICByaW5nIHVucmVjbGFpbWVkIGZvcmV2ZXIgaWYgbm8gbmV3IFRYIHBhY2tldHMgYXJlIHNlbnQuCisgICBUaGlzIGVycm9yIGNhbiBkZWFkbG9jayBzb2NrZXRzIHdhaXRpbmcgZm9yIHNlbmQgYnVmZmVyIHJvb20KKyAgIHRvIGJlIGZyZWVkIHVwLgorCisgICBJZiB5b3UgcmV0dXJuIDEgZnJvbSB0aGUgaGFyZF9zdGFydF94bWl0IG1ldGhvZCwgeW91IG11c3Qgbm90IGtlZXAKKyAgIGFueSByZWZlcmVuY2UgdG8gdGhhdCBTS0IgYW5kIHlvdSBtdXN0IG5vdCBhdHRlbXB0IHRvIGZyZWUgaXQgdXAuCisKK1Byb2JpbmcgZ3VpZGVsaW5lczoKKworMSkgQW55IGhhcmR3YXJlIGxheWVyIGFkZHJlc3MgeW91IG9idGFpbiBmb3IgeW91ciBkZXZpY2Ugc2hvdWxkCisgICBiZSB2ZXJpZmllZC4gIEZvciBleGFtcGxlLCBmb3IgZXRoZXJuZXQgY2hlY2sgaXQgd2l0aAorICAgbGludXgvZXRoZXJkZXZpY2UuaDppc192YWxpZF9ldGhlcl9hZGRyKCkKKworQ2xvc2Uvc3RvcCBndWlkZWxpbmVzOgorCisxKSBBZnRlciB0aGUgZGV2LT5zdG9wIHJvdXRpbmUgaGFzIGJlZW4gY2FsbGVkLCB0aGUgaGFyZHdhcmUgbXVzdAorICAgbm90IHJlY2VpdmUgb3IgdHJhbnNtaXQgYW55IGRhdGEuICBBbGwgaW4gZmxpZ2h0IHBhY2tldHMgbXVzdAorICAgYmUgYWJvcnRlZC4gSWYgbmVjZXNzYXJ5LCBwb2xsIG9yIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgCisgICBhbnkgcmVzZXQgY29tbWFuZHMuCisKKzIpIFRoZSBkZXYtPnN0b3Agcm91dGluZSB3aWxsIGJlIGNhbGxlZCBieSB1bnJlZ2lzdGVyX25ldGRldmljZQorICAgaWYgZGV2aWNlIGlzIHN0aWxsIFVQLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjlmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQKQEAgLTAsMCArMSwxNzAgQEAKK0xpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAgRmFtaWx5IG9mIEFkYXB0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3ZlbWJlciAxNywgMjAwNAorCisKK0NvbnRlbnRzCis9PT09PT09PQorCistIEluIFRoaXMgUmVsZWFzZQorLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gRHJpdmVyIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVycworLSBBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCistIFN1cHBvcnQKKworCitJbiBUaGlzIFJlbGVhc2UKKz09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBMaW51eCogQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbChSKSBQUk8vMTAwIEZhbWlseSBvZgorQWRhcHRlcnMsIHZlcnNpb24gMy4zLnguICBUaGlzIGRyaXZlciBzdXBwb3J0cyAyLjQueCBhbmQgMi42Lngga2VybmVscy4gCisKK0lkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYgCitEcml2ZXIgSUQgR3VpZGUgYXQ6CisKKyAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9hZGFwdGVyL3BybzEwMC8yMTM5Ny5odG0KKworRm9yIHRoZSBsYXRlc3QgSW50ZWwgbmV0d29yayBkcml2ZXJzIGZvciBMaW51eCwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyAKK3dlYnNpdGUuIEluIHRoZSBzZWFyY2ggZmllbGQsIGVudGVyIHlvdXIgYWRhcHRlciBuYW1lIG9yIHR5cGUsIG9yIHVzZSB0aGUgCituZXR3b3JraW5nIGxpbmsgb24gdGhlIGxlZnQgdG8gc2VhcmNoIGZvciB5b3VyIGFkYXB0ZXI6CisKKyAgaHR0cDovL2Rvd25sb2FkZmluZGVyLmludGVsLmNvbS9zY3JpcHRzLWRmL3N1cHBvcnRfaW50ZWwuYXNwCisKK0RyaXZlciBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyIGlzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywKK3VubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK1J4IERlc2NyaXB0b3JzOiBOdW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycy4gQSByZWNlaXZlIGRlc2NyaXB0b3IgaXMgYSBkYXRhIAorICAgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgcmVjZWl2ZSBidWZmZXIgYW5kIGl0cyBhdHRyaWJ1dGVzIHRvIHRoZSBuZXR3b3JrIAorICAgY29udHJvbGxlci4gVGhlIGRhdGEgaW4gdGhlIGRlc2NyaXB0b3IgaXMgdXNlZCBieSB0aGUgY29udHJvbGxlciB0byB3cml0ZSAKKyAgIGRhdGEgZnJvbSB0aGUgY29udHJvbGxlciB0byBob3N0IG1lbW9yeS4gSW4gdGhlIDMuMC54IGRyaXZlciB0aGUgdmFsaWQKKyAgIHJhbmdlIGZvciB0aGlzIHBhcmFtZXRlciBpcyA2NC0yNTYuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDY0LiBUaGlzIHBhcmFtZXRlciAKKyAgIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBjb21tYW5kIAorIAorICAgZXRodG9vbCAtRyBldGg/IHJ4IG4sIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiBkZXNpcmVkIHJ4IGRlc2NyaXB0b3JzLgorCitUeCBEZXNjcmlwdG9yczogTnVtYmVyIG9mIHRyYW5zbWl0IGRlc2NyaXB0b3JzLiBBIHRyYW5zbWl0IGRlc2NyaXB0b3IgaXMgYQorICAgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSB0cmFuc21pdCBidWZmZXIgYW5kIGl0cyBhdHRyaWJ1dGVzIHRvIHRoZQorICAgbmV0d29yayBjb250cm9sbGVyLiBUaGUgZGF0YSBpbiB0aGUgZGVzY3JpcHRvciBpcyB1c2VkIGJ5IHRoZSBjb250cm9sbGVyIHRvIAorICAgcmVhZCBkYXRhIGZyb20gdGhlIGhvc3QgbWVtb3J5IHRvIHRoZSBjb250cm9sbGVyLiBJbiB0aGUgMy4wLnggZHJpdmVyIHRoZSAKKyAgIHZhbGlkIHJhbmdlIGZvciB0aGlzIHBhcmFtZXRlciBpcyA2NC0yNTYuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDY0LiBUaGlzIAorICAgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBjb21tYW5kIAorCisgICBldGh0b29sIC1HIGV0aD8gdHggbiwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGRlc2lyZWQgdHggZGVzY3JpcHRvcnMuCisKK1NwZWVkL0R1cGxleDogVGhlIGRyaXZlciBhdXRvLW5lZ290aWF0ZXMgdGhlIGxpbmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncyBieSAKKyAgIGRlZmF1bHQuIEV0aHRvb2wgY2FuIGJlIHVzZWQgYXMgZm9sbG93cyB0byBmb3JjZSBzcGVlZC9kdXBsZXguIAorCisgICBldGh0b29sIC1zIGV0aD8gIGF1dG9uZWcgb2ZmIHNwZWVkIHsxMHwxMDB9IGR1cGxleCB7ZnVsbHxoYWxmfQorCisgICBOT1RFOiBzZXR0aW5nIHRoZSBzcGVlZC9kdXBsZXggdG8gaW5jb3JyZWN0IHZhbHVlcyB3aWxsIGNhdXNlIHRoZSBsaW5rIHRvCisgICBmYWlsLgorCitFdmVudCBMb2cgTWVzc2FnZSBMZXZlbDogIFRoZSBkcml2ZXIgdXNlcyB0aGUgbWVzc2FnZSBsZXZlbCBmbGFnIHRvIGxvZyBldmVudHMgCisgICB0byBzeXNsb2cuIFRoZSBtZXNzYWdlIGxldmVsIGNhbiBiZSBzZXQgYXQgZHJpdmVyIGxvYWQgdGltZS4gSXQgY2FuIGFsc28gYmUgCisgICBzZXQgdXNpbmcgdGhlIGNvbW1hbmQKKworICAgZXRodG9vbCAtcyBldGg/IG1zZ2x2bCBuCisKK0FkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb25maWd1cmluZyB0aGUgRHJpdmVyIG9uIERpZmZlcmVudCBEaXN0cmlidXRpb25zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBDb25maWd1cmluZyBhIG5ldHdvcmsgZHJpdmVyIHRvIGxvYWQgcHJvcGVybHkgd2hlbiB0aGUgc3lzdGVtIGlzIHN0YXJ0ZWQgaXMgCisgIGRpc3RyaWJ1dGlvbiBkZXBlbmRlbnQuIFR5cGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpbnZvbHZlcyBhZGRpbmcgCisgIGFuIGFsaWFzIGxpbmUgdG8gL2V0Yy9tb2R1bGVzLmNvbmYgYXMgd2VsbCBhcyBlZGl0aW5nIG90aGVyIHN5c3RlbSBzdGFydHVwIAorICBzY3JpcHRzIGFuZC9vciBjb25maWd1cmF0aW9uIGZpbGVzLiAgTWFueSBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbnMgc2hpcCAKKyAgd2l0aCB0b29scyB0byBtYWtlIHRoZXNlIGNoYW5nZXMgZm9yIHlvdS4gVG8gbGVhcm4gdGhlIHByb3BlciB3YXkgdG8gCisgIGNvbmZpZ3VyZSBhIG5ldHdvcmsgZGV2aWNlIGZvciB5b3VyIHN5c3RlbSwgcmVmZXIgdG8geW91ciBkaXN0cmlidXRpb24gCisgIGRvY3VtZW50YXRpb24uIElmIGR1cmluZyB0aGlzIHByb2Nlc3MgeW91IGFyZSBhc2tlZCBmb3IgdGhlIGRyaXZlciBvciBtb2R1bGUgCisgIG5hbWUsIHRoZSBuYW1lIGZvciB0aGUgTGludXggQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbCBQUk8vMTAwIEZhbWlseSBvZiAKKyAgQWRhcHRlcnMgaXMgZTEwMC4KKworICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCB0aGUgZTEwMCBkcml2ZXIgZm9yIHR3byBQUk8vMTAwIGFkYXB0ZXJzIAorICAoZXRoMCBhbmQgZXRoMSksIGFkZCB0aGUgZm9sbG93aW5nIHRvIG1vZHVsZXMuY29uZjoKKworICAgICAgIGFsaWFzIGV0aDAgZTEwMAorICAgICAgIGFsaWFzIGV0aDEgZTEwMAorCisgIFZpZXdpbmcgTGluayBNZXNzYWdlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSW4gb3JkZXIgdG8gc2VlIGxpbmsgbWVzc2FnZXMgYW5kIG90aGVyIEludGVsIGRyaXZlciBpbmZvcm1hdGlvbiBvbiB5b3VyIAorICBjb25zb2xlLCB5b3UgbXVzdCBzZXQgdGhlIGRtZXNnIGxldmVsIHVwIHRvIHNpeC4gVGhpcyBjYW4gYmUgZG9uZSBieSAKKyAgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBvbiB0aGUgY29tbWFuZCBsaW5lIGJlZm9yZSBsb2FkaW5nIHRoZSBlMTAwIGRyaXZlcjogCisKKyAgICAgICBkbWVzZyAtbiA4CisKKyAgSWYgeW91IHdpc2ggdG8gc2VlIGFsbCBtZXNzYWdlcyBpc3N1ZWQgYnkgdGhlIGRyaXZlciwgaW5jbHVkaW5nIGRlYnVnIAorICBtZXNzYWdlcywgc2V0IHRoZSBkbWVzZyBsZXZlbCB0byBlaWdodC4KKworICBOT1RFOiBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLgorCisgIEV0aHRvb2wKKyAgLS0tLS0tLQorCisgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKKyAgdmVyc2lvbiAxLjYgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgYXQ6CisgIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvZ2tlcm5lbC4gIAorCisgIE5PVEU6IFRoaXMgZHJpdmVyIHVzZXMgbWlpIHN1cHBvcnQgZnJvbSB0aGUga2VybmVsLiBBcyBhIHJlc3VsdCwgd2hlbiAKKyAgdGhlcmUgaXMgbm8gbGluaywgZXRodG9vbCB3aWxsIHJlcG9ydCBzcGVlZC9kdXBsZXggdG8gYmUgMTAvaGFsZi4KKworICBOT1RFOiBFdGh0b29sIDEuNiBvbmx5IHN1cHBvcnRzIGEgbGltaXRlZCBzZXQgb2YgZXRodG9vbCBvcHRpb25zLiBTdXBwb3J0IAorICBmb3IgYSBtb3JlIGNvbXBsZXRlIGV0aHRvb2wgZmVhdHVyZSBzZXQgY2FuIGJlIGVuYWJsZWQgYnkgdXBncmFkaW5nIAorICBldGh0b29sIHRvIGV0aHRvb2wtMS44LjEuIAorCisgIEVuYWJsaW5nIFdha2Ugb24gTEFOKiAoV29MKQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgV29MIGlzIHByb3ZpZGVkIHRocm91Z2ggdGhlIEV0aHRvb2wqIHV0aWxpdHkuIEV0aHRvb2wgaXMgaW5jbHVkZWQgd2l0aCBSZWQgCisgIEhhdCogOC4wLiBGb3Igb3RoZXIgTGludXggZGlzdHJpYnV0aW9ucywgZG93bmxvYWQgYW5kIGluc3RhbGwgRXRodG9vbCBmcm9tIAorICB0aGUgZm9sbG93aW5nIHdlYnNpdGU6IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4gCisKKyAgRm9yIGluc3RydWN0aW9ucyBvbiBlbmFibGluZyBXb0wgd2l0aCBFdGh0b29sLCByZWZlciB0byB0aGUgRXRodG9vbCBtYW4KKyAgcGFnZS4KKworICBXb0wgd2lsbCBiZSBlbmFibGVkIG9uIHRoZSBzeXN0ZW0gZHVyaW5nIHRoZSBuZXh0IHNodXQgZG93biBvciByZWJvb3QuIEZvcgorICB0aGlzIGRyaXZlciB2ZXJzaW9uLCBpbiBvcmRlciB0byBlbmFibGUgV29MLCB0aGUgZTEwMCBkcml2ZXIgbXVzdCBiZSAKKyAgbG9hZGVkIHdoZW4gc2h1dHRpbmcgZG93biBvciByZWJvb3RpbmcgdGhlIHN5c3RlbS4KKworICBOQVBJCisgIC0tLS0KKworICBOQVBJIChSeCBwb2xsaW5nIG1vZGUpIGlzIHN1cHBvcnRlZCBpbiB0aGUgZTEwMCBkcml2ZXIuCisKKyAgU2VlIHd3dy5jeWJlcnVzLmNhL35oYWRpL3VzZW5peC1wYXBlci50Z3ogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTkFQSS4KKworU3VwcG9ydAorPT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbQorCitJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIAordGhlIGlzc3VlIHRvIGxpbnV4Lm5pY3NAaW50ZWwuY29tLgorCisKK0xpY2Vuc2UKKz09PT09PT0KKworVGhpcyBzb2Z0d2FyZSBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2UgYWdyZWVtZW50IAorYmV0d2VlbiB5b3UgKCdMaWNlbnNlZScpIGFuZCBJbnRlbC4gRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgc29mdHdhcmUgb3IgYW55IAorYXNzb2NpYXRlZCBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSwgdGhlICdTb2Z0d2FyZScpIHVudGlsIHlvdSBoYXZlIGNhcmVmdWxseSAKK3JlYWQgdGhlIGZ1bGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExJQ0VOU0UgbG9jYXRlZCBpbiB0aGlzIHNvZnR3YXJlIAorcGFja2FnZS4gQnkgbG9hZGluZyBvciB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyAKK0FncmVlbWVudC4gSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZG8gbm90IAoraW5zdGFsbCBvciB1c2UgdGhlIFNvZnR3YXJlLgorCisqIE90aGVyIG5hbWVzIGFuZCBicmFuZHMgbWF5IGJlIGNsYWltZWQgYXMgdGhlIHByb3BlcnR5IG9mIG90aGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmQ0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0CkBAIC0wLDAgKzEsNDAxIEBACitMaW51eCogQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbChSKSBQUk8vMTAwMCBGYW1pbHkgb2YgQWRhcHRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3ZlbWJlciAxNywgMjAwNAorCisKK0NvbnRlbnRzCis9PT09PT09PQorCistIEluIFRoaXMgUmVsZWFzZQorLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKy0gU3BlZWQgYW5kIER1cGxleCBDb25maWd1cmF0aW9uCistIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKy0gS25vd24gSXNzdWVzCistIFN1cHBvcnQKKworCitJbiBUaGlzIFJlbGVhc2UKKz09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBMaW51eCogQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbChSKSBQUk8vMTAwMCBGYW1pbHkKK29mIEFkYXB0ZXJzLCB2ZXJzaW9uIDUueC54LiAgCisKK0ZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIAorc3VwcGxpZWQgd2l0aCB5b3VyIEludGVsIFBSTy8xMDAwIGFkYXB0ZXIuIEFsbCBoYXJkd2FyZSByZXF1aXJlbWVudHMgbGlzdGVkIAorYXBwbHkgdG8gdXNlIHdpdGggTGludXguCisKK05hdGl2ZSBWTEFOcyBhcmUgbm93IGF2YWlsYWJsZSB3aXRoIHN1cHBvcnRlZCBrZXJuZWxzLgorCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmIAorRHJpdmVyIElEIEd1aWRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9hZGFwdGVyL3BybzEwMC8yMTM5Ny5odG0KKworRm9yIHRoZSBsYXRlc3QgSW50ZWwgbmV0d29yayBkcml2ZXJzIGZvciBMaW51eCwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyAKK3dlYnNpdGUuIEluIHRoZSBzZWFyY2ggZmllbGQsIGVudGVyIHlvdXIgYWRhcHRlciBuYW1lIG9yIHR5cGUsIG9yIHVzZSB0aGUgCituZXR3b3JraW5nIGxpbmsgb24gdGhlIGxlZnQgdG8gc2VhcmNoIGZvciB5b3VyIGFkYXB0ZXI6CisKKyAgICBodHRwOi8vZG93bmxvYWRmaW5kZXIuaW50ZWwuY29tL3NjcmlwdHMtZGYvc3VwcG9ydF9pbnRlbC5hc3AKKworQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHRoZSBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIHRoZSAgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIAordXNlZCBieSBlbnRlcmluZyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgbW9kcHJvYmUgb3IgaW5zbW9kIGNvbW1hbmQKK3VzaW5nIHRoaXMgc3ludGF4OgorCisgICAgIG1vZHByb2JlIGUxMDAwIFs8b3B0aW9uPj08VkFMMT4sPFZBTDI+LC4uLl0KKworICAgICBpbnNtb2QgZTEwMDAgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXSAKKworRm9yIGV4YW1wbGUsIHdpdGggdHdvIFBSTy8xMDAwIFBDSSBhZGFwdGVycywgZW50ZXJpbmc6CisKKyAgICAgaW5zbW9kIGUxMDAwIFR4RGVzY3JpcHRvcnM9ODAsMTI4CisKK2xvYWRzIHRoZSBlMTAwMCBkcml2ZXIgd2l0aCA4MCBUWCBkZXNjcmlwdG9ycyBmb3IgdGhlIGZpcnN0IGFkYXB0ZXIgYW5kIDEyOCBUWCAKK2Rlc2NyaXB0b3JzIGZvciB0aGUgc2Vjb25kIGFkYXB0ZXIuCisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIHBhcmFtZXRlciBpcyBnZW5lcmFsbHkgdGhlIHJlY29tbWVuZGVkIHNldHRpbmcsCit1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLiBBbHNvLCBpZiB0aGUgZHJpdmVyIGlzIHN0YXRpY2FsbHkgYnVpbHQgaW50byB0aGUKK2tlcm5lbCwgdGhlIGRyaXZlciBpcyBsb2FkZWQgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgcGFyYW1ldGVycy4KK0V0aHRvb2wgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHNvbWUgb2YgdGhlIHBhcmFtZXRlcnMgYXQgcnVudGltZS4KKworICAgIE5PVEVTOiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQXV0b05lZywgRHVwbGV4LCBhbmQgU3BlZWQKKyAgICAgICAgICAgcGFyYW1ldGVycywgc2VlIHRoZSAiU3BlZWQgYW5kIER1cGxleCBDb25maWd1cmF0aW9uIiBzZWN0aW9uIGluIAorICAgICAgICAgICB0aGlzIGRvY3VtZW50LgorCisgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUsIFJ4SW50RGVsYXksIAorICAgICAgICAgICBUeEludERlbGF5LCBSeEFic0ludERlbGF5LCBhbmQgVHhBYnNJbnREZWxheSBwYXJhbWV0ZXJzLCBzZWUgdGhlIAorICAgICAgICAgICBhcHBsaWNhdGlvbiBub3RlIGF0OgorICAgICAgICAgICBodHRwOi8vd3d3LmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9hcHBsbm90cy9hcDQ1MC5odG0KKworICAgICAgICAgICBBIGRlc2NyaXB0b3IgZGVzY3JpYmVzIGEgZGF0YSBidWZmZXIgYW5kIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byB0aGUgCisgICAgICAgICAgIGRhdGEgYnVmZmVyLiBUaGlzIGluZm9ybWF0aW9uIGlzIGFjY2Vzc2VkIGJ5IHRoZSBoYXJkd2FyZS4KKworQXV0b05lZyAoYWRhcHRlcnMgdXNpbmcgY29wcGVyIGNvbm5lY3Rpb25zIG9ubHkpCitWYWxpZCBSYW5nZTogMHgwMS0weDBGLCAweDIwLTB4MkYKK0RlZmF1bHQgVmFsdWU6IDB4MkYKKyAgICBUaGlzIHBhcmFtZXRlciBpcyBhIGJpdCBtYXNrIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHNwZWVkIGFuZCBkdXBsZXgKKyAgICBzZXR0aW5ncyB0aGUgYm9hcmQgYWR2ZXJ0aXNlcy4gV2hlbiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkLCB0aGUgU3BlZWQgYW5kCisgICAgRHVwbGV4IHBhcmFtZXRlcnMgbXVzdCBub3QgYmUgc3BlY2lmaWVkLgorICAgIE5PVEU6IFJlZmVyIHRvIHRoZSBTcGVlZCBhbmQgRHVwbGV4IHNlY3Rpb24gb2YgdGhpcyByZWFkbWUgZm9yIG1vcmUgCisgICAgICAgICAgaW5mb3JtYXRpb24gb24gdGhlIEF1dG9OZWcgcGFyYW1ldGVyLiAgCisKK0R1cGxleCAoYWRhcHRlcnMgdXNpbmcgY29wcGVyIGNvbm5lY3Rpb25zIG9ubHkpCitWYWxpZCBSYW5nZTogMC0yICgwPWF1dG8tbmVnb3RpYXRlLCAxPWhhbGYsIDI9ZnVsbCkKK0RlZmF1bHQgVmFsdWU6IDAKKyAgICBEZWZpbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIGZsb3cuIENhbiBiZSBlaXRoZXIgb25lIAorICAgIG9yIHR3by1kaXJlY3Rpb25hbC4gSWYgYm90aCBEdXBsZXggYW5kIHRoZSBsaW5rIHBhcnRuZXIgYXJlIHNldCB0byBhdXRvLQorICAgIG5lZ290aWF0ZSwgdGhlIGJvYXJkIGF1dG8tZGV0ZWN0cyB0aGUgY29ycmVjdCBkdXBsZXguIElmIHRoZSBsaW5rIHBhcnRuZXIKKyAgICBpcyBmb3JjZWQgKGVpdGhlciBmdWxsIG9yIGhhbGYpLCBEdXBsZXggZGVmYXVsdHMgdG8gaGFsZi1kdXBsZXguCisKK0Zsb3dDb250cm9sCitWYWxpZCBSYW5nZTogMC0zICgwPW5vbmUsIDE9Unggb25seSwgMj1UeCBvbmx5LCAzPVJ4JlR4KQorRGVmYXVsdDogUmVhZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgZnJvbSB0aGUgRUVQUk9NCisgICAgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGF1dG9tYXRpYyBnZW5lcmF0aW9uKFR4KSBhbmQgcmVzcG9uc2UoUngpIHRvIAorICAgIEV0aGVybmV0IFBBVVNFIGZyYW1lcy4KKworSW50ZXJydXB0VGhyb3R0bGVSYXRlCitWYWxpZCBSYW5nZTogMTAwLTEwMDAwMCAoMD1vZmYsIDE9ZHluYW1pYykKK0RlZmF1bHQgVmFsdWU6IDgwMDAKKyAgICBUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdHMgcGVyIHNlY29uZCB0aGUgCisgICAgY29udHJvbGxlciBnZW5lcmF0ZXMuIEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBhbm90aGVyIHNldHRpbmcgdXNlZCBpbiAKKyAgICBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4gRHluYW1pYyBtb2RlIHVzZXMgYSBoZXVyaXN0aWMgYWxnb3JpdGhtIHRvIGFkanVzdCAKKyAgICBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdHJhZmZpYyBsb2FkLgorVW4tc3VwcG9ydGVkIEFkYXB0ZXJzOiBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgaXMgTk9UIHN1cHBvcnRlZCBieSA4MjU0MiwgODI1NDMKKyAgICBvciA4MjU0NC1iYXNlZCBhZGFwdGVycy4KKworICAgIE5PVEU6IEludGVycnVwdFRocm90dGxlUmF0ZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIFR4QWJzSW50RGVsYXkgYW5kIAorICAgICAgICAgIFJ4QWJzSW50RGVsYXkgcGFyYW1ldGVycy4gSW4gb3RoZXIgd29yZHMsIG1pbmltaXppbmcgdGhlIHJlY2VpdmUgCisgICAgICAgICAgYW5kL29yIHRyYW5zbWl0IGFic29sdXRlIGRlbGF5cyBkb2VzIG5vdCBmb3JjZSB0aGUgY29udHJvbGxlciB0byAKKyAgICAgICAgICBnZW5lcmF0ZSBtb3JlIGludGVycnVwdHMgdGhhbiB3aGF0IHRoZSBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAKKyAgICAgICAgICBhbGxvd3MuCisgICAgQ0FVVElPTjogSWYgeW91IGFyZSB1c2luZyB0aGUgSW50ZWwgUFJPLzEwMDAgQ1QgTmV0d29yayBDb25uZWN0aW9uIAorICAgICAgICAgICAgIChjb250cm9sbGVyIDgyNTQ3KSwgc2V0dGluZyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gYSB2YWx1ZSAKKyAgICAgICAgICAgICBncmVhdGVyIHRoYW4gNzUsMDAwLCBtYXkgaGFuZyAoc3RvcCB0cmFuc21pdHRpbmcpIGFkYXB0ZXJzIHVuZGVyIAorICAgICAgICAgICAgIGNlcnRhaW4gbmV0d29yayBjb25kaXRpb25zLiBJZiB0aGlzIG9jY3VycyBhIE5FVERFViBXQVRDSERPRyAKKyAgICAgICAgICAgICBtZXNzYWdlIGlzIGxvZ2dlZCBpbiB0aGUgc3lzdGVtIGV2ZW50IGxvZy4gSW4gYWRkaXRpb24sIHRoZSAKKyAgICAgICAgICAgICBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsIHJlc3RvcmluZyB0aGUgbmV0d29yayAKKyAgICAgICAgICAgICBjb25uZWN0aW9uLiBUbyBlbGltaW5hdGUgdGhlIHBvdGVudGlhbCBmb3IgdGhlIGhhbmcsIGVuc3VyZSAKKyAgICAgICAgICAgICB0aGF0IEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBzZXQgbm8gZ3JlYXRlciB0aGFuIDc1LDAwMCBhbmQgaXMgCisgICAgICAgICAgICAgbm90IHNldCB0byAwLgorICAgIE5PVEU6IFdoZW4gZTEwMDAgaXMgbG9hZGVkIHdpdGggZGVmYXVsdCBzZXR0aW5ncyBhbmQgbXVsdGlwbGUgYWRhcHRlcnMgYXJlIAorICAgICAgICAgIGluIHVzZSBzaW11bHRhbmVvdXNseSwgdGhlIENQVSB1dGlsaXphdGlvbiBtYXkgaW5jcmVhc2Ugbm9uLWxpbmVhcmx5LiAKKyAgICAgICAgICBJbiBvcmRlciB0byBsaW1pdCB0aGUgQ1BVIHV0aWxpemF0aW9uIHdpdGhvdXQgaW1wYWN0aW5nIHRoZSBvdmVyYWxsIAorICAgICAgICAgIHRocm91Z2hwdXQsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBsb2FkIHRoZSBkcml2ZXIgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICBpbnNtb2QgZTEwMDAubyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGU9MzAwMCwzMDAwLDMwMDAKKworICAgICAgICAgIFRoaXMgc2V0cyB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIDMwMDAgaW50ZXJydXB0cy9zZWMgZm9yIHRoZSAKKyAgICAgICAgICBmaXJzdCwgc2Vjb25kLCBhbmQgdGhpcmQgaW5zdGFuY2VzIG9mIHRoZSBkcml2ZXIuIFRoZSByYW5nZSBvZiAyMDAwIHRvIAorICAgICAgICAgIDMwMDAgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHdvcmtzIG9uIGEgbWFqb3JpdHkgb2Ygc3lzdGVtcyBhbmQgaXMgYSAKKyAgICAgICAgICBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgdGhlIG9wdGltYWwgdmFsdWUgd2lsbCBiZSBwbGF0Zm9ybS1zcGVjaWZpYy4gCisgICAgICAgICAgSWYgQ1BVIHV0aWxpemF0aW9uIGlzIG5vdCBhIGNvbmNlcm4sIHVzZSBSWF9QT0xMSU5HIChOQVBJKSBhbmQgZGVmYXVsdCAKKyAgICAgICAgICBkcml2ZXIgc2V0dGluZ3MuCisKK1J4RGVzY3JpcHRvcnMKK1ZhbGlkIFJhbmdlOiA4MC0yNTYgZm9yIDgyNTQyIGFuZCA4MjU0My1iYXNlZCBhZGFwdGVycworICAgICAgICAgICAgIDgwLTQwOTYgZm9yIGFsbCBvdGhlciBzdXBwb3J0ZWQgYWRhcHRlcnMKK0RlZmF1bHQgVmFsdWU6IDI1NgorICAgIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLiAKKyAgICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYnVmZmVyIG1vcmUgaW5jb21pbmcgcGFja2V0cy4gCisgICAgRWFjaCBkZXNjcmlwdG9yIGlzIDE2IGJ5dGVzLiAgQSByZWNlaXZlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgZm9yIGVhY2gKKyAgICBkZXNjcmlwdG9yIGFuZCBjYW4gZWl0aGVyIGJlIDIwNDggb3IgNDA5NiBieXRlcyBsb25nLCBkZXBlbmRpbmcgb24gdGhlIE1UVSAKKworICAgIHNldHRpbmcuIEFuIGluY29taW5nIHBhY2tldCBjYW4gc3BhbiBvbmUgb3IgbW9yZSByZWNlaXZlIGRlc2NyaXB0b3JzLiAKKyAgICBUaGUgbWF4aW11bSBNVFUgc2l6ZSBpcyAxNjExMC4KKworICAgIE5PVEU6IE1UVSBkZXNpZ25hdGVzIHRoZSBmcmFtZSBzaXplLiBJdCBvbmx5IG5lZWRzIHRvIGJlIHNldCBmb3IgSnVtYm8gCisgICAgICAgICAgRnJhbWVzLgorICAgIE5PVEU6IERlcGVuZGluZyBvbiB0aGUgYXZhaWxhYmxlIHN5c3RlbSByZXNvdXJjZXMsIHRoZSByZXF1ZXN0IGZvciBhCisgICAgaGlnaGVyIG51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzIG1heSBiZSBkZW5pZWQuICBJbiB0aGlzIGNhc2UsCisgICAgdXNlIGEgbG93ZXIgbnVtYmVyLgorCitSeEludERlbGF5CitWYWxpZCBSYW5nZTogMC02NTUzNSAoMD1vZmYpCitEZWZhdWx0IFZhbHVlOiAwCisgICAgVGhpcyB2YWx1ZSBkZWxheXMgdGhlIGdlbmVyYXRpb24gb2YgcmVjZWl2ZSBpbnRlcnJ1cHRzIGluIHVuaXRzIG9mIDEuMDI0IAorICAgIG1pY3Jvc2Vjb25kcy4gIFJlY2VpdmUgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUgZWZmaWNpZW5jeSBpZiAKKyAgICBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWRkcyAKKyAgICBleHRyYSBsYXRlbmN5IHRvIGZyYW1lIHJlY2VwdGlvbiBhbmQgY2FuIGVuZCB1cCBkZWNyZWFzaW5nIHRoZSB0aHJvdWdocHV0IAorICAgIG9mIFRDUCB0cmFmZmljLiBJZiB0aGUgc3lzdGVtIGlzIHJlcG9ydGluZyBkcm9wcGVkIHJlY2VpdmVzLCB0aGlzIHZhbHVlIAorICAgIG1heSBiZSBzZXQgdG9vIGhpZ2gsIGNhdXNpbmcgdGhlIGRyaXZlciB0byBydW4gb3V0IG9mIGF2YWlsYWJsZSByZWNlaXZlIAorICAgIGRlc2NyaXB0b3JzLgorCisgICAgQ0FVVElPTjogV2hlbiBzZXR0aW5nIFJ4SW50RGVsYXkgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIDAsIGFkYXB0ZXJzIG1heSAKKyAgICAgICAgICAgICBoYW5nIChzdG9wIHRyYW5zbWl0dGluZykgdW5kZXIgY2VydGFpbiBuZXR3b3JrIGNvbmRpdGlvbnMuIElmIAorICAgICAgICAgICAgIHRoaXMgb2NjdXJzIGEgTkVUREVWIFdBVENIRE9HIG1lc3NhZ2UgaXMgbG9nZ2VkIGluIHRoZSBzeXN0ZW0KKyAgICAgICAgICAgICBldmVudCBsb2cuIEluIGFkZGl0aW9uLCB0aGUgY29udHJvbGxlciBpcyBhdXRvbWF0aWNhbGx5IHJlc2V0LCAKKyAgICAgICAgICAgICByZXN0b3JpbmcgdGhlIG5ldHdvcmsgY29ubmVjdGlvbi4gVG8gZWxpbWluYXRlIHRoZSBwb3RlbnRpYWwgZm9yCisgICAgICAgICAgICAgdGhlIGhhbmcgZW5zdXJlIHRoYXQgUnhJbnREZWxheSBpcyBzZXQgdG8gMC4KKworUnhBYnNJbnREZWxheSAoODI1NDAsIDgyNTQ1IGFuZCBsYXRlciBhZGFwdGVycyBvbmx5KQorVmFsaWQgUmFuZ2U6IDAtNjU1MzUgKDA9b2ZmKQorRGVmYXVsdCBWYWx1ZTogMTI4CisgICAgVGhpcyB2YWx1ZSwgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzLCBsaW1pdHMgdGhlIGRlbGF5IGluIHdoaWNoIGEgCisgICAgcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiBVc2VmdWwgb25seSBpZiBSeEludERlbGF5IGlzIG5vbi16ZXJvLCAKKyAgICB0aGlzIHZhbHVlIGVuc3VyZXMgdGhhdCBhbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSBpbml0aWFsIAorICAgIHBhY2tldCBpcyByZWNlaXZlZCB3aXRoaW4gdGhlIHNldCBhbW91bnQgb2YgdGltZS4gIFByb3BlciB0dW5pbmcsCisgICAgYWxvbmcgd2l0aCBSeEludERlbGF5LCBtYXkgaW1wcm92ZSB0cmFmZmljIHRocm91Z2hwdXQgaW4gc3BlY2lmaWMgbmV0d29yaworICAgIGNvbmRpdGlvbnMuCisKK1NwZWVkIChhZGFwdGVycyB1c2luZyBjb3BwZXIgY29ubmVjdGlvbnMgb25seSkKK1ZhbGlkIFNldHRpbmdzOiAwLCAxMCwgMTAwLCAxMDAwCitEZWZhdWx0IFZhbHVlOiAwIChhdXRvLW5lZ290aWF0ZSBhdCBhbGwgc3VwcG9ydGVkIHNwZWVkcykKKyAgICBTcGVlZCBmb3JjZXMgdGhlIGxpbmUgc3BlZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiBtZWdhYml0cyBwZXIgc2Vjb25kCisgICAgKE1icHMpLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHNldCB0byAwIGFuZCB0aGUgbGluayAKKyAgICBwYXJ0bmVyIGlzIHNldCB0byBhdXRvLW5lZ290aWF0ZSwgdGhlIGJvYXJkIHdpbGwgYXV0by1kZXRlY3QgdGhlIGNvcnJlY3QgCisgICAgc3BlZWQuIER1cGxleCBzaG91bGQgYWxzbyBiZSBzZXQgd2hlbiBTcGVlZCBpcyBzZXQgdG8gZWl0aGVyIDEwIG9yIDEwMC4KKworVHhEZXNjcmlwdG9ycworVmFsaWQgUmFuZ2U6IDgwLTI1NiBmb3IgODI1NDIgYW5kIDgyNTQzLWJhc2VkIGFkYXB0ZXJzCisgICAgICAgICAgICAgODAtNDA5NiBmb3IgYWxsIG90aGVyIHN1cHBvcnRlZCBhZGFwdGVycworRGVmYXVsdCBWYWx1ZTogMjU2CisgICAgVGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0IGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLgorICAgIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBxdWV1ZSBtb3JlIHRyYW5zbWl0cy4gRWFjaCAKKyAgICBkZXNjcmlwdG9yIGlzIDE2IGJ5dGVzLgorCisgICAgTk9URTogRGVwZW5kaW5nIG9uIHRoZSBhdmFpbGFibGUgc3lzdGVtIHJlc291cmNlcywgdGhlIHJlcXVlc3QgZm9yIGEKKyAgICBoaWdoZXIgbnVtYmVyIG9mIHRyYW5zbWl0IGRlc2NyaXB0b3JzIG1heSBiZSBkZW5pZWQuICBJbiB0aGlzIGNhc2UsCisgICAgdXNlIGEgbG93ZXIgbnVtYmVyLgorCitUeEludERlbGF5CitWYWxpZCBSYW5nZTogMC02NTUzNSAoMD1vZmYpCitEZWZhdWx0IFZhbHVlOiA2NAorICAgIFRoaXMgdmFsdWUgZGVsYXlzIHRoZSBnZW5lcmF0aW9uIG9mIHRyYW5zbWl0IGludGVycnVwdHMgaW4gdW5pdHMgb2YgCisgICAgMS4wMjQgbWljcm9zZWNvbmRzLiBUcmFuc21pdCBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVQorICAgIGVmZmljaWVuY3kgaWYgcHJvcGVybHkgdHVuZWQgZm9yIHNwZWNpZmljIG5ldHdvcmsgdHJhZmZpYy4gSWYgdGhlCisgICAgc3lzdGVtIGlzIHJlcG9ydGluZyBkcm9wcGVkIHRyYW5zbWl0cywgdGhpcyB2YWx1ZSBtYXkgYmUgc2V0IHRvbyBoaWdoCisgICAgY2F1c2luZyB0aGUgZHJpdmVyIHRvIHJ1biBvdXQgb2YgYXZhaWxhYmxlIHRyYW5zbWl0IGRlc2NyaXB0b3JzLgorCitUeEFic0ludERlbGF5ICg4MjU0MCwgODI1NDUgYW5kIGxhdGVyIGFkYXB0ZXJzIG9ubHkpCitWYWxpZCBSYW5nZTogMC02NTUzNSAoMD1vZmYpCitEZWZhdWx0IFZhbHVlOiA2NAorICAgIFRoaXMgdmFsdWUsIGluIHVuaXRzIG9mIDEuMDI0IG1pY3Jvc2Vjb25kcywgbGltaXRzIHRoZSBkZWxheSBpbiB3aGljaCBhIAorICAgIHRyYW5zbWl0IGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFVzZWZ1bCBvbmx5IGlmIFR4SW50RGVsYXkgaXMgbm9uLXplcm8sIAorICAgIHRoaXMgdmFsdWUgZW5zdXJlcyB0aGF0IGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgCisgICAgcGFja2V0IGlzIHNlbnQgb24gdGhlIHdpcmUgd2l0aGluIHRoZSBzZXQgYW1vdW50IG9mIHRpbWUuICBQcm9wZXIgdHVuaW5nLAorICAgIGFsb25nIHdpdGggVHhJbnREZWxheSwgbWF5IGltcHJvdmUgdHJhZmZpYyB0aHJvdWdocHV0IGluIHNwZWNpZmljIAorICAgIG5ldHdvcmsgY29uZGl0aW9ucy4KKworWHN1bVJYIChub3QgYXZhaWxhYmxlIG9uIHRoZSA4MjU0Mi1iYXNlZCBhZGFwdGVyKQorVmFsaWQgUmFuZ2U6IDAtMQorRGVmYXVsdCBWYWx1ZTogMQorICAgIEEgdmFsdWUgb2YgJzEnIGluZGljYXRlcyB0aGF0IHRoZSBkcml2ZXIgc2hvdWxkIGVuYWJsZSBJUCBjaGVja3N1bQorICAgIG9mZmxvYWQgZm9yIHJlY2VpdmVkIHBhY2tldHMgKGJvdGggVURQIGFuZCBUQ1ApIHRvIHRoZSBhZGFwdGVyIGhhcmR3YXJlLgorCitTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaHJlZSBrZXl3b3JkcyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBzcGVlZCBhbmQgZHVwbGV4IGNvbmZpZ3VyYXRpb24uIFRoZXNlIAora2V5d29yZHMgYXJlIFNwZWVkLCBEdXBsZXgsIGFuZCBBdXRvTmVnLgorCitJZiB0aGUgYm9hcmQgdXNlcyBhIGZpYmVyIGludGVyZmFjZSwgdGhlc2Uga2V5d29yZHMgYXJlIGlnbm9yZWQsIGFuZCB0aGUgCitmaWJlciBpbnRlcmZhY2UgYm9hcmQgb25seSBsaW5rcyBhdCAxMDAwIE1icHMgZnVsbC1kdXBsZXguCisKK0ZvciBjb3BwZXItYmFzZWQgYm9hcmRzLCB0aGUga2V5d29yZHMgaW50ZXJhY3QgYXMgZm9sbG93czoKKworICBUaGUgZGVmYXVsdCBvcGVyYXRpb24gaXMgYXV0by1uZWdvdGlhdGUuIFRoZSBib2FyZCBhZHZlcnRpc2VzIGFsbCBzdXBwb3J0ZWQKKyAgc3BlZWQgYW5kIGR1cGxleCBjb21iaW5hdGlvbnMsIGFuZCBpdCBsaW5rcyBhdCB0aGUgaGlnaGVzdCBjb21tb24gc3BlZWQgYW5kCisgIGR1cGxleCBtb2RlIElGIHRoZSBsaW5rIHBhcnRuZXIgaXMgc2V0IHRvIGF1dG8tbmVnb3RpYXRlLgorCisgIElmIFNwZWVkID0gMTAwMCwgbGltaXRlZCBhdXRvLW5lZ290aWF0aW9uIGlzIGVuYWJsZWQgYW5kIG9ubHkgMTAwMCBNYnBzIGlzCisgIGFkdmVydGlzZWQgKFRoZSAxMDAwQmFzZVQgc3BlYyByZXF1aXJlcyBhdXRvLW5lZ290aWF0aW9uLikKKworICBJZiBTcGVlZCA9IDEwIG9yIDEwMCwgdGhlbiBib3RoIFNwZWVkIGFuZCBEdXBsZXggc2hvdWxkIGJlIHNldC4gQXV0by0KKyAgbmVnb3RpYXRpb24gaXMgZGlzYWJsZWQsIGFuZCB0aGUgQXV0b05lZyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gUGFydG5lciBTSE9VTEQKKyAgYWxzbyBiZSBmb3JjZWQuCisKK1RoZSBBdXRvTmVnIHBhcmFtZXRlciBpcyB1c2VkIHdoZW4gbW9yZSBjb250cm9sIGlzIHJlcXVpcmVkIG92ZXIgdGhlIGF1dG8tCituZWdvdGlhdGlvbiBwcm9jZXNzLiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHVzZWQsIFNwZWVkIGFuZCBEdXBsZXggcGFyYW1ldGVycyAKK211c3Qgbm90IGJlIHNwZWNpZmllZC4gVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgc3VwcG9ydGVkIHZhbHVlcyBmb3IgdGhlIAorQXV0b05lZyBwYXJhbWV0ZXI6CisKK1NwZWVkIChNYnBzKSAgIAkJIDEwMDAgICAgICAxMDAgICAgMTAwICAgIDEwICAgICAxMAorRHVwbGV4ICAgICAgICAgICAgICAgICAgIEZ1bGwgICAgICBGdWxsICAgSGFsZiAgIEZ1bGwgICBIYWxmCitWYWx1ZSAoaW4gYmFzZSAxNikgICAgICAgMHgyMCAgICAgIDB4MDggICAweDA0ICAgMHgwMiAgIDB4MDEKKworRXhhbXBsZTogaW5zbW9kIGUxMDAwIEF1dG9OZWc9MHgwMywgbG9hZHMgZTEwMDAgYW5kIHNwZWNpZmllcyAoMTAgZnVsbCBkdXBsZXgsIAorMTAgaGFsZiBkdXBsZXgpIGZvciBuZWdvdGlhdGlvbiB3aXRoIHRoZSBwZWVyLgorCitOb3RlIHRoYXQgc2V0dGluZyBBdXRvTmVnIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IHRoZSBib2FyZCB3aWxsIGxpbmsgYXQgdGhlIAoraGlnaGVzdCBzcGVjaWZpZWQgc3BlZWQgb3IgZHVwbGV4IG1vZGUsIGJ1dCB0aGUgYm9hcmQgd2lsbCBsaW5rIGF0IHRoZSAKK2hpZ2hlc3QgcG9zc2libGUgc3BlZWQvZHVwbGV4IG9mIHRoZSBsaW5rIHBhcnRuZXIgSUYgdGhlIGxpbmsgcGFydG5lciBpcyBhbHNvCitzZXQgdG8gYXV0by1uZWdvdGlhdGUuIElmIHRoZSBsaW5rIHBhcnRuZXIgaXMgZm9yY2VkIHNwZWVkL2R1cGxleCwgdGhlIAorYWRhcHRlciBNVVNUIGJlIGZvcmNlZCB0byB0aGUgc2FtZSBzcGVlZC9kdXBsZXguCisKKworQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIENvbmZpZ3VyaW5nIHRoZSBEcml2ZXIgb24gRGlmZmVyZW50IERpc3RyaWJ1dGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIENvbmZpZ3VyaW5nIGEgbmV0d29yayBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RhcnRlZCBpcworICBkaXN0cmlidXRpb24gZGVwZW5kZW50LiBUeXBpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgaW52b2x2ZXMgYWRkaW5nCisgIGFuIGFsaWFzIGxpbmUgdG8gL2V0Yy9tb2R1bGVzLmNvbmYgYXMgd2VsbCBhcyBlZGl0aW5nIG90aGVyIHN5c3RlbSBzdGFydHVwIAorICBzY3JpcHRzIGFuZC9vciBjb25maWd1cmF0aW9uIGZpbGVzLiBNYW55IHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyBzaGlwIAorICB3aXRoIHRvb2xzIHRvIG1ha2UgdGhlc2UgY2hhbmdlcyBmb3IgeW91LiBUbyBsZWFybiB0aGUgcHJvcGVyIHdheSB0byAKKyAgY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLCByZWZlciB0byB5b3VyIGRpc3RyaWJ1dGlvbiAKKyAgZG9jdW1lbnRhdGlvbi4gSWYgZHVyaW5nIHRoaXMgcHJvY2VzcyB5b3UgYXJlIGFza2VkIGZvciB0aGUgZHJpdmVyIG9yIG1vZHVsZSAKKyAgbmFtZSwgdGhlIG5hbWUgZm9yIHRoZSBMaW51eCBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsIFBSTy8xMDAwIEZhbWlseSBvZiAKKyAgQWRhcHRlcnMgaXMgZTEwMDAuCisKKyAgQXMgYW4gZXhhbXBsZSwgaWYgeW91IGluc3RhbGwgdGhlIGUxMDAwIGRyaXZlciBmb3IgdHdvIFBSTy8xMDAwIGFkYXB0ZXJzIAorICAoZXRoMCBhbmQgZXRoMSkgYW5kIHNldCB0aGUgc3BlZWQgYW5kIGR1cGxleCB0byAxMGZ1bGwgYW5kIDEwMGhhbGYsIGFkZCB0aGUgCisgIGZvbGxvd2luZyB0byBtb2R1bGVzLmNvbmY6CisKKyAgICAgICBhbGlhcyBldGgwIGUxMDAwCisgICAgICAgYWxpYXMgZXRoMSBlMTAwMAorICAgICAgIG9wdGlvbnMgZTEwMDAgU3BlZWQ9MTAsMTAwIER1cGxleD0yLDEKKworICBWaWV3aW5nIExpbmsgTWVzc2FnZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcyAKKyAgcmVzdHJpY3Rpbmcgc3lzdGVtIG1lc3NhZ2VzLiBJbiBvcmRlciB0byBzZWUgbmV0d29yayBkcml2ZXIgbGluayBtZXNzYWdlcyBvbiAKKyAgeW91ciBjb25zb2xlLCBzZXQgZG1lc2cgdG8gZWlnaHQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGRtZXNnIC1uIDgKKworICBOT1RFOiBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLgorCisgIEp1bWJvIEZyYW1lcworICAtLS0tLS0tLS0tLS0KKworICBUaGUgZHJpdmVyIHN1cHBvcnRzIEp1bWJvIEZyYW1lcyBmb3IgYWxsIGFkYXB0ZXJzIGV4Y2VwdCA4MjU0Mi1iYXNlZCAKKyAgYWRhcHRlcnMuIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlIE1UVSB0byBhIHZhbHVlIAorICBsYXJnZXIgdGhhbiB0aGUgZGVmYXVsdCBvZiAxNTAwLiBVc2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8gaW5jcmVhc2UgdGhlIAorICBNVFUgc2l6ZS4gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgaWZjb25maWcgZXRoeCBtdHUgOTAwMCB1cAorCisgIFRoZSBtYXhpbXVtIE1UVSBzZXR0aW5nIGZvciBKdW1ibyBGcmFtZXMgaXMgMTYxMTAuIFRoaXMgdmFsdWUgY29pbmNpZGVzIAorICB3aXRoIHRoZSBtYXhpbXVtIEp1bWJvIEZyYW1lcyBzaXplIG9mIDE2MTI4LgorCisgIE5PVEU6IEp1bWJvIEZyYW1lcyBhcmUgc3VwcG9ydGVkIGF0IDEwMDAgTWJwcyBvbmx5LiBVc2luZyBKdW1ibyBGcmFtZXMgYXQgCisgIDEwIG9yIDEwMCBNYnBzIG1heSByZXN1bHQgaW4gcG9vciBwZXJmb3JtYW5jZSBvciBsb3NzIG9mIGxpbmsuCisKKworICBOT1RFOiBNVFUgZGVzaWduYXRlcyB0aGUgZnJhbWUgc2l6ZS4gVG8gZW5hYmxlIEp1bWJvIEZyYW1lcywgaW5jcmVhc2UgdGhlCisgIE1UVSBzaXplIG9uIHRoZSBpbnRlcmZhY2UgYmV5b25kIDE1MDAuCisKKyAgRXRodG9vbAorICAtLS0tLS0tCisKKyAgVGhlIGRyaXZlciB1dGlsaXplcyB0aGUgZXRodG9vbCBpbnRlcmZhY2UgZm9yIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZAorICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgRXRodG9vbAorICB2ZXJzaW9uIDEuNiBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgorCisgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBmcm9tCisgIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvZ2tlcm5lbC4gIAorCisgIE5PVEU6IEV0aHRvb2wgMS42IG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIHNldCBvZiBldGh0b29sIG9wdGlvbnMuIFN1cHBvcnQgCisgIGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieSB1cGdyYWRpbmcgCisgIGV0aHRvb2wgdG8gZXRodG9vbC0xLjguMS4gCisKKyAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFdvTCBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlIEV0aHRvb2wqIHV0aWxpdHkuIEV0aHRvb2wgaXMgaW5jbHVkZWQgd2l0aAorICBhbGwgdmVyc2lvbnMgb2YgUmVkIEhhdCBhZnRlciBSZWQgSGF0IDcuMi4gRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsIAorICBkb3dubG9hZCBhbmQgaW5zdGFsbCBFdGh0b29sIGZyb20gdGhlIGZvbGxvd2luZyB3ZWJzaXRlOiAKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9na2VybmVsLgorCisgIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggRXRodG9vbCwgcmVmZXIgdG8gdGhlIHdlYnNpdGUgbGlzdGVkIAorICBhYm92ZS4KKworICBXb0wgd2lsbCBiZSBlbmFibGVkIG9uIHRoZSBzeXN0ZW0gZHVyaW5nIHRoZSBuZXh0IHNodXQgZG93biBvciByZWJvb3QuIAorICBGb3IgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGUxMDAwIGRyaXZlciBtdXN0IGJlIAorICBsb2FkZWQgd2hlbiBzaHV0dGluZyBkb3duIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtLgorCisgIE5BUEkKKyAgLS0tLQorCisgIE5BUEkgKFJ4IHBvbGxpbmcgbW9kZSkgaXMgc3VwcG9ydGVkIGluIHRoZSBlMTAwMCBkcml2ZXIuIE5BUEkgaXMgZW5hYmxlZAorICBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUga2VybmVsLiAKKworICBTZWUgd3d3LmN5YmVydXMuY2EvfmhhZGkvdXNlbml4LXBhcGVyLnRneiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQVBJLgorCisKK0tub3duIElzc3VlcworPT09PT09PT09PT09CisKKyAgSnVtYm8gRnJhbWVzIFN5c3RlbSBSZXF1aXJlbWVudAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaGF2ZSBiZWVuIG9ic2VydmVkIG9uIExpbnV4IHN5c3RlbXMgd2l0aCA2NCBNQiAKKyAgb2YgUkFNIG9yIGxlc3MgdGhhdCBhcmUgcnVubmluZyBKdW1ibyBGcmFtZXMuIElmIHlvdSBhcmUgdXNpbmcgSnVtYm8gRnJhbWVzLAorICB5b3VyIHN5c3RlbSBtYXkgcmVxdWlyZSBtb3JlIHRoYW4gdGhlIGFkdmVydGlzZWQgbWluaW11bSByZXF1aXJlbWVudCBvZiA2NCBNQgorICBvZiBzeXN0ZW0gbWVtb3J5LgorCisKK1N1cHBvcnQKKz09PT09PT0KKworRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KKworSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCitrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byAKK3RoZSBpc3N1ZSB0byBsaW51eC5uaWNzQGludGVsLmNvbS4KKworCitMaWNlbnNlCis9PT09PT09CisKK1RoaXMgc29mdHdhcmUgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIGFncmVlbWVudCAKK2JldHdlZW4geW91ICgnTGljZW5zZWUnKSBhbmQgSW50ZWwuIERvIG5vdCB1c2Ugb3IgbG9hZCB0aGlzIHNvZnR3YXJlIG9yIGFueSAKK2Fzc29jaWF0ZWQgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHksIHRoZSAnU29mdHdhcmUnKSB1bnRpbCB5b3UgaGF2ZSBjYXJlZnVsbHkgCityZWFkIHRoZSBmdWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMSUNFTlNFIGxvY2F0ZWQgaW4gdGhpcyBzb2Z0d2FyZSAKK3BhY2thZ2UuIEJ5IGxvYWRpbmcgb3IgdXNpbmcgdGhlIFNvZnR3YXJlLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgCitBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGRvIG5vdCAKK2luc3RhbGwgb3IgdXNlIHRoZSBTb2Z0d2FyZS4KKworKiBPdGhlciBuYW1lcyBhbmQgYnJhbmRzIG1heSBiZSBjbGFpbWVkIGFzIHRoZSBwcm9wZXJ0eSBvZiBvdGhlcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXFsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lcWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMTU1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXFsLnR4dApAQCAtMCwwICsxLDUyOCBAQAorICBFUUwgRHJpdmVyOiBTZXJpYWwgSVAgTG9hZCBCYWxhbmNpbmcgSE9XVE8KKyAgU2ltb24gIkd1cnUgQWxlcGgtTnVsbCIgSmFuZXMsIHNpbW9uQG5jbS5jb20KKyAgdjEuMSwgRmVicnVhcnkgMjcsIDE5OTUKKworICBUaGlzIGlzIHRoZSBtYW51YWwgZm9yIHRoZSBFUUwgZGV2aWNlIGRyaXZlci4gRVFMIGlzIGEgc29mdHdhcmUgZGV2aWNlCisgIHRoYXQgbGV0cyB5b3UgbG9hZC1iYWxhbmNlIElQIHNlcmlhbCBsaW5rcyAoU0xJUCBvciB1bmNvbXByZXNzZWQgUFBQKQorICB0byBpbmNyZWFzZSB5b3VyIGJhbmR3aWR0aC4gSXQgd2lsbCBub3QgcmVkdWNlIHlvdXIgbGF0ZW5jeSAoaS5lLiBwaW5nCisgIHRpbWVzKSBleGNlcHQgaW4gdGhlIGNhc2Ugd2hlcmUgeW91IGFscmVhZHkgaGF2ZSBsb3RzIG9mIHRyYWZmaWMgb24KKyAgeW91ciBsaW5rLCBpbiB3aGljaCBpdCB3aWxsIGhlbHAgdGhlbSBvdXQuIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZAorICB3aXRoIHRoZSAxLjEuNzUga2VybmVsLCBhbmQgaXMga25vd24gdG8gaGF2ZSBwYXRjaGVkIGNsZWFubHkgd2l0aAorICAxLjEuODYuICBTb21lIHRlc3Rpbmcgd2l0aCAxLjEuOTIgaGFzIGJlZW4gZG9uZSB3aXRoIHRoZSB2MS4xIHBhdGNoCisgIHdoaWNoIHdhcyBvbmx5IGNyZWF0ZWQgdG8gcGF0Y2ggY2xlYW5seSBpbiB0aGUgdmVyeSBsYXRlc3Qga2VybmVsCisgIHNvdXJjZSB0cmVlcy4gKFllcywgaXQgd29ya2VkIGZpbmUuKQorCisgIDEuICBJbnRyb2R1Y3Rpb24KKworICBXaGljaCBpcyB3b3JzZT8gQSBodWdlIGZlZSBmb3IgYSA1NksgbGVhc2VkIGxpbmUgb3IgdHdvIHBob25lIGxpbmVzPworICBJdCdzIHByb2JhYmx5IHRoZSBmb3JtZXIuICBJZiB5b3UgZmluZCB5b3Vyc2VsZiBjcmF2aW5nIG1vcmUgYmFuZHdpZHRoLAorICBhbmQgaGF2ZSBhIElTUCB0aGF0IGlzIGZsZXhpYmxlLCBpdCBpcyBub3cgcG9zc2libGUgdG8gYmluZCBtb2RlbXMKKyAgdG9nZXRoZXIgdG8gd29yayBhcyBvbmUgcG9pbnQtdG8tcG9pbnQgbGluayB0byBpbmNyZWFzZSB5b3VyCisgIGJhbmR3aWR0aC4gIEFsbCB3aXRob3V0IGhhdmluZyB0byBoYXZlIGEgc3BlY2lhbCBibGFjayBib3ggb24gZWl0aGVyCisgIHNpZGUuCisKKworICBUaGUgZXFsIGRyaXZlciBoYXMgb25seSBiZWVuIHRlc3RlZCB3aXRoIHRoZSBMaXZpbmdzdG9uIFBvcnRNYXN0ZXItMmUKKyAgdGVybWluYWwgc2VydmVyLiBJIGRvIG5vdCBrbm93IGlmIG90aGVyIHRlcm1pbmFsIHNlcnZlcnMgc3VwcG9ydCBsb2FkLQorICBiYWxhbmNpbmcsIGJ1dCBJIGRvIGtub3cgdGhhdCB0aGUgUG9ydE1hc3RlciBkb2VzIGl0LCBhbmQgZG9lcyBpdAorICBhbG1vc3QgYXMgd2VsbCBhcyB0aGUgZXFsIGRyaXZlciBzZWVtcyB0byBkbyBpdCAoLS0gVW5mb3J0dW5hdGVseSwgaW4KKyAgbXkgdGVzdGluZyBzbyBmYXIsIHRoZSBMaXZpbmdzdG9uIFBvcnRNYXN0ZXIgMmUncyBsb2FkLWJhbGFuY2luZyBpcyBhCisgIGdvb2QgMSB0byAyIEtCL3Mgc2xvd2VyIHRoYW4gdGhlIHRlc3QgbWFjaGluZSB3b3JraW5nIHdpdGggYSAyOC44IEticHMKKyAgYW5kIDE0LjQgS2JwcyBjb25uZWN0aW9uLiAgSG93ZXZlciwgSSBhbSBub3Qgc3VyZSB0aGF0IGl0IHJlYWxseSBpcworICB0aGUgUG9ydE1hc3Rlciwgb3IgaWYgaXQncyBMaW51eCdzIFRDUCBkcml2ZXJzLiBJJ20gdG9sZCB0aGF0IExpbnV4J3MKKyAgVENQIGltcGxlbWVudGF0aW9uIGlzIHByZXR0eSBmYXN0IHRob3VnaC4tLSkKKworCisgIEkgc3VnZ2VzdCB0byBJU1BzIG91dCB0aGVyZSB0aGF0IGl0IHdvdWxkIHByb2JhYmx5IGJlIGZhaXIgdG8gY2hhcmdlCisgIGEgbG9hZC1iYWxhbmNpbmcgY2xpZW50IDc1JSBvZiB0aGUgY29zdCBvZiB0aGUgc2Vjb25kIGxpbmUgYW5kIDUwJSBvZgorICB0aGUgY29zdCBvZiB0aGUgdGhpcmQgbGluZSBldGMuLi4KKworCisgIEhleSwgd2UgY2FuIGFsbCBkcmVhbSB5b3Uga25vdy4uLgorCisKKyAgMi4gIEtlcm5lbCBDb25maWd1cmF0aW9uCisKKyAgSGVyZSBJIGRlc2NyaWJlIHRoZSBnZW5lcmFsIHN0ZXBzIG9mIGdldHRpbmcgYSBrZXJuZWwgdXAgYW5kIHdvcmtpbmcKKyAgd2l0aCB0aGUgZXFsIGRyaXZlci4JRnJvbSBwYXRjaGluZywgYnVpbGRpbmcsIHRvIGluc3RhbGxpbmcuCisKKworICAyLjEuCVBhdGNoaW5nIFRoZSBLZXJuZWwKKworICBJZiB5b3UgZG8gbm90IGhhdmUgb3IgY2Fubm90IGdldCBhIGNvcHkgb2YgdGhlIGtlcm5lbCB3aXRoIHRoZSBlcWwKKyAgZHJpdmVyIGZvbGRlZCBpbnRvIGl0LCBnZXQgeW91ciBjb3B5IG9mIHRoZSBkcml2ZXIgZnJvbQorICBmdHA6Ly9zbGF1Z2h0ZXIubmNtLmNvbS9wdWIvTGludXgvTE9BRF9CQUxBTkNJTkcvZXFsLTEuMS50YXIuZ3ouCisgIFVucGFjayB0aGlzIGFyY2hpdmUgc29tZXBsYWNlIG9idmlvdXMgbGlrZSAvdXNyL2xvY2FsL3NyYy8uICBJdCB3aWxsCisgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzOgorCisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICAtcnctci0tci0tIGd1cnUvbmNtCTE5OCBKYW4gMTkgMTg6NTMgMTk5NSBlcWwtMS4xL05PLVdBUlJBTlRZCisgICAgICAgLXJ3LXItLXItLSBndXJ1L25jbQkzMDYyMCBGZWIgMjcgMjE6NDAgMTk5NSBlcWwtMS4xL2VxbC0xLjEucGF0Y2gKKyAgICAgICAtcnd4ci14ci14IGd1cnUvbmNtCTE2MTExIEphbiAxMiAyMjoyOSAxOTk1IGVxbC0xLjEvZXFsX2Vuc2xhdmUKKyAgICAgICAtcnctci0tci0tIGd1cnUvbmNtCTIxOTUgSmFuIDEwIDIxOjQ4IDE5OTUgZXFsLTEuMS9lcWxfZW5zbGF2ZS5jCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgIFVucGFjayBhIHJlY2VudCBrZXJuZWwgKHNvbWV0aGluZyBhZnRlciAxLjEuOTIpIHNvbWVwbGFjZSBjb252ZW5pZW50CisgIGxpa2Ugc2F5IC91c3Ivc3JjL2xpbnV4LTEuMS45Mi5lcWwuIFVzZSBzeW1ib2xpYyBsaW5rcyB0byBwb2ludAorICAvdXNyL3NyYy9saW51eCB0byB0aGlzIGRldmVsb3BtZW50IGRpcmVjdG9yeS4KKworCisgIEFwcGx5IHRoZSBwYXRjaCBieSBydW5uaW5nIHRoZSBjb21tYW5kczoKKworCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgIGNkIC91c3Ivc3JjCisgICAgICAgcGF0Y2ggPC91c3IvbG9jYWwvc3JjL2VxbC0xLjEvZXFsLTEuMS5wYXRjaAorICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisKKworCisgIDIuMi4JQnVpbGRpbmcgVGhlIEtlcm5lbAorCisgIEFmdGVyIHBhdGNoaW5nIHRoZSBrZXJuZWwsIHJ1biBtYWtlIGNvbmZpZyBhbmQgY29uZmlndXJlIHRoZSBrZXJuZWwKKyAgZm9yIHlvdXIgaGFyZHdhcmUuCisKKworICBBZnRlciBjb25maWd1cmF0aW9uLCBtYWtlIGFuZCBpbnN0YWxsIGFjY29yZGluZyB0byB5b3VyIGhhYml0LgorCisKKyAgMy4gIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorCisgIFNvIGZhciwgSSBoYXZlIG9ubHkgdXNlZCB0aGUgZXFsIGRldmljZSB3aXRoIHRoZSBEU0xJUCBTTElQIGNvbm5lY3Rpb24KKyAgbWFuYWdlciBieSBNYXR0IERpbGxvbiAoLS0gIlRoZSBtYW4gd2hvIHNvbGQgaGlzIHNvdWwgdG8gY29kZSBzbyBtdWNoCisgIHNvIHF1aWNrbHkuIi0tKSAuICBIb3cgeW91IGNvbmZpZ3VyZSBpdCBmb3Igb3RoZXIgImNvbm5lY3Rpb24iCisgIG1hbmFnZXJzIGlzIHVwIHRvIHlvdS4gIE1vc3Qgb3RoZXIgY29ubmVjdGlvbiBtYW5hZ2VycyB0aGF0IEkndmUgc2VlbgorICBkb24ndCBkbyBhIHZlcnkgZ29vZCBqb2Igd2hlbiBpdCBjb21lcyB0byBoYW5kbGluZyBtb3JlIHRoYW4gb25lCisgIGNvbm5lY3Rpb24uCisKKworICAzLjEuCS9ldGMvcmMuZC9yYy5pbmV0MQorCisgIEluIHJjLmluZXQxLCBpZmNvbmZpZyB0aGUgZXFsIGRldmljZSB0byB0aGUgSVAgYWRkcmVzcyB5b3UgdXN1YWxseSB1c2UKKyAgZm9yIHlvdXIgbWFjaGluZSwgYW5kIHRoZSBNVFUgeW91IHByZWZlciBmb3IgeW91ciBTTElQIGxpbmVzLglPbmUKKyAgY291bGQgYXJndWUgdGhhdCBNVFUgc2hvdWxkIGJlIHJvdWdobHkgaGFsZiB0aGUgdXN1YWwgc2l6ZSBmb3IgdHdvCisgIG1vZGVtcywgb25lLXRoaXJkIGZvciB0aHJlZSwgb25lLWZvdXJ0aCBmb3IgZm91ciwgZXRjLi4uICBCdXQgZ29pbmcKKyAgdG9vIGZhciBiZWxvdyAyOTYgaXMgcHJvYmFibHkgb3ZlcmtpbGwuIEhlcmUgaXMgYW4gZXhhbXBsZSBpZmNvbmZpZworICBjb21tYW5kIHRoYXQgc2V0cyB1cCB0aGUgZXFsIGRldmljZToKKworCisKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgaWZjb25maWcgZXFsIDE5OC42Ny4zMy4yMzkgbXR1IDEwMDYKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworCisKKworICBPbmNlIHRoZSBlcWwgZGV2aWNlIGlzIHVwIGFuZCBydW5uaW5nLCBhZGQgYSBzdGF0aWMgZGVmYXVsdCByb3V0ZSB0bworICBpdCBpbiB0aGUgcm91dGluZyB0YWJsZSB1c2luZyB0aGUgY29vbCBuZXcgcm91dGUgc3ludGF4IHRoYXQgbWFrZXMKKyAgbGlmZSBzbyBtdWNoIGVhc2llcjoKKworCisKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgcm91dGUgYWRkIGRlZmF1bHQgZXFsCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKyAgMy4yLglFbnNsYXZpbmcgRGV2aWNlcyBCeSBIYW5kCisKKyAgRW5zbGF2aW5nIGRldmljZXMgYnkgaGFuZCByZXF1aXJlcyB0d28gdXRpbGl0eSBwcm9ncmFtczogZXFsX2Vuc2xhdmUKKyAgYW5kIGVxbF9lbWFuY2lwYXRlICgtLSBlcWxfZW1hbmNpcGF0ZSBoYXNuJ3QgYmVlbiB3cml0dGVuIGJlY2F1c2Ugd2hlbgorICBhbiBlbnNsYXZlZCBkZXZpY2UgImRpZXMiLCBpdCBpcyBhdXRvbWF0aWNhbGx5IHRha2VuIG91dCBvZiB0aGUgcXVldWUuCisgIEkgaGF2ZW4ndCBmb3VuZCBhIGdvb2QgcmVhc29uIHRvIHdyaXRlIGl0IHlldC4uLiBvdGhlciB0aGFuIGZvcgorICBjb21wbGV0ZW5lc3MsIGJ1dCB0aGF0IGlzbid0IGEgZ29vZCBtb3RpdmF0b3IgaXMgaXQ/LS0pCisKKworICBUaGUgc3ludGF4IGZvciBlbnNsYXZpbmcgYSBkZXZpY2UgaXMgImVxbF9lbnNsYXZlIDxtYXN0ZXItbmFtZT4KKyAgPHNsYXZlLW5hbWU+IDxlc3RpbWF0ZWQtYnBzPiIuICBIZXJlIGFyZSBzb21lIGV4YW1wbGUgZW5zbGF2aW5nczoKKworCisKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgZXFsX2Vuc2xhdmUgZXFsIHNsMCAyODgwMAorICAgICAgIGVxbF9lbnNsYXZlIGVxbCBwcHAwIDE0NDAwCisgICAgICAgZXFsX2Vuc2xhdmUgZXFsIHNsMSA1NzYwMAorICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisKKworCisgIFdoZW4geW91IHdhbnQgdG8gZnJlZSBhIGRldmljZSBmcm9tIGl0cyBsaWZlIG9mIHNsYXZlcnksIHlvdSBjYW4KKyAgZWl0aGVyIGRvd24gdGhlIGRldmljZSB3aXRoIGlmY29uZmlnIChlcWwgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1cnkgdGhlCisgIGRlYWQgc2xhdmUgYW5kIHJlbW92ZSBpdCBmcm9tIGl0cyBxdWV1ZSkgb3IgdXNlIGVxbF9lbWFuY2lwYXRlIHRvIGZyZWUKKyAgaXQuICgtLSBPciBqdXN0IGlmY29uZmlnIGl0IGRvd24sIGFuZCB0aGUgZXFsIGRyaXZlciB3aWxsIHRha2UgaXQgb3V0CisgIGZvciB5b3UuLS0pCisKKworCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgIGVxbF9lbWFuY2lwYXRlIGVxbCBzbDAKKyAgICAgICBlcWxfZW1hbmNpcGF0ZSBlcWwgcHBwMAorICAgICAgIGVxbF9lbWFuY2lwYXRlIGVxbCBzbDEKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworCisKKworICAzLjMuCURTTElQIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBlcWwgRGV2aWNlCisKKyAgVGhlIGdlbmVyYWwgaWRlYSBpcyB0byBicmluZyB1cCBhbmQga2VlcCB1cCBhcyBtYW55IFNMSVAgY29ubmVjdGlvbnMKKyAgYXMgeW91IG5lZWQsIGF1dG9tYXRpY2FsbHkuCisKKworICAzLjMuMS4gIC9ldGMvc2xpcC9ydW5zbGlwLmNvbmYKKworICBIZXJlIGlzIGFuIGV4YW1wbGUgcnVuc2xpcC5jb25mOgorCisKKworCisKKworCisKKworCisKKworCisKKworICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgIG5hbWUJCXNsLWxpbmUtMQorICBlbmFibGVkCisgIGJhdWQJCTM4NDAwCisgIG10dQkJNTc2CisgIGR1Y21kCQktZSAvZXRjL3NsaXAvZGlhbG91dC9jdWEyLTI4OC54cCAtdCA5CisgIGNvbW1hbmQJIGVxbF9lbnNsYXZlIGVxbCAkaW50ZXJmYWNlIDI4ODAwCisgIGFkZHJlc3MJIDE5OC42Ny4zMy4yMzkKKyAgbGluZQkJL2Rldi9jdWEyCisKKyAgbmFtZQkJc2wtbGluZS0yCisgIGVuYWJsZWQKKyAgYmF1ZAkJMzg0MDAKKyAgbXR1CQk1NzYKKyAgZHVjbWQJCS1lIC9ldGMvc2xpcC9kaWFsb3V0L2N1YTMtMjg4LnhwIC10IDkKKyAgY29tbWFuZAkgZXFsX2Vuc2xhdmUgZXFsICRpbnRlcmZhY2UgMjg4MDAKKyAgYWRkcmVzcwkgMTk4LjY3LjMzLjIzOQorICBsaW5lCQkvZGV2L2N1YTMKKyAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworCisKKyAgMy40LglVc2luZyBQUFAgYW5kIHRoZSBlcWwgRGV2aWNlCisKKyAgSSBoYXZlIG5vdCB5ZXQgZG9uZSBhbnkgbG9hZC1iYWxhbmNpbmcgdGVzdGluZyBmb3IgUFBQIGRldmljZXMsIG1haW5seQorICBiZWNhdXNlIEkgZG9uJ3QgaGF2ZSBhIFBQUC1jb25uZWN0aW9uIG1hbmFnZXIgbGlrZSBTTElQIGhhcyB3aXRoCisgIERTTElQLiBJIGRpZCBmaW5kIGEgZ29vZCB0aXAgZnJvbSBMaW51eE5FVDpCaWxseSBmb3IgUFBQIHBlcmZvcm1hbmNlOgorICBtYWtlIHN1cmUgeW91IGhhdmUgYXN5bmNtYXAgc2V0IHRvIHNvbWV0aGluZyBzbyB0aGF0IGNvbnRyb2wKKyAgY2hhcmFjdGVycyBhcmUgbm90IGVzY2FwZWQuCisKKworICBJIHRyaWVkIHRvIGZpeCB1cCBhIFBQUCBzY3JpcHQvc3lzdGVtIGZvciByZWRpYWxpbmcgbG9zdCBQUFAKKyAgY29ubmVjdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSBlcWwgZHJpdmVyIHRoZSB3ZWVrZW5kIG9mIEZlYiAyNS0yNiAnOTUKKyAgKEhlcmVhZnRlciBrbm93biBhcyB0aGUgOC1ob3VyIFBQUCBIYXRlIEZlc3RpdmFsKS4gIFBlcmhhcHMgbGF0ZXIgdGhpcworICB5ZWFyLgorCisKKyAgNC4gIEFib3V0IHRoZSBTbGF2ZSBTY2hlZHVsZXIgQWxnb3JpdGhtCisKKyAgVGhlIHNsYXZlIHNjaGVkdWxlciBwcm9iYWJseSBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGEgZG96ZW4gb3RoZXIKKyAgdGhpbmdzIGFuZCBwdXNoIHRyYWZmaWMgbXVjaCBmYXN0ZXIuCVRoZSBmb3JtdWxhIGluIHRoZSBjdXJyZW50IHNldAorICB1cCBvZiB0aGUgZHJpdmVyIHdhcyB0dW5lZCB0byBoYW5kbGUgc2xhdmVzIHdpdGggd2lsZGx5IGRpZmZlcmVudAorICBiaXRzLXBlci1zZWNvbmQgInByaW9yaXRpZXMiLgorCisKKyAgQWxsIHRlc3RpbmcgSSBoYXZlIGRvbmUgd2FzIHdpdGggdHdvIDI4LjggVi5GQyBtb2RlbXMsIG9uZSBjb25uZWN0aW5nCisgIGF0IDI4ODAwIGJwcyBvciBzbG93ZXIsIGFuZCB0aGUgb3RoZXIgY29ubmVjdGluZyBhdCAxNDQwMCBicHMgYWxsIHRoZQorICB0aW1lLgorCisKKyAgT25lIHZlcnNpb24gb2YgdGhlIHNjaGVkdWxlciB3YXMgYWJsZSB0byBwdXNoIDUuMyBLL3MgdGhyb3VnaCB0aGUKKyAgMjg4MDAgYW5kIDE0NDAwIGNvbm5lY3Rpb25zLCBidXQgd2hlbiB0aGUgcHJpb3JpdGllcyBvbiB0aGUgbGlua3Mgd2VyZQorICB2ZXJ5IHdpZGUgYXBhcnQgKDU3NjAwIHZzLiAxNDQwMCkgdGhlICJmYXN0ZXIiIG1vZGVtIHJlY2VpdmVkIGFsbAorICB0cmFmZmljIGFuZCB0aGUgInNsb3dlciIgbW9kZW0gc3RhcnZlZC4KKworCisgIDUuICBUZXN0ZXJzJyBSZXBvcnRzCisKKyAgU29tZSBwZW9wbGUgaGF2ZSBleHBlcmltZW50ZWQgd2l0aCB0aGUgZXFsIGRldmljZSB3aXRoIG5ld2VyCisgIGtlcm5lbHMgKHRoYW4gMS4xLjc1KS4gIEkgaGF2ZSBzaW5jZSB1cGRhdGVkIHRoZSBkcml2ZXIgdG8gcGF0Y2gKKyAgY2xlYW5seSBpbiBuZXdlciBrZXJuZWxzIGJlY2F1c2Ugb2YgdGhlIHJlbW92YWwgb2YgdGhlIG9sZCAic2xhdmUtCisgIGJhbGFuY2luZyIgZHJpdmVyIGNvbmZpZyBvcHRpb24uCisKKworICBvICBpY2VlIGZyb20gTGludXhORVQgcGF0Y2hlZCAxLjEuODYgd2l0aG91dCBhbnkgcmVqZWN0cyBhbmQgd2FzIGFibGUKKyAgICAgdG8gYm9vdCB0aGUga2VybmVsIGFuZCBlbnNsYXZlIGEgY291cGxlIG9mIElTRE4gUFBQIGxpbmtzLgorCisgIDUuMS4JUmFuZG9scGggQmVudHNvbidzIFRlc3QgUmVwb3J0CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICBGcm9tIGJlbnRzb25AZ3JpZWcuc2Vhc2x1Zy5vcmcgV2VkIEZlYiAgOCAxOTowODowOSAxOTk1CisgIERhdGU6IFR1ZSwgNyBGZWIgOTUgMjI6NTcgUFNUCisgIEZyb206IFJhbmRvbHBoIEJlbnRzb24gPGJlbnRzb25AZ3JpZWcuc2Vhc2x1Zy5vcmc+CisgIFRvOiBndXJ1QG5jbS5jb20KKyAgU3ViamVjdDogRVFMIGRyaXZlciB0ZXN0cworCisKKyAgSSBoYXZlIGJlZW4gY2hlY2tpbmcgb3V0IHlvdXIgZXFsIGRyaXZlci4gIChOaWNlIHdvcmssIHRoYXQhKQorICBBbHRob3VnaCB5b3UgbWF5IGFscmVhZHkgZG9uZSB0aGlzIHBlcmZvcm1hbmNlIHRlc3RpbmcsIGhlcmUKKyAgYXJlIHNvbWUgZGF0YSBJJ3ZlIGRpc2NvdmVyZWQuCisKKyAgUmFuZG9scGggQmVudHNvbgorICBiZW50c29uQGdyaWVnLnNlYXNsdWcub3JnCisKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworICBBIHBzZXVkby1kZXZpY2UgZHJpdmVyLCBFUUwsIHdyaXR0ZW4gYnkgU2ltb24gSmFuZXMsIGNhbiBiZSB1c2VkCisgIHRvIGJ1bmRsZSBtdWx0aXBsZSBTTElQIGNvbm5lY3Rpb25zIGludG8gd2hhdCBhcHBlYXJzIHRvIGJlIGEKKyAgc2luZ2xlIGNvbm5lY3Rpb24uICBUaGlzIGFsbG93cyBvbmUgdG8gaW1wcm92ZSBkaWFsLXVwIG5ldHdvcmsKKyAgY29ubmVjdGl2aXR5IGdyYWR1YWxseSwgd2l0aG91dCBoYXZpbmcgdG8gYnV5IGV4cGVuc2l2ZSBEU1UvQ1NVCisgIGhhcmR3YXJlIGFuZCBzZXJ2aWNlcy4KKworICBJIGhhdmUgZG9uZSBzb21lIHRlc3Rpbmcgb2YgdGhpcyBzb2Z0d2FyZSwgd2l0aCB0d28gZ29hbHMgaW4KKyAgbWluZDogZmlyc3QsIHRvIGVuc3VyZSBpdCBhY3R1YWxseSB3b3JrcyBhcyBkZXNjcmliZWQgYW5kCisgIHNlY29uZCwgYXMgYSBtZXRob2Qgb2YgZXhlcmNpc2luZyBteSBkZXZpY2UgZHJpdmVyLgorCisgIFRoZSBmb2xsb3dpbmcgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzIHdlcmUgZGVyaXZlZCBmcm9tIGEgc2V0CisgIG9mIFNMSVAgY29ubmVjdGlvbnMgcnVuIGJldHdlZW4gdHdvIExpbnV4IHN5c3RlbXMgKDEuMS44NCkgdXNpbmcKKyAgYSA0ODZEWDIvNjYgd2l0aCBhIEN5Y2xvbS04WXMgYW5kIGEgNDg2U0xDLzQwIHdpdGggYSBDeWNsb20tMTZZLgorICAoUG9ydHMgMCwxLDIsMyB3ZXJlIHVzZWQuICBBIGxhdGVyIGNvbmZpZ3VyYXRpb24gd2lsbCBkaXN0cmlidXRlCisgIHBvcnQgc2VsZWN0aW9uIGFjcm9zcyB0aGUgZGlmZmVyZW50IENpcnJ1cyBjaGlwcyBvbiB0aGUgYm9hcmRzLikKKyAgT25jZSBhIGxpbmsgd2FzIGVzdGFibGlzaGVkLCBJIHRpbWVkIGEgYmluYXJ5IGZ0cCB0cmFuc2ZlciBvZgorICAyODkyODQgYnl0ZXMgb2YgZGF0YS4JSWYgdGhlcmUgd2VyZSBubyBvdmVyaGVhZCAocGFja2V0IGhlYWRlcnMsCisgIGludGVyLWNoYXJhY3RlciBhbmQgaW50ZXItcGFja2V0IGRlbGF5cywgZXRjLikgdGhlIHRyYW5zZmVycworICB3b3VsZCB0YWtlIHRoZSBmb2xsb3dpbmcgdGltZXM6CisKKyAgICAgIGJpdHMvc2VjCXNlY29uZHMKKyAgICAgIDM0NTYwMAk4LjMKKyAgICAgIDIzNDYwMAkxMi4zCisgICAgICAxNzI4MDAJMTYuNworICAgICAgMTUzNjAwCTE4LjgKKyAgICAgIDc2ODAwCTM3LjYKKyAgICAgIDU3NjAwCTUwLjIKKyAgICAgIDM4NDAwCTc1LjMKKyAgICAgIDI4ODAwCTEwMC40CisgICAgICAxOTIwMAkxNTAuNgorICAgICAgOTYwMAkzMDEuMworCisgIEEgc2luZ2xlIGxpbmUgcnVubmluZyBhdCB0aGUgbG93ZXIgc3BlZWRzIGFuZCB3aXRoIGxhcmdlIHBhY2tldHMKKyAgY29tZXMgdG8gd2l0aGluIDIlIG9mIHRoaXMuICBQZXJmb3JtYW5jZSBpcyBsaW1pdGVkIGZvciB0aGUgaGlnaGVyCisgIHNwZWVkcyAoYXMgcHJlZGljdGVkIGJ5IHRoZSBDaXJydXMgZGF0YWJvb2spIHRvIGFuIGFnZ3JlZ2F0ZSBvZgorICBhYm91dCAxNjAga2JpdHMvc2VjLglUaGUgbmV4dCByb3VuZCBvZiB0ZXN0aW5nIHdpbGwgZGlzdHJpYnV0ZQorICB0aGUgbG9hZCBhY3Jvc3MgdHdvIG9yIG1vcmUgQ2lycnVzIGNoaXBzLgorCisgIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBvbmUgZ2V0cyBuZWFybHkgdGhlIGZ1bGwgYWR2YW50YWdlIG9mIHRoZQorICBzZWNvbmQsIHRoaXJkLCBhbmQgZm91cnRoIGxpbmUncyBiYW5kd2lkdGguICAoVGhlIGJhZCBuZXdzIGlzCisgIHRoYXQgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBzZWVtZWQgZnJhZ2lsZSBmb3IgdGhlIGhpZ2hlcgorICBzcGVlZHMuICBPbmNlIGVzdGFibGlzaGVkLCB0aGUgY29ubmVjdGlvbiBzZWVtZWQgcm9idXN0IGVub3VnaC4pCisKKyAgI2xpbmVzICBzcGVlZAltdHUgIHNlY29uZHMJdGhlb3J5ICBhY3R1YWwgICVvZgorCSBrYml0L3NlYyAgICAgIGR1cmF0aW9uCXNwZWVkCXNwZWVkCW1heAorICAzCTExNTIwMCAgOTAwCV8JMzQ1NjAwCisgIDMJMTE1MjAwICA0MDAJMTguMQkzNDU2MDAgIDE1OTgyNSAgNDYKKyAgMgkxMTUyMDAgIDkwMAlfCTIzMDQwMAorICAyCTExNTIwMCAgNjAwCTE4LjEJMjMwNDAwICAxNTk4MjUgIDY5CisgIDIJMTE1MjAwICA0MDAJMTkuMwkyMzA0MDAgIDE0OTg4OCAgNjUKKyAgNAk1NzYwMAk5MDAJXwkyMzQ2MDAKKyAgNAk1NzYwMAk2MDAJXwkyMzQ2MDAKKyAgNAk1NzYwMAk0MDAJXwkyMzQ2MDAKKyAgMwk1NzYwMAk2MDAJMjAuOQkxNzI4MDAgIDEzODQxMyAgODAKKyAgMwk1NzYwMAk5MDAJMjEuMgkxNzI4MDAgIDEzNjQ1NSAgNzgKKyAgMwkxMTUyMDAgIDYwMAkyMS43CTM0NTYwMCAgMTMzMzExICAzOAorICAzCTU3NjAwCTQwMAkyMi41CTE3MjgwMCAgMTI4NTcxICA3NAorICA0CTM4NDAwCTkwMAkyNS4yCTE1MzYwMCAgMTE0Nzk1ICA3NAorICA0CTM4NDAwCTYwMAkyNi40CTE1MzYwMCAgMTA5NTc3ICA3MQorICA0CTM4NDAwCTQwMAkyNy4zCTE1MzYwMCAgMTA1OTY1ICA2OAorICAyCTU3NjAwCTkwMAkyOS4xCTExNTIwMCAgOTk0MTAuMyA4NgorICAxCTExNTIwMCAgOTAwCTMwLjcJMTE1MjAwICA5NDIyOS4zIDgxCisgIDIJNTc2MDAJNjAwCTMwLjIJMTE1MjAwICA5NTc4OS40IDgzCisgIDMJMzg0MDAJOTAwCTMwLjMJMTE1MjAwICA5NTQ3My4zIDgyCisgIDMJMzg0MDAJNjAwCTMxLjIJMTE1MjAwICA5MjcxOS4yIDgwCisgIDEJMTE1MjAwICA2MDAJMzEuMwkxMTUyMDAgIDkyNDIzCTgwCisgIDIJNTc2MDAJNDAwCTMyLjMJMTE1MjAwICA4OTU2MS42IDc3CisgIDEJMTE1MjAwICA0MDAJMzIuOAkxMTUyMDAgIDg4MTk2LjMgNzYKKyAgMwkzODQwMAk0MDAJMzMuNQkxMTUyMDAgIDg2MzUzLjQgNzQKKyAgMgkzODQwMAk5MDAJNDMuNwk3NjgwMAk2NjE5Ny43IDg2CisgIDIJMzg0MDAJNjAwCTQ0CTc2ODAwCTY1NzQ2LjQgODUKKyAgMgkzODQwMAk0MDAJNDcuMgk3NjgwMAk2MTI4OQk3OQorICA0CTE5MjAwCTkwMAk1MC44CTc2ODAwCTU2OTQ1LjcgNzQKKyAgNAkxOTIwMAk0MDAJNTMuMgk3NjgwMAk1NDM3Ni43IDcwCisgIDQJMTkyMDAJNjAwCTUzLjcJNzY4MDAJNTM4NzAuNCA3MAorICAxCTU3NjAwCTkwMAk1NC42CTU3NjAwCTUyOTgyLjQgOTEKKyAgMQk1NzYwMAk2MDAJNTYuMgk1NzYwMAk1MTQ3NAk4OQorICAzCTE5MjAwCTkwMAk2MC41CTU3NjAwCTQ3ODE1LjUgODMKKyAgMQk1NzYwMAk0MDAJNjAuMgk1NzYwMAk0ODA1My44IDgzCisgIDMJMTkyMDAJNjAwCTYyCTU3NjAwCTQ2NjU4LjcgODEKKyAgMwkxOTIwMAk0MDAJNjQuNwk1NzYwMAk0NDcxMS42IDc3CisgIDEJMzg0MDAJOTAwCTc5LjQJMzg0MDAJMzY0MzMuOCA5NAorICAxCTM4NDAwCTYwMAk4Mi40CTM4NDAwCTM1MTA3LjMgOTEKKyAgMgkxOTIwMAk5MDAJODQuNAkzODQwMAkzNDI3NS40IDg5CisgIDEJMzg0MDAJNDAwCTg2LjgJMzg0MDAJMzMzMjcuNiA4NgorICAyCTE5MjAwCTYwMAk4Ny42CTM4NDAwCTMzMDIzLjMgODUKKyAgMgkxOTIwMAk0MDAJOTEuMgkzODQwMAkzMTcxOS43IDgyCisgIDQJOTYwMAk5MDAJOTQuNwkzODQwMAkzMDU0Ny40IDc5CisgIDQJOTYwMAk0MDAJMTA2CTM4NDAwCTI3MjkwLjkgNzEKKyAgNAk5NjAwCTYwMAkxMTAJMzg0MDAJMjYyOTguNSA2OAorICAzCTk2MDAJOTAwCTExOAkyODgwMAkyNDUxNS42IDg1CisgIDMJOTYwMAk2MDAJMTIwCTI4ODAwCTI0MTA3CTgzCisgIDMJOTYwMAk0MDAJMTMxCTI4ODAwCTIyMDgyLjcgNzYKKyAgMQkxOTIwMAk5MDAJMTU1CTE5MjAwCTE4NjYzLjUgOTcKKyAgMQkxOTIwMAk2MDAJMTYxCTE5MjAwCTE3OTY4CTkzCisgIDEJMTkyMDAJNDAwCTE3MAkxOTIwMAkxNzAxNi43IDg4CisgIDIJOTYwMAk2MDAJMTc2CTE5MjAwCTE2NDM2LjYgODUKKyAgMgk5NjAwCTkwMAkxODAJMTkyMDAJMTYwNzEuMyA4MworICAyCTk2MDAJNDAwCTE4MQkxOTIwMAkxNTk4Mi41IDgzCisgIDEJOTYwMAk5MDAJMzA1CTk2MDAJOTQ4NC43MiA5OAorICAxCTk2MDAJNjAwCTMxNAk5NjAwCTkyMTIuODcgOTUKKyAgMQk5NjAwCTQwMAkzMzIJOTYwMAk4NzEzLjM3IDkwCisKKworCisKKworICA1LjIuCUFudGhvbnkgSGVhbHkncyBSZXBvcnQKKworCisKKworCisKKworICBEYXRlOiBNb24sIDEzIEZlYiAxOTk1IDE2OjE3OjI5ICsxMTAwIChFU1QpCisgIEZyb206IEFudG9ueSBIZWFsZXkgPGFoZWFsZXlAc3QubmVwZWFuLnV3cy5lZHUuYXU+CisgIFRvOiBTaW1vbiBKYW5lcyA8Z3VydUBuY20uY29tPgorICBTdWJqZWN0OiBSZTogTG9hZCBCYWxhbmNpbmcKKworICBIaSBTaW1vbiwKKwkgIEkndmUgaW5zdGFsbGVkIHlvdXIgcGF0Y2ggYW5kIGl0IHdvcmtzIGdyZWF0LiBJIGhhdmUgdHJpYWxlZAorCSAgaXQgb3ZlciB0d2luIFNML0lQIGxpbmVzLCBqdXN0IG92ZXIgbnVsbCBtb2RlbXMsIGJ1dCBJIHdhcworCSAgYWJsZSB0byBkYXRhIGF0IG92ZXIgNDhLYi9zIFtJU0ROIGxpbmsgLVNpbW9uXS4gSSBtYW5hZ2VkIGEKKwkgIHRyYW5zZmVyIG9mIHVwIHRvIDcuNSBLYnl0ZS9zIG9uIG9uZSBnbywgYnV0IGF2ZXJhZ2VkIGFyb3VuZAorCSAgNi40IEtieXRlL3MsIHdoaWNoIEkgdGhpbmsgaXMgcHJldHR5IGNvb2wuICA6KQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXdyazMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V3cmszLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGU5ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V3cmszLnR4dApAQCAtMCwwICsxLDQ2IEBACitUaGUgRXRoZXJXT1JLUyAzICBkcml2ZXIgaW4gdGhpcyBkaXN0cmlidXRpb24gaXMgIGRlc2lnbmVkIHRvICB3b3JrIHdpdGggYWxsCitrZXJuZWxzICAgPiAgMS4xLjMzICAgKGFwcHJveCkgIGFuZCAgaW5jbHVkZXMgIHRvb2xzICAgaW4gIHRoZSAgJ2V3cmszdG9vbHMnCitzdWJkaXJlY3RvcnkgICB0byAgYWxsb3cgIHNldCAgIHVwIG9mICAgdGhlICAgY2FyZCwgIHNpbWlsYXIgIHRvICB0aGUgIE1TRE9TCisnTklDU0VUVVAuRVhFJyB0b29scyBwcm92aWRlZCBvbiAgdGhlIERPUyBkcml2ZXJzICBkaXNrICh0eXBlICdtYWtlJyBpbiB0aGF0CitzdWJkaXJlY3RvcnkgdG8gbWFrZSB0aGUgdG9vbHMpLgorCitUaGUgc3VwcG9ydGVkICBjYXJkcyBhcmUgREUyMDMsICBERTIwNCBhbmQgREUyMDUuICBBbGwgICBvdGhlciBjYXJkcyBhcmUgTk9UCitzdXBwb3J0ZWQgLSByZWZlciB0byAnZGVwY2EuYycgZm9yIHJ1bm5pbmcgdGhlIExBTkNFIGJhc2VkIG5ldHdvcmsgY2FyZHMgYW5kCisnZGU0eDUuYycgIGZvciB0aGUgIERJR0lUQUwgICBTZW1pY29uZHVjdG9yIFBDSSAgY2hpcCAgYmFzZWQgIGFkYXB0ZXJzICBmcm9tCitEaWdpdGFsLgorCitUaGUgYWJpbGl0eSB0byBsb2FkICB0aGlzIGRyaXZlciBhcyBhICBsb2FkYWJsZSBtb2R1bGUgaGFzIGJlZW4gaW5jbHVkZWQgYW5kCit1c2VkIGV4dGVuc2l2ZWx5ICBkdXJpbmcgdGhlIGRyaXZlciAgZGV2ZWxvcG1lbnQgKHRvIHNhdmUgdGhvc2UgIGxvbmcgcmVib290CitzZXF1ZW5jZXMpLiBUbyB1dGlsaXNlIHRoaXMgYWJpbGl0eSwgeW91IGhhdmUgdG8gZG8gOCB0aGluZ3M6CisKKyAgICAwKSBoYXZlIGEgY29weSBvZiB0aGUgbG9hZGFibGUgbW9kdWxlcyBjb2RlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4KKyAgICAxKSBjb3B5IGV3cmszLmMgZnJvbSB0aGUgIC9saW51eC9kcml2ZXJzL25ldCBkaXJlY3RvcnkgdG8geW91ciBmYXZvdXJpdGUKKyAgICB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorICAgIDIpIGVkaXQgdGhlICBzb3VyY2UgY29kZSBuZWFyICBsaW5lIDE4OTggdG8gcmVmbGVjdCAgdGhlIEkvTyBhZGRyZXNzIGFuZAorICAgIElSUSB5b3UncmUgdXNpbmcuCisgICAgMykgY29tcGlsZSAgZXdyazMuYywgYnV0IGluY2x1ZGUgLURNT0RVTEUgaW4gIHRoZSBjb21tYW5kIGxpbmUgdG8gZW5zdXJlCisgICAgdGhhdCB0aGUgY29ycmVjdCBiaXRzIGFyZSBjb21waWxlZCAoc2VlIGVuZCBvZiBzb3VyY2UgY29kZSkuCisgICAgNCkgaWYgeW91IGFyZSB3YW50aW5nIHRvIGFkZCBhIG5ldyAgY2FyZCwgZ290byA1LiBPdGhlcndpc2UsIHJlY29tcGlsZSBhCisgICAga2VybmVsIHdpdGggdGhlIGV3cmszIGNvbmZpZ3VyYXRpb24gdHVybmVkIG9mZiBhbmQgcmVib290LgorICAgIDUpIGluc21vZCBld3JrMy5vCisgICAgICAgICAgW0FsYW4gQ294OiBDaGFuZ2VkIHRoaXMgc28geW91IGNhbiBpbnNtb2QgZXdyazMubyBpcnE9eCBpbz15XQorICAgICAgICAgIFtBZGFtIEtyb3BlbGluOiBNdWx0aXBsZSBjYXJkcyBub3cgc3VwcG9ydGVkIGJ5IGlycT14MSx4MiBpbz15MSx5Ml0KKyAgICA2KSBydW4gdGhlIG5ldCBzdGFydHVwIGJpdHMgZm9yIHlvdXIgbmV3IGV0aD8/IGludGVyZmFjZSBtYW51YWxseSAKKyAgICAodXN1YWxseSAvZXRjL3JjLmluZXRbMTJdIGF0IGJvb3QgdGltZSkuIAorICAgIDcpIGVuam95IQorCisgICAgTm90ZSB0aGF0IGF1dG9wcm9iaW5nIGlzIG5vdCBhbGxvd2VkIGluIGxvYWRhYmxlIG1vZHVsZXMgLSB0aGUgc3lzdGVtIGlzCisgICAgYWxyZWFkeSB1cCBhbmQgcnVubmluZyBhbmQgeW91J3JlIG1lc3Npbmcgd2l0aCBpbnRlcnJ1cHRzLgorCisgICAgVG8gdW5sb2FkIGEgbW9kdWxlLCB0dXJuIG9mZiB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UgCisgICAgJ2lmY29uZmlnIGV0aD8/IGRvd24nIHRoZW4gJ3JtbW9kIGV3cmszJy4KKworVGhlIHBlcmZvcm1hbmNlIHdlJ3ZlICBhY2hpZXZlZCBzbyBmYXIgIGhhcyBiZWVuIG1lYXN1cmVkIHRocm91Z2ggdGhlICd0dGNwJwordG9vbCAgIGF0IDk3NWtCL3MuICBUaGlzICBtZWFzdXJlcyAgdGhlICB0b3RhbCAgVENQICBzdGFjayBwZXJmb3JtYW5jZSB3aGljaAoraW5jbHVkZXMgdGhlICAgY2FyZCwgIHNvIGRvbid0ICBleHBlY3QgICB0byBnZXQgICBtdWNoIG5lYXJlciAgdGhlICAxLjI1TUIvcwordGhlb3JldGljYWwgRXRoZXJuZXQgcmF0ZS4KKworCitFbmpveSEKKworRGF2ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZpbHRlci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmYyMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZpbHRlci50eHQKQEAgLTAsMCArMSw0MiBAQAorZmlsdGVyLnR4dDogTGludXggU29ja2V0IEZpbHRlcmluZworV3JpdHRlbiBieTogSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworCUxpbnV4IFNvY2tldCBGaWx0ZXJpbmcgaXMgZGVyaXZlZCBmcm9tIHRoZSBCZXJrZWxleQorUGFja2V0IEZpbHRlci4gVGhlcmUgYXJlIHNvbWUgZGlzdGluY3QgZGlmZmVyZW5jZXMgYmV0d2VlbgordGhlIEJTRCBhbmQgTGludXggS2VybmVsIEZpbHRlcmluZy4KKworTGludXggU29ja2V0IEZpbHRlcmluZyAoTFNGKSBhbGxvd3MgYSB1c2VyLXNwYWNlIHByb2dyYW0gdG8KK2F0dGFjaCBhIGZpbHRlciBvbnRvIGFueSBzb2NrZXQgYW5kIGFsbG93IG9yIGRpc2FsbG93IGNlcnRhaW4KK3R5cGVzIG9mIGRhdGEgdG8gY29tZSB0aHJvdWdoIHRoZSBzb2NrZXQuIExTRiBmb2xsb3dzIGV4YWN0bHkKK3RoZSBzYW1lIGZpbHRlciBjb2RlIHN0cnVjdHVyZSBhcyB0aGUgQlNEIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIKKyhCUEYpLCBzbyByZWZlcnJpbmcgdG8gdGhlIEJTRCBicGYuNCBtYW5wYWdlIGlzIHZlcnkgaGVscGZ1bCBpbgorY3JlYXRpbmcgZmlsdGVycy4KKworTFNGIGlzIG11Y2ggc2ltcGxlciB0aGFuIEJQRi4gT25lIGRvZXMgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQKK2RldmljZXMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LiBZb3Ugc2ltcGx5IGNyZWF0ZSB5b3VyIGZpbHRlcgorY29kZSwgc2VuZCBpdCB0byB0aGUga2VybmVsIHZpYSB0aGUgU09fQVRUQUNIX0ZJTFRFUiBpb2N0bCBhbmQKK2lmIHlvdXIgZmlsdGVyIGNvZGUgcGFzc2VzIHRoZSBrZXJuZWwgY2hlY2sgb24gaXQsIHlvdSB0aGVuCitpbW1lZGlhdGVseSBiZWdpbiBmaWx0ZXJpbmcgZGF0YSBvbiB0aGF0IHNvY2tldC4KKworWW91IGNhbiBhbHNvIGRldGFjaCBmaWx0ZXJzIGZyb20geW91ciBzb2NrZXQgdmlhIHRoZQorU09fREVUQUNIX0ZJTFRFUiBpb2N0bC4gVGhpcyB3aWxsIHByb2JhYmx5IG5vdCBiZSB1c2VkIG11Y2gKK3NpbmNlIHdoZW4geW91IGNsb3NlIGEgc29ja2V0IHRoYXQgaGFzIGEgZmlsdGVyIG9uIGl0IHRoZQorZmlsdGVyIGlzIGF1dG9tYWdpY2FsbHkgcmVtb3ZlZC4gVGhlIG90aGVyIGxlc3MgY29tbW9uIGNhc2UKK21heSBiZSBhZGRpbmcgYSBkaWZmZXJlbnQgZmlsdGVyIG9uIHRoZSBzYW1lIHNvY2tldCB3aGVyZSB5b3UgaGFkIGFub3RoZXIKK2ZpbHRlciB0aGF0IGlzIHN0aWxsIHJ1bm5pbmc6IHRoZSBrZXJuZWwgdGFrZXMgY2FyZSBvZiByZW1vdmluZwordGhlIG9sZCBvbmUgYW5kIHBsYWNpbmcgeW91ciBuZXcgb25lIGluIGl0cyBwbGFjZSwgYXNzdW1pbmcgeW91cgorZmlsdGVyIGhhcyBwYXNzZWQgdGhlIGNoZWNrcywgb3RoZXJ3aXNlIGlmIGl0IGZhaWxzIHRoZSBvbGQgZmlsdGVyCit3aWxsIHJlbWFpbiBvbiB0aGF0IHNvY2tldC4KKworRXhhbXBsZXMKKz09PT09PT09CisKK0lvY3Rscy0KK3NldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19BVFRBQ0hfRklMVEVSLCAmRmlsdGVyLCBzaXplb2YoRmlsdGVyKSk7CitzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fREVUQUNIX0ZJTFRFUiwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKworU2VlIHRoZSBCU0QgYnBmLjQgbWFucGFnZSBhbmQgdGhlIEJTRCBQYWNrZXQgRmlsdGVyIHBhcGVyIHdyaXR0ZW4gYnkKK1N0ZXZlbiBNY0Nhbm5lIGFuZCBWYW4gSmFjb2Jzb24gb2YgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mb3JlMjAwZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZm9yZTIwMGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjMzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZm9yZTIwMGUudHh0CkBAIC0wLDAgKzEsNjYgQEAKKworRk9SRSBTeXN0ZW1zIFBDQS0yMDBFL1NCQS0yMDBFIEFUTSBOSUMgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciB0aGUgRk9SRSBTeXN0ZW1zIDIwMEUtc2VyaWVzIEFUTSBhZGFwdGVycwordG8gdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0uIEl0IGlzIGJhc2VkIG9uIHRoZSBlYXJsaWVyIFBDQS0yMDBFIGRyaXZlcgord3JpdHRlbiBieSBVd2UgRGFubm93c2tpLgorCitUaGUgZHJpdmVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRzIFBDQS0yMDBFIGFuZCBTQkEtMjAwRSBhZGFwdGVycyBvbgoraTM4NiwgYWxwaGEgKHVudGVzdGVkKSwgcG93ZXJwYywgc3BhcmMgYW5kIHNwYXJjNjQgYXJjaHMuCisKK1RoZSBpbnRlbnQgaXMgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgZGlmZmVyZW50IG1vZGVscyBvZiBGT1JFIGFkYXB0ZXJzIGF0IHRoZQorc2FtZSB0aW1lLCBieSBob3N0cyB0aGF0IGhhdmUgc2V2ZXJhbCBidXMgaW50ZXJmYWNlcyAoc3VjaCBhcyBQQ0krU0JVUywKK1BDSStNQ0Egb3IgUENJK0VJU0EpLgorCitPbmx5IFBDSSBhbmQgU0JVUyBkZXZpY2VzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIsIGJ1dCBzdXBwb3J0Citmb3Igb3RoZXIgYnVzIGludGVyZmFjZXMgc3VjaCBhcyBFSVNBIHNob3VsZCBub3QgYmUgdG9vIGhhcmQgdG8gYWRkICh0aGlzIG1heQorYmUgbW9yZSB0cmlja3kgZm9yIHRoZSBNQ0EgYnVzLCB0aG91Z2gsIGFzIEZPUkUgbWFkZSBzb21lIE1DQS1zcGVjaWZpYworbW9kaWZpY2F0aW9ucyB0byB0aGUgYWRhcHRlcidzIEFBTEkgaW50ZXJmYWNlKS4KKworCitGaXJtd2FyZSBDb3B5cmlnaHQgTm90aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsZWFzZSByZWFkIHRoZSBmb3JlMjAwZV9maXJtd2FyZV9jb3B5cmlnaHQgZmlsZSBwcmVzZW50CitpbiB0aGUgbGludXgvZHJpdmVycy9hdG0gZGlyZWN0b3J5IGZvciBkZXRhaWxzIGFuZCByZXN0cmljdGlvbnMuCisKKworRmlybXdhcmUgVXBkYXRlcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgRk9SRSBTeXN0ZW1zIDIwMEUtc2VyaWVzIGRyaXZlciBpcyBzaGlwcGVkIHdpdGggZmlybXdhcmUgZGF0YSBiZWluZyAKK3VwbG9hZGVkIHRvIHRoZSBBVE0gYWRhcHRlcnMgYXQgc3lzdGVtIGJvb3QgdGltZSBvciBhdCBtb2R1bGUgbG9hZGluZyB0aW1lLiAKK1RoZSBzdXBwbGllZCBmaXJtd2FyZSBpbWFnZXMgc2hvdWxkIHdvcmsgd2l0aCBhbGwgYWRhcHRlcnMuCisKK0hvd2V2ZXIsIGlmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMgKHRoZSBmaXJtd2FyZSBkb2Vzbid0IHN0YXJ0IG9yIHRoZSBkcml2ZXIKK2lzIHVuYWJsZSB0byByZWFkIHRoZSBQUk9NIGRhdGEpLCB5b3UgbWF5IGNvbnNpZGVyIHRyeWluZyBhbm90aGVyIGZpcm13YXJlCit2ZXJzaW9uLiBBbHRlcm5hdGl2ZSBiaW5hcnkgZmlybXdhcmUgaW1hZ2VzIGNhbiBiZSBmb3VuZCBzb21ld2hlcmUgb24gdGhlCitGb3JlVGhvdWdodCBDRC1ST00gc3VwcGxpZWQgd2l0aCB5b3VyIGFkYXB0ZXIgYnkgRk9SRSBTeXN0ZW1zLgorCitZb3UgY2FuIGFsc28gZ2V0IHRoZSBsYXRlc3QgZmlybXdhcmUgaW1hZ2VzIGZyb20gRk9SRSBTeXN0ZW1zIGF0CitodHRwOi8vd3d3LmZvcmUuY29tLiBSZWdpc3RlciBUQUNUaWNzIE9ubGluZSBhbmQgZ28gdG8KK3RoZSAnc29mdHdhcmUgdXBkYXRlcycgcGFnZXMuIFRoZSBmaXJtd2FyZSBiaW5hcmllcyBhcmUgcGFydCBvZgordGhlIHZhcmlvdXMgRm9yZVRob3VnaHQgc29mdHdhcmUgZGlzdHJpYnV0aW9ucy4KKworTm90aWNlIHRoYXQgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBQQ0EtMjAwRSBmaXJtd2FyZSBleGlzdCwgZGVwZW5kaW5nCitvbiB0aGUgZW5kaWFuZXNzIG9mIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gVGhlIGRyaXZlciBpcyBzaGlwcGVkIHdpdGgKK2JvdGggbGl0dGxlIGFuZCBiaWcgZW5kaWFuIFBDQSBmaXJtd2FyZSBpbWFnZXMuCisKK05hbWUgYW5kIGxvY2F0aW9uIG9mIHRoZSBuZXcgZmlybXdhcmUgaW1hZ2VzIGNhbiBiZSBzZXQgYXQga2VybmVsCitjb25maWd1cmF0aW9uIHRpbWU6CisKKzEuIENvcHkgdGhlIG5ldyBmaXJtd2FyZSBiaW5hcnkgZmlsZXMgKHdpdGggLmJpbiwgLmJpbjEgb3IgLmJpbjIgc3VmZml4KQorICAgdG8gc29tZSBkaXJlY3RvcnksIHN1Y2ggYXMgbGludXgvZHJpdmVycy9hdG0uCisKKzIuIFJlY29uZmlndXJlIHlvdXIga2VybmVsIHRvIHNldCB0aGUgbmV3IGZpcm13YXJlIG5hbWUgYW5kIGxvY2F0aW9uLgorICAgRXhwZWN0ZWQgcGF0aG5hbWVzIGFyZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSB0byB0aGUgZHJpdmVycy9hdG0gZGlyZWN0b3J5LgorCiszLiBSZWJ1aWxkIGFuZCByZS1pbnN0YWxsIHlvdXIga2VybmVsIG9yIHlvdXIgbW9kdWxlLgorCisKK0ZlZWRiYWNrCistLS0tLS0tLQorCitGZWVkYmFjayBpcyB3ZWxjb21lLiBQbGVhc2Ugc2VuZCBzdWNjZXNzIHN0b3JpZXMvYnVnIHJlcG9ydHMvCitwYXRjaGVzL2ltcHJvdmVtZW50L2NvbW1lbnRzL2ZsYW1lcyB0byA8bGl6emlAY25hbS5mcj4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZnJhbWVyZWxheS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZnJhbWVyZWxheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwYjcyMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mcmFtZXJlbGF5LnR4dApAQCAtMCwwICsxLDM5IEBACitGcmFtZSBSZWxheSAoRlIpIHN1cHBvcnQgZm9yIGxpbnV4IGlzIGJ1aWx0IGludG8gYSB0d28gdGllcmVkIHN5c3RlbSBvZiBkZXZpY2UgCitkcml2ZXJzLiAgVGhlIHVwcGVyIGxheWVyIGltcGxlbWVudHMgUkZDMTQ5MCBGUiBzcGVjaWZpY2F0aW9uLCBhbmQgdXNlcyB0aGUKK0RhdGEgTGluayBDb25uZWN0aW9uIElkZW50aWZpZXIgKERMQ0kpIGFzIGl0cyBoYXJkd2FyZSBhZGRyZXNzLiAgVXN1YWxseSB0aGVzZQorYXJlIGFzc2lnbmVkIGJ5IHlvdXIgbmV0d29yayBzdXBwbGllciwgdGhleSBnaXZlIHlvdSB0aGUgbnVtYmVyL251bWJlcnMgb2YKK3RoZSBWaXJ0dWFsIENvbm5lY3Rpb25zIChWQykgYXNzaWduZWQgdG8geW91LgorCitFYWNoIERMQ0kgaXMgYSBwb2ludC10by1wb2ludCBsaW5rIGJldHdlZW4geW91ciBtYWNoaW5lIGFuZCBhIHJlbW90ZSBvbmUuCitBcyBzdWNoLCBhIHNlcGFyYXRlIGRldmljZSBpcyBuZWVkZWQgdG8gYWNjb21tb2RhdGUgdGhlIHJvdXRpbmcuICBXaXRoaW4gdGhlCituZXQtdG9vbHMgYXJjaGl2ZXMgaXMgJ2RsY2ljZmcnLiAgVGhpcyBwcm9ncmFtIHdpbGwgY29tbXVuaWNhdGUgd2l0aCB0aGUKK2Jhc2UgIkRMQ0kiIGRldmljZSwgYW5kIGNyZWF0ZSBuZXcgbmV0IGRldmljZXMgbmFtZWQgJ2RsY2kwMCcsICdkbGNpMDEnLi4uIAorVGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHdpbGwgYXNrIHlvdSBob3cgbWFueSBETENJcyB5b3UgbmVlZCwgYXMgd2VsbCBhcworaG93IG1hbnkgRExDSXMgeW91IHdhbnQgdG8gYXNzaWduIHRvIGVhY2ggRnJhbWUgUmVsYXkgQWNjZXNzIERldmljZSAoRlJBRCkuCisKK1RoZSBETENJIHVzZXMgYSBudW1iZXIgb2YgZnVuY3Rpb24gY2FsbHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgRlJBRCwgYWxsCitvZiB3aGljaCBhcmUgc3RvcmVkIGluIHRoZSBGUkFEJ3MgcHJpdmF0ZSBkYXRhIGFyZWEuICBhc3NvYy9kZWFzc29jLCAKK2FjdGl2YXRlL2RlYWN0aXZhdGUgYW5kIGRsY2lfY29uZmlnLiAgVGhlIERMQ0kgc3VwcGxpZXMgYSByZWNlaXZlIGZ1bmN0aW9uCit0byB0aGUgRlJBRCB0byBhY2NlcHQgaW5jb21pbmcgcGFja2V0cy4KKworV2l0aCB0aGlzIGluaXRpYWwgb2ZmZXJpbmcsIG9ubHkgMSBGUkFEIGRyaXZlciBpcyBhdmFpbGFibGUuICBXaXRoIG1hbnkgdGhhbmtzCit0byBTYW5nb21hIFRlY2hub2xvZ2llcywgRGF2aWQgTWFuZGVsc3RhbSAmIEdlbmUgS296aW4sIHRoZSBTNTAyQSwgUzUwMkUgJiAKK1M1MDggYXJlIHN1cHBvcnRlZC4gIFRoaXMgZHJpdmVyIGlzIGN1cnJlbnRseSBzZXQgdXAgZm9yIG9ubHkgRlIsIGJ1dCBhcyAKK1NhbmdvbWEgbWFrZXMgbW9yZSBmaXJtd2FyZSBtb2R1bGVzIGF2YWlsYWJsZSwgaXQgY2FuIGJlIHVwZGF0ZWQgdG8gcHJvdmlkZQordGhlbSBhcyB3ZWxsLgorCitDb25maWd1cmF0aW9uIG9mIHRoZSBGUkFEIG1ha2VzIHVzZSBvZiBhbm90aGVyIG5ldC10b29scyBwcm9ncmFtLCAnZnJhZGNmZycuCitUaGlzIHByb2dyYW0gbWFrZXMgdXNlIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlICh3aGljaCBkbGNpY2ZnIGNhbiBhbHNvIHJlYWQpCit0byBzcGVjaWZ5IHRoZSB0eXBlcyBvZiBib2FyZHMgdG8gYmUgY29uZmlndXJlZCBhcyBGUkFEcywgYXMgd2VsbCBhcyBwZXJmb3JtCithbnkgYm9hcmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gIFRoZSBTYW5nb21hIG1vZHVsZSBvZiBmcmFkY2ZnIGxvYWRzIHRoZQorRlIgZmlybXdhcmUgaW50byB0aGUgY2FyZCwgc2V0cyB0aGUgaXJxL3BvcnQvbWVtb3J5IGluZm9ybWF0aW9uLCBhbmQgcHJvdmlkZXMKK2FuIGluaXRpYWwgY29uZmlndXJhdGlvbi4KKworQWRkaXRpb25hbCBGUkFEIGRldmljZSBkcml2ZXJzIGNhbiBiZSBhZGRlZCBhcyBoYXJkd2FyZSBpcyBhdmFpbGFibGUuCisKK0F0IHRoaXMgdGltZSwgdGhlIGRsY2ljZmcgYW5kIGZyYWRjZmcgcHJvZ3JhbXMgaGF2ZSBub3QgYmVlbiBpbmNvcnBvcmF0ZWQgaW50bwordGhlIG5ldC10b29scyBkaXN0cmlidXRpb24uICBUaGV5IGNhbiBiZSBmb3VuZCBhdCBmdHAuaW52bG9naWMuY29tLCBpbiAKKy9wdWIvbGludXguICBOb3RlIHRoYXQgd2l0aCBPUy8yIEZUUEQsIHlvdSBlbmQgdXAgaW4gL3B1YiBieSBkZWZhdWx0LCBzbyBqdXN0Cit1c2UgJ2NkIGxpbnV4Jy4gIHYwLjEwIGlzIGZvciB1c2Ugb24gcHJlLTIuMC4zIGFuZCBlYXJsaWVyLCB2MC4xNSBpcyBmb3IgCitwcmUtMi4wLjQgYW5kIGxhdGVyLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2VuX3N0YXRzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5fc3RhdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjk3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2VuX3N0YXRzLnR4dApAQCAtMCwwICsxLDExNyBAQAorR2VuZXJpYyBuZXR3b3JraW5nIHN0YXRpc3RpY3MgZm9yIG5ldGxpbmsgdXNlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3RhdGlzdGljIGNvdW50ZXJzIGFyZSBncm91cGVkIGludG8gc3RydWN0czoKKworU3RydWN0ICAgICAgICAgICAgICAgVExWIHR5cGUgICAgICAgICAgICAgIERlc2NyaXB0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnbmV0X3N0YXRzX2Jhc2ljICAgICBUQ0FfU1RBVFNfQkFTSUMgICAgICAgQmFzaWMgc3RhdGlzdGljcworZ25ldF9zdGF0c19yYXRlX2VzdCAgVENBX1NUQVRTX1JBVEVfRVNUICAgIFJhdGUgZXN0aW1hdG9yCitnbmV0X3N0YXRzX3F1ZXVlICAgICBUQ0FfU1RBVFNfUVVFVUUgICAgICAgUXVldWUgc3RhdGlzdGljcworbm9uZSAgICAgICAgICAgICAgICAgVENBX1NUQVRTX0FQUCAgICAgICAgIEFwcGxpY2F0aW9uIHNwZWNpZmljCisKKworQ29sbGVjdGluZzoKKy0tLS0tLS0tLS0tCisKK0RlY2xhcmUgdGhlIHN0YXRpc3RpYyBzdHJ1Y3RzIHlvdSBuZWVkOgorc3RydWN0IG15c3RydWN0IHsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYwlic3RhdHM7CisJc3RydWN0IGduZXRfc3RhdHNfcXVldWUJcXN0YXRzOworCS4uLgorfTsKKworVXBkYXRlIHN0YXRpc3RpY3M6CitteXN0cnVjdC0+dHN0YXRzLnBhY2tldCsrOworbXlzdHJ1Y3QtPnFzdGF0cy5iYWNrbG9nICs9IHNrYi0+cGt0X2xlbjsKKworCitFeHBvcnQgdG8gdXNlcnNwYWNlIChEdW1wKToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitteV9kdW1waW5nX3JvdXRpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgLi4uKQoreworCXN0cnVjdCBnbmV0X2R1bXAgZHVtcDsKKworCWlmIChnbmV0X3N0YXRzX3N0YXJ0X2NvcHkoc2tiLCBUQ0FfU1RBVFMyLCAmbXlzdHJ1Y3QtPmxvY2ssICZkdW1wKSA8IDApCisJCWdvdG8gcnRhdHRyX2ZhaWx1cmU7CisKKwlpZiAoZ25ldF9zdGF0c19jb3B5X2Jhc2ljKCZkdW1wLCAmbXlzdHJ1Y3QtPmJzdGF0cykgPCAwIHx8CisJICAgIGduZXRfc3RhdHNfY29weV9xdWV1ZSgmZHVtcCwgJm15c3RydWN0LT5xc3RhdHMpIDwgMCB8fAorCQlnbmV0X3N0YXRzX2NvcHlfYXBwKCZkdW1wLCAmeHN0YXRzLCBzaXplb2YoeHN0YXRzKSkgPCAwKQorCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOworCisJaWYgKGduZXRfc3RhdHNfZmluaXNoX2NvcHkoJmR1bXApIDwgMCkKKwkJZ290byBydGF0dHJfZmFpbHVyZTsKKwkuLi4KK30KKworVENBX1NUQVRTL1RDQV9YU1RBVFMgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ByaW9yIHVzZXJzIG9mIHN0cnVjdCB0Y19zdGF0cyBhbmQgeHN0YXRzIGNhbiBtYWludGFpbiBiYWNrd2FyZAorY29tcGF0aWJpbGl0eSBieSBjYWxsaW5nIHRoZSBjb21wYXQgd3JhcHBlcnMgdG8ga2VlcCBwcm92aWRpbmcgdGhlCitleGlzdGluZyBUTFYgdHlwZXMuCisKK215X2R1bXBpbmdfcm91dGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAuLi4pCit7CisgICAgaWYgKGduZXRfc3RhdHNfc3RhcnRfY29weV9jb21wYXQoc2tiLCBUQ0FfU1RBVFMyLCBUQ0FfU1RBVFMsCisJCVRDQV9YU1RBVFMsICZteXN0cnVjdC0+bG9jaywgJmR1bXApIDwgMCkKKwkJZ290byBydGF0dHJfZmFpbHVyZTsKKwkuLi4KK30KKworQSBzdHJ1Y3QgdGNfc3RhdHMgd2lsbCBiZSBmaWxsZWQgb3V0IGR1cmluZyBnbmV0X3N0YXRzX2NvcHlfKiBjYWxscworYW5kIGFwcGVuZGVkIHRvIHRoZSBza2IuIFRDQV9YU1RBVFMgaXMgcHJvdmlkZWQgaWYgZ25ldF9zdGF0c19jb3B5X2FwcAord2FzIGNhbGxlZC4KKworCitMb2NraW5nOgorLS0tLS0tLS0KKworTG9ja3MgYXJlIHRha2VuIGJlZm9yZSB3cml0aW5nIGFuZCByZWxlYXNlZCBvbmNlIGFsbCBzdGF0aXN0aWNzIGhhdmUKK2JlZW4gd3JpdHRlbi4gTG9ja3MgYXJlIGFsd2F5cyByZWxlYXNlZCBpbiBjYXNlIG9mIGFuIGVycm9yLiBZb3UKK2FyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhhdCB0aGUgbG9jayBpcyBpbml0aWFsaXplZC4KKworCitSYXRlIEVzdGltYXRvcjoKKy0tLS0tLS0tLS0tLS0tCisKKzApIFByZXBhcmUgYW4gZXN0aW1hdG9yIGF0dHJpYnV0ZS4gTW9zdCBsaWtlbHkgdGhpcyB3b3VsZCBiZSBpbiB1c2VyCisgICBzcGFjZS4gVGhlIHZhbHVlIG9mIHRoaXMgVExWIHNob3VsZCBjb250YWluIGEgdGNfZXN0aW1hdG9yIHN0cnVjdHVyZS4KKyAgIEFzIHVzdWFsLCBzdWNoIGEgVExWIG5lZXMgdG8gYmUgMzIgYml0IGFsaWduZWQgYW5kIHRoZXJlZm9yZSB0aGUKKyAgIGxlbmd0aCBuZWVkcyB0byBiZSBhcHByb3ByaWF0ZWx5IHNldCBldGMuIFRoZSBlc3RpbWF0b3IgaW50ZXJ2YWwKKyAgIGFuZCBld21hIGxvZyBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgorICAgdGNfZXN0aW1hdG9yLmM6OnRjX3NldHVwX2VzdGltYXRvcigpIGlzIGFkdmlzYWJsZSB0byBiZSB1c2VkIGFzIHRoZQorICAgY29udmVyc2lvbiByb3V0aW5lLiBJdCBkb2VzIGEgZmV3IGNsZXZlciB0aGluZ3MuIEl0IHRha2VzIGEgdGltZQorICAgaW50ZXJ2YWwgaW4gbWljcm9zZWNzLCBhIHRpbWUgY29uc3RhbnQgYWxzbyBpbiBtaWNyb3NlY3MgYW5kIGEgc3RydWN0CisgICB0Y19lc3RpbWF0b3IgdG8gIGJlIHBvcHVsYXRlZC4gVGhlIHJldHVybmVkIHRjX2VzdGltYXRvciBjYW4gYmUKKyAgIHRyYW5zcG9ydGVkIHRvIHRoZSBrZXJuZWwuICBUcmFuc2ZlciBzdWNoIGEgc3RydWN0dXJlIGluIGEgVExWIG9mIHR5cGUKKyAgIFRDQV9SQVRFIHRvIHlvdXIgY29kZSBpbiB0aGUga2VybmVsLgorCitJbiB0aGUga2VybmVsIHdoZW4gc2V0dGluZyB1cDoKKzEpIG1ha2Ugc3VyZSB5b3UgaGF2ZSBiYXNpYyBzdGF0cyBhbmQgcmF0ZSBzdGF0cyBzZXR1cCBmaXJzdC4KKzIpIG1ha2Ugc3VyZSB5b3UgaGF2ZSBpbml0aWFsaXplZCBzdGF0cyBsb2NrIHRoYXQgaXMgdXNlZCB0byBzZXR1cCBzdWNoCisgICBzdGF0cy4KKzMpIE5vdyBpbml0aWFsaXplIGEgbmV3IGVzdGltYXRvcjoKKworICAgaW50IHJldCA9IGdlbl9uZXdfZXN0aW1hdG9yKG15X2Jhc2ljc3RhdHMsbXlfcmF0ZV9lc3Rfc3RhdHMsCisgICAgICAgbXlzdGF0c19sb2NrLCBhdHRyX3dpdGhfdGNlc3RpbWF0b3Jfc3RydWN0KTsKKworICAgaWYgcmV0ID09IDAKKyAgICAgICBzdWNjZXNzCisgICBlbHNlCisgICAgICAgZmFpbGVkCisKK0Zyb20gbm93IG9uLCBldmVyeXRpbWUgeW91IGR1bXAgbXlfcmF0ZV9lc3Rfc3RhdHMgaXQgd2lsbCBjb250YWluCit1cHRvZGF0ZSBpbmZvLgorCitPbmNlIHlvdSBhcmUgZG9uZSwgY2FsbCBnZW5fa2lsbF9lc3RpbWF0b3IobXlfYmFzaWNzdGF0cywKK215X3JhdGVfZXN0X3N0YXRzKSBNYWtlIHN1cmUgdGhhdCBteV9iYXNpY3N0YXRzIGFuZCBteV9yYXRlX2VzdF9zdGF0cworYXJlIHN0aWxsIHZhbGlkIChpLmUgc3RpbGwgZXhpc3QpIGF0IHRoZSB0aW1lIG9mIG1ha2luZyB0aGlzIGNhbGwuCisKKworQXV0aG9yczoKKy0tLS0tLS0tCitUaG9tYXMgR3JhZiA8dGdyYWZAc3V1Zy5jaD4KK0phbWFsIEhhZGkgU2FsaW0gPGhhZGlAY3liZXJ1cy5jYT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5lcmljLWhkbGMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbmVyaWMtaGRsYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxZGM2YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5lcmljLWhkbGMudHh0CkBAIC0wLDAgKzEsMTMxIEBACitHZW5lcmljIEhETEMgbGF5ZXIKK0tyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+CitKYW51YXJ5LCAyMDAzCisKKworR2VuZXJpYyBIRExDIGxheWVyIGN1cnJlbnRseSBzdXBwb3J0czoKKy0gRnJhbWUgUmVsYXkgKEFOU0ksIENDSVRUIGFuZCBubyBMTUkpLCB3aXRoIEFSUCBzdXBwb3J0IChubyBJbkFSUCkuCisgIE5vcm1hbCAocm91dGVkKSBhbmQgRXRoZXJuZXQtYnJpZGdlZCAoRXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvbikKKyAgaW50ZXJmYWNlcyBjYW4gc2hhcmUgYSBzaW5nbGUgUFZDLgorLSByYXcgSERMQyAtIGVpdGhlciBJUCAoSVB2NCkgaW50ZXJmYWNlIG9yIEV0aGVybmV0IGRldmljZSBlbXVsYXRpb24uCistIENpc2NvIEhETEMsCistIFBQUCAodXNlcyBzeW5jcHBwLmMpLAorLSBYLjI1ICh1c2VzIFguMjUgcm91dGluZXMpLgorCitUaGVyZSBhcmUgaGFyZHdhcmUgZHJpdmVycyBmb3IgdGhlIGZvbGxvd2luZyBjYXJkczoKKy0gQzEwMSBieSBNb3hhIFRlY2hub2xvZ2llcyBDby4sIEx0ZC4KKy0gUklTQ29tL04yIGJ5IFNETCBDb21tdW5pY2F0aW9ucyBJbmMuCistIGFuZCBvdGhlcnMsIHNvbWUgbm90IGluIHRoZSBvZmZpY2lhbCBrZXJuZWwuCisKK0V0aGVybmV0IGRldmljZSBlbXVsYXRpb24gKHVzaW5nIEhETEMgb3IgRnJhbWUtUmVsYXkgUFZDKSBpcyBjb21wYXRpYmxlCit3aXRoIElFRUUgODAyLjFRIChWTEFOcykgYW5kIDgwMi4xRCAoRXRoZXJuZXQgYnJpZGdpbmcpLgorCisKK01ha2Ugc3VyZSB0aGUgaGRsYy5vIGFuZCB0aGUgaGFyZHdhcmUgZHJpdmVyIGFyZSBsb2FkZWQuIEl0IHNob3VsZAorY3JlYXRlIGEgbnVtYmVyIG9mICJoZGxjIiAoaGRsYzAgZXRjKSBuZXR3b3JrIGRldmljZXMsIG9uZSBmb3IgZWFjaAorV0FOIHBvcnQuIFlvdSdsbCBuZWVkIHRoZSAic2V0aGRsYyIgdXRpbGl0eSwgZ2V0IGl0IGZyb206CisJaHR0cDovL2hxLnBtLndhdy5wbC9oZGxjLworCitDb21waWxlIHNldGhkbGMuYyB1dGlsaXR5OgorCWdjYyAtTzIgLVdhbGwgLW8gc2V0aGRsYyBzZXRoZGxjLmMKK01ha2Ugc3VyZSB5b3UncmUgdXNpbmcgYSBjb3JyZWN0IHZlcnNpb24gb2Ygc2V0aGRsYyBmb3IgeW91ciBrZXJuZWwuCisKK1VzZSBzZXRoZGxjIHRvIHNldCBwaHlzaWNhbCBpbnRlcmZhY2UsIGNsb2NrIHJhdGUsIEhETEMgbW9kZSB1c2VkLAorYW5kIGFkZCBhbnkgcmVxdWlyZWQgUFZDcyBpZiB1c2luZyBGcmFtZSBSZWxheS4KK1VzdWFsbHkgeW91IHdhbnQgc29tZXRoaW5nIGxpa2U6CisKKwlzZXRoZGxjIGhkbGMwIGNsb2NrIGludCByYXRlIDEyODAwMAorCXNldGhkbGMgaGRsYzAgY2lzY28gaW50ZXJ2YWwgMTAgdGltZW91dCAyNQorb3IKKwlzZXRoZGxjIGhkbGMwIHJzMjMyIGNsb2NrIGV4dAorCXNldGhkbGMgaGRsYzAgZnIgbG1pIGFuc2kKKwlzZXRoZGxjIGhkbGMwIGNyZWF0ZSA5OQorCWlmY29uZmlnIGhkbGMwIHVwCisJaWZjb25maWcgcHZjMCBsb2NhbElQIHBvaW50b3BvaW50IHJlbW90ZUlQCisKK0luIEZyYW1lIFJlbGF5IG1vZGUsIGlmY29uZmlnIG1hc3RlciBoZGxjIGRldmljZSB1cCAod2l0aG91dCBhc3NpZ25pbmcKK2FueSBJUCBhZGRyZXNzIHRvIGl0KSBiZWZvcmUgdXNpbmcgcHZjIGRldmljZXMuCisKKworU2V0dGluZyBpbnRlcmZhY2U6CisKKyogdjM1IHwgcnMyMzIgfCB4MjEgfCB0MSB8IGUxIC0gc2V0cyBwaHlzaWNhbCBpbnRlcmZhY2UgZm9yIGEgZ2l2ZW4gcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgY2FyZCBoYXMgc29mdHdhcmUtc2VsZWN0YWJsZSBpbnRlcmZhY2VzCisgIGxvb3BiYWNrIC0gYWN0aXZhdGUgaGFyZHdhcmUgbG9vcGJhY2sgKGZvciB0ZXN0aW5nIG9ubHkpCisqIGNsb2NrIGV4dCAtIGV4dGVybmFsIGNsb2NrICh1c2VzIERURSBSWCBhbmQgVFggY2xvY2spCisqIGNsb2NrIGludCAtIGludGVybmFsIGNsb2NrIChwcm92aWRlcyBjbG9jayBzaWduYWwgb24gRENFIGNsb2NrIG91dHB1dCkKKyogY2xvY2sgdHhpbnQgLSBUWCBpbnRlcm5hbCwgUlggZXh0ZXJuYWwgKHByb3ZpZGVzIFRYIGNsb2NrIG9uIERDRSBvdXRwdXQpCisqIGNsb2NrIHR4ZnJvbXJ4IC0gVFggY2xvY2sgZGVyaXZlZCBmcm9tIFJYIGNsb2NrIChUWCBjbG9jayBvbiBEQ0Ugb3V0cHV0KQorKiByYXRlIC0gc2V0cyBjbG9jayByYXRlIGluIGJwcyAobm90IHJlcXVpcmVkIGZvciBleHRlcm5hbCBjbG9jayBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHR4ZnJvbXJ4KQorCitTZXR0aW5nIHByb3RvY29sOgorCisqIGhkbGMgLSBzZXRzIHJhdyBIRExDIChJUC1vbmx5KSBtb2RlCisgIG5yeiAvIG5yemkgLyBmbS1tYXJrIC8gZm0tc3BhY2UgLyBtYW5jaGVzdGVyIC0gc2V0cyB0cmFuc21pc3Npb24gY29kZQorICBuby1wYXJpdHkgLyBjcmMxNiAvIGNyYzE2LXByMCAoQ1JDMTYgd2l0aCBwcmVzZXQgemVyb3MpIC8gY3JjMzItaXR1CisgIGNyYzE2LWl0dSAoQ1JDMTYgd2l0aCBJVFUtVCBwb2x5bm9taWFsKSAvIGNyYzE2LWl0dS1wcjAgLSBzZXRzIHBhcml0eQorCisqIGhkbGMtZXRoIC0gRXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvbiB1c2luZyBIRExDLiBQYXJpdHkgYW5kIGVuY29kaW5nCisgIGFzIGFib3ZlLgorCisqIGNpc2NvIC0gc2V0cyBDaXNjbyBIRExDIG1vZGUgKElQLCBJUHY2IGFuZCBJUFggc3VwcG9ydGVkKQorICBpbnRlcnZhbCAtIHRpbWUgaW4gc2Vjb25kcyBiZXR3ZWVuIGtlZXBhbGl2ZSBwYWNrZXRzCisgIHRpbWVvdXQgLSB0aW1lIGluIHNlY29uZHMgYWZ0ZXIgbGFzdCByZWNlaXZlZCBrZWVwYWxpdmUgcGFja2V0IGJlZm9yZQorICAgICAgICAgICAgd2UgYXNzdW1lIHRoZSBsaW5rIGlzIGRvd24KKworKiBwcHAgLSBzZXRzIHN5bmNocm9ub3VzIFBQUCBtb2RlCisKKyogeDI1IC0gc2V0cyBYLjI1IG1vZGUKKworKiBmciAtIEZyYW1lIFJlbGF5IG1vZGUKKyAgbG1pIGFuc2kgLyBjY2l0dCAvIG5vbmUgLSBMTUkgKGxpbmsgbWFuYWdlbWVudCkgdHlwZQorICBkY2UgLSBGcmFtZSBSZWxheSBEQ0UgKG5ldHdvcmspIHNpZGUgTE1JIGluc3RlYWQgb2YgZGVmYXVsdCBEVEUgKHVzZXIpLgorICBJdCBoYXMgbm90aGluZyB0byBkbyB3aXRoIGNsb2NrcyEKKyAgdDM5MSAtIGxpbmsgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiBwb2xsaW5nIHRpbWVyIChpbiBzZWNvbmRzKSAtIHVzZXIKKyAgdDM5MiAtIHBvbGxpbmcgdmVyaWZpY2F0aW9uIHRpbWVyIChpbiBzZWNvbmRzKSAtIG5ldHdvcmsKKyAgbjM5MSAtIGZ1bGwgc3RhdHVzIHBvbGxpbmcgY291bnRlciAtIHVzZXIKKyAgbjM5MiAtIGVycm9yIHRocmVzaG9sZCAtIGJvdGggdXNlciBhbmQgbmV0d29yaworICBuMzkzIC0gbW9uaXRvcmVkIGV2ZW50cyBjb3VudCAtIGJvdGggdXNlciBhbmQgbmV0d29yaworCitGcmFtZS1SZWxheSBvbmx5OgorKiBjcmVhdGUgbiB8IGRlbGV0ZSBuIC0gYWRkcyAvIGRlbGV0ZXMgUFZDIGludGVyZmFjZSB3aXRoIERMQ0kgI24uCisgIE5ld2x5IGNyZWF0ZWQgaW50ZXJmYWNlIHdpbGwgYmUgbmFtZWQgcHZjMCwgcHZjMSBldGMuCisKKyogY3JlYXRlIGV0aGVyIG4gfCBkZWxldGUgZXRoZXIgbiAtIGFkZHMgYSBkZXZpY2UgZm9yIEV0aGVybmV0LWJyaWRnZWQKKyAgZnJhbWVzLiBUaGUgZGV2aWNlIHdpbGwgYmUgbmFtZWQgcHZjZXRoMCwgcHZjZXRoMSBldGMuCisKKworCisKK0JvYXJkLXNwZWNpZmljIGlzc3VlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK24yLm8gYW5kIGMxMDEubyBuZWVkIHBhcmFtZXRlcnMgdG8gd29yazoKKworCWluc21vZCBuMiBodz1pbyxpcnEscmFtLHBvcnRzWzppbyxpcnEsLi4uXQorZXhhbXBsZToKKwlpbnNtb2QgbjIgaHc9MHgzMDAsMTAsMHhEMDAwMCwwMQorCitvcgorCWluc21vZCBjMTAxIGh3PWlycSxyYW1bOmlycSwuLi5dCitleGFtcGxlOgorCWluc21vZCBjMTAxIGh3PTksMHhkYzAwMAorCitJZiBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHRoZXNlIGRyaXZlcnMgbmVlZCBrZXJuZWwgKGNvbW1hbmQgbGluZSkgcGFyYW1ldGVyczoKKwluMi5odz1pbyxpcnEscmFtLHBvcnRzOi4uLgorb3IKKwljMTAxLmh3PWlycSxyYW06Li4uCisKKworCitJZiB5b3UgaGF2ZSBhIHByb2JsZW0gd2l0aCBOMiBvciBDMTAxIGNhcmQsIHlvdSBjYW4gaXNzdWUgdGhlICJwcml2YXRlIgorY29tbWFuZCB0byBzZWUgcG9ydCdzIHBhY2tldCBkZXNjcmlwdG9yIHJpbmdzIChpbiBrZXJuZWwgbG9ncyk6CisKKwlzZXRoZGxjIGhkbGMwIHByaXZhdGUKKworVGhlIGhhcmR3YXJlIGRyaXZlciBoYXMgdG8gYmUgYnVpbGQgd2l0aCBDT05GSUdfSERMQ19ERUJVR19SSU5HUy4KK0F0dGFjaGluZyB0aGlzIGluZm8gdG8gYnVnIHJlcG9ydHMgd291bGQgYmUgaGVscGZ1bC4gQW55d2F5LCBsZXQgbWUga25vdworaWYgeW91IGhhdmUgcHJvYmxlbXMgdXNpbmcgdGhpcy4KKworRm9yIHBhdGNoZXMgYW5kIG90aGVyIGluZm8gbG9vayBhdCBodHRwOi8vaHEucG0ud2F3LnBsL2hkbGMvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWZlbnNsYXZlLmMgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWZlbnNsYXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNWQyMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZmVuc2xhdmUuYwpAQCAtMCwwICsxLDExMTAgQEAKKy8qIE1vZGU6IEM7CisgKiBpZmVuc2xhdmUuYzogQ29uZmlndXJlIG5ldHdvcmsgaW50ZXJmYWNlcyBmb3IgcGFyYWxsZWwgcm91dGluZy4KKyAqCisgKglUaGlzIHByb2dyYW0gY29udHJvbHMgdGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHJ1bm5pbmcgbXVsdGlwbGUKKyAqCW5ldHdvcmsgaW50ZXJmYWNlcyBpbiBwYXJhbGxlbC4KKyAqCisgKiBBdXRob3I6CURvbmFsZCBCZWNrZXIgPGJlY2tlckBjZXNkaXMuZ3NmYy5uYXNhLmdvdj4KKyAqCQlDb3B5cmlnaHQgMTk5NC0xOTk2IERvbmFsZCBCZWNrZXIKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CisgKgkJYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICoJCUxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoJVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCBhcyBiZWNrZXJAQ0VTRElTLmdzZmMubmFzYS5nb3YsIG9yIEMvTworICoJQ2VudGVyIG9mIEV4Y2VsbGVuY2UgaW4gU3BhY2UgRGF0YSBhbmQgSW5mb3JtYXRpb24gU2NpZW5jZXMKKyAqCSAgIENvZGUgOTMwLjUsIEdvZGRhcmQgU3BhY2UgRmxpZ2h0IENlbnRlciwgR3JlZW5iZWx0IE1EIDIwNzcxCisgKgorICogIENoYW5nZXMgOgorICogICAgLSAyMDAwLzEwLzAyIFdpbGx5IFRhcnJlYXUgPHdpbGx5IGF0IG1ldGEteC5vcmc+IDoKKyAqICAgICAgIC0gZmV3IGZpeGVzLiBNYXN0ZXIncyBNQUMgYWRkcmVzcyBpcyBub3cgY29ycmVjdGx5IHRha2VuIGZyb20KKyAqICAgICAgICAgdGhlIGZpcnN0IGRldmljZSB3aGVuIG5vdCBwcmV2aW91c2x5IHNldCA7CisgKiAgICAgICAtIGRldGFjaCBzdXBwb3J0IDogY2FsbCBCT05EX1JFTEVBU0UgdG8gZGV0YWNoIGFuIGVuc2xhdmVkIGludGVyZmFjZS4KKyAqICAgICAgIC0gZ2l2ZSBhIG1pbmktaG93dG8gZnJvbSBjb21tYW5kLWxpbmUgaGVscCA6ICMgaWZlbnNsYXZlIC1oCisgKgorICogICAgLSAyMDAxLzAyLzE2IENoYWQgTi4gVGluZGVsIDxjdGluZGVsIGF0IGllZWUgZG90IG9yZz4gOgorICogICAgICAgLSBNYXN0ZXIgaXMgbm93IGJyb3VnaHQgZG93biBiZWZvcmUgc2V0dGluZyB0aGUgTUFDIGFkZHJlc3MuICBJbgorICogICAgICAgICB0aGUgMi40IGtlcm5lbCB5b3UgY2FuJ3QgY2hhbmdlIHRoZSBNQUMgYWRkcmVzcyB3aGlsZSB0aGUgZGV2aWNlIGlzCisgKiAgICAgICAgIHVwIGJlY2F1c2UgeW91IGdldCBFQlVTWS4KKyAqCisgKiAgICAtIDIwMDEvMDkvMTMgVGFrYW8gSW5kb2ggPGluZG91IGRvdCB0YWthbyBhdCBqcCBkb3QgZnVqaXRzdSBkb3QgY29tPgorICogICAgICAgLSBBZGRlZCB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIGFjdGl2ZSBpbnRlcmZhY2Ugb24gYSBtb2RlIDEgYm9uZAorICogICAgICAgICBhdCBydW50aW1lLgorICoKKyAqICAgIC0gMjAwMS8xMC8yMyBDaGFkIE4uIFRpbmRlbCA8Y3RpbmRlbCBhdCBpZWVlIGRvdCBvcmc+IDoKKyAqICAgICAgIC0gTm8gbG9uZ2VyIHNldCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG1hc3Rlci4gIFRoZSBib25kIGRldmljZSB3aWxsCisgKiAgICAgICAgIHRha2UgY2FyZSBvZiB0aGlzIGl0c2VsZgorICogICAgICAgLSBUcnkgdGhlIFNJT0MqKiogdmVyc2lvbnMgb2YgdGhlIGJvbmRpbmcgaW9jdGxzIGJlZm9yZSB1c2luZyB0aGUKKyAqICAgICAgICAgb2xkIHZlcnNpb25zCisgKiAgICAtIDIwMDIvMDIvMTggRXJpayBIYWJiaW5nYSA8ZXJpa19oYWJiaW5nYSBAIGhwIGRvdCBjb20+IDoKKyAqICAgICAgIC0gaWZyMi5pZnJfZmxhZ3Mgd2FzIG5vdCBpbml0aWFsaXplZCBpbiB0aGUgaHdhZGRyX25vdHNldCBjYXNlLAorICogICAgICAgICBTSU9DR0lGRkxBR1Mgbm93IGNhbGxlZCBiZWZvcmUgaHdhZGRyX25vdHNldCB0ZXN0CisgKgorICogICAgLSAyMDAyLzEwLzMxIFRvbnkgQ3VyZWluZ3RvbiA8dG9ueS5jdXJlaW5ndG9uICogaHBfY29tPiA6CisgKiAgICAgICAtIElmIHRoZSBtYXN0ZXIgZG9lcyBub3QgaGF2ZSBhIGhhcmR3YXJlIGFkZHJlc3Mgd2hlbiB0aGUgZmlyc3Qgc2xhdmUKKyAqICAgICAgICAgaXMgZW5zbGF2ZWQsIHRoZSBtYXN0ZXIgaXMgYXNzaWduZWQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb2YgdGhhdAorICogICAgICAgICBzbGF2ZSAtIHRoZXJlIGlzIGEgY29tbWVudCBpbiBib25kaW5nLmMgc3RhdGluZyAiaWZlbnNsYXZlIHRha2VzCisgKiAgICAgICAgIGNhcmUgb2YgdGhpcyBub3cuIiBUaGlzIGNvcnJlY3RzIHRoZSBwcm9ibGVtIG9mIHNsYXZlcyBoYXZpbmcKKyAqICAgICAgICAgZGlmZmVyZW50IGhhcmR3YXJlIGFkZHJlc3NlcyBpbiBhY3RpdmUtYmFja3VwIG1vZGUgd2hlbgorICogICAgICAgICBtdWx0aXBsZSBpbnRlcmZhY2VzIGFyZSBzcGVjaWZpZWQgb24gYSBzaW5nbGUgaWZlbnNsYXZlIGNvbW1hbmQKKyAqICAgICAgICAgKGlmZW5zbGF2ZSBib25kMCBldGgwIGV0aDEpLgorICoKKyAqICAgIC0gMjAwMy8wMy8xOCAtIFRzaXBweSBNZW5kZWxzb24gPHRzaXBweS5tZW5kZWxzb24gYXQgaW50ZWwgZG90IGNvbT4gYW5kCisgKiAgICAgICAgICAgICAgICAgICBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KKyAqICAgICAgIC0gTW92ZWQgc2V0dGluZyB0aGUgc2xhdmUncyBtYWMgYWRkcmVzcyBhbmQgb3Blbm5pbmcgaXQsIGZyb20KKyAqICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIHRoZSBkcml2ZXIuIFRoaXMgZW5hYmxlcyBzdXBwb3J0IG9mIG1vZGVzCisgKiAgICAgICAgIHRoYXQgbmVlZCB0byB1c2UgdGhlIHVuaXF1ZSBtYWMgYWRkcmVzcyBvZiBlYWNoIHNsYXZlLgorICogICAgICAgICBUaGUgZHJpdmVyIGFsc28gdGFrZXMgY2FyZSBvZiBjbG9zaW5nIHRoZSBzbGF2ZSBhbmQgcmVzdG9yaW5nIGl0cworICogICAgICAgICBvcmlnaW5hbCBtYWMgYWRkcmVzcyB1cG9uIHJlbGVhc2UuCisgKiAgICAgICAgIEluIGFkZGl0aW9uLCBibG9jayBwb3NzaWJpbGl0eSBvZiBlbnNsYXZpbmcgYmVmb3JlIHRoZSBtYXN0ZXIgaXMgdXAuCisgKiAgICAgICAgIFRoaXMgcHJldmVudHMgcHV0dGluZyB0aGUgc3lzdGVtIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KKyAqCisgKiAgICAtIDIwMDMvMDUvMDEgLSBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgorICogICAgICAgLSBBZGRlZCBBQkkgdmVyc2lvbiBjb250cm9sIHRvIHJlc3RvcmUgY29tcGF0aWJpbGl0eSBiZXR3ZWVuCisgKiAgICAgICAgIG5ldy9vbGQgaWZlbnNsYXZlIGFuZCBuZXcvb2xkIGJvbmRpbmcuCisgKiAgICAgICAtIFByZXZlbnQgYWRkaW5nIGFuIGFkYXB0ZXIgdGhhdCBpcyBhbHJlYWR5IGEgc2xhdmUuCisgKiAgICAgICAgIEZpeGVzIHRoZSBwcm9ibGVtIG9mIHN0YWxsaW5nIHRoZSB0cmFuc21pc3Npb24gYW5kIGxlYXZpbmcKKyAqICAgICAgICAgdGhlIHNsYXZlIGluIGEgZG93biBzdGF0ZS4KKyAqCisgKiAgICAtIDIwMDMvMDUvMDEgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KKyAqICAgICAgIC0gUHJldmVudCBlbnNsYXZpbmcgaWYgdGhlIGJvbmQgZGV2aWNlIGlzIGRvd24uCisgKiAgICAgICAgIEZpeGVzIHRoZSBwcm9ibGVtIG9mIGxlYXZpbmcgdGhlIHN5c3RlbSBpbiB1bnN0YWJsZSBzdGF0ZSBhbmQKKyAqICAgICAgICAgaGFsdGluZyB3aGVuIHRyeWluZyB0byByZW1vdmUgdGhlIG1vZHVsZS4KKyAqICAgICAgIC0gQ2xvc2Ugc29ja2V0IG9uIGFsbCBhYm5vcm1hbCBleGlzdHMuCisgKiAgICAgICAtIEFkZCB2ZXJzaW9uaW5nIHNjaGVtZSB0aGF0IGZvbGxvd3MgdGhhdCBvZiB0aGUgYm9uZGluZyBkcml2ZXIuCisgKiAgICAgICAgIGN1cnJlbnQgdmVyc2lvbiBpcyAxLjAuMCBhcyBhIGJhc2UgbGluZS4KKyAqCisgKiAgICAtIDIwMDMvMDUvMjIgLSBKYXkgVm9zYnVyZ2ggPGZ1YmFyIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KKyAqCSAtIGlmZW5zbGF2ZSAtYyB3YXMgYnJva2VuOyBpdCdzIG5vdyBmaXhlZAorICoJIC0gRml4ZWQgcHJvYmxlbSB3aXRoIHJvdXRlcyB2YW5pc2hpbmcgZnJvbSBtYXN0ZXIgZHVyaW5nIGVuc2xhdmUKKyAqCSAgIHByb2Nlc3NpbmcuCisgKgorICogICAgLSAyMDAzLzA1LzI3IC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KKyAqCSAtIEZpeCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlczoKKyAqCSAgIEZvciBkcml2ZXJzIG5vdCB1c2luZyBBQkkgdmVyc2lvbnMsIHNsYXZlIHdhcyBzZXQgZG93biB3aGlsZQorICoJICAgaXQgc2hvdWxkIGJlIGxlZnQgdXAgYmVmb3JlIGVuc2xhdmluZy4KKyAqCSAgIEFsc28sIG1hc3RlciB3YXMgbm90IHNldCBkb3duIGFuZCB0aGUgZGVmYXVsdCBzZXRfbWFjX2FkZHJlc3MoKQorICoJICAgd291bGQgZmFpbCBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZSBpbiB0aGUgc3lzdGVtIGxvZy4KKyAqIAkgLSBGb3Igb3B0X2M6IHNsYXZlIHNob3VsZCBub3QgYmUgc2V0IHRvIHRoZSBtYXN0ZXIncyBzZXR0aW5nCisgKgkgICB3aGlsZSBpdCBpcyBydW5uaW5nLiBJdCB3YXMgYWxyZWFkeSBzZXQgZHVyaW5nIGVuc2xhdmUuIFRvCisgKgkgICBzaW1wbGlmeSB0aGluZ3MsIGl0IGlzIG5vdyBoYW5kZWxlZCBzZXBhcmF0ZWx5LgorICoKKyAqICAgIC0gMjAwMy8xMi8wMSAtIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgorICoJIC0gQ29kZSBjbGVhbnVwIGFuZCBzdHlsZSBjaGFuZ2VzCisgKgkgICBzZXQgdmVyc2lvbiB0byAxLjEuMAorICovCisKKyNkZWZpbmUgQVBQX1ZFUlNJT04JIjEuMS4wIgorI2RlZmluZSBBUFBfUkVMREFURQkiRGVjZW1iZXIgMSwgMjAwMyIKKyNkZWZpbmUgQVBQX05BTUUJImlmZW5zbGF2ZSIKKworc3RhdGljIGNoYXIgKnZlcnNpb24gPQorQVBQX05BTUUgIi5jOnYiIEFQUF9WRVJTSU9OICIgKCIgQVBQX1JFTERBVEUgIilcbiIKKyJvIERvbmFsZCBCZWNrZXIgKGJlY2tlckBjZXNkaXMuZ3NmYy5uYXNhLmdvdikuXG4iCisibyBEZXRhY2ggc3VwcG9ydCBhZGRlZCBvbiAyMDAwLzEwLzAyIGJ5IFdpbGx5IFRhcnJlYXUgKHdpbGx5IGF0IG1ldGEteC5vcmcpLlxuIgorIm8gMi40IGtlcm5lbCBzdXBwb3J0IGFkZGVkIG9uIDIwMDEvMDIvMTYgYnkgQ2hhZCBOLiBUaW5kZWxcbiIKKyIgIChjdGluZGVsIGF0IGllZWUgZG90IG9yZykuXG4iOworCitzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2VfbXNnID0KKyJVc2FnZTogaWZlbnNsYXZlIFstZl0gPG1hc3Rlci1pZj4gPHNsYXZlLWlmPiBbPHNsYXZlLWlmPi4uLl1cbiIKKyIgICAgICAgaWZlbnNsYXZlIC1kICAgPG1hc3Rlci1pZj4gPHNsYXZlLWlmPiBbPHNsYXZlLWlmPi4uLl1cbiIKKyIgICAgICAgaWZlbnNsYXZlIC1jICAgPG1hc3Rlci1pZj4gPHNsYXZlLWlmPlxuIgorIiAgICAgICBpZmVuc2xhdmUgLS1oZWxwXG4iOworCitzdGF0aWMgY29uc3QgY2hhciAqaGVscF9tc2cgPQorIlxuIgorIiAgICAgICBUbyBjcmVhdGUgYSBib25kIGRldmljZSwgc2ltcGx5IGZvbGxvdyB0aGVzZSB0aHJlZSBzdGVwcyA6XG4iCisiICAgICAgIC0gZW5zdXJlIHRoYXQgdGhlIHJlcXVpcmVkIGRyaXZlcnMgYXJlIHByb3Blcmx5IGxvYWRlZCA6XG4iCisiICAgICAgICAgIyBtb2Rwcm9iZSBib25kaW5nIDsgbW9kcHJvYmUgPDNjNTl4fGVlcHJvMTAwfHBjbmV0MzJ8dHVsaXB8Li4uPlxuIgorIiAgICAgICAtIGFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBib25kIGRldmljZSA6XG4iCisiICAgICAgICAgIyBpZmNvbmZpZyBib25kMCA8YWRkcj4gbmV0bWFzayA8bWFzaz4gYnJvYWRjYXN0IDxiY2FzdD5cbiIKKyIgICAgICAgLSBhdHRhY2ggYWxsIHRoZSBpbnRlcmZhY2VzIHlvdSBuZWVkIHRvIHRoZSBib25kIGRldmljZSA6XG4iCisiICAgICAgICAgIyBpZmVuc2xhdmUgW3stZnwtLWZvcmNlfV0gYm9uZDAgZXRoMCBbZXRoMSBbZXRoMl0uLi5dXG4iCisiICAgICAgICAgSWYgYm9uZDAgZGlkbid0IGhhdmUgYSBNQUMgYWRkcmVzcywgaXQgd2lsbCB0YWtlIGV0aDAncy4gVGhlbiwgYWxsXG4iCisiICAgICAgICAgaW50ZXJmYWNlcyBhdHRhY2hlZCBBRlRFUiB0aGlzIGFzc2lnbm1lbnQgd2lsbCBnZXQgdGhlIHNhbWUgTUFDIGFkZHIuXG4iCisiICAgICAgICAgKGV4Y2VwdCBmb3IgQUxCL1RMQiBtb2RlcylcbiIKKyJcbiIKKyIgICAgICAgVG8gc2V0IHRoZSBib25kIGRldmljZSBkb3duIGFuZCBhdXRvbWF0aWNhbGx5IHJlbGVhc2UgYWxsIHRoZSBzbGF2ZXMgOlxuIgorIiAgICAgICAgICMgaWZjb25maWcgYm9uZDAgZG93blxuIgorIlxuIgorIiAgICAgICBUbyBkZXRhY2ggYSBkZWFkIGludGVyZmFjZSB3aXRob3V0IHNldHRpbmcgdGhlIGJvbmQgZGV2aWNlIGRvd24gOlxuIgorIiAgICAgICAgICMgaWZlbnNsYXZlIHstZHwtLWRldGFjaH0gYm9uZDAgZXRoMCBbZXRoMSBbZXRoMl0uLi5dXG4iCisiXG4iCisiICAgICAgIFRvIGNoYW5nZSBhY3RpdmUgc2xhdmUgOlxuIgorIiAgICAgICAgICMgaWZlbnNsYXZlIHstY3wtLWNoYW5nZS1hY3RpdmV9IGJvbmQwIGV0aDBcbiIKKyJcbiIKKyIgICAgICAgVG8gc2hvdyBtYXN0ZXIgaW50ZXJmYWNlIGluZm9cbiIKKyIgICAgICAgICAjIGlmZW5zbGF2ZSBib25kMFxuIgorIlxuIgorIiAgICAgICBUbyBzaG93IGFsbCBpbnRlcmZhY2VzIGluZm9cbiIKKyIgICAgICAgIyBpZmVuc2xhdmUgey1hfC0tYWxsLWludGVyZmFjZXN9XG4iCisiXG4iCisiICAgICAgIFRvIGJlIG1vcmUgdmVyYm9zZVxuIgorIiAgICAgICAjIGlmZW5zbGF2ZSB7LXZ8LS12ZXJib3NlfSAuLi5cbiIKKyJcbiIKKyIgICAgICAgIyBpZmVuc2xhdmUgey11fC0tdXNhZ2V9ICAgU2hvdyB1c2FnZVxuIgorIiAgICAgICAjIGlmZW5zbGF2ZSB7LVZ8LS12ZXJzaW9ufSBTaG93IHZlcnNpb25cbiIKKyIgICAgICAgIyBpZmVuc2xhdmUgey1ofC0taGVscH0gICAgVGhpcyBtZXNzYWdlXG4iCisiXG4iOworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ib25kaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CS8qIGhhY2ssIHNvIHdlIG1heSBpbmNsdWRlIGtlcm5lbCdzIGV0aHRvb2wuaCAqLwordHlwZWRlZiBfX3VpbnQzMl90IHUzMjsJCS8qIGRpdHRvICovCit0eXBlZGVmIF9fdWludDE2X3QgdTE2OwkJLyogZGl0dG8gKi8KK3R5cGVkZWYgX191aW50OF90IHU4OwkJLyogZGl0dG8gKi8KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKK3N0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsKKwkvKiB7IG5hbWUgIGhhc19hcmcgICpmbGFnICB2YWwgfSAqLworCXsiYWxsLWludGVyZmFjZXMiLAkwLCAwLCAnYSd9LAkvKiBTaG93IGFsbCBpbnRlcmZhY2VzLiAqLworCXsiY2hhbmdlLWFjdGl2ZSIsCTAsIDAsICdjJ30sCS8qIENoYW5nZSB0aGUgYWN0aXZlIHNsYXZlLiAgKi8KKwl7ImRldGFjaCIsCQkwLCAwLCAnZCd9LAkvKiBEZXRhY2ggYSBzbGF2ZSBpbnRlcmZhY2UuICovCisJeyJmb3JjZSIsCQkwLCAwLCAnZid9LAkvKiBGb3JjZSB0aGUgb3BlcmF0aW9uLiAqLworCXsiaGVscCIsCQkwLCAwLCAnaCd9LAkvKiBHaXZlIGhlbHAgKi8KKwl7InVzYWdlIiwJCTAsIDAsICd1J30sCS8qIEdpdmUgdXNhZ2UgKi8KKwl7InZlcmJvc2UiLAkJMCwgMCwgJ3YnfSwJLyogUmVwb3J0IGVhY2ggYWN0aW9uIHRha2VuLiAqLworCXsidmVyc2lvbiIsCQkwLCAwLCAnVid9LAkvKiBFbWl0IHZlcnNpb24gaW5mb3JtYXRpb24uICovCisJeyAwLCAwLCAwLCAwfQorfTsKKworLyogQ29tbWFuZC1saW5lIGZsYWdzLiAqLwordW5zaWduZWQgaW50CitvcHRfYSA9IDAsCS8qIFNob3ctYWxsLWludGVyZmFjZXMgZmxhZy4gKi8KK29wdF9jID0gMCwJLyogQ2hhbmdlLWFjdGl2ZS1zbGF2ZSBmbGFnLiAqLworb3B0X2QgPSAwLAkvKiBEZXRhY2ggYSBzbGF2ZSBpbnRlcmZhY2UuICovCitvcHRfZiA9IDAsCS8qIEZvcmNlIHRoZSBvcGVyYXRpb24uICovCitvcHRfaCA9IDAsCS8qIEhlbHAgKi8KK29wdF91ID0gMCwJLyogVXNhZ2UgKi8KK29wdF92ID0gMCwJLyogVmVyYm9zZSBmbGFnLiAqLworb3B0X1YgPSAwOwkvKiBWZXJzaW9uICovCisKK2ludCBza2ZkID0gLTE7CQkvKiBBRl9JTkVUIHNvY2tldCBmb3IgaW9jdGwoKSBjYWxscy4qLworaW50IGFiaV92ZXIgPSAwOwkvKiB1c2VybGFuZCAtIGtlcm5lbCBBQkkgdmVyc2lvbiAqLworaW50IGh3YWRkcl9zZXQgPSAwOwkvKiBNYXN0ZXIncyBod2FkZHIgaXMgc2V0ICovCitpbnQgc2F2ZWRfZXJybm87CisKK3N0cnVjdCBpZnJlcSBtYXN0ZXJfbXR1LCBtYXN0ZXJfZmxhZ3MsIG1hc3Rlcl9od2FkZHI7CitzdHJ1Y3QgaWZyZXEgc2xhdmVfbXR1LCBzbGF2ZV9mbGFncywgc2xhdmVfaHdhZGRyOworCitzdHJ1Y3QgZGV2X2lmciB7CisJc3RydWN0IGlmcmVxICpyZXFfaWZyOworCWNoYXIgKnJlcV9uYW1lOworCWludCByZXFfdHlwZTsKK307CisKK3N0cnVjdCBkZXZfaWZyIG1hc3Rlcl9pZnJhW10gPSB7CisJeyZtYXN0ZXJfbXR1LCAgICAgIlNJT0NHSUZNVFUiLCAgICAgU0lPQ0dJRk1UVX0sCisJeyZtYXN0ZXJfZmxhZ3MsICAgIlNJT0NHSUZGTEFHUyIsICAgU0lPQ0dJRkZMQUdTfSwKKwl7Jm1hc3Rlcl9od2FkZHIsICAiU0lPQ0dJRkhXQUREUiIsICBTSU9DR0lGSFdBRERSfSwKKwl7TlVMTCwgIiIsIDB9Cit9OworCitzdHJ1Y3QgZGV2X2lmciBzbGF2ZV9pZnJhW10gPSB7CisJeyZzbGF2ZV9tdHUsICAgICAiU0lPQ0dJRk1UVSIsICAgICBTSU9DR0lGTVRVfSwKKwl7JnNsYXZlX2ZsYWdzLCAgICJTSU9DR0lGRkxBR1MiLCAgIFNJT0NHSUZGTEFHU30sCisJeyZzbGF2ZV9od2FkZHIsICAiU0lPQ0dJRkhXQUREUiIsICBTSU9DR0lGSFdBRERSfSwKKwl7TlVMTCwgIiIsIDB9Cit9OworCitzdGF0aWMgdm9pZCBpZl9wcmludChjaGFyICppZm5hbWUpOworc3RhdGljIGludCBnZXRfZHJ2X2luZm8oY2hhciAqbWFzdGVyX2lmbmFtZSk7CitzdGF0aWMgaW50IGdldF9pZl9zZXR0aW5ncyhjaGFyICppZm5hbWUsIHN0cnVjdCBkZXZfaWZyIGlmcmFbXSk7CitzdGF0aWMgaW50IGdldF9zbGF2ZV9mbGFncyhjaGFyICpzbGF2ZV9pZm5hbWUpOworc3RhdGljIGludCBzZXRfbWFzdGVyX2h3YWRkcihjaGFyICptYXN0ZXJfaWZuYW1lLCBzdHJ1Y3Qgc29ja2FkZHIgKmh3YWRkcik7CitzdGF0aWMgaW50IHNldF9zbGF2ZV9od2FkZHIoY2hhciAqc2xhdmVfaWZuYW1lLCBzdHJ1Y3Qgc29ja2FkZHIgKmh3YWRkcik7CitzdGF0aWMgaW50IHNldF9zbGF2ZV9tdHUoY2hhciAqc2xhdmVfaWZuYW1lLCBpbnQgbXR1KTsKK3N0YXRpYyBpbnQgc2V0X2lmX2ZsYWdzKGNoYXIgKmlmbmFtZSwgc2hvcnQgZmxhZ3MpOworc3RhdGljIGludCBzZXRfaWZfdXAoY2hhciAqaWZuYW1lLCBzaG9ydCBmbGFncyk7CitzdGF0aWMgaW50IHNldF9pZl9kb3duKGNoYXIgKmlmbmFtZSwgc2hvcnQgZmxhZ3MpOworc3RhdGljIGludCBjbGVhcl9pZl9hZGRyKGNoYXIgKmlmbmFtZSk7CitzdGF0aWMgaW50IHNldF9pZl9hZGRyKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSk7CitzdGF0aWMgaW50IGNoYW5nZV9hY3RpdmUoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKTsKK3N0YXRpYyBpbnQgZW5zbGF2ZShjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpOworc3RhdGljIGludCByZWxlYXNlKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSk7CisjZGVmaW5lIHZfcHJpbnQoZm10LCBhcmdzLi4uKQlcCisJaWYgKG9wdF92KQkJXAorCQlmcHJpbnRmKHN0ZGVyciwgZm10LCAjIyBhcmdzICkKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyICoqc3BwLCAqbWFzdGVyX2lmbmFtZSwgKnNsYXZlX2lmbmFtZTsKKwlpbnQgYywgaSwgcnY7CisJaW50IHJlcyA9IDA7CisJaW50IGV4Y2x1c2l2ZSA9IDA7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkZmh1dlYiLCBsb25nb3B0cywgMCkpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYSc6IG9wdF9hKys7IGV4Y2x1c2l2ZSsrOyBicmVhazsKKwkJY2FzZSAnYyc6IG9wdF9jKys7IGV4Y2x1c2l2ZSsrOyBicmVhazsKKwkJY2FzZSAnZCc6IG9wdF9kKys7IGV4Y2x1c2l2ZSsrOyBicmVhazsKKwkJY2FzZSAnZic6IG9wdF9mKys7IGV4Y2x1c2l2ZSsrOyBicmVhazsKKwkJY2FzZSAnaCc6IG9wdF9oKys7IGV4Y2x1c2l2ZSsrOyBicmVhazsKKwkJY2FzZSAndSc6IG9wdF91Kys7IGV4Y2x1c2l2ZSsrOyBicmVhazsKKwkJY2FzZSAndic6IG9wdF92Kys7IGJyZWFrOworCQljYXNlICdWJzogb3B0X1YrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCisJCWNhc2UgJz8nOgorCQkJZnByaW50ZihzdGRlcnIsIHVzYWdlX21zZyk7CisJCQlyZXMgPSAyOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBvcHRpb25zIGNoZWNrICovCisJaWYgKGV4Y2x1c2l2ZSA+IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsIHVzYWdlX21zZyk7CisJCXJlcyA9IDI7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvcHRfdiB8fCBvcHRfVikgeworCQlwcmludGYodmVyc2lvbik7CisJCWlmIChvcHRfVikgeworCQkJcmVzID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKG9wdF91KSB7CisJCXByaW50Zih1c2FnZV9tc2cpOworCQlyZXMgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAob3B0X2gpIHsKKwkJcHJpbnRmKHVzYWdlX21zZyk7CisJCXByaW50ZihoZWxwX21zZyk7CisJCXJlcyA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCS8qIE9wZW4gYSBiYXNpYyBzb2NrZXQgKi8KKwlpZiAoKHNrZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpIDwgMCkgeworCQlwZXJyb3IoInNvY2tldCIpOworCQlyZXMgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAob3B0X2EpIHsKKwkJaWYgKG9wdGluZCA9PSBhcmdjKSB7CisJCQkvKiBObyByZW1haW5pbmcgYXJncyAqLworCQkJLyogc2hvdyBhbGwgaW50ZXJmYWNlcyAqLworCQkJaWZfcHJpbnQoKGNoYXIgKilOVUxMKTsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJLyogSnVzdCBzaG93IHVzYWdlICovCisJCQlmcHJpbnRmKHN0ZGVyciwgdXNhZ2VfbXNnKTsKKwkJCXJlcyA9IDI7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIENvcHkgdGhlIGludGVyZmFjZSBuYW1lICovCisJc3BwID0gYXJndiArIG9wdGluZDsKKwltYXN0ZXJfaWZuYW1lID0gKnNwcCsrOworCisJaWYgKG1hc3Rlcl9pZm5hbWUgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgdXNhZ2VfbXNnKTsKKwkJcmVzID0gMjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogZXhjaGFuZ2UgYWJpIHZlcnNpb24gd2l0aCBib25kaW5nIG1vZHVsZSAqLworCXJlcyA9IGdldF9kcnZfaW5mbyhtYXN0ZXJfaWZuYW1lKTsKKwlpZiAocmVzKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIk1hc3RlciAnJXMnOiBFcnJvcjogaGFuZHNoYWtlIHdpdGggZHJpdmVyIGZhaWxlZC4gIgorCQkJIkFib3J0aW5nXG4iLAorCQkJbWFzdGVyX2lmbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCXNsYXZlX2lmbmFtZSA9ICpzcHArKzsKKworCWlmIChzbGF2ZV9pZm5hbWUgPT0gTlVMTCkgeworCQlpZiAob3B0X2QgfHwgb3B0X2MpIHsKKwkJCWZwcmludGYoc3RkZXJyLCB1c2FnZV9tc2cpOworCQkJcmVzID0gMjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogQSBzaW5nbGUgYXJnIG1lYW5zIHNob3cgdGhlCisJCSAqIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgaW50ZXJmYWNlCisJCSAqLworCQlpZl9wcmludChtYXN0ZXJfaWZuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzID0gZ2V0X2lmX3NldHRpbmdzKG1hc3Rlcl9pZm5hbWUsIG1hc3Rlcl9pZnJhKTsKKwlpZiAocmVzKSB7CisJCS8qIFByb2JhYmx5IGEgZ29vZCByZWFzb24gbm90IHRvIGdvIG9uICovCisJCWZwcmludGYoc3RkZXJyLAorCQkJIk1hc3RlciAnJXMnOiBFcnJvcjogZ2V0IHNldHRpbmdzIGZhaWxlZDogJXMuICIKKwkJCSJBYm9ydGluZ1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIHN0cmVycm9yKHJlcykpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjaGVjayBpZiBtYXN0ZXIgaXMgaW5kZWVkIGEgbWFzdGVyOworCSAqIGlmIG5vdCB0aGVuIGZhaWwgYW55IG9wZXJhdGlvbgorCSAqLworCWlmICghKG1hc3Rlcl9mbGFncy5pZnJfZmxhZ3MgJiBJRkZfTUFTVEVSKSkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJJbGxlZ2FsIG9wZXJhdGlvbjsgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgJyVzJyAiCisJCQkiaXMgbm90IGEgbWFzdGVyLiBBYm9ydGluZ1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUpOworCQlyZXMgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjaGVjayBpZiBtYXN0ZXIgaXMgdXA7IGlmIG5vdCB0aGVuIGZhaWwgYW55IG9wZXJhdGlvbiAqLworCWlmICghKG1hc3Rlcl9mbGFncy5pZnJfZmxhZ3MgJiBJRkZfVVApKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIklsbGVnYWwgb3BlcmF0aW9uOyB0aGUgc3BlY2lmaWVkIG1hc3RlciBpbnRlcmZhY2UgIgorCQkJIiclcycgaXMgbm90IHVwLlxuIiwKKwkJCW1hc3Rlcl9pZm5hbWUpOworCQlyZXMgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPbmx5IGZvciBlbnNsYXZpbmcgKi8KKwlpZiAoIW9wdF9jICYmICFvcHRfZCkgeworCQlzYV9mYW1pbHlfdCBtYXN0ZXJfZmFtaWx5ID0gbWFzdGVyX2h3YWRkci5pZnJfaHdhZGRyLnNhX2ZhbWlseTsKKwkJdW5zaWduZWQgY2hhciAqaHdhZGRyID0KKwkJCSh1bnNpZ25lZCBjaGFyICopbWFzdGVyX2h3YWRkci5pZnJfaHdhZGRyLnNhX2RhdGE7CisKKwkJLyogVGhlIGZhbWlseSAnMScgaXMgQVJQSFJEX0VUSEVSIGZvciBldGhlcm5ldC4gKi8KKwkJaWYgKG1hc3Rlcl9mYW1pbHkgIT0gMSAmJiAhb3B0X2YpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJJbGxlZ2FsIG9wZXJhdGlvbjogVGhlIHNwZWNpZmllZCBtYXN0ZXIgIgorCQkJCSJpbnRlcmZhY2UgJyVzJyBpcyBub3QgZXRoZXJuZXQtbGlrZS5cbiAiCisJCQkJIlRoaXMgcHJvZ3JhbSBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggIgorCQkJCSJldGhlcm5ldC1saWtlIG5ldHdvcmsgaW50ZXJmYWNlcy5cbiAiCisJCQkJIlVzZSB0aGUgJy1mJyBvcHRpb24gdG8gZm9yY2UgdGhlICIKKwkJCQkib3BlcmF0aW9uLlxuIiwKKwkJCQltYXN0ZXJfaWZuYW1lKTsKKwkJCXJlcyA9IDE7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIENoZWNrIG1hc3RlcidzIGh3IGFkZHIgKi8KKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkJaWYgKGh3YWRkcltpXSAhPSAwKSB7CisJCQkJaHdhZGRyX3NldCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaHdhZGRyX3NldCkgeworCQkJdl9wcmludCgiY3VycmVudCBoYXJkd2FyZSBhZGRyZXNzIG9mIG1hc3RlciAnJXMnICIKKwkJCQkiaXMgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngsICIKKwkJCQkidHlwZSAlZFxuIiwKKwkJCQltYXN0ZXJfaWZuYW1lLAorCQkJCWh3YWRkclswXSwgaHdhZGRyWzFdLAorCQkJCWh3YWRkclsyXSwgaHdhZGRyWzNdLAorCQkJCWh3YWRkcls0XSwgaHdhZGRyWzVdLAorCQkJCW1hc3Rlcl9mYW1pbHkpOworCQl9CisJfQorCisJLyogQWNjZXB0cyBvbmx5IG9uZSBzbGF2ZSAqLworCWlmIChvcHRfYykgeworCQkvKiBjaGFuZ2UgYWN0aXZlIHNsYXZlICovCisJCXJlcyA9IGdldF9zbGF2ZV9mbGFncyhzbGF2ZV9pZm5hbWUpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGdldCBmbGFncyBmYWlsZWQuICIKKwkJCQkiQWJvcnRpbmdcbiIsCisJCQkJc2xhdmVfaWZuYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlcyA9IGNoYW5nZV9hY3RpdmUobWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJaWYgKHJlcykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIk1hc3RlciAnJXMnLCBTbGF2ZSAnJXMnOiBFcnJvcjogIgorCQkJCSJDaGFuZ2UgYWN0aXZlIGZhaWxlZFxuIiwKKwkJCQltYXN0ZXJfaWZuYW1lLCBzbGF2ZV9pZm5hbWUpOworCQl9CisJfSBlbHNlIHsKKwkJLyogQWNjZXB0IG11bHRpcGxlIHNsYXZlcyAqLworCQlkbyB7CisJCQlpZiAob3B0X2QpIHsKKwkJCQkvKiBkZXRhY2ggYSBzbGF2ZSBpbnRlcmZhY2UgZnJvbSB0aGUgbWFzdGVyICovCisJCQkJcnYgPSBnZXRfc2xhdmVfZmxhZ3Moc2xhdmVfaWZuYW1lKTsKKwkJCQlpZiAocnYpIHsKKwkJCQkJLyogQ2FuJ3Qgd29yayB3aXRoIHRoaXMgc2xhdmUuICovCisJCQkJCS8qIHJlbWVtYmVyIHRoZSBlcnJvciBhbmQgc2tpcCBpdCovCisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIlNsYXZlICclcyc6IEVycm9yOiBnZXQgZmxhZ3MgIgorCQkJCQkJImZhaWxlZC4gU2tpcHBpbmdcbiIsCisJCQkJCQlzbGF2ZV9pZm5hbWUpOworCQkJCQlyZXMgPSBydjsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXJ2ID0gcmVsZWFzZShtYXN0ZXJfaWZuYW1lLCBzbGF2ZV9pZm5hbWUpOworCQkJCWlmIChydikgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJNYXN0ZXIgJyVzJywgU2xhdmUgJyVzJzogRXJyb3I6ICIKKwkJCQkJCSJSZWxlYXNlIGZhaWxlZFxuIiwKKwkJCQkJCW1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCQkJCXJlcyA9IHJ2OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogYXR0YWNoIGEgc2xhdmUgaW50ZXJmYWNlIHRvIHRoZSBtYXN0ZXIgKi8KKwkJCQlydiA9IGdldF9pZl9zZXR0aW5ncyhzbGF2ZV9pZm5hbWUsIHNsYXZlX2lmcmEpOworCQkJCWlmIChydikgeworCQkJCQkvKiBDYW4ndCB3b3JrIHdpdGggdGhpcyBzbGF2ZS4gKi8KKwkJCQkJLyogcmVtZW1iZXIgdGhlIGVycm9yIGFuZCBza2lwIGl0Ki8KKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGdldCAiCisJCQkJCQkic2V0dGluZ3MgZmFpbGVkOiAlcy4gIgorCQkJCQkJIlNraXBwaW5nXG4iLAorCQkJCQkJc2xhdmVfaWZuYW1lLCBzdHJlcnJvcihydikpOworCQkJCQlyZXMgPSBydjsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXJ2ID0gZW5zbGF2ZShtYXN0ZXJfaWZuYW1lLCBzbGF2ZV9pZm5hbWUpOworCQkJCWlmIChydikgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJNYXN0ZXIgJyVzJywgU2xhdmUgJyVzJzogRXJyb3I6ICIKKwkJCQkJCSJFbnNsYXZlIGZhaWxlZFxuIiwKKwkJCQkJCW1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCQkJCXJlcyA9IHJ2OworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAoKHNsYXZlX2lmbmFtZSA9ICpzcHArKykgIT0gTlVMTCk7CisJfQorCitvdXQ6CisJaWYgKHNrZmQgPj0gMCkgeworCQljbG9zZShza2ZkKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgc2hvcnQgbWlmX2ZsYWdzOworCisvKiBHZXQgdGhlIGludGVmYWNlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUga2VybmVsLiAqLworc3RhdGljIGludCBpZl9nZXRjb25maWcoY2hhciAqaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IG1ldHJpYywgbXR1OwkvKiBQYXJhbWV0ZXJzIG9mIHRoZSBtYXN0ZXIgaW50ZXJmYWNlLiAqLworCXN0cnVjdCBzb2NrYWRkciBkc3RhZGRyLCBicm9hZGFkZHIsIG5ldG1hc2s7CisJdW5zaWduZWQgY2hhciAqaHdhZGRyOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRkZMQUdTLCAmaWZyKSA8IDApCisJCXJldHVybiAtMTsKKwltaWZfZmxhZ3MgPSBpZnIuaWZyX2ZsYWdzOworCXByaW50ZigiVGhlIHJlc3VsdCBvZiBTSU9DR0lGRkxBR1Mgb24gJXMgaXMgJXguXG4iLAorCSAgICAgICBpZm5hbWUsIGlmci5pZnJfZmxhZ3MpOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRkFERFIsICZpZnIpIDwgMCkKKwkJcmV0dXJuIC0xOworCXByaW50ZigiVGhlIHJlc3VsdCBvZiBTSU9DR0lGQUREUiBpcyAlMi4yeC4lMi4yeC4lMi4yeC4lMi4yeC5cbiIsCisJICAgICAgIGlmci5pZnJfYWRkci5zYV9kYXRhWzBdLCBpZnIuaWZyX2FkZHIuc2FfZGF0YVsxXSwKKwkgICAgICAgaWZyLmlmcl9hZGRyLnNhX2RhdGFbMl0sIGlmci5pZnJfYWRkci5zYV9kYXRhWzNdKTsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZIV0FERFIsICZpZnIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogR290dGEgY29udmVydCBmcm9tICdjaGFyJyB0byB1bnNpZ25lZCBmb3IgcHJpbnRmKCkuICovCisJaHdhZGRyID0gKHVuc2lnbmVkIGNoYXIgKilpZnIuaWZyX2h3YWRkci5zYV9kYXRhOworCXByaW50ZigiVGhlIHJlc3VsdCBvZiBTSU9DR0lGSFdBRERSIGlzIHR5cGUgJWQgICIKKwkgICAgICAgIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LlxuIiwKKwkgICAgICAgaWZyLmlmcl9od2FkZHIuc2FfZmFtaWx5LCBod2FkZHJbMF0sIGh3YWRkclsxXSwKKwkgICAgICAgaHdhZGRyWzJdLCBod2FkZHJbM10sIGh3YWRkcls0XSwgaHdhZGRyWzVdKTsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZNRVRSSUMsICZpZnIpIDwgMCkgeworCQltZXRyaWMgPSAwOworCX0gZWxzZQorCQltZXRyaWMgPSBpZnIuaWZyX21ldHJpYzsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZNVFUsICZpZnIpIDwgMCkKKwkJbXR1ID0gMDsKKwllbHNlCisJCW10dSA9IGlmci5pZnJfbXR1OworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRkRTVEFERFIsICZpZnIpIDwgMCkgeworCQltZW1zZXQoJmRzdGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKwl9IGVsc2UKKwkJZHN0YWRkciA9IGlmci5pZnJfZHN0YWRkcjsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZCUkRBRERSLCAmaWZyKSA8IDApIHsKKwkJbWVtc2V0KCZicm9hZGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKwl9IGVsc2UKKwkJYnJvYWRhZGRyID0gaWZyLmlmcl9icm9hZGFkZHI7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGTkVUTUFTSywgJmlmcikgPCAwKSB7CisJCW1lbXNldCgmbmV0bWFzaywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCX0gZWxzZQorCQluZXRtYXNrID0gaWZyLmlmcl9uZXRtYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlmX3ByaW50KGNoYXIgKmlmbmFtZSkKK3sKKwljaGFyIGJ1ZmZbMTAyNF07CisJc3RydWN0IGlmY29uZiBpZmM7CisJc3RydWN0IGlmcmVxICppZnI7CisJaW50IGk7CisKKwlpZiAoaWZuYW1lID09IChjaGFyICopTlVMTCkgeworCQlpZmMuaWZjX2xlbiA9IHNpemVvZihidWZmKTsKKwkJaWZjLmlmY19idWYgPSBidWZmOworCQlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRkNPTkYsICZpZmMpIDwgMCkgeworCQkJcGVycm9yKCJTSU9DR0lGQ09ORiBmYWlsZWQiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmciA9IGlmYy5pZmNfcmVxOworCQlmb3IgKGkgPSBpZmMuaWZjX2xlbiAvIHNpemVvZihzdHJ1Y3QgaWZyZXEpOyAtLWkgPj0gMDsgaWZyKyspIHsKKwkJCWlmIChpZl9nZXRjb25maWcoaWZyLT5pZnJfbmFtZSkgPCAwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIlczogdW5rbm93biBpbnRlcmZhY2UuXG4iLAorCQkJCQlpZnItPmlmcl9uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCgobWlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwKSAmJiAhb3B0X2EpIGNvbnRpbnVlOworCQkJLyppZmVfcHJpbnQoJmlmZSk7Ki8KKwkJfQorCX0gZWxzZSB7CisJCWlmIChpZl9nZXRjb25maWcoaWZuYW1lKSA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSIlczogdW5rbm93biBpbnRlcmZhY2UuXG4iLCBpZm5hbWUpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGdldF9kcnZfaW5mbyhjaGFyICptYXN0ZXJfaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvOworCWNoYXIgKmVuZHB0cjsKKworCW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisJc3RybmNweShpZnIuaWZyX25hbWUsIG1hc3Rlcl9pZm5hbWUsIElGTkFNU0laKTsKKwlpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmaW5mbzsKKworCWluZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTzsKKwlzdHJuY3B5KGluZm8uZHJpdmVyLCAiaWZlbnNsYXZlIiwgMzIpOworCXNucHJpbnRmKGluZm8uZndfdmVyc2lvbiwgMzIsICIlZCIsIEJPTkRfQUJJX1ZFUlNJT04pOworCisJaWYgKGlvY3RsKHNrZmQsIFNJT0NFVEhUT09MLCAmaWZyKSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVPUE5PVFNVUFApIHsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiTWFzdGVyICclcyc6IEVycm9yOiBnZXQgYm9uZGluZyBpbmZvIGZhaWxlZCAlc1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJldHVybiAxOworCX0KKworCWFiaV92ZXIgPSBzdHJ0b3VsKGluZm8uZndfdmVyc2lvbiwgJmVuZHB0ciwgMCk7CisJaWYgKCplbmRwdHIpIHsKKyAgICAgICAgICAgICAgICB2X3ByaW50KCJNYXN0ZXIgJyVzJzogRXJyb3I6IGdvdCBpbnZhbGlkIHN0cmluZyBhcyBhbiBBQkkgIgorCQkJInZlcnNpb24gZnJvbSB0aGUgYm9uZGluZyBtb2R1bGVcbiIsCisJCQltYXN0ZXJfaWZuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCitvdXQ6CisJdl9wcmludCgiQUJJIHZlciBpcyAlZFxuIiwgYWJpX3Zlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGFuZ2VfYWN0aXZlKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJaWYgKCEoc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzICYgSUZGX1NMQVZFKSkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJJbGxlZ2FsIG9wZXJhdGlvbjogVGhlIHNwZWNpZmllZCBzbGF2ZSBpbnRlcmZhY2UgIgorCQkJIiclcycgaXMgbm90IGEgc2xhdmVcbiIsCisJCQlzbGF2ZV9pZm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgbWFzdGVyX2lmbmFtZSwgSUZOQU1TSVopOworCXN0cm5jcHkoaWZyLmlmcl9zbGF2ZSwgc2xhdmVfaWZuYW1lLCBJRk5BTVNJWik7CisJaWYgKChpb2N0bChza2ZkLCBTSU9DQk9ORENIQU5HRUFDVElWRSwgJmlmcikgPCAwKSAmJgorCSAgICAoaW9jdGwoc2tmZCwgQk9ORF9DSEFOR0VfQUNUSVZFX09MRCwgJmlmcikgPCAwKSkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogRXJyb3I6IFNJT0NCT05EQ0hBTkdFQUNUSVZFIGZhaWxlZDogIgorCQkJIiVzXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmVzID0gMTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGVuc2xhdmUoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzICYgSUZGX1NMQVZFKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIklsbGVnYWwgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHNsYXZlIGludGVyZmFjZSAiCisJCQkiJyVzJyBpcyBhbHJlYWR5IGEgc2xhdmVcbiIsCisJCQlzbGF2ZV9pZm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXMgPSBzZXRfaWZfZG93bihzbGF2ZV9pZm5hbWUsIHNsYXZlX2ZsYWdzLmlmcl9mbGFncyk7CisJaWYgKHJlcykgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogYnJpbmcgaW50ZXJmYWNlIGRvd24gZmFpbGVkXG4iLAorCQkJc2xhdmVfaWZuYW1lKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlpZiAoYWJpX3ZlciA8IDIpIHsKKwkJLyogT2xkZXIgYm9uZGluZyB2ZXJzaW9ucyB3b3VsZCBwYW5pYyBpZiB0aGUgc2xhdmUgaGFzIG5vIElQCisJCSAqIGFkZHJlc3MsIHNvIGdldCB0aGUgSVAgc2V0dGluZyBmcm9tIHRoZSBtYXN0ZXIuCisJCSAqLworCQlyZXMgPSBzZXRfaWZfYWRkcihtYXN0ZXJfaWZuYW1lLCBzbGF2ZV9pZm5hbWUpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IHNldCBhZGRyZXNzIGZhaWxlZFxuIiwKKwkJCQlzbGF2ZV9pZm5hbWUpOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0gZWxzZSB7CisJCXJlcyA9IGNsZWFyX2lmX2FkZHIoc2xhdmVfaWZuYW1lKTsKKwkJaWYgKHJlcykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlNsYXZlICclcyc6IEVycm9yOiBjbGVhciBhZGRyZXNzIGZhaWxlZFxuIiwKKwkJCQlzbGF2ZV9pZm5hbWUpOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0KKworCWlmIChtYXN0ZXJfbXR1Lmlmcl9tdHUgIT0gc2xhdmVfbXR1Lmlmcl9tdHUpIHsKKwkJcmVzID0gc2V0X3NsYXZlX210dShzbGF2ZV9pZm5hbWUsIG1hc3Rlcl9tdHUuaWZyX210dSk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogc2V0IE1UVSBmYWlsZWRcbiIsCisJCQkJc2xhdmVfaWZuYW1lKTsKKwkJCXJldHVybiByZXM7CisJCX0KKwl9CisKKwlpZiAoaHdhZGRyX3NldCkgeworCQkvKiBNYXN0ZXIgYWxyZWFkeSBoYXMgYW4gaHdhZGRyCisJCSAqIHNvIHNldCBpdCdzIGh3YWRkciB0byB0aGUgc2xhdmUKKwkJICovCisJCWlmIChhYmlfdmVyIDwgMSkgeworCQkJLyogVGhlIGRyaXZlciBpcyB1c2luZyBhbiBvbGQgQUJJLCBzbworCQkJICogdGhlIGFwcGxpY2F0aW9uIHNldHMgdGhlIHNsYXZlJ3MKKwkJCSAqIGh3YWRkcgorCQkJICovCisJCQlyZXMgPSBzZXRfc2xhdmVfaHdhZGRyKHNsYXZlX2lmbmFtZSwKKwkJCQkJICAgICAgICYobWFzdGVyX2h3YWRkci5pZnJfaHdhZGRyKSk7CisJCQlpZiAocmVzKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogc2V0IGh3IGFkZHJlc3MgIgorCQkJCQkiZmFpbGVkXG4iLAorCQkJCQlzbGF2ZV9pZm5hbWUpOworCQkJCWdvdG8gdW5kb19tdHU7CisJCQl9CisKKwkJCS8qIEZvciBvbGQgQUJJIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBicmluZyB0aGUKKwkJCSAqIHNsYXZlIGJhY2sgdXAKKwkJCSAqLworCQkJcmVzID0gc2V0X2lmX3VwKHNsYXZlX2lmbmFtZSwgc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzKTsKKwkJCWlmIChyZXMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIlNsYXZlICclcyc6IEVycm9yOiBicmluZyBpbnRlcmZhY2UgIgorCQkJCQkiZG93biBmYWlsZWRcbiIsCisJCQkJCXNsYXZlX2lmbmFtZSk7CisJCQkJZ290byB1bmRvX3NsYXZlX21hYzsKKwkJCX0KKwkJfQorCQkvKiBUaGUgZHJpdmVyIGlzIHVzaW5nIGEgbmV3IEFCSSwKKwkJICogc28gdGhlIGRyaXZlciB0YWtlcyBjYXJlIG9mIHNldHRpbmcKKwkJICogdGhlIHNsYXZlJ3MgaHdhZGRyIGFuZCBicmluZ2luZworCQkgKiBpdCB1cCBhZ2FpbgorCQkgKi8KKwl9IGVsc2UgeworCQkvKiBObyBod2FkZHIgZm9yIG1hc3RlciB5ZXQsIHNvCisJCSAqIHNldCB0aGUgc2xhdmUncyBod2FkZHIgdG8gaXQKKwkJICovCisJCWlmIChhYmlfdmVyIDwgMSkgeworCQkJLyogRm9yIG9sZCBBQkksIHRoZSBtYXN0ZXIgbmVlZHMgdG8gYmUKKwkJCSAqIGRvd24gYmVmb3JlIHNldHRpbmcgaXQncyBod2FkZHIKKwkJCSAqLworCQkJcmVzID0gc2V0X2lmX2Rvd24obWFzdGVyX2lmbmFtZSwgbWFzdGVyX2ZsYWdzLmlmcl9mbGFncyk7CisJCQlpZiAocmVzKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJNYXN0ZXIgJyVzJzogRXJyb3I6IGJyaW5nIGludGVyZmFjZSAiCisJCQkJCSJkb3duIGZhaWxlZFxuIiwKKwkJCQkJbWFzdGVyX2lmbmFtZSk7CisJCQkJZ290byB1bmRvX210dTsKKwkJCX0KKwkJfQorCisJCXJlcyA9IHNldF9tYXN0ZXJfaHdhZGRyKG1hc3Rlcl9pZm5hbWUsCisJCQkJCSYoc2xhdmVfaHdhZGRyLmlmcl9od2FkZHIpKTsKKwkJaWYgKHJlcykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIk1hc3RlciAnJXMnOiBFcnJvcjogc2V0IGh3IGFkZHJlc3MgIgorCQkJCSJmYWlsZWRcbiIsCisJCQkJbWFzdGVyX2lmbmFtZSk7CisJCQlnb3RvIHVuZG9fbXR1OworCQl9CisKKwkJaWYgKGFiaV92ZXIgPCAxKSB7CisJCQkvKiBGb3Igb2xkIEFCSSwgYnJpbmcgdGhlIG1hc3RlcgorCQkJICogYmFjayB1cAorCQkJICovCisJCQlyZXMgPSBzZXRfaWZfdXAobWFzdGVyX2lmbmFtZSwgbWFzdGVyX2ZsYWdzLmlmcl9mbGFncyk7CisJCQlpZiAocmVzKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJNYXN0ZXIgJyVzJzogRXJyb3I6IGJyaW5nIGludGVyZmFjZSAiCisJCQkJCSJ1cCBmYWlsZWRcbiIsCisJCQkJCW1hc3Rlcl9pZm5hbWUpOworCQkJCWdvdG8gdW5kb19tYXN0ZXJfbWFjOworCQkJfQorCQl9CisKKwkJaHdhZGRyX3NldCA9IDE7CisJfQorCisJLyogRG8gdGhlIHJlYWwgdGhpbmcgKi8KKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgbWFzdGVyX2lmbmFtZSwgSUZOQU1TSVopOworCXN0cm5jcHkoaWZyLmlmcl9zbGF2ZSwgc2xhdmVfaWZuYW1lLCBJRk5BTVNJWik7CisJaWYgKChpb2N0bChza2ZkLCBTSU9DQk9OREVOU0xBVkUsICZpZnIpIDwgMCkgJiYKKwkgICAgKGlvY3RsKHNrZmQsIEJPTkRfRU5TTEFWRV9PTEQsICZpZnIpIDwgMCkpIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiTWFzdGVyICclcyc6IEVycm9yOiBTSU9DQk9OREVOU0xBVkUgZmFpbGVkOiAlc1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJlcyA9IDE7CisJfQorCisJaWYgKHJlcykgeworCQlnb3RvIHVuZG9fbWFzdGVyX21hYzsKKwl9CisKKwlyZXR1cm4gMDsKKworLyogcm9sbGJhY2sgKGJlc3QgZWZmb3J0KSAqLwordW5kb19tYXN0ZXJfbWFjOgorCXNldF9tYXN0ZXJfaHdhZGRyKG1hc3Rlcl9pZm5hbWUsICYobWFzdGVyX2h3YWRkci5pZnJfaHdhZGRyKSk7CisJaHdhZGRyX3NldCA9IDA7CisJZ290byB1bmRvX210dTsKK3VuZG9fc2xhdmVfbWFjOgorCXNldF9zbGF2ZV9od2FkZHIoc2xhdmVfaWZuYW1lLCAmKHNsYXZlX2h3YWRkci5pZnJfaHdhZGRyKSk7Cit1bmRvX210dToKKwlzZXRfc2xhdmVfbXR1KHNsYXZlX2lmbmFtZSwgc2xhdmVfbXR1Lmlmcl9tdHUpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcmVsZWFzZShjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCWlmICghKHNsYXZlX2ZsYWdzLmlmcl9mbGFncyAmIElGRl9TTEFWRSkpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiSWxsZWdhbCBvcGVyYXRpb246IFRoZSBzcGVjaWZpZWQgc2xhdmUgaW50ZXJmYWNlICIKKwkJCSInJXMnIGlzIG5vdCBhIHNsYXZlXG4iLAorCQkJc2xhdmVfaWZuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RybmNweShpZnIuaWZyX25hbWUsIG1hc3Rlcl9pZm5hbWUsIElGTkFNU0laKTsKKwlzdHJuY3B5KGlmci5pZnJfc2xhdmUsIHNsYXZlX2lmbmFtZSwgSUZOQU1TSVopOworCWlmICgoaW9jdGwoc2tmZCwgU0lPQ0JPTkRSRUxFQVNFLCAmaWZyKSA8IDApICYmCisJICAgIChpb2N0bChza2ZkLCBCT05EX1JFTEVBU0VfT0xELCAmaWZyKSA8IDApKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogU0lPQ0JPTkRSRUxFQVNFIGZhaWxlZDogJXNcbiIsCisJCQltYXN0ZXJfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGFiaV92ZXIgPCAxKSB7CisJCS8qIFRoZSBkcml2ZXIgaXMgdXNpbmcgYW4gb2xkIEFCSSwgc28gd2UnbGwgc2V0IHRoZSBpbnRlcmZhY2UKKwkJICogZG93biB0byBhdm9pZCBhbnkgY29uZmxpY3RzIGR1ZSB0byBzYW1lIE1BQy9JUAorCQkgKi8KKwkJcmVzID0gc2V0X2lmX2Rvd24oc2xhdmVfaWZuYW1lLCBzbGF2ZV9mbGFncy5pZnJfZmxhZ3MpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGJyaW5nIGludGVyZmFjZSAiCisJCQkJImRvd24gZmFpbGVkXG4iLAorCQkJCXNsYXZlX2lmbmFtZSk7CisJCX0KKwl9CisKKwkvKiBzZXQgdG8gZGVmYXVsdCBtdHUgKi8KKwlzZXRfc2xhdmVfbXR1KHNsYXZlX2lmbmFtZSwgMTUwMCk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGdldF9pZl9zZXR0aW5ncyhjaGFyICppZm5hbWUsIHN0cnVjdCBkZXZfaWZyIGlmcmFbXSkKK3sKKwlpbnQgaTsKKwlpbnQgcmVzID0gMDsKKworCWZvciAoaSA9IDA7IGlmcmFbaV0ucmVxX2lmcjsgaSsrKSB7CisJCXN0cm5jcHkoaWZyYVtpXS5yZXFfaWZyLT5pZnJfbmFtZSwgaWZuYW1lLCBJRk5BTVNJWik7CisJCXJlcyA9IGlvY3RsKHNrZmQsIGlmcmFbaV0ucmVxX3R5cGUsIGlmcmFbaV0ucmVxX2lmcik7CisJCWlmIChyZXMgPCAwKSB7CisJCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IEVycm9yOiAlcyBmYWlsZWQ6ICVzXG4iLAorCQkJCWlmbmFtZSwgaWZyYVtpXS5yZXFfbmFtZSwKKwkJCQlzdHJlcnJvcihzYXZlZF9lcnJubykpOworCisJCQlyZXR1cm4gc2F2ZWRfZXJybm87CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfc2xhdmVfZmxhZ3MoY2hhciAqc2xhdmVfaWZuYW1lKQoreworCWludCByZXMgPSAwOworCisJc3RybmNweShzbGF2ZV9mbGFncy5pZnJfbmFtZSwgc2xhdmVfaWZuYW1lLCBJRk5BTVNJWik7CisJcmVzID0gaW9jdGwoc2tmZCwgU0lPQ0dJRkZMQUdTLCAmc2xhdmVfZmxhZ3MpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIlNsYXZlICclcyc6IEVycm9yOiBTSU9DR0lGRkxBR1MgZmFpbGVkOiAlc1xuIiwKKwkJCXNsYXZlX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwl9IGVsc2UgeworCQl2X3ByaW50KCJTbGF2ZSAlczogZmxhZ3MgJTA0WC5cbiIsCisJCQlzbGF2ZV9pZm5hbWUsIHNsYXZlX2ZsYWdzLmlmcl9mbGFncyk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBzZXRfbWFzdGVyX2h3YWRkcihjaGFyICptYXN0ZXJfaWZuYW1lLCBzdHJ1Y3Qgc29ja2FkZHIgKmh3YWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyICphZGRyID0gKHVuc2lnbmVkIGNoYXIgKilod2FkZHItPnNhX2RhdGE7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBtYXN0ZXJfaWZuYW1lLCBJRk5BTVNJWik7CisJbWVtY3B5KCYoaWZyLmlmcl9od2FkZHIpLCBod2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKwlyZXMgPSBpb2N0bChza2ZkLCBTSU9DU0lGSFdBRERSLCAmaWZyKTsKKwlpZiAocmVzIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogRXJyb3I6IFNJT0NTSUZIV0FERFIgZmFpbGVkOiAlc1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJldHVybiByZXM7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiTWFzdGVyICclcyc6IGhhcmR3YXJlIGFkZHJlc3Mgc2V0IHRvICIKKwkJCSIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeC5cbiIsCisJCQltYXN0ZXJfaWZuYW1lLCBhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLAorCQkJYWRkclszXSwgYWRkcls0XSwgYWRkcls1XSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBzZXRfc2xhdmVfaHdhZGRyKGNoYXIgKnNsYXZlX2lmbmFtZSwgc3RydWN0IHNvY2thZGRyICpod2FkZHIpCit7CisJdW5zaWduZWQgY2hhciAqYWRkciA9ICh1bnNpZ25lZCBjaGFyICopaHdhZGRyLT5zYV9kYXRhOworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgc2xhdmVfaWZuYW1lLCBJRk5BTVNJWik7CisJbWVtY3B5KCYoaWZyLmlmcl9od2FkZHIpLCBod2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKwlyZXMgPSBpb2N0bChza2ZkLCBTSU9DU0lGSFdBRERSLCAmaWZyKTsKKwlpZiAocmVzIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCisJCXZfcHJpbnQoIlNsYXZlICclcyc6IEVycm9yOiBTSU9DU0lGSFdBRERSIGZhaWxlZDogJXNcbiIsCisJCQlzbGF2ZV9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisKKwkJaWYgKHNhdmVkX2Vycm5vID09IEVCVVNZKSB7CisJCQl2X3ByaW50KCIgIFRoZSBkZXZpY2UgaXMgYnVzeTogaXQgbXVzdCBiZSBpZGxlICIKKwkJCQkiYmVmb3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kLlxuIik7CisJCX0gZWxzZSBpZiAoc2F2ZWRfZXJybm8gPT0gRU9QTk9UU1VQUCkgeworCQkJdl9wcmludCgiICBUaGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyAiCisJCQkJInRoZSBNQUMgYWRkcmVzcy5cbiIKKwkJCQkiICBZb3VyIGtlcm5lbCBsaWtlbHkgZG9lcyBub3Qgc3VwcG9ydCBzbGF2ZSAiCisJCQkJImRldmljZXMuXG4iKTsKKwkJfSBlbHNlIGlmIChzYXZlZF9lcnJubyA9PSBFSU5WQUwpIHsKKwkJCXZfcHJpbnQoIiAgVGhlIGRldmljZSdzIGFkZHJlc3MgdHlwZSBkb2VzIG5vdCBtYXRjaCAiCisJCQkJInRoZSBtYXN0ZXIncyBhZGRyZXNzIHR5cGUuXG4iKTsKKwkJfQorCQlyZXR1cm4gcmVzOworCX0gZWxzZSB7CisJCXZfcHJpbnQoIlNsYXZlICclcyc6IGhhcmR3YXJlIGFkZHJlc3Mgc2V0IHRvICIKKwkJCSIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeC5cbiIsCisJCQlzbGF2ZV9pZm5hbWUsIGFkZHJbMF0sIGFkZHJbMV0sIGFkZHJbMl0sCisJCQlhZGRyWzNdLCBhZGRyWzRdLCBhZGRyWzVdKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9zbGF2ZV9tdHUoY2hhciAqc2xhdmVfaWZuYW1lLCBpbnQgbXR1KQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlpZnIuaWZyX210dSA9IG10dTsKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgc2xhdmVfaWZuYW1lLCBJRk5BTVNJWik7CisKKwlyZXMgPSBpb2N0bChza2ZkLCBTSU9DU0lGTVRVLCAmaWZyKTsKKwlpZiAocmVzIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJTbGF2ZSAnJXMnOiBFcnJvcjogU0lPQ1NJRk1UVSBmYWlsZWQ6ICVzXG4iLAorCQkJc2xhdmVfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCX0gZWxzZSB7CisJCXZfcHJpbnQoIlNsYXZlICclcyc6IE1UVSBzZXQgdG8gJWQuXG4iLCBzbGF2ZV9pZm5hbWUsIG10dSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBzZXRfaWZfZmxhZ3MoY2hhciAqaWZuYW1lLCBzaG9ydCBmbGFncykKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJaWZyLmlmcl9mbGFncyA9IGZsYWdzOworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUsIElGTkFNU0laKTsKKworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZGTEFHUywgJmlmcik7CisJaWYgKHJlcyA8IDApIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IEVycm9yOiBTSU9DU0lGRkxBR1MgZmFpbGVkOiAlc1xuIiwKKwkJCWlmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwl9IGVsc2UgeworCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogZmxhZ3Mgc2V0IHRvICUwNFguXG4iLCBpZm5hbWUsIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9pZl91cChjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKQoreworCXJldHVybiBzZXRfaWZfZmxhZ3MoaWZuYW1lLCBmbGFncyB8IElGRl9VUCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2lmX2Rvd24oY2hhciAqaWZuYW1lLCBzaG9ydCBmbGFncykKK3sKKwlyZXR1cm4gc2V0X2lmX2ZsYWdzKGlmbmFtZSwgZmxhZ3MgJiB+SUZGX1VQKTsKK30KKworc3RhdGljIGludCBjbGVhcl9pZl9hZGRyKGNoYXIgKmlmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJc3RybmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSwgSUZOQU1TSVopOworCWlmci5pZnJfYWRkci5zYV9mYW1pbHkgPSBBRl9JTkVUOworCW1lbXNldChpZnIuaWZyX2FkZHIuc2FfZGF0YSwgMCwgc2l6ZW9mKGlmci5pZnJfYWRkci5zYV9kYXRhKSk7CisKKwlyZXMgPSBpb2N0bChza2ZkLCBTSU9DU0lGQUREUiwgJmlmcik7CisJaWYgKHJlcyA8IDApIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IEVycm9yOiBTSU9DU0lGQUREUiBmYWlsZWQ6ICVzXG4iLAorCQkJaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCX0gZWxzZSB7CisJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBhZGRyZXNzIGNsZWFyZWRcbiIsIGlmbmFtZSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBzZXRfaWZfYWRkcihjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzOworCXVuc2lnbmVkIGNoYXIgKmlwYWRkcjsKKwlpbnQgaTsKKwlzdHJ1Y3QgeworCQljaGFyICpyZXFfbmFtZTsKKwkJY2hhciAqZGVzYzsKKwkJaW50IGdfaW9jdGw7CisJCWludCBzX2lvY3RsOworCX0gaWZyYVtdID0geworCQl7IklGQUREUiIsICJhZGRyIiwgU0lPQ0dJRkFERFIsIFNJT0NTSUZBRERSfSwKKwkJeyJEU1RBRERSIiwgImRlc3RpbmF0aW9uIGFkZHIiLCBTSU9DR0lGRFNUQUREUiwgU0lPQ1NJRkRTVEFERFJ9LAorCQl7IkJSREFERFIiLCAiYnJvYWRjYXN0IGFkZHIiLCBTSU9DR0lGQlJEQUREUiwgU0lPQ1NJRkJSREFERFJ9LAorCQl7Ik5FVE1BU0siLCAibmV0bWFzayIsIFNJT0NHSUZORVRNQVNLLCBTSU9DU0lGTkVUTUFTS30sCisJCXtOVUxMLCBOVUxMLCAwLCAwfSwKKwl9OworCisJZm9yIChpID0gMDsgaWZyYVtpXS5yZXFfbmFtZTsgaSsrKSB7CisJCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBtYXN0ZXJfaWZuYW1lLCBJRk5BTVNJWik7CisJCXJlcyA9IGlvY3RsKHNrZmQsIGlmcmFbaV0uZ19pb2N0bCwgJmlmcik7CisJCWlmIChyZXMgPCAwKSB7CisJCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKworCQkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IEVycm9yOiBTSU9DRyVzIGZhaWxlZDogJXNcbiIsCisJCQkJbWFzdGVyX2lmbmFtZSwgaWZyYVtpXS5yZXFfbmFtZSwKKwkJCQlzdHJlcnJvcihzYXZlZF9lcnJubykpOworCisJCQlpZnIuaWZyX2FkZHIuc2FfZmFtaWx5ID0gQUZfSU5FVDsKKwkJCW1lbXNldChpZnIuaWZyX2FkZHIuc2FfZGF0YSwgMCwKKwkJCSAgICAgICBzaXplb2YoaWZyLmlmcl9hZGRyLnNhX2RhdGEpKTsKKwkJfQorCisJCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwkJcmVzID0gaW9jdGwoc2tmZCwgaWZyYVtpXS5zX2lvY3RsLCAmaWZyKTsKKwkJaWYgKHJlcyA8IDApIHsKKwkJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisJCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6IFNJT0NTJXMgZmFpbGVkOiAlc1xuIiwKKwkJCQlzbGF2ZV9pZm5hbWUsIGlmcmFbaV0ucmVxX25hbWUsCisJCQkJc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKworCQkJcmV0dXJuIHJlczsKKwkJfQorCisJCWlwYWRkciA9IGlmci5pZnJfYWRkci5zYV9kYXRhOworCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogc2V0IElQICVzIHRvICVkLiVkLiVkLiVkXG4iLAorCQkJc2xhdmVfaWZuYW1lLCBpZnJhW2ldLmRlc2MsCisJCQlpcGFkZHJbMF0sIGlwYWRkclsxXSwgaXBhZGRyWzJdLCBpcGFkZHJbM10pOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogIHZlcnNpb24tY29udHJvbDogdAorICogIGtlcHQtbmV3LXZlcnNpb25zOiA1CisgKiAgYy1pbmRlbnQtbGV2ZWw6IDQKKyAqICBjLWJhc2ljLW9mZnNldDogNAorICogIHRhYi13aWR0aDogNAorICogIGNvbXBpbGUtY29tbWFuZDogImdjYyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSBpZmVuc2xhdmUuYyAtbyBpZmVuc2xhdmUiCisgKiBFbmQ6CisgKi8KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM4OTNhNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0wLDAgKzEsODc4IEBACisvcHJvYy9zeXMvbmV0L2lwdjQvKiBWYXJpYWJsZXM6CisKK2lwX2ZvcndhcmQgLSBCT09MRUFOCisJMCAtIGRpc2FibGVkIChkZWZhdWx0KQorCW5vdCAwIC0gZW5hYmxlZCAKKworCUZvcndhcmQgUGFja2V0cyBiZXR3ZWVuIGludGVyZmFjZXMuCisKKwlUaGlzIHZhcmlhYmxlIGlzIHNwZWNpYWwsIGl0cyBjaGFuZ2UgcmVzZXRzIGFsbCBjb25maWd1cmF0aW9uCisJcGFyYW1ldGVycyB0byB0aGVpciBkZWZhdWx0IHN0YXRlIChSRkMxMTIyIGZvciBob3N0cywgUkZDMTgxMgorCWZvciByb3V0ZXJzKQorCitpcF9kZWZhdWx0X3R0bCAtIElOVEVHRVIKKwlkZWZhdWx0IDY0CisKK2lwX25vX3BtdHVfZGlzYyAtIEJPT0xFQU4KKwlEaXNhYmxlIFBhdGggTVRVIERpc2NvdmVyeS4KKwlkZWZhdWx0IEZBTFNFCisKK21pbl9wbXR1IC0gSU5URUdFUgorCWRlZmF1bHQgNTYyIC0gbWluaW11bSBkaXNjb3ZlcmVkIFBhdGggTVRVCisKK210dV9leHBpcmVzIC0gSU5URUdFUgorCVRpbWUsIGluIHNlY29uZHMsIHRoYXQgY2FjaGVkIFBNVFUgaW5mb3JtYXRpb24gaXMga2VwdC4KKworbWluX2Fkdl9tc3MgLSBJTlRFR0VSCisJVGhlIGFkdmVydGlzZWQgTVNTIGRlcGVuZHMgb24gdGhlIGZpcnN0IGhvcCByb3V0ZSBNVFUsIGJ1dCB3aWxsCisJbmV2ZXIgYmUgbG93ZXIgdGhhbiB0aGlzIHNldHRpbmcuCisKK0lQIEZyYWdtZW50YXRpb246CisKK2lwZnJhZ19oaWdoX3RocmVzaCAtIElOVEVHRVIKKwlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuIAorCWlwZnJhZ19oaWdoX3RocmVzaCBieXRlcyBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGlzIHB1cnBvc2UsCisJdGhlIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzIHBhY2tldHMgdW50aWwgaXBmcmFnX2xvd190aHJlc2gKKwlpcyByZWFjaGVkLgorCQoraXBmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCisJU2VlIGlwZnJhZ19oaWdoX3RocmVzaAkKKworaXBmcmFnX3RpbWUgLSBJTlRFR0VSCisJVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgkKKworaXBmcmFnX3NlY3JldF9pbnRlcnZhbCAtIElOVEVHRVIKKwlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUgCisJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQIGZyYWdtZW50cy4KKwlEZWZhdWx0OiA2MDAKKworSU5FVCBwZWVyIHN0b3JhZ2U6CisKK2luZXRfcGVlcl90aHJlc2hvbGQgLSBJTlRFR0VSCisJVGhlIGFwcHJveGltYXRlIHNpemUgb2YgdGhlIHN0b3JhZ2UuICBTdGFydGluZyBmcm9tIHRoaXMgdGhyZXNob2xkCQorCWVudHJpZXMgd2lsbCBiZSB0aHJvd24gYWdncmVzc2l2ZWx5LiAgVGhpcyB0aHJlc2hvbGQgYWxzbyBkZXRlcm1pbmVzCisJZW50cmllcycgdGltZS10by1saXZlIGFuZCB0aW1lIGludGVydmFscyBiZXR3ZWVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCXBhc3Nlcy4gIE1vcmUgZW50cmllcywgbGVzcyB0aW1lLXRvLWxpdmUsIGxlc3MgR0MgaW50ZXJ2YWwuCisKK2luZXRfcGVlcl9taW50dGwgLSBJTlRFR0VSCisJTWluaW11bSB0aW1lLXRvLWxpdmUgb2YgZW50cmllcy4gIFNob3VsZCBiZSBlbm91Z2ggdG8gY292ZXIgZnJhZ21lbnQKKwl0aW1lLXRvLWxpdmUgb24gdGhlIHJlYXNzZW1ibGluZyBzaWRlLiAgVGhpcyBtaW5pbXVtIHRpbWUtdG8tbGl2ZSAgaXMKKwlndWFyYW50ZWVkIGlmIHRoZSBwb29sIHNpemUgaXMgbGVzcyB0aGFuIGluZXRfcGVlcl90aHJlc2hvbGQuCisJTWVhc3VyZWQgaW4gamlmZmllcygxKS4KKworaW5ldF9wZWVyX21heHR0bCAtIElOVEVHRVIKKwlNYXhpbXVtIHRpbWUtdG8tbGl2ZSBvZiBlbnRyaWVzLiAgVW51c2VkIGVudHJpZXMgd2lsbCBleHBpcmUgYWZ0ZXIKKwl0aGlzIHBlcmlvZCBvZiB0aW1lIGlmIHRoZXJlIGlzIG5vIG1lbW9yeSBwcmVzc3VyZSBvbiB0aGUgcG9vbCAoaS5lLgorCXdoZW4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBwb29sIGlzIHZlcnkgc21hbGwpLgorCU1lYXN1cmVkIGluIGppZmZpZXMoMSkuCisKK2luZXRfcGVlcl9nY19taW50aW1lIC0gSU5URUdFUgorCU1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzc2VzLiAgVGhpcyBpbnRlcnZhbCBpcworCWluIGVmZmVjdCB1bmRlciBoaWdoIG1lbW9yeSBwcmVzc3VyZSBvbiB0aGUgcG9vbC4KKwlNZWFzdXJlZCBpbiBqaWZmaWVzKDEpLgorCitpbmV0X3BlZXJfZ2NfbWF4dGltZSAtIElOVEVHRVIKKwlNaW5pbXVtIGludGVydmFsIGJldHdlZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3Nlcy4gIFRoaXMgaW50ZXJ2YWwgaXMKKwlpbiBlZmZlY3QgdW5kZXIgbG93IChvciBhYnNlbnQpIG1lbW9yeSBwcmVzc3VyZSBvbiB0aGUgcG9vbC4KKwlNZWFzdXJlZCBpbiBqaWZmaWVzKDEpLgorCitUQ1AgdmFyaWFibGVzOiAKKwordGNwX3N5bl9yZXRyaWVzIC0gSU5URUdFUgorCU51bWJlciBvZiB0aW1lcyBpbml0aWFsIFNZTnMgZm9yIGFuIGFjdGl2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0CisJd2lsbCBiZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQorCWlzIDUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIH4xODBzZWNvbmRzLgorCit0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSCisJTnVtYmVyIG9mIHRpbWVzIFNZTkFDS3MgZm9yIGEgcGFzc2l2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwKKwliZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQorCWlzIDUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIH4xODBzZWNvbmRzLgorCit0Y3Bfa2VlcGFsaXZlX3RpbWUgLSBJTlRFR0VSCisJSG93IG9mdGVuIFRDUCBzZW5kcyBvdXQga2VlcGFsaXZlIG1lc3NhZ2VzIHdoZW4ga2VlcGFsaXZlIGlzIGVuYWJsZWQuCisJRGVmYXVsdDogMmhvdXJzLgorCit0Y3Bfa2VlcGFsaXZlX3Byb2JlcyAtIElOVEVHRVIKKwlIb3cgbWFueSBrZWVwYWxpdmUgcHJvYmVzIFRDUCBzZW5kcyBvdXQsIHVudGlsIGl0IGRlY2lkZXMgdGhhdCB0aGUKKwljb25uZWN0aW9uIGlzIGJyb2tlbi4gRGVmYXVsdCB2YWx1ZTogOS4KKwordGNwX2tlZXBhbGl2ZV9pbnR2bCAtIElOVEVHRVIKKwlIb3cgZnJlcXVlbnRseSB0aGUgcHJvYmVzIGFyZSBzZW5kIG91dC4gTXVsdGlwbGllZCBieQorCXRjcF9rZWVwYWxpdmVfcHJvYmVzIGl0IGlzIHRpbWUgdG8ga2lsbCBub3QgcmVzcG9uZGluZyBjb25uZWN0aW9uLAorCWFmdGVyIHByb2JlcyBzdGFydGVkLiBEZWZhdWx0IHZhbHVlOiA3NXNlYyBpLmUuIGNvbm5lY3Rpb24KKwl3aWxsIGJlIGFib3J0ZWQgYWZ0ZXIgfjExIG1pbnV0ZXMgb2YgcmV0cmllcy4KKwordGNwX3JldHJpZXMxIC0gSU5URUdFUgorCUhvdyBtYW55IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBkZWNpZGluZyB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZworCWFuZCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVwb3J0IHRoaXMgc3VzcGljaW9uIHRvIG5ldHdvcmsgbGF5ZXIuCisJTWluaW1hbCBSRkMgdmFsdWUgaXMgMywgaXQgaXMgZGVmYXVsdCwgd2hpY2ggY29ycmVzcG9uZHMKKwl0byB+M3NlYy04bWluIGRlcGVuZGluZyBvbiBSVE8uCisKK3RjcF9yZXRyaWVzMiAtIElOVEVHRVIKKwlIb3cgbWF5IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBraWxsaW5nIGFsaXZlIFRDUCBjb25uZWN0aW9uLgorCVJGQzExMjIgc2F5cyB0aGF0IHRoZSBsaW1pdCBzaG91bGQgYmUgbG9uZ2VyIHRoYW4gMTAwIHNlYy4KKwlJdCBpcyB0b28gc21hbGwgbnVtYmVyLglEZWZhdWx0IHZhbHVlIDE1IGNvcnJlc3BvbmRzIHRvIH4xMy0zMG1pbgorCWRlcGVuZGluZyBvbiBSVE8uCisKK3RjcF9vcnBoYW5fcmV0cmllcyAtIElOVEVHRVIKKwlIb3cgbWF5IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBraWxsaW5nIFRDUCBjb25uZWN0aW9uLCBjbG9zZWQKKwlieSBvdXIgc2lkZS4gRGVmYXVsdCB2YWx1ZSA3IGNvcnJlc3BvbmRzIHRvIH41MHNlYy0xNm1pbgorCWRlcGVuZGluZyBvbiBSVE8uIElmIHlvdSBtYWNoaW5lIGlzIGxvYWRlZCBXRUIgc2VydmVyLAorCXlvdSBzaG91bGQgdGhpbmsgYWJvdXQgbG93ZXJpbmcgdGhpcyB2YWx1ZSwgc3VjaCBzb2NrZXRzCisJbWF5IGNvbnN1bWUgc2lnbmlmaWNhbnQgcmVzb3VyY2VzLiBDZi4gdGNwX21heF9vcnBoYW5zLgorCit0Y3BfZmluX3RpbWVvdXQgLSBJTlRFR0VSCisJVGltZSB0byBob2xkIHNvY2tldCBpbiBzdGF0ZSBGSU4tV0FJVC0yLCBpZiBpdCB3YXMgY2xvc2VkCisJYnkgb3VyIHNpZGUuIFBlZXIgY2FuIGJlIGJyb2tlbiBhbmQgbmV2ZXIgY2xvc2UgaXRzIHNpZGUsCisJb3IgZXZlbiBkaWVkIHVuZXhwZWN0ZWRseS4gRGVmYXVsdCB2YWx1ZSBpcyA2MHNlYy4KKwlVc3VhbCB2YWx1ZSB1c2VkIGluIDIuMiB3YXMgMTgwIHNlY29uZHMsIHlvdSBtYXkgcmVzdG9yZQorCWl0LCBidXQgcmVtZW1iZXIgdGhhdCBpZiB5b3VyIG1hY2hpbmUgaXMgZXZlbiB1bmRlcmxvYWRlZCBXRUIgc2VydmVyLAorCXlvdSByaXNrIHRvIG92ZXJmbG93IG1lbW9yeSB3aXRoIGtpbG90b25zIG9mIGRlYWQgc29ja2V0cywKKwlGSU4tV0FJVC0yIHNvY2tldHMgYXJlIGxlc3MgZGFuZ2Vyb3VzIHRoYW4gRklOLVdBSVQtMSwKKwliZWNhdXNlIHRoZXkgZWF0IG1heGltdW0gMS41SyBvZiBtZW1vcnksIGJ1dCB0aGV5IHRlbmQKKwl0byBsaXZlIGxvbmdlci4JQ2YuIHRjcF9tYXhfb3JwaGFucy4KKwordGNwX21heF90d19idWNrZXRzIC0gSU5URUdFUgorCU1heGltYWwgbnVtYmVyIG9mIHRpbWV3YWl0IHNvY2tldHMgaGVsZCBieSBzeXN0ZW0gc2ltdWx0YW5lb3VzbHkuCisJSWYgdGhpcyBudW1iZXIgaXMgZXhjZWVkZWQgdGltZS13YWl0IHNvY2tldCBpcyBpbW1lZGlhdGVseSBkZXN0cm95ZWQKKwlhbmQgd2FybmluZyBpcyBwcmludGVkLiBUaGlzIGxpbWl0IGV4aXN0cyBvbmx5IHRvIHByZXZlbnQKKwlzaW1wbGUgRG9TIGF0dGFja3MsIHlvdSBfbXVzdF8gbm90IGxvd2VyIHRoZSBsaW1pdCBhcnRpZmljaWFsbHksCisJYnV0IHJhdGhlciBpbmNyZWFzZSBpdCAocHJvYmFibHksIGFmdGVyIGluY3JlYXNpbmcgaW5zdGFsbGVkIG1lbW9yeSksCisJaWYgbmV0d29yayBjb25kaXRpb25zIHJlcXVpcmUgbW9yZSB0aGFuIGRlZmF1bHQgdmFsdWUuCisKK3RjcF90d19yZWN5Y2xlIC0gQk9PTEVBTgorCUVuYWJsZSBmYXN0IHJlY3ljbGluZyBUSU1FLVdBSVQgc29ja2V0cy4gRGVmYXVsdCB2YWx1ZSBpcyAwLgorCUl0IHNob3VsZCBub3QgYmUgY2hhbmdlZCB3aXRob3V0IGFkdmljZS9yZXF1ZXN0IG9mIHRlY2huaWNhbAorCWV4cGVydHMuCisKK3RjcF90d19yZXVzZSAtIEJPT0xFQU4KKwlBbGxvdyB0byByZXVzZSBUSU1FLVdBSVQgc29ja2V0cyBmb3IgbmV3IGNvbm5lY3Rpb25zIHdoZW4gaXQgaXMKKwlzYWZlIGZyb20gcHJvdG9jb2wgdmlld3BvaW50LiBEZWZhdWx0IHZhbHVlIGlzIDAuCisJSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgYWR2aWNlL3JlcXVlc3Qgb2YgdGVjaG5pY2FsCisJZXhwZXJ0cy4KKwordGNwX21heF9vcnBoYW5zIC0gSU5URUdFUgorCU1heGltYWwgbnVtYmVyIG9mIFRDUCBzb2NrZXRzIG5vdCBhdHRhY2hlZCB0byBhbnkgdXNlciBmaWxlIGhhbmRsZSwKKwloZWxkIGJ5IHN5c3RlbS4JSWYgdGhpcyBudW1iZXIgaXMgZXhjZWVkZWQgb3JwaGFuZWQgY29ubmVjdGlvbnMgYXJlCisJcmVzZXQgaW1tZWRpYXRlbHkgYW5kIHdhcm5pbmcgaXMgcHJpbnRlZC4gVGhpcyBsaW1pdCBleGlzdHMKKwlvbmx5IHRvIHByZXZlbnQgc2ltcGxlIERvUyBhdHRhY2tzLCB5b3UgX211c3RfIG5vdCByZWx5IG9uIHRoaXMKKwlvciBsb3dlciB0aGUgbGltaXQgYXJ0aWZpY2lhbGx5LCBidXQgcmF0aGVyIGluY3JlYXNlIGl0CisJKHByb2JhYmx5LCBhZnRlciBpbmNyZWFzaW5nIGluc3RhbGxlZCBtZW1vcnkpLAorCWlmIG5ldHdvcmsgY29uZGl0aW9ucyByZXF1aXJlIG1vcmUgdGhhbiBkZWZhdWx0IHZhbHVlLAorCWFuZCB0dW5lIG5ldHdvcmsgc2VydmljZXMgdG8gbGluZ2VyIGFuZCBraWxsIHN1Y2ggc3RhdGVzCisJbW9yZSBhZ2dyZXNzaXZlbHkuIExldCBtZSB0byByZW1pbmQgYWdhaW46IGVhY2ggb3JwaGFuIGVhdHMKKwl1cCB0byB+NjRLIG9mIHVuc3dhcHBhYmxlIG1lbW9yeS4KKwordGNwX2Fib3J0X29uX292ZXJmbG93IC0gQk9PTEVBTgorCUlmIGxpc3RlbmluZyBzZXJ2aWNlIGlzIHRvbyBzbG93IHRvIGFjY2VwdCBuZXcgY29ubmVjdGlvbnMsCisJcmVzZXQgdGhlbS4gRGVmYXVsdCBzdGF0ZSBpcyBGQUxTRS4gSXQgbWVhbnMgdGhhdCBpZiBvdmVyZmxvdworCW9jY3VycmVkIGR1ZSB0byBhIGJ1cnN0LCBjb25uZWN0aW9uIHdpbGwgcmVjb3Zlci4gRW5hYmxlIHRoaXMKKwlvcHRpb24gX29ubHlfIGlmIHlvdSBhcmUgcmVhbGx5IHN1cmUgdGhhdCBsaXN0ZW5pbmcgZGFlbW9uCisJY2Fubm90IGJlIHR1bmVkIHRvIGFjY2VwdCBjb25uZWN0aW9ucyBmYXN0ZXIuIEVuYWJsaW5nIHRoaXMKKwlvcHRpb24gY2FuIGhhcm0gY2xpZW50cyBvZiB5b3VyIHNlcnZlci4KKwordGNwX3N5bmNvb2tpZXMgLSBCT09MRUFOCisJT25seSB2YWxpZCB3aGVuIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggQ09ORklHX1NZTkNPT0tJRVMKKwlTZW5kIG91dCBzeW5jb29raWVzIHdoZW4gdGhlIHN5biBiYWNrbG9nIHF1ZXVlIG9mIGEgc29ja2V0IAorCW92ZXJmbG93cy4gVGhpcyBpcyB0byBwcmV2ZW50IGFnYWluc3QgdGhlIGNvbW1vbiAnc3luIGZsb29kIGF0dGFjaycKKwlEZWZhdWx0OiBGQUxTRQorCisJTm90ZSwgdGhhdCBzeW5jb29raWVzIGlzIGZhbGxiYWNrIGZhY2lsaXR5LgorCUl0IE1VU1QgTk9UIGJlIHVzZWQgdG8gaGVscCBoaWdobHkgbG9hZGVkIHNlcnZlcnMgdG8gc3RhbmQKKwlhZ2FpbnN0IGxlZ2FsIGNvbm5lY3Rpb24gcmF0ZS4gSWYgeW91IHNlZSBzeW5mbG9vZCB3YXJuaW5ncworCWluIHlvdXIgbG9ncywgYnV0IGludmVzdGlnYXRpb24Jc2hvd3MgdGhhdCB0aGV5IG9jY3VyCisJYmVjYXVzZSBvZiBvdmVybG9hZCB3aXRoIGxlZ2FsIGNvbm5lY3Rpb25zLCB5b3Ugc2hvdWxkIHR1bmUKKwlhbm90aGVyIHBhcmFtZXRlcnMgdW50aWwgdGhpcyB3YXJuaW5nIGRpc2FwcGVhci4KKwlTZWU6IHRjcF9tYXhfc3luX2JhY2tsb2csIHRjcF9zeW5hY2tfcmV0cmllcywgdGNwX2Fib3J0X29uX292ZXJmbG93LgorCisJc3luY29va2llcyBzZXJpb3VzbHkgdmlvbGF0ZSBUQ1AgcHJvdG9jb2wsIGRvIG5vdCBhbGxvdworCXRvIHVzZSBUQ1AgZXh0ZW5zaW9ucywgY2FuIHJlc3VsdCBpbiBzZXJpb3VzIGRlZ3JhZGF0aW9uCisJb2Ygc29tZSBzZXJ2aWNlcyAoZi5lLiBTTVRQIHJlbGF5aW5nKSwgdmlzaWJsZSBub3QgYnkgeW91LAorCWJ1dCB5b3VyIGNsaWVudHMgYW5kIHJlbGF5cywgY29udGFjdGluZyB5b3UuIFdoaWxlIHlvdSBzZWUKKwlzeW5mbG9vZCB3YXJuaW5ncyBpbiBsb2dzIG5vdCBiZWluZyByZWFsbHkgZmxvb2RlZCwgeW91ciBzZXJ2ZXIKKwlpcyBzZXJpb3VzbHkgbWlzY29uZmlndXJlZC4KKwordGNwX3N0ZHVyZyAtIEJPT0xFQU4KKwlVc2UgdGhlIEhvc3QgcmVxdWlyZW1lbnRzIGludGVycHJldGF0aW9uIG9mIHRoZSBUQ1AgdXJnIHBvaW50ZXIgZmllbGQuCisJTW9zdCBob3N0cyB1c2UgdGhlIG9sZGVyIEJTRCBpbnRlcnByZXRhdGlvbiwgc28gaWYgeW91IHR1cm4gdGhpcyBvbgorCUxpbnV4IG1pZ2h0IG5vdCBjb21tdW5pY2F0ZSBjb3JyZWN0bHkgd2l0aCB0aGVtLgkKKwlEZWZhdWx0OiBGQUxTRSAKKwkKK3RjcF9tYXhfc3luX2JhY2tsb2cgLSBJTlRFR0VSCisJTWF4aW1hbCBudW1iZXIgb2YgcmVtZW1iZXJlZCBjb25uZWN0aW9uIHJlcXVlc3RzLCB3aGljaCBhcmUKKwlzdGlsbCBkaWQgbm90IHJlY2VpdmUgYW4gYWNrbm93bGVkZ21lbnQgZnJvbSBjb25uZWN0aW5nIGNsaWVudC4KKwlEZWZhdWx0IHZhbHVlIGlzIDEwMjQgZm9yIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gMTI4TWIgb2YgbWVtb3J5LAorCWFuZCAxMjggZm9yIGxvdyBtZW1vcnkgbWFjaGluZXMuIElmIHNlcnZlciBzdWZmZXJzIG9mIG92ZXJsb2FkLAorCXRyeSB0byBpbmNyZWFzZSB0aGlzIG51bWJlci4KKwordGNwX3dpbmRvd19zY2FsaW5nIC0gQk9PTEVBTgorCUVuYWJsZSB3aW5kb3cgc2NhbGluZyBhcyBkZWZpbmVkIGluIFJGQzEzMjMuCisKK3RjcF90aW1lc3RhbXBzIC0gQk9PTEVBTgorCUVuYWJsZSB0aW1lc3RhbXBzIGFzIGRlZmluZWQgaW4gUkZDMTMyMy4KKwordGNwX3NhY2sgLSBCT09MRUFOCisJRW5hYmxlIHNlbGVjdCBhY2tub3dsZWRnbWVudHMgKFNBQ0tTKS4KKwordGNwX2ZhY2sgLSBCT09MRUFOCisJRW5hYmxlIEZBQ0sgY29uZ2VzdGlvbiBhdm9pZGFuY2UgYW5kIGZhc3QgcmV0cmFuc21pc3Npb24uCisJVGhlIHZhbHVlIGlzIG5vdCB1c2VkLCBpZiB0Y3Bfc2FjayBpcyBub3QgZW5hYmxlZC4KKwordGNwX2RzYWNrIC0gQk9PTEVBTgorCUFsbG93cyBUQ1AgdG8gc2VuZCAiZHVwbGljYXRlIiBTQUNLcy4KKwordGNwX2VjbiAtIEJPT0xFQU4KKwlFbmFibGUgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gaW4gVENQLgorCit0Y3BfcmVvcmRlcmluZyAtIElOVEVHRVIKKwlNYXhpbWFsIHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpbiBhIFRDUCBzdHJlYW0uCisJRGVmYXVsdDogMwkKKwordGNwX3JldHJhbnNfY29sbGFwc2UgLSBCT09MRUFOCisJQnVnLXRvLWJ1ZyBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBicm9rZW4gcHJpbnRlcnMuCisJT24gcmV0cmFuc21pdCB0cnkgdG8gc2VuZCBiaWdnZXIgcGFja2V0cyB0byB3b3JrIGFyb3VuZCBidWdzIGluCisJY2VydGFpbiBUQ1Agc3RhY2tzLgorCit0Y3Bfd21lbSAtIHZlY3RvciBvZiAzIElOVEVHRVJzOiBtaW4sIGRlZmF1bHQsIG1heAorCW1pbjogQW1vdW50IG9mIG1lbW9yeSByZXNlcnZlZCBmb3Igc2VuZCBidWZmZXJzIGZvciBUQ1Agc29ja2V0LgorCUVhY2ggVENQIHNvY2tldCBoYXMgcmlnaHRzIHRvIHVzZSBpdCBkdWUgdG8gZmFjdCBvZiBpdHMgYmlydGguCisJRGVmYXVsdDogNEsKKworCWRlZmF1bHQ6IEFtb3VudCBvZiBtZW1vcnkgYWxsb3dlZCBmb3Igc2VuZCBidWZmZXJzIGZvciBUQ1Agc29ja2V0CisJYnkgZGVmYXVsdC4gVGhpcyB2YWx1ZSBvdmVycmlkZXMgbmV0LmNvcmUud21lbV9kZWZhdWx0IHVzZWQKKwlieSBvdGhlciBwcm90b2NvbHMsIGl0IGlzIHVzdWFsbHkgbG93ZXIgdGhhbiBuZXQuY29yZS53bWVtX2RlZmF1bHQuCisJRGVmYXVsdDogMTZLCisKKwltYXg6IE1heGltYWwgYW1vdW50IG9mIG1lbW9yeSBhbGxvd2VkIGZvciBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkCisJc2VuZCBidWZmZXJzIGZvciBUQ1Agc29ja2V0LiBUaGlzIHZhbHVlIGRvZXMgbm90IG92ZXJyaWRlCisJbmV0LmNvcmUud21lbV9tYXgsICJzdGF0aWMiIHNlbGVjdGlvbiB2aWEgU09fU05EQlVGIGRvZXMgbm90IHVzZSB0aGlzLgorCURlZmF1bHQ6IDEyOEsKKwordGNwX3JtZW0gLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBkZWZhdWx0LCBtYXgKKwltaW46IE1pbmltYWwgc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlciB1c2VkIGJ5IFRDUCBzb2NrZXRzLgorCUl0IGlzIGd1YXJhbnRlZWQgdG8gZWFjaCBUQ1Agc29ja2V0LCBldmVuIHVuZGVyIG1vZGVyYXRlIG1lbW9yeQorCXByZXNzdXJlLgorCURlZmF1bHQ6IDhLCisKKwlkZWZhdWx0OiBkZWZhdWx0IHNpemUgb2YgcmVjZWl2ZSBidWZmZXIgdXNlZCBieSBUQ1Agc29ja2V0cy4KKwlUaGlzIHZhbHVlIG92ZXJyaWRlcyBuZXQuY29yZS5ybWVtX2RlZmF1bHQgdXNlZCBieSBvdGhlciBwcm90b2NvbHMuCisJRGVmYXVsdDogODczODAgYnl0ZXMuIFRoaXMgdmFsdWUgcmVzdWx0cyBpbiB3aW5kb3cgb2YgNjU1MzUgd2l0aAorCWRlZmF1bHQgc2V0dGluZyBvZiB0Y3BfYWR2X3dpbl9zY2FsZSBhbmQgdGNwX2FwcF93aW46MCBhbmQgYSBiaXQKKwlsZXNzIGZvciBkZWZhdWx0IHRjcF9hcHBfd2luLiBTZWUgYmVsb3cgYWJvdXQgdGhlc2UgdmFyaWFibGVzLgorCisJbWF4OiBtYXhpbWFsIHNpemUgb2YgcmVjZWl2ZSBidWZmZXIgYWxsb3dlZCBmb3IgYXV0b21hdGljYWxseQorCXNlbGVjdGVkIHJlY2VpdmVyIGJ1ZmZlcnMgZm9yIFRDUCBzb2NrZXQuIFRoaXMgdmFsdWUgZG9lcyBub3Qgb3ZlcnJpZGUKKwluZXQuY29yZS5ybWVtX21heCwgInN0YXRpYyIgc2VsZWN0aW9uIHZpYSBTT19SQ1ZCVUYgZG9lcyBub3QgdXNlIHRoaXMuCisJRGVmYXVsdDogODczODAqMiBieXRlcy4KKwordGNwX21lbSAtIHZlY3RvciBvZiAzIElOVEVHRVJzOiBtaW4sIHByZXNzdXJlLCBtYXgKKwlsb3c6IGJlbG93IHRoaXMgbnVtYmVyIG9mIHBhZ2VzIFRDUCBpcyBub3QgYm90aGVyZWQgYWJvdXQgaXRzCisJbWVtb3J5IGFwcGV0aXRlLgorCisJcHJlc3N1cmU6IHdoZW4gYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgYnkgVENQIGV4Y2VlZHMgdGhpcyBudW1iZXIKKwlvZiBwYWdlcywgVENQIG1vZGVyYXRlcyBpdHMgbWVtb3J5IGNvbnN1bXB0aW9uIGFuZCBlbnRlcnMgbWVtb3J5CisJcHJlc3N1cmUgbW9kZSwgd2hpY2ggaXMgZXhpdGVkIHdoZW4gbWVtb3J5IGNvbnN1bXB0aW9uIGZhbGxzCisJdW5kZXIgImxvdyIuCisKKwloaWdoOiBudW1iZXIgb2YgcGFnZXMgYWxsb3dlZCBmb3IgcXVldWVpbmcgYnkgYWxsIFRDUCBzb2NrZXRzLgorCisJRGVmYXVsdHMgYXJlIGNhbGN1bGF0ZWQgYXQgYm9vdCB0aW1lIGZyb20gYW1vdW50IG9mIGF2YWlsYWJsZQorCW1lbW9yeS4KKwordGNwX2FwcF93aW4gLSBJTlRFR0VSCisJUmVzZXJ2ZSBtYXgod2luZG93LzJedGNwX2FwcF93aW4sIG1zcykgb2Ygd2luZG93IGZvciBhcHBsaWNhdGlvbgorCWJ1ZmZlci4gVmFsdWUgMCBpcyBzcGVjaWFsLCBpdCBtZWFucyB0aGF0IG5vdGhpbmcgaXMgcmVzZXJ2ZWQuCisJRGVmYXVsdDogMzEKKwordGNwX2Fkdl93aW5fc2NhbGUgLSBJTlRFR0VSCisJQ291bnQgYnVmZmVyaW5nIG92ZXJoZWFkIGFzIGJ5dGVzLzJedGNwX2Fkdl93aW5fc2NhbGUKKwkoaWYgdGNwX2Fkdl93aW5fc2NhbGUgPiAwKSBvciBieXRlcy1ieXRlcy8yXigtdGNwX2Fkdl93aW5fc2NhbGUpLAorCWlmIGl0IGlzIDw9IDAuCisJRGVmYXVsdDogMgorCit0Y3BfcmZjMTMzNyAtIEJPT0xFQU4KKwlJZiBzZXQsIHRoZSBUQ1Agc3RhY2sgYmVoYXZlcyBjb25mb3JtaW5nIHRvIFJGQzEzMzcuIElmIHVuc2V0LAorCXdlIGFyZSBub3QgY29uZm9ybWluZyB0byBSRkMsIGJ1dCBwcmV2ZW50IFRDUCBUSU1FX1dBSVQKKwlhc3Nhc3NpbmF0aW9uLiAgIAorCURlZmF1bHQ6IDAKKwordGNwX2xvd19sYXRlbmN5IC0gQk9PTEVBTgorCUlmIHNldCwgdGhlIFRDUCBzdGFjayBtYWtlcyBkZWNpc2lvbnMgdGhhdCBwcmVmZXIgbG93ZXIKKwlsYXRlbmN5IGFzIG9wcG9zZWQgdG8gaGlnaGVyIHRocm91Z2hwdXQuICBCeSBkZWZhdWx0LCB0aGlzCisJb3B0aW9uIGlzIG5vdCBzZXQgbWVhbmluZyB0aGF0IGhpZ2hlciB0aHJvdWdocHV0IGlzIHByZWZlcnJlZC4KKwlBbiBleGFtcGxlIG9mIGFuIGFwcGxpY2F0aW9uIHdoZXJlIHRoaXMgZGVmYXVsdCBzaG91bGQgYmUKKwljaGFuZ2VkIHdvdWxkIGJlIGEgQmVvd3VsZiBjb21wdXRlIGNsdXN0ZXIuCisJRGVmYXVsdDogMAorCit0Y3Bfd2VzdHdvb2QgLSBCT09MRUFOCisgICAgICAgIEVuYWJsZSBUQ1AgV2VzdHdvb2QrIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0uCisJVENQIFdlc3R3b29kKyBpcyBhIHNlbmRlci1zaWRlIG9ubHkgbW9kaWZpY2F0aW9uIG9mIHRoZSBUQ1AgUmVubyAKKwlwcm90b2NvbCBzdGFjayB0aGF0IG9wdGltaXplcyB0aGUgcGVyZm9ybWFuY2Ugb2YgVENQIGNvbmdlc3Rpb24gCisJY29udHJvbC4gSXQgaXMgYmFzZWQgb24gZW5kLXRvLWVuZCBiYW5kd2lkdGggZXN0aW1hdGlvbiB0byBzZXQgCisJY29uZ2VzdGlvbiB3aW5kb3cgYW5kIHNsb3cgc3RhcnQgdGhyZXNob2xkIGFmdGVyIGEgY29uZ2VzdGlvbiAKKwllcGlzb2RlLiBVc2luZyB0aGlzIGVzdGltYXRpb24sIFRDUCBXZXN0d29vZCsgYWRhcHRpdmVseSBzZXRzIGEgCisJc2xvdyBzdGFydCB0aHJlc2hvbGQgYW5kIGEgY29uZ2VzdGlvbiB3aW5kb3cgd2hpY2ggdGFrZXMgaW50byAKKwlhY2NvdW50IHRoZSBiYW5kd2lkdGggdXNlZCAgYXQgdGhlIHRpbWUgY29uZ2VzdGlvbiBpcyBleHBlcmllbmNlZC4gCisJVENQIFdlc3R3b29kKyBzaWduaWZpY2FudGx5IGluY3JlYXNlcyBmYWlybmVzcyB3cnQgVENQIFJlbm8gaW4gCisJd2lyZWQgbmV0d29ya3MgYW5kIHRocm91Z2hwdXQgb3ZlciB3aXJlbGVzcyBsaW5rcy4gICAKKyAgICAgICAgRGVmYXVsdDogMAorCit0Y3BfdmVnYXNfY29uZ19hdm9pZCAtIEJPT0xFQU4KKwlFbmFibGUgVENQIFZlZ2FzIGNvbmdlc3Rpb24gYXZvaWRhbmNlIGFsZ29yaXRobS4KKwlUQ1AgVmVnYXMgaXMgYSBzZW5kZXItc2lkZSBvbmx5IGNoYW5nZSB0byBUQ1AgdGhhdCBhbnRpY2lwYXRlcworCXRoZSBvbnNldCBvZiBjb25nZXN0aW9uIGJ5IGVzdGltYXRpbmcgdGhlIGJhbmR3aWR0aC4gVENQIFZlZ2FzCisJYWRqdXN0cyB0aGUgc2VuZGluZyByYXRlIGJ5IG1vZGlmeWluZyB0aGUgY29uZ2VzdGlvbgorCXdpbmRvdy4gVENQIFZlZ2FzIHNob3VsZCBwcm92aWRlIGxlc3MgcGFja2V0IGxvc3MsIGJ1dCBpdCBpcworCW5vdCBhcyBhZ2dyZXNzaXZlIGFzIFRDUCBSZW5vLgorCURlZmF1bHQ6MAorCit0Y3BfYmljIC0gQk9PTEVBTgorCUVuYWJsZSBCSUMgVENQIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0uCisJQklDLVRDUCBpcyBhIHNlbmRlci1zaWRlIG9ubHkgY2hhbmdlIHRoYXQgZW5zdXJlcyBhIGxpbmVhciBSVFQKKwlmYWlybmVzcyB1bmRlciBsYXJnZSB3aW5kb3dzIHdoaWxlIG9mZmVyaW5nIGJvdGggc2NhbGFiaWxpdHkgYW5kCisJYm91bmRlZCBUQ1AtZnJpZW5kbGluZXNzLiBUaGUgcHJvdG9jb2wgY29tYmluZXMgdHdvIHNjaGVtZXMKKwljYWxsZWQgYWRkaXRpdmUgaW5jcmVhc2UgYW5kIGJpbmFyeSBzZWFyY2ggaW5jcmVhc2UuIFdoZW4gdGhlCisJY29uZ2VzdGlvbiB3aW5kb3cgaXMgbGFyZ2UsIGFkZGl0aXZlIGluY3JlYXNlIHdpdGggYSBsYXJnZQorCWluY3JlbWVudCBlbnN1cmVzIGxpbmVhciBSVFQgZmFpcm5lc3MgYXMgd2VsbCBhcyBnb29kCisJc2NhbGFiaWxpdHkuIFVuZGVyIHNtYWxsIGNvbmdlc3Rpb24gd2luZG93cywgYmluYXJ5IHNlYXJjaAorCWluY3JlYXNlIHByb3ZpZGVzIFRDUCBmcmllbmRsaW5lc3MuCisJRGVmYXVsdDogMAorCit0Y3BfYmljX2xvd193aW5kb3cgLSBJTlRFR0VSCisJU2V0cyB0aGUgdGhyZXNob2xkIHdpbmRvdyAoaW4gcGFja2V0cykgd2hlcmUgQklDIFRDUCBzdGFydHMgdG8KKwlhZGp1c3QgdGhlIGNvbmdlc3Rpb24gd2luZG93LiBCZWxvdyB0aGlzIHRocmVzaG9sZCBCSUMgVENQIGJlaGF2ZXMKKwl0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdCBUQ1AgUmVuby4gCisJRGVmYXVsdDogMTQKKwordGNwX2JpY19mYXN0X2NvbnZlcmdlbmNlIC0gQk9PTEVBTgorCUZvcmNlcyBCSUMgVENQIHRvIG1vcmUgcXVpY2tseSByZXNwb25kIHRvIGNoYW5nZXMgaW4gY29uZ2VzdGlvbgorCXdpbmRvdy4gQWxsb3dzIHR3byBmbG93cyBzaGFyaW5nIHRoZSBzYW1lIGNvbm5lY3Rpb24gdG8gY29udmVyZ2UKKwltb3JlIHJhcGlkbHkuCisJRGVmYXVsdDogMQorCit0Y3BfZGVmYXVsdF93aW5fc2NhbGUgLSBJTlRFR0VSCisJU2V0cyB0aGUgbWluaW11bSB3aW5kb3cgc2NhbGUgVENQIHdpbGwgbmVnb3RpYXRlIGZvciBvbiBhbGwKKwljb25lY3Rpb25zLgorCURlZmF1bHQ6IDcKKwordGNwX3Rzb193aW5fZGl2aXNvciAtIElOVEVHRVIKKyAgICAgICBUaGlzIGFsbG93cyBjb250cm9sIG92ZXIgd2hhdCBwZXJjZW50YWdlIG9mIHRoZSBjb25nZXN0aW9uIHdpbmRvdworICAgICAgIGNhbiBiZSBjb25zdW1lZCBieSBhIHNpbmdsZSBUU08gZnJhbWUuCisgICAgICAgVGhlIHNldHRpbmcgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgYSBjaG9pY2UgYmV0d2VlbiBidXJzdGluZXNzIGFuZAorICAgICAgIGJ1aWxkaW5nIGxhcmdlciBUU08gZnJhbWVzLgorICAgICAgIERlZmF1bHQ6IDgKKwordGNwX2ZydG8gLSBCT09MRUFOCisJRW5hYmxlcyBGLVJUTywgYW4gZW5oYW5jZWQgcmVjb3ZlcnkgYWxnb3JpdGhtIGZvciBUQ1AgcmV0cmFuc21pc3Npb24KKwl0aW1lb3V0cy4gIEl0IGlzIHBhcnRpY3VsYXJseSBiZW5lZmljaWFsIGluIHdpcmVsZXNzIGVudmlyb25tZW50cworCXdoZXJlIHBhY2tldCBsb3NzIGlzIHR5cGljYWxseSBkdWUgdG8gcmFuZG9tIHJhZGlvIGludGVyZmVyZW5jZQorCXJhdGhlciB0aGFuIGludGVybWVkaWF0ZSByb3V0ZXIgY29uZ2VzdGlvbi4KKworc29tYXhjb25uIC0gSU5URUdFUgorCUxpbWl0IG9mIHNvY2tldCBsaXN0ZW4oKSBiYWNrbG9nLCBrbm93biBpbiB1c2Vyc3BhY2UgYXMgU09NQVhDT05OLgorCURlZmF1bHRzIHRvIDEyOC4gIFNlZSBhbHNvIHRjcF9tYXhfc3luX2JhY2tsb2cgZm9yIGFkZGl0aW9uYWwgdHVuaW5nCisJZm9yIFRDUCBzb2NrZXRzLgorCitJUCBWYXJpYWJsZXM6CisKK2lwX2xvY2FsX3BvcnRfcmFuZ2UgLSAyIElOVEVHRVJTCisJRGVmaW5lcyB0aGUgbG9jYWwgcG9ydCByYW5nZSB0aGF0IGlzIHVzZWQgYnkgVENQIGFuZCBVRFAgdG8KKwljaG9vc2UgdGhlIGxvY2FsIHBvcnQuIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGZpcnN0LCB0aGUgCisJc2Vjb25kIHRoZSBsYXN0IGxvY2FsIHBvcnQgbnVtYmVyLiBEZWZhdWx0IHZhbHVlIGRlcGVuZHMgb24KKwlhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtOgorCT4gMTI4TWIgMzI3NjgtNjEwMDAKKwk8IDEyOE1iIDEwMjQtNDk5OSBvciBldmVuIGxlc3MuCisJVGhpcyBudW1iZXIgZGVmaW5lcyBudW1iZXIgb2YgYWN0aXZlIGNvbm5lY3Rpb25zLCB3aGljaCB0aGlzCisJc3lzdGVtIGNhbiBpc3N1ZSBzaW11bHRhbmVvdXNseSB0byBzeXN0ZW1zIG5vdCBzdXBwb3J0aW5nCisJVENQIGV4dGVuc2lvbnMgKHRpbWVzdGFtcHMpLiBXaXRoIHRjcF90d19yZWN5Y2xlIGVuYWJsZWQKKwkoaS5lLiBieSBkZWZhdWx0KSByYW5nZSAxMDI0LTQ5OTkgaXMgZW5vdWdoIHRvIGlzc3VlIHVwIHRvCisJMjAwMCBjb25uZWN0aW9ucyBwZXIgc2Vjb25kIHRvIHN5c3RlbXMgc3VwcG9ydGluZyB0aW1lc3RhbXBzLgorCitpcF9ub25sb2NhbF9iaW5kIC0gQk9PTEVBTgorCUlmIHNldCwgYWxsb3dzIHByb2Nlc3NlcyB0byBiaW5kKCkgdG8gbm9uLWxvY2FsIElQIGFkZHJlc3NlcywKKwl3aGljaCBjYW4gYmUgcXVpdGUgdXNlZnVsIC0gYnV0IG1heSBicmVhayBzb21lIGFwcGxpY2F0aW9ucy4KKwlEZWZhdWx0OiAwCisKK2lwX2R5bmFkZHIgLSBCT09MRUFOCisJSWYgc2V0IG5vbi16ZXJvLCBlbmFibGVzIHN1cHBvcnQgZm9yIGR5bmFtaWMgYWRkcmVzc2VzLgorCUlmIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlIGxhcmdlciB0aGFuIDEsIGEga2VybmVsIGxvZworCW1lc3NhZ2Ugd2lsbCBiZSBwcmludGVkIHdoZW4gZHluYW1pYyBhZGRyZXNzIHJld3JpdGluZworCW9jY3Vycy4KKwlEZWZhdWx0OiAwCisKK2ljbXBfZWNob19pZ25vcmVfYWxsIC0gQk9PTEVBTgoraWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzIC0gQk9PTEVBTgorCUlmIGVpdGhlciBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgaWdub3JlIGVpdGhlciBhbGwKKwlJQ01QIEVDSE8gcmVxdWVzdHMgc2VudCB0byBpdCBvciBqdXN0IHRob3NlIHRvIGJyb2FkY2FzdC9tdWx0aWNhc3QKKwlhZGRyZXNzZXMsIHJlc3BlY3RpdmVseS4KKworaWNtcF9yYXRlbGltaXQgLSBJTlRFR0VSCisJTGltaXQgdGhlIG1heGltYWwgcmF0ZXMgZm9yIHNlbmRpbmcgSUNNUCBwYWNrZXRzIHdob3NlIHR5cGUgbWF0Y2hlcworCWljbXBfcmF0ZW1hc2sgKHNlZSBiZWxvdykgdG8gc3BlY2lmaWMgdGFyZ2V0cy4KKwkwIHRvIGRpc2FibGUgYW55IGxpbWl0aW5nLCBvdGhlcndpc2UgdGhlIG1heGltYWwgcmF0ZSBpbiBqaWZmaWVzKDEpCisJRGVmYXVsdDogMTAwCisKK2ljbXBfcmF0ZW1hc2sgLSBJTlRFR0VSCisJTWFzayBtYWRlIG9mIElDTVAgdHlwZXMgZm9yIHdoaWNoIHJhdGVzIGFyZSBiZWluZyBsaW1pdGVkLgorCVNpZ25pZmljYW50IGJpdHM6IElIR0ZFRENCQTk4NzY1NDMyMTAKKwlEZWZhdWx0IG1hc2s6ICAgICAwMDAwMDAxMTAwMDAwMDExMDAwICg2MTY4KQorCisJQml0IGRlZmluaXRpb25zIChzZWUgaW5jbHVkZS9saW51eC9pY21wLmgpOgorCQkwIEVjaG8gUmVwbHkKKwkJMyBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZSAqCisJCTQgU291cmNlIFF1ZW5jaCAqCisJCTUgUmVkaXJlY3QKKwkJOCBFY2hvIFJlcXVlc3QKKwkJQiBUaW1lIEV4Y2VlZGVkICoKKwkJQyBQYXJhbWV0ZXIgUHJvYmxlbSAqCisJCUQgVGltZXN0YW1wIFJlcXVlc3QKKwkJRSBUaW1lc3RhbXAgUmVwbHkKKwkJRiBJbmZvIFJlcXVlc3QKKwkJRyBJbmZvIFJlcGx5CisJCUggQWRkcmVzcyBNYXNrIFJlcXVlc3QKKwkJSSBBZGRyZXNzIE1hc2sgUmVwbHkKKworCSogVGhlc2UgYXJlIHJhdGUgbGltaXRlZCBieSBkZWZhdWx0IChzZWUgZGVmYXVsdCBtYXNrIGFib3ZlKQorCitpY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXMgLSBCT09MRUFOCisJU29tZSByb3V0ZXJzIHZpb2xhdGUgUkZDMTEyMiBieSBzZW5kaW5nIGJvZ3VzIHJlc3BvbnNlcyB0byBicm9hZGNhc3QKKwlmcmFtZXMuICBTdWNoIHZpb2xhdGlvbnMgYXJlIG5vcm1hbGx5IGxvZ2dlZCB2aWEgYSBrZXJuZWwgd2FybmluZy4KKwlJZiB0aGlzIGlzIHNldCB0byBUUlVFLCB0aGUga2VybmVsIHdpbGwgbm90IGdpdmUgc3VjaCB3YXJuaW5ncywgd2hpY2gKKwl3aWxsIGF2b2lkIGxvZyBmaWxlIGNsdXR0ZXIuCisJRGVmYXVsdDogRkFMU0UKKworaWdtcF9tYXhfbWVtYmVyc2hpcHMgLSBJTlRFR0VSCisJQ2hhbmdlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzIHdlIGNhbiBzdWJzY3JpYmUgdG8uCisJRGVmYXVsdDogMjAKKworY29uZi9pbnRlcmZhY2UvKiAgY2hhbmdlcyBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UgKHdoZXJlICJpbnRlcmZhY2UiIGlzIAorCQkgIHRoZSBuYW1lIG9mIHlvdXIgbmV0d29yayBpbnRlcmZhY2UpCitjb25mL2FsbC8qCSAgaXMgc3BlY2lhbCwgY2hhbmdlcyB0aGUgc2V0dGluZ3MgZm9yIGFsbCBpbnRlcmZhY2VzCisKKworbG9nX21hcnRpYW5zIC0gQk9PTEVBTgorCUxvZyBwYWNrZXRzIHdpdGggaW1wb3NzaWJsZSBhZGRyZXNzZXMgdG8ga2VybmVsIGxvZy4KKwlsb2dfbWFydGlhbnMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L2xvZ19tYXJ0aWFucyBpcyBzZXQgdG8gVFJVRSwKKwlpdCB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCithY2NlcHRfcmVkaXJlY3RzIC0gQk9PTEVBTgorCUFjY2VwdCBJQ01QIHJlZGlyZWN0IG1lc3NhZ2VzLgorCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmOgorCS0gYm90aCBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGFyZSBUUlVFIGluIHRoZSBjYXNlIGZvcndhcmRpbmcKKwkgIGZvciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKKwlvcgorCS0gYXQgbGVhc3Qgb25lIG9mIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSBpbiB0aGUgY2FzZQorCSAgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBkaXNhYmxlZAorCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKKwlkZWZhdWx0IFRSVUUgKGhvc3QpCisJCUZBTFNFIChyb3V0ZXIpCisKK2ZvcndhcmRpbmcgLSBCT09MRUFOCisJRW5hYmxlIElQIGZvcndhcmRpbmcgb24gdGhpcyBpbnRlcmZhY2UuCisKK21jX2ZvcndhcmRpbmcgLSBCT09MRUFOCisJRG8gbXVsdGljYXN0IHJvdXRpbmcuIFRoZSBrZXJuZWwgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBDT05GSUdfTVJPVVRFCisJYW5kIGEgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uIGlzIHJlcXVpcmVkLgorCWNvbmYvYWxsL21jX2ZvcndhcmRpbmcgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGVuYWJsZSBtdWx0aWNhc3Qgcm91dGluZworCWZvciB0aGUgaW50ZXJmYWNlCisKK21lZGl1bV9pZCAtIElOVEVHRVIKKwlJbnRlZ2VyIHZhbHVlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgZGV2aWNlcyBieSB0aGUgbWVkaXVtIHRoZXkKKwlhcmUgYXR0YWNoZWQgdG8uIFR3byBkZXZpY2VzIGNhbiBoYXZlIGRpZmZlcmVudCBpZCB2YWx1ZXMgd2hlbgorCXRoZSBicm9hZGNhc3QgcGFja2V0cyBhcmUgcmVjZWl2ZWQgb25seSBvbiBvbmUgb2YgdGhlbS4KKwlUaGUgZGVmYXVsdCB2YWx1ZSAwIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyB0aGUgb25seSBpbnRlcmZhY2UKKwl0byBpdHMgbWVkaXVtLCB2YWx1ZSBvZiAtMSBtZWFucyB0aGF0IG1lZGl1bSBpcyBub3Qga25vd24uCisJCisJQ3VycmVudGx5LCBpdCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgcHJveHlfYXJwIGJlaGF2aW9yOgorCXRoZSBwcm94eV9hcnAgZmVhdHVyZSBpcyBlbmFibGVkIGZvciBwYWNrZXRzIGZvcndhcmRlZCBiZXR3ZWVuCisJdHdvIGRldmljZXMgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG1lZGlhLgorCitwcm94eV9hcnAgLSBCT09MRUFOCisJRG8gcHJveHkgYXJwLgorCXByb3h5X2FycCBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWYgYXQgbGVhc3Qgb25lIG9mCisJY29uZi97YWxsLGludGVyZmFjZX0vcHJveHlfYXJwIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisKK3NoYXJlZF9tZWRpYSAtIEJPT0xFQU4KKwlTZW5kKHJvdXRlcikgb3IgYWNjZXB0KGhvc3QpIFJGQzE2MjAgc2hhcmVkIG1lZGlhIHJlZGlyZWN0cy4KKwlPdmVycmlkZXMgaXBfc2VjdXJlX3JlZGlyZWN0cy4KKwlzaGFyZWRfbWVkaWEgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L3NoYXJlZF9tZWRpYSBpcyBzZXQgdG8gVFJVRSwKKwlpdCB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCWRlZmF1bHQgVFJVRQorCitzZWN1cmVfcmVkaXJlY3RzIC0gQk9PTEVBTgorCUFjY2VwdCBJQ01QIHJlZGlyZWN0IG1lc3NhZ2VzIG9ubHkgZm9yIGdhdGV3YXlzLAorCWxpc3RlZCBpbiBkZWZhdWx0IGdhdGV3YXkgbGlzdC4KKwlzZWN1cmVfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZiBhdCBsZWFzdCBvbmUgb2YKKwljb25mL3thbGwsaW50ZXJmYWNlfS9zZWN1cmVfcmVkaXJlY3RzIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisJZGVmYXVsdCBUUlVFCisKK3NlbmRfcmVkaXJlY3RzIC0gQk9PTEVBTgorCVNlbmQgcmVkaXJlY3RzLCBpZiByb3V0ZXIuCisJc2VuZF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L3NlbmRfcmVkaXJlY3RzIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisJRGVmYXVsdDogVFJVRQorCitib290cF9yZWxheSAtIEJPT0xFQU4KKwlBY2NlcHQgcGFja2V0cyB3aXRoIHNvdXJjZSBhZGRyZXNzIDAuYi5jLmQgZGVzdGluZWQKKwlub3QgdG8gdGhpcyBob3N0IGFzIGxvY2FsIG9uZXMuIEl0IGlzIHN1cHBvc2VkLCB0aGF0CisJQk9PVFAgcmVsYXkgZGFlbW9uIHdpbGwgY2F0Y2ggYW5kIGZvcndhcmQgc3VjaCBwYWNrZXRzLgorCWNvbmYvYWxsL2Jvb3RwX3JlbGF5IG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBlbmFibGUgQk9PVFAgcmVsYXkKKwlmb3IgdGhlIGludGVyZmFjZQorCWRlZmF1bHQgRkFMU0UKKwlOb3QgSW1wbGVtZW50ZWQgWWV0LgorCithY2NlcHRfc291cmNlX3JvdXRlIC0gQk9PTEVBTgorCUFjY2VwdCBwYWNrZXRzIHdpdGggU1JSIG9wdGlvbi4KKwljb25mL2FsbC9hY2NlcHRfc291cmNlX3JvdXRlIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBhY2NlcHQgcGFja2V0cworCXdpdGggU1JSIG9wdGlvbiBvbiB0aGUgaW50ZXJmYWNlCisJZGVmYXVsdCBUUlVFIChyb3V0ZXIpCisJCUZBTFNFIChob3N0KQorCitycF9maWx0ZXIgLSBCT09MRUFOCisJMSAtIGRvIHNvdXJjZSB2YWxpZGF0aW9uIGJ5IHJldmVyc2VkIHBhdGgsIGFzIHNwZWNpZmllZCBpbiBSRkMxODEyCisJICAgIFJlY29tbWVuZGVkIG9wdGlvbiBmb3Igc2luZ2xlIGhvbWVkIGhvc3RzIGFuZCBzdHViIG5ldHdvcmsKKwkgICAgcm91dGVycy4gQ291bGQgY2F1c2UgdHJvdWJsZXMgZm9yIGNvbXBsaWNhdGVkIChub3QgbG9vcCBmcmVlKQorCSAgICBuZXR3b3JrcyBydW5uaW5nIGEgc2xvdyB1bnJlbGlhYmxlIHByb3RvY29sIChzb3J0IG9mIFJJUCksCisJICAgIG9yIHVzaW5nIHN0YXRpYyByb3V0ZXMuCisKKwkwIC0gTm8gc291cmNlIHZhbGlkYXRpb24uCisKKwljb25mL2FsbC9ycF9maWx0ZXIgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGRvIHNvdXJjZSB2YWxpZGF0aW9uCisJb24gdGhlIGludGVyZmFjZQorCisJRGVmYXVsdCB2YWx1ZSBpcyAwLiBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdAorCWluIHN0YXJ0dXAgc2NyaXB0cy4KKworYXJwX2ZpbHRlciAtIEJPT0xFQU4KKwkxIC0gQWxsb3dzIHlvdSB0byBoYXZlIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcyBvbiB0aGUgc2FtZQorCXN1Ym5ldCwgYW5kIGhhdmUgdGhlIEFSUHMgZm9yIGVhY2ggaW50ZXJmYWNlIGJlIGFuc3dlcmVkCisJYmFzZWQgb24gd2hldGhlciBvciBub3QgdGhlIGtlcm5lbCB3b3VsZCByb3V0ZSBhIHBhY2tldCBmcm9tCisJdGhlIEFSUCdkIElQIG91dCB0aGF0IGludGVyZmFjZSAodGhlcmVmb3JlIHlvdSBtdXN0IHVzZSBzb3VyY2UKKwliYXNlZCByb3V0aW5nIGZvciB0aGlzIHRvIHdvcmspLiBJbiBvdGhlciB3b3JkcyBpdCBhbGxvd3MgY29udHJvbAorCW9mIHdoaWNoIGNhcmRzICh1c3VhbGx5IDEpIHdpbGwgcmVzcG9uZCB0byBhbiBhcnAgcmVxdWVzdC4KKworCTAgLSAoZGVmYXVsdCkgVGhlIGtlcm5lbCBjYW4gcmVzcG9uZCB0byBhcnAgcmVxdWVzdHMgd2l0aCBhZGRyZXNzZXMKKwlmcm9tIG90aGVyIGludGVyZmFjZXMuIFRoaXMgbWF5IHNlZW0gd3JvbmcgYnV0IGl0IHVzdWFsbHkgbWFrZXMKKwlzZW5zZSwgYmVjYXVzZSBpdCBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiBzdWNjZXNzZnVsIGNvbW11bmljYXRpb24uCisJSVAgYWRkcmVzc2VzIGFyZSBvd25lZCBieSB0aGUgY29tcGxldGUgaG9zdCBvbiBMaW51eCwgbm90IGJ5CisJcGFydGljdWxhciBpbnRlcmZhY2VzLiBPbmx5IGZvciBtb3JlIGNvbXBsZXggc2V0dXBzIGxpa2UgbG9hZC0KKwliYWxhbmNpbmcsIGRvZXMgdGhpcyBiZWhhdmlvdXIgY2F1c2UgcHJvYmxlbXMuCisKKwlhcnBfZmlsdGVyIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZiBhdCBsZWFzdCBvbmUgb2YKKwljb25mL3thbGwsaW50ZXJmYWNlfS9hcnBfZmlsdGVyIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisKK2FycF9hbm5vdW5jZSAtIElOVEVHRVIKKwlEZWZpbmUgZGlmZmVyZW50IHJlc3RyaWN0aW9uIGxldmVscyBmb3IgYW5ub3VuY2luZyB0aGUgbG9jYWwKKwlzb3VyY2UgSVAgYWRkcmVzcyBmcm9tIElQIHBhY2tldHMgaW4gQVJQIHJlcXVlc3RzIHNlbnQgb24KKwlpbnRlcmZhY2U6CisJMCAtIChkZWZhdWx0KSBVc2UgYW55IGxvY2FsIGFkZHJlc3MsIGNvbmZpZ3VyZWQgb24gYW55IGludGVyZmFjZQorCTEgLSBUcnkgdG8gYXZvaWQgbG9jYWwgYWRkcmVzc2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdGFyZ2V0J3MKKwlzdWJuZXQgZm9yIHRoaXMgaW50ZXJmYWNlLiBUaGlzIG1vZGUgaXMgdXNlZnVsIHdoZW4gdGFyZ2V0CisJaG9zdHMgcmVhY2hhYmxlIHZpYSB0aGlzIGludGVyZmFjZSByZXF1aXJlIHRoZSBzb3VyY2UgSVAKKwlhZGRyZXNzIGluIEFSUCByZXF1ZXN0cyB0byBiZSBwYXJ0IG9mIHRoZWlyIGxvZ2ljYWwgbmV0d29yaworCWNvbmZpZ3VyZWQgb24gdGhlIHJlY2VpdmluZyBpbnRlcmZhY2UuIFdoZW4gd2UgZ2VuZXJhdGUgdGhlCisJcmVxdWVzdCB3ZSB3aWxsIGNoZWNrIGFsbCBvdXIgc3VibmV0cyB0aGF0IGluY2x1ZGUgdGhlCisJdGFyZ2V0IElQIGFuZCB3aWxsIHByZXNlcnZlIHRoZSBzb3VyY2UgYWRkcmVzcyBpZiBpdCBpcyBmcm9tCisJc3VjaCBzdWJuZXQuIElmIHRoZXJlIGlzIG5vIHN1Y2ggc3VibmV0IHdlIHNlbGVjdCBzb3VyY2UKKwlhZGRyZXNzIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIGxldmVsIDIuCisJMiAtIEFsd2F5cyB1c2UgdGhlIGJlc3QgbG9jYWwgYWRkcmVzcyBmb3IgdGhpcyB0YXJnZXQuCisJSW4gdGhpcyBtb2RlIHdlIGlnbm9yZSB0aGUgc291cmNlIGFkZHJlc3MgaW4gdGhlIElQIHBhY2tldAorCWFuZCB0cnkgdG8gc2VsZWN0IGxvY2FsIGFkZHJlc3MgdGhhdCB3ZSBwcmVmZXIgZm9yIHRhbGtzIHdpdGgKKwl0aGUgdGFyZ2V0IGhvc3QuIFN1Y2ggbG9jYWwgYWRkcmVzcyBpcyBzZWxlY3RlZCBieSBsb29raW5nCisJZm9yIHByaW1hcnkgSVAgYWRkcmVzc2VzIG9uIGFsbCBvdXIgc3VibmV0cyBvbiB0aGUgb3V0Z29pbmcKKwlpbnRlcmZhY2UgdGhhdCBpbmNsdWRlIHRoZSB0YXJnZXQgSVAgYWRkcmVzcy4gSWYgbm8gc3VpdGFibGUKKwlsb2NhbCBhZGRyZXNzIGlzIGZvdW5kIHdlIHNlbGVjdCB0aGUgZmlyc3QgbG9jYWwgYWRkcmVzcworCXdlIGhhdmUgb24gdGhlIG91dGdvaW5nIGludGVyZmFjZSBvciBvbiBhbGwgb3RoZXIgaW50ZXJmYWNlcywKKwl3aXRoIHRoZSBob3BlIHdlIHdpbGwgcmVjZWl2ZSByZXBseSBmb3Igb3VyIHJlcXVlc3QgYW5kCisJZXZlbiBzb21ldGltZXMgbm8gbWF0dGVyIHRoZSBzb3VyY2UgSVAgYWRkcmVzcyB3ZSBhbm5vdW5jZS4KKworCVRoZSBtYXggdmFsdWUgZnJvbSBjb25mL3thbGwsaW50ZXJmYWNlfS9hcnBfYW5ub3VuY2UgaXMgdXNlZC4KKworCUluY3JlYXNpbmcgdGhlIHJlc3RyaWN0aW9uIGxldmVsIGdpdmVzIG1vcmUgY2hhbmNlIGZvcgorCXJlY2VpdmluZyBhbnN3ZXIgZnJvbSB0aGUgcmVzb2x2ZWQgdGFyZ2V0IHdoaWxlIGRlY3JlYXNpbmcKKwl0aGUgbGV2ZWwgYW5ub3VuY2VzIG1vcmUgdmFsaWQgc2VuZGVyJ3MgaW5mb3JtYXRpb24uCisKK2FycF9pZ25vcmUgLSBJTlRFR0VSCisJRGVmaW5lIGRpZmZlcmVudCBtb2RlcyBmb3Igc2VuZGluZyByZXBsaWVzIGluIHJlc3BvbnNlIHRvCisJcmVjZWl2ZWQgQVJQIHJlcXVlc3RzIHRoYXQgcmVzb2x2ZSBsb2NhbCB0YXJnZXQgSVAgYWRkcmVzc2VzOgorCTAgLSAoZGVmYXVsdCk6IHJlcGx5IGZvciBhbnkgbG9jYWwgdGFyZ2V0IElQIGFkZHJlc3MsIGNvbmZpZ3VyZWQKKwlvbiBhbnkgaW50ZXJmYWNlCisJMSAtIHJlcGx5IG9ubHkgaWYgdGhlIHRhcmdldCBJUCBhZGRyZXNzIGlzIGxvY2FsIGFkZHJlc3MKKwljb25maWd1cmVkIG9uIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UKKwkyIC0gcmVwbHkgb25seSBpZiB0aGUgdGFyZ2V0IElQIGFkZHJlc3MgaXMgbG9jYWwgYWRkcmVzcworCWNvbmZpZ3VyZWQgb24gdGhlIGluY29taW5nIGludGVyZmFjZSBhbmQgYm90aCB3aXRoIHRoZQorCXNlbmRlcidzIElQIGFkZHJlc3MgYXJlIHBhcnQgZnJvbSBzYW1lIHN1Ym5ldCBvbiB0aGlzIGludGVyZmFjZQorCTMgLSBkbyBub3QgcmVwbHkgZm9yIGxvY2FsIGFkZHJlc3NlcyBjb25maWd1cmVkIHdpdGggc2NvcGUgaG9zdCwKKwlvbmx5IHJlc29sdXRpb25zIGZvciBnbG9iYWwgYW5kIGxpbmsgYWRkcmVzc2VzIGFyZSByZXBsaWVkCisJNC03IC0gcmVzZXJ2ZWQKKwk4IC0gZG8gbm90IHJlcGx5IGZvciBhbGwgbG9jYWwgYWRkcmVzc2VzCisKKwlUaGUgbWF4IHZhbHVlIGZyb20gY29uZi97YWxsLGludGVyZmFjZX0vYXJwX2lnbm9yZSBpcyB1c2VkCisJd2hlbiBBUlAgcmVxdWVzdCBpcyByZWNlaXZlZCBvbiB0aGUge2ludGVyZmFjZX0KKworYXBwX3NvbGljaXQgLSBJTlRFR0VSCisJVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb2JlcyB0byBzZW5kIHRvIHRoZSB1c2VyIHNwYWNlIEFSUCBkYWVtb24KKwl2aWEgbmV0bGluayBiZWZvcmUgZHJvcHBpbmcgYmFjayB0byBtdWx0aWNhc3QgcHJvYmVzIChzZWUKKwltY2FzdF9zb2xpY2l0KS4gIERlZmF1bHRzIHRvIDAuCisKK2Rpc2FibGVfcG9saWN5IC0gQk9PTEVBTgorCURpc2FibGUgSVBTRUMgcG9saWN5IChTUEQpIGZvciB0aGlzIGludGVyZmFjZQorCitkaXNhYmxlX3hmcm0gLSBCT09MRUFOCisJRGlzYWJsZSBJUFNFQyBlbmNyeXB0aW9uIG9uIHRoaXMgaW50ZXJmYWNlLCB3aGF0ZXZlciB0aGUgcG9saWN5CisKKworCit0YWcgLSBJTlRFR0VSCisJQWxsb3dzIHlvdSB0byB3cml0ZSBhIG51bWJlciwgd2hpY2ggY2FuIGJlIHVzZWQgYXMgcmVxdWlyZWQuCisJRGVmYXVsdCB2YWx1ZSBpcyAwLgorCisoMSkgSmlmZmllOiBpbnRlcm5hbCB0aW1ldW5pdCBmb3IgdGhlIGtlcm5lbC4gT24gdGhlIGkzODYgMS8xMDBzLCBvbiB0aGUKK0FscGhhIDEvMTAyNHMuIFNlZSB0aGUgSFogZGVmaW5lIGluIC91c3IvaW5jbHVkZS9hc20vcGFyYW0uaCBmb3IgdGhlIGV4YWN0Cit2YWx1ZSBvbiB5b3VyIHN5c3RlbS4gCisKK0FsZXhleSBLdXpuZXRzb3YuCitrdXpuZXRAbXMyLmluci5hYy5ydQorCitVcGRhdGVkIGJ5OgorQW5kaSBLbGVlbgorYWtAbXVjLmRlCitOaWNvbGFzIERlbG9uCitkZWxvbi5uaWNvbGFzQHdhbmFkb28uZnIKKworCisKKworL3Byb2Mvc3lzL25ldC9pcHY2LyogVmFyaWFibGVzOgorCitJUHY2IGhhcyBubyBnbG9iYWwgdmFyaWFibGVzIHN1Y2ggYXMgdGNwXyouICB0Y3BfKiBzZXR0aW5ncyB1bmRlciBpcHY0LyBhbHNvCithcHBseSB0byBJUHY2IFtYWFg/XS4KKworYmluZHY2b25seSAtIEJPT0xFQU4KKwlEZWZhdWx0IHZhbHVlIGZvciBJUFY2X1Y2T05MWSBzb2NrZXQgb3B0aW9uLAorCXdoaWNoIHJlc3RyaWN0cyB1c2Ugb2YgdGhlIElQdjYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbiAKKwlvbmx5LgorCQlUUlVFOiBkaXNhYmxlIElQdjQtbWFwcGVkIGFkZHJlc3MgZmVhdHVyZQorCQlGQUxTRTogZW5hYmxlIElQdjQtbWFwcGVkIGFkZHJlc3MgZmVhdHVyZQorCisJRGVmYXVsdDogRkFMU0UgKGFzIHNwZWNpZmllZCBpbiBSRkMyNTUzYmlzKQorCitJUHY2IEZyYWdtZW50YXRpb246CisKK2lwNmZyYWdfaGlnaF90aHJlc2ggLSBJTlRFR0VSCisJTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQdjYgZnJhZ21lbnRzLiBXaGVuIAorCWlwNmZyYWdfaGlnaF90aHJlc2ggYnl0ZXMgb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdGhpcyBwdXJwb3NlLAorCXRoZSBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcyBwYWNrZXRzIHVudGlsIGlwNmZyYWdfbG93X3RocmVzaAorCWlzIHJlYWNoZWQuCisJCitpcDZmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCisJU2VlIGlwNmZyYWdfaGlnaF90aHJlc2gJCisKK2lwNmZyYWdfdGltZSAtIElOVEVHRVIKKwlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUHY2IGZyYWdtZW50IGluIG1lbW9yeS4KKworaXA2ZnJhZ19zZWNyZXRfaW50ZXJ2YWwgLSBJTlRFR0VSCisJUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lIAorCWZvciB0aGUgaGFzaCBzZWNyZXQpIGZvciBJUHY2IGZyYWdtZW50cy4KKwlEZWZhdWx0OiA2MDAKKworY29uZi9kZWZhdWx0Lyo6CisJQ2hhbmdlIHRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgZGVmYXVsdCBzZXR0aW5ncy4KKworCitjb25mL2FsbC8qOgorCUNoYW5nZSBhbGwgdGhlIGludGVyZmFjZS1zcGVjaWZpYyBzZXR0aW5ncy4gIAorCisJW1hYWDogIE90aGVyIHNwZWNpYWwgZmVhdHVyZXMgdGhhbiBmb3J3YXJkaW5nP10KKworY29uZi9hbGwvZm9yd2FyZGluZyAtIEJPT0xFQU4KKwlFbmFibGUgZ2xvYmFsIElQdjYgZm9yd2FyZGluZyBiZXR3ZWVuIGFsbCBpbnRlcmZhY2VzLiAgCisKKwlJUHY0IGFuZCBJUHY2IHdvcmsgZGlmZmVyZW50bHkgaGVyZTsgZS5nLiBuZXRmaWx0ZXIgbXVzdCBiZSB1c2VkIAorCXRvIGNvbnRyb2wgd2hpY2ggaW50ZXJmYWNlcyBtYXkgZm9yd2FyZCBwYWNrZXRzIGFuZCB3aGljaCBub3QuCisKKwlUaGlzIGFsc28gc2V0cyBhbGwgaW50ZXJmYWNlcycgSG9zdC9Sb3V0ZXIgc2V0dGluZyAKKwknZm9yd2FyZGluZycgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KKworCVRoaXMgcmVmZXJyZWQgdG8gYXMgZ2xvYmFsIGZvcndhcmRpbmcuCisKK2NvbmYvaW50ZXJmYWNlLyo6CisJQ2hhbmdlIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZS4KKworCVRoZSBmdW5jdGlvbmFsIGJlaGF2aW91ciBmb3IgY2VydGFpbiBzZXR0aW5ncyBpcyBkaWZmZXJlbnQgCisJZGVwZW5kaW5nIG9uIHdoZXRoZXIgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKworYWNjZXB0X3JhIC0gQk9PTEVBTgorCUFjY2VwdCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHM7IGF1dG9jb25maWd1cmUgdXNpbmcgdGhlbS4KKwkKKwlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBkaXNhYmxlZC4KKwkJCSAgICBkaXNhYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQuCisKK2FjY2VwdF9yZWRpcmVjdHMgLSBCT09MRUFOCisJQWNjZXB0IFJlZGlyZWN0cy4KKworCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLgorCQkJICAgIGRpc2FibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZC4KKworYXV0b2NvbmYgLSBCT09MRUFOCisJQXV0b2NvbmZpZ3VyZSBhZGRyZXNzZXMgdXNpbmcgUHJlZml4IEluZm9ybWF0aW9uIGluIFJvdXRlciAKKwlBZHZlcnRpc2VtZW50cy4KKworCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBhY2NlcHRfcmEgaXMgZW5hYmxlZC4KKwkJCSAgICBkaXNhYmxlZCBpZiBhY2NlcHRfcmEgaXMgZGlzYWJsZWQuCisKK2RhZF90cmFuc21pdHMgLSBJTlRFR0VSCisJVGhlIGFtb3VudCBvZiBEdXBsaWNhdGUgQWRkcmVzcyBEZXRlY3Rpb24gcHJvYmVzIHRvIHNlbmQuCisJRGVmYXVsdDogMQorCQorZm9yd2FyZGluZyAtIEJPT0xFQU4KKwlDb25maWd1cmUgaW50ZXJmYWNlLXNwZWNpZmljIEhvc3QvUm91dGVyIGJlaGF2aW91ci4gIAorCisJTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gaGF2ZSB0aGUgc2FtZSBzZXR0aW5nIG9uIGFsbCAKKwlpbnRlcmZhY2VzOyBtaXhlZCByb3V0ZXIvaG9zdCBzY2VuYXJpb3MgYXJlIHJhdGhlciB1bmNvbW1vbi4KKworCUZBTFNFOgorCisJQnkgZGVmYXVsdCwgSG9zdCBiZWhhdmlvdXIgaXMgYXNzdW1lZC4gIFRoaXMgbWVhbnM6CisKKwkxLiBJc1JvdXRlciBmbGFnIGlzIG5vdCBzZXQgaW4gTmVpZ2hib3VyIEFkdmVydGlzZW1lbnRzLgorCTIuIFJvdXRlciBTb2xpY2l0YXRpb25zIGFyZSBiZWluZyBzZW50IHdoZW4gbmVjZXNzYXJ5LgorCTMuIElmIGFjY2VwdF9yYSBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJvdXRlciAKKwkgICBBZHZlcnRpc2VtZW50cyAoYW5kIGRvIGF1dG9jb25maWd1cmF0aW9uKS4KKwk0LiBJZiBhY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUmVkaXJlY3RzLgorCisJVFJVRToKKworCUlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgUm91dGVyIGJlaGF2aW91ciBpcyBhc3N1bWVkLiAKKwlUaGlzIG1lYW5zIGV4YWN0bHkgdGhlIHJldmVyc2UgZnJvbSB0aGUgYWJvdmU6CisKKwkxLiBJc1JvdXRlciBmbGFnIGlzIHNldCBpbiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudHMuCisJMi4gUm91dGVyIFNvbGljaXRhdGlvbnMgYXJlIG5vdCBzZW50LgorCTMuIFJvdXRlciBBZHZlcnRpc2VtZW50cyBhcmUgaWdub3JlZC4KKwk0LiBSZWRpcmVjdHMgYXJlIGlnbm9yZWQuCisKKwlEZWZhdWx0OiBGQUxTRSBpZiBnbG9iYWwgZm9yd2FyZGluZyBpcyBkaXNhYmxlZCAoZGVmYXVsdCksCisJCSBvdGhlcndpc2UgVFJVRS4KKworaG9wX2xpbWl0IC0gSU5URUdFUgorCURlZmF1bHQgSG9wIExpbWl0IHRvIHNldC4KKwlEZWZhdWx0OiA2NAorCittdHUgLSBJTlRFR0VSCisJRGVmYXVsdCBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKKwlEZWZhdWx0OiAxMjgwIChJUHY2IHJlcXVpcmVkIG1pbmltdW0pCisKK3JvdXRlcl9zb2xpY2l0YXRpb25fZGVsYXkgLSBJTlRFR0VSCisJTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBhZnRlciBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cAorCWJlZm9yZSBzZW5kaW5nIFJvdXRlciBTb2xpY2l0YXRpb25zLgorCURlZmF1bHQ6IDEKKworcm91dGVyX3NvbGljaXRhdGlvbl9pbnRlcnZhbCAtIElOVEVHRVIKKwlOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gUm91dGVyIFNvbGljaXRhdGlvbnMuCisJRGVmYXVsdDogNAorCityb3V0ZXJfc29saWNpdGF0aW9ucyAtIElOVEVHRVIKKwlOdW1iZXIgb2YgUm91dGVyIFNvbGljaXRhdGlvbnMgdG8gc2VuZCB1bnRpbCBhc3N1bWluZyBubyAKKwlyb3V0ZXJzIGFyZSBwcmVzZW50LgorCURlZmF1bHQ6IDMKKwordXNlX3RlbXBhZGRyIC0gSU5URUdFUgorCVByZWZlcmVuY2UgZm9yIFByaXZhY3kgRXh0ZW5zaW9ucyAoUkZDMzA0MSkuCisJICA8PSAwIDogZGlzYWJsZSBQcml2YWN5IEV4dGVuc2lvbnMKKwkgID09IDEgOiBlbmFibGUgUHJpdmFjeSBFeHRlbnNpb25zLCBidXQgcHJlZmVyIHB1YmxpYworCSAgICAgICAgIGFkZHJlc3NlcyBvdmVyIHRlbXBvcmFyeSBhZGRyZXNzZXMuCisJICA+ICAxIDogZW5hYmxlIFByaXZhY3kgRXh0ZW5zaW9ucyBhbmQgcHJlZmVyIHRlbXBvcmFyeQorCSAgICAgICAgIGFkZHJlc3NlcyBvdmVyIHB1YmxpYyBhZGRyZXNzZXMuCisJRGVmYXVsdDogIDAgKGZvciBtb3N0IGRldmljZXMpCisJCSAtMSAoZm9yIHBvaW50LXRvLXBvaW50IGRldmljZXMgYW5kIGxvb3BiYWNrIGRldmljZXMpCisKK3RlbXBfdmFsaWRfbGZ0IC0gSU5URUdFUgorCXZhbGlkIGxpZmV0aW1lIChpbiBzZWNvbmRzKSBmb3IgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KKwlEZWZhdWx0OiA2MDQ4MDAgKDcgZGF5cykKKwordGVtcF9wcmVmZXJlZF9sZnQgLSBJTlRFR0VSCisJUHJlZmVycmVkIGxpZmV0aW1lIChpbiBzZWNvbmRzKSBmb3IgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KKwlEZWZhdWx0OiA4NjQwMCAoMSBkYXkpCisKK21heF9kZXN5bmNfZmFjdG9yIC0gSU5URUdFUgorCU1heGltdW0gdmFsdWUgZm9yIERFU1lOQ19GQUNUT1IsIHdoaWNoIGlzIGEgcmFuZG9tIHZhbHVlCisJdGhhdCBlbnN1cmVzIHRoYXQgY2xpZW50cyBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIGVhY2ggCisJb3RoZXIgYW5kIGdlbmVyYXRlIG5ldyBhZGRyZXNzZXMgYXQgZXhhY3RseSB0aGUgc2FtZSB0aW1lLgorCXZhbHVlIGlzIGluIHNlY29uZHMuCisJRGVmYXVsdDogNjAwCisJCityZWdlbl9tYXhfcmV0cnkgLSBJTlRFR0VSCisJTnVtYmVyIG9mIGF0dGVtcHRzIGJlZm9yZSBnaXZlIHVwIGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUKKwl2YWxpZCB0ZW1wb3JhcnkgYWRkcmVzc2VzLgorCURlZmF1bHQ6IDUKKworbWF4X2FkZHJlc3NlcyAtIElOVEVHRVIKKwlOdW1iZXIgb2YgbWF4aW11bSBhZGRyZXNzZXMgcGVyIGludGVyZmFjZS4gIDAgZGlzYWJsZXMgbGltaXRhdGlvbi4KKwlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZCAKKwliZSB0b28gZWFzeSB3YXkgdG8gY3Jhc2gga2VybmVsIHRvIGFsbG93IHRvIGNyZWF0ZSB0b28gbXVjaCBvZiAKKwlhdXRvY29uZmlndXJlZCBhZGRyZXNzZXMuCisJRGVmYXVsdDogMTYKKworaWNtcC8qOgorcmF0ZWxpbWl0IC0gSU5URUdFUgorCUxpbWl0IHRoZSBtYXhpbWFsIHJhdGVzIGZvciBzZW5kaW5nIElDTVB2NiBwYWNrZXRzLgorCTAgdG8gZGlzYWJsZSBhbnkgbGltaXRpbmcsIG90aGVyd2lzZSB0aGUgbWF4aW1hbCByYXRlIGluIGppZmZpZXMoMSkKKwlEZWZhdWx0OiAxMDAKKworCitJUHY2IFVwZGF0ZSBieToKK1Bla2thIFNhdm9sYSA8cGVra2FzQG5ldGNvcmUuZmk+CitZT1NISUZVSkkgSGlkZWFraSAvIFVTQUdJIFByb2plY3QgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorCisKKy9wcm9jL3N5cy9uZXQvYnJpZGdlLyogVmFyaWFibGVzOgorCiticmlkZ2UtbmYtY2FsbC1hcnB0YWJsZXMgLSBCT09MRUFOCisJMSA6IHBhc3MgYnJpZGdlZCBBUlAgdHJhZmZpYyB0byBhcnB0YWJsZXMnIEZPUldBUkQgY2hhaW4uCisJMCA6IGRpc2FibGUgdGhpcy4KKwlEZWZhdWx0OiAxCisKK2JyaWRnZS1uZi1jYWxsLWlwdGFibGVzIC0gQk9PTEVBTgorCTEgOiBwYXNzIGJyaWRnZWQgSVB2NCB0cmFmZmljIHRvIGlwdGFibGVzJyBjaGFpbnMuCisJMCA6IGRpc2FibGUgdGhpcy4KKwlEZWZhdWx0OiAxCisKK2JyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyAtIEJPT0xFQU4KKwkxIDogcGFzcyBicmlkZ2VkIElQdjYgdHJhZmZpYyB0byBpcDZ0YWJsZXMnIGNoYWlucy4KKwkwIDogZGlzYWJsZSB0aGlzLgorCURlZmF1bHQ6IDEKKworYnJpZGdlLW5mLWZpbHRlci12bGFuLXRhZ2dlZCAtIEJPT0xFQU4KKwkxIDogcGFzcyBicmlkZ2VkIHZsYW4tdGFnZ2VkIEFSUC9JUCB0cmFmZmljIHRvIGFycHRhYmxlcy9pcHRhYmxlcy4KKwkwIDogZGlzYWJsZSB0aGlzLgorCURlZmF1bHQ6IDEKKworCitVTkRPQ1VNRU5URUQ6CisKK2Rldl93ZWlnaHQgRklYTUUKK2Rpc2NvdmVyeV9zbG90cyBGSVhNRQorZGlzY292ZXJ5X3RpbWVvdXQgRklYTUUKK2Zhc3RfcG9sbF9pbmNyZWFzZSBGSVhNRQoraXA2X3F1ZXVlX21heGxlbiBGSVhNRQorbGFwX2tlZXBhbGl2ZV90aW1lIEZJWE1FCitsb19jb25nIEZJWE1FCittYXhfYmF1ZF9yYXRlIEZJWE1FCittYXhfZGdyYW1fcWxlbiBGSVhNRQorbWF4X25vcmVwbHlfdGltZSBGSVhNRQorbWF4X3R4X2RhdGFfc2l6ZSBGSVhNRQorbWF4X3R4X3dpbmRvdyBGSVhNRQorbWluX3R4X3R1cm5fdGltZSBGSVhNRQorbW9kX2NvbmcgRklYTUUKK25vX2NvbmcgRklYTUUKK25vX2NvbmdfdGhyZXNoIEZJWE1FCitzbG90X3RpbWVvdXQgRklYTUUKK3dhcm5fbm9yZXBseV90aW1lIEZJWE1FCisKKyRJZDogaXAtc3lzY3RsLnR4dCx2IDEuMjAgMjAwMS8xMi8xMyAwOTowMDoxOCBkYXZlbSBFeHAgJApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwX2R5bmFkZHIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwX2R5bmFkZHIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjNjMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBfZHluYWRkci50eHQKQEAgLTAsMCArMSwyOSBAQAorSVAgZHluYW1pYyBhZGRyZXNzIGhhY2stcG9ydCB2MC4wMworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhpcyBzdHVmZiBhbGxvd3MgZGlhbGQgT05FU0hPVCBjb25uZWN0aW9ucyB0byBnZXQgZXN0YWJsaXNoZWQgYnkKK2R5bmFtaWNhbGx5IGNoYW5naW5nIHBhY2tldCBzb3VyY2UgYWRkcmVzcyAoYW5kIHNvY2tldCdzIGlmIGxvY2FsIHByb2NzKS4KK0l0IGlzIGltcGxlbWVudGVkIGZvciBUQ1AgZGlhbGQtYm94IGNvbm5lY3Rpb25zKDEpIGFuZCBJUF9NQVNRdWVyYWRpbmcoMikuCisKK0lmIGVuYWJsZWRbKl0gYW5kIGZvcndhcmRpbmcgaW50ZXJmYWNlIGhhcyBjaGFuZ2VkOgorICAxKSAgU29ja2V0IChhbmQgcGFja2V0KSBzb3VyY2UgYWRkcmVzcyBpcyByZXdyaXR0ZW4gT04gUkVUUkFOU01JU1NJT05TCisgICAgICB3aGlsZSBpbiBTWU5fU0VOVCBzdGF0ZSAoZGlhbGQtYm94IHByb2Nlc3NlcykuCisgIDIpICBPdXQtYm91bmRlZCBNQVNRdWVyYWRlZCBzb3VyY2UgYWRkcmVzcyBjaGFuZ2VzIE9OIE9VVFBVVCAod2hlbgorICAgICAgaW50ZXJuYWwgaG9zdCBkb2VzIHJldHJhbnNtaXNzaW9uKSB1bnRpbCBhIHBhY2tldCBmcm9tIG91dHNpZGUgaXMKKyAgICAgIHJlY2VpdmVkIGJ5IHRoZSB0dW5uZWwuCisKK1RoaXMgaXMgc3BlY2lhbGx5IGhlbHBmdWwgZm9yIGF1dG8gZGlhbHVwIGxpbmtzIChkaWFsZCksIHdoZXJlIHRoZQorYGBhY3R1YWwnJyBvdXRnb2luZyBhZGRyZXNzIGlzIHVua25vd24gYXQgdGhlIG1vbWVudCB0aGUgbGluayBpcworZ29pbmcgdXAuIFNvLCB0aGUgKnNhbWUqIChsb2NhbCBBTkQgbWFzcXVlcmFkZWQpIGNvbm5lY3Rpb25zIHJlcXVlc3RzIHRoYXQKK2JyaW5nIHRoZSBsaW5rIHVwIHdpbGwgYmUgYWJsZSB0byBnZXQgZXN0YWJsaXNoZWQuCisKK1sqXSBBdCBib290LCBieSBkZWZhdWx0IG5vIGFkZHJlc3MgcmV3cml0aW5nIGlzIGF0dGVtcHRlZC4gCisgIFRvIGVuYWJsZToKKyAgICAgIyBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZHluYWRkcgorICBUbyBlbmFibGUgdmVyYm9zZSBtb2RlOgorICAgICAjIGVjaG8gMiA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9keW5hZGRyCisgIFRvIGRpc2FibGUgKGRlZmF1bHQpCisgICAgICMgZWNobyAwID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2R5bmFkZHIKKworRW5qb3khCisKKy0tIEp1YW5qbyAgPGpqY2lhcmxhQHJhaXoudW5jdS5lZHUuYXI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBkZHAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwZGRwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjFhNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwZGRwLnR4dApAQCAtMCwwICsxLDc4IEBACitUZXh0IGZpbGUgZm9yIGlwZGRwLmM6CisJQXBwbGVUYWxrLUlQIERlY2Fwc3VsYXRpb24gYW5kIEFwcGxlVGFsay1JUCBFbmNhcHN1bGF0aW9uCisKK1RoaXMgdGV4dCBmaWxlIGlzIHdyaXR0ZW4gYnkgSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworQXBwbGVUYWxrLUlQIChJUEREUCkgaXMgdGhlIG1ldGhvZCBjb21wdXRlcnMgY29ubmVjdGVkIHRvIEFwcGxlVGFsaworbmV0d29ya3MgY2FuIHVzZSB0byBjb21tdW5pY2F0ZSB2aWEgSVAuIEFwcGxlVGFsay1JUCBpcyBzaW1wbHkgSVAgZGF0YWdyYW1zCitpbnNpZGUgQXBwbGVUYWxrIHBhY2tldHMuCisKK1Rocm91Z2ggdGhpcyBkcml2ZXIgeW91IGNhbiBlaXRoZXIgYWxsb3cgeW91ciBMaW51eCBib3ggdG8gY29tbXVuaWNhdGUKK0lQIG92ZXIgYW4gQXBwbGVUYWxrIG5ldHdvcmsgb3IgeW91IGNhbiBwcm92aWRlIElQIGdhdGV3YXlpbmcgZnVuY3Rpb25zCitmb3IgeW91ciBBcHBsZVRhbGsgdXNlcnMuCisKK1lvdSBjYW4gY3VycmVudGx5IGVuY2Fwc3VsYXRlIG9yIGRlY2Fwc3VsYXRlIEFwcGxlVGFsay1JUCBvbiBMb2NhbFRhbGssCitFdGhlclRhbGsgYW5kIFBQUFRhbGsuIFRoZSBvbmx5IGxpbWl0IG9uIHRoZSBwcm90b2NvbCBpcyB0aGF0IG9mIHdoYXQKK2tlcm5lbCBBcHBsZVRhbGsgbGF5ZXIgYW5kIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS4KKworRWFjaCBtb2RlIHJlcXVpcmVzIGl0cyBvd24gdXNlciBzcGFjZSBzb2Z0d2FyZS4KKworQ29tcGlsaW5nIEFwcGxlVGFsay1JUCBEZWNhcHN1bGF0aW9uL0VuY2Fwc3VsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXBwbGVUYWxrLUlQIGRlY2Fwc3VsYXRpb24gbmVlZHMgdG8gYmUgY29tcGlsZWQgaW50byB5b3VyIGtlcm5lbC4gWW91Cit3aWxsIG5lZWQgdG8gdHVybiBvbiBBcHBsZVRhbGstSVAgZHJpdmVyIHN1cHBvcnQuIFRoZW4geW91IHdpbGwgbmVlZCB0bworc2VsZWN0IE9ORSBvZiB0aGUgdHdvIG9wdGlvbnM7IElQIHRvIEFwcGxlVGFsay1JUCBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgb3IKK0FwcGxlVGFsay1JUCB0byBJUCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQuIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIKK3N0YXRpY2FsbHkgeW91IHdpbGwgb25seSBiZSBhYmxlIHRvIHVzZSB0aGUgZHJpdmVyIGZvciB0aGUgZnVuY3Rpb24geW91IGhhdmUKK2VuYWJsZWQgaW4gdGhlIGtlcm5lbC4gSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSB5b3UgY2FuCitzZWxlY3Qgd2hhdCBtb2RlIHlvdSB3YW50IGl0IHRvIHJ1biBpbiB2aWEgYSBtb2R1bGUgbG9hZGluZyBwYXJhbS4KK2lwZGRwX21vZGU9MSBmb3IgQXBwbGVUYWxrLUlQIGVuY2Fwc3VsYXRpb24gYW5kIGlwZGRwX21vZGU9MiBmb3IKK0FwcGxlVGFsay1JUCB0byBJUCBkZWNhcHN1bGF0aW9uLgorCitCYXNpYyBpbnN0cnVjdGlvbnMgZm9yIHVzZXIgc3BhY2UgdG9vbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyBlbmFibGUgQXBwbGVUYWxrLUlQIGRlY2Fwc3VsYXRpb24vZW5jYXBzdWxhdGlvbiB5b3Ugd2lsbCBuZWVkIHRoZSAKK3Byb3BlciB0b29scy4gWW91IGNhbiBnZXQgdGhlIHRvb2xzIGZvciBkZWNhcHN1bGF0aW9uIGZyb20KK2h0dHA6Ly9zcGFjczEuc3BhY3MuazEyLndpLnVzL35qc2NobHN0L2luZGV4Lmh0bWwgYW5kIGZvciBlbmNhcHN1bGF0aW9uCitmcm9tIGh0dHA6Ly93d3cubWF0aHMudW5tLmVkdS9+YnJhZGZvcmQvbHRwYy5odG1sCisKK0kgd2lsbCBicmllZmx5IGRlc2NyaWJlIHRoZSBvcGVyYXRpb24gb2YgdGhlIHRvb2xzLCBidXQgeW91IHdpbGwKK25lZWQgdG8gY29uc3VsdCB0aGUgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIGZvciBlYWNoIHNldCBvZiB0b29scy4KKworRGVjYXBzdWxhdGlvbiAtIFlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgYSBzb2Z0d2FyZSBwYWNrYWdlIGNhbGxlZAorTWFjR2F0ZS4gSW4gdGhpcyBkaXN0cmlidXRpb24gdGhlcmUgd2lsbCBiZSBhIHRvb2wgY2FsbGVkIE1hY1JvdXRlCit3aGljaCBlbmFibGVzIHlvdSB0byBhZGQgcm91dGVzIHRvIHRoZSBrZXJuZWwgZm9yIHlvdXIgTWFjcyBieSBoYW5kLgorQWxzbyB0aGUgdG9vbCBNYWNSZWdHYXRlV2F5IGlzIGluY2x1ZGVkIHRvIHJlZ2lzdGVyIHRoZQorcHJvcGVyIElQIEdhdGV3YXkgYW5kIElQIGFkZHJlc3NlcyBmb3IgeW91ciBtYWNoaW5lLiBJbmNsdWRlZCBpbiB0aGlzCitkaXN0cmlidXRpb24gaXMgYSBwYXRjaCB0byBuZXRhdGFsay0xLjRiMithc3VuMi4wYTE3LjIgKGF2YWlsYWJsZSBmcm9tCitmdHAudS53YXNoaW5ndG9uLmVkdS9wdWIvdXNlci1zdXBwb3J0ZWQvYXN1bi8pIHRoaXMgcGF0Y2ggaXMgb3B0aW9uYWwKK2J1dCBpdCBhbGxvd3MgYXV0b21hdGljIGFkZGluZyBhbmQgZGVsZXRpbmcgb2Ygcm91dGVzIGZvciBNYWNzLiAoSGFuZHkKK2ZvciBsb2NhdGlvbnMgd2l0aCBsYXJnZSBNYWMgaW5zdGFsbGF0aW9ucykKKworRW5jYXBzdWxhdGlvbiAtIFlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgYSBzb2Z0d2FyZSBkYWVtb24gY2FsbGVkIGlwZGRwZC4KK1RoaXMgc29mdHdhcmUgZXhwZWN0cyB0aGVyZSB0byBiZSBhbiBBcHBsZVRhbGstSVAgZ2F0ZXdheSBvbiB0aGUgbmV0d29yay4KK1lvdSB3aWxsIGFsc28gbmVlZCB0byBhZGQgdGhlIHByb3BlciByb3V0ZXMgdG8gcm91dGUgeW91ciBMaW51eCBib3gncyBJUAordHJhZmZpYyBvdXQgdGhlIGlwZGRwIGludGVyZmFjZS4KKworQ29tbW9uIFVzZXMgb2YgaXBkZHAuYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT2YgY291cnNlIEFwcGxlVGFsay1JUCBkZWNhcHN1bGF0aW9uIGFuZCBlbmNhcHN1bGF0aW9uLCBidXQgc3BlY2lmaWNhbGx5CitkZWNhcHN1bGF0aW9uIGlzIGJlaW5nIHVzZWQgbW9zdCBmb3IgY29ubmVjdGluZyBMb2NhbFRhbGsgbmV0d29ya3MgdG8KK0lQIG5ldHdvcmtzLiBBbHRob3VnaCBpdCBoYXMgYmVlbiB1c2VkIG9uIEV0aGVyVGFsayBuZXR3b3JrcyB0byBhbGxvdworTWFjcyB0aGF0IGFyZSBvbmx5IGFibGUgdG8gdHVubmVsIElQIG92ZXIgRXRoZXJUYWxrLgorCitFbmNhcHN1bGF0aW9uIGhhcyBiZWVuIHVzZWQgdG8gYWxsb3cgYSBMaW51eCBib3ggc3R1Y2sgb24gYSBMb2NhbFRhbGsKK25ldHdvcmsgdG8gdXNlIElQLiBJdCBzaG91bGQgd29yayBlcXVhbGx5IHdlbGwgaWYgeW91IGFyZSBzdHVjayBvbiBhbgorRXRoZXJUYWxrIG9ubHkgbmV0d29yay4KKworRnVydGhlciBBc3Npc3RhbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIGNvbnRhY3QgbWUgKEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+KSB3aXRoIGFueQorcXVlc3Rpb25zIHJlZ2FyZGluZyBkZWNhcHN1bGF0aW9uIG9yIGVuY2Fwc3VsYXRpb24uIEJyYWRmb3JkIFcuIEpvaG5zb24KKzxqb2huczM5M0BtYXJvb24udGMudW1uLmVkdT4gb3JpZ2luYWxseSB3cm90ZSB0aGUgaXBkZHAuYyBkcml2ZXIgZm9yIElQCitlbmNhcHN1bGF0aW9uIGluIEFwcGxlVGFsay4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGhhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwaGFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljY2I4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGhhc2UudHh0CkBAIC0wLDAgKzEsMTU4IEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUQgTUUgRklTUlQKKwkJICBBVE0gKGkpQ2hpcCBJQSBMaW51eCBEcml2ZXIgU291cmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgUmVhZCBUaGlzIEJlZm9yZSBZb3UgQmVnaW4hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgUkVBRE1FIGZpbGUgZm9yIHRoZSBJbnRlcnBoYXNlIFBDSSBBVE0gKGkpQ2hpcCBJQSBMaW51eCBkcml2ZXIgCitzb3VyY2UgcmVsZWFzZS4KKworVGhlIGZlYXR1cmVzIGFuZCBsaW1pdGF0aW9ucyBvZiB0aGlzIGRyaXZlciBhcmUgYXMgZm9sbG93czoKKyAgICAtIEEgc2luZ2xlIFZQSSAoVlBJIHZhbHVlIG9mIDApIGlzIHN1cHBvcnRlZC4KKyAgICAtIFN1cHBvcnRzIDRLIFZDcyBmb3IgdGhlIHNlcnZlciBib2FyZCAod2l0aCA1MTJLIGNvbnRyb2wgbWVtb3J5KSBhbmQgMUsgCisgICAgICBWQ3MgZm9yIHRoZSBjbGllbnQgYm9hcmQgKHdpdGggMTI4SyBjb250cm9sIG1lbW9yeSkuCisgICAgLSBVQlIsIEFCUiBhbmQgQ0JSIHNlcnZpY2UgY2F0ZWdvcmllcyBhcmUgc3VwcG9ydGVkLgorICAgIC0gT25seSBBQUw1IGlzIHN1cHBvcnRlZC4gCisgICAgLSBTdXBwb3J0cyBzZXR0aW5nIG9mIFBDUiBvbiB0aGUgVkNzLiAKKyAgICAtIE11bHRpcGxlIGFkYXB0ZXJzIGluIGEgc3lzdGVtIGFyZSBzdXBwb3J0ZWQuCisgICAgLSBBbGwgdmFyaWFudHMgb2YgSW50ZXJwaGFzZSBBVE0gUENJIChpKUNoaXAgYWRhcHRlciBjYXJkcyBhcmUgc3VwcG9ydGVkLCAKKyAgICAgIGluY2x1ZGluZyB4NTc1IChPQzMsIGNvbnRyb2wgbWVtb3J5IDEyOEsgLCA1MTJLIGFuZCBwYWNrZXQgbWVtb3J5IDEyOEssIAorICAgICAgNTEySyBhbmQgMU0pLCB4NTI1IChVVFAyNSkgYW5kIHg1MzEgKERTMyBhbmQgRTMpLiBTZWUgCisgICAgICAgICAgIGh0dHA6Ly93d3cuaXBoYXNlLmNvbS9wcm9kdWN0cy9DbGFzc1NoZWV0LmNmbT9DbGFzc0lEPUFUTSAKKyAgICAgIGZvciBkZXRhaWxzLgorICAgIC0gT25seSB4ODYgcGxhdGZvcm1zIGFyZSBzdXBwb3J0ZWQuCisgICAgLSBTTVAgaXMgc3VwcG9ydGVkLgorCisKK0JlZm9yZSBZb3UgU3RhcnQKKy0tLS0tLS0tLS0tLS0tLS0gCisKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworMS4gSW5zdGFsbGluZyB0aGUgYWRhcHRlcnMgaW4gdGhlIHN5c3RlbQorICAgVG8gaW5zdGFsbCB0aGUgQVRNIGFkYXB0ZXJzIGluIHRoZSBzeXN0ZW0sIGZvbGxvdyB0aGUgc3RlcHMgYmVsb3cuCisgICAgICAgYS4gTG9naW4gYXMgcm9vdC4KKyAgICAgICBiLiBTaHV0IGRvd24gdGhlIHN5c3RlbSBhbmQgcG93ZXIgb2ZmIHRoZSBzeXN0ZW0uCisgICAgICAgYy4gSW5zdGFsbCBvbmUgb3IgbW9yZSBBVE0gYWRhcHRlcnMgaW4gdGhlIHN5c3RlbS4KKyAgICAgICBkLiBDb25uZWN0IGVhY2ggYWRhcHRlciB0byBhIHBvcnQgb24gYW4gQVRNIHN3aXRjaC4gVGhlIGdyZWVuICdMaW5rJyAKKyAgICAgICAgICBMRUQgb24gdGhlIGZyb250IHBhbmVsIG9mIHRoZSBhZGFwdGVyIHdpbGwgYmUgb24gaWYgdGhlIGFkYXB0ZXIgaXMgCisgICAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBzd2l0Y2ggcHJvcGVybHkgd2hlbiB0aGUgc3lzdGVtIGlzIHBvd2VyZWQgdXAuCisgICAgICAgZS4gUG93ZXIgb24gYW5kIGJvb3QgdGhlIHN5c3RlbS4KKworMi4gWyBSZW1vdmVkIF0KKworMy4gUmVidWlsZCBrZXJuZWwgd2l0aCBBQlIgc3VwcG9ydAorICAgWyBhLiBhbmQgYi4gcmVtb3ZlZCBdCisgICAgYy4gUmVjb25maWd1cmUgdGhlIGtlcm5lbCwgY2hvb3NlIHRoZSBJbnRlcnBoYXNlIGlhIGRyaXZlciB0aHJvdWdoICJtYWtlIAorICAgICAgIG1lbnVjb25maWciIG9yICJtYWtlIHhjb25maWciLgorICAgIGQuIFJlYnVpbGQgdGhlIGtlcm5lbCwgbG9hZGFibGUgbW9kdWxlcyBhbmQgdGhlIGF0bSB0b29scy4gCisgICAgZS4gSW5zdGFsbCB0aGUgbmV3IGJ1aWx0IGtlcm5lbCBhbmQgbW9kdWxlcyBhbmQgcmVib290LgorCis0LiBMb2FkIHRoZSBhZGFwdGVyIGhhcmR3YXJlIGRyaXZlciAoaWEgZHJpdmVyKSBpZiBpdCBpcyBidWlsdCBhcyBhIG1vZHVsZQorICAgICAgIGEuIExvZ2luIGFzIHJvb3QuCisgICAgICAgYi4gQ2hhbmdlIGRpcmVjdG9yeSB0byAvbGliL21vZHVsZXMvPGtlcm5lbC12ZXJzaW9uPi9hdG0uCisgICAgICAgYy4gUnVuICJpbnNtb2Qgc3VuaS5vO2luc21vZCBpcGhhc2UubyIKKwkgIFRoZSB5ZWxsb3cgJ3N0YXR1cycgTEVEIG9uIHRoZSBmcm9udCBwYW5lbCBvZiB0aGUgYWRhcHRlciB3aWxsIGJsaW5rIAorICAgICAgICAgIHdoaWxlIHRoZSBkcml2ZXIgaXMgbG9hZGVkIGluIHRoZSBzeXN0ZW0uCisgICAgICAgZC4gVG8gdmVyaWZ5IHRoYXQgdGhlICdpYScgZHJpdmVyIGlzIGxvYWRlZCBzdWNjZXNzZnVsbHksIHJ1biB0aGUgCisgICAgICAgICAgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICAgICAgICAgICAgY2F0IC9wcm9jL2F0bS9kZXZpY2VzCisKKyAgICAgICAgICBJZiB0aGUgZHJpdmVyIGlzIGxvYWRlZCBzdWNjZXNzZnVsbHksIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgd2lsbCAKKyAgICAgICAgICBiZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgbGluZXM6CisKKyAgICAgICAgICAgICAgSXRmIFR5cGUgICAgRVNJLyJNQUMiYWRkciBBQUwoVFgsZXJyLFJYLGVycixkcm9wKSAuLi4KKyAgICAgICAgICAgICAgMCAgIGlhICAgICAgeHh4eHh4eHh4ICAwICggMCAwIDAgMCAwICkgIDUgKCAwIDAgMCAwIDAgKQorCisgICAgICAgICAgWW91IGNhbiBhbHNvIGNoZWNrIHRoZSBzeXN0ZW0gbG9nIGZpbGUgL3Zhci9sb2cvbWVzc2FnZXMgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgcmVsYXRlZCB0byB0aGUgQVRNIGRyaXZlci4KKworNS4gSWEgRHJpdmVyIENvbmZpZ3VyYXRpb24gCisKKzUuMSBDb25maWd1cmF0aW9uIG9mIGFkYXB0ZXIgYnVmZmVycworICAgIFRoZSAoaSlDaGlwIGJvYXJkcyBoYXZlIDMgZGlmZmVyZW50IHBhY2tldCBSQU0gc2l6ZSB2YXJpYW50czogMTI4SywgNTEySyBhbmQKKyAgICAxTS4gVGhlIFJBTSBzaXplIGRlY2lkZXMgdGhlIG51bWJlciBvZiBidWZmZXJzIGFuZCBidWZmZXIgc2l6ZS4gVGhlIGRlZmF1bHQgCisgICAgc2l6ZSBhbmQgbnVtYmVyIG9mIGJ1ZmZlcnMgYXJlIHNldCBhcyBmb2xsb3dpbmc6IAorCisgICAgICAgICAgVG90b2wgICAgUnggUkFNICAgVHggUkFNICAgUnggQnVmICAgVHggQnVmICAgUnggYnVmICAgVHggYnVmCisgICAgICAgICBSQU0gc2l6ZSAgIHNpemUgICAgIHNpemUgICAgIHNpemUgICAgIHNpemUgICAgICBjbnQgICAgICBjbnQKKyAgICAgICAgIC0tLS0tLS0tICAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0KKyAgICAgICAgICAgMTI4SyAgICAgIDY0SyAgICAgIDY0SyAgICAgIDEwSyAgICAgIDEwSyAgICAgICA2ICAgICAgICA2CisgICAgICAgICAgIDUxMksgICAgIDI1NksgICAgIDI1NksgICAgICAxMEsgICAgICAxMEsgICAgICAyNSAgICAgICAyNQorICAgICAgICAgICAgIDFNICAgICA1MTJLICAgICA1MTJLICAgICAgMTBLICAgICAgMTBLICAgICAgNTEgICAgICAgNTEKKworICAgICAgIFRoZXNlIHNldHRpbmcgc2hvdWxkIHdvcmsgd2VsbCBpbiBtb3N0IGVudmlyb25tZW50cywgYnV0IGNhbiBiZQorICAgICAgIGNoYW5nZWQgYnkgdHlwaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogCisgCisgICAgICAgICAgIGluc21vZCA8SUFfRElSPi9pYS5vIElBX1JYX0JVRj08UlhfQ05UPiBJQV9SWF9CVUZfU1o9PFJYX1NJWkU+IFwKKyAgICAgICAgICAgICAgICAgICBJQV9UWF9CVUY9PFRYX0NOVD4gSUFfVFhfQlVGX1NaPTxUWF9TSVpFPiAKKyAgICAgICBXaGVyZToKKyAgICAgICAgICAgIFJYX0NOVCA9IG51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcnMgaW4gdGhlIHJhbmdlICgxLTEyOCkKKyAgICAgICAgICAgIFJYX1NJWkUgPSBzaXplIG9mIHJlY2VpdmUgYnVmZmVycyBpbiB0aGUgcmFuZ2UgKDQ4LTY0SykKKyAgICAgICAgICAgIFRYX0NOVCA9IG51bWJlciBvZiB0cmFuc21pdCBidWZmZXJzIGluIHRoZSByYW5nZSAoMS0xMjgpCisgICAgICAgICAgICBUWF9TSVpFID0gc2l6ZSBvZiB0cmFuc21pdCBidWZmZXJzIGluIHRoZSByYW5nZSAoNDgtNjRLKQorCisgICAgICAgICAgICAxLiBUcmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAgICAgICAgICAgIDIuIENhcmUgc2hvdWxkIGJlIHRha2VuIHNvIHRoYXQgdGhlIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhlCisgICAgICAgICAgICAgICB0cmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXJzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgICAgICAgICAgIHRvdGFsIGFkYXB0ZXIgcGFja2V0IG1lbW9yeS4gICAKKworNS4yIFR1cm4gb24gaWEgZGVidWcgdHJhY2UKKworICAgIFdoZW4gdGhlIGlhIGRyaXZlciBpcyBidWlsdCB3aXRoIHRoZSBDT05GSUdfQVRNX0lBX0RFQlVHIGZsYWcsIHRoZSBkcml2ZXIgCisgICAgY2FuIHByb3ZpZGUgbW9yZSBkZWJ1ZyB0cmFjZSBpZiBuZWVkZWQuIFRoZXJlIGlzIGEgYml0IG1hc2sgdmFyaWFibGUsIAorICAgIElBRGVidWdGbGFnLCB3aGljaCBjb250cm9scyB0aGUgb3V0cHV0IG9mIHRoZSB0cmFjZXMuIFlvdSBjYW4gZmluZCB0aGUgYml0IAorICAgIG1hcCBvZiB0aGUgSUFEZWJ1Z0ZsYWcgaW4gaXBoYXNlLmguIAorICAgIFRoZSBkZWJ1ZyB0cmFjZSBjYW4gYmUgdHVybiBvbiB0aHJvdWdoIHRoZSBpbnNtb2QgY29tbWFuZCBsaW5lIG9wdGlvbiwgZm9yIAorICAgIGV4YW1wbGUsICJpbnNtb2QgaXBoYXNlLm8gSUFEZWJ1Z0ZsYWc9MHhmZmZmZmZmZiIgY2FuIHR1cm4gb24gYWxsIHRoZSBkZWJ1ZyAKKyAgICB0cmFjZXMgdG9nZXRoZXIgd2l0aCBsb2FkaW5nIHRoZSBkcml2ZXIuCisKKzYuIElhIERyaXZlciBUZXN0IFVzaW5nIHR0Y3BfYXRtIGFuZCBQVkMKKworICAgRm9yIHRoZSBQVkMgc2V0dXAsIHRoZSB0ZXN0IG1hY2hpbmVzIGNhbiBlaXRoZXIgYmUgY29ubmVjdGVkIGJhY2stdG8tYmFjayBvciAKKyAgIHRocm91Z2ggYSBzd2l0Y2guIElmIGNvbm5lY3RlZCB0aHJvdWdoIHRoZSBzd2l0Y2gsIHRoZSBzd2l0Y2ggbXVzdCBiZSAKKyAgIGNvbmZpZ3VyZWQgZm9yIHRoZSBQVkMocykuCisKKyAgIGEuIEZvciBVQlIgdGVzdDoKKyAgICAgIEF0IHRoZSB0ZXN0IG1hY2hpbmUgaW50ZW5kZWQgdG8gcmVjZWl2ZSBkYXRhLCB0eXBlOgorICAgICAgICAgdHRjcF9hdG0gLXIgLWEgLXMgMC4xMDAgCisgICAgICBBdCB0aGUgb3RoZXIgdGVzdCBtYWNoaW5lLCB0eXBlOgorICAgICAgICAgdHRjcF9hdG0gLXQgLWEgLXMgMC4xMDAgLW4gMTAwMDAKKyAgICAgIFJ1biAidHRjcF9hdG0gLWgiIHRvIGRpc3BsYXkgbW9yZSBvcHRpb25zIG9mIHRoZSB0dGNwX2F0bSB0b29sLgorICAgYi4gRm9yIEFCUiB0ZXN0OgorICAgICAgSXQgaXMgdGhlIHNhbWUgYXMgdGhlIFVCUiB0ZXN0aW5nLCBidXQgd2l0aCBhbiBleHRyYSBjb21tYW5kIG9wdGlvbjoKKyAgICAgICAgIC1QYWJyOm1heF9wY3I9PHh4eD4KKyAgICAgICAgIHdoZXJlOgorICAgICAgICAgICAgIHh4eCA9IHRoZSBtYXhpbXVtIHBlYWsgY2VsbCByYXRlLCBmcm9tIDE3MCAtIDM1MzIwNy4KKyAgICAgICAgIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IG9uIGJvdGggdGhlIG1hY2hpbmVzLgorICAgYy4gRm9yIENCUiB0ZXN0OgorICAgICAgSXQgaXMgdGhlIHNhbWUgYXMgdGhlIFVCUiB0ZXN0aW5nLCBidXQgd2l0aCBhbiBleHRyYSBjb21tYW5kIG9wdGlvbjoKKyAgICAgICAgIC1QY2JyOm1heF9wY3I9PHh4eD4KKyAgICAgICAgIHdoZXJlOgorICAgICAgICAgICAgIHh4eCA9IHRoZSBtYXhpbXVtIHBlYWsgY2VsbCByYXRlLCBmcm9tIDE3MCAtIDM1MzIwNy4KKyAgICAgICAgIFRoaXMgb3B0aW9uIG1heSBvbmx5IGJlIHNldCBvbiB0aGUgdHJhbnNtaXQgbWFjaGluZS4KKworCitPVVRTVEFORElORyBJU1NVRVMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworQ29udGFjdCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgIEN1c3RvbWVyIFN1cHBvcnQ6CisgICAgICAgICBVbml0ZWQgU3RhdGVzOglUZWxlcGhvbmU6CSgyMTQpIDY1NC01NTU1CisgICAgIAkJCUZheDoJCSgyMTQpIDY1NC01NTAwCisJCQlFLU1haWw6CQlpbnRvdWNoQGlwaGFzZS5jb20KKwkgRXVyb3BlOglUZWxlcGhvbmU6CTMzICgwKTEgNDEgMTUgNDQgMDAKKwkJCUZheDoJCTMzICgwKTEgNDEgMTUgMTIgMTMKKyAgICAgV29ybGQgV2lkZSBXZWI6CWh0dHA6Ly93d3cuaXBoYXNlLmNvbQorICAgICBBbm9ueW1vdXMgRlRQOglmdHAuaXBoYXNlLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lyZGEudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lyZGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNWI4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXJkYS50eHQKQEAgLTAsMCArMSwxNCBAQAorVG8gdXNlIHRoZSBJckRBIHByb3RvY29scyB3aXRoaW4gTGludXggeW91IHdpbGwgbmVlZCB0byBnZXQgYSBzdWl0YWJsZSBjb3B5CitvZiB0aGUgSXJEQSBVdGlsaXRpZXMuIE1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgYW5kIGFzc29jaWF0ZWQKK3Byb2dyYW1zIGNhbiBiZSBmb3VuZCBvbiBodHRwOi8vaXJkYS5zb3VyY2Vmb3JnZS5uZXQvCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byB1c2UgdGhlIElyREEgcHJvdG9jb2wgc3RhY2ssIHNlZSB0aGUKK0xpbnV4IEluZmFyZWQgSE9XVE8gKGh0dHA6Ly93d3cudHV4bW9iaWwub3JnL0luZnJhcmVkLUhPV1RPL0luZnJhcmVkLUhPV1RPLmh0bWwpCitieSBXZXJuZXIgSGV1c2VyIDx3ZWhlQHR1eG1vYmlsLm9yZz4KKworVGhlcmUgaXMgYW4gYWN0aXZlIG1haWxpbmcgbGlzdCBmb3IgZGlzY3Vzc2luZyBMaW51eC1JckRBIG1hdHRlcnMgY2FsbGVkCisgICAgaXJkYS11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2IudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOTgyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYi50eHQKQEAgLTAsMCArMSwyMTIgQEAKK0xpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMEdiRSBGYW1pbHkgb2YgQWRhcHRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm92ZW1iZXIgMTcsIDIwMDQKKworCitDb250ZW50cworPT09PT09PT0KKworLSBJbiBUaGlzIFJlbGVhc2UKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCistIEltcHJvdmluZyBQZXJmb3JtYW5jZQorLSBTdXBwb3J0CisKKworSW4gVGhpcyBSZWxlYXNlCis9PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwR2JFIEZhbWlseSAKK29mIEFkYXB0ZXJzLCB2ZXJzaW9uIDEuMC54LiAgCisKK0ZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIAorc3VwcGxpZWQgd2l0aCB5b3VyIEludGVsIFBSTy8xMEdiRSBhZGFwdGVyLiBBbGwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGxpc3RlZCAKK2FwcGx5IHRvIHVzZSB3aXRoIExpbnV4LgorCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyB2ZXJpZnkgeW91ciBJbnRlbCBhZGFwdGVyIGlzIHN1cHBvcnRlZCwgZmluZCB0aGUgYm9hcmQgSUQgbnVtYmVyIG9uIHRoZSAKK2FkYXB0ZXIuIExvb2sgZm9yIGEgbGFiZWwgdGhhdCBoYXMgYSBiYXJjb2RlIGFuZCBhIG51bWJlciBpbiB0aGUgZm9ybWF0ICAKK0ExMjM0NS0wMDEuIAorCitVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIGFuZCB0aGUgQWRhcHRlciAmIERyaXZlciBJRCBHdWlkZSBhdDoKKworICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bQorCitGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCBnbyB0bzoKKworICAgIGh0dHA6Ly9kb3dubG9hZGZpbmRlci5pbnRlbC5jb20vc2NyaXB0cy1kZi9zdXBwb3J0X2ludGVsLmFzcAorCitDb21tYW5kIExpbmUgUGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlICBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgCit1c2VkIGJ5IGVudGVyaW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2Rwcm9iZSBvciBpbnNtb2QgY29tbWFuZAordXNpbmcgdGhpcyBzeW50YXg6CisKKyAgICAgbW9kcHJvYmUgaXhnYiBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCisKKyAgICAgaW5zbW9kIGl4Z2IgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQorCitGb3IgZXhhbXBsZSwgd2l0aCB0d28gUFJPLzEwR2JFIFBDSSBhZGFwdGVycywgZW50ZXJpbmc6CisKKyAgICBpbnNtb2QgaXhnYiBUeERlc2NyaXB0b3JzPTgwLDEyOAorCitsb2FkcyB0aGUgaXhnYiBkcml2ZXIgd2l0aCA4MCBUWCByZXNvdXJjZXMgZm9yIHRoZSBmaXJzdCBhZGFwdGVyIGFuZCAxMjggVFggCityZXNvdXJjZXMgZm9yIHRoZSBzZWNvbmQgYWRhcHRlci4KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyIGlzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywKK3VubGVzcyBvdGhlcndpc2Ugbm90ZWQuIEFsc28sIGlmIHRoZSBkcml2ZXIgaXMgc3RhdGljYWxseSBidWlsdCBpbnRvIHRoZQora2VybmVsLCB0aGUgZHJpdmVyIGlzIGxvYWRlZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzLgorRXRodG9vbCBjYW4gYmUgdXNlZCB0byBjaGFuZ2Ugc29tZSBvZiB0aGUgcGFyYW1ldGVycyBhdCBydW50aW1lLgorCitGbG93Q29udHJvbAorVmFsaWQgUmFuZ2U6IDAtMyAoMD1ub25lLCAxPVJ4IG9ubHksIDI9VHggb25seSwgMz1SeCZUeCkKK0RlZmF1bHQ6IFJlYWQgZnJvbSB0aGUgRUVQUk9NCisgICAgICAgICBJZiBFRVBST00gaXMgbm90IGRldGVjdGVkLCBkZWZhdWx0IGlzIDMKKyAgICBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgYXV0b21hdGljIGdlbmVyYXRpb24oVHgpIGFuZCByZXNwb25zZShSeCkgdG8gCisgICAgRXRoZXJuZXQgUEFVU0UgZnJhbWVzLgorCitSeERlc2NyaXB0b3JzCitWYWxpZCBSYW5nZTogNjQtNTEyCitEZWZhdWx0IFZhbHVlOiA1MTIKKyAgICBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4gCisgICAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIGJ1ZmZlciBtb3JlIGluY29taW5nIHBhY2tldHMuIAorICAgIEVhY2ggZGVzY3JpcHRvciBpcyAxNiBieXRlcy4gIEEgcmVjZWl2ZSBidWZmZXIgaXMgYWxzbyBhbGxvY2F0ZWQgZm9yIAorICAgIGVhY2ggZGVzY3JpcHRvciBhbmQgY2FuIGJlIGVpdGhlciAyMDQ4LCA0MDU2LCA4MTkyLCBvciAxNjM4NCBieXRlcywgCisgICAgZGVwZW5kaW5nIG9uIHRoZSBNVFUgc2V0dGluZy4gV2hlbiB0aGUgTVRVIHNpemUgaXMgMTUwMCBvciBsZXNzLCB0aGUgCisgICAgcmVjZWl2ZSBidWZmZXIgc2l6ZSBpcyAyMDQ4IGJ5dGVzLiBXaGVuIHRoZSBNVFUgaXMgZ3JlYXRlciB0aGFuIDE1MDAgdGhlCisgICAgcmVjZWl2ZSBidWZmZXIgc2l6ZSB3aWxsIGJlIGVpdGhlciA0MDU2LCA4MTkyLCBvciAxNjM4NCBieXRlcy4gVGhlIAorICAgIG1heGltdW0gTVRVIHNpemUgaXMgMTYxMTQuCisKK1J4SW50RGVsYXkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDYKKyAgICBUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiByZWNlaXZlIGludGVycnVwdHMgaW4gdW5pdHMgb2YgCisgICAgMC44MTkyIG1pY3Jvc2Vjb25kcy4gIFJlY2VpdmUgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUgCisgICAgZWZmaWNpZW5jeSBpZiBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJbmNyZWFzaW5nIAorICAgIHRoaXMgdmFsdWUgYWRkcyBleHRyYSBsYXRlbmN5IHRvIGZyYW1lIHJlY2VwdGlvbiBhbmQgY2FuIGVuZCB1cCAKKyAgICBkZWNyZWFzaW5nIHRoZSB0aHJvdWdocHV0IG9mIFRDUCB0cmFmZmljLiBJZiB0aGUgc3lzdGVtIGlzIHJlcG9ydGluZyAKKyAgICBkcm9wcGVkIHJlY2VpdmVzLCB0aGlzIHZhbHVlIG1heSBiZSBzZXQgdG9vIGhpZ2gsIGNhdXNpbmcgdGhlIGRyaXZlciB0byAKKyAgICBydW4gb3V0IG9mIGF2YWlsYWJsZSByZWNlaXZlIGRlc2NyaXB0b3JzLgorCitUeERlc2NyaXB0b3JzCitWYWxpZCBSYW5nZTogNjQtNDA5NgorRGVmYXVsdCBWYWx1ZTogMjU2CisgICAgVGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0IGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLgorICAgIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBxdWV1ZSBtb3JlIHRyYW5zbWl0cy4gRWFjaCAKKyAgICBkZXNjcmlwdG9yIGlzIDE2IGJ5dGVzLgorCitYc3VtUlgKK1ZhbGlkIFJhbmdlOiAwLTEKK0RlZmF1bHQgVmFsdWU6IDEKKyAgICBBIHZhbHVlIG9mICcxJyBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIHNob3VsZCBlbmFibGUgSVAgY2hlY2tzdW0KKyAgICBvZmZsb2FkIGZvciByZWNlaXZlZCBwYWNrZXRzIChib3RoIFVEUCBhbmQgVENQKSB0byB0aGUgYWRhcHRlciBoYXJkd2FyZS4KKworWHN1bVRYCitWYWxpZCBSYW5nZTogMC0xCitEZWZhdWx0IFZhbHVlOiAxCisgICAgQSB2YWx1ZSBvZiAnMScgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciBzaG91bGQgZW5hYmxlIElQIGNoZWNrc3VtCisgICAgb2ZmbG9hZCBmb3IgdHJhbnNtaXR0ZWQgcGFja2V0cyAoYm90aCBVRFAgYW5kIFRDUCkgdG8gdGhlIGFkYXB0ZXIgCisgICAgaGFyZHdhcmUuCisKK0ltcHJvdmluZyBQZXJmb3JtYW5jZQorPT09PT09PT09PT09PT09PT09PT09CisKK1dpdGggdGhlIEludGVsIFBSTy8xMCBHYkUgYWRhcHRlciwgdGhlIGRlZmF1bHQgTGludXggY29uZmlndXJhdGlvbiB3aWxsIHZlcnkgCitsaWtlbHkgbGltaXQgdGhlIHRvdGFsIGF2YWlsYWJsZSB0aHJvdWdocHV0IGFydGlmaWNpYWxseS4gIFRoZXJlIGlzIGEgc2V0IG9mIAordGhpbmdzIHRoYXQgd2hlbiBhcHBsaWVkIHRvZ2V0aGVyIGluY3JlYXNlIHRoZSBhYmlsaXR5IG9mIExpbnV4IHRvIHRyYW5zbWl0IAorYW5kIHJlY2VpdmUgZGF0YS4gIFRoZSBmb2xsb3dpbmcgZW5oYW5jZW1lbnRzIHdlcmUgb3JpZ2luYWxseSBhY3F1aXJlZCBmcm9tCitzZXR0aW5ncyBwdWJsaXNoZWQgYXQgaHR0cDovL3d3dy5zcGVjLm9yZy93ZWI5OSBmb3IgdmFyaW91cyBzdWJtaXR0ZWQgcmVzdWx0cyAKK3VzaW5nIExpbnV4LgorCitOT1RFOiBUaGVzZSBjaGFuZ2VzIGFyZSBvbmx5IHN1Z2dlc3Rpb25zLCBhbmQgc2VydmUgYXMgYSBzdGFydGluZyBwb2ludCBmb3IgCit0dW5pbmcgeW91ciBuZXR3b3JrIHBlcmZvcm1hbmNlLgorCitUaGUgY2hhbmdlcyBhcmUgbWFkZSBpbiB0aHJlZSBtYWpvciB3YXlzLCBsaXN0ZWQgaW4gb3JkZXIgb2YgZ3JlYXRlc3QgZWZmZWN0OgorLSBVc2UgaWZjb25maWcgdG8gbW9kaWZ5IHRoZSBtdHUgKG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQpIGFuZCB0aGUgdHhxdWV1ZWxlbiAKKyAgcGFyYW1ldGVyLgorLSBVc2Ugc3lzY3RsIHRvIG1vZGlmeSAvcHJvYyBwYXJhbWV0ZXJzIChlc3NlbnRpYWxseSBrZXJuZWwgdHVuaW5nKQorLSBVc2Ugc2V0cGNpIHRvIG1vZGlmeSB0aGUgTU1SQkMgZmllbGQgaW4gUENJLVggY29uZmlndXJhdGlvbiBzcGFjZSB0byBpbmNyZWFzZSAKKyAgdHJhbnNtaXQgYnVyc3QgbGVuZ3RocyBvbiB0aGUgYnVzLgorCitOT1RFOiBzZXRwY2kgbW9kaWZpZXMgdGhlIGFkYXB0ZXIncyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyB0byBhbGxvdyBpdCB0byByZWFkIAordXAgdG8gNGsgYnl0ZXMgYXQgYSB0aW1lIChmb3IgdHJhbnNtaXRzKS4gIEhvd2V2ZXIsIGZvciBzb21lIHN5c3RlbXMgdGhlIAorYmVoYXZpb3IgYWZ0ZXIgbW9kaWZ5aW5nIHRoaXMgcmVnaXN0ZXIgbWF5IGJlIHVuZGVmaW5lZCAocG9zc2libHkgZXJyb3JzIG9mIHNvbWUgCitraW5kKS4gQSBwb3dlci1jeWNsZSwgaGFyZCByZXNldCBvciBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGU2IHJlZ2lzdGVyIGJhY2sgdG8gCisyMiAoc2V0cGNpIC1kIDgwODY6MTA0OCBlNi5iPTIyKSBtYXkgYmUgcmVxdWlyZWQgdG8gZ2V0IGJhY2sgdG8gYSBzdGFibGUgCitjb25maWd1cmF0aW9uLgorCistIENPUFkgdGhlc2UgbGluZXMgYW5kIHBhc3RlIHRoZW0gaW50byBpeGdiX3BlcmYuc2g6CisjIS9iaW4vYmFzaAorZWNobyAiY29uZmlndXJpbmcgbmV0d29yayBwZXJmb3JtYW5jZSAsIGVkaXQgdGhpcyBmaWxlIHRvIGNoYW5nZSB0aGUgaW50ZXJmYWNlIgorIyBzZXQgbW1yYmMgdG8gNGsgcmVhZHMsIG1vZGlmeSBvbmx5IEludGVsIDEwR2JFIGRldmljZSBJRHMKK3NldHBjaSAtZCA4MDg2OjEwNDggZTYuYj0yZQorIyBzZXQgdGhlIE1UVSAobWF4IHRyYW5zbWlzc2lvbiB1bml0KSAtIGl0IHJlcXVpcmVzIHlvdXIgc3dpdGNoIGFuZCBjbGllbnRzIHRvIGNoYW5nZSB0b28hCisjIHNldCB0aGUgdHhxdWV1ZWxlbgorIyB5b3VyIGl4Z2IgYWRhcHRlciBzaG91bGQgYmUgbG9hZGVkIGFzIGV0aDEgZm9yIHRoaXMgdG8gd29yaywgY2hhbmdlIGlmIG5lZWRlZAoraWZjb25maWcgZXRoMSBtdHUgOTAwMCB0eHF1ZXVlbGVuIDEwMDAgdXAKKyMgY2FsbCB0aGUgc3lzY3RsIHV0aWxpdHkgdG8gbW9kaWZ5IC9wcm9jL3N5cyBlbnRyaWVzIAorc3lzY3RsIC1wIC4vc3lzY3RsX2l4Z2IuY29uZiAKKy0gRU5EIGl4Z2JfcGVyZi5zaAorCistIENPUFkgdGhlc2UgbGluZXMgYW5kIHBhc3RlIHRoZW0gaW50byBzeXNjdGxfaXhnYi5jb25mOgorIyBzb21lIG9mIHRoZSBkZWZhdWx0cyBtYXkgYmUgZGlmZmVyZW50IGZvciB5b3VyIGtlcm5lbAorIyBjYWxsIHRoaXMgZmlsZSB3aXRoIHN5c2N0bCAtcCA8dGhpcyBmaWxlPgorIyB0aGVzZSBhcmUganVzdCBzdWdnZXN0ZWQgdmFsdWVzIHRoYXQgd29ya2VkIHdlbGwgdG8gaW5jcmVhc2UgdGhyb3VnaHB1dCBpbgorIyBzZXZlcmFsIG5ldHdvcmsgYmVuY2htYXJrIHRlc3RzLCB5b3VyIG1pbGVhZ2UgbWF5IHZhcnkKKworIyMjIElQVjQgc3BlY2lmaWMgc2V0dGluZ3MKK25ldC5pcHY0LnRjcF90aW1lc3RhbXBzID0gMCAjIHR1cm5zIFRDUCB0aW1lc3RhbXAgc3VwcG9ydCBvZmYsIGRlZmF1bHQgMSwgcmVkdWNlcyBDUFUgdXNlCituZXQuaXB2NC50Y3Bfc2FjayA9IDAgIyB0dXJuIFNBQ0sgc3VwcG9ydCBvZmYsIGRlZmF1bHQgb24KKyMgb24gc3lzdGVtcyB3aXRoIGEgVkVSWSBmYXN0IGJ1cyAtPiBtZW1vcnkgaW50ZXJmYWNlIHRoaXMgaXMgdGhlIGJpZyBnYWluZXIgCituZXQuaXB2NC50Y3Bfcm1lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vZGVmYXVsdC9tYXggVENQIHJlYWQgYnVmZmVyLCBkZWZhdWx0IDQwOTYgODczODAgMTc0NzYwCituZXQuaXB2NC50Y3Bfd21lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vcHJlc3N1cmUvbWF4IFRDUCB3cml0ZSBidWZmZXIsIGRlZmF1bHQgNDA5NiAxNjM4NCAxMzEwNzIKK25ldC5pcHY0LnRjcF9tZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMCAjIHNldHMgbWluL3ByZXNzdXJlL21heCBUQ1AgYnVmZmVyIHNwYWNlLCBkZWZhdWx0IDMxNzQ0IDMyMjU2IDMyNzY4CisKKyMjIyBDT1JFIHNldHRpbmdzIChtb3N0bHkgZm9yIHNvY2tldCBhbmQgVURQIGVmZmVjdCkKK25ldC5jb3JlLnJtZW1fbWF4ID0gNTI0Mjg3ICMgbWF4aW11bSByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCAxMzEwNzEKK25ldC5jb3JlLndtZW1fbWF4ID0gNTI0Mjg3ICMgbWF4aW11bSBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCAxMzEwNzEKK25ldC5jb3JlLnJtZW1fZGVmYXVsdCA9IDUyNDI4NyAjIGRlZmF1bHQgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgNjU1MzUKK25ldC5jb3JlLndtZW1fZGVmYXVsdCA9IDUyNDI4NyAjIGRlZmF1bHQgc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgNjU1MzUKK25ldC5jb3JlLm9wdG1lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIGFtb3VudCBvZiBvcHRpb24gbWVtb3J5IGJ1ZmZlcnMsIGRlZmF1bHQgMTAyNDAKK25ldC5jb3JlLm5ldGRldl9tYXhfYmFja2xvZyA9IDMwMDAwMCAjIG51bWJlciBvZiB1bnByb2Nlc3NlZCBpbnB1dCBwYWNrZXRzIGJlZm9yZSBrZXJuZWwgc3RhcnRzIGRyb3BwaW5nIHRoZW0sIGRlZmF1bHQgMzAwCistIEVORCBzeXNjdGxfaXhnYi5jb25mCisKK0VkaXQgdGhlIGl4Z2JfcGVyZi5zaCBzY3JpcHQgaWYgbmVjZXNzYXJ5IHRvIGNoYW5nZSBldGgxIHRvIHdoYXRldmVyIGludGVyZmFjZSAKK3lvdXIgaXhnYiBkcml2ZXIgaXMgdXNpbmcuCisKK05PVEU6IFVubGVzcyB0aGVzZSBzY3JpcHRzIGFyZSBhZGRlZCB0byB0aGUgYm9vdCBwcm9jZXNzLCB0aGVzZSBjaGFuZ2VzIHdpbGwgCitvbmx5IGxhc3Qgb25seSB1bnRpbCB0aGUgbmV4dCBzeXN0ZW0gcmVib290LgorCisKK1Jlc29sdmluZyBTbG93IFVEUCBUcmFmZmljCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3VyIHNlcnZlciBkb2VzIG5vdCBzZWVtIHRvIGJlIGFibGUgdG8gcmVjZWl2ZSBVRFAgdHJhZmZpYyBhcyBmYXN0IGFzIGl0IAorY2FuIHJlY2VpdmUgVENQIHRyYWZmaWMsIGl0IGNvdWxkIGJlIGJlY2F1c2UgTGludXgsIGJ5IGRlZmF1bHQsIGRvZXMgbm90IHNldCAKK3RoZSBuZXR3b3JrIHN0YWNrIGJ1ZmZlcnMgYXMgbGFyZ2UgYXMgdGhleSBuZWVkIHRvIGJlIHRvIHN1cHBvcnQgaGlnaCBVRFAgCit0cmFuc2ZlciByYXRlcy4gT25lIHdheSB0byBhbGxldmlhdGUgdGhpcyBwcm9ibGVtIGlzIHRvIGFsbG93IG1vcmUgbWVtb3J5IHRvIAorYmUgdXNlZCBieSB0aGUgSVAgc3RhY2sgdG8gc3RvcmUgaW5jb21pbmcgZGF0YS4gCisKK0ZvciBpbnN0YW5jZSwgdXNlIHRoZSBjb21tYW5kczogCisgICAgc3lzY3RsIC13IG5ldC5jb3JlLnJtZW1fbWF4PTI2MjE0MworYW5kCisgICAgc3lzY3RsIC13IG5ldC5jb3JlLnJtZW1fZGVmYXVsdD0yNjIxNDMKK3RvIGluY3JlYXNlIHRoZSByZWFkIGJ1ZmZlciBtZW1vcnkgbWF4IGFuZCBkZWZhdWx0IHRvIDI2MjE0MyAoMjU2ayAtIDEpIGZyb20gCitkZWZhdWx0cyBvZiBtYXg9MTMxMDcxICgxMjhrIC0gMSkgYW5kIGRlZmF1bHQ9NjU1MzUgKDY0ayAtIDEpLiBUaGVzZSB2YXJpYWJsZXMgCit3aWxsIGluY3JlYXNlIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIG5ldHdvcmsgc3RhY2sgZm9yIHJlY2VpdmVzLCBhbmQgCitjYW4gYmUgaW5jcmVhc2VkIHNpZ25pZmljYW50bHkgbW9yZSBpZiBuZWNlc3NhcnkgZm9yIHlvdXIgYXBwbGljYXRpb24uCisKK1N1cHBvcnQKKz09PT09PT0KKworRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KKworSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCitrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byAKK3RoZSBpc3N1ZSB0byBsaW51eC5uaWNzQGludGVsLmNvbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sYXBiLW1vZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbGFwYi1tb2R1bGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZmM4ZjIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2xhcGItbW9kdWxlLnR4dApAQCAtMCwwICsxLDI2MyBAQAorCQlUaGUgTGludXggTEFQQiBNb2R1bGUgSW50ZXJmYWNlIDEuMworCisJCSAgICAgIEpvbmF0aGFuIE5heWxvciAyOS4xMi45NgorCitDaGFuZ2VkIChIZW5uZXIgRWlzZW4sIDIwMDAtMTAtMjkpOiBpbnQgcmV0dXJuIHZhbHVlIGZvciBkYXRhX2luZGljYXRpb24oKSAKKworVGhlIExBUEIgbW9kdWxlIHdpbGwgYmUgYSBzZXBhcmF0ZWx5IGNvbXBpbGVkIG1vZHVsZSBmb3IgdXNlIGJ5IGFueSBwYXJ0cyBvZgordGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0gdGhhdCByZXF1aXJlIGEgTEFQQiBzZXJ2aWNlLiBUaGlzIGRvY3VtZW50CitkZWZpbmVzIHRoZSBpbnRlcmZhY2VzIHRvLCBhbmQgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlLiBUaGUKK3Rlcm0gbW9kdWxlIGluIHRoaXMgY29udGV4dCBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSBMQVBCIG1vZHVsZSBpcyBhCitzZXBhcmF0ZWx5IGxvYWRhYmxlIG1vZHVsZSwgYWx0aG91Z2ggaXQgbWF5IGJlLiBUaGUgdGVybSBtb2R1bGUgaXMgdXNlZCBpbgoraXRzIG1vcmUgc3RhbmRhcmQgbWVhbmluZy4KKworVGhlIGludGVyZmFjZSB0byB0aGUgTEFQQiBtb2R1bGUgY29uc2lzdHMgb2YgZnVuY3Rpb25zIHRvIHRoZSBtb2R1bGUsCitjYWxsYmFja3MgZnJvbSB0aGUgbW9kdWxlIHRvIGluZGljYXRlIGltcG9ydGFudCBzdGF0ZSBjaGFuZ2VzLCBhbmQKK3N0cnVjdHVyZXMgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZHVsZS4KKworU3RydWN0dXJlcworLS0tLS0tLS0tLQorCitQcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgc3RydWN0dXJlIGlzIHRoZSBza2J1ZmYgc3RydWN0dXJlIGZvciBob2xkaW5nCityZWNlaXZlZCBhbmQgdHJhbnNtaXR0ZWQgZGF0YSwgaG93ZXZlciBpdCBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMKK2RvY3VtZW50LgorCitUaGUgdHdvIExBUEIgc3BlY2lmaWMgc3RydWN0dXJlcyBhcmUgdGhlIExBUEIgaW5pdGlhbGlzYXRpb24gc3RydWN0dXJlIGFuZAordGhlIExBUEIgcGFyYW1ldGVyIHN0cnVjdHVyZS4gVGhlc2Ugd2lsbCBiZSBkZWZpbmVkIGluIGEgc3RhbmRhcmQgaGVhZGVyCitmaWxlLCA8bGludXgvbGFwYi5oPi4gVGhlIGhlYWRlciBmaWxlIDxuZXQvbGFwYi5oPiBpcyBpbnRlcm5hbCB0byB0aGUgTEFQQgorbW9kdWxlIGFuZCBpcyBub3QgZm9yIHVzZS4KKworTEFQQiBJbml0aWFsaXNhdGlvbiBTdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc3RydWN0dXJlIGlzIHVzZWQgb25seSBvbmNlLCBpbiB0aGUgY2FsbCB0byBsYXBiX3JlZ2lzdGVyIChzZWUgYmVsb3cpLgorSXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSBkcml2ZXIgdGhhdCByZXF1aXJlcyB0aGUgc2VydmljZXMKK29mIHRoZSBMQVBCIG1vZHVsZS4KKworc3RydWN0IGxhcGJfcmVnaXN0ZXJfc3RydWN0IHsKKwl2b2lkICgqY29ubmVjdF9jb25maXJtYXRpb24pKGludCB0b2tlbiwgaW50IHJlYXNvbik7CisJdm9pZCAoKmNvbm5lY3RfaW5kaWNhdGlvbikoaW50IHRva2VuLCBpbnQgcmVhc29uKTsKKwl2b2lkICgqZGlzY29ubmVjdF9jb25maXJtYXRpb24pKGludCB0b2tlbiwgaW50IHJlYXNvbik7CisJdm9pZCAoKmRpc2Nvbm5lY3RfaW5kaWNhdGlvbikoaW50IHRva2VuLCBpbnQgcmVhc29uKTsKKwlpbnQgICgqZGF0YV9pbmRpY2F0aW9uKShpbnQgdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCXZvaWQgKCpkYXRhX3RyYW5zbWl0KShpbnQgdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworfTsKKworRWFjaCBtZW1iZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gYSBmdW5jdGlvbiBpbiB0aGUgZGV2aWNlIGRyaXZlcgordGhhdCBpcyBjYWxsZWQgd2hlbiBhIHBhcnRpY3VsYXIgZXZlbnQgaW4gdGhlIExBUEIgbW9kdWxlIG9jY3Vycy4gVGhlc2Ugd2lsbAorYmUgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy4gSWYgYSBjYWxsYmFjayBpcyBub3QgcmVxdWlyZWQgKCEhKSB0aGVuIGEgTlVMTAorbWF5IGJlIHN1YnN0aXR1dGVkLgorCisKK0xBUEIgUGFyYW1ldGVyIFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc3RydWN0dXJlIGlzIHVzZWQgd2l0aCB0aGUgbGFwYl9nZXRwYXJtcyBhbmQgbGFwYl9zZXRwYXJtcyBmdW5jdGlvbnMKKyhzZWUgYmVsb3cpLiBUaGV5IGFyZSB1c2VkIHRvIGFsbG93IHRoZSBkZXZpY2UgZHJpdmVyIHRvIGdldCBhbmQgc2V0IHRoZQorb3BlcmF0aW9uYWwgcGFyYW1ldGVycyBvZiB0aGUgTEFQQiBpbXBsZW1lbnRhdGlvbiBmb3IgYSBnaXZlbiBjb25uZWN0aW9uLgorCitzdHJ1Y3QgbGFwYl9wYXJtc19zdHJ1Y3QgeworCXVuc2lnbmVkIGludCB0MTsKKwl1bnNpZ25lZCBpbnQgdDF0aW1lcjsKKwl1bnNpZ25lZCBpbnQgdDI7CisJdW5zaWduZWQgaW50IHQydGltZXI7CisJdW5zaWduZWQgaW50IG4yOworCXVuc2lnbmVkIGludCBuMmNvdW50OworCXVuc2lnbmVkIGludCB3aW5kb3c7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXVuc2lnbmVkIGludCBtb2RlOworfTsKKworVDEgYW5kIFQyIGFyZSBwcm90b2NvbCB0aW1pbmcgcGFyYW1ldGVycyBhbmQgYXJlIGdpdmVuIGluIHVuaXRzIG9mIDEwMG1zLiBOMgoraXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIG9uIHRoZSBsaW5rIGJlZm9yZSBpdCBpcyBkZWNsYXJlZCBhIGZhaWx1cmUuCitUaGUgd2luZG93IHNpemUgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dHN0YW5kaW5nIGRhdGEgcGFja2V0cyBhbGxvd2VkIHRvCitiZSB1bmFja25vd2xlZGdlZCBieSB0aGUgcmVtb3RlIGVuZCwgdGhlIHZhbHVlIG9mIHRoZSB3aW5kb3cgaXMgYmV0d2VlbiAxCithbmQgNyBmb3IgYSBzdGFuZGFyZCBMQVBCIGxpbmssIGFuZCBiZXR3ZWVuIDEgYW5kIDEyNyBmb3IgYW4gZXh0ZW5kZWQgTEFQQgorbGluay4KKworVGhlIG1vZGUgdmFyaWFibGUgaXMgYSBiaXQgZmllbGQgdXNlZCBmb3Igc2V0dGluZyAoYXQgcHJlc2VudCkgdGhyZWUgdmFsdWVzLgorVGhlIGJpdCBmaWVsZHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCitCaXQJTWVhbmluZworMAlMQVBCIG9wZXJhdGlvbiAoMD1MQVBCX1NUQU5EQVJEIDE9TEFQQl9FWFRFTkRFRCkuCisxCVtTTV1MUCBvcGVyYXRpb24gKDA9TEFQQl9TTFAgMT1MQVBCPU1MUCkuCisyCURURS9EQ0Ugb3BlcmF0aW9uICgwPUxBUEJfRFRFIDE9TEFQQl9EQ0UpCiszLTMxCVJlc2VydmVkLCBtdXN0IGJlIDAuCisKK0V4dGVuZGVkIExBUEIgb3BlcmF0aW9uIGluZGljYXRlcyB0aGUgdXNlIG9mIGV4dGVuZGVkIHNlcXVlbmNlIG51bWJlcnMgYW5kCitjb25zZXF1ZW50bHkgbGFyZ2VyIHdpbmRvdyBzaXplcywgdGhlIGRlZmF1bHQgaXMgc3RhbmRhcmQgTEFQQiBvcGVyYXRpb24uCitNTFAgb3BlcmF0aW9uIGlzIHRoZSBzYW1lIGFzIFNMUCBvcGVyYXRpb24gZXhjZXB0IHRoYXQgdGhlIGFkZHJlc3NlcyB1c2VkIGJ5CitMQVBCIGFyZSBkaWZmZXJlbnQgdG8gaW5kaWNhdGUgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uLCB0aGUgZGVmYXVsdCBpcyBTaW5nbGUKK0xpbmsgUHJvY2VkdXJlLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIERDRSBhbmQgRFRFIG9wZXJhdGlvbiBpcyAoaSkgdGhlCithZGRyZXNzZXMgdXNlZCBmb3IgY29tbWFuZHMgYW5kIHJlc3BvbnNlcywgYW5kIChpaSkgd2hlbiB0aGUgRENFIGlzIG5vdAorY29ubmVjdGVkLCBpdCBzZW5kcyBETSB3aXRob3V0IHBvbGxzIHNldCwgZXZlcnkgVDEuIFRoZSB1cHBlciBjYXNlIGNvbnN0YW50CituYW1lcyB3aWxsIGJlIGRlZmluZWQgaW4gdGhlIHB1YmxpYyBMQVBCIGhlYWRlciBmaWxlLgorCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK1RoZSBMQVBCIG1vZHVsZSBwcm92aWRlcyBhIG51bWJlciBvZiBmdW5jdGlvbiBlbnRyeSBwb2ludHMuCisKKworaW50IGxhcGJfcmVnaXN0ZXIodm9pZCAqdG9rZW4sIHN0cnVjdCBsYXBiX3JlZ2lzdGVyX3N0cnVjdCk7CisKK1RoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBMQVBCIG1vZHVsZSBtYXkgYmUgdXNlZC4gSWYgdGhlIGNhbGwgaXMKK3N1Y2Nlc3NmdWwgdGhlbiBMQVBCX09LIGlzIHJldHVybmVkLiBUaGUgdG9rZW4gbXVzdCBiZSBhIHVuaXF1ZSBpZGVudGlmaWVyCitnZW5lcmF0ZWQgYnkgdGhlIGRldmljZSBkcml2ZXIgdG8gYWxsb3cgZm9yIHRoZSB1bmlxdWUgaWRlbnRpZmljYXRpb24gb2YgdGhlCitpbnN0YW5jZSBvZiB0aGUgTEFQQiBsaW5rLiBJdCBpcyByZXR1cm5lZCBieSB0aGUgTEFQQiBtb2R1bGUgaW4gYWxsIG9mIHRoZQorY2FsbGJhY2tzLCBhbmQgaXMgdXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBpbiBhbGwgY2FsbHMgdG8gdGhlIExBUEIgbW9kdWxlLgorRm9yIG11bHRpcGxlIExBUEIgbGlua3MgaW4gYSBzaW5nbGUgZGV2aWNlIGRyaXZlciwgbXVsdGlwbGUgY2FsbHMgdG8KK2xhcGJfcmVnaXN0ZXIgbXVzdCBiZSBtYWRlLiBUaGUgZm9ybWF0IG9mIHRoZSBsYXBiX3JlZ2lzdGVyX3N0cnVjdCBpcyBnaXZlbgorYWJvdmUuIFRoZSByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHkuCitMQVBCX0JBRFRPS0VOCQlUb2tlbiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCitMQVBCX05PTUVNCQlPdXQgb2YgbWVtb3J5CisKKworaW50IGxhcGJfdW5yZWdpc3Rlcih2b2lkICp0b2tlbik7CisKK1RoaXMgcmVsZWFzZXMgYWxsIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgTEFQQiBsaW5rLiBBbnkgY3VycmVudAorTEFQQiBsaW5rIHdpbGwgYmUgYWJhbmRvbmVkIHdpdGhvdXQgZnVydGhlciBtZXNzYWdlcyBiZWluZyBwYXNzZWQuIEFmdGVyCit0aGlzIGNhbGwsIHRoZSB2YWx1ZSBvZiB0b2tlbiBpcyBubyBsb25nZXIgdmFsaWQgZm9yIGFueSBjYWxscyB0byB0aGUgTEFQQgorZnVuY3Rpb24uIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgdW5yZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseS4KK0xBUEJfQkFEVE9LRU4JCUludmFsaWQvdW5rbm93biBMQVBCIHRva2VuLgorCisKK2ludCBsYXBiX2dldHBhcm1zKHZvaWQgKnRva2VuLCBzdHJ1Y3QgbGFwYl9wYXJtc19zdHJ1Y3QgKnBhcm1zKTsKKworVGhpcyBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gZ2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgTEFQQgordmFyaWFibGVzLCB0aGUgbGFwYl9wYXJtc19zdHJ1Y3QgaXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgdmFsaWQgcmV0dXJuIHZhbHVlcworYXJlOgorCitMQVBCX09LCQkJTEFQQiBnZXRwYXJtcyB3YXMgc3VjY2Vzc2Z1bC4KK0xBUEJfQkFEVE9LRU4JCUludmFsaWQvdW5rbm93biBMQVBCIHRva2VuLgorCisKK2ludCBsYXBiX3NldHBhcm1zKHZvaWQgKnRva2VuLCBzdHJ1Y3QgbGFwYl9wYXJtc19zdHJ1Y3QgKnBhcm1zKTsKKworVGhpcyBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgTEFQQgordmFyaWFibGVzLCB0aGUgbGFwYl9wYXJtc19zdHJ1Y3QgaXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgdmFsdWVzIG9mIHQxdGltZXIsCit0MnRpbWVyIGFuZCBuMmNvdW50IGFyZSBpZ25vcmVkLCBsaWtld2lzZSBjaGFuZ2luZyB0aGUgbW9kZSBiaXRzIHdoZW4KK2Nvbm5lY3RlZCB3aWxsIGJlIGlnbm9yZWQuIEFuIGVycm9yIGltcGxpZXMgdGhhdCBub25lIG9mIHRoZSB2YWx1ZXMgaGF2ZQorYmVlbiBjaGFuZ2VkLiBUaGUgdmFsaWQgcmV0dXJuIHZhbHVlcyBhcmU6CisKK0xBUEJfT0sJCQlMQVBCIGdldHBhcm1zIHdhcyBzdWNjZXNzZnVsLgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCitMQVBCX0lOVkFMVUUJCU9uZSBvZiB0aGUgdmFsdWVzIHdhcyBvdXQgb2YgaXRzIGFsbG93YWJsZSByYW5nZS4KKworCitpbnQgbGFwYl9jb25uZWN0X3JlcXVlc3Qodm9pZCAqdG9rZW4pOworCitJbml0aWF0ZSBhIGNvbm5lY3QgdXNpbmcgdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmdzLiBUaGUgdmFsaWQgcmV0dXJuCit2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiBpcyBzdGFydGluZyB0byBjb25uZWN0LgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCitMQVBCX0NPTk5FQ1RFRAkJTEFQQiBtb2R1bGUgaXMgYWxyZWFkeSBjb25uZWN0ZWQuCisKKworaW50IGxhcGJfZGlzY29ubmVjdF9yZXF1ZXN0KHZvaWQgKnRva2VuKTsKKworSW5pdGlhdGUgYSBkaXNjb25uZWN0LiBUaGUgdmFsaWQgcmV0dXJuIHZhbHVlcyBhcmU6CisKK0xBUEJfT0sJCQlMQVBCIGlzIHN0YXJ0aW5nIHRvIGRpc2Nvbm5lY3QuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KK0xBUEJfTk9UQ09OTkVDVEVECUxBUEIgbW9kdWxlIGlzIG5vdCBjb25uZWN0ZWQuCisKKworaW50IGxhcGJfZGF0YV9yZXF1ZXN0KHZvaWQgKnRva2VuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworUXVldWUgZGF0YSB3aXRoIHRoZSBMQVBCIG1vZHVsZSBmb3IgdHJhbnNtaXR0aW5nIG92ZXIgdGhlIGxpbmsuIElmIHRoZSBjYWxsCitpcyBzdWNjZXNzZnVsIHRoZW4gdGhlIHNrYnVmZiBpcyBvd25lZCBieSB0aGUgTEFQQiBtb2R1bGUgYW5kIG1heSBub3QgYmUKK3VzZWQgYnkgdGhlIGRldmljZSBkcml2ZXIgYWdhaW4uIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgaGFzIGFjY2VwdGVkIHRoZSBkYXRhLgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCitMQVBCX05PVENPTk5FQ1RFRAlMQVBCIG1vZHVsZSBpcyBub3QgY29ubmVjdGVkLgorCisKK2ludCBsYXBiX2RhdGFfcmVjZWl2ZWQodm9pZCAqdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCitRdWV1ZSBkYXRhIHdpdGggdGhlIExBUEIgbW9kdWxlIHdoaWNoIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4gSXQKK2lzIGV4cGVjdGVkIHRoYXQgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBMQVBCIG1vZHVsZSBoYXMgc2tiLT5kYXRhIHBvaW50aW5nCit0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBMQVBCIGRhdGEuIElmIHRoZSBjYWxsIGlzIHN1Y2Nlc3NmdWwgdGhlbiB0aGUgc2tidWZmCitpcyBvd25lZCBieSB0aGUgTEFQQiBtb2R1bGUgYW5kIG1heSBub3QgYmUgdXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBhZ2Fpbi4KK1RoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgaGFzIGFjY2VwdGVkIHRoZSBkYXRhLgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCisKKworQ2FsbGJhY2tzCistLS0tLS0tLS0KKworVGhlc2UgY2FsbGJhY2tzIGFyZSBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGRldmljZSBkcml2ZXIgZm9yIHRoZSBMQVBCCittb2R1bGUgdG8gY2FsbCB3aGVuIGFuIGV2ZW50IG9jY3Vycy4gVGhleSBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBMQVBCCittb2R1bGUgd2l0aCBsYXBiX3JlZ2lzdGVyIChzZWUgYWJvdmUpIGluIHRoZSBzdHJ1Y3R1cmUgbGFwYl9yZWdpc3Rlcl9zdHJ1Y3QKKyhzZWUgYWJvdmUpLgorCisKK3ZvaWQgKCpjb25uZWN0X2NvbmZpcm1hdGlvbikodm9pZCAqdG9rZW4sIGludCByZWFzb24pOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYWZ0ZXIKK2JlaW5nIHJlcXVlc3RlZCBieSBhIGNhbGwgdG8gbGFwYl9jb25uZWN0X3JlcXVlc3QgKHNlZSBhYm92ZSkuIFRoZSByZWFzb24gaXMKK2Fsd2F5cyBMQVBCX09LLgorCisKK3ZvaWQgKCpjb25uZWN0X2luZGljYXRpb24pKHZvaWQgKnRva2VuLCBpbnQgcmVhc29uKTsKKworVGhpcyBpcyBjYWxsZWQgYnkgdGhlIExBUEIgbW9kdWxlIHdoZW4gdGhlIGxpbmsgaXMgZXN0YWJsaXNoZWQgYnkgdGhlIHJlbW90ZQorc3lzdGVtLiBUaGUgdmFsdWUgb2YgcmVhc29uIGlzIGFsd2F5cyBMQVBCX09LLgorCisKK3ZvaWQgKCpkaXNjb25uZWN0X2NvbmZpcm1hdGlvbikodm9pZCAqdG9rZW4sIGludCByZWFzb24pOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiBhbiBldmVudCBvY2N1cnMgYWZ0ZXIgdGhlIGRldmljZQorZHJpdmVyIGhhcyBjYWxsZWQgbGFwYl9kaXNjb25uZWN0X3JlcXVlc3QgKHNlZSBhYm92ZSkuIFRoZSByZWFzb24gaW5kaWNhdGVzCit3aGF0IGhhcyBoYXBwZW5lZC4gSW4gYWxsIGNhc2VzIHRoZSBMQVBCIGxpbmsgY2FuIGJlIHJlZ2FyZGVkIGFzIGJlaW5nCit0ZXJtaW5hdGVkLiBUaGUgdmFsdWVzIGZvciByZWFzb24gYXJlOgorCitMQVBCX09LCQkJVGhlIExBUEIgbGluayB3YXMgdGVybWluYXRlZCBub3JtYWxseS4KK0xBUEJfTk9UQ09OTkVDVEVECVRoZSByZW1vdGUgc3lzdGVtIHdhcyBub3QgY29ubmVjdGVkLgorTEFQQl9USU1FRE9VVAkJTm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGluIE4yIHRyaWVzIGZyb20gdGhlIHJlbW90ZQorCQkJc3lzdGVtLgorCisKK3ZvaWQgKCpkaXNjb25uZWN0X2luZGljYXRpb24pKHZvaWQgKnRva2VuLCBpbnQgcmVhc29uKTsKKworVGhpcyBpcyBjYWxsZWQgYnkgdGhlIExBUEIgbW9kdWxlIHdoZW4gdGhlIGxpbmsgaXMgdGVybWluYXRlZCBieSB0aGUgcmVtb3RlCitzeXN0ZW0gb3IgYW5vdGhlciBldmVudCBoYXMgb2NjdXJyZWQgdG8gdGVybWluYXRlIHRoZSBsaW5rLiBUaGlzIG1heSBiZQorcmV0dXJuZWQgaW4gcmVzcG9uc2UgdG8gYSBsYXBiX2Nvbm5lY3RfcmVxdWVzdCAoc2VlIGFib3ZlKSBpZiB0aGUgcmVtb3RlCitzeXN0ZW0gcmVmdXNlZCB0aGUgcmVxdWVzdC4gVGhlIHZhbHVlcyBmb3IgcmVhc29uIGFyZToKKworTEFQQl9PSwkJCVRoZSBMQVBCIGxpbmsgd2FzIHRlcm1pbmF0ZWQgbm9ybWFsbHkgYnkgdGhlIHJlbW90ZQorCQkJc3lzdGVtLgorTEFQQl9SRUZVU0VECQlUaGUgcmVtb3RlIHN5c3RlbSByZWZ1c2VkIHRoZSBjb25uZWN0IHJlcXVlc3QuCitMQVBCX05PVENPTk5FQ1RFRAlUaGUgcmVtb3RlIHN5c3RlbSB3YXMgbm90IGNvbm5lY3RlZC4KK0xBUEJfVElNRURPVVQJCU5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZCBpbiBOMiB0cmllcyBmcm9tIHRoZSByZW1vdGUKKwkJCXN5c3RlbS4KKworCitpbnQgKCpkYXRhX2luZGljYXRpb24pKHZvaWQgKnRva2VuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworVGhpcyBpcyBjYWxsZWQgYnkgdGhlIExBUEIgbW9kdWxlIHdoZW4gZGF0YSBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIHRoZQorcmVtb3RlIHN5c3RlbSB0aGF0IHNob3VsZCBiZSBwYXNzZWQgb250byB0aGUgbmV4dCBsYXllciBpbiB0aGUgcHJvdG9jb2wKK3N0YWNrLiBUaGUgc2tidWZmIGJlY29tZXMgdGhlIHByb3BlcnR5IG9mIHRoZSBkZXZpY2UgZHJpdmVyIGFuZCB0aGUgTEFQQgorbW9kdWxlIHdpbGwgbm90IHBlcmZvcm0gYW55IG1vcmUgYWN0aW9ucyBvbiBpdC4gVGhlIHNrYi0+ZGF0YSBwb2ludGVyIHdpbGwKK2JlIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgYWZ0ZXIgdGhlIExBUEIgaGVhZGVyLgorCitUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIE5FVF9SWF9EUk9QIChhcyBkZWZpbmVkIGluIHRoZSBoZWFkZXIKK2ZpbGUgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCkgaWYgYW5kIG9ubHkgaWYgdGhlIGZyYW1lIHdhcyBkcm9wcGVkCitiZWZvcmUgaXQgY291bGQgYmUgZGVsaXZlcmVkIHRvIHRoZSB1cHBlciBsYXllci4KKworCit2b2lkICgqZGF0YV90cmFuc21pdCkodm9pZCAqdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiBkYXRhIGlzIHRvIGJlIHRyYW5zbWl0dGVkIHRvIHRoZQorcmVtb3RlIHN5c3RlbSBieSB0aGUgZGV2aWNlIGRyaXZlci4gVGhlIHNrYnVmZiBiZWNvbWVzIHRoZSBwcm9wZXJ0eSBvZiB0aGUKK2RldmljZSBkcml2ZXIgYW5kIHRoZSBMQVBCIG1vZHVsZSB3aWxsIG5vdCBwZXJmb3JtIGFueSBtb3JlIGFjdGlvbnMgb24gaXQuCitUaGUgc2tiLT5kYXRhIHBvaW50ZXIgd2lsbCBiZSBwb2ludGluZyB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgTEFQQiBoZWFkZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbHRwYy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbHRwYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyYTkxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sdHBjLnR4dApAQCAtMCwwICsxLDEzMSBAQAorVGhpcyBpcyB0aGUgQUxQSEEgdmVyc2lvbiBvZiB0aGUgbHRwYyBkcml2ZXIuCisKK0luIG9yZGVyIHRvIHVzZSBpdCwgeW91IHdpbGwgbmVlZCBhdCBsZWFzdCB2ZXJzaW9uIDEuMy4zIG9mIHRoZQorbmV0YXRhbGsgcGFja2FnZSwgYW5kIHRoZSBBcHBsZSBvciBGYXJhbGxvbiBMb2NhbFRhbGsgUEMgY2FyZC4KK1RoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgTG9jYWxUYWxrIGNhcmRzIGZvciB0aGUgUEM7IHRoaXMKK2RyaXZlciBhcHBsaWVzIG9ubHkgdG8gdGhlIG9uZSB3aXRoIHRoZSA2NWMwMiBwcm9jZXNzb3IgY2hpcCBvbiBpdC4KKworVG8gaW5jbHVkZSBpdCBpbiB0aGUga2VybmVsLCBzZWxlY3QgdGhlIENPTkZJR19MVFBDIHN3aXRjaCBpbiB0aGUKK2NvbmZpZ3VyYXRpb24gZGlhbG9nLiAgWW91IGNhbiBhbHNvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuCisKK1doaWxlIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGF1dG9wcm9iZSB0aGUgSS9PIHBvcnQgYWRkcmVzcywgSVJRCitsaW5lLCBhbmQgRE1BIGNoYW5uZWwgb2YgdGhlIGNhcmQsIHRoaXMgZG9lcyBub3QgYWx3YXlzIHdvcmsuICBGb3IKK3RoaXMgcmVhc29uLCB5b3Ugc2hvdWxkIGJlIHByZXBhcmVkIHRvIHN1cHBseSB0aGVzZSBwYXJhbWV0ZXJzCit5b3Vyc2VsZi4gIChzZWUgIkNhcmQgQ29uZmlndXJhdGlvbiIgYmVsb3cgZm9yIGhvdyB0byBkZXRlcm1pbmUgb3IKK2NoYW5nZSB0aGUgc2V0dGluZ3Mgb24geW91ciBjYXJkKQorCitXaGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB5b3UgY2FuIGFkZCBhIGxpbmUgc3VjaAorYXMgdGhlIGZvbGxvd2luZyB0byB5b3VyIC9ldGMvbGlsby5jb25mOgorCisgYXBwZW5kPSJsdHBjPTB4MjQwLDksMSIKKword2hlcmUgdGhlIHBhcmFtZXRlcnMgKGluIG9yZGVyKSBhcmUgdGhlIHBvcnQgYWRkcmVzcywgSVJRLCBhbmQgRE1BCitjaGFubmVsLiAgVGhlIHNlY29uZCBhbmQgdGhpcmQgdmFsdWVzIGNhbiBiZSBvbWl0dGVkLCBpbiB3aGljaCBjYXNlCit0aGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGRldGVybWluZSB0aGVtIGl0c2VsZi4KKworSWYgeW91IGxvYWQgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgeW91IGNhbiBwYXNzIHRoZSBwYXJhbWV0ZXJzICJpbz0iLAorImlycT0iLCBhbmQgImRtYT0iIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCBpbnNtb2Qgb3IgbW9kcHJvYmUsIG9yIGFkZAordGhlbSBhcyBvcHRpb25zIGluIC9ldGMvbW9kcHJvYmUuY29uZjoKKworIGFsaWFzIGx0MCBsdHBjICMgYXV0b2xvYWQgdGhlIG1vZHVsZSB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgY29uZmlndXJlZAorIG9wdGlvbnMgbHRwYyBpbz0weDI0MCBpcnE9OSBkbWE9MQorCitCZWZvcmUgc3RhcnRpbmcgdXAgdGhlIG5ldGF0YWxrIGRlbW9ucyAocGVyaGFwcyBpbiByYy5sb2NhbCksIHlvdQorbmVlZCB0byBhZGQgYSBsaW5lIHN1Y2ggYXM6CisKKyAvc2Jpbi9pZmNvbmZpZyBsdDAgMTI3LjAuMC40MgorCitUaGUgYWRkcmVzcyBpcyB1bmltcG9ydGFudCAtIGhvd2V2ZXIsIHRoZSBjYXJkIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQKK3dpdGggaWZjb25maWcgc28gdGhhdCBOZXRhdGFsayBjYW4gZmluZCBpdC4KKworVGhlIGFwcHJvcHJpYXRlIG5ldGF0YWxrIGNvbmZpZ3VyYXRpb24gZGVwZW5kcyBvbiB3aGV0aGVyIHlvdSBhcmUKK2F0dGFjaGVkIHRvIGEgbmV0d29yayB0aGF0IGluY2x1ZGVzIEFwcGxlVGFsayByb3V0ZXJzIG9yIG5vdC4gIElmLAorbGlrZSBtZSwgeW91IGFyZSBzaW1wbHkgY29ubmVjdGluZyB0byB5b3VyIGhvbWUgTWFjaW50b3NoZXMgYW5kCitwcmludGVycywgeW91IG5lZWQgdG8gc2V0IHVwIG5ldGF0YWxrIHRvICJzZWVkIi4gIFRoZSB3YXkgSSBkbyB0aGlzCitpcyB0byBoYXZlIHRoZSBsaW5lcworCisgZHVtbXkgLXNlZWQgLXBoYXNlIDIgLW5ldCAyMDAwIC1hZGRyIDIwMDAuMjYgLXpvbmUgIjEwMzMiCisgbHQwIC1zZWVkIC1waGFzZSAxIC1uZXQgMTAzMyAtYWRkciAxMDMzLjI3IC16b25lICIxMDMzIgorCitpbiBteSBhdGFsa2QuY29uZi4gIFdoYXQgaXMgZ29pbmcgb24gaGVyZSBpcyB0aGF0IEkgbmVlZCB0byBmb29sCituZXRhdGFsayBpbnRvIHRoaW5raW5nIHRoYXQgdGhlcmUgYXJlIHR3byBBcHBsZVRhbGsgaW50ZXJmYWNlcworcHJlc2VudDsgb3RoZXJ3aXNlLCBpdCByZWZ1c2VzIHRvIHNlZWQuICBUaGlzIGlzIGEgaGFjaywgYW5kIGEgbW9yZQorcGVybWFuZW50IHNvbHV0aW9uIHdvdWxkIGJlIHRvIGFsdGVyIHRoZSBuZXRhdGFsayBjb2RlLiAgQWxzbywgbWFrZQorc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGUgZHVtbXkgaW50ZXJmYWNlIC0gSWYgaXQncworY29tcGlsZWQgYXMgYSBtb2R1bGUsIHlvdSB3aWxsIG5lZWQgdG8gcmVmZXIgdG8gaXQgYXMgImR1bW15MCIgb3Igc29tZQorc3VjaC4KKworSWYgeW91IGFyZSBhdHRhY2hlZCB0byBhbiBleHRlbmRlZCBBcHBsZVRhbGsgbmV0d29yaywgd2l0aCByb3V0ZXJzIG9uCitpdCwgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBmb29sIGFyb3VuZCB3aXRoIHRoaXMgLS0gdGhlIGFwcHJvcHJpYXRlCitsaW5lIGluIGF0YWxrZC5jb25mIGlzCisKKyBsdDAgLXBoYXNlIDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2FyZCBDb25maWd1cmF0aW9uOgorCitUaGUgaW50ZXJydXB0cyBhbmQgc28gZm9ydGggYXJlIGNvbmZpZ3VyZWQgdmlhIHRoZSBkaXBzd2l0Y2ggb24gdGhlCitib2FyZC4gIFNldCB0aGUgc3dpdGNoZXMgc28gYXMgbm90IHRvIGNvbmZsaWN0IHdpdGggb3RoZXIgaGFyZHdhcmUuCisKKyAgICAgICBJbnRlcnJ1cHRzIC0tIHNldCBhdCBtb3N0IG9uZS4gIElmIG5vbmUgYXJlIHNldCwgdGhlIGRyaXZlciB1c2VzCisgICAgICAgcG9sbGVkIG1vZGUuICBCZWNhdXNlIHRoZSBjYXJkIHdhcyBkZXZlbG9wZWQgaW4gdGhlIFhUIGVyYSwgdGhlCisgICAgICAgb3JpZ2luYWwgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gSVJRMi4gIFNpbmNlIHlvdSdsbCBiZSBydW5uaW5nCisgICAgICAgdGhpcyBvbiBhbiBBVCAob3IgbGF0ZXIpIGNsYXNzIG1hY2hpbmUsIHRoYXQgcmVhbGx5IG1lYW5zIElSUTkuCisKKyAgICAgICBTVzEgICAgIElSUSA0CisgICAgICAgU1cyICAgICBJUlEgMworICAgICAgIFNXMyAgICAgSVJRIDkgKDIgaW4gb3JpZ2luYWwgY2FyZCBkb2N1bWVudGF0aW9uIG9ubHkgYXBwbGllcyB0byBYVCkKKworCisgICAgICAgRE1BIC0tIGNob29zZSBETUEgMSBvciAzLCBhbmQgc2V0IGJvdGggY29ycmVzcG9uZGluZyBzd2l0Y2hlcy4KKworICAgICAgIFNXNCAgICAgRE1BIDMKKyAgICAgICBTVzUgICAgIERNQSAxCisgICAgICAgU1c2ICAgICBETUEgMworICAgICAgIFNXNyAgICAgRE1BIDEKKworCisgICAgICAgSS9PIGFkZHJlc3MgLS0gY2hvb3NlIG9uZS4KKworICAgICAgIFNXOCAgICAgMjIwIC8gMjQwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lQOgorCitZZXMsIGl0IGlzIHBvc3NpYmxlIHRvIGRvIElQIG92ZXIgTG9jYWxUYWxrLiAgSG93ZXZlciwgeW91IGNhbid0IGp1c3QKK3RyZWF0IHRoZSBMb2NhbFRhbGsgZGV2aWNlIGxpa2UgYW4gb3JkaW5hcnkgRXRoZXJuZXQgZGV2aWNlLCBldmVuIGlmCit0aGF0J3Mgd2hhdCBpdCBsb29rcyBsaWtlIHRvIE5ldGF0YWxrLgorCitJbnN0ZWFkLCB5b3UgZm9sbG93IHRoZSBzYW1lIHByb2NlZHVyZSBhcyBmb3IgZG9pbmcgSVAgaW4gRXRoZXJUYWxrLgorU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGRkcC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitrZXJuZWwgZHJpdmVyIGFuZCB1c2Vyc3BhY2UgdG9vbHMgbmVlZGVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCVUdTOgorCitJUlEgYXV0b3Byb2Jpbmcgb2Z0ZW4gZG9lc24ndCB3b3JrIG9uIGEgY29sZCBib290LiAgVG8gZ2V0IGFyb3VuZAordGhpcywgZWl0aGVyIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgb3IgcGFzcyB0aGUgcGFyYW1ldGVycworZm9yIHRoZSBjYXJkIHRvIHRoZSBrZXJuZWwgYXMgZGVzY3JpYmVkIGFib3ZlLgorCitBbHNvLCBhcyB1c3VhbCwgYXV0b3Byb2JpbmcgaXMgbm90IHJlY29tbWVuZGVkIHdoZW4geW91IHVzZSB0aGUgZHJpdmVyCithcyBhIG1vZHVsZS4gKHRob3VnaCBpdCB1c3VhbGx5IHdvcmtzIGF0IGJvb3QgdGltZSwgYXQgbGVhc3QpCisKK1BvbGxlZCBtb2RlIGlzICpyZWFsbHkqIHNsb3cgc29tZXRpbWVzLCBidXQgdGhpcyBzZWVtcyB0byBkZXBlbmQgb24KK3RoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBuZXR3b3JrLgorCitJdCBtYXkgdGhlb3JldGljYWxseSBiZSBwb3NzaWJsZSB0byB1c2UgdHdvIExUUEMgY2FyZHMgaW4gdGhlIHNhbWUKK21hY2hpbmUsIGJ1dCB0aGlzIGlzIHVuc3VwcG9ydGVkLCBzbyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhpcywKK3lvdSdsbCBwcm9iYWJseSBoYXZlIHRvIGhhY2sgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUgYSBiaXQuCisKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1RIQU5LUzoKKwlUaGFua3MgdG8gQWxhbiBDb3ggZm9yIGhlbHBmdWwgZGlzY3Vzc2lvbnMgZWFybHkgb24gaW4gdGhpcword29yaywgYW5kIHRvIERlbmlzIEhhaW5zd29ydGggZm9yIGRvaW5nIHRoZSBibGVlZGluZy1lZGdlIHRlc3RpbmcuCisKKy0tIEJyYWRmb3JkIEpvaG5zb24gPGJyYWRmb3JkQG1hdGgudW1uLmVkdT4KKworLS0gVXBkYXRlZCAxMS8wOS8xOTk4IGJ5IERhdmlkIEh1Z2dpbnMtRGFpbmVzIDxkaGRAZGViaWFuLm9yZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tdWx0aWNhc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL211bHRpY2FzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0OWE2NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tdWx0aWNhc3QudHh0CkBAIC0wLDAgKzEsNjQgQEAKK0JlaGF2aW91ciBvZiBDYXJkcyBVbmRlciBNdWx0aWNhc3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBob3cgdGhleSBjdXJyZW50bHkgYmVoYXZlLCBub3Qgd2hhdCB0aGUgaGFyZHdhcmUgY2FuIGRvLS1mb3IgZXhhbXBsZSwKK3RoZSBMYW5jZSBkcml2ZXIgZG9lc24ndCB1c2UgaXRzIGZpbHRlciwgZXZlbiB0aG91Z2ggdGhlIGNvZGUgZm9yIGxvYWRpbmcKK2l0IGlzIGluIHRoZSBERUMgTGFuY2UtYmFzZWQgZHJpdmVyLgorCitUaGUgZm9sbG93aW5nIGFyZSByZXF1aXJlbWVudHMgZm9yIG11bHRpY2FzdGluZyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBcHBsZVRhbGsJTXVsdGljYXN0CWhhcmR3YXJlIGZpbHRlcmluZyBub3QgaW1wb3J0YW50IGJ1dAorCQkJCSBhdm9pZCBjYXJkcyBvbmx5IGRvaW5nIHByb21pc2MKK0lQLU11bHRpY2FzdAlNdWx0aWNhc3QJaGFyZHdhcmUgZmlsdGVycyByZWFsbHkgaGVscAorSVAtTVJvdXRlCUFsbE11bHRpCWhhcmR3YXJlIGZpbHRlcnMgYXJlIG9mIG5vIGhlbHAKKworCitCb2FyZAkJTXVsdGljYXN0CUFsbE11bHRpCVByb21pc2MJCUZpbHRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszYzUwMQkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUKKzNjNTAzCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQorM2M1MDUJCVlFUwkJTk8JCVlFUwkJSGFyZHdhcmUKKzNjNTA3CQlOTwkJTk8JCU5PCQlOL0EKKzNjNTA5CQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZQorM2M1OXgJCVlFUwkJWUVTCQlZRVMJCVNvZnR3YXJlCithYzMyMDAJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCithcHJpY290CQlZRVMJCVBST01JU0MJCVlFUwkJSGFyZHdhcmUKK2FyY25ldAkJTk8JCU5PCQlOTwkJTi9BCithdDE3MDAJCVBST01JU0MJCVBST01JU0MJCVlFUwkJU29mdHdhcmUKK2F0cAkJUFJPTUlTQwkJUFJPTUlTQwkJWUVTCQlTb2Z0d2FyZQorY3M4OXgwCQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZQorZGU0eDUJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitkZTYwMAkJTk8JCU5PCQlOTwkJTi9BCitkZTYyMAkJUFJPTUlTQwkJUFJPTUlTQwkJWUVTCQlTb2Z0d2FyZQorZGVwY2EJCVlFUwkJUFJPTUlTQwkJWUVTCQlIYXJkd2FyZQorZG1mZQkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUoKikKK2UyMTAwCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQorZWVwcm8JCVlFUwkJUFJPTUlTQwkJWUVTCQlIYXJkd2FyZQorZWV4cHJlc3MJTk8JCU5PCQlOTwkJTi9BCitld3JrMwkJWUVTCQlQUk9NSVNDCQlZRVMJCUhhcmR3YXJlCitocC1wbHVzCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQoraHAJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitocDEwMAkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2libXRyCQlOTwkJTk8JCU5PCQlOL0EKK2lvYzMtZXRoCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitsYW5jZQkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUoIykKK25lCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQorbmk1MgkJPC0tLS0tLS0tLS0tLS0tLS0tLSBCdWdneSAtLS0tLS0tLS0tLS0tLS0tLS0+CituaTY1CQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZSgjKQorc2VlcQkJTk8JCU5PCQlOTwkJTi9BCitzZ2lzZWVrCQk8LS0tLS0tLS0tLS0tLS0tLS0tIEJ1Z2d5IC0tLS0tLS0tLS0tLS0tLS0tLT4KK3NrX2cxNgkJTk8JCU5PCQlZRVMJCU4vQQorc21jLXVsdHJhCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitzdW5sYW5jZQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQordHVsaXAJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCit3YXZlbGFuCQlZRVMJCVBST01JU0MJCVlFUwkJSGFyZHdhcmUKK3dkCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQoreGlyYzJwc19jcwlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQorem5ldAkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUKKworCitQUk9NSVNDID0gVGhpcyBtdWx0aWNhc3QgbW9kZSBpcyBpbiBmYWN0IHByb21pc2N1b3VzIG1vZGUuIEF2b2lkIHVzaW5nCitjYXJkcyB3aG8gZ28gUFJPTUlTQyBvbiBhbnkgbXVsdGljYXN0IGluIGEgbXVsdGljYXN0IGtlcm5lbC4KKworKCMpID0gSGFyZHdhcmUgbXVsdGljYXN0IHN1cHBvcnQgaXMgbm90IHVzZWQgeWV0LgorKCopID0gSGFyZHdhcmUgc3VwcG9ydCBmb3IgRGF2aWNvbSA5MTMyIGNoaXBzZXQgb25seS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uY3NhLXRlbG5ldCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uY3NhLXRlbG5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzdkMjhiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25jc2EtdGVsbmV0CkBAIC0wLDAgKzEsMTYgQEAKK05DU0EgdGVsbmV0IGRvZXNuJ3Qgd29yayB3aXRoIHBhdGggTVRVIGRpc2NvdmVyeSBlbmFibGVkLiBUaGlzIGlzIGR1ZSB0byBhCitidWcgaW4gTkNTQSB0aGF0IGFsc28gc3RvcHMgaXQgd29ya2luZyB3aXRoIG90aGVyIG1vZGVybiBuZXR3b3JraW5nIGNvZGUKK3N1Y2ggYXMgU29sYXJpcy4KKworVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBjb3VydGVzeSBvZiAKK01hcmVrIDxtYXJla21AaTE3bGludXhiLmlzdHMucHdyLndyb2MucGw+CisKK1RoZXJlIGlzIGEgZml4ZWQgdmVyc2lvbiBzb21ld2hlcmUgb24gZnRwLnVwZS5hYy56YSAoc29ycnksIEkgZG9uJ3QKK3JlbWVtYmVyIHRoZSBleGFjdCBwYXRobmFtZSwgYW5kIHRoaXMgc2l0ZSBpcyB2ZXJ5IHNsb3cgZnJvbSBoZXJlKS4KK0l0IG1heSBvciBtYXkgbm90IGJlIGZhc3RlciBmb3IgeW91IHRvIGdldCBpdCBmcm9tCitmdHA6Ly9mdHAuaXN0cy5wd3Iud3JvYy5wbC9wdWIvbXNkb3MvdGVsbmV0L25jc2FfdXBlL3RlbDIzMDc0LnppcAorKHNvdXJjZSBpcyBpbiB2MjMwNzA0cy56aXApLiAgSSBoYXZlIHRlc3RlZCBpdCB3aXRoIDEuMy43OSAod2l0aAorcGF0aCBtdHUgZGlzY292ZXJ5IGVuYWJsZWQgLSBuY3NhIDIuMy4wOCBkaWRuJ3Qgd29yaykgYW5kIGl0IHNlZW1zCit0byB3b3JrLiAgSSBkb24ndCBrbm93IGlmIGFueW9uZSBpcyB3b3JraW5nIG9uIHRoaXMgY29kZSAtIHRoaXMKK3ZlcnNpb24gaXMgb3ZlciBhIHllYXIgb2xkLiAgVG9vIGJhZCAtIGl0J3MgZmFzdGVyIGFuZCBvZnRlbiBtb3JlCitzdGFibGUgdGhhbiB0aGVzZSB3aW5kb3plIHRlbG5ldHMsIGFuZCBydW5zIG9uIGFsbW9zdCBhbnl0aGluZy4uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldC1tb2R1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXQtbW9kdWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzMGE4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXQtbW9kdWxlcy50eHQKQEAgLTAsMCArMSwzMjQgQEAKK1dlZCAyLUF1Zy05NSAgPG1hdHRpLmFhcm5pb0B1dHUuZmk+CisKKwkJTGludXggbmV0d29yayBkcml2ZXIgbW9kdWxlcworCisJRG8gbm90IG1pc3Rha2UgdGhpcyBmb3IgIlJFQURNRS5tb2R1bGVzIiBhdCB0aGUgdG9wLWxldmVsCisJZGlyZWN0b3J5ISAgVGhhdCBkb2N1bWVudCB0ZWxscyBhYm91dCBtb2R1bGVzIGluIGdlbmVyYWwsIHdoaWxlCisJdGhpcyBvbmUgdGVsbHMgb25seSBhYm91dCBuZXR3b3JrIGRldmljZSBkcml2ZXIgbW9kdWxlcy4KKworCVRoaXMgaXMgYSBwb3Rwb3Vycmkgb2YgSU5TTU9ELXRpbWUoKikgY29uZmlndXJhdGlvbiBvcHRpb25zCisJKGlmIHN1Y2ggZXhpc3RzKSBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgb2YgdmFyaW91cyBtb2R1bGVzCisJaW4gdGhlIExpbnV4IG5ldHdvcmsgZHJpdmVycyBjb2xsZWN0aW9uLgorCisJU29tZSBtb2R1bGVzIGhhdmUgYWxzbyBoaWRkZW4gKD0gbm9uLWRvY3VtZW50ZWQpIHR1bmFibGUgdmFsdWVzLgorCVRoZSBjaG9pY2Ugb2Ygbm90IGRvY3VtZW50aW5nIHRoZW0gaXMgYmFzZWQgb24gZ2VuZXJhbCBiZWxpZWYsIHRoYXQKKwl0aGUgbGVzcyB0aGUgdXNlciBuZWVkcyB0byBrbm93LCB0aGUgYmV0dGVyLiAgKFRoZXJlIGFyZSB0aGluZ3MgdGhhdAorCWRyaXZlciBkZXZlbG9wZXJzIGNhbiB1c2UsIG90aGVycyBzaG91bGQgbm90IGNvbmZ1c2UgdGhlbXNlbHZlcy4pCisKKwlJbiBtYW55IGNhc2VzIGl0IGlzIGhpZ2hseSBwcmVmZXJyZWQgdGhhdCBpbnNtb2Q6aW5nIGlzIGRvbmUKKwlPTkxZIHdpdGggZGVmaW5pbmcgYW4gZXhwbGljaXQgYWRkcmVzcyBmb3IgdGhlIGNhcmQsIEFORCBCWQorCU5PVCBVU0lORyBBVVRPLVBST0JJTkchCisKKwlOb3cgbW9zdCBjYXJkcyBoYXZlIHNvbWUgZXhwbGljaXRseSBkZWZpbmVkIGJhc2UgYWRkcmVzcyB0aGF0IHRoZXkKKwlhcmUgY29tcGlsZWQgd2l0aCAodG8gYXZvaWQgYXV0by1wcm9iaW5nLCBhbW9uZyBvdGhlciB0aGluZ3MpLgorCUlmIHRoYXQgY29tcGlsZWQgdmFsdWUgZG9lcyBub3QgbWF0Y2ggeW91ciBhY3R1YWwgY29uZmlndXJhdGlvbiwKKwlkbyB1c2UgdGhlICJpbz0weFhYWCIgLXBhcmFtZXRlciBmb3IgdGhlIGluc21vZCwgYW5kIGdpdmUgdGhlcmUKKwlhIHZhbHVlIG1hdGNoaW5nIHlvdXIgZW52aXJvbm1lbnQuCisKKwlJZiB5b3UgYXJlIGFkdmVudHVyb3VzLCB5b3UgY2FuIGFzayB0aGUgZHJpdmVyIHRvIGF1dG9wcm9iZQorCWJ5IHVzaW5nIHRoZSAiaW89MCIgcGFyYW1ldGVyLCBob3dldmVyIGl0IGlzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzCisJdGhpbmcgdG8gZG8gaW4gYSBsaXZlIHN5c3RlbS4gIChJZiB5b3UgZG9uJ3Qga25vdyB3aGVyZSB0aGUKKwljYXJkIGlzIGxvY2F0ZWQsIHlvdSBjYW4gdHJ5IGF1dG9wcm9iaW5nLCBhbmQgYWZ0ZXIgcG9zc2libGUKKwljcmFzaCByZWNvdmVyeSwgaW5zbW9kIHdpdGggcHJvcGVyIElPLWFkZHJlc3MuLikKKworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJKCopCSJJTlNNT0QtdGltZSIgbWVhbnMgd2hlbiB5b3UgbG9hZCBtb2R1bGUgd2l0aAorCQkvc2Jpbi9pbnNtb2QgIHlvdSBjYW4gZmVlZCBpdCBvcHRpb25hbCBwYXJhbWV0ZXJzLgorCQlTZWUgIm1hbiBpbnNtb2QiLgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCTgzOTAgYmFzZWQgTmV0d29yayBNb2R1bGVzCQkoUGF1bCBHb3J0bWFrZXIsIE5vdiAxMiwgMTk5NSkKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoSW5jbHVkZXM6IHNtYy11bHRyYSwgbmUsIHdkLCAzYzUwMywgaHAsIGhwLXBsdXMsIGUyMTAwIGFuZCBhYzMyMDApCisKK1RoZSA4MzkwIHNlcmllcyBvZiBuZXR3b3JrIGRyaXZlcnMgbm93IHN1cHBvcnQgbXVsdGlwbGUgY2FyZCBzeXN0ZW1zIHdpdGhvdXQgCityZWxvYWRpbmcgdGhlIHNhbWUgbW9kdWxlIG11bHRpcGxlIHRpbWVzIChtZW1vcnkgZWZmaWNpZW50ISkgVGhpcyBpcyBkb25lIGJ5IAorc3BlY2lmeWluZyBtdWx0aXBsZSBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzLCBzdWNoIGFzOgorCisJaW5zbW9kIDNjNTAzLm8gaW89MHgyODAsMHgzMDAsMHgzMzAsMHgzNTAgIHhjdnI9MCwxLDAsMQorCitUaGUgYWJvdmUgd291bGQgaGF2ZSB0aGUgb25lIG1vZHVsZSBjb250cm9sbGluZyBmb3VyIDNjNTAzIGNhcmRzLCB3aXRoIGNhcmQgMgorYW5kIDQgdXNpbmcgZXh0ZXJuYWwgdHJhbnNjZWl2ZXJzLiBUaGUgImluc21vZCIgbWFudWFsIGRlc2NyaWJlcyB0aGUgdXNhZ2UKK29mIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZSBsaXN0cy4KKworSXQgaXMgKlNUUk9OR0xZIFJFQ09NTUVOREVEKiB0aGF0IHlvdSBzdXBwbHkgImlvPSIgaW5zdGVhZCBvZiBhdXRvcHJvYmluZy4KK0lmIGFuICJpbz0iIGFyZ3VtZW50IGlzIG5vdCBzdXBwbGllZCwgdGhlbiB0aGUgSVNBIGRyaXZlcnMgd2lsbCBjb21wbGFpbgorYWJvdXQgYXV0b3Byb2JpbmcgYmVpbmcgbm90IHJlY29tbWVuZGVkLCBhbmQgYmVncnVkZ2luZ2x5IGF1dG9wcm9iZSBmb3IKK2EgKlNJTkdMRSBDQVJEIE9OTFkqIC0tIGlmIHlvdSB3YW50IHRvIHVzZSBtdWx0aXBsZSBjYXJkcyB5b3UgKmhhdmUqIHRvIAorc3VwcGx5IGFuICJpbz0weE5OTiwweFFRUSwuLi4iIGFyZ3VtZW50LgorCitUaGUgbmUgbW9kdWxlIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUuIEEgTkUyMDAwIGlzIGVzc2VudGlhbGx5IGFuCis4MzkwIGNoaXAsIHNvbWUgYnVzIGdsdWUgYW5kIHNvbWUgUkFNLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBuZSBwcm9iZSBpcworbW9yZSBpbnZhc2l2ZSB0aGFuIHRoZSByZXN0LCBhbmQgc28gYXQgYm9vdCB3ZSBtYWtlIHN1cmUgdGhlIG5lIHByb2JlIGlzIAorZG9uZSBsYXN0IG9mIGFsbCB0aGUgODM5MCBjYXJkcyAoc28gdGhhdCBpdCB3b24ndCB0cmlwIG92ZXIgb3RoZXIgODM5MCBiYXNlZAorY2FyZHMpIFdpdGggbW9kdWxlcyB3ZSBjYW4ndCBlbnN1cmUgdGhhdCBhbGwgb3RoZXIgbm9uLW5lIDgzOTAgY2FyZHMgaGF2ZQorYWxyZWFkeSBiZWVuIGZvdW5kLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBuZSBtb2R1bGUgUkVRVUlSRVMgYW4gImlvPTB4Tk5OIiAKK2FyZ3VtZW50IHBhc3NlZCBpbiB2aWEgaW5zbW9kLiBJdCB3aWxsIHJlZnVzZSB0byBhdXRvcHJvYmUuCisKK0l0IGlzIGFsc28gd29ydGggbm90aW5nIHRoYXQgYXV0by1JUlEgcHJvYmFibHkgaXNuJ3QgYXMgcmVsaWFibGUgZHVyaW5nIAordGhlIGZsdXJyeSBvZiBpbnRlcnJ1cHQgYWN0aXZpdHkgb24gYSBydW5uaW5nIG1hY2hpbmUuIENhcmRzIHN1Y2ggYXMgdGhlIAorbmUyMDAwIHRoYXQgY2FuJ3QgZ2V0IHRoZSBJUlEgc2V0dGluZyBmcm9tIGFuIEVFUFJPTSBvciBjb25maWd1cmF0aW9uCityZWdpc3RlciBhcmUgcHJvYmFibHkgYmVzdCBzdXBwbGllZCB3aXRoIGFuICJpcnE9TSIgYXJndW1lbnQgYXMgd2VsbC4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXJkL01vZHVsZSBMaXN0IC0gQ29uZmlndXJhYmxlIFBhcmFtZXRlcnMgYW5kIERlZmF1bHQgVmFsdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzNjNTAxLmM6CisJaW8gID0gMHgyODAJSU8gYmFzZSBhZGRyZXNzCisJaXJxID0gNQkJSVJRCisJKFByb2JlcyBwb3J0czoJMHgyODAsIDB4MzAwKQorCiszYzUwMy5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgc29mdHdhcmUgc2VsZWN0ZWQgYnkgZHJpdmVyIHVzaW5nIGF1dG9JUlEpCisJeGN2ciA9IDAJKFVzZSB4Y3ZyPTEgdG8gc2VsZWN0IGV4dGVybmFsIHRyYW5zY2VpdmVyLikKKwkoUHJvYmVzIHBvcnRzOiAweDMwMCwgMHgzMTAsIDB4MzMwLCAweDM1MCwgMHgyNTAsIDB4MjgwLCAweDJBMCwgMHgyRTApCisKKzNjNTA1LmM6CisJaW8gPSAwCisJaXJxID0gMAorCWRtYSA9IDYgICAgICAgICAobm90IGF1dG9wcm9iZWQpCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MjgwLCAweDMxMCkKKworM2M1MDcuYzoKKwlpbyA9IDB4MzAwCisJaXJxID0gMAorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MjgwKQorCiszYzUwOS5jOgorCWlvID0gMAorCWlycSA9IDAKKwkoIE1vZHVsZSBsb2FkLXRpbWUgcHJvYmluZyBXb3JrcyByZWxpYWJseSBvbmx5IG9uIEVJU0EsIElTQSBJRC1QUk9CRQorCSAgSVMgTk9UIFJFTElBQkxFISAgQ29tcGlsZSB0aGlzIGRyaXZlciBzdGF0aWNhbGx5IGludG8ga2VybmVsIGZvcgorCSAgbm93LCBpZiB5b3UgbmVlZCBpdCBhdXRvLXByb2Jpbmcgb24gYW4gSVNBLWJ1cyBtYWNoaW5lLiApCisKKzgzOTAuYzoKKwkoTm8gcHVibGljIG9wdGlvbnMsIHNldmVyYWwgb3RoZXIgbW9kdWxlcyBuZWVkIHRoaXMgb25lKQorCithMjA2NS5jOgorCVNpbmNlIHRoaXMgaXMgYSBab3JybyBib2FyZCwgaXQgc3VwcG9ydHMgZnVsbCBhdXRvcHJvYmluZywgZXZlbiBmb3IKKwltdWx0aXBsZSBib2FyZHMuIChtNjhrL0FtaWdhKQorCithYzMyMDAuYzoKKwlpbyA9IDAJCShDaGVja3MgMHgxMDAwIHRvIDB4OGZmZiBpbiAweDEwMDAgaW50ZXJ2YWxzKQorCWlycSA9IDAJCShSZWFkIGZyb20gY29uZmlnIHJlZ2lzdGVyKQorCShFSVNBIHByb2JpbmcuLikKKworYXByaWNvdC5jOgorCWlvID0gMHgzMDAgIChDYW4ndCBiZSBhbHRlcmVkISkKKwlpcnEgPSAxMAorCithcmNuZXQuYzoKKwlpbyA9IDAKKwlpcnFudW0gPSAwCisJc2htZW0gPSAwCisJbnVtID0gMAorCURPIFNFVCBUSEVTRSBNQU5VQUxMWSBBVCBJTlNNT0QhCisJKFdoZW4gcHJvYmluZywgbG9va3MgYXQgdGhlIGZvbGxvd2luZyBwb3NzaWJsZSBhZGRyZXNzZXM6CisJIFN1Z2dlc3RlZCBvbmVzOgorCQkweDMwMCwgMHgyRTAsIDB4MkYwLCAweDJEMAorCSBPdGhlciBvbmVzOgorCQkweDIwMCwgMHgyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAsIDB4MjUwLCAweDI2MCwgMHgyNzAsCisJCTB4MjgwLCAweDI5MCwgMHgyQTAsIDB4MkIwLCAweDJDMCwKKwkJICAgICAgIDB4MzEwLCAweDMyMCwgMHgzMzAsIDB4MzQwLCAweDM1MCwgMHgzNjAsIDB4MzcwLAorCQkweDM4MCwgMHgzOTAsIDB4M0EwLAkJCSAgMHgzRTAsIDB4M0YwICApCisKK2FyaWFkbmUuYzoKKwlTaW5jZSB0aGlzIGlzIGEgWm9ycm8gYm9hcmQsIGl0IHN1cHBvcnRzIGZ1bGwgYXV0b3Byb2JpbmcsIGV2ZW4gZm9yCisJbXVsdGlwbGUgYm9hcmRzLiAobTY4ay9BbWlnYSkKKworYXQxNzAwLmM6CisJaW8gPSAweDI2MAorCWlycSA9IDAKKwkoUHJvYmVzIHBvcnRzOiAweDI2MCwgMHgyODAsIDB4MkEwLCAweDI0MCwgMHgzNDAsIDB4MzIwLCAweDM4MCwgMHgzMDApCisKK2F0YXJpX2Jpb25ldC5jOgorCVN1cHBvcnRzIGZ1bGwgYXV0b3Byb2JpbmcuIChtNjhrL0F0YXJpKQorCithdGFyaV9wYW1zbmV0LmM6CisJU3VwcG9ydHMgZnVsbCBhdXRvcHJvYmluZy4gKG02OGsvQXRhcmkpCisKK2F0YXJpbGFuY2UuYzoKKwlTdXBwb3J0cyBmdWxsIGF1dG9wcm9iaW5nLiAobTY4ay9BdGFyaSkKKworYXRwLmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKFByb2JlcyBwb3J0czogMHgzNzgsIDB4Mjc4LCAweDNCQzsKKwkgZml4ZWQgSVJRczogNSBhbmQgNwkJCSkKKworY29wcy5jOgorCWlvID0gMHgyNDAKKwlpcnEgPSA1CisJbm9kZWlkID0gMAkoQXV0b1NlbGVjdCA9IDAsIE5vZGVJRCAxLTI1NCBpcyBoYW5kIHNlbGVjdGVkLikKKwkoUHJvYmVzIHBvcnRzOiAweDI0MCwgMHgzNDAsIDB4MjAwLCAweDIxMCwgMHgyMjAsIDB4MjMwLCAweDI2MCwKKwkJICAgICAgIDB4MkEwLCAweDMwMCwgMHgzMTAsIDB4MzIwLCAweDMzMCwgMHgzNTAsIDB4MzYwKQkKKworZGU0eDUuYzoKKwlpbyA9IDB4MDAwYgorCWlycSA9IDEwCisJaXNfbm90X2RlYyA9IDAgIC0tIEZvciBub24tREVDIGNhcmQgdXNpbmcgREVDIDIxMDQwLzIxMDQxLzIxMTQwIGNoaXAsIHNldCB0aGlzIHRvIDEKKwkoRUlTQSwgYW5kIFBDSSBwcm9iaW5nKQorCitkZTYwMC5jOgorCWRlNjAwX2RlYnVnID0gMAorCShPbiBwb3J0IDB4Mzc4LCBpcnEgNyAtLSBscHQxOyAgY29tcGlsZSB0aW1lIGNvbmZpZ3VyYWJsZSkKKworZGU2MjAuYzoKKwlibmMgPSAwLCB1dHAgPSAwICA8LS0gRm9yY2UgbWVkaWEgYnkgc2V0dGluZyBlaXRoZXIuCisJaW8gPSAweDM3OAkoYWxzbyBjb21waWxlLXRpbWUgY29uZmlndXJhYmxlKQorCWlycSA9IDcKKworZGVwY2EuYzoKKwlpbyA9IDB4MjAwCisJaXJxID0gNworCShQcm9iZXMgcG9ydHM6CUlTQTogIDB4MzAwLCAweDIwMDsKKwkJCUVJU0E6IDB4MGMwMAkJKQorCitkdW1teS5jOgorCU5vIG9wdGlvbnMKKworZTIxMDAuYzoKKwlpbyA9IDAJCShJdCB3aWxsIGNvbXBsYWluIGlmIHlvdSBkb24ndCBzdXBwbHkgYW4gImlvPTB4Tk5OIikKKwlpcnEgPSAwCQkoSVJRIHNvZnR3YXJlIHNlbGVjdGVkIGJ5IGRyaXZlcikKKwltZW0gPSAwCQkoT3ZlcnJpZGUgZGVmYXVsdCBzaGFyZWQgbWVtb3J5IHN0YXJ0IG9mIDB4ZDAwMDApCisJeGN2ciA9IDAJKFVzZSB4Y3ZyPTEgdG8gc2VsZWN0IGV4dGVybmFsIHRyYW5zY2VpdmVyLikKKwkoUHJvYmVzIHBvcnRzOiAweDMwMCwgMHgyODAsIDB4MzgwLCAweDIyMCkKKworZWVwcm8uYzoKKwlpbyA9IDB4MjAwCisJaXJxID0gMAorCShQcm9iZXMgcG9ydHM6IDB4MjAwLCAweDI0MCwgMHgyODAsIDB4MkMwLCAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MCkKKworZWV4cHJlc3MuYzoKKwlpbyA9IDB4MzAwCisJaXJxID0gMAkJKElSUSB2YWx1ZSByZWFkIGZyb20gRUVQUk9NKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDI3MCwgMHgzMjAsIDB4MzQwKQorCitlcWwuYzoKKwkoTm8gcGFyYW1ldGVycykKKworZXdyazMuYzoKKwlpbyA9IDB4MzAwCisJaXJxID0gNQorCShXaXRoIG1vZHVsZSBubyBhdXRvcHJvYmluZyEKKwkgT24gRUlTQS1idXMgZG9lcyBFSVNBIHByb2JpbmcuCisJIFN0YXRpYyBsaW5rYWdlIHByb2JlcyBwb3J0cyBvbiBJU0EgYnVzOgorCQkweDEwMCwgMHgxMjAsIDB4MTQwLCAweDE2MCwgMHgxODAsIDB4MUEwLCAweDFDMCwKKwkJMHgyMDAsIDB4MjIwLCAweDI0MCwgMHgyNjAsIDB4MjgwLCAweDJBMCwgMHgyQzAsIDB4MkUwLAorCQkweDMwMCwgICAgICAgIDB4MzQwLCAweDM2MCwgMHgzODAsIDB4M0EwLCAweDNDMCkKKworaHAtcGx1cy5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgcmVhZCBmcm9tIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIpCisJKFByb2JlcyBwb3J0czogMHgyMDAsIDB4MjQwLCAweDI4MCwgMHgyQzAsIDB4MzAwLCAweDMyMCwgMHgzNDApCisKK2hwLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSBzb2Z0d2FyZSBzZWxlY3RlZCBieSBkcml2ZXIgdXNpbmcgYXV0b0lSUSkKKwkoUHJvYmVzIHBvcnRzOiAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDI4MCwgMHgyQzAsIDB4MjAwLCAweDI0MCkKKworaHAxMDAuYzoKKwlocDEwMF9wb3J0ID0gMCAoSU8tYmFzZSBhZGRyZXNzKQorCShEb2VzIEVJU0EtcHJvYmluZywgaWYgb24gRUlTQS1zbG90OworCSBPbiBJU0EtYnVzIHByb2JlcyBhbGwgcG9ydHMgZnJvbSAweDEwMCB0aHJ1IHRvIDB4M0UwCisJIGluIGluY3JlbWVudHMgb2YgMHgwMjApCisKK2h5ZHJhLmM6CisJU2luY2UgdGhpcyBpcyBhIFpvcnJvIGJvYXJkLCBpdCBzdXBwb3J0cyBmdWxsIGF1dG9wcm9iaW5nLCBldmVuIGZvcgorCW11bHRpcGxlIGJvYXJkcy4gKG02OGsvQW1pZ2EpCisKK2libXRyLmM6CisJaW8gPSAweGEyMCwgMHhhMjQgKGF1dG9wcm9iZWQgYnkgZGVmYXVsdCkKKwlpcnEgPSAwIChkcml2ZXIgY2Fubm90IHNlbGVjdCBpcnEgLSByZWFkIGZyb20gaGFyZHdhcmUpCisJbWVtID0gMCAoc2hhcmVkIG1lbW9yeSBiYXNlIHNldCBhdCAweGQwMDAwIGFuZCBub3QgeWV0IAorCSAgICAgICAgIGFibGUgdG8gb3ZlcnJpZGUgdGhydSBtZW09IHBhcmFtZXRlci4pCisKK2xhbmNlLmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKFBDSSwgYW5kIElTQSBwcm9iaW5nOyAiQ09ORklHX1BDSSIgbmVlZGVkIGZvciBQQ0kgc3VwcG9ydCkKKwkoUHJvYmVzIElTQSBwb3J0czogMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjApCisKK2xvb3BiYWNrLmM6ICpTdGF0aWMga2VybmVsIGNvbXBvbmVudCoKKworbmUuYzoKKwlpbyA9IDAJCShFeHBsaWNpdGx5ICpyZXF1aXJlcyogYW4gImlvPTB4Tk5OIiB2YWx1ZSkKKwlpcnEgPSAwCQkoVHJpZXMgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyZWQgSVJRIHZpYSBhdXRvSVJRKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDI4MCwgMHgzMjAsIDB4MzQwLCAweDM2MCkKKworbmV0X2luaXQuYzogKlN0YXRpYyBrZXJuZWwgY29tcG9uZW50KgorCituaTUyLmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKFByb2JlcyBwb3J0czoJMHgzMDAsIDB4MjgwLCAweDM2MCwgMHgzMjAsIDB4MzQwCisJCW1lbXM6CTB4RDAwMDAsIDB4RDIwMDAsIDB4QzgwMDAsIDB4Q0EwMDAsCisJCQkweEQ0MDAwLCAweEQ2MDAwLCAweEQ4MDAwICkKKworbmk2NS5jOiAqTm90IG1vZHVsYXJpemVkKiAgKioxNk1CIE1FTU9SWSBCQVJSSUVSIEJVRyoqCisJKFByb2JlcyBwb3J0czoJMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjApCisKK3BpMi5jOgkqTm90IG1vZHVsYXJpemVkKiAod2VsbCwgTk9OLVNUQU5EQVJEIG1vZHVsYXJpemF0aW9uISkKKwlPbmx5IG9uZSBjYXJkIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuCisJKFByb2JlcyBwb3J0czogMHgzODAsIDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwLCAweDNBMCkKKworcGxpcC5jOgorCWlvID0gMAorCWlycSA9IDAJCShieSBkZWZhdWx0LCB1c2VzIElSUSA1IGZvciBwb3J0IGF0IDB4M2JjLCBJUlEgNworCQkJZm9yIHBvcnQgYXQgMHgzNzgsIGFuZCBJUlEgMiBmb3IgcG9ydCBhdCAweDI3OCkKKwkoUHJvYmVzIHBvcnRzOiAweDI3OCwgMHgzNzgsIDB4M2JjKQorCitwcHAuYzoKKwlObyBvcHRpb25zIChwcHAtMi4yKyBoYXMgc29tZSwgdGhpcyBpcyBiYXNlZCBvbiBub24tZHluYW1pYworCXZlcnNpb24gZnJvbSBwcHAtMi4xLjJkKQorCitzZWVxODAwNS5jOiAqTm90IG1vZHVsYXJpemVkKgorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwKQorCitza19nMTYuYzogKk5vdCBtb2R1bGFyaXplZCoKKwkoUHJvYmVzIHBvcnRzOiAweDEwMCwgMHgxODAsIDB4MjA4LCAweDIyMG0gMHgyODgsIDB4MzIwLCAweDMyOCwgMHgzOTApCisKK3NrZWxldG9uLmM6ICpTa2VsZXRvbioKKworc2xoYy5jOgorCU5vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworCitzbGlwLmM6CisJc2xpcF9tYXhkZXYgPSAyNTYgKGRlZmF1bHQgdmFsdWUgZnJvbSBTTF9OUlVOSVQgb24gc2xpcC5oKQorCisKK3NtYy11bHRyYS5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgdmFsLiByZWFkIGZyb20gRUVQUk9NKQorCShQcm9iZXMgcG9ydHM6CTB4MjAwLCAweDIyMCwgMHgyNDAsIDB4MjgwLCAweDMwMCwgMHgzNDAsIDB4MzgwKQorCit0dWxpcC5jOiAqUGFydGlhbCBtb2R1bGFyaXphdGlvbioKKwkoaW5pdC10aW1lIG1lbW9yeSBhbGxvY2F0aW9uIG1ha2VzIHByb2JsZW1zLi4pCisKK3R1bm5lbC5jOgorCU5vIGluc21vZCBwYXJhbWV0ZXJzCisKK3dhdmVsYW4uYzoKKwlpbyA9IDB4MzkwCShTZXR0YWJsZSwgYnV0IGNoYW5nZSBub3QgcmVjb21tZW5kZWQpCisJaXJxID0gMAkJKE5vdCBob25vdXJlZCwgaWYgY2hhbmdlZC4uKQorCit3ZC5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgdmFsLiByZWFkIGZyb20gRUVQUk9NLCBhbmNpZW50IGNhcmRzIHVzZSBhdXRvSVJRKQorCW1lbSA9IDAJCShGb3JjZSBzaGFyZWQtbWVtb3J5IG9uIGFkZHJlc3MgMHhDODAwMCwgb3Igd2hhdGV2ZXIuLikKKwltZW1fZW5kID0gMAkoRm9yY2Ugbm9uLXN0ZC4gbWVtLiBzaXplIHZpYSBzdXBwbHlpbmcgbWVtX2VuZCB2YWwuKQorCQkJKGVnLiBmb3IgMzJrIFdEODAwM0VCVCwgdXNlIG1lbT0weGQwMDAwIG1lbV9lbmQ9MHhkODAwMCkKKwkoUHJvYmVzIHBvcnRzOgkweDMwMCwgMHgyODAsIDB4MzgwLCAweDI0MCkKKworem5ldC5jOiAqTm90IG1vZHVsYXJpemVkKgorCShPbmx5IG9uZSBkZXZpY2Ugb24gIFplbml0aCBaLU5vdGUgKG5vdGVib29rPykgc3lzdGVtcywKKwkgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIChFRSlQUk9NKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjE4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS50eHQKQEAgLTAsMCArMSw1NyBAQAorCitzdGFydGVkIGJ5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPiwgMjAwMS4wOS4xNworMi42IHBvcnQgYW5kIG5ldHBvbGwgYXBpIGJ5IE1hdHQgTWFja2FsbCA8bXBtQHNlbGVuaWMuY29tPiwgU2VwIDkgMjAwMworCitQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBNYXR0IE1hY2thbGwgPG1wbUBzZWxlbmljLmNvbT4KKworVGhpcyBtb2R1bGUgbG9ncyBrZXJuZWwgcHJpbnRrIG1lc3NhZ2VzIG92ZXIgVURQIGFsbG93aW5nIGRlYnVnZ2luZyBvZgorcHJvYmxlbSB3aGVyZSBkaXNrIGxvZ2dpbmcgZmFpbHMgYW5kIHNlcmlhbCBjb25zb2xlcyBhcmUgaW1wcmFjdGljYWwuCisKK0l0IGNhbiBiZSB1c2VkIGVpdGhlciBidWlsdC1pbiBvciBhcyBhIG1vZHVsZS4gQXMgYSBidWlsdC1pbiwKK25ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgTklDIGNhcmRzIGFuZCB3aWxsIGJyaW5nIHVwCit0aGUgc3BlY2lmaWVkIGludGVyZmFjZSBhcyBzb29uIGFzIHBvc3NpYmxlLiBXaGlsZSB0aGlzIGRvZXNuJ3QgYWxsb3cKK2NhcHR1cmUgb2YgZWFybHkga2VybmVsIHBhbmljcywgaXQgZG9lcyBjYXB0dXJlIG1vc3Qgb2YgdGhlIGJvb3QKK3Byb2Nlc3MuCisKK0l0IHRha2VzIGEgc3RyaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyICJuZXRjb25zb2xlIiBpbiB0aGUKK2ZvbGxvd2luZyBmb3JtYXQ6CisKKyBuZXRjb25zb2xlPVtzcmMtcG9ydF1AW3NyYy1pcF0vWzxkZXY+XSxbdGd0LXBvcnRdQDx0Z3QtaXA+L1t0Z3QtbWFjYWRkcl0KKworICAgd2hlcmUKKyAgICAgICAgc3JjLXBvcnQgICAgICBzb3VyY2UgZm9yIFVEUCBwYWNrZXRzIChkZWZhdWx0cyB0byA2NjY1KQorICAgICAgICBzcmMtaXAgICAgICAgIHNvdXJjZSBJUCB0byB1c2UgKGludGVyZmFjZSBhZGRyZXNzKQorICAgICAgICBkZXYgICAgICAgICAgIG5ldHdvcmsgaW50ZXJmYWNlIChldGgwKQorICAgICAgICB0Z3QtcG9ydCAgICAgIHBvcnQgZm9yIGxvZ2dpbmcgYWdlbnQgKDY2NjYpCisgICAgICAgIHRndC1pcCAgICAgICAgSVAgYWRkcmVzcyBmb3IgbG9nZ2luZyBhZ2VudAorICAgICAgICB0Z3QtbWFjYWRkciAgIGV0aGVybmV0IE1BQyBhZGRyZXNzIGZvciBsb2dnaW5nIGFnZW50IChicm9hZGNhc3QpCisKK0V4YW1wbGVzOgorCisgbGludXggbmV0Y29uc29sZT00NDQ0QDEwLjAuMC4xL2V0aDEsOTM1M0AxMC4wLjAuMi8xMjozNDo1Njo3ODo5YTpiYworCisgIG9yCisKKyBpbnNtb2QgbmV0Y29uc29sZSBuZXRjb25zb2xlPUAvLEAxMC4wLjAuMi8KKworQnVpbHQtaW4gbmV0Y29uc29sZSBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFRDUCBzdGFjayBpcworaW5pdGlhbGl6ZWQgYW5kIGF0dGVtcHRzIHRvIGJyaW5nIHVwIHRoZSBzdXBwbGllZCBkZXYgYXQgdGhlIHN1cHBsaWVkCithZGRyZXNzLgorCitUaGUgcmVtb3RlIGhvc3QgY2FuIHJ1biBlaXRoZXIgJ25ldGNhdCAtdSAtbCAtcCA8cG9ydD4nIG9yIHN5c2xvZ2QuCisKK1dBUk5JTkc6IHRoZSBkZWZhdWx0IHRhcmdldCBldGhlcm5ldCBzZXR0aW5nIHVzZXMgdGhlIGJyb2FkY2FzdAorZXRoZXJuZXQgYWRkcmVzcyB0byBzZW5kIHBhY2tldHMsIHdoaWNoIGNhbiBjYXVzZSBpbmNyZWFzZWQgbG9hZCBvbgorb3RoZXIgc3lzdGVtcyBvbiB0aGUgc2FtZSBldGhlcm5ldCBzZWdtZW50LgorCitOT1RFOiB0aGUgbmV0d29yayBkZXZpY2UgKGV0aDEgaW4gdGhlIGFib3ZlIGNhc2UpIGNhbiBydW4gYW55IGtpbmQKK29mIG90aGVyIG5ldHdvcmsgdHJhZmZpYywgbmV0Y29uc29sZSBpcyBub3QgaW50cnVzaXZlLiBOZXRjb25zb2xlCittaWdodCBjYXVzZSBzbGlnaHQgZGVsYXlzIGluIG90aGVyIHRyYWZmaWMgaWYgdGhlIHZvbHVtZSBvZiBrZXJuZWwKK21lc3NhZ2VzIGlzIGhpZ2gsIGJ1dCBzaG91bGQgaGF2ZSBubyBvdGhlciBpbXBhY3QuCisKK05ldGNvbnNvbGUgd2FzIGRlc2lnbmVkIHRvIGJlIGFzIGluc3RhbnRhbmVvdXMgYXMgcG9zc2libGUsIHRvCitlbmFibGUgdGhlIGxvZ2dpbmcgb2YgZXZlbiB0aGUgbW9zdCBjcml0aWNhbCBrZXJuZWwgYnVncy4gSXQgd29ya3MKK2Zyb20gSVJRIGNvbnRleHRzIGFzIHdlbGwsIGFuZCBkb2VzIG5vdCBlbmFibGUgaW50ZXJydXB0cyB3aGlsZQorc2VuZGluZyBwYWNrZXRzLiBEdWUgdG8gdGhlc2UgdW5pcXVlIG5lZWRzLCBjb25maWd1cmF0aW9uIGNhbiBub3QKK2JlIG1vcmUgYXV0b21hdGljLCBhbmQgc29tZSBmdW5kYW1lbnRhbCBsaW1pdGF0aW9ucyB3aWxsIHJlbWFpbjoKK29ubHkgSVAgbmV0d29ya3MsIFVEUCBwYWNrZXRzIGFuZCBldGhlcm5ldCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwOWYzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dApAQCAtMCwwICsxLDc1IEBACisKK05ldHdvcmsgRGV2aWNlcywgdGhlIEtlcm5lbCwgYW5kIFlvdSEKKworCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorVGhlIGZvbGxvd2luZyBpcyBhIHJhbmRvbSBjb2xsZWN0aW9uIG9mIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nCituZXR3b3JrIGRldmljZXMuCisKK3N0cnVjdCBuZXRfZGV2aWNlIGFsbG9jYXRpb24gcnVsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZXMgbmVlZCB0byBwZXJzaXN0IGV2ZW4gYWZ0ZXIgbW9kdWxlIGlzIHVubG9hZGVkIGFuZAorbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCBrbWFsbG9jLiAgSWYgZGV2aWNlIGhhcyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseSwKK2l0IHdpbGwgYmUgZnJlZWQgb24gbGFzdCB1c2UgYnkgZnJlZV9uZXRkZXYuICBUaGlzIGlzIHJlcXVpcmVkIHRvIGhhbmRsZSB0aGUKK3BhdGhvbG9naWMgY2FzZSBjbGVhbmx5IChleGFtcGxlOiBybW1vZCBteWRyaXZlciA8L3N5cy9jbGFzcy9uZXQvbXlldGgvbXR1ICkKKworVGhlcmUgYXJlIHJvdXRpbmVzIGluIG5ldF9pbml0LmMgdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZXMgb2YKK2FsbG9jX2V0aGVyZGV2LCBhbGxvY19uZXRkZXYuICBUaGVzZSByZXNlcnZlIGV4dHJhIHNwYWNlIGZvciBkcml2ZXIKK3ByaXZhdGUgZGF0YSB3aGljaCBnZXRzIGZyZWVkIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGZyZWVkLiBJZgorc2VwYXJhdGVseSBhbGxvY2F0ZWQgZGF0YSBpcyBhdHRhY2hlZCB0byB0aGUgbmV0d29yayBkZXZpY2UKKyhkZXYtPnByaXYpIHRoZW4gaXQgaXMgdXAgdG8gdGhlIG1vZHVsZSBleGl0IGhhbmRsZXIgdG8gZnJlZSB0aGF0LgorCisKK3N0cnVjdCBuZXRfZGV2aWNlIHN5bmNocm9uaXphdGlvbiBydWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkZXYtPm9wZW46CisJU3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuCisJQ29udGV4dDogcHJvY2VzcworCitkZXYtPnN0b3A6CisJU3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuCisJQ29udGV4dDogcHJvY2VzcworCU5vdGUxOiBuZXRpZl9ydW5uaW5nKCkgaXMgZ3VhcmFudGVlZCBmYWxzZQorCU5vdGUyOiBkZXYtPnBvbGwoKSBpcyBndWFyYW50ZWVkIHRvIGJlIHN0b3BwZWQKKworZGV2LT5kb19pb2N0bDoKKwlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4KKwlDb250ZXh0OiBwcm9jZXNzCisKK2Rldi0+Z2V0X3N0YXRzOgorCVN5bmNocm9uaXphdGlvbjogZGV2X2Jhc2VfbG9jayByd2xvY2suCisJQ29udGV4dDogbm9taW5hbGx5IHByb2Nlc3MsIGJ1dCBkb24ndCBzbGVlcCBpbnNpZGUgYW4gcndsb2NrCisKK2Rldi0+aGFyZF9zdGFydF94bWl0OgorCVN5bmNocm9uaXphdGlvbjogZGV2LT54bWl0X2xvY2sgc3BpbmxvY2suCisJV2hlbiB0aGUgZHJpdmVyIHNldHMgTkVUSUZfRl9MTFRYIGluIGRldi0+ZmVhdHVyZXMgdGhpcyB3aWxsIGJlCisJY2FsbGVkIHdpdGhvdXQgaG9sZGluZyB4bWl0X2xvY2suIEluIHRoaXMgY2FzZSB0aGUgZHJpdmVyIAorCWhhcyB0byBsb2NrIGJ5IGl0c2VsZiB3aGVuIG5lZWRlZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgdHJ5IGxvY2sKKwlmb3IgdGhpcyBhbmQgcmV0dXJuIC0xIHdoZW4gdGhlIHNwaW4gbG9jayBmYWlscy4gCisJVGhlIGxvY2tpbmcgdGhlcmUgc2hvdWxkIGFsc28gcHJvcGVybHkgcHJvdGVjdCBhZ2FpbnN0IAorCXNldF9tdWx0aWNhc3RfbGlzdAorCUNvbnRleHQ6IEJIcyBkaXNhYmxlZAorCU5vdGVzOiBuZXRpZl9xdWV1ZV9zdG9wcGVkKCkgaXMgZ3VhcmFudGVlZCBmYWxzZQorCVJldHVybiBjb2RlczogCisJbyBORVRERVZfVFhfT0sgZXZlcnl0aGluZyBvay4gCisJbyBORVRERVZfVFhfQlVTWSBDYW5ub3QgdHJhbnNtaXQgcGFja2V0LCB0cnkgbGF0ZXIgCisJICBVc3VhbGx5IGEgYnVnLCBtZWFucyBxdWV1ZSBzdGFydC9zdG9wIGZsb3cgY29udHJvbCBpcyBicm9rZW4gaW4KKwkgIHRoZSBkcml2ZXIuIE5vdGU6IHRoZSBkcml2ZXIgbXVzdCBOT1QgcHV0IHRoZSBza2IgaW4gaXRzIERNQSByaW5nLgorCW8gTkVUREVWX1RYX0xPQ0tFRCBMb2NraW5nIGZhaWxlZCwgcGxlYXNlIHJldHJ5IHF1aWNrbHkuCisJICBPbmx5IHZhbGlkIHdoZW4gTkVUSUZfRl9MTFRYIGlzIHNldC4KKworZGV2LT50eF90aW1lb3V0OgorCVN5bmNocm9uaXphdGlvbjogZGV2LT54bWl0X2xvY2sgc3BpbmxvY2suCisJQ29udGV4dDogQkhzIGRpc2FibGVkCisJTm90ZXM6IG5ldGlmX3F1ZXVlX3N0b3BwZWQoKSBpcyBndWFyYW50ZWVkIHRydWUKKworZGV2LT5zZXRfbXVsdGljYXN0X2xpc3Q6CisJU3luY2hyb25pemF0aW9uOiBkZXYtPnhtaXRfbG9jayBzcGlubG9jay4KKwlDb250ZXh0OiBCSHMgZGlzYWJsZWQKKworZGV2LT5wb2xsOgorCVN5bmNocm9uaXphdGlvbjogX19MSU5LX1NUQVRFX1JYX1NDSEVEIGJpdCBpbiBkZXYtPnN0YXRlLiAgU2VlCisJCWRldl9jbG9zZSBjb2RlIGFuZCBjb21tZW50cyBpbiBuZXQvY29yZS9kZXYuYyBmb3IgbW9yZSBpbmZvLgorCUNvbnRleHQ6IHNvZnRpcnEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGlmLW1zZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0aWYtbXNnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGFkNGNlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGlmLW1zZy50eHQKQEAgLTAsMCArMSw3OSBAQAorCitfX19fX19fX19fX19fX19fCitORVRJRiBNc2cgTGV2ZWwKKworVGhlIGRlc2lnbiBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgbWVzc2FnZSBsZXZlbCBzZXR0aW5nLgorCitIaXN0b3J5CisKKyBUaGUgZGVzaWduIG9mIHRoZSBkZWJ1Z2dpbmcgbWVzc2FnZSBpbnRlcmZhY2Ugd2FzIGd1aWRlZCBhbmQKKyBjb25zdHJhaW5lZCBieSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwcmV2aW91cyBwcmFjdGljZS4gIEl0IGlzIHVzZWZ1bAorIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3RvcnkgYW5kIGV2b2x1dGlvbiBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGN1cnJlbnQKKyBwcmFjdGljZSBhbmQgcmVsYXRlIGl0IHRvIG9sZGVyIGRyaXZlciBzb3VyY2UgY29kZS4KKworIEZyb20gdGhlIGJlZ2lubmluZyBvZiBMaW51eCwgZWFjaCBuZXR3b3JrIGRldmljZSBkcml2ZXIgaGFzIGhhZCBhIGxvY2FsCisgaW50ZWdlciB2YXJpYWJsZSB0aGF0IGNvbnRyb2xzIHRoZSBkZWJ1ZyBtZXNzYWdlIGxldmVsLiAgVGhlIG1lc3NhZ2UKKyBsZXZlbCByYW5nZWQgZnJvbSAwIHRvIDcsIGFuZCBtb25vdG9uaWNhbGx5IGluY3JlYXNlZCBpbiB2ZXJib3NpdHkuCisKKyBUaGUgbWVzc2FnZSBsZXZlbCB3YXMgbm90IHByZWNpc2VseSBkZWZpbmVkIHBhc3QgbGV2ZWwgMywgYnV0IHdlcmUKKyBhbHdheXMgaW1wbGVtZW50ZWQgd2l0aGluICstMSBvZiB0aGUgc3BlY2lmaWVkIGxldmVsLiAgRHJpdmVycyB0ZW5kZWQKKyB0byBzaGVkIHRoZSBtb3JlIHZlcmJvc2UgbGV2ZWwgbWVzc2FnZXMgYXMgdGhleSBtYXR1cmVkLgorICAgIDAgIE1pbmltYWwgbWVzc2FnZXMsIG9ubHkgZXNzZW50aWFsIGluZm9ybWF0aW9uIG9uIGZhdGFsIGVycm9ycy4KKyAgICAxICBTdGFuZGFyZCBtZXNzYWdlcywgaW5pdGlhbGl6YXRpb24gc3RhdHVzLiAgTm8gcnVuLXRpbWUgbWVzc2FnZXMKKyAgICAyICBTcGVjaWFsIG1lZGlhIHNlbGVjdGlvbiBtZXNzYWdlcywgZ2VuZXJhbGx5IHRpbWVyLWRyaXZlci4KKyAgICAzICBJbnRlcmZhY2Ugc3RhcnRzIGFuZCBzdG9wcywgaW5jbHVkaW5nIG5vcm1hbCBzdGF0dXMgbWVzc2FnZXMKKyAgICA0ICBUeCBhbmQgUnggZnJhbWUgZXJyb3IgbWVzc2FnZXMsIGFuZCBhYm5vcm1hbCBkcml2ZXIgb3BlcmF0aW9uCisgICAgNSAgVHggcGFja2V0IHF1ZXVlIGluZm9ybWF0aW9uLCBpbnRlcnJ1cHQgZXZlbnRzLgorICAgIDYgIFN0YXR1cyBvbiBlYWNoIGNvbXBsZXRlZCBUeCBwYWNrZXQgYW5kIHJlY2VpdmVkIFJ4IHBhY2tldHMKKyAgICA3ICBJbml0aWFsIGNvbnRlbnRzIG9mIFR4IGFuZCBSeCBwYWNrZXRzCisKKyBJbml0aWFsbHkgdGhpcyBtZXNzYWdlIGxldmVsIHZhcmlhYmxlIHdhcyB1bmlxdWVseSBuYW1lZCBpbiBlYWNoIGRyaXZlcgorIGUuZy4gImxhbmNlX2RlYnVnIiwgc28gdGhhdCBhIGtlcm5lbCBzeW1ib2xpYyBkZWJ1Z2dlciBjb3VsZCBsb2NhdGUgYW5kCisgbW9kaWZ5IHRoZSBzZXR0aW5nLiAgV2hlbiBrZXJuZWwgbW9kdWxlcyBiZWNhbWUgY29tbW9uLCB0aGUgdmFyaWFibGVzCisgd2VyZSBjb25zaXN0ZW50bHkgcmVuYW1lZCB0byAiZGVidWciIGFuZCBhbGxvd2VkIHRvIGJlIHNldCBhcyBhIG1vZHVsZQorIHBhcmFtZXRlci4KKworIFRoaXMgYXBwcm9hY2ggd29ya2VkIHdlbGwuICBIb3dldmVyIHRoZXJlIGlzIGFsd2F5cyBhIGRlbWFuZCBmb3IKKyBhZGRpdGlvbmFsIGZlYXR1cmVzLiAgT3ZlciB0aGUgeWVhcnMgdGhlIGZvbGxvd2luZyBlbWVyZ2VkIGFzCisgcmVhc29uYWJsZSBhbmQgZWFzaWx5IGltcGxlbWVudGVkIGVuaGFuY2VtZW50cworICAgVXNpbmcgYW4gaW9jdGwoKSBjYWxsIHRvIG1vZGlmeSB0aGUgbGV2ZWwuCisgICBQZXItaW50ZXJmYWNlIHJhdGhlciB0aGFuIHBlci1kcml2ZXIgbWVzc2FnZSBsZXZlbCBzZXR0aW5nLgorICAgTW9yZSBzZWxlY3RpdmUgY29udHJvbCBvdmVyIHRoZSB0eXBlIG9mIG1lc3NhZ2VzIGVtaXR0ZWQuCisKKyBUaGUgbmV0aWZfbXNnIHJlY29tbWFuZGF0aW9uIGFkZHMgdGhlc2UgZmVhdHVyZXMgd2l0aCBvbmx5IGEgbWlub3IKKyBjb21wbGV4aXR5IGFuZCBjb2RlIHNpemUgaW5jcmVhc2UuCisKKyBUaGUgcmVjb21tZW5kYXRpb24gaXMgdGhlIGZvbGxvd2luZyBwb2ludHMKKyAgICBSZXRhaW5pbmcgdGhlIHBlci1kcml2ZXIgaW50ZWdlciB2YXJpYWJsZSAiZGVidWciIGFzIGEgbW9kdWxlCisgICAgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IGxldmVsIG9mICcxJy4KKworICAgIEFkZGluZyBhIHBlci1pbnRlcmZhY2UgcHJpdmF0ZSB2YXJpYWJsZSBuYW1lZCAibXNnX2VuYWJsZSIuICBUaGUKKyAgICB2YXJpYWJsZSBpcyBhIGJpdCBtYXAgcmF0aGVyIHRoYW4gYSBsZXZlbCwgYW5kIGlzIGluaXRpYWxpemVkIGFzCisgICAgICAgMSA8PCBkZWJ1ZworICAgIE9yIG1vcmUgcHJlY2lzZWx5CisgICAgICAgIGRlYnVnIDwgMCA/IDAgOiAxIDw8IG1pbihzaXplb2YoaW50KS0xLCBkZWJ1ZykKKworICAgIE1lc3NhZ2VzIHNob3VsZCBjaGFuZ2VzIGZyb20KKyAgICAgIGlmIChkZWJ1ZyA+IDEpCisgICAgICAgICAgIHByaW50ayhNU0dfREVCVUcgIiVzOiAuLi4KKyAgICB0bworICAgICAgaWYgKG5wLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHX0xJTkspCisgICAgICAgICAgIHByaW50ayhNU0dfREVCVUcgIiVzOiAuLi4KKworCitUaGUgc2V0IG9mIG1lc3NhZ2UgbGV2ZWxzIGlzIG5hbWVkCisgIE9sZCBsZXZlbCAgIE5hbWUgICBCaXQgcG9zaXRpb24KKyAgICAwICAgIE5FVElGX01TR19EUlYJCTB4MDAwMQorICAgIDEgICAgTkVUSUZfTVNHX1BST0JFCTB4MDAwMgorICAgIDIgICAgTkVUSUZfTVNHX0xJTksJCTB4MDAwNAorICAgIDIgICAgTkVUSUZfTVNHX1RJTUVSCTB4MDAwNAorICAgIDMgICAgTkVUSUZfTVNHX0lGRE9XTgkweDAwMDgKKyAgICAzICAgIE5FVElGX01TR19JRlVQCQkweDAwMDgKKyAgICA0ICAgIE5FVElGX01TR19SWF9FUlIJMHgwMDEwCisgICAgNCAgICBORVRJRl9NU0dfVFhfRVJSCTB4MDAxMAorICAgIDUgICAgTkVUSUZfTVNHX1RYX1FVRVVFRAkweDAwMjAKKyAgICA1ICAgIE5FVElGX01TR19JTlRSCQkweDAwMjAKKyAgICA2ICAgIE5FVElGX01TR19UWF9ET05FCTB4MDA0MAorICAgIDYgICAgTkVUSUZfTVNHX1JYX1NUQVRVUwkweDAwNDAKKyAgICA3ICAgIE5FVElGX01TR19QS1REQVRBCTB4MDA4MAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2x5bXBpYy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2x5bXBpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1YTk0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vbHltcGljLnR4dApAQCAtMCwwICsxLDc5IEBACisKK0lCTSBQQ0kgUGl0L1BpdC1QaHkvT2x5bXBpYyBDSElQU0VUIEJBU0VEIFRPS0VOIFJJTkcgQ0FSRFMgUkVBRE1FCisKK1JlbGVhc2UgMC4yLjAgLSBSZWxlYXNlICAgIAorCUp1bmUgOHRoIDE5OTkgUGV0ZXIgRGUgU2NocmlqdmVyICYgTWlrZSBQaGlsbGlwcworUmVsZWFzZSAwLjkuQyAtIFJlbGVhc2UKKwlBcHJpbCAxOHRoIDIwMDEgTWlrZSBQaGlsbGlwcworCitUaGFua3M6CitFcmlrIERlIENvY2ssIEFkcmlhbiBCcmlkZ2V0dCBhbmQgRnJhbmsgRmllbmUgZm9yIHRoZWlyIAorcGF0aWVuY2UgYW5kIHRlc3RpbmcuCitEb25hbGQgQ2hhbXBpb24gZm9yIHRoZSBjYXJkYnVzIHN1cHBvcnQKK0t5bGUgTHVja2UgZm9yIHRoZSBkbWEgYXBpIGNoYW5nZXMuICAgCitKb25hdGhvbiBCaXRuZXIgZm9yIGhhcmR3YXJlIHN1cHBvcnQuIAorRXZlcnlib2R5IG9uIGxpbnV4LXRyIGZvciB0aGVpciBjb250aW51ZWQgc3VwcG9ydC4gIAorIAorT3B0aW9uczoKKworVGhlIGRyaXZlciBhY2NlcHRzIGZvdXIgb3B0aW9uczogcmluZ3NwZWVkLCBwa3RfYnVmX3N6LCAgCittZXNzYWdlX2xldmVsIGFuZCBuZXR3b3JrX21vbml0b3IuCisKK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBkaWZmZXJlbnRseSBmb3IgZWFjaCBjYXJkIGZvdW5kLiAKKworcmluZ3NwZWVkOiAgSGFzIG9uZSBvZiB0aHJlZSBzZXR0aW5ncyAwIChkZWZhdWx0KSwgNCBvciAxNi4gIDAgd2lsbCAKK21ha2UgdGhlIGNhcmQgYXV0b3NlbnNlIHRoZSByaW5nc3BlZWQgYW5kIGpvaW4gYXQgdGhlIGFwcHJvcHJpYXRlIHNwZWVkLCAKK3RoaXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBvcHRpb24gZm9yIG1vc3QgcGVvcGxlLiAgNCBvciAxNiBhbGxvdyB5b3UgdG8gCitleHBsaWNpdGx5IGZvcmNlIHRoZSBjYXJkIHRvIG9wZXJhdGUgYXQgYSBjZXJ0YWluIHNwZWVkLiAgVGhlIGNhcmQgd2lsbCBmYWlsIAoraWYgeW91IHRyeSB0byBpbnNlcnQgaXQgYXQgdGhlIHdyb25nIHNwZWVkLiAoQWx0aG91Z2ggc29tZSBodWJzIHdpbGwgYWxsb3cgCit0aGlzIHNvIGJlICp2ZXJ5KiBjYXJlZnVsKS4gIFRoZSBtYWluIHB1cnBvc2UgZm9yIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgcmluZworc3BlZWQgaXMgZm9yIHdoZW4gdGhlIGNhcmQgaXMgZmlyc3Qgb24gdGhlIHJpbmcuICBJbiBhdXRvc2Vuc2UgbW9kZSwgaWYgdGhlIGNhcmQKK2Nhbm5vdCBkZXRlY3QgYW55IGFjdGl2ZSBtb25pdG9ycyBvbiB0aGUgcmluZyBpdCB3aWxsIG5vdCBvcGVuLCBzbyB5b3UgbXVzdCAKK3JlLWluaXQgdGhlIGNhcmQgYXQgdGhlIGFwcHJvcHJpYXRlIHNwZWVkLiAgVW5mb3J0dW5hdGVseSBhdCBwcmVzZW50IHRoZSBvbmx5Cit3YXkgb2YgZG9pbmcgdGhpcyBpcyBybW1vZCBhbmQgaW5zbW9kIHdoaWNoIGlzIGEgYml0IHRvdWdoIGlmIGl0IGlzIGNvbXBpbGVkCitpbiB0aGUga2VybmVsLgorCitwa3RfYnVmX3N6OiAgVGhpcyBpcyB0aGlzIGluaXRpYWwgcmVjZWl2ZSBidWZmZXIgYWxsb2NhdGlvbiBzaXplLiAgVGhpcyB3aWxsCitkZWZhdWx0IHRvIDQwOTYgaWYgbm8gdmFsdWUgaXMgZW50ZXJlZC4gWW91IG1heSBpbmNyZWFzZSBwZXJmb3JtYW5jZSBvZiB0aGUgCitkcml2ZXIgYnkgc2V0dGluZyB0aGlzIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIG5ldHdvcmsgcGFja2V0IHNpemUsIGFsdGhvdWdoCit0aGUgZHJpdmVyIG5vdyByZS1zaXplcyBidWZmZXJzIGJhc2VkIG9uIE1UVSBzZXR0aW5ncyBhcyB3ZWxsLiAKKworbWVzc2FnZV9sZXZlbDogQ29udHJvbHMgbGV2ZWwgb2YgbWVzc2FnZXMgY3JlYXRlZCBieSB0aGUgZHJpdmVyLiBEZWZhdWx0cyB0byAwOgord2hpY2ggb25seSBkaXNwbGF5cyBzdGFydC11cCBhbmQgY3JpdGljYWwgbWVzc2FnZXMuICBQcmVzZW50bHkgYW55IG5vbi16ZXJvIAordmFsdWUgd2lsbCBkaXNwbGF5IGFsbCBzb2Z0IG1lc3NhZ2VzIGFzIHdlbGwuICBOQiBUaGlzIGRvZXMgbm90IHR1cm4gCitkZWJ1Z2dpbmcgbWVzc2FnZXMgb24sIHRoYXQgbXVzdCBiZSBkb25lIGJ5IG1vZGlmaWVkIHRoZSBzb3VyY2UgY29kZS4KKworbmV0d29ya19tb25pdG9yOiBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBwcm92aWRlIGEgcXVhc2kgbmV0d29yayBtb25pdG9yaW5nIAorbW9kZS4gIEFsbCB1bmV4cGVjdGVkIE1BQyBmcmFtZXMgKGJlYWNvbmluZyBldGMuKSB3aWxsIGJlIHJlY2VpdmVkCitieSB0aGUgZHJpdmVyIGFuZCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgcHJpbnRlZC4gCitBbHNvIGFuIGVudHJ5IHdpbGwgYmUgYWRkZWQgaW4gIC9wcm9jL25ldCBjYWxsZWQgb2x5bXBpY190ciVkLCB3aGVyZSB0ciVkCitpcyB0aGUgcmVnaXN0ZXJlZCBkZXZpY2UgbmFtZSwgaS5lIHRyMCwgdHIxLCBldGMuIFRoaXMgZGlzcGxheXMgbG93CitsZXZlbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcmluZyBhbmQgdGhlIGFkYXB0ZXIuCitUaGlzIGZlYXR1cmUgaGFzIGJlZW4gZGVzaWduZWQgZm9yIG5ldHdvcmsgYWRtaW5pc3RyYXRvcnMgdG8gYXNzaXN0IGluIAordGhlIGRpYWdub3NpcyBvZiBuZXR3b3JrIC8gcmluZyBwcm9ibGVtcy4gKFRoaXMgdXNlZCB0byBPTFlNUElDX05FVFdPUktfTU9OSVRPUiwKK2J1dCBoYXMgbm93IGNoYW5nZWQgdG8gYWxsb3cgZWFjaCBhZGFwdGVyIHRvIGJlIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHkgYW5kCit0byBhbGxldmlhdGUgdGhlIG5lY2Vzc2l0eSB0byByZS1jb21waWxlIG9seW1waWMgdG8gdHVybiB0aGUgb3B0aW9uIG9uKS4KKworTXVsdGktY2FyZDoKKworVGhlIGRyaXZlciB3aWxsIGRldGVjdCBtdWx0aXBsZSBjYXJkcyBhbmQgd2lsbCB3b3JrIHdpdGggc2hhcmVkIGludGVycnVwdHMsCitlYWNoIGNhcmQgaXMgYXNzaWduZWQgdGhlIG5leHQgdG9rZW4gcmluZyBkZXZpY2UsIGkuZS4gdHIwICwgdHIxLCB0cjIuICBUaGUgCitkcml2ZXIgc2hvdWxkIGFsc28gaGFwcGlseSByZXNpZGUgaW4gdGhlIHN5c3RlbSB3aXRoIG90aGVyIGRyaXZlcnMuICBJdCBoYXMgCitiZWVuIHRlc3RlZCB3aXRoIGlibXRyLmMgcnVubmluZywgYW5kIEkgcGVyc29uYWxseSBoYXZlIGhhZCBvbmUgT2xpY29tIFBDSSAKK2NhcmQgYW5kIHR3byBJQk0gb2x5bXBpYyBjYXJkcyAoYWxsIG9uIHRoZSBzYW1lIGludGVycnVwdCksIGFsbCBydW5uaW5nCit0b2dldGhlci4gCisKK1ZhcmlhYmxlIE1UVSBzaXplOgorCitUaGUgZHJpdmVyIGNhbiBoYW5kbGUgYSBNVFUgc2l6ZSB1cHRvIGVpdGhlciA0NTAwIG9yIDE4MDAwIGRlcGVuZGluZyB1cG9uIAorcmluZyBzcGVlZC4gIFRoZSBkcml2ZXIgYWxzbyBjaGFuZ2VzIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYXMgcGFydAorb2YgdGhlIG10dSByZS1zaXppbmcsIHNvIGlmIHlvdSBzZXQgbXR1ID0gMTgwMDAsIHlvdSB3aWxsIG5lZWQgdG8gYmUgYWJsZQordG8gYWxsb2NhdGUgMTYgKiAoc2tfYnVmZiB3aXRoIDE4MDAwIGJ1ZmZlciBzaXplKSBjYWxsIGl0IDE4NTAwIGJ5dGVzIHBlciByaW5nIAorcG9zaXRpb24gPSAyOTYsMDAwIGJ5dGVzIG9mIG1lbW9yeSBzcGFjZSwgcGx1cyBvZiBjb3Vyc2UgYW55dGhpbmcgCituZWNlc3NhcnkgZm9yIHRoZSB0eCBza19idWZmJ3MuICBSZW1lbWJlciB0aGlzIGlzIHBlciBjYXJkLCBzbyBpZiB5b3UgYXJlCitidWlsZGluZyByb3V0ZXJzLCBnYXRld2F5J3MgZXRjLCB5b3UgY291bGQgc3RhcnQgdG8gdXNlIGEgbG90IG9mIG1lbW9yeQorcmVhbCBmYXN0LgorCisKKzYvOC85OSBQZXRlciBEZSBTY2hyaWp2ZXIgYW5kIE1pa2UgUGhpbGxpcHMKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0Y2Y3OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKQEAgLTAsMCArMSwzOTkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIEFCU1RSQUNUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBDT05GSUdfUEFDS0VUX01NQVAgb3B0aW9uIGF2YWlsYWJsZSB3aXRoIHRoZSBQQUNLRVQKK3NvY2tldCBpbnRlcmZhY2Ugb24gMi40IGFuZCAyLjYga2VybmVscy4gVGhpcyB0eXBlIG9mIHNvY2tldHMgaXMgdXNlZCBmb3IgCitjYXB0dXJlIG5ldHdvcmsgdHJhZmZpYyB3aXRoIHV0aWxpdGllcyBsaWtlIHRjcGR1bXAgb3IgYW55IG90aGVyIHRoYXQgdXNlcyAKK3RoZSBsaWJwY2FwIGxpYnJhcnkuIAorCitZb3UgY2FuIGZpbmQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQKKworICAgIGh0dHA6Ly9wdXNhLnV2LmVzL351bGlzc2VzL3BhY2tldF9tbWFwLworCitQbGVhc2Ugc2VuZCBtZSB5b3VyIGNvbW1lbnRzIHRvCisKKyAgICBVbGlzc2VzIEFsb25zbyBDYW1hcvMgPHVhY2FAaS5oYXRlLnNwYW0uYWx1bW5pLnV2LmVzPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIFdoeSB1c2UgUEFDS0VUX01NQVAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIExpbnV4IDIuNC8yLjYgaWYgUEFDS0VUX01NQVAgaXMgbm90IGVuYWJsZWQsIHRoZSBjYXB0dXJlIHByb2Nlc3MgaXMgdmVyeQoraW5lZmZpY2llbnQuIEl0IHVzZXMgdmVyeSBsaW1pdGVkIGJ1ZmZlcnMgYW5kIHJlcXVpcmVzIG9uZSBzeXN0ZW0gY2FsbAordG8gY2FwdHVyZSBlYWNoIHBhY2tldCwgaXQgcmVxdWlyZXMgdHdvIGlmIHlvdSB3YW50IHRvIGdldCBwYWNrZXQncyAKK3RpbWVzdGFtcCAobGlrZSBsaWJwY2FwIGFsd2F5cyBkb2VzKS4KKworSW4gdGhlIG90aGVyIGhhbmQgUEFDS0VUX01NQVAgaXMgdmVyeSBlZmZpY2llbnQuIFBBQ0tFVF9NTUFQIHByb3ZpZGVzIGEgc2l6ZSAKK2NvbmZpZ3VyYWJsZSBjaXJjdWxhciBidWZmZXIgbWFwcGVkIGluIHVzZXIgc3BhY2UuIFRoaXMgd2F5IHJlYWRpbmcgcGFja2V0cyBqdXN0IAorbmVlZHMgdG8gd2FpdCBmb3IgdGhlbSwgbW9zdCBvZiB0aGUgdGltZSB0aGVyZSBpcyBubyBuZWVkIHRvIGlzc3VlIGEgc2luZ2xlIAorc3lzdGVtIGNhbGwuIEJ5IHVzaW5nIGEgc2hhcmVkIGJ1ZmZlciBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHRoZSB1c2VyIAorYWxzbyBoYXMgdGhlIGJlbmVmaXQgb2YgbWluaW1pemluZyBwYWNrZXQgY29waWVzLgorCitJdCdzIGZpbmUgdG8gdXNlIFBBQ0tFVF9NTUFQIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBjYXB0dXJlIHByb2Nlc3MsIAorYnV0IGl0IGlzbid0IGV2ZXJ5dGhpbmcuIEF0IGxlYXN0LCBpZiB5b3UgYXJlIGNhcHR1cmluZyBhdCBoaWdoIHNwZWVkcyAodGhpcyAKK2lzIHJlbGF0aXZlIHRvIHRoZSBjcHUgc3BlZWQpLCB5b3Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBkZXZpY2UgZHJpdmVyIG9mIHlvdXIgCituZXR3b3JrIGludGVyZmFjZSBjYXJkIHN1cHBvcnRzIHNvbWUgc29ydCBvZiBpbnRlcnJ1cHQgbG9hZCBtaXRpZ2F0aW9uIG9yIAorKGV2ZW4gYmV0dGVyKSBpZiBpdCBzdXBwb3J0cyBOQVBJLCBhbHNvIG1ha2Ugc3VyZSBpdCBpcyBlbmFibGVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyBIb3cgdG8gdXNlIENPTkZJR19QQUNLRVRfTU1BUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnJvbSB0aGUgdXNlciBzdGFuZHBvaW50LCB5b3Ugc2hvdWxkIHVzZSB0aGUgaGlnaGVyIGxldmVsIGxpYnBjYXAgbGlicmFyeSwgd2ljaAoraXMgYSBkZSBmYWN0byBzdGFuZGFyZCwgcG9ydGFibGUgYWNyb3NzIG5lYXJseSBhbGwgb3BlcmF0aW5nIHN5c3RlbXMKK2luY2x1ZGluZyBXaW4zMi4gCisKK1NhaWQgdGhhdCwgYXQgdGltZSBvZiB0aGlzIHdyaXRpbmcsIG9mZmljaWFsIGxpYnBjYXAgMC44LjEgaXMgb3V0IGFuZCBkb2Vzbid0IGluY2x1ZGUKK3N1cHBvcnQgZm9yIFBBQ0tFVF9NTUFQLCBhbmQgYWxzbyBwcm9iYWJseSB0aGUgbGlicGNhcCBpbmNsdWRlZCBpbiB5b3VyIGRpc3RyaWJ1dGlvbi4gCisKK0knbSBhd2FyZSBvZiB0d28gaW1wbGVtZW50YXRpb25zIG9mIFBBQ0tFVF9NTUFQIGluIGxpYnBjYXA6CisKKyAgICBodHRwOi8vcHVzYS51di5lcy9+dWxpc3Nlcy9wYWNrZXRfbW1hcC8gIChieSBTaW1vbiBQYXRhcmluLCBiYXNlZCBvbiBsaWJwY2FwIDAuNi4yKQorICAgIGh0dHA6Ly9wdWJsaWMubGFubC5nb3YvY3B3LyAgICAgICAgICAgICAgKGJ5IFBoaWwgV29vZCwgYmFzZWQgb24gbGFzdGVzdCBsaWJwY2FwKQorCitUaGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGlzIGludGVuZGVkIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gdW5kZXJzdGFuZAordGhlIGxvdyBsZXZlbCBkZXRhaWxzIG9yIHdhbnQgdG8gaW1wcm92ZSBsaWJwY2FwIGJ5IGluY2x1ZGluZyBQQUNLRVRfTU1BUAorc3VwcG9ydC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgSG93IHRvIHVzZSBDT05GSUdfUEFDS0VUX01NQVAgZGlyZWN0bHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Zyb20gdGhlIHN5c3RlbSBjYWxscyBzdGFuZCBwb2ludCwgdGhlIHVzZSBvZiBQQUNLRVRfTU1BUCBpbnZvbHZlcwordGhlIGZvbGxvd2luZyBwcm9jZXNzOgorCisKK1tzZXR1cF0gICAgIHNvY2tldCgpIC0tLS0tLS0+IGNyZWF0aW9uIG9mIHRoZSBjYXB0dXJlIHNvY2tldAorICAgICAgICAgICAgc2V0c29ja29wdCgpIC0tLT4gYWxsb2NhdGlvbiBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIChyaW5nKQorICAgICAgICAgICAgbW1hcCgpIC0tLS0tLS0tLT4gbWFwaW5nIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBwcm9jZXNzCisKK1tjYXB0dXJlXSAgIHBvbGwoKSAtLS0tLS0tLS0+IHRvIHdhaXQgZm9yIGluY29taW5nIHBhY2tldHMKKworW3NodXRkb3duXSAgY2xvc2UoKSAtLS0tLS0tLT4gZGVzdHJ1Y3Rpb24gb2YgdGhlIGNhcHR1cmUgc29ja2V0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhbGxvY2F0aW9uIG9mIGFsbCBhc3NvY2lhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLgorCisKK3NvY2tldCBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gaXMgc3RyYWlnaHQgZm9yd2FyZCwgYW5kIGlzIGRvbmUgCit0aGUgc2FtZSB3YXkgd2l0aCBvciB3aXRob3V0IFBBQ0tFVF9NTUFQOgorCitpbnQgZmQ7CisKK2ZkPSBzb2NrZXQoUEZfUEFDS0VULCBtb2RlLCBodG9ucyhFVEhfUF9BTEwpKQorCit3aGVyZSBtb2RlIGlzIFNPQ0tfUkFXIGZvciB0aGUgcmF3IGludGVyZmFjZSB3ZXJlIGxpbmsgbGV2ZWwKK2luZm9ybWF0aW9uIGNhbiBiZSBjYXB0dXJlZCBvciBTT0NLX0RHUkFNIGZvciB0aGUgY29va2VkCitpbnRlcmZhY2Ugd2hlcmUgbGluayBsZXZlbCBpbmZvcm1hdGlvbiBjYXB0dXJlIGlzIG5vdCAKK3N1cHBvcnRlZCBhbmQgYSBsaW5rIGxldmVsIHBzZXVkby1oZWFkZXIgaXMgcHJvdmlkZWQgCitieSB0aGUga2VybmVsLgorCitUaGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHNvY2tldCBhbmQgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCitpcyBkb25lIGJ5IGEgc2ltcGxlIGNhbGwgdG8gY2xvc2UoZmQpLgorCitOZXh0IEkgd2lsbCBkZXNjcmliZSBQQUNLRVRfTU1BUCBzZXR0aW5ncyBhbmQgaXQncyBjb25zdHJhaW50cywKK2Fsc28gdGhlIG1hcGluZyBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIGluIHRoZSB1c2VyIHByb2Nlc3MgYW5kIAordGhlIHVzZSBvZiB0aGlzIGJ1ZmZlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgUEFDS0VUX01NQVAgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworVG8gc2V0dXAgUEFDS0VUX01NQVAgZnJvbSB1c2VyIGxldmVsIGNvZGUgaXMgZG9uZSB3aXRoIGEgY2FsbCBsaWtlCisKKyAgICAgc2V0c29ja29wdChmZCwgU09MX1BBQ0tFVCwgUEFDS0VUX1JYX1JJTkcsICh2b2lkICopICZyZXEsIHNpemVvZihyZXEpKQorCitUaGUgbW9zdCBzaWduaWZpY2FudCBhcmd1bWVudCBpbiB0aGUgcHJldmlvdXMgY2FsbCBpcyB0aGUgcmVxIHBhcmFtZXRlciwgCit0aGlzIHBhcmFtZXRlciBtdXN0IHRvIGhhdmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisKKyAgICBzdHJ1Y3QgdHBhY2tldF9yZXEKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCAgICB0cF9ibG9ja19zaXplOyAgLyogTWluaW1hbCBzaXplIG9mIGNvbnRpZ3VvdXMgYmxvY2sgKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHRwX2Jsb2NrX25yOyAgICAvKiBOdW1iZXIgb2YgYmxvY2tzICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICB0cF9mcmFtZV9zaXplOyAgLyogU2l6ZSBvZiBmcmFtZSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgdHBfZnJhbWVfbnI7ICAgIC8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgKi8KKyAgICB9OworCitUaGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIC91c3IvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCBhbmQgZXN0YWJsaXNoZXMgYSAKK2NpcmN1bGFyIGJ1ZmZlciAocmluZykgb2YgdW5zd2FwcGFibGUgbWVtb3J5IG1hcHBlZCBpbiB0aGUgY2FwdHVyZSBwcm9jZXNzLiAKK0JlaW5nIG1hcHBlZCBpbiB0aGUgY2FwdHVyZSBwcm9jZXNzIGFsbG93cyByZWFkaW5nIHRoZSBjYXB0dXJlZCBmcmFtZXMgYW5kIAorcmVsYXRlZCBtZXRhLWluZm9ybWF0aW9uIGxpa2UgdGltZXN0YW1wcyB3aXRob3V0IHJlcXVpcmluZyBhIHN5c3RlbSBjYWxsLgorCitDYXB0dXJlZCBmcmFtZXMgYXJlIGdyb3VwZWQgaW4gYmxvY2tzLiBFYWNoIGJsb2NrIGlzIGEgcGh5c2ljYWxseSBjb250aWd1b3VzIAorcmVnaW9uIG9mIG1lbW9yeSBhbmQgaG9sZHMgdHBfYmxvY2tfc2l6ZS90cF9mcmFtZV9zaXplIGZyYW1lcy4gVGhlIHRvdGFsIG51bWJlciAKK29mIGJsb2NrcyBpcyB0cF9ibG9ja19uci4gTm90ZSB0aGF0IHRwX2ZyYW1lX25yIGlzIGEgcmVkdW5kYW50IHBhcmFtZXRlciBiZWNhdXNlCisKKyAgICBmcmFtZXNfcGVyX2Jsb2NrID0gdHBfYmxvY2tfc2l6ZS90cF9mcmFtZV9zaXplCisKK2luZGVlZCwgcGFja2V0X3NldF9yaW5nIGNoZWNrcyB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIHRydWUKKworICAgIGZyYW1lc19wZXJfYmxvY2sgKiB0cF9ibG9ja19uciA9PSB0cF9mcmFtZV9ucgorCisKK0xldHMgc2VlIGFuIGV4YW1wbGUsIHdpdGggdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgICAgdHBfYmxvY2tfc2l6ZT0gNDA5NgorICAgICB0cF9mcmFtZV9zaXplPSAyMDQ4CisgICAgIHRwX2Jsb2NrX25yICA9IDQKKyAgICAgdHBfZnJhbWVfbnIgID0gOAorCit3ZSB3aWxsIGdldCB0aGUgZm9sbG93aW5nIGJ1ZmZlciBzdHJ1Y3R1cmU6CisKKyAgICAgICAgYmxvY2sgIzEgICAgICAgICAgICAgICAgIGJsb2NrICMyICAgICAgICAgCisrLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rICAgIAorfCBmcmFtZSAxIHwgZnJhbWUgMiB8ICAgIHwgZnJhbWUgMyB8IGZyYW1lIDQgfCAgICAKKystLS0tLS0tLS0rLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgCisKKyAgICAgICAgYmxvY2sgIzMgICAgICAgICAgICAgICAgIGJsb2NrICM0CisrLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rCit8IGZyYW1lIDUgfCBmcmFtZSA2IHwgICAgfCBmcmFtZSA3IHwgZnJhbWUgOCB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rCisKK0EgZnJhbWUgY2FuIGJlIG9mIGFueSBzaXplIHdpdGggdGhlIG9ubHkgY29uZGl0aW9uIGl0IGNhbiBmaXQgaW4gYSBibG9jay4gQSBibG9jaworY2FuIG9ubHkgaG9sZCBhbiBpbnRlZ2VyIG51bWJlciBvZiBmcmFtZXMsIG9yIGluIG90aGVyIHdvcmRzLCBhIGZyYW1lIGNhbm5vdCAKK2JlIHNwYXduIGFjY3Jvc3MgdHdvIGJsb2NrcyBzbyB0aGVyZSBhcmUgc29tZSBkYXRhaWxzIHlvdSBoYXZlIHRvIHRha2UgaW50byAKK2FjY291bnQgd2hlbiBjaG9vc2luZyB0aGUgZnJhbWVfc2l6ZS4gU2VlICJNYXBpbmcgYW5kIHVzZSBvZiB0aGUgY2lyY3VsYXIgCitidWZmZXIgKHJpbmcpIi4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyBQQUNLRVRfTU1BUCBzZXR0aW5nIGNvbnN0cmFpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBrZXJuZWwgdmVyc2lvbnMgcHJpb3IgdG8gMi40LjI2IChmb3IgdGhlIDIuNCBicmFuY2gpIGFuZCAyLjYuNSAoMi42IGJyYW5jaCksCit0aGUgUEFDS0VUX01NQVAgYnVmZmVyIGNvdWxkIGhvbGQgb25seSAzMjc2OCBmcmFtZXMgaW4gYSAzMiBiaXQgYXJjaGl0ZWN0dXJlIG9yCisxNjM4NCBpbiBhIDY0IGJpdCBhcmNoaXRlY3R1cmUuIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBrZXJuZWwgdmVyc2lvbnMKK3NlZSBodHRwOi8vcHVzYS51di5lcy9+dWxpc3Nlcy9wYWNrZXRfbW1hcC9wYWNrZXRfbW1hcC5wcmUtMi40LjI2XzIuNi41LnR4dAorCisgQmxvY2sgc2l6ZSBsaW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHN0YXRlZCBlYXJsaWVyLCBlYWNoIGJsb2NrIGlzIGEgY29udGlndW91cyBwaHlzaWNhbCByZWdpb24gb2YgbWVtb3J5LiBUaGVzZSAKK21lbW9yeSByZWdpb25zIGFyZSBhbGxvY2F0ZWQgd2l0aCBjYWxscyB0byB0aGUgX19nZXRfZnJlZV9wYWdlcygpIGZ1bmN0aW9uLiBBcyAKK3RoZSBuYW1lIGluZGljYXRlcywgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgcGFnZXMgb2YgbWVtb3J5LCBhbmQgdGhlIHNlY29uZAorYXJndW1lbnQgaXMgIm9yZGVyIiBvciBhIHBvd2VyIG9mIHR3byBudW1iZXIgb2YgcGFnZXMsIHRoYXQgaXMgCisoZm9yIFBBR0VfU0laRSA9PSA0MDk2KSBvcmRlcj0wID09PiA0MDk2IGJ5dGVzLCBvcmRlcj0xID09PiA4MTkyIGJ5dGVzLCAKK29yZGVyPTIgPT0+IDE2Mzg0IGJ5dGVzLCBldGMuIFRoZSBtYXhpbXVtIHNpemUgb2YgYSAKK3JlZ2lvbiBhbGxvY2F0ZWQgYnkgX19nZXRfZnJlZV9wYWdlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBNQVhfT1JERVIgbWFjcm8uIE1vcmUgCitwcmVjaXNlbHkgdGhlIGxpbWl0IGNhbiBiZSBjYWxjdWxhdGVkIGFzOgorCisgICBQQUdFX1NJWkUgPDwgTUFYX09SREVSCisKKyAgIEluIGEgaTM4NiBhcmNoaXRlY3R1cmUgUEFHRV9TSVpFIGlzIDQwOTYgYnl0ZXMgCisgICBJbiBhIDIuNC9pMzg2IGtlcm5lbCBNQVhfT1JERVIgaXMgMTAKKyAgIEluIGEgMi42L2kzODYga2VybmVsIE1BWF9PUkRFUiBpcyAxMQorCitTbyBnZXRfZnJlZV9wYWdlcyBjYW4gYWxsb2NhdGUgYXMgbXVjaCBhcyA0TUIgb3IgOE1CIGluIGEgMi40LzIuNiBrZXJuZWwgCityZXNwZWN0aXZlbHksIHdpdGggYW4gaTM4NiBhcmNoaXRlY3R1cmUuCisKK1VzZXIgc3BhY2UgcHJvZ3JhbXMgY2FuIGluY2x1ZGUgL3Vzci9pbmNsdWRlL3N5cy91c2VyLmggYW5kIAorL3Vzci9pbmNsdWRlL2xpbnV4L21tem9uZS5oIHRvIGdldCBQQUdFX1NJWkUgTUFYX09SREVSIGRlY2xhcmF0aW9ucy4KKworVGhlIHBhZ2VzaXplIGNhbiBhbHNvIGJlIGRldGVybWluZWQgZHluYW1pY2FsbHkgd2l0aCB0aGUgZ2V0cGFnZXNpemUgKDIpIAorc3lzdGVtIGNhbGwuIAorCisKKyBCbG9jayBudW1iZXIgbGltaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVuZGVyc3RhbmQgdGhlIGNvbnN0cmFpbnRzIG9mIFBBQ0tFVF9NTUFQLCB3ZSBoYXZlIHRvIHNlZSB0aGUgc3RydWN0dXJlIAordXNlZCB0byBob2xkIHRoZSBwb2ludGVycyB0byBlYWNoIGJsb2NrLgorCitDdXJyZW50bHksIHRoaXMgc3RydWN0dXJlIGlzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHZlY3RvciB3aXRoIGttYWxsb2MgCitjYWxsZWQgcGdfdmVjLCBpdHMgc2l6ZSBsaW1pdHMgdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBjYW4gYmUgYWxsb2NhdGVkLgorCisgICAgKy0tLSstLS0rLS0tKy0tLSsKKyAgICB8IHggfCB4IHwgeCB8IHggfAorICAgICstLS0rLS0tKy0tLSstLS0rCisgICAgICB8ICAgfCAgIHwgICB8CisgICAgICB8ICAgfCAgIHwgICB2CisgICAgICB8ICAgfCAgIHYgIGJsb2NrICM0CisgICAgICB8ICAgdiAgYmxvY2sgIzMKKyAgICAgIHYgIGJsb2NrICMyCisgICAgIGJsb2NrICMxCisKKwora21hbGxvYyBhbGxvY2F0ZXMgYW55IG51bWJlciBvZiBieXRlcyBvZiBwaGlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZyb20gCithIHBvb2wgb2YgcHJlLWRldGVybWluZWQgc2l6ZXMuIFRoaXMgcG9vbCBvZiBtZW1vcnkgaXMgbWFudGFpbmVkIGJ5IHRoZSBzbGFiIAorYWxsb2NhdG9yIHdpY2ggaXMgYXQgdGhlIGVuZCB0aGUgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCAKK2hlbmNlIHdpY2ggaW1wb3NlcyB0aGUgbWF4aW11bSBtZW1vcnkgdGhhdCBrbWFsbG9jIGNhbiBhbGxvY2F0ZS4gCisKK0luIGEgMi40LzIuNiBrZXJuZWwgYW5kIHRoZSBpMzg2IGFyY2hpdGVjdHVyZSwgdGhlIGxpbWl0IGlzIDEzMTA3MiBieXRlcy4gVGhlIAorcHJlZGV0ZXJtaW5lZCBzaXplcyB0aGF0IGttYWxsb2MgdXNlcyBjYW4gYmUgY2hlY2tlZCBpbiB0aGUgInNpemUtPGJ5dGVzPiIgCitlbnRyaWVzIG9mIC9wcm9jL3NsYWJpbmZvCisKK0luIGEgMzIgYml0IGFyY2hpdGVjdHVyZSwgcG9pbnRlcnMgYXJlIDQgYnl0ZXMgbG9uZywgc28gdGhlIHRvdGFsIG51bWJlciBvZiAKK3BvaW50ZXJzIHRvIGJsb2NrcyBpcworCisgICAgIDEzMTA3Mi80ID0gMzI3NjggYmxvY2tzCisKKworIFBBQ0tFVF9NTUFQIGJ1ZmZlciBzaXplIGNhbGN1bGF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZWZpbml0aW9uczoKKworPHNpemUtbWF4PiAgICA6IGlzIHRoZSBtYXhpbXVtIHNpemUgb2YgYWxsb2NhYmxlIHdpdGgga21hbGxvYyAoc2VlIC9wcm9jL3NsYWJpbmZvKQorPHBvaW50ZXIgc2l6ZT46IGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZSAtLSBzaXplb2Yodm9pZCAqKQorPHBhZ2Ugc2l6ZT4gICA6IGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZSAtLSBQQUdFX1NJWkUgb3IgZ2V0cGFnZXNpemUgKDIpCis8bWF4LW9yZGVyPiAgIDogaXMgdGhlIHZhbHVlIGRlZmluZWQgd2l0aCBNQVhfT1JERVIKKzxmcmFtZSBzaXplPiAgOiBpdCdzIGFuIHVwcGVyIGJvdW5kIG9mIGZyYW1lJ3MgY2FwdHVyZSBzaXplIChtb3JlIG9uIHRoaXMgbGF0ZXIpCisKK2Zyb20gdGhlc2UgZGVmaW5pdGlvbnMgd2Ugd2lsbCBkZXJpdmUgCisKKwk8YmxvY2sgbnVtYmVyPiA9IDxzaXplLW1heD4vPHBvaW50ZXIgc2l6ZT4KKwk8YmxvY2sgc2l6ZT4gPSA8cGFnZXNpemU+IDw8IDxtYXgtb3JkZXI+CisKK3NvLCB0aGUgbWF4IGJ1ZmZlciBzaXplIGlzCisKKwk8YmxvY2sgbnVtYmVyPiAqIDxibG9jayBzaXplPgorCithbmQsIHRoZSBudW1iZXIgb2YgZnJhbWVzIGJlCisKKwk8YmxvY2sgbnVtYmVyPiAqIDxibG9jayBzaXplPiAvIDxmcmFtZSBzaXplPgorCitTdXBvc3NlIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycywgd2ljaCBhcHBseSBmb3IgMi42IGtlcm5lbCBhbmQgYW4KK2kzODYgYXJjaGl0ZWN0dXJlOgorCisJPHNpemUtbWF4PiA9IDEzMTA3MiBieXRlcworCTxwb2ludGVyIHNpemU+ID0gNCBieXRlcworCTxwYWdlc2l6ZT4gPSA0MDk2IGJ5dGVzCisJPG1heC1vcmRlcj4gPSAxMQorCithbmQgYSB2YWx1ZSBmb3IgPGZyYW1lIHNpemU+IG9mIDIwNDggYnl0ZWFzLiBUaGVzZSBwYXJhbWV0ZXJzIHdpbGwgeWllbGQKKworCTxibG9jayBudW1iZXI+ID0gMTMxMDcyLzQgPSAzMjc2OCBibG9ja3MKKwk8YmxvY2sgc2l6ZT4gPSA0MDk2IDw8IDExID0gOCBNaUIuCisKK2FuZCBoZW5jZSB0aGUgYnVmZmVyIHdpbGwgaGF2ZSBhIDI2MjE0NCBNaUIgc2l6ZS4gU28gaXQgY2FuIGhvbGQgCisyNjIxNDQgTWlCIC8gMjA0OCBieXRlcyA9IDEzNDIxNzcyOCBmcmFtZXMKKworCitBY3R1YWxseSwgdGhpcyBidWZmZXIgc2l6ZSBpcyBub3QgcG9zc2libGUgd2l0aCBhbiBpMzg2IGFyY2hpdGVjdHVyZS4gCitSZW1lbWJlciB0aGF0IHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGluIGtlcm5lbCBzcGFjZSwgaW4gdGhlIGNhc2Ugb2YgCithbiBpMzg2IGtlcm5lbCdzIG1lbW9yeSBzaXplIGlzIGxpbWl0ZWQgdG8gMUdpQi4KKworQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgbm90IGZyZWVkIHVudGlsIHRoZSBzb2NrZXQgaXMgY2xvc2VkLiBUaGUgbWVtb3J5IAorYWxsb2NhdGlvbnMgYXJlIGRvbmUgd2l0aCBHRlBfS0VSTkVMIHByaW9yaXR5LCB0aGlzIGJhc2ljYWxseSBtZWFucyB0aGF0IAordGhlIGFsbG9jYXRpb24gY2FuIHdhaXQgYW5kIHN3YXAgb3RoZXIgcHJvY2VzcycgbWVtb3J5IGluIG9yZGVyIHRvIGFsbG9jYXRlIAordGhlIG5lY2VjZXNzYXJ5IG1lbW9yeSwgc28gbm9ybWFsbHkgbGltaXRzIGNhbiBiZSByZWFjaGVkLgorCisgT3RoZXIgY29uc3RyYWludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGNoZWNrIHRoZSBzb3VyY2UgY29kZSB5b3Ugd2lsbCBzZWUgdGhhdCB3aGF0IEkgZHJhdyBoZXJlIGFzIGEgZnJhbWUKK2lzIG5vdCBvbmx5IHRoZSBsaW5rIGxldmVsIGZyYW1lLiBBdCB0aGUgYmVnaW5pbmcgb2YgZWFjaCBmcmFtZSB0aGVyZSBpcyBhIAoraGVhZGVyIGNhbGxlZCBzdHJ1Y3QgdHBhY2tldF9oZHIgdXNlZCBpbiBQQUNLRVRfTU1BUCB0byBob2xkIGxpbmsgbGV2ZWwncyBmcmFtZQorbWV0YSBpbmZvcm1hdGlvbiBsaWtlIHRpbWVzdGFtcC4gU28gd2hhdCB3ZSBkcmF3IGhlcmUgYSBmcmFtZSBpdCdzIHJlYWxseSAKK3RoZSBmb2xsb3dpbmcgKGZyb20gaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCk6CisKKy8qCisgICBGcmFtZSBzdHJ1Y3R1cmU6CisKKyAgIC0gU3RhcnQuIEZyYW1lIG11c3QgYmUgYWxpZ25lZCB0byBUUEFDS0VUX0FMSUdOTUVOVD0xNgorICAgLSBzdHJ1Y3QgdHBhY2tldF9oZHIKKyAgIC0gcGFkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgICAtIHN0cnVjdCBzb2NrYWRkcl9sbAorICAgLSBHYXAsIGNob3NlbiBzbyB0aGF0IHBhY2tldCBkYXRhIChTdGFydCt0cF9uZXQpIGFsaWduZXMgdG8gCisgICAgIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgICAtIFN0YXJ0K3RwX21hYzogWyBPcHRpb25hbCBNQUMgaGVhZGVyIF0KKyAgIC0gU3RhcnQrdHBfbmV0OiBQYWNrZXQgZGF0YSwgYWxpZ25lZCB0byBUUEFDS0VUX0FMSUdOTUVOVD0xNi4KKyAgIC0gUGFkIHRvIGFsaWduIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgKi8KKyAgICAgICAgICAgCisgCisgVGhlIGZvbGxvd2luZyBhcmUgY29uZGl0aW9ucyB0aGF0IGFyZSBjaGVja2VkIGluIHBhY2tldF9zZXRfcmluZworCisgICB0cF9ibG9ja19zaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgKDEpCisgICB0cF9mcmFtZV9zaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIFRQQUNLRVRfSERSTEVOIChvYnZpb3VzKQorICAgdHBfZnJhbWVfc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgVFBBQ0tFVF9BTElHTk1FTlQKKyAgIHRwX2ZyYW1lX25yICAgbXVzdCBiZSBleGFjdGx5IGZyYW1lc19wZXJfYmxvY2sqdHBfYmxvY2tfbnIKKworTm90ZSB0aGF0IHRwX2Jsb2NrX3NpemUgc2hvdWxkIGJlIGNob29zZWQgdG8gYmUgYSBwb3dlciBvZiB0d28gb3IgdGhlcmUgd2lsbAorYmUgYSB3YXN0ZSBvZiBtZW1vcnkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIE1hcGluZyBhbmQgdXNlIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgKHJpbmcpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWFwaW5nIG9mIHRoZSBidWZmZXIgaW4gdGhlIHVzZXIgcHJvY2VzcyBpcyBkb25lIHdpdGggdGhlIGNvbnZlbnRpb25hbCAKK21tYXAgZnVuY3Rpb24uIEV2ZW4gdGhlIGNpcmN1bGFyIGJ1ZmZlciBpcyBjb21wb3VuZCBvZiBzZXZlcmFsIHBoeXNpY2FsbHkKK2Rpc2NvbnRpZ3VvdXMgYmxvY2tzIG9mIG1lbW9yeSwgdGhleSBhcmUgY29udGlndW91cyB0byB0aGUgdXNlciBzcGFjZSwgaGVuY2UKK2p1c3Qgb25lIGNhbGwgdG8gbW1hcCBpcyBuZWVkZWQ6CisKKyAgICBtbWFwKDAsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CisKK0lmIHRwX2ZyYW1lX3NpemUgaXMgYSBkaXZpc29yIG9mIHRwX2Jsb2NrX3NpemUgZnJhbWVzIHdpbGwgYmUgCitjb250aWd1b3NseSBzcGFjZWQgYnkgdHBfZnJhbWVfc2l6ZSBieXRlcy4gSWYgbm90LCBlYWNoIAordHBfYmxvY2tfc2l6ZS90cF9mcmFtZV9zaXplIGZyYW1lcyB0aGVyZSB3aWxsIGJlIGEgZ2FwIGJldHdlZW4gCit0aGUgZnJhbWVzLiBUaGlzIGlzIGJlY2F1c2UgYSBmcmFtZSBjYW5ub3QgYmUgc3Bhd24gYWNyb3NzIHR3bworYmxvY2tzLiAKKworQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGZyYW1lIHRoZXJlIGlzIGFuIHN0YXR1cyBmaWVsZCAoc2VlIAorc3RydWN0IHRwYWNrZXRfaGRyKS4gSWYgdGhpcyBmaWVsZCBpcyAwIG1lYW5zIHRoYXQgdGhlIGZyYW1lIGlzIHJlYWR5Cit0byBiZSB1c2VkIGZvciB0aGUga2VybmVsLCBJZiBub3QsIHRoZXJlIGlzIGEgZnJhbWUgdGhlIHVzZXIgY2FuIHJlYWQgCithbmQgdGhlIGZvbGxvd2luZyBmbGFncyBhcHBseToKKworICAgICBmcm9tIGluY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKKworICAgICAjZGVmaW5lIFRQX1NUQVRVU19DT1BZICAgICAgICAgIDIgCisgICAgICNkZWZpbmUgVFBfU1RBVFVTX0xPU0lORyAgICAgICAgNCAKKyAgICAgI2RlZmluZSBUUF9TVEFUVVNfQ1NVTU5PVFJFQURZICA4IAorCisKK1RQX1NUQVRVU19DT1BZICAgICAgICA6IFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgZnJhbWUgKGFuZCBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhIGluZm9ybWF0aW9uKSBoYXMgYmVlbiB0cnVuY2F0ZWQgYmVjYXVzZSBpdCdzIAorICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2VyIHRoYW4gdHBfZnJhbWVfc2l6ZS4gVGhpcyBwYWNrZXQgY2FuIGJlIAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCBlbnRpcmVseSB3aXRoIHJlY3Zmcm9tKCkuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIG1ha2UgdGhpcyB3b3JrIGl0IG11c3QgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgcHJldmlvdXNseSB3aXRoIHNldHNvY2tvcHQoKSBhbmQgCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUEFDS0VUX0NPUFlfVEhSRVNIIG9wdGlvbi4gCisKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYW4gY2FuIGJlIGJ1ZmZlcmVkIHRvIAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVhZCB3aXRoIHJlY3Zmcm9tIGlzIGxpbWl0ZWQgbGlrZSBhIG5vcm1hbCBzb2NrZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIFNPX1JDVkJVRiBvcHRpb24gaW4gdGhlIHNvY2tldCAoNykgbWFuIHBhZ2UuCisKK1RQX1NUQVRVU19MT1NJTkcgICAgICA6IGluZGljYXRlcyB0aGVyZSB3ZXJlIHBhY2tldCBkcm9wcyBmcm9tIGxhc3QgdGltZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3Mgd2hlcmUgY2hlY2tlZCB3aXRoIGdldHNvY2tvcHQoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBQQUNLRVRfU1RBVElTVElDUyBvcHRpb24uCisKK1RQX1NUQVRVU19DU1VNTk9UUkVBRFk6IGN1cnJlbnRseSBpdCdzIHVzZWQgZm9yIG91dGdvaW5nIElQIHBhY2tldHMgd2ljaCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0J3MgY2hlY2tzdW0gd2lsbCBiZSBkb25lIGluIGhhcmR3YXJlLiBTbyB3aGlsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcgdGhlIHBhY2tldCB3ZSBzaG91bGQgbm90IHRyeSB0byBjaGVjayB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bS4gCisKK2ZvciBjb252ZW5pZW5jZSB0aGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nIGRlZmluZXM6CisKKyAgICAgI2RlZmluZSBUUF9TVEFUVVNfS0VSTkVMICAgICAgICAwCisgICAgICNkZWZpbmUgVFBfU1RBVFVTX1VTRVIgICAgICAgICAgMQorCitUaGUga2VybmVsIGluaXRpYWxpemVzIGFsbCBmcmFtZXMgdG8gVFBfU1RBVFVTX0tFUk5FTCwgd2hlbiB0aGUga2VybmVsCityZWNlaXZlcyBhIHBhY2tldCBpdCBwdXRzIGluIHRoZSBidWZmZXIgYW5kIHVwZGF0ZXMgdGhlIHN0YXR1cyB3aXRoCithdCBsZWFzdCB0aGUgVFBfU1RBVFVTX1VTRVIgZmxhZy4gVGhlbiB0aGUgdXNlciBjYW4gcmVhZCB0aGUgcGFja2V0LAorb25jZSB0aGUgcGFja2V0IGlzIHJlYWQgdGhlIHVzZXIgbXVzdCB6ZXJvIHRoZSBzdGF0dXMgZmllbGQsIHNvIHRoZSBrZXJuZWwgCitjYW4gdXNlIGFnYWluIHRoYXQgZnJhbWUgYnVmZmVyLgorCitUaGUgdXNlciBjYW4gdXNlIHBvbGwgKGFueSBvdGhlciB2YXJpYW50IHNob3VsZCBhcHBseSB0b28pIHRvIGNoZWNrIGlmIG5ldworcGFja2V0cyBhcmUgaW4gdGhlIHJpbmc6CisKKyAgICBzdHJ1Y3QgcG9sbGZkIHBmZDsKKworICAgIHBmZC5mZCA9IGZkOworICAgIHBmZC5yZXZlbnRzID0gMDsKKyAgICBwZmQuZXZlbnRzID0gUE9MTElOfFBPTExSRE5PUk18UE9MTEVSUjsKKworICAgIGlmIChzdGF0dXMgPT0gVFBfU1RBVFVTX0tFUk5FTCkKKyAgICAgICAgcmV0dmFsID0gcG9sbCgmcGZkLCAxLCB0aW1lb3V0KTsKKworSXQgZG9lc24ndCBpbmN1ciBpbiBhIHJhY2UgY29uZGl0aW9uIHRvIGZpcnN0IGNoZWNrIHRoZSBzdGF0dXMgdmFsdWUgYW5kIAordGhlbiBwb2xsIGZvciBmcmFtZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIFRIQU5LUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIAorICAgSmVzc2UgQnJhbmRlYnVyZywgZm9yIGZpeGluZyBteSBncmFtbWF0aGljYWwvc3BlbGxpbmcgZXJyb3JzCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0YjRkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0CkBAIC0wLDAgKzEsMjE0IEBACisKKworICAgICAgICAgICAgICAgICAgSE9XVE8gZm9yIHRoZSBsaW51eCBwYWNrZXQgZ2VuZXJhdG9yIAorICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGU6IDA0MTIyMQorCitFbmFibGUgQ09ORklHX05FVF9QS1RHRU4gdG8gY29tcGlsZSBhbmQgYnVpbGQgcGt0Z2VuLm8gZWl0aGVyIGluIGtlcm5lbAorb3IgYXMgbW9kdWxlLiBNb2R1bGUgaXMgcHJlZmVycmVkLiBpbnNtb2QgcGt0Z2VuIGlmIG5lZWRlZC4gT25jZSBydW5uaW5nCitwa3RnZW4gY3JlYXRlcyBhIHRocmVhZCBvbiBlYWNoIENQVSB3aGVyZSBlYWNoIHRocmVhZCBoYXMgYWZmaW50eSBpdCdzIENQVS4KK01vbml0b3JpbmcgYW5kIGNvbnRyb2xsaW5nIGlzIGRvbmUgdmlhIC9wcm9jLiBFYXNpZXN0IHRvIHNlbGVjdCBhIHN1aXRhYmxlIAorYSBzYW1wbGUgc2NyaXB0IGFuZCBjb25maWd1cmUuCisKK09uIGEgZHVhbCBDUFU6CisKK3BzIGF1eCB8IGdyZXAgcGt0Cityb290ICAgICAgIDEyOSAgMC4zICAwLjAgICAgIDAgICAgMCA/ICAgICAgICBTVyAgICAyMDAzIDUyMzoyMCBbcGt0Z2VuLzBdCityb290ICAgICAgIDEzMCAgMC4zICAwLjAgICAgIDAgICAgMCA/ICAgICAgICBTVyAgICAyMDAzIDUwOTo1MCBbcGt0Z2VuLzFdCisKKworRm9yIG1vbnRvcmluZyBhbmQgY29udHJvbCBwa3RnZW4gY3JlYXRlczoKKwkvcHJvYy9uZXQvcGt0Z2VuL3BnY3RybAorCS9wcm9jL25ldC9wa3RnZW4va3BrdGdlbmRfWAorICAgICAgICAvcHJvYy9uZXQvcGt0Z2VuL2V0aFgKKworCitWaWV3aW5nIHRocmVhZHMKKz09PT09PT09PT09PT09PQorL3Byb2MvbmV0L3BrdGdlbi9rcGt0Z2VuZF8wIAorTmFtZToga3BrdGdlbmRfMCAgbWF4X2JlZm9yZV9zb2Z0aXJxOiAxMDAwMAorUnVubmluZzogCitTdG9wcGVkOiBldGgxIAorUmVzdWx0OiBPSzogbWF4X2JlZm9yZV9zb2Z0aXJxPTEwMDAwCisKK01vc3QgaW1wb3J0YW50IHRoZSBkZXZpY2VzIGFzc2lnZW5kIHRvIHRocmVhZC4gTm90ZSEgQSBkZXZpY2UgY2FuIG9ubHkgYmVsb25nIAordG8gb25lIHRocmVhZC4KKworCitWaWV3aW5nIGRldmljZXMKKz09PT09PT09PT09PT09PQorCitQYXJtIHNlY3Rpb24gaG9sZHMgY29uZmlndXJlZCBpbmZvLiBDdXJyZW50IGhvbGQgcnVubmluZyBzdGF0cy4gCitSZXN1bHQgaXMgcHJpbnRlZCBhZnRlciBydW4gb3IgYWZ0ZXIgaW50ZXJydXB0aW9uLiBFeGFtcGxlOgorCisvcHJvYy9uZXQvcGt0Z2VuL2V0aDEgICAgICAgCisKK1BhcmFtczogY291bnQgMTAwMDAwMDAgIG1pbl9wa3Rfc2l6ZTogNjAgIG1heF9wa3Rfc2l6ZTogNjAKKyAgICAgZnJhZ3M6IDAgIGRlbGF5OiAwICBjbG9uZV9za2I6IDEwMDAwMDAgIGlmbmFtZTogZXRoMQorICAgICBmbG93czogMCBmbG93bGVuOiAwCisgICAgIGRzdF9taW46IDEwLjEwLjExLjIgIGRzdF9tYXg6IAorICAgICBzcmNfbWluOiAgIHNyY19tYXg6IAorICAgICBzcmNfbWFjOiAwMDowMDowMDowMDowMDowMCAgZHN0X21hYzogMDA6MDQ6MjM6QUM6RkQ6ODIKKyAgICAgdWRwX3NyY19taW46IDkgIHVkcF9zcmNfbWF4OiA5ICB1ZHBfZHN0X21pbjogOSAgdWRwX2RzdF9tYXg6IDkKKyAgICAgc3JjX21hY19jb3VudDogMCAgZHN0X21hY19jb3VudDogMCAKKyAgICAgRmxhZ3M6IAorQ3VycmVudDoKKyAgICAgcGt0cy1zb2ZhcjogMTAwMDAwMDAgIGVycm9yczogMzk2NjQKKyAgICAgc3RhcnRlZDogMTEwMzA1Mzk4NjI0NTE4N3VzICBzdG9wcGVkOiAxMTAzMDUzOTk5MzQ2MzI5dXMgaWRsZTogODgwNDAxdXMKKyAgICAgc2VxX251bTogMTAwMDAwMTEgIGN1cl9kc3RfbWFjX29mZnNldDogMCAgY3VyX3NyY19tYWNfb2Zmc2V0OiAwCisgICAgIGN1cl9zYWRkcjogMHgxMGEwYTBhICBjdXJfZGFkZHI6IDB4MjBiMGEwYQorICAgICBjdXJfdWRwX2RzdDogOSAgY3VyX3VkcF9zcmM6IDkKKyAgICAgZmxvd3M6IDAKK1Jlc3VsdDogT0s6IDEzMTAxMTQyKGMxMjIyMDc0MStkODgwNDAxKSB1c2VjLCAxMDAwMDAwMCAoNjBieXRlLDBmcmFncykKKyAgNzYzMjkycHBzIDM5ME1iL3NlYyAoMzkwODA1NTA0YnBzKSBlcnJvcnM6IDM5NjY0CisKK0NvbmZndXJpbmcgdGhyZWFkcyBhbmQgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGlzIGRvbmUgdmlhIHRoZSAvcHJvYyBpbnRlcmZhY2UgZWFzaWVzdCBkb25lIHZpYSBwZ3NldCBpbiB0aGUgc2NyaXB0cworCitFeGFtcGxlczoKKworIHBnc2V0ICJjbG9uZV9za2IgMSIgICAgIHNldHMgdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIHNhbWUgcGFja2V0CisgcGdzZXQgImNsb25lX3NrYiAwIiAgICAgdXNlIHNpbmdsZSBTS0IgZm9yIGFsbCB0cmFuc21pdHMKKyBwZ3NldCAicGt0X3NpemUgOTAxNCIgICBzZXRzIHBhY2tldCBzaXplIHRvIDkwMTQKKyBwZ3NldCAiZnJhZ3MgNSIgICAgICAgICBwYWNrZXQgd2lsbCBjb25zaXN0IG9mIDUgZnJhZ21lbnRzCisgcGdzZXQgImNvdW50IDIwMDAwMCIgICAgc2V0cyBudW1iZXIgb2YgcGFja2V0cyB0byBzZW5kLCBzZXQgdG8gemVybworICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb250aW5pb3VzIHNlbmRzIHVudGlsbCBleHBsaWNpdGwgc3RvcHBlZC4KKworIHBnc2V0ICJkZWxheSA1MDAwIiAgICAgIGFkZHMgZGVsYXkgdG8gaGFyZF9zdGFydF94bWl0KCkuIG5hbm9zZWNvbmRzCisKKyBwZ3NldCAiZHN0IDEwLjAuMC4xIiAgICBzZXRzIElQIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAoQkVXQVJFISBUaGlzIGdlbmVyYXRvciBpcyB2ZXJ5IGFnZ3Jlc3NpdmUhKQorCisgcGdzZXQgImRzdF9taW4gMTAuMC4wLjEiICAgICAgICAgICAgU2FtZSBhcyBkc3QKKyBwZ3NldCAiZHN0X21heCAxMC4wLjAuMjU0IiAgICAgICAgICBTZXQgdGhlIG1heGltdW0gZGVzdGluYXRpb24gSVAuCisgcGdzZXQgInNyY19taW4gMTAuMC4wLjEiICAgICAgICAgICAgU2V0IHRoZSBtaW5pbXVtIChvciBvbmx5KSBzb3VyY2UgSVAuCisgcGdzZXQgInNyY19tYXggMTAuMC4wLjI1NCIgICAgICAgICAgU2V0IHRoZSBtYXhpbXVtIHNvdXJjZSBJUC4KKyBwZ3NldCAiZHN0NiBmZWMwOjoxIiAgICAgSVBWNiBkZXN0aW5hdGlvbiBhZGRyZXNzCisgcGdzZXQgInNyYzYgZmVjMDo6MiIgICAgIElQVjYgc291cmNlIGFkZHJlc3MKKyBwZ3NldCAiZHN0bWFjIDAwOjAwOjAwOjAwOjAwOjAwIiAgICBzZXRzIE1BQyBkZXN0aW5hdGlvbiBhZGRyZXNzCisgcGdzZXQgInNyY21hYyAwMDowMDowMDowMDowMDowMCIgICAgc2V0cyBNQUMgc291cmNlIGFkZHJlc3MKKworIHBnc2V0ICJzcmNfbWFjX2NvdW50IDEiIFNldHMgdGhlIG51bWJlciBvZiBNQUNzIHdlJ2xsIHJhbmdlIHRocm91Z2guICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgJ21pbmltdW0nIE1BQyBpcyB3aGF0IHlvdSBzZXQgd2l0aCBzcmNtYWMuCisKKyBwZ3NldCAiZHN0X21hY19jb3VudCAxIiBTZXRzIHRoZSBudW1iZXIgb2YgTUFDcyB3ZSdsbCByYW5nZSB0aHJvdWdoLgorICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAnbWluaW11bScgTUFDIGlzIHdoYXQgeW91IHNldCB3aXRoIGRzdG1hYy4KKworIHBnc2V0ICJmbGFnIFtuYW1lXSIgICAgIFNldCBhIGZsYWcgdG8gZGV0ZXJtaW5lIGJlaGF2aW91ci4gIEN1cnJlbnQgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcmU6IElQU1JDX1JORCAjSVAgU291cmNlIGlzIHJhbmRvbSAoYmV0d2VlbiBtaW4vbWF4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQRFNUX1JORCwgVURQU1JDX1JORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEUERTVF9STkQsIE1BQ1NSQ19STkQsIE1BQ0RTVF9STkQgCisKKyBwZ3NldCAidWRwX3NyY19taW4gOSIgICBzZXQgVURQIHNvdXJjZSBwb3J0IG1pbiwgSWYgPCB1ZHBfc3JjX21heCwgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlIHRocm91Z2ggdGhlIHBvcnQgcmFuZ2UuCisKKyBwZ3NldCAidWRwX3NyY19tYXggOSIgICBzZXQgVURQIHNvdXJjZSBwb3J0IG1heC4KKyBwZ3NldCAidWRwX2RzdF9taW4gOSIgICBzZXQgVURQIGRlc3RpbmF0aW9uIHBvcnQgbWluLCBJZiA8IHVkcF9kc3RfbWF4LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUgdGhyb3VnaCB0aGUgcG9ydCByYW5nZS4KKyBwZ3NldCAidWRwX2RzdF9tYXggOSIgICBzZXQgVURQIGRlc3RpbmF0aW9uIHBvcnQgbWF4LgorCisgcGdzZXQgc3RvcCAgICAJICAgICAgICAgIGFib3J0cyBpbmplY3Rpb24uIEFsc28sIF5DIGFib3J0cyBnZW5lcmF0b3IuCisKKworRXhhbXBsZSBzY3JpcHRzCis9PT09PT09PT09PT09PT0KKworQSBjb2xsZWN0aW9uIG9mIHNtYWxsIHR1dG9yaWFsIHNjcmlwdHMgZm9yIHBrdGdlbiBpcyBpbiBleHBhbXBsZXMgZGlyLgorCitwa3RnZW4uY29uZi0xLTEgICAgICAgICAgICAgICAgICAjIDEgQ1BVIDEgZGV2IAorcGt0Z2VuLmNvbmYtMS0yICAgICAgICAgICAgICAgICAgIyAxIENQVSAyIGRldgorcGt0Z2VuLmNvbmYtMi0xICAgICAgICAgICAgICAgICAgIyAyIENQVSdzIDEgZGV2IAorcGt0Z2VuLmNvbmYtMi0yICAgICAgICAgICAgICAgICAgIyAyIENQVSdzIDIgZGV2Citwa3RnZW4uY29uZi0xLTEtcmRvcyAgICAgICAgICAgICAjIDEgQ1BVIDEgZGV2IHcuIHJvdXRlIERvUyAKK3BrdGdlbi5jb25mLTEtMS1pcDYgICAgICAgICAgICAgICMgMSBDUFUgMSBkZXYgaXB2NgorcGt0Z2VuLmNvbmYtMS0xLWlwNi1yZG9zICAgICAgICAgIyAxIENQVSAxIGRldiBpcHY2ICB3LiByb3V0ZSBEb1MKK3BrdGdlbi5jb25mLTEtMS1mbG93cyAgICAgICAgICAgICMgMSBDUFUgMSBkZXYgbXVsdGlwbGUgZmxvd3MuCisKK1J1biBpbiBzaGVsbDogLi9wa3RnZW4uY29uZi1YLVkgSXQgZG9lcyBhbGwgdGhlIHNldHVwIGluY2x1ZGluZyBzZW5kaW5nLiAKKworCitJbnRlcnJ1cHQgYWZmaW5pdHkKKz09PT09PT09PT09PT09PT09PT0KK05vdGUgd2hlbiBhZGRpbmcgZGV2aWNlcyB0byBhIHNwZWNpZmljIENQVSB0aGVyZSBnb29kIGlkZWEgdG8gYWxzbyBhc3NpZ24gCisvcHJvYy9pcnEvWFgvc21wX2FmZmluaXR5IHNvIHRoZSBUWC1pbnRlcnJ1cHRzIGdldHMgYm91bmQgdG8gdGhlIHNhbWUgQ1BVLgorYXMgdGhpcyByZWR1Y2VzIGNhY2hlIGJvdW5jaW5nIHdoZW4gZnJlZWluZyBza2Incy4KKworCitDdXJyZW50IGNvbW1hbmRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqKiBQZ2NvbnRyb2wgY29tbWFuZHM6CisKK3N0YXJ0CitzdG9wCisKKyoqIFRocmVhZCBjb21tYW5kczoKKworYWRkX2RldmljZQorcmVtX2RldmljZV9hbGwKK21heF9iZWZvcmVfc29mdGlycQorCisKKyoqIERldmljZSBjb21tYW5kczoKKworY291bnQKK2Nsb25lX3NrYgorZGVidWcKKworZnJhZ3MKK2RlbGF5CisKK3NyY19tYWNfY291bnQKK2RzdF9tYWNfY291bnQKKworcGt0X3NpemUgCittaW5fcGt0X3NpemUKK21heF9wa3Rfc2l6ZQorCit1ZHBfc3JjX21pbgordWRwX3NyY19tYXgKKwordWRwX2RzdF9taW4KK3VkcF9kc3RfbWF4CisKK2ZsYWcKKyAgSVBTUkNfUk5ECisgIFRYU0laRV9STkQKKyAgSVBEU1RfUk5ECisgIFVEUFNSQ19STkQKKyAgVURQRFNUX1JORAorICBNQUNTUkNfUk5ECisgIE1BQ0RTVF9STkQKKworZHN0X21pbgorZHN0X21heAorCitzcmNfbWluCitzcmNfbWF4CisKK2RzdF9tYWMKK3NyY19tYWMKKworY2xlYXJfY291bnRlcnMKKworZHN0Ngorc3JjNgorCitmbG93cworZmxvd2xlbgorCitSZWZlcmVuY2VzOgorZnRwOi8vcm9idXIuc2x1LnNlL3B1Yi9MaW51eC9uZXQtZGV2ZWxvcG1lbnQvcGt0Z2VuLXRlc3RpbmcvCitmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9wa3RnZW4tdGVzdGluZy9leGFtcGxlcy8KKworUGFwZXIgZnJvbSBMaW51eC1Lb25ncmVzcyBpbiBFcmxhbmdlbiAyMDA0LgorZnRwOi8vcm9idXIuc2x1LnNlL3B1Yi9MaW51eC9uZXQtZGV2ZWxvcG1lbnQvcGt0Z2VuLXRlc3RpbmcvcGt0Z2VuX3BhcGVyLnBkZgorCitUaGFua3MgdG86CitHcmFudCBHcnVuZGxlciBmb3IgdGVzdGluZyBvbiBJQS02NCBhbmQgcGFyaXNjLCBIYXJhbGQgV2VsdGUsICBMZW5uZXJ0IEJ1eXRlbmhlaworU3RlcGhlbiBIZW1taW5nZXIsIEFuZGkgS2xlZW4sIERhdmUgTWlsbGVyIGFuZCBtYW55IG90aGVycy4KKworCitHb29kIGx1Y2sgd2l0aCB0aGUgbGludXggbmV0LWRldmVsb3BtZW50LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wb2xpY3ktcm91dGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcG9saWN5LXJvdXRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjY5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcG9saWN5LXJvdXRpbmcudHh0CkBAIC0wLDAgKzEsMTUwIEBACitDbGFzc2VzCistLS0tLS0tCisKKwkiQ2xhc3MiIGlzIGEgY29tcGxldGUgcm91dGluZyB0YWJsZSBpbiBjb21tb24gc2Vuc2UuCisJSS5lLiBpdCBpcyB0cmVlIG9mIG5vZGVzIChkZXN0aW5hdGlvbiBwcmVmaXgsIHRvcywgbWV0cmljKQorCXdpdGggYXR0YWNoZWQgaW5mb3JtYXRpb246IGdhdGV3YXksIGRldmljZSBldGMuCisJVGhpcyB0cmVlIGlzIGxvb2tlZCB1cCBhcyBzcGVjaWZpZWQgaW4gUkZDMTgxMiA1LjIuNC4zCisJMS4gQmFzaWMgbWF0Y2gKKwkyLiBMb25nZXN0IG1hdGNoCisJMy4gV2VhayBUT1MuCisJNC4gTWV0cmljLiAoc2hvdWxkIG5vdCBiZSBpbiBrZXJuZWwgc3BhY2UsIGJ1dCB0aGV5IGFyZSkKKwk1LiBBZGRpdGlvbmFsIHBydW5pbmcgcnVsZXMuIChub3QgaW4ga2VybmVsIHNwYWNlKS4KKwkKKwlXZSBoYXZlIHR3byBzcGVjaWFsIHR5cGUgb2Ygbm9kZXM6CisJUkVKRUNUIC0gYWJvcnQgcm91dGUgbG9va3VwIGFuZCByZXR1cm4gYW4gZXJyb3IgdmFsdWUuCisJVEhST1cgIC0gYWJvcnQgcm91dGUgbG9va3VwIGluIHRoaXMgY2xhc3MuCisKKworCUN1cnJlbnRseSB0aGUgbnVtYmVyIG9mIGNsYXNzZXMgaXMgbGltaXRlZCB0byAyNTUKKwkoMCBpcyByZXNlcnZlZCBmb3IgIm5vdCBzcGVjaWZpZWQgY2xhc3MiKQorCisJVGhyZWUgY2xhc3NlcyBhcmUgYnVpbHRpbjoKKworCVJUX0NMQVNTX0xPQ0FMPTI1NSAtIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzZXMsCisJYnJvYWRjYXN0cywgbmF0IGFkZHJlc3Nlcy4KKworCVJUX0NMQVNTX01BSU49MjU0ICAtIGFsbCBub3JtYWwgcm91dGVzIGFyZSBwdXQgdGhlcmUKKwlieSBkZWZhdWx0LgorCisJUlRfQ0xBU1NfREVGQVVMVD0yNTMgLSBpZiBpcF9maWJfbW9kZWw9PTEsIHRoZW4KKwlub3JtYWwgZGVmYXVsdCByb3V0ZXMgYXJlIHB1dCB0aGVyZSwgaWYgaXBfZmliX21vZGVsPT0yCisJYWxsIGdhdGV3YXkgcm91dGVzIGFyZSBwdXQgdGhlcmUuCisKKworUnVsZXMKKy0tLS0tCisJUnVsZSBpcyBhIHJlY29yZCBvZiAoc3JjIHByZWZpeCwgc3JjIGludGVyZmFjZSwgdG9zLCBkc3QgcHJlZml4KQorCXdpdGggYXR0YWNoZWQgaW5mb3JtYXRpb24uCisKKwlSdWxlIHR5cGVzOgorCVJUUF9ST1VURSAtIGxvb2t1cCBpbiBhdHRhY2hlZCBjbGFzcworCVJUUF9OQVQgICAtIGxvb2t1cCBpbiBhdHRhY2hlZCBjbGFzcyBhbmQgaWYgYSBtYXRjaCBpcyBmb3VuZCwKKwkJICAgIHRyYW5zbGF0ZSBwYWNrZXQgc291cmNlIGFkZHJlc3MuCisJUlRQX01BU1FVRVJBREUgLSBsb29rdXAgaW4gYXR0YWNoZWQgY2xhc3MgYW5kIGlmIGEgbWF0Y2ggaXMgZm91bmQsCisJCSAgICBtYXNxdWVyYWRlIHBhY2tldCBhcyBzb3VyY2VkIGJ5IHVzLgorCVJUUF9EUk9QICAgLSBzaWxlbnRseSBkcm9wIHRoZSBwYWNrZXQuCisJUlRQX1JFSkVDVCAtIGRyb3AgdGhlIHBhY2tldCBhbmQgc2VuZCBJQ01QIE5FVCBVTlJFQUNIQUJMRS4KKwlSVFBfUFJPSElCSVQgLSBkcm9wIHRoZSBwYWNrZXQgYW5kIHNlbmQgSUNNUCBDT01NLiBBRE0uIFBST0hJQklURUQuCisKKwlSdWxlIGZsYWdzOgorCVJUUkZfTE9HIC0gbG9nIHJvdXRlIGNyZWF0aW9ucy4KKwlSVFJGX1ZBTFZFIC0gT25lIHdheSByb3V0ZSAodXNlZCB3aXRoIG1hc3F1ZXJhZGluZykKKworRGVmYXVsdCBzZXR1cDoKKworcm9vdEBhbWJlcjovcHViL2lwLXJvdXRpbmcgIyBpcHJvdXRlIC1yCitLZXJuZWwgcm91dGluZyBwb2xpY3kgcnVsZXMKK1ByZWYgU291cmNlICAgICAgICAgICAgIERlc3RpbmF0aW9uICAgICAgICBUT1MgSWZhY2UgICBDbAorICAgMCBkZWZhdWx0ICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDAwICAqICAgICAgIDI1NQorIDI1NCBkZWZhdWx0ICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDAwICAqICAgICAgIDI1NAorIDI1NSBkZWZhdWx0ICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDAwICAqICAgICAgIDI1MworCisKK0xvb2t1cCBhbGdvcml0aG0KKy0tLS0tLS0tLS0tLS0tLS0KKworCVdlIHNjYW4gcnVsZXMgbGlzdCwgYW5kIGlmIGEgcnVsZSBpcyBtYXRjaGVkLCBhcHBseSBpdC4KKwlJZiBhIHJvdXRlIGlzIGZvdW5kLCByZXR1cm4gaXQuCisJSWYgaXQgaXMgbm90IGZvdW5kIG9yIGEgVEhST1cgbm9kZSB3YXMgbWF0Y2hlZCwgY29udGludWUKKwl0byBzY2FuIHJ1bGVzLgorCitBcHBsaWNhdGlvbnMKKy0tLS0tLS0tLS0tLQorCisxLglKdXN0IGlnbm9yZSBjbGFzc2VzLiBBbGwgdGhlIHJvdXRlcyBhcmUgcHV0IGludG8gTUFJTiBjbGFzcworCShhbmQvb3IgaW50byBERUZBVUxUIGNsYXNzKS4KKworCUhPV1RPOiAgaXByb3V0ZSBhZGQgUFJFRklYIFsgdG9zIFRPUyBdIFsgZ3cgR1cgXSBbIGRldiBERVYgXQorCQlbIG1ldHJpYyBNRVRSSUMgXSBbIHJlamVjdCBdIC4uLiAobG9vayBhdCBpcHJvdXRlIHV0aWxpdHkpCisKKwkJb3IgdXNlIHJvdXRlIHV0aWxpdHkgZnJvbSBjdXJyZW50IG5ldC10b29scy4KKwkJCisyLglPcHBvc2l0ZSBjYXNlLiBKdXN0IGZvcmdldCBhbGwgdGhhdCB5b3Uga25vdyBhYm91dCByb3V0aW5nCisJdGFibGVzLiBFdmVyeSBydWxlIGlzIHN1cHBsaWVkIHdpdGggaXRzIG93biBnYXRld2F5LCBkZXZpY2UKKwlpbmZvLiByZWNvcmQuIFRoaXMgYXBwcm9hY2ggaXMgbm90IGFwcHJvcHJpYXRlIGZvciBhdXRvbWF0ZWQKKwlyb3V0ZSBtYWludGVuYW5jZSwgYnV0IGl0IGlzIGlkZWFsIGZvciBtYW51YWwgY29uZmlndXJhdGlvbi4KKworCUhPV1RPOiAgaXByb3V0ZSBhZGRydWxlIFsgZnJvbSBQUkVGSVggXSBbIHRvIFBSRUZJWCBdIFsgdG9zIFRPUyBdCisJCVsgZGV2IElOUFVUREVWXSBbIHByZWYgUFJFRkVSRU5DRSBdIHJvdXRlIFsgZ3cgR0FURVdBWSBdCisJCVsgZGV2IE9VVERFViBdIC4uLi4uCisKKwlXYXJuaW5nOiBBcyBvZiBub3cgdGhlIHNpemUgb2YgdGhlIHJvdXRpbmcgdGFibGUgaW4gdGhpcworCWFwcHJvYWNoIGlzIGxpbWl0ZWQgdG8gMjU2LiBJZiBzb21lb25lIGxpa2VzIHRoaXMgbW9kZWwsIEknbGwKKwlyZWxheCB0aGlzIGxpbWl0YXRpb24uCisKKzMuCU9TUEYgY2xhc3NlcyAoc2VlIFJGQzE1ODMsIFJGQzE4MTIgRS4zLjMpCisJVmVyeSBjbGVhbiwgc3RhYmxlIGFuZCByb2J1c3QgYWxnb3JpdGhtIGZvciBPU1BGIHJvdXRpbmcKKwlkb21haW5zLiBVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3Qgd2lkZWx5IHVzZWQgaW4gdGhlIEludGVybmV0LgorCisJUHJvcG9zZWQgc2V0dXA6CisJMjU1IGxvY2FsIGFkZHJlc3NlcworCTI1NCBpbnRlcmZhY2Ugcm91dGVzCisJMjUzIEFTRSByb3V0ZXMgd2l0aCBleHRlcm5hbCBtZXRyaWMKKwkyNTIgQVNFIHJvdXRlcyB3aXRoIGludGVybmFsIG1ldHJpYworCTI1MSBpbnRlci1hcmVhIHJvdXRlcworCTI1MCBpbnRyYS1hcmVhIHJvdXRlcyBmb3IgMXN0IGFyZWEKKwkyNDkgaW50cmEtYXJlYSByb3V0ZXMgZm9yIDJuZCBhcmVhCisJZXRjLgorCQorCVJ1bGVzOgorCWlwcm91dGUgYWRkcnVsZSBjbGFzcyAyNTMKKwlpcHJvdXRlIGFkZHJ1bGUgY2xhc3MgMjUyCisJaXByb3V0ZSBhZGRydWxlIGNsYXNzIDI1MQorCWlwcm91dGUgYWRkcnVsZSB0byBhLXByZWZpeC1mb3ItMXN0LWFyZWEgY2xhc3MgMjUwCisJaXByb3V0ZSBhZGRydWxlIHRvIGFub3RoZXItcHJlZml4LWZvci0xc3QtYXJlYSBjbGFzcyAyNTAKKwkuLi4KKwlpcHJvdXRlIGFkZHJ1bGUgdG8gYS1wcmVmaXgtZm9yLTJuZC1hcmVhIGNsYXNzIDI0OQorCS4uLgorCisJQXJlYSBjbGFzc2VzIG11c3QgYmUgdGVybWluYXRlZCB3aXRoIHJlamVjdCByZWNvcmQuCisJaXByb3V0ZSBhZGQgZGVmYXVsdCByZWplY3QgY2xhc3MgMjUwCisJaXByb3V0ZSBhZGQgZGVmYXVsdCByZWplY3QgY2xhc3MgMjQ5CisJLi4uCisKKzQuCVRoZSBWYXJpYW50IFJvdXRlciBSZXF1aXJlbWVudHMgQWxnb3JpdGhtIChSRkMxODEyIEUuMy4yKQorCUNyZWF0ZSAxNiBjbGFzc2VzIGZvciBkaWZmZXJlbnQgVE9TIHZhbHVlcy4KKwlJdCBpcyBhIGZ1bm55LCBidXQgcHJldHR5IHVzZWxlc3MgYWxnb3JpdGhtLgorCUkgbGlzdGVkIGl0IGp1c3QgdG8gc2hvdyB0aGUgcG93ZXIgb2YgbmV3IHJvdXRpbmcgY29kZS4KKworNS4JQWxsIHRoZSB2YXJpZXR5IG9mIGNvbWJpbmF0aW9ucy4uLi4uLgorCisKK0dBVEVECistLS0tLQorCisJR2F0ZWQgZG9lcyBub3QgdW5kZXJzdGFuZCBjbGFzc2VzLCBidXQgaXQgd2lsbCB3b3JrCisJaGFwcGlseSBpbiBNQUlOK0RFRkFVTFQuIEFsbCBwb2xpY3kgcm91dGVzIGNhbiBiZSBzZXQKKwlhbmQgbWFpbnRhaW5lZCBtYW51YWxseS4KKworSU1QT1JUQU5UIE5PVEUKKy0tLS0tLS0tLS0tLS0tCisJcm91dGUuYyBoYXMgYSBjb21waWxhdGlvbiB0aW1lIHN3aXRjaCBDT05GSUdfSVBfTE9DQUxfUlRfUE9MSUNZLgorCUlmIGl0IGlzIHNldCwgbG9jYWxseSBvcmlnaW5hdGVkIHBhY2tldHMgYXJlIHJvdXRlZAorCXVzaW5nIGFsbCB0aGUgcG9saWN5IGxpc3QuIFRoaXMgaXMgbm90IHZlcnkgY29udmVuaWVudCBhbmQKKwlwcmV0dHkgYW1iaWd1b3VzIHdoZW4gdXNlZCB3aXRoIE5BVCBhbmQgbWFzcXVlcmFkaW5nLgorCUkgc2V0IGl0IHRvIEZBTFNFIGJ5IGRlZmF1bHQuCisKKworQWxleGV5IEt1em5ldG92CitrdXpuZXRAbXMyLmluci5hYy5ydQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViNTE3MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy50eHQKQEAgLTAsMCArMSw0MzIgQEAKKwkJUFBQIEdlbmVyaWMgRHJpdmVyIGFuZCBDaGFubmVsIEludGVyZmFjZQorCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJCSAgICBQYXVsIE1hY2tlcnJhcworCQkJICAgcGF1bHVzQHNhbWJhLm9yZworCQkJICAgICAgNyBGZWIgMjAwMgorCitUaGUgZ2VuZXJpYyBQUFAgZHJpdmVyIGluIGxpbnV4LTIuNCBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKK2Z1bmN0aW9uYWxpdHkgd2hpY2ggaXMgb2YgdXNlIGluIGFueSBQUFAgaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZzoKKworKiB0aGUgbmV0d29yayBpbnRlcmZhY2UgdW5pdCAocHBwMCBldGMuKQorKiB0aGUgaW50ZXJmYWNlIHRvIHRoZSBuZXR3b3JraW5nIGNvZGUKKyogUFBQIG11bHRpbGluazogc3BsaXR0aW5nIGRhdGFncmFtcyBiZXR3ZWVuIG11bHRpcGxlIGxpbmtzLCBhbmQKKyAgb3JkZXJpbmcgYW5kIGNvbWJpbmluZyByZWNlaXZlZCBmcmFnbWVudHMKKyogdGhlIGludGVyZmFjZSB0byBwcHBkLCB2aWEgYSAvZGV2L3BwcCBjaGFyYWN0ZXIgZGV2aWNlCisqIHBhY2tldCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgorKiBUQ1AvSVAgaGVhZGVyIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCisqIGRldGVjdGluZyBuZXR3b3JrIHRyYWZmaWMgZm9yIGRlbWFuZCBkaWFsbGluZyBhbmQgZm9yIGlkbGUgdGltZW91dHMKKyogc2ltcGxlIHBhY2tldCBmaWx0ZXJpbmcKKworRm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBQUFAgZnJhbWVzLCB0aGUgZ2VuZXJpYyBQUFAgZHJpdmVyIGNhbGxzIG9uCit0aGUgc2VydmljZXMgb2YgUFBQIGBjaGFubmVscycuICBBIFBQUCBjaGFubmVsIGVuY2Fwc3VsYXRlcyBhCittZWNoYW5pc20gZm9yIHRyYW5zcG9ydGluZyBQUFAgZnJhbWVzIGZyb20gb25lIG1hY2hpbmUgdG8gYW5vdGhlci4gIEEKK1BQUCBjaGFubmVsIGltcGxlbWVudGF0aW9uIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4IGludGVybmFsbHkgYnV0CitoYXMgYSB2ZXJ5IHNpbXBsZSBpbnRlcmZhY2Ugd2l0aCB0aGUgZ2VuZXJpYyBQUFAgY29kZTogaXQgbWVyZWx5IGhhcwordG8gYmUgYWJsZSB0byBzZW5kIFBQUCBmcmFtZXMsIHJlY2VpdmUgUFBQIGZyYW1lcywgYW5kIG9wdGlvbmFsbHkKK2hhbmRsZSBpb2N0bCByZXF1ZXN0cy4gIEN1cnJlbnRseSB0aGVyZSBhcmUgUFBQIGNoYW5uZWwKK2ltcGxlbWVudGF0aW9ucyBmb3IgYXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0cywgc3luY2hyb25vdXMgc2VyaWFsCitwb3J0cywgYW5kIGZvciBQUFAgb3ZlciBldGhlcm5ldC4KKworVGhpcyBhcmNoaXRlY3R1cmUgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IFBQUCBtdWx0aWxpbmsgaW4gYQorbmF0dXJhbCBhbmQgc3RyYWlnaHRmb3J3YXJkIHdheSwgYnkgYWxsb3dpbmcgbW9yZSB0aGFuIG9uZSBjaGFubmVsIHRvCitiZSBsaW5rZWQgdG8gZWFjaCBwcHAgbmV0d29yayBpbnRlcmZhY2UgdW5pdC4gIFRoZSBnZW5lcmljIGxheWVyIGlzCityZXNwb25zaWJsZSBmb3Igc3BsaXR0aW5nIGRhdGFncmFtcyBvbiB0cmFuc21pdCBhbmQgcmVjb21iaW5pbmcgdGhlbQorb24gcmVjZWl2ZS4KKworCitQUFAgY2hhbm5lbCBBUEkKKy0tLS0tLS0tLS0tLS0tLQorCitTZWUgaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGZvciB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHR5cGVzIGFuZAorZnVuY3Rpb25zIHVzZWQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIgYW5kIFBQUAorY2hhbm5lbHMuCisKK0VhY2ggY2hhbm5lbCBoYXMgdG8gcHJvdmlkZSB0d28gZnVuY3Rpb25zIHRvIHRoZSBnZW5lcmljIFBQUCBsYXllciwKK3ZpYSB0aGUgcHBwX2NoYW5uZWwub3BzIHBvaW50ZXI6CisKKyogc3RhcnRfeG1pdCgpIGlzIGNhbGxlZCBieSB0aGUgZ2VuZXJpYyBsYXllciB3aGVuIGl0IGhhcyBhIGZyYW1lIHRvCisgIHNlbmQuICBUaGUgY2hhbm5lbCBoYXMgdGhlIG9wdGlvbiBvZiByZWplY3RpbmcgdGhlIGZyYW1lIGZvcgorICBmbG93LWNvbnRyb2wgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgc3RhcnRfeG1pdCgpIHNob3VsZCByZXR1cm4gMAorICBhbmQgdGhlIGNoYW5uZWwgc2hvdWxkIGNhbGwgdGhlIHBwcF9vdXRwdXRfd2FrZXVwKCkgZnVuY3Rpb24gYXQgYQorICBsYXRlciB0aW1lIHdoZW4gaXQgY2FuIGFjY2VwdCBmcmFtZXMgYWdhaW4sIGFuZCB0aGUgZ2VuZXJpYyBsYXllcgorICB3aWxsIHRoZW4gYXR0ZW1wdCB0byByZXRyYW5zbWl0IHRoZSByZWplY3RlZCBmcmFtZShzKS4gIElmIHRoZSBmcmFtZQorICBpcyBhY2NlcHRlZCwgdGhlIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIDEuCisKKyogaW9jdGwoKSBwcm92aWRlcyBhbiBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB1c2VyLXNwYWNlCisgIHByb2dyYW0gdG8gY29udHJvbCBhc3BlY3RzIG9mIHRoZSBjaGFubmVsJ3MgYmVoYXZpb3VyLiAgVGhpcworICBwcm9jZWR1cmUgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHVzZXItc3BhY2UgcHJvZ3JhbSBkb2VzIGFuIGlvY3RsCisgIHN5c3RlbSBjYWxsIG9uIGFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIHdoaWNoIGlzIGJvdW5kIHRvIHRoZQorICBjaGFubmVsLiAgKFVzdWFsbHkgaXQgd291bGQgb25seSBiZSBwcHBkIHdoaWNoIHdvdWxkIGRvIHRoaXMuKQorCitUaGUgZ2VuZXJpYyBQUFAgbGF5ZXIgcHJvdmlkZXMgc2V2ZW4gZnVuY3Rpb25zIHRvIGNoYW5uZWxzOgorCisqIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIHdoZW4gYSBjaGFubmVsIGhhcyBiZWVuIGNyZWF0ZWQsIHRvCisgIG5vdGlmeSB0aGUgUFBQIGdlbmVyaWMgbGF5ZXIgb2YgaXRzIHByZXNlbmNlLiAgRm9yIGV4YW1wbGUsIHNldHRpbmcKKyAgYSBzZXJpYWwgcG9ydCB0byB0aGUgUFBQRElTQyBsaW5lIGRpc2NpcGxpbmUgY2F1c2VzIHRoZSBwcHBfYXN5bmMKKyAgY2hhbm5lbCBjb2RlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4KKworKiBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIHdoZW4gYSBjaGFubmVsIGlzIHRvIGJlCisgIGRlc3Ryb3llZC4gIEZvciBleGFtcGxlLCB0aGUgcHBwX2FzeW5jIGNoYW5uZWwgY29kZSBjYWxscyB0aGlzIHdoZW4KKyAgYSBoYW5ndXAgaXMgZGV0ZWN0ZWQgb24gdGhlIHNlcmlhbCBwb3J0LgorCisqIHBwcF9vdXRwdXRfd2FrZXVwKCkgaXMgY2FsbGVkIGJ5IGEgY2hhbm5lbCB3aGVuIGl0IGhhcyBwcmV2aW91c2x5CisgIHJlamVjdGVkIGEgY2FsbCB0byBpdHMgc3RhcnRfeG1pdCBmdW5jdGlvbiwgYW5kIGNhbiBub3cgYWNjZXB0IG1vcmUKKyAgcGFja2V0cy4KKworKiBwcHBfaW5wdXQoKSBpcyBjYWxsZWQgYnkgYSBjaGFubmVsIHdoZW4gaXQgaGFzIHJlY2VpdmVkIGEgY29tcGxldGUKKyAgUFBQIGZyYW1lLgorCisqIHBwcF9pbnB1dF9lcnJvcigpIGlzIGNhbGxlZCBieSBhIGNoYW5uZWwgd2hlbiBpdCBoYXMgZGV0ZWN0ZWQgdGhhdCBhCisgIGZyYW1lIGhhcyBiZWVuIGxvc3Qgb3IgZHJvcHBlZCAoZm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2YgYSBGQ1MgKGZyYW1lCisgIGNoZWNrIHNlcXVlbmNlKSBlcnJvcikuCisKKyogcHBwX2NoYW5uZWxfaW5kZXgoKSByZXR1cm5zIHRoZSBjaGFubmVsIGluZGV4IGFzc2lnbmVkIGJ5IHRoZSBQUFAKKyAgZ2VuZXJpYyBsYXllciB0byB0aGlzIGNoYW5uZWwuICBUaGUgY2hhbm5lbCBzaG91bGQgcHJvdmlkZSBzb21lIHdheQorICAoZS5nLiBhbiBpb2N0bCkgdG8gdHJhbnNtaXQgdGhpcyBiYWNrIHRvIHVzZXItc3BhY2UsIGFzIHVzZXItc3BhY2UKKyAgd2lsbCBuZWVkIGl0IHRvIGF0dGFjaCBhbiBpbnN0YW5jZSBvZiAvZGV2L3BwcCB0byB0aGlzIGNoYW5uZWwuCisKKyogcHBwX3VuaXRfbnVtYmVyKCkgcmV0dXJucyB0aGUgdW5pdCBudW1iZXIgb2YgdGhlIHBwcCBuZXR3b3JrCisgIGludGVyZmFjZSB0byB3aGljaCB0aGlzIGNoYW5uZWwgaXMgY29ubmVjdGVkLCBvciAtMSBpZiB0aGUgY2hhbm5lbAorICBpcyBub3QgY29ubmVjdGVkLgorCitDb25uZWN0aW5nIGEgY2hhbm5lbCB0byB0aGUgcHBwIGdlbmVyaWMgbGF5ZXIgaXMgaW5pdGlhdGVkIGZyb20gdGhlCitjaGFubmVsIGNvZGUsIHJhdGhlciB0aGFuIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIuICBUaGUgY2hhbm5lbCBpcworZXhwZWN0ZWQgdG8gaGF2ZSBzb21lIHdheSBmb3IgYSB1c2VyLWxldmVsIHByb2Nlc3MgdG8gY29udHJvbCBpdAoraW5kZXBlbmRlbnRseSBvZiB0aGUgcHBwIGdlbmVyaWMgbGF5ZXIuICBGb3IgZXhhbXBsZSwgd2l0aCB0aGUKK3BwcF9hc3luYyBjaGFubmVsLCB0aGlzIGlzIHByb3ZpZGVkIGJ5IHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gdGhlCitzZXJpYWwgcG9ydC4KKworR2VuZXJhbGx5IGEgdXNlci1sZXZlbCBwcm9jZXNzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgdW5kZXJseWluZworY29tbXVuaWNhdGlvbnMgbWVkaXVtIGFuZCBwcmVwYXJlIGl0IHRvIGRvIFBQUC4gIEZvciBleGFtcGxlLCB3aXRoIGFuCithc3luYyB0dHksIHRoaXMgY2FuIGludm9sdmUgc2V0dGluZyB0aGUgdHR5IHNwZWVkIGFuZCBtb2RlcywgaXNzdWluZworbW9kZW0gY29tbWFuZHMsIGFuZCB0aGVuIGdvaW5nIHRocm91Z2ggc29tZSBzb3J0IG9mIGRpYWxvZyB3aXRoIHRoZQorcmVtb3RlIHN5c3RlbSB0byBpbnZva2UgUFBQIHNlcnZpY2UgdGhlcmUuICBXZSByZWZlciB0byB0aGlzIHByb2Nlc3MKK2FzIGBkaXNjb3ZlcnknLiAgVGhlbiB0aGUgdXNlci1sZXZlbCBwcm9jZXNzIHRlbGxzIHRoZSBtZWRpdW0gdG8KK2JlY29tZSBhIFBQUCBjaGFubmVsIGFuZCByZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIuCitUaGUgY2hhbm5lbCB0aGVuIGhhcyB0byByZXBvcnQgdGhlIGNoYW5uZWwgbnVtYmVyIGFzc2lnbmVkIHRvIGl0IGJhY2sKK3RvIHRoZSB1c2VyLWxldmVsIHByb2Nlc3MuICBGcm9tIHRoYXQgcG9pbnQsIHRoZSBQUFAgbmVnb3RpYXRpb24gY29kZQoraW4gdGhlIFBQUCBkYWVtb24gKHBwcGQpIGNhbiB0YWtlIG92ZXIgYW5kIHBlcmZvcm0gdGhlIFBQUAorbmVnb3RpYXRpb24sIGFjY2Vzc2luZyB0aGUgY2hhbm5lbCB0aHJvdWdoIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UuCisKK0F0IHRoZSBpbnRlcmZhY2UgdG8gdGhlIFBQUCBnZW5lcmljIGxheWVyLCBQUFAgZnJhbWVzIGFyZSBzdG9yZWQgaW4KK3NrYnVmZiBzdHJ1Y3R1cmVzIGFuZCBzdGFydCB3aXRoIHRoZSB0d28tYnl0ZSBQUFAgcHJvdG9jb2wgbnVtYmVyLgorVGhlIGZyYW1lIGRvZXMgKm5vdCogaW5jbHVkZSB0aGUgMHhmZiBgYWRkcmVzcycgYnl0ZSBvciB0aGUgMHgwMworYGNvbnRyb2wnIGJ5dGUgdGhhdCBhcmUgb3B0aW9uYWxseSB1c2VkIGluIGFzeW5jIFBQUC4gIE5vciBpcyB0aGVyZQorYW55IGVzY2FwaW5nIG9mIGNvbnRyb2wgY2hhcmFjdGVycywgbm9yIGFyZSB0aGVyZSBhbnkgRkNTIG9yIGZyYW1pbmcKK2NoYXJhY3RlcnMgaW5jbHVkZWQuICBUaGF0IGlzIGFsbCB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNoYW5uZWwKK2NvZGUsIGlmIGl0IGlzIG5lZWRlZCBmb3IgdGhlIHBhcnRpY3VsYXIgbWVkaXVtLiAgVGhhdCBpcywgdGhlIHNrYnVmZnMKK3ByZXNlbnRlZCB0byB0aGUgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIGNvbnRhaW4gb25seSB0aGUgMi1ieXRlCitwcm90b2NvbCBudW1iZXIgYW5kIHRoZSBkYXRhLCBhbmQgdGhlIHNrYnVmZnMgcHJlc2VudGVkIHRvIHBwcF9pbnB1dCgpCittdXN0IGJlIGluIHRoZSBzYW1lIGZvcm1hdC4KKworVGhlIGNoYW5uZWwgbXVzdCBwcm92aWRlIGFuIGluc3RhbmNlIG9mIGEgcHBwX2NoYW5uZWwgc3RydWN0IHRvCityZXByZXNlbnQgdGhlIGNoYW5uZWwuICBUaGUgY2hhbm5lbCBpcyBmcmVlIHRvIHVzZSB0aGUgYHByaXZhdGUnIGZpZWxkCitob3dldmVyIGl0IHdpc2hlcy4gIFRoZSBjaGFubmVsIHNob3VsZCBpbml0aWFsaXplIHRoZSBgbXR1JyBhbmQKK2BoZHJsZW4nIGZpZWxkcyBiZWZvcmUgY2FsbGluZyBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgpIGFuZCBub3QgY2hhbmdlCit0aGVtIHVudGlsIGFmdGVyIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSByZXR1cm5zLiAgVGhlIGBtdHUnIGZpZWxkCityZXByZXNlbnRzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGRhdGEgcGFydCBvZiB0aGUgUFBQIGZyYW1lcywgdGhhdAoraXMsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIDItYnl0ZSBwcm90b2NvbCBudW1iZXIuCisKK0lmIHRoZSBjaGFubmVsIG5lZWRzIHNvbWUgaGVhZHJvb20gaW4gdGhlIHNrYnVmZnMgcHJlc2VudGVkIHRvIGl0IGZvcgordHJhbnNtaXNzaW9uIChpLmUuLCBzb21lIHNwYWNlIGZyZWUgaW4gdGhlIHNrYnVmZiBkYXRhIGFyZWEgYmVmb3JlIHRoZQorc3RhcnQgb2YgdGhlIFBQUCBmcmFtZSksIGl0IHNob3VsZCBzZXQgdGhlIGBoZHJsZW4nIGZpZWxkIG9mIHRoZQorcHBwX2NoYW5uZWwgc3RydWN0IHRvIHRoZSBhbW91bnQgb2YgaGVhZHJvb20gcmVxdWlyZWQuICBUaGUgZ2VuZXJpYworUFBQIGxheWVyIHdpbGwgYXR0ZW1wdCB0byBwcm92aWRlIHRoYXQgbXVjaCBoZWFkcm9vbSBidXQgdGhlIGNoYW5uZWwKK3Nob3VsZCBzdGlsbCBjaGVjayBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IGhlYWRyb29tIGFuZCBjb3B5IHRoZSBza2J1ZmYKK2lmIHRoZXJlIGlzbid0LgorCitPbiB0aGUgaW5wdXQgc2lkZSwgY2hhbm5lbHMgc2hvdWxkIGlkZWFsbHkgcHJvdmlkZSBhdCBsZWFzdCAyIGJ5dGVzIG9mCitoZWFkcm9vbSBpbiB0aGUgc2tidWZmcyBwcmVzZW50ZWQgdG8gcHBwX2lucHV0KCkuICBUaGUgZ2VuZXJpYyBQUFAKK2NvZGUgZG9lcyBub3QgcmVxdWlyZSB0aGlzIGJ1dCB3aWxsIGJlIG1vcmUgZWZmaWNpZW50IGlmIHRoaXMgaXMgZG9uZS4KKworCitCdWZmZXJpbmcgYW5kIGZsb3cgY29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGdlbmVyaWMgUFBQIGxheWVyIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZGF0YQordGhhdCBpdCBidWZmZXJzIGluIHRoZSB0cmFuc21pdCBkaXJlY3Rpb24uICBJdCBtYWludGFpbnMgYSBxdWV1ZSBvZgordHJhbnNtaXQgcGFja2V0cyBmb3IgdGhlIFBQUCB1bml0IChuZXR3b3JrIGludGVyZmFjZSBkZXZpY2UpIHBsdXMgYQorcXVldWUgb2YgdHJhbnNtaXQgcGFja2V0cyBmb3IgZWFjaCBhdHRhY2hlZCBjaGFubmVsLiAgTm9ybWFsbHkgdGhlCit0cmFuc21pdCBxdWV1ZSBmb3IgdGhlIHVuaXQgd2lsbCBjb250YWluIGF0IG1vc3Qgb25lIHBhY2tldDsgdGhlCitleGNlcHRpb25zIGFyZSB3aGVuIHBwcGQgc2VuZHMgcGFja2V0cyBieSB3cml0aW5nIHRvIC9kZXYvcHBwLCBhbmQKK3doZW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIGNhbGxzIHRoZSBnZW5lcmljIGxheWVyJ3Mgc3RhcnRfeG1pdCgpCitmdW5jdGlvbiB3aXRoIHRoZSBxdWV1ZSBzdG9wcGVkLCBpLmUuIHdoZW4gdGhlIGdlbmVyaWMgbGF5ZXIgaGFzCitjYWxsZWQgbmV0aWZfc3RvcF9xdWV1ZSgpLCB3aGljaCBvbmx5IGhhcHBlbnMgb24gYSB0cmFuc21pdCB0aW1lb3V0LgorVGhlIHN0YXJ0X3htaXQgZnVuY3Rpb24gYWx3YXlzIGFjY2VwdHMgYW5kIHF1ZXVlcyB0aGUgcGFja2V0IHdoaWNoIGl0CitpcyBhc2tlZCB0byB0cmFuc21pdC4KKworVHJhbnNtaXQgcGFja2V0cyBhcmUgZGVxdWV1ZWQgZnJvbSB0aGUgUFBQIHVuaXQgdHJhbnNtaXQgcXVldWUgYW5kCit0aGVuIHN1YmplY3RlZCB0byBUQ1AvSVAgaGVhZGVyIGNvbXByZXNzaW9uIGFuZCBwYWNrZXQgY29tcHJlc3Npb24KKyhEZWZsYXRlIG9yIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiksIGFzIGFwcHJvcHJpYXRlLiAgQWZ0ZXIgdGhpcworcG9pbnQgdGhlIHBhY2tldHMgY2FuIG5vIGxvbmdlciBiZSByZW9yZGVyZWQsIGFzIHRoZSBkZWNvbXByZXNzaW9uCithbGdvcml0aG1zIHJlbHkgb24gcmVjZWl2aW5nIGNvbXByZXNzZWQgcGFja2V0cyBpbiB0aGUgc2FtZSBvcmRlciB0aGF0Cit0aGV5IHdlcmUgZ2VuZXJhdGVkLgorCitJZiBtdWx0aWxpbmsgaXMgbm90IGluIHVzZSwgdGhpcyBwYWNrZXQgaXMgdGhlbiBwYXNzZWQgdG8gdGhlIGF0dGFjaGVkCitjaGFubmVsJ3Mgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uLiAgSWYgdGhlIGNoYW5uZWwgcmVmdXNlcyB0byB0YWtlCit0aGUgcGFja2V0LCB0aGUgZ2VuZXJpYyBsYXllciBzYXZlcyBpdCBmb3IgbGF0ZXIgdHJhbnNtaXNzaW9uLiAgVGhlCitnZW5lcmljIGxheWVyIHdpbGwgY2FsbCB0aGUgY2hhbm5lbCdzIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBhZ2Fpbgord2hlbiB0aGUgY2hhbm5lbCBjYWxscyAgcHBwX291dHB1dF93YWtldXAoKSBvciB3aGVuIHRoZSBjb3JlCituZXR3b3JraW5nIGNvZGUgY2FsbHMgdGhlIGdlbmVyaWMgbGF5ZXIncyBzdGFydF94bWl0KCkgZnVuY3Rpb24KK2FnYWluLiAgVGhlIGdlbmVyaWMgbGF5ZXIgY29udGFpbnMgbm8gdGltZW91dCBhbmQgcmV0cmFuc21pc3Npb24KK2xvZ2ljOyBpdCByZWxpZXMgb24gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIGZvciB0aGF0LgorCitJZiBtdWx0aWxpbmsgaXMgaW4gdXNlLCB0aGUgZ2VuZXJpYyBsYXllciBkaXZpZGVzIHRoZSBwYWNrZXQgaW50byBvbmUKK29yIG1vcmUgZnJhZ21lbnRzIGFuZCBwdXRzIGEgbXVsdGlsaW5rIGhlYWRlciBvbiBlYWNoIGZyYWdtZW50LiAgSXQKK2RlY2lkZXMgaG93IG1hbnkgZnJhZ21lbnRzIHRvIHVzZSBiYXNlZCBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQKK2FuZCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHdoaWNoIGFyZSBwb3RlbnRpYWxseSBhYmxlIHRvIGFjY2VwdCBhCitmcmFnbWVudCBhdCB0aGUgbW9tZW50LiAgQSBjaGFubmVsIGlzIHBvdGVudGlhbGx5IGFibGUgdG8gYWNjZXB0IGEKK2ZyYWdtZW50IGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgZnJhZ21lbnRzIGN1cnJlbnRseSBxdWV1ZWQgdXAgZm9yIGl0Cit0byB0cmFuc21pdC4gIFRoZSBjaGFubmVsIG1heSBzdGlsbCByZWZ1c2UgYSBmcmFnbWVudDsgaW4gdGhpcyBjYXNlCit0aGUgZnJhZ21lbnQgaXMgcXVldWVkIHVwIGZvciB0aGUgY2hhbm5lbCB0byB0cmFuc21pdCBsYXRlci4gIFRoaXMKK3NjaGVtZSBoYXMgdGhlIGVmZmVjdCB0aGF0IG1vcmUgZnJhZ21lbnRzIGFyZSBnaXZlbiB0byBoaWdoZXItCitiYW5kd2lkdGggY2hhbm5lbHMuICBJdCBhbHNvIG1lYW5zIHRoYXQgdW5kZXIgbGlnaHQgbG9hZCwgdGhlIGdlbmVyaWMKK2xheWVyIHdpbGwgdGVuZCB0byBmcmFnbWVudCBsYXJnZSBwYWNrZXRzIGFjcm9zcyBhbGwgdGhlIGNoYW5uZWxzLAordGh1cyByZWR1Y2luZyBsYXRlbmN5LCB3aGlsZSB1bmRlciBoZWF2eSBsb2FkLCBwYWNrZXRzIHdpbGwgdGVuZCB0byBiZQordHJhbnNtaXR0ZWQgYXMgc2luZ2xlIGZyYWdtZW50cywgdGh1cyByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgb2YKK2ZyYWdtZW50YXRpb24uCisKKworU01QIHNhZmV0eQorLS0tLS0tLS0tLQorCitUaGUgUFBQIGdlbmVyaWMgbGF5ZXIgaGFzIGJlZW4gZGVzaWduZWQgdG8gYmUgU01QLXNhZmUuICBMb2NrcyBhcmUKK3VzZWQgYXJvdW5kIGFjY2Vzc2VzIHRvIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgbmVjZXNzYXJ5Cit0byBlbnN1cmUgdGhlaXIgaW50ZWdyaXR5LiAgQXMgcGFydCBvZiB0aGlzLCB0aGUgZ2VuZXJpYyBsYXllcgorcmVxdWlyZXMgdGhhdCB0aGUgY2hhbm5lbHMgYWRoZXJlIHRvIGNlcnRhaW4gcmVxdWlyZW1lbnRzIGFuZCBpbiB0dXJuCitwcm92aWRlcyBjZXJ0YWluIGd1YXJhbnRlZXMgdG8gdGhlIGNoYW5uZWxzLiAgRXNzZW50aWFsbHkgdGhlIGNoYW5uZWxzCithcmUgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgbG9ja2luZyBvbiB0aGUgcHBwX2NoYW5uZWwKK3N0cnVjdHVyZXMgdGhhdCBmb3JtIHRoZSBiYXNpcyBvZiB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZQorY2hhbm5lbCBhbmQgdGhlIGdlbmVyaWMgbGF5ZXIuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGNoYW5uZWwgcHJvdmlkZXMKK3RoZSBzdG9yYWdlIGZvciB0aGUgcHBwX2NoYW5uZWwgc3RydWN0dXJlLCBhbmQgc28gdGhlIGNoYW5uZWwgaXMKK3JlcXVpcmVkIHRvIHByb3ZpZGUgdGhlIGd1YXJhbnRlZSB0aGF0IHRoaXMgc3RvcmFnZSBleGlzdHMgYW5kIGlzCit2YWxpZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZXMuCisKK1RoZSBnZW5lcmljIGxheWVyIHJlcXVpcmVzIHRoZXNlIGd1YXJhbnRlZXMgZnJvbSB0aGUgY2hhbm5lbDoKKworKiBUaGUgcHBwX2NoYW5uZWwgb2JqZWN0IG11c3QgZXhpc3QgZnJvbSB0aGUgdGltZSB0aGF0CisgIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIHVudGlsIGFmdGVyIHRoZSBjYWxsIHRvCisgIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSByZXR1cm5zLgorCisqIE5vIHRocmVhZCBtYXkgYmUgaW4gYSBjYWxsIHRvIGFueSBvZiBwcHBfaW5wdXQoKSwgcHBwX2lucHV0X2Vycm9yKCksCisgIHBwcF9vdXRwdXRfd2FrZXVwKCksIHBwcF9jaGFubmVsX2luZGV4KCkgb3IgcHBwX3VuaXRfbnVtYmVyKCkgZm9yIGEKKyAgY2hhbm5lbCBhdCB0aGUgdGltZSB0aGF0IHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgZm9yIHRoYXQKKyAgY2hhbm5lbC4KKworKiBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgpIGFuZCBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgbXVzdCBiZSBjYWxsZWQKKyAgZnJvbSBwcm9jZXNzIGNvbnRleHQsIG5vdCBpbnRlcnJ1cHQgb3Igc29mdGlycS9CSCBjb250ZXh0LgorCisqIFRoZSByZW1haW5pbmcgZ2VuZXJpYyBsYXllciBmdW5jdGlvbnMgbWF5IGJlIGNhbGxlZCBhdCBzb2Z0aXJxL0JICisgIGxldmVsIGJ1dCBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBhIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyLgorCisqIFRoZSBnZW5lcmljIGxheWVyIG1heSBjYWxsIHRoZSBjaGFubmVsIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBhdAorICBzb2Z0aXJxL0JIIGxldmVsIGJ1dCB3aWxsIG5vdCBjYWxsIGl0IGF0IGludGVycnVwdCBsZXZlbC4gIFRodXMgdGhlCisgIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBtYXkgbm90IGJsb2NrLgorCisqIFRoZSBnZW5lcmljIGxheWVyIHdpbGwgb25seSBjYWxsIHRoZSBjaGFubmVsIGlvY3RsKCkgZnVuY3Rpb24gaW4KKyAgcHJvY2VzcyBjb250ZXh0LgorCitUaGUgZ2VuZXJpYyBsYXllciBwcm92aWRlcyB0aGVzZSBndWFyYW50ZWVzIHRvIHRoZSBjaGFubmVsczoKKworKiBUaGUgZ2VuZXJpYyBsYXllciB3aWxsIG5vdCBjYWxsIHRoZSBzdGFydF94bWl0KCkgZnVuY3Rpb24gZm9yIGEKKyAgY2hhbm5lbCB3aGlsZSBhbnkgdGhyZWFkIGlzIGFscmVhZHkgZXhlY3V0aW5nIGluIHRoYXQgZnVuY3Rpb24gZm9yCisgIHRoYXQgY2hhbm5lbC4KKworKiBUaGUgZ2VuZXJpYyBsYXllciB3aWxsIG5vdCBjYWxsIHRoZSBpb2N0bCgpIGZ1bmN0aW9uIGZvciBhIGNoYW5uZWwKKyAgd2hpbGUgYW55IHRocmVhZCBpcyBhbHJlYWR5IGV4ZWN1dGluZyBpbiB0aGF0IGZ1bmN0aW9uIGZvciB0aGF0CisgIGNoYW5uZWwuCisKKyogQnkgdGhlIHRpbWUgYSBjYWxsIHRvIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSByZXR1cm5zLCBubyB0aHJlYWQKKyAgd2lsbCBiZSBleGVjdXRpbmcgaW4gYSBjYWxsIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIgdG8gdGhhdCBjaGFubmVsJ3MKKyAgc3RhcnRfeG1pdCgpIG9yIGlvY3RsKCkgZnVuY3Rpb24sIGFuZCB0aGUgZ2VuZXJpYyBsYXllciB3aWxsIG5vdAorICBjYWxsIGVpdGhlciBvZiB0aG9zZSBmdW5jdGlvbnMgc3Vic2VxdWVudGx5LgorCisKK0ludGVyZmFjZSB0byBwcHBkCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgUFBQIGdlbmVyaWMgbGF5ZXIgZXhwb3J0cyBhIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlIGNhbGxlZAorL2Rldi9wcHAuICBUaGlzIGlzIHVzZWQgYnkgcHBwZCB0byBjb250cm9sIFBQUCBpbnRlcmZhY2UgdW5pdHMgYW5kCitjaGFubmVscy4gIEFsdGhvdWdoIHRoZXJlIGlzIG9ubHkgb25lIC9kZXYvcHBwLCBlYWNoIG9wZW4gaW5zdGFuY2Ugb2YKKy9kZXYvcHBwIGFjdHMgaW5kZXBlbmRlbnRseSBhbmQgY2FuIGJlIGF0dGFjaGVkIGVpdGhlciB0byBhIFBQUCB1bml0CitvciBhIFBQUCBjaGFubmVsLiAgVGhpcyBpcyBhY2hpZXZlZCB1c2luZyB0aGUgZmlsZS0+cHJpdmF0ZV9kYXRhIGZpZWxkCit0byBwb2ludCB0byBhIHNlcGFyYXRlIG9iamVjdCBmb3IgZWFjaCBvcGVuIGluc3RhbmNlIG9mIC9kZXYvcHBwLiAgSW4KK3RoaXMgd2F5IGFuIGVmZmVjdCBzaW1pbGFyIHRvIFNvbGFyaXMnIGNsb25lIG9wZW4gaXMgb2J0YWluZWQsCithbGxvd2luZyB1cyB0byBjb250cm9sIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgUFBQIGludGVyZmFjZXMgYW5kCitjaGFubmVscyB3aXRob3V0IGhhdmluZyB0byBmaWxsIHVwIC9kZXYgd2l0aCBodW5kcmVkcyBvZiBkZXZpY2UgbmFtZXMuCisKK1doZW4gL2Rldi9wcHAgaXMgb3BlbmVkLCBhIG5ldyBpbnN0YW5jZSBpcyBjcmVhdGVkIHdoaWNoIGlzIGluaXRpYWxseQordW5hdHRhY2hlZC4gIFVzaW5nIGFuIGlvY3RsIGNhbGwsIGl0IGNhbiB0aGVuIGJlIGF0dGFjaGVkIHRvIGFuCitleGlzdGluZyB1bml0LCBhdHRhY2hlZCB0byBhIG5ld2x5LWNyZWF0ZWQgdW5pdCwgb3IgYXR0YWNoZWQgdG8gYW4KK2V4aXN0aW5nIGNoYW5uZWwuICBBbiBpbnN0YW5jZSBhdHRhY2hlZCB0byBhIHVuaXQgY2FuIGJlIHVzZWQgdG8gc2VuZAorYW5kIHJlY2VpdmUgUFBQIGNvbnRyb2wgZnJhbWVzLCB1c2luZyB0aGUgcmVhZCgpIGFuZCB3cml0ZSgpIHN5c3RlbQorY2FsbHMsIGFsb25nIHdpdGggcG9sbCgpIGlmIG5lY2Vzc2FyeS4gIFNpbWlsYXJseSwgYW4gaW5zdGFuY2UKK2F0dGFjaGVkIHRvIGEgY2hhbm5lbCBjYW4gYmUgdXNlZCB0byBzZW5kIGFuZCByZWNlaXZlIFBQUCBmcmFtZXMgb24KK3RoYXQgY2hhbm5lbC4KKworSW4gbXVsdGlsaW5rIHRlcm1zLCB0aGUgdW5pdCByZXByZXNlbnRzIHRoZSBidW5kbGUsIHdoaWxlIHRoZSBjaGFubmVscworcmVwcmVzZW50IHRoZSBpbmRpdmlkdWFsIHBoeXNpY2FsIGxpbmtzLiAgVGh1cywgYSBQUFAgZnJhbWUgc2VudCBieSBhCit3cml0ZSB0byB0aGUgdW5pdCAoaS5lLiwgdG8gYW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAgYXR0YWNoZWQgdG8gdGhlCit1bml0KSB3aWxsIGJlIHN1YmplY3QgdG8gYnVuZGxlLWxldmVsIGNvbXByZXNzaW9uIGFuZCB0byBmcmFnbWVudGF0aW9uCithY3Jvc3MgdGhlIGluZGl2aWR1YWwgbGlua3MgKGlmIG11bHRpbGluayBpcyBpbiB1c2UpLiAgSW4gY29udHJhc3QsIGEKK1BQUCBmcmFtZSBzZW50IGJ5IGEgd3JpdGUgdG8gdGhlIGNoYW5uZWwgd2lsbCBiZSBzZW50IGFzLWlzIG9uIHRoYXQKK2NoYW5uZWwsIHdpdGhvdXQgYW55IG11bHRpbGluayBoZWFkZXIuCisKK0EgY2hhbm5lbCBpcyBub3QgaW5pdGlhbGx5IGF0dGFjaGVkIHRvIGFueSB1bml0LiAgSW4gdGhpcyBzdGF0ZSBpdCBjYW4KK2JlIHVzZWQgZm9yIFBQUCBuZWdvdGlhdGlvbiBidXQgbm90IGZvciB0aGUgdHJhbnNmZXIgb2YgZGF0YSBwYWNrZXRzLgorSXQgY2FuIHRoZW4gYmUgY29ubmVjdGVkIHRvIGEgUFBQIHVuaXQgd2l0aCBhbiBpb2N0bCBjYWxsLCB3aGljaAorbWFrZXMgaXQgYXZhaWxhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBwYWNrZXRzIGZvciB0aGF0IHVuaXQuCisKK1RoZSBpb2N0bCBjYWxscyB3aGljaCBhcmUgYXZhaWxhYmxlIG9uIGFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIGRlcGVuZAorb24gd2hldGhlciBpdCBpcyB1bmF0dGFjaGVkLCBhdHRhY2hlZCB0byBhIFBQUCBpbnRlcmZhY2UsIG9yIGF0dGFjaGVkCit0byBhIFBQUCBjaGFubmVsLiAgVGhlIGlvY3RsIGNhbGxzIHdoaWNoIGFyZSBhdmFpbGFibGUgb24gYW4KK3VuYXR0YWNoZWQgaW5zdGFuY2UgYXJlOgorCisqIFBQUElPQ05FV1VOSVQgY3JlYXRlcyBhIG5ldyBQUFAgaW50ZXJmYWNlIGFuZCBtYWtlcyB0aGlzIC9kZXYvcHBwCisgIGluc3RhbmNlIHRoZSAib3duZXIiIG9mIHRoZSBpbnRlcmZhY2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvCisgIGFuIGludCB3aGljaCBpcyB0aGUgZGVzaXJlZCB1bml0IG51bWJlciBpZiA+PSAwLCBvciAtMSB0byBhc3NpZ24gdGhlCisgIGxvd2VzdCB1bnVzZWQgdW5pdCBudW1iZXIuICBCZWluZyB0aGUgb3duZXIgb2YgdGhlIGludGVyZmFjZSBtZWFucworICB0aGF0IHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBzaHV0IGRvd24gaWYgdGhpcyBpbnN0YW5jZSBvZiAvZGV2L3BwcCBpcworICBjbG9zZWQuCisKKyogUFBQSU9DQVRUQUNIIGF0dGFjaGVzIHRoaXMgaW5zdGFuY2UgdG8gYW4gZXhpc3RpbmcgUFBQIGludGVyZmFjZS4KKyAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBpbnQgY29udGFpbmluZyB0aGUgdW5pdCBudW1iZXIuCisgIFRoaXMgZG9lcyBub3QgbWFrZSB0aGlzIGluc3RhbmNlIHRoZSBvd25lciBvZiB0aGUgUFBQIGludGVyZmFjZS4KKworKiBQUFBJT0NBVFRDSEFOIGF0dGFjaGVzIHRoaXMgaW5zdGFuY2UgdG8gYW4gZXhpc3RpbmcgUFBQIGNoYW5uZWwuCisgIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gaW50IGNvbnRhaW5pbmcgdGhlIGNoYW5uZWwgbnVtYmVyLgorCitUaGUgaW9jdGwgY2FsbHMgYXZhaWxhYmxlIG9uIGFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIGF0dGFjaGVkIHRvIGEKK2NoYW5uZWwgYXJlOgorCisqIFBQUElPQ0RFVEFDSCBkZXRhY2hlcyB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgY2hhbm5lbC4gIFRoaXMgaW9jdGwgaXMKKyAgZGVwcmVjYXRlZCBzaW5jZSB0aGUgc2FtZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNsb3NpbmcgdGhlCisgIGluc3RhbmNlLiAgSW4gb3JkZXIgdG8gcHJldmVudCBwb3NzaWJsZSByYWNlcyB0aGlzIGlvY3RsIHdpbGwgZmFpbAorICB3aXRoIGFuIEVJTlZBTCBlcnJvciBpZiBtb3JlIHRoYW4gb25lIGZpbGUgZGVzY3JpcHRvciByZWZlcnMgdG8gdGhpcworICBpbnN0YW5jZSAoaS5lLiBhcyBhIHJlc3VsdCBvZiBkdXAoKSwgZHVwMigpIG9yIGZvcmsoKSkuCisKKyogUFBQSU9DQ09OTkVDVCBjb25uZWN0cyB0aGlzIGNoYW5uZWwgdG8gYSBQUFAgaW50ZXJmYWNlLiAgVGhlCisgIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBpbnQgY29udGFpbmluZyB0aGUgaW50ZXJmYWNlIHVuaXQKKyAgbnVtYmVyLiAgSXQgd2lsbCByZXR1cm4gYW4gRUlOVkFMIGVycm9yIGlmIHRoZSBjaGFubmVsIGlzIGFscmVhZHkKKyAgY29ubmVjdGVkIHRvIGFuIGludGVyZmFjZSwgb3IgRU5YSU8gaWYgdGhlIHJlcXVlc3RlZCBpbnRlcmZhY2UgZG9lcworICBub3QgZXhpc3QuCisKKyogUFBQSU9DRElTQ09OTiBkaXNjb25uZWN0cyB0aGlzIGNoYW5uZWwgZnJvbSB0aGUgUFBQIGludGVyZmFjZSB0aGF0CisgIGl0IGlzIGNvbm5lY3RlZCB0by4gIEl0IHdpbGwgcmV0dXJuIGFuIEVJTlZBTCBlcnJvciBpZiB0aGUgY2hhbm5lbAorICBpcyBub3QgY29ubmVjdGVkIHRvIGFuIGludGVyZmFjZS4KKworKiBBbGwgb3RoZXIgaW9jdGwgY29tbWFuZHMgYXJlIHBhc3NlZCB0byB0aGUgY2hhbm5lbCBpb2N0bCgpIGZ1bmN0aW9uLgorCitUaGUgaW9jdGwgY2FsbHMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIGFuIGluc3RhbmNlIHRoYXQgaXMgYXR0YWNoZWQgdG8KK2FuIGludGVyZmFjZSB1bml0IGFyZToKKworKiBQUFBJT0NTTVJVIHNldHMgdGhlIE1SVSAobWF4aW11bSByZWNlaXZlIHVuaXQpIGZvciB0aGUgaW50ZXJmYWNlLgorICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCBjb250YWluaW5nIHRoZSBuZXcgTVJVIHZhbHVlLgorCisqIFBQUElPQ1NGTEFHUyBzZXRzIGZsYWdzIHdoaWNoIGNvbnRyb2wgdGhlIG9wZXJhdGlvbiBvZiB0aGUKKyAgaW50ZXJmYWNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gYW4gaW50IGNvbnRhaW5pbmcKKyAgdGhlIG5ldyBmbGFncyB2YWx1ZS4gIFRoZSBiaXRzIGluIHRoZSBmbGFncyB2YWx1ZSB0aGF0IGNhbiBiZSBzZXQKKyAgYXJlOgorCVNDX0NPTVBfVENQCQllbmFibGUgdHJhbnNtaXQgVENQIGhlYWRlciBjb21wcmVzc2lvbgorCVNDX05PX1RDUF9DQ0lECQlkaXNhYmxlIGNvbm5lY3Rpb24taWQgY29tcHJlc3Npb24gZm9yCisJCQkJVENQIGhlYWRlciBjb21wcmVzc2lvbgorCVNDX1JFSl9DT01QX1RDUAkJZGlzYWJsZSByZWNlaXZlIFRDUCBoZWFkZXIgZGVjb21wcmVzc2lvbgorCVNDX0NDUF9PUEVOCQlDb21wcmVzc2lvbiBDb250cm9sIFByb3RvY29sIChDQ1ApIGlzCisJCQkJb3Blbiwgc28gaW5zcGVjdCBDQ1AgcGFja2V0cworCVNDX0NDUF9VUAkJQ0NQIGlzIHVwLCBtYXkgKGRlKWNvbXByZXNzIHBhY2tldHMKKwlTQ19MT09QX1RSQUZGSUMJCXNlbmQgSVAgdHJhZmZpYyB0byBwcHBkCisJU0NfTVVMVElMSU5LCQllbmFibGUgUFBQIG11bHRpbGluayBmcmFnbWVudGF0aW9uIG9uCisJCQkJdHJhbnNtaXR0ZWQgcGFja2V0cworCVNDX01QX1NIT1JUU0VRCQlleHBlY3Qgc2hvcnQgbXVsdGlsaW5rIHNlcXVlbmNlCisJCQkJbnVtYmVycyBvbiByZWNlaXZlZCBtdWx0aWxpbmsgZnJhZ21lbnRzCisJU0NfTVBfWFNIT1JUU0VRCQl0cmFuc21pdCBzaG9ydCBtdWx0aWxpbmsgc2VxdWVuY2Ugbm9zLgorCisgIFRoZSB2YWx1ZXMgb2YgdGhlc2UgZmxhZ3MgYXJlIGRlZmluZWQgaW4gPGxpbnV4L2lmX3BwcC5oPi4gIE5vdGUKKyAgdGhhdCB0aGUgdmFsdWVzIG9mIHRoZSBTQ19NVUxUSUxJTkssIFNDX01QX1NIT1JUU0VRIGFuZAorICBTQ19NUF9YU0hPUlRTRVEgYml0cyBhcmUgaWdub3JlZCBpZiB0aGUgQ09ORklHX1BQUF9NVUxUSUxJTksgb3B0aW9uCisgIGlzIG5vdCBzZWxlY3RlZC4KKworKiBQUFBJT0NHRkxBR1MgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHN0YXR1cy9jb250cm9sIGZsYWdzIGZvciB0aGUKKyAgaW50ZXJmYWNlIHVuaXQuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCB3aGVyZSB0aGUgaW9jdGwKKyAgd2lsbCBzdG9yZSB0aGUgZmxhZ3MgdmFsdWUuICBBcyB3ZWxsIGFzIHRoZSB2YWx1ZXMgbGlzdGVkIGFib3ZlIGZvcgorICBQUFBJT0NTRkxBR1MsIHRoZSBmb2xsb3dpbmcgYml0cyBtYXkgYmUgc2V0IGluIHRoZSByZXR1cm5lZCB2YWx1ZToKKwlTQ19DT01QX1JVTgkJQ0NQIGNvbXByZXNzb3IgaXMgcnVubmluZworCVNDX0RFQ09NUF9SVU4JCUNDUCBkZWNvbXByZXNzb3IgaXMgcnVubmluZworCVNDX0RDX0VSUk9SCQlDQ1AgZGVjb21wcmVzc29yIGRldGVjdGVkIG5vbi1mYXRhbCBlcnJvcgorCVNDX0RDX0ZFUlJPUgkJQ0NQIGRlY29tcHJlc3NvciBkZXRlY3RlZCBmYXRhbCBlcnJvcgorCisqIFBQUElPQ1NDT01QUkVTUyBzZXRzIHRoZSBwYXJhbWV0ZXJzIGZvciBwYWNrZXQgY29tcHJlc3Npb24gb3IKKyAgZGVjb21wcmVzc2lvbi4gIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBwcHBfb3B0aW9uX2RhdGEKKyAgc3RydWN0dXJlIChkZWZpbmVkIGluIDxsaW51eC9pZl9wcHAuaD4pLCB3aGljaCBjb250YWlucyBhCisgIHBvaW50ZXIvbGVuZ3RoIHBhaXIgd2hpY2ggc2hvdWxkIGRlc2NyaWJlIGEgYmxvY2sgb2YgbWVtb3J5CisgIGNvbnRhaW5pbmcgYSBDQ1Agb3B0aW9uIHNwZWNpZnlpbmcgYSBjb21wcmVzc2lvbiBtZXRob2QgYW5kIGl0cworICBwYXJhbWV0ZXJzLiAgVGhlIHBwcF9vcHRpb25fZGF0YSBzdHJ1Y3QgYWxzbyBjb250YWlucyBhIGB0cmFuc21pdCcKKyAgZmllbGQuICBJZiB0aGlzIGlzIDAsIHRoZSBpb2N0bCB3aWxsIGFmZmVjdCB0aGUgcmVjZWl2ZSBwYXRoLAorICBvdGhlcndpc2UgdGhlIHRyYW5zbWl0IHBhdGguCisKKyogUFBQSU9DR1VOSVQgcmV0dXJucywgaW4gdGhlIGludCBwb2ludGVkIHRvIGJ5IHRoZSBhcmd1bWVudCwgdGhlIHVuaXQKKyAgbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlIHVuaXQuCisKKyogUFBQSU9DU0RFQlVHIHNldHMgdGhlIGRlYnVnIGZsYWdzIGZvciB0aGUgaW50ZXJmYWNlIHRvIHRoZSB2YWx1ZSBpbgorICB0aGUgaW50IHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50LiAgT25seSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisgIGlzIHVzZWQ7IGlmIHRoaXMgaXMgMSB0aGUgZ2VuZXJpYyBsYXllciB3aWxsIHByaW50IHNvbWUgZGVidWcKKyAgbWVzc2FnZXMgZHVyaW5nIGl0cyBvcGVyYXRpb24uICBUaGlzIGlzIG9ubHkgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZworICB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIgY29kZTsgaXQgaXMgZ2VuZXJhbGx5IG5vdCBoZWxwZnVsIGZvciB3b3JraW5nCisgIG91dCB3aHkgYSBQUFAgY29ubmVjdGlvbiBpcyBmYWlsaW5nLgorCisqIFBQUElPQ0dERUJVRyByZXR1cm5zIHRoZSBkZWJ1ZyBmbGFncyBmb3IgdGhlIGludGVyZmFjZSBpbiB0aGUgaW50CisgIHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50LgorCisqIFBQUElPQ0dJRExFIHJldHVybnMgdGhlIHRpbWUsIGluIHNlY29uZHMsIHNpbmNlIHRoZSBsYXN0IGRhdGEKKyAgcGFja2V0cyB3ZXJlIHNlbnQgYW5kIHJlY2VpdmVkLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhCisgIHBwcF9pZGxlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiA8bGludXgvcHBwX2RlZnMuaD4pLiAgSWYgdGhlCisgIENPTkZJR19QUFBfRklMVEVSIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgc2V0IG9mIHBhY2tldHMgd2hpY2ggcmVzZXQKKyAgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGlkbGUgdGltZXJzIGlzIHJlc3RyaWN0ZWQgdG8gdGhvc2Ugd2hpY2gKKyAgcGFzcyB0aGUgYGFjdGl2ZScgcGFja2V0IGZpbHRlci4KKworKiBQUFBJT0NTTUFYQ0lEIHNldHMgdGhlIG1heGltdW0gY29ubmVjdGlvbi1JRCBwYXJhbWV0ZXIgKGFuZCB0aHVzIHRoZQorICBudW1iZXIgb2YgY29ubmVjdGlvbiBzbG90cykgZm9yIHRoZSBUQ1AgaGVhZGVyIGNvbXByZXNzb3IgYW5kCisgIGRlY29tcHJlc3Nvci4gIFRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSBpbnQgcG9pbnRlZCB0byBieSB0aGUKKyAgYXJndW1lbnQgc3BlY2lmeSB0aGUgbWF4aW11bSBjb25uZWN0aW9uLUlEIGZvciB0aGUgY29tcHJlc3Nvci4gIElmCisgIHRoZSB1cHBlciAxNiBiaXRzIG9mIHRoYXQgaW50IGFyZSBub24temVybywgdGhleSBzcGVjaWZ5IHRoZSBtYXhpbXVtCisgIGNvbm5lY3Rpb24tSUQgZm9yIHRoZSBkZWNvbXByZXNzb3IsIG90aGVyd2lzZSB0aGUgZGVjb21wcmVzc29yJ3MKKyAgbWF4aW11bSBjb25uZWN0aW9uLUlEIGlzIHNldCB0byAxNS4KKworKiBQUFBJT0NTTlBNT0RFIHNldHMgdGhlIG5ldHdvcmstcHJvdG9jb2wgbW9kZSBmb3IgYSBnaXZlbiBuZXR3b3JrCisgIHByb3RvY29sLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBucGlvY3RsIHN0cnVjdCAoZGVmaW5lZAorICBpbiA8bGludXgvaWZfcHBwLmg+KS4gIFRoZSBgcHJvdG9jb2wnIGZpZWxkIGdpdmVzIHRoZSBQUFAgcHJvdG9jb2wKKyAgbnVtYmVyIGZvciB0aGUgcHJvdG9jb2wgdG8gYmUgYWZmZWN0ZWQsIGFuZCB0aGUgYG1vZGUnIGZpZWxkCisgIHNwZWNpZmllcyB3aGF0IHRvIGRvIHdpdGggcGFja2V0cyBmb3IgdGhhdCBwcm90b2NvbDoKKworCU5QTU9ERV9QQVNTCW5vcm1hbCBvcGVyYXRpb24sIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhY2tldHMKKwlOUE1PREVfRFJPUAlzaWxlbnRseSBkcm9wIHBhY2tldHMgZm9yIHRoaXMgcHJvdG9jb2wKKwlOUE1PREVfRVJST1IJZHJvcCBwYWNrZXRzIGFuZCByZXR1cm4gYW4gZXJyb3Igb24gdHJhbnNtaXQKKwlOUE1PREVfUVVFVUUJcXVldWUgdXAgcGFja2V0cyBmb3IgdHJhbnNtaXQsIGRyb3AgcmVjZWl2ZWQKKwkJCXBhY2tldHMKKworICBBdCBwcmVzZW50IE5QTU9ERV9FUlJPUiBhbmQgTlBNT0RFX1FVRVVFIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzCisgIE5QTU9ERV9EUk9QLgorCisqIFBQUElPQ0dOUE1PREUgcmV0dXJucyB0aGUgbmV0d29yay1wcm90b2NvbCBtb2RlIGZvciBhIGdpdmVuCisgIHByb3RvY29sLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBucGlvY3RsIHN0cnVjdCB3aXRoIHRoZQorICBgcHJvdG9jb2wnIGZpZWxkIHNldCB0byB0aGUgUFBQIHByb3RvY29sIG51bWJlciBmb3IgdGhlIHByb3RvY29sIG9mCisgIGludGVyZXN0LiAgT24gcmV0dXJuIHRoZSBgbW9kZScgZmllbGQgd2lsbCBiZSBzZXQgdG8gdGhlIG5ldHdvcmstCisgIHByb3RvY29sIG1vZGUgZm9yIHRoYXQgcHJvdG9jb2wuCisKKyogUFBQSU9DU1BBU1MgYW5kIFBQUElPQ1NBQ1RJVkUgc2V0IHRoZSBgcGFzcycgYW5kIGBhY3RpdmUnIHBhY2tldAorICBmaWx0ZXJzLiAgVGhlc2UgaW9jdGxzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgQ09ORklHX1BQUF9GSUxURVIKKyAgb3B0aW9uIGlzIHNlbGVjdGVkLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIHNvY2tfZnByb2cKKyAgc3RydWN0dXJlIChkZWZpbmVkIGluIDxsaW51eC9maWx0ZXIuaD4pIGNvbnRhaW5pbmcgdGhlIGNvbXBpbGVkIEJQRgorICBpbnN0cnVjdGlvbnMgZm9yIHRoZSBmaWx0ZXIuICBQYWNrZXRzIGFyZSBkcm9wcGVkIGlmIHRoZXkgZmFpbCB0aGUKKyAgYHBhc3MnIGZpbHRlcjsgb3RoZXJ3aXNlLCBpZiB0aGV5IGZhaWwgdGhlIGBhY3RpdmUnIGZpbHRlciB0aGV5IGFyZQorICBwYXNzZWQgYnV0IHRoZXkgZG8gbm90IHJlc2V0IHRoZSB0cmFuc21pdCBvciByZWNlaXZlIGlkbGUgdGltZXIuCisKKyogUFBQSU9DU01SUlUgZW5hYmxlcyBvciBkaXNhYmxlcyBtdWx0aWxpbmsgcHJvY2Vzc2luZyBmb3IgcmVjZWl2ZWQKKyAgcGFja2V0cyBhbmQgc2V0cyB0aGUgbXVsdGlsaW5rIE1SUlUgKG1heGltdW0gcmVjb25zdHJ1Y3RlZCByZWNlaXZlCisgIHVuaXQpLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBpbnQgY29udGFpbmluZyB0aGUgbmV3IE1SUlUKKyAgdmFsdWUuICBJZiB0aGUgTVJSVSB2YWx1ZSBpcyAwLCBwcm9jZXNzaW5nIG9mIHJlY2VpdmVkIG11bHRpbGluaworICBmcmFnbWVudHMgaXMgZGlzYWJsZWQuICBUaGlzIGlvY3RsIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZQorICBDT05GSUdfUFBQX01VTFRJTElOSyBvcHRpb24gaXMgc2VsZWN0ZWQuCisKK0xhc3QgbW9kaWZpZWQ6IDctZmViLTIwMDIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcm9jX25ldF90Y3AudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Byb2NfbmV0X3RjcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljYjkxNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcm9jX25ldF90Y3AudHh0CkBAIC0wLDAgKzEsNDcgQEAKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2VzIC9wcm9jL25ldC90Y3AgYW5kIC9wcm9jL25ldC90Y3A2LgorCitUaGVzZSAvcHJvYyBpbnRlcmZhY2VzIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudGx5IGFjdGl2ZSBUQ1AgCitjb25uZWN0aW9ucywgYW5kIGFyZSBpbXBsZW1lbnRlZCBieSB0Y3BfZ2V0X2luZm8oKSBpbiBuZXQvaXB2NC90Y3BfaXB2NC5jIGFuZAordGNwNl9nZXRfaW5mbygpIGluIG5ldC9pcHY2L3RjcF9pcHY2LmMsIHJlc3BlY3RpdmVseS4KKworSXQgd2lsbCBmaXJzdCBsaXN0IGFsbCBsaXN0ZW5pbmcgVENQIHNvY2tldHMsIGFuZCBuZXh0IGxpc3QgYWxsIGVzdGFibGlzaGVkCitUQ1AgY29ubmVjdGlvbnMuIEEgdHlwaWNhbCBlbnRyeSBvZiAvcHJvYy9uZXQvdGNwIHdvdWxkIGxvb2sgbGlrZSB0aGlzIChzcGxpdCAKK3VwIGludG8gMyBwYXJ0cyBiZWNhdXNlIG9mIHRoZSBsZW5ndGggb2YgdGhlIGxpbmUpOgorCisgICA0NjogMDEwMzEwQUM6OUM0QyAwMzAzMTBBQzoxNzcwIDAxIAorICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICB8LS0+IGNvbm5lY3Rpb24gc3RhdGUKKyAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8LS0tLS0tPiByZW1vdGUgVENQIHBvcnQgbnVtYmVyCisgICB8ICAgICAgfCAgICAgIHwgICAgICB8LS0tLS0tLS0tLS0tLT4gcmVtb3RlIElQdjQgYWRkcmVzcworICAgfCAgICAgIHwgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0+IGxvY2FsIFRDUCBwb3J0IG51bWJlcgorICAgfCAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IGxvY2FsIElQdjQgYWRkcmVzcworICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IG51bWJlciBvZiBlbnRyeQorCisgICAwMDAwMDE1MDowMDAwMDAwMCAwMTowMDAwMDAxOSAwMDAwMDAwMCAgCisgICAgICB8ICAgICAgICB8ICAgICB8ICAgICB8ICAgICAgIHwtLT4gbnVtYmVyIG9mIHVucmVjb3ZlcmVkIFJUTyB0aW1lb3V0cworICAgICAgfCAgICAgICAgfCAgICAgfCAgICAgfC0tLS0tLS0tLS0+IG51bWJlciBvZiBqaWZmaWVzIHVudGlsIHRpbWVyIGV4cGlyZXMKKyAgICAgIHwgICAgICAgIHwgICAgIHwtLS0tLS0tLS0tLS0tLS0tPiB0aW1lcl9hY3RpdmUgKHNlZSBiZWxvdykKKyAgICAgIHwgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiByZWNlaXZlLXF1ZXVlCisgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHJhbnNtaXQtcXVldWUKKworICAgMTAwMCAgICAgICAgMCA1NDE2NTc4NSA0IGNkMWU2MDQwIDI1IDQgMjcgMyAtMQorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfCAgfCB8LS0+IHNsb3cgc3RhcnQgc2l6ZSB0aHJlc2hvbGQsIAorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfCAgfCAgICAgIG9yIC0xIGlmIHRoZSB0cmVzaG9sZAorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfCAgfCAgICAgIGlzID49IDB4RkZGRgorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfCAgfC0tLS0+IHNlbmRpbmcgY29uZ2VzdGlvbiB3aW5kb3cKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8ICAgICB8ICB8IHwtLS0tLS0tPiAoYWNrLnF1aWNrPDwxKXxhY2sucGluZ3BvbmcKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8ICAgICB8ICB8LS0tLS0tLS0tPiBQcmVkaWN0ZWQgdGljayBvZiBzb2Z0IGNsb2NrCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgICAgICAgICAgICAgKGRlbGF5ZWQgQUNLIGNvbnRyb2wgZGF0YSkKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8ICAgICB8LS0tLS0tLS0tLS0tPiByZXRyYW5zbWl0IHRpbWVvdXQKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8LS0tLS0tLS0tLS0tLS0tLS0tPiBsb2NhdGlvbiBvZiBzb2NrZXQgaW4gbWVtb3J5CisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gc29ja2V0IHJlZmVyZW5jZSBjb3VudAorICAgIHwgICAgICAgICAgfCAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IGlub2RlCisgICAgfCAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdW5hbnN3ZXJlZCAwLXdpbmRvdyBwcm9iZXMKKyAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB1aWQKKwordGltZXJfYWN0aXZlOgorICAwICBubyB0aW1lciBpcyBwZW5kaW5nCisgIDEgIHJldHJhbnNtaXQtdGltZXIgaXMgcGVuZGluZworICAyICBhbm90aGVyIHRpbWVyIChlLmcuIGRlbGF5ZWQgYWNrIG9yIGtlZXBhbGl2ZSkgaXMgcGVuZGluZworICAzICB0aGlzIGlzIGEgc29ja2V0IGluIFRJTUVfV0FJVCBzdGF0ZS4gTm90IGFsbCBmaWVsZHMgd2lsbCBjb250YWluIAorICAgICBkYXRhIChvciBldmVuIGV4aXN0KQorICA0ICB6ZXJvIHdpbmRvdyBwcm9iZSB0aW1lciBpcyBwZW5kaW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHQudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3B0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmU4ODhjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3B0LnR4dApAQCAtMCwwICsxLDU4IEBACitUaGlzIGlzIHRoZSBSRUFETUUgZm9yIHRoZSBHcmFjaWxpcyBQYWNrZXR3aW4gZGV2aWNlIGRyaXZlciwgdmVyc2lvbiAwLjUKK0FMUEhBIGZvciBMaW51eCAxLjMuNDMuCisKK1RoZXNlIGZpbGVzIHdpbGwgYWxsb3cgeW91IHRvIHRhbGsgdG8gdGhlIFBhY2tlVHdpbiAobm93IGtub3cgYXMgUFQpIGFuZAorY29ubmVjdCB0aHJvdWdoIGl0IGp1c3QgbGlrZSBhIHBhaXIgb2YgVE5Dcy4gIFRvIGRvIHRoaXMgeW91IHdpbGwgYWxzbworcmVxdWlyZSB0aGUgQVguMjUgY29kZSBpbiB0aGUga2VybmVsIGVuYWJsZWQuCisKK1RoZXJlIGFyZSBmb3VyIGZpbGVzIGluIHRoaXMgYXJjaGl2ZTsgdGhpcyByZWFkbWUsIGEgcGF0Y2ggZmlsZSwgYSAuYyBmaWxlCithbmQgZmluYWxseSBhIC5oIGZpbGUuICBUaGUgdHdvIHByb2dyYW0gZmlsZXMgbmVlZCB0byBiZSBwdXQgaW50byB0aGUKK2RyaXZlcnMvbmV0IGRpcmVjdG9yeSBpbiB0aGUgTGludXggc291cmNlIHRyZWUsIGZvciBtZSB0aGlzIGlzIHRoZQorZGlyZWN0b3J5IC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0LiAgVGhlIHBhdGNoIGZpbGUgbmVlZHMgdG8gYmUgcGF0Y2hlZCBpbgorYXQgdGhlIHRvcCBvZiB0aGUgTGludXggc291cmNlIHRyZWUgKC91c3Ivc3JjL2xpbnV4IGluIG15IGNhc2UpLgorCitZb3Ugd2lsbCBtb3N0IHByb2JhYmx5IGhhdmUgdG8gZWRpdCB0aGUgcHQuYyBmaWxlIHRvIHN1aXQgeW91ciBvd24gc2V0dXAsCit0aGlzIHNob3VsZCBqdXN0IGludm9sdmUgY2hhbmdpbmcgc29tZSBvZiB0aGUgZGVmaW5lcyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiAKK1BsZWFzZSBub3RlIHRoYXQgaWYgeW91IHJ1biBhbiBleHRlcm5hbCBtb2RlbSB5b3UgbXVzdCBzcGVjaWZ5IGEgc3BlZWQgb2YgMC4KKworVGhlIHByb2dyYW0gaXMgY3VycmVudGx5IHNldHVwIHRvIHJ1biBhIDQ4MDAgYmF1ZCBleHRlcm5hbCBtb2RlbSBvbiBwb3J0IEEKK2FuZCBhIEthbnRyb25pY3MgREUtOTYwMCBkYXVnaHRlciBib2FyZCBvbiBwb3J0IEIgc28gaWYgeW91IGhhdmUgdGhpcyAob3IKK3NvbWV0aGluZyBzaW1pbGFyKSB0aGVuIHlvdSdyZSByaWdodC4KKworVG8gY29tcGlsZSBpbiB0aGUgZHJpdmVyLCBwdXQgdGhlIGZpbGVzIGluIHRoZSBjb3JyZWN0IHBsYWNlIGFuZCBwYXRjaCBpbgordGhlIGRpZmYuICBZb3Ugd2lsbCBoYXZlIHRvIHJlLWNvbmZpZ3VyZSB0aGUga2VybmVsIGFnYWluIGJlZm9yZSB5b3UKK3JlY29tcGlsZSBpdC4gCisKK1RoZSBkcml2ZXIgaXMgbm90IHJlYWwgZ29vZCBhdCB0aGUgbW9tZW50IGZvciBmaW5kaW5nIHRoZSBjYXJkLiAgWW91IGNhbgorJ2hlbHAnIGl0IGJ5IGNoYW5naW5nIHRoZSBvcmRlciBvZiB0aGUgcG90ZW50aWFsIGFkZHJlc3NlcyBpbiB0aGUgc3RydWN0dXJlCitmb3VuZCBpbiB0aGUgcHRfaW5pdCgpIGZ1bmN0aW9uIHNvIHRoZSBhZGRyZXNzIG9mIHdoZXJlIHRoZSBjYXJkIGlzIGlzIHB1dAorZmlyc3QuCisKK0FmdGVyIGNvbXBpbGluZywgeW91IGhhdmUgdG8gZ2V0IHRoZW0gZ29pbmcsIHRoZXkgYXJlIHByZXR0eSB3ZWxsIGxpa2UgYW55CitvdGhlciBuZXQgZGV2aWNlIGFuZCBqdXN0IG5lZWQgaWZjb25maWcgdG8gZ2V0IHRoZW0gZ29pbmcuCitBcyBhbiBleGFtcGxlLCBoZXJlIGlzIG15IC9ldGMvcmMubmV0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjCisjIENvbmZpZ3VyZSB0aGUgUGFja2VUd2luLCBwb3J0IEEuCisvc2Jpbi9pZmNvbmZpZyBwdDBhIDQ0LjEzNi44Ljg3IGh3IGF4MjUgdmsyeGx6IG10dSA1MTIgCisvc2Jpbi9pZmNvbmZpZyBwdDBhIDQ0LjEzNi44Ljg3IGJyb2FkY2FzdCA0NC4xMzYuOC4yNTUgbmV0bWFzayAyNTUuMjU1LjI1NS4wCisvc2Jpbi9yb3V0ZSBhZGQgLW5ldCA0NC4xMzYuOC4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCBkZXYgcHQwYQorL3NiaW4vcm91dGUgYWRkIC1uZXQgNDQuMC4wLjAgbmV0bWFzayAyNTUuMC4wLjAgZ3cgNDQuMTM2LjguNjggZGV2IHB0MGEKKy9zYmluL3JvdXRlIGFkZCAtbmV0IDEzOC4yNS4xNi4wIG5ldG1hc2sgMjU1LjI1NS4yNDAuMCBkZXYgcHQwYQorL3NiaW4vcm91dGUgYWRkIC1ob3N0IDQ0LjEzNi44LjI1NSBkZXYgcHQwYQorIworIyBDb25maWd1cmUgdGhlIFBhY2tlVHdpbiwgcG9ydCBCLgorL3NiaW4vaWZjb25maWcgcHQwYiA0NC4xMzYuOC44NyBodyBheDI1IHZrMnhsei0xIG10dSA1MTIKKy9zYmluL2lmY29uZmlnIHB0MGIgNDQuMTM2LjguODcgYnJvYWRjYXN0IDQ0LjI1NS4yNTUuMjU1IG5ldG1hc2sgMjU1LjAuMC4wCisvc2Jpbi9yb3V0ZSBhZGQgLWhvc3QgNDQuMTM2LjguMjE2IGRldiBwdDBiCisvc2Jpbi9yb3V0ZSBhZGQgLWhvc3QgNDQuMTM2LjguOTUgIGRldiBwdDBiCisvc2Jpbi9yb3V0ZSBhZGQgLWhvc3QgNDQuMjU1LjI1NS4yNTUgZGV2IHB0MGIKKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgY29tZXMgdW5kZXIgdGhlIEdOVSBHUEwuICBJZiB5b3UgaGF2ZSBvbmUgb2YgbXkKK3ByZXZpb3VzIChub24tR1BMKSB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLCBwbGVhc2UgdXBkYXRlIHRvIHRoaXMgb25lLgorCitJIGhvcGUgdGhhdCB0aGlzIGFsbCB3b3JrcyB3ZWxsIGZvciB5b3UuICBJIHdvdWxkIGJlIHBsZWFzZWQgdG8gaGVhciBob3cKK21hbnkgcGVvcGxlIHVzZSB0aGUgZHJpdmVyIGFuZCBpZiBpdCBkb2VzIGl0cyBqb2IuCisKKyAgLSBDcmFpZyB2azJ4bHogPGNzbWFsbEBzbWFsbC5kcm9wYmVhci5pZC5hdT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYXlfY3MudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkZWYwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYXlfY3MudHh0CkBAIC0wLDAgKzEsMTUxIEBACitTZXB0ZW1iZXIgMjEsIDE5OTkKKworQ29weXJpZ2h0IChjKSAxOTk4ICBDb3JleSBUaG9tYXMgKGNvcmV5QHdvcmxkLnN0ZC5jb20pCisKK1RoaXMgZmlsZSBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFJheWxpbmsgV2lyZWxlc3MgTEFOIGNhcmQgZHJpdmVyIGZvcgorTGludXguICBUaGUgUmF5bGluayB3aXJlbGVzcyBMQU4gY2FyZCBpcyBhIFBDTUNJQSBjYXJkIHdoaWNoIHByb3ZpZGVzIElFRUUKKzgwMi4xMSBjb21wYXRpYmxlIHdpcmVsZXNzIG5ldHdvcmsgY29ubmVjdGl2aXR5IGF0IDEgYW5kIDIgbWVnYWJpdHMvc2Vjb25kLgorU2VlIGh0dHA6Ly93d3cucmF5dGhlb24uY29tL21pY3JvL3JheWxpbmsvIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBSYXlsaW5rCitjYXJkLiAgVGhpcyBkcml2ZXIgaXMgaW4gZWFybHkgZGV2ZWxvcG1lbnQgYW5kIGRvZXMgaGF2ZSBidWdzLiAgU2VlIHRoZSBrbm93bgorYnVncyBhbmQgbGltaXRhdGlvbnMgYXQgdGhlIGVuZCBvZiB0aGlzIGRvY3VtZW50IGZvciBtb3JlIGluZm9ybWF0aW9uLgorVGhpcyBkcml2ZXIgYWxzbyB3b3JrcyB3aXRoIFdlYkdlYXIncyBBdmlhdG9yIDIuNCBhbmQgQXZpYXRvciBQcm8KK3dpcmVsZXNzIExBTiBjYXJkcy4KKworQXMgb2Yga2VybmVsIDIuMy4xOCwgdGhlIHJheV9jcyBkcml2ZXIgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsCitzb3VyY2UuICBNeSB3ZWIgcGFnZSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIHJheV9jcyBpcyBhdAoraHR0cDovL3dvcmxkLnN0ZC5jb20vfmNvcmV5L3JheWxpbmsuaHRtbCBhbmQgSSBjYW4gYmUgZW1haWxlZCBhdAorY29yZXlAd29ybGQuc3RkLmNvbQorCitUaGUga2VybmVsIGRyaXZlciBpcyBiYXNlZCBvbiByYXlfY3MtMS42Mi50Z3oKKworVGhlIGRyaXZlciBhdCBteSB3ZWIgcGFnZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGFuIGFkZCBvbiB0bworRGF2aWQgSGluZHMgcGNtY2lhIHBhY2thZ2UuICBBbGwgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFyZQorYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUuICBXaGVuIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgb25seQordGhlIGVzc2lkPSBzdHJpbmcgcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSB2aWEgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCitUaGlzIHdpbGwgY2hhbmdlIGFmdGVyIHRoZSBtZXRob2Qgb2Ygc29ydGluZyBvdXQgcGFyYW1ldGVycyBmb3IgYWxsCit0aGUgUENNQ0lBIGRyaXZlcnMgaXMgYWdyZWVkIHVwb24uICBJZiB5b3UgbXVzdCBoYXZlIGEgYnVpbHQgaW4gZHJpdmVyCit3aXRoIG5vbmRlZmF1bHQgcGFyYW1ldGVycywgdGhleSBjYW4gYmUgZWRpdGVkIGluCisvdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldC9wY21jaWEvcmF5X2NzLmMuICBTZWFyY2hpbmcgZm9yIE1PRFVMRV9QQVJNCit3aWxsIGZpbmQgdGhlbSBhbGwuCisKK0luZm9ybWF0aW9uIG9uIGNhcmQgc2VydmljZXMgaXMgYXZhaWxhYmxlIGF0OgorCWZ0cDovL2h5cGVyLnN0YW5mb3JkLmVkdS9wdWIvcGNtY2lhL2RvYworICAgICAgICBodHRwOi8vaHlwZXIuc3RhbmZvcmQuZWR1L0h5cGVyTmV3cy9nZXQvcGNtY2lhL2hvbWUuaHRtbAorCisKK0NhcmQgc2VydmljZXMgdXNlciBwcm9ncmFtcyBhcmUgc3RpbGwgcmVxdWlyZWQgZm9yIFBDTUNJQSBkZXZpY2VzLgorcGNtY2lhLWNzLTMuMS4xIG9yIGdyZWF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoZSBrZXJuZWwgdmVyc2lvbiBvZgordGhlIGRyaXZlci4KKworQ3VycmVudGx5LCByYXlfY3MgaXMgbm90IHBhcnQgb2YgRGF2aWQgSGluZHMgY2FyZCBzZXJ2aWNlcyBwYWNrYWdlLAorc28gdGhlIGZvbGxvd2luZyBtYWdpYyBpcyByZXF1aXJlZC4KKworQXQgdGhlIGVuZCBvZiB0aGUgL2V0Yy9wY21jaWEvY29uZmlnLm9wdHMgZmlsZSwgYWRkIHRoZSBsaW5lOiAKK3NvdXJjZSAuL3JheV9jcy5vcHRzIAorVGhpcyB3aWxsIG1ha2UgY2FyZCBzZXJ2aWNlcyByZWFkIHRoZSByYXlfY3Mub3B0cyBmaWxlCit3aGVuIHN0YXJ0aW5nLiAgQ3JlYXRlIHRoZSBmaWxlIC9ldGMvcGNtY2lhL3JheV9jcy5vcHRzIGNvbnRhaW5pbmcgdGhlCitmb2xsb3dpbmc6CisKKyMjIyMgc3RhcnQgb2YgL2V0Yy9wY21jaWEvcmF5X2NzLm9wdHMgIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFJheWxpbmsgV2lyZWxlc3MgTEFOIFBDTUNJQSBjYXJkCitkZXZpY2UgInJheV9jcyIKKyAgY2xhc3MgIm5ldHdvcmsiIG1vZHVsZSAibWlzYy9yYXlfY3MiCisKK2NhcmQgIlJheUxpbmsgUEMgQ2FyZCBXTEFOIEFkYXB0ZXIiCisgIG1hbmZpZCAweDAxYTYsIDB4MDAwMAorICBiaW5kICJyYXlfY3MiCisKK21vZHVsZSAibWlzYy9yYXlfY3MiIG9wdHMgIiIKKyMjIyMgZW5kIG9mIC9ldGMvcGNtY2lhL3JheV9jcy5vcHRzICMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK1RvIGpvaW4gYW4gZXhpc3RpbmcgbmV0d29yayB3aXRoCitkaWZmZXJlbnQgcGFyYW1ldGVycywgY29udGFjdCB0aGUgbmV0d29yayBhZG1pbmlzdHJhdG9yIGZvciB0aGUgCitjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCBhbmQgZWRpdCAvZXRjL3BjbWNpYS9yYXlfY3Mub3B0cy4KK0FkZCB0aGUgcGFyYW1ldGVycyBiZWxvdyBiZXR3ZWVuIHRoZSBlbXB0eSBxdW90ZXMuCisKK1BhcmFtZXRlcnMgZm9yIHJheV9jcyBkcml2ZXIgd2hpY2ggbWF5IGJlIHNwZWNpZmllZCBpbiByYXlfY3Mub3B0czoKKworYmMgICAgICAgICAgICAgIGludGVnZXIgICAgICAgICAwID0gbm9ybWFsIG1vZGUgKDgwMi4xMSB0aW1pbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBzbG93IGRvd24gaW50ZXIgZnJhbWUgdGltaW5nIHRvIGFsbG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gd2l0aCBvbGRlciBicmVlemVjb20gYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMuCisKK2JlYWNvbl9wZXJpb2QJaW50ZWdlciAgICAgICAgIGJlYWNvbiBwZXJpb2QgaW4gS2lsby1taWNyb3NlY29uZHMKKwkJCQlsZWdhbCB2YWx1ZXMgPSBtdXN0IGJlIGludGVnZXIgbXVsdGlwbGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGhvcCBkd2VsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gMjU2CisKK2NvdW50cnkgICAgICAgICBpbnRlZ2VyICAgICAgICAgMSA9IFVTQSAoZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9IEV1cm9wZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0gSmFwYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA9IEtvcmVhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgPSBTcGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ID0gRnJhbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgPSBJc3JhZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCA9IEF1c3RyYWxpYQorCitlc3NpZAkJc3RyaW5nCQlFU1MgSUQgLSBuZXR3b3JrIG5hbWUgdG8gam9pbgorCQkJCXN0cmluZyB3aXRoIG1heGltdW0gbGVuZ3RoIG9mIDMyIGNoYXJzCisJCQkJZGVmYXVsdCB2YWx1ZSA9ICJBREhPQ19FU1NJRCIKKworaG9wX2R3ZWxsCWludGVnZXIgICAgICAgICBob3AgZHdlbGwgdGltZSBpbiBLaWxvLW1pY3Jvc2Vjb25kcyAKKwkJCQlsZWdhbCB2YWx1ZXMgPSAxNiwzMiw2NCwxMjgoZGVmYXVsdCksMjU2CisKK2lycV9tYXNrCWludGVnZXIgICAgICAgICBsaW51eCBzdGFuZGFyZCAxNiBiaXQgdmFsdWUgMWJpdC9JUlEKKwkJCQlsc2IgaXMgSVJRIDAsIGJpdCAxIGlzIElSUSAxIGV0Yy4KKwkJCQlVc2VkIHRvIHJlc3RyaWN0IGNob2ljZSBvZiBJUlEncyB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIG1ldGhvZCBmb3IgY29udHJvbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyBpcyBpbiAvZXRjL3BjbWNpYS9jb25maWcub3B0cworCituZXRfdHlwZQlpbnRlZ2VyCQkwIChkZWZhdWx0KSA9IGFkaG9jIG5ldHdvcmssIAorCQkJCTEgPSBpbmZyYXN0cnVjdHVyZQorCitwaHlfYWRkcglzdHJpbmcgICAgICAgICAgc3RyaW5nIGNvbnRhaW5pbmcgbmV3IE1BQyBhZGRyZXNzIGluCisJCQkJaGV4LCBtdXN0IHN0YXJ0IHdpdGggeCBlZworCQkJCXgwMDAwOGYxMjM0NTYKKworcHNtCQlpbnRlZ2VyICAgICAgICAgMCA9IGNvbnRpbnVvdXNseSBhY3RpdmUKKwkJCQkxID0gcG93ZXIgc2F2ZSBtb2RlIChub3QgdXNlZnVsIHlldCkKKworcGNfZGVidWcJaW50ZWdlcgkJKDAtNSkgbGFyZ2VyIHZhbHVlcyBmb3IgbW9yZSB2ZXJib3NlCisJCQkJbG9nZ2luZy4gIFJlcGxhY2VzIHJheV9kZWJ1Zy4KKworcmF5X2RlYnVnCWludGVnZXIJCVJlcGxhY2VkIHdpdGggcGNfZGVidWcKKworcmF5X21lbV9zcGVlZCAgIGludGVnZXIgICAgICAgICBkZWZhdWx0cyB0byA1MDAKKworc25pZmZlciAgICAgICAgIGludGVnZXIgICAgICAgICAwID0gbm90IHNuaWZmZXIgKGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBzbmlmZmVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlY29yZCBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsgdHJhZmZpYyB1c2luZyB0Y3BkdW1wIG9yIHNpbWlsYXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IG5vIG5vcm1hbCBuZXR3b3JrIHVzZSBpcyBhbGxvd2VkLgorCit0cmFuc2xhdGUJaW50ZWdlcgkJMCA9IG5vIHRyYW5zbGF0aW9uIChlbmNhcHN1bGF0ZSBmcmFtZXMpCisJCQkJMSA9IHRyYW5zbGF0aW9uICAgIChSRkMxMDQyLzgwMi4xKQorCisKK01vcmUgb24gc25pZmZlciBtb2RlOgorCit0Y3BkdW1wIGRvZXMgbm90IHVuZGVyc3RhbmQgODAyLjExIGhlYWRlcnMsIHNvIGl0IGNhbid0CitpbnRlcnByZXQgdGhlIGNvbnRlbnRzLCBidXQgaXQgY2FuIHJlY29yZCB0byBhIGZpbGUuICBUaGlzIGlzIG9ubHkKK3VzZWZ1bCBmb3IgZGVidWdnaW5nIDgwMi4xMSBsb3dsZXZlbCBwcm90b2NvbHMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8KK2xpbnV4LiAgSWYgeW91IHdhbnQgdG8gd2F0Y2ggZnRwIHhmZXJzLCBvciBkbyBzaW1pbGFyIHRoaW5ncywgeW91Citkb24ndCBuZWVkIHRvIHVzZSBzbmlmZmVyIG1vZGUuICBBbHNvLCBzb21lIHBhY2tldCB0eXBlcyBhcmUgbmV2ZXIKK3NlbnQgdXAgYnkgdGhlIGNhcmQsIHNvIHlvdSB3aWxsIG5ldmVyIHNlZSB0aGVtIChhY2ssIHJ0cywgY3RzLCBwcm9iZQorZXRjLikgIFRoZXJlIGlzIGEgc2ltcGxlIHByb2dyYW0gKHNob3djYXApIGluY2x1ZGVkIGluIHRoZSByYXlfY3MKK3BhY2thZ2Ugd2hpY2ggcGFyc2VzIHRoZSA4MDIuMTEgaGVhZGVycy4KKworS25vd24gUHJvYmxlbXMgYW5kIG1pc3NpbmcgZmVhdHVyZXMKKworICAgICAgICBEb2VzIG5vdCB3b3JrIHdpdGggbm9uIHg4NgorCisJRG9lcyBub3Qgd29yayB3aXRoIFNNUAorCisJU3VwcG9ydCBmb3IgZGVmcmFnbWVudGluZyBmcmFtZXMgaXMgbm90IHlldCBkZWJ1Z2dlZCwgYW5kIGluCisJZmFjdCBpcyBrbm93biB0byBub3Qgd29yay4gIEkgaGF2ZSBuZXZlciBlbmNvdW50ZXJlZCBhIG5ldCBzZXQKKwl1cCB0byBmcmFnbWVudCwgYnV0IHN0aWxsLCBpdCBzaG91bGQgYmUgZml4ZWQuCisKKwlUaGUgaW9jdGwgc3VwcG9ydCBpcyBpbmNvbXBsZXRlLiAgVGhlIGhhcmR3YXJlIGFkZHJlc3MgY2Fubm90IGJlIHNldAorCXVzaW5nIGlmY29uZmlnIHlldC4gIElmIGEgZGlmZmVyZW50IGhhcmR3YXJlIGFkZHJlc3MgaXMgbmVlZGVkLCBpdCBtYXkKKwliZSBzZXQgdXNpbmcgdGhlIHBoeV9hZGRyIHBhcmFtZXRlciBpbiByYXlfY3Mub3B0cy4gIFRoaXMgcmVxdWlyZXMKKwlhIGNhcmQgaW5zZXJ0aW9uIHRvIHRha2UgZWZmZWN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JvdXRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JvdXRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjgzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcm91dGluZy50eHQKQEAgLTAsMCArMSw0NiBAQAorVGhlIGRpcmVjdG9yeSBmdHAuaW5yLmFjLnJ1Oi9pcC1yb3V0aW5nIGNvbnRhaW5zOgorCistIGlwcm91dGUuYyAtICJwcm9mZXNzaW9uYWwiIHJvdXRpbmcgdGFibGUgbWFpbnRlbmFuY2UgdXRpbGl0eS4KKworLSByZGlzYy50YXIuZ3ogLSByZGlzYyBkYWVtb24sIHBvcnRlZCBmcm9tIFN1bi4KKwlTVFJPTkdMWSBSRUNPTU1FTkRFRCBGT1IgQUxMIEhPU1RTLgorCistIHJvdXRpbmcudGd6IC0gb3JpZ2luYWwgTWlrZSBNY0xhZ2FuJ3Mgcm91dGUgYnkgc291cmNlIHBhdGNoLgorCQlDdXJyZW50bHkgaXQgaXMgb2Jzb2xldGUuCisKKy0gZ2F0ZWQuZGlmLXNzPE5FV0VTVD4uZ3ogLSBnYXRlZC1SM182QWxwaGFfMiBmaXhlcy4KKwkgICAgICAgIExvb2sgYXQgUkVBRE1FLmdhdGVkCisKKy0gbXJvdXRlZC0zLjguZGlmLmd6IC0gbXJvdXRlZC0zLjggZml4ZXMuCisKKy0gcnRtb24uYyAtIHRyaXZpYWwgZGVidWdnaW5nIHV0aWxpdHk6IHJlYWRzIGFuZCBzdG9yZXMgbmV0bGluay4KKworCitORVdTIGZvciB1c2VyLgorCistIFBvbGljeSBiYXNlZCByb3V0aW5nLiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgbWFkZSBvbiB0aGUgYmFzaXMKKyAgbm90IG9ubHkgb2YgZGVzdGluYXRpb24gYWRkcmVzcywgYnV0IGFsc28gc291cmNlIGFkZHJlc3MsCisgIFRPUyBhbmQgaW5jb21pbmcgaW50ZXJmYWNlLgorLSBDb21wbGV0ZSBzZXQgb2YgSVAgbGV2ZWwgY29udHJvbCBtZXNzYWdlcy4KKyAgTm93IExpbnV4IGlzIHRoZSBvbmx5IE9TIGluIHRoZSB3b3JsZCBjb21wbHlpbmcgdG8gUkZDIHJlcXVpcmVtZW50cy4KKyAgR3JlYXQgd2luIDgpCistIE5ldyBpbnRlcmZhY2UgYWRkcmVzc2luZyBwYXJhZGlnbS4KKyAgQXNzaWdubWVudCBvZiBhZGRyZXNzIHJhbmdlcyB0byBpbnRlcmZhY2UsCisgIG11bHRpcGxlIHByZWZpeGVzIGV0Yy4gZXRjLgorICBEbyBub3QgYm90aGVyLCBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9sZCBvbmUuIE1vcmVvdmVyOgorLSBZb3UgZG9uJ3QgbmVlZCB0byBkbyAicm91dGUgYWRkIGFhYS5iYmIuY2NjLi4uIGV0aDAiIGFueW1vcmUsCisgIGl0IGlzIGRvbmUgYXV0b21hdGljYWxseS4KKy0gIkFic3RyYWN0IiBVTklYIHNvY2tldHMgYW5kIHNlY3VyaXR5IGVuaGFuY2VtZW50cy4KKyAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gdXNlIFRJUlBDIGFuZCBUTEkgZW11bGF0aW9uIGxpYnJhcnkuCisKK05FV1MgZm9yIGhhY2tlci4KKworLSBOZXcgZGVzdGluYXRpb24gY2FjaGUuIEZsZXhpYmxlLCByb2J1c3QgYW5kIGp1c3QgYmVhdXRpZnVsLgorLSBOZXR3b3JrIHN0YWNrIGlzIHJlb3JkZXJlZCwgc2ltcGxpZmllZCwgb3B0aW1pemVkLCBhIGxvdCBvZiBidWdzIGZpeGVkLgorICAod2VsbCwgYW5kIG5ldyBidWdzIHdlcmUgaW50cm9kdWNlZCwgYnV0IEkgaGF2ZW4ndCBzZWVuIHRoZW0geWV0IDgpKQorICBJdCBpcyBkaWZmaWN1bHQgdG8gZGVzY3JpYmUgYWxsIHRoZSBjaGFuZ2VzLCBsb29rIGludG8gc291cmNlLgorCitJZiB5b3Ugc2VlIHRoaXMgZmlsZSwgdGhlbiB0aGlzIHBhdGNoIHdvcmtzIDgpCisKK0FsZXhleSBLdXpuZXRzb3YuCitrdXpuZXRAbXMyLmluci5hYy5ydQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MjZiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKQEAgLTAsMCArMSw0OCBAQAorUzJJTyBUZWNobm9sb2dpZXMgWEZyYW1lIDEwIEdpZyBhZGFwdGVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJLiBNb2R1bGUgbG9hZGFibGUgcGFyYW1ldGVycy4KK1doZW4gbG9hZGVkIGFzIGEgbW9kdWxlLCB0aGUgZHJpdmVyIHByb3ZpZGVzIGEgaG9zdCBvZiBNb2R1bGUgbG9hZGFibGUKK3BhcmFtZXRlcnMsIHNvIHRoZSBkZXZpY2UgY2FuIGJlIHR1bmVkIGFzIHBlciB0aGUgdXNlcnMgbmVlZHMuCitBIGxpc3Qgb2YgdGhlIE1vZHVsZSBwYXJhbXMgaXMgZ2l2ZW4gYmVsb3cuCisoaSkJcmluZ19udW06IFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvZ3JhbSB0aGUgbnVtYmVyIG9mCisJCSByZWNlaXZlIHJpbmdzIHVzZWQgaW4gdGhlIGRyaXZlci4KKyhpaSkJcmluZ19sZW46IFRoaXMgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGVhY2ggcmluZworCQkgY2FuIGhhdmUuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgOCByaW5ncy4KKyhpaWkpCWZyYW1lX2xlbjogVGhpcyBpcyBhbiBhcnJheSBvZiBzaXplIDguIFVzaW5nIHRoaXMgd2UgY2FuIAorCQkgc2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHJlY2VpdmVkIGZyYW1lIHRoYXQgY2FuCisJCSBiZSBzdGVlcmVkIGludG8gdGhlIGNvcnJzcG9uZGluZyByZWNlaXZlIHJpbmcuCQorKGl2KQlmaWZvX251bTogVGhpcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgVHggRklGT3MgdGhhdHMgdXNlZCBpbgorCQkgdGhlIGRyaXZlci4gCisodikJZmlmb19sZW46IEVhY2ggZWxlbWVudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgCisgCQkgVHggZGVzY3JpcHRvcnMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGVhY2ggCisJCSBjb3JyZXNwb25kaW5nIEZJRk8uIFRoZXJlIGFyZSBhIG1heGltdW0gb2YgOCBGSUZPcy4KKyh2aSkJdHhfcHJpbzogVGhpcyBpcyBhIGJvb2wsIGlmIG1vZHVsZSBpcyBsb2FkZWQgd2l0aCBhIG5vbi16ZXJvCisJCXZhbHVlIGZvciB0eF9wcmlvIG11bHRpIEZJRk8gc2NoZW1lIGlzIGFjdGl2YXRlZC4KKyh2aWkpCXJ4X3ByaW86IFRoaXMgaXMgYSBib29sLCBpZiBtb2R1bGUgaXMgbG9hZGVkIHdpdGggYSBub24temVybworCQl2YWx1ZSBmb3IgdHhfcHJpbyBtdWx0aSBSSU5HIHNjaGVtZSBpcyBhY3RpdmF0ZWQuCisodmlpaSkJbGF0ZW5jeV90aW1lcjogVGhlIHZhbHVlIGdpdmVuIGFnYWluc3QgdGhpcyBwYXJhbSB3aWxsIGJlCisJCSBsb2FkZWQJaW50byB0aGUgbGF0ZW5jeSB0aW1lciByZWdpc3RlciBpbiBQQ0kgQ29uZmlnCisJCSBzcGFjZSwgZWxzZSB0aGUgcmVnaXN0ZXIgaXMgbGVmdCB3aXRoIGl0cyByZXNldCB2YWx1ZS4KKworSUkuIFBlcmZvcm1hbmNlIHR1bmluZy4KKyBCeSBjaGFuZ2luZyBhIGZldyBzeXNjdGwgcGFyYW1ldGVycy4KKwlDb3B5IHRoZSBmb2xsb3dpbmcgbGluZXMgaW50byBhIGZpbGUgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQsCisJInN5c2N0bCAtcCA8ZmlsZV9uYW1lPiIKKyMjIyBJUFY0IHNwZWNpZmljIHNldHRpbmdzCituZXQuaXB2NC50Y3BfdGltZXN0YW1wcyA9IDAgIyB0dXJucyBUQ1AgdGltZXN0YW1wIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IDEsIHJlZHVjZXMgQ1BVIHVzZQorbmV0LmlwdjQudGNwX3NhY2sgPSAwICMgdHVybiBTQUNLIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IG9uCisjIG9uIHN5c3RlbXMgd2l0aCBhIFZFUlkgZmFzdCBidXMgLT4gbWVtb3J5IGludGVyZmFjZSB0aGlzIGlzIHRoZSBiaWcgZ2FpbmVyCituZXQuaXB2NC50Y3Bfcm1lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vZGVmYXVsdC9tYXggVENQIHJlYWQgYnVmZmVyLCBkZWZhdWx0IDQwOTYgODczODAgMTc0NzYwCituZXQuaXB2NC50Y3Bfd21lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vcHJlc3N1cmUvbWF4IFRDUCB3cml0ZSBidWZmZXIsIGRlZmF1bHQgNDA5NiAxNjM4NCAxMzEwNzIKK25ldC5pcHY0LnRjcF9tZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMCAjIHNldHMgbWluL3ByZXNzdXJlL21heCBUQ1AgYnVmZmVyIHNwYWNlLCBkZWZhdWx0IDMxNzQ0IDMyMjU2IDMyNzY4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyMjIENPUkUgc2V0dGluZ3MgKG1vc3RseSBmb3Igc29ja2V0IGFuZCBVRFAgZWZmZWN0KQorbmV0LmNvcmUucm1lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDEzMTA3MQorbmV0LmNvcmUud21lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDEzMTA3MQorbmV0LmNvcmUucm1lbV9kZWZhdWx0ID0gNTI0Mjg3ICMgZGVmYXVsdCByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCA2NTUzNQorbmV0LmNvcmUud21lbV9kZWZhdWx0ID0gNTI0Mjg3ICMgZGVmYXVsdCBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCA2NTUzNQorbmV0LmNvcmUub3B0bWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gYW1vdW50IG9mIG9wdGlvbiBtZW1vcnkgYnVmZmVycywgZGVmYXVsdCAxMDI0MAorbmV0LmNvcmUubmV0ZGV2X21heF9iYWNrbG9nID0gMzAwMDAwICMgbnVtYmVyIG9mIHVucHJvY2Vzc2VkIGlucHV0IHBhY2tldHMgYmVmb3JlIGtlcm5lbCBzdGFydHMgZHJvcHBpbmcgdGhlbSwgZGVmYXVsdCAzMDAKKy0tLUVuZCBvZiBwZXJmb3JtYW5jZSB0dW5pbmcgZmlsZS0tLQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2N0cC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2N0cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3OTBhNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zY3RwLnR4dApAQCAtMCwwICsxLDM4IEBACitMaW51eCBLZXJuZWwgU0NUUCAKKworVGhpcyBpcyB0aGUgY3VycmVudCBCRVRBIHJlbGVhc2Ugb2YgdGhlIExpbnV4IEtlcm5lbCBTQ1RQIHJlZmVyZW5jZQoraW1wbGVtZW50YXRpb24uICAKKworU0NUUCAoU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sKSBpcyBhIElQIGJhc2VkLCBtZXNzYWdlIG9yaWVudGVkLAorcmVsaWFibGUgdHJhbnNwb3J0IHByb3RvY29sLCB3aXRoIGNvbmdlc3Rpb24gY29udHJvbCwgc3VwcG9ydCBmb3IKK3RyYW5zcGFyZW50IG11bHRpLWhvbWluZywgYW5kIG11bHRpcGxlIG9yZGVyZWQgc3RyZWFtcyBvZiBtZXNzYWdlcy4KK1JGQzI5NjAgZGVmaW5lcyB0aGUgY29yZSBwcm90b2NvbC4gIFRoZSBJRVRGIFNJR1RSQU4gd29ya2luZyBncm91cCBvcmlnaW5hbGx5CitkZXZlbG9wZWQgdGhlIFNDVFAgcHJvdG9jb2wgYW5kIGxhdGVyIGhhbmRlZCB0aGUgcHJvdG9jb2wgb3ZlciB0byB0aGUgCitUcmFuc3BvcnQgQXJlYSAoVFNWV0cpIHdvcmtpbmcgZ3JvdXAgZm9yIHRoZSBjb250aW51ZWQgZXZvbHZlbWVudCBvZiBTQ1RQIGFzIGEgCitnZW5lcmFsIHB1cnBvc2UgdHJhbnNwb3J0LiAgCisKK1NlZSB0aGUgSUVURiB3ZWJzaXRlIChodHRwOi8vd3d3LmlldGYub3JnKSBmb3IgZnVydGhlciBkb2N1bWVudHMgb24gU0NUUC4gCitTZWUgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjk2MC50eHQgCisKK1RoZSBpbml0aWFsIHByb2plY3QgZ29hbCBpcyB0byBjcmVhdGUgYW4gTGludXgga2VybmVsIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorb2YgU0NUUCB0aGF0IGlzIFJGQyAyOTYwIGNvbXBsaWFudCBhbmQgcHJvdmlkZXMgYW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIAorcmVmZXJyZWQgdG8gYXMgdGhlICBVRFAtc3R5bGUgQVBJIG9mIHRoZSBTb2NrZXRzIEV4dGVuc2lvbnMgZm9yIFNDVFAsIGFzIAorcHJvcG9zZWQgaW4gSUVURiBJbnRlcm5ldC1EcmFmdHMuICAgIAorCisKK0NhdmVhdHM6ICAKKworLWxrc2N0cCBjYW4gYmUgYnVpbHQgYXMgc3RhdGljYWxseSBvciBhcyBhIG1vZHVsZS4gIEhvd2V2ZXIsIGJlIGF3YXJlIHRoYXQgCittb2R1bGUgcmVtb3ZhbCBvZiBsa3NjdHAgaXMgbm90IHlldCBhIHNhZmUgYWN0aXZpdHkuICAgCisKKy1UaGVyZSBpcyB0ZW50YXRpdmUgc3VwcG9ydCBmb3IgSVB2NiwgYnV0IG1vc3Qgd29yayBoYXMgZ29uZSB0b3dhcmRzIAoraW1wbGVtZW50YXRpb24gYW5kIHRlc3RpbmcgbGtzY3RwIG9uIElQdjQuICAgCisKKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSB2aXNpdCB0aGUgbGtzY3RwIHByb2plY3Qgd2Vic2l0ZToKKyAgIGh0dHA6Ly93d3cuc2YubmV0L3Byb2plY3RzL2xrc2N0cAorCitPciBjb250YWN0IHRoZSBsa3NjdHAgZGV2ZWxvcGVycyB0aHJvdWdoIHRoZSBtYWlsaW5nIGxpc3Q6CisgICA8bGtzY3RwLWRldmVsb3BlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0PiAKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2hhcGVyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaGFwZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGViYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2hhcGVyLnR4dApAQCAtMCwwICsxLDQ4IEBACitUcmFmZmljIFNoYXBlciBGb3IgTGludXgKKworVGhpcyBpcyB0aGUgY3VycmVudCBCRVRBIHJlbGVhc2Ugb2YgdGhlIHRyYWZmaWMgc2hhcGVyIGZvciBMaW51eC4gSXQgd29ya3MKK3dpdGhpbiB0aGUgZm9sbG93aW5nIGxpbWl0czoKKworbwlNaW5pbXVtIHNoYXBpbmcgc3BlZWQgaXMgY3VycmVudGx5IGFib3V0IDk2MDAgYmF1ZCAoaXQgY2FuIG9ubHkKK3NoYXBlIGRvd24gdG8gMSBieXRlIHBlciBjbG9jayB0aWNrKQorCitvCU1heGltdW0gaXMgYWJvdXQgMjU2SywgaXQgd2lsbCBnbyBhYm92ZSB0aGlzIGJ1dCBnZXQgYSBiaXQgYmxvY2t5LgorCitvCUlmIHlvdSBpZmNvbmZpZyB0aGUgbWFzdGVyIGRldmljZSB0aGF0IGEgc2hhcGVyIGlzIGF0dGFjaGVkIHRvIGRvd24KK3RoZW4geW91ciBtYWNoaW5lIHdpbGwgZm9sbG93LgorCitvCVRoZSBzaGFwZXIgbXVzdCBiZSBhIG1vZHVsZS4KKworCitTZXR1cDoKKworCUEgc2hhcGVyIGRldmljZSBpcyBjb25maWd1cmVkIHVzaW5nIHRoZSBzaGFwZWNvbmZpZyBwcm9ncmFtLgorVHlwaWNhbGx5IHlvdSB3aWxsIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMKKworc2hhcGVjZmcgYXR0YWNoIHNoYXBlcjAgZXRoMQorc2hhcGVjZmcgc3BlZWQgc2hhcGVyMCA2NDAwMAoraWZjb25maWcgc2hhcGVyMCBteWhvc3QgbmV0bWFzayAyNTUuMjU1LjI1NS4yNDAgYnJvYWRjYXN0IDEuMi4zLjQuMjU1IHVwCityb3V0ZSBhZGQgLW5ldCBzb21lLm5ldHdvcmsgbmV0bWFzayBhLmIuYy5kIGRldiBzaGFwZXIwCisKK1RoZSBzaGFwZXIgc2hvdWxkIGhhdmUgdGhlIHNhbWUgSVAgYWRkcmVzcyBhcyB0aGUgZGV2aWNlIGl0IGlzIGF0dGFjaGVkIHRvCitmb3Igbm9ybWFsIHVzZS4KKworR290Y2hhczoKKworCVRoZSBzaGFwZXIgc2hhcGVzIHRyYW5zbWl0dGVkIHRyYWZmaWMuIEl0J3MgcmF0aGVyIGltcG9zc2libGUgdG8KK3NoYXBlIHJlY2VpdmVkIHRyYWZmaWMgZXhjZXB0IGF0IHRoZSBlbmQgKG9yIGEgcm91dGVyKSB0cmFuc21pdHRpbmcgaXQuCisKKwlHYXRlZC9yb3V0ZWQvcndob2QvbXJvdXRlZCBhbGwgc2VlIHRoZSBzaGFwZXIgYXMgYW4gYWRkaXRpb25hbCBkZXZpY2UKK2FuZCB3aWxsIHRyZWF0IGl0IGFzIHN1Y2ggdW5sZXNzIHBhdGNoZWQuIE5vdGUgdGhhdCBmb3IgbXJvdXRlZCB5b3UgY2FuIHJ1bgorbXJvdXRlZCB0dW5uZWxzIHZpYSBhIHRyYWZmaWMgc2hhcGVyIHRvIGNvbnRyb2wgYmFuZHdpZHRoIHVzYWdlLgorCisJVGhlIHNoYXBlciBpcyBkZXZpY2Uvcm91dGUgYmFzZWQuIFRoaXMgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIHVzZQord2l0aCBhbnkgc2V0dXAgQlVUIGxlc3MgZmxleGlibGUuIFlvdSBtYXkgbmVlZCB0byB1c2UgaXByb3V0ZTIgdG8gc2V0IHVwCittdWx0aXBsZSByb3V0ZSB0YWJsZXMgdG8gZ2V0IHRoZSBmbGV4aWJpbGl0eS4KKworCVRoZXJlIGlzIG5vICJib3Jyb3dpbmciIG9yICJzaGFyaW5nIiBzY2hlbWUuIFRoaXMgaXMgYSBzaW1wbGUKK3RyYWZmaWMgbGltaXRlci4gV2UgaW1wbGVtZW50IFZhbiBKYWNvYnNvbiBhbmQgU2FsbHkgRmxveWQncyBDQlEKK2FyY2hpdGVjdHVyZSBpbnRvIExpbnV4IDIuMi4gVGhpcyBpcyB0aGUgcHJlZmVycmVkIHNvbHV0aW9uLiBTaGFwZXIgaXMKK2ZvciBzaW1wbGUgb3IgYmFjayBjb21wYXRpYmxlIHNldHVwcy4KKworQWxhbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NpczkwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2lzOTAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGRmZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NpczkwMC50eHQKQEAgLTAsMCArMSwyNTcgQEAKKworU2lTIDkwMC83MDE2IEZhc3QgRXRoZXJuZXQgRGV2aWNlIERyaXZlcgorCitPbGxpZSBMaG8KKworTGVpIENodW4gQ2hhbmcKKworICAgQ29weXJpZ2h0IKkgMTk5OSBieSBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnAuCisgICAKKyAgIFRoaXMgZG9jdW1lbnQgZ2l2ZXMgc29tZSBpbmZvcm1hdGlvbiBvbiBpbnN0YWxsYXRpb24gYW5kIHVzYWdlIG9mIFNpUworICAgOTAwLzcwMTYgZGV2aWNlIGRyaXZlciB1bmRlciBMaW51eC4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgIFVTQQorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCisgICBUYWJsZSBvZiBDb250ZW50cworICAgMS4gSW50cm9kdWN0aW9uCisgICAyLiBDaGFuZ2VzCisgICAzLiBUZXN0ZWQgRW52aXJvbm1lbnQKKyAgIDQuIEZpbGVzIGluIFRoaXMgUGFja2FnZQorICAgNS4gSW5zdGFsbGF0aW9uCisgICAgICAgICAgCisgICAgICAgIEJ1aWxkaW5nIHRoZSBkcml2ZXIgYXMgbG9hZGFibGUgbW9kdWxlCisgICAgICAgIEJ1aWxkaW5nIHRoZSBkcml2ZXIgaW50byBrZXJuZWwKKyAgICAgICAgICAgICAgICAKKyAgIDYuIEtub3duIFByb2JsZW1zIGFuZCBCdWdzCisgICA3LiBSZXZpc2lvbiBIaXN0b3J5CisgICA4LiBBY2tub3dsZWRnZW1lbnRzCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgMS4gSW50cm9kdWN0aW9uCisKKyAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSByZXZpc2lvbiAxLjA2IGFuZCAxLjA3IG9mIFNpUyA5MDAvNzAxNgorICAgRmFzdCBFdGhlcm5ldCBkZXZpY2UgZHJpdmVyIHVuZGVyIExpbnV4LiBUaGUgZHJpdmVyIGlzIGRldmVsb3BlZCBieQorICAgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbSBDb3JwLiBhbmQgZGlzdHJpYnV0ZWQgZnJlZWx5IHVuZGVyIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuIFRoZSBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbG9hZGFibGUKKyAgIG1vZHVsZSBhbmQgdXNlZCB1bmRlciBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjIueC4gKHJldi4gMS4wNikgV2l0aAorICAgbWluaW1hbCBjaGFuZ2VzLCB0aGUgZHJpdmVyIGNhbiBhbHNvIGJlIHVzZWQgdW5kZXIgMi4zLnggYW5kIDIuNC54CisgICBrZXJuZWwgKHJldi4gMS4wNyksIHBsZWFzZSBzZWUgQ2hhcHRlciA1LiBJZiB5b3UgYXJlIGludGVuZGVkIHRvIHVzZQorICAgdGhlIGRyaXZlciBmb3IgZWFybGllciBrZXJuZWxzLCB5b3UgYXJlIG9uIHlvdXIgb3duLgorICAgCisgICBUaGUgZHJpdmVyIGlzIHRlc3RlZCB3aXRoIHVzdWFsIFRDUC9JUCBhcHBsaWNhdGlvbnMgaW5jbHVkaW5nIEZUUCwKKyAgIFRlbG5ldCwgTmV0c2NhcGUgZXRjLiBhbmQgaXMgdXNlZCBjb25zdGFudGx5IGJ5IHRoZSBkZXZlbG9wZXJzLgorICAgCisgICBQbGVhc2Ugc2VuZCBhbGwgY29tbWVudHMvZml4ZXMvcXVlc3Rpb25zIHRvIExlaS1DaHVuIENoYW5nLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDIuIENoYW5nZXMKKworICAgQ2hhbmdlcyBtYWRlIGluIFJldmlzaW9uIDEuMDcKKyAgIAorICAgIDEuIFNlcGFyYXRpb24gb2Ygc2lzOTAwLmMgYW5kIHNpczkwMC5oIGluIG9yZGVyIHRvIG1vdmUgbW9zdCBjb25zdGFudAorICAgICAgIGRlZmluaXRpb24gdG8gc2lzOTAwLmggKG1hbnkgb2YgdGhvc2UgY29uc3RhbnRzIHdlcmUgY29ycmVjdGVkKQorICAgIDIuIENsZWFuIHVwIFBDSSBkZXRlY3Rpb24sIHRoZSBwY2ktc2NhbiBmcm9tIERvbmFsZCBCZWNrZXIgd2VyZSBub3QKKyAgICAgICB1c2VkLCBqdXN0IHNpbXBsZSBwY2lfZmluZF8qLgorICAgIDMuIE1JSSBkZXRlY3Rpb24gaXMgbW9kaWZpZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBtaWkgdHJhbnNjZWl2ZXIuCisgICAgNC4gQnVncyBpbiByZWFkX2VlcHJvbSwgbWRpb18qIHdlcmUgcmVtb3ZlZC4KKyAgICA1LiBMb3Qgb2Ygc2lzOTAwIGlycmVsZXZhbnQgY29tbWVudHMgd2VyZSByZW1vdmVkL2NoYW5nZWQgYW5kIG1vcmUKKyAgICAgICBjb21tZW50cyB3ZXJlIGFkZGVkIHRvIHJlZmxlY3QgdGhlIHJlYWwgc2l0dWF0aW9uLgorICAgIDYuIENsZWFuIHVwIG9mIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtZXNzIGluIGJ1ZmZlcgorICAgICAgIGRlc2NyaXB0b3JzLgorICAgIDcuIEJldHRlciB0cmFuc21pdC9yZWNlaXZlIGVycm9yIGhhbmRsaW5nLgorICAgIDguIFRoZSBkcml2ZXIgbm93IHVzZXMgemVyby1jb3B5IHNpbmdsZSBidWZmZXIgbWFuYWdlbWVudCBzY2hlbWUgdG8KKyAgICAgICBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICAgIDkuIE5hbWVzIG9mIHZhcmlhYmxlcyB3ZXJlIGNoYW5nZWQgdG8gYmUgbW9yZSBjb25zaXN0ZW50LgorICAgMTAuIENsZWFuIHVwIG9mIGF1by1uZWdvdGlhdGlvbiBhbmQgdGltZXIgY29kZS4KKyAgIDExLiBBdXRvbWF0aWMgZGV0ZWN0aW9uIGFuZCBjaGFuZ2Ugb2YgUEhZIG9uIHRoZSBmbHkuCisgICAxMi4gQnVnIGluIG1hYyBwcm9iaW5nIGZpeGVkLgorICAgMTMuIEZpeCA2MzBFIGVxdWFsaWVyIHByb2JsZW0gYnkgbW9kaWZ5aW5nIHRoZSBlcXVhbGl6ZXIgd29ya2Fyb3VuZAorICAgICAgIHJ1bGUuCisgICAxNC4gU3VwcG9ydCBmb3IgSUNTMTg5MyAxMC8xMDAgSW50ZXJhdGVkIFBIWWNlaXZlci4KKyAgIDE1LiBTdXBwb3J0IGZvciBtZWRpYSBzZWxlY3QgYnkgaWZjb25maWcuCisgICAxNi4gQWRkZWQga2VybmVsLWRvYyBleHRyYXRhYmxlIGRvY3VtZW50YXRpb24uCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgMy4gVGVzdGVkIEVudmlyb25tZW50CisKKyAgIFRoaXMgZHJpdmVyIGlzIGRldmVsb3BlZCBvbiB0aGUgZm9sbG93aW5nIGhhcmR3YXJlCisgICAKKyAgICAgKiBJbnRlbCBDZWxlcm9uIDUwMCB3aXRoIFNpUyA2MzAgKHJldiAwMikgY2hpcHNldAorICAgICAqIFNpUyA5MDAgKHJldiAwMSkgYW5kIFNpUyA3MDE2LzcwMTQgRmFzdCBFdGhlcm5ldCBDYXJkCisgICAgICAgCisgICBhbmQgdGVzdGVkIHdpdGggdGhlc2Ugc29mdHdhcmUgZW52aXJvbm1lbnRzCisgICAKKyAgICAgKiBSZWQgSGF0IExpbnV4IHZlcnNpb24gNi4yCisgICAgICogTGludXgga2VybmVsIHZlcnNpb24gMi40LjAKKyAgICAgKiBOZXRzY2FwZSB2ZXJzaW9uIDQuNgorICAgICAqIE5jRlRQIDMuMC4wIGJldGEgMTgKKyAgICAgKiBTYW1iYSB2ZXJzaW9uIDIuMC4zCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgNC4gRmlsZXMgaW4gVGhpcyBQYWNrYWdlCisKKyAgIEluIHRoZSBwYWNrYWdlIHlvdSBjYW4gZmluZCB0aGVzZSBmaWxlczoKKyAgIAorICAgc2lzOTAwLmMKKyAgICAgICAgICBEcml2ZXIgc291cmNlIGZpbGUgaW4gQworICAgICAgICAgIAorICAgc2lzOTAwLmgKKyAgICAgICAgICBIZWFkZXIgZmlsZSBmb3Igc2lzOTAwLmMKKyAgICAgICAgICAKKyAgIHNpczkwMC5zZ21sCisgICAgICAgICAgRG9jQm9vayBTR01MIHNvdXJjZSBvZiB0aGUgZG9jdW1lbnQKKyAgICAgICAgICAKKyAgIHNpczkwMC50eHQKKyAgICAgICAgICBEcml2ZXIgZG9jdW1lbnQgaW4gcGxhaW4gdGV4dAorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDUuIEluc3RhbGxhdGlvbgorCisgICBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnAuIGlzIGNvb3BlcmF0aW5nIGNsb3NlbHkgd2l0aCBjb3JlIExpbnV4CisgICBLZXJuZWwgZGV2ZWxvcGVycy4gVGhlIHJldmlzaW9ucyBvZiBTaVMgOTAwIGRyaXZlciBhcmUgZGlzdHJpYnV0ZWQgYnkKKyAgIHRoZSB1c3VhbGwgY2hhbm5lbHMgZm9yIGtlcm5lbCB0YXIgZmlsZXMgYW5kIHBhdGNoZXMuIFRob3NlIGtlcm5lbCB0YXIKKyAgIGZpbGVzIGZvciBvZmZpY2lhbCBrZXJuZWwgYW5kIHBhdGNoZXMgZm9yIGtlcm5lbCBwcmUtcmVsZWFzZSBjYW4gYmUKKyAgIGRvd25sb2FkIGF0IG9mZmljaWFsIGtlcm5lbCBmdHAgc2l0ZSBhbmQgaXRzIG1pcnJvcnMuIFRoZSAxLjA2CisgICByZXZpc2lvbiBjYW4gYmUgZm91bmQgaW4ga2VybmVsIHZlcnNpb24gbGF0ZXIgdGhhbiAyLjMuMTUgYW5kCisgICBwcmUtMi4yLjE0LCBhbmQgMS4wNyByZXZpc2lvbiBjYW4gYmUgZm91bmQgaW4ga2VybmVsIHZlcnNpb24gMi40LjAuIElmCisgICB5b3UgaGF2ZSBubyBwcmlvciBleHBlcmllbmNlIGluIG5ldHdvcmtpbmcgdW5kZXIgTGludXgsIHBsZWFzZSByZWFkCisgICBFdGhlcm5ldCBIT1dUTyBhbmQgTmV0d29ya2luZyBIT1dUTyBhdmFpbGFibGUgZnJvbSBMaW51eCBEb2N1bWVudGF0aW9uCisgICBQcm9qZWN0IChMRFApLgorICAgCisgICBUaGUgZHJpdmVyIGlzIGJ1bmRsZWQgaW4gcmVsZWFzZSBsYXRlciB0aGFuIDIuMi4xMSBhbmQgMi4zLjE1IHNvIHRoaXMKKyAgIGlzIHRoZSBtb3N0IGVhc3kgY2FzZS4gQmUgc3VyZSB5b3UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZXMgZm9yCisgICBjb21waWxpbmcga2VybmVsIHNvdXJjZS4gVGhvc2UgcGFja2FnZXMgYXJlIGxpc3RlZCBpbiBEb2N1bWVudC9DaGFuZ2VzCisgICBpbiBrZXJuZWwgc291cmNlIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGhhdmUgdG8gaW5zdGFsbCB0aGUgZHJpdmVyIG90aGVyCisgICB0aGFuIHRob3NlIGJ1bmRsZWQgaW4ga2VybmVsIHJlbGVhc2UsIHlvdSBzaG91bGQgaGF2ZSB5b3VyIGRyaXZlciBmaWxlCisgICBzaXM5MDAuYyBhbmQgc2lzOTAwLmggY29waWVkIGludG8gL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQvIGZpcnN0LgorICAgVGhlcmUgYXJlIHR3byBhbHRlcm5hdGl2ZSB3YXlzIHRvIGluc3RhbGwgdGhlIGRyaXZlcgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitCdWlsZGluZyB0aGUgZHJpdmVyIGFzIGxvYWRhYmxlIG1vZHVsZQorCisgICBUbyBidWlsZCB0aGUgZHJpdmVyIGFzIGEgbG9hZGFibGUga2VybmVsIG1vZHVsZSB5b3UgaGF2ZSB0bworICAgcmVjb25maWd1cmUgdGhlIGtlcm5lbCB0byBhY3RpdmF0ZSBuZXR3b3JrIHN1cHBvcnQgYnkKKyAgIAorbWFrZSBtZW51Y29uZmlnCisKKyAgIENob29zZSAiTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQgLS0tPiIsIHRoZW4gc2VsZWN0ICJFbmFibGUgbG9hZGFibGUKKyAgIG1vZHVsZSBzdXBwb3J0Ii4KKyAgIAorICAgQ2hvb3NlICJOZXR3b3JrIERldmljZSBTdXBwb3J0IC0tLT4iLCBzZWxlY3QgIkV0aGVybmV0ICgxMCBvcgorICAgMTAwTWJpdCkiLiBUaGVuIHNlbGVjdCAiRUlTQSwgVkxCLCBQQ0kgYW5kIG9uIGJvYXJkIGNvbnRyb2xsZXJzIiwgYW5kCisgICBjaG9vc2UgIlNpUyA5MDAvNzAxNiBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIHN1cHBvcnQiIHRvICJNIi4KKyAgIAorICAgQWZ0ZXIgcmVjb25maWd1cmluZyB0aGUga2VybmVsLCB5b3UgY2FuIG1ha2UgdGhlIGRyaXZlciBtb2R1bGUgYnkKKyAgIAorbWFrZSBtb2R1bGVzCisKKyAgIFRoZSBkcml2ZXIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGggbm8gZXJyb3JzLiBBZnRlciBjb21waWxpbmcgdGhlCisgICBkcml2ZXIsIHRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbGxlZCB0byBwcm9wZXIgcGxhY2UgYnkKKyAgIAorbWFrZSBtb2R1bGVzX2luc3RhbGwKKworICAgTG9hZCB0aGUgZHJpdmVyIGludG8ga2VybmVsIGJ5CisgICAKK2luc21vZCBzaXM5MDAKKworICAgV2hlbiBsb2FkaW5nIHRoZSBkcml2ZXIgaW50byBtZW1vcnksIHNvbWUgaW5mb3JtYXRpb24gbWVzc2FnZSBjYW4gYmUKKyAgIHZpZXcgYnkKKyAgIAorZG1lc2cKKworICAgb3IKK2NhdCAvdmFyL2xvZy9tZXNzYWdlCisKKyAgIElmIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHByb3Blcmx5IHlvdSB3aWxsIGhhdmUgbWVzc2FnZXMgc2ltaWxhciB0bworICAgdGhpczoKKyAgIAorc2lzOTAwLmM6IHYxLjA3LjA2ICAxMS8wNy8yMDAwCitldGgwOiBTaVMgOTAwIFBDSSBGYXN0IEV0aGVybmV0IGF0IDB4ZDAwMCwgSVJRIDEwLCAwMDowMDplODo4Mzo3ZjphNC4KK2V0aDA6IFNpUyA5MDAgSW50ZXJuYWwgTUlJIFBIWSB0cmFuc2NlaXZlciBmb3VuZCBhdCBhZGRyZXNzIDEuCitldGgwOiBVc2luZyBTaVMgOTAwIEludGVybmFsIE1JSSBQSFkgYXMgZGVmYXVsdAorCisgICBzaG93aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgYW5kIHRoZSByZXN1bHRzIG9mIHByb2Jpbmcgcm91dGluZS4KKyAgIAorICAgT25jZSB0aGUgZHJpdmVyIGlzIGxvYWRlZCwgbmV0d29yayBjYW4gYmUgYnJvdWdodCB1cCBieQorICAgCisvc2Jpbi9pZmNvbmZpZyBldGgwIElQQUREUiBicm9hZGNhc3QgQlJPQURDQVNUIG5ldG1hc2sgTkVUTUFTSyBtZWRpYSBUWVBFCisKKyAgIHdoZXJlIElQQUREUiwgQlJPQURDQVNULCBORVRNQVNLIGFyZSB5b3VyIElQIGFkZHJlc3MsIGJyb2FkY2FzdAorICAgYWRkcmVzcyBhbmQgbmV0bWFzayByZXNwZWN0aXZlbHkuIFRZUEUgaXMgdXNlZCB0byBzZXQgbWVkaXVtIHR5cGUgdXNlZAorICAgYnkgdGhlIGRldmljZS4gVHlwaWNhbCB2YWx1ZXMgYXJlICIxMGJhc2VUIih0d2lzdGVkLXBhaXIgMTBNYnBzCisgICBFdGhlcm5ldCkgb3IgIjEwMGJhc2VUIiAodHdpc3RlZC1wYWlyIDEwME1icHMgRXRoZXJuZXQpLiBGb3IgbW9yZQorICAgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbmZpZ3VyZSBuZXR3b3JrIGludGVyZmFjZSwgcGxlYXNlIHJlZmVyIHRvCisgICBOZXR3b3JraW5nIEhPV1RPLgorICAgCisgICBUaGUgbGluayBzdGF0dXMgaXMgYWxzbyBzaG93biBieSBrZXJuZWwgbWVzc2FnZXMuIEZvciBleGFtcGxlLCBhZnRlcgorICAgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGFjdGl2YXRlZCwgeW91IG1heSBoYXZlIHRoZSBtZXNzYWdlOgorICAgCitldGgwOiBNZWRpYSBMaW5rIE9uIDEwMG1icHMgZnVsbC1kdXBsZXgKKworICAgSWYgeW91IHRyeSB0byB1bnBsdWcgdGhlIHR3aXN0IHBhaXIgKFRQKSBjYWJsZSB5b3Ugd2lsbCBnZXQKKyAgIAorZXRoMDogTWVkaWEgTGluayBPZmYKKworICAgaW5kaWNhdGluZyB0aGF0IHRoZSBsaW5rIGlzIGZhaWxlZC4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQnVpbGRpbmcgdGhlIGRyaXZlciBpbnRvIGtlcm5lbAorCisgICBJZiB5b3Ugd2FudCB0byBtYWtlIHRoZSBkcml2ZXIgaW50byBrZXJuZWwsIGNob29zZSAiWSIgcmF0aGVyIHRoYW4gIk0iCisgICBvbiAiU2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydCIgd2hlbiBjb25maWd1cmluZworICAgdGhlIGtlcm5lbC4gQnVpbGQgdGhlIGtlcm5lbCBpbWFnZSBpbiB0aGUgdXN1YWwgd2F5CisgICAKK21ha2UgY2xlYW4KKworbWFrZSBiemxpbG8KKworICAgTmV4dCB0aW1lIHRoZSBzeXN0ZW0gcmVib290LCB5b3UgaGF2ZSB0aGUgZHJpdmVyIGluIG1lbW9yeS4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQ2hhcHRlciA2LiBLbm93biBQcm9ibGVtcyBhbmQgQnVncworCisgICBUaGVyZSBhcmUgc29tZSBrbm93biBwcm9ibGVtcyBhbmQgYnVncy4gSWYgeW91IGZpbmQgYW55IG90aGVyIGJ1Z3MKKyAgIHBsZWFzZSBtYWlsIHRvIGxjY2hhbmdAc2lzLmNvbS50dworICAgCisgICAgMS4gQU03OUM5MDEgSG9tZVBOQSBQSFkgaXMgbm90IHRob3JvdWdobHkgdGVzdGVkLCB0aGVyZSBtYXkgYmUgc29tZQorICAgICAgIGJ1Z3MgaW4gdGhlICJvbiB0aGUgZmx5IiBjaGFuZ2Ugb2YgdHJhbnNjZWl2ZXIuCisgICAgMi4gQSBidWcgaXMgaGlkZGVuIHNvbWV3aGVyZSBpbiB0aGUgcmVjZWl2ZSBidWZmZXIgbWFuYWdlbWVudCBjb2RlLAorICAgICAgIHRoZSBidWcgY2F1c2VzIE5VTEwgcG9pbnRlciByZWZlcmVuY2UgaW4gdGhlIGtlcm5lbC4gVGhpcyBmYXVsdCBpcworICAgICAgIGNhdWdodCBiZWZvcmUgYmFkIHRoaW5ncyBoYXBwZW4gYW5kIHJlcG9ydGVkIHdpdGggdGhlIG1lc3NhZ2U6CisgICAgICAgZXRoMDogTlVMTCBwb2ludGVyIGVuY291bnRlcmVkIGluIFJ4IHJpbmcsIHNraXBwaW5nIHdoaWNoIGNhbiBiZQorICAgICAgIHZpZXdlZCB3aXRoIGRtZXNnIG9yIGNhdCAvdmFyL2xvZy9tZXNzYWdlLgorICAgIDMuIFRoZSBtZWRpYSB0eXBlIGNoYW5nZSBmcm9tIDEwTWJwcyB0byAxMDBNYnBzIHR3aXN0ZWQtcGFpciBldGhlcm5ldAorICAgICAgIGJ5IGlmY29uZmlnIGNhdXNlcyB0aGUgbWVkaWEgbGluayBkb3duLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDcuIFJldmlzaW9uIEhpc3RvcnkKKworICAgICAqIE5vdmVtYmVyIDEzLCAyMDAwLCBSZXZpc2lvbiAxLjA3LCBzZXZlbnRoIHJlbGVhc2UsIDYzMEUgcHJvYmxlbQorICAgICAgIGZpeGVkIGFuZCBmdXJ0aGVyIGNsZWFuIHVwLgorICAgICAqIE5vdmVtYmVyIDQsIDE5OTksIFJldmlzaW9uIDEuMDYsIFNlY29uZCByZWxlYXNlLCBsb3RzIG9mIGNsZWFuIHVwCisgICAgICAgYW5kIG9wdGltaXphdGlvbi4KKyAgICAgKiBBdWd1c3QgOCwgMTk5OSwgUmV2aXNpb24gMS4wNSwgSW5pdGlhbCBQdWJsaWMgUmVsZWFzZQorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDguIEFja25vd2xlZGdlbWVudHMKKworICAgVGhpcyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgZGVyaXZlZCBmb3JtIERvbmFsZCBCZWNrZXIncyBwY2ktc2tlbGV0b24KKyAgIGFuZCBydGw4MTM5IGRyaXZlcnMuIERvbmFsZCBhbHNvIHByb3ZpZGVkIHZhcmlvdXMgc3VnZ2VzdGlvbiByZWdhcmRlZAorICAgd2l0aCBpbXByb3ZlbWVudHMgbWFkZSBpbiByZXZpc2lvbiAxLjA2LgorICAgCisgICBUaGUgMS4wNSByZXZpc2lvbiB3YXMgY3JlYXRlZCBieSBKaW0gSHVhbmcsIEFNRCA3OWM5MDEgc3VwcG9ydCB3YXMKKyAgIGFkZGVkIGJ5IENoaW4tU2hhbiBMaS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zazk4bGluLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zazk4bGluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTFmYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0CkBAIC0wLDAgKzEsNTY4IEBACisoQylDb3B5cmlnaHQgMTk5OS0yMDA0IE1hcnZlbGwoUikuCitBbGwgcmlnaHRzIHJlc2VydmVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2s5OGxpbi50eHQgY3JlYXRlZCAxMy1GZWItMjAwNAorCitSZWFkbWUgRmlsZSBmb3Igc2s5OGxpbiB2Ni4yMworTWFydmVsbCBZdWtvbi9TeXNLb25uZWN0IFNLLTk4eHggR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyIGZhbWlseSBkcml2ZXIgZm9yIExJTlVYCisKK1RoaXMgZmlsZSBjb250YWlucworIDEgIE92ZXJ2aWV3CisgMiAgUmVxdWlyZWQgRmlsZXMKKyAzICBJbnN0YWxsYXRpb24KKyAgICAzLjEgIERyaXZlciBJbnN0YWxsYXRpb24KKyAgICAzLjIgIEluY2x1c2lvbiBvZiBhZGFwdGVyIGF0IHN5c3RlbSBzdGFydAorIDQgIERyaXZlciBQYXJhbWV0ZXJzCisgICAgNC4xICBQZXItUG9ydCBQYXJhbWV0ZXJzCisgICAgNC4yICBBZGFwdGVyIFBhcmFtZXRlcnMKKyA1ICBMYXJnZSBGcmFtZSBTdXBwb3J0CisgNiAgVkxBTiBhbmQgTGluayBBZ2dyZWdhdGlvbiBTdXBwb3J0IChJRUVFIDgwMi4xLCA4MDIuMXEsIDgwMi4zYWQpCisgNyAgVHJvdWJsZXNob290aW5nCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzEgIE92ZXJ2aWV3Cis9PT09PT09PT09PQorCitUaGUgc2s5OGxpbiBkcml2ZXIgc3VwcG9ydHMgdGhlIE1hcnZlbGwgWXVrb24gYW5kIFN5c0tvbm5lY3QgCitTSy05OHh4L1NLLTk1eHggY29tcGxpYW50IEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlciBvbiBMaW51eC4gSXQgaGFzIAorYmVlbiB0ZXN0ZWQgd2l0aCBMaW51eCBvbiBJbnRlbC94ODYgbWFjaGluZXMuCisqKioKKworCisyICBSZXF1aXJlZCBGaWxlcworPT09PT09PT09PT09PT09PT0KKworVGhlIGxpbnV4IGtlcm5lbCBzb3VyY2UuCitObyBhZGRpdGlvbmFsIGZpbGVzIHJlcXVpcmVkLgorKioqCisKKworMyAgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT0KKworSXQgaXMgcmVjb21tZW5kZWQgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgZnJvbSB0aGUgCitTeXNLb25uZWN0IHdlYiBzaXRlIHd3dy5zeXNrb25uZWN0LmNvbS4gSWYgeW91IGhhdmUgZG93bmxvYWRlZCB0aGUgbGF0ZXN0Citkcml2ZXIsIHRoZSBMaW51eCBrZXJuZWwgaGFzIHRvIGJlIHBhdGNoZWQgYmVmb3JlIHRoZSBkcml2ZXIgY2FuIGJlIAoraW5zdGFsbGVkLiBGb3IgZGV0YWlscyBvbiBob3cgdG8gcGF0Y2ggYSBMaW51eCBrZXJuZWwsIHJlZmVyIHRvIHRoZSAKK3BhdGNoLnR4dCBmaWxlLgorCiszLjEgIERyaXZlciBJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHRoZSBhY3Rpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGluc3RhbGwKK3RoZSBkcml2ZXIgYW5kIHRvIHN0YXJ0IGl0IG1hbnVhbGx5LiBUaGVzZSBzdGVwcyBzaG91bGQgYmUgY2FycmllZAorb3V0IGZvciB0aGUgaW5pdGlhbCBkcml2ZXIgc2V0dXAuIE9uY2UgY29uZmlybWVkIHRvIGJlIG9rLCB0aGV5IGNhbgorYmUgaW5jbHVkZWQgaW4gdGhlIHN5c3RlbSBzdGFydC4KKworTk9URSAxOiBUbyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGFza3MgeW91IG5lZWQgJ3Jvb3QnIGFjY2Vzcy4KKworTk9URSAyOiBJbiBjYXNlIG9mIHByb2JsZW1zLCBwbGVhc2UgcmVhZCB0aGUgc2VjdGlvbiAiVHJvdWJsZXNob290aW5nIiAKKyAgICAgICAgYmVsb3cuCisKK1RoZSBkcml2ZXIgY2FuIGVpdGhlciBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBvciBpdCBjYW4gYmUgY29tcGlsZWQgCithcyBhIG1vZHVsZS4gU2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gZHVyaW5nIHRoZSBrZXJuZWwgCitjb25maWd1cmF0aW9uLgorCitDb21waWxlL3VzZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBjb21waWxlIHRoZSBkcml2ZXIsIGdvIHRvIHRoZSBkaXJlY3RvcnkgL3Vzci9zcmMvbGludXggYW5kCitleGVjdXRlIHRoZSBjb21tYW5kICJtYWtlIG1lbnVjb25maWciIG9yICJtYWtlIHhjb25maWciIGFuZCBwcm9jZWVkIGFzIAorZm9sbG93czoKKworVG8gaW50ZWdyYXRlIHRoZSBkcml2ZXIgcGVybWFuZW50bHkgaW50byB0aGUga2VybmVsLCBwcm9jZWVkIGFzIGZvbGxvd3M6CisKKzEuIFNlbGVjdCB0aGUgbWVudSAiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIgYW5kIHRoZW4gIkV0aGVybmV0KDEwMDBNYml0KSIKKzIuIE1hcmsgIk1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBmYW1pbHkgc3VwcG9ydCIgCisgICB3aXRoICgqKSAKKzMuIEJ1aWxkIGEgbmV3IGtlcm5lbCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhYm92ZSBvcHRpb25zIGlzIAorICAgZmluaXNoZWQuCis0LiBJbnN0YWxsIHRoZSBuZXcga2VybmVsLgorNS4gUmVib290IHlvdXIgc3lzdGVtLgorCitUbyB1c2UgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgcHJvY2VlZCBhcyBmb2xsb3dzOgorCisxLiBFbmFibGUgJ2xvYWRhYmxlIG1vZHVsZSBzdXBwb3J0JyBpbiB0aGUga2VybmVsLgorMi4gRm9yIGF1dG9tYXRpYyBkcml2ZXIgc3RhcnQsIGVuYWJsZSB0aGUgJ0tlcm5lbCBtb2R1bGUgbG9hZGVyJy4KKzMuIFNlbGVjdCB0aGUgbWVudSAiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIgYW5kIHRoZW4gIkV0aGVybmV0KDEwMDBNYml0KSIKKzQuIE1hcmsgIk1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBmYW1pbHkgc3VwcG9ydCIgCisgICB3aXRoIChNKQorNS4gRXhlY3V0ZSB0aGUgY29tbWFuZCAibWFrZSBtb2R1bGVzIi4KKzYuIEV4ZWN1dGUgdGhlIGNvbW1hbmQgIm1ha2UgbW9kdWxlc19pbnN0YWxsIi4KKyAgIFRoZSBhcHByb3BpYXRlIG1vZHVsZXMgd2lsbCBiZSBpbnN0YWxsZWQuCis3LiBSZWJvb3QgeW91ciBzeXN0ZW0uCisKKworTG9hZCB0aGUgbW9kdWxlIG1hbnVhbGx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGxvYWQgdGhlIG1vZHVsZSBtYW51YWxseSwgcHJvY2VlZCBhcyBmb2xsb3dzOgorCisxLiBFbnRlciAibW9kcHJvYmUgc2s5OGxpbiIuCisyLiBJZiBhIE1hcnZlbGwgWXVrb24gb3IgU3lzS29ubmVjdCBTSy05OHh4IGFkYXB0ZXIgaXMgaW5zdGFsbGVkIGluIAorICAgeW91ciBjb21wdXRlciBhbmQgeW91IGhhdmUgYSAvcHJvYyBmaWxlIHN5c3RlbSwgZXhlY3V0ZSB0aGUgY29tbWFuZDoKKyAgICJscyAvcHJvYy9uZXQvc2s5OGxpbi8iIAorICAgVGhpcyBzaG91bGQgcHJvZHVjZSBhbiBvdXRwdXQgY29udGFpbmluZyBhIGxpbmUgd2l0aCB0aGUgZm9sbG93aW5nIAorICAgZm9ybWF0OgorICAgZXRoMCAgIGV0aDEgIC4uLgorICAgd2hpY2ggaW5kaWNhdGVzIHRoYXQgeW91ciBhZGFwdGVyIGhhcyBiZWVuIGZvdW5kIGFuZCBpbml0aWFsaXplZC4KKyAgIAorICAgTk9URSAxOiBJZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIE1hcnZlbGwgWXVrb24gb3IgU3lzS29ubmVjdCBTSy05OHh4IAorICAgICAgICAgICBhZGFwdGVyIGluc3RhbGxlZCwgdGhlIGFkYXB0ZXJzIHdpbGwgYmUgbGlzdGVkIGFzICdldGgwJywgCisgICAgICAgICAgICAgICAgICAgJ2V0aDEnLCAnZXRoMicsIGV0Yy4KKyAgICAgICAgICAgICAgICAgICBGb3IgZWFjaCBhZGFwdGVyLCByZXBlYXQgc3RlcHMgMyBhbmQgNCBiZWxvdy4KKworICAgTk9URSAyOiBJZiB5b3UgaGF2ZSBvdGhlciBFdGhlcm5ldCBhZGFwdGVycyBpbnN0YWxsZWQsIHlvdXIgTWFydmVsbAorICAgICAgICAgICBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHggYWRhcHRlciB3aWxsIGJlIG1hcHBlZCB0byB0aGUgCisgICAgICAgICAgICAgICAgICAgbmV4dCBhdmFpbGFibGUgbnVtYmVyLCBlLmcuICdldGgxJy4gVGhlIG1hcHBpbmcgaXMgZXhlY3V0ZWQgCisgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseS4KKyAgICAgICAgICAgVGhlIG1vZHVsZSBpbnN0YWxsYXRpb24gbWVzc2FnZSAoZGlzcGxheWVkIGVpdGhlciBpbiBhIHN5c3RlbQorICAgICAgICAgICBsb2cgZmlsZSBvciBvbiB0aGUgY29uc29sZSkgcHJpbnRzIGEgbGluZSBmb3IgZWFjaCBhZGFwdGVyIAorICAgICAgICAgICBmb3VuZCBjb250YWluaW5nIHRoZSBjb3JyZXNwb25kaW5nICdldGhYJy4KKworMy4gU2VsZWN0IGFuIElQIGFkZHJlc3MgYW5kIGFzc2lnbiBpdCB0byB0aGUgcmVzcGVjdGl2ZSBhZGFwdGVyIGJ5IAorICAgZW50ZXJpbmc6CisgICBpZmNvbmZpZyBldGgwIDxpcC1hZGRyZXNzPgorICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBhZGFwdGVyIGlzIGNvbm5lY3RlZCB0byB0aGUgRXRoZXJuZXQuIAorICAgCisgICBTSy05OHh4IEdpZ2FiaXQgRXRoZXJuZXQgU2VydmVyIEFkYXB0ZXJzOiBUaGUgeWVsbG93IExFRCBvbiB0aGUgYWRhcHRlciAKKyAgIGlzIG5vdyBhY3RpdmUsIHRoZSBsaW5rIHN0YXR1cyBMRUQgb2YgdGhlIHByaW1hcnkgcG9ydCBpcyBhY3RpdmUgYW5kIAorICAgdGhlIGxpbmsgc3RhdHVzIExFRCBvZiB0aGUgc2Vjb25kYXJ5IHBvcnQgKG9uIGR1YWwgcG9ydCBhZGFwdGVycykgaXMgCisgICBibGlua2luZyAoaWYgdGhlIHBvcnRzIGFyZSBjb25uZWN0ZWQgdG8gYSBzd2l0Y2ggb3IgaHViKS4KKyAgIFNLLTk4eHggVjIuMCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzOiBUaGUgbGluayBzdGF0dXMgTEVEIGlzIGFjdGl2ZS4KKyAgIEluIGFkZGl0aW9uLCB5b3Ugd2lsbCByZWNlaXZlIGEgc3RhdHVzIG1lc3NhZ2Ugb24gdGhlIGNvbnNvbGUgc3RhdGluZworICAgImV0aFg6IG5ldHdvcmsgY29ubmVjdGlvbiB1cCB1c2luZyBwb3J0IFkiIGFuZCBzaG93aW5nIHRoZSBzZWxlY3RlZCAKKyAgIGNvbm5lY3Rpb24gcGFyYW1ldGVycyAoeCBzdGFuZHMgZm9yIHRoZSBldGhlcm5ldCBkZXZpY2UgbnVtYmVyIAorICAgKDAsMSwyLCBldGMpLCB5IHN0YW5kcyBmb3IgdGhlIHBvcnQgbmFtZSAoQSBvciBCKSkuCisKKyAgIE5PVEU6IElmIHlvdSBhcmUgaW4gZG91YnQgYWJvdXQgSVAgYWRkcmVzc2VzLCBhc2sgeW91ciBuZXR3b3JrCisgICAgICAgICBhZG1pbmlzdHJhdG9yIGZvciBhc3Npc3RhbmNlLgorICAKKzQuIFlvdXIgYWRhcHRlciBzaG91bGQgbm93IGJlIGZ1bGx5IG9wZXJhdGlvbmFsLgorICAgVXNlICdwaW5nIDxvdGhlcnN0YXRpb24+JyB0byB2ZXJpZnkgdGhlIGNvbm5lY3Rpb24gdG8gb3RoZXIgY29tcHV0ZXJzIAorICAgb24geW91ciBuZXR3b3JrLgorNS4gVG8gY2hlY2sgdGhlIGFkYXB0ZXIgY29uZmlndXJhdGlvbiB2aWV3IC9wcm9jL25ldC9zazk4bGluL1tkZXZpY2VuYW1lXS4KKyAgIEZvciBleGFtcGxlIGJ5IGV4ZWN1dGluZzogICAgCisgICAiY2F0IC9wcm9jL25ldC9zazk4bGluL2V0aDAiIAorCitVbmxvYWQgdGhlIG1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHN0b3AgYW5kIHVubG9hZCB0aGUgZHJpdmVyIG1vZHVsZXMsIHByb2NlZWQgYXMgZm9sbG93czoKKworMS4gRXhlY3V0ZSB0aGUgY29tbWFuZCAiaWZjb25maWcgZXRoMCBkb3duIi4KKzIuIEV4ZWN1dGUgdGhlIGNvbW1hbmQgInJtbW9kIHNrOThsaW4iLgorCiszLjIgIEluY2x1c2lvbiBvZiBhZGFwdGVyIGF0IHN5c3RlbSBzdGFydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2luY2UgYSBsYXJnZSBudW1iZXIgb2YgZGlmZmVyZW50IExpbnV4IGRpc3RyaWJ1dGlvbnMgYXJlIAorYXZhaWxhYmxlLCB3ZSBhcmUgdW5hYmxlIHRvIGRlc2NyaWJlIGEgZ2VuZXJhbCBpbnN0YWxsYXRpb24gcHJvY2VkdXJlCitmb3IgdGhlIGRyaXZlciBtb2R1bGUuCitCZWNhdXNlIHRoZSBkcml2ZXIgaXMgbm93IGludGVncmF0ZWQgaW4gdGhlIGtlcm5lbCwgaW5zdGFsbGF0aW9uIHNob3VsZAorYmUgZWFzeSwgdXNpbmcgdGhlIHN0YW5kYXJkIG1lY2hhbmlzbSBvZiB5b3VyIGRpc3RyaWJ1dGlvbi4KK1JlZmVyIHRvIHRoZSBkaXN0cmlidXRpb24ncyBtYW51YWwgZm9yIGluc3RhbGxhdGlvbiBvZiBldGhlcm5ldCBhZGFwdGVycy4KKworKioqCisKKzQgIERyaXZlciBQYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitQYXJhbWV0ZXJzIGNhbiBiZSBzZXQgYXQgdGhlIGNvbW1hbmQgbGluZSBhZnRlciB0aGUgbW9kdWxlIGhhcyBiZWVuIAorbG9hZGVkIHdpdGggdGhlIGNvbW1hbmQgJ21vZHByb2JlJy4KK0luIHNvbWUgZGlzdHJpYnV0aW9ucywgdGhlIGNvbmZpZ3VyYXRpb24gdG9vbHMgYXJlIGFibGUgdG8gcGFzcyBwYXJhbWV0ZXJzCit0byB0aGUgZHJpdmVyIG1vZHVsZS4KKworSWYgeW91IHVzZSB0aGUga2VybmVsIG1vZHVsZSBsb2FkZXIsIHlvdSBjYW4gc2V0IGRyaXZlciBwYXJhbWV0ZXJzCitpbiB0aGUgZmlsZSAvZXRjL21vZHByb2JlLmNvbmYgKG9yIC9ldGMvbW9kdWxlcy5jb25mIGluIDIuNCBvciBlYXJsaWVyKS4KK1RvIHNldCB0aGUgZHJpdmVyIHBhcmFtZXRlcnMgaW4gdGhpcyBmaWxlLCBwcm9jZWVkIGFzIGZvbGxvd3M6CisKKzEuIEluc2VydCBhIGxpbmUgb2YgdGhlIGZvcm0gOgorICAgb3B0aW9ucyBzazk4bGluIC4uLgorICAgRm9yICIuLi4iLCB0aGUgc2FtZSBzeW50YXggaXMgcmVxdWlyZWQgYXMgZGVzY3JpYmVkIGZvciB0aGUgY29tbWFuZAorICAgbGluZSBwYXJhbWF0ZXJzIG9mIG1vZHByb2JlIGJlbG93LgorMi4gVG8gYWN0aXZhdGUgdGhlIG5ldyBwYXJhbWV0ZXJzLCBlaXRoZXIgcmVib290IHlvdXIgY29tcHV0ZXIKKyAgIG9yIAorICAgdW5sb2FkIGFuZCByZWxvYWQgdGhlIGRyaXZlci4KKyAgIFRoZSBzeW50YXggb2YgdGhlIGRyaXZlciBwYXJhbWV0ZXJzIGlzOgorCisgICAgICAgIG1vZHByb2JlIHNrOThsaW4gcGFyYW1ldGVyPXZhbHVlMVssdmFsdWUyWyx2YWx1ZTMuLi5dXQorCisgICB3aGVyZSB2YWx1ZTEgcmVmZXJzIHRvIHRoZSBmaXJzdCBhZGFwdGVyLCB2YWx1ZTIgdG8gdGhlIHNlY29uZCBldGMuCisKK05PVEU6IEFsbCBwYXJhbWV0ZXJzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gV3JpdGUgdGhlbSBleGFjdGx5IGFzIHNob3duIAorICAgICAgYmVsb3cuCisKK0V4YW1wbGU6CitTdXBwb3NlIHlvdSBoYXZlIHR3byBhZGFwdGVycy4gWW91IHdhbnQgdG8gc2V0IGF1dG8tbmVnb3RpYXRpb24KK29uIHRoZSBmaXJzdCBhZGFwdGVyIHRvIE9OIGFuZCBvbiB0aGUgc2Vjb25kIGFkYXB0ZXIgdG8gT0ZGLgorWW91IGFsc28gd2FudCB0byBzZXQgRHVwbGV4Q2FwYWJpbGl0aWVzIG9uIHRoZSBmaXJzdCBhZGFwdGVyCit0byBGVUxMLCBhbmQgb24gdGhlIHNlY29uZCBhZGFwdGVyIHRvIEhBTEYuCitUaGVuLCB5b3UgbXVzdCBlbnRlcjoKKworICAgICAgICBtb2Rwcm9iZSBzazk4bGluIEF1dG9OZWdfQT1PbixPZmYgRHVwQ2FwX0E9RnVsbCxIYWxmCisKK05PVEU6IFRoZSBudW1iZXIgb2YgYWRhcHRlcnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB0aGlzIHdheSBpcworICAgICAgbGltaXRlZCBpbiB0aGUgZHJpdmVyIChmaWxlIHNrZ2UuYywgY29uc3RhbnQgU0tfTUFYX0NBUkRfUEFSQU0pLgorICAgICAgVGhlIGN1cnJlbnQgbGltaXQgaXMgMTYuIElmIHlvdSBoYXBwZW4gdG8gaW5zdGFsbAorICAgICAgbW9yZSBhZGFwdGVycywgYWRqdXN0IHRoaXMgYW5kIHJlY29tcGlsZS4KKworCis0LjEgIFBlci1Qb3J0IFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIGZvciBlYWNoIHBvcnQgb24gdGhlIGFkYXB0ZXIuCitJbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uLCAnPycgc3RhbmRzIGZvciB0aGUgcG9ydCBmb3IKK3doaWNoIHlvdSBzZXQgdGhlIHBhcmFtZXRlciAoQSBvciBCKS4KKworU3BlZWQKKy0tLS0tCitQYXJhbWV0ZXI6ICAgIFNwZWVkXz8KK1ZhbHVlczogICAgICAgMTAsIDEwMCwgMTAwMCwgQXV0bworRGVmYXVsdDogICAgICBBdXRvCisKK1RoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IHRoZSBzcGVlZCBjYXBhYmlsaXRpZXMuIEl0IGlzIG9ubHkgdmFsaWQgCitmb3IgdGhlIFNLLTk4eHggVjIuMCBjb3BwZXIgYWRhcHRlcnMuCitVc3VhbGx5LCB0aGUgc3BlZWQgaXMgbmVnb3RpYXRlZCBiZXR3ZWVuIHRoZSB0d28gcG9ydHMgZHVyaW5nIGxpbmsgCitlc3RhYmxpc2htZW50LiBJZiB0aGlzIGZhaWxzLCBhIHBvcnQgY2FuIGJlIGZvcmNlZCB0byBhIHNwZWNpZmljIHNldHRpbmcKK3dpdGggdGhpcyBwYXJhbWV0ZXIuCisKK0F1dG8tTmVnb3RpYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgQXV0b05lZ18/CitWYWx1ZXM6ICAgICAgIE9uLCBPZmYsIFNlbnNlCitEZWZhdWx0OiAgICAgIE9uCisgIAorVGhlICJTZW5zZSItbW9kZSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlciB0aGUgbGluayBwYXJ0bmVyIHN1cHBvcnRzCithdXRvLW5lZ290aWF0aW9uIG9yIG5vdC4KKworRHVwbGV4IENhcGFiaWxpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBEdXBDYXBfPworVmFsdWVzOiAgICAgICBIYWxmLCBGdWxsLCBCb3RoCitEZWZhdWx0OiAgICAgIEJvdGgKKworVGhpcyBwYXJhbWV0ZXJzIGlzIG9ubHkgcmVsZXZhbnQgaWYgYXV0by1uZWdvdGlhdGlvbiBmb3IgdGhpcyBwb3J0IGlzIAorbm90IHNldCB0byAiU2Vuc2UiLiBJZiBhdXRvLW5lZ290aWF0aW9uIGlzIHNldCB0byAiT24iLCBhbGwgdGhyZWUgdmFsdWVzCithcmUgcG9zc2libGUuIElmIGl0IGlzIHNldCB0byAiT2ZmIiwgb25seSAiRnVsbCIgYW5kICJIYWxmIiBhcmUgYWxsb3dlZC4KK1RoaXMgcGFyYW1ldGVyIGlzIHVzZWZ1bGwgaWYgeW91ciBsaW5rIHBhcnRuZXIgZG9lcyBub3Qgc3VwcG9ydCBhbGwKK3Bvc3NpYmxlIGNvbWJpbmF0aW9ucy4KKworRmxvdyBDb250cm9sCistLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgRmxvd0N0cmxfPworVmFsdWVzOiAgICAgICBTeW0sIFN5bU9yUmVtLCBMb2NTZW5kLCBOb25lCitEZWZhdWx0OiAgICAgIFN5bU9yUmVtCisKK1RoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZmxvdyBjb250cm9sIGNhcGFiaWxpdGllcyB0aGUgCitwb3J0IHJlcG9ydHMgZHVyaW5nIGF1dG8tbmVnb3RpYXRpb24uIEl0IGNhbiBiZSBzZXQgZm9yIGVhY2ggcG9ydCAKK2luZGl2aWR1YWxseS4KK1Bvc3NpYmxlIG1vZGVzOgorICAgLS0gU3ltICAgICAgPSBTeW1tZXRyaWM6IGJvdGggbGluayBwYXJ0bmVycyBhcmUgYWxsb3dlZCB0byBzZW5kIAorICAgICAgICAgICAgICAgICAgUEFVU0UgZnJhbWVzCisgICAtLSBTeW1PclJlbSA9IFN5bW1ldHJpY09yUmVtb3RlOiBib3RoIG9yIG9ubHkgcmVtb3RlIHBhcnRuZXIgCisgICAgICAgICAgICAgICAgICBhcmUgYWxsb3dlZCB0byBzZW5kIFBBVVNFIGZyYW1lcworICAgLS0gTG9jU2VuZCAgPSBMb2NhbFNlbmQ6IG9ubHkgbG9jYWwgbGluayBwYXJ0bmVyIGlzIGFsbG93ZWQgCisgICAgICAgICAgICAgICAgICB0byBzZW5kIFBBVVNFIGZyYW1lcworICAgLS0gTm9uZSAgICAgPSBubyBsaW5rIHBhcnRuZXIgaXMgYWxsb3dlZCB0byBzZW5kIFBBVVNFIGZyYW1lcworICAKK05PVEU6IFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgYXV0by1uZWdvdGlhdGlvbiBpcyBzZXQgdG8gIk9mZiIuCisKK1JvbGUgaW4gTWFzdGVyLVNsYXZlLU5lZ290aWF0aW9uICgxMDAwQmFzZS1UIG9ubHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBSb2xlXz8KK1ZhbHVlczogICAgICAgQXV0bywgTWFzdGVyLCBTbGF2ZQorRGVmYXVsdDogICAgICBBdXRvCisKK1RoaXMgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBTSy05ODIxIGFuZCBTSy05ODIyIGFkYXB0ZXJzLgorRm9yIHR3byAxMDAwQmFzZS1UIHBvcnRzIHRvIGNvbW11bmljYXRlLCBvbmUgbXVzdCB0YWtlIHRoZSByb2xlIG9mIHRoZQorbWFzdGVyIChwcm92aWRpbmcgdGltaW5nIGluZm9ybWF0aW9uKSwgd2hpbGUgdGhlIG90aGVyIG11c3QgYmUgdGhlIAorc2xhdmUuIFVzdWFsbHksIHRoaXMgaXMgbmVnb3RpYXRlZCBiZXR3ZWVuIHRoZSB0d28gcG9ydHMgZHVyaW5nIGxpbmsgCitlc3RhYmxpc2htZW50LiBJZiB0aGlzIGZhaWxzLCBhIHBvcnQgY2FuIGJlIGZvcmNlZCB0byBhIHNwZWNpZmljIHNldHRpbmcKK3dpdGggdGhpcyBwYXJhbWV0ZXIuCisKKworNC4yICBBZGFwdGVyIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Nvbm5lY3Rpb24gVHlwZSAoU0stOTh4eCBWMi4wIGNvcHBlciBhZGFwdGVycyBvbmx5KQorLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIENvblR5cGUKK1ZhbHVlczogICAgICAgQXV0bywgMTAwRkQsIDEwMEhELCAxMEZELCAxMEhECitEZWZhdWx0OiAgICAgIEF1dG8KKworVGhlIHBhcmFtZXRlciAnQ29uVHlwZScgaXMgYSBjb21iaW5hdGlvbiBvZiBhbGwgZml2ZSBwZXItcG9ydCBwYXJhbWV0ZXJzCit3aXRoaW4gb25lIHNpbmdsZSBwYXJhbWV0ZXIuIFRoaXMgc2ltcGxpZmllcyB0aGUgY29uZmlndXJhdGlvbiBvZiBib3RoIHBvcnRzCitvZiBhbiBhZGFwdGVyIGNhcmQhIFRoZSBkaWZmZXJlbnQgdmFsdWVzIG9mIHRoaXMgdmFyaWFibGUgcmVmbGVjdCB0aGUgbW9zdCAKK21lYW5pbmdmdWwgY29tYmluYXRpb25zIG9mIHBvcnQgcGFyYW1ldGVycy4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgdmFsdWVzIG9mICdDb25UeXBlJyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKK2NvbWJpbmF0aW9ucyBvZiB0aGUgcGVyLXBvcnQgcGFyYW1ldGVyczoKKworICAgIENvblR5cGUgICB8ICBEdXBDYXAgICBBdXRvTmVnICAgRmxvd0N0cmwgICBSb2xlICAgICAgICAgICAgIFNwZWVkCisgICAgLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBdXRvICAgICAgfCAgQm90aCAgICAgT24gICAgICAgIFN5bU9yUmVtICAgQXV0byAgICAgICAgICAgICBBdXRvCisgICAgMTAwRkQgICAgIHwgIEZ1bGwgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAwCisgICAgMTAwSEQgICAgIHwgIEhhbGYgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAwCisgICAgMTBGRCAgICAgIHwgIEZ1bGwgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAKKyAgICAxMEhEICAgICAgfCAgSGFsZiAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMAorCitTdGF0aW5nIGFueSBvdGhlciBwb3J0IHBhcmFtZXRlciB0b2dldGhlciB3aXRoIHRoaXMgJ0NvblR5cGUnIHZhcmlhYmxlCit3aWxsIHJlc3VsdCBpbiBhIG1lcmdlZCBjb25maWd1cmF0aW9uIG9mIHRob3NlIHNldHRpbmdzLiBUaGlzIGR1ZSB0byAKK3RoZSBmYWN0LCB0aGF0IHRoZSBwZXItcG9ydCBwYXJhbWV0ZXJzIChlLmcuIFNwZWVkXz8gKSBoYXZlIGEgaGlnaGVyCitwcmlvcml0eSB0aGFuIHRoZSBjb21iaW5lZCB2YXJpYWJsZSAnQ29uVHlwZScuCisKK05PVEU6IFRoaXMgcGFyYW1ldGVyIGlzIGFsd2F5cyB1c2VkIG9uIGJvdGggcG9ydHMgb2YgdGhlIGFkYXB0ZXIgY2FyZC4KKworSW50ZXJydXB0IE1vZGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIE1vZGVyYXRpb24KK1ZhbHVlczogICAgICAgTm9uZSwgU3RhdGljLCBEeW5hbWljCitEZWZhdWx0OiAgICAgIE5vbmUKKworSW50ZXJydXB0IG1vZGVyYXRpb24gaXMgZW1wbG95ZWQgdG8gbGltaXQgdGhlIG1heG1pbXVtIG51bWJlciBvZiBpbnRlcnJ1cHRzCit0aGUgZHJpdmVyIGhhcyB0byBzZXJ2ZS4gVGhhdCBpcywgb25lIG9yIG1vcmUgaW50ZXJydXB0cyAod2hpY2ggaW5kaWNhdGUgYW55Cit0cmFuc21pdCBvciByZWNlaXZlIHBhY2tldCB0byBiZSBwcm9jZXNzZWQpIGFyZSBxdWV1ZWQgdW50aWwgdGhlIGRyaXZlciAKK3Byb2Nlc3NlcyB0aGVtLiBXaGVuIHF1ZXVlZCBpbnRlcnJ1cHRzIGFyZSB0byBiZSBzZXJ2ZWQsIGlzIGRldGVybWluZWQgYnkgdGhlCisnSW50c1BlclNlYycgcGFyYW1ldGVyLCB3aGljaCBpcyBleHBsYWluZWQgbGF0ZXIgYmVsb3cuCisKK1Bvc3NpYmxlIG1vZGVzOgorCisgICAtLSBOb25lIC0gTm8gaW50ZXJydXB0IG1vZGVyYXRpb24gaXMgYXBwbGllZCBvbiB0aGUgYWRhcHRlciBjYXJkLiAKKyAgICAgIFRoZXJlZm9yZSwgZWFjaCB0cmFuc21pdCBvciByZWNlaXZlIGludGVycnVwdCBpcyBzZXJ2ZWQgaW1tZWRpYXRlbHkKKyAgICAgIGFzIHNvb24gYXMgaXQgYXBwZWFycyBvbiB0aGUgaW50ZXJydXB0IGxpbmUgb2YgdGhlIGFkYXB0ZXIgY2FyZC4KKworICAgLS0gU3RhdGljIC0gSW50ZXJydXB0IG1vZGVyYXRpb24gaXMgYXBwbGllZCBvbiB0aGUgYWRhcHRlciBjYXJkLiAKKyAgICAgIEFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBpbnRlcnJ1cHRzIGFyZSBxdWV1ZWQgdW50aWwgYSBjb21wbGV0ZQorICAgICAgbW9kZXJhdGlvbiBpbnRlcnZhbCBlbmRzLiBJZiBzdWNoIGEgbW9kZXJhdGlvbiBpbnRlcnZhbCBlbmRzLCBhbGwKKyAgICAgIHF1ZXVlZCBpbnRlcnJ1cHRzIGFyZSBwcm9jZXNzZWQgaW4gb25lIGJpZyBidW5jaCB3aXRob3V0IGFueSBkZWxheS4KKyAgICAgIFRoZSB0ZXJtICdzdGF0aWMnIHJlZmxlY3RzIHRoZSBmYWN0LCB0aGF0IGludGVycnVwdCBtb2RlcmF0aW9uIGlzCisgICAgICBhbHdheXMgZW5hYmxlZCwgcmVnYXJkbGVzcyBob3cgbXVjaCBuZXR3b3JrIGxvYWQgaXMgY3VycmVudGx5IAorICAgICAgcGFzc2luZyB2aWEgYSBwYXJ0aWN1bGFyIGludGVyZmFjZS4gSW4gYWRkaXRpb24sIHRoZSBkdXJhdGlvbiBvZgorICAgICAgdGhlIG1vZGVyYXRpb24gaW50ZXJ2YWwgaGFzIGEgZml4ZWQgbGVuZ3RoIHRoYXQgbmV2ZXIgY2hhbmdlcyB3aGlsZQorICAgICAgdGhlIGRyaXZlciBpcyBvcGVyYXRpb25hbC4KKworICAgLS0gRHluYW1pYyAtIEludGVycnVwdCBtb2RlcmF0aW9uIG1pZ2h0IGJlIGFwcGxpZWQgb24gdGhlIGFkYXB0ZXIgY2FyZCwKKyAgICAgIGRlcGVuZGluZyBvbiB0aGUgbG9hZCBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgZHJpdmVyIGRldGVjdHMgdGhhdCB0aGUKKyAgICAgIHN5c3RlbSBsb2FkIGlzIHRvbyBoaWdoLCB0aGUgZHJpdmVyIHRyaWVzIHRvIHNoaWVsZCB0aGUgc3lzdGVtIGFnYWluc3QgCisgICAgICB0b28gbXVjaCBuZXR3b3JrIGxvYWQgYnkgZW5hYmxpbmcgaW50ZXJydXB0IG1vZGVyYXRpb24uIElmIC0gYXQgYSBsYXRlcgorICAgICAgdGltZSAtIHRoZSBDUFUgdXRpbGl6YXRvbiBkZWNyZWFzZXMgYWdhaW4gKG9yIGlmIHRoZSBuZXR3b3JrIGxvYWQgaXMgCisgICAgICBuZWdsaWdpYmxlKSB0aGUgaW50ZXJydXB0IG1vZGVyYXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRpc2FibGVkLgorCitJbnRlcnJ1cHQgbW9kZXJhdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBkcml2ZXIgaGFzIHRvIGhhbmRsZSBvbmUgb3IgbW9yZQoraW50ZXJmYWNlcyB3aXRoIGEgaGlnaCBuZXR3b3JrIGxvYWQsIHdoaWNoIC0gYXMgYSBjb25zZXF1ZW5jZSAtIGxlYWRzIGFsc28gdG8gYQoraGlnaCBDUFUgdXRpbGl6YXRpb24uIFdoZW4gbW9kZXJhdGlvbiBpcyBhcHBsaWVkIGluIHN1Y2ggaGlnaCBuZXR3b3JrIGxvYWQgCitzaXR1YXRpb25zLCBDUFUgbG9hZCBtaWdodCBiZSByZWR1Y2VkIGJ5IDIwLTMwJS4KKworTk9URTogVGhlIGRyYXdiYWNrIG9mIHVzaW5nIGludGVycnVwdCBtb2RlcmF0aW9uIGlzIGFuIGluY3JlYXNlIG9mIHRoZSByb3VuZC0KK3RyaXAtdGltZSAoUlRUKSwgZHVlIHRvIHRoZSBxdWV1ZWluZyBhbmQgc2VydmluZyBvZiBpbnRlcnJ1cHRzIGF0IGRlZGljYXRlZAorbW9kZXJhdGlvbiB0aW1lcy4KKworSW50ZXJydXB0cyBwZXIgc2Vjb25kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgSW50c1BlclNlYworVmFsdWVzOiAgICAgICAzMC4uLjQwMDAwIChpbnRlcnJ1cHRzIHBlciBzZWNvbmQpCitEZWZhdWx0OiAgICAgIDIwMDAKKworVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB1c2VkLCBpZiBlaXRoZXIgc3RhdGljIG9yIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24KK2lzIHVzZWQgb24gYSBuZXR3b3JrIGFkYXB0ZXIgY2FyZC4gVXNpbmcgdGhpcyBwYXJhbXRlciBpZiBubyBtb2RlcmF0aW9uIGlzCithcHBsaWVkLCB3aWxsIGxlYWQgdG8gbm8gYWN0aW9uIHBlcmZvcm1lZC4KKworVGhpcyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgbGVuZ3RoIG9mIGFueSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpbnRlcnZhbC4gCitBc3N1bWluZyB0aGF0IHN0YXRpYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyB0byBiZSB1c2VkLCBhbiAnSW50c1BlclNlYycgCitwYXJhbWV0ZXIgdmFsdWUgb2YgMjAwMCB3aWxsIGxlYWQgdG8gYW4gaW50ZXJydXB0IG1vZGVyYXRpb24gaW50ZXJ2YWwgb2YKKzUwMCBtaWNyb3NlY29uZHMuIAorCitOT1RFOiBUaGUgZHVyYXRpb24gb2YgdGhlIG1vZGVyYXRpb24gaW50ZXJ2YWwgaXMgdG8gYmUgY2hvc2VuIHdpdGggY2FyZS4KK0F0IGZpcnN0IGdsYW5jZSwgc2VsZWN0aW5nIGEgdmVyeSBsb25nIGR1cmF0aW9uIChlLmcuIG9ubHkgMTAwIGludGVycnVwdHMgcGVyIAorc2Vjb25kKSBzZWVtcyB0byBiZSBtZWFuaW5nZnVsLCBidXQgdGhlIGluY3JlYXNlIG9mIHBhY2tldC1wcm9jZXNzaW5nIGRlbGF5IAoraXMgdHJlbWVuZG91cy4gT24gdGhlIG90aGVyIGhhbmQsIHNlbGVjdGluZyBhIHZlcnkgc2hvcnQgbW9kZXJhdGlvbiB0aW1lIG1pZ2h0Citjb21wZW5zYXRlIHRoZSB1c2Ugb2YgYW55IG1vZGVyYXRpb24gYmVpbmcgYXBwbGllZC4KKworCitQcmVmZXJyZWQgUG9ydAorLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgUHJlZlBvcnQKK1ZhbHVlczogICAgICAgQSwgQgorRGVmYXVsdDogICAgICBBCisKK1RoaXMgaXMgdXNlZCB0byBmb3JjZSB0aGUgcHJlZmVycmVkIHBvcnQgdG8gQSBvciBCIChvbiBkdWFsLXBvcnQgbmV0d29yayAKK2FkYXB0ZXJzKS4gVGhlIHByZWZlcnJlZCBwb3J0IGlzIHRoZSBvbmUgdGhhdCBpcyB1c2VkIGlmIGJvdGggYXJlIGRldGVjdGVkCithcyBmdWxseSBmdW5jdGlvbmFsLgorCitSTE1UIE1vZGUgKFJlZHVuZGFudCBMaW5rIE1hbmFnZW1lbnQgVGVjaG5vbG9neSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBSbG10TW9kZQorVmFsdWVzOiAgICAgICBDaGVja0xpbmtTdGF0ZSxDaGVja0xvY2FsUG9ydCwgQ2hlY2tTZWcsIER1YWxOZXQKK0RlZmF1bHQ6ICAgICAgQ2hlY2tMaW5rU3RhdGUKKworUkxNVCBtb25pdG9ycyB0aGUgc3RhdHVzIG9mIHRoZSBwb3J0LiBJZiB0aGUgbGluayBvZiB0aGUgYWN0aXZlIHBvcnQgCitmYWlscywgUkxNVCBzd2l0Y2hlcyBpbW1lZGlhdGVseSB0byB0aGUgc3RhbmRieSBsaW5rLiBUaGUgdmlydHVhbCBsaW5rIGlzIAorbWFpbnRhaW5lZCBhcyBsb25nIGFzIGF0IGxlYXN0IG9uZSAncGh5c2ljYWwnIGxpbmsgaXMgdXAuIAorCitQb3NzaWJsZSBtb2RlczoKKworICAgLS0gQ2hlY2tMaW5rU3RhdGUgLSBDaGVjayBsaW5rIHN0YXRlIG9ubHk6IFJMTVQgdXNlcyB0aGUgbGluayBzdGF0ZQorICAgICAgcmVwb3J0ZWQgYnkgdGhlIGFkYXB0ZXIgaGFyZHdhcmUgZm9yIGVhY2ggaW5kaXZpZHVhbCBwb3J0IHRvIAorICAgICAgZGV0ZXJtaW5lIHdoZXRoZXIgYSBwb3J0IGNhbiBiZSB1c2VkIGZvciBhbGwgbmV0d29yayB0cmFmZmljIG9yIAorICAgICAgbm90LgorCisgICAtLSBDaGVja0xvY2FsUG9ydCAtIEluIHRoaXMgbW9kZSwgUkxNVCBtb25pdG9ycyB0aGUgbmV0d29yayBwYXRoIAorICAgICAgYmV0d2VlbiB0aGUgdHdvIHBvcnRzIG9mIGFuIGFkYXB0ZXIgYnkgcmVndWxhcmx5IGV4Y2hhbmdpbmcgcGFja2V0cworICAgICAgYmV0d2VlbiB0aGVtLiBUaGlzIG1vZGUgcmVxdWlyZXMgYSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaW4gd2hpY2ggCisgICAgICB0aGUgdHdvIHBvcnRzIGFyZSBhYmxlIHRvICJzZWUiIGVhY2ggb3RoZXIgKGkuZS4gdGhlcmUgbXVzdCBub3QgYmUgCisgICAgICBhbnkgcm91dGVyIGJldHdlZW4gdGhlIHBvcnRzKS4KKworICAgLS0gQ2hlY2tTZWcgLSBDaGVjayBsb2NhbCBwb3J0IGFuZCBzZWdtZW50YXRpb246IFRoaXMgbW9kZSBzdXBwb3J0cyB0aGUKKyAgICAgIHNhbWUgZnVuY3Rpb25zIGFzIHRoZSBDaGVja0xvY2FsUG9ydCBtb2RlIGFuZCBhZGRpdGlvbmFsbHkgY2hlY2tzIAorICAgICAgbmV0d29yayBzZWdtZW50YXRpb24gYmV0d2VlbiB0aGUgcG9ydHMuIFRoZXJlZm9yZSwgdGhpcyBtb2RlIGlzIG9ubHkKKyAgICAgIHRvIGJlIHVzZWQgaWYgR2lnYWJpdCBFdGhlcm5ldCBzd2l0Y2hlcyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBuZXR3b3JrCisgICAgICB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHRvIHVzZSB0aGUgU3Bhbm5pbmcgVHJlZSBwcm90b2NvbC4gCisKKyAgIC0tIER1YWxOZXQgLSBJbiB0aGlzIG1vZGUsIHBvcnRzIEEgYW5kIEIgYXJlIHVzZWQgYXMgc2VwYXJhdGUgZGV2aWNlcy4gCisgICAgICBJZiB5b3UgaGF2ZSBhIGR1YWwgcG9ydCBhZGFwdGVyLCBwb3J0IEEgd2lsbCBiZSBjb25maWd1cmVkIGFzIGV0aDAgCisgICAgICBhbmQgcG9ydCBCIGFzIGV0aDEuIEJvdGggcG9ydHMgY2FuIGJlIHVzZWQgaW5kZXBlbmRlbnRseSB3aXRoIAorICAgICAgZGlzdGluY3QgSVAgYWRkcmVzc2VzLiBUaGUgcHJlZmVycmVkIHBvcnQgc2V0dGluZyBpcyBub3QgdXNlZC4gCisgICAgICBSTE1UIGlzIHR1cm5lZCBvZmYuCisgICAKK05PVEU6IFJMTVQgbW9kZXMgQ0xQIGFuZCBDTFBTUyBhcmUgZGVzaWduZWQgdG8gb3BlcmF0ZSBpbiBjb25maWd1cmF0aW9ucyAKKyAgICAgIHdoZXJlIGEgbmV0d29yayBwYXRoIGJldHdlZW4gdGhlIHBvcnRzIG9uIG9uZSBhZGFwdGVyIGV4aXN0cy4gCisgICAgICBNb3Jlb3ZlciwgdGhleSBhcmUgbm90IGRlc2lnbmVkIHRvIHdvcmsgd2hlcmUgYWRhcHRlcnMgYXJlIGNvbm5lY3RlZAorICAgICAgYmFjay10by1iYWNrLgorKioqCisKKworNSAgTGFyZ2UgRnJhbWUgU3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGxhcmdlIGZyYW1lcyAoYWxzbyBjYWxsZWQganVtYm8gZnJhbWVzKS4gVXNpbmcgbGFyZ2UgCitmcmFtZXMgY2FuIHJlc3VsdCBpbiBhbiBpbXByb3ZlZCB0aHJvdWdocHV0IGlmIHRyYW5zZmVycmluZyBsYXJnZSBhbW91bnRzIAorb2YgZGF0YS4KK1RvIGVuYWJsZSBsYXJnZSBmcmFtZXMsIHNldCB0aGUgTVRVIChtYXhpbXVtIHRyYW5zZmVyIHVuaXQpIG9mIHRoZSAKK2ludGVyZmFjZSB0byB0aGUgZGVzaXJlZCB2YWx1ZSAodXAgdG8gOTAwMCksIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyAKK2NvbW1hbmQ6CisgICAgICBpZmNvbmZpZyBldGgwIG10dSA5MDAwCitUaGlzIHdpbGwgb25seSB3b3JrIGlmIHlvdSBoYXZlIHR3byBhZGFwdGVycyBjb25uZWN0ZWQgYmFjay10by1iYWNrCitvciBpZiB5b3UgdXNlIGEgc3dpdGNoIHRoYXQgc3VwcG9ydHMgbGFyZ2UgZnJhbWVzLiBXaGVuIHVzaW5nIGEgc3dpdGNoLCAKK2l0IHNob3VsZCBiZSBjb25maWd1cmVkIHRvIGFsbG93IGxhcmdlIGZyYW1lcyBhbmQgYXV0by1uZWdvdGlhdGlvbiBzaG91bGQgIAorYmUgc2V0IHRvIE9GRi4gVGhlIHNldHRpbmcgbXVzdCBiZSBjb25maWd1cmVkIG9uIGFsbCBhZGFwdGVycyB0aGF0IGNhbiBiZSAKK3JlYWNoZWQgYnkgdGhlIGxhcmdlIGZyYW1lcy4gSWYgb25lIGFkYXB0ZXIgaXMgbm90IHNldCB0byByZWNlaXZlIGxhcmdlIAorZnJhbWVzLCBpdCB3aWxsIHNpbXBseSBkcm9wIHRoZW0uCisKK1lvdSBjYW4gc3dpdGNoIGJhY2sgdG8gdGhlIHN0YW5kYXJkIGV0aGVybmV0IGZyYW1lIHNpemUgYnkgZXhlY3V0aW5nIHRoZSAKK2ZvbGxvd2luZyBjb21tYW5kOgorICAgICAgaWZjb25maWcgZXRoMCBtdHUgMTUwMAorCitUbyBwZXJtYW5lbnRseSBjb25maWd1cmUgdGhpcyBzZXR0aW5nLCBhZGQgYSBzY3JpcHQgd2l0aCB0aGUgJ2lmY29uZmlnJyAKK2xpbmUgdG8gdGhlIHN5c3RlbSBzdGFydHVwIHNlcXVlbmNlIChuYW1lZCBzb21ldGhpbmcgbGlrZSAiUzk5c2s5OGxpbiIgCitpbiAvZXRjL3JjLmQvcmMyLmQpLgorKioqCisKKworNiAgVkxBTiBhbmQgTGluayBBZ2dyZWdhdGlvbiBTdXBwb3J0IChJRUVFIDgwMi4xLCA4MDIuMXEsIDgwMi4zYWQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIE1hcnZlbGwgWXVrb24vU3lzS29ubmVjdCBMaW51eCBkcml2ZXJzIGFyZSBhYmxlIHRvIHN1cHBvcnQgVkxBTiBhbmQgCitMaW5rIEFnZ3JlZ2F0aW9uIGFjY29yZGluZyB0byBJRUVFIHN0YW5kYXJkcyA4MDIuMSwgODAyLjFxLCBhbmQgODAyLjNhZC4gCitUaGVzZSBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIG9wZW4gc291cmNlIAorbW9kdWxlcyBhdmFpbGFibGUgb24gdGhlIEludGVybmV0OgorRm9yIFZMQU4gZ28gdG86IGh0dHA6Ly93d3cuY2FuZGVsYXRlY2guY29tL35ncmVlYXIvdmxhbi5odG1sCitGb3IgTGluayBBZ2dyZWdhdGlvbiBnbyB0bzogaHR0cDovL3d3dy5zdC5yaW0ub3IuanAvfnl1bW8KKworTk9URTogU3lzS29ubmVjdCBHbWJIIGRvZXMgbm90IG9mZmVyIGFueSBzdXBwb3J0IGZvciB0aGVzZSBvcGVuIHNvdXJjZSAKKyAgICAgIG1vZHVsZXMgYW5kIGRvZXMgbm90IHRha2UgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBhbnkga2luZCBvZiAKKyAgICAgIGZhaWx1cmVzIG9yIHByb2JsZW1zIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB3aXRoIHRoZXNlIG1vZHVsZXMuCisKK05PVEU6IENvbmZpZ3VyaW5nIExpbmsgQWdncmVnYXRpb24gb24gYSBTeXNLb25uZWN0IGR1YWwgbGluayBhZGFwdGVyIG1heSAKKyAgICAgIGNhdXNlIHByb2JsZW1zIHdoZW4gdW5sb2FkaW5nIHRoZSBkcml2ZXIuCisKKworNyAgVHJvdWJsZXNob290aW5nCis9PT09PT09PT09PT09PT09PT0KKworSWYgYW55IHByb2JsZW1zIG9jY3VyIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MsIGNoZWNrIHRoZSAKK2ZvbGxvd2luZyBsaXN0OgorCisKK1Byb2JsZW06ICBUaGUgU0stOTh4eCBhZGFwdGVyIGNhbiBub3QgYmUgZm91bmQgYnkgdGhlIGRyaXZlci4KK1NvbHV0aW9uOiBJbiAvcHJvYy9wY2kgc2VhcmNoIGZvciB0aGUgZm9sbG93aW5nIGVudHJ5OgorICAgICAgICAgICAgICdFdGhlcm5ldCBjb250cm9sbGVyOiBTeXNLb25uZWN0IFNLLTk4eHggLi4uJworICAgICAgICAgIElmIHRoaXMgZW50cnkgZXhpc3RzLCB0aGUgU0stOTh4eCBvciBTSy05OHh4IFYyLjAgYWRhcHRlciBoYXMgCisgICAgICAgICAgYmVlbiBmb3VuZCBieSB0aGUgc3lzdGVtIGFuZCBzaG91bGQgYmUgb3BlcmF0aW9uYWwuCisgICAgICAgICAgSWYgdGhpcyBlbnRyeSBkb2VzIG5vdCBleGlzdCBvciBpZiB0aGUgZmlsZSAnL3Byb2MvcGNpJyBpcyBub3QgCisgICAgICAgICAgZm91bmQsIHRoZXJlIG1heSBiZSBhIGhhcmR3YXJlIHByb2JsZW0gb3IgdGhlIFBDSSBzdXBwb3J0IG1heSAKKyAgICAgICAgICBub3QgYmUgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbC4KKyAgICAgICAgICBUaGUgYWRhcHRlciBjYW4gYmUgY2hlY2tlZCB1c2luZyB0aGUgZGlhZ25vc3RpY3MgcHJvZ3JhbSB3aGljaCAKKyAgICAgICAgICBpcyBhdmFpbGFibGUgb24gdGhlIFN5c0tvbm5lY3Qgd2ViIHNpdGU6CisgICAgICAgICAgd3d3LnN5c2tvbm5lY3QuY29tCisgICAgICAgICAgCisgICAgICAgICAgU29tZSBDT01QQVEgbWFjaGluZXMgaGF2ZSBwcm9ibGVtcyBkZWFsaW5nIHdpdGggUENJIHVuZGVyIExpbnV4LgorICAgICAgICAgIExpbnV4LiBUaGlzIHByb2JsZW0gaXMgZGVzY3JpYmVkIGluIHRoZSAnUENJIGhvd3RvJyBkb2N1bWVudAorICAgICAgICAgIChpbmNsdWRlZCBpbiBzb21lIGRpc3RyaWJ1dGlvbnMgb3IgYXZhaWxhYmxlIGZyb20gdGhlCisgICAgICAgICAgd2ViLCBlLmcuIGF0ICd3d3cubGludXgub3JnJykuIAorCisKK1Byb2JsZW06ICBQcm9ncmFtcyBzdWNoIGFzICdpZmNvbmZpZycgb3IgJ3JvdXRlJyBjYW4gbm90IGJlIGZvdW5kIG9yIHRoZSAKKyAgICAgICAgICBlcnJvciBtZXNzYWdlICdPcGVyYXRpb24gbm90IHBlcm1pdHRlZCcgaXMgZGlzcGxheWVkLgorUmVhc29uOiAgIFlvdSBhcmUgbm90IGxvZ2dlZCBpbiBhcyB1c2VyICdyb290Jy4KK1NvbHV0aW9uOiBMb2dvdXQgYW5kIGxvZ2luIGFzICdyb290JyBvciBjaGFuZ2UgdG8gJ3Jvb3QnIHZpYSAnc3UnLgorCisKK1Byb2JsZW06ICBVcG9uIHVzZSBvZiB0aGUgY29tbWFuZCAncGluZyA8YWRkcmVzcz4nIHRoZSBtZXNzYWdlCisgICAgICAgICAgInBpbmc6IHNlbmR0bzogTmV0d29yayBpcyB1bnJlYWNoYWJsZSIgaXMgZGlzcGxheWVkLgorUmVhc29uOiAgIFlvdXIgcm91dGUgaXMgbm90IHNldCBjb3JyZWN0bHkuCitTb2x1dGlvbjogSWYgeW91IGFyZSB1c2luZyBSZWRIYXQsIHlvdSBwcm9iYWJseSBmb3Jnb3QgdG8gc2V0IHVwIHRoZSAKKyAgICAgICAgICByb3V0ZSBpbiB0aGUgJ25ldHdvcmsgY29uZmlndXJhdGlvbicuCisgICAgICAgICAgQ2hlY2sgdGhlIGV4aXN0aW5nIHJvdXRlcyB3aXRoIHRoZSAncm91dGUnIGNvbW1hbmQgYW5kIGNoZWNrIAorICAgICAgICAgIGlmIGFuIGVudHJ5IGZvciAnZXRoMCcgZXhpc3RzLCBhbmQgaWYgc28sIGlmIGl0IGlzIHNldCBjb3JyZWN0bHkuCisKKworUHJvYmxlbTogIFRoZSBkcml2ZXIgY2FuIGJlIHN0YXJ0ZWQsIHRoZSBhZGFwdGVyIGlzIGNvbm5lY3RlZCB0byB0aGUgCisgICAgICAgICAgbmV0d29yaywgYnV0IHlvdSBjYW5ub3QgcmVjZWl2ZSBvciB0cmFuc21pdCBhbnkgcGFja2V0czsgCisgICAgICAgICAgZS5nLiAncGluZycgZG9lcyBub3Qgd29yay4KK1JlYXNvbjogICBUaGVyZSBpcyBhbiBpbmNvcnJlY3Qgcm91dGUgaW4geW91ciByb3V0aW5nIHRhYmxlLgorU29sdXRpb246IENoZWNrIHRoZSByb3V0aW5nIHRhYmxlIHdpdGggdGhlIGNvbW1hbmQgJ3JvdXRlJyBhbmQgcmVhZCB0aGUgCisgICAgICAgICAgbWFudWFsIGhlbHAgcGFnZXMgZGVhbGluZyB3aXRoIHJvdXRlcyAoZW50ZXIgJ21hbiByb3V0ZScpLgorCitOT1RFOiBBbHRob3VnaCB0aGUgMi4yLngga2VybmVsIHZlcnNpb25zIGdlbmVyYXRlIHRoZSByb3V0aW5nIGVudHJ5IAorICAgICAgYXV0b21hdGljYWxseSwgcHJvYmxlbXMgb2YgdGhpcyBraW5kIG1heSBvY2N1ciBoZXJlIGFzIHdlbGwuIFdlJ3ZlIAorICAgICAgY29tZSBhY3Jvc3MgYSBzaXR1YXRpb24gaW4gd2hpY2ggdGhlIGRyaXZlciBzdGFydGVkIGNvcnJlY3RseSBhdCAKKyAgICAgIHN5c3RlbSBzdGFydCwgYnV0IGFmdGVyIHRoZSBkcml2ZXIgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgcmVsb2FkZWQsCisgICAgICB0aGUgcm91dGUgb2YgdGhlIGFkYXB0ZXIncyBuZXR3b3JrIHBvaW50ZWQgdG8gdGhlICdkdW1teTAnZGV2aWNlIAorICAgICAgYW5kIGhhZCB0byBiZSBjb3JyZWN0ZWQgbWFudWFsbHkuCisKKworUHJvYmxlbTogIFlvdXIgY29tcHV0ZXIgc2hvdWxkIGFjdCBhcyBhIHJvdXRlciBiZXR3ZWVuIG11bHRpcGxlIAorICAgICAgICAgIElQIHN1Ym5ldHdvcmtzICh1c2luZyBtdWx0aXBsZSBhZGFwdGVycyksIGJ1dCBjb21wdXRlcnMgaW4gCisgICAgICAgICAgb3RoZXIgc3VibmV0d29ya3MgY2Fubm90IGJlIHJlYWNoZWQuCitSZWFzb246ICAgRWl0aGVyIHRoZSByb3V0ZXIncyBrZXJuZWwgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIElQIGZvcndhcmRpbmcgCisgICAgICAgICAgb3IgdGhlIHJvdXRpbmcgdGFibGUgYW5kIGdhdGV3YXkgY29uZmlndXJhdGlvbiBvZiBhdCBsZWFzdCBvbmUgCisgICAgICAgICAgY29tcHV0ZXIgaXMgbm90IHdvcmtpbmcuCisKK1Byb2JsZW06ICBVcG9uIGRyaXZlciBzdGFydCwgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlIGlzIGRpc3BsYXllZDoKKyAgICAgICAgICAiZXRoMDogLS0gRVJST1IgLS0KKyAgICAgICAgICBDbGFzczogaW50ZXJuYWwgU29mdHdhcmUgZXJyb3IKKyAgICAgICAgICBOcjogICAgMHhjYworICAgICAgICAgIE1zZzogICBTa0dlSW5pdFBvcnQoKSBjYW5ub3QgaW5pdCBydW5uaW5nIHBvcnRzIgorUmVhc29uOiAgIFlvdSBhcmUgdXNpbmcgYSBkcml2ZXIgY29tcGlsZWQgZm9yIHNpbmdsZSBwcm9jZXNzb3IgbWFjaGluZXMgCisgICAgICAgICAgb24gYSBtdWx0aXByb2Nlc3NvciBtYWNoaW5lIHdpdGggU01QIChTeW1tZXRyaWMgTXVsdGlQcm9jZXNzb3IpIAorICAgICAgICAgIGtlcm5lbC4KK1NvbHV0aW9uOiBDb25maWd1cmUgeW91ciBrZXJuZWwgYXBwcm9wcmlhdGVseSBhbmQgcmVjb21waWxlIHRoZSBrZXJuZWwgb3IKKyAgICAgICAgICB0aGUgbW9kdWxlcy4KKworCisKK0lmIHlvdXIgcHJvYmxlbSBpcyBub3QgbGlzdGVkIGhlcmUsIHBsZWFzZSBjb250YWN0IFN5c0tvbm5lY3QncyB0ZWNobmljYWwKK3N1cHBvcnQgZm9yIGhlbHAgKGxpbnV4QHN5c2tvbm5lY3QuZGUpLgorV2hlbiBjb250YWN0aW5nIG91ciB0ZWNobmljYWwgc3VwcG9ydCwgcGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgCitpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGU6CistIFN5c3RlbSBNYW51ZmFjdHVyZXIgYW5kIEhXIEluZm9ybWF0aW9ucyAoQ1BVLCBNZW1vcnkuLi4gKQorLSBQQ0ktQm9hcmRzIGluIHlvdXIgc3lzdGVtCistIERpc3RyaWJ1dGlvbgorLSBLZXJuZWwgdmVyc2lvbgorLSBEcml2ZXIgdmVyc2lvbgorKioqCisKKworCisqKipFbmQgb2YgUmVhZG1lIEZpbGUqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9za2ZwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9za2ZwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTQxOWVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrZnAudHh0CkBAIC0wLDAgKzEsMjIwIEBACisoQylDb3B5cmlnaHQgMTk5OC0yMDAwIFN5c0tvbm5lY3QsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2tmcC50eHQgY3JlYXRlZCAxMS1NYXktMjAwMAorCitSZWFkbWUgRmlsZSBmb3Igc2tmcC5vIHYyLjA2CisKKworVGhpcyBmaWxlIGNvbnRhaW5zCisoMSkgT1ZFUlZJRVcKKygyKSBTVVBQT1JURUQgQURBUFRFUlMKKygzKSBHRU5FUkFMIElORk9STUFUSU9OCisoNCkgSU5TVEFMTEFUSU9OCisoNSkgSU5DTFVTSU9OIE9GIFRIRSBBREFQVEVSIElOIFNZU1RFTSBTVEFSVAorKDYpIFRST1VCTEVTSE9PVElORworKDcpIEZVTkNUSU9OIE9GIFRIRSBBREFQVEVSIExFRFMKKyg4KSBISVNUT1JZCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKworKDEpIE9WRVJWSUVXCis9PT09PT09PT09PT0KKworVGhpcyBSRUFETUUgZXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgZHJpdmVyICdza2ZwJyBmb3IgTGludXggd2l0aCB5b3VyCituZXR3b3JrIGFkYXB0ZXIuCisKK0NoYXB0ZXIgMjogQ29udGFpbnMgYSBsaXN0IG9mIGFsbCBuZXR3b3JrIGFkYXB0ZXJzIHRoYXQgYXJlIHN1cHBvcnRlZCBieQorCSAgIHRoaXMgZHJpdmVyLgorCitDaGFwdGVyIDM6IEdpdmVzIHNvbWUgZ2VuZXJhbCBpbmZvcm1hdGlvbi4KKworQ2hhcHRlciA0OiBEZXNjcmliZXMgY29tbW9uIHByb2JsZW1zIGFuZCBzb2x1dGlvbnMuCisKK0NoYXB0ZXIgNTogU2hvd3MgdGhlIGNoYW5nZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYWRhcHRlciBMRURzLgorCitDaGFwdGVyIDY6IEhpc3Rvcnkgb2YgZGV2ZWxvcG1lbnQuCisKKyoqKgorCisKKygyKSBTVVBQT1JURUQgQURBUFRFUlMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG5ldHdvcmsgZHJpdmVyICdza2ZwJyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG5ldHdvcmsgYWRhcHRlcnM6CitTeXNLb25uZWN0IGFkYXB0ZXJzOgorICAtIFNLLTU1MjEgKFNLLU5FVCBGRERJLVVQKQorICAtIFNLLTU1MjIgKFNLLU5FVCBGRERJLVVQIERBUykKKyAgLSBTSy01NTQxIChTSy1ORVQgRkRESS1GUCkKKyAgLSBTSy01NTQzIChTSy1ORVQgRkRESS1MUCkKKyAgLSBTSy01NTQ0IChTSy1ORVQgRkRESS1MUCBEQVMpCisgIC0gU0stNTgyMSAoU0stTkVUIEZEREktVVA2NCkKKyAgLSBTSy01ODIyIChTSy1ORVQgRkRESS1VUDY0IERBUykKKyAgLSBTSy01ODQxIChTSy1ORVQgRkRESS1GUDY0KQorICAtIFNLLTU4NDMgKFNLLU5FVCBGRERJLUxQNjQpCisgIC0gU0stNTg0NCAoU0stTkVUIEZEREktTFA2NCBEQVMpCitDb21wYXEgYWRhcHRlcnMgKG5vdCB0ZXN0ZWQpOgorICAtIE5ldGVsbGlnZW50IDEwMCBGRERJIERBUyBGaWJyZSBTQworICAtIE5ldGVsbGlnZW50IDEwMCBGRERJIFNBUyBGaWJyZSBTQworICAtIE5ldGVsbGlnZW50IDEwMCBGRERJIERBUyBVVFAKKyAgLSBOZXRlbGxpZ2VudCAxMDAgRkRESSBTQVMgVVRQCisgIC0gTmV0ZWxsaWdlbnQgMTAwIEZEREkgU0FTIEZpYnJlIE1JQworKioqCisKKworKDMpIEdFTkVSQUwgSU5GT1JNQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09CisKK0Zyb20gdjIuMDEgb24sIHRoZSBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbiB0aGUgbGludXgga2VybmVsIHNvdXJjZXMuCitUaGVyZWZvciwgdGhlIGluc3RhbGxhdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgYW55IG90aGVyIGFkYXB0ZXIKK3N1cHBvcnRlZCBieSB0aGUga2VybmVsLgorUmVmZXIgdG8gdGhlIG1hbnVhbCBvZiB5b3VyIGRpc3RyaWJ1dGlvbiBhYm91dCB0aGUgaW5zdGFsbGF0aW9uCitvZiBuZXR3b3JrIGFkYXB0ZXJzLgorTWFrZXMgbXkgbGlmZSBtdWNoIGVhc2llciA6LSkKKyoqKgorCisKKyg0KSBUUk9VQkxFU0hPT1RJTkcKKz09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IHJ1biBpbnRvIHByb2JsZW1zIGR1cmluZyBpbnN0YWxsYXRpb24sIGNoZWNrIHRob3NlIGl0ZW1zOgorCitQcm9ibGVtOiAgVGhlIEZEREkgYWRhcHRlciBjYW4gbm90IGJlIGZvdW5kIGJ5IHRoZSBkcml2ZXIuCitSZWFzb246ICAgTG9vayBpbiAvcHJvYy9wY2kgZm9yIHRoZSBmb2xsb3dpbmcgZW50cnk6CisgICAgICAgICAgICAgJ0ZEREkgbmV0d29yayBjb250cm9sbGVyOiBTeXNLb25uZWN0IFNLLUZEREktUENJIC4uLicKKwkgIElmIHRoaXMgZW50cnkgZXhpc3RzLCB0aGVuIHRoZSBGRERJIGFkYXB0ZXIgaGFzIGJlZW4KKwkgIGZvdW5kIGJ5IHRoZSBzeXN0ZW0gYW5kIHNob3VsZCBiZSBhYmxlIHRvIGJlIHVzZWQuCisJICBJZiB0aGlzIGVudHJ5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSBmaWxlICcvcHJvYy9wY2knCisJICBpcyBub3QgdGhlcmUsIHRoZW4geW91IG1heSBoYXZlIGEgaGFyZHdhcmUgcHJvYmxlbSBvciBQQ0kKKwkgIHN1cHBvcnQgbWF5IG5vdCBiZSBlbmFibGVkIGluIHlvdXIga2VybmVsLgorCSAgVGhlIGFkYXB0ZXIgY2FuIGJlIGNoZWNrZWQgdXNpbmcgdGhlIGRpYWdub3N0aWMgcHJvZ3JhbQorCSAgd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20gdGhlIFN5c0tvbm5lY3Qgd2ViIHNpdGU6CisJICAgICAgd3d3LnN5c2tvbm5lY3QuZGUKKwkgIFNvbWUgQ09NUEFRIG1hY2hpbmVzIGhhdmUgYSBwcm9ibGVtIHdpdGggUENJIHVuZGVyCisJICBMaW51eC4gVGhpcyBpcyBkZXNjcmliZWQgaW4gdGhlICdQQ0kgaG93dG8nIGRvY3VtZW50CisJICAoaW5jbHVkZWQgaW4gc29tZSBkaXN0cmlidXRpb25zIG9yIGF2YWlsYWJsZSBmcm9tIHRoZQorCSAgd3d3LCBlLmcuIGF0ICd3d3cubGludXgub3JnJykgYW5kIG5vIHdvcmthcm91bmQgaXMgYXZhaWxhYmxlLgorCitQcm9ibGVtOiAgWW91IHdhbnQgdG8gdXNlIHlvdXIgY29tcHV0ZXIgYXMgYSByb3V0ZXIgYmV0d2VlbgorICAgICAgICAgIG11bHRpcGxlIElQIHN1Ym5ldHdvcmtzICh1c2luZyBtdWx0aXBsZSBhZGFwdGVycyksIGJ1dAorCSAgeW91IGNhbiBub3QgcmVhY2ggY29tcHV0ZXJzIGluIG90aGVyIHN1Ym5ldHdvcmtzLgorUmVhc29uOiAgIEVpdGhlciB0aGUgcm91dGVyJ3Mga2VybmVsIGlzIG5vdCBjb25maWd1cmVkIGZvciBJUAorCSAgZm9yd2FyZGluZyBvciB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgcm91dGluZyB0YWJsZQorCSAgYW5kIGdhdGV3YXkgY29uZmlndXJhdGlvbiBpbiBhdCBsZWFzdCBvbmUgb2YgdGhlCisJICBjb21wdXRlcnMuCisKK0lmIHlvdXIgcHJvYmxlbSBpcyBub3QgbGlzdGVkIGhlcmUsIHBsZWFzZSBjb250YWN0IG91cgordGVjaG5pY2FsIHN1cHBvcnQgZm9yIGhlbHAuIAorWW91IGNhbiBzZW5kIGVtYWlsIHRvOgorICBsaW51eEBzeXNrb25uZWN0LmRlCitXaGVuIGNvbnRhY3Rpbmcgb3VyIHRlY2huaWNhbCBzdXBwb3J0LAorcGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlOgorLSBTeXN0ZW0gTWFudWZhY3R1cmVyIGFuZCBNb2RlbAorLSBCb2FyZHMgaW4geW91ciBzeXN0ZW0KKy0gRGlzdHJpYnV0aW9uCistIEtlcm5lbCB2ZXJzaW9uCisKKyoqKgorCisKKyg1KSBGVU5DVElPTiBPRiBUSEUgQURBUFRFUiBMRURTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBMRUQncyBvbiB0aGUgRkRESSBuZXR3b3JrIGFkYXB0ZXJzIHdhcworICAgICAgICBjaGFuZ2VkIGluIFNNVCB2ZXJzaW9uIHYyLjgyLiBXaXRoIHRoaXMgbmV3IFNNVCB2ZXJzaW9uLCB0aGUgeWVsbG93CisgICAgICAgIExFRCB3b3JrcyBhcyBhIHJpbmcgb3BlcmF0aW9uYWwgaW5kaWNhdG9yLiBBbiBhY3RpdmUgeWVsbG93IExFRAorICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgcmluZyBpcyBkb3duLiBUaGUgZ3JlZW4gTEVEIG9uIHRoZSBhZGFwdGVyIG5vdworICAgICAgICB3b3JrcyBhcyBhIGxpbmsgaW5kaWNhdG9yIHdoZXJlIGFuIGFjdGl2ZSBHUkVFTiBMRUQgaW5kaWNhdGVzIHRoYXQKKyAgICAgICAgdGhlIHJlc3BlY3RpdmUgcG9ydCBoYXMgYSBwaHlzaWNhbCBjb25uZWN0aW9uLgorCisgICAgICAgIFdpdGggdmVyc2lvbnMgb2YgU01UIHByaW9yIHRvIHYyLjgyIGEgcmluZyB1cCB3YXMgaW5kaWNhdGVkIGlmIHRoZQorICAgICAgICB5ZWxsb3cgTEVEIHdhcyBvZmYgd2hpbGUgdGhlIGdyZWVuIExFRChzKSBzaG93ZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgc3RhdHVzIG9mIHRoZSBhZGFwdGVyLiBEdXJpbmcgYSByaW5nIGRvd24gdGhlIGdyZWVuIExFRCB3YXMgb2ZmIGFuZAorICAgICAgICB0aGUgeWVsbG93IExFRCB3YXMgb24uCisKKyAgICAgICAgQWxsIGltcGxlbWVudGF0aW9ucyBpbmRpY2F0ZSB0aGF0IGEgZHJpdmVyIGlzIG5vdCBsb2FkZWQgaWYKKyAgICAgICAgYWxsIExFRHMgYXJlIG9mZi4KKworKioqCisKKworKDYpIEhJU1RPUlkKKz09PT09PT09PT09CisKK3YyLjA2ICgyMDAwMDUxMSkgKEluLUtlcm5lbCB2ZXJzaW9uKQorICAgIE5ldyBmZWF0dXJlczoKKwktIDY0IGJpdCBzdXBwb3J0CisJLSBuZXcgcGNpIGRtYSBpbnRlcmZhY2UKKwktIGluIGtlcm5lbCAyLjMuOTkKKwordjIuMDUgKDIwMDAwMjE3KSAoSW4tS2VybmVsIHZlcnNpb24pCisgICAgTmV3IGZlYXR1cmVzOgorCS0gQ2hhbmdlcyBmb3IgMi4zLjQ1IGtlcm5lbAorCit2Mi4wNCAoMjAwMDAyMDcpIChTdGFuZGFsb25lIHZlcnNpb24pCisgICAgTmV3IGZlYXR1cmVzOgorCS0gQWRkZWQgcngvdHggYnl0ZSBjb3VudGVyCisKK3YyLjAzICgyMDAwMDExMSkgKFN0YW5kYWxvbmUgdmVyc2lvbikKKyAgICBQcm9ibGVtcyBmaXhlZDoKKwktIEZpeGVkIHByaW50ayBzdGF0ZW1lbnRzIGZyb20gdjIuMDIKKwordjIuMDIgKDk5MTIxNSkgKFN0YW5kYWxvbmUgdmVyc2lvbikKKyAgICBQcm9ibGVtcyBmaXhlZDoKKwktIFJlbW92ZWQgdW5uZWNlc3Nhcnkgb3V0cHV0CisJLSBGaXhlZCBwYXRoIGZvciAicHJpbnR2ZXIuc2giIGluIG1ha2VmaWxlCisKK3YyLjAxICg5OTExMjIpIChJbi1LZXJuZWwgdmVyc2lvbikKKyAgICBOZXcgZmVhdHVyZXM6CisJLSBJbnRlZ3JhdGlvbiBpbiBMaW51eCBrZXJuZWwgc291cmNlcworCS0gU3VwcG9ydCBmb3IgbWVtb3J5IG1hcHBlZCBJL08uCisKK3YyLjAwICg5OTExMTIpCisgICAgTmV3IGZlYXR1cmVzOgorCS0gRnVsbCBzb3VyY2UgcmVsZWFzZWQgdW5kZXIgR1BMCisKK3YxLjA1ICg5OTEwMjMpCisgICAgUHJvYmxlbXMgZml4ZWQ6CisJLSBDb21waWxhdGlvbiB3aXRoIGtlcm5lbCB2ZXJzaW9uIDIuMi4xMyBmYWlsZWQKKwordjEuMDQgKDk5MDQyNykKKyAgICBDaGFuZ2VzOgorCS0gTmV3IFNNVCBtb2R1bGUgaW5jbHVkZWQsIGNoYW5naW5nIExFRCBmdW5jdGlvbmFsaXR5CisgICAgUHJvYmxlbXMgZml4ZWQ6CisJLSBTeW5jaHJvbml6YXRpb24gb24gU01QIG1hY2hpbmVzIHdhcyBidWdneQorCit2MS4wMyAoOTkwMzI1KQorICAgIFByb2JsZW1zIGZpeGVkOgorCS0gSW50ZXJydXB0IHJvdXRpbmcgb24gU01QIG1hY2hpbmVzIGNvdWxkIGJlIGluY29ycmVjdAorCit2MS4wMiAoOTkwMzEwKQorICAgIE5ldyBmZWF0dXJlczoKKwktIFN1cHBvcnQgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjIueCBhZGRlZAorCS0gS2VybmVsIHBhdGNoIGluc3RlYWQgb2YgcHJpdmF0ZSBkdXBsaWNhdGUgb2Yga2VybmVsIGZ1bmN0aW9ucworCit2MS4wMSAoOTgwODEyKQorICAgIFByb2JsZW1zIGZpeGVkOgorCUNvbm5lY3Rpb24gaGFuZ3VwIHdpdGggdGVsbmV0CisJU2xvdyB0ZWxuZXQgY29ubmVjdGlvbgorCit2MS4wMCBiZXRhIDAxICg5ODA1MDcpCisgICAgTmV3IGZlYXR1cmVzOgorCU5vbmUuCisgICAgUHJvYmxlbXMgZml4ZWQ6CisJTm9uZS4KKyAgICBLbm93biBsaW1pdGF0aW9uczoKKyAgICAgICAgLSB0YXIgYXJjaGl2ZSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHBhY2thZ2UgZm9ybWF0IChycG0pLgorCS0gRkRESSBzdGF0aXN0aWMgaXMgZW1wdHkuCisJLSBub3QgdGVzdGVkIHdpdGggMi4xLnh4IGtlcm5lbHMKKwktIGludGVncmF0aW9uIGluIGtlcm5lbCBub3QgdGVzdGVkCisJLSBub3QgdGVzdGVkIHNpbXVsdGFuZW91c2x5IHdpdGggRkRESSBhZGFwdGVycyBmcm9tIG90aGVyIHZlbmRvcnMuCisJLSBvbmx5IFg4NiBwcm9jZXNzb3JzIHN1cHBvcnRlZC4KKwktIFNCQSAoU3luY2hyb25vdXMgQmFuZHdpZHRoIEFsbG9jYXRvcikgcGFyYW1ldGVycyBjYW4KKwkgIG5vdCBiZSBjb25maWd1cmVkLgorCS0gZG9lcyBub3Qgd29yayBvbiBzb21lIENPTVBBUSBtYWNoaW5lcy4gU2VlIHRoZSBQQ0kgaG93dG8KKwkgIGRvY3VtZW50IGZvciBkZXRhaWxzIGFib3V0IHRoaXMgcHJvYmxlbS4KKwktIGRhdGEgY29ycnVwdGlvbiB3aXRoIGtlcm5lbCB2ZXJzaW9ucyBiZWxvdyAyLjAuMzMuCisKKyoqKiBFbmQgb2YgaW5mb3JtYXRpb24gZmlsZSAqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS5odW4gYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20uaHVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2YxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20uaHVuCkBAIC0wLDAgKzEsMzcxIEBACisKK1NsaWNlQ09NIGFkYXB0ZXIgZmVsaGFzem5hbG9pIGRva3VtZW50YWNpb2phIC0gMC41MSB2ZXJ6aW9ob3oKKworQmFydPNrIElzdHbhbiA8YmFydG9raUBpdGMuaHU+CitVdG9sc28gbW9kb3NpdGFzOiBXZWQgQXVnIDI5IDE3OjI2OjU4IENFU1QgMjAwMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIYXN6bmFsYXRhOgorCitGb3JkaXRhczoKKworQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisJWypdIFByb21wdCBmb3IgZGV2ZWxvcG1lbnQgYW5kL29yIGluY29tcGxldGUgY29kZS9kcml2ZXJzCisKK05ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKwlXYW4gaW50ZXJmYWNlcworCQk8TT4gTXVsdGlHYXRlIChDT01YKSBzeW5jaHJvbm91cworCQkJPE0+IFN1cHBvcnQgZm9yIE1VTklDSCBiYXNlZCBib2FyZHM6IFNsaWNlQ09NLCBQQ0lDT00gKE5FVykKKwkJCTxNPiBTdXBwb3J0IGZvciBIRExDIGFuZCBzeW5jUFBQLi4uCisKKworQSBtb2R1bG9rIGJldG9sdGVzZToKKworbW9kcHJvYmUgY29teAorCittb2Rwcm9iZSBjb214LXByb3RvLXBwcAkJIyBhIENpc2NvLUhETEMgZXMgYSBTeW5jUFBQIHByb3Rva29sbHQgaXMKKwkJCQkjIGV6IGEgbW9kdWwgYWRqYQorCittb2Rwcm9iZSBjb214LWh3LW11bmljaAkJIyBhIG1vZHVsIGJldG9sdG9kZXNrb3IgYXpvbm5hbCBqZWxlbnQgYQorCQkJCSMgc3lzbG9nYmEgYSBkZXRla3RhbHQga2FydHlha3JvbAorCisKK0tvbmZpZ3VyYWxhczoKKworIyBFemVuIGF6IGludGVyZmVzemVuIENpc2NvLUhETEMgdm9uYWxpIHByb3Rva29sbCBmb2cgZnV0bmkKKyMgQXogaW50ZXJmZXN6aGV6IHJlbmRlbHQgaWRvc3plbGV0ZWs6IDEsMiAoMTI4IGtiaXQvc2VjLWVzIHZvbmFsKQorIyAoYSBHLjcwMyBrZXJldGJlbiBheiBlbHNvIGFkYXRvdCB2aXZvIGlkb3N6ZWxldCBheiAxLWVzKQorIworbWtkaXIgL3Byb2MvY29teC9jb214MC4xLworZWNobyBzbGljZWNvbQk+L3Byb2MvY29teC9jb214MC4xL2JvYXJkdHlwZQorZWNobyBoZGxjCT4vcHJvYy9jb214L2NvbXgwLjEvcHJvdG9jb2wKK2VjaG8gMSAyCT4vcHJvYy9jb214L2NvbXgwLjEvdGltZXNsb3RzCisKKworIyBFemVuIGF6IGludGVyZmVzemVuIFN5bmNQUFAgdm9uYWxpIHByb3Rva29sbCBmb2cgZnV0bmkKKyMgQXogaW50ZXJmZXN6aGV6IHJlbmRlbHQgaWRvc3plbGV0OiAzICg2NCBrYml0L3NlYy1lcyB2b25hbCkKKyMKK21rZGlyIC9wcm9jL2NvbXgvY29teDAuMi8KK2VjaG8gc2xpY2Vjb20JPi9wcm9jL2NvbXgvY29teDAuMi9ib2FyZHR5cGUKK2VjaG8gcHBwCT4vcHJvYy9jb214L2NvbXgwLjIvcHJvdG9jb2wKK2VjaG8gMwkJPi9wcm9jL2NvbXgvY29teDAuMi90aW1lc2xvdHMKKworLi4uCisKK2lmY29uZmlnIGNvbXgwLjEgdXAKK2lmY29uZmlnIGNvbXgwLjIgdXAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBDT01YIGRyaXZlcmVrIGRlZmF1bHQgMjAgY3NvbWFnbnlpIHRyYW5zbWl0IHF1ZXVlLXQgcmVuZGVsbmVrIGEgaGFsb3phdGkKK2ludGVyZmVzemVraGV6LiBXQU4gaGFsb3phdG9rYmFuIGVubmVsIGhvc3N6YWJiYXQgaXMgc3pva2FzIGhhc3puYWxuaQorKDIwIGVzIDEwMCBrb3pvdHQpLCBob2d5IGEgdm9uYWwga2loYXN6bmFsdHNhZ2EgbmFneSB0ZXJoZWxlcyBlc2V0ZW4gam9iYgorbGVneWVuIChiYXIgZXp6ZWwgbWVnbm8gYSB2YXJoYXRvIGtlc2xlbHRldGVzIGEgY3NvbWFnb2sgc29yYmFuIGFsbGFzYSBtaWF0dCk6CisKKyMgaWZjb25maWcgY29teDAgdHhxdWV1ZWxlbiA1MAorCitFenQgYSBiZWFsbGl0YXNpIGxlaGV0b3NlZ2V0IGNzYWsgYXogdWphYmIgZGlzenRyaWJ1Y2lvayBpZmNvbmZpZyBwYXJhbmNzYQordGFtb2dhdGphIChhbWlrIG1hciBhIDIuMiBrZXJuZWxla2hleiBrZXN6dWx0ZWssIG1pbnQgYSBSZWRIYXQgNi4xIHZhZ3kgYQorRGViaWFuIDIuMikuCisKK0EgMi4xLWVzIERlYmlhbiBkaXN6dHJpYnVjaW9ob3ogYSBodHRwOi8vd3d3LmRlYmlhbi5vcmcvfnJjdy8yLjIvbmV0YmFzZS8KK2NpbXJvbCB0b2x0aGV0byBsZSB1amFiYiBuZXRiYXNlIGNzb21hZywgYW1pIG1hciBpbHlldCB0YW1vZ2F0byBpZmNvbmZpZworcGFyYW5jc290IHRhcnRhbG1hei4gQm92ZWJiZW4gYSAyLjIga2VybmVsIGhhc3puYWxhdGFyb2wgRGViaWFuIDIuMSBhbGF0dDoKK2h0dHA6Ly93d3cuZGViaWFuLm9yZy9yZWxlYXNlcy9zdGFibGUvcnVubmluZy1rZXJuZWwtMi4yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Ega2FydHlhIExFRC1qZWluZWsgamVsZW50ZXNlOgorCitwaXJvcwktIGVnLCBoYSBSZW1vdGUgQWxhcm0tb3Qga3VsZCBhIHR1bG9sZGFsCit6b2xkCS0gZWcsIGhhIGEgdmV0dCBqZWxiZW4gbWVndGFsYWxqYSBhIGtlcmV0c3ppbmtyb250CisKK1Jlc3psZXRlc2ViYmVuOgorCitwaXJvczoJem9sZDoJamVsZW50ZXM6CisKKy0JLQluaW5jcyBrZXJldHN6aW5rcm9uIChuaW5jcyBqZWwsIHZhZ3kgcm9zc3ogYSBqZWwpCistCWVnCSJtaW5kZW4gcmVuZGJlbiIKK2VnCWVnCWEgdmV0ZWwgT0ssIGRlIGEgdHVsb2xkYWwgUmVtb3RlIEFsYXJtLW90IGt1bGQKK2VnCS0JZXogbmluY3MgZXJ0ZWxtZXp2ZSwgZWd5ZWxvcmUgZnVua2NpbyBuZWxrdWwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVzemxldGVzZWJiIGxlaXJhcyBhIGhhcmR2ZXIgYmVhbGxpdGFzaSBsZWhldG9zZWdlaXJvbDoKKworQXogYWx0YWxhbm9zLC0gZXMgYSBwcm90b2tvbGwtcmV0ZWdlayBiZWFsbGl0YXNpIGxlaGV0b3NlZ2Vpcm9sIGEgJ2NvbXgudHh0JworZmFqbGJhbiBsZWlydGFrIFNsaWNlQ09NIGthcnR5YW5hbCBpcyBlcnZlbnllc2VrLCBpdHQgY3NhayBhIGhhcmR2ZXItc3BlY2lmaWt1cworYmVhbGxpdGFzaSBsZWhldG9zZWdlayB2YW5uYWsgb3NzemVmb2dsYWx2YToKKworS29uZmlndXJhbGFzaSBpbnRlcmZlc3ogYSAvcHJvYy9jb214LyBhbGF0dDoKKworTWluZGVuIHRpbWVzbG90LWNzb3BvcnRuYWsga3Vsb24gY29teCogaW50ZXJmZXN6dCBrZWxsIGxldHJlaG96bmkgbWtkaXItcmVsOgorY29teDAsIGNvbXgxLCAuLiBzdGIuIEl0dCBiZWFsbGl0aGF0bywgaG9neSBheiBhZG90dCBpbnRlcmZlc3ogaGFueWFkaWsga2FydHlhCittZWx5aWsgdGltZXNsb3RqYShpKWJvbCBhbGxqb24gb3NzemUuIEEgQ2lzY28tZmVsZSBzZXJpYWwzOjEgZWxuZXZlemVzZWsKKyhzZXJpYWwzOjEgPSBhIDMuIGthcnR5YWJhbiBheiAxLWVzIGlkb3N6ZWxldC1jc29wb3J0KSBMaW51eG9uIGFsaWFzaW5nLW90CitqZWxlbnRlbmVuZWssIGV6ZXJ0IG1pIG5lbSB0dWR1bmsgaWx5ZW4gZWxuZXZlemVzdCBoYXN6bmFsbmkuCisKK1RvYmIga2FydHlhIGVzZXRlbiBhIGNvbXgwLjEsIGNvbXgwLjIsIC4uLiB2YWd5IHNsaWNlMC4xLCBzbGljZTAuMiBuZXZlaworaGFzem5hbGhhdG9hay4KKworVG9iYiBTbGljZUNPTSBrYXJ0eWEgaXMgbGVoZXQgZWd5IGdlcGJlbiwgZGUgc2FqYXQgaW50ZXJydXB0IGtlbGwgbWluZGVneWlrbmVrLAorbmVtIHR1ZCBtZWcgbWVnb3N6dG90dCBpbnRlcnJ1cHRvdCBrZXplbG5pLgorCitBeiBlZ2VzeiBrYXJ0eWF0IGVyaW50byBiZWFsbGl0YXNvazoKKworQXogaW9wb3J0IGVzIGlycSBiZWFsbGl0YXMgbmluY3M6IGFtaXQgYSBQQ0kgQklPUyBraW9zenQgYSByZW5kc3plcm5laywKK2F6dCBoYXN6bmFsamEgYSBkcml2ZXIuCisKKworY29teDAvYm9hcmRudW0JLSBoYW55YWRpayBTbGljZUNPTSBrYXJ0eWEgYSBnZXBiZW4gKGEgJ3Rlcm1lc3pldGVzJyBQQ0kKKwkJc29ycmVuZGJlbiBlcnR2ZTogYWhvZ3lhbiBhIC9wcm9jL3BjaS1iYW4gdmFneSBheiAnbHNwY2knCisJCWtpbWVuZXRlYmVuIG1lZ2plbGVuaWssIGFsdGFsYWJhbiBheiBhbGFwbGFwaSBQQ0kgbWVnaGFqdG8KKwkJYXJhbWtvcm9raG96IGtvemVsZWJiIGVzbyBrYXJ0eWFrIGEga2lzZWJiIHNvcnN6YW11YWspCisKKwkJRGVmYXVsdDogMCAoMC10b2wga2V6ZG9kaWsgYSBzemFtb2xhcykKKworCitCYXIgYSBrb3ZldGtlem9rZXQgY3NhayBlZ3ktZWd5IGludGVyZmVzemVuIGFsbGl0anVrIGF0LCBtZWdpcyBheiBlZ2VzeiBrYXJ0eWEKK211a29kZXNldCBlZ3lzemVycmUgYWxsaXRqYWsuIEEgbWVna290ZXMgaG9neSBjc2FrIFVQLWJhbiBsZXZvIGludGVyZmVzemVuCitoYXN6bmFsaGF0b2FrLCBhemVydCB2YW4sIG1lcnQga3Vsb25iZW4gbmVtIHZhcnQgZXJlZG1lbnlla3JlIHZlemV0bmUgZWd5IGlseWVuCitwYXJhbmNjc29yb3phdDoKKworCWVjaG8gMCAgICAgICAgPmJvYXJkbnVtCisJZWNobyBpbnRlcm5hbCA+Y2xvY2tfc291cmNlCisJZWNobyAxICAgICAgICA+Ym9hcmRudW0KKworLSBFeiBhIDAtcyBib2FyZCBjbG9ja19zb3VyY2UtYXQgYWxsaXRhbmEgYXQuCisKK0V6ZWsgYSBiZWFsbGl0YXNvayBtZWdtYXJhZG5hayBheiBvc3N6ZXMgaW50ZXJmZXN6IHRvcmxlc2Vrb3IsIGRlIHRvcmxvZG5laworYSBkcml2ZXIgbW9kdWwga2kvYmV0b2x0ZXNla29yLgorCisKK2NvbXgwL2Nsb2NrX3NvdXJjZSAtIEEgVHggb3JhamVsZm9ycmFzYSwgYSBDaXNjby12YWwgaGFzb25sYXRvc3JhIGtlc3p1bHQuCisJSGFzem5hbGF0YToKKworCXBhcGF5YTojIGVjaG8gbGluZSAgICAgPi9wcm9jL2NvbXgvY29teDAvY2xvY2tfc291cmNlCisJcGFwYXlhOiMgZWNobyBpbnRlcm5hbCA+L3Byb2MvY29teC9jb214MC9jbG9ja19zb3VyY2UKKworCWxpbmUgICAgIC0gQSBUeCBvcmFqZWxldCBhIHZldHQgYWRhdGZvbHlhbWJvbCBkZWtvZG9samEsIGlneWVrc3ppaworCQlpZ2F6b2RuaSBob3p6YS4gSGEgbmVtIGxhdCBvcmFqZWxldCBheiBpbnB1dG9uLCBha2tvcgorCQlhdGFsbCBhIHNhamF0IG9yYWplbGdlbmVyYXRvcmFyYS4KKwlpbnRlcm5hbCAtIEEgVHggb3JhamVsZXQgYSBzYWphdCBvcmFqZWxnZW5lcmF0b3JhIHN6b2xnYWx0YXRqYS4KKworCURlZmF1bHQ6IGxpbmUKKworCU5vcm1hbCBvc3N6ZWFsbGl0YXMgZXNldGVuIGEgdGF2a296bGVzaSBzem9sZ2FsdGF0byBlc3prb3plCisJKHBsLiBIRFNMIG1vZGVtKSBhZGphIGF6IG9yYWplbGV0LCBlemVydCBleiBhIGRlZmF1bHQuCisKKworY29teDAvZnJhbWluZwktIEEgQ1JDNCBraS9iZSBrYXBjc29sYXNhCisKKwlBIENSQzQ6IDE2IFBDTSBrZXJldGV0IChBIFBDTSBrZXJldCBheiwgYW1pYmUgYSAzMiBkYXJhYiA2NAorCWtpbG9iaXRlcyBjc2F0b3JuYSB2YW4gYmVtdWx0aXBsZXhhbHZhLiBOZW0gb3NzemV0ZXZlc3p0ZW5kbyBhIEhETEMKKwlrZXJldHRlbC4pIDJ4OCAtYXMgY3NvcG9ydG9rcmEgb3N6dGFuYWssIGVzIGF6b2tob3ogNC00IGJpdGVzIENSQy10CisJc3phbW9sbmFrLiBFbHNvc29yYmFuIGEgdm9uYWwgbWlub3NlZ2VuZWsgYSBtb25pdG9yb3phc2FyYSBzem9sZ2FsLgorCisJcGFwYXlhOn4jIGVjaG8gY3JjNAk+L3Byb2MvY29teC9jb214MC9mcmFtaW5nCisJcGFwYXlhOn4jIGVjaG8gbm8tY3JjNAk+L3Byb2MvY29teC9jb214MC9mcmFtaW5nCisKKwlEZWZhdWx0IGEgJ2NyYzQnLCBhIE1BVEFWIHZvbmFsYWsgYWx0YWxhYmFuIGlneSBmdXRuYWsuIERlIGhhIG5lbQorCWVneWZvcm1hIGlzIGEgYmVhbGxpdGFzIGEgdm9uYWwga2V0IHZlZ2VuLCBhdHRvbCBhIGZvcmdhbG9tIGFsdGFsYWJhbgorCWF0IHR1ZCBtZW5uaS4KKworCitjb214MC9saW5lY29kZQktIEEgdm9uYWxpIGtvZG9sYXMgYmVhbGxpdGFzYQorCisJcGFwYXlhOn4jIGVjaG8gaGRiMwk+L3Byb2MvY29teC9jb214MC9saW5lY29kZQorCXBhcGF5YTp+IyBlY2hvIGFtaQk+L3Byb2MvY29teC9jb214MC9saW5lY29kZQorCisJRGVmYXVsdCBhICdoZGIzJywgYSBNQVRBViB2b25hbGFrIGlneSBmdXRuYWsuCisJCisJKGF6IEFNSSBrb2RvbGFzIGlnZW4gcml0a2EgRTEtZXMgdm9uYWxha25hbCkuIEhhIGV6IGEgYmVhbGxpdGFzIG5lbQorCWVneWV6aWsgYSB2b25hbCBrZXQgdmVnZW4sIGFra29yIGVsb2ZvcmR1bGhhdCBob2d5IGEga2VyZXRzemlua3JvbgorCW9zc3plam9uLCBkZSBDUkM0LWhpYmFrIGVzIGEgdm9uYWxha29uIGF0dml0dCBhZGF0b2tiYW4gaXMgaGliYWsKKwlrZWxldGtlem5layAoYW1pdCBhIEhETEMvU3luY1BQUCBzemludGVuIENSQy1oaWJhdmFsIGplbGV6KQorCisKK2NvbXgwL3JlZwktIGEga2FydHlhIGFyYW1rb3JlaW5laywgYSBNVU5JQ0ggKHJlZykgZXMgYSBGQUxDIChsYmlyZWcpCitjb214MC9sYmlyZWcJcmVnaXN6dGVyZWluZWsga296dmV0bGVuIGVsZXJlc2UuIEhhc3puYWxhdGE6CisKKwkJZWNobyA+cmVnIDB4MDQgMHgwCS0gYSA0LWVzIHJlZ2lzenRlcmJlIDAtdCBpcgorCQllY2hvID5yZWcgMHgxMDQJCS0gcHJpbnRrKCktdmFsIGtpaXJqYSBhIDQtZXMgcmVnaXN6dGVyCisJCQkJCXRhcnRhbG1hdCBhIHN5c2xvZ2JhLgorCisJCVdBUk5JTkc6IGV6ZWsgY3NhayBhIGZlamxlc3p0ZXNoZXoga2VzenVsdGVrLCBzb2sgZ2FsaWJhdAorCQlsZWhldCB2ZWx1ayBva296bmkhCisKKworY29teDAvbG9vcGJhY2sgLSBBIGthcnR5YSBHLjcwMyBqZWxlbmVrIGEgdmlzc3phaHVya29sYXNhcmEgaXMgdmFuIGxlaGV0b3NlZzoKKworCXBhcGF5YTojIGVjaG8gbm9uZSAgID4vcHJvYy9jb214L2NvbXgwL2xvb3BiYWNrCisJcGFwYXlhOiMgZWNobyBsb2NhbCAgPi9wcm9jL2NvbXgvY29teDAvbG9vcGJhY2sKKwlwYXBheWE6IyBlY2hvIHJlbW90ZSA+L3Byb2MvY29teC9jb214MC9sb29wYmFjaworCisJbm9uZSAgIC0gbmluY3Mgdmlzc3phaHVya29sYXMsIG5vcm1hbCBtdWtvZGVzCisJbG9jYWwgIC0gYSBrYXJ0eWEgYSBzYWphdCBtYWdhIGFsdGFsIGFkb3R0IGplbGV0IGthcGphIHZpc3N6YQorCXJlbW90ZSAtIGEga2FydHlhIGEga2l2dWxyb2wgdmV0dCBqZWxldCBhZGphIGtpZmVsZQorCisJRGVmYXVsdDogbm9uZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBeiBpbnRlcmZlc3poZXogKENpc2NvIHRlcm1pbm9sb2dpYWJhbiAnY2hhbm5lbC1ncm91cCcpIGthcGNzb2xvZG8gYmVhbGxpdGFzb2s6CisKK2NvbXgwL3RpbWVzbG90cwktIG1lbHkgdGltZXNsb3RvayAoaWRvc3plbGV0ZWspIHRhcnRvem5hayBheiBhZG90dCBpbnRlcmZlc3poZXouCisKKwlwYXBheWE6fiMgY2F0IC9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzCisJMSAzIDQgNSA2CisJcGFwYXlhOn4jCisKKwlFZ3kgdGltZXNsb3QgbWVna2VyZXNlc2UgKGhhbnlhcyBpbnRlcmZlc3piZSB0YXJ0b3ppayBuYWx1bmspOgorCisJcGFwYXlhOn4jIGdyZXAgJyA0JyAvcHJvYy9jb214L2NvbXgqL3RpbWVzbG90cworCS9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzOjEgMyA0IDUgNgorCXBhcGF5YTp+IworCisJQmVhbGxpdGFzYToKKwlwYXBheWE6fiMgZWNobyAnMSA1IDIgNiA3IDgnID4vcHJvYy9jb214L2NvbXgwL3RpbWVzbG90cworCQorCUEgdGltZXNsb3RvayBzb3JyZW5kamUgbmVtIHN6YW1pdCwgJzEgMyAyJyB1Z3lhbmF6IG1pbnQgYXogJzEgMiAzJy4KKworCUJlYWxsaXRhc2hveiBheiBhZG90dCBpbnRlcmZlc3puZWsgRE9XTi1iYW4ga2VsbCBsZW5uaWUKKwkoaWZjb25maWcgY29teDAgZG93biksIGRlIHVneWFuYW5uYWsgYSBrYXJ0eWFuYWsgYSB0b2JiaSBpbnRlcmZlc3plCisJdXplbWVsaGV0IGtvemJlbi4KKworCUJlYWxsaXRhc2tvciBsZWVsbGVub3J6aSwgaG9neSBheiB1aiB0aW1lc2xvdG9rIG5lbSB1dGtvem5lay1lIGVneQorCW1hc2lrIGludGVyZmVzeiB0aW1lc2xvdGphaXZhbC4gSGEgdXRrb3puZWssIGFra29yIG5lbSBhbGxpdGphIGF0LgorCisJTWluZGlnIDEwLWVzIHN6YW1yZW5kc3plcmJlbiB0b3J0ZW5payBhIHRpbWVzbG90b2sgZXJ0ZWxtZXplc2UsIG5laG9neQorCWEgMDgsIDA5IGFsYWt1IGZlbGlyYXN0IHJvc3N6dWwgZXJ0ZWxtZXp6ZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXogaW50ZXJmZXN6ZWsgZXMgYSBrYXJ0eWEgYWxsYXBvdGFuYWsgbGVrZXJkZXplc2U6CisKKy0gQSAnICctc3plbCBrZXpkb2RvIHNvcm9rIGF6IGVyZWRldGkga2ltZW5ldGV0LCBhIC8vLXJlbCBrZXpkb2RvIHNvcm9rIGEKK21hZ3lhcmF6YXRvdCBqZWx6aWsuCisKKyBwYXBheWE6fiQgY2F0IC9wcm9jL2NvbXgvY29teDEvc3RhdHVzCisgSW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlIHN0YXR1cyBpcyBVUCwgbW9kZW0gc3RhdHVzIGlzIFVQLCBwcm90b2NvbCBpcyBVUAorIE1vZGVtIHN0YXR1cyBjaGFuZ2VzOiAwLCBUcmFuc21pdHRlciBzdGF0dXMgaXMgSURMRSwgdGJ1c3k6IDAKKyBJbnRlcmZhY2UgbG9hZCAoaW5wdXQpOiA5NzgzNzYgLyA5NDc4MDggLyA5NTEwMjQgYml0cy9zICg1cy81bS8xNW0pCisgICAgICAgICAgICAgICAob3V0cHV0KTogOTc4Mzc2IC8gOTQ3ODQ4IC8gOTUxMDI0IGJpdHMvcyAoNXMvNW0vMTVtKQorIERlYnVnIGZsYWdzOiBub25lCisgUlggZXJyb3JzOiBsZW46IDIyLCBvdmVycnVuOiAxLCBjcmM6IDAsIGFib3J0czogMAorICAgICAgICAgICAgYnVmZmVyIG92ZXJydW46IDAsIHBidWZmZXIgb3ZlcnJ1bjogMAorIFRYIGVycm9yczogdW5kZXJydW46IDAKKyBMaW5lIGtlZXBhbGl2ZSAodmFsdWU6IDEwKSBzdGF0dXMgVVAgWzBdCisKKy8vIEl0dCBrZXpkb2RpayBhIGhhcmR2ZXItc3BlY2lmaWt1cyByZXN6OgorIENvbnRyb2xsZXIgc3RhdHVzOgorICAgICAgICAgTm8gYWxhcm1zCisKKy8vIEFsYXJtOiBoaWJhamVsemVzOgorLy8KKy8vIE5vIGFsYXJtcyAtIG1pbmRlbiByZW5kYmVuCisvLworLy8gTE9TICAtIExvc3MgT2YgU2lnbmFsIC0gbmVtIGVyemVrZWwgamVsZXQgYSBiZW1lbmV0ZW4uCisvLyBBSVMgIC0gQWxhcm0gSW5kaWNhdGlvbiBTaWduYWwgLSBjc2FrIGVneW1hcyB1dGFuaSAxLWVzZWsgam9ubmVrCisvLwlhIGJlbWVuZXRlbiwgYSB0dWxvbGRhbCBpZ3kgaXMgamVsZXpoZXRpIGhvZ3kgbWVnaGliYXNvZG90dCB2YWd5CisvLwluaW5jcyBpbmljaWFsaXphbHZhLgorLy8gQVVYUCAtIEF1eGlsaWFyeSBQYXR0ZXJuIEluZGljYXRpb24gLSAwMTAxMDEwMS4uIHNvcm96YXQgam9uIGEgYmVtZW5ldGVuLgorLy8gTEZBICAtIExvc3Mgb2YgRnJhbWUgQWxpZ25tZW50IC0gbmluY3Mga2VyZXRzemlua3JvbgorLy8gUlJBICAtIFJlY2VpdmUgUmVtb3RlIEFsYXJtIC0gYSB0dWxvbGRhbCBlbCwgZGUgaGliYXQgamVsZXouCisvLyBMTUZBIC0gTG9zcyBvZiBDUkM0IE11bHRpZnJhbWUgQWxpZ25tZW50IC0gbmluY3MgQ1JDNC1tdWx0aWtlcmV0LXN6aW5rcm9uCisvLyBOTUYgIC0gTm8gTXVsdGlmcmFtZSBhbGlnbm1lbnQgRm91bmQgYWZ0ZXIgNDAwIG1zZWMgLSBpbHllbiBhbGFybSBhIG5vLWNyYzQKKy8vCWVzIGNyYzQga2VyZXRlemVzZWsgZXNldGVuIG5pbmNzLCBsYXNkIGxlbnRlYmIKKy8vCisvLyBFZ3llYiBsZWhldHNlZ2VzIGhpYmFqZWx6ZXNlazoKKy8vCisvLyBUcmFuc21pdCBMaW5lIFNob3J0IC0gYSBrYXJ0eWEgdWd5IGVyemkgaG9neSBheiBhZGFzaSBraW1lbmV0ZSByb3ZpZHJlCisvLwl2YW4gemFydmEsIGV6ZXJ0IGtpa2FwY3NvbHRhIGF6IGFkYXN0LiAobmVtIGZlbHRldGxlbnVsIHZlc3ppIGVzenJlCisvLwlhIGt1bHNvIHJvdmlkemFyYXQpCisKKy8vIEEgdmV0ZWxpIG9sZGFsIGNzb21hZ2phaW5hayBsYW5jb2x0IGxpc3RhaSwgZGVidWcgY2Vsb2tyYToKKworIFJ4IHJpbmc6CisgICAgICAgICByYWZ1dG90dDogMAorICAgICAgICAgbGFzdGNoZWNrOiA1MDg0NTczMSwgamlmZmllczogNTEzMTQyODEKKyAgICAgICAgIGJhc2U6IDAxN2IxODU4CisgICAgICAgICByeF9kZXNjX3B0cjogMAorICAgICAgICAgcnhfZGVzY19wdHI6IDAxN2IxODU4CisgICAgICAgICBod19jdXJyX3B0cjogMDE3YjE4NTgKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODY4IDAxN2IxODk4IGMwMTZmZjAwCisgICAgICAgICAwNjA0MDAwMCAwMTdiMTg3OCAwMTdiMWU5YyBjMDE2ZmYwMAorICAgICAgICAgNDYwNDAwMDAgMDE3YjE4ODggMDE3YjI0YTAgYzAxNmZmMDAKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODU4IDAxN2IyYWE0IGMwMTZmZjAwCisKKy8vIEEga2FydHlhdCBoYXN6bmFsbyB0b2JiaSBpbnRlcmZlc3o6IGEgMC1zIGNoYW5uZWwtZ3JvdXAgYSBjb214MSBpbnRlcmZlc3osCisvLyBlcyBheiAxLDIsLi4uLDE2IHRpbWVzbG90b2sgdGFydG96bmFrIGhvenphOgorCisgSW50ZXJmYWNlcyB1c2luZyB0aGlzIGJvYXJkOiAoY2hhbm5lbC1ncm91cCwgaW50ZXJmYWNlLCB0aW1lc2xvdHMpCisgICAgICAgICAgMCBjb214MTogMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYKKyAgICAgICAgICAxIGNvbXgyOiAxNworICAgICAgICAgIDIgY29teDM6IDE4CisgICAgICAgICAgMyBjb214NDogMTkKKyAgICAgICAgICA0IGNvbXg1OiAyMAorICAgICAgICAgIDUgY29teDY6IDIxCisgICAgICAgICAgNiBjb214NzogMjIKKyAgICAgICAgICA3IGNvbXg4OiAyMworICAgICAgICAgIDggY29teDk6IDI0CisgICAgICAgICAgOSBjb214MTA6IDI1CisgICAgICAgICAxMCBjb214MTE6IDI2CisgICAgICAgICAxMSBjb214MTI6IDI3CisgICAgICAgICAxMiBjb214MTM6IDI4CisgICAgICAgICAxMyBjb214MTQ6IDI5CisgICAgICAgICAxNCBjb214MTU6IDMwCisgICAgICAgICAxNSBjb214MTY6IDMxCisKKy8vIEhhbnkgZXNlbWVueXQga2V6ZWx0IGxlIGEgZHJpdmVyIGVneS1lZ3kgaGFyZHZlci1pbnRlcnJ1cHQga2lzem9sZ2FsYXNhbmFsOgorCisgSW50ZXJydXB0IHdvcmsgaGlzdG9ncmFtOgorIGhpc3RbIDBdOiAgICAgICAgMCBoaXN0WyAxXTogICAgICAgIDIgaGlzdFsgMl06ICAgIDE4NTc0IGhpc3RbIDNdOiAgICAgICA3OQorIGhpc3RbIDRdOiAgICAgICAxNCBoaXN0WyA1XTogICAgICAgIDEgaGlzdFsgNl06ICAgICAgICAwIGhpc3RbIDddOiAgICAgICAgMQorIGhpc3RbIDhdOiAgICAgICAgMCBoaXN0WyA5XTogICAgICAgIDcKKworLy8gSGFueSBraWt1bGRlbmRvIGNzb21hZyB2b2x0IG1hciBhIFR4LXJpbmdiZW4gYW1pa29yIHVqYWJiIGxldHQgaXJ2YSBiZWxlOgorCisgVHggcmluZyBoaXN0b2dyYW06CisgaGlzdFsgMF06ICAgICAyMzI5IGhpc3RbIDFdOiAgICAgICAgMCBoaXN0WyAyXTogICAgICAgIDAgaGlzdFsgM106ICAgICAgICAwCisKKy8vIEF6IEUxLWludGVyZmVzeiBoaWJhLXN6YW1sYWxvaSwgYXogcmZjMjQ5NS1uZWsgbWVnZmVsZWxvZW46CisvLyAoa2IuIGEgQ2lzY28gcm91dGVyZWsgInNob3cgY29udHJvbGxlcnMgZTEiIGZvcm1hdHVtYWJhbjogaHR0cDovL3d3dy5jaXNjby5jb20vdW5pdmVyY2QvY2MvdGQvZG9jL3Byb2R1Y3Qvc29mdHdhcmUvaW9zMTEvcmJvb2svcmludGVyZmMuaHRtI3h0b2NpZDI1NjY5MTI2KQorCitEYXRhIGluIGN1cnJlbnQgaW50ZXJ2YWwgKDkxIHNlY29uZHMgZWxhcHNlZCk6CisgICA5NTE2IExpbmUgQ29kZSBWaW9sYXRpb25zLCA2NSBQYXRoIENvZGUgVmlvbGF0aW9ucywgMiBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAyIEZyIExvc3MgU2VjcywgMiBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMTEgVW5hdmFpbCBTZWNzCitEYXRhIGluIEludGVydmFsIDEgKDE1IG1pbnV0ZXMpOgorICAgMCBMaW5lIENvZGUgVmlvbGF0aW9ucywgMCBQYXRoIENvZGUgVmlvbGF0aW9ucywgMCBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAwIEZyIExvc3MgU2VjcywgMCBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMCBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gbGFzdCA0IGludGVydmFscyAoMSBob3VyKToKKyAgIDAgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDAgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDAgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMCBGciBMb3NzIFNlY3MsIDAgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDAgVW5hdmFpbCBTZWNzCitEYXRhIGluIGxhc3QgOTYgaW50ZXJ2YWxzICgyNCBob3Vycyk6CisgICAwIExpbmUgQ29kZSBWaW9sYXRpb25zLCAwIFBhdGggQ29kZSBWaW9sYXRpb25zLCAwIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDAgRnIgTG9zcyBTZWNzLCAwIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAwIFVuYXZhaWwgU2VjcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOZWhhbnkga3Vsb25sZWdlc2ViYiBiZWFsbGl0YXNpIGxlaGV0b3NlZyAoaWRvdmVsIGJlZXB1bGhldG5layBtYWpkIGEgZHJpdmVyYmUpOgorRXpla2tlbCBzb2sgZ2FsaWJhdCBsZWhldCBva296bmksIG5hZ3lvbiBvdmF0b3NhbiBrZWxsIG9rZXQgaGFzem5hbG5pIQorCisJbW9kaWZpZWQgQ1JDLTQsIGZvciBpbXByb3ZlZCBpbnRlcndvcmtpbmcgb2YgQ1JDLTQgYW5kIG5vbi1DUkMtNAorCWRldmljZXM6IChsYXNkIHBhZ2UgMTA3IGVzIGc3MDYgQW5uZXggQikKKwkJbGJpcmVnWyAweDFiIF0gfD0gMHgwOAorCQlsYmlyZWdbIDB4MWMgXSB8PSAweGMwCisJLSBpbHllbmtvciBlcnRlbG1lemV0dCBheiBOTUYgLSAnTm8gTXVsdGlmcmFtZSBhbGlnbm1lbnQgRm91bmQgYWZ0ZXIKKwk0MDAgbXNlYycgYWxhcm0uCisKKwlGQUxDIC0gYSB2b25hbGkgbWVnaGFqdG8gSUMKKwlsb2NhbCBsb29wIC0gYSBzYWphdCBhZGFzb21hdCBoYWxsamFtIHZpc3N6YQorCXJlbW90ZSBsb29wIC0gYSBraXZ1bHJvbCBqb3ZvIGFkYXN0IGFkb20gdmlzc3phCisKKwlFZ3kgaGliYWtlcmVzZXNyZSBoYXN6bmFsaGF0byBkb2xvZzoKKwkJLSAxLWVzIHRpbWVzbG90IGxvY2FsIGxvb3AgYSBGQUxDLWJhbjoJZWNobyA+bGJpcmVnIDB4MWQgMHgyMQorCQktIGxvY2FsIGxvb3Aga2lrYXBjc29sYXNhOgkJZWNobyA+bGJpcmVnIDB4MWQgMHgwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS50eHQKQEAgLTAsMCArMSwzNjkgQEAKKworU2xpY2VDT00gYWRhcHRlciB1c2VyJ3MgZG9jdW1lbnRhdGlvbiAtIGZvciB0aGUgMC41MSBkcml2ZXIgdmVyc2lvbgorCitXcml0dGVuIGJ5IEJhcnTzayBJc3R24W4gPGJhcnRva2lAaXRjLmh1PgorCitFbmdsaXNoIHRyYW5zbGF0aW9uOiBMYWthdG9zIEd59nJneSA8Z3l1cmlAaXRjLmh1PgorTW9uIERlYyAxMSAxNToyODo0MiBDRVQgMjAwMAorCitMYXN0IG1vZGlmaWVkOiBXZWQgQXVnIDI5IDE3OjI1OjM3IENFU1QgMjAwMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2FnZToKKworQ29tcGlsaW5nIHRoZSBrZXJuZWw6CisKK0NvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworCVsqXSBQcm9tcHQgZm9yIGRldmVsb3BtZW50IGFuZC9vciBpbmNvbXBsZXRlIGNvZGUvZHJpdmVycworCitOZXR3b3JrIGRldmljZSBzdXBwb3J0CisJV2FuIGludGVyZmFjZXMKKwkJPE0+IE11bHRpR2F0ZSAoQ09NWCkgc3luY2hyb25vdXMKKwkJCTxNPiBTdXBwb3J0IGZvciBNVU5JQ0ggYmFzZWQgYm9hcmRzOiBTbGljZUNPTSwgUENJQ09NIChORVcpCisJCQk8TT4gU3VwcG9ydCBmb3IgSERMQyBhbmQgc3luY1BQUC4uLgorCisKK0xvYWRpbmcgdGhlIG1vZHVsZXM6CisKK21vZHByb2JlIGNvbXgKKworbW9kcHJvYmUgY29teC1wcm90by1wcHAJCSMgbW9kdWxlIGZvciAgQ2lzY28tSERMQyBhbmQgU3luY1BQUCBwcm90b2NvbHMKKworbW9kcHJvYmUgY29teC1ody1tdW5pY2gJCSMgdGhlIG1vZHVsZSBsb2dzIGluZm9ybWF0aW9uIGJ5IHRoZSBrZXJuZWwKKwkJCQkjIGFib3V0IHRoZSBkZXRlY3RlZCBib2FyZHMKKworCitDb25maWd1cmluZyB0aGUgYm9hcmQ6CisKKyMgVGhpcyBpbnRlcmZhY2Ugd2lsbCB1c2UgdGhlIENpc2NvLUhETEMgbGluZSBwcm90b2NvbCwKKyMgdGhlIHRpbWVzbGljZXMgYXNzaWduZWQgYXJlIDEsMiAoMTI4IEtpQml0IGxpbmUgc3BlZWQpCisjICh0aGUgZmlyc3QgZGF0YSB0aW1lc2xpY2UgaW4gdGhlIEcuNzAzIGZyYW1lIGlzIG5vLiAxKQorIworbWtkaXIgL3Byb2MvY29teC9jb214MC4xLworZWNobyBzbGljZWNvbQk+L3Byb2MvY29teC9jb214MC4xL2JvYXJkdHlwZQorZWNobyBoZGxjCT4vcHJvYy9jb214L2NvbXgwLjEvcHJvdG9jb2wKK2VjaG8gMSAyCT4vcHJvYy9jb214L2NvbXgwLjEvdGltZXNsb3RzCisKKworIyBUaGlzIGludGVyZmFjZSB1c2VzIFN5bmNQUFAgbGluZSBwcm90b2NvbCwgdGhlIGFzc2lnbmVkIAorIyBpcyBuby4gMyAoNjQgS2lCaXQgbGluZSBzcGVlZCkKKyMKK21rZGlyIC9wcm9jL2NvbXgvY29teDAuMi8KK2VjaG8gc2xpY2Vjb20JPi9wcm9jL2NvbXgvY29teDAuMi9ib2FyZHR5cGUKK2VjaG8gcHBwCT4vcHJvYy9jb214L2NvbXgwLjIvcHJvdG9jb2wKK2VjaG8gMwkJPi9wcm9jL2NvbXgvY29teDAuMi90aW1lc2xvdHMKKworLi4uCisKK2lmY29uZmlnIGNvbXgwLjEgdXAKK2lmY29uZmlnIGNvbXgwLjIgdXAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIENPTVggaW50ZXJmYWNlcyB1c2UgYSAxMCBwYWNrZXQgdHJhbnNtaXQgcXVldWUgYnkgZGVmYXVsdCwgaG93ZXZlciBXQU4KK25ldHdvcmtzIHNvbWV0aW1lcyB1c2UgYmlnZ2VyIHZhbHVlcyAoMjAgdG8gMTAwKSwgdG8gdXRpbGl6ZSB0aGUgbGluZSBiZXR0ZXIKK2J5IGxhcmdlIHRyYWZmaWMgKHRob3VnaCB0aGUgbGluZSBkZWxheSBpbmNyZWFzZXMgYmVjYXVzZSBvZiBtb3JlIHBhY2tldHMKK2pvaW4gdGhlIHF1ZXVlKS4KKworIyBpZmNvbmZpZyBjb214MCB0eHF1ZXVlbGVuIDUwCisKK1RoaXMgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBpZmNvbmZpZyBjb21tYW5kIG9mIHRoZSBsYXRlciAKK2Rpc3RyaWJ1dGlvbnMsIHdoaWNoIGNhbWUgd2l0aCAyLjIga2VybmVscywgc3VjaCBhcyBSZWRIYXQgNi4xIG9yIERlYmlhbiAyLjIuCisKK1lvdSBjYW4gZG93bmxvYWQgYSBuZXdlciBuZXRiYXNlIHBhY2tldCBmcm9tIAoraHR0cDovL3d3dy5kZWJpYW4ub3JnL35yY3cvMi4yL25ldGJhc2UvIGZvciBEZWJpYW4gMi4xLCB3aGljaCBoYXMgYSBuZXcKK2lmY29uZmlnLiBZb3UgY2FuIGdldCBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIDIuMiBrZXJuZWwgd2l0aAorRGViaWFuIDIuMSBmcm9tIGh0dHA6Ly93d3cuZGViaWFuLm9yZy9yZWxlYXNlcy9zdGFibGUvcnVubmluZy1rZXJuZWwtMi4yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBTbGljZUNvbSBMRURzOgorCityZWQJLSBvbiwgaWYgdGhlIGludGVyZmFjZSBpcyB1bmNvbmZpZ3VyZWQsIG9yIGl0IGdldHMgUmVtb3RlIEFsYXJtLXMKK2dyZWVuCS0gb24sIGlmIHRoZSBib2FyZCBmaW5kcyBmcmFtZS1zeW5jIGluIHRoZSByZWNlaXZlZCBzaWduYWwgCQorCitBIGJpdCBtb3JlIGRldGFpbGVkOgorCityZWQ6CWdyZWVuOgltZWFuaW5nOgorCistCS0Jbm8gZnJhbWUtc3luYywgbm8gc2lnbmFsIHJlY2VpdmVkLCBvciBzaWduYWwgU05BRlUuCistCW9uCSJFdmVyeXRoaW5nIGlzIE9LIgorb24Jb24JUmVjZXBpb24gaXMgb2ssIGJ1dCB0aGUgcmVtb3RlIGVuZCBzZW5kcyBSZW1vdGUgQWxhcm0KK29uCS0JVGhlIGludGVyZmFjZSBpcyB1bmNvbmZpZ3VyZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBoYXJkd2FyZSBzZXR0aW5nIG9wdGlvbnM6CisKK1RoZSBnZW5lcmFsIGFuZCB0aGUgcHJvdG9jb2wgbGF5ZXIgb3B0aW9ucyBkZXNjcmliZWQgaW4gdGhlICdjb214LnR4dCcgZmlsZQorYXBwbHkgdG8gdGhlIFNsaWNlQ29tIGFzIHdlbGwsIEkgb25seSBzdW1tYXJpemUgdGhlIFNsaWNlQ29tIGhhcmR3YXJlIHNwZWNpZmljCitzZXR0aW5ncyBiZWxvdy4KKworVGhlICcvcHJvYy9jb214JyBjb25maWd1cmluZyBpbnRlcmZhY2U6CisKK0FuIGludGVyZmFjZSBkaXJlY3Rvcnkgc2hvdWxkIGJlIGNyZWF0ZWQgZm9yIGV2ZXJ5IHRpbWVzbG90IGdyb3VwIHdpdGgKKydta2RpcicsIGUsZzogJ2NvbXgwJywgJ2NvbXgxJyBldGMuIFRoZSB0aW1lc2xvdHMgY2FuIGJlIGFzc2lnbmVkIGhlcmUgdG8gdGhlCitzcGVjaWZpYyBpbnRlcmZhY2UuIFRoZSBDaXNjby1saWtlIG5hbWluZyBjb252ZW50aW9uIChzZXJpYWwzOjEgLSBmaXJzdAordGltZXNsb3QgZ3JvdXAgb2YgdGhlIDNyZC4gYm9hcmQpIGNhbid0IGJlIHVzZWQgaGVyZSwgYmVjYXVzZSB0aGVzZSBtZWFuIElQCithbGlhc2luZyBpbiBMaW51eC4KKworWW91IGNhbiBnaXZlIGFueSBtZWFuaW5nZnVsIG5hbWUgdG8ga2VlcCB0aGUgY29uZmlndXJhdGlvbiBjbGVhcjsgCitlLmc6ICdjb214MC4xJywgJ2NvbXgwLjInLCAnY29teDEuMScsIGNvbXgxLjInLCBpZiB5b3UgaGF2ZSB0d28gYm9hcmRzCit3aXRoIHR3byBpbnRlcmZhY2VzIGVhY2guCisKK1NldHRpbmdzLCB3aGljaCBhcHBseSB0byB0aGUgYm9hcmQ6CisKK05laXRoZXIgJ2lvJyBub3IgJ2lycScgc2V0dGluZ3MgcmVxdWlyZWQsIHRoZSBkcml2ZXIgdXNlcyB0aGUgcmVzb3VyY2VzCitnaXZlbiBieSB0aGUgUENJIEJJT1MuCisKK2NvbXgwL2JvYXJkbnVtCS0gYm9hcmQgbnVtYmVyIG9mIHRoZSBTbGljZUNvbSBpbiB0aGUgUEMgKHVzaW5nIHRoZSAnbmF0dXJhbCcKKwkJUENJIG9yZGVyKSBhcyBsaXN0ZWQgaW4gJy9wcm9jL3BjaScgb3IgdGhlIG91dHB1dCBvZiB0aGUKKwkgCSdsc3BjaScgY29tbWFuZCwgZ2VuZXJhbGx5IHRoZSBzbG90cyBuZWFyZXIgdG8gdGhlIG1vdGhlcmJvYXJkCisJCVBDSSBkcml2ZXIgY2hpcHMgaGF2ZSB0aGUgbG93ZXIgbnVtYmVycy4KKwkJCisJCURlZmF1bHQ6IDAgKHRoZSBjb3VudGluZyBzdGFydHMgd2l0aCAwKQorCitUaG91Z2ggdGhlIG9wdGlvbnMgYmVsb3cgYXJlIHRvIGJlIHNldCBvbiBhIHNpbmdsZSBpbnRlcmZhY2UsIHRoZXkgYXBwbHkgdG8gdGhlCit3aG9sZSBib2FyZC4gVGhlIHJlc3RyaWN0aW9uLCB0byB1c2UgdGhlbSBvbiAnVVAnIGludGVyZmFjZXMsIGlzIGJlY2F1c2UgdGhlIAorY29tbWFuZCBzZXF1ZW5jZSBiZWxvdyBjb3VsZCBsZWFkIHRvIHVucHJlZGljYWJsZSByZXN1bHRzLgorCisJIyBlY2hvIDAgICAgICAgID5ib2FyZG51bQorCSMgZWNobyBpbnRlcm5hbCA+Y2xvY2tfc291cmNlCisJIyBlY2hvIDEgICAgICAgID5ib2FyZG51bQorCitUaGUgc2VxdWVuY2Ugd291bGQgc2V0IHRoZSBjbG9jayBzb3VyY2Ugb2YgYm9hcmQgMC4KKworVGhlc2Ugc2V0dGluZ3Mgd2lsbCBwZXJzaXN0IGFmdGVyIGFsbCB0aGUgaW50ZXJmYWNlcyBhcmUgY2xlYXJlZCwgYnV0IGFyZQorY2xlYXJlZCB3aGVuIHRoZSBkcml2ZXIgbW9kdWxlIGlzIHVubG9hZGVkIGFuZCBsb2FkZWQgYWdhaW4uCisKK2NvbXgwL2Nsb2NrX3NvdXJjZSAtIHNvdXJjZSBvZiB0aGUgdHJhbnNtaXQgY2xvY2sKKwlVc2FnZToKKworCSMgZWNobyBsaW5lICAgICA+L3Byb2MvY29teC9jb214MC9jbG9ja19zb3VyY2UKKwkjIGVjaG8gaW50ZXJuYWwgPi9wcm9jL2NvbXgvY29teDAvY2xvY2tfc291cmNlCisKKwlsaW5lCS0gVGhlIFR4IGNsb2NrIGlzIGJlaW5nIGRlY29kZWQgaWYgdGhlIGlucHV0IGRhdGEgc3RyZWFtLAorCQlpZiBubyBjbG9jayBzZWVuIG9uIHRoZSBpbnB1dCwgdGhlbiB0aGUgYm9hcmQgd2lsbCB1c2UgaXQncworCQlvd24gY2xvY2sgZ2VuZXJhdG9yLgorCisJaW50ZXJuYWwgLSBUaGUgVHggY2xvY2sgaXMgc3VwcGxpZWQgYnkgdGhlIGJ1aWx0aW4gY2xvY2sgZ2VuZXJhdG9yLiAJCisKKwlEZWZhdWx0OiBsaW5lCisKKwlOb3JtYWxseSwgdGhlIHRlbGVjb21tdW5pY2F0aW9uIGNvbXBhbnkncyBlbmQgZGV2aWNlICh0aGUgSERTTAorCW1vZGVtKSBwcm92aWRlcyB0aGUgVHggY2xvY2ssIHRoYXQncyB3aHkgJ2xpbmUnIGlzIHRoZSBkZWZhdWx0LgorCitjb214MC9mcmFtaW5nCS0gU3dpdGNoaW5nIENSQzQgb2ZmL29uCisKKwlDUkM0OiAxNiBQQ00gZnJhbWVzIChUaGUgMzIgNjRLaWJpdCBjaGFubmVscyBhcmUgbXVsdGlwbGV4ZWQgaW50byBhCisJUENNIGZyYW1lLCBub3RoaW5nIHRvIGRvIHdpdGggSERMQyBmcmFtZXMpIGFyZSBkaXZpZGVkIGludG8gMng4CisJZ3JvdXBzLCBlYWNoIGdyb3VwIGhhcyBhIDQgYml0IENSQy4KKworCSMgZWNobyBjcmM0CT4vcHJvYy9jb214L2NvbXgwL2ZyYW1pbmcKKwkjIGVjaG8gbm8tY3JjNAk+L3Byb2MvY29teC9jb214MC9mcmFtaW5nCisKKwlEZWZhdWx0IGlzICdjcmM0JywgdGhlIEh1bmdhcmlhbiBNQVRBViBsaW5lcyBiZWhhdmUgbGlrZSB0aGlzLiAKKwlUaGUgdHJhZmZpYyBnZW5lcmFsbHkgcGFzc2VzIGlmIHRoaXMgc2V0dGluZyBvbiBib3RoIGVuZHMgZG9uJ3QgbWF0Y2guCisKK2NvbXgwL2xpbmVjb2RlCS0gU2V0dGluZyB0aGUgbGluZSBjb2RpbmcKKworCSMgZWNobyBoZGIzCT4vcHJvYy9jb214L2NvbXgwL2xpbmVjb2RlCisJIyBlY2hvIGFtaQk+L3Byb2MvY29teC9jb214MC9saW5lY29kZQorCisJRGVmYXVsdCBhICdoZGIzJywgTUFUQVYgbGluZXMgdXNlIHRoaXMuCisJCisJKEFNSSBjb2RpbmcgaXMgcmFyZWx5IHVzZWQgd2l0aCBFMSBsaW5lcykuIEZyYW1lIHN5bmMgbWF5IG9jY3VyLCBpZgorCXRoaXMgc2V0dGluZyBkb2Vzbid0IG1hdGNoIHRoZSBvdGhlciBlbmQncywgYnV0IENSQzQgYW5kIGRhdGEgZXJyb3JzCisJd2lsbCBjb21lLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBDUkMgZXJyb3JzIG9uIEhETEMvU3luY1BQUCBsZXZlbC4gCisKK2NvbXgwL3JlZwktIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGJvYXJkJ3MgTVVOSUNIIChyZWcpIGFuZCBGQUxDIChsYmlyZWcpCitjb214MC9sYmlyZWcJY2lyY3VpdCdzIHJlZ2lzdGVycyAgCisKKwkjIGVjaG8gPnJlZyAweDA0IDB4MAktIHdyaXRlIDAgdG8gcmVnaXN0ZXIgNAorCSMgZWNobyA+cmVnIDB4MTA0CS0gd3JpdGUgdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVyIDQgd2l0aAorCQkJCXByaW50aygpIHRvIHN5c2xvZworCitXQVJOSU5HISBUaGVzZSBhcmUgb25seSBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMsIG1lc3Npbmcgd2l0aCB0aGlzIHdpbGwKKwlyZXN1bHQgbXVjaCB0cm91YmxlIQorCitjb214MC9sb29wYmFjayAtIFBsYWNlcyBhIGxvb3AgdG8gdGhlIGJvYXJkJ3MgRy43MDMgc2lnbmFscworCisJIyBlY2hvIG5vbmUgICA+L3Byb2MvY29teC9jb214MC9sb29wYmFjaworCSMgZWNobyBsb2NhbCAgPi9wcm9jL2NvbXgvY29teDAvbG9vcGJhY2sKKwkjIGVjaG8gcmVtb3RlID4vcHJvYy9jb214L2NvbXgwL2xvb3BiYWNrCisKKwlub25lICAgLSBub3JtYWwgb3BlcmF0aW9uLCBubyBsb29wCisJbG9jYWwgIC0gdGhlIGJvYXJkIHJlY2VpdmVzIGl0J3Mgb3duIG91dHB1dAorCXJlbW90ZSAtIHRoZSBib2FyZCBzZW5kcyB0aGUgcmVjZWl2ZWQgZGF0YSB0byB0aGUgcmVtb3RlIHNpZGUKKworCURlZmF1bHQ6IG5vbmUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW50ZXJmYWNlIChjaGFubmVsIGdyb3VwIGluIENpc2NvIHRlcm1zKSBzZXR0aW5nczogCisKK2NvbXgwL3RpbWVzbG90cwktIHdoaWNoIHRpbWVzbG90cyBiZWxvbmcgdG8gdGhlIGdpdmVuIGludGVyZmFjZQorCisJU2V0dGluZzoKKworCSMgZWNobyAnMSA1IDIgNiA3IDgnID4vcHJvYy9jb214L2NvbXgwL3RpbWVzbG90cworCisJIyBjYXQgL3Byb2MvY29teC9jb214MC90aW1lc2xvdHMKKwkxIDIgNSA2IDcgOCAKKwkjCisKKwlGaW5kaW5nIGEgdGltZXNsb3Q6IAorCisJIyBncmVwICcgNCcgL3Byb2MvY29teC9jb214Ki90aW1lc2xvdHMKKwkvcHJvYy9jb214L2NvbXgwL3RpbWVzbG90czoxIDMgNCA1IDYKKwkjCisKKwlUaGUgdGltZXNsb3RzIGNhbiBiZSBpbiBhbnkgb3JkZXIsICcxIDIgMycgaXMgdGhlIHNhbWUgYXMgJzEgMyAyJy4KKworCVRoZSBpbnRlcmZhY2UgaGFzIHRvIGJlIERPV04gZHVyaW5nIHRoZSBzZXR0aW5nICgnaWZjb25maWcgY29teDAKKwlkb3duJyksIGJ1dCB0aGUgb3RoZXIgaW50ZXJmYWNlcyBjb3VsZCBvcGVyYXRlIG5vcm1hbGx5LgorCisJVGhlIGRyaXZlciBjaGVja3MgaWYgdGhlIGFzc2lnbmVkIHRpbWVzbG90cyBhcmUgdmFjYW50LCBpZiBub3QsIHRoZW4KKwl0aGUgc2V0dGluZyB3b24ndCBiZSBhcHBsaWVkLgorCisJVGhlIHRpbWVzbG90IHZhbHVlcyBhcmUgdHJlYXRlZCBhcyBkZWNpbWFsIG51bWJlcnMsIG5vdCB0byBtaXN1bmRlcnN0YW5kCisJdmFsdWVzIG9mIDA4LCAwOSBmb3JtLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGVja2luZyB0aGUgaW50ZXJmYWNlIGFuZCBib2FyZCBzdGF0dXM6CisKKy0gTGluZXMgYmVnaW5uaW5nIHdpdGggJyAnIChzcGFjZSkgYmVsb25nIHRvIHRoZSBvcmlnaW5hbCBvdXRwdXQsIHRoZSBsaW5lcword2hpY2ggYmVnaW4gd2l0aCAnLy8nIGFyZSB0aGUgY29tbWVudHMuCisKKyBwYXBheWE6fiQgY2F0IC9wcm9jL2NvbXgvY29teDEvc3RhdHVzCisgSW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlIHN0YXR1cyBpcyBVUCwgbW9kZW0gc3RhdHVzIGlzIFVQLCBwcm90b2NvbCBpcyBVUAorIE1vZGVtIHN0YXR1cyBjaGFuZ2VzOiAwLCBUcmFuc21pdHRlciBzdGF0dXMgaXMgSURMRSwgdGJ1c3k6IDAKKyBJbnRlcmZhY2UgbG9hZCAoaW5wdXQpOiA5NzgzNzYgLyA5NDc4MDggLyA5NTEwMjQgYml0cy9zICg1cy81bS8xNW0pCisgICAgICAgICAgICAgICAob3V0cHV0KTogOTc4Mzc2IC8gOTQ3ODQ4IC8gOTUxMDI0IGJpdHMvcyAoNXMvNW0vMTVtKQorIERlYnVnIGZsYWdzOiBub25lCisgUlggZXJyb3JzOiBsZW46IDIyLCBvdmVycnVuOiAxLCBjcmM6IDAsIGFib3J0czogMAorICAgICAgICAgICAgYnVmZmVyIG92ZXJydW46IDAsIHBidWZmZXIgb3ZlcnJ1bjogMAorIFRYIGVycm9yczogdW5kZXJydW46IDAKKyBMaW5lIGtlZXBhbGl2ZSAodmFsdWU6IDEwKSBzdGF0dXMgVVAgWzBdCisKKy8vIFRoZSBoYXJkd2FyZSBzcGVjaWZpYyBwYXJ0IHN0YXJ0cyBoZXJlOgorIENvbnRyb2xsZXIgc3RhdHVzOgorICAgICAgICAgTm8gYWxhcm1zCisKKy8vIEFsYXJtOiAKKy8vCisvLyBObyBhbGFybXMgLSBFdmVyeXRoaW5nIE9LCisvLworLy8gTE9TICAtIExvc3MgT2YgU2lnbmFsIC0gTm8gc2lnbmFsIHNlbnNlZCBvbiB0aGUgaW5wdXQKKy8vIEFJUyAgLSBBbGFybSBJbmRpY2F0aW9uIFNpZ25hbCAtIFRoZSByZW1vdCBzaWRlIHNlbmRzICcxMTExMTExMSctcywgCisvLwlpdCB0ZWxscywgdGhhdCB0aGVyZSdzIGFuIGVycm9yIGNvbmRpdGlvbiwgb3IgaXQncyBub3QKKy8vCWluaXRpYWxpc2VkLgorLy8gQVVYUCAtIEF1eGlsaWFyeSBQYXR0ZXJuIEluZGljYXRpb24gLSAwMTAxMDEwMS4uIHJlY2VpdmVkLgorLy8gTEZBICAtIExvc3Mgb2YgRnJhbWUgQWxpZ25tZW50IC0gbm8gZnJhbWUgc3luYyByZWNlaXZlZC4KKy8vIFJSQSAgLSBSZWNlaXZlIFJlbW90ZSBBbGFybSAtIHRoZSByZW1vdGUgZW5kJ3MgT0ssIGJ1dCBzaW5nbmFscyBlcnJvciBjb25kLgorLy8gTE1GQSAtIExvc3Mgb2YgQ1JDNCBNdWx0aWZyYW1lIEFsaWdubWVudCAtIG5vIENSQzQgbXVsdGlmcmFtZSBzeW5jLgorLy8gTk1GICAtIE5vIE11bHRpZnJhbWUgYWxpZ25tZW50IEZvdW5kIGFmdGVyIDQwMCBtc2VjIC0gbm8gc3VjaCBhbGFybSB1c2luZworLy8Jbm8tY3JjNCBvciBjcmM0IGZyYW1pbmcsIHNlZSBiZWxvdy4KKy8vCisvLyBPdGhlciBwb3NzaWJsZSBlcnJvciBtZXNzYWdlczoKKy8vCisvLyBUcmFuc21pdCBMaW5lIFNob3J0IC0gdGhlIGJvYXJkIGZlbHQsIHRoYXQgaXQncyBvdXRwdXQgaXMgc2hvcnQtY2lyY3VpdGVkLAorLy8gCXNvIGl0IHN3aXRjaGVkIHRoZSB0cmFuc21pc3Npb24gb2ZmLiAoVGhlIGJvYXJkIGNhbid0IGRlZmluaXRlbHkgdGVsbCwKKy8vCXRoYXQgaXQncyBvdXRwdXQgaXMgc2hvcnQtY2lyY3VpdGVkLikKKworLy8gQ2hhaW5lZCBsaXN0IG9mIHRoZSByZWNlaXZlZCBwYWNrZXRzLCBmb3IgZGVidWcgcHVycG9zZXM6CisKKyBSeCByaW5nOgorICAgICAgICAgcmFmdXRvdHQ6IDAKKyAgICAgICAgIGxhc3RjaGVjazogNTA4NDU3MzEsIGppZmZpZXM6IDUxMzE0MjgxCisgICAgICAgICBiYXNlOiAwMTdiMTg1OAorICAgICAgICAgcnhfZGVzY19wdHI6IDAKKyAgICAgICAgIHJ4X2Rlc2NfcHRyOiAwMTdiMTg1OAorICAgICAgICAgaHdfY3Vycl9wdHI6IDAxN2IxODU4CisgICAgICAgICAwNjA0MDAwMCAwMTdiMTg2OCAwMTdiMTg5OCBjMDE2ZmYwMAorICAgICAgICAgMDYwNDAwMDAgMDE3YjE4NzggMDE3YjFlOWMgYzAxNmZmMDAKKyAgICAgICAgIDQ2MDQwMDAwIDAxN2IxODg4IDAxN2IyNGEwIGMwMTZmZjAwCisgICAgICAgICAwNjA0MDAwMCAwMTdiMTg1OCAwMTdiMmFhNCBjMDE2ZmYwMAorCisvLyBBbGwgdGhlIGludGVyZmFjZXMgdXNpbmcgdGhlIGJvYXJkOiBjb214MSwgdXNpbmcgdGhlIDEsMiwuLi4xNiB0aW1lc2xvdHMsCisvLyBjb214MiwgdXNpbmcgdGltZXNsb3QgMTcsIGV0Yy4KKworIEludGVyZmFjZXMgdXNpbmcgdGhpcyBib2FyZDogKGNoYW5uZWwtZ3JvdXAsIGludGVyZmFjZSwgdGltZXNsb3RzKQorICAgICAgICAgIDAgY29teDE6IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2CisgICAgICAgICAgMSBjb214MjogMTcKKyAgICAgICAgICAyIGNvbXgzOiAxOAorICAgICAgICAgIDMgY29teDQ6IDE5CisgICAgICAgICAgNCBjb214NTogMjAKKyAgICAgICAgICA1IGNvbXg2OiAyMQorICAgICAgICAgIDYgY29teDc6IDIyCisgICAgICAgICAgNyBjb214ODogMjMKKyAgICAgICAgICA4IGNvbXg5OiAyNAorICAgICAgICAgIDkgY29teDEwOiAyNQorICAgICAgICAgMTAgY29teDExOiAyNgorICAgICAgICAgMTEgY29teDEyOiAyNworICAgICAgICAgMTIgY29teDEzOiAyOAorICAgICAgICAgMTMgY29teDE0OiAyOQorICAgICAgICAgMTQgY29teDE1OiAzMAorICAgICAgICAgMTUgY29teDE2OiAzMQorCisvLyBUaGUgbnVtYmVyIG9mIGV2ZW50cyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIgZHVyaW5nIGFuIGludGVycnVwdCBjeWNsZToKKworIEludGVycnVwdCB3b3JrIGhpc3RvZ3JhbToKKyBoaXN0WyAwXTogICAgICAgIDAgaGlzdFsgMV06ICAgICAgICAyIGhpc3RbIDJdOiAgICAxODU3NCBoaXN0WyAzXTogICAgICAgNzkKKyBoaXN0WyA0XTogICAgICAgMTQgaGlzdFsgNV06ICAgICAgICAxIGhpc3RbIDZdOiAgICAgICAgMCBoaXN0WyA3XTogICAgICAgIDEKKyBoaXN0WyA4XTogICAgICAgIDAgaGlzdFsgOV06ICAgICAgICA3CisKKy8vIFRoZSBudW1iZXIgb2YgcGFja2V0cyB0byBzZW5kIGluIHRoZSBUeCByaW5nLCB3aGVuIGEgbmV3IG9uZSBhcnJpdmVkOgorCisgVHggcmluZyBoaXN0b2dyYW06CisgaGlzdFsgMF06ICAgICAyMzI5IGhpc3RbIDFdOiAgICAgICAgMCBoaXN0WyAyXTogICAgICAgIDAgaGlzdFsgM106ICAgICAgICAwCisKKy8vIFRoZSBlcnJvciBjb3VudGVycyBvZiB0aGUgRTEgaW50ZXJmYWNlLCBhY2NvcmRpbmcgdG8gdGhlIFJGQzI0OTUsCisvLyAoc2ltaWxhciB0byB0aGUgQ2lzY28gInNob3cgY29udHJvbGxlcnMgZTEiIGNvbW1hbmQncyBvdXRwdXQ6CisvLyBodHRwOi8vd3d3LmNpc2NvLmNvbS91bml2ZXJjZC9jYy90ZC9kb2MvcHJvZHVjdC9zb2Z0d2FyZS9pb3MxMS9yYm9vay9yaW50ZXJmYy5odG0jeHRvY2lkMjU2NjkxMjYpCisKK0RhdGEgaW4gY3VycmVudCBpbnRlcnZhbCAoOTEgc2Vjb25kcyBlbGFwc2VkKToKKyAgIDk1MTYgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDY1IFBhdGggQ29kZSBWaW9sYXRpb25zLCAyIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDIgRnIgTG9zcyBTZWNzLCAyIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAxMSBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gSW50ZXJ2YWwgMSAoMTUgbWludXRlcyk6CisgICAwIExpbmUgQ29kZSBWaW9sYXRpb25zLCAwIFBhdGggQ29kZSBWaW9sYXRpb25zLCAwIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDAgRnIgTG9zcyBTZWNzLCAwIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAwIFVuYXZhaWwgU2VjcworRGF0YSBpbiBsYXN0IDQgaW50ZXJ2YWxzICgxIGhvdXIpOgorICAgMCBMaW5lIENvZGUgVmlvbGF0aW9ucywgMCBQYXRoIENvZGUgVmlvbGF0aW9ucywgMCBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAwIEZyIExvc3MgU2VjcywgMCBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMCBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gbGFzdCA5NiBpbnRlcnZhbHMgKDI0IGhvdXJzKToKKyAgIDAgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDAgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDAgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMCBGciBMb3NzIFNlY3MsIDAgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDAgVW5hdmFpbCBTZWNzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWUgdW5pcXVlIG9wdGlvbnMsIChtYXkgZ2V0IGludG8gdGhlIGRyaXZlciBsYXRlcik6CitUcmVhdCB0aGVtIHZlcnkgY2FyZWZ1bGx5LCB0aGVzZSBjYW4gY2F1c2UgbXVjaCB0cm91YmxlIQorCisJbW9kaWZpZWQgQ1JDLTQsIGZvciBpbXByb3ZlZCBpbnRlcndvcmtpbmcgb2YgQ1JDLTQgYW5kIG5vbi1DUkMtNAorCWRldmljZXM6IChzZWUgcGFnZSAxMDcgYW5kIGc3MDYgQW5uZXggQikKKwkJbGJpcmVnWyAweDFiIF0gfD0gMHgwOAorCQlsYmlyZWdbIDB4MWMgXSB8PSAweGMwCisKKwktIFRoZSBOTUYgLSAnTm8gTXVsdGlmcmFtZSBhbGlnbm1lbnQgRm91bmQgYWZ0ZXIgNDAwIG1zZWMnIGFsYXJtIAorCWNvbWVzIGludG8gYWNjb3VudC4KKworCUZBTEMgLSB0aGUgbGluZSBkcml2ZXIgY2hpcC4KKwlsb2NhbCBsb29wIC0gSSBoZWFyIG15IHRyYW5zbWlzc2lvbiBiYWNrLgorCXJlbW90ZSBsb29wIC0gSSBlY2hvIHRoZSByZW1vdGUgdHJhbnNtaXNzaW9uIGJhY2suCisKKwlTb21ldGhpbmcgdXNlZnVsIGZvciBmaW5kaW5nIGVycm9yczoKKwkKKwkJLSBsb2NhbCBsb29wIGZvciB0aW1lc2xvdCAxIGluIHRoZSBGQUxDIGNoaXA6CisKKwkjIGVjaG8gPmxiaXJlZyAweDFkIDB4MjEKKworCQktIFN3aXRoaW5nIHRoZSBsb29wIG9mZjoKKworCSMgZWNobyA+bGJpcmVnIDB4MWQgMHgwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NtYzkudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NtYzkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTE1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jOS50eHQKQEAgLTAsMCArMSw0MiBAQAorCitTTUMgOXh4eHggRHJpdmVyIAorUmV2aXNpb24gMC4xMiAKKzMvNS85NgorQ29weXJpZ2h0IDE5OTYgIEVyaWsgU3RhaGxtYW4gCitSZWxlYXNlZCB1bmRlciB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIAorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGluc3RydWN0aW9ucyBhbmQgY2F2ZWF0cyBmb3IgbXkgU01DOXh4eCBkcml2ZXIuICBZb3UKK3Nob3VsZCBub3QgYmUgdXNpbmcgdGhlIGRyaXZlciB3aXRob3V0IHJlYWRpbmcgdGhpcyBmaWxlLiAgCisKK1RoaW5ncyB0byBub3RlIGFib3V0IGluc3RhbGxhdGlvbjoKKworICAxLiBUaGUgZHJpdmVyIHNob3VsZCB3b3JrIG9uIGFsbCBrZXJuZWxzIGZyb20gMS4yLjEzIHVudGlsIDEuMy43MS4KKwkoQSBrZXJuZWwgcGF0Y2ggaXMgc3VwcGxpZWQgZm9yIDEuMy43MSApCisKKyAgMi4gSWYgeW91IGluY2x1ZGUgdGhpcyBpbnRvIHRoZSBrZXJuZWwsIHlvdSBtaWdodCBuZWVkIHRvIGNoYW5nZSBzb21lCisJb3B0aW9ucywgc3VjaCBhcyBmb3IgZm9yY2luZyBJUlEuICAgCisKKyAKKyAgMy4gIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIHJ1biAnbWFrZScgLiAgIAorCU1ha2Ugd2lsbCBnaXZlIHlvdSB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyBmb3IgdmFyaW91cyBrZXJuZWwgc3VwcG9ydC4KKyAKKyAgNC4gIExvYWRpbmcgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSA6CisKKwl1c2U6ICAgaW5zbW9kIHNtYzkxOTQubyAKKwlvcHRpb25hbCBwYXJhbWV0ZXJzOgorCQlpbz14eHh4ICAgIDogeW91ciBiYXNlIGFkZHJlc3MKKwkJaXJxPXh4CSAgIDogeW91ciBpcnEgCisJCWlmcG9ydD14ICAgOgkwIGZvciB3aGF0ZXZlciBpcyBkZWZhdWx0CisJCQkJMSBmb3IgdHdpc3RlZCBwYWlyCisJCQkJMiBmb3IgQVVJICAoIG9yIEJOQyBvbiBzb21lIGNhcmRzICkKKworSG93IHRvIG9idGFpbiB0aGUgbGF0ZXN0IHZlcnNpb24/IAorCQorRlRQOiAgCisJZnRwOi8vZmVucmlzLmNhbXB1cy52dC5lZHUvc21jOS9zbWM5LTEyLnRhci5negorCWZ0cDovL3NmYm94LnZ0LmVkdS9maWxlYm94L0YvZmVucmlzL3NtYzkvc21jOS0xMi50YXIuZ3ogCisgICAKKworQ29udGFjdGluZyBtZToKKyAgICBlcmlrQG1haWwudnQuZWR1CisgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jdHIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NtY3RyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzg2NmY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NtY3RyLnR4dApAQCAtMCwwICsxLDY2IEBACitUZXh0IEZpbGUgZm9yIHRoZSBTTUMgVG9rZW5DYXJkIFRva2VuUmluZyBMaW51eCBkcml2ZXIgKHNtY3RyLmMpLgorICAgICAgICBCeSBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgorCitUaGUgTGludXggU01DIFRva2VuIFJpbmcgZHJpdmVyIHdvcmtzIHdpdGggdGhlIFNNQyBUb2tlbkNhcmQgRWxpdGUgKDgxMTVUKSAKK0lTQSBhbmQgU01DIFRva2VuQ2FyZCBFbGl0ZS9BICg4MTE1VC9BKSBNQ0EgYWRhcHRlcnMuCisKK0xhdGVzdCBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBjYW4gYmUgb2J0YWluZWQgb24gdGhlIExpbnV4LVNOQSBXV1cgc2l0ZS4KK1BsZWFzZSBwb2ludCB5b3VyIGJyb3dzZXIgdG86IGh0dHA6Ly93d3cubGludXgtc25hLm9yZworCitUaGlzIGRyaXZlciBpcyByYXRoZXIgc2ltcGxlIHRvIHVzZS4gU2VsZWN0IFkgdG8gVG9rZW4gUmluZyBhZGFwdGVyIHN1cHBvcnQKK2luIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQSBjaG9pY2UgZm9yIFNNQyBUb2tlbiBSaW5nIGFkYXB0ZXJzIHdpbGwKK2FwcGVhci4gVGhpcyBkcml2ZXMgc3VwcG9ydHMgYWxsIFNNQyBJU0EvTUNBIGFkYXB0ZXJzLiBDaG9vc2UgdGhpcworb3B0aW9uLiBJIHBlcnNvbmFsbHkgcmVjb21tZW5kIGNvbXBpbGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlIChNKSwgYnV0IGlmIHlvdQoreW91IHdvdWxkIGxpa2UgdG8gY29tcGlsZSBpdCBzdGF0aWNseSBhbnN3ZXIgWSBpbnN0ZWFkLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBhZGFwdGVycyB3aXRob3V0IHRoZSBuZWVkIHRvIGxvYWQgbXVsdGlwbGUgY29waWVzCitvZiB0aGUgZHJpdmVyLiBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gbG9hZCB1cCB0byA3IGFkYXB0ZXJzIHdpdGhvdXQgYW55IGtlcm5lbAorbW9kaWZpY2F0aW9ucywgaWYgeW91IGFyZSBpbiBuZWVkIG9mIG1vcmUgcGxlYXNlIGNvbnRhY3QgdGhlIG1haW50YWluZXIgb2YgdGhpcworZHJpdmVyLgorCitMb2FkIHRoZSBkcml2ZXIgZWl0aGVyIGJ5IGxpbG8vbG9hZGxpbiBvciBhcyBhIG1vZHVsZS4gV2hlbiBhIG1vZHVsZSB1c2luZyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIHdpbGwgc3VmZmljZSBmb3IgbW9zdDoKKworIyBtb2Rwcm9iZSBzbWN0cgorc21jdHIuYzogdjEuMDAgMTIvNi85OSBieSBqc2NobHN0QHNhbWJhLm9yZwordHIwOiBTTUMgVG9rZW5DYXJkIDgxMTVUIGF0IElvIDB4MzAwLCBJcnEgMTAsIFJvbSAweGQ4MDAwLCBSYW0gMHhjYzAwMC4KKworTm93IGp1c3Qgc2V0dXAgdGhlIGRldmljZSB2aWEgaWZjb25maWcgYW5kIHNldCBhbmQgcm91dGVzIHlvdSBtYXkgaGF2ZS4gQWZ0ZXIKK3RoaXMgeW91IGFyZSByZWFkeSB0byBzdGFydCBzZW5kaW5nIHNvbWUgdG9rZW5zLgorCitFcnJhdGE6CisxKS4gRm9yIGFueW9uZSB3b25kZXJpbmcgd2hlcmUgdG8gcGljayB1cCB0aGUgU01DIGFkYXB0ZXJzIHBsZWFzZSBicm93c2UKKyAgICB0byBodHRwOi8vd3d3LnNtYy5jb20KKworMikuIElmIHlvdSBhcmUgdGhlIGZpcnN0L29ubHkgVG9rZW4gUmluZyBDbGllbnQgb24gYSBUb2tlbiBSaW5nIExBTiwgcGxlYXNlCisgICAgc3BlY2lmeSB0aGUgcmluZ3NwZWVkIHdpdGggdGhlIHJpbmdzcGVlZD1bNC8xNl0gbW9kdWxlIG9wdGlvbi4gSWYgbm8KKyAgICByaW5nc3BlZWQgaXMgc3BlY2lmaWVkIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGF1dG9kZXRlY3QgdGhlIHJpbmcKKyAgICBzcGVlZCBhbmQvb3IgaWYgdGhlIGFkYXB0ZXIgaXMgdGhlIGZpcnN0L29ubHkgc3RhdGlvbiBvbiB0aGUgcmluZyB0YWtlCisgICAgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbnMuIAorCisgICAgTk9URTogRGVmYXVsdCByaW5nIHNwZWVkIGlzIDE2TUIgVVRQLgorCiszKS4gUG5QIHN1cHBvcnQgZm9yIHRoaXMgYWRhcHRlciBzdWNrcy4gSSByZWNvbW1lbmQgaGFyZCBzZXR0aW5nIHRoZSAKKyAgICBJTy9NRU0vSVJRIGJ5IHRoZSBqdW1wZXJzIG9uIHRoZSBhZGFwdGVyLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZQorICAgIGxvYWQgdGhlIG1vZHVsZSB3aXRoIHRoZSBmb2xsb3dpbmcgaW89W2lvYWRkcl0gbWVtPVttZW1fYWRkcl0KKyAgICBpcnE9W2lycV9udW1dLgorCisgICAgVGhlIGZvbGxvd2luZyBJUlEsIElPLCBhbmQgTUVNIHNldHRpbmdzIGFyZSBzdXBwb3J0ZWQuCisKKyAgICBJTyBwb3J0czoKKyAgICAweDIwMCwgMHgyMjAsIDB4MjQwLCAweDI2MCwgMHgyODAsIDB4MkEwLCAweDJDMCwgMHgyRTAsIDB4MzAwLAorICAgIDB4MzIwLCAweDM0MCwgMHgzNjAsIDB4MzgwLgorCisgICAgSVJRczoKKyAgICAyLCAzLCA0LCA1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1CisKKyAgICBNZW1vcnkgYWRkcmVzc2VzOgorICAgIDB4QTAwMDAsIDB4QTQwMDAsIDB4QTgwMDAsIDB4QUMwMDAsIDB4QjAwMDAsIDB4QjQwMDAsCisgICAgMHhCODAwMCwgMHhCQzAwMCwgMHhDMDAwMCwgMHhDNDAwMCwgMHhDODAwMCwgMHhDQzAwMCwKKyAgICAweEQwMDAwLCAweEQ0MDAwLCAweEQ4MDAwLCAweERDMDAwLCAweEUwMDAwLCAweEU0MDAwLAorICAgIDB4RTgwMDAsIDB4RUMwMDAsIDB4RjAwMDAsIDB4RjQwMDAsIDB4RjgwMDAsIDB4RkMwMDAKKworVGhpcyBkcml2ZXIgaXMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBJdHMgRmlybXdhcmUgaW1hZ2UgaXMKK2luY2x1ZGVkIGFzIGFuIGluaXRpYWxpemVkIEMtYXJyYXkgYW5kIGlzIGxpY2Vuc2VkIGJ5IFNNQyB0byB0aGUgTGludXgKK3VzZXJzIG9mIHRoaXMgZHJpdmVyLiBIb3dldmVyIG5vIHdhcnJhbnR5IGFib3V0IGl0cyBmaXRuZXNzIGlzIGV4cHJlc3NlZCBvcgoraW1wbGllZCBieSBTTUMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGNwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNzQ5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGNwLnR4dApAQCAtMCwwICsxLDM5IEBACitIb3cgdGhlIG5ldyBUQ1Agb3V0cHV0IG1hY2hpbmUgW255aV0gd29ya3MuCisKKworRGF0YSBpcyBrZXB0IG9uIGEgc2luZ2xlIHF1ZXVlLiBUaGUgc2tiLT51c2VycyBmbGFnIHRlbGxzIHVzIGlmIHRoZSBmcmFtZSBpcworb25lIHRoYXQgaGFzIGJlZW4gcXVldWVkIGFscmVhZHkuIFRvIGFkZCBhIGZyYW1lIHdlIHRocm93IGl0IG9uIHRoZSBlbmQuIEFjaword2Fsa3MgZG93biB0aGUgbGlzdCBmcm9tIHRoZSBzdGFydC4KKworV2Uga2VlcCBhIHNldCBvZiBjb250cm9sIGZsYWdzCisKKworCXNrLT50Y3BfcGVuZF9ldmVudAorCisJCVRDUF9QRU5EX0FDSwkJCUFjayBuZWVkZWQKKwkJVENQX0FDS19OT1cJCQlOZWVkZWQgbm93CisJCVRDUF9XSU5ET1cJCQlXaW5kb3cgdXBkYXRlIGNoZWNrCisJCVRDUF9XSU5aRVJPCQkJWmVybyBwcm9iaW5nCisKKworCXNrLT50cmFuc21pdF9xdWV1ZQkJVGhlIHRyYW5zbWlzc2lvbiBmcmFtZSBiZWdpbgorCXNrLT50cmFuc21pdF9uZXcJCUZpcnN0IG5ldyBmcmFtZSBwb2ludGVyCisJc2stPnRyYW5zbWl0X2VuZAkJV2hlcmUgdG8gYWRkIGZyYW1lcworCisJc2stPnRjcF9sYXN0X3R4X2FjawkJTGFzdCBhY2sgc2VlbgorCXNrLT50Y3BfZHVwX2FjawkJCUR1cCBhY2sgY291bnQgZm9yIGZhc3QgcmV0cmFuc21pdAorCisKK0ZyYW1lcyBhcmUgcXVldWVkIGZvciBvdXRwdXQgYnkgdGNwX3dyaXRlLiBXZSBkbyBvdXIgYmVzdCB0byBzZW5kIHRoZSBmcmFtZXMKK29mZiBpbW1lZGlhdGVseSBpZiBwb3NzaWJsZSwgYnV0IG90aGVyd2lzZSBxdWV1ZSBhbmQgY29tcHV0ZSB0aGUgYm9keQorY2hlY2tzdW0gaW4gdGhlIGNvcHkuIAorCitXaGVuIGEgd3JpdGUgaXMgZG9uZSB3ZSB0cnkgdG8gY2xlYXIgYW55IHBlbmRpbmcgZXZlbnRzIGFuZCBwaWdneSBiYWNrIHRoZW0uCitJZiB0aGUgd2luZG93IGlzIGZ1bGwgd2UgcXVldWUgZnVsbCBzaXplZCBmcmFtZXMuIE9uIHRoZSBmaXJzdCB0aW1lb3V0IGluCit6ZXJvIHdpbmRvdyB3ZSBzcGxpdCB0aGlzLgorCitPbiBhIHRpbWVyIHdlIHdhbGsgdGhlIHJldHJhbnNtaXQgbGlzdCB0byBzZW5kIGFueSByZXRyYW5zbWl0cywgdXBkYXRlIHRoZQorYmFja29mZiB0aW1lcnMgZXRjLiBBIGNoYW5nZSBvZiByb3V0ZSB0YWJsZSBzdGFtcCBjYXVzZXMgYSBjaGFuZ2Ugb2YgaGVhZGVyCithbmQgcmVjb21wdXRlLiBXZSBhZGQgYW55IG5ldyB0Y3AgbGV2ZWwgaGVhZGVycyBhbmQgcmVmaW5pc2ggdGhlIGNoZWNrc3VtCitiZWZvcmUgc2VuZGluZy4gCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bGFuLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZhYTViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RsYW4udHh0CkBAIC0wLDAgKzEsMTE3IEBACisoQykgMTk5Ny0xOTk4IENhbGRlcmEsIEluYy4KKyhDKSAxOTk4IEphbWVzIEJhbmtzCisoQykgMTk5OS0yMDAxIFRvcmJlbiBNYXRoaWFzZW4gPHRtbUBpbWFnZS5kaywgdG9yYmVuLm1hdGhpYXNlbkBjb21wYXEuY29tPgorCitGb3IgZHJpdmVyIGluZm9ybWF0aW9uL3VwZGF0ZXMgdmlzaXQgaHR0cDovL29wZW5zb3VyY2UuY29tcGFxLmNvbQorCisKK1RMQU4gZHJpdmVyIGZvciBMaW51eCwgdmVyc2lvbiAxLjE0YQorUkVBRE1FCisKKworSS4gIFN1cHBvcnRlZCBEZXZpY2VzLgorCisgICAgT25seSBQQ0kgZGV2aWNlcyB3aWxsIHdvcmsgd2l0aCB0aGlzIGRyaXZlci4KKworICAgIFN1cHBvcnRlZDoKKyAgICBWZW5kb3IgSUQJRGV2aWNlIElECU5hbWUKKyAgICAwZTExCWFlMzIJCUNvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAgVFggUENJIFVUUAorICAgIDBlMTEJYWUzNAkJQ29tcGFxIE5ldGVsbGlnZW50IDEwIFQgUENJIFVUUAorICAgIDBlMTEJYWUzNQkJQ29tcGFxIEludGVncmF0ZWQgTmV0RmxleCAzL1AKKyAgICAwZTExCWFlNDAJCUNvbXBhcSBOZXRlbGxpZ2VudCBEdWFsIDEwLzEwMCBUWCBQQ0kgVVRQCisgICAgMGUxMQlhZTQzCQlDb21wYXEgTmV0ZWxsaWdlbnQgSW50ZWdyYXRlZCAxMC8xMDAgVFggVVRQCisgICAgMGUxMQliMDExCQlDb21wYXEgTmV0ZWxsaWdlbnQgMTAvMTAwIFRYIEVtYmVkZGVkIFVUUAorICAgIDBlMTEJYjAxMgkJQ29tcGFxIE5ldGVsbGlnZW50IDEwIFQvMiBQQ0kgVVRQL0NvYXgKKyAgICAwZTExCWIwMzAJCUNvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAgVFggVVRQCisgICAgMGUxMQlmMTMwCQlDb21wYXEgTmV0RmxleCAzL1AKKyAgICAwZTExCWYxNTAJCUNvbXBhcSBOZXRGbGV4IDMvUAorICAgIDEwOGQJMDAxMgkJT2xpY29tIE9DLTIzMjUJCisgICAgMTA4ZAkwMDEzCQlPbGljb20gT0MtMjE4MworICAgIDEwOGQJMDAxNAkJT2xpY29tIE9DLTIzMjYJCisKKworICAgIENhdmVhdHM6CisgICAgCisgICAgSSBhbSBub3Qgc3VyZSBpZiAxMDBCYXNlVFggZGF1Z2h0ZXJib2FyZHMgKGZvciB0aG9zZSBjYXJkcyB3aGljaAorICAgIHN1cHBvcnQgc3VjaCB0aGluZ3MpIHdpbGwgd29yay4gIEkgaGF2ZW4ndCBoYWQgYW55IHNvbGlkIGV2aWRlbmNlCisgICAgZWl0aGVyIHdheS4KKworICAgIEhvd2V2ZXIsIGlmIGEgY2FyZCBzdXBwb3J0cyAxMDBCYXNlVHggd2l0aG91dCByZXF1aXJpbmcgYW4gYWRkCisgICAgb24gZGF1Z2h0ZXJib2FyZCwgaXQgc2hvdWxkIHdvcmsgd2l0aCAxMDBCYXNlVHguCisKKyAgICBUaGUgIk5ldGVsbGlnZW50IDEwIFQvMiBQQ0kgVVRQL0NvYXgiIChiMDEyKSBkZXZpY2UgaXMgdW50ZXN0ZWQsCisgICAgYnV0IEkgZG8gbm90IGV4cGVjdCBhbnkgcHJvYmxlbXMuCisgICAgCisKK0lJLiAgIERyaXZlciBPcHRpb25zCisJMS4gWW91IGNhbiBhcHBlbmQgZGVidWc9eCB0byB0aGUgZW5kIG9mIHRoZSBpbnNtb2QgbGluZSB0byBnZXQKKyAgICAgICAgICAgZGVidWcgbWVzc2FnZXMsIHdoZXJlIHggaXMgYSBiaXQgZmllbGQgd2hlcmUgdGhlIGJpdHMgbWVhbgorCSAgIHRoZSBmb2xsb3dpbmc6CisJICAgCisJICAgMHgwMQkJVHVybiBvbiBnZW5lcmFsIGRlYnVnZ2luZyBtZXNzYWdlcy4KKwkgICAweDAyCQlUdXJuIG9uIHJlY2VpdmUgZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgIDB4MDQJCVR1cm4gb24gdHJhbnNtaXQgZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgIDB4MDgJCVR1cm4gb24gbGlzdCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisKKwkyLiBZb3UgY2FuIGFwcGVuZCBhdWk9MSB0byB0aGUgZW5kIG9mIHRoZSBpbnNtb2QgbGluZSB0byBjYXVzZQorICAgICAgICAgICB0aGUgYWRhcHRlciB0byB1c2UgdGhlIEFVSSBpbnRlcmZhY2UgaW5zdGVhZCBvZiB0aGUgMTAgQmFzZSBUCisgICAgICAgICAgIGludGVyZmFjZS4gIFRoaXMgaXMgYWxzbyB3aGF0IHRvIGRvIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgQk5DCisJICAgY29ubmVjdG9yIG9uIGEgVExBTiBiYXNlZCBkZXZpY2UuICAoU2V0dGluZyB0aGlzIG9wdGlvbiBvbiBhCisJICAgZGV2aWNlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbiBBVUkvQk5DIGNvbm5lY3RvciB3aWxsIHByb2JhYmx5CisJICAgY2F1c2UgaXQgdG8gbm90IGZ1bmN0aW9uIGNvcnJlY3RseS4pCisKKwkzLiBZb3UgY2FuIHNldCBkdXBsZXg9MSB0byBmb3JjZSBoYWxmIGR1cGxleCwgYW5kIGR1cGxleD0yIHRvCisJICAgZm9yY2UgZnVsbCBkdXBsZXguCisKKwk0LiBZb3UgY2FuIHNldCBzcGVlZD0xMCB0byBmb3JjZSAxME1icyBvcGVyYXRpb24sIGFuZCBzcGVlZD0xMDAKKwkgICB0byBmb3JjZSAxMDBNYnMgb3BlcmF0aW9uLiAoSSdtIG5vdCBzdXJlIHdoYXQgd2lsbCBoYXBwZW4KKwkgICBpZiBhIGNhcmQgd2hpY2ggb25seSBzdXBwb3J0cyAxME1icyBpcyBmb3JjZWQgaW50byAxMDBNYnMKKwkgICBtb2RlLikKKworCTUuIFlvdSBoYXZlIHRvIHVzZSBzcGVlZD1YIGR1cGxleD1ZIHRvZ2V0aGVyIG5vdy4gSWYgeW91IGp1c3QKKwkgICBkbyAiaW5zbW9kIHRsYW4ubyBzcGVlZD0xMDAiIHRoZSBkcml2ZXIgd2lsbCBkbyBBdXRvLU5lZy4KKwkgICBUbyBmb3JjZSBhIDEwTWJwcyBIYWxmLUR1cGxleCBsaW5rIGRvICJpbnNtb2QgdGxhbi5vIHNwZWVkPTEwIAorCSAgIGR1cGxleD0xIi4KKworCTYuIElmIHRoZSBkcml2ZXIgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCB5b3UgY2FuIHVzZSB0aGUgM3JkCisJICAgYW5kIDR0aCBwYXJhbWV0ZXJzIHRvIHNldCBhdWkgYW5kIGRlYnVnIHJlc3BlY3RpdmVseS4gIEZvcgorCSAgIGV4YW1wbGU6CisKKwkgICBldGhlcj0wLDAsMHgxLDB4NyxldGgwCisKKwkgICBUaGlzIHNldHMgYXVpIHRvIDB4MSBhbmQgZGVidWcgdG8gMHg3LCBhc3N1bWluZyBldGgwIGlzIGEKKwkgICBzdXBwb3J0ZWQgVExBTiBkZXZpY2UuCisKKwkgICBUaGUgYml0cyBpbiB0aGUgdGhpcmQgYnl0ZSBhcmUgYXNzaWduZWQgYXMgZm9sbG93czoKKworCQkweDAxID0gYXVpCisJCTB4MDIgPSB1c2UgaGFsZiBkdXBsZXgKKwkJMHgwNCA9IHVzZSBmdWxsIGR1cGxleAorCQkweDA4ID0gdXNlIDEwQmFzZVQKKwkJMHgxMCA9IHVzZSAxMDBCYXNlVHgKKworCSAgIFlvdSBhbHNvIG5lZWQgdG8gc2V0IGJvdGggc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncyB3aGVuIGZvcmNpbmcKKwkgICBzcGVlZHMgd2l0aCBrZXJuZWwtcGFyYW1ldGVycy4gCisJICAgZXRoZXI9MCwwLDB4MTIsMCxldGgwIHdpbGwgZm9yY2UgbGluayB0byAxMDBNYnBzIEhhbGYtRHVwbGV4LgorCisJNy4gSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSB0bGFuIGFkYXB0ZXIgaW4geW91ciBzeXN0ZW0sIHlvdSBjYW4KKwkgICB1c2UgdGhlIGFib3ZlIG9wdGlvbnMgb24gYSBwZXIgYWRhcHRlciBiYXNpcy4gVG8gZm9yY2UgYSAxMDBNYml0L0hECisJICAgbGluayB3aXRoIHlvdXIgZXRoMSBhZGFwdGVyIHVzZToKKwkgICAKKwkgICBpbnNtb2QgdGxhbiBzcGVlZD0wLDEwMCBkdXBsZXg9MCwxCisKKwkgICBOb3cgZXRoMCB3aWxsIHVzZSBhdXRvLW5lZyBhbmQgZXRoMSB3aWxsIGJlIGZvcmNlZCB0byAxMDBNYml0L0hELgorCSAgIE5vdGUgdGhhdCB0aGUgdGxhbiBkcml2ZXIgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDggYWRhcHRlcnMuCisKKworSUlJLiAgVGhpbmdzIHRvIHRyeSBpZiB5b3UgaGF2ZSBwcm9ibGVtcy4KKwkxLiBNYWtlIHN1cmUgeW91ciBjYXJkJ3MgUENJIGlkIGlzIGFtb25nIHRob3NlIGxpc3RlZCBpbgorCSAgIHNlY3Rpb24gSSwgYWJvdmUuCisJMi4gTWFrZSBzdXJlIHJvdXRpbmcgaXMgY29ycmVjdC4KKwkzLiBUcnkgZm9yY2luZyBkaWZmZXJlbnQgc3BlZWQvZHVwbGV4IHNldHRpbmdzCisKKworVGhlcmUgaXMgYWxzbyBhIHRsYW4gbWFpbGluZyBsaXN0IHdoaWNoIHlvdSBjYW4gam9pbiBieSBzZW5kaW5nICJzdWJzY3JpYmUgdGxhbiIKK2luIHRoZSBib2R5IG9mIGFuIGVtYWlsIHRvIG1ham9yZG9tb0B2dXNlci52dS51bmlvbi5lZHUuCitUaGVyZSBpcyBhbHNvIGEgdGxhbiB3ZWJzaXRlIGF0IGh0dHA6Ly9vcGVuc291cmNlLmNvbXBhcS5jb20KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RtczM4MHRyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bXMzODB0ci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5ZTUyNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bXMzODB0ci50eHQKQEAgLTAsMCArMSwxNDcgQEAKK1RleHQgZmlsZSBmb3IgdGhlIExpbnV4IFN5c0tvbm5lY3QgVG9rZW4gUmluZyBJU0EvUENJIEFkYXB0ZXIgRHJpdmVyLgorCVRleHQgZmlsZSBieTogSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKworVGhlIExpbnV4IFN5c0tvbm5lY3QgVG9rZW4gUmluZyBkcml2ZXIgd29ya3Mgd2l0aCB0aGUgU3lzS29ubmVjdCBUUjQvMTYoKykgSVNBLAorU3lzS29ubmVjdCBUUjQvMTYoKykgUENJLCBTeXNLb25uZWN0IFRSNC8xNiBQQ0ksIGFuZCBvbGRlciByZXZpc2lvbnMgb2YgdGhlCitTSyBORVQgVFI0LzE2IElTQSBjYXJkLgorCitMYXRlc3QgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgY2FuIGJlIG9idGFpbmVkIG9uIHRoZSBMaW51eC1TTkEgV1dXIHNpdGUuCitQbGVhc2UgcG9pbnQgeW91ciBicm93c2VyIHRvOiAKK2h0dHA6Ly93d3cubGludXgtc25hLm9yZworCitNYW55IHRoYW5rcyB0byBDaHJpc3RvcGggR29vcyBmb3IgaGlzIGV4Y2VsbGVudCB3b3JrIG9uIHRoaXMgZHJpdmVyIGFuZAorU3lzS29ubmVjdCBmb3IgZG9uYXRpbmcgdGhlIGFkYXB0ZXJzIHRvIExpbnV4LVNOQSBmb3IgdGhlIHRlc3RpbmcgYW5kIAorbWFpbnRlbmFuY2Ugb2YgdGhpcyBkZXZpY2UgZHJpdmVyLgorCitJbXBvcnRhbnQgaW5mb3JtYXRpb24gdG8gYmUgbm90ZWQ6CisxLiBBZGFwdGVycyBjYW4gYmUgc2xvdyB0byBvcGVuICh+MjAgc2VjcykgYW5kIGNsb3NlICh+NSBzZWNzKSwgcGxlYXNlIGJlIAorICAgcGF0aWVudC4KKzIuIFRoaXMgZHJpdmVyIHdvcmtzIHZlcnkgd2VsbCB3aGVuIGF1dG9wcm9iaW5nIGZvciBhZGFwdGVycy4gV2h5IGV2ZW4gCisgICB0aGluayBhYm91dCB0aG9zZSBuYXN0eSBpby9pbnQvZG1hIHNldHRpbmdzIG9mIG1vZHByb2JlIHdoZW4gdGhlIGRyaXZlciAKKyAgIHdpbGwgZG8gaXQgYWxsIGZvciB5b3UhCisKK1RoaXMgZHJpdmVyIGlzIHJhdGhlciBzaW1wbGUgdG8gdXNlLiBTZWxlY3QgWSB0byBUb2tlbiBSaW5nIGFkYXB0ZXIgc3VwcG9ydAoraW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBBIGNob2ljZSBmb3IgU3lzS29ubmVjdCBUb2tlbiBSaW5nIGFkYXB0ZXJzIHdpbGwKK2FwcGVhci4gVGhpcyBkcml2ZXMgc3VwcG9ydHMgYWxsIFN5c0tvbm5lY3QgSVNBIGFuZCBQQ0kgYWRhcHRlcnMuIENob29zZSB0aGlzCitvcHRpb24uIEkgcGVyc29uYWxseSByZWNvbW1lbmQgY29tcGlsaW5nIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKE0pLCBidXQgaWYgeW91Cit5b3Ugd291bGQgbGlrZSB0byBjb21waWxlIGl0IHN0YXRpY2x5IGFuc3dlciBZIGluc3RlYWQuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGFkYXB0ZXJzIHdpdGhvdXQgdGhlIG5lZWQgdG8gbG9hZCBtdWx0aXBsZSBjb3BpZXMKK29mIHRoZSBkcml2ZXIuIFlvdSBzaG91bGQgYmUgYWJsZSB0byBsb2FkIHVwIHRvIDcgYWRhcHRlcnMgd2l0aG91dCBhbnkga2VybmVsCittb2RpZmljYXRpb25zLCBpZiB5b3UgYXJlIGluIG5lZWQgb2YgbW9yZSBwbGVhc2UgY29udGFjdCB0aGUgbWFpbnRhaW5lciBvZiB0aGlzCitkcml2ZXIuCisKK0xvYWQgdGhlIGRyaXZlciBlaXRoZXIgYnkgbGlsby9sb2FkbGluIG9yIGFzIGEgbW9kdWxlLiBXaGVuIGEgbW9kdWxlIHVzaW5nIHRoZQorZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBzdWZmaWNlIGZvciBtb3N0OgorCisjIG1vZHByb2JlIHNrdHIKKworVGhpcyB3aWxsIHByb2R1Y2Ugb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzogKE91dHB1dCBpcyB1c2VyIHNwZWNpZmljKQorCitza3RyLmM6IHYxLjAxIDA4LzI5Lzk3IGJ5IENocmlzdG9waCBHb29zCit0cjA6IFNLIE5FVCBUUiA0LzE2IFBDSSBmb3VuZCBhdCAweDYxMDAsIHVzaW5nIElSUSAxNy4KK3RyMTogU0sgTkVUIFRSIDQvMTYgUENJIGZvdW5kIGF0IDB4NjIwMCwgdXNpbmcgSVJRIDE2LgordHIyOiBTSyBORVQgVFIgNC8xNiBJU0EgZm91bmQgYXQgMHhhMjAsIHVzaW5nIElSUSAxMCBhbmQgRE1BIDUuCisKK05vdyBqdXN0IHNldHVwIHRoZSBkZXZpY2UgdmlhIGlmY29uZmlnIGFuZCBzZXQgYW5kIHJvdXRlcyB5b3UgbWF5IGhhdmUuIEFmdGVyCit0aGlzIHlvdSBhcmUgcmVhZHkgdG8gc3RhcnQgc2VuZGluZyBzb21lIHRva2Vucy4KKworRXJyYXRhOgorRm9yIGFueW9uZSB3b25kZXJpbmcgd2hlcmUgdG8gcGljayB1cCB0aGUgU3lzS29ubmVjdCBhZGFwdGVycyBwbGVhc2UgYnJvd3NlCit0byBodHRwOi8vd3d3LnN5c2tvbm5lY3QuY29tCisKK1RoaXMgZHJpdmVyIGlzIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSXRzIEZpcm13YXJlIGltYWdlIGlzIAoraW5jbHVkZWQgYXMgYW4gaW5pdGlhbGl6ZWQgQy1hcnJheSBhbmQgaXMgbGljZW5zZWQgYnkgU3lzS29ubmVjdCB0byB0aGUgTGludXggCit1c2VycyBvZiB0aGlzIGRyaXZlci4gSG93ZXZlciBubyB3YXJyYW50eSBhYm91dCBpdHMgZml0bmVzcyBpcyBleHByZXNzZWQgb3IgCitpbXBsaWVkIGJ5IFN5c0tvbm5lY3QuCisKK0JlbG93IGZpbmQgYXR0YWNoZWQgdGhlIHNldHRpbmcgZm9yIHRoZSBTSyBORVQgVFIgNC8xNiBJU0EgYWRhcHRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgKioqICAgQyBPIE4gVCBFIE4gVCBTICAgKioqCisgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgICAgICAgICAgICAgMSkgTG9jYXRpb24gb2YgRElQLVN3aXRjaCBXMQorICAgICAgICAgICAgICAgIDIpIERlZmF1bHQgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAzKSBESVAtU3dpdGNoIFcxIGRlc2NyaXB0aW9uCisKKworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBDSEFQVEVSIDEgICAgIExPQ0FUSU9OIE9GIERJUC1TV0lUQ0gKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVcTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExL8KK/5VxMTExMTEvyAgICAgICAgICAgICAgICAgICAgICAgICBVxMTExMS/ICAgICAgICAgICAgVcTExL8gICAgICAgICD+Civ+QcTExMTExFUgICAgICAgICAgICAgICAgICAgICAgVzEgQcTExMTEVSAgICAgVcTExMS/IP4gICD+ICAgICAgICAg/gor/lXExMTExMS/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4gICAg/iD+ICAg/iAgICAgIFXExMW/Civ+QcTExMTExFUgICAgICAgICAgICAgIFXExMTExMTExMTExL8gICAgICAgICAgQcTExMRVIP4gICD+ICAgICAg/iAg/v4KK/5VxMTExMTEvyAgICAgICAgICAgICAg/iAgICAgICAgICAg/iAgICAgICAgICBVxMTEvyAgQcTExFUgICAgICBBxMTFVQor/kHExMTExMRVICAgICAgICAgICAgICD+IFRNUzM4MEMyNiD+ICAgICAgICAgIP4gICD+ICAgICAgICAgICAgICAgIP4KK/5VxMTExMTEvyAgICAgICAgICAgICAg/iAgICAgICAgICAg/iAgICAgICAgICBBxMTEVSAgICAgICAgICAgICAgICBBxL8KK/5BxMTExMTEVSAgICAgICAgICAgICAg/iAgICAgICAgICAg/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+IP4KK/4gICAgICAgICAgICAgICAgICAgICAgQcTExMTExMTExMTEVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+IP4KK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+IP4KK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBxFUKK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+Civ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/gor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4KK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+CitBxMTExMTExMTExMTEQcTExMTExMTExMTExMTExMRBxMRBxMTExMTExMTExMTExMTExMTExMTExMRBxMTExMTExMTEVQorICAgICAgICAgICAgIEHExMTExMTExMTExMTExMTEVSAgQcTExMTExMTExMTExMTExMTExMTExMTEVQorCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENIQVBURVIgMiAgICAgREVGQVVMVCBTRVRUSU5HUworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgVzEgICAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICB8IE9OICAgIFggICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8IE9GRiAgICAgIFggIFggIFggIFggIFggIFggIFggfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgIFcxLjEgPSBPTiAgICAgICAgICAgICAgIEFkYXB0ZXIgZHJpdmVzIGFkZHJlc3MgbGluZXMgU0ExNy4uMTkKKyAgICAgICAgVzEuMiAtIDEuNSA9IE9GRiAgICAgICAgQm9vdFJPTSBkaXNhYmxlZAorICAgICAgICBXMS42IC0gMS44ID0gT0ZGICAgICAgICBJL08gYWRkcmVzcyAwQTIwaAorCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENIQVBURVIgMyAgICAgRElQIFNXSVRDSCBXMSBERVNDUklQVElPTgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICBVxMTEQcTExEHExMRBxMTEQcTExEHExMRBxMTEQcTExL8gIE9OCisgICAgICD+IDEg/iAyIP4gMyD+IDQg/iA1IP4gNiD+IDcg/iA4IP4KKyAgICAgIEHExMRBxMTEQcTExEHExMRBxMTEQcTExEHExMRBxMTEVSAgT0ZGCisgICAgICB8QUQgfCBCb290Uk9NIEFkZHIuIHwgIEkvTyAgICAgIHwKKyAgICAgICstKy0rLS0tLS0tLSstLS0tLS0tKy0tLS0tKy0tLS0tKworICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICstLS0tLS0gNiAgICAgNyAgICAgOAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9OICAgIE9OICAgIE9OICAgICAgIDE5MDBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT0ZGICAgICAgMDkwMGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPTiAgICBPRkYgICBPTiAgICAgICAxOTgwaAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9GRiAgICAgIDA5ODBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT0ZGICAgT04gICAgT04gICAgICAgMWIyMGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPRkYgICBPTiAgICBPRkYgICAgICAwYjIwaAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9GRiAgIE9GRiAgIE9OICAgICAgIDFhMjBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT0ZGICAgT0ZGICAgT0ZGICAgICAgMGEyMGggICAgKCspCisgICAgICAgIHwgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICArLS0tLS0tLS0gMiAgICAgMyAgICAgNCAgICAgNQorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9GRiAgIHggICAgIHggICAgIHggICAgICAgZGlzYWJsZWQgICgrKQorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9OICAgIE9OICAgIE9OICAgICAgQzAwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPTiAgICBPTiAgICBPRkYgICAgIEM0MDAwCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT0ZGICAgT04gICAgICBDODAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9OICAgIE9GRiAgIE9GRiAgICAgQ0MwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPRkYgICBPTiAgICBPTiAgICAgIEQwMDAwCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT0ZGICAgT04gICAgT0ZGICAgICBENDAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9GRiAgIE9OICAgICAgRDgwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPRkYgICBPRkYgICBPRkYgICAgIERDMDAwCisgICAgICAgIHwKKyAgICAgICAgfAorICAgICAgICArLS0tLS0gMQorICAgICAgICAgICAgICAgT0ZGICAgIGFkYXB0ZXIgZG9lcyBOT1QgZHJpdmUgU0E8MTcuLjE5PgorICAgICAgICAgICAgICAgT04gICAgIGFkYXB0ZXIgZHJpdmVzIFNBPDE3Li4xOT4gICgrKQorCisKKyAgICAgICAgKCspIG1lYW5zIGRlZmF1bHQgc2V0dGluZworCisgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjM2QxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnR4dApAQCAtMCwwICsxLDE0NyBAQAorVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlci4KK0NvcHlyaWdodCAoQykgMTk5OS0yMDAwIE1heGltIEtyYXNueWFuc2t5IDxtYXhfbWtAeWFob28uY29tPgorCisgIExpbnV4LCBTb2xhcmlzIGRyaXZlcnMgCisgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIE1heGltIEtyYXNueWFuc2t5IDxtYXhfbWtAeWFob28uY29tPgorCisgIEZyZWVCU0QgVEFQIGRyaXZlciAKKyAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+CisKKyAgUmV2aXNpb24gb2YgdGhpcyBkb2N1bWVudCAyMDAyIGJ5IEZsb3JpYW4gVGhpZWwgPGZsb3JpYW4udGhpZWxAZ214Lm5ldD4KKworMS4gRGVzY3JpcHRpb24KKyAgVFVOL1RBUCBwcm92aWRlcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCB0cmFuc21pc3Npb24gZm9yIHVzZXIgc3BhY2UgcHJvZ3JhbXMuIAorICBJdCBjYW4gYmUgc2VlbiBhcyBhIHNpbXBsZSBQb2ludC10by1Qb2ludCBvciBFdGhlcm5ldCBkZXZpY2UsIHdoaWNoLAorICBpbnN0ZWFkIG9mIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gcGh5c2ljYWwgbWVkaWEsIHJlY2VpdmVzIHRoZW0gZnJvbSAKKyAgdXNlciBzcGFjZSBwcm9ncmFtIGFuZCBpbnN0ZWFkIG9mIHNlbmRpbmcgcGFja2V0cyB2aWEgcGh5c2ljYWwgbWVkaWEgCisgIHdyaXRlcyB0aGVtIHRvIHRoZSB1c2VyIHNwYWNlIHByb2dyYW0uIAorCisgIEluIG9yZGVyIHRvIHVzZSB0aGUgZHJpdmVyIGEgcHJvZ3JhbSBoYXMgdG8gb3BlbiAvZGV2L25ldC90dW4gYW5kIGlzc3VlIGEKKyAgY29ycmVzcG9uZGluZyBpb2N0bCgpIHRvIHJlZ2lzdGVyIGEgbmV0d29yayBkZXZpY2Ugd2l0aCB0aGUga2VybmVsLiBBIG5ldHdvcmsKKyAgZGV2aWNlIHdpbGwgYXBwZWFyIGFzIHR1blhYIG9yIHRhcFhYLCBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgY2hvc2VuLiBXaGVuCisgIHRoZSBwcm9ncmFtIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yLCB0aGUgbmV0d29yayBkZXZpY2UgYW5kIGFsbAorICBjb3JyZXNwb25kaW5nIHJvdXRlcyB3aWxsIGRpc2FwcGVhci4KKworICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgZGV2aWNlIGNob3NlbiB0aGUgdXNlcnNwYWNlIHByb2dyYW0gaGFzIHRvIHJlYWQvd3JpdGUKKyAgSVAgcGFja2V0cyAod2l0aCB0dW4pIG9yIGV0aGVybmV0IGZyYW1lcyAod2l0aCB0YXApLiBXaGljaCBvbmUgaXMgYmVpbmcgdXNlZAorICBkZXBlbmRzIG9uIHRoZSBmbGFncyBnaXZlbiB3aXRoIHRoZSBpb2N0bCgpLgorCisgIFRoZSBwYWNrYWdlIGZyb20gaHR0cDovL3Z0dW4uc291cmNlZm9yZ2UubmV0L3R1biBjb250YWlucyB0d28gc2ltcGxlIGV4YW1wbGVzCisgIGZvciBob3cgdG8gdXNlIHR1biBhbmQgdGFwIGRldmljZXMuIEJvdGggcHJvZ3JhbXMgd29yayBsaWtlIGEgYnJpZGdlIGJldHdlZW4KKyAgdHdvIG5ldHdvcmsgaW50ZXJmYWNlcy4KKyAgYnJfc2VsZWN0LmMgLSBicmlkZ2UgYmFzZWQgb24gc2VsZWN0IHN5c3RlbSBjYWxsLgorICBicl9zaWdpby5jICAtIGJyaWRnZSBiYXNlZCBvbiBhc3luYyBpbyBhbmQgU0lHSU8gc2lnbmFsLgorICBIb3dldmVyLCB0aGUgYmVzdCBleGFtcGxlIGlzIFZUdW4gaHR0cDovL3Z0dW4uc291cmNlZm9yZ2UubmV0IDopKQorCisyLiBDb25maWd1cmF0aW9uIAorICBDcmVhdGUgZGV2aWNlIG5vZGU6CisgICAgIG1rZGlyIC9kZXYvbmV0IChpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHkpCisgICAgIG1rbm9kIC9kZXYvbmV0L3R1biBjIDEwIDIwMAorICAKKyAgU2V0IHBlcm1pc3Npb25zOgorICAgICBlLmcuIGNobW9kIDA3MDAgL2Rldi9uZXQvdHVuCisgICAgIGlmIHlvdSB3YW50IHRoZSBkZXZpY2Ugb25seSBhY2Nlc3NpYmxlIGJ5IHJvb3QuIEdpdmluZyByZWd1bGFyIHVzZXJzIHRoZQorICAgICByaWdodCB0byBhc3NpZ24gbmV0d29yayBkZXZpY2VzIGlzIE5PVCBhIGdvb2QgaWRlYS4gVXNlcnMgY291bGQgYXNzaWduCisgICAgIGJvZ3VzIG5ldHdvcmsgaW50ZXJmYWNlcyB0byB0cmljayBmaXJld2FsbHMgb3IgYWRtaW5pc3RyYXRvcnMuCisKKyAgRHJpdmVyIG1vZHVsZSBhdXRvbG9hZGluZworCisgICAgIE1ha2Ugc3VyZSB0aGF0ICJLZXJuZWwgbW9kdWxlIGxvYWRlciIgLSBtb2R1bGUgYXV0by1sb2FkaW5nCisgICAgIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbC4gIFRoZSBrZXJuZWwgc2hvdWxkIGxvYWQgaXQgb24KKyAgICAgZmlyc3QgYWNjZXNzLgorICAKKyAgTWFudWFsIGxvYWRpbmcgCisgICAgIGluc2VydCB0aGUgbW9kdWxlIGJ5IGhhbmQ6CisgICAgICAgIG1vZHByb2JlIHR1bgorCisgIElmIHlvdSBkbyBpdCB0aGUgbGF0dGVyIHdheSwgeW91IGhhdmUgdG8gbG9hZCB0aGUgbW9kdWxlIGV2ZXJ5IHRpbWUgeW91CisgIG5lZWQgaXQsIGlmIHlvdSBkbyBpdCB0aGUgb3RoZXIgd2F5IGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsb2FkZWQgd2hlbgorICAvZGV2L25ldC90dW4gaXMgYmVpbmcgb3BlbmVkLgorCiszLiBQcm9ncmFtIGludGVyZmFjZSAKKyAgMy4xIE5ldHdvcmsgZGV2aWNlIGFsbG9jYXRpb246CisKKyAgY2hhciAqZGV2IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlIHdpdGggYSBmb3JtYXQgc3RyaW5nIChlLmcuCisgICJ0dW4lZCIpLCBidXQgKGFzIGZhciBhcyBJIGNhbiBzZWUpIHRoaXMgY2FuIGJlIGFueSB2YWxpZCBuZXR3b3JrIGRldmljZSBuYW1lLgorICBOb3RlIHRoYXQgdGhlIGNoYXJhY3RlciBwb2ludGVyIGJlY29tZXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgcmVhbCBkZXZpY2UgbmFtZQorICAoZS5nLiAidHVuMCIpCisKKyAgI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisgICNpbmNsdWRlIDxsaW51eC9pZl90dW4uaD4KKworICBpbnQgdHVuX2FsbG9jKGNoYXIgKmRldikKKyAgeworICAgICAgc3RydWN0IGlmcmVxIGlmcjsKKyAgICAgIGludCBmZCwgZXJyOworCisgICAgICBpZiggKGZkID0gb3BlbigiL2Rldi9uZXQvdHVuIiwgT19SRFdSKSkgPCAwICkKKyAgICAgICAgIHJldHVybiB0dW5fYWxsb2Nfb2xkKGRldik7CisKKyAgICAgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisKKyAgICAgIC8qIEZsYWdzOiBJRkZfVFVOICAgLSBUVU4gZGV2aWNlIChubyBFdGhlcm5ldCBoZWFkZXJzKSAKKyAgICAgICAqICAgICAgICBJRkZfVEFQICAgLSBUQVAgZGV2aWNlICAKKyAgICAgICAqCisgICAgICAgKiAgICAgICAgSUZGX05PX1BJIC0gRG8gbm90IHByb3ZpZGUgcGFja2V0IGluZm9ybWF0aW9uICAKKyAgICAgICAqLyAKKyAgICAgIGlmci5pZnJfZmxhZ3MgPSBJRkZfVFVOOyAKKyAgICAgIGlmKCAqZGV2ICkKKyAgICAgICAgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBkZXYsIElGTkFNU0laKTsKKworICAgICAgaWYoIChlcnIgPSBpb2N0bChmZCwgVFVOU0VUSUZGLCAodm9pZCAqKSAmaWZyKSkgPCAwICl7CisgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgICAgc3RyY3B5KGRldiwgaWZyLmlmcl9uYW1lKTsKKyAgICAgIHJldHVybiBmZDsKKyAgfSAgICAgICAgICAgICAgCisgCisgIDMuMiBGcmFtZSBmb3JtYXQ6CisgIElmIGZsYWcgSUZGX05PX1BJIGlzIG5vdCBzZXQgZWFjaCBmcmFtZSBmb3JtYXQgaXM6IAorICAgICBGbGFncyBbMiBieXRlc10KKyAgICAgUHJvdG8gWzIgYnl0ZXNdCisgICAgIFJhdyBwcm90b2NvbChJUCwgSVB2NiwgZXRjKSBmcmFtZS4KKworVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uLgorICAgCisxLiBXaGF0IHBsYXRmb3JtcyBhcmUgc3VwcG9ydGVkIGJ5IFRVTi9UQVAgZHJpdmVyID8KK0N1cnJlbnRseSBkcml2ZXIgaGFzIGJlZW4gd3JpdHRlbiBmb3IgMyBVbmljZXM6CisgICBMaW51eCBrZXJuZWxzIDIuMi54LCAyLjQueCAKKyAgIEZyZWVCU0QgMy54LCA0LngsIDUueAorICAgU29sYXJpcyAyLjYsIDcuMCwgOC4wCisKKzIuIFdoYXQgaXMgVFVOL1RBUCBkcml2ZXIgdXNlZCBmb3I/CitBcyBtZW50aW9uZWQgYWJvdmUsIG1haW4gcHVycG9zZSBvZiBUVU4vVEFQIGRyaXZlciBpcyB0dW5uZWxpbmcuIAorSXQgaXMgdXNlZCBieSBWVHVuIChodHRwOi8vdnR1bi5zb3VyY2Vmb3JnZS5uZXQpLgorCitBbm90aGVyIGludGVyZXN0aW5nIGFwcGxpY2F0aW9uIHVzaW5nIFRVTi9UQVAgaXMgcGlwc2VjZAorKGh0dHA6Ly9wZXJzby5lbnN0LmZyL35iZXlzc2FjL3BpcHNlYy8pLCBhbiB1c2Vyc3BhY2UgSVBTZWMKK2ltcGxlbWVudGF0aW9uIHRoYXQgY2FuIHVzZSBjb21wbGV0ZSBrZXJuZWwgcm91dGluZyAodW5saWtlIEZyZWVTL1dBTikuCisKKzMuIEhvdyBkb2VzIFZpcnR1YWwgbmV0d29yayBkZXZpY2UgYWN0dWFsbHkgd29yayA/IAorVmlydHVhbCBuZXR3b3JrIGRldmljZSBjYW4gYmUgdmlld2VkIGFzIGEgc2ltcGxlIFBvaW50LXRvLVBvaW50IG9yCitFdGhlcm5ldCBkZXZpY2UsIHdoaWNoIGluc3RlYWQgb2YgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBhIHBoeXNpY2FsIAorbWVkaWEsIHJlY2VpdmVzIHRoZW0gZnJvbSB1c2VyIHNwYWNlIHByb2dyYW0gYW5kIGluc3RlYWQgb2Ygc2VuZGluZyAKK3BhY2tldHMgdmlhIHBoeXNpY2FsIG1lZGlhIHNlbmRzIHRoZW0gdG8gdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbS4gCisKK0xldCdzIHNheSB0aGF0IHlvdSBjb25maWd1cmVkIElQWCBvbiB0aGUgdGFwMCwgdGhlbiB3aGVuZXZlciAKK3RoZSBrZXJuZWwgc2VuZHMgYW4gSVBYIHBhY2tldCB0byB0YXAwLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisoVlR1biBmb3IgZXhhbXBsZSkuIFRoZSBhcHBsaWNhdGlvbiBlbmNyeXB0cywgY29tcHJlc3NlcyBhbmQgc2VuZHMgaXQgdG8gCit0aGUgb3RoZXIgc2lkZSBvdmVyIFRDUCBvciBVRFAuIFRoZSBhcHBsaWNhdGlvbiBvbiB0aGUgb3RoZXIgc2lkZSBkZWNvbXByZXNzZXMKK2FuZCBkZWNyeXB0cyB0aGUgZGF0YSByZWNlaXZlZCBhbmQgd3JpdGVzIHRoZSBwYWNrZXQgdG8gdGhlIFRBUCBkZXZpY2UsIAordGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBwYWNrZXQgbGlrZSBpdCBjYW1lIGZyb20gcmVhbCBwaHlzaWNhbCBkZXZpY2UuCisKKzQuIFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBUVU4gZHJpdmVyIGFuZCBUQVAgZHJpdmVyPworVFVOIHdvcmtzIHdpdGggSVAgZnJhbWVzLiBUQVAgd29ya3Mgd2l0aCBFdGhlcm5ldCBmcmFtZXMuCisKK1RoaXMgbWVhbnMgdGhhdCB5b3UgaGF2ZSB0byByZWFkL3dyaXRlIElQIHBhY2tldHMgd2hlbiB5b3UgYXJlIHVzaW5nIHR1biBhbmQKK2V0aGVybmV0IGZyYW1lcyB3aGVuIHVzaW5nIHRhcC4KKworNS4gV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEJQRiBhbmQgVFVOL1RBUCBkcml2ZXI/CitCRlAgaXMgYW4gYWR2YW5jZWQgcGFja2V0IGZpbHRlci4gSXQgY2FuIGJlIGF0dGFjaGVkIHRvIGV4aXN0aW5nCituZXR3b3JrIGludGVyZmFjZS4gSXQgZG9lcyBub3QgcHJvdmlkZSBhIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UuCitBIFRVTi9UQVAgZHJpdmVyIGRvZXMgcHJvdmlkZSBhIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgYW5kIGl0IGlzIHBvc3NpYmxlCit0byBhdHRhY2ggQlBGIHRvIHRoaXMgaW50ZXJmYWNlLgorCis2LiBEb2VzIFRBUCBkcml2ZXIgc3VwcG9ydCBrZXJuZWwgRXRoZXJuZXQgYnJpZGdpbmc/CitZZXMuIExpbnV4IGFuZCBGcmVlQlNEIGRyaXZlcnMgc3VwcG9ydCBFdGhlcm5ldCBicmlkZ2luZy4gCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTJhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dApAQCAtMCwwICsxLDQ1MCBAQAorRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3ZvcnRleC50eHQKK0FuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KKzMwIEFwcmlsIDIwMDAKKworCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdXNhZ2UgYW5kIGVycmF0YSBvZiB0aGUgM0NvbSAiVm9ydGV4IiBkZXZpY2UKK2RyaXZlciBmb3IgTGludXgsIDNjNTl4LmMuCisKK1RoZSBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4KKworRG9uIGlzIG5vIGxvbmdlciB0aGUgcHJpbWUgbWFpbnRhaW5lciBvZiB0aGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlci4gCitQbGVhc2UgcmVwb3J0IHByb2JsZW1zIHRvIG9uZSBvciBtb3JlIG9mOgorCisgIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KKyAgTmV0ZGV2IG1haWxpbmcgbGlzdCA8bmV0ZGV2QG9zcy5zZ2kuY29tPgorICBMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorCitQbGVhc2Ugbm90ZSB0aGUgJ1JlcG9ydGluZyBhbmQgRGlhZ25vc2luZyBQcm9ibGVtcycgc2VjdGlvbiBhdCB0aGUgZW5kCitvZiB0aGlzIGZpbGUuCisKKworU2luY2Uga2VybmVsIDIuMy45OS1wcmU2LCB0aGlzIGRyaXZlciBpbmNvcnBvcmF0ZXMgdGhlIHN1cHBvcnQgZm9yIHRoZQorM2M1NzUtc2VyaWVzIENhcmRidXMgY2FyZHMgd2hpY2ggdXNlZCB0byBiZSBoYW5kbGVkIGJ5IDNjNTc1X2NiLmMuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmU6CisKKyAgIDNjNTkwIFZvcnRleCAxME1icHMKKyAgIDNjNTkyIEVJU0EgMTBtYnBzIERlbW9uL1ZvcnRleAorICAgM2M1OTcgRUlTQSBGYXN0IERlbW9uL1ZvcnRleAorICAgM2M1OTUgVm9ydGV4IDEwMGJhc2VUeAorICAgM2M1OTUgVm9ydGV4IDEwMGJhc2VUNAorICAgM2M1OTUgVm9ydGV4IDEwMGJhc2UtTUlJCisgICAzQ29tIFZvcnRleAorICAgM2M5MDAgQm9vbWVyYW5nIDEwYmFzZVQKKyAgIDNjOTAwIEJvb21lcmFuZyAxME1icHMgQ29tYm8KKyAgIDNjOTAwIEN5Y2xvbmUgMTBNYnBzIFRQTworICAgM2M5MDBCIEN5Y2xvbmUgMTBNYnBzIFQKKyAgIDNjOTAwIEN5Y2xvbmUgMTBNYnBzIENvbWJvCisgICAzYzkwMCBDeWNsb25lIDEwTWJwcyBUUEMKKyAgIDNjOTAwQi1GTCBDeWNsb25lIDEwYmFzZS1GTAorICAgM2M5MDUgQm9vbWVyYW5nIDEwMGJhc2VUeAorICAgM2M5MDUgQm9vbWVyYW5nIDEwMGJhc2VUNAorICAgM2M5MDVCIEN5Y2xvbmUgMTAwYmFzZVR4CisgICAzYzkwNUIgQ3ljbG9uZSAxMC8xMDAvQk5DCisgICAzYzkwNUItRlggQ3ljbG9uZSAxMDBiYXNlRngKKyAgIDNjOTA1QyBUb3JuYWRvCisgICAzYzk4MCBDeWNsb25lCisgICAzY1NPSE8xMDAtVFggSHVycmljYW5lCisgICAzYzU1NSBMYXB0b3AgSHVycmljYW5lCisgICAzYzU3NSBCb29tZXJhbmcgQ2FyZEJ1cworICAgM0NDRkU1NzUgQ3ljbG9uZSBDYXJkQnVzCisgICAzQ0NGRTU3NUNUIEN5Y2xvbmUgQ2FyZEJ1cworICAgM0NDRkU2NTYgQ3ljbG9uZSBDYXJkQnVzCisgICAzQ0NGRU02NTYgQ3ljbG9uZSBDYXJkQnVzCisgICAzYzQ1MCBDeWNsb25lL3Vua25vd24KKworCitNb2R1bGUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHNldmVyYWwgcGFyYW1ldGVycyB3aGljaCBtYXkgYmUgcHJvdmlkZWQgdG8gdGhlIGRyaXZlciB3aGVuCitpdHMgbW9kdWxlIGlzIGxvYWRlZC4gIFRoZXNlIGFyZSB1c3VhbGx5IHBsYWNlZCBpbiAvZXRjL21vZHByb2JlLmNvbmYKKygvZXRjL21vZHVsZXMuY29uZiBpbiAyLjQpLiAgRXhhbXBsZToKKworb3B0aW9ucyAzYzU5eCBkZWJ1Zz0zIHJ4X2NvcHlicmVhaz0zMDAKKworSWYgeW91IGFyZSB1c2luZyB0aGUgUENNQ0lBIHRvb2xzIChjYXJkbWdyKSB0aGVuIHRoZSBvcHRpb25zIG1heSBiZQorcGxhY2VkIGluIC9ldGMvcGNtY2lhL2NvbmZpZy5vcHRzOgorCittb2R1bGUgIjNjNTl4IiBvcHRzICJkZWJ1Zz0zIHJ4X2NvcHlicmVhaz0zMDAiCisKKworVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZToKKworZGVidWc9TgorCisgIFdoZXJlIE4gaXMgYSBudW1iZXIgZnJvbSAwIHRvIDcuICBBbnl0aGluZyBhYm92ZSAzIHByb2R1Y2VzIGEgbG90CisgIG9mIG91dHB1dCBpbiB5b3VyIHN5c3RlbSBsb2dzLiAgZGVidWc9MSBpcyBkZWZhdWx0LgorCitvcHRpb25zPU4xLE4yLE4zLC4uLgorCisgIEVhY2ggbnVtYmVyIGluIHRoZSBsaXN0IHByb3ZpZGVzIGFuIG9wdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZworICBuZXR3b3JrIGNhcmQuICBTbyBpZiB5b3UgaGF2ZSB0d28gM2M5MDUncyBhbmQgeW91IHdpc2ggdG8gcHJvdmlkZQorICB0aGVtIHdpdGggb3B0aW9uIDB4MjA0IHlvdSB3b3VsZCB1c2U6CisKKyAgICBvcHRpb25zPTB4MjA0LDB4MjA0CisKKyAgVGhlIGluZGl2aWR1YWwgb3B0aW9ucyBhcmUgY29tcG9zZWQgb2YgYSBudW1iZXIgb2YgYml0ZmllbGRzIHdoaWNoCisgIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nczoKKworICBQb3NzaWJsZSBtZWRpYSB0eXBlIHNldHRpbmdzCisJMAkxMGJhc2VUCisJMQkxME1icyBBVUkKKwkyCXVuZGVmaW5lZAorCTMJMTBiYXNlMiAoQk5DKQorCTQJMTAwYmFzZS1UWAorCTUJMTAwYmFzZS1GWAorCTYJTUlJIChNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UpCisJNwlVc2UgZGVmYXVsdCBzZXR0aW5nIGZyb20gRUVQUk9NCisJOCAgICAgICBBdXRvbmVnb3RpYXRlCisJOSAgICAgICBFeHRlcm5hbCBNSUkKKwkxMCAgICAgIFVzZSBkZWZhdWx0IHNldHRpbmcgZnJvbSBFRVBST00KKworICBXaGVuIGdlbmVyYXRpbmcgYSB2YWx1ZSBmb3IgdGhlICdvcHRpb25zJyBzZXR0aW5nLCB0aGUgYWJvdmUgbWVkaWEKKyAgc2VsZWN0aW9uIHZhbHVlcyBtYXkgYmUgT1InZWQgKG9yIGFkZGVkIHRvKSB0aGUgZm9sbG93aW5nOgorCisgIDB4ODAwMCAgU2V0IGRyaXZlciBkZWJ1Z2dpbmcgbGV2ZWwgdG8gNworICAweDQwMDAgIFNldCBkcml2ZXIgZGVidWdnaW5nIGxldmVsIHRvIDIKKyAgMHgwNDAwICBFbmFibGUgV2FrZS1vbi1MQU4KKyAgMHgwMjAwICBGb3JjZSBmdWxsIGR1cGxleCBtb2RlLgorICAweDAwMTAgIEJ1cy1tYXN0ZXIgZW5hYmxlIGJpdCAoT2xkIFZvcnRleCBjYXJkcyBvbmx5KQorCisgIEZvciBleGFtcGxlOgorCisgICAgaW5zbW9kIDNjNTl4IG9wdGlvbnM9MHgyMDQKKworICB3aWxsIGZvcmNlIGZ1bGwtZHVwbGV4IDEwMGJhc2UtVFgsIHJhdGhlciB0aGFuIGFsbG93aW5nIHRoZSB1c3VhbAorICBhdXRvbmVnb3RpYXRpb24uCisKK2dsb2JhbF9vcHRpb25zPU4KKworICBTZXRzIHRoZSBgb3B0aW9ucycgcGFyYW1ldGVyIGZvciBhbGwgM2M1OXggTklDcyBpbiB0aGUgbWFjaGluZS4gCisgIEVudHJpZXMgaW4gdGhlIGBvcHRpb25zJyBhcnJheSBhYm92ZSB3aWxsIG92ZXJyaWRlIGFueSBzZXR0aW5nIG9mCisgIHRoaXMuCisKK2Z1bGxfZHVwbGV4PU4xLE4yLE4zLi4uCisKKyAgU2ltaWxhciB0byBiaXQgOSBvZiAnb3B0aW9ucycuICBGb3JjZXMgdGhlIGNvcnJlc3BvbmRpbmcgY2FyZCBpbnRvCisgIGZ1bGwtZHVwbGV4IG1vZGUuICBQbGVhc2UgdXNlIHRoaXMgaW4gcHJlZmVyZW5jZSB0byB0aGUgYG9wdGlvbnMnCisgIHBhcmFtZXRlci4KKworICBJbiBmYWN0LCBwbGVhc2UgZG9uJ3QgdXNlIHRoaXMgYXQgYWxsISBZb3UncmUgYmV0dGVyIG9mZiBnZXR0aW5nCisgIGF1dG9uZWdvdGlhdGlvbiB3b3JraW5nIHByb3Blcmx5LgorCitnbG9iYWxfZnVsbF9kdXBsZXg9TjEKKworICBTZXRzIGZ1bGwgZHVwbGV4IG1vZGUgZm9yIGFsbCAzYzU5eCBOSUNzIGluIHRoZSBtYWNoaW5lLiAgRW50cmllcworICBpbiB0aGUgYGZ1bGxfZHVwbGV4JyBhcnJheSBhYm92ZSB3aWxsIG92ZXJyaWRlIGFueSBzZXR0aW5nIG9mIHRoaXMuCisKK2Zsb3dfY3RybD1OMSxOMixOMy4uLgorCisgIFVzZSA4MDIuM3ggTUFDLWxheWVyIGZsb3cgY29udHJvbC4gIFRoZSAzY29tIGNhcmRzIG9ubHkgc3VwcG9ydCB0aGUKKyAgUEFVU0UgY29tbWFuZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IHdpbGwgc3RvcCBzZW5kaW5nIHBhY2tldHMgZm9yIGEKKyAgc2hvcnQgcGVyaW9kIGlmIHRoZXkgcmVjZWl2ZSBhIFBBVVNFIGZyYW1lIGZyb20gdGhlIGxpbmsgcGFydG5lci4gCisKKyAgVGhlIGRyaXZlciBvbmx5IGFsbG93cyBmbG93IGNvbnRyb2wgb24gYSBsaW5rIHdoaWNoIGlzIG9wZXJhdGluZyBpbgorICBmdWxsIGR1cGxleCBtb2RlLgorCisgIFRoaXMgZmVhdHVyZSBkb2VzIG5vdCBhcHBlYXIgdG8gd29yayBvbiB0aGUgM2M5MDUgLSBvbmx5IDNjOTA1QiBhbmQKKyAgM2M5MDVDIGhhdmUgYmVlbiB0ZXN0ZWQuCisKKyAgVGhlIDNjb20gY2FyZHMgYXBwZWFyIHRvIG9ubHkgcmVzcG9uZCB0byBQQVVTRSBmcmFtZXMgd2hpY2ggYXJlCisgIHNlbnQgdG8gdGhlIHJlc2VydmVkIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgMDE6ODA6YzI6MDA6MDA6MDEuICBUaGV5CisgIGRvIG5vdCBob25vdXIgUEFVU0UgZnJhbWVzIHdoaWNoIGFyZSBzZW50IHRvIHRoZSBzdGF0aW9uIE1BQyBhZGRyZXNzLgorCityeF9jb3B5YnJlYWs9TQorCisgIFRoZSBkcml2ZXIgcHJlYWxsb2NhdGVzIDMyIGZ1bGwtc2l6ZWQgKDE1MzYgYnl0ZSkgbmV0d29yayBidWZmZXJzCisgIGZvciByZWNlaXZpbmcuICBXaGVuIGEgcGFja2V0IGFycml2ZXMsIHRoZSBkcml2ZXIgaGFzIHRvIGRlY2lkZQorICB3aGV0aGVyIHRvIGxlYXZlIHRoZSBwYWNrZXQgaW4gaXRzIGZ1bGwtc2l6ZWQgYnVmZmVyLCBvciB0byBhbGxvY2F0ZQorICBhIHNtYWxsZXIgYnVmZmVyIGFuZCBjb3B5IHRoZSBwYWNrZXQgYWNyb3NzIGludG8gaXQuCisKKyAgVGhpcyBpcyBhIHNwZWVkL3NwYWNlIHRyYWRlb2ZmLgorCisgIFRoZSB2YWx1ZSBvZiByeF9jb3B5YnJlYWsgaXMgdXNlZCB0byBkZWNpZGUgd2hlbiB0byBtYWtlIHRoZSBjb3B5LiAKKyAgSWYgdGhlIHBhY2tldCBzaXplIGlzIGxlc3MgdGhhbiByeF9jb3B5YnJlYWssIHRoZSBwYWNrZXQgaXMgY29waWVkLiAKKyAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHJ4X2NvcHlicmVhayBpcyAyMDAgYnl0ZXMuCisKK21heF9pbnRlcnJ1cHRfd29yaz1OCisKKyAgVGhlIGRyaXZlcidzIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgY2FuIGhhbmRsZSBtYW55IHJlY2VpdmUgYW5kCisgIHRyYW5zbWl0IHBhY2tldHMgaW4gYSBzaW5nbGUgaW52b2NhdGlvbi4gIEl0IGRvZXMgdGhpcyBpbiBhIGxvb3AuIAorICBUaGUgdmFsdWUgb2YgbWF4X2ludGVycnVwdF93b3JrIGdvdmVybnMgaG93IG1uYXkgdGltZXMgdGhlIGludGVycnVwdAorICBzZXJ2aWNlIHJvdXRpbmUgd2lsbCBsb29wLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzIgbG9vcHMuICBJZiB0aGlzCisgIGlzIGV4Y2VlZGVkIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGdpdmVzIHVwIGFuZCBnZW5lcmF0ZXMgYQorICB3YXJuaW5nIG1lc3NhZ2UgImV0aDA6IFRvbyBtdWNoIHdvcmsgaW4gaW50ZXJydXB0Ii4KKworaHdfY2hlY2tzdW1zPU4xLE4yLE4zLC4uLgorCisgIFJlY2VudCAzY29tIE5JQ3MgYXJlIGFibGUgdG8gZ2VuZXJhdGUgSVB2NCwgVENQIGFuZCBVRFAgY2hlY2tzdW1zCisgIGluIGhhcmR3YXJlLiAgTGludXggaGFzIHVzZWQgdGhlIFJ4IGNoZWNrc3VtbWluZyBmb3IgYSBsb25nIHRpbWUuIAorICBUaGUgInplcm8gY29weSIgcGF0Y2ggd2hpY2ggaXMgcGxhbm5lZCBmb3IgdGhlIDIuNCBrZXJuZWwgc2VyaWVzCisgIGFsbG93cyB5b3UgdG8gbWFrZSB1c2Ugb2YgdGhlIE5JQydzIERNQSBzY2F0dGVyL2dhdGhlciBhbmQgdHJhbnNtaXQKKyAgY2hlY2tzdW1taW5nIGFzIHdlbGwuCisKKyAgVGhlIGRyaXZlciBpcyBzZXQgdXAgc28gdGhhdCwgd2hlbiB0aGUgemVyb2NvcHkgcGF0Y2ggaXMgYXBwbGllZCwKKyAgYWxsIFRvcm5hZG8gYW5kIEN5Y2xvbmUgZGV2aWNlcyB3aWxsIHVzZSBTL0cgYW5kIFR4IGNoZWNrc3Vtcy4KKworICBUaGlzIG1vZHVsZSBwYXJhbWV0ZXIgaGFzIGJlZW4gcHJvdmlkZWQgc28geW91IGNhbiBvdmVycmlkZSB0aGlzCisgIGRlY2lzaW9uLiAgSWYgeW91IHRoaW5rIHRoYXQgVHggY2hlY2tzdW1zIGFyZSBjYXVzaW5nIGEgcHJvYmxlbSwgeW91CisgIG1heSBkaXNhYmxlIHRoZSBmZWF0dXJlIHdpdGggYGh3X2NoZWNrc3Vtcz0wJy4KKworICBJZiB5b3UgdGhpbmsgeW91ciBOSUMgc2hvdWxkIGJlIHBlcmZvcm1pbmcgVHggY2hlY2tzdW1taW5nIGFuZCB0aGUKKyAgZHJpdmVyIGlzbid0IGVuYWJsaW5nIGl0LCB5b3UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgaGFyZHdhcmUgVHgKKyAgY2hlY2tzdW1taW5nIHdpdGggYGh3X2NoZWNrc3Vtcz0xJy4KKworICBUaGUgZHJpdmVyIGRyb3BzIGEgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZXMgdG8gaW5kaWNhdGUgd2hldGhlciBvcgorICBub3QgaXQgaXMgdXNpbmcgaGFyZHdhcmUgc2NhdHRlci9nYXRoZXIgYW5kIGhhcmR3YXJlIFR4IGNoZWNrc3Vtcy4KKworICBTY2F0dGVyL2dhdGhlciBhbmQgaGFyZHdhcmUgY2hlY2tzdW1zIHByb3ZpZGUgY29uc2lkZXJhYmxlCisgIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGZvciB0aGUgc2VuZGZpbGUoKSBzeXN0ZW0gY2FsbCwgYnV0IGEgc21hbGwKKyAgZGVjcmVhc2UgaW4gdGhyb3VnaHB1dCBmb3Igc2VuZCgpLiAgVGhlcmUgaXMgbm8gZWZmZWN0IHVwb24gcmVjZWl2ZQorICBlZmZpY2llbmN5LgorCitjb21wYXFfaW9hZGRyPU4KK2NvbXBhcV9pcnE9TgorY29tcGFxX2RldmljZV9pZD1OCisKKyAgIlZhcmlhYmxlcyB0byB3b3JrLWFyb3VuZCB0aGUgQ29tcGFxIFBDSSBCSU9TMzIgcHJvYmxlbSIuLi4uCisKK3dhdGNoZG9nPU4KKworICBTZXRzIHRoZSB0aW1lIGR1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpIGFmdGVyIHdoaWNoIHRoZSBrZXJuZWwKKyAgZGVjaWRlcyB0aGF0IHRoZSB0cmFuc21pdHRlciBoYXMgYmVjb21lIHN0dWNrIGFuZCBuZWVkcyB0byBiZSByZXNldC4gCisgIFRoaXMgaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGFsdGhvdWdoIGl0IG1heSBiZSBhZHZhbnRhZ2VvdXMKKyAgdG8gaW5jcmVhc2UgdGhpcyB2YWx1ZSBvbiBMQU5zIHdoaWNoIGhhdmUgdmVyeSBoaWdoIGNvbGxpc2lvbiByYXRlcy4KKyAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNTAwMCAoNS4wIHNlY29uZHMpLgorCitlbmFibGVfd29sPU4xLE4yLE4zLC4uLgorCisgIEVuYWJsZSBXYWtlLW9uLUxBTiBzdXBwb3J0IGZvciB0aGUgcmVsZXZhbnQgaW50ZXJmYWNlLiAgRG9uYWxkCisgIEJlY2tlcidzIGBldGhlci13YWtlJyBhcHBsaWNhdGlvbiBtYXkgYmUgdXNlZCB0byB3YWtlIHN1c3BlbmRlZAorICBtYWNoaW5lcy4KKworICBBbHNvIGVuYWJsZXMgdGhlIE5JQydzIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4KKworZ2xvYmFsX2VuYWJsZV93b2w9TgorCisgIFNldHMgZW5hYmxlX3dvbCBtb2RlIGZvciBhbGwgM2M1OXggTklDcyBpbiB0aGUgbWFjaGluZS4gIEVudHJpZXMgaW4KKyAgdGhlIGBlbmFibGVfd29sJyBhcnJheSBhYm92ZSB3aWxsIG92ZXJyaWRlIGFueSBzZXR0aW5nIG9mIHRoaXMuCisKK01lZGlhIHNlbGVjdGlvbgorLS0tLS0tLS0tLS0tLS0tCisKK0EgbnVtYmVyIG9mIHRoZSBvbGRlciBOSUNzIHN1Y2ggYXMgdGhlIDNjNTkwIGFuZCAzYzkwMCBzZXJpZXMgaGF2ZQorMTBiYXNlMiBhbmQgQVVJIGludGVyZmFjZXMuCisKK1ByaW9yIHRvIEphbnVhcnksIDIwMDEgdGhpcyBkcml2ZXIgd291bGQgYXV0b2VzZWxlY3QgdGhlIDEwYmFzZTIgb3IgQVVJCitwb3J0IGlmIGl0IGRpZG4ndCBkZXRlY3QgYWN0aXZpdHkgb24gdGhlIDEwYmFzZVQgcG9ydC4gIEl0IHdvdWxkIHRoZW4KK2dldCBzdHVjayBvbiB0aGUgMTBiYXNlMiBwb3J0IGFuZCBhIGRyaXZlciByZWxvYWQgd2FzIG5lY2Vzc2FyeSB0bworc3dpdGNoIGJhY2sgdG8gMTBiYXNlVC4gIFRoaXMgYmVoYXZpb3VyIGNvdWxkIG5vdCBiZSBwcmV2ZW50ZWQgd2l0aCBhCittb2R1bGUgb3B0aW9uIG92ZXJyaWRlLgorCitMYXRlciAoY3VycmVudCkgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciBfZG9fIHN1cHBvcnQgbG9ja2luZyBvZiB0aGUKK21lZGlhIHR5cGUuICBTbyBpZiB5b3UgbG9hZCB0aGUgZHJpdmVyIG1vZHVsZSB3aXRoCisKKwltb2Rwcm9iZSAzYzU5eCBvcHRpb25zPTAKKworaXQgd2lsbCBwZXJtYW5lbnRseSBzZWxlY3QgdGhlIDEwYmFzZVQgcG9ydC4gIEF1dG9tYXRpYyBzZWxlY3Rpb24gb2YKK290aGVyIG1lZGlhIHR5cGVzIGRvZXMgbm90IG9jY3VyLgorCisKK1RyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgcmVnaXN0ZXIgODIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIGNvbW1vbiBlcnJvciB3aGljaCBpcyBhbG1vc3QgYWx3YXlzIGNhdXNlZCBieSBhbm90aGVyIGhvc3Qgb24KK3RoZSBzYW1lIG5ldHdvcmsgYmVpbmcgaW4gZnVsbC1kdXBsZXggbW9kZSwgd2hpbGUgdGhpcyBob3N0IGlzIGluCitoYWxmLWR1cGxleCBtb2RlLiAgWW91IG5lZWQgdG8gZmluZCB0aGF0IG90aGVyIGhvc3QgYW5kIG1ha2UgaXQgcnVuIGluCitoYWxmLWR1cGxleCBtb2RlIG9yIGZpeCB0aGlzIGhvc3QgdG8gcnVuIGluIGZ1bGwtZHVwbGV4IG1vZGUuCisKK0FzIGEgbGFzdCByZXNvcnQsIHlvdSBjYW4gZm9yY2UgdGhlIDNjNTl4IGRyaXZlciBpbnRvIGZ1bGwtZHVwbGV4IG1vZGUKK3dpdGgKKworCW9wdGlvbnMgM2M1OXggZnVsbF9kdXBsZXg9MQorCitidXQgdGhpcyBoYXMgdG8gYmUgdmlld2VkIGFzIGEgd29ya2Fyb3VuZCBmb3IgYnJva2VuIG5ldHdvcmsgZ2VhciBhbmQKK3Nob3VsZCBvbmx5IHJlYWxseSBiZSB1c2VkIGZvciBlcXVpcG1lbnQgd2hpY2ggY2Fubm90IGF1dG9uZWdvdGlhdGUuCisKKworQWRkaXRpb25hbCByZXNvdXJjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RldGFpbHMgb2YgdGhlIGRldmljZSBkcml2ZXIgaW1wbGVtZW50YXRpb24gYXJlIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBmaWxlLgorCitBZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IERvbiBCZWNrZXIncyBMaW51eCBEcml2ZXJzIHNpdGU6CisKKyAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay92b3J0ZXguaHRtbAorCitEb25hbGQgQmVja2VyJ3MgZHJpdmVyIGRldmVsb3BtZW50IHNpdGU6CisKKyAgICAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yaworCitEb25hbGQncyB2b3J0ZXgtZGlhZyBwcm9ncmFtIGlzIHVzZWZ1bCBmb3IgaW5zcGVjdGluZyB0aGUgTklDJ3Mgc3RhdGU6CisKKyAgICAgaHR0cDovL3d3dy5zY3lsZC5jb20vZGlhZy8jcGNpLWRpYWdzCisKK0RvbmFsZCdzIG1paS1kaWFnIHByb2dyYW0gbWF5IGJlIHVzZWQgZm9yIGluc3BlY3RpbmcgYW5kIG1hbmlwdWxhdGluZwordGhlIE5JQydzIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSBzdWJzeXN0ZW06CisKKyAgICAgaHR0cDovL3d3dy5zY3lsZC5jb20vZGlhZy8jbWlpLWRpYWcKKworRG9uYWxkJ3Mgd2FrZS1vbi1MQU4gcGFnZToKKworICAgICBodHRwOi8vd3d3LnNjeWxkLmNvbS9leHBlcnQvd2FrZS1vbi1sYW4uaHRtbAorCiszQ29tJ3MgZG9jdW1lbnRhdGlvbiBmb3IgbWFueSBOSUNzLCBpbmNsdWRpbmcgdGhlIG9uZXMgc3VwcG9ydGVkIGJ5Cit0aGlzIGRyaXZlciBpcyBhdmFpbGFibGUgYXQgCisKKyAgICAgaHR0cDovL3N1cHBvcnQuM2NvbS5jb20vcGFydG5lcnMvZGV2ZWxvcGVyL2RldmVsb3Blcl9mb3JtLmh0bWwKKworM0NvbSdzIERPUy1iYXNlZCBhcHBsaWNhdGlvbiBmb3Igc2V0dGluZyB1cCB0aGUgTklDcyBFRVBST01zOgorCisJZnRwOi8vZnRwLjNjb20uY29tL3B1Yi9uaWMvM2M5MHgvM2M5MHh4Mi5leGUKKworRHJpdmVyIHVwZGF0ZXMgYW5kIGEgZGV0YWlsZWQgY2hhbmdlbG9nIGZvciB0aGUgbW9kaWZpY2F0aW9ucyB3aGljaAord2VyZSBtYWRlIGZvciB0aGUgMi4zLzIsNCBzZXJpZXMga2VybmVsIGlzIGF2YWlsYWJsZSBhdAorCisgICAgIGh0dHA6Ly93d3cudW93LmVkdS5hdS9+YW5kcmV3bS9saW51eC8jM2M1OXgtMi4zCisKKworQXV0b25lZ290aWF0aW9uIG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgZHJpdmVyIHVzZXMgYSBvbmUtbWludXRlIGhlYXJ0YmVhdCBmb3IgYWRhcHRpbmcgdG8gY2hhbmdlcyBpbgorICB0aGUgZXh0ZXJuYWwgTEFOIGVudmlyb25tZW50LiAgVGhpcyBtZWFucyB0aGF0IHdoZW4sIGZvciBleGFtcGxlLCBhCisgIG1hY2hpbmUgaXMgdW5wbHVnZ2VkIGZyb20gYSBodWJiZWQgMTBiYXNlVCBMQU4gcGx1Z2dlZCBpbnRvIGEKKyAgc3dpdGNoZWQgMTAwYmFzZVQgTEFOLCB0aGUgdGhyb3VnaHB1dCB3aWxsIGJlIHF1aXRlIGRyZWFkZnVsIGZvciB1cAorICB0byBzaXh0eSBzZWNvbmRzLiAgQmUgcGF0aWVudC4KKworICBDaXNjbyBpbnRlcm9wZXJhYmlsaXR5IG5vdGUgZnJvbSBXYWx0ZXIgV29uZyA8d2N3K0BDTVUuRURVPjoKKworICBPbiBhIHNpZGUgbm90ZSwgYWRkaW5nIEhBU19OV0FZIHNlZW1zIHRvIHNoYXJlIGEgcHJvYmxlbSB3aXRoIHRoZQorICBDaXNjbyA2NTA5IHN3aXRjaC4gIFNwZWNpZmljYWxseSwgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBzcGFubmluZworICB0cmVlIHBhcmFtZXRlciBmb3IgdGhlIHBvcnQgdGhlIG1hY2hpbmUgaXMgcGx1Z2dlZCBpbnRvIHRvICdwb3J0ZmFzdCcKKyAgbW9kZS4gIE90aGVyd2lzZSwgdGhlIG5lZ290aWF0aW9uIGZhaWxzLiAgVGhpcyBoYXMgYmVlbiBhbiBpc3N1ZQorICB3ZSd2ZSBub3RpY2VkIGZvciBhIHdoaWxlIGJ1dCBoYXZlbid0IGhhZCB0aGUgdGltZSB0byB0cmFjayBkb3duLgorCisgIENpc2NvIHN3aXRjaGVzICAgIChKZWZmIEJ1c2NoIDxqYnVzY2hAZGVqYS5jb20+KQorCisgICAgTXkgInN0YW5kYXJkIGNvbmZpZyIgZm9yIHBvcnRzIHRvIHdoaWNoIFBDJ3Mvc2VydmVycyBjb25uZWN0IGRpcmVjdGx5OgorCisgICAgICAgIGludGVyZmFjZSBGYXN0RXRoZXJuZXQwL04KKyAgICAgICAgZGVzY3JpcHRpb24gbWFjaGluZW5hbWUKKyAgICAgICAgbG9hZC1pbnRlcnZhbCAzMAorICAgICAgICBzcGFubmluZy10cmVlIHBvcnRmYXN0CisKKyAgICBJZiBhdXRvbmVnb3RpYXRpb24gaXMgYSBwcm9ibGVtLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSAic3BlZWQKKyAgICAxMDAiIGFuZCAiZHVwbGV4IGZ1bGwiIGFzIHdlbGwgKG9yICJzcGVlZCAxMCIgYW5kICJkdXBsZXggaGFsZiIpLgorCisgICAgV0FSTklORzogRE8gTk9UIGhvb2sgdXAgaHVicy9zd2l0Y2hlcy9icmlkZ2VzIHRvIHRoZXNlCisgICAgc3BlY2lhbGx5LWNvbmZpZ3VyZWQgcG9ydHMhIFRoZSBzd2l0Y2ggd2lsbCBiZWNvbWUgdmVyeSBjb25mdXNlZC4KKworCitSZXBvcnRpbmcgYW5kIGRpYWdub3NpbmcgcHJvYmxlbXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWludGFpbmVycyBmaW5kIHRoYXQgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHByb2JsZW0gcmVwb3J0cyBhcmUKK2ludmFsdWFibGUgaW4gcmVzb2x2aW5nIGRyaXZlciBwcm9ibGVtcy4gIFdlIGFyZSBmcmVxdWVudGx5IG5vdCBhYmxlIHRvCityZXByb2R1Y2UgcHJvYmxlbXMgYW5kIG11c3QgcmVseSBvbiB5b3VyIHBhdGllbmNlIGFuZCBlZmZvcnRzIHRvIGdldCB0bwordGhlIGJvdHRvbSBvZiB0aGUgcHJvYmxlbS4KKworSWYgeW91IGJlbGlldmUgeW91IGhhdmUgYSBkcml2ZXIgcHJvYmxlbSBoZXJlIGFyZSBzb21lIG9mIHRoZQorc3RlcHMgeW91IHNob3VsZCB0YWtlOgorCistIElzIGl0IHJlYWxseSBhIGRyaXZlciBwcm9ibGVtPworCisgICBFbGltaW5hdGUgc29tZSB2YXJpYWJsZXM6IHRyeSBkaWZmZXJlbnQgY2FyZHMsIGRpZmZlcmVudAorICAgY29tcHV0ZXJzLCBkaWZmZXJlbnQgY2FibGVzLCBkaWZmZXJlbnQgcG9ydHMgb24gdGhlIHN3aXRjaC9odWIsCisgICBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbCBvciBvZnRoZSBkcml2ZXIsIGV0Yy4KKworLSBPSywgaXQncyBhIGRyaXZlciBwcm9ibGVtLgorCisgICBZb3UgbmVlZCB0byBnZW5lcmF0ZSBhIHJlcG9ydC4gIFR5cGljYWxseSB0aGlzIGlzIGFuIGVtYWlsIHRvIHRoZQorICAgbWFpbnRhaW5lciBhbmQvb3IgbGludXgtbmV0QHZnZXIua2VybmVsLm9yZy4gIFRoZSBtYWludGFpbmVyJ3MKKyAgIGVtYWlsIGFkZHJlc3Mgd2lsbCBiZSBpbnRoZSBkcml2ZXIgc291cmNlIG9yIGluIHRoZSBNQUlOVEFJTkVSUyBmaWxlLgorCistIFRoZSBjb250ZW50cyBvZiB5b3VyIHJlcG9ydCB3aWxsIHZhcnkgYSBsb3QgZGVwZW5kaW5nIHVwb24gdGhlCisgIHByb2JsZW0uICBJZiBpdCdzIGEga2VybmVsIGNyYXNoIHRoZW4geW91IHNob3VsZCByZWZlciB0byB0aGUKKyAgUkVQT1JUSU5HLUJVR1MgZmlsZS4KKworICBCdXQgZm9yIG1vc3QgcHJvYmxlbXMgaXQgaXMgdXNlZnVsIHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZzoKKworICAgbyBLZXJuZWwgdmVyc2lvbiwgZHJpdmVyIHZlcnNpb24KKworICAgbyBBIGNvcHkgb2YgdGhlIGJhbm5lciBtZXNzYWdlIHdoaWNoIHRoZSBkcml2ZXIgZ2VuZXJhdGVzIHdoZW4KKyAgICAgaXQgaXMgaW5pdGlhbGlzZWQuICBGb3IgZXhhbXBsZToKKworICAgICBldGgwOiAzQ29tIFBDSSAzYzkwNUMgVG9ybmFkbyBhdCAweGE0MDAsICAwMDo1MDpkYTo2YTo4ODpmMCwgSVJRIDE5CisgICAgIDhLIGJ5dGUtd2lkZSBSQU0gNTozIFJ4OlR4IHNwbGl0LCBhdXRvc2VsZWN0L0F1dG9uZWdvdGlhdGUgaW50ZXJmYWNlLgorICAgICBNSUkgdHJhbnNjZWl2ZXIgZm91bmQgYXQgYWRkcmVzcyAyNCwgc3RhdHVzIDc4MmQuCisgICAgIEVuYWJsaW5nIGJ1cy1tYXN0ZXIgdHJhbnNtaXRzIGFuZCB3aG9sZS1mcmFtZSByZWNlaXZlcy4KKworICAgICBOT1RFOiBZb3UgbXVzdCBwcm92aWRlIHRoZSBgZGVidWc9MicgbW9kcHJvYmUgb3B0aW9uIHRvIGdlbmVyYXRlCisgICAgIGEgZnVsbCBkZXRlY3Rpb24gbWVzc2FnZS4gIFBsZWFzZSBkbyB0aGlzOgorCisJbW9kcHJvYmUgM2M1OXggZGVidWc9MgorCisgICBvIElmIGl0IGlzIGEgUENJIGRldmljZSwgdGhlIHJlbGV2YW50IG91dHB1dCBmcm9tICdsc3BjaSAtdngnLCBlZzoKKworICAgICAwMDowOS4wIEV0aGVybmV0IGNvbnRyb2xsZXI6IDNDb20gQ29ycG9yYXRpb24gM2M5MDVDLVRYIFtGYXN0IEV0aGVybGlua10gKHJldiA3NCkKKyAgICAgICAgICAgICBTdWJzeXN0ZW06IDNDb20gQ29ycG9yYXRpb246IFVua25vd24gZGV2aWNlIDkyMDAKKyAgICAgICAgICAgICBGbGFnczogYnVzIG1hc3RlciwgbWVkaXVtIGRldnNlbCwgbGF0ZW5jeSAzMiwgSVJRIDE5CisgICAgICAgICAgICAgSS9PIHBvcnRzIGF0IGE0MDAgW3NpemU9MTI4XQorICAgICAgICAgICAgIE1lbW9yeSBhdCBkYjAwMDAwMCAoMzItYml0LCBub24tcHJlZmV0Y2hhYmxlKSBbc2l6ZT0xMjhdCisgICAgICAgICAgICAgRXhwYW5zaW9uIFJPTSBhdCA8dW5hc3NpZ25lZD4gW2Rpc2FibGVkXSBbc2l6ZT0xMjhLXQorICAgICAgICAgICAgIENhcGFiaWxpdGllczogW2RjXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMgorICAgICAwMDogYjcgMTAgMDAgOTIgMDcgMDAgMTAgMDIgNzQgMDAgMDAgMDIgMDggMjAgMDAgMDAKKyAgICAgMTA6IDAxIGE0IDAwIDAwIDAwIDAwIDAwIGRiIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisgICAgIDIwOiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCBiNyAxMCAwMCAxMAorICAgICAzMDogMDAgMDAgMDAgMDAgZGMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDUgMDEgMGEgMGEKKworICAgbyBBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnZpcm9ubWVudDogMTBiYXNlVD8gMTAwYmFzZVQ/CisgICAgIGZ1bGwvaGFsZiBkdXBsZXg/IHN3aXRjaGVkIG9yIGh1YmJlZD8KKworICAgbyBBbnkgYWRkaXRpb25hbCBtb2R1bGUgcGFyYW1ldGVycyB3aGljaCB5b3UgbWF5IGJlIHByb3ZpZGluZyB0byB0aGUgZHJpdmVyLgorCisgICBvIEFueSBrZXJuZWwgbG9ncyB3aGljaCBhcmUgcHJvZHVjZWQuICBUaGUgbW9yZSB0aGUgbWVycmllci4gCisgICAgIElmIHRoaXMgaXMgYSBsYXJnZSBmaWxlIGFuZCB5b3UgYXJlIHNlbmRpbmcgeW91ciByZXBvcnQgdG8gYQorICAgICBtYWlsaW5nIGxpc3QsIG1lbnRpb24gdGhhdCB5b3UgaGF2ZSB0aGUgbG9nZmlsZSwgYnV0IGRvbid0IHNlbmQKKyAgICAgaXQuICBJZiB5b3UncmUgcmVwb3J0aW5nIGRpcmVjdCB0byB0aGUgbWFpbnRhaW5lciB0aGVuIGp1c3Qgc2VuZAorICAgICBpdC4KKworICAgICBUbyBlbnN1cmUgdGhhdCBhbGwga2VybmVsIGxvZ3MgYXJlIGF2YWlsYWJsZSwgYWRkIHRoZQorICAgICBmb2xsb3dpbmcgbGluZSB0byAvZXRjL3N5c2xvZy5jb25mOgorCisgICAgICAgICBrZXJuLiogL3Zhci9sb2cvbWVzc2FnZXMKKworICAgICBUaGVuIHJlc3RhcnQgc3lzbG9nZCB3aXRoOgorCisgICAgICAgICAvZXRjL3JjLmQvaW5pdC5kL3N5c2xvZyByZXN0YXJ0CisKKyAgICAgKFRoZSBhYm92ZSBtYXkgdmFyeSwgZGVwZW5kaW5nIHVwb24gd2hpY2ggTGludXggZGlzdHJpYnV0aW9uIHlvdSB1c2UpLgorCisgICAgbyBJZiB5b3VyIHByb2JsZW0gaXMgcmVwcm9kdWNpYmxlIHRoZW4gdGhhdCdzIGdyZWF0LiAgVHJ5IHRoZQorICAgICAgZm9sbG93aW5nOgorCisgICAgICAxKSBJbmNyZWFzZSB0aGUgZGVidWcgbGV2ZWwuICBVc3VhbGx5IHRoaXMgaXMgZG9uZSB2aWE6CisKKyAgICAgICAgIGEpIG1vZHByb2JlIGRyaXZlciBkZWJ1Zz03CisgICAgICAgICBiKSBJbiAvZXRjL21vZHByb2JlLmNvbmYgKG9yIC9ldGMvbW9kdWxlcy5jb25mIGZvciAyLjQpOgorICAgICAgICAgICAgb3B0aW9ucyBkcml2ZXIgZGVidWc9NworCisgICAgICAyKSBSZWNyZWF0ZSB0aGUgcHJvYmxlbSB3aXRoIHRoZSBoaWdoZXIgZGVidWcgbGV2ZWwsCisgICAgICAgICBzZW5kIGFsbCBsb2dzIHRvIHRoZSBtYWludGFpbmVyLgorCisgICAgICAzKSBEb3dubG9hZCB5b3UgY2FyZCdzIGRpYWdub3N0aWMgdG9vbCBmcm9tIERvbmFsZAorICAgICAgICAgQmFja2VyJ3Mgd2Vic2l0ZSBodHRwOi8vd3d3LnNjeWxkLmNvbS9kaWFnLiAgRG93bmxvYWQKKyAgICAgICAgIG1paS1kaWFnLmMgYXMgd2VsbC4gIEJ1aWxkIHRoZXNlLgorCisgICAgICAgICBhKSBSdW4gJ3ZvcnRleC1kaWFnIC1hYWVlJyBhbmQgJ21paS1kaWFnIC12JyB3aGVuIHRoZSBjYXJkIGlzCisgICAgICAgICAgICB3b3JraW5nIGNvcnJlY3RseS4gIFNhdmUgdGhlIG91dHB1dC4KKworICAgICAgICAgYikgUnVuIHRoZSBhYm92ZSBjb21tYW5kcyB3aGVuIHRoZSBjYXJkIGlzIG1hbGZ1bmN0aW9uaW5nLiAgU2VuZAorICAgICAgICAgICAgYm90aCBzZXRzIG9mIG91dHB1dC4KKworRmluYWxseSwgcGxlYXNlIGJlIHBhdGllbnQgYW5kIGJlIHByZXBhcmVkIHRvIGRvIHNvbWUgd29yay4gIFlvdSBtYXkgZW5kIHVwIHdvcmtpbmcgb24KK3RoaXMgcHJvYmxlbSBmb3IgYSB3ZWVrIG9yIG1vcmUgYXMgdGhlIG1haW50YWluZXIgYXNrcyBtb3JlIHF1ZXN0aW9ucywgYXNrcyBmb3IgbW9yZQordGVzdHMsIGFza3MgZm9yIHBhdGNoZXMgdG8gYmUgYXBwbGllZCwgZXRjLiAgQXQgdGhlIGVuZCBvZiBpdCBhbGwsIHRoZSBwcm9ibGVtIG1heSBldmVuCityZW1haW4gdW5yZXNvbHZlZC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbi1yb3V0ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbi1yb3V0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYTIwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQKQEAgLTAsMCArMSw2MjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGludXggV0FOIFJvdXRlciBVdGlsaXRpZXMgUGFja2FnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWZXJzaW9uIDIuMi4xIAorTWFyIDI4LCAyMDAxCitBdXRob3I6IE5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KK0NvcHlyaWdodCAoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJTlRST0RVQ1RJT04KKworV2lkZSBBcmVhIE5ldHdvcmtzIChXQU5zKSBhcmUgdXNlZCB0byBpbnRlcmNvbm5lY3QgTG9jYWwgQXJlYSBOZXR3b3JrcyAoTEFOcykKK2FuZC9vciBzdGFuZC1hbG9uZSBob3N0cyBvdmVyIHZhc3QgZGlzdGFuY2VzIHdpdGggZGF0YSB0cmFuc2ZlciByYXRlcworc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiB0aG9zZSBhY2hpZXZhYmxlIHdpdGggY29tbW9ubHkgdXNlZCBkaWFsLXVwCitjb25uZWN0aW9ucy4KKworVXN1YWxseSBhbiBleHRlcm5hbCBkZXZpY2UgY2FsbGVkIGBXQU4gcm91dGVyJyBzaXR0aW5nIG9uIHlvdXIgbG9jYWwgbmV0d29yaworb3IgY29ubmVjdGVkIHRvIHlvdXIgbWFjaGluZSdzIHNlcmlhbCBwb3J0IHByb3ZpZGVzIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8KK1dBTi4gIEFsdGhvdWdoIHJvdXRlcidzIGpvYiBtYXkgYmUgYXMgc2ltcGxlIGFzIHRha2luZyB5b3VyIGxvY2FsIG5ldHdvcmsKK3RyYWZmaWMsIGNvbnZlcnRpbmcgaXQgdG8gV0FOIGZvcm1hdCBhbmQgcGlwaW5nIGl0IHRocm91Z2ggdGhlIFdBTiBsaW5rLCB0aGVzZQorZGV2aWNlcyBhcmUgbm90b3Jpb3VzbHkgZXhwZW5zaXZlLCB3aXRoIHByaWNlcyBhcyBtdWNoIGFzIDIgLSA1IHRpbWVzIGhpZ2hlcgordGhlbiB0aGUgcHJpY2Ugb2YgYSB0eXBpY2FsIFBDIGJveC4KKworQWx0ZXJuYXRpdmVseSwgY29uc2lkZXJpbmcgcm9idXN0bmVzcyBhbmQgbXVsdGl0YXNraW5nIGNhcGFiaWxpdGllcyBvZiBMaW51eCwKK2FuIGludGVybmFsIHJvdXRlciBjYW4gYmUgYnVpbHQgKG1vc3Qgcm91dGVycyB1c2Ugc29tZSBzb3J0IG9mIHN0cmlwcGVkIGRvd24KK1VuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGFueXdheSkuIFdpdGggYSBudW1iZXIgb2YgcmVsYXRpdmVseSBpbmV4cGVuc2l2ZSBXQU4KK2ludGVyZmFjZSBjYXJkcyBhdmFpbGFibGUgb24gdGhlIG1hcmtldCwgYSBwZXJmZWN0bHkgdXNhYmxlIHJvdXRlciBjYW4gYmUKK2J1aWx0IGZvciBsZXNzIHRoYW4gaGFsZiBhIHByaWNlIG9mIGFuIGV4dGVybmFsIHJvdXRlci4gIFlldCBhIExpbnV4IGJveAorYWN0aW5nIGFzIGEgcm91dGVyIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcywgc3VjaCBhcyBmaXJlLXdhbGxpbmcsCitydW5uaW5nIEZUUCwgV1dXIG9yIEROUyBzZXJ2ZXIsIGV0Yy4KKworVGhpcyBrZXJuZWwgbW9kdWxlIGludHJvZHVjZXMgdGhlIG5vdGlvbiBvZiBhIFdBTiBMaW5rIERyaXZlciAoV0xEKSB0byBMaW51eAorb3BlcmF0aW5nIHN5c3RlbSBhbmQgcHJvdmlkZXMgZ2VuZXJpYyBoYXJkd2FyZS1pbmRlcGVuZGVudCBzZXJ2aWNlcyBmb3Igc3VjaAorZHJpdmVycy4gIFdoeSBjYW4gZXhpc3RpbmcgTGludXggbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlIG5vdCBiZSB1c2VkIGZvcgordGhpcyBwdXJwb3NlPyAgV2VsbCwgaXQgY2FuLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgZmV3IGtleSBkaWZmZXJlbmNlcyBiZXR3ZWVuCithIHR5cGljYWwgbmV0d29yayBpbnRlcmZhY2UgKGUuZy4gRXRoZXJuZXQpIGFuZCBhIFdBTiBsaW5rLgorCitNYW55IFdBTiBwcm90b2NvbHMsIHN1Y2ggYXMgWC4yNSBhbmQgZnJhbWUgcmVsYXksIGFsbG93IGZvciBtdWx0aXBsZSBsb2dpY2FsCitjb25uZWN0aW9ucyAoa25vd24gYXMgYHZpcnR1YWwgY2lyY3VpdHMnIGluIFguMjUgdGVybWlub2xvZ3kpIG92ZXIgYSBzaW5nbGUKK3BoeXNpY2FsIGxpbmsuICBFYWNoIHN1Y2ggdmlydHVhbCBjaXJjdWl0IG1heSAoYW5kIGFsbW9zdCBhbHdheXMgZG9lcykgbGVhZAordG8gYSBkaWZmZXJlbnQgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIGFuZCwgdGhlcmVmb3JlLCBkaWZmZXJlbnQgbmV0d29yay4gIEFzIGEKK3Jlc3VsdCwgaXQgaXMgdGhlIHZpcnR1YWwgY2lyY3VpdCwgbm90IHRoZSBwaHlzaWNhbCBsaW5rLCB0aGF0IHJlcHJlc2VudHMgYQorcm91dGUgYW5kLCB0aGVyZWZvcmUsIGEgbmV0d29yayBpbnRlcmZhY2UgaW4gTGludXggdGVybXMuCisKK1RvIGZ1cnRoZXIgY29tcGxpY2F0ZSB0aGluZ3MsIHZpcnR1YWwgY2lyY3VpdHMgYXJlIHVzdWFsbHkgdm9sYXRpbGUgaW4gbmF0dXJlCisoZXhjbHVkaW5nIHNvIGNhbGxlZCBgcGVybWFuZW50JyB2aXJ0dWFsIGNpcmN1aXRzIG9yIFBWQ3MpLiAgV2l0aCBhbG1vc3Qgbm8KK3RpbWUgcmVxdWlyZWQgdG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYSB2aXJ0dWFsIGNpcmN1aXQsIGl0IGlzIGhpZ2hseSBkZXNpcmFibGUKK3RvIGltcGxlbWVudCBvbi1kZW1hbmQgY29ubmVjdGlvbnMgaW4gb3JkZXIgdG8gbWluaW1pemUgbmV0d29yayBjaGFyZ2VzLiAgU28KK3VubGlrZSBhIHR5cGljYWwgbmV0d29yayBkcml2ZXIsIHRoZSBXQU4gZHJpdmVyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgbXVsdGlwbGUKK25ldHdvcmsgaW50ZXJmYWNlcyBhbmQgY29wZSBhcyBtdWx0aXBsZSB2aXJ0dWFsIGNpcmN1aXRzIGNvbWUgaW50byBleGlzdGVuY2UKK2FuZCBnbyBhd2F5IGR5bmFtaWNhbGx5LgorIAorTGFzdCwgYnV0IG5vdCBsZWFzdCwgV0FOIGNvbmZpZ3VyYXRpb24gaXMgbXVjaCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0IG9mIHNheQorRXRoZXJuZXQgYW5kIG1heSB3ZWxsIGFtb3VudCB0byBzZXZlcmFsIGRvemVucyBvZiBwYXJhbWV0ZXJzLiAgU29tZSBvZiB0aGVtCithcmUgImxpbmstd2lkZSIgIHdoaWxlIG90aGVycyBhcmUgdmlydHVhbCBjaXJjdWl0LXNwZWNpZmljLiAgVGhlIHNhbWUgaG9sZHMKK3RydWUgZm9yIFdBTiBzdGF0aXN0aWNzIHdoaWNoIGlzIGJ5IGZhciBtb3JlIGV4dGVuc2l2ZSBhbmQgZXh0cmVtZWx5IHVzZWZ1bAord2hlbiB0cm91Ymxlc2hvb3RpbmcgV0FOIGNvbm5lY3Rpb25zLiAgRXh0ZW5kaW5nIHRoZSBpZmNvbmZpZyB1dGlsaXR5IHRvIHN1aXQKK3RoZXNlIG5lZWRzIG1heSBiZSBwb3NzaWJsZSwgYnV0IGRvZXMgbm90IHNlZW0gcXVpdGUgcmVhc29uYWJsZS4gIFRoZXJlZm9yZSwgYQorV0FOIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyJ3MgaW50ZXJmYWNlCitpcyBuZWVkZWQgZm9yIHRoaXMgcHVycG9zZS4KKworTW9zdCBvZiB0aGVzZSBwcm9ibGVtcyBhcmUgdGFrZW4gY2FyZSBvZiBieSB0aGlzIG1vZHVsZS4gIEl0cyBnb2FsIGlzIHRvCitwcm92aWRlIGEgdXNlciB3aXRoIG1vcmUtb3ItbGVzcyBzdGFuZGFyZCBsb29rIGFuZCBmZWVsIGZvciBhbGwgV0FOIGRldmljZXMgYW5kCithc3Npc3QgYSBXQU4gZGV2aWNlIGRyaXZlciB3cml0ZXIgYnkgcHJvdmlkaW5nIGNvbW1vbiBzZXJ2aWNlcywgc3VjaCBhczoKKworIG8gVXNlci1sZXZlbCBpbnRlcmZhY2UgdmlhIC9wcm9jIGZpbGUgc3lzdGVtCisgbyBDZW50cmFsaXplZCBjb25maWd1cmF0aW9uCisgbyBEZXZpY2UgbWFuYWdlbWVudCAoc2V0dXAsIHNodXRkb3duLCBldGMuKQorIG8gTmV0d29yayBpbnRlcmZhY2UgbWFuYWdlbWVudCAoZHluYW1pYyBjcmVhdGlvbi9kZXN0cnVjdGlvbikKKyBvIFByb3RvY29sIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbgorCitUbyBiYSBhYmxlIHRvIHVzZSB0aGUgTGludXggV0FOIFJvdXRlciB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBXQU4gVG9vbHMgcGFja2FnZQorYXZhaWxhYmxlIGZyb20KKworCWZ0cC5zYW5nb21hLmNvbS9wdWIvbGludXgvY3VycmVudF93YW5waXBlL3dhbnBpcGUtWC5ZLloudGd6CisKK3doZXJlIHZYLlkuWiByZXByZXNlbnQgdGhlIHdhbnBpcGUgdmVyc2lvbiBudW1iZXIuCisKK0ZvciB0ZWNobmljYWwgcXVlc3Rpb25zIGFuZC9vciBjb21tZW50cyBwbGVhc2UgZS1tYWlsIHRvIG5jb3JiaWNAc2FuZ29tYS5jb20uCitGb3IgZ2VuZXJhbCBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiBieQorCisJSG90bGluZToJMS04MDAtMzg4LTI0NzUJKFVTQSBhbmQgQ2FuYWRhLCB0b2xsIGZyZWUpCisJUGhvbmU6CQkoOTA1KSA0NzQtMTk5MCAgZXh0OiAxMDYKKwlGYXg6CQkoOTA1KSA0NzQtOTIyMworCUUtbWFpbDoJCWRtQHNhbmdvbWEuY29tCShEYXZpZCBNYW5kZWxzdGFtKQorCVdXVzoJCWh0dHA6Ly93d3cuc2FuZ29tYS5jb20KKworCitJTlNUQUxMQVRJT04KKworUGxlYXNlIHJlYWQgdGhlIFdhbnBpcGVGb3JMaW51eC5wZGYgbWFudWFsIG9uIGhvdyB0byAKK2luc3RhbGwgdGhlIFdBTlBJUEUgdG9vbHMgYW5kIGRyaXZlcnMgcHJvcGVybHkuIAorCisKK0FmdGVyIGluc3RhbGxpbmcgd2FucGlwZSBwYWNrYWdlOiAvdXNyL2xvY2FsL3dhbnJvdXRlci9kb2MuIAorT24gdGhlIGZ0cC5zYW5nb21hLmNvbSA6IC9saW51eC9jdXJyZW50X3dhbnBpcGUvZG9jCisKKworQ09QWVJJR0hUIEFORCBMSUNFTlNJTkcgSU5GT1JNQVRJT04KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAordGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzCitBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCisKK0FDS05PV0xFREdFTUVOVFMKKworVGhpcyBwcm9kdWN0IGlzIGJhc2VkIG9uIHRoZSBXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBSb3V0ZXIgZGV2ZWxvcGVkCitieSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIGZvciBMaW51eCAyLjAueCBhbmQgMi4yLnguICBTdWNjZXNzIG9mIHRoZSBXQU5QSVBFCit0b2dldGhlciB3aXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgTGludXgga2VybmVsIGluIHN1bW1lciAxOTk2IGNvbW1hbmRlZAorYWRlcXVhdGUgY2hhbmdlcyB0byB0aGUgV0FOUElQRSBjb2RlIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgbmV3IExpbnV4CitmZWF0dXJlcy4KKworSW5zdGVhZCBvZiBjb250aW51aW5nIGRldmVsb3BpbmcgcHJvcHJpZXRhcnkgaW50ZXJmYWNlIHRpZWQgdG8gU2FuZ29tYSBXQU4KK2NhcmRzLCB3ZSBkZWNpZGVkIHRvIHNlcGFyYXRlIGFsbCBoYXJkd2FyZS1pbmRlcGVuZGVudCBjb2RlIGludG8gYSBzZXBhcmF0ZQorbW9kdWxlIGFuZCBkZWZpbmVkIHR3byBsZXZlbHMgb2YgaW50ZXJmYWNlcyAtIG9uZSBmb3IgdXNlci1sZXZlbCBhcHBsaWNhdGlvbnMKK2FuZCBhbm90aGVyIGZvciBrZXJuZWwtbGV2ZWwgV0FOIGRyaXZlcnMuICBXQU5QSVBFIGlzIG5vdyBpbXBsZW1lbnRlZCBhcyBhCitXQU4gZHJpdmVyIGNvbXBsaWFudCB3aXRoIHRoZSBXQU4gTGluayBEcml2ZXIgaW50ZXJmYWNlLiAgQWxzbyBhIGdlbmVyYWwKK3B1cnBvc2UgV0FOIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgYSBzZXQgb2Ygc2hlbGwgc2NyaXB0cyB3YXMgZGV2ZWxvcGVkIHRvIAorc3VwcG9ydCBXQU4gcm91dGVyIGF0IHRoZSB1c2VyIGxldmVsLgorCitNYW55IHVzZWZ1bCBpZGVhcyBjb25jZXJuaW5nIGhhcmR3YXJlLWluZGVwZW5kZW50IGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbgord2VyZSBnaXZlbiBieSBNaWtlIE1jTGFnYW4gPG1pa2UubWNsYWdhbkBsaW51eC5vcmc+IGFuZCBoaXMgaW1wbGVtZW50YXRpb24KK29mIHRoZSBGcmFtZSBSZWxheSByb3V0ZXIgYW5kIGRyaXZlcnMgZm9yIFNhbmdvbWEgY2FyZHMgKGRsY2kvc2RsYSkuCisKK1dpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJcyBiZWluZyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgV0FOUElQRSwKK2Egc3BlY2lhbCB0aGFuayBnb2VzIHRvIEFsYW4gQ294IGluIHByb3ZpZGluZyBpbnNpZ2h0IGludG8gQlNEIHNvY2tldHMuCisKK1NwZWNpYWwgdGhhbmtzIHRvIGFsbCB0aGUgV0FOUElQRSB1c2VycyB3aG8gcGVyZm9ybWVkIGZpZWxkLXRlc3RpbmcsIHJlcG9ydGVkCitidWdzIGFuZCBtYWRlIHZhbHVhYmxlIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyB0aGF0IGhlbHAgdXMgdG8gaW1wcm92ZSB0aGlzCitwcm9kdWN0LgorCisKKworTkVXIElOIFRISVMgUkVMRUFTRQorCisJbyBVcGRhdGVkIHRoZSBXQU5DRkcgdXRpbGl0eQorCQlDYWxscyB0aGUgcHBwY29uZmlnIHRvIGNvbmZpZ3VyZSB0aGUgUFBQRAorCQlmb3IgYXN5bmMgY29ubmVjdGlvbnMuCisKKwlvIEFkZGVkIHRoZSBQUFBDT05GSUcgdXRpbGl0eQorCQlVc2VkIHRvIGNvbmZpZ3VyZSB0aGUgUFBQRCBkYW1lb24gZm9yIHRoZQorCQlXQU5QSVBFIEFzeW5jIFBQUCBhbmQgc3RhbmRhcmQgc2VyaWFsIHBvcnQuCisJCVRoZSB3YW5jZmcgY2FsbHMgdGhlIHBwcGNvbmZpZyB0byBjb25maWd1cmUKKwkJdGhlIHBwcGQuCisKKwlvIEZpeGVkIHRoZSBQQ0kgYXV0b2RldGVjdCBmZWF0dXJlLiAgCisJCVRoZSBTTE9UIDAgd2FzIHVzZWQgYXMgYW4gYXV0b2RldGVjdCBvcHRpb24KKwkJaG93ZXZlciwgc29tZSBoaWdoIGVuZCBQQydzIHNsb3QgbnVtYmVycyBzdGFydAorCQlmcm9tIDAuIAorCisJbyBUaGlzIHJlbGVhc2UgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlIG5ldyBiYWNrdXBkCisJICBkYWVtb24gcmVsZWFzZS4KKwkKKworUFJPRFVDVCBDT01QT05FTlRTIEFORCBSRUxBVEVEIEZJTEVTCisKKy9ldGM6IChvciB1c2VyIGRlZmluZWQpCisJd2FucGlwZTEuY29uZglkZWZhdWx0IHJvdXRlciBjb25maWd1cmF0aW9uIGZpbGUKKworL2xpYi9tb2R1bGVzL1guWS5aL21pc2M6CisJd2Fucm91dGVyLm8Jcm91dGVyIGtlcm5lbCBsb2FkYWJsZSBtb2R1bGUKKwlhZl93YW5waXBlLm8Jd2FucGlwZSBhcGkgc29ja2V0IG1vZHVsZQorCisvbGliL21vZHVsZXMvWC5ZLlovbmV0OgorCXNkbGFkcnYubwlTYW5nb21hIFNETEEgc3VwcG9ydCBtb2R1bGUKKwl3YW5waXBlLm8JU2FuZ29tYSBXQU5QSVBFKHRtKSBkcml2ZXIgbW9kdWxlCisKKy9wcm9jL25ldC93YW5yb3V0ZXIKKwlDb25maWcJCXJlYWRzIGN1cnJlbnQgcm91dGVyIGNvbmZpZ3VyYXRpb24KKwlTdGF0dXMJCXJlYWRzIGN1cnJlbnQgcm91dGVyIHN0YXR1cworCXtuYW1lfQkJcmVhZHMgV0FOIGRyaXZlciBzdGF0aXN0aWNzCisKKy91c3Ivc2JpbjoKKwl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIHNjcmlwdAorCXdhbmNvbmZpZwl3YW5yb3V0ZXIgY29uZmlndXJhdGlvbiB1dGlsaXR5CisJc2RsYWR1bXAJV0FOUElQRSBhZGFwdGVyIG1lbW9yeSBkdW1wIHV0aWxpdHkKKyAgICAgICAgZnBpcGVtb24gICAgICAgIE1vbml0b3IgZm9yIEZyYW1lIFJlbGF5CisgICAgICAgIGNwaXBlbW9uICAgICAgICBNb25pdG9yIGZvciBDaXNjbyBIRExDCisJcHBpcGVtb24gCU1vbml0b3IgZm9yIFBQUAorCXhwaXBlbW9uIAlNb25pdG9yIGZvciBYMjUKKwl3cGtiZG1vbiAgICAgICAgV0FOUElQRSBrZXlib2FyZCBsZWQgbW9uaXRvci9kZWJ1Z2dlcgorCisvdXNyL2xvY2FsL3dhbnJvdXRlcjoKKwlSRUFETUUJCXRoaXMgZmlsZQorCUNPUFlJTkcJCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJU2V0dXAJCWluc3RhbGxhdGlvbiBzY3JpcHQKKwlGaWxlbGlzdAlkaXN0cmlidXRpb24gZGVmaW5pdGlvbiBmaWxlCisJd2Fucm91dGVyLnJjCW1ldGEtY29uZmlndXJhdGlvbiBmaWxlIAorCQkJKHVzZWQgYnkgdGhlIFNldHVwIGFuZCB3YW5yb3V0ZXIgc2NyaXB0KQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9kb2M6CisJd2FucGlwZUZvckxpbnV4LnBkZiAJV0FOIFJvdXRlciBVc2VyJ3MgTWFudWFsCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3BhdGNoZXM6CisJd2Fucm91dGVyLXYyMjEzLmd6ICAJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbHMgMi4yLjExIHVwIHRvIDIuMi4xMy4KKwl3YW5yb3V0ZXItdjIyMTQuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjIuMTQuIAorCXdhbnJvdXRlci12MjIxNS5neglwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTUgdG8gMi4yLjE3LgorCXdhbnJvdXRlci12MjIxOC5neglwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTggYW5kIHVwLgorCXdhbnJvdXRlci12MjQwLmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi40LjAuICAKKwl3YW5yb3V0ZXItdjI0Mi5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuNC4yIGFuZCB1cC4KKwl3YW5yb3V0ZXItdjIwMzQuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjAuMzQKKwl3YW5yb3V0ZXItdjIwMzYuZ3ogCXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi4wLjM2IGFuZCB1cC4gCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3BhdGNoZXMva2RyaXZlcnM6CisJU291cmNlcyBvZiB0aGUgbGF0ZXN0IFdBTlBJUEUgZGV2aWNlIGRyaXZlcnMuCisJVGhlc2UgYXJlIHVzZWQgdG8gVVBHUkFERSB0aGUgbGludXgga2VybmVsIHRvIHRoZSBuZXdlc3QKKwl2ZXJzaW9uIGlmIHRoZSBrZXJuZWwgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gcGF0aGNlZCB3aXRoCisJV0FOUElQRSBkcml2ZXJzLgorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9zYW1wbGVzOgorCWludGVyZmFjZQlzYW1wbGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZmlsZQorCXdhbnBpcGUxLmNwcmkgCUNIRExDIHByaW1hcnkgcG9ydAorICAgICAJd2FucGlwZTIuY3NlYyAJQ0hETEMgc2Vjb25kYXJ5IHBvcnQKKyAgICAgCXdhbnBpcGUxLmZyICAgCUZyYW1lIFJlbGF5IHByb3RvY29sCisgICAgIAl3YW5waXBlMS5wcHAgIAlQUFAgcHJvdG9jb2wgKSAKKwl3YW5waXBlMS5hc3kJQ0hETEMgQVNZTkMgcHJvdG9jb2wKKwl3YW5waXBlMS54MjUJWDI1IHByb3RvY29sCisJd2FucGlwZTEuc3R0eQlTeW5jIFRUWSBkcml2ZXIgKFVzZWQgYnkgS2VybmVsIFBQUEQgZGFlbW9uKQorCXdhbnBpcGUxLmF0dHkJQXN5bmMgVFRZIGRyaXZlciAoVXNlZCBieSBLZXJuZWwgUFBQRCBkYWVtb24pCisJd2Fucm91dGVyLnJjCXNhbXBsZSBtZXRhLWNvbmZpZ3VyYXRpb24gZmlsZQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci91dGlsOgorCSoJCXdhbi10b29scyB1dGlsaXRpZXMgc291cmNlIGNvZGUKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL3gyNToKKwkqCQl4MjUgYXBpIHNhbXBsZSBwcm9ncmFtcy4KKy91c3IvbG9jYWwvd2Fucm91dGVyL2FwaS9jaGRsYzoKKwkqCQljaGRsYyBhcGkgc2FtcGxlIHByb2dyYW1zLgorL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL2ZyOgorCSoJCWZyIGFwaSBzYW1wbGUgcHJvZ3JhbXMuCisvdXNyL2xvY2FsL3dhbnJvdXRlci9jb25maWcvd2FuY2ZnOgorCXdhbmNmZwkJV0FOUElQRSBHVUkgY29uZmlndXJhdGlvbiBwcm9ncmFtLgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyB3YW5waXBlIy5jb25mIGZpbGVzLiAKKy91c3IvbG9jYWwvd2Fucm91dGVyL2NvbmZpZy9jZmdmdDE6CisJY2ZnZnQxCQlHVUkgQ1NVL0RTVSBjb25maWd1cmF0aW9uIHByb2dyYW0uCisKKy91c3IvaW5jbHVkZS9saW51eDoKKwl3YW5yb3V0ZXIuaAlyb3V0ZXIgQVBJIGRlZmluaXRpb25zCisJd2FucGlwZS5oCVdBTlBJUEUgQVBJIGRlZmluaXRpb25zCisJc2RsYWRydi5oCVNETEEgc3VwcG9ydCBtb2R1bGUgQVBJIGRlZmluaXRpb25zCisJc2RsYXNmbS5oCVNETEEgZmlybXdhcmUgbW9kdWxlIGRlZmluaXRpb25zCisJaWZfd2FucGlwZS5oCVdBTlBJUEUgU29ja2V0IGRlZmluaXRpb25zCisJaWZfd2FucGlwZV9jb21tb24uaAlXQU5QSVBFIFNvY2tldC9Ecml2ZXIgY29tbW9uIGRlZmluaXRpb25zLgorCXNkbGFwY2kuaAlXQU5QSVBFIFBDSSBkZWZpbml0aW9ucworCQorCisvdXNyL3NyYy9saW51eC9uZXQvd2Fucm91dGVyOgorCSoJCXdhbnJvdXRlciBzb3VyY2UgY29kZQorCisvdmFyL2xvZzoKKwl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIGxvZyAoY3JlYXRlZCBieSB0aGUgU2V0dXAgc2NyaXB0KQorCisvdmFyL2xvY2s6ICAob3IgL3Zhci9sb2NrL3N1YnN5cyBmb3IgUmVkSGF0KQorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgbG9jayBmaWxlIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL2Zpcm13YXJlOgorCWZyNTE0LnNmbQlGcmFtZSByZWxheSBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAorCWNkdWFsNTE0LnNmbQlEdWFsIFBvcnQgQ2lzY28gSERMQyBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAorCXBwcDUxNC5zZm0gICAgICBQUFAgRmlybXdhcmUgZm9yIFNhbmdvbWEgUzUwOCBhbmQgUzUxNCBjYXJkcworCXgyNV81MDguc2ZtCVgyNSBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGNhcmQuCisKKworUkVWSVNJT04gSElTVE9SWQorCisxLjAuMAlEZWNlbWJlciAzMSwgMTk5NglJbml0aWFsIHZlcnNpb24KKworMS4wLjEJSmFudWFyeSAzMCwgMTk5NwlTdGF0dXMgYW5kIHN0YXRpc3RpY3MgY2FuIGJlIHJlYWQgdmlhIC9wcm9jCisJCQkJZmlsZXN5c3RlbSBlbnRyaWVzLgorCisxLjAuMiAgIEFwcmlsIDMwLCAxOTk3ICAgICAgICAgIEFkZGVkIFVEUCBtYW5hZ2VtZW50IHZpYSBtb25pdG9ycy4KKworMS4wLjMJSnVuZSAzLCAxOTk3CQlVRFAgbWFuYWdlbWVudCBmb3IgbXVsdGlwbGUgYm9hcmRzIHVzaW5nIEZyYW1lCisJCQkJUmVsYXkgYW5kIFBQUAorCQkJCUVuYWJsZWQgY29udGludW91cyB0cmFuc21pc3Npb24gb2YgQ29uZmlndXJlIAorCQkJCVJlcXVlc3QgUGFja2V0IGZvciBQUFAgKGZvciA1MDggb25seSkKKwkJCQlDb25uZWN0aW9uIFRpbWVvdXQgZm9yIFBQUCBjaGFuZ2VkIGZyb20gOTAwIHRvIDAKKwkJCQlGbG93IENvbnRyb2wgUHJvYmxlbSBmaXhlZCBmb3IgRnJhbWUgUmVsYXkKKworMS4wLjQJSnVseSAxMCwgMTk5NwkJUzUwOC9GVDEgbW9uaXRvcmluZyBjYXBhYmlsaXR5IGluIGZwaXBlbW9uIGFuZAorCQkJCXBwaXBlbW9uIHV0aWxpdGllcy4KKwkJCQlDb25maWd1cmFibGUgVFRMIGZvciBVRFAgcGFja2V0cy4KKwkJCQlNdWx0aWNhc3QgYW5kIEJyb2FkY2FzdCBJUCBzb3VyY2UgYWRkcmVzc2VzIGFyZQorCQkJCXNpbGVudGx5IGRpc2NhcmRlZC4KKworMS4wLjUJSnVseSAyOCwgMTk5NwkJQ29uZmlndXJhYmxlIFQzOTEsVDM5MixOMzkxLE4zOTIsTjM5MyBmb3IgRnJhbWUKKwkJCQlSZWxheSBpbiByb3V0ZXIuY29uZi4KKwkJCQlDb25maWd1cmFibGUgTWVtb3J5IEFkZHJlc3MgdGhyb3VnaCByb3V0ZXIuY29uZiAKKwkJCQlmb3IgRnJhbWUgUmVsYXksIFBQUCBhbmQgWC4yNS4gKGNvbW1lbnRpbmcgdGhpcworIAkJCQlvdXQgZW5hYmxlcyBhdXRvLWRldGVjdGlvbikuCisJCQkJRml4ZWQgZnJlZWluZyB1cCByZWNlaXZlZCBidWZmZXJzIHVzaW5nIGtmcmVlKCkKKyAJCQkJZm9yIEZyYW1lIFJlbGF5IGFuZCBYLjI1LgorCQkJCVByb3RlY3Qgc2RsYV9wZWVrKCkgYnkgY2FsbGluZyBzYXZlX2ZsYWdzKCksCisJCQkJY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKS4KKwkJCQlDaGFuZ2VkIG51bWJlciBvZiBUcmFjZSBlbGVtZW50cyBmcm9tIDMyIHRvIDIwCisJCQkJQWRkZWQgRExDSSBzcGVjaWZpYyBkYXRhIG1vbml0b3JpbmcgaW4gRlBJUEVNT04uIAorMi4wLjAJTm92IDA3LCAxOTk3CQlJbXBsZW1lbnRlZCBwcm90ZWN0aW9uIG9mIFJBQ0UgY29uZGl0aW9ucyBieSAKKwkJCQljcml0aWNhbCBmbGFncyBmb3IgRlJBTUUgUkVMQVkgYW5kIFBQUC4KKwkJCQlETENJIExpc3QgaW50ZXJydXB0IG1vZGUgaW1wbGVtZW50ZWQuCisJCQkJSVBYIHN1cHBvcnQgaW4gRlJBTUUgUkVMQVkgYW5kIFBQUC4KKwkJCQlJUFggU2VydmVyIFN1cHBvcnQgKE1BUlMpCisJCQkJTW9yZSBkcml2ZXIgc3BlY2lmaWMgc3RhdHMgaW5jbHVkZWQgaW4gRlBJUEVNT04KKwkJCQlhbmQgUElQRU1PTi4KKworMi4wLjEJTm92IDI4LCAxOTk3CQlCdWcgRml4ZXMgZm9yIHZlcnNpb24gMi4wLjAuCisJCQkJUHJvdGVjdGlvbiBvZiAiZW5hYmxlX2lycSgpIiB3aGlsZSAKKwkJCQkiZGlzYWJsZV9pcnEoKSIgaGFzIGJlZW4gZW5hYmxlZCBmcm9tIGFueSBvdGhlcgorCQkJCXJvdXRpbmUgKGZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYMjUpLgorCQkJCUFkZGVkIGFkZGl0aW9uYWwgU3RhdHMgZm9yIEZwaXBlbW9uIGFuZCBQcGlwZW1vbgorCQkJCUltcHJvdmVkIExvYWQgU2hhcmluZyBmb3IgbXVsdGlwbGUgYm9hcmRzCisKKzIuMC4yCURlYyAwOSwgMTk5NwkJU3VwcG9ydCBmb3IgUEFQIGFuZCBDSEFQIGZvciBwcHAgaGFzIGJlZW4KKwkJCQlpbXBsZW1lbnRlZC4KKworMi4wLjMJQXVnIDE1LCAxOTk4CQlOZXcgcmVsZWFzZSBzdXBwb3J0aW5nIENpc2NvIEhETEMsIENJUiBmb3IgRnJhbWUKKwkJCQlyZWxheSwgRHluYW1pYyBJUCBhc3NpZ25tZW50IGZvciBQUFAgYW5kIEludmVyc2UKKwkJCQlBcnAgc3VwcG9ydCBmb3IgRnJhbWUtcmVsYXkuICBNYW4gUGFnZXMgYXJlIAorCQkJCWluY2x1ZGVkIGZvciBiZXR0ZXIgc3VwcG9ydCBhbmQgYSBuZXcgdXRpbGl0eQorCQkJCWZvciBjb25maWd1cmluZyBGVDEgY2FyZHMuCisKKzIuMC40CURlYyAwOSwgMTk5OAkgICAgICAgIER1YWwgUG9ydCBzdXBwb3J0IGZvciBDaXNjbyBIRExDLgorCQkJCVN1cHBvcnQgZm9yIEhETEMgKExBUEIpIEFQSS4KKwkJCQlTdXBwb3J0cyBCaVN5bmMgU3RyZWFtaW5nIGNvZGUgZm9yIFM1MDJFIAorCQkJCWFuZCBTNTAzIGNhcmRzLgorCQkJCVN1cHBvcnQgZm9yIFN0cmVhbWluZyBIRExDIEFQSS4KKwkJCQlQcm92aWRlcyBhIEJTRCBzb2NrZXQgaW50ZXJmYWNlIGZvciAKKwkJCQljcmVhdGluZyBhcHBsaWNhdGlvbnMgdXNpbmcgQmlTeW5jCisgICAJCQkJc3RyZWFtaW5nLiAgICAgICAgCisKKzIuMC41ICAgQXVnIDA0LCAxOTk5IAkJQ0hETEMgaW5pdGlhbGl6YXRpbiBidWcgZml4LgorCQkJCVBQUCBpbnRlcnJ1cHQgZHJpdmVuIGRyaXZlcjogCisgIAkJCQlGaXggdG8gdGhlIFBQUCBsaW5lIGhhbmd1cCBwcm9ibGVtLgorCQkJCU5ldyBQUFAgZmlybXdhcmUKKwkJCQlBZGRlZCBjb21tZW50cyB0byB0aGUgc3RhcnR1cCBTWVNURU0gRVJST1IgbWVzc2FnZXMKKwkJCQlYcGlwZW1vbiBkZWJ1Z2dpbmcgYXBwbGljYXRpb24gZm9yIHRoZSBYMjUgcHJvdG9jb2wKKwkJCQlOZXcgVVNFUl9NQU5VQUwudHh0CisJCQkJRml4ZWQgdGhlIG9kZCBib3VuZGFyeSA0Ynl0ZSB3cml0ZXMgdG8gdGhlIGJvYXJkLgorCQkJCUJpU3luYyBTdHJlYW1pbmcgY29kZSBoYXMgYmVlbiB0YWtlbiBvdXQuICAKKwkJCQkgQXZhaWxhYmxlIGFzIGEgcGF0Y2guCisJCQkJU3RyZWFtaW5nIEhETEMgQVBJIGhhcyBiZWVuIHRha2VuIG91dC4gIAorCQkJCSBBdmFpbGFibGUgYXMgYSBwYXRjaC4gICAgICAgICAgICAgICAgIAorCisyLjAuNiAgIEF1ZyAxNywgMTk5OQkJSW5jcmVhc2VkIGRlYnVnZ2luZyBpbiBzdGF0dXAgc2NyaXB0cworCQkJCUZpeGVkIGluc2FsbGF0aW9uIGJ1Z3MgZnJvbSAyLjAuNQorCQkJCUtlcm5lbCBwYXRjaCB3b3JrcyBmb3IgYm90aCAyLjIuMTAgYW5kIDIuMi4xMSBrZXJuZWxzLgorCQkJCVRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcGFja2FnZXMgICAgICAgICAKKworMi4wLjcgICBBdWcgMjYsIDE5OTkJCW8gIE1lcmdlZCBYMjVBUEkgY29kZSBpbnRvIFdBTlBJUEUuCisJCQkJbyAgRml4ZWQgYSBtZW1lb3J5IGxlYWsgZm9yIFgyNUFQSQorCQkJCW8gIFVwZGF0ZWQgdGhlIFgyNUFQSSBjb2RlIGZvciAyLjIuWCBrZXJuZWxzLgorCQkJCW8gIEltcHJvdmVkIE5FTSBoYW5kbGluZy4gICAKKworMi4xLjAJT2N0IDI1LCAxOTk5CQlvIE5ldyBjb2RlIGZvciBTNTE0IFBDSSBDYXJkCisJCQkJbyBOZXcgQ0hETEMgYW5kIEZyYW1lIFJlbGF5IGRyaXZlcnMKKwkJCQlvIFBQUCBhbmQgWDI1IGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcmVsZWFzZSAgICAKKworMi4xLjEJTm92IDMwLCAxOTk5CQlvIFBQUCBzdXBwb3J0IGZvciBTNTE0IFBDSSBDYXJkcworCisyLjEuMyAgIEFwciAwNiwgMjAwMAkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIAorCQkJCW8gU29ja2V0IGJhc2VkIGNoZGxjIGFwaQorCQkJCW8gU29ja2V0IGJhc2VkIGZyIGFwaQorCQkJCW8gRHVhbCBQb3J0IFJlY2VpdmUgb25seSBDSERMQyBzdXBwb3J0LgorCQkJCW8gQXN5bmNocm9ub3VzIENIRExDIHN1cHBvcnQgKFNlY29uZGFyeSBQb3J0KQorCQkJCW8gY2ZnZnQxIEdVSSBjc3UvZHN1IGNvbmZpZ3VyYXRvcgorCQkJCW8gd2FuY2ZnIEdVSSBjb25maWd1cmF0aW9uIGZpbGUgCisJCQkJICBjb25maWd1cmF0b3IuCisJCQkJbyBBcmNoaXRlY3R1YWwgZGlyZWN0b3J5IGNoYW5nZXMuCisKK2JldGEtMi4xLjQgSnVsIDIwMDAJCW8gRHluYW1pYyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbjoKKwkJCQkJTmV0d29yayBpbnRlcmZhY2VzIHJlZmxlY3QgdGhlIHN0YXRlCisJCQkJCW9mIHByb3RvY29sIGxheWVyLiAgSWYgdGhlIHByb3RvY29sIGJlY29tZXMKKwkJCQkJZGlzY29ubmVjdGVkLCBkcml2ZXIgd2lsbCBicmluZyBkb3duCisJCQkJCXRoZSBpbnRlcmZhY2UuICBPbmNlIHRoZSBwcm90b2NvbCByZWNvbm5lY3RzCisJCQkJCXRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBicm91Z2h0IHVwLiAKKwkJCQkJCisJCQkJCU5vdGU6IFRoaXMgb3B0aW9uIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdC4KKworCQkJCW8gRHluYW1pYyB3YW5yb3V0ZXIgc2V0dXAgdXNpbmcgJ3dhbmNvbmZpZyc6CisJCQkJCXdhbmNvbmZpZyB1dGlsaXR5IGNhbiBiZSB1c2VkIHRvCisJCQkJCXNodXRkb3duLHJlc3RhcnQsc3RhcnQgb3IgcmVjb25maWd1cmUgCisJCQkJCWEgdmlydHVhbCBjaXJjdWl0IGR5bmFtaWNhbGx5LgorCQkJCSAgICAgCisJCQkJCUZyYW1lIFJlbGF5OiAgRWFjaCBETENJIGNhbiBiZTogCisJCQkJCQkgICAgICBjcmVhdGVkLHN0b3BwZWQscmVzdGFydGVkIGFuZCByZWNvbmZpZ3VyZWQKKwkJCQkJCSAgICAgIGR5bmFtaWNhbGx5IHVzaW5nIHdhbmNvbmZpZy4KKwkJCQkJCisJCQkJCQkgICAgICBleDogd2FuY29uZmlnIGNhcmQgd2FucGlwZTEgZGV2IHdwMV9mcjE2IHVwCisJCQkJICAKKwkJCQlvIFdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzOgorCQkJCQl3YW5jb25maWcgYWxzbyBzdXBwb3J0cyB3YW5yb3V0ZXIgc3RhcnR1cCB2aWEgY29tbWFuZCBsaW5lCisJCQkJCWFyZ3VtZW50cy4gIFRodXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY3JlYXRlIGEgd2FucGlwZSMuY29uZgorCQkJCQljb25maWd1cmF0aW9uIGZpbGUuICAKKworCQkJCW8gU29ja2V0IGJhc2VkIHgyNWFwaSB1cGRhdGUvYnVnIGZpeGVzLgorCQkJCQlBZGRlZCBzdXBwb3J0IGZvciBMQ04gbnVtYmVycyBncmVhdGVyIHRoYW4gMjU1LgorCQkJCQlPcHRpb24gdG8gcGFzcyB1cCBtb2RlbSBtZXNzYWdlcy4KKwkJCQkJUHJvdmlkZWQgYSBQQ0kgSVJRIGNoZWNrLCBzbyBhIHNpbmdsZSBTNTE0CisJCQkJCWNhcmQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgbm9uLXNoYXJpbmcgaW50ZXJydXB0LgorCisJCQkJbyBGaXhlcyB0byB0aGUgd2FuY2ZnIHV0aWxpdHkuCisJCQkJbyBOZXcgRlQxIGRlYnVnZ2luZyBzdXBwb3J0IHZpYSAqcGlwZW1vbiB1dGlsaXRpZXMuCisJCQkJbyBGcmFtZSBSZWxheSBBUlAgc3VwcG9ydCBFbmFibGVkLgorCitiZXRhMy0yLjEuNCBKdWwgMjAwMAkJbyBYMjUgTV9CSVQgUHJvYmxlbSBmaXguCisJCQkJbyBBZGRlZCB0aGUgTXVsdGktUG9ydCBQUFAKKwkJCQkgIFVwZGF0ZWQgdXRpbGl0ZXMgZm9yIHRoZSBNdWx0aS1Qb3J0IFBQUC4KKworMi4xLjQJQXV0IDIwMDAKKwkJCQlvIEluIFgyNUFQSToKKwkJCQkJTWF4aW11bSBwYWNrZXQgYW4gYXBwbGljYXRpb24gY2FuIHNlbmQKKwkJCQkJdG8gdGhlIGRyaXZlciBoYXMgYmVlbiBleHRlbmRlZCB0byA0MDk2IGJ5dGVzLgorCisJCQkJCUZpeGVkIHRoZSB4MjUgc3RhcnR1cCBidWcuIEVuYWJsZSAKKwkJCQkJY29tbXVuaWNhdGlvbnMgb25seSBhZnRlciBhbGwgaW50ZXJmYWNlcworCQkJCQljb21lIHVwLiAgSElHSCBTVkMvUFZDIGlzIHVzZWQgdG8gY2FsY3VsYXRlCisJCQkJCXRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCisJCQkJCUVuYWJsZSBwcm90b2NvbCBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCisJCQkJCWFyZSBlbmFibGVkLgorCisJCQkJbyBBZGRlZCBhbiBleHRyYSBzdGF0ZSB0byB0aGUgRlQxIGNvbmZpZywga2VybmVsIG1vZHVsZS4KKwkJCQlvIFVwZGF0ZWQgdGhlIHBpcGVtb24gZGVidWdnZXJzLgorCisJCQkJbyBCbG9ja2VkIHRoZSBNdWx0aS1Qb3J0IFBQUCBmcm9tIHJ1bm5pbmcgb24ga2VybmVscworCQkJCSAgMi4yLjE2IG9yIGdyZWF0ZXIsIGR1ZSB0byBzeW5jcHBwIGtlcm5lbCBtb2R1bGUKKwkJCQkgIGNoYW5nZS4gCisJICAKK2JldGExLTIuMS41IAlOb3YgMTUgMjAwMAorCQkJCW8gRml4ZWQgdGhlIE11bGl0UG9ydCBQUFAgU3VwcG9ydCBmb3Iga2VybmVscyAyLjIuMTYgYW5kIGFib3ZlLgorCQkJCSAgMi4yLlgga2VybmVscyBvbmx5CisKKwkJCQlvIFNlY3VyZWQgdGhlIGRyaXZlciBVRFAgZGVidWdnaW5nIGNhbGxzCisJCQkJCS0gQWxsIGlsbGVnYWwgbmV0b3dyayBkZWJ1Z2dpbmcgY2FsbHMgYXJlIHJlcG9ydGVkIHRvCisJCQkJCSAgdGhlIGxvZy4KKwkJCQkJLSBEZWZpbmVkIGEgc2V0IG9mIGFsbG93ZWQgY29tbWFuZHMsIGFsbCBvdGhlciBkZW5pZWQuCisJCQkJCQorCQkJCW8gQ3BpcGVtb24KKwkJCQkJLSBBZGRlZCBzZXQgRlQxIGNvbW1hbmRzIHRvIHRoZSBjcGlwZW1vbi4gVGh1cyBDU1UvRFNVCisJCQkJCSAgY29uZmlndXJhaXRvbiBjYW4gYmUgcGVyZm9ybWVkIHVzaW5nIGNwaXBlbW9uLgorCQkJCQkgIEFsbCBzeXN0ZW1zIHRoYXQgY2Fubm90IHJ1biBjZmdmdDEgR1VJIHV0aWxpdHkgc2hvdWxkCisJCQkJCSAgdXNlIGNwaXBlbW9uIHRvIGNvbmZpZ3VyZSB0aGUgb24gYm9hcmQgQ1NVL0RTVS4KKworCisJCQkJbyBLZXlib2FyZCBMZWQgTW9uaXRvci9EZWJ1Z2dlcgorCQkJCQktIEEgbmV3IHV0aWx0eSAvdXNyL3NiaW4vd3BrYmRtb24gdXNlcyBrZXlib2FyZCBsZWRzCisJCQkJCSAgdG8gY29udmV5IG9wZXJhdGluYWwgc3RhdGlzdGljIGluZm9ybWF0aW9uIG9mIHRoZSAKKwkJCQkJICBTYW5nb21hIFdBTlBJUEUgY2FyZHMuCisJCQkJCU5VTV9MT0NLICAgID0gTGluZSBTdGF0ZSAgKE9uPWNvbm5lY3RlZCwgICAgT2ZmPWRpc2Nvbm5lY3RlZCkKKwkJCQkJQ0FQU19MT0NLICAgPSBUeCBkYXRhICAgICAoT249dHJhbnNtaXR0aW5nLCBPZmY9bm8gdHggZGF0YSkKKwkJCQkJU0NST0xMX0xPQ0sgPSBSeCBkYXRhICAgICAoT249cmVjZWl2aW5nLCAgICBPZmY9bm8gcnggZGF0YQorCQkJCQkKKwkJCQlvIEhhcmR3YXJlIHByb2JlIG9uIG1vZHVsZSBsb2FkIGFuZCBkeW5hbWljIGRldmljZSBhbGxvY2F0aW9uCisJCQkJCS0gRHVyaW5nIFdBTlBJUEUgbW9kdWxlIGxvYWQsIGFsbCBTYW5nb21hIGNhcmRzIGFyZSBwcm9iZWQKKwkJCQkJICBhbmQgZm91bmQgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBpbiB0aGUgL3Zhci9sb2cvbWVzc2FnZXMuCisJCQkJCS0gSWYgbm8gY2FyZHMgYXJlIGZvdW5kLCB0aGUgbW9kdWxlIGxvYWQgZmFpbHMuCisJCQkJCS0gQXBwcm9wcmlhdGUgbnVtYmVyIG9mIGRldmljZXMgYXJlIGR5bmFtaWNhbGx5IGxvYWRlZCAKKwkJCQkJICBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIFNhbmdvbWEgY2FyZHMgZm91bmQuCisKKwkJCQkJICBOb3RlOiBUaGUga2VybmVsIGNvbmZpZ3VyYWl0b24gb3B0aW9uIAorCQkJCQkJQ09ORklHX1dBTlBJUEVfQ0FSRFMgaGFzIGJlZW4gdGFrZW4gb3V0LgorCQkJCQkKKwkJCQlvIEZpeGVkIHRoZSBGcmFtZSBSZWxheSBhbmQgQ2hkbGMgbmV0d29yayBpbnRlcmZhY2VzIHNvIHRoZXkgYXJlCisJCQkJICBjb21wYXRpYmxlIHdpdGggbGlicGNhcCBsaWJyYXJpZXMuICBNZWFuaW5nLCB0Y3BkdW1wLCBzbm9ydCwKKwkJCQkgIGV0aGVyZWFsLCBhbmQgYWxsIG90aGVyIHBhY2tldCBzbmlmZmVycyBhbmQgZGVidWdnZXJzIHdvcmsgb24KKwkJCQkgIGFsbCBXQU5QSVBFIG5ldG93cmsgaW50ZXJmYWNlcy4KKwkJCQkJLSBTZXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGVuY29kaW5nIHR5cGUgdG8gQVJQSFJEX1BQUC4KKwkJCQkJICBUaGlzIHRlbGwgdGhlIHNuaWZmZXJzIHRoYXQgZGF0YSBvYnRhaW5lZCBmcm9tIHRoZQorCQkJCQkgIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGluIHB1cmUgSVAgZm9ybWF0LgorCQkJCSAgRml4IGZvciAyLjIuWCBrZXJuZWxzIG9ubHkuCisJCQkJCisJCQkJbyBUcnVlIGludGVyZmFjZSBlbmNvZGluZyBvcHRpb24gZm9yIEZyYW1lIFJlbGF5IGFuZCBDSERMQworCQkJCQktIFRoZSBhYm92ZSBmaXggc2V0cyB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcKKwkJCQkJICB0eXBlIHRvIEFSUEhSRF9QUFAsIGhvd2V2ZXIgc29tZSBjdXN0b21lcnMgdXNlCisJCQkJCSAgdGhlIGVuY29kaW5nIGludGVyZmFjZSB0eXBlIHRvIGRldGVybWluZSB0aGUKKwkJCQkJICBwcm90b2NvbCBydW5uaW5nLiAgVGhlcmVmb3JlLCB0aGUgVFVSRSBFTkNPRElORworCQkJCQkgIG9wdGlvbiB3aWxsIHNldCB0aGUgaW50ZXJmYWNlIHR5cGUgYmFjayB0byB0aGUKKwkJCQkJICBvcmlnaW5hbCB2YWx1ZS4gIAorCisJCQkJCSAgTk9URTogSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB3aXRoIEZyYW1lIFJlbGF5IGFuZCBDSERMQworCQkJCQkJbGlicGNhcCBsaWJyYXJ5IHN1cHBvcnQgd2lsbCBiZSBicm9rZW4uICAKKwkJCQkJCWkuZS4gdGNwZHVtcCB3aWxsIG5vdCB3b3JrLgorCQkJCQlGaXggZm9yIDIuMi54IEtlcm5lbHMgb25seS4KKwkJCQkJCQorCQkJCW8gRXRoZXJuZXQgQnJpZGdpbmQgb3ZlciBGcmFtZSBSZWxheQorCQkJCQktIFRoZSBGcmFtZSBSZWxheSBicmlkZ2luZyBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgCisJCQkJCSAgS3Jpc3RpYW4gSG9mZm1hbm4gYW5kIE1hcmsgV2VsbHMuICAKKwkJCQkJLSBUaGUgTGludXgga2VybmVsIGJyaWRnZSBpcyB1c2VkIHRvIHNlbmQgZXRoZXJuZXQgCisJCQkJCSAgZGF0YSBvdmVyIHRoZSBmcmFtZSByZWxheSBsaW5rcy4KKwkJCQkJRm9yIDIuMi5YIEtlcm5lbHMgb25seS4KKworCQkJCW8gQWRkZWQgZXh0ZW5zaXZlIDIuMC5YIHN1cHBvcnQuIE1vc3QgbmV3IGZlYXR1cmVzIG9mCisJCQkJICAyLjEuNSBmb3IgcHJvdG9jb2xzIEZyYW1lIFJlbGF5LCBQUFAgYW5kIENIRExDIGFyZQorCQkJCSAgc3VwcG9ydGVkIHVuZGVyIDIuMC5YIGtlcm5lbHMuIAorCitiZXRhMS0yLjIuMCAJRGVjIDMwIDIwMDAKKwkJCQlvIFVwZGF0ZWQgZHJpdmVycyBmb3IgMi40Llgga2VybmVscy4KKwkJCQlvIFVwZGF0ZWQgZHJpdmVycyBmb3IgU01QIHN1cHBvcnQuCisJCQkJbyBYMjVBUEkgaXMgbm93IGFibGUgdG8gc2hhcmUgUENJIGludGVycnVwdHMuCisJCQkJbyBUb29rIG91dCBhIGdlbmVyYWwgcG9sbGluZyByb3V0aW5lIHRoYXQgd2FzIHVzZWQKKwkJCQkgIG9ubHkgYnkgWDI1QVBJLiAKKwkJCQlvIEFkZGVkIGFwcHJvcHJpYXRlIGxvY2tzIHRvIHRoZSBkeW5hbWljIHJlY29uZmlndXJhdGlvbgorCQkJCSAgY29kZS4KKwkJCQlvIEZpeGVkIGEgYnVnIGluIHRoZSBrZXlib2FyZCBkZWJ1ZyBtb25pdG9yLgorCitiZXRhMi0yLjIuMAlKYW4gOCAyMDAxCisJCQkJbyBQYXRjaGVzIGZvciAyLjQuMCBrZXJuZWwKKwkJCQlvIFBhdGNoZXMgZm9yIDIuMi4xOCBrZXJuZWwKKwkJCQlvIE1pbm9yIHVwZGF0ZXMgdG8gUFBQIGFuZCBDSExEQyBkcml2ZXJzLgorCQkJCSAgTm90ZTogTm8gZnVuY3RpbmFsIGRpZmZlcmVuY2UuIAorCitiZXRhMy0yLjIuOQlKYW4gMTAgMjAwMQorCQkJCW8gSSBtaXNzZWQgdGhlIDIuMi4xOCBrZXJuZWwgcGF0Y2hlcyBpbiBiZXRhMi0yLjIuMAorCQkJCSAgcmVsZWFzZS4gIFRoZXkgYXJlIGluY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworU3RhYmxlIFJlbGVhc2UKKzIuMi4wCQlGZWIgMDEgMjAwMQorCQkJCW8gQnVnIGZpeCBpbiB3YW5jZmcgR1VJIGNvbmZpZ3VyYXRvci4KKwkJCQkJVGhlIGVkaXQgZnVuY3Rpb24gZGlkbid0IHdvcmsgcHJvcGVybHkuCisKKworYmF0YTEtMi4yLjEJRmViIDA5IDIwMDEKKwkJCW8gV0FOUElQRSBUVFkgRHJpdmVyIGVtdWxhdGlvbi4gCisJCQkgIFR3byBtb2RlcyBvZiBvcGVyYXRpb24gU3luYyBhbmQgQXN5bmMuCisJCQkJU3luYzogVXNpbmcgdGhlIFBQUEQgZGFlbW9uLCBrZXJuZWwgU3luY1BQUCBsYXllcgorCQkJCSAgICAgIGFuZCB0aGUgV2FucGlwZSBzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sIAorCQkJCSAgICAgIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBTYW5nb21hIGFkYXB0ZXIsIG92ZXIKKwkJCQkgICAgICBhIFQxIGxlYXNlZCBsaW5lLgorCQkJCisJCQkJICAgICAgVGhlIDIuNC4wIGtlcm5lbCBQUFAgbGF5ZXIgc3VwcG9ydHMgTVVMVElMSU5LCisJCQkJICAgICAgcHJvdG9jb2wsIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVuZGxlIGFueSBudW1iZXIgb2YgU2FuZ29tYQorCQkJCSAgICAgIGFkYXB0ZXJzIChUMSBsaW5lcykgaW50byBvbmUsIHVuZGVyIGEgc2luZ2xlIElQIGFkZHJlc3MuCisJCQkJICAgICAgVGh1cywgZWZmaWNpZW50bHkgb2J0YWluaW5nIG11bHRpcGxlIFQxIHRocm91Z2hwdXQuIAorCisJCQkJICAgICAgTk9URTogVGhlIHJlbW90ZSBzaWRlIG11c3QgYWxzbyBpbXBsZW1lbnQgTVVMVElMSU5LIFBQUAorCQkJCQkgICAgcHJvdG9jb2wuCisKKwkJCQlBc3luYzpVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBBc3luY1BQUCBsYXllcgorCQkJCSAgICAgIGFuZCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyOiBhIFBQUCBwcm90b2NvbAorCQkJCSAgICAgIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBTYW5nb21hIGFkYXB0ZXIgYW5kCisJCQkJICAgICAgYSBtb2RlbSwgb3ZlciBhIHRlbGVwaG9uZSBsaW5lLgorCisJCQkJICAgICAgVGh1cywgdGhlIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciBzaW11bGF0ZXMgYSBzZXJpYWwKKwkJCQkgICAgICBUVFkgZHJpdmVyIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgdXNlZCB0byBpbnRlcmZhY2UgdGhlIAorCQkJCSAgICAgIE1PREVNIHRvIHRoZSBsaW51eCBrZXJuZWwuCisJCQkJCisJCQlvIFdBTlBJUEUgUFBQIEJhY2t1cCBVdGlsaXR5CisJCQkJVGhpcyB1dGlsaXR5IHdpbGwgbW9uaXRvciB0aGUgc3RhdGUgb2YgdGhlIFBQUCBUMSBsaW5lLgorCQkJCUluIGNhc2Ugb2YgZmFpbHVyZSwgYSBkaWFsIHVwIGNvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZAorCQkJCXZpYSBwcHBkIGRhZW1vbiwgZXRoZXIgdmlhIGEgc2VyaWFsIHR0eSBkcml2ZXIgKHNlcmlhbCBwb3J0KSwgCisJCQkJb3IgYSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXIgKGluIGNhc2Ugc2VyaWFsIHBvcnQgaXMgdW5hdmFpbGFibGUpLgorCQkJCQorCQkJCUZ1cnRoZXJtb3JlLCB3aGlsZSBpbiBkaWFsIHVwIG1vZGUsIHRoZSBwcmltYXJ5IFBQUCBUMSBsaW5rCisJCQkJd2lsbCBiZSBtb25pdG9yZWQgZm9yIHNpZ25zIG9mIGxpZmUuICAKKworCQkJCUlmIHRoZSBQUFAgVDEgbGluayBjb21lcyBiYWNrIHRvIGxpZmUsIHRoZSBkaWFsIHVwIGNvbm5lY3Rpb24KKwkJCQl3aWxsIGJlIHNodXRkb3duIGFuZCBUMSBsaW5lIHJlLWVzdGFibGlzaGVkLgorCQkJCisKKwkJCW8gTmV3IFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisJCQkJT3B0aW9uIHRvIFVQR1JBREUgZGV2aWNlIGRyaXZlcnMgaWYgdGhlIGtlcm5lbCBzb3VyY2UgaGFzCisJCQkJYWxyZWFkeSBiZWVuIHBhdGNoZWQgd2l0aCBXQU5QSVBFLgorCisJCQkJT3B0aW9uIHRvIENPTVBJTEUgV0FOUElQRSBtb2R1bGVzIGFnYWluc3QgdGhlIGN1cnJlbnRseSAKKwkJCQlydW5uaW5nIGtlcm5lbCwgdGh1cyBubyBuZWVkIGZvciBtYW51YWwga2VybmVsIGFuZCBtb2R1bGUKKwkJCQlyZS1jb21waWxhdGluLgorCQkJCisJCQlvIFVwZGF0ZXMgYW5kIEJ1ZyBGaXhlcyB0byB3YW5jZmcgdXRpbGl0eS4KKworYmF0YTItMi4yLjEJRmViIDIwIDIwMDEKKworCQkJbyBCdWcgZml4ZXMgdG8gdGhlIENIRExDIGRldmljZSBkcml2ZXJzLgorCQkJCVRoZSBkcml2ZXIgaGFkIGNvbXBpbGF0aW9uIHByb2JsZW1zIHVuZGVyIGtlcm5lbHMKKwkJCQkyLjIuMTQgb3IgbG93ZXIuCisKKwkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgorCQkJCVRoZSBkZXZpY2UgZHJpdmVycyBjb21waWxhdGlvbiBvcHRpb25zIGRpZG4ndCB3b3JrCisJCQkJcHJvcGVybHkuCisKKwkJCW8gVXBkYXRlIHRvIHRoZSB3cGJhY2t1cGQgZGFlbW9uLiAgCisJCQkJT3B0aW1pemVkIHRoZSBjcm9zcy1vdmVyIHRpbWVzLCBiZXR3ZWVuIHRoZSBwcmltYXJ5CisJCQkJbGluayBhbmQgdGhlIGJhY2t1cCBkaWFsdXAuCisKK2JldGEzLTIuMi4xCU1hciAwMiAyMDAxCisJCQlvIFBhdGNoZXMgZm9yIDIuNC4yIGtlcm5lbC4KKworCQkJbyBCdWcgZml4ZXMgdG8gdXRpbC8gbWFrZSBmaWxlcy4KKwkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgorCisJCQlvIFRvb2sgb3V0IHRoZSBiYWNrdXBkIHN1cHBvcnQgYW5kIG1hZGUgaXQgaW50bworCQkJICBhcyBzZXBhcmF0ZSBwYWNrYWdlLgorCQkJICAKK2JldGE0LTIuMi4xICAgICBNYXIgMTIgMjAwMQorCisJCW8gRml4IHRvIHRoZSBGcmFtZSBSZWxheSBEZXZpY2UgZHJpdmVyLgorCQkJSVBTQUMgc2VuZHMgYSBwYWNrZXQgb2YgemVybyBsZW5ndGgKKwkJCWhlYWRlciB0byB0aGUgZnJhbWUgcmVsYXkgZHJpdmVyLiAgVGhlCisJCQlkcml2ZXIgdHJpZXMgdG8gcHVzaCBpdHMgb3duIDIgYnl0ZSBoZWFkZXIKKwkJCWludG8gdGhlIHBhY2tldCwgd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8KKwkJCWNyYXNoLgorCisJCW8gRml4IHRoZSBXQU5QSVBFIHJlLWNvbmZpZ3VyYXRpb24gY29kZS4KKwkJCUJ1ZyB3YXMgZm91bmQgYnkgdHJ5aW5nIHRvIHJ1biAgdGhlIGNmZ2Z0MSB3aGlsZSB0aGUKKwkJCWludGVyZmFjZSB3YXMgYWxyZWFkeSBydW5uaW5nLiAgCisKKwkJbyBVcGRhdGVzIHRvIGNmZ2Z0MS4KKwkJCVdyaXRlcyBhIHdhbnBpcGUjLmNmZ2Z0MSBjb25maWd1cmF0aW9uIGZpbGUKKwkJCW9uY2UgdGhlIENTVS9EU1UgaXMgY29uZmlndXJlZC4gVGhpcyBmaWxlIGNhbgorCQkJaG9sZHMgdGhlIGN1cnJlbnQgQ1NVL0RTVSBjb25maWd1cmF0aW9uLgorCisKKworPj4+Pj4+IEVORCBPRiBSRUFETUUgPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbnBpcGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbnBpcGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYTIwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FucGlwZS50eHQKQEAgLTAsMCArMSw2MjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGludXggV0FOIFJvdXRlciBVdGlsaXRpZXMgUGFja2FnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWZXJzaW9uIDIuMi4xIAorTWFyIDI4LCAyMDAxCitBdXRob3I6IE5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KK0NvcHlyaWdodCAoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJTlRST0RVQ1RJT04KKworV2lkZSBBcmVhIE5ldHdvcmtzIChXQU5zKSBhcmUgdXNlZCB0byBpbnRlcmNvbm5lY3QgTG9jYWwgQXJlYSBOZXR3b3JrcyAoTEFOcykKK2FuZC9vciBzdGFuZC1hbG9uZSBob3N0cyBvdmVyIHZhc3QgZGlzdGFuY2VzIHdpdGggZGF0YSB0cmFuc2ZlciByYXRlcworc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiB0aG9zZSBhY2hpZXZhYmxlIHdpdGggY29tbW9ubHkgdXNlZCBkaWFsLXVwCitjb25uZWN0aW9ucy4KKworVXN1YWxseSBhbiBleHRlcm5hbCBkZXZpY2UgY2FsbGVkIGBXQU4gcm91dGVyJyBzaXR0aW5nIG9uIHlvdXIgbG9jYWwgbmV0d29yaworb3IgY29ubmVjdGVkIHRvIHlvdXIgbWFjaGluZSdzIHNlcmlhbCBwb3J0IHByb3ZpZGVzIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8KK1dBTi4gIEFsdGhvdWdoIHJvdXRlcidzIGpvYiBtYXkgYmUgYXMgc2ltcGxlIGFzIHRha2luZyB5b3VyIGxvY2FsIG5ldHdvcmsKK3RyYWZmaWMsIGNvbnZlcnRpbmcgaXQgdG8gV0FOIGZvcm1hdCBhbmQgcGlwaW5nIGl0IHRocm91Z2ggdGhlIFdBTiBsaW5rLCB0aGVzZQorZGV2aWNlcyBhcmUgbm90b3Jpb3VzbHkgZXhwZW5zaXZlLCB3aXRoIHByaWNlcyBhcyBtdWNoIGFzIDIgLSA1IHRpbWVzIGhpZ2hlcgordGhlbiB0aGUgcHJpY2Ugb2YgYSB0eXBpY2FsIFBDIGJveC4KKworQWx0ZXJuYXRpdmVseSwgY29uc2lkZXJpbmcgcm9idXN0bmVzcyBhbmQgbXVsdGl0YXNraW5nIGNhcGFiaWxpdGllcyBvZiBMaW51eCwKK2FuIGludGVybmFsIHJvdXRlciBjYW4gYmUgYnVpbHQgKG1vc3Qgcm91dGVycyB1c2Ugc29tZSBzb3J0IG9mIHN0cmlwcGVkIGRvd24KK1VuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGFueXdheSkuIFdpdGggYSBudW1iZXIgb2YgcmVsYXRpdmVseSBpbmV4cGVuc2l2ZSBXQU4KK2ludGVyZmFjZSBjYXJkcyBhdmFpbGFibGUgb24gdGhlIG1hcmtldCwgYSBwZXJmZWN0bHkgdXNhYmxlIHJvdXRlciBjYW4gYmUKK2J1aWx0IGZvciBsZXNzIHRoYW4gaGFsZiBhIHByaWNlIG9mIGFuIGV4dGVybmFsIHJvdXRlci4gIFlldCBhIExpbnV4IGJveAorYWN0aW5nIGFzIGEgcm91dGVyIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcywgc3VjaCBhcyBmaXJlLXdhbGxpbmcsCitydW5uaW5nIEZUUCwgV1dXIG9yIEROUyBzZXJ2ZXIsIGV0Yy4KKworVGhpcyBrZXJuZWwgbW9kdWxlIGludHJvZHVjZXMgdGhlIG5vdGlvbiBvZiBhIFdBTiBMaW5rIERyaXZlciAoV0xEKSB0byBMaW51eAorb3BlcmF0aW5nIHN5c3RlbSBhbmQgcHJvdmlkZXMgZ2VuZXJpYyBoYXJkd2FyZS1pbmRlcGVuZGVudCBzZXJ2aWNlcyBmb3Igc3VjaAorZHJpdmVycy4gIFdoeSBjYW4gZXhpc3RpbmcgTGludXggbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlIG5vdCBiZSB1c2VkIGZvcgordGhpcyBwdXJwb3NlPyAgV2VsbCwgaXQgY2FuLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgZmV3IGtleSBkaWZmZXJlbmNlcyBiZXR3ZWVuCithIHR5cGljYWwgbmV0d29yayBpbnRlcmZhY2UgKGUuZy4gRXRoZXJuZXQpIGFuZCBhIFdBTiBsaW5rLgorCitNYW55IFdBTiBwcm90b2NvbHMsIHN1Y2ggYXMgWC4yNSBhbmQgZnJhbWUgcmVsYXksIGFsbG93IGZvciBtdWx0aXBsZSBsb2dpY2FsCitjb25uZWN0aW9ucyAoa25vd24gYXMgYHZpcnR1YWwgY2lyY3VpdHMnIGluIFguMjUgdGVybWlub2xvZ3kpIG92ZXIgYSBzaW5nbGUKK3BoeXNpY2FsIGxpbmsuICBFYWNoIHN1Y2ggdmlydHVhbCBjaXJjdWl0IG1heSAoYW5kIGFsbW9zdCBhbHdheXMgZG9lcykgbGVhZAordG8gYSBkaWZmZXJlbnQgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIGFuZCwgdGhlcmVmb3JlLCBkaWZmZXJlbnQgbmV0d29yay4gIEFzIGEKK3Jlc3VsdCwgaXQgaXMgdGhlIHZpcnR1YWwgY2lyY3VpdCwgbm90IHRoZSBwaHlzaWNhbCBsaW5rLCB0aGF0IHJlcHJlc2VudHMgYQorcm91dGUgYW5kLCB0aGVyZWZvcmUsIGEgbmV0d29yayBpbnRlcmZhY2UgaW4gTGludXggdGVybXMuCisKK1RvIGZ1cnRoZXIgY29tcGxpY2F0ZSB0aGluZ3MsIHZpcnR1YWwgY2lyY3VpdHMgYXJlIHVzdWFsbHkgdm9sYXRpbGUgaW4gbmF0dXJlCisoZXhjbHVkaW5nIHNvIGNhbGxlZCBgcGVybWFuZW50JyB2aXJ0dWFsIGNpcmN1aXRzIG9yIFBWQ3MpLiAgV2l0aCBhbG1vc3Qgbm8KK3RpbWUgcmVxdWlyZWQgdG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYSB2aXJ0dWFsIGNpcmN1aXQsIGl0IGlzIGhpZ2hseSBkZXNpcmFibGUKK3RvIGltcGxlbWVudCBvbi1kZW1hbmQgY29ubmVjdGlvbnMgaW4gb3JkZXIgdG8gbWluaW1pemUgbmV0d29yayBjaGFyZ2VzLiAgU28KK3VubGlrZSBhIHR5cGljYWwgbmV0d29yayBkcml2ZXIsIHRoZSBXQU4gZHJpdmVyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgbXVsdGlwbGUKK25ldHdvcmsgaW50ZXJmYWNlcyBhbmQgY29wZSBhcyBtdWx0aXBsZSB2aXJ0dWFsIGNpcmN1aXRzIGNvbWUgaW50byBleGlzdGVuY2UKK2FuZCBnbyBhd2F5IGR5bmFtaWNhbGx5LgorIAorTGFzdCwgYnV0IG5vdCBsZWFzdCwgV0FOIGNvbmZpZ3VyYXRpb24gaXMgbXVjaCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0IG9mIHNheQorRXRoZXJuZXQgYW5kIG1heSB3ZWxsIGFtb3VudCB0byBzZXZlcmFsIGRvemVucyBvZiBwYXJhbWV0ZXJzLiAgU29tZSBvZiB0aGVtCithcmUgImxpbmstd2lkZSIgIHdoaWxlIG90aGVycyBhcmUgdmlydHVhbCBjaXJjdWl0LXNwZWNpZmljLiAgVGhlIHNhbWUgaG9sZHMKK3RydWUgZm9yIFdBTiBzdGF0aXN0aWNzIHdoaWNoIGlzIGJ5IGZhciBtb3JlIGV4dGVuc2l2ZSBhbmQgZXh0cmVtZWx5IHVzZWZ1bAord2hlbiB0cm91Ymxlc2hvb3RpbmcgV0FOIGNvbm5lY3Rpb25zLiAgRXh0ZW5kaW5nIHRoZSBpZmNvbmZpZyB1dGlsaXR5IHRvIHN1aXQKK3RoZXNlIG5lZWRzIG1heSBiZSBwb3NzaWJsZSwgYnV0IGRvZXMgbm90IHNlZW0gcXVpdGUgcmVhc29uYWJsZS4gIFRoZXJlZm9yZSwgYQorV0FOIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyJ3MgaW50ZXJmYWNlCitpcyBuZWVkZWQgZm9yIHRoaXMgcHVycG9zZS4KKworTW9zdCBvZiB0aGVzZSBwcm9ibGVtcyBhcmUgdGFrZW4gY2FyZSBvZiBieSB0aGlzIG1vZHVsZS4gIEl0cyBnb2FsIGlzIHRvCitwcm92aWRlIGEgdXNlciB3aXRoIG1vcmUtb3ItbGVzcyBzdGFuZGFyZCBsb29rIGFuZCBmZWVsIGZvciBhbGwgV0FOIGRldmljZXMgYW5kCithc3Npc3QgYSBXQU4gZGV2aWNlIGRyaXZlciB3cml0ZXIgYnkgcHJvdmlkaW5nIGNvbW1vbiBzZXJ2aWNlcywgc3VjaCBhczoKKworIG8gVXNlci1sZXZlbCBpbnRlcmZhY2UgdmlhIC9wcm9jIGZpbGUgc3lzdGVtCisgbyBDZW50cmFsaXplZCBjb25maWd1cmF0aW9uCisgbyBEZXZpY2UgbWFuYWdlbWVudCAoc2V0dXAsIHNodXRkb3duLCBldGMuKQorIG8gTmV0d29yayBpbnRlcmZhY2UgbWFuYWdlbWVudCAoZHluYW1pYyBjcmVhdGlvbi9kZXN0cnVjdGlvbikKKyBvIFByb3RvY29sIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbgorCitUbyBiYSBhYmxlIHRvIHVzZSB0aGUgTGludXggV0FOIFJvdXRlciB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBXQU4gVG9vbHMgcGFja2FnZQorYXZhaWxhYmxlIGZyb20KKworCWZ0cC5zYW5nb21hLmNvbS9wdWIvbGludXgvY3VycmVudF93YW5waXBlL3dhbnBpcGUtWC5ZLloudGd6CisKK3doZXJlIHZYLlkuWiByZXByZXNlbnQgdGhlIHdhbnBpcGUgdmVyc2lvbiBudW1iZXIuCisKK0ZvciB0ZWNobmljYWwgcXVlc3Rpb25zIGFuZC9vciBjb21tZW50cyBwbGVhc2UgZS1tYWlsIHRvIG5jb3JiaWNAc2FuZ29tYS5jb20uCitGb3IgZ2VuZXJhbCBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiBieQorCisJSG90bGluZToJMS04MDAtMzg4LTI0NzUJKFVTQSBhbmQgQ2FuYWRhLCB0b2xsIGZyZWUpCisJUGhvbmU6CQkoOTA1KSA0NzQtMTk5MCAgZXh0OiAxMDYKKwlGYXg6CQkoOTA1KSA0NzQtOTIyMworCUUtbWFpbDoJCWRtQHNhbmdvbWEuY29tCShEYXZpZCBNYW5kZWxzdGFtKQorCVdXVzoJCWh0dHA6Ly93d3cuc2FuZ29tYS5jb20KKworCitJTlNUQUxMQVRJT04KKworUGxlYXNlIHJlYWQgdGhlIFdhbnBpcGVGb3JMaW51eC5wZGYgbWFudWFsIG9uIGhvdyB0byAKK2luc3RhbGwgdGhlIFdBTlBJUEUgdG9vbHMgYW5kIGRyaXZlcnMgcHJvcGVybHkuIAorCisKK0FmdGVyIGluc3RhbGxpbmcgd2FucGlwZSBwYWNrYWdlOiAvdXNyL2xvY2FsL3dhbnJvdXRlci9kb2MuIAorT24gdGhlIGZ0cC5zYW5nb21hLmNvbSA6IC9saW51eC9jdXJyZW50X3dhbnBpcGUvZG9jCisKKworQ09QWVJJR0hUIEFORCBMSUNFTlNJTkcgSU5GT1JNQVRJT04KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAordGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzCitBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCisKK0FDS05PV0xFREdFTUVOVFMKKworVGhpcyBwcm9kdWN0IGlzIGJhc2VkIG9uIHRoZSBXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBSb3V0ZXIgZGV2ZWxvcGVkCitieSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIGZvciBMaW51eCAyLjAueCBhbmQgMi4yLnguICBTdWNjZXNzIG9mIHRoZSBXQU5QSVBFCit0b2dldGhlciB3aXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgTGludXgga2VybmVsIGluIHN1bW1lciAxOTk2IGNvbW1hbmRlZAorYWRlcXVhdGUgY2hhbmdlcyB0byB0aGUgV0FOUElQRSBjb2RlIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgbmV3IExpbnV4CitmZWF0dXJlcy4KKworSW5zdGVhZCBvZiBjb250aW51aW5nIGRldmVsb3BpbmcgcHJvcHJpZXRhcnkgaW50ZXJmYWNlIHRpZWQgdG8gU2FuZ29tYSBXQU4KK2NhcmRzLCB3ZSBkZWNpZGVkIHRvIHNlcGFyYXRlIGFsbCBoYXJkd2FyZS1pbmRlcGVuZGVudCBjb2RlIGludG8gYSBzZXBhcmF0ZQorbW9kdWxlIGFuZCBkZWZpbmVkIHR3byBsZXZlbHMgb2YgaW50ZXJmYWNlcyAtIG9uZSBmb3IgdXNlci1sZXZlbCBhcHBsaWNhdGlvbnMKK2FuZCBhbm90aGVyIGZvciBrZXJuZWwtbGV2ZWwgV0FOIGRyaXZlcnMuICBXQU5QSVBFIGlzIG5vdyBpbXBsZW1lbnRlZCBhcyBhCitXQU4gZHJpdmVyIGNvbXBsaWFudCB3aXRoIHRoZSBXQU4gTGluayBEcml2ZXIgaW50ZXJmYWNlLiAgQWxzbyBhIGdlbmVyYWwKK3B1cnBvc2UgV0FOIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgYSBzZXQgb2Ygc2hlbGwgc2NyaXB0cyB3YXMgZGV2ZWxvcGVkIHRvIAorc3VwcG9ydCBXQU4gcm91dGVyIGF0IHRoZSB1c2VyIGxldmVsLgorCitNYW55IHVzZWZ1bCBpZGVhcyBjb25jZXJuaW5nIGhhcmR3YXJlLWluZGVwZW5kZW50IGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbgord2VyZSBnaXZlbiBieSBNaWtlIE1jTGFnYW4gPG1pa2UubWNsYWdhbkBsaW51eC5vcmc+IGFuZCBoaXMgaW1wbGVtZW50YXRpb24KK29mIHRoZSBGcmFtZSBSZWxheSByb3V0ZXIgYW5kIGRyaXZlcnMgZm9yIFNhbmdvbWEgY2FyZHMgKGRsY2kvc2RsYSkuCisKK1dpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJcyBiZWluZyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgV0FOUElQRSwKK2Egc3BlY2lhbCB0aGFuayBnb2VzIHRvIEFsYW4gQ294IGluIHByb3ZpZGluZyBpbnNpZ2h0IGludG8gQlNEIHNvY2tldHMuCisKK1NwZWNpYWwgdGhhbmtzIHRvIGFsbCB0aGUgV0FOUElQRSB1c2VycyB3aG8gcGVyZm9ybWVkIGZpZWxkLXRlc3RpbmcsIHJlcG9ydGVkCitidWdzIGFuZCBtYWRlIHZhbHVhYmxlIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyB0aGF0IGhlbHAgdXMgdG8gaW1wcm92ZSB0aGlzCitwcm9kdWN0LgorCisKKworTkVXIElOIFRISVMgUkVMRUFTRQorCisJbyBVcGRhdGVkIHRoZSBXQU5DRkcgdXRpbGl0eQorCQlDYWxscyB0aGUgcHBwY29uZmlnIHRvIGNvbmZpZ3VyZSB0aGUgUFBQRAorCQlmb3IgYXN5bmMgY29ubmVjdGlvbnMuCisKKwlvIEFkZGVkIHRoZSBQUFBDT05GSUcgdXRpbGl0eQorCQlVc2VkIHRvIGNvbmZpZ3VyZSB0aGUgUFBQRCBkYW1lb24gZm9yIHRoZQorCQlXQU5QSVBFIEFzeW5jIFBQUCBhbmQgc3RhbmRhcmQgc2VyaWFsIHBvcnQuCisJCVRoZSB3YW5jZmcgY2FsbHMgdGhlIHBwcGNvbmZpZyB0byBjb25maWd1cmUKKwkJdGhlIHBwcGQuCisKKwlvIEZpeGVkIHRoZSBQQ0kgYXV0b2RldGVjdCBmZWF0dXJlLiAgCisJCVRoZSBTTE9UIDAgd2FzIHVzZWQgYXMgYW4gYXV0b2RldGVjdCBvcHRpb24KKwkJaG93ZXZlciwgc29tZSBoaWdoIGVuZCBQQydzIHNsb3QgbnVtYmVycyBzdGFydAorCQlmcm9tIDAuIAorCisJbyBUaGlzIHJlbGVhc2UgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlIG5ldyBiYWNrdXBkCisJICBkYWVtb24gcmVsZWFzZS4KKwkKKworUFJPRFVDVCBDT01QT05FTlRTIEFORCBSRUxBVEVEIEZJTEVTCisKKy9ldGM6IChvciB1c2VyIGRlZmluZWQpCisJd2FucGlwZTEuY29uZglkZWZhdWx0IHJvdXRlciBjb25maWd1cmF0aW9uIGZpbGUKKworL2xpYi9tb2R1bGVzL1guWS5aL21pc2M6CisJd2Fucm91dGVyLm8Jcm91dGVyIGtlcm5lbCBsb2FkYWJsZSBtb2R1bGUKKwlhZl93YW5waXBlLm8Jd2FucGlwZSBhcGkgc29ja2V0IG1vZHVsZQorCisvbGliL21vZHVsZXMvWC5ZLlovbmV0OgorCXNkbGFkcnYubwlTYW5nb21hIFNETEEgc3VwcG9ydCBtb2R1bGUKKwl3YW5waXBlLm8JU2FuZ29tYSBXQU5QSVBFKHRtKSBkcml2ZXIgbW9kdWxlCisKKy9wcm9jL25ldC93YW5yb3V0ZXIKKwlDb25maWcJCXJlYWRzIGN1cnJlbnQgcm91dGVyIGNvbmZpZ3VyYXRpb24KKwlTdGF0dXMJCXJlYWRzIGN1cnJlbnQgcm91dGVyIHN0YXR1cworCXtuYW1lfQkJcmVhZHMgV0FOIGRyaXZlciBzdGF0aXN0aWNzCisKKy91c3Ivc2JpbjoKKwl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIHNjcmlwdAorCXdhbmNvbmZpZwl3YW5yb3V0ZXIgY29uZmlndXJhdGlvbiB1dGlsaXR5CisJc2RsYWR1bXAJV0FOUElQRSBhZGFwdGVyIG1lbW9yeSBkdW1wIHV0aWxpdHkKKyAgICAgICAgZnBpcGVtb24gICAgICAgIE1vbml0b3IgZm9yIEZyYW1lIFJlbGF5CisgICAgICAgIGNwaXBlbW9uICAgICAgICBNb25pdG9yIGZvciBDaXNjbyBIRExDCisJcHBpcGVtb24gCU1vbml0b3IgZm9yIFBQUAorCXhwaXBlbW9uIAlNb25pdG9yIGZvciBYMjUKKwl3cGtiZG1vbiAgICAgICAgV0FOUElQRSBrZXlib2FyZCBsZWQgbW9uaXRvci9kZWJ1Z2dlcgorCisvdXNyL2xvY2FsL3dhbnJvdXRlcjoKKwlSRUFETUUJCXRoaXMgZmlsZQorCUNPUFlJTkcJCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJU2V0dXAJCWluc3RhbGxhdGlvbiBzY3JpcHQKKwlGaWxlbGlzdAlkaXN0cmlidXRpb24gZGVmaW5pdGlvbiBmaWxlCisJd2Fucm91dGVyLnJjCW1ldGEtY29uZmlndXJhdGlvbiBmaWxlIAorCQkJKHVzZWQgYnkgdGhlIFNldHVwIGFuZCB3YW5yb3V0ZXIgc2NyaXB0KQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9kb2M6CisJd2FucGlwZUZvckxpbnV4LnBkZiAJV0FOIFJvdXRlciBVc2VyJ3MgTWFudWFsCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3BhdGNoZXM6CisJd2Fucm91dGVyLXYyMjEzLmd6ICAJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbHMgMi4yLjExIHVwIHRvIDIuMi4xMy4KKwl3YW5yb3V0ZXItdjIyMTQuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjIuMTQuIAorCXdhbnJvdXRlci12MjIxNS5neglwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTUgdG8gMi4yLjE3LgorCXdhbnJvdXRlci12MjIxOC5neglwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTggYW5kIHVwLgorCXdhbnJvdXRlci12MjQwLmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi40LjAuICAKKwl3YW5yb3V0ZXItdjI0Mi5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuNC4yIGFuZCB1cC4KKwl3YW5yb3V0ZXItdjIwMzQuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjAuMzQKKwl3YW5yb3V0ZXItdjIwMzYuZ3ogCXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi4wLjM2IGFuZCB1cC4gCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3BhdGNoZXMva2RyaXZlcnM6CisJU291cmNlcyBvZiB0aGUgbGF0ZXN0IFdBTlBJUEUgZGV2aWNlIGRyaXZlcnMuCisJVGhlc2UgYXJlIHVzZWQgdG8gVVBHUkFERSB0aGUgbGludXgga2VybmVsIHRvIHRoZSBuZXdlc3QKKwl2ZXJzaW9uIGlmIHRoZSBrZXJuZWwgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gcGF0aGNlZCB3aXRoCisJV0FOUElQRSBkcml2ZXJzLgorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9zYW1wbGVzOgorCWludGVyZmFjZQlzYW1wbGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZmlsZQorCXdhbnBpcGUxLmNwcmkgCUNIRExDIHByaW1hcnkgcG9ydAorICAgICAJd2FucGlwZTIuY3NlYyAJQ0hETEMgc2Vjb25kYXJ5IHBvcnQKKyAgICAgCXdhbnBpcGUxLmZyICAgCUZyYW1lIFJlbGF5IHByb3RvY29sCisgICAgIAl3YW5waXBlMS5wcHAgIAlQUFAgcHJvdG9jb2wgKSAKKwl3YW5waXBlMS5hc3kJQ0hETEMgQVNZTkMgcHJvdG9jb2wKKwl3YW5waXBlMS54MjUJWDI1IHByb3RvY29sCisJd2FucGlwZTEuc3R0eQlTeW5jIFRUWSBkcml2ZXIgKFVzZWQgYnkgS2VybmVsIFBQUEQgZGFlbW9uKQorCXdhbnBpcGUxLmF0dHkJQXN5bmMgVFRZIGRyaXZlciAoVXNlZCBieSBLZXJuZWwgUFBQRCBkYWVtb24pCisJd2Fucm91dGVyLnJjCXNhbXBsZSBtZXRhLWNvbmZpZ3VyYXRpb24gZmlsZQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci91dGlsOgorCSoJCXdhbi10b29scyB1dGlsaXRpZXMgc291cmNlIGNvZGUKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL3gyNToKKwkqCQl4MjUgYXBpIHNhbXBsZSBwcm9ncmFtcy4KKy91c3IvbG9jYWwvd2Fucm91dGVyL2FwaS9jaGRsYzoKKwkqCQljaGRsYyBhcGkgc2FtcGxlIHByb2dyYW1zLgorL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL2ZyOgorCSoJCWZyIGFwaSBzYW1wbGUgcHJvZ3JhbXMuCisvdXNyL2xvY2FsL3dhbnJvdXRlci9jb25maWcvd2FuY2ZnOgorCXdhbmNmZwkJV0FOUElQRSBHVUkgY29uZmlndXJhdGlvbiBwcm9ncmFtLgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyB3YW5waXBlIy5jb25mIGZpbGVzLiAKKy91c3IvbG9jYWwvd2Fucm91dGVyL2NvbmZpZy9jZmdmdDE6CisJY2ZnZnQxCQlHVUkgQ1NVL0RTVSBjb25maWd1cmF0aW9uIHByb2dyYW0uCisKKy91c3IvaW5jbHVkZS9saW51eDoKKwl3YW5yb3V0ZXIuaAlyb3V0ZXIgQVBJIGRlZmluaXRpb25zCisJd2FucGlwZS5oCVdBTlBJUEUgQVBJIGRlZmluaXRpb25zCisJc2RsYWRydi5oCVNETEEgc3VwcG9ydCBtb2R1bGUgQVBJIGRlZmluaXRpb25zCisJc2RsYXNmbS5oCVNETEEgZmlybXdhcmUgbW9kdWxlIGRlZmluaXRpb25zCisJaWZfd2FucGlwZS5oCVdBTlBJUEUgU29ja2V0IGRlZmluaXRpb25zCisJaWZfd2FucGlwZV9jb21tb24uaAlXQU5QSVBFIFNvY2tldC9Ecml2ZXIgY29tbW9uIGRlZmluaXRpb25zLgorCXNkbGFwY2kuaAlXQU5QSVBFIFBDSSBkZWZpbml0aW9ucworCQorCisvdXNyL3NyYy9saW51eC9uZXQvd2Fucm91dGVyOgorCSoJCXdhbnJvdXRlciBzb3VyY2UgY29kZQorCisvdmFyL2xvZzoKKwl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIGxvZyAoY3JlYXRlZCBieSB0aGUgU2V0dXAgc2NyaXB0KQorCisvdmFyL2xvY2s6ICAob3IgL3Zhci9sb2NrL3N1YnN5cyBmb3IgUmVkSGF0KQorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgbG9jayBmaWxlIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL2Zpcm13YXJlOgorCWZyNTE0LnNmbQlGcmFtZSByZWxheSBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAorCWNkdWFsNTE0LnNmbQlEdWFsIFBvcnQgQ2lzY28gSERMQyBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAorCXBwcDUxNC5zZm0gICAgICBQUFAgRmlybXdhcmUgZm9yIFNhbmdvbWEgUzUwOCBhbmQgUzUxNCBjYXJkcworCXgyNV81MDguc2ZtCVgyNSBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGNhcmQuCisKKworUkVWSVNJT04gSElTVE9SWQorCisxLjAuMAlEZWNlbWJlciAzMSwgMTk5NglJbml0aWFsIHZlcnNpb24KKworMS4wLjEJSmFudWFyeSAzMCwgMTk5NwlTdGF0dXMgYW5kIHN0YXRpc3RpY3MgY2FuIGJlIHJlYWQgdmlhIC9wcm9jCisJCQkJZmlsZXN5c3RlbSBlbnRyaWVzLgorCisxLjAuMiAgIEFwcmlsIDMwLCAxOTk3ICAgICAgICAgIEFkZGVkIFVEUCBtYW5hZ2VtZW50IHZpYSBtb25pdG9ycy4KKworMS4wLjMJSnVuZSAzLCAxOTk3CQlVRFAgbWFuYWdlbWVudCBmb3IgbXVsdGlwbGUgYm9hcmRzIHVzaW5nIEZyYW1lCisJCQkJUmVsYXkgYW5kIFBQUAorCQkJCUVuYWJsZWQgY29udGludW91cyB0cmFuc21pc3Npb24gb2YgQ29uZmlndXJlIAorCQkJCVJlcXVlc3QgUGFja2V0IGZvciBQUFAgKGZvciA1MDggb25seSkKKwkJCQlDb25uZWN0aW9uIFRpbWVvdXQgZm9yIFBQUCBjaGFuZ2VkIGZyb20gOTAwIHRvIDAKKwkJCQlGbG93IENvbnRyb2wgUHJvYmxlbSBmaXhlZCBmb3IgRnJhbWUgUmVsYXkKKworMS4wLjQJSnVseSAxMCwgMTk5NwkJUzUwOC9GVDEgbW9uaXRvcmluZyBjYXBhYmlsaXR5IGluIGZwaXBlbW9uIGFuZAorCQkJCXBwaXBlbW9uIHV0aWxpdGllcy4KKwkJCQlDb25maWd1cmFibGUgVFRMIGZvciBVRFAgcGFja2V0cy4KKwkJCQlNdWx0aWNhc3QgYW5kIEJyb2FkY2FzdCBJUCBzb3VyY2UgYWRkcmVzc2VzIGFyZQorCQkJCXNpbGVudGx5IGRpc2NhcmRlZC4KKworMS4wLjUJSnVseSAyOCwgMTk5NwkJQ29uZmlndXJhYmxlIFQzOTEsVDM5MixOMzkxLE4zOTIsTjM5MyBmb3IgRnJhbWUKKwkJCQlSZWxheSBpbiByb3V0ZXIuY29uZi4KKwkJCQlDb25maWd1cmFibGUgTWVtb3J5IEFkZHJlc3MgdGhyb3VnaCByb3V0ZXIuY29uZiAKKwkJCQlmb3IgRnJhbWUgUmVsYXksIFBQUCBhbmQgWC4yNS4gKGNvbW1lbnRpbmcgdGhpcworIAkJCQlvdXQgZW5hYmxlcyBhdXRvLWRldGVjdGlvbikuCisJCQkJRml4ZWQgZnJlZWluZyB1cCByZWNlaXZlZCBidWZmZXJzIHVzaW5nIGtmcmVlKCkKKyAJCQkJZm9yIEZyYW1lIFJlbGF5IGFuZCBYLjI1LgorCQkJCVByb3RlY3Qgc2RsYV9wZWVrKCkgYnkgY2FsbGluZyBzYXZlX2ZsYWdzKCksCisJCQkJY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKS4KKwkJCQlDaGFuZ2VkIG51bWJlciBvZiBUcmFjZSBlbGVtZW50cyBmcm9tIDMyIHRvIDIwCisJCQkJQWRkZWQgRExDSSBzcGVjaWZpYyBkYXRhIG1vbml0b3JpbmcgaW4gRlBJUEVNT04uIAorMi4wLjAJTm92IDA3LCAxOTk3CQlJbXBsZW1lbnRlZCBwcm90ZWN0aW9uIG9mIFJBQ0UgY29uZGl0aW9ucyBieSAKKwkJCQljcml0aWNhbCBmbGFncyBmb3IgRlJBTUUgUkVMQVkgYW5kIFBQUC4KKwkJCQlETENJIExpc3QgaW50ZXJydXB0IG1vZGUgaW1wbGVtZW50ZWQuCisJCQkJSVBYIHN1cHBvcnQgaW4gRlJBTUUgUkVMQVkgYW5kIFBQUC4KKwkJCQlJUFggU2VydmVyIFN1cHBvcnQgKE1BUlMpCisJCQkJTW9yZSBkcml2ZXIgc3BlY2lmaWMgc3RhdHMgaW5jbHVkZWQgaW4gRlBJUEVNT04KKwkJCQlhbmQgUElQRU1PTi4KKworMi4wLjEJTm92IDI4LCAxOTk3CQlCdWcgRml4ZXMgZm9yIHZlcnNpb24gMi4wLjAuCisJCQkJUHJvdGVjdGlvbiBvZiAiZW5hYmxlX2lycSgpIiB3aGlsZSAKKwkJCQkiZGlzYWJsZV9pcnEoKSIgaGFzIGJlZW4gZW5hYmxlZCBmcm9tIGFueSBvdGhlcgorCQkJCXJvdXRpbmUgKGZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYMjUpLgorCQkJCUFkZGVkIGFkZGl0aW9uYWwgU3RhdHMgZm9yIEZwaXBlbW9uIGFuZCBQcGlwZW1vbgorCQkJCUltcHJvdmVkIExvYWQgU2hhcmluZyBmb3IgbXVsdGlwbGUgYm9hcmRzCisKKzIuMC4yCURlYyAwOSwgMTk5NwkJU3VwcG9ydCBmb3IgUEFQIGFuZCBDSEFQIGZvciBwcHAgaGFzIGJlZW4KKwkJCQlpbXBsZW1lbnRlZC4KKworMi4wLjMJQXVnIDE1LCAxOTk4CQlOZXcgcmVsZWFzZSBzdXBwb3J0aW5nIENpc2NvIEhETEMsIENJUiBmb3IgRnJhbWUKKwkJCQlyZWxheSwgRHluYW1pYyBJUCBhc3NpZ25tZW50IGZvciBQUFAgYW5kIEludmVyc2UKKwkJCQlBcnAgc3VwcG9ydCBmb3IgRnJhbWUtcmVsYXkuICBNYW4gUGFnZXMgYXJlIAorCQkJCWluY2x1ZGVkIGZvciBiZXR0ZXIgc3VwcG9ydCBhbmQgYSBuZXcgdXRpbGl0eQorCQkJCWZvciBjb25maWd1cmluZyBGVDEgY2FyZHMuCisKKzIuMC40CURlYyAwOSwgMTk5OAkgICAgICAgIER1YWwgUG9ydCBzdXBwb3J0IGZvciBDaXNjbyBIRExDLgorCQkJCVN1cHBvcnQgZm9yIEhETEMgKExBUEIpIEFQSS4KKwkJCQlTdXBwb3J0cyBCaVN5bmMgU3RyZWFtaW5nIGNvZGUgZm9yIFM1MDJFIAorCQkJCWFuZCBTNTAzIGNhcmRzLgorCQkJCVN1cHBvcnQgZm9yIFN0cmVhbWluZyBIRExDIEFQSS4KKwkJCQlQcm92aWRlcyBhIEJTRCBzb2NrZXQgaW50ZXJmYWNlIGZvciAKKwkJCQljcmVhdGluZyBhcHBsaWNhdGlvbnMgdXNpbmcgQmlTeW5jCisgICAJCQkJc3RyZWFtaW5nLiAgICAgICAgCisKKzIuMC41ICAgQXVnIDA0LCAxOTk5IAkJQ0hETEMgaW5pdGlhbGl6YXRpbiBidWcgZml4LgorCQkJCVBQUCBpbnRlcnJ1cHQgZHJpdmVuIGRyaXZlcjogCisgIAkJCQlGaXggdG8gdGhlIFBQUCBsaW5lIGhhbmd1cCBwcm9ibGVtLgorCQkJCU5ldyBQUFAgZmlybXdhcmUKKwkJCQlBZGRlZCBjb21tZW50cyB0byB0aGUgc3RhcnR1cCBTWVNURU0gRVJST1IgbWVzc2FnZXMKKwkJCQlYcGlwZW1vbiBkZWJ1Z2dpbmcgYXBwbGljYXRpb24gZm9yIHRoZSBYMjUgcHJvdG9jb2wKKwkJCQlOZXcgVVNFUl9NQU5VQUwudHh0CisJCQkJRml4ZWQgdGhlIG9kZCBib3VuZGFyeSA0Ynl0ZSB3cml0ZXMgdG8gdGhlIGJvYXJkLgorCQkJCUJpU3luYyBTdHJlYW1pbmcgY29kZSBoYXMgYmVlbiB0YWtlbiBvdXQuICAKKwkJCQkgQXZhaWxhYmxlIGFzIGEgcGF0Y2guCisJCQkJU3RyZWFtaW5nIEhETEMgQVBJIGhhcyBiZWVuIHRha2VuIG91dC4gIAorCQkJCSBBdmFpbGFibGUgYXMgYSBwYXRjaC4gICAgICAgICAgICAgICAgIAorCisyLjAuNiAgIEF1ZyAxNywgMTk5OQkJSW5jcmVhc2VkIGRlYnVnZ2luZyBpbiBzdGF0dXAgc2NyaXB0cworCQkJCUZpeGVkIGluc2FsbGF0aW9uIGJ1Z3MgZnJvbSAyLjAuNQorCQkJCUtlcm5lbCBwYXRjaCB3b3JrcyBmb3IgYm90aCAyLjIuMTAgYW5kIDIuMi4xMSBrZXJuZWxzLgorCQkJCVRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcGFja2FnZXMgICAgICAgICAKKworMi4wLjcgICBBdWcgMjYsIDE5OTkJCW8gIE1lcmdlZCBYMjVBUEkgY29kZSBpbnRvIFdBTlBJUEUuCisJCQkJbyAgRml4ZWQgYSBtZW1lb3J5IGxlYWsgZm9yIFgyNUFQSQorCQkJCW8gIFVwZGF0ZWQgdGhlIFgyNUFQSSBjb2RlIGZvciAyLjIuWCBrZXJuZWxzLgorCQkJCW8gIEltcHJvdmVkIE5FTSBoYW5kbGluZy4gICAKKworMi4xLjAJT2N0IDI1LCAxOTk5CQlvIE5ldyBjb2RlIGZvciBTNTE0IFBDSSBDYXJkCisJCQkJbyBOZXcgQ0hETEMgYW5kIEZyYW1lIFJlbGF5IGRyaXZlcnMKKwkJCQlvIFBQUCBhbmQgWDI1IGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcmVsZWFzZSAgICAKKworMi4xLjEJTm92IDMwLCAxOTk5CQlvIFBQUCBzdXBwb3J0IGZvciBTNTE0IFBDSSBDYXJkcworCisyLjEuMyAgIEFwciAwNiwgMjAwMAkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIAorCQkJCW8gU29ja2V0IGJhc2VkIGNoZGxjIGFwaQorCQkJCW8gU29ja2V0IGJhc2VkIGZyIGFwaQorCQkJCW8gRHVhbCBQb3J0IFJlY2VpdmUgb25seSBDSERMQyBzdXBwb3J0LgorCQkJCW8gQXN5bmNocm9ub3VzIENIRExDIHN1cHBvcnQgKFNlY29uZGFyeSBQb3J0KQorCQkJCW8gY2ZnZnQxIEdVSSBjc3UvZHN1IGNvbmZpZ3VyYXRvcgorCQkJCW8gd2FuY2ZnIEdVSSBjb25maWd1cmF0aW9uIGZpbGUgCisJCQkJICBjb25maWd1cmF0b3IuCisJCQkJbyBBcmNoaXRlY3R1YWwgZGlyZWN0b3J5IGNoYW5nZXMuCisKK2JldGEtMi4xLjQgSnVsIDIwMDAJCW8gRHluYW1pYyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbjoKKwkJCQkJTmV0d29yayBpbnRlcmZhY2VzIHJlZmxlY3QgdGhlIHN0YXRlCisJCQkJCW9mIHByb3RvY29sIGxheWVyLiAgSWYgdGhlIHByb3RvY29sIGJlY29tZXMKKwkJCQkJZGlzY29ubmVjdGVkLCBkcml2ZXIgd2lsbCBicmluZyBkb3duCisJCQkJCXRoZSBpbnRlcmZhY2UuICBPbmNlIHRoZSBwcm90b2NvbCByZWNvbm5lY3RzCisJCQkJCXRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBicm91Z2h0IHVwLiAKKwkJCQkJCisJCQkJCU5vdGU6IFRoaXMgb3B0aW9uIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdC4KKworCQkJCW8gRHluYW1pYyB3YW5yb3V0ZXIgc2V0dXAgdXNpbmcgJ3dhbmNvbmZpZyc6CisJCQkJCXdhbmNvbmZpZyB1dGlsaXR5IGNhbiBiZSB1c2VkIHRvCisJCQkJCXNodXRkb3duLHJlc3RhcnQsc3RhcnQgb3IgcmVjb25maWd1cmUgCisJCQkJCWEgdmlydHVhbCBjaXJjdWl0IGR5bmFtaWNhbGx5LgorCQkJCSAgICAgCisJCQkJCUZyYW1lIFJlbGF5OiAgRWFjaCBETENJIGNhbiBiZTogCisJCQkJCQkgICAgICBjcmVhdGVkLHN0b3BwZWQscmVzdGFydGVkIGFuZCByZWNvbmZpZ3VyZWQKKwkJCQkJCSAgICAgIGR5bmFtaWNhbGx5IHVzaW5nIHdhbmNvbmZpZy4KKwkJCQkJCisJCQkJCQkgICAgICBleDogd2FuY29uZmlnIGNhcmQgd2FucGlwZTEgZGV2IHdwMV9mcjE2IHVwCisJCQkJICAKKwkJCQlvIFdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzOgorCQkJCQl3YW5jb25maWcgYWxzbyBzdXBwb3J0cyB3YW5yb3V0ZXIgc3RhcnR1cCB2aWEgY29tbWFuZCBsaW5lCisJCQkJCWFyZ3VtZW50cy4gIFRodXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY3JlYXRlIGEgd2FucGlwZSMuY29uZgorCQkJCQljb25maWd1cmF0aW9uIGZpbGUuICAKKworCQkJCW8gU29ja2V0IGJhc2VkIHgyNWFwaSB1cGRhdGUvYnVnIGZpeGVzLgorCQkJCQlBZGRlZCBzdXBwb3J0IGZvciBMQ04gbnVtYmVycyBncmVhdGVyIHRoYW4gMjU1LgorCQkJCQlPcHRpb24gdG8gcGFzcyB1cCBtb2RlbSBtZXNzYWdlcy4KKwkJCQkJUHJvdmlkZWQgYSBQQ0kgSVJRIGNoZWNrLCBzbyBhIHNpbmdsZSBTNTE0CisJCQkJCWNhcmQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgbm9uLXNoYXJpbmcgaW50ZXJydXB0LgorCisJCQkJbyBGaXhlcyB0byB0aGUgd2FuY2ZnIHV0aWxpdHkuCisJCQkJbyBOZXcgRlQxIGRlYnVnZ2luZyBzdXBwb3J0IHZpYSAqcGlwZW1vbiB1dGlsaXRpZXMuCisJCQkJbyBGcmFtZSBSZWxheSBBUlAgc3VwcG9ydCBFbmFibGVkLgorCitiZXRhMy0yLjEuNCBKdWwgMjAwMAkJbyBYMjUgTV9CSVQgUHJvYmxlbSBmaXguCisJCQkJbyBBZGRlZCB0aGUgTXVsdGktUG9ydCBQUFAKKwkJCQkgIFVwZGF0ZWQgdXRpbGl0ZXMgZm9yIHRoZSBNdWx0aS1Qb3J0IFBQUC4KKworMi4xLjQJQXV0IDIwMDAKKwkJCQlvIEluIFgyNUFQSToKKwkJCQkJTWF4aW11bSBwYWNrZXQgYW4gYXBwbGljYXRpb24gY2FuIHNlbmQKKwkJCQkJdG8gdGhlIGRyaXZlciBoYXMgYmVlbiBleHRlbmRlZCB0byA0MDk2IGJ5dGVzLgorCisJCQkJCUZpeGVkIHRoZSB4MjUgc3RhcnR1cCBidWcuIEVuYWJsZSAKKwkJCQkJY29tbXVuaWNhdGlvbnMgb25seSBhZnRlciBhbGwgaW50ZXJmYWNlcworCQkJCQljb21lIHVwLiAgSElHSCBTVkMvUFZDIGlzIHVzZWQgdG8gY2FsY3VsYXRlCisJCQkJCXRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCisJCQkJCUVuYWJsZSBwcm90b2NvbCBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCisJCQkJCWFyZSBlbmFibGVkLgorCisJCQkJbyBBZGRlZCBhbiBleHRyYSBzdGF0ZSB0byB0aGUgRlQxIGNvbmZpZywga2VybmVsIG1vZHVsZS4KKwkJCQlvIFVwZGF0ZWQgdGhlIHBpcGVtb24gZGVidWdnZXJzLgorCisJCQkJbyBCbG9ja2VkIHRoZSBNdWx0aS1Qb3J0IFBQUCBmcm9tIHJ1bm5pbmcgb24ga2VybmVscworCQkJCSAgMi4yLjE2IG9yIGdyZWF0ZXIsIGR1ZSB0byBzeW5jcHBwIGtlcm5lbCBtb2R1bGUKKwkJCQkgIGNoYW5nZS4gCisJICAKK2JldGExLTIuMS41IAlOb3YgMTUgMjAwMAorCQkJCW8gRml4ZWQgdGhlIE11bGl0UG9ydCBQUFAgU3VwcG9ydCBmb3Iga2VybmVscyAyLjIuMTYgYW5kIGFib3ZlLgorCQkJCSAgMi4yLlgga2VybmVscyBvbmx5CisKKwkJCQlvIFNlY3VyZWQgdGhlIGRyaXZlciBVRFAgZGVidWdnaW5nIGNhbGxzCisJCQkJCS0gQWxsIGlsbGVnYWwgbmV0b3dyayBkZWJ1Z2dpbmcgY2FsbHMgYXJlIHJlcG9ydGVkIHRvCisJCQkJCSAgdGhlIGxvZy4KKwkJCQkJLSBEZWZpbmVkIGEgc2V0IG9mIGFsbG93ZWQgY29tbWFuZHMsIGFsbCBvdGhlciBkZW5pZWQuCisJCQkJCQorCQkJCW8gQ3BpcGVtb24KKwkJCQkJLSBBZGRlZCBzZXQgRlQxIGNvbW1hbmRzIHRvIHRoZSBjcGlwZW1vbi4gVGh1cyBDU1UvRFNVCisJCQkJCSAgY29uZmlndXJhaXRvbiBjYW4gYmUgcGVyZm9ybWVkIHVzaW5nIGNwaXBlbW9uLgorCQkJCQkgIEFsbCBzeXN0ZW1zIHRoYXQgY2Fubm90IHJ1biBjZmdmdDEgR1VJIHV0aWxpdHkgc2hvdWxkCisJCQkJCSAgdXNlIGNwaXBlbW9uIHRvIGNvbmZpZ3VyZSB0aGUgb24gYm9hcmQgQ1NVL0RTVS4KKworCisJCQkJbyBLZXlib2FyZCBMZWQgTW9uaXRvci9EZWJ1Z2dlcgorCQkJCQktIEEgbmV3IHV0aWx0eSAvdXNyL3NiaW4vd3BrYmRtb24gdXNlcyBrZXlib2FyZCBsZWRzCisJCQkJCSAgdG8gY29udmV5IG9wZXJhdGluYWwgc3RhdGlzdGljIGluZm9ybWF0aW9uIG9mIHRoZSAKKwkJCQkJICBTYW5nb21hIFdBTlBJUEUgY2FyZHMuCisJCQkJCU5VTV9MT0NLICAgID0gTGluZSBTdGF0ZSAgKE9uPWNvbm5lY3RlZCwgICAgT2ZmPWRpc2Nvbm5lY3RlZCkKKwkJCQkJQ0FQU19MT0NLICAgPSBUeCBkYXRhICAgICAoT249dHJhbnNtaXR0aW5nLCBPZmY9bm8gdHggZGF0YSkKKwkJCQkJU0NST0xMX0xPQ0sgPSBSeCBkYXRhICAgICAoT249cmVjZWl2aW5nLCAgICBPZmY9bm8gcnggZGF0YQorCQkJCQkKKwkJCQlvIEhhcmR3YXJlIHByb2JlIG9uIG1vZHVsZSBsb2FkIGFuZCBkeW5hbWljIGRldmljZSBhbGxvY2F0aW9uCisJCQkJCS0gRHVyaW5nIFdBTlBJUEUgbW9kdWxlIGxvYWQsIGFsbCBTYW5nb21hIGNhcmRzIGFyZSBwcm9iZWQKKwkJCQkJICBhbmQgZm91bmQgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBpbiB0aGUgL3Zhci9sb2cvbWVzc2FnZXMuCisJCQkJCS0gSWYgbm8gY2FyZHMgYXJlIGZvdW5kLCB0aGUgbW9kdWxlIGxvYWQgZmFpbHMuCisJCQkJCS0gQXBwcm9wcmlhdGUgbnVtYmVyIG9mIGRldmljZXMgYXJlIGR5bmFtaWNhbGx5IGxvYWRlZCAKKwkJCQkJICBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIFNhbmdvbWEgY2FyZHMgZm91bmQuCisKKwkJCQkJICBOb3RlOiBUaGUga2VybmVsIGNvbmZpZ3VyYWl0b24gb3B0aW9uIAorCQkJCQkJQ09ORklHX1dBTlBJUEVfQ0FSRFMgaGFzIGJlZW4gdGFrZW4gb3V0LgorCQkJCQkKKwkJCQlvIEZpeGVkIHRoZSBGcmFtZSBSZWxheSBhbmQgQ2hkbGMgbmV0d29yayBpbnRlcmZhY2VzIHNvIHRoZXkgYXJlCisJCQkJICBjb21wYXRpYmxlIHdpdGggbGlicGNhcCBsaWJyYXJpZXMuICBNZWFuaW5nLCB0Y3BkdW1wLCBzbm9ydCwKKwkJCQkgIGV0aGVyZWFsLCBhbmQgYWxsIG90aGVyIHBhY2tldCBzbmlmZmVycyBhbmQgZGVidWdnZXJzIHdvcmsgb24KKwkJCQkgIGFsbCBXQU5QSVBFIG5ldG93cmsgaW50ZXJmYWNlcy4KKwkJCQkJLSBTZXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGVuY29kaW5nIHR5cGUgdG8gQVJQSFJEX1BQUC4KKwkJCQkJICBUaGlzIHRlbGwgdGhlIHNuaWZmZXJzIHRoYXQgZGF0YSBvYnRhaW5lZCBmcm9tIHRoZQorCQkJCQkgIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGluIHB1cmUgSVAgZm9ybWF0LgorCQkJCSAgRml4IGZvciAyLjIuWCBrZXJuZWxzIG9ubHkuCisJCQkJCisJCQkJbyBUcnVlIGludGVyZmFjZSBlbmNvZGluZyBvcHRpb24gZm9yIEZyYW1lIFJlbGF5IGFuZCBDSERMQworCQkJCQktIFRoZSBhYm92ZSBmaXggc2V0cyB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcKKwkJCQkJICB0eXBlIHRvIEFSUEhSRF9QUFAsIGhvd2V2ZXIgc29tZSBjdXN0b21lcnMgdXNlCisJCQkJCSAgdGhlIGVuY29kaW5nIGludGVyZmFjZSB0eXBlIHRvIGRldGVybWluZSB0aGUKKwkJCQkJICBwcm90b2NvbCBydW5uaW5nLiAgVGhlcmVmb3JlLCB0aGUgVFVSRSBFTkNPRElORworCQkJCQkgIG9wdGlvbiB3aWxsIHNldCB0aGUgaW50ZXJmYWNlIHR5cGUgYmFjayB0byB0aGUKKwkJCQkJICBvcmlnaW5hbCB2YWx1ZS4gIAorCisJCQkJCSAgTk9URTogSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB3aXRoIEZyYW1lIFJlbGF5IGFuZCBDSERMQworCQkJCQkJbGlicGNhcCBsaWJyYXJ5IHN1cHBvcnQgd2lsbCBiZSBicm9rZW4uICAKKwkJCQkJCWkuZS4gdGNwZHVtcCB3aWxsIG5vdCB3b3JrLgorCQkJCQlGaXggZm9yIDIuMi54IEtlcm5lbHMgb25seS4KKwkJCQkJCQorCQkJCW8gRXRoZXJuZXQgQnJpZGdpbmQgb3ZlciBGcmFtZSBSZWxheQorCQkJCQktIFRoZSBGcmFtZSBSZWxheSBicmlkZ2luZyBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgCisJCQkJCSAgS3Jpc3RpYW4gSG9mZm1hbm4gYW5kIE1hcmsgV2VsbHMuICAKKwkJCQkJLSBUaGUgTGludXgga2VybmVsIGJyaWRnZSBpcyB1c2VkIHRvIHNlbmQgZXRoZXJuZXQgCisJCQkJCSAgZGF0YSBvdmVyIHRoZSBmcmFtZSByZWxheSBsaW5rcy4KKwkJCQkJRm9yIDIuMi5YIEtlcm5lbHMgb25seS4KKworCQkJCW8gQWRkZWQgZXh0ZW5zaXZlIDIuMC5YIHN1cHBvcnQuIE1vc3QgbmV3IGZlYXR1cmVzIG9mCisJCQkJICAyLjEuNSBmb3IgcHJvdG9jb2xzIEZyYW1lIFJlbGF5LCBQUFAgYW5kIENIRExDIGFyZQorCQkJCSAgc3VwcG9ydGVkIHVuZGVyIDIuMC5YIGtlcm5lbHMuIAorCitiZXRhMS0yLjIuMCAJRGVjIDMwIDIwMDAKKwkJCQlvIFVwZGF0ZWQgZHJpdmVycyBmb3IgMi40Llgga2VybmVscy4KKwkJCQlvIFVwZGF0ZWQgZHJpdmVycyBmb3IgU01QIHN1cHBvcnQuCisJCQkJbyBYMjVBUEkgaXMgbm93IGFibGUgdG8gc2hhcmUgUENJIGludGVycnVwdHMuCisJCQkJbyBUb29rIG91dCBhIGdlbmVyYWwgcG9sbGluZyByb3V0aW5lIHRoYXQgd2FzIHVzZWQKKwkJCQkgIG9ubHkgYnkgWDI1QVBJLiAKKwkJCQlvIEFkZGVkIGFwcHJvcHJpYXRlIGxvY2tzIHRvIHRoZSBkeW5hbWljIHJlY29uZmlndXJhdGlvbgorCQkJCSAgY29kZS4KKwkJCQlvIEZpeGVkIGEgYnVnIGluIHRoZSBrZXlib2FyZCBkZWJ1ZyBtb25pdG9yLgorCitiZXRhMi0yLjIuMAlKYW4gOCAyMDAxCisJCQkJbyBQYXRjaGVzIGZvciAyLjQuMCBrZXJuZWwKKwkJCQlvIFBhdGNoZXMgZm9yIDIuMi4xOCBrZXJuZWwKKwkJCQlvIE1pbm9yIHVwZGF0ZXMgdG8gUFBQIGFuZCBDSExEQyBkcml2ZXJzLgorCQkJCSAgTm90ZTogTm8gZnVuY3RpbmFsIGRpZmZlcmVuY2UuIAorCitiZXRhMy0yLjIuOQlKYW4gMTAgMjAwMQorCQkJCW8gSSBtaXNzZWQgdGhlIDIuMi4xOCBrZXJuZWwgcGF0Y2hlcyBpbiBiZXRhMi0yLjIuMAorCQkJCSAgcmVsZWFzZS4gIFRoZXkgYXJlIGluY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworU3RhYmxlIFJlbGVhc2UKKzIuMi4wCQlGZWIgMDEgMjAwMQorCQkJCW8gQnVnIGZpeCBpbiB3YW5jZmcgR1VJIGNvbmZpZ3VyYXRvci4KKwkJCQkJVGhlIGVkaXQgZnVuY3Rpb24gZGlkbid0IHdvcmsgcHJvcGVybHkuCisKKworYmF0YTEtMi4yLjEJRmViIDA5IDIwMDEKKwkJCW8gV0FOUElQRSBUVFkgRHJpdmVyIGVtdWxhdGlvbi4gCisJCQkgIFR3byBtb2RlcyBvZiBvcGVyYXRpb24gU3luYyBhbmQgQXN5bmMuCisJCQkJU3luYzogVXNpbmcgdGhlIFBQUEQgZGFlbW9uLCBrZXJuZWwgU3luY1BQUCBsYXllcgorCQkJCSAgICAgIGFuZCB0aGUgV2FucGlwZSBzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sIAorCQkJCSAgICAgIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBTYW5nb21hIGFkYXB0ZXIsIG92ZXIKKwkJCQkgICAgICBhIFQxIGxlYXNlZCBsaW5lLgorCQkJCisJCQkJICAgICAgVGhlIDIuNC4wIGtlcm5lbCBQUFAgbGF5ZXIgc3VwcG9ydHMgTVVMVElMSU5LCisJCQkJICAgICAgcHJvdG9jb2wsIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVuZGxlIGFueSBudW1iZXIgb2YgU2FuZ29tYQorCQkJCSAgICAgIGFkYXB0ZXJzIChUMSBsaW5lcykgaW50byBvbmUsIHVuZGVyIGEgc2luZ2xlIElQIGFkZHJlc3MuCisJCQkJICAgICAgVGh1cywgZWZmaWNpZW50bHkgb2J0YWluaW5nIG11bHRpcGxlIFQxIHRocm91Z2hwdXQuIAorCisJCQkJICAgICAgTk9URTogVGhlIHJlbW90ZSBzaWRlIG11c3QgYWxzbyBpbXBsZW1lbnQgTVVMVElMSU5LIFBQUAorCQkJCQkgICAgcHJvdG9jb2wuCisKKwkJCQlBc3luYzpVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBBc3luY1BQUCBsYXllcgorCQkJCSAgICAgIGFuZCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyOiBhIFBQUCBwcm90b2NvbAorCQkJCSAgICAgIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBTYW5nb21hIGFkYXB0ZXIgYW5kCisJCQkJICAgICAgYSBtb2RlbSwgb3ZlciBhIHRlbGVwaG9uZSBsaW5lLgorCisJCQkJICAgICAgVGh1cywgdGhlIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciBzaW11bGF0ZXMgYSBzZXJpYWwKKwkJCQkgICAgICBUVFkgZHJpdmVyIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgdXNlZCB0byBpbnRlcmZhY2UgdGhlIAorCQkJCSAgICAgIE1PREVNIHRvIHRoZSBsaW51eCBrZXJuZWwuCisJCQkJCisJCQlvIFdBTlBJUEUgUFBQIEJhY2t1cCBVdGlsaXR5CisJCQkJVGhpcyB1dGlsaXR5IHdpbGwgbW9uaXRvciB0aGUgc3RhdGUgb2YgdGhlIFBQUCBUMSBsaW5lLgorCQkJCUluIGNhc2Ugb2YgZmFpbHVyZSwgYSBkaWFsIHVwIGNvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZAorCQkJCXZpYSBwcHBkIGRhZW1vbiwgZXRoZXIgdmlhIGEgc2VyaWFsIHR0eSBkcml2ZXIgKHNlcmlhbCBwb3J0KSwgCisJCQkJb3IgYSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXIgKGluIGNhc2Ugc2VyaWFsIHBvcnQgaXMgdW5hdmFpbGFibGUpLgorCQkJCQorCQkJCUZ1cnRoZXJtb3JlLCB3aGlsZSBpbiBkaWFsIHVwIG1vZGUsIHRoZSBwcmltYXJ5IFBQUCBUMSBsaW5rCisJCQkJd2lsbCBiZSBtb25pdG9yZWQgZm9yIHNpZ25zIG9mIGxpZmUuICAKKworCQkJCUlmIHRoZSBQUFAgVDEgbGluayBjb21lcyBiYWNrIHRvIGxpZmUsIHRoZSBkaWFsIHVwIGNvbm5lY3Rpb24KKwkJCQl3aWxsIGJlIHNodXRkb3duIGFuZCBUMSBsaW5lIHJlLWVzdGFibGlzaGVkLgorCQkJCisKKwkJCW8gTmV3IFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisJCQkJT3B0aW9uIHRvIFVQR1JBREUgZGV2aWNlIGRyaXZlcnMgaWYgdGhlIGtlcm5lbCBzb3VyY2UgaGFzCisJCQkJYWxyZWFkeSBiZWVuIHBhdGNoZWQgd2l0aCBXQU5QSVBFLgorCisJCQkJT3B0aW9uIHRvIENPTVBJTEUgV0FOUElQRSBtb2R1bGVzIGFnYWluc3QgdGhlIGN1cnJlbnRseSAKKwkJCQlydW5uaW5nIGtlcm5lbCwgdGh1cyBubyBuZWVkIGZvciBtYW51YWwga2VybmVsIGFuZCBtb2R1bGUKKwkJCQlyZS1jb21waWxhdGluLgorCQkJCisJCQlvIFVwZGF0ZXMgYW5kIEJ1ZyBGaXhlcyB0byB3YW5jZmcgdXRpbGl0eS4KKworYmF0YTItMi4yLjEJRmViIDIwIDIwMDEKKworCQkJbyBCdWcgZml4ZXMgdG8gdGhlIENIRExDIGRldmljZSBkcml2ZXJzLgorCQkJCVRoZSBkcml2ZXIgaGFkIGNvbXBpbGF0aW9uIHByb2JsZW1zIHVuZGVyIGtlcm5lbHMKKwkJCQkyLjIuMTQgb3IgbG93ZXIuCisKKwkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgorCQkJCVRoZSBkZXZpY2UgZHJpdmVycyBjb21waWxhdGlvbiBvcHRpb25zIGRpZG4ndCB3b3JrCisJCQkJcHJvcGVybHkuCisKKwkJCW8gVXBkYXRlIHRvIHRoZSB3cGJhY2t1cGQgZGFlbW9uLiAgCisJCQkJT3B0aW1pemVkIHRoZSBjcm9zcy1vdmVyIHRpbWVzLCBiZXR3ZWVuIHRoZSBwcmltYXJ5CisJCQkJbGluayBhbmQgdGhlIGJhY2t1cCBkaWFsdXAuCisKK2JldGEzLTIuMi4xCU1hciAwMiAyMDAxCisJCQlvIFBhdGNoZXMgZm9yIDIuNC4yIGtlcm5lbC4KKworCQkJbyBCdWcgZml4ZXMgdG8gdXRpbC8gbWFrZSBmaWxlcy4KKwkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgorCisJCQlvIFRvb2sgb3V0IHRoZSBiYWNrdXBkIHN1cHBvcnQgYW5kIG1hZGUgaXQgaW50bworCQkJICBhcyBzZXBhcmF0ZSBwYWNrYWdlLgorCQkJICAKK2JldGE0LTIuMi4xICAgICBNYXIgMTIgMjAwMQorCisJCW8gRml4IHRvIHRoZSBGcmFtZSBSZWxheSBEZXZpY2UgZHJpdmVyLgorCQkJSVBTQUMgc2VuZHMgYSBwYWNrZXQgb2YgemVybyBsZW5ndGgKKwkJCWhlYWRlciB0byB0aGUgZnJhbWUgcmVsYXkgZHJpdmVyLiAgVGhlCisJCQlkcml2ZXIgdHJpZXMgdG8gcHVzaCBpdHMgb3duIDIgYnl0ZSBoZWFkZXIKKwkJCWludG8gdGhlIHBhY2tldCwgd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8KKwkJCWNyYXNoLgorCisJCW8gRml4IHRoZSBXQU5QSVBFIHJlLWNvbmZpZ3VyYXRpb24gY29kZS4KKwkJCUJ1ZyB3YXMgZm91bmQgYnkgdHJ5aW5nIHRvIHJ1biAgdGhlIGNmZ2Z0MSB3aGlsZSB0aGUKKwkJCWludGVyZmFjZSB3YXMgYWxyZWFkeSBydW5uaW5nLiAgCisKKwkJbyBVcGRhdGVzIHRvIGNmZ2Z0MS4KKwkJCVdyaXRlcyBhIHdhbnBpcGUjLmNmZ2Z0MSBjb25maWd1cmF0aW9uIGZpbGUKKwkJCW9uY2UgdGhlIENTVS9EU1UgaXMgY29uZmlndXJlZC4gVGhpcyBmaWxlIGNhbgorCQkJaG9sZHMgdGhlIGN1cnJlbnQgQ1NVL0RTVSBjb25maWd1cmF0aW9uLgorCisKKworPj4+Pj4+IEVORCBPRiBSRUFETUUgPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhdmVsYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhdmVsYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYWNmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQKQEAgLTAsMCArMSw3MyBAQAorCVRoZSBXYXZlbGFuIGRyaXZlcnMgc2FnYQorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJQnkgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorCisJVGhlIFdhdmVsYW4gaXMgYSBSYWRpbyBuZXR3b3JrIGFkYXB0ZXIgZGVzaWduZWQgYnkKK0x1Y2VudC4gVW5kZXIgdGhpcyBnZW5lcmljIG5hbWUgaXMgaGlkZGVuIHF1aXRlIGEgdmFyaWV0eSBvZiBoYXJkd2FyZSwKK2FuZCBtYW55IExpbnV4IGRyaXZlciB0byBzdXBwb3J0IGl0LgorCVRoZSBnZXQgdGhlIGZ1bGwgc3Rvcnkgb24gV2lyZWxlc3MgTEFOcywgcGxlYXNlIGNvbnN1bHQgOgorCQlodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4LworCisid2F2ZWxhbiIgZHJpdmVyIChvbGQgSVNBIFdhdmVsYW4pCistLS0tLS0tLS0tLS0tLS0tCisJbyBDb25maWcgOglOZXR3b3JrIGRldmljZSAtPiBXaXJlbGVzcyBMQU4gLT4gQVQmVCBXYXZlTEFOCisJbyBMb2NhdGlvbiA6CS4uLi9kcml2ZXJzL25ldC93YXZlbGFuKgorCW8gaW4tbGluZSBkb2MgOgkuLi4vZHJpdmVycy9uZXQvd2F2ZWxhbi5wLmgKKwlvIG9uLWxpbmUgZG9jIDoKKwkgICAgaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9XYXZlbGFuLmh0bWwKKworCVRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIElTQSB2ZXJzaW9uIG9mIHRoZSBmaXJzdCBnZW5lcmF0aW9uCitvZiB0aGUgV2F2ZWxhbiwgbm93IGRpc2NvbnRpbnVlZC4gVGhlIGRldmljZSBpcyAyIE1iL3MsIGNvbXBvc2VkIG9mIGEKK0ludGVsIDgyNTg2IGNvbnRyb2xsZXIgYW5kIGEgTHVjZW50IE1vZGVtLCBhbmQgaXMgTk9UIDgwMi4xMSBjb21wbGlhbnQuCisJVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIDoKKwlvIFdhdmVsYW4gSVNBIDkxNSBNSHogKGZ1bGwgbGVuZ3RoIElTQSBjYXJkKSAKKwlvIFdhdmVsYW4gSVNBIDkxNSBNSHogMi4wIChoYWxmIGxlbmd0aCBJU0EgY2FyZCkgCisJbyBXYXZlbGFuIElTQSAyLjQgR0h6IChmdWxsIGxlbmd0aCBJU0EgY2FyZCwgZml4ZWQgZnJlcXVlbmN5KSAKKwlvIFdhdmVsYW4gSVNBIDIuNCBHSHogMi4wIChoYWxmIGxlbmd0aCBJU0EgY2FyZCwgZnJlcXVlbmN5IHNlbGVjdGFibGUpIAorCW8gQWJvdmUgY2FyZHMgd2l0aCB0aGUgb3B0aW9uYWwgREVTIGVuY3J5cHRpb24gZmVhdHVyZSAKKworIndhdmVsYW5fY3MiIGRyaXZlciAob2xkIFBjbWNpYSBXYXZlbGFuKQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCW8gQ29uZmlnIDoJTmV0d29yayBkZXZpY2UgLT4gUENNQ0lBIG5ldHdvcmsgLT4KKwkJCQlQY21jaWEgV2lyZWxlc3MgTEFOIC0+IEFUJlQvTHVjZW50IFdhdmVMQU4KKwlvIExvY2F0aW9uIDoJLi4uL2RyaXZlcnMvbmV0L3BjbWNpYS93YXZlbGFuKgorCW8gaW4tbGluZSBkb2MgOgkuLi4vZHJpdmVycy9uZXQvcGNtY2lhL3dhdmVsYW5fY3MuaAorCW8gb24tbGluZSBkb2MgOgorCSAgICBodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1dhdmVsYW4uaHRtbAorCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgUENNQ0lBIHZlcnNpb24gb2YgdGhlIGZpcnN0CitnZW5lcmF0aW9uIG9mIHRoZSBXYXZlbGFuLCBub3cgZGlzY29udGludWVkLiBUaGUgZGV2aWNlIGlzIDIgTWIvcywKK2NvbXBvc2VkIG9mIGEgSW50ZWwgODI1OTMgY29udHJvbGxlciAodG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgODI1ODYpCithbmQgYSBMdWNlbnQgTW9kZW0sIGFuZCBOT1QgODAyLjExIGNvbXBhdGlibGUuCisJVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIDoKKwlvIFdhdmVsYW4gUGNtY2lhIDkxNSBNSHogMi4wIChQY21jaWEgY2FyZCArIHNlcGFyYXRlCisJCQkJCW1vZGVtL2FudGVubmEgYmxvY2spIAorCW8gV2F2ZWxhbiBQY21jaWEgMi40IEdIeiAyLjAgKFBjbWNpYSBjYXJkICsgc2VwYXJhdGUKKwkJCQkJbW9kZW0vYW50ZW5uYSBibG9jaykgCisKKyJ3dmxhbl9jcyIgZHJpdmVyIChXYXZlbGFuIElFRUUsIEdQTCkKKy0tLS0tLS0tLS0tLS0tLS0tCisJbyBDb25maWcgOglOb3QgeWV0IGluIGtlcm5lbAorCW8gTG9jYXRpb24gOglQY21jaWEgcGFja2FnZSAzLjEuMTArCisJbyBvbi1saW5lIGRvYyA6CWh0dHA6Ly93d3cuZmFzdGEuZmgtZG9ydG11bmQuZGUvdXNlcnMvYW5keS93dmxhbi8KKworCVRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBvZiBXYXZlbGFuIElFRUUsCit3aGljaCBpcyA4MDIuMTEgY29tcGF0aWJsZS4gRGVwZW5kaW5nIG9uIHZlcnNpb24sIGl0IGlzIDIgTWIvcyBvciAxMQorTWIvcywgd2l0aCBvciB3aXRob3V0IGVuY3J5cHRpb24sIGFsbCBpbXBsZW1lbnRlZCBpbiBMdWNlbnQgc3BlY2lmaWMKK0RTUCAodGhlIEhlcm1lcykuCisJVGhpcyBpcyBhIEdQTCBmdWxsIHNvdXJjZSBQQ01DSUEgZHJpdmVyIChJU0EgaXMganVzdCBhIFBjbWNpYQorY2FyZCB3aXRoIElTQS1QY21jaWEgYnJpZGdlKS4KKworIndhdmVsYW4yX2NzIiBkcml2ZXIgKFdhdmVsYW4gSUVFRSwgYmluYXJ5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlvIENvbmZpZyA6CU5vdCB5ZXQgaW4ga2VybmVsCisJbyBMb2NhdGlvbiA6CWZ0cDovL3NvdXJjZWZvcmdlLm9yZy9wY21jaWEvY29udHJpYi8KKworCVRoaXMgZHJpdmVyIHN1cHBvcnQgZXhhY3RseSB0aGUgc2FtZSBoYXJkd2FyZSBhcyB0aGUgcHJldmlvdXMKK2RyaXZlciwgdGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IGl0IGlzIGJhc2VkIG9uIGEgYmluYXJ5IGxpYnJhcnkKK2FuZCBzdXBwb3J0ZWQgYnkgTHVjZW50LgorCisJSSBob3BlIGl0IGNsZWFycyB0aGUgY29uZnVzaW9uIDstKQorCisJSmVhbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3gyNS1pZmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzVjYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3gyNS1pZmFjZS50eHQKQEAgLTAsMCArMSwxMjMgQEAKKwkJCVguMjUgRGV2aWNlIERyaXZlciBJbnRlcmZhY2UgMS4xCisKKwkJCSAgIEpvbmF0aGFuIE5heWxvciAyNi4xMi45NgorCitUaGlzIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIG1lc3NhZ2VzIHRvIGJlIHBhc3NlZCBiZXR3ZWVuIHRoZSBYLjI1IFBhY2tldAorTGF5ZXIgYW5kIHRoZSBYLjI1IGRldmljZSBkcml2ZXIuIFRoZXkgYXJlIGRlc2lnbmVkIHRvIGFsbG93IGZvciB0aGUgZWFzeQorc2V0dGluZyBvZiB0aGUgTEFQQiBtb2RlIGZyb20gd2l0aGluIHRoZSBQYWNrZXQgTGF5ZXIuCisKK1RoZSBYLjI1IGRldmljZSBkcml2ZXIgd2lsbCBiZSBjb2RlZCBub3JtYWxseSBhcyBwZXIgdGhlIExpbnV4IGRldmljZSBkcml2ZXIKK3N0YW5kYXJkcy4gTW9zdCBYLjI1IGRldmljZSBkcml2ZXJzIHdpbGwgYmUgbW9kZXJhdGVseSBzaW1pbGFyIHRvIHRoZQorYWxyZWFkeSBleGlzdGluZyBFdGhlcm5ldCBkZXZpY2UgZHJpdmVycy4gSG93ZXZlciB1bmxpa2UgdGhvc2UgZHJpdmVycywgdGhlCitYLjI1IGRldmljZSBkcml2ZXIgaGFzIGEgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGl0LCBhbmQgdGhpcyBpbmZvcm1hdGlvbgorbmVlZHMgdG8gYmUgcGFzc2VkIHRvIGFuZCBmcm9tIHRoZSBQYWNrZXQgTGF5ZXIgZm9yIHByb3BlciBvcGVyYXRpb24uCisKK0FsbCBtZXNzYWdlcyBhcmUgaGVsZCBpbiBza19idWZmJ3MganVzdCBsaWtlIHJlYWwgZGF0YSB0byBiZSB0cmFuc21pdHRlZAorb3ZlciB0aGUgTEFQQiBsaW5rLiBUaGUgZmlyc3QgYnl0ZSBvZiB0aGUgc2tidWZmIGluZGljYXRlcyB0aGUgbWVhbmluZyBvZgordGhlIHJlc3Qgb2YgdGhlIHNrYnVmZiwgaWYgYW55IG1vcmUgaW5mb3JtYXRpb24gZG9lcyBleGlzdC4KKworCitQYWNrZXQgTGF5ZXIgdG8gRGV2aWNlIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3QgQnl0ZSA9IDB4MDAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzdCBvZiB0aGUgc2tidWZmIGNvbnRhaW5zIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQKK292ZXIgdGhlIExBUEIgbGluay4gVGhlIExBUEIgbGluayBzaG91bGQgYWxyZWFkeSBleGlzdCBiZWZvcmUgYW55IGRhdGEgaXMKK3Bhc3NlZCBkb3duLgorCitGaXJzdCBCeXRlID0gMHgwMQorCitFc3RhYmxpc2ggdGhlIExBUEIgbGluay4gSWYgdGhlIGxpbmsgaXMgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGVuIHRoZSBjb25uZWN0Citjb25maXJtYXRpb24gbWVzc2FnZSBzaG91bGQgYmUgcmV0dXJuZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKworRmlyc3QgQnl0ZSA9IDB4MDIKKworVGVybWluYXRlIHRoZSBMQVBCIGxpbmsuIElmIGl0IGlzIGFscmVhZHkgZGlzY29ubmVjdGVkIHRoZW4gdGhlIGRpc2Nvbm5lY3QKK2NvbmZpcm1hdGlvbiBtZXNzYWdlIHNob3VsZCBiZSByZXR1cm5lZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorCitGaXJzdCBCeXRlID0gMHgwMworCitMQVBCIHBhcmFtZXRlcnMuIFRvIGJlIGRlZmluZWQuCisKKworRGV2aWNlIERyaXZlciB0byBQYWNrZXQgTGF5ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IEJ5dGUgPSAweDAwCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHNrYnVmZiBjb250YWlucyBkYXRhIHRoYXQgaGFzIGJlZW4KK3JlY2VpdmVkIG92ZXIgdGhlIExBUEIgbGluay4KKworRmlyc3QgQnl0ZSA9IDB4MDEKKworTEFQQiBsaW5rIGhhcyBiZWVuIGVzdGFibGlzaGVkLiBUaGUgc2FtZSBtZXNzYWdlIGlzIHVzZWQgZm9yIGJvdGggYSBMQVBCCitsaW5rIGNvbm5lY3RfY29uZmlybWF0aW9uIGFuZCBhIGNvbm5lY3RfaW5kaWNhdGlvbi4KKworRmlyc3QgQnl0ZSA9IDB4MDIKKworTEFQQiBsaW5rIGhhcyBiZWVuIHRlcm1pbmF0ZWQuIFRoaXMgc2FtZSBtZXNzYWdlIGlzIHVzZWQgZm9yIGJvdGggYSBMQVBCCitsaW5rIGRpc2Nvbm5lY3RfY29uZmlybWF0aW9uIGFuZCBhIGRpc2Nvbm5lY3RfaW5kaWNhdGlvbi4KKworRmlyc3QgQnl0ZSA9IDB4MDMKKworTEFQQiBwYXJhbWV0ZXJzLiBUbyBiZSBkZWZpbmVkLgorCisKKworUG9zc2libGUgUHJvYmxlbXMKKz09PT09PT09PT09PT09PT09CisKKyhIZW5uZXIgRWlzZW4sIDIwMDAtMTAtMjgpCisKK1RoZSBYLjI1IHBhY2tldCBsYXllciBwcm90b2NvbCBkZXBlbmRzIG9uIGEgcmVsaWFibGUgZGF0YWxpbmsgc2VydmljZS4KK1RoZSBMQVBCIHByb3RvY29sIHByb3ZpZGVzIHN1Y2ggcmVsaWFibGUgc2VydmljZS4gQnV0IHRoaXMgcmVsaWFiaWxpdHkKK2lzIG5vdCBwcmVzZXJ2ZWQgYnkgdGhlIExpbnV4IG5ldHdvcmsgZGV2aWNlIGRyaXZlciBpbnRlcmZhY2U6CisKKy0gV2l0aCBMaW51eCAyLjQueCAoYW5kIGFib3ZlKSBTTVAga2VybmVscywgcGFja2V0IG9yZGVyaW5nIGlzIG5vdAorICBwcmVzZXJ2ZWQuIEV2ZW4gaWYgYSBkZXZpY2UgZHJpdmVyIGNhbGxzIG5ldGlmX3J4KHNrYjEpIGFuZCBsYXRlcgorICBuZXRpZl9yeChza2IyKSwgc2tiMiBtaWdodCBiZSBkZWxpdmVyZWQgdG8gdGhlIG5ldHdvcmsgbGF5ZXIKKyAgZWFybGllciB0aGF0IHNrYjEuCistIERhdGEgcGFzc2VkIHVwc3RyZWFtIGJ5IG1lYW5zIG9mIG5ldGlmX3J4KCkgbWlnaHQgYmUgZHJvcHBlZCBieSB0aGUKKyAga2VybmVsIGlmIHRoZSBiYWNrbG9nIHF1ZXVlIGlzIGNvbmdlc3RlZC4KKworVGhlIFguMjUgcGFja2V0IGxheWVyIHByb3RvY29sIHdpbGwgZGV0ZWN0IHRoaXMgYW5kIHJlc2V0IHRoZSB2aXJ0dWFsCitjYWxsIGluIHF1ZXN0aW9uLiBCdXQgbWFueSB1cHBlciBsYXllciBwcm90b2NvbHMgYXJlIG5vdCBkZXNpZ25lZCB0bworaGFuZGxlIHN1Y2ggTi1SZXNldCBldmVudHMgZ3JhY2VmdWxseS4gQW5kIGZyZXF1ZW50IE4tUmVzZXQgZXZlbnRzCit3aWxsIGFsd2F5cyBkZWdyYWRlIHBlcmZvcm1hbmNlLgorCitUaHVzLCBkcml2ZXIgYXV0aG9ycyBzaG91bGQgbWFrZSBuZXRpZl9yeCgpIGFzIHJlbGlhYmxlIGFzIHBvc3NpYmxlOgorCitTTVAgcmUtb3JkZXJpbmcgd2lsbCBub3Qgb2NjdXIgaWYgdGhlIGRyaXZlcidzIGludGVycnVwdCBoYW5kbGVyIGlzCithbHdheXMgZXhlY3V0ZWQgb24gdGhlIHNhbWUgQ1BVLiBUaHVzLAorCistIERyaXZlciBhdXRob3JzIHNob3VsZCB1c2UgaXJxIGFmZmluaXR5IGZvciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisKK1RoZSBwcm9iYWJpbGl0eSBvZiBwYWNrZXQgbG9zcyBkdWUgdG8gYmFja2xvZyBjb25nZXN0aW9uIGNhbiBiZQorcmVkdWNlZCBieSB0aGUgZm9sbG93aW5nIG1lYXN1cmVzIG9yIGEgY29tYmluYXRpb24gdGhlcmVvZjoKKworKDEpIERyaXZlcnMgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjQueCBhbmQgYWJvdmUgc2hvdWxkIGFsd2F5cyBjaGVjayB0aGUKKyAgICByZXR1cm4gdmFsdWUgb2YgbmV0aWZfcngoKS4gSWYgaXQgcmV0dXJucyBORVRfUlhfRFJPUCwgdGhlCisgICAgZHJpdmVyJ3MgTEFQQiBwcm90b2NvbCBtdXN0IG5vdCBjb25maXJtIHJlY2VwdGlvbiBvZiB0aGUgZnJhbWUKKyAgICB0byB0aGUgcGVlci4gCisgICAgVGhpcyB3aWxsIHJlbGlhYmx5IHN1cHByZXNzIHBhY2tldCBsb3NzLiBUaGUgTEFQQiBwcm90b2NvbCB3aWxsCisgICAgYXV0b21hdGljYWxseSBjYXVzZSB0aGUgcGVlciB0byByZS10cmFuc21pdCB0aGUgZHJvcHBlZCBwYWNrZXQKKyAgICBsYXRlci4KKyAgICBUaGUgbGFwYiBtb2R1bGUgaW50ZXJmYWNlIHdhcyBtb2RpZmllZCB0byBzdXBwb3J0IHRoaXMuIEl0cworICAgIGRhdGFfaW5kaWNhdGlvbigpIG1ldGhvZCBzaG91bGQgbm93IHRyYW5zcGFyZW50bHkgcGFzcyB0aGUKKyAgICBuZXRpZl9yeCgpIHJldHVybiB2YWx1ZSB0byB0aGUgKGxhcGIgbW9wZHVsZSkgY2FsbGVyLgorKDIpIERyaXZlcnMgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjIueCBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBnbG9iYWwKKyAgICB2YXJpYWJsZSBuZXRkZXZfZHJvcHBpbmcgd2hlbiBhIG5ldyBmcmFtZSBpcyByZWNlaXZlZC4gVGhlIGRyaXZlcgorICAgIHNob3VsZCBvbmx5IGNhbGwgbmV0aWZfcngoKSBpZiBuZXRkZXZfZHJvcHBpbmcgaXMgemVyby4gT3RoZXJ3aXNlCisgICAgdGhlIGRyaXZlciBzaG91bGQgbm90IGNvbmZpcm0gZGVsaXZlcnkgb2YgdGhlIGZyYW1lIGFuZCBkcm9wIGl0LgorICAgIEFsdGVybmF0aXZlbHksIHRoZSBkcml2ZXIgY2FuIHF1ZXVlIHRoZSBmcmFtZSBpbnRlcm5hbGx5IGFuZCBjYWxsCisgICAgbmV0aWZfcngoKSBsYXRlciB3aGVuIG5ldGlmX2Ryb3BwaW5nIGlzIDAgYWdhaW4uIEluIHRoYXQgY2FzZSwgZGVsaXZlcnkKKyAgICBjb25maXJtYXRpb24gc2hvdWxkIGFsc28gYmUgZGVmZXJyZWQgc3VjaCB0aGF0IHRoZSBpbnRlcm5hbCBxdWV1ZQorICAgIGNhbm5vdCBncm93IHRvIG11Y2guCisgICAgVGhpcyB3aWxsIG5vdCByZWxpYWJseSBhdm9pZCBwYWNrZXQgbG9zcywgYnV0IHRoZSBwcm9iYWJpbGl0eQorICAgIG9mIHBhY2tldCBsb3NzIGluIG5ldGlmX3J4KCkgcGF0aCB3aWxsIGJlIHNpZ25pZmljYW50bHkgcmVkdWNlZC4KKygzKSBBZGRpdGlvbmFsbHksIGRyaXZlciBhdXRob3JzIG1pZ2h0IGNvbnNpZGVyIHRvIHN1cHBvcnQKKyAgICBDT05GSUdfTkVUX0hXX0ZMT1dDT05UUk9MLiBUaGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIGJlIHdva2VuIHVwCisgICAgd2hlbiBhIHByZXZpb3VzbHkgY29uZ2VzdGVkIGJhY2tsb2cgcXVldWUgYmVjb21lcyBlbXB0eSBhZ2Fpbi4KKyAgICBUaGUgZHJpdmVyIGNvdWxkIHVzZXMgdGhpcyBmb3IgZmxvdy1jb250cm9sbGluZyB0aGUgcGVlciBieSBtZWFucworICAgIG9mIHRoZSBMQVBCIHByb3RvY29sJ3MgZmxvdy1jb250cm9sIHNlcnZpY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWM2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LnR4dApAQCAtMCwwICsxLDQ0IEBACitMaW51eCBYLjI1IFByb2plY3QKKworQXMgbXkgdGhpcmQgeWVhciBkaXNzZXJ0YXRpb24gYXQgVW5pdmVyc2l0eSBJIGhhdmUgdGFrZW4gaXQgdXBvbiBteXNlbGYgdG8KK3dyaXRlIGFuIFguMjUgaW1wbGVtZW50YXRpb24gZm9yIExpbnV4LiBNeSBhaW0gaXMgdG8gcHJvdmlkZSBhIGNvbXBsZXRlIFguMjUKK1BhY2tldCBMYXllciBhbmQgYSBMQVBCIG1vZHVsZSB0byBhbGxvdyBmb3IgIm5vcm1hbCIgWC4yNSB0byBiZSBydW4gdXNpbmcKK0xpbnV4LiBUaGVyZSBhcmUgdHdvIHNvcnRzIG9mIFguMjUgY2FyZHMgYXZhaWxhYmxlLCBpbnRlbGxpZ2VudCBvbmVzIHRoYXQKK2ltcGxlbWVudCBMQVBCIG9uIHRoZSBjYXJkIGl0c2VsZiwgYW5kIHVuaW50ZWxsaWdlbnQgb25lcyB0aGF0IHNpbXBseSBkbworZnJhbWluZywgYml0LXN0dWZmaW5nIGFuZCBjaGVja3N1bW1pbmcuIFRoZXNlIGJvdGggbmVlZCB0byBiZSBoYW5kbGVkIGJ5IHRoZQorc3lzdGVtLgorCitJIHRoZXJlZm9yZSBkZWNpZGVkIHRvIHdyaXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBzdWNoIHRoYXQgYXMgZmFyIGFzIHRoZQorUGFja2V0IExheWVyIGlzIGNvbmNlcm5lZCwgdGhlIGxpbmsgbGF5ZXIgd2FzIGJlaW5nIHBlcmZvcm1lZCBieSBhIGxvd2VyCitsYXllciBvZiB0aGUgTGludXgga2VybmVsIGFuZCB0aGVyZWZvcmUgaXQgZGlkIG5vdCBjb25jZXJuIGl0c2VsZiB3aXRoCitpbXBsZW1lbnRhdGlvbiBvZiBMQVBCLiBUaGVyZWZvcmUgdGhlIExBUEIgbW9kdWxlcyB3b3VsZCBiZSBjYWxsZWQgYnkKK3VuaW50ZWxsaWdlbnQgWC4yNSBjYXJkIGRyaXZlcnMgYW5kIG5vdCBieSBpbnRlbGxpZ2VudCBvbmVzLCB0aGlzIHdvdWxkCitwcm92aWRlIGEgdW5pZm9ybSBkZXZpY2UgZHJpdmVyIGludGVyZmFjZSwgYW5kIHNpbXBsaWZ5IGNvbmZpZ3VyYXRpb24uCisKK1RvIGNvbmZ1c2UgbWF0dGVycyBhIGxpdHRsZSwgYW4gODAyLjIgTExDIGltcGxlbWVudGF0aW9uIGZvciBMaW51eCBpcyBiZWluZword3JpdHRlbiB3aGljaCB3aWxsIGFsbG93IFguMjUgdG8gYmUgcnVuIG92ZXIgYW4gRXRoZXJuZXQgKG9yIFRva2VuIFJpbmcpIGFuZAorY29uZm9ybSB3aXRoIHRoZSBKTlQgIlBpbmsgQm9vayIsIHRoaXMgd2lsbCBoYXZlIGEgZGlmZmVyZW50IGludGVyZmFjZSB0bwordGhlIFBhY2tldCBMYXllciBidXQgdGhlcmUgd2lsbCBiZSBubyBjb25mdXNpb24gc2luY2UgdGhlIGNsYXNzIG9mIGRldmljZQorYmVpbmcgc2VydmVkIGJ5IHRoZSBMTEMgd2lsbCBiZSBjb21wbGV0ZWx5IHNlcGFyYXRlIGZyb20gTEFQQi4gVGhlIExMQworaW1wbGVtZW50YXRpb24gaXMgYmVpbmcgZG9uZSBhcyBwYXJ0IG9mIGFub3RoZXIgcHJvdG9jb2wgcHJvamVjdCAoU05BKSBhbmQKK2J5IGEgZGlmZmVyZW50IGF1dGhvci4KKworSnVzdCB3aGVuIHlvdSB0aG91Z2h0IHRoYXQgaXQgY291bGQgbm90IGJlY29tZSBtb3JlIGNvbmZ1c2luZywgYW5vdGhlcgorb3B0aW9uIGFwcGVhcmVkLCBYT1QuIFRoaXMgYWxsb3dzIFguMjUgUGFja2V0IExheWVyIGZyYW1lcyB0byBvcGVyYXRlIG92ZXIKK3RoZSBJbnRlcm5ldCB1c2luZyBUQ1AvSVAgYXMgYSByZWxpYWJsZSBsaW5rIGxheWVyLiBSRkMxNjEzIHNwZWNpZmllcyB0aGUKK2Zvcm1hdCBhbmQgYmVoYXZpb3VyIG9mIHRoZSBwcm90b2NvbC4gSWYgdGltZSBwZXJtaXRzIHRoaXMgb3B0aW9uIHdpbGwgYWxzbworYmUgYWN0aXZlbHkgY29uc2lkZXJlZC4KKworQSBsaW51eC14MjUgbWFpbGluZyBsaXN0IGhhcyBiZWVuIGNyZWF0ZWQgYXQgdmdlci5rZXJuZWwub3JnIHRvIHN1cHBvcnQgdGhlCitkZXZlbG9wbWVudCBhbmQgdXNlIG9mIExpbnV4IFguMjUuIEl0IGlzIGVhcmx5IGRheXMgeWV0LCBidXQgaW50ZXJlc3RlZAorcGFydGllcyBhcmUgd2VsY29tZSB0byBzdWJzY3JpYmUgdG8gaXQuIEp1c3Qgc2VuZCBhIG1lc3NhZ2UgdG8KK21ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcgd2l0aCB0aGUgZm9sbG93aW5nIGluIHRoZSBtZXNzYWdlIGJvZHk6CisKK3N1YnNjcmliZSBsaW51eC14MjUKK2VuZAorCitUaGUgY29udGVudHMgb2YgdGhlIFN1YmplY3QgbGluZSBhcmUgaWdub3JlZC4KKworSm9uYXRoYW4KKworZzRrbHhAZzRrbHguZGVtb24uY28udWsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy96ODUzMGRydi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvejg1MzBkcnYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMDZhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvejg1MzBkcnYudHh0CkBAIC0wLDAgKzEsNjU3IEBACitUaGlzIGlzIGEgc3Vic2V0IG9mIHRoZSBkb2N1bWVudGF0aW9uLiBUbyB1c2UgdGhpcyBkcml2ZXIgeW91IE1VU1QgaGF2ZSB0aGUKK2Z1bGwgcGFja2FnZSBmcm9tOgorCitJbnRlcm5ldDoKKz09PT09PT09PQorCisxLiBmdHA6Ly9mdHAuY2NhYy5yd3RoLWFhY2hlbi5kZS9wdWIvanIvejg1MzBkcnYtdXRpbHNfMy4wLTMudGFyLmd6CisKKzIuIGZ0cDovL2Z0cC5wc3B0LmZpL3B1Yi9oYW0vbGludXgvYXgyNS96ODUzMGRydi11dGlsc18zLjAtMy50YXIuZ3oKKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgaW5mb3JtYXRpb24gaW4gdGhpcyBkb2N1bWVudCBtYXkgYmUgaG9wZWxlc3NseSBvdXRkYXRlZC4KK0EgbmV3IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50YXRpb24sIGFsb25nIHdpdGggbGlua3MgdG8gb3RoZXIgaW1wb3J0YW50CitMaW51eCBLZXJuZWwgQVguMjUgZG9jdW1lbnRhdGlvbiBhbmQgcHJvZ3JhbXMsIGlzIGF2YWlsYWJsZSBvbgoraHR0cDovL3lhaW5hLmRlL2pyZXV0ZXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJIFNDQy5DIC0gTGludXggZHJpdmVyIGZvciBaODUzMCBiYXNlZCBIRExDIGNhcmRzIGZvciBBWC4yNSAgICAgIAorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgICAgIChjKSAxOTkzLDIwMDAgYnkgSm9lcmcgUmV1dGVyIERMMUJLRSA8anJldXRlckB5YWluYS5kZT4KKworICAgICAgICBwb3J0aW9ucyAoYykgMTk5MyBHdWlkbyB0ZW4gRG9sbGUgUEUxTk5aCisKKyAgICAgICAgZm9yIHRoZSBjb21wbGV0ZSBjb3B5cmlnaHQgbm90aWNlIHNlZSA+PiBDb3B5aW5nLlo4NTMwRFJWIDw8CisKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorCisKKzEuIEluaXRpYWxpemF0aW9uIG9mIHRoZSBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gdXNlIHRoZSBkcml2ZXIsIDMgc3RlcHMgbXVzdCBiZSBwZXJmb3JtZWQ6CisKKyAgICAgMS4gaWYgY29tcGlsZWQgYXMgbW9kdWxlOiBsb2FkaW5nIHRoZSBtb2R1bGUKKyAgICAgMi4gU2V0dXAgb2YgaGFyZHdhcmUsIE1PREVNIGFuZCBLSVNTIHBhcmFtZXRlcnMgd2l0aCBzY2Npbml0CisgICAgIDMuIEF0dGFjaCBlYWNoIGNoYW5uZWwgdG8gdGhlIExpbnV4IGtlcm5lbCBBWC4yNSB3aXRoICJpZmNvbmZpZyIKKworVW5saWtlIHRoZSB2ZXJzaW9ucyBiZWxvdyAyLjQgdGhpcyBkcml2ZXIgaXMgYSByZWFsIG5ldHdvcmsgZGV2aWNlCitkcml2ZXIuIElmIHlvdSB3YW50IHRvIHJ1biB4Tk9TIGluc3RlYWQgb2Ygb3VyIGZpbmUga2VybmVsIEFYLjI1Cit1c2UgYSAyLnggdmVyc2lvbiAoYXZhaWxhYmxlIGZyb20gYWJvdmUgc2l0ZXMpIG9yIHJlYWQgdGhlCitBWC4yNS1IT1dUTyBvbiBob3cgdG8gZW11bGF0ZSBhIEtJU1MgVE5DIG9uIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuCisKKworMS4xIExvYWRpbmcgdGhlIG1vZHVsZQorPT09PT09PT09PT09PT09PT09PT09PQorCisoSWYgeW91J3JlIGdvaW5nIHRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIHBhcnQgb2YgdGhlIGtlcm5lbCBpbWFnZSwKKyBza2lwIHRoaXMgY2hhcHRlciBhbmQgY29udGludWUgd2l0aCAxLjIpCisKK0JlZm9yZSB5b3UgY2FuIHVzZSBhIG1vZHVsZSwgeW91J2xsIGhhdmUgdG8gbG9hZCBpdCB3aXRoCisKKwlpbnNtb2Qgc2NjLm8KKworcGxlYXNlIHJlYWQgJ21hbiBpbnNtb2QnIHRoYXQgY29tZXMgd2l0aCBtb2R1bGUtaW5pdC10b29scy4KKworWW91IHNob3VsZCBpbmNsdWRlIHRoZSBpbnNtb2QgaW4gb25lIG9mIHRoZSAvZXRjL3JjLmQvcmMuKiBmaWxlcywKK2FuZCBkb24ndCBmb3JnZXQgdG8gaW5zZXJ0IGEgY2FsbCBvZiBzY2Npbml0IGFmdGVyIHRoYXQuIEl0Cit3aWxsIHJlYWQgeW91ciAvZXRjL3o4NTMwZHJ2LmNvbmYuCisKKzEuMi4gL2V0Yy96ODUzMGRydi5jb25mCis9PT09PT09PT09PT09PT09PT09PT09PQorCitUbyBzZXR1cCBhbGwgcGFyYW1ldGVycyB5b3UgbXVzdCBydW4gL3NiaW4vc2NjaW5pdCBmcm9tIG9uZQorb2YgeW91ciByYy4qLWZpbGVzLiBUaGlzIGhhcyB0byBiZSBkb25lIEJFRk9SRSB5b3UgY2FuCisiaWZjb25maWciIGFuIGludGVyZmFjZS4gU2NjaW5pdCByZWFkcyB0aGUgZmlsZSAvZXRjL3o4NTMwZHJ2LmNvbmYKK2FuZCBzZXRzIHRoZSBoYXJkd2FyZSwgTU9ERU0gYW5kIEtJU1MgcGFyYW1ldGVycy4gQSBzYW1wbGUgZmlsZSBpcworZGVsaXZlcmVkIHdpdGggdGhpcyBwYWNrYWdlLiBDaGFuZ2UgaXQgdG8geW91ciBuZWVkcy4KKworVGhlIGZpbGUgaXRzZWxmIGNvbnNpc3RzIG9mIHR3byBtYWluIHNlY3Rpb25zLgorCisxLjIuMSBjb25maWd1cmF0aW9uIG9mIGhhcmR3YXJlIHBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaGFyZHdhcmUgc2V0dXAgc2VjdGlvbiBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBmb3IgZWFjaAorWjg1MzA6CisKK2NoaXAgICAgMQorZGF0YV9hICAweDMwMCAgICAgICAgICAgICAgICAgICAjIGRhdGEgcG9ydCBBCitjdHJsX2EgIDB4MzA0ICAgICAgICAgICAgICAgICAgICMgY29udHJvbCBwb3J0IEEKK2RhdGFfYiAgMHgzMDEgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBvcnQgQgorY3RybF9iICAweDMwNSAgICAgICAgICAgICAgICAgICAjIGNvbnRyb2wgcG9ydCBCCitpcnEgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICMgSVJRIE5vLiA1CitwY2xvY2sgIDQ5MTUyMDAgICAgICAgICAgICAgICAgICMgY2xvY2sKK2JvYXJkICAgQkFZQ09NICAgICAgICAgICAgICAgICAgIyBoYXJkd2FyZSB0eXBlCitlc2NjICAgIG5vICAgICAgICAgICAgICAgICAgICAgICMgZW5oYW5jZWQgU0NDIGNoaXA/ICg4NTgwLzg1MTgwLzg1MjgwKQordmVjdG9yICAwICAgICAgICAgICAgICAgICAgICAgICAjIGxhdGNoIGZvciBpbnRlcnJ1cHQgdmVjdG9yCitzcGVjaWFsIG5vICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyBvZiBzcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVyCitvcHRpb24gIDAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uIHRvIHNldCB2aWEgc2ZyCisKKworY2hpcAktIHRoaXMgaXMganVzdCBhIGRlbGltaXRlciB0byBtYWtlIHNjY2luaXQgYSBiaXQgc2ltcGxlciB0bworCSAgcHJvZ3JhbS4gQSBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdC4KKworZGF0YV9hICAtIHRoZSBhZGRyZXNzIG9mIHRoZSBkYXRhIHBvcnQgQSBvZiB0aGlzIFo4NTMwIChuZWVkZWQpCitjdHJsX2EgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgcG9ydCBBIChuZWVkZWQpCitkYXRhX2IgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgcG9ydCBCIChuZWVkZWQpCitjdHJsX2IgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgcG9ydCBCIChuZWVkZWQpCisKK2lycSAgICAgLSB0aGUgdXNlZCBJUlEgZm9yIHRoaXMgY2hpcC4gRGlmZmVyZW50IGNoaXBzIGNhbiB1c2UgZGlmZmVyZW50CisgICAgICAgICAgSVJRcyBvciB0aGUgc2FtZS4gSWYgdGhleSBzaGFyZSBhbiBpbnRlcnJ1cHQsIGl0IG5lZWRzIHRvIGJlCisJICBzcGVjaWZpZWQgd2l0aGluIG9uZSBjaGlwLWRlZmluaXRpb24gb25seS4KKworcGNsb2NrICAtIHRoZSBjbG9jayBhdCB0aGUgUENMSyBwaW4gb2YgdGhlIFo4NTMwIChvcHRpb24sIDQ5MTUyMDAgaXMKKyAgICAgICAgICBkZWZhdWx0KSwgbWVhc3VyZWQgaW4gSGVydHoKKworYm9hcmQgICAtIHRoZSAidHlwZSIgb2YgdGhlIGJvYXJkOgorCisJICAgU0NDIHR5cGUgICAgICAgICAgICAgICAgIHZhbHVlCisJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgUEEwSFpQIFNDQyBjYXJkICAgICAgICAgIFBBMEhaUAorCSAgIEVBR0xFIGNhcmQgICAgICAgICAgICAgICBFQUdMRQorCSAgIFBDMTAwIGNhcmQgICAgICAgICAgICAgICBQQzEwMAorCSAgIFBSSU1VUy1QQyAoREc5QkwpIGNhcmQgICBQUklNVVMKKwkgICBCYXlDb20gKFUpU0NDIGNhcmQgICAgICAgQkFZQ09NCisKK2VzY2MgICAgLSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBFU0NDIGNoaXBzICg4NTgwLCA4NTE4MCwgODUyODApLCBzZXQKKyAgICAgICAgICB0aGlzIHRvICJ5ZXMiIChvcHRpb24sIGRlZmF1bHRzIHRvICJubyIpCisKK3ZlY3RvciAgLSBhZGRyZXNzIG9mIHRoZSB2ZWN0b3IgbGF0Y2ggKGFrYSAiaW50YWNrIHBvcnQiKSBmb3IgUEEwSFpQCisgICAgICAgICAgY2FyZHMuIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSB2ZWN0b3IgbGF0Y2ggZm9yIGFsbCBjaGlwcyEKKwkgIChvcHRpb24sIGRlZmF1bHRzIHRvIDApCisKK3NwZWNpYWwgLSBhZGRyZXNzIG9mIHRoZSBzcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVyIG9uIHNldmVyYWwgY2FyZHMuCisgICAgICAgICAgKG9wdGlvbiwgZGVmYXVsdHMgdG8gMCkKKworb3B0aW9uICAtIFRoZSB2YWx1ZSB5b3Ugd3JpdGUgaW50byB0aGF0IHJlZ2lzdGVyIChvcHRpb24sIGRlZmF1bHQgaXMgMCkKKworWW91IGNhbiBzcGVjaWZ5IHVwIHRvIGZvdXIgY2hpcHMgKDggY2hhbm5lbHMpLiBJZiB0aGlzIGlzIG5vdCBlbm91Z2gsCitqdXN0IGNoYW5nZQorCisJI2RlZmluZSBNQVhTQ0MgNAorCit0byBhIGhpZ2hlciB2YWx1ZS4KKworRXhhbXBsZSBmb3IgdGhlIEJBWUNPTSBVU0NDOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjaGlwICAgIDEKK2RhdGFfYSAgMHgzMDAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBvcnQgQQorY3RybF9hICAweDMwNCAgICAgICAgICAgICAgICAgICAjIGNvbnRyb2wgcG9ydCBBCitkYXRhX2IgIDB4MzAxICAgICAgICAgICAgICAgICAgICMgZGF0YSBwb3J0IEIKK2N0cmxfYiAgMHgzMDUgICAgICAgICAgICAgICAgICAgIyBjb250cm9sIHBvcnQgQgoraXJxICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAjIElSUSBOby4gNSAoIykKK2JvYXJkICAgQkFZQ09NICAgICAgICAgICAgICAgICAgIyBoYXJkd2FyZSB0eXBlICgqKQorIworIyBTQ0MgY2hpcCAyCisjCitjaGlwICAgIDIKK2RhdGFfYSAgMHgzMDIKK2N0cmxfYSAgMHgzMDYKK2RhdGFfYiAgMHgzMDMKK2N0cmxfYiAgMHgzMDcKK2JvYXJkICAgQkFZQ09NCisKK0FuIGV4YW1wbGUgZm9yIGEgUEEwSFpQIGNhcmQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjaGlwIDEKK2RhdGFfYSAweDE1MworZGF0YV9iIDB4MTUxCitjdHJsX2EgMHgxNTIKK2N0cmxfYiAweDE1MAoraXJxIDkKK3BjbG9jayA0OTE1MjAwCitib2FyZCBQQTBIWlAKK3ZlY3RvciAweDE2OAorZXNjYyBubworIworIworIworY2hpcCAyCitkYXRhX2EgMHgxNTcKK2RhdGFfYiAweDE1NQorY3RybF9hIDB4MTU2CitjdHJsX2IgMHgxNTQKK2lycSA5CitwY2xvY2sgNDkxNTIwMAorYm9hcmQgUEEwSFpQCit2ZWN0b3IgMHgxNjgKK2VzY2Mgbm8KKworQSBEUlNJIHdvdWxkIHNob3VsZCBwcm9iYWJseSB3b3JrIHdpdGggdGhpczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoYWN0dWFsbHk6IHR3byBEUlNJIGNhcmRzLi4uKQorCitjaGlwIDEKK2RhdGFfYSAweDMwMworZGF0YV9iIDB4MzAxCitjdHJsX2EgMHgzMDIKK2N0cmxfYiAweDMwMAoraXJxIDcKK3BjbG9jayA0OTE1MjAwCitib2FyZCBEUlNJCitlc2NjIG5vCisjCisjCisjCitjaGlwIDIKK2RhdGFfYSAweDMxMworZGF0YV9iIDB4MzExCitjdHJsX2EgMHgzMTIKK2N0cmxfYiAweDMxMAoraXJxIDcKK3BjbG9jayA0OTE1MjAwCitib2FyZCBEUlNJCitlc2NjIG5vCisKK05vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSB0aGUgb24tYm9hcmQgYmF1ZHJhdGUgZ2VuZXJhdG9yIG9mZiBEUlNJCitjYXJkcy4gVXNlICJtb2RlIGRwbGwiIGZvciBjbG9jayBzb3VyY2UgKHNlZSBiZWxvdykuCisKK1RoaXMgaXMgYmFzZWQgb24gaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgTWlrZSBCaWxvdyAoYW5kIHZlcmlmaWVkCitieSBQYXVsIEhlbGF5KQorCitUaGUgdXRpbGl0eSAiZ2VuY2ZnIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG9ubHkga25vdyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIFBFMUNITCBkcml2ZXIgZm9yIERPUywKK3J1biBnZW5jZmcuIEl0IHdpbGwgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgcG9ydCBhZGRyZXNzZXMgKEkgaG9wZSkuCitJdHMgcGFyYW1ldGVycyBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgb25lcyB5b3UgdXNlIHdpdGgKK3RoZSAiYXR0YWNoIHNjYyIgY29tbWFuZCBpbiBuZXQsIGV4Y2VwdCB0aGF0IHRoZSBzdHJpbmcgImluaXQiIG11c3QgCitub3QgYXBwZWFyLiBFeGFtcGxlOgorCitnZW5jZmcgMiAweDE1MCA0IDIgMCAxIDB4MTY4IDkgNDkxNTIwMCAKKword2lsbCBwcmludCBhIHNrZWxldG9uIHo4NTMwZHJ2LmNvbmYgZm9yIHRoZSBPcHRvU0NDIHRvIHN0ZG91dC4KKworZ2VuY2ZnIDIgMHgzMDAgMiA0IDUgLTQgMCA3IDQ5MTUyMDAgMHgxMAorCitkb2VzIHRoZSBzYW1lIGZvciB0aGUgQkFZQ09NIFVTQ0MgY2FyZC4gSW4gbXkgb3BpbmlvbiBpdCBpcyBtdWNoIGVhc2llcgordG8gZWRpdCBzY2NfY29uZmlnLmguLi4gCisKKworMS4yLjIgY2hhbm5lbCBjb25maWd1cmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGNoYW5uZWwgZGVmaW5pdGlvbiBpcyBkaXZpZGVkIGludG8gdGhyZWUgc3ViIHNlY3Rpb25zIGZvciBlYWNoCitjaGFubmVsOgorCitBbiBleGFtcGxlIGZvciBzY2MwOgorCisjIERFVklDRQorCitkZXZpY2Ugc2NjMAkjIHRoZSBkZXZpY2UgZm9yIHRoZSBmb2xsb3dpbmcgcGFyYW1zCisKKyMgTU9ERU0gLyBCVUZGRVJTCisKK3NwZWVkIDEyMDAJCSMgdGhlIGRlZmF1bHQgYmF1ZHJhdGUKK2Nsb2NrIGRwbGwJCSMgY2xvY2sgc291cmNlOiAKKwkJCSMgCWRwbGwgICAgID0gbm9ybWFsIGhhbGYgZHVwbGV4IG9wZXJhdGlvbgorCQkJIyAJZXh0ZXJuYWwgPSBNT0RFTSBwcm92aWRlcyBvd24gUngvVHggY2xvY2sKKwkJCSMJZGl2aWRlciAgPSB1c2UgZnVsbCBkdXBsZXggZGl2aWRlciBpZgorCQkJIwkJICAgaW5zdGFsbGVkICgxKQorbW9kZSBucnppCQkjIEhETEMgZW5jb2RpbmcgbW9kZQorCQkJIwlucnppID0gMWsyIE1PREVNLCBHM1JVSCA5azYgTU9ERU0KKwkJCSMJbnJ6ICA9IERGOUlDIDlrNiBNT0RFTQorCQkJIworYnVmc2l6ZQkzODQJCSMgc2l6ZSBvZiBidWZmZXJzLiBOb3RlIHRoYXQgdGhpcyBtdXN0IGluY2x1ZGUKKwkJCSMgdGhlIEFYLjI1IGhlYWRlciwgbm90IG9ubHkgdGhlIGRhdGEgZmllbGQhCisJCQkjIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gMzg0KQorCisjIEtJU1MgKExheWVyIDEpCisKK3R4ZGVsYXkgMzYgICAgICAgICAgICAgICMgKHNlZSBjaGFwdGVyIDEuNCkKK3BlcnNpc3QgNjQKK3Nsb3QgICAgOAordGFpbCAgICA4CitmdWxsZHVwIDAKK3dhaXQgICAgMTIKK21pbiAgICAgMworbWF4a2V5ICA3CitpZGxlICAgIDMKK21heGRlZiAgMTIwCitncm91cCAgIDAKK3R4b2ZmICAgb2ZmCitzb2Z0ZGNkIG9uICAgICAgICAgICAgICAgICAgIAorc2xpcCAgICBvZmYKKworVGhlIG9yZGVyIFdJVEhJTiB0aGVzZSBzZWN0aW9ucyBpcyB1bmltcG9ydGFudC4gVGhlIG9yZGVyIE9GIHRoZXNlCitzZWN0aW9ucyBJUyBpbXBvcnRhbnQuIFRoZSBNT0RFTSBwYXJhbWV0ZXJzIGFyZSBzZXQgd2l0aCB0aGUgZmlyc3QKK3JlY29nbml6ZWQgS0lTUyBwYXJhbWV0ZXIuLi4KKworUGxlYXNlIG5vdGUgdGhhdCB5b3UgY2FuIGluaXRpYWxpemUgdGhlIGJvYXJkIG9ubHkgb25jZSBhZnRlciBib290Cisob3IgaW5zbW9kKS4gWW91IGNhbiBjaGFuZ2UgYWxsIHBhcmFtZXRlcnMgYnV0ICJtb2RlIiBhbmQgImNsb2NrIiAKK2xhdGVyIHdpdGggdGhlIFNjY3BhcmFtIHByb2dyYW0gb3IgdGhyb3VnaCBLSVNTLiBKdXN0IHRvIGF2b2lkIAorc2VjdXJpdHkgaG9sZXMuLi4gCisKKygxKSB0aGlzIGRpdmlkZXIgaXMgdXN1YWxseSBtb3VudGVkIG9uIHRoZSBTQ0MtUEJDIChQQTBIWlApIG9yIG5vdAorICAgIHByZXNlbnQgYXQgYWxsIChCYXlDb20pLiBJdCBmZWVkcyBiYWNrIHRoZSBvdXRwdXQgb2YgdGhlIERQTEwgCisgICAgKGRpZ2l0YWwgcGxsKSBhcyB0cmFuc21pdCBjbG9jay4gVXNpbmcgdGhpcyBtb2RlIHdpdGhvdXQgYSBkaXZpZGVyIAorICAgIGluc3RhbGxlZCB3aWxsIG5vcm1hbGx5IHJlc3VsdCBpbiBrZXlpbmcgdGhlIHRyYW5zY2VpdmVyIHVudGlsIAorICAgIG1heGtleSBleHBpcmVzIC0tLSBvZiBjb3Vyc2Ugd2l0aG91dCBzZW5kaW5nIGFueXRoaW5nICh1c2VmdWwpLgorCisyLiBBdHRhY2htZW50IG9mIGEgY2hhbm5lbCBieSB5b3VyIEFYLjI1IHNvZnR3YXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzIuMSBLZXJuZWwgQVguMjUKKz09PT09PT09PT09PT09PT0KKworVG8gc2V0IHVwIGFuIEFYLjI1IGRldmljZSB5b3UgY2FuIHNpbXBseSB0eXBlOgorCisJaWZjb25maWcgc2NjMCA0NC4xMjguMS4xIGh3IGF4MjUgZGwwdGhhLTcKKworVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldHdvcmsgaW50ZXJmYWNlIHdpdGggdGhlIElQIG51bWJlciA0NC4xMjguMjAuMTA3IAorYW5kIHRoZSBjYWxsc2lnbiAiZGwwdGhhIi4gSWYgeW91IGRvIG5vdCBoYXZlIGFueSBJUCBudW1iZXIgKHlldCkgeW91IAorY2FuIHVzZSBhbnkgb2YgdGhlIDQ0LjEyOC4wLjAgbmV0d29yay4gTm90ZSB0aGF0IHlvdSBkbyBub3QgbmVlZCAKK2F4YXR0YWNoLiBUaGUgcHVycG9zZSBvZiBheGF0dGFjaCAobGlrZSBzbGF0dGFjaCkgaXMgdG8gY3JlYXRlIGEgS0lTUyAKK25ldHdvcmsgZGV2aWNlIGxpbmtlZCB0byBhIFRUWS4gUGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIAorYXgyNS11dGlscyBhbmQgdGhlIEFYLjI1LUhPV1RPIHRvIGxlYXJuIGhvdyB0byBzZXQgdGhlIHBhcmFtZXRlcnMgb2YKK3RoZSBrZXJuZWwgQVguMjUuCisKKzIuMiBOT1MsIE5FVCBhbmQgVEZLSVNTCis9PT09PT09PT09PT09PT09PT09PT09PQorCitTaW5jZSB0aGUgVFRZIGRyaXZlciAoYWthIEtJU1MgVE5DIGVtdWxhdGlvbikgaXMgZ29uZSB5b3UgbmVlZAordG8gZW11bGF0ZSB0aGUgb2xkIGJlaGF2aW91ci4gVGhlIGNvc3Qgb2YgdXNpbmcgdGhlc2UgcHJvZ3JhbXMgaXMKK3RoYXQgeW91IHByb2JhYmx5IG5lZWQgdG8gY29tcGlsZSB0aGUga2VybmVsIEFYLjI1LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKK3lvdSBhY3R1YWxseSB1c2UgaXQgb3Igbm90LiBGaXJzdCBzZXR1cCB5b3VyIC9ldGMvYXgyNS9heHBvcnRzLAorZm9yIGV4YW1wbGU6CisKKwk5azYJZGwwdGhhLTkgIDk2MDAgIDI1NSA0IDk2MDAgYmF1ZCBwb3J0IChzY2MzKQorCWF4bGluawlkbDB0aGEtMTUgMzg0MDAgMjU1IDQgTGluayB0byBOT1MKKworTm93ICJpZmNvbmZpZyIgdGhlIHNjYyBkZXZpY2U6CisKKwlpZmNvbmZpZyBzY2MzIDQ0LjEyOC4xLjEgaHcgYXgyNSBkbDB0aGEtOQorCitZb3UgY2FuIG5vdyBheGF0dGFjaCBhIHBzZXVkby1UVFk6CisKKwlheGF0dGFjaCAvZGV2L3B0eXMwIGF4bGluaworCithbmQgc3RhcnQgeW91ciBOT1MgYW5kIGF0dGFjaCAvZGV2L3B0eXMwIHRoZXJlLiBUaGUgcHJvYmxlbSBpcyB0aGF0CitOT1MgaXMgcmVhY2hhYmxlIG9ubHkgdmlhIGRpZ2lwZWF0aW5nIHRocm91Z2ggdGhlIGtlcm5lbCBBWC4yNQorKGRpc2FzdHJvdXMgb24gYSBEQU1BIGNvbnRyb2xsZWQgY2hhbm5lbCkuIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwKK2NvbmZpZ3VyZSAicnhlY2hvIiB0byBlY2hvIHRoZSBpbmNvbWluZyBmcmFtZXMgZnJvbSAiOWs2IiB0byAiYXhsaW5rIgorYW5kIG91dGdvaW5nIGZyYW1lcyBmcm9tICJheGxpbmsiIHRvICI5azYiIGFuZCBzdGFydDoKKworCXJ4ZWNobworCitPciBzaW1wbHkgdXNlICJraXNzYnJpZGdlIiBjb21pbmcgd2l0aCB6ODUzMGRydi11dGlsczoKKworCWlmY29uZmlnIHNjYzMgaHcgYXgyNSBkbDB0aGEtOQorCWtpc3NicmlkZ2Ugc2NjMyAvZGV2L3B0eXMwCisKKworMy4gQWRqdXN0bWVudCBhbmQgRGlzcGxheSBvZiBwYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMy4xIERpc3BsYXlpbmcgU0NDIFBhcmFtZXRlcnM6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT25jZSBhIFNDQyBjaGFubmVsIGhhcyBiZWVuIGF0dGFjaGVkLCB0aGUgcGFyYW1ldGVyIHNldHRpbmdzIGFuZCAKK3NvbWUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGNhbiBiZSBzaG93biB1c2luZyB0aGUgcGFyYW0gcHJvZ3JhbToKKworZGwxYmtlLXU6fiQgc2Njc3RhdCBzY2MwCisKK1BhcmFtZXRlcnM6CisKK3NwZWVkICAgICAgIDogMTIwMCBiYXVkCit0eGRlbGF5ICAgICA6IDM2CitwZXJzaXN0ICAgICA6IDI1NQorc2xvdHRpbWUgICAgOiAwCit0eHRhaWwgICAgICA6IDgKK2Z1bGxkdXAgICAgIDogMQord2FpdHRpbWUgICAgOiAxMgorbWludGltZSAgICAgOiAzIHNlYworbWF4a2V5dXAgICAgOiA3IHNlYworaWRsZXRpbWUgICAgOiAzIHNlYworbWF4ZGVmZXIgICAgOiAxMjAgc2VjCitncm91cCAgICAgICA6IDB4MDAKK3R4b2ZmICAgICAgIDogb2ZmCitzb2Z0ZGNkICAgICA6IG9uCitTTElQICAgICAgICA6IG9mZgorCitTdGF0dXM6CisKK0hETEMgICAgICAgICAgICAgICAgICBaODUzMCAgICAgICAgICAgSW50ZXJydXB0cyAgICAgICAgIEJ1ZmZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTZW50ICAgICAgIDogICAgIDI3MyAgUnhPdmVyIDogICAgIDAgIFJ4SW50cyA6ICAgMTI1MDc0ICBTaXplICAgIDogIDM4NAorUmVjZWl2ZWQgICA6ICAgIDEwOTUgIFR4VW5kZXI6ICAgICAwICBUeEludHMgOiAgICAgNDY4NCAgTm9TcGFjZSA6ICAgIDAKK1J4RXJyb3JzICAgOiAgICAxNTkxICAgICAgICAgICAgICAgICAgRXhJbnRzIDogICAgMTE3NzYKK1R4RXJyb3JzICAgOiAgICAgICAwICAgICAgICAgICAgICAgICAgU3BJbnRzIDogICAgIDE1MDMKK1R4IFN0YXRlICAgOiAgICBpZGxlCisKKworVGhlIHN0YXR1cyBpbmZvIHNob3duIGlzOgorCitTZW50CQktIG51bWJlciBvZiBmcmFtZXMgdHJhbnNtaXR0ZWQKK1JlY2VpdmVkCS0gbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZAorUnhFcnJvcnMJLSBudW1iZXIgb2YgcmVjZWl2ZSBlcnJvcnMgKENSQywgQUJPUlQpCitUeEVycm9ycwktIG51bWJlciBvZiBkaXNjYXJkZWQgVHggZnJhbWVzIChkdWUgdG8gdmFyaW91cyByZWFzb25zKSAKK1R4IFN0YXRlCS0gc3RhdHVzIG9mIHRoZSBUeCBpbnRlcnJ1cHQgaGFuZGxlcjogaWRsZS9idXN5L2FjdGl2ZS90YWlsICgyKQorUnhPdmVyCQktIG51bWJlciBvZiByZWNlaXZlciBvdmVycnVucworVHhVbmRlcgkJLSBudW1iZXIgb2YgdHJhbnNtaXR0ZXIgdW5kZXJydW5zCitSeEludHMJCS0gbnVtYmVyIG9mIHJlY2VpdmVyIGludGVycnVwdHMKK1R4SW50cwkJLSBudW1iZXIgb2YgdHJhbnNtaXR0ZXIgaW50ZXJydXB0cworRXBJbnRzCQktIG51bWJlciBvZiByZWNlaXZlciBzcGVjaWFsIGNvbmRpdGlvbiBpbnRlcnJ1cHRzCitTcEludHMJCS0gbnVtYmVyIG9mIGV4dGVybmFsL3N0YXR1cyBpbnRlcnJ1cHRzCitTaXplCQktIG1heGltdW0gc2l6ZSBvZiBhbiBBWC4yNSBmcmFtZSAoKndpdGgqIEFYLjI1IGhlYWRlcnMhKQorTm9TcGFjZQkJLSBudW1iZXIgb2YgdGltZXMgYSBidWZmZXIgY291bGQgbm90IGdldCBhbGxvY2F0ZWQKKworQW4gb3ZlcnJ1biBpcyBhYm5vcm1hbC4gSWYgbG90cyBvZiB0aGVzZSBvY2N1ciwgdGhlIHByb2R1Y3Qgb2YKK2JhdWRyYXRlIGFuZCBudW1iZXIgb2YgaW50ZXJmYWNlcyBpcyB0b28gaGlnaCBmb3IgdGhlIHByb2Nlc3NpbmcKK3Bvd2VyIG9mIHlvdXIgY29tcHV0ZXIuIE5vU3BhY2UgZXJyb3JzIGFyZSB1bmxpa2VseSB0byBiZSBjYXVzZWQgYnkgdGhlCitkcml2ZXIgb3IgdGhlIGtlcm5lbCBBWC4yNS4KKworCiszLjIgU2V0dGluZyBQYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09CisKKworVGhlIHNldHRpbmcgb2YgcGFyYW1ldGVycyBvZiB0aGUgZW11bGF0ZWQgS0lTUyBUTkMgaXMgZG9uZSBpbiB0aGUgCitzYW1lIHdheSBpbiB0aGUgU0NDIGRyaXZlci4gWW91IGNhbiBjaGFuZ2UgcGFyYW1ldGVycyBieSB1c2luZwordGhlIGtpc3NwYXJtcyBwcm9ncmFtIGZyb20gdGhlIGF4MjUtdXRpbHMgcGFja2FnZSBvciB1c2UgdGhlIHByb2dyYW0gCisic2NjcGFyYW0iOgorCisgICAgIHNjY3BhcmFtIDxkZXZpY2U+IDxwYXJhbW5hbWU+IDxkZWNpbWFsLXxoZXhhZGVjaW1hbCB2YWx1ZT4KKworWW91IGNhbiBjaGFuZ2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitwYXJhbQkgICAgOiB2YWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzcGVlZCAgICAgICA6IDEyMDAKK3R4ZGVsYXkgICAgIDogMzYKK3BlcnNpc3QgICAgIDogMjU1CitzbG90dGltZSAgICA6IDAKK3R4dGFpbCAgICAgIDogOAorZnVsbGR1cCAgICAgOiAxCit3YWl0dGltZSAgICA6IDEyCittaW50aW1lICAgICA6IDMKK21heGtleXVwICAgIDogNworaWRsZXRpbWUgICAgOiAzCittYXhkZWZlciAgICA6IDEyMAorZ3JvdXAgICAgICAgOiAweDAwCit0eG9mZiAgICAgICA6IG9mZgorc29mdGRjZCAgICAgOiBvbgorU0xJUCAgICAgICAgOiBvZmYKKworCitUaGUgcGFyYW1ldGVycyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKworc3BlZWQ6CisgICAgIFRoZSBiYXVkcmF0ZSBvbiB0aGlzIGNoYW5uZWwgaW4gYml0cy9zZWMKKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzMgc3BlZWQgOTYwMAorCit0eGRlbGF5OgorICAgICBUaGUgZGVsYXkgKGluIHVuaXRzIG9mIDEwIG1zKSBhZnRlciBrZXlpbmcgb2YgdGhlIAorICAgICB0cmFuc21pdHRlciwgdW50aWwgdGhlIGZpcnN0IGJ5dGUgaXMgc2VudC4gVGhpcyBpcyB1c3VhbGx5IAorICAgICBjYWxsZWQgIlRYREVMQVkiIGluIGEgVE5DLiAgV2hlbiAwIGlzIHNwZWNpZmllZCwgdGhlIGRyaXZlciAKKyAgICAgd2lsbCBqdXN0IHdhaXQgdW50aWwgdGhlIENUUyBzaWduYWwgaXMgYXNzZXJ0ZWQuIFRoaXMgCisgICAgIGFzc3VtZXMgdGhlIHByZXNlbmNlIG9mIGEgdGltZXIgb3Igb3RoZXIgY2lyY3VpdHJ5IGluIHRoZSAKKyAgICAgTU9ERU0gYW5kL29yIHRyYW5zbWl0dGVyLCB0aGF0IGFzc2VydHMgQ1RTIHdoZW4gdGhlIAorICAgICB0cmFuc21pdHRlciBpcyByZWFkeSBmb3IgZGF0YS4KKyAgICAgQSBub3JtYWwgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgMzAtMzYuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MwIHR4ZCAyMAorCitwZXJzaXN0OgorICAgICBUaGlzIGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIGtleWVkIAorICAgICB3aGVuIHRoZSBjaGFubmVsIGlzIGZvdW5kIHRvIGJlIGZyZWUuICBJdCBpcyBhIHZhbHVlIGZyb20gMCAKKyAgICAgdG8gMjU1LCBhbmQgdGhlIHByb2JhYmlsaXR5IGlzICh2YWx1ZSsxKS8yNTYuICBUaGUgdmFsdWUgCisgICAgIHNob3VsZCBiZSBzb21ld2hlcmUgbmVhciA1MC02MCwgYW5kIHNob3VsZCBiZSBsb3dlcmVkIHdoZW4gCisgICAgIHRoZSBjaGFubmVsIGlzIHVzZWQgbW9yZSBoZWF2aWx5LgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMiBwZXJzaXN0IDIwCisKK3Nsb3R0aW1lOgorICAgICBUaGlzIGlzIHRoZSB0aW1lIGJldHdlZW4gc2FtcGxlcyBvZiB0aGUgY2hhbm5lbC4gSXQgaXMgCisgICAgIGV4cHJlc3NlZCBpbiB1bml0cyBvZiAxMCBtcy4gIEFib3V0IDIwMC0zMDAgbXMgKHZhbHVlIDIwLTMwKSAKKyAgICAgc2VlbXMgdG8gYmUgYSBnb29kIHZhbHVlLgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMCBzbG90IDIwCisKK3RhaWw6CisgICAgIFRoZSB0aW1lIHRoZSB0cmFuc21pdHRlciB3aWxsIHJlbWFpbiBrZXllZCBhZnRlciB0aGUgbGFzdCAKKyAgICAgYnl0ZSBvZiBhIHBhY2tldCBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0byB0aGUgU0NDLiBUaGlzIGlzIAorICAgICBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ1JDIGFuZCBhIGZsYWcgc3RpbGwgaGF2ZSB0byBsZWF2ZSB0aGUgCisgICAgIFNDQyBiZWZvcmUgdGhlIHRyYW5zbWl0dGVyIGlzIGtleWVkIGRvd24uIFRoZSB2YWx1ZSBkZXBlbmRzIAorICAgICBvbiB0aGUgYmF1ZHJhdGUgc2VsZWN0ZWQuICBBIGZldyBjaGFyYWN0ZXIgdGltZXMgc2hvdWxkIGJlIAorICAgICBzdWZmaWNpZW50LCBlLmcuIDQwbXMgYXQgMTIwMCBiYXVkLiAodmFsdWUgNCkKKyAgICAgVGhlIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGlzIGluIDEwIG1zIHVuaXRzLgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMiA0CisKK2Z1bGw6CisgICAgIFRoZSBmdWxsLWR1cGxleCBtb2RlIHN3aXRjaC4gVGhpcyBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgCisgICAgIHZhbHVlczoKKworICAgICAwOiAgIFRoZSBpbnRlcmZhY2Ugd2lsbCBvcGVyYXRlIGluIENTTUEgbW9kZSAodGhlIG5vcm1hbCAKKyAgICAgICAgICBoYWxmLWR1cGxleCBwYWNrZXQgcmFkaW8gb3BlcmF0aW9uKQorICAgICAxOiAgIEZ1bGxkdXBsZXggbW9kZSwgaS5lLiB0aGUgdHJhbnNtaXR0ZXIgd2lsbCBiZSBrZXllZCBhdCAKKyAgICAgICAgICBhbnkgdGltZSwgd2l0aG91dCBjaGVja2luZyB0aGUgcmVjZWl2ZWQgY2Fycmllci4gIEl0IAorICAgICAgICAgIHdpbGwgYmUgdW5rZXllZCB3aGVuIHRoZXJlIGFyZSBubyBwYWNrZXRzIHRvIGJlIHNlbnQuCisgICAgIDI6ICAgTGlrZSAxLCBidXQgdGhlIHRyYW5zbWl0dGVyIHdpbGwgcmVtYWluIGtleWVkLCBhbHNvIAorICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIHBhY2tldHMgdG8gYmUgc2VudC4gIEZsYWdzIHdpbGwgYmUgCisgICAgICAgICAgc2VudCBpbiB0aGF0IGNhc2UsIHVudGlsIGEgdGltZW91dCAocGFyYW1ldGVyIDEwKSAKKyAgICAgICAgICBvY2N1cnMuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MwIGZ1bGxkdXAgb2ZmCisKK3dhaXQ6CisgICAgIFRoZSBpbml0aWFsIHdhaXR0aW1lIGJlZm9yZSBhbnkgdHJhbnNtaXQgYXR0ZW1wdCwgYWZ0ZXIgdGhlIAorICAgICBmcmFtZSBoYXMgYmVlbiBxdWV1ZSBmb3IgdHJhbnNtaXQuICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgCisgICAgIHRoZSBmaXJzdCBzbG90IGluIENTTUEgbW9kZS4gIEluIGZ1bGwgZHVwbGV4IG1vZGVzIGl0IGlzCisgICAgIHNldCB0byAwIGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlLgorICAgICBUaGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgaW4gMTAgbXMgdW5pdHMuIAorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMSB3YWl0IDQKKworbWF4a2V5OgorICAgICBUaGUgbWF4aW1hbCB0aW1lIHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIGtleWVkIHRvIHNlbmQgCisgICAgIHBhY2tldHMsIGluIHNlY29uZHMuICBUaGlzIGNhbiBiZSB1c2VmdWwgb24gYnVzeSBDU01BIAorICAgICBjaGFubmVscywgdG8gYXZvaWQgImdldHRpbmcgYSBiYWQgcmVwdXRhdGlvbiIgd2hlbiB5b3UgYXJlIAorICAgICBnZW5lcmF0aW5nIGEgbG90IG9mIHRyYWZmaWMuICBBZnRlciB0aGUgc3BlY2lmaWVkIHRpbWUgaGFzIAorICAgICBlbGFwc2VkLCBubyBuZXcgZnJhbWUgd2lsbCBiZSBzdGFydGVkLiBJbnN0ZWFkLCB0aGUgdHJhbnMtCisgICAgIG1pdHRlciB3aWxsIGJlIHN3aXRjaGVkIG9mZiBmb3IgYSBzcGVjaWZpZWQgdGltZSAocGFyYW1ldGVyIAorICAgICBtaW4pLCBhbmQgdGhlbiB0aGUgc2VsZWN0ZWQgYWxnb3JpdGhtIGZvciBrZXl1cCB3aWxsIGJlIAorICAgICBzdGFydGVkIGFnYWluLgorICAgICBUaGUgdmFsdWUgMCBhcyB3ZWxsIGFzICJvZmYiIHdpbGwgZGlzYWJsZSB0aGlzIGZlYXR1cmUsIAorICAgICBhbmQgYWxsb3cgaW5maW5pdGUgdHJhbnNtaXNzaW9uIHRpbWUuIAorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMCBtYXhrIDIwCisKK21pbjoKKyAgICAgVGhpcyBpcyB0aGUgdGltZSB0aGUgdHJhbnNtaXR0ZXIgd2lsbCBiZSBzd2l0Y2hlZCBvZmYgd2hlbiAKKyAgICAgdGhlIG1heGltdW0gdHJhbnNtaXNzaW9uIHRpbWUgaXMgZXhjZWVkZWQuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MzIG1pbiAxMAorCitpZGxlCisgICAgIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbWF4aW11bSBpZGxlIHRpbWUgaW4gZnVsbCBkdXBsZXggCisgICAgIDIgbW9kZSwgaW4gc2Vjb25kcy4gIFdoZW4gbm8gZnJhbWVzIGhhdmUgYmVlbiBzZW50IGZvciB0aGlzIAorICAgICB0aW1lLCB0aGUgdHJhbnNtaXR0ZXIgd2lsbCBiZSBrZXllZCBkb3duLiAgQSB2YWx1ZSBvZiAwIGlzCisgICAgIGhhcyBzYW1lIHJlc3VsdCBhcyB0aGUgZnVsbGR1cGxleCBtb2RlIDEuIFRoaXMgcGFyYW1ldGVyCisgICAgIGNhbiBiZSBkaXNhYmxlZC4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzIgaWRsZSBvZmYJIyB0cmFuc21pdCBmb3JldmVyCisKK21heGRlZmVyCisgICAgIFRoaXMgaXMgdGhlIG1heGltdW0gdGltZSAoaW4gc2Vjb25kcykgdG8gd2FpdCBmb3IgYSBmcmVlIGNoYW5uZWwKKyAgICAgdG8gc2VuZC4gV2hlbiB0aGlzIHRpbWVyIGV4cGlyZXMgdGhlIHRyYW5zbWl0dGVyIHdpbGwgYmUga2V5ZWQgCisgICAgIElNTUVESUFURUxZLiBJZiB5b3UgbG92ZSB0byBnZXQgdHJvdWJsZSB3aXRoIG90aGVyIHVzZXJzIHlvdQorICAgICBzaG91bGQgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxvdyB2YWx1ZSA7LSkKKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzAgbWF4ZGVmZXIgMjQwCSMgMiBtaW51dGVzCisKKwordHhvZmY6CisgICAgIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSAwLCB0aGUgdHJhbnNtaXNzaW9uIG9mIHBhY2tldHMKKyAgICAgaXMgZW5hYmxlLiBPdGhlcndpc2UgaXQgaXMgZGlzYWJsZWQuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MyIHR4b2ZmIG9uCisKK2dyb3VwOgorICAgICBJdCBpcyBwb3NzaWJsZSB0byBidWlsZCBzcGVjaWFsIHJhZGlvIGVxdWlwbWVudCB0byB1c2UgbW9yZSB0aGFuIAorICAgICBvbmUgZnJlcXVlbmN5IG9uIHRoZSBzYW1lIGJhbmQsIGUuZy4gdXNpbmcgc2V2ZXJhbCByZWNlaXZlcnMgYW5kIAorICAgICBvbmx5IG9uZSB0cmFuc21pdHRlciB0aGF0IGNhbiBiZSBzd2l0Y2hlZCBiZXR3ZWVuIGZyZXF1ZW5jaWVzLgorICAgICBBbHNvLCB5b3UgY2FuIGNvbm5lY3Qgc2V2ZXJhbCByYWRpb3MgdGhhdCBhcmUgYWN0aXZlIG9uIHRoZSBzYW1lIAorICAgICBiYW5kLiAgSW4gdGhlc2UgY2FzZXMsIGl0IGlzIG5vdCBwb3NzaWJsZSwgb3Igbm90IGEgZ29vZCBpZGVhLCB0byAKKyAgICAgdHJhbnNtaXQgb24gbW9yZSB0aGFuIG9uZSBmcmVxdWVuY3kuICBUaGUgU0NDIGRyaXZlciBwcm92aWRlcyBhIAorICAgICBtZXRob2QgdG8gbG9jayB0cmFuc21pdHRlcnMgb24gZGlmZmVyZW50IGludGVyZmFjZXMsIHVzaW5nIHRoZSAKKyAgICAgInBhcmFtIDxpbnRlcmZhY2U+IGdyb3VwIDx4PiIgY29tbWFuZC4gIFRoaXMgd2lsbCBvbmx5IHdvcmsgd2hlbiAKKyAgICAgeW91IGFyZSB1c2luZyBDU01BIG1vZGUgKHBhcmFtZXRlciBmdWxsID0gMCkuCisgICAgIFRoZSBudW1iZXIgPHg+IG11c3QgYmUgMCBpZiB5b3Ugd2FudCBubyBncm91cCByZXN0cmljdGlvbnMsIGFuZCAKKyAgICAgY2FuIGJlIGNvbXB1dGVkIGFzIGZvbGxvd3MgdG8gY3JlYXRlIHJlc3RyaWN0ZWQgZ3JvdXBzOgorICAgICA8eD4gaXMgdGhlIHN1bSBvZiBzb21lIE9DVEFMIG51bWJlcnM6CisKKyAgICAgMjAwICBUaGlzIHRyYW5zbWl0dGVyIHdpbGwgb25seSBiZSBrZXllZCB3aGVuIGFsbCBvdGhlciAKKyAgICAgICAgICB0cmFuc21pdHRlcnMgaW4gdGhlIGdyb3VwIGFyZSBvZmYuCisgICAgIDEwMCAgVGhpcyB0cmFuc21pdHRlciB3aWxsIG9ubHkgYmUga2V5ZWQgd2hlbiB0aGUgY2FycmllciAKKyAgICAgICAgICBkZXRlY3Qgb2YgYWxsIG90aGVyIGludGVyZmFjZXMgaW4gdGhlIGdyb3VwIGlzIG9mZi4KKyAgICAgMHh4ICBBIGJ5dGUgdGhhdCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgZGlmZmVyZW50IGdyb3Vwcy4gIAorICAgICAgICAgIEludGVyZmFjZXMgYXJlIGluIHRoZSBzYW1lIGdyb3VwLCB3aGVuIHRoZSBsb2dpY2FsIEFORCAKKyAgICAgICAgICBiZXR3ZWVuIHRoZWlyIHh4IHZhbHVlcyBpcyBub256ZXJvLgorCisgICAgIEV4YW1wbGVzOgorICAgICBXaGVuIDIgaW50ZXJmYWNlcyB1c2UgZ3JvdXAgMjAxLCB0aGVpciB0cmFuc21pdHRlcnMgd2lsbCBuZXZlciBiZSAKKyAgICAga2V5ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgV2hlbiAyIGludGVyZmFjZXMgdXNlIGdyb3VwIDEwMSwgdGhlIHRyYW5zbWl0dGVycyB3aWxsIG9ubHkga2V5IAorICAgICB3aGVuIGJvdGggY2hhbm5lbHMgYXJlIGNsZWFyIGF0IHRoZSBzYW1lIHRpbWUuICBXaGVuIGdyb3VwIDMwMSwgCisgICAgIHRoZSB0cmFuc21pdHRlcnMgd2lsbCBub3QgYmUga2V5ZWQgYXQgdGhlIHNhbWUgdGltZS4KKworICAgICBEb24ndCBmb3JnZXQgdG8gY29udmVydCB0aGUgb2N0YWwgbnVtYmVycyBpbnRvIGRlY2ltYWwgYmVmb3JlCisgICAgIHlvdSBzZXQgdGhlIHBhcmFtZXRlci4KKworICAgICBFeGFtcGxlOiAodG8gYmUgd3JpdHRlbikKKworc29mdGRjZDoKKyAgICAgdXNlIGEgc29mdHdhcmUgZGNkIGluc3RlYWQgb2YgdGhlIHJlYWwgb25lLi4uIFVzZWZ1bCBmb3IgYSB2ZXJ5CisgICAgIHNsb3cgc3F1ZWxjaC4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzAgc29mdCBvbgorCisKKzQuIFByb2JsZW1zIAorPT09PT09PT09PT0KKworSWYgeW91IGhhdmUgdHgtcHJvYmxlbXMgd2l0aCB5b3VyIEJheUNvbSBVU0NDIGNhcmQgcGxlYXNlIGNoZWNrCit0aGUgbWFudWZhY3R1cmVyIG9mIHRoZSA4NTMwLiBTR1MgY2hpcHMgaGF2ZSBhIHNsaWdodGx5CitkaWZmZXJlbnQgdGltaW5nLiBUcnkgWmlsb2cuLi4gIEEgc29sdXRpb24gaXMgdG8gd3JpdGUgdG8gcmVnaXN0ZXIgOCAKK2luc3RlYWQgdG8gdGhlIGRhdGEgcG9ydCwgYnV0IHRoaXMgd29uJ3Qgd29yayB3aXRoIHRoZSBFU0NDIGNoaXBzLiAKKypTSUdIISoKKworQSB2ZXJ5IGNvbW1vbiBwcm9ibGVtIGlzIHRoYXQgdGhlIFBUVCBsb2NrcyB1bnRpbCB0aGUgbWF4a2V5dXAgdGltZXIKK2V4cGlyZXMsIGFsdGhvdWdoIGludGVycnVwdHMgYW5kIGNsb2NrIHNvdXJjZSBhcmUgY29ycmVjdC4gSW4gbW9zdAorY2FzZXMgY29tcGlsaW5nIHRoZSBkcml2ZXIgd2l0aCBDT05GSUdfU0NDX0RFTEFZIChzZXQgd2l0aAorbWFrZSBjb25maWcpIHNvbHZlcyB0aGUgcHJvYmxlbXMuIEZvciBtb3JlIGhpbnRzIHJlYWQgdGhlIChwc2V1ZG8pIEZBUSAKK2FuZCB0aGUgZG9jdW1lbnRhdGlvbiBjb21pbmcgd2l0aCB6ODUzMGRydi11dGlscy4KKworSSBnb3QgcmVwb3J0cyB0aGF0IHRoZSBkcml2ZXIgaGFzIHByb2JsZW1zIG9uIHNvbWUgMzg2LWJhc2VkIHN5c3RlbXMuCisoaS5lLiBBbXN0cmFkKSBUaG9zZSBzeXN0ZW1zIGhhdmUgYSBib2d1cyBBVCBidXMgdGltaW5nIHdoaWNoIHdpbGwKK2xlYWQgdG8gZGVsYXllZCBhbnN3ZXJzIG9uIGludGVycnVwdHMuIFlvdSBjYW4gcmVjb2duaXplIHRoZXNlCitwcm9ibGVtcyBieSBsb29raW5nIGF0IHRoZSBvdXRwdXQgb2YgU2Njc3RhdCBmb3IgdGhlIHN1c3BlY3RlZAorcG9ydC4gSWYgaXQgc2hvd3MgdW5kZXItIGFuZCBvdmVycnVucyB5b3Ugb3duIHN1Y2ggYSBzeXN0ZW0uCisKK0RlbGF5ZWQgcHJvY2Vzc2luZyBvZiByZWNlaXZlZCBkYXRhOiBUaGlzIGRlcGVuZHMgb24KKworLSB0aGUga2VybmVsIHZlcnNpb24KKworLSBrZXJuZWwgcHJvZmlsaW5nIGNvbXBpbGVkIG9yIG5vdAorCistIGEgaGlnaCBpbnRlcnJ1cHQgbG9hZAorCistIGEgaGlnaCBsb2FkIG9mIHRoZSBtYWNoaW5lIC0tLSBydW5uaW5nIFgsIFhtb3JwaCwgWFYgYW5kIFBvdnJheSwKKyAgd2hpbGUgY29tcGlsaW5nIHRoZSBrZXJuZWwuLi4gaG1tIC4uLiBldmVuIHdpdGggMzIgTUIgUkFNIC4uLiAgOy0pCisgIE9yIHJ1bm5pbmcgYSBuYW1lZCBmb3IgdGhlIHdob2xlIC5hbXByLm9yZyBkb21haW4gb24gYW4gOCBNQgorICBib3guLi4KKworLSB1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHJ4ZWNobyBvciBraXNzYnJpZGdlLgorCitLZXJuZWwgcGFuaWNzOiBwbGVhc2UgcmVhZCAvbGludXgvUkVBRE1FIGFuZCBmaW5kIG91dCBpZiBpdAorcmVhbGx5IG9jY3VycmVkIHdpdGhpbiB0aGUgc2NjIGRyaXZlci4KKworSWYgeW91IGNhbm5vdCBzb2x2ZSBhIHByb2JsZW0sIHNlbmQgbWUKKworLSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLAorLSBpbmZvcm1hdGlvbiBvbiB5b3VyIGhhcmR3YXJlIChjb21wdXRlciBzeXN0ZW0sIHNjYyBib2FyZCwgbW9kZW0pCistIHlvdXIga2VybmVsIHZlcnNpb24KKy0gdGhlIG91dHB1dCBvZiBjYXQgL3Byb2MvbmV0L3o4NTMwCisKKzQuIFRob3IgUkxDMTAwCis9PT09PT09PT09PT09PQorCitNeXN0ZXJpb3VzbHkgdGhpcyBib2FyZCBzZWVtcyBub3QgdG8gd29yayB3aXRoIHRoZSBkcml2ZXIuIEFueW9uZQorZ290IGl0IHVwLWFuZC1ydW5uaW5nPworCisKK01hbnkgdGhhbmtzIHRvIExpbnVzIFRvcnZhbGRzIGFuZCBBbGFuIENveCBmb3IgaW5jbHVkaW5nIHRoZSBkcml2ZXIKK2luIHRoZSBMaW51eCBzdGFuZGFyZCBkaXN0cmlidXRpb24gYW5kIHRoZWlyIHN1cHBvcnQuCisKK0pvZXJnIFJldXRlcglhbXByLW5ldDogZGwxYmtlQGRiMHByYS5hbXByLm9yZworCQlBWC0yNSAgIDogREwxQktFIEAgREIwQUJILiNCQVkuREVVLkVVCisJCUludGVybmV0OiBqcmV1dGVyQHlhaW5hLmRlCisJCVdXVyAgICAgOiBodHRwOi8veWFpbmEuZGUvanJldXRlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dCBiL0RvY3VtZW50YXRpb24vbmZzcm9vdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3ZDRhZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmZzcm9vdC50eHQKQEAgLTAsMCArMSwyMTAgQEAKK01vdW50aW5nIHRoZSByb290IGZpbGVzeXN0ZW0gdmlhIE5GUyAobmZzcm9vdCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1dyaXR0ZW4gMTk5NiBieSBHZXJvIEt1aGxtYW5uIDxnZXJvQGdrbWluaXguaGFuLmRlPgorVXBkYXRlZCAxOTk3IGJ5IE1hcnRpbiBNYXJlcyA8bWpAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PgorCisKKworSWYgeW91IHdhbnQgdG8gdXNlIGEgZGlza2xlc3Mgc3lzdGVtLCBhcyBhbiBYLXRlcm1pbmFsIG9yIHByaW50ZXIKK3NlcnZlciBmb3IgZXhhbXBsZSwgeW91IGhhdmUgdG8gcHV0IHlvdXIgcm9vdCBmaWxlc3lzdGVtIG9udG8gYQorbm9uLWRpc2sgZGV2aWNlLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSByYW1kaXNrIChzZWUgaW5pdHJkLnR4dCBpbgordGhpcyBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24pIG9yIGEgZmlsZXN5c3RlbSBtb3VudGVkCit2aWEgTkZTLiBUaGUgZm9sbG93aW5nIHRleHQgZGVzY3JpYmVzIG9uIGhvdyB0byB1c2UgTkZTIGZvciB0aGUKK3Jvb3QgZmlsZXN5c3RlbS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgdGV4dCAnY2xpZW50JyBtZWFucyB0aGUKK2Rpc2tsZXNzIHN5c3RlbSwgYW5kICdzZXJ2ZXInIG1lYW5zIHRoZSBORlMgc2VydmVyLgorCisKKworCisxLikgRW5hYmxpbmcgbmZzcm9vdCBjYXBhYmlsaXRpZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byB1c2UgbmZzcm9vdCB5b3UgaGF2ZSB0byBzZWxlY3Qgc3VwcG9ydCBmb3IgTkZTIGR1cmluZwora2VybmVsIGNvbmZpZ3VyYXRpb24uIE5vdGUgdGhhdCBORlMgY2Fubm90IGJlIGxvYWRlZCBhcyBhIG1vZHVsZQoraW4gdGhpcyBjYXNlLiBUaGUgY29uZmlndXJhdGlvbiBzY3JpcHQgd2lsbCB0aGVuIGFzayB5b3Ugd2hldGhlcgoreW91IHdhbnQgdG8gdXNlIG5mc3Jvb3QsIGFuZCBpZiB5ZXMgd2hhdCBraW5kIG9mIGF1dG8gY29uZmlndXJhdGlvbgorc3lzdGVtIHlvdSB3YW50IHRvIHVzZS4gU2VsZWN0aW5nIGJvdGggQk9PVFAgYW5kIFJBUlAgaXMgc2FmZS4KKworCisKKworMi4pIEtlcm5lbCBjb21tYW5kIGxpbmUKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlIGtlcm5lbCBoYXMgYmVlbiBsb2FkZWQgYnkgYSBib290IGxvYWRlciAoZWl0aGVyIGJ5IGxvYWRsaW4sCitMSUxPIG9yIGEgbmV0d29yayBib290IHByb2dyYW0pIGl0IGhhcyB0byBiZSB0b2xkIHdoYXQgcm9vdCBmcyBkZXZpY2UKK3RvIHVzZSwgYW5kIHdoZXJlIHRvIGZpbmQgdGhlIHNlcnZlciBhbmQgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeQorb24gdGhlIHNlcnZlciB0byBtb3VudCBhcyByb290LiBUaGlzIGNhbiBiZSBlc3RhYmxpc2hlZCBieSBhIGNvdXBsZQorb2Yga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzOgorCisKK3Jvb3Q9L2Rldi9uZnMKKworICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhlIHBzZXVkby1ORlMtZGV2aWNlLiBOb3RlIHRoYXQgaXQncyBub3QgYQorICByZWFsIGRldmljZSBidXQganVzdCBhIHN5bm9ueW0gdG8gdGVsbCB0aGUga2VybmVsIHRvIHVzZSBORlMgaW5zdGVhZCBvZgorICBhIHJlYWwgZGV2aWNlLgorCisKK25mc3Jvb3Q9WzxzZXJ2ZXItaXA+Ol08cm9vdC1kaXI+Wyw8bmZzLW9wdGlvbnM+XQorCisgIElmIHRoZSBgbmZzcm9vdCcgcGFyYW1ldGVyIGlzIE5PVCBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgZGVmYXVsdAorICAiL3RmdHBib290LyVzIiB3aWxsIGJlIHVzZWQuCisKKyAgPHNlcnZlci1pcD4JU3BlY2lmaWVzIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBORlMgc2VydmVyLiBJZiB0aGlzIGZpZWxkCisJCWlzIG5vdCBnaXZlbiwgdGhlIGRlZmF1bHQgYWRkcmVzcyBhcyBkZXRlcm1pbmVkIGJ5IHRoZQorCQlgaXAnIHZhcmlhYmxlIChzZWUgYmVsb3cpIGlzIHVzZWQuIE9uZSB1c2Ugb2YgdGhpcworCQlwYXJhbWV0ZXIgaXMgZm9yIGV4YW1wbGUgdG8gYWxsb3cgdXNpbmcgZGlmZmVyZW50IHNlcnZlcnMKKwkJZm9yIFJBUlAgYW5kIE5GUy4gVXN1YWxseSB5b3UgY2FuIGxlYXZlIHRoaXMgYmxhbmsuCisKKyAgPHJvb3QtZGlyPglOYW1lIG9mIHRoZSBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlciB0byBtb3VudCBhcyByb290LiBJZgorCQl0aGVyZSBpcyBhICIlcyIgdG9rZW4gaW4gdGhlIHN0cmluZywgdGhlIHRva2VuIHdpbGwgYmUKKwkJcmVwbGFjZWQgYnkgdGhlIEFTQ0lJLXJlcHJlc2VudGF0aW9uIG9mIHRoZSBjbGllbnQncyBJUAorCQlhZGRyZXNzLgorCisgIDxuZnMtb3B0aW9ucz4JU3RhbmRhcmQgTkZTIG9wdGlvbnMuIEFsbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLgorCQlJZiB0aGUgb3B0aW9ucyBmaWVsZCBpcyBub3QgZ2l2ZW4sIHRoZSBmb2xsb3dpbmcgZGVmYXVsdHMKKwkJd2lsbCBiZSB1c2VkOgorCQkJcG9ydAkJPSBhcyBnaXZlbiBieSBzZXJ2ZXIgcG9ydG1hcCBkYWVtb24KKwkJCXJzaXplCQk9IDEwMjQKKwkJCXdzaXplCQk9IDEwMjQKKwkJCXRpbWVvCQk9IDcKKwkJCXJldHJhbnMJCT0gMworCQkJYWNyZWdtaW4JPSAzCisJCQlhY3JlZ21heAk9IDYwCisJCQlhY2Rpcm1pbgk9IDMwCisJCQlhY2Rpcm1heAk9IDYwCisJCQlmbGFncwkJPSBoYXJkLCBub2ludHIsIG5vcG9zaXgsIGN0bywgYWMKKworCitpcD08Y2xpZW50LWlwPjo8c2VydmVyLWlwPjo8Z3ctaXA+OjxuZXRtYXNrPjo8aG9zdG5hbWU+OjxkZXZpY2U+OjxhdXRvY29uZj4KKworICBUaGlzIHBhcmFtZXRlciB0ZWxscyB0aGUga2VybmVsIGhvdyB0byBjb25maWd1cmUgSVAgYWRkcmVzc2VzIG9mIGRldmljZXMKKyAgYW5kIGFsc28gaG93IHRvIHNldCB1cCB0aGUgSVAgcm91dGluZyB0YWJsZS4gSXQgd2FzIG9yaWdpbmFsbHkgY2FsbGVkIGBuZnNhZGRycycsCisgIGJ1dCBub3cgdGhlIGJvb3QtdGltZSBJUCBjb25maWd1cmF0aW9uIHdvcmtzIGluZGVwZW5kZW50bHkgb2YgTkZTLCBzbyBpdAorICB3YXMgcmVuYW1lZCB0byBgaXAnIGFuZCB0aGUgb2xkIG5hbWUgcmVtYWluZWQgYXMgYW4gYWxpYXMgZm9yIGNvbXBhdGliaWxpdHkKKyAgcmVhc29ucy4KKworICBJZiB0aGlzIHBhcmFtZXRlciBpcyBtaXNzaW5nIGZyb20gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUsIGFsbCBmaWVsZHMgYXJlCisgIGFzc3VtZWQgdG8gYmUgZW1wdHksIGFuZCB0aGUgZGVmYXVsdHMgbWVudGlvbmVkIGJlbG93IGFwcGx5LiBJbiBnZW5lcmFsCisgIHRoaXMgbWVhbnMgdGhhdCB0aGUga2VybmVsIHRyaWVzIHRvIGNvbmZpZ3VyZSBldmVyeXRoaW5nIHVzaW5nIGJvdGgKKyAgUkFSUCBhbmQgQk9PVFAgKGRlcGVuZGluZyBvbiB3aGF0IGhhcyBiZWVuIGVuYWJsZWQgZHVyaW5nIGtlcm5lbCBjb25maS0KKyAgZ3VyYXRpb24sIGFuZCBpZiBib3RoIHdoYXQgcHJvdG9jb2wgYW5zd2VyIGdvdCBpbiBmaXJzdCkuCisKKyAgPGNsaWVudC1pcD4JSVAgYWRkcmVzcyBvZiB0aGUgY2xpZW50LiBJZiBlbXB0eSwgdGhlIGFkZHJlc3Mgd2lsbCBlaXRoZXIKKwkJYmUgZGV0ZXJtaW5lZCBieSBSQVJQIG9yIEJPT1RQLiBXaGF0IHByb3RvY29sIGlzIHVzZWQgZGUtCisJCXBlbmRzIG9uIHdoYXQgaGFzIGJlZW4gZW5hYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24KKwkJYW5kIG9uIHRoZSA8YXV0b2NvbmY+IHBhcmFtZXRlci4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90CisJCWVtcHR5LCBuZWl0aGVyIFJBUlAgbm9yIEJPT1RQIHdpbGwgYmUgdXNlZC4KKworICA8c2VydmVyLWlwPglJUCBhZGRyZXNzIG9mIHRoZSBORlMgc2VydmVyLiBJZiBSQVJQIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCisJCXRoZSBjbGllbnQgYWRkcmVzcyBhbmQgdGhpcyBwYXJhbWV0ZXIgaXMgTk9UIGVtcHR5IG9ubHkKKwkJcmVwbGllcyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VydmVyIGFyZSBhY2NlcHRlZC4gVG8gdXNlCisJCWRpZmZlcmVudCBSQVJQIGFuZCBORlMgc2VydmVyLCBzcGVjaWZ5IHlvdXIgUkFSUCBzZXJ2ZXIKKwkJaGVyZSAob3IgbGVhdmUgaXQgYmxhbmspLCBhbmQgc3BlY2lmeSB5b3VyIE5GUyBzZXJ2ZXIgaW4KKwkJdGhlIGBuZnNyb290JyBwYXJhbWV0ZXIgKHNlZSBhYm92ZSkuIElmIHRoaXMgZW50cnkgaXMgYmxhbmsKKwkJdGhlIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciBpcyB1c2VkIHdoaWNoIGFuc3dlcmVkIHRoZSBSQVJQCisJCW9yIEJPT1RQIHJlcXVlc3QuCisKKyAgPGd3LWlwPglJUCBhZGRyZXNzIG9mIGEgZ2F0ZXdheSBpZiB0aGUgc2VydmVyIGlzIG9uIGEgZGlmZmVyZW50CisJCXN1Ym5ldC4gSWYgdGhpcyBlbnRyeSBpcyBlbXB0eSBubyBnYXRld2F5IGlzIHVzZWQgYW5kIHRoZQorCQlzZXJ2ZXIgaXMgYXNzdW1lZCB0byBiZSBvbiB0aGUgbG9jYWwgbmV0d29yaywgdW5sZXNzIGEKKwkJdmFsdWUgaGFzIGJlZW4gcmVjZWl2ZWQgYnkgQk9PVFAuCisKKyAgPG5ldG1hc2s+CU5ldG1hc2sgZm9yIGxvY2FsIG5ldHdvcmsgaW50ZXJmYWNlLiBJZiB0aGlzIGlzIGVtcHR5LAorCQl0aGUgbmV0bWFzayBpcyBkZXJpdmVkIGZyb20gdGhlIGNsaWVudCBJUCBhZGRyZXNzIGFzc3VtaW5nCisJCWNsYXNzZnVsIGFkZHJlc3NpbmcsIHVubGVzcyBvdmVycmlkZGVuIGluIEJPT1RQIHJlcGx5LgorCisgIDxob3N0bmFtZT4JTmFtZSBvZiB0aGUgY2xpZW50LiBJZiBlbXB0eSwgdGhlIGNsaWVudCBJUCBhZGRyZXNzIGlzCisJCXVzZWQgaW4gQVNDSUkgbm90YXRpb24sIG9yIHRoZSB2YWx1ZSByZWNlaXZlZCBieSBCT09UUC4KKworICA8ZGV2aWNlPglOYW1lIG9mIG5ldHdvcmsgZGV2aWNlIHRvIHVzZS4gSWYgdGhpcyBpcyBlbXB0eSwgYWxsCisJCWRldmljZXMgYXJlIHVzZWQgZm9yIFJBUlAgYW5kIEJPT1RQIHJlcXVlc3RzLCBhbmQgdGhlCisJCWZpcnN0IG9uZSB3ZSByZWNlaXZlIGEgcmVwbHkgb24gaXMgY29uZmlndXJlZC4gSWYgeW91IGhhdmUKKwkJb25seSBvbmUgZGV2aWNlLCB5b3UgY2FuIHNhZmVseSBsZWF2ZSB0aGlzIGJsYW5rLgorCisgIDxhdXRvY29uZj4JTWV0aG9kIHRvIHVzZSBmb3IgYXV0b2NvbmZpZ3VyYXRpb24uIElmIHRoaXMgaXMgZWl0aGVyCisJCSdyYXJwJyBvciAnYm9vdHAnLCB0aGUgc3BlY2lmaWVkIHByb3RvY29sIGlzIHVzZWQuCisJCUlmIHRoZSB2YWx1ZSBpcyAnYm90aCcgb3IgZW1wdHksIGJvdGggcHJvdG9jb2xzIGFyZSB1c2VkCisJCXNvIGZhciBhcyB0aGV5IGhhdmUgYmVlbiBlbmFibGVkIGR1cmluZyBrZXJuZWwgY29uZmlndXJhLQorCQl0aW9uLiAnb2ZmJyBtZWFucyBubyBhdXRvY29uZmlndXJhdGlvbi4KKworICBUaGUgPGF1dG9jb25mPiBwYXJhbWV0ZXIgY2FuIGFwcGVhciBhbG9uZSBhcyB0aGUgdmFsdWUgdG8gdGhlIGBpcCcKKyAgcGFyYW1ldGVyICh3aXRob3V0IGFsbCB0aGUgJzonIGNoYXJhY3RlcnMgYmVmb3JlKSBpbiB3aGljaCBjYXNlIGF1dG8tCisgIGNvbmZpZ3VyYXRpb24gaXMgdXNlZC4KKworCisKKworMy4pIEtlcm5lbCBsb2FkZXIKKyAgICAtLS0tLS0tLS0tLS0tCisKK1RvIGdldCB0aGUga2VybmVsIGludG8gbWVtb3J5IGRpZmZlcmVudCBhcHByb2FjaGVzIGNhbiBiZSB1c2VkLiBUaGV5CitkZXBlbmQgb24gd2hhdCBmYWNpbGl0aWVzIGFyZSBhdmFpbGFibGU6CisKKworMy4xKSAgV3JpdGluZyB0aGUga2VybmVsIG9udG8gYSBmbG9wcHkgdXNpbmcgZGQ6CisJQXMgYWx3YXlzIHlvdSBjYW4ganVzdCB3cml0ZSB0aGUga2VybmVsIG9udG8gYSBmbG9wcHkgdXNpbmcgZGQsCisJYnV0IHRoZW4gaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGtlcm5lbCBjb21tYW5kIGxpbmVzIGF0IGFsbC4KKwlUbyBzdWJzdGl0dXRlIHRoZSAncm9vdD0nIHBhcmFtZXRlciwgY3JlYXRlIGEgZHVtbXkgZGV2aWNlIG9uIGFueQorCWxpbnV4IHN5c3RlbSB3aXRoIG1ham9yIG51bWJlciAwIGFuZCBtaW5vciBudW1iZXIgMjU1IHVzaW5nIG1rbm9kOgorCisJCW1rbm9kIC9kZXYvYm9vdDI1NSBjIDAgMjU1CisKKwlUaGVuIGNvcHkgdGhlIGtlcm5lbCB6SW1hZ2UgZmlsZSBvbnRvIGEgZmxvcHB5IHVzaW5nIGRkOgorCisJCWRkIGlmPS91c3Ivc3JjL2xpbnV4L2FyY2gvaTM4Ni9ib290L3pJbWFnZSBvZj0vZGV2L2ZkMAorCisJQW5kIGZpbmFsbHkgdXNlIHJkZXYgdG8gc2V0IHRoZSByb290IGRldmljZToKKworCQlyZGV2IC9kZXYvZmQwIC9kZXYvYm9vdDI1NQorCisJWW91IGNhbiB0aGVuIHJlbW92ZSB0aGUgZHVtbXkgZGV2aWNlIC9kZXYvYm9vdDI1NSBhZ2Fpbi4gVGhlcmUKKwlpcyBubyByZWFsIGRldmljZSBhdmFpbGFibGUgZm9yIGl0LgorCVRoZSBvdGhlciB0d28ga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGNhbm5vdCBiZSBzdWJzdGktCisJdHV0ZWQgd2l0aCByZGV2LiBUaGVyZWZvcmUsIHVzaW5nIHRoaXMgbWV0aG9kIHRoZSBrZXJuZWwgd2lsbAorCWJ5IGRlZmF1bHQgdXNlIFJBUlAgYW5kL29yIEJPT1RQLCBhbmQgaWYgaXQgZ2V0cyBhbiBhbnN3ZXIgdmlhCisJUkFSUCB3aWxsIG1vdW50IHRoZSBkaXJlY3RvcnkgL3RmdHBib290LzxjbGllbnQtaXA+LyBhcyBpdHMKKwlyb290LiBJZiBpdCBnb3QgYSBCT09UUCBhbnN3ZXIgdGhlIGRpcmVjdG9yeSBuYW1lIGluIHRoYXQgYW5zd2VyCisJaXMgdXNlZC4KKworCiszLjIpIFVzaW5nIExJTE8KKwlXaGVuIHVzaW5nIExJTE8geW91IGNhbiBzcGVjaWZ5IGFsbCBuZWNlc3NhcnkgY29tbWFuZCBsaW5lCisJcGFyYW1ldGVycyB3aXRoIHRoZSAnYXBwZW5kPScgY29tbWFuZCBpbiB0aGUgTElMTyBjb25maWd1cmF0aW9uCisJZmlsZS4gSG93ZXZlciwgdG8gdXNlIHRoZSAncm9vdD0nIGNvbW1hbmQgeW91IGFsc28gbmVlZCB0bworCXNldCB1cCBhIGR1bW15IGRldmljZSBhcyBkZXNjcmliZWQgaW4gMy4xIGFib3ZlLiBGb3IgaG93IHRvIHVzZQorCUxJTE8gYW5kIGl0cyAnYXBwZW5kPScgY29tbWFuZCBwbGVhc2UgcmVmZXIgdG8gdGhlIExJTE8KKwlkb2N1bWVudGF0aW9uLgorCiszLjMpIFVzaW5nIGxvYWRsaW4KKwlXaGVuIHlvdSB3YW50IHRvIGJvb3QgTGludXggZnJvbSBhIERPUyBjb21tYW5kIHByb21wdCB3aXRob3V0CisJaGF2aW5nIGEgbG9jYWwgaGFyZCBkaXNrIHRvIG1vdW50IGFzIHJvb3QsIHlvdSBjYW4gdXNlIGxvYWRsaW4uCisJSSB3YXMgdG9sZCB0aGF0IGl0IHdvcmtzLCBidXQgaGF2ZW4ndCB1c2VkIGl0IG15c2VsZiB5ZXQuIEluCisJZ2VuZXJhbCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEga2VybmVsIGNvbW1hbmQgbGluZSBzaW1pLQorCWxhciB0byBob3cgTElMTyBpcyBkb2luZyBpdC4gUGxlYXNlIHJlZmVyIHRvIHRoZSBsb2FkbGluIGRvY3UtCisJbWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorCiszLjQpIFVzaW5nIGEgYm9vdCBST00KKwlUaGlzIGlzIHByb2JhYmx5IHRoZSBtb3N0IGVsZWdhbnQgd2F5IG9mIGJvb3RpbmcgYSBkaXNrbGVzcworCWNsaWVudC4gV2l0aCBhIGJvb3QgUk9NIHRoZSBrZXJuZWwgZ2V0cyBsb2FkZWQgdXNpbmcgdGhlIFRGVFAKKwlwcm90b2NvbC4gQXMgZmFyIGFzIEkga25vdywgbm8gY29tbWVyY2lhbCBib290IFJPTXMgeWV0CisJc3VwcG9ydCBib290aW5nIExpbnV4IG92ZXIgdGhlIG5ldHdvcmssIGJ1dCB0aGVyZSBhcmUgdHdvCisJZnJlZSBpbXBsZW1lbnRhdGlvbnMgb2YgYSBib290IFJPTSBhdmFpbGFibGUgb24gc3Vuc2l0ZS51bmMuZWR1CisJYW5kIGl0cyBtaXJyb3JzLiBUaGV5IGFyZSBjYWxsZWQgJ25ldGJvb3QtbmZzJyBhbmQgJ2V0aGVyYm9vdCcuCisJQm90aCBjb250YWluIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8gYm9vdCBhIGRpc2tsZXNzIExpbnV4IGNsaWVudC4KKworCisKKworNC4pIENyZWRpdHMKKyAgICAtLS0tLS0tCisKKyAgVGhlIG5mc3Jvb3QgY29kZSBpbiB0aGUga2VybmVsIGFuZCB0aGUgUkFSUCBzdXBwb3J0IGhhdmUgYmVlbiB3cml0dGVuCisgIGJ5IEdlcm8gS3VobG1hbm4gPGdlcm9AZ2ttaW5peC5oYW4uZGU+LgorCisgIFRoZSByZXN0IG9mIHRoZSBJUCBsYXllciBhdXRvY29uZmlndXJhdGlvbiBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4KKyAgYnkgTWFydGluIE1hcmVzIDxtakBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3o+LgorCisgIEluIG9yZGVyIHRvIHdyaXRlIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgbmZzcm9vdCBJIHdvdWxkIGxpa2UgdG8gdGhhbmsKKyAgSmVucy1Vd2UgTWFnZXIgPGp1bUBhbnViaXMuaGFuLmRlPiBmb3IgaGlzIGhlbHAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQgYi9Eb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyNWE0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbm1pX3dhdGNoZG9nLnR4dApAQCAtMCwwICsxLDgxIEBACisKK1tOTUkgd2F0Y2hkb2cgaXMgYXZhaWxhYmxlIGZvciB4ODYgYW5kIHg4Ni02NCBhcmNoaXRlY3R1cmVzXQorCitJcyB5b3VyIHN5c3RlbSBsb2NraW5nIHVwIHVucHJlZGljdGFibHk/IE5vIGtleWJvYXJkIGFjdGl2aXR5LCBqdXN0CithIGZydXN0cmF0aW5nIGNvbXBsZXRlIGhhcmQgbG9ja3VwPyBEbyB5b3Ugd2FudCB0byBoZWxwIHVzIGRlYnVnZ2luZworc3VjaCBsb2NrdXBzPyBJZiBhbGwgeWVzIHRoZW4gdGhpcyBkb2N1bWVudCBpcyBkZWZpbml0ZWx5IGZvciB5b3UuCisKK09uIG1hbnkgeDg2L3g4Ni02NCB0eXBlIGhhcmR3YXJlIHRoZXJlIGlzIGEgZmVhdHVyZSB0aGF0IGVuYWJsZXMKK3VzIHRvIGdlbmVyYXRlICd3YXRjaGRvZyBOTUkgaW50ZXJydXB0cycuICAoTk1JOiBOb24gTWFza2FibGUgSW50ZXJydXB0Cit3aGljaCBnZXQgZXhlY3V0ZWQgZXZlbiBpZiB0aGUgc3lzdGVtIGlzIG90aGVyd2lzZSBsb2NrZWQgdXAgaGFyZCkuCitUaGlzIGNhbiBiZSB1c2VkIHRvIGRlYnVnIGhhcmQga2VybmVsIGxvY2t1cHMuICBCeSBleGVjdXRpbmcgcGVyaW9kaWMKK05NSSBpbnRlcnJ1cHRzLCB0aGUga2VybmVsIGNhbiBtb25pdG9yIHdoZXRoZXIgYW55IENQVSBoYXMgbG9ja2VkIHVwLAorYW5kIHByaW50IG91dCBkZWJ1Z2dpbmcgbWVzc2FnZXMgaWYgc28uICAKKworSW4gb3JkZXIgdG8gdXNlIHRoZSBOTUkgd2F0Y2hkb2csIHlvdSBuZWVkIHRvIGhhdmUgQVBJQyBzdXBwb3J0IGluIHlvdXIKK2tlcm5lbC4gRm9yIFNNUCBrZXJuZWxzLCBBUElDIHN1cHBvcnQgZ2V0cyBjb21waWxlZCBpbiBhdXRvbWF0aWNhbGx5LiBGb3IKK1VQLCBlbmFibGUgZWl0aGVyIENPTkZJR19YODZfVVBfQVBJQyAoUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIC0+IExvY2FsCitBUElDIHN1cHBvcnQgb24gdW5pcHJvY2Vzc29ycykgb3IgQ09ORklHX1g4Nl9VUF9JT0FQSUMgKFByb2Nlc3NvciB0eXBlIGFuZAorZmVhdHVyZXMgLT4gSU8tQVBJQyBzdXBwb3J0IG9uIHVuaXByb2Nlc3NvcnMpIGluIHlvdXIga2VybmVsIGNvbmZpZy4KK0NPTkZJR19YODZfVVBfQVBJQyBpcyBmb3IgdW5pcHJvY2Vzc29yIG1hY2hpbmVzIHdpdGhvdXQgYW4gSU8tQVBJQy4KK0NPTkZJR19YODZfVVBfSU9BUElDIGlzIGZvciB1bmlwcm9jZXNzb3Igd2l0aCBhbiBJTy1BUElDLiBbTm90ZTogY2VydGFpbgora2VybmVsIGRlYnVnZ2luZyBvcHRpb25zLCBzdWNoIGFzIEtlcm5lbCBTdGFjayBNZXRlciBvciBLZXJuZWwgVHJhY2VyLAorbWF5IGltcGxpY2l0bHkgZGlzYWJsZSB0aGUgTk1JIHdhdGNoZG9nLl0KKworRm9yIHg4Ni02NCwgdGhlIG5lZWRlZCBBUElDIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgYW5kIHRoZSBOTUkgd2F0Y2hkb2cgaXMKK2Fsd2F5cyBlbmFibGVkIHdpdGggSS9PLUFQSUMgbW9kZSAobm1pX3dhdGNoZG9nPTEpLiBDdXJyZW50bHksIGxvY2FsIEFQSUMKK21vZGUgKG5taV93YXRjaGRvZz0yKSBkb2VzIG5vdCB3b3JrIG9uIHg4Ni02NC4KKworVXNpbmcgbG9jYWwgQVBJQyAobm1pX3dhdGNoZG9nPTIpIG5lZWRzIHRoZSBmaXJzdCBwZXJmb3JtYW5jZSByZWdpc3Rlciwgc28KK3lvdSBjYW4ndCB1c2UgaXQgZm9yIG90aGVyIHB1cnBvc2VzIChzdWNoIGFzIGhpZ2ggcHJlY2lzaW9uIHBlcmZvcm1hbmNlCitwcm9maWxpbmcuKSBIb3dldmVyLCBhdCBsZWFzdCBvcHJvZmlsZSBhbmQgdGhlIHBlcmZjdHIgZHJpdmVyIGRpc2FibGUgdGhlCitsb2NhbCBBUElDIE5NSSB3YXRjaGRvZyBhdXRvbWF0aWNhbGx5LgorCitUbyBhY3R1YWxseSBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZywgdXNlIHRoZSAnbm1pX3dhdGNoZG9nPU4nIGJvb3QKK3BhcmFtZXRlci4gIEVnLiB0aGUgcmVsZXZhbnQgbGlsby5jb25mIGVudHJ5OgorCisgICAgICAgIGFwcGVuZD0ibm1pX3dhdGNoZG9nPTEiCisKK0ZvciBTTVAgbWFjaGluZXMgYW5kIFVQIG1hY2hpbmVzIHdpdGggYW4gSU8tQVBJQyB1c2Ugbm1pX3dhdGNoZG9nPTEuCitGb3IgVVAgbWFjaGluZXMgd2l0aG91dCBhbiBJTy1BUElDIHVzZSBubWlfd2F0Y2hkb2c9MiwgdGhpcyBvbmx5IHdvcmtzCitmb3Igc29tZSBwcm9jZXNzb3IgdHlwZXMuICBJZiBpbiBkb3VidCwgYm9vdCB3aXRoIG5taV93YXRjaGRvZz0xIGFuZAorY2hlY2sgdGhlIE5NSSBjb3VudCBpbiAvcHJvYy9pbnRlcnJ1cHRzOyBpZiB0aGUgY291bnQgaXMgemVybyB0aGVuCityZWJvb3Qgd2l0aCBubWlfd2F0Y2hkb2c9MiBhbmQgY2hlY2sgdGhlIE5NSSBjb3VudC4gIElmIGl0IGlzIHN0aWxsCit6ZXJvIHRoZW4gbG9nIGEgcHJvYmxlbSwgeW91IHByb2JhYmx5IGhhdmUgYSBwcm9jZXNzb3IgdGhhdCBuZWVkcyB0byBiZQorYWRkZWQgdG8gdGhlIG5taSBjb2RlLgorCitBICdsb2NrdXAnIGlzIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86IGlmIGFueSBDUFUgaW4gdGhlIHN5c3RlbSBkb2VzIG5vdAorZXhlY3V0ZSB0aGUgcGVyaW9kIGxvY2FsIHRpbWVyIGludGVycnVwdCBmb3IgbW9yZSB0aGFuIDUgc2Vjb25kcywgdGhlbgordGhlIE5NSSBoYW5kbGVyIGdlbmVyYXRlcyBhbiBvb3BzIGFuZCBraWxscyB0aGUgcHJvY2Vzcy4gVGhpcworJ2NvbnRyb2xsZWQgY3Jhc2gnIChhbmQgdGhlIHJlc3VsdGluZyBrZXJuZWwgbWVzc2FnZXMpIGNhbiBiZSB1c2VkIHRvCitkZWJ1ZyB0aGUgbG9ja3VwLiBUaHVzIHdoZW5ldmVyIHRoZSBsb2NrdXAgaGFwcGVucywgd2FpdCA1IHNlY29uZHMgYW5kCit0aGUgb29wcyB3aWxsIHNob3cgdXAgYXV0b21hdGljYWxseS4gSWYgdGhlIGtlcm5lbCBwcm9kdWNlcyBubyBtZXNzYWdlcwordGhlbiB0aGUgc3lzdGVtIGhhcyBjcmFzaGVkIHNvIGhhcmQgKGVnLiBoYXJkd2FyZS13aXNlKSB0aGF0IGVpdGhlciBpdAorY2Fubm90IGV2ZW4gYWNjZXB0IE5NSSBpbnRlcnJ1cHRzLCBvciB0aGUgY3Jhc2ggaGFzIG1hZGUgdGhlIGtlcm5lbAordW5hYmxlIHRvIHByaW50IG1lc3NhZ2VzLgorCitCZSBhd2FyZSB0aGF0IHdoZW4gdXNpbmcgbG9jYWwgQVBJQywgdGhlIGZyZXF1ZW5jeSBvZiBOTUkgaW50ZXJydXB0cworaXQgZ2VuZXJhdGVzLCBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0gbG9hZC4gVGhlIGxvY2FsIEFQSUMgTk1JIHdhdGNoZG9nLAorbGFja2luZyBhIGJldHRlciBzb3VyY2UsIHVzZXMgdGhlICJjeWNsZXMgdW5oYWx0ZWQiIGV2ZW50LiBBcyB5b3UgbWF5CitndWVzcyBpdCBkb2Vzbid0IHRpY2sgd2hlbiB0aGUgQ1BVIGlzIGluIHRoZSBoYWx0ZWQgc3RhdGUgKHdoaWNoIGhhcHBlbnMKK3doZW4gdGhlIHN5c3RlbSBpcyBpZGxlKSwgYnV0IGlmIHlvdXIgc3lzdGVtIGxvY2tzIHVwIG9uIGFueXRoaW5nIGJ1dCB0aGUKKyJobHQiIHByb2Nlc3NvciBpbnN0cnVjdGlvbiwgdGhlIHdhdGNoZG9nIHdpbGwgdHJpZ2dlciB2ZXJ5IHNvb24gYXMgdGhlCisiY3ljbGVzIHVuaGFsdGVkIiBldmVudCB3aWxsIGhhcHBlbiBldmVyeSBjbG9jayB0aWNrLiBJZiBpdCBsb2NrcyB1cCBvbgorImhsdCIsIHRoZW4geW91IGFyZSBvdXQgb2YgbHVjayAtLSB0aGUgZXZlbnQgd2lsbCBub3QgaGFwcGVuIGF0IGFsbCBhbmQgdGhlCit3YXRjaGRvZyB3b24ndCB0cmlnZ2VyLiBUaGlzIGlzIGEgc2hvcnRjb21pbmcgb2YgdGhlIGxvY2FsIEFQSUMgd2F0Y2hkb2cKKy0tIHVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gImNsb2NrIHRpY2tzIiBldmVudCB0aGF0IHdvdWxkIHdvcmsgYWxsIHRoZQordGltZS4gVGhlIEkvTyBBUElDIHdhdGNoZG9nIGlzIGRyaXZlbiBleHRlcm5hbGx5IGFuZCBoYXMgbm8gc3VjaCBzaG9ydGNvbWluZy4gIAorQnV0IGl0cyBOTUkgZnJlcXVlbmN5IGlzIG11Y2ggaGlnaGVyLCByZXN1bHRpbmcgaW4gYSBtb3JlIHNpZ25pZmljYW50IGhpdAordG8gdGhlIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLgorCitOT1RFOiBzdGFydGluZyB3aXRoIDIuNC4yLWFjMTggdGhlIE5NSS1vb3BzZXIgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwKK3lvdSBoYXZlIHRvIGVuYWJsZSBpdCB3aXRoIGEgYm9vdCB0aW1lIHBhcmFtZXRlci4gIFByaW9yIHRvIDIuNC4yLWFjMTgKK3RoZSBOTUktb29wc2VyIGlzIGVuYWJsZWQgdW5jb25kaXRpb25hbGx5IG9uIHg4NiBTTVAgYm94ZXMuCisKK09uIHg4Ni02NCB0aGUgTk1JIG9vcHNlciBpcyBvbiBieSBkZWZhdWx0LiBPbiA2NGJpdCBJbnRlbCBDUFVzCitpdCB1c2VzIElPLUFQSUMgYnkgZGVmYXVsdCBhbmQgb24gQU1EIGl0IHVzZXMgbG9jYWwgQVBJQy4KKworWyBmZWVsIGZyZWUgdG8gc2VuZCBidWcgcmVwb3J0cywgc3VnZ2VzdGlvbnMgYW5kIHBhdGNoZXMgdG8KKyAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+IG9yIHRoZSBMaW51eCBTTVAgbWFpbGluZworICBsaXN0IGF0IDxsaW51eC1zbXBAdmdlci5rZXJuZWwub3JnPiBdCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGViZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0CkBAIC0wLDAgKzEsMTk4IEBACisJCQkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSBOTy1NTVUgTUVNT1JZIE1BUFBJTkcgU1VQUE9SVAorCQkJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBrZXJuZWwgaGFzIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbWVtb3J5IG1hcHBpbmcgdW5kZXIgbm8tTU1VIGNvbmRpdGlvbnMsIHN1Y2gKK2FzIGFyZSB1c2VkIGluIHVDbGludXggZW52aXJvbm1lbnRzLiBGcm9tIHRoZSB1c2Vyc3BhY2UgcG9pbnQgb2YgdmlldywgbWVtb3J5CittYXBwaW5nIGlzIG1hZGUgdXNlIG9mIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG1tYXAoKSBzeXN0ZW0gY2FsbCwgdGhlIHNobWF0KCkKK2NhbGwgYW5kIHRoZSBleGVjdmUoKSBzeXN0ZW0gY2FsbC4gRnJvbSB0aGUga2VybmVsJ3MgcG9pbnQgb2YgdmlldywgZXhlY3ZlKCkKK21hcHBpbmcgaXMgYWN0dWFsbHkgcGVyZm9ybWVkIGJ5IHRoZSBiaW5mbXQgZHJpdmVycywgd2hpY2ggY2FsbCBiYWNrIGludG8gdGhlCittbWFwKCkgcm91dGluZXMgdG8gZG8gdGhlIGFjdHVhbCB3b3JrLgorCitNZW1vcnkgbWFwcGluZyBiZWhhdmlvdXIgYWxzbyBpbnZvbHZlcyB0aGUgd2F5IGZvcmsoKSwgdmZvcmsoKSwgY2xvbmUoKSBhbmQKK3B0cmFjZSgpIHdvcmsuIFVuZGVyIHVDbGludXggdGhlcmUgaXMgbm8gZm9yaygpLCBhbmQgY2xvbmUoKSBtdXN0IGJlIHN1cHBsaWVkCit0aGUgQ0xPTkVfVk0gZmxhZy4KKworVGhlIGJlaGF2aW91ciBpcyBzaW1pbGFyIGJldHdlZW4gdGhlIE1NVSBhbmQgbm8tTU1VIGNhc2VzLCBidXQgbm90IGlkZW50aWNhbDsKK2FuZCBpdCdzIGFsc28gbXVjaCBtb3JlIHJlc3RyaWN0ZWQgaW4gdGhlIGxhdHRlciBjYXNlOgorCisgKCopIEFub255bW91cyBtYXBwaW5nLCBNQVBfUFJJVkFURQorCisJSW4gdGhlIE1NVSBjYXNlOiBWTSByZWdpb25zIGJhY2tlZCBieSBhcmJpdHJhcnkgcGFnZXM7IGNvcHktb24td3JpdGUKKwlhY3Jvc3MgZm9yay4KKworCUluIHRoZSBuby1NTVUgY2FzZTogVk0gcmVnaW9ucyBiYWNrZWQgYnkgYXJiaXRyYXJ5IGNvbnRpZ3VvdXMgcnVucyBvZgorCXBhZ2VzLgorCisgKCopIEFub255bW91cyBtYXBwaW5nLCBNQVBfU0hBUkVECisKKwlUaGVzZSBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgcHJpdmF0ZSBtYXBwaW5ncywgZXhjZXB0IHRoYXQgdGhleSdyZQorCXNoYXJlZCBhY3Jvc3MgZm9yaygpIG9yIGNsb25lKCkgd2l0aG91dCBDTE9ORV9WTSBpbiB0aGUgTU1VIGNhc2UuIFNpbmNlCisJdGhlIG5vLU1NVSBjYXNlIGRvZXNuJ3Qgc3VwcG9ydCB0aGVzZSwgYmVoYXZpb3VyIGlzIGlkZW50aWNhbCB0bworCU1BUF9QUklWQVRFIHRoZXJlLgorCisgKCopIEZpbGUsIE1BUF9QUklWQVRFLCBQUk9UX1JFQUQgLyBQUk9UX0VYRUMsICFQUk9UX1dSSVRFCisKKwlJbiB0aGUgTU1VIGNhc2U6IFZNIHJlZ2lvbnMgYmFja2VkIGJ5IHBhZ2VzIHJlYWQgZnJvbSBmaWxlOyBjaGFuZ2VzIHRvCisJdGhlIHVuZGVybHlpbmcgZmlsZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBtYXBwaW5nOyBjb3BpZWQgYWNyb3NzIGZvcmsuCisKKwlJbiB0aGUgbm8tTU1VIGNhc2U6CisKKyAgICAgICAgIC0gSWYgb25lIGV4aXN0cywgdGhlIGtlcm5lbCB3aWxsIHJlLXVzZSBhbiBleGlzdGluZyBtYXBwaW5nIHRvIHRoZQorICAgICAgICAgICBzYW1lIHNlZ21lbnQgb2YgdGhlIHNhbWUgZmlsZSBpZiB0aGF0IGhhcyBjb21wYXRpYmxlIHBlcm1pc3Npb25zLAorICAgICAgICAgICBldmVuIGlmIHRoaXMgd2FzIGNyZWF0ZWQgYnkgYW5vdGhlciBwcm9jZXNzLgorCisgICAgICAgICAtIElmIHBvc3NpYmxlLCB0aGUgZmlsZSBtYXBwaW5nIHdpbGwgYmUgZGlyZWN0bHkgb24gdGhlIGJhY2tpbmcgZGV2aWNlCisgICAgICAgICAgIGlmIHRoZSBiYWNraW5nIGRldmljZSBoYXMgdGhlIEJESV9DQVBfTUFQX0RJUkVDVCBjYXBhYmlsaXR5IGFuZAorICAgICAgICAgICBhcHByb3ByaWF0ZSBtYXBwaW5nIHByb3RlY3Rpb24gY2FwYWJpbGl0aWVzLiBSYW1mcywgcm9tZnMsIGNyYW1mcworICAgICAgICAgICBhbmQgbXRkIG1pZ2h0IGFsbCBwZXJtaXQgdGhpcy4KKworCSAtIElmIHRoZSBiYWNraW5nIGRldmljZSBkZXZpY2UgY2FuJ3Qgb3Igd29uJ3QgcGVybWl0IGRpcmVjdCBzaGFyaW5nLAorICAgICAgICAgICBidXQgZG9lcyBoYXZlIHRoZSBCRElfQ0FQX01BUF9DT1BZIGNhcGFiaWxpdHksIHRoZW4gYSBjb3B5IG9mIHRoZQorICAgICAgICAgICBhcHByb3ByaWF0ZSBiaXQgb2YgdGhlIGZpbGUgd2lsbCBiZSByZWFkIGludG8gYSBjb250aWd1b3VzIGJpdCBvZgorICAgICAgICAgICBtZW1vcnkgYW5kIGFueSBleHRyYW5lb3VzIHNwYWNlIGJleW9uZCB0aGUgRU9GIHdpbGwgYmUgY2xlYXJlZAorCisJIC0gV3JpdGVzIHRvIHRoZSBmaWxlIGRvIG5vdCBhZmZlY3QgdGhlIG1hcHBpbmc7IHdyaXRlcyB0byB0aGUgbWFwcGluZworCSAgIGFyZSB2aXNpYmxlIGluIG90aGVyIHByb2Nlc3NlcyAobm8gTU1VIHByb3RlY3Rpb24pLCBidXQgc2hvdWxkIG5vdAorCSAgIGhhcHBlbi4KKworICgqKSBGaWxlLCBNQVBfUFJJVkFURSwgUFJPVF9SRUFEIC8gUFJPVF9FWEVDLCBQUk9UX1dSSVRFCisKKwlJbiB0aGUgTU1VIGNhc2U6IGxpa2UgdGhlIG5vbi1QUk9UX1dSSVRFIGNhc2UsIGV4Y2VwdCB0aGF0IHRoZSBwYWdlcyBpbgorCXF1ZXN0aW9uIGdldCBjb3BpZWQgYmVmb3JlIHRoZSB3cml0ZSBhY3R1YWxseSBoYXBwZW5zLiBGcm9tIHRoYXQgcG9pbnQKKwlvbiB3cml0ZXMgdG8gdGhlIGZpbGUgdW5kZXJuZWF0aCB0aGF0IHBhZ2Ugbm8gbG9uZ2VyIGdldCByZWZsZWN0ZWQgaW50bworCXRoZSBtYXBwaW5nJ3MgYmFja2luZyBwYWdlcy4gVGhlIHBhZ2UgaXMgdGhlbiBiYWNrZWQgYnkgc3dhcCBpbnN0ZWFkLgorCisJSW4gdGhlIG5vLU1NVSBjYXNlOiB3b3JrcyBtdWNoIGxpa2UgdGhlIG5vbi1QUk9UX1dSSVRFIGNhc2UsIGV4Y2VwdAorCXRoYXQgYSBjb3B5IGlzIGFsd2F5cyB0YWtlbiBhbmQgbmV2ZXIgc2hhcmVkLgorCisgKCopIFJlZ3VsYXIgZmlsZSAvIGJsb2NrZGV2LCBNQVBfU0hBUkVELCBQUk9UX1JFQUQgLyBQUk9UX0VYRUMgLyBQUk9UX1dSSVRFCisKKwlJbiB0aGUgTU1VIGNhc2U6IFZNIHJlZ2lvbnMgYmFja2VkIGJ5IHBhZ2VzIHJlYWQgZnJvbSBmaWxlOyBjaGFuZ2VzIHRvCisJcGFnZXMgd3JpdHRlbiBiYWNrIHRvIGZpbGU7IHdyaXRlcyB0byBmaWxlIHJlZmxlY3RlZCBpbnRvIHBhZ2VzIGJhY2tpbmcKKwltYXBwaW5nOyBzaGFyZWQgYWNyb3NzIGZvcmsuCisKKwlJbiB0aGUgbm8tTU1VIGNhc2U6IG5vdCBzdXBwb3J0ZWQuCisKKyAoKikgTWVtb3J5IGJhY2tlZCByZWd1bGFyIGZpbGUsIE1BUF9TSEFSRUQsIFBST1RfUkVBRCAvIFBST1RfRVhFQyAvIFBST1RfV1JJVEUKKworCUluIHRoZSBNTVUgY2FzZTogQXMgZm9yIG9yZGluYXJ5IHJlZ3VsYXIgZmlsZXMuCisKKwlJbiB0aGUgbm8tTU1VIGNhc2U6IFRoZSBmaWxlc3lzdGVtIHByb3ZpZGluZyB0aGUgbWVtb3J5LWJhY2tlZCBmaWxlCisJKHN1Y2ggYXMgcmFtZnMgb3IgdG1wZnMpIG1heSBjaG9vc2UgdG8gaG9ub3VyIGFuIG9wZW4sIHRydW5jYXRlLCBtbWFwCisJc2VxdWVuY2UgYnkgcHJvdmlkaW5nIGEgY29udGlndW91cyBzZXF1ZW5jZSBvZiBwYWdlcyB0byBtYXAuIEluIHRoYXQKKwljYXNlLCBhIHNoYXJlZC13cml0YWJsZSBtZW1vcnkgbWFwcGluZyB3aWxsIGJlIHBvc3NpYmxlLiBJdCB3aWxsIHdvcmsKKwlhcyBmb3IgdGhlIE1NVSBjYXNlLiBJZiB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIGFueSBzdWNoCisJc3VwcG9ydCwgdGhlbiB0aGUgbWFwcGluZyByZXF1ZXN0IHdpbGwgYmUgZGVuaWVkLgorCisgKCopIE1lbW9yeSBiYWNrZWQgYmxvY2tkZXYsIE1BUF9TSEFSRUQsIFBST1RfUkVBRCAvIFBST1RfRVhFQyAvIFBST1RfV1JJVEUKKworCUluIHRoZSBNTVUgY2FzZTogQXMgZm9yIG9yZGluYXJ5IHJlZ3VsYXIgZmlsZXMuCisKKwlJbiB0aGUgbm8tTU1VIGNhc2U6IEFzIGZvciBtZW1vcnkgYmFja2VkIHJlZ3VsYXIgZmlsZXMsIGJ1dCB0aGUKKwlibG9ja2RldiBtdXN0IGJlIGFibGUgdG8gcHJvdmlkZSBhIGNvbnRpZ3VvdXMgcnVuIG9mIHBhZ2VzIHdpdGhvdXQKKwl0cnVuY2F0ZSBiZWluZyBjYWxsZWQuIFRoZSByYW1kaXNrIGRyaXZlciBjb3VsZCBkbyB0aGlzIGlmIGl0IGFsbG9jYXRlZAorCWFsbCBpdHMgbWVtb3J5IGFzIGEgY29udGlndW91cyBhcnJheSB1cGZyb250LgorCisgKCopIE1lbW9yeSBiYWNrZWQgY2hhcmRldiwgTUFQX1NIQVJFRCwgUFJPVF9SRUFEIC8gUFJPVF9FWEVDIC8gUFJPVF9XUklURQorCisJSW4gdGhlIE1NVSBjYXNlOiBBcyBmb3Igb3JkaW5hcnkgcmVndWxhciBmaWxlcy4KKworCUluIHRoZSBuby1NTVUgY2FzZTogVGhlIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVyIG1heSBjaG9vc2UgdG8gaG9ub3VyCisJdGhlIG1tYXAoKSBieSBwcm92aWRpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBkZXZpY2UgaWYgaXQKKwlwcm92aWRlcyBtZW1vcnkgb3IgcXVhc2ktbWVtb3J5IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LiBFeGFtcGxlcworCW9mIHN1Y2ggYXJlIGZyYW1lIGJ1ZmZlcnMgYW5kIGZsYXNoIGRldmljZXMuIElmIHRoZSBkcml2ZXIgZG9lcyBub3QKKwlwcm92aWRlIGFueSBzdWNoIHN1cHBvcnQsIHRoZW4gdGhlIG1hcHBpbmcgcmVxdWVzdCB3aWxsIGJlIGRlbmllZC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitGVVJUSEVSIE5PVEVTIE9OIE5PLU1NVSBNTUFQCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAoKikgQSByZXF1ZXN0IGZvciBhIHByaXZhdGUgbWFwcGluZyBvZiBsZXNzIHRoYW4gYSBwYWdlIGluIHNpemUgbWF5IG5vdCByZXR1cm4KKyAgICAgYSBwYWdlLWFsaWduZWQgYnVmZmVyLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGtlcm5lbCBjYWxscyBrbWFsbG9jKCkgdG8KKyAgICAgYWxsb2NhdGUgdGhlIGJ1ZmZlciwgbm90IGdldF9mcmVlX3BhZ2UoKS4KKworICgqKSBBIGxpc3Qgb2YgYWxsIHRoZSBtYXBwaW5ncyBvbiB0aGUgc3lzdGVtIGlzIHZpc2libGUgdGhyb3VnaCAvcHJvYy9tYXBzIGluCisgICAgIG5vLU1NVSBtb2RlLgorCisgKCopIFN1cHBseWluZyBNQVBfRklYRUQgb3IgYSByZXF1ZXN0aW5nIGEgcGFydGljdWxhciBtYXBwaW5nIGFkZHJlc3Mgd2lsbAorICAgICByZXN1bHQgaW4gYW4gZXJyb3IuCisKKyAoKikgRmlsZXMgbWFwcGVkIHByaXZhdGVseSB1c3VhbGx5IGhhdmUgdG8gaGF2ZSBhIHJlYWQgbWV0aG9kIHByb3ZpZGVkIGJ5IHRoZQorICAgICBkcml2ZXIgb3IgZmlsZXN5c3RlbSBzbyB0aGF0IHRoZSBjb250ZW50cyBjYW4gYmUgcmVhZCBpbnRvIHRoZSBtZW1vcnkKKyAgICAgYWxsb2NhdGVkIGlmIG1tYXAoKSBjaG9vc2VzIG5vdCB0byBtYXAgdGhlIGJhY2tpbmcgZGV2aWNlIGRpcmVjdGx5LiBBbgorICAgICBlcnJvciB3aWxsIHJlc3VsdCBpZiB0aGV5IGRvbid0LiBUaGlzIGlzIG1vc3QgbGlrZWx5IHRvIGJlIGVuY291bnRlcmVkCisgICAgIHdpdGggY2hhcmFjdGVyIGRldmljZSBmaWxlcywgcGlwZXMsIGZpZm9zIGFuZCBzb2NrZXRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUFJPVklESU5HIFNIQVJFQUJMRSBDSEFSQUNURVIgREVWSUNFIFNVUFBPUlQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHByb3ZpZGUgc2hhcmVhYmxlIGNoYXJhY3RlciBkZXZpY2Ugc3VwcG9ydCwgYSBkcml2ZXIgbXVzdCBwcm92aWRlIGEKK2ZpbGUtPmZfb3AtPmdldF91bm1hcHBlZF9hcmVhKCkgb3BlcmF0aW9uLiBUaGUgbW1hcCgpIHJvdXRpbmVzIHdpbGwgY2FsbCB0aGlzCit0byBnZXQgYSBwcm9wb3NlZCBhZGRyZXNzIGZvciB0aGUgbWFwcGluZy4gVGhpcyBtYXkgcmV0dXJuIGFuIGVycm9yIGlmIGl0Citkb2Vzbid0IHdpc2ggdG8gaG9ub3VyIHRoZSBtYXBwaW5nIGJlY2F1c2UgaXQncyB0b28gbG9uZywgYXQgYSB3ZWlyZCBvZmZzZXQsCit1bmRlciBzb21lIHVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGZsYWdzIG9yIHdoYXRldmVyLgorCitUaGUgZHJpdmVyIHNob3VsZCBhbHNvIHByb3ZpZGUgYmFja2luZyBkZXZpY2UgaW5mb3JtYXRpb24gd2l0aCBjYXBhYmlsaXRpZXMgc2V0Cit0byBpbmRpY2F0ZSB0aGUgcGVybWl0dGVkIHR5cGVzIG9mIG1hcHBpbmcgb24gc3VjaCBkZXZpY2VzLiBUaGUgZGVmYXVsdCBpcworYXNzdW1lZCB0byBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUsIG5vdCBleGVjdXRhYmxlLCBhbmQgb25seSBzaGFyZWFibGUKK2RpcmVjdGx5IChjYW4ndCBiZSBjb3BpZWQpLgorCitUaGUgZmlsZS0+Zl9vcC0+bW1hcCgpIG9wZXJhdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBhY3R1YWxseSBpbmF1Z3VyYXRlIHRoZQorbWFwcGluZy4gSXQgY2FuIGJlIHJlamVjdGVkIGF0IHRoYXQgcG9pbnQuIFJldHVybmluZyB0aGUgRU5PU1lTIGVycm9yIHdpbGwKK2NhdXNlIHRoZSBtYXBwaW5nIHRvIGJlIGNvcGllZCBpbnN0ZWFkIGlmIEJESV9DQVBfTUFQX0NPUFkgaXMgc3BlY2lmaWVkLgorCitUaGUgdm1fb3BzLT5jbG9zZSgpIHJvdXRpbmUgd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIGxhc3QgbWFwcGluZyBvbiBhIGNoYXJkZXYKK2lzIHJlbW92ZWQuIEFuIGV4aXN0aW5nIG1hcHBpbmcgd2lsbCBiZSBzaGFyZWQsIHBhcnRpYWxseSBvciBub3QsIGlmIHBvc3NpYmxlCit3aXRob3V0IG5vdGlmeWluZyB0aGUgZHJpdmVyLgorCitJdCBpcyBwZXJtaXR0ZWQgYWxzbyBmb3IgdGhlIGZpbGUtPmZfb3AtPmdldF91bm1hcHBlZF9hcmVhKCkgb3BlcmF0aW9uIHRvCityZXR1cm4gLUVOT1NZUy4gVGhpcyB3aWxsIGJlIHRha2VuIHRvIG1lYW4gdGhhdCB0aGlzIG9wZXJhdGlvbiBqdXN0IGRvZXNuJ3QKK3dhbnQgdG8gaGFuZGxlIGl0LCBkZXNwaXRlIHRoZSBmYWN0IGl0J3MgZ290IGFuIG9wZXJhdGlvbi4gRm9yIGluc3RhbmNlLCBpdAorbWlnaHQgdHJ5IGRpcmVjdGluZyB0aGUgY2FsbCB0byBhIHNlY29uZGFyeSBkcml2ZXIgd2hpY2ggdHVybnMgb3V0IG5vdCB0bworaW1wbGVtZW50IGl0LiBTdWNoIGlzIHRoZSBjYXNlIGZvciB0aGUgZnJhbWVidWZmZXIgZHJpdmVyIHdoaWNoIGF0dGVtcHRzIHRvCitkaXJlY3QgdGhlIGNhbGwgdG8gdGhlIGRldmljZS1zcGVjaWZpYyBkcml2ZXIuIFVuZGVyIHN1Y2ggY2lyY3Vtc3RhbmNlcywgdGhlCittYXBwaW5nIHJlcXVlc3Qgd2lsbCBiZSByZWplY3RlZCBpZiBCRElfQ0FQX01BUF9DT1BZIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCBhCitjb3B5IG1hcHBlZCBvdGhlcndpc2UuCisKK0lNUE9SVEFOVCBOT1RFOgorCisJU29tZSB0eXBlcyBvZiBkZXZpY2UgbWF5IHByZXNlbnQgYSBkaWZmZXJlbnQgYXBwZWFyYW5jZSB0byBhbnlvbmUKKwlsb29raW5nIGF0IHRoZW0gaW4gY2VydGFpbiBtb2Rlcy4gRmxhc2ggY2hpcHMgY2FuIGJlIGxpa2UgdGhpczsgZm9yCisJaW5zdGFuY2UgaWYgdGhleSdyZSBpbiBwcm9ncmFtbWluZyBvciBlcmFzZSBtb2RlLCB5b3UgbWlnaHQgc2VlIHRoZQorCXN0YXR1cyByZWZsZWN0ZWQgaW4gdGhlIG1hcHBpbmcsIGluc3RlYWQgb2YgdGhlIGRhdGEuCisKKwlJbiBzdWNoIGEgY2FzZSwgY2FyZSBtdXN0IGJlIHRha2VuIGxlc3QgdXNlcnNwYWNlIHNlZSBhIHNoYXJlZCBvciBhCisJcHJpdmF0ZSBtYXBwaW5nIHNob3dpbmcgc3VjaCBpbmZvcm1hdGlvbiB3aGVuIHRoZSBkcml2ZXIgaXMgYnVzeQorCWNvbnRyb2xsaW5nIHRoZSBkZXZpY2UuIFJlbWVtYmVyIGVzcGVjaWFsbHk6IHByaXZhdGUgZXhlY3V0YWJsZQorCW1hcHBpbmdzIG1heSBzdGlsbCBiZSBtYXBwZWQgZGlyZWN0bHkgb2ZmIHRoZSBkZXZpY2UgdW5kZXIgc29tZQorCWNpcmN1bXN0YW5jZXMhCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUFJPVklESU5HIFNIQVJFQUJMRSBNRU1PUlktQkFDS0VEIEZJTEUgU1VQUE9SVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQcm92aXNpb24gb2Ygc2hhcmVkIG1hcHBpbmdzIG9uIG1lbW9yeSBiYWNrZWQgZmlsZXMgaXMgc2ltaWxhciB0byB0aGUgcHJvdmlzaW9uCitvZiBzdXBwb3J0IGZvciBzaGFyZWQgbWFwcGVkIGNoYXJhY3RlciBkZXZpY2VzLiBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlCitmaWxlc3lzdGVtIHByb3ZpZGluZyB0aGUgc2VydmljZSB3aWxsIHByb2JhYmx5IGFsbG9jYXRlIGEgY29udGlndW91cyBjb2xsZWN0aW9uCitvZiBwYWdlcyBhbmQgcGVybWl0IG1hcHBpbmdzIHRvIGJlIG1hZGUgb24gdGhhdC4KKworSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhIHRydW5jYXRlIG9wZXJhdGlvbiBhcHBsaWVkIHRvIHN1Y2ggYSBmaWxlIHRoYXQKK2luY3JlYXNlcyB0aGUgZmlsZSBzaXplLCBpZiB0aGF0IGZpbGUgaXMgZW1wdHksIGJlIHRha2VuIGFzIGEgcmVxdWVzdCB0byBnYXRoZXIKK2Vub3VnaCBwYWdlcyB0byBob25vdXIgYSBtYXBwaW5nLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgUE9TSVggc2hhcmVkCittZW1vcnkuCisKK01lbW9yeSBiYWNrZWQgZGV2aWNlcyBhcmUgaW5kaWNhdGVkIGJ5IHRoZSBtYXBwaW5nJ3MgYmFja2luZyBkZXZpY2UgaW5mbyBoYXZpbmcKK3RoZSBtZW1vcnlfYmFja2VkIGZsYWcgc2V0LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BST1ZJRElORyBTSEFSRUFCTEUgQkxPQ0sgREVWSUNFIFNVUFBPUlQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUHJvdmlzaW9uIG9mIHNoYXJlZCBtYXBwaW5ncyBvbiBibG9jayBkZXZpY2UgZmlsZXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBmb3IKK2NoYXJhY3RlciBkZXZpY2VzLiBJZiB0aGVyZSBpc24ndCBhIHJlYWwgZGV2aWNlIHVuZGVybmVhdGgsIHRoZW4gdGhlIGRyaXZlcgorc2hvdWxkIGFsbG9jYXRlIHN1ZmZpY2llbnQgY29udGlndW91cyBtZW1vcnkgdG8gaG9ub3VyIGFueSBzdXBwb3J0ZWQgbWFwcGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbnVtYXN0YXQudHh0IGIvRG9jdW1lbnRhdGlvbi9udW1hc3RhdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxMzNhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbnVtYXN0YXQudHh0CkBAIC0wLDAgKzEsMjIgQEAKKworTnVtYSBwb2xpY3kgaGl0L21pc3Mgc3RhdGlzdGljcworCisvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSovbnVtYXN0YXQKKworQWxsIHVuaXRzIGFyZSBwYWdlcy4gSHVnZXBhZ2VzIGhhdmUgc2VwYXJhdGUgY291bnRlcnMuCisKK251bWFfaGl0CQkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGlzIG5vZGUsCisJCQkJCWFuZCBzdWNjZWVkZWQuCitudW1hX21pc3MJCQlBIHByb2Nlc3Mgd2FudGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tIHRoaXMgbm9kZSwKKwkJCQkJYnV0IGVuZGVkIHVwIHdpdGggbWVtb3J5IGZyb20gYW5vdGhlci4KK251bWFfZm9yZWlnbgkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBvbiBhbm90aGVyIG5vZGUsCisJCQkJICAgIGJ1dCBlbmRlZCB1cCB3aXRoIG1lbW9yeSBmcm9tIHRoaXMgb25lLgorbG9jYWxfbm9kZQkJCUEgcHJvY2VzcyByYW4gb24gdGhpcyBub2RlIGFuZCBnb3QgbWVtb3J5IGZyb20gaXQuCitvdGhlcl9ub2RlCQkJQSBwcm9jZXNzIHJhbiBvbiB0aGlzIG5vZGUgYW5kIGdvdCBtZW1vcnkgZnJvbSBhbm90aGVyIG5vZGUuCitpbnRlcmxlYXZlX2hpdCAJCUludGVybGVhdmluZyB3YW50ZWQgdG8gYWxsb2NhdGUgZnJvbSB0aGlzIG5vZGUKKwkJCQkJYW5kIHN1Y2NlZWRlZC4KKworRm9yIGVhc2llciByZWFkaW5nIHlvdSBjYW4gdXNlIHRoZSBudW1hc3RhdCB1dGlsaXR5IGZyb20gdGhlIG51bWFjdGwgcGFja2FnZQorKGZ0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL2FrL251bWEvbnVtYWN0bCopLiBOb3RlIHRoYXQgaXQgb25seSB3b3Jrcword2VsbCByaWdodCBub3cgb24gbWFjaGluZXMgd2l0aCBhIHNtYWxsIG51bWJlciBvZiBDUFVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3MTEwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vb29wcy10cmFjaW5nLnR4dApAQCAtMCwwICsxLDIyOSBAQAorTk9URToga3N5bW9vcHMgaXMgdXNlbGVzcyBvbiAyLjYuICBQbGVhc2UgdXNlIHRoZSBPb3BzIGluIGl0cyBvcmlnaW5hbCBmb3JtYXQKKyhmcm9tIGRtZXNnLCBldGMpLiAgSWdub3JlIGFueSByZWZlcmVuY2VzIGluIHRoaXMgb3Igb3RoZXIgZG9jcyB0byAiZGVjb2RpbmcKK3RoZSBPb3BzIiBvciAicnVubmluZyBpdCB0aHJvdWdoIGtzeW1vb3BzIi4gIElmIHlvdSBwb3N0IGFuIE9vcHMgZnJvbiAyLjYgdGhhdAoraGFzIGJlZW4gcnVuIHRocm91Z2gga3N5bW9vcHMsIHBlb3BsZSB3aWxsIGp1c3QgdGVsbCB5b3UgdG8gcmVwb3N0IGl0LgorCitRdWljayBTdW1tYXJ5CistLS0tLS0tLS0tLS0tCisKK0ZpbmQgdGhlIE9vcHMgYW5kIHNlbmQgaXQgdG8gdGhlIG1haW50YWluZXIgb2YgdGhlIGtlcm5lbCBhcmVhIHRoYXQgc2VlbXMgdG8gYmUKK2ludm9sdmVkIHdpdGggdGhlIHByb2JsZW0uICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBnZXR0aW5nIHRoZSB3cm9uZyBwZXJzb24uCitJZiB5b3UgYXJlIHVuc3VyZSBzZW5kIGl0IHRvIHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoZSBjb2RlIHJlbGV2YW50IHRvCit3aGF0IHlvdSB3ZXJlIGRvaW5nLiAgSWYgaXQgb2NjdXJzIHJlcGVhdGFibHkgdHJ5IGFuZCBkZXNjcmliZSBob3cgdG8gcmVjcmVhdGUKK2l0LiAgVGhhdCdzIHdvcnRoIGV2ZW4gbW9yZSB0aGFuIHRoZSBvb3BzLgorCitJZiB5b3UgYXJlIHRvdGFsbHkgc3R1bXBlZCBhcyB0byB3aG9tIHRvIHNlbmQgdGhlIHJlcG9ydCwgc2VuZCBpdCB0byAKK2xpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcuIFRoYW5rcyBmb3IgeW91ciBoZWxwIGluIG1ha2luZyBMaW51eCBhcworc3RhYmxlIGFzIGh1bWFubHkgcG9zc2libGUuCisKK1doZXJlIGlzIHRoZSBPb3BzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3JtYWxseSB0aGUgT29wcyB0ZXh0IGlzIHJlYWQgZnJvbSB0aGUga2VybmVsIGJ1ZmZlcnMgYnkga2xvZ2QgYW5kCitoYW5kZWQgdG8gc3lzbG9nZCB3aGljaCB3cml0ZXMgaXQgdG8gYSBzeXNsb2cgZmlsZSwgdHlwaWNhbGx5CisvdmFyL2xvZy9tZXNzYWdlcyAoZGVwZW5kcyBvbiAvZXRjL3N5c2xvZy5jb25mKS4gIFNvbWV0aW1lcyBrbG9nZCBkaWVzLAoraW4gd2hpY2ggY2FzZSB5b3UgY2FuIHJ1biBkbWVzZyA+IGZpbGUgdG8gcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBrZXJuZWwKK2J1ZmZlcnMgYW5kIHNhdmUgaXQuICBPciB5b3UgY2FuIGNhdCAvcHJvYy9rbXNnID4gZmlsZSwgaG93ZXZlciB5b3UKK2hhdmUgdG8gYnJlYWsgaW4gdG8gc3RvcCB0aGUgdHJhbnNmZXIsIGttc2cgaXMgYSAibmV2ZXIgZW5kaW5nIGZpbGUiLgorSWYgdGhlIG1hY2hpbmUgaGFzIGNyYXNoZWQgc28gYmFkbHkgdGhhdCB5b3UgY2Fubm90IGVudGVyIGNvbW1hbmRzIG9yCit0aGUgZGlzayBpcyBub3QgYXZhaWxhYmxlIHRoZW4geW91IGhhdmUgdGhyZWUgb3B0aW9ucyA6LQorCisoMSkgSGFuZCBjb3B5IHRoZSB0ZXh0IGZyb20gdGhlIHNjcmVlbiBhbmQgdHlwZSBpdCBpbiBhZnRlciB0aGUgbWFjaGluZQorICAgIGhhcyByZXN0YXJ0ZWQuICBNZXNzeSBidXQgaXQgaXMgdGhlIG9ubHkgb3B0aW9uIGlmIHlvdSBoYXZlIG5vdAorICAgIHBsYW5uZWQgZm9yIGEgY3Jhc2guCisKKygyKSBCb290IHdpdGggYSBzZXJpYWwgY29uc29sZSAoc2VlIERvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0KSwKKyAgICBydW4gYSBudWxsIG1vZGVtIHRvIGEgc2Vjb25kIG1hY2hpbmUgYW5kIGNhcHR1cmUgdGhlIG91dHB1dCB0aGVyZQorICAgIHVzaW5nIHlvdXIgZmF2b3VyaXRlIGNvbW11bmljYXRpb24gcHJvZ3JhbS4gIE1pbmljb20gd29ya3Mgd2VsbC4KKworKDMpIFBhdGNoIHRoZSBrZXJuZWwgd2l0aCBvbmUgb2YgdGhlIGNyYXNoIGR1bXAgcGF0Y2hlcy4gIFRoZXNlIHNhdmUKKyAgICBkYXRhIHRvIGEgZmxvcHB5IGRpc2sgb3IgdmlkZW8gcm9tIG9yIGEgc3dhcCBwYXJ0aXRpb24uICBOb25lIG9mCisgICAgdGhlc2UgYXJlIHN0YW5kYXJkIGtlcm5lbCBwYXRjaGVzIHNvIHlvdSBoYXZlIHRvIGZpbmQgYW5kIGFwcGx5CisgICAgdGhlbSB5b3Vyc2VsZi4gIFNlYXJjaCBrZXJuZWwgYXJjaGl2ZXMgZm9yIGttc2dkdW1wLCBsa2NkIGFuZAorICAgIG9vcHMrc21yYW0uCisKKworRnVsbCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFOiB0aGUgbWVzc2FnZSBmcm9tIExpbnVzIGJlbG93IGFwcGxpZXMgdG8gMi40IGtlcm5lbC4gIEkgaGF2ZSBwcmVzZXJ2ZWQgaXQKK2ZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGFuZCBiZWNhdXNlIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIGluIGl0IHN0aWxsCithcHBsaWVzLiAgRXNwZWNpYWxseSwgcGxlYXNlIGlnbm9yZSBhbnkgcmVmZXJlbmNlcyB0byBrc3ltb29wcy4gCisKK0Zyb206IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKworSG93IHRvIHRyYWNrIGRvd24gYW4gT29wcy4uIFtvcmlnaW5hbGx5IGEgbWFpbCB0byBsaW51eC1rZXJuZWxdCisKK1RoZSBtYWluIHRyaWNrIGlzIGhhdmluZyA1IHllYXJzIG9mIGV4cGVyaWVuY2Ugd2l0aCB0aG9zZSBwZXNreSBvb3BzIAorbWVzc2FnZXMgOy0pCisKK0FjdHVhbGx5LCB0aGVyZSBhcmUgdGhpbmdzIHlvdSBjYW4gZG8gdGhhdCBtYWtlIHRoaXMgZWFzaWVyLiBJIGhhdmUgdHdvIAorc2VwYXJhdGUgYXBwcm9hY2hlczoKKworCWdkYiAvdXNyL3NyYy9saW51eC92bWxpbnV4CisJZ2RiPiBkaXNhc3NlbWJsZSA8b2ZmZW5kaW5nX2Z1bmN0aW9uPgorCitUaGF0J3MgdGhlIGVhc3kgd2F5IHRvIGZpbmQgdGhlIHByb2JsZW0sIGF0IGxlYXN0IGlmIHRoZSBidWctcmVwb3J0IGlzIAord2VsbCBtYWRlIChsaWtlIHRoaXMgb25lIHdhcyAtIHJ1biB0aHJvdWdoIGtzeW1vb3BzIHRvIGdldCB0aGUgCitpbmZvcm1hdGlvbiBvZiB3aGljaCBmdW5jdGlvbiBhbmQgdGhlIG9mZnNldCBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCAKK2hhcHBlbmVkIGluKS4KKworT2gsIGl0IGhlbHBzIGlmIHRoZSByZXBvcnQgaGFwcGVucyBvbiBhIGtlcm5lbCB0aGF0IGlzIGNvbXBpbGVkIHdpdGggdGhlIAorc2FtZSBjb21waWxlciBhbmQgc2ltaWxhciBzZXR1cHMuCisKK1RoZSBvdGhlciB0aGluZyB0byBkbyBpcyBkaXNhc3NlbWJsZSB0aGUgIkNvZGU6IiBwYXJ0IG9mIHRoZSBidWcgcmVwb3J0OiAKK2tzeW1vb3BzIHdpbGwgZG8gdGhpcyB0b28gd2l0aCB0aGUgY29ycmVjdCB0b29scywgYnV0IGlmIHlvdSBkb24ndCBoYXZlCit0aGUgdG9vbHMgeW91IGNhbiBqdXN0IGRvIGEgc2lsbHkgcHJvZ3JhbToKKworCWNoYXIgc3RyW10gPSAiXHhYWFx4WFhceFhYLi4uIjsKKwltYWluKCl7fQorCithbmQgY29tcGlsZSBpdCB3aXRoIGdjYyAtZyBhbmQgdGhlbiBkbyAiZGlzYXNzZW1ibGUgc3RyIiAod2hlcmUgdGhlICJYWCIgCitzdHVmZiBhcmUgdGhlIHZhbHVlcyByZXBvcnRlZCBieSB0aGUgT29wcyAtIHlvdSBjYW4ganVzdCBjdXQtYW5kLXBhc3RlIAorYW5kIGRvIGEgcmVwbGFjZSBvZiBzcGFjZXMgdG8gIlx4IiAtIHRoYXQncyB3aGF0IEkgZG8sIGFzIEknbSB0b28gbGF6eSAKK3RvIHdyaXRlIGEgcHJvZ3JhbSB0byBhdXRvbWF0ZSB0aGlzIGFsbCkuCisKK0ZpbmFsbHksIGlmIHlvdSB3YW50IHRvIHNlZSB3aGVyZSB0aGUgY29kZSBjb21lcyBmcm9tLCB5b3UgY2FuIGRvCisKKwljZCAvdXNyL3NyYy9saW51eAorCW1ha2UgZnMvYnVmZmVyLnMgCSMgb3Igd2hhdGV2ZXIgZmlsZSB0aGUgYnVnIGhhcHBlbmVkIGluCisKK2FuZCB0aGVuIHlvdSBnZXQgYSBiZXR0ZXIgaWRlYSBvZiB3aGF0IGhhcHBlbnMgdGhhbiB3aXRoIHRoZSBnZGIgCitkaXNhc3NlbWJseS4KKworTm93LCB0aGUgdHJpY2sgaXMganVzdCB0aGVuIHRvIGNvbWJpbmUgYWxsIHRoZSBkYXRhIHlvdSBoYXZlOiB0aGUgQyAKK3NvdXJjZXMgKGFuZCBnZW5lcmFsIGtub3dsZWRnZSBvZiB3aGF0IGl0IF9zaG91bGRfIGRvKSwgdGhlIGFzc2VtYmx5IAorbGlzdGluZyBhbmQgdGhlIGNvZGUgZGlzYXNzZW1ibHkgKGFuZCBhZGRpdGlvbmFsbHkgdGhlIHJlZ2lzdGVyIGR1bXAgeW91IAorYWxzbyBnZXQgZnJvbSB0aGUgIm9vcHMiIG1lc3NhZ2UgLSB0aGF0IGNhbiBiZSB1c2VmdWwgdG8gc2VlIF93aGF0XyB0aGUgCitjb3JydXB0ZWQgcG9pbnRlcnMgd2VyZSwgYW5kIHdoZW4geW91IGhhdmUgdGhlIGFzc2VtYmxlciBsaXN0aW5nIHlvdSBjYW4gCithbHNvIG1hdGNoIHRoZSBvdGhlciByZWdpc3RlcnMgdG8gd2hhdGV2ZXIgQyBleHByZXNzaW9ucyB0aGV5IHdlcmUgdXNlZCAKK2ZvcikuCisKK0Vzc2VudGlhbGx5LCB5b3UganVzdCBsb29rIGF0IHdoYXQgZG9lc24ndCBtYXRjaCAoaW4gdGhpcyBjYXNlIGl0IHdhcyB0aGUgCisiQ29kZSIgZGlzYXNzZW1ibHkgdGhhdCBkaWRuJ3QgbWF0Y2ggd2l0aCB3aGF0IHRoZSBjb21waWxlciBnZW5lcmF0ZWQpLiAKK1RoZW4geW91IG5lZWQgdG8gZmluZCBvdXQgX3doeV8gdGhleSBkb24ndCBtYXRjaC4gT2Z0ZW4gaXQncyBzaW1wbGUgLSB5b3UgCitzZWUgdGhhdCB0aGUgY29kZSB1c2VzIGEgTlVMTCBwb2ludGVyIGFuZCB0aGVuIHlvdSBsb29rIGF0IHRoZSBjb2RlIGFuZCAKK3dvbmRlciBob3cgdGhlIE5VTEwgcG9pbnRlciBnb3QgdGhlcmUsIGFuZCBpZiBpdCdzIGEgdmFsaWQgdGhpbmcgdG8gZG8gCit5b3UganVzdCBjaGVjayBhZ2FpbnN0IGl0Li4KKworTm93LCBpZiBzb21lYm9keSBnZXRzIHRoZSBpZGVhIHRoYXQgdGhpcyBpcyB0aW1lLWNvbnN1bWluZyBhbmQgcmVxdWlyZXMgCitzb21lIHNtYWxsIGFtb3VudCBvZiBjb25jZW50cmF0aW9uLCB5b3UncmUgcmlnaHQuIFdoaWNoIGlzIHdoeSBJIHdpbGwgCittb3N0bHkganVzdCBpZ25vcmUgYW55IHBhbmljIHJlcG9ydHMgdGhhdCBkb24ndCBoYXZlIHRoZSBzeW1ib2wgdGFibGUgCitpbmZvIGV0YyBsb29rZWQgdXA6IGl0IHNpbXBseSBnZXRzIHRvbyBoYXJkIHRvIGxvb2sgaXQgdXAgKEkgaGF2ZSBzb21lIAorcHJvZ3JhbXMgdG8gc2VhcmNoIGZvciBzcGVjaWZpYyBwYXR0ZXJucyBpbiB0aGUga2VybmVsIGNvZGUgc2VnbWVudCwgYW5kIAorc29tZXRpbWVzIEkgaGF2ZSBiZWVuIGFibGUgdG8gbG9vayB1cCB0aG9zZSBraW5kcyBvZiBwYW5pY3MgdG9vLCBidXQgCit0aGF0IHJlYWxseSByZXF1aXJlcyBwcmV0dHkgZ29vZCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBqdXN0IHRvIGJlIGFibGUgCit0byBwaWNrIG91dCB0aGUgcmlnaHQgc2VxdWVuY2VzIGV0Yy4uKQorCitfU29tZXRpbWVzXyBpdCBoYXBwZW5zIHRoYXQgSSBqdXN0IHNlZSB0aGUgZGlzYXNzZW1ibGVkIGNvZGUgc2VxdWVuY2UgCitmcm9tIHRoZSBwYW5pYywgYW5kIEkga25vdyBpbW1lZGlhdGVseSB3aGVyZSBpdCdzIGNvbWluZyBmcm9tLiBUaGF0J3Mgd2hlbiAKK0kgZ2V0IHdvcnJpZWQgdGhhdCBJJ3ZlIGJlZW4gZG9pbmcgdGhpcyBmb3IgdG9vIGxvbmcgOy0pCisKKwkJTGludXMKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05vdGVzIG9uIE9vcHMgdHJhY2luZyB3aXRoIGtsb2dkOgorCitJbiBvcmRlciB0byBoZWxwIExpbnVzIGFuZCB0aGUgb3RoZXIga2VybmVsIGRldmVsb3BlcnMgdGhlcmUgaGFzIGJlZW4KK3N1YnN0YW50aWFsIHN1cHBvcnQgaW5jb3Jwb3JhdGVkIGludG8ga2xvZ2QgZm9yIHByb2Nlc3NpbmcgcHJvdGVjdGlvbgorZmF1bHRzLiAgSW4gb3JkZXIgdG8gaGF2ZSBmdWxsIHN1cHBvcnQgZm9yIGFkZHJlc3MgcmVzb2x1dGlvbiBhdCBsZWFzdAordmVyc2lvbiAxLjMtcGwzIG9mIHRoZSBzeXNrbG9nZCBwYWNrYWdlIHNob3VsZCBiZSB1c2VkLgorCitXaGVuIGEgcHJvdGVjdGlvbiBmYXVsdCBvY2N1cnMgdGhlIGtsb2dkIGRhZW1vbiBhdXRvbWF0aWNhbGx5Cit0cmFuc2xhdGVzIGltcG9ydGFudCBhZGRyZXNzZXMgaW4gdGhlIGtlcm5lbCBsb2cgbWVzc2FnZXMgdG8gdGhlaXIKK3N5bWJvbGljIGVxdWl2YWxlbnRzLiAgVGhpcyB0cmFuc2xhdGVkIGtlcm5lbCBtZXNzYWdlIGlzIHRoZW4KK2ZvcndhcmRlZCB0aHJvdWdoIHdoYXRldmVyIHJlcG9ydGluZyBtZWNoYW5pc20ga2xvZ2QgaXMgdXNpbmcuICBUaGUKK3Byb3RlY3Rpb24gZmF1bHQgbWVzc2FnZSBjYW4gYmUgc2ltcGx5IGN1dCBvdXQgb2YgdGhlIG1lc3NhZ2UgZmlsZXMKK2FuZCBmb3J3YXJkZWQgdG8gdGhlIGtlcm5lbCBkZXZlbG9wZXJzLgorCitUd28gdHlwZXMgb2YgYWRkcmVzcyByZXNvbHV0aW9uIGFyZSBwZXJmb3JtZWQgYnkga2xvZ2QuICBUaGUgZmlyc3QgaXMKK3N0YXRpYyB0cmFuc2xhdGlvbiBhbmQgdGhlIHNlY29uZCBpcyBkeW5hbWljIHRyYW5zbGF0aW9uLiAgU3RhdGljCit0cmFuc2xhdGlvbiB1c2VzIHRoZSBTeXN0ZW0ubWFwIGZpbGUgaW4gbXVjaCB0aGUgc2FtZSBtYW5uZXIgdGhhdAora3N5bW9vcHMgZG9lcy4gIEluIG9yZGVyIHRvIGRvIHN0YXRpYyB0cmFuc2xhdGlvbiB0aGUga2xvZ2QgZGFlbW9uCittdXN0IGJlIGFibGUgdG8gZmluZCBhIHN5c3RlbSBtYXAgZmlsZSBhdCBkYWVtb24gaW5pdGlhbGl6YXRpb24gdGltZS4KK1NlZSB0aGUga2xvZ2QgbWFuIHBhZ2UgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyBrbG9nZCBzZWFyY2hlcyBmb3IgbWFwCitmaWxlcy4KKworRHluYW1pYyBhZGRyZXNzIHRyYW5zbGF0aW9uIGlzIGltcG9ydGFudCB3aGVuIGtlcm5lbCBsb2FkYWJsZSBtb2R1bGVzCithcmUgYmVpbmcgdXNlZC4gIFNpbmNlIG1lbW9yeSBmb3Iga2VybmVsIG1vZHVsZXMgaXMgYWxsb2NhdGVkIGZyb20gdGhlCitrZXJuZWwncyBkeW5hbWljIG1lbW9yeSBwb29scyB0aGVyZSBhcmUgbm8gZml4ZWQgbG9jYXRpb25zIGZvciBlaXRoZXIKK3RoZSBzdGFydCBvZiB0aGUgbW9kdWxlIG9yIGZvciBmdW5jdGlvbnMgYW5kIHN5bWJvbHMgaW4gdGhlIG1vZHVsZS4KKworVGhlIGtlcm5lbCBzdXBwb3J0cyBzeXN0ZW0gY2FsbHMgd2hpY2ggYWxsb3cgYSBwcm9ncmFtIHRvIGRldGVybWluZQord2hpY2ggbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGVpciBsb2NhdGlvbiBpbiBtZW1vcnkuICBVc2luZyB0aGVzZQorc3lzdGVtIGNhbGxzIHRoZSBrbG9nZCBkYWVtb24gYnVpbGRzIGEgc3ltYm9sIHRhYmxlIHdoaWNoIGNhbiBiZSB1c2VkCit0byBkZWJ1ZyBhIHByb3RlY3Rpb24gZmF1bHQgd2hpY2ggb2NjdXJzIGluIGEgbG9hZGFibGUga2VybmVsIG1vZHVsZS4KKworQXQgdGhlIHZlcnkgbWluaW11bSBrbG9nZCB3aWxsIHByb3ZpZGUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB3aGljaAorZ2VuZXJhdGVkIHRoZSBwcm90ZWN0aW9uIGZhdWx0LiAgVGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwgc3ltYm9saWMKK2luZm9ybWF0aW9uIGF2YWlsYWJsZSBpZiB0aGUgZGV2ZWxvcGVyIG9mIHRoZSBsb2FkYWJsZSBtb2R1bGUgY2hvc2UgdG8KK2V4cG9ydCBzeW1ib2wgaW5mb3JtYXRpb24gZnJvbSB0aGUgbW9kdWxlLgorCitTaW5jZSB0aGUga2VybmVsIG1vZHVsZSBlbnZpcm9ubWVudCBjYW4gYmUgZHluYW1pYyB0aGVyZSBtdXN0IGJlIGEKK21lY2hhbmlzbSBmb3Igbm90aWZ5aW5nIHRoZSBrbG9nZCBkYWVtb24gd2hlbiBhIGNoYW5nZSBpbiBtb2R1bGUKK2Vudmlyb25tZW50IG9jY3Vycy4gIFRoZXJlIGFyZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBhdmFpbGFibGUgd2hpY2gKK2FsbG93IGtsb2dkIHRvIHNpZ25hbCB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBkYWVtb24gdGhhdCBzeW1ib2wKK2luZm9ybWF0aW9uIHNob3VsZCBiZSByZWZyZXNoZWQuICBTZWUgdGhlIGtsb2dkIG1hbnVhbCBwYWdlIGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKworQSBwYXRjaCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBzeXNrbG9nZCBkaXN0cmlidXRpb24gd2hpY2ggbW9kaWZpZXMgdGhlCittb2R1bGVzLTIuMC4wIHBhY2thZ2UgdG8gYXV0b21hdGljYWxseSBzaWduYWwga2xvZ2Qgd2hlbmV2ZXIgYSBtb2R1bGUKK2lzIGxvYWRlZCBvciB1bmxvYWRlZC4gIEFwcGx5aW5nIHRoaXMgcGF0Y2ggcHJvdmlkZXMgZXNzZW50aWFsbHkKK3NlYW1sZXNzIHN1cHBvcnQgZm9yIGRlYnVnZ2luZyBwcm90ZWN0aW9uIGZhdWx0cyB3aGljaCBvY2N1ciB3aXRoCitrZXJuZWwgbG9hZGFibGUgbW9kdWxlcy4KKworVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgcHJvdGVjdGlvbiBmYXVsdCBpbiBhIGxvYWRhYmxlIG1vZHVsZQorcHJvY2Vzc2VkIGJ5IGtsb2dkOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBdWcgMjkgMDk6NTE6MDEgYmxpemFyZCBrZXJuZWw6IFVuYWJsZSB0byBoYW5kbGUga2VybmVsIHBhZ2luZyByZXF1ZXN0IGF0IHZpcnR1YWwgYWRkcmVzcyBmMTVlOTdjYworQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiBjdXJyZW50LT50c3MuY3IzID0gMDA2MmQwMDAsICVjcjMgPSAwMDYyZDAwMAorQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiAqcGRlID0gMDAwMDAwMDAKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogT29wczogMDAwMgorQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiBDUFU6ICAgIDAKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogRUlQOiAgICAwMDEwOltvb3BzOl9vb3BzKzE2LzM4NjhdCitBdWcgMjkgMDk6NTE6MDEgYmxpemFyZCBrZXJuZWw6IEVGTEFHUzogMDAwMTAyMTIKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogZWF4OiAzMTVlOTdjYyAgIGVieDogMDAzYTZmODAgICBlY3g6IDAwMWJlNzdiICAgZWR4OiAwMDIzN2MwYworQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiBlc2k6IDAwMDAwMDAwICAgZWRpOiBiZmZmZmRiMyAgIGVicDogMDA1ODlmOTAgICBlc3A6IDAwNTg5ZjhjCitBdWcgMjkgMDk6NTE6MDEgYmxpemFyZCBrZXJuZWw6IGRzOiAwMDE4ICAgZXM6IDAwMTggICBmczogMDAyYiAgIGdzOiAwMDJiICAgc3M6IDAwMTgKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogUHJvY2VzcyBvb3BzX3Rlc3QgKHBpZDogMzM3NCwgcHJvY2VzcyBucjogMjEsIHN0YWNrcGFnZT0wMDU4OTAwMCkKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogU3RhY2s6IDMxNWU5N2NjIDAwNTg5Zjk4IDAxMDBiMGI0IGJmZmZmZWQ0IDAwMTJlMzhlIDAwMjQwYzY0IDAwM2E2ZjgwIDAwMDAwMDAxIAorQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiAgICAgICAgMDAwMDAwMDAgMDAyMzc4MTAgYmZmZmZmMDAgMDAxMGE3ZmEgMDAwMDAwMDMgMDAwMDAwMDEgMDAwMDAwMDAgYmZmZmZmMDAgCitBdWcgMjkgMDk6NTE6MDEgYmxpemFyZCBrZXJuZWw6ICAgICAgICBiZmZmZmRiMyBiZmZmZmVkNCBmZmZmZmZkYSAwMDAwMDAyYiAwMDA3MDAyYiAwMDAwMDAyYiAwMDAwMDAyYiAwMDAwMDAzNiAKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogQ2FsbCBUcmFjZTogW29vcHM6X29vcHNfaW9jdGwrNDgvODBdIFtfc3lzX2lvY3RsKzI1NC8yNzJdIFtfc3lzdGVtX2NhbGwrODIvMTI4XSAKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogQ29kZTogYzcgMDAgMDUgMDAgMDAgMDAgZWIgMDggOTAgOTAgOTAgOTAgOTAgOTAgOTAgOTAgODkgZWMgNWQgYzMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHIuIEcuVy4gV2V0dHN0ZWluICAgICAgICAgICBPbmNvbG9neSBSZXNlYXJjaCBEaXYuIENvbXB1dGluZyBGYWNpbGl0eQorUm9nZXIgTWFyaXMgQ2FuY2VyIENlbnRlciAgICBJTlRFUk5FVDogZ3JlZ0B3aW5kLnJtY2MuY29tCis4MjAgNHRoIFN0LiBOLgorRmFyZ28sIE5EICA1ODEyMgorUGhvbmU6IDcwMS0yMzQtNzU1NgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGFpbnRlZCBrZXJuZWxzOgorCitTb21lIG9vcHMgcmVwb3J0cyBjb250YWluIHRoZSBzdHJpbmcgJ1RhaW50ZWQ6ICcgYWZ0ZXIgdGhlIHByb2dyYW0KK2NvdW50ZXIsIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGtlcm5lbCBoYXMgYmVlbiB0YWludGVkIGJ5IHNvbWUKK21lY2hhbmlzbS4gIFRoZSBzdHJpbmcgaXMgZm9sbG93ZWQgYnkgYSBzZXJpZXMgb2YgcG9zaXRpb24gc2Vuc2l0aXZlCitjaGFyYWN0ZXJzLCBlYWNoIHJlcHJlc2VudGluZyBhIHBhcnRpY3VsYXIgdGFpbnRlZCB2YWx1ZS4KKworICAxOiAnRycgaWYgYWxsIG1vZHVsZXMgbG9hZGVkIGhhdmUgYSBHUEwgb3IgY29tcGF0aWJsZSBsaWNlbnNlLCAnUCcgaWYKKyAgICAgYW55IHByb3ByaWV0YXJ5IG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQuICBNb2R1bGVzIHdpdGhvdXQgYQorICAgICBNT0RVTEVfTElDRU5TRSBvciB3aXRoIGEgTU9EVUxFX0xJQ0VOU0UgdGhhdCBpcyBub3QgcmVjb2duaXNlZCBieQorICAgICBpbnNtb2QgYXMgR1BMIGNvbXBhdGlibGUgYXJlIGFzc3VtZWQgdG8gYmUgcHJvcHJpZXRhcnkuCisKKyAgMjogJ0YnIGlmIGFueSBtb2R1bGUgd2FzIGZvcmNlIGxvYWRlZCBieSBpbnNtb2QgLWYsICcgJyBpZiBhbGwKKyAgICAgbW9kdWxlcyB3ZXJlIGxvYWRlZCBub3JtYWxseS4KKworICAzOiAnUycgaWYgdGhlIG9vcHMgb2NjdXJyZWQgb24gYW4gU01QIGtlcm5lbCBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQKKyAgICAgIGhhc24ndCBiZWVuIGNlcnRpZmllZCBhcyBzYWZlIHRvIHJ1biBtdWx0aXByb2Nlc3Nvci4KKwkgIEN1cnJlbnRseSB0aGlzIG9jY3VycyBvbmx5IG9uIHZhcmlvdXMgQXRobG9ucyB0aGF0IGFyZSBub3QKKwkgIFNNUCBjYXBhYmxlLgorCitUaGUgcHJpbWFyeSByZWFzb24gZm9yIHRoZSAnVGFpbnRlZDogJyBzdHJpbmcgaXMgdG8gdGVsbCBrZXJuZWwKK2RlYnVnZ2VycyBpZiB0aGlzIGlzIGEgY2xlYW4ga2VybmVsIG9yIGlmIGFueXRoaW5nIHVudXN1YWwgaGFzCitvY2N1cnJlZC4gIFRhaW50aW5nIGlzIHBlcm1hbmVudCwgZXZlbiBpZiBhbiBvZmZlbmRpbmcgbW9kdWxlIGlzCit1bmxvYWRpbmcgdGhlIHRhaW50ZWQgdmFsdWUgcmVtYWlucyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBrZXJuZWwgaXMgbm90Cit0cnVzdHdvcnRoeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGFyaWRlLnR4dCBiL0RvY3VtZW50YXRpb24vcGFyaWRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDMxMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wYXJpZGUudHh0CkBAIC0wLDAgKzEsNDE3IEBACisKKwkJTGludXggYW5kIHBhcmFsbGVsIHBvcnQgSURFIGRldmljZXMKKworUEFSSURFIHYxLjAzICAgKGMpIDE5OTctOCAgR3JhbnQgR3VlbnRoZXIgPGdyYW50QHRvcnF1ZS5uZXQ+CisKKzEuIEludHJvZHVjdGlvbgorCitPd2luZyB0byB0aGUgc2ltcGxpY2l0eSBhbmQgbmVhciB1bml2ZXJzYWxpdHkgb2YgdGhlIHBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlCit0byBwZXJzb25hbCBjb21wdXRlcnMsIG1hbnkgZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIHBvcnRhYmxlIGhhcmQtZGlzaywKK0NELVJPTSwgTFMtMTIwIGFuZCB0YXBlIGRyaXZlcyB1c2UgdGhlIHBhcmFsbGVsIHBvcnQgdG8gY29ubmVjdCB0byB0aGVpcgoraG9zdCBjb21wdXRlci4gIFdoaWxlIHNvbWUgZGV2aWNlcyAobm90YWJseSBzY2FubmVycykgdXNlIGFkLWhvYyBtZXRob2RzCit0byBwYXNzIGNvbW1hbmRzIGFuZCBkYXRhIHRocm91Z2ggdGhlIHBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlLCBtb3N0IAorZXh0ZXJuYWwgZGV2aWNlcyBhcmUgYWN0dWFsbHkgaWRlbnRpY2FsIHRvIGFuIGludGVybmFsIG1vZGVsLCBidXQgd2l0aAorYSBwYXJhbGxlbC1wb3J0IGFkYXB0ZXIgY2hpcCBhZGRlZCBpbi4gIFNvbWUgb2YgdGhlIG9yaWdpbmFsIHBhcmFsbGVsIHBvcnQKK2FkYXB0ZXJzIHdlcmUgbGl0dGxlIG1vcmUgdGhhbiBtZWNoYW5pc21zIGZvciBtdWx0aXBsZXhpbmcgYSBTQ1NJIGJ1cy4KKyhUaGUgSW9tZWdhIFBQQS0zIGFkYXB0ZXIgdXNlZCBpbiB0aGUgWklQIGRyaXZlcyBpcyBhbiBleGFtcGxlIG9mIHRoaXMKK2FwcHJvYWNoKS4gIE1vc3QgY3VycmVudCBkZXNpZ25zLCBob3dldmVyLCB0YWtlIGEgZGlmZmVyZW50IGFwcHJvYWNoLgorVGhlIGFkYXB0ZXIgY2hpcCByZXByb2R1Y2VzIGEgc21hbGwgSVNBIG9yIElERSBidXMgaW4gdGhlIGV4dGVybmFsIGRldmljZQorYW5kIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIHByb3ZpZGVzIG9wZXJhdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKK2RldmljZSByZWdpc3RlcnMsIGFzIHdlbGwgYXMgZGF0YSBibG9jayB0cmFuc2ZlciBmdW5jdGlvbnMuICBTb21ldGltZXMsCit0aGUgZGV2aWNlIGJlaW5nIGFkZHJlc3NlZCB2aWEgdGhlIHBhcmFsbGVsIGNhYmxlIGlzIGEgc3RhbmRhcmQgU0NTSQorY29udHJvbGxlciBsaWtlIGFuIE5DUiA1MzgwLiAgVGhlICJkaXR0byIgZmFtaWx5IG9mIGV4dGVybmFsIHRhcGUKK2RyaXZlcyB1c2UgdGhlIElTQSByZXBsaWNhdG9yIHRvIGludGVyZmFjZSBhIGZsb3BweSBkaXNrIGNvbnRyb2xsZXIsCit3aGljaCBpcyB0aGVuIGNvbm5lY3RlZCB0byBhIGZsb3BweS10YXBlIG1lY2hhbmlzbS4gIFRoZSB2YXN0IG1ham9yaXR5CitvZiBleHRlcm5hbCBwYXJhbGxlbCBwb3J0IGRldmljZXMsIGhvd2V2ZXIsIGFyZSBub3cgYmFzZWQgb24gc3RhbmRhcmQKK0lERSB0eXBlIGRldmljZXMsIHdoaWNoIHJlcXVpcmUgbm8gaW50ZXJtZWRpYXRlIGNvbnRyb2xsZXIuICBJZiBvbmUKK3dlcmUgdG8gb3BlbiB1cCBhIHBhcmFsbGVsIHBvcnQgQ0QtUk9NIGRyaXZlLCBmb3IgaW5zdGFuY2UsIG9uZSB3b3VsZAorZmluZCBhIHN0YW5kYXJkIEFUQVBJIENELVJPTSBkcml2ZSwgYSBwb3dlciBzdXBwbHksIGFuZCBhIHNpbmdsZSBhZGFwdGVyCit0aGF0IGludGVyY29ubmVjdGVkIGEgc3RhbmRhcmQgUEMgcGFyYWxsZWwgcG9ydCBjYWJsZSBhbmQgYSBzdGFuZGFyZAorSURFIGNhYmxlLiAgSXQgaXMgdXN1YWxseSBwb3NzaWJsZSB0byBleGNoYW5nZSB0aGUgQ0QtUk9NIGRldmljZSB3aXRoCithbnkgb3RoZXIgZGV2aWNlIHVzaW5nIHRoZSBJREUgaW50ZXJmYWNlLiAKKworVGhlIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgc3VwcG9ydCBpbiBMaW51eCBmb3IgcGFyYWxsZWwgcG9ydCBJREUKK2RldmljZXMuICBJdCBkb2VzIG5vdCBjb3ZlciBwYXJhbGxlbCBwb3J0IFNDU0kgZGV2aWNlcywgImRpdHRvIiB0YXBlCitkcml2ZXMgb3Igc2Nhbm5lcnMuICBNYW55IGRpZmZlcmVudCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIAorcGFyYWxsZWwgcG9ydCBJREUgc3Vic3lzdGVtLCBpbmNsdWRpbmc6CisKKwlNaWNyb1NvbHV0aW9ucyBiYWNrcGFjayBDRC1ST00KKwlNaWNyb1NvbHV0aW9ucyBiYWNrcGFjayBQRC9DRAorCU1pY3JvU29sdXRpb25zIGJhY2twYWNrIGhhcmQtZHJpdmVzCisJTWljcm9Tb2x1dGlvbnMgYmFja3BhY2sgODAwMHQgdGFwZSBkcml2ZQorCVN5UXVlc3QgRVotMTM1LCBFWi0yMzAgJiBTcGFyUSBkcml2ZXMKKwlBdmF0YXIgU2hhcmsKKwlJbWF0aW9uIFN1cGVyZGlzayBMUy0xMjAKKwlNYXhlbGwgU3VwZXJkaXNrIExTLTEyMAorCUZyZWVDb20gUG93ZXIgQ0QgCisJSGV3bGV0dC1QYWNrYXJkIDVHQiBhbmQgOEdCIHRhcGUgZHJpdmVzCisJSGV3bGV0dC1QYWNrYXJkIDcxMDAgYW5kIDcyMDAgQ0QtUlcgZHJpdmVzCisKK2FzIHdlbGwgYXMgbW9zdCBvZiB0aGUgY2xvbmUgYW5kIG5vLW5hbWUgcHJvZHVjdHMgb24gdGhlIG1hcmtldC4KKworVG8gc3VwcG9ydCBzdWNoIGEgd2lkZSByYW5nZSBvZiBkZXZpY2VzLCBQQVJJREUsIHRoZSBwYXJhbGxlbCBwb3J0IElERQorc3Vic3lzdGVtLCBpcyBhY3R1YWxseSBzdHJ1Y3R1cmVkIGluIHRocmVlIHBhcnRzLiAgIFRoZXJlIGlzIGEgYmFzZQorcGFyaWRlIG1vZHVsZSB3aGljaCBwcm92aWRlcyBhIHJlZ2lzdHJ5IGFuZCBzb21lIGNvbW1vbiBtZXRob2RzIGZvcgorYWNjZXNzaW5nIHRoZSBwYXJhbGxlbCBwb3J0cy4gIFRoZSBzZWNvbmQgY29tcG9uZW50IGlzIGEgc2V0IG9mIAoraGlnaC1sZXZlbCBkcml2ZXJzIGZvciBlYWNoIG9mIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc3VwcG9ydGVkIGRldmljZXM6IAorCisJcGQJSURFIGRpc2sKKwlwY2QJQVRBUEkgQ0QtUk9NCisJcGYJQVRBUEkgZGlzaworCXB0CUFUQVBJIHRhcGUKKwlwZwlBVEFQSSBnZW5lcmljCisKKyhDdXJyZW50bHksIHRoZSBwZyBkcml2ZXIgaXMgb25seSB1c2VkIHdpdGggQ0QtUiBkcml2ZXMpLgorCitUaGUgaGlnaC1sZXZlbCBkcml2ZXJzIGZ1bmN0aW9uIGFjY29yZGluZyB0byB0aGUgcmVsZXZhbnQgc3RhbmRhcmRzLgorVGhlIHRoaXJkIGNvbXBvbmVudCBvZiBQQVJJREUgaXMgYSBzZXQgb2YgbG93LWxldmVsIHByb3RvY29sIGRyaXZlcnMKK2ZvciBlYWNoIG9mIHRoZSBwYXJhbGxlbCBwb3J0IElERSBhZGFwdGVyIGNoaXBzLiAgVGhhbmtzIHRvIHRoZSBpbnRlcmVzdAorYW5kIGVuY291cmFnZW1lbnQgb2YgTGludXggdXNlcnMgZnJvbSBtYW55IHBhcnRzIG9mIHRoZSB3b3JsZCwgCitzdXBwb3J0IGlzIGF2YWlsYWJsZSBmb3IgYWxtb3N0IGFsbCBrbm93biBhZGFwdGVyIHByb3RvY29sczoKKworICAgICAgICBhdGVuICAgIEFURU4gRUgtMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIChISykKKyAgICAgICAgYnBjayAgICBNaWNyb3NvbHV0aW9ucyBiYWNrcGFjayAgICAgICAgICAgICAgICAoVVMpCisgICAgICAgIGNvbW0gICAgRGF0YVN0b3IgKG9sZC10eXBlKSAiY29tbXV0ZXIiIGFkYXB0ZXIgKFRXKQorICAgICAgICBkc3RyICAgIERhdGFTdG9yIEVQLTIwMDAgICAgICAgICAgICAgICAgICAgICAgIChUVykKKyAgICAgICAgZXBhdCAgICBTaHV0dGxlIEVQQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUspCisgICAgICAgIGVwaWEgICAgU2h1dHRsZSBFUElBICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVLKQorCWZpdDIgICAgRklUIFRELTIwMDAJCQkgICAgICAgKFVTKQorCWZpdDMgICAgRklUIFRELTMwMDAJCQkgICAgICAgKFVTKQorCWZyaXEgICAgRnJlZWNvbSBJUSBjYWJsZSAgICAgICAgICAgICAgICAgICAgICAgKERFKQorICAgICAgICBmcnB3ICAgIEZyZWVjb20gUG93ZXIgICAgICAgICAgICAgICAgICAgICAgICAgIChERSkKKyAgICAgICAga2JpYyAgICBLaW5nQnl0ZSBLQklDLTk1MUEgYW5kIEtCSUMtOTcxQSAgICAgICAoVFcpCisJa3R0aSAgICBLVCBUZWNobm9sb2d5IFBIZCBhZGFwdGVyICAgICAgICAgICAgICAoU0cpCisgICAgICAgIG9uMjAgICAgT25TcGVjIDkwYzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVTKQorICAgICAgICBvbjI2ICAgIE9uU3BlYyA5MGMyNiAgICAgICAgICAgICAgICAgICAgICAgICAgIChVUykKKworCisyLiBVc2luZyB0aGUgUEFSSURFIHN1YnN5c3RlbQorCitXaGlsZSBjb25maWd1cmluZyB0aGUgTGludXgga2VybmVsLCB5b3UgbWF5IGNob29zZSBlaXRoZXIgdG8gYnVpbGQKK3RoZSBQQVJJREUgZHJpdmVycyBpbnRvIHlvdXIga2VybmVsLCBvciB0byBidWlsZCB0aGVtIGFzIG1vZHVsZXMuCisKK0luIGVpdGhlciBjYXNlLCB5b3Ugd2lsbCBuZWVkIHRvIHNlbGVjdCAiUGFyYWxsZWwgcG9ydCBJREUgZGV2aWNlIHN1cHBvcnQiCithcyB3ZWxsIGFzIGF0IGxlYXN0IG9uZSBvZiB0aGUgaGlnaC1sZXZlbCBkcml2ZXJzIGFuZCBhdCBsZWFzdCBvbmUKK29mIHRoZSBwYXJhbGxlbCBwb3J0IGNvbW11bmljYXRpb24gcHJvdG9jb2xzLiAgSWYgeW91IGRvIG5vdCBrbm93Cit3aGF0IGtpbmQgb2YgcGFyYWxsZWwgcG9ydCBhZGFwdGVyIGlzIHVzZWQgaW4geW91ciBkcml2ZSwgeW91IGNvdWxkCitiZWdpbiBieSBjaGVja2luZyB0aGUgZmlsZSBuYW1lcyBhbmQgYW55IHRleHQgZmlsZXMgb24geW91ciBET1MgCitpbnN0YWxsYXRpb24gZmxvcHB5LiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBsb29rIGF0IHRoZSBtYXJraW5ncyBvbgordGhlIGFkYXB0ZXIgY2hpcCBpdHNlbGYuICBUaGF0J3MgdXN1YWxseSBzdWZmaWNpZW50IHRvIGlkZW50aWZ5IHRoZQorY29ycmVjdCBkZXZpY2UuICAKKworWW91IGNhbiBhY3R1YWxseSBzZWxlY3QgYWxsIHRoZSBwcm90b2NvbCBtb2R1bGVzLCBhbmQgYWxsb3cgdGhlIFBBUklERQorc3Vic3lzdGVtIHRvIHRyeSB0aGVtIGFsbCBmb3IgeW91LgorCitGb3IgdGhlICJicmFuZC1uYW1lIiBwcm9kdWN0cyBsaXN0ZWQgYWJvdmUsIGhlcmUgYXJlIHRoZSBwcm90b2NvbAorYW5kIGhpZ2gtbGV2ZWwgZHJpdmVycyB0aGF0IHlvdSB3b3VsZCB1c2U6CisKKwlNYW51ZmFjdHVyZXIJCU1vZGVsCQlEcml2ZXIJUHJvdG9jb2wKKwkKKwlNaWNyb1NvbHV0aW9ucwkJQ0QtUk9NCQlwY2QJYnBjaworCU1pY3JvU29sdXRpb25zCQlQRCBkcml2ZQlwZglicGNrCisJTWljcm9Tb2x1dGlvbnMJCWhhcmQtZHJpdmUJcGQJYnBjaworCU1pY3JvU29sdXRpb25zICAgICAgICAgIDgwMDB0IHRhcGUgICAgICBwdCAgICAgIGJwY2sKKwlTeVF1ZXN0CQkJRVosIFNwYXJRCXBkCWVwYXQKKwlJbWF0aW9uCQkJU3VwZXJkaXNrCXBmCWVwYXQKKwlNYXhlbGwgICAgICAgICAgICAgICAgICBTdXBlcmRpc2sgICAgICAgcGYgICAgICBmcmlxCisJQXZhdGFyCQkJU2hhcmsJCXBkCWVwYXQKKwlGcmVlQ29tCQkJQ0QtUk9NCQlwY2QJZnJwdworCUhld2xldHQtUGFja2FyZAkJNUdCIFRhcGUJcHQJZXBhdAorCUhld2xldHQtUGFja2FyZAkJNzIwMGUgKENEKQlwY2QJZXBhdAorCUhld2xldHQtUGFja2FyZAkJNzIwMGUgKENELVIpCXBnCWVwYXQKKworMi4xICBDb25maWd1cmluZyBidWlsdC1pbiBkcml2ZXJzCisKK1dlIHJlY29tbWVuZCB0aGF0IHlvdSBnZXQgdG8ga25vdyBob3cgdGhlIGRyaXZlcnMgd29yayBhbmQgaG93IHRvCitjb25maWd1cmUgdGhlbSBhcyBsb2FkYWJsZSBtb2R1bGVzLCBiZWZvcmUgYXR0ZW1wdGluZyB0byBjb21waWxlIGEKK2tlcm5lbCB3aXRoIHRoZSBkcml2ZXJzIGJ1aWx0LWluLgorCitJZiB5b3UgYnVpbHQgYWxsIG9mIHlvdXIgUEFSSURFIHN1cHBvcnQgZGlyZWN0bHkgaW50byB5b3VyIGtlcm5lbCwKK2FuZCB5b3UgaGF2ZSBqdXN0IGEgc2luZ2xlIHBhcmFsbGVsIHBvcnQgSURFIGRldmljZSwgeW91ciBrZXJuZWwgc2hvdWxkCitsb2NhdGUgaXQgYXV0b21hdGljYWxseSBmb3IgeW91LiAgSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBkZXZpY2UsCit5b3UgbWF5IG5lZWQgdG8gZ2l2ZSBzb21lIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHlvdXIgYm9vdGxvYWRlcgorKGVnOiBMSUxPKSwgaG93IHRvIGRvIHRoYXQgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50LgorCitUaGUgaGlnaC1sZXZlbCBkcml2ZXJzIGFjY2VwdCBhIG51bWJlciBvZiBjb21tYW5kIGxpbmUgcGFyYW1ldGVycywgYWxsCitvZiB3aGljaCBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgc291cmNlIGZpbGVzIGluIGxpbnV4L2RyaXZlcnMvYmxvY2svcGFyaWRlLgorQnkgZGVmYXVsdCwgZWFjaCBkcml2ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSBhbGwgcGFyYWxsZWwgcG9ydHMgaXQKK2NhbiBmaW5kLCBhbmQgYWxsIHByb3RvY29sIHR5cGVzIHRoYXQgaGF2ZSBiZWVuIGluc3RhbGxlZCwgdW50aWwgaXQgZmluZHMKK2EgcGFyYWxsZWwgcG9ydCBJREUgYWRhcHRlci4gIE9uY2UgaXQgZmluZHMgb25lLCB0aGUgcHJvYmUgc3RvcHMuICBTbywKK2lmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgZGV2aWNlLCB5b3Ugd2lsbCBuZWVkIHRvIHRlbGwgdGhlIGRyaXZlcnMKK2hvdyB0byBpZGVudGlmeSB0aGVtLiAgVGhpcyByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSBwb3J0IGFkZHJlc3MsIHRoZQorcHJvdG9jb2wgaWRlbnRpZmljYXRpb24gbnVtYmVyIGFuZCwgZm9yIHNvbWUgZGV2aWNlcywgdGhlIGRyaXZlJ3MKK2NoYWluIElELiAgV2hpbGUgeW91ciBzeXN0ZW0gaXMgYm9vdGluZywgYSBudW1iZXIgb2YgbWVzc2FnZXMgYXJlCitkaXNwbGF5ZWQgb24gdGhlIGNvbnNvbGUuICBMaWtlIGFsbCBzdWNoIG1lc3NhZ2VzLCB0aGV5IGNhbiBiZQorcmV2aWV3ZWQgd2l0aCB0aGUgJ2RtZXNnJyBjb21tYW5kLiAgQW1vbmcgdGhvc2UgbWVzc2FnZXMgd2lsbCBiZQorc29tZSBsaW5lcyBsaWtlOgorCisJcGFyaWRlOiBicGNrIHJlZ2lzdGVyZWQgYXMgcHJvdG9jb2wgMAorCXBhcmlkZTogZXBhdCByZWdpc3RlcmVkIGFzIHByb3RvY29sIDEKKworVGhlIG51bWJlcnMgd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgdW50aWwgeW91IGJ1aWxkIGEgbmV3IGtlcm5lbCB3aXRoCitkaWZmZXJlbnQgcHJvdG9jb2wgc2VsZWN0aW9ucy4gIFlvdSBzaG91bGQgbm90ZSB0aGVzZSBudW1iZXJzIGFzIHlvdQord2lsbCBuZWVkIHRoZW0gdG8gaWRlbnRpZnkgdGhlIGRldmljZXMuCisKK0lmIHlvdSBoYXBwZW4gdG8gYmUgdXNpbmcgYSBNaWNyb1NvbHV0aW9ucyBiYWNrcGFjayBkZXZpY2UsIHlvdSB3aWxsCithbHNvIG5lZWQgdG8ga25vdyB0aGUgdW5pdCBJRCBudW1iZXIgZm9yIGVhY2ggZHJpdmUuICBUaGlzIGlzIHVzdWFsbHkKK3RoZSBsYXN0IHR3byBkaWdpdHMgb2YgdGhlIGRyaXZlJ3Mgc2VyaWFsIG51bWJlciAoYnV0IHJlYWQgTWljcm9Tb2x1dGlvbnMnCitkb2N1bWVudGF0aW9uIGFib3V0IHRoaXMpLgorCitBcyBhbiBleGFtcGxlLCBsZXQncyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBhIE1pY3JvU29sdXRpb25zIFBEL0NEIGRyaXZlCit3aXRoIHVuaXQgSUQgbnVtYmVyIDM2IGNvbm5lY3RlZCB0byB0aGUgcGFyYWxsZWwgcG9ydCBhdCAweDM3OCwgYSBTeVF1ZXN0IAorRVotMTM1IGNvbm5lY3RlZCB0byB0aGUgY2hhaW5lZCBwb3J0IG9uIHRoZSBQRC9DRCBkcml2ZSBhbmQgYWxzbyBhbiAKK0ltYXRpb24gU3VwZXJkaXNrIGNvbm5lY3RlZCB0byBwb3J0IDB4Mjc4LiAgWW91IGNvdWxkIGdpdmUgdGhlIGZvbGxvd2luZyAKK29wdGlvbnMgb24geW91ciBib290IGNvbW1hbmQ6CisKKwlwZC5kcml2ZTA9MHgzNzgsMSBwZi5kcml2ZTA9MHgyNzgsMSBwZi5kcml2ZTE9MHgzNzgsMCwzNgorCitJbiB0aGUgbGFzdCBvcHRpb24sIHBmLmRyaXZlMSBjb25maWd1cmVzIGRldmljZSAvZGV2L3BmMSwgdGhlIDB4Mzc4CitpcyB0aGUgcGFyYWxsZWwgcG9ydCBiYXNlIGFkZHJlc3MsIHRoZSAwIGlzIHRoZSBwcm90b2NvbCByZWdpc3RyYXRpb24KK251bWJlciBhbmQgMzYgaXMgdGhlIGNoYWluIElELgorCitQbGVhc2Ugbm90ZTogIHdoaWxlIFBBUklERSB3aWxsIHdvcmsgYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSAKK1BBUlBPUlQgcGFyYWxsZWwgcG9ydCBzaGFyaW5nIHN5c3RlbSB0aGF0IGlzIGluY2x1ZGVkIGJ5IHRoZQorIlBhcmFsbGVsIHBvcnQgc3VwcG9ydCIgb3B0aW9uLCBQQVJQT1JUIG11c3QgYmUgaW5jbHVkZWQgYW5kIGVuYWJsZWQKK2lmIHlvdSB3YW50IHRvIHVzZSBjaGFpbnMgb2YgZGV2aWNlcyBvbiB0aGUgc2FtZSBwYXJhbGxlbCBwb3J0LgorCisyLjIgIExvYWRpbmcgYW5kIGNvbmZpZ3VyaW5nIFBBUklERSBhcyBtb2R1bGVzCisKK0l0IGlzIG11Y2ggZmFzdGVyIGFuZCBzaW1wbGVyIHRvIGdldCB0byB1bmRlcnN0YW5kIHRoZSBQQVJJREUgZHJpdmVycworaWYgeW91IHVzZSB0aGVtIGFzIGxvYWRhYmxlIGtlcm5lbCBtb2R1bGVzLiAgIAorCitOb3RlIDE6ICB1c2luZyB0aGVzZSBkcml2ZXJzIHdpdGggdGhlICJrZXJuZWxkIiBhdXRvbWF0aWMgbW9kdWxlIGxvYWRpbmcKK3N5c3RlbSBpcyBub3QgcmVjb21tZW5kZWQgZm9yIGJlZ2lubmVycywgYW5kIGlzIG5vdCBkb2N1bWVudGVkIGhlcmUuICAKKworTm90ZSAyOiAgaWYgeW91IGJ1aWxkIFBBUlBPUlQgc3VwcG9ydCBhcyBhIGxvYWRhYmxlIG1vZHVsZSwgUEFSSURFIG11c3QKK2Fsc28gYmUgYnVpbHQgYXMgbG9hZGFibGUgbW9kdWxlcywgYW5kIFBBUlBPUlQgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZQorUEFSSURFIG1vZHVsZXMuCisKK1RvIHVzZSBQQVJJREUsIHlvdSBtdXN0IGJlZ2luIGJ5IAorCisJaW5zbW9kIHBhcmlkZQorCit0aGlzIGxvYWRzIGEgYmFzZSBtb2R1bGUgd2hpY2ggcHJvdmlkZXMgYSByZWdpc3RyeSBmb3IgdGhlIHByb3RvY29scywKK2Ftb25nIG90aGVyIHRhc2tzLgorCitUaGVuLCBsb2FkIGFzIG1hbnkgb2YgdGhlIHByb3RvY29sIG1vZHVsZXMgYXMgeW91IHRoaW5rIHlvdSBtaWdodCBuZWVkLgorQXMgeW91IGxvYWQgZWFjaCBtb2R1bGUsIGl0IHdpbGwgcmVnaXN0ZXIgdGhlIHByb3RvY29scyB0aGF0IGl0IHN1cHBvcnRzLAorYW5kIHByaW50IGEgbG9nIG1lc3NhZ2UgdG8geW91ciBrZXJuZWwgbG9nIGZpbGUgYW5kIHlvdXIgY29uc29sZS4gRm9yIAorZXhhbXBsZToKKworCSMgaW5zbW9kIGVwYXQKKwlwYXJpZGU6IGVwYXQgcmVnaXN0ZXJlZCBhcyBwcm90b2NvbCAwCisJIyBpbnNtb2Qga2JpYworCXBhcmlkZTogazk1MSByZWdpc3RlcmVkIGFzIHByb3RvY29sIDEKKyAgICAgICAgcGFyaWRlOiBrOTcxIHJlZ2lzdGVyZWQgYXMgcHJvdG9jb2wgMgorCitGaW5hbGx5LCB5b3UgY2FuIGxvYWQgaGlnaC1sZXZlbCBkcml2ZXJzIGZvciBlYWNoIGtpbmQgb2YgZGV2aWNlIHRoYXQKK3lvdSBoYXZlIGNvbm5lY3RlZC4gIEJ5IGRlZmF1bHQsIGVhY2ggZHJpdmVyIHdpbGwgYXV0b3Byb2JlIGZvciBhIHNpbmdsZSAKK2RldmljZSwgYnV0IHlvdSBjYW4gc3VwcG9ydCB1cCB0byBmb3VyIHNpbWlsYXIgZGV2aWNlcyBieSBnaXZpbmcgdGhlaXIKK2luZGl2aWR1YWwgY28tb3JkaW5hdGVzIHdoZW4geW91IGxvYWQgdGhlIGRyaXZlci4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgdHdvIG5vLW5hbWUgQ0QtUk9NIGRyaXZlcyBib3RoIHVzaW5nIHRoZQorS2luZ0J5dGUgS0JJQy05NTFBIGFkYXB0ZXIsIG9uZSBvbiBwb3J0IDB4Mzc4IGFuZCB0aGUgb3RoZXIgb24gMHgzYmMKK3lvdSBjb3VsZCBnaXZlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworCSMgaW5zbW9kIHBjZCBkcml2ZTA9MHgzNzgsMSBkcml2ZTE9MHgzYmMsMQorCitGb3IgbW9zdCBhZGFwdGVycywgZ2l2aW5nIGEgcG9ydCBhZGRyZXNzIGFuZCBwcm90b2NvbCBudW1iZXIgaXMgc3VmZmljaWVudCwKK2J1dCBjaGVjayB0aGUgc291cmNlIGZpbGVzIGluIGxpbnV4L2RyaXZlcnMvYmxvY2svcGFyaWRlIGZvciBtb3JlIAoraW5mb3JtYXRpb24uICAoSG9wZWZ1bGx5IHNvbWVvbmUgd2lsbCB3cml0ZSBzb21lIG1hbiBwYWdlcyBvbmUgZGF5ICEpLgorCitBcyBhbm90aGVyIGV4YW1wbGUsIGhlcmUncyB3aGF0IGhhcHBlbnMgd2hlbiBQQVJQT1JUIGlzIGluc3RhbGxlZCwgYW5kCithIFN5UXVlc3QgRVotMTM1IGlzIGF0dGFjaGVkIHRvIHBvcnQgMHgzNzg6CisKKwkjIGluc21vZCBwYXJpZGUKKwlwYXJpZGU6IHZlcnNpb24gMS4wIGluc3RhbGxlZAorCSMgaW5zbW9kIGVwYXQKKwlwYXJpZGU6IGVwYXQgcmVnaXN0ZXJlZCBhcyBwcm90b2NvbCAwCisJIyBpbnNtb2QgcGQKKwlwZDogcGQgdmVyc2lvbiAxLjAsIG1ham9yIDQ1LCBjbHVzdGVyIDY0LCBuaWNlIDAKKwlwZGE6IFNoYXJpbmcgcGFycG9ydDEgYXQgMHgzNzgKKwlwZGE6IGVwYXQgMS4wLCBTaHV0dGxlIEVQQVQgY2hpcCBjMyBhdCAweDM3OCwgbW9kZSA1IChFUFAtMzIpLCBkZWxheSAxCisJcGRhOiBTeVF1ZXN0IEVaMTM1QSwgMjYyMTQ0IGJsb2NrcyBbMTI4TV0sICg1MTIvMTYvMzIpLCByZW1vdmFibGUgbWVkaWEKKwkgcGRhOiBwZGExCisKK05vdGUgdGhhdCB0aGUgbGFzdCBsaW5lIGlzIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ2VuZXJpYyBwYXJ0aXRpb24gdGFibGUKK3NjYW5uZXIgLSBpbiB0aGlzIGNhc2UgaXQgcmVwb3J0cyB0aGF0IGl0IGhhcyBmb3VuZCBhIGRpc2sgd2l0aCBvbmUgcGFydGl0aW9uLgorCisyLjMgIFVzaW5nIGEgUEFSSURFIGRldmljZQorCitPbmNlIHRoZSBkcml2ZXJzIGhhdmUgYmVlbiBsb2FkZWQsIHlvdSBjYW4gYWNjZXNzIFBBUklERSBkZXZpY2VzIGluIHRoZQorc2FtZSB3YXkgYXMgdGhlaXIgdHJhZGl0aW9uYWwgY291bnRlcnBhcnRzLiAgWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0bworY3JlYXRlIHRoZSBkZXZpY2UgInNwZWNpYWwgZmlsZXMiLiAgSGVyZSBpcyBhIHNpbXBsZSBzY3JpcHQgdGhhdCB5b3UgY2FuCitjdXQgdG8gYSBmaWxlIGFuZCBleGVjdXRlOgorCisjIS9iaW4vYmFzaAorIworIyBta2QgLS0gYSBzY3JpcHQgdG8gY3JlYXRlIHRoZSBkZXZpY2Ugc3BlY2lhbCBmaWxlcyBmb3IgdGhlIFBBUklERSBzdWJzeXN0ZW0KKyMKK2Z1bmN0aW9uIG1rZGV2IHsKKyAgbWtub2QgJDEgJDIgJDMgJDQgOyBjaG1vZCAwNjYwICQxIDsgY2hvd24gcm9vdDpkaXNrICQxCit9CisjCitmdW5jdGlvbiBwZCB7CisgIEQ9JCggcHJpbnRmIFxcJCggcHJpbnRmICJ4JTAzeCIgJFsgJDEgKyA5NyBdICkgKQorICBta2RldiBwZCREIGIgNDUgJFsgJDEgKiAxNiBdCisgIGZvciBQIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1CisgIGRvIG1rZGV2IHBkJEQkUCBiIDQ1ICRbICQxICogMTYgKyAkUCBdCisgIGRvbmUKK30KKyMKK2NkIC9kZXYKKyMKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBwZCAkdSA7IGRvbmUKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBta2RldiBwY2QkdSBiIDQ2ICR1IDsgZG9uZSAKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBta2RldiBwZiR1ICBiIDQ3ICR1IDsgZG9uZSAKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBta2RldiBwdCR1ICBjIDk2ICR1IDsgZG9uZSAKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBta2RldiBucHQkdSBjIDk2ICRbICR1ICsgMTI4IF0gOyBkb25lIAorZm9yIHUgaW4gMCAxIDIgMyA7IGRvIG1rZGV2IHBnJHUgIGMgOTcgJHUgOyBkb25lIAorIworIyBlbmQgb2YgbWtkCisKK1dpdGggdGhlIGRldmljZSBmaWxlcyBhbmQgZHJpdmVycyBpbiBwbGFjZSwgeW91IGNhbiBhY2Nlc3MgUEFSSURFIGRldmljZXMKK2xpa2UgYW55IG90aGVyIExpbnV4IGRldmljZS4gICBGb3IgZXhhbXBsZSwgdG8gbW91bnQgYSBDRC1ST00gaW4gcGNkMCwgdXNlOgorCisJbW91bnQgL2Rldi9wY2QwIC9jZHJvbQorCitJZiB5b3UgaGF2ZSBhIGZyZXNoIEF2YXRhciBTaGFyayBjYXJ0cmlkZ2UsIGFuZCB0aGUgZHJpdmUgaXMgcGRhLCB5b3UKK21pZ2h0IGRvIHNvbWV0aGluZyBsaWtlOgorCisJZmRpc2sgL2Rldi9wZGEJCS0tIG1ha2UgYSBuZXcgcGFydGl0aW9uIHRhYmxlIHdpdGgKKwkJCQkgICBwYXJ0aXRpb24gMSBvZiB0eXBlIDgzCisKKwlta2UyZnMgL2Rldi9wZGExCS0tIHRvIGJ1aWxkIHRoZSBmaWxlIHN5c3RlbQorCisJbWtkaXIgL3NoYXJrCQktLSBtYWtlIGEgcGxhY2UgdG8gbW91bnQgdGhlIGRpc2sKKworCW1vdW50IC9kZXYvcGRhMSAvc2hhcmsKKworRGV2aWNlcyBsaWtlIHRoZSBJbWF0aW9uIHN1cGVyZGlzayB3b3JrIGluIHRoZSBzYW1lIHdheSwgZXhjZXB0IHRoYXQKK3RoZXkgZG8gbm90IGhhdmUgYSBwYXJ0aXRpb24gdGFibGUuICBGb3IgZXhhbXBsZSB0byBtYWtlIGEgMTIwTUIKK2Zsb3BweSB0aGF0IHlvdSBjb3VsZCBzaGFyZSB3aXRoIGEgRE9TIHN5c3RlbToKKworCW1rZG9zZnMgL2Rldi9wZjAKKwltb3VudCAvZGV2L3BmMCAvbW50CisKKworMi40ICBUaGUgcGYgZHJpdmVyCisKK1RoZSBwZiBkcml2ZXIgaXMgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGlzaworZGV2aWNlcy4gIFRoZSBtb3N0IGNvbW1vbiBkZXZpY2VzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIFBEIGRyaXZlcworYW5kIExTLTEyMCBkcml2ZXMuICBUcmFkaXRpb25hbGx5LCBtZWRpYSBmb3IgdGhlc2UgZGV2aWNlcyBhcmUgbm90CitwYXJ0aXRpb25lZC4gIENvbnNlcXVlbnRseSwgdGhlIHBmIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpdGlvbmVkCittZWRpYS4gIFRoaXMgbWF5IGJlIGNoYW5nZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiAKKworMi41ICBVc2luZyB0aGUgcHQgZHJpdmVyCisKK1RoZSBwdCBkcml2ZXIgZm9yIHBhcmFsbGVsIHBvcnQgQVRBUEkgdGFwZSBkcml2ZXMgaXMgYSBtaW5pbWFsIGRyaXZlci4KK0l0IGRvZXMgbm90IHlldCBzdXBwb3J0IG1hbnkgb2YgdGhlIHN0YW5kYXJkIHRhcGUgaW9jdGwgb3BlcmF0aW9ucy4gCitGb3IgYmVzdCBwZXJmb3JtYW5jZSwgYSBibG9jayBzaXplIG9mIDMyS0Igc2hvdWxkIGJlIHVzZWQuICBZb3Ugd2lsbAorcHJvYmFibHkgd2FudCB0byBzZXQgdGhlIHBhcmFsbGVsIHBvcnQgZGVsYXkgdG8gMCwgaWYgeW91IGNhbi4KKworMi42ICBVc2luZyB0aGUgcGcgZHJpdmVyCisKK1RoZSBwZyBkcml2ZXIgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgY2RyZWNvcmQgcHJvZ3JhbQordG8gY3JlYXRlIENELVJPTXMuICBQbGVhc2UgZ2V0IGNkcmVjb3JkIHZlcnNpb24gMS42LjEgb3IgbGF0ZXIKK2Zyb20gZnRwOi8vZnRwLmZva3VzLmdtZC5kZS9wdWIvdW5peC9jZHJlY29yZC8gLiAgVG8gcmVjb3JkIENELVIgbWVkaWEgCit5b3VyIHBhcmFsbGVsIHBvcnQgc2hvdWxkIGlkZWFsbHkgYmUgc2V0IHRvIEVQUCBtb2RlLCBhbmQgdGhlICJwb3J0IGRlbGF5IiAKK3Nob3VsZCBiZSBzZXQgdG8gMC4gIFdpdGggdGhvc2Ugc2V0dGluZ3MgaXQgaXMgcG9zc2libGUgdG8gcmVjb3JkIGF0IDJ4IAorc3BlZWQgd2l0aG91dCBhbnkgYnVmZmVyIHVuZGVycnVucy4gIElmIHlvdSBjYW5ub3QgZ2V0IHRoZSBkcml2ZXIgdG8gd29yaworaW4gRVBQIG1vZGUsIHRyeSB0byB1c2UgImJpZGlyZWN0aW9uYWwiIG9yICJQUy8yIiBtb2RlIGFuZCAxeCBzcGVlZHMgb25seS4KKworCiszLiBUcm91Ymxlc2hvb3RpbmcKKworMy4xICBVc2UgRVBQIG1vZGUgaWYgeW91IGNhbgorCitUaGUgbW9zdCBjb21tb24gcHJvYmxlbXMgdGhhdCBwZW9wbGUgcmVwb3J0IHdpdGggdGhlIFBBUklERSBkcml2ZXJzCitjb25jZXJuIHRoZSBwYXJhbGxlbCBwb3J0IENNT1Mgc2V0dGluZ3MuICBBdCB0aGlzIHRpbWUsIG5vbmUgb2YgdGhlCitQQVJJREUgcHJvdG9jb2wgbW9kdWxlcyBzdXBwb3J0IEVDUCBtb2RlLCBvciBhbnkgRUNQIGNvbWJpbmF0aW9uIG1vZGVzLgorSWYgeW91IGFyZSBhYmxlIHRvIGRvIHNvLCBwbGVhc2Ugc2V0IHlvdXIgcGFyYWxsZWwgcG9ydCBpbnRvIEVQUCBtb2RlCit1c2luZyB5b3VyIENNT1Mgc2V0dXAgcHJvY2VkdXJlLgorCiszLjIgIENoZWNrIHRoZSBwb3J0IGRlbGF5CisKK1NvbWUgcGFyYWxsZWwgcG9ydHMgY2Fubm90IHJlbGlhYmx5IHRyYW5zZmVyIGRhdGEgYXQgZnVsbCBzcGVlZC4gIFRvCitvZmZzZXQgdGhlIGVycm9ycywgdGhlIFBBUklERSBwcm90b2NvbCBtb2R1bGVzIGludHJvZHVjZSBhICJwb3J0CitkZWxheSIgYmV0d2VlbiBlYWNoIGFjY2VzcyB0byB0aGUgaS9vIHBvcnRzLiAgRWFjaCBwcm90b2NvbCBzZXRzCithIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgZGVsYXkuICBJbiBtb3N0IGNhc2VzLCB0aGUgdXNlciBjYW4gb3ZlcnJpZGUKK3RoZSBkZWZhdWx0IGFuZCBzZXQgaXQgdG8gMCAtIHJlc3VsdGluZyBpbiBzb21ld2hhdCBoaWdoZXIgdHJhbnNmZXIKK3JhdGVzLiAgSW4gc29tZSByYXJlIGNhc2VzIChlc3BlY2lhbGx5IHdpdGggb2xkZXIgNDg2IHN5c3RlbXMpIHRoZQorZGVmYXVsdCBkZWxheXMgYXJlIG5vdCBsb25nIGVub3VnaC4gIGlmIHlvdSBleHBlcmllbmNlIGNvcnJ1cHQgZGF0YQordHJhbnNmZXJzLCBvciB1bmV4cGVjdGVkIGZhaWx1cmVzLCB5b3UgbWF5IHdpc2ggdG8gaW5jcmVhc2UgdGhlCitwb3J0IGRlbGF5LiAgIFRoZSBkZWxheSBjYW4gYmUgcHJvZ3JhbW1lZCB1c2luZyB0aGUgImRyaXZlTiIgcGFyYW1ldGVycwordG8gZWFjaCBvZiB0aGUgaGlnaC1sZXZlbCBkcml2ZXJzLiAgUGxlYXNlIHNlZSB0aGUgbm90ZXMgYWJvdmUsIG9yCityZWFkIHRoZSBjb21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkcml2ZXIgc291cmNlIGZpbGVzIGluCitsaW51eC9kcml2ZXJzL2Jsb2NrL3BhcmlkZS4KKworMy4zICBTb21lIGRyaXZlcyBuZWVkIGEgcHJpbnRlciByZXNldAorCitUaGVyZSBhcHBlYXIgdG8gYmUgYSBudW1iZXIgb2YgIm5vbmFtZSIgZXh0ZXJuYWwgZHJpdmVzIG9uIHRoZSBtYXJrZXQKK3RoYXQgZG8gbm90IGFsd2F5cyBwb3dlciB1cCBjb3JyZWN0bHkuICBXZSBoYXZlIG5vdGljZWQgdGhpcyB3aXRoIHNvbWUKK2RyaXZlcyBiYXNlZCBvbiBPblNwZWMgYW5kIG9sZGVyIEZyZWVjb20gYWRhcHRlcnMuICBJbiB0aGVzZSByYXJlIGNhc2VzLAordGhlIGFkYXB0ZXIgY2FuIG9mdGVuIGJlIHJlaW5pdGlhbGlzZWQgYnkgaXNzdWluZyBhICJwcmludGVyIHJlc2V0IiBvbgordGhlIHBhcmFsbGVsIHBvcnQuICBBcyB0aGUgcmVzZXQgb3BlcmF0aW9uIGlzIHBvdGVudGlhbGx5IGRpc3J1cHRpdmUgaW4gCittdWx0aXBsZSBkZXZpY2UgZW52aXJvbm1lbnRzLCB0aGUgUEFSSURFIGRyaXZlcnMgd2lsbCBub3QgZG8gaXQgCithdXRvbWF0aWNhbGx5LiAgWW91IGNhbiBob3dldmVyLCBmb3JjZSBhIHByaW50ZXIgcmVzZXQgYnkgZG9pbmc6CisKKwlpbnNtb2QgbHAgcmVzZXQ9MQorCXJtbW9kIGxwCisKK0lmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBtYXJnaW5hbCBjYXNlcywgeW91IHNob3VsZCBwcm9iYWJseSBidWlsZAoreW91ciBwYXJpZGUgZHJpdmVycyBhcyBtb2R1bGVzLCBhbmQgYXJyYW5nZSB0byBkbyB0aGUgcHJpbnRlciByZXNldAorYmVmb3JlIGxvYWRpbmcgdGhlIFBBUklERSBkcml2ZXJzLiAKKworMy40ICBVc2UgdGhlIHZlcmJvc2Ugb3B0aW9uIGFuZCBkbWVzZyBpZiB5b3UgbmVlZCBoZWxwCisKK1doaWxlIGEgbG90IG9mIHRlc3RpbmcgaGFzIGdvbmUgaW50byB0aGVzZSBkcml2ZXJzIHRvIG1ha2UgdGhlbSB3b3JrCithcyBzbW9vdGhseSBhcyBwb3NzaWJsZSwgcHJvYmxlbXMgd2lsbCBhcmlzZS4gIElmIHlvdSBkbyBoYXZlIHByb2JsZW1zLAorcGxlYXNlIGNoZWNrIGFsbCB0aGUgb2J2aW91cyB0aGluZ3MgZmlyc3Q6ICBkb2VzIHRoZSBkcml2ZSB3b3JrIGluCitET1Mgd2l0aCB0aGUgbWFudWZhY3R1cmVyJ3MgZHJpdmVycyA/ICBJZiB0aGF0IGRvZXNuJ3QgeWllbGQgYW55IHVzZWZ1bAorY2x1ZXMsIHRoZW4gcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIGRyaXZlIGlzIGhvb2tlZCB0byB5b3VyIHN5c3RlbSwKK2FuZCB0aGF0IGVpdGhlciAoYSkgUEFSUE9SVCBpcyBlbmFibGVkIG9yIChiKSBubyBvdGhlciBkZXZpY2UgZHJpdmVyCitpcyB1c2luZyB5b3VyIHBhcmFsbGVsIHBvcnQgKGNoZWNrIGluIC9wcm9jL2lvcG9ydHMpLiAgVGhlbiwgbG9hZCB0aGUKK2FwcHJvcHJpYXRlIGRyaXZlcnMgKHlvdSBjYW4gbG9hZCBzZXZlcmFsIHByb3RvY29sIG1vZHVsZXMgaWYgeW91IHdhbnQpCithcyBpbjoKKworCSMgaW5zbW9kIHBhcmlkZQorCSMgaW5zbW9kIGVwYXQKKwkjIGluc21vZCBicGNrCisJIyBpbnNtb2Qga2JpYworCS4uLgorCSMgaW5zbW9kIHBkIHZlcmJvc2U9MQorCisodXNpbmcgdGhlIGNvcnJlY3QgZHJpdmVyIGZvciB0aGUgdHlwZSBvZiBkZXZpY2UgeW91IGhhdmUsIG9mIGNvdXJzZSkuCitUaGUgdmVyYm9zZT0xIHBhcmFtZXRlciB3aWxsIGNhdXNlIHRoZSBkcml2ZXJzIHRvIGxvZyBhIHRyYWNlIG9mIHRoZWlyCithY3Rpdml0eSBhcyB0aGV5IGF0dGVtcHQgdG8gbG9jYXRlIHlvdXIgZHJpdmUuCisKK1VzZSAnZG1lc2cnIHRvIGNhcHR1cmUgYSBsb2cgb2YgYWxsIHRoZSBQQVJJREUgbWVzc2FnZXMgKGFueSBtZXNzYWdlcworYmVnaW5uaW5nIHdpdGggcGFyaWRlOiwgYSBwcm90b2NvbCBtb2R1bGUncyBuYW1lIG9yIGEgZHJpdmVyJ3MgbmFtZSkgYW5kCitpbmNsdWRlIHRoYXQgd2l0aCB5b3VyIGJ1ZyByZXBvcnQuICBZb3UgY2FuIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgaW4gb25lCitvZiB0d28gd2F5cy4gIEVpdGhlciBzZW5kIGl0IGRpcmVjdGx5IHRvIHRoZSBhdXRob3Igb2YgdGhlIFBBUklERSBzdWl0ZSwKK2J5IGUtbWFpbCB0byBncmFudEB0b3JxdWUubmV0LCBvciBqb2luIHRoZSBsaW51eC1wYXJwb3J0IG1haWxpbmcgbGlzdAorYW5kIHBvc3QgeW91ciByZXBvcnQgdGhlcmUuCisKKzMuNSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb3IgaGVscAorCitZb3UgY2FuIGpvaW4gdGhlIGxpbnV4LXBhcnBvcnQgbWFpbGluZyBsaXN0IGJ5IHNlbmRpbmcgYSBtYWlsIG1lc3NhZ2UKK3RvIAorCQlsaW51eC1wYXJwb3J0LXJlcXVlc3RAdG9ycXVlLm5ldAorCit3aXRoIHRoZSBzaW5nbGUgd29yZCAKKworCQlzdWJzY3JpYmUKKworaW4gdGhlIGJvZHkgb2YgdGhlIG1haWwgbWVzc2FnZSAobm90IGluIHRoZSBzdWJqZWN0IGxpbmUpLiAgIFBsZWFzZSBiZQorc3VyZSB0aGF0IHlvdXIgbWFpbCBwcm9ncmFtIGlzIGNvcnJlY3RseSBzZXQgdXAgd2hlbiB5b3UgZG8gdGhpcywgIGFzCit0aGUgbGlzdCBtYW5hZ2VyIGlzIGEgcm9ib3QgdGhhdCB3aWxsIHN1YnNjcmliZSB5b3UgdXNpbmcgdGhlIHJlcGx5CithZGRyZXNzIGluIHlvdXIgbWFpbCBoZWFkZXJzLiAgUkVNT1ZFIGFueSBhbnRpLXNwYW0gZ2ltbWlja3MgeW91IG1heQoraGF2ZSBpbiB5b3VyIG1haWwgaGVhZGVycywgd2hlbiBzZW5kaW5nIG1haWwgdG8gdGhlIGxpc3Qgc2VydmVyLgorCitZb3UgbWlnaHQgYWxzbyBmaW5kIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHRoZSBsaW51eC1wYXJwb3J0Cit3ZWIgcGFnZXMgKGFsdGhvdWdoIHRoZXkgYXJlIG5vdCBhbHdheXMgdXAgdG8gZGF0ZSkgYXQKKworCWh0dHA6Ly93d3cudG9ycXVlLm5ldC9wYXJwb3J0LworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGFyaXNjLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9wYXJpc2MvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkMDYwOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGFyaXNjLzAwLUlOREVYCkBAIC0wLDAgKzEsNiBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZS4KK2RlYnVnZ2luZworCS0gc29tZSBkZWJ1Z2dpbmcgaGludHMgZm9yIHJlYWwtbW9kZSBjb2RlCityZWdpc3RlcnMKKwktIGN1cnJlbnQvcGxhbm5lZCB1c2FnZSBvZiByZWdpc3RlcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGFyaXNjL2RlYnVnZ2luZyBiL0RvY3VtZW50YXRpb24vcGFyaXNjL2RlYnVnZ2luZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzI4NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wYXJpc2MvZGVidWdnaW5nCkBAIC0wLDAgKzEsMzkgQEAKK29rYXksIGhlcmUgYXJlIHNvbWUgaGludHMgZm9yIGRlYnVnZ2luZyB0aGUgbG93ZXItbGV2ZWwgcGFydHMgb2YKK2xpbnV4L3BhcmlzYy4KKworCisxLiBBYnNvbHV0ZSBhZGRyZXNzZXMKKworQSBsb3Qgb2YgdGhlIGFzc2VtYmx5IGNvZGUgY3VycmVudGx5IHJ1bnMgaW4gcmVhbCBtb2RlLCB3aGljaCBtZWFucworYWJzb2x1dGUgYWRkcmVzc2VzIGFyZSB1c2VkIGluc3RlYWQgb2YgdmlydHVhbCBhZGRyZXNzZXMgYXMgaW4gdGhlCityZXN0IG9mIHRoZSBrZXJuZWwuICBUbyB0cmFuc2xhdGUgYW4gYWJzb2x1dGUgYWRkcmVzcyB0byBhIHZpcnR1YWwKK2FkZHJlc3MgeW91IGNhbiBsb29rdXAgaW4gU3lzdGVtLm1hcCwgYWRkIF9fUEFHRV9PRkZTRVQgKDB4MTAwMDAwMDAKK2N1cnJlbnRseSkuCisKKworMi4gSFBNQ3MKKworV2hlbiByZWFsLW1vZGUgY29kZSB0cmllcyB0byBhY2Nlc3Mgbm9uLWV4aXN0ZW50IG1lbW9yeSwgeW91J2xsIGdldAorYW4gSFBNQyBpbnN0ZWFkIG9mIGEga2VybmVsIG9vcHMuICBUbyBkZWJ1ZyBhbiBIUE1DLCB0cnkgdG8gZmluZAordGhlIFN5c3RlbSBSZXNwb25kZXIvUmVxdWVzdG9yIGFkZHJlc3Nlcy4gIFRoZSBTeXN0ZW0gUmVxdWVzdG9yCithZGRyZXNzIHNob3VsZCBtYXRjaCAob25lIG9mIHRoZSkgcHJvY2Vzc29yIEhQQXMgKGhpZ2ggYWRkcmVzc2VzIGluCit0aGUgSS9PIHJhbmdlKTsgdGhlIFN5c3RlbSBSZXNwb25kZXIgYWRkcmVzcyBpcyB0aGUgYWRkcmVzcyByZWFsLW1vZGUKK2NvZGUgdHJpZWQgdG8gYWNjZXNzLgorCitUeXBpY2FsIHZhbHVlcyBmb3IgdGhlIFN5c3RlbSBSZXNwb25kZXIgYWRkcmVzcyBhcmUgYWRkcmVzc2VzIGxhcmdlcgordGhhbiBfX1BBR0VfT0ZGU0VUICgweDEwMDAwMDAwKSB3aGljaCBtZWFuIGEgdmlydHVhbCBhZGRyZXNzIGRpZG4ndAorZ2V0IHRyYW5zbGF0ZWQgdG8gYSBwaHlzaWNhbCBhZGRyZXNzIGJlZm9yZSByZWFsLW1vZGUgY29kZSB0cmllZCB0bworYWNjZXNzIGl0LgorCisKKzMuIFEgYml0IGZ1bgorCitDZXJ0YWluLCB2ZXJ5IGNyaXRpY2FsIGNvZGUgaGFzIHRvIGNsZWFyIHRoZSBRIGJpdCBpbiB0aGUgUFNXLiAgV2hhdAoraGFwcGVucyB3aGVuIHRoZSBRIGJpdCBpcyBjbGVhcmVkIGlzIHRoZSBDUFUgZG9lcyBub3QgdXBkYXRlIHRoZQorcmVnaXN0ZXJzIGludGVycnVwdGlvbiBoYW5kbGVycyByZWFkIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBtYWNoaW5lCit3YXMgaW50ZXJydXB0ZWQgLSBzbyBpZiB5b3UgZ2V0IGFuIGludGVycnVwdGlvbiBiZXR3ZWVuIHRoZSBpbnN0cnVjdGlvbgordGhhdCBjbGVhcnMgdGhlIFEgYml0IGFuZCB0aGUgUkZJIHRoYXQgc2V0cyBpdCBhZ2FpbiB5b3UgZG9uJ3Qga25vdword2hlcmUgZXhhY3RseSBpdCBoYXBwZW5lZC4gIElmIHlvdSdyZSBsdWNreSB0aGUgSUFPUSB3aWxsIHBvaW50IHRvIHRoZQoraW5zdHJ1Y2lvbiB0aGF0IGNsZWFyZWQgdGhlIFEgYml0LCBpZiB5b3UncmUgbm90IGl0IHBvaW50cyBhbnl3aGVyZQorYXQgYWxsLiAgVXN1YWxseSBRIGJpdCBwcm9ibGVtcyB3aWxsIHNob3cgdGhlbXNlbHZlcyBpbiB1bmV4cGxhaW5hYmxlCitzeXN0ZW0gaGFuZ3Mgb3IgcnVubmluZyBvZmYgdGhlIGVuZCBvZiBwaHlzaWNhbCBtZW1vcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BhcmlzYy9yZWdpc3RlcnMgYi9Eb2N1bWVudGF0aW9uL3BhcmlzYy9yZWdpc3RlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzY2FkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGFyaXNjL3JlZ2lzdGVycwpAQCAtMCwwICsxLDEyMSBAQAorUmVnaXN0ZXIgVXNhZ2UgZm9yIExpbnV4L1BBLVJJU0MKKworWyBhbiBhc3RlcmlzayBpcyB1c2VkIGZvciBwbGFubmVkIHVzYWdlIHdoaWNoIGlzIGN1cnJlbnRseSB1bmltcGxlbWVudGVkIF0KKworCUdlbmVyYWwgUmVnaXN0ZXJzIGFzIHNwZWNpZmllZCBieSBBQkkKKworCUNvbnRyb2wgUmVnaXN0ZXJzCisKK0NSIDAgKFJlY292ZXJ5IENvdW50ZXIpCQl1c2VkIGZvciBwdHJhY2UKK0NSIDEtQ1IgNyh1bmRlZmluZWQpCQl1bnVzZWQKK0NSIDggKFByb3RlY3Rpb24gSUQpCQlwZXItcHJvY2VzcyB2YWx1ZSoKK0NSIDksIDEyLCAxMyAoUElEUykJCXVudXNlZAorQ1IxMCAoQ0NSKQkJCWxhenkgRlBVIHNhdmluZyoKK0NSMTEJCQkJYXMgc3BlY2lmaWVkIGJ5IEFCSSAoU0FSKQorQ1IxNCAoaW50ZXJydXB0aW9uIHZlY3RvcikJaW5pdGlhbGl6ZWQgdG8gZmF1bHRfdmVjdG9yCitDUjE1IChFSUVNKQkJCWluaXRpYWxpemVkIHRvIGFsbCBvbmVzKgorQ1IxNiAoSW50ZXJ2YWwgVGltZXIpCQlyZWFkIGZvciBjeWNsZSBjb3VudC93cml0ZSBzdGFydHMgSW50ZXJ2YWwgVG1yCitDUjE3LUNSMjIJCQlpbnRlcnJ1cHRpb24gcGFyYW1ldGVycworQ1IxOQkJCQlJbnRlcnJ1cHQgSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIKK0NSMjAJCQkJSW50ZXJydXB0IFNwYWNlIFJlZ2lzdGVyCitDUjIxCQkJCUludGVycnVwdCBPZmZzZXQgUmVnaXN0ZXIKK0NSMjIJCQkJSW50ZXJydXB0IFBTVworQ1IyMyAoRUlSUikJCQlyZWFkIGZvciBwZW5kaW5nIGludGVycnVwdHMvd3JpdGUgY2xlYXJzIGJpdHMKK0NSMjQgKFRSIDApCQkJS2VybmVsIFNwYWNlIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIKK0NSMjUgKFRSIDEpCQkJVXNlciAgIFNwYWNlIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIKK0NSMjYgKFRSIDIpCQkJbm90IHVzZWQKK0NSMjcgKFRSIDMpCQkJVGhyZWFkIGRlc2NyaXB0b3IgcG9pbnRlcgorQ1IyOCAoVFIgNCkJCQlub3QgdXNlZAorQ1IyOSAoVFIgNSkJCQlub3QgdXNlZAorQ1IzMCAoVFIgNikJCQljdXJyZW50IC8gMAorQ1IzMSAoVFIgNykJCQlUZW1wb3JhcnkgcmVnaXN0ZXIsIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMKKworCVNwYWNlIFJlZ2lzdGVycyAoa2VybmVsIG1vZGUpCisKK1NSMAkJCQl0ZW1wb3Jhcnkgc3BhY2UgcmVnaXN0ZXIKK1NSNC1TUjcgCQkJc2V0IHRvIDAKK1NSMQkJCQl0ZW1wb3Jhcnkgc3BhY2UgcmVnaXN0ZXIKK1NSMgkJCQlrZXJuZWwgc2hvdWxkIG5vdCBjbG9iYmVyIHRoaXMKK1NSMwkJCQl1c2VkIGZvciB1c2Vyc3BhY2UgYWNjZXNzZXMgKGN1cnJlbnQgcHJvY2VzcykKKworCVNwYWNlIFJlZ2lzdGVycyAodXNlciBtb2RlKQorCitTUjAJCQkJdGVtcG9yYXJ5IHNwYWNlIHJlZ2lzdGVyCitTUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBzcGFjZSByZWdpc3RlcgorU1IyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2xkcyBzcGFjZSBvZiBsaW51eCBnYXRld2F5IHBhZ2UKK1NSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZHMgdXNlciBhZGRyZXNzIHNwYWNlIHZhbHVlIHdoaWxlIGluIGtlcm5lbAorU1I0LVNSNyAgICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHNob3J0IGFkZHJlc3Mgc3BhY2UgZm9yIHVzZXIva2VybmVsCisKKworCVByb2Nlc3NvciBTdGF0dXMgV29yZAorCitXICg2NC1iaXQgYWRkcmVzc2VzKQkJMAorRSAoTGl0dGxlLWVuZGlhbikJCTAKK1MgKFNlY3VyZSBJbnRlcnZhbCBUaW1lcikJMAorVCAoVGFrZW4gQnJhbmNoIFRyYXApCQkwCitIIChIaWdoZXItcHJpdmlsZWdlIHRyYXApCTAKK0wgKExvd2VyLXByaXZpbGVnZSB0cmFwKQkwCitOIChOdWxsaWZ5IG5leHQgaW5zdHJ1Y3Rpb24pCXVzZWQgYnkgQyBjb2RlCitYIChEYXRhIG1lbW9yeSBicmVhayBkaXNhYmxlKQkwCitCIChUYWtlbiBCcmFuY2gpCQl1c2VkIGJ5IEMgY29kZQorQyAoY29kZSBhZGRyZXNzIHRyYW5zbGF0aW9uKQkxLCAwIHdoaWxlIGV4ZWN1dGluZyByZWFsLW1vZGUgY29kZQorViAoZGl2aWRlIHN0ZXAgY29ycmVjdGlvbikJdXNlZCBieSBDIGNvZGUKK00gKEhQTUMgbWFzaykJCQkwLCAxIHdoaWxlIGV4ZWN1dGluZyBIUE1DIGhhbmRsZXIqCitDL0IgKGNhcnJ5L2JvcnJvdyBiaXRzKQkJdXNlZCBieSBDIGNvZGUKK08gKG9yZGVyZWQgcmVmZXJlbmNlcykJCTEqCitGIChwZXJmb3JtYW5jZSBtb25pdG9yKQkJMAorUiAoUmVjb3ZlcnkgQ291bnRlciB0cmFwKQkwCitRIChjb2xsZWN0IGludGVycnVwdGlvbiBzdGF0ZSkJMSAoMCBpbiBjb2RlIGRpcmVjdGx5IHByZWNlZGluZyBhbiByZmkpCitQIChQcm90ZWN0aW9uIElkZW50aWZpZXJzKQkxKgorRCAoRGF0YSBhZGRyZXNzIHRyYW5zbGF0aW9uKQkxLCAwIHdoaWxlIGV4ZWN1dGluZyByZWFsLW1vZGUgY29kZQorSSAoZXh0ZXJuYWwgaW50ZXJydXB0IG1hc2spCXVzZWQgYnkgY2xpKCkvc3RpKCkgbWFjcm9zCisKKwkiSW52aXNpYmxlIiBSZWdpc3RlcnMKKworUFNXIGRlZmF1bHQgVyB2YWx1ZQkJMAorUFNXIGRlZmF1bHQgRSB2YWx1ZQkJMAorU2hhZG93IFJlZ2lzdGVycwkJdXNlZCBieSBpbnRlcnJ1cHRpb24gaGFuZGxlciBjb2RlCitUT0MgZW5hYmxlIGJpdAkJCTEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVnaXN0ZXIgdXNhZ2Ugbm90ZXMsIG9yaWdpbmFsbHkgZnJvbSBKb2huIE1hcnZpbiwgd2l0aCBzb21lIGFkZGl0aW9uYWwKK25vdGVzIGZyb20gUmFuZG9scGggQ2h1bmcuCisKK0ZvciB0aGUgZ2VuZXJhbCByZWdpc3RlcnM6CisKK3IxLHIyLHIxOS1yMjYscjI4LHIyOSAmIHIzMSBjYW4gYmUgdXNlZCB3aXRob3V0IHNhdmluZyB0aGVtIGZpcnN0LiBBbmQgb2YKK2NvdXJzZSwgeW91IG5lZWQgdG8gc2F2ZSB0aGVtIGlmIHlvdSBjYXJlIGFib3V0IHRoZW0sIGJlZm9yZSBjYWxsaW5nCithbm90aGVyIHByb2NlZHVyZS4gU29tZSBvZiB0aGUgYWJvdmUgcmVnaXN0ZXJzIGRvIGhhdmUgc3BlY2lhbCBtZWFuaW5ncwordGhhdCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mOgorCisgICAgcjE6IFRoZSBhZGRpbCBpbnN0cnVjdGlvbiBpcyBoYXJkd2lyZWQgdG8gcGxhY2UgaXRzIHJlc3VsdCBpbiByMSwKKwlzbyBpZiB5b3UgdXNlIHRoYXQgaW5zdHJ1Y3Rpb24gYmUgYXdhcmUgb2YgdGhhdC4KKworICAgIHIyOiBUaGlzIGlzIHRoZSByZXR1cm4gcG9pbnRlci4gSW4gZ2VuZXJhbCB5b3UgZG9uJ3Qgd2FudCB0bworCXVzZSB0aGlzLCBzaW5jZSB5b3UgbmVlZCB0aGUgcG9pbnRlciB0byBnZXQgYmFjayB0byB5b3VyCisJY2FsbGVyLiBIb3dldmVyLCBpdCBpcyBncm91cGVkIHdpdGggdGhpcyBzZXQgb2YgcmVnaXN0ZXJzCisJc2luY2UgdGhlIGNhbGxlciBjYW4ndCByZWx5IG9uIHRoZSB2YWx1ZSBiZWluZyB0aGUgc2FtZQorCXdoZW4geW91IHJldHVybiwgaS5lLiB5b3UgY2FuIGNvcHkgcjIgdG8gYW5vdGhlciByZWdpc3RlcgorCWFuZCByZXR1cm4gdGhyb3VnaCB0aGF0IHJlZ2lzdGVyIGFmdGVyIHRyYXNoaW5nIHIyLCBhbmQKKwl0aGF0IHNob3VsZCBub3QgY2F1c2UgYSBwcm9ibGVtIGZvciB0aGUgY2FsbGluZyByb3V0aW5lLgorCisgICAgcjE5LXIyMjogdGhlc2UgYXJlIGdlbmVyYWxseSByZWdhcmRlZCBhcyB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgorCU5vdGUgdGhhdCBpbiA2NCBiaXQgdGhleSBhcmUgYXJnNy1hcmc0LgorCisgICAgcjIzLXIyNjogdGhlc2UgYXJlIGFyZzMtYXJnMCwgaS5lLiB5b3UgY2FuIHVzZSB0aGVtIGlmIHlvdQorCWRvbid0IGNhcmUgYWJvdXQgdGhlIHZhbHVlcyB0aGF0IHdlcmUgcGFzc2VkIGluIGFueW1vcmUuCisKKyAgICByMjgscjI5OiBhcmUgcmV0MCBhbmQgcmV0MS4gVGhleSBhcmUgd2hhdCB5b3UgcGFzcyByZXR1cm4gdmFsdWVzCisJaW4uIHIyOCBpcyB0aGUgcHJpbWFyeSByZXR1cm4uIFdoZW4gcmV0dXJuaW5nIHNtYWxsIHN0cnVjdHVyZXMKKwlyMjkgbWF5IGFsc28gYmUgdXNlZCB0byBwYXNzIGRhdGEgYmFjayB0byB0aGUgY2FsbGVyLgorCisgICAgcjMwOiBzdGFjayBwb2ludGVyCisKKyAgICByMzE6IHRoZSBibGUgaW5zdHJ1Y3Rpb24gcHV0cyB0aGUgcmV0dXJuIHBvaW50ZXIgaW4gaGVyZS4KKworCityMy1yMTgscjI3LHIzMCBuZWVkIHRvIGJlIHNhdmVkIGFuZCByZXN0b3JlZC4gcjMtcjE4IGFyZSBqdXN0CisgICAgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gcjI3IGlzIHRoZSBkYXRhIHBvaW50ZXIsIGFuZCBpcworICAgIHVzZWQgdG8gbWFrZSByZWZlcmVuY2VzIHRvIGdsb2JhbCB2YXJpYWJsZXMgZWFzaWVyLiByMzAgaXMKKyAgICB0aGUgc3RhY2sgcG9pbnRlci4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wYXJwb3J0LWxvd2xldmVsLnR4dCBiL0RvY3VtZW50YXRpb24vcGFycG9ydC1sb3dsZXZlbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0MDAwOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGFycG9ydC1sb3dsZXZlbC50eHQKQEAgLTAsMCArMSwxNDkwIEBACitQQVJQT1JUIGludGVyZmFjZSBkb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RpbWUtc3RhbXA6IDwyMDAwLTAyLTI0IDEzOjMwOjIwIHR3YXVnaD4KKworRGVzY3JpYmVkIGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCitHbG9iYWwgZnVuY3Rpb25zOgorICBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcgorICBwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyCisgIHBhcnBvcnRfZW51bWVyYXRlCisgIHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlCisgIHBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UKKyAgcGFycG9ydF9jbGFpbQorICBwYXJwb3J0X2NsYWltX29yX2Jsb2NrCisgIHBhcnBvcnRfcmVsZWFzZQorICBwYXJwb3J0X3lpZWxkCisgIHBhcnBvcnRfeWllbGRfYmxvY2tpbmcKKyAgcGFycG9ydF93YWl0X3BlcmlwaGVyYWwKKyAgcGFycG9ydF9wb2xsX3BlcmlwaGVyYWwKKyAgcGFycG9ydF93YWl0X2V2ZW50CisgIHBhcnBvcnRfbmVnb3RpYXRlCisgIHBhcnBvcnRfcmVhZAorICBwYXJwb3J0X3dyaXRlCisgIHBhcnBvcnRfb3BlbgorICBwYXJwb3J0X2Nsb3NlCisgIHBhcnBvcnRfZGV2aWNlX2lkCisgIHBhcnBvcnRfZGV2aWNlX251bQorICBwYXJwb3J0X2RldmljZV9jb29yZHMKKyAgcGFycG9ydF9maW5kX2NsYXNzCisgIHBhcnBvcnRfZmluZF9kZXZpY2UKKyAgcGFycG9ydF9zZXRfdGltZW91dAorCitQb3J0IGZ1bmN0aW9ucyAoY2FuIGJlIG92ZXJyaWRkZW4gYnkgbG93LWxldmVsIGRyaXZlcnMpOgorICBTUFA6CisgICAgcG9ydC0+b3BzLT5yZWFkX2RhdGEKKyAgICBwb3J0LT5vcHMtPndyaXRlX2RhdGEKKyAgICBwb3J0LT5vcHMtPnJlYWRfc3RhdHVzCisgICAgcG9ydC0+b3BzLT5yZWFkX2NvbnRyb2wKKyAgICBwb3J0LT5vcHMtPndyaXRlX2NvbnRyb2wKKyAgICBwb3J0LT5vcHMtPmZyb2JfY29udHJvbAorICAgIHBvcnQtPm9wcy0+ZW5hYmxlX2lycQorICAgIHBvcnQtPm9wcy0+ZGlzYWJsZV9pcnEKKyAgICBwb3J0LT5vcHMtPmRhdGFfZm9yd2FyZAorICAgIHBvcnQtPm9wcy0+ZGF0YV9yZXZlcnNlCisKKyAgRVBQOgorICAgIHBvcnQtPm9wcy0+ZXBwX3dyaXRlX2RhdGEKKyAgICBwb3J0LT5vcHMtPmVwcF9yZWFkX2RhdGEKKyAgICBwb3J0LT5vcHMtPmVwcF93cml0ZV9hZGRyCisgICAgcG9ydC0+b3BzLT5lcHBfcmVhZF9hZGRyCisKKyAgRUNQOgorICAgIHBvcnQtPm9wcy0+ZWNwX3dyaXRlX2RhdGEKKyAgICBwb3J0LT5vcHMtPmVjcF9yZWFkX2RhdGEKKyAgICBwb3J0LT5vcHMtPmVjcF93cml0ZV9hZGRyCisKKyAgT3RoZXI6CisgICAgcG9ydC0+b3BzLT5uaWJibGVfcmVhZF9kYXRhCisgICAgcG9ydC0+b3BzLT5ieXRlX3JlYWRfZGF0YQorICAgIHBvcnQtPm9wcy0+Y29tcGF0X3dyaXRlX2RhdGEKKworVGhlIHBhcnBvcnQgc3Vic3lzdGVtIGNvbXByaXNlcyAncGFycG9ydCcgKHRoZSBjb3JlIHBvcnQtc2hhcmluZworY29kZSksIGFuZCBhIHZhcmlldHkgb2YgbG93LWxldmVsIGRyaXZlcnMgdGhhdCBhY3R1YWxseSBkbyB0aGUgcG9ydAorYWNjZXNzZXMuICBFYWNoIGxvdy1sZXZlbCBkcml2ZXIgaGFuZGxlcyBhIHBhcnRpY3VsYXIgc3R5bGUgb2YgcG9ydAorKFBDLCBBbWlnYSwgYW5kIHNvIG9uKS4KKworVGhlIHBhcnBvcnQgaW50ZXJmYWNlIHRvIHRoZSBkZXZpY2UgZHJpdmVyIGF1dGhvciBjYW4gYmUgYnJva2VuIGRvd24KK2ludG8gZ2xvYmFsIGZ1bmN0aW9ucyBhbmQgcG9ydCBmdW5jdGlvbnMuCisKK1RoZSBnbG9iYWwgZnVuY3Rpb25zIGFyZSBtb3N0bHkgZm9yIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUgZGV2aWNlCitkcml2ZXIgYW5kIHRoZSBwYXJwb3J0IHN1YnN5c3RlbTogYWNxdWlyaW5nIGEgbGlzdCBvZiBhdmFpbGFibGUgcG9ydHMsCitjbGFpbWluZyBhIHBvcnQgZm9yIGV4Y2x1c2l2ZSB1c2UsIGFuZCBzbyBvbi4gIFRoZXkgYWxzbyBpbmNsdWRlCisnZ2VuZXJpYycgZnVuY3Rpb25zIGZvciBkb2luZyBzdGFuZGFyZCB0aGluZ3MgdGhhdCB3aWxsIHdvcmsgb24gYW55CitJRUVFIDEyODQtY2FwYWJsZSBhcmNoaXRlY3R1cmUuCisKK1RoZSBwb3J0IGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgdGhlIGxvdy1sZXZlbCBkcml2ZXJzLCBhbHRob3VnaCB0aGUKK2NvcmUgcGFycG9ydCBtb2R1bGUgcHJvdmlkZXMgZ2VuZXJpYyAnZGVmYXVsdHMnIGZvciBzb21lIHJvdXRpbmVzLgorVGhlIHBvcnQgZnVuY3Rpb25zIGNhbiBiZSBzcGxpdCBpbnRvIHRocmVlIGdyb3VwczogU1BQLCBFUFAsIGFuZCBFQ1AuCisKK1NQUCAoU3RhbmRhcmQgUGFyYWxsZWwgUG9ydCkgZnVuY3Rpb25zIG1vZGlmeSBzby1jYWxsZWQgJ1NQUCcKK3JlZ2lzdGVyczogZGF0YSwgc3RhdHVzLCBhbmQgY29udHJvbC4gIFRoZSBoYXJkd2FyZSBtYXkgbm90IGFjdHVhbGx5CitoYXZlIHJlZ2lzdGVycyBleGFjdGx5IGxpa2UgdGhhdCwgYnV0IHRoZSBQQyBkb2VzIGFuZCB0aGlzIGludGVyZmFjZSBpcworbW9kZWxsZWQgYWZ0ZXIgY29tbW9uIFBDIGltcGxlbWVudGF0aW9ucy4gIE90aGVyIGxvdy1sZXZlbCBkcml2ZXJzIG1heQorYmUgYWJsZSB0byBlbXVsYXRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuCisKK0VQUCAoRW5oYW5jZWQgUGFyYWxsZWwgUG9ydCkgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IgcmVhZGluZyBhbmQKK3dyaXRpbmcgaW4gSUVFRSAxMjg0IEVQUCBtb2RlLCBhbmQgRUNQIChFeHRlbmRlZCBDYXBhYmlsaXRpZXMgUG9ydCkKK2Z1bmN0aW9ucyBhcmUgdXNlZCBmb3IgSUVFRSAxMjg0IEVDUCBtb2RlLiAoV2hhdCBhYm91dCBCRUNQPyBEb2VzCithbnlvbmUgY2FyZT8pCisKK0hhcmR3YXJlIGFzc2lzdGFuY2UgZm9yIEVQUCBhbmQvb3IgRUNQIHRyYW5zZmVycyBtYXkgb3IgbWF5IG5vdCBiZQorYXZhaWxhYmxlLCBhbmQgaWYgaXQgaXMgYXZhaWxhYmxlIGl0IG1heSBvciBtYXkgbm90IGJlIHVzZWQuICBJZgoraGFyZHdhcmUgaXMgbm90IHVzZWQsIHRoZSB0cmFuc2ZlciB3aWxsIGJlIHNvZnR3YXJlLWRyaXZlbi4gIEluIG9yZGVyCit0byBjb3BlIHdpdGggcGVyaXBoZXJhbHMgdGhhdCBvbmx5IHRlbnVvdXNseSBzdXBwb3J0IElFRUUgMTI4NCwgYQorbG93LWxldmVsIGRyaXZlciBzcGVjaWZpYyBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZm9yIGFsdGVyaW5nICdmdWRnZQorZmFjdG9ycycuCisMCitHTE9CQUwgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tCisKK3BhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBkZXZpY2UgZHJpdmVyIHdpdGggcGFycG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCphdHRhY2gpIChzdHJ1Y3QgcGFycG9ydCAqKTsKKwl2b2lkICgqZGV0YWNoKSAoc3RydWN0IHBhcnBvcnQgKik7CisJc3RydWN0IHBhcnBvcnRfZHJpdmVyICpuZXh0OworfTsKK2ludCBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHBhcnBvcnRfZHJpdmVyICpkcml2ZXIpOworCitERVNDUklQVElPTgorCitJbiBvcmRlciB0byBiZSBub3RpZmllZCBhYm91dCBwYXJhbGxlbCBwb3J0cyB3aGVuIHRoZXkgYXJlIGRldGVjdGVkLAorcGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIgc2hvdWxkIGJlIGNhbGxlZC4gIFlvdXIgZHJpdmVyIHdpbGwKK2ltbWVkaWF0ZWx5IGJlIG5vdGlmaWVkIG9mIGFsbCBwb3J0cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRldGVjdGVkLAorYW5kIG9mIGVhY2ggbmV3IHBvcnQgYXMgbG93LWxldmVsIGRyaXZlcnMgYXJlIGxvYWRlZC4KKworQSAnc3RydWN0IHBhcnBvcnRfZHJpdmVyJyBjb250YWlucyB0aGUgdGV4dHVhbCBuYW1lIG9mIHlvdXIgZHJpdmVyLAorYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdG8gaGFuZGxlIG5ldyBwb3J0cywgYW5kIGEgcG9pbnRlciB0byBhCitmdW5jdGlvbiB0byBoYW5kbGUgcG9ydHMgZ29pbmcgYXdheSBkdWUgdG8gYSBsb3ctbGV2ZWwgZHJpdmVyCit1bmxvYWRpbmcuICBQb3J0cyB3aWxsIG9ubHkgYmUgZGV0YWNoZWQgaWYgdGhleSBhcmUgbm90IGJlaW5nIHVzZWQKKyhpLmUuIHRoZXJlIGFyZSBubyBkZXZpY2VzIHJlZ2lzdGVyZWQgb24gdGhlbSkuCisKK1RoZSB2aXNpYmxlIHBhcnRzIG9mIHRoZSAnc3RydWN0IHBhcnBvcnQgKicgYXJndW1lbnQgZ2l2ZW4gdG8KK2F0dGFjaC9kZXRhY2ggYXJlOgorCitzdHJ1Y3QgcGFycG9ydAoreworCXN0cnVjdCBwYXJwb3J0ICpuZXh0OyAvKiBuZXh0IHBhcnBvcnQgaW4gbGlzdCAqLworCWNvbnN0IGNoYXIgKm5hbWU7ICAgICAvKiBwb3J0J3MgbmFtZSAqLworCXVuc2lnbmVkIGludCBtb2RlczsgICAvKiBiaXRmaWVsZCBvZiBoYXJkd2FyZSBtb2RlcyAqLworCXN0cnVjdCBwYXJwb3J0X2RldmljZV9pbmZvIHByb2JlX2luZm87CisJCQkgICAgICAvKiBJRUVFMTI4NCBpbmZvICovCisJaW50IG51bWJlcjsgICAgICAgICAgIC8qIHBhcnBvcnQgaW5kZXggKi8KKwlzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zICpvcHM7CisJLi4uCit9OworCitUaGVyZSBhcmUgb3RoZXIgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLCBidXQgdGhleSBzaG91bGQgbm90IGJlCit0b3VjaGVkLgorCitUaGUgJ21vZGVzJyBtZW1iZXIgc3VtbWFyaXNlcyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCitoYXJkd2FyZS4gIEl0IGNvbnNpc3RzIG9mIGZsYWdzIHdoaWNoIG1heSBiZSBiaXR3aXNlLW9yZWQgdG9nZXRoZXI6CisKKyAgUEFSUE9SVF9NT0RFX1BDU1BQCQlJQk0gUEMgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUsCisJCQkJaS5lLiBmdW5jdGlvbnMgdGhhdCBhY3Qgb24gZGF0YSwKKwkJCQljb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIGFyZQorCQkJCXByb2JhYmx5IHdyaXRpbmcgZGlyZWN0bHkgdG8gdGhlCisJCQkJaGFyZHdhcmUuCisgIFBBUlBPUlRfTU9ERV9UUklTVEFURQkJVGhlIGRhdGEgZHJpdmVycyBtYXkgYmUgdHVybmVkIG9mZi4KKwkJCQlUaGlzIGFsbG93cyB0aGUgZGF0YSBsaW5lcyB0byBiZSB1c2VkCisJCQkJZm9yIHJldmVyc2UgKHBlcmlwaGVyYWwgdG8gaG9zdCkKKwkJCQl0cmFuc2ZlcnMuCisgIFBBUlBPUlRfTU9ERV9DT01QQVQJCVRoZSBoYXJkd2FyZSBjYW4gYXNzaXN0IHdpdGgKKwkJCQljb21wYXRpYmlsaXR5LW1vZGUgKHByaW50ZXIpCisJCQkJdHJhbnNmZXJzLCBpLmUuIGNvbXBhdF93cml0ZV9ibG9jay4KKyAgUEFSUE9SVF9NT0RFX0VQUAkJVGhlIGhhcmR3YXJlIGNhbiBhc3Npc3Qgd2l0aCBFUFAKKwkJCQl0cmFuc2ZlcnMuCisgIFBBUlBPUlRfTU9ERV9FQ1AJCVRoZSBoYXJkd2FyZSBjYW4gYXNzaXN0IHdpdGggRUNQCisJCQkJdHJhbnNmZXJzLgorICBQQVJQT1JUX01PREVfRE1BCQlUaGUgaGFyZHdhcmUgY2FuIHVzZSBETUEsIHNvIHlvdSBtaWdodAorCQkJCXdhbnQgdG8gcGFzcyBJU0EgRE1BLWFibGUgbWVtb3J5CisJCQkJKGkuZS4gbWVtb3J5IGFsbG9jYXRlZCB1c2luZyB0aGUKKwkJCQlHRlBfRE1BIGZsYWcgd2l0aCBrbWFsbG9jKSB0byB0aGUKKwkJCQlsb3ctbGV2ZWwgZHJpdmVyIGluIG9yZGVyIHRvIHRha2UKKwkJCQlhZHZhbnRhZ2Ugb2YgaXQuCisKK1RoZXJlIG1heSBiZSBvdGhlciBmbGFncyBpbiAnbW9kZXMnIGFzIHdlbGwuCisKK1RoZSBjb250ZW50cyBvZiAnbW9kZXMnIGlzIGFkdmlzb3J5IG9ubHkuICBGb3IgZXhhbXBsZSwgaWYgdGhlCitoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIERNQSwgYW5kIFBBUlBPUlRfTU9ERV9ETUEgaXMgaW4gJ21vZGVzJywgaXQKK2RvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IERNQSB3aWxsIGFsd2F5cyBiZSB1c2VkIHdoZW4gcG9zc2libGUuCitTaW1pbGFybHksIGhhcmR3YXJlIHRoYXQgaXMgY2FwYWJsZSBvZiBhc3Npc3RpbmcgRUNQIHRyYW5zZmVycyB3b24ndAorbmVjZXNzYXJpbHkgYmUgdXNlZC4KKworUkVUVVJOIFZBTFVFCisKK1plcm8gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUuCisKK0VSUk9SUworCitOb25lLiAoQ2FuIGl0IGZhaWw/IFdoeSByZXR1cm4gaW50PykKKworRVhBTVBMRQorCitzdGF0aWMgdm9pZCBscF9hdHRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQoreworCS4uLgorCXByaXZhdGUgPSBrbWFsbG9jICguLi4pOworCWRldltjb3VudCsrXSA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlICguLi4pOworCS4uLgorfQorCitzdGF0aWMgdm9pZCBscF9kZXRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQoreworCS4uLgorfQorCitzdGF0aWMgc3RydWN0IHBhcnBvcnRfZHJpdmVyIGxwX2RyaXZlciA9IHsKKwkibHAiLAorCWxwX2F0dGFjaCwKKwlscF9kZXRhY2gsCisJTlVMTCAvKiBhbHdheXMgcHV0IE5VTEwgaGVyZSAqLworfTsKKworaW50IGxwX2luaXQgKHZvaWQpCit7CisJLi4uCisJaWYgKHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyICgmbHBfZHJpdmVyKSkgeworCQkvKiBGYWlsZWQ7IG5vdGhpbmcgd2UgY2FuIGRvLiAqLworCQlyZXR1cm4gLUVJTzsKKwl9CisJLi4uCit9CisKK1NFRSBBTFNPCisKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIsIHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlLCBwYXJwb3J0X2VudW1lcmF0ZQorDAorcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlciAtIHRlbGwgcGFycG9ydCB0byBmb3JnZXQgYWJvdXQgdGhpcyBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCphdHRhY2gpIChzdHJ1Y3QgcGFycG9ydCAqKTsKKwl2b2lkICgqZGV0YWNoKSAoc3RydWN0IHBhcnBvcnQgKik7CisJc3RydWN0IHBhcnBvcnRfZHJpdmVyICpuZXh0OworfTsKK3ZvaWQgcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHBhcnBvcnRfZHJpdmVyICpkcml2ZXIpOworCitERVNDUklQVElPTgorCitUaGlzIHRlbGxzIHBhcnBvcnQgbm90IHRvIG5vdGlmeSB0aGUgZGV2aWNlIGRyaXZlciBvZiBuZXcgcG9ydHMgb3Igb2YKK3BvcnRzIGdvaW5nIGF3YXkuICBSZWdpc3RlcmVkIGRldmljZXMgYmVsb25naW5nIHRvIHRoYXQgZHJpdmVyIGFyZSBOT1QKK3VucmVnaXN0ZXJlZDogcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZSBtdXN0IGJlIHVzZWQgZm9yIGVhY2ggb25lLgorCitFWEFNUExFCisKK3ZvaWQgY2xlYW51cF9tb2R1bGUgKHZvaWQpCit7CisJLi4uCisJLyogU3RvcCBub3RpZmljYXRpb25zLiAqLworCXBhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIgKCZscF9kcml2ZXIpOworCisJLyogVW5yZWdpc3RlciBkZXZpY2VzLiAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fREVWUzsgaSsrKQorCQlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlIChkZXZbaV0pOworCS4uLgorfQorCitTRUUgQUxTTworCitwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlciwgcGFycG9ydF9lbnVtZXJhdGUKKwwKK3BhcnBvcnRfZW51bWVyYXRlIC0gcmV0cmlldmUgYSBsaXN0IG9mIHBhcmFsbGVsIHBvcnRzIChERVBSRUNBVEVEKQorLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnQgKnBhcnBvcnRfZW51bWVyYXRlICh2b2lkKTsKKworREVTQ1JJUFRJT04KKworUmV0cmlldmUgdGhlIGZpcnN0IG9mIGEgbGlzdCBvZiB2YWxpZCBwYXJhbGxlbCBwb3J0cyBmb3IgdGhpcyBtYWNoaW5lLgorU3VjY2Vzc2l2ZSBwYXJhbGxlbCBwb3J0cyBjYW4gYmUgZm91bmQgdXNpbmcgdGhlICdzdHJ1Y3QgcGFycG9ydAorKm5leHQnIGVsZW1lbnQgb2YgdGhlICdzdHJ1Y3QgcGFycG9ydCAqJyB0aGF0IGlzIHJldHVybmVkLiAgSWYgJ25leHQnCitpcyBOVUxMLCB0aGVyZSBhcmUgbm8gbW9yZSBwYXJhbGxlbCBwb3J0cyBpbiB0aGUgbGlzdC4gIFRoZSBudW1iZXIgb2YKK3BvcnRzIGluIHRoZSBsaXN0IHdpbGwgbm90IGV4Y2VlZCBQQVJQT1JUX01BWC4KKworUkVUVVJOIFZBTFVFCisKK0EgJ3N0cnVjdCBwYXJwb3J0IConIGRlc2NyaWJpbmcgYSB2YWxpZCBwYXJhbGxlbCBwb3J0IGZvciB0aGUgbWFjaGluZSwKK29yIE5VTEwgaWYgdGhlcmUgYXJlIG5vbmUuCisKK0VSUk9SUworCitUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gTlVMTCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbGxlbAorcG9ydHMgdG8gdXNlLgorCitFWEFNUExFCisKK2ludCBkZXRlY3RfZGV2aWNlICh2b2lkKQoreworCXN0cnVjdCBwYXJwb3J0ICpwb3J0OworCisJZm9yIChwb3J0ID0gcGFycG9ydF9lbnVtZXJhdGUgKCk7CisJICAgICBwb3J0ICE9IE5VTEw7CisJICAgICBwb3J0ID0gcG9ydC0+bmV4dCkgeworCQkvKiBUcnkgdG8gZGV0ZWN0IGEgZGV2aWNlIG9uIHRoZSBwb3J0Li4uICovCisJCS4uLgorICAgICAgICAgICAgIH0KKwl9CisKKwkuLi4KK30KKworTk9URVMKKworcGFycG9ydF9lbnVtZXJhdGUgaXMgZGVwcmVjYXRlZDsgcGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIgc2hvdWxkIGJlCit1c2VkIGluc3RlYWQuCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyLCBwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyCisMCitwYXJwb3J0X3JlZ2lzdGVyX2RldmljZSAtIHJlZ2lzdGVyIHRvIHVzZSBhIHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3R5cGVkZWYgaW50ICgqcHJlZW1wdF9mdW5jKSAodm9pZCAqaGFuZGxlKTsKK3R5cGVkZWYgdm9pZCAoKndha2V1cF9mdW5jKSAodm9pZCAqaGFuZGxlKTsKK3R5cGVkZWYgaW50ICgqaXJxX2Z1bmMpIChpbnQgaXJxLCB2b2lkICpoYW5kbGUsIHN0cnVjdCBwdF9yZWdzICopOworCitzdHJ1Y3QgcGFyZGV2aWNlICpwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0X2Z1bmMgcHJlZW1wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdha2V1cF9mdW5jIHdha2V1cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9mdW5jIGlycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhbmRsZSk7CisKK0RFU0NSSVBUSU9OCisKK1VzZSB0aGlzIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIHlvdXIgZGV2aWNlIGRyaXZlciBvbiBhIHBhcmFsbGVsIHBvcnQKKygncG9ydCcpLiAgT25jZSB5b3UgaGF2ZSBkb25lIHRoYXQsIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlCitwYXJwb3J0X2NsYWltIGFuZCBwYXJwb3J0X3JlbGVhc2UgaW4gb3JkZXIgdG8gdXNlIHRoZSBwb3J0LgorCitUaGlzIGZ1bmN0aW9uIHdpbGwgcmVnaXN0ZXIgdGhyZWUgY2FsbGJhY2tzIGludG8geW91ciBkcml2ZXI6CisncHJlZW1wdCcsICd3YWtldXAnIGFuZCAnaXJxJy4gIEVhY2ggb2YgdGhlc2UgbWF5IGJlIE5VTEwgaW4gb3JkZXIgdG8KK2luZGljYXRlIHRoYXQgeW91IGRvIG5vdCB3YW50IGEgY2FsbGJhY2suCisKK1doZW4gdGhlICdwcmVlbXB0JyBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IGlzIGJlY2F1c2UgYW5vdGhlciBkcml2ZXIKK3dpc2hlcyB0byB1c2UgdGhlIHBhcmFsbGVsIHBvcnQuICBUaGUgJ3ByZWVtcHQnIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4KK25vbi16ZXJvIGlmIHRoZSBwYXJhbGxlbCBwb3J0IGNhbm5vdCBiZSByZWxlYXNlZCB5ZXQgLS0gaWYgemVybyBpcworcmV0dXJuZWQsIHRoZSBwb3J0IGlzIGxvc3QgdG8gYW5vdGhlciBkcml2ZXIgYW5kIHRoZSBwb3J0IG11c3QgYmUKK3JlLWNsYWltZWQgYmVmb3JlIHVzZS4KKworVGhlICd3YWtldXAnIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGFub3RoZXIgZHJpdmVyIGhhcyByZWxlYXNlZCB0aGUKK3BvcnQgYW5kIG5vIG90aGVyIGRyaXZlciBoYXMgeWV0IGNsYWltZWQgaXQuICBZb3UgY2FuIGNsYWltIHRoZQorcGFyYWxsZWwgcG9ydCBmcm9tIHdpdGhpbiB0aGUgJ3dha2V1cCcgZnVuY3Rpb24gKGluIHdoaWNoIGNhc2UgdGhlCitjbGFpbSBpcyBndWFyYW50ZWVkIHRvIHN1Y2NlZWQpLCBvciBjaG9vc2Ugbm90IHRvIGlmIHlvdSBkb24ndCBuZWVkIGl0Citub3cuCisKK0lmIGFuIGludGVycnVwdCBvY2N1cnMgb24gdGhlIHBhcmFsbGVsIHBvcnQgeW91ciBkcml2ZXIgaGFzIGNsYWltZWQsCit0aGUgJ2lycScgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQuIChXcml0ZSBzb21ldGhpbmcgYWJvdXQgc2hhcmVkCitpbnRlcnJ1cHRzIGhlcmUuKQorCitUaGUgJ2hhbmRsZScgaXMgYSBwb2ludGVyIHRvIGRyaXZlci1zcGVjaWZpYyBkYXRhLCBhbmQgaXMgcGFzc2VkIHRvCit0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorCisnZmxhZ3MnIG1heSBiZSBhIGJpdHdpc2UgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBmbGFnczoKKworICAgICAgICBGbGFnICAgICAgICAgICAgTWVhbmluZworICBQQVJQT1JUX0RFVl9FWENMCVRoZSBkZXZpY2UgY2Fubm90IHNoYXJlIHRoZSBwYXJhbGxlbCBwb3J0IGF0IGFsbC4KKwkJCVVzZSB0aGlzIG9ubHkgd2hlbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4KKworVGhlIHR5cGVkZWZzIGFyZSBub3QgYWN0dWFsbHkgZGVmaW5lZCAtLSB0aGV5IGFyZSBvbmx5IHNob3duIGluIG9yZGVyCit0byBtYWtlIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgbW9yZSByZWFkYWJsZS4KKworVGhlIHZpc2libGUgcGFydHMgb2YgdGhlIHJldHVybmVkICdzdHJ1Y3QgcGFyZGV2aWNlJyBhcmU6CisKK3N0cnVjdCBwYXJkZXZpY2UgeworCXN0cnVjdCBwYXJwb3J0ICpwb3J0OwkvKiBBc3NvY2lhdGVkIHBvcnQgKi8KKwl2b2lkICpwcml2YXRlOwkJLyogRGV2aWNlIGRyaXZlcidzICdoYW5kbGUnICovCisJLi4uCit9OworCitSRVRVUk4gVkFMVUUKKworQSAnc3RydWN0IHBhcmRldmljZSAqJzogYSBoYW5kbGUgdG8gdGhlIHJlZ2lzdGVyZWQgcGFyYWxsZWwgcG9ydAorZGV2aWNlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHBhcnBvcnRfY2xhaW0sIHBhcnBvcnRfcmVsZWFzZSwgZXRjLgorCitFUlJPUlMKKworQSByZXR1cm4gdmFsdWUgb2YgTlVMTCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSB3YXMgYSBwcm9ibGVtIHJlZ2lzdGVyaW5nCithIGRldmljZSBvbiB0aGF0IHBvcnQuCisKK0VYQU1QTEUKKworc3RhdGljIGludCBwcmVlbXB0ICh2b2lkICpoYW5kbGUpCit7CisJaWYgKGJ1c3lfcmlnaHRfbm93KQorCQlyZXR1cm4gMTsKKworCW11c3RfcmVjbGFpbV9wb3J0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2FrZXVwICh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IHRvYXN0ZXIgKnByaXZhdGUgPSBoYW5kbGU7CisJc3RydWN0IHBhcmRldmljZSAqZGV2ID0gcHJpdmF0ZS0+ZGV2OworCWlmICghZGV2KSByZXR1cm47IC8qIGF2b2lkIHJhY2VzICovCisKKwlpZiAod2FudF9wb3J0KQorCQlwYXJwb3J0X2NsYWltIChkZXYpOworfQorCitzdGF0aWMgaW50IHRvYXN0ZXJfZGV0ZWN0IChzdHJ1Y3QgdG9hc3RlciAqcHJpdmF0ZSwgc3RydWN0IHBhcnBvcnQgKnBvcnQpCit7CisJcHJpdmF0ZS0+ZGV2ID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UgKHBvcnQsICJ0b2FzdGVyIiwgcHJlZW1wdCwKKwkJCQkJICAgICAgICB3YWtldXAsIE5VTEwsIDAsCisJCQkJCQlwcml2YXRlKTsKKwlpZiAoIXByaXZhdGUtPmRldikKKwkJLyogQ291bGRuJ3QgcmVnaXN0ZXIgd2l0aCBwYXJwb3J0LiAqLworCQlyZXR1cm4gLUVJTzsKKworCW11c3RfcmVjbGFpbV9wb3J0ID0gMDsKKwlidXN5X3JpZ2h0X25vdyA9IDE7CisJcGFycG9ydF9jbGFpbV9vcl9ibG9jayAocHJpdmF0ZS0+ZGV2KTsKKwkuLi4KKwkvKiBEb24ndCBuZWVkIHRoZSBwb3J0IHdoaWxlIHRoZSB0b2FzdGVyIHdhcm1zIHVwLiAqLworCWJ1c3lfcmlnaHRfbm93ID0gMDsKKwkuLi4KKwlidXN5X3JpZ2h0X25vdyA9IDE7CisJaWYgKG11c3RfcmVjbGFpbV9wb3J0KSB7CisJCXBhcnBvcnRfY2xhaW1fb3JfYmxvY2sgKHByaXZhdGUtPmRldik7CisJCW11c3RfcmVjbGFpbV9wb3J0ID0gMDsKKwl9CisJLi4uCit9CisKK1NFRSBBTFNPCisKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UsIHBhcnBvcnRfY2xhaW0KKwwKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UgLSBmaW5pc2ggdXNpbmcgYSBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTlBPUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCit2b2lkIHBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UgKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CisKK0RFU0NSSVBUSU9OCisKK1RoaXMgZnVuY3Rpb24gaXMgdGhlIG9wcG9zaXRlIG9mIHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlLiAgQWZ0ZXIgdXNpbmcKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UsICdkZXYnIGlzIG5vIGxvbmdlciBhIHZhbGlkIGRldmljZSBoYW5kbGUuCisKK1lvdSBzaG91bGQgbm90IHVucmVnaXN0ZXIgYSBkZXZpY2UgdGhhdCBpcyBjdXJyZW50bHkgY2xhaW1lZCwgYWx0aG91Z2gKK2lmIHlvdSBkbyBpdCB3aWxsIGJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkuCisKK0VYQU1QTEUKKworCS4uLgorCWtmcmVlIChkZXYtPnByaXZhdGUpOyAvKiBiZWZvcmUgd2UgbG9zZSB0aGUgcG9pbnRlciAqLworCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UgKGRldik7CisJLi4uCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIKKwwKK3BhcnBvcnRfY2xhaW0sIHBhcnBvcnRfY2xhaW1fb3JfYmxvY2sgLSBjbGFpbSB0aGUgcGFyYWxsZWwgcG9ydCBmb3IgYSBkZXZpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworaW50IHBhcnBvcnRfY2xhaW0gKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CitpbnQgcGFycG9ydF9jbGFpbV9vcl9ibG9jayAoc3RydWN0IHBhcmRldmljZSAqZGV2KTsKKworREVTQ1JJUFRJT04KKworVGhlc2UgZnVuY3Rpb25zIGF0dGVtcHQgdG8gZ2FpbiBjb250cm9sIG9mIHRoZSBwYXJhbGxlbCBwb3J0IG9uIHdoaWNoCisnZGV2JyBpcyByZWdpc3RlcmVkLiAgJ3BhcnBvcnRfY2xhaW0nIGRvZXMgbm90IGJsb2NrLCBidXQKKydwYXJwb3J0X2NsYWltX29yX2Jsb2NrJyBtYXkgZG8uIChQdXQgc29tZXRoaW5nIGhlcmUgYWJvdXQgYmxvY2tpbmcKK2ludGVycnVwdGlibHkgb3Igbm9uLWludGVycnVwdGlibHkuKQorCitZb3Ugc2hvdWxkIG5vdCB0cnkgdG8gY2xhaW0gYSBwb3J0IHRoYXQgeW91IGhhdmUgYWxyZWFkeSBjbGFpbWVkLgorCitSRVRVUk4gVkFMVUUKKworQSByZXR1cm4gdmFsdWUgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgcG9ydCB3YXMgc3VjY2Vzc2Z1bGx5CitjbGFpbWVkLCBhbmQgdGhlIGNhbGxlciBub3cgaGFzIHBvc3Nlc3Npb24gb2YgdGhlIHBhcmFsbGVsIHBvcnQuCisKK0lmICdwYXJwb3J0X2NsYWltX29yX2Jsb2NrJyBibG9ja3MgYmVmb3JlIHJldHVybmluZyBzdWNjZXNzZnVsbHksIHRoZQorcmV0dXJuIHZhbHVlIGlzIHBvc2l0aXZlLgorCitFUlJPUlMKKworICAtRUFHQUlOICBUaGUgcG9ydCBpcyB1bmF2YWlsYWJsZSBhdCB0aGUgbW9tZW50LCBidXQgYW5vdGhlciBhdHRlbXB0CisgICAgICAgICAgIHRvIGNsYWltIGl0IG1heSBzdWNjZWVkLgorCitTRUUgQUxTTworCitwYXJwb3J0X3JlbGVhc2UKKwwKK3BhcnBvcnRfcmVsZWFzZSAtIHJlbGVhc2UgdGhlIHBhcmFsbGVsIHBvcnQKKy0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCit2b2lkIHBhcnBvcnRfcmVsZWFzZSAoc3RydWN0IHBhcmRldmljZSAqZGV2KTsKKworREVTQ1JJUFRJT04KKworT25jZSBhIHBhcmFsbGVsIHBvcnQgZGV2aWNlIGhhcyBiZWVuIGNsYWltZWQsIGl0IGNhbiBiZSByZWxlYXNlZCB1c2luZworJ3BhcnBvcnRfcmVsZWFzZScuICBJdCBjYW5ub3QgZmFpbCwgYnV0IHlvdSBzaG91bGQgbm90IHJlbGVhc2UgYQorZGV2aWNlIHRoYXQgeW91IGRvIG5vdCBoYXZlIHBvc3Nlc3Npb24gb2YuCisKK0VYQU1QTEUKKworc3RhdGljIHNpemVfdCB3cml0ZSAoc3RydWN0IHBhcmRldmljZSAqZGV2LCBjb25zdCB2b2lkICpidWYsCisJCSAgICAgc2l6ZV90IGxlbikKK3sKKwkuLi4KKwl3cml0dGVuID0gZGV2LT5wb3J0LT5vcHMtPndyaXRlX2VjcF9kYXRhIChkZXYtPnBvcnQsIGJ1ZiwKKwkJCQkJCSAgbGVuKTsKKwlwYXJwb3J0X3JlbGVhc2UgKGRldik7CisJLi4uCit9CisKKworU0VFIEFMU08KKworY2hhbmdlX21vZGUsIHBhcnBvcnRfY2xhaW0sIHBhcnBvcnRfY2xhaW1fb3JfYmxvY2ssIHBhcnBvcnRfeWllbGQKKwwKK3BhcnBvcnRfeWllbGQsIHBhcnBvcnRfeWllbGRfYmxvY2tpbmcgLSB0ZW1wb3JhcmlseSByZWxlYXNlIGEgcGFyYWxsZWwgcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitpbnQgcGFycG9ydF95aWVsZCAoc3RydWN0IHBhcmRldmljZSAqZGV2KQoraW50IHBhcnBvcnRfeWllbGRfYmxvY2tpbmcgKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CisKK0RFU0NSSVBUSU9OCisKK1doZW4gYSBkcml2ZXIgaGFzIGNvbnRyb2wgb2YgYSBwYXJhbGxlbCBwb3J0LCBpdCBtYXkgYWxsb3cgYW5vdGhlcgorZHJpdmVyIHRvIHRlbXBvcmFyaWx5ICdib3Jyb3cnIGl0LiAgJ3BhcnBvcnRfeWllbGQnIGRvZXMgbm90IGJsb2NrOworJ3BhcnBvcnRfeWllbGRfYmxvY2tpbmcnIG1heSBkby4KKworUkVUVVJOIFZBTFVFCisKK0EgcmV0dXJuIHZhbHVlIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciBzdGlsbCBvd25zIHRoZSBwb3J0CithbmQgdGhlIGNhbGwgZGlkIG5vdCBibG9jay4KKworQSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgZnJvbSAncGFycG9ydF95aWVsZF9ibG9ja2luZycgaW5kaWNhdGVzIHRoYXQKK3RoZSBjYWxsZXIgc3RpbGwgb3ducyB0aGUgcG9ydCBhbmQgdGhlIGNhbGwgYmxvY2tlZC4KKworQSByZXR1cm4gdmFsdWUgb2YgLUVBR0FJTiBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIG5vIGxvbmdlciBvd25zIHRoZQorcG9ydCwgYW5kIGl0IG11c3QgYmUgcmUtY2xhaW1lZCBiZWZvcmUgdXNlLgorCitFUlJPUlMKKworICAtRUFHQUlOICBPd25lcnNoaXAgb2YgdGhlIHBhcmFsbGVsIHBvcnQgd2FzIGdpdmVuIGF3YXkuCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfcmVsZWFzZQorDAorcGFycG9ydF93YWl0X3BlcmlwaGVyYWwgLSB3YWl0IGZvciBzdGF0dXMgbGluZXMsIHVwIHRvIDM1bXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2ludCBwYXJwb3J0X3dhaXRfcGVyaXBoZXJhbCAoc3RydWN0IHBhcnBvcnQgKnBvcnQsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgbWFzaywKKwkJCSAgICAgdW5zaWduZWQgY2hhciB2YWwpOworCitERVNDUklQVElPTgorCitXYWl0IGZvciB0aGUgc3RhdHVzIGxpbmVzIGluIG1hc2sgdG8gbWF0Y2ggdGhlIHZhbHVlcyBpbiB2YWwuCisKK1JFVFVSTiBWQUxVRQorCisgLUVJTlRSICBhIHNpZ25hbCBpcyBwZW5kaW5nCisgICAgICAwICB0aGUgc3RhdHVzIGxpbmVzIGluIG1hc2sgaGF2ZSB2YWx1ZXMgaW4gdmFsCisgICAgICAxICB0aW1lZCBvdXQgd2hpbGUgd2FpdGluZyAoMzVtcyBlbGFwc2VkKQorCitTRUUgQUxTTworCitwYXJwb3J0X3BvbGxfcGVyaXBoZXJhbAorDAorcGFycG9ydF9wb2xsX3BlcmlwaGVyYWwgLSB3YWl0IGZvciBzdGF0dXMgbGluZXMsIGluIHVzZWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2ludCBwYXJwb3J0X3BvbGxfcGVyaXBoZXJhbCAoc3RydWN0IHBhcnBvcnQgKnBvcnQsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgbWFzaywKKwkJCSAgICAgdW5zaWduZWQgY2hhciB2YWwsCisJCQkgICAgIGludCB1c2VjKTsKKworREVTQ1JJUFRJT04KKworV2FpdCBmb3IgdGhlIHN0YXR1cyBsaW5lcyBpbiBtYXNrIHRvIG1hdGNoIHRoZSB2YWx1ZXMgaW4gdmFsLgorCitSRVRVUk4gVkFMVUUKKworIC1FSU5UUiAgYSBzaWduYWwgaXMgcGVuZGluZworICAgICAgMCAgdGhlIHN0YXR1cyBsaW5lcyBpbiBtYXNrIGhhdmUgdmFsdWVzIGluIHZhbAorICAgICAgMSAgdGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgKHVzZWMgbWljcm9zZWNvbmRzIGhhdmUgZWxhcHNlZCkKKworU0VFIEFMU08KKworcGFycG9ydF93YWl0X3BlcmlwaGVyYWwKKwwKK3BhcnBvcnRfd2FpdF9ldmVudCAtIHdhaXQgZm9yIGFuIGV2ZW50IG9uIGEgcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2ludCBwYXJwb3J0X3dhaXRfZXZlbnQgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCBzaWduZWQgbG9uZyB0aW1lb3V0KQorCitERVNDUklQVElPTgorCitXYWl0IGZvciBhbiBldmVudCAoZS5nLiBpbnRlcnJ1cHQpIG9uIGEgcG9ydC4gIFRoZSB0aW1lb3V0IGlzIGluCitqaWZmaWVzLgorCitSRVRVUk4gVkFMVUUKKworICAgICAgMCAgc3VjY2VzcworICAgICA8MCAgZXJyb3IgKGV4aXQgYXMgc29vbiBhcyBwb3NzaWJsZSkKKyAgICAgPjAgIHRpbWVkIG91dAorDAorcGFycG9ydF9uZWdvdGlhdGUgLSBwZXJmb3JtIElFRUUgMTI4NCBuZWdvdGlhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworaW50IHBhcnBvcnRfbmVnb3RpYXRlIChzdHJ1Y3QgcGFycG9ydCAqLCBpbnQgbW9kZSk7CisKK0RFU0NSSVBUSU9OCisKK1BlcmZvcm0gSUVFRSAxMjg0IG5lZ290aWF0aW9uLgorCitSRVRVUk4gVkFMVUUKKworICAgICAwICBoYW5kc2hha2UgT0s7IElFRUUgMTI4NCBwZXJpcGhlcmFsIGFuZCBtb2RlIGF2YWlsYWJsZQorICAgIC0xICBoYW5kc2hha2UgZmFpbGVkOyBwZXJpcGhlcmFsIG5vdCBjb21wbGlhbnQgKG9yIG5vbmUgcHJlc2VudCkKKyAgICAgMSAgaGFuZHNoYWtlIE9LOyBJRUVFIDEyODQgcGVyaXBoZXJhbCBwcmVzZW50IGJ1dCBtb2RlIG5vdAorICAgICAgICBhdmFpbGFibGUKKworU0VFIEFMU08KKworcGFycG9ydF9yZWFkLCBwYXJwb3J0X3dyaXRlCisMCitwYXJwb3J0X3JlYWQgLSByZWFkIGRhdGEgZnJvbSBkZXZpY2UKKy0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzc2l6ZV90IHBhcnBvcnRfcmVhZCAoc3RydWN0IHBhcnBvcnQgKiwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKKworREVTQ1JJUFRJT04KKworUmVhZCBkYXRhIGZyb20gZGV2aWNlIGluIGN1cnJlbnQgSUVFRSAxMjg0IHRyYW5zZmVyIG1vZGUuICBUaGlzIG9ubHkKK3dvcmtzIGZvciBtb2RlcyB0aGF0IHN1cHBvcnQgcmV2ZXJzZSBkYXRhIHRyYW5zZmVyLgorCitSRVRVUk4gVkFMVUUKKworSWYgbmVnYXRpdmUsIGFuIGVycm9yIGNvZGU7IG90aGVyd2lzZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkLgorCitTRUUgQUxTTworCitwYXJwb3J0X3dyaXRlLCBwYXJwb3J0X25lZ290aWF0ZQorDAorcGFycG9ydF93cml0ZSAtIHdyaXRlIGRhdGEgdG8gZGV2aWNlCistLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3NzaXplX3QgcGFycG9ydF93cml0ZSAoc3RydWN0IHBhcnBvcnQgKiwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKKworREVTQ1JJUFRJT04KKworV3JpdGUgZGF0YSB0byBkZXZpY2UgaW4gY3VycmVudCBJRUVFIDEyODQgdHJhbnNmZXIgbW9kZS4gIFRoaXMgb25seQord29ya3MgZm9yIG1vZGVzIHRoYXQgc3VwcG9ydCBmb3J3YXJkIGRhdGEgdHJhbnNmZXIuCisKK1JFVFVSTiBWQUxVRQorCitJZiBuZWdhdGl2ZSwgYW4gZXJyb3IgY29kZTsgb3RoZXJ3aXNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQuCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfcmVhZCwgcGFycG9ydF9uZWdvdGlhdGUKKwwKK3BhcnBvcnRfb3BlbiAtIHJlZ2lzdGVyIGRldmljZSBmb3IgcGFydGljdWxhciBkZXZpY2UgbnVtYmVyCistLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcmRldmljZSAqcGFycG9ydF9vcGVuIChpbnQgZGV2bnVtLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgICBpbnQgKCpwZikgKHZvaWQgKiksCisJCQkJdm9pZCAoKmtmKSAodm9pZCAqKSwKKwkJCQl2b2lkICgqaXJxZikgKGludCwgdm9pZCAqLAorCQkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJCQlpbnQgZmxhZ3MsIHZvaWQgKmhhbmRsZSk7CisKK0RFU0NSSVBUSU9OCisKK1RoaXMgaXMgbGlrZSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZSBidXQgdGFrZXMgYSBkZXZpY2UgbnVtYmVyIGluc3RlYWQKK29mIGEgcG9pbnRlciB0byBhIHN0cnVjdCBwYXJwb3J0LgorCitSRVRVUk4gVkFMVUUKKworU2VlIHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlLiAgSWYgbm8gZGV2aWNlIGlzIGFzc29jaWF0ZWQgd2l0aCBkZXZudW0sCitOVUxMIGlzIHJldHVybmVkLgorCitTRUUgQUxTTworCitwYXJwb3J0X3JlZ2lzdGVyX2RldmljZSwgcGFycG9ydF9kZXZpY2VfbnVtCisMCitwYXJwb3J0X2Nsb3NlIC0gdW5yZWdpc3RlciBkZXZpY2UgZm9yIHBhcnRpY3VsYXIgZGV2aWNlIG51bWJlcgorLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCit2b2lkIHBhcnBvcnRfY2xvc2UgKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CisKK0RFU0NSSVBUSU9OCisKK1RoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZSBmb3IgcGFycG9ydF9vcGVuLgorCitTRUUgQUxTTworCitwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlLCBwYXJwb3J0X29wZW4KKwwKK3BhcnBvcnRfZGV2aWNlX2lkIC0gb2J0YWluIElFRUUgMTI4NCBEZXZpY2UgSUQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3NzaXplX3QgcGFycG9ydF9kZXZpY2VfaWQgKGludCBkZXZudW0sIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisKK0RFU0NSSVBUSU9OCisKK09idGFpbnMgdGhlIElFRUUgMTI4NCBEZXZpY2UgSUQgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZGV2aWNlLgorCitSRVRVUk4gVkFMVUUKKworSWYgbmVnYXRpdmUsIGFuIGVycm9yIGNvZGU7IG90aGVyd2lzZSwgdGhlIG51bWJlciBvZiBieXRlcyBvZiBidWZmZXIKK3RoYXQgY29udGFpbiB0aGUgZGV2aWNlIElELiAgVGhlIGZvcm1hdCBvZiB0aGUgZGV2aWNlIElEIGlzIGFzCitmb2xsb3dzOgorCitbbGVuZ3RoXVtJRF0KKworVGhlIGZpcnN0IHR3byBieXRlcyBpbmRpY2F0ZSB0aGUgaW5jbHVzaXZlIGxlbmd0aCBvZiB0aGUgZW50aXJlIERldmljZQorSUQsIGFuZCBhcmUgaW4gYmlnLWVuZGlhbiBvcmRlci4gIFRoZSBJRCBpcyBhIHNlcXVlbmNlIG9mIHBhaXJzIG9mIHRoZQorZm9ybToKKwora2V5OnZhbHVlOworCitOT1RFUworCitNYW55IGRldmljZXMgaGF2ZSBpbGwtZm9ybWVkIElFRUUgMTI4NCBEZXZpY2UgSURzLgorCitTRUUgQUxTTworCitwYXJwb3J0X2ZpbmRfY2xhc3MsIHBhcnBvcnRfZmluZF9kZXZpY2UsIHBhcnBvcnRfZGV2aWNlX251bQorDAorcGFycG9ydF9kZXZpY2VfbnVtIC0gY29udmVydCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gZGV2aWNlIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2ludCBwYXJwb3J0X2RldmljZV9udW0gKGludCBwYXJwb3J0LCBpbnQgbXV4LCBpbnQgZGFpc3kpOworCitERVNDUklQVElPTgorCitDb252ZXJ0IGJldHdlZW4gZGV2aWNlIGNvb3JkaW5hdGVzIChwb3J0LCBtdWx0aXBsZXhvciwgZGFpc3kgY2hhaW4KK2FkZHJlc3MpIGFuZCBkZXZpY2UgbnVtYmVyICh6ZXJvLWJhc2VkKS4KKworUkVUVVJOIFZBTFVFCisKK0RldmljZSBudW1iZXIsIG9yIC0xIGlmIG5vIGRldmljZSBhdCBnaXZlbiBjb29yZGluYXRlcy4KKworU0VFIEFMU08KKworcGFycG9ydF9kZXZpY2VfY29vcmRzLCBwYXJwb3J0X29wZW4sIHBhcnBvcnRfZGV2aWNlX2lkCisMCitwYXJwb3J0X2RldmljZV9jb29yZHMgLSBjb252ZXJ0IGRldmljZSBudW1iZXIgdG8gZGV2aWNlIGNvb3JkaW5hdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworaW50IHBhcnBvcnRfZGV2aWNlX2Nvb3JkcyAoaW50IGRldm51bSwgaW50ICpwYXJwb3J0LCBpbnQgKm11eCwKKwkJCSAgIGludCAqZGFpc3kpOworCitERVNDUklQVElPTgorCitDb252ZXJ0IGJldHdlZW4gZGV2aWNlIG51bWJlciAoemVyby1iYXNlZCkgYW5kIGRldmljZSBjb29yZGluYXRlcworKHBvcnQsIG11bHRpcGxleG9yLCBkYWlzeSBjaGFpbiBhZGRyZXNzKS4KKworUkVUVVJOIFZBTFVFCisKK1plcm8gb24gc3VjY2VzcywgaW4gd2hpY2ggY2FzZSB0aGUgY29vcmRpbmF0ZXMgYXJlICgqcGFycG9ydCwgKm11eCwKKypkYWlzeSkuCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfZGV2aWNlX251bSwgcGFycG9ydF9vcGVuLCBwYXJwb3J0X2RldmljZV9pZAorDAorcGFycG9ydF9maW5kX2NsYXNzIC0gZmluZCBhIGRldmljZSBieSBpdHMgY2xhc3MKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCit0eXBlZGVmIGVudW0geworCVBBUlBPUlRfQ0xBU1NfTEVHQUNZID0gMCwgICAgICAgLyogTm9uLUlFRUUxMjg0IGRldmljZSAqLworCVBBUlBPUlRfQ0xBU1NfUFJJTlRFUiwKKwlQQVJQT1JUX0NMQVNTX01PREVNLAorCVBBUlBPUlRfQ0xBU1NfTkVULAorCVBBUlBPUlRfQ0xBU1NfSERDLCAgICAgICAgICAgICAgLyogSGFyZCBkaXNrIGNvbnRyb2xsZXIgKi8KKwlQQVJQT1JUX0NMQVNTX1BDTUNJQSwKKwlQQVJQT1JUX0NMQVNTX01FRElBLCAgICAgICAgICAgIC8qIE11bHRpbWVkaWEgZGV2aWNlICovCisJUEFSUE9SVF9DTEFTU19GREMsICAgICAgICAgICAgICAvKiBGbG9wcHkgZGlzayBjb250cm9sbGVyICovCisJUEFSUE9SVF9DTEFTU19QT1JUUywKKwlQQVJQT1JUX0NMQVNTX1NDQU5ORVIsCisJUEFSUE9SVF9DTEFTU19ESUdDQU0sCisJUEFSUE9SVF9DTEFTU19PVEhFUiwgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlICovCisJUEFSUE9SVF9DTEFTU19VTlNQRUMsICAgICAgICAgICAvKiBObyBDTFMgZmllbGQgaW4gSUQgKi8KKwlQQVJQT1JUX0NMQVNTX1NDU0lBREFQVEVSCit9IHBhcnBvcnRfZGV2aWNlX2NsYXNzOworCitpbnQgcGFycG9ydF9maW5kX2NsYXNzIChwYXJwb3J0X2RldmljZV9jbGFzcyBjbHMsIGludCBmcm9tKTsKKworREVTQ1JJUFRJT04KKworRmluZCBhIGRldmljZSBieSBjbGFzcy4gIFRoZSBzZWFyY2ggc3RhcnRzIGZyb20gZGV2aWNlIG51bWJlciBmcm9tKzEuCisKK1JFVFVSTiBWQUxVRQorCitUaGUgZGV2aWNlIG51bWJlciBvZiB0aGUgbmV4dCBkZXZpY2UgaW4gdGhhdCBjbGFzcywgb3IgLTEgaWYgbm8gc3VjaAorZGV2aWNlIGV4aXN0cy4KKworTk9URVMKKworRXhhbXBsZSB1c2FnZToKKworaW50IGRldm51bSA9IC0xOword2hpbGUgKChkZXZudW0gPSBwYXJwb3J0X2ZpbmRfY2xhc3MgKFBBUlBPUlRfQ0xBU1NfRElHQ0FNLCBkZXZudW0pKSAhPSAtMSkgeworICAgIHN0cnVjdCBwYXJkZXZpY2UgKmRldiA9IHBhcnBvcnRfb3BlbiAoZGV2bnVtLCAuLi4pOworICAgIC4uLgorfQorCitTRUUgQUxTTworCitwYXJwb3J0X2ZpbmRfZGV2aWNlLCBwYXJwb3J0X29wZW4sIHBhcnBvcnRfZGV2aWNlX2lkCisMCitwYXJwb3J0X2ZpbmRfZGV2aWNlIC0gZmluZCBhIGRldmljZSBieSBpdHMgY2xhc3MKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitpbnQgcGFycG9ydF9maW5kX2RldmljZSAoY29uc3QgY2hhciAqbWZnLCBjb25zdCBjaGFyICptZGwsIGludCBmcm9tKTsKKworREVTQ1JJUFRJT04KKworRmluZCBhIGRldmljZSBieSB2ZW5kb3IgYW5kIG1vZGVsLiAgVGhlIHNlYXJjaCBzdGFydHMgZnJvbSBkZXZpY2UKK251bWJlciBmcm9tKzEuCisKK1JFVFVSTiBWQUxVRQorCitUaGUgZGV2aWNlIG51bWJlciBvZiB0aGUgbmV4dCBkZXZpY2UgbWF0Y2hpbmcgdGhlIHNwZWNpZmljYXRpb25zLCBvcgorLTEgaWYgbm8gc3VjaCBkZXZpY2UgZXhpc3RzLgorCitOT1RFUworCitFeGFtcGxlIHVzYWdlOgorCitpbnQgZGV2bnVtID0gLTE7Cit3aGlsZSAoKGRldm51bSA9IHBhcnBvcnRfZmluZF9kZXZpY2UgKCJJT01FR0EiLCAiWklQKyIsIGRldm51bSkpICE9IC0xKSB7CisgICAgc3RydWN0IHBhcmRldmljZSAqZGV2ID0gcGFycG9ydF9vcGVuIChkZXZudW0sIC4uLik7CisgICAgLi4uCit9CisKK1NFRSBBTFNPCisKK3BhcnBvcnRfZmluZF9jbGFzcywgcGFycG9ydF9vcGVuLCBwYXJwb3J0X2RldmljZV9pZAorDAorcGFycG9ydF9zZXRfdGltZW91dCAtIHNldCB0aGUgaW5hY3Rpdml0eSB0aW1lb3V0CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2xvbmcgcGFycG9ydF9zZXRfdGltZW91dCAoc3RydWN0IHBhcmRldmljZSAqZGV2LCBsb25nIGluYWN0aXZpdHkpOworCitERVNDUklQVElPTgorCitTZXQgdGhlIGluYWN0aXZpdHkgdGltZW91dCwgaW4gamlmZmllcywgZm9yIGEgcmVnaXN0ZXJlZCBkZXZpY2UuICBUaGUKK3ByZXZpb3VzIHRpbWVvdXQgaXMgcmV0dXJuZWQuCisKK1JFVFVSTiBWQUxVRQorCitUaGUgcHJldmlvdXMgdGltZW91dCwgaW4gamlmZmllcy4KKworTk9URVMKKworU29tZSBvZiB0aGUgcG9ydC0+b3BzIGZ1bmN0aW9ucyBmb3IgYSBwYXJwb3J0IG1heSB0YWtlIHRpbWUsIG93aW5nIHRvCitkZWxheXMgYXQgdGhlIHBlcmlwaGVyYWwuICBBZnRlciB0aGUgcGVyaXBoZXJhbCBoYXMgbm90IHJlc3BvbmRlZCBmb3IKKydpbmFjdGl2aXR5JyBqaWZmaWVzLCBhIHRpbWVvdXQgd2lsbCBvY2N1ciBhbmQgdGhlIGJsb2NraW5nIGZ1bmN0aW9uCit3aWxsIHJldHVybi4KKworQSB0aW1lb3V0IG9mIDAgamlmZmllcyBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIGZ1bmN0aW9uIG11c3QgZG8gYXMgbXVjaAorYXMgaXQgY2FuIHdpdGhvdXQgYmxvY2tpbmcgb3IgbGVhdmluZyB0aGUgaGFyZHdhcmUgaW4gYW4gdW5rbm93bgorc3RhdGUuICBJZiBwb3J0IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBmcm9tIHdpdGhpbiBhbiBpbnRlcnJ1cHQKK2hhbmRsZXIsIGZvciBpbnN0YW5jZSwgYSB0aW1lb3V0IG9mIDAgamlmZmllcyBzaG91bGQgYmUgdXNlZC4KKworT25jZSBzZXQgZm9yIGEgcmVnaXN0ZXJlZCBkZXZpY2UsIHRoZSB0aW1lb3V0IHdpbGwgcmVtYWluIGF0IHRoZSBzZXQKK3ZhbHVlIHVudGlsIHNldCBhZ2Fpbi4KKworU0VFIEFMU08KKworcG9ydC0+b3BzLT54eHhfcmVhZC93cml0ZV95eXkKKwwKK1BPUlQgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLQorCitUaGUgZnVuY3Rpb25zIGluIHRoZSBwb3J0LT5vcHMgc3RydWN0dXJlIChzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zKQorYXJlIHByb3ZpZGVkIGJ5IHRoZSBsb3ctbGV2ZWwgZHJpdmVyIHJlc3BvbnNpYmxlIGZvciB0aGF0IHBvcnQuCisKK3BvcnQtPm9wcy0+cmVhZF9kYXRhIC0gcmVhZCB0aGUgZGF0YSByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJdW5zaWduZWQgY2hhciAoKnJlYWRfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0KTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK0lmIHBvcnQtPm1vZGVzIGNvbnRhaW5zIHRoZSBQQVJQT1JUX01PREVfVFJJU1RBVEUgZmxhZyBhbmQgdGhlCitQQVJQT1JUX0NPTlRST0xfRElSRUNUSU9OIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlciBpcyBzZXQsIHRoaXMKK3JldHVybnMgdGhlIHZhbHVlIG9uIHRoZSBkYXRhIHBpbnMuICBJZiBwb3J0LT5tb2RlcyBjb250YWlucyB0aGUKK1BBUlBPUlRfTU9ERV9UUklTVEFURSBmbGFnIGFuZCB0aGUgUEFSUE9SVF9DT05UUk9MX0RJUkVDVElPTiBiaXQgaXMKK25vdCBzZXQsIHRoZSByZXR1cm4gdmFsdWUgX21heV8gYmUgdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byB0aGUgZGF0YQorcmVnaXN0ZXIuICBPdGhlcndpc2UgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCisKK1NFRSBBTFNPCisKK3dyaXRlX2RhdGEsIHJlYWRfc3RhdHVzLCB3cml0ZV9jb250cm9sCisMCitwb3J0LT5vcHMtPndyaXRlX2RhdGEgLSB3cml0ZSB0aGUgZGF0YSByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXZvaWQgKCp3cml0ZV9kYXRhKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgZCk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitXcml0ZXMgdG8gdGhlIGRhdGEgcmVnaXN0ZXIuICBNYXkgaGF2ZSBzaWRlLWVmZmVjdHMgKGEgU1RST0JFIHB1bHNlLAorZm9yIGluc3RhbmNlKS4KKworU0VFIEFMU08KKworcmVhZF9kYXRhLCByZWFkX3N0YXR1cywgd3JpdGVfY29udHJvbAorDAorcG9ydC0+b3BzLT5yZWFkX3N0YXR1cyAtIHJlYWQgdGhlIHN0YXR1cyByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwl1bnNpZ25lZCBjaGFyICgqcmVhZF9zdGF0dXMpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitSZWFkcyBmcm9tIHRoZSBzdGF0dXMgcmVnaXN0ZXIuICBUaGlzIGlzIGEgYml0bWFzazoKKworLSBQQVJQT1JUX1NUQVRVU19FUlJPUiAocHJpbnRlciBmYXVsdCwgIm5GYXVsdCIpCistIFBBUlBPUlRfU1RBVFVTX1NFTEVDVCAob24tbGluZSwgIlNlbGVjdCIpCistIFBBUlBPUlRfU1RBVFVTX1BBUEVST1VUIChubyBwYXBlciwgIlBFcnJvciIpCistIFBBUlBPUlRfU1RBVFVTX0FDSyAoaGFuZHNoYWtlLCAibkFjayIpCistIFBBUlBPUlRfU1RBVFVTX0JVU1kgKGJ1c3ksICJCdXN5IikKKworVGhlcmUgbWF5IGJlIG90aGVyIGJpdHMgc2V0LgorCitTRUUgQUxTTworCityZWFkX2RhdGEsIHdyaXRlX2RhdGEsIHdyaXRlX2NvbnRyb2wKKwwKK3BvcnQtPm9wcy0+cmVhZF9jb250cm9sIC0gcmVhZCB0aGUgY29udHJvbCByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJdW5zaWduZWQgY2hhciAoKnJlYWRfY29udHJvbCkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0KTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1JldHVybnMgdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byB0aGUgY29udHJvbCByZWdpc3RlciAoZWl0aGVyIGZyb20KK3dyaXRlX2NvbnRyb2wgb3IgZnJvYl9jb250cm9sKS4gIE5vIHBvcnQgYWNjZXNzIGlzIHBlcmZvcm1lZC4KKworU0VFIEFMU08KKworcmVhZF9kYXRhLCB3cml0ZV9kYXRhLCByZWFkX3N0YXR1cywgd3JpdGVfY29udHJvbAorDAorcG9ydC0+b3BzLT53cml0ZV9jb250cm9sIC0gd3JpdGUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwl2b2lkICgqd3JpdGVfc3RhdHVzKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgcyk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitXcml0ZXMgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIuIFRoaXMgaXMgYSBiaXRtYXNrOgorICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fCistIFBBUlBPUlRfQ09OVFJPTF9TVFJPQkUgKG5TdHJvYmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX18KKy0gUEFSUE9SVF9DT05UUk9MX0FVVE9GRCAobkF1dG9GZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fCistIFBBUlBPUlRfQ09OVFJPTF9JTklUIChuSW5pdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fCistIFBBUlBPUlRfQ09OVFJPTF9TRUxFQ1QgKG5TZWxlY3RJbikKKworU0VFIEFMU08KKworcmVhZF9kYXRhLCB3cml0ZV9kYXRhLCByZWFkX3N0YXR1cywgZnJvYl9jb250cm9sCisMCitwb3J0LT5vcHMtPmZyb2JfY29udHJvbCAtIHdyaXRlIGNvbnRyb2wgcmVnaXN0ZXIgYml0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJdm9pZCAoKmZyb2JfY29udHJvbCkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG1hc2ssCisJCQkgICAgICB1bnNpZ25lZCBjaGFyIHZhbCk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gcmVhZGluZyBmcm9tIHRoZSBjb250cm9sIHJlZ2lzdGVyLCBtYXNraW5nIG91dAordGhlIGJpdHMgaW4gbWFzaywgZXhjbHVzaXZlLW9yJ2luZyB3aXRoIHRoZSBiaXRzIGluIHZhbCwgYW5kIHdyaXRpbmcKK3RoZSByZXN1bHQgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCisKK0FzIHNvbWUgcG9ydHMgZG9uJ3QgYWxsb3cgcmVhZHMgZnJvbSB0aGUgY29udHJvbCBwb3J0LCBhIHNvZnR3YXJlIGNvcHkKK29mIGl0cyBjb250ZW50cyBpcyBtYWludGFpbmVkLCBzbyBmcm9iX2NvbnRyb2wgaXMgaW4gZmFjdCBvbmx5IG9uZQorcG9ydCBhY2Nlc3MuCisKK1NFRSBBTFNPCisKK3JlYWRfZGF0YSwgd3JpdGVfZGF0YSwgcmVhZF9zdGF0dXMsIHdyaXRlX2NvbnRyb2wKKwwKK3BvcnQtPm9wcy0+ZW5hYmxlX2lycSAtIGVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXZvaWQgKCplbmFibGVfaXJxKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworVGhlIHBhcmFsbGVsIHBvcnQgaGFyZHdhcmUgaXMgaW5zdHJ1Y3RlZCB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzIGF0CithcHByb3ByaWF0ZSBtb21lbnRzLCBhbHRob3VnaCB0aG9zZSBtb21lbnRzIGFyZQorYXJjaGl0ZWN0dXJlLXNwZWNpZmljLiAgRm9yIHRoZSBQQyBhcmNoaXRlY3R1cmUsIGludGVycnVwdHMgYXJlCitjb21tb25seSBnZW5lcmF0ZWQgb24gdGhlIHJpc2luZyBlZGdlIG9mIG5BY2suCisKK1NFRSBBTFNPCisKK2Rpc2FibGVfaXJxCisMCitwb3J0LT5vcHMtPmRpc2FibGVfaXJxIC0gZGlzYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwl2b2lkICgqZGlzYWJsZV9pcnEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitUaGUgcGFyYWxsZWwgcG9ydCBoYXJkd2FyZSBpcyBpbnN0cnVjdGVkIG5vdCB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzLgorVGhlIGludGVycnVwdCBpdHNlbGYgaXMgbm90IG1hc2tlZC4KKworU0VFIEFMU08KKworZW5hYmxlX2lycQorDAorcG9ydC0+b3BzLT5kYXRhX2ZvcndhcmQgLSBlbmFibGUgZGF0YSBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwl2b2lkICgqZGF0YV9mb3J3YXJkKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworRW5hYmxlcyB0aGUgZGF0YSBsaW5lIGRyaXZlcnMsIGZvciA4LWJpdCBob3N0LXRvLXBlcmlwaGVyYWwKK2NvbW11bmljYXRpb25zLgorCitTRUUgQUxTTworCitkYXRhX3JldmVyc2UKKwwKK3BvcnQtPm9wcy0+ZGF0YV9yZXZlcnNlIC0gdHJpc3RhdGUgdGhlIGJ1ZmZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJdm9pZCAoKmRhdGFfcmV2ZXJzZSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0KTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1BsYWNlcyB0aGUgZGF0YSBidXMgaW4gYSBoaWdoIGltcGVkYW5jZSBzdGF0ZSwgaWYgcG9ydC0+bW9kZXMgaGFzIHRoZQorUEFSUE9SVF9NT0RFX1RSSVNUQVRFIGJpdCBzZXQuCisKK1NFRSBBTFNPCisKK2RhdGFfZm9yd2FyZAorDAorcG9ydC0+b3BzLT5lcHBfd3JpdGVfZGF0YSAtIHdyaXRlIEVQUCBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXNpemVfdCAoKmVwcF93cml0ZV9kYXRhKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4sIGludCBmbGFncyk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitXcml0ZXMgZGF0YSBpbiBFUFAgbW9kZSwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorCitUaGUgJ2ZsYWdzJyBwYXJhbWV0ZXIgbWF5IGJlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcsCitiaXR3aXNlLW9yJ2VkIHRvZ2V0aGVyOgorCitQQVJQT1JUX0VQUF9GQVNUCVVzZSBmYXN0IHRyYW5zZmVycy4gU29tZSBjaGlwcyBwcm92aWRlIDE2LWJpdCBhbmQKKwkJCTMyLWJpdCByZWdpc3RlcnMuICBIb3dldmVyLCBpZiBhIHRyYW5zZmVyCisJCQl0aW1lcyBvdXQsIHRoZSByZXR1cm4gdmFsdWUgbWF5IGJlIHVucmVsaWFibGUuCisKK1NFRSBBTFNPCisKK2VwcF9yZWFkX2RhdGEsIGVwcF93cml0ZV9hZGRyLCBlcHBfcmVhZF9hZGRyCisMCitwb3J0LT5vcHMtPmVwcF9yZWFkX2RhdGEgLSByZWFkIEVQUCBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJc2l6ZV90ICgqZXBwX3JlYWRfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCB2b2lkICpidWYsCisJCQkJIHNpemVfdCBsZW4sIGludCBmbGFncyk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitSZWFkcyBkYXRhIGluIEVQUCBtb2RlLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisKK1RoZSAnZmxhZ3MnIHBhcmFtZXRlciBtYXkgYmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZywKK2JpdHdpc2Utb3InZWQgdG9nZXRoZXI6CisKK1BBUlBPUlRfRVBQX0ZBU1QJVXNlIGZhc3QgdHJhbnNmZXJzLiBTb21lIGNoaXBzIHByb3ZpZGUgMTYtYml0IGFuZAorCQkJMzItYml0IHJlZ2lzdGVycy4gIEhvd2V2ZXIsIGlmIGEgdHJhbnNmZXIKKwkJCXRpbWVzIG91dCwgdGhlIHJldHVybiB2YWx1ZSBtYXkgYmUgdW5yZWxpYWJsZS4KKworU0VFIEFMU08KKworZXBwX3dyaXRlX2RhdGEsIGVwcF93cml0ZV9hZGRyLCBlcHBfcmVhZF9hZGRyCisMCitwb3J0LT5vcHMtPmVwcF93cml0ZV9hZGRyIC0gd3JpdGUgRVBQIGFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJc2l6ZV90ICgqZXBwX3dyaXRlX2FkZHIpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1dyaXRlcyBFUFAgYWRkcmVzc2VzICg4IGJpdHMgZWFjaCksIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgd3JpdHRlbi4KKworVGhlICdmbGFncycgcGFyYW1ldGVyIG1heSBiZSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nLAorYml0d2lzZS1vcidlZCB0b2dldGhlcjoKKworUEFSUE9SVF9FUFBfRkFTVAlVc2UgZmFzdCB0cmFuc2ZlcnMuIFNvbWUgY2hpcHMgcHJvdmlkZSAxNi1iaXQgYW5kCisJCQkzMi1iaXQgcmVnaXN0ZXJzLiAgSG93ZXZlciwgaWYgYSB0cmFuc2ZlcgorCQkJdGltZXMgb3V0LCB0aGUgcmV0dXJuIHZhbHVlIG1heSBiZSB1bnJlbGlhYmxlLgorCisoRG9lcyBQQVJQT1JUX0VQUF9GQVNUIG1ha2Ugc2Vuc2UgZm9yIHRoaXMgZnVuY3Rpb24/KQorCitTRUUgQUxTTworCitlcHBfd3JpdGVfZGF0YSwgZXBwX3JlYWRfZGF0YSwgZXBwX3JlYWRfYWRkcgorDAorcG9ydC0+b3BzLT5lcHBfcmVhZF9hZGRyIC0gcmVhZCBFUFAgYWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXNpemVfdCAoKmVwcF9yZWFkX2FkZHIpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgdm9pZCAqYnVmLAorCQkJCSBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworUmVhZHMgRVBQIGFkZHJlc3NlcyAoOCBiaXRzIGVhY2gpLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIHJlYWQuCisKK1RoZSAnZmxhZ3MnIHBhcmFtZXRlciBtYXkgYmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZywKK2JpdHdpc2Utb3InZWQgdG9nZXRoZXI6CisKK1BBUlBPUlRfRVBQX0ZBU1QJVXNlIGZhc3QgdHJhbnNmZXJzLiBTb21lIGNoaXBzIHByb3ZpZGUgMTYtYml0IGFuZAorCQkJMzItYml0IHJlZ2lzdGVycy4gIEhvd2V2ZXIsIGlmIGEgdHJhbnNmZXIKKwkJCXRpbWVzIG91dCwgdGhlIHJldHVybiB2YWx1ZSBtYXkgYmUgdW5yZWxpYWJsZS4KKworKERvZXMgUEFSUE9SVF9FUFBfRkFTVCBtYWtlIHNlbnNlIGZvciB0aGlzIGZ1bmN0aW9uPykKKworU0VFIEFMU08KKworZXBwX3dyaXRlX2RhdGEsIGVwcF9yZWFkX2RhdGEsIGVwcF93cml0ZV9hZGRyCisMCitwb3J0LT5vcHMtPmVjcF93cml0ZV9kYXRhIC0gd3JpdGUgYSBibG9jayBvZiBFQ1AgZGF0YQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwlzaXplX3QgKCplY3Bfd3JpdGVfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCQkJCSAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworV3JpdGVzIGEgYmxvY2sgb2YgRUNQIGRhdGEuICBUaGUgJ2ZsYWdzJyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKworUkVUVVJOIFZBTFVFCisKK1RoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKworU0VFIEFMU08KKworZWNwX3JlYWRfZGF0YSwgZWNwX3dyaXRlX2FkZHIKKwwKK3BvcnQtPm9wcy0+ZWNwX3JlYWRfZGF0YSAtIHJlYWQgYSBibG9jayBvZiBFQ1AgZGF0YQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXNpemVfdCAoKmVjcF9yZWFkX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworUmVhZHMgYSBibG9jayBvZiBFQ1AgZGF0YS4gIFRoZSAnZmxhZ3MnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorCitSRVRVUk4gVkFMVUUKKworVGhlIG51bWJlciBvZiBieXRlcyByZWFkLiAgTkIuIFRoZXJlIG1heSBiZSBtb3JlIHVucmVhZCBkYXRhIGluIGEKK0ZJRk8uICBJcyB0aGVyZSBhIHdheSBvZiBzdHVubmluZyB0aGUgRklGTyB0byBwcmV2ZW50IHRoaXM/CisKK1NFRSBBTFNPCisKK2VjcF93cml0ZV9ibG9jaywgZWNwX3dyaXRlX2FkZHIKKwwKK3BvcnQtPm9wcy0+ZWNwX3dyaXRlX2FkZHIgLSB3cml0ZSBhIGJsb2NrIG9mIEVDUCBhZGRyZXNzZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJc2l6ZV90ICgqZWNwX3dyaXRlX2FkZHIpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1dyaXRlcyBhIGJsb2NrIG9mIEVDUCBhZGRyZXNzZXMuICBUaGUgJ2ZsYWdzJyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKworUkVUVVJOIFZBTFVFCisKK1RoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKworTk9URVMKKworVGhpcyBtYXkgdXNlIGEgRklGTywgYW5kIGlmIHNvIHNoYWxsIG5vdCByZXR1cm4gdW50aWwgdGhlIEZJRk8gaXMgZW1wdHkuCisKK1NFRSBBTFNPCisKK2VjcF9yZWFkX2RhdGEsIGVjcF93cml0ZV9kYXRhCisMCitwb3J0LT5vcHMtPm5pYmJsZV9yZWFkX2RhdGEgLSByZWFkIGEgYmxvY2sgb2YgZGF0YSBpbiBuaWJibGUgbW9kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXNpemVfdCAoKm5pYmJsZV9yZWFkX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworUmVhZHMgYSBibG9jayBvZiBkYXRhIGluIG5pYmJsZSBtb2RlLiAgVGhlICdmbGFncycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisKK1JFVFVSTiBWQUxVRQorCitUaGUgbnVtYmVyIG9mIHdob2xlIGJ5dGVzIHJlYWQuCisKK1NFRSBBTFNPCisKK2J5dGVfcmVhZF9kYXRhLCBjb21wYXRfd3JpdGVfZGF0YQorDAorcG9ydC0+b3BzLT5ieXRlX3JlYWRfZGF0YSAtIHJlYWQgYSBibG9jayBvZiBkYXRhIGluIGJ5dGUgbW9kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwlzaXplX3QgKCpieXRlX3JlYWRfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCQkJCSAgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworUmVhZHMgYSBibG9jayBvZiBkYXRhIGluIGJ5dGUgbW9kZS4gIFRoZSAnZmxhZ3MnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorCitSRVRVUk4gVkFMVUUKKworVGhlIG51bWJlciBvZiBieXRlcyByZWFkLgorCitTRUUgQUxTTworCituaWJibGVfcmVhZF9kYXRhLCBjb21wYXRfd3JpdGVfZGF0YQorDAorcG9ydC0+b3BzLT5jb21wYXRfd3JpdGVfZGF0YSAtIHdyaXRlIGEgYmxvY2sgb2YgZGF0YSBpbiBjb21wYXRpYmlsaXR5IG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJc2l6ZV90ICgqY29tcGF0X3dyaXRlX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1dyaXRlcyBhIGJsb2NrIG9mIGRhdGEgaW4gY29tcGF0aWJpbGl0eSBtb2RlLiAgVGhlICdmbGFncycgcGFyYW1ldGVyCitpcyBpZ25vcmVkLgorCitSRVRVUk4gVkFMVUUKKworVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorCitTRUUgQUxTTworCituaWJibGVfcmVhZF9kYXRhLCBieXRlX3JlYWRfZGF0YQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wYXJwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vcGFycG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhN2NlZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGFycG9ydC50eHQKQEAgLTAsMCArMSwyNjggQEAKK1RoZSBgcGFycG9ydCcgY29kZSBwcm92aWRlcyBwYXJhbGxlbC1wb3J0IHN1cHBvcnQgdW5kZXIgTGludXguICBUaGlzCitpbmNsdWRlcyB0aGUgYWJpbGl0eSB0byBzaGFyZSBvbmUgcG9ydCBiZXR3ZWVuIG11bHRpcGxlIGRldmljZQorZHJpdmVycy4KKworWW91IGNhbiBwYXNzIHBhcmFtZXRlcnMgdG8gdGhlIHBhcnBvcnQgY29kZSB0byBvdmVycmlkZSBpdHMgYXV0b21hdGljCitkZXRlY3Rpb24gb2YgeW91ciBoYXJkd2FyZS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB5b3Ugd2FudAordG8gdXNlIElSUXMsIHNpbmNlIGluIGdlbmVyYWwgdGhlc2UgY2FuJ3QgYmUgYXV0b3Byb2JlZCBzdWNjZXNzZnVsbHkuCitCeSBkZWZhdWx0IElSUXMgYXJlIG5vdCB1c2VkIGV2ZW4gaWYgdGhleSBfY2FuXyBiZSBwcm9iZWQuICBUaGlzIGlzCitiZWNhdXNlIHRoZXJlIGFyZSBhIGxvdCBvZiBwZW9wbGUgdXNpbmcgdGhlIHNhbWUgSVJRIGZvciB0aGVpcgorcGFyYWxsZWwgcG9ydCBhbmQgYSBzb3VuZCBjYXJkIG9yIG5ldHdvcmsgY2FyZC4KKworVGhlIHBhcnBvcnQgY29kZSBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0czogZ2VuZXJpYyAod2hpY2ggZGVhbHMgd2l0aAorcG9ydC1zaGFyaW5nKSBhbmQgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCAod2hpY2ggZGVhbHMgd2l0aCBhY3R1YWxseQordXNpbmcgdGhlIHBvcnQpLgorCisKK1BhcnBvcnQgYXMgbW9kdWxlcworPT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBsb2FkIHRoZSBwYXJwb3J0IGNvZGUgYXMgYSBtb2R1bGUsIHNheQorCisJIyBpbnNtb2QgcGFycG9ydAorCit0byBsb2FkIHRoZSBnZW5lcmljIHBhcnBvcnQgY29kZS4gIFlvdSB0aGVuIG11c3QgbG9hZCB0aGUKK2FyY2hpdGVjdHVyZS1kZXBlbmRlbnQgY29kZSB3aXRoIChmb3IgZXhhbXBsZSk6CisKKwkjIGluc21vZCBwYXJwb3J0X3BjIGlvPTB4M2JjLDB4Mzc4LDB4Mjc4IGlycT1ub25lLDcsYXV0bworCit0byB0ZWxsIHRoZSBwYXJwb3J0IGNvZGUgdGhhdCB5b3Ugd2FudCB0aHJlZSBQQy1zdHlsZSBwb3J0cywgb25lIGF0CisweDNiYyB3aXRoIG5vIElSUSwgb25lIGF0IDB4Mzc4IHVzaW5nIElSUSA3LCBhbmQgb25lIGF0IDB4Mjc4IHdpdGggYW4KK2F1dG8tZGV0ZWN0ZWQgSVJRLiAgQ3VycmVudGx5LCBQQy1zdHlsZSAocGFycG9ydF9wYyksIFN1biBgYnBwJywKK0FtaWdhLCBBdGFyaSwgYW5kIE1GQzMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkLgorCitQQ0kgcGFyYWxsZWwgSS9PIGNhcmQgc3VwcG9ydCBjb21lcyBmcm9tIHBhcnBvcnRfcGMuICBCYXNlIEkvTworYWRkcmVzc2VzIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGZvciBzdXBwb3J0ZWQgUENJIGNhcmRzIHNpbmNlIHRoZXkKK2FyZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLgorCisKK0tNb2QKKy0tLS0KKworSWYgeW91IHVzZSBrbW9kLCB5b3Ugd2lsbCBmaW5kIGl0IHVzZWZ1bCB0byBlZGl0IC9ldGMvbW9kcHJvYmUuY29uZi4KK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgbGluZXMgdGhhdCBuZWVkIHRvIGJlIGFkZGVkOgorCisJYWxpYXMgcGFycG9ydF9sb3dsZXZlbCBwYXJwb3J0X3BjCisJb3B0aW9ucyBwYXJwb3J0X3BjIGlvPTB4Mzc4LDB4Mjc4IGlycT03LGF1dG8KKworS01vZCB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBsb2FkIHBhcnBvcnRfcGMgKHdpdGggdGhlIG9wdGlvbnMKKyJpbz0weDM3OCwweDI3OCBpcnE9NyxhdXRvIikgd2hlbmV2ZXIgYSBwYXJhbGxlbCBwb3J0IGRldmljZSBkcml2ZXIKKyhzdWNoIGFzIGxwKSBpcyBsb2FkZWQuCisKK05vdGUgdGhhdCB0aGVzZSBhcmUgZXhhbXBsZSBsaW5lcyBvbmx5ISAgWW91IHNob3VsZG4ndCBpbiBnZW5lcmFsIG5lZWQKK3RvIHNwZWNpZnkgYW55IG9wdGlvbnMgdG8gcGFycG9ydF9wYyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBhCitwYXJhbGxlbCBwb3J0LgorCisKK1BhcnBvcnQgcHJvYmUgW29wdGlvbmFsXQorLS0tLS0tLS0tLS0tLQorCitJbiAyLjIga2VybmVscyB0aGVyZSB3YXMgYSBtb2R1bGUgY2FsbGVkIHBhcnBvcnRfcHJvYmUsIHdoaWNoIHdhcyB1c2VkCitmb3IgY29sbGVjdGluZyBJRUVFIDEyODQgZGV2aWNlIElEIGluZm9ybWF0aW9uLiAgVGhpcyBoYXMgbm93IGJlZW4KK2VuaGFuY2VkIGFuZCBub3cgbGl2ZXMgd2l0aCB0aGUgSUVFRSAxMjg0IHN1cHBvcnQuICBXaGVuIGEgcGFyYWxsZWwKK3BvcnQgaXMgZGV0ZWN0ZWQsIHRoZSBkZXZpY2VzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBpdCBhcmUgYW5hbHlzZWQsCithbmQgaW5mb3JtYXRpb24gaXMgbG9nZ2VkIGxpa2UgdGhpczoKKworCXBhcnBvcnQwOiBQcmludGVyLCBCSkMtMjEwIChDYW5vbikKKworVGhlIHByb2JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIGZpbGVzIGluIC9wcm9jL3N5cy9kZXYvcGFycG9ydC8uCisKKworUGFycG9ydCBsaW5rZWQgaW50byB0aGUga2VybmVsIHN0YXRpY2FsbHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBjb21waWxlIHRoZSBwYXJwb3J0IGNvZGUgaW50byB0aGUga2VybmVsLCB0aGVuIHlvdSBjYW4gdXNlCitrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzIHRvIGdldCB0aGUgc2FtZSBlZmZlY3QuICBBZGQgc29tZXRoaW5nIGxpa2UgdGhlCitmb2xsb3dpbmcgdG8geW91ciBMSUxPIGNvbW1hbmQgbGluZToKKworCXBhcnBvcnQ9MHgzYmMgcGFycG9ydD0weDM3OCw3IHBhcnBvcnQ9MHgyNzgsYXV0byxub2ZpZm8KKworWW91IGNhbiBoYXZlIG1hbnkgYHBhcnBvcnQ9Li4uJyBzdGF0ZW1lbnRzLCBvbmUgZm9yIGVhY2ggcG9ydCB5b3Ugd2FudAordG8gYWRkLiAgQWRkaW5nIGBwYXJwb3J0PTAnIHRvIHRoZSBrZXJuZWwgY29tbWFuZC1saW5lIHdpbGwgZGlzYWJsZQorcGFycG9ydCBzdXBwb3J0IGVudGlyZWx5LiAgQWRkaW5nIGBwYXJwb3J0PWF1dG8nIHRvIHRoZSBrZXJuZWwKK2NvbW1hbmQtbGluZSB3aWxsIG1ha2UgcGFycG9ydCB1c2UgYW55IElSUSBsaW5lcyBvciBETUEgY2hhbm5lbHMgdGhhdAoraXQgYXV0by1kZXRlY3RzLgorCisKK0ZpbGVzIGluIC9wcm9jCis9PT09PT09PT09PT09PQorCitJZiB5b3UgaGF2ZSBjb25maWd1cmVkIHRoZSAvcHJvYyBmaWxlc3lzdGVtIGludG8geW91ciBrZXJuZWwsIHlvdSB3aWxsCitzZWUgYSBuZXcgZGlyZWN0b3J5IGVudHJ5OiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQuICBJbiB0aGVyZSB3aWxsIGJlIGEKK2RpcmVjdG9yeSBlbnRyeSBmb3IgZWFjaCBwYXJhbGxlbCBwb3J0IGZvciB3aGljaCBwYXJwb3J0IGlzCitjb25maWd1cmVkLiAgSW4gZWFjaCBvZiB0aG9zZSBkaXJlY3RvcmllcyBhcmUgYSBjb2xsZWN0aW9uIG9mIGZpbGVzCitkZXNjcmliaW5nIHRoYXQgcGFyYWxsZWwgcG9ydC4KKworVGhlIC9wcm9jL3N5cy9kZXYvcGFycG9ydCBkaXJlY3RvcnkgdHJlZSBsb29rcyBsaWtlOgorCitwYXJwb3J0Cit8LS0gZGVmYXVsdAorfCAgIHwtLSBzcGludGltZQorfCAgIGAtLSB0aW1lc2xpY2UKK3wtLSBwYXJwb3J0MAorfCAgIHwtLSBhdXRvcHJvYmUKK3wgICB8LS0gYXV0b3Byb2JlMAorfCAgIHwtLSBhdXRvcHJvYmUxCit8ICAgfC0tIGF1dG9wcm9iZTIKK3wgICB8LS0gYXV0b3Byb2JlMworfCAgIHwtLSBkZXZpY2VzCit8ICAgfCAgIHwtLSBhY3RpdmUKK3wgICB8ICAgYC0tIGxwCit8ICAgfCAgICAgICBgLS0gdGltZXNsaWNlCit8ICAgfC0tIGJhc2UtYWRkcgorfCAgIHwtLSBpcnEKK3wgICB8LS0gZG1hCit8ICAgfC0tIG1vZGVzCit8ICAgYC0tIHNwaW50aW1lCitgLS0gcGFycG9ydDEKKyAgICB8LS0gYXV0b3Byb2JlCisgICAgfC0tIGF1dG9wcm9iZTAKKyAgICB8LS0gYXV0b3Byb2JlMQorICAgIHwtLSBhdXRvcHJvYmUyCisgICAgfC0tIGF1dG9wcm9iZTMKKyAgICB8LS0gZGV2aWNlcworICAgIHwgICB8LS0gYWN0aXZlCisgICAgfCAgIGAtLSBwcGEKKyAgICB8ICAgICAgIGAtLSB0aW1lc2xpY2UKKyAgICB8LS0gYmFzZS1hZGRyCisgICAgfC0tIGlycQorICAgIHwtLSBkbWEKKyAgICB8LS0gbW9kZXMKKyAgICBgLS0gc3BpbnRpbWUKKworCitGaWxlOgkJQ29udGVudHM6CisKK2RldmljZXMvYWN0aXZlCUEgbGlzdCBvZiB0aGUgZGV2aWNlIGRyaXZlcnMgdXNpbmcgdGhhdCBwb3J0LiAgQSAiKyIKKwkJd2lsbCBhcHBlYXIgYnkgdGhlIG5hbWUgb2YgdGhlIGRldmljZSBjdXJyZW50bHkgdXNpbmcKKwkJdGhlIHBvcnQgKGl0IG1pZ2h0IG5vdCBhcHBlYXIgYWdhaW5zdCBhbnkpLiAgVGhlCisJCXN0cmluZyAibm9uZSIgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbm8gZGV2aWNlIGRyaXZlcnMKKwkJdXNpbmcgdGhhdCBwb3J0LgorCitiYXNlLWFkZHIJUGFyYWxsZWwgcG9ydCdzIGJhc2UgYWRkcmVzcywgb3IgYWRkcmVzc2VzIGlmIHRoZSBwb3J0CisJCWhhcyBtb3JlIHRoYW4gb25lIGluIHdoaWNoIGNhc2UgdGhleSBhcmUgc2VwYXJhdGVkCisJCXdpdGggdGFicy4gIFRoZXNlIHZhbHVlcyBtaWdodCBub3QgaGF2ZSBhbnkgc2Vuc2libGUKKwkJbWVhbmluZyBmb3Igc29tZSBwb3J0cy4KKworaXJxCQlQYXJhbGxlbCBwb3J0J3MgSVJRLCBvciAtMSBpZiBub25lIGlzIGJlaW5nIHVzZWQuCisKK2RtYQkJUGFyYWxsZWwgcG9ydCdzIERNQSBjaGFubmVsLCBvciAtMSBpZiBub25lIGlzIGJlaW5nCisJCXVzZWQuCisKK21vZGVzCQlQYXJhbGxlbCBwb3J0J3MgaGFyZHdhcmUgbW9kZXMsIGNvbW1hLXNlcGFyYXRlZCwKKwkJbWVhbmluZzoKKworCQlQQ1NQUAkJUEMtc3R5bGUgU1BQIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlLgorCQlUUklTVEFURQlQb3J0IGlzIGJpZGlyZWN0aW9uYWwuCisJCUNPTVBBVAkJSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBwcmludGVycyBpcworCQkJCWF2YWlsYWJsZSBhbmQgd2lsbCBiZSB1c2VkLgorCQlFUFAJCUhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgRVBQIHByb3RvY29sCisJCQkJaXMgYXZhaWxhYmxlIGFuZCB3aWxsIGJlIHVzZWQuCisJCUVDUAkJSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBFQ1AgcHJvdG9jb2wKKwkJCQlpcyBhdmFpbGFibGUgYW5kIHdpbGwgYmUgdXNlZC4KKwkJRE1BCQlETUEgaXMgYXZhaWxhYmxlIGFuZCB3aWxsIGJlIHVzZWQuCisKKwkJTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgb25seSB0YWtlCisJCWFkdmFudGFnZSBvZiBDT01QQVQgYW5kIEVDUCBtb2RlcyBpZiBpdCBoYXMgYW4gSVJRCisJCWxpbmUgdG8gdXNlLgorCithdXRvcHJvYmUJQW55IElFRUUtMTI4NCBkZXZpY2UgSUQgaW5mb3JtYXRpb24gdGhhdCBoYXMgYmVlbgorCQlhY3F1aXJlZCBmcm9tIHRoZSAobm9uLUlFRUUgMTI4NC4zKSBkZXZpY2UuCisKK2F1dG9wcm9iZVswLTNdCUlFRUUgMTI4NCBkZXZpY2UgSUQgaW5mb3JtYXRpb24gcmV0cmlldmVkIGZyb20KKwkJZGFpc3ktY2hhaW4gZGV2aWNlcyB0aGF0IGNvbmZvcm0gdG8gSUVFRSAxMjg0LjMuCisKK3NwaW50aW1lCVRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHRvIGJ1c3ktbG9vcCB3aGlsZSB3YWl0aW5nCisJCWZvciB0aGUgcGVyaXBoZXJhbCB0byByZXNwb25kLiAgWW91IG1pZ2h0IGZpbmQgdGhhdAorCQlhZGp1c3RpbmcgdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSwgZGVwZW5kaW5nIG9uIHlvdXIKKwkJcGVyaXBoZXJhbHMuICBUaGlzIGlzIGEgcG9ydC13aWRlIHNldHRpbmcsIGkuZS4gaXQKKwkJYXBwbGllcyB0byBhbGwgZGV2aWNlcyBvbiBhIHBhcnRpY3VsYXIgcG9ydC4KKwordGltZXNsaWNlCVRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgYSBkZXZpY2UgZHJpdmVyIGlzCisJCWFsbG93ZWQgdG8ga2VlcCBhIHBvcnQgY2xhaW1lZCBmb3IuICBUaGlzIGlzIGFkdmlzb3J5LAorCQlhbmQgZHJpdmVyIGNhbiBpZ25vcmUgaXQgaWYgaXQgbXVzdC4KKworZGVmYXVsdC8qCVRoZSBkZWZhdWx0cyBmb3Igc3BpbnRpbWUgYW5kIHRpbWVzbGljZS4gV2hlbiBhIG5ldworCQlwb3J0IGlzCXJlZ2lzdGVyZWQsIGl0IHBpY2tzIHVwIHRoZSBkZWZhdWx0IHNwaW50aW1lLgorCQlXaGVuIGEgbmV3IGRldmljZSBpcyByZWdpc3RlcmVkLCBpdCBwaWNrcyB1cCB0aGUKKwkJZGVmYXVsdCB0aW1lc2xpY2UuCisKK0RldmljZSBkcml2ZXJzCis9PT09PT09PT09PT09PQorCitPbmNlIHRoZSBwYXJwb3J0IGNvZGUgaXMgaW5pdGlhbGlzZWQsIHlvdSBjYW4gYXR0YWNoIGRldmljZSBkcml2ZXJzIHRvCitzcGVjaWZpYyBwb3J0cy4gIE5vcm1hbGx5IHRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5OyBpZiB0aGUgbHAgZHJpdmVyCitpcyBsb2FkZWQgaXQgd2lsbCBjcmVhdGUgb25lIGxwIGRldmljZSBmb3IgZWFjaCBwb3J0IGZvdW5kLiAgWW91IGNhbgorb3ZlcnJpZGUgdGhpcywgdGhvdWdoLCBieSB1c2luZyBwYXJhbWV0ZXJzIGVpdGhlciB3aGVuIHlvdSBsb2FkIHRoZSBscAorZHJpdmVyOgorCisJIyBpbnNtb2QgbHAgcGFycG9ydD0wLDIKKworb3Igb24gdGhlIExJTE8gY29tbWFuZCBsaW5lOgorCisJbHA9cGFycG9ydDAgbHA9cGFycG9ydDIKKworQm90aCB0aGUgYWJvdmUgZXhhbXBsZXMgd291bGQgaW5mb3JtIGxwIHRoYXQgeW91IHdhbnQgL2Rldi9scDAgdG8gYmUKK3RoZSBmaXJzdCBwYXJhbGxlbCBwb3J0LCBhbmQgL2Rldi9scDEgdG8gYmUgdGhlIF90aGlyZF8gcGFyYWxsZWwgcG9ydCwKK3dpdGggbm8gbHAgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kIHBvcnQgKHBhcnBvcnQxKS4gIE5vdGUKK3RoYXQgdGhpcyBpcyBkaWZmZXJlbnQgdG8gdGhlIHdheSBvbGRlciBrZXJuZWxzIHdvcmtlZDsgdGhlcmUgdXNlZCB0bworYmUgYSBzdGF0aWMgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgSS9PIHBvcnQgYWRkcmVzcyBhbmQgdGhlIGRldmljZQorbmFtZSwgc28gL2Rldi9scDAgd2FzIGFsd2F5cyB0aGUgcG9ydCBhdCAweDNiYy4gIFRoaXMgaXMgbm8gbG9uZ2VyIHRoZQorY2FzZSAtIGlmIHlvdSBvbmx5IGhhdmUgb25lIHBvcnQsIGl0IHdpbGwgZGVmYXVsdCB0byBiZWluZyAvZGV2L2xwMCwKK3JlZ2FyZGxlc3Mgb2YgYmFzZSBhZGRyZXNzLgorCitBbHNvOgorCisgKiBJZiB5b3Ugc2VsZWN0ZWQgdGhlIElFRUUgMTI4NCBzdXBwb3J0IGF0IGNvbXBpbGUgdGltZSwgeW91IGNhbiBzYXkKKyAgIGBscD1hdXRvJyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSwgYW5kIGxwIHdpbGwgY3JlYXRlIGRldmljZXMKKyAgIG9ubHkgZm9yIHRob3NlIHBvcnRzIHRoYXQgc2VlbSB0byBoYXZlIHByaW50ZXJzIGF0dGFjaGVkLgorCisgKiBJZiB5b3UgZ2l2ZSBQTElQIHRoZSBgdGltaWQnIHBhcmFtZXRlciwgZWl0aGVyIHdpdGggYHBsaXA9dGltaWQnIG9uCisgICB0aGUgY29tbWFuZCBsaW5lLCBvciB3aXRoIGBpbnNtb2QgcGxpcCB0aW1pZD0xJyB3aGVuIHVzaW5nIG1vZHVsZXMsCisgICBpdCB3aWxsIGF2b2lkIGFueSBwb3J0cyB0aGF0IHNlZW0gdG8gYmUgaW4gdXNlIGJ5IG90aGVyIGRldmljZXMuCisKKyAqIElSUSBhdXRvcHJvYmluZyB3b3JrcyBvbmx5IGZvciBhIGZldyBwb3J0IHR5cGVzIGF0IHRoZSBtb21lbnQuCisKK1JlcG9ydGluZyBwcmludGVyIHByb2JsZW1zIHdpdGggcGFycG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBhcmUgaGF2aW5nIHByb2JsZW1zIHByaW50aW5nLCBwbGVhc2UgZ28gdGhyb3VnaCB0aGVzZSBzdGVwcyB0bwordHJ5IHRvIG5hcnJvdyBkb3duIHdoZXJlIHRoZSBwcm9ibGVtIGFyZWEgaXMuCisKK1doZW4gcmVwb3J0aW5nIHByb2JsZW1zIHdpdGggcGFycG9ydCwgcmVhbGx5IHlvdSBuZWVkIHRvIGdpdmUgYWxsIG9mCit0aGUgbWVzc2FnZXMgdGhhdCBwYXJwb3J0X3BjIHNwaXRzIG91dCB3aGVuIGl0IGluaXRpYWxpc2VzLiAgVGhlcmUgYXJlCitzZXZlcmFsIGNvZGUgcGF0aHM6CisKK28gcG9sbGluZworbyBpbnRlcnJ1cHQtZHJpdmVuLCBwcm90b2NvbCBpbiBzb2Z0d2FyZQorbyBpbnRlcnJ1cHQtZHJpdmVuLCBwcm90b2NvbCBpbiBoYXJkd2FyZSB1c2luZyBQSU8KK28gaW50ZXJydXB0LWRyaXZlbiwgcHJvdG9jb2wgaW4gaGFyZHdhcmUgdXNpbmcgRE1BCisKK1RoZSBrZXJuZWwgbWVzc2FnZXMgdGhhdCBwYXJwb3J0X3BjIGxvZ3MgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoCitjb2RlIHBhdGggaXMgYmVpbmcgdXNlZC4gKFRoZXkgY291bGQgYmUgYSBsb3QgYmV0dGVyIGFjdHVhbGx5Li4pCisKK0ZvciBub3JtYWwgcHJpbnRlciBwcm90b2NvbCwgaGF2aW5nIElFRUUgMTI4NCBtb2RlcyBlbmFibGVkIG9yIG5vdAorc2hvdWxkIG5vdCBtYWtlIGEgZGlmZmVyZW5jZS4KKworVG8gdHVybiBvZmYgdGhlICdwcm90b2NvbCBpbiBoYXJkd2FyZScgY29kZSBwYXRocywgZGlzYWJsZQorQ09ORklHX1BBUlBPUlRfUENfRklGTy4gIE5vdGUgdGhhdCB3aGVuIHRoZXkgYXJlIGVuYWJsZWQgdGhleSBhcmUgbm90CituZWNlc3NhcmlseSBfdXNlZF87IGl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgaGFyZHdhcmUgaXMgYXZhaWxhYmxlLAorZW5hYmxlZCBieSB0aGUgQklPUywgYW5kIGRldGVjdGVkIGJ5IHRoZSBkcml2ZXIuCisKK1NvLCB0byBzdGFydCB3aXRoLCBkaXNhYmxlIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8sIGFuZCBsb2FkIHBhcnBvcnRfcGMKK3dpdGggJ2lycT1ub25lJy4gU2VlIGlmIHByaW50aW5nIHdvcmtzIHRoZW4uICBJdCByZWFsbHkgc2hvdWxkLAorYmVjYXVzZSB0aGlzIGlzIHRoZSBzaW1wbGVzdCBjb2RlIHBhdGguCisKK0lmIHRoYXQgd29ya3MgZmluZSwgdHJ5IHdpdGggJ2lvPTB4Mzc4IGlycT03JyAoYWRqdXN0IGZvciB5b3VyCitoYXJkd2FyZSksIHRvIG1ha2UgaXQgdXNlIGludGVycnVwdC1kcml2ZW4gaW4tc29mdHdhcmUgcHJvdG9jb2wuCisKK0lmIF90aGF0XyB3b3JrcyBmaW5lLCB0aGVuIG9uZSBvZiB0aGUgaGFyZHdhcmUgbW9kZXMgaXNuJ3Qgd29ya2luZworcmlnaHQuICBFbmFibGUgQ09ORklHX1BBUlBPUlRfUENfRklGTyAobm8sIGl0IGlzbid0IGEgbW9kdWxlIG9wdGlvbiwKK2FuZCB5ZXMsIGl0IHNob3VsZCBiZSksIHNldCB0aGUgcG9ydCB0byBFQ1AgbW9kZSBpbiB0aGUgQklPUyBhbmQgbm90ZQordGhlIERNQSBjaGFubmVsLCBhbmQgdHJ5IHdpdGg6CisKKyAgICBpbz0weDM3OCBpcnE9NyBkbWE9bm9uZSAoZm9yIFBJTykKKyAgICBpbz0weDM3OCBpcnE9NyBkbWE9MyAoZm9yIERNQSkKKy0tCitwaGlsYkBnbnUub3JnCit0aW1AY3liZXJlbGsubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjaS50eHQgYi9Eb2N1bWVudGF0aW9uL3BjaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1MTRiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGNpLnR4dApAQCAtMCwwICsxLDI4NCBAQAorCQkJIEhvdyBUbyBXcml0ZSBMaW51eCBQQ0kgRHJpdmVycworCisJCSAgIGJ5IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PiBvbiAwNy1GZWItMjAwMAorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIHdvcmxkIG9mIFBDSSBpcyB2YXN0IGFuZCBpdCdzIGZ1bGwgb2YgKG1vc3RseSB1bnBsZWFzYW50KSBzdXJwcmlzZXMuCitEaWZmZXJlbnQgUENJIGRldmljZXMgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIGFuZCBkaWZmZXJlbnQgYnVncyAtLQorYmVjYXVzZSBvZiB0aGlzLCB0aGUgUENJIHN1cHBvcnQgbGF5ZXIgaW4gTGludXgga2VybmVsIGlzIG5vdCBhcyB0cml2aWFsCithcyBvbmUgd291bGQgd2lzaC4gVGhpcyBzaG9ydCBwYW1waGxldCB0cmllcyB0byBoZWxwIGFsbCBwb3RlbnRpYWwgZHJpdmVyCithdXRob3JzIGZpbmQgdGhlaXIgd2F5IHRocm91Z2ggdGhlIGRlZXAgZm9yZXN0cyBvZiBQQ0kgaGFuZGxpbmcuCisKKworMC4gU3RydWN0dXJlIG9mIFBDSSBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZXJlIGV4aXN0IHR3byBraW5kcyBvZiBQQ0kgZHJpdmVyczogbmV3LXN0eWxlIG9uZXMgKHdoaWNoIGxlYXZlIG1vc3Qgb2YKK3Byb2JpbmcgZm9yIGRldmljZXMgdG8gdGhlIFBDSSBsYXllciBhbmQgc3VwcG9ydCBvbmxpbmUgaW5zZXJ0aW9uIGFuZCByZW1vdmFsCitvZiBkZXZpY2VzIFt0aHVzIHN1cHBvcnRpbmcgUENJLCBob3QtcGx1Z2dhYmxlIFBDSSBhbmQgQ2FyZEJ1cyBpbiBhIHNpbmdsZQorZHJpdmVyXSkgYW5kIG9sZC1zdHlsZSBvbmVzIHdoaWNoIGp1c3QgZG8gYWxsIHRoZSBwcm9iaW5nIHRoZW1zZWx2ZXMuIFVubGVzcworeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uIHRvIGRvIHNvLCBwbGVhc2UgZG9uJ3QgdXNlIHRoZSBvbGQgd2F5IG9mIHByb2JpbmcKK2luIGFueSBuZXcgY29kZS4gQWZ0ZXIgdGhlIGRyaXZlciBmaW5kcyB0aGUgZGV2aWNlcyBpdCB3aXNoZXMgdG8gb3BlcmF0ZQorb24gKGVpdGhlciB0aGUgb2xkIG9yIHRoZSBuZXcgd2F5KSwgaXQgbmVlZHMgdG8gcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisJRW5hYmxlIHRoZSBkZXZpY2UKKwlBY2Nlc3MgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UKKwlEaXNjb3ZlciByZXNvdXJjZXMgKGFkZHJlc3NlcyBhbmQgSVJRIG51bWJlcnMpIHByb3ZpZGVkIGJ5IHRoZSBkZXZpY2UKKwlBbGxvY2F0ZSB0aGVzZSByZXNvdXJjZXMKKwlDb21tdW5pY2F0ZSB3aXRoIHRoZSBkZXZpY2UKKwlEaXNhYmxlIHRoZSBkZXZpY2UKKworTW9zdCBvZiB0aGVzZSB0b3BpY3MgYXJlIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgZm9yIHRoZSByZXN0Citsb29rIGF0IDxsaW51eC9wY2kuaD4sIGl0J3MgaG9wZWZ1bGx5IHdlbGwgY29tbWVudGVkLgorCitJZiB0aGUgUENJIHN1YnN5c3RlbSBpcyBub3QgY29uZmlndXJlZCAoQ09ORklHX1BDSSBpcyBub3Qgc2V0KSwgbW9zdCBvZgordGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cgYXJlIGRlZmluZWQgYXMgaW5saW5lIGZ1bmN0aW9ucyBlaXRoZXIgY29tcGxldGVseQorZW1wdHkgb3IganVzdCByZXR1cm5pbmcgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMgdG8gYXZvaWQgbG90cyBvZiBpZmRlZnMKK2luIHRoZSBkcml2ZXJzLgorCisKKzEuIE5ldy1zdHlsZSBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIG5ldy1zdHlsZSBkcml2ZXJzIGp1c3QgY2FsbCBwY2lfcmVnaXN0ZXJfZHJpdmVyIGR1cmluZyB0aGVpciBpbml0aWFsaXphdGlvbgord2l0aCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgZHJpdmVyIChzdHJ1Y3QgcGNpX2RyaXZlcikgd2hpY2gKK2NvbnRhaW5zOgorCisJbmFtZQkJTmFtZSBvZiB0aGUgZHJpdmVyCisJaWRfdGFibGUJUG9pbnRlciB0byB0YWJsZSBvZiBkZXZpY2UgSUQncyB0aGUgZHJpdmVyIGlzCisJCQlpbnRlcmVzdGVkIGluLiAgTW9zdCBkcml2ZXJzIHNob3VsZCBleHBvcnQgdGhpcworCQkJdGFibGUgdXNpbmcgTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksLi4uKS4KKwlwcm9iZQkJUG9pbnRlciB0byBhIHByb2JpbmcgZnVuY3Rpb24gd2hpY2ggZ2V0cyBjYWxsZWQgKGR1cmluZworCQkJZXhlY3V0aW9uIG9mIHBjaV9yZWdpc3Rlcl9kcml2ZXIgZm9yIGFscmVhZHkgZXhpc3RpbmcKKwkJCWRldmljZXMgb3IgbGF0ZXIgaWYgYSBuZXcgZGV2aWNlIGdldHMgaW5zZXJ0ZWQpIGZvciBhbGwKKwkJCVBDSSBkZXZpY2VzIHdoaWNoIG1hdGNoIHRoZSBJRCB0YWJsZSBhbmQgYXJlIG5vdCBoYW5kbGVkCisJCQlieSB0aGUgb3RoZXIgZHJpdmVycyB5ZXQuIFRoaXMgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgYQorCQkJcG9pbnRlciB0byB0aGUgcGNpX2RldiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBkZXZpY2UKKwkJCWFuZCBhbHNvIHdoaWNoIGVudHJ5IGluIHRoZSBJRCB0YWJsZSBkaWQgdGhlIGRldmljZQorCQkJbWF0Y2guIEl0IHJldHVybnMgemVybyB3aGVuIHRoZSBkcml2ZXIgaGFzIGFjY2VwdGVkIHRoZQorCQkJZGV2aWNlIG9yIGFuIGVycm9yIGNvZGUgKG5lZ2F0aXZlIG51bWJlcikgb3RoZXJ3aXNlLgorCQkJVGhpcyBmdW5jdGlvbiBhbHdheXMgZ2V0cyBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQsCisJCQlzbyBpdCBjYW4gc2xlZXAuCisJcmVtb3ZlCQlQb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYQorCQkJZGV2aWNlIGJlaW5nIGhhbmRsZWQgYnkgdGhpcyBkcml2ZXIgaXMgcmVtb3ZlZCAoZWl0aGVyCisJCQlkdXJpbmcgZGVyZWdpc3RyYXRpb24gb2YgdGhlIGRyaXZlciBvciB3aGVuIGl0J3MKKwkJCW1hbnVhbGx5IHB1bGxlZCBvdXQgb2YgYSBob3QtcGx1Z2dhYmxlIHNsb3QpLiBUaGlzCisJCQlmdW5jdGlvbiBhbHdheXMgZ2V0cyBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQsIHNvIGl0CisJCQljYW4gc2xlZXAuCisJc2F2ZV9zdGF0ZQlTYXZlIGEgZGV2aWNlJ3Mgc3RhdGUgYmVmb3JlIGl0J3Mgc3VzcGVuZC4KKwlzdXNwZW5kCQlQdXQgZGV2aWNlIGludG8gbG93IHBvd2VyIHN0YXRlLgorCXJlc3VtZQkJV2FrZSBkZXZpY2UgZnJvbSBsb3cgcG93ZXIgc3RhdGUuCisJZW5hYmxlX3dha2UJRW5hYmxlIGRldmljZSB0byBnZW5lcmF0ZSB3YWtlIGV2ZW50cyBmcm9tIGEgbG93IHBvd2VyCisJCQlzdGF0ZS4KKworCQkJKFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kudHh0IGZvciBkZXNjcmlwdGlvbnMKKwkJCW9mIFBDSSBQb3dlciBNYW5hZ2VtZW50IGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMpCisKK1RoZSBJRCB0YWJsZSBpcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlbmRpbmcgd2l0aCBhIGFsbC16ZXJvIGVudHJ5LgorRWFjaCBlbnRyeSBjb25zaXN0cyBvZjoKKworCXZlbmRvciwgZGV2aWNlCVZlbmRvciBhbmQgZGV2aWNlIElEIHRvIG1hdGNoIChvciBQQ0lfQU5ZX0lEKQorCXN1YnZlbmRvciwJU3Vic3lzdGVtIHZlbmRvciBhbmQgZGV2aWNlIElEIHRvIG1hdGNoIChvciBQQ0lfQU5ZX0lEKQorCXN1YmRldmljZQorCWNsYXNzLAkJRGV2aWNlIGNsYXNzIHRvIG1hdGNoLiBUaGUgY2xhc3NfbWFzayB0ZWxscyB3aGljaCBiaXRzCisJY2xhc3NfbWFzawlvZiB0aGUgY2xhc3MgYXJlIGhvbm9yZWQgZHVyaW5nIHRoZSBjb21wYXJpc29uLgorCWRyaXZlcl9kYXRhCURhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyLgorCitNb3N0IGRyaXZlcnMgZG9uJ3QgbmVlZCB0byB1c2UgdGhlIGRyaXZlcl9kYXRhIGZpZWxkLiAgQmVzdCBwcmFjdGljZQorZm9yIHVzZSBvZiBkcml2ZXJfZGF0YSBpcyB0byB1c2UgaXQgYXMgYW4gaW5kZXggaW50byBhIHN0YXRpYyBsaXN0IG9mCitlcXVpdmFsYW50IGRldmljZSB0eXBlcywgbm90IHRvIHVzZSBpdCBhcyBhIHBvaW50ZXIuCisKK0hhdmUgYSB0YWJsZSBlbnRyeSB7UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0KK3RvIGhhdmUgcHJvYmUoKSBjYWxsZWQgZm9yIGV2ZXJ5IFBDSSBkZXZpY2Uga25vd24gdG8gdGhlIHN5c3RlbS4KKworTmV3IFBDSSBJRHMgbWF5IGJlIGFkZGVkIHRvIGEgZGV2aWNlIGRyaXZlciBhdCBydW50aW1lIGJ5IHdyaXRpbmcKK3RvIHRoZSBmaWxlIC9zeXMvYnVzL3BjaS9kcml2ZXJzL3tkcml2ZXJ9L25ld19pZC4gIFdoZW4gYWRkZWQsIHRoZQorZHJpdmVyIHdpbGwgcHJvYmUgZm9yIGFsbCBkZXZpY2VzIGl0IGNhbiBzdXBwb3J0LgorCitlY2hvICJ2ZW5kb3IgZGV2aWNlIHN1YnZlbmRvciBzdWJkZXZpY2UgY2xhc3MgY2xhc3NfbWFzayBkcml2ZXJfZGF0YSIgPiBcCisgL3N5cy9idXMvcGNpL2RyaXZlcnMve2RyaXZlcn0vbmV3X2lkCit3aGVyZSBhbGwgZmllbGRzIGFyZSBwYXNzZWQgaW4gYXMgaGV4YWRlY2ltYWwgdmFsdWVzIChubyBsZWFkaW5nIDB4KS4KK1VzZXJzIG5lZWQgcGFzcyBvbmx5IGFzIG1hbnkgZmllbGRzIGFzIG5lY2Vzc2FyeTsgdmVuZG9yLCBkZXZpY2UsCitzdWJ2ZW5kb3IsIGFuZCBzdWJkZXZpY2UgZmllbGRzIGRlZmF1bHQgdG8gUENJX0FOWV9JRCAoRkZGRkZGRkYpLAorY2xhc3MgYW5kIGNsYXNzbWFzayBmaWVsZHMgZGVmYXVsdCB0byAwLCBhbmQgZHJpdmVyX2RhdGEgZGVmYXVsdHMgdG8KKzBVTC4gIERldmljZSBkcml2ZXJzIG11c3QgaW5pdGlhbGl6ZSB1c2VfZHJpdmVyX2RhdGEgaW4gdGhlIGR5bmlkcyBzdHJ1Y3QKK2luIHRoZWlyIHBjaV9kcml2ZXIgc3RydWN0IHByaW9yIHRvIGNhbGxpbmcgcGNpX3JlZ2lzdGVyX2RyaXZlciBpbiBvcmRlcgorZm9yIHRoZSBkcml2ZXJfZGF0YSBmaWVsZCB0byBnZXQgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIE90aGVyd2lzZSwgb25seSBhCiswIGlzIHBhc3NlZCBpbiB0aGF0IGZpZWxkLgorCitXaGVuIHRoZSBkcml2ZXIgZXhpdHMsIGl0IGp1c3QgY2FsbHMgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCkgYW5kIHRoZSBQQ0kgbGF5ZXIKK2F1dG9tYXRpY2FsbHkgY2FsbHMgdGhlIHJlbW92ZSBob29rIGZvciBhbGwgZGV2aWNlcyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIuCisKK1BsZWFzZSBtYXJrIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBmdW5jdGlvbnMgd2hlcmUgYXBwcm9wcmlhdGUKKyh0aGUgY29ycmVzcG9uZGluZyBtYWNyb3MgYXJlIGRlZmluZWQgaW4gPGxpbnV4L2luaXQuaD4pOgorCisJX19pbml0CQlJbml0aWFsaXphdGlvbiBjb2RlLiBUaHJvd24gYXdheSBhZnRlciB0aGUgZHJpdmVyCisJCQlpbml0aWFsaXplcy4KKwlfX2V4aXQJCUV4aXQgY29kZS4gSWdub3JlZCBmb3Igbm9uLW1vZHVsYXIgZHJpdmVycy4KKwlfX2RldmluaXQJRGV2aWNlIGluaXRpYWxpemF0aW9uIGNvZGUuIElkZW50aWNhbCB0byBfX2luaXQgaWYKKwkJCXRoZSBrZXJuZWwgaXMgbm90IGNvbXBpbGVkIHdpdGggQ09ORklHX0hPVFBMVUcsIG5vcm1hbAorCQkJZnVuY3Rpb24gb3RoZXJ3aXNlLgorCV9fZGV2ZXhpdAlUaGUgc2FtZSBmb3IgX19leGl0LgorCitUaXBzOgorCVRoZSBtb2R1bGVfaW5pdCgpL21vZHVsZV9leGl0KCkgZnVuY3Rpb25zIChhbmQgYWxsIGluaXRpYWxpemF0aW9uCisgICAgICAgIGZ1bmN0aW9ucyBjYWxsZWQgb25seSBmcm9tIHRoZXNlKSBzaG91bGQgYmUgbWFya2VkIF9faW5pdC9leGl0LgorCVRoZSBzdHJ1Y3QgcGNpX2RyaXZlciBzaG91bGRuJ3QgYmUgbWFya2VkIHdpdGggYW55IG9mIHRoZXNlIHRhZ3MuCisJVGhlIElEIHRhYmxlIGFycmF5IHNob3VsZCBiZSBtYXJrZWQgX19kZXZpbml0ZGF0YS4KKwlUaGUgcHJvYmUoKSBhbmQgcmVtb3ZlKCkgZnVuY3Rpb25zIChhbmQgYWxsIGluaXRpYWxpemF0aW9uCisJZnVuY3Rpb25zIGNhbGxlZCBvbmx5IGZyb20gdGhlc2UpIHNob3VsZCBiZSBtYXJrZWQgX19kZXZpbml0L2V4aXQuCisJSWYgeW91IGFyZSBzdXJlIHRoZSBkcml2ZXIgaXMgbm90IGEgaG90cGx1ZyBkcml2ZXIgdGhlbiB1c2Ugb25seSAKKwlfX2luaXQvZXhpdCBfX2luaXRkYXRhL2V4aXRkYXRhLgorCisgICAgICAgIFBvaW50ZXJzIHRvIGZ1bmN0aW9ucyBtYXJrZWQgYXMgX19kZXZleGl0IG11c3QgYmUgY3JlYXRlZCB1c2luZworICAgICAgICBfX2RldmV4aXRfcChmdW5jdGlvbl9uYW1lKS4gIFRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgbmFtZSBvciBOVUxMIGlmIHRoZSBfX2RldmV4aXQgZnVuY3Rpb24gd2lsbCBiZSBkaXNjYXJkZWQuCisKKworMi4gSG93IHRvIGZpbmQgUENJIGRldmljZXMgbWFudWFsbHkgKHRoZSBvbGQgc3R5bGUpCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1BDSSBkcml2ZXJzIG5vdCB1c2luZyB0aGUgcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGludGVyZmFjZSBzZWFyY2gKK2ZvciBQQ0kgZGV2aWNlcyBtYW51YWxseSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdHM6CisKK1NlYXJjaGluZyBieSB2ZW5kb3IgYW5kIGRldmljZSBJRDoKKworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCXdoaWxlIChkZXYgPSBwY2lfZ2V0X2RldmljZShWRU5ET1JfSUQsIERFVklDRV9JRCwgZGV2KSkKKwkJY29uZmlndXJlX2RldmljZShkZXYpOworCitTZWFyY2hpbmcgYnkgY2xhc3MgSUQgKGl0ZXJhdGUgaW4gYSBzaW1pbGFyIHdheSk6CisKKwlwY2lfZ2V0X2NsYXNzKENMQVNTX0lELCBkZXYpCisKK1NlYXJjaGluZyBieSBib3RoIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEOgorCisJcGNpX2dldF9zdWJzeXMoVkVORE9SX0lELCBERVZJQ0VfSUQsIFNVQlNZU19WRU5ET1JfSUQsIFNVQlNZU19ERVZJQ0VfSUQsIGRldikuCisKKyAgIFlvdSBjYW4gdXNlIHRoZSBjb25zdGFudCBQQ0lfQU5ZX0lEIGFzIGEgd2lsZGNhcmQgcmVwbGFjZW1lbnQgZm9yCitWRU5ET1JfSUQgb3IgREVWSUNFX0lELiAgVGhpcyBhbGxvd3Mgc2VhcmNoaW5nIGZvciBhbnkgZGV2aWNlIGZyb20gYQorc3BlY2lmaWMgdmVuZG9yLCBmb3IgZXhhbXBsZS4KKworICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBob3RwbHVnLXNhZmUuIFRoZXkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24KK3RoZSBwY2lfZGV2IHRoYXQgdGhleSByZXR1cm4uIFlvdSBtdXN0IGV2ZW50dWFsbHkgKHBvc3NpYmx5IGF0IG1vZHVsZSB1bmxvYWQpCitkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGVzZSBkZXZpY2VzIGJ5IGNhbGxpbmcgcGNpX2Rldl9wdXQoKS4KKworCiszLiBFbmFibGluZyBhbmQgZGlzYWJsaW5nIGRldmljZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICAgQmVmb3JlIHlvdSBkbyBhbnl0aGluZyB3aXRoIHRoZSBkZXZpY2UgeW91J3ZlIGZvdW5kLCB5b3UgbmVlZCB0byBlbmFibGUKK2l0IGJ5IGNhbGxpbmcgcGNpX2VuYWJsZV9kZXZpY2UoKSB3aGljaCBlbmFibGVzIEkvTyBhbmQgbWVtb3J5IHJlZ2lvbnMgb2YKK3RoZSBkZXZpY2UsIGFsbG9jYXRlcyBhbiBJUlEgaWYgbmVjZXNzYXJ5LCBhc3NpZ25zIG1pc3NpbmcgcmVzb3VyY2VzIGlmCituZWVkZWQgYW5kIHdha2VzIHVwIHRoZSBkZXZpY2UgaWYgaXQgd2FzIGluIHN1c3BlbmRlZCBzdGF0ZS4gUGxlYXNlIG5vdGUKK3RoYXQgdGhpcyBmdW5jdGlvbiBjYW4gZmFpbC4KKworICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBkZXZpY2UgaW4gYnVzIG1hc3RlcmluZyBtb2RlLCBjYWxsIHBjaV9zZXRfbWFzdGVyKCkKK3doaWNoIGVuYWJsZXMgdGhlIGJ1cyBtYXN0ZXIgYml0IGluIFBDSV9DT01NQU5EIHJlZ2lzdGVyIGFuZCBhbHNvIGZpeGVzCit0aGUgbGF0ZW5jeSB0aW1lciB2YWx1ZSBpZiBpdCdzIHNldCB0byBzb21ldGhpbmcgYm9ndXMgYnkgdGhlIEJJT1MuCisKKyAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgUENJIE1lbW9yeS1Xcml0ZS1JbnZhbGlkYXRlIHRyYW5zYWN0aW9uLAorY2FsbCBwY2lfc2V0X213aSgpLiAgVGhpcyBlbmFibGVzIHRoZSBQQ0lfQ09NTUFORCBiaXQgZm9yIE1lbS1Xci1JbnZhbAorYW5kIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgaXMgc2V0IGNvcnJlY3RseS4KK01ha2Ugc3VyZSB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHBjaV9zZXRfbXdpKCksIG5vdCBhbGwgYXJjaGl0ZWN0dXJlcworbWF5IHN1cHBvcnQgTWVtb3J5LVdyaXRlLUludmFsaWRhdGUuCisKKyAgIElmIHlvdXIgZHJpdmVyIGRlY2lkZXMgdG8gc3RvcCB1c2luZyB0aGUgZGV2aWNlIChlLmcuLCB0aGVyZSB3YXMgYW4KK2Vycm9yIHdoaWxlIHNldHRpbmcgaXQgdXAgb3IgdGhlIGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQpLCBpdAorc2hvdWxkIGNhbGwgcGNpX2Rpc2FibGVfZGV2aWNlKCkgdG8gZGVhbGxvY2F0ZSBhbnkgSVJRIHJlc291cmNlcywgZGlzYWJsZQorUENJIGJ1cy1tYXN0ZXJpbmcsIGV0Yy4gIFlvdSBzaG91bGQgbm90IGRvIGFueXRoaW5nIHdpdGggdGhlIGRldmljZSBhZnRlcgorY2FsbGluZyBwY2lfZGlzYWJsZV9kZXZpY2UoKS4KKworNC4gSG93IHRvIGFjY2VzcyBQQ0kgY29uZmlnIHNwYWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgIFlvdSBjYW4gdXNlIHBjaV8ocmVhZHx3cml0ZSlfY29uZmlnXyhieXRlfHdvcmR8ZHdvcmQpIHRvIGFjY2VzcyB0aGUgY29uZmlnCitzcGFjZSBvZiBhIGRldmljZSByZXByZXNlbnRlZCBieSBzdHJ1Y3QgcGNpX2RldiAqLiBBbGwgdGhlc2UgZnVuY3Rpb25zIHJldHVybiAwCit3aGVuIHN1Y2Nlc3NmdWwgb3IgYW4gZXJyb3IgY29kZSAoUENJQklPU18uLi4pIHdoaWNoIGNhbiBiZSB0cmFuc2xhdGVkIHRvIGEgdGV4dAorc3RyaW5nIGJ5IHBjaWJpb3Nfc3RyZXJyb3IuIE1vc3QgZHJpdmVycyBleHBlY3QgdGhhdCBhY2Nlc3NlcyB0byB2YWxpZCBQQ0kKK2RldmljZXMgZG9uJ3QgZmFpbC4KKworICAgSWYgeW91IGRvbid0IGhhdmUgYSBzdHJ1Y3QgcGNpX2RldiBhdmFpbGFibGUsIHlvdSBjYW4gY2FsbAorcGNpX2J1c18ocmVhZHx3cml0ZSlfY29uZmlnXyhieXRlfHdvcmR8ZHdvcmQpIHRvIGFjY2VzcyBhIGdpdmVuIGRldmljZQorYW5kIGZ1bmN0aW9uIG9uIHRoYXQgYnVzLgorCisgICBJZiB5b3UgYWNjZXNzIGZpZWxkcyBpbiB0aGUgc3RhbmRhcmQgcG9ydGlvbiBvZiB0aGUgY29uZmlnIGhlYWRlciwgcGxlYXNlCit1c2Ugc3ltYm9saWMgbmFtZXMgb2YgbG9jYXRpb25zIGFuZCBiaXRzIGRlY2xhcmVkIGluIDxsaW51eC9wY2kuaD4uCisKKyAgIElmIHlvdSBuZWVkIHRvIGFjY2VzcyBFeHRlbmRlZCBQQ0kgQ2FwYWJpbGl0eSByZWdpc3RlcnMsIGp1c3QgY2FsbAorcGNpX2ZpbmRfY2FwYWJpbGl0eSgpIGZvciB0aGUgcGFydGljdWxhciBjYXBhYmlsaXR5IGFuZCBpdCB3aWxsIGZpbmQgdGhlCitjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJsb2NrIGZvciB5b3UuCisKKworNS4gQWRkcmVzc2VzIGFuZCBpbnRlcnJ1cHRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgIE1lbW9yeSBhbmQgcG9ydCBhZGRyZXNzZXMgYW5kIGludGVycnVwdCBudW1iZXJzIHNob3VsZCBOT1QgYmUgcmVhZCBmcm9tIHRoZQorY29uZmlnIHNwYWNlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdmFsdWVzIGluIHRoZSBwY2lfZGV2IHN0cnVjdHVyZSBhcyB0aGV5IG1pZ2h0CitoYXZlIGJlZW4gcmVtYXBwZWQgYnkgdGhlIGtlcm5lbC4KKworICAgU2VlIERvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQgZm9yIGhvdyB0byBhY2Nlc3MgZGV2aWNlIG1lbW9yeS4KKworICAgWW91IHN0aWxsIG5lZWQgdG8gY2FsbCByZXF1ZXN0X3JlZ2lvbigpIGZvciBJL08gcmVnaW9ucyBhbmQKK3JlcXVlc3RfbWVtX3JlZ2lvbigpIGZvciBtZW1vcnkgcmVnaW9ucyB0byBtYWtlIHN1cmUgbm9ib2R5IGVsc2UgaXMgdXNpbmcgdGhlCitzYW1lIGRldmljZS4KKworICAgQWxsIGludGVycnVwdCBoYW5kbGVycyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIFNBX1NISVJRIGFuZCB1c2UgdGhlIGRldmlkCit0byBtYXAgSVJRcyB0byBkZXZpY2VzIChyZW1lbWJlciB0aGF0IGFsbCBQQ0kgaW50ZXJydXB0cyBhcmUgc2hhcmVkKS4KKworCis2LiBPdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorcGNpX2ZpbmRfc2xvdCgpCQkJRmluZCBwY2lfZGV2IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYnVzIGFuZAorCQkJCXNsb3QgbnVtYmVycy4KK3BjaV9zZXRfcG93ZXJfc3RhdGUoKQkJU2V0IFBDSSBQb3dlciBNYW5hZ2VtZW50IHN0YXRlICgwPUQwIC4uLiAzPUQzKQorcGNpX2ZpbmRfY2FwYWJpbGl0eSgpCQlGaW5kIHNwZWNpZmllZCBjYXBhYmlsaXR5IGluIGRldmljZSdzIGNhcGFiaWxpdHkKKwkJCQlsaXN0LgorcGNpX21vZHVsZV9pbml0KCkJCUlubGluZSBoZWxwZXIgZnVuY3Rpb24gZm9yIGVuc3VyaW5nIGNvcnJlY3QKKwkJCQlwY2lfZHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy4KK3BjaV9yZXNvdXJjZV9zdGFydCgpCQlSZXR1cm5zIGJ1cyBzdGFydCBhZGRyZXNzIGZvciBhIGdpdmVuIFBDSSByZWdpb24KK3BjaV9yZXNvdXJjZV9lbmQoKQkJUmV0dXJucyBidXMgZW5kIGFkZHJlc3MgZm9yIGEgZ2l2ZW4gUENJIHJlZ2lvbgorcGNpX3Jlc291cmNlX2xlbigpCQlSZXR1cm5zIHRoZSBieXRlIGxlbmd0aCBvZiBhIFBDSSByZWdpb24KK3BjaV9zZXRfZHJ2ZGF0YSgpCQlTZXQgcHJpdmF0ZSBkcml2ZXIgZGF0YSBwb2ludGVyIGZvciBhIHBjaV9kZXYKK3BjaV9nZXRfZHJ2ZGF0YSgpCQlSZXR1cm4gcHJpdmF0ZSBkcml2ZXIgZGF0YSBwb2ludGVyIGZvciBhIHBjaV9kZXYKK3BjaV9zZXRfbXdpKCkJCQlFbmFibGUgTWVtb3J5LVdyaXRlLUludmFsaWRhdGUgdHJhbnNhY3Rpb25zLgorcGNpX2NsZWFyX213aSgpCQkJRGlzYWJsZSBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZSB0cmFuc2FjdGlvbnMuCisKKworNy4gTWlzY2VsbGFuZW91cyBoaW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorV2hlbiBkaXNwbGF5aW5nIFBDSSBzbG90IG5hbWVzIHRvIHRoZSB1c2VyIChmb3IgZXhhbXBsZSB3aGVuIGEgZHJpdmVyIHdhbnRzCit0byB0ZWxsIHRoZSB1c2VyIHdoYXQgY2FyZCBoYXMgaXQgZm91bmQpLCBwbGVhc2UgdXNlIHBjaV9uYW1lKHBjaV9kZXYpCitmb3IgdGhpcyBwdXJwb3NlLgorCitBbHdheXMgcmVmZXIgdG8gdGhlIFBDSSBkZXZpY2VzIGJ5IGEgcG9pbnRlciB0byB0aGUgcGNpX2RldiBzdHJ1Y3R1cmUuCitBbGwgUENJIGxheWVyIGZ1bmN0aW9ucyB1c2UgdGhpcyBpZGVudGlmaWNhdGlvbiBhbmQgaXQncyB0aGUgb25seQorcmVhc29uYWJsZSBvbmUuIERvbid0IHVzZSBidXMvc2xvdC9mdW5jdGlvbiBudW1iZXJzIGV4Y2VwdCBmb3IgdmVyeQorc3BlY2lhbCBwdXJwb3NlcyAtLSBvbiBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgcHJpbWFyeSBidXNlcyB0aGVpciBzZW1hbnRpY3MKK2NhbiBiZSBwcmV0dHkgY29tcGxleC4KKworSWYgeW91J3JlIGdvaW5nIHRvIHVzZSBQQ0kgYnVzIG1hc3RlcmluZyBETUEsIHRha2UgYSBsb29rIGF0CitEb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dC4KKworRG9uJ3QgdHJ5IHRvIHR1cm4gb24gRmFzdCBCYWNrIHRvIEJhY2sgd3JpdGVzIGluIHlvdXIgZHJpdmVyLiAgQWxsIGRldmljZXMKK29uIHRoZSBidXMgbmVlZCB0byBiZSBjYXBhYmxlIG9mIGRvaW5nIGl0LCBzbyB0aGlzIGlzIHNvbWV0aGluZyB3aGljaCBuZWVkcwordG8gYmUgaGFuZGxlZCBieSBwbGF0Zm9ybSBhbmQgZ2VuZXJpYyBjb2RlLCBub3QgaW5kaXZpZHVhbCBkcml2ZXJzLgorCisKKzguIE9ic29sZXRlIGZ1bmN0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGVyZSBhcmUgc2V2ZXJhbCBmdW5jdGlvbnMgd2hpY2ggeW91IG1pZ2h0IGNvbWUgYWNyb3NzIHdoZW4gdHJ5aW5nIHRvCitwb3J0IGFuIG9sZCBkcml2ZXIgdG8gdGhlIG5ldyBQQ0kgaW50ZXJmYWNlLiAgVGhleSBhcmUgbm8gbG9uZ2VyIHByZXNlbnQKK2luIHRoZSBrZXJuZWwgYXMgdGhleSBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIGhvdHBsdWcgb3IgUENJIGRvbWFpbnMgb3IKK2hhdmluZyBzYW5lIGxvY2tpbmcuCisKK3BjaWJpb3NfcHJlc2VudCgpIGFuZAkJU2luY2UgYWdlcywgeW91IGRvbid0IG5lZWQgdG8gdGVzdCBwcmVzZW5jZQorcGNpX3ByZXNlbnQoKQkJCW9mIFBDSSBzdWJzeXN0ZW0gd2hlbiB0cnlpbmcgdG8gdGFsayB0byBpdC4KKwkJCQlJZiBpdCdzIG5vdCB0aGVyZSwgdGhlIGxpc3Qgb2YgUENJIGRldmljZXMKKwkJCQlpcyBlbXB0eSBhbmQgYWxsIGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGZvcgorCQkJCWRldmljZXMganVzdCByZXR1cm4gTlVMTC4KK3BjaWJpb3NfKHJlYWR8d3JpdGUpXyoJCVN1cGVyc2VkZWQgYnkgdGhlaXIgcGNpXyhyZWFkfHdyaXRlKV8qCisJCQkJY291bnRlcnBhcnRzLgorcGNpYmlvc19maW5kXyoJCQlTdXBlcnNlZGVkIGJ5IHRoZWlyIHBjaV9nZXRfKiBjb3VudGVycGFydHMuCitwY2lfZm9yX2VhY2hfZGV2KCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9kZXZpY2UoKQorcGNpX2Zvcl9lYWNoX2Rldl9yZXZlcnNlKCkJU3VwZXJzZWRlZCBieSBwY2lfZmluZF9kZXZpY2VfcmV2ZXJzZSgpCitwY2lfZm9yX2VhY2hfYnVzKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2ZpbmRfbmV4dF9idXMoKQorcGNpX2ZpbmRfZGV2aWNlKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9kZXZpY2UoKQorcGNpX2ZpbmRfc3Vic3lzKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9zdWJzeXMoKQorcGNpYmlvc19maW5kX2NsYXNzKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9jbGFzcygpCitwY2lfZmluZF9jbGFzcygpCQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfY2xhc3MoKQorcGNpXyhyZWFkfHdyaXRlKV8qX25vZGV2KCkJU3VwZXJzZWRlZCBieSBwY2lfYnVzXyhyZWFkfHdyaXRlKV8qKCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9wbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2M2FlMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG0udHh0CkBAIC0wLDAgKzEsMjUxIEBACisgICAgICAgICAgICAgICBMaW51eCBQb3dlciBNYW5hZ2VtZW50IFN1cHBvcnQKKworVGhpcyBkb2N1bWVudCBicmllZmx5IGRlc2NyaWJlcyBob3cgdG8gdXNlIHBvd2VyIG1hbmFnZW1lbnQgd2l0aCB5b3VyCitMaW51eCBzeXN0ZW0gYW5kIGhvdyB0byBhZGQgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0IHRvIExpbnV4IGRyaXZlcnMuCisKK0FQTSBvciBBQ1BJPworLS0tLS0tLS0tLS0tCitJZiB5b3UgaGF2ZSBhIHJlbGF0aXZlbHkgcmVjZW50IHg4NiBtb2JpbGUsIGRlc2t0b3AsIG9yIHNlcnZlciBzeXN0ZW0sCitvZGRzIGFyZSBpdCBzdXBwb3J0cyBlaXRoZXIgQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCAoQVBNKSBvcgorQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlIChBQ1BJKS4gIEFDUEkgaXMgdGhlIG5ld2VyCitvZiB0aGUgdHdvIHRlY2hub2xvZ2llcyBhbmQgcHV0cyBwb3dlciBtYW5hZ2VtZW50IGluIHRoZSBoYW5kcyBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0sIGFsbG93aW5nIGZvciBtb3JlIGludGVsbGlnZW50IHBvd2VyIG1hbmFnZW1lbnQgdGhhbgoraXMgcG9zc2libGUgd2l0aCBCSU9TIGNvbnRyb2xsZWQgQVBNLgorCitUaGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoLCBpZiBlaXRoZXIsIHlvdXIgc3lzdGVtIHN1cHBvcnRzIGlzIHRvCitidWlsZCBhIGtlcm5lbCB3aXRoIGJvdGggQUNQSSBhbmQgQVBNIGVuYWJsZWQgKGFzIG9mIDIuMy54IEFDUEkgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCkuICBJZiBhIHdvcmtpbmcgQUNQSSBpbXBsZW1lbnRhdGlvbiBpcyBmb3VuZCwgdGhlCitBQ1BJIGRyaXZlciB3aWxsIG92ZXJyaWRlIGFuZCBkaXNhYmxlIEFQTSwgb3RoZXJ3aXNlIHRoZSBBUE0gZHJpdmVyCit3aWxsIGJlIHVzZWQuCisKK05vIHNvcnJ5LCB5b3UgY2FuIG5vdCBoYXZlIGJvdGggQUNQSSBhbmQgQVBNIGVuYWJsZWQgYW5kIHJ1bm5pbmcgYXQKK29uY2UuICBTb21lIHBlb3BsZSB3aXRoIGJyb2tlbiBBQ1BJIG9yIGJyb2tlbiBBUE0gaW1wbGVtZW50YXRpb25zCit3b3VsZCBsaWtlIHRvIHVzZSBib3RoIHRvIGdldCBhIGZ1bGwgc2V0IG9mIHdvcmtpbmcgZmVhdHVyZXMsIGJ1dCB5b3UKK3NpbXBseSBjYW4gbm90IG1peCBhbmQgbWF0Y2ggdGhlIHR3by4gIE9ubHkgb25lIHBvd2VyIG1hbmFnZW1lbnQKK2ludGVyZmFjZSBjYW4gYmUgaW4gY29udHJvbCBvZiB0aGUgbWFjaGluZSBhdCBvbmNlLiAgVGhpbmsgYWJvdXQgaXQuLgorCitVc2VyLXNwYWNlIERhZW1vbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorQm90aCBBUE0gYW5kIEFDUEkgcmVseSBvbiB1c2VyLXNwYWNlIGRhZW1vbnMsIGFwbWQgYW5kIGFjcGlkCityZXNwZWN0aXZlbHksIHRvIGJlIGNvbXBsZXRlbHkgZnVuY3Rpb25hbC4gIE9idGFpbiBib3RoIG9mIHRoZXNlCitkYWVtb25zIGZyb20geW91ciBMaW51eCBkaXN0cmlidXRpb24gb3IgZnJvbSB0aGUgSW50ZXJuZXQgKHNlZSBiZWxvdykKK2FuZCBiZSBzdXJlIHRoYXQgdGhleSBhcmUgc3RhcnRlZCBzb21ldGltZSBpbiB0aGUgc3lzdGVtIGJvb3QgcHJvY2Vzcy4KK0dvIGFoZWFkIGFuZCBzdGFydCBib3RoLiAgSWYgQUNQSSBvciBBUE0gaXMgbm90IGF2YWlsYWJsZSBvbiB5b3VyCitzeXN0ZW0gdGhlIGFzc29jaWF0ZWQgZGFlbW9uIHdpbGwgZXhpdCBncmFjZWZ1bGx5LgorCisgIGFwbWQ6ICAgaHR0cDovL3dvcmxkdmlzaW9ucy5jYS9+YXBlbndhcnIvYXBtZC8KKyAgYWNwaWQ6ICBodHRwOi8vYWNwaWQuc2YubmV0LworCitEcml2ZXIgSW50ZXJmYWNlIC0tIE9CU09MRVRFLCBETyBOT1QgVVNFIQorLS0tLS0tLS0tLS0tLS0tLSoqKioqKioqKioqKioqKioqKioqKioqKioKK0lmIHlvdSBhcmUgd3JpdGluZyBhIG5ldyBkcml2ZXIgb3IgbWFpbnRhaW5pbmcgYW4gb2xkIGRyaXZlciwgaXQKK3Nob3VsZCBpbmNsdWRlIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4gIFdpdGhvdXQgcG93ZXIgbWFuYWdlbWVudAorc3VwcG9ydCwgYSBzaW5nbGUgZHJpdmVyIG1heSBwcmV2ZW50IGEgc3lzdGVtIHdpdGggcG93ZXIgbWFuYWdlbWVudAorY2FwYWJpbGl0aWVzIGZyb20gZXZlciBiZWluZyBhYmxlIHRvIHN1c3BlbmQgKHNhZmVseSkuCisKK092ZXJ2aWV3OgorMSkgUmVnaXN0ZXIgZWFjaCBpbnN0YW5jZSBvZiBhIGRldmljZSB3aXRoICJwbV9yZWdpc3RlciIKKzIpIENhbGwgInBtX2FjY2VzcyIgYmVmb3JlIGFjY2Vzc2luZyB0aGUgaGFyZHdhcmUuCisgICAodGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBoYXJkd2FyZSBpcyBhd2FrZSBhbmQgcmVhZHkpCiszKSBZb3VyICJwbV9jYWxsYmFjayIgaXMgY2FsbGVkIGJlZm9yZSBnb2luZyBpbnRvIGEKKyAgIHN1c3BlbmQgc3RhdGUgKEFDUEkgRDEtRDMpIG9yIGFmdGVyIHJlc3VtaW5nIChBQ1BJIEQwKQorICAgZnJvbSBhIHN1c3BlbmQuCis0KSBDYWxsICJwbV9kZXZfaWRsZSIgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBiZWluZyB1c2VkCisgICAob3B0aW9uYWwgYnV0IHdpbGwgaW1wcm92ZSBkZXZpY2UgaWRsZSBkZXRlY3Rpb24pCis1KSBXaGVuIHVubG9hZGVkLCB1bnJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCAicG1fdW5yZWdpc3RlciIKKworLyoKKyAqIERlc2NyaXB0aW9uOiBSZWdpc3RlciBhIGRldmljZSB3aXRoIHRoZSBwb3dlci1tYW5hZ2VtZW50IHN1YnN5c3RlbQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIHR5cGUgLSBkZXZpY2UgdHlwZSAoUENJIGRldmljZSwgc3lzdGVtIGRldmljZSwgLi4uKQorICogICBpZCAtIGluc3RhbmNlIG51bWJlciBvciB1bmlxdWUgaWRlbnRpZmllcgorICogICBjYmFjayAtIHJlcXVlc3QgaGFuZGxlciBjYWxsYmFjayAoc3VzcGVuZCwgcmVzdW1lLCAuLi4pCisgKgorICogUmV0dXJuczogUmVnaXN0ZXJlZCBQTSBkZXZpY2Ugb3IgTlVMTCBvbiBlcnJvcgorICoKKyAqIEV4YW1wbGVzOgorICogICBkZXYgPSBwbV9yZWdpc3RlcihQTV9TWVNfREVWLCBQTV9TWVNfVkdBLCB2Z2FfY2FsbGJhY2spOworICoKKyAqICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBwY2lfZmluZF9kZXYoLi4uKTsKKyAqICAgZGV2ID0gcG1fcmVnaXN0ZXIoUE1fUENJX0RFViwgUE1fUENJX0lEKHBjaV9kZXYpLCBjYWxsYmFjayk7CisgKi8KK3N0cnVjdCBwbV9kZXYgKnBtX3JlZ2lzdGVyKHBtX2Rldl90IHR5cGUsIHVuc2lnbmVkIGxvbmcgaWQsIHBtX2NhbGxiYWNrIGNiYWNrKTsKKworLyoKKyAqIERlc2NyaXB0aW9uOiBVbnJlZ2lzdGVyIGEgZGV2aWNlIHdpdGggdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtCisgKgorICogUGFyYW1ldGVyczoKKyAqICAgZGV2IC0gUE0gZGV2aWNlIHByZXZpb3VzbHkgcmV0dXJuZWQgZnJvbSBwbV9yZWdpc3RlcgorICovCit2b2lkIHBtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KTsKKworLyoKKyAqIERlc2NyaXB0aW9uOiBVbnJlZ2lzdGVyIGFsbCBkZXZpY2VzIHdpdGggYSBtYXRjaGluZyBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIGNiYWNrIC0gcHJldmlvdXNseSByZWdpc3RlcmVkIHJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBOb3RlczogUHJvdmlkZWQgZm9yIGVhc2llciBwb3J0aW5nIGZyb20gb2xkIEFQTSBpbnRlcmZhY2UKKyAqLwordm9pZCBwbV91bnJlZ2lzdGVyX2FsbChwbV9jYWxsYmFjayBjYmFjayk7CisKKy8qCisgKiBQb3dlciBtYW5hZ2VtZW50IHJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICBkZXYgLSBQTSBkZXZpY2UgcHJldmlvdXNseSByZXR1cm5lZCBmcm9tIHBtX3JlZ2lzdGVyCisgKiAgIHJxc3QgLSByZXF1ZXN0IHR5cGUKKyAqICAgZGF0YSAtIGRhdGEsIGlmIGFueSwgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0CisgKgorICogUmV0dXJuczogMCBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsCisgKiAgICAgICAgICBFSU5WQUwgaWYgdGhlIHJlcXVlc3QgaXMgbm90IHN1cHBvcnRlZAorICogICAgICAgICAgRUJVU1kgaWYgdGhlIGRldmljZSBpcyBub3cgYnVzeSBhbmQgY2FuIG5vdCBoYW5kbGUgdGhlIHJlcXVlc3QKKyAqICAgICAgICAgIEVOT01FTSBpZiB0aGUgZGV2aWNlIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0IGR1ZSB0byBtZW1vcnkKKyAqICAgICAgICAgIAorICogRGV0YWlsczogVGhlIGRldmljZSByZXF1ZXN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUKKyAqICAgICAgICAgIGRldmljZS9zeXN0ZW0gZW50ZXJzIGEgc3VzcGVuZCBzdGF0ZSAoQUNQSSBEMS1EMykgb3IKKyAqICAgICAgICAgIG9yIGFmdGVyIHRoZSBkZXZpY2Uvc3lzdGVtIHJlc3VtZXMgZnJvbSBzdXNwZW5kIChBQ1BJIEQwKS4KKyAqICAgICAgICAgIEZvciBQTV9TVVNQRU5ELCB0aGUgQUNQSSBELXN0YXRlIGJlaW5nIGVudGVyZWQgaXMgcGFzc2VkCisgKiAgICAgICAgICBhcyB0aGUgImRhdGEiIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjay4gIFRoZSBkZXZpY2UKKyAqICAgICAgICAgIGRyaXZlciBzaG91bGQgc2F2ZSAoUE1fU1VTUEVORCkgb3IgcmVzdG9yZSAoUE1fUkVTVU1FKQorICogICAgICAgICAgZGV2aWNlIGNvbnRleHQgd2hlbiB0aGUgcmVxdWVzdCBjYWxsYmFjayBpcyBjYWxsZWQuCisgKgorICogICAgICAgICAgT25jZSBhIGRyaXZlciByZXR1cm5zIDAgKHN1Y2Nlc3MpIGZyb20gYSBzdXNwZW5kCisgKiAgICAgICAgICByZXF1ZXN0LCBpdCBzaG91bGQgbm90IHByb2Nlc3MgYW55IGZ1cnRoZXIgcmVxdWVzdHMgb3IKKyAqICAgICAgICAgIGFjY2VzcyB0aGUgZGV2aWNlIGhhcmR3YXJlIHVudGlsIGEgY2FsbCB0byAicG1fYWNjZXNzIiBpcyBtYWRlLgorICovCit0eXBlZGVmIGludCAoKnBtX2NhbGxiYWNrKShzdHJ1Y3QgcG1fZGV2ICpkZXYsIHBtX3JlcXVlc3RfdCBycXN0LCB2b2lkICpkYXRhKTsKKworRHJpdmVyIERldGFpbHMKKy0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIGp1c3QgYSBxdWljayBRJkEgYXMgYSBzdG9wZ2FwIHVudGlsIGEgcmVhbCBkcml2ZXIgd3JpdGVycycKK3Bvd2VyIG1hbmFnZW1lbnQgZ3VpZGUgaXMgYXZhaWxhYmxlLgorCitROiBXaGVuIGlzIGEgZGV2aWNlIHN1c3BlbmRlZD8KKworRGV2aWNlcyBjYW4gYmUgc3VzcGVuZGVkIGJhc2VkIG9uIGRpcmVjdCB1c2VyIHJlcXVlc3QgKGVnLiBsYXB0b3AgbGlkCitjbG9zZXMpLCBzeXN0ZW0gcG93ZXIgcG9saWN5IChlZy4gIHNsZWVwIGFmdGVyIDMwIG1pbnV0ZXMgb2YgY29uc29sZQoraW5hY3Rpdml0eSksIG9yIGRldmljZSBwb3dlciBwb2xpY3kgKGVnLiBwb3dlciBkb3duIGRldmljZSBhZnRlciA1CittaW51dGVzIG9mIGluYWN0aXZpdHkpCisKK1E6IE11c3QgYSBkcml2ZXIgaG9ub3IgYSBzdXNwZW5kIHJlcXVlc3Q/CisKK05vLCBhIGRyaXZlciBjYW4gcmV0dXJuIC1FQlVTWSBmcm9tIGEgc3VzcGVuZCByZXF1ZXN0IGFuZCB0aGlzCit3aWxsIHN0b3AgdGhlIHN5c3RlbSBmcm9tIHN1c3BlbmRpbmcuICBXaGVuIGEgc3VzcGVuZCByZXF1ZXN0CitmYWlscywgYWxsIHN1c3BlbmRlZCBkZXZpY2VzIGFyZSByZXN1bWVkIGFuZCB0aGUgc3lzdGVtIGNvbnRpbnVlcwordG8gcnVuLiAgU3VzcGVuZCBjYW4gYmUgcmV0cmllZCBhdCBhIGxhdGVyIHRpbWUuCisKK1E6IENhbiB0aGUgZHJpdmVyIGJsb2NrIHN1c3BlbmQvcmVzdW1lIHJlcXVlc3RzPworCitZZXMsIGEgZHJpdmVyIGNhbiBkZWxheSBpdHMgcmV0dXJuIGZyb20gYSBzdXNwZW5kIG9yIHJlc3VtZQorcmVxdWVzdCB1bnRpbCB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGhhbmRsZSByZXF1ZXN0cy4gIEl0CitpcyBhZHZhbnRhZ2VvdXMgdG8gcmV0dXJuIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgZnJvbSBhCityZXF1ZXN0IGFzIHN1c3BlbmQvcmVzdW1lIGFyZSBkb25lIHNlcmlhbGx5LgorCitROiBXaGF0IGNvbnRleHQgaXMgYSBzdXNwZW5kL3Jlc3VtZSBpbml0aWF0ZWQgZnJvbT8KKworQSBzdXNwZW5kIG9yIHJlc3VtZSBpcyBpbml0aWF0ZWQgZnJvbSBhIGtlcm5lbCB0aHJlYWQgY29udGV4dC4KK0l0IGlzIHNhZmUgdG8gYmxvY2ssIGFsbG9jYXRlIG1lbW9yeSwgaW5pdGlhdGUgcmVxdWVzdHMKK29yIGFueXRoaW5nIGVsc2UgeW91IGNhbiBkbyB3aXRoaW4gdGhlIGtlcm5lbC4KKworUTogV2lsbCByZXF1ZXN0cyBjb250aW51ZSB0byBhcnJpdmUgYWZ0ZXIgYSBzdXNwZW5kPworCitQb3NzaWJseS4gIEl0IGlzIHRoZSBkcml2ZXIncyByZXNwb25zaWJpbGl0eSB0byBxdWV1ZSgqKSwKK2ZhaWwsIG9yIGRyb3AgYW55IHJlcXVlc3RzIHRoYXQgYXJyaXZlIGFmdGVyIHJldHVybmluZworc3VjY2VzcyB0byBhIHN1c3BlbmQgcmVxdWVzdC4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZQorZHJpdmVyIG5vdCBhY2Nlc3MgaXRzIGRldmljZSB1bnRpbCBhZnRlciBpdCByZWNlaXZlcworYSByZXN1bWUgcmVxdWVzdCBhcyB0aGUgZGV2aWNlJ3MgYnVzIG1heSBubyBsb25nZXIKK2JlIGFjdGl2ZS4KKworKCopIElmIGEgZHJpdmVyIHF1ZXVlcyByZXF1ZXN0cyBmb3IgcHJvY2Vzc2luZyBhZnRlcgorICAgIHJlc3VtZSBiZSBhd2FyZSB0aGF0IHRoZSBkZXZpY2UsIG5ldHdvcmssIGV0Yy4KKyAgICBtaWdodCBiZSBpbiBhIGRpZmZlcmVudCBzdGF0ZSB0aGFuIGF0IHN1c3BlbmQgdGltZS4KKyAgICBJdCdzIHByb2JhYmx5IGJldHRlciB0byBkcm9wIHJlcXVlc3RzIHVubGVzcworICAgIHRoZSBkcml2ZXIgaXMgYSBzdG9yYWdlIGRldmljZS4KKworUTogRG8gSSBoYXZlIHRvIG1hbmFnZSBidXMtc3BlY2lmaWMgcG93ZXIgbWFuYWdlbWVudCByZWdpc3RlcnMKKworTm8uICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGJ1cyBkcml2ZXIgdG8gbWFuYWdlCitQQ0ksIFVTQiwgZXRjLiBwb3dlciBtYW5hZ2VtZW50IHJlZ2lzdGVycy4gIFRoZSBidXMgZHJpdmVyCitvciB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2lsbCBhbHNvIGVuYWJsZSBhbnkKK3dha2Utb24gZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBkZXZpY2UgaGFzLgorCitROiBTbywgcmVhbGx5LCB3aGF0IGRvIEkgbmVlZCB0byBkbyB0byBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lPworCitZb3UgbmVlZCB0byBzYXZlIGFueSBkZXZpY2UgY29udGV4dCB0aGF0IHdvdWxkCitiZSBsb3N0IGlmIHRoZSBkZXZpY2Ugd2FzIHBvd2VyZWQgb2ZmIGFuZCB0aGVuIHJlc3RvcmUKK2l0IGF0IHJlc3VtZSB0aW1lLiAgV2hlbiBBQ1BJIGlzIGFjdGl2ZSwgdGhlcmUgYXJlCit0aHJlZSBsZXZlbHMgb2YgZGV2aWNlIHN1c3BlbmQgc3RhdGVzOyBEMSwgRDIsIGFuZCBEMy4KKyhUaGUgc3VzcGVuZCBzdGF0ZSBpcyBwYXNzZWQgYXMgdGhlICJkYXRhIiBhcmd1bWVudAordG8gdGhlIGRldmljZSBjYWxsYmFjay4pICBXaXRoIEQzLCB0aGUgZGV2aWNlIGlzIHBvd2VyZWQKK29mZiBhbmQgbG9zZXMgYWxsIGNvbnRleHQsIEQxIGFuZCBEMiBhcmUgc2hhbGxvd2VyIHBvd2VyCitzdGF0ZXMgYW5kIHJlcXVpcmUgbGVzcyBkZXZpY2UgY29udGV4dCB0byBiZSBzYXZlZC4gIFRvCitwbGF5IGl0IHNhZmUsIGp1c3Qgc2F2ZSBldmVyeXRoaW5nIGF0IHN1c3BlbmQgYW5kIHJlc3RvcmUKK2V2ZXJ5dGhpbmcgYXQgcmVzdW1lLgorCitROiBXaGVyZSBkbyBJIHN0b3JlIGRldmljZSBjb250ZXh0IGZvciBzdXNwZW5kPworCitBbnl3aGVyZSBpbiBtZW1vcnksIGttYWxsb2MgYSBidWZmZXIgb3Igc3RvcmUgaXQKK2luIHRoZSBkZXZpY2UgZGVzY3JpcHRvci4gIFlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoZQorY29udGVudHMgb2YgbWVtb3J5IHdpbGwgYmUgcmVzdG9yZWQgYW5kIGFjY2Vzc2libGUKK2JlZm9yZSByZXN1bWUsIGV2ZW4gd2hlbiB0aGUgc3lzdGVtIHN1c3BlbmRzIHRvIGRpc2suCisKK1E6IFdoYXQgZG8gSSBuZWVkIHRvIGRvIGZvciBBQ1BJIHZzLiBBUE0gdnMuIGV0Yz8KKworRHJpdmVycyBuZWVkIG5vdCBiZSBhd2FyZSBvZiB0aGUgc3BlY2lmaWMgcG93ZXIgbWFuYWdlbWVudAordGVjaG5vbG9neSB0aGF0IGlzIGFjdGl2ZS4gIFRoZXkganVzdCBuZWVkIHRvIGJlIGF3YXJlCitvZiB3aGVuIHRoZSBvdmVybHlpbmcgcG93ZXIgbWFuYWdlbWVudCBzeXN0ZW0gcmVxdWVzdHMKK3RoYXQgdGhleSBzdXNwZW5kIG9yIHJlc3VtZS4KKworUTogV2hhdCBhYm91dCBkZXZpY2UgZGVwZW5kZW5jaWVzPworCitXaGVuIGEgZHJpdmVyIHJlZ2lzdGVycyBhIGRldmljZSwgdGhlIHBvd2VyIG1hbmFnZW1lbnQKK3N1YnN5c3RlbSB1c2VzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCB0byBidWlsZCBhCit0cmVlIG9mIGRldmljZSBkZXBlbmRlbmNpZXMgKGVnLiBVU0IgZGV2aWNlIFggaXMgb24KK1VTQiBjb250cm9sbGVyIFkgd2hpY2ggaXMgb24gUENJIGJ1cyBaKSAgV2hlbiBwb3dlcgorbWFuYWdlbWVudCB3YW50cyB0byBzdXNwZW5kIGEgZGV2aWNlLCBpdCBmaXJzdCBzZW5kcworYSBzdXNwZW5kIHJlcXVlc3QgdG8gaXRzIGRyaXZlciwgdGhlbiB0aGUgYnVzIGRyaXZlciwKK2FuZCBzbyBvbiB1cCB0byB0aGUgc3lzdGVtIGJ1cy4gIERldmljZSByZXN1bWVzCitwcm9jZWVkIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uCisKK1E6IFdobyBkbyBJIGNvbnRhY3QgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQKKyAgIGVuYWJsaW5nIHBvd2VyIG1hbmFnZW1lbnQgZm9yIG15IHNwZWNpZmljIGRyaXZlci9kZXZpY2U/CisKK0FDUEkgRGV2ZWxvcG1lbnQgbWFpbGluZyBsaXN0OiBhY3BpLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCitTeXN0ZW0gSW50ZXJmYWNlIC0tIE9CU09MRVRFLCBETyBOT1QgVVNFIQorLS0tLS0tLS0tLS0tLS0tLSoqKioqKioqKioqKioqKioqKioqKioqKioKK0lmIHlvdSBhcmUgcHJvdmlkaW5nIG5ldyBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgdG8gTGludXggKGllLgorYWRkaW5nIHN1cHBvcnQgZm9yIHNvbWV0aGluZyBsaWtlIEFQTSBvciBBQ1BJKSwgeW91IHNob3VsZAorY29tbXVuaWNhdGUgd2l0aCBkcml2ZXJzIHRocm91Z2ggdGhlIGV4aXN0aW5nIGdlbmVyaWMgcG93ZXIKK21hbmFnZW1lbnQgaW50ZXJmYWNlLgorCisvKgorICogU2VuZCBhIHJlcXVlc3QgdG8gYWxsIGRldmljZXMKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICBycXN0IC0gcmVxdWVzdCB0eXBlCisgKiAgIGRhdGEgLSBkYXRhLCBpZiBhbnksIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdAorICoKKyAqIFJldHVybnM6IDAgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bAorICogICAgICAgICAgU2VlICJwbV9jYWxsYmFjayIgcmV0dXJuIGZvciBlcnJvcnMKKyAqCisgKiBEZXRhaWxzOiBXYWxrIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZXZpY2VzIGFuZCBjYWxsIHBtX3NlbmQKKyAqICAgICAgICAgIGZvciBlYWNoIHVudGlsIGNvbXBsZXRlIG9yIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgorICogICAgICAgICAgSWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgZm9yIGEgc3VzcGVuZCByZXF1ZXN0LAorICogICAgICAgICAgcmV0dXJuIGFsbCBkZXZpY2VzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4gYmVmb3JlCisgKiAgICAgICAgICB0aGUgc3VzcGVuZCByZXF1ZXN0LgorICovCitpbnQgcG1fc2VuZF9hbGwocG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpOworCisvKgorICogRmluZCBhIG1hdGNoaW5nIGRldmljZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIHR5cGUgLSBkZXZpY2UgdHlwZSAoUENJIGRldmljZSwgc3lzdGVtIGRldmljZSwgb3IgMCB0byBtYXRjaCBhbGwgZGV2aWNlcykKKyAqICAgZnJvbSAtIHByZXZpb3VzIG1hdGNoIG9yIE5VTEwgdG8gc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nCisgKgorICogUmV0dXJuczogTWF0Y2hpbmcgZGV2aWNlIG9yIE5VTEwgaWYgbm9uZSBmb3VuZAorICovCitzdHJ1Y3QgcG1fZGV2ICpwbV9maW5kKHBtX2Rldl90IHR5cGUsIHN0cnVjdCBwbV9kZXYgKmZyb20pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wbnAudHh0IGIvRG9jdW1lbnRhdGlvbi9wbnAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMGY2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3BucC50eHQKQEAgLTAsMCArMSwyNDkgQEAKK0xpbnV4IFBsdWcgYW5kIFBsYXkgRG9jdW1lbnRhdGlvbgorYnkgQWRhbSBCZWxheSA8YW1ieDFAbmVvLnJyLmNvbT4KK2xhc3QgdXBkYXRlZDogT2N0LiAxNiwgMjAwMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitPdmVydmlldworLS0tLS0tLS0KKwlQbHVnIGFuZCBQbGF5IHByb3ZpZGVzIGEgbWVhbnMgb2YgZGV0ZWN0aW5nIGFuZCBzZXR0aW5nIHJlc291cmNlcyBmb3IgbGVnYWN5IG9yCitvdGhlcndpc2UgdW5jb25maWd1cmFibGUgZGV2aWNlcy4gIFRoZSBMaW51eCBQbHVnIGFuZCBQbGF5IExheWVyIHByb3ZpZGVzIHRoZXNlIAorc2VydmljZXMgdG8gY29tcGF0aWJsZSBkcml2ZXJzLgorCisKKworVGhlIFVzZXIgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0KKwlUaGUgTGludXggUGx1ZyBhbmQgUGxheSB1c2VyIGludGVyZmFjZSBwcm92aWRlcyBhIG1lYW5zIHRvIGFjdGl2YXRlIFBuUCBkZXZpY2VzCitmb3IgbGVnYWN5IGFuZCB1c2VyIGxldmVsIGRyaXZlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBMaW51eCBQbHVnIGFuZCBQbGF5LiAgVGhlIAordXNlciBpbnRlcmZhY2UgaXMgaW50ZWdyYXRlZCBpbnRvIGRyaXZlcmZzLgorCitJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgZHJpdmVyZnMgZmlsZSB0aGUgZm9sbG93aW5nIGFyZSBjcmVhdGVkIGluIGVhY2ggCitkZXZpY2UncyBkaXJlY3Rvcnk6CitpZCAtIGRpc3BsYXlzIGEgbGlzdCBvZiBzdXBwb3J0IEVJU0EgSURzCitvcHRpb25zIC0gZGlzcGxheXMgcG9zc2libGUgcmVzb3VyY2UgY29uZmlndXJhdGlvbnMKK3Jlc291cmNlcyAtIGRpc3BsYXlzIGN1cnJlbnRseSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBhbGxvd3MgcmVzb3VyY2UgY2hhbmdlcworCistYWN0aXZhdGluZyBhIGRldmljZQorCisjZWNobyAiYXV0byIgPiByZXNvdXJjZXMKKwordGhpcyB3aWxsIGludm9rZSB0aGUgYXV0b21hdGljIHJlc291cmNlIGNvbmZpZyBzeXN0ZW0gdG8gYWN0aXZhdGUgdGhlIGRldmljZQorCistbWFudWFsbHkgYWN0aXZhdGluZyBhIGRldmljZQorCisjZWNobyAibWFudWFsIDxkZXBudW0+IDxtb2RlPiIgPiByZXNvdXJjZXMKKzxkZXBudW0+IC0gdGhlIGNvbmZpZ3VyYXRpb24gbnVtYmVyCis8bW9kZT4gLSBzdGF0aWMgb3IgZHluYW1pYworCQlzdGF0aWMgPSBmb3IgbmV4dCBib290CisJCWR5bmFtaWMgPSBub3cKKworLWRpc2FibGluZyBhIGRldmljZQorCisjZWNobyAiZGlzYWJsZSIgPiByZXNvdXJjZXMKKworCitFWEFNUExFOgorCitTdXBwb3NlIHlvdSBuZWVkIHRvIGFjdGl2YXRlIHRoZSBmbG9wcHkgZGlzayBjb250cm9sbGVyLgorMS4pIGNoYW5nZSB0byB0aGUgcHJvcGVyIGRpcmVjdG9yeSwgaW4gbXkgY2FzZSBpdCBpcyAKKy9kcml2ZXIvYnVzL3BucC9kZXZpY2VzLzAwOjBmCisjIGNkIC9kcml2ZXIvYnVzL3BucC9kZXZpY2VzLzAwOjBmCisjIGNhdCBuYW1lCitQQyBzdGFuZGFyZCBmbG9wcHkgZGlzayBjb250cm9sbGVyCisKKzIuKSBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgYWN0aXZlCisjIGNhdCByZXNvdXJjZXMKK0RJU0FCTEVECisKKy0gTm90aWNlIHRoZSBzdHJpbmcgIkRJU0FCTEVEIi4gIFRIaXMgbWVhbnMgdGhlIGRldmljZSBpcyBub3QgYWN0aXZlLgorCiszLikgY2hlY2sgdGhlIGRldmljZSdzIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIChvcHRpb25hbCkKKyMgY2F0IG9wdGlvbnMKK0RlcGVuZGVudDogMDEgLSBQcmlvcml0eSBhY2NlcHRhYmxlCisgICAgcG9ydCAweDNmMC0weDNmMCwgYWxpZ24gMHg3LCBzaXplIDB4NiwgMTYtYml0IGFkZHJlc3MgZGVjb2RpbmcKKyAgICBwb3J0IDB4M2Y3LTB4M2Y3LCBhbGlnbiAweDAsIHNpemUgMHgxLCAxNi1iaXQgYWRkcmVzcyBkZWNvZGluZworICAgIGlycSA2CisgICAgZG1hIDIgOC1iaXQgY29tcGF0aWJsZQorRGVwZW5kZW50OiAwMiAtIFByaW9yaXR5IGFjY2VwdGFibGUKKyAgICBwb3J0IDB4MzcwLTB4MzcwLCBhbGlnbiAweDcsIHNpemUgMHg2LCAxNi1iaXQgYWRkcmVzcyBkZWNvZGluZworICAgIHBvcnQgMHgzNzctMHgzNzcsIGFsaWduIDB4MCwgc2l6ZSAweDEsIDE2LWJpdCBhZGRyZXNzIGRlY29kaW5nCisgICAgaXJxIDYKKyAgICBkbWEgMiA4LWJpdCBjb21wYXRpYmxlCisKKzQuKSBub3cgYWN0aXZhdGUgdGhlIGRldmljZQorIyBlY2hvICJhdXRvIiA+IHJlc291cmNlcworCis1LikgZmluYWxseSBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIGFjdGl2ZQorIyBjYXQgcmVzb3VyY2VzCitpbyAweDNmMC0weDNmNQoraW8gMHgzZjctMHgzZjcKK2lycSA2CitkbWEgMgorCithbHNvIHRoZXJlIGFyZSBhIHNlcmllcyBvZiBrZXJuZWwgcGFyYW1ldGVyczoKK3BucF9yZXNlcnZlX2lycT1pcnExWyxpcnEyXSAuLi4uCitwbnBfcmVzZXJ2ZV9kbWE9ZG1hMVssZG1hMl0gLi4uLgorcG5wX3Jlc2VydmVfaW89aW8xLHNpemUxWyxpbzIsc2l6ZTJdIC4uLi4KK3BucF9yZXNlcnZlX21lbT1tZW0xLHNpemUxWyxtZW0yLHNpemUyXSAuLi4uCisKKworCitUaGUgVW5pZmllZCBQbHVnIGFuZCBQbGF5IExheWVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQWxsIFBsdWcgYW5kIFBsYXkgZHJpdmVycywgcHJvdG9jb2xzLCBhbmQgc2VydmljZXMgbWVldCBhdCBhIGNlbnRyYWwgbG9jYXRpb24gCitjYWxsZWQgdGhlIFBsdWcgYW5kIFBsYXkgTGF5ZXIuICBUaGlzIGxheWVyIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgZXhjaGFuZ2Ugb2YgCitpbmZvcm1hdGlvbiBiZXR3ZWVuIFBuUCBkcml2ZXJzIGFuZCBQblAgcHJvdG9jb2xzLiAgVGh1cyBpdCBhdXRvbWF0aWNhbGx5IAorZm9yd2FyZHMgY29tbWFuZHMgdG8gdGhlIHByb3BlciBwcm90b2NvbC4gIFRoaXMgbWFrZXMgd3JpdGluZyBQblAgZHJpdmVycyAKK3NpZ25pZmljYW50bHkgZWFzaWVyLgorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFBsdWcgYW5kIFBsYXkgTGF5ZXI6CisKK3BucF9nZXRfcHJvdG9jb2wKKy0gaW5jcmVtZW50cyB0aGUgbnVtYmVyIG9mIHVzZXMgYnkgb25lCisKK3BucF9wdXRfcHJvdG9jb2wKKy0gZGVpbmNyZW1lbnRzIHRoZSBudW1iZXIgb2YgdXNlcyBieSBvbmUKKworcG5wX3JlZ2lzdGVyX3Byb3RvY29sCistIHVzZSB0aGlzIHRvIHJlZ2lzdGVyIGEgbmV3IFBuUCBwcm90b2NvbAorCitwbnBfdW5yZWdpc3Rlcl9wcm90b2NvbAorLSB1c2UgdGhpcyBmdW5jdGlvbiB0byByZW1vdmUgYSBQblAgcHJvdG9jb2wgZnJvbSB0aGUgUGx1ZyBhbmQgUGxheSBMYXllcgorCitwbnBfcmVnaXN0ZXJfZHJpdmVyCistIGFkZHMgYSBQblAgZHJpdmVyIHRvIHRoZSBQbHVnIGFuZCBQbGF5IExheWVyCistIHRoaXMgaW5jbHVkZXMgZHJpdmVyIG1vZGVsIGludGVncmF0aW9uCisKK3BucF91bnJlZ2lzdGVyX2RyaXZlcgorLSByZW1vdmVzIGEgUG5QIGRyaXZlciBmcm9tIHRoZSBQbHVnIGFuZCBQbGF5IExheWVyCisKKworCitQbHVnIGFuZCBQbGF5IFByb3RvY29scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlUaGlzIHNlY3Rpb24gY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIFBuUCBwcm90b2NvbCBkZXZlbG9wZXJzLgorCitUaGUgZm9sbG93aW5nIFByb3RvY29scyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgY29tcHV0aW5nIHdvcmxkOgorLSBQTlBCSU9TOiB1c2VkIGZvciBzeXN0ZW0gZGV2aWNlcyBzdWNoIGFzIHNlcmlhbCBhbmQgcGFyYWxsZWwgcG9ydHMuCistIElTQVBOUDogcHJvdmlkZXMgUG5QIHN1cHBvcnQgZm9yIHRoZSBJU0EgYnVzCistIEFDUEk6IGFtb25nIGl0cyBtYW55IHVzZXMsIEFDUEkgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgc3lzdGVtIGxldmVsIAorZGV2aWNlcy4KK0l0IGlzIG1lYW50IHRvIHJlcGxhY2UgdGhlIFBOUEJJT1MuICBJdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBMaW51eAorUGx1ZyBhbmQgUGxheSBidXQgaXQgaXMgcGxhbm5lZCB0byBiZSBpbiB0aGUgbmVhciBmdXR1cmUuCisKKworUmVxdWlyZW1lbnRzIGZvciBhIExpbnV4IFBuUCBwcm90b2NvbDoKKzEuKSB0aGUgcHJvdG9jb2wgbXVzdCB1c2UgRUlTQSBJRHMKKzIuKSB0aGUgcHJvdG9jb2wgbXVzdCBpbmZvcm0gdGhlIFBuUCBMYXllciBvZiBhIGRldmljZXMgY3VycmVudCBjb25maWd1cmF0aW9uCistIHRoZSBhYmlsaXR5IHRvIHNldCByZXNvdXJjZXMgaXMgb3B0aW9uYWwgYnV0IHByZWZlcmVkLgorCitUaGUgZm9sbG93aW5nIGFyZSBQblAgcHJvdG9jb2wgcmVsYXRlZCBmdW5jdGlvbnM6CisKK3BucF9hZGRfZGV2aWNlCistIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGFkZCBhIFBuUCBkZXZpY2UgdG8gdGhlIFBuUCBsYXllcgorLSBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGFsbCB3YW50ZWQgdmFsdWVzIGFyZSBzZXQgaW4gdGhlIHBucF9kZXYgCitzdHJ1Y3R1cmUKKworcG5wX2luaXRfZGV2aWNlCistIGNhbGwgdGhpcyB0byBpbml0aWFsaXplIHRoZSBQblAgc3RydWN0dXJlCisKK3BucF9yZW1vdmVfZGV2aWNlCistIGNhbGwgdGhpcyB0byByZW1vdmUgYSBkZXZpY2UgZnJvbSB0aGUgUGx1ZyBhbmQgUGxheSBMYXllci4KKy0gaXQgd2lsbCBmYWlsIGlmIHRoZSBkZXZpY2UgaXMgc3RpbGwgaW4gdXNlLgorLSBhdXRvbWF0aWNhbGx5IHdpbGwgZnJlZSBtZW0gdXNlZCBieSB0aGUgZGV2aWNlIGFuZCByZWxhdGVkIHN0cnVjdHVyZXMKKworcG5wX2FkZF9pZAorLSBhZGRzIGEgRUlTQSBJRCB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgSURzIGZvciB0aGUgc3BlY2lmaWVkIGRldmljZQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBjb25zdWx0IHRoZSBzb3VyY2Ugb2YgYSBwcm90b2NvbCBzdWNoIGFzCisvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMuCisKKworCitMaW51eCBQbHVnIGFuZCBQbGF5IERyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVRoaXMgc2VjdGlvbiBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgbGludXggUG5QIGRyaXZlciBkZXZlbG9wZXJzLgorCitUaGUgTmV3IFdheQorLi4uLi4uLi4uLi4KKzEuKSBmaXJzdCBtYWtlIGEgbGlzdCBvZiBzdXBwb3J0ZWQgRUlTQSBJRFMKK2V4Ogorc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfaWQgcG5wX2Rldl90YWJsZVtdID0geworCS8qIFN0YW5kYXJkIExQVCBQcmludGVyIFBvcnQgKi8KKwl7LmlkID0gIlBOUDA0MDAiLCAuZHJpdmVyX2RhdGEgPSAwfSwKKwkvKiBFQ1AgUHJpbnRlciBQb3J0ICovCisJey5pZCA9ICJQTlAwNDAxIiwgLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICIifQorfTsKKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgY2hhcmFjdGVyICdYJyBjYW4gYmUgdXNlZCBhcyBhIHdpbGQgY2FyZCBpbiB0aGUgZnVuY3Rpb24KK3BvcnRpb24gKGxhc3QgZm91ciBjaGFyYWN0ZXJzKS4KK2V4OgorCS8qIFVua293biBQblAgbW9kZW1zICovCisJewkiUE5QQ1hYWCIsCQlVTktOT1dOX0RFVgl9LAorCitTdXBwb3J0ZWQgUG5QIGNhcmQgSURzIGNhbiBvcHRpb25hbGx5IGJlIGRlZmluZWQuCitleDoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2lkIHBucF9jYXJkX3RhYmxlW10gPSB7CisJewkiQU5ZREVWUyIsCQkwCX0sCisJewkiIiwJCQkwCX0KK307CisKKzIuKSBPcHRpb25hbGx5IGRlZmluZSBwcm9iZSBhbmQgcmVtb3ZlIGZ1bmN0aW9ucy4gIEl0IG1heSBtYWtlIHNlbnNlIG5vdCB0byAKK2RlZmluZSB0aGVzZSBmdW5jdGlvbnMgaWYgdGhlIGRyaXZlciBhbHJlYWR5IGhhcyBhIHJlbGlhYmxlIG1ldGhvZCBvZiBkZXRlY3RpbmcKK3RoZSByZXNvdXJjZXMsIHN1Y2ggYXMgdGhlIHBhcnBvcnRfcGMgZHJpdmVyLgorZXg6CitzdGF0aWMgaW50CitzZXJpYWxfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICogZGV2LCBjb25zdCBzdHJ1Y3QgcG5wX2lkICpjYXJkX2lkLCBjb25zdCAKKyAgICAgICAgICAgICAgICAgc3RydWN0IHBucF9pZCAqZGV2X2lkKQoreworLiAuIC4KKworZXg6CitzdGF0aWMgdm9pZCBzZXJpYWxfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqIGRldikKK3sKKy4gLiAuCisKK2NvbnN1bHQgL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKzMuKSBjcmVhdGUgYSBkcml2ZXIgc3RydWN0dXJlCitleDoKKworc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIHNlcmlhbF9wbnBfZHJpdmVyID0geworCS5uYW1lCQk9ICJzZXJpYWwiLAorCS5jYXJkX2lkX3RhYmxlCT0gcG5wX2NhcmRfdGFibGUsCisJLmlkX3RhYmxlCT0gcG5wX2Rldl90YWJsZSwKKwkucHJvYmUJCT0gc2VyaWFsX3BucF9wcm9iZSwKKwkucmVtb3ZlCQk9IHNlcmlhbF9wbnBfcmVtb3ZlLAorfTsKKworKiBuYW1lIGFuZCBpZF90YWJsZSBjYW4gbm90IGJlIE5VTEwuCisKKzQuKSByZWdpc3RlciB0aGUgZHJpdmVyCitleDoKKworc3RhdGljIGludCBfX2luaXQgc2VyaWFsODI1MF9wbnBfaW5pdCh2b2lkKQoreworCXJldHVybiBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfcG5wX2RyaXZlcik7Cit9CisKK1RoZSBPbGQgV2F5CisuLi4uLi4uLi4uLgorCithIHNlcmllcyBvZiBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCB0byBtYWtlIGl0IGVhc3kgdG8gY29udmVydCAKKworSVNBUE5QIGRyaXZlcnMuICBUaGV5IHNob3VsZCBzZXJ2ZSBhcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiBvbmx5LgorCit0aGV5IGFyZSBhcyBmb2xsb3dzOgorCitzdHJ1Y3QgcG5wX2NhcmQgKnBucF9maW5kX2NhcmQodW5zaWduZWQgc2hvcnQgdmVuZG9yLAorCQkJCSB1bnNpZ25lZCBzaG9ydCBkZXZpY2UsCisJCQkJIHN0cnVjdCBwbnBfY2FyZCAqZnJvbSkKKworc3RydWN0IHBucF9kZXYgKnBucF9maW5kX2RldihzdHJ1Y3QgcG5wX2NhcmQgKmNhcmQsCisJCQkJdW5zaWduZWQgc2hvcnQgdmVuZG9yLAorCQkJCXVuc2lnbmVkIHNob3J0IGZ1bmN0aW9uLAorCQkJCXN0cnVjdCBwbnBfZGV2ICpmcm9tKQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDRhZTlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dApAQCAtMCwwICsxLDMxOSBAQAorCitEZXZpY2UgUG93ZXIgTWFuYWdlbWVudAorCisKK0RldmljZSBwb3dlciBtYW5hZ2VtZW50IGVuY29tcGFzc2VzIHR3byBhcmVhcyAtIHRoZSBhYmlsaXR5IHRvIHNhdmUKK3N0YXRlIGFuZCB0cmFuc2l0aW9uIGEgZGV2aWNlIHRvIGEgbG93LXBvd2VyIHN0YXRlIHdoZW4gdGhlIHN5c3RlbSBpcworZW50ZXJpbmcgYSBsb3ctcG93ZXIgc3RhdGU7IGFuZCB0aGUgYWJpbGl0eSB0byB0cmFuc2l0aW9uIGEgZGV2aWNlIHRvCithIGxvdy1wb3dlciBzdGF0ZSB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgKGFuZCBpbmRlcGVuZGVudGx5IG9mCithbnkgb3RoZXIgcG93ZXIgbWFuYWdlbWVudCBhY3Rpdml0eSkuIAorCisKK01ldGhvZHMKKworVGhlIG1ldGhvZHMgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIGRldmljZXMgcmVzaWRlIGluIHN0cnVjdCBidXNfdHlwZTogCisKK3N0cnVjdCBidXNfdHlwZSB7CisgICAgICAgLi4uCisgICAgICAgaW50ICAgICAgICAgICAgICgqc3VzcGVuZCkoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKyAgICAgICBpbnQgICAgICAgICAgICAgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworfTsKKworRWFjaCBidXMgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGltcGxlbWVudGluZyB0aGVzZSBtZXRob2RzLCB0cmFuc2xhdGluZwordGhlIGNhbGwgaW50byBhIGJ1cy1zcGVjaWZpYyByZXF1ZXN0IGFuZCBmb3J3YXJkaW5nIHRoZSBjYWxsIHRvIHRoZQorYnVzLXNwZWNpZmljIGRyaXZlcnMuIEZvciBleGFtcGxlLCBQQ0kgZHJpdmVycyBpbXBsZW1lbnQgc3VzcGVuZCgpIGFuZAorcmVzdW1lKCkgbWV0aG9kcyBpbiBzdHJ1Y3QgcGNpX2RyaXZlci4gVGhlIFBDSSBjb3JlIGlzIHNpbXBseQorcmVzcG9uc2libGUgZm9yIHRyYW5zbGF0aW5nIHRoZSBwb2ludGVycyB0byBQQ0ktc3BlY2lmaWMgb25lcyBhbmQKK2NhbGxpbmcgdGhlIGxvdy1sZXZlbCBkcml2ZXIuCisKK1RoaXMgaXMgZG9uZSB0byBhKSBlYXNlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBwb3dlciBtYW5hZ2VtZW50IG1ldGhvZHMKK2FuZCBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgUE0gY29kZSBpbiB2YXJpb3VzIGJ1cyBkcml2ZXJzOyBiKSBhbGxvdworYnVzZXMgdG8gaW1wbGVtZW50IGdlbmVyaWMgYW5kIGRlZmF1bHQgUE0gcm91dGluZXMgZm9yIGRldmljZXMsIGFuZCBjKQorbWFrZSB0aGUgZmxvdyBvZiBleGVjdXRpb24gb2J2aW91cyB0byB0aGUgcmVhZGVyLiAKKworCitTeXN0ZW0gUG93ZXIgTWFuYWdlbWVudAorCitXaGVuIHRoZSBzeXN0ZW0gZW50ZXJzIGEgbG93LXBvd2VyIHN0YXRlLCB0aGUgZGV2aWNlIHRyZWUgaXMgd2Fsa2VkIGluCithIGRlcHRoLWZpcnN0IGZhc2hpb24gdG8gdHJhbnNpdGlvbiBlYWNoIGRldmljZSBpbnRvIGEgbG93LXBvd2VyCitzdGF0ZS4gVGhlIG9yZGVyaW5nIG9mIHRoZSBkZXZpY2UgdHJlZSBpcyBndWFyYW50ZWVkIGJ5IHRoZSBvcmRlciBpbgord2hpY2ggZGV2aWNlcyBnZXQgcmVnaXN0ZXJlZCAtIGNoaWxkcmVuIGFyZSBuZXZlciByZWdpc3RlcmVkIGJlZm9yZQordGhlaXIgYW5jZXN0b3JzLCBhbmQgZGV2aWNlcyBhcmUgcGxhY2VkIGF0IHRoZSBiYWNrIG9mIHRoZSBsaXN0IHdoZW4KK3JlZ2lzdGVyZWQuIEJ5IHdhbGtpbmcgdGhlIGxpc3QgaW4gcmV2ZXJzZSBvcmRlciwgd2UgYXJlIGd1YXJhbnRlZWQgdG8KK3N1c3BlbmQgZGV2aWNlcyBpbiB0aGUgcHJvcGVyIG9yZGVyLiAKKworRGV2aWNlcyBhcmUgc3VzcGVuZGVkIG9uY2Ugd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuIERyaXZlcnMgYXJlCitleHBlY3RlZCB0byBzdG9wIEkvTyB0cmFuc2FjdGlvbnMsIHNhdmUgZGV2aWNlIHN0YXRlLCBhbmQgcGxhY2UgdGhlCitkZXZpY2UgaW50byBhIGxvdy1wb3dlciBzdGF0ZS4gRHJpdmVycyBtYXkgc2xlZXAsIGFsbG9jYXRlIG1lbW9yeSwKK2V0Yy4gYXQgd2lsbC4gCisKK1NvbWUgZGV2aWNlcyBhcmUgYnJva2VuIGFuZCB3aWxsIGluZXZpdGFibHkgaGF2ZSBwcm9ibGVtcyBwb3dlcmluZworZG93biBvciBkaXNhYmxpbmcgdGhlbXNlbHZlcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gRm9yIHRoZXNlCitzcGVjaWFsIGNhc2VzLCB0aGV5IG1heSByZXR1cm4gLUVBR0FJTi4gVGhpcyB3aWxsIHB1dCB0aGUgZGV2aWNlIG9uIGEKK2xpc3QgdG8gYmUgdGFrZW4gY2FyZSBvZiBsYXRlci4gV2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgYmVmb3JlCit3ZSBlbnRlciB0aGUgbG93LXBvd2VyIHN0YXRlLCB0aGVpciBkcml2ZXJzIGFyZSBjYWxsZWQgYWdhaW4gdG8gcHV0Cit0aGVpciBkZXZpY2UgdG8gc2xlZXAuIAorCitPbiByZXN1bWUsIHRoZSBkZXZpY2VzIHRoYXQgcmV0dXJuZWQgLUVBR0FJTiB3aWxsIGJlIGNhbGxlZCB0byBwb3dlcgordGhlbXNlbHZlcyBiYWNrIG9uIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gT25jZSBpbnRlcnJ1cHRzIGhhdmUgYmVlbgorcmUtZW5hYmxlZCwgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlcnMgd2lsbCBiZSBjYWxsZWQgdG8gcmVzdW1lIHRoZWlyCitkZXZpY2VzLiBPbiByZXN1bWUsIGEgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBwb3dlcmluZyBiYWNrIG9uIGVhY2gKK2RldmljZSwgcmVzdG9yaW5nIHN0YXRlLCBhbmQgcmUtZW5hYmxpbmcgSS9PIHRyYW5zYWN0aW9ucyBmb3IgdGhhdAorZGV2aWNlLiAKKworU3lzdGVtIGRldmljZXMgZm9sbG93IGEgc2xpZ2h0bHkgZGlmZmVyZW50IEFQSSwgd2hpY2ggY2FuIGJlIGZvdW5kIGluCisKKwlpbmNsdWRlL2xpbnV4L3N5c2Rldi5oCisJZHJpdmVycy9iYXNlL3N5cy5jCisKK1N5c3RlbSBkZXZpY2VzIHdpbGwgb25seSBiZSBzdXNwZW5kZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBhbmQKK2FmdGVyIGFsbCBvdGhlciBkZXZpY2VzIGhhdmUgYmVlbiBzdXNwZW5kZWQuIE9uIHJlc3VtZSwgdGhleSB3aWxsIGJlCityZXN1bWVkIGJlZm9yZSBhbnkgb3RoZXIgZGV2aWNlcywgYW5kIGFsc28gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCisKK1J1bnRpbWUgUG93ZXIgTWFuYWdlbWVudAorCitNYW55IGRldmljZXMgYXJlIGFibGUgdG8gZHluYW1pY2FsbHkgcG93ZXIgZG93biB3aGlsZSB0aGUgc3lzdGVtIGlzCitzdGlsbCBydW5uaW5nLiBUaGlzIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBkZXZpY2VzIHRoYXQgYXJlIG5vdCBiZWluZwordXNlZCwgYW5kIGNhbiBvZmZlciBzaWduaWZpY2FudCBwb3dlciBzYXZpbmdzIG9uIGEgcnVubmluZyBzeXN0ZW0uIAorCitJbiBlYWNoIGRldmljZSdzIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSAncG93ZXInIGRpcmVjdG9yeSwgd2hpY2gKK2NvbnRhaW5zIGF0IGxlYXN0IGEgJ3N0YXRlJyBmaWxlLiBSZWFkaW5nIGZyb20gdGhpcyBmaWxlIGRpc3BsYXlzIHdoYXQKK3Bvd2VyIHN0YXRlIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IGluLiBXcml0aW5nIHRvIHRoaXMgZmlsZSBpbml0aWF0ZXMKK2EgdHJhbnNpdGlvbiB0byB0aGUgc3BlY2lmaWVkIHBvd2VyIHN0YXRlLCB3aGljaCBtdXN0IGJlIGEgZGVjaW1hbCBpbgordGhlIHJhbmdlIDEtMywgaW5jbHVzaXZlOyBvciAwIGZvciAnT24nLgorCitUaGUgUE0gY29yZSB3aWxsIGNhbGwgdGhlIC0+c3VzcGVuZCgpIG1ldGhvZCBpbiB0aGUgYnVzX3R5cGUgb2JqZWN0Cit0aGF0IHRoZSBkZXZpY2UgYmVsb25ncyB0byBpZiB0aGUgc3BlY2lmaWVkIHN0YXRlIGlzIG5vdCAwLCBvcgorLT5yZXN1bWUoKSBpZiBpdCBpcy4gCisKK05vdGhpbmcgd2lsbCBoYXBwZW4gaWYgdGhlIHNwZWNpZmllZCBzdGF0ZSBpcyB0aGUgc2FtZSBzdGF0ZSB0aGUKK2RldmljZSBpcyBjdXJyZW50bHkgaW4uIAorCitJZiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgaW4gYSBsb3ctcG93ZXIgc3RhdGUsIGFuZCB0aGUgc3BlY2lmaWVkIHN0YXRlCitpcyBhbm90aGVyLCBidXQgZGlmZmVyZW50LCBsb3ctcG93ZXIgc3RhdGUsIHRoZSAtPnJlc3VtZSgpIG1ldGhvZCB3aWxsCitmaXJzdCBiZSBjYWxsZWQgdG8gcG93ZXIgdGhlIGRldmljZSBiYWNrIG9uLCB0aGVuIC0+c3VzcGVuZCgpIHdpbGwgYmUKK2NhbGxlZCBhZ2FpbiB3aXRoIHRoZSBuZXcgc3RhdGUuIAorCitUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBzYXZpbmcgdGhlIHdvcmtpbmcgc3RhdGUgb2YgdGhlIGRldmljZQorYW5kIHB1dHRpbmcgaXQgaW50byB0aGUgbG93LXBvd2VyIHN0YXRlIHNwZWNpZmllZC4gSWYgdGhpcyB3YXMKK3N1Y2Nlc3NmdWwsIGl0IHJldHVybnMgMCwgYW5kIHRoZSBkZXZpY2UncyBwb3dlcl9zdGF0ZSBmaWVsZCBpcwordXBkYXRlZC4gCisKK1RoZSBkcml2ZXIgbXVzdCB0YWtlIGNhcmUgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCBpcyBhYmxlIHRvCitwcm9wZXJseSByZXN1bWUgdGhlIGRldmljZSwgaW5jbHVkaW5nIGFsbCBzdGVwIG9mIHJlaW5pdGlhbGl6YXRpb24KK25lY2Vzc2FyeS4gKFRoaXMgaXMgdGhlIGhhcmRlc3QgcGFydCwgYW5kIHRoZSBvbmUgbW9zdCBwcm90ZWN0ZWQgYnkKK05EQSdkIGRvY3VtZW50cykuIAorCitUaGUgZHJpdmVyIG11c3QgYWxzbyB0YWtlIGNhcmUgbm90IHRvIHN1c3BlbmQgYSBkZXZpY2UgdGhhdCBpcworY3VycmVudGx5IGluIHVzZS4gSXQgaXMgdGhlaXIgcmVzcG9uc2liaWxpdHkgdG8gcHJvdmlkZSB0aGVpciBvd24KK2V4Y2x1c2lvbiBtZWNoYW5pc21zLgorCitUaGUgcnVudGltZSBwb3dlciB0cmFuc2l0aW9uIGhhcHBlbnMgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuIElmIGEKK2RldmljZSBjYW5ub3Qgc3VwcG9ydCBiZWluZyBwb3dlcmVkIGRvd24gd2l0aCBpbnRlcnJ1cHRzLCBpdCBtYXkKK3JldHVybiAtRUFHQUlOIChhcyBpdCB3b3VsZCBkdXJpbmcgYSBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudAordHJhbnNpdGlvbiksICBidXQgaXQgd2lsbCBfbm90XyBiZSBjYWxsZWQgYWdhaW4sIGFuZCB0aGUgdHJhbnNhY3Rpb24KK3dpbGwgZmFpbC4KKworVGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBrbm93IHdoYXQgc3RhdGVzIGEgZGV2aWNlIG9yIGRyaXZlcgorc3VwcG9ydHMgYSBwcmlvcmkuIFRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gCisKK3BtX21lc3NhZ2VfdCBtZWFuaW5nCisKK3BtX21lc3NhZ2VfdCBoYXMgdHdvIGZpZWxkcy4gZXZlbnQgKCJtYWpvciIpLCBhbmQgZmxhZ3MuICBJZiBkcml2ZXIKK2RvZXMgbm90IGtub3cgZXZlbnQgY29kZSwgaXQgYWJvcnRzIHRoZSByZXF1ZXN0LCByZXR1cm5pbmcgZXJyb3IuIFNvbWUKK2RyaXZlcnMgbWF5IG5lZWQgdG8gZGVhbCB3aXRoIHNwZWNpYWwgY2FzZXMgYmFzZWQgb24gdGhlIGFjdHVhbCB0eXBlCitvZiBzdXNwZW5kIG9wZXJhdGlvbiBiZWluZyBkb25lIGF0IHRoZSBzeXN0ZW0gbGV2ZWwuIFRoaXMgaXMgd2h5Cit0aGVyZSBhcmUgZmxhZ3MuCisKK0V2ZW50IGNvZGVzIGFyZToKKworT04gLS0gbm8gbmVlZCB0byBkbyBhbnl0aGluZyBleGNlcHQgc3BlY2lhbCBjYXNlcyBsaWtlIGJyb2tlbgorSFcuCisKKyMgTk9USUZJQ0FUSU9OIC0tIHByZXR0eSBtdWNoIHNhbWUgYXMgT04/CisKK0ZSRUVaRSAtLSBzdG9wIERNQSBhbmQgaW50ZXJydXB0cywgYW5kIGJlIHByZXBhcmVkIHRvIHJlaW5pdCBIVyBmcm9tCitzY3JhdGNoLiBUaGF0IHByb2JhYmx5IG1lYW5zIHN0b3AgYWNjZXB0aW5nIHVwc3RyZWFtIHJlcXVlc3RzLCB0aGUKK2FjdHVhbCBwb2xpY3kgb2Ygd2hhdCB0byBkbyB3aXRoIHRoZW0gYmVlaW5nIHNwZWNpZmljIHRvIGEgZ2l2ZW4KK2RyaXZlci4gSXQncyBhY2NlcHRhYmxlIGZvciBhIG5ldHdvcmsgZHJpdmVyIHRvIGp1c3QgZHJvcCBwYWNrZXRzCit3aGlsZSBhIGJsb2NrIGRyaXZlciBpcyBleHBlY3RlZCB0byBibG9jayB0aGUgcXVldWUgc28gbm8gcmVxdWVzdCBpcworbG9zdC4gKFVzZSBJREUgYXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gZG8gdGhhdCkuIEZSRUVaRSByZXF1aXJlcyBubworcG93ZXIgc3RhdGUgY2hhbmdlLCBhbmQgaXQncyBleHBlY3RlZCBmb3IgZHJpdmVycyB0byBiZSBhYmxlIHRvCitxdWlja2x5IHRyYW5zaXRpb24gYmFjayB0byBvcGVyYXRpbmcgc3RhdGUuCisKK1NVU1BFTkQgLS0gbGlrZSBGUkVFWkUsIGJ1dCBhbHNvIHB1dCBoYXJkd2FyZSBpbnRvIGxvdy1wb3dlciBzdGF0ZS4gSWYKK3RoZXJlJ3MgbmVlZCB0byBkaXN0aW5ndWlzaCBzZXZlcmFsIGxldmVscyBvZiBzbGVlcCwgYWRkaXRpb25hbCBmbGFnCitpcyBwcm9iYWJseSBiZXN0IHdheSB0byBkbyB0aGF0LgorCitUcmFuc2l0aW9ucyBhcmUgb25seSBmcm9tIGEgcmVzdW1lZCBzdGF0ZSB0byBhIHN1c3BlbmRlZCBzdGF0ZSwgbmV2ZXIKK2JldHdlZW4gMiBzdXNwZW5kZWQgc3RhdGVzLiAoT04gLT4gRlJFRVpFIG9yIE9OIC0+IFNVU1BFTkQgY2FuIGhhcHBlbiwKK0ZSRUVaRSAtPiBTVVNQRU5EIG9yIFNVU1BFTkQgLT4gRlJFRVpFIGNhbiBub3QpLgorCitBbGwgZXZlbnRzIGFyZToKKworW05PVEUgTk9URSBOT1RFOiBJZiB5b3UgYXJlIGRyaXZlciBhdXRob3IsIHlvdSBzaG91bGQgbm90IGNhcmU7IHlvdQorc2hvdWxkIG9ubHkgbG9vayBhdCBldmVudCwgYW5kIGlnbm9yZSBmbGFncy5dCisKKyNQcmVwYXJlIGZvciBzdXNwZW5kIC0tIHVzZXJsYW5kIGlzIHN0aWxsIHJ1bm5pbmcgYnV0IHdlIGFyZSBnb2luZyB0bworI2VudGVyIHN1c3BlbmQgc3RhdGUuIFRoaXMgZ2l2ZXMgZHJpdmVycyBjaGFuY2UgdG8gbG9hZCBmaXJtd2FyZSBmcm9tCisjZGlzayBhbmQgc3RvcmUgaXQgaW4gbWVtb3J5LCBvciBkbyBvdGhlciBhY3Rpdml0aWVzIHRhaHQgcmVxdWlyZQorI29wZXJhdGluZyB1c2VybGFuZCwgYWJpbGl0eSB0byBrbWFsbG9jIEdGUF9LRVJORUwsIGV0Yy4uLiBBbGwgb2YgdGhlc2UKKyNhcmUgZm9yYmlkZW4gb25jZSB0aGUgc3VzcGVuZCBkYW5jZSBpcyBzdGFydGVkLi4gZXZlbnQgPSBPTiwgZmxhZ3MgPQorI1BSRVBBUkVfVE9fU1VTUEVORAorCitBcG0gc3RhbmRieSAtLSBwcmVwYXJlIGZvciBBUE0gZXZlbnQuIFF1aWVzY2UgZGV2aWNlcyB0byBtYWtlIGxpZmUKK2Vhc2llciBmb3IgQVBNIEJJT1MuIGV2ZW50ID0gRlJFRVpFLCBmbGFncyA9IEFQTV9TVEFOREJZCisKK0FwbSBzdXNwZW5kIC0tIHNhbWUgYXMgQVBNX1NUQU5EQlksIGJ1dCBpdCB3ZSBzaG91bGQgcHJvYmFibHkgYXZvaWQKK3NwaW5uaW5nIGRvd24gZGlza3MuIGV2ZW50ID0gRlJFRVpFLCBmbGFncyA9IEFQTV9TVVNQRU5ECisKK1N5c3RlbSBoYWx0LCByZWJvb3QgLS0gcXVpZXNjZSBkZXZpY2VzIHRvIG1ha2UgbGlmZSBlYXNpZXIgZm9yIEJJT1MuIGV2ZW50Cis9IEZSRUVaRSwgZmxhZ3MgPSBTWVNURU1fSEFMVCBvciBTWVNURU1fUkVCT09UCisKK1N5c3RlbSBzaHV0ZG93biAtLSBhdCBsZWFzdCBkaXNrcyBuZWVkIHRvIGJlIHNwdW4gZG93biwgb3IgZGF0YSBtYXkgYmUKK2xvc3QuIFF1aWVzY2UgZGV2aWNlcywganVzdCB0byBtYWtlIGxpZmUgZWFzaWVyIGZvciBCSU9TLiBldmVudCA9CitGUkVFWkUsIGZsYWdzID0gU1lTVEVNX1NIVVRET1dOCisKK0tleGVjICAgIC0tIHR1cm4gb2ZmIERNQXMgYW5kIHB1dCBoYXJkd2FyZSBpbnRvIHNvbWUgc3RhdGUgd2hlcmUgbmV3CitrZXJuZWwgY2FuIHRha2Ugb3Zlci4gZXZlbnQgPSBGUkVFWkUsIGZsYWdzID0gS0VYRUMKKworUG93ZXJkb3duIGF0IGVuZCBvZiBzd3N1c3AgLS0gdmVyeSBzaW1pbGFyIHRvIFNZU1RFTV9TSFVURE9XTiwgZXhjZXB0IHdha2UKK21heSBuZWVkIHRvIGJlIGVuYWJsZWQgb24gc29tZSBkZXZpY2VzLiBUaGlzIGFjdHVhbGx5IGhhcyBhdCBsZWFzdCAzCitzdWJ0eXBlcywgc3lzdGVtIGNhbiByZWJvb3QsIGVudGVyIFM0IGFuZCBlbnRlciBTNSBhdCB0aGUgZW5kIG9mCitzd3N1c3AuIGV2ZW50ID0gRlJFRVpFLCBmbGFncyA9IFNXU1VTUCBhbmQgb25lIG9mIFNZU1RFTV9SRUJPT1QsCitTWVNURU1fU0hVVERPV04sIFNZU1RFTV9TNAorCitTdXNwZW5kIHRvIHJhbSAgLS0gcHV0IGRldmljZXMgaW50byBsb3cgcG93ZXIgc3RhdGUuIGV2ZW50ID0gU1VTUEVORCwKK2ZsYWdzID0gU1VTUEVORF9UT19SQU0KKworRnJlZXplIGZvciBzd3N1c3Agc25hcHNob3QgLS0gc3RvcCBETUEgYW5kIGludGVycnVwdHMuIE5vIG5lZWQgdG8gcHV0CitkZXZpY2VzIGludG8gbG93IHBvd2VyIG1vZGUsIGJ1dCB5b3UgbXVzdCBiZSBhYmxlIHRvIHJlaW5pdGlhbGl6ZQorZGV2aWNlIGZyb20gc2NyYXRjaCBpbiByZXN1bWUgbWV0aG9kLiBUaGlzIGhhcyB0d28gZmxhdm9ycywgaXRzIGRvbmUKK29uY2Ugb24gc3VzcGVuZGluZyBrZXJuZWwsIG9uY2Ugb24gcmVzdW1pbmcga2VybmVsLiBldmVudCA9IEZSRUVaRSwKK2ZsYWdzID0gRFVSSU5HX1NVU1BFTkQgb3IgRFVSSU5HX1JFU1VNRQorCitEZXZpY2UgZGV0YWNoIHJlcXVlc3RlZCBmcm9tIC9zeXMgLS0gZGVpbml0aWFsaXplIGRldmljZTsgcHJvYWJseSBzYW1lIGFzCitTWVNURU1fU0hVVERPV04sIEkgZG8gbm90IHVuZGVyc3RhbmQgdGhpcyBvbmUgdG9vIG11Y2guIHByb2JhYmx5IGV2ZW50Cis9IEZSRUVaRSwgZmxhZ3MgPSBERVZfREVUQUNILgorCisjVGhlc2UgYXJlIG5vdCByZWFsbHkgZXZlbnRzIHNlbnQ6CisjCisjU3lzdGVtIGZ1bGx5IG9uIC0tIGRldmljZSBpcyB3b3JraW5nIG5vcm1hbGx5OyB0aGlzIGlzIHByb2JhYmx5IG5ldmVyCisjcGFzc2VkIHRvIHN1c3BlbmQoKSBtZXRob2QuLi4gZXZlbnQgPSBPTiwgZmxhZ3MgPSAwCisjCisjUmVhZHkgYWZ0ZXIgcmVzdW1lIC0tIHVzZXJsYW5kIGlzIG5vdyBydW5uaW5nLCBhZ2Fpbi4gVGltZSB0byBmcmVlIGFueQorI21lbW9yeSB5b3UgYXRlIGR1cmluZyBwcmVwYXJlIHRvIHN1c3BlbmQuLi4gZXZlbnQgPSBPTiwgZmxhZ3MgPQorI1JFQURZX0FGVEVSX1JFU1VNRQorIworCitEcml2ZXIgRGV0YWNoIFBvd2VyIE1hbmFnZW1lbnQKKworVGhlIGtlcm5lbCBub3cgc3VwcG9ydHMgdGhlIGFiaWxpdHkgdG8gcGxhY2UgYSBkZXZpY2UgaW4gYSBsb3ctcG93ZXIKK3N0YXRlIHdoZW4gaXQgaXMgZGV0YWNoZWQgZnJvbSBpdHMgZHJpdmVyLCB3aGljaCBoYXBwZW5zIHdoZW4gaXRzCittb2R1bGUgaXMgcmVtb3ZlZC4gCisKK0VhY2ggZGV2aWNlIGNvbnRhaW5zIGEgJ2RldGFjaF9zdGF0ZScgZmlsZSBpbiBpdHMgc3lzZnMgZGlyZWN0b3J5Cit3aGljaCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoaXMgc3RhdGUuIFJlYWRpbmcgZnJvbSB0aGlzIGZpbGUKK2Rpc3BsYXlzIHdoYXQgdGhlIGN1cnJlbnQgZGV0YWNoIHN0YXRlIGlzIHNldCB0by4gVGhpcyBpcyAwIChPbikgYnkKK2RlZmF1bHQuIEEgdXNlciBtYXkgd3JpdGUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIHRvIHRoaXMgZmlsZSBpbiB0aGUKK3JhbmdlIG9mIDEtNCBpbmNsdXNpdmUuIAorCitBIHZhbHVlIG9mIDEtMyB3aWxsIGluZGljYXRlIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGF0Citsb3ctcG93ZXIgc3RhdGUsIHdoaWNoIHdpbGwgY2F1c2UgLT5zdXNwZW5kKCkgdG8gYmUgY2FsbGVkIGZvciB0aGF0CitkZXZpY2UuIEEgdmFsdWUgb2YgNCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIHNob3VsZCBiZSBzaHV0ZG93biwgc28KKy0+c2h1dGRvd24oKSB3aWxsIGJlIGNhbGxlZCBmb3IgdGhhdCBkZXZpY2UuIAorCitUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWluaXRpYWxpemluZyB0aGUgZGV2aWNlIHdoZW4gdGhlCittb2R1bGUgaXMgcmUtaW5zZXJ0ZWQgZHVyaW5nIGl0J3MgLT5wcm9iZSgpIChvciBlcXVpdmFsZW50KSBtZXRob2QuIAorVGhlIGRyaXZlciBjb3JlIHdpbGwgbm90IGNhbGwgYW55IGV4dHJhIGZ1bmN0aW9ucyB3aGVuIGJpbmRpbmcgdGhlCitkZXZpY2UgdG8gdGhlIGRyaXZlci4gCisKK3BtX21lc3NhZ2VfdCBtZWFuaW5nCisKK3BtX21lc3NhZ2VfdCBoYXMgdHdvIGZpZWxkcy4gZXZlbnQgKCJtYWpvciIpLCBhbmQgZmxhZ3MuICBJZiBkcml2ZXIKK2RvZXMgbm90IGtub3cgZXZlbnQgY29kZSwgaXQgYWJvcnRzIHRoZSByZXF1ZXN0LCByZXR1cm5pbmcgZXJyb3IuIFNvbWUKK2RyaXZlcnMgbWF5IG5lZWQgdG8gZGVhbCB3aXRoIHNwZWNpYWwgY2FzZXMgYmFzZWQgb24gdGhlIGFjdHVhbCB0eXBlCitvZiBzdXNwZW5kIG9wZXJhdGlvbiBiZWluZyBkb25lIGF0IHRoZSBzeXN0ZW0gbGV2ZWwuIFRoaXMgaXMgd2h5Cit0aGVyZSBhcmUgZmxhZ3MuCisKK0V2ZW50IGNvZGVzIGFyZToKKworT04gLS0gbm8gbmVlZCB0byBkbyBhbnl0aGluZyBleGNlcHQgc3BlY2lhbCBjYXNlcyBsaWtlIGJyb2tlbgorSFcuCisKKyMgTk9USUZJQ0FUSU9OIC0tIHByZXR0eSBtdWNoIHNhbWUgYXMgT04/CisKK0ZSRUVaRSAtLSBzdG9wIERNQSBhbmQgaW50ZXJydXB0cywgYW5kIGJlIHByZXBhcmVkIHRvIHJlaW5pdCBIVyBmcm9tCitzY3JhdGNoLiBUaGF0IHByb2JhYmx5IG1lYW5zIHN0b3AgYWNjZXB0aW5nIHVwc3RyZWFtIHJlcXVlc3RzLCB0aGUKK2FjdHVhbCBwb2xpY3kgb2Ygd2hhdCB0byBkbyB3aXRoIHRoZW0gYmVpbmcgc3BlY2lmaWMgdG8gYSBnaXZlbgorZHJpdmVyLiBJdCdzIGFjY2VwdGFibGUgZm9yIGEgbmV0d29yayBkcml2ZXIgdG8ganVzdCBkcm9wIHBhY2tldHMKK3doaWxlIGEgYmxvY2sgZHJpdmVyIGlzIGV4cGVjdGVkIHRvIGJsb2NrIHRoZSBxdWV1ZSBzbyBubyByZXF1ZXN0IGlzCitsb3N0LiAoVXNlIElERSBhcyBhbiBleGFtcGxlIG9uIGhvdyB0byBkbyB0aGF0KS4gRlJFRVpFIHJlcXVpcmVzIG5vCitwb3dlciBzdGF0ZSBjaGFuZ2UsIGFuZCBpdCdzIGV4cGVjdGVkIGZvciBkcml2ZXJzIHRvIGJlIGFibGUgdG8KK3F1aWNrbHkgdHJhbnNpdGlvbiBiYWNrIHRvIG9wZXJhdGluZyBzdGF0ZS4KKworU1VTUEVORCAtLSBsaWtlIEZSRUVaRSwgYnV0IGFsc28gcHV0IGhhcmR3YXJlIGludG8gbG93LXBvd2VyIHN0YXRlLiBJZgordGhlcmUncyBuZWVkIHRvIGRpc3Rpbmd1aXNoIHNldmVyYWwgbGV2ZWxzIG9mIHNsZWVwLCBhZGRpdGlvbmFsIGZsYWcKK2lzIHByb2JhYmx5IGJlc3Qgd2F5IHRvIGRvIHRoYXQuCisKK1RyYW5zaXRpb25zIGFyZSBvbmx5IGZyb20gYSByZXN1bWVkIHN0YXRlIHRvIGEgc3VzcGVuZGVkIHN0YXRlLCBuZXZlcgorYmV0d2VlbiAyIHN1c3BlbmRlZCBzdGF0ZXMuIChPTiAtPiBGUkVFWkUgb3IgT04gLT4gU1VTUEVORCBjYW4gaGFwcGVuLAorRlJFRVpFIC0+IFNVU1BFTkQgb3IgU1VTUEVORCAtPiBGUkVFWkUgY2FuIG5vdCkuCisKK0FsbCBldmVudHMgYXJlOgorCitbTk9URSBOT1RFIE5PVEU6IElmIHlvdSBhcmUgZHJpdmVyIGF1dGhvciwgeW91IHNob3VsZCBub3QgY2FyZTsgeW91CitzaG91bGQgb25seSBsb29rIGF0IGV2ZW50LCBhbmQgaWdub3JlIGZsYWdzLl0KKworI1ByZXBhcmUgZm9yIHN1c3BlbmQgLS0gdXNlcmxhbmQgaXMgc3RpbGwgcnVubmluZyBidXQgd2UgYXJlIGdvaW5nIHRvCisjZW50ZXIgc3VzcGVuZCBzdGF0ZS4gVGhpcyBnaXZlcyBkcml2ZXJzIGNoYW5jZSB0byBsb2FkIGZpcm13YXJlIGZyb20KKyNkaXNrIGFuZCBzdG9yZSBpdCBpbiBtZW1vcnksIG9yIGRvIG90aGVyIGFjdGl2aXRpZXMgdGFodCByZXF1aXJlCisjb3BlcmF0aW5nIHVzZXJsYW5kLCBhYmlsaXR5IHRvIGttYWxsb2MgR0ZQX0tFUk5FTCwgZXRjLi4uIEFsbCBvZiB0aGVzZQorI2FyZSBmb3JiaWRlbiBvbmNlIHRoZSBzdXNwZW5kIGRhbmNlIGlzIHN0YXJ0ZWQuLiBldmVudCA9IE9OLCBmbGFncyA9CisjUFJFUEFSRV9UT19TVVNQRU5ECisKK0FwbSBzdGFuZGJ5IC0tIHByZXBhcmUgZm9yIEFQTSBldmVudC4gUXVpZXNjZSBkZXZpY2VzIHRvIG1ha2UgbGlmZQorZWFzaWVyIGZvciBBUE0gQklPUy4gZXZlbnQgPSBGUkVFWkUsIGZsYWdzID0gQVBNX1NUQU5EQlkKKworQXBtIHN1c3BlbmQgLS0gc2FtZSBhcyBBUE1fU1RBTkRCWSwgYnV0IGl0IHdlIHNob3VsZCBwcm9iYWJseSBhdm9pZAorc3Bpbm5pbmcgZG93biBkaXNrcy4gZXZlbnQgPSBGUkVFWkUsIGZsYWdzID0gQVBNX1NVU1BFTkQKKworU3lzdGVtIGhhbHQsIHJlYm9vdCAtLSBxdWllc2NlIGRldmljZXMgdG8gbWFrZSBsaWZlIGVhc2llciBmb3IgQklPUy4gZXZlbnQKKz0gRlJFRVpFLCBmbGFncyA9IFNZU1RFTV9IQUxUIG9yIFNZU1RFTV9SRUJPT1QKKworU3lzdGVtIHNodXRkb3duIC0tIGF0IGxlYXN0IGRpc2tzIG5lZWQgdG8gYmUgc3B1biBkb3duLCBvciBkYXRhIG1heSBiZQorbG9zdC4gUXVpZXNjZSBkZXZpY2VzLCBqdXN0IHRvIG1ha2UgbGlmZSBlYXNpZXIgZm9yIEJJT1MuIGV2ZW50ID0KK0ZSRUVaRSwgZmxhZ3MgPSBTWVNURU1fU0hVVERPV04KKworS2V4ZWMgICAgLS0gdHVybiBvZmYgRE1BcyBhbmQgcHV0IGhhcmR3YXJlIGludG8gc29tZSBzdGF0ZSB3aGVyZSBuZXcKK2tlcm5lbCBjYW4gdGFrZSBvdmVyLiBldmVudCA9IEZSRUVaRSwgZmxhZ3MgPSBLRVhFQworCitQb3dlcmRvd24gYXQgZW5kIG9mIHN3c3VzcCAtLSB2ZXJ5IHNpbWlsYXIgdG8gU1lTVEVNX1NIVVRET1dOLCBleGNlcHQgd2FrZQorbWF5IG5lZWQgdG8gYmUgZW5hYmxlZCBvbiBzb21lIGRldmljZXMuIFRoaXMgYWN0dWFsbHkgaGFzIGF0IGxlYXN0IDMKK3N1YnR5cGVzLCBzeXN0ZW0gY2FuIHJlYm9vdCwgZW50ZXIgUzQgYW5kIGVudGVyIFM1IGF0IHRoZSBlbmQgb2YKK3N3c3VzcC4gZXZlbnQgPSBGUkVFWkUsIGZsYWdzID0gU1dTVVNQIGFuZCBvbmUgb2YgU1lTVEVNX1JFQk9PVCwKK1NZU1RFTV9TSFVURE9XTiwgU1lTVEVNX1M0CisKK1N1c3BlbmQgdG8gcmFtICAtLSBwdXQgZGV2aWNlcyBpbnRvIGxvdyBwb3dlciBzdGF0ZS4gZXZlbnQgPSBTVVNQRU5ELAorZmxhZ3MgPSBTVVNQRU5EX1RPX1JBTQorCitGcmVlemUgZm9yIHN3c3VzcCBzbmFwc2hvdCAtLSBzdG9wIERNQSBhbmQgaW50ZXJydXB0cy4gTm8gbmVlZCB0byBwdXQKK2RldmljZXMgaW50byBsb3cgcG93ZXIgbW9kZSwgYnV0IHlvdSBtdXN0IGJlIGFibGUgdG8gcmVpbml0aWFsaXplCitkZXZpY2UgZnJvbSBzY3JhdGNoIGluIHJlc3VtZSBtZXRob2QuIFRoaXMgaGFzIHR3byBmbGF2b3JzLCBpdHMgZG9uZQorb25jZSBvbiBzdXNwZW5kaW5nIGtlcm5lbCwgb25jZSBvbiByZXN1bWluZyBrZXJuZWwuIGV2ZW50ID0gRlJFRVpFLAorZmxhZ3MgPSBEVVJJTkdfU1VTUEVORCBvciBEVVJJTkdfUkVTVU1FCisKK0RldmljZSBkZXRhY2ggcmVxdWVzdGVkIGZyb20gL3N5cyAtLSBkZWluaXRpYWxpemUgZGV2aWNlOyBwcm9hYmx5IHNhbWUgYXMKK1NZU1RFTV9TSFVURE9XTiwgSSBkbyBub3QgdW5kZXJzdGFuZCB0aGlzIG9uZSB0b28gbXVjaC4gcHJvYmFibHkgZXZlbnQKKz0gRlJFRVpFLCBmbGFncyA9IERFVl9ERVRBQ0guCisKKyNUaGVzZSBhcmUgbm90IHJlYWxseSBldmVudHMgc2VudDoKKyMKKyNTeXN0ZW0gZnVsbHkgb24gLS0gZGV2aWNlIGlzIHdvcmtpbmcgbm9ybWFsbHk7IHRoaXMgaXMgcHJvYmFibHkgbmV2ZXIKKyNwYXNzZWQgdG8gc3VzcGVuZCgpIG1ldGhvZC4uLiBldmVudCA9IE9OLCBmbGFncyA9IDAKKyMKKyNSZWFkeSBhZnRlciByZXN1bWUgLS0gdXNlcmxhbmQgaXMgbm93IHJ1bm5pbmcsIGFnYWluLiBUaW1lIHRvIGZyZWUgYW55CisjbWVtb3J5IHlvdSBhdGUgZHVyaW5nIHByZXBhcmUgdG8gc3VzcGVuZC4uLiBldmVudCA9IE9OLCBmbGFncyA9CisjUkVBRFlfQUZURVJfUkVTVU1FCisjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2ludGVyZmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2ludGVyZmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlYmRhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvaW50ZXJmYWNlLnR4dApAQCAtMCwwICsxLDQzIEBACitQb3dlciBNYW5hZ2VtZW50IEludGVyZmFjZQorCisKK1RoZSBwb3dlciBtYW5hZ2VtZW50IHN1YnN5c3RlbSBwcm92aWRlcyBhIHVuaWZpZWQgc3lzZnMgaW50ZXJmYWNlIHRvIAordXNlcnNwYWNlLCByZWdhcmRsZXNzIG9mIHdoYXQgYXJjaGl0ZWN0dXJlIG9yIHBsYXRmb3JtIG9uZSBpcworcnVubmluZy4gVGhlIGludGVyZmFjZSBleGlzdHMgaW4gL3N5cy9wb3dlci8gZGlyZWN0b3J5IChhc3N1bWluZyBzeXNmcworaXMgbW91bnRlZCBhdCAvc3lzKS4gCisKKy9zeXMvcG93ZXIvc3RhdGUgY29udHJvbHMgc3lzdGVtIHBvd2VyIHN0YXRlLiBSZWFkaW5nIGZyb20gdGhpcyBmaWxlCityZXR1cm5zIHdoYXQgc3RhdGVzIGFyZSBzdXBwb3J0ZWQsIHdoaWNoIGlzIGhhcmQtY29kZWQgdG8gJ3N0YW5kYnknCisoUG93ZXItT24gU3VzcGVuZCksICdtZW0nIChTdXNwZW5kLXRvLVJBTSksIGFuZCAnZGlzaycKKyhTdXNwZW5kLXRvLURpc2spLiAKKworV3JpdGluZyB0byB0aGlzIGZpbGUgb25lIG9mIHRob3NlIHN0cmluZ3MgY2F1c2VzIHRoZSBzeXN0ZW0gdG8KK3RyYW5zaXRpb24gaW50byB0aGF0IHN0YXRlLiBQbGVhc2Ugc2VlIHRoZSBmaWxlCitEb2N1bWVudGF0aW9uL3Bvd2VyL3N0YXRlcy50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgZWFjaCBvZiB0aG9zZQorc3RhdGVzLgorCisKKy9zeXMvcG93ZXIvZGlzayBjb250cm9scyB0aGUgb3BlcmF0aW5nIG1vZGUgb2YgdGhlIHN1c3BlbmQtdG8tZGlzaworbWVjaGFuaXNtLiBTdXNwZW5kLXRvLWRpc2sgY2FuIGJlIGhhbmRsZWQgaW4gc2V2ZXJhbCB3YXlzLiBUaGUKK2dyZWF0ZXN0IGRpc3RpbmN0aW9uIGlzIHdobyB3cml0ZXMgbWVtb3J5IHRvIGRpc2sgLSB0aGUgZmlybXdhcmUgb3IKK3RoZSBrZXJuZWwuIElmIHRoZSBmaXJtd2FyZSBkb2VzIGl0LCB3ZSBhc3N1bWUgdGhhdCBpdCBhbHNvIGhhbmRsZXMKK3N1c3BlbmRpbmcgdGhlIHN5c3RlbS4gCisKK0lmIHRoZSBrZXJuZWwgZG9lcyBpdCwgdGhlbiB3ZSBoYXZlIHRocmVlIG9wdGlvbnMgZm9yIHB1dHRpbmcgdGhlIHN5c3RlbQordG8gc2xlZXAgLSB1c2luZyB0aGUgcGxhdGZvcm0gZHJpdmVyIChlLmcuIEFDUEkgb3Igb3RoZXIgUE0KK3JlZ2lzdGVycyksIHBvd2VyaW5nIG9mZiB0aGUgc3lzdGVtIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtIChmb3IKK3Rlc3RpbmcpLiBUaGUgc3lzdGVtIHdpbGwgc3VwcG9ydCBlaXRoZXIgJ2Zpcm13YXJlJyBvciAncGxhdGZvcm0nLCBhbmQKK3RoYXQgaXMga25vd24gYSBwcmlvcmkuIEJ1dCwgdGhlIHVzZXIgbWF5IGNob29zZSAnc2h1dGRvd24nIG9yCisncmVib290JyBhcyBhbHRlcm5hdGl2ZXMuIAorCitSZWFkaW5nIGZyb20gdGhpcyBmaWxlIHdpbGwgZGlzcGxheSB3aGF0IHRoZSBtb2RlIGlzIGN1cnJlbnRseSBzZXQKK3RvLiBXcml0aW5nIHRvIHRoaXMgZmlsZSB3aWxsIGFjY2VwdCBvbmUgb2YKKworICAgICAgICdmaXJtd2FyZScKKyAgICAgICAncGxhdGZvcm0nCisgICAgICAgJ3NodXRkb3duJworICAgICAgICdyZWJvb3QnCisKK0l0IHdpbGwgb25seSBjaGFuZ2UgdG8gJ2Zpcm13YXJlJyBvciAncGxhdGZvcm0nIGlmIHRoZSBzeXN0ZW0gc3VwcG9ydHMKK2l0LiAKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9rZXJuZWxfdGhyZWFkcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2tlcm5lbF90aHJlYWRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGI1NDgxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9rZXJuZWxfdGhyZWFkcy50eHQKQEAgLTAsMCArMSw0MSBAQAorS0VSTkVMIFRIUkVBRFMKKworCitGcmVlemVyCisKK1Vwb24gZW50ZXJpbmcgYSBzdXNwZW5kZWQgc3RhdGUgdGhlIHN5c3RlbSB3aWxsIGZyZWV6ZSBhbGwKK3Rhc2tzLiBUaGlzIGlzIGRvbmUgYnkgZGVsaXZlcmluZyBwc2V1ZG9zaWduYWxzLiBUaGlzIGFmZmVjdHMKK2tlcm5lbCB0aHJlYWRzLCB0b28uIFRvIHN1Y2Nlc3NmdWxseSBmcmVlemUgYSBrZXJuZWwgdGhyZWFkCit0aGUgdGhyZWFkIGhhcyB0byBjaGVjayBmb3IgdGhlIHBzZXVkb3NpZ25hbCBhbmQgZW50ZXIgdGhlCityZWZyaWdlcmF0b3IuIENvZGUgdG8gZG8gdGhpcyBsb29rcyBsaWtlIHRoaXM6CisKKwlkbyB7CisJCWh1Yl9ldmVudHMoKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGtodWJkX3dhaXQsICFsaXN0X2VtcHR5KCZodWJfZXZlbnRfbGlzdCkpOworCQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9GUkVFWkUpCisJCQlyZWZyaWdlcmF0b3IoUEZfRlJFRVpFKTsKKwl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOworCitmcm9tIGRyaXZlcnMvdXNiL2NvcmUvaHViLmM6Omh1Yl90aHJlYWQoKQorCisKK1RoZSBVbmZyZWV6YWJsZQorCitTb21lIGtlcm5lbCB0aHJlYWRzIGhvd2V2ZXIsIG11c3Qgbm90IGJlIGZyb3plbi4gVGhlIGtlcm5lbCBtdXN0CitiZSBhYmxlIHRvIGZpbmlzaCBwZW5kaW5nIElPIG9wZXJhdGlvbnMgYW5kIGxhdGVyIG9uIGJlIGFibGUgdG8KK3dyaXRlIHRoZSBtZW1vcnkgaW1hZ2UgdG8gZGlzay4gS2VybmVsIHRocmVhZHMgbmVlZGVkIHRvIGRvIElPCittdXN0IHN0YXkgYXdha2UuIFN1Y2ggdGhyZWFkcyBtdXN0IG1hcmsgdGhlbXNlbHZlcyB1bmZyZWV6YWJsZQorbGlrZSB0aGlzOgorCisJLyoKKwkgKiBUaGlzIHRocmVhZCBkb2Vzbid0IG5lZWQgYW55IHVzZXItbGV2ZWwgYWNjZXNzLAorCSAqIHNvIGdldCByaWQgb2YgYWxsIG91ciByZXNvdXJjZXMuCisJICovCisJZGFlbW9uaXplKCJ1c2Itc3RvcmFnZSIpOworCisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisKK2Zyb20gZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYzo6dXNiX3N0b3JfY29udHJvbF90aHJlYWQoKQorCitTdWNoIGRyaXZlcnMgYXJlIHRoZW1zZWx2ZXMgcmVzcG9uc2libGUgZm9yIHN0YXlpbmcgcXVpZXQgZHVyaW5nCit0aGUgYWN0dWFsIHNuYXBzaG90dGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcGNpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODU0MjhlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kudHh0CkBAIC0wLDAgKzEsMzMyIEBACisKK1BDSSBQb3dlciBNYW5hZ2VtZW50Cit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBbiBvdmVydmlldyBvZiB0aGUgY29uY2VwdHMgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgTGludXgga2VybmVsCisKK1BhdHJpY2sgTW9jaGVsIDxtb2NoZWxAdHJhbnNtZXRhLmNvbT4KKyhhbmQgb3RoZXJzKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gT3ZlcnZpZXcKKzIuIEhvdyB0aGUgUENJIFN1YnN5c3RlbSBEb2VzIFBvd2VyIE1hbmFnZW1lbnQKKzMuIFBDSSBVdGlsaXR5IEZ1bmN0aW9ucworNC4gUENJIERldmljZSBEcml2ZXJzCis1LiBSZXNvdXJjZXMKKworMS4gT3ZlcnZpZXcKK35+fn5+fn5+fn5+CisKK1RoZSBQQ0kgUG93ZXIgTWFuYWdlbWVudCBTcGVjaWZpY2F0aW9uIHdhcyBpbnRyb2R1Y2VkIGJldHdlZW4gdGhlIFBDSSAyLjEgYW5kCitQQ0kgMi4yIFNwZWNpZmljYXRpb25zLiBJdCBhIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgY29udHJvbGxpbmcgdmFyaW91cyAKK3Bvd2VyIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4KKworSW1wbGVtZW50YXRpb24gb2YgdGhlIFBDSSBQTSBTcGVjIGlzIG9wdGlvbmFsLCBhcyBhcmUgc2V2ZXJhbCBzdWItY29tcG9uZW50cyBvZgoraXQuIElmIGEgZGV2aWNlIHN1cHBvcnRzIHRoZSBQQ0kgUE0gU3BlYywgdGhlIGRldmljZSB3aWxsIGhhdmUgYW4gOCBieXRlCitjYXBhYmlsaXR5IGZpZWxkIGluIGl0cyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGRlc2NyaWJlCithbmQgY29udHJvbCB0aGUgc3RhbmRhcmQgUENJIHBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMuCisKK1RoZSBQQ0kgUE0gc3BlYyBkZWZpbmVzIDQgb3BlcmF0aW5nIHN0YXRlcyBmb3IgZGV2aWNlcyAoRDAgLSBEMykgYW5kIGZvciBidXNlcworKEIwIC0gQjMpLiBUaGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBsZXNzIHBvd2VyIHRoZSBkZXZpY2UgY29uc3VtZXMuIEhvd2V2ZXIsCit0aGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBsb25nZXIgdGhlIGxhdGVuY3kgaXMgZm9yIHRoZSBkZXZpY2UgdG8gcmV0dXJuIHRvIAorYW4gb3BlcmF0aW9uYWwgc3RhdGUgKEQwKS4KKworVGhlcmUgYXJlIGFjdHVhbGx5IHR3byBEMyBzdGF0ZXMuICBXaGVuIHNvbWVvbmUgdGFsa3MgYWJvdXQgRDMsIHRoZXkgdXN1YWxseQorbWVhbiBEM2hvdCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gQUNQSSBEMiBzdGF0ZSAocG93ZXIgaXMgcmVkdWNlZCwgdGhlCitkZXZpY2UgbWF5IGxvc2Ugc29tZSBjb250ZXh0KS4gIEJ1dCB0aGV5IG1heSBhbHNvIG1lYW4gRDNjb2xkLCB3aGljaCBpcyBhbgorQUNQSSBEMyBzdGF0ZSAocG93ZXIgaXMgZnVsbHkgb2ZmLCBhbGwgc3RhdGUgd2FzIGRpc2NhcmRlZCk7IG9yIGJvdGguCisKK0J1cyBwb3dlciBtYW5hZ2VtZW50IGlzIG5vdCBjb3ZlcmVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LgorCitOb3RlIHRoYXQgYWxsIFBDSSBkZXZpY2VzIHN1cHBvcnQgRDAgYW5kIEQzY29sZCBieSBkZWZhdWx0LCByZWdhcmRsZXNzIG9mCit3aGV0aGVyIG9yIG5vdCB0aGV5IGltcGxlbWVudCBhbnkgb2YgdGhlIFBDSSBQTSBzcGVjLgorCitUaGUgcG9zc2libGUgc3RhdGUgdHJhbnNpdGlvbnMgdGhhdCBhIGRldmljZSBjYW4gdW5kZXJnbyBhcmU6CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEN1cnJlbnQgU3RhdGUgfCBOZXcgU3RhdGUgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRDAgICAgICAgICAgICB8IEQxLCBEMiwgRDN8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBEMSAgICAgICAgICAgIHwgRDIsIEQzICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEQyICAgICAgICAgICAgfCBEMyAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRDEsIEQyLCBEMyAgICB8IEQwICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitOb3RlIHRoYXQgd2hlbiB0aGUgc3lzdGVtIGlzIGVudGVyaW5nIGEgZ2xvYmFsIHN1c3BlbmQgc3RhdGUsIGFsbCBkZXZpY2VzIHdpbGwKK2JlIHBsYWNlZCBpbnRvIEQzIGFuZCB3aGVuIHJlc3VtaW5nLCBhbGwgZGV2aWNlcyB3aWxsIGJlIHBsYWNlZCBpbnRvIEQwLgorSG93ZXZlciwgd2hlbiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIG90aGVyIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBwb3NzaWJsZS4KKworMi4gSG93IFRoZSBQQ0kgU3Vic3lzdGVtIEhhbmRsZXMgUG93ZXIgTWFuYWdlbWVudAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgUENJIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzZWQgaW5kaXJlY3RseSB2aWEgdGhlIFBvd2VyCitNYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXQgYm9vdCwgdGhlIFBDSSBkcml2ZXIgcmVnaXN0ZXJzIGEgcG93ZXIgbWFuYWdlbWVudAorY2FsbGJhY2sgd2l0aCB0aGF0IGxheWVyLiBVcG9uIGVudGVyaW5nIGEgc3VzcGVuZCBzdGF0ZSwgdGhlIFBNIGxheWVyIGl0ZXJhdGVzCit0aHJvdWdoIGFsbCBvZiBpdHMgcmVnaXN0ZXJlZCBjYWxsYmFja3MuIFRoaXMgY3VycmVudGx5IHRha2VzIHBsYWNlIG9ubHkgZHVyaW5nCitBUE0gc3RhdGUgdHJhbnNpdGlvbnMuCisKK1Vwb24gZ29pbmcgdG8gc2xlZXAsIHRoZSBQQ0kgc3Vic3lzdGVtIHdhbGtzIGl0cyBkZXZpY2UgdHJlZSB0d2ljZS4gQm90aCB0aW1lcywKK2l0IGRvZXMgYSBkZXB0aCBmaXJzdCB3YWxrIG9mIHRoZSBkZXZpY2UgdHJlZS4gVGhlIGZpcnN0IHdhbGsgc2F2ZXMgZWFjaCBvZiB0aGUKK2RldmljZSdzIHN0YXRlIGFuZCBjaGVja3MgZm9yIGRldmljZXMgdGhhdCB3aWxsIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGVudGVyaW5nCithIGdsb2JhbCBwb3dlciBzdGF0ZS4gVGhlIG5leHQgd2FsayB0aGVuIHBsYWNlcyB0aGUgZGV2aWNlcyBpbiBhIGxvdyBwb3dlcgorc3RhdGUuCisKK1RoZSBmaXJzdCB3YWxrIGFsbG93cyBhIGdyYWNlZnVsIHJlY292ZXJ5IGluIHRoZSBldmVudCBvZiBhIGZhaWx1cmUsIHNpbmNlIG5vbmUKK29mIHRoZSBkZXZpY2VzIGhhdmUgYWN0dWFsbHkgYmVlbiBwb3dlcmVkIGRvd24uCisKK0luIGJvdGggd2Fsa3MsIGluIHBhcnRpY3VsYXIgdGhlIHNlY29uZCwgYWxsIGNoaWxkcmVuIG9mIGEgYnJpZGdlIGFyZSB0b3VjaGVkCitiZWZvcmUgdGhlIGFjdHVhbCBicmlkZ2UgaXRzZWxmLiBUaGlzIGFsbG93cyB0aGUgYnJpZGdlIHRvIHJldGFpbiBwb3dlciB3aGlsZQoraXRzIGNoaWxkcmVuIGFyZSBiZWluZyBhY2Nlc3NlZC4KKworVXBvbiByZXN1bWluZyBmcm9tIHNsZWVwLCBqdXN0IHRoZSBvcHBvc2l0ZSBtdXN0IGJlIHRydWU6IGFsbCBicmlkZ2VzIG11c3QgYmUKK3Bvd2VyZWQgb24gYW5kIHJlc3RvcmVkIGJlZm9yZSB0aGVpciBjaGlsZHJlbiBhcmUgcG93ZXJlZCBvbi4gVGhpcyBpcyBlYXNpbHkKK2FjY29tcGxpc2hlZCB3aXRoIGEgYnJlYWR0aC1maXJzdCB3YWxrIG9mIHRoZSBQQ0kgZGV2aWNlIHRyZWUuCisKKworMy4gUENJIFV0aWxpdHkgRnVuY3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgYXJlIGhlbHBlciBmdW5jdGlvbnMgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGJ5IGluZGl2aWR1YWwgZGV2aWNlIGRyaXZlcnMuCitBc3N1bWluZyB0aGF0IGEgZGV2aWNlIGJlaGF2ZXMgYXMgYWR2ZXJ0aXNlZCwgdGhlc2Ugc2hvdWxkIGJlIGFwcGxpY2FibGUgaW4gbW9zdAorY2FzZXMuIEhvd2V2ZXIsIHJlc3VsdHMgbWF5IHZhcnkuCisKK05vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG5ldmVyIGltcGxpY2l0bHkgY2FsbGVkIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyCitpcyBhbHdheXMgcmVzcG9uc2libGUgZm9yIGRlY2lkaW5nIHdoZW4gYW5kIGlmIHRvIGNhbGwgdGhlc2UuCisKKworcGNpX3NhdmVfc3RhdGUKKy0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCXBjaV9zYXZlX3N0YXRlKGRldiwgYnVmZmVyKTsKKworRGVzY3JpcHRpb246CisJU2F2ZSBmaXJzdCA2NCBieXRlcyBvZiBQQ0kgY29uZmlnIHNwYWNlLiBCdWZmZXIgbXVzdCBiZSBhbGxvY2F0ZWQgYnkKKwljYWxsZXIuCisKKworcGNpX3Jlc3RvcmVfc3RhdGUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCXBjaV9yZXN0b3JlX3N0YXRlKGRldiwgYnVmZmVyKTsKKworRGVzY3JpcHRpb246CisJUmVzdG9yZSBwcmV2aW91c2x5IHNhdmVkIGNvbmZpZyBzcGFjZS4gKEZpcnN0IDY0IGJ5dGVzIG9ubHkpOworCisJSWYgYnVmZmVyIGlzIE5VTEwsIHRoZW4gcmVzdG9yZSB3aGF0IGluZm9ybWF0aW9uIHdlIGtub3cgYWJvdXQgdGhlCisJZGV2aWNlIGZyb20gYm9vdHVwOiBCQVJzIGFuZCBpbnRlcnJ1cHQgbGluZS4KKworCitwY2lfc2V0X3Bvd2VyX3N0YXRlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBzdGF0ZSk7CisKK0Rlc2NyaXB0aW9uOgorCVRyYW5zaXRpb24gZGV2aWNlIHRvIGxvdyBwb3dlciBzdGF0ZSB1c2luZyBQQ0kgUE0gQ2FwYWJpbGl0aWVzCisJcmVnaXN0ZXJzLgorCisJV2lsbCBmYWlsIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisJLSBJZiBzdGF0ZSBpcyBsZXNzIHRoYW4gY3VycmVudCBzdGF0ZSwgYnV0IG5vdCBEMCAoaWxsZWdhbCB0cmFuc2l0aW9uKQorCS0gRGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQTSBDYXBhYmlsaXRpZXMKKwktIERldmljZSBkb2VzIG5vdCBzdXBwb3J0IHJlcXVlc3RlZCBzdGF0ZQorCisKK3BjaV9lbmFibGVfd2FrZQorLS0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCXBjaV9lbmFibGVfd2FrZShkZXYsIHN0YXRlLCBlbmFibGUpOworCitEZXNjcmlwdGlvbjoKKwlFbmFibGUgZGV2aWNlIHRvIGdlbmVyYXRlIFBNRSMgZHVyaW5nIGxvdyBwb3dlciBzdGF0ZSB1c2luZyBQQ0kgUE0gCisJQ2FwYWJpbGl0aWVzLgorCisJQ2hlY2tzIHdoZXRoZXIgaWYgZGV2aWNlIHN1cHBvcnRzIGdlbmVyYXRpbmcgUE1FIyBmcm9tIHJlcXVlc3RlZCBzdGF0ZQorCWFuZCBmYWlsIGlmIGl0IGRvZXMgbm90LCB1bmxlc3MgZW5hYmxlID09IDAgKHJlcXVlc3QgaXMgdG8gZGlzYWJsZSB3YWtlCisJZXZlbnRzLCB3aGljaCBpcyBpbXBsaWNpdCBpZiBpdCBkb2Vzbid0IGV2ZW4gc3VwcG9ydCBpdCBpbiB0aGUgZmlyc3QKKwlwbGFjZSkuCisKKwlOb3RlIHRoYXQgdGhlIFBNQyBSZWdpc3RlciBpbiB0aGUgZGV2aWNlJ3MgUE0gQ2FwYWJpbHRpZXMgaGFzIGEgYml0bWFzaworCW9mIHRoZSBzdGF0ZXMgaXQgc3VwcG9ydHMgZ2VuZXJhdGluZyBQTUUjIGZyb20uIEQzaG90IGlzIGJpdCAzIGFuZAorCUQzY29sZCBpcyBiaXQgNC4gU28sIHdoaWxlIGEgdmFsdWUgb2YgNCBhcyB0aGUgc3RhdGUgbWF5IG5vdCBzZWVtCisJc2VtYW50aWNhbGx5IGNvcnJlY3QsIGl0IGlzLiAKKworCis0LiBQQ0kgRGV2aWNlIERyaXZlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgaW5kaXZpZHVhbCBkcml2ZXJzLCBhbmQgYXJlIGRlZmluZWQgaW4gCitzdHJ1Y3QgcGNpX2RyaXZlcjoKKworICAgICAgICBpbnQgICgqc2F2ZV9zdGF0ZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSk7CisgICAgICAgIGludCAgKCpzdXNwZW5kKSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHN0YXRlKTsKKyAgICAgICAgaW50ICAoKnJlc3VtZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworICAgICAgICBpbnQgICgqZW5hYmxlX3dha2UpIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUsIGludCBlbmFibGUpOworCisKK3NhdmVfc3RhdGUKKy0tLS0tLS0tLS0KKworVXNhZ2U6CisKK2lmIChkZXYtPmRyaXZlciAmJiBkZXYtPmRyaXZlci0+c2F2ZV9zdGF0ZSkKKwlkZXYtPmRyaXZlci0+c2F2ZV9zdGF0ZShkZXYsc3RhdGUpOworCitUaGUgZHJpdmVyIHNob3VsZCB1c2UgdGhpcyBjYWxsYmFjayB0byBzYXZlIGRldmljZSBzdGF0ZS4gSXQgc2hvdWxkIHRha2UgaW50bworYWNjb3VudCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGV2aWNlIGFuZCB0aGUgcmVxdWVzdGVkIHN0YXRlIGluIG9yZGVyIHRvCithdm9pZCBhbnkgdW5uZWNlc3Nhcnkgb3BlcmF0aW9ucy4KKworRm9yIGV4YW1wbGUsIGEgdmlkZW8gY2FyZCB0aGF0IHN1cHBvcnRzIGFsbCA0IHN0YXRlcyAoRDAtRDMpLCBhbGwgY29udHJvbGxlcgorY29udGV4dCBpcyBwcmVzZXJ2ZWQgd2hlbiBlbnRlcmluZyBEMSwgYnV0IHRoZSBzY3JlZW4gaXMgcGxhY2VkIGludG8gYSBsb3cgcG93ZXIKK3N0YXRlIChibGFua2VkKS4gCisKK1RoZSBkcml2ZXIgY2FuIGFsc28gaW50ZXJwcmV0IHRoaXMgZnVuY3Rpb24gYXMgYSBub3RpZmljYXRpb24gdGhhdCBpdCBtYXkgYmUKK2VudGVyaW5nIGEgc2xlZXAgc3RhdGUgaW4gdGhlIG5lYXIgZnV0dXJlLiBJZiBpdCBrbm93cyB0aGF0IHRoZSBkZXZpY2UgY2Fubm90CitlbnRlciB0aGUgcmVxdWVzdGVkIHN0YXRlLCBlaXRoZXIgYmVjYXVzZSBvZiBsYWNrIG9mIHN1cHBvcnQgZm9yIGl0LCBvciBiZWNhdXNlCit0aGUgZGV2aWNlIGlzIG1pZGRsZSBvZiBzb21lIGNyaXRpY2FsIG9wZXJhdGlvbiwgdGhlbiBpdCBzaG91bGQgZmFpbC4KKworVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgdG8gc2V0IGFueSBzdGF0ZSBpbiB0aGUgZGV2aWNlIG9yIHRoZSBkcml2ZXIKK2JlY2F1c2UgdGhlIGRldmljZSBtYXkgbm90IGFjdHVhbGx5IGVudGVyIHRoZSBzbGVlcCBzdGF0ZSAoZS5nLiBhbm90aGVyIGRyaXZlcgorbGF0ZXIgY2F1c2VzIGNhdXNlcyBhIGdsb2JhbCBzdGF0ZSB0cmFuc2l0aW9uIHRvIGZhaWwpLgorCitOb3RlIHRoYXQgaW4gaW50ZXJtZWRpYXRlIGxvdyBwb3dlciBzdGF0ZXMsIGEgZGV2aWNlJ3MgSS9PIGFuZCBtZW1vcnkgc3BhY2VzIG1heQorYmUgZGlzYWJsZWQgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIGluIHN1YnNlcXVlbnQgdHJhbnNpdGlvbnMgdG8gbG93ZXIgcG93ZXIKK3N0YXRlcy4KKworCitzdXNwZW5kCistLS0tLS0tCisKK1VzYWdlOgorCitpZiAoZGV2LT5kcml2ZXIgJiYgZGV2LT5kcml2ZXItPnN1c3BlbmQpCisJZGV2LT5kcml2ZXItPnN1c3BlbmQoZGV2LHN0YXRlKTsKKworQSBkcml2ZXIgdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIGFjdHVhbGx5IHRyYW5zaXRpb24gdGhlIGRldmljZSBpbnRvIGEgbG93IHBvd2VyCitzdGF0ZS4gVGhpcyBzaG91bGQgaW5jbHVkZSBkaXNhYmxpbmcgSS9PLCBJUlFzLCBhbmQgYnVzLW1hc3RlcmluZywgYXMgd2VsbCBhcworcGh5c2ljYWxseSB0cmFuc2l0aW9uaW5nIHRoZSBkZXZpY2UgdG8gYSBsb3dlciBwb3dlciBzdGF0ZTsgaXQgbWF5IGFsc28gaW5jbHVkZQorY2FsbHMgdG8gcGNpX2VuYWJsZV93YWtlKCkuCisKK0J1cyBtYXN0ZXJpbmcgbWF5IGJlIGRpc2FibGVkIGJ5IGRvaW5nOgorCitwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKworRm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IHRoZSBQQ0kgUE0gU3BlYywgdGhpcyBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIGRldmljZSdzCitwb3dlciBzdGF0ZSB0byBtYXRjaCB0aGUgc3VzcGVuZCgpIHBhcmFtZXRlcjoKKworcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsc3RhdGUpOworCitUaGUgZHJpdmVyIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGRpc2FibGluZyBhbnkgb3RoZXIgZGV2aWNlLXNwZWNpZmljIGZlYXR1cmVzCisoZS5nIGJsYW5raW5nIHNjcmVlbiwgdHVybmluZyBvZmYgb24tY2FyZCBtZW1vcnksIGV0YykuCisKK1RoZSBkcml2ZXIgc2hvdWxkIGJlIHN1cmUgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRldmljZSwgYXMgaXQgbWF5CitvYnZpYXRlIHRoZSBuZWVkIGZvciBzb21lIG9wZXJhdGlvbnMuCisKK1RoZSBkcml2ZXIgc2hvdWxkIHVwZGF0ZSB0aGUgY3VycmVudF9zdGF0ZSBmaWVsZCBpbiBpdHMgcGNpX2RldiBzdHJ1Y3R1cmUgaW4KK3RoaXMgZnVuY3Rpb24sIGV4Y2VwdCBmb3IgUE0tY2FwYWJsZSBkZXZpY2VzIHdoZW4gcGNpX3NldF9wb3dlcl9zdGF0ZSBpcyB1c2VkLgorCityZXN1bWUKKy0tLS0tLQorCitVc2FnZToKKworaWYgKGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5zdXNwZW5kKQorCWRldi0+ZHJpdmVyLT5yZXN1bWUoZGV2KQorCitUaGUgcmVzdW1lIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgZnJvbSBhbnkgcG93ZXIgc3RhdGUsIGFuZCBpcyBhbHdheXMgbWVhbnQgdG8KK3RyYW5zaXRpb24gdGhlIGRldmljZSB0byB0aGUgRDAgc3RhdGUuIAorCitUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWVuYWJsaW5nIGFueSBmZWF0dXJlcyBvZiB0aGUgZGV2aWNlIHRoYXQgaGFkCitiZWVuIGRpc2FibGVkIGR1cmluZyBwcmV2aW91cyBzdXNwZW5kIGNhbGxzLCBzdWNoIGFzIElSUXMgYW5kIGJ1cyBtYXN0ZXJpbmcsCithcyB3ZWxsIGFzIGNhbGxpbmcgcGNpX3Jlc3RvcmVfc3RhdGUoKS4KKworSWYgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgaW4gRDMsIGl0IG1heSBuZWVkIHRvIGJlIHJlaW5pdGlhbGl6ZWQgaW4gcmVzdW1lKCkuCisKKyAgKiBTb21lIHR5cGVzIG9mIGRldmljZXMsIGxpa2UgYnVzIGNvbnRyb2xsZXJzLCB3aWxsIHByZXNlcnZlIGNvbnRleHQgaW4gRDNob3QKKyAgICAodXNpbmcgVmNjIHBvd2VyKS4gIFRoZWlyIGRyaXZlcnMgd2lsbCBvZnRlbiB3YW50IHRvIGF2b2lkIHJlLWluaXRpYWxpemluZworICAgIHRoZW0gYWZ0ZXIgcmUtZW50ZXJpbmcgRDAgKHBlcmhhcHMgdG8gYXZvaWQgcmVzZXR0aW5nIGRvd25zdHJlYW0gZGV2aWNlcykuCisKKyAgKiBPdGhlciBraW5kcyBvZiBkZXZpY2VzIGluIEQzaG90IHdpbGwgZGlzY2FyZCBkZXZpY2UgY29udGV4dCBhcyBwYXJ0IG9mIGEKKyAgICBzb2Z0IHJlc2V0IHdoZW4gcmUtZW50ZXJpbmcgdGhlIEQwIHN0YXRlLgorICAgIAorICAqIERldmljZXMgcmVzdW1pbmcgZnJvbSBEM2NvbGQgYWx3YXlzIGdvIHRocm91Z2ggYSBwb3dlci1vbiByZXNldC4gIFNvbWUKKyAgICBkZXZpY2UgY29udGV4dCBjYW4gYWxzbyBiZSBwcmVzZXJ2ZWQgdXNpbmcgVmF1eCBwb3dlci4KKworICAqIFNvbWUgc3lzdGVtcyBoaWRlIEQzY29sZCByZXN1bWUgcGF0aHMgZnJvbSBkcml2ZXJzLiAgRm9yIGV4YW1wbGUsIG9uIFBDcworICAgIHRoZSByZXN1bWUgcGF0aCBmb3Igc3VzcGVuZC10by1kaXNrIG9mdGVuIHJ1bnMgQklPUyBwb3dlcnVwIGNvZGUsIHdoaWNoCisgICAgd2lsbCBzb21ldGltZXMgcmUtaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLgorCitUbyBoYW5kbGUgcmVzZXRzIGR1cmluZyBEMyB0byBEMCB0cmFuc2l0aW9ucywgaXQgbWF5IGJlIGNvbnZlbmllbnQgdG8gc2hhcmUKK2RldmljZSBpbml0aWFsaXphdGlvbiBjb2RlIGJldHdlZW4gcHJvYmUoKSBhbmQgcmVzdW1lKCkuICBEZXZpY2UgcGFyYW1ldGVycworY2FuIGFsc28gYmUgc2F2ZWQgYmVmb3JlIHRoZSBkcml2ZXIgc3VzcGVuZHMgaW50byBEMywgYXZvaWRpbmcgcmUtcHJvYmUuCisKK0lmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIFBDSSBQTSBTcGVjLCBpdCBjYW4gdXNlIHRoaXMgdG8gcGh5c2ljYWxseSB0cmFuc2l0aW9uCit0aGUgZGV2aWNlIHRvIEQwOgorCitwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwwKTsKKworTm90ZSB0aGF0IGlmIHRoZSBlbnRpcmUgc3lzdGVtIGlzIHRyYW5zaXRpb25pbmcgb3V0IG9mIGEgZ2xvYmFsIHNsZWVwIHN0YXRlLCBhbGwKK2RldmljZXMgd2lsbCBiZSBwbGFjZWQgaW4gdGhlIEQwIHN0YXRlLCBzbyB0aGlzIGlzIG5vdCBuZWNlc3NhcnkuIEhvd2V2ZXIsIGluCit0aGUgZXZlbnQgdGhhdCB0aGUgZGV2aWNlIGlzIHBsYWNlZCBpbiB0aGUgRDMgc3RhdGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sCit0aGlzIGNhbGwgaXMgbmVjZXNzYXJ5LiBJdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdHdvIGV2ZW50cyBpcwordGFraW5nIHBsYWNlIGluIHRoZSBkcml2ZXIsIHNvIGl0IGlzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBtYWtlIHRoYXQgY2FsbC4KKworVGhlIGRyaXZlciBzaG91bGQgdGFrZSBub3RlIG9mIHRoZSBzdGF0ZSB0aGF0IGl0IGlzIHJlc3VtaW5nIGZyb20gaW4gb3JkZXIgdG8KK2Vuc3VyZSBjb3JyZWN0IChhbmQgc3BlZWR5KSBvcGVyYXRpb24uCisKK1RoZSBkcml2ZXIgc2hvdWxkIHVwZGF0ZSB0aGUgY3VycmVudF9zdGF0ZSBmaWVsZCBpbiBpdHMgcGNpX2RldiBzdHJ1Y3R1cmUgaW4KK3RoaXMgZnVuY3Rpb24sIGV4Y2VwdCBmb3IgUE0tY2FwYWJsZSBkZXZpY2VzIHdoZW4gcGNpX3NldF9wb3dlcl9zdGF0ZSBpcyB1c2VkLgorCisKK2VuYWJsZV93YWtlCistLS0tLS0tLS0tLQorCitVc2FnZToKKworaWYgKGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5lbmFibGVfd2FrZSkKKwlkZXYtPmRyaXZlci0+ZW5hYmxlX3dha2UoZGV2LHN0YXRlLGVuYWJsZSk7CisKK1RoaXMgY2FsbGJhY2sgaXMgZ2VuZXJhbGx5IG9ubHkgcmVsZXZhbnQgZm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IHRoZSBQQ0kgUE0KK3NwZWMgYW5kIGhhdmUgdGhlIGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSBQTUUjIChQb3dlciBNYW5hZ2VtZW50IEV2ZW50IFNpZ25hbCkKK3RvIHdha2UgdGhlIHN5c3RlbSB1cC4gKEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBkZXZpY2UgbWF5IHN1cHBvcnQgCitzb21lIG5vbi1zdGFuZGFyZCB3YXkgb2YgZ2VuZXJhdGluZyBhIHdha2UgZXZlbnQgb24gc2xlZXAuKQorCitCaXRzIDE1OjExIG9mIHRoZSBQTUMgKFBvd2VyIE1nbXQgQ2FwYWJpbGl0aWVzKSBSZWdpc3RlciBpbiBhIGRldmljZSdzCitQTSBDYXBhYmlsdGllcyBkZXNjcmliZSB3aGF0IHBvd2VyIHN0YXRlcyB0aGUgZGV2aWNlIHN1cHBvcnRzIGdlbmVyYXRpbmcgYSAKK3dha2UgZXZlbnQgZnJvbToKKworKy0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIEJpdCAgfCAgU3RhdGUgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgMTEgICB8ICAgRDAgICAgIHwKK3wgIDEyICAgfCAgIEQxICAgICB8Cit8ICAxMyAgIHwgICBEMiAgICAgfAorfCAgMTQgICB8ICAgRDNob3QgIHwKK3wgIDE1ICAgfCAgIEQzY29sZCB8CisrLS0tLS0tLS0tLS0tLS0tLS0tKworCitBIGRldmljZSBjYW4gdXNlIHRoaXMgdG8gZW5hYmxlIHdha2UgZXZlbnRzOgorCisJIHBjaV9lbmFibGVfd2FrZShkZXYsc3RhdGUsZW5hYmxlKTsKKworTm90ZSB0aGF0IHRvIGVuYWJsZSBQTUUjIGZyb20gRDNjb2xkLCBhIHZhbHVlIG9mIDQgc2hvdWxkIGJlIHBhc3NlZCB0byAKK3BjaV9lbmFibGVfd2FrZSAoc2luY2UgaXQgdXNlcyBhbiBpbmRleCBpbnRvIGEgYml0bWFzaykuIElmIGEgZHJpdmVyIGdldHMKK2EgcmVxdWVzdCB0byBlbmFibGUgd2FrZSBldmVudHMgZnJvbSBEMywgdHdvIGNhbGxzIHNob3VsZCBiZSBtYWRlIHRvIAorcGNpX2VuYWJsZV93YWtlIChvbmUgZm9yIGJvdGggRDNob3QgYW5kIEQzY29sZCkuCisKKworNS4gUmVzb3VyY2VzCit+fn5+fn5+fn5+fn4KKworUENJIExvY2FsIEJ1cyBTcGVjaWZpY2F0aW9uIAorUENJIEJ1cyBQb3dlciBNYW5hZ2VtZW50IEludGVyZmFjZSBTcGVjaWZpY2F0aW9uCisKKyAgaHR0cDovL3BjaXNpZy5vcmcKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zdGF0ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zdGF0ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNWU1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N0YXRlcy50eHQKQEAgLTAsMCArMSw3OSBAQAorCitTeXN0ZW0gUG93ZXIgTWFuYWdlbWVudCBTdGF0ZXMKKworCitUaGUga2VybmVsIHN1cHBvcnRzIHRocmVlIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGVzIGdlbmVyaWNhbGx5LCB0aG91Z2gKK2VhY2ggaXMgZGVwZW5kZW50IG9uIHBsYXRmb3JtIHN1cHBvcnQgY29kZSB0byBpbXBsZW1lbnQgdGhlIGxvdy1sZXZlbAorZGV0YWlscyBmb3IgZWFjaCBzdGF0ZS4gVGhpcyBmaWxlIGRlc2NyaWJlcyBlYWNoIHN0YXRlLCB3aGF0IHRoZXkgYXJlCitjb21tb25seSBjYWxsZWQsIHdoYXQgQUNQSSBzdGF0ZSB0aGV5IG1hcCB0bywgYW5kIHdoYXQgc3RyaW5nIHRvIHdyaXRlCit0byAvc3lzL3Bvd2VyL3N0YXRlIHRvIGVudGVyIHRoYXQgc3RhdGUKKworCitTdGF0ZToJCVN0YW5kYnkgLyBQb3dlci1PbiBTdXNwZW5kCitBQ1BJIFN0YXRlOglTMQorU3RyaW5nOgkJInN0YW5kYnkiCisKK1RoaXMgc3RhdGUgb2ZmZXJzIG1pbmltYWwsIHRob3VnaCByZWFsLCBwb3dlciBzYXZpbmdzLCB3aGlsZSBwcm92aWRpbmcKK2EgdmVyeSBsb3ctbGF0ZW5jeSB0cmFuc2l0aW9uIGJhY2sgdG8gYSB3b3JraW5nIHN5c3RlbS4gTm8gb3BlcmF0aW5nCitzdGF0ZSBpcyBsb3N0ICh0aGUgQ1BVIHJldGFpbnMgcG93ZXIpLCBzbyB0aGUgc3lzdGVtIGVhc2lseSBzdGFydHMgdXAKK2FnYWluIHdoZXJlIGl0IGxlZnQgb2ZmLiAKKworV2UgdHJ5IHRvIHB1dCBkZXZpY2VzIGluIGEgbG93LXBvd2VyIHN0YXRlIGVxdWl2YWxlbnQgdG8gRDEsIHdoaWNoCithbHNvIG9mZmVycyBsb3cgcG93ZXIgc2F2aW5ncywgYnV0IGxvdyByZXN1bWUgbGF0ZW5jeS4gTm90IGFsbCBkZXZpY2VzCitzdXBwb3J0IEQxLCBhbmQgdGhvc2UgdGhhdCBkb24ndCBhcmUgbGVmdCBvbi4gCisKK0EgdHJhbnNpdGlvbiBmcm9tIFN0YW5kYnkgdG8gdGhlIE9uIHN0YXRlIHNob3VsZCB0YWtlIGFib3V0IDEtMgorc2Vjb25kcy4gCisKKworU3RhdGU6CQlTdXNwZW5kLXRvLVJBTQorQUNQSSBTdGF0ZToJUzMKK1N0cmluZzoJCSJtZW0iCisKK1RoaXMgc3RhdGUgb2ZmZXJzIHNpZ25pZmljYW50IHBvd2VyIHNhdmluZ3MgYXMgZXZlcnl0aGluZyBpbiB0aGUKK3N5c3RlbSBpcyBwdXQgaW50byBhIGxvdy1wb3dlciBzdGF0ZSwgZXhjZXB0IGZvciBtZW1vcnksIHdoaWNoIGlzCitwbGFjZWQgaW4gc2VsZi1yZWZyZXNoIG1vZGUgdG8gcmV0YWluIGl0cyBjb250ZW50cy4gCisKK1N5c3RlbSBhbmQgZGV2aWNlIHN0YXRlIGlzIHNhdmVkIGFuZCBrZXB0IGluIG1lbW9yeS4gQWxsIGRldmljZXMgYXJlCitzdXNwZW5kZWQgYW5kIHB1dCBpbnRvIEQzLiBJbiBtYW55IGNhc2VzLCBhbGwgcGVyaXBoZXJhbCBidXNlcyBsb3NlCitwb3dlciB3aGVuIGVudGVyaW5nIFNUUiwgc28gZGV2aWNlcyBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZQordHJhbnNpdGlvbiBiYWNrIHRvIHRoZSBPbiBzdGF0ZS4gCisKK0ZvciBhdCBsZWFzdCBBQ1BJLCBTVFIgcmVxdWlyZXMgc29tZSBtaW5pbWFsIGJvb3Qtc3RyYXBwaW5nIGNvZGUgdG8KK3Jlc3VtZSB0aGUgc3lzdGVtIGZyb20gU1RSLiBUaGlzIG1heSBiZSB0cnVlIG9uIG90aGVyIHBsYXRmb3Jtcy4gCisKK0EgdHJhbnNpdGlvbiBmcm9tIFN1c3BlbmQtdG8tUkFNIHRvIHRoZSBPbiBzdGF0ZSBzaG91bGQgdGFrZSBhYm91dAorMy01IHNlY29uZHMuIAorCisKK1N0YXRlOgkJU3VzcGVuZC10by1kaXNrCitBQ1BJIFN0YXRlOglTNAorU3RyaW5nOgkJImRpc2siCisKK1RoaXMgc3RhdGUgb2ZmZXJzIHRoZSBncmVhdGVzdCBwb3dlciBzYXZpbmdzLCBhbmQgY2FuIGJlIHVzZWQgZXZlbiBpbgordGhlIGFic2VuY2Ugb2YgbG93LWxldmVsIHBsYXRmb3JtIHN1cHBvcnQgZm9yIHBvd2VyIG1hbmFnZW1lbnQuIFRoaXMKK3N0YXRlIG9wZXJhdGVzIHNpbWlsYXJseSB0byBTdXNwZW5kLXRvLVJBTSwgYnV0IGluY2x1ZGVzIGEgZmluYWwgc3RlcAorb2Ygd3JpdGluZyBtZW1vcnkgY29udGVudHMgdG8gZGlzay4gT24gcmVzdW1lLCB0aGlzIGlzIHJlYWQgYW5kIG1lbW9yeQoraXMgcmVzdG9yZWQgdG8gaXRzIHByZS1zdXNwZW5kIHN0YXRlLiAKKworU1REIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSBvciB0aGUga2VybmVsLiBJZiBpdCBpcyBoYW5kbGVkIGJ5Cit0aGUgZmlybXdhcmUsIGl0IHVzdWFsbHkgcmVxdWlyZXMgYSBkZWRpY2F0ZWQgcGFydGl0aW9uIHRoYXQgbXVzdCBiZQorc2V0dXAgdmlhIGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBmb3IgaXQgdG8gdXNlLiBEZXNwaXRlIHRoZQoraW5jb252ZW5pZW5jZSwgdGhpcyBtZXRob2QgcmVxdWlyZXMgbWluaW1hbCB3b3JrIGJ5IHRoZSBrZXJuZWwsIHNpbmNlCit0aGUgZmlybXdhcmUgd2lsbCBhbHNvIGhhbmRsZSByZXN0b3JpbmcgbWVtb3J5IGNvbnRlbnRzIG9uIHJlc3VtZS4gCisKK0lmIHRoZSBrZXJuZWwgaXMgcmVzcG9uc2libGUgZm9yIHBlcnNpc3RhbnRseSBzYXZpbmcgc3RhdGUsIGEgbWVjaGFuaXNtIAorY2FsbGVkICdzd3N1c3AnIChTd2FwIFN1c3BlbmQpIGlzIHVzZWQgdG8gd3JpdGUgbWVtb3J5IGNvbnRlbnRzIHRvCitmcmVlIHN3YXAgc3BhY2UuIHN3c3VzcCBoYXMgc29tZSByZXN0cmljdGl2ZSByZXF1aXJlbWVudHMsIGJ1dCBzaG91bGQKK3dvcmsgaW4gbW9zdCBjYXNlcy4gU29tZSwgYWxiZWl0IG91dGRhdGVkLCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZAoraW4gRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0LiAKKworT25jZSBtZW1vcnkgc3RhdGUgaXMgd3JpdHRlbiB0byBkaXNrLCB0aGUgc3lzdGVtIG1heSBlaXRoZXIgZW50ZXIgYQorbG93LXBvd2VyIHN0YXRlIChsaWtlIEFDUEkgUzQpLCBvciBpdCBtYXkgc2ltcGx5IHBvd2VyIGRvd24uIFBvd2VyaW5nCitkb3duIG9mZmVycyBncmVhdGVyIHNhdmluZ3MsIGFuZCBhbGxvd3MgdGhpcyBtZWNoYW5pc20gdG8gd29yayBvbiBhbnkKK3N5c3RlbS4gSG93ZXZlciwgZW50ZXJpbmcgYSByZWFsIGxvdy1wb3dlciBzdGF0ZSBhbGxvd3MgdGhlIHVzZXIgdG8KK3RyaWdnZXIgd2FrZSB1cCBldmVudHMgKGUuZy4gcHJlc3NpbmcgYSBrZXkgb3Igb3BlbmluZyBhIGxhcHRvcCBsaWQpLiAKKworQSB0cmFuc2l0aW9uIGZyb20gU3VzcGVuZC10by1EaXNrIHRvIHRoZSBPbiBzdGF0ZSBzaG91bGQgdGFrZSBhYm91dCAzMAorc2Vjb25kcywgdGhvdWdoIGl0J3MgdHlwaWNhbGx5IGEgYml0IG1vcmUgd2l0aCB0aGUgY3VycmVudAoraW1wbGVtZW50YXRpb24uIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzM0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQKQEAgLTAsMCArMSwyMzUgQEAKK0Zyb20ga2VybmVsL3N1c3BlbmQuYzoKKworICogQklHIEZBVCBXQVJOSU5HICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElmIHlvdSBoYXZlIHVuc3VwcG9ydGVkICgqKSBkZXZpY2VzIHVzaW5nIERNQS4uLgorICoJCQkJLi4uc2F5IGdvb2RieWUgdG8geW91ciBkYXRhLgorICoKKyAqIElmIHlvdSB0b3VjaCBhbnl0aGluZyBvbiBkaXNrIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLi4uCisgKgkJCQkuLi5raXNzIHlvdXIgZGF0YSBnb29kYnllLgorICoKKyAqIElmIHlvdXIgZGlzayBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzdXNwZW5kLi4uIChJREUgZG9lcykKKyAqCQkJCS4uLnlvdSdkIGJldHRlciBmaW5kIG91dCBob3cgdG8gZ2V0IGFsb25nCisgKgkJCQkgICB3aXRob3V0IHlvdXIgZGF0YS4KKyAqCisgKiBJZiB5b3UgY2hhbmdlIGtlcm5lbCBjb21tYW5kIGxpbmUgYmV0d2VlbiBzdXNwZW5kIGFuZCByZXN1bWUuLi4KKyAqCQkJICAgICAgICAuLi5wcmVwYXJlIGZvciBuYXN0eSBmc2NrIG9yIHdvcnNlLgorICoKKyAqIElmIHlvdSBjaGFuZ2UgeW91ciBoYXJkd2FyZSB3aGlsZSBzeXN0ZW0gaXMgc3VzcGVuZGVkLi4uCisgKgkJCSAgICAgICAgLi4ud2VsbCwgaXQgd2FzIG5vdCBnb29kIGlkZWEuCisgKgorICogKCopIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgaXMgbmVlZGVkIHRvIG1ha2UgaXQgc2FmZS4KKworWW91IG5lZWQgdG8gYXBwZW5kIHJlc3VtZT0vZGV2L3lvdXJfc3dhcF9wYXJ0aXRpb24gdG8ga2VybmVsIGNvbW1hbmQKK2xpbmUuIFRoZW4geW91IHN1c3BlbmQgYnkKKworZWNobyBzaHV0ZG93biA+IC9zeXMvcG93ZXIvZGlzazsgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQorCisuIElmIHlvdSBmZWVsIEFDUEkgd29ya3MgcHJldHR5IHdlbGwgb24geW91ciBzeXN0ZW0sIHlvdSBtaWdodCB0cnkKKworZWNobyBwbGF0Zm9ybSA+IC9zeXMvcG93ZXIvZGlzazsgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQorCisKKworQXJ0aWNsZSBhYm91dCBnb2FscyBhbmQgaW1wbGVtZW50YXRpb24gb2YgU29mdHdhcmUgU3VzcGVuZCBmb3IgTGludXgKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitBdXRob3I6IEeC4WJvciBLdXRpCitMYXN0IHJldmlzZWQ6IDIwMDMtMTAtMjAgYnkgUGF2ZWwgTWFjaGVrCisKK0lkZWEgYW5kIGdvYWxzIHRvIGFjaGlldmUKKworTm93YWRheXMgaXQgaXMgY29tbW9uIGluIHNldmVyYWwgbGFwdG9wcyB0aGF0IHRoZXkgaGF2ZSBhIHN1c3BlbmQgYnV0dG9uLiBJdAorc2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtYWNoaW5lIHRvIGEgZmlsZXN5c3RlbSBvciB0byBhIHBhcnRpdGlvbiBhbmQgc3dpdGNoZXMKK3RvIHN0YW5kYnkgbW9kZS4gTGF0ZXIgcmVzdW1pbmcgdGhlIG1hY2hpbmUgdGhlIHNhdmVkIHN0YXRlIGlzIGxvYWRlZCBiYWNrIHRvCityYW0gYW5kIHRoZSBtYWNoaW5lIGNhbiBjb250aW51ZSBpdHMgd29yay4gSXQgaGFzIHR3byByZWFsIGJlbmVmaXRzLiBGaXJzdCB3ZQorc2F2ZSBvdXJzZWx2ZXMgdGhlIHRpbWUgbWFjaGluZSBnb2VzIGRvd24gYW5kIGxhdGVyIGJvb3RzIHVwLCBlbmVyZ3kgY29zdHMKK2FyZSByZWFsIGhpZ2ggd2hlbiBydW5uaW5nIGZyb20gYmF0dGVyaWVzLiBUaGUgb3RoZXIgZ2FpbiBpcyB0aGF0IHdlIGRvbid0IGhhdmUgdG8KK2ludGVycnVwdCBvdXIgcHJvZ3JhbXMgc28gcHJvY2Vzc2VzIHRoYXQgYXJlIGNhbGN1bGF0aW5nIHNvbWV0aGluZyBmb3IgYSBsb25nCit0aW1lIHNob3VsZG4ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gaW50ZXJydXB0aWJsZS4KKworc3dzdXNwIHNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFjaGluZSBpbnRvIGFjdGl2ZSBzd2FwcyBhbmQgdGhlbiByZWJvb3RzIG9yCitwb3dlcmRvd25zLiAgWW91IG11c3QgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBzd2FwIHBhcnRpdGlvbiB0byByZXN1bWUgZnJvbSB3aXRoCitgYHJlc3VtZT0nJyBrZXJuZWwgb3B0aW9uLiBJZiBzaWduYXR1cmUgaXMgZm91bmQgaXQgbG9hZHMgYW5kIHJlc3RvcmVzIHNhdmVkCitzdGF0ZS4gSWYgdGhlIG9wdGlvbiBgYG5vcmVzdW1lJycgaXMgc3BlY2lmaWVkIGFzIGEgYm9vdCBwYXJhbWV0ZXIsIGl0IHNraXBzCit0aGUgcmVzdW1pbmcuCisKK0luIHRoZSBtZWFudGltZSB3aGlsZSB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZCB5b3Ugc2hvdWxkIG5vdCBhZGQvcmVtb3ZlIGFueQorb2YgdGhlIGhhcmR3YXJlLCB3cml0ZSB0byB0aGUgZmlsZXN5c3RlbXMsIGV0Yy4KKworU2xlZXAgc3RhdGVzIHN1bW1hcnkKKz09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgaW50ZXJmYWNlcyB5b3UgY2FuIHVzZSwgL3Byb2MvYWNwaSBzaG91bGQKK3dvcmsgbGlrZSB0aGlzOgorCitJbiBhIHJlYWxseSBwZXJmZWN0IHdvcmxkOgorZWNobyAxID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdGFuZGJ5CitlY2hvIDIgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHN1c3BlbmQgdG8gcmFtCitlY2hvIDMgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHN1c3BlbmQgdG8gcmFtLCBidXQgd2l0aCBtb3JlIHBvd2VyIGNvbnNlcnZhdGl2ZQorZWNobyA0ID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdXNwZW5kIHRvIGRpc2sKK2VjaG8gNSA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAgIyBmb3Igc2h1dGRvd24gdW5mcmllbmRseSB0aGUgc3lzdGVtCisKK2FuZCBwZXJoYXBzCitlY2hvIDRiID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICMgZm9yIHN1c3BlbmQgdG8gZGlzayB2aWEgczRiaW9zCisKK0ZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitROiB3ZWxsLCBzdXNwZW5kaW5nIGEgc2VydmVyIGlzIElNSE8gYSByZWFsbHkgc3R1cGlkIHRoaW5nLAorYnV0Li4uIChEaWVnbyBadWNjYXRvKToKKworQTogWW91IGJvdWdodCBuZXcgVVBTIGZvciB5b3VyIHNlcnZlci4gSG93IGRvIHlvdSBpbnN0YWxsIGl0IHdpdGhvdXQKK2JyaW5naW5nIG1hY2hpbmUgZG93bj8gU3VzcGVuZCB0byBkaXNrLCByZWFycmFuZ2UgcG93ZXIgY2FibGVzLAorcmVzdW1lLgorCitZb3UgaGF2ZSB5b3VyIHNlcnZlciBvbiBVUFMuIFBvd2VyIGRpZWQsIGFuZCBVUFMgaXMgaW5kaWNhdGluZyAzMAorc2Vjb25kcyB0byBmYWlsdXJlLiBXaGF0IGRvIHlvdSBkbz8gU3VzcGVuZCB0byBkaXNrLgorCitFdGhlcm5ldCBjYXJkIGluIHlvdXIgc2VydmVyIGRpZWQuIFlvdSB3YW50IHRvIHJlcGxhY2UgaXQuIFlvdXIKK3NlcnZlciBpcyBub3QgaG90cGx1ZyBjYXBhYmxlLiBXaGF0IGRvIHlvdSBkbz8gU3VzcGVuZCB0byBkaXNrLAorcmVwbGFjZSBldGhlcm5ldCBjYXJkLCByZXN1bWUuIElmIHlvdSBhcmUgZmFzdCB5b3VyIHVzZXJzIHdpbGwgbm90CitldmVuIHNlZSBicm9rZW4gY29ubmVjdGlvbnMuCisKKworUTogTWF5YmUgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBidXQgd2h5IGRvbid0IHRoZSByZWd1bGFyIEkvTyBwYXRocyB3b3JrPworCitBOiBXZSBkbyB1c2UgdGhlIHJlZ3VsYXIgSS9PIHBhdGhzLiBIb3dldmVyIHdlIGNhbm5vdCByZXN0b3JlIHRoZSBkYXRhCit0byBpdHMgb3JpZ2luYWwgbG9jYXRpb24gYXMgd2UgbG9hZCBpdC4gVGhhdCB3b3VsZCBjcmVhdGUgYW4KK2luY29uc2lzdGVudCBrZXJuZWwgc3RhdGUgd2hpY2ggd291bGQgY2VydGFpbmx5IHJlc3VsdCBpbiBhbiBvb3BzLgorSW5zdGVhZCwgd2UgbG9hZCB0aGUgaW1hZ2UgaW50byB1bnVzZWQgbWVtb3J5IGFuZCB0aGVuIGF0b21pY2FsbHkgY29weQoraXQgYmFjayB0byBpdCBvcmlnaW5hbCBsb2NhdGlvbi4gVGhpcyBpbXBsaWVzLCBvZiBjb3Vyc2UsIGEgbWF4aW11bQoraW1hZ2Ugc2l6ZSBvZiBoYWxmIHRoZSBhbW91bnQgb2YgbWVtb3J5LgorCitUaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyB0byB0aGlzOgorCisqIHJlcXVpcmUgaGFsZiBvZiBtZW1vcnkgdG8gYmUgZnJlZSBkdXJpbmcgc3VzcGVuZC4gVGhhdCB3YXkgeW91IGNhbgorcmVhZCAibmV3IiBkYXRhIG9udG8gZnJlZSBzcG90cywgdGhlbiBjbGkgYW5kIGNvcHkKKworKiBhc3N1bWUgd2UgaGFkIHNwZWNpYWwgInBvbGxpbmciIGlkZSBkcml2ZXIgdGhhdCBvbmx5IHVzZXMgbWVtb3J5CitiZXR3ZWVuIDAtNjQwS0IuIFRoYXQgd2F5LCBJJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCAwLTY0MEtCIGlzIGZyZWUKK2R1cmluZyBzdXNwZW5kaW5nLCBidXQgb3RoZXJ3aXNlIGl0IHdvdWxkIHdvcmsuLi4KKworc3VzcGVuZDIgc2hhcmVzIHRoaXMgZnVuZGFtZW50YWwgbGltaXRhdGlvbiwgYnV0IGRvZXMgbm90IGluY2x1ZGUgdXNlcgorZGF0YSBhbmQgZGlzayBjYWNoZXMgaW50byAidXNlZCBtZW1vcnkiIGJ5IHNhdmluZyB0aGVtIGluCithZHZhbmNlLiBUaGF0IG1lYW5zIHRoYXQgdGhlIGxpbWl0YXRpb24gZ29lcyBhd2F5IGluIHByYWN0aWNlLgorCitROiBEb2VzIGxpbnV4IHN1cHBvcnQgQUNQSSBTND8KKworQTogWWVzLiBUaGF0J3Mgd2hhdCBlY2hvIHBsYXRmb3JtID4gL3N5cy9wb3dlci9kaXNrIGRvZXMuCisKK1E6IE15IG1hY2hpbmUgZG9lc24ndCB3b3JrIHdpdGggQUNQSS4gSG93IGNhbiBJIHVzZSBzd3N1c3AgdGhhbiA/CisKK0E6IERvIGEgcmVib290KCkgc3lzY2FsbCB3aXRoIHJpZ2h0IHBhcmFtZXRlcnMuIFdhcm5pbmc6IGdsaWJjIGdldHMgaW4KK2l0cyB3YXksIHNvIGNoZWNrIHdpdGggc3RyYWNlOgorCityZWJvb3QoTElOVVhfUkVCT09UX01BR0lDMSwgTElOVVhfUkVCT09UX01BR0lDMiwgMHhkMDAwZmNlMikKKworKFRoYW5rcyB0byBQZXRlciBPc3Rlcmx1bmQ6KQorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzY2FsbC5oPgorCisjZGVmaW5lIExJTlVYX1JFQk9PVF9NQUdJQzEgICAgIDB4ZmVlMWRlYWQKKyNkZWZpbmUgTElOVVhfUkVCT09UX01BR0lDMiAgICAgNjcyMjc0NzkzCisjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfU1dfU1VTUEVORCAgICAgMHhEMDAwRkNFMgorCitpbnQgbWFpbigpCit7CisgICAgc3lzY2FsbChTWVNfcmVib290LCBMSU5VWF9SRUJPT1RfTUFHSUMxLCBMSU5VWF9SRUJPT1RfTUFHSUMyLAorICAgICAgICAgICAgTElOVVhfUkVCT09UX0NNRF9TV19TVVNQRU5ELCAwKTsKKyAgICByZXR1cm4gMDsKK30KKworQWxzbyAvc3lzLyBpbnRlcmZhY2Ugc2hvdWxkIGJlIHN0aWxsIHByZXNlbnQuCisKK1E6IFdoYXQgaXMgJ3N1c3BlbmQyJz8KKworQTogc3VzcGVuZDIgaXMgJ1NvZnR3YXJlIFN1c3BlbmQgMicsIGEgZm9ya2VkIGltcGxlbWVudGF0aW9uIG9mCitzdXNwZW5kLXRvLWRpc2sgd2hpY2ggaXMgYXZhaWxhYmxlIGFzIHNlcGFyYXRlIHBhdGNoZXMgZm9yIDIuNCBhbmQgMi42CitrZXJuZWxzIGZyb20gc3dzdXNwLnNvdXJjZWZvcmdlLm5ldC4gSXQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgU01QLCA0R0IKK2hpZ2htZW0gYW5kIHByZWVtcHRpb24uIEl0IGFsc28gaGFzIGEgZXh0ZW5zaWJsZSBhcmNoaXRlY3R1cmUgdGhhdAorYWxsb3dzIGZvciBhcmJpdHJhcnkgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBpbWFnZSAoY29tcHJlc3Npb24sCitlbmNyeXB0aW9uKSBhbmQgYXJiaXRyYXJ5IGJhY2tlbmRzIGZvciB3cml0aW5nIHRoZSBpbWFnZSAoZWcgdG8gc3dhcAorb3IgYW4gTkZTIHNoYXJlW1dvcmsgSW4gUHJvZ3Jlc3NdKS4gUXVlc3Rpb25zIHJlZ2FyZGluZyBzdXNwZW5kMgorc2hvdWxkIGJlIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdCBhdmFpbGFibGUgdGhyb3VnaCB0aGUgc3VzcGVuZDIKK3dlYnNpdGUsIGFuZCBub3QgdG8gdGhlIExpbnV4IEtlcm5lbCBNYWlsaW5nIExpc3QuIFdlIGFyZSB3b3JraW5nCit0b3dhcmQgbWVyZ2luZyBzdXNwZW5kMiBpbnRvIHRoZSBtYWlubGluZSBrZXJuZWwuCisKK1E6IEEga2VybmVsIHRocmVhZCBtdXN0IHZvbHVudGFyaWx5IGZyZWV6ZSBpdHNlbGYgKGNhbGwgJ3JlZnJpZ2VyYXRvcicpLgorSSBmb3VuZCBzb21lIGtlcm5lbCB0aHJlYWRzIHRoYXQgZG9uJ3QgZG8gaXQsIGFuZCB0aGV5IGRvbid0IGZyZWV6ZQorc28gdGhlIHN5c3RlbSBjYW4ndCBzbGVlcC4gSXMgdGhpcyBhIGtub3duIGJlaGF2aW9yPworCitBOiBBbGwgc3VjaCBrZXJuZWwgdGhyZWFkcyBuZWVkIHRvIGJlIGZpeGVkLCBvbmUgYnkgb25lLiBTZWxlY3QgdGhlCitwbGFjZSB3aGVyZSB0aGUgdGhyZWFkIGlzIHNhZmUgdG8gYmUgZnJvemVuIChubyBrZXJuZWwgc2VtYXBob3Jlcworc2hvdWxkIGJlIGhlbGQgYXQgdGhhdCBwb2ludCBhbmQgaXQgbXVzdCBiZSBzYWZlIHRvIHNsZWVwIHRoZXJlKSwgYW5kCithZGQ6CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkKKyAgICAgICAgICAgICAgICAgICAgcmVmcmlnZXJhdG9yKFBGX0ZSRUVaRSk7CisKK0lmIHRoZSB0aHJlYWQgaXMgbmVlZGVkIGZvciB3cml0aW5nIHRoZSBpbWFnZSB0byBzdG9yYWdlLCB5b3Ugc2hvdWxkCitpbnN0ZWFkIHNldCB0aGUgUEZfTk9GUkVFWkUgcHJvY2VzcyBmbGFnIHdoZW4gY3JlYXRpbmcgdGhlIHRocmVhZC4KKworCitROiBXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYmV0d2VlbiAicGxhdGZvcm0iLCAic2h1dGRvd24iIGFuZAorImZpcm13YXJlIiBpbiAvc3lzL3Bvd2VyL2Rpc2s/CisKK0E6CisKK3NodXRkb3duOiBzYXZlIHN0YXRlIGluIGxpbnV4LCB0aGVuIHRlbGwgYmlvcyB0byBwb3dlcmRvd24KKworcGxhdGZvcm06IHNhdmUgc3RhdGUgaW4gbGludXgsIHRoZW4gdGVsbCBiaW9zIHRvIHBvd2VyZG93biBhbmQgYmxpbmsKKyAgICAgICAgICAic3VzcGVuZGVkIGxlZCIKKworZmlybXdhcmU6IHRlbGwgYmlvcyB0byBzYXZlIHN0YXRlIGl0c2VsZiBbbmVlZHMgQklPUy1zcGVjaWZpYyBzdXNwZW5kCisJICBwYXJ0aXRpb24sIGFuZCBoYXMgdmVyeSBsaXR0bGUgdG8gZG8gd2l0aCBzd3N1c3BdCisKKyJwbGF0Zm9ybSIgaXMgYWN0dWFsbHkgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCAic2h1dGRvd24iIGlzIG1vc3QKK3JlbGlhYmxlLgorCitROiBJIGRvIG5vdCB1bmRlcnN0YW5kIHdoeSB5b3UgaGF2ZSBzdWNoIHN0cm9uZyBvYmplY3Rpb25zIHRvIGlkZWEgb2YKK3NlbGVjdGl2ZSBzdXNwZW5kLgorCitBOiBEbyBzZWxlY3RpdmUgc3VzcGVuZCBkdXJpbmcgcnVudGltZSBwb3dlciBtYW5hZ21lbnQsIHRoYXQncyBva2F5LiBCdXQKK2l0cyB1c2VsZXNzIGZvciBzdXNwZW5kLXRvLWRpc2suIChBbmQgSSBkbyBub3Qgc2VlIGhvdyB5b3UgY291bGQgdXNlCitpdCBmb3Igc3VzcGVuZC10by1yYW0sIEkgaG9wZSB5b3UgZG8gbm90IHdhbnQgdGhhdCkuCisKK0xldHMgc2VlLCBzbyB5b3Ugc3VnZ2VzdCB0bworCisqIFNVU1BFTkQgYWxsIGJ1dCBzd2FwIGRldmljZSBhbmQgcGFyZW50cworKiBTbmFwc2hvdAorKiBXcml0ZSBpbWFnZSB0byBkaXNrCisqIFNVU1BFTkQgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKKyogUG93ZXJkb3duCisKK09oIG5vLCB0aGF0IGRvZXMgbm90IHdvcmssIGlmIHN3YXAgZGV2aWNlIG9yIGl0cyBwYXJlbnRzIHVzZXMgRE1BLAoreW91J3ZlIGNvcnJ1cHRlZCBkYXRhLiBZb3UnZCBoYXZlIHRvIGRvCisKKyogU1VTUEVORCBhbGwgYnV0IHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCisqIEZSRUVaRSBzd2FwIGRldmljZSBhbmQgcGFyZW50cworKiBTbmFwc2hvdAorKiBVTkZSRUVaRSBzd2FwIGRldmljZSBhbmQgcGFyZW50cworKiBXcml0ZQorKiBTVVNQRU5EIHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCisKK1doaWNoIG1lYW5zIHRoYXQgeW91IHN0aWxsIG5lZWQgdGhhdCBGUkVFWkUgc3RhdGUsIGFuZCB5b3UgZ2V0IG1vcmUKK2NvbXBsaWNhdGVkIGNvZGUuIChBbmQgSSBoYXZlIG5vdCB5ZXQgaW50cm9kdWNlIGRldGFpbHMgbGlrZSBzeXN0ZW0KK2RldmljZXMpLgorCitROiBUaGVyZSBkb24ndCBzZWVtIHRvIGJlIGFueSBnZW5lcmFsbHkgdXNlZnVsIGJlaGF2aW9yYWwKK2Rpc3RpbmN0aW9ucyBiZXR3ZWVuIFNVU1BFTkQgYW5kIEZSRUVaRS4KKworQTogRG9pbmcgU1VTUEVORCB3aGVuIHlvdSBhcmUgYXNrZWQgdG8gZG8gRlJFRVpFIGlzIGFsd2F5cyBjb3JyZWN0LAorYnV0IGl0IG1heSBiZSB1bm5lY2Nlc3NhcmlseSBzbG93LiBJZiB5b3Ugd2FudCBVU0IgdG8gc3RheSBzaW1wbGUsCitzbG93bmVzcyBtYXkgbm90IG1hdHRlciB0byB5b3UuIEl0IGNhbiBhbHdheXMgYmUgZml4ZWQgbGF0ZXIuCisKK0ZvciBkZXZpY2VzIGxpa2UgZGlzayBpdCBkb2VzIG1hdHRlciwgeW91IGRvIG5vdCB3YW50IHRvIHNwaW5kb3duIGZvcgorRlJFRVpFLgorCitROiBBZnRlciByZXN1bWluZywgc3lzdGVtIGlzIHBhZ2luZyBoZWF2aWxseSwgbGVhZGluZyB0byB2ZXJ5IGJhZCBpbnRlcmFjdGl2aXR5LgorCitBOiBUcnkgcnVubmluZworCitjYXQgYGNhdCAvcHJvYy9bMC05XSovbWFwcyB8IGdyZXAgLyB8IHNlZCAnczouKiAvOi86JyB8IHNvcnQgLXVgID4gL2Rldi9udWxsCisKK2FmdGVyIHJlc3VtZS4gc3dhcG9mZiAtYTsgc3dhcG9uIC1hIG1heSBhbHNvIGJlIHVzZWZ1bGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3RyaWNrcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3RyaWNrcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkNThkMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvdHJpY2tzLnR4dApAQCAtMCwwICsxLDI3IEBACisJc3dzdXNwL1MzIHRyaWNrcworCX5+fn5+fn5+fn5+fn5+fn4KK1BhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKworSWYgeW91IHdhbnQgdG8gdHJpY2sgc3dzdXNwL1MzIGludG8gd29ya2luZywgeW91IG1pZ2h0IHdhbnQgdG8gdHJ5OgorCisqIGdvIHdpdGggbWluaW1hbCBjb25maWcsIHR1cm4gb2ZmIGRyaXZlcnMgbGlrZSBVU0IsIEFHUCB5b3UgZG9uJ3QKKyAgcmVhbGx5IG5lZWQKKworKiB0dXJuIG9mZiBBUElDIGFuZCBwcmVlbXB0CisKKyogdXNlIGV4dDIuIEF0IGxlYXN0IGl0IGhhcyB3b3JraW5nIGZzY2suIFtJZiBzb21ldGhpbmcgc2VlbWVzIHRvIGdvCisgIHdyb25nLCBmb3JjZSBmc2NrIHdoZW4geW91IGhhdmUgYSBjaGFuY2VdCisKKyogdHVybiBvZmYgbW9kdWxlcworCisqIHVzZSB2Z2EgdGV4dCBjb25zb2xlLCBzaHV0IGRvd24gWC4gW0lmIHlvdSByZWFsbHkgd2FudCBYLCB5b3UgbWlnaHQKKyAgd2FudCB0byB0cnkgdmVzYWZiIGxhdGVyXQorCisqIHRyeSBydW5uaW5nIGFzIGZldyBwcm9jZXNzZXMgYXMgcG9zc2libGUsIHByZWZlcmFibHkgZ28gdG8gc2luZ2xlCisgIHVzZXIgbW9kZS4KKworKiBkdWUgdG8gdmlkZW8gaXNzdWVzLCBzd3N1c3Agc2hvdWxkIGJlIGVhc2llciB0byBnZXQgd29ya2luZyB0aGFuCisgIFMzLiBUcnkgdGhhdCBmaXJzdC4KKworV2hlbiB5b3UgbWFrZSBpdCB3b3JrLCB0cnkgdG8gZmluZCBvdXQgd2hhdCBleGFjdGx5IHdhcyBpdCB0aGF0IGJyb2tlCitzdXNwZW5kLCBhbmQgcHJlZmVyYWJseSBmaXggdGhhdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4Njk2OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CkBAIC0wLDAgKzEsMTY5IEBACisKKwkJVmlkZW8gaXNzdWVzIHdpdGggUzMgcmVzdW1lCisJCX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgIDIwMDMtMjAwNSwgUGF2ZWwgTWFjaGVrCisKK0R1cmluZyBTMyByZXN1bWUsIGhhcmR3YXJlIG5lZWRzIHRvIGJlIHJlaW5pdGlhbGl6ZWQuIEZvciBtb3N0CitkZXZpY2VzLCB0aGlzIGlzIGVhc3ksIGFuZCBrZXJuZWwgZHJpdmVyIGtub3dzIGhvdyB0byBkbworaXQuIFVuZm9ydHVuYXRlbHkgdGhlcmUncyBvbmUgZXhjZXB0aW9uOiB2aWRlbyBjYXJkLiBUaG9zZSBhcmUgdXN1YWxseQoraW5pdGlhbGl6ZWQgYnkgQklPUywgYW5kIGtlcm5lbCBkb2VzIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0bworYm9vdCB2aWRlbyBjYXJkLiAoS2VybmVsIHVzdWFsbHkgZG9lcyBub3QgZXZlbiBjb250YWluIHZpZGVvIGNhcmQKK2RyaXZlciAtLSB2ZXNhZmIgYW5kIHZnYWNvbiBhcmUgd2lkZWx5IHVzZWQpLgorCitUaGlzIGlzIG5vdCBwcm9ibGVtIGZvciBzd3N1c3AsIGJlY2F1c2UgZHVyaW5nIHN3c3VzcCByZXN1bWUsIEJJT1MgaXMKK3J1biBub3JtYWxseSBzbyB2aWRlbyBjYXJkIGlzIG5vcm1hbGx5IGluaXRpYWxpemVkLiBTMyBoYXMgYWJzb2x1dGVseQorbm8gY2hhbmNlIG9mIHdvcmtpbmcgd2l0aCBTTVAvSFQuIEJlIHN1cmUgaXQgdG8gdHVybiBpdCBvZmYgYmVmb3JlCit0ZXN0aW5nIChzd3N1c3Agc2hvdWxkIHdvcmsgb2ssIE9UT0gpLgorCitUaGVyZSBhcmUgYSBmZXcgdHlwZXMgb2Ygc3lzdGVtcyB3aGVyZSB2aWRlbyB3b3JrcyBhZnRlciBTMyByZXN1bWU6CisKKygxKSBzeXN0ZW1zIHdoZXJlIHZpZGVvIHN0YXRlIGlzIHByZXNlcnZlZCBvdmVyIFMzLgorCisoMikgc3lzdGVtcyB3aGVyZSBpdCBpcyBwb3NzaWJsZSB0byBjYWxsIHRoZSB2aWRlbyBCSU9TIGR1cmluZyBTMworICByZXN1bWUuIFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCBjb3JyZWN0IHRvIGNhbGwgdGhlIHZpZGVvIEJJT1MgYXQKKyAgdGhhdCBwb2ludCwgYnV0IGl0IGhhcHBlbnMgdG8gd29yayBvbiBzb21lIG1hY2hpbmVzLiBVc2UKKyAgYWNwaV9zbGVlcD1zM19iaW9zLgorCisoMykgc3lzdGVtcyB0aGF0IGluaXRpYWxpemUgdmlkZW8gY2FyZCBpbnRvIHZnYSB0ZXh0IG1vZGUgYW5kIHdoZXJlCisgIHRoZSBCSU9TIHdvcmtzIHdlbGwgZW5vdWdoIHRvIGJlIGFibGUgdG8gc2V0IHZpZGVvIG1vZGUuIFVzZQorICBhY3BpX3NsZWVwPXMzX21vZGUgb24gdGhlc2UuCisKKyg0KSBvbiBzb21lIHN5c3RlbXMgczNfYmlvcyBraWNrcyB2aWRlbyBpbnRvIHRleHQgbW9kZSwgYW5kCisgIGFjcGlfc2xlZXA9czNfYmlvcyxzM19tb2RlIGlzIG5lZWRlZC4KKworKDUpIHJhZGVvbiBzeXN0ZW1zLCB3aGVyZSBYIGNhbiBzb2Z0LWJvb3QgeW91ciB2aWRlbyBjYXJkLiBZb3UnbGwgbmVlZAorICBuZXcgZW5vdWdoIFgsIGFuZCBwbGFpbiB0ZXh0IGNvbnNvbGUgKG5vIHZlc2FmYiBvciByYWRlb25mYiksIHNlZQorICBodHRwOi8vd3d3LmRvZXNpLmdteGhvbWUuZGUvbGludXgvdG04MDBzMy9zMy5odG1sLiBBY3R1YWxseSB5b3UKKyAgc2hvdWxkIHByb2JhYmx5IHVzZSB2YmV0b29sICg2KSBpbnN0ZWFkLgorCisoNikgb3RoZXIgcmFkZW9uIHN5c3RlbXMsIHdoZXJlIHZiZXRvb2wgaXMgZW5vdWdoIHRvIGJyaW5nIHN5c3RlbSBiYWNrCisgIHRvIGxpZmUuIEl0IG5lZWRzIHRleHQgY29uc29sZSB0byBiZSB3b3JraW5nLiBEbyB2YmV0b29sIHZiZXN0YXRlCisgIHNhdmUgPiAvdG1wL2RlbG1lOyBlY2hvIDMgPiAvcHJvYy9hY3BpL3NsZWVwOyB2YmV0b29sIHBvc3Q7IHZiZXRvb2wKKyAgdmJlc3RhdGUgcmVzdG9yZSA8IC90bXAvZGVsbWU7IHNldGZvbnQgPHdoYXRldmVyPiwgYW5kIHlvdXIgdmlkZW8KKyAgc2hvdWxkIHdvcmsuCisKKyg3KSBvbiBzb21lIHN5c3RlbXMsIGl0IGlzIHBvc3NpYmxlIHRvIGJvb3QgbW9zdCBvZiBrZXJuZWwsIGFuZCB0aGVuCisgIFBPU1RpbmcgYmlvcyB3b3Jrcy4gT2xlIFJvaG5lIGhhcyBwYXRjaCB0byBkbyBqdXN0IHRoYXQgYXQKKyAgaHR0cDovL2Rldi5nZW50b28ub3JnL35tYXJpbmVhbS9wYXRjaC1yYWRlb25mYi0yLjYuMTEtcmMyLW1tMi4KKworTm93LCBpZiB5b3UgcGFzcyBhY3BpX3NsZWVwPXNvbWV0aGluZywgYW5kIGl0IGRvZXMgbm90IHdvcmsgd2l0aCB5b3VyCitiaW9zLCB5b3UnbGwgZ2V0IGEgaGFyZCBjcmFzaCBkdXJpbmcgcmVzdW1lLiBCZSBjYXJlZnVsLiBBbHNvIGl0IGlzCitzYWZlc3QgdG8gZG8geW91ciBleHBlcmltZW50cyB3aXRoIHBsYWluIG9sZCBWR0EgY29uc29sZS4gVGhlIHZlc2FmYgorYW5kIHJhZGVvbmZiIChldGMpIGRyaXZlcnMgaGF2ZSBhIHRlbmRlbmN5IHRvIGNyYXNoIHRoZSBtYWNoaW5lIGR1cmluZworcmVzdW1lLgorCitZb3UgbWF5IGhhdmUgYSBzeXN0ZW0gd2hlcmUgbm9uZSBvZiBhYm92ZSB3b3Jrcy4gQXQgdGhhdCBwb2ludCB5b3UKK2VpdGhlciBpbnZlbnQgYW5vdGhlciB1Z2x5IGhhY2sgdGhhdCB3b3Jrcywgb3Igd3JpdGUgcHJvcGVyIGRyaXZlciBmb3IKK3lvdXIgdmlkZW8gY2FyZCAoZ29vZCBsdWNrIGdldHRpbmcgZG9jcyA6LSgpLiBNYXliZSBzdXNwZW5kaW5nIGZyb20gWAorKHByb3BlciBYLCBrbm93aW5nIHlvdXIgaGFyZHdhcmUsIG5vdCBYRjY4X0ZCY29uKSBtaWdodCBoYXZlIGJldHRlcgorY2hhbmNlIG9mIHdvcmtpbmcuCisKK1RhYmxlIG9mIGtub3duIHdvcmtpbmcgc3lzdGVtczoKKworTW9kZWwgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWNrIChvciAiaG93IHRvIGRvIGl0IikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWNlciBBc3BpcmUgMTQwNkxDCQlvbGUncyBsYXRlIEJJT1MgaW5pdCAoNyksIHR1cm4gb2ZmIERSSQorQWNlciBUTSAyNDJGWAkJCXZiZXRvb2wgKDYpCitBY2VyIFRNIEMzMDAgICAgICAgICAgICAgICAgICAgIHZnYT1ub3JtYWwgKG9ubHkgc3VzcGVuZCBvbiBjb25zb2xlLCBub3QgaW4gWCksIHZiZXRvb2wgKDYpCitBY2VyIFRNIDQwNTJMQ2kJCSAgICAgICAgczNfYmlvcyAoMikKK0FjZXIgVE0gNjM2TGNpCQkJczNfYmlvcyB2Z2E9bm9ybWFsICgyKQorQWNlciBUTSA2NTAgKFJhZGVvbiBNNykJCXZnYT1ub3JtYWwgcGx1cyBib290LXJhZGVvbiAoNSkgZ2V0cyB0ZXh0IGNvbnNvbGUgYmFjaworQWNlciBUTSA2NjAJCQk/Pz8gKCopCitBY2VyIFRNIDgwMAkJCXZnYT1ub3JtYWwsIFggcGF0Y2hlcywgc2VlIHdlYnBhZ2UgKDUpIG9yIHZiZXRvb2wgKDYpCitBY2VyIFRNIDgwMwkJCXZnYT1ub3JtYWwsIFggcGF0Y2hlcywgc2VlIHdlYnBhZ2UgKDUpIG9yIHZiZXRvb2wgKDYpCitBY2VyIFRNIDgwM0xDaQkJCXZnYT1ub3JtYWwsIHZiZXRvb2wgKDYpCitBcmltYSBXNzMwYQkJCXZiZXRvb2wgbmVlZGVkICg2KQorQXN1cyBMMjQwMEQgICAgICAgICAgICAgICAgICAgICBzM19tb2RlICgzKSgqKiopIChTMSBhbHNvIHdvcmtzIE9LKQorQXN1cyBMMzgwMEMgKFJhZGVvbiBNNykJCXMzX2Jpb3MgKDIpIChTMSBhbHNvIHdvcmtzIE9LKQorQXN1cyBNNk5FCQkJPz8/ICgqKQorQXRobG9uNjQgZGVza3RvcCBwcm90b3R5cGUJczNfYmlvcyAoMikKK0NvbXBhbCBDTC01MAkJCT8/PyAoKikKK0NvbXBhcSBBcm1hZGEgRTUwMCAtIFAzLTcwMCAgICAgbm9uZSAoMSkgKFMxIGFsc28gd29ya3MgT0spCitDb21wYXEgRXZvIE42MjBjCQl2Z2E9bm9ybWFsLCBzM19iaW9zICgyKQorRGVsbCA2MDBtLCBBVEkgUjI1MCBMZgkJbm9uZSAoMSksIGJ1dCBuZWVkcyB4b3JnLXgxMS02LjguMS45MDItMQorRGVsbCBENjAwLCBBVEkgUlYyNTAgICAgICAgICAgICB2Z2E9bm9ybWFsIGFuZCBYLCBvciB0cnkgdmJlc3RhdGUgKDYpCitEZWxsIEluc3Bpcm9uIDQwMDAJCT8/PyAoKikKK0RlbGwgSW5zcGlyb24gNTAwbQkJPz8/ICgqKQorRGVsbCBJbnNwaXJvbiA2MDBtCQk/Pz8gKCopCitEZWxsIEluc3Bpcm9uIDgyMDAJCT8/PyAoKikKK0RlbGwgSW5zcGlyb24gODUwMAkJPz8/ICgqKQorRGVsbCBJbnNwaXJvbiA4NjAwCQk/Pz8gKCopCitlTWFjaGluZXMgYXRobG9uNjQgbWFjaGluZXMJdmJldG9vbCBuZWVkZWQgKDYpIChzb21lb25lIHBsZWFzZSBnZXQgbWUgbW9kZWwgI3MpCitIUCBOQzYwMDAJCQlzM19iaW9zLCBtYXkgbm90IHVzZSByYWRlb25mYiAoMik7IG9yIHZiZXRvb2wgKDYpCitIUCBOWDcwMDAJCQk/Pz8gKCopCitIUCBQYXZpbGlvbiBaRDcwMDAJCXZiZXRvb2wgcG9zdCBuZWVkZWQsIG5lZWQgb3Blbi1zb3VyY2UgbnYgZHJpdmVyIGZvciBYCitIUCBPbW5pYm9vayBYRTMJYXRobG9uIHZlcnNpb24Jbm9uZSAoMSkKK0hQIE9tbmlib29rIFhFM0dDCQlub25lICgxKSwgdmlkZW8gaXMgUzMgU2F2YWdlL0lYLU1WCitJQk0gVFAgVDIwLCBtb2RlbCAyNjQ3LTQ0Rwlub25lICgxKSwgdmlkZW8gaXMgUzMgSW5jLiA4NkMyNzAtMjk0IFNhdmFnZS9JWC1NViwgdmVzYWZiIGdldHMgImludGVyZXN0aW5nIiBidXQgWCB3b3JrLgorSUJNIFRQIEEzMSAvIFR5cGUgMjY1Mi1NNUcgICAgICBzM19tb2RlICgzKSBbd29ya3Mgb2sgd2l0aCBCSU9TIDEuMDQgMjAwMi0wOC0yMywgYnV0IG5vdCBhdCBhbGwgd2l0aCBCSU9TIDEuMTEgMjAwNC0xMS0wNSA6LShdCitJQk0gVFAgUjMyIC8gVHlwZSAyNjU4LU1NRyAgICAgIG5vbmUgKDEpCitJQk0gVFAgUjQwIDI3MjJCM0cJCT8/PyAoKikKK0lCTSBUUCBSNTBwIC8gVHlwZSAxODMyLTIyVSAgICAgczNfYmlvcyAoMikKK0lCTSBUUCBSNTEJCQk/Pz8gKCopCitJQk0gVFAgVDMwCTIzNjY4MUEJCT8/PyAoKikKK0lCTSBUUCBUNDAgLyBUeXBlIDIzNzMtTVU0ICAgICAgbm9uZSAoMSkKK0lCTSBUUCBUNDBwCQkJbm9uZSAoMSkKK0lCTSBUUCBSNDBwCQkJczNfYmlvcyAoMikKK0lCTSBUUCBUNDFwCQkJczNfYmlvcyAoMiksIHN3aXRjaCB0byBYIGFmdGVyIHJlc3VtZQorSUJNIFRQIFQ0MgkJCT8/PyAoKikKK0lCTSBUaGlua1BhZCBUNDJwICgyMzczLUdURykJczNfYmlvcyAoMikKK0lCTSBUUCBYMjAJCQk/Pz8gKCopCitJQk0gVFAgWDMwCQkJPz8/ICgqKQorSUJNIFRQIFgzMSAvIFR5cGUgMjY3Mi1YWEggICAgICBub25lICgxKSwgdXNlIHJhZGVvbnRvb2wgKGh0dHA6Ly9mZGQuY29tL3NvZnR3YXJlL3JhZGVvbi8pIHRvIHR1cm4gb2ZmIGJhY2tsaWdodC4KK0lCTSBUaGlua3BhZCBYNDAgVHlwZSAyMzcxLTdKRyAgczNfYmlvcyxzM19tb2RlICg0KQorTWVkaW9uIE1ENDIyMAkJCT8/PyAoKikKK1NhbXN1bmcgUDM1CQkJdmJldG9vbCBuZWVkZWQgKDYpCitTaGFycCBQQy1BUjEwIChBVEkgcmFnZSkJbm9uZSAoMSkKK1NvbnkgVmFpbyBQQ0ctRjQwMwkJPz8/ICgqKQorU29ueSBWYWlvIFBDRy1ONTA1U04JCT8/PyAoKikKK1NvbnkgVmFpbyB2Z24tczI2MAkJWCBvciBib290LXJhZGVvbiBjYW4gaW5pdCBpdCAoNSkKK1Rvc2hpYmEgTGlicmV0dG8gTDUJCW5vbmUgKDEpCitUb3NoaWJhIFNhdGVsbGl0ZSA0MDMwQ0RUCXMzX21vZGUgKDMpCitUb3NoaWJhIFNhdGVsbGl0ZSA0MDgwWENEVCAgICAgIHMzX21vZGUgKDMpCitUb3NoaWJhIFNhdGVsbGl0ZSA0MDkwWENEVCAgICAgID8/PyAoKikKK1Rvc2hpYmEgU2F0ZWxsaXRlIFAxMC01NTQgICAgICAgczNfYmlvcyxzM19tb2RlICg0KSgqKioqKQorVW5pd2lsbCAyNDRJSU8JCQk/Pz8gKCopCisKKworKCopIGZyb20gaHR0cDovL3d3dy51YnVudHVsaW51eC5vcmcvd2lraS9Ib2FyeVBNUmVzdWx0cywgbm90IHN1cmUKKyAgICB3aGljaCBvcHRpb25zIHRvIHVzZS4gSWYgeW91IGtub3csIHBsZWFzZSB0ZWxsIG1lLgorCisoKioqKSBUbyBiZSB0ZXN0ZWQgd2l0aCBhIG5ld2VyIGtlcm5lbC4KKworKCoqKiopIE5vdCB3aXRoIFNNUCBrZXJuZWwsIFVQIG9ubHkuCisKK1ZCRXRvb2wgZGV0YWlscworfn5+fn5+fn5+fn5+fn5+Cisod2l0aCB0aGFua3MgdG8gQ2FybC1EYW5pZWwgSGFpbGZpbmdlcikKKworRmlyc3QsIGJvb3QgaW50byBYIGFuZCBydW4gdGhlIGZvbGxvd2luZyBzY3JpcHQgT05DRToKKyMhL2Jpbi9iYXNoCitzdGF0ZWRpcj0vcm9vdC9zMy9zdGF0ZQorbWtkaXIgLXAgJHN0YXRlZGlyCitjaHZ0IDIKK3NsZWVwIDEKK3ZiZXRvb2wgdmJlc3RhdGUgc2F2ZSA+JHN0YXRlZGlyL3ZiZQorCisKK1RvIHN1c3BlbmQgYW5kIHJlc3VtZSBwcm9wZXJseSwgY2FsbCB0aGUgZm9sbG93aW5nIHNjcmlwdCBhcyByb290OgorIyEvYmluL2Jhc2gKK3N0YXRlZGlyPS9yb290L3MzL3N0YXRlCitjdXJjb25zPWBmZ2NvbnNvbGVgCitmdXNlciAvZGV2L3R0eSRjdXJjb25zIDI+L2Rldi9udWxsfHhhcmdzIHBzIC1vIGNvbW09IC1wfGdyZXAgLXEgWCAmJiBjaHZ0IDIKK2NhdCAvZGV2L3Zjc2EgPiRzdGF0ZWRpci92Y3NhCitzeW5jCitlY2hvIDMgPi9wcm9jL2FjcGkvc2xlZXAKK3N5bmMKK3ZiZXRvb2wgcG9zdAordmJldG9vbCB2YmVzdGF0ZSByZXN0b3JlIDwkc3RhdGVkaXIvdmJlCitjYXQgJHN0YXRlZGlyL3Zjc2EgPi9kZXYvdmNzYQorcmNrYmQgcmVzdGFydAorY2h2dCAkW2N1cmNvbnMlNisxXQorY2h2dCAkY3VyY29ucworCisKK1VubGVzcyB5b3UgY2hhbmdlIHlvdXIgZ3JhcGhpY3MgY2FyZCBvciBvdGhlciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLAordGhlIHN0YXRlIG9uY2Ugc2F2ZWQgd2lsbCBiZSBPSyBmb3IgZXZlcnkgcmVzdW1lIGFmdGVyd2FyZHMuCitOT1RFOiBUaGUgInJja2JkIHJlc3RhcnQiIGNvbW1hbmQgbWF5IGJlIGRpZmZlcmVudCBmb3IgeW91cgorZGlzdHJpYnV0aW9uLiBTaW1wbHkgcmVwbGFjZSBpdCB3aXRoIHRoZSBjb21tYW5kIHlvdSB3b3VsZCB1c2UgdG8KK3NldCB0aGUgZm9udHMgb24gc2NyZWVuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlb19leHRlbnNpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlb19leHRlbnNpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzNkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvX2V4dGVuc2lvbi50eHQKQEAgLTAsMCArMSwzNCBAQAorVGhpcyBkcml2ZXIgaW1wbGVtZW50IHRoZSBBQ1BJIEV4dGVuc2lvbnMgRm9yIERpc3BsYXkgQWRhcHRlcnMKK2ZvciBpbnRlZ3JhdGVkIGdyYXBoaWNzIGRldmljZXMgb24gbW90aGVyYm9hcmQsIGFzIHNwZWNpZmllZCBpbgorQUNQSSAyLjAgU3BlY2lmaWNhdGlvbiwgQXBwZW5kaXggQiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBzb21lIGJhc2ljCitjb250cm9sIGxpa2UgZGVmaW5pbmcgdGhlIHZpZGVvIFBPU1QgZGV2aWNlLCByZXRyaWV2aW5nIEVESUQgaW5mb3JtYXRpb24KK29yIHRvIHNldHVwIGEgdmlkZW8gb3V0cHV0LCBldGMuICBOb3RlIHRoYXQgdGhpcyBpcyBhbiByZWYuIGltcGxlbWVudGF0aW9uIG9ubHkuCitJdCBtYXkgb3IgbWF5IG5vdCB3b3JrIGZvciB5b3VyIGludGVncmF0ZWQgdmlkZW8gZGV2aWNlLgorCitJbnRlcmZhY2VzIGV4cG9zZWQgdG8gdXNlcmxhbmQgdGhyb3VnaCAvcHJvYy9hY3BpL3ZpZGVvOgorCitWR0EvaW5mbyA6IGRpc3BsYXkgdGhlIHN1cHBvcnRlZCB2aWRlbyBidXMgZGV2aWNlIGNhcGFiaWxpdHkgbGlrZSAsVmlkZW8gUk9NLCBDUlQvTENEL1RWLgorVkdBL1JPTSA6ICBVc2VkIHRvIGdldCBhIGNvcHkgb2YgdGhlIGRpc3BsYXkgZGV2aWNlcycgUk9NIGRhdGEgKHVwIHRvIDRrKS4KK1ZHQS9QT1NUX2luZm8gOiBVc2VkIHRvIGRldGVybWluZSB3aGF0IG9wdGlvbnMgYXJlIGltcGxlbWVudGVkLgorVkdBL1BPU1QgOiBVc2VkIHRvIGdldC9zZXQgUE9TVCBkZXZpY2UuCitWR0EvRE9TIDogVXNlZCB0byBnZXQvc2V0IG93bmVyc2hpcCBvZiBvdXRwdXQgc3dpdGNoaW5nOgorCVBsZWFzZSByZWZlciBBQ1BJIHNwZWMgQi40LjEgX0RPUworVkdBL0NSVCA6IENSVCBvdXRwdXQKK1ZHQS9MQ0QgOiBMQ0Qgb3V0cHV0CitWR0EvVFYgOiBUViBvdXRwdXQgCitWR0EvKi9icmlnaHRuZXNzIDogVXNlZCB0byBnZXQvc2V0IGJyaWdodG5lc3Mgb2Ygb3V0cHV0IGRldmljZQorCitOb3RpZnkgZXZlbnQgdGhyb3VnaCAvcHJvYy9hY3BpL2V2ZW50OgorCisjZGVmaW5lIEFDUElfVklERU9fTk9USUZZX1NXSVRDSCAgICAgICAgMHg4MAorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9QUk9CRSAgICAgICAgIDB4ODEKKyNkZWZpbmUgQUNQSV9WSURFT19OT1RJRllfQ1lDTEUgICAgICAgICAweDgyCisjZGVmaW5lIEFDUElfVklERU9fTk9USUZZX05FWFRfT1VUUFVUICAgMHg4MworI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9QUkVWX09VVFBVVCAgIDB4ODQKKworI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9DWUNMRV9CUklHSFRORVNTICAgICAgMHg4MgorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9JTkNfQlJJR0hUTkVTUyAgICAgICAgMHg4MworI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9ERUNfQlJJR0hUTkVTUyAgICAgICAgMHg4NAorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9aRVJPX0JSSUdIVE5FU1MgICAgICAgMHg4NQorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9ESVNQTEFZX09GRiAgICAgICAgICAgMHg4NgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZWEwYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy8wMC1JTkRFWApAQCAtMCwwICsxLDIwIEBACitJbmRleCBvZiBmaWxlcyBpbiBEb2N1bWVudGF0aW9uL3Bvd2VycGMuICBJZiB5b3UgdGhpbmsgc29tZXRoaW5nIGFib3V0CitMaW51eC9QUEMgbmVlZHMgYW4gZW50cnkgaGVyZSwgbmVlZHMgY29ycmVjdGlvbiBvciB5b3UndmUgd3JpdHRlbiBvbmUKK3BsZWFzZSBtYWlsIG1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcnQgRG91Z2FuIChjb3J0QGZzbWxhYnMuY29tKQorCiswMC1JTkRFWAorCS0gdGhpcyBmaWxlCitjcHVfZmVhdHVyZXMudHh0CisJLSBpbmZvIG9uIGhvdyB3ZSBzdXBwb3J0IGEgdmFyaWV0eSBvZiBDUFVzIHdpdGggbWluaW1hbCBjb21waWxlLXRpbWUKKwlvcHRpb25zLgorcHBjX2h0YWIudHh0CisJLSBpbmZvIGFib3V0IHRoZSBMaW51eC9QUEMgL3Byb2MvcHBjX2h0YWIgZW50cnkKK3NtcC50eHQKKwktIHVzZSBhbmQgc3RhdGUgaW5mbyBhYm91dCBMaW51eC9QUEMgb24gTVAgbWFjaGluZXMKK1NCQzgyNjBfbWVtb3J5X21hcHBpbmcudHh0CisJLSBFU1QgU0JDODI2MCBib2FyZCBpbmZvCitzb3VuZC50eHQKKwktIGluZm8gb24gc291bmQgc3VwcG9ydCB1bmRlciBMaW51eC9QUEMKK3pJbWFnZV9sYXlvdXQudHh0CisJLSBpbmZvIG9uIHRoZSBrZXJuZWwgaW1hZ2VzIGZvciBMaW51eC9QUEMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9TQkM4MjYwX21lbW9yeV9tYXBwaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9TQkM4MjYwX21lbW9yeV9tYXBwaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmU5ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL1NCQzgyNjBfbWVtb3J5X21hcHBpbmcudHh0CkBAIC0wLDAgKzEsMTk3IEBACitQbGVhc2UgbWFpbCBtZSAoSm9uIERpZWtlbWEsIGRpZWtlbWFfam9uQHNpLmNvbSBvciBkaWVrZW1hQGNpZGVhcy5jb20pCitpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIGNvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgorCisJKiBFU1QgU0JDODI2MCBMaW51eCBtZW1vcnkgbWFwcGluZyBydWxlcworCisJaHR0cDovL3d3dy5lc3RjLmNvbS8gCisJaHR0cDovL3d3dy5lc3RjLmNvbS9wcm9kdWN0cy9ib2FyZHMvU0JDODI2MC04MjQwX2RzLmh0bWwKKworCUluaXRpYWwgY29uZGl0aW9uczoKKwktLS0tLS0tLS0tLS0tLS0tLS0tCisJCisJVGFza3MgdGhhdCBuZWVkIHRvIGJlIHBlcmZvcm0gYnkgdGhlIGJvb3QgUk9NIGJlZm9yZSBjb250cm9sIGlzCisJdHJhbnNmZXJyZWQgdG8gekltYWdlIChjb21wcmVzc2VkIExpbnV4IGtlcm5lbCk6CisKKwktIERlZmluZSB0aGUgSU1NUiB0byAweGYwMDAwMDAwCisKKwktIEluaXRpYWxpemUgdGhlIG1lbW9yeSBjb250cm9sbGVyIHNvIHRoYXQgUkFNIGlzIGF2YWlsYWJsZSBhdAorCSAgcGh5c2ljYWwgYWRkcmVzcyAweDAwMDAwMDAwLiAgT24gdGhlIFNCQzgyNjAgaXMgdGhpcyAxNk0gKDY0TSkKKwkgIFNEUkFNLgorCisJLSBUaGUgYm9vdCBST00gc2hvdWxkIG9ubHkgY2xlYXIgdGhlIFJBTSB0aGF0IGl0IGlzIHVzaW5nLgorCisJICBUaGUgcmVhc29uIGZvciBkb2luZyB0aGlzIGlzIHRvIGVuaGFuY2VzIHRoZSBjaGFuY2VzIG9mIGEKKwkgIHN1Y2Nlc3NmdWwgcG9zdCBtb3J0ZW0gb24gYSBMaW51eCBwYW5pYy4gIE9uZSBvZiB0aGUgZmlyc3QKKwkgIGl0ZW1zIHRvIGV4YW1pbmUgaXMgdGhlIDE2ayAoTE9HX0JVRl9MRU4pIGNpcmN1bGFyIGNvbnNvbGUKKwkgIGJ1ZmZlciBjYWxsZWQgbG9nX2J1ZiB3aGljaCBpcyBkZWZpbmVkIGluIGtlcm5lbC9wcmludGsuYy4KKworCS0gVG8gZW5oYW5jZSBib290IFJPTSBwZXJmb3JtYW5jZSwgdGhlIEktY2FjaGUgY2FuIGJlIGVuYWJsZWQuCisKKwkgIERhdGU6IE1vbiwgMjIgTWF5IDIwMDAgMTQ6MjE6MTAgLTA3MDAKKwkgIEZyb206IE5laWwgUnVzc2VsbCA8Y2FyZXRAYy1zaWRlLmNvbT4KKworCSAgTGlNb24gKExJbnV4IE1PTml0b3IpIHJ1bnMgd2l0aCBhbmQgc3RhcnRzIExpbnV4IHdpdGggTU1VCisJICBvZmYsIEktY2FjaGUgZW5hYmxlZCwgRC1jYWNoZSBkaXNhYmxlZC4gIFRoZSBJLWNhY2hlIGRvZXNuJ3QKKwkgIG5lZWQgaGludHMgZnJvbSB0aGUgTU1VIHRvIHdvcmsgY29ycmVjdGx5IGFzIHRoZSBELWNhY2hlCisJICBkb2VzLiAgTm8gRC1jYWNoZSBtZWFucyBubyBzcGVjaWFsIGNvZGUgdG8gaGFuZGxlIGRldmljZXMgaW4KKwkgIHRoZSBwcmVzZW5jZSBvZiBjYWNoZSAobm8gc25vb3BpbmcsIGV0YykuIFRoZSB1c2Ugb2YgdGhlCisJICBJLWNhY2hlIG1lYW5zIHRoYXQgdGhlIG1vbml0b3IgY2FuIHJ1biBhY2NlcHRhYmx5IGZhc3QKKwkgIGRpcmVjdGx5IGZyb20gUk9NLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gY29weSBpdCB0byBSQU0uCisKKwktIEJ1aWxkIHRoZSBib2FyZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKHNlZSAKKwkgIGluY2x1ZGUvYXNtLXBwYy9lc3Q4MjYwLmggZm9yIGl0cyBkZWZpbml0aW9uKQorCisJLSBUaGUgY29tcHJlc3NlZCBMaW51eCBrZXJuZWwgKHpJbWFnZSkgY29udGFpbnMgYSBib290c3RyYXAgbG9hZGVyIAorCSAgdGhhdCBpcyBwb3NpdGlvbiBpbmRlcGVuZGVudDsgeW91IGNhbiBsb2FkIGl0IGludG8gYW55IFJBTSwgCisJICBST00gb3IgRkxBU0ggbWVtb3J5IGFkZHJlc3MgPj0gMHgwMDUwMDAwMCAoYWJvdmUgNSBNQiksIG9yCisJICBhdCBpdHMgbGluayBhZGRyZXNzIG9mIDB4MDA0MDAwMDAgKDQgTUIpLgorCisJICBOb3RlOiBJZiB6SW1hZ2UgaXMgbG9hZGVkIGF0IGl0cyBsaW5rIGFkZHJlc3Mgb2YgMHgwMDQwMDAwMCAoNCBNQiksCisJICAgICAgICB0aGVuIHpJbWFnZSB3aWxsIHNraXAgdGhlIHN0ZXAgb2YgbW92aW5nIGl0c2VsZiB0byAKKwkJaXRzIGxpbmsgYWRkcmVzcy4KKworCS0gTG9hZCBSMyB3aXRoIHRoZSBhZGRyZXNzIG9mIHRoZSBib2FyZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKworCS0gVHJhbnNmZXIgY29udHJvbCB0byB6SW1hZ2UKKworCS0gVGhlIExpbnV4IGNvbnNvbGUgcG9ydCBpcyBTTUMxLCBhbmQgdGhlIGJhdWQgcmF0ZSBpcyBjb250cm9sbGVkCisJICBmcm9tIHRoZSBiaV9iYXVkcmF0ZSBmaWVsZCBvZiB0aGUgYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorCSAgT24gdGhpbmcgdG8ga2VlcCBpbiBtaW5kIHdoZW4gcGlja2luZyB0aGUgYmF1ZCByYXRlLCBpcyB0aGF0CisJICB0aGVyZSBpcyBubyBmbG93IGNvbnRyb2wgb24gdGhlIFNNQyBwb3J0cy4gIEkgd291bGQgc3RpY2sKKwkgIHdpdGggc29tZXRoaW5nIHNhZmUgYW5kIHN0YW5kYXJkIGxpa2UgMTkyMDAuCisKKwkgIE9uIHRoZSBFU1QgU0JDODI2MCwgdGhlIFNNQzEgcG9ydCBpcyBvbiB0aGUgQ09NMSBjb25uZWN0b3Igb2YKKwkgIHRoZSBib2FyZC4KKworCQorCUVTVCBTQkM4MjYwIGRlZmF1bHRzOgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaXAKKyAgICAgICAgTWVtb3J5ICAgICAgICAgICAgICAgICAgU2VsICBCdXMgICBVc2UKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tICAtLS0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJMHgwMDAwMDAwMC0weDAzRkZGRkZGICAgQ1MyICA2MHggICAoMTZNIG9yIDY0TSkvNjRNIFNEUkFNCisJMHgwNDAwMDAwMC0weDA0RkZGRkZGICAgQ1M0ICBsb2NhbCAgNE0vMTZNIFNEUkFNIChzb2xkZXJlZCB0byB0aGUgYm9hcmQpCisJMHgyMTAwMDAwMC0weDIxMDAwMDAwICAgQ1M3ICA2MHggICAgMUIvNjRLIEZsYXNoIHByZXNlbnQgZGV0ZWN0IChmcm9tIHRoZSBmbGFzaCBTSU1NKQorCTB4MjEwMDAwMDEtMHgyMTAwMDAwMSAgIENTNyAgNjB4ICAgIDFCLzY0SyBTd2l0Y2hlcyAocmVhZCkgYW5kIExFRHMgKHdyaXRlKQorCTB4MjIwMDAwMDAtMHgyMjAwRkZGRiAgIENTNSAgNjB4ICAgIDhLLzY0SyBFRVBST00KKwkweEZDMDAwMDAwLTB4RkNGRkZGRkYgICBDUzYgIDYweCAgICAyTS8xNk0gZmxhc2ggKDggYml0cyB3aWRlLCBzb2xkZXJlZCB0byB0aGUgYm9hcmQpCisJMHhGRTAwMDAwMC0weEZGRkZGRkZGICAgQ1MwICA2MHggICAgNE0vMTZNIGZsYXNoIChTSU1NKQorCisJTm90ZXM6CisJLS0tLS0tCisKKwktIFRoZSBjaGlwIHNlbGVjdHMgY2FuIG1hcCAzMksgYmxvY2tzIGFuZCB1cCAocG93ZXJzIG9mIDIpCisKKwktIFRoZSBTRFJBTSBtYWNoaW5lIGNhbiBoYW5kbGVkIHVwIHRvIDEyOE1ieXRlcyBwZXIgY2hpcCBzZWxlY3QKKworCS0gTGludXggdXNlcyB0aGUgNjB4IGJ1cyBtZW1vcnkgKHRoZSBTRFJBTSBESU1NKSBmb3IgdGhlIAorCSAgY29tbXVuaWNhdGlvbnMgYnVmZmVycy4KKworCS0gQkFUcyBjYW4gbWFwIDEyOEstMjU2TWJ5dGVzIGVhY2guICBUaGVyZSBhcmUgZm91ciBkYXRhIEJBVHMgYW5kCisJICBmb3VyIGluc3RydWN0aW9uIEJBVHMuICBHZW5lcmFsbHkgdGhlIGRhdGEgYW5kIGluc3RydWN0aW9uIEJBVHMKKwkgIGFyZSBtYXBwZWQgdGhlIHNhbWUuCisKKwktIFRoZSBJTU1SIG11c3QgYmUgc2V0IGFib3ZlIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgYWRkcmVzc2VzLAorCSAgd2hpY2ggc3RhcnQgYXQgMHhDMDAwMDAwMC4gIE90aGVyd2lzZSwgdGhlIGtlcm5lbCBtYXkgY3Jhc2ggYXMKKwkgIHNvb24gYXMgeW91IHN0YXJ0IGFueSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBkdWUgdG8gVk0gY29sbGlzaW9ucyAKKwkgIGluIHRoZSBrZXJuZWwgb3IgdXNlciBwcm9jZXNzIHNwYWNlLgorCisKKwkgIERldGFpbHMgZnJvbSBEYW4gTWFsZWsgPGRhbl9tYWxla0BtdmlzdGEuY29tPiBvbiAxMC8yOS8xOTk5OgorCisJICBUaGUgdXNlciBhcHBsaWNhdGlvbiB2aXJ0dWFsIHNwYWNlIGNvbnN1bWVzIHRoZSBmaXJzdCAyIEdieXRlcworCSAgKDB4MDAwMDAwMDAgdG8gMHg3RkZGRkZGRikuICBUaGUga2VybmVsIHZpcnR1YWwgdGV4dCBzdGFydHMgYXQKKwkgIDB4QzAwMDAwMDAsIHdpdGggZGF0YSBmb2xsb3dpbmcuICBUaGVyZSBpcyBhICJwcm90ZWN0aW9uIGhvbGUiCisJICBiZXR3ZWVuIHRoZSBlbmQgb2Yga2VybmVsIGRhdGEgYW5kIHRoZSBzdGFydCBvZiB0aGUga2VybmVsCisJICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3BhY2UsIGJ1dCB0aGlzIHNwYWNlIGlzIHN0aWxsIHdpdGhpbgorCSAgMHhDeHh4eHh4eC4KKworCSAgT2J2aW91c2x5IHRoZSBrZXJuZWwgY2FuJ3QgbWFwIGFueSBwaHlzaWNhbCBhZGRyZXNzZXMgMToxIGluCisJICB0aGVzZSByYW5nZXMuCisKKworCSAgRGV0YWlscyBmcm9tIERhbiBNYWxlayA8ZGFuX21hbGVrQG12aXN0YS5jb20+IG9uIDUvMTkvMjAwMDoKKworCSAgRHVyaW5nIHRoZSBlYXJseSBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHRoZSBrZXJuZWwgdmlydHVhbAorCSAgbWVtb3J5IGFsbG9jYXRvciBpcyBub3Qgb3BlcmF0aW9uYWwuICBQcmlvciB0byB0aGlzIEtWTQorCSAgaW5pdGlhbGl6YXRpb24sIHdlIGNob29zZSB0byBtYXAgdmlydHVhbCB0byBwaHlzaWNhbCBhZGRyZXNzZXMKKwkgIDE6MS4gIFRoYXQgaXMsIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIGV4YWN0bHkgbWF0Y2hlcyB0aGUKKwkgIHBoeXNpY2FsIGFkZHJlc3Mgb24gdGhlIGJ1cy4gIFRoZXNlIG1hcHBpbmdzIGFyZSB0eXBpY2FsbHkgZG9uZQorCSAgaW4gYXJjaC9wcGMva2VybmVsL2hlYWQuUywgb3IgYXJjaC9wcGMvbW0vaW5pdC5jLiAgT25seQorCSAgYWJzb2x1dGVseSBuZWNlc3NhcnkgbWFwcGluZ3Mgc2hvdWxkIGJlIGRvbmUgYXQgdGhpcyB0aW1lLCBmb3IKKwkgIGV4YW1wbGUgYm9hcmQgY29udHJvbCByZWdpc3RlcnMgb3IgYSBzZXJpYWwgdWFydC4gIE5vcm1hbCBkZXZpY2UKKwkgIGRyaXZlciBpbml0aWFsaXphdGlvbiBzaG91bGQgbWFwIHJlc291cmNlcyBsYXRlciB3aGVuIG5lY2Vzc2FyeS4KKworCSAgQWx0aG91Z2ggcGxhdGZvcm0gZGVwZW5kZW50LCBhbmQgY2VydGFpbmx5IHRoZSBjYXNlIGZvciBlbWJlZGRlZAorCSAgOHh4LCB0cmFkaXRpb25hbGx5IG1lbW9yeSBpcyBtYXBwZWQgYXQgcGh5c2ljYWwgYWRkcmVzcyB6ZXJvLAorCSAgYW5kIEkvTyBkZXZpY2VzIGFib3ZlIHBoeXNpY2FsIGFkZHJlc3MgMHg4MDAwMDAwMC4gIFRoZSBsb3dlc3QKKwkgIGFuZCBoaWdoZXN0IChhYm92ZSAweGYwMDAwMDAwKSBJL08gYWRkcmVzc2VzIGFyZSB0cmFkaXRpb25hbGx5IAorCSAgdXNlZCBmb3IgZGV2aWNlcyBvciByZWdpc3RlcnMgd2UgbmVlZCB0byBtYXAgZHVyaW5nIGtlcm5lbCAKKwkgIGluaXRpYWxpemF0aW9uIGFuZCBwcmlvciB0byBLVk0gb3BlcmF0aW9uLiAgRm9yIHRoaXMgcmVhc29uLCAKKwkgIGFuZCBzaW5jZSBpdCBmb2xsb3dlZCBwcmlvciBQb3dlclBDIHBsYXRmb3JtIGV4YW1wbGVzLCBJIGNob3NlIAorCSAgdG8gbWFwIHRoZSBlbWJlZGRlZCA4eHgga2VybmVsIHRvIHRoZSAweGMwMDAwMDAwIHZpcnR1YWwgYWRkcmVzcy4KKwkgIFRoaXMgd2F5LCB3ZSBjYW4gZW5hYmxlIHRoZSBNTVUgdG8gbWFwIHRoZSBrZXJuZWwgZm9yIHByb3BlciAKKwkgIG9wZXJhdGlvbiwgYW5kIHN0aWxsIG1hcCBhIGZldyB3aW5kb3dzIGJlZm9yZSB0aGUgS1ZNIGlzIG9wZXJhdGlvbmFsLgorCisJICBPbiBzb21lIHN5c3RlbXMsIHlvdSBjb3VsZCBwb3NzaWJseSBydW4gdGhlIGtlcm5lbCBhdCB0aGUgCisJICAweDgwMDAwMDAwIG9yIGFueSBvdGhlciB2aXJ0dWFsIGFkZHJlc3MuICBJdCBqdXN0IGRlcGVuZHMgdXBvbiAKKwkgIG1hcHBpbmcgdGhhdCBtdXN0IGJlIGRvbmUgcHJpb3IgdG8gS1ZNIG9wZXJhdGlvbmFsLiAgWW91IGNhbiBuZXZlciAKKwkgIG1hcCBkZXZpY2VzIG9yIGtlcm5lbCBzcGFjZXMgdGhhdCBvdmVybGFwIHdpdGggdGhlIHVzZXIgdmlydHVhbCAKKwkgIHNwYWNlLiAgVGhpcyBpcyB3aHkgZGVmYXVsdCBJTU1SIG1hcHBpbmcgdXNlZCBieSBtb3N0IEJETSB0b29scyAKKwkgIHdvbid0IHdvcmsuICBUaGV5IHB1dCB0aGUgSU1NUiBhdCBzb21ldGhpbmcgbGlrZSAweDEwMDAwMDAwIG9yIAorCSAgMHgwMjAwMDAwMCBmb3IgZXhhbXBsZS4gIFlvdSBzaW1wbHkgY2FuJ3QgbWFwIHRoZXNlIGFkZHJlc3NlcyBlYXJseQorCSAgaW4gdGhlIGtlcm5lbCwgYW5kIGNvbnRpbnVlIHByb3BlciBzeXN0ZW0gb3BlcmF0aW9uLgorCisJICBUaGUgZW1iZWRkZWQgOHh4LzgyeHgga2VybmVsIGlzIG1hdHVyZSBlbm91Z2ggdGhhdCBhbGwgeW91IHNob3VsZCAKKwkgIG5lZWQgdG8gZG8gaXMgbWFwIHRoZSBJTU1SIHNvbWVwbGFjZSBhdCBvciBhYm92ZSAweGYwMDAwMDAwIGFuZCBpdCAKKwkgIHNob3VsZCBib290IGZhciBlbm91Z2ggdG8gZ2V0IHNlcmlhbCBjb25zb2xlIG1lc3NhZ2VzIGFuZCBLR0RCIAorCSAgY29ubmVjdGVkIG9uIGFueSBwbGF0Zm9ybS4gIFRoZXJlIGFyZSBsb3RzIG9mIG90aGVyIHN1YnRsZSBtZW1vcnkgCisJICBtYW5hZ2VtZW50IGRlc2lnbiBmZWF0dXJlcyB0aGF0IHlvdSBzaW1wbHkgZG9uJ3QgbmVlZCB0byB3b3JyeSAKKwkgIGFib3V0LiAgSWYgeW91IGFyZSBjaGFuZ2luZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBNTVUgaW5pdGlhbGl6YXRpb24sCisJICB5b3UgYXJlIGxpa2VseSBicmVha2luZyB0aGluZ3MgdGhhdCBhcmUga25vd24gdG8gd29yayBhbmQgYXJlIAorCSAgaGVhZGluZyBkb3duIGEgcGF0aCBvZiBkaXNhc3RlciBhbmQgZnJ1c3RyYXRpb24uICBZb3VyIGNoYW5nZXMgCisJICBzaG91bGQgYmUgdG8gbWFrZSB0aGUgZmxleGliaWxpdHkgb2YgdGhlIHByb2Nlc3NvciBmaXQgTGludXgsIAorCSAgbm90IGZvcmNlIGFyYml0cmFyeSBhbmQgbm9uLXdvcmthYmxlIG1lbW9yeSBtYXBwaW5ncyBpbnRvIExpbnV4LgorCisJLSBZb3UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgS0VSTkVMTE9BRCBvciBLRVJORUxCQVNFLCBvdGhlcndpc2UgdGhlCisJICB2aXJ0dWFsIG1lbW9yeSBhbmQgTU1VIGNvZGUgd2lsbCBnZXQgY29uZnVzZWQuCisJCisJICBhcmNoL3BwYy9NYWtlZmlsZTpLRVJORUxMT0FEID0gMHhjMDAwMDAwMAorCisJICBpbmNsdWRlL2FzbS1wcGMvcGFnZS5oOiNkZWZpbmUgUEFHRV9PRkZTRVQgICAgMHhjMDAwMDAwMAorCSAgaW5jbHVkZS9hc20tcHBjL3BhZ2UuaDojZGVmaW5lIEtFUk5FTEJBU0UgICAgIFBBR0VfT0ZGU0VUCisKKwktIFJBTSBpcyBhdCBwaHlzaWNhbCBhZGRyZXNzIDB4MDAwMDAwMDAsIGFuZCBnZXRzIG1hcHBlZCB0byAKKwkgIHZpcnR1YWwgYWRkcmVzcyAweEMwMDAwMDAwIGZvciB0aGUga2VybmVsLgorCisKKwlQaHlzaWNhbCBhZGRyZXNzZXMgdXNlZCBieSB0aGUgTGludXgga2VybmVsOgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkweDAwMDAwMDAwLTB4M0ZGRkZGRkYgICAxR0IgcmVzZXJ2ZWQgZm9yIFJBTQorCTB4RjAwMDAwMDAtMHhGMDAxRkZGRiAgIDEyOEsgSU1NUiAgNjRLIHVzZWQgZm9yIGR1YWwgcG9ydCBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NEsgZm9yIDgyNjAgcmVnaXN0ZXJzCisKKwkKKyAgICAgICAgTG9naWNhbCBhZGRyZXNzZXMgdXNlZCBieSB0aGUgTGludXgga2VybmVsOgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCTB4RjAwMDAwMDAtMHhGRkZGRkZGRiAgIDI1Nk0gQkFUMCAoSU1NUjogZHVhbCBwb3J0IFJBTSwgcmVnaXN0ZXJzKQorCTB4RTAwMDAwMDAtMHhFRkZGRkZGRiAgIDI1Nk0gQkFUMSAoSS9PIHNwYWNlIGZvciBjdXN0b20gYm9hcmRzKQorCTB4QzAwMDAwMDAtMHhDRkZGRkZGRiAgIDI1Nk0gQkFUMiAoUkFNKQorCTB4RDAwMDAwMDAtMHhERkZGRkZGRiAgIDI1Nk0gQkFUMyAoaWYgUkFNID4gMjU2TUJ5dGUpCisKKworCUVTVCBTQkM4MjYwIExpbnV4IG1hcHBpbmc6CisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCURCQVQwLCBJQkFUMCwgY2FjaGUgaW5oaWJpdGVkOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaXAKKyAgICAgICAgTWVtb3J5ICAgICAgICAgICAgICAgICAgU2VsICBVc2UKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgMHhGMDAwMDAwMC0weEYwMDFGRkZGICAgbi9hICBJTU1SOiBkdWFsIHBvcnQgUkFNLCByZWdpc3RlcnMKKworICAgICAgICBEQkFUMSwgSUJBVDEsIGNhY2hlIGluaGliaXRlZDoKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2NwdV9mZWF0dXJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvY3B1X2ZlYXR1cmVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzI3Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2NwdV9mZWF0dXJlcy50eHQKQEAgLTAsMCArMSw1NiBAQAorSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzQGF1c3Rpbi5pYm0uY29tPgorNSBKdW4gMjAwMgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgc3lzdGVtIChpbmNsdWRpbmcgc2VsZi1tb2RpZnlpbmcgY29kZSkgdXNlZCBpbiB0aGUKK1BQQyBMaW51eCBrZXJuZWwgdG8gc3VwcG9ydCBhIHZhcmlldHkgb2YgUG93ZXJQQyBDUFVzIHdpdGhvdXQgcmVxdWlyaW5nCitjb21waWxlLXRpbWUgc2VsZWN0aW9uLgorCitFYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzIHRoZSBwcGMzMiBrZXJuZWwgZGV0ZWN0cyB0aGUgY3VycmVudCBDUFUgdHlwZSBhbmQKK2Nob29zZXMgYSBzZXQgb2YgZmVhdHVyZXMgYWNjb3JkaW5nbHkuIFNvbWUgZXhhbXBsZXMgaW5jbHVkZSBBbHRpdmVjIHN1cHBvcnQsCitzcGxpdCBpbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZXMsIGFuZCBpZiB0aGUgQ1BVIHN1cHBvcnRzIHRoZSBET1pFIGFuZCBOQVAKK3NsZWVwIG1vZGVzLgorCitEZXRlY3Rpb24gb2YgdGhlIGZlYXR1cmUgc2V0IGlzIHNpbXBsZS4gQSBsaXN0IG9mIHByb2Nlc3NvcnMgY2FuIGJlIGZvdW5kIGluCithcmNoL3BwYy9rZXJuZWwvY3B1dGFibGUuYy4gVGhlIFBWUiByZWdpc3RlciBpcyBtYXNrZWQgYW5kIGNvbXBhcmVkIHdpdGggZWFjaAordmFsdWUgaW4gdGhlIGxpc3QuIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSBjcHVfZmVhdHVyZXMgb2YgY3VyX2NwdV9zcGVjIGlzCithc3NpZ25lZCB0byB0aGUgZmVhdHVyZSBiaXRtYXNrIGZvciB0aGlzIHByb2Nlc3NvciBhbmQgYSBfX3NldHVwX2NwdSBmdW5jdGlvbgoraXMgY2FsbGVkLgorCitDIGNvZGUgbWF5IHRlc3QgJ2N1cl9jcHVfc3BlY1tzbXBfcHJvY2Vzc29yX2lkKCldLT5jcHVfZmVhdHVyZXMnIGZvciBhCitwYXJ0aWN1bGFyIGZlYXR1cmUgYml0LiBUaGlzIGlzIGRvbmUgaW4gcXVpdGUgYSBmZXcgcGxhY2VzLCBmb3IgZXhhbXBsZQoraW4gcHBjX3NldHVwX2wyY3IoKS4KKworSW1wbGVtZW50aW5nIGNwdWZlYXR1cmVzIGluIGFzc2VtYmx5IGlzIGEgbGl0dGxlIG1vcmUgaW52b2x2ZWQuIFRoZXJlIGFyZQorc2V2ZXJhbCBwYXRocyB0aGF0IGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgd291bGQgc3VmZmVyIGlmIGFuIGFycmF5CitpbmRleCwgc3RydWN0dXJlIGRlcmVmZXJlbmNlLCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHdlcmUgYWRkZWQuIFRvIGF2b2lkIHRoZQorcGVyZm9ybWFuY2UgcGVuYWx0eSBidXQgc3RpbGwgYWxsb3cgZm9yIHJ1bnRpbWUgKHJhdGhlciB0aGFuIGNvbXBpbGUtdGltZSkgQ1BVCitzZWxlY3Rpb24sIHVudXNlZCBjb2RlIGlzIHJlcGxhY2VkIGJ5ICdub3AnIGluc3RydWN0aW9ucy4gVGhpcyBub3AnaW5nIGlzCitiYXNlZCBvbiBDUFUgMCdzIGNhcGFiaWxpdGllcywgc28gYSBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtIHdpdGggbm9uLWlkZW50aWNhbAorcHJvY2Vzc29ycyB3aWxsIG5vdCB3b3JrIChidXQgc3VjaCBhIHN5c3RlbSB3b3VsZCBsaWtlbHkgaGF2ZSBvdGhlciBwcm9ibGVtcworYW55d2F5cykuCisKK0FmdGVyIGRldGVjdGluZyB0aGUgcHJvY2Vzc29yIHR5cGUsIHRoZSBrZXJuZWwgcGF0Y2hlcyBvdXQgc2VjdGlvbnMgb2YgY29kZQordGhhdCBzaG91bGRuJ3QgYmUgdXNlZCBieSB3cml0aW5nIG5vcCdzIG92ZXIgaXQuIFVzaW5nIGNwdWZlYXR1cmVzIHJlcXVpcmVzCitqdXN0IDIgbWFjcm9zIChmb3VuZCBpbiBpbmNsdWRlL2FzbS1wcGMvY3B1dGFibGUuaCksIGFzIHNlZW4gaW4gaGVhZC5TCit0cmFuc2Zlcl90b19oYW5kbGVyOgorCisJI2lmZGVmIENPTkZJR19BTFRJVkVDCisJQkVHSU5fRlRSX1NFQ1RJT04KKwkJbWZzcHIJcjIyLFNQUk5fVlJTQVZFCQkvKiBpZiBHNCwgc2F2ZSB2cnNhdmUgcmVnaXN0ZXIgdmFsdWUgKi8KKwkJc3R3CXIyMixUSFJFQURfVlJTQVZFKHIyMykKKwlFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9BTFRJVkVDKQorCSNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLworCitJZiBDUFUgMCBzdXBwb3J0cyBBbHRpdmVjLCB0aGUgY29kZSBpcyBsZWZ0IHVudG91Y2hlZC4gSWYgaXQgZG9lc24ndCwgYm90aAoraW5zdHJ1Y3Rpb25zIGFyZSByZXBsYWNlZCB3aXRoIG5vcCdzLgorCitUaGUgRU5EX0ZUUl9TRUNUSU9OIG1hY3JvIGhhcyB0d28gc2ltcGxlciB2YXJpYXRpb25zOiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQKK2FuZCBFTkRfRlRSX1NFQ1RJT05fSUZDTFIuIFRoZXNlIHNpbXBseSB0ZXN0IGlmIGEgZmxhZyBpcyBzZXQgKGluCitjdXJfY3B1X3NwZWNbMF0tPmNwdV9mZWF0dXJlcykgb3IgaXMgY2xlYXJlZCwgcmVzcGVjdGl2ZWx5LiBUaGVzZSB0d28gbWFjcm9zCitzaG91bGQgYmUgdXNlZCBpbiB0aGUgbWFqb3JpdHkgb2YgY2FzZXMuCisKK1RoZSBFTkRfRlRSX1NFQ1RJT04gbWFjcm9zIGFyZSBpbXBsZW1lbnRlZCBieSBzdG9yaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKK2NvZGUgaW4gdGhlICdfX2Z0cl9maXh1cCcgRUxGIHNlY3Rpb24uIFdoZW4gZG9fY3B1X2Z0cl9maXh1cHMKKyhhcmNoL3BwYy9rZXJuZWwvbWlzYy5TKSBpcyBpbnZva2VkLCBpdCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgcmVjb3JkcyBpbgorX19mdHJfZml4dXAsIGFuZCBpZiB0aGUgcmVxdWlyZWQgZmVhdHVyZSBpcyBub3QgcHJlc2VudCBpdCB3aWxsIGxvb3Agd3JpdGluZworbm9wJ3MgZnJvbSBlYWNoIEJFR0lOX0ZUUl9TRUNUSU9OIHRvIEVORF9GVFJfU0VDVElPTi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9lZWgtcGNpLWVycm9yLXJlY292ZXJ5LnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9lZWgtcGNpLWVycm9yLXJlY292ZXJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmZlNzFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2VlaC1wY2ktZXJyb3ItcmVjb3ZlcnkudHh0CkBAIC0wLDAgKzEsMzMyIEBACisKKworICAgICAgICAgICAgICAgICAgICAgIFBDSSBCdXMgRUVIIEVycm9yIFJlY292ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmFzIFZlcHN0YXMKKyAgICAgICAgICAgICAgICAgICAgICAgPGxpbmFzQGF1c3Rpbi5pYm0uY29tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAxMiBKYW51YXJ5IDIwMDUKKworCitPdmVydmlldzoKKy0tLS0tLS0tLQorVGhlIElCTSBQT1dFUi1iYXNlZCBwU2VyaWVzIGFuZCBpU2VyaWVzIGNvbXB1dGVycyBpbmNsdWRlIFBDSSBidXMKK2NvbnRyb2xsZXIgY2hpcHMgdGhhdCBoYXZlIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBmb3IgZGV0ZWN0aW5nIGFuZAorcmVwb3J0aW5nIGEgbGFyZ2UgdmFyaWV0eSBvZiBQQ0kgYnVzIGVycm9yIGNvbmRpdGlvbnMuICBUaGVzZSBmZWF0dXJlcworZ28gdW5kZXIgdGhlIG5hbWUgb2YgIkVFSCIsIGZvciAiRXh0ZW5kZWQgRXJyb3IgSGFuZGxpbmciLiAgVGhlIEVFSAoraGFyZHdhcmUgZmVhdHVyZXMgYWxsb3cgUENJIGJ1cyBlcnJvcnMgdG8gYmUgY2xlYXJlZCBhbmQgYSBQQ0kKK2NhcmQgdG8gYmUgInJlYm9vdGVkIiwgd2l0aG91dCBhbHNvIGhhdmluZyB0byByZWJvb3QgdGhlIG9wZXJhdGluZworc3lzdGVtLgorCitUaGlzIGlzIGluIGNvbnRyYXN0IHRvIHRyYWRpdGlvbmFsIFBDSSBlcnJvciBoYW5kbGluZywgd2hlcmUgdGhlCitQQ0kgY2hpcCBpcyB3aXJlZCBkaXJlY3RseSB0byB0aGUgQ1BVLCBhbmQgYW4gZXJyb3Igd291bGQgY2F1c2UKK2EgQ1BVIG1hY2hpbmUtY2hlY2svY2hlY2stc3RvcCBjb25kaXRpb24sIGhhbHRpbmcgdGhlIENQVSBlbnRpcmVseS4KK0Fub3RoZXIgInRyYWRpdGlvbmFsIiB0ZWNobmlxdWUgaXMgdG8gaWdub3JlIHN1Y2ggZXJyb3JzLCB3aGljaAorY2FuIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uLCBib3RoIG9mIHVzZXIgZGF0YSBvciBvZiBrZXJuZWwgZGF0YSwKK2h1bmcvdW5yZXNwb25zaXZlIGFkYXB0ZXJzLCBvciBzeXN0ZW0gY3Jhc2hlcy9sb2NrdXBzLiAgVGh1cywKK3RoZSBpZGVhIGJlaGluZCBFRUggaXMgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYW4gYmVjb21lIG1vcmUKK3JlbGlhYmxlIGFuZCByb2J1c3QgYnkgcHJvdGVjdGluZyBpdCBmcm9tIFBDSSBlcnJvcnMsIGFuZCBnaXZpbmcKK3RoZSBPUyB0aGUgYWJpbGl0eSB0byAicmVib290Ii9yZWNvdmVyIGluZGl2aWR1YWwgUENJIGRldmljZXMuCisKK0Z1dHVyZSBzeXN0ZW1zIGZyb20gb3RoZXIgdmVuZG9ycywgYmFzZWQgb24gdGhlIFBDSS1FIHNwZWNpZmljYXRpb24sCittYXkgY29udGFpbiBzaW1pbGFyIGZlYXR1cmVzLgorCisKK0NhdXNlcyBvZiBFRUggRXJyb3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorRUVIIHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIHRvIGd1YXJkIGFnYWluc3QgaGFyZHdhcmUgZmFpbHVyZSwgc3VjaAorYXMgUENJIGNhcmRzIGR5aW5nIGZyb20gaGVhdCwgaHVtaWRpdHksIGR1c3QsIHZpYnJhdGlvbiBhbmQgYmFkCitlbGVjdHJpY2FsIGNvbm5lY3Rpb25zLiBUaGUgdmFzdCBtYWpvcml0eSBvZiBFRUggZXJyb3JzIHNlZW4gaW4KKyJyZWFsIGxpZmUiIGFyZSBkdWUgdG8gZWl0aHIgcG9vcmx5IHNlYXRlZCBQQ0kgY2FyZHMsIG9yLAordW5mb3J0dW5hdGVseSBxdWl0ZSBjb21tb25seSwgZHVlIGRldmljZSBkcml2ZXIgYnVncywgZGV2aWNlIGZpcm13YXJlCitidWdzLCBhbmQgc29tZXRpbWVzIFBDSSBjYXJkIGhhcmR3YXJlIGJ1Z3MuCisKK1RoZSBtb3N0IGNvbW1vbiBzb2Z0d2FyZSBidWcsIGlzIG9uZSB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvCithdHRlbXB0IHRvIERNQSB0byBhIGxvY2F0aW9uIGluIHN5c3RlbSBtZW1vcnkgdGhhdCBoYXMgbm90IGJlZW4KK3Jlc2VydmVkIGZvciBETUEgYWNjZXNzIGZvciB0aGF0IGNhcmQuICBUaGlzIGlzIGEgcG93ZXJmdWwgZmVhdHVyZSwKK2FzIGl0IHByZXZlbnRzIHdoYXQ7IG90aGVyd2lzZSwgd291bGQgaGF2ZSBiZWVuIHNpbGVudCBtZW1vcnkKK2NvcnJ1cHRpb24gY2F1c2VkIGJ5IHRoZSBiYWQgRE1BLiAgQSBudW1iZXIgb2YgZGV2aWNlIGRyaXZlcgorYnVncyBoYXZlIGJlZW4gZm91bmQgYW5kIGZpeGVkIGluIHRoaXMgd2F5IG92ZXIgdGhlIHBhc3QgZmV3Cit5ZWFycy4gIE90aGVyIHBvc3NpYmxlIGNhdXNlcyBvZiBFRUggZXJyb3JzIGluY2x1ZGUgZGF0YSBvcgorYWRkcmVzcyBsaW5lIHBhcml0eSBlcnJvcnMgKGZvciBleGFtcGxlLCBkdWUgdG8gcG9vciBlbGVjdHJpY2FsCitjb25uZWN0aXZpdHkgZHVlIHRvIGEgcG9vcmx5IHNlYXRlZCBjYXJkKSwgYW5kIFBDSS1YIHNwbGl0LWNvbXBsZXRpb24KK2Vycm9ycyAoZHVlIHRvIHNvZnR3YXJlLCBkZXZpY2UgZmlybXdhcmUsIG9yIGRldmljZSBQQ0kgaGFyZHdhcmUgYnVncykuCitUaGUgdmFzdCBtYWpvcml0eSBvZiAidHJ1ZSBoYXJkd2FyZSBmYWlsdXJlcyIgY2FuIGJlIGN1cmVkIGJ5CitwaHlzaWNhbGx5IHJlbW92aW5nIGFuZCByZS1zZWF0aW5nIHRoZSBQQ0kgY2FyZC4KKworCitEZXRlY3Rpb24gYW5kIFJlY292ZXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiB0aGUgZm9sbG93aW5nIGRpc2N1c3Npb24sIGEgZ2VuZXJpYyBvdmVydmlldyBvZiBob3cgdG8gZGV0ZWN0CithbmQgcmVjb3ZlciBmcm9tIEVFSCBlcnJvcnMgd2lsbCBiZSBwcmVzZW50ZWQuIFRoaXMgaXMgZm9sbG93ZWQKK2J5IGFuIG92ZXJ2aWV3IG9mIGhvdyB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgTGludXgKK2tlcm5lbCBkb2VzIGl0LiAgVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZSwKK2FuZCBzb21lIG9mIHRoZSBmaW5lciBwb2ludHMgYXJlIHN0aWxsIGJlaW5nIGRlYmF0ZWQuICBUaGVzZQorbWF5IGluIHR1cm4gYmUgc3dheWVkIGlmIG9yIHdoZW4gb3RoZXIgYXJjaGl0ZWN0dXJlcyBpbXBsZW1lbnQKK3NpbWlsYXIgZnVuY3Rpb25hbGl0eS4KKworV2hlbiBhIFBDSSBIb3N0IEJyaWRnZSAoUEhCLCB0aGUgYnVzIGNvbnRyb2xsZXIgY29ubmVjdGluZyB0aGUKK1BDSSBidXMgdG8gdGhlIHN5c3RlbSBDUFUgZWxlY3Ryb25pY3MgY29tcGxleCkgZGV0ZWN0cyBhIFBDSSBlcnJvcgorY29uZGl0aW9uLCBpdCB3aWxsICJpc29sYXRlIiB0aGUgYWZmZWN0ZWQgUENJIGNhcmQuICBJc29sYXRpb24KK3dpbGwgYmxvY2sgYWxsIHdyaXRlcyAoZWl0aGVyIHRvIHRoZSBjYXJkIGZyb20gdGhlIHN5c3RlbSwgb3IKK2Zyb20gdGhlIGNhcmQgdG8gdGhlIHN5c3RlbSksIGFuZCBpdCB3aWxsIGNhdXNlIGFsbCByZWFkcyB0bworcmV0dXJuIGFsbC1mZidzICgweGZmLCAweGZmZmYsIDB4ZmZmZmZmZmYgZm9yIDgvMTYvMzItYml0IHJlYWRzKS4KK1RoaXMgdmFsdWUgd2FzIGNob3NlbiBiZWNhdXNlIGl0IGlzIHRoZSBzYW1lIHZhbHVlIHlvdSB3b3VsZAorZ2V0IGlmIHRoZSBkZXZpY2Ugd2FzIHBoeXNpY2FsbHkgdW5wbHVnZ2VkIGZyb20gdGhlIHNsb3QuCitUaGlzIGluY2x1ZGVzIGFjY2VzcyB0byBQQ0kgbWVtb3J5LCBJL08gc3BhY2UsIGFuZCBQQ0kgY29uZmlnCitzcGFjZS4gIEludGVycnVwdHM7IGhvd2V2ZXIsIHdpbGwgY29udGludWVkIHRvIGJlIGRlbGl2ZXJlZC4KKworRGV0ZWN0aW9uIGFuZCByZWNvdmVyeSBhcmUgcGVyZm9ybWVkIHdpdGggdGhlIGFpZCBvZiBwcGM2NAorZmlybXdhcmUuICBUaGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBpbiB0aGUgTGludXgga2VybmVsCitpbnRvIHRoZSBmaXJtd2FyZSBhcmUgcmVmZXJyZWQgdG8gYXMgUlRBUyAoUnVuLVRpbWUgQWJzdHJhY3Rpb24KK1NlcnZpY2VzKS4gIFRoZSBMaW51eCBrZXJuZWwgZG9lcyBub3QgKHNob3VsZCBub3QpIGFjY2VzcwordGhlIEVFSCBmdW5jdGlvbiBpbiB0aGUgUENJIGNoaXBzZXRzIGRpcmVjdGx5LCBwcmltYXJpbHkgYmVjYXVzZQordGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBjaGlwc2V0cyBvdXQgdGhlcmUsIGVhY2ggd2l0aAorZGlmZmVyZW50IGludGVyZmFjZXMgYW5kIHF1aXJrcy4gVGhlIGZpcm13YXJlIHByb3ZpZGVzIGEKK3VuaWZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCB3aWxsIHdvcmsgd2l0aCBhbGwgcFNlcmllcworYW5kIGlTZXJpZXMgaGFyZHdhcmUgKGFuZCBiZSBmb3J3YXJkcy1jb21wYXRpYmxlKS4KKworSWYgdGhlIE9TIG9yIGRldmljZSBkcml2ZXIgc3VzcGVjdHMgdGhhdCBhIFBDSSBzbG90IGhhcyBiZWVuCitFRUgtaXNvbGF0ZWQsIHRoZXJlIGlzIGEgZmlybXdhcmUgY2FsbCBpdCBjYW4gbWFrZSB0byBkZXRlcm1pbmUgaWYKK3RoaXMgaXMgdGhlIGNhc2UuIElmIHNvLCB0aGVuIHRoZSBkZXZpY2UgZHJpdmVyIHNob3VsZCBwdXQgaXRzZWxmCitpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSAoZ2l2ZW4gdGhhdCBpdCB3b24ndCBiZSBhYmxlIHRvIGNvbXBsZXRlIGFueQorcGVuZGluZyB3b3JrKSBhbmQgc3RhcnQgcmVjb3Zlcnkgb2YgdGhlIGNhcmQuICBSZWNvdmVyeSBub3JtYWxseQord291bGQgY29uc2lzdCBvZiByZXNldGluZyB0aGUgUENJIGRldmljZSAoaG9sZGluZyB0aGUgUENJICNSU1QKK2xpbmUgaGlnaCBmb3IgdHdvIHNlY29uZHMpLCBmb2xsb3dlZCBieSBzZXR0aW5nIHVwIHRoZSBkZXZpY2UKK2NvbmZpZyBzcGFjZSAodGhlIGJhc2UgYWRkcmVzcyByZWdpc3RlcnMgKEJBUidzKSwgbGF0ZW5jeSB0aW1lciwKK2NhY2hlIGxpbmUgc2l6ZSwgaW50ZXJydXB0IGxpbmUsIGFuZCBzbyBvbikuICBUaGlzIGlzIGZvbGxvd2VkIGJ5IGEKK3JlaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRldmljZSBkcml2ZXIuICBJbiBhIHdvcnN0LWNhc2Ugc2NlbmFyaW8sCit0aGUgcG93ZXIgdG8gdGhlIGNhcmQgY2FuIGJlIHRvZ2dsZWQsIGF0IGxlYXN0IG9uIGhvdC1wbHVnLWNhcGFibGUKK3Nsb3RzLiAgSW4gcHJpbmNpcGxlLCBsYXllcnMgZmFyIGFib3ZlIHRoZSBkZXZpY2UgZHJpdmVyIHByb2JhYmx5CitkbyBub3QgbmVlZCB0byBrbm93IHRoYXQgdGhlIFBDSSBjYXJkIGhhcyBiZWVuICJyZWJvb3RlZCIgaW4gdGhpcword2F5OyBpZGVhbGx5LCB0aGVyZSBzaG91bGQgYmUgYXQgbW9zdCBhIHBhdXNlIGluIEV0aGVybmV0L2Rpc2svVVNCCitJL08gd2hpbGUgdGhlIGNhcmQgaXMgYmVpbmcgcmVzZXQuCisKK0lmIHRoZSBjYXJkIGNhbm5vdCBiZSByZWNvdmVyZWQgYWZ0ZXIgdGhyZWUgb3IgZm91ciByZXNldHMsIHRoZQora2VybmVsL2RldmljZSBkcml2ZXIgc2hvdWxkIGFzc3VtZSB0aGUgd29yc3QtY2FzZSBzY2VuYXJpbywgdGhhdCB0aGUKK2NhcmQgaGFzIGRpZWQgY29tcGxldGVseSwgYW5kIHJlcG9ydCB0aGlzIGVycm9yIHRvIHRoZSBzeXNhZG1pbi4KK0luIGFkZGl0aW9uLCBlcnJvciBtZXNzYWdlcyBhcmUgcmVwb3J0ZWQgdGhyb3VnaCBSVEFTIGFuZCBhbHNvIHRocm91Z2gKK3N5c2xvZ2QgKC92YXIvbG9nL21lc3NhZ2VzKSB0byBhbGVydCB0aGUgc3lzYWRtaW4gb2YgUENJIHJlc2V0cy4KK1RoZSBjb3JyZWN0IHdheSB0byBkZWFsIHdpdGggZmFpbGVkIGFkYXB0ZXJzIGlzIHRvIHVzZSB0aGUgc3RhbmRhcmQKK1BDSSBob3RwbHVnIHRvb2xzIHRvIHJlbW92ZSBhbmQgcmVwbGFjZSB0aGUgZGVhZCBjYXJkLgorCisKK0N1cnJlbnQgUFBDNjQgTGludXggRUVIIEltcGxlbWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXQgdGhpcyB0aW1lLCBhIGdlbmVyaWMgRUVIIHJlY292ZXJ5IG1lY2hhbmlzbSBoYXMgYmVlbiBpbXBsZW1lbnRlZCwKK3NvIHRoYXQgaW5kaXZpZHVhbCBkZXZpY2UgZHJpdmVycyBkbyBub3QgbmVlZCB0byBiZSBtb2RpZmllZCB0byBzdXBwb3J0CitFRUggcmVjb3ZlcnkuICBUaGlzIGdlbmVyaWMgbWVjaGFuaXNtIHBpZ2d5LWJhY2tzIG9uIHRoZSBQQ0kgaG90cGx1ZworaW5mcmFzdHJ1Y3R1cmUsICBhbmQgcGVyY29sYXRlcyBldmVudHMgdXAgdGhyb3VnaCB0aGUgaG90cGx1Zy91ZGV2CitpbmZyYXN0cnVjdHVyZS4gIEZvbGxvd2lpbmcgaXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBob3cgdGhpcyBpcworYWNjb21wbGlzaGVkLgorCitFRUggbXVzdCBiZSBlbmFibGVkIGluIHRoZSBQSEIncyB2ZXJ5IGVhcmx5IGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLAorYW5kIGlmIGEgUENJIHNsb3QgaXMgaG90LXBsdWdnZWQuIFRoZSBmb3JtZXIgaXMgcGVyZm9ybWVkIGJ5CitlZWhfaW5pdCgpIGluIGFyY2gvcHBjNjQva2VybmVsL2VlaC5jLCBhbmQgdGhlIGxhdGVyIGJ5Citkcml2ZXJzL3BjaS9ob3RwbHVnL3BTZXJpZXNfcGNpLmMgY2FsbGluZyBpbiB0byB0aGUgZWVoLmMgY29kZS4KK0VFSCBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIGEgUENJIHNjYW4gb2YgdGhlIGRldmljZSBjYW4gcHJvY2VlZC4KK0N1cnJlbnQgUG93ZXI1IGhhcmR3YXJlIHdpbGwgbm90IHdvcmsgdW5sZXNzIEVFSCBpcyBlbmFibGVkOworYWx0aG91Z2ggb2xkZXIgUG93ZXI0IGNhbiBydW4gd2l0aCBpdCBkaXNhYmxlZC4gIEVmZmVjdGl2ZWx5LAorRUVIIGNhbiBubyBsb25nZXIgYmUgdHVybmVkIG9mZi4gIFBDSSBkZXZpY2VzICptdXN0KiBiZQorcmVnaXN0ZXJlZCB3aXRoIHRoZSBFRUggY29kZTsgdGhlIEVFSCBjb2RlIG5lZWRzIHRvIGtub3cgYWJvdXQKK3RoZSBJL08gYWRkcmVzcyByYW5nZXMgb2YgdGhlIFBDSSBkZXZpY2UgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuCitlcnJvci4gIEdpdmVuIGFuIGFyYml0cmFyeSBhZGRyZXNzLCB0aGUgcm91dGluZQorcGNpX2dldF9kZXZpY2VfYnlfYWRkcigpIHdpbGwgZmluZCB0aGUgcGNpIGRldmljZSBhc3NvY2lhdGVkCit3aXRoIHRoYXQgYWRkcmVzcyAoaWYgYW55KS4KKworVGhlIGRlZmF1bHQgaW5jbHVkZS9hc20tcHBjNjQvaW8uaCBtYWNyb3MgcmVhZGIoKSwgaW5iKCksIGluc2IoKSwKK2V0Yy4gaW5jbHVkZSBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgdGhlIGkvbyByZWFkIHJldHVybmVkIGFsbC0weGZmJ3MuCitJZiBzbywgdGhlc2UgbWFrZSBhIGNhbGwgdG8gZWVoX2RuX2NoZWNrX2ZhaWx1cmUoKSwgd2hpY2ggaW4gdHVybgorYXNrcyB0aGUgZmlybXdhcmUgaWYgdGhlIGFsbC1mZidzIHZhbHVlIGlzIHRoZSBzaWduIG9mIGEgdHJ1ZSBFRUgKK2Vycm9yLiAgSWYgaXQgaXMgbm90LCBwcm9jZXNzaW5nIGNvbnRpbnVlcyBhcyBub3JtYWwuICBUaGUgZ3JhbmQKK3RvdGFsIG51bWJlciBvZiB0aGVzZSBmYWxzZSBhbGFybXMgb3IgImZhbHNlIHBvc2l0aXZlcyIgY2FuIGJlCitzZWVuIGluIC9wcm9jL3BwYzY0L2VlaCAoc3ViamVjdCB0byBjaGFuZ2UpLiAgTm9ybWFsbHksIGFsbW9zdAorYWxsIG9mIHRoZXNlIG9jY3VyIGR1cmluZyBib290LCB3aGVuIHRoZSBQQ0kgYnVzIGlzIHNjYW5uZWQsIHdoZXJlCithIGxhcmdlIG51bWJlciBvZiAweGZmIHJlYWRzIGFyZSBwYXJ0IG9mIHRoZSBidXMgc2NhbiBwcm9jZWR1cmUuCisKK0lmIGEgZnJvemVuIHNsb3QgaXMgZGV0ZWN0ZWQsIGNvZGUgaW4gYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMgd2lsbAorcHJpbnQgYSBzdGFjayB0cmFjZSB0byBzeXNsb2cgKC92YXIvbG9nL21lc3NhZ2VzKS4gIFRoaXMgc3RhY2sgdHJhY2UKK2hhcyBwcm92ZW4gdG8gYmUgdmVyeSB1c2VmdWwgdG8gZGV2aWNlLWRyaXZlciBhdXRob3JzIGZvciBmaW5kaW5nCitvdXQgYXQgd2hhdCBwb2ludCB0aGUgRUVIIGVycm9yIHdhcyBkZXRlY3RlZCwgYXMgdGhlIGVycm9yIGl0c2VsZgordXN1YWxseSBvY2N1cnMgc2xpZ2h0bHkgYmVmb3JlaGFuZC4KKworTmV4dCwgaXQgdXNlcyB0aGUgTGludXgga2VybmVsIG5vdGlmaWVyIGNoYWluL3dvcmsgcXVldWUgbWVjaGFuaXNtIHRvCithbGxvdyBhbnkgaW50ZXJlc3RlZCBwYXJ0aWVzIHRvIGZpbmQgb3V0IGFib3V0IHRoZSBmYWlsdXJlLiAgRGV2aWNlCitkcml2ZXJzLCBvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBjYW4gdXNlCitlZWhfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopIHRvIGZpbmQgb3V0IGFib3V0IEVFSAorZXZlbnRzLiAgVGhlIGV2ZW50IHdpbGwgaW5jbHVkZSBhIHBvaW50ZXIgdG8gdGhlIHBjaSBkZXZpY2UsIHRoZQorZGV2aWNlIG5vZGUgYW5kIHNvbWUgc3RhdGUgaW5mby4gIFJlY2VpdmVycyBvZiB0aGUgZXZlbnQgY2FuICJkbyBhcwordGhleSB3aXNoIjsgdGhlIGRlZmF1bHQgaGFuZGxlciB3aWxsIGJlIGRlc2NyaWJlZCBmdXJ0aGVyIGluIHRoaXMKK3NlY3Rpb24uCisKK1RvIGFzc2lzdCBpbiB0aGUgcmVjb3Zlcnkgb2YgdGhlIGRldmljZSwgZWVoLmMgZXhwb3J0cyB0aGUKK2ZvbGxvd2luZyBmdW5jdGlvbnM6CisKK3J0YXNfc2V0X3Nsb3RfcmVzZXQoKSAtLSBhc3NlcnQgdGhlICBQQ0kgI1JTVCBsaW5lIGZvciAxLzh0aCBvZiBhIHNlY29uZAorcnRhc19jb25maWd1cmVfYnJpZGdlKCkgLS0gYXNrIGZpcm13YXJlIHRvIGNvbmZpZ3VyZSBhbnkgUENJIGJyaWRnZXMKKyAgIGxvY2F0ZWQgdG9wb2xvZ2ljYWxseSB1bmRlciB0aGUgcGNpIHNsb3QuCitlZWhfc2F2ZV9iYXJzKCkgYW5kIGVlaF9yZXN0b3JlX2JhcnMoKTogc2F2ZSBhbmQgcmVzdG9yZSB0aGUgUENJCisgICBjb25maWctc3BhY2UgaW5mbyBmb3IgYSBkZXZpY2UgYW5kIGFueSBkZXZpY2VzIHVuZGVyIGl0LgorCisKK0EgaGFuZGxlciBmb3IgdGhlIEVFSCBub3RpZmllcl9ibG9jayBldmVudHMgaXMgaW1wbGVtZW50ZWQgaW4KK2RyaXZlcnMvcGNpL2hvdHBsdWcvcFNlcmllc19wY2kuYywgY2FsbGVkIGhhbmRsZV9lZWhfZXZlbnRzKCkuCitJdCBzYXZlcyB0aGUgZGV2aWNlIEJBUidzIGFuZCB0aGVuIGNhbGxzIHJwYXBocF91bmNvbmZpZ19wY2lfYWRhcHRlcigpLgorVGhpcyBsYXN0IGNhbGwgY2F1c2VzIHRoZSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgY2FyZCB0byBiZSBzdG9wcGVkLAord2hpY2ggY2F1c2VzIGhvdHBsdWcgZXZlbnRzIHRvIGdvIG91dCB0byB1c2VyIHNwYWNlLiBUaGlzIHRyaWdnZXJzCit1c2VyLXNwYWNlIHNjcmlwdHMgdGhhdCBtaWdodCBpc3N1ZSBjb21tYW5kcyBzdWNoIGFzICJpZmRvd24gZXRoMCIKK2ZvciBldGhlcm5ldCBjYXJkcywgYW5kIHNvIG9uLiAgVGhpcyBoYW5kbGVyIHRoZW4gc2xlZXBzIGZvciA1IHNlY29uZHMsCitob3BpbmcgdG8gZ2l2ZSB0aGUgdXNlci1zcGFjZSBzY3JpcHRzIGVub3VnaCB0aW1lIHRvIGNvbXBsZXRlLgorSXQgdGhlbiByZXNldHMgdGhlIFBDSSBjYXJkLCByZWNvbmZpZ3VyZXMgdGhlIGRldmljZSBCQVIncywgYW5kCithbnkgYnJpZGdlcyB1bmRlcm5lYXRoLiBJdCB0aGVuIGNhbGxzIHJwYXBocF9lbmFibGVfcGNpX3Nsb3QoKSwKK3doaWNoIHJlc3RhcnRzIHRoZSBkZXZpY2UgZHJpdmVyIGFuZCB0cmlnZ2VycyBtb3JlIHVzZXItc3BhY2UKK2V2ZW50cyAoZm9yIGV4YW1wbGUsIGNhbGxpbmcgImlmdXAgZXRoMCIgZm9yIGV0aGVybmV0IGNhcmRzKS4KKworCitEZXZpY2UgU2h1dGRvd24gYW5kIFVzZXItU3BhY2UgRXZlbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHdoYXQgaGFwcGVucyB3aGVuIGEgcGNpIHNsb3QgaXMgdW5jb25maWd1cmVkLAorZm9jdXNpbmcgb24gaG93IHRoZSBkZXZpY2UgZHJpdmVyIGdldHMgc2h1dCBkb3duLCBhbmQgb24gaG93IHRoZQorZXZlbnRzIGdldCBkZWxpdmVyZWQgdG8gdXNlci1zcGFjZSBzY3JpcHRzLgorCitGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBjYXVzZSBhIGRldmljZSBkcml2ZXIKK2Nsb3NlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGZpcnN0IHBoYXNlIG9mIGFuIEVFSCByZXNldC4KK1RoZSBmb2xsb3dpbmcgc2VxdWVuY2UgaXMgYW4gZXhhbXBsZSBvZiB0aGUgcGNuZXQzMiBkZXZpY2UgZHJpdmVyLgorCisgICAgcnBhX3BocF91bmNvbmZpZ19wY2lfYWRhcHRlciAoc3RydWN0IHNsb3QgKikgIC8vIGluIHJwYXBocF9wY2kuYworICAgIHsKKyAgICAgIGNhbGxzCisgICAgICBwY2lfcmVtb3ZlX2J1c19kZXZpY2UgKHN0cnVjdCBwY2lfZGV2ICopIC8vIGluIC9kcml2ZXJzL3BjaS9yZW1vdmUuYworICAgICAgeworICAgICAgICBjYWxscworICAgICAgICBwY2lfZGVzdHJveV9kZXYgKHN0cnVjdCBwY2lfZGV2ICopCisgICAgICAgIHsKKyAgICAgICAgICBjYWxscworICAgICAgICAgIGRldmljZV91bnJlZ2lzdGVyICgmZGV2LT5kZXYpIC8vIGluIC9kcml2ZXJzL2Jhc2UvY29yZS5jCisgICAgICAgICAgeworICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgIGRldmljZV9kZWwgKHN0cnVjdCBkZXZpY2UgKikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgICAgYnVzX3JlbW92ZV9kZXZpY2UoKSAvLyBpbiAvZHJpdmVycy9iYXNlL2J1cy5jCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYWxscworICAgICAgICAgICAgICAgIGRldmljZV9yZWxlYXNlX2RyaXZlcigpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyLT5yZW1vdmUoKSB3aGljaCBpcyBqdXN0CisgICAgICAgICAgICAgICAgICBwY2lfZGV2aWNlX3JlbW92ZSgpICAvLyBpbiAvZHJpdmVycy9wY2kvcGNpX2RyaXZlci5jCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxzCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZHJpdmVyLT5yZW1vdmUoKSB3aGljaCBpcyBqdXN0CisgICAgICAgICAgICAgICAgICAgIHBjbmV0MzJfcmVtb3ZlX29uZSgpIC8vIGluIC9kcml2ZXJzL25ldC9wY25ldDMyLmMKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhbGxzCisgICAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl9uZXRkZXYoKSAvLyBpbiAvbmV0L2NvcmUvZGV2LmMKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxscworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Nsb3NlKCkgIC8vIGluIC9uZXQvY29yZS9kZXYuYworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbHMgZGV2LT5zdG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBqdXN0IHBjbmV0MzJfY2xvc2UoKSAvLyBpbiBwY25ldDMyLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZG9lcyB3aGF0IHlvdSB3YW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RvcCB0aGUgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgd2hpY2gKKyAgICAgICAgICAgICAgICAgICBmcmVlcyBwY25ldDMyIGRldmljZSBkcml2ZXIgbWVtb3J5CisgICAgICAgICAgICAgICAgfQorICAgICB9fX19fX0KKworCisgICAgaW4gZHJpdmVycy9wY2kvcGNpX2RyaXZlci5jLAorICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyLT5yZW1vdmUoKSBpcyBqdXN0IHBjaV9kZXZpY2VfcmVtb3ZlKCkKKyAgICB3aGljaCBjYWxscyBzdHJ1Y3QgcGNpX2RyaXZlci0+cmVtb3ZlKCkgd2hpY2ggaXMgcGNuZXQzMl9yZW1vdmVfb25lKCkKKyAgICB3aGljaCBjYWxscyB1bnJlZ2lzdGVyX25ldGRldigpICAoaW4gbmV0L2NvcmUvZGV2LmMpCisgICAgd2hpY2ggY2FsbHMgZGV2X2Nsb3NlKCkgIChpbiBuZXQvY29yZS9kZXYuYykKKyAgICB3aGljaCBjYWxscyBkZXYtPnN0b3AoKSB3aGljaCBpcyBwY25ldDMyX2Nsb3NlKCkKKyAgICB3aGljaCB0aGVuIGRvZXMgdGhlIGFwcHJvcHJpYXRlIHNodXRkb3duLgorCistLS0KK0ZvbGxvd2luZyBpcyB0aGUgYW5hbG9nb3VzIHN0YWNrIHRyYWNlIGZvciBldmVudHMgc2VudCB0byB1c2VyLXNwYWNlCit3aGVuIHRoZSBwY2kgZGV2aWNlIGlzIHVuY29uZmlndXJlZC4KKworcnBhX3BocF91bmNvbmZpZ19wY2lfYWRhcHRlcigpIHsgICAgICAgICAgICAgLy8gaW4gcnBhcGhwX3BjaS5jCisgIGNhbGxzCisgIHBjaV9yZW1vdmVfYnVzX2RldmljZSAoc3RydWN0IHBjaV9kZXYgKikgeyAvLyBpbiAvZHJpdmVycy9wY2kvcmVtb3ZlLmMKKyAgICBjYWxscworICAgIHBjaV9kZXN0cm95X2RldiAoc3RydWN0IHBjaV9kZXYgKikgeworICAgICAgY2FsbHMKKyAgICAgIGRldmljZV91bnJlZ2lzdGVyICgmZGV2LT5kZXYpIHsgICAgICAvLyBpbiAvZHJpdmVycy9iYXNlL2NvcmUuYworICAgICAgICBjYWxscworICAgICAgICBkZXZpY2VfZGVsKHN0cnVjdCBkZXZpY2UgKiBkZXYpIHsgIC8vIGluIC9kcml2ZXJzL2Jhc2UvY29yZS5jCisgICAgICAgICAgY2FsbHMKKyAgICAgICAgICBrb2JqZWN0X2RlbCgpIHsgICAgICAgICAgICAgICAgICAvL2luIC9saWJzL2tvYmplY3QuYworICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgIGtvYmplY3RfaG90cGx1ZygpIHsgICAgICAgICAgICAvLyBpbiAvbGlicy9rb2JqZWN0LmMKKyAgICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgICAga3NldF9ob3RwbHVnKCkgeyAgICAgICAgICAgICAvLyBpbiAvbGliL2tvYmplY3QuYworICAgICAgICAgICAgICAgIGNhbGxzCisgICAgICAgICAgICAgICAga3NldC0+aG90cGx1Z19vcHMtPmhvdHBsdWcoKSB3aGljaCBpcyByZWFsbHkganVzdAorICAgICAgICAgICAgICAgIGEgY2FsbCB0bworICAgICAgICAgICAgICAgIGRldl9ob3RwbHVnKCkgeyAgICAgICAgICAgLy8gaW4gL2RyaXZlcnMvYmFzZS9jb3JlLmMKKyAgICAgICAgICAgICAgICAgIGNhbGxzCisgICAgICAgICAgICAgICAgICBkZXYtPmJ1cy0+aG90cGx1ZygpIHdoaWNoIGlzIHJlYWxseSBqdXN0IGEgY2FsbCB0bworICAgICAgICAgICAgICAgICAgcGNpX2hvdHBsdWcgKCkgeyAgICAgIC8vIGluIGRyaXZlcnMvcGNpL2hvdHBsdWcuYworICAgICAgICAgICAgICAgICAgICB3aGljaCBwcmludHMgZGV2aWNlIG5hbWUsIGV0Yy4uLi4KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgdGhlbiBrc2V0X2hvdHBsdWcoKSBjYWxscworICAgICAgICAgICAgICAgIGNhbGxfdXNlcm1vZGVoZWxwZXIgKCkgd2l0aAorICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF09aG90cGx1Z19wYXRoW10gd2hpY2ggaXMgIi9zYmluL2hvdHBsdWciCisgICAgICAgICAgICAgLS0+IGV2ZW50IHRvIHVzZXJzcGFjZSwKKyAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAga29iamVjdF9kZWwoKSB0aGVuIGNhbGxzIHN5c2ZzX3JlbW92ZV9kaXIoKSwgd2hpY2ggd291bGQKKyAgICAgICAgIHRyaWdnZXIgYW55IHVzZXItc3BhY2UgZGFlbW9uIHRoYXQgd2FzIHdhdGNoaW5nIC9zeXNmcywKKyAgICAgICAgIGFuZCBub3RpY2UgdGhlIGRlbGV0ZSBldmVudC4KKworCitQcm8ncyBhbmQgQ29uJ3Mgb2YgdGhlIEN1cnJlbnQgRGVzaWduCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBhcmUgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB0aGUgY3VycmVudCBFRUggc29mdHdhcmUgcmVjb3ZlcnkgZGVzaWduLAord2hpY2ggbWF5IGJlIGFkZHJlc3NlZCBpbiBmdXR1cmUgcmV2aXNpb25zLiAgQnV0IGZpcnN0LCBub3RlIHRoYXQgdGhlCitiaWcgcGx1cyBvZiB0aGUgY3VycmVudCBkZXNpZ24gaXMgdGhhdCBubyBjaGFuZ2VzIG5lZWQgdG8gYmUgbWFkZSB0bworaW5kaXZpZHVhbCBkZXZpY2UgZHJpdmVycywgc28gdGhhdCB0aGUgY3VycmVudCBkZXNpZ24gdGhyb3dzIGEgd2lkZSBuZXQuCitUaGUgYmlnZ2VzdCBuZWdhdGl2ZSBvZiB0aGUgZGVzaWduIGlzIHRoYXQgaXQgcG90ZW50aWFsbHkgZGlzdHVyYnMKK25ldHdvcmsgZGFlbW9ucyBhbmQgZmlsZSBzeXN0ZW1zIHRoYXQgZGlkbid0IG5lZWQgdG8gYmUgZGlzdHVyYmVkLgorCistLSBBIG1pbm9yIGNvbXBsYWludCBpcyB0aGF0IHJlc2V0dGluZyB0aGUgbmV0d29yayBjYXJkIGNhdXNlcworICAgdXNlci1zcGFjZSBiYWNrLXRvLWJhY2sgaWZkb3duL2lmdXAgYnVycHMgdGhhdCBwb3RlbnRpYWxseSBkaXN0dXJiCisgICBuZXR3b3JrIGRhZW1vbnMsIHRoYXQgZGlkbid0IG5lZWQgdG8gZXZlbiBrbm93IHRoYXQgdGhlIHBjaQorICAgY2FyZCB3YXMgYmVpbmcgcmVib290ZWQuCisKKy0tIEEgbW9yZSBzZXJpb3VzIGNvbmNlcm4gaXMgdGhhdCB0aGUgc2FtZSByZXNldCwgZm9yIFNDU0kgZGV2aWNlcywKKyAgIGNhdXNlcyBoYXZvYyB0byBtb3VudGVkIGZpbGUgc3lzdGVtcy4gIFNjcmlwdHMgY2Fubm90IHBvc3QtZmFjdG8KKyAgIHVubW91bnQgYSBmaWxlIHN5c3RlbSB3aXRob3V0IGZsdXNoaW5nIHBlbmRpbmcgYnVmZmVycywgYnV0IHRoaXMKKyAgIGlzIGltcG9zc2libGUsIGJlY2F1c2UgSS9PIGhhcyBhbHJlYWR5IGJlZW4gc3RvcHBlZC4gIFRodXMsCisgICBpZGVhbGx5LCB0aGUgcmVzZXQgc2hvdWxkIGhhcHBlbiBhdCBvciBiZWxvdyB0aGUgYmxvY2sgbGF5ZXIsCisgICBzbyB0aGF0IHRoZSBmaWxlIHN5c3RlbXMgYXJlIG5vdCBkaXN0dXJiZWQuCisKKyAgIFJlaXNlcmZzIGRvZXMgbm90IHRvbGVyYXRlIGVycm9ycyByZXR1cm5lZCBmcm9tIHRoZSBibG9jayBkZXZpY2UuCisgICBFeHQzZnMgc2VlbXMgdG8gYmUgdG9sZXJhbnQsIHJldHJ5aW5nIHJlYWRzL3dyaXRlcyB1bnRpbCBpdCBkb2VzCisgICBzdWNjZWVkLiBCb3RoIGhhdmUgYmVlbiBvbmx5IGxpZ2h0bHkgdGVzdGVkIGluIHRoaXMgc2NlbmFyaW8uCisKKyAgIFRoZSBTQ1NJLWdlbmVyaWMgc3Vic3lzdGVtIGFscmVhZHkgaGFzIGJ1aWx0LWluIGNvZGUgZm9yIHBlcmZvcm1pbmcKKyAgIFNDU0kgZGV2aWNlIHJlc2V0cywgU0NTSSBidXMgcmVzZXRzLCBhbmQgU0NTSSBob3N0LWJ1cy1hZGFwdGVyCisgICAoSEJBKSByZXNldHMuICBUaGVzZSBhcmUgY2FzY2FkZWQgaW50byBhIGNoYWluIG9mIGF0dGVtcHRlZAorICAgcmVzZXRzIGlmIGEgU0NTSSBjb21tYW5kIGZhaWxzLiBUaGVzZSBhcmUgY29tcGxldGVseSBoaWRkZW4KKyAgIGZyb20gdGhlIGJsb2NrIGxheWVyLiAgSXQgd291bGQgYmUgdmVyeSBuYXR1cmFsIHRvIGFkZCBhbiBFRUgKKyAgIHJlc2V0IGludG8gdGhpcyBjaGFpbiBvZiBldmVudHMuCisKKy0tIElmIGEgU0NTSSBlcnJvciBvY2N1cnMgZm9yIHRoZSByb290IGRldmljZSwgYWxsIGlzIGxvc3QgdW5sZXNzCisgICB0aGUgc3lzYWRtaW4gaGFkIHRoZSBmb3Jlc2lnaHQgdG8gcnVuIC9iaW4sIC9zYmluLCAvZXRjLCAvdmFyCisgICBhbmQgc28gb24sIG91dCBvZiByYW1kaXNrL3RtcGZzLgorCisKK0NvbmNsdXNpb25zCistLS0tLS0tLS0tLQorVGhlcmUncyBmb3J3YXJkIHByb2dyZXNzIC4uLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9odmNzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9odmNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE2MmUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2h2Y3MudHh0CkBAIC0wLDAgKzEsNTY3IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkgICBIVkNTCisJSUJNICJIeXBlcnZpc29yIFZpcnR1YWwgQ29uc29sZSBTZXJ2ZXIiIEluc3RhbGxhdGlvbiBHdWlkZQorCQkJICBmb3IgTGludXggS2VybmVsIDIuNi40KworCQkgICAgQ29weXJpZ2h0IChDKSAyMDA0IElCTSBDb3Jwb3JhdGlvbgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05PVEU6RWlnaHQgc3BhY2UgdGFicyBhcmUgdGhlIG9wdGltdW0gZWRpdG9yIHNldHRpbmcgZm9yIHJlYWRpbmcgdGhpcyBmaWxlLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICAgICAgQXV0aG9yKHMpIDogIFJ5YW4gUy4gQXJub2xkIDxyc2FAdXMuaWJtLmNvbT4KKwkJICAgICAgIERhdGUgQ3JlYXRlZDogTWFyY2gsIDAyLCAyMDA0CisJCSAgICAgICBMYXN0IENoYW5nZWQ6IEF1Z3VzdCwgMjQsIDIwMDQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUYWJsZSBvZiBjb250ZW50czoKKworCTEuICBEcml2ZXIgSW50cm9kdWN0aW9uOgorCTIuICBTeXN0ZW0gUmVxdWlyZW1lbnRzCisJMy4gIEJ1aWxkIE9wdGlvbnM6CisJCTMuMSAgQnVpbHQtaW46CisJCTMuMiAgTW9kdWxlOgorCTQuICBJbnN0YWxsYXRpb246CisJNS4gIENvbm5lY3Rpb246CisJNi4gIERpc2Nvbm5lY3Rpb246CisJNy4gIENvbmZpZ3VyYXRpb246CisJOC4gIFF1ZXN0aW9ucyAmIEFuc3dlcnM6CisJOS4gIFJlcG9ydGluZyBCdWdzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEuIERyaXZlciBJbnRyb2R1Y3Rpb246CisKK1RoaXMgaXMgdGhlIGRldmljZSBkcml2ZXIgZm9yIHRoZSBJQk0gSHlwZXJ2aXNvciBWaXJ0dWFsIENvbnNvbGUgU2VydmVyLAorImh2Y3MiLiAgVGhlIElCTSBodmNzIHByb3ZpZGVzIGEgdHR5IGRyaXZlciBpbnRlcmZhY2UgdG8gYWxsb3cgTGludXggdXNlcgorc3BhY2UgYXBwbGljYXRpb25zIGFjY2VzcyB0byB0aGUgc3lzdGVtIGNvbnNvbGVzIG9mIGxvZ2ljYWxseSBwYXJ0aXRpb25lZAorb3BlcmF0aW5nIHN5c3RlbXMgKExpbnV4IGFuZCBBSVgpIHJ1bm5pbmcgb24gdGhlIHNhbWUgcGFydGl0aW9uZWQgUG93ZXI1CitwcGM2NCBzeXN0ZW0uICBQaHlzaWNhbCBoYXJkd2FyZSBjb25zb2xlcyBwZXIgcGFydGl0aW9uIGFyZSBub3QgcHJhY3RpY2FsCitvbiB0aGlzIGhhcmR3YXJlIHNvIHN5c3RlbSBjb25zb2xlcyBhcmUgYWNjZXNzZWQgYnkgdGhpcyBkcml2ZXIgdXNpbmcKK2Zpcm13YXJlIGludGVyZmFjZXMgdG8gdmlydHVhbCB0ZXJtaW5hbCBkZXZpY2VzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIuIFN5c3RlbSBSZXF1aXJlbWVudHM6CisKK1RoaXMgZGV2aWNlIGRyaXZlciB3YXMgd3JpdHRlbiB1c2luZyAyLjYuNCBMaW51eCBrZXJuZWwgQVBJcyBhbmQgd2lsbCBvbmx5CitidWlsZCBhbmQgcnVuIG9uIGtlcm5lbHMgb2YgdGhpcyB2ZXJzaW9uIG9yIGxhdGVyLgorCitUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byBvcGVyYXRlIHNvbGVseSBvbiBJQk0gUG93ZXI1IHBwYzY0IGhhcmR3YXJlCit0aG91Z2ggc29tZSBjYXJlIHdhcyB0YWtlbiB0byBhYnN0cmFjdCB0aGUgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmaXJtd2FyZQorY2FsbHMgZnJvbSB0aGUgZHJpdmVyIGNvZGUuCisKK1N5c2ZzIG11c3QgYmUgbW91bnRlZCBvbiB0aGUgc3lzdGVtIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGRldGVybWluZSB3aGljaAorbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHZ0eS1zZXJ2ZXIuICBEaXJlY3Rpb25zCitmb3Igc3lzZnMgbW91bnRpbmcgYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMy4gQnVpbGQgT3B0aW9uczoKKworVGhlIGh2Y3MgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgYXMgYSB0dHkgZHJpdmVyLiAgVGhlIHR0eSBsYXllcgorZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgYmxvY2sgb2YgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgaW4gYSBxdWFudGl0eQorcmVxdWVzdGVkIGJ5IHRoZSByZWdpc3RlcmluZyBkcml2ZXIuICBUaGUgaHZjcyBkcml2ZXIgYXNrcyB0aGUgdHR5IGxheWVyCitmb3IgNjQgb2YgdGhlc2UgbWFqb3IvbWlub3IgbnVtYmVycyBieSBkZWZhdWx0IHRvIHVzZSBmb3IgaHZjcyBkZXZpY2Ugbm9kZQorZW50cmllcy4KKworSWYgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGRldmljZSBlbnRyaWVzIGlzIGFkZXF1YXRlIHRoZW4gdGhpcyBkcml2ZXIgY2FuIGJlCitidWlsdCBpbnRvIHRoZSBrZXJuZWwuICBJZiBub3QsIHRoZSBkZWZhdWx0IGNhbiBiZSBvdmVyLXJpZGRlbiBieSBpbnNlcnRpbmcKK3RoZSBkcml2ZXIgYXMgYSBtb2R1bGUgd2l0aCBpbnNtb2QgcGFyYW1ldGVycy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszLjEgQnVpbHQtaW46CisKK1RoZSBmb2xsb3dpbmcgbWVudWNvbmZpZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBzZWxlY3RpbmcgdG8gYnVpbGQgdGhpcworZHJpdmVyIGludG8gdGhlIGtlcm5lbC4KKworCURldmljZSBEcml2ZXJzICAtLS0+CisJCUNoYXJhY3RlciBkZXZpY2VzICAtLS0+CisJCQk8Kj4gSUJNIEh5cGVydmlzb3IgVmlydHVhbCBDb25zb2xlIFNlcnZlciBTdXBwb3J0CisKK0JlZ2luIHRoZSBrZXJuZWwgbWFrZSBwcm9jZXNzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzMuMiBNb2R1bGU6CisKK1RoZSBmb2xsb3dpbmcgbWVudWNvbmZpZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBzZWxlY3RpbmcgdG8gYnVpbGQgdGhpcworZHJpdmVyIGFzIGEga2VybmVsIG1vZHVsZS4KKworCURldmljZSBEcml2ZXJzICAtLS0+CisJCUNoYXJhY3RlciBkZXZpY2VzICAtLS0+CisJCQk8TT4gSUJNIEh5cGVydmlzb3IgVmlydHVhbCBDb25zb2xlIFNlcnZlciBTdXBwb3J0CisKK1RoZSBtYWtlIHByb2Nlc3Mgd2lsbCBidWlsZCB0aGUgZm9sbG93aW5nIGtlcm5lbCBtb2R1bGVzOgorCisJaHZjcy5rbworCWh2Y3NlcnZlci5rbworCitUbyBpbnNlcnQgdGhlIG1vZHVsZSB3aXRoIHRoZSBkZWZhdWx0IGFsbG9jYXRpb24gZXhlY3V0ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kcyBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXI6CisKKwlpbnNtb2QgaHZjc2VydmVyLmtvCisJaW5zbW9kIGh2Y3Mua28KKworVGhlIGh2Y3NlcnZlciBtb2R1bGUgY29udGFpbnMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZpcm13YXJlIGNhbGxzIGFuZCBtdXN0CitiZSBpbnNlcnRlZCBmaXJzdCwgb3RoZXJ3aXNlIHRoZSBodmNzIG1vZHVsZSB3aWxsIG5vdCBmaW5kIHNvbWUgb2YgdGhlCitzeW1ib2xzIGl0IGV4cGVjdHMuCisKK1RvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHVzZSBhbiBpbnNtb2QgcGFyYW1ldGVyIGFzIGZvbGxvd3MgKHJlcXVlc3RpbmcgNAordHR5IGRldmljZXMgYXMgYW4gZXhhbXBsZSk6CisKKwlpbnNtb2QgaHZjcy5rbyBodmNzX3Bhcm1fbnVtX2RldnM9NAorCitUaGVyZSBpcyBhIG1heGltdW0gbnVtYmVyIG9mIGRldiBlbnRyaWVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBvbiBpbnNtb2QuCitXZSB0aGluayB0aGF0IDEwMjQgaXMgY3VycmVudGx5IGEgZGVjZW50IG1heGltdW0gbnVtYmVyIG9mIHNlcnZlciBhZGFwdGVycwordG8gYWxsb3cuICBUaGlzIGNhbiBhbHdheXMgYmUgY2hhbmdlZCBieSBtb2RpZnlpbmcgdGhlIGNvbnN0YW50IGluIHRoZQorc291cmNlIGZpbGUgYmVmb3JlIGJ1aWxkaW5nLgorCitOT1RFOiBUaGUgbGVuZ3RoIG9mIHRpbWUgaXQgdGFrZXMgdG8gaW5zbW9kIHRoZSBkcml2ZXIgc2VlbXMgdG8gYmUgcmVsYXRlZAordG8gdGhlIG51bWJlciBvZiB0dHkgaW50ZXJmYWNlcyB0aGUgcmVnaXN0ZXJpbmcgZHJpdmVyIHJlcXVlc3RzLgorCitJbiBvcmRlciB0byByZW1vdmUgdGhlIGRyaXZlciBtb2R1bGUgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKwlybW1vZCBodmNzLmtvCisKK1RoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIGluc3RhbGxpbmcgaHZjcyBhcyBhIG1vZHVsZSBpcyB0byB1c2UgZGVwbW9kIHRvCitidWlsZCBhIGN1cnJlbnQgbW9kdWxlcy5kZXAgZmlsZSBpbiAvbGliL21vZHVsZXMvYHVuYW1lIC1yYCBhbmQgdGhlbgorZXhlY3V0ZToKKworbW9kcHJvYmUgaHZjcyBodmNzX3Bhcm1fbnVtX2RldnM9NAorCitUaGUgbW9kdWxlcy5kZXAgZmlsZSBpbmRpY2F0ZXMgdGhhdCBodmNzZXJ2ZXIua28gbmVlZHMgdG8gYmUgaW5zZXJ0ZWQKK2JlZm9yZSBodmNzLmtvIGFuZCBtb2Rwcm9iZSB1c2VzIHRoaXMgZmlsZSB0byBzbWFydGx5IGluc2VydCB0aGUgbW9kdWxlcyBpbgordGhlIHByb3BlciBvcmRlci4KKworVGhlIGZvbGxvd2luZyBtb2Rwcm9iZSBjb21tYW5kIGlzIHVzZWQgdG8gcmVtb3ZlIGh2Y3MgYW5kIGh2Y3NlcnZlciBpbiB0aGUKK3Byb3BlciBvcmRlcjoKKworbW9kcHJvYmUgLXIgaHZjcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzQuIEluc3RhbGxhdGlvbjoKKworVGhlIHR0eSBsYXllciBjcmVhdGVzIHN5c2ZzIGVudHJpZXMgd2hpY2ggY29udGFpbiB0aGUgbWFqb3IgYW5kIG1pbm9yCitudW1iZXJzIGFsbG9jYXRlZCBmb3IgdGhlIGh2Y3MgZHJpdmVyLiAgVGhlIGZvbGxvd2luZyBzbmlwcGV0IG9mICJ0cmVlIgorb3V0cHV0IG9mIHRoZSBzeXNmcyBkaXJlY3Rvcnkgc2hvd3Mgd2hlcmUgdGhlc2UgbnVtYmVycyBhcmUgcHJlc2VudGVkOgorCisJc3lzLworCXwtLSAqb3RoZXIgc3lzZnMgYmFzZSBkaXJzKgorCXwKKwl8LS0gY2xhc3MKKwl8ICAgfC0tICpvdGhlciBjbGFzc2VzIG9mIGRldmljZXMqCisJfCAgIHwKKwl8ICAgYC0tIHR0eQorCXwgICAgICAgfC0tICpvdGhlciB0dHkgZGV2aWNlcyoKKwl8ICAgICAgIHwKKwl8ICAgICAgIHwtLSBodmNzMAorCXwgICAgICAgfCAgIGAtLSBkZXYKKwl8ICAgICAgIHwtLSBodmNzMQorCXwgICAgICAgfCAgIGAtLSBkZXYKKwl8ICAgICAgIHwtLSBodmNzMgorCXwgICAgICAgfCAgIGAtLSBkZXYKKwl8ICAgICAgIHwtLSBodmNzMworCXwgICAgICAgfCAgIGAtLSBkZXYKKwl8ICAgICAgIHwKKwl8ICAgICAgIHwtLSAqb3RoZXIgdHR5IGRldmljZXMqCisJfAorCXwtLSAqb3RoZXIgc3lzZnMgYmFzZSBkaXJzKgorCitGb3IgdGhlIGFib3ZlIGV4YW1wbGVzIHRoZSBmb2xsb3dpbmcgb3V0cHV0IGlzIGEgcmVzdWx0IG9mIGNhdCdpbmcgdGhlCisiZGV2IiBlbnRyeSBpbiB0aGUgaHZjcyBkaXJlY3Rvcnk6CisKKwlQb3c1Oi9zeXMvY2xhc3MvdHR5L2h2Y3MwLyAjIGNhdCBkZXYKKwkyNTQ6MAorCisJUG93NTovc3lzL2NsYXNzL3R0eS9odmNzMS8gIyBjYXQgZGV2CisJMjU0OjEKKworCVBvdzU6L3N5cy9jbGFzcy90dHkvaHZjczIvICMgY2F0IGRldgorCTI1NDoyCisKKwlQb3c1Oi9zeXMvY2xhc3MvdHR5L2h2Y3MzLyAjIGNhdCBkZXYKKwkyNTQ6MworCitUaGUgb3V0cHV0IGZyb20gcmVhZGluZyB0aGUgImRldiIgYXR0cmlidXRlIGlzIHRoZSBjaGFyIGRldmljZSBtYWpvciBhbmQKK21pbm9yIG51bWJlcnMgdGhhdCB0aGUgdHR5IGxheWVyIGhhcyBhbGxvY2F0ZWQgZm9yIHRoaXMgZHJpdmVyJ3MgdXNlLiAgTW9zdAorc3lzdGVtcyBydW5uaW5nIGh2Y3Mgd2lsbCBhbHJlYWR5IGhhdmUgdGhlIGRldmljZSBlbnRyaWVzIGNyZWF0ZWQgb3IgdWRldgord2lsbCBkbyBpdCBhdXRvbWF0aWNhbGx5LgorCitHaXZlbiB0aGUgZXhhbXBsZSBvdXRwdXQgYWJvdmUsIHRvIG1hbnVhbGx5IGNyZWF0ZSBhIC9kZXYvaHZjcyogbm9kZSBlbnRyeQorbWtub2QgY2FuIGJlIHVzZWQgYXMgZm9sbG93czoKKworCW1rbm9kIC9kZXYvaHZjczAgYyAyNTQgMAorCW1rbm9kIC9kZXYvaHZjczEgYyAyNTQgMQorCW1rbm9kIC9kZXYvaHZjczIgYyAyNTQgMgorCW1rbm9kIC9kZXYvaHZjczMgYyAyNTQgMworCitVc2luZyBta25vZCB0byBtYW51YWxseSBjcmVhdGUgdGhlIGRldmljZSBlbnRyaWVzIG1ha2VzIHRoZXNlIGRldmljZSBub2RlcworcGVyc2lzdGVudC4gIE9uY2UgY3JlYXRlZCB0aGV5IHdpbGwgZXhpc3QgcHJpb3IgdG8gdGhlIGRyaXZlciBpbnNtb2QuCisKK0F0dGVtcHRpbmcgdG8gY29ubmVjdCBhbiBhcHBsaWNhdGlvbiB0byAvZGV2L2h2Y3MqIHByaW9yIHRvIGluc2VydGlvbiBvZgordGhlIGh2Y3MgbW9kdWxlIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIG1lc3NhZ2Ugc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgorCisJIi9kZXYvaHZjcyo6IE5vIHN1Y2ggZGV2aWNlIi4KKworTk9URTogSnVzdCBiZWNhdXNlIHRoZXJlIGlzIGEgZGV2aWNlIG5vZGUgcHJlc2VudCBkb2Vzbid0IG1lYW4gdGhhdCB0aGVyZQoraXMgYSB2dHktc2VydmVyIGRldmljZSBjb25maWd1cmVkIGZvciB0aGF0IG5vZGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNS4gQ29ubmVjdGlvbgorCitTaW5jZSB0aGlzIGRyaXZlciBjb250cm9scyBkZXZpY2VzIHRoYXQgcHJvdmlkZSBhIHR0eSBpbnRlcmZhY2UgYSB1c2VyIGNhbgoraW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIG5vZGUgZW50cmllcyB1c2luZyBhbnkgc3RhbmRhcmQgdHR5LWludGVyYWN0aXZlCittZXRob2QgKGUuZy4gImNhdCIsICJkZCIsICJlY2hvIikuICBUaGUgaW50ZW50IG9mIHRoaXMgZHJpdmVyIGhvd2V2ZXIsIGlzCit0byBwcm92aWRlIHJlYWwgdGltZSBjb25zb2xlIGludGVyYWN0aW9uIHdpdGggYSBMaW51eCBwYXJ0aXRpb24ncyBjb25zb2xlLAord2hpY2ggcmVxdWlyZXMgdGhlIHVzZSBvZiBhcHBsaWNhdGlvbnMgdGhhdCBwcm92aWRlIGJpLWRpcmVjdGlvbmFsLAoraW50ZXJhY3RpdmUgSS9PIHdpdGggYSB0dHkgZGV2aWNlLgorCitBcHBsaWNhdGlvbnMgKGUuZy4gIm1pbmljb20iIGFuZCAic2NyZWVuIikgdGhhdCBhY3QgYXMgdGVybWluYWwgZW11bGF0b3JzCitvciBwZXJmb3JtIHRlcm1pbmFsIHR5cGUgY29udHJvbCBzZXF1ZW5jZSBjb252ZXJzaW9uIG9uIHRoZSBkYXRhIGJlaW5nCitwYXNzZWQgdGhyb3VnaCB0aGVtIGFyZSBOT1QgYWNjZXB0YWJsZSBmb3IgcHJvdmlkaW5nIGludGVyYWN0aXZlIGNvbnNvbGUKK0kvTy4gIFRoZXNlIHByb2dyYW1zIG9mdGVuIGVtdWxhdGUgYW50aXF1YXRlZCB0ZXJtaW5hbCB0eXBlcyAodnQxMDAgYW5kCitBTlNJKSBhbmQgZXhwZWN0IGluYm91bmQgZGF0YSB0byB0YWtlIHRoZSBmb3JtIG9mIG9uZSBvZiB0aGVzZSBzdXBwb3J0ZWQKK3Rlcm1pbmFsIHR5cGVzIGJ1dCB0aGV5IGVpdGhlciBkbyBub3QgY29udmVydCwgb3IgZG8gbm90IF9hZGVxdWF0ZWx5XworY29udmVydCwgb3V0Ym91bmQgZGF0YSBpbnRvIHRoZSB0ZXJtaW5hbCB0eXBlIG9mIHRoZSB0ZXJtaW5hbCB3aGljaCBpbnZva2VkCit0aGVtICh0aG91Z2ggc2NyZWVuIG1ha2VzIGFuIGF0dGVtcHQgYW5kIGNhbiBhcHBhcmVudGx5IGJlIGNvbmZpZ3VyZWQgd2l0aAorbXVjaCB0ZXJtY2FwIHdyZXN0bGluZy4pCisKK0ZvciB0aGlzIHJlYXNvbiBrZXJtaXQgYW5kIGN1IGFyZSB0d28gb2YgdGhlIHJlY29tbWVuZGVkIGFwcGxpY2F0aW9ucyBmb3IKK2ludGVyYWN0aW5nIHdpdGggYSBMaW51eCBjb25zb2xlIHZpYSBhbiBodmNzIGRldmljZS4gIFRoZXNlIHByb2dyYW1zIHNpbXBseQorYWN0IGFzIGEgY29uZHVpdCBmb3IgZGF0YSB0cmFuc2ZlciB0byBhbmQgZnJvbSB0aGUgdHR5IGRldmljZS4gIFRoZXkgZG8gbm90CityZXF1aXJlIGluYm91bmQgZGF0YSB0byB0YWtlIHRoZSBmb3JtIG9mIGEgcGFydGljdWxhciB0ZXJtaW5hbCB0eXBlLCBub3IgZG8KK3RoZXkgY29vayBvdXRib3VuZCBkYXRhIHRvIGEgcGFydGljdWxhciB0ZXJtaW5hbCB0eXBlLgorCitJbiBvcmRlciB0byBlbnN1cmUgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIGNvbnNvbGUgYXBwbGljYXRpb25zIG9uZSBtdXN0IG1ha2UKK3N1cmUgdGhhdCBvbmNlIGNvbm5lY3RlZCB0byBhIC9kZXYvaHZjcyBjb25zb2xlIHRoYXQgdGhlIGNvbnNvbGUncyAkVEVSTQorZW52IHZhcmlhYmxlIGlzIHNldCB0byB0aGUgZXhhY3QgdGVybWluYWwgdHlwZSBvZiB0aGUgdGVybWluYWwgZW11bGF0b3IKK3VzZWQgdG8gbGF1bmNoIHRoZSBpbnRlcmFjdGl2ZSBJL08gYXBwbGljYXRpb24uICBJZiBvbmUgaXMgdXNpbmcgeHRlcm0gYW5kCitrZXJtaXQgdG8gY29ubmVjdCB0byAvZGV2L2h2Y3MwIHdoZW4gdGhlIGNvbnNvbGUgcHJvbXB0IGJlY29tZXMgYXZhaWxhYmxlCitvbmUgc2hvdWxkICJleHBvcnQgVEVSTT14dGVybSIgb24gdGhlIGNvbnNvbGUuICBUaGlzIHRlbGxzIG5jdXJzZXMKK2FwcGxpY2F0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGZyb20gdGhlIGNvbnNvbGUgdGhhdCB0aGV5IHNob3VsZCBvdXRwdXQKK2NvbnRyb2wgc2VxdWVuY2VzIHRoYXQgeHRlcm0gY2FuIHVuZGVyc3RhbmQuCisKK0FzIGEgcHJlY2F1dGlvbmFyeSBtZWFzdXJlIGFuIGh2Y3MgdXNlciBzaG91bGQgYWx3YXlzICJleGl0IiBmcm9tIHRoZWlyCitzZXNzaW9uIGJlZm9yZSBkaXNjb25uZWN0aW5nIGFuIGFwcGxpY2F0aW9uIHN1Y2ggYXMga2VybWl0IGZyb20gdGhlIGRldmljZQorbm9kZS4gIElmIHRoaXMgaXMgbm90IGRvbmUsIHRoZSBuZXh0IHVzZXIgdG8gY29ubmVjdCB0byB0aGUgY29uc29sZSB3aWxsCitjb250aW51ZSB1c2luZyB0aGUgcHJldmlvdXMgdXNlcidzIGxvZ2dlZCBpbiBzZXNzaW9uIHdoaWNoIGluY2x1ZGVzCit1c2luZyB0aGUgJFRFUk0gdmFyaWFibGUgdGhhdCB0aGUgcHJldmlvdXMgdXNlciBzdXBwbGllZC4KKworSG90cGx1ZyBhZGQgYW5kIHJlbW92ZSBvZiB2dHktc2VydmVyIGFkYXB0ZXJzIGFmZmVjdHMgd2hpY2ggL2Rldi9odmNzKiBub2RlCitpcyB1c2VkIHRvIGNvbm5lY3QgdG8gZWFjaCB2dHktc2VydmVyIGFkYXB0ZXIuICBJbiBvcmRlciB0byBkZXRlcm1pbmUgd2hpY2gKK3Z0eS1zZXJ2ZXIgYWRhcHRlciBpcyBhc3NvY2lhdGVkIHdpdGggd2hpY2ggL2Rldi9odmNzKiBub2RlIGEgc3BlY2lhbCBzeXNmcworYXR0cmlidXRlIGhhcyBiZWVuIGFkZGVkIHRvIGVhY2ggdnR5LXNlcnZlciBzeXNmcyBlbnRyeS4gIFRoaXMgZW50cnkgaXMKK2NhbGxlZCAiaW5kZXgiIGFuZCBzaG93aW5nIGl0IHJldmVhbHMgYW4gaW50ZWdlciB0aGF0IHJlZmVycyB0byB0aGUKKy9kZXYvaHZjcyogZW50cnkgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhhdCBkZXZpY2UuICBGb3IgaW5zdGFuY2UgY2F0aW5nIHRoZQoraW5kZXggYXR0cmlidXRlIG9mIHZ0eS1zZXJ2ZXIgYWRhcHRlciAzMDAwMDAwNCBzaG93cyB0aGUgZm9sbG93aW5nLgorCisJUG93NTovc3lzL2J1cy92aW8vZHJpdmVycy9odmNzLzMwMDAwMDA0ICMgY2F0IGluZGV4CisJMgorCitUaGlzIGluZGV4IG9mICcyJyBtZWFucyB0aGF0IGluIG9yZGVyIHRvIGNvbm5lY3QgdG8gdnR5LXNlcnZlciBhZGFwdGVyCiszMDAwMDAwNCB0aGUgdXNlciBzaG91bGQgaW50ZXJhY3Qgd2l0aCAvZGV2L2h2Y3MyLgorCitJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBkdWUgdG8gdGhlIHN5c3RlbSBob3RwbHVnIEkvTyBjYXBhYmlsaXRpZXMgb2YgYQorc3lzdGVtIHRoZSAvZGV2L2h2Y3MqIGVudHJ5IHRoYXQgaW50ZXJhY3RzIHdpdGggYSBwYXJ0aWN1bGFyIHZ0eS1zZXJ2ZXIKK2FkYXB0ZXIgaXMgbm90IGd1YXJlbnRlZWQgdG8gcmVtYWluIHRoZSBzYW1lIGFjcm9zcyBzeXN0ZW0gcmVib290cy4gIExvb2sKK2luIHRoZSBRICYgQSBzZWN0aW9uIGZvciBtb3JlIG9uIHRoaXMgaXNzdWUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNi4gRGlzY29ubmVjdGlvbgorCitBcyBhIHNlY3VyaXR5IGZlYXR1cmUgdG8gcHJldmVudCB0aGUgZGVsaXZlcnkgb2Ygc3RhbGUgZGF0YSB0byBhbgordW5pbnRlbmRlZCB0YXJnZXQgdGhlIFBvd2VyNSBzeXN0ZW0gZmlybXdhcmUgZGlzYWJsZXMgdGhlIGZldGNoaW5nIG9mIGRhdGEKK2FuZCBkaXNjYXJkcyB0aGF0IGRhdGEgd2hlbiBhIGNvbm5lY3Rpb24gYmV0d2VlbiBhIHZ0eS1zZXJ2ZXIgYW5kIGEgdnR5IGhhcworYmVlbiBzZXZlcmVkLiAgQXMgYW4gZXhhbXBsZSwgd2hlbiBhIHZ0eS1zZXJ2ZXIgaXMgaW1tZWRpYXRlbHkgZGlzY29ubmVjdGVkCitmcm9tIGEgdnR5IGZvbGxvd2luZyBvdXRwdXQgb2YgZGF0YSB0byB0aGUgdnR5IHRoZSB2dHkgYWRhcHRlciBtYXkgbm90IGhhdmUKK2Vub3VnaCB0aW1lIGJldHdlZW4gd2hlbiBpdCByZWNlaXZlZCB0aGUgZGF0YSBpbnRlcnJ1cHQgYW5kIHdoZW4gdGhlCitjb25uZWN0aW9uIHdhcyBzZXZlcmVkIHRvIGZldGNoIHRoZSBkYXRhIGZyb20gZmlybXdhcmUgYmVmb3JlIHRoZSBmZXRjaCBpcworZGlzYWJsZWQgYnkgZmlybXdhcmUuCisKK1doZW4gaHZjcyBpcyBiZWluZyB1c2VkIHRvIHNlcnZlIGNvbnNvbGVzIHRoaXMgYmVoYXZpb3IgaXMgbm90IGEgaHVnZSBpc3N1ZQorYmVjYXVzZSB0aGUgYWRhcHRlciBzdGF5cyBjb25uZWN0ZWQgZm9yIGxhcmdlIGFtb3VudHMgb2YgdGltZSBmb2xsb3dpbmcKK2FsbW9zdCBhbGwgZGF0YSB3cml0ZXMuICBXaGVuIGh2Y3MgaXMgYmVpbmcgdXNlZCBhcyBhIHR0eSBjb25kdWl0IHRvIHR1bm5lbAorZGF0YSBiZXR3ZWVuIHR3byBwYXJ0aXRpb25zIFtzZWUgUSAmIEEgYmVsb3ddIHRoaXMgaXMgYSBodWdlIHByb2JsZW0KK2JlY2F1c2UgdGhlIHN0YW5kYXJkIExpbnV4IGJlaGF2aW9yIHdoZW4gY2F0J2luZyBvciBkZCdpbmcgZGF0YSB0byBhIGRldmljZQoraXMgdG8gb3BlbiB0aGUgdHR5LCBzZW5kIHRoZSBkYXRhLCBhbmQgdGhlbiBjbG9zZSB0aGUgdHR5LiAgSWYgdGhpcyBkcml2ZXIKK21hbnVhbGx5IHRlcm1pbmF0ZWQgdnR5LXNlcnZlciBjb25uZWN0aW9ucyBvbiB0dHkgY2xvc2UgdGhpcyB3b3VsZCBjbG9zZQordGhlIHZ0eS1zZXJ2ZXIgYW5kIHZ0eSBjb25uZWN0aW9uIGJlZm9yZSB0aGUgdGFyZ2V0IHZ0eSBoYXMgaGFkIGEgY2hhbmNlIHRvCitmZXRjaCB0aGUgZGF0YS4KKworQWRkaXRpb25hbGx5LCBkaXNjb25uZWN0aW5nIGEgdnR5LXNlcnZlciBhbmQgdnR5IG9ubHkgb24gbW9kdWxlIHJlbW92YWwgb3IKK2FkYXB0ZXIgcmVtb3ZhbCBpcyBpbXByYWN0aWNhbCBiZWNhdXNlIG90aGVyIHZ0eS1zZXJ2ZXJzIGluIG90aGVyCitwYXJ0aXRpb25zIG1heSByZXF1aXJlIHRoZSB1c2FnZSBvZiB0aGUgdGFyZ2V0IHZ0eSBhdCBhbnkgdGltZS4KKworRHVlIHRvIHRoaXMgYmVoYXZpb3JhbCByZXN0cmljdGlvbiBkaXNjb25uZWN0aW9uIG9mIHZ0eS1zZXJ2ZXJzIGZyb20gdGhlCitjb25uZWN0ZWQgdnR5IGlzIGEgbWFudWFsIHByb2NlZHVyZSB1c2luZyBhIHdyaXRlIHRvIGEgc3lzZnMgYXR0cmlidXRlCitvdXRsaW5lZCBiZWxvdywgb24gdGhlIG90aGVyIGhhbmQgdGhlIGluaXRpYWwgdnR5LXNlcnZlciBjb25uZWN0aW9uIHRvIGEKK3Z0eSBpcyBlc3RhYmxpc2hlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgZHJpdmVyLiAgTWFudWFsIHZ0eS1zZXJ2ZXIKK2Nvbm5lY3Rpb24gaXMgbmV2ZXIgcmVxdWlyZWQuCisKK0luIG9yZGVyIHRvIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGEgdnR5LXNlcnZlciBhbmQgdnR5IHRoZQorInZ0ZXJtX3N0YXRlIiBzeXNmcyBhdHRyaWJ1dGUgd2l0aGluIGVhY2ggdnR5LXNlcnZlcidzIHN5c2ZzIGVudHJ5IGlzIHVzZWQuCitSZWFkaW5nIHRoaXMgYXR0cmlidXRlIHJldmVhbHMgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0ZSBvZiB0aGUKK3Z0eS1zZXJ2ZXIgYWRhcHRlci4gIEEgemVybyBtZWFucyB0aGF0IHRoZSB2dHktc2VydmVyIGlzIG5vdCBjb25uZWN0ZWQgdG8gYQordnR5LiAgQSBvbmUgaW5kaWNhdGVzIHRoYXQgYSBjb25uZWN0aW9uIGlzIGFjdGl2ZS4KKworV3JpdGluZyBhICcwJyAoemVybykgdG8gdGhlIHZ0ZXJtX3N0YXRlIGF0dHJpYnV0ZSB3aWxsIGRpc2Nvbm5lY3QgdGhlIFZURVJNCitjb25uZWN0aW9uIGJldHdlZW4gdGhlIHZ0eS1zZXJ2ZXIgYW5kIHRhcmdldCB2dHkgT05MWSBpZiB0aGUgdnRlcm1fc3RhdGUKK3ByZXZpb3VzbHkgcmVhZCAnMScuICBUaGUgd3JpdGUgZGlyZWN0aXZlIGlzIGlnbm9yZWQgaWYgdGhlIHZ0ZXJtX3N0YXRlCityZWFkICcwJyBvciBpZiBhbnkgdmFsdWUgb3RoZXIgdGhhbiAnMCcgd2FzIHdyaXR0ZW4gdG8gdGhlIHZ0ZXJtX3N0YXRlCithdHRyaWJ1dGUuICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgd2lsbCBzaG93IHRoZSBtZXRob2QgdXNlZCBmb3IgdmVyaWZ5aW5nCit0aGUgdnR5LXNlcnZlciBjb25uZWN0aW9uIHN0YXR1cyBhbmQgZGlzY29ubmVjdGluZyBhIHZ0eS1zZXJ2ZXIgY29ubmVjdGlvbi4KKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGNhdCB2dGVybV9zdGF0ZQorCTEKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGVjaG8gMCA+IHZ0ZXJtX3N0YXRlCisKKwlQb3c1Oi9zeXMvYnVzL3Zpby9kcml2ZXJzL2h2Y3MvMzAwMDAwMDQgIyBjYXQgdnRlcm1fc3RhdGUKKwkwCisKK0FsbCB2dHktc2VydmVyIGNvbm5lY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQgd2hlbiB0aGUgZGV2aWNlIGlzCitob3RwbHVnIHJlbW92ZWQgYW5kIHdoZW4gdGhlIG1vZHVsZSBpcyByZW1vdmVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzcuIENvbmZpZ3VyYXRpb24KKworRWFjaCB2dHktc2VydmVyIGhhcyBhIHN5c2ZzIGVudHJ5IGluIHRoZSAvc3lzL2RldmljZXMvdmlvIGRpcmVjdG9yeSwgd2hpY2gKK2lzIHN5bWxpbmtlZCBpbiBzZXZlcmFsIG90aGVyIHN5c2ZzIHRyZWUgZGlyZWN0b3JpZXMsIG5vdGFibHkgdW5kZXIgdGhlCitodmNzIGRyaXZlciBlbnRyeSwgd2hpY2ggbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisKKwlQb3c1Oi9zeXMvYnVzL3Zpby9kcml2ZXJzL2h2Y3MgIyBscworCS4gIC4uICAzMDAwMDAwMyAgMzAwMDAwMDQgIHJlc2NhbgorCitCeSBkZXNpZ24sIGZpcm13YXJlIG5vdGlmaWVzIHRoZSBodmNzIGRyaXZlciBvZiB2dHktc2VydmVyIGxpZmV0aW1lcyBhbmQKK3BhcnRuZXIgdnR5IHJlbW92YWxzIGJ1dCBub3QgdGhlIGFkZGl0aW9uIG9mIHBhcnRuZXIgdnR5cy4gIFNpbmNlIGFuIEhNQworU3VwZXIgQWRtaW4gY2FuIGFkZCBwYXJ0bmVyIGluZm8gZHluYW1pY2FsbHkgd2UgaGF2ZSBwcm92aWRlZCB0aGUgaHZjcworZHJpdmVyIHN5c2ZzIGRpcmVjdG9yeSB3aXRoIHRoZSAicmVzY2FuIiB1cGRhdGUgYXR0cmlidXRlIHdoaWNoIHdpbGwgcXVlcnkKK2Zpcm13YXJlIGFuZCB1cGRhdGUgdGhlIHBhcnRuZXIgaW5mbyBmb3IgYWxsIHRoZSB2dHktc2VydmVycyB0aGF0IHRoaXMKK2RyaXZlciBtYW5hZ2VzLiAgV3JpdGluZyBhICcxJyB0byB0aGUgYXR0cmlidXRlIHRyaWdnZXJzIHRoZSB1cGRhdGUuICBBbgorZXhwbGljaXQgZXhhbXBsZSBmb2xsb3dzOgorCisJUG93NTovc3lzL2J1cy92aW8vZHJpdmVycy9odmNzICMgZWNobyAxID4gcmVzY2FuCisKK1JlYWRpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIGluZGljYXRlIGEgc3RhdGUgb2YgJzEnIG9yICcwJy4gIEEgb25lIGluZGljYXRlcwordGhhdCBhbiB1cGRhdGUgaXMgaW4gcHJvY2Vzcy4gIEEgemVybyBpbmRpY2F0ZXMgdGhhdCBhbiB1cGRhdGUgaGFzCitjb21wbGV0ZWQgb3Igd2FzIG5ldmVyIGV4ZWN1dGVkLgorCitWdHktc2VydmVyIGVudHJpZXMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIGEgMzIgYml0IHBhcnRpdGlvbiB1bmlxdWUgdW5pdAorYWRkcmVzcyB0aGF0IGlzIGNyZWF0ZWQgYnkgZmlybXdhcmUuICBBbiBleGFtcGxlIHZ0eS1zZXJ2ZXIgc3lzZnMgZW50cnkKK2xvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzoKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGxzCisJLiAgIGN1cnJlbnRfdnR5ICAgZGV2c3BlYyAgbmFtZSAgICAgICAgICBwYXJ0bmVyX3Z0eXMKKwkuLiAgZGV0YWNoX3N0YXRlICBpbmRleCAgICBwYXJ0bmVyX2NsY3MgIHZ0ZXJtX3N0YXRlCisKK0VhY2ggZW50cnkgaXMgcHJvdmlkZWQsIGJ5IGRlZmF1bHQgd2l0aCBhICJuYW1lIiBhdHRyaWJ1dGUuICBSZWFkaW5nIHRoZQorIm5hbWUiIGF0dHJpYnV0ZSB3aWxsIHJldmVhbCB0aGUgZGV2aWNlIHR5cGUgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZworZXhhbXBsZToKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwMyAjIGNhdCBuYW1lCisJdnR5LXNlcnZlcgorCitFYWNoIGVudHJ5IGlzIGFsc28gcHJvdmlkZWQsIGJ5IGRlZmF1bHQsIHdpdGggYSAiZGV2c3BlYyIgYXR0cmlidXRlIHdoaWNoCityZXZlYWxzIHRoZSBmdWxsIGRldmljZSBzcGVjaWZpY2F0aW9uIHdoZW4gcmVhZCwgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZworZXhhbXBsZToKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGNhdCBkZXZzcGVjCisJL3ZkZXZpY2UvdnR5LXNlcnZlckAzMDAwMDAwNAorCitFYWNoIHZ0eS1zZXJ2ZXIgc3lzZnMgZGlyIGlzIHByb3ZpZGVkIHdpdGggdHdvIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRoYXQKK3Byb3ZpZGUgbGlzdHMgb2YgZWFzaWx5IHBhcnNlZCBwYXJ0bmVyIHZ0eSBkYXRhOiAicGFydG5lcl92dHlzIiBhbmQKKyJwYXJ0bmVyX2NsY3MiLgorCisJUG93NTovc3lzL2J1cy92aW8vZHJpdmVycy9odmNzLzMwMDAwMDA0ICMgY2F0IHBhcnRuZXJfdnR5cworCTMwMDAwMDAwCisJMzAwMDAwMDEKKwkzMDAwMDAwMgorCTMwMDAwMDAwCisJMzAwMDAwMDAKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGNhdCBwYXJ0bmVyX2NsY3MKKwlVNTExMi40MjguMTAzMDQ4QS1WMy1DMAorCVU1MTEyLjQyOC4xMDMwNDhBLVYzLUMyCisJVTUxMTIuNDI4LjEwMzA0OEEtVjMtQzMKKwlVNTExMi40MjguMTAzMDQ4QS1WNC1DMAorCVU1MTEyLjQyOC4xMDMwNDhBLVY1LUMwCisKK1JlYWRpbmcgcGFydG5lcl92dHlzIHJldHVybnMgYSBsaXN0IG9mIHBhcnRuZXIgdnR5cy4gIFZ0eSB1bml0IGFkZHJlc3MKK251bWJlcmluZyBpcyBvbmx5IHBlci1wYXJ0aXRpb24tdW5pcXVlIHNvIGVudHJpZXMgd2lsbCBmcmVxdWVudGx5IHJlcGVhdC4KKworUmVhZGluZyBwYXJ0bmVyX2NsY3MgcmV0dXJucyBhIGxpc3Qgb2YgImNvbnZlcmdlZCBsb2NhdGlvbiBjb2RlcyIgd2hpY2ggYXJlCitjb21wb3NlZCBvZiBhIHN5c3RlbSBzZXJpYWwgbnVtYmVyIGZvbGxvd2VkIGJ5ICItVioiLCB3aGVyZSB0aGUgJyonIGlzIHRoZQordGFyZ2V0IHBhcnRpdGlvbiBudW1iZXIsIGFuZCAiLUMqIiwgd2hlcmUgdGhlICcqJyBpcyB0aGUgc2xvdCBvZiB0aGUKK2FkYXB0ZXIuICBUaGUgZmlyc3QgdnR5IHBhcnRuZXIgY29ycmVzcG9uZHMgdG8gdGhlIGZpcnN0IGNsYyBpdGVtLCB0aGUKK3NlY29uZCB2dHkgcGFydG5lciB0byB0aGUgc2Vjb25kIGNsYyBpdGVtLCBldGMuCisKK0EgdnR5LXNlcnZlciBjYW4gb25seSBiZSBjb25uZWN0ZWQgdG8gYSBzaW5nbGUgdnR5IGF0IGEgdGltZS4gIFRoZSBlbnRyeSwKKyJjdXJyZW50X3Z0eSIgcHJpbnRzIHRoZSBjbGMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXJ0bmVyIHZ0eSB3aGVuCityZWFkLgorCitUaGUgY3VycmVudF92dHkgY2FuIGJlIGNoYW5nZWQgYnkgd3JpdGluZyBhIHZhbGlkIHBhcnRuZXIgY2xjIHRvIHRoZSBlbnRyeQorYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgorCisJUG93NTovc3lzL2J1cy92aW8vZHJpdmVycy9odmNzLzMwMDAwMDA0ICMgZWNobyBVNTExMi40MjguMTAzMDQKKwk4QS1WNC1DMCA+IGN1cnJlbnRfdnR5CisKK0NoYW5naW5nIHRoZSBjdXJyZW50X3Z0eSB3aGVuIGEgdnR5LXNlcnZlciBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIHZ0eQorZG9lcyBub3QgYWZmZWN0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uICBUaGUgY2hhbmdlIHRha2VzIGVmZmVjdCB3aGVuIHRoZQorY3VycmVudGx5IG9wZW4gY29ubmVjdGlvbiBpcyBmcmVlZC4KKworSW5mb3JtYXRpb24gb24gdGhlICJ2dGVybV9zdGF0ZSIgYXR0cmlidXRlIHdhcyBjb3ZlcmVkIGVhcmxpZXIgb24gdGhlCitjaGFwdGVyIGVudGl0bGVkICJkaXNjb25uZWN0aW9uIi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis4LiBRdWVzdGlvbnMgJiBBbnN3ZXJzOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitROiBXaGF0IGFyZSB0aGUgc2VjdXJpdHkgY29uY2VybnMgaW52b2x2aW5nIGh2Y3M/CisKK0E6IFRoZXJlIGFyZSB0aHJlZSBtYWluIHNlY3VyaXR5IGNvbmNlcm5zOgorCisJMS4gVGhlIGNyZWF0b3Igb2YgdGhlIC9kZXYvaHZjcyogbm9kZXMgaGFzIHRoZSBhYmlsaXR5IHRvIHJlc3RyaWN0CisJdGhlIGFjY2VzcyBvZiB0aGUgZGV2aWNlIGVudHJpZXMgdG8gY2VydGFpbiB1c2VycyBvciBncm91cHMuICBJdAorCW1heSBiZSBiZXN0IHRvIGNyZWF0ZSBhIHNwZWNpYWwgaHZjcyBncm91cCBwcml2aWxlZ2UgZm9yIHByb3ZpZGluZworCWFjY2VzcyB0byBzeXN0ZW0gY29uc29sZXMuCisKKwkyLiBUbyBwcm92aWRlIG5ldHdvcmsgc2VjdXJpdHkgd2hlbiBncmFiYmluZyB0aGUgY29uc29sZSBpdCBpcworCXN1Z2dlc3RlZCB0aGF0IHRoZSB1c2VyIGNvbm5lY3QgdG8gdGhlIGNvbnNvbGUgaG9zdGluZyBwYXJ0aXRpb24KKwl1c2luZyBhIHNlY3VyZSBtZXRob2QsIHN1Y2ggYXMgU1NIIG9yIHNpdCBhdCBhIGhhcmR3YXJlIGNvbnNvbGUuCisKKwkzLiBNYWtlIHN1cmUgdG8gZXhpdCB0aGUgdXNlciBzZXNzaW9uIHdoZW4gZG9uZSB3aXRoIGEgY29uc29sZSBvcgorCXRoZSBuZXh0IHZ0eS1zZXJ2ZXIgY29ubmVjdGlvbiAod2hpY2ggbWF5IGJlIGZyb20gYW5vdGhlcgorCXBhcnRpdGlvbikgd2lsbCBleHBlcmllbmNlIHRoZSBwcmV2aW91c2x5IGxvZ2dlZCBpbiBzZXNzaW9uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1E6IEhvdyBkbyBJIG11bHRpcGxleCBhIGNvbnNvbGUgdGhhdCBJIGdyYWIgdGhyb3VnaCBodmNzIHNvIHRoYXQgb3RoZXIKK3Blb3BsZSBjYW4gc2VlIGl0OgorCitBOiBZb3UgY2FuIHVzZSAic2NyZWVuIiB0byBkaXJlY3RseSBjb25uZWN0IHRvIHRoZSAvZGV2L2h2Y3MqIGRldmljZSBhbmQKK3NldHVwIGEgc2Vzc2lvbiBvbiB5b3VyIG1hY2hpbmUgd2l0aCB0aGUgY29uc29sZSBncm91cCBwcml2aWxlZ2VzLiAgQXMKK3BvaW50ZWQgb3V0IGVhcmxpZXIgYnkgZGVmYXVsdCBzY3JlZW4gZG9lc24ndCBwcm92aWRlIHRoZSB0ZXJtY2FwIHNldHRpbmdzCitmb3IgbW9zdCB0ZXJtaW5hbCBlbXVsYXRvcnMgdG8gcHJvdmlkZSBhZGVxdWF0ZSBjaGFyYWN0ZXIgY29udmVyc2lvbiBmcm9tCit0ZXJtIHR5cGUgInNjcmVlbiIgdG8gb3RoZXJzLiAgVGhpcyBtZWFucyB0aGF0IGN1cnNlcyBiYXNlZCBwcm9ncmFtcyBtYXkKK25vdCBkaXNwbGF5IHByb3Blcmx5IGluIHNjcmVlbiBzZXNzaW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitROiBXaHkgYXJlIHRoZSBjb2xvcnMgYWxsIG1lc3NlZCB1cD8KK1E6IFdoeSBhcmUgdGhlIGNvbnRyb2wgY2hhcmFjdGVycyBhY3Rpbmcgc3RyYW5nZSBvciBub3Qgd29ya2luZz8KK1E6IFdoeSBpcyB0aGUgY29uc29sZSBvdXRwdXQgYWxsIHN0cmFuZ2UgYW5kIHVuaW50ZWxsaWdpYmxlPworCitBOiBQbGVhc2Ugc2VlIHRoZSBwcmVjZWRpbmcgc2VjdGlvbiBvbiAiQ29ubmVjdGlvbiIgZm9yIGEgZGlzY3Vzc2lvbiBvZiBob3cKK2FwcGxpY2F0aW9ucyBjYW4gYWZmZWN0IHRoZSBkaXNwbGF5IG9mIGNoYXJhY3RlciBjb250cm9sIHNlcXVlbmNlcy4KK0FkZGl0aW9uYWxseSwganVzdCBiZWNhdXNlIHlvdSBsb2dnZWQgaW50byB0aGUgY29uc29sZSB1c2luZyBhbmQgeHRlcm0KK2RvZXNuJ3QgbWVhbiBzb21lb25lIGVsc2UgZGlkbid0IGxvZyBpbnRvIHRoZSBjb25zb2xlIHdpdGggdGhlIEhNQyBjb25zb2xlCisodnQzMjApIGJlZm9yZSB5b3UgYW5kIGxlYXZlIHRoZSBzZXNzaW9uIGxvZ2dlZCBpbi4gIFRoZSBiZXN0IHRoaW5nIHRvIGRvCitpcyB0byBleHBvcnQgVEVSTSB0byB0aGUgdGVybWluYWwgdHlwZSBvZiB5b3VyIHRlcm1pbmFsIGVtdWxhdG9yIHdoZW4geW91CitnZXQgdGhlIGNvbnNvbGUuICBBZGRpdGlvbmFsbHkgbWFrZSBzdXJlIHRvICJleGl0IiB0aGUgY29uc29sZSBiZWZvcmUgeW91CitkaXNjb25uZWN0IGZyb20gdGhlIGNvbnNvbGUuICBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG5leHQgdXNlciBnZXRzCit0aGVpciBvd24gVEVSTSB0eXBlIHNldCB3aGVuIHRoZXkgbG9naW4uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogV2hlbiBJIHRyeSB0byBDT05ORUNUIGtlcm1pdCB0byBhbiBodmNzIGRldmljZSBJIGdldDoKKyJTb3JyeSwgY2FuJ3Qgb3BlbiBjb25uZWN0aW9uOiAvZGV2L2h2Y3MqIldoYXQgaXMgaGFwcGVuaW5nPworCitBOiBTb21lIG90aGVyIFBvd2VyNSBjb25zb2xlIG1lY2hhbmlzbSBoYXMgYSBjb25uZWN0aW9uIHRvIHRoZSB2dHkgYW5kCitpc24ndCBnaXZpbmcgaXQgdXAuICBZb3UgY2FuIHRyeSB0byBmb3JjZSBkaXNjb25uZWN0IHRoZSBjb25zb2xlcyBmcm9tIHRoZQorSE1DIGJ5IHJpZ2h0IGNsaWNraW5nIG9uIHRoZSBwYXJ0aXRpb24gYW5kIHRoZW4gc2VsZWN0aW5nICJjbG9zZSB0ZXJtaW5hbCIuCitPdGhlcndpc2UgeW91IGhhdmUgdG8gaHVudCBkb3duIHRoZSBwZW9wbGUgd2hvIGhhdmUgY29uc29sZSBhdXRob3JpdHkuICBJdAoraXMgcG9zc2libGUgdGhhdCB5b3UgYWxyZWFkeSBoYXZlIHRoZSBjb25zb2xlIG9wZW4gdXNpbmcgYW5vdGhlciBrZXJtaXQKK3Nlc3Npb24gYW5kIGp1c3QgZm9yZ290IGFib3V0IGl0LiAgUGxlYXNlIHJldmlldyB0aGUgY29uc29sZSBvcHRpb25zIGZvcgorUG93ZXI1IHN5c3RlbXMgdG8gZGV0ZXJtaW5lIHRoZSBtYW55IHdheXMgYSBzeXN0ZW0gY29uc29sZSBjYW4gYmUgaGVsZC4KKworT1IKKworQTogQW5vdGhlciB1c2VyIG1heSBub3QgaGF2ZSBhIGNvbm5lY3Rpdml0eSBtZXRob2QgY3VycmVudGx5IGF0dGFjaGVkIHRvIGEKKy9kZXYvaHZjcyBkZXZpY2UgYnV0IHRoZSB2dGVybV9zdGF0ZSBtYXkgcmV2ZWFsIHRoYXQgdGhleSBzdGlsbCBoYXZlIHRoZQordnR5LXNlcnZlciBjb25uZWN0aW9uIGVzdGFibGlzaGVkLiAgVGhleSBuZWVkIHRvIGZyZWUgdGhpcyB1c2luZyB0aGUgbWV0aG9kCitvdXRsaW5lZCBpbiB0aGUgc2VjdGlvbiBvbiAiRGlzY29ubmVjdGlvbiIgaW4gb3JkZXIgZm9yIG90aGVycyB0byBjb25uZWN0Cit0byB0aGUgdGFyZ2V0IHZ0eS4KKworT1IKKworQTogVGhlIHVzZXIgcHJvZmlsZSB5b3UgYXJlIHVzaW5nIHRvIGV4ZWN1dGUga2VybWl0IHByb2JhYmx5IGRvZXNuJ3QgaGF2ZQorcGVybWlzc2lvbnMgdG8gdXNlIHRoZSAvZGV2L2h2Y3MqIGRldmljZS4KKworT1IKKworQTogWW91IHByb2JhYmx5IGhhdmVuJ3QgaW5zZXJ0ZWQgdGhlIGh2Y3Mua28gbW9kdWxlIHlldCBidXQgdGhlIC9kZXYvaHZjcyoKK2VudHJ5IHN0aWxsIGV4aXN0cyAob24gc3lzdGVtcyB3aXRob3V0IHVkZXYpLgorCitPUgorCitBOiBUaGVyZSBpcyBub3QgYSBjb3JyZXNwb25kaW5nIHZ0eS1zZXJ2ZXIgZGV2aWNlIHRoYXQgbWFwcyB0byBhbiBleGlzdGluZworL2Rldi9odmNzKiBlbnRyeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitROiBXaGVuIEkgdHJ5IHRvIENPTk5FQ1Qga2VybWl0IHRvIGFuIGh2Y3MgZGV2aWNlIEkgZ2V0OgorIlNvcnJ5LCB3cml0ZSBhY2Nlc3MgdG8gVVVDUCBsb2NrZmlsZSBkaXJlY3RvcnkgZGVuaWVkLiIKKworQTogVGhlIC9kZXYvaHZjcyogZW50cnkgeW91IGhhdmUgc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3Qgd2hlcmUgeW91IHNhaWQgaXQKK2RvZXM/ICBNYXliZSB5b3UgaGF2ZW4ndCBpbnNlcnRlZCB0aGUgbW9kdWxlIChvbiBzeXN0ZW1zIHdpdGggdWRldikuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogSWYgSSBhbHJlYWR5IGhhdmUgb25lIExpbnV4IHBhcnRpdGlvbiBpbnN0YWxsZWQgY2FuIEkgdXNlIGh2Y3Mgb24gc2FpZAorcGFydGl0aW9uIHRvIHByb3ZpZGUgdGhlIGNvbnNvbGUgZm9yIHRoZSBpbnN0YWxsIG9mIGEgc2Vjb25kIExpbnV4CitwYXJ0aXRpb24/CisKK0E6IFllcyBncmFudGVkIHRoYXQgeW91ciBhcmUgY29ubmVjdGVkIHRvIHRoZSAvZGV2L2h2Y3MqIGRldmljZSB1c2luZwora2VybWl0IG9yIGN1IG9yIHNvbWUgb3RoZXIgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgcHJvdmlkZSB0ZXJtaW5hbCBlbXVsYXRpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogQ2FuIEkgY29ubmVjdCB0byBtb3JlIHRoYW4gb25lIHBhcnRpdGlvbidzIGNvbnNvbGUgYXQgYSB0aW1lIHVzaW5nIHRoaXMKK2RyaXZlcj8KKworQTogWWVzLiAgT2YgY291cnNlIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBtdXN0IGJlIG1vcmUgdGhhbiBvbmUgdnR5LXNlcnZlcgorY29uZmlndXJlZCBmb3IgdGhpcyBwYXJ0aXRpb24gYW5kIGVhY2ggbXVzdCBwb2ludCB0byBhIGRpc2Nvbm5lY3RlZCB2dHkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogRG9lcyB0aGUgaHZjcyBkcml2ZXIgc3VwcG9ydCBkeW5hbWljIChob3RwbHVnKSBhZGRpdGlvbiBvZiBkZXZpY2VzPworCitBOiBZZXMsIGlmIHlvdSBoYXZlIGRscGFyIGFuZCBob3RwbHVnIGVuYWJsZWQgZm9yIHlvdXIgc3lzdGVtIGFuZCBpdCBoYXMKK2JlZW4gYnVpbHQgaW50byB0aGUga2VybmVsIHRoZSBodmNzIGRyaXZlcnMgaXMgY29uZmlndXJlZCB0byBkeW5hbWljYWxseQoraGFuZGxlIGFkZGl0aW9ucyBvZiBuZXcgZGV2aWNlcyBhbmQgcmVtb3ZhbHMgb2YgdW51c2VkIGRldmljZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogRm9yIHNvbWUgcmVhc29uIC9kZXYvaHZjcyogZG9lc24ndCBtYXAgdG8gdGhlIHNhbWUgdnR5LXNlcnZlciBhZGFwdGVyCithZnRlciBhIHJlYm9vdC4gIFdoYXQgaGFwcGVuZWQ/CisKK0E6IEFzc2lnbm1lbnQgb2YgdnR5LXNlcnZlciBhZGFwdGVycyB0byAvZGV2L2h2Y3MqIGVudHJpZXMgaXMgYWx3YXlzIGRvbmUKK2luIHRoZSBvcmRlciB0aGF0IHRoZSBhZGFwdGVycyBhcmUgZXhwb3NlZC4gIER1ZSB0byBob3RwbHVnIGNhcGFiaWxpdGllcyBvZgordGhpcyBkcml2ZXIgYXNzaWdubWVudCBvZiBob3RwbHVnIGFkZGVkIHZ0eS1zZXJ2ZXJzIG1heSBiZSBpbiBhIGRpZmZlcmVudAorb3JkZXIgdGhhbiBob3cgdGhleSB3b3VsZCBiZSBleHBvc2VkIG9uIG1vZHVsZSBsb2FkLiAgUmVib290aW5nIG9yCityZWxvYWRpbmcgdGhlIG1vZHVsZSBhZnRlciBkeW5hbWljIGFkZGl0aW9uIG1heSByZXN1bHQgaW4gdGhlIC9kZXYvaHZjcyoKK2FuZCB2dHktc2VydmVyIGNvdXBsaW5nIGNoYW5naW5nIGlmIGEgdnR5LXNlcnZlciBhZGFwdGVyIHdhcyBhZGRlZCBpbiBhCitzbG90IGluYmV0d2VlbiB0d28gb3RoZXIgdnR5LXNlcnZlciBhZGFwdGVycy4gIFJlZmVyIHRvIHRoZSBzZWN0aW9uIGFib3ZlCitvbiBob3cgdG8gZGV0ZXJtaW5lIHdoaWNoIHZ0eS1zZXJ2ZXIgZ29lcyB3aXRoIHdoaWNoIC9kZXYvaHZjcyogbm9kZS4KK0hpbnQ7IGxvb2sgYXQgdGhlIHN5c2ZzICJpbmRleCIgYXR0cmlidXRlIGZvciB0aGUgdnR5LXNlcnZlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitROiBDYW4gSSB1c2UgL2Rldi9odmNzKiBhcyBhIGNvbmR1aXQgdG8gYW5vdGhlciBwYXJ0aXRpb24gYW5kIHVzZSBhIHR0eQorZGV2aWNlIG9uIHRoYXQgcGFydGl0aW9uIGFzIHRoZSBvdGhlciBlbmQgb2YgdGhlIHBpcGU/CisKK0E6IFllcywgb24gUG93ZXI1IHBsYXRmb3JtcyB0aGUgaHZjX2NvbnNvbGUgZHJpdmVyIHByb3ZpZGVzIGEgdHR5IGludGVyZmFjZQorZm9yIGV4dHJhIC9kZXYvaHZjKiBkZXZpY2VzICh3aGVyZSAvZGV2L2h2YzAgaXMgbW9zdCBsaWtlbHkgdGhlIGNvbnNvbGUpLgorSW4gb3JkZXIgdG8gZ2V0IGEgdHR5IGNvbmR1aXQgd29ya2luZyBiZXR3ZWVuIHRoZSB0d28gcGFydGl0aW9ucyB0aGUgSE1DCitTdXBlciBBZG1pbiBtdXN0IGNyZWF0ZSBhbiBhZGRpdGlvbmFsICJzZXJpYWwgc2VydmVyIiBmb3IgdGhlIHRhcmdldAorcGFydGl0aW9uIHdpdGggdGhlIEhNQyBndWkgd2hpY2ggd2lsbCBzaG93IHVwIGFzIC9kZXYvaHZjKiB3aGVuIHRoZSB0YXJnZXQKK3BhcnRpdGlvbiBpcyByZWJvb3RlZC4KKworVGhlIEhNQyBTdXBlciBBZG1pbiB0aGVuIGNyZWF0ZXMgYW4gYWRkaXRpb25hbCAic2VyaWFsIGNsaWVudCIgZm9yIHRoZQorY3VycmVudCBwYXJ0aXRpb24gYW5kIHBvaW50cyB0aGlzIGF0IHRoZSB0YXJnZXQgcGFydGl0aW9uJ3MgbmV3bHkgY3JlYXRlZAorInNlcmlhbCBzZXJ2ZXIiIGFkYXB0ZXIgKHJlbWVtYmVyIHRoZSBzbG90KS4gIFRoaXMgc2hvd3MgdXAgYXMgYW4KK2FkZGl0aW9uYWwgL2Rldi9odmNzKiBkZXZpY2UuCisKK05vdyBhIHByb2dyYW0gb24gdGhlIHRhcmdldCBzeXN0ZW0gY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcmVhZCBvciB3cml0ZSB0bworL2Rldi9odmMqIGFuZCBhbm90aGVyIHByb2dyYW0gb24gdGhlIGN1cnJlbnQgcGFydGl0aW9uIGNhbiBiZSBjb25maWd1cmVkIHRvCityZWFkIG9yIHdyaXRlIHRvIC9kZXYvaHZjcyouICBOb3cgeW91IGhhdmUgYSB0dHkgY29uZHVpdCBiZXR3ZWVuIHR3bworcGFydGl0aW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis5LiBSZXBvcnRpbmcgQnVnczoKKworVGhlIHByb3BlciBjaGFubmVsIGZvciByZXBvcnRpbmcgYnVncyBpcyBlaXRoZXIgdGhyb3VnaCB0aGUgTGludXggT1MKK2Rpc3RyaWJ1dGlvbiBjb21wYW55IHRoYXQgcHJvdmlkZWQgeW91ciBPUyBvciBieSBwb3N0aW5nIGlzc3VlcyB0byB0aGUKK3BwYzY0IGRldmVsb3BtZW50IG1haWxpbmcgbGlzdCBhdDoKKworbGludXhwcGM2NC1kZXZAbGlzdHMubGludXhwcGMub3JnCisKK1RoaXMgcmVxdWVzdCBpcyB0byBwcm92aWRlIGEgZG9jdW1lbnRlZCBhbmQgc2VhcmNoYWJsZSBwdWJsaWMgZXhjaGFuZ2UKK29mIHRoZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zIHN1cnJvdW5kaW5nIHRoaXMgZHJpdmVyIGZvciB0aGUgYmVuZWZpdCBvZgorYWxsIHVzZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL21wYzUyeHgudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL21wYzUyeHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZGQ0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvbXBjNTJ4eC50eHQKQEAgLTAsMCArMSwzOSBAQAorTGludXggMi42Lnggb24gTVBDNTJ4eCBmYW1pbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciB0aGUgbGF0ZXN0IGluZm8sIGdvIHRvIGh0dHA6Ly93d3cuMjQ2dE50LmNvbS9tcGM1Mnh4LworIAorVG8gY29tcGlsZS91c2UgOgorCisgIC0gVS1Cb290OgorICAgICAjIDxlZGl0IE1ha2VmaWxlIHRvIHNldCBBUkNIPXBwYyAmIENST1NTX0NPTVBJTEU9Li4uICggYWxzbyBFWFRSQVZFUlNJT04KKyAgICAgICAgaWYgeW91IHdpc2ggdG8gKS4KKyAgICAgIyBtYWtlIGxpdGU1MjAwX2RlZmNvbmZpZworICAgICAjIG1ha2UgdUltYWdlCisgICAgCisgICAgIHRoZW4sIG9uIFUtYm9vdDoKKyAgICAgPT4gdGZ0cGJvb3QgMjAwMDAwIHVJbWFnZQorICAgICA9PiB0ZnRwYm9vdCA0MDAwMDAgcFJhbWRpc2sKKyAgICAgPT4gYm9vdG0gMjAwMDAwIDQwMDAwMAorICAgIAorICAtIERCdWc6CisgICAgICMgPGVkaXQgTWFrZWZpbGUgdG8gc2V0IEFSQ0g9cHBjICYgQ1JPU1NfQ09NUElMRT0uLi4gKCBhbHNvIEVYVFJBVkVSU0lPTgorICAgICAgICBpZiB5b3Ugd2lzaCB0byApLgorICAgICAjIG1ha2UgbGl0ZTUyMDBfZGVmY29uZmlnCisgICAgICMgY3AgeW91cl9pbml0cmQuZ3ogYXJjaC9wcGMvYm9vdC9pbWFnZXMvcmFtZGlzay5pbWFnZS5negorICAgICAjIG1ha2UgekltYWdlLmluaXRyZCAKKyAgICAgIyBtYWtlIAorCisgICAgIHRoZW4gaW4gREJ1ZzoKKyAgICAgREJ1Zz4gZG4gLWkgekltYWdlLmluaXRyZC5saXRlNTIwMAorICAgICAKKworU29tZSByZW1hcmtzIDoKKyAtIFRoZSBwb3J0IGlzIG5hbWVkIG1wYzUyeHh4LCBhbmQgY29uZmlnIG9wdGlvbnMgYXJlIFBQQ19NUEM1Mnh4LiBUaGUgTUdUNTEwMAorICAgaXMgbm90IHN1cHBvcnRlZCwgYW5kIEknbSBub3Qgc3VyZSBhbnlvbmUgaXMgaW50ZXJlc3RpbmcgaW4gd29ya2luZyBvbiBpdAorICAgc28uIEkgZGlkbid0IHRvb2sgNXh4eCBiZWNhdXNlIHRoZXJlJ3MgYXBwYXJlbnRseSBhIGxvdCBvZiA1eHh4IHRoYXQgaGF2ZQorICAgbm90aGluZyB0byBkbyB3aXRoIHRoZSBNUEM1MjAwLiBJIGFsc28gaW5jbHVkZWQgdGhlICdNUEMnIGZvciB0aGUgc2FtZQorICAgcmVhc29uLgorIC0gT2YgY291cnNlLCBJIGluc3BpcmVkIG15c2VsZiBmcm9tIHRoZSAyLjQgcG9ydC4gSWYgeW91IHRoaW5rIEkgZm9yZ290IHRvCisgICBtZW50aW9uIHlvdS95b3VyIGNvbXBhbnkgaW4gdGhlIGNvcHlyaWdodCBvZiBzb21lIGNvZGUsIEknbGwgY29ycmVjdCBpdAorICAgQVNBUC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wcGNfaHRhYi50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHBjX2h0YWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGM3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHBjX2h0YWIudHh0CkBAIC0wLDAgKzEsMTE4IEBACisgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IC9wcm9jL3BwY19odGFiCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBhbmQgdGhlIHJlbGF0ZWQgY29kZSB3YXMgd3JpdHRlbiBieSBtZSAoQ29ydCBEb3VnYW4pLCBwbGVhc2UKK2VtYWlsIG1lIChjb3J0QGZzbWxhYnMuY29tKSBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIGNvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgorCitMYXN0IENoYW5nZTogMi4xNi45OAorCitUaGlzIGVudHJ5IGluIHRoZSBwcm9jIGRpcmVjdG9yeSBpcyByZWFkYWJsZSBieSBhbGwgdXNlcnMgYnV0IG9ubHkKK3dyaXRhYmxlIGJ5IHJvb3QuCisKK1RoZSBwcGNfaHRhYiBpbnRlcmZhY2UgaXMgYSB1c2VyIGxldmVsIHdheSBvZiBhY2Nlc3NpbmcgdGhlCitwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHJlZ2lzdGVycyBhcyB3ZWxsIGFzIHByb3ZpZGluZyBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIFBURSBoYXNoIHRhYmxlLgorCisxLiBSZWFkaW5nCisKKyAgUmVhZGluZyB0aGlzIGZpbGUgd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQKKyAgaGFzaCB0YWJsZSB0aGF0IHNlcnZlcyBhcyBhbiBleHRlbmRlZCB0bGIgZm9yIHBhZ2UgdHJhbnNsYXRpb24gb24gdGhlCisgIHBvd2VycGMuICBJdCB3aWxsIGFsc28gZ2l2ZSB5b3UgaW5mb3JtYXRpb24gYWJvdXQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQKKyAgc3BlY2lmaWMgdG8gdGhlIGNwdSB0aGF0IHlvdSBhcmUgdXNpbmcuCisKKyAgRXhwbGFuYXRpb24gb2YgdGhlIDYwNCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIEZpZWxkczoKKyAgICBNTUNSMCAtIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNTUNSMCByZWdpc3RlcgorICAgIFBNQzEKKyAgICBQTUMyIC0gdGhlIHZhbHVlIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYQorICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB3aGF0IGV2ZW50cyB0aGV5IGFyZSBjb3VudGluZworICAgICAgICAgICB3aGljaCBhcmUgYmFzZWQgb24gTU1DUjAgYml0IHNldHRpbmdzLgorICBFeHBsYW5hdGlvbiBvZiB0aGUgUFRFIEhhc2ggVGFibGUgZmllbGRzOgorCisgICAgU2l6ZSAtIGhhc2ggdGFibGUgc2l6ZSBpbiBLYi4KKyAgICBCdWNrZXRzIC0gIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSB0YWJsZS4KKyAgICBBZGRyZXNzIC0gdGhlIHZpcnR1YWwga2VybmVsIGFkZHJlc3Mgb2YgdGhlIGhhc2ggdGFibGUgYmFzZS4KKyAgICBFbnRyaWVzIC0gdGhlIG51bWJlciBvZiBwdGVzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgaGFzaCB0YWJsZS4KKyAgICBVc2VyL0tlcm5lbCAtIGhvdyBtYW55IHB0ZSdzIGFyZSBpbiB1c2UgYnkgdGhlIGtlcm5lbCBvciB1c2VyIGF0IHRoYXQgdGltZS4KKyAgICBPdmVyZmxvd3MgLSBIb3cgbWFueSBvZiB0aGUgZW50cmllcyBhcmUgaW4gdGhlaXIgc2Vjb25kYXJ5IGhhc2ggbG9jYXRpb24uCisgICAgUGVyY2VudCBmdWxsIC0gcmF0aW8gb2YgZnJlZSBwdGUgZW50cmllcyB0byBpbiB1c2UgZW50cmllcy4KKyAgICBSZWxvYWRzIC0gQ291bnQgb2YgaG93IG1hbnkgaGFzaCB0YWJsZSBtaXNzZXMgaGF2ZSBvY2N1cnJlZAorICAgICAgICAgICAgICB0aGF0IHdlcmUgZml4ZWQgd2l0aCBhIHJlbG9hZCBmcm9tIHRoZSBsaW51eCB0YWJsZXMuCisgICAgICAgICAgICAgIFNob3VsZCBhbHdheXMgYmUgMCBvbiA2MDMgYmFzZWQgbWFjaGluZXMuCisgICAgTm9uLWVycm9yIE1pc3NlcyAtIENvdW50IG9mIGhvdyBtYW55IGhhc2ggdGFibGUgbWlzc2VzIGhhdmUgb2NjdXJyZWQKKyAgICAgICAgICAgICAgdGhhdCB3ZXJlIGNvbXBsZXRlZCB3aXRoIHRoZSBjcmVhdGlvbiBvZiBhIHB0ZSBpbiB0aGUgbGludXgKKyAgICAgICAgICAgICAgdGFibGVzIHdpdGggYSBjYWxsIHRvIGRvX3BhZ2VfZmF1bHQoKS4KKyAgICBFcnJvciBNaXNzZXMgLSBOdW1iZXIgb2YgbWlzc2VzIGR1ZSB0byBlcnJvcnMgc3VjaCBhcyBiYWQgYWRkcmVzcworICAgICAgICAgICAgICBhbmQgcGVybWlzc2lvbiB2aW9sYXRpb25zLiAgVGhpcyBpbmNsdWRlcyBrZXJuZWwgYWNjZXNzIG9mCisgICAgICAgICAgICAgIGJhZCB1c2VyIGFkZHJlc3NlcyB0aGF0IGFyZSBmaXhlZCB1cCBieSB0aGUgdHJhcCBoYW5kbGVyLgorCisgIE5vdGUgdGhhdCBjYWxjdWxhdGlvbiBvZiB0aGUgZGF0YSBkaXNwbGF5ZWQgZnJvbSAvcHJvYy9wcGNfaHRhYiB0YWtlcworICBhIGxvbmcgdGltZSBhbmQgc3BlbmRzIGEgZ3JlYXQgZGVhbCBvZiB0aW1lIGluIHRoZSBrZXJuZWwuICBJdCB3b3VsZAorICBiZSBxdWl0ZSBoYXJkIG9uIHBlcmZvcm1hbmNlIHRvIHJlYWQgdGhpcyBmaWxlIGNvbnN0YW50bHkuICBJbiB0aW1lCisgIHRoZXJlIG1heSBiZSBhIGNvdW50ZXIgaW4gdGhlIGtlcm5lbCB0aGF0IGFsbG93cyBzdWNjZXNzaXZlIHJlYWRzIGZyb20KKyAgdGhpcyBmaWxlIG9ubHkgYWZ0ZXIgYSBnaXZlbiBhbW91bnQgb2YgdGltZSBoYXMgcGFzc2VkIHRvIHJlZHVjZSB0aGUKKyAgcG9zc2liaWxpdHkgb2YgYSB1c2VyIHNsb3dpbmcgdGhlIHN5c3RlbSBieSByZWFkaW5nIHRoaXMgZmlsZS4KKworMi4gV3JpdGluZworCisgIFdyaXRpbmcgdG8gdGhlIHBwY19odGFiIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YKKyAgdGhlIHBvd2VycGMgUFRFIGhhc2ggdGFibGUgYW5kIHNldHVwIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuCisKKyAgUmVzaXppbmcgdGhlIFBURSBoYXNoIHRhYmxlIGlzIG5vdCBlbmFibGVkIHJpZ2h0IG5vdyBkdWUgdG8gbWFueQorICBjb21wbGljYXRpb25zIHdpdGggbW92aW5nIHRoZSBoYXNoIHRhYmxlLCByZWhhc2hpbmcgdGhlIGVudHJpZXMKKyAgYW5kIG1hbnkgbWFueSBTTVAgaXNzdWVzIHRoYXQgd291bGQgaGF2ZSB0byBiZSBkZWFsdCB3aXRoLgorCisgIFdyaXRlIG9wdGlvbnMgdG8gcHBjX2h0YWI6CisgIAorICAgLSBUbyBzZXQgdGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUgdG8gNjRLYjoKKworICAgICAgZWNobyAnc2l6ZSA2NCcgPiAvcHJvYy9wcGNfaHRhYgorCisgICAgIFRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NCBhbmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKyAgICAgNjQuCisKKyAgIC0gVG8gdHVybiBvZmYgcGVyZm9ybWFuY2UgbW9uaXRvcmluZzoKKworICAgICAgZWNobyAnb2ZmJyA+IC9wcm9jL3BwY19odGFiCisKKyAgIC0gVG8gcmVzZXQgdGhlIGNvdW50ZXJzIHdpdGhvdXQgY2hhbmdpbmcgd2hhdCB0aGV5J3JlIGNvdW50aW5nOgorCisgICAgICBlY2hvICdyZXNldCcgPiAvcHJvYy9wcGNfaHRhYgorCisgICAgIE5vdGUgdGhhdCBjb3VudGluZyB3aWxsIGNvbnRpbnVlIGFmdGVyIHRoZSByZXNldCBpZiBpdCBpcyBlbmFibGVkLgorCisgICAtIFRvIGNvdW50IG9ubHkgZXZlbnRzIGluIHVzZXIgbW9kZSBvciBvbmx5IGluIGtlcm5lbCBtb2RlOgorCisgICAgICBlY2hvICd1c2VyJyA+IC9wcm9jL3BwY19odGFiCisgICAgICAgLi4ub3IuLi4KKyAgICAgIGVjaG8gJ2tlcm5lbCcgPiAvcHJvYy9wcGNfaHRhYgorCisgICAgIE5vdGUgdGhhdCB0aGVzZSB0d28gb3B0aW9ucyBhcmUgZXhjbHVzaXZlIG9mIG9uZSBhbm90aGVyIGFuZCB0aGUKKyAgICAgbGFjayBvZiBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBjb3VudHMgdXNlciBhbmQga2VybmVsLgorICAgICBVc2luZyAncmVzZXQnIGFuZCAnb2ZmJyByZXNldCB0aGVzZSBmbGFncy4KKworICAgLSBUaGUgNjA0IGhhcyAyIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHdoaWNoIGNhbiBlYWNoIGNvdW50IGV2ZW50cyBmcm9tCisgICAgIGEgc3BlY2lmaWMgc2V0IG9mIGV2ZW50cy4gIFRoZXNlIHNldHMgYXJlIGRpc2pvaW50IHNvIGl0IGlzIG5vdAorICAgICBwb3NzaWJsZSB0byBjb3VudCBfYW55XyBjb21iaW5hdGlvbiBvZiAyIGV2ZW50cy4gIE9uZSBldmVudCBjYW4KKyAgICAgYmUgY291bnRlZCBieSBQTUMxIGFuZCBvbmUgYnkgUE1DMi4KKworICAgICBUbyBzdGFydCBjb3VudGluZyBhIHBhcnRpY3VsYXIgZXZlbnQgdXNlOgorCisgICAgICBlY2hvICdldmVudCcgPiAvcHJvYy9wcGNfaHRhYgorCisgICAgIGFuZCBjaG9vc2UgZnJvbSB0aGVzZSBldmVudHM6CisKKyAgICAgUE1DMQorICAgICAtLS0tCisgICAgICAnaWMgbWlzcycgLSBpbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMKKyAgICAgICdkdGxiJyAtIGRhdGEgdGxiIG1pc3NlcyAobm90IGhhc2ggdGFibGUgbWlzc2VzKQorCisgICAgIFBNQzIKKyAgICAgLS0tLQorICAgICAgJ2RjIG1pc3MnIC0gZGF0YSBjYWNoZSBtaXNzZXMKKyAgICAgICdpdGxiJyAtIGluc3RydWN0aW9uIHRsYiBtaXNzZXMgKG5vdCBoYXNoIHRhYmxlIG1pc3NlcykKKyAgICAgICdsb2FkIG1pc3MgdGltZScgLSBjeWNsZXMgdG8gY29tcGxldGUgYSBsb2FkIG1pc3MKKworMy4gQnVncworCisgIFRoZSBQTUMxIGFuZCBQTUMyIGNvdW50ZXJzIGNhbiBvdmVyZmxvdyBhbmQgZ2l2ZSBubyBpbmRpY2F0aW9uIG9mIHRoYXQKKyAgaW4gL3Byb2MvcHBjX2h0YWIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvc21wLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9zbXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNTgxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvc21wLnR4dApAQCAtMCwwICsxLDM0IEBACisgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IExpbnV4L1BQQyBTTVAgbW9kZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgYW5kIHRoZSByZWxhdGVkIGNvZGUgd2FzIHdyaXR0ZW4gYnkgbWUKKyhDb3J0IERvdWdhbiwgY29ydEBmc21sYWJzLmNvbSkgcGxlYXNlIGVtYWlsIG1lIGlmIHlvdSBoYXZlIHF1ZXN0aW9ucywKK2NvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgorCitMYXN0IENoYW5nZTogMy4zMS45OQorCitJZiB5b3Ugd2FudCB0byBoZWxwIGJ5IHdyaXRpbmcgY29kZSBvciB0ZXN0aW5nIGRpZmZlcmVudCBoYXJkd2FyZSBwbGVhc2UKK2VtYWlsIG1lIQorCisxLiBTdGF0ZSBvZiBTdXBwb3J0ZWQgSGFyZHdhcmUKKworICBQb3dlclN1cmdlIEFyY2hpdGVjdHVyZSAtIHRlc3RlZCBvbiBVTUFYIHM5MDAsIEFwcGxlIDk2MDAKKyAgICBUaGUgc2Vjb25kIHByb2Nlc3NvciBvbiB0aGlzIG1hY2hpbmUgYm9vdHMgdXAganVzdCBmaW5lIGFuZAorICAgIGVudGVycyBpdHMgaWRsZSBsb29wLiAgSG9wZWZ1bGx5IGEgY29tcGxldGVseSB3b3JraW5nIFNNUCBrZXJuZWwKKyAgICBvbiB0aGlzIG1hY2hpbmUgd2lsbCBiZSBkb25lIHNob3J0bHkuCisKKyAgICBUaGUgY29kZSBtYWtlcyB0aGUgYXNzdW1wdGlvbiBvZiBvbmx5IHR3byBwcm9jZXNzb3JzLiAgVGhlIGNoYW5nZXMKKyAgICBuZWNlc3NhcnkgdG8gd29yayB3aXRoIGFueSBudW1iZXIgd291bGQgbm90IGJlIG92ZXJseSBkaWZmaWN1bHQgYnV0CisgICAgSSBkb24ndCBoYXZlIGFueSBtYWNoaW5lcyB3aXRoID4yIHByb2Nlc3NvcnMgc28gaXQncyBub3QgaGlnaCBvbiBteQorICAgIGxpc3Qgb2YgcHJpb3JpdGllcy4gIElmIGFueW9uZSBlbHNlIHdvdWxkIGxpa2UgZG8gdG8gdGhlIHdvcmsgZW1haWwKKyAgICBtZSBhbmQgSSBjYW4gcG9pbnQgb3V0IHRoZSBwbGFjZXMgdGhhdCBuZWVkIGNoYW5nZWQuICBJZiB5b3UgaGF2ZSA+MgorICAgIHByb2Nlc3NvcnMgYW5kIGRvbid0IHdhbnQgdG8gYWRkIHN1cHBvcnQgeW91cnNlbGYgbGV0IG1lIGtub3cgYW5kIEkKKyAgICBjYW4gdGFrZSBhIGxvb2sgaW50byBpdC4KKworICBCZUJveAorICAgIEJlQm94IHN1cHBvcnQgaGFzbid0IGJlZW4gYWRkZWQgdG8gdGhlIDIuMS5YIGtlcm5lbHMgZnJvbSAyLjAuWAorICAgIGJ1dCB3b3JrIGlzIGJlaW5nIGRvbmUgYW5kIFNNUCBzdXBwb3J0IGZvciBCZUJveCBpcyBpbiB0aGUgd29ya3MuCisKKyAgQ0hSUAorICAgIENIUlAgU01QIHdvcmtzIGFuZCBpcyBmYWlybHkgc29saWQuICBJdCdzIGJlZW4gdGVzdGVkIG9uIHRoZSBJQk0gRjUwCisgICAgd2l0aCA0IHByb2Nlc3NvcnMgZm9yIHF1aXRlIHNvbWUgdGltZSBub3cuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvc291bmQudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3NvdW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjIzZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3NvdW5kLnR4dApAQCAtMCwwICsxLDgxIEBACisgICAgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBQb3dlclBDIFNvdW5kIHN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgbWFpbCBtZSAoQ29ydCBEb3VnYW4sIGNvcnRAZnNtbGFicy5jb20pIGlmIHlvdSBoYXZlIHF1ZXN0aW9ucywKK2NvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgorCitMYXN0IENoYW5nZTogNi4xNi45OQorCitUaGlzIGp1c3QgY292ZXJzIHNvdW5kIG9uIHRoZSBQUmVQIGFuZCBDSFJQIHN5c3RlbXMgZm9yIG5vdyBhbmQgbGF0ZXIKK3dpbGwgY29udGFpbiBpbmZvcm1hdGlvbiBvbiB0aGUgUG93ZXJNYWMncy4KKworU291bmQgb24gUFJlUCBoYXMgYmVlbiB0ZXN0ZWQgYW5kIGlzIHdvcmtpbmcgd2l0aCB0aGUgUG93ZXJTdGFjayBhbmQgSUJNCitQb3dlciBTZXJpZXMgb25ib2FyZCBzb3VuZCBzeXN0ZW1zIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgY3M0MjMxKDIpIGNoaXAuCitUaGUgc291bmQgb3B0aW9ucyB3aGVuIGRvaW5nIHRoZSBtYWtlIGNvbmZpZyBhcmUgYSBiaXQgZGlmZmVyZW50IGZyb20KK3RoZSBkZWZhdWx0LCB0aG91Z2guCisKK1RoZSBJL08gYmFzZSwgaXJxIGFuZCBkbWEgbGluZXMgdGhhdCB5b3UgZW50ZXIgZHVyaW5nIHRoZSBtYWtlIGNvbmZpZworYXJlIGlnbm9yZWQgYW5kIGFyZSBzZXQgd2hlbiBib290aW5nIGFjY29yZGluZyB0byB0aGUgbWFjaGluZSB0eXBlLgorVGhpcyBpcyBzbyB0aGF0IG9uZSBiaW5hcnkgY2FuIGJlIHVzZWQgZm9yIE1vdG9yb2xhIGFuZCBJQk0gbWFjaGluZXMKK3doaWNoIHVzZSBkaWZmZXJlbnQgdmFsdWVzIGFuZCBpc24ndCBhbGxvd2VkIGJ5IHRoZSBkcml2ZXIsIHNvIHRoaW5ncworYXJlIGhhY2tlZCB0b2dldGhlciBpbiBzdWNoIGEgd2F5IGFzIHRvIGFsbG93IHRoaXMgaW5mb3JtYXRpb24gdG8gYmUKK3NldCBhdXRvbWF0aWNhbGx5IG9uIGJvb3QuCisKKzEuIE1vdG9yb2xhIFBvd2VyU3RhY2sgUFJlUCBtYWNoaW5lcworCisgIEVuYWJsZSBzdXBwb3J0IGZvciAiQ3J5c3RhbCBDUzQyMzIgYmFzZWQgKFBuUCkgY2FyZHMiIGFuZCBmb3IgdGhlCisgIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0uICBUaGUgTVNTIGlzbid0IHVzZWQsIGJ1dCBzb21lIG9mIHRoZSByb3V0aW5lcworICB0aGF0IHRoZSBDUzQyMzIgZHJpdmVyIHVzZXMgYXJlIGluIGl0LgorCisgIEFsdGhvdWdoIHRoZSBvcHRpb25zIHlvdSBzZXQgYXJlIGlnbm9yZWQgYW5kIGRldGVybWluZWQgYXV0b21hdGljYWxseQorICBvbiBib290IHRoZXNlIGFyZSBpbmNsdWRlZCBmb3IgaW5mb3JtYXRpb24gb25seToKKworICAoODMwKSBDUzQyMzIgYXVkaW8gSS9PIGJhc2UgNTMwLCA2MDQsIEU4MCBvciBGNDAKKyAgKDEwKSBDUzQyMzIgYXVkaW8gSVJRIDUsIDcsIDksIDExLCAxMiBvciAxNQorICAoNikgQ1M0MjMyIGF1ZGlvIERNQSAwLCAxIG9yIDMKKyAgKDcpIENTNDIzMiBzZWNvbmQgKGR1cGxleCkgRE1BIDAsIDEgb3IgMworCisgIFRoaXMgd2lsbCBhbGxvdyBzaW11bHRhbmVvdXMgcmVjb3JkIGFuZCBwbGF5YmFjaywgYXMgMiBkaWZmZXJlbnQgZG1hCisgIGNoYW5uZWxzIGFyZSB1c2VkLgorCisgIFRoZSBzb3VuZCB3aWxsIGJlIGFsbCBsZWZ0IGNoYW5uZWwgYW5kIHZlcnkgbG93IHZvbHVtZSBzaW5jZSB0aGUKKyAgYXV4aWxpYXJ5IGlucHV0IGlzbid0IG11dGVkIGJ5IGRlZmF1bHQuICBJIGhhZCB0aGUgY2hhbmdlcyBuZWNlc3NhcnkKKyAgZm9yIHRoaXMgaW4gdGhlIGtlcm5lbCBidXQgdGhlIHNvdW5kIGRyaXZlciBtYWludGFpbmVyIGRpZG4ndCB3YW50CisgIHRvIGluY2x1ZGUgdGhlbSBzaW5jZSBpdCB3YXNuJ3QgY29tbW9uIGluIG90aGVyIG1hY2hpbmVzLiAgVG8gZml4IHRoaXMKKyAgeW91IG5lZWQgdG8gbXV0ZSBpdCB1c2luZyBhIG1peGVyIHV0aWxpdHkgb2Ygc29tZSBzb3J0IChpZiB5b3UgZmluZCBvbmUKKyAgcGxlYXNlIGxldCBtZSBrbm93KSBvciBieSBwYXRjaGluZyB0aGUgZHJpdmVyIHlvdXJzZWxmIGFuZCByZWNvbXBpbGluZy4KKworICBUaGVyZSBpcyBhIHByb2JsZW0gb24gdGhlIFBvd2VyU3RhY2sgMidzIChQb3dlclN0YWNrIFBybydzKSB1c2luZyBhCisgIGRpZmZlcmVudCBpcnEvZHJxIHRoYW4gdGhlIGtlcm5lbCBleHBlY3RzLiAgVW5mb3J0dW5hdGVseSwgSSBkb24ndCBrbm93CisgIHdoaWNoIGlycS9kcnEgaXQgaXMgc28gaWYgYW55b25lIGtub3dzIHBsZWFzZSBlbWFpbCBtZS4KKworICBNaWRpIGlzIG5vdCBzdXBwb3J0ZWQgc2luY2UgdGhlIGNzNDIzMiBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IG1pZGkgeWV0LgorCisyLiBJQk0gUG93ZXJQZXJzb25hbCBQUmVQIG1hY2hpbmVzCisKKyAgSSd2ZSBvbmx5IHRlc3RlZCBzb3VuZCBvbiB0aGUgUG93ZXIgUGVyc29uYWwgU2VyaWVzIG9mIElCTSB3b3Jrc3RhdGlvbnMKKyAgc28gaWYgeW91IHRyeSBpdCBvbiBvdGhlcnMgcGxlYXNlIGxldCBtZSBrbm93IHRoZSByZXN1bHQuICBJJ20gZXNwZWNpYWxseQorICBpbnRlcmVzdGVkIGluIHRoZSA0M3AncyBzb3VuZCBzeXN0ZW0sIHdoaWNoIEkga25vdyBub3RoaW5nIGFib3V0LgorCisgIEVuYWJsZSBzdXBwb3J0IGZvciAiQ3J5c3RhbCBDUzQyMzIgYmFzZWQgKFBuUCkgY2FyZHMiIGFuZCBmb3IgdGhlCisgIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0uICBUaGUgTVNTIGlzbid0IHVzZWQsIGJ1dCBzb21lIG9mIHRoZSByb3V0aW5lcworICB0aGF0IHRoZSBDUzQyMzIgZHJpdmVyIHVzZXMgYXJlIGluIGl0LgorCisgIEFsdGhvdWdoIHRoZSBvcHRpb25zIHlvdSBzZXQgYXJlIGlnbm9yZWQgYW5kIGRldGVybWluZWQgYXV0b21hdGljYWxseQorICBvbiBib290IHRoZXNlIGFyZSBpbmNsdWRlZCBmb3IgaW5mb3JtYXRpb24gb25seToKKworICAoNTMwKSBDUzQyMzIgYXVkaW8gSS9PIGJhc2UgNTMwLCA2MDQsIEU4MCBvciBGNDAKKyAgKDUpIENTNDIzMiBhdWRpbyBJUlEgNSwgNywgOSwgMTEsIDEyIG9yIDE1CisgICgxKSBDUzQyMzIgYXVkaW8gRE1BIDAsIDEgb3IgMworICAoNykgQ1M0MjMyIHNlY29uZCAoZHVwbGV4KSBETUEgMCwgMSBvciAzCisgICgzMzApIENTNDIzMiBNSURJIEkvTyBiYXNlIDMzMCwgMzcwLCAzQjAgb3IgM0YwCisgICg5KSBDUzQyMzIgTUlESSBJUlEgNSwgNywgOSwgMTEsIDEyIG9yIDE1CisKKyAgVGhpcyBzZXR1cCBkb2VzIF9OT1RfIGFsbG93IGZvciByZWNvcmRpbmcgeWV0LgorCisgIE1pZGkgaXMgbm90IHN1cHBvcnRlZCBzaW5jZSB0aGUgY3M0MjMyIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgbWlkaSB5ZXQuCisKKzIuIElCTSBDSFJQCisKKyAgSSBoYXZlIG9ubHkgdGVzdGVkIHRoaXMgb24gdGhlIDQzUC0xNTAuICBCdWlsZCB0aGUga2VybmVsIHdpdGggdGhlIGNzNDIzMgorICBzZXQgYXMgYSBtb2R1bGUgYW5kIGxvYWQgdGhlIG1vZHVsZSB3aXRoIGlycT05IGRtYT0xIGRtYTI9MiBpbz0weDU1MApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3pJbWFnZV9sYXlvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3pJbWFnZV9sYXlvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OGUwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvekltYWdlX2xheW91dC50eHQKQEAgLTAsMCArMSw0NyBAQAorICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHRoZSBMaW51eC9QUEMga2VybmVsIGltYWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BsZWFzZSBtYWlsIG1lIChDb3J0IERvdWdhbiwgY29ydEBmc21sYWJzLmNvbSkgaWYgeW91IGhhdmUgcXVlc3Rpb25zLAorY29tbWVudHMgb3IgY29ycmVjdGlvbnMuCisKK1RoaXMgZG9jdW1lbnQgaXMgbWVhbnQgdG8gYW5zd2VyIHNldmVyYWwgcXVlc3Rpb25zIEkndmUgaGFkIGFib3V0IGhvdwordGhlIFBSZVAgc3lzdGVtIGJvb3RzIGFuZCBob3cgTGludXgvUFBDIGludGVyYWN0cyB3aXRoIHRoYXQgbWVjaGFuaXNtLgorSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBoYXZlIGluZm9ybWF0aW9uIG9uIGhvdyBvdGhlciBhcmNoaXRlY3R1cmVzCitib290IGhlcmUgYXMgd2VsbC4gIElmIHlvdSBoYXZlIGFueXRoaW5nIHRvIGNvbnRyaWJ1dGUsIHBsZWFzZQorbGV0IG1lIGtub3cuCisKKworMS4gUFJlUCBib290IGZpbGUKKworICBUaGlzIGlzIHRoZSBmaWxlIG5lY2Vzc2FyeSB0byBib290IFBSZVAgc3lzdGVtcyBmcm9tIGZsb3BweSBvcgorICBoYXJkIGRyaXZlLiAgVGhlIGZpcm13YXJlIHJlYWRzIHRoZSBQUmVQIHBhcnRpdGlvbiB0YWJsZSBlbnRyeQorICBhbmQgd2lsbCBsb2FkIHRoZSBpbWFnZSBhY2NvcmRpbmdseS4KKworICBUbyBib290IHRoZSB6SW1hZ2UsIGNvcHkgaXQgb250byBhIGZsb3BweSB3aXRoIGRkIGlmPXpJbWFnZSBvZj0vZGV2L2ZkMGgxNDQwCisgIG9yIG9udG8gYSBQUmVQIGhhcmQgZHJpdmUgcGFydGl0aW9uIHdpdGggZGQgaWY9ekltYWdlIG9mPS9kZXYvc2RhNAorICBhc3N1bWluZyB5b3UndmUgY3JlYXRlZCBhIFBSZVAgcGFydGl0aW9uICh0eXBlIDB4NDEpIHdpdGggZmRpc2sgb24KKyAgL2Rldi9zZGE0LgorCisgIFRoZSBsYXlvdXQgb2YgdGhlIGltYWdlIGZvcm1hdCBpczoKKworICAweDAgICAgICstLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgICAgICAgIHwgUFJlUCBwYXJ0aXRpb24gdGFibGUgZW50cnkKKyAgICAgICAgICB8ICAgICAgICAgICAgfAorICAweDQwMCAgICstLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgICAgICAgIHwgQm9vdHN0cmFwIHByb2dyYW0gY29kZSArIGRhdGEKKyAgICAgICAgICB8ICAgICAgICAgICAgfAorICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgICAgfCBjb21wcmVzc2VkIGtlcm5lbCwgZWxmIGhlYWRlciByZW1vdmVkCisgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgICAgfCBpbml0cmQgKGlmIGxvYWRlZCkKKyAgICAgICAgICArLS0tLS0tLS0tLS0tKworICAgICAgICAgIHwgICAgICAgICAgICB8IEVsZiBzZWN0aW9uIHRhYmxlIGZvciBib290c3RyYXAgcHJvZ3JhbQorICAgICAgICAgICstLS0tLS0tLS0tLS0rCisKKworMi4gTUJYIGJvb3QgZmlsZQorCisgIFRoZSBNQlggYm9hcmRzIGNhbiBsb2FkIGFuIGVsZiBpbWFnZSwgYW5kIHJlbG9jYXRlIGl0IHRvIHRoZQorICBwcm9wZXIgbG9jYXRpb24gaW4gbWVtb3J5IC0gaXQgY29waWVzIHRoZSBpbWFnZSB0byB0aGUgbG9jYXRpb24gaXQgd2FzCisgIGxpbmtlZCBhdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJlZW1wdC1sb2NraW5nLnR4dCBiL0RvY3VtZW50YXRpb24vcHJlZW1wdC1sb2NraW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzg4M2NhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmVlbXB0LWxvY2tpbmcudHh0CkBAIC0wLDAgKzEsMTM1IEBACisJCSAgUHJvcGVyIExvY2tpbmcgVW5kZXIgYSBQcmVlbXB0aWJsZSBLZXJuZWw6CisJCSAgICAgICBLZWVwaW5nIEtlcm5lbCBDb2RlIFByZWVtcHQtU2FmZQorCQkJIFJvYmVydCBMb3ZlIDxybWxAdGVjaDkubmV0PgorCQkJICBMYXN0IFVwZGF0ZWQ6IDI4IEF1ZyAyMDAyCisKKworSU5UUk9EVUNUSU9OCisKKworQSBwcmVlbXB0aWJsZSBrZXJuZWwgY3JlYXRlcyBuZXcgbG9ja2luZyBpc3N1ZXMuICBUaGUgaXNzdWVzIGFyZSB0aGUgc2FtZSBhcwordGhvc2UgdW5kZXIgU01QOiBjb25jdXJyZW5jeSBhbmQgcmVlbnRyYW5jeS4gIFRoYW5rZnVsbHksIHRoZSBMaW51eCBwcmVlbXB0aWJsZQora2VybmVsIG1vZGVsIGxldmVyYWdlcyBleGlzdGluZyBTTVAgbG9ja2luZyBtZWNoYW5pc21zLiAgVGh1cywgdGhlIGtlcm5lbAorcmVxdWlyZXMgZXhwbGljaXQgYWRkaXRpb25hbCBsb2NraW5nIGZvciB2ZXJ5IGZldyBhZGRpdGlvbmFsIHNpdHVhdGlvbnMuCisKK1RoaXMgZG9jdW1lbnQgaXMgZm9yIGFsbCBrZXJuZWwgaGFja2Vycy4gIERldmVsb3BpbmcgY29kZSBpbiB0aGUga2VybmVsCityZXF1aXJlcyBwcm90ZWN0aW5nIHRoZXNlIHNpdHVhdGlvbnMuCisgCisKK1JVTEUgIzE6IFBlci1DUFUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWQgZXhwbGljaXQgcHJvdGVjdGlvbgorCisKK1R3byBzaW1pbGFyIHByb2JsZW1zIGFyaXNlLiBBbiBleGFtcGxlIGNvZGUgc25pcHBldDoKKworCXN0cnVjdCB0aGlzX25lZWRzX2xvY2tpbmcgdHV4W05SX0NQVVNdOworCXR1eFtzbXBfcHJvY2Vzc29yX2lkKCldID0gc29tZV92YWx1ZTsKKwkvKiB0YXNrIGlzIHByZWVtcHRlZCBoZXJlLi4uICovCisJc29tZXRoaW5nID0gdHV4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisKK0ZpcnN0LCBzaW5jZSB0aGUgZGF0YSBpcyBwZXItQ1BVLCBpdCBtYXkgbm90IGhhdmUgZXhwbGljaXQgU01QIGxvY2tpbmcsIGJ1dAorcmVxdWlyZSBpdCBvdGhlcndpc2UuICBTZWNvbmQsIHdoZW4gYSBwcmVlbXB0ZWQgdGFzayBpcyBmaW5hbGx5IHJlc2NoZWR1bGVkLAordGhlIHByZXZpb3VzIHZhbHVlIG9mIHNtcF9wcm9jZXNzb3JfaWQgbWF5IG5vdCBlcXVhbCB0aGUgY3VycmVudC4gIFlvdSBtdXN0Citwcm90ZWN0IHRoZXNlIHNpdHVhdGlvbnMgYnkgZGlzYWJsaW5nIHByZWVtcHRpb24gYXJvdW5kIHRoZW0uCisKK1lvdSBjYW4gYWxzbyB1c2UgcHV0X2NwdSgpIGFuZCBnZXRfY3B1KCksIHdoaWNoIHdpbGwgZGlzYWJsZSBwcmVlbXB0aW9uLgorCisKK1JVTEUgIzI6IENQVSBzdGF0ZSBtdXN0IGJlIHByb3RlY3RlZC4KKworCitVbmRlciBwcmVlbXB0aW9uLCB0aGUgc3RhdGUgb2YgdGhlIENQVSBtdXN0IGJlIHByb3RlY3RlZC4gIFRoaXMgaXMgYXJjaC0KK2RlcGVuZGVudCwgYnV0IGluY2x1ZGVzIENQVSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZSBub3QgcHJlc2VydmVkIG92ZXIgYSBjb250ZXh0Citzd2l0Y2guICBGb3IgZXhhbXBsZSwgb24geDg2LCBlbnRlcmluZyBhbmQgZXhpdGluZyBGUFUgbW9kZSBpcyBub3cgYSBjcml0aWNhbAorc2VjdGlvbiB0aGF0IG11c3Qgb2NjdXIgd2hpbGUgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZC4gIFRoaW5rIHdoYXQgd291bGQgaGFwcGVuCitpZiB0aGUga2VybmVsIGlzIGV4ZWN1dGluZyBhIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uIGFuZCBpcyB0aGVuIHByZWVtcHRlZC4KK1JlbWVtYmVyLCB0aGUga2VybmVsIGRvZXMgbm90IHNhdmUgRlBVIHN0YXRlIGV4Y2VwdCBmb3IgdXNlciB0YXNrcy4gIFRoZXJlZm9yZSwKK3Vwb24gcHJlZW1wdGlvbiwgdGhlIEZQVSByZWdpc3RlcnMgd2lsbCBiZSBzb2xkIHRvIHRoZSBsb3dlc3QgYmlkZGVyLiAgVGh1cywKK3ByZWVtcHRpb24gbXVzdCBiZSBkaXNhYmxlZCBhcm91bmQgc3VjaCByZWdpb25zLgorCitOb3RlLCBzb21lIEZQVSBmdW5jdGlvbnMgYXJlIGFscmVhZHkgZXhwbGljaXRseSBwcmVlbXB0IHNhZmUuICBGb3IgZXhhbXBsZSwKK2tlcm5lbF9mcHVfYmVnaW4gYW5kIGtlcm5lbF9mcHVfZW5kIHdpbGwgZGlzYWJsZSBhbmQgZW5hYmxlIHByZWVtcHRpb24uCitIb3dldmVyLCBtYXRoX3N0YXRlX3Jlc3RvcmUgbXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLgorCisKK1JVTEUgIzM6IExvY2sgYWNxdWlyZSBhbmQgcmVsZWFzZSBtdXN0IGJlIHBlcmZvcm1lZCBieSBzYW1lIHRhc2sKKworCitBIGxvY2sgYWNxdWlyZWQgaW4gb25lIHRhc2sgbXVzdCBiZSByZWxlYXNlZCBieSB0aGUgc2FtZSB0YXNrLiAgVGhpcworbWVhbnMgeW91IGNhbid0IGRvIG9kZGJhbGwgdGhpbmdzIGxpa2UgYWNxdWlyZSBhIGxvY2sgYW5kIGdvIG9mZiB0bworcGxheSB3aGlsZSBhbm90aGVyIHRhc2sgcmVsZWFzZXMgaXQuICBJZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcKK2xpa2UgdGhpcywgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgdGFzayBpbiB0aGUgc2FtZSBjb2RlIHBhdGggYW5kCitoYXZlIHRoZSBjYWxsZXIgd2FpdCBvbiBhbiBldmVudCBieSB0aGUgb3RoZXIgdGFzay4KKworCitTT0xVVElPTgorCisKK0RhdGEgcHJvdGVjdGlvbiB1bmRlciBwcmVlbXB0aW9uIGlzIGFjaGlldmVkIGJ5IGRpc2FibGluZyBwcmVlbXB0aW9uIGZvciB0aGUKK2R1cmF0aW9uIG9mIHRoZSBjcml0aWNhbCByZWdpb24uCisKK3ByZWVtcHRfZW5hYmxlKCkJCWRlY3JlbWVudCB0aGUgcHJlZW1wdCBjb3VudGVyCitwcmVlbXB0X2Rpc2FibGUoKQkJaW5jcmVtZW50IHRoZSBwcmVlbXB0IGNvdW50ZXIKK3ByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKQlkZWNyZW1lbnQsIGJ1dCBkbyBub3QgaW1tZWRpYXRlbHkgcHJlZW1wdAorcHJlZW1wdF9jaGVja19yZXNjaGVkKCkJCWlmIG5lZWRlZCwgcmVzY2hlZHVsZQorcHJlZW1wdF9jb3VudCgpCQkJcmV0dXJuIHRoZSBwcmVlbXB0IGNvdW50ZXIKKworVGhlIGZ1bmN0aW9ucyBhcmUgbmVzdGFibGUuICBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBjYWxsIHByZWVtcHRfZGlzYWJsZQorbi10aW1lcyBpbiBhIGNvZGUgcGF0aCwgYW5kIHByZWVtcHRpb24gd2lsbCBub3QgYmUgcmVlbmFibGVkIHVudGlsIHRoZSBuLXRoCitjYWxsIHRvIHByZWVtcHRfZW5hYmxlLiAgVGhlIHByZWVtcHQgc3RhdGVtZW50cyBkZWZpbmUgdG8gbm90aGluZyBpZgorcHJlZW1wdGlvbiBpcyBub3QgZW5hYmxlZC4KKworTm90ZSB0aGF0IHlvdSBkbyBub3QgbmVlZCB0byBleHBsaWNpdGx5IHByZXZlbnQgcHJlZW1wdGlvbiBpZiB5b3UgYXJlIGhvbGRpbmcKK2FueSBsb2NrcyBvciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc2luY2UgcHJlZW1wdGlvbiBpcyBpbXBsaWNpdGx5IGRpc2FibGVkCitpbiB0aG9zZSBjYXNlcy4KKworQnV0IGtlZXAgaW4gbWluZCB0aGF0ICdpcnFzIGRpc2FibGVkJyBpcyBhIGZ1bmRhbWVudGFsbHkgdW5zYWZlIHdheSBvZgorZGlzYWJsaW5nIHByZWVtcHRpb24gLSBhbnkgc3Bpbl91bmxvY2soKSBkZWNyZWFzaW5nIHRoZSBwcmVlbXB0aW9uIGNvdW50Cit0byAwIG1pZ2h0IHRyaWdnZXIgYSByZXNjaGVkdWxlLiBBIHNpbXBsZSBwcmludGsoKSBtaWdodCB0cmlnZ2VyIGEgcmVzY2hlZHVsZS4KK1NvIHVzZSB0aGlzIGltcGxpY2l0IHByZWVtcHRpb24tZGlzYWJsaW5nIHByb3BlcnR5IG9ubHkgaWYgeW91IGtub3cgdGhhdCB0aGUKK2FmZmVjdGVkIGNvZGVwYXRoIGRvZXMgbm90IGRvIGFueSBvZiB0aGlzLiBCZXN0IHBvbGljeSBpcyB0byB1c2UgdGhpcyBvbmx5IGZvcgorc21hbGwsIGF0b21pYyBjb2RlIHRoYXQgeW91IHdyb3RlIGFuZCB3aGljaCBjYWxscyBubyBjb21wbGV4IGZ1bmN0aW9ucy4KKworRXhhbXBsZToKKworCWNwdWNhY2hlX3QgKmNjOyAvKiB0aGlzIGlzIHBlci1DUFUgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwljYyA9IGNjX2RhdGEoc2VhcmNocCk7CisJaWYgKGNjICYmIGNjLT5hdmFpbCkgeworCQlfX2ZyZWVfYmxvY2soc2VhcmNocCwgY2NfZW50cnkoY2MpLCBjYy0+YXZhaWwpOworCQljYy0+YXZhaWwgPSAwOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOworCitOb3RpY2UgaG93IHRoZSBwcmVlbXB0aW9uIHN0YXRlbWVudHMgbXVzdCBlbmNvbXBhc3MgZXZlcnkgcmVmZXJlbmNlIG9mIHRoZQorY3JpdGljYWwgdmFyaWFibGVzLiAgQW5vdGhlciBleGFtcGxlOgorCisJaW50IGJ1ZltOUl9DUFVTXTsKKwlzZXRfY3B1X3ZhbChidWYpOworCWlmIChidWZbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9PSAtMSkgcHJpbnRmKEtFUk5fSU5GTyAid2VlIVxuIik7CisJc3Bpbl9sb2NrKCZidWZfbG9jayk7CisJLyogLi4uICovCisKK1RoaXMgY29kZSBpcyBub3QgcHJlZW1wdC1zYWZlLCBidXQgc2VlIGhvdyBlYXNpbHkgd2UgY2FuIGZpeCBpdCBieSBzaW1wbHkKK21vdmluZyB0aGUgc3Bpbl9sb2NrIHVwIHR3byBsaW5lcy4KKworCitQUkVWRU5USU5HIFBSRUVNUFRJT04gVVNJTkcgSU5URVJSVVBUIERJU0FCTElORworCisKK0l0IGlzIHBvc3NpYmxlIHRvIHByZXZlbnQgYSBwcmVlbXB0aW9uIGV2ZW50IHVzaW5nIGxvY2FsX2lycV9kaXNhYmxlIGFuZAorbG9jYWxfaXJxX3NhdmUuICBOb3RlLCB3aGVuIGRvaW5nIHNvLCB5b3UgbXVzdCBiZSB2ZXJ5IGNhcmVmdWwgdG8gbm90IGNhdXNlCithbiBldmVudCB0aGF0IHdvdWxkIHNldCBuZWVkX3Jlc2NoZWQgYW5kIHJlc3VsdCBpbiBhIHByZWVtcHRpb24gY2hlY2suICBXaGVuCitpbiBkb3VidCwgcmVseSBvbiBsb2NraW5nIG9yIGV4cGxpY2l0IHByZWVtcHRpb24gZGlzYWJsaW5nLgorCitOb3RlIGluIDIuNSBpbnRlcnJ1cHQgZGlzYWJsaW5nIGlzIG5vdyBvbmx5IHBlci1DUFUgKGUuZy4gbG9jYWwpLgorCitBbiBhZGRpdGlvbmFsIGNvbmNlcm4gaXMgcHJvcGVyIHVzYWdlIG9mIGxvY2FsX2lycV9kaXNhYmxlIGFuZCBsb2NhbF9pcnFfc2F2ZS4KK1RoZXNlIG1heSBiZSB1c2VkIHRvIHByb3RlY3QgZnJvbSBwcmVlbXB0aW9uLCBob3dldmVyLCBvbiBleGl0LCBpZiBwcmVlbXB0aW9uCittYXkgYmUgZW5hYmxlZCwgYSB0ZXN0IHRvIHNlZSBpZiBwcmVlbXB0aW9uIGlzIHJlcXVpcmVkIHNob3VsZCBiZSBkb25lLiAgSWYKK3RoZXNlIGFyZSBjYWxsZWQgZnJvbSB0aGUgc3Bpbl9sb2NrIGFuZCByZWFkL3dyaXRlIGxvY2sgbWFjcm9zLCB0aGUgcmlnaHQgdGhpbmcKK2lzIGRvbmUuICBUaGV5IG1heSBhbHNvIGJlIGNhbGxlZCB3aXRoaW4gYSBzcGluLWxvY2sgcHJvdGVjdGVkIHJlZ2lvbiwgaG93ZXZlciwKK2lmIHRoZXkgYXJlIGV2ZXIgY2FsbGVkIG91dHNpZGUgb2YgdGhpcyBjb250ZXh0LCBhIHRlc3QgZm9yIHByZWVtcHRpb24gc2hvdWxkCitiZSBtYWRlLiBEbyBub3RlIHRoYXQgY2FsbHMgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBvciBib3R0b20gaGFsZi8gdGFza2xldHMKK2FyZSBhbHNvIHByb3RlY3RlZCBieSBwcmVlbXB0aW9uIGxvY2tzIGFuZCBzbyBtYXkgdXNlIHRoZSB2ZXJzaW9ucyB3aGljaCBkbworbm90IGNoZWNrIHByZWVtcHRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ByaW9fdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ByaW9fdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiYjBjNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcHJpb190cmVlLnR4dApAQCAtMCwwICsxLDEwNyBAQAorVGhlIHByaW9fdHJlZS5jIGNvZGUgaW5kZXhlcyB2bWFzIHVzaW5nIDMgZGlmZmVyZW50IGluZGV4ZXM6CisJKiBoZWFwX2luZGV4ICA9IHZtX3Bnb2ZmICsgdm1fc2l6ZV9pbl9wYWdlcyA6IGVuZF92bV9wZ29mZgorCSogcmFkaXhfaW5kZXggPSB2bV9wZ29mZiA6IHN0YXJ0X3ZtX3Bnb2ZmCisJKiBzaXplX2luZGV4ID0gdm1fc2l6ZV9pbl9wYWdlcworCitBIHJlZ3VsYXIgcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUgaW5kZXhlcyB2bWFzIHVzaW5nIG9ubHkgaGVhcF9pbmRleCBhbmQKK3JhZGl4X2luZGV4LiBUaGUgY29uZGl0aW9ucyBmb3IgaW5kZXhpbmcgYXJlOgorCSogLT5oZWFwX2luZGV4ID49IC0+bGVmdC0+aGVhcF9pbmRleCAmJgorCQktPmhlYXBfaW5kZXggPj0gLT5yaWdodC0+aGVhcF9pbmRleAorCSogaWYgKC0+aGVhcF9pbmRleCA9PSAtPmxlZnQtPmhlYXBfaW5kZXgpCisJCXRoZW4gLT5yYWRpeF9pbmRleCA8IC0+bGVmdC0+cmFkaXhfaW5kZXg7CisJKiBpZiAoLT5oZWFwX2luZGV4ID09IC0+cmlnaHQtPmhlYXBfaW5kZXgpCisJCXRoZW4gLT5yYWRpeF9pbmRleCA8IC0+cmlnaHQtPnJhZGl4X2luZGV4OworCSogbm9kZXMgYXJlIGhhc2hlZCB0byBsZWZ0IG9yIHJpZ2h0IHN1YnRyZWUgdXNpbmcgcmFkaXhfaW5kZXgKKwkgIHNpbWlsYXIgdG8gYSBwdXJlIGJpbmFyeSByYWRpeCB0cmVlLgorCitBIHJlZ3VsYXIgcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUgaGVscHMgdG8gc3RvcmUgYW5kIHF1ZXJ5CitpbnRlcnZhbHMgKHZtYXMpLiBIb3dldmVyLCBhIHJlZ3VsYXIgcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUgaXMgb25seQorc3VpdGFibGUgZm9yIHN0b3Jpbmcgdm1hcyB3aXRoIGRpZmZlcmVudCByYWRpeCBpbmRpY2VzICh2bV9wZ29mZikuCisKK1RoZXJlZm9yZSwgdGhlIHByaW9fdHJlZS5jIGV4dGVuZHMgdGhlIHJlZ3VsYXIgcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUKK3RvIGhhbmRsZSBtYW55IHZtYXMgd2l0aCB0aGUgc2FtZSB2bV9wZ29mZi4gU3VjaCB2bWFzIGFyZSBoYW5kbGVkIGluCisyIGRpZmZlcmVudCB3YXlzOiAxKSBBbGwgdm1hcyB3aXRoIHRoZSBzYW1lIHJhZGl4IF9hbmRfIGhlYXAgaW5kaWNlcyBhcmUKK2xpbmtlZCB1c2luZyB2bV9zZXQubGlzdCwgMikgaWYgdGhlcmUgYXJlIG1hbnkgdm1hcyB3aXRoIHRoZSBzYW1lIHJhZGl4CitpbmRleCwgYnV0IGRpZmZlcmVudCBoZWFwIGluZGljZXMgYW5kIGlmIHRoZSByZWd1bGFyIHJhZGl4LXByaW9yaXR5LXNlYXJjaAordHJlZSBjYW5ub3QgaW5kZXggdGhlbSBhbGwsIHdlIGJ1aWxkIGFuIG92ZXJmbG93LXN1Yi10cmVlIHRoYXQgaW5kZXhlcyBzdWNoCit2bWFzIHVzaW5nIGhlYXAgYW5kIHNpemUgaW5kaWNlcyBpbnN0ZWFkIG9mIGhlYXAgYW5kIHJhZGl4IGluZGljZXMuIEZvcgorZXhhbXBsZSwgaW4gdGhlIGZpZ3VyZSBiZWxvdyBzb21lIHZtYXMgd2l0aCB2bV9wZ29mZiA9IDAgKHplcm8pIGFyZQoraW5kZXhlZCBieSByZWd1bGFyIHJhZGl4LXByaW9yaXR5LXNlYXJjaC10cmVlIHdoZXJlYXMgb3RoZXJzIGFyZSBwdXNoZWQKK2ludG8gYW4gb3ZlcmZsb3ctc3VidHJlZS4gTm90ZSB0aGF0IGFsbCB2bWFzIGluIGFuIG92ZXJmbG93LXN1Yi10cmVlIGhhdmUKK3RoZSBzYW1lIHZtX3Bnb2ZmIChyYWRpeF9pbmRleCkgYW5kIGlmIG5lY2Vzc2FyeSB3ZSBidWlsZCBkaWZmZXJlbnQKK292ZXJmbG93LXN1Yi10cmVlcyB0byBoYW5kbGUgZWFjaCBwb3NzaWJsZSByYWRpeF9pbmRleC4gRm9yIGV4YW1wbGUsCitpbiBmaWd1cmUgd2UgaGF2ZSAzIG92ZXJmbG93LXN1Yi10cmVlcyBjb3JyZXNwb25kaW5nIHRvIHJhZGl4IGluZGljZXMKKzAsIDIsIGFuZCA0LgorCitJbiB0aGUgZmluYWwgdHJlZSB0aGUgZmlyc3QgZmV3IChwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cykgbGV2ZWxzCithcmUgaW5kZXhlZCB1c2luZyBoZWFwIGFuZCByYWRpeCBpbmRpY2VzIHdoZXJlYXMgdGhlIG92ZXJmbG93LXN1Yi10cmVlcyBiZWxvdwordGhvc2UgbGV2ZWxzIChpLmUuIGxldmVscyBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyArIDEgYW5kIGhpZ2hlcikgYXJlCitpbmRleGVkIHVzaW5nIGhlYXAgYW5kIHNpemUgaW5kaWNlcy4gSW4gb3ZlcmZsb3ctc3ViLXRyZWVzIHRoZSBzaXplX2luZGV4CitpcyB1c2VkIGZvciBoYXNoaW5nIHRoZSBub2RlcyB0byBhcHByb3ByaWF0ZSBwbGFjZXMuCisKK05vdywgYW4gZXhhbXBsZSBwcmlvX3RyZWU6CisKKyAgdm1hcyBhcmUgcmVwcmVzZW50ZWQgW3JhZGl4X2luZGV4LCBzaXplX2luZGV4LCBoZWFwX2luZGV4XQorICAgICAgICAgICAgICAgICBpLmUuLCBbc3RhcnRfdm1fcGdvZmYsIHZtX3NpemVfaW5fcGFnZXMsIGVuZF92bV9wZ29mZl0KKworbGV2ZWwgIHByaW9fdHJlZV9yb290LT5pbmRleF9iaXRzID0gMworLS0tLS0KKwkJCQkJCQkJCQkJCV8KKyAgMAkJCSAJCQkJWzAsNyw3XQkJCQkJIHwKKyAgCQkJCQkJCS8gICAgIFwJCQkJCSB8CisJCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgIC0tLS0tLS0tLS0tLQkJCSB8ICAgICBSZWd1bGFyCisgIAkJCQkgICAgIC8JCQkJCSAgIFwJCQkgfCAgcmFkaXggcHJpb3JpdHkKKyAgMQkJIAkJWzEsNiw3XQkJCQkJICBbNCwzLDddCQkgfCAgIHNlYXJjaCB0cmVlCisgIAkJCQkvICAgICBcCQkJCQkgIC8gICAgIFwJCSB8CisJCQkgLS0tLS0tLSAgICAgICAtLS0tLQkJCSAgICAtLS0tLS0gICAgICAgLS0tLS0JCSB8ICBoZWFwLWFuZC1yYWRpeAorCQkJLwkJICAgIFwJCQkgICAvCQkgICAgICBcCQkgfCAgICAgIGluZGV4ZWQKKyAgMgkJICAgIFswLDYsNl0JIAkgICBbMiw1LDddCQlbNSwyLDddCQkgICAgWzYsMSw3XQkgfAorCQkgICAgLyAgICAgXAkJICAgLyAgICAgXAkJLyAgICAgXAkJICAgIC8gICAgIFwJIHwKKyAgMwkJWzAsNSw1XQlbMSw1LDZdCQlbMiw0LDZdCVszLDQsN10JICAgIFs0LDIsNl0gWzUsMSw2XQlbNiwwLDZdCVs3LDAsN10JIHwKKwkJICAgLwkJCSAgIC8JCSAgICAgICAvCQkgICAJCV8KKyAgICAgICAgICAgICAgICAgIC8JCSAgICAgICAgICAvCQkgICAgICAvCQkJCQlfCisgIDQJICAgICAgWzAsNCw0XQkJICAgICAgWzIsMyw1XQkJICAgWzQsMSw1XQkJCQkgfAorICAJCSAvCQkJIC8JCSAgICAgIC8JCQkJCSB8CisgIDUJICAgICBbMCwzLDNdCQkgICAgIFsyLDIsNF0JCSAgWzQsMCw0XQkJCQkgfCAgT3ZlcmZsb3ctc3ViLXRyZWVzCisgIAkJLwkJCS8JCQkJCQkJIHwKKyAgNgkgICAgWzAsMiwyXQkJICAgIFsyLDEsM10JCQkJCQkJIHwgICAgaGVhcC1hbmQtc2l6ZQorICAJICAgICAgIC8JCSAgICAgICAvCQkJCQkJCSB8ICAgICAgIGluZGV4ZWQKKyAgNwkgICBbMCwxLDFdCQkgICBbMiwwLDJdCQkJCQkJCSB8CisgIAkgICAgICAvCQkJCQkJCQkJCQkgfAorICA4CSAgWzAsMCwwXQkJCQkJCQkJCQkgfAorICAJCQkJCQkJCQkJCQlfCisKK05vdGUgdGhhdCB3ZSB1c2UgcHJpb190cmVlX3Jvb3QtPmluZGV4X2JpdHMgdG8gb3B0aW1pemUgdGhlIGhlaWdodAorb2YgdGhlIGhlYXAtYW5kLXJhZGl4IGluZGV4ZWQgdHJlZS4gU2luY2UgcHJpb190cmVlX3Jvb3QtPmluZGV4X2JpdHMgaXMKK3NldCBhY2NvcmRpbmcgdG8gdGhlIG1heGltdW0gZW5kX3ZtX3Bnb2ZmIG1hcHBlZCwgd2UgYXJlIHN1cmUgdGhhdCBhbGwKK2JpdHMgKGluIHZtX3Bnb2ZmKSBhYm92ZSBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyBhcmUgMCAoemVybykuIFRoZXJlZm9yZSwKK3dlIG9ubHkgdXNlIHRoZSBmaXJzdCBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyBhcyByYWRpeF9pbmRleC4KK1doZW5ldmVyIGluZGV4X2JpdHMgaXMgaW5jcmVhc2VkIGluIHByaW9fdHJlZV9leHBhbmQsIHdlIHNodWZmbGUgdGhlIHRyZWUKK3RvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyBsZXZlbHMgb2YgdGhlIHRyZWUKK2lzIGluZGV4ZWQgcHJvcGVybHkgdXNpbmcgaGVhcCBhbmQgcmFkaXggaW5kaWNlcy4KKworV2UgZG8gbm90IG9wdGltaXplIHRoZSBoZWlnaHQgb2Ygb3ZlcmZsb3ctc3ViLXRyZWVzIHVzaW5nIGluZGV4X2JpdHMuCitUaGUgcmVhc29uIGlzOiB0aGVyZSBjYW4gYmUgbWFueSBzdWNoIG92ZXJmbG93LXN1Yi10cmVlcyBhbmQgYWxsIG9mCit0aGVtIGhhdmUgdG8gYmUgc3VmZmxlZCB3aGVuZXZlciB0aGUgaW5kZXhfYml0cyBpbmNyZWFzZXMuIFRoaXMgbWF5IGludm9sdmUKK3dhbGtpbmcgdGhlIHdob2xlIHByaW9fdHJlZSBpbiBwcmlvX3RyZWVfaW5zZXJ0LT5wcmlvX3RyZWVfZXhwYW5kIGNvZGUKK3BhdGggd2hpY2ggaXMgbm90IGRlc2lyYWJsZS4gSGVuY2UsIHdlIGRvIG5vdCBvcHRpbWl6ZSB0aGUgaGVpZ2h0IG9mIHRoZQoraGVhcC1hbmQtc2l6ZSBpbmRleGVkIG92ZXJmbG93LXN1Yi10cmVlcyB1c2luZyBwcmlvX3RyZWUtPmluZGV4X2JpdHMuCitJbnN0ZWFkIHRoZSBvdmVyZmxvdyBzdWItdHJlZXMgYXJlIGluZGV4ZWQgdXNpbmcgZnVsbCBCSVRTX1BFUl9MT05HIGJpdHMKK29mIHNpemVfaW5kZXguIFRoaXMgbWF5IGxlYWQgdG8gc2tld2VkIHN1Yi10cmVlcyBiZWNhdXNlIG1vc3Qgb2YgdGhlCitoaWdoZXIgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgc2l6ZV9pbmRleCBhcmUgbGlrZWx5IHRvIGJlIGJlIDAgKHplcm8pLiBJbgordGhlIGV4YW1wbGUgYWJvdmUsIGFsbCAzIG92ZXJmbG93LXN1Yi10cmVlcyBhcmUgc2tld2VkLiBUaGlzIG1heSBtYXJnaW5hbGx5CithZmZlY3QgdGhlIHBlcmZvcm1hbmNlLiBIb3dldmVyLCBwcm9jZXNzZXMgcmFyZWx5IG1hcCBtYW55IHZtYXMgd2l0aCB0aGUKK3NhbWUgc3RhcnRfdm1fcGdvZmYgYnV0IGRpZmZlcmVudCBlbmRfdm1fcGdvZmZzLiBUaGVyZWZvcmUsIHdlIG5vcm1hbGx5CitkbyBub3QgcmVxdWlyZSBvdmVyZmxvdy1zdWItdHJlZXMgdG8gaW5kZXggYWxsIHZtYXMuCisKK0Zyb20gdGhlIGFib3ZlIGRpc2N1c3Npb24gaXQgaXMgY2xlYXIgdGhhdCB0aGUgbWF4aW11bSBoZWlnaHQgb2YKK2EgcHJpb190cmVlIGNhbiBiZSBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyArIEJJVFNfUEVSX0xPTkcuCitIb3dldmVyLCBpbiBtb3N0IG9mIHRoZSBjb21tb24gY2FzZXMgd2UgZG8gbm90IG5lZWQgb3ZlcmZsb3ctc3ViLXRyZWVzLAorc28gdGhlIHRyZWUgaGVpZ2h0IGluIHRoZSBjb21tb24gY2FzZXMgd2lsbCBiZSBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cy4KKworSXQgaXMgZmFpciB0byBtZW50aW9uIGhlcmUgdGhhdCB0aGUgcHJpb190cmVlX3Jvb3QtPmluZGV4X2JpdHMKK2lzIGluY3JlYXNlZCBvbiBkZW1hbmQsIGhvd2V2ZXIsIHRoZSBpbmRleF9iaXRzIGlzIG5vdCBkZWNyZWFzZWQgd2hlbgordm1hcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBwcmlvX3RyZWUuIFRoYXQncyB0cmlja3kgdG8gZG8uIEhlbmNlLCBpdCdzCitsZWZ0IGFzIGEgaG9tZSB3b3JrIHByb2JsZW0uCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yYW1kaXNrLnR4dCBiL0RvY3VtZW50YXRpb24vcmFtZGlzay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyNTU4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcmFtZGlzay50eHQKQEAgLTAsMCArMSwxNjcgQEAKK1VzaW5nIHRoZSBSQU0gZGlzayBibG9jayBkZXZpY2Ugd2l0aCBMaW51eAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnRlbnRzOgorCisJMSkgT3ZlcnZpZXcKKwkyKSBLZXJuZWwgQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKwkzKSBVc2luZyAicmRldiAtciIKKwk0KSBBbiBFeGFtcGxlIG9mIENyZWF0aW5nIGEgQ29tcHJlc3NlZCBSQU0gRGlzayAKKworCisxKSBPdmVydmlldworLS0tLS0tLS0tLS0KKworVGhlIFJBTSBkaXNrIGRyaXZlciBpcyBhIHdheSB0byB1c2UgbWFpbiBzeXN0ZW0gbWVtb3J5IGFzIGEgYmxvY2sgZGV2aWNlLiAgSXQKK2lzIHJlcXVpcmVkIGZvciBpbml0cmQsIGFuIGluaXRpYWwgZmlsZXN5c3RlbSB1c2VkIGlmIHlvdSBuZWVkIHRvIGxvYWQgbW9kdWxlcworaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSByb290IGZpbGVzeXN0ZW0gKHNlZSBEb2N1bWVudGF0aW9uL2luaXRyZC50eHQpLiAgSXQgY2FuCithbHNvIGJlIHVzZWQgZm9yIGEgdGVtcG9yYXJ5IGZpbGVzeXN0ZW0gZm9yIGNyeXB0byB3b3JrLCBzaW5jZSB0aGUgY29udGVudHMKK2FyZSBlcmFzZWQgb24gcmVib290LgorCitUaGUgUkFNIGRpc2sgZHluYW1pY2FsbHkgZ3Jvd3MgYXMgbW9yZSBzcGFjZSBpcyByZXF1aXJlZC4gSXQgZG9lcyB0aGlzIGJ5IHVzaW5nCitSQU0gZnJvbSB0aGUgYnVmZmVyIGNhY2hlLiBUaGUgZHJpdmVyIG1hcmtzIHRoZSBidWZmZXJzIGl0IGlzIHVzaW5nIGFzIGRpcnR5CitzbyB0aGF0IHRoZSBWTSBzdWJzeXN0ZW0gZG9lcyBub3QgdHJ5IHRvIHJlY2xhaW0gdGhlbSBsYXRlci4KKworQWxzbywgdGhlIFJBTSBkaXNrIHN1cHBvcnRzIHVwIHRvIDE2IFJBTSBkaXNrcyBvdXQgb2YgdGhlIGJveCwgYW5kIGNhbgorYmUgcmVjb25maWd1cmVkIHRvIHN1cHBvcnQgdXAgdG8gMjU1IFJBTSBkaXNrcyAtIGNoYW5nZSAiI2RlZmluZSBOVU1fUkFNRElTS1MiCitpbiBkcml2ZXJzL2Jsb2NrL3JkLmMuICBUbyB1c2UgUkFNIGRpc2sgc3VwcG9ydCB3aXRoIHlvdXIgc3lzdGVtLCBydW4KKycuL01BS0VERVYgcmFtJyBmcm9tIHRoZSAvZGV2IGRpcmVjdG9yeS4gIFJBTSBkaXNrcyBhcmUgYWxsIG1ham9yIG51bWJlciAxLCBhbmQKK3N0YXJ0IHdpdGggbWlub3IgbnVtYmVyIDAgZm9yIC9kZXYvcmFtMCwgZXRjLiAgSWYgdXNlZCwgbW9kZXJuIGtlcm5lbHMgdXNlCisvZGV2L3JhbTAgZm9yIGFuIGluaXRyZC4KKworVGhlIG9sZCAicmFtZGlzaz08cmFtX3NpemU+IiBoYXMgYmVlbiBjaGFuZ2VkIHRvICJyYW1kaXNrX3NpemU9PHJhbV9zaXplPiIgdG8KK21ha2UgaXQgY2xlYXJlci4gIFRoZSBvcmlnaW5hbCAicmFtZGlzaz08cmFtX3NpemU+IiBoYXMgYmVlbiBrZXB0IGFyb3VuZCBmb3IKK2NvbXBhdGliaWxpdHkgcmVhc29ucywgYnV0IGl0IG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCisKK1RoZSBuZXcgUkFNIGRpc2sgYWxzbyBoYXMgdGhlIGFiaWxpdHkgdG8gbG9hZCBjb21wcmVzc2VkIFJBTSBkaXNrIGltYWdlcywKK2FsbG93aW5nIG9uZSB0byBzcXVlZXplIG1vcmUgcHJvZ3JhbXMgb250byBhbiBhdmVyYWdlIGluc3RhbGxhdGlvbiBvciAKK3Jlc2N1ZSBmbG9wcHkgZGlzay4KKworCisyKSBLZXJuZWwgQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJcmFtZGlza19zaXplPU4KKwk9PT09PT09PT09PT09PQorCitUaGlzIHBhcmFtZXRlciB0ZWxscyB0aGUgUkFNIGRpc2sgZHJpdmVyIHRvIHNldCB1cCBSQU0gZGlza3Mgb2YgTiBrIHNpemUuICBUaGUKK2RlZmF1bHQgaXMgNDA5NiAoNCBNQikgKDgxOTIgKDggTUIpIG9uIFMzOTApLgorCisJcmFtZGlza19ibG9ja3NpemU9TgorCT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBwYXJhbWV0ZXIgdGVsbHMgdGhlIFJBTSBkaXNrIGRyaXZlciBob3cgbWFueSBieXRlcyB0byB1c2UgcGVyIGJsb2NrLiAgVGhlCitkZWZhdWx0IGlzIDUxMi4KKworCiszKSBVc2luZyAicmRldiAtciIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdXNhZ2Ugb2YgdGhlIHdvcmQgKHR3byBieXRlcykgdGhhdCAicmRldiAtciIgc2V0cyBpbiB0aGUga2VybmVsIGltYWdlIGlzCithcyBmb2xsb3dzLiBUaGUgbG93IDExIGJpdHMgKDAgLT4gMTApIHNwZWNpZnkgYW4gb2Zmc2V0IChpbiAxIGsgYmxvY2tzKSBvZiB1cAordG8gMiBNQiAoMl4xMSkgb2Ygd2hlcmUgdG8gZmluZCB0aGUgUkFNIGRpc2sgKHRoaXMgdXNlZCB0byBiZSB0aGUgc2l6ZSkuIEJpdAorMTQgaW5kaWNhdGVzIHRoYXQgYSBSQU0gZGlzayBpcyB0byBiZSBsb2FkZWQsIGFuZCBiaXQgMTUgaW5kaWNhdGVzIHdoZXRoZXIgYQorcHJvbXB0L3dhaXQgc2VxdWVuY2UgaXMgdG8gYmUgZ2l2ZW4gYmVmb3JlIHRyeWluZyB0byByZWFkIHRoZSBSQU0gZGlzay4gU2luY2UKK3RoZSBSQU0gZGlzayBkeW5hbWljYWxseSBncm93cyBhcyBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gaW50byBpdCwgYSBzaXplIGZpZWxkCitpcyBub3QgcmVxdWlyZWQuIEJpdHMgMTEgdG8gMTMgYXJlIG5vdCBjdXJyZW50bHkgdXNlZCBhbmQgbWF5IGFzIHdlbGwgYmUgemVyby4KK1RoZXNlIG51bWJlcnMgYXJlIG5vIG1hZ2ljYWwgc2VjcmV0cywgYXMgc2VlbiBiZWxvdzoKKworLi9hcmNoL2kzODYva2VybmVsL3NldHVwLmM6I2RlZmluZSBSQU1ESVNLX0lNQUdFX1NUQVJUX01BU0sgICAgIDB4MDdGRgorLi9hcmNoL2kzODYva2VybmVsL3NldHVwLmM6I2RlZmluZSBSQU1ESVNLX1BST01QVF9GTEFHICAgICAgICAgIDB4ODAwMAorLi9hcmNoL2kzODYva2VybmVsL3NldHVwLmM6I2RlZmluZSBSQU1ESVNLX0xPQURfRkxBRyAgICAgICAgICAgIDB4NDAwMAorCitDb25zaWRlciBhIHR5cGljYWwgdHdvIGZsb3BweSBkaXNrIHNldHVwLCB3aGVyZSB5b3Ugd2lsbCBoYXZlIHRoZSAKK2tlcm5lbCBvbiBkaXNrIG9uZSwgYW5kIGhhdmUgYWxyZWFkeSBwdXQgYSBSQU0gZGlzayBpbWFnZSBvbnRvIGRpc2sgIzIuCisKK0hlbmNlIHlvdSB3YW50IHRvIHNldCBiaXRzIDAgdG8gMTMgYXMgMCwgbWVhbmluZyB0aGF0IHlvdXIgUkFNIGRpc2sKK3N0YXJ0cyBhdCBhbiBvZmZzZXQgb2YgMCBrQiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZsb3BweS4KK1RoZSBjb21tYW5kIGxpbmUgZXF1aXZhbGVudCBpczogInJhbWRpc2tfc3RhcnQ9MCIKKworWW91IHdhbnQgYml0IDE0IGFzIG9uZSwgaW5kaWNhdGluZyB0aGF0IGEgUkFNIGRpc2sgaXMgdG8gYmUgbG9hZGVkLgorVGhlIGNvbW1hbmQgbGluZSBlcXVpdmFsZW50IGlzOiAibG9hZF9yYW1kaXNrPTEiCisKK1lvdSB3YW50IGJpdCAxNSBhcyBvbmUsIGluZGljYXRpbmcgdGhhdCB5b3Ugd2FudCBhIHByb21wdC9rZXlwcmVzcworc2VxdWVuY2Ugc28gdGhhdCB5b3UgaGF2ZSBhIGNoYW5jZSB0byBzd2l0Y2ggZmxvcHB5IGRpc2tzLgorVGhlIGNvbW1hbmQgbGluZSBlcXVpdmFsZW50IGlzOiAicHJvbXB0X3JhbWRpc2s9MSIKKworUHV0dGluZyB0aGF0IHRvZ2V0aGVyIGdpdmVzIDJeMTUgKyAyXjE0ICsgMCA9IDQ5MTUyIGZvciBhbiByZGV2IHdvcmQuCitTbyB0byBjcmVhdGUgZGlzayBvbmUgb2YgdGhlIHNldCwgeW91IHdvdWxkIGRvOgorCisJL3Vzci9zcmMvbGludXgjIGNhdCBhcmNoL2kzODYvYm9vdC96SW1hZ2UgPiAvZGV2L2ZkMAorCS91c3Ivc3JjL2xpbnV4IyByZGV2IC9kZXYvZmQwIC9kZXYvZmQwCisJL3Vzci9zcmMvbGludXgjIHJkZXYgLXIgL2Rldi9mZDAgNDkxNTIKKworSWYgeW91IG1ha2UgYSBib290IGRpc2sgdGhhdCBoYXMgTElMTywgdGhlbiBmb3IgdGhlIGFib3ZlLCB5b3Ugd291bGQgdXNlOgorCWFwcGVuZCA9ICJyYW1kaXNrX3N0YXJ0PTAgbG9hZF9yYW1kaXNrPTEgcHJvbXB0X3JhbWRpc2s9MSIKK1NpbmNlIHRoZSBkZWZhdWx0IHN0YXJ0ID0gMCBhbmQgdGhlIGRlZmF1bHQgcHJvbXB0ID0gMSwgeW91IGNvdWxkIHVzZToKKwlhcHBlbmQgPSAibG9hZF9yYW1kaXNrPTEiCisKKworNCkgQW4gRXhhbXBsZSBvZiBDcmVhdGluZyBhIENvbXByZXNzZWQgUkFNIERpc2sgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGNyZWF0ZSBhIFJBTSBkaXNrIGltYWdlLCB5b3Ugd2lsbCBuZWVkIGEgc3BhcmUgYmxvY2sgZGV2aWNlIHRvCitjb25zdHJ1Y3QgaXQgb24uIFRoaXMgY2FuIGJlIHRoZSBSQU0gZGlzayBkZXZpY2UgaXRzZWxmLCBvciBhbgordW51c2VkIGRpc2sgcGFydGl0aW9uIChzdWNoIGFzIGFuIHVubW91bnRlZCBzd2FwIHBhcnRpdGlvbikuIEZvciB0aGlzIAorZXhhbXBsZSwgd2Ugd2lsbCB1c2UgdGhlIFJBTSBkaXNrIGRldmljZSwgIi9kZXYvcmFtMCIuCisKK05vdGU6IFRoaXMgdGVjaG5pcXVlIHNob3VsZCBub3QgYmUgZG9uZSBvbiBhIG1hY2hpbmUgd2l0aCBsZXNzIHRoYW4gOCBNQgorb2YgUkFNLiBJZiB1c2luZyBhIHNwYXJlIGRpc2sgcGFydGl0aW9uIGluc3RlYWQgb2YgL2Rldi9yYW0wLCB0aGVuIHRoaXMKK3Jlc3RyaWN0aW9uIGRvZXMgbm90IGFwcGx5LgorCithKSBEZWNpZGUgb24gdGhlIFJBTSBkaXNrIHNpemUgdGhhdCB5b3Ugd2FudC4gU2F5IDIgTUIgZm9yIHRoaXMgZXhhbXBsZS4KKyAgIENyZWF0ZSBpdCBieSB3cml0aW5nIHRvIHRoZSBSQU0gZGlzayBkZXZpY2UuIChUaGlzIHN0ZXAgaXMgbm90IGN1cnJlbnRseQorICAgcmVxdWlyZWQsIGJ1dCBtYXkgYmUgaW4gdGhlIGZ1dHVyZS4pIEl0IGlzIHdpc2UgdG8gemVybyBvdXQgdGhlCisgICBhcmVhIChlc3AuIGZvciBkaXNrcykgc28gdGhhdCBtYXhpbWFsIGNvbXByZXNzaW9uIGlzIGFjaGlldmVkIGZvcgorICAgdGhlIHVudXNlZCBibG9ja3Mgb2YgdGhlIGltYWdlIHRoYXQgeW91IGFyZSBhYm91dCB0byBjcmVhdGUuCisKKwlkZCBpZj0vZGV2L3plcm8gb2Y9L2Rldi9yYW0wIGJzPTFrIGNvdW50PTIwNDgKKworYikgTWFrZSBhIGZpbGVzeXN0ZW0gb24gaXQuIFNheSBleHQyZnMgZm9yIHRoaXMgZXhhbXBsZS4KKworCW1rZTJmcyAtdm0wIC9kZXYvcmFtMCAyMDQ4CisKK2MpIE1vdW50IGl0LCBjb3B5IHRoZSBmaWxlcyB5b3Ugd2FudCB0byBpdCAoZWc6IC9ldGMvKiAvZGV2LyogLi4uKQorICAgYW5kIHVubW91bnQgaXQgYWdhaW4uCisKK2QpIENvbXByZXNzIHRoZSBjb250ZW50cyBvZiB0aGUgUkFNIGRpc2suIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbgorICAgd2lsbCBiZSBhcHByb3hpbWF0ZWx5IDUwJSBvZiB0aGUgc3BhY2UgdXNlZCBieSB0aGUgZmlsZXMuIFVudXNlZAorICAgc3BhY2Ugb24gdGhlIFJBTSBkaXNrIHdpbGwgY29tcHJlc3MgdG8gYWxtb3N0IG5vdGhpbmcuCisKKwlkZCBpZj0vZGV2L3JhbTAgYnM9MWsgY291bnQ9MjA0OCB8IGd6aXAgLXY5ID4gL3RtcC9yYW1faW1hZ2UuZ3oKKworZSkgUHV0IHRoZSBrZXJuZWwgb250byB0aGUgZmxvcHB5CisKKwlkZCBpZj16SW1hZ2Ugb2Y9L2Rldi9mZDAgYnM9MWsKKworZikgUHV0IHRoZSBSQU0gZGlzayBpbWFnZSBvbnRvIHRoZSBmbG9wcHksIGFmdGVyIHRoZSBrZXJuZWwuIFVzZSBhbiBvZmZzZXQKKyAgIHRoYXQgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCwgc28gdGhhdCB5b3UgY2FuIHB1dCBhbm90aGVyCisgICAocG9zc2libHkgbGFyZ2VyKSBrZXJuZWwgb250byB0aGUgc2FtZSBmbG9wcHkgbGF0ZXIgd2l0aG91dCBvdmVybGFwcGluZworICAgdGhlIFJBTSBkaXNrIGltYWdlLiBBbiBvZmZzZXQgb2YgNDAwIGtCIGZvciBrZXJuZWxzIGFib3V0IDM1MCBrQiBpbgorICAgc2l6ZSB3b3VsZCBiZSByZWFzb25hYmxlLiBNYWtlIHN1cmUgb2Zmc2V0K3NpemUgb2YgcmFtX2ltYWdlLmd6IGlzCisgICBub3QgbGFyZ2VyIHRoYW4gdGhlIHRvdGFsIHNwYWNlIG9uIHlvdXIgZmxvcHB5ICh1c3VhbGx5IDE0NDAga0IpLgorCisJZGQgaWY9L3RtcC9yYW1faW1hZ2UuZ3ogb2Y9L2Rldi9mZDAgYnM9MWsgc2Vlaz00MDAKKworZykgVXNlICJyZGV2IiB0byBzZXQgdGhlIGJvb3QgZGV2aWNlLCBSQU0gZGlzayBvZmZzZXQsIHByb21wdCBmbGFnLCBldGMuCisgICBGb3IgcHJvbXB0X3JhbWRpc2s9MSwgbG9hZF9yYW1kaXNrPTEsIHJhbWRpc2tfc3RhcnQ9NDAwLCBvbmUgd291bGQKKyAgIGhhdmUgMl4xNSArIDJeMTQgKyA0MDAgPSA0OTU1Mi4KKworCXJkZXYgL2Rldi9mZDAgL2Rldi9mZDAKKwlyZGV2IC1yIC9kZXYvZmQwIDQ5NTUyCisKK1RoYXQgaXMgaXQuIFlvdSBub3cgaGF2ZSB5b3VyIGJvb3Qvcm9vdCBjb21wcmVzc2VkIFJBTSBkaXNrIGZsb3BweS4gU29tZQordXNlcnMgbWF5IHdpc2ggdG8gY29tYmluZSBzdGVwcyAoZCkgYW5kIChmKSBieSB1c2luZyBhIHBpcGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJCQlQYXVsIEdvcnRtYWtlciAxMi85NQorCitDaGFuZ2Vsb2c6CistLS0tLS0tLS0tCisKKzEwLTIyLTA0IDoJVXBkYXRlZCB0byByZWZsZWN0IGNoYW5nZXMgaW4gY29tbWFuZCBsaW5lIG9wdGlvbnMsIHJlbW92ZQorCQlvYnNvbGV0ZSByZWZlcmVuY2VzLCBnZW5lcmFsIGNsZWFudXAuCisJCUphbWVzIE5lbHNvbiAoamFtZXM0NzY1QGdtYWlsLmNvbSkKKworCisxMi05NSA6CQlPcmlnaW5hbCBEb2N1bWVudApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yaXNjb204LnR4dCBiL0RvY3VtZW50YXRpb24vcmlzY29tOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmNjFmZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcmlzY29tOC50eHQKQEAgLTAsMCArMSwzNiBAQAorKiBOT1RFIC0gdGhpcyBpcyBhbiB1bm1haW50YWluZWQgZHJpdmVyLiAgVGhlIG9yaWdpbmFsIGF1dGhvciBjYW5ub3QgYmUgbG9jYXRlZC4KKworU0RMIENvbW11bmljYXRpb25zIGlzIG5vdyBTQlMgVGVjaG5vbG9naWVzLCBhbmQgZG9lcyBub3QgaGF2ZSBhbnkKK2luZm9ybWF0aW9uIG9uIHRoZXNlIGFuY2llbnQgSVNBIGNhcmRzIG9uIHRoZWlyIHdlYnNpdGUuCisKK0phbWVzIE5lbHNvbiA8amFtZXM0NzY1QGdtYWlsLmNvbT4gLSAxMi0xMi0yMDA0CisKKwlUaGlzIGlzIHRoZSBSRUFETUUgZm9yIFJJU0NvbS84IG11bHRpLXBvcnQgc2VyaWFsIGRyaXZlcgorCShDKSAxOTk0LTE5OTYgRC5Hb3JvZGNoYW5pbgorCVNlZSBmaWxlIExJQ0VOU0UgZm9yIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCitOT1RFOiBFbmdsaXNoIGlzIG5vdCBteSBuYXRpdmUgbGFuZ3VhZ2UuIAorICAgICAgSSdtIHNvcnJ5IGZvciBhbnkgbWlzdGFrZXMgaW4gdGhpcyB0ZXh0LgorCitNaXNjLiBub3RlcyBmb3IgUklTQ29tLzggc2VyaWFsIGRyaXZlciwgaW4gbm8gcGFydGljdWxhciBvcmRlciA6KQorCisxKSBUaGlzIGRyaXZlciBjYW4gc3VwcG9ydCB1cCB0byA0IGJvYXJkcyBhdCB0aW1lLgorICAgVXNlIHN0cmluZyAicmlzY29tOD0weFhYWCwweFhYWCwweFhYWCwweFhYWCIgYXQgTElMTyBwcm9tcHQsIGZvcgorICAgc2V0dGluZyBJL08gYmFzZSBhZGRyZXNzZXMgZm9yIGJvYXJkcy4gSWYgeW91IGNvbXBpbGUgZHJpdmVyCisgICBhcyBtb2R1bGUgdXNlIG1vZHByb2JlIG9wdGlvbnMgImlvYmFzZT0weFhYWCBpb2Jhc2UxPTB4WFhYIGlvYmFzZTI9Li4uIgorCisyKSBUaGUgZHJpdmVyIHBhcnRpYWxseSBzdXBwb3J0cyBmYW1vdXMgJ3NldHNlcmlhbCcgcHJvZ3JhbSwgeW91IGNhbiB1c2UgYWxtb3N0CisgICBhbnkgb2YgaXRzIG9wdGlvbnMsIGV4Y2x1ZGluZyBwb3J0ICYgaXJxIHNldHRpbmdzLgorCiszKSBUaGVyZSBhcmUgc29tZSBtaXNjLiBkZWZpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgcmlzY29tOC5jLCBwbGVhc2UgcmVhZCB0aGUgCisgICBjb21tZW50cyBhbmQgdHJ5IHRvIGNoYW5nZSBzb21lIG9mIHRoZW0gaW4gY2FzZSBvZiBwcm9ibGVtcy4KKworNCkgSSBjb25zaWRlciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZHJpdmVyIGFzIEJFVEEuCisKKzUpIFNETCBDb21tdW5pY2F0aW9ucyBXV1cgcGFnZSBpcyBodHRwOi8vd3d3LnNkbGNvbW0uY29tLgorCis2KSBZb3UgY2FuIHVzZSB0aGUgTUFLRURFViBwcm9ncmFtIHRvIGNyZWF0ZSBSSVNDb20vOCAvZGV2L3R0eUwqIGVudHJpZXMuCisKKzcpIE1pbm9yIG51bWJlcnMgZm9yIGZpcnN0IGJvYXJkIGFyZSAwLTcsIGZvciBzZWNvbmQgOC0xNSwgZXRjLgorCisyMiBBcHIgMTk5Ni4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcm9ja2V0LnR4dCBiL0RvY3VtZW50YXRpb24vcm9ja2V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTA2NzgwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9yb2NrZXQudHh0CkBAIC0wLDAgKzEsMTg5IEBACitDb210cm9sKHRtKSBSb2NrZXRQb3J0KFIpL1JvY2tldE1vZGVtKFRNKSBTZXJpZXMgCitEZXZpY2UgRHJpdmVyIGZvciB0aGUgTGludXggT3BlcmF0aW5nIFN5c3RlbQorCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworUFJPRFVDVCBPVkVSVklFVworLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBwcm92aWRlcyBhIGxvYWRhYmxlIGtlcm5lbCBkcml2ZXIgZm9yIHRoZSBDb210cm9sIFJvY2tldFBvcnQKK2FuZCBSb2NrZXRNb2RlbSBQQ0kgYm9hcmRzLiBUaGVzZSBib2FyZHMgcHJvdmlkZSwgMiwgNCwgOCwgMTYsIG9yIDMyIAoraGlnaC1zcGVlZCBzZXJpYWwgcG9ydHMgb3IgbW9kZW1zLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdXAgdG8gYSBjb21iaW5hdGlvbgorb2YgZm91ciBSb2NrZXRQb3J0IG9yIFJvY2tldE1vZGVtcyBib2FyZHMgaW4gb25lIG1hY2hpbmUgc2ltdWx0YW5lb3VzbHkuCitUaGlzIGZpbGUgYXNzdW1lcyB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIFJvY2tldFBvcnQgZHJpdmVyIHdoaWNoIGlzCitpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBzb3VyY2VzLiAgCisKK1RoZSBkcml2ZXIgY2FuIGFsc28gYmUgaW5zdGFsbGVkIGFzIGFuIGV4dGVybmFsIG1vZHVsZSB1c2luZyB0aGUgdXN1YWwgCisibWFrZTttYWtlIGluc3RhbGwiIHJvdXRpbmUuICBUaGlzIGV4dGVybmFsIG1vZHVsZSBkcml2ZXIsIG9idGFpbmFibGUgCitmcm9tIHRoZSBDb210cm9sIHdlYnNpdGUgbGlzdGVkIGJlbG93LCBpcyB1c2VmdWwgZm9yIHVwZGF0aW5nIHRoZSBkcml2ZXIKK29yIGluc3RhbGxpbmcgaXQgaW50byBrZXJuZWxzIHdoaWNoIGRvIG5vdCBoYXZlIHRoZSBkcml2ZXIgY29uZmlndXJlZAoraW50byB0aGVtLiAgSW5zdGFsbGF0aW9ucyBpbnN0cnVjdGlvbnMgZm9yIHRoZSBleHRlcm5hbCBtb2R1bGUKK2FyZSBpbiB0aGUgaW5jbHVkZWQgUkVBRE1FIGFuZCBIV19JTlNUQUxMIGZpbGVzLgorCitSb2NrZXRQb3J0IElTQSBhbmQgUm9ja2V0TW9kZW0gSUkgUENJIGJvYXJkcyBjdXJyZW50bHkgYXJlIG9ubHkgc3VwcG9ydGVkIGJ5Cit0aGlzIGRyaXZlciBpbiBtb2R1bGUgZm9ybS4KKworVGhlIFJvY2tldFBvcnQgSVNBIGJvYXJkIHJlcXVpcmVzIEkvTyBwb3J0cyB0byBiZSBjb25maWd1cmVkIGJ5IHRoZSBESVAKK3N3aXRjaGVzIG9uIHRoZSBib2FyZC4gIFNlZSB0aGUgc2VjdGlvbiAiSVNBIFJvY2tldHBvcnQgQm9hcmRzIiBiZWxvdyBmb3IKK2luZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdGhlIERJUCBzd2l0Y2hlcy4KKworWW91IHBhc3MgdGhlIEkvTyBwb3J0IHRvIHRoZSBkcml2ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVyczoKKworYm9hcmQxIDoJSS9PIHBvcnQgZm9yIHRoZSBmaXJzdCBJU0EgYm9hcmQKK2JvYXJkMiA6CUkvTyBwb3J0IGZvciB0aGUgc2Vjb25kIElTQSBib2FyZAorYm9hcmQzIDoJSS9PIHBvcnQgZm9yIHRoZSB0aGlyZCBJU0EgYm9hcmQKK2JvYXJkNCA6CUkvTyBwb3J0IGZvciB0aGUgZm91cnRoIElTQSBib2FyZAorCitUaGVyZSBpcyBhIHNldCBvZiB1dGlsaXRpZXMgYW5kIHNjcmlwdHMgcHJvdmlkZWQgd2l0aCB0aGUgZXh0ZXJuYWwgZHJpdmVyCisoIGRvd25sb2FkYWJsZSBmcm9tIGh0dHA6Ly93d3cuY29tdHJvbC5jb20gKSB0aGF0IGVhc2UgdGhlIGNvbmZpZ3VyYXRpb24gYW5kCitzZXR1cCBvZiB0aGUgSVNBIGNhcmRzLgorCitUaGUgUm9ja2V0TW9kZW0gSUkgUENJIGJvYXJkcyByZXF1aXJlIGZpcm13YXJlIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBjYXJkCitiZWZvcmUgaXQgd2lsbCBmdW5jdGlvbi4gIFRoZSBkcml2ZXIgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgYXMgYSBtb2R1bGUgZm9yIHRoaXMKK2JvYXJkLgorCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworSU5TVEFMTEFUSU9OIFBST0NFRFVSRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JvY2tldFBvcnQvUm9ja2V0TW9kZW0gUENJIGNhcmRzIHJlcXVpcmUgbm8gZHJpdmVyIGNvbmZpZ3VyYXRpb24sIHRoZXkgYXJlIAorYXV0b21hdGljYWxseSBkZXRlY3RlZCBhbmQgY29uZmlndXJlZC4KKworVGhlIFJvY2tldFBvcnQgZHJpdmVyIGNhbiBiZSBpbnN0YWxsZWQgYXMgYSBtb2R1bGUgKHJlY29tbWVuZGVkKSBvciBidWlsdCAKK2ludG8gdGhlIGtlcm5lbC4gVGhpcyBpcyBzZWxlY3RlZCwgYXMgZm9yIG90aGVyIGRyaXZlcnMsIHRocm91Z2ggdGhlIGBtYWtlIGNvbmZpZ2AKK2NvbW1hbmQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgTGludXggc291cmNlIHRyZWUgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gCisKK1RoZSBSb2NrZXRQb3J0L1JvY2tldE1vZGVtIHNlcmlhbCBwb3J0cyBpbnN0YWxsZWQgYnkgdGhpcyBkcml2ZXIgYXJlIGFzc2lnbmVkCitkZXZpY2UgbWFqb3IgbnVtYmVyIDQ2LCBhbmQgd2lsbCBiZSBuYW1lZCAvZGV2L3R0eVJ4LCB3aGVyZSB4IGlzIHRoZSBwb3J0IG51bWJlciAKK3N0YXJ0aW5nIGF0IHplcm8gKGV4LiAvZGV2L3R0eVIwLCAvZGV2dHR5UjEsIC4uLikuICBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBjYXJkcworaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0sIHRoZSBtYXBwaW5nIG9mIHBvcnQgbmFtZXMgdG8gc2VyaWFsIHBvcnRzIGlzIGRpc3BsYXllZAoraW4gdGhlIHN5c3RlbSBsb2cgYXQgL3Zhci9sb2cvbWVzc2FnZXMuCisKK0lmIGluc3RhbGxlZCBhcyBhIG1vZHVsZSwgdGhlIG1vZHVsZSBtdXN0IGJlIGxvYWRlZC4gIFRoaXMgY2FuIGJlIGRvbmUKK21hbnVhbGx5IGJ5IGVudGVyaW5nICJtb2Rwcm9iZSByb2NrZXQiLiAgVG8gaGF2ZSB0aGUgbW9kdWxlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Cit1cG9uIHN5c3RlbSBib290LCBlZGl0IHRoZSAvZXRjL21vZHByb2JlLmNvbmYgZmlsZSBhbmQgYWRkIHRoZSBsaW5lCisiYWxpYXMgY2hhci1tYWpvci00NiByb2NrZXQiLgorCitJbiBvcmRlciB0byB1c2UgdGhlIHBvcnRzLCB0aGVpciBkZXZpY2UgbmFtZXMgKG5vZGVzKSBtdXN0IGJlIGNyZWF0ZWQgd2l0aCBta25vZC4KK1RoaXMgaXMgb25seSByZXF1aXJlZCBvbmNlLCB0aGUgc3lzdGVtIHdpbGwgcmV0YWluIHRoZSBuYW1lcyBvbmNlIGNyZWF0ZWQuICBUbyAKK2NyZWF0ZSB0aGUgUm9ja2V0UG9ydC9Sb2NrZXRNb2RlbSBkZXZpY2UgbmFtZXMsIHVzZSB0aGUgY29tbWFuZCAKKyJta25vZCAvZGV2L3R0eVJ4IGMgNDYgeCIgd2hlcmUgeCBpcyB0aGUgcG9ydCBudW1iZXIgc3RhcnRpbmcgYXQgemVyby4gIEZvciBleGFtcGxlOgorCis+bWtub2QgL2Rldi90dHlSMCBjIDQ2IDAKKz5ta25vZCAvZGV2L3R0eVIxIGMgNDYgMQorPm1rbm9kIC9kZXYvdHR5UjIgYyA0NiAyICAKKworVGhlIExpbnV4IHNjcmlwdCBNQUtFREVWIHdpbGwgY3JlYXRlIHRoZSBmaXJzdCAxNiB0dHlSeCBkZXZpY2UgbmFtZXMgKG5vZGVzKQorZm9yIHlvdToKKworPi9kZXYvTUFLRURFViB0dHlSCisKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitJU0EgUm9ja2V0cG9ydCBCb2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgbXVzdCBhc3NpZ24gYW5kIGNvbmZpZ3VyZSB0aGUgSS9PIGFkZHJlc3NlcyB1c2VkIGJ5IHRoZSBJU0EgUm9ja2V0cG9ydAorY2FyZCBiZWZvcmUgaW5zdGFsbGluZyBhbmQgdXNpbmcgaXQuICBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyBhIHNldCBvZiBESVAKK3N3aXRjaGVzIG9uIHRoZSBSb2NrZXRwb3J0IGJvYXJkLgorCisKK1NFVFRJTkcgVEhFIEkvTyBBRERSRVNTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWZvcmUgaW5zdGFsbGluZyBSb2NrZXRQb3J0KFIpIG9yIFJvY2tldFBvcnQgUkEgYm9hcmRzLCB5b3UgbXVzdCBmaW5kCithIHJhbmdlIG9mIEkvTyBhZGRyZXNzZXMgZm9yIGl0IHRvIHVzZS4gVGhlIGZpcnN0IFJvY2tldFBvcnQgY2FyZAorcmVxdWlyZXMgYSA2OC1ieXRlIGNvbnRpZ3VvdXMgYmxvY2sgb2YgSS9PIGFkZHJlc3Nlcywgc3RhcnRpbmcgYXQgb25lCitvZiB0aGUgZm9sbG93aW5nOiAweDEwMGgsIDB4MTQwaCwgMHgxODBoLCAweDIwMGgsIDB4MjQwaCwgMHgyODBoLAorMHgzMDBoLCAweDM0MGgsIDB4MzgwaC4gIFRoaXMgSS9PIGFkZHJlc3MgbXVzdCBiZSByZWZsZWN0ZWQgaW4gdGhlIERJUAorc3dpdGljaGVzIG9mICphbGwqIG9mIHRoZSBSb2NrZXRwb3J0IGNhcmRzLgorCitUaGUgc2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBSb2NrZXRQb3J0IGNhcmRzIHJlcXVpcmUgYSA2NC1ieXRlCitjb250aWd1b3VzIGJsb2NrIG9mIEkvTyBhZGRyZXNzZXMsIHN0YXJ0aW5nIGF0IG9uZSBvZiB0aGUgZm9sbG93aW5nCitJL08gYWRkcmVzc2VzOiAweDEwMGgsIDB4MTQwaCwgMHgxODBoLCAweDFDMGgsIDB4MjAwaCwgMHgyNDBoLCAweDI4MGgsCisweDJDMGgsIDB4MzAwaCwgMHgzNDBoLCAweDM4MGgsIDB4M0MwaC4gIFRoZSBJL08gYWRkcmVzcyB1c2VkIGJ5IHRoZQorc2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBSb2NrZXRwb3J0IGNhcmRzIChpZiBwcmVzZW50KSBhcmUgc2V0IHZpYQorc29mdHdhcmUgY29udHJvbC4gIFRoZSBESVAgc3dpdGNoIHNldHRpbmdzIGZvciB0aGUgSS9PIGFkZHJlc3MgbXVzdCBiZQorc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgUm9ja2V0cG9ydCBjYXJkcy4KKworSW4gb3JkZXIgdG8gZGVzdGluZ3Vpc2ggZWFjaCBvZiB0aGUgY2FyZCBmcm9tIHRoZSBvdGhlcnMsIGVhY2ggY2FyZAorbXVzdCBoYXZlIGEgdW5pcXVlIGJvYXJkIElEIHNldCBvbiB0aGUgZGlwIHN3aXRjaGVzLiAgVGhlIGZpcnN0CitSb2NrZXRwb3J0IGJvYXJkIG11c3QgYmUgc2V0IHdpdGggdGhlIERJUCBzd2l0Y2hlcyBjb3JyZXNwb25kaW5nIHRvCit0aGUgZmlyc3QgYm9hcmQsIHRoZSBzZWNvbmQgYm9hcmQgbXVzdCBiZSBzZXQgd2l0aCB0aGUgRElQIHN3aXRjaGVzCitjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWNvbmQgYm9hcmQsIGV0Yy4gIElNUE9SVEFOVDogVGhlIGJvYXJkIElEIGlzCit0aGUgb25seSBwbGFjZSB3aGVyZSB0aGUgRElQIHN3aXRjaCBzZXR0aW5ncyBzaG91bGQgZGlmZmVyIGJldHdlZW4gdGhlCit2YXJpb3VzIFJvY2tldHBvcnQgYm9hcmRzIGluIGEgc3lzdGVtLgorCitUaGUgSS9PIGFkZHJlc3MgcmFuZ2UgdXNlZCBieSBhbnkgb2YgdGhlIFJvY2tldFBvcnQgY2FyZHMgbXVzdCBub3QKK2NvbmZsaWN0IHdpdGggYW55IG90aGVyIGNhcmRzIGluIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyBvdGhlcgorUm9ja2V0UG9ydCBjYXJkcy4gIEJlbG93LCB5b3Ugd2lsbCBmaW5kIGEgbGlzdCBvZiBjb21tb25seSB1c2VkIEkvTworYWRkcmVzcyByYW5nZXMgd2hpY2ggbWF5IGJlIGluIHVzZSBieSBvdGhlciBkZXZpY2VzIGluIHlvdXIgc3lzdGVtLgorT24gYSBMaW51eCBzeXN0ZW0sICJjYXQgL3Byb2MvaW9wb3J0cyIgd2lsbCBhbHNvIGJlIGhlbHBmdWwgaW4KK2lkZW50aWZ5aW5nIHdoYXQgSS9PIGFkZHJlc3NlcyBhcmUgYmVpbmcgdXNlZCBieSBkZXZpY3Mgb24geW91cgorc3lzdGVtLgorCitSZW1lbWJlciwgdGhlIEZJUlNUIFJvY2tldFBvcnQgdXNlcyA2OCBJL08gYWRkcmVzc2VzLiAgU28sIGlmIHlvdSBzZXQgaXQKK2ZvciAweDEwMCwgaXQgd2lsbCBvY2N1cHkgMHgxMDAgdG8gMHgxNDMuICBUaGlzIHdvdWxkIG1lYW4gdGhhdCB5b3UKK0NBTiBOT1Qgc2V0IHRoZSBzZWNvbmQsIHRoaXJkIG9yIGZvdXJ0aCBib2FyZCBmb3IgYWRkcmVzcyAweDE0MCBzaW5jZQordGhlIGZpcnN0IDQgYnl0ZXMgb2YgdGhhdCByYW5nZSBhcmUgdXNlZCBieSB0aGUgZmlyc3QgYm9hcmQuICBZb3Ugd291bGQKK25lZWQgdG8gc2V0IHRoZSBzZWNvbmQsIHRoaXJkLCBvciBmb3VydGggYm9hcmQgdG8gb25lIG9mIHRoZSBuZXh0IGF2YWlsYWJsZQorYmxvY2tzIHN1Y2ggYXMgMHgxODAuCisKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitSb2NrZXRQb3J0IGFuZCBSb2NrZXRQb3J0IFJBIFNXMSBTZXR0aW5nczoKKworICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIHwgOCB8IDcgfCA2IHwgNSB8IDQgfCAzIHwgMiB8IDEgfAorICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIHwgVW51c2VkfCBDYXJkICB8IEkvTyBQb3J0IEJsb2NrfAorICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitESVAgU3dpdGNoZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUCBTd2l0Y2hlcworNyAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAgIDUKKz09PT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PQorT24gICBPbiAgIFVOVVNFRCwgTVVTVCBCRSBPTi4gICAgICAgICAgICBPbiAgIE9uICAgRmlyc3QgQ2FyZCAgICA8PT09PSBEZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgT2ZmICBTZWNvbmQgQ2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmYgIE9uICAgVGhpcmQgQ2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmYgIE9mZiAgRm91cnRoIENhcmQKKworRElQIFN3aXRjaGVzICAgICAgICAgSS9PIEFkZHJlc3MgUmFuZ2UKKzQgICAgMyAgICAyICAgIDEgICAgIFVzZWQgYnkgdGhlIEZpcnN0IENhcmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK09uICAgT2ZmICBPbiAgIE9mZiAgIDEwMC0xNDMKK09uICAgT2ZmICBPZmYgIE9uICAgIDE0MC0xODMKK09uICAgT2ZmICBPZmYgIE9mZiAgIDE4MC0xQzMgICAgICAgPD09PT0gRGVmYXVsdAorT2ZmICBPbiAgIE9uICAgT2ZmICAgMjAwLTI0MworT2ZmICBPbiAgIE9mZiAgT24gICAgMjQwLTI4MworT2ZmICBPbiAgIE9mZiAgT2ZmICAgMjgwLTJDMworT2ZmICBPZmYgIE9uICAgT2ZmICAgMzAwLTM0MworT2ZmICBPZmYgIE9mZiAgT24gICAgMzQwLTM4MworT2ZmICBPZmYgIE9mZiAgT2ZmICAgMzgwLTNDMworCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworUkVQT1JUSU5HIEJVR1MKKy0tLS0tLS0tLS0tLS0tCisKK0ZvciB0ZWNobmljYWwgc3VwcG9ydCwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZworaW5mb3JtYXRpb246IERyaXZlciB2ZXJzaW9uLCBrZXJuZWwgcmVsZWFzZSwgZGlzdHJpYnV0aW9uIG9mCitrZXJuZWwsIGFuZCB0eXBlIG9mIGJvYXJkIHlvdSBhcmUgdXNpbmcuIEVycm9yIG1lc3NhZ2VzIGFuZCBsb2cKK3ByaW50b3V0cyBwb3J0IGNvbmZpZ3VyYXRpb24gZGV0YWlscyBhcmUgZXNwZWNpYWxseSBoZWxwZnVsLgorCitVU0EKKyAgICBQaG9uZTogKDYxMikgNDk0LTQxMDAKKyAgICAgIEZBWDogKDYxMikgNDk0LTQxOTkKKyAgICBlbWFpbDogc3VwcG9ydEBjb210cm9sLmNvbQorCitDb210cm9sIEV1cm9wZQorICAgIFBob25lOiArNDQgKDApIDEgODY5IDMyMy0yMjAKKyAgICAgIEZBWDogKzQ0ICgwKSAxIDg2OSAzMjMtMjExCisgICAgZW1haWw6IHN1cHBvcnRAY29tdHJvbC5jby51aworCitXZWI6CWh0dHA6Ly93d3cuY29tdHJvbC5jb20KK0ZUUDoJZnRwLmNvbXRyb2wuY29tCisKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcnBjLWNhY2hlLnR4dCBiL0RvY3VtZW50YXRpb24vcnBjLWNhY2hlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVkNDQzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ycGMtY2FjaGUudHh0CkBAIC0wLDAgKzEsMTcxIEBACitUaGlzIGRvY3VtZW50IGdpdmVzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIHRoZSBjYWNoaW5nCittZWNoYW5pc21zIGluIHRoZSBzdW5ycGMgbGF5ZXIgdGhhdCBpcyB1c2VkLCBpbiBwYXJ0aWN1bGFyLAorZm9yIE5GUyBhdXRoZW50aWNhdGlvbi4KKworQ0FDSEVTCis9PT09PT0KK1RoZSBjYWNoaW5nIHJlcGxhY2VzIHRoZSBvbGQgZXhwb3J0cyB0YWJsZSBhbmQgYWxsb3dzIGZvcgorYSB3aWRlIHZhcmlldHkgb2YgdmFsdWVzIHRvIGJlIGNhY2hlcy4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGNhY2hlcyB0aGF0IGFyZSBzaW1pbGFyIGluIHN0cnVjdHVyZSB0aG91Z2gKK3F1aXRlIHBvc3NpYmx5IHZlcnkgZGlmZmVyZW50IGluIGNvbnRlbnQgYW5kIHVzZS4gIFRoZXJlIGlzIGEgY29ycHVzCitvZiBjb21tb24gY29kZSBmb3IgbWFuYWdpbmcgdGhlc2UgY2FjaGVzLgorCitFeGFtcGxlcyBvZiBjYWNoZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG5lZWRlZCBhcmU6CisgIC0gbWFwcGluZyBmcm9tIElQIGFkZHJlc3MgdG8gY2xpZW50IG5hbWUKKyAgLSBtYXBwaW5nIGZyb20gY2xpZW50IG5hbWUgYW5kIGZpbGVzeXN0ZW0gdG8gZXhwb3J0IG9wdGlvbnMKKyAgLSBtYXBwaW5nIGZyb20gVUlEIHRvIGxpc3Qgb2YgR0lEcywgdG8gd29yayBhcm91bmQgTkZTJ3MgbGltaXRhdGlvbgorICAgIG9mIDE2IGdpZHMuCisgIC0gbWFwcGluZ3MgYmV0d2VlbiBsb2NhbCBVSUQvR0lEIGFuZCByZW1vdGUgVUlEL0dJRCBmb3Igc2l0ZXMgdGhhdAorICAgIGRvIG5vdCBoYXZlIHVuaWZvcm0gdWlkIGFzc2lnbm1lbnQKKyAgLSBtYXBwaW5nIGZyb20gbmV0d29yayBpZGVudGlmeSB0byBwdWJsaWMga2V5IGZvciBjcnlwdG8gYXV0aGVudGljYXRpb24uCisKK1RoZSBjb21tb24gY29kZSBoYW5kbGVzIHN1Y2ggdGhpbmdzIGFzOgorICAgLSBnZW5lcmFsIGNhY2hlIGxvb2t1cCB3aXRoIGNvcnJlY3QgbG9ja2luZworICAgLSBzdXBwb3J0aW5nICdORUdBVElWRScgYXMgd2VsbCBhcyBwb3NpdGl2ZSBlbnRyaWVzCisgICAtIGFsbG93aW5nIGFuIEVYUElSRUQgdGltZSBvbiBjYWNoZSBpdGVtcywgYW5kIHJlbW92aW5nCisgICAgIGl0ZW1zIGFmdGVyIHRoZXkgZXhwaXJlLCBhbmQgYXJlIG5vIGxvbmdlIGluLXVzZS4KKworICAgRnV0dXJlIGNvZGUgZXh0ZW5zaW9ucyBhcmUgZXhwZWN0IHRvIGhhbmRsZQorICAgLSBtYWtpbmcgcmVxdWVzdHMgdG8gdXNlci1zcGFjZSB0byBmaWxsIGluIGNhY2hlIGVudHJpZXMKKyAgIC0gYWxsb3dpbmcgdXNlci1zcGFjZSB0byBkaXJlY3RseSBzZXQgZW50cmllcyBpbiB0aGUgY2FjaGUKKyAgIC0gZGVsYXlpbmcgUlBDIHJlcXVlc3RzIHRoYXQgZGVwZW5kIG9uIGFzLXlldCBpbmNvbXBsZXRlCisgICAgIGNhY2hlIGVudHJpZXMsIGFuZCByZXBsYXlpbmcgdGhvc2UgcmVxdWVzdHMgd2hlbiB0aGUgY2FjaGUgZW50cnkKKyAgICAgaXMgY29tcGxldGUuCisgICAtIG1haW50YWluaW5nIGxhc3QtYWNjZXNzIHRpbWVzIG9uIGNhY2hlIGVudHJpZXMKKyAgIC0gY2xlYW4gb3V0IG9sZCBlbnRyaWVzIHdoZW4gdGhlIGNhY2hlcyBiZWNvbWUgZnVsbAorCitUaGUgY29kZSBmb3IgcGVyZm9ybWluZyBhIGNhY2hlIGxvb2t1cCBpcyBhbHNvIGNvbW1vbiwgYnV0IGluIHRoZSBmb3JtCitvZiBhIHRlbXBsYXRlLiAgaS5lLiBhICNkZWZpbmUuCitFYWNoIGNhY2hlIGRlZmluZXMgYSBsb29rdXAgZnVuY3Rpb24gYnkgdXNpbmcgdGhlIERlZmluZUNhY2hlTG9va3VwCittYWNybywgb3IgdGhlIHNpbXBsZXIgRGVmaW5lU2ltcGxlQ2FjaGVMb29rdXAgbWFjcm8KKworQ3JlYXRpbmcgYSBDYWNoZQorLS0tLS0tLS0tLS0tLS0tLQorCisxLyBBIGNhY2hlIG5lZWRzIGEgZGF0dW0gdG8gY2FjaGUuICBUaGlzIGlzIGluIHRoZSBmb3JtIG9mIGEKKyAgIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRoYXQgbXVzdCBjb250YWluIGEKKyAgICAgc3RydWN0IGNhY2hlX2hlYWQKKyAgIGFzIGFuIGVsZW1lbnQsIHVzdWFsbHkgdGhlIGZpcnN0LgorICAgSXQgd2lsbCBhbHNvIGNvbnRhaW4gYSBrZXkgYW5kIHNvbWUgY29udGVudC4KKyAgIEVhY2ggY2FjaGUgZWxlbWVudCBpcyByZWZlcmVuY2UgY291bnRlZCBhbmQgY29udGFpbnMKKyAgIGV4cGlyeSBhbmQgdXBkYXRlIHRpbWVzIGZvciB1c2UgaW4gY2FjaGUgbWFuYWdlbWVudC4KKzIvIEEgY2FjaGUgbmVlZHMgYSAiY2FjaGVfZGV0YWlsIiBzdHJ1Y3R1cmUgdGhhdAorICAgZGVzY3JpYmVzIHRoZSBjYWNoZS4gIFRoaXMgc3RvcmVzIHRoZSBoYXNoIHRhYmxlLCBhbmQgc29tZQorICAgcGFyYW1ldGVycyBmb3IgY2FjaGUgbWFuYWdlbWVudC4KKzMvIEEgY2FjaGUgbmVlZHMgYSBsb29rdXAgZnVuY3Rpb24uICBUaGlzIGlzIGNyZWF0ZWQgdXNpbmcKKyAgIHRoZSBEZWZpbmVDYWNoZUxvb2t1cCBtYWNyby4gIFRoaXMgbG9va3VwIGZ1bmN0aW9uIGlzIHVzZWQgYm90aAorICAgdG8gZmluZCBlbnRyaWVzIGFuZCB0byB1cGRhdGUgZW50cmllcy4gIFRoZSBub3JtYWwgbW9kZSBmb3IKKyAgIHVwZGF0aW5nIGFuIGVudHJ5IGlzIHRvIHJlcGxhY2UgdGhlIG9sZCBlbnRyeSB3aXRoIGEgbmV3CisgICBlbnRyeS4gIEhvd2V2ZXIgaXQgaXMgcG9zc2libGUgdG8gYWxsb3cgdXBkYXRlLWluLXBsYWNlCisgICBmb3IgdGhvc2UgY2FjaGVzIHdoZXJlIGl0IG1ha2VzIHNlbnNlIChubyBhdG9taWNpdHkgaXNzdWVzCisgICBvciBpbmRpcmVjdCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUpCis0LyBBIGNhY2hlIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgdXNpbmcgY2FjaGVfcmVnaXN0ZXIoKS4gIFRoaXMKKyAgIGluY2x1ZGVzIGluIG9uIGEgbGlzdCBvZiBjYWNoZXMgdGhhdCB3aWxsIGJlIHJlZ3VsYXJseQorICAgY2xlYW5lZCB0byBkaXNjYXJkIG9sZCBkYXRhLiAgRm9yIHRoaXMgdG8gd29yaywgc29tZQorICAgdGhyZWFkIG11c3QgcGVyaW9kaWNhbGx5IGNhbGwgY2FjaGVfY2xlYW4KKyAgIAorVXNpbmcgYSBjYWNoZQorLS0tLS0tLS0tLS0tLQorCitUbyBmaW5kIGEgdmFsdWUgaW4gYSBjYWNoZSwgY2FsbCB0aGUgbG9va3VwIGZ1bmN0aW9uIHBhc3NpbmcgaXQgYSB0aGUKK2RhdHVtIHdoaWNoIGNvbnRhaW5zIGtleSwgYW5kIHBvc3NpYmx5IGNvbnRlbnQsIGFuZCBhIGZsYWcgc2F5aW5nCit3aGV0aGVyIHRvIHVwZGF0ZSB0aGUgY2FjaGUgd2l0aCBuZXcgZGF0YSBmcm9tIHRoZSBkYXR1bS4gICBEZXBlbmRpbmcKK29uIGhvdyB0aGUgY2FjaGUgbG9va3VwIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBpdCBtYXkgdGFrZSBhbiBleHRyYQorYXJndW1lbnQgdG8gaWRlbnRpZnkgdGhlIHBhcnRpY3VsYXIgY2FjaGUgaW4gcXVlc3Rpb24uCisKK0V4Y2VwdCBpbiBjYXNlcyBvZiBrbWFsbG9jIGZhaWx1cmUsIHRoZSBsb29rdXAgZnVuY3Rpb24KK3dpbGwgcmV0dXJuIGEgbmV3IGRhdHVtIHdoaWNoIHdpbGwgc3RvcmUgdGhlIGtleSBhbmQKK21heSBjb250YWluIHZhbGlkIGNvbnRlbnQsIG9yIG1heSBub3QuCitUaGlzIGRhdHVtIGlzIHR5cGljYWxseSBwYXNzZWQgdG8gY2FjaGVfY2hlY2sgd2hpY2ggZGV0ZXJtaW5lcyB0aGUKK3ZhbGlkaXR5IG9mIHRoZSBkYXR1bSBhbmQgbWF5IGxhdGVyIGluaXRpYXRlIGFuIHVwY2FsbCB0byBmaWxsCitpbiB0aGUgZGF0YS4KKworY2FjaGVfY2hlY2sgY2FuIGJlIHBhc3NlZCBhICJzdHJ1Y3QgY2FjaGVfcmVxICoiLiAgVGhpcyBzdHJ1Y3R1cmUgaXMKK3R5cGljYWxseSBlbWJlZGRlZCBpbiB0aGUgYWN0dWFsIHJlcXVlc3QgYW5kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhCitkZWZlcnJlZCBjb3B5IG9mIHRoZSByZXF1ZXN0IChzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxKS4gIFRoaXMgaXMKK2RvbmUgd2hlbiB0aGUgZm91bmQgY2FjaGUgaXRlbSBpcyBub3QgdXB0b2RhdGUsIGJ1dCB0aGUgaXMgcmVhc29uIHRvCitiZWxpZXZlIHRoYXQgdXNlcnNwYWNlIG1pZ2h0IHByb3ZpZGUgaW5mb3JtYXRpb24gc29vbi4gIFdoZW4gdGhlIGNhY2hlCitpdGVtIGRvZXMgYmVjb21lIHZhbGlkLCB0aGUgZGVmZXJyZWQgY29weSBvZiB0aGUgcmVxdWVzdCB3aWxsIGJlCityZXZpc2l0ZWQgKC0+cmV2aXNpdCkuICBJdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMgbWV0aG9kIHdpbGwKK3Jlc2NoZWR1bGUgdGhlIHJlcXVlc3QgZm9yIHByb2Nlc3NpbmcuCisKKworUG9wdWxhdGluZyBhIGNhY2hlCistLS0tLS0tLS0tLS0tLS0tLS0KKworRWFjaCBjYWNoZSBoYXMgYSBuYW1lLCBhbmQgd2hlbiB0aGUgY2FjaGUgaXMgcmVnaXN0ZXJlZCwgYSBkaXJlY3RvcnkKK3dpdGggdGhhdCBuYW1lIGlzIGNyZWF0ZWQgaW4gL3Byb2MvbmV0L3JwYworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIGZpbGUgY2FsbGVkICdjaGFubmVsJyB3aGljaCBpcyBhIGNoYW5uZWwKK2ZvciBjb21tdW5pY2F0aW5nIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIGZvciBwb3B1bGF0aW5nIHRoZSBjYWNoZS4KK1RoaXMgZGlyZWN0b3J5IG1heSBsYXRlciBjb250YWluIG90aGVyIGZpbGVzIG9mIGludGVyYWN0aW5nCit3aXRoIHRoZSBjYWNoZS4KKworVGhlICdjaGFubmVsJyB3b3JrcyBhIGJpdCBsaWtlIGEgZGF0YWdyYW0gc29ja2V0LiBFYWNoICd3cml0ZScgaXMKK3Bhc3NlZCBhcyBhIHdob2xlIHRvIHRoZSBjYWNoZSBmb3IgcGFyc2luZyBhbmQgaW50ZXJwcmV0YXRpb24uCitFYWNoIGNhY2hlIGNhbiB0cmVhdCB0aGUgd3JpdGUgcmVxdWVzdHMgZGlmZmVyZW50bHksIGJ1dCBpdCBpcworZXhwZWN0ZWQgdGhhdCBhIG1lc3NhZ2Ugd3JpdHRlbiB3aWxsIGNvbnRhaW46CisgIC0gYSBrZXkKKyAgLSBhbiBleHBpcnkgdGltZQorICAtIGEgY29udGVudC4KK3dpdGggdGhlIGludGVudGlvbiB0aGF0IGFuIGl0ZW0gaW4gdGhlIGNhY2hlIHdpdGggdGhlIGdpdmUga2V5CitzaG91bGQgYmUgY3JlYXRlIG9yIHVwZGF0ZWQgdG8gaGF2ZSB0aGUgZ2l2ZW4gY29udGVudCwgYW5kIHRoZQorZXhwaXJ5IHRpbWUgc2hvdWxkIGJlIHNldCBvbiB0aGF0IGl0ZW0uCisKK1JlYWRpbmcgZnJvbSBhIGNoYW5uZWwgaXMgYSBiaXQgbW9yZSBpbnRlcmVzdGluZy4gIFdoZW4gYSBjYWNoZQorbG9va3VwIGZhaWwsIG9yIHdoZW4gaXQgc3VjZWVkcyBidXQgZmluZHMgYW4gZW50cnkgdGhhdCBtYXkgc29vbgorZXhwaXJ5LCBhIHJlcXVlc3QgaXMgbG9kZ2VkIGZvciB0aGF0IGNhY2hlIGl0ZW0gdG8gYmUgdXBkYXRlZCBieQordXNlci1zcGFjZS4gIFRoZXNlIHJlcXVlc3RzIGFwcGVhciBpbiB0aGUgY2hhbm5lbCBmaWxlLgorCitTdWNjZXNzaXZlIHJlYWRzIHdpbGwgcmV0dXJuIHN1Y2Nlc3NpdmUgcmVxdWVzdHMuCitJZiB0aGVyZSBhcmUgbm8gbW9yZSByZXF1ZXN0cyB0byByZXR1cm4sIHJlYWQgd2lsbCByZXR1cm4gRU9GLCBidXQgYQorc2VsZWN0IG9yIHBvbGwgZm9yIHJlYWQgd2lsbCBibG9jayB3YWl0aW5nIGZvciBhbm90aGVyIHJlcXVlc3QgdG8gYmUKK2FkZGVkLgorCitUaHVzIGEgdXNlci1zcGFjZSBoZWxwZXIgaXMgbGlrZWx5IHRvOgorICBvcGVuIHRoZSBjaGFubmVsLgorICAgIHNlbGVjdCBmb3IgcmVhZGFibGUKKyAgICByZWFkIGEgcmVxdWVzdAorICAgIHdyaXRlIGEgcmVzcG9uc2UKKyAgbG9vcC4KKworSWYgaXQgZGllcyBhbmQgbmVlZHMgdG8gYmUgcmVzdGFydGVkLCBhbnkgcmVxdWVzdHMgdGhhdCBoYXZlIG5vdCBiZQorYW5zd2VyZWQgd2lsbCBzdGlsbCBhcHBlYXIgaW4gdGhlIGZpbGUgYW5kIHdpbGwgYmUgcmVhZCBieSB0aGUgbmV3CitpbnN0YW5jZSBvZiB0aGUgaGVscGVyLgorCitFYWNoIGNhY2hlIHNob3VsZCBkZWZpbmUgYSAiY2FjaGVfcGFyc2UiIG1ldGhvZCB3aGljaCB0YWtlcyBhIG1lc3NhZ2UKK3dyaXR0ZW4gZnJvbSB1c2VyLXNwYWNlIGFuZCBwcm9jZXNzZXMgaXQuICBJdCBzaG91bGQgcmV0dXJuIGFuIGVycm9yCisod2hpY2ggcHJvcGFnYXRlcyBiYWNrIHRvIHRoZSB3cml0ZSBzeXNjYWxsKSBvciAwLgorCitFYWNoIGNhY2hlIHNob3VsZCBhbHNvIGRlZmluZSBhICJjYWNoZV9yZXF1ZXN0IiBtZXRob2Qgd2hpY2gKK3Rha2VzIGEgY2FjaGUgaXRlbSBhbmQgZW5jb2RlcyBhIHJlcXVlc3QgaW50byB0aGUgYnVmZmVyCitwcm92aWRlZC4KKworCitOb3RlOiBJZiBhIGNhY2hlIGhhcyBubyBhY3RpdmUgcmVhZGVycyBvbiB0aGUgY2hhbm5lbCwgYW5kIGhhcyBoYWQgbm90CithY3RpdmUgcmVhZGVycyBmb3IgbW9yZSB0aGFuIDYwIHNlY29uZHMsIGZ1cnRoZXIgcmVxdWVzdHMgd2lsbCBub3QgYmUKK2FkZGVkIHRvIHRoZSBjaGFubmVsIGJ1dCBpbnN0ZWFkIGFsbCBsb29rcyB0aGF0IGRvIG5vdCBmaW5kIGEgdmFsaWQKK2VudHJ5IHdpbGwgZmFpbC4gIFRoaXMgaXMgcGFydGx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBUaGUKK3ByZXZpb3VzIG5mcyBleHBvcnRzIHRhYmxlIHdhcyBkZWVtZWQgdG8gYmUgYXV0aG9yaXRhdGl2ZSBhbmQgYQorZmFpbGVkIGxvb2t1cCBtZWFudCBhIGRlZmluaXRlICdubycuCisKK3JlcXVlc3QvcmVzcG9uc2UgZm9ybWF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsZSBlYWNoIGNhY2hlIGlzIGZyZWUgdG8gdXNlIGl0J3Mgb3duIGZvcm1hdCBmb3IgcmVxdWVzdHMKK2FuZCByZXNwb25zZXMgb3ZlciBjaGFubmVsLCB0aGUgZm9sbG93aW5nIGlzIHJlY29tbWVuZGVkIGFyZQorYXBwcm9wcmlhdGUgYW5kIHN1cHBvcnQgcm91dGluZXMgYXJlIGF2YWlsYWJsZSB0byBoZWxwOgorRWFjaCByZXF1ZXN0IG9yIHJlc3BvbnNlIHJlY29yZCBzaG91bGQgYmUgcHJpbnRhYmxlIEFTQ0lJCit3aXRoIHByZWNpc2VseSBvbmUgbmV3bGluZSBjaGFyYWN0ZXIgd2hpY2ggc2hvdWxkIGJlIGF0IHRoZSBlbmQuCitGaWVsZHMgd2l0aGluIHRoZSByZWNvcmQgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSBzcGFjZXMsIG5vcm1hbGx5IG9uZS4KK0lmIHNwYWNlcywgbmV3bGluZXMsIG9yIG51bCBjaGFyYWN0ZXJzIGFyZSBuZWVkZWQgaW4gYSBmaWVsZCB0aGV5CittdWNoIGJlIHF1b3Rlcy4gIHR3byBtZWNoYW5pc21zIGFyZSBhdmFpbGFibGU6CisxLyBJZiBhIGZpZWxkIGJlZ2lucyAnXHgnIHRoZW4gaXQgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mCisgICBoZXggZGlnaXRzLCBhbmQgcGFpcnMgb2YgdGhlc2UgZGlnaXRzIHByb3ZpZGUgdGhlIGJ5dGVzIGluIHRoZQorICAgZmllbGQuCisyLyBvdGhlcndpc2UgYSBcIGluIHRoZSBmaWVsZCBtdXN0IGJlIGZvbGxvd2VkIGJ5IDMgb2N0YWwgZGlnaXRzCisgICB3aGljaCBnaXZlIHRoZSBjb2RlIGZvciBhIGJ5dGUuICBPdGhlciBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkCisgICBhcyB0aGVtIHNlbHZlcy4gIEF0IHRoZSB2ZXJ5IGxlYXN0LCBzcGFjZSwgbmV3bGluZXMgbnVsLCBhbmQKKyAgICdcJyBtdXN0IGJlIHF1b3RlZCBpbiB0aGlzIHdheS4KKyAgIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ydGMudHh0IGIvRG9jdW1lbnRhdGlvbi9ydGMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDE3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3J0Yy50eHQKQEAgLTAsMCArMSwyODIgQEAKKworCVJlYWwgVGltZSBDbG9jayBEcml2ZXIgZm9yIExpbnV4CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWxsIFBDcyAoZXZlbiBBbHBoYSBtYWNoaW5lcykgaGF2ZSBhIFJlYWwgVGltZSBDbG9jayBidWlsdCBpbnRvIHRoZW0uCitVc3VhbGx5IHRoZXkgYXJlIGJ1aWx0IGludG8gdGhlIGNoaXBzZXQgb2YgdGhlIGNvbXB1dGVyLCBidXQgc29tZSBtYXkKK2FjdHVhbGx5IGhhdmUgYSBNb3Rvcm9sYSBNQzE0NjgxOCAob3IgY2xvbmUpIG9uIHRoZSBib2FyZC4gVGhpcyBpcyB0aGUKK2Nsb2NrIHRoYXQga2VlcHMgdGhlIGRhdGUgYW5kIHRpbWUgd2hpbGUgeW91ciBjb21wdXRlciBpcyB0dXJuZWQgb2ZmLgorCitIb3dldmVyIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgc2lnbmFscyBmcm9tIGEgc2xvdyAySHogdG8gYQorcmVsYXRpdmVseSBmYXN0IDgxOTJIeiwgaW4gaW5jcmVtZW50cyBvZiBwb3dlcnMgb2YgdHdvLiBUaGVzZSBzaWduYWxzCithcmUgcmVwb3J0ZWQgYnkgaW50ZXJydXB0IG51bWJlciA4LiAoT2ghIFNvICp0aGF0KiBpcyB3aGF0IElSUSA4IGlzCitmb3IuLi4pIEl0IGNhbiBhbHNvIGZ1bmN0aW9uIGFzIGEgMjRociBhbGFybSwgcmFpc2luZyBJUlEgOCB3aGVuIHRoZQorYWxhcm0gZ29lcyBvZmYuIFRoZSBhbGFybSBjYW4gYWxzbyBiZSBwcm9ncmFtbWVkIHRvIG9ubHkgY2hlY2sgYW55CitzdWJzZXQgb2YgdGhlIHRocmVlIHByb2dyYW1tYWJsZSB2YWx1ZXMsIG1lYW5pbmcgdGhhdCBpdCBjb3VsZCBiZSBzZXQgdG8KK3Jpbmcgb24gdGhlIDMwdGggc2Vjb25kIG9mIHRoZSAzMHRoIG1pbnV0ZSBvZiBldmVyeSBob3VyLCBmb3IgZXhhbXBsZS4KK1RoZSBjbG9jayBjYW4gYWxzbyBiZSBzZXQgdG8gZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHVwb24gZXZlcnkgY2xvY2sKK3VwZGF0ZSwgdGh1cyBnZW5lcmF0aW5nIGEgMUh6IHNpZ25hbC4KKworVGhlIGludGVycnVwdHMgYXJlIHJlcG9ydGVkIHZpYSAvZGV2L3J0YyAobWFqb3IgMTAsIG1pbm9yIDEzNSwgcmVhZCBvbmx5CitjaGFyYWN0ZXIgZGV2aWNlKSBpbiB0aGUgZm9ybSBvZiBhbiB1bnNpZ25lZCBsb25nLiBUaGUgbG93IGJ5dGUgY29udGFpbnMKK3RoZSB0eXBlIG9mIGludGVycnVwdCAodXBkYXRlLWRvbmUsIGFsYXJtLXJhbmcsIG9yIHBlcmlvZGljKSB0aGF0IHdhcworcmFpc2VkLCBhbmQgdGhlIHJlbWFpbmluZyBieXRlcyBjb250YWluIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBzaW5jZQordGhlIGxhc3QgcmVhZC4gIFN0YXR1cyBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZCB0aHJvdWdoIHRoZSBwc2V1ZG8tZmlsZQorL3Byb2MvZHJpdmVyL3J0YyBpZiB0aGUgL3Byb2MgZmlsZXN5c3RlbSB3YXMgZW5hYmxlZC4gIFRoZSBkcml2ZXIgaGFzCitidWlsdCBpbiBsb2NraW5nIHNvIHRoYXQgb25seSBvbmUgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIGhhdmUgdGhlIC9kZXYvcnRjCitpbnRlcmZhY2Ugb3BlbiBhdCBhIHRpbWUuCisKK0EgdXNlciBwcm9jZXNzIGNhbiBtb25pdG9yIHRoZXNlIGludGVycnVwdHMgYnkgZG9pbmcgYSByZWFkKDIpIG9yIGEKK3NlbGVjdCgyKSBvbiAvZGV2L3J0YyAtLSBlaXRoZXIgd2lsbCBibG9jay9zdG9wIHRoZSB1c2VyIHByb2Nlc3MgdW50aWwKK3RoZSBuZXh0IGludGVycnVwdCBpcyByZWNlaXZlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIHRoaW5ncyBsaWtlCityZWFzb25hYmx5IGhpZ2ggZnJlcXVlbmN5IGRhdGEgYWNxdWlzaXRpb24gd2hlcmUgb25lIGRvZXNuJ3Qgd2FudCB0bworYnVybiB1cCAxMDAlIENQVSBieSBwb2xsaW5nIGdldHRpbWVvZmRheSBldGMuIGV0Yy4KKworQXQgaGlnaCBmcmVxdWVuY2llcywgb3IgdW5kZXIgaGlnaCBsb2FkcywgdGhlIHVzZXIgcHJvY2VzcyBzaG91bGQgY2hlY2sKK3RoZSBudW1iZXIgb2YgaW50ZXJydXB0cyByZWNlaXZlZCBzaW5jZSB0aGUgbGFzdCByZWFkIHRvIGRldGVybWluZSBpZgordGhlcmUgaGFzIGJlZW4gYW55IGludGVycnVwdCAicGlsZXVwIiBzbyB0byBzcGVhay4gSnVzdCBmb3IgcmVmZXJlbmNlLCBhCit0eXBpY2FsIDQ4Ni0zMyBydW5uaW5nIGEgdGlnaHQgcmVhZCBsb29wIG9uIC9kZXYvcnRjIHdpbGwgc3RhcnQgdG8gc3VmZmVyCitvY2Nhc2lvbmFsIGludGVycnVwdCBwaWxldXAgKGkuZS4gPiAxIElSUSBldmVudCBzaW5jZSBsYXN0IHJlYWQpIGZvcgorZnJlcXVlbmNpZXMgYWJvdmUgMTAyNEh6LiBTbyB5b3UgcmVhbGx5IHNob3VsZCBjaGVjayB0aGUgaGlnaCBieXRlcworb2YgdGhlIHZhbHVlIHlvdSByZWFkLCBlc3BlY2lhbGx5IGF0IGZyZXF1ZW5jaWVzIGFib3ZlIHRoYXQgb2YgdGhlCitub3JtYWwgdGltZXIgaW50ZXJydXB0LCB3aGljaCBpcyAxMDBIei4KKworUHJvZ3JhbW1pbmcgYW5kL29yIGVuYWJsaW5nIGludGVycnVwdCBmcmVxdWVuY2llcyBncmVhdGVyIHRoYW4gNjRIeiBpcworb25seSBhbGxvd2VkIGJ5IHJvb3QuIFRoaXMgaXMgcGVyaGFwcyBhIGJpdCBjb25zZXJ2YXRpdmUsIGJ1dCB3ZSBkb24ndCB3YW50CithbiBldmlsIHVzZXIgZ2VuZXJhdGluZyBsb3RzIG9mIElSUXMgb24gYSBzbG93IDM4NnN4LTE2LCB3aGVyZSBpdCBtaWdodCBoYXZlCithIG5lZ2F0aXZlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gIE5vdGUgdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgb25seQorYSBmZXcgbGluZXMgb2YgY29kZSB0byBtaW5pbWl6ZSBhbnkgcG9zc2liaWxpdHkgb2YgdGhpcyBlZmZlY3QuCisKK0Fsc28sIGlmIHRoZSBrZXJuZWwgdGltZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCBhbiBleHRlcm5hbCBzb3VyY2UsIHRoZSAKK2tlcm5lbCB3aWxsIHdyaXRlIHRoZSB0aW1lIGJhY2sgdG8gdGhlIENNT1MgY2xvY2sgZXZlcnkgMTEgbWludXRlcy4gSW4gCit0aGUgcHJvY2VzcyBvZiBkb2luZyB0aGlzLCB0aGUga2VybmVsIGJyaWVmbHkgdHVybnMgb2ZmIFJUQyBwZXJpb2RpYyAKK2ludGVycnVwdHMsIHNvIGJlIGF3YXJlIG9mIHRoaXMgaWYgeW91IGFyZSBkb2luZyBzZXJpb3VzIHdvcmsuIElmIHlvdQorZG9uJ3Qgc3luY2hyb25pemUgdGhlIGtlcm5lbCB0aW1lIHdpdGggYW4gZXh0ZXJuYWwgc291cmNlICh2aWEgbnRwIG9yCit3aGF0ZXZlcikgdGhlbiB0aGUga2VybmVsIHdpbGwga2VlcCBpdHMgaGFuZHMgb2ZmIHRoZSBSVEMsIGFsbG93aW5nIHlvdQorZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgZGV2aWNlIGZvciB5b3VyIGFwcGxpY2F0aW9ucy4KKworVGhlIGFsYXJtIGFuZC9vciBpbnRlcnJ1cHQgZnJlcXVlbmN5IGFyZSBwcm9ncmFtbWVkIGludG8gdGhlIFJUQyB2aWEKK3ZhcmlvdXMgaW9jdGwoMikgY2FsbHMgYXMgbGlzdGVkIGluIC4vaW5jbHVkZS9saW51eC9ydGMuaAorUmF0aGVyIHRoYW4gd3JpdGUgNTAgcGFnZXMgZGVzY3JpYmluZyB0aGUgaW9jdGwoKSBhbmQgc28gb24sIGl0IGlzCitwZXJoYXBzIG1vcmUgdXNlZnVsIHRvIGluY2x1ZGUgYSBzbWFsbCB0ZXN0IHByb2dyYW0gdGhhdCBkZW1vbnN0cmF0ZXMKK2hvdyB0byB1c2UgdGhlbSwgYW5kIGRlbW9uc3RyYXRlcyB0aGUgZmVhdHVyZXMgb2YgdGhlIGRyaXZlci4gVGhpcyBpcworcHJvYmFibHkgYSBsb3QgbW9yZSB1c2VmdWwgdG8gcGVvcGxlIGludGVyZXN0ZWQgaW4gd3JpdGluZyBhcHBsaWNhdGlvbnMKK3RoYXQgd2lsbCBiZSB1c2luZyB0aGlzIGRyaXZlci4KKworCQkJCQkJUGF1bCBHb3J0bWFrZXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0gODwgLS0tLS0tLS0tLS0tLS0tLSA4PCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKgorICoJUmVhbCBUaW1lIENsb2NrIERyaXZlciBUZXN0L0V4YW1wbGUgUHJvZ3JhbQorICoKKyAqCUNvbXBpbGUgd2l0aDoKKyAqCQlnY2MgLXMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyBydGN0ZXN0LmMgLW8gcnRjdGVzdAorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5NiwgUGF1bCBHb3J0bWFrZXIuCisgKgorICoJUmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCisgKglpbmNsdWRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50IG1haW4odm9pZCkgeworCitpbnQgaSwgZmQsIHJldHZhbCwgaXJxY291bnQgPSAwOwordW5zaWduZWQgbG9uZyB0bXAsIGRhdGE7CitzdHJ1Y3QgcnRjX3RpbWUgcnRjX3RtOworCitmZCA9IG9wZW4gKCIvZGV2L3J0YyIsIE9fUkRPTkxZKTsKKworaWYgKGZkID09ICAtMSkgeworCXBlcnJvcigiL2Rldi9ydGMiKTsKKwlleGl0KGVycm5vKTsKK30KKworZnByaW50ZihzdGRlcnIsICJcblx0XHRcdFJUQyBEcml2ZXIgVGVzdCBFeGFtcGxlLlxuXG4iKTsKKworLyogVHVybiBvbiB1cGRhdGUgaW50ZXJydXB0cyAob25lIHBlciBzZWNvbmQpICovCityZXR2YWwgPSBpb2N0bChmZCwgUlRDX1VJRV9PTiwgMCk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJpb2N0bCIpOworCWV4aXQoZXJybm8pOworfQorCitmcHJpbnRmKHN0ZGVyciwgIkNvdW50aW5nIDUgdXBkYXRlICgxL3NlYykgaW50ZXJydXB0cyBmcm9tIHJlYWRpbmcgL2Rldi9ydGM6Iik7CitmZmx1c2goc3RkZXJyKTsKK2ZvciAoaT0xOyBpPDY7IGkrKykgeworCS8qIFRoaXMgcmVhZCB3aWxsIGJsb2NrICovCisJcmV0dmFsID0gcmVhZChmZCwgJmRhdGEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoInJlYWQiKTsKKwkJZXhpdChlcnJubyk7CisJfQorCWZwcmludGYoc3RkZXJyLCAiICVkIixpKTsKKwlmZmx1c2goc3RkZXJyKTsKKwlpcnFjb3VudCsrOworfQorCitmcHJpbnRmKHN0ZGVyciwgIlxuQWdhaW4sIGZyb20gdXNpbmcgc2VsZWN0KDIpIG9uIC9kZXYvcnRjOiIpOworZmZsdXNoKHN0ZGVycik7Citmb3IgKGk9MTsgaTw2OyBpKyspIHsKKwlzdHJ1Y3QgdGltZXZhbCB0diA9IHs1LCAwfTsJLyogNSBzZWNvbmQgdGltZW91dCBvbiBzZWxlY3QgKi8KKwlmZF9zZXQgcmVhZGZkczsKKworCUZEX1pFUk8oJnJlYWRmZHMpOworCUZEX1NFVChmZCwgJnJlYWRmZHMpOworCS8qIFRoZSBzZWxlY3Qgd2lsbCB3YWl0IHVudGlsIGFuIFJUQyBpbnRlcnJ1cHQgaGFwcGVucy4gKi8KKwlyZXR2YWwgPSBzZWxlY3QoZmQrMSwgJnJlYWRmZHMsIE5VTEwsIE5VTEwsICZ0dik7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoInNlbGVjdCIpOworCQlleGl0KGVycm5vKTsKKwl9CisJLyogVGhpcyByZWFkIHdvbid0IGJsb2NrIHVubGlrZSB0aGUgc2VsZWN0LWxlc3MgY2FzZSBhYm92ZS4gKi8KKwlyZXR2YWwgPSByZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCXBlcnJvcigicmVhZCIpOworCQlleGl0KGVycm5vKTsKKwl9CisJZnByaW50ZihzdGRlcnIsICIgJWQiLGkpOworCWZmbHVzaChzdGRlcnIpOworCWlycWNvdW50Kys7Cit9CisKKy8qIFR1cm4gb2ZmIHVwZGF0ZSBpbnRlcnJ1cHRzICovCityZXR2YWwgPSBpb2N0bChmZCwgUlRDX1VJRV9PRkYsIDApOworaWYgKHJldHZhbCA9PSAtMSkgeworCXBlcnJvcigiaW9jdGwiKTsKKwlleGl0KGVycm5vKTsKK30KKworLyogUmVhZCB0aGUgUlRDIHRpbWUvZGF0ZSAqLworcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19SRF9USU1FLCAmcnRjX3RtKTsKK2lmIChyZXR2YWwgPT0gLTEpIHsKKwlwZXJyb3IoImlvY3RsIik7CisJZXhpdChlcnJubyk7Cit9CisKK2ZwcmludGYoc3RkZXJyLCAiXG5cbkN1cnJlbnQgUlRDIGRhdGUvdGltZSBpcyAlZC0lZC0lZCwgJTAyZDolMDJkOiUwMmQuXG4iLAorCXJ0Y190bS50bV9tZGF5LCBydGNfdG0udG1fbW9uICsgMSwgcnRjX3RtLnRtX3llYXIgKyAxOTAwLAorCXJ0Y190bS50bV9ob3VyLCBydGNfdG0udG1fbWluLCBydGNfdG0udG1fc2VjKTsKKworLyogU2V0IHRoZSBhbGFybSB0byA1IHNlYyBpbiB0aGUgZnV0dXJlLCBhbmQgY2hlY2sgZm9yIHJvbGxvdmVyICovCitydGNfdG0udG1fc2VjICs9IDU7CitpZiAocnRjX3RtLnRtX3NlYyA+PSA2MCkgeworCXJ0Y190bS50bV9zZWMgJT0gNjA7CisJcnRjX3RtLnRtX21pbisrOworfQoraWYgIChydGNfdG0udG1fbWluID09IDYwKSB7CisJcnRjX3RtLnRtX21pbiA9IDA7CisJcnRjX3RtLnRtX2hvdXIrKzsKK30KK2lmICAocnRjX3RtLnRtX2hvdXIgPT0gMjQpCisJcnRjX3RtLnRtX2hvdXIgPSAwOworCityZXR2YWwgPSBpb2N0bChmZCwgUlRDX0FMTV9TRVQsICZydGNfdG0pOworaWYgKHJldHZhbCA9PSAtMSkgeworCXBlcnJvcigiaW9jdGwiKTsKKwlleGl0KGVycm5vKTsKK30KKworLyogUmVhZCB0aGUgY3VycmVudCBhbGFybSBzZXR0aW5ncyAqLworcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19BTE1fUkVBRCwgJnJ0Y190bSk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJpb2N0bCIpOworCWV4aXQoZXJybm8pOworfQorCitmcHJpbnRmKHN0ZGVyciwgIkFsYXJtIHRpbWUgbm93IHNldCB0byAlMDJkOiUwMmQ6JTAyZC5cbiIsCisJcnRjX3RtLnRtX2hvdXIsIHJ0Y190bS50bV9taW4sIHJ0Y190bS50bV9zZWMpOworCisvKiBFbmFibGUgYWxhcm0gaW50ZXJydXB0cyAqLworcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19BSUVfT04sIDApOworaWYgKHJldHZhbCA9PSAtMSkgeworCXBlcnJvcigiaW9jdGwiKTsKKwlleGl0KGVycm5vKTsKK30KKworZnByaW50ZihzdGRlcnIsICJXYWl0aW5nIDUgc2Vjb25kcyBmb3IgYWxhcm0uLi4iKTsKK2ZmbHVzaChzdGRlcnIpOworLyogVGhpcyBibG9ja3MgdW50aWwgdGhlIGFsYXJtIHJpbmcgY2F1c2VzIGFuIGludGVycnVwdCAqLworcmV0dmFsID0gcmVhZChmZCwgJmRhdGEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJyZWFkIik7CisJZXhpdChlcnJubyk7Cit9CitpcnFjb3VudCsrOworZnByaW50ZihzdGRlcnIsICIgb2theS4gQWxhcm0gcmFuZy5cbiIpOworCisvKiBEaXNhYmxlIGFsYXJtIGludGVycnVwdHMgKi8KK3JldHZhbCA9IGlvY3RsKGZkLCBSVENfQUlFX09GRiwgMCk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJpb2N0bCIpOworCWV4aXQoZXJybm8pOworfQorCisvKiBSZWFkIHBlcmlvZGljIElSUSByYXRlICovCityZXR2YWwgPSBpb2N0bChmZCwgUlRDX0lSUVBfUkVBRCwgJnRtcCk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJpb2N0bCIpOworCWV4aXQoZXJybm8pOworfQorZnByaW50ZihzdGRlcnIsICJcblBlcmlvZGljIElSUSByYXRlIHdhcyAlbGRIei5cbiIsIHRtcCk7CisKK2ZwcmludGYoc3RkZXJyLCAiQ291bnRpbmcgMjAgaW50ZXJydXB0cyBhdDoiKTsKK2ZmbHVzaChzdGRlcnIpOworCisvKiBUaGUgZnJlcXVlbmNpZXMgMTI4SHosIDI1Nkh6LCAuLi4gODE5Mkh6IGFyZSBvbmx5IGFsbG93ZWQgZm9yIHJvb3QuICovCitmb3IgKHRtcD0yOyB0bXA8PTY0OyB0bXAqPTIpIHsKKworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfSVJRUF9TRVQsIHRtcCk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoImlvY3RsIik7CisJCWV4aXQoZXJybm8pOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiXG4lbGRIejpcdCIsIHRtcCk7CisJZmZsdXNoKHN0ZGVycik7CisKKwkvKiBFbmFibGUgcGVyaW9kaWMgaW50ZXJydXB0cyAqLworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfUElFX09OLCAwKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCXBlcnJvcigiaW9jdGwiKTsKKwkJZXhpdChlcnJubyk7CisJfQorCisJZm9yIChpPTE7IGk8MjE7IGkrKykgeworCQkvKiBUaGlzIGJsb2NrcyAqLworCQlyZXR2YWwgPSByZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwkJaWYgKHJldHZhbCA9PSAtMSkgeworCQkJcGVycm9yKCJyZWFkIik7CisJCQlleGl0KGVycm5vKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgIiAlZCIsaSk7CisJCWZmbHVzaChzdGRlcnIpOworCQlpcnFjb3VudCsrOworCX0KKworCS8qIERpc2FibGUgcGVyaW9kaWMgaW50ZXJydXB0cyAqLworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfUElFX09GRiwgMCk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoImlvY3RsIik7CisJCWV4aXQoZXJybm8pOworCX0KK30KKworZnByaW50ZihzdGRlcnIsICJcblxuXHRcdFx0ICoqKiBUZXN0IGNvbXBsZXRlICoqKlxuIik7CitmcHJpbnRmKHN0ZGVyciwgIlxuVHlwaW5nIFwiY2F0IC9wcm9jL2ludGVycnVwdHNcIiB3aWxsIHNob3cgJWQgbW9yZSBldmVudHMgb24gSVJRIDguXG5cbiIsCisJCQkJCQkJCSBpcnFjb3VudCk7CisKK2Nsb3NlKGZkKTsKK3JldHVybiAwOworCit9IC8qIGVuZCBtYWluICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvMzI3MC5DaGFuZ2VMb2cgYi9Eb2N1bWVudGF0aW9uL3MzOTAvMzI3MC5DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYzM2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC8zMjcwLkNoYW5nZUxvZwpAQCAtMCwwICsxLDQ0IEBACitDaGFuZ2VMb2cgZm9yIHRoZSBVVFMgR2xvYmFsIDMyNzAtc3VwcG9ydCBwYXRjaAorCitTZXAgMjAwMjoJR2V0IGJvb3R1cCBjb2xvcnMgcmlnaHQgb24gMzI3MCBjb25zb2xlCisJKiBJbiB0dWJ0dHlibGQuYywgc3Vic3RhbnRpYWxseSByZXZpc2UgRVNDIHByb2Nlc3Npbmcgc28gdGhhdAorCSAgRVNDIHNlcXVlbmNlcyAoZXNwZWNpYWxseSBjb2xvcmluZyBvbmVzKSBhbmQgdGhlIHN0cmluZ3MKKwkgIHRoZXkgYWZmZWN0IHdvcmsgYXMgcmlnaHQgYXMgMzI3MCBjYW4gZ2V0IHRoZW0uICBBbHNvLCBzZXQKKwkgIHNjcmVlbiBoZWlnaHQgdG8gb21pdCB0aGUgdHdvIHJvd3MgdXNlZCBmb3IgaW5wdXQgYXJlYSwgaW4KKwkgIHR0eTMyNzBfb3BlbigpIGluIHR1YnR0eS5jLgorCitTZXAgMjAwMjoJRHluYW1pY2FsbHkgZ2V0IDMyNzAgaW5wdXQgYnVmZmVyCisJKiBPdmVyc2l6ZSAzMjcwIHNjcmVlbiB3aWR0aHMgbWF5IGV4Y2VlZCBHRU9NX01BWElOUExFTiBjb2x1bW5zLAorCSAgc28gZ2V0IGlucHV0LWFyZWEgYnVmZmVyIGR5bmFtaWNhbGx5IHdoZW4gc2l6aW5nIHRoZSBkZXZpY2UgaW4KKwkgIHR1Ym1ha2VtaW4oKSBpbiB0dWJhbGwuYyAoaWYgaXQncyB0aGUgY29uc29sZSkgb3IgdHR5MzI3MF9vcGVuKCkKKwkgIGluIHR1YnR0eS5jIChpZiBuZWVkZWQpLiAgQ2hhbmdlIHR1YnAtPnR0eV9pbnB1dCB0byBiZSBhCisJICBwb2ludGVyIHJhdGhlciB0aGFuIGFuIGFycmF5LCBpbiB0dWJpby5oLgorCitTZXAgMjAwMjoJRml4IHR1YmZzIGttYWxsb2MoKXMKKwkqIERvIHJlYWQgYW5kIHdyaXRlIGxlbmd0aHMgY29ycmVjdGx5IGluIGZzMzI3MF9yZWFkKCkKKwkgIGFuZCBmczMyNzBfd3JpdGUoKSwgd2hpbHN0IG5ldmVyIGFza2luZyBrbWFsbG9jKCkKKwkgIGZvciBtb3JlIHRoYW4gMHg4MDAgYnl0ZXMuICBBZmZlY3RzIHR1YmZzLmMgYW5kIHR1YmlvLmguCisKK1NlcCAyMDAyOglSZWNvZ25pemUgMzI3MCBjb250cm9sIHVuaXQgdHlwZSAzMTc0CisJKiBSZWNvZ25pemUgY29udHJvbC11bml0IHR5cGUgMHgzMTc0IGFzIHdlbGwgYXMgMHgzMjc/LgorCSAgVGhlIElCTSAyMDQ3IGRldmljZSBlbXVsYXRlcyBhIDMxNzQgY29udHJvbCB1bml0LgorCSAgTW9kdWxhcml6ZSBjb250cm9sLXVuaXQgcmVjb2duaXRpb24gaW4gdHViYWxsLmMgYnkKKwkgIGFkZGluZyBhbmQgaW52b2tpbmcgbmV3IHR1YjMyNzBfaXNfb3VycygpLgorCitBcHIgMjAwMjoJRml4IDMyNzAgY29uc29sZSByZWJvb3QgbG9vcAorCSogKEJlbGF0ZWQgbG9nIGVudHJ5KSBGaXhlZCByZWJvb3QgbG9vcCBpZiAzMjcwIGNvbnNvbGUsCisJICBpbiB0dWJ0dHkuYzp0dHUzMjcwX2JoKCkuCisKK0ZlYiA2LCAyMDAxOgorCSogVGhpcyBjaGFuZ2Vsb2cgaXMgbmV3CisJKiB0dWIzMjcwIG5vdyBzdXBwb3J0cyAzMjcwIGNvbnNvbGU6CisJCVNwZWNpZnkgeSBmb3IgQ09ORklHXzMyNzAgYW5kIHkgZm9yIENPTkZJR18zMjcwX0NPTlNPTEUuCisJCVN1cHBvcnQgZm9yIDMyMTUgd2lsbCBub3QgYXBwZWFyIGlmIDMyNzAgY29uc29sZSBzdXBwb3J0CisJCWlzIGNob3Nlbi4KKwkJTk9URTogIFRoZSBkZWZhdWx0IGlzIDMyNzAgY29uc29sZSBzdXBwb3J0LCBOT1QgMzIxNS4KKwkqIHRoZSBjb21wb25lbnRzIGFyZSByZW1vZHVsYXJpemVkOiBhZGRlZCBzb3VyY2UgbW9kdWxlcyBhcmUKKwkgIHR1YnR0eWJsZC5jIGFuZCB0dWJ0dHlzY2wuYywgZm9yIHNjcmVlbi1idWlsZGluZyBjb2RlIGFuZAorCSAgc2Nyb2xsLXRpbWVvdXQgY29kZS4KKwkqIHR1YjMyNzAgc291cmNlIGZvciB0aGlzICgyLjQuMCkgdmVyc2lvbiBpcyAjaWZkZWZmZWQgdG8KKwkgIGJ1aWxkIHdpdGggYm90aCAyLjQuMCBhbmQgMi4yLjE2LjIuCisJKiBjb2xvciBzdXBwb3J0IGFuZCBtaW5pbWFsIG90aGVyIEVTQy1zZXF1ZW5jZSBzdXBwb3J0IGlzIGFkZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwLzMyNzAudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwLzMyNzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDQ0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvMzI3MC50eHQKQEAgLTAsMCArMSwyNzQgQEAKK0lCTSAzMjcwIERpc3BsYXkgU3lzdGVtIHN1cHBvcnQKKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgZHJpdmVyIHRoYXQgc3VwcG9ydHMgbG9jYWwgY2hhbm5lbCBhdHRhY2htZW50CitvZiBJQk0gMzI3MCBkZXZpY2VzLiAgSXQgY29uc2lzdHMgb2YgdGhyZWUgc2VjdGlvbnM6CisJKiBJbnRyb2R1Y3Rpb24KKwkqIEluc3RhbGxhdGlvbgorCSogT3BlcmF0aW9uCisKKworSU5UUk9EVUNUSU9OLgorCitUaGlzIHBhcGVyIGRlc2NyaWJlcyBpbnN0YWxsaW5nIGFuZCBvcGVyYXRpbmcgMzI3MCBkZXZpY2VzIHVuZGVyCitMaW51eC8zOTAuICBBIDMyNzAgZGV2aWNlIGlzIGEgYmxvY2stbW9kZSByb3dzLWFuZC1jb2x1bW5zIHRlcm1pbmFsIG9mCit3aGljaCBJJ20gc3VyZSBodW5kcmVkcyBvZiBtaWxsaW9ucyB3ZXJlIHNvbGQgYnkgSUJNIGFuZCBjbG9uZW1ha2VycwordHdlbnR5IGFuZCB0aGlydHkgeWVhcnMgYWdvLgorCitZb3UgbWF5IGhhdmUgMzI3MHMgaW4taG91c2UgYW5kIG5vdCBrbm93IGl0LiAgSWYgeW91J3JlIHVzaW5nIHRoZQorVk0tRVNBIG9wZXJhdGluZyBzeXN0ZW0sIGRlZmluZSBhIDMyNzAgdG8geW91ciB2aXJ0dWFsIG1hY2hpbmUgYnkgdXNpbmcKK3RoZSBjb21tYW5kICJERUYgR1JBRiA8aGV4LWFkZHJlc3M+IiAgVGhpcyBwYXBlciBwcmVzdW1lcyB5b3Ugd2lsbCBiZQorZGVmaW5pbmcgZm91ciAzMjcwcyB3aXRoIHRoZSBDUC9DTVMgY29tbWFuZHMKKworCURFRiBHUkFGIDYyMAorCURFRiBHUkFGIDYyMQorCURFRiBHUkFGIDYyMgorCURFRiBHUkFGIDYyMworCitZb3VyIG5ldHdvcmsgY29ubmVjdGlvbiBmcm9tIFZNLUVTQSBhbGxvd3MgeW91IHRvIHVzZSB4MzI3MCwgdG4zMjcwLCBvcgorYW5vdGhlciAzMjcwIGVtdWxhdG9yLCBzdGFydGVkIGZyb20gYW4geHRlcm0gd2luZG93IG9uIHlvdXIgUEMgb3IKK3dvcmtzdGF0aW9uLiAgV2l0aCB0aGUgREVGIEdSQUYgY29tbWFuZCwgYW4gYXBwbGljYXRpb24gc3VjaCBhcyB4dGVybSwKK2FuZCB0aGlzIExpbnV4LTM5MCAzMjcwIGRyaXZlciwgeW91IGhhdmUgYW5vdGhlciB3YXkgb2YgdGFsa2luZyB0byB5b3VyCitMaW51eCBib3guCisKK1RoaXMgcGFwZXIgY292ZXJzIGluc3RhbGxhdGlvbiBvZiB0aGUgZHJpdmVyIGFuZCBvcGVyYXRpb24gb2YgYQorZGlhbGVkLWluIHgzMjcwLgorCisKK0lOU1RBTExBVElPTi4KKworWW91IGluc3RhbGwgdGhlIGRyaXZlciBieSBpbnN0YWxsaW5nIGEgcGF0Y2gsIGRvaW5nIGEga2VybmVsIGJ1aWxkLCBhbmQKK3J1bm5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IChjb25maWczMjcwLnNoLCBpbiB0aGlzIGRpcmVjdG9yeSkuCisKK1dBUk5JTkc6ICBJZiB5b3UgYXJlIHVzaW5nIDMyNzAgY29uc29sZSBzdXBwb3J0LCB5b3UgbXVzdCByZXJ1biB0aGUKK2NvbmZpZ3VyYXRpb24gc2NyaXB0IGV2ZXJ5IHRpbWUgeW91IGNoYW5nZSB0aGUgY29uc29sZSdzIGFkZHJlc3MgKHBlcmhhcHMKK2J5IHVzaW5nIHRoZSBjb25kZXY9IHBhcmFtZXRlciBpbiBzaWxvJ3MgL2Jvb3QvcGFybWZpbGUpLiAgTW9yZSBwcmVjaXNlbHksCit5b3Ugc2hvdWxkIHJlcnVuIHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdCBldmVyeSB0aW1lIHlvdXIgc2V0IG9mIDMyNzBzLAoraW5jbHVkaW5nIHRoZSBjb25zb2xlIDMyNzAsIGNoYW5nZXMgc3ViY2hhbm5lbCBpZGVudGlmaWVyIHJlbGF0aXZlIHRvCitvbmUgYW5vdGhlci4gIFJlSVBMIGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgcnVubmluZyB0aGUgY29uZmlndXJhdGlvbgorc2NyaXB0IGFuZCB0aGUgcmVzdWx0aW5nIC90bXAvbWtkZXYzMjcwLgorCitJZiB5b3UgaGF2ZSBjaG9zZW4gdG8gbWFrZSB0dWIzMjcwIGEgbW9kdWxlLCB5b3UgYWRkIGEgbGluZSB0bworL2V0Yy9tb2Rwcm9iZS5jb25mLiAgSWYgeW91IGFyZSB3b3JraW5nIG9uIGEgVk0gdmlydHVhbCBtYWNoaW5lLCB5b3UKK2NhbiB1c2UgREVGIEdSQUYgdG8gZGVmaW5lIHZpcnR1YWwgMzI3MCBkZXZpY2VzLgorCitZb3UgbWF5IGdlbmVyYXRlIGJvdGggMzI3MCBhbmQgMzIxNSBjb25zb2xlIHN1cHBvcnQsIG9yIG9uZSBvciB0aGUKK290aGVyLCBvciBuZWl0aGVyLiAgSWYgeW91IGdlbmVyYXRlIGJvdGgsIHRoZSBjb25zb2xlIHR5cGUgdW5kZXIgVk0gaXMKK25vdCBjaGFuZ2VkLiAgVXNlICNDUCBRIFRFUk0gdG8gc2VlIHdoYXQgdGhlIGN1cnJlbnQgY29uc29sZSB0eXBlIGlzLgorVXNlICNDUCBURVJNIENPTk1PREUgMzI3MCB0byBjaGFuZ2UgaXQgdG8gMzI3MC4gIElmIHlvdSBnZW5lcmF0ZSBvbmx5CiszMjcwIGNvbnNvbGUgc3VwcG9ydCwgdGhlbiB0aGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgY29udmVydHMgeW91ciBjb25zb2xlCithdCBib290IHRpbWUgdG8gYSAzMjcwIGlmIGl0IGlzIGEgMzIxNS4KKworSW4gYnJpZWYsIHRoZXNlIGFyZSB0aGUgc3RlcHM6CisJMS4gSW5zdGFsbCB0aGUgdHViMzI3MCBwYXRjaAorCTIuIChJZiBhIG1vZHVsZSkgYWRkIGEgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmYKKwkzLiAoSWYgVk0pIGRlZmluZSBkZXZpY2VzIHdpdGggREVGIEdSQUYKKwk0LiBSZWJvb3QKKwk1LiBDb25maWd1cmUKKworVG8gdGVzdCB0aGF0IGV2ZXJ5dGhpbmcgd29ya3MsIGFzc3VtaW5nIFZNIGFuZCB4MzI3MCwKKwkxLiBCcmluZyB1cCBhbiB4MzI3MCB3aW5kb3cuCisJMi4gVXNlIHRoZSBESUFMIGNvbW1hbmQgaW4gdGhhdCB3aW5kb3cuCisJMy4gWW91IHNob3VsZCBpbW1lZGlhdGVseSBzZWUgYSBMaW51eCBsb2dpbiBzY3JlZW4uCisKK0hlcmUgYXJlIHRoZSBpbnN0YWxsYXRpb24gc3RlcHMgaW4gZGV0YWlsOgorCisJMS4gIFRoZSAzMjcwIGRyaXZlciBpcyBhIHBhcnQgb2YgdGhlIG9mZmljaWFsIExpbnV4IGtlcm5lbAorCXNvdXJjZS4gIEJ1aWxkIGEgdHJlZSB3aXRoIHRoZSBrZXJuZWwgc291cmNlIGFuZCBhbnkgbmVjZXNzYXJ5CisJcGF0Y2hlcy4gIFRoZW4gZG8KKwkJbWFrZSBvbGRjb25maWcKKwkJKElmIHlvdSB3aXNoIHRvIGRpc2FibGUgMzIxNSBjb25zb2xlIHN1cHBvcnQsIGVkaXQKKwkJLmNvbmZpZzsgY2hhbmdlIENPTkZJR19UTjMyMTUncyB2YWx1ZSB0byAibiI7CisJCWFuZCByZXJ1biAibWFrZSBvbGRjb25maWciLikKKwkJbWFrZSBpbWFnZQorCQltYWtlIG1vZHVsZXMKKwkJbWFrZSBtb2R1bGVzX2luc3RhbGwKKworCTIuIChQZXJmb3JtIHRoaXMgc3RlcCBvbmx5IGlmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgdHViMzI3MCBhcyBhCisJbW9kdWxlLikgIEFkZCBhIGxpbmUgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mIHRvIGF1dG9tYXRpY2FsbHkKKwlsb2FkIHRoZSBkcml2ZXIgd2hlbiBpdCdzIG5lZWRlZC4gIFdpdGggdGhpcyBsaW5lIGFkZGVkLAorCXlvdSB3aWxsIHNlZSBsb2dpbiBwcm9tcHRzIGFwcGVhciBvbiB5b3VyIDMyNzBzIGFzIHNvb24gYXMKKwlib290IGlzIGNvbXBsZXRlIChvciB3aXRoIGVtdWxhdGVkIDMyNzBzLCBhcyBzb29uIGFzIHlvdSBkaWFsCisJaW50byB5b3VyIHZtIGd1ZXN0IHVzaW5nIHRoZSBjb21tYW5kICJESUFMIDx2bWd1ZXN0bmFtZT4iKS4KKwlTaW5jZSB0aGUgbGluZS1tb2RlIG1ham9yIG51bWJlciBpcyAyMjcsIHRoZSBsaW5lIHRvIGFkZCB0bworCS9ldGMvbW9kcHJvYmUuY29uZiBzaG91bGQgYmU6CisJCWFsaWFzIGNoYXItbWFqb3ItMjI3IHR1YjMyNzAKKworCTMuIERlZmluZSBncmFwaGljIGRldmljZXMgdG8geW91ciB2bSBndWVzdCBtYWNoaW5lLCBpZiB5b3UKKwloYXZlbid0IGFscmVhZHkuICBEZWZpbmUgdGhlbSBiZWZvcmUgeW91IHJlYm9vdCAocmVpcGwpOgorCQlERUZJTkUgR1JBRiA2MjAKKwkJREVGSU5FIEdSQUYgNjIxCisJCURFRklORSBHUkFGIDYyMgorCQlERUZJTkUgR1JBRiA2MjMKKworCTQuIFJlYm9vdC4gIFRoZSByZWJvb3QgcHJvY2VzcyBzY2FucyBoYXJkd2FyZSBkZXZpY2VzLCBpbmNsdWRpbmcKKwkzMjcwcywgYW5kIHRoaXMgZW5hYmxlcyB0aGUgdHViMzI3MCBkcml2ZXIgb25jZSBsb2FkZWQgdG8gcmVzcG9uZAorCWNvcnJlY3RseSB0byB0aGUgY29uZmlndXJhdGlvbiByZXF1ZXN0cyBvZiB0aGUgbmV4dCBzdGVwLiAgSWYKKwl5b3UgaGF2ZSBjaG9zZW4gMzI3MCBjb25zb2xlIHN1cHBvcnQsIHlvdXIgY29uc29sZSBub3cgYmVoYXZlcworCWFzIGEgMzI3MCwgbm90IGEgMzIxNS4KKworCTUuIFJ1biB0aGUgMzI3MCBjb25maWd1cmF0aW9uIHNjcmlwdCBjb25maWczMjcwLiAgSXQgaXMKKwlkaXN0cmlidXRlZCBpbiB0aGlzIHNhbWUgZGlyZWN0b3J5LCBEb2N1bWVudGF0aW9uL3MzOTAsIGFzCisJY29uZmlnMzI3MC5zaC4JSW5zcGVjdCB0aGUgb3V0cHV0IHNjcmlwdCBpdCBwcm9kdWNlcywKKwkvdG1wL21rZGV2MzI3MCwgYW5kIHRoZW4gcnVuIHRoYXQgc2NyaXB0LiAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUKKwluZWNlc3NhcnkgY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlIGZpbGVzIGFuZCBtYWtlIHRoZSBuZWNlc3NhcnkKKwljaGFuZ2VzIHRvIC9ldGMvaW5pdHRhYi4gIElmIHlvdSBoYXZlIHNlbGVjdGVkIERFVkZTLCB0aGUgZHJpdmVyCisJaXRzZWxmIGNyZWF0ZXMgdGhlIGRldmljZSBmaWxlcywgYW5kIC90bXAvbWtkZXYzMjcwIG9ubHkgY2hhbmdlcworCS9ldGMvaW5pdHRhYi4KKworCVRoZW4gbm90aWZ5IC9zYmluL2luaXQgdGhhdCAvZXRjL2luaXR0YWIgaGFzIGNoYW5nZWQsIGJ5IGlzc3VpbmcKKwl0aGUgdGVsaW5pdCBjb21tYW5kIHdpdGggdGhlIHEgb3BlcmFuZDoKKwkJY2QgRG9jdW1lbnRhdGlvbi9zMzkwCisJCXNoIGNvbmZpZzMyNzAuc2gKKwkJc2ggL3RtcC9ta2RldjMyNzAKKwkJdGVsaW5pdCBxCisKKwlUaGlzIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB5b3VyIGZpcnN0IHRpbWUuCUlmIHlvdXIgMzI3MAorCWNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgYW5kIHlvdSdyZSByZXVzaW5nIGNvbmZpZzMyNzAsIHlvdQorCXNob3VsZCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisJCUNoYW5nZSAzMjcwIGNvbmZpZ3VyYXRpb24KKwkJUmVib290CisJCVJ1biBjb25maWczMjcwIGFuZCAvdG1wL21rZGV2MzI3MAorCQlSZWJvb3QKKworSGVyZSBhcmUgdGhlIHRlc3Rpbmcgc3RlcHMgaW4gZGV0YWlsOgorCisJMS4gQnJpbmcgdXAgYW4geDMyNzAgd2luZG93LCBvciB1c2UgYW4gYWN0dWFsIGhhcmR3YXJlIDMyNzggb3IKKwkzMjc5LCBvciB1c2UgdGhlIDMyNzAgZW11bGF0b3Igb2YgeW91ciBjaG9pY2UuICBZb3Ugd291bGQgYmUKKwlydW5uaW5nIHRoZSBlbXVsYXRvciBvbiB5b3VyIFBDIG9yIHdvcmtzdGF0aW9uLiAgWW91IHdvdWxkIHVzZQorCXRoZSBjb21tYW5kLCBmb3IgZXhhbXBsZSwKKwkJeDMyNzAgdm0tZXNhLWRvbWFpbi1uYW1lICYKKwlpZiB5b3Ugd2FudGVkIGEgMzI3OCBNb2RlbCA0IHdpdGggNDMgcm93cyBvZiA4MCBjb2x1bW5zLCB0aGUKKwlkZWZhdWx0IG1vZGVsIG51bWJlci4gIFRoZSBkcml2ZXIgZG9lcyBub3QgdGFrZSBhZHZhbnRhZ2Ugb2YKKwlleHRlbmRlZCBhdHRyaWJ1dGVzLgorCisJVGhlIHNjcmVlbiB5b3Ugc2hvdWxkIG5vdyBzZWUgY29udGFpbnMgYSBWTSBsb2dvIHdpdGggaW5wdXQKKwlsaW5lcyBuZWFyIHRoZSBib3R0b20uICBVc2UgVEFCIHRvIG1vdmUgdG8gdGhlIGJvdHRvbSBsaW5lLAorCXByb2JhYmx5IGxhYmVsZWQgIkNPTU1BTkQgID09PT4iLgorCisJMi4gVXNlIHRoZSBESUFMIGNvbW1hbmQgaW5zdGVhZCBvZiB0aGUgTE9HSU4gY29tbWFuZCB0byBjb25uZWN0CisJdG8gb25lIG9mIHRoZSB2aXJ0dWFsIDMyNzBzIHlvdSBkZWZpbmVkIHdpdGggdGhlIERFRiBHUkFGCisJY29tbWFuZHM6CisJCWRpYWwgbXktdm0tZ3Vlc3QtbmFtZQorCisJMy4gWW91IHNob3VsZCBpbW1lZGlhdGVseSBzZWUgYSBsb2dpbiBwcm9tcHQgZnJvbSB5b3VyCisJTGludXgtMzkwIG9wZXJhdGluZyBzeXN0ZW0uICBJZiB0aGF0IGRvZXMgbm90IGhhcHBlbiwgeW91IHdvdWxkCisJc2VlIGluc3RlYWQgdGhlIGxpbmUgIkRJQUxFRCBUTyBteS12bS1ndWVzdC1uYW1lICAgMDYyMCIuCisKKwlUbyB0cm91Ymxlc2hvb3Q6ICBkbyB0aGVzZSB0aGluZ3MuCisKKwlBLiBJcyB0aGUgZHJpdmVyIGxvYWRlZD8gIFVzZSB0aGUgbHNtb2QgY29tbWFuZCAobm8gb3BlcmFuZHMpCisJdG8gZmluZCBvdXQuICBQcm9iYWJseSBpdCBpc24ndC4gIFRyeSBsb2FkaW5nIGl0IG1hbnVhbGx5LCB3aXRoCisJdGhlIGNvbW1hbmQgImluc21vZCB0dWIzMjcwIi4gIERvZXMgdGhhdCBjb21tYW5kIGdpdmUgZXJyb3IKKwltZXNzYWdlcz8gIEhhISAgVGhlcmUncyB5b3VyIHByb2JsZW0uCisKKwlCLiBJcyB0aGUgL2V0Yy9pbml0dGFiIGZpbGUgbW9kaWZpZWQgYXMgaW4gaW5zdGFsbGF0aW9uIHN0ZXAgMworCWFib3ZlPyAgVXNlIHRoZSBncmVwIGNvbW1hbmQgdG8gZmluZCBvdXQ7IGZvciBpbnN0YW5jZSwgaXNzdWUKKwkiZ3JlcCAzMjcwIC9ldGMvaW5pdHRhYiIuICBOb3RoaW5nIGZvdW5kPyAgVGhlcmUncyB5b3VyCisJcHJvYmxlbSEKKworCUMuIEFyZSB0aGUgZGV2aWNlIHNwZWNpYWwgZmlsZXMgY3JlYXRlZCwgYXMgaW4gaW5zdGFsbGF0aW9uCisJc3RlcCAyIGFib3ZlPyAgVXNlIHRoZSBscyAtbCBjb21tYW5kIHRvIGZpbmQgb3V0OyBmb3IgaW5zdGFuY2UsCisJaXNzdWUgImxzIC1sIC9kZXYvMzI3MC90dHk2MjAiLiAgVGhlIG91dHB1dCBzaG91bGQgc3RhcnQgd2l0aCB0aGUKKwlsZXR0ZXIgImMiIG1lYW5pbmcgY2hhcmFjdGVyIGRldmljZSBhbmQgc2hvdWxkIGNvbnRhaW4gIjIyNywgMSIKKwlqdXN0IHRvIHRoZSBsZWZ0IG9mIHRoZSBkZXZpY2UgbmFtZS4gIE5vIHN1Y2ggZmlsZT8gIG5vICJjIj8KKwlXcm9uZyBtYWpvciBudW1iZXI/ICBXcm9uZyBtaW5vciBudW1iZXI/ICBUaGVyZSdzIHlvdXIKKwlwcm9ibGVtIQorCisJRC4gRG8geW91IGdldCB0aGUgbWVzc2FnZQorCQkgIkhDUERJQTA0N0UgbXktdm0tZ3Vlc3QtbmFtZSAwNjIwIGRvZXMgbm90IGV4aXN0Ij8KKwlJZiBzbywgeW91IG11c3QgaXNzdWUgdGhlIGNvbW1hbmQgIkRFRiBHUkFGIDYyMCIgZnJvbSB5b3VyIFZNCisJMzIxNSBjb25zb2xlIGFuZCB0aGVuIHJlYm9vdCB0aGUgc3lzdGVtLgorCisKKworT1BFUkFUSU9OLgorCitUaGUgZHJpdmVyIGRlZmluZXMgdGhyZWUgYXJlYXMgb24gdGhlIDMyNzAgc2NyZWVuOiAgdGhlIGxvZyBhcmVhLCB0aGUKK2lucHV0IGFyZWEsIGFuZCB0aGUgc3RhdHVzIGFyZWEuCisKK1RoZSBsb2cgYXJlYSB0YWtlcyB1cCBhbGwgYnV0IHRoZSBib3R0b20gdHdvIGxpbmVzIG9mIHRoZSBzY3JlZW4uICBUaGUKK2RyaXZlciB3cml0ZXMgdGVybWluYWwgb3V0cHV0IHRvIGl0LCBzdGFydGluZyBhdCB0aGUgdG9wIGxpbmUgYW5kIGdvaW5nCitkb3duLiAgV2hlbiBpdCBmaWxscywgdGhlIHN0YXR1cyBhcmVhIGNoYW5nZXMgZnJvbSAiTGludXggUnVubmluZyIgdG8KKyJMaW51eCBNb3JlLi4uIi4gIEFmdGVyIGEgc2Nyb2xsaW5nIHRpbWVvdXQgb2YgKGRlZmF1bHQpIDUgc2VjLCB0aGUKK3NjcmVlbiBjbGVhcnMgYW5kIG1vcmUgb3V0cHV0IGlzIHdyaXR0ZW4sIGZyb20gdGhlIHRvcCBkb3duLgorCitUaGUgaW5wdXQgYXJlYSBleHRlbmRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kLXRvLWxhc3Qgc2NyZWVuCitsaW5lIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhdHVzIGFyZWEuICBZb3UgdHlwZSBjb21tYW5kcyBpbiB0aGlzIGFyZWEKK2FuZCBoaXQgRU5URVIgdG8gZXhlY3V0ZSB0aGVtLgorCitUaGUgc3RhdHVzIGFyZWEgaW5pdGlhbGl6ZXMgdG8gIkxpbnV4IFJ1bm5pbmciIHRvIGdpdmUgeW91IGEgd2FybQorZnV6enkgZmVlbGluZy4gIFdoZW4gdGhlIGxvZyBhcmVhIGZpbGxzIHVwIGFuZCBvdXRwdXQgYXdhaXRzLCBpdAorY2hhbmdlcyB0byAiTGludXggTW9yZS4uLiIuICBBdCB0aGlzIHRpbWUgeW91IGNhbiBkbyBzZXZlcmFsIHRoaW5ncyBvcgorbm90aGluZy4gIElmIHlvdSBkbyBub3RoaW5nLCB0aGUgc2NyZWVuIHdpbGwgY2xlYXIgaW4gKGRlZmF1bHQpIDUgc2VjCithbmQgbW9yZSBvdXRwdXQgd2lsbCBhcHBlYXIuICBZb3UgbWF5IGhpdCBFTlRFUiB3aXRoIG5vdGhpbmcgdHlwZWQgaW4KK3RoZSBpbnB1dCBhcmVhIHRvIHRvZ2dsZSBiZXR3ZWVuICJMaW51eCBNb3JlLi4uIiBhbmQgIkxpbnV4IEhvbGRpbmciLAord2hpY2ggaW5kaWNhdGVzIG5vIHNjcm9sbGluZyB3aWxsIG9jY3VyLiAgKElmIHlvdSBoaXQgRU5URVIgd2l0aCAiTGludXgKK1J1bm5pbmciIGFuZCBub3RoaW5nIHR5cGVkLCB0aGUgYXBwbGljYXRpb24gcmVjZWl2ZXMgYSBuZXdsaW5lLikKKworWW91IG1heSBjaGFuZ2UgdGhlIHNjcm9sbGluZyB0aW1lb3V0IHZhbHVlLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgbGluZToKKwllY2hvIHNjcm9sbHRpbWU9NjAgPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAKK2NoYW5nZXMgdGhlIHNjcm9sbGluZyB0aW1lb3V0IHZhbHVlIHRvIDYwIHNlYy4gIFNldCBzY3JvbGx0aW1lIHRvIDAgaWYKK3lvdSB3aXNoIHRvIHByZXZlbnQgc2Nyb2xsaW5nIGVudGlyZWx5LgorCitPdGhlciB0aGluZ3MgeW91IG1heSBkbyB3aGVuIHRoZSBsb2cgYXJlYSBmaWxscyB1cCBhcmU6ICBoaXQgUEEyIHRvCitjbGVhciB0aGUgbG9nIGFyZWEgYW5kIHdyaXRlIG1vcmUgb3V0cHV0IHRvIGl0LCBvciBoaXQgQ0xFQVIgdG8gY2xlYXIKK3RoZSBsb2cgYXJlYSBhbmQgdGhlIGlucHV0IGFyZWEgYW5kIHdyaXRlIG1vcmUgb3V0cHV0IHRvIHRoZSBsb2cgYXJlYS4KKworU29tZSBvZiB0aGUgUHJvZ3JhbSBGdW5jdGlvbiAoUEYpIGFuZCBQcm9ncmFtIEF0dGVudGlvbiAoUEEpIGtleXMgYXJlCitwcmVhc3NpZ25lZCBzcGVjaWFsIGZ1bmN0aW9ucy4gIFRoZSBvbmVzIHRoYXQgYXJlIG5vdCB5aWVsZCBhbiBhbGFybQord2hlbiBwcmVzc2VkLgorCitQQTEgY2F1c2VzIGEgU0lHSU5UIHRvIHRoZSBjdXJyZW50bHkgcnVubmluZyBhcHBsaWNhdGlvbi4gIFlvdSBtYXkgZG8KK3RoZSBzYW1lIHRoaW5nIGZyb20gdGhlIGlucHV0IGFyZWEsIGJ5IHR5cGluZyAiXkMiIGFuZCBoaXR0aW5nIEVOVEVSLgorCitQQTIgY2F1c2VzIHRoZSBsb2cgYXJlYSB0byBiZSBjbGVhcmVkLiAgSWYgb3V0cHV0IGF3YWl0cywgaXQgaXMgdGhlbgord3JpdHRlbiB0byB0aGUgbG9nIGFyZWEuCisKK1BGMyBjYXVzZXMgYW4gRU9GIHRvIGJlIHJlY2VpdmVkIGFzIGlucHV0IGJ5IHRoZSBhcHBsaWNhdGlvbi4gIFlvdSBtYXkKK2NhdXNlIGFuIEVPRiBhbHNvIGJ5IHR5cGluZyAiXkQiIGFuZCBoaXR0aW5nIEVOVEVSLgorCitObyBQRiBrZXkgaXMgcHJlYXNzaWduZWQgdG8gY2F1c2UgYSBqb2Igc3VzcGVuc2lvbiwgYnV0IHlvdSBtYXkgY2F1c2UgYQoram9iIHN1c3BlbnNpb24gYnkgdHlwaW5nICJeWiIgYW5kIGhpdHRpbmcgRU5URVIuICBZb3UgbWF5IHdpc2ggdG8KK2Fzc2lnbiB0aGlzIGZ1bmN0aW9uIHRvIGEgUEYga2V5LiAgVG8gbWFrZSBQRjcgY2F1c2Ugam9iIHN1c3BlbnNpb24sCitleGVjdXRlIHRoZSBjb21tYW5kOgorCWVjaG8gcGY3PV56ID4gL3Byb2MvdHR5L2RyaXZlci90dHkzMjcwCisKK0lmIHRoZSBpbnB1dCB5b3UgdHlwZSBkb2VzIG5vdCBlbmQgd2l0aCB0aGUgdHdvIGNoYXJhY3RlcnMgIl5uIiwgdGhlCitkcml2ZXIgYXBwZW5kcyBhIG5ld2xpbmUgY2hhcmFjdGVyIGFuZCBzZW5kcyBpdCB0byB0aGUgdHR5IGRyaXZlcjsKK290aGVyd2lzZSB0aGUgZHJpdmVyIHN0cmlwcyB0aGUgIl5uIiBhbmQgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZS4KK1RoZSBJQk0gMzIxNSBkcml2ZXIgYmVoYXZlcyBzaW1pbGFybHkuCisKK1BmMTAgY2F1c2VzIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIHRvIGJlIHJldHJpZXZlZCBmcm9tIHRoZSB0dWJlJ3MKK2NvbW1hbmQgc3RhY2sgKGRlZmF1bHQgZGVwdGggMjApIGFuZCBkaXNwbGF5ZWQgaW4gdGhlIGlucHV0IGFyZWEuICBZb3UKK21heSBoaXQgUEYxMCBhZ2FpbiBmb3IgdGhlIG5leHQtbW9zdC1yZWNlbnQgY29tbWFuZCwgYW5kIHNvIG9uLiAgQQorY29tbWFuZCBpcyBlbnRlcmVkIGludG8gdGhlIHN0YWNrIG9ubHkgd2hlbiB0aGUgaW5wdXQgYXJlYSBpcyBub3QgbWFkZQoraW52aXNpYmxlIChzdWNoIGFzIGZvciBwYXNzd29yZCBlbnRyeSkgYW5kIGl0IGlzIG5vdCBpZGVudGljYWwgdG8gdGhlCitjdXJyZW50IHRvcCBlbnRyeS4gIFBGMTAgcm90YXRlcyBiYWNrd2FyZCB0aHJvdWdoIHRoZSBjb21tYW5kIHN0YWNrOworUEYxMSByb3RhdGVzIGZvcndhcmQuICBZb3UgbWF5IGFzc2lnbiB0aGUgYmFja3dhcmQgZnVuY3Rpb24gdG8gYW55IFBGCitrZXkgKG9yIFBBIGtleSwgZm9yIHRoYXQgbWF0dGVyKSwgc2F5LCBQQTMsIHdpdGggdGhlIGNvbW1hbmQ6CisJZWNobyAtZSBwYTM9XFwwMzNrID4gL3Byb2MvdHR5L2RyaXZlci90dHkzMjcwCitUaGlzIGFzc2lnbnMgdGhlIHN0cmluZyBFU0MtayB0byBQQTMuICBTaW1pbGFybHksIHRoZSBzdHJpbmcgRVNDLWoKK3BlcmZvcm1zIHRoZSBmb3J3YXJkIGZ1bmN0aW9uLiAgKFJhdGlvbmFsZTogIEluIGJhc2ggd2l0aCB2aS1tb2RlIGxpbmUKK2VkaXRpbmcsIEVTQy1rIGFuZCBFU0MtaiByZXRyaWV2ZSBiYWNrd2FyZCBhbmQgZm9yd2FyZCBoaXN0b3J5LgorU3VnZ2VzdGlvbnMgd2VsY29tZS4pCisKK0lzIGEgc3RhY2sgc2l6ZSBvZiB0d2VudHkgY29tbWFuZHMgbm90IHRvIHlvdXIgbGlraW5nPyAgQ2hhbmdlIGl0IG9uCit0aGUgZmx5LiAgVG8gY2hhbmdlIHRvIHNhdmluZyB0aGUgbGFzdCAxMDAgY29tbWFuZHMsIGV4ZWN1dGUgdGhlCitjb21tYW5kOgorCWVjaG8gcmVjYWxsc2l6ZT0xMDAgPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAKKworSGF2ZSBhIGNvbW1hbmQgeW91IGlzc3VlIGZyZXF1ZW50bHk/ICBBc3NpZ24gaXQgdG8gYSBQRiBvciBQQSBrZXkhICBVc2UKK3RoZSBjb21tYW5kCisJZWNobyBwZjI0PSJta2RpciBmb29iYXI7IGNkIGZvb2JhciIgPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAgCit0byBleGVjdXRlIHRoZSBjb21tYW5kcyBta2RpciBmb29iYXIgYW5kIGNkIGZvb2JhciBpbW1lZGlhdGVseSB3aGVuIHlvdQoraGl0IFBGMjQuICBXYW50IHRvIHNlZSB0aGUgY29tbWFuZCBsaW5lIGZpcnN0LCBiZWZvcmUgeW91IGV4ZWN1dGUgaXQ/CitVc2UgdGhlIC1uIG9wdGlvbiBvZiB0aGUgZWNobyBjb21tYW5kOgorCWVjaG8gLW4gcGYyND0ibWtkaXIgZm9vOyBjZCBmb28iID4gL3Byb2MvdHR5L2RyaXZlci90dHkzMjcwCisKKworCitIYXBweSB0ZXN0aW5nISAgSSB3ZWxjb21lIGFueSBhbmQgYWxsIGNvbW1lbnRzIGFib3V0IHRoaXMgZG9jdW1lbnQsIHRoZQorZHJpdmVyLCBldGMgZXRjLgorCitEaWNrIEhpdHQgPHJiaDAwQHV0c2dsb2JhbC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8gYi9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzMWQ5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTwpAQCAtMCwwICsxLDEwOSBAQAorUy8zOTAgY29tbW9uIEkvTy1MYXllciAtIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFuZCAvcHJvYyBlbnRyaWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogY2lvX21zZyA9IHllcyB8IG5vCisgIAorICBEZXRlcm1pbmVzIHdoZXRoZXIgaW5mb3JtYXRpb24gb24gZm91bmQgZGV2aWNlcyBhbmQgc2Vuc2VkIGRldmljZSAKKyAgY2hhcmFjdGVyaXN0aWNzIHNob3VsZCBiZSBzaG93biBkdXJpbmcgc3RhcnR1cCwgaS4gZS4gbWVzc2FnZXMgb2YgdGhlIHR5cGVzIAorICAiRGV0ZWN0ZWQgZGV2aWNlIDAuMC40NzExIG9uIHN1YmNoYW5uZWwgMC4wLjAwNDIiIGFuZCAiU2Vuc2VJRDogRGV2aWNlCisgIDAuMC40NzExIHJlcG9ydHM6IC4uLiIuCisKKyAgRGVmYXVsdCBpcyBvZmYuCisKKworKiBjaW9faWdub3JlID0ge2FsbH0gfAorCSAgICAgICB7PGRldmljZT4gfCA8cmFuZ2Ugb2YgZGV2aWNlcz59IHwKKwkgICAgICAgeyE8ZGV2aWNlPiB8ICE8cmFuZ2Ugb2YgZGV2aWNlcz59CisKKyAgVGhlIGdpdmVuIGRldmljZXMgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21tb24gSS9PLWxheWVyOyBubyBkZXRlY3Rpb24KKyAgYW5kIGRldmljZSBzZW5zaW5nIHdpbGwgYmUgZG9uZSBvbiBhbnkgb2YgdGhvc2UgZGV2aWNlcy4gVGhlIHN1YmNoYW5uZWwgdG8gCisgIHdoaWNoIHRoZSBkZXZpY2UgaW4gcXVlc3Rpb24gaXMgYXR0YWNoZWQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIG5vIGRldmljZSB3YXMKKyAgYXR0YWNoZWQuCisKKyAgQW4gaWdub3JlZCBkZXZpY2UgY2FuIGJlIHVuLWlnbm9yZWQgbGF0ZXI7IHNlZSB0aGUgIi9wcm9jIGVudHJpZXMiLXNlY3Rpb24gZm9yCisgIGRldGFpbHMuCisKKyAgVGhlIGRldmljZXMgbXVzdCBiZSBnaXZlbiBlaXRoZXIgYXMgYnVzIGlkcyAoMC4wLmFiY2QpIG9yIGFzIGhleGFkZWNpbWFsCisgIGRldmljZSBudW1iZXJzICgweGFiY2Qgb3IgYWJjZCwgZm9yIDIuNCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KKyAgWW91IGNhbiB1c2UgdGhlICdhbGwnIGtleXdvcmQgdG8gaWdub3JlIGFsbCBkZXZpY2VzLgorICBUaGUgJyEnIG9wZXJhdG9yIHdpbGwgY2F1c2UgdGhlIEkvTy1sYXllciB0byBfbm90XyBpZ25vcmUgYSBkZXZpY2UuCisgIFRoZSBvcmRlciBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIG5vdCBpbXBvcnRhbnQuCisKKyAgRm9yIGV4YW1wbGUsIAorCWNpb19pZ25vcmU9MC4wLjAwMjMtMC4wLjAwNDIsMC4wLjQ3MTEKKyAgd2lsbCBpZ25vcmUgYWxsIGRldmljZXMgcmFuZ2luZyBmcm9tIDAuMC4wMDIzIHRvIDAuMC4wMDQyIGFuZCB0aGUgZGV2aWNlCisgIDAuMC40NzExLCBpZiBkZXRlY3RlZC4KKyAgQXMgYW5vdGhlciBleGFtcGxlLAorCWNpb19pZ25vcmU9YWxsLCEwLjAuNDcxMSwhMC4wLmZkMDAtMC4wLmZkMDIKKyAgd2lsbCBpZ25vcmUgYWxsIGRldmljZXMgYnV0IDAuMC40NzExLCAwLjAuZmQwMCwgMC4wLmZkMDEsIDAuMC5mZDAyLgorCisgIEJ5IGRlZmF1bHQsIG5vIGRldmljZXMgYXJlIGlnbm9yZWQuCisKKworL3Byb2MgZW50cmllcworLS0tLS0tLS0tLS0tLQorCisqIC9wcm9jL2Npb19pZ25vcmUKKworICBMaXN0cyB0aGUgcmFuZ2VzIG9mIGRldmljZXMgKGJ5IGJ1cyBpZCkgd2hpY2ggYXJlIGlnbm9yZWQgYnkgY29tbW9uIEkvTy4KKworICBZb3UgY2FuIHVuLWlnbm9yZSBjZXJ0YWluIG9yIGFsbCBkZXZpY2VzIGJ5IHBpcGluZyB0byAvcHJvYy9jaW9faWdub3JlLiAKKyAgImZyZWUgYWxsIiB3aWxsIHVuLWlnbm9yZSBhbGwgaWdub3JlZCBkZXZpY2VzLCAKKyAgImZyZWUgPGRldmljZSByYW5nZT4sIDxkZXZpY2UgcmFuZ2U+LCAuLi4iIHdpbGwgdW4taWdub3JlIHRoZSBzcGVjaWZpZWQKKyAgZGV2aWNlcy4KKworICBGb3IgZXhhbXBsZSwgaWYgZGV2aWNlcyAwLjAuMDAyMyB0byAwLjAuMDA0MiBhbmQgMC4wLjQ3MTEgYXJlIGlnbm9yZWQsCisgIC0gZWNobyBmcmVlIDAuMC4wMDMwLTAuMC4wMDMyID4gL3Byb2MvY2lvX2lnbm9yZQorICAgIHdpbGwgdW4taWdub3JlIGRldmljZXMgMC4wLjAwMzAgdG8gMC4wLjAwMzIgYW5kIHdpbGwgbGVhdmUgZGV2aWNlcyAwLjAuMDAyMworICAgIHRvIDAuMC4wMDJmLCAwLjAuMDAzMyB0byAwLjAuMDA0MiBhbmQgMC4wLjQ3MTEgaWdub3JlZDsKKyAgLSBlY2hvIGZyZWUgMC4wLjAwNDEgPiAvcHJvYy9jaW9faWdub3JlIHdpbGwgZnVydGhlcm1vcmUgdW4taWdub3JlIGRldmljZQorICAgIDAuMC4wMDQxOworICAtIGVjaG8gZnJlZSBhbGwgPiAvcHJvYy9jaW9faWdub3JlIHdpbGwgdW4taWdub3JlIGFsbCByZW1haW5pbmcgaWdub3JlZCAKKyAgICBkZXZpY2VzLgorCisgIFdoZW4gYSBkZXZpY2UgaXMgdW4taWdub3JlZCwgZGV2aWNlIHJlY29nbml0aW9uIGFuZCBzZW5zaW5nIGlzIHBlcmZvcm1lZCBhbmQgCisgIHRoZSBkZXZpY2UgZHJpdmVyIHdpbGwgYmUgbm90aWZpZWQgaWYgcG9zc2libGUsIHNvIHRoZSBkZXZpY2Ugd2lsbCBiZWNvbWUKKyAgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCisKKyAgWW91IGNhbiBhbHNvIGFkZCByYW5nZXMgb2YgZGV2aWNlcyB0byBiZSBpZ25vcmVkIGJ5IHBpcGluZyB0byAKKyAgL3Byb2MvY2lvX2lnbm9yZTsgImFkZCA8ZGV2aWNlIHJhbmdlPiwgPGRldmljZSByYW5nZT4sIC4uLiIgd2lsbCBpZ25vcmUgdGhlCisgIHNwZWNpZmllZCBkZXZpY2VzLgorCisgIE5vdGU6IEFscmVhZHkga25vd24gZGV2aWNlcyBjYW5ub3QgYmUgaWdub3JlZC4KKworICBGb3IgZXhhbXBsZSwgaWYgZGV2aWNlIDAuMC5hYmNkIGlzIGFscmVhZHkga25vd24gYW5kIGFsbCBvdGhlciBkZXZpY2VzCisgIDAuMC5hMDAwLTAuMC5hZmZmIGFyZSBub3Qga25vd24sCisJImVjaG8gYWRkIDAuMC5hMDAwLTAuMC5hY2NjLCAwLjAuYWYwMC0wLjAuYWZmZiA+IC9wcm9jL2Npb19pZ25vcmUiCisgIHdpbGwgYWRkIDAuMC5hMDAwLTAuMC5hYmNjLCAwLjAuYWJjZS0wLjAuYWNjYyBhbmQgMC4wLmFmMDAtMC4wLmFmZmYgdG8gdGhlCisgIGxpc3Qgb2YgaWdub3JlZCBkZXZpY2VzIGFuZCBza2lwIDAuMC5hYmNkLgorCisgIFRoZSBkZXZpY2VzIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIGJ5IGJ1cyBpZCAoMC4wLmFiY2QpIG9yLCBmb3IgMi40IGJhY2t3YXJkCisgIGNvbXBhdGliaWx0eSwgYnkgdGhlIGRldmljZSBudW1iZXIgaW4gaGV4YWRlY2ltYWwgKDB4YWJjZCBvciBhYmNkKS4KKworCisqIC9wcm9jL3MzOTBkYmYvY2lvXyovIChTLzM5MCBkZWJ1ZyBmZWF0dXJlKQorCisgIFNvbWUgdmlld3MgZ2VuZXJhdGVkIGJ5IHRoZSBkZWJ1ZyBmZWF0dXJlIHRvIGhvbGQgdmFyaW91cyBkZWJ1ZyBvdXRwdXRzLgorCisgIC0gL3Byb2MvczM5MGRiZi9jaW9fY3J3L3NwcmludGYKKyAgICBNZXNzYWdlcyBmcm9tIHRoZSBwcm9jZXNzaW5nIG9mIHBlbmRpbmcgY2hhbm5lbCByZXBvcnQgd29yZHMgKG1hY2hpbmUgY2hlY2sKKyAgICBoYW5kbGluZyksIHdoaWNoIHdpbGwgYWxzbyBzaG93IHdoZW4gQ09ORklHX0RFQlVHX0NSVyBpcyBkZWZpbmVkLgorCisgIC0gL3Byb2MvczM5MGRiZi9jaW9fbXNnL3NwcmludGYKKyAgICBWYXJpb3VzIGRlYnVnIG1lc3NhZ2VzIGZyb20gdGhlIGNvbW1vbiBJL08tbGF5ZXI7IGdlbmVyYWxseSwgbWVzc2FnZXMgd2hpY2ggCisgICAgd2lsbCBhbHNvIHNob3cgd2hlbiBDT05GSUdfREVCVUdfSU8gaXMgZGVmaW5lZC4KKworICAtIC9wcm9jL3MzOTBkYmYvY2lvX3RyYWNlL2hleF9hc2NpaQorICAgIExvZ3MgdGhlIGNhbGxpbmcgb2YgZnVuY3Rpb25zIGluIHRoZSBjb21tb24gSS9PLWxheWVyIGFuZCwgaWYgYXBwbGljYWJsZSwgCisgICAgd2hpY2ggc3ViY2hhbm5lbCB0aGV5IHdlcmUgY2FsbGVkIGZvci4KKworICBUaGUgbGV2ZWwgb2YgbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCB0byBiZSBtb3JlIG9yIGxlc3MgdmVyYm9zZSBieSBwaXBpbmcgdG8gCisgIC9wcm9jL3MzOTBkYmYvY2lvXyovbGV2ZWwgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA2OyBzZWUgdGhlIGRvY3VtZW50YXRpb24gb24KKyAgdGhlIFMvMzkwIGRlYnVnIGZlYXR1cmUgKERvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dCkgZm9yIGRldGFpbHMuCisKKyogRm9yIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIHByZXNlbnQgaW4gdGhlIC9wcm9jIGZpbGVzeXN0ZW0gaW4gMi40IChuYW1lbHksCisgIC9wcm9jL3N1YmNoYW5uZWxzIGFuZCAvcHJvYy9jaHBpZHMpLCBzZWUgZHJpdmVyLW1vZGVsLnR4dC4KKyAgSW5mb3JtYXRpb24gZm9ybWVybHkgaW4gL3Byb2MvaXJxX2NvdW50IGlzIG5vdyBpbiAvcHJvYy9pbnRlcnJ1cHRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0RBU0QgYi9Eb2N1bWVudGF0aW9uL3MzOTAvREFTRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTYzZjFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0RBU0QKQEAgLTAsMCArMSw3MyBAQAorREFTRCBkZXZpY2UgZHJpdmVyCisKK1MvMzkwJ3MgZGlzayBkZXZpY2VzIChEQVNEcykgYXJlIG1hbmFnZWQgYnkgTGludXggdmlhIHRoZSBEQVNEIGRldmljZQorZHJpdmVyLiBJdCBpcyB2YWxpZCBmb3IgYWxsIHR5cGVzIG9mIERBU0RzIGFuZCByZXByZXNlbnRzIHRoZW0gdG8KK0xpbnV4IGFzIGJsb2NrIGRldmljZXMsIG5hbWVseSAiZGQiLiBDdXJyZW50bHkgdGhlIERBU0QgZHJpdmVyIHVzZXMgYQorc2luZ2xlIG1ham9yIG51bWJlciAoMjU0KSBhbmQgNCBtaW5vciBudW1iZXJzIHBlciB2b2x1bWUgKDEgZm9yIHRoZQorcGh5c2ljYWwgdm9sdW1lIGFuZCAzIGZvciBwYXJ0aXRpb25zKS4gV2l0aCByZXNwZWN0IHRvIHBhcnRpdGlvbnMgc2VlCitiZWxvdy4gVGh1cyB5b3UgbWF5IGhhdmUgdXAgdG8gNjQgREFTRCBkZXZpY2VzIGluIHlvdXIgc3lzdGVtLgorCitUaGUga2VybmVsIHBhcmFtZXRlciAnZGFzZD1mcm9tLXRvLC4uLicgbWF5IGJlIGlzc3VlZCBhcmJpdHJhcnkgdGltZXMKK2luIHRoZSBrZXJuZWwncyBwYXJhbWV0ZXIgbGluZSBvciBub3QgYXQgYWxsLiBUaGUgJ2Zyb20nIGFuZCAndG8nCitwYXJhbWV0ZXJzIGFyZSB0byBiZSBnaXZlbiBpbiBoZXhhZGVjaW1hbCBub3RhdGlvbiB3aXRob3V0IGEgbGVhZGluZworMHguCitJZiB5b3Ugc3VwcGx5IGtlcm5lbCBwYXJhbWV0ZXJzIHRoZSBkaWZmZXJlbnQgaW5zdGFuY2VzIGFyZSBwcm9jZXNzZWQKK2luIG9yZGVyIG9mIGFwcGVhcmFuY2UgYW5kIGEgbWlub3IgbnVtYmVyIGlzIHJlc2VydmVkIGZvciBhbnkgZGV2aWNlCitjb3ZlcmVkIGJ5IHRoZSBzdXBwbGllZCByYW5nZSB1cCB0byA2NCB2b2x1bWVzLiBBZGRpdGlvbmFsIERBU0RzIGFyZQoraWdub3JlZC4gSWYgeW91IGRvIG5vdCBzdXBwbHkgdGhlICdkYXNkPScga2VybmVsIHBhcmFtZXRlciBhdCBhbGwsIHRoZSAKK0RBU0QgZHJpdmVyIHJlZ2lzdGVycyBhbGwgc3VwcG9ydGVkIERBU0RzIG9mIHlvdXIgc3lzdGVtIHRvIGEgbWlub3IKK251bWJlciBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgdGhlIHN1YmNoYW5uZWwgbnVtYmVyLgorCitUaGUgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyBFQ0tELWRldmljZXMgYW5kIHRoZXJlIGFyZSBzdHVicyBmb3IKK3N1cHBvcnQgb2YgdGhlIEZCQSBhbmQgQ0tEIGFyY2hpdGVjdHVyZXMuIEZvciB0aGUgRkJBIGFyY2hpdGVjdHVyZQorb25seSBzb21lIHNtYXJ0IGRhdGEgc3RydWN0dXJlcyBhcmUgbWlzc2luZyB0byBtYWtlIHRoZSBzdXBwb3J0Citjb21wbGV0ZS4gCitXZSBwZXJmb3JtZWQgb3VyIHRlc3Rpbmcgb24gMzM4MCBhbmQgMzM5MCB0eXBlIGRpc2tzIG9mIGRpZmZlcmVudAorc2l6ZXMsIHVuZGVyIFZNIGFuZCBvbiB0aGUgYmFyZSBoYXJkd2FyZSAoTFBBUiksIHVzaW5nIGludGVybmFsIGRpc2tzCitvZiB0aGUgbXVsdGlwcmlzZSBhcyB3ZWxsIGFzIGEgUkFNQUMgdmlydHVhbCBhcnJheS4gRGlza3MgZXhwb3J0ZWQgYnkKK2FuIEVudGVycHJpc2UgU3RvcmFnZSBTZXJ2ZXIgKFNlYXNjYXBlKSBzaG91bGQgd29yayBmaW5lIGFzIHdlbGwuCisKK1dlIGN1cnJlbnRseSBpbXBsZW1lbnQgb25lIHBhcnRpdGlvbiBwZXIgdm9sdW1lLCB3aGljaCBpcyB0aGUgd2hvbGUKK3ZvbHVtZSwgc2tpcHBpbmcgdGhlIGZpcnN0IGJsb2NrcyB1cCB0byB0aGUgdm9sdW1lIGxhYmVsLiBUaGVzZSBhcmUKK3Jlc2VydmVkIGZvciBJUEwgcmVjb3JkcyBhbmQgSUJNJ3Mgdm9sdW1lIGxhYmVsIHRvIGFzc3VyZQorYWNjZXNzaWJpbGl0eSBvZiB0aGUgREFTRCBmcm9tIG90aGVyIE9Tcy4gSW4gYSBsYXRlciBzdGFnZSB3ZSB3aWxsCitwcm92aWRlIHN1cHBvcnQgb2YgcGFydGl0aW9ucywgbWF5YmUgVlRPQyBvcmllbnRlZCBvciB1c2luZyBhIGtpbmQgb2YKK3BhcnRpdGlvbiB0YWJsZSBpbiB0aGUgbGFiZWwgcmVjb3JkLgorCitVU0FHRQorCistTG93LWxldmVsIGZvcm1hdCAoP0NLRCBvbmx5KQorRm9yIHVzaW5nIGFuIEVDS0QtREFTRCBhcyBhIExpbnV4IGhhcmRkaXNrIHlvdSBoYXZlIHRvIGxvdy1sZXZlbAorZm9ybWF0IHRoZSB0cmFja3MgYnkgaXNzdWluZyB0aGUgQkxLREFTREZPUk1BVC1pb2N0bCBvbiB0aGF0CitkZXZpY2UuIFRoaXMgd2lsbCBlcmFzZSBhbnkgZGF0YSBvbiB0aGF0IHZvbHVtZSBpbmNsdWRpbmcgSUJNIHZvbHVtZQorbGFiZWxzLCBWVE9DcyBldGMuIFRoZSBpb2N0bCBtYXkgdGFrZSBhICdzdHJ1Y3QgZm9ybWF0X2RhdGEgKicgb3IKKydOVUxMJyBhcyBhbiBhcmd1bWVudC4gIAordHlwZWRlZiBzdHJ1Y3QgeworCWludCBzdGFydF91bml0OworCWludCBzdG9wX3VuaXQ7CisJaW50IGJsa3NpemU7Cit9IGZvcm1hdF9kYXRhX3Q7CitXaGVuIGEgTlVMTCBhcmd1bWVudCBpcyBwYXNzZWQgdG8gdGhlIEJMS0RBU0RGT1JNQVQgaW9jdGwgdGhlIHdob2xlCitkaXNrIGlzIGZvcm1hdHRlZCB0byBhIGJsb2Nrc2l6ZSBvZiAxMDI0IGJ5dGVzLiBPdGhlcndpc2Ugc3RhcnRfdW5pdAorYW5kIHN0b3BfdW5pdCBhcmUgdGhlIGZpcnN0IGFuZCBsYXN0IHRyYWNrIHRvIGJlIGZvcm1hdHRlZC4gSWYKK3N0b3BfdW5pdCBpcyAtMSBpdCBpbXBsaWVzIHRoYXQgdGhlIERBU0QgaXMgZm9ybWF0dGVkIGZyb20gc3RhcnRfdW5pdAordXAgdG8gdGhlIGxhc3QgdHJhY2suIGJsa3NpemUgY2FuIGJlIGFueSBwb3dlciBvZiB0d28gYmV0d2VlbiA1MTIgYW5kCis0MDk2LiBXZSByZWNvbW1lbmQgbm8gYmxrc2l6ZSBsb3dlciB0aGFuIDEwMjQgYmVjYXVzZSB0aGUgZXh0MmZzIHVzZXMKKzFrQiBibG9ja3MgYW55d2F5IGFuZCB5b3UgZ2FpbiBhcHByb3guIDUwJSBvZiBjYXBhY2l0eSBpbmNyZWFzaW5nIHlvdXIKK2Jsa3NpemUgZnJvbSA1MTIgYnl0ZSB0byAxa0IuCisKKy1NYWtlIGEgZmlsZXN5c3RlbQorVGhlbiB5b3UgY2FuIG1rPz9mcyB0aGUgZmlsZXN5c3RlbSBvZiB5b3VyIGNob2ljZSBvbiB0aGF0IHZvbHVtZSBvcgorcGFydGl0aW9uLiBGb3IgcmVhc29ucyBvZiBzYW5pdHkgeW91IHNob3VsZCBidWlsZCB5b3VyIGZpbGVzeXN0ZW0gb24KK3RoZSBwYXJ0aXRpb24gL2Rldi9kZD8xIGluc3RlYWQgb2YgdGhlIHdob2xlIHZvbHVtZS4gWW91IG9ubHkgbG9zZSAza0IJCitidXQgbWF5IGJlIHN1cmUgdGhhdCB5b3UgY2FuIHJldXNlIHlvdXIgZGF0YSBhZnRlciBpbnRyb2R1Y3Rpb24gb2YgYQorcmVhbCBwYXJ0aXRpb24gdGFibGUuCisKK0JVR1M6CistIFBlcmZvcm1hbmNlIHNvbWV0aW1lcyBpcyByYXRoZXIgbG93IGJlY2F1c2Ugd2UgZG9uJ3QgZnVsbHkgZXhwbG9pdCBjbHVzdGVyaW5nCisKK1RPRE8tTGlzdDoKKy0gQWRkIElCTSdTIERpc2sgbGF5b3V0IHRvIGdlbmhkCistIEVuaGFuY2UgZHJpdmVyIHRvIHVzZSBtb3JlIHRoYW4gb25lIG1ham9yIG51bWJlcgorLSBFbmFibGUgdXNhZ2UgYXMgYSBtb2R1bGUKKy0gU3VwcG9ydCBDYWNoZSBmYXN0IHdyaXRlIGFuZCBEQVNEIGZhc3Qgd3JpdGUgKEVDS0QpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYmZlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dApAQCAtMCwwICsxLDI1MzYgQEAKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorCQkJICAgICAgICAgICAgICAgYnkKKwkJRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorCQlDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXN0IHZpZXdlZCB3aXRoIGZpeGVkIHdpZHRoIGZvbnRzIAorCitPdmVydmlldyBvZiBEb2N1bWVudDoKKz09PT09PT09PT09PT09PT09PT09PQorVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBnaXZlIGFuIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRvIGRlYnVnIAorTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgaXQgaXNuJ3QgaW50ZW5kZWQgYXMgYSBjb21wbGV0ZSByZWZlcmVuY2UgJiBub3QgYQordHV0b3JpYWwgb24gdGhlIGZ1bmRhbWVudGFscyBvZiBDICYgYXNzZW1ibHksIGl0IGRvc2VuJ3QgZ28gaW50bworMzkwIElPIGluIGFueSBkZXRhaWwuIEl0IGlzIGludGVuZGVkIHRvIGNvbXBsZW1lbnQgdGhlIGRvY3VtZW50cyBpbiB0aGUKK3JlZmVyZW5jZSBzZWN0aW9uIGJlbG93ICYgYW55IG90aGVyIHdvcnRod2hpbGUgcmVmZXJlbmNlcyB5b3UgZ2V0LgorCitJdCBpcyBpbnRlbmRlZCBsaWtlIHRoZSBFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBSZWZlcmVuY2UgU3VtbWFyeQordG8gYmUgcHJpbnRlZCBvdXQgJiB1c2VkIGFzIGEgcXVpY2sgY2hlYXQgc2hlZXQgc2VsZiBoZWxwIHN0eWxlIHJlZmVyZW5jZSB3aGVuCitwcm9ibGVtcyBvY2N1ci4KKworQ29udGVudHMKKz09PT09PT09CitSZWdpc3RlciBTZXQKK0FkZHJlc3MgU3BhY2VzIG9uIEludGVsIExpbnV4CitBZGRyZXNzIFNwYWNlcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorVGhlIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIEtlcm5lbCBUYXNrIFN0cnVjdHVyZQorUmVnaXN0ZXIgVXNhZ2UgJiBTdGFja2ZyYW1lcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorQSBzYW1wbGUgcHJvZ3JhbSB3aXRoIGNvbW1lbnRzCitDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorRmlndXJpbmcgb3V0IGdjYyBjb21waWxlIGVycm9ycworRGVidWdnaW5nIFRvb2xzCitvYmpkdW1wCitzdHJhY2UKK1BlcmZvcm1hbmNlIERlYnVnZ2luZyAKK0RlYnVnZ2luZyB1bmRlciBWTQorcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBJTyBPdmVydmlldworRGVidWdnaW5nIElPIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgdW5kZXIgVk0KK0dEQiBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCitTdGFjayBjaGFpbmluZyBpbiBnZGIgYnkgaGFuZAorRXhhbWluaW5nIGNvcmUgZHVtcHMKK2xkZAorRGVidWdnaW5nIG1vZHVsZXMKK1RoZSBwcm9jIGZpbGUgc3lzdGVtCitTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KK0R1bXB0b29sICYgTGNyYXNoCitTeXNScQorUmVmZXJlbmNlcworU3BlY2lhbCBUaGFua3MKKworUmVnaXN0ZXIgU2V0Cis9PT09PT09PT09PT0KK1RoZSBjdXJyZW50IGFyY2hpdGVjdHVyZXMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycy4KKyAKKzE2ICBHZW5lcmFsIHByb3Bvc2UgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCByMC1yMTUgb3IgZ3ByMC1ncHIxNSB1c2VkIGZvciBhcml0aG1ldGljICYgYWRkcmVzc2luZy4gCisKKzE2IENvbnRyb2wgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCAoIGNyMC1jcjE1IGtlcm5lbCB1c2FnZSBvbmx5ICkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsCitpbnRlcnJ1cHQgY29udHJvbCxkZWJ1Z2dpbmcgY29udHJvbCBldGMuCisKKzE2IEFjY2VzcyByZWdpc3RlcnMgKCBhcjAtYXIxNSApIDMyIGJpdCBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCitub3QgdXNlZCBieSBub3JtYWwgcHJvZ3JhbXMgYnV0IHBvdGVudGlhbGx5IGNvdWxkIAorYmUgdXNlZCBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4gVGhlaXIgbWFpbiBwdXJwb3NlIGlzIHRoZWlyIDEgdG8gMQorYXNzb2NpYXRpb24gd2l0aCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFuZCBhcmUgdXNlZCBpbgordGhlIGtlcm5lbCBmb3IgY29weWluZyBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBhZGRyZXNzIHNwYWNlcy4KK0FjY2VzcyByZWdpc3RlciAwICggJiBhY2Nlc3MgcmVnaXN0ZXIgMSBvbiB6L0FyY2hpdGVjdHVyZSAoIG5lZWRzIDY0IGJpdCAKK3BvaW50ZXIgKSApIGlzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBwdGhyZWFkIGxpYnJhcnkgYXMgYSBwb2ludGVyIHRvCit0aGUgY3VycmVudCBydW5uaW5nIHRocmVhZHMgcHJpdmF0ZSBhcmVhLgorCisxNiA2NCBiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChmcDAtZnAxNSApIElFRUUgJiBIRlAgZmxvYXRpbmcgCitwb2ludCBmb3JtYXQgY29tcGxpYW50IG9uIEc1IHVwd2FyZHMgJiBhIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnIChGUEMpIAorNCAgNjQgYml0IHJlZ2lzdGVycyAoZnAwLGZwMixmcDQgJiBmcDYpIEhGUCBvbmx5IG9uIG9sZGVyIG1hY2hpbmVzLgorTm90ZToKK0xpbnV4IChjdXJyZW50bHkpIGFsd2F5cyB1c2VzIElFRUUgJiBlbXVsYXRlcyBHNSBJRUVFIGZvcm1hdCBvbiBvbGRlciBtYWNoaW5lcywKKyggcHJvdmlkZWQgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGZvciB0aGlzICkuCisKKworVGhlIFBTVyBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcmVnaXN0ZXIgb24gdGhlIG1hY2hpbmUgaXQKK2lzIDY0IGJpdCBvbiBzLzM5MCAmIDEyOCBiaXQgb24gei9BcmNoaXRlY3R1cmUgJiBzZXJ2ZXMgdGhlIHJvbGVzIG9mIAorYSBwcm9ncmFtIGNvdW50ZXIgKHBjKSwgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIsbWVtb3J5IHNwYWNlIGRlc2lnbmF0b3IuCitJbiBJQk0gc3RhbmRhcmQgbm90YXRpb24gSSBhbSBjb3VudGluZyBiaXQgMCBhcyB0aGUgTVNCLgorSXQgaGFzIHNldmVyYWwgYWR2YW50YWdlcyBvdmVyIGEgbm9ybWFsIHByb2dyYW0gY291bnRlcgoraW4gdGhhdCB5b3UgY2FuIGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uICYgcHJvZ3JhbSBjb3VudGVyIAoraW4gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uIFRvIGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uLAorZS5nLiBzd2l0Y2hpbmcgYWRkcmVzcyB0cmFuc2xhdGlvbiBvZmYgcmVxdWlyZXMgdGhhdCB5b3UKK2hhdmUgYSBsb2dpY2FsPXBoeXNpY2FsIG1hcHBpbmcgZm9yIHRoZSBhZGRyZXNzIHlvdSBhcmUKK2N1cnJlbnRseSBydW5uaW5nIGF0LgorCisgICAgICBCaXQgICAgICAgICAgIFZhbHVlCitzLzM5MCB6L0FyY2hpdGVjdHVyZQorMCAgICAgICAwICAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApIG90aGVyd2lzZSBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBvY2N1cnMuCisKKzEgICAgICAgMSAgICAgUHJvZ3JhbSBFdmVudCBSZWNvcmRpbmcgMSBQRVIgZW5hYmxlZCwgCisJICAgICAgUEVSIGlzIHVzZWQgdG8gZmFjaWxpdGl0YXRlIGRlYnVnZ2luZyBlLmcuIHNpbmdsZSBzdGVwcGluZy4KKworMi00ICAgIDItNCAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApLiAKKworNSAgICAgICA1ICAgICBEeW5hbWljIGFkZHJlc3MgdHJhbnNsYXRpb24gMT1EQVQgb24uCisKKzYgICAgICAgNiAgICAgSW5wdXQvT3V0cHV0IGludGVycnVwdCBNYXNrCisKKzcgICAgICAgNyAgICAgRXh0ZXJuYWwgaW50ZXJydXB0IE1hc2sgdXNlZCBwcmltYXJpbHkgZm9yIGludGVycHJvY2Vzc29yIHNpZ25hbGxpbmcgJiAKKwkgICAgICBjbG9jayBpbnRlcnJ1cHRzLgorCis4LTExICA4LTExICAgIFBTVyBLZXkgdXNlZCBmb3IgY29tcGxleCBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gbm90IHVzZWQgdW5kZXIgbGludXgKKworMTIgICAgICAxMiAgICAxIG9uIHMvMzkwIDAgb24gei9BcmNoaXRlY3R1cmUKKworMTMgICAgICAxMyAgICBNYWNoaW5lIENoZWNrIE1hc2sgMT1lbmFibGUgbWFjaGluZSBjaGVjayBpbnRlcnJ1cHRzCisKKzE0ICAgICAgMTQgICAgV2FpdCBTdGF0ZSBzZXQgdGhpcyB0byAxIHRvIHN0b3AgdGhlIHByb2Nlc3NvciBleGNlcHQgZm9yIGludGVycnVwdHMgJiBnaXZlIAorCSAgICAgIHRpbWUgdG8gb3RoZXIgTFBBUlMgdXNlZCBpbiBDUFUgaWRsZSBpbiB0aGUga2VybmVsIHRvIGluY3JlYXNlIG92ZXJhbGwgCisJICAgICAgdXNhZ2Ugb2YgcHJvY2Vzc29yIHJlc291cmNlcy4KKworMTUgICAgICAxNSAgICBQcm9ibGVtIHN0YXRlICggaWYgc2V0IHRvIDEgY2VydGFpbiBpbnN0cnVjdGlvbnMgYXJlIGRpc2FibGVkICkKKwkgICAgICBhbGwgbGludXggdXNlciBwcm9ncmFtcyBydW4gd2l0aCB0aGlzIGJpdCAxIAorCSAgICAgICggdXNlZnVsIGluZm8gZm9yIGRlYnVnZ2luZyB1bmRlciBWTSApLgorCisxNi0xNyAxNi0xNyAgIEFkZHJlc3MgU3BhY2UgQ29udHJvbAorCisJICAgICAgMDAgUHJpbWFyeSBTcGFjZSBNb2RlIHdoZW4gREFUIG9uCisJICAgICAgVGhlIGxpbnV4IGtlcm5lbCBjdXJyZW50bHkgcnVucyBpbiB0aGlzIG1vZGUsIENSMSBpcyBhZmZpbGlhdGVkIHdpdGggCisgICAgICAgICAgICAgIHRoaXMgbW9kZSAmIHBvaW50cyB0byB0aGUgcHJpbWFyeSBzZWdtZW50IHRhYmxlIG9yaWdpbiBldGMuCisKKwkgICAgICAwMSBBY2Nlc3MgcmVnaXN0ZXIgbW9kZSB0aGlzIG1vZGUgaXMgdXNlZCBpbiBmdW5jdGlvbnMgdG8gCisJICAgICAgY29weSBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBzcGFjZS4KKworCSAgICAgIDEwIFNlY29uZGFyeSBzcGFjZSBtb2RlIG5vdCB1c2VkIGluIGxpbnV4IGhvd2V2ZXIgQ1I3IHRoZQorCSAgICAgIHJlZ2lzdGVyIGFmZmlsaWF0ZWQgd2l0aCB0aGlzIG1vZGUgaXMgJiB0aGlzICYgbm9ybWFsbHkKKwkgICAgICBDUjEzPUNSNyB0byBhbGxvdyB1cyB0byBjb3B5IGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIHNwYWNlLgorCSAgICAgIFdlIGRvIHRoaXMgYXMgZm9sbG93czoKKwkgICAgICBXZSBzZXQgYXIyIHRvIDAgdG8gZGVzaWduYXRlIGl0cworCSAgICAgIGFmZmlsaWF0ZWQgZ3ByICggZ3ByMiApdG8gcG9pbnQgdG8gcHJpbWFyeT1rZXJuZWwgc3BhY2UuCisJICAgICAgV2Ugc2V0IGFyNCB0byAxIHRvIGRlc2lnbmF0ZSBpdHMKKwkgICAgICBhZmZpbGlhdGVkIGdwciAoIGdwcjQgKSB0byBwb2ludCB0byBzZWNvbmRhcnk9aG9tZT11c2VyIHNwYWNlCisJICAgICAgJiB0aGVuIGVzc2VudGlhbGx5IGRvIGEgbWVtY29weShncHIyLGdwcjQsc2l6ZSkgdG8KKwkgICAgICBjb3B5IGRhdGEgYmV0d2VlbiB0aGUgYWRkcmVzcyBzcGFjZXMsIHRoZSByZWFzb24gd2UgdXNlIGhvbWUgc3BhY2UgZm9yIHRoZQorCSAgICAgIGtlcm5lbCAmIGRvbid0IGtlZXAgc2Vjb25kYXJ5IHNwYWNlIGZyZWUgaXMgdGhhdCBjb2RlIHdpbGwgbm90IHJ1biBpbiAKKwkgICAgICBzZWNvbmRhcnkgc3BhY2UuCisKKwkgICAgICAxMSBIb21lIFNwYWNlIE1vZGUgYWxsIHVzZXIgcHJvZ3JhbXMgcnVuIGluIHRoaXMgbW9kZS4KKwkgICAgICBpdCBpcyBhZmZpbGlhdGVkIHdpdGggQ1IxMy4KKworMTgtMTkgMTgtMTkgICBDb25kaXRpb24gY29kZXMgKENDKQorCisyMCAgICAyMCAgICAgIEZpeGVkIHBvaW50IG92ZXJmbG93IG1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCAKKyAgICAgICAgICAgICAgb2NjdXIgKCBub3JtYWxseSAwICkgCisKKzIxICAgIDIxICAgICAgRGVjaW1hbCBvdmVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCisgICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCisKKzIyICAgIDIyICAgICAgRXhwb25lbnQgdW5kZXJmbG93IG1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKKyAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKKworMjMgICAgMjMgICAgICBTaWduaWZpY2FuY2UgTWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAorICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQorCisyNC0zMSAyNC0zMCAgIFJlc2VydmVkIE11c3QgYmUgMC4KKworICAgICAgMzEgICAgICBFeHRlbmRlZCBBZGRyZXNzaW5nIE1vZGUKKyAgICAgIDMyICAgICAgQmFzaWMgQWRkcmVzc2luZyBNb2RlCisgICAgICAgICAgICAgIFVzZWQgdG8gc2V0IGFkZHJlc3NpbmcgbW9kZQorCSAgICAgIFBTVyAzMSAgIFBTVyAzMgorICAgICAgICAgICAgICAgIDAgICAgICAgICAwICAgICAgICAyNCBiaXQKKyAgICAgICAgICAgICAgICAwICAgICAgICAgMSAgICAgICAgMzEgYml0CisgICAgICAgICAgICAgICAgMSAgICAgICAgIDEgICAgICAgIDY0IGJpdAorCiszMiAgICAgICAgICAgICAxPTMxIGJpdCBhZGRyZXNzaW5nIG1vZGUgMD0yNCBiaXQgYWRkcmVzc2luZyBtb2RlIChmb3IgYmFja3dhcmQgCisgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5ICksIGxpbnV4IGFsd2F5cyBydW5zIHdpdGggdGhpcyBiaXQgc2V0IHRvIDEKKworMzMtNjQgICAgICAgICAgSW5zdHJ1Y3Rpb24gYWRkcmVzcy4KKyAgICAgIDMzLTYzICAgIFJlc2VydmVkIG11c3QgYmUgMAorICAgICAgNjQtMTI3ICAgQWRkcmVzcworICAgICAgICAgICAgICAgSW4gMjQgYml0cyBtb2RlIGJpdHMgNjQtMTAzPTAgYml0cyAxMDQtMTI3IEFkZHJlc3MgCisgICAgICAgICAgICAgICBJbiAzMSBiaXRzIG1vZGUgYml0cyA2NC05Nj0wIGJpdHMgOTctMTI3IEFkZHJlc3MKKyAgICAgICAgICAgICAgIE5vdGU6IHVubGlrZSAzMSBiaXQgbW9kZSBvbiBzLzM5MCBiaXQgOTYgbXVzdCBiZSB6ZXJvCisJICAgICAgIHdoZW4gbG9hZGluZyB0aGUgYWRkcmVzcyB3aXRoIExQU1dFIG90aGVyd2lzZSBhIAorICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gb2NjdXJzLCBMUFNXIGlzIGZ1bGx5IGJhY2t3YXJkCisgICAgICAgICAgICAgICBjb21wYXRpYmxlLgorIAkgIAorCSAgCitQcmVmaXggUGFnZShzKQorLS0tLS0tLS0tLS0tLS0JICAKK1RoaXMgcGVyIGNwdSBtZW1vcnkgYXJlYSBpcyB0b28gaW50aW1hdGVseSB0aWVkIHRvIHRoZSBwcm9jZXNzb3Igbm90IHRvIG1lbnRpb24uCitJdCBleGlzdHMgYmV0d2VlbiB0aGUgcmVhbCBhZGRyZXNzZXMgMC00MDk2IG9uIHMvMzkwICYgMC04MTkyIHovQXJjaGl0ZWN0dXJlICYgaXMgZXhjaGFuZ2VkIAord2l0aCBhIDEgcGFnZSBvbiBzLzM5MCBvciAyIHBhZ2VzIG9uIHovQXJjaGl0ZWN0dXJlIGluIGFic29sdXRlIHN0b3JhZ2UgYnkgdGhlIHNldCAKK3ByZWZpeCBpbnN0cnVjdGlvbiBpbiBsaW51eCdlcyBzdGFydHVwLiAKK1RoaXMgcGFnZSBpcyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgcHJlZml4IGZvciBlYWNoIHByb2Nlc3NvciBpbiBhbiBTTVAgY29uZmlndXJhdGlvbgorKCBhc3N1bWluZyB0aGUgb3MgZGVzaWduZXIgaXMgc2FuZSBvZiBjb3Vyc2UgOi0pICkuCitCeXRlcyAwLTUxMiAoIDIwMCBoZXggKSBvbiBzLzM5MCAmIDAtNTEyLDQwOTYtNDU0NCw0NjA0LTUxMTkgY3VycmVudGx5IG9uIHovQXJjaGl0ZWN0dXJlIAorYXJlIHVzZWQgYnkgdGhlIHByb2Nlc3NvciBpdHNlbGYgZm9yIGhvbGRpbmcgc3VjaCBpbmZvcm1hdGlvbiBhcyBleGNlcHRpb24gaW5kaWNhdGlvbnMgJiAKK2VudHJ5IHBvaW50cyBmb3IgZXhjZXB0aW9ucy4KK0J5dGVzIGFmdGVyIDB4YzAwIGhleCBhcmUgdXNlZCBieSBsaW51eCBmb3IgcGVyIHByb2Nlc3NvciBnbG9iYWxzIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgCisoIHRoZXJlIGlzIGEgZ2FwIG9uIHovQXJjaGl0ZWN1cmUgdG9vIGN1cnJlbnRseSBiZXR3ZWVuIDB4YzAwICYgMTAwMCB3aGljaCBsaW51eCB1c2VzICkuCitUaGUgY2xvc2VzdCB0aGluZyB0byB0aGlzIG9uIHRyYWRpdGlvbmFsIGFyY2hpdGVjdHVyZXMgaXMgdGhlIGludGVycnVwdAordmVjdG9yIHRhYmxlLiBUaGlzIGlzIGEgZ29vZCB0aGluZyAmIGRvZXMgc2ltcGxpZnkgc29tZSBvZiB0aGUga2VybmVsIGNvZGluZworaG93ZXZlciBpdCBtZWFucyB0aGF0IHdlIG5vdyBjYW5ub3QgY2F0Y2ggc3RyYXkgTlVMTCBwb2ludGVycyBpbiB0aGUKK2tlcm5lbCB3aXRob3V0IGhhcmQgY29kZWQgY2hlY2tzLgorCisKKworQWRkcmVzcyBTcGFjZXMgb24gSW50ZWwgTGludXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSB0cmFkaXRpb25hbCBJbnRlbCBMaW51eCBpcyBhcHByb3hpbWF0ZWx5IG1hcHBlZCBhcyBmb2xsb3dzIGZvcmdpdmUKK3RoZSBhc2NpaSBhcnQuCisweEZGRkZGRkZGIDRHQiBIaW1lbSAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogS2VybmVsIFNwYWNlICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKK1VzZXIgU3BhY2UgSGltZW0gKHR5cGljYWxseSAweEMwMDAwMDAwIDNHQiApKiAgVXNlciBTdGFjayAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgorCQkJCSAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKKwkJCQkJICAgICogIFNoYXJlZCBMaWJzICAqICAgICAgICAgICogTmV4dCBQcm9jZXNzICogICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgIHRvICAgICAgICogIAorCQkJCQkgICAgKiAgICAgICAgICAgICAgICogICAgPD09ICAgKiAgICAgUnVuICAgICAgKiAgPD09CisJCQkJCSAgICAqICBVc2VyIFByb2dyYW0gKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisJCQkJCSAgICAqICAgRGF0YSBCU1MgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoJIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisgICAgICAgICAJCQkgICAgICAgICAgICAqICAgU2VjdGlvbnMgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisweDAwMDAwMDAwICAgICAgICAgCQkJICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKKworTm93IGl0IGlzIGVhc3kgdG8gc2VlIHRoYXQgb24gSW50ZWwgaXQgaXMgcXVpdGUgZWFzeSB0byByZWNvZ25pc2UgYSBrZXJuZWwgYWRkcmVzcyAKK2FzIGJlaW5nIG9uZSBncmVhdGVyIHRoYW4gdXNlciBzcGFjZSBoaW1lbSAoIGluIHRoaXMgY2FzZSAweEMwMDAwMDAwKS4KKyYgYWRkcmVzc2VzIG9mIGxlc3MgdGhhbiB0aGlzIGFyZSB0aGUgb25lcyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHByb2dyYW0gb24gdGhpcworcHJvY2Vzc29yICggaWYgYW4gc21wIGJveCApLgorSWYgdXNpbmcgdGhlIHZpcnR1YWwgbWFjaGluZSAoIFZNICkgYXMgYSBkZWJ1Z2dlciBpdCBpcyBxdWl0ZSBkaWZmaWN1bHQgdG8KK2tub3cgd2hpY2ggdXNlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgdGhlIGFkZHJlc3Mgc3BhY2UgeW91IGFyZSBsb29raW5nIGF0Citjb3VsZCBiZSBmcm9tIGFueSBwcm9jZXNzIGluIHRoZSBydW4gcXVldWUuCisKK1RoZSBsaW1pdGF0aW9uIG9mIEludGVscyBhZGRyZXNzaW5nIHRlY2huaXF1ZSBpcyB0aGF0IHRoZSBsaW51eAora2VybmVsIHVzZXMgYSB2ZXJ5IHNpbXBsZSByZWFsIGFkZHJlc3MgdG8gdmlydHVhbCBhZGRyZXNzaW5nIHRlY2huaXF1ZQorb2YgUmVhbCBBZGRyZXNzPVZpcnR1YWwgQWRkcmVzcy1Vc2VyIFNwYWNlIEhpbWVtLgorVGhpcyBtZWFucyB0aGF0IG9uIEludGVsIHRoZSBrZXJuZWwgbGludXggY2FuIHR5cGljYWxseSBvbmx5IGFkZHJlc3MKK0hpbWVtPTB4RkZGRkZGRkYtMHhDMDAwMDAwMD0xR0IgJiB0aGlzIGlzIGFsbCB0aGUgUkFNIHRoZXNlIG1hY2hpbmVzCitjYW4gdHlwaWNhbGx5IHVzZS4KK1RoZXkgY2FuIGxvd2VyIFVzZXIgSGltZW0gdG8gMkdCIG9yIGxvd2VyICYgdGh1cyBiZQorYWJsZSB0byB1c2UgMkdCIG9mIFJBTSBob3dldmVyIHRoaXMgc2hyaW5rcyB0aGUgbWF4aW11bSBzaXplCitvZiBVc2VyIFNwYWNlIGZyb20gM0dCIHRvIDJHQiB0aGV5IGhhdmUgYSBubyB3aW4gbGltaXQgb2YgNEdCIHVubGVzcwordGhleSBnbyB0byA2NCBCaXQuCisKKworT24gMzkwIG91ciBsaW1pdGF0aW9ucyAmIHN0cmVuZ3RocyBtYWtlIHVzIHNsaWdodGx5IGRpZmZlcmVudC4KK0ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIGFyZSBvbmx5IGFsbG93ZWQgdXNlIDMxIGJpdHMgKDJHQikKK29mIG91ciAzMiBiaXQgYWRkcmVzc2VzLGhvd2V2ZXIsIHdlIHVzZSBlbnRpcmVseSBzZXBhcmF0ZSBhZGRyZXNzIAorc3BhY2VzIGZvciB0aGUgdXNlciAmIGtlcm5lbC4KKworVGhpcyBtZWFucyB3ZSBjYW4gc3VwcG9ydCAyR0Igb2Ygbm9uIEV4dGVuZGVkIFJBTSBvbiBzLzM5MCwgJiBtb3JlCit3aXRoIHRoZSBFeHRlbmRlZCBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGRldmljZSAmIAorY3VycmVudGx5IDRUQiBvZiBwaHlzaWNhbCBtZW1vcnkgY3VycmVudGx5IG9uIHovQXJjaGl0ZWN0dXJlLgorCisKK0FkZHJlc3MgU3BhY2VzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPdXIgYWRkcmVzc2luZyBzY2hlbWUgaXMgYXMgZm9sbG93cworCisKK0hpbWVtIDB4N2ZmZmZmZmYgMkdCIG9uIHMvMzkwICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKK2N1cnJlbnRseSAweDNmZmZmZmZmZmZmICgyXjQyKS0xICogIFVzZXIgU3RhY2sgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKK29uIHovQXJjaGl0ZWN0dXJlLgkJICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKKwkJICAgICAgICAgICAgICAgICAqICBTaGFyZWQgTGlicyAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICAgICAgICAgICAqICAKKwkJCSAgICAgICAgICogICAgICAgICAgICAgICAqICAgICAgICAgICogICAgS2VybmVsICAgICogIAorCQkgICAgICAgICAgICAgICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKKwkJICAgICAgICAgICAgICAgICAqICAgRGF0YSBCU1MgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisgICAgICAgICAgICAJCQkgKiAgIFNlY3Rpb25zICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgorMHgwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgorCitUaGlzIGFsc28gbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIFBTVyBwcm9ibGVtIHN0YXRlIGJpdAorb3IgdGhlIGFkZHJlc3NpbmcgbW9kZSB0byBkZWNpZGUgd2hldGhlciB3ZSBhcmUgbG9va2luZyBhdAordXNlciBvciBrZXJuZWwgc3BhY2UuCisKK1ZpcnR1YWwgQWRkcmVzc2VzIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSB2aXJ0dWFsIGFkZHJlc3Mgb24gcy8zOTAgaXMgbWFkZSB1cCBvZiAzIHBhcnRzCitUaGUgU1ggKCBzZWdtZW50IGluZGV4LCByb3VnaGx5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBHRCAmIFBNRCBpbiBsaW51eCB0ZXJtaW5vbG9neSApIAorYmVpbmcgYml0cyAxLTExLgorVGhlIFBYICggcGFnZSBpbmRleCwgY29ycmVzcG9uZGluZyB0byB0aGUgcGFnZSB0YWJsZSBlbnRyeSAocHRlKSBpbiBsaW51eCB0ZXJtaW5vbG9neSApCitiZWluZyBiaXRzIDEyLTE5LiAKK1RoZSByZW1haW5pbmcgYml0cyBCWCAodGhlIGJ5dGUgaW5kZXggYXJlIHRoZSBvZmZzZXQgaW4gdGhlIHBhZ2UgKQoraS5lLiBiaXRzIDIwIHRvIDMxLgorCitPbiB6L0FyY2hpdGVjdHVyZSBpbiBsaW51eCB3ZSBjdXJyZW50bHkgbWFrZSB1cCBhbiBhZGRyZXNzIGZyb20gNCBwYXJ0cy4KK1RoZSByZWdpb24gaW5kZXggYml0cyAoUlgpIDAtMzIgd2UgY3VycmVudGx5IHVzZSBiaXRzIDIyLTMyCitUaGUgc2VnbWVudCBpbmRleCAoU1gpIGJlaW5nIGJpdHMgMzMtNDMKK1RoZSBwYWdlIGluZGV4IChQWCkgYmVpbmcgYml0cyAgNDQtNTEKK1RoZSBieXRlIGluZGV4IChCWCkgYmVpbmcgYml0cyAgNTItNjMKKworTm90ZXM6CisxKSBzLzM5MCBoYXMgbm8gUE1EIHNvIHRoZSBQTUQgaXMgcmVhbGx5IHRoZSBQR0QgYWxzby4KK0EgbG90IG9mIHRoaXMgc3R1ZmYgaXMgZGVmaW5lZCBpbiBwZ3RhYmxlLmguCisKKzIpIEFsc28gc2VlaW5nIGFzIHMvMzkwJ3MgcGFnZSBpbmRleGVzIGFyZSBvbmx5IDFrICBpbiBzaXplIAorKGJpdHMgMTItMTkgeCA0IGJ5dGVzIHBlciBwdGUgKSB3ZSB1c2UgMSAoIHBhZ2UgNGsgKQordG8gbWFrZSB0aGUgYmVzdCB1c2Ugb2YgbWVtb3J5IGJ5IHVwZGF0aW5nIDQgc2VnbWVudCBpbmRpY2VzIAorZW50cmllcyBlYWNoIHRpbWUgd2UgbWVzcyB3aXRoIGEgUE1EICYgdXNlIG9mZnNldHMgCiswLDEwMjQsMjA0OCAmIDMwNzIgaW4gdGhpcyBwYWdlIGFzIGZvciBvdXIgc2VnbWVudCBpbmRleGVzLgorT24gei9BcmNoaXRlY3R1cmUgb3VyIHBhZ2UgaW5kZXhlcyBhcmUgbm93IDJrIGluIHNpemUKKyggYml0cyAxMi0xOSB4IDggYnl0ZXMgcGVyIHB0ZSApIHdlIGRvIGEgc2ltaWxhciB0cmljaworYnV0IG9ubHkgbWVzcyB3aXRoIDIgc2VnbWVudCBpbmRpY2VzIGVhY2ggdGltZSB3ZSBtZXNzIHdpdGgKK2EgUE1ELgorCiszKSBBcyB6L0FyY2hpdGVjdHVyZSBzdXBwb3J0cyB1cHRvIGEgbWFzc2l2ZSA1LWxldmVsIHBhZ2UgdGFibGUgbG9va3VwIHdlIAorY2FuIG9ubHkgdXNlIDMgY3VycmVudGx5IG9uIExpbnV4ICggYXMgdGhpcyBpcyBhbGwgdGhlIGdlbmVyaWMga2VybmVsCitjdXJyZW50bHkgc3VwcG9ydHMgKSBob3dldmVyIHRoaXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUKK3RoaXMgYWxsb3dzIHVzIHRvIGFjY2VzcyAoIGFjY29yZGluZyB0byBteSBzdW1zICkKKzRUQiBvZiB2aXJ0dWFsIHN0b3JhZ2UgcGVyIHByb2Nlc3MgaS5lLgorNDA5Nio1MTIoUFRFUykqMTAyNChQTURTKSoyMDQ4KFBHRCkgPSA0Mzk4MDQ2NTExMTA0IGJ5dGVzLAorZW5vdWdoIGZvciBhbm90aGVyIDIgb3IgMyBvZiB5ZWFycyBJIHRoaW5rIDotKS4KK3RvIGRvIHRoaXMgd2UgdXNlIGEgcmVnaW9uLXRoaXJkLXRhYmxlIGRlc2lnbmF0aW9uIHR5cGUgaW4KK291ciBhZGRyZXNzIHNwYWNlIGNvbnRyb2wgcmVnaXN0ZXJzLgorIAorCitUaGUgTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgS2VybmVsIFRhc2sgU3RydWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFYWNoIHByb2Nlc3MvdGhyZWFkIHVuZGVyIExpbnV4IGZvciBTMzkwIGhhcyBpdHMgb3duIGtlcm5lbCB0YXNrX3N0cnVjdAorZGVmaW5lZCBpbiBsaW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKK1RoZSBTMzkwIG9uIGluaXRpYWxpc2F0aW9uICYgcmVzdW1pbmcgb2YgYSBwcm9jZXNzIG9uIGEgY3B1IHNldHMKK3RoZSBfX0xDX0tFUk5FTF9TVEFDSyB2YXJpYWJsZSBpbiB0aGUgc3BhcmUgcHJlZml4IGFyZWEgZm9yIHRoaXMgY3B1CisoIHdoaWNoIHdlIHVzZSBmb3IgcGVyIHByb2Nlc3NvciBnbG9iYWxzKS4KKworVGhlIGtlcm5lbCBzdGFjayBwb2ludGVyIGlzIGludGltYXRlbHkgdGllZCB3aXRoIHRoZSB0YXNrIHN0dWN0dXJlIGZvcgorZWFjaCBwcm9jZXNzb3IgYXMgZm9sbG93cy4KKworICAgICAgICAgICAgICAgICAgICAgIHMvMzkwCisgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICogIDEgcGFnZSBrZXJuZWwgc3RhY2sgKgorCSAgICAqICAgICAgICAoIDRLICkgICAgICAgICoKKyAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgKiAgIDEgcGFnZSB0YXNrX3N0cnVjdCAqICAgICAgICAKKyAgICAgICAgICAgICogICAgICAgICggNEsgKSAgICAgICAgKgorOEsgYWxpZ25lZCAgKioqKioqKioqKioqKioqKioqKioqKioqIAorCisgICAgICAgICAgICAgICAgIHovQXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICogIDIgcGFnZSBrZXJuZWwgc3RhY2sgKgorCSAgICAqICAgICAgICAoIDhLICkgICAgICAgICoKKyAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgKiAgMiBwYWdlIHRhc2tfc3RydWN0ICAqICAgICAgICAKKyAgICAgICAgICAgICogICAgICAgICggOEsgKSAgICAgICAgKgorMTZLIGFsaWduZWQgKioqKioqKioqKioqKioqKioqKioqKioqIAorCitXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRlZGljYXRlIGFueSByZWdpc3RlciBvciBnbG9iYWwgdmFyaWFibGUKK3RvIHBvaW50IHRvIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2VzcyAmIGNhbiByZXRyaWV2ZSBpdCB3aXRoIHRoZSBmb2xsb3dpbmcKK3Zlcnkgc2ltcGxlIGNvbnN0cnVjdCBmb3Igcy8zOTAgJiBvbmUgdmVyeSBzaW1pbGFyIGZvciB6L0FyY2hpdGVjdHVyZS4KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBnZXRfY3VycmVudCh2b2lkKQoreworICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnQ7CisgICAgICAgIF9fYXNtX18oImxoaSAgICUwLC04MTkyXG5cdCIKKyAgICAgICAgICAgICAgICAibnIgICAgJTAsMTUiCisgICAgICAgICAgICAgICAgOiAiPXIiIChjdXJyZW50KSApOworICAgICAgICByZXR1cm4gY3VycmVudDsKK30KKworaS5lLiBqdXN0IGFuZGluZyB0aGUgY3VycmVudCBrZXJuZWwgc3RhY2sgcG9pbnRlciB3aXRoIHRoZSBtYXNrIC04MTkyLgorVGhhbmtmdWxseSBiZWNhdXNlIExpbnV4IGRvc2VuJ3QgaGF2ZSBzdXBwb3J0IGZvciBuZXN0ZWQgSU8gaW50ZXJydXB0cworJiBvdXIgZGV2aWNlcyBoYXZlIGxhcmdlIGJ1ZmZlcnMgY2FuIHN1cnZpdmUgaW50ZXJydXB0cyBiZWluZyBzaHV0IGZvciAKK3Nob3J0IGFtb3VudHMgb2YgdGltZSB3ZSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgc3RhY2sgZm9yIGludGVycnVwdHMuCisKKworCisKK1JlZ2lzdGVyIFVzYWdlICYgU3RhY2tmcmFtZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitPdmVydmlldzoKKy0tLS0tLS0tLQorVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdjYyBwcm9kdWNlcyBhdCB0aGUgdG9wICYgdGhlIGJvdHRvbSBvZgorZWFjaCBmdW5jdGlvbiwgaXQgdXN1YWxseSBpcyBmYWlybHkgY29uc2lzdGVudCAmIHNpbWlsYXIgZnJvbSAKK2Z1bmN0aW9uIHRvIGZ1bmN0aW9uICYgaWYgeW91IGtub3cgaXRzIGxheW91dCB5b3UgY2FuIHByb2JhbGJ5CittYWtlIHNvbWUgaGVhZHdheSBpbiBmaW5kaW5nIHRoZSB1bHRpbWF0ZSBjYXVzZSBvZiBhIHByb2JsZW0KK2FmdGVyIGEgY3Jhc2ggd2l0aG91dCBhIHNvdXJjZSBsZXZlbCBkZWJ1Z2dlci4KKworTm90ZTogVG8gZm9sbG93IHN0YWNrZnJhbWVzIHJlcXVpcmVzIGEga25vd2xlZGdlIG9mIEMgb3IgUGFzY2FsICYKK2xpbWl0ZWQga25vd2xlZGdlIG9mIG9uZSBhc3NlbWJseSBsYW5ndWFnZS4KKworSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKK3MvMzkwICYgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0cyBhcyB0aGUgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0IGRpZG4ndCBoYXZlCit0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbGlua2FnZSBmb3JtYXRzLgorCitHbG9zc2FyeToKKy0tLS0tLS0tLQorYWxsb2NhOgorVGhpcyBpcyBhIGJ1aWx0IGluIGNvbXBpbGVyIGZ1bmN0aW9uIGZvciBydW50aW1lIGFsbG9jYXRpb24KK29mIGV4dHJhIHNwYWNlIG9uIHRoZSBjYWxsZXJzIHN0YWNrIHdoaWNoIGlzIG9idmlvdXNseSBmcmVlZAordXAgb24gZnVuY3Rpb24gZXhpdCAoIGUuZy4gdGhlIGNhbGxlciBtYXkgY2hvb3NlIHRvIGFsbG9jYXRlIG5vdGhpbmcKK29mIGEgYnVmZmVyIG9mIDRrIGlmIHJlcXVpcmVkIGZvciB0ZW1wb3JhcnkgcHVycG9zZXMgKSwgaXQgZ2VuZXJhdGVzIAordmVyeSBlZmZpY2llbnQgY29kZSAoIGEgZmV3IGN5Y2xlcyAgKSB3aGVuIGNvbXBhcmVkIHRvIGFsdGVybmF0aXZlcyAKK2xpa2UgbWFsbG9jLgorCithdXRvbWF0aWNzOiBUaGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIG9uIHRoZSBzdGFjaywKK2kuZSB0aGV5IGFyZW4ndCBpbiByZWdpc3RlcnMgJiB0aGV5IGFyZW4ndCBzdGF0aWMuCisKK2JhY2stY2hhaW46CitUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgc3RhY2sgcG9pbnRlciBiZWZvcmUgZW50ZXJpbmcgYQorZnJhbWVkIGZ1bmN0aW9ucyAoIHNlZSBmcmFtZWxlc3MgZnVuY3Rpb24gKSBwcm9sb2d1ZSBnb3QgYnkgCitkZWZlcmVuY2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyLAorIGkuZS4gZ290IGJ5IGFjY2Vzc2luZyB0aGUgMzIgYml0IHZhbHVlIGF0IHRoZSBzdGFjayBwb2ludGVycworY3VycmVudCBsb2NhdGlvbi4KKworYmFzZS1wb2ludGVyOgorVGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJhY2sgb2YgdGhlIGxpdGVyYWwgcG9vbCB3aGljaAoraXMgYW4gYXJlYSBqdXN0IGJlaGluZCBlYWNoIHByb2NlZHVyZSB1c2VkIHRvIHN0b3JlIGNvbnN0YW50cworaW4gZWFjaCBmdW5jdGlvbi4KKworY2FsbC1jbG9iYmVyZWQ6IFRoZSBjYWxsZXIgcHJvYmFibHkgbmVlZHMgdG8gc2F2ZSB0aGVzZSByZWdpc3RlcnMgaWYgdGhlcmUgCitpcyBzb21ldGhpbmcgb2YgdmFsdWUgaW4gdGhlbSwgb24gdGhlIHN0YWNrIG9yIGVsc2V3aGVyZSBiZWZvcmUgbWFraW5nIGEgCitjYWxsIHRvIGFub3RoZXIgcHJvY2VkdXJlIHNvIHRoYXQgaXQgY2FuIHJlc3RvcmUgaXQgbGF0ZXIuCisKK2VwaWxvZ3VlOgorVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB0byByZXR1cm4gdG8gdGhlIGNhbGxlci4KKworZnJhbWVsZXNzLWZ1bmN0aW9uCitBIGZyYW1lbGVzcyBmdW5jdGlvbiBpbiBMaW51eCBmb3IgczM5MCAmIHovQXJjaGl0ZWN0dXJlIGlzIG9uZSB3aGljaCBkb2Vzbid0IAorbmVlZCBtb3JlIHRoYW4gdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSAoIDk2IGJ5dGVzIG9uIHMvMzkwLCAxNjAgb24gei9BcmNoaXRlY3R1cmUgKQorZ2l2ZW4gdG8gaXQgYnkgdGhlIGNhbGxlci4KK0EgZnJhbWVsZXNzIGZ1bmN0aW9uIG5ldmVyOgorMSkgU2V0cyB1cCBhIGJhY2sgY2hhaW4uCisyKSBDYWxscyBhbGxvY2EuCiszKSBDYWxscyBvdGhlciBub3JtYWwgZnVuY3Rpb25zCis0KSBIYXMgYXV0b21hdGljcy4KKworR09ULXBvaW50ZXI6CitUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsLW9mZnNldC10YWJsZSBpbiBFTEYKKyggRXhlY3V0YWJsZSBMaW5rYWJsZSBGb3JtYXQsIExpbnV4J2VzIG1vc3QgY29tbW9uIGV4ZWN1dGFibGUgZm9ybWF0ICksCithbGwgZ2xvYmFscyAmIHNoYXJlZCBsaWJyYXJ5IG9iamVjdHMgYXJlIGZvdW5kIHVzaW5nIHRoaXMgcG9pbnRlci4KKworbGF6eS1iaW5kaW5nCitFTEYgc2hhcmVkIGxpYnJhcmllcyBhcmUgdHlwaWNhbGx5IG9ubHkgbG9hZGVkIHdoZW4gcm91dGluZXMgaW4gdGhlIHNoYXJlZAorbGlicmFyeSBhcmUgYWN0dWFsbHkgZmlyc3QgY2FsbGVkIGF0IHJ1bnRpbWUuIFRoaXMgaXMgbGF6eSBiaW5kaW5nLgorCitwcm9jZWR1cmUtbGlua2FnZS10YWJsZQorVGhpcyBpcyBhIHRhYmxlIGZvdW5kIGZyb20gdGhlIEdPVCB3aGljaCBjb250YWlucyBwb2ludGVycyB0byByb3V0aW5lcworaW4gb3RoZXIgc2hhcmVkIGxpYnJhcmllcyB3aGljaCBjYW4ndCBiZSBjYWxsZWQgdG8gYnkgZWFzaWVyIG1lYW5zLgorCitwcm9sb2d1ZToKK1RoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgdG8gc2V0IHVwIHRoZSBzdGFjayBmcmFtZS4KKworb3V0Z29pbmctYXJnczoKK1RoaXMgaXMgZXh0cmEgYXJlYSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlmIHRoZQorcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxlZSdzIGNhbm5vdCBhbGwgYmUgcHV0IGluIHJlZ2lzdGVycywgdGhlIHNhbWUKK2FyZWEgY2FuIGJlIHJldXNlZCBieSBlYWNoIGZ1bmN0aW9uIHRoZSBjYWxsZXIgY2FsbHMuCisKK3JvdXRpbmUtZGVzY3JpcHRvcjoKK0EgQ09GRiAgZXhlY3V0YWJsZSBmb3JtYXQgYmFzZWQgY29uY2VwdCBvZiBhIHByb2NlZHVyZSByZWZlcmVuY2UgCithY3R1YWxseSBiZWluZyA4IGJ5dGVzIG9yIG1vcmUgYXMgb3Bwb3NlZCB0byBhIHNpbXBsZSBwb2ludGVyIHRvIHRoZSByb3V0aW5lLgorVGhpcyBpcyB0eXBpY2FsbHkgZGVmaW5lZCBhcyBmb2xsb3dzCitSb3V0aW5lIERlc2NyaXB0b3Igb2Zmc2V0IDA9UG9pbnRlciB0byBGdW5jdGlvbgorUm91dGluZSBEZXNjcmlwdG9yIG9mZnNldCA0PVBvaW50ZXIgdG8gVGFibGUgb2YgQ29udGVudHMKK1RoZSB0YWJsZSBvZiBjb250ZW50cy9UT0MgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGEgR09UIHBvaW50ZXIuCismIGl0IG1lYW5zIHRoYXQgc2hhcmVkIGxpYnJhcmllcyBldGMuIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsCitlbnZpcm9ubWVudHMgZWFjaCB3aXRoIHRoZWlyIG93biBUT0MuCisKKyAKK3N0YXRpYy1jaGFpbjogVGhpcyBpcyB1c2VkIGluIG5lc3RlZCBmdW5jdGlvbnMgYSBjb25jZXB0IGFkb3B0ZWQgZnJvbSBwYXNjYWwgCitieSBnY2Mgbm90IHVzZWQgaW4gYW5zaSBDIG9yIEMrKyAoIGFsdGhvdWdoIHF1aXRlIHVzZWZ1bCApLCBiYXNpY2FsbHkgaXQKK2lzIGEgcG9pbnRlciB1c2VkIHRvIHJlZmVyZW5jZSBsb2NhbCB2YXJpYWJsZXMgb2YgZW5jbG9zaW5nIGZ1bmN0aW9ucy4KK1lvdSBtaWdodCBjb21lIGFjcm9zcyB0aGlzIHN0dWZmIG9uY2Ugb3IgdHdpY2UgaW4geW91ciBsaWZldGltZS4KKworZS5nLgorVGhlIGZ1bmN0aW9uIGJlbG93IHNob3VsZCByZXR1cm4gMTEgdGhvdWdoIGdjYyBtYXkgZ2V0IHVwc2V0ICYgdG9zcyB3YXJuaW5ncyAKK2Fib3V0IHVudXNlZCB2YXJpYWJsZXMuCitpbnQgRnVuY3Rpb25BKGludCBhKQoreworCWludCBiOworCUZ1bmN0aW9uQyhpbnQgYykKKwl7CisJCWI9YysxOworCX0KKwlGdW5jdGlvbkMoMTApOworCXJldHVybihiKTsKK30KKworCitzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyIHVzYWdlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CityMCAgICAgICB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKK3IxCSB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKK3IyICAgICAgIGFyZ3VtZW50IDAgLyByZXR1cm4gdmFsdWUgMCAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorcjMgICAgICAgYXJndW1lbnQgMSAvIHJldHVybiB2YWx1ZSAxIChpZiBsb25nIGxvbmcpIGNhbGwtY2xvYmJlcmVkCityNCAgICAgICBhcmd1bWVudCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKK3I1ICAgICAgIGFyZ3VtZW50IDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorcjYJIGFyZ3VtZW50IDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorcjcgICAgICAgcG9pbnRlci10byBhcmd1bWVudHMgNSB0byAuLi4gICAgICAgICAgICAgIHNhdmVkICAgICAgCityOCAgICAgICB0aGlzICYgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKK3I5ICAgICAgIHRoaXMgJiB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorcjEwICAgICAgc3RhdGljLWNoYWluICggaWYgbmVzdGVkIGZ1bmN0aW9uICkgICAgICAgIHNhdmVkCityMTEgICAgICBmcmFtZS1wb2ludGVyICggaWYgZnVuY3Rpb24gdXNlZCBhbGxvY2EgKSAgc2F2ZWQKK3IxMiAgICAgIGdvdC1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorcjEzICAgICAgYmFzZS1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCityMTQgICAgICByZXR1cm4tYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKK3IxNSAgICAgIHN0YWNrLXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorCitmMCAgICAgICBhcmd1bWVudCAwIC8gcmV0dXJuIHZhbHVlICggZmxvYXQvZG91YmxlICkgY2FsbC1jbG9iYmVyZWQKK2YyICAgICAgIGFyZ3VtZW50IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorZjQgICAgICAgei9BcmNoaXRlY3R1cmUgYXJndW1lbnQgMiAgICAgICAgICAgICAgICAgIHNhdmVkCitmNiAgICAgICB6L0FyY2hpdGVjdHVyZSBhcmd1bWVudCAzICAgICAgICAgICAgICAgICAgc2F2ZWQKK1RoZSByZW1haW5pbmcgZmxvYXRpbmcgcG9pbnRzCitmMSxmMyxmNSBmNy1mMTUgYXJlIGNhbGwtY2xvYmJlcmVkLgorCitOb3RlczoKKy0tLS0tLQorMSkgVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCByZWdpc3RlcnMgd2hpY2ggYXJlIHVzZWQKK2J5IHRoZSBjYWxsZWUgYXJlIHNhdmVkLCBlLmcuIHRoZSBjb21waWxlciBpcyBwZXJmZWN0bHkKK2NhcGlibGUgb2YgdXNpbmcgcjExIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGEgZnJhbWUgYQorZnJhbWUgcG9pbnRlciBpZiBhIGZyYW1lIHBvaW50ZXIgaXMgbm90IG5lZWRlZC4KKzIpIEluIGZ1bmN0aW9ucyB3aXRoIHZhcmlhYmxlIGFyZ3VtZW50cyBlLmcuIHByaW50ZiB0aGUgY2FsbGluZyBwcm9jZWR1cmUgCitpcyBpZGVudGljYWwgdG8gb25lIHdpdGhvdXQgdmFyaWFibGUgYXJndW1lbnRzICYgdGhlIHNhbWUgbnVtYmVyIG9mIAorcGFyYW1ldGVycy4gSG93ZXZlciwgdGhlIHByb2xvZ3VlIG9mIHRoaXMgZnVuY3Rpb24gaXMgc29tZXdoYXQgbW9yZQoraGFpcnkgb3dpbmcgdG8gaXQgaGF2aW5nIHRvIG1vdmUgdGhlc2UgcGFyYW1ldGVycyB0byB0aGUgc3RhY2sgdG8KK2dldCB2YV9zdGFydCwgdmFfYXJnICYgdmFfZW5kIHRvIHdvcmsuCiszKSBBY2Nlc3MgcmVnaXN0ZXJzIGFyZSBjdXJyZW50bHkgdW51c2VkIGJ5IGdjYyBidXQgYXJlIHVzZWQgaW4KK3RoZSBrZXJuZWwuIFBvc3NpYmlsaXRpZXMgZXhpc3QgdG8gdXNlIHRoZW0gYXQgdGhlIG1vbWVudCBmb3IKK3RlbXBvcmFyeSBzdG9yYWdlIGJ1dCBpdCBpc24ndCByZWNvbW1lbmRlZC4KKzQpIE9ubHkgNCBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvcgorcGFyYW1ldGVyIHBhc3NpbmcgYXMgb2xkZXIgbWFjaGluZXMgc3VjaCBhcyBHMyBvbmx5IGhhdmUgb25seSA0CismIGl0IGtlZXBzIHRoZSBzdGFjayBmcmFtZSBjb21wYXRpYmxlIHdpdGggb3RoZXIgY29tcGlsZXJzLgorSG93ZXZlciB3aXRoIElFRUUgZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uIHVuZGVyIGxpbnV4IG9uIHRoZQorb2xkZXIgbWFjaGluZXMgeW91IGFyZSBmcmVlIHRvIHVzZSB0aGUgb3RoZXIgMTIuCis1KSBBIGxvbmcgbG9uZyBvciBkb3VibGUgcGFyYW1ldGVyIGNhbm5vdCBiZSBoYXZlIHRoZSAKK2ZpcnN0IDQgYnl0ZXMgaW4gYSByZWdpc3RlciAmIHRoZSBzZWNvbmQgZm91ciBieXRlcyBpbiB0aGUgCitvdXRnb2luZyBhcmdzIGFyZWEuIEl0IG11c3QgYmUgcHVyZWx5IGluIHRoZSBvdXRnb2luZyBhcmdzCithcmVhIGlmIGNyb3NzaW5nIHRoaXMgYm91bmRhcnkuCis2KSBGbG9hdGluZyBwb2ludCBwYXJhbWV0ZXJzIGFyZSBtaXhlZCB3aXRoIG91dGdvaW5nIGFyZ3MKK29uIHRoZSBvdXRnb2luZyBhcmdzIGFyZWEgaW4gdGhlIG9yZGVyIHRoZSBhcmUgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMuCis3KSBGbG9hdGluZyBwb2ludCBhcmd1bWVudHMgMiAmIDMgYXJlIHNhdmVkIGluIHRoZSBvdXRnb2luZyBhcmdzIGFyZWEgZm9yIAorei9BcmNoaXRlY3R1cmUKKworCitTdGFjayBGcmFtZSBMYXlvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLQorcy8zOTAgICAgIHovQXJjaGl0ZWN0dXJlCiswICAgICAgICAgMCAgICAgICAgICAgICBiYWNrIGNoYWluICggYSAwIGhlcmUgc2lnbmlmaWVzIGVuZCBvZiBiYWNrIGNoYWluICkKKzQgICAgICAgICA4ICAgICAgICAgICAgIGVvcyAoIGVuZCBvZiBzdGFjaywgbm90IHVzZWQgb24gTGludXggZm9yIFMzOTAgdXNlZCBpbiBvdGhlciBsaW5rYWdlIGZvcm1hdHMgKQorOCAgICAgICAgIDE2ICAgICAgICAgICAgZ2x1ZSB1c2VkIGluIG90aGVyIHMvMzkwIGxpbmthZ2UgZm9ybWF0cyBmb3Igc2F2ZWQgcm91dGluZSBkZXNjcmlwdG9ycyBldGMuCisxMiAgICAgICAgMjQgICAgICAgICAgICBnbHVlIHVzZWQgaW4gb3RoZXIgcy8zOTAgbGlua2FnZSBmb3JtYXRzIGZvciBzYXZlZCByb3V0aW5lIGRlc2NyaXB0b3JzIGV0Yy4KKzE2ICAgICAgICAzMiAgICAgICAgICAgIHNjcmF0Y2ggYXJlYQorMjAgICAgICAgIDQwICAgICAgICAgICAgc2NyYXRjaCBhcmVhCisyNCAgICAgICAgNDggICAgICAgICAgICBzYXZlZCByNiBvZiBjYWxsZXIgZnVuY3Rpb24KKzI4ICAgICAgICA1NiAgICAgICAgICAgIHNhdmVkIHI3IG9mIGNhbGxlciBmdW5jdGlvbgorMzIgICAgICAgIDY0ICAgICAgICAgICAgc2F2ZWQgcjggb2YgY2FsbGVyIGZ1bmN0aW9uCiszNiAgICAgICAgNzIgICAgICAgICAgICBzYXZlZCByOSBvZiBjYWxsZXIgZnVuY3Rpb24KKzQwICAgICAgICA4MCAgICAgICAgICAgIHNhdmVkIHIxMCBvZiBjYWxsZXIgZnVuY3Rpb24KKzQ0ICAgICAgICA4OCAgICAgICAgICAgIHNhdmVkIHIxMSBvZiBjYWxsZXIgZnVuY3Rpb24KKzQ4ICAgICAgICA5NiAgICAgICAgICAgIHNhdmVkIHIxMiBvZiBjYWxsZXIgZnVuY3Rpb24KKzUyICAgICAgICAxMDQgICAgICAgICAgIHNhdmVkIHIxMyBvZiBjYWxsZXIgZnVuY3Rpb24KKzU2ICAgICAgICAxMTIgICAgICAgICAgIHNhdmVkIHIxNCBvZiBjYWxsZXIgZnVuY3Rpb24KKzYwICAgICAgICAxMjAgICAgICAgICAgIHNhdmVkIHIxNSBvZiBjYWxsZXIgZnVuY3Rpb24KKzY0ICAgICAgICAxMjggICAgICAgICAgIHNhdmVkIGY0IG9mIGNhbGxlciBmdW5jdGlvbgorNzIgICAgICAgIDEzMiAgICAgICAgICAgc2F2ZWQgZjYgb2YgY2FsbGVyIGZ1bmN0aW9uCis4MCAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQKKzk2ICAgICAgICAxNjAgICAgICAgICAgIG91dGdvaW5nIGFyZ3MgcGFzc2VkIGZyb20gY2FsbGVyIHRvIGNhbGxlZQorOTYreCAgICAgIDE2MCt4ICAgICAgICAgcG9zc2libGUgc3RhY2sgYWxpZ25tZW50ICggOCBieXRlcyBkZXNpcmFibGUgKQorOTYreCt5ICAgIDE2MCt4K3kgICAgICAgYWxsb2NhIHNwYWNlIG9mIGNhbGxlciAoIGlmIHVzZWQgKQorOTYreCt5K3ogIDE2MCt4K3kreiAgICAgYXV0b21hdGljcyBvZiBjYWxsZXIgKCBpZiB1c2VkICkKKzAgICAgICAgICAgICAgICAgICAgICAgIGJhY2stY2hhaW4KKworQSBzYW1wbGUgcHJvZ3JhbSB3aXRoIGNvbW1lbnRzLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb21tZW50cyBvbiB0aGUgZnVuY3Rpb24gdGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIEl0IGRpZG4ndCBuZWVkIHRvIHNldCB1cCBhIHBvaW50ZXIgdG8gdGhlIGNvbnN0YW50IHBvb2wgZ3ByMTMgYXMgaXQgaXNuJ3QgdXNlZAorKCA6LSggKS4KKzIpIFRoaXMgaXMgYSBmcmFtZWxlc3MgZnVuY3Rpb24gJiBubyBzdGFjayBpcyBib3VnaHQuCiszKSBUaGUgY29tcGlsZXIgd2FzIGNsZXZlciBlbm91Z2ggdG8gcmVjb2duaXNlIHRoYXQgaXQgY291bGQgcmV0dXJuIHRoZQordmFsdWUgaW4gcjIgYXMgd2VsbCBhcyB1c2UgaXQgZm9yIHRoZSBwYXNzZWQgaW4gcGFyYW1ldGVyICggOi0pICkuCis0KSBUaGUgYmFzciAoIGJyYW5jaCByZWxhdGl2ZSAmIHNhdmUgKSB0cmljayB3b3JrcyBhcyBmb2xsb3dzIHRoZSBpbnN0cnVjdGlvbiAKK2hhcyBhIHNwZWNpYWwgY2FzZSB3aXRoIHIwLHIwIHdpdGggc29tZSBpbnN0cnVjdGlvbiBvcGVyYW5kcyBpcyB1bmRlcnN0b29kIGFzIAordGhlIGxpdGVyYWwgdmFsdWUgMCwgc29tZSByaXNjIGFyY2hpdGVjdHVyZXMgYWxzbyBkbyB0aGlzICkuIFNvIG5vdword2UgYXJlIGJyYW5jaGluZyB0byB0aGUgbmV4dCBhZGRyZXNzICYgdGhlIGFkZHJlc3MgbmV3IHByb2dyYW0gY291bnRlciBpcworaW4gcjEzLHNvIG5vdyB3ZSBzdWJ0cmFjdCB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUgd2UgaGF2ZSBleGVjdXRlZAorKyB0aGUgc2l6ZSBvZiB0aGUgbGl0ZXJhbCBwb29sIHRvIGdldCB0byB0aGUgdG9wIG9mIHRoZSBsaXRlcmFsIHBvb2wKKzAwNDAwMzdjIGludCB0ZXN0KGludCBiKQoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIHByb2xvZ3VlIGJlbG93CisgIDQwMDM3YzoJOTAgZGUgZjAgMzQgCXN0bQklcjEzLCVyMTQsNTIoJXIxNSkgIyBTYXZlIHJlZ2lzdGVycyByMTMgJiByMTQKKyAgNDAwMzgwOgkwZCBkMCAgICAgICAJYmFzcgklcjEzLCVyMCAgICAgICAgICAgIyBTZXQgdXAgcG9pbnRlciB0byBjb25zdGFudCBwb29sIHVzaW5nCisgIDQwMDM4MjoJYTcgZGEgZmYgZmEgCWFoaQklcjEzLC02ICAgICAgICAgICAgIyBiYXNyIHRyaWNrCisJcmV0dXJuKDUrYik7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIdWdlIG1haW4gcHJvZ3JhbQorICA0MDAzODY6CWE3IDJhIDAwIDA1IAlhaGkJJXIyLDUgICAgICAgICAgICAgICMgYWRkIDUgdG8gcjIKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIGVwaWxvZ3VlIGJlbG93IAorICA0MDAzOGE6CTk4IGRlIGYwIDM0IAlsbQklcjEzLCVyMTQsNTIoJXIxNSkgIyByZXN0b3JlIHJlZ2lzdGVycyByMTMgJiAxNAorICA0MDAzOGU6CTA3IGZlICAgICAgIAlicgklcjE0ICAgICAgICAgICAgICAgIyByZXR1cm4KK30KKworQ29tbWVudHMgb24gdGhlIGZ1bmN0aW9uIG1haW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxKSBUaGUgY29tcGlsZXIgZGlkIHRoaXMgZnVuY3Rpb24gb3B0aW1hbGx5ICggOC0pICkKKworTGl0ZXJhbCBwb29sIGZvciBtYWluLgorNDAwMzkwOglmZiBmZiBmZiBlYyAJLmxvbmcgMHhmZmZmZmZlYworbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gcHJvbG9ndWUgYmVsb3cKKyAgNDAwMzk0Ogk5MCBiZiBmMCAyYyAJc3RtCSVyMTEsJXIxNSw0NCglcjE1KSAjIFNhdmUgbmVjZXNzYXJ5IHJlZ2lzdGVycworICA0MDAzOTg6CTE4IDBmICAgICAgIAlscgklcjAsJXIxNSAgICAgICAgICAgIyBjb3B5IHN0YWNrIHBvaW50ZXIgdG8gcjAKKyAgNDAwMzlhOglhNyBmYSBmZiBhMCAJYWhpCSVyMTUsLTk2ICAgICAgICAgICAjIE1ha2UgYXJlYSBmb3IgY2FsbGVlIHNhdmluZyAKKyAgNDAwMzllOgkwZCBkMCAgICAgICAJYmFzcgklcjEzLCVyMCAgICAgICAgICAgIyBTZXQgdXAgcjEzIHRvIHBvaW50IHRvCisgIDQwMDNhMDoJYTcgZGEgZmYgZjAgCWFoaQklcjEzLC0xNiAgICAgICAgICAgIyBsaXRlcmFsIHBvb2wKKyAgNDAwM2E0Ogk1MCAwMCBmMCAwMCAJc3QJJXIwLDAoJXIxNSkgICAgICAgICMgU2F2ZSBiYWNrY2hhaW4KKworCXJldHVybih0ZXN0KDUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFpbiBQcm9ncmFtIEJlbG93CisgIDQwMDNhODoJNTggZTAgZDAgMDAgCWwJJXIxNCwwKCVyMTMpICAgICAgICMgbG9hZCByZWxhdGl2ZSBhZGRyZXNzIG9mIHRlc3QgZnJvbQorCQkJCQkJICAgICAgICAgICAjIGxpdGVyYWwgcG9vbAorICA0MDAzYWM6CWE3IDI4IDAwIDA1IAlsaGkJJXIyLDUgICAgICAgICAgICAgICMgU2V0IGZpcnN0IHBhcmFtZXRlciB0byA1CisgIDQwMDNiMDoJNGQgZWUgZDAgMDAgCWJhcwklcjE0LDAoJXIxNCwlcjEzKSAgIyBqdW1wIHRvIHRlc3Qgc2V0dGluZyByMTQgYXMgcmV0dXJuCisJCQkJCQkJICAgIyBhZGRyZXNzIHVzaW5nIGJyYW5jaCAmIHNhdmUgaW5zdHJ1Y3Rpb24uCisKKwkJCQkJCQkgICAjIEZ1bmN0aW9uIEVwaWxvZ3VlIGJlbG93CisgIDQwMDNiNDoJOTggYmYgZjAgOGMgCWxtCSVyMTEsJXIxNSwxNDAoJXIxNSkjIFJlc3RvcmUgbmVjZXNzYXJ5IHJlZ2lzdGVycy4KKyAgNDAwM2I4OgkwNyBmZSAgICAgICAJYnIJJXIxNCAgICAgICAgICAgICAgICMgcmV0dXJuIHRvIGRvIHByb2dyYW0gZXhpdCAKK30KKworCitDb21waWxlciB1cGRhdGVzCistLS0tLS0tLS0tLS0tLS0tCisKK21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQoreworICA0MDA0ZmM6CTkwIDdmIGYwIDFjICAgICAgIAlzdG0JJXI3LCVyMTUsMjgoJXIxNSkKKyAgNDAwNTAwOglhNyBkNSAwMCAwNCAgICAgICAJYnJhcwklcjEzLDQwMDUwOCA8bWFpbisweGM+CisgIDQwMDUwNDoJMDAgNDAgMDQgZjQgICAgICAgCS5sb25nCTB4MDA0MDA0ZjQgCisgICMgY29tcGlsZXIgbm93IHB1dHMgY29uc3RhbnQgcG9vbCBpbiBjb2RlIHRvIHNvIGl0IHNhdmVzIGFuIGluc3RydWN0aW9uIAorICA0MDA1MDg6CTE4IDBmICAgICAgICAgICAgIAlscgklcjAsJXIxNQorICA0MDA1MGE6CWE3IGZhIGZmIGEwICAgICAgIAlhaGkJJXIxNSwtOTYKKyAgNDAwNTBlOgk1MCAwMCBmMCAwMCAgICAgICAJc3QJJXIwLDAoJXIxNSkKKwlyZXR1cm4odGVzdCg1KSk7CisgIDQwMDUxMjoJNTggMTAgZDAgMDAgICAgICAgCWwJJXIxLDAoJXIxMykKKyAgNDAwNTE2OglhNyAyOCAwMCAwNSAgICAgICAJbGhpCSVyMiw1CisgIDQwMDUxYToJMGQgZTEgICAgICAgICAgICAgCWJhc3IJJXIxNCwlcjEKKyAgIyBjb21waWxlciBhZGRzIDEgZXh0cmEgaW5zdHJ1Y3Rpb24gdG8gZXBpbG9ndWUgdGhpcyBpcyBkb25lIHRvCisgICMgYXZvaWQgcHJvY2Vzc29yIHBpcGVsaW5lIHN0YWxscyBvd2luZyB0byBkYXRhIGRlcGVuZGVuY2llcyBvbiBnNSAmCisgICMgYWJvdmUgYXMgcmVnaXN0ZXIgMTQgaW4gdGhlIG9sZCBjb2RlIHdhcyBuZWVkZWQgZGlyZWN0bHkgYWZ0ZXIgYmVpbmcgbG9hZGVkIAorICAjIGJ5IHRoZSBsbQklcjExLCVyMTUsMTQwKCVyMTUpIGZvciB0aGUgYnIgJTE0LgorICA0MDA1MWM6CTU4IDQwIGYwIDk4ICAgICAgIAlsCSVyNCwxNTIoJXIxNSkKKyAgNDAwNTIwOgk5OCA3ZiBmMCA3YyAgICAgICAJbG0JJXI3LCVyMTUsMTI0KCVyMTUpCisgIDQwMDUyNDoJMDcgZjQgICAgICAgICAgICAgCWJyCSVyNAorfQorCisKK0hhcnRtdXQgKCBvdXIgY29tcGlsZXIgZGV2ZWxvcGVyICkgYWxzbyBoYXMgYmVlbiB0aHJlYXRlbmluZyB0byB0YWtlIG91dCB0aGUKK3N0YWNrIGJhY2tjaGFpbiBpbiBvcHRpbWlzZWQgY29kZSBhcyB0aGlzIGFsc28gY2F1c2VzIHBpcGVsaW5lIHN0YWxscywgeW91CitoYXZlIGJlZW4gd2FybmVkLgorCis2NCBiaXQgei9BcmNoaXRlY3R1cmUgY29kZSBkaXNhc3NlbWJseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHVuZGVyc3RhbmQgdGhlIHN0dWZmIGFib3ZlIHlvdSdsbCB1bmRlcnN0YW5kIHRoZSBzdHVmZgorYmVsb3cgdG9vIHNvIEknbGwgYXZvaWQgcmVwZWF0aW5nIG15c2VsZiAmIGp1c3Qgc2F5IHRoYXQgCitzb21lIG9mIHRoZSBpbnN0cnVjdGlvbnMgaGF2ZSBnJ3Mgb24gdGhlIGVuZCBvZiB0aGVtIHRvIGluZGljYXRlCit0aGV5IGFyZSA2NCBiaXQgJiB0aGUgc3RhY2sgb2Zmc2V0cyBhcmUgYSBiaWdnZXIsIAordGhlIG9ubHkgb3RoZXIgZGlmZmVyZW5jZSB5b3UnbGwgZmluZCBiZXR3ZWVuIDMyICYgNjQgYml0IGlzIHRoYXQKK3dlIG5vdyB1c2UgZjQgJiBmNiBmb3IgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIG9uIDY0IGJpdC4KKzAwMDAwMDAwODAwMDA1YjAgPHRlc3Q+OgoraW50IHRlc3QoaW50IGIpCit7CisJcmV0dXJuKDUrYik7CisgICAgODAwMDA1YjA6CWE3IDJhIDAwIDA1ICAgICAgIAlhaGkJJXIyLDUKKyAgICA4MDAwMDViNDoJYjkgMTQgMDAgMjIgICAgICAgCWxnZnIJJXIyLCVyMiAjIGRvd25jYXN0IHRvIGludGVnZXIKKyAgICA4MDAwMDViODoJMDcgZmUgICAgICAgICAgICAgCWJyCSVyMTQKKyAgICA4MDAwMDViYToJMDcgMDcgICAgICAgICAgICAgCWJjcgkwLCVyNworCisKK30KKworMDAwMDAwMDA4MDAwMDViYyA8bWFpbj46CittYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKK3sgCisgICAgODAwMDA1YmM6CWViIGJmIGYwIDU4IDAwIDI0IAlzdG1nCSVyMTEsJXIxNSw4OCglcjE1KQorICAgIDgwMDAwNWMyOgliOSAwNCAwMCAxZiAgICAgICAJbGdyCSVyMSwlcjE1CisgICAgODAwMDA1YzY6CWE3IGZiIGZmIDYwICAgICAgIAlhZ2hpCSVyMTUsLTE2MAorICAgIDgwMDAwNWNhOgllMyAxMCBmMCAwMCAwMCAyNCAJc3RnCSVyMSwwKCVyMTUpCisJcmV0dXJuKHRlc3QoNSkpOworICAgIDgwMDAwNWQwOglhNyAyOSAwMCAwNSAgICAgICAJbGdoaQklcjIsNQorICAgICMgYnJhc2wgYWxsb3dzIGp1bXBzID4gNjRrICYgaXMgb3ZlcmtpbGwgaGVyZSBicmFzIHdvdWxkIGRvIGZ1bmUKKyAgICA4MDAwMDVkNDoJYzAgZTUgZmYgZmYgZmYgZWUgCWJyYXNsCSVyMTQsODAwMDA1YjAgPHRlc3Q+IAorICAgIDgwMDAwNWRhOgllMyA0MCBmMSAxMCAwMCAwNCAJbGcJJXI0LDI3MiglcjE1KQorICAgIDgwMDAwNWUwOgllYiBiZiBmMCBmOCAwMCAwNCAJbG1nCSVyMTEsJXIxNSwyNDgoJXIxNSkKKyAgICA4MDAwMDVlNjoJMDcgZjQgICAgICAgICAgICAgCWJyCSVyNAorfQorCisKKworQ29tcGlsaW5nIHByb2dyYW1zIGZvciBkZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistZ2R3YXJmLTIgbm93IHdvcmtzIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBkZWZhdWx0IGRlYnVnZ2luZworZm9ybWF0IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIGFzIGl0IGlzIG1vcmUgcmVsaWFibGUgZm9yIGRlYnVnZ2luZworc2hhcmVkIGxpYnJhcmllcywgIG5vcm1hbCAtZyBkZWJ1Z2dpbmcgd29ya3MgbXVjaCBiZXR0ZXIgbm93CitUaGFua3MgdG8gdGhlIElCTSBqYXZhIGNvbXBpbGVyIGRldmVsb3BlcnMgYnVnIHJlcG9ydHMuIAorCitUaGlzIGlzIHR5cGljYWxseSBkb25lIGFkZGluZy9hcHBlbmRpbmcgdGhlIGZsYWdzIC1nIG9yIC1nZHdhcmYtMiB0byB0aGUgCitDRkxBR1MgJiBMREZMQUdTIHZhcmlhYmxlcyBNYWtlZmlsZSBvZiB0aGUgcHJvZ3JhbSBjb25jZXJuZWQuCisKK0lmIHVzaW5nIGdkYiAmIHlvdSB3b3VsZCBsaWtlIGFjY3VyYXRlIGRpc3BsYXlzIG9mIHJlZ2lzdGVycyAmCisgc3RhY2sgdHJhY2VzIGNvbXBpbGUgd2l0aG91dCBvcHRpbWlzYXRpb24gaS5lIG1ha2Ugc3VyZQordGhhdCB0aGVyZSBpcyBubyAtTzIgb3Igc2ltaWxhciBvbiB0aGUgQ0ZMQUdTIGxpbmUgb2YgdGhlIE1ha2VmaWxlICYKK3RoZSBlbWl0dGVkIGdjYyBjb21tYW5kcywgb2J2aW91c2x5IHRoaXMgd2lsbCBwcm9kdWNlIHdvcnNlIGNvZGUgCisoIG5vdCBhZHZpc2FibGUgZm9yIHNoaXBtZW50ICkgYnV0IGl0IGlzIGFuICBhaWQgdG8gdGhlIGRlYnVnZ2luZyBwcm9jZXNzLgorCitUaGlzIGFpZHMgZGVidWdnaW5nIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHdpbGwgY29weSBwYXJhbWV0ZXJzIHBhc3NlZCBpbgoraW4gcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrIHNvIGJhY2t0cmFjaW5nICYgbG9va2luZyBhdCBwYXNzZWQgaW4KK3BhcmFtZXRlcnMgd2lsbCB3b3JrLCBob3dldmVyIHNvbWUgbGFyZ2VyIHByb2dyYW1zIHdoaWNoIHVzZSBpbmxpbmUgZnVuY3Rpb25zCit3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgb3B0aW1pc2F0aW9uLgorCitEZWJ1Z2dpbmcgd2l0aCBvcHRpbWlzYXRpb24gaGFzIHNpbmNlIG11Y2ggaW1wcm92ZWQgYWZ0ZXIgZml4aW5nCitzb21lIGJ1Z3MsIHBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBnZGItNS4wIG9yIGxhdGVyIGRldmVsb3BlZCAKK2FmdGVyIE5vdicyMDAwLgorCitGaWd1cmluZyBvdXQgZ2NjIGNvbXBpbGUgZXJyb3JzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJZiB5b3UgYXJlIGdldHRpbmcgYSBsb3Qgb2Ygc3ludGF4IGVycm9ycyBjb21waWxpbmcgYSBwcm9ncmFtICYgdGhlIHByb2JsZW0KK2lzbid0IGJsYXRhbnRseSBvYnZpb3VzIGZyb20gdGhlIHNvdXJjZS4KK0l0IG9mdGVuIGhlbHBzIHRvIGp1c3QgcHJlcHJvY2VzcyB0aGUgZmlsZSwgdGhpcyBpcyBkb25lIHdpdGggdGhlIC1FCitvcHRpb24gaW4gZ2NjLgorV2hhdCB0aGlzIGRvZXMgaXMgdGhhdCBpdCBydW5zIHRocm91Z2ggdGhlIHZlcnkgZmlyc3QgcGhhc2Ugb2YgY29tcGlsYXRpb24KKyggY29tcGlsYXRpb24gaW4gZ2NjIGlzIGRvbmUgaW4gc2V2ZXJhbCBzdGFnZXMgJiBnY2MgY2FsbHMgbWFueSBwcm9ncmFtcyB0bworYWNoaWV2ZSBpdHMgZW5kIHJlc3VsdCApIHdpdGggdGhlIC1FIG9wdGlvbiBnY2MganVzdCBjYWxscyB0aGUgZ2NjIHByZXByb2Nlc3NvciAoY3BwKS4KK1RoZSBjIHByZXByb2Nlc3NvciBkb2VzIHRoZSBmb2xsb3dpbmcsIGl0IGpvaW5zIGFsbCB0aGUgZmlsZXMgI2luY2x1ZGVkIHRvZ2V0aGVyCityZWN1cnNpdmVseSAoICNpbmNsdWRlIGZpbGVzIGNhbiAjaW5jbHVkZSBvdGhlciBmaWxlcyApICYgYWxzbyB0aGUgYyBmaWxlIHlvdSB3aXNoIHRvIGNvbXBpbGUuCitJdCBwdXRzIGEgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlICNpbmNsdWRlZCBmaWxlcyBpbiBhIGNvbW1lbnQgJiBpdAorZG9lcyBtYWNybyBleHBhbnNpb24uCitUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGJlY2F1c2UKKzEpIFlvdSBjYW4gZG91YmxlIGNoZWNrIHdoZXRoZXIgdGhlIGZpbGVzIHlvdSBleHBlY3QgdG8gYmUgaW5jbHVkZWQgYXJlIHRoZSBvbmVzCit0aGF0IGFyZSBiZWluZyBpbmNsdWRlZCAoIGUuZy4gZG91YmxlIGNoZWNrIHRoYXQgeW91IGFyZW4ndCBnb2luZyB0byB0aGUgaTM4NiBhc20gZGlyZWN0b3J5ICkuCisyKSBDaGVjayB0aGF0IG1hY3JvIGRlZmluaXRpb25zIGFyZW4ndCBjbGFzaGluZyB3aXRoIHR5cGVkZWZzLAorMykgQ2hlY2sgdGhhdCBkZWZpbml0b25zIGFyZW4ndCBiZWluZyB1c2VkIGJlZm9yZSB0aGV5IGFyZSBiZWluZyBpbmNsdWRlZC4KKzQpIEhlbHBzIHB1dCB0aGUgbGluZSBlbWl0dGluZyB0aGUgZXJyb3IgdW5kZXIgdGhlIG1pY3Jvc2NvcGUgaWYgaXQgY29udGFpbnMgbWFjcm9zLgorCitGb3IgY29udmVuaWVuY2UgdGhlIExpbnV4IGtlcm5lbCdzIG1ha2VmaWxlIHdpbGwgZG8gcHJlcHJvY2Vzc2luZyBhdXRvbWF0aWNhbGx5IGZvciB5b3UKK2J5IHN1ZmZpeGluZyB0aGUgZmlsZSB5b3Ugd2FudCBidWlsdCB3aXRoIC5pICggaW5zdGVhZCBvZiAubyApCisKK2UuZy4KK2Zyb20gdGhlIGxpbnV4IGRpcmVjdG9yeSB0eXBlCittYWtlIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmkKK3RoaXMgd2lsbCBidWlsZAorCitzMzkwLWdjYyAtRF9fS0VSTkVMX18gLUkvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIKKy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX19TTVBfXyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgIC1FIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKKz4gYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuaSAgCisKK05vdyBsb29rIGF0IHNpZ25hbC5pIHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlLgorCisKKyMgMSAiL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7Cit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7Cit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCitJZiBpbnN0ZWFkIHlvdSBhcmUgZ2V0dGluZyBlcnJvcnMgZnVydGhlciBkb3duIGUuZy4KK3Vua25vd24gaW5zdHJ1Y3Rpb246MjUxNSAibW92ZS5sIiBvciBiZXR0ZXIgc3RpbGwgdW5rbm93biBpbnN0cnVjdGlvbjoyNTE1IAorIkZpeG1lIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGNhbGwgTWFydGluIiB5b3UgYXJlIHByb2JhYmx5IGFyZSBhdHRlbXB0aW5nIHRvIGNvbXBpbGUgc29tZSBjb2RlIAorbWVhbnQgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlIG9yIGNvZGUgdGhhdCBpcyBzaW1wbHkgbm90IGltcGxlbWVudGVkLCB3aXRoIGEgZml4bWUgc3RhdGVtZW50CitzdHVjayBpbnRvIHRoZSBpbmxpbmUgYXNzZW1ibHkgY29kZSBzbyB0aGF0IHRoZSBhdXRob3Igb2YgdGhlIGZpbGUgbm93IGtub3dzIGhlIGhhcyB3b3JrIHRvIGRvLgorVG8gbG9vayBhdCB0aGUgYXNzZW1ibHkgZW1pdHRlZCBieSBnY2MganVzdCBiZWZvcmUgaXQgaXMgYWJvdXQgdG8gY2FsbCBnYXMgKCB0aGUgZ251IGFzc2VtYmxlciApCit1c2UgdGhlIC1TIG9wdGlvbi4KK0FnYWluIGZvciB5b3VyIGNvbnZlbmllbmNlIHRoZSBMaW51eCBrZXJuZWwncyBNYWtlZmlsZSB3aWxsIGhvbGQgeW91ciBoYW5kICYKK2RvIGFsbCB0aGlzIGRvbmtleSB3b3JrIGZvciB5b3UgYWxzbyBieSBidWlsZGluZyB0aGUgZmlsZSB3aXRoIHRoZSAucyBzdWZmaXguCitlLmcuCitmcm9tIHRoZSBMaW51eCBkaXJlY3RvcnkgdHlwZSAKK21ha2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwucyAKKworczM5MC1nY2MgLURfX0tFUk5FTF9fIC1JL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCistZm5vLXN0cmljdC1hbGlhc2luZyAtRF9fU01QX18gLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgIC1TIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMgCistbyBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5zICAKKworCitUaGlzIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlLCAoIHBsZWFzZSBub3RlIHRoZSBjb25zdGFudCBwb29sICYgdGhlIHVzZWZ1bCBjb21tZW50cworaW4gdGhlIHByb2xvZ3VlIHRvIGdpdmUgeW91IGEgaGFuZCBhdCBpbnRlcnByZXRpbmcgaXQgKS4KKworLkxDNTQ6CisJLnN0cmluZwkibWlzYWxpZ25lZCAoX191MTYgKikgaW4gX194Y2hnXG4iCisuTEM1NzoKKwkuc3RyaW5nCSJtaXNhbGlnbmVkIChfX3UzMiAqKSBpbiBfX3hjaGdcbiIKKy5MJFBHMTogIyBQb29sIHN5c19zaWdzdXNwZW5kCisuTEMxOTI6CisJLmxvbmcJLTI2MjQwMQorLkxDMTkzOgorCS5sb25nCS0xCisuTEMxOTQ6CisJLmxvbmcJc2NoZWR1bGUtLkwkUEcxCisuTEMxOTU6CisJLmxvbmcJZG9fc2lnbmFsLS5MJFBHMQorCS5hbGlnbiA0CisuZ2xvYmwgc3lzX3NpZ3N1c3BlbmQKKwkudHlwZQkgc3lzX3NpZ3N1c3BlbmQsQGZ1bmN0aW9uCitzeXNfc2lnc3VzcGVuZDoKKyMJbGVhZiBmdW5jdGlvbiAgICAgICAgICAgMAorIwlhdXRvbWF0aWNzICAgICAgICAgICAgICAxNgorIwlvdXRnb2luZyBhcmdzICAgICAgICAgICAwCisjCW5lZWQgZnJhbWUgcG9pbnRlciAgICAgIDAKKyMJY2FsbCBhbGxvY2EgICAgICAgICAgICAgMAorIwloYXMgdmFyYXJncyAgICAgICAgICAgICAwCisjCWluY29taW5nIGFyZ3MgKHN0YWNrKSAgIDAKKyMJZnVuY3Rpb24gbGVuZ3RoICAgICAgICAgMTY4CisJU1RNCTgsMTUsMzIoMTUpCisJTFIJMCwxNQorCUFISQkxNSwtMTEyCisJQkFTUgkxMywwCisuTCRDTzE6CUFISQkxMywuTCRQRzEtLkwkQ08xCisJU1QJMCwwKDE1KQorCUxSICAgIDgsMgorCU4gICAgIDUsLkxDMTkyLS5MJFBHMSgxMykgCisKK0FkZGluZyAtZyB0byB0aGUgYWJvdmUgb3V0cHV0IG1ha2VzIHRoZSBvdXRwdXQgZXZlbiBtb3JlIHVzZWZ1bAorZS5nLiB0eXBpbmcKK21ha2UgQ0M6PSJzMzkwLWdjYyAtZyIga2VybmVsL3NjaGVkLnMKKword2hpY2ggY29tcGlsZXMuCitzMzkwLWdjYyAtZyAtRF9fS0VSTkVMX18gLUkvaG9tZS9iYXJyb3cvbGludXgtMi4zL2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1zdHJpY3QtYWxpYXNpbmcgLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgICAtUyBrZXJuZWwvc2NoZWQuYyAtbyBrZXJuZWwvc2NoZWQucyAKKworYWxzbyBvdXRwdXRzIHN0YWJzICggZGVidWdnZXIgKSBpbmZvLCBmcm9tIHRoaXMgaW5mbyB5b3UgY2FuIGZpbmQgb3V0IHRoZQorb2Zmc2V0cyAmIHNpemVzIG9mIHZhcmlvdXMgZWxlbWVudHMgaW4gc3RydWN0dXJlcy4KK2UuZy4gdGhlIHN0YWIgZm9yIHRoZSBzdHJ1Y3R1cmUKK3N0cnVjdCBybGltaXQgeworCXVuc2lnbmVkIGxvbmcJcmxpbV9jdXI7CisJdW5zaWduZWQgbG9uZwlybGltX21heDsKK307CitpcworLnN0YWJzICJybGltaXQ6VCgxNTEsMik9czhybGltX2N1cjooMCw1KSwwLDMyO3JsaW1fbWF4OigwLDUpLDMyLDMyOzsiLDEyOCwwLDAsMAorZnJvbSB0aGlzIHN0YWIgeW91IGNhbiBzZWUgdGhhdCAKK3JsaW1pdF9jdXIgc3RhcnRzIGF0IGJpdCBvZmZzZXQgMCAmIGlzIDMyIGJpdHMgaW4gc2l6ZQorcmxpbWl0X21heCBzdGFydHMgYXQgYml0IG9mZnNldCAzMiAmIGlzIDMyIGJpdHMgaW4gc2l6ZS4KKworCitEZWJ1Z2dpbmcgVG9vbHM6Cis9PT09PT09PT09PT09PT09CisKK29iamR1bXAKKz09PT09PT0KK1RoaXMgaXMgYSB0b29sIHdpdGggbWFueSBvcHRpb25zIHRoZSBtb3N0IHVzZWZ1bCBiZWluZyAoIGlmIGNvbXBpbGVkIHdpdGggLWcpLgorb2JqZHVtcCAtLXNvdXJjZSA8dmljdGltIHByb2dyYW0gb3Igb2JqZWN0IGZpbGU+ID4gPHZpY3RpbXMgZGVidWcgbGlzdGluZyA+CisKKworVGhlIHdob2xlIGtlcm5lbCBjYW4gYmUgY29tcGlsZWQgbGlrZSB0aGlzICggRG9pbmcgdGhpcyB3aWxsIG1ha2UgYSAxN01CIGtlcm5lbAorJiBhIDIwMCBNQiBsaXN0aW5nICkgaG93ZXZlciB5b3UgaGF2ZSB0byBzdHJpcCBpdCBiZWZvcmUgYnVpbGRpbmcgdGhlIGltYWdlCit1c2luZyB0aGUgc3RyaXAgY29tbWFuZCB0byBtYWtlIGl0IGEgbW9yZSByZWFzb25hYmxlIHNpemUgdG8gYm9vdCBpdC4KKworQSBzb3VyY2UvYXNzZW1ibHkgbWl4ZWQgZHVtcCBvZiB0aGUga2VybmVsIGNhbiBiZSBkb25lIHdpdGggdGhlIGxpbmUKK29iamR1bXAgLS1zb3VyY2Ugdm1saW51eCA+IHZtbGludXgubHN0CitBbHNvIGlmIHRoZSBmaWxlIGlzbid0IGNvbXBpbGVkIC1nIHRoaXMgd2lsbCBvdXRwdXQgYXMgbXVjaCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KK2FzIGl0IGNhbiAoIGUuZy4gZnVuY3Rpb24gbmFtZXMgKSwgaG93ZXZlciwgdGhpcyBpcyB2ZXJ5IHNsb3cgYXMgaXQgc3BlbmRzIGxvdHMKK29mIHRpbWUgc2VhcmNoaW5nIGZvciBkZWJ1Z2dpbmcgaW5mbywgdGhlIGZvbGxvd2luZyBzZWxmIGV4cGxhbml0b3J5IGxpbmUgc2hvdWxkIGJlIHVzZWQgCitpbnN0ZWFkIGlmIHRoZSBjb2RlIGlzbid0IGNvbXBpbGVkIC1nLgorb2JqZHVtcCAtLWRpc2Fzc2VtYmxlLWFsbCAtLXN5bXMgdm1saW51eCA+IHZtbGludXgubHN0ICAKK2FzIGl0IGlzIG11Y2ggZmFzdGVyCisKK0FzIGhhcmQgZHJpdmUgc3BhY2UgaXMgdmFsdWJsZSBtb3N0IG9mIHVzIHVzZSB0aGUgZm9sbG93aW5nIGFwcHJvYWNoLgorMSkgTG9vayBhdCB0aGUgZW1pdHRlZCBwc3cgb24gdGhlIGNvbnNvbGUgdG8gZmluZCB0aGUgY3Jhc2ggYWRkcmVzcyBpbiB0aGUga2VybmVsLgorMikgTG9vayBhdCB0aGUgZmlsZSBTeXN0ZW0ubWFwICggaW4gdGhlIGxpbnV4IGRpcmVjdG9yeSApIHByb2R1Y2VkIHdoZW4gYnVpbGRpbmcgCit0aGUga2VybmVsIHRvIGZpbmQgdGhlIGNsb3Nlc3QgYWRkcmVzcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgUFNXIHRvIGZpbmQgdGhlCitvZmZlbmRpbmcgZnVuY3Rpb24uCiszKSB1c2UgZ3JlcCBvciBzaW1pbGFyIHRvIHNlYXJjaCB0aGUgc291cmNlIHRyZWUgbG9va2luZyBmb3IgdGhlIHNvdXJjZSBmaWxlCisgd2l0aCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBkb24ndCBrbm93IHdoZXJlIGl0IGlzLgorNCkgcmVidWlsZCB0aGlzIG9iamVjdCBmaWxlIHdpdGggLWcgb24sIGFzIGFuIGV4YW1wbGUgc3VwcG9zZSB0aGUgZmlsZSB3YXMKKyggL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8gKSAKKzUpIEFzc3VtaW5nIHRoZSBmaWxlIHdpdGggdGhlIGVycm9uZW91cyBmdW5jdGlvbiBpcyBzaWduYWwuYyBNb3ZlIHRvIHRoZSBiYXNlIG9mIHRoZSAKK0xpbnV4IHNvdXJjZSB0cmVlLgorNikgcm0gL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KKzcpIG1ha2UgL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KKzgpIHdhdGNoIHRoZSBnY2MgY29tbWFuZCBsaW5lIGVtaXR0ZWQKKzkpIHR5cGUgaXQgaW4gYWdhaW4gb3IgYWxlcm5hdGl2ZWx5IGN1dCAmIHBhc3RlIGl0IG9uIHRoZSBjb25zb2xlIGFkZGluZyB0aGUgLWcgb3B0aW9uLgorMTApIG9iamR1bXAgLS1zb3VyY2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubyA+IHNpZ25hbC5sc3QKK1RoaXMgd2lsbCBvdXRwdXQgdGhlIHNvdXJjZSAmIHRoZSBhc3NlbWJseSBpbnRlcm1peGVkLCBhcyB0aGUgc25pcHBldCBiZWxvdyBzaG93cworVGhpcyB3aWxsIHVuZm9ydHVuYXRlbHkgb3V0cHV0IGFkZHJlc3NlcyB3aGljaCBhcmVuJ3QgdGhlIHNhbWUKK2FzIHRoZSBrZXJuZWwgb25lcyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGFyb3VuZCB0aGUgbWVudGFsIGFyaXRobWV0aWMKK2J5IHBsYXlpbmcgd2l0aCB0aGUgLS1hZGp1c3Qtdm1hIHBhcmFtZXRlciB0byBvYmpkdW1wLgorCisKKworCitleHRlcm4gaW5saW5lIHZvaWQgc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxwKQoreworICAgICAgYTA6ICAgICAgIDE4IDM0ICAgICAgICAgICBsciAgICAgICVyMywlcjQKKyAgICAgIGEyOiAgICAgICBhNyAzYSAwMyBiYyAgICAgYWhpICAgICAlcjMsOTU2CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZSgiICAgIGxoaSAgIDEsLTFcbiIKKyAgICAgIGE2OiAgICAgICBhNyAxOCBmZiBmZiAgICAgbGhpICAgICAlcjEsLTEKKyAgICAgIGFhOiAgICAgICAxZiAwMCAgICAgICAgICAgc2xyICAgICAlcjAsJXIwCisgICAgICBhYzogICAgICAgYmEgMDEgMzAgMDAgICAgIGNzICAgICAgJXIwLCVyMSwwKCVyMykKKyAgICAgIGIwOiAgICAgICBhNyA0NCBmZiBmZCAgICAgam0gICAgICBhYSA8c3lzX3NpZ3N1c3BlbmQrMHgyZT4KKyAgICAgICAgc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CisgICAgICBiNDogICAgICAgZDIgMDcgZjAgNjggICAgIG12YyAgICAgMTA0KDgsJXIxNSksOTcyKCVyNCkKKyAgICAgIGI4OiAgICAgICA0MyBjYworICAgICAgICByZXR1cm4gKHNldC0+c2lnWzBdICYgbWFzaykgIT0gMDsKK30gCisKKzYpIElmIGRlYnVnZ2luZyB1bmRlciBWTSBnbyBkb3duIHRvIHRoYXQgc2VjdGlvbiBpbiB0aGUgZG9jdW1lbnQgZm9yIG1vcmUgaW5mby4KKworCitJIG5vdyBoYXZlIGEgdG9vbCB3aGljaCB0YWtlcyB0aGUgcGFpbiBvdXQgb2YgLS1hZGp1c3Qtdm1hCismIHlvdSBhcmUgYWJsZSB0byBkbyBzb21ldGhpbmcgbGlrZQorbWFrZSAvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5sc3QKKyYgaXQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgdGhlIGNvcnJlY3RseSByZWxvY2F0ZWQgZW50cmllcyBmb3IKK3RoZSB0ZXh0IHNlZ21lbnQgaW4gdHJhcHMubHN0LgorVGhpcyB0b29sIGlzIG5vdyBzdGFuZGFyZCBpbiBsaW51eCBkaXN0cm8ncyBpbiBzY3JpcHRzL21ha2Vsc3QKKworc3RyYWNlOgorLS0tLS0tLQorUS4gV2hhdCBpcyBpdCA/CitBLiBJdCBpcyBhIHRvb2wgZm9yIGludGVyY2VwdGluZyBjYWxscyB0byB0aGUga2VybmVsICYgbG9nZ2luZyB0aGVtCit0byBhIGZpbGUgJiBvbiB0aGUgc2NyZWVuLgorCitRLiBXaGF0IHVzZSBpcyBpdCA/CitBLiBZb3UgY2FuIHVzZWQgaXQgdG8gZmluZCBvdXQgd2hhdCBmaWxlcyBhIHBhcnRpY3VsYXIgcHJvZ3JhbSBvcGVucy4KKworCisKK0V4YW1wbGUgMQorLS0tLS0tLS0tCitJZiB5b3Ugd2FudGVkIHRvIGtub3cgZG9lcyBwaW5nIHdvcmsgYnV0IGRpZG4ndCBoYXZlIHRoZSBzb3VyY2UgCitzdHJhY2UgcGluZyAtYyAxIDEyNy4wLjAuMSAgCismIHRoZW4gbG9vayBhdCB0aGUgbWFuIHBhZ2VzIGZvciBlYWNoIG9mIHRoZSBzeXNjYWxscyBiZWxvdywKKyggSW4gZmFjdCB0aGlzIGlzIHNvbWV0aW1lcyBlYXNpZXIgdGhhbiBsb29raW5nIGF0IHNvbWUgc3BhZ2V0dGkKK3NvdXJjZSB3aGljaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIGZvciBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKQorTm90IGV2ZXJ5dGhpbmcgdGhhdCBpdCB0aHJvd3Mgb3V0IG5lZWRzIHRvIG1ha2Ugc2Vuc2UgaW1tZWFkaWF0ZWx5CisKK0p1c3QgbG9va2luZyBxdWlja2x5IHlvdSBjYW4gc2VlIHRoYXQgaXQgaXMgbWFraW5nIHVwIGEgUkFXIHNvY2tldAorZm9yIHRoZSBJQ01QIHByb3RvY29sLgorRG9pbmcgYW4gYWxhcm0oMTApIGZvciBhIDEwIHNlY29uZCB0aW1lb3V0CismIGRvaW5nIGEgZ2V0dGltZW9mZGF5IGNhbGwgYmVmb3JlICYgYWZ0ZXIgZWFjaCByZWFkIHRvIHNlZSAKK2hvdyBsb25nIHRoZSByZXBsaWVzIHRvb2ssICYgd3JpdGluZyBzb21lIHRleHQgdG8gc3Rkb3V0IHNvIHRoZSB1c2VyCitoYXMgYW4gaWRlYSB3aGF0IGlzIGdvaW5nIG9uLgorCitzb2NrZXQoUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fSUNNUCkgPSAzCitnZXR1aWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCitzZXR1aWQoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCitzdGF0KCIvdXNyL3NoYXJlL2xvY2FsZS9DL2xpYmMuY2F0IiwgMHhiZmZmZjEzNCkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCitzdGF0KCIvdXNyL3NoYXJlL2xvY2FsZS9saWJjL0MiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKK3N0YXQoIi91c3IvbG9jYWwvc2hhcmUvbG9jYWxlL0MvbGliYy5jYXQiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKK2dldHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDM1Mworc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIFsxXSwgNCkgPSAwCitzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgWzQ5MTUyXSwgNCkgPSAwCitmc3RhdCgxLCB7c3RfbW9kZT1TX0lGQ0hSfDA2MjAsIHN0X3JkZXY9bWFrZWRldigzLCAxKSwgLi4ufSkgPSAwCittbWFwKDAsIDQwOTYsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCkgPSAweDQwMDA4MDAwCitpb2N0bCgxLCBUQ0dFVFMsIHtCOTYwMCBvcG9zdCBpc2lnIGljYW5vbiBlY2hvIC4uLn0pID0gMAord3JpdGUoMSwgIlBJTkcgMTI3LjAuMC4xICgxMjcuMC4wLjEpOiA1NiBkIi4uLiwgNDJQSU5HIDEyNy4wLjAuMSAoMTI3LjAuMC4xKTogNTYgZGF0YSBieXRlcworKSA9IDQyCitzaWdhY3Rpb24oU0lHSU5ULCB7MHg4MDQ5YmEwLCBbXSwgU0FfUkVTVEFSVH0sIHtTSUdfREZMfSkgPSAwIAorc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSwge1NJR19ERkx9KSA9IDAKK2dldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxMzg5NTF9LCBOVUxMKSA9IDAKK3NlbmR0bygzLCAiXDEwXDBEXDIwMWFcMVwwXDBcMTcjXDIxNzhcMzA3XDM2Ii4uLiwgNjQsIDAsIHtzaW5fZmFtaWx5PUFGX0lORVQsCitzaW5fcG9ydD1odG9ucygwKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIDE2KSA9IDY0CitzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9LCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0pID0gMAorc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDliYTAsIFtdLCBTQV9SRVNUQVJUfSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9KSA9IDAKK2FsYXJtKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKK3JlY3Zmcm9tKDMsICJFXDBcMFRcMDAwNVwwXDBAXDF8clwxNzdcMFwwXDFcMTc3Ii4uLiwgMTkyLCAwLCAKK3tzaW5fZmFtaWx5PUFGX0lORVQsIHNpbl9wb3J0PWh0b25zKDUwODgyKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIFsxNl0pID0gODQKK2dldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxNjAyMjR9LCBOVUxMKSA9IDAKK3JlY3Zmcm9tKDMsICJFXDBcMFRcMDAwNlwwXDBcMzc3XDFcMjc1cFwxNzdcMCIuLi4sIDE5MiwgMCwgCit7c2luX2ZhbWlseT1BRl9JTkVULCBzaW5fcG9ydD1odG9ucyg1MDg4MiksIHNpbl9hZGRyPWluZXRfYWRkcigiMTI3LjAuMC4xIil9LCBbMTZdKSA9IDg0CitnZXR0aW1lb2ZkYXkoezk0ODkwNDcxOSwgMTY2OTUyfSwgTlVMTCkgPSAwCit3cml0ZSgxLCAiNjQgYnl0ZXMgZnJvbSAxMjcuMC4wLjE6IGljbXBfc2UiLi4uLCAKKzU3NjQgYnl0ZXMgZnJvbSAxMjcuMC4wLjE6IGljbXBfc2VxPTAgdHRsPTI1NSB0aW1lPTI4LjAgbXMKKworRXhhbXBsZSAyCistLS0tLS0tLS0KK3N0cmFjZSBwYXNzd2QgMj4mMSB8IGdyZXAgb3BlbgorcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQKK29wZW4oIi9ldGMvbGQuc28uY2FjaGUiLCBPX1JET05MWSkgICAgICA9IDMKK29wZW4oIi9vcHQva2RlL2xpYi9saWJjLnNvLjUiLCBPX1JET05MWSkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCitvcGVuKCIvbGliL2xpYmMuc28uNSIsIE9fUkRPTkxZKSAgICAgICAgPSAzCitvcGVuKCIvZGV2IiwgT19SRE9OTFkpICAgICAgICAgICAgICAgICAgPSAzCitvcGVuKCIvdmFyL3J1bi91dG1wIiwgT19SRE9OTFkpICAgICAgICAgPSAzCitvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKSAgICAgICAgICAgPSAzCitvcGVuKCIvZXRjL3NoYWRvdyIsIE9fUkRPTkxZKSAgICAgICAgICAgPSAzCitvcGVuKCIvZXRjL2xvZ2luLmRlZnMiLCBPX1JET05MWSkgICAgICAgPSA0CitvcGVuKCIvZGV2L3R0eSIsIE9fUkRPTkxZKSAgICAgICAgICAgICAgPSA0IAorCitUaGUgMj4mMSBpcyBkb25lIHRvIHJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQgJiBncmVwIGlzIHRoZW4gZmlsdGVyaW5nIHRoaXMgaW5wdXQgCit0aHJvdWdoIHRoZSBwaXBlIGZvciBlYWNoIGxpbmUgY29udGFpbmluZyB0aGUgc3RyaW5nIG9wZW4uCisKKworRXhhbXBsZSAzCistLS0tLS0tLS0KK0dldHRpbmcgc29waGlzdG9jYXRlZAordGVsbmV0ZCBjcmFzaGVzIG9uICYgSSBkb24ndCBrbm93IHdoeQorU3RlcHMKKy0tLS0tCisxKSBSZXBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiAvZXRjL2luZXRkLmNvbmYKK3RlbG5ldCAgc3RyZWFtICB0Y3AgICAgIG5vd2FpdCAgcm9vdCAgICAvdXNyL3NiaW4vaW4udGVsbmV0ZCAtaCAKK3dpdGgKK3RlbG5ldCAgc3RyZWFtICB0Y3AgICAgIG5vd2FpdCAgcm9vdCAgICAvYmxhaAorCisyKSBDcmVhdGUgdGhlIGZpbGUgL2JsYWggd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnRzIHRvIHN0YXJ0IHRyYWNpbmcgdGVsbmV0ZCAKKyMhL2Jpbi9iYXNoCisvdXNyL2Jpbi9zdHJhY2UgLW8vdDEgLWYgL3Vzci9zYmluL2luLnRlbG5ldGQgLWggCiszKSBjaG1vZCA3MDAgL2JsYWggdG8gbWFrZSBpdCBleGVjdXRhYmxlIG9ubHkgdG8gcm9vdAorNCkKK2tpbGxhbGwgLUhVUCBpbmV0ZAorb3IgcHMgYXV4IHwgZ3JlcCBpbmV0ZAorZ2V0IGluZXRkJ3MgcHJvY2VzcyBpZAorJiBraWxsIC1IVVAgaW5ldGQgdG8gcmVzdGFydCBpdC4KKworSW1wb3J0YW50IG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tCistbyBpcyB1c2VkIHRvIHRlbGwgc3RyYWNlIHRvIG91dHB1dCB0byBhIGZpbGUgaW4gb3VyIGNhc2UgdDEgaW4gdGhlIHJvb3QgZGlyZWN0b3J5CistZiBpcyB0byBmb2xsb3cgY2hpbGRyZW4gaS5lLgorZS5nIGluIG91ciBjYXNlIGFib3ZlIHRlbG5ldGQgd2lsbCBzdGFydCB0aGUgbG9naW4gcHJvY2VzcyAmIHN1YnNlcXVlbnRseSBhIHNoZWxsIGxpa2UgYmFzaC4KK1lvdSB3aWxsIGJlIGFibGUgdG8gdGVsbCB3aGljaCBpcyB3aGljaCBmcm9tIHRoZSBwcm9jZXNzIElEJ3MgbGlzdGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZQorb2YgdGhlIHN0cmFjZSBvdXRwdXQuCistcDxwaWQ+IHdpbGwgdGVsbCBzdHJhY2UgdG8gYXR0YWNoIHRvIGEgcnVubmluZyBwcm9jZXNzLCB5dXAgdGhpcyBjYW4gYmUgZG9uZSBwcm92aWRlZAorIGl0IGlzbid0IGJlaW5nIHRyYWNlZCBvciBkZWJ1Z2dlZCBhbHJlYWR5ICYgeW91IGhhdmUgZW5vdWdoIHByaXZpbGVnZXMsCit0aGUgcmVhc29uIDIgcHJvY2Vzc2VzIGNhbm5vdCB0cmFjZSBvciBkZWJ1ZyB0aGUgc2FtZSBwcm9ncmFtIGlzIHRoYXQgc3RyYWNlCitiZWNvbWVzIHRoZSBwYXJlbnQgcHJvY2VzcyBvZiB0aGUgb25lIGJlaW5nIGRlYnVnZ2VkICYgcHJvY2Vzc2VzICggdW5saWtlIHBlb3BsZSApCitjYW4gaGF2ZSBvbmx5IG9uZSBwYXJlbnQuCisKKworSG93ZXZlciB0aGUgZmlsZSAvdDEgd2lsbCBnZXQgYmlnIHF1aXRlIHF1aWNrbHkKK3RvIHRlc3QgaXQgdGVsbmV0IDEyNy4wLjAuMQorCitub3cgbG9vayBhdCB3aGF0IGZpbGVzIGluLnRlbG5ldGQgZXhlY3ZlJ2QKKzQxMyAgIGV4ZWN2ZSgiL3Vzci9zYmluL2luLnRlbG5ldGQiLCBbIi91c3Ivc2Jpbi9pbi50ZWxuZXRkIiwgIi1oIl0sIFsvKiAxNyB2YXJzICovXSkgPSAwCis0MTQgICBleGVjdmUoIi9iaW4vbG9naW4iLCBbIi9iaW4vbG9naW4iLCAiLWgiLCAibG9jYWxob3N0IiwgIi1wIl0sIFsvKiAyIHZhcnMgKi9dKSA9IDAgCisKK1doZXkgaXQgd29ya2VkIS4KKworCitPdGhlciBoaW50czoKKy0tLS0tLS0tLS0tLQorSWYgdGhlIHByb2dyYW0gaXMgbm90IHZlcnkgaW50ZXJhY3RpdmUgKCBpLmUuIG5vdCBtdWNoIGtleWJvYXJkIGlucHV0ICkKKyYgaXMgY3Jhc2hpbmcgaW4gb25lIGFyY2hpdGVjdHVyZSBidXQgbm90IGluIGFub3RoZXIgeW91IGNhbiBkbyAKK2FuIHN0cmFjZSBvZiBib3RoIHByb2dyYW1zIHVuZGVyIGFzIGlkZW50aWNhbCBhIHNjZW5hcmlvIGFzIHlvdSBjYW4KK29uIGJvdGggYXJjaGl0ZWN0dXJlcyBvdXRwdXR0aW5nIHRvIGEgZmlsZSB0aGVuLgorZG8gYSBkaWZmIG9mIHRoZSB0d28gdHJhY2VzIHVzaW5nIHRoZSBkaWZmIHByb2dyYW0KK2kuZS4KK2RpZmYgb3V0cHV0MSBvdXRwdXQyCismIG1heWJlIHlvdSdsbCBiZSBhYmxlIHRvIHNlZSB3aGVyZSB0aGUgY2FsbCBwYXRocyBkaWZmZXJlZCwgdGhpcworaXMgcG9zc2libHkgbmVhciB0aGUgY2F1c2Ugb2YgdGhlIGNyYXNoLiAKKworTW9yZSBpbmZvCistLS0tLS0tLS0KK0xvb2sgYXQgbWFuIHBhZ2VzIGZvciBzdHJhY2UgJiB0aGUgdmFyaW91cyBzeXNjYWxscworZS5nLiBtYW4gc3RyYWNlLCBtYW4gYWxhcm0sIG1hbiBzb2NrZXQuCisKKworUGVyZm9ybWFuY2UgRGVidWdnaW5nCis9PT09PT09PT09PT09PT09PT09PT0KK2djYyBpcyBjYXBpYmxlIG9mIGNvbXBpbGluZyBpbiBwcm9maWxpbmcgY29kZSBqdXN0IGFkZCB0aGUgLXAgb3B0aW9uCit0byB0aGUgQ0ZMQUdTLCB0aGlzIG9idmlvdXNseSBhZmZlY3RzIHByb2dyYW0gc2l6ZSAmIHBlcmZvcm1hbmNlLgorVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZ3Byb2YgZ251IHByb2ZpbGluZyB0b29sIG9yIHRoZQorZ2NvdiB0aGUgZ251IGNvZGUgY292ZXJhZ2UgdG9vbCAoIGNvZGUgY292ZXJhZ2UgaXMgYSBtZWFucyBvZiB0ZXN0aW5nCitjb2RlIHF1YWxpdHkgYnkgY2hlY2tpbmcgaWYgYWxsIHRoZSBjb2RlIGluIGFuIGV4ZWN1dGFibGUgaW4gZXhlcmNpc2VkIGJ5CithIHRlc3RlciApLgorCisKK1VzaW5nIHRvcCB0byBmaW5kIG91dCB3aGVyZSBwcm9jZXNzZXMgYXJlIHNsZWVwaW5nIGluIHRoZSBrZXJuZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGRvIHRoaXMgY29weSB0aGUgU3lzdGVtLm1hcCBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB3aGVyZQordGhlIGxpbnV4IGtlcm5lbCB3YXMgYnVpbHQgdG8gdGhlIC9ib290IGRpcmVjdG9yeSBvbiB5b3VyIAorbGludXggbWFjaGluZS4KK1N0YXJ0IHRvcAorTm93IHR5cGUgZlU8cmV0dXJuPgorWW91IHNob3VsZCBzZWUgYSBuZXcgZmllbGQgY2FsbGVkIFdDSEFOIHdoaWNoCit0ZWxscyB5b3Ugd2hlcmUgZWFjaCBwcm9jZXNzIGlzIHNsZWVwaW5nIGhlcmUgaXMgYSB0eXBpY2FsIG91dHB1dC4KKyAKKyA2OjU5cG0gIHVwIDQxIG1pbiwgIDEgdXNlciwgIGxvYWQgYXZlcmFnZTogMC4wMCwgMC4wMCwgMC4wMAorMjggcHJvY2Vzc2VzOiAyNyBzbGVlcGluZywgMSBydW5uaW5nLCAwIHpvbWJpZSwgMCBzdG9wcGVkCitDUFUgc3RhdGVzOiAgMC4wJSB1c2VyLCAgMC4xJSBzeXN0ZW0sICAwLjAlIG5pY2UsIDk5LjglIGlkbGUKK01lbTogICAyNTQ5MDBLIGF2LCAgIDQ1OTc2SyB1c2VkLCAgMjA4OTI0SyBmcmVlLCAgICAgICAwSyBzaHJkLCAgIDI4NjM2SyBidWZmCitTd2FwOiAgICAgICAwSyBhdiwgICAgICAgMEsgdXNlZCwgICAgICAgMEsgZnJlZSAgICAgICAgICAgICAgICAgICAgODYyMEsgY2FjaGVkCisKKyAgUElEIFVTRVIgICAgIFBSSSAgTkkgIFNJWkUgIFJTUyBTSEFSRSBXQ0hBTiAgICAgU1RBVCAgTElCICVDUFUgJU1FTSAgIFRJTUUgQ09NTUFORAorICA3NTAgcm9vdCAgICAgIDEyICAgMCAgIDg0OCAgODQ4ICAgNzAwIGRvX3NlbGVjdCBTICAgICAgIDAgIDAuMSAgMC4zICAgMDowMCBpbi50ZWxuZXRkCisgIDc2NyByb290ICAgICAgMTYgICAwICAxMTQwIDExNDAgICA5NjQgICAgICAgICAgIFIgICAgICAgMCAgMC4xICAwLjQgICAwOjAwIHRvcAorICAgIDEgcm9vdCAgICAgICA4ICAgMCAgIDIxMiAgMjEyICAgMTgwIGRvX3NlbGVjdCBTICAgICAgIDAgIDAuMCAgMC4wICAgMDowMCBpbml0CisgICAgMiByb290ICAgICAgIDkgICAwICAgICAwICAgIDAgICAgIDAgZG93bl9pbnRlIFNXICAgICAgMCAgMC4wICAwLjAgICAwOjAwIGttY2hlY2sKKworVGhlIHRpbWUgY29tbWFuZAorLS0tLS0tLS0tLS0tLS0tLQorQW5vdGhlciByZWxhdGVkIGNvbW1hbmQgaXMgdGhlIHRpbWUgY29tbWFuZCB3aGljaCBnaXZlcyB5b3UgYW4gaW5kaWNhdGlvbgorb2Ygd2hlcmUgYSBwcm9jZXNzIGlzIHNwZW5kaW5nIHRoZSBtYWpvcml0eSBvZiBpdHMgdGltZS4KK2UuZy4KK3RpbWUgcGluZyAtYyA1IG5jCitvdXRwdXRzCityZWFsCTBtNC4wNTRzCit1c2VyCTBtMC4wMTBzCitzeXMJMG0wLjAxMHMKKworRGVidWdnaW5nIHVuZGVyIFZNCis9PT09PT09PT09PT09PT09PT0KKworTm90ZXMKKy0tLS0tCitBZGRyZXNzZXMgJiB2YWx1ZXMgaW4gdGhlIFZNIGRlYnVnZ2VyIGFyZSBhbHdheXMgaGV4IG5ldmVyIGRlY2ltYWwKK0FkZHJlc3MgcmFuZ2VzIGFyZSBvZiB0aGUgZm9ybWF0IDxIZXhWYWx1ZTE+LTxIZXhWYWx1ZTI+IG9yIDxIZXhWYWx1ZTE+LjxIZXhWYWx1ZTI+IAorZS5nLiBUaGUgYWRkcmVzcyByYW5nZSAgMHgyMDAwIHRvIDB4MzAwMCBjYW4gYmUgZGVzY3JpYmVkIGRlc2NyaWJlZCBhcworMjAwMC0zMDAwIG9yIDIwMDAuMTAwMAorCitUaGUgVk0gRGVidWdnZXIgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KKworVk0ncyBzdHJlbmd0aHMgYXJlIHVzdWFsbHkgb3RoZXIgZGVidWdnZXJzIHdlYWtuZXNzZXMgeW91IGNhbiBnZXQgYXQgYW55IHJlc291cmNlCitubyBtYXR0ZXIgaG93IHNlbnNpdGl2ZSBlLmcuIG1lbW9yeSBtYW5hZ2VtZW50IHJlc291cmNlcyxjaGFuZ2UgYWRkcmVzcyB0cmFuc2xhdGlvbgoraW4gdGhlIFBTVy4gRm9yIGtlcm5lbCBoYWNraW5nIHlvdSB3aWxsIHJlYXAgZGl2aWRlbmRzIGlmIHlvdSBnZXQgZ29vZCBhdCBpdC4KKworVGhlIFZNIERlYnVnZ2VyIGRpc3BsYXlzIG9wZXJhdG9ycyBidXQgbm90IG9wZXJhbmRzLCBwcm9iYWJseSBiZWNhdXNlIHNvbWUKK29mIGl0IHdhcyB3cml0dGVuIHdoZW4gbWVtb3J5IHdhcyBleHBlbnNpdmUgJiB0aGUgcHJvZ3JhbW1lciB3YXMgcHJvYmFibHkgcHJvdWQgdGhhdAoraXQgZml0dGVkIGludG8gMmsgb2YgbWVtb3J5ICYgdGhlIHByb2dyYW1tZXJzICYgZGlkbid0IHdhbnQgdG8gc2hvY2sgaGFyZGNvcmUgVk0nZXJzIGJ5CitjaGFuZ2luZyB0aGUgaW50ZXJmYWNlIDotKSwgYWxzbyB0aGUgZGVidWdnZXIgZGlzcGxheXMgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHRoZSBzYW1lIGxpbmUgJiAKK3RoZSBhdXRob3Igb2YgdGhlIGNvZGUgcHJvYmFibHkgZmVsdCB0aGF0IGl0IHdhcyBhIGdvb2QgaWRlYSBub3QgdG8gZ28gb3ZlciAKK3RoZSA4MCBjb2x1bW5zIG9uIHRoZSBzY3JlZW4uIAorCitBcyBzb21lIG9mIHlvdSBhcmUgcHJvYmFibHkgaW4gYSBwYW5pYyBub3cgdGhpcyBpc24ndCBhcyB1bmludHVpdGl2ZSBhcyBpdCBtYXkgc2VlbQorYXMgdGhlIDM5MCBpbnN0cnVjdGlvbnMgYXJlIGVhc3kgdG8gZGVjb2RlIG1lbnRhbGx5ICYgeW91IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhdCBhIGxvdCAKK29mIHRoZW0gYXMgYWxsIHRoZSBvcGVyYW5kcyBhcmUgbmliYmxlICggaGFsZiBieXRlIGFsaWduZWQgKSAmIGlmIHlvdSBoYXZlIGFuIG9iamR1bXAgbGlzdGluZworYWxzbyBpdCBpcyBxdWl0ZSBlYXN5IHRvIGZvbGxvdywgaWYgeW91IGRvbid0IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nIGtlZXAgYSBjb3B5IG9mCit0aGUgcy8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgJiBsb29rIGF0IGJldHdlZW4gcGFnZXMgMiAmIDcgb3IgYWx0ZXJuYXRpdmVseSB0aGUKK3MvMzkwIHByaW5jaXBsZXMgb2Ygb3BlcmF0aW9uLgorZS5nLiBldmVuIEkgY2FuIGd1ZXNzIHRoYXQgCiswMDAxQUZGOCcgTFIgICAgMTgwRiAgICAgICAgQ0MgMAoraXMgYSAoIGxvYWQgcmVnaXN0ZXIgKSBsciByMCxyMTUgCisKK0Fsc28gaXQgaXMgdmVyeSBlYXN5IHRvIHRlbGwgdGhlIGxlbmd0aCBvZiBhIDM5MCBpbnN0cnVjdGlvbiBmcm9tIHRoZSAyIG1vc3Qgc2lnbmlmaWNhbnQKK2JpdHMgaW4gdGhlIGluc3RydWN0aW9uICggbm90IHRoYXQgdGhpcyBpbmZvIGlzIHJlYWxseSB1c2VmdWwgZXhjZXB0IGlmIHlvdSBhcmUgdHJ5aW5nIHRvCittYWtlIHNlbnNlIG9mIGEgaGV4ZHVtcCBvZiBjb2RlICkuCitIZXJlIGlzIGEgdGFibGUKK0JpdHMgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIExlbmd0aAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswMCAgICAgICAgICAgICAgICAgICAgICAgICAgMiBCeXRlcworMDEgICAgICAgICAgICAgICAgICAgICAgICAgIDQgQnl0ZXMKKzEwICAgICAgICAgICAgICAgICAgICAgICAgICA0IEJ5dGVzCisxMSAgICAgICAgICAgICAgICAgICAgICAgICAgNiBCeXRlcworCisKKworCitUaGUgZGVidWdnZXIgYWxzbyBkaXNwbGF5cyBvdGhlciB1c2VmdWwgaW5mbyBvbiB0aGUgc2FtZSBsaW5lIHN1Y2ggYXMgdGhlCithZGRyZXNzZXMgYmVpbmcgb3BlcmF0ZWQgb24gZGVzdGluYXRpb24gYWRkcmVzc2VzIG9mIGJyYW5jaGVzICYgY29uZGl0aW9uIGNvZGVzLgorZS5nLiAgCiswMDAxOTczNicgQUhJICAgQTdEQUZGMEUgICAgQ0MgMQorMDAwMTk4QkEnIEJSQyAgIEE3ODQwMDA0IC0+IDAwMDE5OEMyJyAgIENDIDAKKzAwMDE5OENFJyBTVE0gICA5MDBFRjA2OCA+PiAwRkE5NUU3OCAgICBDQyAyCisKKworCitVc2VmdWwgVk0gZGVidWdnZXIgY29tbWFuZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJIHN1cHBvc2UgSSdkIGJldHRlciBtZW50aW9uIHRoaXMgYmVmb3JlIEkgc3RhcnQKK3RvIGxpc3QgdGhlIGN1cnJlbnQgYWN0aXZlIHRyYWNlcyBkbyAKK1EgVFIKK3RoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMjU1IG9mIHRoZXNlIHBlciBzZXQKKyggbW9yZSBhYm91dCB0cmFjZSBzZXRzIGxhdGVyICkuCitUbyBzdG9wIHRyYWNlcyBpc3N1ZSBhCitUUiBFTkQuCitUbyBkZWxldGUgYSBwYXJ0aWN1bGFyIGJyZWFrcG9pbnQgaXNzdWUKK1RSIERFTCA8YnJlYWtwb2ludCBudW1iZXI+CisKK1RoZSBQQTEga2V5IGRyb3BzIHRvIENQIG1vZGUgc28geW91IGNhbiBpc3N1ZSBkZWJ1Z2dlciBjb21tYW5kcywKK0RvaW5nIGFsdCBjIChvbiBteSAzMjcwIGNvbnNvbGUgYXQgbGVhc3QgKSBjbGVhcnMgdGhlIHNjcmVlbi4gCitoaXR0aW5nIGIgPGVudGVyPiBjb21lcyBiYWNrIHRvIHRoZSBydW5uaW5nIG9wZXJhdGluZyBzeXN0ZW0KK2Zyb20gY3AgbW9kZSAoIGluIG91ciBjYXNlIGxpbnV4ICkuCitJdCBpcyB0eXBpY2FsbHkgdXNlZnVsIHRvIGFkZCBzaG9ydGN1dHMgdG8geW91ciBwcm9maWxlLmV4ZWMgZmlsZQoraWYgeW91IGhhdmUgb25lICggdGhpcyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYXV0b2V4ZWMuYmF0IGluIERPUyApLgorZmlsZSBoZXJlIGFyZSBhIGZldyBmcm9tIG1pbmUuCisvKiB0aGlzIGdpdmVzIG1lIGNvbW1hbmQgaGlzdG9yeSBvbiBpc3N1aW5nIGYxMiAqLworc2V0IHBmMTIgcmV0cmlldmUgCisvKiB0aGlzIGNvbnRpbnVlcyAqLworc2V0IHBmOCBpbW0gYgorLyogZ29lcyB0byB0cmFjZSBzZXQgYSAqLworc2V0IHBmMSBpbW0gdHIgZ290byBhCisvKiBnb2VzIHRvIHRyYWNlIHNldCBiICovCitzZXQgcGYyIGltbSB0ciBnb3RvIGIKKy8qIGdvZXMgdG8gdHJhY2Ugc2V0IGMgKi8KK3NldCBwZjMgaW1tIHRyIGdvdG8gYworCisKKworSW5zdHJ1Y3Rpb24gVHJhY2luZworLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0dGluZyBhIHNpbXBsZSBicmVha3BvaW50CitUUiBJIFBTV0EgPGFkZHJlc3M+CitUbyBkZWJ1ZyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gdHJ5CitUUiBJIFIgPGZ1bmN0aW9uIGFkZHJlc3MgcmFuZ2U+CitUUiBJIG9uIGl0cyBvd24gd2lsbCBzaW5nbGUgc3RlcC4KK1RSIEkgREFUQSA8TU5FTU9OSUM+IDxPUFRJT05BTCBSQU5HRT4gd2lsbCB0cmFjZSBmb3IgcGFydGljdWxhciBtbmVtb25pY3MKK2UuZy4KK1RSIEkgREFUQSA0RCBSIDAxOTdCQy40MDAwCit3aWxsIHRyYWNlIGZvciBCQVMnZXMgKCBvcGNvZGUgNEQgKSBpbiB0aGUgcmFuZ2UgMDE5N0JDLjQwMDAKK2lmIHlvdSB3ZXJlIGluY2xpbmVkIHlvdSBjb3VsZCBhZGQgdHJhY2VzIGZvciBhbGwgYnJhbmNoIGluc3RydWN0aW9ucyAmCitzdWZmaXggdGhlbSB3aXRoIHRoZSBydW4gcHJlZml4IHNvIHlvdSB3b3VsZCBoYXZlIGEgYmFja3RyYWNlIG9uIHNjcmVlbiAKK3doZW4gYSBwcm9ncmFtIGNyYXNoZXMuCitUUiBCUiA8SU5UTyBPUiBGUk9NPiB3aWxsIHRyYWNlIGJyYW5jaGVzIGludG8gb3Igb3V0IG9mIGFuIGFkZHJlc3MuCitlLmcuCitUUiBCUiBJTlRPIDAgaXMgb2Z0ZW4gcXVpdGUgdXNlZnVsIGlmIGEgcHJvZ3JhbSBpcyBnZXR0aW5nIGF3a3dhcmQgJiBkZWNpZGluZwordG8gYnJhbmNoIHRvIDAgJiBjcmFzaGluZyBhcyB0aGlzIHdpbGwgc3RvcCBhdCB0aGUgYWRkcmVzcyBiZWZvcmUgaW4ganVtcHMgdG8gMC4KK1RSIEkgUiA8YWRkcmVzcyByYW5nZT4gUlVOIGNtZCBkIGcKK3NpbmdsZSBzdGVwcyBhIHJhbmdlIG9mIGFkZHJlc3NlcyBidXQgc3RheXMgcnVubmluZyAmCitkaXNwbGF5cyB0aGUgZ3BycyBvbiBlYWNoIHN0ZXAuCisKKworCitEaXNwbGF5aW5nICYgbW9kaWZ5aW5nIFJlZ2lzdGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0QgRyB3aWxsIGRpc3BsYXkgYWxsIHRoZSBncHJzCitBZGRpbmcgYSBleHRyYSBHIHRvIGFsbCB0aGUgY29tbWFuZHMgaXMgbmVjZXNzYXJ5IHRvIGFjY2VzcyB0aGUgZnVsbCA2NCBiaXQgCitjb250ZW50IGluIFZNIG9uIHovQXJjaGl0ZWN0dXJlIG9idmlvdXNseSB0aGlzIGlzbid0IHJlcXVpcmVkIGZvciBhY2Nlc3MgcmVnaXN0ZXJzCithcyB0aGVzZSBhcmUgc3RpbGwgMzIgYml0LgorZS5nLiBER0cgaW5zdGVhZCBvZiBERyAKK0QgWCB3aWxsIGRpc3BsYXkgYWxsIHRoZSBjb250cm9sIHJlZ2lzdGVycworRCBBUiB3aWxsIGRpc3BsYXkgYWxsIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzCitEIEFSNC03IHdpbGwgZGlzcGxheSBhY2Nlc3MgcmVnaXN0ZXJzIDQgdG8gNworQ1BVIEFMTCBEIEcgd2lsbCBkaXNwbGF5IHRoZSBHUlBTIG9mIGFsbCBDUFVTIGluIHRoZSBjb25maWd1cmF0aW9uCitEIFBTVyB3aWxsIGRpc3BsYXkgdGhlIGN1cnJlbnQgUFNXCitzdCBQU1cgMjAwMCB3aWxsIHB1dCB0aGUgdmFsdWUgMjAwMCBpbnRvIHRoZSBQU1cgJgorY2F1c2UgY3Jhc2ggeW91ciBtYWNoaW5lLgorRCBQUkVGSVggZGlzcGxheXMgdGhlIHByZWZpeCBvZmZzZXQKKworCitEaXNwbGF5aW5nIE1lbW9yeQorLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGRpc3BsYXkgbWVtb3J5IG1hcHBlZCB1c2luZyB0aGUgY3VycmVudCBQU1cncyBtYXBwaW5nIHRyeQorRCA8cmFuZ2U+CitUbyBtYWtlIFZNIGRpc3BsYXkgYSBtZXNzYWdlIGVhY2ggdGltZSBpdCBoaXRzIGEgcGFydGljdWxhciBhZGRyZXNzICYgY29udGludWUgdHJ5CitEIEk8cmFuZ2U+IHdpbGwgZGlzYXNzZW1ibGUvZGlzcGxheSBhIHJhbmdlIG9mIGluc3RydWN0aW9ucy4KK1NUIGFkZHIgMzIgYml0IHdvcmQgd2lsbCBzdG9yZSBhIDMyIGJpdCBhbGlnbmVkIGFkZHJlc3MKK0QgVDxyYW5nZT4gd2lsbCBkaXNwbGF5IHRoZSBFQkNESUMgaW4gYW4gYWRkcmVzcyAoIGlmIHlvdSBhcmUgdGhhdCB3YXkgaW5jbGluZWQgKQorRCBSPHJhbmdlPiB3aWxsIGRpc3BsYXkgcmVhbCBhZGRyZXNzZXMgKCB3aXRob3V0IERBVCApIGJ1dCB3aXRoIHByZWZpeGluZy4KK1RoZXJlIGFyZSBvdGhlciBjb21wbGV4IG9wdGlvbnMgdG8gZGlzcGxheSBpZiB5b3UgbmVlZCB0byBnZXQgYXQgc2F5IGhvbWUgc3BhY2UKK2J1dCBhcmUgaW4gcHJpbWFyeSBzcGFjZSB0aGUgZWFzaWVzdCB0aGluZyB0byBkbyBpcyB0byB0ZW1wb3JhcmlseQorbW9kaWZ5IHRoZSBQU1cgdG8gdGhlIG90aGVyIGFkZHJlc3NpbmcgbW9kZSwgZGlzcGxheSB0aGUgc3R1ZmYgJiB0aGVuCityZXN0b3JlIGl0LgorCisKKyAKK0hpbnRzCistLS0tLQorSWYgeW91IHdhbnQgdG8gaXNzdWUgYSBkZWJ1Z2dlciBjb21tYW5kIHdpdGhvdXQgaGFsdGluZyB5b3VyIHZpcnR1YWwgbWFjaGluZSB3aXRoIHRoZQorUEExIGtleSB0cnkgcHJlZml4aW5nIHRoZSBjb21tYW5kIHdpdGggI0NQIGUuZy4KKyNjcCB0ciBpIHBzd2EgMjAwMAorYWxzbyBzdWZmaXhpbmcgbW9zdCBkZWJ1Z2dlciBjb21tYW5kcyB3aXRoIFJVTiB3aWxsIGNhdXNlIHRoZW0gbm90Cit0byBzdG9wIGp1c3QgZGlzcGxheSB0aGUgbW5lbW9uaWMgYXQgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gb24gdGhlIGNvbnNvbGUuCitJZiB5b3UgaGF2ZSBzZXZlcmFsIGJyZWFrcG9pbnRzIHlvdSB3YW50IHRvIHB1dCBpbnRvIHlvdXIgcHJvZ3JhbSAmCit5b3UgZ2V0IGZlZCB1cCBvZiBjcm9zcyByZWZlcmVuY2luZyB3aXRoIFN5c3RlbS5tYXAKK3lvdSBjYW4gZG8gdGhlIGZvbGxvd2luZyB0cmljayBmb3Igc2V2ZXJhbCBzeW1ib2xzLgorZ3JlcCBkb19zaWduYWwgU3lzdGVtLm1hcCAKK3doaWNoIGVtaXRzIHRoZSBmb2xsb3dpbmcgYW1vbmcgb3RoZXIgdGhpbmdzCiswMDAxZjRlMCBUIGRvX3NpZ25hbCAKK25vdyB5b3UgY2FuIGRvCisKK1RSIEkgUFNXQSAwMDAxZjRlMCBjbWQgbXNnICogZG9fc2lnbmFsCitUaGlzIHNlbmRzIGEgbWVzc2FnZSB0byB5b3VyIG93biBjb25zb2xlIGVhY2ggdGltZSBkb19zaWduYWwgaXMgZW50ZXJlZC4KKyggQXMgYW4gYXNpZGUgSSB3cm90ZSBhIHBlcmwgc2NyaXB0IG9uY2Ugd2hpY2ggYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYSBSRVhYCitzY3JpcHQgd2l0aCBicmVha3BvaW50cyBvbiBldmVyeSBrZXJuZWwgcHJvY2VkdXJlLCB0aGlzIGlzbid0IGEgZ29vZCBpZGVhCitiZWNhdXNlIHRoZXJlIGFyZSB0aG91c2FuZHMgb2YgdGhlc2Ugcm91dGluZXMgJiBWTSBjYW4gb25seSBzZXQgMjU1IGJyZWFrcG9pbnRzCithdCBhIHRpbWUgc28geW91IG5lYXJseSBoYWQgdG8gc3BlbmQgYXMgbG9uZyBwcnVuaW5nIHRoZSBmaWxlIGRvd24gYXMgeW91IHdvdWxkIAorZW50ZXJpbmcgdGhlIG1zZydzIGJ5IGhhbmQgKSxob3dldmVyLCB0aGUgdHJpY2sgbWlnaHQgYmUgdXNlZnVsIGZvciBhIHNpbmdsZSBvYmplY3QgZmlsZS4KK09uIGxpbnV4J2VzIDMyNzAgZW11bGF0b3IgeDMyNzAgdGhlcmUgaXMgYSB2ZXJ5IHVzZWZ1bCBvcHRpb24gdW5kZXIgdGhlIGZpbGUgbWVudAorU2F2ZSBTY3JlZW5zIEluIEZpbGUgdGhpcyBpcyB2ZXJ5IGdvb2Qgb2Yga2VlcGluZyBhIGNvcHkgb2YgdHJhY2VzLiAKKworRnJvbSBDTVMgaGVscCA8Y29tbWFuZCBuYW1lPiB3aWxsIGdpdmUgeW91IG9ubGluZSBoZWxwIG9uIGEgcGFydGljdWxhciBjb21tYW5kLiAKK2UuZy4gCitIRUxQIERJU1BMQVkKKworQWxzbyBDUCBoYXMgYSBmaWxlIGNhbGxlZCBwcm9maWxlLmV4ZWMgd2hpY2ggYXV0b21hdGljYWxseSBnZXRzIGNhbGxlZAorb24gc3RhcnR1cCBvZiBDTVMgKCBsaWtlIGF1dG9leGVjLmJhdCApLCBrZWVwaW5nIG9uIGEgRE9TIGFuYWxvZ3kgc2Vzc2lvbgorQ1AgaGFzIGEgZmVhdHVyZSBzaW1pbGFyIHRvIGRvc2tleSwgaXQgbWF5IGJlIHVzZWZ1bCBmb3IgeW91IHRvCit1c2UgcHJvZmlsZS5leGVjIHRvIGRlZmluZSBzb21lIGtleXN0cm9rZXMuIAorZS5nLgorU0VUIFBGOSBJTU0gQgorVGhpcyBkb2VzIGEgc2luZ2xlIHN0ZXAgaW4gVk0gb24gcHJlc3NpbmcgRjguIAorU0VUIFBGMTAgIF4KK1RoaXMgc2V0cyB1cCB0aGUgXiBrZXkuCit3aGljaCBjYW4gYmUgdXNlZCBmb3IgXmMgKGN0cmwtYyksXnogKGN0cmwteikgd2hpY2ggY2FuJ3QgYmUgdHlwZWQgZGlyZWN0bHkgaW50byBzb21lIDMyNzAgY29uc29sZXMuCitTRVQgUEYxMSBeLQorVGhpcyB0eXBlcyB0aGUgc3RhcnRpbmcga2V5c3Ryb2tlcyBmb3IgYSBzeXNycSBzZWUgU3lzUnEgYmVsb3cuCitTRVQgUEYxMiBSRVRSSUVWRQorVGhpcyByZXRyaWV2ZXMgY29tbWFuZCBoaXN0b3J5IG9uIHByZXNzaW5nIEYxMi4KKworCitTb21ldGltZXMgaW4gVk0gdGhlIGRpc3BsYXkgaXMgc2V0IHVwIHRvIHNjcm9sbCBhdXRvbWF0aWNhbGx5IHRoaXMKK2NhbiBiZSB2ZXJ5IGFubm95aW5nIGlmIHRoZXJlIGFyZSBtZXNzYWdlcyB5b3Ugd2lzaCB0byBsb29rIGF0Cit0byBzdG9wIHRoaXMgZG8KK1RFUk0gTU9SRSAyNTUgMjU1CitUaGlzIHdpbGwgbmVhcmx5IHN0b3AgYXV0b21hdGljIHNjcmVlbiB1cGRhdGVzLCBob3dldmVyIGl0IHdpbGwKK2NhdXNlIGEgZGVuaWFsIG9mIHNlcnZpY2UgaWYgbG90cyBvZiBtZXNzYWdlcyBnbyB0byB0aGUgMzI3MCBjb25zb2xlLAorc28gaXQgd291bGQgYmUgZm9vbGlzaCB0byB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBvbiBhIHByb2R1Y3Rpb24gbWFjaGluZS4KKyAKKworVHJhY2luZyBwYXJ0aWN1bGFyIHByb2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGtlcm5lbCdzIHRleHQgc2VnbWVudCBpcyBpbnRlbnRpb25hbGx5IGF0IGFuIGFkZHJlc3MgaW4gbWVtb3J5IHRoYXQgaXQgd2lsbAordmVyeSBzZWxkb20gY29sbGlkZSB3aXRoIHRleHQgc2VnbWVudHMgb2YgdXNlciBwcm9ncmFtcyAoIHRoYW5rcyBNYXJ0aW4gKSwKK3RoaXMgc2ltcGxpZmllcyBkZWJ1Z2dpbmcgdGhlIGtlcm5lbC4KK0hvd2V2ZXIgaXQgaXMgcXVpdGUgY29tbW9uIGZvciB1c2VyIHByb2Nlc3NlcyB0byBoYXZlIGFkZHJlc3NlcyB3aGljaCBjb2xsaWRlCit0aGlzIGNhbiBtYWtlIGRlYnVnZ2luZyBhIHBhcnRpY3VsYXIgcHJvY2VzcyB1bmRlciBWTSBwYWluZnVsIHVuZGVyIG5vcm1hbAorY2lyY3Vtc3RhbmNlcyBhcyB0aGUgcHJvY2VzcyBtYXkgY2hhbmdlIHdoZW4gZG9pbmcgYSAKK1RSIEkgUiA8YWRkcmVzcyByYW5nZT4uCitUaGFua2Z1bGx5IGFmdGVyIHJlYWRpbmcgVk0ncyBvbmxpbmUgaGVscCBJIGZpZ3VyZWQgb3V0IGhvdyB0byBkZWJ1ZworSSBwYXJ0aWN1bGFyIHByb2Nlc3MuCisKK1lvdXIgZmlyc3QgcHJvYmxlbSBpcyB0byBmaW5kIHRoZSBTVEQgKCBzZWdtZW50IHRhYmxlIGRlc2lnbmF0aW9uICkKK29mIHRoZSBwcm9ncmFtIHlvdSB3aXNoIHRvIGRlYnVnLgorVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB5b3UgY2FuIGRvIHRoaXMgaGVyZSBhcmUgYSBmZXcKKzEpIG9iamR1bXAgLS1zeW1zIDxwcm9ncmFtIHRvIGJlIGRlYnVnZ2VkPiB8IGdyZXAgbWFpbgorVG8gZ2V0IHRoZSBhZGRyZXNzIG9mIG1haW4gaW4gdGhlIHByb2dyYW0uCit0ciBpIHBzd2EgPGFkZHJlc3Mgb2YgbWFpbj4KK1N0YXJ0IHRoZSBwcm9ncmFtLCBpZiBWTSBkcm9wcyB0byBDUCBvbiB3aGF0IGxvb2tzIGxpa2UgdGhlIGVudHJ5Citwb2ludCBvZiB0aGUgbWFpbiBmdW5jdGlvbiB0aGlzIGlzIG1vc3QgbGlrZWx5IHRoZSBwcm9jZXNzIHlvdSB3aXNoIHRvIGRlYnVnLgorTm93IGRvIGEgRCBYMTMgb3IgRCBYRzEzIG9uIHovQXJjaGl0ZWN0dXJlLgorT24gMzEgYml0IHRoZSBTVEQgaXMgYml0cyAxLTE5ICggdGhlIFNUTyBzZWdtZW50IHRhYmxlIG9yaWdpbiApIAorJiAyNS0zMSAoIHRoZSBTVEwgc2VnbWVudCB0YWJsZSBsZW5ndGggKSBvZiBDUjEzLgorbm93IHR5cGUKK1RSIEkgUiBTVEQgPENSMTMncyB2YWx1ZT4gMC43ZmZmZmZmZgorZS5nLgorVFIgSSBSIFNURCA4RjMyRTFGRiAwLjdmZmZmZmZmCitBbm90aGVyIHZlcnkgdXNlZnVsIHZhcmlhdGlvbiBpcworVFIgU1RPUkUgSU5UTyBTVEQgPENSMTMncyB2YWx1ZT4gPGFkZHJlc3MgcmFuZ2U+Citmb3IgZmluZGluZyBvdXQgd2hlbiBhIHBhcnRpY3VsYXIgdmFyaWFibGUgY2hhbmdlcy4KKworQW4gYWx0ZXJuYXRpdmUgd2F5IG9mIGZpbmRpbmcgdGhlIFNURCBvZiBhIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MgCitpcyB0byBkbyB0aGUgZm9sbG93aW5nLCAoIHRoaXMgbWV0aG9kIGlzIG1vcmUgY29tcGxleCBidXQKK2NvdWxkIGJlIHF1aXRlIGNvbnZpZW50IGlmIHlvdSBhcmVuJ3QgdXBkYXRpbmcgdGhlIGtlcm5lbCBtdWNoICYKK3NvIHlvdXIga2VybmVsIHN0cnVjdHVyZXMgd2lsbCBzdGF5IGNvbnN0YW50IGZvciBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCit0aW1lICkuCisKK2dyZXAgdGFzayAvcHJvYy88cGlkPi9zdGF0dXMKK2Zyb20gdGhpcyB5b3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZQordGFzazogMGYxNjAwMDAga3NwOiAwZjE2MWRlOCBwdF9yZWdzOiAwZjE2MWY2OAorVGhpcyBub3cgZ2l2ZXMgeW91IGEgcG9pbnRlciB0byB0aGUgdGFzayBzdHJ1Y3R1cmUuCitOb3cgbWFrZSBDQzo9InMzOTAtZ2NjIC1nIiBrZXJuZWwvc2NoZWQucworVG8gZ2V0IHRoZSB0YXNrX3N0cnVjdCBzdGFiaW5mby4KKyggdGFza19zdHJ1Y3QgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmggKS4KK05vdyB3ZSB3YW50IHRvIGxvb2sgYXQKK3Rhc2stPmFjdGl2ZV9tbS0+cGdkCitvbiBteSBtYWNoaW5lIHRoZSBhY3RpdmVfbW0gaW4gdGhlIHRhc2sgc3RydWN0dXJlIHN0YWIgaXMKK2FjdGl2ZV9tbTooNCwxMiksNjcyLDMyCitpdHMgb2Zmc2V0IGlzIDY3Mi84PTg0PTB4NTQKK3RoZSBwZ2QgbWVtYmVyIGluIHRoZSBtbV9zdHJ1Y3Qgc3RhYiBpcworcGdkOig0LDYpPSooMjksNSksOTYsMzIKK3NvIGl0cyBvZmZzZXQgaXMgOTYvOD0xMj0weGMKKworc28gd2UnbGwKK2hleGR1bXAgLXMgMHhmMTYwMDU0IC9kZXYvbWVtIHwgbW9yZQoraS5lLiB0YXNrX3N0cnVjdCthY3RpdmVfbW0gb2Zmc2V0Cit0byBsb29rIGF0IHRoZSBhY3RpdmVfbW0gbWVtYmVyCitmMTYwMDU0IDBmZWUgY2M2MCAwMDE5IGUzMzQgMDAwMCAwMDAwIDAwMDAgMDAxMQoraGV4ZHVtcCAtcyAweDBmZWVjYzZjIC9kZXYvbWVtIHwgbW9yZQoraS5lLiBhY3RpdmVfbW0rcGdkIG9mZnNldAorZmVlY2M2YyAwZjJjIDAwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMSAwMDAwIDAwMTAKK3dlIGdldCBzb21ldGhpbmcgbGlrZQorbm93IGRvIAorVFIgSSBSIFNURCA8cGdkfDB4N2Y+IDAuN2ZmZmZmZmYKK2kuZS4gdGhlIDB4N2YgaXMgYWRkZWQgYmVjYXVzZSB0aGUgcGdkIG9ubHkKK2dpdmVzIHRoZSBwYWdlIHRhYmxlIG9yaWdpbiAmIHdlIG5lZWQgdG8gc2V0IHRoZSBsb3cgYml0cwordG8gdGhlIG1heGltdW0gcG9zc2libGUgc2VnbWVudCB0YWJsZSBsZW5ndGguCitUUiBJIFIgU1REIDBmMmMwMDdmIDAuN2ZmZmZmZmYKK29uIHovQXJjaGl0ZWN0dXJlIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIGRvCitUUiBJIFIgU1REIDxwZ2R8MHg3PiAwLmZmZmZmZmZmZmZmZmZmZmYKK3RvIHNldCB0aGUgVGFibGVUeXBlIHRvIDB4MSAmIHRoZSBUYWJsZSBsZW5ndGggdG8gMy4KKworCisKK1RyYWNpbmcgUHJvZ3JhbSBFeGNlcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IGdldCBhIGNyYXNoIHdoaWNoIHNheXMgc29tZXRoaW5nIGxpa2UKK2lsbGVnYWwgb3BlcmF0aW9uIG9yIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIGZvbGxvd2VkIGJ5IGEgcmVnaXN0ZXIgZHVtcAorWW91IGNhbiByZXN0YXJ0IGxpbnV4ICYgdHJhY2UgdGhlc2UgdXNpbmcgdGhlIHRyIHByb2cgPHJhbmdlIG9yIHZhbHVlPiB0cmFjZSBvcHRpb24uCisKKworCitUaGUgbW9zdCBjb21tb24gb25lcyB5b3Ugd2lsbCBub3JtYWxseSBiZSB0cmFjaW5nIGZvciBpcworMT1vcGVyYXRpb24gZXhjZXB0aW9uCisyPXByaXZpbGVnZWQgb3BlcmF0aW9uIGV4Y2VwdGlvbgorND1wcm90ZWN0aW9uIGV4Y2VwdGlvbgorNT1hZGRyZXNzaW5nIGV4Y2VwdGlvbgorNj1zcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbgorMTA9c2VnbWVudCB0cmFuc2xhdGlvbiBleGNlcHRpb24KKzExPXBhZ2UgdHJhbnNsYXRpb24gZXhjZXB0aW9uCisKK1RoZSBmdWxsIGxpc3Qgb2YgdGhlc2UgaXMgb24gcGFnZSAyMiBvZiB0aGUgY3VycmVudCBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeS4KK2UuZy4KK3RyIHByb2cgMTAgd2lsbCB0cmFjZSBzZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbnMuCit0ciBwcm9nIG9uIGl0cyBvd24gd2lsbCB0cmFjZSBhbGwgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZXMuCisKK1RyYWNlIFNldHMKKy0tLS0tLS0tLS0KK09uIHN0YXJ0aW5nIFZNIHlvdSBhcmUgaW5pdGlhbGx5IGluIHRoZSBJTklUSUFMIHRyYWNlIHNldC4KK1lvdSBjYW4gZG8gYSBRIFRSIHRvIHZlcmlmeSB0aGlzLgorSWYgeW91IGhhdmUgYSBjb21wbGV4IHRyYWNpbmcgc2l0dWF0aW9uIHdoZXJlIHlvdSB3aXNoIHRvIHdhaXQgZm9yIGluc3RhbmNlIAordGlsbCBhIGRyaXZlciBpcyBvcGVuIGJlZm9yZSB5b3Ugc3RhcnQgdHJhY2luZyBJTywgYnV0IGtub3cgaW4geW91cgoraGVhcnQgdGhhdCB5b3UgYXJlIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzZXZlcmFsIHJ1bnMgdGhyb3VnaCB0aGUgY29kZSB0aWxsIHlvdQoraGF2ZSBhIGNsdWUgd2hhdHMgZ29pbmcgb24uIAorCitXaGF0IHlvdSBjYW4gZG8gaXMKK1RSIEkgUFNXQSA8RHJpdmVyIG9wZW4gYWRkcmVzcz4KK2hpdCBiIHRvIGNvbnRpbnVlIHRpbGwgYnJlYWtwb2ludAorcmVhY2ggdGhlIGJyZWFrcG9pbnQKK25vdyBkbyB5b3VyCitUUiBHT1RPIEIgCitUUiBJTyA3YzA4LTdjMDkgaW5zdCBpbnQgcnVuIAorb3Igd2hhdGV2ZXIgdGhlIElPIGNoYW5uZWxzIHlvdSB3aXNoIHRvIHRyYWNlIGFyZSAmIGhpdCBiCisKK1RvIGdvdCBiYWNrIHRvIHRoZSBpbml0aWFsIHRyYWNlIHNldCBkbworVFIgR09UTyBJTklUSUFMCismIHRoZSBUUiBJIFBTV0EgPERyaXZlciBvcGVuIGFkZHJlc3M+IHdpbGwgYmUgdGhlIG9ubHkgYWN0aXZlIGJyZWFrcG9pbnQgYWdhaW4uCisKKworVHJhY2luZyBsaW51eCBzeXNjYWxscyB1bmRlciBWTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3lzY2FsbHMgYXJlIGltcGxlbWVudGVkIG9uIExpbnV4IGZvciBTMzkwIGJ5IHRoZSBTdXBlcnZpc29yIGNhbGwgaW5zdHJ1Y3Rpb24gKFNWQykgdGhlcmUgMjU2IAorcG9zc2liaWxpdGllcyBvZiB0aGVzZSBhcyB0aGUgaW5zdHJ1Y3Rpb24gaXMgbWFkZSB1cCBvZiBhICAweEEgb3Bjb2RlICYgdGhlIHNlY29uZCBieXRlIGJlaW5nCit0aGUgc3lzY2FsbCBudW1iZXIuIFRoZXkgYXJlIHRyYWNlZCB1c2luZyB0aGUgc2ltcGxlIGNvbW1hbmQuCitUUiBTVkMgIDxPcHRpb25hbCB2YWx1ZSBvciByYW5nZT4KK3RoZSBzeXNjYWxscyBhcmUgZGVmaW5lZCBpbiBsaW51eC9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCitlLmcuIHRvIHRyYWNlIGFsbCBmaWxlIG9wZW5zIGp1c3QgZG8KK1RSIFNWQyA1ICggYXMgdGhpcyBpcyB0aGUgc3lzY2FsbCBudW1iZXIgb2Ygb3BlbiApCisKKworU01QIFNwZWNpZmljIGNvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKK1EgQ1BVUyBkaXNwbGF5cyBhbGwgdGhlIENQVSdzIGF2YWlsYWJsZSB0byB5b3VyIHZpcnR1YWwgbWFjaGluZQorVG8gZmluZCB0aGUgY3B1IHRoYXQgdGhlIGN1cnJlbnQgY3B1IFZNIGRlYnVnZ2VyIGNvbW1hbmRzIGFyZSBiZWluZyBkaXJlY3RlZCBhdCBkbworUSBDUFUgdG8gY2hhbmdlIHRoZSBjdXJyZW50IGNwdSBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvCitDUFUgPGRlc2lyZWQgY3B1IG5vPgorCitPbiBhIFNNUCBndWVzdCBpc3N1ZSBhIGNvbW1hbmQgdG8gYWxsIENQVXMgdHJ5IHByZWZpeGluZyB0aGUgY29tbWFuZCB3aXRoIGNwdSBhbGwuCitUbyBpc3N1ZSBhIGNvbW1hbmQgdG8gYSBwYXJ0aWN1bGFyIGNwdSB0cnkgY3B1IDxjcHUgbnVtYmVyPiBlLmcuCitDUFUgMDEgVFIgSSBSIDIwMDAuMzAwMAorSWYgeW91IGFyZSBydW5uaW5nIG9uIGEgZ3Vlc3Qgd2l0aCBzZXZlcmFsIGNwdXMgJiB5b3UgaGF2ZSBhIElPIHJlbGF0ZWQgcHJvYmxlbQorJiBjYW5ub3QgZm9sbG93IHRoZSBmbG93IG9mIGNvZGUgYnV0IHlvdSBrbm93IGl0IGlzbnQgc21wIHJlbGF0ZWQuCitmcm9tIHRoZSBiYXNoIHByb21wdCBpc3N1ZQorc2h1dGRvd24gLWggbm93IG9yIGhhbHQuCitkbyBhIFEgQ1BVUyB0byBmaW5kIG91dCBob3cgbWFueSBjcHVzIHlvdSBoYXZlCitkZXRhY2ggZWFjaCBvbmUgb2YgdGhlbSBmcm9tIGNwIGV4Y2VwdCBjcHUgMCAKK2J5IGlzc3VpbmcgYSAKK0RFVEFDSCBDUFUgMDEtKG51bWJlciBvZiBjcHVzIGluIGNvbmZpZ3VyYXRpb24pCismIGJvb3QgbGludXggYWdhaW4uCitUUiBTSUdQIHdpbGwgdHJhY2UgaW50ZXIgcHJvY2Vzc29yIHNpZ25hbCBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgorREVGSU5FIENQVSAwMS0obnVtYmVyIGluIGNvbmZpZ3VyYXRpb24pIAord2lsbCBnZXQgeW91ciBndWVzdHMgY3B1cyBiYWNrLgorCisKK0hlbHAgZm9yIGRpc3BsYXlpbmcgYXNjaWkgdGV4dHN0cmluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09uIHRoZSB2ZXJ5IGxhdGVzdCBWTSBOdWNsZXVzJ2VzIFZNIGNhbiBub3cgZGlzcGxheSBhc2NpaQorKCB0aGFua3MgTmVhbGUgZm9yIHRoZSBoaW50ICkgYnkgZG9pbmcKK0QgVFg8bG93YWRkcj4uPGxlbj4KK2UuZy4KK0QgVFgwLjEwMAorCitBbHRlcm5hdGl2ZWx5Cis9PT09PT09PT09PT09CitVbmRlciBvbGRlciBWTSBkZWJ1Z2dlcnMgKCBJIGxvdmUgRUJESUMgdG9vICkgeW91IGNhbiB1c2UgdGhpcyBsaXR0bGUgcHJvZ3JhbSBJIHdyb3RlIHdoaWNoCit3aWxsIGNvbnZlcnQgYSBjb21tYW5kIGxpbmUgb2YgaGV4IGRpZ2l0cyB0byBhc2NpaSB0ZXh0IHdoaWNoIGNhbiBiZSBjb21waWxlZCB1bmRlciBsaW51eCAmIAoreW91IGNhbiBjb3B5IHRoZSBoZXggZGlnaXRzIGZyb20geW91ciB4MzI3MCB0ZXJtaW5hbCB0byB5b3VyIHh0ZXJtIGlmIHlvdSBhcmUgZGVidWdnaW5nCitmcm9tIGEgbGludXhib3guCisKK1RoaXMgaXMgcXVpdGUgdXNlZnVsIHdoZW4gbG9va2luZyBhdCBhIHBhcmFtZXRlciBwYXNzZWQgaW4gYXMgYSB0ZXh0IHN0cmluZwordW5kZXIgVk0gKCB1bmxlc3MgeW91IGFyZSBnb29kIGF0IGRlY29kaW5nIEFTQ0lJIGluIHlvdXIgaGVhZCApLgorCitlLmcuIGNvbnNpZGVyIHRyYWNpbmcgYW4gb3BlbiBzeXNjYWxsCitUUiBTVkMgNQorV2UgaGF2ZSBzdG9wcGVkIGF0IGEgYnJlYWtwb2ludAorMDAwMTUxQjAnIFNWQyAgIDBBMDUgICAgIC0+IDAwMDE5MDlBJyAgIENDIDAKKworRCAyMC44IHRvIGNoZWNrIHRoZSBTVkMgb2xkIHBzdyBpbiB0aGUgcHJlZml4IGFyZWEgJiBzZWUgd2FzIGl0IGZyb20gdXNlcnNwYWNlCisoIGZvciB0aGUgbGF5b3V0IG9mIHRoZSBwcmVmaXggYXJlYSBjb25zdWx0IFAxOCBvZiB0aGUgcy8zOTAgMzkwIFJlZmVyZW5jZSBTdW1tYXJ5IAoraWYgeW91IGhhdmUgaXQgYXZhaWxhYmxlICkuCitWMDAwMDAwMjAgIDA3MEMyMDAwIDgwMDE1MUIyCitUaGUgcHJvYmxlbSBzdGF0ZSBiaXQgd2Fzbid0IHNldCAmICBpdCdzIGFsc28gdG9vIGVhcmx5IGluIHRoZSBib290IHNlcXVlbmNlCitmb3IgaXQgdG8gYmUgYSB1c2Vyc3BhY2UgU1ZDIGlmIGl0IHdhcyB3ZSB3b3VsZCBoYXZlIHRvIHRlbXBvcmFyaWx5IHN3aXRjaCB0aGUgCitwc3cgdG8gdXNlciBzcGFjZSBhZGRyZXNzaW5nIHNvIHdlIGNvdWxkIGdldCBhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBvcGVuIGluCitncHIyLgorTmV4dCBkbyBhIAorRCBHMgorR1BSICAyID0gIDAwMDE0Q0I0CitOb3cgZGlzcGxheSB3aGF0IGdwcjIgaXMgcG9pbnRpbmcgdG8KK0QgMDAwMTRDQjQuMjAKK1YwMDAxNENCNCAgMkY2NDY1NzYgMkY2MzZGNkUgNzM2RjZDNjUgMDAwMDFCRjUKK1YwMDAxNENDNCAgRkMwMDAxNEMgQjQwMDEwMDEgRTAwMDEwMDAgQjgwNzA3MDcKK05vdyBjb3B5IHRoZSB0ZXh0IHRpbGwgdGhlIGZpcnN0IDAwIGhleCAoIHdoaWNoIGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZwordG8gYW4geHRlcm0gJiBkbyBoZXgyYXNjaWkgb24gaXQuCitoZXgyYXNjaWkgMkY2NDY1NzYgMkY2MzZGNkUgNzM2RjZDNjUgMDAgCitvdXRwdXRzCitEZWNvZGVkIEhleDo9LyBkIGUgdiAvIGMgbyBuIHMgbyBsIGUgMHgwMCAKK1dlIHdlcmUgb3BlbmluZyB0aGUgY29uc29sZSBkZXZpY2UsCisKK1lvdSBjYW4gY29tcGlsZSB0aGUgY29kZSBiZWxvdyB5b3Vyc2VsZiBmb3IgcHJhY3RpY2UgOi0pLAorLyoKKyAqICAgIGhleDJhc2NpaS5jCisgKiAgICBhIHVzZWZ1bCBsaXR0bGUgdG9vbCBmb3IgY29udmVydGluZyBhIGhleGFkZWNpbWFsIGNvbW1hbmQgbGluZSB0byBhc2NpaQorICoKKyAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICogICAgKEMpIDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbi4KKyAqLyAgIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IGNudDEsY250MixsZW4sdG9nZ2xlPTA7CisgIGludCBzdGFydGNudD0xOworICB1bnNpZ25lZCBjaGFyIGMsaGV4OworICAKKyAgaWYoYXJnYz4xJiYoc3RyY21wKGFyZ3ZbMV0sIi1hIik9PTApKQorICAgICBzdGFydGNudD0yOworICBwcmludGYoIkRlY29kZWQgSGV4Oj0iKTsKKyAgZm9yKGNudDE9c3RhcnRjbnQ7Y250MTxhcmdjO2NudDErKykKKyAgeworICAgIGxlbj1zdHJsZW4oYXJndltjbnQxXSk7CisgICAgZm9yKGNudDI9MDtjbnQyPGxlbjtjbnQyKyspCisgICAgeworICAgICAgIGM9YXJndltjbnQxXVtjbnQyXTsKKyAgICAgICBpZihjPj0nMCcmJmM8PSc5JykKKwkgIGM9Yy0nMCc7CisgICAgICAgaWYoYz49J0EnJiZjPD0nRicpCisJICBjPWMtJ0EnKzEwOworICAgICAgIGlmKGM+PSdhJyYmYzw9J2YnKQorCSAgYz1jLSdhJysxMDsKKyAgICAgICBzd2l0Y2godG9nZ2xlKQorICAgICAgIHsKKwkgIGNhc2UgMDoKKwkgICAgIGhleD1jPDw0OworCSAgICAgdG9nZ2xlPTE7CisJICBicmVhazsKKwkgIGNhc2UgMToKKwkgICAgIGhleCs9YzsKKwkgICAgIGlmKGhleDwzMnx8aGV4PjEyNykKKwkgICAgIHsKKwkJaWYoc3RhcnRjbnQ9PTEpCisJCSAgIHByaW50ZigiMHglMDJYICIsKGludCloZXgpOworCQllbHNlCisJCSAgIHByaW50ZigiLiIpOworCSAgICAgfQorCSAgICAgZWxzZQorCSAgICAgeworCSAgICAgICBwcmludGYoIiVjIixoZXgpOworCSAgICAgICBpZihzdGFydGNudD09MSkKKwkJICBwcmludGYoIiAiKTsKKwkgICAgIH0KKwkgICAgIHRvZ2dsZT0wOworCSAgYnJlYWs7CisgICAgICAgfQorICAgIH0KKyAgfQorICBwcmludGYoIlxuIik7Cit9CisKKworCisKK1N0YWNrIHRyYWNpbmcgdW5kZXIgVk0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0EgYmFzaWMgYmFja3RyYWNlCistLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlIGFyZSB0aGUgdHJpY2tzIEkgdXNlIDkgb3V0IG9mIDEwIHRpbWVzIGl0IHdvcmtzIHByZXR0eSB3ZWxsLAorCitXaGVuIHlvdXIgYmFja2NoYWluIHJlYWNoZXMgYSBkZWFkIGVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgY2FuIGhhcHBlbiB3aGVuIGFuIGV4Y2VwdGlvbiBoYXBwZW5zIGluIHRoZSBrZXJuZWwgJiB0aGUga2VybmVsIGlzIGVudGVyZWQgdHdpY2UKK2lmIHlvdSByZWFjaCB0aGUgTlVMTCBwb2ludGVyIGF0IHRoZSBlbmQgb2YgdGhlIGJhY2sgY2hhaW4geW91IHNob3VsZCBiZQorYWJsZSB0byBzbmlmZiBmdXJ0aGVyIGJhY2sgaWYgeW91IGZvbGxvdyB0aGUgZm9sbG93aW5nIHRyaWNrcy4KKzEpIEEga2VybmVsIGFkZHJlc3Mgc2hvdWxkIGJlIGVhc3kgdG8gcmVjb2duaXNlIHNpbmNlIGl0IGlzIGluCitwcmltYXJ5IHNwYWNlICYgdGhlIHByb2JsZW0gc3RhdGUgYml0IGlzbid0IHNldCAmIGFsc28KK1RoZSBIaSBiaXQgb2YgdGhlIGFkZHJlc3MgaXMgc2V0LgorMikgQW5vdGhlciBiYWNrY2hhaW4gc2hvdWxkIGFsc28gYmUgZWFzeSB0byByZWNvZ25pc2Ugc2luY2UgaXQgaXMgYW4gCithZGRyZXNzIHBvaW50aW5nIHRvIGFub3RoZXIgYWRkcmVzcyBhcHByb3hpbWF0ZWx5IDEwMCBieXRlcyBvciAweDcwIGhleAorYmVoaW5kIHRoZSBjdXJyZW50IHN0YWNrcG9pbnRlci4KKworCitIZXJlIGlzIHNvbWUgcHJhY3RpY2UuCitib290IHRoZSBrZXJuZWwgJiBoaXQgUEExIGF0IHNvbWUgcmFuZG9tIHRpbWUKK2QgZyB0byBkaXNwbGF5IHRoZSBncHJzLCB0aGlzIHNob3VsZCBkaXNwbGF5IHNvbWV0aGluZyBsaWtlCitHUFIgIDAgPSAgMDAwMDAwMDEgIDAwMTU2MDE4ICAwMDE0MzU5QyAgMDAwMDAwMDAKK0dQUiAgNCA9ICAwMDAwMDAwMSAgMDAxQjg4ODggIDAwMDAwM0UwICAwMDAwMDAwMAorR1BSICA4ID0gIDAwMTAwMDgwICAwMDEwMDA4NCAgMDAwMDAwMDAgIDAwMEZFMDAwCitHUFIgMTIgPSAgMDAwMTA0MDAgIDgwMDFCMkRDICA4MDAxQjM2QSAgMDAwRkZFRDgKK05vdGUgdGhhdCBHUFIxNCBpcyBhIHJldHVybiBhZGRyZXNzIGJ1dCBhcyB3ZSBhcmUgcmVhbCBtZW4gd2UgYXJlIGdvaW5nIHRvCit0cmFjZSB0aGUgc3RhY2suCitkaXNwbGF5IDB4NDAgYnl0ZXMgYWZ0ZXIgdGhlIHN0YWNrIHBvaW50ZXIuCisKK1YwMDBGRkVEOCAgMDAwRkZGMzggODAwMUI4MzggODAwMTRDOEUgMDAwRkZGMzgKK1YwMDBGRkVFOCAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAzRTAgMDAwMDAwMDAKK1YwMDBGRkVGOCAgMDAxMDAwODAgMDAxMDAwODQgMDAwMDAwMDAgMDAwRkUwMDAKK1YwMDBGRkYwOCAgMDAwMTA0MDAgODAwMUIyREMgODAwMUIzNkEgMDAwRkZFRDgKKworCitBaCBub3cgbG9vayBhdCB3aGF0cyBpbiBzcCs1NiAoc3ArMHgzOCkgdGhpcyBpcyA4MDAxQjM2QSBvdXIgc2F2ZWQgcjE0IGlmCit5b3UgbG9vayBhYm92ZSBhdCBvdXIgc3RhY2tmcmFtZSAmIGFsc28gYWdyZWVzIHdpdGggR1BSMTQuCisKK25vdyBiYWNrY2hhaW4gCitkIDAwMEZGRjM4LjQwCit3ZSBub3cgYXJlIHRha2luZyB0aGUgY29udGVudHMgb2YgU1AgdG8gZ2V0IG91ciBmaXJzdCBiYWNrY2hhaW4uCisKK1YwMDBGRkYzOCAgMDAwRkZGQTAgMDAwMDAwMDAgMDAwMTQ5OTUgMDAxNDcwOTQKK1YwMDBGRkY0OCAgMDAxNDcwOTAgMDAxNDcwQTAgMDAwMDAzRTAgMDAwMDAwMDAKK1YwMDBGRkY1OCAgMDAxMDAwODAgMDAxMDAwODQgMDAwMDAwMDAgMDAxQkYxRDAKK1YwMDBGRkY2OCAgMDAwMTA0MDAgODAwMTQ5QkEgODAwMTRDQTYgMDAwRkZGMzgKKworVGhpcyBkaXNwbGF5cyBhIDJuZCByZXR1cm4gYWRkcmVzcyBvZiA4MDAxNENBNgorCitub3cgZG8gZCAwMDBGRkZBMC40MCBmb3Igb3VyIDNyZCBiYWNrY2hhaW4KKworVjAwMEZGRkEwICAwNEI1MjAwMiAwMDAxMTA3RiAwMDAwMDAwMCAwMDAwMDAwMAorVjAwMEZGRkIwICAwMDAwMDAwMCAwMDAwMDAwMCBGRjAwMDAwMCAwMDAxMTA3RgorVjAwMEZGRkMwICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMAorVjAwMEZGRkQwICAwMDAxMDQwMCA4MDAxMDgwMiA4MDAxMDg1QSAwMDBGRkZBMAorCisKK291ciAzcmQgcmV0dXJuIGFkZHJlc3MgaXMgODAwMTA4NUEKKworYXMgdGhlIDA0QjUyMDAyIGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIHJ1YmJpc2ggaXQgaXMgZmFpciB0byBhc3N1bWUgdGhhdCB0aGUga2VybmVsIGVudHJ5IHJvdXRpbmVzCitmb3IgdGhlIHNha2Ugb2Ygb3B0aW1pc2F0aW9uIGRvbnQgc2V0IHVwIGEgYmFja2NoYWluLgorCitub3cgbG9vayBhdCBTeXN0ZW0ubWFwIHRvIHNlZSBpZiB0aGUgYWRkcmVzc2VzIG1ha2UgYW55IHNlbnNlLgorCitncmVwIC1pIDAwMDFiMyBTeXN0ZW0ubWFwCitvdXRwdXRzIGFtb25nIG90aGVyIHRoaW5ncworMDAwMWIzMDQgVCBjcHVfaWRsZSAKK3NvIDgwMDFCMzZBCitpcyBjcHVfaWRsZSsweDY2ICggcXVpZXQgdGhlIGNwdSBpcyBhc2xlZXAsIGRvbid0IHdha2UgaXQgKQorCisKK2dyZXAgLWkgMDAwMTQgU3lzdGVtLm1hcCAKK3Byb2R1Y2VzIGFtb25nIG90aGVyIHRoaW5ncworMDAwMTRhNzggVCBzdGFydF9rZXJuZWwgIAorc28gMDAxNENBNiBpcyBzdGFydF9rZXJuZWwrc29tZSBoZXggbnVtYmVyIEkgY2FuJ3QgYWRkIGluIG15IGhlYWQuCisKK2dyZXAgLWkgMDAxMDggU3lzdGVtLm1hcCAKK3RoaXMgcHJvZHVjZXMKKzAwMDEwODAwIFQgX3N0ZXh0CitzbyAgIDgwMDEwODVBIGlzIF9zdGV4dCsweDVhCisKK0NvbmdyYXRzIHlvdSd2ZSBkb25lIHlvdXIgZmlyc3QgYmFja2NoYWluLgorCisKKworcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBJTyBPdmVydmlldworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJIGFtIG5vdCBnb2luZyB0byBnaXZlIGEgY291cnNlIGluIDM5MCBJTyBhcmNoaXRlY3R1cmUgYXMgdGhpcyB3b3VsZCB0YWtlIG1lIHF1aXRlIGEKK3doaWxlICYgSSdtIG5vIGV4cGVydC4gSW5zdGVhZCBJJ2xsIGdpdmUgYSAzOTAgSU8gYXJjaGl0ZWN0dXJlIHN1bW1hcnkgZm9yIER1bW1pZXMgaWYgeW91IGhhdmUgCit0aGUgcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24gYXZhaWxhYmxlIHJlYWQgdGhpcyBpbnN0ZWFkLiBJZiBub3RoaW5nIGVsc2UgeW91IG1heSBmaW5kIGEgZmV3IAordXNlZnVsIGtleXdvcmRzIGluIGhlcmUgJiBiZSBhYmxlIHRvIHVzZSB0aGVtIG9uIGEgd2ViIHNlYXJjaCBlbmdpbmUgbGlrZSBhbHRhdmlzdGEgdG8gZmluZCAKK21vcmUgdXNlZnVsIGluZm9ybWF0aW9uLgorCitVbmxpa2Ugb3RoZXIgYnVzIGFyY2hpdGVjdHVyZXMgbW9kZXJuIDM5MCBzeXN0ZW1zIGRvIHRoZWlyIElPIHVzaW5nIG1vc3RseQorZmlicmUgb3B0aWNzICYgZGV2aWNlcyBzdWNoIGFzIHRhcGVzICYgZGlza3MgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwgbWFpbmZyYW1lcywKK2Fsc28gUzM5MCBjYW4gc3VwcG9ydCB1cHRvIDY1NTM2IGRldmljZXMgd2hpbGUgYSBoaWdoIGVuZCBQQyBiYXNlZCBzeXN0ZW0gbWlnaHQgYmUgY2hva2luZyAKK3dpdGggYXJvdW5kIDY0LiBIZXJlIGlzIHNvbWUgb2YgdGhlIGNvbW1vbiBJTyB0ZXJtaW5vbG9neQorCitTdWJjaGFubmVsOgorVGhpcyBpcyB0aGUgbG9naWNhbCBudW1iZXIgbW9zdCBJTyBjb21tYW5kcyB1c2UgdG8gdGFsayB0byBhbiBJTyBkZXZpY2UgdGhlcmUgY2FuIGJlIHVwdG8KKzB4MTAwMDAgKDY1NTM2KSBvZiB0aGVzZSBpbiBhIGNvbmZpZ3VyYXRpb24gdHlwaWNhbGx5IHRoZXJlIGlzIGEgZmV3IGh1bmRyZWQuIFVuZGVyIFZNCitmb3Igc2ltcGxpY2l0eSB0aGV5IGFyZSBhbGxvY2F0ZWQgY29udGlndW91c2x5LCBob3dldmVyIG9uIHRoZSBuYXRpdmUgaGFyZHdhcmUgdGhleSBhcmUgbm90Cit0aGV5IHR5cGljYWxseSBzdGF5IGNvbnNpc3RlbnQgYmV0d2VlbiBib290cyBwcm92aWRlZCBubyBuZXcgaGFyZHdhcmUgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KK1VuZGVyIExpbnV4IGZvciAzOTAgd2UgdXNlIHRoZXNlIGFzIElSUSdzICYgYWxzbyB3aGVuIGlzc3VpbmcgYW4gSU8gY29tbWFuZCAoQ0xFQVIgU1VCQ0hBTk5FTCwKK0hBTFQgU1VCQ0hBTk5FTCxNT0RJRlkgU1VCQ0hBTk5FTCxSRVNVTUUgU1VCQ0hBTk5FTCxTVEFSVCBTVUJDSEFOTkVMLFNUT1JFIFNVQkNIQU5ORUwgJiAKK1RFU1QgU1VCQ0hBTk5FTCApIHdlIHVzZSB0aGlzIGFzIHRoZSBJRCBvZiB0aGUgZGV2aWNlIHdlIHdpc2ggdG8gdGFsayB0bywgdGhlIG1vc3QKK2ltcG9ydGFudCBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIFNUQVJUIFNVQkNIQU5ORUwgKCB0byBzdGFydCBJTyApLCBURVNUIFNVQkNIQU5ORUwgKCB0byBjaGVjaword2hldGhlciB0aGUgSU8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSApLCAmIEhBTFQgU1VCQ0hBTk5FTCAoIHRvIGtpbGwgSU8gKSwgYSBzdWJjaGFubmVsCitjYW4gaGF2ZSB1cCB0byA4IGNoYW5uZWwgcGF0aHMgdG8gYSBkZXZpY2UgdGhpcyBvZmZlcnMgcmVkdW5hbmN5IGlmIG9uZSBpcyBub3QgYXZhaWxhYmxlLgorCisKK0RldmljZSBOdW1iZXI6CitUaGlzIG51bWJlciByZW1haW5zIHN0YXRpYyAmIElzIGNsb3NlbHkgdGllZCB0byB0aGUgaGFyZHdhcmUsIHRoZXJlIGFyZSA2NTUzNiBvZiB0aGVzZQorYWxzbyB0aGV5IGFyZSBtYWRlIHVwIG9mIGEgQ0hQSUQgKCBDaGFubmVsIFBhdGggSUQsIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cyApIAorJiBhbm90aGVyIGxzYiA4IGJpdHMuIFRoZXNlIHJlbWFpbiBzdGF0aWMgZXZlbiBpZiBtb3JlIGRldmljZXMgYXJlIGluc2VydGVkIG9yIHJlbW92ZWQKK2Zyb20gdGhlIGhhcmR3YXJlLCB0aGVyZSBpcyBhIDEgdG8gMSBtYXBwaW5nIGJldHdlZW4gU3ViY2hhbm5lbHMgJiBEZXZpY2UgTnVtYmVycyBwcm92aWRlZAorZGV2aWNlcyBhcmVudCBpbnNlcnRlZCBvciByZW1vdmVkLgorCitDaGFubmVsIENvbnRyb2wgV29yZHM6CitDQ1dTIGFyZSBsaW5rZWQgbGlzdHMgb2YgaW5zdHJ1Y3Rpb25zIGluaXRpYWxseSBwb2ludGVkIHRvIGJ5IGFuIG9wZXJhdGlvbiByZXF1ZXN0IGJsb2NrIChPUkIpLAord2hpY2ggaXMgaW5pdGlhbGx5IGdpdmVuIHRvIFN0YXJ0IFN1YmNoYW5uZWwgKFNTQ0gpIGNvbW1hbmQgYWxvbmcgd2l0aCB0aGUgc3ViY2hhbm5lbCBudW1iZXIKK2ZvciB0aGUgSU8gc3Vic3lzdGVtIHRvIHByb2Nlc3Mgd2hpbGUgdGhlIENQVSBjb250aW51ZXMgZXhlY3V0aW5nIG5vcm1hbCBjb2RlLgorVGhlc2UgY29tZSBpbiB0d28gZmxhdm91cnMsIEZvcm1hdCAwICggMjQgYml0IGZvciBiYWNrd2FyZCApCitjb21wYXRpYmlsaXR5ICYgRm9ybWF0IDEgKCAzMSBiaXQgKS4gVGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIHRvIGlzc3VlIHJlYWQgJiB3cml0ZSAKKyggJiBtYW55IG90aGVyIGluc3RydWN0aW9ucyApIHRoZXkgY29uc2lzdCBvZiBhIGxlbmd0aCBmaWVsZCAmIGFuIGFic29sdXRlIGFkZHJlc3MgZmllbGQuCitGb3IgZWFjaCBJTyB0eXBpY2FsbHkgZ2V0IDEgb3IgMiBpbnRlcnJ1cHRzIG9uZSBmb3IgY2hhbm5lbCBlbmQgKCBwcmltYXJ5IHN0YXR1cyApIHdoZW4gdGhlCitjaGFubmVsIGlzIGlkbGUgJiB0aGUgc2Vjb25kIGZvciBkZXZpY2UgZW5kICggc2Vjb25kYXJ5IHN0YXR1cyApIHNvbWV0aW1lcyB5b3UgZ2V0IGJvdGgKK2NvbmN1cnJlbnRseSwgeW91IGNoZWNrIGhvdyB0aGUgSU8gd2VudCBvbiBieSBpc3N1aW5nIGEgVEVTVCBTVUJDSEFOTkVMIGF0IGVhY2ggaW50ZXJydXB0LAorZnJvbSB3aGljaCB5b3UgcmVjZWl2ZSBhbiBJbnRlcnJ1cHRpb24gcmVzcG9uc2UgYmxvY2sgKElSQikuIElmIHlvdSBnZXQgY2hhbm5lbCAmIGRldmljZSBlbmQgCitzdGF0dXMgaW4gdGhlIElSQiB3aXRob3V0IGNoYW5uZWwgY2hlY2tzIGV0Yy4geW91ciBJTyBwcm9iYWJseSB3ZW50IG9rYXkuIElmIHlvdSBkaWRuJ3QgeW91Citwcm9iYWJseSBuZWVkIGEgZG9jdG9ydG8gZXhhbWluZSB0aGUgSVJCICYgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgZXRjLgorSWYgYW4gZXJyb3Igb2NjdXJzIG1vcmUgc29waGlzdG9jYXRlZCBjb250cm9sIHVuaXRzIGhhdmUgYSBmYWNpdGl0eSBrbm93biBhcworY29uY3VycmVudCBzZW5zZSB0aGlzIG1lYW5zIHRoYXQgaWYgYW4gZXJyb3Igb2NjdXJzIEV4dGVuZGVkIHNlbnNlIGluZm9ybWF0aW9uIHdpbGwKK2JlIHByZXNlbnRlZCBpbiB0aGUgRXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIElSQiBpZiBub3QgeW91IGhhdmUgdG8gaXNzdWUgYQorc3Vic2VxdWVudCBTRU5TRSBDQ1cgY29tbWFuZCBhZnRlciB0aGUgdGVzdCBzdWJjaGFubmVsLiAKKworCitUUEkoIFRlc3QgcGVuZGluZyBpbnRlcnJ1cHQpIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHBvbGxlZCBJTyBidXQgaW4gbXVsdGl0YXNraW5nIG11bHRpcHJvY2Vzc29yCitzeXN0ZW1zIGl0IGlzbid0IHJlY29tbWVuZGVkIGV4Y2VwdCBmb3IgY2hlY2tpbmcgc3BlY2lhbCBjYXNlcyAoIGkuZS4gbm9uIGxvb3BpbmcgY2hlY2tzIGZvcgorcGVuZGluZyBJTyBldGMuICkuCisKK1N0b3JlIFN1YmNoYW5uZWwgJiBNb2RpZnkgU3ViY2hhbm5lbCBjYW4gYmUgdXNlZCB0byBleGFtaW5lICYgbW9kaWZ5IG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpY3MKK29mIGEgc3ViY2hhbm5lbCAoIGUuZy4gY2hhbm5lbCBwYXRocyApLgorCitPdGhlciBJTyByZWxhdGVkIFRlcm1zOgorU3lzcGxleDogUzM5MCdzIENsdXN0ZXJpbmcgVGVjaG5vbG9neQorUURJTzogUzM5MCdzIG5ldyBoaWdoIHNwZWVkIElPIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IGRldmljZXMgc3VjaCBhcyBnaWdhYml0IGV0aGVybmV0LAordGhpcyBhcmNoaXRlY3R1cmUgaXMgYWxzbyBkZXNpZ25lZCB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCB1cCAmIGNvbWluZyA2NCBiaXQgbWFjaGluZXMuCisKKworR2VuZXJhbCBDb25jZXB0cyAKKworSW5wdXQgT3V0cHV0IFByb2Nlc3NvcnMgKElPUCdzKSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbW11bmljYXRpbmcgYmV0d2VlbgordGhlIG1haW5mcmFtZSBDUFUncyAmIHRoZSBjaGFubmVsICYgcmVsaWV2ZSB0aGUgbWFpbmZyYW1lIENQVSdzIGZyb20gdGhlCitidXJkZW4gb2YgY29tbXVuaWNhdGluZyB3aXRoIElPIGRldmljZXMgZGlyZWN0bHksIHRoaXMgYWxsb3dzIHRoZSBDUFUncyB0byAKK2NvbmNlbnRyYXRlIG9uIGRhdGEgcHJvY2Vzc2luZy4gCisKK0lPUCdzIGNhbiB1c2Ugb25lIG9yIG1vcmUgbGlua3MgKCBrbm93biBhcyBjaGFubmVsIHBhdGhzICkgdG8gdGFsayB0byBlYWNoIAorSU8gZGV2aWNlLiBJdCBmaXJzdCBjaGVja3MgZm9yIHBhdGggYXZhaWxhYmlsaXR5ICYgY2hvb3NlcyBhbiBhdmFpbGFibGUgb25lLAordGhlbiBzdGFydHMgKCAmIHNvbWV0aW1lcyB0ZXJtaW5hdGVzIElPICkuCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGNoYW5uZWwgcGF0aCBFU0NPTiAmIHRoZSBQYXJhbGVsbCBJTyBpbnRlcmZhY2UuCisKK0lPIGRldmljZXMgYXJlIGF0dGFjaGVkIHRvIGNvbnRyb2wgdW5pdHMsIGNvbnRyb2wgdW5pdHMgcHJvdmlkZSB0aGUKK2xvZ2ljIHRvIGludGVyZmFjZSB0aGUgY2hhbm5lbCBwYXRocyAmIGNoYW5uZWwgcGF0aCBJTyBwcm90b2NvbHMgdG8gCit0aGUgSU8gZGV2aWNlcywgdGhleSBjYW4gYmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBkZXZpY2VzIG9yIGhvdXNlZCBzZXBhcmF0ZWx5CismIG9mdGVuIHRhbGsgdG8gc2V2ZXJhbCBzaW1pbGFyIGRldmljZXMgKCB0eXBpY2FsIGV4YW1wbGVzIHdvdWxkIGJlIHJhaWQgCitjb250cm9sbGVycyBvciBhIGNvbnRyb2wgdW5pdCB3aGljaCBjb25uZWN0cyB0byAxMDAwIDMyNzAgdGVybWluYWxzICkuCisKKworICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwKKyAgICB8IHwgQ1BVIHwgfCBDUFUgfCB8IENQVSB8IHwgQ1BVIHwgIHwgIE1haW4gICAgfCAgfCBFeHBhbmRlZCB8ICAgfAorICAgIHwgfCAgICAgfCB8ICAgICB8IHwgICAgIHwgfCAgICAgfCAgfCAgTWVtb3J5ICB8ICB8ICBTdG9yYWdlIHwgICB8CisgICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwgCisgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8ICAgSU9QICAgICAgICB8ICAgICAgSU9QICAgICAgfCAgICAgICBJT1AgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCAKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgfHwgIEJ1cyAmIFRhZyBDaGFubmVsIFBhdGggICAgICAgICAgICAgICAgICAgICAgfHwgRVNDT04KKyAgICAgICAgIHx8ICA9PT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIHx8IENoYW5uZWwKKyAgICAgICAgIHx8ICB8fCAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgIHx8IFBhdGgKKyAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLSsKKyAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKKyAgICB8ICAgIENVICAgIHwgICAgICAgICAgICAgICB8ICAgIENVICAgIHwgICAgICAgICB8ICAgIENVICAgIHwKKyAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLSsKKyAgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKworfEkvTyBEZXZpY2V8IHxJL08gRGV2aWNlfCAgICAgIHxJL08gRGV2aWNlfCAgIHxJL08gRGV2aWNlfCB8SS9PIERldmljZXwKKystLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCisgIENQVSA9IENlbnRyYWwgUHJvY2Vzc2luZyBVbml0ICAgIAorICBDID0gQ2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAKKyAgSU9QID0gSVAgUHJvY2Vzc29yICAgICAgICAgICAgICAgCisgIENVID0gQ29udHJvbCBVbml0CisKK1RoZSAzOTAgSU8gc3lzdGVtcyBjb21lIGluIDIgZmxhdm91cnMgdGhlIGN1cnJlbnQgMzkwIG1hY2hpbmVzIHN1cHBvcnQgYm90aAorCitUaGUgT2xkZXIgMzYwICYgMzcwIEludGVyZmFjZSxzb21ldGltZXMgY2FsbGVkIHRoZSBwYXJhbGVsbCBJL08gaW50ZXJmYWNlLAorc29tZXRpbWVzIGNhbGxlZCBCdXMtYW5kIFRhZyAmIHNvbWV0aW1lcyBPcmlnaW5hbCBFcXVpcG1lbnQgTWFudWZhY3R1cmVycworSW50ZXJmYWNlIChPRU1JKS4KKworVGhpcyBieXRlIHdpZGUgcGFyYWxlbGwgY2hhbm5lbCBwYXRoL2J1cyBoYXMgcGFyaXR5ICYgZGF0YSBvbiB0aGUgIkJ1cyIgY2FibGUgCismIGNvbnRyb2wgbGluZXMgb24gdGhlICJUYWciIGNhYmxlLiBUaGVzZSBjYW4gb3BlcmF0ZSBpbiBieXRlIG11bHRpcGxleCBtb2RlIGZvcgorc2hhcmluZyBiZXR3ZWVuIHNldmVyYWwgc2xvdyBkZXZpY2VzIG9yIGJ1cnN0IG1vZGUgJiBtb25vcG9saXplIHRoZSBjaGFubmVsIGZvciB0aGUKK3dob2xlIGJ1cnN0LiBVcHRvIDI1NiBkZXZpY2VzIGNhbiBiZSBhZGRyZXNzZWQgIG9uIG9uZSBvZiB0aGVzZSBjYWJsZXMuIFRoZXNlIGNhYmxlcyBhcmUKK2Fib3V0IG9uZSBpbmNoIGluIGRpYW1ldGVyLiBUaGUgbWF4aW11bSB1bmV4dGVuZGVkIGxlbmd0aCBzdXBwb3J0ZWQgYnkgdGhlc2UgY2FibGVzIGlzCisxMjUgTWV0ZXJzIGJ1dCB0aGlzIGNhbiBiZSBleHRlbmRlZCB1cCB0byAya20gd2l0aCBhIGZpYnJlIG9wdGljIGNoYW5uZWwgZXh0ZW5kZWQgCitzdWNoIGFzIGEgMzA0NC4gVGhlIG1heGltdW0gYnVyc3Qgc3BlZWQgc3VwcG9ydGVkIGlzIDQuNSBtZWdhYnl0ZXMgcGVyIHNlY29uZCBob3dldmVyCitzb21lIHJlYWxseSBvbGQgcHJvY2Vzc29ycyBzdXBwb3J0IG9ubHkgdHJhbnNmZXIgcmF0ZXMgb2YgMy4wLCAyLjAgJiAxLjAgTUIvc2VjLgorT25lIG9mIHRoZXNlIHBhdGhzIGNhbiBiZSBkYWlzeSBjaGFpbmVkIHRvIHVwIHRvIDggY29udHJvbCB1bml0cy4KKworCitFU0NPTiBpZiBmaWJyZSBvcHRpYyBpdCBpcyBhbHNvIGNhbGxlZCBGSUNPTiAKK1dhcyBpbnRyb2R1Y2VkIGJ5IElCTSBpbiAxOTkwLiBIYXMgMiBmaWJyZSBvcHRpYyBjYWJsZXMgJiB1c2VzIGVpdGhlciBsZWRzIG9yIGxhc2VycworZm9yIGNvbW11bmljYXRpb24gYXQgYSBzaWduYWxpbmcgcmF0ZSBvZiB1cHRvIDIwMCBtZWdhYml0cy9zZWMuIEFzIDEwYml0cyBhcmUgdHJhbnNmZXJyZWQKK2ZvciBldmVyeSA4IGJpdHMgaW5mbyB0aGlzIGRyb3BzIHRvIDE2MCBtZWdhYml0cy9zZWMgJiB0byAxOC42IE1lZ2FieXRlcy9zZWMgb25jZQorY29udHJvbCBpbmZvICYgQ1JDIGFyZSBhZGRlZC4gRVNDT04gb25seSBvcGVyYXRlcyBpbiBidXJzdCBtb2RlLgorIAorRVNDT05zIHR5cGljYWwgbWF4IGNhYmxlIGxlbmd0aCBpcyAza20gZm9yIHRoZSBsZWQgdmVyc2lvbiAmIDIwa20gZm9yIHRoZSBsYXNlciB2ZXJzaW9uCitrbm93biBhcyBYREYgKCBleHRlbmRlZCBkaXN0YW5jZSBmYWNpbGl0eSApLiBUaGlzIGNhbiBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IHVzaW5nIGFuCitFU0NPTiBkaXJlY3RvciB3aGljaCB0cmlwbGVzIHRoZSBhYm92ZSBtZW50aW9uZWQgcmFuZ2VzLiBVbmxpa2UgQnVzICYgVGFnIGFzIEVTQ09OIGlzCitzZXJpYWwgaXQgdXNlcyBhIHBhY2tldCBzd2l0Y2hpbmcgYXJjaGl0ZWN0dXJlIHRoZSBzdGFuZGFyZCBCdXMgJiBUYWcgY29udHJvbCBwcm90b2NvbAoraXMgaG93ZXZlciBwcmVzZW50IHdpdGhpbiB0aGUgcGFja2V0cy4gVXB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gZWFjaCBjb250cm9sIAordW5pdCB0aGF0IHVzZXMgb25lIG9mIHRoZXNlIGludGVyZmFjZXMuCisKK0NvbW1vbiAzOTAgRGV2aWNlcyBpbmNsdWRlOgorTmV0d29yayBhZGFwdGVycyB0eXBpY2FsbHkgT1NBMiwzMTcyJ3MsMjExNidzICYgT1NBLUUgZ2lnYWJpdCBldGhlcm5ldCBhZGFwdGVycywKK0NvbnNvbGVzIDMyNzAgJiAzMjE1ICggYSB0ZWxldHlwZSBlbXVsYXRlZCB1bmRlciBsaW51eCBmb3IgYSBsaW5lIG1vZGUgY29uc29sZSApLgorREFTRCdzIGRpcmVjdCBhY2Nlc3Mgc3RvcmFnZSBkZXZpY2VzICggb3RoZXJ3aXNlIGtub3duIGFzIGhhcmQgZGlza3MgKS4KK1RhcGUgRHJpdmVzLgorQ1RDICggQ2hhbm5lbCB0byBDaGFubmVsIEFkYXB0ZXJzICksCitFU0NPTiBvciBQYXJhbGVsbCBDYWJsZXMgdXNlZCBhcyBhIHZlcnkgaGlnaCBzcGVlZCBzZXJpYWwgbGluaworYmV0d2VlbiAyIG1hY2hpbmVzLiBXZSB1c2UgMiBjYWJsZXMgdW5kZXIgbGludXggdG8gZG8gYSBiaS1kaXJlY3Rpb25hbCBzZXJpYWwgbGluay4KKworCitEZWJ1Z2dpbmcgSU8gb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSB1bmRlciBWTQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm93IHdlIGFyZSByZWFkeSB0byBnbyBvbiB3aXRoIElPIHRyYWNpbmcgY29tbWFuZHMgdW5kZXIgVk0KKworQSBmZXcgc2VsZiBleHBsYW5hdG9yeSBxdWVyaWVzOgorUSBPU0EKK1EgQ1RDCitRIERJU0sgKCBUaGlzIGNvbW1hbmQgaXMgQ01TIHNwZWNpZmljICkKK1EgREFTRAorCisKKworCisKKworUSBPU0Egb24gbXkgbWFjaGluZSByZXR1cm5zCitPU0EgIDdDMDggT04gT1NBICAgN0MwOCBTVUJDSEFOTkVMID0gMDAwMAorT1NBICA3QzA5IE9OIE9TQSAgIDdDMDkgU1VCQ0hBTk5FTCA9IDAwMDEKK09TQSAgN0MxNCBPTiBPU0EgICA3QzE0IFNVQkNIQU5ORUwgPSAwMDAyCitPU0EgIDdDMTUgT04gT1NBICAgN0MxNSBTVUJDSEFOTkVMID0gMDAwMworCitJZiB5b3UgaGF2ZSBhIGd1ZXN0IHdpdGggY2VydGFpbiBwcml2aWxpZ2VzIHlvdSBtYXkgYmUgYWJsZSB0byBzZWUgZGV2aWNlcword2hpY2ggZG9uJ3QgYmVsb25nIHRvIHlvdSB0byBhdm9pZCB0aGlzIGRvIGFkZCB0aGUgb3B0aW9uIFYuCitlLmcuCitRIFYgT1NBCisKK05vdyB1c2luZyB0aGUgZGV2aWNlIG51bWJlcnMgcmV0dXJuZWQgYnkgdGhpcyBjb21tYW5kIHdlIHdpbGwKK1RyYWNlIHRoZSBpbyBzdGFydGluZyB1cCBvbiB0aGUgZmlyc3QgZGV2aWNlIDdjMDggJiA3YzA5CitJbiBvdXIgc2ltcGxlc3QgY2FzZSB3ZSBjYW4gdHJhY2UgdGhlIAorc3RhcnQgc3ViY2hhbm5lbHMKK2xpa2UgVFIgU1NDSCA3QzA4LTdDMDkKK29yIHRoZSBoYWx0IHN1YmNoYW5uZWxzCitvciBUUiBIU0NIIDdDMDgtN0MwOQorTVNDSCdzICxTVFNDSCdzIEkgdGhpbmsgeW91IGNhbiBndWVzcyB0aGUgcmVzdAorCitJbmdvJ3MgZmF2b3VyaXRlIHRyaWNrIGlzIHRyYWNpbmcgYWxsIHRoZSBJTydzICYgQ0NXUyAmIHNwb29saW5nIHRoZW0gaW50byB0aGUgcmVhZGVyIG9mIGFub3RoZXIKK1ZNIGd1ZXN0IHNvIGhlIGNhbiBmdHAgdGhlIGxvZ2ZpbGUgYmFjayB0byBoaXMgb3duIG1hY2hpbmUuSSdsbCBkbyBhIHNtYWxsIGJpdCBvZiB0aGlzICYgZ2l2ZSB5b3UKKyBhIGxvb2sgYXQgdGhlIG91dHB1dC4KKworMSkgU3Bvb2wgc3Rkb3V0IHRvIFZNIHJlYWRlcgorU1AgUFJUIFRPIChhbm90aGVyIHZtIGd1ZXN0ICkgb3IgKiBmb3IgdGhlIGxvY2FsIHZtIGd1ZXN0CisyKSBGaWxsIHRoZSByZWFkZXIgd2l0aCB0aGUgdHJhY2UKK1RSIElPIDdjMDgtN2MwOSBJTlNUIElOVCBDQ1cgUFJUIFJVTgorMykgU3RhcnQgdXAgbGludXggCitpIDAwYyAgCis0KSBGaW5pc2ggdGhlIHRyYWNlCitUUiBFTkQKKzUpIGNsb3NlIHRoZSByZWFkZXIKK0MgUFJUCis2KSBsaXN0IHJlYWRlciBjb250ZW50cworUkRSTElTVAorNykgY29weSBpdCB0byBsaW51eDQncyBtaW5pZGlzayAKK1JFQ0VJVkUgLyBMT0cgVFhUIEExICggcmVwbGFjZQorOCkKK2ZpbGVsICYgcHJlc3MgRjExIHRvIGxvb2sgYXQgaXQKK1lvdSBzaG91bGQgc2VlIHNvbWV0aW5nIGxpa2UuCisKKzAwMDIwOTQyJyBTU0NIICBCMjMzNDAwMCAgICAwMDQ4ODEzQyAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CisgICAgICAgICAgQ1BBIDAwMEZGREYwICAgUEFSTSAwMEUyQzlDNCAgICBLRVkgMCAgRlBJIEMwICBMUE0gODAKKyAgICAgICAgICBDQ1cgICAgMDAwRkZERjAgIEU0MjAwMTAwIDAwNDg3RkU4ICAgMDAwMCAgRTQyNDAxMDAgLi4uLi4uLi4KKyAgICAgICAgICBJREFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0M0Q4QUZFOAorICAgICAgICAgIElEQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBGQjc2MDAwCiswMDAyMEIwQScgICBJL08gREVWIDdDMDggLT4gMDAwMTk3QkMnICAgU0NIIDAwMDAgICBQQVJNIDAwRTJDOUM0CiswMDAyMTYyOCcgVFNDSCAgQjIzNTQwMDAgPj4gMDA0ODgxNjQgICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAorICAgICAgICAgIENDV0EgMDAwRkZERjggICBERVYgU1RTIDBDICBTQ0ggU1RTIDAwICBDTlQgMDBFQworICAgICAgICAgICBLRVkgMCAgIEZQSSBDMCAgQ0MgMCAgIENUTFMgNDAwNworMDAwMjIyMzgnIFNUU0NIIEIyMzQ0MDAwID4+IDAwNDg4MTA4ICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKKworSWYgeW91IGRvbid0IGxpa2UgbWVzc2luZyB1cCB5b3VyIHJlYWRlZCAoIGJlY2F1c2UgeW91IHBvc3NpYmx5IGJvb3RlZCBmcm9tIGl0ICkKK3lvdSBjYW4gYWx0ZXJuYXRpdmVseSBzcG9vbCBpdCB0byBhbm90aGVyIHJlYWRlcnMgZ3Vlc3QuCisKKworT3RoZXIgY29tbW9uIFZNIGRldmljZSByZWxhdGVkIGNvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZXNlIGNvbW1hbmRzIGFyZSBsaXN0ZWQgb25seSBiZWNhdXNlIHRoZXkgaGF2ZQorYmVlbiBvZiB1c2UgdG8gbWUgaW4gdGhlIHBhc3QgJiBtYXkgYmUgb2YgdXNlIHRvCit5b3UgdG9vLiBGb3IgbW9yZSBjb21wbGV0ZSBpbmZvIG9uIGVhY2ggb2YgdGhlIGNvbW1hbmRzCit1c2UgdHlwZSBIRUxQIDxjb21tYW5kPiBmcm9tIENNUy4KK2RldGFjaGluZyBkZXZpY2VzCitERVQgPGRldm5vIHJhbmdlPgorQVRUIDxkZXZubyByYW5nZT4gPGd1ZXN0PiAKK2F0dGFjaCBhIGRldmljZSB0byBndWVzdCAqIGZvciB5b3VyIG93biBndWVzdAorUkVBRFkgPGRldm5vPiBjYXVzZSBWTSB0byBpc3N1ZSBhIGZha2UgaW50ZXJydXB0LgorCitUaGUgVkFSWSBjb21tYW5kIGlzIG5vcm1hbGx5IG9ubHkgYXZhaWxhYmxlIHRvIFZNIGFkbWluaXN0cmF0b3JzLgorVkFSWSBPTiBQQVRIIDxwYXRoPiBUTyA8ZGV2bm8gcmFuZ2U+CitWQVJZIE9GRiBQQVRIIDxQQVRIPiBGUk9NIDxkZXZubyByYW5nZT4KK1RoaXMgaXMgdXNlZCB0byBzd2l0Y2ggb24gb3Igb2ZmIGNoYW5uZWwgcGF0aHMgdG8gZGV2aWNlcy4KKworUSBDSFBJRCA8Y2hhbm5lbCBwYXRoIElEPgorVGhpcyBkaXNwbGF5cyBzdGF0ZSBvZiBkZXZpY2VzIHVzaW5nIHRoaXMgY2hhbm5lbCBwYXRoCitEIFNDSElCIDxzdWJjaGFubmVsPgorVGhpcyBkaXNwbGF5cyB0aGUgc3ViY2hhbm5lbCBpbmZvcm1hdGlvbiBTQ0hJQiBibG9jayBmb3IgdGhlIGRldmljZS4KK3RoaXMgSSBiZWxpZXZlIGlzIGFsc28gb25seSBhdmFpbGFibGUgdG8gYWRtaW5pc3RyYXRvcnMuCitERUZJTkUgQ1RDIDxkZXZubz4KK2RlZmluZXMgYSB2aXJ0dWFsIENUQyBjaGFubmVsIHRvIGNoYW5uZWwgY29ubmVjdGlvbgorMiBuZWVkIHRvIGJlIGRlZmluZWQgb24gZWFjaCBndWVzdCBmb3IgdGhlIENUQyBkcml2ZXIgdG8gdXNlLgorQ09VUExFICBkZXZubyB1c2VyaWQgcmVtb3RlIGRldm5vCitKb2lucyBhIGxvY2FsIHZpcnR1YWwgZGV2aWNlIHRvIGEgcmVtb3RlIHZpcnR1YWwgZGV2aWNlCisoIGNvbW1vbmx5IHVzZWQgZm9yIHRoZSBDVEMgZHJpdmVyICkuCisKK0J1aWxkaW5nIGEgVk0gcmFtZGlzayB1bmRlciBDTVMgd2hpY2ggbGludXggY2FuIHVzZQorZGVmIHZmYi08YmxvY2tzaXplPiA8c3ViY2hhbm5lbD4gPG51bWJlciBibG9ja3M+CitibG9ja3NpemUgaXMgY29tbW9ubHkgNDA5NiBmb3IgbGludXguCitGb3JtYXR0aW5nIGl0Citmb3JtYXQgPHN1YmNoYW5uZWw+IDxkcml2ZXIgbGV0dGVyIGUuZy4geD4gKGJsa3NpemUgPGJsb2Nrc2l6ZT4KKworU2hhcmluZyBhIGRpc2sgYmV0d2VlbiBtdWx0aXBsZSBndWVzdHMKK0xJTksgdXNlcmlkIGRldm5vMSBkZXZubzIgbW9kZSBwYXNzd29yZAorCisKKworR0RCIG9uIFMzOTAKKz09PT09PT09PT09CitOLkIuIGlmIGNvbXBpbGluZyBmb3IgZGVidWdnaW5nIGdkYiB3b3JrcyBiZXR0ZXIgd2l0aG91dCBvcHRpbWlzYXRpb24gCisoIHNlZSBDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyApCisKK2ludm9jYXRpb24KKy0tLS0tLS0tLS0KK2dkYiA8dmljdGltIHByb2dyYW0+IDxvcHRpb25hbCBjb3JlZmlsZT4KKworT25saW5lIGhlbHAKKy0tLS0tLS0tLS0tCitoZWxwOiBnaXZlcyBoZWxwIG9uIGNvbW1hbmRzCitlLmcuCitoZWxwCitoZWxwIGRpc3BsYXkKK05vdGUgZ2RiJ3Mgb25saW5lIGhlbHAgaXMgdmVyeSBnb29kIHVzZSBpdC4KKworCitBc3NlbWJseQorLS0tLS0tLS0KK2luZm8gcmVnaXN0ZXJzOiBkaXNwbGF5cyByZWdpc3RlcnMgb3RoZXIgdGhhbiBmbG9hdGluZyBwb2ludC4KK2luZm8gYWxsLXJlZ2lzdGVyczogZGlzcGxheXMgZmxvYXRpbmcgcG9pbnRzIGFzIHdlbGwuCitkaXNhc3NlbWJsZTogZGlzc2Fzc2VtYmxlcworZS5nLgorZGlzYXNzZW1ibGUgd2l0aG91dCBwYXJhbWV0ZXJzIHdpbGwgZGlzYXNzZW1ibGUgdGhlIGN1cnJlbnQgZnVuY3Rpb24KK2Rpc2Fzc2VtYmxlICRwYyAkcGMrMTAgCisKK1ZpZXdpbmcgJiBtb2RpZnlpbmcgdmFyaWFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJpbnQgb3IgcDogZGlzcGxheXMgdmFyaWFibGUgb3IgcmVnaXN0ZXIKK2UuZy4gcC94ICRzcCB3aWxsIGRpc3BsYXkgdGhlIHN0YWNrIHBvaW50ZXIKKworZGlzcGxheTogcHJpbnRzIHZhcmlhYmxlIG9yIHJlZ2lzdGVyIGVhY2ggdGltZSBwcm9ncmFtIHN0b3BzCitlLmcuCitkaXNwbGF5L3ggJHBjIHdpbGwgZGlzcGxheSB0aGUgcHJvZ3JhbSBjb3VudGVyCitkaXNwbGF5IGFyZ2MKKwordW5kaXNwbGF5IDogdW5kbydzIGRpc3BsYXkncworCitpbmZvIGJyZWFrcG9pbnRzOiBzaG93cyBhbGwgY3VycmVudCBicmVha3BvaW50cworCitpbmZvIHN0YWNrOiBzaG93cyBzdGFjayBiYWNrIHRyYWNlICggaWYgdGhpcyBkb3NlbnQgd29yayB0b28gd2VsbCwgSSdsbCBzaG93IHlvdSB0aGUKK3N0YWNrdHJhY2UgYnkgaGFuZCBiZWxvdyApLgorCitpbmZvIGxvY2FsczogZGlzcGxheXMgbG9jYWwgdmFyaWFibGVzLgorCitpbmZvIGFyZ3M6IGRpc3BsYXkgY3VycmVudCBwcm9jZWR1cmUgYXJndW1lbnRzLgorCitzZXQgYXJnczogd2lsbCBzZXQgYXJnYyAmIGFyZ3YgZWFjaCB0aW1lIHRoZSB2aWN0aW0gcHJvZ3JhbSBpcyBpbnZva2VkLgorCitzZXQgPHZhcmlhYmxlPj12YWx1ZQorc2V0IGFyZ2M9MTAwCitzZXQgJHBjPTAKKworCisKK01vZGlmeWluZyBleGVjdXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0ZXA6IHN0ZXBzIG4gbGluZXMgb2Ygc291cmNlY29kZQorc3RlcCBzdGVwcyAxIGxpbmUuCitzdGVwIDEwMCBzdGVwcyAxMDAgbGluZXMgb2YgY29kZS4KKworbmV4dDogbGlrZSBzdGVwIGV4Y2VwdCB0aGlzIHdpbGwgbm90IHN0ZXAgaW50byBzdWJyb3V0aW5lcworCitzdGVwaTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uLgorZS5nLiBzdGVwaSAxMDAKKworbmV4dGk6IHN0ZXBzIGEgc2luZ2xlIG1hY2hpbmUgY29kZSBpbnN0cnVjdGlvbiBidXQgd2lsbCBub3Qgc3RlcCBpbnRvIHN1YnJvdXRpbmVzLgorCitmaW5pc2g6IHdpbGwgcnVuIHVudGlsIGV4aXQgb2YgdGhlIGN1cnJlbnQgcm91dGluZQorCitydW46IChyZSlzdGFydHMgYSBwcm9ncmFtCisKK2NvbnQ6IGNvbnRpbnVlcyBhIHByb2dyYW0KKworcXVpdDogZXhpdHMgZ2RiLgorCisKK2JyZWFrcG9pbnRzCistLS0tLS0tLS0tLS0KKworYnJlYWsKK3NldHMgYSBicmVha3BvaW50CitlLmcuCisKK2JyZWFrIG1haW4KKworYnJlYWsgKiRwYworCiticmVhayAqMHg0MDA2MTgKKworaGVyZXMgYSByZWFsbHkgdXNlZnVsIG9uZSBmb3IgbGFyZ2UgcHJvZ3JhbXMKK3JicgorU2V0IGEgYnJlYWtwb2ludCBmb3IgYWxsIGZ1bmN0aW9ucyBtYXRjaGluZyBSRUdFWFAKK2UuZy4KK3JiciAzOTAKK3dpbGwgc2V0IGEgYnJlYWtwb2ludCB3aXRoIGFsbCBmdW5jdGlvbnMgd2l0aCAzOTAgaW4gdGhlaXIgbmFtZS4KKworaW5mbyBicmVha3BvaW50cworbGlzdHMgYWxsIGJyZWFrcG9pbnRzCisKK2RlbGV0ZTogZGVsZXRlIGJyZWFrcG9pbnQgYnkgbnVtYmVyIG9yIGRlbGV0ZSB0aGVtIGFsbAorZS5nLgorZGVsZXRlIDEgd2lsbCBkZWxldGUgdGhlIGZpcnN0IGJyZWFrcG9pbnQKK2RlbGV0ZSB3aWxsIGRlbGV0ZSB0aGVtIGFsbAorCit3YXRjaDogVGhpcyB3aWxsIHNldCBhIHdhdGNocG9pbnQgKCB1c3VhbGx5IGhhcmR3YXJlIGFzc2lzdGVkICksCitUaGlzIHdpbGwgd2F0Y2ggYSB2YXJpYWJsZSB0aWxsIGl0IGNoYW5nZXMKK2UuZy4KK3dhdGNoIGNudCwgd2lsbCB3YXRjaCB0aGUgdmFyaWFibGUgY250IHRpbGwgaXQgY2hhbmdlcy4KK0FzIGFuIGFzaWRlIHVuZm9ydHVuYXRlbHkgZ2RiJ3MsIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCB3YXRjaHBvaW50IGNvZGUKK2lzIGluY29uc2lzdGVudCAmIG5vdCB2ZXJ5IGdvb2QsIHdhdGNocG9pbnRzIHVzdWFsbHkgd29yayBidXQgbm90IGFsd2F5cy4KKworaW5mbyB3YXRjaHBvaW50czogRGlzcGxheSBjdXJyZW50bHkgYWN0aXZlIHdhdGNocG9pbnRzCisKK2NvbmRpdGlvbjogKCBhbm90aGVyIHVzZWZ1bCBvbmUgKQorU3BlY2lmeSBicmVha3BvaW50IG51bWJlciBOIHRvIGJyZWFrIG9ubHkgaWYgQ09ORCBpcyB0cnVlLgorVXNhZ2UgaXMgYGNvbmRpdGlvbiBOIENPTkQnLCB3aGVyZSBOIGlzIGFuIGludGVnZXIgYW5kIENPTkQgaXMgYW4KK2V4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIHdoZW5ldmVyIGJyZWFrcG9pbnQgTiBpcyByZWFjaGVkLgorCisKKworVXNlciBkZWZpbmVkIGZ1bmN0aW9ucy9tYWNyb3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWZpbmU6ICggTm90ZSB0aGlzIGlzIHZlcnkgdmVyeSB1c2VmdWwsc2ltcGxlICYgcG93ZXJmdWwgKQordXNhZ2UgZGVmaW5lIDxuYW1lPiA8bGlzdCBvZiBjb21tYW5kcz4gZW5kCisKK2V4YW1wbGVzIHdoaWNoIHlvdSBzaG91bGQgY29uc2lkZXIgcHV0dGluZyBpbnRvIC5nZGJpbml0IGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKK2RlZmluZSBkCitzdGVwaQorZGlzYXNzZW1ibGUgJHBjICRwYysxMAorZW5kCisKK2RlZmluZSBlCituZXh0aQorZGlzYXNzZW1ibGUgJHBjICRwYysxMAorZW5kCisKKworT3RoZXIgaGFyZCB0byBjbGFzc2lmeSBzdHVmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2lnbmFsIG46CitzZW5kcyB0aGUgdmljdGltIHByb2dyYW0gYSBzaWduYWwuCitlLmcuIHNpZ25hbCAzIHdpbGwgc2VuZCBhIFNJR1FVSVQuCisKK2luZm8gc2lnbmFsczoKK3doYXQgZ2RiIGRvZXMgd2hlbiB0aGUgdmljdGltIHJlY2VpdmVzIGNlcnRhaW4gc2lnbmFscy4KKworbGlzdDoKK2UuZy4KK2xpc3QgbGlzdHMgY3VycmVudCBmdW5jdGlvbiBzb3VyY2UKK2xpc3QgMSwxMCBsaXN0IGZpcnN0IDEwIGxpbmVzIG9mIGN1cnJldCBmaWxlLgorbGlzdCB0ZXN0LmM6MSwxMAorCisKK2RpcmVjdG9yeToKK0FkZHMgZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQgZm9yIHNvdXJjZSBpZiBnZGIgY2Fubm90IGZpbmQgdGhlIHNvdXJjZS4KKyhub3RlIGl0IGlzIGEgYml0IHNlbnNpdGl0aXZlIGFib3V0IHNsYXNoZXMgKSAKK2UuZy4gVG8gYWRkIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBzZWFyY2hwYXRoIGRvCitkaXJlY3RvcnkgLy8KKworCitjYWxsIDxmdW5jdGlvbj4KK1RoaXMgY2FsbHMgYSBmdW5jdGlvbiBpbiB0aGUgdmljdGltIHByb2dyYW0sIHRoaXMgaXMgcHJldHR5IHBvd2VyZnVsCitlLmcuCisoZ2RiKSBjYWxsIHByaW50ZigiaGVsbG8gd29ybGQiKQorb3V0cHV0czoKKyQxID0gMTEgCisKK1lvdSBtaWdodCBub3cgYmUgdGhpbmtpbmcgdGhhdCB0aGUgbGluZSBhYm92ZSBkaWRuJ3Qgd29yaywgc29tZXRoaW5nIGV4dHJhIGhhZCB0byBiZSBkb25lLgorKGdkYikgY2FsbCBmZmx1c2goc3Rkb3V0KQoraGVsbG8gd29ybGQkMiA9IDAKK0FzIGFuIGFzaWRlIHRoZSBkZWJ1Z2dlciBhbHNvIGNhbGxzIG1hbGxvYyAmIGZyZWUgdW5kZXIgdGhlIGhvb2QgCit0byBtYWtlIHNwYWNlIGZvciB0aGUgImhlbGxvIHdvcmxkIiBzdHJpbmcuCisKKworCitoaW50cworLS0tLS0KKzEpIGNvbW1hbmQgY29tcGxldGlvbiB3b3JrcyBqdXN0IGxpa2UgYmFzaCAKKyggaWYgeW91IGFyZSBhIGJhZCB0eXBpc3QgbGlrZSBtZSB0aGlzIHJlYWxseSBoZWxwcyApCitlLmcuIGhpdCBiciA8VEFCPiAmIGN1cnNvciB1cCAmIGRvd24gOi0pLgorCisyKSBpZiB5b3UgaGF2ZSBhIGRlYnVnZ2luZyBwcm9ibGVtIHRoYXQgdGFrZXMgYSBmZXcgc3RlcHMgdG8gcmVjcmVhdGUKK3B1dCB0aGUgc3RlcHMgaW50byBhIGZpbGUgY2FsbGVkIC5nZGJpbml0IGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQoraWYgeW91IGhhdmUgZGVmaW5lZCBhIGZldyBleHRyYSB1c2VmdWwgdXNlciBkZWZpbmVkIGNvbW1hbmRzIHB1dCB0aGVzZSBpbiAKK3lvdXIgaG9tZSBkaXJlY3RvcnkgJiB0aGV5IHdpbGwgYmUgcmVhZCBlYWNoIHRpbWUgZ2RiIGlzIGxhdW5jaGVkLgorCitBIHR5cGljYWwgLmdkYmluaXQgZmlsZSBtaWdodCBiZS4KK2JyZWFrIG1haW4KK3J1bgorYnJlYWsgcnVudGltZV9leGNlcHRpb24KK2NvbnQgCisKKworc3RhY2sgY2hhaW5pbmcgaW4gZ2RiIGJ5IGhhbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIGRvbmUgdXNpbmcgYSB0aGUgc2FtZSB0cmljayBkZXNjcmliZWQgZm9yIFZNIAorcC94ICgqKCRzcCs1NikpJjB4N2ZmZmZmZmYgZ2V0IHRoZSBmaXJzdCBiYWNrY2hhaW4uCisKK0ZvciB6L0FyY2hpdGVjdHVyZQorUmVwbGFjZSA1NiB3aXRoIDExMiAmIGlnbm9yZSB0aGUgJjB4N2ZmZmZmZmYKK2luIHRoZSBtYWNyb3MgYmVsb3cgJiBkbyBuYXN0eSBjYXN0cyB0byBsb25ncyBsaWtlIHRoZSBmb2xsb3dpbmcKK2FzIGdkYiB1bmZvcnR1bmF0ZWx5IGRlYWxzIHdpdGggcHJpbnRlZCBhcmd1bWVudHMgYXMgaW50cyB3aGljaAorbWVzc2VzIHVwIGV2ZXJ5dGhpbmcuCitpLmUuIGhlcmUgaXMgYSAzcmQgYmFja2NoYWluIGRlcmVmZXJlbmNlCitwL3ggKihsb25nICopKCoqKihsb25nICoqKikkc3ArMTEyKQorCisKK3RoaXMgb3V0cHV0cyAKKyQ1ID0gMHg1MjhmMTggCitvbiBteSBtYWNoaW5lLgorTm93IHlvdSBjYW4gdXNlIAoraW5mbyBzeW1ib2wgKCooJHNwKzU2KSkmMHg3ZmZmZmZmZiAKK3lvdSBtaWdodCBzZWUgc29tZXRoaW5nIGxpa2UuCitybF9nZXRjICsgMzYgaW4gc2VjdGlvbiAudGV4dCAgdGVsbGluZyB5b3Ugd2hhdCBpcyBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MjhmMTgKK05vdyBkby4KK3AveCAoKigqJHNwKzU2KSkmMHg3ZmZmZmZmZiAKK1RoaXMgb3V0cHV0cworJDYgPSAweDUyOGVkMAorTm93IGRvLgoraW5mbyBzeW1ib2wgKCooKiRzcCs1NikpJjB4N2ZmZmZmZmYKK3JsX3JlYWRfa2V5ICsgMTgwIGluIHNlY3Rpb24gLnRleHQKK25vdyBkbworcC94ICgqKCoqJHNwKzU2KSkmMHg3ZmZmZmZmZgorJiBzbyBvbi4KKworRGlzYXNzZW1ibGluZyBpbnN0cnVjdGlvbnMgd2l0aG91dCBkZWJ1ZyBpbmZvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dkYiB0eXBpY2FsbHkgY29tcGFpbnMgaWYgdGhlcmUgaXMgYSBsYWNrIG9mIGRlYnVnZ2luZworc3ltYm9scyBpbiAgdGhlIGRpc2Fzc2VtYmxlIGNvbW1hbmQgd2l0aCAKKyJObyBmdW5jdGlvbiBjb250YWlucyBzcGVjaWZpZWQgYWRkcmVzcy4iIHRvIGdldCBhcm91bmQKK3RoaXMgZG8gCit4LzxudW1iZXIgbGluZXMgdG8gZGlzYXNzZW1ibGU+eGkgPGFkZHJlc3M+CitlLmcuCit4LzIweGkgMHg0MDA3MzAKKworCisKK05vdGU6IFJlbWVtYmVyIGdkYiBoYXMgaGlzdG9yeSBqdXN0IGxpa2UgYmFzaCB5b3UgZG9uJ3QgbmVlZCB0byByZXR5cGUgdGhlCit3aG9sZSBsaW5lIGp1c3QgdXNlIHRoZSB1cCAmIGRvd24gYXJyb3dzLgorCisKKworRm9yIG1vcmUgaW5mbworLS0tLS0tLS0tLS0tLQorRnJvbSB5b3VyIGxpbnV4Ym94IGRvIAorbWFuIGdkYiBvciBpbmZvIGdkYi4KKworY29yZSBkdW1wcworLS0tLS0tLS0tLQorV2hhdCBhIGNvcmUgZHVtcCA/LAorQSBjb3JlIGR1bXAgaXMgYSBmaWxlIGdlbmVyYXRlZCBieSB0aGUga2VybmVsICggaWYgYWxsb3dlZCApIHdoaWNoIGNvbnRhaW5zIHRoZSByZWdpc3RlcnMsCismIGFsbCBhY3RpdmUgcGFnZXMgb2YgdGhlIHByb2dyYW0gd2hpY2ggaGFzIGNyYXNoZWQuCitGcm9tIHRoaXMgZmlsZSBnZGIgd2lsbCBhbGxvdyB5b3UgdG8gbG9vayBhdCB0aGUgcmVnaXN0ZXJzICYgc3RhY2sgdHJhY2UgJiBtZW1vcnkgb2YgdGhlCitwcm9ncmFtIGFzIGlmIGl0IGp1c3QgY3Jhc2hlZCBvbiB5b3VyIHN5c3RlbSwgaXQgaXMgdXN1YWxseSBjYWxsZWQgY29yZSAmIGNyZWF0ZWQgaW4gdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpbiB0aGF0IGEgY3VzdG9tZXIgY2FuIG1haWwgYSBjb3JlIGR1bXAgdG8gYSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50CismIHRoZSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50IGNhbiByZWNvbnN0cnVjdCB3aGF0IGhhcHBlbmVkLgorUHJvdmlkZWQgdGhlIGhhdmUgYW4gaWRlbnRpY2FsIGNvcHkgb2YgdGhpcyBwcm9ncmFtIHdpdGggZGVidWdnaW5nIHN5bWJvbHMgY29tcGlsZWQgaW4gJiAKK3RoZSBzb3VyY2UgYmFzZSBvZiB0aGlzIGJ1aWxkIGlzIGF2YWlsYWJsZS4KK0luIHNob3J0IGl0IGlzIGZhciBtb3JlIHVzZWZ1bCB0aGFuIHNvbWV0aGluZyBsaWtlIGEgY3Jhc2ggbG9nIGNvdWxkIGV2ZXIgaG9wZSB0byBiZS4KKworSW4gdGhlb3J5IGFsbCB0aGF0IGlzIG1pc3NpbmcgdG8gcmVzdGFydCBhIGNvcmUgZHVtcGVkIHByb2dyYW0gaXMgYSBrZXJuZWwgcGF0Y2ggd2hpY2gKK3dpbGwgZG8gdGhlIGZvbGxvd2luZy4KKzEpIE1ha2UgYSBuZXcga2VybmVsIHRhc2sgc3RydWN0dXJlCisyKSBSZWxvYWQgYWxsIHRoZSBkdW1wZWQgcGFnZXMgYmFjayBpbnRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLgorMykgRG8gdGhlIHJlcXVpcmVkIGNsb2NrIGZpeHVwcworNCkgR2V0IGFsbCBmaWxlcyAmIG5ldHdvcmsgY29ubmVjdGlvbnMgZm9yIHRoZSBwcm9jZXNzIGJhY2sgaW50byBhbiBpZGVudGljYWwgc3RhdGUgKCByZWFsbHkgZGlmZmljdWx0ICkuCis1KSBBIGZldyBtb3JlIGRpZmZpY3VsdCB0aGluZ3MgSSBoYXZlbid0IHRob3VnaHQgb2YuCisKKworCitXaHkgaGF2ZSBJIG5ldmVyIHNlZW4gb25lID8uCitQcm9iYWJseSBiZWNhdXNlIHlvdSBoYXZlbid0IHVzZWQgdGhlIGNvbW1hbmQgCit1bGltaXQgLWMgdW5saW1pdGVkIGluIGJhc2gKK3RvIGFsbG93IGNvcmUgZHVtcHMsIG5vdyBkbyAKK3VsaW1pdCAtYSAKK3RvIHZlcmlmeSB0aGF0IHRoZSBsaW1pdCB3YXMgYWNjZXB0ZWQuCisKK0Egc2FtcGxlIGNvcmUgZHVtcAorVG8gY3JlYXRlIHRoaXMgSSdtIGdvaW5nIHRvIGRvCit1bGltaXQgLWMgdW5saW1pdGVkCitnZGIgCit0byBsYXVuY2ggZ2RiIChteSB2aWN0aW0gYXBwLiApIG5vdyBiZSBiYWQgJiBkbyB0aGUgZm9sbG93aW5nIGZyb20gYW5vdGhlciAKK3RlbG5ldC94dGVybSBzZXNzaW9uIHRvIHRoZSBzYW1lIG1hY2hpbmUKK3BzIC1hdXggfCBncmVwIGdkYgora2lsbCAtU0lHU0VHViA8Z2RiJ3MgcGlkPgorb3IgYWx0ZXJuYXRpdmVseSB1c2Uga2lsbGFsbCAtU0lHU0VHViBnZGIgaWYgeW91IGhhdmUgdGhlIGtpbGxhbGwgY29tbWFuZC4KK05vdyBsb29rIGF0IHRoZSBjb3JlIGR1bXAuCisuL2dkYiAuL2dkYiBjb3JlCitEaXNwbGF5cyB0aGUgZm9sbG93aW5nCitHTlUgZ2RiIDQuMTgKK0NvcHlyaWdodCAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorR0RCIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgeW91IGFyZQord2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVzIG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KK1R5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgorVGhlcmUgaXMgYWJzb2x1dGVseSBubyB3YXJyYW50eSBmb3IgR0RCLiAgVHlwZSAic2hvdyB3YXJyYW50eSIgZm9yIGRldGFpbHMuCitUaGlzIEdEQiB3YXMgY29uZmlndXJlZCBhcyAiczM5MC1pYm0tbGludXgiLi4uCitDb3JlIHdhcyBnZW5lcmF0ZWQgYnkgYC4vZ2RiJy4KK1Byb2dyYW0gdGVybWluYXRlZCB3aXRoIHNpZ25hbCAxMSwgU2VnbWVudGF0aW9uIGZhdWx0LgorUmVhZGluZyBzeW1ib2xzIGZyb20gL3Vzci9saWIvbGlibmN1cnNlcy5zby40Li4uZG9uZS4KK1JlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGlibS5zby42Li4uZG9uZS4KK1JlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGliYy5zby42Li4uZG9uZS4KK1JlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGQtbGludXguc28uMi4uLmRvbmUuCisjMCAgMHg0MDEyNmQxYSBpbiByZWFkICgpIGZyb20gL2xpYi9saWJjLnNvLjYKK1NldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGZvciBkZWJ1Z2dpbmcgZ2RiLgorQnJlYWtwb2ludCAxIGF0IDB4NGRjNmY4OiBmaWxlIHV0aWxzLmMsIGxpbmUgNDcxLgorQnJlYWtwb2ludCAyIGF0IDB4NGQ4N2E0OiBmaWxlIHRvcC5jLCBsaW5lIDI2MDkuCisodG9wLWdkYikgaW5mbyBzdGFjaworIzAgIDB4NDAxMjZkMWEgaW4gcmVhZCAoKSBmcm9tIC9saWIvbGliYy5zby42CisjMSAgMHg1MjhmMjYgaW4gcmxfZ2V0YyAoc3RyZWFtPTB4N2ZmZmZkZTgpIGF0IGlucHV0LmM6NDAyCisjMiAgMHg1MjhlZDAgaW4gcmxfcmVhZF9rZXkgKCkgYXQgaW5wdXQuYzozODEKKyMzICAweDUxNjdlNiBpbiByZWFkbGluZV9pbnRlcm5hbF9jaGFyICgpIGF0IHJlYWRsaW5lLmM6NDU0CisjNCAgMHg1MTY4ZWUgaW4gcmVhZGxpbmVfaW50ZXJuYWxfY2hhcmxvb3AgKCkgYXQgcmVhZGxpbmUuYzo1MDcKKyM1ICAweDUxNjkyYyBpbiByZWFkbGluZV9pbnRlcm5hbCAoKSBhdCByZWFkbGluZS5jOjUyMQorIzYgIDB4NTE2NGZlIGluIHJlYWRsaW5lIChwcm9tcHQ9MHg3ZmZmZjgxMCAiXDE3N4H/gfh4XDE3N4H/gfeB2FwxNzeB/4H4eIHAIikKKyAgICBhdCByZWFkbGluZS5jOjM0OQorIzcgIDB4NGQ3YThhIGluIGNvbW1hbmRfbGluZV9pbnB1dCAocHJyb21wdD0weDU2NDQyMCAiKGdkYikgIiwgcmVwZWF0PTEsCisgICAgYW5ub3RhdGlvbl9zdWZmaXg9MHg0ZDZiNDQgInByb21wdCIpIGF0IHRvcC5jOjIwOTEKKyM4ICAweDRkNmNmMCBpbiBjb21tYW5kX2xvb3AgKCkgYXQgdG9wLmM6MTM0NQorIzkgIDB4NGUyNWJjIGluIG1haW4gKGFyZ2M9MSwgYXJndj0weDdmZmZmZGY0KSBhdCBtYWluLmM6NjM1CisKKworTERECis9PT0KK1RoaXMgaXMgYSBwcm9ncmFtIHdoaWNoIGxpc3RzIHRoZSBzaGFyZWQgbGlicmFyaWVzIHdoaWNoIGEgbGlicmFyeSBuZWVkcywKK05vdGUgeW91IGFsc28gZ2V0IHRoZSByZWxvY2F0aW9ucyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgdGV4dCBzZWdtZW50cyB3aGljaAoraGVscCB3aGVuIHVzaW5nIG9iamR1bXAgLS1zb3VyY2UuCitlLmcuCisgbGRkIC4vZ2RiCitvdXRwdXRzCitsaWJuY3Vyc2VzLnNvLjQgPT4gL3Vzci9saWIvbGlibmN1cnNlcy5zby40ICgweDQwMDE4MDAwKQorbGlibS5zby42ID0+IC9saWIvbGlibS5zby42ICgweDQwMDVlMDAwKQorbGliYy5zby42ID0+IC9saWIvbGliYy5zby42ICgweDQwMDg0MDAwKQorL2xpYi9sZC1saW51eC5zby4yID0+IC9saWIvbGQtbGludXguc28uMiAoMHg0MDAwMDAwMCkKKworCitEZWJ1Z2dpbmcgc2hhcmVkIGxpYnJhcmllcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KK01vc3QgcHJvZ3JhbXMgdXNlIHNoYXJlZCBsaWJyYXJpZXMsIGhvd2V2ZXIgaXQgY2FuIGJlIHZlcnkgcGFpbmZ1bAord2hlbiB5b3Ugc2luZ2xlIHN0ZXAgaW5zdHJ1Y3Rpb24gaW50byBhIGZ1bmN0aW9uIGxpa2UgcHJpbnRmIGZvciB0aGUgCitmaXJzdCB0aW1lICYgeW91IGVuZCB1cCBpbiBmdW5jdGlvbnMgbGlrZSBfZGxfcnVudGltZV9yZXNvbHZlIHRoaXMgaXMKK3RoZSBsZC5zbyBkb2luZyBsYXp5IGJpbmRpbmcsIGxhenkgYmluZGluZyBpcyBhIGNvbmNlcHQgaW4gRUxGIHdoZXJlIAorc2hhcmVkIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSBub3QgbG9hZGVkIGludG8gbWVtb3J5IHVubGVzcyB0aGV5IGFyZSAKK2FjdHVhbGx5IHVzZWQsIGdyZWF0IGZvciBzYXZpbmcgbWVtb3J5IGJ1dCBhIHBhaW4gdG8gZGVidWcuCitUbyBnZXQgYXJvdW5kIHRoaXMgZWl0aGVyIHJlbGluayB0aGUgcHJvZ3JhbSAtc3RhdGljIG9yIGV4aXQgZ2RiIHR5cGUgCitleHBvcnQgTERfQklORF9OT1c9dHJ1ZSB0aGlzIHdpbGwgc3RvcCBsYXp5IGJpbmRpbmcgJiByZXN0YXJ0IHRoZSBnZGInaW5nIAordGhlIHByb2dyYW0gaW4gcXVlc3Rpb24uCisgCisKKworRGVidWdnaW5nIG1vZHVsZXMKKz09PT09PT09PT09PT09PT09CitBcyBtb2R1bGVzIGFyZSBkeW5hbWljYWxseSBsb2FkZWQgaW50byB0aGUga2VybmVsIHRoZWlyIGFkZHJlc3MgY2FuIGJlCithbnl3aGVyZSB0byBnZXQgYXJvdW5kIHRoaXMgdXNlIHRoZSAtbSBvcHRpb24gd2l0aCBpbnNtb2QgdG8gZW1pdCBhIGxvYWQKK21hcCB3aGljaCBjYW4gYmUgcGlwZWQgaW50byBhIGZpbGUgaWYgcmVxdWlyZWQuCisKK1RoZSBwcm9jIGZpbGUgc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PQorV2hhdCBpcyBpdCA/LgorSXQgaXMgYSBmaWxlc3lzdGVtIGNyZWF0ZWQgYnkgdGhlIGtlcm5lbCB3aXRoIGZpbGVzIHdoaWNoIGFyZSBjcmVhdGVkIG9uIGRlbWFuZAorYnkgdGhlIGtlcm5lbCBpZiByZWFkLCBvciBjYW4gYmUgdXNlZCB0byBtb2RpZnkga2VybmVsIHBhcmFtZXRlcnMsCitpdCBpcyBhIHBvd2VyZnVsIGNvbmNlcHQuCisKK2UuZy4KKworY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkIAorT24gbXkgbWFjaGluZSBvdXRwdXRzIAorMCAKK3RlbGxpbmcgbWUgaXBfZm9yd2FyZGluZyBpcyBub3Qgb24gdG8gc3dpdGNoIGl0IG9uIEkgY2FuIGRvCitlY2hvIDEgPiAgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQKK2NhdCBpdCBhZ2FpbgorY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkIAorT24gbXkgbWFjaGluZSBub3cgb3V0cHV0cworMQorSVAgZm9yd2FyZGluZyBpcyBvbi4KK1RoZXJlIGlzIGEgbG90IG9mIHVzZWZ1bCBpbmZvIGluIGhlcmUgYmVzdCBmb3VuZCBieSBnb2luZyBpbiAmIGhhdmluZyBhIGxvb2sgYXJvdW5kLAorc28gSSdsbCB0YWtlIHlvdSB0aHJvdWdoIHNvbWUgZW50cmllcyBJIGNvbnNpZGVyIGltcG9ydGFudC4KKworQWxsIHRoZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgbWFjaGluZSBoYXZlIHRoZXJlIG93biBlbnRyeSBkZWZpbmVkIGJ5CisvcHJvYy88cGlkPgorU28gbGV0cyBoYXZlIGEgbG9vayBhdCB0aGUgaW5pdCBwcm9jZXNzCitjZCAvcHJvYy8xCisKK2NhdCBjbWRsaW5lCitlbWl0cworaW5pdCBbMl0KKworY2QgL3Byb2MvMS9mZAorVGhpcyBjb250YWlucyBudW1lcmljYWwgZW50cmllcyBvZiBhbGwgdGhlIG9wZW4gZmlsZXMsCitzb21lIG9mIHRoZXNlIHlvdSBjYW4gY2F0IGUuZy4gc3Rkb3V0ICgyKQorCitjYXQgL3Byb2MvMjkvbWFwcworb24gbXkgbWFjaGluZSBlbWl0cworCiswMDQwMDAwMC0wMDQ3ODAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDQxMDMgICAgICAgL2Jpbi9iYXNoCiswMDQ3ODAwMC0wMDQ3ZTAwMCBydy1wIDAwMDc3MDAwIDVmOjAwIDQxMDMgICAgICAgL2Jpbi9iYXNoCiswMDQ3ZTAwMC0wMDQ5MjAwMCByd3hwIDAwMDAwMDAwIDAwOjAwIDAKKzQwMDAwMDAwLTQwMDE1MDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCis0MDAxNTAwMC00MDAxNjAwMCBydy1wIDAwMDE0MDAwIDVmOjAwIDE0MzgyICAgICAgL2xpYi9sZC0yLjEuMi5zbworNDAwMTYwMDAtNDAwMTcwMDAgcnd4cCAwMDAwMDAwMCAwMDowMCAwCis0MDAxNzAwMC00MDAxODAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKKzQwMDE4MDAwLTQwMDFiMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQ0MzUgICAgICAvbGliL2xpYnRlcm1jYXAuc28uMi4wLjgKKzQwMDFiMDAwLTQwMDFjMDAwIHJ3LXAgMDAwMDIwMDAgNWY6MDAgMTQ0MzUgICAgICAvbGliL2xpYnRlcm1jYXAuc28uMi4wLjgKKzQwMDFjMDAwLTQwMTBkMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODcgICAgICAvbGliL2xpYmMtMi4xLjIuc28KKzQwMTBkMDAwLTQwMTExMDAwIHJ3LXAgMDAwZjAwMDAgNWY6MDAgMTQzODcgICAgICAvbGliL2xpYmMtMi4xLjIuc28KKzQwMTExMDAwLTQwMTE0MDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMAorNDAxMTQwMDAtNDAxMWUwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQwOCAgICAgIC9saWIvbGlibnNzX2ZpbGVzLTIuMS4yLnNvCis0MDExZTAwMC00MDExZjAwMCBydy1wIDAwMDA5MDAwIDVmOjAwIDE0NDA4ICAgICAgL2xpYi9saWJuc3NfZmlsZXMtMi4xLjIuc28KKzdmZmZkMDAwLTgwMDAwMDAwIHJ3eHAgZmZmZmUwMDAgMDA6MDAgMAorCisKK1Nob3dpbmcgdXMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW5pdCB1c2VzIHdoZXJlIHRoZXkgYXJlIGluIG1lbW9yeQorJiBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zIGZvciBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEuCisKKy9wcm9jLzEvY3dkIGlzIGEgc29mdGxpbmsgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisvcHJvYy8xL3Jvb3QgaXMgdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gZm9yIHRoaXMgcHJvY2Vzcy4gCisKKy9wcm9jLzEvbWVtIGlzIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2Vzc2VzIG1lbW9yeSB3aGljaCB5b3UKK2NhbiByZWFkICYgd3JpdGUgdG8gbGlrZSBhIGZpbGUuCitzdHJhY2UgdXNlcyB0aGlzIHNvbWV0aW1lcyBhcyBpdCBpcyBhIGJpdCBmYXN0ZXIgdGhhbiB0aGUKK3JhdGhlciBpbmVmZmljZW50IHB0cmFjZSBpbnRlcmZhY2UgZm9yIHBlZWtpbmcgYXQgREFUQS4KKworCitjYXQgc3RhdHVzIAorCitOYW1lOiAgIGluaXQKK1N0YXRlOiAgUyAoc2xlZXBpbmcpCitQaWQ6ICAgIDEKK1BQaWQ6ICAgMAorVWlkOiAgICAwICAgICAgIDAgICAgICAgMCAgICAgICAwCitHaWQ6ICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDAKK0dyb3VwczoKK1ZtU2l6ZTogICAgICA0MDgga0IKK1ZtTGNrOiAgICAgICAgIDAga0IKK1ZtUlNTOiAgICAgICAyMDgga0IKK1ZtRGF0YTogICAgICAgMjQga0IKK1ZtU3RrOiAgICAgICAgIDgga0IKK1ZtRXhlOiAgICAgICAzNjgga0IKK1ZtTGliOiAgICAgICAgIDAga0IKK1NpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMAorU2lnQmxrOiAwMDAwMDAwMDAwMDAwMDAwCitTaWdJZ246IDdmZmZmZmZmZDdmMGQ4ZmMKK1NpZ0NndDogMDAwMDAwMDAyODBiMjYwMworQ2FwSW5oOiAwMDAwMDAwMGZmZmZmZWZmCitDYXBQcm06IDAwMDAwMDAwZmZmZmZmZmYKK0NhcEVmZjogMDAwMDAwMDBmZmZmZmVmZgorCitVc2VyIFBTVzogICAgMDcwZGUwMDAgODA0MTQxNDYKK3Rhc2s6IDAwNGI2MDAwIHRzczogMDA0YjYyZDgga3NwOiAwMDRiN2NhOCBwdF9yZWdzOiAwMDRiN2Y2OAorVXNlciBHUFJTOgorMDAwMDA0MDAgIDAwMDAwMDAwICAwMDAwMDAwYiAgN2ZmZmZhOTAKKzAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwNDVkOWY0CiswMDQ1Y2FmYyAgN2ZmZmZhOTAgIDdmZmZmZjE4ICAwMDQ1Y2IwOAorMDAwMTA0MDAgIDgwNDAzOWU4ICA4MDQwM2FmOCAgN2ZmZmY4YjAKK1VzZXIgQUNSUzoKKzAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCiswMDAwMDAwMSAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMAorMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKKzAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCitLZXJuZWwgQmFja0NoYWluICBDYWxsQ2hhaW4gICAgQmFja0NoYWluICBDYWxsQ2hhaW4KKyAgICAgICAwMDRiN2NhOCAgIDgwMDJiZDBjICAgICAwMDRiN2QxOCAgIDgwMDJiOTJjCisgICAgICAgMDA0YjdkYjggICA4MDA1Y2Q1MCAgICAgMDA0YjdlMzggICA4MDA1ZDEyYQorICAgICAgIDAwNGI3ZjA4ICAgODAwMTkxMTQgICAgICAgICAgICAgICAgICAgICAKK1Nob3dpbmcgYW1vbmcgb3RoZXIgdGhpbmdzIG1lbW9yeSB1c2FnZSAmIHN0YXR1cyBvZiBzb21lIHNpZ25hbHMgJgordGhlIHByb2Nlc3NlcydlcyByZWdpc3RlcnMgZnJvbSB0aGUga2VybmVsIHRhc2tfc3RydWN0dXJlCithcyB3ZWxsIGFzIGEgYmFja2NoYWluIHdoaWNoIG1heSBiZSB1c2VmdWwgaWYgYSBwcm9jZXNzIGNyYXNoZXMKK2luIHRoZSBrZXJuZWwgZm9yIHNvbWUgdW5rbm93biByZWFzb24uCisKK1NvbWUgZHJpdmVyIGRlYnVnZ2luZyB0ZWNobmlxdWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGVidWcgZmVhdHVyZQorLS0tLS0tLS0tLS0tLQorU29tZSBvZiBvdXIgZHJpdmVycyBub3cgc3VwcG9ydCBhICJkZWJ1ZyBmZWF0dXJlIiBpbgorL3Byb2MvczM5MGRiZiBzZWUgczM5MGRiZi50eHQgaW4gdGhlIGxpbnV4L0RvY3VtZW50YXRpb24gZGlyZWN0b3J5Citmb3IgbW9yZSBpbmZvLgorZS5nLiAKK3RvIHN3aXRjaCBvbiB0aGUgbGNzICJkZWJ1ZyBmZWF0dXJlIgorZWNobyA1ID4gL3Byb2MvczM5MGRiZi9sY3MvbGV2ZWwKKyYgdGhlbiBhZnRlciB0aGUgZXJyb3Igb2NjdXJyZWQuCitjYXQgL3Byb2MvczM5MGRiZi9sY3Mvc3ByaW50ZiA+L2xvZ2ZpbGUKK3RoZSBsb2dmaWxlIG5vdyBjb250YWlucyBzb21lIGluZm9ybWF0aW9uIHdoaWNoIG1heSBoZWxwCit0ZWNoIHN1cHBvcnQgcmVzb2x2ZSBhIHByb2JsZW0gaW4gdGhlIGZpZWxkLgorCisKKworaGlnaCBsZXZlbCBkZWJ1Z2dpbmcgbmV0d29yayBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lmY29uZmlnIGlzIGEgcXVpdGUgdXNlZnVsIGNvbW1hbmQKK2l0IGdpdmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIG5ldHdvcmsgZHJpdmVycy4KKworSWYgeW91IHN1c3BlY3QgeW91ciBuZXR3b3JrIGRldmljZSBkcml2ZXIgaXMgZGVhZAorb25lIHdheSB0byBjaGVjayBpcyB0eXBlIAoraWZjb25maWcgPG5ldHdvcmsgZGV2aWNlPiAKK2UuZy4gdHIwCitZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZQordHIwICAgICAgIExpbmsgZW5jYXA6MTYvNCBNYnBzIFRva2VuIFJpbmcgKE5ldykgIEhXYWRkciAwMDowNDpBQzoyMDo4RTo0OAorICAgICAgICAgIGluZXQgYWRkcjo5LjE2NC4xODUuMTMyICBCY2FzdDo5LjE2NC4xOTEuMjU1ICBNYXNrOjI1NS4yNTUuMjI0LjAKKyAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBNVUxUSUNBU1QgIE1UVToyMDAwICBNZXRyaWM6MQorICAgICAgICAgIFJYIHBhY2tldHM6MjQ2MTM0IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKKyAgICAgICAgICBUWCBwYWNrZXRzOjUgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCisgICAgICAgICAgY29sbGlzaW9uczowIHR4cXVldWVsZW46MTAwCisKK2lmIHRoZSBkZXZpY2UgZG9lc24ndCBzYXkgdXAKK3RyeQorL2V0Yy9yYy5kL2luaXQuZC9uZXR3b3JrIHN0YXJ0IAorKCB0aGlzIHN0YXJ0cyB0aGUgbmV0d29yayBzdGFjayAmIGhvcGVmdWxseSBjYWxscyBpZmNvbmZpZyB0cjAgdXAgKS4KK2lmY29uZmlnIGxvb2tzIGF0IHRoZSBvdXRwdXQgb2YgL3Byb2MvbmV0L2RldiAmIHByZXNlbnRzIGl0IGluIGEgbW9yZSBwcmVzZW50YWJsZSBmb3JtCitOb3cgcGluZyB0aGUgZGV2aWNlIGZyb20gYSBtYWNoaW5lIGluIHRoZSBzYW1lIHN1Ym5ldC4KK2lmIHRoZSBSWCBwYWNrZXRzIGNvdW50ICYgVFggcGFja2V0cyBjb3VudHMgZG9uJ3QgaW5jcmVtZW50IHlvdSBwcm9iYWJseQoraGF2ZSBwcm9ibGVtcy4KK25leHQgCitjYXQgL3Byb2MvbmV0L2FycAorRG8geW91IHNlZSBhbnkgaGFyZHdhcmUgYWRkcmVzc2VzIGluIHRoZSBjYWNoZSBpZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLgorTmV4dCB0cnkKK3BpbmcgLWMgNSA8YnJvYWRjYXN0X2FkZHI+IGkuZS4gdGhlIEJjYXN0IGZpZWxkIGFib3ZlIGluIHRoZSBvdXRwdXQgb2YKK2lmY29uZmlnLiBEbyB5b3Ugc2VlIGFueSByZXBsaWVzIGZyb20gbWFjaGluZXMgb3RoZXIgdGhhbiB0aGUgbG9jYWwgbWFjaGluZQoraWYgbm90IHlvdSBtYXkgaGF2ZSBwcm9ibGVtcy4gYWxzbyBpZiB0aGUgVFggcGFja2V0cyBjb3VudCBpbiBpZmNvbmZpZworaGFzbid0IGluY3JlbWVudGVkIGVpdGhlciB5b3UgaGF2ZSBzZXJpb3VzIHByb2JsZW1zIGluIHlvdXIgZHJpdmVyIAorKGUuZy4gdGhlIHR4YnVzeSBmaWVsZCBvZiB0aGUgbmV0d29yayBkZXZpY2UgYmVpbmcgc3R1Y2sgb24gKSAKK29yIHlvdSBtYXkgaGF2ZSBtdWx0aXBsZSBuZXR3b3JrIGRldmljZXMgY29ubmVjdGVkLgorCisKK2NoYW5kZXYKKy0tLS0tLS0KK1RoZXJlIGlzIGEgbmV3IGRldmljZSBsYXllciBmb3IgY2hhbm5lbCBkZXZpY2VzLCBzb21lCitkcml2ZXJzIGUuZy4gbGNzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhpcyBsYXllci4KK0lmIHRoZSBkZXZpY2UgdXNlcyB0aGUgY2hhbm5lbCBkZXZpY2UgbGF5ZXIgeW91J2xsIGJlCithYmxlIHRvIGZpbmQgd2hhdCBpbnRlcnJ1cHRzIGl0IHVzZXMgJiB0aGUgY3VycmVudCBzdGF0ZSAKK29mIHRoZSBkZXZpY2UuCitTZWUgdGhlIG1hbnBhZ2UgY2hhbmRldi44ICZ0eXBlIGNhdCAvcHJvYy9jaGFuZGV2IGZvciBtb3JlIGluZm8uCisKKworCitTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitiYXNoL3NoCisKK2Jhc2ggLXggPHNjcmlwdG5hbWU+CitlLmcuIGJhc2ggLXggL3Vzci9iaW4vYmFzaGJ1ZworZGlzcGxheXMgdGhlIGZvbGxvd2luZyBsaW5lcyBhcyBpdCBleGVjdXRlcyB0aGVtLgorKyBNQUNISU5FPWk1ODYKKysgT1M9bGludXgtZ251CisrIENDPWdjYworKyBDRkxBR1M9IC1EUFJPR1JBTT0nYmFzaCcgLURIT1NUVFlQRT0naTU4NicgLURPU1RZUEU9J2xpbnV4LWdudScgLURNQUNIVFlQRT0naTU4Ni1wYy1saW51eC1nbnUnIC1EU0hFTEwgLURIQVZFX0NPTkZJR19IICAgLUkuIC1JLiAtSS4vbGliIC1PMiAtcGlwZQorKyBSRUxFQVNFPTIuMDEKKysgUEFUQ0hMRVZFTD0xCisrIFJFTFNUQVRVUz1yZWxlYXNlCisrIE1BQ0hUWVBFPWk1ODYtcGMtbGludXgtZ251ICAgCisKK3BlcmwgLWQgPHNjcmlwdG5hbWU+IHJ1bnMgdGhlIHBlcmxzY3JpcHQgaW4gYSBmdWxseSBpbnRlcmNhdGl2ZSBkZWJ1Z2dlcgorPGxpa2UgZ2RiPi4KK1R5cGUgJ2gnIGluIHRoZSBkZWJ1Z2dlciBmb3IgaGVscC4KKworZm9yIGRlYnVnZ2luZyBqYXZhIHR5cGUKK2pkYiA8ZmlsZW5hbWU+IGFub3RoZXIgZnVsbHkgaW50ZXJhY3RpdmUgZ2RiIHN0eWxlIGRlYnVnZ2VyLgorJiB0eXBlID8gaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgorCisKKworRHVtcHRvb2wgJiBMY3Jhc2ggKCBsa2NkICkKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitNaWNoYWVsIEhvbHpoZXUgJiBvdGhlcnMgaGVyZSBhdCBJQk0gaGF2ZSBhIGZhaXJseSBtYXR1cmUgcG9ydCBvZiAKK1NHSSdzIGxjcmFzaCB0b29sIHdoaWNoIGFsbG93cyBvbmUgdG8gbG9vayBhdCBrZXJuZWwgc3RydWN0dXJlcyBpbiBhCitydW5uaW5nIGtlcm5lbC4KKworSXQgYWxzbyBjb21wbGVtZW50cyBhIHRvb2wgY2FsbGVkIGR1bXB0b29sIHdoaWNoIGR1bXBzIGFsbCB0aGUga2VybmVsJ3MKK21lbW9yeSBwYWdlcyAmIHJlZ2lzdGVycyB0byBlaXRoZXIgYSB0YXBlIG9yIGEgZGlzay4KK1RoaXMgY2FuIGJlIHVzZWQgYnkgdGVjaCBzdXBwb3J0IG9yIGFuIGFtYml0aW91cyBlbmQgdXNlciBkbworcG9zdCBtb3J0ZW0gZGVidWdnaW5nIG9mIGEgbWFjaGluZSBsaWtlIGdkYiBjb3JlIGR1bXBzLgorCitHb2luZyBpbnRvIGhvdyB0byB1c2UgdGhpcyB0b29sIGluIGRldGFpbCB3aWxsIGJlIGV4cGxhaW5lZAoraW4gb3RoZXIgZG9jdW1lbnRhdGlvbiBzdXBwbGllZCBieSBJQk0gd2l0aCB0aGUgcGF0Y2hlcyAmIHRoZSAKK2xjcmFzaCBob21lcGFnZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvbGtjZC8gJiB0aGUgbGNyYXNoIG1hbnBhZ2UuCisKK0hvdyB0aGV5IHdvcmsKKy0tLS0tLS0tLS0tLS0KK0xjcmFzaCBpcyBhIHBlcmZlY3RseSBub3JtYWwgcHJvZ3JhbSxob3dldmVyLCBpdCByZXF1aXJlcyAyIAorYWRkaXRpb25hbCBmaWxlcywgS2VybnR5cGVzIHdoaWNoIGlzIGJ1aWx0IHVzaW5nIGEgcGF0Y2ggdG8gdGhlIAorbGludXgga2VybmVsIHNvdXJjZXMgaW4gdGhlIGxpbnV4IHJvb3QgZGlyZWN0b3J5ICYgdGhlIFN5c3RlbS5tYXAuCisKK0tlcm50eXBlcyBpcyBhbiBhbiBvYmplY3RmaWxlIHdob3NlIHNvbGUgcHVycG9zZSBpbiBsaWZlCitpcyB0byBwcm92aWRlIHN0YWJzIGRlYnVnIGluZm8gdG8gbGNyYXNoLCB0byBkbyB0aGlzCitLZXJudHlwZXMgaXMgYnVpbHQgZnJvbSBrZXJudHlwZXMuYyB3aGljaCBqdXN0IGluY2x1ZGVzIHRoZSBtb3N0IGNvbW1vbmx5CityZWZlcmVuY2VkIGhlYWRlciBmaWxlcyB1c2VkIHdoZW4gZGVidWdnaW5nLCBsY3Jhc2ggY2FuIHRoZW4gcmVhZCB0aGUKKy5zdGFicyBzZWN0aW9uIG9mIHRoaXMgZmlsZS4KKworRGVidWdnaW5nIGEgbGl2ZSBzeXN0ZW0gaXQgdXNlcyAvZGV2L21lbQorYWx0ZXJuYXRpdmVseSBmb3IgcG9zdCBtb3J0ZW0gZGVidWdnaW5nIGl0IHVzZXMgdGhlIGRhdGEgCitjb2xsZWN0ZWQgYnkgZHVtcHRvb2wuCisKKworCitTeXNScQorPT09PT0KK1RoaXMgaXMgbm93IHN1cHBvcnRlZCBieSBsaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZS4KK1RvIGVuYWJsZSBpdCBkbyBjb21waWxlIHRoZSBrZXJuZWwgd2l0aCAKK0tlcm5lbCBIYWNraW5nIC0+IE1hZ2ljIFN5c1JxIEtleSBFbmFibGVkCitlY2hvICIxIiA+IC9wcm9jL3N5cy9rZXJuZWwvc3lzcnEKK2Fsc28gdHlwZQorZWNobyAiOCIgPi9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrCitUbyBtYWtlIHByaW50ayBvdXRwdXQgZ28gdG8gY29uc29sZS4KK09uIDM5MCBhbGwgY29tbWFuZHMgYXJlIHByZWZpeGVkIHdpdGgKK14tCitlLmcuCiteLXQgd2lsbCBzaG93IHRhc2tzLgorXi0/IG9yIHNvbWUgdW5rbm93biBjb21tYW5kIHdpbGwgZGlzcGxheSBoZWxwLgorVGhlIHN5c3JxIGtleSByZWFkaW5nIGlzIHZlcnkgcGlja3kgKCBJIGhhdmUgdG8gdHlwZSB0aGUga2V5cyBpbiBhbgorIHh0ZXJtIHNlc3Npb24gJiBwYXN0ZSB0aGVtICBpbnRvIHRoZSB4MzI3MCBjb25zb2xlICkKKyYgaXQgbWF5IGJlIHdpc2UgdG8gcHJlZGVmaW5lIHRoZSBrZXlzIGFzIGRlc2NyaWJlZCBpbiB0aGUgVk0gaGludHMgYWJvdmUKKworVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzeW5jaW5nIGRpc2tzIHVubW91bnRpbmcgJiByZWJvb3RpbmcKK2lmIHRoZSBtYWNoaW5lIGdldHMgcGFydGlhbGx5IGh1bmcuCisKK1JlYWQgRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgZm9yIG1vcmUgaW5mbworCitSZWZlcmVuY2VzOgorPT09PT09PT09PT0KK0VudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUgUmVmZXJlbmNlIFN1bW1hcnkKK0VudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24KK0hhcnRtdXQgUGVubmVycyBzMzkwIHN0YWNrIGZyYW1lIHNoZWV0LgorSUJNIE1haW5mcmFtZSBDaGFubmVsIEF0dGFjaG1lbnQgYSB0ZWNobm9sb2d5IGJyaWVmIGZyb20gYSBDSVNDTyB3ZWJwYWdlCitWYXJpb3VzIGJpdHMgb2YgbWFuICYgaW5mbyBwYWdlcyBvZiBMaW51eC4KK0xpbnV4ICYgR0RCIHNvdXJjZS4KK1ZhcmlvdXMgaW5mbyAmIG1hbiBwYWdlcy4KK0NNUyBIZWxwIG9uIHRyYWNpbmcgY29tbWFuZHMuCitMaW51eCBmb3Igcy8zOTAgRWxmIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKK0xpbnV4IGZvciB6L1NlcmllcyBFbGYgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoIEJvdGggSGlnaGx5IFJlY29tbWVuZGVkICkKK3ovQXJjaGl0ZWN0dXJlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIFNBMjItNzgzMi0wMAorRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgU0EyMi03MjA5LTAxICYgdGhlCitFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBTQTIyLTcyMDEtMDUKKworU3BlY2lhbCBUaGFua3MKKz09PT09PT09PT09PT09CitTcGVjaWFsIHRoYW5rcyB0byBOZWFsZSBGZXJndXNvbiB3aG8gbWFpbnRhaW5zIGEgbXVjaAorcHJldHRpZXIgSFRNTCB2ZXJzaW9uIG9mIHRoaXMgcGFnZSBhdAoraHR0cDovL3Blbmd1aW52bS5wcmluY2V0b24uZWR1L25vdGVzLmh0bWwjRGVidWczOTAKK0JvYiBHcmFpbmdlciBTdGVmYW4gQmFkZXIgJiBvdGhlcnMgZm9yIHJlcG9ydGluZyBidWdzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvVEFQRSBiL0RvY3VtZW50YXRpb24vczM5MC9UQVBFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MzlhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvVEFQRQpAQCAtMCwwICsxLDEyMiBAQAorQ2hhbm5lbCBhdHRhY2hlZCBUYXBlIGRldmljZSBkcml2ZXIgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tV0FSTklORy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGRyaXZlciBpcyBjb25zaWRlcmVkIHRvIGJlIEVYUEVSSU1FTlRBTC4gRG8gTk9UIHVzZSBpdCBpbiAKK3Byb2R1Y3Rpb24gZW52aXJvbm1lbnRzLiBGZWVsIGZyZWUgdG8gdGVzdCBpdCBhbmQgcmVwb3J0IHByb2JsZW1zIGJhY2sgdG8gdXMuIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIExJTlVYIGZvciB6U2VyaWVzIHRhcGUgZGV2aWNlIGRyaXZlciBtYW5hZ2VzIGNoYW5uZWwgYXR0YWNoZWQgdGFwZSBkcml2ZXMgCit3aGljaCBhcmUgY29tcGF0aWJsZSB0byBJQk0gMzQ4MCBvciBJQk0gMzQ5MCBtYWduZXRpYyB0YXBlIHN1YnN5c3RlbXMuIFRoaXMgCitpbmNsdWRlcyB2YXJpb3VzIG1vZGVscyBvZiB0aGVzZSBkZXZpY2VzIChmb3IgZXhhbXBsZSB0aGUgMzQ5MEUpLiAKKworCitUYXBlIGRyaXZlciBmZWF0dXJlcyAKKworVGhlIGRldmljZSBkcml2ZXIgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDEyOCB0YXBlIGRldmljZXMuIAorTm8gb2ZmaWNpYWwgTElOVVggZGV2aWNlIG1ham9yIG51bWJlciBpcyBhc3NpZ25lZCB0byB0aGUgelNlcmllcyB0YXBlIGRldmljZSAKK2RyaXZlci4gSXQgYWxsb2NhdGVzIG1ham9yIG51bWJlcnMgZHluYW1pY2FsbHkgYW5kIHJlcG9ydHMgdGhlbSBvbiBzeXN0ZW0gCitzdGFydHVwLiAKK1R5cGljYWxseSBpdCB3aWxsIGdldCBtYWpvciBudW1iZXIgMjU0IGZvciBib3RoIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGZyb250LWVuZCAKK2FuZCB0aGUgYmxvY2sgZGV2aWNlIGZyb250LWVuZC4gCisKK1RoZSB0YXBlIGRldmljZSBkcml2ZXIgbmVlZHMgbm8ga2VybmVsIHBhcmFtZXRlcnMuIEFsbCBzdXBwb3J0ZWQgZGV2aWNlcyAKK3ByZXNlbnQgYXJlIGRldGVjdGVkIG9uIGRyaXZlciBpbml0aWFsaXphdGlvbiBhdCBzeXN0ZW0gc3RhcnR1cCBvciBtb2R1bGUgbG9hZC4KK1RoZSBkZXZpY2VzIGRldGVjdGVkIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIHN1YmNoYW5uZWwgbnVtYmVycy4gVGhlIGRldmljZSB3aXRoIAordGhlIGxvd2VzdCBzdWJjaGFubmVsIG51bWJlciBiZWNvbWVzIGRldmljZSAwLCB0aGUgbmV4dCBvbmUgd2lsbCBiZSBkZXZpY2UgMSAKK2FuZCBzbyBvbi4gCisKKworVGFwZSBjaGFyYWN0ZXIgZGV2aWNlIGZyb250LWVuZCAKKworVGhlIHVzdWFsIHdheSB0byByZWFkIG9yIHdyaXRlIHRvIHRoZSB0YXBlIGRldmljZSBpcyB0aHJvdWdoIHRoZSBjaGFyYWN0ZXIgCitkZXZpY2UgZnJvbnQtZW5kLiBUaGUgelNlcmllcyB0YXBlIGRldmljZSBkcml2ZXIgcHJvdmlkZXMgdHdvIGNoYXJhY3RlciBkZXZpY2VzCitmb3IgZWFjaCBwaHlzaWNhbCBkZXZpY2UgLS0gdGhlIGZpcnN0IG9mIHRoZXNlIHdpbGwgcmV3aW5kIGF1dG9tYXRpY2FsbHkgd2hlbiAKK2l0IGlzIGNsb3NlZCwgdGhlIHNlY29uZCB3aWxsIG5vdCByZXdpbmQgYXV0b21hdGljYWxseS4gCisKK1RoZSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGVzIGFyZSBuYW1lZCAvZGV2L3J0aWJtMCAocmV3aW5kaW5nKSBhbmQgL2Rldi9udGlibTAgCisobm9uLXJld2luZGluZykgZm9yIHRoZSBmaXJzdCBkZXZpY2UsIC9kZXYvcnRpYm0xIGFuZCAvZGV2L250aWJtMSBmb3IgdGhlIAorc2Vjb25kLCBhbmQgc28gb24uIAorCitUaGUgY2hhcmFjdGVyIGRldmljZSBmcm9udC1lbmQgY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIExJTlVYIHRhcGUgZGV2aWNlLiBZb3UgCitjYW4gd3JpdGUgdG8gaXQgYW5kIHJlYWQgZnJvbSBpdCB1c2luZyBMSU5VWCBmYWNpbGl0aWVzIHN1Y2ggYXMgR05VIHRhci4gVGhlIAordG9vbCBtdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGNvbnRyb2wgb3BlcmF0aW9ucywgc3VjaCBhcyByZXdpbmRpbmcgdGhlIHRhcGUgCitvciBza2lwcGluZyBhIGZpbGUuIAorCitNb3N0IExJTlVYIHRhcGUgc29mdHdhcmUgc2hvdWxkIHdvcmsgd2l0aCBlaXRoZXIgdGFwZSBjaGFyYWN0ZXIgZGV2aWNlLiAKKworCitUYXBlIGJsb2NrIGRldmljZSBmcm9udC1lbmQgCisKK1RoZSB0YXBlIGRldmljZSBtYXkgYWxzbyBiZSBhY2Nlc3NlZCBhcyBhIGJsb2NrIGRldmljZSBpbiByZWFkLW9ubHkgbW9kZS4gCitUaGlzIGNvdWxkIGJlIHVzZWQgZm9yIHNvZnR3YXJlIGluc3RhbGxhdGlvbiBpbiB0aGUgc2FtZSB3YXkgYXMgaXQgaXMgdXNlZCB3aXRoIAorb3RoZXIgb3BlcmF0aW9uIHN5c3RlbXMgb24gdGhlIHpTZXJpZXMgcGxhdGZvcm0gKGFuZCBtb3N0IExJTlVYIAorZGlzdHJpYnV0aW9ucyBhcmUgc2hpcHBlZCBvbiBjb21wYWN0IGRpc2sgdXNpbmcgSVNPOTY2MCBmaWxlc3lzdGVtcykuIAorCitPbmUgYmxvY2sgZGV2aWNlIG5vZGUgaXMgcHJvdmlkZWQgZm9yIGVhY2ggcGh5c2ljYWwgZGV2aWNlLiBUaGVzZSBhcmUgbmFtZWQgCisvZGV2L2J0aWJtMCBmb3IgdGhlIGZpcnN0IGRldmljZSwgL2Rldi9idGlibTEgZm9yIHRoZSBzZWNvbmQgYW5kIHNvIG9uLiAKK1lvdSBzaG91bGQgb25seSB1c2UgdGhlIElTTzk2NjAgZmlsZXN5c3RlbSBvbiBMSU5VWCBmb3IgelNlcmllcyB0YXBlcyBiZWNhdXNlIAordGhlIHBoeXNpY2FsIHRhcGUgZGV2aWNlcyBjYW5ub3QgcGVyZm9ybSBmYXN0IHNlZWtzIGFuZCB0aGUgSVNPOTY2MCBzeXN0ZW0gaXMgCitvcHRpbWl6ZWQgZm9yIHRoaXMgc2l0dWF0aW9uLiAKKworCitUYXBlIGJsb2NrIGRldmljZSBleGFtcGxlIAorCitJbiB0aGlzIGV4YW1wbGUgYSB0YXBlIHdpdGggYW4gSVNPOTY2MCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIGZpcnN0IAordGFwZSBkZXZpY2UuIElTTzk2NjAgZmlsZXN5c3RlbSBzdXBwb3J0IG11c3QgYmUgYnVpbHQgaW50byB5b3VyIHN5c3RlbSBrZXJuZWwKK2ZvciB0aGlzLiAKK1RoZSBtdCBjb21tYW5kIGlzIHVzZWQgdG8gaXNzdWUgdGFwZSBjb21tYW5kcyBhbmQgdGhlIG1raXNvZnMgY29tbWFuZCB0byAKK2NyZWF0ZSBhbiBJU085NjYwIGZpbGVzeXN0ZW06IAorCistIGNyZWF0ZSBhIExJTlVYIGRpcmVjdG9yeSAoc29tZWRpcikgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGVzeXN0ZW0gCisgICAgIG1rZGlyIHNvbWVkaXIKKyAgICAgY3AgY29udGVudHMgc29tZWRpciAKKworLSBpbnNlcnQgYSB0YXBlIAorCistIGVuc3VyZSB0aGUgdGFwZSBpcyBhdCB0aGUgYmVnaW5uaW5nIAorICAgICBtdCAtZiAvZGV2L250aWJtMCByZXdpbmQgCisKKy0gc2V0IHRoZSBibG9ja3NpemUgb2YgdGhlIGNoYXJhY3RlciBkcml2ZXIuIFRoZSBibG9ja3NpemUgMjA0OCBieXRlcworICBpcyBjb21tb25seSB1c2VkIG9uIElTTzk2NjAgQ0QtUm9tcworICAgICBtdCAtZiAvZGV2L250aWJtMCBzZXRibGsgMjA0OCAKKworLSB3cml0ZSB0aGUgZmlsZXN5c3RlbSB0byB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgCisgICAgIG1raXNvZnMgLW8gL2Rldi9udGlibTAgc29tZWRpciAKKworLSByZXdpbmQgdGhlIHRhcGUgYWdhaW4gCisgICAgIG10IC1mIC9kZXYvbnRpYm0wIHJld2luZCAKKworLSBOb3cgeW91IGNhbiBtb3VudCB5b3VyIG5ldyBmaWxlc3lzdGVtIGFzIGEgYmxvY2sgZGV2aWNlOiAKKyAgICAgbW91bnQgLXQgaXNvOTY2MCAtbyBybyxibG9jaz0yMDQ4IC9kZXYvYnRpYm0wIC9tbnQgCisKK1RPRE8gTGlzdCAKKworICAgLSBEcml2ZXIgaGFzIHRvIGJlIHN0YWJpbGl6ZWQgc3RpbGwKKworQlVHUyAKKworVGhpcyBkcml2ZXIgaXMgY29uc2lkZXJlZCBCRVRBLCB3aGljaCBtZWFucyBzb21lIHdlYWtuZXNzZXMgbWF5IHN0aWxsCitiZSBpbiBpdC4KK0lmIGFuIGVycm9yIG9jY3VycyB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGUgY29kZSB5b3Ugd2lsbCBnZXQgYSAKK3NlbnNlLWRhdGEgZHVtcC5JbiB0aGF0IGNhc2UgcGxlYXNlIGRvIHRoZSBmb2xsb3dpbmc6IAorCisxLiBzZXQgdGhlIHRhcGUgZHJpdmVyIGRlYnVnIGxldmVsIHRvIG1heGltdW06IAorICAgICBlY2hvIDYgPi9wcm9jL3MzOTBkYmYvdGFwZS9sZXZlbCAKKworMi4gcmUtcGVyZm9ybSB0aGUgYWN0aW9ucyB3aGljaCBwcm9kdWNlZCB0aGUgYnVnLiAoSG9wZWZ1bGx5IHRoZSBidWcgd2lsbCAKKyAgIHJlYXBwZWFyLikgCisKKzMuIGdldCBhIHNuYXBzaG90IGZyb20gdGhlIGRlYnVnLWZlYXR1cmU6IAorICAgICBjYXQgL3Byb2MvczM5MGRiZi90YXBlL2hleF9hc2NpaSA+c29tZWZpbGUgCisKKzQuIE5vdyBwdXQgdGhlIHNuYXBzaG90IHRvZ2V0aGVyIHdpdGggYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgc2l0dWF0aW9uIAorICAgdGhhdCBsZWQgdG8gdGhlIGJ1ZzogCisgLSBXaGljaCB0b29sIGRpZCB5b3UgdXNlPyAKKyAtIFdoaWNoIGhhcmR3YXJlIGRvIHlvdSBoYXZlPyAKKyAtIFdhcyB5b3VyIHRhcGUgdW5pdCBvbmxpbmU/IAorIC0gSXMgaXQgYSBzaGFyZWQgdGFwZSB1bml0PyAKKworNS4gU2VuZCBhbiBlbWFpbCB3aXRoIHlvdXIgYnVnIHJlcG9ydCB0bzogCisgICAgIG1haWx0bzpMaW51eDM5MEBkZS5pYm0uY29tIAorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9jZHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzOTcxNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9jZHMudHh0CkBAIC0wLDAgKzEsNTEzIEBACitMaW51eCBmb3IgUy8zOTAgYW5kIHpTZXJpZXMKKworQ29tbW9uIERldmljZSBTdXBwb3J0IChDRFMpCitEZXZpY2UgRHJpdmVyIEkvTyBTdXBwb3J0IFJvdXRpbmVzCisKK0F1dGhvcnMgOiBJbmdvIEFkbHVuZworCSAgQ29ybmVsaWEgSHVjaworCitDb3B5cmlnaHQsIElCTSBDb3JwLiAxOTk5LTIwMDIKKworSW50cm9kdWN0aW9uCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjb21tb24gZGV2aWNlIHN1cHBvcnQgcm91dGluZXMgZm9yIExpbnV4LzM5MC4KK0RpZmZlcmVudCB0aGFuIG90aGVyIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIEVTQS8zOTAgaGFzIGRlZmluZWQgYSB1bmlmaWVkCitJL08gYWNjZXNzIG1ldGhvZC4gVGhpcyBnaXZlcyByZWxpZWYgdG8gdGhlIGRldmljZSBkcml2ZXJzIGFzIHRoZXkgZG9uJ3QKK2hhdmUgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBidXMgdHlwZXMsIHBvbGxpbmcgdmVyc3VzIGludGVycnVwdAorcHJvY2Vzc2luZywgc2hhcmVkIHZlcnN1cyBub24tc2hhcmVkIGludGVycnVwdCBwcm9jZXNzaW5nLCBETUEgdmVyc3VzIHBvcnQKK0kvTyAoUElPKSwgYW5kIG90aGVyIGhhcmR3YXJlIGZlYXR1cmVzIG1vcmUuIEhvd2V2ZXIsIHRoaXMgaW1wbGllcyB0aGF0CitlaXRoZXIgZXZlcnkgc2luZ2xlIGRldmljZSBkcml2ZXIgbmVlZHMgdG8gaW1wbGVtZW50IHRoZSBoYXJkd2FyZSBJL08KK2F0dGFjaG1lbnQgZnVuY3Rpb25hbGl0eSBpdHNlbGYsIG9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHByb3ZpZGVzIGZvciBhCit1bmlmaWVkIG1ldGhvZCB0byBhY2Nlc3MgdGhlIGhhcmR3YXJlLCBwcm92aWRpbmcgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQKK2V2ZXJ5IHNpbmdsZSBkZXZpY2UgZHJpdmVyIHdvdWxkIGhhdmUgdG8gcHJvdmlkZSBpdHNlbGYuCisKK1RoZSBkb2N1bWVudCBkb2VzIG5vdCBpbnRlbmQgdG8gZXhwbGFpbiB0aGUgRVNBLzM5MCBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgaW4KK2V2ZXJ5IGRldGFpbC5UaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBFU0EvMzkwIFByaW5jaXBsZXMgb2YKK09wZXJhdGlvbiBtYW51YWwgKElCTSBGb3JtLiBOby4gU0EyMi03MjAxKS4KKworSW4gb3JkZXIgdG8gYnVpbGQgY29tbW9uIGRldmljZSBzdXBwb3J0IGZvciBFU0EvMzkwIEkvTyBpbnRlcmZhY2VzLCBhCitmdW5jdGlvbmFsIGxheWVyIHdhcyBpbnRyb2R1Y2VkIHRoYXQgcHJvdmlkZXMgZ2VuZXJpYyBJL08gYWNjZXNzIG1ldGhvZHMgdG8KK3RoZSBoYXJkd2FyZS4gCisKK1RoZSBjb21tb24gZGV2aWNlIHN1cHBvcnQgbGF5ZXIgY29tcHJpc2VzIHRoZSBJL08gc3VwcG9ydCByb3V0aW5lcyBkZWZpbmVkIAorYmVsb3cuIFNvbWUgb2YgdGhlbSBpbXBsZW1lbnQgY29tbW9uIExpbnV4IGRldmljZSBkcml2ZXIgaW50ZXJmYWNlcywgd2hpbGUgCitzb21lIG9mIHRoZW0gYXJlIEVTQS8zOTAgcGxhdGZvcm0gc3BlY2lmaWMuCisKK05vdGU6CitJbiBvcmRlciB0byB3cml0ZSBhIGRyaXZlciBmb3IgUy8zOTAsIHlvdSBhbHNvIG5lZWQgdG8gbG9vayBpbnRvIHRoZSBpbnRlcmZhY2UKK2Rlc2NyaWJlZCBpbiBEb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dC4KKworTm90ZSBmb3IgcG9ydGluZyBkcml2ZXJzIGZyb20gMi40OgorVGhlIG1ham9yIGNoYW5nZXMgYXJlOgorKiBUaGUgZnVuY3Rpb25zIHVzZSBhIGNjd19kZXZpY2UgaW5zdGVhZCBvZiBhbiBpcnEgKHN1YmNoYW5uZWwpLgorKiBBbGwgZHJpdmVycyBtdXN0IGRlZmluZSBhIGNjd19kcml2ZXIgKHNlZSBkcml2ZXItbW9kZWwudHh0KSBhbmQgdGhlIGFzc29jaWF0ZWQKKyAgZnVuY3Rpb25zLgorKiByZXF1ZXN0X2lycSgpIGFuZCBmcmVlX2lycSgpIGFyZSBubyBsb25nZXIgZG9uZSBieSB0aGUgZHJpdmVyLgorKiBUaGUgb3Blcl9oYW5kbGVyIGlzIChraW5kb2YpIHJlcGxhY2VkIGJ5IHRoZSBwcm9iZSgpIGFuZCBzZXRfb25saW5lKCkgZnVuY3Rpb25zCisgIG9mIHRoZSBjY3dfZHJpdmVyLgorKiBUaGUgbm90X29wZXJfaGFuZGxlciBpcyAoa2luZG9mKSByZXBsYWNlZCBieSB0aGUgcmVtb3ZlKCkgYW5kIHNldF9vZmZsaW5lKCkKKyAgZnVuY3Rpb25zIG9mIHRoZSBjY3dfZHJpdmVyLgorKiBUaGUgY2hhbm5lbCBkZXZpY2UgbGF5ZXIgaXMgZ29uZS4KKyogVGhlIGludGVycnVwdCBoYW5kbGVycyBtdXN0IGJlIGFkYXB0ZWQgdG8gdXNlIGEgY2N3X2RldmljZSBhcyBhcmd1bWVudC4KKyAgTW9yZW92ZXIsIHRoZXkgZG9uJ3QgcmV0dXJuIGEgZGV2c3RhdCwgYnV0IGFuIGlyYi4KKyogQmVmb3JlIGluaXRpYXRpbmcgYW4gaW8sIHRoZSBvcHRpb25zIG11c3QgYmUgc2V0IHZpYSBjY3dfZGV2aWNlX3NldF9vcHRpb25zKCkuCisKK3JlYWRfZGV2X2NoYXJzKCkJCisgICByZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MKKyAgIAorcmVhZF9jb25mX2RhdGEoKQorICAgcmVhZCBjb25maWd1cmF0aW9uIGRhdGEuCisKK2Njd19kZXZpY2VfZ2V0X2NpdygpCisgICBnZXQgY29tbWFuZHMgZnJvbSBleHRlbmRlZCBzZW5zZSBkYXRhLgorCitjY3dfZGV2aWNlX3N0YXJ0KCkJCisgICBpbml0aWF0ZSBhbiBJL08gcmVxdWVzdC4KKworY2N3X2RldmljZV9yZXN1bWUoKQorICAgcmVzdW1lIGNoYW5uZWwgcHJvZ3JhbSBleGVjdXRpb24uCisKK2Njd19kZXZpY2VfaGFsdCgpCQorICAgdGVybWluYXRlIHRoZSBjdXJyZW50IEkvTyByZXF1ZXN0IHByb2Nlc3NlZCBvbiB0aGUgZGV2aWNlLgorCitkb19JUlEoKQkKKyAgIGdlbmVyaWMgaW50ZXJydXB0IHJvdXRpbmUuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBpbnRlcnJ1cHQgZW50cnkKKyAgIHJvdXRpbmUgd2hlbmV2ZXIgYW4gSS9PIGludGVycnVwdCBpcyBwcmVzZW50ZWQgdG8gdGhlIHN5c3RlbS4gVGhlIGRvX0lSUSgpCisgICByb3V0aW5lIGRldGVybWluZXMgdGhlIGludGVycnVwdCBzdGF0dXMgYW5kIGNhbGxzIHRoZSBkZXZpY2Ugc3BlY2lmaWMKKyAgIGludGVycnVwdCBoYW5kbGVyIGFjY29yZGluZyB0byB0aGUgcnVsZXMgKGZsYWdzKSBkZWZpbmVkIGR1cmluZyBJL08gcmVxdWVzdAorICAgaW5pdGlhdGlvbiB3aXRoIGRvX0lPKCkuCisKK1RoZSBuZXh0IGNoYXB0ZXJzIGRlc2NyaWJlIHRoZSBmdW5jdGlvbnMgb3RoZXIgdGhhbiBkb19JUlEoKSBpbiBtb3JlIGRldGFpbHMuCitUaGUgZG9fSVJRKCkgaW50ZXJmYWNlIGlzIG5vdCBkZXNjcmliZWQsIGFzIGl0IGlzIGNhbGxlZCBmcm9tIHRoZSBMaW51eC8zOTAKK2ZpcnN0IGxldmVsIGludGVycnVwdCBoYW5kbGVyIG9ubHkgYW5kIGRvZXMgbm90IGNvbXByaXNlIGEgZGV2aWNlIGRyaXZlcgorY2FsbGFibGUgaW50ZXJmYWNlLiBJbnN0ZWFkLCB0aGUgZnVuY3Rpb25hbCBkZXNjcmlwdGlvbiBvZiBkb19JTygpIGFsc28KK2Rlc2NyaWJlcyB0aGUgaW5wdXQgdG8gdGhlIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgaGFuZGxlci4KKworTm90ZTogQWxsIGV4cGxhbmF0aW9ucyBhcHBseSBhbHNvIHRvIHRoZSA2NCBiaXQgYXJjaGl0ZWN0dXJlIHMzOTB4LgorCisKK0NvbW1vbiBEZXZpY2UgU3VwcG9ydCAoQ0RTKSBmb3IgTGludXgvMzkwIERldmljZSBEcml2ZXJzCisKK0dlbmVyYWwgSW5mb3JtYXRpb24KKworVGhlIGZvbGxvd2luZyBjaGFwdGVycyBkZXNjcmliZSB0aGUgSS9PIHJlbGF0ZWQgaW50ZXJmYWNlIHJvdXRpbmVzIHRoZQorTGludXgvMzkwIGNvbW1vbiBkZXZpY2Ugc3VwcG9ydCAoQ0RTKSBwcm92aWRlcyB0byBhbGxvdyBmb3IgZGV2aWNlIHNwZWNpZmljCitkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9uIHRoZSBJQk0gRVNBLzM5MCBoYXJkd2FyZSBwbGF0Zm9ybS4gVGhvc2UgaW50ZXJmYWNlcworaW50ZW5kIHRvIHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgZXZlcnkgZGV2aWNlIGRyaXZlcgoraW1wbGVtZW50YWlvbiB0byBhbGxvdyB0byBkcml2ZSBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSBvbiB0aGUgRVNBLzM5MAorcGxhdGZvcm0uIFNvbWUgb2YgdGhlIGludGVyZmFjZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gTGludXgvMzkwIGFuZCBzb21lCitvZiB0aGVtIGNhbiBiZSBmb3VuZCBvbiBvdGhlciBMaW51eCBwbGF0Zm9ybXMgaW1wbGVtZW50YXRpb25zIHRvby4KK01pc2NlbGxhbmVvdXMgZnVuY3Rpb24gcHJvdG90eXBlcywgZGF0YSBkZWNsYXJhdGlvbnMsIGFuZCBtYWNybyBkZWZpbml0aW9ucworY2FuIGJlIGZvdW5kIGluIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgQyBoZWFkZXIgZmlsZQorbGludXgvaW5jbHVkZS9hc20tczM5MC9pcnEuaC4KKworT3ZlcnZpZXcgb2YgQ0RTIGludGVyZmFjZSBjb25jZXB0cworCitEaWZmZXJlbnQgdG8gb3RoZXIgaGFyZHdhcmUgcGxhdGZvcm1zLCB0aGUgRVNBLzM5MCBhcmNoaXRlY3R1cmUgZG9lc24ndCBkZWZpbmUKK2ludGVycnVwdCBsaW5lcyBtYW5hZ2VkIGJ5IGEgc3BlY2lmaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgYW5kIGJ1cyBzeXN0ZW1zCit0aGF0IG1heSBvciBtYXkgbm90IGFsbG93IGZvciBzaGFyZWQgaW50ZXJydXB0cywgRE1BIHByb2Nlc3NpbmcsIGV0Yy4uIEluc3RlYWQsCit0aGUgRVNBLzM5MCBhcmNoaXRlY3R1cmUgaGFzIGltcGxlbWVudGVkIGEgc28gY2FsbGVkIGNoYW5uZWwgc3Vic3lzdGVtLCB0aGF0Citwcm92aWRlcyBhIHVuaWZpZWQgdmlldyBvZiB0aGUgZGV2aWNlcyBwaHlzaWNhbGx5IGF0dGFjaGVkIHRvIHRoZSBzeXN0ZW1zLgorVGhvdWdoIHRoZSBFU0EvMzkwIGhhcmR3YXJlIHBsYXRmb3JtIGtub3dzIGFib3V0IGEgaHVnZSB2YXJpZXR5IG9mIGRpZmZlcmVudAorcGVyaXBoZXJhbCBhdHRhY2htZW50cyBsaWtlIGRpc2sgZGV2aWNlcyAoYWthLiBEQVNEcyksIHRhcGVzLCBjb21tdW5pY2F0aW9uCitjb250cm9sbGVycywgZXRjLiB0aGV5IGNhbiBhbGwgYnkgYWNjZXNzZWQgYnkgYSB3ZWxsIGRlZmluZWQgYWNjZXNzIG1ldGhvZCBhbmQKK3RoZXkgYXJlIHByZXNlbnRpbmcgSS9PIGNvbXBsZXRpb24gYSB1bmlmaWVkIHdheSA6IEkvTyBpbnRlcnJ1cHRpb25zLiBFdmVyeQorc2luZ2xlIGRldmljZSBpcyB1bmlxdWVseSBpZGVudGlmaWVkIHRvIHRoZSBzeXN0ZW0gYnkgYSBzbyBjYWxsZWQgc3ViY2hhbm5lbCwKK3doZXJlIHRoZSBFU0EvMzkwIGFyY2hpdGVjdHVyZSBhbGxvd3MgZm9yIDY0ayBkZXZpY2VzIGJlIGF0dGFjaGVkLgorCitMaW51eCwgaG93ZXZlciwgd2FzIGZpcnN0IGJ1aWx0IG9uIHRoZSBJbnRlbCBQQyBhcmNoaXRlY3R1cmUsIHdpdGggaXRzIHR3bworY2FzY2FkZWQgODI1OSBwcm9ncmFtbWFibGUgaW50ZXJydXB0IGNvbnRyb2xsZXJzIChQSUNzKSwgdGhhdCBhbGxvdyBmb3IgYQorbWF4aW11bSBvZiAxNSBkaWZmZXJlbnQgaW50ZXJydXB0IGxpbmVzLiBBbGwgZGV2aWNlcyBhdHRhY2hlZCB0byBzdWNoIGEgc3lzdGVtCitzaGFyZSB0aG9zZSAxNSBpbnRlcnJ1cHQgbGV2ZWxzLiBEZXZpY2VzIGF0dGFjaGVkIHRvIHRoZSBJU0EgYnVzIHN5c3RlbSBtdXN0Citub3Qgc2hhcmUgaW50ZXJydXB0IGxldmVscyAoYWthLiBJUlFzKSwgYXMgdGhlIElTQSBidXMgYmFzZXMgb24gZWRnZSB0cmlnZ2VyZWQKK2ludGVycnVwdHMuIE1DQSwgRUlTQSwgUENJIGFuZCBvdGhlciBidXMgc3lzdGVtcyBiYXNlIG9uIGxldmVsIHRyaWdnZXJlZAoraW50ZXJydXB0cywgYW5kIHRoZXJld2l0aCBhbGxvdyBmb3Igc2hhcmVkIElSUXMuIEhvd2V2ZXIsIGlmIG11bHRpcGxlIGRldmljZXMKK3ByZXNlbnQgdGhlaXIgaGFyZHdhcmUgc3RhdHVzIGJ5IHRoZSBzYW1lIChzaGFyZWQpIElSUSwgdGhlIG9wZXJhdGluZyBzeXN0ZW0KK2hhcyB0byBjYWxsIGV2ZXJ5IHNpbmdsZSBkZXZpY2UgZHJpdmVyIHJlZ2lzdGVyZWQgb24gdGhpcyBJUlEgaW4gb3JkZXIgdG8KK2RldGVybWluZSB0aGUgZGV2aWNlIGRyaXZlciBvd25pbmcgdGhlIGRldmljZSB0aGF0IHJhaXNlZCB0aGUgaW50ZXJydXB0LgorCitJbiBvcmRlciBub3QgdG8gaW50cm9kdWNlIGEgbmV3IEkvTyBjb25jZXB0IHRvIHRoZSBjb21tb24gTGludXggY29kZSwKK0xpbnV4LzM5MCBwcmVzZXJ2ZXMgdGhlIElSUSBjb25jZXB0IGFuZCBzZW1hbnRpY2FsbHkgbWFwcyB0aGUgRVNBLzM5MAorc3ViY2hhbm5lbHMgdG8gTGludXggYXMgSVJRcy4gVGhpcyBhbGxvd3MgTGludXgvMzkwIHRvIHN1cHBvcnQgdXAgdG8gNjRrCitkaWZmZXJlbnQgSVJRcywgdW5pcXVlbHkgcmVwcmVzZW50aWcgYSBzaW5nbGUgZGV2aWNlIGVhY2guCisKK1VwIHRvIGtlcm5lbCAyLjQsIExpbnV4LzM5MCB1c2VkIHRvIHByb3ZpZGUgaW50ZXJmYWNlcyB2aWEgdGhlIElSUSAoc3ViY2hhbm5lbCkuCitGb3IgaW50ZXJuYWwgdXNlIG9mIHRoZSBjb21tb24gSS9PIGxheWVyLCB0aGVzZSBhcmUgc3RpbGwgdGhlcmUuIEhvd2V2ZXIsIAorZGV2aWNlIGRyaXZlcnMgc2hvdWxkIHVzZSB0aGUgbmV3IGNhbGxpbmcgaW50ZXJmYWNlIHZpYSB0aGUgY2N3X2RldmljZSBvbmx5LgorCitEdXJpbmcgaXRzIHN0YXJ0dXAgdGhlIExpbnV4LzM5MCBzeXN0ZW0gY2hlY2tzIGZvciBwZXJpcGhlcmFsIGRldmljZXMuIEVhY2gKK29mIHRob3NlIGRldmljZXMgaXMgdW5pcXVlbHkgZGVmaW5lZCBieSBhIHNvIGNhbGxlZCBzdWJjaGFubmVsIGJ5IHRoZSBFU0EvMzkwCitjaGFubmVsIHN1YnN5c3RlbS4gV2hpbGUgdGhlIHN1YmNoYW5uZWwgbnVtYmVycyBhcmUgc3lzdGVtIGdlbmVyYXRlZCwgZWFjaAorc3ViY2hhbm5lbCBhbHNvIHRha2VzIGEgdXNlciBkZWZpbmVkIGF0dHJpYnV0ZSwgdGhlIHNvIGNhbGxlZCBkZXZpY2UgbnVtYmVyLgorQm90aCBzdWJjaGFubmVsIG51bWJlciBhbmQgZGV2aWNlIG51bWJlciBjYW4gbm90IGV4Y2VlZCA2NTUzNS4gRHVyaW5nIGRyaXZlcmZzCitpbml0aWFsaXNhdGlvbiwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGNvbnRyb2wgdW5pdCB0eXBlIGFuZCBkZXZpY2UgdHlwZXMgdGhhdCAKK2ltcGx5IHNwZWNpZmljIEkvTyBjb21tYW5kcyAoY2hhbm5lbCBjb21tYW5kIHdvcmRzIC0gQ0NXcykgaW4gb3JkZXIgdG8gb3BlcmF0ZQordGhlIGRldmljZSBhcmUgZ2F0aGVyZWQuIERldmljZSBkcml2ZXJzIGNhbiByZXRyaWV2ZSB0aGlzIHNldCBvZiBoYXJkd2FyZQoraW5mb3JtYXRpb24gZHVyaW5nIHRoZWlyIGluaXRpYWxpemF0aW9uIHN0ZXAgdG8gcmVjb2duaXplIHRoZSBkZXZpY2VzIHRoZXkKK3N1cHBvcnQgdXNpbmcgdGhlIGluZm9ybWF0aW9uIHNhdmVkIGluIHRoZSBzdHJ1Y3QgY2N3X2RldmljZSBnaXZlbiB0byB0aGVtLgorVGhpcyBtZXRob2RzIGltcGxpZXMgdGhhdCBMaW51eC8zOTAgZG9lc24ndCByZXF1aXJlIHRvIHByb2JlIGZvciBmcmVlIChub3QKK2FybWVkKSBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcyAoSVJRcykgdG8gZHJpdmUgaXRzIGRldmljZXMgd2l0aC4gV2hlcmUKK2FwcGxpY2FibGUsIHRoZSBkZXZpY2UgZHJpdmVycyBjYW4gdXNlIHRoZSByZWFkX2Rldl9jaGFycygpIHRvIHJldHJpZXZlIGRldmljZQorY2hhcmFjdGVyaXN0aWNzLiBUaGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgaGF2aW5nIHRvIHJlcXVlc3QgZGV2aWNlIG93bmVyc2hpcAorcHJldmlvdXNseS4KKworSW4gb3JkZXIgdG8gYWxsb3cgZm9yIGVhc3kgSS9PIGluaXRpYXRpb24gdGhlIENEUyBsYXllciBwcm92aWRlcyBhCitjY3dfZGV2aWNlX3N0YXJ0KCkgaW50ZXJmYWNlIHRoYXQgdGFrZXMgYSBkZXZpY2Ugc3BlY2lmaWMgY2hhbm5lbCBwcm9ncmFtIChvbmUKK29yIG1vcmUgQ0NXcykgYXMgaW5wdXQgc2V0cyB1cCB0aGUgcmVxdWlyZWQgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvbnRyb2wgYmxvY2tzCithbmQgaW5pdGlhdGVzIGFuIEkvTyByZXF1ZXN0IG9uIGJlaGFsZiBvZiB0aGUgZGV2aWNlIGRyaXZlci4gVGhlCitjY3dfZGV2aWNlX3N0YXJ0KCkgcm91dGluZSBhbGxvd3MgdG8gc3BlY2lmeSB3aGV0aGVyIGl0IGV4cGVjdHMgdGhlIENEUyBsYXllcgordG8gbm90aWZ5IHRoZSBkZXZpY2UgZHJpdmVyIGZvciBldmVyeSBpbnRlcnJ1cHQgaXQgb2JzZXJ2ZXMsIG9yIHdpdGggZmluYWwgc3RhdHVzCitvbmx5LiBTZWUgY2N3X2RldmljZV9zdGFydCgpIGZvciBtb3JlIGRldGFpbHMuIEEgZGV2aWNlIGRyaXZlciBtdXN0IG5ldmVyIGlzc3VlCitFU0EvMzkwIEkvTyBjb21tYW5kcyBpdHNlbGYsIGJ1dCBtdXN0IHVzZSB0aGUgTGludXgvMzkwIENEUyBpbnRlcmZhY2VzIGluc3RlYWQuCisKK0ZvciBsb25nIHJ1bm5pbmcgSS9PIHJlcXVlc3QgdG8gYmUgY2FuY2VsZWQsIHRoZSBDRFMgbGF5ZXIgcHJvdmlkZXMgdGhlCitjY3dfZGV2aWNlX2hhbHQoKSBmdW5jdGlvbi4gU29tZSBkZXZpY2VzIHJlcXVpcmUgdG8gaW5pdGlhbGx5IGlzc3VlIGEgSEFMVAorU1VCQ0hBTk5FTCAoSFNDSCkgY29tbWFuZCB3aXRob3V0IGhhdmluZyBwZW5kaW5nIEkvTyByZXF1ZXN0cy4gVGhpcyBmdW5jdGlvbiBpcworYWxzbyBjb3ZlcmVkIGJ5IGNjd19kZXZpY2VfaGFsdCgpLgorCisKK3JlYWRfZGV2X2NoYXJzKCkgLSBSZWFkIERldmljZSBDaGFyYWN0ZXJpc3RpY3MKKworVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGNoYXJhY3RlcmlzdGljcyBmb3IgdGhlIGRldmljZSBzcGVjaWZpZWQuCisKK1RoZSBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBjYWxsZWQgd2l0aCBhbiBpcnEgaGFuZGxlciBpbiBwbGFjZTsgdGhhdCBpcywKK2F0IGVhcmxpZXN0IGR1cmluZyBzZXRfb25saW5lKCkgcHJvY2Vzc2luZy4KKworV2hpbGUgdGhlIHJlcXVlc3QgaXMgcHJvY2VzZWQgc3luY2hyb25vdXNseSwgdGhlIGRldmljZSBpbnRlcnJ1cHQKK2hhbmRsZXIgaXMgY2FsbGVkIGZvciBmaW5hbCBlbmRpbmcgc3RhdHVzLiBJbiBjYXNlIG9mIGVycm9yIHNpdHVhdGlvbnMgdGhlCitpbnRlcnJ1cHQgaGFuZGxlciBtYXkgcmVjb3ZlciBhcHByb3ByaWF0ZWx5LiBUaGUgZGV2aWNlIGlycSBoYW5kbGVyIGNhbgorcmVjb2duaXplIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdHMgYnkgdGhlIGludGVycnVwdGlvbiBwYXJhbWV0ZXIgYmUKKzB4MDA1MjQ0NDMuVGhlIGNjd19kZXZpY2UgbXVzdCBub3QgYmUgbG9ja2VkIHByaW9yIHRvIGNhbGxpbmcgcmVhZF9kZXZfY2hhcnMoKS4KKworVGhlIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZW5hYmxlZCBvciBkaXNhYmxlZC4KKworaW50IHJlYWRfZGV2X2NoYXJzKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB2b2lkICoqYnVmZmVyLCBpbnQgbGVuZ3RoICk7CisKK2NkZXYgICAtIHRoZSBjY3dfZGV2aWNlIHRoZSBpbmZvcm1hdGlvbiBpcyByZXF1ZXN0ZWQgZm9yLgorYnVmZmVyIC0gcG9pbnRlciB0byBhIGJ1ZmZlciBwb2ludGVyLiBUaGUgYnVmZmVyIHBvaW50ZXIgaXRzZWxmCisgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2YWxpZCBidWZmZXIgYXJlYS4KK2xlbmd0aCAtIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHByb3ZpZGVkLgorCitUaGUgcmVhZF9kZXZfY2hhcnMoKSBmdW5jdGlvbiByZXR1cm5zIDoKKworICAgICAgMCAtIHN1Y2Nlc3NmdWwgY29tcGxldGlvbgorLUVOT0RFViAtIGNkZXYgaW52YWxpZAorLUVJTlZBTCAtIGFuIGludmFsaWQgcGFyYW1ldGVyIHdhcyBkZXRlY3RlZCwgb3IgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgZWFybHkuCistRUJVU1kgIC0gYW4gaXJyZWNvdmVyYWJsZSBJL08gZXJyb3Igb2NjdXJyZWQgb3IgdGhlIGRldmljZSBpcyBub3QKKyAgICAgICAgICBvcGVyYXRpb25hbC4KKworCityZWFkX2NvbmZfZGF0YSgpIC0gUmVhZCBDb25maWd1cmF0aW9uIERhdGEKKworUmV0cmlldmUgdGhlIGRldmljZSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbiBkYXRhLiBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgeW91ciAKK2RldmljZSBkZXBlbmRlbnQgSS9PIGNvbW1hbmRzIGZvciB0aGUgZGV2aWNlIHNwZWNpZmljIGxheW91dCBvZiB0aGUgbm9kZSAKK2Rlc2NyaXB0b3IgZWxlbWVudHMuIAorCitUaGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIHdpdGggYW4gaXJxIGhhbmRsZXIgaW4gcGxhY2U7IHRoYXQgaXMsCithdCBlYXJsaWVzdCBkdXJpbmcgc2V0X29ubGluZSgpIHByb2Nlc3NpbmcuCisKK1RoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGJ1dCB0aGUgZGV2aWNlIG11c3Qgbm90IGJlCitsb2NrZWQKKworaW50IHJlYWRfY29uZl9kYXRhKHN0cnVjdCBjY3dfZGV2aWNlLCB2b2lkICoqYnVmZmVyLCBpbnQgKmxlbmd0aCwgX191OCBscG0pOworCitjZGV2ICAgLSB0aGUgY2N3X2RldmljZSB0aGUgZGF0YSBpcyByZXF1ZXN0ZWQgZm9yLgorYnVmZmVyIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBwb2ludGVyLiBUaGUgcmVhZF9jb25mX2RhdGEoKSByb3V0aW5lCisgICAgICAgICB3aWxsIGFsbG9jYXRlIGEgYnVmZmVyIGFuZCBpbml0aWFsaXplIHRoZSBidWZmZXIgcG9pbnRlcgorICAgICAgICAgYWNjb3JkaW5nbHkuIEl0J3MgdGhlIGRldmljZSBkcml2ZXIncyByZXNwb25zaWJpbGl0eSB0bworICAgICAgICAgcmVsZWFzZSB0aGUga2VybmVsIG1lbW9yeSBpZiBubyBsb25nZXIgbmVlZGVkLiAKK2xlbmd0aCAtIExlbmd0aCBvZiB0aGUgYnVmZmVyIGFsbG9jYXRlZCBhbmQgcmV0cmlldmVkLgorbHBtICAgIC0gTG9naWNhbCBwYXRoIG1hc2sgdG8gYmUgdXNlZCBmb3IgcmV0cmlldmluZyB0aGUgZGF0YS4gSWYKKyAgICAgICAgIHplcm8gdGhlIGRhdGEgaXMgcmV0cmlldmVkIG9uIHRoZSBuZXh0IHBhdGggYXZhaWxhYmxlLgorCitUaGUgcmVhZF9jb25mX2RhdGEoKSBmdW5jdGlvbiByZXR1cm5zIDoKKyAgICAgICAgICAwIC0gU3VjY2Vzc2Z1bCBjb21wbGV0aW9uCistRU5PREVWICAgICAtIGNkZXYgaW52YWxpZC4KKy1FSU5WQUwgICAgIC0gQW4gaW52YWxpZCBwYXJhbWV0ZXIgd2FzIGRldGVjdGVkLCBvciB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBlYXJseS4KKy1FSU8gICAgICAgIC0gQW4gaXJyZWNvdmVyYWJsZSBJL08gZXJyb3Igb2NjdXJyZWQgb3IgdGhlIGRldmljZSBpcworICAgICAgICAgICAgICBub3Qgb3BlcmF0aW9uYWwuCistRU5PTUVNICAgICAtIFRoZSByZWFkX2NvbmZfZGF0YSgpIHJvdXRpbmUgY291bGRuJ3Qgb2J0YWluIHN0b3JhZ2UuCistRU9QTk9UU1VQUCAtIFRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHRoZSByZWFkIGNvbmZpZ3VyYXRpb24gCisgICAgICAgICAgICAgIGRhdGEgY29tbWFuZC4KKworCitnZXRfY2l3KCkgLSBnZXQgY29tbWFuZCBpbmZvcm1hdGlvbiB3b3JkCisKK1RoaXMgY2FsbCBlbmFibGVzIGEgZGV2aWNlIGRyaXZlciB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydGVkIGNvbW1hbmRzCitmcm9tIHRoZSBleHRlbmRlZCBTZW5zZUlEIGRhdGEuCisKK3N0cnVjdCBjaXcgKgorY2N3X2RldmljZV9nZXRfY2l3KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBfX3UzMiBjbWQpOworCitjZGV2IC0gVGhlIGNjd19kZXZpY2UgZm9yIHdoaWNoIHRoZSBjb21tYW5kIGlzIHRvIGJlIHJldHJpZXZlZC4KK2NtZCAgLSBUaGUgY29tbWFuZCB0eXBlIHRvIGJlIHJldHJpZXZlZC4KKworY2N3X2RldmljZV9nZXRfY2l3KCkgcmV0dXJuczoKK05VTEwgICAgLSBObyBleHRlbmRlZCBkYXRhIGF2YWlsYWJsZSwgaW52YWxpZCBkZXZpY2Ugb3IgY29tbWFuZCBub3QgZm91bmQuCishTlVMTCAgIC0gVGhlIGNvbW1hbmQgcmVxdWVzdGVkLgorCisKK2Njd19kZXZpY2Vfc3RhcnQoKSAtIEluaXRpYXRlIEkvTyBSZXF1ZXN0CisKK1RoZSBjY3dfZGV2aWNlX3N0YXJ0KCkgcm91dGluZXMgaXMgdGhlIEkvTyByZXF1ZXN0IGZyb250LWVuZCBwcm9jZXNzb3IuIEFsbAorZGV2aWNlIGRyaXZlciBJL08gcmVxdWVzdHMgbXVzdCBiZSBpc3N1ZWQgdXNpbmcgdGhpcyByb3V0aW5lLiBBIGRldmljZSBkcml2ZXIKK211c3Qgbm90IGlzc3VlIEVTQS8zOTAgSS9PIGNvbW1hbmRzIGl0c2VsZi4gSW5zdGVhZCB0aGUgY2N3X2RldmljZV9zdGFydCgpCityb3V0aW5lIHByb3ZpZGVzIGFsbCBpbnRlcmZhY2VzIHJlcXVpcmVkIHRvIGRyaXZlIGFyYml0cmFyeSBkZXZpY2VzLgorCitUaGlzIGRlc2NyaXB0aW9uIGFsc28gY292ZXJzIHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gcGFzc2VkIHRvIHRoZSBkZXZpY2UKK2RyaXZlcidzIGludGVycnVwdCBoYW5kbGVyIGFzIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgcnVsZXMgKGZsYWdzKSBkZWZpbmVkCit3aXRoIHRoZSBhc3NvY2lhdGVkIEkvTyByZXF1ZXN0IHdoZW4gY2FsbGluZyBjY3dfZGV2aWNlX3N0YXJ0KCkuCisKK2ludCBjY3dfZGV2aWNlX3N0YXJ0KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQkgICAgIHN0cnVjdCBjY3cxICpjcGEsCisJCSAgICAgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAorCQkgICAgIF9fdTggbHBtLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCitjZGV2ICAgICAgICAgOiBjY3dfZGV2aWNlIHRoZSBJL08gaXMgZGVzdGluZWQgZm9yCitjcGEgICAgICAgICAgOiBsb2dpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgY2hhbm5lbCBwcm9ncmFtCit1c2VyX2ludHBhcm0gOiB1c2VyIHNwZWNpZmljIGludGVycnVwdCBpbmZvcm1hdGlvbjsgd2lsbCBiZSBwcmVzZW50ZWQKKwkgICAgICAgYmFjayB0byB0aGUgZGV2aWNlIGRyaXZlcidzIGludGVycnVwdCBoYW5kbGVyLiBBbGxvd3MgYQorICAgICAgICAgICAgICAgZGV2aWNlIGRyaXZlciB0byBhc3NvY2lhdGUgdGhlIGludGVycnVwdCB3aXRoIGEKKyAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgSS9PIHJlcXVlc3QuCitscG0gICAgICAgICAgOiBkZWZpbmVzIHRoZSBjaGFubmVsIHBhdGggdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBJL08KKyAgICAgICAgICAgICAgIHJlcXVlc3QuIEEgdmFsdWUgb2YgMCB3aWxsIG1ha2UgY2lvIHVzZSB0aGUgb3BtLgorZmxhZyAgICAgICAgIDogZGVmaW5lcyB0aGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBmb3IgSS9PIHByb2Nlc3NpbmcKKworUG9zc2libGUgZmxhZyB2YWx1ZXMgYXJlIDoKKworRE9JT19BTExPV19TVVNQRU5EICAgICAgIC0gY2hhbm5lbCBwcm9ncmFtIG1heSBiZWNvbWUgc3VzcGVuZGVkCitET0lPX0RFTllfUFJFRkVUQ0ggICAgICAgLSBkb24ndCBhbGxvdyBmb3IgQ0NXIHByZWZldGNoOyB1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGltcGxpZXMgdGhlIGNoYW5uZWwgcHJvZ3JhbSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lIG1vZGlmaWVkCitET0lPX1NVUFBSRVNTX0lOVEVSICAgICAtIGRvbid0IGNhbGwgdGhlIGhhbmRsZXIgb24gaW50ZXJtZWRpYXRlIHN0YXR1cworCitUaGUgY3BhIHBhcmFtZXRlciBwb2ludHMgdG8gdGhlIGZpcnN0IGZvcm1hdCAxIENDVyBvZiBhIGNoYW5uZWwgcHJvZ3JhbSA6CisKK3N0cnVjdCBjY3cxIHsKKyAgICAgIF9fdTggIGNtZF9jb2RlOy8qIGNvbW1hbmQgY29kZSAqLworICAgICAgX191OCAgZmxhZ3M7ICAgLyogZmxhZ3MsIGxpa2UgSURBIGFkZHJlc3NpbmcsIGV0Yy4gKi8KKyAgICAgIF9fdTE2IGNvdW50OyAgIC8qIGJ5dGUgY291bnQgKi8KKyAgICAgIF9fdTMyIGNkYTsgICAgIC8qIGRhdGEgYWRkcmVzcyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoOCkpKTsKKword2l0aCB0aGUgZm9sbG93aW5nIENDVyBmbGFncyB2YWx1ZXMgZGVmaW5lZCA6CisKK0NDV19GTEFHX0RDICAgICAgICAtIGRhdGEgY2hhaW5pbmcKK0NDV19GTEFHX0NDICAgICAgICAtIGNvbW1hbmQgY2hhaW5pbmcKK0NDV19GTEFHX1NMSSAgICAgICAtIHN1cHByZXNzIGluY29ycmN0IGxlbmd0aAorQ0NXX0ZMQUdfU0tJUCAgICAgIC0gc2tpcAorQ0NXX0ZMQUdfUENJICAgICAgIC0gUENJCitDQ1dfRkxBR19JREEgICAgICAgLSBpbmRpcmVjdCBhZGRyZXNzaW5nCitDQ1dfRkxBR19TVVNQRU5EICAgLSBzdXNwZW5kCisKKworVmlhIGNjd19kZXZpY2Vfc2V0X29wdGlvbnMoKSwgdGhlIGRldmljZSBkcml2ZXIgbWF5IHNwZWNpZnkgdGhlIGZvbGxvd2luZworb3B0aW9ucyBmb3IgdGhlIGRldmljZToKKworRE9JT19FQVJMWV9OT1RJRklDQVRJT04gIC0gYWxsb3cgZm9yIGVhcmx5IGludGVycnVwdCBub3RpZmljYXRpb24KK0RPSU9fUkVQT1JUX0FMTCAgICAgICAgICAtIHJlcG9ydCBhbGwgaW50ZXJydXB0IGNvbmRpdGlvbnMKKworCitUaGUgY2N3X2RldmljZV9zdGFydCgpIGZ1bmN0aW9uIHJldHVybnMgOgorCisgICAgICAwIC0gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9yIHJlcXVlc3Qgc3VjY2Vzc2Z1bGx5IGluaXRpYXRlZAorLUVCVVNZICAtIFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IHByb2Nlc3NpbmcgYSBwcmV2aW91cyBJL08gcmVxdWVzdCwgb3IgdGhlciBpcworICAgICAgICAgIGEgc3RhdHVzIHBlbmRpbmcgYXQgdGhlIGRldmljZS4KKy1FTk9ERVYgLSBjZGV2IGlzIGludmFsaWQsIHRoZSBkZXZpY2UgaXMgbm90IG9wZXJhdGlvbmFsIG9yIHRoZSBjY3dfZGV2aWNlIGlzCisgICAgICAgICAgbm90IG9ubGluZS4KKworV2hlbiB0aGUgSS9PIHJlcXVlc3QgY29tcGxldGVzLCB0aGUgQ0RTIGZpcnN0IGxldmVsIGludGVycnVwdCBoYW5kbGVyIHdpbGwKK2FjY3VtYWxhdGUgdGhlIHN0YXR1cyBpbiBhIHN0cnVjdCBpcmIgYW5kIHRoZW4gY2FsbCB0aGUgZGV2aWNlIGludGVycnVwdCBoYW5kbGVyLgorVGhlIGludHBhcm0gZmllbGQgd2lsbCBjb250YWluIHRoZSB2YWx1ZSB0aGUgZGV2aWNlIGRyaXZlciBoYXMgYXNzb2NpYXRlZCB3aXRoIGEgCitwYXJ0aWN1bGFyIEkvTyByZXF1ZXN0LiBJZiBhIHBlbmRpbmcgZGV2aWNlIHN0YXR1cyB3YXMgcmVjb2duaXplZCwgCitpbnRwYXJtIHdpbGwgYmUgc2V0IHRvIDAgKHplcm8pLiBUaGlzIG1heSBoYXBwZW4gZHVyaW5nIEkvTyBpbml0aWF0aW9uIG9yIGRlbGF5ZWQKK2J5IGFuIGFsZXJ0IHN0YXR1cyBub3RpZmljYXRpb24uIEluIGFueSBjYXNlIHRoaXMgc3RhdHVzIGlzIG5vdCByZWxhdGVkIHRvIHRoZQorY3VycmVudCAobGFzdCkgSS9PIHJlcXVlc3QuIEluIGNhc2Ugb2YgYSBkZWxheWVkIHN0YXR1cyBub3RpZmljYXRpb24gbm8gc3BlY2lhbAoraW50ZXJydXB0IHdpbGwgYmUgcHJlc2VudGVkIHRvIGluZGljYXRlIEkvTyBjb21wbGV0aW9uIGFzIHRoZSBJL08gcmVxdWVzdCB3YXMKK25ldmVyIHN0YXJ0ZWQsIGV2ZW4gdGhvdWdoIGNjd19kZXZpY2Vfc3RhcnQoKSByZXR1cm5lZCB3aXRoIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworSWYgdGhlIGNvbmN1cnJlbnQgc2Vuc2UgZmxhZyBpbiB0aGUgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIGlyYiBpcyBzZXQsIHRoZQorZmllbGQgaXJiLT5zY3N3LmNvdW50IGRlc2NyaWJlcyB0aGUgbnVtZXIgb2YgZGV2aWNlIHNwZWNpZmljIHNlbnNlIGJ5dGVzCithdmFpbGFibGUgaW4gdGhlIGV4dGVuZGVkIGNvbnRyb2wgd29yZCBpcmItPnNjc3cuZWN3WzBdLiBObyBkZXZpY2Ugc2Vuc2luZyBieQordGhlIGRldmljZSBkcml2ZXIgaXRzZWxmIGlzIHJlcXVpcmVkLgorCitUaGUgZGV2aWNlIGludGVycnVwdCBoYW5kbGVyIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyB0byBpbnZlc3RpZ2F0ZQordGhlIHByaW1hcnkgdW5pdCBjaGVjayBzb3VyY2UgY29kZWQgaW4gc2Vuc2UgYnl0ZSAwIDoKKworU05TMF9DTURfUkVKRUNUICAgICAgICAgMHg4MAorU05TMF9JTlRFUlZFTlRJT05fUkVRICAgMHg0MAorU05TMF9CVVNfT1VUX0NIRUNLICAgICAgMHgyMAorU05TMF9FUVVJUE1FTlRfQ0hFQ0sgICAgMHgxMAorU05TMF9EQVRBX0NIRUNLICAgICAgICAgMHgwOAorU05TMF9PVkVSUlVOICAgICAgICAgICAgMHgwNAorU05TMF9JTkNPTVBMX0RPTUFJTiAgICAgMHgwMQorCitEZXBlbmRpbmcgb24gdGhlIGRldmljZSBzdGF0dXMsIG11bHRpcGxlIG9mIHRob3NlIHZhbHVlcyBtYXkgYmUgc2V0IHRvZ2V0aGVyLgorUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2Ugc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworVGhlIGlyYi0+c2Nzdy5jc3RhdCBmaWVsZCBwcm92aWRlcyB0aGUgKGFjY3VtdWxhdGVkKSBzdWJjaGFubmVsIHN0YXR1cyA6CisKK1NDSE5fU1RBVF9QQ0kgICAgICAgICAgICAtIHByb2dyYW0gY29udHJvbGxlZCBpbnRlcnJ1cHQKK1NDSE5fU1RBVF9JTkNPUlJfTEVOICAgICAtIGluY29ycmVjdCBsZW5ndGgKK1NDSE5fU1RBVF9QUk9HX0NIRUNLICAgICAtIHByb2dyYW0gY2hlY2sKK1NDSE5fU1RBVF9QUk9UX0NIRUNLICAgICAtIHByb3RlY3Rpb24gY2hlY2sKK1NDSE5fU1RBVF9DSE5fREFUQV9DSEsgICAtIGNoYW5uZWwgZGF0YSBjaGVjaworU0NITl9TVEFUX0NITl9DVFJMX0NISyAgIC0gY2hhbm5lbCBjb250cm9sIGNoZWNrCitTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyAgLSBpbnRlcmZhY2UgY29udHJvbCBjaGVjaworU0NITl9TVEFUX0NIQUlOX0NIRUNLICAgIC0gY2hhaW5pbmcgY2hlY2sKKworVGhlIGlyYi0+c2Nzdy5kc3RhdCBmaWVsZCBwcm92aWRlcyB0aGUgKGFjY3VtdWxhdGVkKSBkZXZpY2Ugc3RhdHVzIDoKKworREVWX1NUQVRfQVRURU5USU9OICAgLSBhdHRlbnRpb24KK0RFVl9TVEFUX1NUQVRfTU9EICAgIC0gc3RhdHVzIG1vZGlmaWVyCitERVZfU1RBVF9DVV9FTkQgICAgICAtIGNvbnRyb2wgdW5pdCBlbmQKK0RFVl9TVEFUX0JVU1kgICAgICAgIC0gYnVzeQorREVWX1NUQVRfQ0hOX0VORCAgICAgLSBjaGFubmVsIGVuZAorREVWX1NUQVRfREVWX0VORCAgICAgLSBkZXZpY2UgZW5kCitERVZfU1RBVF9VTklUX0NIRUNLICAtIHVuaXQgY2hlY2sKK0RFVl9TVEFUX1VOSVRfRVhDRVAgIC0gdW5pdCBleGNlcHRpb24KKworUGxlYXNlIHNlZSB0aGUgRVNBLzM5MCBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBtYW51YWwgZm9yIGRldGFpbHMgb24gdGhlCitpbmRpdmlkdWFsIGZsYWcgbWVhbmluZ3MuCisKK1VzYWdlIE5vdGVzIDoKKworUHJpb3IgdG8gY2FsbCBjY3dfZGV2aWNlX3N0YXJ0KCkgdGhlIGRldmljZSBkcml2ZXIgbXVzdCBhc3N1cmUgZGlzYWJsZWQgc3RhdGUsCitpLmUuIHRoZSBJL08gbWFzayB2YWx1ZSBpbiB0aGUgUFNXIG11c3QgYmUgZGlzYWJsZWQuIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZAorYnkgY2FsbGluZyBsb2NhbF9zYXZlX2ZsYWdzKCBmbGFncykuIFRoZSBjdXJyZW50IFBTVyBmbGFncyBhcmUgcHJlc2VydmVkIGFuZAorY2FuIGJlIHJlc3RvcmVkIGJ5IGxvY2FsX2lycV9yZXN0b3JlKCBmbGFncykgYXQgYSBsYXRlciB0aW1lLgorCitJZiB0aGUgZGV2aWNlIGRyaXZlciB2aW9sYXRlcyB0aGlzIHJ1bGUgd2hpbGUgcnVubmluZyBpbiBhIHVuaS1wcm9jZXNzb3IKK2Vudmlyb25tZW50IGFuIGludGVycnVwdCBtaWdodCBiZSBwcmVzZW50ZWQgcHJpb3IgdG8gdGhlIGNjd19kZXZpY2Vfc3RhcnQoKQorcm91dGluZSByZXR1cm5pbmcgdG8gdGhlIGRldmljZSBkcml2ZXIgbWFpbiBwYXRoLiBJbiB0aGlzIGNhc2Ugd2Ugd2lsbCBlbmQgaW4gYQorZGVhZGxvY2sgc2l0dWF0aW9uIGFzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIHRyeSB0byBvYnRhaW4gdGhlIGlycQorbG9jayB0aGUgZGV2aWNlIGRyaXZlciBzdGlsbCBvd25zIChzZWUgYmVsb3cpICEKKworVGhlIGRyaXZlciBtdXN0IGFzc3VyZSB0byBob2xkIHRoZSBkZXZpY2Ugc3BlY2lmaWMgbG9jay4gVGhpcyBjYW4gYmUKK2FjY29tcGxpc2hlZCBieQorCisoaSkgIHNwaW5fbG9jayhnZXRfY2N3ZGV2X2xvY2soY2RldikpLCBvcgorKGlpKSBzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2RldiksIGZsYWdzKQorCitPcHRpb24gKGkpIHNob3VsZCBiZSB1c2VkIGlmIHRoZSBjYWxsaW5nIHJvdXRpbmUgaXMgcnVubmluZyBkaXNhYmxlZCBmb3IKK0kvTyBpbnRlcnJ1cHRzIChzZWUgYWJvdmUpIGFscmVhZHkuIE9wdGlvbiAoaWkpIG9idGFpbnMgdGhlIGRldmljZSBnYXRlIHVuZAorcHV0cyB0aGUgQ1BVIGludG8gSS9PIGRpc2FibGVkIHN0YXRlIGJ5IHByZXNlcnZpbmcgdGhlIGN1cnJlbnQgUFNXIGZsYWdzLgorCitUaGUgZGV2aWNlIGRyaXZlciBpcyBhbGxvd2VkIHRvIGlzc3VlIHRoZSBuZXh0IGNjd19kZXZpY2Vfc3RhcnQoKSBjYWxsIGZyb20KK3dpdGhpbiBpdHMgaW50ZXJydXB0IGhhbmRsZXIgYWxyZWFkeS4gSXQgaXMgbm90IHJlcXVpcmVkIHRvIHNjaGVkdWxlIGEKK2JvdHRvbS1oYWxmLCB1bmxlc3MgYW4gbm9uIGRldGVybWluaXN0aWNseSBsb25nIHJ1bm5pbmcgZXJyb3IgcmVjb3ZlcnkgcHJvY2VkdXJlCitvciBzaW1pbGFyIG5lZWRzIHRvIGJlIHNjaGVkdWxlZC4gRHVyaW5nIEkvTyBwcm9jZXNzaW5nIHRoZSBMaW51eC8zOTAgZ2VuZXJpYworSS9PIGRldmljZSBkcml2ZXIgc3VwcG9ydCBoYXMgYWxyZWFkeSBvYnRhaW5lZCB0aGUgSVJRIGxvY2ssIGkuZS4gdGhlIGhhbmRsZXIKK211c3Qgbm90IHRyeSB0byBvYnRhaW4gaXQgYWdhaW4gd2hlbiBjYWxsaW5nIGNjd19kZXZpY2Vfc3RhcnQoKSBvciB3ZSBlbmQgaW4gYQorZGVhZGxvY2sgc2l0dWF0aW9uIQorCitJZiBhIGRldmljZSBkcml2ZXIgcmVsaWVzIG9uIGFuIEkvTyByZXF1ZXN0IHRvIGJlIGNvbXBsZXRlZCBwcmlvciB0byBzdGFydCB0aGUKK25leHQgaXQgY2FuIHJlZHVjZSBJL08gcHJvY2Vzc2luZyBvdmVyaGVhZCBieSBjaGFpbmluZyBhIE5vT3AgSS9PIGNvbW1hbmQKK0NDV19DTURfTk9PUCB0byB0aGUgZW5kIG9mIHRoZSBzdWJtaXR0ZWQgQ0NXIGNoYWluLiBUaGlzIHdpbGwgZm9yY2UgQ2hhbm5lbC1FbmQKK2FuZCBEZXZpY2UtRW5kIHN0YXR1cyB0byBiZSBwcmVzZW50ZWQgdG9nZXRoZXIsIHdpdGggYSBzaW5nbGUgaW50ZXJydXB0LgorSG93ZXZlciwgdGhpcyBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUgYXMgaXQgaW1wbGllcyB0aGUgY2hhbm5lbCB3aWxsIHJlbWFpbgorYnVzeSwgbm90IGJlaW5nIGFibGUgdG8gcHJvY2VzcyBJL08gcmVxdWVzdHMgZm9yIG90aGVyIGRldmljZXMgb24gdGhlIHNhbWUKK2NoYW5uZWwuIFRoZXJlZm9yZSBlLmcuIHJlYWQgY29tbWFuZHMgc2hvdWxkIG5ldmVyIHVzZSB0aGlzIHRlY2huaXF1ZSwgYXMgdGhlCityZXN1bHQgd2lsbCBiZSBwcmVzZW50ZWQgYnkgYSBzaW5nbGUgaW50ZXJydXB0IGFueXdheS4KKworSW4gb3JkZXIgdG8gbWluaW1pemUgSS9PIG92ZXJoZWFkLCBhIGRldmljZSBkcml2ZXIgc2hvdWxkIHVzZSB0aGUKK0RPSU9fUkVQT1JUX0FMTCAgb25seSBpZiB0aGUgZGV2aWNlIGNhbiByZXBvcnQgaW50ZXJtZWRpYXRlIGludGVycnVwdAoraW5mb3JtYXRpb24gcHJpb3IgdG8gZGV2aWNlLWVuZCB0aGUgZGV2aWNlIGRyaXZlciB1cmdlbnRseSByZWxpZXMgb24uIEluIHRoaXMKK2Nhc2UgYWxsIEkvTyBpbnRlcnJ1cHRpb25zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIGRldmljZSBkcml2ZXIgdW50aWwgZmluYWwKK3N0YXR1cyBpcyByZWNvZ25pemVkLgorCitJZiBhIGRldmljZSBpcyBhYmxlIHRvIHJlY292ZXIgZnJvbSBhc3luY2hyb25vc2x5IHByZXNlbnRlZCBJL08gZXJyb3JzLCBpdCBjYW4KK3BlcmZvcm0gb3ZlcmxhcHBpbmcgSS9PIHVzaW5nIHRoZSBET0lPX0VBUkxZX05PVElGSUNBVElPTiBmbGFnLiBXaGlsZSBzb21lCitkZXZpY2VzIGFsd2F5cyByZXBvcnQgY2hhbm5lbC1lbmQgYW5kIGRldmljZS1lbmQgdG9nZXRoZXIsIHdpdGggYSBzaW5nbGUKK2ludGVycnVwdCwgb3RoZXJzIHByZXNlbnQgcHJpbWFyeSBzdGF0dXMgKGNoYW5uZWwtZW5kKSB3aGVuIHRoZSBjaGFubmVsIGlzCityZWFkeSBmb3IgdGhlIG5leHQgSS9PIHJlcXVlc3QgYW5kIHNlY29uZGFyeSBzdGF0dXMgKGRldmljZS1lbmQpIHdoZW4gdGhlIGRhdGEKK3RyYW5zbWlzc2lvbiBoYXMgYmVlbiBjb21wbGV0ZWQgYXQgdGhlIGRldmljZS4KKworQWJvdmUgZmxhZyBhbGxvd3MgdG8gZXhwbG9pdCB0aGlzIGZlYXR1cmUsIGUuZy4gZm9yIGNvbW11bmljYXRpb24gZGV2aWNlcyB0aGF0CitjYW4gaGFuZGxlIGxvc3QgZGF0YSBvbiB0aGUgbmV0d29yayB0byBhbGxvdyBmb3IgZW5oYW5jZWQgSS9PIHByb2Nlc3NpbmcuCisKK1VubGVzcyB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gYXQgYW55IHRpbWUgcHJlc2VudHMgYSBzZWNvbmRhcnkgc3RhdHVzIGludGVycnVwdCwKK2V4cGxvaXRpbmcgdGhpcyBmZWF0dXJlIHdpbGwgY2F1c2Ugb25seSBwcmltYXJ5IHN0YXR1cyBpbnRlcnJ1cHRzIHRvIGJlCitwcmVzZW50ZWQgdG8gdGhlIGRldmljZSBkcml2ZXIgd2hpbGUgb3ZlcmxhcHBpbmcgSS9PIGlzIHBlcmZvcm1lZC4gV2hlbiBhCitzZWNvbmRhcnkgc3RhdHVzIHdpdGhvdXQgZXJyb3IgKGFsZXJ0IHN0YXR1cykgaXMgcHJlc2VudGVkLCB0aGlzIGluZGljYXRlcworc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGZvciBhbGwgb3ZlcmxhcHBpbmcgY2N3X2RldmljZV9zdGFydCgpIHJlcXVlc3RzIHRoYXQgaGF2ZQorYmVlbiBpc3N1ZWQgc2luY2UgdGhlIGxhc3Qgc2Vjb25kYXJ5IChmaW5hbCkgc3RhdHVzLgorCitDaGFubmVsIHByb2dyYW1zIHRoYXQgaW50ZW5kIHRvIHNldCB0aGUgc3VzcGVuZCBmbGFnIG9uIGEgY2hhbm5lbCBjb21tYW5kIHdvcmQgCisoQ0NXKSAgbXVzdCBzdGFydCB0aGUgSS9PIG9wZXJhdGlvbiB3aXRoIHRoZSBET0lPX0FMTE9XX1NVU1BFTkQgb3B0aW9uIG9yIHRoZSAKK3N1c3BlbmQgZmxhZyB3aWxsIGNhdXNlIGEgY2hhbm5lbCBwcm9ncmFtIGNoZWNrLiBBdCB0aGUgdGltZSB0aGUgY2hhbm5lbCBwcm9ncmFtIAorYmVjb21lcyBzdXNwZW5kZWQgYW4gaW50ZXJtZWRpYXRlIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY2hhbm5lbCAKK3N1YnN5c3RlbS4KKworY2N3X2RldmljZV9yZXN1bWUoKSAtIFJlc3VtZSBDaGFubmVsIFByb2dyYW0gRXhlY3V0aW9uIAorCitJZiBhIGRldmljZSBkcml2ZXIgY2hvb3NlcyB0byBzdXNwZW5kIHRoZSBjdXJyZW50IGNoYW5uZWwgcHJvZ3JhbSBleGVjdXRpb24gYnkgCitzZXR0aW5nIHRoZSBDQ1cgc3VzcGVuZCBmbGFnIG9uIGEgcGFydGljdWxhciBDQ1csIHRoZSBjaGFubmVsIHByb2dyYW0gZXhlY3V0aW9uIAoraXMgc3VzcGVuZGVkLiBJbiBvcmRlciB0byByZXN1bWUgY2hhbm5lbCBwcm9ncmFtIGV4ZWN1dGlvbiB0aGUgQ0lPIGxheWVyIAorcHJvdmlkZXMgdGhlIGNjd19kZXZpY2VfcmVzdW1lKCkgcm91dGluZS4gCisKK2ludCBjY3dfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CisKK2NkZXYgLSBjY3dfZGV2aWNlIHRoZSByZXN1bWUgb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCBmb3IKKworVGhlIHJlc3VtZV9JTygpIGZ1bmN0aW9uIHJldHVybnM6CisKKyAgICAgICAgMCAgLSBzdXNwZW5kZWQgY2hhbm5lbCBwcm9ncmFtIGlzIHJlc3VtZWQKKy1FQlVTWSAgICAgLSBzdGF0dXMgcGVuZGluZworLUVOT0RFViAgICAtIGNkZXYgaW52YWxpZCBvciBub3Qtb3BlcmF0aW9uYWwgc3ViY2hhbm5lbCAKKy1FSU5WQUwgICAgLSByZXN1bWUgZnVuY3Rpb24gbm90IGFwcGxpY2FibGUgIAorLUVOT1RDT05OICAtIHRoZXJlIGlzIG5vIEkvTyByZXF1ZXN0IHBlbmRpbmcgZm9yIGNvbXBsZXRpb24gCisKK1VzYWdlIE5vdGVzOgorUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSBjY3dfZGV2aWNlX3N0YXJ0KCkgdXNhZ2Ugbm90ZXMgZm9yIG1vcmUgZGV0YWlscyBvbgorc3VzcGVuZGVkIGNoYW5uZWwgcHJvZ3JhbXMuCisKK2Njd19kZXZpY2VfaGFsdCgpIC0gSGFsdCBJL08gUmVxdWVzdCBQcm9jZXNzaW5nCisKK1NvbWV0aW1lcyBhIGRldmljZSBkcml2ZXIgbWlnaHQgbmVlZCBhIHBvc3NpYmlsaXR5IHRvIHN0b3AgdGhlIHByb2Nlc3Npbmcgb2YKK2EgbG9uZy1ydW5uaW5nIGNoYW5uZWwgcHJvZ3JhbSBvciB0aGUgZGV2aWNlIG1pZ2h0IHJlcXVpcmUgdG8gaW5pdGlhbGx5IGlzc3VlCithIGhhbHQgc3ViY2hhbm5lbCAoSFNDSCkgSS9PIGNvbW1hbmQuIEZvciB0aG9zZSBwdXJwb3NlcyB0aGUgY2N3X2RldmljZV9oYWx0KCkKK2NvbW1hbmQgaXMgcHJvdmlkZWQuCisKK2ludCBjY3dfZGV2aWNlX2hhbHQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50cGFybSk7CisKK2NkZXYgICAgOiBjY3dfZGV2aWNlIHRoZSBoYWx0IG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgZm9yCitpbnRwYXJtIDogaW50ZXJydXB0aW9uIHBhcmFtZXRlcjsgdmFsdWUgaXMgb25seSB1c2VkIGlmIG5vIEkvTworICAgICAgICAgIGlzIG91dHN0YW5kaW5nLCBvdGhlcndpc2UgdGhlIGludHBhcm0gYXNzb2NpYXRlZCB3aXRoCisgICAgICAgICAgdGhlIEkvTyByZXF1ZXN0IGlzIHJldHVybmVkCisKK1RoZSBjY3dfZGV2aWNlX2hhbHQoKSBmdW5jdGlvbiByZXR1cm5zIDoKKworICAgICAgMCAtIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvciByZXF1ZXN0IHN1Y2Nlc3NmdWxseSBpbml0aWF0ZWQKKy1FQlVTWSAgLSB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseSBidXN5LCBvciBzdGF0dXMgcGVuZGluZy4KKy1FTk9ERVYgLSBjZGV2IGludmFsaWQuCistRUlOVkFMIC0gVGhlIGRldmljZSBpcyBub3Qgb3BlcmF0aW9uYWwgb3IgdGhlIGNjdyBkZXZpY2UgaXMgbm90IG9ubGluZS4KKworVXNhZ2UgTm90ZXMgOgorCitBIGRldmljZSBkcml2ZXIgbWF5IHdyaXRlIGEgbmV2ZXItZW5kaW5nIGNoYW5uZWwgcHJvZ3JhbSBieSB3cml0aW5nIGEgY2hhbm5lbAorcHJvZ3JhbSB0aGF0IGF0IGl0cyBlbmQgbG9vcHMgYmFjayB0byBpdHMgYmVnaW5uaW5nIGJ5IG1lYW5zIG9mIGEgdHJhbnNmZXIgaW4KK2NoYW5uZWwgKFRJQykgICBjb21tYW5kIChDQ1dfQ01EX1RJQykuIFVzdWFsbHkgdGhpcyBpcyBwZXJmb3JtZWQgYnkgbmV0d29yaworZGV2aWNlIGRyaXZlcnMgYnkgc2V0dGluZyB0aGUgUENJIENDVyBmbGFnIChDQ1dfRkxBR19QQ0kpLiBPbmNlIHRoaXMgQ0NXIGlzCitleGVjdXRlZCBhIHByb2dyYW0gY29udHJvbGxlZCBpbnRlcnJ1cHQgKFBDSSkgaXMgZ2VuZXJhdGVkLiBUaGUgZGV2aWNlIGRyaXZlcgorY2FuIHRoZW4gcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSBhY3Rpb24uIFByaW9yIHRvIGludGVycnVwdCBvZiBhbiBvdXRzdGFuZGluZworcmVhZCB0byBhIG5ldHdvcmsgZGV2aWNlICh3aXRoIG9yIHdpdGhvdXQgUENJIGZsYWcpIGEgY2N3X2RldmljZV9oYWx0KCkKK2lzIHJlcXVpcmVkIHRvIGVuZCB0aGUgcGVuZGluZyBvcGVyYXRpb24uCisKKworTWlzY2VsbGFuZW91cyBTdXBwb3J0IFJvdXRpbmVzCisKK1RoaXMgY2hhcHRlciBkZXNjcmliZXMgdmFyaW91cyByb3V0aW5lcyB0byBiZSB1c2VkIGluIGEgTGludXgvMzkwIGRldmljZQorZHJpdmVyIHByb2dyYW1taW5nIGVudmlyb25tZW50LgorCitnZXRfY2N3ZGV2X2xvY2soKQorCitHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBzcGVjaWZpYyBsb2NrLiBUaGlzIGlzIHRoZW4gdXNlZCBpbgorc3Bpbl9sb2NrKCkgLyBzcGluX3VubG9jaygpIGNhbGxzLgorCisKK19fdTggY2N3X2RldmljZV9nZXRfcGF0aF9tYXNrKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKKworR2V0IHRoZSBtYXNrIG9mIHRoZSBwYXRoIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIGNkZXYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvY29uZmlnMzI3MC5zaCBiL0RvY3VtZW50YXRpb24vczM5MC9jb25maWczMjcwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWUyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY29uZmlnMzI3MC5zaApAQCAtMCwwICsxLDc2IEBACisjIS9iaW4vc2gKKyMKKyMgY29uZmlnMzI3MCAtLSBBdXRvY29uZmlndXJlIC9kZXYvMzI3MC8qIGFuZCAvZXRjL2luaXR0YWIKKyMKKyMgICAgICAgVXNhZ2U6CisjICAgICAgICAgICAgICAgY29uZmlnMzI3MAorIworIyAgICAgICBPdXRwdXQ6CisjICAgICAgICAgICAgICAgL3RtcC9ta2RldjMyNzAKKyMKKyMgICAgICAgT3BlcmF0aW9uOgorIyAgICAgICAgICAgICAgIDEuIFJ1biB0aGlzIHNjcmlwdAorIyAgICAgICAgICAgICAgIDIuIFJ1biB0aGUgc2NyaXB0IGl0IHByb2R1Y2VzOiAvdG1wL21rZGV2MzI3MAorIyAgICAgICAgICAgICAgIDMuIElzc3VlICJ0ZWxpbml0IHEiIG9yIHJlYm9vdCwgYXMgYXBwcm9wcmlhdGUuCisjCitQPS9wcm9jL3R0eS9kcml2ZXIvdHR5MzI3MAorUk9PVD0KK0Q9JFJPT1QvZGV2CitTVUJEPTMyNzAKK1RUWT0kU1VCRC90dHkKK1RVQj0kU1VCRC90dWIKK1NDUj0kUk9PVC90bXAvbWtkZXYzMjcwCitTQ1JUTVA9JFNDUi5hCitHRVRUWUxJTkU9OjIzNDU6cmVzcGF3bjovc2Jpbi9taW5nZXR0eQorSU5JVFRBQj0kUk9PVC9ldGMvaW5pdHRhYgorTklOSVRUQUI9JFJPT1QvZXRjL05FV2luaXR0YWIKK09JTklUVEFCPSRST09UL2V0Yy9PTERpbml0dGFiCitBREROT1RFPVxcIiMgQWRkaXRpb25hbCBtaW5nZXR0eXMgZm9yIHRoZSAzMjcwL3R0eSogZHJpdmVyLCB0dWIzMjcwIC0tLVxcIgorCitpZiAhIGxzICRQID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwltb2Rwcm9iZSB0dWIzMjcwID4gL2Rldi9udWxsIDI+JjEKK2ZpCitscyAkUCA+IC9kZXYvbnVsbCAyPiYxIHx8IGV4aXQgMQorCisjIEluaXRpYWxpemUgdHdvIGZpbGVzLCBvbmUgZm9yIC9kZXYvMzI3MCBjb21tYW5kcyBhbmQgb25lCisjIHRvIHJlcGxhY2UgdGhlIC9ldGMvaW5pdHRhYiBmaWxlIChvbGQgb25lIHNhdmVkIGluIE9MRGluaXR0YWIpCitlY2hvICIjIS9iaW4vc2giID4gJFNDUiB8fCBleGl0IDEKK2VjaG8gIiAiID4+ICRTQ1IKK2VjaG8gIiMgU2NyaXB0IGJ1aWx0IGJ5IC9zYmluL2NvbmZpZzMyNzAiID4+ICRTQ1IKK2lmIFsgISAtZCAvZGV2L2Rhc2QgXTsgdGhlbgorCWVjaG8gcm0gLXJmICIkRC8kU1VCRC8qIiA+PiAkU0NSCitmaQorZWNobyAiZ3JlcCAtdiAkVFRZICRJTklUVEFCID4gJE5JTklUVEFCIiA+ICRTQ1JUTVAgfHwgZXhpdCAxCitlY2hvICJlY2hvICRBREROT1RFID4+ICROSU5JVFRBQiIgPj4gJFNDUlRNUAoraWYgWyAhIC1kIC9kZXYvZGFzZCBdOyB0aGVuCisJZWNobyBta2RpciAtcCAkRC8kU1VCRCA+PiAkU0NSCitmaQorCisjIE5vdyBxdWVyeSB0aGUgdHViMzI3MCBkcml2ZXIgZm9yIDMyNzAgZGV2aWNlIGluZm9ybWF0aW9uCisjIGFuZCBhZGQgYXBwcm9wcmlhdGUgbWtub2QgYW5kIG1pbmdldHR5IGxpbmVzIHRvIG91ciBmaWxlcworZWNobyB3aGF0PWNvbmZpZyA+ICRQCit3aGlsZSByZWFkIGRldm5vIG1haiBtaW47ZG8KKwlpZiBbICRtaW4gPSAwIF07IHRoZW4KKwkJZnNtYWo9JG1hagorCQlpZiBbICEgLWQgL2Rldi9kYXNkIF07IHRoZW4KKwkJCWVjaG8gbWtub2QgJEQvJFRVQiBjICRmc21haiAwID4+ICRTQ1IKKwkJCWVjaG8gY2htb2QgNjY2ICRELyRUVUIgPj4gJFNDUgorCQlmaQorCWVsaWYgWyAkbWFqID0gQ09OU09MRSBdOyB0aGVuCisJCWlmIFsgISAtZCAvZGV2L2Rhc2QgXTsgdGhlbgorCQkJZWNobyBta25vZCAkRC8kVFVCJGRldm5vIGMgJGZzbWFqICRtaW4gPj4gJFNDUgorCQlmaQorCWVsc2UKKwkJaWYgWyAhIC1kIC9kZXYvZGFzZCBdOyB0aGVuCisJCQllY2hvIG1rbm9kICRELyRUVFkkZGV2bm8gYyAkbWFqICRtaW4gPj4kU0NSCisJCQllY2hvIG1rbm9kICRELyRUVUIkZGV2bm8gYyAkZnNtYWogJG1pbiA+PiAkU0NSCisJCWZpCisJCWVjaG8gImVjaG8gdCRtaW4kR0VUVFlMSU5FICRUVFkkZGV2bm8gPj4gJE5JTklUVEFCIiA+PiAkU0NSVE1QCisJZmkKK2RvbmUgPCAkUAorCitlY2hvIG12ICRJTklUVEFCICRPSU5JVFRBQiA+PiAkU0NSVE1QIHx8IGV4aXQgMQorZWNobyBtdiAkTklOSVRUQUIgJElOSVRUQUIgPj4gJFNDUlRNUAorY2F0ICRTQ1JUTVAgPj4gJFNDUgorcm0gJFNDUlRNUAorZXhpdCAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvY3J5cHRvL2NyeXB0by1BUEkudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL2NyeXB0by9jcnlwdG8tQVBJLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGE3NzYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL2NyeXB0by9jcnlwdG8tQVBJLnR4dApAQCAtMCwwICsxLDgzIEBACitjcnlwdG8tQVBJIHN1cHBvcnQgZm9yIHo5OTAgTWVzc2FnZSBTZWN1cml0eSBBc3Npc3QgKE1TQSkgaW5zdHJ1Y3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FVVEhPUjoJVGhvbWFzIFNwYXR6aWVyICh0c3BhdEBkZS5pYm0uY29tKQorCisKKzEuIEludHJvZHVjdGlvbiBjcnlwdG8tQVBJCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorU2VlIERvY3VtZW50YXRpb24vY3J5cHRvL2FwaS1pbnRyby50eHQgZm9yIGFuIGludHJvZHVjdGlvbi9kZXNjcmlwdGlvbiBvZiB0aGUKK2tlcm5lbCBjcnlwdG8gQVBJLgorQWNjb3JkaW5nIHRvIGFwaS1pbnRyby50eHQgc3VwcG9ydCBmb3Igejk5MCBjcnlwdG8gaW5zdHJ1Y3Rpb25zIGhhcyBiZWVuIGFkZGVkCitpbiB0aGUgYWxnb3JpdGhtIGFwaSBsYXllciBvZiB0aGUgY3J5cHRvIEFQSS4gU2V2ZXJhbCBmaWxlcyBjb250YWluaW5nIHo5OTAKK29wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMgb2YgY3J5cHRvIGFsZ29yaXRobXMgYXJlIHBsYWNlZCBpbiB0aGUKK2FyY2gvczM5MC9jcnlwdG8gZGlyZWN0b3J5LgorCisKKzIuIFByb2JpbmcgZm9yIGF2YWlsYWJpbGl0eSBvZiBNU0EKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0l0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgS2VybmVscyB3aXRoIHRoZSB6OTkwIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMgYm90aAorb24gbWFjaGluZXMgd2l0aCBNU0EgYXZhaWxhYmxlIGFuIG9uIHRob3NlIHdpdGhvdXQgTVNBIChwcmUgejk5MCBvciB6OTkwCit3aXRob3V0IE1TQSkuIFRoZXJlZm9yZSBhIHNpbXBsZSBwcm9iaW5nIG1lY2hhbmlzbXMgaGFzIGJlZW4gaW1wbGVtZW50ZWQ6CitJbiB0aGUgaW5pdCBmdW5jdGlvbiBvZiBlYWNoIGNyeXB0byBtb2R1bGUgdGhlIGF2YWlsYWJpbGl0eSBvZiBNU0EgYW5kIG9mIHRoZQorcmVzcGVjdGl2ZSBjcnlwdG8gYWxnb3JpdGhtIGluIHBhcnRpY3VsYXIgd2lsbCBiZSB0ZXN0ZWQuIElmIHRoZSBhbGdvcml0aG0gaXMKK2F2YWlsYWJsZSB0aGUgbW9kdWxlIHdpbGwgbG9hZCBhbmQgcmVnaXN0ZXIgaXRzIGFsZ29yaXRobSB3aXRoIHRoZSBjcnlwdG8gQVBJLgorCitJZiB0aGUgcmVzcGVjdGl2ZSBjcnlwdG8gYWxnb3JpdGhtIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBpbml0IGZ1bmN0aW9uIHdpbGwKK3JldHVybiAtRU5PU1lTLiBJbiB0aGF0IGNhc2UgYSBmYWxsYmFjayB0byB0aGUgc3RhbmRhcmQgc29mdHdhcmUgaW1wbGVtZW50YXRpb24KK29mIHRoZSBjcnlwdG8gYWxnb3JpdGhtIG11c3QgYmUgdGFrZW4gKCAtPiB0aGUgc3RhbmRhcmQgY3J5cHRvIG1vZHVsZXMgYXJlCithbHNvIGJ1aWxkIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwpLgorCisKKzMuIEVuc3VyaW5nIHo5OTAgY3J5cHRvIG1vZHVsZSBwcmVmZXJlbmNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSWYgejk5MCBjcnlwdG8gaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUgdGhlIG9wdGltaXplZCBtb2R1bGVzIHNob3VsZCBiZQorcHJlZmVycmVkIGluc3RlYWQgb2Ygc3RhbmRhcmQgbW9kdWxlcy4KKworMy4xLiBjb21waWxlZC1pbiBtb2R1bGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0ZvciBjb21waWxlZC1pbiBtb2R1bGVzIGl0IGhhcyB0byBiZSBlbnN1cmVkIHRoYXQgdGhlIHo5OTAgbW9kdWxlcyBhcmUgbGlua2VkCitiZWZvcmUgdGhlIHN0YW5kYXJkIGNyeXB0byBtb2R1bGVzLiBUaGVuLCBvbiBzeXN0ZW0gc3RhcnR1cCB0aGUgaW5pdCBmdW5jdGlvbnMKK29mIHo5OTAgY3J5cHRvIG1vZHVsZXMgd2lsbCBiZSBjYWxsZWQgZmlyc3QgYW5kIHF1ZXJ5IGZvciBhdmFpbGFiaWxpdHkgb2Ygejk5MAorY3J5cHRvIGluc3RydWN0aW9ucy4gSWYgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxlLCB0aGUgejk5MCBtb2R1bGUgd2lsbCByZWdpc3RlcgoraXRzIGNyeXB0byBhbGdvcml0aG0gaW1wbGVtZW50YXRpb24gLT4gdGhlIGxvYWQgb2YgdGhlIHN0YW5kYXJkIG1vZHVsZSB3aWxsIGZhaWwKK3NpbmNlIHRoZSBhbGdvcml0aG0gaXMgYWxyZWFkeSByZWdpc3RlcmVkLgorSWYgejk5MCBjcnlwdG8gaW5zdHJ1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZSB0aGUgbG9hZCBvZiB0aGUgejk5MCBtb2R1bGUgd2lsbAorZmFpbCAtPiB0aGUgc3RhbmRhcmQgbW9kdWxlIHdpbGwgbG9hZCBhbmQgcmVnaXN0ZXIgaXRzIGFsZ29yaXRobS4KKworMy4yLiBkeW5hbWljIG1vZHVsZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CitBIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGhhcyB0byB0YWtlIGNhcmUgb2YgZ2l2aW5nIHByZWZlcmVuY2UgdG8gejk5MCBjcnlwdG8KK21vZHVsZXMuIElmIE1TQSBpcyBhdmFpbGFibGUgYXBwcm9wcmlhdGUgbGluZXMgaGF2ZSB0byBiZSBhZGRlZCB0bworL2V0Yy9tb2Rwcm9iZS5jb25mLgorCitFeGFtcGxlOgl6OTkwIGNyeXB0byBpbnN0cnVjdGlvbiBmb3IgU0hBMSBhbGdvcml0aG0gaXMgYXZhaWxhYmxlCisKKwkJYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmYgKGFzc3VtaW5nIHRoZQorCQl6OTkwIGNyeXB0byBtb2R1bGVzIGZvciBTSEExIGlzIGNhbGxlZCBzaGExX3o5OTApOgorCisJCWFsaWFzIHNoYTEgc2hhMV96OTkwCisKKwkJLT4gd2hlbiB0aGUgc2hhMSBhbGdvcml0aG0gaXMgcmVxdWVzdGVkIHRocm91Z2ggdGhlIGNyeXB0byBBUEkKKwkJKHdoaWNoIGhhcyBhIG1vZHVsZSBhdXRvbG9hZGVyKSB0aGUgejk5MCBtb2R1bGUgd2lsbCBiZSBsb2FkZWQuCisKK1RCRDoJYSB1c2Vyc3BhY2UgbW9kdWxlIHByb2JpbiBtZWNoYW5pc20KKwlzb21ldGhpbmcgbGlrZSAncHJvYmUgc2hhMSBzaGExX3o5OTAgc2hhMScgaW4gbW9kcHJvYmUuY29uZgorCS0+IHRyeSBtb2R1bGUgc2hhMV96OTkwLCBpZiBpdCBmYWlscyB0byBsb2FkIGxvYWQgc3RhbmRhcmQgbW9kdWxlIHNoYTEKKwl0aGUgJ3Byb2JlJyBzdGF0ZW1lbnQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaW4gbW9kcHJvYmUuY29uZgorCisKKzQuIEN1cnJlbnRseSBpbXBsZW1lbnRlZCB6OTkwIGNyeXB0byBhbGdvcml0aG1zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGZvbGxvd2luZyBjcnlwdG8gYWxnb3JpdGhtcyB3aXRoIHo5OTAgTVNBIHN1cHBvcnQgYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KK1RoZSBuYW1lIG9mIGVhY2ggYWxnb3JpdGhtIHVuZGVyIHdoaWNoIGl0IGlzIHJlZ2lzdGVyZWQgaW4gY3J5cHRvIEFQSSBhbmQgdGhlCituYW1lIG9mIHRoZSByZXNwZWN0aXZlIG1vZHVsZSBpcyBnaXZlbiBpbiBzcXVhcmUgYnJhY2tldHMuCisKKy0gU0hBMSBEaWdlc3QgQWxnb3JpdGhtIFtzaGExIC0+IHNoYTFfejk5MF0KKy0gREVTIEVuY3J5cHQvRGVjcnlwdCBBbGdvcml0aG0gKDY0Yml0IGtleSkgW2RlcyAtPiBkZXNfejk5MF0KKy0gVHJpcHBsZSBERVMgRW5jcnlwdC9EZWNyeXB0IEFsZ29yaXRobSAoMTI4Yml0IGtleSkgW2RlczNfZWRlMTI4IC0+IGRlc196OTkwXQorLSBUcmlwcGxlIERFUyBFbmNyeXB0L0RlY3J5cHQgQWxnb3JpdGhtICgxOTJiaXQga2V5KSBbZGVzM19lZGUgLT4gZGVzX3o5OTBdCisKK0luIG9yZGVyIHRvIGxvYWQsIGZvciBleGFtcGxlLCB0aGUgc2hhMV96OTkwIG1vZHVsZSB3aGVuIHRoZSBzaGExIGFsZ29yaXRobSBpcworcmVxdWVzdGVkIChzZWUgMy4yLikgYWRkICdhbGlhcyBzaGExIHNoYTFfejk5MCcgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDYxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dApAQCAtMCwwICsxLDI2NSBAQAorUy8zOTAgZHJpdmVyIG1vZGVsIGludGVyZmFjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIENDVyBkZXZpY2VzCistLS0tLS0tLS0tLS0tLQorCitBbGwgZGV2aWNlcyB3aGljaCBjYW4gYmUgYWRkcmVzc2VkIGJ5IG1lYW5zIG9mIGNjd3MgYXJlIGNhbGxlZCAnQ0NXIGRldmljZXMnIC0KK2V2ZW4gaWYgdGhleSBhcmVuJ3QgYWN0dWFsbHkgZHJpdmVuIGJ5IGNjd3MuCisKK0FsbCBjY3cgZGV2aWNlcyBhcmUgYWNjZXNzZWQgdmlhIGEgc3ViY2hhbm5lbCwgdGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlIAorc3RydWN0dXJlcyB1bmRlciByb290LzoKKworcm9vdC8KKyAgICAgLSBzeXMKKyAgICAgLSBsZWdhY3kKKyAgICAgLSBjc3MwLworICAgICAgICAgICAtIDAuMC4wMDAwLzAuMC4wODE1LworCSAgIC0gMC4wLjAwMDEvMC4wLjQ3MTEvCisJICAgLSAwLjAuMDAwMi8KKwkgICAuLi4KKworSW4gdGhpcyBleGFtcGxlLCBkZXZpY2UgMDgxNSBpcyBhY2Nlc3NlZCB2aWEgc3ViY2hhbm5lbCAwLCBkZXZpY2UgNDcxMSB2aWEgCitzdWJjaGFubmVsIDEsIGFuZCBzdWJjaGFubmVsIDIgaXMgYSBub24tSS9PIHN1YmNoYW5uZWwuCisKK1lvdSBzaG91bGQgYWRkcmVzcyBhIGNjdyBkZXZpY2UgdmlhIGl0cyBidXMgaWQgKGUuZy4gMC4wLjQ3MTEpOyB0aGUgZGV2aWNlIGNhbgorYmUgZm91bmQgdW5kZXIgYnVzL2Njdy9kZXZpY2VzLy4KKworQWxsIGNjdyBkZXZpY2VzIGV4cG9ydCBzb21lIGRhdGEgdmlhIHN5c2ZzLgorCitjdXR5cGU6CSAgICBUaGUgY29udHJvbCB1bml0IHR5cGUgLyBtb2RlbC4KKworZGV2dHlwZTogICAgVGhlIGRldmljZSB0eXBlIC8gbW9kZWwsIGlmIGFwcGxpY2FibGUuCisKK2F2YWlsYWJpbGl0eTogQ2FuIGJlICdnb29kJyBvciAnYm94ZWQnOyAnbm8gcGF0aCcgb3IgJ25vIGRldmljZScgZm9yCisJICAgICAgZGlzY29ubmVjdGVkIGRldmljZXMuCisKK29ubGluZTogICAgIEFuIGludGVyZmFjZSB0byBzZXQgdGhlIGRldmljZSBvbmxpbmUgYW5kIG9mZmxpbmUuCisJICAgIEluIHRoZSBzcGVjaWFsIGNhc2Ugb2YgdGhlIGRldmljZSBiZWluZyBkaXNjb25uZWN0ZWQgKHNlZSB0aGUKKwkgICAgbm90aWZ5IGZ1bmN0aW9uIHVuZGVyIDEuMiksIHBpcGluZyAwIHRvIG9ubGluZSB3aWxsIGZvY2libHkgZGVsZXRlCisJICAgIHRoZSBkZXZpY2UuCisKK1RoZSBkZXZpY2UgZHJpdmVycyBjYW4gYWRkIGVudHJpZXMgdG8gZXhwb3J0IHBlci1kZXZpY2UgZGF0YSBhbmQgaW50ZXJmYWNlcy4KKworVGhlcmUgaXMgYWxzbyBzb21lIGRhdGEgZXhwb3J0ZWQgb24gYSBwZXItc3ViY2hhbm5lbCBiYXNpcyAoc2VlIHVuZGVyCitidXMvY3NzL2RldmljZXMvKToKKworY2hwaWRzOgkgICAgVmlhIHdoaWNoIGNocGlkcyB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZC4KKworcGltcGFtcG9tOiAgVGhlIHBhdGggaW5zdGFsbGVkLCBwYXRoIGF2YWlsYWJsZSBhbmQgcGF0aCBvcGVyYXRpb25hbCBtYXNrcy4KKworVGhlcmUgYWxzbyBtaWdodCBiZSBhZGRpdGlvbmFsIGRhdGEsIGZvciBleGFtcGxlIGZvciBibG9jayBkZXZpY2VzLgorCisKKzEuMSBCcmluZ2luZyB1cCBhIGNjdyBkZXZpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBkb25lIGluIHNldmVyYWwgc3RlcHMuCisKK2EuIEVhY2ggZHJpdmVyIGNhbiBwcm92aWRlIG9uZSBvciBtb3JlIHBhcmFtZXRlciBpbnRlcmZhY2VzIHdoZXJlIHBhcmFtZXRlcnMgY2FuCisgICBiZSBzcGVjaWZpZWQuIFRoZXNlIGludGVyZmFjZXMgYXJlIGFsc28gaW4gdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5LgorYi4gQWZ0ZXIgYS4gaGFzIGJlZW4gcGVyZm9ybWVkLCBpZiBuZWNlc3NhcnksIHRoZSBkZXZpY2UgaXMgZmluYWxseSBicm91Z2h0IHVwCisgICB2aWEgdGhlICdvbmxpbmUnIGludGVyZmFjZS4KKworCisxLjIgV3JpdGluZyBhIGRyaXZlciBmb3IgY2N3IGRldmljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYmFzaWMgc3RydWN0IGNjd19kZXZpY2UgYW5kIHN0cnVjdCBjY3dfZHJpdmVyIGRhdGEgc3RydWN0dXJlcyBjYW4gYmUgZm91bmQKK3VuZGVyIGluY2x1ZGUvYXNtL2Njd2Rldi5oLgorCitzdHJ1Y3QgY2N3X2RldmljZSB7CisgICAgICAgIHNwaW5sb2NrX3QgKmNjd2xvY2s7CisgICAgICAgIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IGNjd19kZXZpY2VfaWQgaWQ7CQorCisJc3RydWN0IGNjd19kcml2ZXIgKmRydjsJCQorCXN0cnVjdCBkZXZpY2UgZGV2OwkJCisJaW50IG9ubGluZTsKKworCXZvaWQgKCpoYW5kbGVyKSAoc3RydWN0IGNjd19kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcmIgKmlyYik7Cit9OworCitzdHJ1Y3QgY2N3X2RyaXZlciB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CQkKKwlzdHJ1Y3QgY2N3X2RldmljZV9pZCAqaWRzOwkKKwlpbnQgKCpwcm9iZSkgKHN0cnVjdCBjY3dfZGV2aWNlICopOyAKKwlpbnQgKCpyZW1vdmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKwlpbnQgKCpzZXRfb25saW5lKSAoc3RydWN0IGNjd19kZXZpY2UgKik7CisJaW50ICgqc2V0X29mZmxpbmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKwlpbnQgKCpub3RpZnkpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwljaGFyICpuYW1lOworfTsKKworVGhlICdwcml2YXRlJyBmaWVsZCBjb250YWlucyBkYXRhIG5lZWRlZCBmb3IgaW50ZXJuYWwgaS9vIG9wZXJhdGlvbiBvbmx5LCBhbmQKK2lzIG5vdCBhdmFpbGFibGUgdG8gdGhlIGRldmljZSBkcml2ZXIuCisKK0VhY2ggZHJpdmVyIHNob3VsZCBkZWNsYXJlIGluIGEgTU9EVUxFX0RFVklDRV9UQUJMRSBpbnRvIHdoaWNoIENVIHR5cGVzL21vZGVscworYW5kL29yIGRldmljZSB0eXBlcy9tb2RlbHMgaXQgaXMgaW50ZXJlc3RlZC4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gbGF0ZXIgYmUgZm91bmQKK2ZvdW5kIGluIHRoZSBzdHJ1Y3QgY2N3X2RldmljZV9pZCBmaWVsZHM6CisKK3N0cnVjdCBjY3dfZGV2aWNlX2lkIHsKKwlfX3UxNgltYXRjaF9mbGFnczsJCisKKwlfX3UxNgljdV90eXBlOwkKKwlfX3UxNglkZXZfdHlwZTsJCisJX191OAljdV9tb2RlbDsJCisJX191OAlkZXZfbW9kZWw7CQorCisJdW5zaWduZWQgbG9uZyBkcml2ZXJfaW5mbzsKK307CisKK1RoZSBmdW5jdGlvbnMgaW4gY2N3X2RyaXZlciBzaG91bGQgYmUgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHdheToKK3Byb2JlOiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBkZXZpY2UgbGF5ZXIgZm9yIGVhY2ggZGV2aWNlIHRoZSBkcml2ZXIKKwkgaXMgaW50ZXJlc3RlZCBpbi4gVGhlIGRyaXZlciBzaG91bGQgb25seSBhbGxvY2F0ZSBwcml2YXRlIHN0cnVjdHVyZXMKKwkgdG8gcHV0IGluIGRldi0+ZHJpdmVyX2RhdGEgYW5kIGNyZWF0ZSBhdHRyaWJ1dGVzIChpZiBuZWVkZWQpLiBBbHNvLAorCSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKHNlZSBiZWxvdykgc2hvdWxkIGJlIHNldCBoZXJlLgorCitpbnQgKCpwcm9iZSkgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsgCisKK1BhcmFtZXRlcnM6ICBjZGV2ICAgICAtIHRoZSBkZXZpY2UgdG8gYmUgcHJvYmVkLgorCisKK3JlbW92ZTogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBkZXZpY2UgbGF5ZXIgdXBvbiByZW1vdmFsIG9mIHRoZSBkcml2ZXIsCisJIHRoZSBkZXZpY2Ugb3IgdGhlIG1vZHVsZS4gVGhlIGRyaXZlciBzaG91bGQgcGVyZm9ybSBjbGVhbnVwcyBoZXJlLgorCitpbnQgKCpyZW1vdmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CisKK1BhcmFtZXRlcnM6ICAgY2RldiAgICAtIHRoZSBkZXZpY2UgdG8gYmUgcmVtb3ZlZC4KKworCitzZXRfb25saW5lOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgY29tbW9uIEkvTyBsYXllciB3aGVuIHRoZSBkZXZpY2UgaXMKKwkgICAgYWN0aXZhdGVkIHZpYSB0aGUgJ29ubGluZScgYXR0cmlidXRlLiBUaGUgZHJpdmVyIHNob3VsZCBmaW5hbGx5CisJICAgIHNldHVwIGFuZCBhY3RpdmF0ZSB0aGUgZGV2aWNlIGhlcmUuCisKK2ludCAoKnNldF9vbmxpbmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKworUGFyYW1ldGVyczogICBjZGV2CS0gdGhlIGRldmljZSB0byBiZSBhY3RpdmF0ZWQuIFRoZSBjb21tb24gbGF5ZXIgaGFzCisJCQkgIHZlcmlmaWVkIHRoYXQgdGhlIGRldmljZSBpcyBub3QgYWxyZWFkeSBvbmxpbmUuCisKKworc2V0X29mZmxpbmU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBjb21tb24gSS9PIGxheWVyIHdoZW4gdGhlIGRldmljZSBpcworCSAgICAgZGUtYWN0aXZhdGVkIHZpYSB0aGUgJ29ubGluZScgYXR0cmlidXRlLiBUaGUgZHJpdmVyIHNob3VsZCBzaHV0CisJICAgICBkb3duIHRoZSBkZXZpY2UsIGJ1dCBub3QgZGUtYWxsb2NhdGUgaXRzIHByaXZhdGUgZGF0YS4KKworaW50ICgqc2V0X29mZmxpbmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKworUGFyYW1ldGVyczogICBjZGV2ICAgICAgIC0gdGhlIGRldmljZSB0byBiZSBkZWFjdGl2YXRlZC4gVGhlIGNvbW1vbiBsYXllciBoYXMKKwkJCSAgIHZlcmlmaWVkIHRoYXQgdGhlIGRldmljZSBpcyBvbmxpbmUuCisKKworbm90aWZ5OiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgY29tbW9uIEkvTyBsYXllciBmb3Igc29tZSBzdGF0ZSBjaGFuZ2VzCisJb2YgdGhlIGRldmljZS4KKwlTaWduYWxsZWQgdG8gdGhlIGRyaXZlciBhcmU6CisJKiBJbiBvbmxpbmUgc3RhdGUsIGRldmljZSBkZXRhY2hlZCAoQ0lPX0dPTkUpIG9yIGxhc3QgcGF0aCBnb25lCisJICAoQ0lPX05PX1BBVEgpLiBUaGUgZHJpdmVyIG11c3QgcmV0dXJuICEwIHRvIGtlZXAgdGhlIGRldmljZTsgZm9yCisJICByZXR1cm4gY29kZSAwLCB0aGUgZGV2aWNlIHdpbGwgYmUgZGVsZXRlZCBhcyB1c3VhbCAoYWxzbyB3aGVuIG5vCisJICBub3RpZnkgZnVuY3Rpb24gaXMgcmVnaXN0ZXJkKS4gSWYgdGhlIGRyaXZlciB3YW50cyB0byBrZWVwIHRoZQorCSAgZGV2aWNlLCBpdCBpcyBtb3ZlZCBpbnRvIGRpc2Nvbm5lY3RlZCBzdGF0ZS4KKwkqIEluIGRpc2Nvbm5lY3RlZCBzdGF0ZSwgZGV2aWNlIG9wZXJhdGlvbmFsIGFnYWluIChDSU9fT1BFUikuIFRoZQorCSAgY29tbW9uIEkvTyBsYXllciBwZXJmb3JtcyBzb21lIHNhbml0eSBjaGVja3Mgb24gZGV2aWNlIG51bWJlciBhbmQKKwkgIERldmljZSAvIENVIHRvIGJlIHJlYXNvbmFibHkgc3VyZSBpZiBpdCBpcyBzdGlsbCB0aGUgc2FtZSBkZXZpY2UuCisJICBJZiBub3QsIHRoZSBvbGQgZGV2aWNlIGlzIHJlbW92ZWQgYW5kIGEgbmV3IG9uZSByZWdpc3RlcmVkLiBCeSB0aGUKKwkgIHJldHVybiBjb2RlIG9mIHRoZSBub3RpZnkgZnVuY3Rpb24gdGhlIGRldmljZSBkcml2ZXIgc2lnbmFscyBpZiBpdAorCSAgd2FudHMgdGhlIGRldmljZSBiYWNrOiAhMCBmb3Iga2VlcGluZywgMCB0byBtYWtlIHRoZSBkZXZpY2UgYmVpbmcKKwkgIHJlbW92ZWQgYW5kIHJlLXJlZ2lzdGVyZWQuCisJCitpbnQgKCpub3RpZnkpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOworCitQYXJhbWV0ZXJzOiAgIGNkZXYgICAgLSB0aGUgZGV2aWNlIHdob3NlIHN0YXRlIGNoYW5nZWQuCisJICAgICAgZXZlbnQgICAtIHRoZSBldmVudCB0aGF0IGhhcHBlbmVkLiBUaGlzIGNhbiBiZSBvbmUgb2YgQ0lPX0dPTkUsCisJCSAgICAgICAgQ0lPX05PX1BBVEggb3IgQ0lPX09QRVIuCisKK1RoZSBoYW5kbGVyIGZpZWxkIG9mIHRoZSBzdHJ1Y3QgY2N3X2RldmljZSBpcyBtZWFudCB0byBiZSBzZXQgdG8gdGhlIGludGVycnVwdAoraGFuZGxlciBmb3IgdGhlIGRldmljZS4gSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgZHJpdmVycyB3aGljaCB1c2Ugc2V2ZXJhbCAKK2Rpc3RpbmN0IGhhbmRsZXJzIChlLmcuIG11bHRpIHN1YmNoYW5uZWwgZGV2aWNlcyksIHRoaXMgaXMgYSBtZW1iZXIgb2YgY2N3X2RldmljZQoraW5zdGVhZCBvZiBjY3dfZHJpdmVyLgorVGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb21tb24gbGF5ZXIgZHVyaW5nIHNldF9vbmxpbmUoKSBwcm9jZXNzaW5nCitiZWZvcmUgdGhlIGRyaXZlciBpcyBjYWxsZWQsIGFuZCBpcyBkZXJlZ2lzdGVyZWQgZHVyaW5nIHNldF9vZmZsaW5lKCkgYWZ0ZXIgdGhlCitkcml2ZXIgaGFzIGJlZW4gY2FsbGVkLiBBbHNvLCBhZnRlciByZWdpc3RlcmluZyAvIGJlZm9yZSBkZXJlZ2lzdGVyaW5nLCBwYXRoIAorZ3JvdXBpbmcgcmVzcC4gZGlzYmFuZGluZyBvZiB0aGUgcGF0aCBncm91cCAoaWYgYXBwbGljYWJsZSkgYXJlIHBlcmZvcm1lZC4KKwordm9pZCAoKmhhbmRsZXIpIChzdHJ1Y3QgY2N3X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGludHBhcm0sIHN0cnVjdCBpcmIgKmlyYik7CisKK1BhcmFtZXRlcnM6CWRldgktIHRoZSBkZXZpY2UgdGhlIGhhbmRsZXIgaXMgY2FsbGVkIGZvcgorCQlpbnRwYXJtIC0gdGhlIGludHBhcm0gd2hpY2ggYWxsb3dzIHRoZSBkZXZpY2UgZHJpdmVyIHRvIGlkZW50aWZ5CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpL28gdGhlIGludGVycnVwdCBpcyBhc3NvY2lhdGVkIHdpdGgsIG9yIHRvIHJlY29nbml6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJydXB0IGFzIHVuc29saWNpdGVkLgorICAgICAgICAgICAgICAgIGlyYiAgICAgLSBpbnRlcnJ1cHRpb24gcmVzcG9uc2UgYmxvY2sgd2hpY2ggY29udGFpbnMgdGhlIGFjY3VtdWxhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy4KKworVGhlIGRldmljZSBkcml2ZXIgaXMgY2FsbGVkIGZyb20gdGhlIGNvbW1vbiBjY3dfZGV2aWNlIGxheWVyIGFuZCBjYW4gcmV0cmlldmUgCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJydXB0IGZyb20gdGhlIGlyYiBwYXJhbWV0ZXIuCisKKworMS4zIGNjd2dyb3VwIGRldmljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjY3dncm91cCBtZWNoYW5pc20gaXMgZGVzaWduZWQgdG8gaGFuZGxlIGRldmljZXMgY29uc2lzdGluZyBvZiBtdWx0aXBsZSBjY3cKK2RldmljZXMsIGxpa2UgbGNzIG9yIGN0Yy4KKworVGhlIGNjdyBkcml2ZXIgcHJvdmlkZXMgYSAnZ3JvdXAnIGF0dHJpYnV0ZS4gUGlwaW5nIGJ1cyBpZHMgb2YgY2N3IGRldmljZXMgdG8KK3RoaXMgYXR0cmlidXRlcyBjcmVhdGVzIGEgY2N3Z3JvdXAgZGV2aWNlIGNvbnNpc3Rpbmcgb2YgdGhlc2UgY2N3IGRldmljZXMgKGlmCitwb3NzaWJsZSkuIFRoaXMgY2N3Z3JvdXAgZGV2aWNlIGNhbiBiZSBzZXQgb25saW5lIG9yIG9mZmxpbmUganVzdCBsaWtlIGEgbm9ybWFsCitjY3cgZGV2aWNlLgorCitFYWNoIGNjd2dyb3VwIGRldmljZSBhbHNvIHByb3ZpZGVzIGFuICd1bmdyb3VwJyBhdHRyaWJ1dGUgdG8gZGVzdHJveSB0aGUgZGV2aWNlCithZ2FpbiAob25seSB3aGVuIG9mZmxpbmUpLiBUaGlzIGlzIGEgZ2VuZXJpYyBjY3dncm91cCBtZWNoYW5pc20gKHRoZSBkcml2ZXIgZG9lcworbm90IG5lZWQgdG8gaW1wbGVtZW50IGFueXRoaW5nIGJleW9uZCBub3JtYWwgcmVtb3ZhbCByb3V0aW5lcykuCisKK1RvIGltcGxlbWVudCBhIGNjd2dyb3VwIGRyaXZlciwgcGxlYXNlIHJlZmVyIHRvIGluY2x1ZGUvYXNtL2Njd2dyb3VwLmguIEtlZXAgaW4KK21pbmQgdGhhdCBtb3N0IGRyaXZlcnMgd2lsbCBuZWVkIHRvIGltcGxlbWVudCBib3RoIGEgY2N3Z3JvdXAgYW5kIGEgY2N3IGRyaXZlcgorKHVubGVzcyB5b3UgaGF2ZSBhIG1ldGEgY2N3IGRyaXZlciwgbGlrZSBjdTMwODggZm9yIGxjcyBhbmQgY3RjKS4KKworCisyLiBDaGFubmVsIHBhdGhzCistLS0tLS0tLS0tLS0tLS0tLQorCitDaGFubmVsIHBhdGhzIHNob3cgdXAsIGxpa2Ugc3ViY2hhbm5lbHMsIHVuZGVyIHRoZSBjaGFubmVsIHN1YnN5c3RlbSByb290IChjc3MwKQorYW5kIGFyZSBjYWxsZWQgJ2NocDAuPGNocGlkPicuIFRoZXkgaGF2ZSBubyBkcml2ZXIgYW5kIGRvIG5vdCBiZWxvbmcgdG8gYW55IGJ1cy4KK1BsZWFzZSBub3RlLCB0aGF0IHVubGlrZSAvcHJvYy9jaHBpZHMgaW4gMi40LCB0aGUgY2hhbm5lbCBwYXRoIG9iamVjdHMgcmVmbGVjdAorb25seSB0aGUgbG9naWNhbCBzdGF0ZSBhbmQgbm90IHRoZSBwaHlzaWNhbCBzdGF0ZSwgc2luY2Ugd2UgY2Fubm90IHRyYWNrIHRoZQorbGF0dGVyIGNvbnNpc3RlbnRseSBkdWUgdG8gbGFja2luZyBtYWNoaW5lIHN1cHBvcnQgKHdlIGRvbid0IG5lZWQgdG8gYmUgYXdhcmUKK29mIGFueXdheSkuCisKK3N0YXR1cyAtIENhbiBiZSAnb25saW5lJyBvciAnb2ZmbGluZScuCisJIFBpcGluZyAnb24nIG9yICdvZmYnIHNldHMgdGhlIGNocGlkIGxvZ2ljYWxseSBvbmxpbmUvb2ZmbGluZS4KKwkgUGlwaW5nICdvbicgdG8gYW4gb25saW5lIGNocGlkIHRyaWdnZXJzIHBhdGggcmVwcm9iaW5nIGZvciBhbGwgZGV2aWNlcworCSB0aGUgY2hwaWQgY29ubmVjdHMgdG8uIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhlIGtlcm5lbCB0byByZS11c2UKKwkgYSBjaGFubmVsIHBhdGggdGhlIHVzZXIga25vd3MgdG8gYmUgb25saW5lLCBidXQgdGhlIG1hY2hpbmUgaGFzbid0CisJIGNyZWF0ZWQgYSBtYWNoaW5lIGNoZWNrIGZvci4KKworCiszLiBTeXN0ZW0gZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogY3B1cyBtYXkgeWV0IGJlIGFkZGVkIGhlcmUuCisKKzMuMSB4cHJhbSAKKy0tLS0tLS0tLQorCit4cHJhbSBzaG93cyB1cCB1bmRlciBzeXMvIGFzICd4cHJhbScuCisKKworNC4gT3RoZXIgZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLQorCis0LjEgTmV0aXVjdgorLS0tLS0tLS0tLS0KKworVGhlIG5ldGl1Y3YgZHJpdmVyIGNyZWF0ZXMgYW4gYXR0cmlidXRlICdjb25uZWN0aW9uJyB1bmRlcgorYnVzL2l1Y3YvZHJpdmVycy9uZXRpdWN2LiBQaXBpbmcgdG8gdGhpcyBhdHRpYnV0ZSBjcmVhdGVzIGEgbmV3IG5ldGl1Y3YKK2Nvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBob3N0LgorCitOZXRpdWN2IGNvbm5lY3Rpb25zIHNob3cgdXAgdW5kZXIgZGV2aWNlcy9pdWN2LyBhcyAibmV0aXVjdjxpZm51bT4iLiBUaGUgaW50ZXJmYWNlCitudW1iZXIgaXMgYXNzaWduZWQgc2VxdWVudGlhbGx5IHRvIHRoZSBjb25uZWN0aW9ucyBkZWZpbmVkIHZpYSB0aGUgJ2Nvbm5lY3Rpb24nCithdHRyaWJ1dGUuCisKK3VzZXIJCQkgIC0gc2hvd3MgdGhlIGNvbm5lY3Rpb24gcGFydG5lci4KKworYnVmZmVyCQkJICAtIG1heGltdW0gYnVmZmVyIHNpemUuCisJCQkgICAgUGlwZSB0byBpdCB0byBjaGFuZ2UgYnVmZmVyIHNpemUuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL21vbnJlYWRlci50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvbW9ucmVhZGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODQzYmIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL21vbnJlYWRlci50eHQKQEAgLTAsMCArMSwxOTcgQEAKKworRGF0ZSAgOiAyMDA0LU5vdi0yNgorQXV0aG9yOiBHZXJhbGQgU2NoYWVmZXIgKGdlcmFsZHNjQGRlLmlibS5jb20pCisKKworICAgICAgICAgICAgIExpbnV4IEFQSSBmb3IgcmVhZCBhY2Nlc3MgdG8gei9WTSBNb25pdG9yIFJlY29yZHMKKyAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworRGVzY3JpcHRpb24KKz09PT09PT09PT09CitUaGlzIGl0ZW0gZGVsaXZlcnMgYSBuZXcgTGludXggQVBJIGluIHRoZSBmb3JtIG9mIGEgbWlzYyBjaGFyIGRldmljZSB0aGF0IGlzCit1c2VhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgYWxsb3dzIHJlYWQgYWNjZXNzIHRvIHRoZSB6L1ZNIE1vbml0b3IgUmVjb3JkcworY29sbGVjdGVkIGJ5IHRoZSAqTU9OSVRPUiBTeXN0ZW0gU2VydmljZSBvZiB6L1ZNLgorCisKK1VzZXIgUmVxdWlyZW1lbnRzCis9PT09PT09PT09PT09PT09PQorVGhlIHovVk0gZ3Vlc3Qgb24gd2hpY2ggeW91IHdhbnQgdG8gYWNjZXNzIHRoaXMgQVBJIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgaW4KK29yZGVyIHRvIGFsbG93IElVQ1YgY29ubmVjdGlvbnMgdG8gdGhlICpNT05JVE9SIHNlcnZpY2UsIGkuZS4gaXQgbmVlZHMgdGhlCitJVUNWICpNT05JVE9SIHN0YXRlbWVudCBpbiBpdHMgdXNlciBlbnRyeS4gSWYgdGhlIG1vbml0b3IgRENTUyB0byBiZSB1c2VkIGlzCityZXN0cmljdGVkIChsaWtlbHkpLCB5b3UgYWxzbyBuZWVkIHRoZSBOQU1FU0FWRSA8RENTUyBOQU1FPiBzdGF0ZW1lbnQuCitUaGlzIGl0ZW0gd2lsbCB1c2UgdGhlIElVQ1YgZGV2aWNlIGRyaXZlciB0byBhY2Nlc3MgdGhlIHovVk0gc2VydmljZXMsIHNvIHlvdQorbmVlZCBhIGtlcm5lbCB3aXRoIElVQ1Ygc3VwcG9ydC4gWW91IGFsc28gbmVlZCB6L1ZNIHZlcnNpb24gNC40IG9yIDUuMS4KKworVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciBiZWluZyBhYmxlIHRvIGxvYWQgdGhlIG1vbml0b3IgRENTUyAoZXhhbXBsZXMgYXNzdW1lCit0aGF0IHRoZSBtb25pdG9yIERDU1MgYmVnaW5zIGF0IDE0NCBNQiBhbmQgZW5kcyBhdCAxNTIgTUIpLiBZb3UgY2FuIHF1ZXJ5IHRoZQorbG9jYXRpb24gb2YgdGhlIG1vbml0b3IgRENTUyB3aXRoIHRoZSBDbGFzcyBFIHByaXZpbGVnZWQgQ1AgY29tbWFuZCBRIE5TUyBNQVAKKyh0aGUgdmFsdWVzIEJFR1BBRyBhbmQgRU5EUEFHIGFyZSBnaXZlbiBpbiB1bml0cyBvZiA0SyBwYWdlcykuCisKK1NlZSBhbHNvICJDUCBDb21tYW5kIGFuZCBVdGlsaXR5IFJlZmVyZW5jZSIgKFNDMjQtNjA4MS0wMCkgZm9yIG1vcmUgaW5mb3JtYXRpb24KK29uIHRoZSBERUYgU1RPUiBhbmQgUSBOU1MgTUFQIGNvbW1hbmRzLCBhcyB3ZWxsIGFzICJTYXZlZCBTZWdtZW50cyBQbGFubmluZworYW5kIEFkbWluaXN0cmF0aW9uIiAoU0MyNC02MTE2LTAwKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBEQ1NTZXMuCisKKzFzdCBvcHRpb246CistLS0tLS0tLS0tLQorWW91IGNhbiB1c2UgdGhlIENQIGNvbW1hbmQgREVGIFNUT1IgQ09ORklHIHRvIGRlZmluZSBhICJtZW1vcnkgaG9sZSIgaW4geW91cgorZ3Vlc3QgdmlydHVhbCBzdG9yYWdlIGFyb3VuZCB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgRENTUy4KKworRXhhbXBsZTogREVGIFNUT1IgQ09ORklHIDAuMTQwTSAyMDBNLjIwME0KKworVGhpcyBkZWZpbmVzIHR3byBibG9ja3Mgb2Ygc3RvcmFnZSwgdGhlIGZpcnN0IGlzIDE0ME1CIGluIHNpemUgYW4gYmVnaW5zIGF0CithZGRyZXNzIDBNQiwgdGhlIHNlY29uZCBpcyAyMDBNQiBpbiBzaXplIGFuZCBiZWdpbnMgYXQgYWRkcmVzcyAyMDBNQiwKK3Jlc3VsdGluZyBpbiBhIHRvdGFsIHN0b3JhZ2Ugb2YgMzQwTUIuIE5vdGUgdGhhdCB0aGUgZmlyc3QgYmxvY2sgc2hvdWxkCithbHdheXMgc3RhcnQgYXQgMCBhbmQgYmUgYXQgbGVhc3QgNjRNQiBpbiBzaXplLgorCisybmQgb3B0aW9uOgorLS0tLS0tLS0tLS0KK1lvdXIgZ3Vlc3QgdmlydHVhbCBzdG9yYWdlIGhhcyB0byBlbmQgYmVsb3cgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIERDU1MKK2FuZCB5b3UgaGF2ZSB0byBzcGVjaWZ5IHRoZSAibWVtPSIga2VybmVsIHBhcmFtZXRlciBpbiB5b3VyIHBhcm1maWxlIHdpdGggYQordmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgYWRkcmVzcyBvZiB0aGUgRENTUy4KKworRXhhbXBsZTogREVGIFNUT1IgMTQwTQorCitUaGlzIGRlZmluZXMgMTQwTUIgc3RvcmFnZSBzaXplIGZvciB5b3VyIGd1ZXN0LCB0aGUgcGFyYW1ldGVyICJtZW09MTYwTSIgaXMKK2FkZGVkIHRvIHRoZSBwYXJtZmlsZS4KKworCitVc2VyIEludGVyZmFjZQorPT09PT09PT09PT09PT0KK1RoZSBjaGFyIGRldmljZSBpcyBpbXBsZW1lbnRlZCBhcyBhIGtlcm5lbCBtb2R1bGUgbmFtZWQgIm1vbnJlYWRlciIsCit3aGljaCBjYW4gYmUgbG9hZGVkIHZpYSB0aGUgbW9kcHJvYmUgY29tbWFuZCwgb3IgaXQgY2FuIGJlIGNvbXBpbGVkIGludG8gdGhlCitrZXJuZWwgaW5zdGVhZC4gVGhlcmUgaXMgb25lIG9wdGlvbmFsIG1vZHVsZSAob3Iga2VybmVsKSBwYXJhbWV0ZXIsICJtb25kY3NzIiwKK3RvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIG1vbml0b3IgRENTUy4gSWYgdGhlIG1vZHVsZSBpcyBjb21waWxlZCBpbnRvIHRoZQora2VybmVsLCB0aGUga2VybmVsIHBhcmFtZXRlciAibW9ucmVhZGVyLm1vbmRjc3M9PERDU1MgTkFNRT4iIGNhbiBiZSBzcGVjaWZpZWQKK2luIHRoZSBwYXJtZmlsZS4KKworVGhlIGRlZmF1bHQgbmFtZSBmb3IgdGhlIERDU1MgaXMgIk1PTkRDU1MiIGlmIG5vbmUgaXMgc3BlY2lmaWVkLiBJbiBjYXNlIHRoYXQKK3RoZXJlIGFyZSBvdGhlciB1c2VycyBhbHJlYWR5IGNvbm5lY3RlZCB0byB0aGUgKk1PTklUT1Igc2VydmljZSAoZS5nLgorUGVyZm9ybWFuY2UgVG9vbGtpdCksIHRoZSBtb25pdG9yIERDU1MgaXMgYWxyZWFkeSBkZWZpbmVkIGFuZCB5b3UgaGF2ZSB0byB1c2UKK3RoZSBzYW1lIERDU1MuIFRoZSBDUCBjb21tYW5kIFEgTU9OSVRPUiAoQ2xhc3MgRSBwcml2aWxlZ2VkKSBzaG93cyB0aGUgbmFtZQorb2YgdGhlIG1vbml0b3IgRENTUywgaWYgYWxyZWFkeSBkZWZpbmVkLCBhbmQgdGhlIHVzZXJzIGNvbm5lY3RlZCB0byB0aGUKKypNT05JVE9SIHNlcnZpY2UuCitSZWZlciB0byB0aGUgInovVk0gUGVyZm9ybWFuY2UiIGJvb2sgKFNDMjQtNjEwOS0wMCkgb24gaG93IHRvIGNyZWF0ZSBhIG1vbml0b3IKK0RDU1MgaWYgeW91ciB6L1ZNIGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeSwgeW91IG5lZWQgQ2xhc3MgRSBwcml2aWxlZ2VzIHRvCitkZWZpbmUgYW5kIHNhdmUgYSBEQ1NTLgorCitFeGFtcGxlOgorLS0tLS0tLS0KK21vZHByb2JlIG1vbnJlYWRlciBtb25kY3NzPU1ZRENTUworCitUaGlzIGxvYWRzIHRoZSBtb2R1bGUgYW5kIHNldHMgdGhlIERDU1MgbmFtZSB0byAiTVlEQ1NTIi4KKworTk9URToKKy0tLS0tCitUaGlzIEFQSSBwcm92aWRlcyBubyBpbnRlcmZhY2UgdG8gY29udHJvbCB0aGUgKk1PTklUT1Igc2VydmljZSwgZS5nLiBzcGVjaWZpeQord2hpY2ggZGF0YSBzaG91bGQgYmUgY29sbGVjdGVkLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHRoZSBDUCBjb21tYW5kIE1PTklUT1IKKyhDbGFzcyBFIHByaXZpbGVnZWQpLCBzZWUgIkNQIENvbW1hbmQgYW5kIFV0aWxpdHkgUmVmZXJlbmNlIi4KKworRGV2aWNlIG5vZGVzIHdpdGggdWRldjoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBZnRlciBsb2FkaW5nIHRoZSBtb2R1bGUsIGEgY2hhciBkZXZpY2Ugd2lsbCBiZSBjcmVhdGVkIGFsb25nIHdpdGggdGhlIGRldmljZQorbm9kZSAvPHVkZXYgZGlyZWN0b3J5Pi9tb25yZWFkZXIuCisKK0RldmljZSBub2RlcyB3aXRob3V0IHVkZXY6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91ciBkaXN0cmlidXRpb24gZG9lcyBub3Qgc3VwcG9ydCB1ZGV2LCBhIGRldmljZSBub2RlIHdpbGwgbm90IGJlIGNyZWF0ZWQKK2F1dG9tYXRpY2FsbHkgYW5kIHlvdSBoYXZlIHRvIGNyZWF0ZSBpdCBtYW51YWxseSBhZnRlciBsb2FkaW5nIHRoZSBtb2R1bGUuCitUaGVyZWZvcmUgeW91IG5lZWQgdG8ga25vdyB0aGUgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgb2YgdGhlIGRldmljZS4gVGhlc2UKK251bWJlcnMgY2FuIGJlIGZvdW5kIGluIC9zeXMvY2xhc3MvbWlzYy9tb25yZWFkZXIvZGV2LgorVHlwaW5nIGNhdCAvc3lzL2NsYXNzL21pc2MvbW9ucmVhZGVyL2RldiB3aWxsIGdpdmUgYW4gb3V0cHV0IG9mIHRoZSBmb3JtCis8bWFqb3I+OjxtaW5vcj4uIFRoZSBkZXZpY2Ugbm9kZSBjYW4gYmUgY3JlYXRlZCB2aWEgdGhlIG1rbm9kIGNvbW1hbmQsIGVudGVyCitta25vZCA8bmFtZT4gYyA8bWFqb3I+IDxtaW5vcj4sIHdoZXJlIDxuYW1lPiBpcyB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlIG5vZGUKK3RvIGJlIGNyZWF0ZWQuCisKK0V4YW1wbGU6CistLS0tLS0tLQorIyBtb2Rwcm9iZSBtb25yZWFkZXIKKyMgY2F0IC9zeXMvY2xhc3MvbWlzYy9tb25yZWFkZXIvZGV2CisxMDo2MworIyBta25vZCAvZGV2L21vbnJlYWRlciBjIDEwIDYzCisKK1RoaXMgbG9hZHMgdGhlIG1vZHVsZSB3aXRoIHRoZSBkZWZhdWx0IG1vbml0b3IgRENTUyAoTU9ORENTUykgYW5kIGNyZWF0ZXMgYQorZGV2aWNlIG5vZGUuCisKK0ZpbGUgb3BlcmF0aW9uczoKKy0tLS0tLS0tLS0tLS0tLS0KK1RoZSBmb2xsb3dpbmcgZmlsZSBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQ6IG9wZW4sIHJlbGVhc2UsIHJlYWQsIHBvbGwuCitUaGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlIG1ldGhvZHMgZm9yIHJlYWRpbmc6IGVpdGhlciBub24tYmxvY2tpbmcgcmVhZCBpbgorY29uanVuY3Rpb24gd2l0aCBwb2xsaW5nLCBvciBibG9ja2luZyByZWFkIHdpdGhvdXQgcG9sbGluZy4gSU9DVExzIGFyZSBub3QKK3N1cHBvcnRlZC4KKworUmVhZDoKKy0tLS0tCitSZWFkaW5nIGZyb20gdGhlIGRldmljZSBwcm92aWRlcyBhIDEyIEJ5dGUgbW9uaXRvciBjb250cm9sIGVsZW1lbnQgKE1DRSksCitmb2xsb3dlZCBieSBhIHNldCBvZiBvbmUgb3IgbW9yZSBjb250aWd1b3VzIG1vbml0b3IgcmVjb3JkcyAoc2ltaWxhciB0byB0aGUKK291dHB1dCBvZiB0aGUgQ01TIHV0aWxpdHkgTU9OV1JJVEUgd2l0aG91dCB0aGUgNEsgY29udHJvbCBibG9ja3MpLiBUaGUgTUNFCitjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUgdHlwZSBvZiB0aGUgZm9sbG93aW5nIHJlY29yZCBzZXQgKHNhbXBsZS9ldmVudAorZGF0YSksIHRoZSBtb25pdG9yIGRvbWFpbnMgY29udGFpbmVkIHdpdGhpbiBpdCBhbmQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzcworb2YgdGhlIHJlY29yZCBzZXQgaW4gdGhlIG1vbml0b3IgRENTUy4gVGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzcyBjYW4gYmUgdXNlZAordG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSByZWNvcmQgc2V0LCB0aGUgZW5kIGFkZHJlc3MgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCitsYXN0IGJ5dGUgb2YgZGF0YS4gVGhlIHN0YXJ0IGFkZHJlc3MgaXMgbmVlZGVkIHRvIGhhbmRsZSAiZW5kLW9mLWZyYW1lIiByZWNvcmRzCitjb3JyZWN0bHkgKGRvbWFpbiAxLCByZWNvcmQgMTMpLCBpLmUuIGl0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVjb3JkCitzdGFydCBvZmZzZXQgcmVsYXRpdmUgdG8gYSA0SyBwYWdlIChmcmFtZSkgYm91bmRhcnkuCisKK1NlZSAiQXBwZW5kaXggQTogKk1PTklUT1IiIGluIHRoZSAiei9WTSBQZXJmb3JtYW5jZSIgZG9jdW1lbnQgZm9yIGEgZGVzY3JpcHRpb24KK29mIHRoZSBtb25pdG9yIGNvbnRyb2wgZWxlbWVudCBsYXlvdXQuIFRoZSBsYXlvdXQgb2YgdGhlIG1vbml0b3IgcmVjb3JkcyBjYW4KK2JlIGZvdW5kIGhlcmUgKHovVk0gNS4xKTogaHR0cDovL3d3dy52bS5pYm0uY29tL3B1YnMvbW9uNTEwL2luZGV4Lmh0bWwKKworVGhlIGxheW91dCBvZiB0aGUgZGF0YSBzdHJlYW0gcHJvdmlkZWQgYnkgdGhlIG1vbnJlYWRlciBkZXZpY2UgaXMgYXMgZm9sbG93czoKKy4uLgorPDAgYnl0ZSByZWFkPgorPGZpcnN0IE1DRT4gICAgICAgICAgICAgIFwKKzxmaXJzdCBzZXQgb2YgcmVjb3Jkcz4gICAgfAorLi4uICAgICAgICAgICAgICAgICAgICAgICB8LSBkYXRhIHNldAorPGxhc3QgTUNFPiAgICAgICAgICAgICAgICB8Cis8bGFzdCBzZXQgb2YgcmVjb3Jkcz4gICAgLworPDAgYnl0ZSByZWFkPgorLi4uCisKK1RoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIGNvbWJpbmF0aW9uIG9mIE1DRSBhbmQgY29ycmVzcG9uZGluZyByZWNvcmQgc2V0Cit3aXRoaW4gb25lIGRhdGEgc2V0IGFuZCB0aGUgZW5kIG9mIGVhY2ggZGF0YSBzZXQgaXMgaW5kaWNhdGVkIGJ5IGEgc3VjY2Vzc2Z1bAorcmVhZCB3aXRoIGEgcmV0dXJuIHZhbHVlIG9mIDAgKDAgYnl0ZSByZWFkKS4KK0FueSByZWNlaXZlZCBkYXRhIG11c3QgYmUgY29uc2lkZXJlZCBpbnZhbGlkIHVudGlsIGEgY29tcGxldGUgc2V0IHdhcworcmVhZCBzdWNjZXNzZnVsbHksIGluY2x1ZGluZyB0aGUgY2xvc2luZyAwIGJ5dGUgcmVhZC4gVGhlcmVmb3JlIHlvdSBzaG91bGQKK2Fsd2F5cyByZWFkIHRoZSBjb21wbGV0ZSBzZXQgaW50byBhIGJ1ZmZlciBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgZGF0YS4KKworVGhlIG1heGltdW0gc2l6ZSBvZiBhIGRhdGEgc2V0IGNhbiBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZSBvZiB0aGUKK21vbml0b3IgRENTUywgc28gZGVzaWduIHRoZSBidWZmZXIgYWRlcXVhdGVseSBvciB1c2UgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4KK1RoZSBzaXplIG9mIHRoZSBtb25pdG9yIERDU1Mgd2lsbCBiZSBwcmludGVkIGludG8gc3lzbG9nIGFmdGVyIGxvYWRpbmcgdGhlCittb2R1bGUuIFlvdSBjYW4gYWxzbyB1c2UgdGhlIChDbGFzcyBFIHByaXZpbGVnZWQpIENQIGNvbW1hbmQgUSBOU1MgTUFQIHRvCitsaXN0IGFsbCBhdmFpbGFibGUgc2VnbWVudHMgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZW0uCisKK0FzIHdpdGggbW9zdCBjaGFyIGRldmljZXMsIGVycm9yIGNvbmRpdGlvbnMgYXJlIGluZGljYXRlZCBieSByZXR1cm5pbmcgYQorbmVnYXRpdmUgdmFsdWUgZm9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gSW4gdGhpcyBjYXNlLCB0aGUgZXJybm8gdmFyaWFibGUKK2luZGljYXRlcyB0aGUgZXJyb3IgY29uZGl0aW9uOgorCitFSU86IHJlcGx5IGZhaWxlZCwgcmVhZCBkYXRhIGlzIGludmFsaWQgYW5kIHRoZSBhcHBsaWNhdGlvbgorICAgICBzaG91bGQgZGlzY2FyZCB0aGUgZGF0YSByZWFkIHNpbmNlIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgcmVhZCB3aXRoIDAgc2l6ZS4KK0VGQVVMVDogY29weV90b191c2VyIGZhaWxlZCwgcmVhZCBkYXRhIGlzIGludmFsaWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAgICAgICAgZGlzY2FyZCB0aGUgZGF0YSByZWFkIHNpbmNlIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgcmVhZCB3aXRoIDAgc2l6ZS4KK0VBR0FJTjogb2NjdXJzIG9uIGEgbm9uLWJsb2NraW5nIHJlYWQgaWYgdGhlcmUgaXMgbm8gZGF0YSBhdmFpbGFibGUgYXQgdGhlCisgICAgICAgIG1vbWVudC4gVGhlcmUgaXMgbm8gZGF0YSBtaXNzaW5nIG9yIGNvcnJ1cHRlZCwganVzdCB0cnkgYWdhaW4gb3IgcmF0aGVyCisgICAgICAgIHVzZSBwb2xsaW5nIGZvciBub24tYmxvY2tpbmcgcmVhZHMuCitFT1ZFUkZMT1c6IG1lc3NhZ2UgbGltaXQgcmVhY2hlZCwgdGhlIGRhdGEgcmVhZCBzaW5jZSB0aGUgbGFzdCBzdWNjZXNzZnVsCisgICAgICAgICAgIHJlYWQgd2l0aCAwIHNpemUgaXMgdmFsaWQgYnV0IHN1YnNlcXVlbnQgcmVjb3JkcyBtYXkgYmUgbWlzc2luZy4KKworSW4gdGhlIGxhc3QgY2FzZSAoRU9WRVJGTE9XKSB0aGVyZSBtYXkgYmUgbWlzc2luZyBkYXRhLCBpbiB0aGUgZmlyc3QgdHdvIGNhc2VzCisoRUlPLCBFRkFVTFQpIHRoZXJlIHdpbGwgYmUgbWlzc2luZyBkYXRhLiBJdCdzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiBpdCB3aWxsCitjb250aW51ZSByZWFkaW5nIHN1YnNlcXVlbnQgZGF0YSBvciByYXRoZXIgZXhpdC4KKworT3BlbjoKKy0tLS0tCitPbmx5IG9uZSB1c2VyIGlzIGFsbG93ZWQgdG8gb3BlbiB0aGUgY2hhciBkZXZpY2UuIElmIGl0IGlzIGFscmVhZHkgaW4gdXNlLCB0aGUKK29wZW4gZnVuY3Rpb24gd2lsbCBmYWlsIChyZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSkgYW5kIHNldCBlcnJubyB0byBFQlVTWS4KK1RoZSBvcGVuIGZ1bmN0aW9uIG1heSBhbHNvIGZhaWwgaWYgYW4gSVVDViBjb25uZWN0aW9uIHRvIHRoZSAqTU9OSVRPUiBzZXJ2aWNlCitjYW5ub3QgYmUgZXN0YWJsaXNoZWQuIEluIHRoaXMgY2FzZSBlcnJubyB3aWxsIGJlIHNldCB0byBFSU8gYW5kIGFuIGVycm9yCittZXNzYWdlIHdpdGggYW4gSVBVU0VSIFNFVkVSIGNvZGUgd2lsbCBiZSBwcmludGVkIGludG8gc3lzbG9nLiBUaGUgSVBVU0VSIFNFVkVSCitjb2RlcyBhcmUgZGVzY3JpYmVkIGluIHRoZSAiei9WTSBQZXJmb3JtYW5jZSIgYm9vaywgQXBwZW5kaXggQS4KKworTk9URToKKy0tLS0tCitBcyBzb29uIGFzIHRoZSBkZXZpY2UgaXMgb3BlbmVkLCBpbmNvbWluZyBtZXNzYWdlcyB3aWxsIGJlIGFjY2VwdGVkIGFuZCB0aGV5Cit3aWxsIGFjY291bnQgZm9yIHRoZSBtZXNzYWdlIGxpbWl0LCBpLmUuIG9wZW5pbmcgdGhlIGRldmljZSB3aXRob3V0IHJlYWRpbmcKK2Zyb20gaXQgd2lsbCBwcm92b2tlIHRoZSAibWVzc2FnZSBsaW1pdCByZWFjaGVkIiBlcnJvciAoRU9WRVJGTE9XIGVycm9yIGNvZGUpCitldmVudHVhbGx5LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxY2Q5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dApAQCAtMCwwICsxLDYxNSBAQAorUzM5MCBEZWJ1ZyBGZWF0dXJlCis9PT09PT09PT09PT09PT09PT0KKworZmlsZXM6IGFyY2gvczM5MC9rZXJuZWwvZGVidWcuYworICAgICAgIGluY2x1ZGUvYXNtLXMzOTAvZGVidWcuaAorCitEZXNjcmlwdGlvbjoKKy0tLS0tLS0tLS0tLQorVGhlIGdvYWwgb2YgdGhpcyBmZWF0dXJlIGlzIHRvIHByb3ZpZGUgYSBrZXJuZWwgZGVidWcgbG9nZ2luZyBBUEkgCit3aGVyZSBsb2cgcmVjb3JkcyBjYW4gYmUgc3RvcmVkIGVmZmljaWVudGx5IGluIG1lbW9yeSwgd2hlcmUgZWFjaCBjb21wb25lbnQgCisoZS5nLiBkZXZpY2UgZHJpdmVycykgY2FuIGhhdmUgb25lIHNlcGFyYXRlIGRlYnVnIGxvZy4KK09uZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gaW5zcGVjdCB0aGUgZGVidWcgbG9ncyBhZnRlciBhIHByb2R1Y3Rpb24gc3lzdGVtIGNyYXNoCitpbiBvcmRlciB0byBhbmFseXplIHRoZSByZWFzb24gZm9yIHRoZSBjcmFzaC4KK0lmIHRoZSBzeXN0ZW0gc3RpbGwgcnVucyBidXQgb25seSBhIHN1YmNvbXBvbmVudCB3aGljaCB1c2VzIGRiZiBmYWlsZXMsCitpdCBpcyBwb3NzaWJsZSB0byBsb29rIGF0IHRoZSBkZWJ1ZyBsb2dzIG9uIGEgbGl2ZSBzeXN0ZW0gdmlhIHRoZSBMaW51eCBwcm9jCitmaWxlc3lzdGVtLgorVGhlIGRlYnVnIGZlYXR1cmUgbWF5IGFsc28gdmVyeSB1c2VmdWwgZm9yIGtlcm5lbCBhbmQgZHJpdmVyIGRldmVsb3BtZW50LgorCitEZXNpZ246CistLS0tLS0tCitLZXJuZWwgY29tcG9uZW50cyAoZS5nLiBkZXZpY2UgZHJpdmVycykgY2FuIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgYXQgdGhlIGRlYnVnIAorZmVhdHVyZSB3aXRoIHRoZSBmdW5jdGlvbiBjYWxsIGRlYnVnX3JlZ2lzdGVyKCkuIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSAKK2RlYnVnIGxvZyBmb3IgdGhlIGNhbGxlci4gRm9yIGVhY2ggZGVidWcgbG9nIGV4aXN0cyBhIG51bWJlciBvZiBkZWJ1ZyBhcmVhcyAKK3doZXJlIGV4YWN0bHkgb25lIGlzIGFjdGl2ZSBhdCBvbmUgdGltZS4gIEVhY2ggZGVidWcgYXJlYSBjb25zaXN0cyBvZiBjb250aWd1b3VzCitwYWdlcyBpbiBtZW1vcnkuIEluIHRoZSBkZWJ1ZyBhcmVhcyB0aGVyZSBhcmUgc3RvcmVkIGRlYnVnIGVudHJpZXMgKGxvZyByZWNvcmRzKQord2hpY2ggYXJlIHdyaXR0ZW4gYnkgZXZlbnQtIGFuZCBleGNlcHRpb24tY2FsbHMuIAorCitBbiBldmVudC1jYWxsIHdyaXRlcyB0aGUgc3BlY2lmaWVkIGRlYnVnIGVudHJ5IHRvIHRoZSBhY3RpdmUgZGVidWcKK2FyZWEgYW5kIHVwZGF0ZXMgdGhlIGxvZyBwb2ludGVyIGZvciB0aGUgYWN0aXZlIGFyZWEuIElmIHRoZSBlbmQgCitvZiB0aGUgYWN0aXZlIGRlYnVnIGFyZWEgaXMgcmVhY2hlZCwgYSB3cmFwIGFyb3VuZCBpcyBkb25lIChyaW5nIGJ1ZmZlcikgCithbmQgdGhlIG5leHQgZGVidWcgZW50cnkgd2lsbCBiZSB3cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFjdGl2ZSAKK2RlYnVnIGFyZWEuCisKK0FuIGV4Y2VwdGlvbi1jYWxsIHdyaXRlcyB0aGUgc3BlY2lmaWVkIGRlYnVnIGVudHJ5IHRvIHRoZSBsb2cgYW5kCitzd2l0Y2hlcyB0byB0aGUgbmV4dCBkZWJ1ZyBhcmVhLiBUaGlzIGlzIGRvbmUgaW4gb3JkZXIgdG8gYmUgc3VyZQordGhhdCB0aGUgcmVjb3JkcyB3aGljaCBkZXNjcmliZSB0aGUgb3JpZ2luIG9mIHRoZSBleGNlcHRpb24gYXJlIG5vdAorb3ZlcndyaXR0ZW4gd2hlbiBhIHdyYXAgYXJvdW5kIGZvciB0aGUgY3VycmVudCBhcmVhIG9jY3Vycy4KKworVGhlIGRlYnVnIGFyZWFzIGl0c2VsdmUgYXJlIGFsc28gb3JkZXJlZCBpbiBmb3JtIG9mIGEgcmluZyBidWZmZXIuIAorV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIHRoZSBsYXN0IGRlYnVnIGFyZWEsIHRoZSBmb2xsb3dpbmcgZGVidWcgCitlbnRyaWVzIGFyZSB0aGVuIHdyaXR0ZW4gYWdhaW4gaW4gdGhlIHZlcnkgZmlyc3QgYXJlYS4KKworVGhlcmUgYXJlIHRocmVlIHZlcnNpb25zIGZvciB0aGUgZXZlbnQtIGFuZCBleGNlcHRpb24tY2FsbHM6IE9uZSBmb3IKK2xvZ2dpbmcgcmF3IGRhdGEsIG9uZSBmb3IgdGV4dCBhbmQgb25lIGZvciBudW1iZXJzLgorCitFYWNoIGRlYnVnIGVudHJ5IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGF0YToKKworLSBUaW1lc3RhbXAKKy0gQ3B1LU51bWJlciBvZiBjYWxsaW5nIHRhc2sKKy0gTGV2ZWwgb2YgZGVidWcgZW50cnkgKDAuLi42KQorLSBSZXR1cm4gQWRkcmVzcyB0byBjYWxsZXIKKy0gRmxhZywgaWYgZW50cnkgaXMgYW4gZXhjZXB0aW9uIG9yIG5vdAorCitUaGUgZGVidWcgbG9ncyBjYW4gYmUgaW5zcGVjdGVkIGluIGEgbGl2ZSBzeXN0ZW0gdGhyb3VnaCBlbnRyaWVzIGluCit0aGUgcHJvYy1maWxlc3lzdGVtLiBVbmRlciB0aGUgcGF0aCAvcHJvYy9zMzkwZGJmIHRoZXJlIGlzIAorYSBkaXJlY3RvcnkgZm9yIGVhY2ggcmVnaXN0ZXJlZCBjb21wb25lbnQsIHdoaWNoIGlzIG5hbWVkIGxpa2UgdGhlCitjb3JyZXNwb25kaW5nIGNvbXBvbmVudC4KKworVGhlIGNvbnRlbnQgb2YgdGhlIGRpcmVjdG9yaWVzIGFyZSBmaWxlcyB3aGljaCByZXByZXNlbnQgZGlmZmVyZW50IHZpZXdzCit0byB0aGUgZGVidWcgbG9nLiBFYWNoIGNvbXBvbmVudCBjYW4gZGVjaWRlIHdoaWNoIHZpZXdzIHNob3VsZCBiZQordXNlZCB0aHJvdWdoIHJlZ2lzdGVyaW5nIHRoZW0gd2l0aCB0aGUgZnVuY3Rpb24gZGVidWdfcmVnaXN0ZXJfdmlldygpLgorUHJlZGVmaW5lZCB2aWV3cyBmb3IgaGV4L2FzY2lpLCBzcHJpbnRmIGFuZCByYXcgYmluYXJ5IGRhdGEgYXJlIHByb3ZpZGVkLgorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkZWZpbmUgb3RoZXIgdmlld3MuIFRoZSBjb250ZW50IG9mCithIHZpZXcgY2FuIGJlIGluc3BlY3RlZCBzaW1wbHkgYnkgcmVhZGluZyB0aGUgY29ycmVzcG9uZGluZyBwcm9jIGZpbGUuCisKK0FsbCBkZWJ1ZyBsb2dzIGhhdmUgYW4gYW4gYWN0dWFsIGRlYnVnIGxldmVsIChyYW5nZSBmcm9tIDAgdG8gNikuCitUaGUgZGVmYXVsdCBsZXZlbCBpcyAzLiBFdmVudCBhbmQgRXhjZXB0aW9uIGZ1bmN0aW9ucyBoYXZlIGEgJ2xldmVsJworcGFyYW1ldGVyLiBPbmx5IGRlYnVnIGVudHJpZXMgd2l0aCBhIGxldmVsIHRoYXQgaXMgbG93ZXIgb3IgZXF1YWwKK3RoYW4gdGhlIGFjdHVhbCBsZXZlbCBhcmUgd3JpdHRlbiB0byB0aGUgbG9nLiBUaGlzIG1lYW5zLCB3aGVuCit3cml0aW5nIGV2ZW50cywgaGlnaCBwcmlvcml0eSBsb2cgZW50cmllcyBzaG91bGQgaGF2ZSBhIGxvdyBsZXZlbAordmFsdWUgd2hlcmVhcyBsb3cgcHJpb3JpdHkgZW50cmllcyBzaG91bGQgaGF2ZSBhIGhpZ2ggb25lLgorVGhlIGFjdHVhbCBkZWJ1ZyBsZXZlbCBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSBoZWxwIG9mIHRoZSBwcm9jLWZpbGVzeXN0ZW0gCit0aHJvdWdoIHdyaXRpbmcgYSBudW1iZXIgc3RyaW5nICJ4IiB0byB0aGUgJ2xldmVsJyBwcm9jIGZpbGUgd2hpY2ggaXMKK3Byb3ZpZGVkIGZvciBldmVyeSBkZWJ1ZyBsb2cuIERlYnVnZ2luZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIGNvbXBsZXRlbHkKK2J5IHVzaW5nICItIiBvbiB0aGUgJ2xldmVsJyBwcm9jIGZpbGUuCisKK0V4YW1wbGU6CisKKz4gZWNobyAiLSIgPiAvcHJvYy9zMzkwZGJmL2Rhc2QvbGV2ZWwKKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkZWFjdGl2YXRlIHRoZSBkZWJ1ZyBmZWF0dXJlIGdsb2JhbGx5IGZvciBldmVyeQorZGVidWcgbG9nLiBZb3UgY2FuIGNoYW5nZSB0aGUgYmVoYXZpb3IgdXNpbmcgIDIgc3lzY3RsIHBhcmFtZXRlcnMgaW4KKy9wcm9jL3N5cy9zMzkwZGJmOgorVGhlcmUgYXJlIGN1cnJlbnRseSAyIHBvc3NpYmxlIHRyaWdnZXJzLCB3aGljaCBzdG9wIHRoZSAgZGVidWcgZmVhdHVyZQorZ2xvYmFsbHkuIFRoZSBmaXJzdCBwb3NzYmlsaXR5IGlzIHRvIHVzZSB0aGUgImRlYnVnX2FjdGl2ZSIgc3lzY3RsLiBJZgorc2V0IHRvIDEgdGhlIGRlYnVnIGZlYXR1cmUgaXMgcnVubmluZy4gSWYgImRlYnVnX2FjdGl2ZSIgaXMgc2V0IHRvIDAgdGhlCitkZWJ1ZyBmZWF0dXJlIGlzIHR1cm5lZCBvZmYuCitUaGUgc2Vjb25kIHRyaWdnZXIgd2hpY2ggc3RvcHMgdGhlIGRlYnVnIGZlYXR1cmUgaXMgYW4ga2VybmVsIG9vcHMuCitUaGF0IHByZXZlbnRzIHRoZSBkZWJ1ZyBmZWF0dXJlIGZyb20gb3ZlcndyaXRpbmcgZGVidWcgaW5mb3JtYXRpb24gdGhhdAoraGFwcGVuZWQgYmVmb3JlIHRoZSBvb3BzLiBBZnRlciBhbiBvb3BzIHlvdSBjYW4gcmVhY3RpdmF0ZSB0aGUgZGVidWcgZmVhdHVyZQorYnkgcGlwaW5nIDEgdG8gL3Byb2Mvc3lzL3MzOTBkYmYvZGVidWdfYWN0aXZlLiBOZXZlcnRoZWxlc3MsIGl0cyBub3QKK3N1Z2dlc3RlZCB0byB1c2UgYW4gb29wc2VkIGtlcm5lbCBpbiBhbiBwcm9kdWN0aW9uIGVudmlyb25tZW50LgorSWYgeW91IHdhbnQgdG8gZGlzYWxsb3cgdGhlIGRlYWN0aXZhdGlvbiBvZiB0aGUgZGVidWcgZmVhdHVyZSwgeW91IGNhbiB1c2UKK3RoZSAiZGVidWdfc3RvcHBhYmxlIiBzeXNjdGwuIElmIHlvdSBzZXQgImRlYnVnX3N0b3BwYWJsZSIgdG8gMCB0aGUgZGVidWcKK2ZlYXR1cmUgY2Fubm90IGJlIHN0b3BwZWQuIElmIHRoZSBkZWJ1ZyBmZWF0dXJlIGlzIGFscmVhZHkgc3RvcHBlZCwgaXQKK3dpbGwgc3RheSBkZWFjdGl2YXRlZC4KKworS2VybmVsIEludGVyZmFjZXM6CistLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfaW5mb190ICpkZWJ1Z19yZWdpc3RlcihjaGFyICpuYW1lLCBpbnQgcGFnZXNfaW5kZXgsIGludCBucl9hcmVhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9zaXplKTsKKworUGFyYW1ldGVyOiAgICBuYW1lOiAgICAgICAgTmFtZSBvZiBkZWJ1ZyBsb2cgKGUuZy4gdXNlZCBmb3IgcHJvYyBlbnRyeSkgCisgICAgICAgICAgICAgIHBhZ2VzX2luZGV4OiAyXnBhZ2VzX2luZGV4IHBhZ2VzIHdpbGwgYmUgYWxsb2NhdGVkIHBlciBhcmVhCisgICAgICAgICAgICAgIG5yX2FyZWFzOiAgICBudW1iZXIgb2YgZGVidWcgYXJlYXMKKyAgICAgICAgICAgICAgYnVmX3NpemU6ICAgIHNpemUgb2YgZGF0YSBhcmVhIGluIGVhY2ggZGVidWcgZW50cnkKKworUmV0dXJuIFZhbHVlOiBIYW5kbGUgZm9yIGdlbmVyYXRlZCBkZWJ1ZyBhcmVhICAgCisgICAgICAgICAgICAgIE5VTEwgaWYgcmVnaXN0ZXIgZmFpbGVkIAorCitEZXNjcmlwdGlvbjogIEFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgZGVidWcgbG9nICAgICAKKyAgICAgICAgICAgICAgTXVzdCBub3QgYmUgY2FsbGVkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGRlYnVnX3VucmVnaXN0ZXIgKGRlYnVnX2luZm9fdCAqIGlkKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgaGFuZGxlIGZvciBkZWJ1ZyBsb2cgIAorCitSZXR1cm4gVmFsdWU6ICBub25lIAorCitEZXNjcmlwdGlvbjogICBmcmVlcyBtZW1vcnkgZm9yIGEgZGVidWcgbG9nICAgICAKKyAgICAgICAgICAgICAgIE11c3Qgbm90IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBkZWJ1Z19zZXRfbGV2ZWwgKGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbmV3X2xldmVsKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgICAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBuZXdfbGV2ZWw6IG5ldyBkZWJ1ZyBsZXZlbCAKKworUmV0dXJuIFZhbHVlOiAgbm9uZSAKKworRGVzY3JpcHRpb246ICAgU2V0cyBuZXcgYWN0dWFsIGRlYnVnIGxldmVsIGlmIG5ld19sZXZlbCBpcyB2YWxpZC4gCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK3ZvaWQgZGVidWdfc3RvcF9hbGwodm9pZCk7CisKK1BhcmFtZXRlcjogICAgIG5vbmUKKworUmV0dXJuIFZhbHVlOiAgbm9uZQorCitEZXNjcmlwdGlvbjogICBzdG9wcyB0aGUgZGVidWcgZmVhdHVyZSBpZiBzdG9wcGluZyBpcyBhbGxvd2VkLiBDdXJyZW50bHkKKyAgICAgICAgICAgICAgIHVzZWQgaW4gY2FzZSBvZiBhIGtlcm5lbCBvb3BzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlYnVnX2VudHJ5X3QqIGRlYnVnX2V2ZW50IChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHZvaWQqIGRhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBwb2ludGVyIHRvIGRhdGEgZm9yIGRlYnVnIGVudHJ5ICAKKyAgICAgICAgICAgICAgIGxlbmd0aDogbGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMgICAgICAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCA8PSBhY3R1YWwgCisgICAgICAgICAgICAgICBkZWJ1ZyBsZXZlbCkgICAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfaW50X2V2ZW50IChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRhdGEpOworZGVidWdfZW50cnlfdCogZGVidWdfbG9uZ19ldmVudChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBpbnRlZ2VyIHZhbHVlIGZvciBkZWJ1ZyBlbnRyeSAgICAgICAgICAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCA8PSBhY3R1YWwgCisgICAgICAgICAgICAgICBkZWJ1ZyBsZXZlbCkgICAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfdGV4dF9ldmVudCAoZGVidWdfaW5mb190ICogaWQsIGludCBsZXZlbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBsZXZlbDogIGRlYnVnIGxldmVsICAgICAgICAgICAKKyAgICAgICAgICAgICAgIGRhdGE6ICAgc3RyaW5nIGZvciBkZWJ1ZyBlbnRyeSAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IGluIGFzY2lpIGZvcm1hdCB0byBhY3RpdmUgZGVidWcgYXJlYSAKKyAgICAgICAgICAgICAgIChpZiBsZXZlbCA8PSBhY3R1YWwgZGVidWcgbGV2ZWwpICAgICAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19zcHJpbnRmX2V2ZW50IChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHN0cmluZywuLi4pOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgaGFuZGxlIGZvciBkZWJ1ZyBsb2cgCisgICAgICAgICAgICAgICBsZXZlbDogZGVidWcgbGV2ZWwKKyAgICAgICAgICAgICAgIHN0cmluZzogZm9ybWF0IHN0cmluZyBmb3IgZGVidWcgZW50cnkgCisgICAgICAgICAgICAgICAuLi46IHZhcmFyZ3MgdXNlZCBhcyBpbiBzcHJpbnRmKCkKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5CisKK0Rlc2NyaXB0aW9uOiAgIHdyaXRlcyBkZWJ1ZyBlbnRyeSB3aXRoIGZvcm1hdCBzdHJpbmcgYW5kIHZhcmFyZ3MgKGxvbmdzKSB0byAKKyAgICAgICAgICAgICAgIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCAkPD0kIGFjdHVhbCBkZWJ1ZyBsZXZlbCkuIAorICAgICAgICAgICAgICAgZmxvYXRzIGFuZCBsb25nIGxvbmcgZGF0YXR5cGVzIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmFyZ3MuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19leGNlcHRpb24gKGRlYnVnX2luZm9fdCogaWQsIGludCBsZXZlbCwgdm9pZCogZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBwb2ludGVyIHRvIGRhdGEgZm9yIGRlYnVnIGVudHJ5ICAKKyAgICAgICAgICAgICAgIGxlbmd0aDogbGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMgICAgICAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCA8PSBhY3R1YWwgCisgICAgICAgICAgICAgICBkZWJ1ZyBsZXZlbCkgYW5kIHN3aXRjaGVzIHRvIG5leHQgZGVidWcgYXJlYSAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfaW50X2V4Y2VwdGlvbiAoZGVidWdfaW5mb190ICogaWQsIGludCBsZXZlbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSk7CitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19sb25nX2V4Y2VwdGlvbihkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBsZXZlbDogIGRlYnVnIGxldmVsICAgICAgICAgICAKKyAgICAgICAgICAgICAgIGRhdGE6ICAgaW50ZWdlciB2YWx1ZSBmb3IgZGVidWcgZW50cnkgICAgICAgICAgIAorCitSZXR1cm4gVmFsdWU6ICBBZGRyZXNzIG9mIHdyaXR0ZW4gZGVidWcgZW50cnkgCisKK0Rlc2NyaXB0aW9uOiAgIHdyaXRlcyBkZWJ1ZyBlbnRyeSB0byBhY3RpdmUgZGVidWcgYXJlYSAoaWYgbGV2ZWwgPD0gYWN0dWFsIAorICAgICAgICAgICAgICAgZGVidWcgbGV2ZWwpIGFuZCBzd2l0Y2hlcyB0byBuZXh0IGRlYnVnIGFyZWEgIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlYnVnX2VudHJ5X3QqIGRlYnVnX3RleHRfZXhjZXB0aW9uIChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBsZXZlbDogIGRlYnVnIGxldmVsICAgICAgICAgICAKKyAgICAgICAgICAgICAgIGRhdGE6ICAgc3RyaW5nIGZvciBkZWJ1ZyBlbnRyeSAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IGluIGFzY2lpIGZvcm1hdCB0byBhY3RpdmUgZGVidWcgYXJlYSAKKyAgICAgICAgICAgICAgIChpZiBsZXZlbCA8PSBhY3R1YWwgZGVidWcgbGV2ZWwpIGFuZCBzd2l0Y2hlcyB0byBuZXh0IGRlYnVnIAorICAgICAgICAgICAgICAgYXJlYSAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfc3ByaW50Zl9leGNlcHRpb24gKGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogc3RyaW5nLC4uLik7CisKK1BhcmFtZXRlcjogICAgIGlkOiAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBsZXZlbDogZGVidWcgbGV2ZWwgIAorICAgICAgICAgICAgICAgc3RyaW5nOiBmb3JtYXQgc3RyaW5nIGZvciBkZWJ1ZyBlbnRyeSAgCisgICAgICAgICAgICAgICAuLi46IHZhcmFyZ3MgdXNlZCBhcyBpbiBzcHJpbnRmKCkKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5IAorCitEZXNjcmlwdGlvbjogICB3cml0ZXMgZGVidWcgZW50cnkgd2l0aCBmb3JtYXQgc3RyaW5nIGFuZCB2YXJhcmdzIChsb25ncykgdG8gCisgICAgICAgICAgICAgICBhY3RpdmUgZGVidWcgYXJlYSAoaWYgbGV2ZWwgJDw9JCBhY3R1YWwgZGVidWcgbGV2ZWwpIGFuZAorICAgICAgICAgICAgICAgc3dpdGNoZXMgdG8gbmV4dCBkZWJ1ZyBhcmVhLiAKKyAgICAgICAgICAgICAgIGZsb2F0cyBhbmQgbG9uZyBsb25nIGRhdGF0eXBlcyBjYW5ub3QgYmUgdXNlZCBhcyB2YXJhcmdzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW50IGRlYnVnX3JlZ2lzdGVyX3ZpZXcgKGRlYnVnX2luZm9fdCAqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldyk7CisKK1BhcmFtZXRlcjogICAgIGlkOiAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICB2aWV3OiAgcG9pbnRlciB0byBkZWJ1ZyB2aWV3IHN0cnVjdCAKKworUmV0dXJuIFZhbHVlOiAgMCAgOiBvayAKKyAgICAgICAgICAgICAgIDwgMDogRXJyb3IgCisKK0Rlc2NyaXB0aW9uOiAgIHJlZ2lzdGVycyBuZXcgZGVidWcgdmlldyBhbmQgY3JlYXRlcyBwcm9jIGRpciBlbnRyeSAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgZGVidWdfdW5yZWdpc3Rlcl92aWV3IChkZWJ1Z19pbmZvX3QgKiBpZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcpOyAKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIHZpZXc6ICBwb2ludGVyIHRvIGRlYnVnIHZpZXcgc3RydWN0IAorCitSZXR1cm4gVmFsdWU6ICAwICA6IG9rIAorICAgICAgICAgICAgICAgPCAwOiBFcnJvciAKKworRGVzY3JpcHRpb246ICAgdW5yZWdpc3RlcnMgZGVidWcgdmlldyBhbmQgcmVtb3ZlcyBwcm9jIGRpciBlbnRyeSAKKworCisKK1ByZWRlZmluZWQgdmlld3M6CistLS0tLS0tLS0tLS0tLS0tLQorCitleHRlcm4gc3RydWN0IGRlYnVnX3ZpZXcgZGVidWdfaGV4X2FzY2lpX3ZpZXc7CitleHRlcm4gc3RydWN0IGRlYnVnX3ZpZXcgZGVidWdfcmF3X3ZpZXc7CitleHRlcm4gc3RydWN0IGRlYnVnX3ZpZXcgZGVidWdfc3ByaW50Zl92aWV3OworCitFeGFtcGxlcworLS0tLS0tLS0KKworLyoKKyAqIGhleF9hc2NpaS0gKyByYXctdmlldyBFeGFtcGxlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKworc3RhdGljIGRlYnVnX2luZm9fdCogZGVidWdfaW5mbzsKKworc3RhdGljIGludCBpbml0KHZvaWQpCit7CisgICAgLyogcmVnaXN0ZXIgNCBkZWJ1ZyBhcmVhcyB3aXRoIG9uZSBwYWdlIGVhY2ggYW5kIDQgYnl0ZSBkYXRhIGZpZWxkICovCisKKyAgICBkZWJ1Z19pbmZvID0gZGVidWdfcmVnaXN0ZXIgKCJ0ZXN0IiwgMCwgNCwgNCApOworICAgIGRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGVidWdfaW5mbywmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOworICAgIGRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGVidWdfaW5mbywmZGVidWdfcmF3X3ZpZXcpOworCisgICAgZGVidWdfdGV4dF9ldmVudChkZWJ1Z19pbmZvLCA0ICwgIm9uZSAiKTsKKyAgICBkZWJ1Z19pbnRfZXhjZXB0aW9uKGRlYnVnX2luZm8sIDQsIDQ3MTEpOworICAgIGRlYnVnX2V2ZW50KGRlYnVnX2luZm8sIDMsICZkZWJ1Z19pbmZvLCA0KTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwKHZvaWQpCit7CisgICAgZGVidWdfdW5yZWdpc3RlciAoZGVidWdfaW5mbyk7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoY2xlYW51cCk7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKgorICogc3ByaW50Zi12aWV3IEV4YW1wbGUKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCitzdGF0aWMgZGVidWdfaW5mb190KiBkZWJ1Z19pbmZvOworCitzdGF0aWMgaW50IGluaXQodm9pZCkKK3sKKyAgICAvKiByZWdpc3RlciA0IGRlYnVnIGFyZWFzIHdpdGggb25lIHBhZ2UgZWFjaCBhbmQgZGF0YSBmaWVsZCBmb3IgKi8KKyAgICAvKiBmb3JtYXQgc3RyaW5nIHBvaW50ZXIgKyAyIHZhcmFyZ3MgKD0gMyAqIHNpemVvZihsb25nKSkgICAgICAgKi8KKworICAgIGRlYnVnX2luZm8gPSBkZWJ1Z19yZWdpc3RlciAoInRlc3QiLCAwLCA0LCBzaXplb2YobG9uZykgKiAzKTsKKyAgICBkZWJ1Z19yZWdpc3Rlcl92aWV3KGRlYnVnX2luZm8sJmRlYnVnX3NwcmludGZfdmlldyk7CisKKyAgICBkZWJ1Z19zcHJpbnRmX2V2ZW50KGRlYnVnX2luZm8sIDIgLCAiZmlyc3QgZXZlbnQgaW4gJXM6JWlcbiIsX19GSUxFX18sX19MSU5FX18pOworICAgIGRlYnVnX3NwcmludGZfZXhjZXB0aW9uKGRlYnVnX2luZm8sIDEsICJwb2ludGVyIHRvIGRlYnVnIGluZm86ICVwXG4iLCZkZWJ1Z19pbmZvKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwKHZvaWQpCit7CisgICAgZGVidWdfdW5yZWdpc3RlciAoZGVidWdfaW5mbyk7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoY2xlYW51cCk7CisKKworCitQcm9jRlMgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tCitWaWV3cyB0byB0aGUgZGVidWcgbG9ncyBjYW4gYmUgaW52ZXN0aWdhdGVkIHRocm91Z2ggcmVhZGluZyB0aGUgY29ycmVzcG9uZGluZyAKK3Byb2MtZmlsZXM6CisKK0V4YW1wbGU6CisKKz4gbHMgL3Byb2MvczM5MGRiZi9kYXNkCitmbHVzaCAgaGV4X2FzY2lpICBsZXZlbCAgICAgIHJhdyAKKz4gY2F0IC9wcm9jL3MzOTBkYmYvZGFzZC9oZXhfYXNjaWkgfCBzb3J0ICsxCiswMCAwMDk3NDczMzI3Mjo2ODAwOTkgMiAtIDAyIDAwMDZhZDdlICAwNyBlYSA0YSA5MCB8IC4uLi4KKzAwIDAwOTc0NzMzMjcyOjY4MjIxMCAyIC0gMDIgMDAwNmFkZTYgIDQ2IDUyIDQ1IDQ1IHwgRlJFRQorMDAgMDA5NzQ3MzMyNzI6NjgyMjEzIDIgLSAwMiAwMDA2YWRmNiAgMDcgZWEgNGEgOTAgfCAuLi4uCiswMCAwMDk3NDczMzI3Mjo2ODIyODEgMSAqIDAyIDAwMDZhYjA4ICA0MSA0YyA0YyA0MyB8IEVYQ1AgCiswMSAwMDk3NDczMzI3Mjo2ODIyODQgMiAtIDAyIDAwMDZhYjE2ICA0NSA0MyA0YiA0NCB8IEVDS0QKKzAxIDAwOTc0NzMzMjcyOjY4MjI4NyAyIC0gMDIgMDAwNmFiMjggIDAwIDAwIDAwIDA0IHwgLi4uLgorMDEgMDA5NzQ3MzMyNzI6NjgyMjg5IDIgLSAwMiAwMDA2YWIzZSAgMDAgMDAgMDAgMjAgfCAuLi4gCiswMSAwMDk3NDczMzI3Mjo2ODIyOTcgMiAtIDAyIDAwMDZhZDdlICAwNyBlYSA0YSA5MCB8IC4uLi4KKzAxIDAwOTc0NzMzMjcyOjY4NDM4NCAyIC0gMDAgMDAwNmFkZTYgIDQ2IDUyIDQ1IDQ1IHwgRlJFRQorMDEgMDA5NzQ3MzMyNzI6Njg0Mzg4IDIgLSAwMCAwMDA2YWRmNiAgMDcgZWEgNGEgOTAgfCAuLi4uCisKK1NlZSBzZWN0aW9uIGFib3V0IHByZWRlZmluZWQgdmlld3MgZm9yIGV4cGxhbmF0aW9uIG9mIHRoZSBhYm92ZSBvdXRwdXQhCisKK0NoYW5naW5nIHRoZSBkZWJ1ZyBsZXZlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4YW1wbGU6CisKKworPiBjYXQgL3Byb2MvczM5MGRiZi9kYXNkL2xldmVsCiszCis+IGVjaG8gIjUiID4gL3Byb2MvczM5MGRiZi9kYXNkL2xldmVsCis+IGNhdCAvcHJvYy9zMzkwZGJmL2Rhc2QvbGV2ZWwKKzUKKworRmx1c2hpbmcgZGVidWcgYXJlYXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitEZWJ1ZyBhcmVhcyBjYW4gYmUgZmx1c2hlZCB3aXRoIHBpcGluZyB0aGUgbnVtYmVyIG9mIHRoZSBkZXNpcmVkCithcmVhICgwLi4ubikgdG8gdGhlIHByb2MgZmlsZSAiZmx1c2giLiBXaGVuIHVzaW5nICItIiBhbGwgZGVidWcgYXJlYXMKK2FyZSBmbHVzaGVkLgorCitFeGFtcGxlczoKKworMS4gRmx1c2ggZGVidWcgYXJlYSAwOgorPiBlY2hvICIwIiA+IC9wcm9jL3MzOTBkYmYvZGFzZC9mbHVzaCAgCisKKzIuIEZsdXNoIGFsbCBkZWJ1ZyBhcmVhczoKKz4gZWNobyAiLSIgPiAvcHJvYy9zMzkwZGJmL2Rhc2QvZmx1c2gKKworU3Rvb3BpbmcgdGhlIGRlYnVnIGZlYXR1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFeGFtcGxlOgorCisxLiBDaGVjayBpZiBzdG9wcGluZyBpcyBhbGxvd2VkCis+IGNhdCAvcHJvYy9zeXMvczM5MGRiZi9kZWJ1Z19zdG9wcGFibGUKKzIuIFN0b3AgZGVidWcgZmVhdHVyZQorPiBlY2hvIDAgPiAvcHJvYy9zeXMvczM5MGRiZi9kZWJ1Z19hY3RpdmUKKworbGNyYXNoIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLQorSXQgaXMgcGxhbm5lZCB0aGF0IHRoZSBkdW1wIGFuYWx5c2lzIHRvb2wgbGNyYXNoIGdldHMgYW4gYWRkaXRpb25hbCBjb21tYW5kCisnczM5MGRiZicgdG8gZGlzcGxheSBhbGwgdGhlIGRlYnVnIGxvZ3MuIFdpdGggdGhpcyB0b29sIGl0IHdpbGwgYmUgcG9zc2libGUgCit0byBpbnZlc3RpZ2F0ZSB0aGUgZGVidWcgbG9ncyBvbiBhIGxpdmUgc3lzdGVtIGFuZCB3aXRoIGEgbWVtb3J5IGR1bXAgYWZ0ZXIgCithIHN5c3RlbSBjcmFzaC4KKworSW52ZXN0aWdhdGluZyByYXcgbWVtb3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09uZSBsYXN0IHBvc3NpYmlsaXR5IHRvIGludmVzdGlnYXRlIHRoZSBkZWJ1ZyBsb2dzIGF0IGEgbGl2ZQorc3lzdGVtIGFuZCBhZnRlciBhIHN5c3RlbSBjcmFzaCBpcyB0byBsb29rIGF0IHRoZSByYXcgbWVtb3J5Cit1bmRlciBWTSBvciBhdCB0aGUgU2VydmljZSBFbGVtZW50LgorSXQgaXMgcG9zc2libGUgdG8gZmluZCB0aGUgYW5rZXIgb2YgdGhlIGRlYnVnLWxvZ3MgdGhyb3VnaAordGhlICdkZWJ1Z19hcmVhX2ZpcnN0JyBzeW1ib2wgaW4gdGhlIFN5c3RlbSBtYXAuIFRoZW4gb25lIGhhcwordG8gZm9sbG93IHRoZSBjb3JyZWN0IHBvaW50ZXJzIG9mIHRoZSBkYXRhLXN0cnVjdHVyZXMgZGVmaW5lZAoraW4gZGVidWcuaCBhbmQgZmluZCB0aGUgZGVidWctYXJlYXMgaW4gbWVtb3J5LgorTm9ybWFsbHkgbW9kdWxlcyB3aGljaCB1c2UgdGhlIGRlYnVnIGZlYXR1cmUgd2lsbCBhbHNvIGhhdmUKK2EgZ2xvYmFsIHZhcmlhYmxlIHdpdGggdGhlIHBvaW50ZXIgdG8gdGhlIGRlYnVnLWxvZ3MuIEZvbGxvd2luZwordGhpcyBwb2ludGVyIGl0IHdpbGwgYWxzbyBiZSBwb3NzaWJsZSB0byBmaW5kIHRoZSBkZWJ1ZyBsb2dzIGluCittZW1vcnkuCisKK0ZvciB0aGlzIG1ldGhvZCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgJzE2ICogeCArIDQnIGJ5dGUgKHggPSAwLi5uKQorZm9yIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgZmllbGQgaW4gZGVidWdfcmVnaXN0ZXIoKSBpbgorb3JkZXIgdG8gc2VlIHRoZSBkZWJ1ZyBlbnRyaWVzIHdlbGwgZm9ybWF0dGVkLgorCisKK1ByZWRlZmluZWQgVmlld3MKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHRocmVlIHByZWRlZmluZWQgdmlld3M6IGhleF9hc2NpaSwgcmF3IGFuZCBzcHJpbnRmLiAKK1RoZSBoZXhfYXNjaWkgdmlldyBzaG93cyB0aGUgZGF0YSBmaWVsZCBpbiBoZXggYW5kIGFzY2lpIHJlcHJlc2VudGF0aW9uIAorKGUuZy4gJzQ1IDQzIDRiIDQ0IHwgRUNLRCcpLiAKK1RoZSByYXcgdmlldyByZXR1cm5zIGEgYnl0ZXN0cmVhbSBhcyB0aGUgZGVidWcgYXJlYXMgYXJlIHN0b3JlZCBpbiBtZW1vcnkuCisKK1RoZSBzcHJpbnRmIHZpZXcgZm9ybWF0cyB0aGUgZGVidWcgZW50cmllcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIHNwcmludGYKK2Z1bmN0aW9uIHdvdWxkIGRvLiBUaGUgc3ByaW50ZiBldmVudC9leHBlY3Rpb24gZnVjdGlvbnMgd3JpdGUgdG8gdGhlIAorZGVidWcgZW50cnkgYSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nIChzaXplID0gc2l6ZW9mKGxvbmcpKSAKK2FuZCBmb3IgZWFjaCB2YXJhcmcgYSBsb25nIHZhbHVlLiBTbyBlLmcuIGZvciBhIGRlYnVnIGVudHJ5IHdpdGggYSBmb3JtYXQgCitzdHJpbmcgcGx1cyB0d28gdmFyYXJncyBvbmUgd291bGQgbmVlZCB0byBhbGxvY2F0ZSBhICgzICogc2l6ZW9mKGxvbmcpKSAKK2J5dGUgZGF0YSBhcmVhIGluIHRoZSBkZWJ1Z19yZWdpc3RlcigpIGZ1bmN0aW9uLgorCisKK05PVEU6IElmIHVzaW5nIHRoZSBzcHJpbnRmIHZpZXcgZG8gTk9UIHVzZSBvdGhlciBldmVudC9leGNlcHRpb24gZnVuY3Rpb25zCit0aGFuIHRoZSBzcHJpbnRmLWV2ZW50IGFuZCAtZXhjZXB0aW9uIGZ1bmN0aW9ucy4KKworVGhlIGZvcm1hdCBvZiB0aGUgaGV4X2FzY2lpIGFuZCBzcHJpbnRmIHZpZXcgaXMgYXMgZm9sbG93czoKKy0gTnVtYmVyIG9mIGFyZWEKKy0gVGltZXN0YW1wIChmb3JtYXR0ZWQgYXMgc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzIHNpbmNlIDAwOjAwOjAwIENvb3JkaW5hdGVkIAorICBVbml2ZXJzYWwgVGltZSAoVVRDKSwgSmFudWFyeSAxLCAxOTcwKQorLSBsZXZlbCBvZiBkZWJ1ZyBlbnRyeQorLSBFeGNlcHRpb24gZmxhZyAoKiA9IEV4Y2VwdGlvbikKKy0gQ3B1LU51bWJlciBvZiBjYWxsaW5nIHRhc2sKKy0gUmV0dXJuIEFkZHJlc3MgdG8gY2FsbGVyCistIGRhdGEgZmllbGQKKworVGhlIGZvcm1hdCBvZiB0aGUgcmF3IHZpZXcgaXM6CistIEhlYWRlciBhcyBkZXNjcmliZWQgaW4gZGVidWcuaAorLSBkYXRhZmllbGQgCisKK0EgdHlwaWNhbCBsaW5lIG9mIHRoZSBoZXhfYXNjaWkgdmlldyB3aWxsIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nIChmaXJzdCBsaW5lIAoraXMgb25seSBmb3IgZXhwbGFuYXRpb24gYW5kIHdpbGwgbm90IGJlIGRpc3BsYXllZCB3aGVuICdjYXRpbmcnIHRoZSB2aWV3KToKKworYXJlYSAgdGltZSAgICAgICAgICAgbGV2ZWwgZXhjZXB0aW9uIGNwdSBjYWxsZXIgICAgZGF0YSAoaGV4ICsgYXNjaWkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDAgICAgMDA5NjQ0MTk0MDk6NDQwNjkwIDEgLSAgICAgICAgIDAwICA4ODAyM2ZlICAgCisKKworRGVmaW5pbmcgdmlld3MKKy0tLS0tLS0tLS0tLS0tCisKK1ZpZXdzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgJ2RlYnVnX3ZpZXcnIHN0cnVjdHVyZS4gVGhlcmUgYXJlIGRlZmluZWQKK2NhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCBhcmUgdXNlZCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0aGUgcHJvYyBmaWxlczoKKworc3RydWN0IGRlYnVnX3ZpZXcgeworICAgICAgICBjaGFyIG5hbWVbREVCVUdfTUFYX1BST0NGX0xFTl07ICAKKyAgICAgICAgZGVidWdfcHJvbG9nX3Byb2NfdCogcHJvbG9nX3Byb2M7IAorICAgICAgICBkZWJ1Z19oZWFkZXJfcHJvY190KiBoZWFkZXJfcHJvYzsKKyAgICAgICAgZGVidWdfZm9ybWF0X3Byb2NfdCogZm9ybWF0X3Byb2M7CisgICAgICAgIGRlYnVnX2lucHV0X3Byb2NfdCogIGlucHV0X3Byb2M7CisJdm9pZCogICAgICAgICAgICAgICAgcHJpdmF0ZV9kYXRhOworfTsKKword2hlcmUKKwordHlwZWRlZiBpbnQgKGRlYnVnX2hlYWRlcl9wcm9jX3QpIChkZWJ1Z19pbmZvX3QqIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVidWdfdmlldyogdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2VudHJ5X3QqIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBvdXRfYnVmKTsKKwordHlwZWRlZiBpbnQgKGRlYnVnX2Zvcm1hdF9wcm9jX3QpIChkZWJ1Z19pbmZvX3QqIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVidWdfdmlldyogdmlldywgY2hhciogb3V0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5fYnVmKTsKK3R5cGVkZWYgaW50IChkZWJ1Z19wcm9sb2dfcHJvY190KSAoZGVidWdfaW5mb190KiBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRlYnVnX3ZpZXcqIHZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dF9idWYpOwordHlwZWRlZiBpbnQgKGRlYnVnX2lucHV0X3Byb2NfdCkgKGRlYnVnX2luZm9fdCogaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRlYnVnX3ZpZXcqIHZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUqIGZpbGUsIGNvbnN0IGNoYXIqIHVzZXJfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbl9idWZfc2l6ZSwgbG9mZl90KiBvZmZzZXQpOworCisKK1RoZSAicHJpdmF0ZV9kYXRhIiBtZW1iZXIgY2FuIGJlIHVzZWQgYXMgcG9pbnRlciB0byB2aWV3IHNwZWNpZmljIGRhdGEuCitJdCBpcyBub3QgdXNlZCBieSB0aGUgZGVidWcgZmVhdHVyZSBpdHNlbGYuCisKK1RoZSBvdXRwdXQgd2hlbiByZWFkaW5nIGEgZGVidWctcHJvYyBmaWxlIGlzIHN0cnVjdHVyZWQgbGlrZSB0aGlzOgorCisicHJvbG9nX3Byb2Mgb3V0cHV0IgorCisiaGVhZGVyX3Byb2Mgb3V0cHV0IDEiICAiZm9ybWF0X3Byb2Mgb3V0cHV0IDEiCisiaGVhZGVyX3Byb2Mgb3V0cHV0IDIiICAiZm9ybWF0X3Byb2Mgb3V0cHV0IDIiCisiaGVhZGVyX3Byb2Mgb3V0cHV0IDMiICAiZm9ybWF0X3Byb2Mgb3V0cHV0IDMiCisuLi4KKworV2hlbiBhIHZpZXcgaXMgcmVhZCBmcm9tIHRoZSBwcm9jIGZzLCB0aGUgRGVidWcgRmVhdHVyZSBjYWxscyB0aGUgCisncHJvbG9nX3Byb2MnIG9uY2UgZm9yIHdyaXRpbmcgdGhlIHByb2xvZy4KK1RoZW4gJ2hlYWRlcl9wcm9jJyBhbmQgJ2Zvcm1hdF9wcm9jJyBhcmUgY2FsbGVkIGZvciBlYWNoIAorZXhpc3RpbmcgZGVidWcgZW50cnkuCisKK1RoZSBpbnB1dF9wcm9jIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBmdW5jdGlvbmFsaXR5IHdoZW4gaXQgaXMgd3JpdHRlbiB0byAKK3RoZSB2aWV3IChlLmcuIGxpa2Ugd2l0aCAnZWNobyAiMCIgPiAvcHJvYy9zMzkwZGJmL2Rhc2QvbGV2ZWwpLgorCitGb3IgaGVhZGVyX3Byb2MgdGhlcmUgY2FuIGJlIHVzZWQgdGhlIGRlZmF1bHQgZnVuY3Rpb24KK2RlYnVnX2RmbHRfaGVhZGVyX2ZuKCkgd2hpY2ggaXMgZGVmaW5lZCBpbiBpbiBkZWJ1Zy5oLgorYW5kIHdoaWNoIHByb2R1Y2VzIHRoZSBzYW1lIGhlYWRlciBvdXRwdXQgYXMgdGhlIHByZWRlZmluZWQgdmlld3MuCitFLmc6CiswMCAwMDk2NDQxOTQwOTo0NDA3NjEgMiAtIDAwIDg4MDIzZWMKKworSW4gb3JkZXIgdG8gc2VlIGhvdyB0byB1c2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24KK29mIHRoZSBkZWZhdWx0IHZpZXdzIQorCitFeGFtcGxlCisKKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKworI2RlZmluZSBVTktOT1dOU1RSICJkYXRhOiAlMDh4IgorCitjb25zdCBjaGFyKiBtZXNzYWdlc1tdID0KK3siVGhpcyBlcnJvci4uLi4uLi4uLi4uXG4iLAorICJUaGF0IGVycm9yLi4uLi4uLi4uLi5cbiIsCisgIlByb2JsZW0uLi4uLi4uLi4uLi4uLlxuIiwKKyAiU29tZXRoaW5nIHdlbnQgd3JvbmcuXG4iLAorICJFdmVyeXRoaW5nIG9rLi4uLi4uLi5cbiIsCisgTlVMTAorfTsKKworc3RhdGljIGludCBkZWJ1Z190ZXN0X2Zvcm1hdF9mbigKKyAgIGRlYnVnX2luZm9fdCAqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywgCisgICBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYKKykKK3sKKyAgaW50IGksIHJjID0gMDsKKworICBpZihpZC0+YnVmX3NpemUgPj0gNCkgeworICAgICBpbnQgbXNnX25yID0gKigoaW50Kilpbl9idWYpOworICAgICBpZihtc2dfbnIgPCBzaXplb2YobWVzc2FnZXMpL3NpemVvZihjaGFyKikgLSAxKQorICAgICAgICByYyArPSBzcHJpbnRmKG91dF9idWYsICIlcyIsIG1lc3NhZ2VzW21zZ19ucl0pOwkKKyAgICAgZWxzZQorICAgICAgICByYyArPSBzcHJpbnRmKG91dF9idWYsIFVOS05PV05TVFIsIG1zZ19ucik7CisgIH0KKyBvdXQ6CisgICByZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBkZWJ1Z192aWV3IGRlYnVnX3Rlc3RfdmlldyA9IHsKKyAgIm15dmlldyIsICAgICAgICAgICAgICAgICAvKiBuYW1lIG9mIHZpZXcgKi8KKyAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBubyBwcm9sb2cgKi8KKyAgJmRlYnVnX2RmbHRfaGVhZGVyX2ZuLCAgICAvKiBkZWZhdWx0IGhlYWRlciBmb3IgZWFjaCBlbnRyeSAqLworICAmZGVidWdfdGVzdF9mb3JtYXRfZm4sICAgIC8qIG91ciBvd24gZm9ybWF0IGZ1bmN0aW9uICovCisgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogbm8gaW5wdXQgZnVuY3Rpb24gKi8KKyAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAvKiBubyBwcml2YXRlIGRhdGEgKi8KK307CisKKz09PT09Cit0ZXN0OgorPT09PT0KK2RlYnVnX2luZm9fdCAqZGVidWdfaW5mbzsKKy4uLgorZGVidWdfaW5mbyA9IGRlYnVnX3JlZ2lzdGVyICgidGVzdCIsIDAsIDQsIDQgKSk7CitkZWJ1Z19yZWdpc3Rlcl92aWV3KGRlYnVnX2luZm8sICZkZWJ1Z190ZXN0X3ZpZXcpOworZm9yKGkgPSAwOyBpIDwgMTA7IGkgKyspIGRlYnVnX2ludF9ldmVudChkZWJ1Z19pbmZvLCAxLCBpKTsKKworPiBjYXQgL3Byb2MvczM5MGRiZi90ZXN0L215dmlldworMDAgMDA5NjQ0MTk3MzQ6NjExNDAyIDEgLSAwMCA4ODA0MmNhICAgVGhpcyBlcnJvci4uLi4uLi4uLi4uCiswMCAwMDk2NDQxOTczNDo2MTE0MDUgMSAtIDAwIDg4MDQyY2EgICBUaGF0IGVycm9yLi4uLi4uLi4uLi4KKzAwIDAwOTY0NDE5NzM0OjYxMTQwOCAxIC0gMDAgODgwNDJjYSAgIFByb2JsZW0uLi4uLi4uLi4uLi4uLgorMDAgMDA5NjQ0MTk3MzQ6NjExNDExIDEgLSAwMCA4ODA0MmNhICAgU29tZXRoaW5nIHdlbnQgd3JvbmcuCiswMCAwMDk2NDQxOTczNDo2MTE0MTQgMSAtIDAwIDg4MDQyY2EgICBFdmVyeXRoaW5nIG9rLi4uLi4uLi4KKzAwIDAwOTY0NDE5NzM0OjYxMTQxNyAxIC0gMDAgODgwNDJjYSAgIGRhdGE6IDAwMDAwMDA1CiswMCAwMDk2NDQxOTczNDo2MTE0MTkgMSAtIDAwIDg4MDQyY2EgICBkYXRhOiAwMDAwMDAwNgorMDAgMDA5NjQ0MTk3MzQ6NjExNDIyIDEgLSAwMCA4ODA0MmNhICAgZGF0YTogMDAwMDAwMDcKKzAwIDAwOTY0NDE5NzM0OjYxMTQyNSAxIC0gMDAgODgwNDJjYSAgIGRhdGE6IDAwMDAwMDA4CiswMCAwMDk2NDQxOTczNDo2MTE0MjggMSAtIDAwIDg4MDQyY2EgICBkYXRhOiAwMDAwMDAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZC1jb2RpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1jb2RpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzVlZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1jb2RpbmcudHh0CkBAIC0wLDAgKzEsMTI2IEBACisgICAgIFJlZmVyZW5jZSBmb3IgdmFyaW91cyBzY2hlZHVsZXItcmVsYXRlZCBtZXRob2RzIGluIHRoZSBPKDEpIHNjaGVkdWxlcgorCQlSb2JlcnQgTG92ZSA8cm1sQHRlY2g5Lm5ldD4sIE1vbnRhVmlzdGEgU29mdHdhcmUKKworCitOb3RlIG1vc3Qgb2YgdGhlc2UgbWV0aG9kcyBhcmUgbG9jYWwgdG8ga2VybmVsL3NjaGVkLmMgLSB0aGlzIGlzIGJ5IGRlc2lnbi4KK1RoZSBzY2hlZHVsZXIgaXMgbWVhbnQgdG8gYmUgc2VsZi1jb250YWluZWQgYW5kIGFic3RyYWN0ZWQgYXdheS4gIFRoaXMgZG9jdW1lbnQKK2lzIHByaW1hcmlseSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NoZWR1bGVyLCBub3QgaW50ZXJmYWNpbmcgdG8gaXQuICBTb21lIG9mCit0aGUgZGlzY3Vzc2VkIGludGVyZmFjZXMsIGhvd2V2ZXIsIGFyZSBnZW5lcmFsIHByb2Nlc3Mvc2NoZWR1bGluZyBtZXRob2RzLgorVGhleSBhcmUgdHlwaWNhbGx5IGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9zY2hlZC5oLgorCisKK01haW4gU2NoZWR1bGluZyBNZXRob2RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIGxvYWRfYmFsYW5jZShydW5xdWV1ZV90ICp0aGlzX3JxLCBpbnQgaWRsZSkKKwlBdHRlbXB0cyB0byBwdWxsIHRhc2tzIGZyb20gb25lIGNwdSB0byBhbm90aGVyIHRvIGJhbGFuY2UgY3B1IHVzYWdlLAorCWlmIG5lZWRlZC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBleHBsaWNpdGx5IGlmIHRoZSBydW5xdWV1ZXMgYXJlCisJaW5iYWxhbmNlZCBvciBwZXJpb2RpY2FsbHkgYnkgdGhlIHRpbWVyIHRpY2suICBQcmlvciB0byBjYWxsaW5nLAorCXRoZSBjdXJyZW50IHJ1bnF1ZXVlIG11c3QgYmUgbG9ja2VkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCit2b2lkIHNjaGVkdWxlKCkKKwlUaGUgbWFpbiBzY2hlZHVsaW5nIGZ1bmN0aW9uLiAgVXBvbiByZXR1cm4sIHRoZSBoaWdoZXN0IHByaW9yaXR5CisJcHJvY2VzcyB3aWxsIGJlIGFjdGl2ZS4KKworCitMb2NraW5nCistLS0tLS0tCisKK0VhY2ggcnVucXVldWUgaGFzIGl0cyBvd24gbG9jaywgcnEtPmxvY2suICBXaGVuIG11bHRpcGxlIHJ1bnF1ZXVlcyBuZWVkCit0byBiZSBsb2NrZWQsIGxvY2sgYWNxdWlyZXMgbXVzdCBiZSBvcmRlcmVkIGJ5IGFzY2VuZGluZyAmcnVucXVldWUgdmFsdWUuCisKK0Egc3BlY2lmaWMgcnVucXVldWUgaXMgbG9ja2VkIHZpYQorCisJdGFza19ycV9sb2NrKHRhc2tfdCBwaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorCit3aGljaCBkaXNhYmxlcyBwcmVlbXB0aW9uLCBkaXNhYmxlcyBpbnRlcnJ1cHRzLCBhbmQgbG9ja3MgdGhlIHJ1bnF1ZXVlIHBpZCBpcworcnVubmluZyBvbi4gIExpa2V3aXNlLAorCisJdGFza19ycV91bmxvY2sodGFza190IHBpZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCisKK3VubG9ja3MgdGhlIHJ1bnF1ZXVlIHBpZCBpcyBydW5uaW5nIG9uLCByZXN0b3JlcyBpbnRlcnJ1cHRzIHRvIHRoZWlyIHByZXZpb3VzCitzdGF0ZSwgYW5kIHJlZW5hYmxlcyBwcmVlbXB0aW9uLgorCitUaGUgcm91dGluZXMKKworCWRvdWJsZV9ycV9sb2NrKHJ1bnF1ZXVlX3QgKnJxMSwgcnVucXVldWVfdCAqcnEyKQorCithbmQKKworCWRvdWJsZV9ycV91bmxvY2socnVucXVldWVfdCAqcnExLCBydW5xdWV1ZV90ICpycTIpCisKK3NhZmVseSBsb2NrIGFuZCB1bmxvY2ssIHJlc3BlY3RpdmVseSwgdGhlIHR3byBzcGVjaWZpZWQgcnVucXVldWVzLiAgVGhleSBkbworbm90LCBob3dldmVyLCBkaXNhYmxlIGFuZCByZXN0b3JlIGludGVycnVwdHMuICBVc2VycyBhcmUgcmVxdWlyZWQgdG8gZG8gc28KK21hbnVhbGx5IGJlZm9yZSBhbmQgYWZ0ZXIgY2FsbHMuCisKKworVmFsdWVzCistLS0tLS0KKworTUFYX1BSSU8KKwlUaGUgbWF4aW11bSBwcmlvcml0eSBvZiB0aGUgc3lzdGVtLCBzdG9yZWQgaW4gdGhlIHRhc2sgYXMgdGFzay0+cHJpby4KKwlMb3dlciBwcmlvcml0aWVzIGFyZSBoaWdoZXIuICBOb3JtYWwgKG5vbi1SVCkgcHJpb3JpdGllcyByYW5nZSBmcm9tCisJTUFYX1JUX1BSSU8gdG8gKE1BWF9QUklPIC0gMSkuCitNQVhfUlRfUFJJTworCVRoZSBtYXhpbXVtIHJlYWwtdGltZSBwcmlvcml0eSBvZiB0aGUgc3lzdGVtLiAgVmFsaWQgUlQgcHJpb3JpdGllcworCXJhbmdlIGZyb20gMCB0byAoTUFYX1JUX1BSSU8gLSAxKS4KK01BWF9VU0VSX1JUX1BSSU8KKwlUaGUgbWF4aW11bSByZWFsLXRpbWUgcHJpb3JpdHkgdGhhdCBpcyBleHBvcnRlZCB0byB1c2VyLXNwYWNlLiAgU2hvdWxkCisJYWx3YXlzIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBNQVhfUlRfUFJJTy4gIFNldHRpbmcgaXQgbGVzcyBhbGxvd3MKKwlrZXJuZWwgdGhyZWFkcyB0byBoYXZlIGhpZ2hlciBwcmlvcml0aWVzIHRoYW4gYW55IHVzZXItc3BhY2UgdGFzay4KK01JTl9USU1FU0xJQ0UKK01BWF9USU1FU0xJQ0UKKwlSZXNwZWN0aXZlbHksIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHRpbWVzbGljZXMgKHF1YW50YSkgb2YgYSBwcm9jZXNzLgorCitEYXRhCistLS0tCisKK3N0cnVjdCBydW5xdWV1ZQorCVRoZSBtYWluIHBlci1DUFUgcnVucXVldWUgZGF0YSBzdHJ1Y3R1cmUuCitzdHJ1Y3QgdGFza19zdHJ1Y3QKKwlUaGUgbWFpbiBwZXItcHJvY2VzcyBkYXRhIHN0cnVjdHVyZS4KKworCitHZW5lcmFsIE1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLQorCitjcHVfcnEoY3B1KQorCVJldHVybnMgdGhlIHJ1bnF1ZXVlIG9mIHRoZSBzcGVjaWZpZWQgY3B1LgordGhpc19ycSgpCisJUmV0dXJucyB0aGUgcnVucXVldWUgb2YgdGhlIGN1cnJlbnQgY3B1LgordGFza19ycShwaWQpCisJUmV0dXJucyB0aGUgcnVucXVldWUgd2hpY2ggaG9sZHMgdGhlIHNwZWNpZmllZCBwaWQuCitjcHVfY3VycihjcHUpCisJUmV0dXJucyB0aGUgdGFzayBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgZ2l2ZW4gY3B1LgorcnRfdGFzayhwaWQpCisJUmV0dXJucyB0cnVlIGlmIHBpZCBpcyByZWFsLXRpbWUsIGZhbHNlIGlmIG5vdC4KKworCitQcm9jZXNzIENvbnRyb2wgTWV0aG9kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBzZXRfdXNlcl9uaWNlKHRhc2tfdCAqcCwgbG9uZyBuaWNlKQorCVNldHMgdGhlICJuaWNlIiB2YWx1ZSBvZiB0YXNrIHAgdG8gdGhlIGdpdmVuIHZhbHVlLgoraW50IHNldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCisJU2V0cyB0aGUgc2NoZWR1bGluZyBwb2xpY3kgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBnaXZlbiBwaWQuCitpbnQgc2V0X2NwdXNfYWxsb3dlZCh0YXNrX3QgKnAsIHVuc2lnbmVkIGxvbmcgbmV3X21hc2spCisJU2V0cyBhIGdpdmVuIHRhc2sncyBDUFUgYWZmaW5pdHkgYW5kIG1pZ3JhdGVzIGl0IHRvIGEgcHJvcGVyIGNwdS4KKwlDYWxsZXJzIG11c3QgaGF2ZSBhIHZhbGlkIHJlZmVyZW5jZSB0byB0aGUgdGFzayBhbmQgYXNzdXJlIHRoZQorCXRhc2sgbm90IGV4aXQgcHJlbWF0dXJlbHkuICBObyBsb2NrcyBjYW4gYmUgaGVsZCBkdXJpbmcgdGhlIGNhbGwuCitzZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQorCVNldHMgdGhlIGdpdmVuIHRhc2sncyBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCitzZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkKKwlTZXRzIHRoZSBjdXJyZW50IHRhc2sncyBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCit2b2lkIHNldF90c2tfbmVlZF9yZXNjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorCVNldHMgbmVlZF9yZXNjaGVkIGluIHRoZSBnaXZlbiB0YXNrLgordm9pZCBjbGVhcl90c2tfbmVlZF9yZXNjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorCUNsZWFycyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGdpdmVuIHRhc2suCit2b2lkIHNldF9uZWVkX3Jlc2NoZWQoKQorCVNldHMgbmVlZF9yZXNjaGVkIGluIHRoZSBjdXJyZW50IHRhc2suCit2b2lkIGNsZWFyX25lZWRfcmVzY2hlZCgpCisJQ2xlYXJzIG5lZWRfcmVzY2hlZCBpbiB0aGUgY3VycmVudCB0YXNrLgoraW50IG5lZWRfcmVzY2hlZCgpCisJUmV0dXJucyB0cnVlIGlmIG5lZWRfcmVzY2hlZCBpcyBzZXQgaW4gdGhlIGN1cnJlbnQgdGFzaywgZmFsc2UKKwlvdGhlcndpc2UuCit5aWVsZCgpCisJUGxhY2UgdGhlIGN1cnJlbnQgcHJvY2VzcyBhdCB0aGUgZW5kIG9mIHRoZSBydW5xdWV1ZSBhbmQgY2FsbCBzY2hlZHVsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWQtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWQtZGVzaWduLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDA0ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1kZXNpZ24udHh0CkBAIC0wLDAgKzEsMTY1IEBACisJCSAgIEdvYWxzLCBEZXNpZ24gYW5kIEltcGxlbWVudGF0aW9uIG9mIHRoZQorCQkgICAgICBuZXcgdWx0cmEtc2NhbGFibGUgTygxKSBzY2hlZHVsZXIKKworCisgIFRoaXMgaXMgYW4gZWRpdGVkIHZlcnNpb24gb2YgYW4gZW1haWwgSW5nbyBNb2xuYXIgc2VudCB0bworICBsa21sIG9uIDQgSmFuIDIwMDIuICBJdCBkZXNjcmliZXMgdGhlIGdvYWxzLCBkZXNpZ24sIGFuZAorICBpbXBsZW1lbnRhdGlvbiBvZiBJbmdvJ3MgbmV3IHVsdHJhLXNjYWxhYmxlIE8oMSkgc2NoZWR1bGVyLgorICBMYXN0IFVwZGF0ZWQ6IDE4IEFwcmlsIDIwMDIuCisKKworR29hbAorPT09PQorCitUaGUgbWFpbiBnb2FsIG9mIHRoZSBuZXcgc2NoZWR1bGVyIGlzIHRvIGtlZXAgYWxsIHRoZSBnb29kIHRoaW5ncyB3ZSBrbm93CithbmQgbG92ZSBhYm91dCB0aGUgY3VycmVudCBMaW51eCBzY2hlZHVsZXI6CisKKyAtIGdvb2QgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UgZXZlbiBkdXJpbmcgaGlnaCBsb2FkOiBpZiB0aGUgdXNlcgorICAgdHlwZXMgb3IgY2xpY2tzIHRoZW4gdGhlIHN5c3RlbSBtdXN0IHJlYWN0IGluc3RhbnRseSBhbmQgbXVzdCBleGVjdXRlCisgICB0aGUgdXNlciB0YXNrcyBzbW9vdGhseSwgZXZlbiBkdXJpbmcgY29uc2lkZXJhYmxlIGJhY2tncm91bmQgbG9hZC4KKworIC0gZ29vZCBzY2hlZHVsaW5nL3dha2V1cCBwZXJmb3JtYW5jZSB3aXRoIDEtMiBydW5uYWJsZSBwcm9jZXNzZXMuCisKKyAtIGZhaXJuZXNzOiBubyBwcm9jZXNzIHNob3VsZCBzdGF5IHdpdGhvdXQgYW55IHRpbWVzbGljZSBmb3IgYW55CisgICB1bnJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuIE5vIHByb2Nlc3Mgc2hvdWxkIGdldCBhbiB1bmp1c3RseSBoaWdoCisgICBhbW91bnQgb2YgQ1BVIHRpbWUuCisKKyAtIHByaW9yaXRpZXM6IGxlc3MgaW1wb3J0YW50IHRhc2tzIGNhbiBiZSBzdGFydGVkIHdpdGggbG93ZXIgcHJpb3JpdHksCisgICBtb3JlIGltcG9ydGFudCB0YXNrcyB3aXRoIGhpZ2hlciBwcmlvcml0eS4KKworIC0gU01QIGVmZmljaWVuY3k6IG5vIENQVSBzaG91bGQgc3RheSBpZGxlIGlmIHRoZXJlIGlzIHdvcmsgdG8gZG8uCisKKyAtIFNNUCBhZmZpbml0eTogcHJvY2Vzc2VzIHdoaWNoIHJ1biBvbiBvbmUgQ1BVIHNob3VsZCBzdGF5IGFmZmluZSB0bworICAgdGhhdCBDUFUuIFByb2Nlc3NlcyBzaG91bGQgbm90IGJvdW5jZSBiZXR3ZWVuIENQVXMgdG9vIGZyZXF1ZW50bHkuCisKKyAtIHBsdXMgYWRkaXRpb25hbCBzY2hlZHVsZXIgZmVhdHVyZXM6IFJUIHNjaGVkdWxpbmcsIENQVSBiaW5kaW5nLgorCithbmQgdGhlIGdvYWwgaXMgYWxzbyB0byBhZGQgYSBmZXcgbmV3IHRoaW5nczoKKworIC0gZnVsbHkgTygxKSBzY2hlZHVsaW5nLiBBcmUgeW91IHRpcmVkIG9mIHRoZSByZWNhbGN1bGF0aW9uIGxvb3AKKyAgIGJsb3dpbmcgdGhlIEwxIGNhY2hlIGF3YXkgZXZlcnkgbm93IGFuZCB0aGVuPyBEbyB5b3UgdGhpbmsgdGhlIGdvb2RuZXNzCisgICBsb29wIGlzIHRha2luZyBhIGJpdCB0b28gbG9uZyB0byBmaW5pc2ggaWYgdGhlcmUgYXJlIGxvdHMgb2YgcnVubmFibGUKKyAgIHByb2Nlc3Nlcz8gVGhpcyBuZXcgc2NoZWR1bGVyIHRha2VzIG5vIHByaXNvbmVyczogd2FrZXVwKCksIHNjaGVkdWxlKCksCisgICB0aGUgdGltZXIgaW50ZXJydXB0IGFyZSBhbGwgTygxKSBhbGdvcml0aG1zLiBUaGVyZSBpcyBubyByZWNhbGN1bGF0aW9uCisgICBsb29wLiBUaGVyZSBpcyBubyBnb29kbmVzcyBsb29wIGVpdGhlci4KKworIC0gJ3BlcmZlY3QnIFNNUCBzY2FsYWJpbGl0eS4gV2l0aCB0aGUgbmV3IHNjaGVkdWxlciB0aGVyZSBpcyBubyAnYmlnJworICAgcnVucXVldWVfbG9jayBhbnltb3JlIC0gaXQncyBhbGwgcGVyLUNQVSBydW5xdWV1ZXMgYW5kIGxvY2tzIC0gdHdvCisgICB0YXNrcyBvbiB0d28gc2VwYXJhdGUgQ1BVcyBjYW4gd2FrZSB1cCwgc2NoZWR1bGUgYW5kIGNvbnRleHQtc3dpdGNoCisgICBjb21wbGV0ZWx5IGluIHBhcmFsbGVsLCB3aXRob3V0IGFueSBpbnRlcmxvY2tpbmcuIEFsbAorICAgc2NoZWR1bGluZy1yZWxldmFudCBkYXRhIGlzIHN0cnVjdHVyZWQgZm9yIG1heGltdW0gc2NhbGFiaWxpdHkuCisKKyAtIGJldHRlciBTTVAgYWZmaW5pdHkuIFRoZSBvbGQgc2NoZWR1bGVyIGhhcyBhIHBhcnRpY3VsYXIgd2Vha25lc3MgdGhhdAorICAgY2F1c2VzIHRoZSByYW5kb20gYm91bmNpbmcgb2YgdGFza3MgYmV0d2VlbiBDUFVzIGlmL3doZW4gaGlnaGVyCisgICBwcmlvcml0eS9pbnRlcmFjdGl2ZSB0YXNrcywgdGhpcyB3YXMgb2JzZXJ2ZWQgYW5kIHJlcG9ydGVkIGJ5IG1hbnkKKyAgIHBlb3BsZS4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSB0aW1lc2xpY2UgcmVjYWxjdWxhdGlvbiBsb29wIGZpcnN0IG5lZWRzCisgICBldmVyeSBjdXJyZW50bHkgcnVubmluZyB0YXNrIHRvIGNvbnN1bWUgaXRzIHRpbWVzbGljZS4gQnV0IHdoZW4gdGhpcworICAgaGFwcGVucyBvbiBlZy4gYW4gOC13YXkgc3lzdGVtLCB0aGVuIHRoaXMgcHJvcGVydHkgc3RhcnZlcyBhbgorICAgaW5jcmVhc2luZyBudW1iZXIgb2YgQ1BVcyBmcm9tIGV4ZWN1dGluZyBhbnkgcHJvY2Vzcy4gT25jZSB0aGUgbGFzdAorICAgdGFzayB0aGF0IGhhcyBhIHRpbWVzbGljZSBsZWZ0IGhhcyBmaW5pc2hlZCB1c2luZyB1cCB0aGF0IHRpbWVzbGljZSwKKyAgIHRoZSByZWNhbGN1bGF0aW9uIGxvb3AgaXMgdHJpZ2dlcmVkIGFuZCBvdGhlciBDUFVzIGNhbiBzdGFydCBleGVjdXRpbmcKKyAgIHRhc2tzIGFnYWluIC0gYWZ0ZXIgaGF2aW5nIGlkbGVkIGFyb3VuZCBmb3IgYSBudW1iZXIgb2YgdGltZXIgdGlja3MuCisgICBUaGUgbW9yZSBDUFVzLCB0aGUgd29yc2UgdGhpcyBlZmZlY3QuCisKKyAgIEZ1cnRoZXJtb3JlLCB0aGlzIHNhbWUgZWZmZWN0IGNhdXNlcyB0aGUgYm91bmNpbmcgZWZmZWN0IGFzIHdlbGw6CisgICB3aGVuZXZlciB0aGVyZSBpcyBzdWNoIGEgJ3RpbWVzbGljZSBzcXVlZXplJyBvZiB0aGUgZ2xvYmFsIHJ1bnF1ZXVlLAorICAgaWRsZSBwcm9jZXNzb3JzIHN0YXJ0IGV4ZWN1dGluZyB0YXNrcyB3aGljaCBhcmUgbm90IGFmZmluZSB0byB0aGF0IENQVS4KKyAgIChiZWNhdXNlIHRoZSBhZmZpbmUgdGFza3MgaGF2ZSBmaW5pc2hlZCBvZmYgdGhlaXIgdGltZXNsaWNlcyBhbHJlYWR5LikKKworICAgVGhlIG5ldyBzY2hlZHVsZXIgc29sdmVzIHRoaXMgcHJvYmxlbSBieSBkaXN0cmlidXRpbmcgdGltZXNsaWNlcyBvbiBhCisgICBwZXItQ1BVIGJhc2lzLCB3aXRob3V0IGhhdmluZyBhbnkgZ2xvYmFsIHN5bmNocm9uaXphdGlvbiBvcgorICAgcmVjYWxjdWxhdGlvbi4KKworIC0gYmF0Y2ggc2NoZWR1bGluZy4gQSBzaWduaWZpY2FudCBwcm9wb3J0aW9uIG9mIGNvbXB1dGluZy1pbnRlbnNpdmUgdGFza3MKKyAgIGJlbmVmaXQgZnJvbSBiYXRjaC1zY2hlZHVsaW5nLCB3aGVyZSB0aW1lc2xpY2VzIGFyZSBsb25nIGFuZCBwcm9jZXNzZXMKKyAgIGFyZSByb3VuZHJvYmluIHNjaGVkdWxlZC4gVGhlIG5ldyBzY2hlZHVsZXIgZG9lcyBzdWNoIGJhdGNoLXNjaGVkdWxpbmcKKyAgIG9mIHRoZSBsb3dlc3QgcHJpb3JpdHkgdGFza3MgLSBzbyBuaWNlICsxOSBqb2JzIHdpbGwgZ2V0CisgICAnYmF0Y2gtc2NoZWR1bGVkJyBhdXRvbWF0aWNhbGx5LiBXaXRoIHRoaXMgc2NoZWR1bGVyLCBuaWNlICsxOSBqb2JzIGFyZQorICAgaW4gZXNzZW5jZSBTQ0hFRF9JRExFLCBmcm9tIGFuIGludGVyYWN0aXZlbmVzcyBwb2ludCBvZiB2aWV3LgorCisgLSBoYW5kbGUgZXh0cmVtZSBsb2FkcyBtb3JlIHNtb290aGx5LCB3aXRob3V0IGJyZWFrZG93biBhbmQgc2NoZWR1bGluZworICAgc3Rvcm1zLgorCisgLSBPKDEpIFJUIHNjaGVkdWxpbmcuIEZvciB0aG9zZSBSVCBmb2xrcyB3aG8gYXJlIHBhcmFub2lkIGFib3V0IHRoZQorICAgTyhucl9ydW5uaW5nKSBwcm9wZXJ0eSBvZiB0aGUgZ29vZG5lc3MgbG9vcCBhbmQgdGhlIHJlY2FsY3VsYXRpb24gbG9vcC4KKworIC0gcnVuIGZvcmsoKWVkIGNoaWxkcmVuIGJlZm9yZSB0aGUgcGFyZW50LiBBbmRyZWEgaGFzIHBvaW50ZWQgb3V0IHRoZQorICAgYWR2YW50YWdlcyBvZiB0aGlzIGEgZmV3IG1vbnRocyBhZ28sIGJ1dCBwYXRjaGVzIGZvciB0aGlzIGZlYXR1cmUKKyAgIGRvIG5vdCB3b3JrIHdpdGggdGhlIG9sZCBzY2hlZHVsZXIgYXMgd2VsbCBhcyB0aGV5IHNob3VsZCwKKyAgIGJlY2F1c2UgaWRsZSBwcm9jZXNzZXMgb2Z0ZW4gc3RlYWwgdGhlIG5ldyBjaGlsZCBiZWZvcmUgdGhlIGZvcmsoKWluZworICAgQ1BVIGdldHMgdG8gZXhlY3V0ZSBpdC4KKworCitEZXNpZ24KKz09PT09PQorCit0aGUgY29yZSBvZiB0aGUgbmV3IHNjaGVkdWxlciBhcmUgdGhlIGZvbGxvd2luZyBtZWNoYW5pem1zOgorCisgLSAqdHdvKiwgcHJpb3JpdHktb3JkZXJlZCAncHJpb3JpdHkgYXJyYXlzJyBwZXIgQ1BVLiBUaGVyZSBpcyBhbiAnYWN0aXZlJworICAgYXJyYXkgYW5kIGFuICdleHBpcmVkJyBhcnJheS4gVGhlIGFjdGl2ZSBhcnJheSBjb250YWlucyBhbGwgdGFza3MgdGhhdAorICAgYXJlIGFmZmluZSB0byB0aGlzIENQVSBhbmQgaGF2ZSB0aW1lc2xpY2VzIGxlZnQuIFRoZSBleHBpcmVkIGFycmF5CisgICBjb250YWlucyBhbGwgdGFza3Mgd2hpY2ggaGF2ZSB1c2VkIHVwIHRoZWlyIHRpbWVzbGljZXMgLSBidXQgdGhpcyBhcnJheQorICAgaXMga2VwdCBzb3J0ZWQgYXMgd2VsbC4gVGhlIGFjdGl2ZSBhbmQgZXhwaXJlZCBhcnJheSBpcyBub3QgYWNjZXNzZWQKKyAgIGRpcmVjdGx5LCBpdCdzIGFjY2Vzc2VkIHRocm91Z2ggdHdvIHBvaW50ZXJzIGluIHRoZSBwZXItQ1BVIHJ1bnF1ZXVlCisgICBzdHJ1Y3R1cmUuIElmIGFsbCBhY3RpdmUgdGFza3MgYXJlIHVzZWQgdXAgdGhlbiB3ZSAnc3dpdGNoJyB0aGUgdHdvCisgICBwb2ludGVycyBhbmQgZnJvbSBub3cgb24gdGhlIHJlYWR5LXRvLWdvIChmb3JtZXItKSBleHBpcmVkIGFycmF5IGlzIHRoZQorICAgYWN0aXZlIGFycmF5IC0gYW5kIHRoZSBlbXB0eSBhY3RpdmUgYXJyYXkgc2VydmVzIGFzIHRoZSBuZXcgY29sbGVjdG9yCisgICBmb3IgZXhwaXJlZCB0YXNrcy4KKworIC0gdGhlcmUgaXMgYSA2NC1iaXQgYml0bWFwIGNhY2hlIGZvciBhcnJheSBpbmRpY2VzLiBGaW5kaW5nIHRoZSBoaWdoZXN0CisgICBwcmlvcml0eSB0YXNrIGlzIHRodXMgYSBtYXR0ZXIgb2YgdHdvIHg4NiBCU0ZMIGJpdC1zZWFyY2ggaW5zdHJ1Y3Rpb25zLgorCit0aGUgc3BsaXQtYXJyYXkgc29sdXRpb24gZW5hYmxlcyB1cyB0byBoYXZlIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgYWN0aXZlCithbmQgZXhwaXJlZCB0YXNrcywgYW5kIHRoZSByZWNhbGN1bGF0aW9uIG9mIHRpbWVzbGljZXMgY2FuIGJlIGRvbmUKK2ltbWVkaWF0ZWx5IHdoZW4gdGhlIHRpbWVzbGljZSBleHBpcmVzLiBCZWNhdXNlIHRoZSBhcnJheXMgYXJlIGFsd2F5cworYWNjZXNzIHRocm91Z2ggdGhlIHBvaW50ZXJzIGluIHRoZSBydW5xdWV1ZSwgc3dpdGNoaW5nIHRoZSB0d28gYXJyYXlzIGNhbgorYmUgZG9uZSB2ZXJ5IHF1aWNrbHkuCisKK3RoaXMgaXMgYSBoeWJyaWRlIHByaW9yaXR5LWxpc3QgYXBwcm9hY2ggY291cGxlZCB3aXRoIHJvdW5kcm9iaW4KK3NjaGVkdWxpbmcgYW5kIHRoZSBhcnJheS1zd2l0Y2ggbWV0aG9kIG9mIGRpc3RyaWJ1dGluZyB0aW1lc2xpY2VzLgorCisgLSB0aGVyZSBpcyBhIHBlci10YXNrICdsb2FkIGVzdGltYXRvcicuCisKK29uZSBvZiB0aGUgdG91Z2hlc3QgdGhpbmdzIHRvIGdldCByaWdodCBpcyBnb29kIGludGVyYWN0aXZlIGZlZWwgZHVyaW5nCitoZWF2eSBzeXN0ZW0gbG9hZC4gV2hpbGUgcGxheWluZyB3aXRoIHZhcmlvdXMgc2NoZWR1bGVyIHZhcmlhbnRzIGkgZm91bmQKK3RoYXQgdGhlIGJlc3QgaW50ZXJhY3RpdmUgZmVlbCBpcyBhY2hpZXZlZCBub3QgYnkgJ2Jvb3N0aW5nJyBpbnRlcmFjdGl2ZQordGFza3MsIGJ1dCBieSAncHVuaXNoaW5nJyB0YXNrcyB0aGF0IHdhbnQgdG8gdXNlIG1vcmUgQ1BVIHRpbWUgdGhhbiB0aGVyZQoraXMgYXZhaWxhYmxlLiBUaGlzIG1ldGhvZCBpcyBhbHNvIG11Y2ggZWFzaWVyIHRvIGRvIGluIGFuIE8oMSkgZmFzaGlvbi4KKwordG8gZXN0YWJsaXNoIHRoZSBhY3R1YWwgJ2xvYWQnIHRoZSB0YXNrIGNvbnRyaWJ1dGVzIHRvIHRoZSBzeXN0ZW0sIGEKK2NvbXBsZXgtbG9va2luZyBidXQgcHJldHR5IGFjY3VyYXRlIG1ldGhvZCBpcyB1c2VkOiB0aGVyZSBpcyBhIDQtZW50cnkKKydoaXN0b3J5JyByaW5nYnVmZmVyIG9mIHRoZSB0YXNrJ3MgYWN0aXZpdGllcyBkdXJpbmcgdGhlIGxhc3QgNCBzZWNvbmRzLgorVGhpcyByaW5nYnVmZmVyIGlzIG9wZXJhdGVkIHdpdGhvdXQgbXVjaCBvdmVyaGVhZC4gVGhlIGVudHJpZXMgdGVsbCB0aGUKK3NjaGVkdWxlciBhIHByZXR0eSBhY2N1cmF0ZSBsb2FkLWhpc3Rvcnkgb2YgdGhlIHRhc2s6IGhhcyBpdCB1c2VkIHVwIG1vcmUKK0NQVSB0aW1lIG9yIGxlc3MgZHVyaW5nIHRoZSBwYXN0IE4gc2Vjb25kcy4gW3RoZSBzaXplICc0JyBhbmQgdGhlIGludGVydmFsCitvZiA0eCAxIHNlY29uZHMgd2FzIGZvdW5kIGJ5IGxvdHMgb2YgZXhwZXJpbWVudGF0aW9uIC0gdGhpcyBwYXJ0IGlzCitmbGV4aWJsZSBhbmQgY2FuIGJlIGNoYW5nZWQgaW4gYm90aCBkaXJlY3Rpb25zLl0KKwordGhlIHBlbmFsdHkgYSB0YXNrIGdldHMgZm9yIGdlbmVyYXRpbmcgbW9yZSBsb2FkIHRoYW4gdGhlIENQVSBjYW4gaGFuZGxlCitpcyBhIHByaW9yaXR5IGRlY3JlYXNlIC0gdGhlcmUgaXMgYSBtYXhpbXVtIGFtb3VudCB0byB0aGlzIHBlbmFsdHkKK3JlbGF0aXZlIHRvIHRoZWlyIHN0YXRpYyBwcmlvcml0eSwgc28gZXZlbiBmdWxseSBDUFUtYm91bmQgdGFza3Mgd2lsbAorb2JzZXJ2ZSBlYWNoIG90aGVyJ3MgcHJpb3JpdGllcywgYW5kIHdpbGwgc2hhcmUgdGhlIENQVSBhY2NvcmRpbmdseS4KKwordGhlIFNNUCBsb2FkLWJhbGFuY2VyIGNhbiBiZSBleHRlbmRlZC9zd2l0Y2hlZCB3aXRoIGFkZGl0aW9uYWwgcGFyYWxsZWwKK2NvbXB1dGluZyBhbmQgY2FjaGUgaGllcmFyY2h5IGNvbmNlcHRzOiBOVU1BIHNjaGVkdWxpbmcsIG11bHRpLWNvcmUgQ1BVcworY2FuIGJlIHN1cHBvcnRlZCBlYXNpbHkgYnkgY2hhbmdpbmcgdGhlIGxvYWQtYmFsYW5jZXIuIFJpZ2h0IG5vdyBpdCdzCit0dW5lZCBmb3IgbXkgU01QIHN5c3RlbXMuCisKK2kgc2tpcHBlZCB0aGUgcHJldi0+bW0gPT0gbmV4dC0+bW0gYWR2YW50YWdlIC0gbm8gd29ya2xvYWQgaSBrbm93IG9mIHNob3dzCithbnkgc2Vuc2l0aXZpdHkgdG8gdGhpcy4gSXQgY2FuIGJlIGFkZGVkIGJhY2sgYnkgc2FjcmlmaWNpbmcgTygxKQorc2NoZWR1bGUoKSBbdGhlIGN1cnJlbnQgYW5kIG9uZS1sb3dlciBwcmlvcml0eSBsaXN0IGNhbiBiZSBzZWFyY2hlZCBmb3IgYQordGhhdC0+bW0gPT0gY3VycmVudC0+bW0gY29uZGl0aW9uXSwgYnV0IGNvc3RzIGEgZmFpciBudW1iZXIgb2YgY3ljbGVzCitkdXJpbmcgYSBudW1iZXIgb2YgaW1wb3J0YW50IHdvcmtsb2Fkcywgc28gaSB3YW50ZWQgdG8gYXZvaWQgdGhpcyBhcyBtdWNoCithcyBwb3NzaWJsZS4KKworLSB0aGUgU01QIGlkbGUtdGFzayBzdGFydHVwIGNvZGUgd2FzIHN0aWxsIHJhY3kgYW5kIHRoZSBuZXcgc2NoZWR1bGVyCit0cmlnZ2VyZWQgdGhpcy4gU28gaSBzdHJlYW1saW5lZCB0aGUgaWRsZS1zZXR1cCBjb2RlIGEgYml0LiBXZSBkbyBub3QgY2FsbAoraW50byBzY2hlZHVsZSgpIGJlZm9yZSBhbGwgcHJvY2Vzc29ycyBoYXZlIHN0YXJ0ZWQgdXAgZnVsbHkgYW5kIGFsbCBpZGxlCit0aHJlYWRzIGFyZSBpbiBwbGFjZS4KKworLSB0aGUgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBudW1iZXIgb2YgYXNwZWN0cyBvZiBzY2hlZC5jIC0gbW92ZXMgY29kZQoraW50byBvdGhlciBhcmVhcyBvZiB0aGUga2VybmVsIHdoZXJlIGl0J3MgYXBwcm9wcmlhdGUsIGFuZCBzaW1wbGlmaWVzCitjZXJ0YWluIGNvZGUgcGF0aHMgYW5kIGRhdGEgY29uc3RydWN0cy4gQXMgYSByZXN1bHQsIHRoZSBuZXcgc2NoZWR1bGVyJ3MKK2NvZGUgaXMgc21hbGxlciB0aGFuIHRoZSBvbGQgb25lLgorCisJSW5nbwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZC1kb21haW5zLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWQtZG9tYWlucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllOTkwYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWQtZG9tYWlucy50eHQKQEAgLTAsMCArMSw3MCBAQAorRWFjaCBDUFUgaGFzIGEgImJhc2UiIHNjaGVkdWxpbmcgZG9tYWluIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKS4gVGhlc2UgYXJlCithY2Nlc3NlZCB2aWEgY3B1X3NjaGVkX2RvbWFpbihpKSBhbmQgdGhpc19zY2hlZF9kb21haW4oKSBtYWNyb3MuIFRoZSBkb21haW4KK2hpZXJhcmNoeSBpcyBidWlsdCBmcm9tIHRoZXNlIGJhc2UgZG9tYWlucyB2aWEgdGhlIC0+cGFyZW50IHBvaW50ZXIuIC0+cGFyZW50CitNVVNUIGJlIE5VTEwgdGVybWluYXRlZCwgYW5kIGRvbWFpbiBzdHJ1Y3R1cmVzIHNob3VsZCBiZSBwZXItQ1BVIGFzIHRoZXkKK2FyZSBsb2NrbGVzc2x5IHVwZGF0ZWQuCisKK0VhY2ggc2NoZWR1bGluZyBkb21haW4gc3BhbnMgYSBudW1iZXIgb2YgQ1BVcyAoc3RvcmVkIGluIHRoZSAtPnNwYW4gZmllbGQpLgorQSBkb21haW4ncyBzcGFuIE1VU1QgYmUgYSBzdXBlcnNldCBvZiBpdCBjaGlsZCdzIHNwYW4gKHRoaXMgcmVzdHJpY3Rpb24gY291bGQKK2JlIHJlbGF4ZWQgaWYgdGhlIG5lZWQgYXJpc2VzKSwgYW5kIGEgYmFzZSBkb21haW4gZm9yIENQVSBpIE1VU1Qgc3BhbiBhdCBsZWFzdAoraS4gVGhlIHRvcCBkb21haW4gZm9yIGVhY2ggQ1BVIHdpbGwgZ2VuZXJhbGx5IHNwYW4gYWxsIENQVXMgaW4gdGhlIHN5c3RlbQorYWx0aG91Z2ggc3RyaWN0bHkgaXQgZG9lc24ndCBoYXZlIHRvLCBidXQgdGhpcyBjb3VsZCBsZWFkIHRvIGEgY2FzZSB3aGVyZSBzb21lCitDUFVzIHdpbGwgbmV2ZXIgYmUgZ2l2ZW4gdGFza3MgdG8gcnVuIHVubGVzcyB0aGUgQ1BVcyBhbGxvd2VkIG1hc2sgaXMKK2V4cGxpY2l0bHkgc2V0LiBBIHNjaGVkIGRvbWFpbidzIHNwYW4gbWVhbnMgImJhbGFuY2UgcHJvY2VzcyBsb2FkIGFtb25nIHRoZXNlCitDUFVzIi4KKworRWFjaCBzY2hlZHVsaW5nIGRvbWFpbiBtdXN0IGhhdmUgb25lIG9yIG1vcmUgQ1BVIGdyb3VwcyAoc3RydWN0IHNjaGVkX2dyb3VwKQord2hpY2ggYXJlIG9yZ2FuaXNlZCBhcyBhIGNpcmN1bGFyIG9uZSB3YXkgbGlua2VkIGxpc3QgZnJvbSB0aGUgLT5ncm91cHMKK3BvaW50ZXIuIFRoZSB1bmlvbiBvZiBjcHVtYXNrcyBvZiB0aGVzZSBncm91cHMgTVVTVCBiZSB0aGUgc2FtZSBhcyB0aGUKK2RvbWFpbidzIHNwYW4uIFRoZSBpbnRlcnNlY3Rpb24gb2YgY3B1bWFza3MgZnJvbSBhbnkgdHdvIG9mIHRoZXNlIGdyb3VwcworTVVTVCBiZSB0aGUgZW1wdHkgc2V0LiBUaGUgZ3JvdXAgcG9pbnRlZCB0byBieSB0aGUgLT5ncm91cHMgcG9pbnRlciBNVVNUCitjb250YWluIHRoZSBDUFUgdG8gd2hpY2ggdGhlIGRvbWFpbiBiZWxvbmdzLiBHcm91cHMgbWF5IGJlIHNoYXJlZCBhbW9uZworQ1BVcyBhcyB0aGV5IGNvbnRhaW4gcmVhZCBvbmx5IGRhdGEgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc2V0IHVwLgorCitCYWxhbmNpbmcgd2l0aGluIGEgc2NoZWQgZG9tYWluIG9jY3VycyBiZXR3ZWVuIGdyb3Vwcy4gVGhhdCBpcywgZWFjaCBncm91cAoraXMgdHJlYXRlZCBhcyBvbmUgZW50aXR5LiBUaGUgbG9hZCBvZiBhIGdyb3VwIGlzIGRlZmluZWQgYXMgdGhlIHN1bSBvZiB0aGUKK2xvYWQgb2YgZWFjaCBvZiBpdHMgbWVtYmVyIENQVXMsIGFuZCBvbmx5IHdoZW4gdGhlIGxvYWQgb2YgYSBncm91cCBiZWNvbWVzCitvdXQgb2YgYmFsYW5jZSBhcmUgdGFza3MgbW92ZWQgYmV0d2VlbiBncm91cHMuCisKK0luIGtlcm5lbC9zY2hlZC5jLCByZWJhbGFuY2VfdGljayBpcyBydW4gcGVyaW9kaWNhbGx5IG9uIGVhY2ggQ1BVLiBUaGlzCitmdW5jdGlvbiB0YWtlcyBpdHMgQ1BVJ3MgYmFzZSBzY2hlZCBkb21haW4gYW5kIGNoZWNrcyB0byBzZWUgaWYgaGFzIHJlYWNoZWQKK2l0cyByZWJhbGFuY2UgaW50ZXJ2YWwuIElmIHNvLCB0aGVuIGl0IHdpbGwgcnVuIGxvYWRfYmFsYW5jZSBvbiB0aGF0IGRvbWFpbi4KK3JlYmFsYW5jZV90aWNrIHRoZW4gY2hlY2tzIHRoZSBwYXJlbnQgc2NoZWRfZG9tYWluIChpZiBpdCBleGlzdHMpLCBhbmQgdGhlCitwYXJlbnQgb2YgdGhlIHBhcmVudCBhbmQgc28gZm9ydGguCisKKyoqKiBJbXBsZW1lbnRpbmcgc2NoZWQgZG9tYWlucyAqKioKK1RoZSAiYmFzZSIgZG9tYWluIHdpbGwgInNwYW4iIHRoZSBmaXJzdCBsZXZlbCBvZiB0aGUgaGllcmFyY2h5LiBJbiB0aGUgY2FzZQorb2YgU01ULCB5b3UnbGwgc3BhbiBhbGwgc2libGluZ3Mgb2YgdGhlIHBoeXNpY2FsIENQVSwgd2l0aCBlYWNoIGdyb3VwIGJlaW5nCithIHNpbmdsZSB2aXJ0dWFsIENQVS4KKworSW4gU01QLCB0aGUgcGFyZW50IG9mIHRoZSBiYXNlIGRvbWFpbiB3aWxsIHNwYW4gYWxsIHBoeXNpY2FsIENQVXMgaW4gdGhlCitub2RlLiBFYWNoIGdyb3VwIGJlaW5nIGEgc2luZ2xlIHBoeXNpY2FsIENQVS4gVGhlbiB3aXRoIE5VTUEsIHRoZSBwYXJlbnQKK29mIHRoZSBTTVAgZG9tYWluIHdpbGwgc3BhbiB0aGUgZW50aXJlIG1hY2hpbmUsIHdpdGggZWFjaCBncm91cCBoYXZpbmcgdGhlCitjcHVtYXNrIG9mIGEgbm9kZS4gT3IsIHlvdSBjb3VsZCBkbyBtdWx0aS1sZXZlbCBOVU1BIG9yIE9wdGVyb24sIGZvciBleGFtcGxlLAorbWlnaHQgaGF2ZSBqdXN0IG9uZSBkb21haW4gY292ZXJpbmcgaXRzIG9uZSBOVU1BIGxldmVsLgorCitUaGUgaW1wbGVtZW50b3Igc2hvdWxkIHJlYWQgY29tbWVudHMgaW4gaW5jbHVkZS9saW51eC9zY2hlZC5oOgorc3RydWN0IHNjaGVkX2RvbWFpbiBmaWVsZHMsIFNEX0ZMQUdfKiwgU0RfKl9JTklUIHRvIGdldCBhbiBpZGVhIG9mCit0aGUgc3BlY2lmaWNzIGFuZCB3aGF0IHRvIHR1bmUuCisKK0ZvciBTTVQsIHRoZSBhcmNoaXRlY3R1cmUgbXVzdCBkZWZpbmUgQ09ORklHX1NDSEVEX1NNVCBhbmQgcHJvdmlkZSBhCitjcHVtYXNrX3QgY3B1X3NpYmxpbmdfbWFwW05SX0NQVVNdLCB3aGVyZSBjcHVfc2libGluZ19tYXBbaV0gaXMgdGhlIG1hc2sgb2YKK2FsbCAiaSIncyBzaWJsaW5ncyBhcyB3ZWxsIGFzICJpIiBpdHNlbGYuCisKK0FyY2hpdGVjdHVyZXMgbWF5IHJldGFpbiB0aGUgcmVndWxhciBvdmVycmlkZSB0aGUgZGVmYXVsdCBTRF8qX0lOSVQgZmxhZ3MKK3doaWxlIHVzaW5nIHRoZSBnZW5lcmljIGRvbWFpbiBidWlsZGVyIGluIGtlcm5lbC9zY2hlZC5jIGlmIHRoZXkgd2lzaCB0bworcmV0YWluIHRoZSB0cmFkaXRpb25hbCBTTVQtPlNNUC0+TlVNQSB0b3BvbG9neSAob3Igc29tZSBzdWJzZXQgb2YgdGhhdCkuIFRoaXMKK2NhbiBiZSBkb25lIGJ5ICNkZWZpbmUnaW5nIEFSQ0hfSEFTSF9TQ0hFRF9UVU5FLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgYXJjaGl0ZWN0dXJlIG1heSBjb21wbGV0ZWx5IG92ZXJyaWRlIHRoZSBnZW5lcmljIGRvbWFpbgorYnVpbGRlciBieSAjZGVmaW5lJ2luZyBBUkNIX0hBU0hfU0NIRURfRE9NQUlOLCBhbmQgZXhwb3J0aW5nIHlvdXIKK2FyY2hfaW5pdF9zY2hlZF9kb21haW5zIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYXR0YWNoIGRvbWFpbnMgdG8gYWxsCitDUFVzIHVzaW5nIGNwdV9hdHRhY2hfZG9tYWluLgorCitJbXBsZW1lbnRvcnMgc2hvdWxkIGNoYW5nZSB0aGUgbGluZQorI3VuZGVmIFNDSEVEX0RPTUFJTl9ERUJVRwordG8KKyNkZWZpbmUgU0NIRURfRE9NQUlOX0RFQlVHCitpbiBrZXJuZWwvc2NoZWQuYyBhcyB0aGlzIGVuYWJsZXMgYW4gZXJyb3IgY2hlY2tpbmcgcGFyc2Ugb2YgdGhlIHNjaGVkIGRvbWFpbnMKK3doaWNoIHNob3VsZCBjYXRjaCBtb3N0IHBvc3NpYmxlIGVycm9ycyAoZGVzY3JpYmVkIGFib3ZlKS4gSXQgYWxzbyBwcmludHMgb3V0Cit0aGUgZG9tYWluIHN0cnVjdHVyZSBpbiBhIHZpc3VhbCBmb3JtYXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkLXN0YXRzLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWQtc3RhdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNzIwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NjaGVkLXN0YXRzLnR4dApAQCAtMCwwICsxLDE1MyBAQAorVmVyc2lvbiAxMCBvZiBzY2hlZHN0YXRzIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHNjaGVkX2RvbWFpbnMsIHdoaWNoCitoaXQgdGhlIG1haW5saW5lIGtlcm5lbCBpbiAyLjYuNy4gIFNvbWUgY291bnRlcnMgbWFrZSBtb3JlIHNlbnNlIHRvIGJlCitwZXItcnVucXVldWU7IG90aGVyIHRvIGJlIHBlci1kb21haW4uICBOb3RlIHRoYXQgZG9tYWlucyAoYW5kIHRoZWlyIGFzc29jaWF0ZWQKK2luZm9ybWF0aW9uKSB3aWxsIG9ubHkgYmUgcGVydGluZW50IGFuZCBhdmFpbGFibGUgb24gbWFjaGluZXMgdXRpbGl6aW5nCitDT05GSUdfU01QLgorCitJbiB2ZXJzaW9uIDEwIG9mIHNjaGVkc3RhdCwgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGxldmVsIG9mIGRvbWFpbgorc3RhdGlzdGljcyBmb3IgZWFjaCBjcHUgbGlzdGVkLCBhbmQgdGhlcmUgbWF5IHdlbGwgYmUgbW9yZSB0aGFuIG9uZQorZG9tYWluLiAgRG9tYWlucyBoYXZlIG5vIHBhcnRpY3VsYXIgbmFtZXMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgYnV0Cit0aGUgaGlnaGVzdCBudW1iZXJlZCBvbmUgdHlwaWNhbGx5IGFyYml0cmF0ZXMgYmFsYW5jaW5nIGFjcm9zcyBhbGwgdGhlCitjcHVzIG9uIHRoZSBtYWNoaW5lLCB3aGlsZSBkb21haW4wIGlzIHRoZSBtb3N0IHRpZ2h0bHkgZm9jdXNlZCBkb21haW4sCitzb21ldGltZXMgYmFsYW5jaW5nIG9ubHkgYmV0d2VlbiBwYWlycyBvZiBjcHVzLiAgQXQgdGhpcyB0aW1lLCB0aGVyZQorYXJlIG5vIGFyY2hpdGVjdHVyZXMgd2hpY2ggbmVlZCBtb3JlIHRoYW4gdGhyZWUgZG9tYWluIGxldmVscy4gVGhlIGZpcnN0CitmaWVsZCBpbiB0aGUgZG9tYWluIHN0YXRzIGlzIGEgYml0IG1hcCBpbmRpY2F0aW5nIHdoaWNoIGNwdXMgYXJlIGFmZmVjdGVkCitieSB0aGF0IGRvbWFpbi4KKworVGhlc2UgZmllbGRzIGFyZSBjb3VudGVycywgYW5kIG9ubHkgaW5jcmVtZW50LiAgUHJvZ3JhbXMgd2hpY2ggbWFrZSB1c2UKK29mIHRoZXNlIHdpbGwgbmVlZCB0byBzdGFydCB3aXRoIGEgYmFzZWxpbmUgb2JzZXJ2YXRpb24gYW5kIHRoZW4gY2FsY3VsYXRlCit0aGUgY2hhbmdlIGluIHRoZSBjb3VudGVycyBhdCBlYWNoIHN1YnNlcXVlbnQgb2JzZXJ2YXRpb24uICBBIHBlcmwgc2NyaXB0Cit3aGljaCBkb2VzIHRoaXMgZm9yIG1hbnkgb2YgdGhlIGZpZWxkcyBpcyBhdmFpbGFibGUgYXQKKworICAgIGh0dHA6Ly9lYWdsZXQucmFpbi5jb20vcmljay9saW51eC9zY2hlZHN0YXQvCisKK05vdGUgdGhhdCBhbnkgc3VjaCBzY3JpcHQgd2lsbCBuZWNlc3NhcmlseSBiZSB2ZXJzaW9uLXNwZWNpZmljLCBhcyB0aGUgbWFpbgorcmVhc29uIHRvIGNoYW5nZSB2ZXJzaW9ucyBpcyBjaGFuZ2VzIGluIHRoZSBvdXRwdXQgZm9ybWF0LiAgRm9yIHRob3NlIHdpc2hpbmcKK3RvIHdyaXRlIHRoZWlyIG93biBzY3JpcHRzLCB0aGUgZmllbGRzIGFyZSBkZXNjcmliZWQgaGVyZS4KKworQ1BVIHN0YXRpc3RpY3MKKy0tLS0tLS0tLS0tLS0tCitjcHU8Tj4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjgKKworTk9URTogSW4gdGhlIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljcywgdGhlIGFjdGl2ZSBxdWV1ZSBpcyBjb25zaWRlcmVkIGVtcHR5CisgICAgaWYgaXQgaGFzIG9ubHkgb25lIHByb2Nlc3MgaW4gaXQsIHNpbmNlIG9idmlvdXNseSB0aGUgcHJvY2VzcyBjYWxsaW5nCisgICAgc2NoZWRfeWllbGQoKSBpcyB0aGF0IHByb2Nlc3MuCisKK0ZpcnN0IGZvdXIgZmllbGRzIGFyZSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpY3M6CisgICAgIDEpICMgb2YgdGltZXMgYm90aCB0aGUgYWN0aXZlIGFuZCB0aGUgZXhwaXJlZCBxdWV1ZSB3ZXJlIGVtcHR5CisgICAgIDIpICMgb2YgdGltZXMganVzdCB0aGUgYWN0aXZlIHF1ZXVlIHdhcyBlbXB0eQorICAgICAzKSAjIG9mIHRpbWVzIGp1c3QgdGhlIGV4cGlyZWQgcXVldWUgd2FzIGVtcHR5CisgICAgIDQpICMgb2YgdGltZXMgc2NoZWRfeWllbGQoKSB3YXMgY2FsbGVkCisKK05leHQgZm91ciBhcmUgc2NoZWR1bGUoKSBzdGF0aXN0aWNzOgorICAgICA1KSAjIG9mIHRpbWVzIHRoZSBhY3RpdmUgcXVldWUgaGFkIGF0IGxlYXN0IG9uZSBvdGhlciBwcm9jZXNzIG9uIGl0CisgICAgIDYpICMgb2YgdGltZXMgd2Ugc3dpdGNoZWQgdG8gdGhlIGV4cGlyZWQgcXVldWUgYW5kIHJldXNlZCBpdAorICAgICA3KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgd2FzIGNhbGxlZAorICAgICA4KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgbGVmdCB0aGUgcHJvY2Vzc29yIGlkbGUKKworTmV4dCBmb3VyIGFyZSBhY3RpdmVfbG9hZF9iYWxhbmNlKCkgc3RhdGlzdGljczoKKyAgICAgOSkgIyBvZiB0aW1lcyBhY3RpdmVfbG9hZF9iYWxhbmNlKCkgd2FzIGNhbGxlZAorICAgIDEwKSAjIG9mIHRpbWVzIGFjdGl2ZV9sb2FkX2JhbGFuY2UoKSBjYXVzZWQgdGhpcyBjcHUgdG8gZ2FpbiBhIHRhc2sKKyAgICAxMSkgIyBvZiB0aW1lcyBhY3RpdmVfbG9hZF9iYWxhbmNlKCkgY2F1c2VkIHRoaXMgY3B1IHRvIGxvc2UgYSB0YXNrCisgICAgMTIpICMgb2YgdGltZXMgYWN0aXZlX2xvYWRfYmFsYW5jZSgpIHRyaWVkIHRvIG1vdmUgYSB0YXNrIGFuZCBmYWlsZWQKKworTmV4dCB0aHJlZSBhcmUgdHJ5X3RvX3dha2VfdXAoKSBzdGF0aXN0aWNzOgorICAgIDEzKSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZAorICAgIDE0KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgc3VjY2Vzc2Z1bGx5IG1vdmVkIHRoZSBhd2FrZW5pbmcgdGFzaworICAgIDE1KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgYXR0ZW1wdGVkIHRvIG1vdmUgdGhlIGF3YWtlbmluZyB0YXNrCisKK05leHQgdHdvIGFyZSB3YWtlX3VwX25ld190YXNrKCkgc3RhdGlzdGljczoKKyAgICAxNikgIyBvZiB0aW1lcyB3YWtlX3VwX25ld190YXNrKCkgd2FzIGNhbGxlZAorICAgIDE3KSAjIG9mIHRpbWVzIHdha2VfdXBfbmV3X3Rhc2soKSBzdWNjZXNzZnVsbHkgbW92ZWQgdGhlIG5ldyB0YXNrCisKK05leHQgb25lIGlzIGEgc2NoZWRfbWlncmF0ZV90YXNrKCkgc3RhdGlzdGljOgorICAgIDE4KSAjIG9mIHRpbWVzIHNjaGVkX21pZ3JhdGVfdGFzaygpIHdhcyBjYWxsZWQKKworTmV4dCBvbmUgaXMgYSBzY2hlZF9iYWxhbmNlX2V4ZWMoKSBzdGF0aXN0aWM6CisgICAgMTkpICMgb2YgdGltZXMgc2NoZWRfYmFsYW5jZV9leGVjKCkgd2FzIGNhbGxlZAorCitOZXh0IHRocmVlIGFyZSBzdGF0aXN0aWNzIGRlc2NyaWJpbmcgc2NoZWR1bGluZyBsYXRlbmN5OgorICAgIDIwKSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgcnVubmluZyBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4gbXMpCisgICAgMjEpIHN1bSBvZiBhbGwgdGltZSBzcGVudCB3YWl0aW5nIHRvIHJ1biBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4gbXMpCisgICAgMjIpICMgb2YgdGFza3MgKG5vdCBuZWNlc3NhcmlseSB1bmlxdWUpIGdpdmVuIHRvIHRoZSBwcm9jZXNzb3IKKworVGhlIGxhc3Qgc2l4IGFyZSBzdGF0aXN0aWNzIGRlYWxpbmcgd2l0aCBwdWxsX3Rhc2soKToKKyAgICAyMykgIyBvZiB0aW1lcyBwdWxsX3Rhc2soKSBtb3ZlZCBhIHRhc2sgdG8gdGhpcyBjcHUgd2hlbiBuZXdseSBpZGxlCisgICAgMjQpICMgb2YgdGltZXMgcHVsbF90YXNrKCkgc3RvbGUgYSB0YXNrIGZyb20gdGhpcyBjcHUgd2hlbiBhbm90aGVyIGNwdQorCXdhcyBuZXdseSBpZGxlCisgICAgMjUpICMgb2YgdGltZXMgcHVsbF90YXNrKCkgbW92ZWQgYSB0YXNrIHRvIHRoaXMgY3B1IHdoZW4gaWRsZQorICAgIDI2KSAjIG9mIHRpbWVzIHB1bGxfdGFzaygpIHN0b2xlIGEgdGFzayBmcm9tIHRoaXMgY3B1IHdoZW4gYW5vdGhlciBjcHUKKwl3YXMgaWRsZQorICAgIDI3KSAjIG9mIHRpbWVzIHB1bGxfdGFzaygpIG1vdmVkIGEgdGFzayB0byB0aGlzIGNwdSB3aGVuIGJ1c3kKKyAgICAyOCkgIyBvZiB0aW1lcyBwdWxsX3Rhc2soKSBzdG9sZSBhIHRhc2sgZnJvbSB0aGlzIGNwdSB3aGVuIGFub3RoZXIgY3B1CisJd2FzIGJ1c3kKKworCitEb21haW4gc3RhdGlzdGljcworLS0tLS0tLS0tLS0tLS0tLS0KK09uZSBvZiB0aGVzZSBpcyBwcm9kdWNlZCBwZXIgZG9tYWluIGZvciBlYWNoIGNwdSBkZXNjcmliZWQuIChOb3RlIHRoYXQgaWYKK0NPTkZJR19TTVAgaXMgbm90IGRlZmluZWQsICpubyogZG9tYWlucyBhcmUgdXRpbGl6ZWQgYW5kIHRoZXNlIGxpbmVzCit3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG91dHB1dC4pCisKK2RvbWFpbjxOPiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMAorCitUaGUgZmlyc3QgZmllbGQgaXMgYSBiaXQgbWFzayBpbmRpY2F0aW5nIHdoYXQgY3B1cyB0aGlzIGRvbWFpbiBvcGVyYXRlcyBvdmVyLgorCitUaGUgbmV4dCBmaWZ0ZWVuIGFyZSBhIHZhcmlldHkgb2YgbG9hZF9iYWxhbmNlKCkgc3RhdGlzdGljczoKKworICAgICAxKSAjIG9mIHRpbWVzIGluIHRoaXMgZG9tYWluIGxvYWRfYmFsYW5jZSgpIHdhcyBjYWxsZWQgd2hlbiB0aGUgY3B1CisJd2FzIGlkbGUKKyAgICAgMikgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBsb2FkX2JhbGFuY2UoKSB3YXMgY2FsbGVkIHdoZW4gdGhlIGNwdQorCXdhcyBidXN5CisgICAgIDMpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gbG9hZF9iYWxhbmNlKCkgd2FzIGNhbGxlZCB3aGVuIHRoZSBjcHUKKwl3YXMganVzdCBiZWNvbWluZyBpZGxlCisgICAgIDQpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gbG9hZF9iYWxhbmNlKCkgdHJpZWQgdG8gbW92ZSBvbmUgb3IgbW9yZQorCXRhc2tzIGFuZCBmYWlsZWQsIHdoZW4gdGhlIGNwdSB3YXMgaWRsZQorICAgICA1KSAjIG9mIHRpbWVzIGluIHRoaXMgZG9tYWluIGxvYWRfYmFsYW5jZSgpIHRyaWVkIHRvIG1vdmUgb25lIG9yIG1vcmUKKwl0YXNrcyBhbmQgZmFpbGVkLCB3aGVuIHRoZSBjcHUgd2FzIGJ1c3kKKyAgICAgNikgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBsb2FkX2JhbGFuY2UoKSB0cmllZCB0byBtb3ZlIG9uZSBvciBtb3JlCisJdGFza3MgYW5kIGZhaWxlZCwgd2hlbiB0aGUgY3B1IHdhcyBqdXN0IGJlY29taW5nIGlkbGUKKyAgICAgNykgc3VtIG9mIGltYmFsYW5jZXMgZGlzY292ZXJlZCAoaWYgYW55KSB3aXRoIGVhY2ggY2FsbCB0bworCWxvYWRfYmFsYW5jZSgpIGluIHRoaXMgZG9tYWluIHdoZW4gdGhlIGNwdSB3YXMgaWRsZQorICAgICA4KSBzdW0gb2YgaW1iYWxhbmNlcyBkaXNjb3ZlcmVkIChpZiBhbnkpIHdpdGggZWFjaCBjYWxsIHRvCisJbG9hZF9iYWxhbmNlKCkgaW4gdGhpcyBkb21haW4gd2hlbiB0aGUgY3B1IHdhcyBidXN5CisgICAgIDkpIHN1bSBvZiBpbWJhbGFuY2VzIGRpc2NvdmVyZWQgKGlmIGFueSkgd2l0aCBlYWNoIGNhbGwgdG8KKwlsb2FkX2JhbGFuY2UoKSBpbiB0aGlzIGRvbWFpbiB3aGVuIHRoZSBjcHUgd2FzIGp1c3QgYmVjb21pbmcgaWRsZQorICAgIDEwKSAjIG9mIHRpbWVzIGluIHRoaXMgZG9tYWluIGxvYWRfYmFsYW5jZSgpIHdhcyBjYWxsZWQgYnV0IGRpZCBub3QgZmluZAorCWEgYnVzaWVyIHF1ZXVlIHdoaWxlIHRoZSBjcHUgd2FzIGlkbGUKKyAgICAxMSkgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBsb2FkX2JhbGFuY2UoKSB3YXMgY2FsbGVkIGJ1dCBkaWQgbm90IGZpbmQKKwlhIGJ1c2llciBxdWV1ZSB3aGlsZSB0aGUgY3B1IHdhcyBidXN5CisgICAgMTIpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gbG9hZF9iYWxhbmNlKCkgd2FzIGNhbGxlZCBidXQgZGlkIG5vdCBmaW5kCisJYSBidXNpZXIgcXVldWUgd2hpbGUgdGhlIGNwdSB3YXMganVzdCBiZWNvbWluZyBpZGxlCisgICAgMTMpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gYSBidXNpZXIgcXVldWUgd2FzIGZvdW5kIHdoaWxlIHRoZSBjcHUgd2FzCisJaWRsZSBidXQgbm8gYnVzaWVyIGdyb3VwIHdhcyBmb3VuZAorICAgIDE0KSAjIG9mIHRpbWVzIGluIHRoaXMgZG9tYWluIGEgYnVzaWVyIHF1ZXVlIHdhcyBmb3VuZCB3aGlsZSB0aGUgY3B1IHdhcworCWJ1c3kgYnV0IG5vIGJ1c2llciBncm91cCB3YXMgZm91bmQKKyAgICAxNSkgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBhIGJ1c2llciBxdWV1ZSB3YXMgZm91bmQgd2hpbGUgdGhlIGNwdSB3YXMKKwlqdXN0IGJlY29taW5nIGlkbGUgYnV0IG5vIGJ1c2llciBncm91cCB3YXMgZm91bmQKKworTmV4dCB0d28gYXJlIHNjaGVkX2JhbGFuY2VfZXhlYygpIHN0YXRpc3RpY3M6CisgICAgMTcpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gc2NoZWRfYmFsYW5jZV9leGVjKCkgc3VjY2Vzc2Z1bGx5IHB1c2hlZAorCWEgdGFzayB0byBhIG5ldyBjcHUKKyAgICAxOCkgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBzY2hlZF9iYWxhbmNlX2V4ZWMoKSB0cmllZCBidXQgZmFpbGVkIHRvCisJcHVzaCBhIHRhc2sgdG8gYSBuZXcgY3B1CisKK05leHQgdHdvIGFyZSB0cnlfdG9fd2FrZV91cCgpIHN0YXRpc3RpY3M6CisgICAgMTkpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gdHJ5X3RvX3dha2VfdXAoKSB0cmllZCB0byBtb3ZlIGEgdGFzayBiYXNlZAorCW9uIGFmZmluaXR5IGFuZCBjYWNoZSB3YXJtdGgKKyAgICAyMCkgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiB0cnlfdG9fd2FrZV91cCgpIHRyaWVkIHRvIG1vdmUgYSB0YXNrIGJhc2VkCisJb24gbG9hZCBiYWxhbmNpbmcKKworCisvcHJvYy88cGlkPi9zY2hlZHN0YXQKKy0tLS0tLS0tLS0tLS0tLS0KK3NjaGVkc3RhdHMgYWxzbyBhZGRzIGEgbmV3IC9wcm9jLzxwaWQvc2NoZWRzdGF0IGZpbGUgdG8gaW5jbHVkZSBzb21lIG9mCit0aGUgc2FtZSBpbmZvcm1hdGlvbiBvbiBhIHBlci1wcm9jZXNzIGxldmVsLiAgVGhlcmUgYXJlIHRocmVlIGZpZWxkcyBpbgordGhpcyBmaWxlIGNvcnJlbGF0aW5nIHRvIGZpZWxkcyAyMCwgMjEsIGFuZCAyMiBpbiB0aGUgQ1BVIGZpZWxkcywgYnV0Cit0aGV5IG9ubHkgYXBwbHkgZm9yIHRoYXQgcHJvY2Vzcy4KKworQSBwcm9ncmFtIGNvdWxkIGJlIGVhc2lseSB3cml0dGVuIHRvIG1ha2UgdXNlIG9mIHRoZXNlIGV4dHJhIGZpZWxkcyB0bworcmVwb3J0IG9uIGhvdyB3ZWxsIGEgcGFydGljdWxhciBwcm9jZXNzIG9yIHNldCBvZiBwcm9jZXNzZXMgaXMgZmFyaW5nCit1bmRlciB0aGUgc2NoZWR1bGVyJ3MgcG9saWNpZXMuICBBIHNpbXBsZSB2ZXJzaW9uIG9mIHN1Y2ggYSBwcm9ncmFtIGlzCithdmFpbGFibGUgYXQKKyAgICBodHRwOi8vZWFnbGV0LnJhaW4uY29tL3JpY2svbGludXgvc2NoZWRzdGF0L3YxMC9sYXRlbmN5LmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpLzAwLUlOREVYCkBAIC0wLDAgKzEsNzAgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUKKzUzYzcwMC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciA1M2M3MDAgYmFzZWQgYWRhcHRlcnMKK0FNNTNDOTc0LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEFNNTNjOTc0IGJhc2VkIGFkYXB0ZXJzCitCdXNMb2dpYy50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBhZGFwdGVycyB3aXRoIEJ1c0xvZ2ljIGNoaXBzCitDaGFuZ2VMb2cKKwktIENoYW5nZXMgdG8gc2NzaSBmaWxlcywgaWYgbm90IGxpc3RlZCBlbHNld2hlcmUKK0NoYW5nZUxvZy5pcHMKKwktIElCTSBTZXJ2ZVJBSUQgZHJpdmVyIENoYW5nZWxvZworQ2hhbmdlTG9nLm5jcjUzYzh4eAorCS0gQ2hhbmdlcyB0byBuY3I1M2M4eHggZHJpdmVyCitDaGFuZ2VMb2cuc3ltNTNjOHh4CisJLSBDaGFuZ2VzIHRvIHN5bTUzYzh4eCBkcml2ZXIKK0NoYW5nZUxvZy5zeW01M2M4eHhfMgorCS0gQ2hhbmdlcyB0byBzZWNvbmQgZ2VuZXJhdGlvbiBvZiBzeW01M2M4eHggZHJpdmVyCitGbGFzaFBvaW50LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgYWRhcHRlcnMKK0xJQ0VOU0UuRmxhc2hQb2ludAorCS0gTGljZW5jZSBvZiB0aGUgRmxhc2hwb2ludCBkcml2ZXIKK015bGV4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE15bGV4IGFkYXB0ZXJzCitOaW5qYVNDU0kudHh0CisJLSBpbmZvIG9uIFdvcmtCaVQgTmluamFTQ1NJLTMyLzMyQmkgZHJpdmVyCithaGExNTJ4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEFkYXB0ZWMgQUhBMTUyeCBiYXNlZCBhZGFwdGVycworYWljN3h4eC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBBZGFwdGVjIGNvbnRyb2xsZXJzCithaWM3eHh4X29sZC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBBZGFwdGVjIGNvbnRyb2xsZXJzLCBvbGQgZ2VuZXJhdGlvbgorY3BxZmMudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQ29tcGFxIFRhY2h5b24gVFMgYWRhcHRlcnMKK2RwdGkudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgRFBUIFNtYXJ0UkFJRCBhbmQgQWRhcHRlYyBJMk8gUkFJRCBiYXNlZCBhZGFwdGVycworZHRjM3g4MC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBEVEMgMng4MCBiYXNlZCBhZGFwdGVycworZ19OQ1I1MzgwLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzODAgYW5kIE5DUjUzYzQwMCBiYXNlZCBhZGFwdGVycworaWJtbWNhLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIElCTSBhZGFwdGVycyB3aXRoIE1DQSBidXMKK2luMjAwMC50eHQKKwktIGluZm8gb24gaW4yMDAwIGRyaXZlcgorbmNyNTNjN3h4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzYzd4eCBiYXNlZCBhZGFwdGVycworbmNyNTNjOHh4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzYzh4eCBiYXNlZCBhZGFwdGVycworb3NzdC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBPblN0cmVhbSBTQy14MCBTQ1NJIHRhcGUKK3BwYS50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBJT21lZ2EgemlwIGRyaXZlCitxbG9naWNmYXMudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgUUxvZ2ljIEZBU3h4eCBiYXNlZCBhZGFwdGVycworcWxvZ2ljaXNwLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIFFMb2dpYyBJU1AgMTAyMCBiYXNlZCBhZGFwdGVycworc2NzaS1nZW5lcmljLnR4dAorCS0gaW5mbyBvbiB0aGUgc2cgZHJpdmVyIGZvciBnZW5lcmljIChub24tZGlzay9DRC90YXBlKSBTQ1NJIGRldmljZXMuCitzY3NpLnR4dAorCS0gc2hvcnQgYmx1cmIgb24gdXNpbmcgU0NTSSBzdXBwb3J0IGFzIGEgbW9kdWxlLgorc2NzaV9taWRfbG93X2FwaS50eHQKKwktIGluZm8gb24gQVBJIGJldHdlZW4gU0NTSSBsYXllciBhbmQgbG93IGxldmVsIGRyaXZlcnMKK3N0LnR4dAorCS0gaW5mbyBvbiBzY3NpIHRhcGUgZHJpdmVyCitzeW01M2M1MDBfY3MudHh0CisJLSBpbmZvIG9uIFBDTUNJQSBkcml2ZXIgZm9yIFN5bWJpb3MgTG9naWMgNTNjNTAwIGJhc2VkIGFkYXB0ZXJzCitzeW01M2M4eHhfMi50eHQKKwktIGluZm8gb24gc2Vjb25kIGdlbmVyYXRpb24gZHJpdmVyIGZvciBzeW01M2M4eHggYmFzZWQgYWRhcHRlcnMKK3Rtc2NzaW0udHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQU01M2M5NzQgYmFzZWQgYWRhcHRlcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS81M2M3MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpLzUzYzcwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNjgxZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS81M2M3MDAudHh0CkBAIC0wLDAgKzEsMTU0IEBACitHZW5lcmFsIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSA1M2M3MDAgYW5kIDUzYzcwMC02NiBjaGlwcy4gIEl0IGFsc28gc3VwcG9ydHMKK3RoZSA1M2M3MTAgYnV0IG9ubHkgaW4gNTNjNzAwIGVtdWxhdGlvbiBtb2RlLiAgSXQgaXMgZnVsbCBmZWF0dXJlZCBhbmQKK2RvZXMgc3luYyAoLTY2IGFuZCA3MTAgb25seSksIGRpc2Nvbm5lY3RzIGFuZCB0YWcgY29tbWFuZCBxdWV1ZWluZy4KKworU2luY2UgdGhlIDUzYzcwMCBtdXN0IGJlIGludGVyZmFjZWQgdG8gYSBidXMsIHlvdSBuZWVkIHRvIHdyYXBwZXIgdGhlCitjYXJkIGRldGVjdG9yIGFyb3VuZCB0aGlzIGRyaXZlci4gIEZvciBhbiBleGFtcGxlLCBzZWUgdGhlCitOQ1JfRDcwMC5bY2hdIG9yIGxhc2k3MDAuW2NoXSBmaWxlcy4KKworVGhlIGNvbW1lbnRzIGluIHRoZSA1M2M3MDAuW2NoXSBmaWxlcyB0ZWxsIHlvdSB3aGljaCBwYXJ0cyB5b3UgbmVlZCB0bworZmlsbCBpbiB0byBnZXQgdGhlIGRyaXZlciB3b3JraW5nLgorCisKK0NvbXBpbGUgVGltZSBGbGFncworPT09PT09PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgbWF5IGJlIGVpdGhlciBpbyBtYXBwZWQgb3IgbWVtb3J5IG1hcHBlZC4gIFRoaXMgaXMKK3NlbGVjdGFibGUgYnkgY29uZmlndXJhdGlvbiBmbGFnczoKKworQ09ORklHXzUzQzcwMF9NRU1fTUFQUEVECisKK2RlZmluZSBpZiB0aGUgZHJpdmVyIGlzIG1lbW9yeSBtYXBwZWQuCisKK0NPTkZJR181M0M3MDBfSU9fTUFQUEVECisKK2RlZmluZSBpZiB0aGUgZHJpdmVyIGlzIHRvIGJlIGlvIG1hcHBlZC4KKworT25lIG9yIG90aGVyIG9mIHRoZSBhYm92ZSBmbGFncyAqbXVzdCogYmUgZGVmaW5lZC4KKworT3RoZXIgZmxhZ3MgYXJlOgorCitDT05GSUdfNTNDNzAwX0xFX09OX0JFCisKK2RlZmluZSBpZiB0aGUgY2hpcHNldCBtdXN0IGJlIHN1cHBvcnRlZCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgb24gYSBiaWcKK2VuZGlhbiBhcmNoaXRlY3R1cmUgKHVzZWQgZm9yIHRoZSA3MDAgb24gcGFyaXNjKS4KKworQ09ORklHXzUzQzcwMF9VU0VfQ09OU0lTVEVOVAorCithbGxvY2F0ZSBjb25zaXN0ZW50IG1lbW9yeSAoc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3VyIGFyY2hpdGVjdHVyZQoraGFzIGEgbWl4dHVyZSBvZiBjb25zaXN0ZW50IGFuZCBpbmNvbnNpc3RlbnQgbWVtb3J5KS4gIEZ1bGx5Citjb25zaXN0ZW50IG9yIGZ1bGx5IGluY29uc2lzdGVudCBhcmNoaXRlY3R1cmVzIHNob3VsZCBub3QgZGVmaW5lIHRoaXMuCisKKworVXNpbmcgdGhlIENoaXAgQ29yZSBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIG9yZGVyIHRvIHBsdW1iIHRoZSA1M2M3MDAgY2hpcCBjb3JlIGRyaXZlciBpbnRvIGEgd29ya2luZyBTQ1NJCitkcml2ZXIsIHlvdSBuZWVkIHRvIGtub3cgdGhyZWUgdGhpbmdzIGFib3V0IHRoZSB3YXkgdGhlIGNoaXAgaXMgd2lyZWQKK2ludG8geW91ciBzeXN0ZW0gKG9yIGV4cGFuc2lvbiBjYXJkKS4KKworMS4gVGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBTQ1NJIGNvcmUKKzIuIFRoZSBpbnRlcnJ1cHQgbGluZSB1c2VkCiszLiBUaGUgbWVtb3J5IChvciBpbyBzcGFjZSkgbG9jYXRpb24gb2YgdGhlIDUzYzcwMCByZWdpc3RlcnMuCisKK09wdGlvbmFsbHksIHlvdSBtYXkgYWxzbyBuZWVkIHRvIGtub3cgb3RoZXIgdGhpbmdzLCBsaWtlIGhvdyB0byByZWFkCit0aGUgU0NTSSBJZCBmcm9tIHRoZSBjYXJkIGJpb3Mgb3Igd2hldGhlciB0aGUgY2hpcCBpcyB3aXJlZCBmb3IKK2RpZmZlcmVudGlhbCBvcGVyYXRpb24uCisKK1VzdWFsbHkgeW91IGNhbiBmaW5kIGl0ZW1zIDIuIGFuZCAzLiBmcm9tIGdlbmVyYWwgc3BlYy4gZG9jdW1lbnRzIG9yCitldmVuIGJ5IGV4YW1pbmluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHdvcmtpbmcgZHJpdmVyIHVuZGVyIGFub3RoZXIKK29wZXJhdGluZyBzeXN0ZW0uCisKK1RoZSBjbG9jayBzcGVlZCBpcyB1c3VhbGx5IGJ1cmllZCBkZWVwIGluIHRoZSB0ZWNobmljYWwgbGl0ZXJhdHVyZS4KK0l0IGlzIHJlcXVpcmVkIGJlY2F1c2UgaXQgaXMgdXNlZCB0byBzZXQgdXAgYm90aCB0aGUgc3luY2hyb25vdXMgYW5kCithc3luY2hyb25vdXMgZGl2aWRlcnMgZm9yIHRoZSBjaGlwLiAgQXMgYSBnZW5lcmFsIHJ1bGUgb2YgdGh1bWIsCittYW51ZmFjdHVyZXJzIHNldCB0aGUgY2xvY2sgc3BlZWQgYXQgdGhlIGxvd2VzdCBwb3NzaWJsZSBzZXR0aW5nCitjb25zaXN0ZW50IHdpdGggdGhlIGJlc3Qgb3BlcmF0aW9uIG9mIHRoZSBjaGlwIChhbHRob3VnaCBzb21lIGNob29zZQordG8gZHJpdmUgaXQgb2ZmIHRoZSBDUFUgb3IgYnVzIGNsb2NrIHJhdGhlciB0aGFuIGdvaW5nIHRvIHRoZSBleHBlbnNlCitvZiBhbiBleHRyYSBjbG9jayBjaGlwKS4gIFRoZSBiZXN0IG9wZXJhdGlvbiBjbG9jayBzcGVlZHMgYXJlOgorCis1M2M3MDAgLSAyNU1IegorNTNjNzAwLTY2IC0gNTBNSHoKKzUzYzcxMCAtIDQwTWh6CisKK1dyaXRpbmcgWW91ciBHbHVlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgd2lsbCBiZSBhIHN0YW5kYXJkIFNDU0kgZHJpdmVyIChJIGRvbid0IGtub3cgb2YgYSBnb29kIGRvY3VtZW50CitkZXNjcmliaW5nIHRoaXMsIGp1c3QgY29weSBmcm9tIHNvbWUgb3RoZXIgZHJpdmVyKSB3aXRoIGF0IGxlYXN0IGEKK2RldGVjdCBhbmQgcmVsZWFzZSBlbnRyeS4KKworSW4gdGhlIGRldGVjdCByb3V0aW5lLCB5b3UgbmVlZCB0byBhbGxvY2F0ZSBhIHN0cnVjdAorTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgc2l6ZWQgbWVtb3J5IGFyZWEgYW5kIGNsZWFyIGl0IChzbyB0aGF0IHRoZQorZGVmYXVsdCB2YWx1ZXMgZm9yIGV2ZXJ5dGhpbmcgYXJlIDApLiAgVGhlbiB5b3UgbXVzdCBmaWxsIGluIHRoZQorcGFyYW1ldGVycyB0aGF0IG1hdHRlciB0byB5b3UgKHNlZSBiZWxvdyksIHBsdW1iIHRoZSBOQ1JfNzAwX2ludHIKK3JvdXRpbmUgaW50byB0aGUgaW50ZXJydXB0IGxpbmUgYW5kIGNhbGwgTkNSXzcwMF9kZXRlY3Qgd2l0aCB0aGUgaG9zdAordGVtcGxhdGUgYW5kIHRoZSBuZXcgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMuICBZb3Ugc2hvdWxkIGFsc28gY2FsbAordGhlIHJlbGV2YW50IHJlcXVlc3RfKl9yZWdpb24gZnVuY3Rpb24gYW5kIHBsYWNlIHRoZSByZWdpc3RlciBiYXNlCithZGRyZXNzIGludG8gdGhlIGBiYXNlJyBwb2ludGVyIG9mIHRoZSBob3N0IHBhcmFtZXRlcnMuCisKK0luIHRoZSByZWxlYXNlIHJvdXRpbmUsIHlvdSBtdXN0IGZyZWUgdGhlIE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzIHRoYXQKK3lvdSBhbGxvY2F0ZWQsIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgcmVsZWFzZV8qX3JlZ2lvbiBhbmQgZnJlZSB0aGUKK2ludGVycnVwdC4KKworSGFuZGxpbmcgSW50ZXJydXB0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIGp1c3QgcGx1bWIgdGhlIGNhcmQncyBpbnRlcnJ1cHQgbGluZSBpbiB3aXRoIAorCityZXF1ZXN0X2lycShpcnEsIE5DUl83MDBfaW50ciwgPGlycSBmbGFncz4sIDxkcml2ZXIgbmFtZT4sIGhvc3QpOworCit3aGVyZSBob3N0IGlzIHRoZSByZXR1cm4gZnJvbSB0aGUgcmVsZXZhbnQgTkNSXzcwMF9kZXRlY3QoKSByb3V0aW5lLgorCitZb3UgbWF5IGFsc28gd3JpdGUgeW91ciBvd24gaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmUgd2hpY2ggY2FsbHMKK05DUl83MDBfaW50cigpIGRpcmVjdGx5LiAgSG93ZXZlciwgeW91IHNob3VsZCBvbmx5IHJlYWxseSBkbyB0aGlzIGlmCit5b3UgaGF2ZSBhIGNhcmQgd2l0aCBtb3JlIHRoYW4gb25lIGNoaXAgb24gaXQgYW5kIHlvdSBjYW4gcmVhZCBhCityZWdpc3RlciB0byB0ZWxsIHdoaWNoIHNldCBvZiBjaGlwcyB3YW50cyB0aGUgaW50ZXJydXB0LgorCitTZXR0YWJsZSBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhcmUgYSBsaXN0IG9mIHRoZSB1c2VyIHNldHRhYmxlIHBhcmFtZXRlcnM6CisKK2Nsb2NrOiAoTUFOREFUT1JZKQorCitTZXQgdG8gdGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBjaGlwIGluIE1Iei4KKworYmFzZTogKE1BTkRBVE9SWSkKKworc2V0IHRvIHRoZSBiYXNlIG9mIHRoZSBpbyBvciBtZW0gcmVnaW9uIGZvciB0aGUgcmVnaXN0ZXIgc2V0LiBPbiA2NAorYml0IGFyY2hpdGVjdHVyZXMgdGhpcyBpcyBvbmx5IDMyIGJpdHMgd2lkZSwgc28gdGhlIHJlZ2lzdGVycyBtdXN0IGJlCittYXBwZWQgaW50byB0aGUgbG93IDMyIGJpdHMgb2YgbWVtb3J5LgorCitwY2lfZGV2OiAoT1BUSU9OQUwpCisKK3NldCB0byB0aGUgUENJIGJvYXJkIGRldmljZS4gIExlYXZlIE5VTEwgZm9yIGEgbm9uLXBjaSBib2FyZC4gIFRoaXMgaXMKK3VzZWQgZm9yIHRoZSBwY2lfYWxsb2NfY29uc2lzdGVudCgpIGFuZCBwY2lfbWFwXyooKSBmdW5jdGlvbnMuCisKK2Rtb2RlX2V4dHJhOiAoT1BUSU9OQUwsIDUzYzcxMCBvbmx5KQorCitleHRyYSBmbGFncyBmb3IgdGhlIERNT0RFIHJlZ2lzdGVyLiAgVGhlc2UgYXJlIHVzZWQgdG8gY29udHJvbCBidXMKK291dHB1dCBwaW5zIG9uIHRoZSA3MTAuICBUaGUgc2V0dGluZ3Mgc2hvdWxkIGJlIGEgY29tYmluYXRpb24gb2YKK0RNT0RFX0ZDMSBhbmQgRE1PREVfRkMyLiAgV2hhdCB0aGVzZSBwaW5zIGFjdHVhbGx5IGRvIGlzIGVudGlyZWx5IHVwCit0byB0aGUgYm9hcmQgZGVzaWduZXIuICBVc3VhbGx5IGl0IGlzIHNhZmUgdG8gaWdub3JlIHRoaXMgc2V0dGluZy4KKworZGlmZmVyZW50aWFsOiAoT1BUSU9OQUwpCisKK3NldCB0byAxIGlmIHRoZSBjaGlwIGRyaXZlcyBhIGRpZmZlcmVudGlhbCBidXMuCisKK2ZvcmNlX2xlX29uX2JlOiAoT1BUSU9OQUwsIG9ubHkgaWYgQ09ORklHXzUzQzcwMF9MRV9PTl9CRSBpcyBzZXQpCisKK3NldCB0byAxIGlmIHRoZSBjaGlwIGlzIG9wZXJhdGluZyBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgb24gYSBiaWcKK2VuZGlhbiBhcmNoaXRlY3R1cmUuCisKK2NoaXA3MTA6IChPUFRJT05BTCkKKworc2V0IHRvIDEgaWYgdGhlIGNoaXAgaXMgYSA1M2M3MTAuCisKK2J1cnN0X2Rpc2FibGU6IChPUFRJT05BTCwgNTNjNzEwIG9ubHkpCisKK2Rpc2FibGUgOCBieXRlIGJ1cnN0aW5nIGZvciBETUEgdHJhbnNmZXJzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQnVzTG9naWMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODAyM2JhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dApAQCAtMCwwICsxLDU2NiBAQAorCSAgIEJ1c0xvZ2ljIE11bHRpTWFzdGVyIGFuZCBGbGFzaFBvaW50IFNDU0kgRHJpdmVyIGZvciBMaW51eAorCisJCQkgVmVyc2lvbiAyLjAuMTUgZm9yIExpbnV4IDIuMAorCQkJIFZlcnNpb24gMi4xLjE1IGZvciBMaW51eCAyLjEKKworCQkJICAgICAgUFJPRFVDVElPTiBSRUxFQVNFCisKKwkJCQkxNyBBdWd1c3QgMTk5OAorCisJCQkgICAgICAgTGVvbmFyZCBOLiBadWJrb2ZmCisJCQkgICAgICAgRGFuZGVsaW9uIERpZ2l0YWwKKwkJCSAgICAgICBsbnpAZGFuZGVsaW9uLmNvbQorCisJIENvcHlyaWdodCAxOTk1LTE5OTggYnkgTGVvbmFyZCBOLiBadWJrb2ZmIDxsbnpAZGFuZGVsaW9uLmNvbT4KKworCisJCQkJIElOVFJPRFVDVElPTgorCitCdXNMb2dpYywgSW5jLiBkZXNpZ25lZCBhbmQgbWFudWZhY3R1cmVkIGEgdmFyaWV0eSBvZiBoaWdoIHBlcmZvcm1hbmNlIFNDU0kKK2hvc3QgYWRhcHRlcnMgd2hpY2ggc2hhcmUgYSBjb21tb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFjcm9zcyBhIGRpdmVyc2UKK2NvbGxlY3Rpb24gb2YgYnVzIGFyY2hpdGVjdHVyZXMgYnkgdmlydHVlIG9mIHRoZWlyIE11bHRpTWFzdGVyIEFTSUMgdGVjaG5vbG9neS4KK0J1c0xvZ2ljIHdhcyBhY3F1aXJlZCBieSBNeWxleCBDb3Jwb3JhdGlvbiBpbiBGZWJydWFyeSAxOTk2LCBidXQgdGhlIHByb2R1Y3RzCitzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgb3JpZ2luYXRlZCB1bmRlciB0aGUgQnVzTG9naWMgbmFtZSBhbmQgc28gdGhhdCBuYW1lIGlzCityZXRhaW5lZCBpbiB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGFsbCBwcmVzZW50IEJ1c0xvZ2ljIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMsIGFuZCBzaG91bGQKK3N1cHBvcnQgYW55IGZ1dHVyZSBNdWx0aU1hc3RlciBkZXNpZ25zIHdpdGggbGl0dGxlIG9yIG5vIG1vZGlmaWNhdGlvbi4gIE1vcmUKK3JlY2VudGx5LCBCdXNMb2dpYyBpbnRyb2R1Y2VkIHRoZSBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMsIHdoaWNoIGFyZSBsZXNzCitjb3N0bHkgYW5kIHJlbHkgb24gdGhlIGhvc3QgQ1BVLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgYW4gb25ib2FyZCBwcm9jZXNzb3IuCitEZXNwaXRlIG5vdCBoYXZpbmcgYW4gb25ib2FyZCBDUFUsIHRoZSBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMgcGVyZm9ybSB2ZXJ5Cit3ZWxsIGFuZCBoYXZlIHZlcnkgbG93IGNvbW1hbmQgbGF0ZW5jeS4gIEJ1c0xvZ2ljIGhhcyByZWNlbnRseSBwcm92aWRlZCBtZSB3aXRoCit0aGUgRmxhc2hQb2ludCBEcml2ZXIgRGV2ZWxvcGVyJ3MgS2l0LCB3aGljaCBjb21wcmlzZXMgZG9jdW1lbnRhdGlvbiBhbmQgZnJlZWx5CityZWRpc3RyaWJ1dGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBGbGFzaFBvaW50IFNDQ0IgTWFuYWdlci4gIFRoZSBTQ0NCIE1hbmFnZXIKK2lzIHRoZSBsaWJyYXJ5IG9mIGNvZGUgdGhhdCBydW5zIG9uIHRoZSBob3N0IENQVSBhbmQgcGVyZm9ybXMgZnVuY3Rpb25zCithbmFsb2dvdXMgdG8gdGhlIGZpcm13YXJlIG9uIHRoZSBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXJzLiAgVGhhbmtzIHRvIHRoZWlyCitoYXZpbmcgcHJvdmlkZWQgdGhlIFNDQ0IgTWFuYWdlciwgdGhpcyBkcml2ZXIgbm93IHN1cHBvcnRzIHRoZSBGbGFzaFBvaW50IEhvc3QKK0FkYXB0ZXJzIGFzIHdlbGwuCisKK015IHByaW1hcnkgZ29hbHMgaW4gd3JpdGluZyB0aGlzIGNvbXBsZXRlbHkgbmV3IEJ1c0xvZ2ljIGRyaXZlciBmb3IgTGludXggYXJlCit0byBhY2hpZXZlIHRoZSBmdWxsIHBlcmZvcm1hbmNlIHRoYXQgQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFuZCBtb2Rlcm4KK1NDU0kgcGVyaXBoZXJhbHMgYXJlIGNhcGFibGUgb2YsIGFuZCB0byBwcm92aWRlIGEgaGlnaGx5IHJvYnVzdCBkcml2ZXIgdGhhdCBjYW4KK2JlIGRlcGVuZGVkIHVwb24gZm9yIGhpZ2ggcGVyZm9ybWFuY2UgbWlzc2lvbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMuICBBbGwgb2YKK3RoZSBtYWpvciBwZXJmb3JtYW5jZSBmZWF0dXJlcyBjYW4gYmUgY29uZmlndXJlZCBmcm9tIHRoZSBMaW51eCBrZXJuZWwgY29tbWFuZAorbGluZSBvciBhdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSwgYWxsb3dpbmcgaW5kaXZpZHVhbCBpbnN0YWxsYXRpb25zIHRvCit0dW5lIGRyaXZlciBwZXJmb3JtYW5jZSBhbmQgZXJyb3IgcmVjb3ZlcnkgdG8gdGhlaXIgcGFydGljdWxhciBuZWVkcy4KKworVGhlIGxhdGVzdCBpbmZvcm1hdGlvbiBvbiBMaW51eCBzdXBwb3J0IGZvciBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMsIGFzCit3ZWxsIGFzIHRoZSBtb3N0IHJlY2VudCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyIGFuZCB0aGUgbGF0ZXN0IGZpcm13YXJlIGZvciB0aGUKK0JULTk0OC85NTgvOTU4RCwgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIGZyb20gbXkgTGludXggSG9tZSBQYWdlIGF0IFVSTAorImh0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8iLgorCitCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VudCB2aWEgZWxlY3Ryb25pYyBtYWlsIHRvICJsbnpAZGFuZGVsaW9uLmNvbSIuICBQbGVhc2UKK2luY2x1ZGUgd2l0aCB0aGUgYnVnIHJlcG9ydCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBtZXNzYWdlcyByZXBvcnRlZCBieSB0aGUKK2RyaXZlciBhbmQgU0NTSSBzdWJzeXN0ZW0gYXQgc3RhcnR1cCwgYWxvbmcgd2l0aCBhbnkgc3Vic2VxdWVudCBzeXN0ZW0gbWVzc2FnZXMKK3JlbGV2YW50IHRvIFNDU0kgb3BlcmF0aW9ucywgYW5kIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncworaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKworTXlsZXggaGFzIGJlZW4gYW4gZXhjZWxsZW50IGNvbXBhbnkgdG8gd29yayB3aXRoIGFuZCBJIGhpZ2hseSByZWNvbW1lbmQgdGhlaXIKK3Byb2R1Y3RzIHRvIHRoZSBMaW51eCBjb21tdW5pdHkuICBJbiBOb3ZlbWJlciAxOTk1LCBJIHdhcyBvZmZlcmVkIHRoZQorb3Bwb3J0dW5pdHkgdG8gYmVjb21lIGEgYmV0YSB0ZXN0IHNpdGUgZm9yIHRoZWlyIGxhdGVzdCBNdWx0aU1hc3RlciBwcm9kdWN0LAordGhlIEJULTk0OCBQQ0kgVWx0cmEgU0NTSSBIb3N0IEFkYXB0ZXIsIGFuZCB0aGVuIGFnYWluIGZvciB0aGUgQlQtOTU4IFBDSSBXaWRlCitVbHRyYSBTQ1NJIEhvc3QgQWRhcHRlciBpbiBKYW51YXJ5IDE5OTYuICBUaGlzIHdhcyBtdXR1YWxseSBiZW5lZmljaWFsIHNpbmNlCitNeWxleCByZWNlaXZlZCBhIGRlZ3JlZSBhbmQga2luZCBvZiB0ZXN0aW5nIHRoYXQgdGhlaXIgb3duIHRlc3RpbmcgZ3JvdXAgY2Fubm90CityZWFkaWx5IGFjaGlldmUsIGFuZCB0aGUgTGludXggY29tbXVuaXR5IGhhcyBhdmFpbGFibGUgaGlnaCBwZXJmb3JtYW5jZSBob3N0CithZGFwdGVycyB0aGF0IGhhdmUgYmVlbiB3ZWxsIHRlc3RlZCB3aXRoIExpbnV4IGV2ZW4gYmVmb3JlIGJlaW5nIGJyb3VnaHQgdG8KK21hcmtldC4gIFRoaXMgcmVsYXRpb25zaGlwIGhhcyBhbHNvIGdpdmVuIG1lIHRoZSBvcHBvcnR1bml0eSB0byBpbnRlcmFjdAorZGlyZWN0bHkgd2l0aCB0aGVpciB0ZWNobmljYWwgc3RhZmYsIHRvIHVuZGVyc3RhbmQgbW9yZSBhYm91dCB0aGUgaW50ZXJuYWwKK3dvcmtpbmdzIG9mIHRoZWlyIHByb2R1Y3RzLCBhbmQgaW4gdHVybiB0byBlZHVjYXRlIHRoZW0gYWJvdXQgdGhlIG5lZWRzIGFuZAorcG90ZW50aWFsIG9mIHRoZSBMaW51eCBjb21tdW5pdHkuCisKK01vcmUgcmVjZW50bHksIE15bGV4IGhhcyByZWFmZmlybWVkIHRoZSBjb21wYW55J3MgaW50ZXJlc3QgaW4gc3VwcG9ydGluZyB0aGUKK0xpbnV4IGNvbW11bml0eSwgYW5kIEkgYW0gbm93IHdvcmtpbmcgb24gYSBMaW51eCBkcml2ZXIgZm9yIHRoZSBEQUM5NjAgUENJIFJBSUQKK0NvbnRyb2xsZXJzLiAgTXlsZXgncyBpbnRlcmVzdCBhbmQgc3VwcG9ydCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLgorCitVbmxpa2Ugc29tZSBvdGhlciB2ZW5kb3JzLCBpZiB5b3UgY29udGFjdCBNeWxleCBUZWNobmljYWwgU3VwcG9ydCB3aXRoIGEKK3Byb2JsZW0gYW5kIGFyZSBydW5uaW5nIExpbnV4LCB0aGV5IHdpbGwgbm90IHRlbGwgeW91IHRoYXQgeW91ciB1c2Ugb2YgdGhlaXIKK3Byb2R1Y3RzIGlzIHVuc3VwcG9ydGVkLiAgVGhlaXIgbGF0ZXN0IHByb2R1Y3QgbWFya2V0aW5nIGxpdGVyYXR1cmUgZXZlbiBzdGF0ZXMKKyJNeWxleCBTQ1NJIGhvc3QgYWRhcHRlcnMgYXJlIGNvbXBhdGlibGUgd2l0aCBhbGwgbWFqb3Igb3BlcmF0aW5nIHN5c3RlbXMKK2luY2x1ZGluZzogLi4uIExpbnV4IC4uLiIuCisKK015bGV4IENvcnBvcmF0aW9uIGlzIGxvY2F0ZWQgYXQgMzQ1NTEgQXJkZW53b29kIEJsdmQuLCBGcmVtb250LCBDYWxpZm9ybmlhCis5NDU1NSwgVVNBIGFuZCBjYW4gYmUgcmVhY2hlZCBhdCA1MTAvNzk2LTYxMDAgb3Igb24gdGhlIFdvcmxkIFdpZGUgV2ViIGF0CitodHRwOi8vd3d3Lm15bGV4LmNvbS4gIE15bGV4IEhCQSBUZWNobmljYWwgU3VwcG9ydCBjYW4gYmUgcmVhY2hlZCBieSBlbGVjdHJvbmljCittYWlsIGF0IHRlY2hzdXBAbXlsZXguY29tLCBieSBWb2ljZSBhdCA1MTAvNjA4LTI0MDAsIG9yIGJ5IEZBWCBhdCA1MTAvNzQ1LTc3MTUuCitDb250YWN0IGluZm9ybWF0aW9uIGZvciBvZmZpY2VzIGluIEV1cm9wZSBhbmQgSmFwYW4gaXMgYXZhaWxhYmxlIG9uIHRoZSBXZWIKK3NpdGUuCisKKworCQkJCURSSVZFUiBGRUFUVVJFUworCitvIENvbmZpZ3VyYXRpb24gUmVwb3J0aW5nIGFuZCBUZXN0aW5nCisKKyAgRHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgdGhlIGRyaXZlciByZXBvcnRzIGV4dGVuc2l2ZWx5IG9uIHRoZSBob3N0CisgIGFkYXB0ZXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIHRoZSBzeW5jaHJvbm91cyB0cmFuc2ZlciBwYXJhbWV0ZXJzCisgIHJlcXVlc3RlZCBhbmQgbmVnb3RpYXRlZCB3aXRoIGVhY2ggdGFyZ2V0IGRldmljZS4gIEF1dG9TQ1NJIHNldHRpbmdzIGZvcgorICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbiwgV2lkZSBOZWdvdGlhdGlvbiwgYW5kIERpc2Nvbm5lY3QvUmVjb25uZWN0IGFyZQorICByZXBvcnRlZCBmb3IgZWFjaCB0YXJnZXQgZGV2aWNlLCBhcyB3ZWxsIGFzIHRoZSBzdGF0dXMgb2YgVGFnZ2VkIFF1ZXVpbmcuCisgIElmIHRoZSBzYW1lIHNldHRpbmcgaXMgaW4gZWZmZWN0IGZvciBhbGwgdGFyZ2V0IGRldmljZXMsIHRoZW4gYSBzaW5nbGUgd29yZAorICBvciBwaHJhc2UgaXMgdXNlZDsgb3RoZXJ3aXNlLCBhIGxldHRlciBpcyBwcm92aWRlZCBmb3IgZWFjaCB0YXJnZXQgZGV2aWNlIHRvCisgIGluZGljYXRlIHRoZSBpbmRpdmlkdWFsIHN0YXR1cy4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMKKyAgc2hvdWxkIGNsYXJpZnkgdGhpcyByZXBvcnRpbmcgZm9ybWF0OgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IFVsdHJhCisKKyAgICAgIFN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGlzIGVuYWJsZWQgZm9yIGFsbCB0YXJnZXQgZGV2aWNlcyBhbmQgdGhlIGhvc3QKKyAgICAgIGFkYXB0ZXIgd2lsbCBhdHRlbXB0IHRvIG5lZ290aWF0ZSBmb3IgMjAuMCBtZWdhLXRyYW5zZmVycy9zZWNvbmQuCisKKyAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbjogRmFzdAorCisgICAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBpcyBlbmFibGVkIGZvciBhbGwgdGFyZ2V0IGRldmljZXMgYW5kIHRoZSBob3N0CisgICAgICBhZGFwdGVyIHdpbGwgYXR0ZW1wdCB0byBuZWdvdGlhdGUgZm9yIDEwLjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kLgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IFNsb3cKKworICAgICAgU3luY2hyb25vdXMgbmVnb3RpYXRpb24gaXMgZW5hYmxlZCBmb3IgYWxsIHRhcmdldCBkZXZpY2VzIGFuZCB0aGUgaG9zdAorICAgICAgYWRhcHRlciB3aWxsIGF0dGVtcHQgdG8gbmVnb3RpYXRlIGZvciA1LjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kLgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IERpc2FibGVkCisKKyAgICAgIFN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGlzIGRpc2FibGVkIGFuZCBhbGwgdGFyZ2V0IGRldmljZXMgYXJlIGxpbWl0ZWQgdG8KKyAgICAgIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uCisKKyAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbjogVUZTTlVVVSNVVVVVVVVVVQorCisgICAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiB0byBVbHRyYSBzcGVlZCBpcyBlbmFibGVkIGZvciB0YXJnZXQgZGV2aWNlcyAwCisgICAgICBhbmQgNCB0aHJvdWdoIDE1LCB0byBGYXN0IHNwZWVkIGZvciB0YXJnZXQgZGV2aWNlIDEsIHRvIFNsb3cgc3BlZWQgZm9yCisgICAgICB0YXJnZXQgZGV2aWNlIDIsIGFuZCBpcyBub3QgcGVybWl0dGVkIHRvIHRhcmdldCBkZXZpY2UgMy4gIFRoZSBob3N0CisgICAgICBhZGFwdGVyJ3MgU0NTSSBJRCBpcyByZXByZXNlbnRlZCBieSB0aGUgIiMiLgorCisgICAgVGhlIHN0YXR1cyBvZiBXaWRlIE5lZ290aWF0aW9uLCBEaXNjb25uZWN0L1JlY29ubmVjdCwgYW5kIFRhZ2dlZCBRdWV1aW5nCisgICAgYXJlIHJlcG9ydGVkIGFzICJFbmFibGVkIiwgRGlzYWJsZWQiLCBvciBhIHNlcXVlbmNlIG9mICJZIiBhbmQgIk4iIGxldHRlcnMuCisKK28gUGVyZm9ybWFuY2UgRmVhdHVyZXMKKworICBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMgZGlyZWN0bHkgaW1wbGVtZW50IFNDU0ktMiBUYWdnZWQgUXVldWluZywgYW5kIHNvCisgIHN1cHBvcnQgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIGRyaXZlciB0byB1dGlsaXplIHRhZ2dlZCBxdWV1aW5nIHdpdGggYW55CisgIHRhcmdldCBkZXZpY2VzIHRoYXQgcmVwb3J0IGhhdmluZyB0aGUgdGFnZ2VkIHF1ZXVpbmcgY2FwYWJpbGl0eS4gIFRhZ2dlZAorICBxdWV1aW5nIGFsbG93cyBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgdG8gYmUgaXNzdWVkIHRvIGVhY2ggdGFyZ2V0CisgIGRldmljZSBvciBsb2dpY2FsIHVuaXQsIGFuZCBjYW4gaW1wcm92ZSBJL08gcGVyZm9ybWFuY2Ugc3Vic3RhbnRpYWxseS4gIEluCisgIGFkZGl0aW9uLCBCdXNMb2dpYydzIFN0cmljdCBSb3VuZCBSb2JpbiBNb2RlIGlzIHVzZWQgdG8gb3B0aW1pemUgaG9zdCBhZGFwdGVyCisgIHBlcmZvcm1hbmNlLCBhbmQgc2NhdHRlci9nYXRoZXIgSS9PIGNhbiBzdXBwb3J0IGFzIG1hbnkgc2VnbWVudHMgYXMgY2FuIGJlCisgIGVmZmVjdGl2ZWx5IHV0aWxpemVkIGJ5IHRoZSBMaW51eCBJL08gc3Vic3lzdGVtLiAgQ29udHJvbCBvdmVyIHRoZSB1c2Ugb2YKKyAgdGFnZ2VkIHF1ZXVpbmcgZm9yIGVhY2ggdGFyZ2V0IGRldmljZSBhcyB3ZWxsIGFzIGluZGl2aWR1YWwgc2VsZWN0aW9uIG9mIHRoZQorICB0YWdnZWQgcXVldWUgZGVwdGggaXMgYXZhaWxhYmxlIHRocm91Z2ggZHJpdmVyIG9wdGlvbnMgcHJvdmlkZWQgb24gdGhlIGtlcm5lbAorICBjb21tYW5kIGxpbmUgb3IgYXQgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUuICBCeSBkZWZhdWx0LCB0aGUgcXVldWUgZGVwdGgKKyAgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBob3N0IGFkYXB0ZXIncyB0b3RhbCBxdWV1ZSBkZXB0aCBhbmQKKyAgdGhlIG51bWJlciwgdHlwZSwgc3BlZWQsIGFuZCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhcmdldCBkZXZpY2VzIGZvdW5kLiAgSW4KKyAgYWRkaXRpb24sIHRhZ2dlZCBxdWV1aW5nIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbmV2ZXIgdGhlIGhvc3QgYWRhcHRlcgorICBmaXJtd2FyZSB2ZXJzaW9uIGlzIGtub3duIG5vdCB0byBpbXBsZW1lbnQgaXQgY29ycmVjdGx5LCBvciB3aGVuZXZlciBhIHRhZ2dlZAorICBxdWV1ZSBkZXB0aCBvZiAxIGlzIHNlbGVjdGVkLiAgVGFnZ2VkIHF1ZXVpbmcgaXMgYWxzbyBkaXNhYmxlZCBmb3IgaW5kaXZpZHVhbAorICB0YXJnZXQgZGV2aWNlcyBpZiBkaXNjb25uZWN0L3JlY29ubmVjdCBpcyBkaXNhYmxlZCBmb3IgdGhhdCBkZXZpY2UuCisKK28gUm9idXN0bmVzcyBGZWF0dXJlcworCisgIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBleHRlbnNpdmUgZXJyb3IgcmVjb3ZlcnkgcHJvY2VkdXJlcy4gIFdoZW4gdGhlIGhpZ2hlcgorICBsZXZlbCBwYXJ0cyBvZiB0aGUgU0NTSSBzdWJzeXN0ZW0gcmVxdWVzdCB0aGF0IGEgdGltZWQgb3V0IGNvbW1hbmQgYmUgcmVzZXQsCisgIGEgc2VsZWN0aW9uIGlzIG1hZGUgYmV0d2VlbiBhIGZ1bGwgaG9zdCBhZGFwdGVyIGhhcmQgcmVzZXQgYW5kIFNDU0kgYnVzIHJlc2V0CisgIHZlcnN1cyBzZW5kaW5nIGEgYnVzIGRldmljZSByZXNldCBtZXNzYWdlIHRvIHRoZSBpbmRpdmlkdWFsIHRhcmdldCBkZXZpY2UKKyAgYmFzZWQgb24gdGhlIHJlY29tbWVuZGF0aW9uIG9mIHRoZSBTQ1NJIHN1YnN5c3RlbS4gIEVycm9yIHJlY292ZXJ5IHN0cmF0ZWdpZXMKKyAgYXJlIHNlbGVjdGFibGUgdGhyb3VnaCBkcml2ZXIgb3B0aW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggdGFyZ2V0IGRldmljZSwKKyAgYW5kIGFsc28gaW5jbHVkZSBzZW5kaW5nIGEgYnVzIGRldmljZSByZXNldCB0byB0aGUgc3BlY2lmaWMgdGFyZ2V0IGRldmljZQorICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1hbmQgYmVpbmcgcmVzZXQsIGFzIHdlbGwgYXMgc3VwcHJlc3NpbmcgZXJyb3IKKyAgcmVjb3ZlcnkgZW50aXJlbHkgdG8gYXZvaWQgcGVydHVyYmluZyBhbiBpbXByb3Blcmx5IGZ1bmN0aW9uaW5nIGRldmljZS4gIElmCisgIHRoZSBidXMgZGV2aWNlIHJlc2V0IGVycm9yIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIHNlbGVjdGVkIGFuZCBzZW5kaW5nIGEgYnVzCisgIGRldmljZSByZXNldCBkb2VzIG5vdCByZXN0b3JlIGNvcnJlY3Qgb3BlcmF0aW9uLCB0aGUgbmV4dCBjb21tYW5kIHRoYXQgaXMKKyAgcmVzZXQgd2lsbCBmb3JjZSBhIGZ1bGwgaG9zdCBhZGFwdGVyIGhhcmQgcmVzZXQgYW5kIFNDU0kgYnVzIHJlc2V0LiAgU0NTSSBidXMKKyAgcmVzZXRzIGNhdXNlZCBieSBvdGhlciBkZXZpY2VzIGFuZCBkZXRlY3RlZCBieSB0aGUgaG9zdCBhZGFwdGVyIGFyZSBhbHNvCisgIGhhbmRsZWQgYnkgaXNzdWluZyBhIHNvZnQgcmVzZXQgdG8gdGhlIGhvc3QgYWRhcHRlciBhbmQgcmUtaW5pdGlhbGl6YXRpb24uCisgIEZpbmFsbHksIGlmIHRhZ2dlZCBxdWV1aW5nIGlzIGFjdGl2ZSBhbmQgbW9yZSB0aGFuIG9uZSBjb21tYW5kIHJlc2V0IG9jY3VycworICBpbiBhIDEwIG1pbnV0ZSBpbnRlcnZhbCwgb3IgaWYgYSBjb21tYW5kIHJlc2V0IG9jY3VycyB3aXRoaW4gdGhlIGZpcnN0IDEwCisgIG1pbnV0ZXMgb2Ygb3BlcmF0aW9uLCB0aGVuIHRhZ2dlZCBxdWV1aW5nIHdpbGwgYmUgZGlzYWJsZWQgZm9yIHRoYXQgdGFyZ2V0CisgIGRldmljZS4gIFRoZXNlIGVycm9yIHJlY292ZXJ5IG9wdGlvbnMgaW1wcm92ZSBvdmVyYWxsIHN5c3RlbSByb2J1c3RuZXNzIGJ5CisgIHByZXZlbnRpbmcgaW5kaXZpZHVhbCBlcnJhbnQgZGV2aWNlcyBmcm9tIGNhdXNpbmcgdGhlIHN5c3RlbSBhcyBhIHdob2xlIHRvCisgIGxvY2sgdXAgb3IgY3Jhc2gsIGFuZCB0aGVyZWJ5IGFsbG93aW5nIGEgY2xlYW4gc2h1dGRvd24gYW5kIHJlc3RhcnQgYWZ0ZXIgdGhlCisgIG9mZmVuZGluZyBjb21wb25lbnQgaXMgcmVtb3ZlZC4KKworbyBQQ0kgQ29uZmlndXJhdGlvbiBTdXBwb3J0CisKKyAgT24gUENJIHN5c3RlbXMgcnVubmluZyBrZXJuZWxzIGNvbXBpbGVkIHdpdGggUENJIEJJT1Mgc3VwcG9ydCBlbmFibGVkLCB0aGlzCisgIGRyaXZlciB3aWxsIGludGVycm9nYXRlIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgdXNlIHRoZSBJL08gcG9ydAorICBhZGRyZXNzZXMgYXNzaWduZWQgYnkgdGhlIHN5c3RlbSBCSU9TLCByYXRoZXIgdGhhbiB0aGUgSVNBIGNvbXBhdGlibGUgSS9PCisgIHBvcnQgYWRkcmVzc2VzLiAgVGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0IGFkZHJlc3MgaXMgdGhlbiBkaXNhYmxlZCBieSB0aGUKKyAgZHJpdmVyLiAgT24gUENJIHN5c3RlbXMgaXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IHRoZSBBdXRvU0NTSSB1dGlsaXR5IGJlCisgIHVzZWQgdG8gZGlzYWJsZSB0aGUgSVNBIGNvbXBhdGlibGUgSS9PIHBvcnQgZW50aXJlbHkgYXMgaXQgaXMgbm90IG5lY2Vzc2FyeS4KKyAgVGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgb24gdGhlIEJULTk0OC85NTgvOTU4RC4KKworbyAvcHJvYyBGaWxlIFN5c3RlbSBTdXBwb3J0CisKKyAgQ29waWVzIG9mIHRoZSBob3N0IGFkYXB0ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0b2dldGhlciB3aXRoIHVwZGF0ZWQKKyAgZGF0YSB0cmFuc2ZlciBhbmQgZXJyb3IgcmVjb3Zlcnkgc3RhdGlzdGljcyBhcmUgYXZhaWxhYmxlIHRocm91Z2ggdGhlCisgIC9wcm9jL3Njc2kvQnVzTG9naWMvPE4+IGludGVyZmFjZS4KKworbyBTaGFyZWQgSW50ZXJydXB0cyBTdXBwb3J0CisKKyAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc2hhcmVkIGludGVycnVwdHMsIGFueSBudW1iZXIgb2YgQnVzTG9naWMgSG9zdAorICBBZGFwdGVycyBtYXkgc2hhcmUgdGhlIHNhbWUgaW50ZXJydXB0IHJlcXVlc3QgY2hhbm5lbC4KKworCisJCQkgICAgU1VQUE9SVEVEIEhPU1QgQURBUFRFUlMKKworVGhlIGZvbGxvd2luZyBsaXN0IGNvbXByaXNlcyB0aGUgc3VwcG9ydGVkIEJ1c0xvZ2ljIFNDU0kgSG9zdCBBZGFwdGVycyBhcyBvZgordGhlIGRhdGUgb2YgdGhpcyBkb2N1bWVudC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55b25lIHB1cmNoYXNpbmcgYSBCdXNMb2dpYworSG9zdCBBZGFwdGVyIG5vdCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGNvbnRhY3QgdGhlIGF1dGhvciBiZWZvcmVoYW5kIHRvIHZlcmlmeQordGhhdCBpdCBpcyBvciB3aWxsIGJlIHN1cHBvcnRlZC4KKworRmxhc2hQb2ludCBTZXJpZXMgUENJIEhvc3QgQWRhcHRlcnM6CisKK0ZsYXNoUG9pbnQgTFQgKEJULTkzMCkJVWx0cmEgU0NTSS0zCitGbGFzaFBvaW50IExUIChCVC05MzBSKQlVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBMVCAoQlQtOTIwKQlVbHRyYSBTQ1NJLTMgKEJULTkzMCB3aXRob3V0IEJJT1MpCitGbGFzaFBvaW50IERMIChCVC05MzIpCUR1YWwgQ2hhbm5lbCBVbHRyYSBTQ1NJLTMKK0ZsYXNoUG9pbnQgREwgKEJULTkzMlIpCUR1YWwgQ2hhbm5lbCBVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBMVyAoQlQtOTUwKQlXaWRlIFVsdHJhIFNDU0ktMworRmxhc2hQb2ludCBMVyAoQlQtOTUwUikJV2lkZSBVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBEVyAoQlQtOTUyKQlEdWFsIENoYW5uZWwgV2lkZSBVbHRyYSBTQ1NJLTMKK0ZsYXNoUG9pbnQgRFcgKEJULTk1MlIpCUR1YWwgQ2hhbm5lbCBXaWRlIFVsdHJhIFNDU0ktMyB3aXRoIFJBSURQbHVzCisKK011bHRpTWFzdGVyICJXIiBTZXJpZXMgSG9zdCBBZGFwdGVyczoKKworQlQtOTQ4CSAgICBQQ0kJCVVsdHJhIFNDU0ktMworQlQtOTU4CSAgICBQQ0kJCVdpZGUgVWx0cmEgU0NTSS0zCitCVC05NThECSAgICBQQ0kJCVdpZGUgRGlmZmVyZW50aWFsIFVsdHJhIFNDU0ktMworCitNdWx0aU1hc3RlciAiQyIgU2VyaWVzIEhvc3QgQWRhcHRlcnM6CisKK0JULTk0NkMJICAgIFBDSQkJRmFzdCBTQ1NJLTIKK0JULTk1NkMJICAgIFBDSQkJV2lkZSBGYXN0IFNDU0ktMgorQlQtOTU2Q0QgICAgUENJCQlXaWRlIERpZmZlcmVudGlhbCBGYXN0IFNDU0ktMgorQlQtNDQ1QwkgICAgVkxCCQlGYXN0IFNDU0ktMgorQlQtNzQ3QwkgICAgRUlTQQlGYXN0IFNDU0ktMgorQlQtNzU3QwkgICAgRUlTQQlXaWRlIEZhc3QgU0NTSS0yCitCVC03NTdDRCAgICBFSVNBCVdpZGUgRGlmZmVyZW50aWFsIEZhc3QgU0NTSS0yCitCVC01NDVDCSAgICBJU0EJCUZhc3QgU0NTSS0yCitCVC01NDBDRiAgICBJU0EJCUZhc3QgU0NTSS0yCisKK011bHRpTWFzdGVyICJTIiBTZXJpZXMgSG9zdCBBZGFwdGVyczoKKworQlQtNDQ1UwkgICAgVkxCCQlGYXN0IFNDU0ktMgorQlQtNzQ3UwkgICAgRUlTQQlGYXN0IFNDU0ktMgorQlQtNzQ3RAkgICAgRUlTQQlEaWZmZXJlbnRpYWwgRmFzdCBTQ1NJLTIKK0JULTc1N1MJICAgIEVJU0EJV2lkZSBGYXN0IFNDU0ktMgorQlQtNzU3RAkgICAgRUlTQQlXaWRlIERpZmZlcmVudGlhbCBGYXN0IFNDU0ktMgorQlQtNTQ1UwkgICAgSVNBCQlGYXN0IFNDU0ktMgorQlQtNTQyRAkgICAgSVNBCQlEaWZmZXJlbnRpYWwgRmFzdCBTQ1NJLTIKK0JULTc0MkEJICAgIEVJU0EJU0NTSS0yICg3NDJBIHJldmlzaW9uIEgpCitCVC01NDJCCSAgICBJU0EJCVNDU0ktMiAoNTQyQiByZXZpc2lvbiBIKQorCitNdWx0aU1hc3RlciAiQSIgU2VyaWVzIEhvc3QgQWRhcHRlcnM6CisKK0JULTc0MkEJICAgIEVJU0EJU0NTSS0yICg3NDJBIHJldmlzaW9ucyBBIC0gRykKK0JULTU0MkIJICAgIElTQQkJU0NTSS0yICg1NDJCIHJldmlzaW9ucyBBIC0gRykKKworQU1JIEZhc3REaXNrIEhvc3QgQWRhcHRlcnMgdGhhdCBhcmUgdHJ1ZSBCdXNMb2dpYyBNdWx0aU1hc3RlciBjbG9uZXMgYXJlIGFsc28KK3N1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KKworQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFyZSBhdmFpbGFibGUgcGFja2FnZWQgYm90aCBhcyBiYXJlIGJvYXJkcyBhbmQgYXMKK3JldGFpbCBraXRzLiAgVGhlIEJULSBtb2RlbCBudW1iZXJzIGFib3ZlIHJlZmVyIHRvIHRoZSBiYXJlIGJvYXJkIHBhY2thZ2luZy4KK1RoZSByZXRhaWwga2l0IG1vZGVsIG51bWJlcnMgYXJlIGZvdW5kIGJ5IHJlcGxhY2luZyBCVC0gd2l0aCBLVC0gaW4gdGhlIGFib3ZlCitsaXN0LiAgVGhlIHJldGFpbCBraXQgaW5jbHVkZXMgdGhlIGJhcmUgYm9hcmQgYW5kIG1hbnVhbCBhcyB3ZWxsIGFzIGNhYmxpbmcgYW5kCitkcml2ZXIgbWVkaWEgYW5kIGRvY3VtZW50YXRpb24gdGhhdCBhcmUgbm90IHByb3ZpZGVkIHdpdGggYmFyZSBib2FyZHMuCisKKworCQkJIEZMQVNIUE9JTlQgSU5TVEFMTEFUSU9OIE5PVEVTCisKK28gUkFJRFBsdXMgU3VwcG9ydAorCisgIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycyBub3cgaW5jbHVkZSBSQUlEUGx1cywgTXlsZXgncyBib290YWJsZSBzb2Z0d2FyZQorICBSQUlELiAgUkFJRFBsdXMgaXMgbm90IHN1cHBvcnRlZCBvbiBMaW51eCwgYW5kIHRoZXJlIGFyZSBubyBwbGFucyB0byBzdXBwb3J0CisgIGl0LiAgVGhlIE1EIGRyaXZlciBpbiBMaW51eCAyLjAgcHJvdmlkZXMgZm9yIGNvbmNhdGVuYXRpb24gKExJTkVBUikgYW5kCisgIHN0cmlwaW5nIChSQUlELTApLCBhbmQgc3VwcG9ydCBmb3IgbWlycm9yaW5nIChSQUlELTEpLCBmaXhlZCBwYXJpdHkgKFJBSUQtNCksCisgIGFuZCBkaXN0cmlidXRlZCBwYXJpdHkgKFJBSUQtNSkgaXMgYXZhaWxhYmxlIHNlcGFyYXRlbHkuICBUaGUgYnVpbHQtaW4gTGludXgKKyAgUkFJRCBzdXBwb3J0IGlzIGdlbmVyYWxseSBtb3JlIGZsZXhpYmxlIGFuZCBpcyBleHBlY3RlZCB0byBwZXJmb3JtIGJldHRlcgorICB0aGFuIFJBSURQbHVzLCBzbyB0aGVyZSBpcyBsaXR0bGUgaW1wZXR1cyB0byBpbmNsdWRlIFJBSURQbHVzIHN1cHBvcnQgaW4gdGhlCisgIEJ1c0xvZ2ljIGRyaXZlci4KKworbyBFbmFibGluZyBVbHRyYVNDU0kgVHJhbnNmZXJzCisKKyAgRmxhc2hQb2ludCBIb3N0IEFkYXB0ZXJzIHNoaXAgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uIHNldCB0byAiRmFjdG9yeQorICBEZWZhdWx0IiBzZXR0aW5ncyB0aGF0IGFyZSBjb25zZXJ2YXRpdmUgYW5kIGRvIG5vdCBhbGxvdyBmb3IgVWx0cmFTQ1NJIHNwZWVkCisgIHRvIGJlIG5lZ290aWF0ZWQuICBUaGlzIHJlc3VsdHMgaW4gZmV3ZXIgcHJvYmxlbXMgd2hlbiB0aGVzZSBob3N0IGFkYXB0ZXJzCisgIGFyZSBpbnN0YWxsZWQgaW4gc3lzdGVtcyB3aXRoIGNhYmxpbmcgb3IgdGVybWluYXRpb24gdGhhdCBpcyBub3Qgc3VmZmljaWVudAorICBmb3IgVWx0cmFTQ1NJIG9wZXJhdGlvbiwgb3Igd2hlcmUgZXhpc3RpbmcgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseQorICByZXNwb25kIHRvIHN5bmNocm9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBVbHRyYVNDU0kgc3BlZWQuICBBdXRvU0NTSQorICBtYXkgYmUgdXNlZCB0byBsb2FkICJPcHRpbXVtIFBlcmZvcm1hbmNlIiBzZXR0aW5ncyB3aGljaCBhbGxvdyBVbHRyYVNDU0kKKyAgc3BlZWQgdG8gYmUgbmVnb3RpYXRlZCB3aXRoIGFsbCBkZXZpY2VzLCBvciBVbHRyYVNDU0kgc3BlZWQgY2FuIGJlIGVuYWJsZWQgb24KKyAgYW4gaW5kaXZpZHVhbCBiYXNpcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU0NBTSBiZSBtYW51YWxseSBkaXNhYmxlZCBhZnRlcgorICB0aGUgIk9wdGltdW0gUGVyZm9ybWFuY2UiIHNldHRpbmdzIGFyZSBsb2FkZWQuCisKKworCQkgICAgICBCVC05NDgvOTU4Lzk1OEQgSU5TVEFMTEFUSU9OIE5PVEVTCisKK1RoZSBCVC05NDgvOTU4Lzk1OEQgUENJIFVsdHJhIFNDU0kgSG9zdCBBZGFwdGVycyBoYXZlIHNvbWUgZmVhdHVyZXMgd2hpY2ggbWF5CityZXF1aXJlIGF0dGVudGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMgd2hlbiBpbnN0YWxsaW5nIExpbnV4LgorCitvIFBDSSBJL08gUG9ydCBBc3NpZ25tZW50cworCisgIFdoZW4gY29uZmlndXJlZCB0byBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZ3MsIHRoZSBCVC05NDgvOTU4Lzk1OEQgd2lsbCBvbmx5CisgIHJlY29nbml6ZSB0aGUgUENJIEkvTyBwb3J0IGFzc2lnbm1lbnRzIG1hZGUgYnkgdGhlIG1vdGhlcmJvYXJkJ3MgUENJIEJJT1MuCisgIFRoZSBCVC05NDgvOTU4Lzk1OEQgd2lsbCBub3QgcmVzcG9uZCB0byBhbnkgb2YgdGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0cworICB0aGF0IHByZXZpb3VzIEJ1c0xvZ2ljIFNDU0kgSG9zdCBBZGFwdGVycyByZXNwb25kIHRvLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMKKyAgdGhlIFBDSSBJL08gcG9ydCBhc3NpZ25tZW50cywgc28gdGhpcyBpcyB0aGUgcHJlZmVycmVkIGNvbmZpZ3VyYXRpb24uCisgIEhvd2V2ZXIsIGlmIHRoZSBvYnNvbGV0ZSBCdXNMb2dpYyBkcml2ZXIgbXVzdCBiZSB1c2VkIGZvciBhbnkgcmVhc29uLCBzdWNoIGFzCisgIGEgTGludXggZGlzdHJpYnV0aW9uIHRoYXQgZG9lcyBub3QgeWV0IHVzZSB0aGlzIGRyaXZlciBpbiBpdHMgYm9vdCBrZXJuZWwsCisgIEJ1c0xvZ2ljIGhhcyBwcm92aWRlZCBhbiBBdXRvU0NTSSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgYSBsZWdhY3kgSVNBCisgIGNvbXBhdGlibGUgSS9PIHBvcnQuCisKKyAgVG8gZW5hYmxlIHRoaXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvcHRpb24sIGludm9rZSB0aGUgQXV0b1NDU0kgdXRpbGl0eSB2aWEKKyAgQ3RybC1CIGF0IHN5c3RlbSBzdGFydHVwIGFuZCBzZWxlY3QgIkFkYXB0ZXIgQ29uZmlndXJhdGlvbiIsICJWaWV3L01vZGlmeQorICBDb25maWd1cmF0aW9uIiwgYW5kIHRoZW4gY2hhbmdlIHRoZSAiSVNBIENvbXBhdGlibGUgUG9ydCIgc2V0dGluZyBmcm9tCisgICJEaXNhYmxlIiB0byAiUHJpbWFyeSIgb3IgIkFsdGVybmF0ZSIuICBPbmNlIHRoaXMgZHJpdmVyIGhhcyBiZWVuIGluc3RhbGxlZCwKKyAgdGhlICJJU0EgQ29tcGF0aWJsZSBQb3J0IiBvcHRpb24gc2hvdWxkIGJlIHNldCBiYWNrIHRvICJEaXNhYmxlIiB0byBhdm9pZAorICBwb3NzaWJsZSBmdXR1cmUgSS9PIHBvcnQgY29uZmxpY3RzLiAgVGhlIG9sZGVyIEJULTk0NkMvOTU2Qy85NTZDRCBhbHNvIGhhdmUKKyAgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IHRoZSBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZyBpcyAiUHJpbWFyeSIuCisKK28gUENJIFNsb3QgU2Nhbm5pbmcgT3JkZXIKKworICBJbiBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgQnVzTG9naWMgUENJIEhvc3QgQWRhcHRlcnMsIHRoZSBvcmRlciBpbiB3aGljaCB0aGUKKyAgUENJIHNsb3RzIGFyZSBzY2FubmVkIG1heSBhcHBlYXIgcmV2ZXJzZWQgd2l0aCB0aGUgQlQtOTQ4Lzk1OC85NThEIGFzCisgIGNvbXBhcmVkIHRvIHRoZSBCVC05NDZDLzk1NkMvOTU2Q0QuICBGb3IgYm9vdGluZyBmcm9tIGEgU0NTSSBkaXNrIHRvIHdvcmsKKyAgY29ycmVjdGx5LCBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgaG9zdCBhZGFwdGVyJ3MgQklPUyBhbmQgdGhlIGtlcm5lbCBhZ3JlZQorICBvbiB3aGljaCBkaXNrIGlzIHRoZSBib290IGRldmljZSwgd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGV5IHJlY29nbml6ZSB0aGUgUENJCisgIGhvc3QgYWRhcHRlcnMgaW4gdGhlIHNhbWUgb3JkZXIuICBUaGUgbW90aGVyYm9hcmQncyBQQ0kgQklPUyBwcm92aWRlcyBhCisgIHN0YW5kYXJkIHdheSBvZiBlbnVtZXJhdGluZyB0aGUgUENJIGhvc3QgYWRhcHRlcnMsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIExpbnV4CisgIGtlcm5lbC4gIFNvbWUgUENJIEJJT1MgaW1wbGVtZW50YXRpb25zIGVudW1lcmF0ZSB0aGUgUENJIHNsb3RzIGluIG9yZGVyIG9mCisgIGluY3JlYXNpbmcgYnVzIG51bWJlciBhbmQgZGV2aWNlIG51bWJlciwgd2hpbGUgb3RoZXJzIGRvIHNvIGluIHRoZSBvcHBvc2l0ZQorICBkaXJlY3Rpb24uCisKKyAgVW5mb3J0dW5hdGVseSwgTWljcm9zb2Z0IGRlY2lkZWQgdGhhdCBXaW5kb3dzIDk1IHdvdWxkIGFsd2F5cyBlbnVtZXJhdGUgdGhlCisgIFBDSSBzbG90cyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGJ1cyBudW1iZXIgYW5kIGRldmljZSBudW1iZXIgcmVnYXJkbGVzcyBvZgorICB0aGUgUENJIEJJT1MgZW51bWVyYXRpb24sIGFuZCByZXF1aXJlcyB0aGF0IHRoZWlyIHNjaGVtZSBiZSBzdXBwb3J0ZWQgYnkgdGhlCisgIGhvc3QgYWRhcHRlcidzIEJJT1MgdG8gcmVjZWl2ZSBXaW5kb3dzIDk1IGNlcnRpZmljYXRpb24uICBUaGVyZWZvcmUsIHRoZQorICBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIEJULTk0OC85NTgvOTU4RCBlbnVtZXJhdGUgdGhlIGhvc3QgYWRhcHRlcnMKKyAgYnkgaW5jcmVhc2luZyBidXMgbnVtYmVyIGFuZCBkZXZpY2UgbnVtYmVyLiAgVG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUsIGludm9rZQorICB0aGUgQXV0b1NDU0kgdXRpbGl0eSB2aWEgQ3RybC1CIGF0IHN5c3RlbSBzdGFydHVwIGFuZCBzZWxlY3QgIkFkYXB0ZXIKKyAgQ29uZmlndXJhdGlvbiIsICJWaWV3L01vZGlmeSBDb25maWd1cmF0aW9uIiwgcHJlc3MgQ3RybC1GMTAsIGFuZCB0aGVuIGNoYW5nZQorICB0aGUgIlVzZSBCdXMgQW5kIERldmljZSAjIEZvciBQQ0kgU2Nhbm5pbmcgU2VxLiIgb3B0aW9uIHRvIE9GRi4KKworICBUaGlzIGRyaXZlciB3aWxsIGludGVycm9nYXRlIHRoZSBzZXR0aW5nIG9mIHRoZSBQQ0kgU2Nhbm5pbmcgU2VxdWVuY2Ugb3B0aW9uCisgIHNvIGFzIHRvIHJlY29nbml6ZSB0aGUgaG9zdCBhZGFwdGVycyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBlbnVtZXJhdGVkCisgIGJ5IHRoZSBob3N0IGFkYXB0ZXIncyBCSU9TLgorCitvIEVuYWJsaW5nIFVsdHJhU0NTSSBUcmFuc2ZlcnMKKworICBUaGUgQlQtOTQ4Lzk1OC85NThEIHNoaXAgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uIHNldCB0byAiRmFjdG9yeSBEZWZhdWx0IgorICBzZXR0aW5ncyB0aGF0IGFyZSBjb25zZXJ2YXRpdmUgYW5kIGRvIG5vdCBhbGxvdyBmb3IgVWx0cmFTQ1NJIHNwZWVkIHRvIGJlCisgIG5lZ290aWF0ZWQuICBUaGlzIHJlc3VsdHMgaW4gZmV3ZXIgcHJvYmxlbXMgd2hlbiB0aGVzZSBob3N0IGFkYXB0ZXJzIGFyZQorICBpbnN0YWxsZWQgaW4gc3lzdGVtcyB3aXRoIGNhYmxpbmcgb3IgdGVybWluYXRpb24gdGhhdCBpcyBub3Qgc3VmZmljaWVudCBmb3IKKyAgVWx0cmFTQ1NJIG9wZXJhdGlvbiwgb3Igd2hlcmUgZXhpc3RpbmcgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseSByZXNwb25kCisgIHRvIHN5bmNocm9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBVbHRyYVNDU0kgc3BlZWQuICBBdXRvU0NTSSBtYXkgYmUKKyAgdXNlZCB0byBsb2FkICJPcHRpbXVtIFBlcmZvcm1hbmNlIiBzZXR0aW5ncyB3aGljaCBhbGxvdyBVbHRyYVNDU0kgc3BlZWQgdG8gYmUKKyAgbmVnb3RpYXRlZCB3aXRoIGFsbCBkZXZpY2VzLCBvciBVbHRyYVNDU0kgc3BlZWQgY2FuIGJlIGVuYWJsZWQgb24gYW4KKyAgaW5kaXZpZHVhbCBiYXNpcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU0NBTSBiZSBtYW51YWxseSBkaXNhYmxlZCBhZnRlciB0aGUKKyAgIk9wdGltdW0gUGVyZm9ybWFuY2UiIHNldHRpbmdzIGFyZSBsb2FkZWQuCisKKworCQkJCURSSVZFUiBPUFRJT05TCisKK0J1c0xvZ2ljIERyaXZlciBPcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgZWl0aGVyIHZpYSB0aGUgTGludXggS2VybmVsIENvbW1hbmQKK0xpbmUgb3IgdmlhIHRoZSBMb2FkYWJsZSBLZXJuZWwgTW9kdWxlIEluc3RhbGxhdGlvbiBGYWNpbGl0eS4gIERyaXZlciBPcHRpb25zCitmb3IgbXVsdGlwbGUgaG9zdCBhZGFwdGVycyBtYXkgYmUgc3BlY2lmaWVkIGVpdGhlciBieSBzZXBhcmF0aW5nIHRoZSBvcHRpb24KK3N0cmluZ3MgYnkgYSBzZW1pY29sb24sIG9yIGJ5IHNwZWNpZnlpbmcgbXVsdGlwbGUgIkJ1c0xvZ2ljPSIgc3RyaW5ncyBvbiB0aGUKK2NvbW1hbmQgbGluZS4gIEluZGl2aWR1YWwgb3B0aW9uIHNwZWNpZmljYXRpb25zIGZvciBhIHNpbmdsZSBob3N0IGFkYXB0ZXIgYXJlCitzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhlIFByb2JpbmcgYW5kIERlYnVnZ2luZyBPcHRpb25zIGFwcGx5IHRvIGFsbCBob3N0CithZGFwdGVycyB3aGVyZWFzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhcHBseSBpbmRpdmlkdWFsbHkgb25seSB0byB0aGUKK3NlbGVjdGVkIGhvc3QgYWRhcHRlci4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBQcm9iaW5nIE9wdGlvbnMgY29tcHJpc2UgdGhlIGZvbGxvd2luZzoKKworSU86PGludGVnZXI+CisKKyAgVGhlICJJTzoiIG9wdGlvbiBzcGVjaWZpZXMgYW4gSVNBIEkvTyBBZGRyZXNzIHRvIGJlIHByb2JlZCBmb3IgYSBub24tUENJCisgIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlci4gIElmIG5laXRoZXIgIklPOiIgbm9yICJOb1Byb2JlSVNBIiBvcHRpb25zIGFyZQorICBzcGVjaWZpZWQsIHRoZW4gdGhlIHN0YW5kYXJkIGxpc3Qgb2YgQnVzTG9naWMgTXVsdGlNYXN0ZXIgSVNBIEkvTyBBZGRyZXNzZXMKKyAgd2lsbCBiZSBwcm9iZWQgKDB4MzMwLCAweDMzNCwgMHgyMzAsIDB4MjM0LCAweDEzMCwgYW5kIDB4MTM0KS4gIE11bHRpcGxlCisgICJJTzoiIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZCB0byBwcmVjaXNlbHkgZGV0ZXJtaW5lIHRoZSBJL08gQWRkcmVzc2VzIHRvCisgIGJlIHByb2JlZCwgYnV0IHRoZSBwcm9iZSBvcmRlciB3aWxsIGFsd2F5cyBmb2xsb3cgdGhlIHN0YW5kYXJkIGxpc3QuCisKK05vUHJvYmUKKworICBUaGUgIk5vUHJvYmUiIG9wdGlvbiBkaXNhYmxlcyBhbGwgcHJvYmluZyBhbmQgdGhlcmVmb3JlIG5vIEJ1c0xvZ2ljIEhvc3QKKyAgQWRhcHRlcnMgd2lsbCBiZSBkZXRlY3RlZC4KKworTm9Qcm9iZUlTQQorCisgIFRoZSAiTm9Qcm9iZUlTQSIgb3B0aW9uIGRpc2FibGVzIHByb2Jpbmcgb2YgdGhlIHN0YW5kYXJkIEJ1c0xvZ2ljIElTQSBJL08KKyAgQWRkcmVzc2VzIGFuZCB0aGVyZWZvcmUgb25seSBQQ0kgTXVsdGlNYXN0ZXIgYW5kIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycworICB3aWxsIGJlIGRldGVjdGVkLgorCitOb1Byb2JlUENJCisKKyAgVGhlICJOb1Byb2JlUENJIiBvcHRpb25zIGRpc2FibGVzIHRoZSBpbnRlcnJvZ2F0aW9uIG9mIFBDSSBDb25maWd1cmF0aW9uCisgIFNwYWNlIGFuZCB0aGVyZWZvcmUgb25seSBJU0EgTXVsdGltYXN0ZXIgSG9zdCBBZGFwdGVycyB3aWxsIGJlIGRldGVjdGVkLCBhcworICB3ZWxsIGFzIFBDSSBNdWx0aW1hc3RlciBIb3N0IEFkYXB0ZXJzIHRoYXQgaGF2ZSB0aGVpciBJU0EgQ29tcGF0aWJsZSBJL08KKyAgUG9ydCBzZXQgdG8gIlByaW1hcnkiIG9yICJBbHRlcm5hdGUiLgorCitOb1NvcnRQQ0kKKworICBUaGUgIk5vU29ydFBDSSIgb3B0aW9uIGZvcmNlcyBQQ0kgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycyB0byBiZQorICBlbnVtZXJhdGVkIGluIHRoZSBvcmRlciBwcm92aWRlZCBieSB0aGUgUENJIEJJT1MsIGlnbm9yaW5nIGFueSBzZXR0aW5nIG9mCisgIHRoZSBBdXRvU0NTSSAiVXNlIEJ1cyBBbmQgRGV2aWNlICMgRm9yIFBDSSBTY2FubmluZyBTZXEuIiBvcHRpb24uCisKK011bHRpTWFzdGVyRmlyc3QKKworICBUaGUgIk11bHRpTWFzdGVyRmlyc3QiIG9wdGlvbiBmb3JjZXMgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycyB0byBiZSBwcm9iZWQKKyAgYmVmb3JlIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycy4gIEJ5IGRlZmF1bHQsIGlmIGJvdGggRmxhc2hQb2ludCBhbmQgUENJCisgIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMgYXJlIHByZXNlbnQsIHRoaXMgZHJpdmVyIHdpbGwgcHJvYmUgZm9yCisgIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycyBmaXJzdCB1bmxlc3MgdGhlIEJJT1MgcHJpbWFyeSBkaXNrIGlzIGNvbnRyb2xsZWQKKyAgYnkgdGhlIGZpcnN0IFBDSSBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXIsIGluIHdoaWNoIGNhc2UgTXVsdGlNYXN0ZXIgSG9zdAorICBBZGFwdGVycyB3aWxsIGJlIHByb2JlZCBmaXJzdC4KKworRmxhc2hQb2ludEZpcnN0CisKKyAgVGhlICJGbGFzaFBvaW50Rmlyc3QiIG9wdGlvbiBmb3JjZXMgRmxhc2hQb2ludCBIb3N0IEFkYXB0ZXJzIHRvIGJlIHByb2JlZAorICBiZWZvcmUgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycy4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBUYWdnZWQgUXVldWluZyBPcHRpb25zIGFsbG93IGZvciBleHBsaWNpdGx5IHNwZWNpZnlpbmcKK3RoZSBRdWV1ZSBEZXB0aCBhbmQgd2hldGhlciBUYWdnZWQgUXVldWluZyBpcyBwZXJtaXR0ZWQgZm9yIGVhY2ggVGFyZ2V0CitEZXZpY2UgKGFzc3VtaW5nIHRoYXQgdGhlIFRhcmdldCBEZXZpY2Ugc3VwcG9ydHMgVGFnZ2VkIFF1ZXVpbmcpLiAgVGhlIFF1ZXVlCitEZXB0aCBpcyB0aGUgbnVtYmVyIG9mIFNDU0kgQ29tbWFuZHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBjb25jdXJyZW50bHkKK3ByZXNlbnRlZCBmb3IgZXhlY3V0aW9uIChlaXRoZXIgdG8gdGhlIEhvc3QgQWRhcHRlciBvciBUYXJnZXQgRGV2aWNlKS4gIE5vdGUKK3RoYXQgZXhwbGljaXRseSBlbmFibGluZyBUYWdnZWQgUXVldWluZyBtYXkgbGVhZCB0byBwcm9ibGVtczsgdGhlIG9wdGlvbiB0bworZW5hYmxlIG9yIGRpc2FibGUgVGFnZ2VkIFF1ZXVpbmcgaXMgcHJvdmlkZWQgcHJpbWFyaWx5IHRvIGFsbG93IGRpc2FibGluZworVGFnZ2VkIFF1ZXVpbmcgb24gVGFyZ2V0IERldmljZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IGl0IGNvcnJlY3RseS4gIFRoZQorZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKKworUXVldWVEZXB0aDo8aW50ZWdlcj4KKworICBUaGUgIlF1ZXVlRGVwdGg6IiBvciBRRDoiIG9wdGlvbiBzcGVjaWZpZXMgdGhlIFF1ZXVlIERlcHRoIHRvIHVzZSBmb3IgYWxsCisgIFRhcmdldCBEZXZpY2VzIHRoYXQgc3VwcG9ydCBUYWdnZWQgUXVldWluZywgYXMgd2VsbCBhcyB0aGUgbWF4aW11bSBRdWV1ZQorICBEZXB0aCBmb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFRhZ2dlZCBRdWV1aW5nLiAgSWYgbm8gUXVldWUgRGVwdGgKKyAgb3B0aW9uIGlzIHByb3ZpZGVkLCB0aGUgUXVldWUgRGVwdGggd2lsbCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQKKyAgb24gdGhlIEhvc3QgQWRhcHRlcidzIFRvdGFsIFF1ZXVlIERlcHRoIGFuZCB0aGUgbnVtYmVyLCB0eXBlLCBzcGVlZCwgYW5kCisgIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV0ZWN0ZWQgVGFyZ2V0IERldmljZXMuICBGb3IgSG9zdCBBZGFwdGVycyB0aGF0CisgIHJlcXVpcmUgSVNBIEJvdW5jZSBCdWZmZXJzLCB0aGUgUXVldWUgRGVwdGggaXMgYXV0b21hdGljYWxseSBzZXQgYnkgZGVmYXVsdAorICB0byBCdXNMb2dpY19UYWdnZWRRdWV1ZURlcHRoQkIgb3IgQnVzTG9naWNfVW50YWdnZWRRdWV1ZURlcHRoQkIgdG8gYXZvaWQKKyAgZXhjZXNzaXZlIHByZWFsbG9jYXRpb24gb2YgRE1BIEJvdW5jZSBCdWZmZXIgbWVtb3J5LiAgVGFyZ2V0IERldmljZXMgdGhhdAorICBkbyBub3Qgc3VwcG9ydCBUYWdnZWQgUXVldWluZyBhbHdheXMgaGF2ZSB0aGVpciBRdWV1ZSBEZXB0aCBzZXQgdG8KKyAgQnVzTG9naWNfVW50YWdnZWRRdWV1ZURlcHRoIG9yIEJ1c0xvZ2ljX1VudGFnZ2VkUXVldWVEZXB0aEJCLCB1bmxlc3MgYQorICBsb3dlciBRdWV1ZSBEZXB0aCBvcHRpb24gaXMgcHJvdmlkZWQuICBBIFF1ZXVlIERlcHRoIG9mIDEgYXV0b21hdGljYWxseQorICBkaXNhYmxlcyBUYWdnZWQgUXVldWluZy4KKworUXVldWVEZXB0aDpbPGludGVnZXI+LDxpbnRlZ2VyPi4uLl0KKworICBUaGUgIlF1ZXVlRGVwdGg6Wy4uLl0iIG9yICJRRDpbLi4uXSIgb3B0aW9uIHNwZWNpZmllcyB0aGUgUXVldWUgRGVwdGgKKyAgaW5kaXZpZHVhbGx5IGZvciBlYWNoIFRhcmdldCBEZXZpY2UuICBJZiBhbiA8aW50ZWdlcj4gaXMgb21pdHRlZCwgdGhlCisgIGFzc29jaWF0ZWQgVGFyZ2V0IERldmljZSB3aWxsIGhhdmUgaXRzIFF1ZXVlIERlcHRoIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuCisKK1RhZ2dlZFF1ZXVpbmc6RGVmYXVsdAorCisgIFRoZSAiVGFnZ2VkUXVldWluZzpEZWZhdWx0IiBvciAiVFE6RGVmYXVsdCIgb3B0aW9uIHBlcm1pdHMgVGFnZ2VkIFF1ZXVpbmcKKyAgYmFzZWQgb24gdGhlIGZpcm13YXJlIHZlcnNpb24gb2YgdGhlIEJ1c0xvZ2ljIEhvc3QgQWRhcHRlciBhbmQgYmFzZWQgb24KKyAgd2hldGhlciB0aGUgUXVldWUgRGVwdGggYWxsb3dzIHF1ZXVpbmcgbXVsdGlwbGUgY29tbWFuZHMuCisKK1RhZ2dlZFF1ZXVpbmc6RW5hYmxlCisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOkVuYWJsZSIgb3IgIlRROkVuYWJsZSIgb3B0aW9uIGVuYWJsZXMgVGFnZ2VkIFF1ZXVpbmcgZm9yCisgIGFsbCBUYXJnZXQgRGV2aWNlcyBvbiB0aGlzIEhvc3QgQWRhcHRlciwgb3ZlcnJpZGluZyBhbnkgbGltaXRhdGlvbiB0aGF0CisgIHdvdWxkIG90aGVyd2lzZSBiZSBpbXBvc2VkIGJhc2VkIG9uIHRoZSBIb3N0IEFkYXB0ZXIgZmlybXdhcmUgdmVyc2lvbi4KKworVGFnZ2VkUXVldWluZzpEaXNhYmxlCisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOkRpc2FibGUiIG9yICJUUTpEaXNhYmxlIiBvcHRpb24gZGlzYWJsZXMgVGFnZ2VkIFF1ZXVpbmcKKyAgZm9yIGFsbCBUYXJnZXQgRGV2aWNlcyBvbiB0aGlzIEhvc3QgQWRhcHRlci4KKworVGFnZ2VkUXVldWluZzo8VGFyZ2V0LVNwZWM+CisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOjxUYXJnZXQtU3BlYz4iIG9yICJUUTo8VGFyZ2V0LVNwZWM+IiBvcHRpb24gY29udHJvbHMKKyAgVGFnZ2VkIFF1ZXVpbmcgaW5kaXZpZHVhbGx5IGZvciBlYWNoIFRhcmdldCBEZXZpY2UuICA8VGFyZ2V0LVNwZWM+IGlzIGEKKyAgc2VxdWVuY2Ugb2YgIlkiLCAiTiIsIGFuZCAiWCIgY2hhcmFjdGVycy4gICJZIiBlbmFibGVzIFRhZ2dlZCBRdWV1aW5nLCAiTiIKKyAgZGlzYWJsZXMgVGFnZ2VkIFF1ZXVpbmcsIGFuZCAiWCIgYWNjZXB0cyB0aGUgZGVmYXVsdCBiYXNlZCBvbiB0aGUgZmlybXdhcmUKKyAgdmVyc2lvbi4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgcmVmZXJzIHRvIFRhcmdldCBEZXZpY2UgMCwgdGhlIHNlY29uZCB0bworICBUYXJnZXQgRGV2aWNlIDEsIGFuZCBzbyBvbjsgaWYgdGhlIHNlcXVlbmNlIG9mICJZIiwgIk4iLCBhbmQgIlgiIGNoYXJhY3RlcnMKKyAgZG9lcyBub3QgY292ZXIgYWxsIHRoZSBUYXJnZXQgRGV2aWNlcywgdW5zcGVjaWZpZWQgY2hhcmFjdGVycyBhcmUgYXNzdW1lZAorICB0byBiZSAiWCIuCisKK1RoZSBCdXNMb2dpYyBEcml2ZXIgTWlzY2VsbGFuZW91cyBPcHRpb25zIGNvbXByaXNlIHRoZSBmb2xsb3dpbmc6CisKK0J1c1NldHRsZVRpbWU6PHNlY29uZHM+CisKKyAgVGhlICJCdXNTZXR0bGVUaW1lOiIgb3IgIkJTVDoiIG9wdGlvbiBzcGVjaWZpZXMgdGhlIEJ1cyBTZXR0bGUgVGltZSBpbgorICBzZWNvbmRzLiAgVGhlIEJ1cyBTZXR0bGUgVGltZSBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIGEgSG9zdAorICBBZGFwdGVyIEhhcmQgUmVzZXQgd2hpY2ggaW5pdGlhdGVzIGEgU0NTSSBCdXMgUmVzZXQgYW5kIGlzc3VpbmcgYW55IFNDU0kKKyAgQ29tbWFuZHMuICBJZiB1bnNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gQnVzTG9naWNfRGVmYXVsdEJ1c1NldHRsZVRpbWUuCisKK0luaGliaXRUYXJnZXRJbnF1aXJ5CisKKyAgVGhlICJJbmhpYml0VGFyZ2V0SW5xdWlyeSIgb3B0aW9uIGluaGliaXRzIHRoZSBleGVjdXRpb24gb2YgYW4gSW5xdWlyZQorICBUYXJnZXQgRGV2aWNlcyBvciBJbnF1aXJlIEluc3RhbGxlZCBEZXZpY2VzIGNvbW1hbmQgb24gTXVsdGlNYXN0ZXIgSG9zdAorICBBZGFwdGVycy4gIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSB3aXRoIHNvbWUgb2xkZXIgVGFyZ2V0IERldmljZXMgdGhhdCBkbyBub3QKKyAgcmVzcG9uZCBjb3JyZWN0bHkgd2hlbiBMb2dpY2FsIFVuaXRzIGFib3ZlIDAgYXJlIGFkZHJlc3NlZC4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBEZWJ1Z2dpbmcgT3B0aW9ucyBjb21wcmlzZSB0aGUgZm9sbG93aW5nOgorCitUcmFjZVByb2JlCisKKyAgVGhlICJUcmFjZVByb2JlIiBvcHRpb24gZW5hYmxlcyB0cmFjaW5nIG9mIEhvc3QgQWRhcHRlciBQcm9iaW5nLgorCitUcmFjZUhhcmR3YXJlUmVzZXQKKworICBUaGUgIlRyYWNlSGFyZHdhcmVSZXNldCIgb3B0aW9uIGVuYWJsZXMgdHJhY2luZyBvZiBIb3N0IEFkYXB0ZXIgSGFyZHdhcmUKKyAgUmVzZXQuCisKK1RyYWNlQ29uZmlndXJhdGlvbgorCisgIFRoZSAiVHJhY2VDb25maWd1cmF0aW9uIiBvcHRpb24gZW5hYmxlcyB0cmFjaW5nIG9mIEhvc3QgQWRhcHRlcgorICBDb25maWd1cmF0aW9uLgorCitUcmFjZUVycm9ycworCisgIFRoZSAiVHJhY2VFcnJvcnMiIG9wdGlvbiBlbmFibGVzIHRyYWNpbmcgb2YgU0NTSSBDb21tYW5kcyB0aGF0IHJldHVybiBhbgorICBlcnJvciBmcm9tIHRoZSBUYXJnZXQgRGV2aWNlLiAgVGhlIENEQiBhbmQgU2Vuc2UgRGF0YSB3aWxsIGJlIHByaW50ZWQgZm9yCisgIGVhY2ggU0NTSSBDb21tYW5kIHRoYXQgZmFpbHMuCisKK0RlYnVnCisKKyAgVGhlICJEZWJ1ZyIgb3B0aW9uIGVuYWJsZXMgYWxsIGRlYnVnZ2luZyBvcHRpb25zLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGRlbW9uc3RyYXRlIHNldHRpbmcgdGhlIFF1ZXVlIERlcHRoIGZvciBUYXJnZXQgRGV2aWNlcworMSBhbmQgMiBvbiB0aGUgZmlyc3QgaG9zdCBhZGFwdGVyIHRvIDcgYW5kIDE1LCB0aGUgUXVldWUgRGVwdGggZm9yIGFsbCBUYXJnZXQKK0RldmljZXMgb24gdGhlIHNlY29uZCBob3N0IGFkYXB0ZXIgdG8gMzEsIGFuZCB0aGUgQnVzIFNldHRsZSBUaW1lIG9uIHRoZQorc2Vjb25kIGhvc3QgYWRhcHRlciB0byAzMCBzZWNvbmRzLgorCitMaW51eCBLZXJuZWwgQ29tbWFuZCBMaW5lOgorCisgIGxpbnV4IEJ1c0xvZ2ljPVF1ZXVlRGVwdGg6Wyw3LDE1XTtRdWV1ZURlcHRoOjMxLEJ1c1NldHRsZVRpbWU6MzAKKworTElMTyBMaW51eCBCb290IExvYWRlciAoaW4gL2V0Yy9saWxvLmNvbmYpOgorCisgIGFwcGVuZCA9ICJCdXNMb2dpYz1RdWV1ZURlcHRoOlssNywxNV07UXVldWVEZXB0aDozMSxCdXNTZXR0bGVUaW1lOjMwIgorCitJTlNNT0QgTG9hZGFibGUgS2VybmVsIE1vZHVsZSBJbnN0YWxsYXRpb24gRmFjaWxpdHk6CisKKyAgaW5zbW9kIEJ1c0xvZ2ljLm8gXAorICAgICAgJ0J1c0xvZ2ljPSJRdWV1ZURlcHRoOlssNywxNV07UXVldWVEZXB0aDozMSxCdXNTZXR0bGVUaW1lOjMwIicKKworTk9URTogTW9kdWxlIFV0aWxpdGllcyAyLjEuNzEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3QgcGFyc2luZworICAgICAgb2YgZHJpdmVyIG9wdGlvbnMgY29udGFpbmluZyBjb21tYXMuCisKKworCQkJICAgICAgRFJJVkVSIElOU1RBTExBVElPTgorCitUaGlzIGRpc3RyaWJ1dGlvbiB3YXMgcHJlcGFyZWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMC4zNSwgYnV0IHNob3VsZCBiZQorY29tcGF0aWJsZSB3aXRoIDIuMC40IG9yIGFueSBsYXRlciAyLjAgc2VyaWVzIGtlcm5lbC4KKworVG8gaW5zdGFsbCB0aGUgbmV3IEJ1c0xvZ2ljIFNDU0kgZHJpdmVyLCB5b3UgbWF5IHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLAorcmVwbGFjaW5nICIvdXNyL3NyYyIgd2l0aCB3aGVyZXZlciB5b3Uga2VlcCB5b3VyIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZToKKworICBjZCAvdXNyL3NyYworICB0YXIgLXh2emYgQnVzTG9naWMtMi4wLjE1LnRhci5negorICBtdiBSRUFETUUuKiBMSUNFTlNFLiogQnVzTG9naWMuW2NoXSBGbGFzaFBvaW50LmMgbGludXgvZHJpdmVycy9zY3NpCisgIHBhdGNoIC1wMCA8IEJ1c0xvZ2ljLnBhdGNoIChvbmx5IGZvciAyLjAuMzMgYW5kIGJlbG93KQorICBjZCBsaW51eAorICBtYWtlIGNvbmZpZworICBtYWtlIHpJbWFnZQorCitUaGVuIGluc3RhbGwgImFyY2gvaTM4Ni9ib290L3pJbWFnZSIgYXMgeW91ciBzdGFuZGFyZCBrZXJuZWwsIHJ1biBsaWxvIGlmCithcHByb3ByaWF0ZSwgYW5kIHJlYm9vdC4KKworCisJCSAgICAgIEJVU0xPR0lDIEFOTk9VTkNFTUVOVFMgTUFJTElORyBMSVNUCisKK1RoZSBCdXNMb2dpYyBBbm5vdW5jZW1lbnRzIE1haWxpbmcgTGlzdCBwcm92aWRlcyBhIGZvcnVtIGZvciBpbmZvcm1pbmcgTGludXgKK3VzZXJzIG9mIG5ldyBkcml2ZXIgcmVsZWFzZXMgYW5kIG90aGVyIGFubm91bmNlbWVudHMgcmVnYXJkaW5nIExpbnV4IHN1cHBvcnQKK2ZvciBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMuICBUbyBqb2luIHRoZSBtYWlsaW5nIGxpc3QsIHNlbmQgYSBtZXNzYWdlIHRvCisiYnVzbG9naWMtYW5ub3VuY2UtcmVxdWVzdEBkYW5kZWxpb24uY29tIiB3aXRoIHRoZSBsaW5lICJzdWJzY3JpYmUiIGluIHRoZQorbWVzc2FnZSBib2R5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy4xOTkyLTE5OTcgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLjE5OTItMTk5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzg4ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy4xOTkyLTE5OTcKQEAgLTAsMCArMSwyMDIzIEBACitTYXQgSmFuIDE4IDE1OjUxOjQ1IDE5OTcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHRhbXUuZWR1PgorCisJKiBEb24ndCBwbGF5IHdpdGggdXNhZ2VfY291bnQgZGlyZWN0bHksIGluc3RlYWQgaGFuZCBhcm91bmQKKwl0aGUgbW9kdWxlIGhlYWRlciBhbmQgdXNlIHRoZSBtb2R1bGUgbWFjcm9zLgorCitGcmkgTWF5IDE3IDAwOjAwOjAwIDE5OTYgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDIuMC4zIFJlbGVhc2VkLgorCitUdWUgQXByIDE2IDIxOjAwOjAwIDE5OTYgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDEuMy4yIFJlbGVhc2VkLgorCitTdW4gRGVjIDMxIDIzOjI2OjAwIDE5OTUgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDEuMy4xIFJlbGVhc2VkLgorCitGcmkgTm92IDEwIDE1OjI5OjQ5IDE5OTUgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIFJlbGVhc2VkIG5ldyBCdXNMb2dpYyBkcml2ZXIuCisKK1dlZCBBdWcgIDkgMjI6Mzc6MDQgMTk5NSAgQW5kcmllcyBCcm91d2VyICA8YWViQGN3aS5ubD4KKworCUFzIGEgcHJlcGFyYXRpb24gZm9yIG5ldyBkZXZpY2UgY29kZSwgc2VwYXJhdGVkIHRoZSB2YXJpb3VzCisJZnVuY3Rpb25zIHRoZSByZXF1ZXN0LT5kZXYgZmllbGQgaGFkIGludG8gdGhlIGRldmljZSBwcm9wZXIsCisJcmVxdWVzdC0+cnFfZGV2IGFuZCBhIHN0YXR1cyBmaWVsZCByZXF1ZXN0LT5ycV9zdGF0dXMuCisKKwlUaGUgMm5kIGFyZ3VtZW50IG9mIGJpb3NfcGFyYW0gaXMgbm93IGEga2Rldl90LgorCitXZWQgSnVsIDE5IDEwOjQzOjE1IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworICAgICAgICAqIHNjc2kuYyAoc2NzaV9wcm9jX2luZm8pOiAvcHJvYy9zY3NpL3Njc2kgbm93IGFsc28gbGlzdHMgYWxsCisJYXR0YWNoZWQgZGV2aWNlcy4KKworCSogc2NzaV9wcm9jLmMgKHByb2NfcHJpbnRfc2NzaWRldmljZSk6IEFkZGVkLiBVc2VkIGJ5IHNjc2kuYyBhbmQKKwllYXRhX2RtYV9wcm9jLmMgdG8gcHJvZHVjZSBzb21lIGRldmljZSBpbmZvIGZvciAvcHJvYy9zY3NpLgorCisJKiBlYXRhX2RtYS5jIChlYXRhX3F1ZXVlKShlYXRhX2ludF9oYW5kbGVyKShlYXRhX3Njc2lfZG9uZSk6CisJQ2hhbmdlZCBoYW5kbGluZyBvZiBpbnRlcm5hbCBTQ1NJIGNvbW1hbmRzIHNlbmQgdG8gdGhlIEhCQS4KKworCitXZWQgSnVsIDE5IDEwOjA5OjE3IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogTGludXggMS4zLjExIHJlbGVhc2VkLgorCisJKiBlYXRhX2RtYS5jIChlYXRhX3F1ZXVlKShlYXRhX2ludF9oYW5kbGVyKTogQWRkZWQgY29kZSB0byBkbworCWNvbW1hbmQgbGF0ZW5jeSBtZWFzdXJlbWVudHMgaWYgcmVxdWVzdGVkIGJ5IHJvb3QgdGhyb3VnaAorCS9wcm9jL3Njc2kgaW50ZXJmYWNlLgorCVRocm91Z2hvdXQgVXNlIEhaIGNvbnN0YW50IGZvciB0aW1lIHJlZmVyZW5jZXMuCisKKwkqIGVhdGFfcGlvLmM6IFVzZSBIWiBjb25zdGFudCBmb3IgdGltZSByZWZlcmVuY2VzLgorCisJKiBhaWM3eHh4LmMsIGFpYzd4eHguaCwgYWljN3h4eF9hc20uYzogQ2hhbmdlZCBjb3B5cmlnaHQgZnJvbSBCU0QKKwl0byBHTlUgc3R5bGUuCisKKwkqIHNjc2kuaDogQWRkZWQgUkVBRF8xMiBjb21tYW5kIG9wY29kZSBjb25zdGFudAorCitXZWQgSnVsIDE5IDA5OjI1OjMwIDE5OTUgIE1pY2hhZWwgTmV1ZmZlciA8bmV1ZmZlckBnb29meS56ZHYudW5pLW1haW56LmRlPgorCisJKiBMaW51eCAxLjMuMTAgcmVsZWFzZWQuCisKKwkqIHNjc2lfcHJvYy5jIChkaXNwYXRjaF9zY3NpX2luZm8pOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZS4KKworV2VkIEp1bCAxOSAwOToyNTozMCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy45IHJlbGVhc2VkLgorCisJKiBzY3NpLmMgQmxhY2tsaXN0IGNvbmNlcHQgZXhwYW5kZWQgdG8gJ3N1cHBvcnQnIG1vcmUgZGV2aWNlCisJZGVmaWNpZW5jaWVzLiBibGFja2xpc3RbXSByZW5hbWVkIHRvIGRldmljZV9saXN0W10KKwkoc2Nhbl9zY3Npcyk6IENvZGUgY2xlYW51cC4KKworCSogc2NzaV9kZWJ1Zy5jIChzY3NpX2RlYnVnX3Byb2NfaW5mbyk6IEFkZGVkIHN1cHBvcnQgdG8gY29udHJvbAorCWRldmljZSBsb2NrdXAgc2ltdWxhdGlvbiB2aWEgL3Byb2Mvc2NzaSBpbnRlcmZhY2UuCisKKworV2VkIEp1bCAxOSAwOToyMjozNCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy43IHJlbGVhc2VkLgorCisJKiBzY3NpX3Byb2MuYzogRml4ZWQgYSBudW1iZXIgb2YgYnVncyBpbiBkaXJlY3RvcnkgaGFuZGxpbmcKKworV2VkIEp1bCAxOSAwOToxODoyOCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy41IHJlbGVhc2VkLgorCisJKiBOYXRpdmUgd2lkZSwgbXVsdGljaGFubmVsIGFuZCAvcHJvYy9zY3NpIHN1cHBvcnQgbm93IGluIG9mZmljaWFsCisJa2VybmVsIGRpc3RyaWJ1dGlvbi4KKworICAgICAgICAqIHNjc2kuYy9oLCBob3N0cy5jL2ggZXQgYWwgcmVpbmRlbnRlZCB0byBpbmNyZWFzZSByZWFkYWJpbGl0eQorCShlc3BlY2lhbGx5IG9uIDgwIGNvbHVtbiB3aWRlIHRlcm1pbmFscykuCisKKwkqIHNjc2kuYywgc2NzaV9wcm9jLmMsIC4uLy4uL2ZzL3Byb2MvaW5vZGUuYzogQWRkZWQKKwkvcHJvYy9zY3NpL3Njc2kgd2hpY2ggYWxsb3dzIHJvb3QgdG8gc2NhbiBmb3IgaG90cGx1Z2dlZCBkZXZpY2VzLgorCisJKiBzY3NpLmMgKHNjc2lfcHJvY19pbmZvKTogQWRkZWQsIHRvIHN1cHBvcnQgL3Byb2Mvc2NzaS9zY3NpLgorCShzY2FuX3Njc2lzKTogQWRkZWQgc29tZSAnc3BhZ2hldHRpJyBjb2RlIHRvIGFsbG93IHNjYW5uaW5nIGZvcgorCXNpbmdsZSBkZXZpY2VzLgorCQorCitUaHUgSnVuIDIwIDE1OjIwOjI3IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworICAgICAgICAqIHByb2MuYzogUmVuYW1lZCB0byBzY3NpX3Byb2MuYworCitNb24gSnVuIDEyIDIwOjMyOjQ1IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogTGludXggMS4zLjAgcmVsZWFzZWQuCisKK01vbiBNYXkgMTUgMTk6MzM6MTQgMTk5NSAgTWljaGFlbCBOZXVmZmVyICA8bmV1ZmZlckBnb29meS56ZHYudW5pLW1haW56LmRlPgorCisJKiBzY3NpLmM6IEFkZGVkIG5hdGl2ZSBtdWx0aWNoYW5uZWwgYW5kIHdpZGUgc2NzaSBzdXBwb3J0LgorCisJKiBwcm9jLmMgKGRpc3BhdGNoX3Njc2lfaW5mbykgKGJ1aWxkX3Byb2NfZGlyX2hiYV9lbnRyaWVzKToKKwlVcGRhdGVkIC9wcm9jL3Njc2kgaW50ZXJmYWNlLgorCitUaHUgTWF5ICA0IDE3OjU4OjQ4IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogc2QuYyAocmVxdWV1ZV9zZF9yZXF1ZXN0KTogWmVybyBvdXQgdGhlIHNjYXR0ZXJsaXN0IG9ubHkgaWYKKwlzY3NpX21hbGxvYyByZXR1cm5lZCBtZW1vcnkgZm9yIGl0LgorCisJKiBlYXRhX2RtYS5jIChyZWdpc3Rlcl9IQkEpIChlYXRhX3F1ZXVlKTogQWRkIHN1cHBvcnQgZm9yCisJbGFyZ2Ugc2NhdHRlci9nYXRoZXIgdGFibGVzIGFuZCBzZXQgdXNlX2NsdXN0ZXJpbmcgYWNjb3JkaW5nbHkKKworCSogaG9zdHMuYzogTWFrZSB1c2VfY2x1c3RlcmluZyBjaGFuZ2VhYmxlIGluIHRoZSBTY3NpX0hvc3Qgc3RydWN0dXJlLgorCitXZWQgQXByIDEyIDE1OjI1OjUyIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuNSByZWxlYXNlZC4KKworCSogYnVzbG9naWMuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xNSAoRnJvbSBMZW9uYXJkIE4uIFp1YmtvZmYpLgorCUZpeGVkIGludGVycnVwdCByb3V0aW5lIHRvIGF2b2lkIHJhY2VzIHdoZW4gaGFuZGxpbmcgbXVsdGlwbGUKKwljb21wbGV0ZSBjb21tYW5kcyBwZXIgaW50ZXJydXB0LiAgU2VlbXMgdG8gY29tZSB1cCB3aXRoIGZhc3RlcgorCWNhcmRzLgorCisJKiBlYXRhX2RtYS5jOiBVcGRhdGUgdG8gMi4zLjVyLiBNb2R1bGFyaXplLiBJbXByb3ZlZCBlcnJvciBoYW5kbGluZworICAgICAgICB0aHJvdWdob3V0IGFuZCBmaXhlZCBidWcgaW50ZXJydXB0IHJvdXRpbmUgd2hpY2ggcmVzdWx0ZWQgaW4gc2hpZnRlZAorICAgICAgICBzdGF0dXMgYnl0ZXMuIEFkZGVkIGJsaW5rIExFRCBzdGF0ZSBjaGVja3MgZm9yIElTQSBhbmQgRUlTQSBIQkFzLgorICAgICAgICBNZW1vcnkgbWFuYWdlbWVudCBidWcgc2VlbXMgdG8gaGF2ZSBkaXNhcHBlYXJlZCA9PT4gaW5jcmVhc2luZworICAgICAgICBDX1BfTF9DVVJSRU5UX01BWCB0byAxNiBmb3Igbm93LiBEZWNyZWFzaW5nIENfUF9MX0RJViB0byAzIGZvcgorICAgICAgICBwZXJmb3JtYW5jZSByZWFzb25zLgorCisJKiBzY3NpLmM6IElmIHdlIGdldCBhIEZNSywgRU9NLCBvciBJTEkgd2hlbiBhdHRlbXB0aW5nIHRvIHNjYW4KKwl0aGUgYnVzLCBhc3N1bWUgdGhhdCBpdCB3YXMganVzdCBub2lzZSBvbiB0aGUgYnVzLCBhbmQgaWdub3JlCisJdGhlIGRldmljZS4KKworCSogc2NzaS5oOiBVcGRhdGUgYW5kIGFkZCBhIGJ1bmNoIG9mIG1pc3NpbmcgY29tbWFuZHMgd2hpY2ggd2UKKwl3ZXJlIG5ldmVyIHVzaW5nLgorCisJKiBzZC5jOiBVc2UgcmVzdG9yZV9mbGFncyBpbiBkb19zZF9yZXF1ZXN0IC0gdGhpcyBtYXkgcmVzdWx0IGluCisJbGF0ZW5jeSBjb25kaXRpb25zLCBidXQgaXQgZ2V0cyByaWQgb2YgcmFjZXMgYW5kIGNyYXNoZXMuCisJRG8gbm90IHNhdmUgZmxhZ3MgYWdhaW4gd2hlbiBzZWFyY2hpbmcgZm9yIGEgc2Vjb25kIGNvbW1hbmQgdG8KKwlxdWV1ZS4KKworCSogc3QuYzogVXNlIGJ5dGVzLCBub3QgU1RQLT5idWZmZXItPmJ1ZmZlcl9zaXplIHdoZW4gcmVhZGluZworCWZyb20gdGFwZS4KKworCitUdWUgQXByICA0IDA5OjQyOjA4IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuNCByZWxlYXNlZC4KKworCSogc3QuYzogRml4IHR5cG8gLSByZXN0b3Jpbmcgd3JvbmcgZmxhZ3MuCisKK1dlZCBNYXIgMjkgMDY6NTU6MTIgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMi4zIHJlbGVhc2VkLgorCisJKiBzdC5jOiBQZXJmb3JtIHNvbWUgd2FpdGluZyBvcGVyYXRpb25zIHdpdGggaW50ZXJydXB0cyBvZmYuCisJSXMgdGhpcyBjb3JyZWN0Pz8/CisKK1dlZCBNYXIgMjIgMTA6MzQ6MjYgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMi4yIHJlbGVhc2VkLgorCisJKiBhaGExNTJ4LmM6IE1vZHVsYXJpemUuICBBZGQgc3VwcG9ydCBmb3IgUENNQ0lBLgorCisJKiBlYXRhLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDIuMC4gIEZpeGVkIGJ1ZyBwcmV2ZW50aW5nIG1lZGlhCisJZGV0ZWN0aW9uLiAgSWYgc2NzaV9yZWdpc3Rlcl9ob3N0IHJldHVybnMgTlVMTCwgZmFpbCBncmFjZWZ1bGx5LgorCisJKiBzY3NpLmM6IERldGVjdCBhcyBORUMgKGZvciBwaG90by1jZCBwdXJwb3NlcykgZm9yIHRoZSA4NAorCWFuZCAyNSBtb2RlbHMgYXMgIk5FQ19PTERDRFIiLgorCisJKiBzY3NpLmg6IEFkZCBkZWZpbmUgZm9yIE5FQ19PTERDRFIKKworCSogc3IuYzogQWRkIGhhbmRsaW5nIGZvciBORUNfT0xEQ0RSLiAgVHJlYXQgYXMgdW5rbm93bi4KKworCSogdTE0LTM0Zi5jOiBVcGRhdGUgdG8gdmVyc2lvbiAyLjAuICBGaXhlZCBzYW1lIGJ1ZyBhcyBpbgorCWVhdGEuYy4KKworCitNb24gTWFyICA2IDExOjExOjIwIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuMCByZWxlYXNlZC4gIFllYWghISEKKworCSogTWlub3Igc3BlbGxpbmcvcHVuY3R1YXRpb24gY2hhbmdlcyB0aHJvdWdob3V0LiAgTm90aGluZworCXN1YnN0YW50aXZlLgorCitNb24gRmViIDIwIDIxOjMzOjAzIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTUgcmVsZWFzZWQuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdmVyc2lvbiAwLjQxLgorCisJKiBzZWFnYXRlLmM6IENoYW5nZSBzb21lIG1lc3NhZ2UgdG8gYmUgbW9yZSBkZXNjcmlwdGl2ZSBhYm91dCB3aGF0CisJd2UgZGV0ZWN0ZWQuCisKKwkqIHNyLmM6IHNwZWxsaW5nL3doaXRlc3BhY2UgY2hhbmdlcy4KKworTW9uIEZlYiAyMCAyMTozMzowMyAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjk0IHJlbGVhc2VkLgorCitNb24gRmViIDIwIDA4OjU3OjE3IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTMgcmVsZWFzZWQuCisKKwkqIGhvc3RzLmg6IENoYW5nZSBpb19wb3J0IHRvIGxvbmcgaW50IGZyb20gc2hvcnQuCisKKyAJKiA1M2M3LDh4eC5jOiBjcmFzaCBvbiBBRU4gZml4ZWQsIFNDU0kgcmVzZXQgaXMgbm8gbG9uZ2VyIGEgTk9QLAorIAkgIE5VTEwgcG9pbnRlciBwYW5pYyBvbiBvZGQgVURDcyBmaXhlZCwgdHdvIGJ1Z3MgaW4gZGlhZ25vc3RpYyBvdXRwdXQKKyAJICBmaXhlZCwgc2hvdWxkIGluaXRpYWxpemUgY29ycmVjdGx5IGlmIGxlZnQgcnVubmluZywgbm93IGxvYWRhYmxlLAorICAJICBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIGV4dHJhbmVvdXMgZGlhZ25vc3RpYyBvdXRwdXQgc3VwcHJlc3NlZCwKKyAJICBzcGx4KCkgcmVwbGFjZWQgd2l0aCBzYXZlL3Jlc3RvcmUgZmxhZ3MuIFsgRHJldyBdCisKKwkqIGhvc3RzLmMsIGhvc3RzLmgsIHNjc2lfaW9jdGwuYywgc2QuYywgc2RfaW9jdGwuYywgc2cuYywgc3IuYywKKwlzcl9pb2N0bC5jOiBBZGQgc3BlY2lhbCBqdW5rIGF0IGVuZCB0aGF0IEVtYWNzIHdpbGwgdXNlIGZvcgorCWZvcm1hdHRpbmcgdGhlIGZpbGUuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdjAuNDBhLiAgSW1wcm92ZSBwYXJpdHkgaGFuZGxpbmcuCisKKwkqIHNjc2kuYzogQWRkIEhpdGFjaGkgREszMTJDIHRvIGJsYWNrbGlzdC4gIENoYW5nZSAifTsiIHRvICJ9IiBpbgorCW1hbnkgcGxhY2VzLiAgVXNlIHNjc2lfaW5pdF9tYWxsb2MgdG8gZ2V0IGNvbW1hbmQgYmxvY2sgLSBtYXkKKwluZWVkIHRoaXMgdG8gYmUgZG1hIGNvbXBhdGlibGUgZm9yIHNvbWUgaG9zdCBhZGFwdGVycy4KKwlSZXN0b3JlIGludGVycnVwdHMgYWZ0ZXIgdW5yZWdpc3RlcmluZyBhIGhvc3QuCisKKwkqIHNkLmM6IFVzZSBzdGkgaW5zdGVhZCBvZiByZXN0b3JlIGZsYWdzIC0gY2F1c2VzIGxhdGVuY3kgcHJvYmxlbXMuCisKKwkqIHNlYWdhdGUuYzogVXNlIGNvbnRyb2xsZXJfdHlwZSB0byBkZXRlcm1pbmUgc3RyaW5nIHVzZWQgd2hlbgorCXJlZ2lzdGVyaW5nIGlycS4KKworCSogc3IuYzogTW9yZSBwaG90by1jZCBoYWNrcyB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSB4YSBzdHVmZiByaWdodC4KKwkqIHNyLmgsIHNyLmM6IENoYW5nZSBpc194YSB0byB4YV9mbGFncyBmaWVsZC4KKworCSogc3QuYzogRGlzYWJsZSByZXRyaWVzIGZvciB3cml0ZSBvcGVyYXRpb25zLgorCitXZWQgRmViIDE1IDEwOjUyOjU2IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTIgcmVsZWFzZWQuCisKKwkqIGVhdGEuYzogVXBkYXRlIHRvIDEuMTcuCisKKwkqIGVhdGFfZG1hLmM6IFVwZGF0ZSB0byAyLjMxYS4gQWRkIG1vcmUgc3VwcG9ydCBmb3IgL3Byb2Mvc2NzaS4KKyAgICAgICAgQ29udGludWluZyBtb2R1bGFyaXphdGlvbi4gTGVzcyBjcmFzaGVzIGJlY2F1c2Ugb2YgdGhlIGJ1ZyBpbiB0aGUKKyAgICAgICAgbWVtb3J5IG1hbmFnZW1lbnQgPT0+IGluY3JlYXNlIENfUF9MX0NVUlJFTlRfTUFYIHRvIDEwCisgICAgICAgIGFuZCBkZWNyZWFzZSBDX1BfTF9ESVYgdG8gNC4KKworCSogaG9zdHMuYzogSWYgd2UgcmVtb3ZlIGxhc3QgaG9zdCByZWdpc3RlcmVkLCByZXVzZSBob3N0IG51bWJlci4KKwlXaGVuIGZyZWVpbmcgbWVtb3J5IGZyb20gaG9zdCBiZWluZyBkZXJlZ2lzdGVyZWQsIGZyZWUgZXh0cmFfYnl0ZXMKKwl0b28uCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IG1lbXNldChTRHBudCwgMCkgYW5kIHNldCBTQ21kLmRldmljZSB0byBTRHBudC4KKwlDaGFuZ2UgbWVtb3J5IGFsbG9jYXRpb24gdG8gd29yayBhcm91bmQgYnVncyBpbiBfX2dldF9kbWFfcGFnZXMuCisJRG8gbm90IGZyZWUgaG9zdCBpZiB1c2FnZSBjb3VudCBpcyBub3QgemVybyAoZm9yIG1vZHVsZXMpLgorCisJKiBzcl9pb2N0bC5jOiBJbmNyZWFzZSBJT0NUTF9USU1FT1VUIHRvIDMwMDAuCisKKwkqIHN0LmM6IEFsbG93IGZvciBTVF9FWFRSQV9ERVZTIGluIHN0IGRhdGEgc3RydWN0dXJlcy4KKworCSogdTE0LTM0Zi5jOiBVcGRhdGUgdG8gMS4xNy4KKworVGh1IEZlYiAgOSAxMDoxMToxNiAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjkxIHJlbGVhc2VkLgorCisJKiBlYXRhLmM6IFVwZGF0ZSB0byAxLjE2LiAgVXNlIHdpc2hfYmxvY2sgaW5zdGVhZCBvZiBob3N0LT5ibG9jay4KKworCSogaG9zdHMuYzogSW5pdGlhbGl6ZSB3aXNoX2Jsb2NrIHRvIDAuCisKKwkqIGhvc3RzLmg6IEFkZCB3aXNoX2Jsb2NrLgorCisJKiBzY3NpLmM6IFVzZSB3aXNoX2Jsb2NrIGFzIGluZGljYXRvciB0aGF0IHRoZSBob3N0IHNob3VsZCBiZSBhZGRlZAorCXRvIGJsb2NrIGxpc3QuCisKKwkqIHNnLmM6IEFkZCBTR19FWFRSQV9ERVZTIHRvIG51bWJlciBvZiBzbG90cy4KKworCSogdTE0LTM0Zi5jOiBVc2Ugd2lzaF9ibG9jay4KKworVHVlIEZlYiAgNyAxMTo0NjowNCAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjkwIHJlbGVhc2VkLgorCisJKiBlYXRhLmM6IENoYW5nZSBuYW1pbmcgZnJvbSBlYXRhXyogdG8gZWF0YTJ4XyouICBOb3cgYXQgdmVycyAxLjE1LgorCVVwZGF0ZSBpbnRlcnJ1cHQgaGFuZGxlciB0byB0YWtlIHB0X3JlZ3MgYXMgYXJnLiAgQWxsb3cgYmxvY2tpbmcKKwlldmVuIGlmIGxvYWRlZCBhcyBtb2R1bGUuICBJbml0aWFsaXplIHRhcmdldF90aW1lX291dCBhcnJheS4KKwlEbyBub3QgcHV0IHN0aSgpOyBpbiB0aW1pbmcgbG9vcC4KKworCSogaG9zdHMuYzogRG8gbm90IHJldXNlIGhvc3QgbnVtYmVycy4KKwlVc2Ugc2NzaV9tYWtlX2Jsb2NrZWRfbGlzdCB0byBnZW5lcmF0ZSBibG9ja2luZyBsaXN0LgorCisJKiBzY3JpcHRfYXNtLnBsOiAgQmVhdHMgbWUuICBEb24ndCBrbm93IHBlcmwuICBTb21ldGhpbmcgdG8gZG8gd2l0aAorCXBoYXNlIGluZGV4LgorCisJKiBzY3NpLmMgKHNjc2lfbWFrZV9ibG9ja2VkX2xpc3QpOiBOZXcgZnVuY3Rpb24gLSBjb2RlIGNvcGllZCBmcm9tCisJaG9zdHMuYy4KKworCSogc2NzaS5jOiBVcGRhdGUgY29kZSB0byBkaXNhYmxlIHBob3RvIENEIGZvciBUb3NoaWJhIGNkcm9tcy4KKwlVc2UganVzdCBtYW51ZmFjdHVyZXIgbmFtZSwgbm90IG1vZGVsIG51bWJlci4KKworCSogc3IuYzogRml4IHNldHRpbmcgZGVuc2l0eSBmb3IgVG9zaGliYSBkcml2ZXMuCisKKwkqIHUxNC0zNGYuYzogQ2xlYXIgdGFyZ2V0X3RpbWVfb3V0IGFycmF5IGR1cmluZyByZXNldC4KKworV2VkIEZlYiAgMSAwOToyMDo0NSAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjg5IHJlbGVhc2VkLgorCisJKiBNYWtlZmlsZSwgdTE0LTM0Zi5jOiBNb2R1bGFyaXplLgorCisJKiBNYWtlZmlsZSwgZWF0YS5jOiBNb2R1bGFyaXplLiAgTm93IHZlcnNpb24gMS4xNAorCisJKiBOQ1I1MzgwLmM6IFVwZGF0ZSBpbnRlcnJ1cHQgaGFuZGxlciB3aXRoIG5ldyBhcmdsaXN0LiAgTWlub3IKKwljbGVhbnVwcy4KKworCSogZWF0YV9kbWEuYzogQmVnaW4gdG8gbW9kdWxhcml6ZS4gIEFkZCBob29rcyBmb3IgL3Byb2Mvc2NzaS4KKwlOZXcgdmVyc2lvbiAyLjMuMGEuIEFkZCBjb2RlIGluIGludGVycnVwdCBoYW5kbGVyIHRvIGFsbG93CisgICAgICAgIGNlcnRhaW4gQ0RST00gZHJpdmVycyB0byBiZSBkZXRlY3RlZCB3aGljaCByZXR1cm4gYQorICAgICAgICBDSEVDS19DT05ESVRJT04gZHVyaW5nIFNDU0kgYnVzIHNjYW4uIEFkZCBvcGNvZGUgY2hlY2sgdG8gZ2V0CisgICAgICAgIGFsbCBEQVRBIElOIGFuZCBEQVRBIE9VVCBwaGFzZXMgcmlnaHQuIFV0aWxpemUgSEJBX2ludGVycHJldCBmbGFnLgorCUltcHJvdmVtZW50cyBpbiBIQkEgaWRlbnRpZmljYXRpb24uIFZhcmlvdXMgb3RoZXIgbWlub3Igc3R1ZmYuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgLT5kbWFfY2hhbm5lbCBhbmQgLT5pb19wb3J0IHdoZW4gcmVnaXN0ZXJpbmcKKwlhIG5ldyBob3N0LgorCisJKiBxbG9naWMuYzogTW9kdWxhcml6ZSBhbmQgYWRkIFBDTUNJQSBzdXBwb3J0LgorCisJKiBzY3NpLmM6IEFkZCBIaXRhY2hpIHRvIGJsYWNrbGlzdC4KKworCSogc2NzaS5jOiBDaGFuZ2UgZGVmYXVsdCB0byBubyBsdW4gc2NhbiAodG9vIG1hbnkgcHJvYmxlbSBkZXZpY2VzKS4KKworCSogc2NzaS5oOiBEZWZpbmUgUVVFVUVfRlVMTCBjb25kaXRpb24uCisKKwkqIHNkLmM6IERvIG5vdCBjaGVjayBmb3Igbm9uLWV4aXN0ZW50IHBhcnRpdGlvbiB1bnRpbCBhZnRlcgorCW5ldyBtZWRpYSBjaGVjay4KKworCSogc2cuYzogVW5kbyBwcmV2aW91cyBjaGFuZ2Ugd2hpY2ggd2FzIHdyb25nLgorCisJKiBzcl9pb2N0bC5jOiBJbmNyZWFzZSBJT0NUTF9USU1FT1VUIHRvIDIwMDAuCisKKwkqIHN0LmM6IFBhdGNoZXMgZnJvbSBLYWkgLSBpbXByb3ZlIGZpbGVtYXJrIGhhbmRsaW5nLgorCitUdWUgSmFuIDMxIDE3OjMyOjEyIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODggcmVsZWFzZWQuCisKKwkqIFRocm91Z2hvdXQgLSBzcGVsbGluZy9ncmFtbWFyIGZpeHVwcy4KKworCSogc2NzaS5jOiBNYWtlIHN1cmUgdGhhdCBhbGwgYnVmZmVycyBhcmUgMTYgYnl0ZSBhbGlnbmVkIC0gc29tZQorCWRyaXZlcnMgKGJ1c2xvZ2ljKSBuZWVkIHRoaXMuCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IFJlbW92ZSBtZXNzYWdlIHByaW50ZWQuCisKKwkqIHNjc2kuYyAoc2NzaV9pbml0KTogTW92ZSBtZXNzYWdlIGhlcmUuCisKK01vbiBKYW4gMzAgMDY6NDA6MjUgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NyByZWxlYXNlZC4KKworCSogc3IuYzogUGhvdG8tY2QgcmVsYXRlZCBjaGFuZ2VzLiAoR2VyZCBLbm9ycj8/KS4KKworCSogc3QuYzogQ2hhbmdlcyBmcm9tIEthaSByZWxhdGVkIHRvIEVPTSBkZXRlY3Rpb24uCisKK01vbiBKYW4gMjMgMjM6NTM6MTAgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NiByZWxlYXNlZC4KKworCSogNTNjNyw4eHguaDogQ2hhbmdlIFNHIHNpemUgdG8gMTI3LgorCisJKiBlYXRhX2RtYTogVXBkYXRlIHRvIHZlcnNpb24gMi4xMGkuIFJlbW92ZSBidWcgaW4gdGhlIHJlZ2lzdHJhdGlvbgorICAgICAgICBvZiBtdWx0aXBsZSBIQkFzIGFuZCBjaGFubmVscy4gTWlub3Igb3RoZXIgaW1wcm92ZW1lbnRzIGFuZCBzdHlsaXN0aWMKKyAgICAgICAgY2hhbmdlcy4KKworCSogc2NzaS5jOiBUZXN0IGZvciBUb3NoaWJhIFhNLTM0MDFUQSBhbmQgZXhjbHVkZSBmcm9tIGRldGVjdGlvbgorCWFzIHRvc2hpYmEgZHJpdmUgLSBwaG90byBjZCBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBkcml2ZS4KKworCSogc3IuYzogIFVwZGF0ZSBwaG90b2NkIGNvZGUuCisKK01vbiBKYW4gMjMgMjM6NTM6MTAgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NSByZWxlYXNlZC4KKworCSogc3QuYywgc3RfaW9jdGwuYywgc2cuYywgc2RfaW9jdGwuYywgc2NzaV9pb2N0bC5jLCBob3N0cy5jOgorCWluY2x1ZGUgbGludXgvbW0uaAorCisJKiBxbG9naWMuYywgYnVzbG9naWMuYywgYWhhMTU0Mi5jOiBJbmNsdWRlIGxpbnV4L21vZHVsZS5oLgorCitTdW4gSmFuIDIyIDIyOjA4OjQ2IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODQgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBTdXBwb3J0IGZvciBsb2FkYWJsZSBRTE9HSUMgYm9hcmRzLgorCisJKiBhaGExNTJ4LmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDEuOCBmcm9tIEp1ZXJnZW4uCisKKwkqIGVhdGFfZG1hLmM6IFVwZGF0ZSBmcm9tIE1pY2hhZWwgTmV1ZmZlci4KKyAgICAgICAgUmVtb3ZlIGhhcmQgbGltaXQgb2YgMiBjb21tYW5kcyBwZXIgbHVuIGFuZCBtYWtlIGl0IGJldHRlcgorICAgICAgICBjb25maWd1cmFibGUuIEltcHJvdmVtZW50cyBpbiBIQkEgaWRlbnRpZmljYXRpb24uCisKKwkqIGluMjAwMC5jOiBGaXggYmlvc3BhcmFtIHRvIHN1cHBvcnQgbGFyZ2UgZGlza3MuCisKKwkqIHFsb2dpYy5jOiBNaW5vciBjaGFuZ2VzIChjaGFuZ2Ugc3RpIC0+IHJlc3RvcmVfZmxhZ3MpLgorCitXZWQgSmFuIDE4IDIzOjMzOjA5IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODMgcmVsZWFzZWQuCisKKwkqIGFoYTE1NDIuYyhhaGExNTQyX2ludHJfaGFuZGxlKTogVXNlIGFyZ3VtZW50cyBoYW5kZWQgZG93biB0byBmaW5kCisJd2hpY2ggaXJxLgorCisJKiBidXNsb2dpYy5jOiBMaWtld2lzZS4KKworCSogZWF0YV9kbWEuYzogVXNlIG1pbiBvZiAyIGNtZF9wZXJfbHVuIGZvciBPQ1NfZW5hYmxlZCBib2FyZHMuCisKKwkqIHNjc2kuYzogTWFrZSBSRUNPVkVSRURfRVJST1IgYSBTVUdHRVNUX0lTX09LLgorCisJKiBzZC5jOiBGYWlsIGlmIHdlIGFyZSBvcGVuaW5nIGEgbm9uLWV4aXN0ZW50IHBhcnRpdGlvbi4KKworCSogc3IuYzogQnVtcCBTUl9USU1FT1VUIHRvIDE1MDAwLgorCURvIG5vdCBwcm9iZSBmb3IgbWVkaWEgc2l6ZSBhdCBib290IHRpbWUoaGFyZCBvbiBjaGFuZ2VycykuCisJRmxhZyBkZXZpY2UgYXMgbmVlZGluZyBzZWN0b3Igc2l6ZSBpbnN0ZWFkLgorCisJKiBzcl9pb2N0bC5jOiBSZW1vdmUgQ0RST01NVUxUSVNFU1NJT05fU1lTIGlvY3RsLgorCisJKiB1bHRyYXN0b3IuYzogRml4IGJ1ZyBpbiBjYWxsIHRvIHVsdHJhc3Rvcl9pbnRlcnJ1cHQgKHdyb25nICNhcmdzKS4KKworTW9uIEphbiAxNiAwNzoxODoyMyAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjgyIHJlbGVhc2VkLgorCisJVGhyb3VnaG91dC4KKwktIENoYW5nZSBhbGwgaW50ZXJydXB0IGhhbmRsZXJzIHRvIGFjY2VwdCBuZXcgY2FsbGluZyBjb252ZW50aW9uLgorCUluIHBhcnRpY3VsYXIsIHdlIG5vdyByZWNlaXZlIHRoZSBpcnEgbnVtYmVyIGFzIG9uZSBvZiB0aGUgYXJndW1lbnRzLgorCisJKiBNb3JlIG1pbm9yIHNwZWxsaW5nIGNvcnJlY3Rpb25zIGluIHNvbWUgb2YgdGhlIG5ldyBmaWxlcy4KKworCSogYWhhMTU0Mi5jLCBidXNsb2dpYy5jOiBDbGVhbiB1cCBpbnRlcnJ1cHQgaGFuZGxlciBhIGxpdHRsZSBub3cKKwl0aGF0IHdlIHJlY2VpdmUgdGhlIGlycSBhcyBhbiBhcmcuCisKKwkqIGFoYTI3NHguYzogcy9zbmFyZl9yZWdpb24vcmVxdWVzdF9yZWdpb24vCisKKwkqIGVhdGEuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xMi4gICBGaXggc29tZSBjb21tZW50cyBhbmQgZGlzcGxheSBhCisJbWVzc2FnZSBpZiB3ZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgcG9ydCBhZGRyZXNzZXMuCisKKwkqIHUxNC0zNGYuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xMy4gICBGaXggc29tZSBjb21tZW50cyBhbmQgZGlzcGxheSBhCisJbWVzc2FnZSBpZiB3ZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgcG9ydCBhZGRyZXNzZXMuCisKKwkqIGVhdGFfZG1hLmM6IERlZmluZSBnZXRfYm9hcmRfZGF0YSBmdW5jdGlvbiAoc2VuZCBJTlFVSVJZIGNvbW1hbmQpLgorCVVzZSB0byBpbXByb3ZlIGRldGVjdGlvbiBvZiB2YXJpYW50cyBvZiBkaWZmZXJlbnQgRFBUIGJvYXJkcy4gIENoYW5nZQorCXZlcnNpb24gc3VibnVtYmVyIHRvICIwZyIuCisKKwkqIGZkb21haW4uYzogIFVwZGF0ZSB0byB2ZXJzaW9uIDUuMjYuICBJbXByb3ZlIGRldGVjdGlvbiBvZiBzb21lIGJvYXJkcworCXJlcGFja2FnZWQgYnkgSUJNLgorCisJKiBzY3NpLmMgKHNjc2lfcmVnaXN0ZXJfaG9zdCk6IENoYW5nZSAibmFtZSIgdG8gY29uc3QgY2hhciAqLgorCisJKiBzci5jOiBGaXggcHJvYmxlbSBpbiBzZXQgbW9kZSBjb21tYW5kIGZvciBUb3NoaWJhIGRyaXZlcy4KKworCSogc3IuYzogRml4IHR5cG8gZnJvbSBwYXRjaCA4MS4KKworRnJpIEphbiAxMyAxMjo1NDo0NiAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjgxIHJlbGVhc2VkLiAgQ29kZWZyZWV6ZSBmb3IgMS4yIHJlbGVhc2UgYW5ub3VuY2VkLgorCisJQmlnIGNoYW5nZXMgaGVyZS4KKworCSogZWF0YV9kbWEuKjogTmV3IGZpbGVzIGZyb20gTWljaGFlbCBOZXVmZmVyLgorCShuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGUpLiAgU2hvdWxkIHN1cHBvcnQKKwlhbGwgZWF0YS9kcHQgY2FyZHMuCisKKwkqIGhvc3RzLmMsIE1ha2VmaWxlOiBBZGQgZWF0YV9kbWEuCisKKwkqIFJFQURNRS5zdDogRG9jdW1lbnQgTVRFT00uCisKKwlQYXRjaGVzIGZyb20gbWUgKEVSWSkgdG8gZmluaXNoIHN1cHBvcnQgZm9yIGxvdy1sZXZlbCBsb2FkYWJsZSBzY3NpLgorCUl0IG5vdyB3b3JrcywgYW5kIGlzIGFjdHVhbGx5IHVzZWZ1bC4KKworCSogVGhyb3VnaG91dCAtIGFkZCBuZXcgYXJndW1lbnQgdG8gc2NzaV9pbml0X21hbGxvYyB0aGF0IHRha2VzIGFuCisJYWRkaXRpb25hbCBwYXJhbWV0ZXIuICBUaGlzIGlzIHVzZWQgYXMgYSBwcmlvcml0eSB0byBrbWFsbG9jLAorCWFuZCB5b3UgY2FuIHNwZWNpZnkgdGhlIEdGUF9ETUEgZmxhZyBpZiB5b3UgbmVlZCBETUEtYWJsZSBtZW1vcnkuCisKKwkqIE1ha2VmaWxlOiBGb3Igc291cmNlIGZpbGVzIHRoYXQgYXJlIGxvYWRhYmxlLCBhbHdheXMgYWRkIG5hbWUKKwl0byBTQ1NJX1NSQ1MuICBGaWxsIGluIG1vZHVsZXM6IHRhcmdldC4KKworCSogaG9zdHMuYzogIENoYW5nZSBuZXh0X2hvc3QgdG8gbmV4dF9zY3NpX2hvc3QsIGFuZCBtYWtlIGdsb2JhbC4KKwlQcmludCBob3N0cyBhZnRlciB3ZSBoYXZlIGlkZW50aWZpZWQgYWxsIG9mIHRoZW0uICBVc2UgaW5mbygpCisJZnVuY3Rpb24gaWYgcHJlc2VudCwgb3RoZXJ3aXNlIHVzZSBuYW1lIGZpZWxkLgorCisJKiBob3N0cy5oOiBDaGFuZ2UgYXR0YWNoIGZ1bmN0aW9uIHRvIHJldHVybiBpbnQsIG5vdCB2b2lkLgorCURlZmluZSBudW1iZXIgb2YgZGV2aWNlIHNsb3RzIHRvIGFsbG93IGZvciBsb2FkYWJsZSBkZXZpY2VzLgorCURlZmluZSB0YWdzIHRvIHRlbGwgc2NzaSBtb2R1bGUgY29kZSB3aGF0IHR5cGUgb2YgbW9kdWxlIHdlCisJYXJlIGxvYWRpbmcuCisKKwkqIHNjc2kuYzogRml4IHNjYW5fc2NzaXMgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGJ5IGEgdXNlciBwcm9jZXNzLgorCURvIG5vdCB1c2Ugd2FpdGluZyBsb29wcyAtIHVzZSB1cCBhbmQgZG93biBtZWNoYW5pc20gYXMgbG9uZworCWFzIGN1cnJlbnQgIT0gdGFza1swXS4KKworCSogc2NzaS5jKHNjYW5fc2NzaXMpOiBEbyBub3QgdXNlIHN0YWNrIHZhcmlhYmxlcyBmb3IgSS9PIC0gdGhpcworCWNvdWxkIGJlID4gMTZNYiBpZiB3ZSBhcmUgbG9hZGluZyBhIG1vZHVsZSBhdCBydW50aW1lIChpLmUuIHVzZQorCXNjc2lfaW5pdF9tYWxsb2MgdG8gZ2V0IHNvbWUgbWVtb3J5IHdlIGtub3cgd2lsbCBiZSBzYWZlKS4KKworCSogc2NzaS5jOiBDaGFuZ2UgZG1hIGZyZWVsaXN0IHRvIGJlIGEgc2V0IG9mIHBhZ2VzLiAgVGhpcyBhbGxvd3MKKwl1cyB0byBkeW5hbWljYWxseSBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGxpc3QgYnkgYWRkaW5nIG1vcmUgcGFnZXMKKwl0byB0aGUgcGFnZWxpc3QuICBGaXggc2NzaV9tYWxsb2MgYW5kIHNjc2lfZnJlZSBhY2NvcmRpbmdseS4KKworCSogc2NzaV9tb2R1bGUuYzogRml4IGluY2x1ZGUuCisKKwkqIHNkLmM6IERlY2xhcmUgZGV0YWNoIGZ1bmN0aW9uLiAgSW5jcmVtZW50L2RlY3JlbWVudCBtb2R1bGUgdXNhZ2UKKwljb3VudCBhcyByZXF1aXJlZC4gIEZpeCBpbml0IGZ1bmN0aW9ucyB0byBhbGxvdyBsb2FkZWQgZGV2aWNlcy4KKwlSZXZhbGlkYXRlIGFsbCBuZXcgZGlza3Mgc28gd2UgZ2V0IHRoZSBwYXJ0aXRpb24gdGFibGVzLiAgRGVmaW5lCisJZGV0YWNoIGZ1bmN0aW9uLgorCisJKiBzci5jOiBMaWtld2lzZS4KKworCSogc2cuYzogRGVjbGFyZSBkZXRhY2ggZnVuY3Rpb24uICBBbGxvdyBhdHRhY2htZW50IG9mIGRldmljZXMgb24KKwlsb2FkZWQgZHJpdmVycy4KKworCSogc3QuYzogRGVjbGFyZSBkZXRhY2ggZnVuY3Rpb24uICBJbmNyZW1lbnQvZGVjcmVtZW50IG1vZHVsZSB1c2FnZQorCWNvdW50IGFzIHJlcXVpcmVkLgorCitUdWUgSmFuIDEwIDEwOjA5OjU4IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzkgcmVsZWFzZWQuCisKKwlQYXRjaCBmcm9tIHNvbWUgdW5kZXRlcm1pbmVkIGluZGl2aWR1YWwgd2hvIG5lZWRzIHRvIGdldCBhIGxpZmUgOi0pLgorCisJKiBzci5jOiBBdHRhY2tlZCBieSBzcGVsbGluZyBiZWUuLi4KKworCVBhdGNoZXMgZnJvbSBHZXJkIEtub3JyOgorCisJKiBzci5jOiBtYWtlIHByaW50ayBtZXNzYWdlcyBmb3IgcGhvdG9DRCBhIGxpdHRsZSBtb3JlIGluZm9ybWF0aXZlLgorCisJKiBzcl9pb2N0bC5jOiBGaXggQ0RST01NVUxUSVNFU1NJT05fU1lTIGlvY3RsLgorCitNb24gSmFuICA5IDEwOjAxOjM3IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzggcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBBZGQgZW1wdHkgbW9kdWxlczogdGFyZ2V0LgorCisJKiBXaGVlZS4gIE5vdyBjaGFuZ2UgcmVnaXN0ZXJfaW9tZW0gdG8gcmVxdWVzdF9yZWdpb24uCisKKwkqIGluMjAwMC5jOiBCdWdmaXggLSBhcHBhcmVudGx5IHRoaXMgaXMgdGhlIGZpeCB0aGF0IHdlIGhhdmUKKwlhbGwgYmVlbiB3YWl0aW5nIGZvci4gIEl0IGZpeGVzIGEgcHJvYmxlbSB3aGVyZWJ5IHRoZSBkcml2ZXIKKwlpcyBub3Qgc3RhYmxlIHVuZGVyIGhlYXZ5IGxvYWQuICBSYWNlIGNvbmRpdGlvbiBhbmQgYWxsIHRoYXQuCisJUGF0Y2ggZnJvbSBQZXRlciBMdS4KKworV2VkIEphbiAgNCAyMToxNzo0MCAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjc3IHJlbGVhc2VkLgorCisJKiA1M2M3LDh4eC5jOiBGaXggZnJvbSBMaW51cyAtIGVtdWxhdGUgc3BseC4KKworCVRocm91Z2hvdXQ6CisKKwkJQ2hhbmdlICJzbmFyZl9yZWdpb24iIHdpdGggInJlZ2lzdGVyX2lvbWVtIi4KKworCSogc2NzaV9tb2R1bGUuYzogTmV3IGZpbGUuICBDb250YWlucyBzdXBwb3J0IGZvciBsb3ctbGV2ZWwgbG9hZGFibGUKKwkgIHNjc2kgZHJpdmVycy4gW0VSWV0uCisKKwkqIHNkLmM6IE1vcmUgcy9pbnQvbG9uZy8gY2hhbmdlcy4KKworCSogc2VhZ2F0ZS5jOiBFeHBsaWNpdGx5IGluY2x1ZGUgbGludXgvY29uZmlnLmgKKworCSogc2cuYzogSW5jcmVtZW50L2RlY3JlbWVudCBtb2R1bGUgdXNhZ2UgY291bnQgb24gb3Blbi9jbG9zZS4KKworCSogc2cuYzogQmUgYSBiaXQgbW9yZSBjYXJlZnVsIGFib3V0IHRoZSB1c2VyIG5vdCBzdXBwbHlpbmcgZW5vdWdoCisJICBpbmZvcm1hdGlvbiBmb3IgYSB2YWxpZCBjb21tYW5kLiAgUGFzcyBjb3JyZWN0IHNpemUgZG93biB0bworCSAgc2NzaV9kb19jbWQuCisKKwkqIHNyLmM6ICBNb3JlIGNoYW5nZXMgZm9yIFBob3RvLUNELiAgVGhpcyBhcHBhcmVudGx5IGJyZWFrcyBORUMgZHJpdmVzLgorCisJKiBzcl9pb2N0bC5jOiAgU3VwcG9ydCBDRFJPTU1VTFRJU0VTU0lPTiBpb2N0bC4KKworCitTdW4gSmFuICAxIDE5OjU1OjIxIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzYgcmVsZWFzZWQuCisKKwkqIGNvbnN0YW50cy5jOiBBZGQgdHlwZSBjYXN0IGluIHN3aXRjaCBzdGF0ZW1lbnQuCisKKwkqIHNjc2kuYyAoc2NzaV9mcmVlKTogQ2hhbmdlIGRhdGF0eXBlIG9mICJvZmZzZXQiIHRvIGxvbmcuCisJICAoc2NzaV9tYWxsb2MpOiBDaGFuZ2UgYSBmZXcgbW9yZSB2YXJpYWJsZXMgdG8gbG9uZy4gIFdobworCSAgZGlkIHRoaXMgYW5kIHdoeSB3YXMgaXQgaW1wb3J0YW50PyAgNjQgYml0IG1hY2hpbmVzPworCisKKwlMb3RzIG9mIGNoYW5nZXMgdG8gdXNlIHNhdmVfc3RhdGUvcmVzdG9yZV9zdGF0ZSBpbnN0ZWFkIG9mIGNsaS9zdGkuCisJRmlsZXMgY2hhbmdlZCBpbmNsdWRlOgorCisJKiBhaGExNTQyLmM6CisJKiBhaGExNzQwLmM6CisJKiBidXNsb2dpYy5jOgorCSogaW4yMDAwLmM6CisJKiBzY3NpLmM6CisJKiBzY3NpX2RlYnVnLmM6CisJKiBzZC5jOgorCSogc3IuYzoKKwkqIHN0LmM6CisKK1dlZCBEZWMgMjggMTY6Mzg6MjkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS43NSByZWxlYXNlZC4KKworCSogYnVzbG9naWMuYzogU3BlbGxpbmcgZml4LgorCisJKiBzY3NpLmM6IEFkZCBIUCBDMTc5MEEgYW5kIEMyNTAwQSBzY2FuamV0IHRvIGJsYWNrbGlzdC4KKworCSogc2NzaS5jOiBTcGVsbGluZyBmaXh1cC4KKworCSogc2QuYzogQWRkIHN1cHBvcnQgZm9yIHNkX2hhcmRzaXplcyAoaGFyZCBzZWN0b3Igc2l6ZXMpLgorCisJKiB1bHRyYXN0b3IuYzogVXNlIHNhdmVfZmxhZ3MvcmVzdG9yZV9mbGFncyBpbnN0ZWFkIG9mIGNsaS9zdGkuCisKK0ZyaSBEZWMgMjMgMTM6MzY6MjUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS43NCByZWxlYXNlZC4KKworCSogUkVBRE1FLnN0OiBVcGRhdGUgZnJvbSBLYWkgTWFraXNhcmEuCisKKwkqIGVhdGEuYzogTmV3IHZlcnNpb24gZnJvbSBEYXJpbyAtIHZlcnNpb24gMS4xMS4KKwkgIHVzZSBzY3NpY2FtIGJpb3NfcGFyYW0gcm91dGluZS4gIEFkZCBzdXBwb3J0IGZvciAyMDExCisJICBhbmQgMjAyMSBib2FyZHMuCisKKwkqIGhvc3RzLmM6IEFkZCBzdXBwb3J0IGZvciBibG9ja2luZy4gIExpbmtlZCBsaXN0IGF1dG9tYXRpY2FsbHkKKwkgIGdlbmVyYXRlZCB3aGVuIHNocG50LT5ibG9jayBpcyBzZXQuCisKKwkqIHNjc2kuYzogQWRkIHNhbmt5byAmIEhQIHNjYW5qZXQgdG8gYmxhY2tsaXN0LiAgQWRkIHN1cHBvcnQgZm9yCisJICBraWNraW5nIHRoaW5ncyBsb29zZSB3aGVuIHdlIGRlYWRsb2NrLgorCisJKiBzY3NpLmM6IFJlY29nbml6ZSBzY2FubmVycyBhbmQgcHJvY2Vzc29ycyBpbiBzY2FuX3Njc2lzLgorCisJKiBzY3NpX2lvY3RsLmg6IEluY3JlYXNlIHRpbWVvdXQgdG8gOSBzZWNvbmRzLgorCisJKiBzdC5jOiBOZXcgdmVyc2lvbiBmcm9tIEthaSAtIGFkZCBiZXR0ZXIgc3VwcG9ydCBmb3IgYmFja3NwYWNlLgorCisJKiB1MTQtMzRmLmM6IE5ldyB2ZXJzaW9uIGZyb20gRGFyaW8uICBTdXBwb3J0cyBibG9ja2luZy4KKworV2VkIERlYyAxNCAxNDo0NjozMCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjczIHJlbGVhc2VkLgorCisJKiBidXNsb2dpYy5jOiBVcGRhdGUgZnJvbSBEYXZlIEdlbnR6ZWwuICBWZXJzaW9uIDEuMTQuCisJICBBZGQgbW9kdWxlIHJlbGF0ZWQgc3R1ZmYuICAgTW9yZSBmYXVsdCB0b2xlcmFudCBpZiBvdXQgb2YKKwkgIERNQSBtZW1vcnkuCisKKwkqIGZkb21haW4uYzogTmV3IHZlcnNpb24gZnJvbSBSaWsgRmFpdGggLSB2ZXJzaW9uIDUuMjIuICBBZGQgc3VwcG9ydAorCSAgZm9yIElTQS0yMDBTIFNDU0kgYWRhcHRlci4KKworCSogaG9zdHMuYzogU3BlbGxpbmcuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdmVyc2lvbiAwLjM4YS4gIEFkZCBtb3JlIHN1cHBvcnQgZm9yIFBDTUNJQS4KKworCSogc2NzaS5jOiBNYXNrIGRldmljZSB0eXBlIHdpdGggMHgxZiBkdXJpbmcgc2Nhbl9zY3Npcy4KKwkgIEFkZCBzdXBwb3J0IGZvciBkZWFkbG9ja2luZywgZXJyLCBtYWtlIHRoYXQgZ2V0dGluZyBvdXQgb2YKKwkgIGRlYWRsb2NrIHNpdHVhdGlvbnMgdGhhdCBhcmUgY3JlYXRlZCB3aGVuIHdlIGFsbG93IHRoZSB1c2VyCisJICB0byBsaW1pdCByZXF1ZXN0cyB0byBvbmUgaG9zdCBhZGFwdGVyIGF0IGEgdGltZS4KKworCSogc2NzaS5jOiBCdWdmaXggLSBwYXNzIHBpZCwgbm90IFNDcG50IGFzIHNlY29uZCBhcmcgdG8KKwkgIHNjc2lfdGltZXNfb3V0LgorCisJKiBzY3NpLmM6IFJlc3RvcmUgaW50ZXJydXB0IHN0YXRlIHRvIHByZXZpb3VzIHZhbHVlIGluc3RlYWQgb2YgdXNpbmcKKwkgIGNsaS9zdGkgcGFpcnMuCisKKwkqIHNjc2kuYzogQWRkIGEgYnVuY2ggb2YgbW9kdWxlIHN0dWZmIChhbGwgY29tbWVudGVkIG91dCBmb3Igbm93KS4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBzY3NpX2R1bXBfc3RhdHVzLgorCitUdWUgRGVjICA2IDEyOjM0OjIwIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzIgcmVsZWFzZWQuCisKKwkqIHNnLmM6IEJ1Z2ZpeCAtIGFsd2F5cyB1c2Ugc2dfZnJlZSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBiaWcgYnVmZi4KKworRnJpIERlYyAgMiAxMToyNDo1MyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjcxIHJlbGVhc2VkLgorCisJKiBzZy5jOiBDbGVhciBidWZmIGZpZWxkIHdoZW4gbm90IGluIHVzZS4gIE9ubHkgY2FsbCBzY3NpX2ZyZWUgaWYKKwlub24tbnVsbC4KKworCSogc2NzaS5oOiBDYWxsIHdha2VfdXAoJndhaXRfZm9yX3JlcXVlc3QpIHdoZW4gZG9uZSB3aXRoIGEKKwljb21tYW5kLgorCisJKiBzY3NpLmMgKHNjc2lfdGltZXNfb3V0KTogUGFzcyBwaWQgZG93biBzbyB0aGF0IHdlIGNhbiBwcm90ZWN0CisJYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMuCisKKwkqIHNjc2kuYyAoc2NzaV9hYm9ydCk6IFplcm8gdGltZW91dCBmaWVsZCBpZiB3ZSBnZXQgdGhlCisJTk9UX1JVTk5JTkcgbWVzc2FnZSBiYWNrIGZyb20gbG93LWxldmVsIGRyaXZlci4KKworCisJKiBzY3NpLmMgKHNjc2lfZG9uZSk6IFJlc3RvcmUgY21kX2xlbiwgdXNlX3NnIGhlcmUuCisKKwkqIHNjc2kuYyAocmVxdWVzdF9zZW5zZSk6IE5vdCBoZXJlLgorCisJKiBob3N0cy5oOiBBZGQgbmV3IGZvcmJpZGRlbl9hZGRyLCBmb3JiaWRkZW5fc2l6ZSBmaWVsZHMuICBXaG8KKwlhZGRlZCB0aGVzZSBhbmQgd2h5Pz8/PworCisJKiBob3N0cy5jIChzY3NpX21lbV9pbml0KTogTWFyayBwYWdlcyBhcyByZXNlcnZlZCBpZiB0aGV5IGZhbGwgaW4KKwl0aGUgZm9yYmlkZGVuIHJlZ2lvbnMuICBJIGFtIG5vdCBzdXJlIC0gSSB0aGluayB0aGlzIGlzIHNvIHRoYXQKKwl3ZSBjYW4gZGVhbCB3aXRoIGJvYXJkcyB0aGF0IGRvIGluY29tcGxldGUgZGVjb2Rpbmcgb2YgdGhlaXIKKwlhZGRyZXNzIGxpbmVzIGZvciB0aGUgYmlvcyBjaGlwcywgYnV0IEkgYW0gbm90IGVudGlyZWx5IHN1cmUuCisKKwkqIGJ1c2xvZ2ljLmM6IFNldCBmb3JiaWRkZW5fYWRkciBzdHVmZiBpZiB1c2luZyBhIGJ1Z2d5IGJvYXJkLgorCisJKiBhaGExNzQwLmM6IFRlc3QgZm9yIE5VTEwgcG9pbnRlciBpbiBTQ3RtcC4gIFRoaXMgc2hvdWxkIG5vdAorCW9jY3VyLCBidXQgYSBuaWNlIG1lc3NhZ2UgaXMgYmV0dGVyIHRoYW4gYSBrZXJuZWwgc2VnZmF1bHQuCisKKwkqIDUzYzcsOHh4LmM6IEFkZCBuZXcgUENJIGNoaXAgSUQgZm9yIDgxNS4KKworRnJpIERlYyAgMiAxMToyNDo1MyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjcwIHJlbGVhc2VkLgorCisJKiBDaGFuZ2VMb2csIHN0LmM6IFNwZWxsaW5nLgorCitUdWUgTm92IDI5IDE4OjQ4OjQyIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNjkgcmVsZWFzZWQuCisKKwkqIHUxNC0zNGYuaDogTm9uLWZ1bmN0aW9uYWwgY2hhbmdlLiAgW0RhcmlvXS4KKworCSogdTE0LTM0Zi5jOiBVc2UgYmxvY2sgZmllbGQgaW4gU2NzaV9Ib3N0IHRvIHByZXZlbnQgY29tbWFuZHMgZnJvbQorCWJlaW5nIHF1ZXVlZCB0byBtb3JlIHRoYW4gb25lIGhvc3QgYXQgdGhlIHNhbWUgdGltZSAodXNlZCB3aGVuCisJbW90aGVyYm9hcmQgZG9lcyBub3QgZGVhbCB3aXRoIG11bHRpcGxlIGJ1cy1tYXN0ZXJzIHZlcnkgd2VsbCkuCisJT25seSB3aGVuIFNJTkdMRV9IT1NUX09QRVJBVElPTlMgaXMgZGVmaW5lZC4KKwlVc2UgbmV3IGNtZF9wZXJfbHVuIGZpZWxkLiAgW0RhcmlvXQorCisJKiBlYXRhLmM6IExpa2V3aXNlLgorCisJKiBzdC5jOiBNb3JlIGNoYW5nZXMgZnJvbSBLYWkuICBBZGQgcmVhZHkgZmxhZyB0byBpbmRpY2F0ZSBkcml2ZQorCXN0YXR1cy4KKworCSogUkVBRE1FLnN0OiBEb2N1bWVudCB0aGlzLgorCisJKiBzci5jOiBCdWdmaXggKGRvIG5vdCBzdWJ0cmFjdCBDRF9CTE9DS19PRkZTRVQpIGZvciBwaG90by1jZAorCWNvZGUuCisKKwkqIHNnLmM6IEJ1Z2ZpeCAtIGZpeCBwcm9ibGVtIHdoZXJlIG9wY29kZSBpcyBub3QgY29ycmVjdGx5IHNldCB1cC4KKworCSogc2VhZ2F0ZS5bYyxoXTogVXNlICNkZWZpbmVzIHRvIHNldCBkcml2ZXIgbmFtZS4KKworCSogc2NzaV9pb2N0bC5jOiBaZXJvIGJ1ZmZlciBiZWZvcmUgZXhlY3V0aW5nIGNvbW1hbmQuCisKKwkqIHNjc2kuYzogVXNlIG5ldyBjbWRfcGVyX2x1biBmaWVsZCBpbiBTY3NpX0hvc3RzIGFzIGFwcHJvcHJpYXRlLgorCUFkZCBTb255IENEVTU1UyB0byBibGFja2xpc3QuCisKKwkqIGhvc3RzLmg6IEFkZCBuZXcgY21kX3Blcl9sdW4gZmllbGQgdG8gU2NzaV9Ib3N0cy4KKworCSogaG9zdHMuYzogSW5pdGlhbGl6ZSBjbWRfcGVyX2x1biBpbiBTY3NpX0hvc3RzIGZyb20gdGVtcGxhdGUuCisKKwkqIGJ1c2xvZ2ljLmM6IFVzZSBjbWRfcGVyX2x1biBmaWVsZCAtIGluaXRpYWxpemUgdG8gZGlmZmVyZW50CisJdmFsdWVzIGRlcGVuZGluZyB1cG9uIGJ1cyB0eXBlIChpLmUuIHVzZSAxIGlmIElTQSwgc28gd2UgZG8gbm90CisJaG9nIG1lbW9yeSkuICBVc2Ugb3RoZXIgcGF0Y2hlcyB3aGljaCBnb3QgbG9zdCBmcm9tIDEuMS42OC4KKworCSogYWhhMTU0Mi5jOiBTcGVsbGluZy4KKworVHVlIE5vdiAyOSAxNTo0Mzo1MCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjggcmVsZWFzZWQuCisKKwlBZGQgc3VwcG9ydCBmb3IgMTIgYnl0ZSB2ZW5kb3Igc3BlY2lmaWMgY29tbWFuZHMgaW4gc2NzaS1nZW5lcmljcywKKwltb3JlIChpLmUuIHRoZSBsYXN0IG1hbmRhdG9yeSkgbG93LWxldmVsIGNoYW5nZXMgdG8gc3VwcG9ydAorCWxvYWRhYmxlIG1vZHVsZXMsIHBsdXMgYSBmZXcgb3RoZXIgY2hhbmdlcyBwZW9wbGUgaGF2ZSByZXF1ZXN0ZWQKKwlsYXRlbHkuICBDaGFuZ2VzIGJ5IG1lIChFUlkpIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICBTcGVsbGluZworCWNoYW5nZXMgYXBwZWFyIGZyb20gc29tZSB1bmtub3duIGNvcm5lciBvZiB0aGUgdW5pdmVyc2UuCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBDT01NQU5EX1NJWkUoKSB0byB1c2UgU0NwbnQtPmNtZF9sZW4uCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBpbmZvKCkgbG93IGxldmVsIGZ1bmN0aW9uIHRvIHRha2UgYSBTY3NpX0hvc3QKKwlwb2ludGVyLiAgVGhpcyB3YXkgdGhlIGluZm8gZnVuY3Rpb24gY2FuIHJldHVybiBzcGVjaWZpYworCWluZm9ybWF0aW9uIGFib3V0IHRoZSBob3N0IGluIHF1ZXN0aW9uLCBpZiBkZXNpcmVkLgorCisJKiBBbGwgbG93LWxldmVsIGRyaXZlcnM6IEFkZCBOVUxMIGluIGluaXRpYWxpemVyIGZvciB0aGUKKwl1c2FnZV9jb3VudCBmaWVsZCBhZGRlZCB0byBTY3NpX0hvc3RfVGVtcGxhdGUuCisKKwkqIGFoYTE1MnguW2MsaF06IFJlbW92ZSByZWR1bmRhbnQgaW5mbygpIGZ1bmN0aW9uLgorCisJKiBhaGExNTQyLltjLGhdOiBMaWtld2lzZS4KKworCSogYWhhMTc0MC5bYyxoXTogTGlrZXdpc2UuCisKKwkqIGFoYTI3NHguW2MsaF06IExpa2V3aXNlLgorCisJKiBlYXRhLltjLGhdOiBMaWtld2lzZS4KKworCSogcGFzMTYuW2MsaF06IExpa2V3aXNlLgorCisJKiBzY3NpX2RlYnVnLltjLGhdOiBMaWtld2lzZS4KKworCSogdDEyOC5bYyxoXTogTGlrZXdpc2UuCisKKwkqIHUxNC0zNGYuW2MsaF06IExpa2V3aXNlLgorCisJKiB1bHRyYXN0b3IuW2MsaF06IExpa2V3aXNlLgorCisJKiB3ZDcwMDAuW2MsaF06IExpa2V3aXNlLgorCisJKiBhaGExNTQyLmM6IEFkZCBzdXBwb3J0IGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucyB3aXRoIGxpbG8gdG8gc2V0CisJRE1BIHBhcmFtZXRlcnMsIEkvTyBwb3J0LiAgRnJvbSBNYXR0IEFhcm5pby4KKworCSogYnVzbG9naWMuW2MsaF06IE5ldyB2ZXJzaW9uICgxLjEzKSBmcm9tIERhdmUgR2VudHplbC4KKworCSogaG9zdHMuaDogQWRkIG5ldyBmaWVsZCB0byBTY3NpX0hvc3RzICJibG9jayIgdG8gYWxsb3cgYmxvY2tpbmcKKwlhbGwgSS9PIHRvIGNlcnRhaW4gb3RoZXIgY2FyZHMuICBIZWxwcyBwcmV2ZW50IHByb2JsZW1zIHdpdGggc29tZQorCUlTQSBtb3RoZXJib2FyZHMuCisKKwkqIGhvc3RzLmg6IEFkZCB1c2FnZV9jb3VudCB0byBTY3NpX0hvc3RfVGVtcGxhdGUuCisKKwkqIGhvc3RzLmg6IEFkZCBuX2lvX3BvcnQgdG8gU2NzaV9Ib3N0ICh1c2VkIHdoZW4gcmVsZWFzaW5nIG1vZHVsZSkuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgYmxvY2sgZmllbGQuCisKKwkqIGluMjAwMC5jOiBSZW1vdmUgInN0YXRpYyIgZGVjbGFyYXRpb25zIGZyb20gZXhwb3J0ZWQgZnVuY3Rpb25zLgorCisJKiBpbjIwMDAuaDogTGlrZXdpc2UuCisKKwkqIHNjc2kuYzogQ29ycmVjdGx5IHNldCBjbWRfbGVuIGZpZWxkIGFzIHJlcXVpcmVkLiAgU2F2ZSBhbmQKKwljaGFuZ2Ugc2V0dGluZyB3aGVuIGRvaW5nIGEgcmVxdWVzdF9zZW5zZSwgcmVzdG9yZSB3aGVuIGRvbmUuCisJTW92ZSBhYm9ydCB0aW1lb3V0IG1lc3NhZ2UuICBGaXggcGFuaWMgaW4gcmVxdWVzdF9xdWV1ZWFibGUgdG8KKwlwcmludCBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuCisKKwkqIHNjc2kuYzogV2hlbiBpbmNyZW1lbnRpbmcgdXNhZ2UgY291bnQsIHdhbGsgYmxvY2sgbGlua2VkIGxpc3QKKwlmb3IgaG9zdCwgYW5kIG9yIGluIFNDU0lfSE9TVF9CTE9DSyBiaXQuICBXaGVuIGRlY3JlbWVudGluZyB1c2FnZQorCWNvdW50IHRvIDAsIGNsZWFyIHRoaXMgYml0IHRvIGFsbG93IHVzYWdlIHRvIGNvbnRpbnVlLCB3YWtlIHVwCisJcHJvY2Vzc2VzIHdhaXRpbmcuCisKKworCSogc2NzaV9pb2N0bC5jOiBJZiB3ZSBoYXZlIGFuIGluZm8oKSBmdW5jdGlvbiwgY2FsbCBpdCwgb3RoZXJ3aXNlCisJaWYgd2UgaGF2ZSBhICJuYW1lIiBmaWVsZCwgdXNlIGl0LCBlbHNlIGRvIG5vdGhpbmcuCisKKwkqIHNkLmMsIHNyLmM6IENsZWFyIGNtZF9sZW4gZmllbGQgcHJpb3IgdG8gZWFjaCBjb21tYW5kIHdlCisJZ2VuZXJhdGUuCisKKwkqIHNkLmg6IEFkZCAiaGFzX3BhcnRfdGFibGUiIGJpdCB0byByc2NzaV9kaXNrcy4KKworCSogc2cuW2MsaF06IEFkZCBzdXBwb3J0IGZvciB2ZW5kb3Igc3BlY2lmaWMgMTIgYnl0ZSBjb21tYW5kcyAoaS5lLgorCW92ZXJyaWRlIGNvbW1hbmQgbGVuZ3RoIGluIENPTU1BTkRfU0laRSkuCisKKwkqIHNyLmM6IEJ1Z2ZpeCBmcm9tIEdlcmQgaW4gcGhvdG9jZCBjb2RlLgorCisJKiBzci5jOiBCdWdmaXggaW4gZ2V0X3NlY3RvcnNpemUgLSBhbHdheXMgdXNlIHNjc2lfbWFsbG9jIGJ1ZmZlciAtCisJd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBzdGFjayBpcyA8IDE2TWIuCisKK1R1ZSBOb3YgMjIgMTU6NDA6NDYgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUuYWliLmNvbSkKKworCSogTGludXggMS4xLjY3IHJlbGVhc2VkLgorCisJKiBzci5jOiBDaGFuZ2Ugc3BlbGxpbmcgb2YgbWFudWZhY3RvciB0byBtYW51ZmFjdHVyZXIuCisKKwkqIHNjc2kuaDogTGlrZXdpc2UuCisKKwkqIHNjc2kuYzogTGlrZXdpc2UuCisKKwkqIHFsb2dpYy5jOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KKworCSogaW4yMDAwLmg6IFNwZWxsaW5nIGNvcnJlY3Rpb25zLgorCisJKiBpbjIwMDAuYzogVXBkYXRlIGZyb20gQmlsbCBFYXJuZXN0LCBjaGFuZ2UgZnJvbQorCWpzaGlmZmxlQG5ldGNvbS5jb20uICBTdXBwb3J0IG5ldyBiaW9zIHZlcnNpb25zLgorCisJKiBSRUFETUUucWxvZ2ljOiBTcGVsbGluZyBjb3JyZWN0aW9uLgorCitUdWUgTm92IDIyIDE1OjQwOjQ2IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NiByZWxlYXNlZC4KKworCSogdTE0LTM0Zi5jOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KKworCSogc3IuW2gsY106IEFkZCBzdXBwb3J0IGZvciBtdWx0aS1zZXNzaW9uIENEcyBmcm9tIEdlcmQgS25vcnIuCisKKwkqIHNjc2kuaDogQWRkIG1hbnVmYWN0b3IgZmllbGQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGV2aWNlCisJbWFudWZhY3R1cmVyLgorCisJKiBzY3NpLmM6IE1vcmUgc3BlbGxpbmcgY29ycmVjdGlvbnMuCisKKwkqIHFsb2dpYy5oLCBxbG9naWMuYywgUkVBRE1FLnFsb2dpYzogTmV3IGRyaXZlciBmcm9tIFRvbSBaZXJ1Y2hhLgorCisJKiBpbjIwMDAuYywgaW4yMDAwLmg6IE5ldyBkcml2ZXIgZnJvbSBCcmFkIE1jTGVhbi9CaWxsIEVhcm5lc3QuCisKKwkqIGZkb21haW4uYzogU3BlbGxpbmcgY29ycmVjdGlvbi4KKworCSogZWF0YS5jOiBTcGVsbGluZyBjb3JyZWN0aW9uLgorCitGcmkgTm92IDE4IDE1OjIyOjQ0IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NSByZWxlYXNlZC4KKworCSogZWF0YS5oOiBVcGRhdGUgdmVyc2lvbiBzdHJpbmcgdG8gMS4wOC4wMC4KKworCSogZWF0YS5jOiBTZXQgc2dfdGFibGVzaXplIGNvcnJlY3RseSBmb3IgRFBUIFBNMjAxMiBib2FyZHMuCisKKwkqIGFoYTI3NHguc2VxOiBTcGVsbCBjaGVja2luZy4KKworCSogUkVBRE1FLnN0OiBMaWtld2lzZS4KKworCSogUkVBRE1FLmFoYTI3NHg6IExpa2V3aXNlLgorCisJKiBDaGFuZ2VMb2c6IExpa2V3aXNlLgorCitUdWUgTm92IDE1IDE1OjM1OjA4IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NCByZWxlYXNlZC4KKworCSogdTE0LTM0Zi5oOiBVcGRhdGUgdmVyc2lvbiBudW1iZXIgdG8gMS4xMC4wMS4KKworCSogdTE0LTM0Zi5jOiBVc2UgU2NzaV9Ib3N0IGNhbl9xdWV1ZSB2YXJpYWJsZSBpbnN0ZWFkIG9mIG9uZSBmcm9tIHRlbXBsYXRlLgorCisJKiBlYXRhLltjLGhdOiBOZXcgZHJpdmVyIGZvciBEUFQgYm9hcmRzIGZyb20gRGFyaW8gQmFsbGFiaW8uCisKKwkqIGJ1c2xvZ2ljLmM6IFVzZSBjYW5fcXVldWUgZmllbGQuCisKK1dlZCBOb3YgMzAgMTI6MDk6MDkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUuYWliLmNvbSkKKworCSogTGludXggMS4xLjYzIHJlbGVhc2VkLgorCisJKiBzZC5jOiBHaXZlIEkvTyBlcnJvciBpZiB3ZSBhdHRlbXB0IDUxMiBieXRlIEkvTyB0byBhIGRpc2sgd2l0aAorCTEwMjQgYnl0ZSBzZWN0b3JzLgorCisJKiBzY3NpY2FtLmM6IE1ha2Ugc3VyZSB3ZSBkbyByZWFkIGZyb20gd2hvbGUgZGlzayAobWFzayBvZmYKKwlwYXJ0aXRpb24pLgorCisJKiBzY3NpLmM6IFVzZSBjYW5fcXVldWUgaW4gU2NzaV9Ib3N0IHN0cnVjdHVyZS4KKwlGaXggcGFuaWMgbWVzc2FnZSBhYm91dCBpbnZhbGlkIGhvc3QuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgY2FuX3F1ZXVlIGZyb20gdGVtcGxhdGUuCisKKwkqIGhvc3RzLmg6IEFkZCBjYW5fcXVldWUgdG8gU2NzaV9Ib3N0IHN0cnVjdHVyZS4KKworCSogYWhhMTc0MC5jOiBQcmludCBvdXQgd2FybmluZyBhYm91dCBOVUxMIGVjYnB0ci4KKworRnJpIE5vdiAgNCAxMjo0MDozMCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjIgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4yMC4gKEZyb20gUmlrIEZhaXRoKS4gIFN1cHBvcnQKKwlCSU9TIHZlcnNpb24gMy41LgorCisJKiBzdC5oOiBBZGQgU1RfRU9EIHN5bWJvbC4KKworCSogc3QuYzogUGF0Y2hlcyBmcm9tIEthaSBNYWtpc2FyYSAtIHN1cHBvcnQgYWRkaXRpb25hbCBkZW5zaXRpZXMsCisJYWRkIHN1cHBvcnQgZm9yIE1URlNTLCBNVEJTUywgTVRXU00gY29tbWFuZHMuCisKKwkqIFJFQURNRS5zdDogVXBkYXRlIHRvIGRvY3VtZW50IG5ldyBjb21tYW5kcy4KKworCSogc2NzaS5jOiBBZGQgTWVkaWF2aXNpb24gQ0RSLUg5M01WIHRvIGJsYWNrbGlzdC4KKworU2F0IE9jdCAyOSAyMDo1NzozNiAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjAgcmVsZWFzZWQuCisKKwkqIHUxNC0zNGYuW2MsaF06IE5ldyBkcml2ZXIgZnJvbSBEYXJpbyBCYWxsYWJpby4KKworCSogYWljNzc3MC5jLCBhaGEyNzR4X3NlcS5oLCBhaGEyNzR4LnNlcSwgYWhhMjc0eC5oLCBhaGEyNzR4LmMsCisJUkVBRE1FLmFoYTI3NHg6IE5ldyBmaWxlcywgbmV3IGRyaXZlciBmcm9tIEpvaG4gQXljb2NrLgorCisKK1R1ZSBPY3QgMTEgMDg6NDc6MzkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41NCByZWxlYXNlZC4KKworCSogQWRkIHRoaXJkIFBDSSBjaGlwIGlkLiAgW0RyZXddCisKKwkqIGJ1c2xvZ2ljLmM6IFNldCBCVVNMT0dJQ19DTURMVU4gYmFjayB0byAxIFtFcmljXS4KKworCSogdWx0cmFzdG9yLmM6IEZpeCBhc20gZGlyZWN0aXZlcyBmb3IgbmV3IEdDQy4KKworCSogc3IuYywgc2QuYzogVXNlIG5ldyBlbmRfc2NzaV9yZXF1ZXN0IGZ1bmN0aW9uLgorCisJKiBzY3NpLmgoZW5kX3Njc2lfcmVxdWVzdCk6IFJldHVybiBwb2ludGVyIHRvIGJsb2NrIGlmIHN0aWxsCisJYWN0aXZlLCBlbHNlIHJldHVybiBOVUxMIGlmIGluYWN0aXZlLiAgRml4ZXMgcmFjZSBjb25kaXRpb24uCisKK1N1biBPY3QgIDkgMjA6MjM6MTQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41MyByZWxlYXNlZC4KKworCSogc2NzaS5jOiBEbyBub3QgYWxsb2NhdGUgZG1hIGJvdW5jZSBidWZmZXJzIGlmIHdlIGhhdmUgZXhhY3RseQorCTE2TWIuCisKK0ZyaSBTZXAgIDkgMDU6MzU6MzAgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41MSByZWxlYXNlZC4KKworCSogYWhhMTUyeC5jOiBBZGQgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIHRoZSBwYXJpdHkgY2hlY2suICBVcGRhdGUKKwl0byB2ZXJzaW9uIDEuNC4gW0p1ZXJnZW5dLgorCisJKiBzZWFnYXRlLmM6IFR3ZWFrIGRlYnVnZ2luZyBtZXNzYWdlLgorCitXZWQgQXVnIDMxIDEwOjE1OjU1IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNTAgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogQWRkIGViODAwIGZvciBWdGVjaCBQbGF0aW51bSBTTVAgYm9hcmRzLiBbSnVlcmdlbl0uCisKKwkqIHNjc2kuYzogQWRkIFF1YW50dW0gUEQxMjI1UyB0byBibGFja2xpc3QuCisKK0ZyaSBBdWcgMjYgMDk6Mzg6NDUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40OSByZWxlYXNlZC4KKworCSogc2QuYzogRml4IGJ1ZyB3aGVuIHdlIHdlcmUgZGVsZXRpbmcgdGhlIHdyb25nIGVudHJ5IGlmIHdlCisJZ2V0IGFuIHVuc3VwcG9ydGVkIHNlY3RvciBzaXplIGRldmljZS4KKworCSogc3IuYzogQW5vdGhlciBzcGVsbGluZyBwYXRjaC4KKworVGh1IEF1ZyAyNSAwOToxNToyNyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQ4IHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBVc2UgbmV3IHNlbWFudGljcyBmb3IgcmVxdWVzdF9kbWEsIGFzIGFwcHJvcHJpYXRlLgorCisJKiBzci5jOiBQcmludCBjb3JyZWN0IGRldmljZSBudW1iZXIuCisKK1N1biBBdWcgMjEgMTc6NDk6MjMgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NyByZWxlYXNlZC4KKworCSogTkNSNTM4MC5jOiBBZGQgc3VwcG9ydCBmb3IgTElNSVRfVFJBTlNGRVJTSVpFLgorCisJKiBjb25zdGFudHMuaDogQWRkIHByb3RvdHlwZSBmb3IgcHJpbnRfU2NzaV9DbW5kLgorCisJKiBwYXMxNi5jOiBTb21lIG1vcmUgbWlub3IgdHdlYWtzLiAgVGVzdCBmb3IgTWVkaWF2aXNpb24gYm9hcmQuCisJQWxsb3cgZm9yIGRpc2tzID4gMUdiLiAgW0RyZXc/P10KKworCSogc3IuYzogU2V0IFNDcG50LT50cmFuc2ZlcnNpemUuCisKK1R1ZSBBdWcgMTYgMTc6Mjk6MzUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NiByZWxlYXNlZC4KKworCSogVGhyb3VnaG91dDogTW9yZSBzcGVsbGluZyBmaXh1cHMuCisKKwkqIGJ1c2xvZ2ljLmM6IEFkZCBhIGZldyBtb3JlIGZpeHVwcyBmcm9tIERhdmUuICBEaXNrIHRyYW5zbGF0aW9uCisJbWFpbmx5LgorCisJKiBwYXMxNi5jOiBBZGQgYSBmZXcgcGF0Y2hlcyAoRHJldz8pLgorCisKK1RodSBBdWcgMTEgMjA6NDU6MTUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NCByZWxlYXNlZC4KKworCSogaG9zdHMuYzogQWRkIHR5cGUgY2FzdHMgZm9yIHNjc2lfaW5pdF9tYWxsb2MuCisKKwkqIHNjc2ljYW0uYzogQWRkIHR5cGUgY2FzdC4KKworV2VkIEF1ZyAxMCAxOToyMzowMSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQzIHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBTcGVsbGluZyBjbGVhbnVwcy4gWz8/XQorCisJKiBhaGExNTJ4LmMsIE5DUjUzKi5jLCBmZG9tYWluLmMsIGdfTkNSNTM4MC5jLCBwYXMxNi5jLCBzZWFnYXRlLmMsCisJIHQxMjguYzogVXNlIHJlcXVlc3RfaXJxLCBub3QgaXJxYWN0aW9uLiBbPz9dCisKKwkqIGFoYTE1NDIuYzogTW92ZSB0ZXN0IGZvciBzaG9zdCBiZWZvcmUgd2Ugc3RhcnQgdG8gdXNlIHNob3N0LgorCisJKiBhaGExNTQyLmMsIGFoYTE3NDAuYywgdWx0cmFzdG9yLmMsIHdkNzAwMC5jOiBVc2UgbmV3CisJY2FsbGluZyBzZXF1ZW5jZSBmb3IgcmVxdWVzdF9pcnEuCisKKwkqIGJ1c2xvZ2ljLmM6IFVwZGF0ZSBmcm9tIERhdmUgR2VudHplbC4KKworVHVlIEF1ZyAgOSAwOTozMjo1OSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQyIHJlbGVhc2VkLgorCisJKiBOQ1I1MzgwLmM6IENoYW5nZSBOQ1I1MzgwX3ByaW50X3N0YXR1cyB0byBzdGF0aWMuCisKKwkqIHNlYWdhdGUuYzogQSBmZXcgbW9yZSBidWdmaXhlcy4gIE9ubHkgRHJldyBrbm93cyB3aGF0IHRoZXkgYXJlCisJZm9yLgorCisJKiB1bHRyYXN0b3IuYzogVHdlYWsgc29tZSBfX2FzbV9fIGRpcmVjdGl2ZXMgc28gdGhhdCBpdCB3b3JrcworCXdpdGggbmV3ZXIgY29tcGlsZXJzLiBbPz9dCisKK1NhdCBBdWcgIDYgMjE6Mjk6MzYgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40MCByZWxlYXNlZC4KKworCSogTkNSNTM4MC5jOiBSZXR1cm4gU0NTSV9SRVNFVF9XQUtFVVAgZnJvbSByZXNldCBmdW5jdGlvbi4KKworCSogYWhhMTU0Mi5jOiBSZXNldCBtYWlsYm94IHN0YXR1cyBhZnRlciBhIGJ1cyBkZXZpY2UgcmVzZXQuCisKKwkqIGNvbnN0YW50cy5jOiBGaXggdHlwbyAoOzspLgorCisJKiBnX05DUjUzODAuYzoKKwkqIHBhczE2LmM6ICBDb3JyZWN0IHVzYWdlIG9mIE5DUjUzODBfaW5pdC4KKworCSogc2NzaS5jOiBSZW1vdmUgcmVkdW5kYW50IChhbmQgdW51c2VkIHZhcmlhYmxlcykuCisKKwkqIHNkLmM6IFVzZSBtZW1zZXQgdG8gY2xlYXIgYWxsIG9mIHJzY3NpX2Rpc2tzIGJlZm9yZSB3ZSB1c2UgaXQuCisKKwkqIHNnLmM6IERpdHRvLCBleGNlcHQgZm9yIHNjc2lfZ2VuZXJpY3MuCisKKwkqIHNyLmM6IERpdHRvLCBleGNlcHQgZm9yIHNjc2lfQ0RzLgorCisJKiBzdC5jOiBJbml0aWFsaXplIFNUcC0+ZGV2aWNlLgorCisJKiBzZWFnYXRlLmM6IEZpeCBidWcuIFtEcmV3XQorCitUaHUgQXVnICA0IDA4OjQ3OjI3IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuMzkgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBGaXggdHlwbyBpbiBOQ1I1M0M3eHguCisKKwkqIHN0LmM6IFByaW50IGNvcnJlY3QgbnVtYmVyIGZvciBkZXZpY2UuCisKK1R1ZSBBdWcgIDIgMTE6Mjk6MTQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzggcmVsZWFzZWQuCisKKwlMb3RzIG9mIGNoYW5nZXMgaW4gMS4xLjM4LiAgQWxsIGZyb20gRHJldyB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisJKiA1M2M3LDh4eC5jOiBOZXcgZmlsZSBmcm9tIERyZXcuICBQQ0kgZHJpdmVyLgorCisJKiA1M2M3LDh4eC5oOiBMaWtld2lzZS4KKworCSogNTNjNyw4eHguc2NyOiBMaWtld2lzZS4KKworCSogNTNjOHh4X2QuaCwgNTNjOHh4X3UuaCwgc2NyaXB0X2FzbS5wbDogTGlrZXdpc2UuCisKKwkqIHNjc2ljYW0uYzogTmV3IGZpbGUgZnJvbSBEcmV3LiAgUmVhZCBibG9jayAwIG9uIHRoZSBkaXNrIGFuZAorCXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZS4gIEF0dGVtcHQgdG8gZGVkdWNlIHRoZSBnZW9tZXRyeSBmcm9tCisJdGhlIHBhcnRpdGlvbiB0YWJsZSBpZiBwb3NzaWJsZS4gIE9ubHkgdXNlZCBieSA1M2NbNyw4XXh4IHJpZ2h0CisJbm93LCBidXQgY291bGQgYmUgdXNlZCBieSBhbnkgZGV2aWNlIGZvciB3aGljaCB3ZSBoYXZlIG5vIHdheQorCW9mIGlkZW50aWZ5aW5nIHRoZSBnZW9tZXRyeS4KKworCSogc2QuYzogVXNlIGRldmljZSBsZXR0ZXJzIGluc3RlYWQgb2Ygc2QlZCBpbiBhIGxvdCBvZiBtZXNzYWdlcy4KKworCSogc2VhZ2F0ZS5jOiBGaXggYnVnIHRoYXQgcmVzdWx0ZWQgaW4gbG9ja3VwcyB3aXRoIHNvbWUgZGV2aWNlcy4KKworCSogc3IuYyAoc3Jfb3Blbik6IFJldHVybiAtRVJPRlMsIG5vdCAtRUFDQ0VTIGlmIHdlIGF0dGVtcHQgdG8gb3BlbgorCWRldmljZSBmb3Igd3JpdGUuCisKKwkqIGhvc3RzLmMsIE1ha2VmaWxlOiBVcGRhdGUgZm9yIG5ldyBkcml2ZXIuCisKKwkqIE5DUjUzODAuYywgTkNSNTM4MC5oLCBnX05DUjUzODAuaDogVXBkYXRlIGZyb20gRHJldyB0byBzdXBwb3J0CisJNTNDNDAwIGNoaXAuCisKKwkqIGNvbnN0YW50cy5jOiBEZWZpbmUgQ09OU1RfQ01ORCBhbmQgQ09OU1RfTVNHLiAgT3RoZXIgbWlub3IKKwljbGVhbnVwcyBhbG9uZyB0aGUgd2F5LiAgSW1wcm92ZSBoYW5kbGluZyBvZiBDT05TVF9NU0cuCisKKwkqIGZkb21haW4uYywgZmRvbWFpbi5oOiBOZXcgdmVyc2lvbiBmcm9tIFJpayBGYWl0aC4gIFVwZGF0ZSB0bworCTUuMTguICBTaG91bGQgbm93IHN1cHBvcnQgVE1DLTMyNjAgUENJIGNhcmQgd2l0aCAxOEMzMCBjaGlwLgorCisJKiBwYXMxNi5jOiBVcGRhdGUgd2l0aCBuZXcgaXJxIGluaXRpYWxpemF0aW9uLgorCisJKiB0MTI4LmM6IFVwZGF0ZSB3aXRoIG1pbm9yIGNsZWFudXBzLgorCisJKiBzY3NpLmMgKHNjc2lfcGlkKTogTmV3IHZhcmlhYmxlIC0gZ2l2ZXMgZWFjaCBjb21tYW5kIGEgdW5pcXVlCisJaWQuIEFkZCBRdWFudHVtIExQUzUyMzVTIHRvIGJsYWNrbGlzdC4gIENoYW5nZSBpbl9zY2FuIHRvCisJaW5fc2Nhbl9zY3NpcyBhbmQgbWFrZSBnbG9iYWwuCisKKwkqIHNjc2kuaDogQWRkIHNvbWUgZGVmaW5lcyBmb3IgZXh0ZW5kZWQgbWVzc2FnZSBoYW5kbGluZywKKwlJTklUSUFURS9SRUxFQVNFX1JFQ09WRVJZLiAgQWRkIGEgZmV3IG5ldyBmaWVsZHMgdG8gc3VwcG9ydCBzeW5jCisJdHJhbnNmZXJzLgorCisJKiBzY3NpX2lvY3RsLmg6IEFkZCBpb2N0bCB0byByZXF1ZXN0IHN5bmNocm9ub3VzIHRyYW5zZmVycy4KKworCitUdWUgSnVsIDI2IDIxOjM2OjU4IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjM3IHJlbGVhc2VkLgorCisJKiBhaGExNTQyLmM6IEFsd2F5cyBjYWxsIGFoYTE1NDJfbWJlbmFibGUsIHVzZSBuZXcgdWRlbGF5CisJbWVjaGFuaXNtIHNvIHdlIGRvIG5vdCB3YWl0IGEgbG9uZyB0aW1lIGlmIHRoZSBib2FyZCBkb2VzIG5vdAorCWltcGxlbWVudCB0aGlzIGNvbW1hbmQuCisKKwkqIGdfTkNSNTM4MC5jOiBSZW1vdmUgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiBhbmQgI2lmCisJZGVmaW5lZChDT05GSUdfU0NTSV8qKS4KKworCSogc2VhZ2F0ZS5jOiBMaWtld2lzZS4KKworCU5leHQgcm91bmQgb2YgY2hhbmdlcyB0byBzdXBwb3J0IGxvYWRhYmxlIG1vZHVsZXMuICBHZXR0aW5nIGNsb3NlcgorCW5vdywgc3RpbGwgbm90IHBvc3NpYmxlIHRvIGRvIGFueXRoaW5nIHJlbW90ZWx5IHVzYWJsZS4KKworCWhvc3RzLmM6IENyZWF0ZSBhIGxpbmtlZCBsaXN0IG9mIGRldGVjdGVkIGhpZ2ggbGV2ZWwgZGV2aWNlcy4KKwkoc2NzaV9yZWdpc3Rlcl9kZXZpY2UpOiBOZXcgZnVuY3Rpb24gdG8gaW5zZXJ0IGludG8gdGhpcyBsaXN0LgorCShzY3NpX2luaXQpOiBDYWxsIHNjc2lfcmVnaXN0ZXJfZGV2aWNlIGZvciBlYWNoIG9mIHRoZSBrbm93biBoaWdoCisJbGV2ZWwgZHJpdmVycy4KKworCWhvc3RzLmg6IEFkZCBwcm90b3R5cGUgZm9yIGxpbmtlZCBsaXN0IGhlYWRlci4gIEFkZCBzdHJ1Y3R1cmUKKwlkZWZpbml0aW9uIGZvciBkZXZpY2UgdGVtcGxhdGUgc3RydWN0dXJlIHdoaWNoIGRlZmluZXMgdGhlIGxpbmtlZAorCWxpc3QuCisKKwlzY3NpLmM6IChzY2FuX3Njc2lzKTogVXNlIGxpbmtlZCBsaXN0IGluc3RlYWQgb2Yga25vd2xlZGdlIGFib3V0CisJZXhpc3RpbmcgaGlnaCBsZXZlbCBkZXZpY2UgZHJpdmVycy4KKwkoc2NzaV9kZXZfaW5pdCk6IFVzZSBpbml0IGZ1bmN0aW9ucyBmb3IgZHJpdmVycyBvbiBsaW5rZWQgbGlzdAorCWluc3RlYWQgb2YgZXhwbGljaXQgbGlzdCB0byBpbml0aWFsaXplIGFuZCBhdHRhY2ggZGV2aWNlcyB0byBoaWdoCisJbGV2ZWwgZHJpdmVycy4KKworCXNjc2kuaDogQWRkIG5ldyBmaWVsZCAiYXR0YWNoZWQiIHRvIHNjc2lfZGV2aWNlIC0gY291bnQgb2YgbnVtYmVyCisJb2YgaGlnaCBsZXZlbCBkZXZpY2VzIGF0dGFjaGVkLgorCisJc2QuYywgc3IuYywgc2cuYywgc3QuYzogQWRqdXN0IGluaXQvYXR0YWNoIGZ1bmN0aW9ucyB0byB1c2UgbmV3CisJc2NoZW1lLgorCitTYXQgSnVsIDIzIDEzOjAzOjE3IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjM1IHJlbGVhc2VkLgorCisJKiB1bHRyYXN0b3IuYzogQ2hhbmdlIGNvbnN0cmFpbnQgb24gYXNtKCkgb3BlcmFuZCBzbyB0aGF0IGl0IHdvcmtzCisJd2l0aCBnY2MgMi42LjAuCisKK1RodSBKdWwgMjEgMTA6Mzc6MzkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzMgcmVsZWFzZWQuCisKKwkqIHNyLmMoc3Jfb3Blbik6IERvIG5vdCBhbGxvdyBvcGVucyB3aXRoIHdyaXRlIGFjY2Vzcy4KKworTW9uIEp1bCAxOCAwOTo1MToyMiAxOTk0IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjMxIHJlbGVhc2VkLgorCisJKiBzZC5jOiBJbmNyZWFzZSBTRF9USU1FT1VUIGZyb20gMzAwIHRvIDYwMC4KKworCSogc3IuYzogUmVtb3ZlIHN0cmF5IHRhc2tfc3RydWN0KiB2YXJpYWJsZSB0aGF0IHdhcyBubyBsb25nZXIKKwl1c2VkLgorCisJKiBzcl9pb2N0bC5jOiBGaXggdHlwbyBpbiB1cCgpIGNhbGwuCisKK1N1biBKdWwgMTcgMTY6MjU6MjkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzAgcmVsZWFzZWQuCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IEZpeCBkZXRlY3Rpb24gb2Ygc29tZSBUb3NoaWJhIENEUk9NIGRyaXZlcworCXRoYXQgcmVwb3J0IHRoZW1zZWx2ZXMgYXMgZGlzayBkcml2ZXMuCisKKwkqIChUaHJvdWdob3V0KTogVXNlIHJlcXVlc3Quc2VtIGluc3RlYWQgb2YgcmVxdWVzdC53YWl0aW5nLgorCVNob3VsZCBmaXggc3dhcCBwcm9ibGVtIHdpdGggZmRvbWFpbi4KKworVGh1IEp1bCAxNCAxMDo1MTo0MiAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCisKKwkqIExpbnV4IDEuMS4yOSByZWxlYXNlZC4KKworCSogc2NzaS5jIChzY2FuX3Njc2lzKTogQWRkIG5ldyBkZXZpY2VzIHRvIGVuZCBvZiBsaW5rZWQgbGlzdCwgbm90CisJdG8gdGhlIGJlZ2lubmluZy4KKworCSogc2NzaS5oIChTQ1NJX1NMRUVQKTogUmVtb3ZlIGJyYWluIGRlYWQgaGFjayB0byB0cnkgdG8gc2F2ZQorCXRoZSB0YXNrIHN0YXRlIGJlZm9yZSBzbGVlcGluZy4KKworU2F0IEp1bCAgOSAxNTowMTowMyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCisKKwlNb3JlIGNoYW5nZXMgdG8gZXZlbnR1YWxseSBzdXBwb3J0IGxvYWRhYmxlIG1vZHVsZXMuICBNYWlubHkKKwl3ZSB3YW50IHRvIHVzZSBsaW5rZWQgbGlzdHMgaW5zdGVhZCBvZiBhcnJheXMgYmVjYXVzZSBpdCBpcyBlYXNpZXIKKwl0byBkeW5hbWljYWxseSBhZGQgYW5kIHJlbW92ZSB0aGluZ3MgdGhpcyB3YXkuCisKKwlRdWl0ZSBhIGJpdCBtb3JlIHdvcmsgaXMgbmVlZGVkIGJlZm9yZSBsb2FkYWJsZSBtb2R1bGVzIGFyZQorCXBvc3NpYmxlIChhbmQgdXNhYmxlKSB3aXRoIHNjc2ksIGJ1dCB0aGlzIGlzIG1vc3Qgb2YgdGhlIGdydW5nZQorCXdvcmsuCisKKwkqIExpbnV4IDEuMS4yOCByZWxlYXNlZC4KKworCSogc2NzaS5jLCBzY3NpLmggKGFsbG9jYXRlX2RldmljZSwgcmVxdWVzdF9xdWV1ZWFibGUpOiBDaGFuZ2UKKwlhcmd1bWVudCBmcm9tIGluZGV4IGludG8gc2NzaV9kZXZpY2VzIHRvIGEgcG9pbnRlciB0byB0aGUKKwlTY3NpX0RldmljZSBzdHJ1Y3QuCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBhbGwgY2FsbHMgdG8gYWxsb2NhdGVfZGV2aWNlLAorCXJlcXVlc3RfcXVldWVhYmxlIHRvIHVzZSBuZXcgY2FsbGluZyBzZXF1ZW5jZS4KKworCSogVGhyb3VnaG91dDogVXNlIFNDcG50LT5kZXZpY2UgaW5zdGVhZCBvZgorCXNjc2lfZGV2aWNlc1tTQ3BudC0+aW5kZXhdLiAgVWdoIC0gdGhlIHBvaW50ZXIgd2FzIHRoZXJlIGFsbCBhbG9uZworCS0gbXVjaCBjbGVhbmVyIHRoaXMgd2F5LgorCisJKiBzY3NpLmMgKHNjc2lfaW5pdF9tYWxsb2MsIHNjc2lfZnJlZV9tYWxsb2MpOiBOZXcgZnVuY3Rpb25zIC0KKwlhbGxvdyB1cyB0byBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgbWFsbG9jIHdoZW4gd2UKKwlpbml0aWFsaXplLiAgVXNlIHRoaXMgaW5zdGVhZCBvZiBwYXNzaW5nIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZAorCWFyb3VuZCBhbGwgb3ZlciB0aGUgcGxhY2UuCisKKwkqIHNjc2kuaCwgc3QuYywgc3IuYywgc2QuYywgc2cuYzogQ2hhbmdlICpfaW5pdDEgZnVuY3Rpb25zIHRvIHVzZQorCXNjc2lfaW5pdF9tYWxsb2MsIHJlbW92ZSBhbGwgYXJndW1lbnRzLCBubyByZXR1cm4gdmFsdWUuCisKKwkqIHNjc2kuaDogUmVtb3ZlIGluZGV4IGZpZWxkIGZyb20gU2NzaV9EZXZpY2UgYW5kIFNjc2lfQ21uZAorCXN0cnVjdHMuCisKKwkqIHNjc2kuYyAoc2NzaV9kZXZfaW5pdCk6IFNldCB1cCBmb3Igc2NzaV9pbml0X21hbGxvYy4KKwkoc2Nhbl9zY3Npcyk6IEdldCBTRHBudCBmcm9tIHNjc2lfaW5pdF9tYWxsb2MsIGFuZCByZWZyZXNoCisJd2hlbiB3ZSBkaXNjb3ZlciBhIGRldmljZS4gIEZyZWUgcG9pbnRlciBiZWZvcmUgcmV0dXJuaW5nLgorCUNoYW5nZSBzY3NpX2RldmljZXMgaW50byBhIGxpbmtlZCBsaXN0LgorCisJKiBzY3NpLmMgKHNjYW5fc2NzaXMpOiBDaGFuZ2UgdG8gb25seSBzY2FuIG9uZSBob3N0LgorCShzY3NpX2Rldl9pbml0KTogTG9vcCBvdmVyIGFsbCBkZXRlY3RlZCBob3N0cywgYW5kIHNjYW4gdGhlbS4KKworCSogaG9zdHMuYyAgKHNjc2lfaW5pdF9mcmVlKTogQ2hhbmdlIHNvIHRoYXQgIG51bWJlciBvZiBleHRyYSBieXRlcworCWlzIHN0b3JlZCBpbiBzdHJ1Y3QsIGFuZCB3ZSBkbyBub3QgaGF2ZSB0byBwYXNzIGl0IGVhY2ggdGltZS4KKworCSogaG9zdHMuaDogQ2hhbmdlIFNjc2lfSG9zdF9UZW1wbGF0ZSBzdHJ1Y3QgdG8gaW5jbHVkZSAibmV4dCIgYW5kCisJInJlbGVhc2UiIGZ1bmN0aW9ucy4gIEluaXRpYWxpemUgdG8gTlVMTCBpbiBhbGwgbG93IGxldmVsCisJYWRhcHRlcnMuCisKKwkqIGhvc3RzLmM6IFJlbmFtZSBzY3NpX2hvc3RzIHRvIGJ1aWx0aW5fc2NzaV9ob3N0cywgY3JlYXRlIGxpbmtlZAorCWxpc3Qgc2NzaV9ob3N0cywgbGlua2VkIHRvZ2V0aGVyIHdpdGggdGhlIG5ldyAibmV4dCIgZmllbGQuCisKK1dlZCBKdWwgIDYgMDU6NDU6MDIgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMjUgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogQ2hhbmdlcyBmcm9tIEp1ZXJnZW4gLSBjbGVhbnVwcyBhbmQgdXBkYXRlcy4KKworCSogc2QuYywgc3IuYzogVXNlIG5ldyBjaGVja19tZWRpYV9jaGFuZ2UgYW5kIHJldmFsaWRhdGUKKwlmaWxlX29wZXJhdGlvbnMgZmllbGRzLgorCisJKiBzdC5jLCBzdC5oOiBBZGQgY2hhbmdlcyBmcm9tIEthaSBNYWtpc2FyYSwgZGF0ZWQgSnVuIDIyLgorCisJKiBob3N0cy5oOiBDaGFuZ2UgU0dfQUxMIGJhY2sgdG8gMHhmZi4gIEFwcGFyZW50bHkgc29mdCBlcnJvcgorCWluIC9kZXYvYnJhaW4gcmVzdWx0ZWQgaW4gaGF2aW5nIHRoaXMgYnVtcGVkIHVwLgorCUNoYW5nZSBmaXJzdCBwYXJhbWV0ZXIgaW4gYmlvc19wYXJhbSBmdW5jdGlvbiB0byBiZSBEaXNrICogaW5zdGVhZAorCW9mIGluZGV4IGludG8gcnNjc2lfZGlza3MuCisKKwkqIHNkX2lvY3RsLmM6IFBhc3MgcG9pbnRlciB0byByc2NzaV9kaXNrcyBlbGVtZW50IGluc3RlYWQgb2YgaW5kZXgKKwl0byBhcnJheS4KKworCSogc2QuaDogQWRkIHN0cnVjdCBuYW1lICJzY3NpX2Rpc2siIHRvIHR5cGVkZWYgZm9yIFNjc2lfRGlzay4KKworCSogc2NzaS5jOiBSZW1vdmUgcmVkdW5kYW50IE1heHRvciBYVDg3NjBTIGZyb20gYmxhY2tsaXN0LgorCUluIHNjc2lfcmVzZXQsIGFkZCBwcmludGsgd2hlbiBERUJVRyBkZWZpbmVkLgorCisJKiBBbGwgbG93IGxldmVsIGRyaXZlcnM6IE1vZGlmeSBkZWZpbml0aW9ucyBvZiBiaW9zX3BhcmFtIGluCisJYXBwcm9wcmlhdGUgd2F5LgorCitUaHUgSnVuIDE2IDEwOjMxOjU5IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjIwIHJlbGVhc2VkLgorCisJKiBzY3NpX2lvY3RsLmM6IE9ubHkgcGFzcyBkb3duIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKwlyZXF1aXJlZCB0byBzY3NpX2RvX2NtZCwgbm90IHRoZSBvbmUgcm91bmRlZCB1cCB0byBhIGV2ZW4gbnVtYmVyCisJb2Ygc2VjdG9ycy4KKworCSogdWx0cmFzdG9yLmM6IENoYW5nZXMgZnJvbSBDYWxlYiBFcHN0ZWluIGZvciAyNGYgY2FyZHMuICBTdXBwb3J0CisJbGFyZ2VyIFNHIGxpc3RzLgorCisJKiB1bHRyYXN0b3IuYzogQ2hhbmdlcyBmcm9tIG1lIC0gdXNlIHNjc2lfcmVnaXN0ZXIgdG8gcmVnaXN0ZXIKKwlob3N0LiAgQWRkIHNvbWUgY29uc2lzdGVuY3kgY2hlY2tpbmcsCisKK1dlZCBKdW4gIDEgMjE6MTI6MTMgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMTkgcmVsZWFzZWQuCisKKwkqIHNjc2kuaDogQWRkIG5ldyByZXR1cm4gY29kZSBmb3IgcmVzZXQoKSBmdW5jdGlvbjoKKwlTQ1NJX1JFU0VUX1BVTlQuCisKKwkqIHNjc2kuYzogTWFrZSBTQ1NJX1JFU0VUX1BVTlQgdGhlIHNhbWUgYXMgU0NTSV9SRVNFVF9XQUtFVVAgZm9yCisJbm93LgorCisJKiBhaGExNTQyLmM6IElmIHRoZSBjb21tYW5kIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVzZXQgaXMgbm90CisJcGVuZGluZywgcmV0dXJuIFNDU0lfUkVTRVRfUFVOVC4KKworCSogYWhhMTc0MC5jLCBidXNsb2dpYy5jLCB3ZDcwMDAuYywgdWx0cmFzdG9yLmM6IFJldHVybgorCVNDU0lfUkVTRVRfUFVOVCBpbnN0ZWFkIG9mIFNDU0lfUkVTRVRfU05PT1pFLgorCitUdWUgTWF5IDMxIDE5OjM2OjAxIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogYnVzbG9naWMuYzogRG8gbm90IHByaW50IG91dCBtZXNzYWdlIGFib3V0ICJtdXN0IGJlIEFkYXB0ZWMiCisJaWYgd2UgaGF2ZSBkZXRlY3RlZCBhIGJ1c2xvZ2ljIGNhcmQuICBQcmludCBvdXQgYSB3YXJuaW5nIG1lc3NhZ2UKKwlpZiB3ZSBhcmUgY29uZmlndXJpbmcgZm9yID4xNk1iLCBzaW5jZSB0aGUgNDQ1UyBhdCBib2FyZCBsZXZlbAorCUQgb3IgZWFybGllciBkb2VzIG5vdCB3b3JrIHJpZ2h0LiAgVGhlICJEIiBsZXZlbCBib2FyZCBjYW4gYmUgbWFkZQorCXRvIHdvcmsgYnkgZmxpcHBpbmcgYW4gdW5kb2N1bWVudGVkIHN3aXRjaCwgYnV0IHRoaXMgaXMgdG9vIHN1YnRsZS4KKworICAgIENoYW5nZXMgYmFzZWQgdXBvbiBwYXRjaGVzIGluIFlnZ2RyYXNpbCBkaXN0cmlidXRpb24uCisKKwkqIHNnLmMsIHNnLmg6IFJldHVybiBzZW5zZSBkYXRhIHRvIHVzZXIuCisKKwkqIGFoYTE1NDIuYywgYWhhMTc0MC5jLCBidXNsb2dpYy5jOiBEbyBub3QgcGFuaWMgaWYKKwlzZW5zZSBidWZmZXIgaXMgd3Jvbmcgc2l6ZS4KKworCSogaG9zdHMuYzogVGVzdCBmb3IgdWx0cmFzdG9yIGNhcmQgYmVmb3JlIGFueSBvZiB0aGUgb3RoZXJzLgorCisJKiBzY3NpLmM6IEFsbG93IGJvb3QtdGltZSBvcHRpb24gZm9yIG1heF9zY3NpX2x1bnM9PyBzbyB0aGF0CisJYnVnZ3kgZmlybXdhcmUgaGFzIGFuIGVhc3kgd29yay1hcm91bmQuCisKK1N1biBNYXkgMTUgMjA6MjQ6MzQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMTUgcmVsZWFzZWQuCisKKwlQb3N0LWNvZGVmcmVlemUgdGhhdy4uLgorCisJKiBidXNsb2dpYy5bYyxoXTogTmV3IGRyaXZlciBmcm9tIERhdmlkIEdlbnR6ZWwuCisKKwkqIGhvc3RzLmg6IEFkZCB1c2VfY2x1c3RlcmluZyBmaWVsZCB0byBleHBsaWNpdGx5IHNheSB3aGV0aGVyCisJY2x1c3RlcmluZyBzaG91bGQgYmUgdXNlZCBmb3IgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGlzIGhvc3QKKwlhZGFwdGVyLiAgVGhlIGJ1c2xvZ2ljIGJvYXJkIGFwcGFyZW50bHkgc3VwcG9ydHMgbGFyZ2UgU0cgbGlzdHMsCisJYnV0IGl0IGlzIGFwcGFyZW50bHkgZmFzdGVyIGlmIHNkLmMgY29uZGVuc2VzIHRoaXMgaW50byBhIHNtYWxsZXIKKwlsaXN0LgorCisJKiBzZC5jOiBVc2UgdGhpcyBmaWVsZCBpbnN0ZWFkIG9mIGhldXJpc3RpYy4KKworCSogQWxsIGhvc3QgYWRhcHRlciBpbmNsdWRlIGZpbGVzOiBBZGQgYXBwcm9wcmlhdGUgaW5pdGlhbGl6ZXIgZm9yCisJdXNlX2NsdXN0ZXJpbmcgZmllbGQuCisKKwkqIHNjc2kuaDogQWRkICNkZWZpbmVzIGZvciByZXR1cm4gY29kZXMgZm9yIHRoZSBhYm9ydCBhbmQgcmVzZXQKKwlmdW5jdGlvbnMuICBUaGVyZSBhcmUgbm93IGEgc3BlY2lmaWMgc2V0IG9mIHJldHVybiBjb2RlcyB0byBmdWxseQorCXNwZWNpZnkgYWxsIG9mIHRoZSBwb3NzaWJsZSB0aGluZ3MgdGhhdCB0aGUgbG93LWxldmVsIGFkYXB0ZXIKKwljb3VsZCBkby4KKworCSogc2NzaS5jOiBBY3QgYmFzZWQgdXBvbiByZXR1cm4gY29kZXMgZnJvbSBhYm9ydC9yZXNldCBmdW5jdGlvbnMuCisKKwkqIEFsbCBob3N0IGFkYXB0ZXIgYWJvcnQvcmVzZXQgZnVuY3Rpb25zOiBSZXR1cm4gbmV3IHJldHVybiBjb2RlLgorCisJKiBBZGQgY29kZSBpbiBzY3NpLmMgdG8gaGVscCBkZWJ1ZyB0aW1lb3V0cy4gIFVzZSAjZGVmaW5lCisJREVCVUdfVElNRU9VVCB0byBlbmFibGUgdGhpcy4KKworCSogc2NzaS5jOiBJZiB0aGUgaG9zdC0+aXJxIGZpZWxkIGlzIHNldCwgdXNlCisJZGlzYWJsZV9pcnEvZW5hYmxlX2lycSBiZWZvcmUgY2FsbGluZyBxdWV1ZWNvbW1hbmQgaWYgd2UKKwlhcmUgbm90IGFscmVhZHkgaW4gYW4gaW50ZXJydXB0LiAgUmVkdWNlIHJhY2VzLCBhbmQgd2UKKwljYW4gYmUgc2xvcHBpZXIgYWJvdXQgY2xpL3N0aSBpbiB0aGUgaW50ZXJydXB0IHJvdXRpbmVzIG5vdworCShyZWR1Y2UgaW50ZXJydXB0IGxhdGVuY3kpLgorCisJKiBjb25zdGFudHMuYzogRml4IHNvbWUgdGhpbmdzIHRvIGVsaW1pbmF0ZSB3YXJuaW5ncy4gIEFkZCBzb21lCisJc2Vuc2UgZGVzY3JpcHRpb25zIHRoYXQgd2VyZSBvbWl0dGVkIGJlZm9yZS4KKworCSogYWhhMTU0Mi5jOiBXYXRjaCBmb3IgU0NSRCBmcm9tIGhvc3QgYWRhcHRlciAtIGlmIHdlIHNlZSBpdCwgc2V0CisJYSBmbGFnLiAgQ3VycmVudGx5IHdlIG9ubHkgcHJpbnQgb3V0IHRoZSBudW1iZXIgb2YgcGVuZGluZworCWNvbW1hbmRzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSByZXN0YXJ0ZWQuCisKKwkqIGFoYTE1NDIuYyAoYWhhMTU0Ml9hYm9ydCk6IExvb2sgZm9yIGxvc3QgaW50ZXJydXB0cywgT0dNQiBzdGlsbAorCWZ1bGwsIGFuZCBhdHRlbXB0IHRvIHJlY292ZXIuICBPdGhlcndpc2UgZ2l2ZSB1cC4KKworCSogYWhhMTU0Mi5jIChhaGExNTQyX3Jlc2V0KTogVHJ5IEJVUyBERVZJQ0UgUkVTRVQsIGFuZCB0aGVuIHBhc3MKKwlESURfUkVTRVQgYmFjayB1cCB0byB0aGUgdXBwZXIgbGV2ZWwgY29kZSBmb3IgYWxsIGNvbW1hbmRzIHJ1bm5pbmcKKwlvbiB0aGlzIHRhcmdldCAoZXZlbiBvbiBkaWZmZXJlbnQgTFVOcykuCisKK1NhdCBNYXkgIDcgMTQ6NTQ6MDEgMTk5NAorCisJKiBMaW51eCAxLjEuMTIgcmVsZWFzZWQuCisKKwkqIHN0LmMsIHN0Lmg6IE5ldyB2ZXJzaW9uIGZyb20gS2FpLiAgU3VwcG9ydHMgYm9vdCB0aW1lCisJc3BlY2lmaWNhdGlvbiBvZiBudW1iZXIgb2YgYnVmZmVycy4KKworCSogd2Q3MDAwLltjLGhdOiBVcGRhdGVkIGRyaXZlciBmcm9tIEpvaG4gQm95ZC4gIE5vdyBzdXBwb3J0cworCW1vcmUgdGhhbiBvbmUgd2Q3MDAwIGJvYXJkIGluIG1hY2hpbmUgYXQgb25lIHRpbWUsIGFtb25nIG90aGVyIHRoaW5ncy4KKworV2VkIEFwciAyMCAyMjoyMDozNSAxOTk0CisKKwkqIExpbnV4IDEuMS44IHJlbGVhc2VkLgorCisJKiBzZC5jOiBBZGQgYSBmZXcgdHlwZSBjYXN0cyB3aGVyZSBzY3NpX21hbGxvYyBpcyBjYWxsZWQuCisKK1dlZCBBcHIgMTMgMTI6NTM6MjkgMTk5NAorCisJKiBMaW51eCAxLjEuNCByZWxlYXNlZC4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBhIGZldyBwcmludGtzICh1c2UgJXAgdG8gcHJpbnQgcG9pbnRlcnMpLgorCitXZWQgQXByIDEzIDExOjMzOjAyIDE5OTQKKworCSogTGludXggMS4xLjMgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNiAoSGFuZGxlIGRpZmZlcmVudCBGSUZPIHNpemVzCisJYmV0dGVyKS4KKworRnJpIEFwciAgOCAwODo1NzoxOSAxOTk0CisKKwkqIExpbnV4IDEuMS4yIHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBTQ1NJIHBvcnRpb24gb2YgY2x1c3RlciBkaWZmcyBhZGRlZC4KKworVHVlIEFwciAgNSAwNzo0MTo1MCAxOTk0CisKKwkqIExpbnV4IDEuMSBkZXZlbG9wbWVudCB0cmVlIGluaXRpYXRlZC4KKworCSogVGhlIGxpbnV4IDEuMCBkZXZlbG9wbWVudCB0cmVlIGlzIG5vdyBlZmZlY3RpdmVseSBmcm96ZW4gZXhjZXB0CisJZm9yIG9idmlvdXMgYnVnZml4ZXMuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitTdW4gQXByIDE3IDAwOjE3OjM5IDE5OTQKKworCSogTGludXggMS4wLCBwYXRjaGxldmVsIDkgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNiAoSGFuZGxlIGRpZmZlcmVudCBGSUZPIHNpemVzCisJYmV0dGVyKS4KKworVGh1IEFwciAgNyAwODozNjoyMCAxOTk0CisKKwkqIExpbnV4IDEuMCwgcGF0Y2hsZXZlbDggcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNSBmcm9tIDUuOS4gIEhhbmRsZXMgMy40IGJpb3MuCisKK1N1biBBcHIgIDMgMTQ6NDM6MDMgMTk5NAorCisJKiBMaW51eCAxLjAsIHBhdGNobGV2ZWw2IHJlbGVhc2VkLgorCisJKiB3ZDcwMDAuYzogTWFrZSBzdGFiIGF0IGZpeGluZyByYWNlIGNvbmRpdGlvbi4KKworU2F0IE1hciAyNiAxNDoxNDo1MCAxOTk0CisKKwkqIExpbnV4IDEuMCwgcGF0Y2hsZXZlbDUgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYywgTWFrZWZpbGU6IEZpeCBhIGZldyBidWdzICh0b28gbXVjaCBkYXRhIG1lc3NhZ2UpLgorCUFkZCBhIGZldyBtb3JlIGJpb3Mgc2lnbmF0dXJlcy4gKFBhdGNoZXMgZnJvbSBKdWVyZ2VuKS4KKworCSogYWhhMTU0Mi5jOiBGaXggcmFjZSBjb25kaXRpb24gaW4gYWhhMTU0Ml9vdXQuCisKK01vbiBNYXIgMjEgMTY6MzY6MjAgMTk5NAorCisJKiBMaW51eCAxLjAsIHBhdGNobGV2ZWwzIHJlbGVhc2VkLgorCisJKiBzZC5jLCBzdC5jLCBzci5jLCBzZy5jOiBSZXR1cm4gLUVOWElPLCBub3QgLUVOT0RFViBpZiB3ZSBhdHRlbXB0CisJdG8gb3BlbiBhIG5vbi1leGlzdGVudCBkZXZpY2UuCisKKwkqIHNjc2kuYzogQWRkIENoaW5vbiBjZHJvbSB0byBibGFja2xpc3QuCisKKwkqIHNyX2lvY3RsLmM6IENoZWNrIHJldHVybiBzdGF0dXMgb2YgdmVyaWZ5X2FyZWEuCisKK1NhdCBNYXIgIDYgMTY6MDY6MTkgMTk5NAorCisJKiBMaW51eCAxLjAgcmVsZWFzZWQgKHRlY2huaWNhbGx5IGEgcHJlLXJlbGVhc2UpLgorCisJKiBzY3NpLmM6IEFkZCBJTVMgQ0RENTIxLCBNYXh0b3IgWFQtODc2MFMgdG8gYmxhY2tsaXN0LgorCitUdWUgRmViIDE1IDEwOjU4OjIwIDE5OTQKKworICAgICAgICAqIHBsMTVlIHJlbGVhc2VkLgorCisgICAgICAgICogYWhhMTU0Mi5jOiBGb3IgMTU0MkMsIGFsbG93IGR5bmFtaWMgZGV2aWNlIHNjYW4gd2l0aCA+MUdiIHR1cm5lZAorCW9mZi4KKworCSogY29uc3RhbnRzLmM6IEZpeCB0eXBvIGluIGRlZmluaXRpb24gb2YgQ09OU1RBTlRTLgorCisgICAgICAgICogcGwxNWQgcmVsZWFzZWQuCisKK0ZyaSBGZWIgMTEgMTA6MTA6MTYgMTk5NAorCisgICAgICAgICogcGwxNWMgcmVsZWFzZWQuCisKKwkqIHNjc2kuYzogQWRkIE1heHRvciBYVC0zMjgwIGFuZCBSb2RpbWUgUk8zMDAwUyB0byBibGFja2xpc3QuCisKKwkqIHNjc2kuYzogQWxsb3cgdGFnZ2VkIHF1ZXVlaW5nIGZvciBzY3NpIDMgZGV2aWNlcyBhcyB3ZWxsLgorCVNvbWUgcmVhbGx5IG9sZCBkZXZpY2VzIHJlcG9ydCBhIHZlcnNpb24gbnVtYmVyIG9mIDAuICBEaXNhbGxvdworCUxVTiAhPSAwIGZvciB0aGVzZS4KKworVGh1IEZlYiAxMCAwOTo0ODo1NyAxOTk0CisKKyAgICAgICAgKiBwbDE1YiByZWxlYXNlZC4KKworU3VuIEZlYiAgNiAxMjoxOTo0NiAxOTk0CisKKyAgICAgICAgKiBwbDE1YSByZWxlYXNlZC4KKworRnJpIEZlYiAgNCAwOTowMjoxNyAxOTk0CisKKyAgICAgICAgKiBzY3NpLmM6IEFkZCBUZWFjIGNkcm9tIHRvIGJsYWNrbGlzdC4KKworVGh1IEZlYiAgMyAxNDoxNjo0MyAxOTk0CisKKwkqIHBsMTUgcmVsZWFzZWQuCisKK1R1ZSBGZWIgIDEgMTU6NDc6NDMgMTk5NAorCisJKiBwbDE0dyByZWxlYXNlZC4KKworCSogd2Q3MDAwLmMgKHdkX2Jhc2VzKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK01vbiBKYW4gMjQgMTc6Mzc6MjMgMTk5NAorCisJKiBwbDE0dSByZWxlYXNlZC4KKworCSogYWhhMTU0Mi5jOiBTdXBwb3J0IDE1NDJDRi9leHRlbmRlZCBiaW9zLiAgRGlmZmVyZW50IGZyb20gMTU0MkMKKworCSogd2Q3MDAwLmM6IEFsbG93IGJpb3MgYXQgMHhkODAwMCBhcyB3ZWxsLgorCisJKiB1bHRyYXN0b3IuYzogRG8gbm90IHRydW5jYXRlIGN5bGluZGVycyB0byAxMDI0LgorCisJKiBmZG9tYWluLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDUuOSAoYWRkIG5ldyBiaW9zIHNpZ25hdHVyZSkuCisKKwkqIE5DUjUzODAuYzogVXBkYXRlIGZyb20gRHJldyAtIHNob3VsZCB3b3JrIGEgbG90IGJldHRlciBub3cuCisKK1NhdCBKYW4gIDggMTU6MTM6MTAgMTk5NAorCisJKiBwbDE0byByZWxlYXNlZC4KKworCSogc3JfaW9jdGwuYzogWmVybyByZXNlcnZlZCBmaWVsZCBiZWZvcmUgdHJ5aW5nIHRvIHNldCBhdWRpbyB2b2x1bWUuCisKK1dlZCBKYW4gIDUgMTM6MjE6MTAgMTk5NAorCisJKiBwbDE0bSByZWxlYXNlZC4KKworCSogZmRvbWFpbi5jOiBVcGRhdGUgdG8gdmVyc2lvbiA1LjguICBObyBmdW5jdGlvbmFsIGRpZmZlcmVuY2U/Pz8KKworVHVlIEphbiAgNCAxNDoyNjoxMyAxOTk0CisKKwkqIHBsMTRsIHJlbGVhc2VkLgorCisJKiB1bHRyYXN0b3IuYzogUmVtb3ZlIG91dGwsIGlubCBmdW5jdGlvbnMgKG5vdyBwcm92aWRlZCBlbHNld2hlcmUpLgorCitNb24gSmFuICAzIDEyOjI3OjI1IDE5OTQKKworCSogcGwxNGsgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogUmVtb3ZlIGluc3cgYW5kIG91dHN3IGZ1bmN0aW9ucy4KKworCSogZmRvbWFpbi5jOiBEaXR0by4KKworV2VkIERlYyAyOSAwOTo0NzoyMCAxOTkzCisKKwkqIHBsMTRpIHJlbGVhc2VkLgorCisJKiBzY3NpLmM6IFN1cHBvcnQgUkVDT1ZFUkVEX0VSUk9SIGZvciB0YXBlIGRyaXZlcy4KKworCSogc3QuYzogVXBkYXRlIG9mIHRhcGUgZHJpdmVyIGZyb20gS2FpLgorCitUdWUgRGVjIDIxIDA5OjE4OjMwIDE5OTMKKworCSogcGwxNGcgcmVsZWFzZWQuCisKKwkqIGFoYTE1NDIuW2MsaF06IFN1cHBvcnQgZXh0ZW5kZWQgQklPUyBzdHVmZi4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBtZXNzYWdlcyBhYm91dCBkaXNrcywgc28gdGhleSBhcmUgZGlzcGxheWVkIGFzCisJc2RhLCBzZGIsIGV0YyBpbnN0ZWFkIG9mIHNkMCwgc2QxLCBldGMuCisKKwkqIHNyLmM6ICBGb3JjZSByZXJlYWQgb2YgY2FwYWNpdHkgaWYgZGlzayB3YXMgY2hhbmdlZC4KKwlDbGVhciBidWZmZXIgYmVmb3JlIGFza2luZyBmb3IgY2FwYWNpdHkvc2VjdG9yc2l6ZSAoc29tZSBkcml2ZXMKKwlkbyBub3QgcmVwb3J0IHRoaXMgcHJvcGVybHkpLiAgU2V0IG5lZWRzX3NlY3Rvcl9zaXplIGZsYWcgaWYKKwlkcml2ZSBkaWQgbm90IHJldHVybiBzZW5zaWJsZSBzZWN0b3Igc2l6ZS4KKworTW9uIERlYyAxMyAxMjoxMzo0NyAxOTkzCisKKwkqIGFoYTE1MnguYzogVXBkYXRlIHRvIHZlcnNpb24gLjEwMSBmcm9tIEp1ZXJnZW4uCisKK01vbiBOb3YgMjkgMDM6MDM6MDAgMTk5MworCisgICAgICAgICogbGludXggMC45OS4xNCByZWxlYXNlZC4KKworCSogQWxsIHNjc2kgc3R1ZmYgbW92ZWQgZnJvbSBrZXJuZWwvYmxrX2Rydi9zY3NpIHRvIGRyaXZlcnMvc2NzaS4KKworCSogVGhyb3VnaG91dDogR3JhbW1hdGljYWwgY29ycmVjdGlvbnMgdG8gdmFyaW91cyBjb21tZW50cy4KKworCSogTWFrZWZpbGU6IGZpeCBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIGNvbXBpbGUgdGhpbmdzIHdlIGFyZQorCW5vdCBnb2luZyB0byB1c2UuCisKKwkqIE5DUjUzODAuYywgTkNSNTM4MC5oLCBnX05DUjUzODAuYywgZ19OQ1I1MzgwLmgsIHBhczE2LmMsCisJcGFzMTYuaCwgdDEyOC5jLCB0MTI4Lmg6ICBOZXcgZmlsZXMgZnJvbSBEcmV3LgorCisJKiBhaGExNTJ4LmMsIGFoYTE1MnguaDogTmV3IGZpbGVzIGZyb20gSnVlcmdlbiBGaXNjaGVyLgorCisJKiBhaGExNTQyLmM6IFN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgMTU0MiBpbiB0aGUgbWFjaGluZQorCWF0IHRoZSBzYW1lIHRpbWUuICBNYWtlIGZ1bmN0aW9ucyBzdGF0aWMgdGhhdCBkbyBub3QgbmVlZAorCXZpc2liaWxpdHkuCisKKwkqIGFoYTE3NDAuYzogU2V0IE5FRURTX0pVTVBTVEFSVCBmbGFnIGluIHJlc2V0IGZ1bmN0aW9uLCBzbyB3ZQorCWtub3cgdG8gcmVzdGFydCB0aGUgY29tbWFuZC4gIENoYW5nZSBwcm90b3R5cGUgb2YgYWhhMTc0MF9yZXNldAorCXRvIHRha2UgYSBjb21tYW5kIHBvaW50ZXIuCisKKwkqIGNvbnN0YW50cy5jOiBDbGVhbiB1cCBhIGZldyB0aGluZ3MuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS42LiAgTW92ZSBzbmFyZl9yZWdpb24uICBBbGxvdworCWJvYXJkIHRvIGJlIHNldCBhdCBkaWZmZXJlbnQgU0NTSSBpZHMuICBSZW1vdmUgc3VwcG9ydCBmb3IKKwlyZXNlbGVjdGlvbiAoZGlkIG5vdCB3b3JrIHdlbGwpLiAgU2V0IEpVTVBTVEFSVCBmbGFnIGluIHJlc2V0CisJY29kZS4KKworCSogaG9zdHMuYzogU3VwcG9ydCBuZXcgbG93LWxldmVsIGFkYXB0ZXJzLiAgQWxsb3cgZm9yIG1vcmUgdGhhbgorCW9uZSBhZGFwdGVyIG9mIGEgZ2l2ZW4gdHlwZS4KKworCSogaG9zdHMuaDogQWxsb3cgZm9yIG1vcmUgdGhhbiBvbmUgYWRhcHRlciBvZiBhIGdpdmVuIHR5cGUuCisKKwkqIHNjc2kuYzogIEFkZCBzY3NpX2RldmljZV90eXBlcyBhcnJheSwgaWYgTkVFRFNfSlVNUFNUQVJUIGlzIHNldAorCWFmdGVyIGEgbG93LWxldmVsIHJlc2V0LCBzdGFydCB0aGUgY29tbWFuZCBhZ2Fpbi4gIFNvcnQgYmxhY2tsaXN0LAorCWFuZCBhZGQgTWF4dG9yIE1YVC0xMjQwUywgWFQtNDE3MFMsIE5FQyBDRFJPTSA4NCwgU2VhZ2F0ZSBTVDE1N04uCisKKwkqIHNjc2kuaDogQWRkIGNvbnN0YW50cyBmb3IgdGFnZ2VkIHF1ZXVlaW5nLgorCisJKiBUaHJvdWdob3V0OiBVc2UgY29uc3RhbnRzIGZyb20gbWFqb3IuaCBpbnN0ZWFkIG9mIGhhcmRjb2RlZAorCW51bWJlcnMgZm9yIG1ham9yIG51bWJlcnMuCisKKwkqIHNjc2lfaW9jdGwuYzogRml4IGJ1ZyBpbiBidWZmZXIgbGVuZ3RoIGluIGlvY3RsX2NvbW1hbmQuICBVc2UKKwl2ZXJpZnlfYXJlYSBpbiBHRVRfSURMVU4gaW9jdGwuICBBZGQgbmV3IGlvY3RscyBmb3IKKwlUQUdHRURfUVVFVUVfRU5BQkxFLCBESVNBQkxFLiAgT25seSBhbGxvdyBJT0NUTF9TRU5EX0NPTU1BTkQgYnkKKwlzdXBlcnVzZXIuCisKKwkqIHNkLmM6IE9ubHkgcGF5IGF0dGVudGlvbiB0byBVTklUX0FUVEVOVElPTiBmb3IgcmVtb3ZhYmxlIGRpc2tzLgorCUZpeCBidWcgd2hlcmUgc29tZXRpbWVzIHBvcnRpb25zIG9mIGJsb2NrcyB3b3VsZCBnZXQgbG9zdAorCXJlc3VsdGluZyBpbiBwcm9jZXNzZXMgaGFuZ2luZy4gIEFkZCBtZXNzYWdlcyB3aGVuIHdlIHNwaW4gdXAgYQorCWRpc2ssIGFuZCBmaXggYSBidWcgaW4gdGhlIHRpbWluZy4gIEluY3JlYXNlIHJlYWQtYWhlYWQgZm9yIGRpc2tzCisJdGhhdCBhcmUgb24gYSBzY2F0dGVyLWdhdGhlciBjYXBhYmxlIGhvc3QgYWRhcHRlci4KKworCSogc2VhZ2F0ZS5jOiBGaXggc28gdGhhdCBzb21lIHBhcmFtZXRlcnMgY2FuIGJlIHNldCBmcm9tIHRoZSBsaWxvCisJcHJvbXB0LiAgU3VwcGx5IGp1bXBzdGFydCBmbGFnIGlmIHdlIGFyZSByZXNldHRpbmcgYW5kIG5lZWQgdGhlCisJY29tbWFuZCByZXN0YXJ0ZWQuICAgRml4IHNvIHRoYXQgd2UgcmV0dXJuIDEgaWYgd2UgZGV0ZWN0IGEgY2FyZAorCXNvIHRoYXQgbXVsdGlwbGUgY2FyZCBkZXRlY3Rpb24gd29ya3MgY29ycmVjdGx5LiAgQWRkIHlldCBhbm90aGVyCisJc2lnbmF0dXJlIGZvciBGRCBjYXJkcyAoOTUwKS4gIEFkZCBhbm90aGVyIHNpZ25hdHVyZSBmb3IgU1QweC4KKworCSogc2cuYywgc2cuaDogTmV3IGZpbGVzIGZyb20gTGF3cmVuY2UgRm9hcmQgZm9yIGdlbmVyaWMgc2NzaQorCWFjY2Vzcy4KKworCSogc3IuYzogIEFkZCB0eXBlIGNhc3RzIGZvciAodm9pZCopIHNvIHRoYXQgd2UgY2FuIGRvIHBvaW50ZXIKKwlhcml0aG1ldGljLiAgV29ya3Mgd2l0aCBHQ0Mgd2l0aG91dCB0aGlzLCBidXQgaXQgaXMgbm90IHN0cmljdGx5CisJY29ycmVjdC4gIFNhbWUgYnVnZml4IGFzIHdhcyBpbiBzZC5jLiAgSW5jcmVhc2UgcmVhZC1haGVhZCBhIGxhCisJZGlzayBkcml2ZXIuCisKKwkqIHNyX2lvY3RsLmM6IFVzZSBzY3NpX21hbGxvYyBidWZmZXIgaW5zdGVhZCBvZiBidWZmZXIgZnJvbSBzdGFjaworCXNpbmNlIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgc3RhY2sgaXMgPCAxNk1iLgorCisJdWx0cmFzdG9yLmM6IFVwZGF0ZSB0byBzdXBwb3J0IDI0ZiBwcm9wZXJseSAoSkZDJ3MgZHJpdmVyKS4KKworCXdkNzAwMC5jOiBTdXBwbHkganVtcHN0YXJ0IGZsYWcgZm9yIHJlc2V0LiAgRG8gbm90IHJvdW5kIHVwCisJbnVtYmVyIG9mIGN5bGluZGVycyBpbiBiaW9zcGFyYW0gZnVuY3Rpb24uCisKK1NhdCBTZXAgIDQgMjA6NDk6NTYgMTk5MworCisgICAgKiAwLjk5cGwxMyByZWxlYXNlZC4KKworICAgICogVGhyb3VnaG91dDogIFVzZSBjaGVja19yZWdpb24vc25hcmZfcmVnaW9uIGZvciBhbGwgbG93LWxldmVsCisgICAgZHJpdmVycy4KKworICAgICogYWhhMTU0Mi5jOiBEbyBoYXJkIHJlc2V0IGluc3RlYWQgb2Ygc29mdCAoc29tZSBldGhlcmNhcmQgcHJvYmVzCisgICAgc2NyZXcgdXMgdXApLgorCisgICAgKiBzY3NpLmM6IEFkZCBuZXcgZmxhZyBBU0tFRF9GT1JfU0VOU0Ugc28gdGhhdCB3ZSBjYW4gdGVsbCBpZiB3ZSBhcmUKKyAgICBpbiBhIGxvb3Agd2hlcmVieSB0aGUgZGV2aWNlIHJldHVybnMgbnVsbCBzZW5zZSBkYXRhLgorCisgICAgKiBzZC5jOiBBZGQgY29kZSB0byBzcGluIHVwIGEgZHJpdmUgaWYgaXQgaXMgbm90IGFscmVhZHkgc3Bpbm5pbmcuCisgICAgRG8gdGhpcyBvbmUgYXQgYSB0aW1lIHRvIG1ha2UgaXQgZWFzaWVyIG9uIHBvd2VyIHN1cHBsaWVzLgorCisgICAgKiBzZF9pb2N0bC5jOiBVc2Ugc3luY19kZXYgaW5zdGVhZCBvZiBmc3luY19kZXYgaW4gQkxLRkxTQlVGIGlvY3RsLgorCisgICAgKiBzZWFnYXRlLmM6IFN3aXRjaCBhcm91bmQgREFUQS9DT05UUk9MIGxpbmVzLgorCisgICAgKiBzdC5jOiBDaGFuZ2Ugc2Vuc2UgdG8gdW5zaWduZWQuCisKK1RodSBBdWcgIDUgMTE6NTk6MTggMTk5MworCisgICAgKiAwLjk5cGwxMiByZWxlYXNlZC4KKworICAgICogY29uc3RhbnRzLmMsIGNvbnN0YW50cy5oOiBOZXcgZmlsZXMgd2l0aCBhc2NpaSBkZXNjcmlwdGlvbnMgb2YKKyAgICB2YXJpb3VzIGNvbmRpdGlvbnMuCisKKyAgICAqIE1ha2VmaWxlOiBEbyBub3QgdHJ5IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgbG93LWxldmVsIGRyaXZlcnMsCisgICAganVzdCBnZW5lcmF0ZSB0aGUgbGlzdCBvZiAubyBmaWxlcy4KKworICAgICogYWhhMTU0Mi5jOiBSZXBsYWNlIDE2IHdpdGggc2l6ZW9mKFNDcG50LT5zZW5zZV9idWZmZXIpLiAgQWRkIHRlc3RzCisgICAgZm9yIGFkZHJlc3NlcyA+IDE2TWIsIHBhbmljIGlmIHdlIGZpbmQgb25lLgorCisgICAgKiBhaGExNzQwLmM6IERpdHRvIHdpdGggc2l6ZW9mKCkuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy4xOC4gIEFkZCBuZXcgc2lnbmF0dXJlLCByZWdpc3RlciBJUlEKKyAgICB3aXRoIGlycWFjdGlvbi4gIFVzZSBJRCA3IGZvciBuZXcgYm9hcmQuICBCZSBtb3JlIGludGVsbGlnZW50IGFib3V0CisgICAgb2J0YWluaW5nIHRoZSBoL3MvYyBudW1iZXJzIGZvciBiaW9zcGFyYW0uCisKKyAgICAqIGhvc3RzLmM6IERvIG5vdCBkZXBlbmQgdXBvbiBNYWtlZmlsZSBnZW5lcmF0ZWQgY291bnQgb2YgdGhlIG51bWJlcgorICAgIG9mIGxvdy1sZXZlbCBob3N0IGFkYXB0ZXJzLgorCisgICAgKiBzY3NpLmM6IFVzZSBhcnJheSBmb3Igc2NzaV9jb21tYW5kX3NpemUgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uLiAgQWRkCisgICAgVGV4ZWwgY2Ryb20gYW5kIE1heHRvciBYVC00MzgwUyB0byBibGFja2xpc3QuICBBbGxvdyBjb21waWxlIHRpbWUKKyAgICBvcHRpb24gZm9yIG5vLW11bHRpIGx1biBzY2FuLiAgQWRkIHNlbWFwaG9yZSBmb3IgcG9zc2libGUgcHJvYmxlbXMKKyAgICB3aXRoIGhhbmRzaGFraW5nLCBhc3N1bWUgZGV2aWNlIGlzIGZhdWx0eSB1bnRpbCB3ZSBrbm93IGl0IG5vdCB0byBiZQorICAgIHRoZSBjYXNlLiAgQWRkIERFQlVHX0lOSVQgc3ltYm9sIHRvIGR1bXAgaW5mbyBhcyB3ZSBzY2FuIGZvciBkZXZpY2VzLgorICAgIFplcm8gc2Vuc2UgYnVmZmVyIHNvIHdlIGNhbiB0ZWxsIGlmIHdlIG5lZWQgdG8gcmVxdWVzdCBpdC4gIFdoZW4KKyAgICBleGFtaW5pbmcgc2Vuc2UgaW5mb3JtYXRpb24sIHJlcXVlc3Qgc2Vuc2UgaWYgYnVmZmVyIGlzIGFsbCB6ZXJvLgorICAgIElmIFJFU0VULCByZXF1ZXN0IHNlbnNlIGluZm9ybWF0aW9uIHRvIHNlZSB3aGF0IHRvIGRvIG5leHQuCisKKyAgICAqIHNjc2lfZGVidWcuYzogQ2hhbmdlIHNvbWUgY29uc3RhbnRzIHRvIHVzZSBzeW1ib2xzIGxpa2UgSU5UX01BWC4KKworICAgICogc2NzaV9pb2N0bC5jIChrZXJuZWxfc2NzaV9pb2N0bCk6IE5ldyBmdW5jdGlvbiAtZm9yIG1ha2luZyBpb2N0bAorICAgIGNhbGxzIGZyb20ga2VybmVsIHNwYWNlLgorCisgICAgKiBzZC5jOiBJbmNyZWFzZSB0aW1lb3V0IHRvIDMwMC4gIFVzZSBmdW5jdGlvbnMgaW4gY29uc3RhbnRzLmggdG8KKyAgICBkaXNwbGF5IGluZm8uICBVc2Ugc2NzaV9tYWxsb2MgYnVmZmVyIGZvciBSRUFEX0NBUEFDSVRZLCBzaW5jZQorICAgIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCBhIHN0YWNrIGJhc2VkIGJ1ZmZlciBpcyA8IDE2TWIuCisKKyAgICAqIHNkX2lvY3RsLmM6IEFkZCBCTEtGTFNCVUYgaW9jdGwuCisKKyAgICAqIHNlYWdhdGUuYzogQWRkIG5ldyBjb21waWxlIHRpbWUgb3B0aW9ucyBmb3IgQVJCSVRSQVRFLAorICAgIFNMT1dfSEFORFNIQUtFLCBhbmQgU0xPV19SQVRFLiAgVXBkYXRlIGFzc2VtYmx5IGxvb3BzIGZvciB0cmFuc2ZlcnJpbmcKKyAgICBkYXRhLiAgVXNlIGtlcm5lbF9zY3NpX2lvY3RsIHRvIHJlcXVlc3QgbW9kZSBwYWdlIHdpdGggZ2VvbWV0cnkuCisKKyAgICAqIHNyLmM6IFVzZSBmdW5jdGlvbnMgaW4gY29uc3RhbnRzLmMgdG8gZGlzcGxheSBtZXNzYWdlcy4KKworICAgICogc3QuYzogU3VwcG9ydCBmb3IgdmFyaWFibGUgYmxvY2sgc2l6ZS4KKworICAgICogdWx0cmFzdG9yLmM6IERvIG5vdCB1c2UgY2FjaGUgZm9yIHRhcGUgZHJpdmVzLiAgU2V0CisgICAgdW5jaGVja2VkX2lzYV9kbWEgZmxhZywgZXZlbiB0aG91Z2ggdGhpcyBtYXkgbm90IGJlIG5lZWRlZCAoZ2V0cyBzZXQKKyAgICBsYXRlcikuCisKK1NhdCBKdWwgMTcgMTg6MzI6NDQgMTk5MworCisgICAgKiAwLjk5cGwxMSByZWxlYXNlZC4gIEMrKyBjb21waWxhYmxlLgorCisgICAgKiBUaHJvdWdob3V0OiBBZGQgdHlwZSBjYXN0cyBhbGwgb3ZlciB0aGUgcGxhY2UsIGFuZCB1c2UgImlwIiBpbnN0ZWFkCisgICAgb2YgImluZm8iIGluIHRoZSB2YXJpb3VzIGJpb3NwYXJhbSBmdW5jdGlvbnMuCisKKyAgICAqIE1ha2VmaWxlOiBDb21waWxlIHNlYWdhdGUuYyB3aXRoIEMrKyBjb21waWxlci4KKworICAgICogYWhhMTU0Mi5jOiBBbHdheXMgc2V0IGNjYiBwb2ludGVyIGFzIHRoaXMgZ2V0cyB0cmFzaGVkIHNvbWVob3cgb24KKyAgICBzb21lIHN5c3RlbXMuICBBZGQgYSBmZXcgdHlwZSBjYXN0cy4gIFVwZGF0ZSBiaW9zcGFyYW0gZnVuY3Rpb24gYSBsaXR0bGUuCisKKyAgICAqIGFoYTE3NDAuYzogQWRkIGEgZmV3IHR5cGUgY2FzdHMuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy4xNyBmcm9tIDMuNi4gIE5vdyB3b3JrcyB3aXRoCisgICAgVE1DLTE4QzUwLgorCisgICAgKiBzY3NpLmM6IE1pbm9yIGNoYW5nZXMgaGVyZSBhbmQgdGhlcmUgd2l0aCBkYXRhdHlwZXMuICBTYXZlIHVzZV9zZworICAgIHdoZW4gcmVxdWVzdGluZyBzZW5zZSBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoaXMgY2FuIHByb3Blcmx5IGJlCisgICAgcmVzdG9yZWQgaWYgd2UgcmV0cnkgdGhlIGNvbW1hbmQuICBTZXQgYXNpZGUgZG1hIGJ1ZmZlcnMgYXNzdW1pbmcgZWFjaAorICAgIGJsb2NrIGlzIDEgcGFnZSwgbm90IDFLYiBtaW5peCBibG9jay4KKworICAgICogc2NzaV9pb2N0bC5jOiBBZGQgYSBmZXcgdHlwZSBjYXN0cy4gIE90aGVyIG1pbm9yIGNoYW5nZXMuCisKKyAgICAqIHNkLmM6ICBDb3JyZWN0bHkgIGZyZWUgYWxsIHNjc2lfbWFsbG9jJ2QgbWVtb3J5IGlmIHdlIHJ1biBvdXQgb2YKKyAgICBkbWFfcG9vbC4gU3RvcmUgYmxvY2tzaXplIGluZm9ybWF0aW9uIGZvciBlYWNoIHBhcnRpdGlvbi4KKworICAgICogc2VhZ2F0ZS5jOiBNaW5vciBjbGVhbnVwcyBoZXJlIGFuZCB0aGVyZS4KKworICAgICogc3IuYzogU2V0IHVwIGJsb2Nrc2l6ZSBhcnJheSBmb3IgYWxsIGRpc2NzLiAgRml4IGJ1ZyBpbiBmcmVlaW5nCisgICAgYnVmZmVycyBpZiB3ZSBydW4gb3V0IG9mIGRtYSBwb29sLgorCitUaHUgSnVuICAyIDE3OjU4OjExIDE5OTMKKworICAgICogMC45OXBsMTAgcmVsZWFzZWQuCisKKyAgICAqIGFoYTE1NDIuYzogU3VwcG9ydCBmb3IgQlQgNDQ1UyAoVkwtYnVzIGJvYXJkIHdpdGggbm8gZG1hIGNoYW5uZWwpLgorCisgICAgKiBmZG9tYWluLmM6IFVwZ3JhZGUgdG8gdmVyc2lvbiAzLjYuIFByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIFROQy0xOEM1MC4KKworICAgICogc2NzaS5jOiBGaXJzdCBhdHRlbXB0IHRvIGZpeCBwcm9ibGVtIHdpdGggb2xkX3VzZV9zZy4gIENoYW5nZQorICAgIE5PVF9SRUFEWSB0byBhIFNVR0dFU1RfQUJPUlQuICBGaXggdGltZW91dCByYWNlIHdoZXJlIHRpbWUgbWlnaHQKKyAgICBnZXQgZGVjcmVtZW50ZWQgcGFzdCB6ZXJvLgorCisgICAgKiBzZC5jOiBBZGQgYmxvY2tfZnN5bmMgZnVuY3Rpb24gdG8gZGlzcGF0Y2ggdGFibGUuCisKKyAgICAqIHNyLmM6IEluY3JlYXNlIHRpbWVvdXQgdG8gNTAwIGZyb20gMjUwLiAgQWRkIGVudHJ5IGZvciBzeW5jIGluCisgICAgZGlzcGF0Y2ggdGFibGUgKHN1cHBseSBOVUxMKS4gIElmIHdlIGRvIG5vdCBoYXZlIGEgc2VjdG9yc2l6ZSwKKyAgICB0cnkgdG8gZ2V0IGl0IGluIHRoZSBzZF9vcGVuIGZ1bmN0aW9uLiAgQWRkIG5ldyBmdW5jdGlvbiBqdXN0IHRvCisgICAgb2J0YWluIHNlY3RvcnNpemUuCisKKyAgICAqIHNyLmg6IEFkZCBuZWVkc19zZWN0b3Jfc2l6ZSBzZW1hcGhvcmUuCisKKyAgICAqIHN0LmM6IEFkZCBOVUxMIGZvciBmc3luYyBpbiBkaXNwYXRjaCB0YWJsZS4KKworICAgICogd2Q3MDAwLmM6IEFsbG93IGFub3RoZXIgY29uZGl0aW9uIGZvciBwb3dlciBvbiB0aGF0IGFyZSBub3JtYWwKKyAgICBhbmQgZG8gbm90IHJlcXVpcmUgYSBwYW5pYy4KKworVGh1IEFwciAyMiAyMzoxMDoxMSAxOTkzCisKKyAgICAqIDAuOTlwbDkgcmVsZWFzZWQuCisKKyAgICAqIGFoYTE1NDIuYzogVXNlICh2b2lkKSBpbnN0ZWFkIG9mICgpIGluIHNldHVwX21haWxib3hlcy4KKworICAgICogc2NzaS5jOiBJbml0aWFsaXplIHRyYW5zZmVyc2l6ZSBhbmQgdW5kZXJmbG93IGZpZWxkcyBpbiBTQ21kIHRvIDAuCisgICAgRG8gbm90IHBhbmljIGZvciB1bnN1cHBvcnRlZCBtZXNzYWdlIGJ5dGVzLgorCisgICAgKiBzY3NpLmg6IEFsbG9jYXRlIDEyIGJ5dGVzIGluc3RlYWQgb2YgMTAgZm9yIGNvbW1hbmRzLiAgQWRkCisgICAgdHJhbnNmZXJzaXplIGFuZCB1bmRlcmZsb3cgZmllbGRzLgorCisgICAgKiBzY3NpX2lvY3RsLmM6IEZ1cnRoZXIgYnVnZml4IHRvIGlvY3RsX3Byb2JlLgorCisgICAgKiBzZC5jOiBVc2UgbG9uZyBpbnN0ZWFkIG9mIGludCBmb3IgbGFzdCBwYXJhbWV0ZXIgaW4gc2RfaW9jdGwuCisgICAgSW5pdGlhbGl6ZSB0cmFuc2ZlcnNpemUgYW5kIHVuZGVyZmxvdyBmaWVsZHMuCisKKyAgICAqIHNkX2lvY3RsLmM6IERpdHRvIGZvciBzZF9pb2N0bCgsLCwsKTsKKworICAgICogc2VhZ2F0ZS5jOiBOZXcgdmVyc2lvbiBmcm9tIERyZXcuICBJbmNsdWRlcyBuZXcgc2lnbmF0dXJlcyBmb3IgRkQKKyAgICBjYXJkcy4gIFN1cHBvcnQgZm9yIDB3cyBqdW1wZXIuIENvcnJlY3RseSBpbml0aWFsaXplCisgICAgc2NzaV9ob3N0c1tob3N0bnVtXS50aGlzX2lkLiAgSW1wcm92ZWQgaGFuZGluZyBvZgorICAgIGRpc2Nvbm5lY3QvcmVjb25uZWN0LCBhbmQgc3VwcG9ydCBjb21tYW5kIGxpbmtpbmcuICBVc2UKKyAgICB0cmFuc2ZlcnNpemUgYW5kIHVuZGVyZmxvdyBmaWVsZHMuICBTdXBwb3J0IHNjYXR0ZXItZ2F0aGVyLgorCisgICAgKiBzci5jLCBzcl9pb2N0bC5jOiBVc2UgbG9uZyBpbnN0ZWFkIG9mIGludCBmb3IgbGFzdCBwYXJhbWV0ZXIgaW4gc3JfaW9jdGwuCisgICAgVXNlIGJ1ZmZlciBhbmQgYnVmbGVuZ3RoIGluIGRvX2lvY3RsLiAgUGF0Y2hlcyBmcm9tIENocmlzIE5ld2JvbGQgZm9yCisgICAgc2NzaS0yIGF1ZGlvIGNvbW1hbmRzLgorCisgICAgKiB1bHRyYXN0b3IuYzogQ29tbWVudCBvdXQgaW5fYnl0ZSAoY29tcGlsZXIgd2FybmluZykuCisKKyAgICAqIHdkNzAwMC5jOiBDaGFuZ2UgKCkgdG8gKHZvaWQpIGluIHdkNzAwMF9lbmFibGVfZG1hLgorCitXZWQgTWFyIDMxIDE2OjM2OjI1IDE5OTMKKworICAgICogMC45OXBsOCByZWxlYXNlZC4KKworICAgICogYWhhMTU0Mi5jOiBIYW5kbGUgbWFpbGJveGVzIGJldHRlciBmb3IgMTU0MkMuCisgICAgICAgIERvIG5vdCB0cnVuY2F0ZSBudW1iZXIgb2YgY3lsaW5kZXJzIGF0IDEwMjQgZm9yIGJpb3NwYXJhbSBjYWxsLgorCisgICAgKiBhaGExNzQwLmM6IEZpeCBhIGZldyBtaW5vciBidWdzIGZvciBtdWx0aXBsZSBkZXZpY2VzLgorICAgICAgICBTYW1lIGFzIGFib3ZlIGZvciBiaW9zcGFyYW0uCisKKyAgICAqIHNjc2kuYzogQWRkIGxvY2thYmxlIHNlbWFwaG9yZSBmb3IgcmVtb3ZhYmxlIGRldmljZXMgdGhhdCBjYW4gaGF2ZQorICAgIG1lZGlhIHJlbW92YWwgcHJldmVudGVkLiAgQWRkIGFub3RoZXIgc2lnbmF0dXJlIGZvciBmbG9wdGljYWxzLgorICAgIChhbGxvY2F0ZV9kZXZpY2UpOiBGaXggcmFjZSBjb25kaXRpb24uICBBbGxvdyBtb3JlIHNwYWNlIGluIGRtYSBwb29sCisgICAgZm9yIGJsb2Nrc2l6ZXMgb2YgdXAgdG8gNEtiLgorCisgICAgKiBzY3NpLmg6IERlZmluZSBDT01NQU5EX1NJWkUuICBEZWZpbmUgYSBTQ1NJIHNwZWNpZmljIHZlcnNpb24gb2YKKyAgICBJTklUX1JFUVVFU1QgdGhhdCBjYW4gcnVuIHdpdGggaW50ZXJydXB0cyBvZmYuCisKKyAgICAqIHNjc2lfaW9jdGwuYzogTWFrZSBpb2N0bF9wcm9iZSBmdW5jdGlvbiBtb3JlIGlkaW90LXByb29mLiAgSWYKKyAgICBhIHJlbW92YWJsZSBkZXZpY2Ugc2F5cyBJTExFR0FMIFJFUVVFU1QgdG8gYSBkb29yLWxvY2tpbmcgY29tbWFuZCwKKyAgICBjbGVhciBsb2NrYWJsZSBmbGFnLiAgQWRkIFNDU0lfSU9DVExfR0VUX0lETFVOIGlvY3RsLiAgRG8gbm90IGF0dGVtcHQKKyAgICB0byBsb2NrIGRvb3IgZm9yIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBsb2NrYWJsZSBzZW1hcGhvcmUgc2V0LgorCisgICAgKiBzZC5jOiBGaXggcmFjZSBjb25kaXRpb24gZm9yIG11bHRpcGxlIGRpc2tzLiAgVXNlIElOSVRfU0NTSV9SRVFVRVNUCisgICAgaW5zdGVhZCBvZiBJTklUX1JFUVVFU1QuICBBbGxvdyBzZWN0b3Igc2l6ZXMgb2YgMTAyNCBhbmQgMjU2LiAgRm9yCisgICAgcmVtb3ZhYmxlIGRpc2tzIHRoYXQgYXJlIG5vdCByZWFkeSwgbWFyayB0aGVtIGFzIGhhdmluZyBhIG1lZGlhIGNoYW5nZQorICAgIChzb21lIGRyaXZlcyBkbyBub3QgcmVwb3J0IHRoaXMgbGF0ZXIpLgorCisgICAgKiBzZWFnYXRlLmM6IFVzZSB2b2xhdGlsZSBrZXl3b3JkIGZvciBtZW1vcnktbWFwcGVkIHJlZ2lzdGVyIHBvaW50ZXJzLgorCisgICAgKiBzci5jOiBGaXggcmFjZSBjb25kaXRpb24sIGEgbGEgc2QuYy4gIEluY3JlYXNlIHRoZSBudW1iZXIgb2YgcmV0cmllcworICAgIHRvIDEuICBVc2UgSU5JVF9TQ1NJX1JFUVVFU1QuICBBbGxvdyA1MTIgYnl0ZSBzZWN0b3Igc2l6ZXMuICBEbyBhCisgICAgcmVhZF9jYXBhY2l0eSB3aGVuIHdlIGluaXQgdGhlIGRldmljZSBzbyB3ZSBrbm93IHRoZSBzaXplIGFuZAorICAgIHNlY3RvcnNpemUuCisKKyAgICAqIHN0LmM6IElmIGlvY3RsIG5vdCBmb3VuZCBpbiBzdC5jLCB0cnkgc2NzaV9pb2N0bCBmb3Igb3RoZXJzLgorCisgICAgKiB1bHRyYXN0b3IuYzogRG8gbm90IHRydW5jYXRlIG51bWJlciBvZiBjeWxpbmRlcnMgYXQgMTAyNCBmb3IKKyAgICBiaW9zcGFyYW0gY2FsbC4KKworICAgICogd2Q3MDAwLmM6IERpdHRvLgorICAgIFRocm91Z2hvdXQ6IFVzZSBDT01NQU5EX1NJWkUgbWFjcm8gdG8gZGV0ZXJtaW5lIGxlbmd0aCBvZiBzY3NpCisgICAgY29tbWFuZC4KKworCisKK1NhdCBNYXIgMTMgMTc6MzE6MjkgMTk5MworCisgICAgKiAwLjk5cGw3IHJlbGVhc2VkLgorCisgICAgVGhyb3VnaG91dDogSW1wcm92ZSBwdW5jdHVhdGlvbiBpbiBzb21lIG1lc3NhZ2VzLCBhbmQgdXNlIG5ldworICAgIHZlcmlmeV9hcmVhIHN5bnRheC4KKworICAgICogYWhhMTU0Mi5jOiBIYW5kbGUgdW5leHBlY3RlZCBpbnRlcnJ1cHRzIGJldHRlci4KKworICAgICogc2NzaS5jOiBEaXR0by4gIEhhbmRsZSByZXNldCBjb25kaXRpb25zIGEgYml0IGJldHRlciwgYXNraW5nIGZvcgorICAgIHNlbnNlIGluZm9ybWF0aW9uIGFuZCByZXRyeWluZyBpZiByZXF1aXJlZC4KKworICAgICogc2NzaV9pb2N0bC5jOiBBbGxvdyBmb3IgMTIgYnl0ZSBzY3NpIGNvbW1hbmRzLgorCisgICAgKiB1bHRyYXN0b3IuYzogVXBkYXRlIHRvIHVzZSBzY2F0dGVyLWdhdGhlci4KKworU2F0IEZlYiAyMCAxNzo1NzoxNSAxOTkzCisKKyAgICAqIDAuOTlwbDYgcmVsZWFzZWQuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy41LiAgSGFuZGxlIHNwdXJpb3VzIGludGVycnVwdHMKKyAgICBiZXR0ZXIuCisKKyAgICAqIHNkLmM6IFVzZSByZWdpc3Rlcl9ibGtkZXYgZnVuY3Rpb24uCisKKyAgICAqIHNyLmM6IERpdHRvLgorCisgICAgKiBzdC5jOiBVc2UgcmVnaXN0ZXJfY2hyZGV2IGZ1bmN0aW9uLgorCisgICAgKiB3ZDcwMDAuYzogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCisKK1NhdCBGZWIgIDYgMTE6MjA6NDMgMTk5MworCisgICAgKiAwLjk5cGw1IHJlbGVhc2VkLgorCisgICAgKiBzY3NpLmM6IEZpeCBidWcgaW4gdGVzdGluZyBmb3IgVU5JVF9BVFRFTlRJT04uCisKKyAgICAqIHdkNzAwMC5jOiBDaGVjayBhdCBtb3JlIGFkZHJlc3NlcyBmb3IgYmlvcy4gIEZpeCBidWcgaW4gYmlvc3BhcmFtCisgICAgKGhlYWRzICYgc2VjdG9ycyB0dXJuZWQgYXJvdW5kKS4KKworV2VkIEphbiAyMCAxODoxMzo1OSAxOTkzCisKKyAgICAqIDAuOTlwbDQgcmVsZWFzZWQuCisKKyAgICAqIHNjc2kuYzogSWdub3JlIGxlYWRpbmcgc3BhY2VzIHdoZW4gbG9va2luZyBmb3IgYmxhY2tsaXN0ZWQgZGV2aWNlcy4KKworICAgICogc2VhZ2F0ZS5jOiBBZGQgYSBmZXcgbmV3IHNpZ25hdHVyZXMgZm9yIEZEIGNhcmRzLiAgQW5vdGhlciBwYXRjaAorICAgIHdpdGggU0NpbnQgdG8gZml4IHJhY2UgY29uZGl0aW9uLiAgVXNlIHJlY3Vyc2lvbl9kZXB0aCB0byBrZWVwIHRyYWNrCisgICAgb2YgaG93IG1hbnkgdGltZXMgd2UgaGF2ZSBiZWVuIHJlY3Vyc2l2ZWx5IGNhbGxlZCwgYW5kIGRvIG5vdCBzdGFydAorICAgIGFub3RoZXIgY29tbWFuZCB1bmxlc3Mgd2UgYXJlIG9uIHRoZSBvdXRlciBsZXZlbC4gIEZpeGVzIGJ1ZworICAgIHdpdGggU3lxdWVzdCBjYXJ0cmlkZ2UgZHJpdmVzICh1c2VkIHRvIGNyYXNoIGtlcm5lbCksIGJlY2F1c2UKKyAgICB0aGV5IGRvIG5vdCBkaXNjb25uZWN0IHdpdGggbGFyZ2UgZGF0YSB0cmFuc2ZlcnMuCisKK1R1ZSBKYW4gMTIgMTQ6MzM6MzYgMTk5MworCisgICAgKiAwLjk5cGwzIHJlbGVhc2VkLgorCisgICAgKiBmZG9tYWluLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDMuMyAoYSBmZXcgbmV3IHNpZ25hdHVyZXMpLgorCisgICAgKiBzY3NpLmM6IEFkZCBDRFUtNTQxLCBEZW5vbiBEUkQtMjVYIHRvIGJsYWNrbGlzdC4KKyAgICAoYWxsb2NhdGVfcmVxdWVzdCwgcmVxdWVzdF9xdWV1ZWFibGUpOiBJbml0IHJlcXVlc3Qud2FpdGluZyB0byBOVUxMIGlmCisgICAgbm9uLWJ1ZmZlciB0eXBlIG9mIHJlcXVlc3QuCisKKyAgICAqIHNlYWdhdGUuYzogIEFsbG93IGNvbnRyb2xsZXIgdG8gYmUgb3ZlcnJpZGRlbiB3aXRoIENPTlRST0xMRVIgc3ltYm9sLgorICAgIFNldCBTQ2ludD1OVUxMIHdoZW4gd2UgYXJlIGRvbmUsIHRvIHJlbW92ZSByYWNlIGNvbmRpdGlvbi4KKworICAgICogc3QuYzogQ2hhbmdlcyBmcm9tIEthaS4KKworV2VkIERlYyAzMCAyMDowMzo0NyAxOTkyCisKKyAgICAqIDAuOTlwbDIgcmVsZWFzZWQuCisKKyAgICAqIHNjc2kuYzogQmxhY2tsaXN0IGJhY2sgaW4uICBSZW1vdmUgTmV3YnVyeSBkcml2ZSBhcyBvdGhlciBidWdmaXgKKyAgICBlbGltaW5hdGVzIG5lZWQgZm9yIGl0IGhlcmUuCisKKyAgICAqIHNkLmM6IFJldHVybiBFTk9ERVYgaW5zdGVhZCBvZiBFQUNDRVMgaWYgbm8gc3VjaCBkZXZpY2UgYXZhaWxhYmxlLgorICAgIChzZF9pbml0KSBJbml0IGJsa2Rldl9mb3BzIGVhcmxpZXIgc28gdGhhdCBzZF9vcGVuIGlzIGF2YWlsYWJsZSBzb29uZXIuCisKKyAgICAqIHNyLmM6IFNhbWUgYXMgYWJvdmUgZm9yIHNkLmMuCisKKyAgICAqIHN0LmM6IFJldHVybiBFTk9ERVYgaW5zdGVhZCBvZiBFTlhJTyBpZiBubyBkZXZpY2UuICBJbml0IGNocmRldl9mb3BzCisgICAgc29vbmVyLCBzbyB0aGF0IGl0IGlzIGFsd2F5cyB0aGVyZSBldmVuIGlmIG5vIHRhcGVzLgorCisgICAgKiBzZWFnYXRlLmMgKGNvbnRyb2xsZXJfdHlwZSk6IE5ldyB2YXJpYWJsZSB0byBrZWVwIHRyYWNrIG9mIFNUMHggb3IKKyAgICBGRC4gIE1vZGlmeSBzaWduYXR1cmVzIGxpc3QgdG8gaW5kaWNhdGUgY29udHJvbGxlciB0eXBlLCBhbmQgaW5pdAorICAgIGNvbnRyb2xsZXJfdHlwZSBvbmNlIHdlIGZpbmQgYSBtYXRjaC4KKworICAgICogd2Q3MDAwLmMgKHdkNzAwMF9zZXRfc3luYyk6IFJlbW92ZSByZWR1bmRhbnQgZnVuY3Rpb24uCisKK1N1biBEZWMgMjAgMTY6MjY6MjQgMTk5MgorCisgICAgKiAwLjk5cGwxIHJlbGVhc2VkLgorCisgICAgKiBzY3NpX2lvY3RsLmM6IEJ1Z2ZpeCAtIGNoZWNrIGRldi0+aW5kZXgsIG5vdCBkZXYtPmlkIGFnYWluc3QKKyAgICBOUl9TQ1NJX0RFVklDRVMuCisKKyAgICAqIHNyX2lvY3RsLmM6IFZlcmlmeSB0aGF0IGRldmljZSBleGlzdHMgYmVmb3JlIGFsbG93aW5nIGFuIGlvY3RsLgorCisgICAgKiBzdC5jOiBQYXRjaGVzIGZyb20gS2FpIC0gY2hhbmdlIHRpbWVvdXQgdmFsdWVzLCBpbXByb3ZlIGVuZCBvZiB0YXBlCisgICAgaGFuZGxpbmcuCisKK1N1biBEZWMgMTMgMTg6MTU6MjMgMTk5MgorCisgICAgKiAwLjk5IGtlcm5lbCByZWxlYXNlZC4gIEJhc2VsaW5lIGZvciB0aGlzIENoYW5nZUxvZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuaXBzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5pcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxOWY1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuaXBzCkBAIC0wLDAgKzEsMTIyIEBACitJQk0gU2VydmVSQUlEIGRyaXZlciBDaGFuZ2UgTG9nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAgICAgNS4wMC4wMSAgLSBTYXJhc290YSAoIDVpICkgYWRhcHRlcnMgbXVzdCBhbHdheXMgYmUgc2Nhbm5lZCBmaXJzdCAgCisgICAgICAgICAgICAgICAgIC0gR2V0IHJpZCBvbiBJT0NUTF9ORVdfQ09NTUFORCBjb2RlICAKKyAgICAgICAgICAgICAgICAgLSBBZGQgRXh0ZW5kZWQgRENEQiBDb21tYW5kcyBmb3IgVGFwZSBTdXBwb3J0IGluIDVJICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgICAgICA0LjkwLjExICAtIERvbid0IGFjdHVhbGx5IFJFU0VUIHVubGVzcyBpdCdzIHBoeXNpY2FsbHkgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgLSBSZW1vdmUgdW51c2VkIGNvbXBpbGUgb3B0aW9ucworICAgICAgICAKKyAgICAgICAgNC45MC4wOCAgLSBEYXRhIENvcnJ1cHRpb24gaWYgRmlyc3QgU2NhdHRlciBHYXRoZXIgRWxlbWVudCBpcyA+IDY0SworICAgICAgICAKKyAgICAgICAgNC45MC4wOCAgLSBJbmNyZWFzZSBEZWxheXMgaW4gRmxhc2hpbmcgKCBUcm9tYm9uZSBPbmx5IC0gNEggKSAgICAgICAgCisgICAgICAgIAorICAgICAgICA0LjkwLjA1ICAtIFVzZSBOZXcgUENJIEFyY2hpdGVjdHVyZSB0byBmYWNpbGl0YXRlIEhvdCBQbHVnIERldmVsb3BtZW50CisgICAgICAgIAorICAgICAgICA0LjkwLjAxICAtIEFkZCBTZXJ2ZVJBSUQgVmVyc2lvbiBDaGVja2luZworCisgICAgICAgIDQuODAuMjYgIC0gQ2xlYW4gdXAgcG90ZW50aWFsIGNvZGUgcHJvYmxlbXMgKCBBcmphbidzIHJlY29tbWVuZGF0aW9ucyApCisgICAgICAgIAorICAgICAgICA0LjgwLjIxICAtIENoYW5nZSBtZW1jcHkoKSB0byBjb3B5X3RvX3VzZXIoKSBpbiBOVlJBTSBQYWdlIDUgSU9DVEwgcGF0aCAgIAorICAgICAgICAKKyAgICAgICAgNC44MC4yMCAgLSBTZXQgbWF4X3NlY3RvcnMgaW4gU2NzaV9Ib3N0IHN0cnVjdHVyZSAoIGlmID49IDIuNC43IGtlcm5lbCApCisgICAgICAgICAgICAgICAgIC0gNSBzZWNvbmQgZGVsYXkgbmVlZGVkIGFmdGVyIHJlc2V0dGluZyBhbiBpOTYwIGFkYXB0ZXIKKyAgICAgICAgCisgICAgICAgIDQuODAuMTQgIC0gVGFrZSBhbGwgc2VtYXBob3JlcyBvZmYgc3RhY2sgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAtIENsZWFuIFVwIE5ld19JT0NUTCBwYXRoCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDQuODAuMDQgIC0gRWxpbWluYXRlIGNhbGxzIHRvIHN0cnRvaygpIGlmIDIuNC54IG9yIGdyZWF0ZXIgCisgICAgICAgICAgICAgICAgIC0gQWRqdXN0bWVudHMgdG8gRGV2aWNlIFF1ZXVlIERlcHRoICAgICAgICAgICAgICAgCisKKyAgICAgICAgNC44MC4wMCAgLSBNYWtlIGlhNjQgU2FmZSAgICAKKyAgICAgICAgCisgICAgICAgIDQuNzIuMDEgIC0gSS9PIE1hcHBlZCBNZW1vcnkgcmVsZWFzZSAoIHNvICJpbnNtb2QgaXBzIiBkb2VzIG5vdCBGYWlsICkgICAgCisgICAgICAgICAgICAgICAgIC0gRG9uJ3QgSXNzdWUgSW50ZXJuYWwgRkZEQyBDb21tYW5kIGlmIHRoZXJlIGFyZSBBY3RpdmUgQ29tbWFuZHMgCisgICAgICAgICAgICAgICAgIC0gQ2xvc2UgV2luZG93IGZvciBnZXR0aW5nIHRvbyBtYW55IElPQ1RMJ3MgYWN0aXZlIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICA0LjcyLjAwICAtIEFsbG93IGZvciBhIFNjYXR0ZXItR2F0aGVyIEVsZW1lbnQgdG8gZXhjZWVkIE1BWF9YRkVSIFNpemUgICAgIAorICAgICAgICAKKyAgICAgICAgNC43MS4wMCAgLSBDaGFuZ2UgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyB0byBub3QgdXNlIEdGUF9ETUEgZmxhZyAKKyAgICAgICAgICAgICAgICAgLSBDb2RlIENsZWFuLVVwIGZvciAyLjQueCBrZXJuZWwgICAgICAKKyAgICAgICAgCisgICAgICAgIDQuNzAuMTUgIC0gRml4IEJyZWFrdXAgZm9yIHZlcnkgbGFyZ2UgKCBub24tU0cgKSByZXF1ZXN0cworICAgICAgICAKKyAgICAgICAgNC43MC4xMyAgLSBEb24ndCByZWxlYXNlIEhBIExvY2sgaW4gaXBzX25leHQoKSB1bnRpbCBTQyB0YWtlbiBvZmYgcXVldWUgIAorICAgICAgICAgICAgICAgICAtIFVucmVnaXN0ZXIgU0NTSSBkZXZpY2UgaW4gaXBzX3JlbGVhc2UoKSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAtIERvbid0IFNlbmQgQ0RCJ3MgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQgIAorICAgICAgICAgICAgICAgICAKKyAgICAgICAgNC43MC4xMiAgLSBDb3JyZWN0aXZlIGFjdGlvbnMgZm9yIGJhZCBjb250cm9sbGVyICggZHVyaW5nIGluaXRpYWxpemF0aW9uICkKKyAgICAgICAgCisgICAgICAgIDQuNzAuMDkgIC0gVXNlIGEgQ29tbW9uICggTGFyZ2UgQnVmZmVyICkgZm9yIEZsYXNoaW5nIGZyb20gdGhlIEpDUk0gQ0QgICAgCisgICAgICAgICAgICAgICAgIC0gQWRkIElQU1NFTkQgRmxhc2ggU3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIC0gU2V0IFNlbnNlIERhdGEgZm9yIFVua25vd24gU0NTSSBDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIC0gVXNlIFNsb3QgTnVtYmVyIGZyb20gTlZSQU0gUGFnZSA1IAorICAgICAgICAgICAgICAgICAtIFJlc3RvcmUgY2FsbGVyJ3MgRENEQiBTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA0LjIwLjE0ICAtIFVwZGF0ZSBwYXRjaCBmaWxlcyBmb3Iga2VybmVsIDIuNC4wLXRlc3Q1CisKKyAgICAgICAgNC4yMC4xMyAgLSBGaXggc29tZSBmYWlsdXJlIGNhc2VzIC8gcmVzZXQgY29kZQorICAgICAgICAgICAgICAgICAtIEhvb2sgaW50byB0aGUgcmVib290X25vdGlmaWVyIHRvIGZsdXNoIHRoZSBjb250cm9sbGVyCisgICAgICAgICAgICAgICAgICAgY2FjaGUKKworICAgICAgICA0LjIwLjAzIC0gUmVuYW1lIHZlcnNpb24gdG8gY29pbmNpZGUgd2l0aCBuZXcgcmVsZWFzZSBzY2hlZHVsZXMKKyAgICAgICAgICAgICAgICAtIFBlcmZvcm1hbmNlIGZpeGVzCisgICAgICAgICAgICAgICAgLSBGaXggdHJ1bmNhdGlvbiBvZiAvcHJvYyBmaWxlcyB3aXRoIGNhdAorICAgICAgICAgICAgICAgIC0gTWVyZ2UgaW4gY2hhbmdlcyB0aHJvdWdoIGtlcm5lbCAyLjQuMHRlc3QxYWMyMQorCisgICAgICAgIDQuMTAuMTMgLSBGaXggZm9yIGR5bmFtaWMgdW5sb2FkIGFuZCBwcm9jIGZpbGUgc3lzdGVtCisKKyAgICAgICAgNC4xMC4wMCAtIEFkZCBzdXBwb3J0IGZvciBTZXJ2ZVJBSUQgNE0vNEwKKworICAgICAgICA0LjAwLjA2IC0gRml4IHRpbWVvdXQgd2l0aCBpbml0aWFsIEZGREMgY29tbWFuZAorCisgICAgICAgIDQuMDAuMDUgLSBSZW1vdmUgd2lzaF9ibG9jayBmcm9tIGluaXQgcm91dGluZQorICAgICAgICAgICAgICAgIC0gVXNlIGxpbnV4L3NwaW5sb2NrLmggaW5zdGVhZCBvZiBhc20vc3BpbmxvY2suaCBmb3Iga2VybmVscworICAgICAgICAgICAgICAgICAgMi4zLjE4IGFuZCBsYXRlcgorICAgICAgICAgICAgICAgIC0gU3luYyB3aXRoIG90aGVyIGNoYW5nZXMgZnJvbSB0aGUgMi4zIGtlcm5lbHMKKworICAgICAgICA0LjAwLjA0IC0gUmVuYW1lIHN0cnVjdHVyZXMvY29uc3RhbnRzIHRvIGJlIHByZWZpeGVkIHdpdGggSVBTXworCisgICAgICAgIDQuMDAuMDMgLSBBZGQgYWx0ZXJuYXRpdmUgcGFzc3RocnUgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgLSBBZGQgYWJpbGl0eSB0byBmbGFzaCBTZXJ2ZVJBSUQgQklPUworCisgICAgICAgIDQuMDAuMDIgLSBGaXggcHJvYmxlbSB3aXRoIFBUIERDREIgd2l0aCBubyBidWZmZXIKKworICAgICAgICA0LjAwLjAxIC0gQWRkIHN1cHBvcnQgZm9yIEZpcnN0IEZhaWx1cmUgRGF0YSBDYXB0dXJlCisKKyAgICAgICAgNC4wMC4wMCAtIEFkZCBzdXBwb3J0IGZvciBTZXJ2ZVJBSUQgNAorCisgICAgICAgIDMuNjAuMDIgLSBNYWtlIERDREIgZGlyZWN0aW9uIGJhc2VkIG9uIGxvb2t1cCB0YWJsZS4KKyAgICAgICAgICAgICAgICAtIE9ubHkgYWxsb3cgb25lIERDREIgY29tbWFuZCB0byBhIFNDU0kgSUQgYXQgYSB0aW1lLgorCisgICAgICAgIDMuNjAuMDEgLSBSZW1vdmUgYm9ndXMgZXJyb3IgY2hlY2sgaW4gcGFzc3RocnUgcm91dGluZS4KKworICAgICAgICAzLjYwLjAwIC0gQnVtcCBtYXggY29tbWFuZHMgdG8gMTI4IGZvciB1c2Ugd2l0aCBTZXJ2ZVJBSUQKKyAgICAgICAgICAgICAgICAgIGZpcm13YXJlIDMuNjAuCisgICAgICAgICAgICAgICAgLSBDaGFuZ2UgdmVyc2lvbiB0byAzLjYwIHRvIGNvaW5jaWRlIHdpdGggU2VydmVSQUlEIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgIG51bWJlcmluZy4KKworICAgICAgICAxLjAwLjAwIC0gSW5pdGlhbCBQdWJsaWMgUmVsZWFzZQorICAgICAgICAgICAgICAgIC0gRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gMC45OS4wNQorCisgICAgICAgIDAuOTkuMDUgLSBGaXggYW4gb29wcyBvbiBjZXJ0YWluIHBhc3N0aHJ1IGNvbW1hbmRzCisKKyAgICAgICAgMC45OS4wNCAtIEZpeCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgcGFzc3RocnUgbWVjaGFuaXNtCisgICAgICAgICAgICAgICAgICAtLSB0aGlzIHJlcXVpcmVkIHRoZSBpbnRlcmZhY2UgdG8gdGhlIHV0aWxpdGllcyB0byBjaGFuZ2UKKyAgICAgICAgICAgICAgICAtIEZpeCBlcnJvciByZWNvdmVyeSBjb2RlCisKKyAgICAgICAgMC45OS4wMyAtIE1ha2UgaW50ZXJydXB0IHJvdXRpbmUgaGFuZGxlIGFsbCBjb21wbGV0ZWQgcmVxdWVzdCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgIGFkYXB0ZXIgbm90IGp1c3QgdGhlIGZpcnN0IG9uZQorICAgICAgICAgICAgICAgIC0gTWFrZSBzdXJlIHBhc3N0aHJ1IGNvbW1hbmRzIGdldCB3b2tlbiB1cCBpZiB3ZSBydW4gb3V0IG9mCisgICAgICAgICAgICAgICAgICBTQ0JzCisgICAgICAgICAgICAgICAgLSBTZW5kIGFsbCBvZiB0aGUgY29tbWFuZHMgb24gdGhlIHF1ZXVlIGF0IG9uY2UgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgIG9uZSBhdCBhIHRpbWUgc2luY2UgdGhlIGNhcmQgd2lsbCBzdXBwb3J0IGl0LgorCisgICAgICAgIDAuOTkuMDIgLSBBZGRlZCBzb21lIGFkZGl0aW9uYWwgZGVidWcgc3RhdGVtZW50cyB0byBwcmludCBvdXQKKyAgICAgICAgICAgICAgICAgIGVycm9ycyBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgdHJ5aW5nIHRvIHJlYWQvd3JpdGUKKyAgICAgICAgICAgICAgICAgIHRvIGEgbG9naWNhbCBkcml2ZSAoSVBTX0RFQlVHKS4KKworICAgICAgICAgICAgICAgIC0gRml4ZWQgcmVhZC93cml0ZSBlcnJvcnMgd2hlbiB0aGUgYWRhcHRlciBpcyB1c2luZyBhbgorICAgICAgICAgICAgICAgICAgOEsgc3RyaXBlIHNpemUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzU2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC0wLDAgKzEsMzQ5IEBACitSZWxlYXNlIERhdGUJOiBUaHUgRmViIDAzIDEyOjI3OjIyIEVTVCAyMDA1IC0gU2Vva21hbm4gSnUgPHNqdUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC41IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC40IChzY3NpIG1vZHVsZSksIDIuMjAuMi40IChjbW0gbW9kdWxlKQorCisxLglNb2RpZmllZCBuYW1lIG9mIHR3byBhdHRyaWJ1dGVzIGluIHNjc2lfaG9zdF90ZW1wbGF0ZS4KKwlPbiBXZWQsIDIwMDUtMDItMDIgYXQgMTA6NTYgLTA1MDAsIEp1LCBTZW9rbWFubiB3cm90ZToKKwk+ICsJLnNkZXZfYXR0cnMJCQk9IG1lZ2FyYWlkX2RldmljZV9hdHRycywKKwk+ICsJLnNob3N0X2F0dHJzCQkJPSBtZWdhcmFpZF9jbGFzc19kZXZpY2VfYXR0cnMsCisKKwlUaGVzZSBhcmUsIHBlcmhhcHMsIHNsaWdodGx5IGNvbmZ1c2luZyBuYW1lcy4KKwlUaGUgdGVybXMgZGV2aWNlIGFuZCBjbGFzc19kZXZpY2UgaGF2ZSB3ZWxsIGRlZmluZWQgbWVhbmluZ3MgaW4gdGhlCisJZ2VuZXJpYyBkZXZpY2UgbW9kZWwsIG5laXRoZXIgb2Ygd2hpY2ggaXMgd2hhdCB5b3UgbWVhbiBoZXJlLgorCVdoeSBub3Qgc2ltcGx5IG1lZ2FyYWlkX3NkZXZfYXR0cnMgYW5kIG1lZ2FyYWlkX3Nob3N0X2F0dHJzPworCisJT3RoZXIgdGhhbiB0aGlzLCBpdCBsb29rcyBmaW5lIHRvIG1lIHRvby4KKworUmVsZWFzZSBEYXRlCTogVGh1IEphbiAyNyAwMDowMTowMyBFU1QgMjAwNSAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC40IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4zIChzY3NpIG1vZHVsZSksIDIuMjAuMi40IChjbW0gbW9kdWxlKQorCisxLglCdW1wIHVwIHRoZSB2ZXJzaW9uIG9mIHNjc2kgbW9kdWxlIGR1ZSB0byBpdHMgY29uZmxpY3QuCisKK1JlbGVhc2UgRGF0ZQk6IFRodSBKYW4gMjEgMDA6MDE6MDMgRVNUIDIwMDUgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMyAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNSAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMiAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNCAoY21tIG1vZHVsZSkKKworMS4JUmVtb3ZlIGRyaXZlciBpb2N0bCBmb3IgbG9naWNhbCBkcml2ZSB0byBzY3NpIGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kCisJcmVwbGFjZSB3aXRoIHRoZSBzeXNmcyBhdHRyaWJ1dGUuIFRvIHJlbW92ZSBkcml2ZXMgYW5kIGNoYW5nZQorCWNhcGFjaXR5LCBhcHBsaWNhdGlvbiBzaGFsbCBub3cgdXNlIHRoZSBkZXZpY2UgYXR0cmlidXRlIHRvIGdldCB0aGUKKwlsb2dpY2FsIGRyaXZlIG51bWJlciBmb3IgYSBzY3NpIGRldmljZS4gRm9yIGFkZGluZyBuZXdseSBjcmVhdGVkCisJbG9naWNhbCBkcml2ZXMsIGNsYXNzIGRldmljZSBhdHRyaWJ1dGUgd291bGQgYmUgcmVxdWlyZWQgdG8gdW5pcXVlbHkKKwlpZGVudGlmeSBlYWNoIGNvbnRyb2xsZXIuCisJCS0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorCisJIkphbWVzLCBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhpcyBhIGxpdHRsZSBtb3JlLCBhbmQgeW91IG1heSBiZSBvbgorCXRvIHNvbWV0aGluZyBoZXJlLiBMZXQgZWFjaCBkcml2ZXIgYWRkIGZpbGVzIGFzIHN1Y2g6IgorCisJCS0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgMTIuMTUuMjAwNAorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCisJIlRoZW4sIGlmIHlvdSBzaW1wbHkgcHVibGlzaCB5b3VyIExEIG51bWJlciBhcyBhbiBleHRyYSBwYXJhbWV0ZXIgb2YKKwl0aGUgZGV2aWNlLCB5b3UgY2FuIGxvb2sgdGhyb3VnaCAvc3lzIHRvIGZpbmQgaXQuIgorCisJCS0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAU3RlZWxFeWUuY29tPiwgMDEuMDMuMjAwNQorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCisJIkkgZG9uJ3Qgc2VlIHdoeSBub3QgLi4uIGl0J3MgeW91ciBkcml2ZXIsIHlvdSBjYW4gcHVibGlzaCB3aGF0ZXZlcgorCWV4dHJhIGluZm9ybWF0aW9uIHlvdSBuZWVkIGFzIHNjc2lfZGV2aWNlIGF0dHJpYnV0ZXM7IHRoYXQgd2FzIG9uZSBvZgorCXRoZSBkZXNpZ25zIG9mIHRoZSBleHRlbnNpYmxlIGF0dHJpYnV0ZSBzeXN0ZW0uIgorCisJCS0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAU3RlZWxFeWUuY29tPiwgMDEuMDYuMjAwNQorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworMi4JQWRkIEFNSSBtZWdhcmFpZCBzdXBwb3J0IC0gQnJpYW4gS2luZyA8YnJraW5nQGNoYXJ0ZXIubmV0PgorCQlQQ0lfVkVORE9SX0lEX0FNSSwgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQzLAorCQlQQ0lfVkVORE9SX0lEX0FNSSwgUENJX1NVQlNZU19JRF9QRVJDM19EQywKKworMy4JTWFrZSBzb21lIGNvZGUgc3RhdGljIC0gQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgorCURhdGU6CU1vbiwgMTUgTm92IDIwMDQgMDM6MTQ6NTcgKzAxMDAKKworCVRoZSBwYXRjaCBiZWxvdyBtYWtlcyBzb21lIG5lZWRsZXNzbHkgZ2xvYmFsIGNvZGUgc3RhdGljLgorCS13YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisJK3N0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisKKwlTaWduZWQtb2ZmLWJ5OiBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+CisKKzQuCUFkZGVkIE5FQyBST01CIHN1cHBvcnQgLSBORUMgTWVnYVJBSUQgUENJIEV4cHJlc3MgUk9NQiBjb250cm9sbGVyCisJCVBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX01FR0FSQUlEX05FQ19ST01CXzJFLAorCQlQQ0lfU1VCU1lTX0lEX05FQywgUENJX1NVQlNZU19JRF9NRUdBUkFJRF9ORUNfUk9NQl8yRSwKKworNS4JRml4ZWQgVGFwZSBkcml2ZSBpc3N1ZSA6IEZvciBhbnkgRGlyZWN0IENEQiBjb21tYW5kIHRvIHBoeXNpY2FsIGRldmljZQorCWluY2x1ZGluZyB0YXBlLCB0aW1lb3V0IHZhbHVlIHNldCBieSBkcml2ZXIgd2FzIDEwIG1pbnV0ZXMuIFdpdGggdGhpcyAKKwl2YWx1ZSwgbW9zdCBvZiBjb21tYW5kIHdpbGwgcmV0dXJuIHdpdGhpbiB0aW1lb3V0LiBIb3dldmVyLCBmb3IgdGhvc2UKKwljb21tYW5kIGxpa2UgRVJBU0Ugb3IgRk9STUFULCBpdCB0YWtlcyBtb3JlIHRoYW4gYW4gaG91ciBkZXBlbmRzIG9uCisJY2FwYWNpdHkgb2YgdGhlIGRldmljZSBhbmQgdGhlIGNvbW1hbmQgY291bGQgYmUgdGVybWluYXRlZCBiZWZvcmUgaXQgCisJY29tcGxldGVzLgorCVRvIGFkZHJlc3MgdGhpcyBpc3N1ZSwgdGhlICd0aW1lb3V0JyBmaWVsZCBpbiB0aGUgRENEQiBjb21tYW5kIHdpbGwgCisJaGF2ZSBOTyBUSU1FT1VUIChpLmUuLCA0KSB2YWx1ZSBhcyBpdHMgdGltZW91dCBvbiBEQ0RCIGNvbW1hbmQuCisKKworCitSZWxlYXNlIERhdGUJOiBUaHUgRGVjICA5IDE5OjEwOjIzIEVTVCAyMDA0CisJLSBTcmVlbml2YXMgQmFnYWxrb3RlIDxzcmVlbmliQGxzaWwuY29tPgorCitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMiAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMyAoY21tIG1vZHVsZSkKKworaS4JSW50cm9kdWNlZCBkcml2ZXIgaW9jdGwgdGhhdCByZXR1cm5zIHNjc2kgYWRkcmVzcyBmb3IgYSBnaXZlbiBsZC4KKwkKKwkiV2h5IGNhbid0IHRoZSBleGlzdGluZyBzeXNmcyBpbnRlcmZhY2VzIGJlIHVzZWQgdG8gZG8gdGhpcz8iCisJCS0gQnJpYW4gS2luZyAoYnJraW5nQHVzLmlibS5jb20pCisJCisJIkkndmUgbG9va2VkIGludG8gc29sdmluZyB0aGlzIGFub3RoZXIgd2F5LCBidXQgSSBjYW5ub3Qgc2VlIGhvdworCXRvIGdldCB0aGlzIGRyaXZlci1wcml2YXRlIG1hcHBpbmcgb2YgbG9naWNhbCBkcml2ZSBudW1iZXItPiBIQ1RMCisJd2l0aG91dCBwdXR0aW5nIGNvZGUgc29tZXRoaW5nIGxpa2UgdGhpcyBpbnRvIHRoZSBkcml2ZXIuIgorCisJIi4uLmFuZCBieSBwcm92aWRpbmcgYSBtYXBwaW5nIGEgZnVuY3Rpb24gdG8gdXNlcnNwYWNlLCB0aGUgZHJpdmVyCisJaXMgZnJlZSB0byBjaGFuZ2UgaXRzIG1hcHBpbmcgYWxnb3JpdGhtIGluIHRoZSBmdXR1cmUgaWYgbmVjZXNzYXJ5IC4uIgorCQktIE1hdHQgRG9tc2NoIChNYXR0X0RvbXNjaEBkZWxsLmNvbSkKKworUmVsZWFzZSBEYXRlCTogVGh1IERlYyAgOSAxOTowMjoxNCBFU1QgMjAwNCAtIFNyZWVuaXZhcyBCYWdhbGtvdGUgPHNyZWVuaWJAbHNpbC5jb20+CisKK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC4xIChzY3NpIG1vZHVsZSksIDIuMjAuMi4zIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4xIChzY3NpIG1vZHVsZSksIDIuMjAuMi4yIChjbW0gbW9kdWxlKQorCitpLglGaXggYSBidWcgaW4ga2lvYydzIGRtYSBidWZmZXIgZGVhbGxvY2F0aW9uCisKK1JlbGVhc2UgRGF0ZQk6IFRodSBOb3YgIDQgMTg6MjQ6NTYgRVNUIDIwMDQgLSBTcmVlbml2YXMgQmFnYWxrb3RlIDxzcmVlbmliQGxzaWwuY29tPgorCitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMiAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMSAoY21tIG1vZHVsZSkKKworaS4JSGFuZGxlIElPQ1RMIGNtZCB0aW1lb3V0cyBtb3JlIHByb3Blcmx5LgorCitpaS4JcGNpX2RtYV9zeW5jX3tzZyxzaW5nbGV9X2Zvcl9jcHUgd2FzIGludHJvZHVjZWQgaW50byBtZWdhcmFpZF9tYm94CisJaW5jb3JyZWN0bHkgKGluc3RlYWQgb2YgX2Zvcl9kZXZpY2UpLiBDaGFuZ2VkIHRvIGFwcHJvcHJpYXRlIAorCXBjaV9kbWFfc3luY197c2csc2luZ2xlfV9mb3JfZGV2aWNlLgorCitSZWxlYXNlIERhdGUJOiBXZWQgT2N0IDA2IDExOjE1OjI5IEVEVCAyMDA0IC0gU3JlZW5pdmFzIEJhZ2Fsa290ZSA8c3JlZW5pYkBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4xIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4wIChjbW0gbW9kdWxlKQorCitpLglSZW1vdmUgQ09ORklHX0NPTVBBVCBhcm91bmQgcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uCisKK1JlbGVhc2UgRGF0ZQk6IE1vbiBTZXAgMjcgMjI6MTU6MDcgRURUIDIwMDQgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjMuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMCAoY21tIG1vZHVsZSkKKworaS4JRml4IGRhdGEgY29ycnVwdGlvbi4gQmVjYXVzZSBvZiBhIHR5cG8gaW4gdGhlIGRyaXZlciwgdGhlIElPIHBhY2tldHMKKwl3ZXJlIHdyb25nbHkgc2hhcmVkIGJ5IHRoZSBpb2N0bCBwYXRoLiBUaGlzIGNhdXNlcyBhIHdob2xlIElPIGNvbW1hbmQKKwl0byBiZSByZXBsYWNlZCBieSBhbiBpbmNvbWluZyBpb2N0bCBjb21tYW5kLgorCitSZWxlYXNlIERhdGUJOiBUdWUgQXVnIDI0IDA5OjQzOjM1IEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4zLjEgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjAgKGNtbSBtb2R1bGUpCitPbGRlciBWZXJzaW9uCTogMi4yMC4zLjAgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjAgKGNtbSBtb2R1bGUpCisKK2kuCUZ1bmN0aW9uIHJlb3JkZXJpbmcgc28gdGhhdCBpbmxpbmUgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGJlZm9yZSB0aGV5CisJYXJlIGFjdHVhbGx5IHVzZWQuIEl0IGlzIG5vdyBtYW5kYXRvcnkgZm9yIEdDQyAzLjQuMSAoY3VycmVudCBzdGFibGUpCisKKwlEZWNsYXJlIHNvbWUgaGVhdnktd2VpZ2h0IGZ1bmN0aW9ucyB0byBiZSBub24taW5saW5lZCwKKwltZWdhcmFpZF9tYm94X2J1aWxkX2NtZCwgbWVnYXJhaWRfbWJveF9ydW5wZW5kcSwKKwltZWdhcmFpZF9tYm94X3ByZXBhcmVfcHRocnUsIG1lZ2FyYWlkX21ib3hfcHJlcGFyZV9lcHRocnUsCisJbWVnYXJhaWRfYnVzeXdhaXRfbWJveAorCisJCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCSJTb21ldGhpbmcgZWxzZSB0byBjbGVhbiB1cCBhZnRlciBpbmNsdXNpb246IGV2ZXJ5IGluc3RhbmNlIG9mIGFuCisJaW5saW5lIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHJlbmRlcmVkIGFzIGEgZnVsbCBmdW5jdGlvbiBjYWxsLCBiZWNhdXNlCisJdGhlIGZ1bmN0aW9uIGlzIGFsd2F5cyB1c2VkIGJlZm9yZSBpdCBpcyBkZWZpbmVkLiAgQXR1bCwgcGxlYXNlCisJcmUtYXJyYW5nZSB0aGUgY29kZSB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIG1vc3QgKGFsbCkgb2YgdGhlCisJZnVuY3Rpb24gcHJvdG90eXBlcyBhdCB0aGUgdG9wIG9mIGVhY2ggZmlsZSwgYW5kIGRlZmluZSAobm90IGp1c3QKKwlkZWNsYXJlIHdpdGggYSBwcm90b3R5cGUpIGVhY2ggaW5saW5lIGZ1bmN0aW9uIGJlZm9yZSBpdHMgZmlyc3QgdXNlIgorCisJCS0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgMDcuMjcuMjAwNAorCQlsaW51eC1zY3NpIG1haWxpbmcgbGlzdAorCisKK2lpLglEaXNwbGF5IGVsYXBzZWQgdGltZSAoY291bnRkb3duKSB3aGlsZSB3YWl0aW5nIGZvciBGVyB0byBib290LgorCitpaWkuCU1vZHVsZSBjb21waWxhdGlvbiByZW9yZGVyIGluIE1ha2VmaWxlIHNvIHRoYXQgdW5yZXNvbHZlZCBzeW1ib2xzIGRvCisJbm90IG9jY3VyIHdoZW4gZHJpdmVyIGlzIGNvbXBpbGVkIG5vbi1tb2R1bGFyLgorCisJCVBhdHJpY2sgSi4gTG9QcmVzdGkgPHBhdGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgOC4yMi4yMDA0CisJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKKworUmVsZWFzZSBEYXRlCTogVGh1IEF1ZyAxOSAwOTo1ODozMyBFRFQgMjAwNCAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuMy4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4wIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuMi4wIChzY3NpIG1vZHVsZSksIDIuMjAuMS4wIChjbW0gbW9kdWxlKQorCitpLglXaGVuIGNvcHlpbmcgdGhlIG1haWxib3ggcGFja2V0cywgY29weSBvbmx5IGZpcnN0IDE0IGJ5dGVzIChmb3IgMzItYml0CisJbWFpbGJveGVzKSBhbmQgb25seSBmaXJzdCAyMiBieXRlcyAoZm9yIDY0LWJpdCBtYWlsYm94ZXMpLiBUaGlzIGlzIHRvCisJYXZvaWQgZ2V0dGluZyB0aGUgc3RhbGUgdmFsdWVzIGZvciBidXN5IGJpdC4gV2Ugd2FudCB0byBzZXQgdGhlIGJ1c3kKKwliaXQganVzdCBiZWZvcmUgaXNzdWluZyBjb21tYW5kIHRvIHRoZSBGVy4KKworaWkuCUluIHRoZSByZXNldCBoYW5kbGluZywgaWYgdGhlIHJlc2V0ZWQgY29tbWFuZCBpcyBub3Qgb3duZWQgYnkgdGhlCisJZHJpdmVyLCBkbyBub3QgKHdyb25nbHkpIHByaW50IGluZm9ybWF0aW9uIGZvciB0aGUgImF0dGFjaGVkIiBkcml2ZXIKKwlwYWNrZXQuCisKK2lpaS4JSGF2ZSBleHRlbmRlZCB3YWl0IHdoZW4gaXNzdWluZyBjb21tYW5kIGluIHN5bmNocm9ub3VzIG1vZGUuIFRoaXMgaXMKKwlyZXF1aXJlZCBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZSBvcHRpb24gUk9NIGlzIGRpc2FibGVkIGFuZCB0aGVyZSBpcworCW5vIEJJT1MgdG8gc3RhcnQgdGhlIGNvbnRyb2xsZXIuIFRoZSBGVyBzdGFydHMgdG8gYm9vdCBhZnRlciByZWNlaXZpbmcKKwl0aGUgZmlyc3QgY29tbWFuZCBmcm9tIHRoZSBkcml2ZXIuIFRoZSBjdXJyZW50IGRyaXZlciBoYXMgMSBzZWNvbmQKKwl0aW1lb3V0IGZvciB0aGUgc3luY2hyb25vdXMgY29tbWFuZHMsIHdoaWNoIGlzIGZhciBsZXNzIHRoYW4gd2hhdCBpcworCWFjdHVhbGx5IHJlcXVpcmVkLiBXZSBub3cgd2FpdCB1cCB0byBNQk9YX1JFU0VUX1RJTUUgKDE4MCBzZWNvbmRzKSBmb3IKKwlGVyBib290IHByb2Nlc3MuCisKK2l2LglJbiBtZWdhcmFpZF9tYm94X3Byb2R1Y3RfaW5mbywgY2xlYXIgdGhlIG1haWxib3ggY29udGVudHMgY29tcGxldGVseQorCWJlZm9yZSBwcmVwYXJpbmcgdGhlIGNvbW1hbmQgZm9yIGlucXVpcnkzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZQorCUZXIGRvZXMgbm90IGdldCBqdW5rIHZhbHVlcyBpbiB0aGUgY29tbWFuZC4KKwordi4JRG8gYXdheSB3aXRoIHRoZSByZWR1bmRhbnQgTFNJX0NPTkZJR19DT01QQVQgcmVkZWZpbml0aW9uIGZvcgorCUNPTkZJR19DT01QQVQuIFJlcGxhY2UgPGFzbS9pb2N0bDMyLmg+IHdpdGggPGxpbnV4L2lvY3RsMzIuaD4KKworCQktIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4sIDA4LjE3LjIwMDQKKwkJIGxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKK3ZpLglBZGQgc3VwcG9ydCBmb3IgNjQtYml0IGFwcGxpY2F0aW9ucy4gQ3VycmVudCBkcml2ZXJzIGFzc3VtZSBvbmx5CisJMzItYml0IGFwcGxpY2F0aW9ucywgZXZlbiBvbiA2NC1iaXQgcGxhdGZvcm1zLiBVc2UgdGhlICJkYXRhIiBhbmQKKwkiYnVmZmVyIiBmaWVsZHMgb2YgdGhlIG1pbWRfdCBzdHJ1Y3R1cmUsIGluc3RlYWQgb2YgZW1iZWRkZWQgMzItYml0CisJYWRkcmVzc2VzIGluIGFwcGxpY2F0aW9uIG1haWxib3ggYW5kIHBhc3N0aHJ1IHN0cnVjdHVyZXMuCisKK3ZpaS4JTW92ZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgbWFuYWdlbWVudCBtb2R1bGUgZnJvbQorCW1lZ2FyYWlkX21tLmggdG8gbWVnYXJhaWRfbW0uYworCisJCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKwordmlpaS4JQ2hhbmdlIGRlZmF1bHQgdmFsdWVzIGZvciBNRUdBUkFJRF9ORVdHRU4sIE1FR0FSQUlEX01NLCBhbmQKKwlNRUdBUkFJRF9NQUlMQk9YIHRvICduJyBpbiBLY29uZmlnLm1lZ2FyYWlkCisKKwkJLSBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPiwgMDguMTkuMjAwNAorCQlsaW51eC1zY3NpIG1haWxpbmcgbGlzdAorCitpeC4JcmVwbGFjZSB1ZGVsYXkgd2l0aCBtc2xlZXAKKworeC4JVHlwb3MgY29ycmVjdGVkIGluIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlIGFkanVzdG1lbnRzLCBleHBsaWNpdAorCWdyb3VwaW5nIG9mIGV4cHJlc3Npb25zLgorCisKK1JlbGVhc2UgRGF0ZQk6IEZyaSBKdWwgMjMgMTU6MjI6MDcgRURUIDIwMDQgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjIuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjEuMCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjEuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjAuMCAoY21tIG1vZHVsZSkKKworaS4JQWRkIFBDSSBpZHMgZm9yIEFjZXIgUk9NQiAyRSBzb2x1dGlvbgorCitpaS4JQWRkIFBDSSBpZHMgZm9yIEk0CisKK2lpaS4JVHlwbyBjb3JyZWN0ZWQgZm9yIHN1YnN5cyBpZCBmb3IgbWVnYXJhaWQgc2F0YSAzMDAtNHgKKworaXYuCVJlbW92ZSB5aWVsZCgpIHdoaWxlIG1haWxib3ggaGFuZHNoYWtlIGluIHN5bmNocm9ub3VzIGNvbW1hbmRzCisKKworCSJNeSBvdGhlciBtYWluIGdyaXBlIGlzIHRoaW5ncyBsaWtlIHRoaXM6CisKKwkrCS8vIHdhaXQgZm9yIG1heGltdW0gMSBzZWNvbmQgZm9yIHN0YXR1cyB0byBwb3N0CisJKwlmb3IgKGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworCSsJCWlmIChtYm94LT5udW1zdGF0dXMgIT0gMHhGRikgYnJlYWs7CisJKwkJdWRlbGF5KDI1KTsgeWllbGQoKTsKKwkrCX0KKworCXdoaWNoIGxpdHRlciB0aGUgZHJpdmVyLiAgVXNlIG9mIHlpZWxkKCkgaW4gZHJpdmVycyBpcyBkZXByZWNhdGVkLiIKKworCQktIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4sIDA3LjE0LjIwMDQKKwkJIGxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKK3YuCVJlbW92ZSByZWR1bmRhbnQgX19tZWdhcmFpZF9idXN5d2FpdF9tYm94IHJvdXRpbmUKKwordmkuCUZpeCBidWcgaW4gdGhlIG1hbmFnbWVudCBtb2R1bGUsIHdoaWNoIGNhdXNlcyBhIHN5c3RlbSBsb2NrdXAgd2hlbiB0aGUKKwlJTyBtb2R1bGUgaXMgbG9hZGVkIGFuZCB0aGVuIHVubG9hZGVkLCBmb2xsb3dlZCBieSBleGVjdXRpbmcgYW55CisJbWFuYWdlbWVudCB1dGlsaXR5LiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIG1hbmFnZW1lbnQgbW9kdWxlIGRvZXMgbm90CisJaGFuZGxlIHRoZSBhZGFwdGVyIHVucmVnaXN0ZXIgcHJvcGVybHkuCisKKwlTcGVjaWZpY2FsbHksIGl0IHN0aWxsIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSB1bnJlZ2lzdGVyZWQKKwljb250cm9sbGVycy4gVG8gYXZvaWQgdGhpcywgdGhlIHN0YXRpYyBhcnJheSBhZGFwdGVycyBoYXMgYmVlbgorCXJlcGxhY2VkIGJ5IGEgZHluYW1pYyBsaXN0LCB3aGljaCBnZXRzIHVwZGF0ZWQgZXZlcnkgdGltZSBhbiBhZGFwdGVyCisJaXMgYWRkZWQgb3IgcmVtb3ZlZC4KKworCUFsc28sIGR1cmluZyB1bnJlZ2lzdHJhdGlvbiBvZiB0aGUgSU8gbW9kdWxlLCB0aGUgcmVzb3VyY2VzIGFyZQorCW5vdyByZWxlYXNlZCBpbiB0aGUgZXhhY3QgcmV2ZXJzZSBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbiB0aW1lCisJc2VxdWVuY2UuCisKKworUmVsZWFzZSBEYXRlCTogRnJpIEp1biAyNSAxODo1ODo0MyBFRFQgMjAwNCAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuMS4wCitPbGRlciBWZXJzaW9uCTogbWVnYXJhaWQgMi4yMC4wLjEKKworaS4JU3RhbGUgbGlzdCBwb2ludGVyIGluIGFkYXB0ZXIgY2F1c2VzIGtlcm5lbCBwYW5pYyB3aGVuIG1vZHVsZQorCW1lZ2FyYWlkX21ib3ggaXMgdW5sb2FkZWQKKworCitSZWxlYXNlIERhdGUJOiBUaHUgSnVuIDI0IDIwOjM3OjExIEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4wLjEKK09sZGVyIFZlcnNpb24JOiBtZWdhcmFpZCAyLjIwLjAuMDAKKworaS4JTW9kdWxlcyBhcmUgbm90ICd5JyBieSBkZWZhdWx0LCBidXQgZGVwZW5kIG9uIGN1cnJlbnQgZGVmaW5pdGlvbiBvZgorCVNDU0kgJiBQQ0kuCisKK2lpLglSZWR1bmRhbnQgc3RydWN0dXJlIG1yYWlkX2RyaXZlcl90IHJlbW92ZWQuCisKK2lpaS4JTWlzY2VsbGFuZW91cyBpbmRlbnRhdGlvbiBhbmQgZ290by9sYWJlbCBmaXhlcy4KKwkJLSBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+LCAwNi4yNC4yMDA0IGxpbnV4LXNjc2kKKworaXYuCXNjc2lfaG9zdF9wdXQoKSwgZG8ganVzdCBiZWZvcmUgY29tcGxldGluZyBIQkEgc2h1dGRvd24uCisKKworCitSZWxlYXNlIERhdGUJOiBNb24gSnVuIDIxIDE5OjUzOjU0IEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4wLjAKK09sZGVyIFZlcnNpb24JOiBtZWdhcmFpZCAyLjIwLjAucmMyIGFuZCAyLjAwLjMKKworaS4JSW5kZXBlbmRlbnQgbW9kdWxlIHRvIGludGVyYWN0IHdpdGggdXNlcmxhbmQgYXBwbGljYXRpb25zIGFuZAorCW11bHRpcGxleCBjb21tYW5kIHRvIGxvdyBsZXZlbCBSQUlEIG1vZHVsZShzKS4KKworCSJTaGFyZWQgY29kZSBpbiBhIHRoaXJkIG1vZHVsZSwgYSAibGlicmFyeSBtb2R1bGUiLCBpcyBhbiBhY2NlcHRhYmxlCisJc29sdXRpb24uIG1vZHByb2JlIGF1dG9tYXRpY2FsbHkgbG9hZHMgZGVwZW5kZW50IG1vZHVsZXMsIHNvIHVzZXJzCisJcnVubmluZyAibW9kcHJvYmUgZHJpdmVyMSIgb3IgIm1vZHByb2JlIGRyaXZlcjIiIHdvdWxkIGF1dG9tYXRpY2FsbHkKKwlsb2FkIHRoZSBzaGFyZWQgbGlicmFyeSBtb2R1bGUuIgorCisJCS0gSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiAwMi4yNS4yMDA0IExLTUwKKworCSJBcyBKZWZmIGhpbnRlZCwgaWYgeW91ciB1c2Vyc3BhY2U8LT5kcml2ZXIgQVBJIGlzIGNvbnNpc3RlbnQgYmV0d2VlbgorCXlvdXIgbmV3IE1QVC1iYXNlZCBSQUlEIGNvbnRyb2xsZXJzIGFuZCB5b3VyIGV4aXN0aW5nIG1lZ2FyYWlkIGRyaXZlciwKKwl0aGVuIHBlcmhhcHMgeW91IG5lZWQgYSBzaW5nbGUgc21hbGwgaGVscGVyIG1vZHVsZSAobHNpaW9jdGwgb3Igc29tZQorCWJldHRlciBuYW1lKSwgbG9hZGVkIGJ5IGJvdGggbXB0cmFpZCBhbmQgbWVnYXJhaWQgYXV0b21hdGljYWxseSwgd2hpY2gKKwloYW5kbGVzIHJlZ2lzdGVyaW5nIHRoZSAvZGV2L21lZ2FyYWlkIG5vZGUgZHluYW1pY2FsbHkuIEluIHRoaXMgY2FzZSwKKwlib3RoIG1wdHJhaWQgYW5kIG1lZ2FyYWlkIHdvdWxkIHJlZ2lzdGVyIHdpdGggbHNpaW9jdGwgZm9yIGVhY2gKKwlhZGFwdGVyIGRpc2NvdmVyZWQsIGFuZCBsc2lpb2N0bCB3b3VsZCBlc3NlbnRpYWxseSBiZSBhIHN3aXRjaCwKKwlyZWRpcmVjdGluZyB1c2Vyc3BhY2UgdG9vbCBpb2N0bHMgdG8gdGhlIGFwcHJvcHJpYXRlIGRyaXZlci4iCisKKwkJLSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+IDAyLjI1LjIwMDQgTEtNTAorCitpaS4JUmVtb3ZlIEM5OSBpbml0aWFsaXphdGlvbnMgZnJvbSBwY2lfZGV2aWNlIGlkLgorCisJInBjaV9pZF90YWJsZV9nIHdvdWxkIGJlIG11Y2ggbW9yZSByZWFkYWJsZSB3aGVuIG5vdCB1c2luZyBDOTkKKwlpbml0aWFsaXplcnMuCisJUENJIHRhYmxlIGRvZXNuJ3QgY2hhbmdlLCB0aGVyZSdzIGxvdHMgb2YgdXNlcnMgdGhhdCBwcmVmZXIgdGhlIG1vcmUKKwlyZWFkYWJsZSB2YXJpYW50LiAgQW5kIGl0J3MgcmVhbGx5IGZhciBsZXNzIGFuZCBtdWNoIGVhc2llciB0byBncm9rCisJbGluZXMgd2l0aG91dCBDOTkgaW5pdGlhbGl6ZXJzLiIKKworCQktIENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4sIDA1LjI4LjIwMDQgbGludXgtc2NzaQorCitpaWkuCU1hbnkgZml4ZXMgYXMgc3VnZ2VzdGVkIGJ5IENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4gb24KKwlsaW51eC1zY3NpLCAwNS4yOC4yMDA0CisKK2l2LglXZSBub3cgc3VwcG9ydCB1cCB0byAzMiBwYXJhbGxlbCBpb2N0bCBjb21tYW5kcyBpbnN0ZWFkIG9mIGN1cnJlbnQgMS4KKwlUaGVyZSBpcyBhIGNvbnNjaW91cyBlZmZvcnQgdG8gbGV0IG1lbW9yeSBhbGxvY2F0aW9uIG5vdCBmYWlsIGZvciBpb2N0bAorCWNvbW1hbmRzLgorCit2LglEbyBhd2F5IHdpdGggaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQuIFVzZSBwY2lfcG9vbF8oY3JlYXRlfGFsbG9jKQorCWluc3RlYWQuCisKK3ZpLglLaWxsIHRhc2tsZXQgd2hlbiB1bmxvYWRpbmcgdGhlIGRyaXZlci4KKwordmlpLglEbyBub3QgdXNlICJob3N0X2xvY2snLCBkcml2ZXIgaGFzIGZpbmUtZ3JhaW4gbG9ja3Mgbm93IHRvIHByb3RlY3QgYWxsCisJZGF0YSBzdHJ1Y3R1cmVzLgorCit2aWlpLglPcHRpbWl6ZSB0aGUgYnVpbGQgc2NhdHRlci1nYXRoZXIgbGlzdCByb3V0aW5lLiBUaGUgY2FsbGVycyBhbHJlYWR5CisJa25vdyB0aGUgZGF0YSB0cmFuc2ZlciBhZGRyZXNzIGFuZCBsZW5ndGguCisKK2l4LglCZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5LiBEcml2ZXIgbm93CisJcGVyZm9ybXMgZXh0ZW5kZWQgZXJyb3JzIHJlY292ZXJ5IGZvciBpbnN0YW5jZXMgbGlrZSBzY3NpIGNhYmxlIHB1bGwuCisKK3guCURpc2Fzc29jaWF0ZSB0aGUgbWFuYWdlbWVudCBjb21tYW5kcyB3aXRoIGFuIG92ZXJsYWlkIHNjc2kgY29tbWFuZC4KKwlEcml2ZXIgbm93IHRyZWF0cyB0aGUgbWFuYWdlbWVudCBwYWNrZXRzIGFzIHNwZWNpYWwgcGFja2V0cyBhbmQgaGFzIGEKKwlkZWRpY2F0ZWQgY2FsbGJhY2sgcm91dGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5uY3I1M2M4eHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwM2U5ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4CkBAIC0wLDAgKzEsNDk1IEBACitTYXQgTWF5IDEyIDEyOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIG5jcjUzYzh4eC0zLjQuM2IKKwktIEVuc3VyZSBMRURDIGJpdCBpbiBHUENOVEwgaXMgY2xlYXJlZCB3aGVuIHJlYWRpbmcgdGhlIE5WUkFNLgorCSAgRml4IHNlbnQgYnkgU3RpZyBUZWxmZXIgPHN0aWdAYXBpLW5ldHdvcmtzLmNvbT4uCisJLSBEZWZpbmUgc2NzaV9zZXRfcGNpX2RldmljZSgpIGFzIG5pbCBmb3Iga2VybmVsIDwgMi40LjQuCisKK01vbiBGZWIgMTIgMjI6MzAgMjAwMSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gbmNyNTNjOHh4LTMuNC4zCisJLSBDYWxsIHBjaV9lbmFibGVfZGV2aWNlKCkgYXMgQUMgd2FudHMgdGhpcyB0byBiZSBkb25lLgorCS0gR2V0IGJvdGggdGhlIEJBUiBjb29raWVzIGFjdHVhbCBhbmQgUENJIEJBUiB2YWx1ZXMuCisJICAoc2VlIENoYW5nZWxvZy5zeW01M2M4eHggcmV2LiAxLjcuMyBmb3IgZGV0YWlscykKKwktIE1lcmdlIGNoYW5nZXMgZm9yIGxpbnV4LTIuNCB0aGF0IGRlY2xhcmUgdGhlIGhvc3QgdGVtcGxhdGUgCisJICBpbiB0aGUgZHJpdmVyIG9iamVjdCBhbHNvIHdoZW4gdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IAorCSAgbGlua2VkIHdpdGggdGhlIGtlcm5lbC4KKworU3VuIFNlcCAyNCAyMTozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBuY3I1M2M4eHgtMy40LjIKKwktIFNlZSBDaGFuZ2Vsb2cuc3ltNTNjOHh4LCBkcml2ZXIgdmVyc2lvbiAxLjcuMi4KKworV2VkIEp1bCAyNiAyMzozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBuY3I1M2M4eHgtMy40LjEKKwktIFByb3ZpZGUgT3BlbkZpcm1hcmUgcGF0aCB0aHJvdWdoIHRoZSBwcm9jIEZTIG9uIFBQQy4KKwktIFJlbW92ZSB0cmFpbGluZyBhcmd1bWVudCAjMiBmcm9tIGEgY291cGxlIG9mICN1bmRlZnMuCisKK1N1biBKdWwgMDkgMTY6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gbmNyNTNjOHh4LTMuNC4wCisJLSBSZW1vdmUgdGhlIFBST0ZJTEUgQyBhbmQgU0NSSVBUUyBjb2RlLgorCSAgVGhpcyBmYWNpbGl0eSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCB0aHVzIHdhcyBub3QgbG9uZ2VyIAorCSAgZGVzaXJhYmxlIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgb2YgdGhlIGRyaXZlciBjb2RlLgorCS0gTWVyZ2VzIGZyb20gRnJlZUJTRCBzeW0tMS42LjIgZHJpdmVyOgorCSAgKiBDbGFyaWZ5IG1lbW9yeSBiYXJyaWVycyBuZWVkZWQgYnkgdGhlIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyAKKwkgICAgdGhhdCBpbXBsZW1lbnQgYSB3ZWFrIG1lbW9yeSBvcmRlcmluZy4KKwktIEdlbmVyYWwgY2xlYW51cDoKKwkgIE1vdmUgZGVmaW5pdGlvbnMgZm9yIGJhcnJpZXJzIGFuZCBJTy9NTUlPIG9wZXJhdGlvbnMgdG8gdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBoZWFkZXIgZmlsZXMuIFRoZXkgYXJlIG5vdyBzaGFyZWQgYnkgdGhlIAorCSAgYm90aCBkcml2ZXJzLgorCSAgVXNlIFNDU0lfTkNSX0lPTUFQUEVEIGluc3RlYWQgb2YgTkNSX0lPTUFQUEVELgorCitUaHUgTWF5IDExICAgMTI6MzAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiByZXZpc2lvbiAzLjNiCisgCitNb24gQXByIDI0IDEyOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjJpCisJLSBSZXR1cm4gdmFsdWUgMSAoaW5zdGVhZCBvZiAwKSBmcm9tIHRoZSBkcml2ZXIgc2V0dXAgcm91dGluZS4KKwktIExldCB0aGUgZHJpdmVyIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHRoYXQgaGF2ZSBiZWVuIHNldCB0byAKKwkgIE9GRiBpbiB0aGUgTlZSQU0gYXMgaXQgZGlkIHByaW9yIHRvIHJldmlzaW9uIDMuMmcuCisKK1NhdCBBcHIgMSAgMTI6MDAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmgKKwktIEZpeCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gb24gQWxwaGEgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDMuMmcuCisgICAgICAgICAgKGBwb3J0JyBjaGFuZ2VkIHRvIGBiYXNlX2lvJykuCisJLSBNb3ZlIGZyb20gYHN5bScgdG8gdGhpcyBkcml2ZXIgYSB0aW55IGNoYW5nZSBmb3IgX19zcGFyY19fIHRoYXQgCisJICBhcHBsaWVzIHRvIGNhY2hlIGxpbmUgc2l6ZSAoPyBQcm9iYWJseSBmcm9tIERhdmlkIFMgTWlsbGVyKS4KKwktIE1ha2Ugc3VyZSBubyBkYXRhIHRyYW5zZmVyIHdpbGwgaGFwcGVuIGZvciBTY3NpX0NtbmQgcmVxdWVzdHMgCisJICB0aGF0IHN1cHBseSBTQ1NJX0RBVEFfTk9ORSBkaXJlY3Rpb24gKHRoaXMgYXZvaWRzIHNvbWUgQlVHKCkgCisJICBzdGF0ZW1lbnQgaW4gdGhlIFBDSSBjb2RlIHdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBhbHNvIHN1cHBsaWVkKS4KKworVGh1IE1hciAxNiAgIDk6MzAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiByZXZpc2lvbiAzLjNiLTMKKyAJLSBBZGRlZCBleGNsdXNpb24gZm9yIHRoZSA1M0MxMDEwIGFuZCA1M0MxMDEwXzY2IGNoaXBzCisJICB0byB0aGUgZHJpdmVyIChjaGFuZ2UgdG8gc3ltNTNjOHh4X2NvbW0uaCkuCisKK01vbiBNYXJjaCA2ICAyMzoxNSAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4yZworCS0gQWRkIHRoZSBmaWxlIHN5bTUzYzh4eF9jb21tLmggdGhhdCBjb2xsZWN0cyBjb2RlIHRoYXQgc2hvdWxkIAorCSAgYmUgc2hhcmVkIGJ5IHN5bTUzYzh4eCBhbmQgbmNyNTNjOHh4IGRyaXZlcnMuIEZvciBub3csIGl0IGlzICAKKwkgIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBvbmx5IGluY2x1ZGVkIGJ5IHRoZSBuY3I1M2M4eHggZHJpdmVyLCAKKwkgIGJ1dCB0aGluZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGxhdGVyLiBUaGlzIGNvZGUgYWRkcmVzc2VzIAorCSAgbm90YWJseToKKwkgICogQ2hpcCBkZXRlY3Rpb24gYW5kIFBDSSByZWxhdGVkIGluaXRpYWxpc2F0aW9ucworCSAgKiBOVlJBTSBkZXRlY3Rpb24gYW5kIHJlYWRpbmcKKwkgICogRE1BIG1hcHBpbmcKKwkgICogQm9vdCBzZXR1cCBjb21tYW5kCisJICAqIEFuZCBzb21lIG90aGVyIC4uLgorCS0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZHluYW1pYyBkbWEgbWFwcGluZyBrZXJuZWwgaW50ZXJmYWNlLgorCSAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorCS0gR2V0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGZyb20gdGhlIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgCisJICAoU2NzaV9DbW5kKSB3aGVuIHRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgorCitNb24gTWFyY2ggNiAgMjM6MTUgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKyAgICAgICAgKiByZXZpc2lvbiAzLjJnCisgICAgICAgIC0gQWRkIHRoZSBmaWxlIHN5bTUzYzh4eF9jb21tLmggdGhhdCBjb2xsZWN0cyBjb2RlIHRoYXQgc2hvdWxkCisgICAgICAgICAgYmUgc2hhcmVkIGJ5IHN5bTUzYzh4eCBhbmQgbmNyNTNjOHh4IGRyaXZlcnMuIEZvciBub3csIGl0IGlzCisgICAgICAgICAgYSBoZWFkZXIgZmlsZSB0aGF0IGlzIG9ubHkgaW5jbHVkZWQgYnkgdGhlIG5jcjUzYzh4eCBkcml2ZXIsCisgICAgICAgICAgYnV0IHRoaW5ncyB3aWxsIGJlIGNsZWFuZWQgdXAgbGF0ZXIuIFRoaXMgY29kZSBhZGRyZXNzZXMKKyAgICAgICAgICBub3RhYmx5OgorICAgICAgICAgICogQ2hpcCBkZXRlY3Rpb24gYW5kIFBDSSByZWxhdGVkIGluaXRpYWxpc2F0aW9ucworICAgICAgICAgICogTlZSQU0gZGV0ZWN0aW9uIGFuZCByZWFkaW5nCisgICAgICAgICAgKiBETUEgbWFwcGluZworICAgICAgICAgICogQm9vdCBzZXR1cCBjb21tYW5kCisgICAgICAgICAgKiBBbmQgc29tZSBvdGhlciAuLi4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBkeW5hbWljIGRtYSBtYXBwaW5nIGtlcm5lbCBpbnRlcmZhY2UuCisgICAgICAgICAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorICAgICAgICAtIEdldCBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBmcm9tIHRoZSBzY3NpIGNvbW1hbmQgc3RydWN0dXJlCisgICAgICAgICAgKFNjc2lfQ21uZCkgd2hlbiB0aGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKworRnJpIEphbiAxNCAxNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIHByZS0zLjNiLTEKKwktIE1lcmdlIHBhcmFsbGVsIGRyaXZlciBzZXJpZXMgMy4zMSBhbmQgMy4yZSAKKworVHVlIEphbiAxMSAxNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIDMuMzEKKwktIEFkZGVkIHN1cHBvcnQgZm9yIG1vdW50aW5nIGRpc2tzIG9uIHdpZGUtbmFycm93LXdpZGUKKwkgIHNjc2kgY29uZmlndXJhdGlvbnMuICAKKwktIEJ1aWx0IG9mZiBvZiB2ZXJzaW9uIDMuMzAKKworTW9uIEphbiAxMCAxMzozMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIDMuMzAKKwktIEFkZGVkIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpbnRlZ3JpdHkgY2hlY2tpbmcgY29kZQorCSAgaW4gdGhlIGtlcm5lbCAob3B0aW9uYWwpLgorCS0gRGlzYWJsZWQgc3VwcG9ydCBmb3IgdGhlIDUzQzEwMTAuCisJLSBCdWlsdCBvZmYgb2YgdmVyc2lvbiAzLjJjCisKK1NhdCBKYW4gOCAgMjI6MDAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmUKKwktIEFkZCB5ZWFyIDIwMDAgY29weXJpZ2h0LgorCS0gRGlzcGxheSBjb3JyZWN0bHkgYnVzIHNpZ25hbHMgd2hlbiBidXMgaXMgZGV0ZWN0ZWQgd3JvbmcuCisJLSBSZW1vdmUgdGhlIGRlYWQgY29kZSB0aGF0IGJyb2tlIGRyaXZlciAzLjJkLgorCitNb24gRGVjIDYgIDIyOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjJkCisJLSBDaGFuZ2UgbWVzc2FnZXMgd3JpdHRlbiBieSB0aGUgZHJpdmVyIGF0IGluaXRpYWxpc2F0aW9uIGFuZCAKKwkgIHRocm91Z2ggdGhlIC9wcm9jIEZTIChyYXRoZXIgY29zbWV0aWMgY2hhbmdlcyB0aGF0IGNvbnNpc3QgaW4KKwkgIHByaW50aW5nIG91dCB0aGUgUENJIGJ1cyBudW1iZXIgYW5kIGRldmljZS9mdW5jdGlvbikuCisJLSBHZXQgcmlkIG9mIHRoZSBvbGQgUENJIGJpb3MgaW50ZXJmYWNlLCBidXQgcHJlc2VydmUga2VybmVsIDIuMCAKKwkgIGNvbXBhdGliaWxpdHkgZnJvbSBhIHNpbXBsZSB3cmFwcGVyLgorCS0gUmVtb3ZlIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb24gYWJvdXQgaGF2aW5nIHRvIGFjcXVpcmUgdGhlIAorCSAgaW9fcmVxdWVzdF9sb2NrIHNpbmNlIGl0IHNlZW1zIHRvIGJlIGEgZGVmaW5pdGUgZmVhdHVyZSBub3cuOikKKwktIHByb2NfZGlyIHN0cnVjdHVyZSBubyBsb25nZXIgbmVlZGVkIGZvciBrZXJuZWwgPj0gMi4zLjI3LgorCS0gQ2hhbmdlIHRoZSBkcml2ZXIgZGV0ZWN0aW9uIGNvZGUgYnkgdGhlIHN5bTUzYzh4eCBvbmUsIG1vZHVsbyAKKwkgIHNvbWUgbWlub3IgY2hhbmdlcy4gVGhlIGRyaXZlciBjYW4gbm93IGF0dGFjaCBhbnkgbnVtYmVyIG9mIAorCSAgY29udHJvbGxlcnMgKD40MCkgYW5kIGRvZXMgbm8gbG9uZ2VyIGhvZ2VyIHN0YWNrIHNwYWNlIGF0IAorCSAgaW5pdGlhbGlzYXRpb24uCisJLSBEZWZpbml0ZWx5IGRpc2FibGUgb3ZlcmxhcHBlZCBQQ0kgYXJiaXRyYXRpb24gZm9yIGFsbCBkdWFsIAorCSAgZnVuY3Rpb24gY2hpcHMsIHNpbmNlIEkgY2Fubm90IG1ha2Ugc3VyZSBmb3Igd2hhdCBjaGlwIHJldmlzaW9ucyAKKwkgIGl0IGlzIGFjdHVhbGx5IHNhZmUuCisJLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFNZTTUzQzE1MTBELgorCS0gVXBkYXRlIHRoZSBwb29yIFRla3JhbSBzeW5jIGZhY3RvciB0YWJsZS4KKwktIFJlbW92ZSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9uIGFib3V0IGhhdmluZyB0byBhY3F1aXJlIHRoZSAKKwkgIGlvX3JlcXVlc3RfbG9jayBzaW5jZSBpdCBzZWVtcyB0byBiZSBhIGRlZmluaXRlIGZlYXR1cmUgbm93LjopCisJLSBwcm9jX2RpciBzdHJ1Y3R1cmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3Iga2VybmVsID49IDIuMy4yNy4KKworU2F0IFNlcCAxMSAgMTg6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmMKKwktIEhhbmRsZSBjb3JyZWN0bHkgKGhvcGVmdWxseSkgamlmZmllcyB3cmFwLWFyb3VuZC4KKwktIFJlc3RvcmUgdGhlIGVudHJ5IHVzZWQgdG8gZGV0ZWN0IDg3NSB1bnRpbCByZXZpc2lvbiAweGZmLgorCSAgKEkgcmVtb3ZlZCBpdCBpbmFkdmVydGVudGx5LCBpdCBzZWVtcyA6KSApCisJLSBSZXBsYWNlIF9faW5pdGZ1bmMoKSB3aGljaCBpcyBkZXByZWNhdGVkIHN0dWZmIGJ5IF9faW5pdCB3aGljaCAKKwkgIGlzIG5vdCB5ZXQgc28uIDstKQorCS0gQWRkIHN1cHBvcnQgb2Ygc29tZSAncmVzb3VyY2UgaGFuZGxpbmcnIGZvciBsaW51eC0yLjMuMTMuCisJICBCYXNpY2FsbHkgdGhlIEJBUnMgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUgY29tcGxleCAKKwkgIGluIHRoZSBwY2lfZGV2IHN0cnVjdHVyZS4KKwktIFJlbW92ZSBzb21lIGRlcHJlY2F0ZWQgY29kZS4KKworU2F0IE1heSAxMCAgMTE6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIHByZS0zLjJiLTEKKwktIFN1cHBvcnQgZm9yIHRoZSA1M0M4OTVBIGJ5IFBhbWVsYSBEZWxhbmV5IDxwYW0uZGVsYW5leUBsc2lsLmNvbT4KKwkgIFRoZSA1M0M4OTVBIGNvbnRhaW5zIGFsbCBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIDg5NiBidXQgaGFzIG9ubHkgCisJICBvbmUgY2hhbm5lbCBhbmQgaGFzIGEgMzIgYml0IFBDSSBidXMuIEl0IGRvZXMgNjQgYml0IFBDSSBhZGRyZXNzaW5nIAorCSAgdXNpbmcgZHVhbCBjeWNsZSBQQ0kgZGF0YSB0cmFuc2ZlcnMuCisJLSBNaXNjZWxsYW5lb3VzIG1pbm9yIGZpeGVzLgorCS0gU29tZSBhZGRpdGlvbnMgdG8gdGhlIFJFQURNRS5uY3I1M2M4eHggZmlsZS4KKworU3VuIEFwciAxMSAgMTA6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmEKKwktIEFkZCAnaG9zdGlkOiNpZCcgYm9vdCBvcHRpb24uIFRoaXMgb3B0aW9uIGFsbG93cyB0byBjaGFuZ2UgdGhlIAorCSAgZGVmYXVsdCBTQ1NJIGlkIHRoZSBkcml2ZXIgdXNlcyBmb3IgY29udHJvbGxlcnMuCisJLSBSZW1vdmUgbnZyYW0gbGF5b3V0cyBhbmQgZHJpdmVyIHNldC11cCBzdHJ1Y3R1cmVzIGZyb20gdGhlIEMgc291cmNlLAorCSAgYW5kIHVzZSB0aGUgb25lIGRlZmluZWQgaW4gc3ltNTNjOHh4X2RlZnMuaCBmaWxlLgorCSAgKHNoYXJlZCBieSBib3RoIGRyaXZlcnMpLgorCS0gU2V0IGZvciBub3cgTUFYIExVTlMgdG8gMTYgKGluc3RlYWQgb2YgOCkuCisKK1RodSBNYXIgMTEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjIJICAoOHh4LTg5NiBkcml2ZXIgYnVuZGxlKQorCS0gT25seSBkZWZpbmUgdGhlIGhvc3QgdGVtcGxhdGUgaW4gbmNyNTNjOHh4LmggYW5kIGluY2x1ZGUgdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBmaWxlLgorCS0gRGVjbGFyZSBzdGF0aWMgYWxsIHN5bWJvbHMgdGhhdCBkbyBub3QgbmVlZCB0byBiZSB2aXNpYmxlIGZyb20gCisJICBvdXRzaWRlIHRoZSBkcml2ZXIgY29kZS4KKwktIEFkZCAnZXhjbCcgYm9vdCBjb21tYW5kIG9wdGlvbiB0aGF0IGFsbG93cyB0byBwYXNzIHRvIHRoZSBkcml2ZXIgCisJICBpbyBhZGRyZXNzIG9mIGRldmljZXMgbm90IHRvIGF0dGFjaC4KKwktIEFkZCBpbmZvKCkgZnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIGhvc3QgdGVtcGxhdGUgdG8gcHJpbnQgCisJICBkcml2ZXIvaG9zdCBpbmZvcm1hdGlvbi4KKwktIE1pbm9yIGRvY3VtZW50YXRpb24gYWRkaXRpb25zLgorCitTYXQgTWFyIDYgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFoCisJLSBGaXggc29tZSBvb29vbGQgYnVnIHRoYXQgaGFuZ3MgdGhlIGJ1cyBpZiBhIGRldmljZSByZWplY3RzIGEgCisJICBuZWdvdGlhdGlvbi4gQnR3LCB0aGUgY29ycmVzcG9uZGluZyBzdHVmZiBhbHNvIG5lZWRlZCBzb21lIGNsZWFudXAgCisJICBhbmQgdGh1cyB0aGUgY2hhbmdlIGlzIGEgYml0IGxhcmdlciB0aGFuIGl0IGNvdWxkIGhhdmUgYmVlbi4KKwktIFN0aWxsIHNvbWUgdHlwbyB0aGF0IG1hZGUgY29tcGlsYXRpb24gZmFpbCBmb3IgNjQgYml0ICh0cml2aWFsIGZpeCkuCisKK1N1biBGZWIgIDE0OjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFnCisJLSBEZWFsIGNvcnJlY3RseSB3aXRoIDY0IGJpdCBQQ0kgYWRkcmVzcyByZWdpc3RlcnMgb24gTGludXggMi4yLgorCSAgUG9pbnRlZCBvdXQgYnkgTGVvbmFyZCBadWJrb2ZmLgorCS0gQWxsb3cgdG8gdHVuZSByZXF1ZXN0X2lycSgpIGZsYWdzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lIHVzaW5nIAorCSAgbmNyNTNjOHh4PWlycW06Pz8sIGFzIGZvbGxvd3M6CisJICBhKSBJZiBiaXQgMHgxMCBpcyBzZXQgaW4gaXJxbSwgU0FfU0hJUlEgZmxhZyBpcyBub3QgdXNlZC4KKwkgIGIpIElmIGJpdCAweDIwIGlzIHNldCBpbiBpcnFtLCBTQV9JTlRFUlJVUFQgZmxhZyBpcyBub3QgdXNlZC4KKwkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggU0FfU0hJUlEgYW5kIFNBX0lOVEVSUlVQVC4KKwkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAorCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgorCS0gVGlueSBtaXNwZWxsaW5nIGZpeGVkIChBQk9SVCBpbnN0ZWFkIG9mIEFCUlQpLiBXYXMgZm9ydHVuYXRlbHkgCisJICBoYXJtbGVzcy4KKwktIE5lZ290aWF0ZSBTWU5DIGRhdGEgdHJhbnNmZXJzIHdpdGggQ0NTIGRldmljZXMuCisKK1NhdCBKYW4gMTYgIDE3OjMwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFmCisJLSBTb21lIFBDSSBmaXgtdXBzIG5vdCBuZWVkZWQgYW55IG1vcmUgZm9yIFBQQyAoZnJvbSBDb3J0KS4KKwktIENhY2hlIGxpbmUgc2l6ZSBzZXQgdG8gMTYgRFdPUkRTIGZvciBTcGFyYyAgIChmcm9tIERTTSkuCisJLSBXYWl0aW5nIGxpc3QgbG9vay11cCBkaWRuJ3Qgd29yayBmb3IgdGhlIGZpcnN0IGNvbW1hbmQgb2YgdGhlIGxpc3QuCisJLSBSZW1vdmUgMiB1c2VsZXNzIGxpbmVzIG9mIGNvZGUuCisKK1N1biBEZWMgMTMgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFlCisJLSBTYW1lIHdvcmstYXJvdW5kIGFzIGZvciB0aGUgNTNjODc2IHJldiA8PSAweDE1IGZvciA1M2M4OTYgcmV2IDE6CisJICBEaXNhYmxlIG92ZXJsYXBwZWQgYXJiaXRyYXRpb24uIFRoaXMgd2lsbCBub3QgbWFrZSBkaWZmZXJlbmNlIAorCSAgc2luY2UgdGhlIGNoaXAgaGFzIG9uLWNoaXAgUkFNLgorCitUaHUgTm92IDI2ICAyMjowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4xZAorCS0gVGhlIFNJU0wgUkFJRCBjaGFuZ2UgcmVxdWlyZXMgbm93IHJlbWFwX3BjaV9tZW0oKSBzdHVmZiB0byBiZSAKKwkgIGNvbXBpbGVkIGZvciBfX2kzODZfXyB3aGVuIG5vcm1hbCBJT3MgYXJlIHVzZWQuCisJLSBNaW5vciBzcGVsbGluZyBmaXhlcyBpbiBkb2MgZmlsZXMuCisKK1NhdCBOb3YgMjEgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFjCisJLSBJZ25vcmUgY2hpcHMgdGhhdCBhcmUgZHJpdmVuIGJ5IFNJU0wgUkFJRCAoREFDIDk2MCkuCisJICBDaGFuZ2Ugc2VudCBieSBMZW9uYXJkIFp1YmtvZmYgYW5kIHNsaWdodGx5IHJld29ya2VkLgorCS0gU3RpbGwgYSBidWdsZXQgaW4gdGhlIHRhZ3MgaW5pdGlhbCBzZXR0aW5ncyB0aGF0IG5lZWRlZCB0byBiZSBmaXhlZC4KKwkgIEl0IHdhcyBub3QgcG9zc2libGUgdG8gZGlzYWJsZSBUR1EgYXQgc3lzdGVtIHN0YXJ0dXAgZm9yIGRldmljZXMgCisJICB0aGF0IGNsYWltIFRHUSBzdXBwb3J0LiBUaGUgZHJpdmVyIHVzZWQgYXQgbGVhc3QgMiBmb3IgdGhlIHF1ZXVlIAorCSAgZGVwdGggYnV0IGRpZCdudCBrZWVwIHRyYWNrIG9mIHVzZXIgc2V0dGluZ3MgZm9yIHRhZ3MgZGVwdGggbG93ZXIgCisJICB0aGFuIDIuCisKK1dlZCBOb3YgMTEgIDEwOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFiCisJLSBUaGUgZHJpdmVyIHdhcyB1bmhhcHB5IHdoZW4gY29uZmlndXJlZCB3aXRoIGRlZmF1bHRfdGFncyA+IE1BWF9UQUdTCisJICBIb3BlZnVsbHkgZG91Ymx5LWZpeGVkLgorCS0gVXBkYXRlIHRoZSBDb25maWd1cmUuaGVscCBkcml2ZXIgc2VjdGlvbiB0aGF0IHNwZWFrcyBvZiBUQUdTLgorCitXZWQgT2N0IDIxIDIxOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFhCisJLSBDaGFuZ2VzIGZyb20gRWRkaWUgRG9zdCBmb3IgU3BhcmMgYW5kIEFscGhhOgorCSAgaW9yZW1hcC9pb3VubWFwIHN1cHBvcnQgZm9yIFNwYXJjLgorCSAgcGNpdnRvcGh5cyBjaGFuZ2VkIHRvIGJ1c19kdm1hX3RvX3BoeXMuCisJLSBBZGQgdGhlIDUzYzg3NiBkZXNjcmlwdGlvbiB0byB0aGUgY2hpcCB0YWJsZS4gVGhpcyBpcyBvbmx5IHVzZWZ1bCAKKwkgIGZvciBwcmludGluZyB0aGUgcmlnaHQgbmFtZSBvZiB0aGUgY29udHJvbGxlci4KKwktIERFTC00NDEgSXRlbSAyIHdvcmstYXJvdW5kIGZvciB0aGUgNTNjODc2IHJldiA8PSA1ICgweDE1KS4KKwktIEFkZCBhZGRpdGlvbmFsIGNoZWNraW5nIG9mIElOUVVJUlkgZGF0YToKKwkgIENoZWNrIElOUVVJUlkgZGF0YSByZWNlaXZlZCBsZW5ndGggaXMgYXQgbGVhc3QgNy4gQnl0ZSA3IG9mIAorCSAgaW5xdWlyeSBkYXRhIGNvbnRhaW5zIGRldmljZSBmZWF0dXJlcyBiaXRzIGFuZCB0aGUgZHJpdmVyIG1pZ2h0IAorCSAgYmUgY29uZnVzZWQgYnkgZ2FyYmFnZS4gQWxzbyBjaGVjayBwZXJpcGhlcmFsIHF1YWxpZmllci4KKwktIENsZWFudXAgb2YgdGhlIFNDU0kgdGFza3MgbWFuYWdlbWVudDoKKwkgIFJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciAzMiB0YWdzLiBOb3cgdGhlIGRyaXZlciBvbmx5IHVzZXMgdGhlIAorCSAgc2NoZW1lIHRoYXQgYWxsb3dzIHVwIHRvIDY0IHRhZ3MgcGVyIExVTi4KKwkgIE1lcmdlIHNvbWUgY29kZSBmcm9tIHRoZSA4OTYgZHJpdmVyLgorCSAgVXNlIGEgMSwzLDUsLi4uTUFYVEFHUyoyKzEgdGFnIG51bWJlcmluZy4gUHJldmlvdXMgZHJpdmVyIGNvdWxkICAKKwkgIHVzZSBhbnkgdGFnIG51bWJlciBmcm9tIDEgdG8gMjUzIGFuZCBzb21lIG5vbiBjb25mb3JtYW50IGRldmljZXMgIAorCSAgbWlnaHQgaGF2ZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHRhZyBudW1iZXJzLgorCS0gJ25vX3N5bmMnIGNoYW5nZWQgdG8gJ25vX2Rpc2MnIGluIHRoZSBSRUFETUUgZmlsZS4gVGhpcyBpcyBhbiBvbGQgCisJICBhbmQgdHJpdmlhbCBtaXN0YWtlIHRoYXQgc2VlbXMgdG8gZGVtb25zdHJhdGUgdGhlIFJFQURNRSBmaWxlIGlzIAorCSAgbm90IG9mdGVuIHJlYWQuIDopCisKK1N1biBPY3QgIDQgMTQ6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGkKKwktIENvc21ldGljIGNoYW5nZXMgZm9yIHNwYXJjIChidXQgbm90IGZvciB0aGUgZHJpdmVyKSB0aGF0IG5lZWRzICAKKwkgIF9faXJxX2l0b2EoKSB0byBiZSB1c2VkIGZvciBwcmludGVkIElSUSB2YWx1ZSB0byBiZSB1bmRlcnN0YW5kYWJsZS4KKwktIFNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyIHRoYXQgZGlkbid0IG9jY3VyIHVzaW5nIGRyaXZlciAyLjVmIAorCSAgd2VyZSBkdWUgdG8gYSBTQ1NJIHNlbGVjdGlvbiBwcm9ibGVtIHRyaWdnZXJlZCBieSBhIGNsZWFybHkgCisJICBkb2N1bWVudGVkIGZlYXR1cmUgdGhhdCBpbiBmYWN0IHNlZW1zIG5vdCB0byB3b3JrOiAoNTNDOFhYIGNoaXBzICAKKwkgIGFyZSBjbGFpbWVkIGJ5IHRoZSBtYW51YWxzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBTQ1NJIHNjcmlwdHMganVzdCAKKwkgIGFmdGVyIGFiaXRyYXRpb24gd2hpbGUgdGhlIFNDU0kgY29yZSBpcyBwZXJmb3JtaW5nIFNDU0kgc2VsZWN0aW9uKS4KKwkgIFRoaXMgb3B0aW1pemF0aW9uIGlzIGJyb2tlbiBhbmQgaGFzIGJlZW4gcmVtb3ZlZC4KKwktIFNvbWUgYnJva2VuIHNjc2kgZGV2aWNlcyBhcmUgY29uZnVzZWQgd2hlbiBhIG5lZ290aWF0aW9uIGlzIHN0YXJ0ZWQgCisJICBvbiBhIExVTiB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGRldmljZS4gQWNjb3JkaW5nIHRvIAorCSAgU0NTSSBzcGVjcywgdGhpcyBpcyBhIGRldmljZSBmaXJtd2FyZSBidWcuIFRoaXMgaGFzIGJlZW4gd29ya2VkIAorCSAgYXJvdW5kIGJ5IG9ubHkgc3RhcnRpbmcgbmVnb3RpYXRpb24gaWYgdGhlIExVTiBoYXMgcHJldmlvdXNseSBiZSAKKwkgIHVzZWQgZm9yIGF0IGxlYXN0IDEgc3VjY2Vzc2Z1bCBTQ1NJIGNvbW1hbmQuCisJLSBUaGUgJ2xhc3QgbWVzc2FnZSBzZW50JyBwcmludGVkIG91dCBvbiBNX1JFSkVDVCBtZXNzYWdlIHJlY2VwdGlvbiAKKwkgIHdhcyByZWFkIGZyb20gdGhlIFNGQlIgaS9vIHJlZ2lzdGVyIGFmdGVyIHRoZSBwcmV2aW91cyBtZXNzYWdlIGhhZCAKKwkgIGJlZW4gc2VudC4gCisJICBUaGlzIHdhcyBub3QgY29ycmVjdCBhbmQgYWZmZWN0cyBhbGwgcHJldmlvdXMgZHJpdmVyIHZlcnNpb25zIGFuZCAKKwkgIHRoZSBvcmlnaW5hbCBGcmVlQlNEIG9uZSBhcyB3ZWxsLiBUaGUgU0NTSSBzY3JpcHRzIGhhcyBiZWVuIGZpeGVkIAorCSAgc28gdGhhdCBpdCBub3cgcHJvdmlkZXMgdGhlIHJpZ2h0IGluZm9ybWF0aW9uIHRvIHRoZSBDIGNvZGUuCisKK1NhdCBKdWwgMTggMTM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGcKKwktIFByZWxpbWluYXJ5IGZpeGVzIGZvciBCaWcgRW5kaWFuIChzZW50IGJ5IEVkZGllIEMuIERvc3QpLgorCSAgQmlnIEVuZGlhbiBhcmNoaXRlY3R1cmVzIHNob3VsZCB3b3JrIGFnYWluIHdpdGggdGhlIGRyaXZlci4KKwkgIEVkZGllJ3MgcGF0Y2ggaGFzIGJlZW4gcGFydGlhbGx5IGFwcGxpZWQgc2luY2UgY3VycmVudCAyLjEuMTA5IAorCSAgZG9lcyBub3QgaGF2ZSBhbGwgdGhlIFNwYXJjIGNoYW5nZXMgb2YgdGhlIHZnZXIgdHJlZS4KKwktIFVzZSBvZiBCSVRTX1BFUl9MT05HIGluc3RlYWQgb2YgKH4wVUwgPT0gMHhmZmZmZmZmZlVMKSBoYXMgZml4ZWQKKwkgIHRoZSBwcm9ibGVtIG9ic2VydmVkIHdoZW4gdGhlIGRyaXZlciB3YXMgY29tcGlsZWQgdXNpbmcgRUdDUyBvciAKKwkgIFBHQ0MuCisKK01vbiBKdWwgMTMgMjA6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGYKKwktIFNvbWUgc3BlbGxpbmcgZml4ZXMuCisJLSBsaW51eC9jb25maWcuaCBtaXNwbGFjZWQgaW4gbmNyNTNjOHh4LmgKKwktIE1PRFVMRV9QQVJNIHN0dWZmIGFkZGVkIGZvciBsaW51eCAyLjEuCisJLSBjaGVjayBJTlFVSVJZIHJlc3BvbnNlIGRhdGEgZm9ybWF0IGlzIGV4YWN0bHkgMi4gCisJLSB1c2UgQklUU19QRVJfTE9ORyBpZiBkZWZpbmVkLiAKKworU3VuIEp1biAyOCAxMjowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4wZQorCS0gU29tZSBjbGVhbnVwLCBzcGVsbGluZyBmaXhlcywgdmVyc2lvbiBjaGVja3MsIGRvY3VtZW50YXRpb25zIAorCSAgY2hhbmdlcywgZXRjIC4uLgorCitTYXQgSnVuIDIwIDIwOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjBjCisJLSBBZGQgYSBib290IHNldHVwIG9wdGlvbiB0aGF0IGFsbG93cyB0byBzZXQgdXAgZGV2aWNlIHF1ZXVlIGRlcHRocyAKKwkgIGF0IGJvb3QtdXAuIFRoaXMgb3B0aW9uIGlzIHZlcnkgdXNlZnVsIHNpbmNlIExpbnV4IGRvZXMgbm90IAorCSAgYWxsb3cgdG8gY2hhbmdlIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoIG9uY2UgdGhlIHN5c3RlbSBoYXMgYmVlbiAKKwkgIGJvb3RlZCB1cC4KKworU3VuIEp1biAxNSAyMzowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4wYQorCS0gU3VwcG9ydCBmb3IgdXAgdG8gNjQgVEFHUyBwZXIgTFVOLgorCS0gUmV3cml0ZSB0aGUgVEFSR0VUIHZzIExVTiBjYXBhYmlsaXRpZXMgbWFuYWdlbWVudC4KKwkgIENtZFF1ZXVlIGlzIG5vdyBoYW5kbGVkIGFzIGEgTFVOIGNhcGFiaWxpdHkgYXMgaXQgc2hhbGwgYmUuCisJICBUaGlzIGFsc28gZml4ZXMgYSBidWcgdHJpZ2dlcmVkIHdoZW4gZGlzYWJsaW5nIHRhZ2dlZCBjb21tYW5kIAorCSAgcXVldWluZyBmb3IgYSBkZXZpY2UgdGhhdCBoYWQgdGhpcyBmZWF0dXJlIGVuYWJsZWQuCisJLSBSZW1vdmUgdGhlIG5jcl9vcGVubmluZ3MoKSBzdHVmZiB0aGF0IHdhcyB1c2VsZXNzIHVuZGVyIExpbnV4IAorCSAgYW5kIGhhcmQgdG8gdW5kZXJzdGFuZCB0byBtZS4KKwktIEFkZCAic2V0dmVyYm9zZSIgcHJvY2ZzIGRyaXZlciBjb21tYW5kLiBJdCBhbGxvd3MgdG8gdHVuZSAKKwkgIHZlcmJvc2UgbGV2ZWwgYWZ0ZXIgYm9vdC11cC4gU2V0dGluZyB0aGlzIGxldmVsIHRvIHplcm8sIGZvciAKKwkgIGV4YW1wbGUgYXZvaWQgZmxvb2RpbmcgdGhlIHN5c2xvZyBmaWxlLgorCS0gQWRkIEtFUk5fWFhYIHRvIHNvbWUgcHJpbnRrJ3MuCisKK1R1ZSBKdW4gMTAgMjM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMAorCS0gTGludXggY29uZmlnIGNoYW5nZXMgZm9yIDIuMC4zNDoKKwkgIFJlbW92ZSBOVlJBTSBkZXRlY3Rpb24gY29uZmlnIG9wdGlvbi4gVGhpcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgCisJICBieSBkZWZhdWx0IGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgZWRpdGluZyB0aGUgZHJpdmVyIGhlYWRlciBmaWxlLgorCSAgQWRkIGEgUFJPRklMRSBjb25maWcgb3B0aW9uLgorCS0gVXBkYXRlIENvbmZpZ3VyZS5oZWxwCisJLSBBZGQgY2FsbHMgdG8gbmV3IGZ1bmN0aW9uIG1kZWxheSgpIGZvciBtaWxsaS1zZWNvbmRzIGRlbGF5IGlmIAorCSAga2VybmVsIHZlcnNpb24gPj0gMi4xLjEwNS4KKwktIFJlcGxhY2UgYWxsIHByaW50ZihzKSBieSBwcmludGsocykuIEFmdGVyIGFsbCwgdGhlIG5jcjUzYzh4eCBpcyAKKwkgIGEgZHJpdmVyIGZvciBMaW51eC4KKwktIFBlcmZvcm0gYXV0by1zZW5zZSBvbiBDT01NQU5EIFRFUk1JTkFURUQuIE5vdCBzdXJlIGl0IGlzIHVzZWZ1bC4KKwktIFNvbWUgb3RoZXIgbWlub3IgY2hhbmdlcy4KKworVHVlIEp1biA0IDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAyLjZuCisJLSBDb2RlIGNsZWFudXAgYW5kIHNpbXBsaWZpY2F0aW9uOgorCSAgUmVtb3ZlIGtlcm5lbCAxLjIuWCBhbmQgMS4zLlggc3VwcG9ydC4KKwkgIFJlbW92ZSB0aGUgX29sZF8gdGFyZ2V0IGNhcGFiaWxpdGllcyB0YWJsZS4KKwkgIFJlbW92ZSB0aGUgZXJyb3IgcmVjb3ZlcnkgY29kZSB0aGF0IGhhdmUnbnQgYmVlbiByZWFsbHkgdXNlZnVsLgorCSAgVXNlIGEgc2luZ2xlIGFsaWdubWVudCBib3VuZGFyeSAoQ0FDSEVfTElORV9TSVpFKSBmb3IgZGF0YSAKKwkgIHN0cnVjdHVyZXMuCisJLSBTZXZlcmFsIGFnZ3Jlc3NpdmUgU0NSSVBUUyBvcHRpbWl6YXRpb25zIGFuZCBjaGFuZ2VzOgorCSAgUmVzZWxlY3QgU0NSSVBUUyBjb2RlIHJld3JpdHRlbi4KKwkgIFN1cHBvcnQgZm9yIHNlbGVjdGlvbi9yZXNlbGVjdGlvbiB3aXRob3V0IEFUTi4KKwkgIEFuZCBzb21lIG90aGVycy4KKwktIE1pc2NhbGxhbmVvdXMgY2hhbmdlcyBpbiB0aGUgQyBjb2RlOgorCSAgQ291bnQgYWN0dWFsIG51bWJlciBvZiBDQ0IgcXVldWVkIHRvIHRoZSBjb250cm9sbGVyIChmdXR1cmUgdXNlKS4KKwkgIExvdHMgb2Ygb3RoZXIgbWlub3IgY2hhbmdlcy4KKworV2VkIE1heSAxMyAyMDowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMi42bQorCS0gUHJvYmxlbSBvZiBtaXNzZWQgU0NTSSBidXMgcmVzZXQgd2l0aCB0aGUgNTNDODk1IGZpeGVkIGJ5IAorCSAgUmljaGFyZCBXYWx0aGFtLiBUaGUgNTNDODk1IG5lZWRzIGFib3V0IDY1MCB1cyBmb3IgdGhlIGJ1cyAKKwkgIG1vZGUgdG8gc2V0dGxlLiBEZWxheXMgdXNlZCB3aGlsZSByZXNldHRpbmcgdGhlIGNvbnRyb2xsZXIgCisJICBhbmQgdGhlIGJ1cyBoYXZlIGJlZW4gYWRqdXN0ZWQuIFRoYW5rcyBSaWNoYXJkIQorCS0gU29tZSBzaW1wbGlmaWNhdGlvbiBmb3IgNjQgYml0IGFyY2ggZG9uZSBjY2IgYWRkcmVzcyB0ZXN0aW5nLgorCS0gQWRkIGEgY2hlY2sgb2YgdGhlIE1TR19PVVQgcGhhc2UgYWZ0ZXIgU2VsZWN0aW9uIHdpdGggQVROLgorCS0gVGhlIG5ldyB0YWdnZWQgcXVldWUgc3R1ZmYgc2VlbXMgb2ssIHNvIHNvbWUgaW5mb3JtYXRpb25uYWwgCisJICBtZXNzYWdlIGhhdmUgYmVlbiBjb25kaXRpb25uZWQgYnkgdmVyYm9zZSA+PSAzLgorCS0gRG9ubm90IHJlc2V0IGlmIGEgU0JNQyBpbnRlcnJ1cHQgcmVwb3J0cyB0aGUgc2FtZSBidXMgbW9kZS4KKwktIFByaW50IG91dCB0aGUgd2hvbGUgZHJpdmVyIHNldC11cC4gU29tZSBvcHRpb25zIHdlcmUgbWlzc2luZyBhbmQgCisJICB0aGUgcHJpbnQgc3RhdGVtZW50IHdhcyBtaXNwbGFjZWQgZm9yIG1vZHVsZXMuCisJLSBJZ25vcmUgYSBTQ1NJIHBhcml0eSBpbnRlcnJ1cHQgaWYgdGhlIGNoaXAgaXMgbm90IGNvbm5lY3RlZCB0byAKKwkgIHRoZSBTQ1NJIGJ1cy4KKworU2F0IE1heSAxIDE2OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAyLjZsCisJLSBBZGQgQ0NCIGRvbmUgcXVldWUgc3VwcG9ydCBmb3IgQWxwaGEgYW5kIHBlcmhhcHMgc29tZSBvdGhlciAKKwkgIGFyY2hpdGVjdHVyZXMuCisJLSBBZGQgc29tZSBiYXJyaWVycyB0byBlbmZvcmNlIG1lbW9yeSBvcmRlcmluZyBmb3IgeDg2IGFuZCAKKwkgIEFscGhhIGFyY2hpdGVjdHVyZXMuCisJLSBGaXggc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhbiBvbGQgYnVnIGluIHRoZSBuZWdvIFNJUiAKKwkgIGludGVycnVwdCBjb2RlIGluIGNhc2Ugb2YgbmVnb3RpYXRpb24gZmFpbHVyZS4KKworU2F0IEFwciAyNSAyMTowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMi42aworCS0gUmVtb3ZlIGFsbCBhY2Nlc3NlcyB0byB0aGUgb24tY2hpcCBSQU0gZnJvbSB0aGUgQyBjb2RlOgorCSAgVXNlIFNDUklQVFMgdG8gbG9hZCB0aGUgb24tY2hpcCBSQU0uCisJICBVc2UgU0NSSVBUUyB0byByZXBhaXIgdGhlIHN0YXJ0IHF1ZXVlIG9uIHNlbGVjdGlvbiB0aW1lb3V0LgorCSAgVXNlIHRoZSBjb3B5IG9mIHNjcmlwdCBpbiBtYWluIG1lbW9yeSB0byBjYWxjdWxhdGUgdGhlIGNoaXAgCisJICBjb250ZXh0IG9uIHBoYXNlIG1pc21hdGNoLgorCS0gVGhlIGFib3ZlIGFsbG93cyBub3cgdG8gdXNlIHRoZSBvbi1jaGlwIFJBTSB3aXRob3V0IHJlcXVpcmluZyAKKwkgIHRvIGdldCBhY2Nlc3MgdG8gdGhlIG9uLWNoaXAgUkFNIGZyb20gdGhlIEMgY29kZS4gVGhpcyBtYWtlcyAKKwkgIG9uLWNoaXAgUkFNIHVzZWFibGUgZm9yIGxpbnV4LTEuMi4xMyBhbmQgZm9yIExpbnV4LUFscGhhIGZvciAKKwkgIGluc3RhbmNlLgorCS0gU29tZSBzaW1wbGlmaWNhdGlvbnMgYW5kIGNsZWFudXBzIGluIHRoZSBTQ1JJUFRTIGFuZCBDIGNvZGUuCisJLSBCdWdsZXQgZml4ZWQgaW4gcGFyaXR5IGVycm9yIHJlY292ZXJ5IFNDUklQVFMgKG5ldmVyIHRlc3RlZCkuCisJLSBNaW5vciB1cGRhdGVzIGluIFJFQURNRS5uY3I1M2M4eHguCisKK1dlZCBBcHIgMTUgMjE6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmoKKwktIEluY29ycG9yYXRlIGNoYW5nZXMgZnJvbSBsaW51eC0yLjEuOTUgbmNyNTNjOHh4IGRyaXZlciB2ZXJzaW9uLgorCS0gQWRkIFNNUCBzdXBwb3J0IGZvciBsaW51eC0yLjEuOTUgYW5kIGFib3ZlLgorCS0gRml4IGEgYnVnIHdoZW4gUVVFVUUgRlVMTCBpcyByZXR1cm5lZCBhbmQgbm8gY29tbWFuZHMgYXJlIAorCSAgZGlzY29ubmVjdGVkLiBUaGlzIGhhcHBlbnMgd2l0aCBBdGxhcyBJIC8gTDkxMiBhbmQgbWF5IGhhcHBlbiAKKwkgIHdpdGggQXRsYXMgSUkgLyBMWFk0LgorCS0gTmFpbCBhbm90aGVyIG9uZSBvbiBDSEVDSyBjb25kaXRpb24gd2hlbiByZXF1ZXVpbmcgdGhlIGNvbW1hbmQgCisJICBmb3IgYXV0by1zZW5zZS4KKwktIENhbGwgc2NzaV9kb25lKCkgZm9yIGFsbCBjb21wbGV0ZWQgY29tbWFuZHMgYWZ0ZXIgaW50ZXJydXB0IAorCSAgaGFuZGxpbmcuCisJLSBJbmNyZWFzZSB0aGUgZG9uZSBxdWV1ZSB0byAyNCBlbnRyaWVzLgorCitTYXQgQXByIDQgMjA6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmkKKwktIENURVNUMCBpcyB1c2VkIGJ5IHRoZSA1M0M4ODUgZm9yIFBvd2VyIE1hbmFnZW1lbnQgYW5kIAorCSAgcHJpb3JpdHkgc2V0dGluZyBiZXR3ZWVuIHRoZSAyIGZ1bmN0aW9ucy4KKwkgIFVzZSBTRElEIGluc3RlYWQgYXMgYWN0dWFsIHRhcmdldCBudW1iZXIuIEp1c3QgaGF2ZSBoYWQgdG8gCisJICBvdmVyd3JpdGUgaXQgd2l0aCBTU0lEIG9uIHJlc2VsZWN0aW9uLgorCS0gU3BsaXQgREFUQV9JTiBhbmQgREFUQV9PVVQgc2NyaXB0cyBpbnRvIDIgc3ViLXNjcmlwdHMuCisJICA2NCBzZWdtZW50cyBhcmUgbW92ZWQgZnJvbSBvbi1jaGlwIFJBTSBzY3JpcHRzLgorCSAgSWYgbW9yZSBzZWdtZW50cywgYSBzY3JpcHQgaW4gbWFpbiBtZW1vcnkgaXMgdXNlZCBmb3IgdGhlIAorCSAgYWRkaXRpb25hbCBzZWdtZW50cy4KKwktIFNpbmNlIHRoZSBTQ1JJUFRTIHByb2Nlc3NvciBjb250aW51ZXMgU0NSSVBUUyBleGVjdXRpb24gYWZ0ZXIgCisJICBoYXZpbmcgd29uIGFyYml0cmF0aW9uLCBkbyBzb21lIHN0dWZmIHByaW9yIHRvIHRlc3RpbmcgYW55IFNDU0kgCisJICBwaGFzZSBvbiByZXNlbGVjdGlvbi4gVGhpcyBzaG91bGQgaGF2ZSB0aGUgdmVydHVlIHRvIHByb2Nlc3MgCisJICBzY3JpcHRzIGluIHBhcmFsbGVsIHdpdGggdGhlIFNDU0kgY29yZSBwZXJmb3JtaW5nIHNlbGVjdGlvbi4KKwktIEluY3JlYXNlIHRoZSBkb25lIHF1ZXVlIHRvIDEyIGVudHJpZXMuCisKK1N1biBNYXIgMjkgMTI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmgKKwktIFNvbWUgZml4ZXMuCisKK1R1ZSBNYXIgMjYgMjM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmcKKwktIE5ldyBkb25lIHF1ZXVlLiA4IGVudHJpZXMgYnkgZGVmYXVsdCAoNiBhbHdheXMgdXNlYWJsZSkuCisJICBDYW4gYmUgaW5jcmVhc2VkIGlmIG5lZWRlZC4KKwktIFJlc291cmNlcyBtYW5hZ2VtZW50IHVzaW5nIGRvdWJseSBsaW5rZWQgcXVldWVzLgorCS0gTmV3IGF1dG8tc2Vuc2UgYW5kIFFVRVVFIEZVTEwgaGFuZGxpbmcgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIAorCSAgc3RhbGwgdGhlIE5DUiBxdWV1ZSBhbnkgbW9yZS4KKwktIE5ldyBDQ0Igc3RhcnZhdGlvbiBhdm9pZGluZyBhbGdvcml0aG0uCisJLSBQcmVwYXJlIENDQnMgZm9yIFNDU0kgY29tbWFuZHMgdGhhdCBjYW5ub3QgYmUgcXVldWVkLCBpbnN0ZWFkIG9mIAorCSAgaW5zZXJ0aW5nIHRoZXNlIGNvbW1hbmRzIGludG8gdGhlIHdhaXRpbmcgbGlzdC4gVGhlIHdhaXRpbmcgbGlzdCAKKwkgIGlzIG5vdyBvbmx5IHVzZWQgd2hpbGUgcmVzZXR0aW5nIGFuZCB3aGVuIG1lbW9yeSBmb3IgQ0NCcyBpcyBub3QgCisJICB5ZXQgYXZhaWxhYmxlPworCitTdW4gRmViIDggMjI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmYKKwktIFNvbWUgZml4ZXMgaW4gb3JkZXIgdG8gcmVhbGx5IHN1cHBvcnQgdGhlIDUzQzg5NSwgYXQgbGVhc3Qgd2l0aCAKKwkgIEZBU1QtMjAgZGV2aWNlcy4KKwktIEhlYXZ5IGNoYW5nZXMgaW4gdGhlIHRhcmdldC9sdW4gcmVzb3VyY2VzIG1hbmFnZW1lbnQgdG8gYWxsb3cgCisJICB0aGUgc2NyaXB0cyB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBDQ0Igb24gcmVzZWxlY3Rpb24gaW5zdGVhZCAKKwkgIG9mIHdhbGtpbmcgb24gdGhlIGx1biBDQ0JzIGxpc3QuIFVwIHRvIDMyIHRhZ3MgcGVyIGx1biBhcmUgbm93IAorCSAgc3VwcG9ydGVkIHdpdGhvdXQgc2NyaXB0IHByb2Nlc3NvciBhbmQgUENJIHRyYWZmaWMgb3ZlcmhlYWQuCisKK1N1biBKYW4gMTEgMjI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmQKKwktIG5ldyAoZGlmZmVyZW50ID8pIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGFydCBxdWV1ZToKKyAgICAgICAgICBVc2UgYSBzaW1wbGUgQ0FMTCB0byBhIGxhdW5jaCBzY3JpcHQgaW4gdGhlIENDQi4KKwktIGltcGxlbWVudCBhIG1pbmltYWwgZG9uZSBxdWV1ZSAoMSBlbnRyeSA6LSkgKS4KKyAgICAgICAgICB0aGlzIGF2b2lkIHNjYW5uaW5nIGFsbCBDQ0JzIG9uIElOVCBGTFkgKE9ubHkgc2NhbiBhbGwgQ0NCcywgb24gCisgICAgICAgICAgb3ZlcmZsb3cpLiBIaXQgcmF0aW8gaXMgYmV0dGVyIHRoYW4gOTkuOSAlIG9uIG15IHN5c3RlbSwgc28gbm8gCisgICAgICAgICAgbmVlZCB0byBoYXZlIGEgbGFyZ2VyIGRvbmUgcXVldWUuCisJLSBnZW5lcmFsaXphdGlvbiBvZiB0aGUgcmVzdGFydCBvZiBDQ0Igb24gc3BlY2lhbCBjb25kaXRpb24gYXMgCisgICAgICAgICAgQWJvcnQsIFFVRVVFIEZVTEwsIENIRUNLIENPTkRJVElPTi4KKyAgICAgICAgICBUaGlzIGhhcyBiZWVuIGNhbGxlZCAnc2lsbHkgc2NoZWR1bGVyJy4KKwktIG1ha2UgYWxsIHRoZSBwcm9maWxpbmcgY29kZSBjb25kaXRpb25uZWQgYnkgYSBjb25maWcgb3B0aW9uLgorCSAgVGhpcyBzcGFyZSBzb21lIFBDSSB0cmFmZmljIGFuZCBDIGNvZGUgd2hlbiB0aGlzIGZlYXR1cmUgaXMgbm90IAorICAgICAgICAgIG5lZWRlZC4KKwktIGhhbmRsZSBtb3JlIGNsZWFubHkgdGhlIHNpdHVhdGlvbiB3aGVyZSBkaXJlY3Rpb24gaXMgdW5rbm93bi4KKwkgIFRoZSBwb2ludGVycyBwYXRjaGluZyBpcyBub3cgcGVyZm9ybWVkIGJ5IHRoZSBTQ1JJUFRTIHByb2Nlc3Nvci4KKwktIHJlbW92ZSBzb21lIHVzZWxlc3Mgc2NyaXB0cyBpbnN0cnVjdGlvbnMuCisKKwlQb3J0ZWQgZnJvbSBkcml2ZXIgMi41IHNlcmllczoKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLSBVc2UgRkFTVC01IGluc3RlYWQgb2YgU0xPVyBmb3Igc2xvdyBzY3NpIGRldmljZXMgYWNjb3JkaW5nIHRvIAorCSAgbmV3IFNQSS0yIGRyYWZ0LgorCS0gTWFrZSBzb21lIGNoYW5nZXMgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgd2l0aCA4NzUgcmV2IDw9IDMgCisJICBkZXZpY2UgZXJyYXRhIGxpc3RpbmcgMzk3LiBNaW5vciBjb25zZXF1ZW5jZXMgYXJlOgorCSAgLiBMZWF2ZSB1c2Ugb2YgUENJIFdyaXRlIGFuZCBJbnZhbGlkYXRlIHVuZGVyIHVzZXIgY29udHJvbC4KKwkgICAgTm93LCBieSBkZWZhdWx0IHRoZSBkcml2ZXIgZG9lcyBub3QgZW5hYmxlIFBDSSBNV0kgYW5kIG9wdGlvbgorCSAgICAnc3BlY2Y6eScgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4KKwkgIC4gTWVtb3J5IFJlYWQgTGluZSBpcyBub3QgZW5hYmxlZCBmb3IgODc1IGFuZCA4NzUtbGlrZSBjaGlwcy4KKwkgIC4gUHJvZ3JhbW1lZCBidXJzdCBsZW5ndGggc2V0IHRvIDY0IERXT1JEUyAoaW5zdGVhZCBvZiAxMjgpLgorCSAgICAoTm90ZTogU1lNQklPUyB1c2VzIDMyIERXT1JEUyBmb3IgdGhlIFNETVMgQklPUykKKwktIEFkZCAnYnVzY2hrJyBib290IG9wdGlvbi4KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY2hlY2tpbmcgb2YgU0NTSSBCVVMgZGF0YSBsaW5lcyBhZnRlciBTQ1NJIAorCSAgUkVTRVQgKHNldCBieSBkZWZhdWx0KS4gKFN1Ym1pdHRlZCBieSBSaWNoYXJkIFdhbHRoYW0pLgorCS0gVXBkYXRlIHRoZSBSRUFETUUgZmlsZS4KKwktIERpc3BhdGNoIENPTkRJVElPTiBNRVQgYW5kIFJFU0VSVkFUSU9OIENPTkZMSUNUIHNjc2kgc3RhdHVzIAorCSAgYXMgT0sgZHJpdmVyIHN0YXR1cy4KKwktIFVwZGF0ZSB0aGUgUkVBRE1FIGZpbGUgYW5kIHRoZSBTeW1iaW9zIE5WUkFNIGZvcm1hdCBkZWZpbml0aW9uIAorCSAgd2l0aCByZW1vdmFibGUgbWVkaWEgZmxhZ3MgdmFsdWVzIChhdmFpbGFibGUgd2l0aCBTRE1TIDQuMDkpLgorCS0gU2V2ZXJhbCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgZml4LXVwcyBmb3IgcG93ZXJwYy4KKwkgIChQYXRjaCBzZW50IGJ5IENvcnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHggYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLnN5bTUzYzh4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjk4NWVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHgKQEAgLTAsMCArMSw1OTMgQEAKK1NhdCBNYXkgMTIgMTI6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNy4zYworCS0gRW5zdXJlIExFREMgYml0IGluIEdQQ05UTCBpcyBjbGVhcmVkIHdoZW4gcmVhZGluZyB0aGUgTlZSQU0uCisJICBGaXggc2VudCBieSBTdGlnIFRlbGZlciA8c3RpZ0BhcGktbmV0d29ya3MuY29tPi4KKwktIEJhY2twb3J0IGZyb20gU1lNLTIgdGhlIHdvcmstYXJvdW5kIHRoYXQgYWxsb3dzIHRvIHN1cHBvcnQgCisJICBoYXJkd2FyZXMgdGhhdCBmYWlsIFBDSSBwYXJpdHkgY2hlY2tpbmcuCisJLSBDaGVjayB0aGF0IHdlIHJlY2VpdmVkIGF0IGxlYXN0IDggYnl0ZXMgb2YgSU5RVUlSWSByZXNwb25zZSAKKwkgIGZvciBieXRlIDcsIHRoYXQgY29udGFpbnMgZGV2aWNlIGNhcGFiaWxpdGllcywgdG8gYmUgdmFsaWQuCisJLSBEZWZpbmUgc2NzaV9zZXRfcGNpX2RldmljZSgpIGFzIG5pbCBmb3Iga2VybmVsIDwgMi40LjQuCisJLSArIEEgY291cGxlIG9mIG1pbm9yIGNoYW5nZXMuCisJICAKK1NhdCBBcHIgNyAxOTozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjNiCisJLSBGaXggYW4gdW5hbGlnbmVkIExPQUQgZnJvbSBzY3JpcHRzICh3YXMgdXNlZCBhcyBkdW1teSByZWFkKS4KKwktIEluIG5jcl9zb2Z0X3Jlc2V0KCksIG9ubHkgdHJ5IHRvIEFCT1JUIHRoZSBjdXJyZW50IG9wZXJhdGlvbiAKKwkgIGZvciBjaGlwcyB0aGF0IHN1cHBvcnQgU1JVTiBiaXQgaW4gSVNUQVQxIGFuZCBpZiBTQ1JJUFRTIGFyZSAKKwkgIGN1cnJlbnRseSBydW5uaW5nLCBhcyA4OTYgYW5kIDEwMTAgbWFudWFscyBzdWdnZXN0LgorCS0gSW4gdGhlIENDQiBhYm9ydCBwYXRoLCBkbyBub3QgYXNzdW1lIHRoYXQgdGhlIENDQiBpcyBjdXJyZW50bHkgCisJICBxdWV1ZWQgdG8gU0NSSVBUUy4gVGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIG5vdGFibHkgYWZ0ZXIgYSAKKwkgIFFVRVVFIEZVTEwgc3RhdHVzIG9yIHdoZW4gdXNpbmcgdW50YWdnZWQgY29tbWFuZHMuCisKK1N1biBNYXIgNCAxODozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjNhCisJLSBGaXggYW4gaXNzdWUgaW4gdGhlIG5jcl9pbnRfdWRjKCkgKHVuZXhwZWN0ZWQgZGlzY29ubmVjdCkKKwkgIGhhbmRsaW5nLiBJZiB0aGUgRFNBIGRpZG4ndCBtYXRjaCBhIENDQiwgYSBiYWQgd3JpdGUgdG8gCisJICBtZW1vcnkgY291bGQgaGFwcGVuLgorCitNb24gRmViIDEyIDIyOjMwIDIwMDEgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjcuMworCS0gU3VwcG9ydCBmb3IgaHBwYS4KKwkgIFRpbnkgcGF0Y2ggc2VudCB0byBtZSBieSBSb2JlcnQgSGlyc3QuCisJLSBUaW55IHBhdGNoIGZvciBpYTY0IHNlbnQgdG8gbWUgYnkgUGFtZWxhIERlbGFuZXkuCisKK1R1ZSBGZWIgNiAxMzozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjMtcHJlMQorCS0gQ2FsbCBwY2lfZW5hYmxlX2RldmljZSgpIGFzIEFDIHdhbnRzIHRoaXMgdG8gYmUgZG9uZS4KKwktIEdldCBib3RoIHRoZSBCQVIgY29va2llcyB1c2VkIGJ5IENQVSBhbmQgYWN0dWFsIFBDSSBCQVIgCisJICB2YWx1ZXMgdXNlZCBmcm9tIFNDUklQVFMuIFJlY2VudCBQQ0kgY2hpcHMgYXJlIGFibGUgdG8gCisJICBhY2Nlc3MgdGhlbXNlbHZlcyB1c2luZyBpbnRlcm5hbCBjeWNsZXMsIGJ1dCB0aGV5IGNvbXBhcmUgCisJICBCQVIgdmFsdWVzIHRvIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG8gbWFrZSBkZWNpc2lvbi4KKwkgIEVhcmxpZXIgY2hpcHMgc2ltcGx5IHVzZSBQQ0kgdHJhbnNhY3Rpb25zIHRvIGFjY2VzcyBJTyAKKwkgIHJlZ2lzdGVycyBmcm9tIFNDUklQVFMuCisJICBUaGUgYnVzX2R2bWFfdG9fbWVtKCkgaW50ZXJmYWNlIHRoYXQgcmV2ZXJzZXMgdGhlIGFjdHVhbCAKKwkgIFBDSSBCQVIgdmFsdWUgZnJvbSB0aGUgQkFSIGNvb2tpZSBpcyBub3cgdXNlbGVzcy4KKwkgIFRoaXMgcG9pbnQgaGFkIGJlZW4gZGlzY3Vzc2VkIGF0IHRoZSBsaXN0IGFuZCB0aGUgc29sdXRpb24gCisJICBnb3QgYXBwcm92ZWQgYnkgUENJIGNvZGUgbWFpbnRhaW5lciAoTWFydGluIE1hcmVzKS4KKwktIE1lcmdlIGNoYW5nZXMgZm9yIGxpbnV4LTIuNCB0aGF0IGRlY2xhcmUgdGhlIGhvc3QgdGVtcGxhdGUgCisJICBpbiB0aGUgZHJpdmVyIG9iamVjdCBhbHNvIHdoZW4gdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IAorCSAgbGlua2VkIHdpdGggdGhlIGtlcm5lbC4KKwktIEluY3JlYXNlIFNDU0kgbWVzc2FnZSBzaXplIHVwIHRvIDEyIGJ5dGVzLCBnaXZlbiB0aGF0IDggCisJICBieXRlcyB3YXMgbm90IGVub3VnaCBmb3IgdGhlIFBQUiBtZXNzYWdlIChmaXgpLgorCS0gQWRkIGZpZWxkICdtYXhvZmZzX3N0JyAobWF4IG9mZnNldCBmb3IgU1QgZGF0YSB0cmFuc2ZlcnMpLgorCSAgVGhlIEMxMDEwIHN1cHBvcnRzIG9mZnNldCA2MiBpbiBEVCBtb2RlIGJ1dCBvbmx5IDMxIGluIAorCSAgU1QgbW9kZSwgdG8gMiBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUgbWF4IFNDU0kgb2Zmc2V0IAorCSAgYXJlIG5lZWRlZC4gUmVwbGFjZSB0aGUgb2J2aW91c2x5IHdyb25nIG1hc2tpbmcgb2YgdGhlIAorCSAgb2Zmc2V0IGFnYWluc3QgMHgxZiBmb3IgU1QgbW9kZSBieSBhIGxvd2VyaW5nIHRvIAorCSAgbWF4b2Zmc19zdCBvZiB0aGUgU0NTSSBvZmZzZXQgaW4gU1QgbW9kZS4KKwktIFJlZmluZSBhIHdvcmstYXJvdW5kIGZvciB0aGUgQzEwMTAtNjYuIFJldmlzaW9uIDEgZG9lcyAKKwkgIG5vdCByZXF1aXJlcyBleHRyYSBjeWNsZXMgaW4gRFQgREFUQSBPVVQgcGhhc2UuCisJLSBBZGQgYSBtaXNzaW5nIGVuZGlhbi1pemF0aW9uIChhYnJ0X3RibC5hZGRyKS4KKwktIE1pbm9yIGNsZWFuLXVwIGluIHRoZSBucCBzdHJ1Y3R1cmUgZm9yIGZpZWxkcyBhY2Nlc3NlZCAKKwkgIGZyb20gU0NSSVBUUyB0aGF0IHJlcXVpcmVzIHNwZWNpYWwgYWxpZ25tZW50cy4KKworU3VuIFNlcCAyNCAyMTozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjIKKwktIFJlbW92ZSB0aGUgaGFjayBmb3IgUFBDIGFkZGVkIGluIHByZXZpb3VzIGRyaXZlciB2ZXJzaW9uLgorCS0gQWRkIEZFX0RBQyBmZWF0dXJlIGJpdCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIDY0IGJpdCBQQ0kgCisJICBhZGRyZXNzaW5nIChGRV9EQUMpIGFuZCA2NCBiaXQgUENJIGludGVyZmFjZSAoRkVfNjRCSVQpLgorCS0gR2V0IHJpZCBvZiB0aGUgYm9vdCBjb21tYW5kIGxpbmUgInVsdHJhOiIgYXJndW1lbnQuCisJICBUaGlzIHBhcmFtZXRlciB3YXNuJ3QgdGhhdCBjbGV2ZXIgc2luY2Ugd2UgY2FuIHVzZSAic3luYzoiIAorCSAgZm9yIFVsdHJhL1VsdHJhMiBzZXR0aW5ncywgYW5kIGZvciBVbHRyYTMgd2UgbWF5IHdhbnQgdG8gCisJICBwYXNzIFBQUiBvcHRpb25zIChmb3Igbm93IG9ubHkgRFQgY2xvY2tpbmcpLgorCS0gQWRkIEZFX1ZBUkNMSyBmZWF0dXJlIGJpdCB0aGF0IGluZGljYXRlcyB0aGF0IFNDU0kgY2xvY2sgCisJICBmcmVxdWVuY3kgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIGJvYXJkIGRlc2lnbiBhbmQgdGh1cywgCisJICB0aGUgZHJpdmVyIHNob3VsZCB0cnkgdG8gZXZhbHVhdGUgdGhlIFNDU0kgY2xvY2suCisJLSBTaW1wbGlmeSB0aGUgd2F5IHRoZSBkcml2ZXIgZGV0ZXJtaW5lIHRoZSBTQ1NJIGNsb2NrOgorCSAgVUxUUkEzIC0+IDE2MCBNSHosIFVMVFJBMiAtPiA4MCBNSHogb3RoZXJ3aXNlIDQwIE1Iei4KKwkgIE1lYXN1cmUgdGhlIFNDU0kgY2xvY2sgZnJlcXVlbmN5IGlmIEZFX1ZBUkNMSyBpcyBzZXQuCisJLSBSZW1vdmUgRkVfQ0xLODAgZmVhdHVyZSBiaXQgdGhhdCBnb3QgdXNlbGVzcy4KKwktIEFkZCBzdXBwb3J0IGZvciB0aGUgU1lNNTNDODc1QSAoUGFtZWxhIERlbGFuZXkpLgorCitXZWQgSnVsIDI2IDIzOjMwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjcuMQorCS0gUHJvdmlkZSBPcGVuRmlybWFyZSBwYXRoIHRocm91Z2ggdGhlIHByb2MgRlMgb24gUFBDLgorCS0gRG93bmxvYWQgb2Ygb24tY2hpcCBTUkFNIHVzaW5nIG1lbWNweV90b2lvKCkgZG9lc24ndCB3b3JrIAorCSAgb24gUFBDLiBSZXN0b3JlIHByZXZpb3VzIG1ldGhvZCAoTUVNT1JZIE1PVkUgZnJvbSBTQ1JJUFRTKS4KKwktIFJlbW92ZSB0cmFpbGluZyBhcmd1bWVudCAjMiBmcm9tIGEgY291cGxlIG9mICN1bmRlZnMuCisKK1N1biBKdWwgMDkgMTY6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNy4wCisJLSBSZW1vdmUgdGhlIFBST0ZJTEUgQyBhbmQgU0NSSVBUUyBjb2RlLgorCSAgVGhpcyBmYWNpbGl0eSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCB0aHVzIHdhcyBub3QgbG9uZ2VyIAorCSAgZGVzaXJhYmxlIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgb2YgdGhlIGRyaXZlciBjb2RlLgorCS0gTWVyZ2VzIGZyb20gRnJlZUJTRCBzeW0tMS42LjIgZHJpdmVyOgorCSAgKiBDbGFyaWZ5IG1lbW9yeSBiYXJyaWVycyBuZWVkZWQgYnkgdGhlIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyAKKwkgICAgdGhhdCBpbXBsZW1lbnQgYSB3ZWFrIG1lbW9yeSBvcmRlcmluZy4KKwkgICogU2ltcGxlciBoYW5kbGluZyBvZiBpbGxlZ2FsIHBoYXNlcyBhbmQgZGF0YSBvdmVycnVuIGZyb20gCisJICAgIFNDUklQVFMuIFRoZXNlIGVycm9ycyBhcmUgbm93IGltbWVkaWF0ZWx5IHJlcG9ydGVkIHRvIAorCSAgICB0aGUgQyBjb2RlIGJ5IGFuIGludGVycnVwdC4KKwkgICogU3luYyB0aGUgcmVzaWR1YWwgaGFuZGxpbmcgY29kZSB3aXRoIHN5bS0xLjYuMiBhbmQgbm93IAorCSAgICByZXBvcnQgYHJlc2lkJyB0byB1c2VyIGZvciBsaW51eCB2ZXJzaW9uID49IDIuMy45OSAKKwktIEdlbmVyYWwgY2xlYW51cDoKKwkgIE1vdmUgZGVmaW5pdGlvbnMgZm9yIGJhcnJpZXJzIGFuZCBJTy9NTUlPIG9wZXJhdGlvbnMgdG8gdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBoZWFkZXIgZmlsZXMuIFRoZXkgYXJlIG5vdyBzaGFyZWQgYnkgdGhlIAorCSAgYm90aCBkcml2ZXJzLgorCSAgUmVtb3ZlIHVudXNlZCBvcHRpb25zIHRoYXQgY2xhaW1lZCB0byBvcHRpbWl6ZSBmb3IgdGhlIDg5Ni4KKwkgIElmIGZhY3QsIHRoZXkgd2VyZSBub3QgdGhpcyBjbGV2ZXIuIDopCisJICBVc2UgU0NTSV9OQ1JfSU9NQVBQRUQgaW5zdGVhZCBvZiBOQ1JfSU9NQVBQRUQuCisJICBSZW1vdmUgYSBjb3VwbGUgb2YgdW51c2VkIGZpZWxkcyBmcm9tIGRhdGEgc3RydWN0dXJlcy4KKworVGh1IE1heSAxMSAxMjo0MCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNmIKKwktIE1lcmdlZCB2ZXJzaW9uLgorCitNb24gQXByIDI0IDEyOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVtCisJLSBSZXR1cm4gdmFsdWUgMSAoaW5zdGVhZCBvZiAwKSBmcm9tIHRoZSBkcml2ZXIgc2V0dXAgcm91dGluZS4KKwktIERvIG5vdCBlbmFibGUgUENJIERBQyBjeWNsZXMuIFRoaXMganVzdCBicm9rZSBzdXBwb3J0IGZvciAKKwkgIFNZTTUzNEM4OTYgb24gc3BhcmM2NC4gUHJvYmxlbSBmaXhlZCBieSBEYXZpZCBTLiBNaWxsZXIuCisKK0ZyaSBBcHIgMTQgOTowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNmItOQorCS0gQWRkZWQgNTNDMTAxMF82NiBzdXBwb3J0LgorCS0gU21hbGwgZml4IHRvIGludGVncml0eSBjaGVja2luZyBjb2RlLgorCS0gUmVtb3ZlZCByZXF1aXJlbWVudCBmb3IgaW50ZWdyaXR5IGNoZWNraW5nIGlmIHdhbnQgdG8gcnVuCisJICBhdCB1bHRyYSAzLgorIAorU2F0IEFwciAxICAxMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41bAorCS0gVGlueSBjaGFuZ2UgZm9yIF9fc3BhcmNfXyBhcHBlYXJlZCBpbiAyLjMuOTktcHJlNC4xIHRoYXQgCisJICBhcHBsaWVzIHRvIGNhY2hlIGxpbmUgc2l6ZSAoPyBQcm9iYWJseSBmcm9tIERhdmlkIFMgTWlsbGVyKS4KKwktIE1ha2Ugc3VyZSBubyBkYXRhIHRyYW5zZmVyIHdpbGwgaGFwcGVuIGZvciBTY3NpX0NtbmQgcmVxdWVzdHMgCisJICB0aGF0IHN1cHBseSBTQ1NJX0RBVEFfTk9ORSBkaXJlY3Rpb24gKHRoaXMgYXZvaWRzIHNvbWUgQlVHKCkgCisJICBzdGF0ZW1lbnQgaW4gdGhlIFBDSSBjb2RlIHdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBhbHNvIHN1cHBsaWVkKS4KKworU2F0IE1hciAxMSAxMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS42Yi01CisJLSBUZXN0IGFnYWluc3QgZXhwZWN0ZWQgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gZnJvbSBTQ1JJUFRTLgorCS0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZHluYW1pYyBkbWEgbWFwcGluZyBrZXJuZWwgaW50ZXJmYWNlLgorCSAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorCSAgTWFueSB0aGFua3MgdG8gRGF2aWQgUy4gTWlsbGVyIGZvciBoaXMgcHJlbGltaW5hcnkgY2hhbmdlcyAKKwkgIHRoYXQgaGF2ZSBiZWVuIHVzZWZ1bCBndWlkZWxpbmVzLgorCS0gR2V0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGZyb20gdGhlIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgCisJICAoU2NzaV9DbW5kKSB3aXRoIGtlcm5lbHMgdGhhdCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24uCisKK01vbiBNYXIgIDYgMjM6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNWsKKwktIFRlc3QgYWdhaW5zdCBleHBlY3RlZCBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBmcm9tIFNDUklQVFMuCisJLSBSZXZlcnQgdGhlIGNoYW5nZSBpbiAnbmNyX2ZsdXNoX2RvbmVfY21kcygpJyBidXQgdW5tYXAgdGhlIAorCSAgc2NzaSBkbWEgYnVmZmVyIHByaW9yIHRvIHF1ZXVlaW5nIHRoZSBjb21tYW5kIHRvIG91ciBkb25lIAorCSAgbGlzdC4KKwktIE1pc2NlbGxhbmVvdXMgKG1pbm9yKSBmaXhlcyBpbiB0aGUgY29kZSBhZGRlZCBpbiBkcml2ZXIgCisJICB2ZXJzaW9uIDEuNWouCisKK01vbiBGZWIgMTQgNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKyAJKiB2ZXJzaW9uIHN5bTUzYzh4eC1wcmUtMS42Yi0yLgorCS0gVXBkYXRlZCB0aGUgU0NSSVBUUyBlcnJvciBoYW5kbGluZyBvZiB0aGUgU1dJREUKKwkgIGNvbmRpdGlvbiAtIHRvIHJlbW92ZSBhbnkgcmVhZHMgb2YgdGhlIHNiZGwKKwkgIHJlZ2lzdGVyLiBDaGFuZ2VzIG5lZWRlZCBiZWNhdXNlIHRoZSA4OTYgYW5kIDEwMTAKKwkgIGNoaXBzIHdpbGwgY2hlY2sgcGFyaXR5IGluIHNvbWUgc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCSAgVGhpcyB3aWxsIGNhdXNlIGEgcGFyaXR5IGVycm9yIGludGVycnVwdCBpZiBub3QgaW4KKwkgIGRhdGEgcGhhc2UuICBDaGFuZ2VzIGJhc2VkIG9uIHRob3NlIG1hZGUgaW4gdGhlCisJICBGcmVlQlNEIGRyaXZlciB2ZXJzaW9uIDEuMy4yLgorCitTdW4gRmViIDIwIDExOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVqCisJLSBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBkeW5hbWljIGRtYSBtYXBwaW5nIGtlcm5lbCBpbnRlcmZhY2UuCisJICBSZXF1aXJlcyBMaW51eC0yLjMuNDcgKHRlc3RlZCB3aXRoIHByZS0yLjMuNDctNikuCisJICBNYW55IHRoYW5rcyB0byBEYXZpZCBTLiBNaWxsZXIgZm9yIGhpcyBwcmVsaW1pbmFyeSBjaGFuZ2VzIAorCSAgdGhhdCBoYXZlIGJlZW4gdXNlZnVsIGd1aWRlbGluZXMsIGZvciBoYXZpbmcgcmV2aWV3ZWQgdGhlIAorCSAgY29kZSBhbmQgaGF2aW5nIHRlc3RlZCB0aGlzIGRyaXZlciB2ZXJzaW9uIG9uIFVsdHJhLVNwYXJjLgorCS0gMiB0aW55IGJ1Z3MgZml4ZWQgaW4gdGhlIFBDSSB3cmFwcGVyIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCAKKwkgIGZvciBlYXJseSBrZXJuZWxzIHdpdGhvdXQgcGNpIGRldmljZSBzdHJ1Y3R1cmUuCisJLSBHZXQgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gZnJvbSB0aGUgc2NzaSBjb21tYW5kIHN0cnVjdHVyZSAKKwkgIChTY3NpX0NtbmQpIHdpdGgga2VybmVscyB0aGF0IHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbi4KKwktIEZpeCBhbiBvbGQgYnVnIHRoYXQgb25seSBhZmZlY3RlZCA4OTYgcmV2LiAxIHdoZW4gZHJpdmVyIAorCSAgcHJvZmlsZSBzdXBwb3J0IG9wdGlvbiB3YXMgc2V0IGluIGtlcm5lbCBjb25maWd1cmF0aW9uLgorCitGcmkgSmFuIDE0IDE0OjAwIDIwMDAgUGFtIERlbGFuZXkgKHBhbS5kZWxhbmV5QGxzaWwuY29tKQorIAkqIHZlcnNpb24gc3ltNTNjOHh4LXByZS0xLjZiLTEuCisJLSBNZXJnZSBwYXJhbGxlbCBkcml2ZXIgc2VyaWVzIDEuNjEgYW5kIDEuNWUgCisKK1R1ZSBKYW4gMTEgMTQ6MDAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjYxCisJLSBBZGRlZCBzdXBwb3J0IGZvciBtb3VudGluZyBkaXNrcyBvbiB3aWRlLW5hcnJvdy13aWRlCisJICBzY3NpIGNvbmZpZ3VyYXRpb25zLiAKKwktIE1vZGlmaWVkIG9mZnNldCB0byBiZSBhIG1heGltdW0gb2YgMzEgaW4gU1QgbW9kZSwgCisJICA2MiBpbiBEVCBtb2RlLgorCS0gQmFzZWQgb2ZmIG9mIDEuNjAKKworTW9uIEphbiAxMCAxMDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNjAKKwktIEFkZGVkIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpbnRlZ3JpdHkgY2hlY2tpbmcgY29kZQorCSAgaW4gdGhlIGtlcm5lbCAob3B0aW9uYWwpLgorCS0gIEFkZGVkIFBQUiBuZWdvdGlhdGlvbi4KKwktIEFkZGVkIHN1cHBvcnQgZm9yIDUzQzEwMTAgVWx0cmEgMyBwYXJ0LgorCS0gQmFzZWQgb2ZmIG9mIDEuNWYKKworU2F0IEphbiA4ICAyMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41aAorCS0gQWRkIHllYXIgMjAwMCBjb3B5cmlnaHQuCisJLSBEaXNwbGF5IGNvcnJlY3RseSBidXMgc2lnbmFscyB3aGVuIGJ1cyBpcyBkZXRlY3RlZCB3cm9uZy4KKwktIFNvbWUgZml4IGZvciBTcGFyYyBmcm9tIERTTSB0aGF0IHdlbnQgZGlyZWN0bHkgdG8ga2VybmVsIHRyZWUuCisKK01vbiBEZWMgNiAgMjI6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNWcKKwktIENoYW5nZSBtZXNzYWdlcyB3cml0dGVuIGJ5IHRoZSBkcml2ZXIgYXQgaW5pdGlhbGlzYXRpb24gYW5kIAorCSAgdGhyb3VnaCB0aGUgL3Byb2MgRlMgKHJhdGhlciBjb3NtZXRpYyBjaGFuZ2VzIHRoYXQgY29uc2lzdCBpbgorCSAgcHJpbnRpbmcgb3V0IHRoZSBQQ0kgYnVzIG51bWJlciBhbmQgUENJIGRldmljZS9mdW5jdGlvbikuCisJLSBFbnN1cmUgdGhlIFNDUklQVFMgcHJvY2Vzc29yIGlzIHN0b3BwZWQgd2hpbGUgY2FsaWJyYXRpbmcgdGhlIAorCSAgU0NTSSBjbG9jayAodGhlIGluaXRpYWxpc2F0aW9uIGNvZGUgaGFzIGJlZW4gYSBiaXQgcmV3b3JrZWQpLgorCSAgQ2hhbmdlIG1vdmVkIHRvIHRoZSBGcmVlQlNEIHN5bV9oaXBkIGRyaXZlcikuCisJLSBTb21lIGZpeGVzIGluIHRoZSBNT0RJRllfRFAvSUdOX1JFU0lEVUUgY29kZSBhbmQgcmVzaWR1YWwgCisJICBjYWxjdWxhdGlvbiAobW92ZWQgZnJvbSBGcmVlQlNEIHN5bV9oaXBkIGRyaXZlcikuCisJLSBBZGQgTlZSQU0gc3VwcG9ydCBmb3IgVGVrcmFtIGJvYXJkcyB0aGF0IHVzZSAyNEMxNiBFRVBST00uCisJICBDb2RlIG1vdmVkIGZyb20gdGhlIEZyZWVCU0Qgc3ltX2hpcGQgZHJpdmVyLCBzaW5jZSBpdCBoYXMgCisJICBiZWVuIHRoYXQgb25lIHRoYXQgZ290IHRoaXMgZmVhdHVyZSBmaXJzdC4KKwktIERlZmluaXRlbHkgZGlzYWJsZSBvdmVybGFwcGVkIFBDSSBhcmJpdHJhdGlvbiBmb3IgYWxsIGR1YWwgCisJICBmdW5jdGlvbiBjaGlwcywgc2luY2UgSSBjYW5ub3QgbWFrZSBzdXJlIGZvciB3aGF0IGNoaXAgcmV2aXNpb25zIAorCSAgaXQgaXMgYWN0dWFsbHkgc2FmZS4KKwktIEFkZCBzdXBwb3J0IGZvciB0aGUgU1lNNTNDMTUxMEQgKGFsc28gZm9yIG5jcjUzYzh4eCkuCisJLSBGaXggdXAgcHJvcGVybHkgdGhlIFBDSSBsYXRlbmN5IHRpbWVyIHdoZW4gbmVlZGVkIG9yIGFza2VkIGZvci4KKwktIEdldCByaWQgb2YgdGhlIG9sZCBQQ0kgYmlvcyBpbnRlcmZhY2UsIGJ1dCBwcmVzZXJ2ZSBrZXJuZWwgMi4wIAorCSAgY29tcGF0aWJpbGl0eSBmcm9tIGEgc2ltcGxlIHdyYXBwZXIuCisJLSBVcGRhdGUgdGhlIHBvb3IgVGVrcmFtIHN5bmMgZmFjdG9yIHRhYmxlLgorCS0gRml4IGluIGEgdGlueSAncHJpbnRrJyBidWcgdGhhdCBtYXkgb29wcyBpbiBjYXNlIG9mIGV4dGVuZGVkIAorCSAgZXJyb3JzICh1bnJlY292ZXJlZCBwYXJpdHkgZXJyb3IsIGRhdGEgb3ZlcnJ1biwgZXRjIC4uLikKKwkgIChTZW50IGJ5IFBhbWVsYSBEZWxhbmV5IGZyb20gTFNJTE9HSUMpCisJLSBSZW1vdmUgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbiBhYm91dCBoYXZpbmcgdG8gYWNxdWlyZSB0aGUgCisJICBpb19yZXF1ZXN0X2xvY2sgc2luY2UgaXQgc2VlbXMgdG8gYmUgYSBkZWZpbml0ZSBmZWF0dXJlIG5vdy46KQorCS0gQ2hhbmdlIGdldF9wYWdlcyBieSBHZXRQYWdlcyBzaW5jZSBMaW51eCA+PSAyLjMuMjcgbm93IHdhbnRzIAorCSAgZ2V0X3BhZ2VzIHRvIGV2ZXIgYmUgdXNlZCBhcyBhIGtlcm5lbCBzeW1ib2wgKGZyb20gMi4zLjI3KS4KKwktIHByb2NfZGlyIHN0cnVjdHVyZSBubyBsb25nZXIgbmVlZGVkIGZvciBrZXJuZWwgPj0gMi4zLjI3LgorCitTdW4gT2N0ICAzICAxOTowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41ZgorCS0gQ2hhbmdlIHRoZSB3YXkgdGhlIGRyaXZlciBjaGVja3MgdGhlIFBDSSBjbG9jayBmcmVxdWVuY3ksIHNvIAorCSAgdGhhdCBvdmVyY2xvY2tlZCBQQ0kgQlVTIHVwIHRvIDQ4IE1IeiB3aWxsIG5vdCBiZSByZWZ1c2VkLgorCSAgVGhlIG1vcmUgdGhlIEJVUyBpcyBvdmVyY2xvY2tlZCwgdGhlIGxlc3MgdGhlIGRyaXZlciB3aWxsIAorCSAgZ3VhcmFudGVlIHRoYXQgaXRzIG1lYXN1cmUgb2YgdGhlIFNDU0kgY2xvY2sgaXMgY29ycmVjdC4KKwktIEJhY2twb3J0IHNvbWUgbWlub3IgaW1wcm92ZW1lbnRzIG9mIFNDUklQVFMgZnJvbSB0aGUgc3ltX2hpcGQgCisJICBkcml2ZXIuCisJLSBCYWNrcG9ydCB0aGUgY29kZSByZXdyaXRlIG9mIHRoZSBTVEFSVCBRVUVVRSBkZXF1ZXVpbmcgKG9uIAorCSAgYmFkIHNjc2kgc3RhdHVzIHJlY2VpdmVkKSBmcm9tIHRoZSBzeW1faGlwZCBkcml2ZXIuCisKK1NhdCBTZXAgMTEgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVlCisJLSBOZXcgbGludXgtMi4zLjEzIF9fc2V0dXAgc2NoZW1lIHN1cHBvcnQgYWRkZWQuCisJLSBDbGVhbnVwIG9mIHRoZSBleHRlbmRlZCBlcnJvciBzdGF0dXMgaGFuZGxpbmc6CisJICBVc2UgMSBiaXQgcGVyIGVycm9yIHR5cGUuCisJLSBBbHNvIHNhdmUgdGhlIGV4dGVuZGVkIGVycm9yIHN0YXR1cyBwcmlvciB0byBhdXRvLXNlbnNlLgorCS0gQWRkIHRoZSBGRV9ESUZGIGNoaXAgZmVhdHVyZSBiaXQgdG8gaW5kaWNhdGUgc3VwcG9ydCBvZiAKKwkgIGRpZmYgcHJvYmluZyBmcm9tIEdQSU8zICg4MjUvODI1QS84NzYvODc1KS4KKwktIFJlbW92ZSB0aGUgcXVpcmsgaGFuZGxpbmcgdGhhdCBoYXMgYmVlbiB1c2VsZXNzIHNpbmNlIGRheSBvbmUuCisJLSBXb3JrLWFyb3VuZCBQQ0kgY2hpcHMgYmVpbmcgcmVwb3J0ZWQgdHdpY2Ugb24gc29tZSBwbGF0Zm9ybXMuCisJLSBBZGQgc29tZSByZWR1bmRhbnQgUENJIHJlYWRzIGluIG9yZGVyIHRvIGRlYWwgd2l0aCBjb21tb24gCisJICBicmlkZ2UgbWlzYmVoYXZpb3VyIHJlZ2FyZGluZyBwb3N0ZWQgd3JpdGUgZmx1c2hpbmcuCisJLSBBZGQgc29tZSBvdGhlciBjb25kaXRpb25uYWwgY29kZSBmb3IgcGVvcGxlIHdobyBoYXZlIHRvIGRlYWwgCisJICB3aXRoIHJlYWxseSBicm9rZW4gYnJpZGdlcyAodGhleSB3aWxsIGhhdmUgdG8gZWRpdCBhIHNvdXJjZSAKKwkgIGZpbGUgdG8gdHJ5IHRoZXNlIG9wdGlvbnMpLgorCS0gSGFuZGxlIGNvcnJlY3RseSAoaG9wZWZ1bGx5KSBqaWZmaWVzIHdyYXAtYXJvdW5kLgorCS0gUmVzdG9yZSB0aGUgZW50cnkgdXNlZCB0byBkZXRlY3QgODc1IHVudGlsIHJldmlzaW9uIDB4ZmYuCisJICAoSSByZW1vdmVkIGl0IGluYWR2ZXJ0ZW50bHksIGl0IHNlZW1zIDopICkKKwktIFJlcGxhY2UgX19pbml0ZnVuYygpIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc3R1ZmYgYnkgX19pbml0IHdoaWNoIAorCSAgaXMgbm90IHlldCBzby4gOy0pCisJLSBSZXdyaXRlIHRoZSBNRVNTQUdFIElOIHNjcmlwdHMgbW9yZSBnZW5lcmljIGJ5IHVzaW5nIGEgTU9WRSAKKwkgIHRhYmxlIGluZGlyZWN0LiBFeHRlbmRlZCBtZXNzYWdlcyBvZiBhbnkgc2l6ZSBhcmUgYWNjZXB0ZWQgbm93LgorCSAgKFNpemUgaXMgbGltaXRlZCB0byA4IGZvciBub3csIGJ1dCBhIGNvbnN0YW50IGlzIGp1c3QgdG8gYmUgCisJICBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5KQorCS0gRml4IHNvbWUgYnVnIGluIHRoZSBmdWxseSB1bnRlc3RlZCBNRFAgaGFuZGxpbmc6KSBhbmQgc2hhcmUgCisJICBzb21lIGNvZGUgYmV0d2VlbiBNRFAgaGFuZGxpbmcgYW5kIHJlc2lkdWFsIGNhbGN1bGF0aW9uLgorCS0gQ2FsY3VsYXRlIHRoZSBkYXRhIHRyYW5zZmVyIHJlc2lkdWFsIGFzIHRoZSAyJ3MgY29tcGxlbWVudCAKKwkgIGludGVnZXIgKEEgcG9zaXRpdmUgdmFsdWUgaW4gcmV0dXJuZWQgb24gZGF0YSBvdmVycnVuLCBhbmQgCisJICBhIG5lZ2F0aXZlIG9uZSBvbiB1bmRlcnJ1bikuCisJLSBBZGQgc3VwcG9ydCBvZiBzb21lICdyZXNvdXJjZSBoYW5kbGluZycgZm9yIGxpbnV4LTIuMy4xMy4KKwkgIEJhc2ljYWxseSB0aGUgQkFScyBoYXZlIGJlZW4gY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZSBjb21wbGV4IAorCSAgaW4gdGhlIHBjaV9kZXYgc3RydWN0dXJlLgorCS0gUmVtb3ZlIHNvbWUgZGVwcmVjYXRlZCBjb2RlLgorCitTYXQgSnVuICA1ICAxMTowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41YworCS0gRG8gbm90IG5lZ290aWF0ZSBvbiBhdXRvLXNlbnNlIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgOCBiaXQgCisJICBhc3luYyB0cmFuc2ZlciBmb3IgdGhlIHRhcmdldC4KKwktIE9ubHkgY2hlY2sgZm9yIFNJU0wvUkFJRCBvbiBpMzg2IHBsYXRmb3Jtcy4KKwkgIChBIHByb2JsZW0gaGFzIGJlZW4gcmVwb3J0ZWQgb24gUFBDIHdpdGggdGhhdCBjb2RlKS4KKwktIE9uIE1TRyBSRUpFQ1QgZm9yIGEgbmVnb3RpYXRpb24sIHRoZSBkcml2ZXIgYXR0ZW1wdGVkIHRvIHJlc3RhcnQgCisJICB0aGUgU0NSSVBUIHByb2Nlc3NvciB3aGVuIHRoaXMgb25lIHdhcyBhbHJlYWR5IHJ1bm5pbmcuCisKK1NhdCBNYXkgMjkgIDEyOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjViCisJLSBGb3JjZSBuZWdvdGlhdGlvbiBwcmlvciBhdXRvLXNlbnNlLgorCSAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRyaXZlciB3aWxsIGJlIGFibGUgdG8gZ3JhYiB0aGUgc2Vuc2UgZGF0YSAKKwkgIGZyb20gYSBkZXZpY2UgdGhhdCBoYXMgcmVjZWl2ZWQgYSBCVVMgREVWSUNFIFJFU0VUIG1lc3NhZ2UgZnJvbSAKKwkgIGFub3RoZXIgaW5pdGlhdG9yLgorCS0gQ29tcGxldGUgYWxsIGRpc2Nvbm5lY3RlZCBDQ0JzIGZvciBhIGxvZ2ljYWwgVU5JVCBpZiB3ZSBhcmUgdG9sZCAKKwkgIGFib3V0IGEgVU5JVCBBVFRFTlRJT04gZm9yIGEgUkVTRVQgY29uZGl0aW9uIGJ5IHRoaXMgdGFyZ2V0LgorCS0gQWRkIHRoZSBjb250cm9sIGNvbW1hbmQgJ2NsZWFyZGV2JyB0aGF0IGFsbG93cyB0byBzZW5kIGEgQUJPUlQgIAorCSAgbWVzc2FnZSB0byBhIGxvZ2ljYWwgVU5JVCAoZm9yIHRlc3QgcHVycG9zZSkuCisKK1R1ZSBNYXkgMjUgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVhCisJLSBBZGQgc3VwcG9ydCBmb3IgdGFzayBhYm9ydCBhbmQgYnVzIGRldmljZSByZXNldCBTQ1NJIG1lc3NhZ2UgCisJICBhbmQgaW1wbGVtZW50IHByb3BlciBzeW5jaG9uaXNhdGlvbiB3aXRoIFNDUklQVFMgdG8gaGFuZGxlIAorICAgICAgICAgIGNvcnJlY3RseSB0YXNrIGFib3J0aW9uIHdpdGhvdXQgcmFjZXMuCisJLSBTZW5kIGFuIEFCT1JUIG1lc3NhZ2UgKGlmIHVudGFnZ2VkKSBvciBBQk9SVCBUQUcgbWVzc2FnZSAoaWYgdGFnZ2VkKQorCSAgd2hlbiB0aGUgZHJpdmVyIGlzIHRvbGQgdG8gYWJvcnQgYSBjb21tYW5kIHRoYXQgaXMgZGlzY29ubmVjdGVkIGFuZCAKKwkgIGNvbXBsZXRlIHRoZSBjb21tYW5kIHdpdGggYXBwcm9wcmlhdGUgZXJyb3IuCisJICBJZiB0aGUgYWJvcnRlZCBjb21tYW5kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIHN0YXJ0IAorCSAgcXVldWUgYW5kIGNvbXBsZXRlIGl0IHdpdGggZXJyb3IuCisJLSBBZGQgdGhlIGNvbnRyb2wgY29tbWFuZCAncmVzZXRkZXYnIHRoYXQgYWxsb3dzIHRvIHNlbmQgYSBCVVMgCisJICBERVZJQ0UgUkVTRVQgbWVzc2FnZSB0byBhIHRhcmdldCAoZm9yIHRlc3QgcHVycG9zZSkuCisJLSBDbGVhbi11cCBzb21lIHVudXNlZCBvciB1c2VsZXNzIGNvZGUuCisKK0ZyaSBNYXkgMjEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjUKKwktIEFkZCBzdXBwb3J0IGZvciBDSE1PViB3aXRoIFdpZGUgY29udHJvbGxlcnMuCisJLSBIYW5kbGluZyBvZiB0aGUgU1dJREUgKGxvdyBieXRlIHJlc2lkdWUgYXQgdGhlIGVuZCBvZiBhIENITU9WIAorCSAgaW4gREFUQSBJTiBwaGFzZSB3aXRoIFdJREUgdHJhbnNmZXIgd2hlbiB0aGUgYnl0ZSBjb3VudCBnZXRzIG9kZCkuCisJLSBIYW5kbGluZyBvZiB0aGUgSUdOT1JFIFdJREUgUkVTSURVRSBtZXNzYWdlLgorCSAgSGFuZGxlZCBmcm9tIFNDUklQVFMgYXMgcG9zc2libGUgd2l0aCBzb21lIG9wdGltaXphdGlvbnMgd2hlbiBib3RoIAorCSAgYSB3aWRlIGRldmljZSBhbmQgdGhlIGNvbnRyb2xsZXIgYXJlIG9kZCBhdCB0aGUgc2FtZSB0aW1lIChTV0lERSAKKwkgIHByZXNlbnQgYW5kIElHTk9SRSBXSURFIFJFU0lEVUUgbWVzc2FnZSBvbiB0aGUgQlVTIGF0IHRoZSBzYW1lIHRpbWUpLgorCS0gQ2hlY2sgYWdhaW5zdCBkYXRhIE9WRVJSVU4vVU5ERVJSVU4gY29uZGl0aW9uIGF0IHRoZSBlbmQgb2YgYSBkYXRhIAorCSAgdHJhbnNmZXIsIHdoYXRldmVyIGEgU1dJREUgaXMgcHJlc2VudCAoT1ZFUlJVTiBpbiBEQVRBIElOIHBoYXNlKSAKKwkgIG9yIHRoZSBTT0RMIGlzIGZ1bGwgKFVOREVSUlVOIGluIERBVEEgb3V0IHBoYXNlKS4KKwktIEhhbmRsaW5nIG9mIHRoZSBNT0RJRlkgREFUQSBQT0lOVEVSIG1lc3NhZ2UuCisJICBUaGlzIG9uZSBjYW5ub3QgYmUgaGFuZGxlZCBmcm9tIFNDUklQVFMsIGJ1dCBob3BlZnVsbHkgaXQgd2lsbCBub3QKKwkgIGhhcHBlbiB2ZXJ5IG9mdGVuLiA6KQorCS0gTGFyZ2UgcmV3cml0ZSBvZiB0aGUgU0NTSSBNRVNTQUdFIGhhbmRsaW5nLgorCitTdW4gTWF5IDkgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjQKKwktIFN1cHBvcnQgZm9yIElNTUVESUFURSBBUkJJVFJBVElPTi4KKwkgIFNlZSB0aGUgUkVBRE1FIGZpbGUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmVhdHVyZS4KKwkgIFJlcXVpcmVzIGJvdGggYSBjb21waWxlIG9wdGlvbiBhbmQgYSBib290IG9wdGlvbi4KKwktIE1pbm9yIFNDUklQVFMgb3B0aW1pemF0aW9uIGluIHJlc2VsZWN0aW9uIHBhdHRlcm4gZm9yIExVTiAwLgorCS0gU2ltcGxlciBhbGdvcml0aG0gdG8gZGVhbCB3aXRoIFNDU0kgY29tbWFuZCBzdGFydmF0aW9uLgorCSAgSnVzdCB1c2UgMiB0YWcgY291bnRlcnMgaW4gZmxpcC9mbG9wIGFuZCBzd2l0Y2ggdG8gdGhlIG90aGVyIAorCSAgb25lIGV2ZXJ5IDMgc2Vjb25kcy4KKwktIERvIHNvbWUgd29yayBpbiBTQ1JJUFRTIGFmdGVyIHRoZSBTRUxFQ1QgaW5zdHJ1Y3Rpb24gYW5kIHByaW9yIAorCSAgdG8gdGVzdGluZyBmb3IgYSBQSEFTRS4gU1lNQklPUyBzYXkgdGhpcyBmZWF0dXJlIGlzIHdvcmtpbmcgZmluZS4gCisJICAoQnR3LCBvbmx5IHByb2JsZW1zIHdpdGggVG9zaGliYSAzNDAxQiBoYWQgYmVlbiByZXBvcnRlZCkuCisJLSBNZWFzdXJlIHRoZSBQQ0kgY2xvY2sgc3BlZWQgYW5kIGRvIG5vdCBhdHRhY2ggY29udHJvbGxlcnMgaWYgCisJICByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIDM3IE1Iei4gU2luY2UgdGhlIHByZWNpc2lvbiBvZiB0aGUgCisJICBhbGdvcml0aG0gKGZyb20gU3RlZmFuIEVzc2VyKSBpcyBiZXR0ZXIgdGhhbiAyJSwgdGhpcyBzaG91bGQgCisJICBiZSBmaW5lLgorCS0gRml4IHRoZSBtaXNkZXRlY3Rpb24gb2YgU1lNNTNDODc1RSAod2FzIGRldGVjdGVkIGFzIGEgODc2KS4KKwktIEZpeCB0aGUgbWlzZGV0ZWN0aW9uIG9mIFNZTTUzQzgxMCBub3QgQSAod2FzIGRldGVjdGVkIGFzIGEgODEwQSkuCisJLSBTdXBwb3J0IGZvciB1cCB0byAyNTYgVEFHUyBwZXIgTFVOIChDTURfUEVSX0xVTikuCisJICBDdXJyZW50bHkgbGltaXRlZCB0byAyNTUgZHVlIHRvIExpbnV4IGxpbWl0YXRpb24uIDopCisJLSBTdXBwb3J0IGZvciB1cCB0byA1MDggYWN0aXZlIGNvbW1hbmRzIChDQU5fUVVFVUUpLgorCS0gU3VwcG9ydCBmb3IgdGhlIDUzQzg5NUEgYnkgUGFtZWxhIERlbGFuZXkgPHBhbS5kZWxhbmV5QGxzaWwuY29tPgorCSAgVGhlIDUzQzg5NUEgY29udGFpbnMgYWxsIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgODk2IGJ1dCBoYXMgb25seSAKKwkgIG9uZSBjaGFubmVsIGFuZCBoYXMgYSAzMiBiaXQgUENJIGJ1cy4gSXQgZG9lcyA2NCBiaXQgUENJIGFkZHJlc3NpbmcgCisJICB1c2luZyBkdWFsIGN5Y2xlIFBDSSBkYXRhIHRyYW5zZmVycy4KKwktIE1pc2NlbGxhbmVvdXMgbWlub3IgZml4ZXMuCisJLSBTb21lIGFkZGl0aW9ucyB0byB0aGUgUkVBRE1FLm5jcjUzYzh4eCBmaWxlLgorCitUdWUgQXByIDE1ICAxMDowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4zZQorCS0gU3VwcG9ydCBmb3IgYW55IG51bWJlciBvZiBMVU5zICg2NCkgKFNQSTItY29tcGxpYW50KS4KKwkgIChCdHcsIHRoaXMgbWF5IG9ubHkgYmUgZXZlciB1c2VmdWwgdW5kZXIgbGludXgtMi4yIDstKSkKKworU3VuIEFwciAxMSAgMTA6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuM2QKKwktIEFkZCAnaG9zdGlkOiNpZCcgYm9vdCBvcHRpb24uIFRoaXMgb3B0aW9uIGFsbG93cyB0byBjaGFuZ2UgdGhlIAorCSAgZGVmYXVsdCBTQ1NJIGlkIHRoZSBkcml2ZXIgdXNlcyBmb3IgY29udHJvbGxlcnMuCisJLSBNYWtlIFNDUklQVFMgbm90IHVzZSBzZWxmLW1hc3RlcmluZyBmb3IgUENJLgorCSAgVGhlcmUgd2VyZSBzdGlsbCAyIHBsYWNlcyB0aGUgZHJpdmVyIHVzZWQgdGhpcyBmZWF0dXJlIG9mIHRoZSAKKwkgIDUzQzhYWCBmYW1pbHkuCisJLSBNb3ZlIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIChudnJhbSBsYXlvdXRzIGFuZCBkcml2ZXIgc2V0LXVwKSB0byAKKwkgIHRoZSBzeW01M2M4eHhfZGVmcy5oIGZpbGUuIFNvLCB0aGUgYm90aCBkcml2ZXJzIHdpbGwgc2hhcmUgdGhlbS4KKwktIFNldCBNQVggTFVOUyB0byAxNiAoaW5zdGVhZCBvZiA4KS4KKworU2F0IE1hciAyMCAgMjE6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuM2IKKwktIEFkZCBzdXBwb3J0IGZvciBOQ1IgUFFTIFBEUy4KKwkgIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QGNvbHVtYmlhc2MubmNyLmNvbT4KKwktIEFsbG93IHZhbHVlIDAgZm9yIGhvc3QgSUQuCisJLSBTdXBwb3J0IG1vcmUgdGhhbiA4IGNvbnRyb2xsZXJzICg+IDQwIGluIGZhY3QgOi0pICkKKwktIEFkZCAnZXhjbD0jaW9hZGRyJyBib290IG9wdGlvbjogZXhjbHVkZSBjb250cm9sbGVyLgorCSAgKFZlcnNpb24gMS4zYSBkcml2ZXIpCisKK1RodSBNYXIgMTEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjMgICAoOHh4LTg5NiBkcml2ZXIgYnVuZGxlKQorCS0gRXF1aXZhbGVudCBjaGFuZ2VzIGFzIG5jcjUzYzh4eC0zLjIgZHVlIHRvIHRoZSBkcml2ZXIgYnVuZGxlLgorCSAgKFNlZSBDaGFuZ2Vsb2cubmNyNTNjOHh4KQorCS0gRG8gYSBub3JtYWwgc29mdCByZXNldCBhcyBmaXJzdCBjaGlwIHJlc2V0LCBzaW5jZSBhYm9ydGluZyBjdXJyZW50IAorCSAgb3BlcmF0aW9uIG1heSByYWlzZSBhbiBpbnRlcnJ1cHQgd2UgYXJlIG5vdCBhYmxlIHRvIGhhbmRsZSBzaW5jZSAKKwkgIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBub3QgeWV0IGVzdGFibGlzaGVkLgorCitTYXQgTWFyIDYgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjJiCisJLSBGaXggc29tZSBvb29vbGQgYnVnIHRoYXQgaGFuZ3MgdGhlIGJ1cyBpZiBhIGRldmljZSByZWplY3RzIGEgCisJICBuZWdvdGlhdGlvbi4gQnR3LCB0aGUgY29ycmVzcG9uZGluZyBzdHVmZiBhbHNvIG5lZWRlZCBzb21lIGNsZWFudXAgCisJICBhbmQgdGh1cyB0aGUgY2hhbmdlIGlzIGEgYml0IGxhcmdlciB0aGFuIGl0IGNvdWxkIGhhdmUgYmVlbi4KKwktIFN0aWxsIHNvbWUgdHlwbyB0aGF0IG1hZGUgY29tcGlsYXRpb24gZmFpbCBmb3IgNjQgYml0ICh0cml2aWFsIGZpeCkuCisKK1N1biBGZWIgMjEgIDIwOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjJhCisJLSBUaGUgcmV3cml0ZSBvZiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGJyb2tlIHRoZSBTQk1DIGludGVycnVwdCAKKwkgIGhhbmRsaW5nIGR1ZSB0byBhIDEgYml0IG1hc2sgdGlueSBlcnJvci4gSG9wZWZ1bGx5IGZpeGVkLgorCS0gSWYgSU5RVUlSWSBjYW1lIGZyb20gYSBzY2F0dGVyIGxpc3QsIHRoZSBkcml2ZXIgbG9va2VkIGludG8gCisJICB0aGUgc2NhdHRlcmxpc3QgaW5zdGVhZCBvZiB0aGUgZGF0YS46KSBTaW5jZSB0aGlzIHNob3VsZCBuZXZlcgorCSAgaGFwcGVuLCB3ZSBqdXN0IGRpc2NhcmQgdGhlIGRhdGEgaWYgdXNlX3NnIGlzIG5vdCB6ZXJvLgorCitGcmkgRmViIDEyICAyMzowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4yCisJLSBNYWpvciByZXdyaXRlIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IHN0dWZmIGZvciAKKwkgIHRoZSBzdXBwb3J0IG9mIG5vbiBjb21wbGlhbnQgU0NTSSByZW1vdmFsLCBpbnNlcnRpb24gYW5kIGFsbCAKKwkgIGtpbmRzIG9mIHNjcmV3LXVwIHRoYXQgbWF5IGhhcHBlbiBvbiB0aGUgU0NTSSBCVVMuCisJICBIb3BlZnVsbHksIHRoZSBkcml2ZXIgaXMgbm93IHVuYnJlYWthYmxlIG9yIG1heS1iZSwgaXQgaXMganVzdCAKKwkgIHF1aXRlIGJyb2NrZW4uIDotKQorCSAgTWFueSB0aGFua3MgdG8gSm9obnNvbiBSdXNzZWwgKFN5bWJpb3MpIGZvciBoYXZpbmcgcmVzcG9uZGVkIHRvIAorCSAgbXkgcXVlc3Rpb25zIGFuZCBmb3IgaGlzIGludGVyZXN0aW5nIGFkdmljZXMgYW5kIGNvbW1lbnRzIGFib3V0IAorCSAgc3VwcG9ydCBvZiBTQ1NJIGhvdC1wbHVnLgorCS0gQWRkICdyZWNvdmVyeScgb3B0aW9uIHRvIGRyaXZlciBzZXQtdXAuCisJLSBOZWdvdGlhdGUgU1lOQyBkYXRhIHRyYW5zZmVycyB3aXRoIENDUyBkZXZpY2VzLgorCS0gRGVhbCBjb3JyZWN0bHkgd2l0aCA2NCBiaXQgUENJIGFkZHJlc3MgcmVnaXN0ZXJzIG9uIExpbnV4IDIuMi4KKwkgIFBvaW50ZWQgb3V0IGJ5IExlb25hcmQgWnVia29mZi4KKworU3VuIEphbiAzMSAgMTg6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuMWEKKwktIFNvbWUgODk2IGNoaXAgcmV2aXNpb25zIChhbGwgZm9yIG5vdyA6LSkpLCBtYXkgaGFuZy11cCBpZiB0aGUgCisJICBzb2Z0IHJlc2V0IGJpdCBpcyBzZXQgYXQgdGhlIHdyb25nIHRpbWUgd2hpbGUgU0NSSVBUUyBhcmUgcnVubmluZy4KKwkgIFdlIG5lZWQgdG8gZmlyc3QgYWJvcnQgdGhlIGN1cnJlbnQgU0NSSVBUUyBvcGVyYXRpb24gcHJpb3IgdG8gCisJICByZXNldHRpbmcgdGhlIGNoaXAuIFRoaXMgZml4IGhhcyBiZWVuIHNlbnQgdG8gbWUgYnkgU1lNQklPUy9MU0kgCisJICBhbmQgSSBqdXN0IHRyYW5zbGF0ZWQgaXQgaW50byBuY3I1M2M4eHggc3ludGF4LgorCSAgTXVzdCBiZSBjb25zaWRlcmVkIDEwMCAlIHRydXN0YWJsZSwgdW5sZXNzIEkgZGlkIHNvbWUgbWlzdGFrZSAKKwkgIHdoZW4gdHJhbnNsYXRpbmcgaXQuIDotKQorCitTdW4gSmFuIDI0ICAxODowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4xCisJLSBNYWpvciByZXdyaXRlIG9mIHRoZSBTQ1NJIHBhcml0eSBlcnJvciBoYW5kbGluZy4KKwkgIFRoZSBpbmZvcm1hdGlvbnMgY29udGFpbmVkIGluIHRoZSBkYXRhIG1hbnVhbHMgYXJlIGluY29tcGxldGUgYWJvdXQgCisJICB0aGlzIGZlYXR1cmUuCisJICBJIGFza2VkIFNZTUJJT1MgYWJvdXQgYW5kIGdvdCBpbiByZXBseSB0aGUgZXhwbGFuYXRpb25zIHRoYXQgYXJlIAorCSAgX2luZGVlZF8gbWlzc2luZyBpbiB0aGUgZGF0YSBtYW51YWxzLgorCS0gQWxsb3cgdG8gdHVuZSByZXF1ZXN0X2lycSgpIGZsYWdzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lIHVzaW5nIAorCSAgbmNyNTNjOHh4PWlycW06Pz8sIGFzIGZvbGxvd3M6CisJICBhKSBJZiBiaXQgMHgxMCBpcyBzZXQgaW4gaXJxbSwgU0FfU0hJUlEgZmxhZyBpcyBub3QgdXNlZC4KKwkgIGIpIElmIGJpdCAweDIwIGlzIHNldCBpbiBpcnFtLCBTQV9JTlRFUlJVUFQgZmxhZyBpcyBub3QgdXNlZC4KKwkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggU0FfU0hJUlEgYW5kIFNBX0lOVEVSUlVQVC4KKwkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAorCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgorCS0gRml4IGZvciA2NCBiaXQgUENJIGFkZHJlc3MgcmVnaXN0ZXIgY2FsY3VsYXRpb24uIChMYW5jZSBSb2JpbnNvbikKKwktIEZpeCBmb3IgYmlnLWVuZGlhbiBpbiBwaGFzZSBtaXNtYXRjaCBoYW5kbGluZy4gKE1pY2hhbCBKYWVnZXJtYW5uKQorCitGcmkgSmFuICAxICAyMDowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4wYQorCS0gV2FpdGluZyBsaXN0IGxvb2stdXAgZGlkbid0IHdvcmsgZm9yIHRoZSBmaXJzdCBjb21tYW5kIG9mIHRoZSBsaXN0LgorCSAgSG9wZWZ1bGx5IGZpeGVkLCBidXQgdGVzdGVkIG9uIHBhcGVyIG9ubHkuIDspCisJLSBSZW1vdmUgdGhlIG1vc3QgcGFydCBvZiBQUEMgc3BlY2lmaWMgY29kZSBmb3IgTGludXgtMi4yLgorCSAgVGhhbmtzIHRvIENvcnQuCisJLSBTb21lIG90aGVyIG1pbm9ycyBjaGFuZ2VzLgorCitTYXQgRGVjIDE5ICAyMTowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4wCisJLSBEZWZpbmUgc29tZSBuZXcgSU8gcmVnaXN0ZXJzIGZvciB0aGUgODk2IChpc3RhdDEsIG1ib3gwLCBtYm94MSkKKwktIFJldmFtcCBzbGlnaGx5IHRoZSBTeW1iaW9zIE5WUkFNIGxheS1vdXQgYmFzZWQgb24gdGhlIGV4Y2VycHQgb2YgCisJICB0aGUgaGVhZGVyIGZpbGUgSSByZWNlaXZlZCBmcm9tIFN5bWJpb3MuCisJLSBDaGVjayB0aGUgUENJIGJ1cyBudW1iZXIgZm9yIHRoZSBib290IG9yZGVyIChVc2luZyBhIGZhc3QgCisJICBQQ0kgY29udHJvbGxlciBiZWhpbmcgYSBQQ0ktUENJIGJyaWRnZSBzZWVtcyBzdWItb3B0aW1hbCkuCisJLSBEaXNhYmxlIG92ZXJsYXBwZWQgUENJIGFyYml0cmF0aW9uIGZvciB0aGUgODk2IHJldmlzaW9uIDEuCisJLSBSZWR1Y2UgYSBiaXQgdGhlIG51bWJlciBvZiBJTyByZWdpc3RlciByZWFkcyBmb3IgcGhhc2UgbWlzbWF0Y2ggCisJICBieSByZWFkaW5nIERXT1JEUyBhdCBhIHRpbWUgaW5zdGVhZCBvZiBCWVRFUy4KKworVGh1IERlYyAgMyAgMjQ6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gcHJlLXN5bTUzYzh4eC0wLjE4CisJLSBJIHJlY2VpdmVkIHRoaXMgYWZ0ZXJub29uIGEgODk2IGZyb20gU1lNQklPUyBhbmQgc3RhcnRlZCB0ZXN0aW5nICAKKwkgIHRoZSBkcml2ZXIgd2l0aCB0aGlzIGJlYXN0LiBBZnRlciBoYXZpbmcgZml4ZWQgMyBidWdsZXRzLCBpdCB3b3JrZWQgIAorCSAgd2l0aCBhbGwgZmVhdHVyZXMgZW5hYmxlZCBpbmNsdWRpbmcgdGhlIHBoYXNlIG1pc21hdGNoIGhhbmRsaW5nIAorCSAgZnJvbSBTQ1JJUFRTLiBTaW5jZSB0aGlzIGZlYXR1cmUgaXMgbm90IHlldCB0ZXN0ZWQgZW5vdWdoLCB0aGUgCisJICBib290IG9wdGlvbiAnbmNyNTNjOHh4PXNwZWNmOjEnIGlzIHN0aWxsIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgCisJICBkcml2ZXIgdG8gaGFuZGxlIFBNIGZyb20gU0NSSVBUUy4gCisKK1N1biBOb3YgMjkgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNworCS0gVGhlIFNJU0wgUkFJRCBjaGFuZ2UgcmVxdWlyZXMgbm93IHJlbWFwX3BjaV9tZW0oKSBzdHVmZiB0byBiZSAKKwkgIGNvbXBpbGVkIGZvciBfX2kzODZfXyB3aGVuIG5vcm1hbCBJT3MgYXJlIHVzZWQuCisJLSBUaGUgUENJIG1lbW9yeSByZWFkIGZyb20gU0NSSVBUUyB0aGF0IHNob3VsZCBlbnN1cmUgb3JkZXJpbmcgCisJICB3YXMgaW4gZmFjdCBtaXNwbGFjZWQuIEJUVywgdGhpcyBtYXkgZXhwbGFpbiB3aHkgYnJva2VuIFBDSSAKKwkgIGRldmljZSBkcml2ZXJzIHJlZ2FyZGluZyBvcmRlcmluZyBhcmUgd29ya2luZyBzbyB3ZWxsLiA7LSkKKwktIFJld3JpdGUgbmNyNTNjOHh4X3NldHVwIChib290IGNvbW1hbmQgbGluZSBvcHRpb25zKSBzaW5jZSB0aGUgIAorCSAgYmluYXJ5IGNvZGUgd2FzIGEgYml0IHRvbyBibG9hdGVkIGluIG15IG9waW5pb24uCisJLSBNYWtlIHRoZSBjb2RlIHNpbXBsZXIgaW4gdGhlIHdha2V1cF9kb25lIHJvdXRpbmUuCisKK1R1ZSBOb3YgMjQgIDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNgorCS0gQWRkIFNDU0lfTkNSX09QVElNSVpFXzg5Nl8xIGNvbXBpbGUgb3B0aW9uIGFuZCAnb3B0aW0nIGJvb3Qgb3B0aW9uLgorCSAgV2hlbiBzZXQsIHRoZSBkcml2ZXIgdW5jb25kaXRpb25uYWx5IGFzc3VtZXMgdGhhdCB0aGUgaW50ZXJydXB0IAorCSAgaGFuZGxlciBpcyBjYWxsZWQgZm9yIGNvbW1hbmQgY29tcGxldGlvbiwgdGhlbiBjbGVhcnMgSU5URiwgc2NhbnMgCisJICB0aGUgZG9uZSBxdWV1ZSBhbmQgcmV0dXJucyBpZiBzb21lIGNvbXBsZXRlZCBDQ0IgaXMgZm91bmQuIElmIG5vIAorCSAgY29tcGxldGVkIENDQiBhcmUgZm91bmQsIGludGVycnVwdCBoYW5kbGluZyB3aWxsIHByb2NlZWQgbm9ybWFsbHkuCisJICBXaXRoIGEgODk2IHRoYXQgaGFuZGxlcyBNQSBmcm9tIFNDUklQVFMsIHRoaXMgY2FuIGJlIGEgZ3JlYXQgd2luLCAKKwkgIHNpbmNlIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBwZXJmb3JtcyBQQ0kgcmVhZCB0cmFuc2FjdGlvbnMsIGJ1dCAKKwkgIG9ubHkgUENJIHdyaXRlIHRyYW5zYWN0aW9ucyB0aGF0IG1heSBiZSBwb3N0ZWQuCisJICBJZiB0aGUgZHJpdmVyIGhhdmVuJ3QgdG8gYWxzbyByYWlzZSB0aGUgU0lHUCB0aGlzIHdvdWxkIGJlIHBlcmZlY3QuCisJICBFdmVuIHdpdGggdGhpcyBwZW5hbHR5LCBJIHRoaW5rIHRoYXQgdGhpcyB3aWxsIHdvcmsgZ3JlYXQuCisJICBPYnZpb3VzbHkgdGhpcyBvcHRpbWl6YXRpb24gbWFrZXMgc2Vuc2Ugb25seSBpZiB0aGUgSVJRIGlzIG5vdCAKKwkgIHNoYXJlZCB3aXRoIGFub3RoZXIgZGV2aWNlLgorCS0gU3RpbGwgYSBidWdsZXQgaW4gdGhlIHRhZ3MgaW5pdGlhbCBzZXR0aW5ncyB0aGF0IG5lZWRlZCB0byBiZSBmaXhlZC4KKwkgIEl0IHdhcyBub3QgcG9zc2libGUgdG8gZGlzYWJsZSBUR1EgYXQgc3lzdGVtIHN0YXJ0dXAgZm9yIGRldmljZXMgCisJICB0aGF0IGNsYWltIFRHUSBzdXBwb3J0LiBUaGUgZHJpdmVyIHVzZWQgYXQgbGVhc3QgMiBmb3IgdGhlIHF1ZXVlIAorCSAgZGVwdGggYnV0IGRpZCdudCBrZWVwIHRyYWNrIG9mIHVzZXIgc2V0dGluZ3MgZm9yIHRhZ3MgZGVwdGggbG93ZXIgCisJICB0aGFuIDIuCisKK1RodSBOb3YgMTkgIDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNQorCS0gQWRkIHN1cHBvcnQgZm9yIGhhcmR3YXJlIExFRCBjb250cm9sIG9mIHRoZSA4OTYuCisJLSBJZ25vcmUgY2hpcHMgdGhhdCBhcmUgZHJpdmVuIGJ5IFNJU0wgUkFJRCAoREFDIDk2MCkuCisJICBDaGFuZ2Ugc2VudCBieSBMZW9uYXJkIFp1YmtvZmYgYW5kIHNsaWdodGx5IHJld29ya2VkLgorCS0gUHJldmVudCA4MTBBIHJldiAxMSBhbmQgODYwIHJldiAxIGZyb20gdXNpbmcgY2FjaGUgbGluZSBiYXNlZCAKKwkgIHRyYW5zYWN0aW9ucyBzaW5jZSB0aG9zZSBlYXJseSBjaGlwIHJldmlzaW9ucyBtYXkgdXNlIHN1Y2ggb24gCisJICBMT0FEL1NUT1JFIGluc3RydWN0aW9ucyAod29yay1hcm91bmQpLgorCS0gUmVtb3ZlIHNvbWUgdXNlbGVzcyBhbmQgYmxvYXQgY29kZSBmcm9tIHRoZSBwY2kgaW5pdCBzdHVmZi4KKwktIERvIG5vdCB1c2UgdGhlIHJlYWRYKCkvd3JpdGVYKCkga2VybmVsIGZ1bmN0aW9ucyBmb3IgX19pMzg2X18sIAorCSAgc2luY2UgdGhleSBwZXJmb3JtIHVzZWxlc3MgbWFza2luZyBvcGVyYXRpb25zIGluIG9yZGVyIHRvIGRlYWwgCisJICB3aXRoIGJyb2tlbiBkcml2ZXIgaW4gMi4xLlgga2VybmVsLgorCitXZWQgTm92IDExICAxMDowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuMTQKKwktIFRoZSBkcml2ZXIgd2FzIHVuaGFwcHkgd2hlbiBjb25maWd1cmVkIHdpdGggZGVmYXVsdF90YWdzID4gTUFYX1RBR1MKKwkgIEhvcGVmdWxseSBkb3VibHktZml4ZWQuCisJLSBTZXQgUENJX1BBUklUWSBpbiBQQ0lfQ09NTUFORCByZWdpc3RlciBpbiBub3Qgc2V0IChQQ0kgZml4LXVwKS4KKwktIFByaW50IG91dCBzb21lIG1lc3NhZ2UgaWYgcGhhc2UgbWlzbWF0Y2ggaXMgaGFuZGxlZCBmcm9tIFNDUklQVFMuCisKK1N1biBOb3YgMSAgMTRIMDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gcHJlLXN5bTUzYzh4eC0wLjEzCisJLSBTb21lIHJld3JpdGUgb2YgdGhlIGRldmljZSBkZXRlY3Rpb24gY29kZS4gVGhpcyBjb2RlIGhhZCBiZWVuIAorCSAgcGF0Y2hlZCB0b28gbXVjaCBhbmQgbmVlZGVkIHRvIGJlIGZhY2UtbGlmdGVkIGEgYml0LgorCSAgUmVtb3ZlIGFsbCBwbGF0Zm9ybSBkZXBlbmRlbnQgZml4LXVwcyB0aGF0IHdhcyBub3QgbmVlZGVkIG9yCisJICBjb25mbGljdGVkIHdpdGggc29tZSBvdGhlciBkcml2ZXIgY29kZSBhcyB3b3JrLWFyb3VuZHMuCisJICBSZXJlYWQgdGhlIE5WUkFNIGJlZm9yZSB0aGUgY2FsbGluZyBvZiBuY3JfYXR0YWNoKCkuIFRoaXMgc3BhcmVzIAorCSAgc3RhY2sgc3BhY2UgYW5kIHNvIGFsbG93cyB0byBoYW5kbGUgbW9yZSBib2FyZHMuCisJICBIYW5kbGUgNjQgYml0IGJhc2UgYWRkcmVzc2VzIHVuZGVyIGxpbnV4LTIuMC5YLgorCSAgU2V0IE1BU1RFUiBiaXQgaW4gUENJIENPTU1BTkQgcmVnaXN0ZXIgaWYgbm90IHNldC4KKworV2VkIE9jdCAzMCAyMkgwMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuMTIKKwktIERhbW5lZCEgSSBqdXN0IGJyb2tlIHRoZSBkcml2ZXIgZm9yIEFscGhhIGJ5IGxlYXZpbmcgYSBzdGFsZSAKKwkgIGluc3RydWN0aW9uIGluIHRoZSBzb3VyY2UgY29kZS4gSG9wZWZ1bGx5IGZpeGVkLgorCS0gRG8gbm90IHNldCBQRkVOIHdoZW4gaXQgaXMgdXNlbGVzcy4gRG9pbmcgc28gd2UgYXJlIHN1cmUgdGhhdCBCT0YgCisJICB3aWxsIGJlIGFjdGl2ZSwgc2luY2UgdGhlIG1hbnVhbCBhcHBlYXJzIHRvIGJlIHZlcnkgdW5jbGVhciBvbiB3aGF0IAorCSAgZmVhdHVyZSBpcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBjaGlwIHdoZW4gYm90aCBQRkVOIGFuZCBCT0YgYXJlIAorCSAgc2V0LgorCitTYXQgT2N0IDI0IDE2SDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xMQorCS0gTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgd2VyZSBtaXNjb21waWxlZCBmb3IgcmVnaXN0ZXIgb2Zmc2V0cyAKKwkgIGJleW9uZCAweDdmLiBUaGlzIGJyb2tlIGFjY2Vzc2VzIHRvIDg5NicgbmV3IHJlZ2lzdGVycy4KKwktIERpc2FibGUgYnkgZGVmYXVsdCBQaGFzZSBNaXNtYXRjaCBoYW5kbGluZyBmcm9tIFNDUklQVFMsIHNpbmNlIAorCSAgY3VycmVudCA4OTYgcmV2LjEgc2VlbXMgbm90IHRvIG9wZXJhdGUgc2FmZWx5IHdpdGggdGhlIGRyaXZlcgorCSAgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCAoYW5kIGFib3ZlIExPQUQvU1RPUkUgZml4IGFwcGxpZWQpLgorCSAgSSB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdCB0byAnZW5hYmxlZCcgd2hlbiB0aGlzIHByb2JsZW0gd2lsbCBiZSAKKwkgIHNvbHZlZC4KKwkgIFVzaW5nIGJvb3Qgb3B0aW9uICduY3I1M2M4eHg9c3BlY2Y6MScgZW5hYmxlcyB0aGlzIGZlYXR1cmUuCisJLSBJbXBsZW1lbnQgYSB3b3JrLWFyb3VuZCAoREVMIDQ3MiAtIElURU0gNSkgdGhhdCBzaG91bGQgYWxsb3cgdGhlIAorCSAgZHJpdmVyIHRvIHNhZmVseSBlbmFibGUgaGFyZHdhcmUgcGhhc2UgbWlzbWF0Y2ggd2l0aCA4OTYgcmV2LiAxLgorCitUdWUgT2N0IDIwIDIySDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xMAorCS0gQWRkIHRoZSA1M2M4NzYgZGVzY3JpcHRpb24gdG8gdGhlIGNoaXAgdGFibGUuIFRoaXMgaXMgb25seSB1c2VmdWwgCisJICBmb3IgcHJpbnRpbmcgdGhlIHJpZ2h0IG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIuCisJLSBBZGQgYWRkaXRpb25hbCBjaGVja2luZyBvZiBJTlFVSVJZIGRhdGE6CisJICBDaGVjayBJTlFVSVJZIGRhdGEgcmVjZWl2ZWQgbGVuZ3RoIGlzIGF0IGxlYXN0IDcuIEJ5dGUgNyBvZiAKKwkgIGlucXVpcnkgZGF0YSBjb250YWlucyBkZXZpY2UgZmVhdHVyZXMgYml0cyBhbmQgdGhlIGRyaXZlciBtaWdodCAKKwkgIGJlIGNvbmZ1c2VkIGJ5IGdhcmJhZ2UuIEFsc28gY2hlY2sgcGVyaXBoZXJhbCBxdWFsaWZpZXIuCisJLSBVc2UgYSAxLDMsNSwuLi5NQVhUQUdTKjIrMSB0YWcgbnVtYmVyaW5nLiBQcmV2aW91cyBkcml2ZXIgY291bGQgIAorCSAgdXNlIGFueSB0YWcgbnVtYmVyIGZyb20gMSB0byAyNTMgYW5kIHNvbWUgbm9uIGNvbmZvcm1hbnQgZGV2aWNlcyAgCisJICBtaWdodCBoYXZlIHByb2JsZW1zIHdpdGggbGFyZ2UgdGFnIG51bWJlcnMuCisJLSBVc2UgTkFNRTUzQyBhbmQgTkFNRTUzQzhYWCBmb3IgY2hpcCBuYW1lIHByZWZpeCBjaGlwIGZhbWlseSBuYW1lLgorCSAgSnVzdCBnaXZlIGEgdHJ5IHVzaW5nICJzeW01M2MiIGFuZCAic3ltNTNjOHh4IiBpbnN0ZWFkIG9mICJuY3I1M2MiIAorCSAgYW5kICJuY3I1M2M4eHgiLiA6LSkKKworU3VuIE9jdCAxMSAxN0gwMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuOQorCS0gREVMLTQ0MSBJdGVtIDIgd29yay1hcm91bmQgZm9yIHRoZSA1M2M4NzYgcmV2IDw9IDUgKDB4MTUpLgorCS0gQnJlYWsgbmNyX3NjYXR0ZXIoKSBpbnRvIDIgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGd1YXJhbnRlZSBiZXN0IAorCSAgcG9zc2libGUgY29kZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBjYXNlIHdlIGdldCBhIHNjYXR0ZXIgbGlzdC4KKwktIEFkZCB0aGUgY29kZSBpbnRlbmRlZCB0byBzdXBwb3J0IHVwIHRvIDEgdGVyYS1ieXRlIGZvciA2NCBiaXQgc3lzdGVtcy4KKwkgIEl0IGlzIHByb2JhYmx5IHRvbyBlYXJseSwgYnV0IEkgd2FudGVkIHRvIGNvbXBsZXRlIHRoZSB0aGluZy4KKworU2F0IE9jdCAzIDE0SDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC44CisJLSBEbyBzb21lIHRlc3Rpbmcgd2l0aCBpb19tYXBwZWQgYW5kIGZpeCB3aGF0IG5lZWRlZCB0byBiZSBzby4KKwktIFdhaXQgZm9yIFNDU0kgc2VsZWN0aW9uIHRvIGNvbXBsZXRlIG9yIHRpbWUtb3V0IGltbWVkaWF0ZWx5IGFmdGVyIAorCSAgdGhlIGNoaXAgd29uIGFyYml0cmF0aW9uLCBzaW5jZSBleGVjdXRpbmcgU0NSSVBUUyB3aGlsZSB0aGUgU0NTSSAKKwkgIGNvcmUgaXMgcGVyZm9ybWluZyBTQ1NJIHNlbGVjdGlvbiBicmVha3MgdGhlIHNlbGVjdGlvbiBwcm9jZWR1cmUgCisJICBhdCBsZWFzdCBmb3Igc29tZSBjaGlwIHJldmlzaW9ucy4KKwktIEludGVycnVwdCB0aGUgU0NSSVBUUyBpZiBhIGRldmljZSBkb2VzIG5vdCBnbyB0byBNU0cgT1VUIHBoYXNlIGFmdGVyIAorCSAgaGF2aW5nIGJlZW4gc2VsZWN0ZWQgd2l0aCBBVE4uIFN1Y2ggYSBzaXR1YXRpb24gaXMgbm90IHJlY292ZXJhYmxlLCAKKwkgIGJldHRlciB0byBmYWlsIHdoZW4gd2UgYXJlIHN0dWNrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHhfMiBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4XzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4XzIKQEAgLTAsMCArMSwxNDQgQEAKK1NhdCBEZWMgMzAgMjE6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4wLTIwMDAxMjMwCisJLSBJbml0aWFsIHJlbGVhc2Ugb2YgU1lNLTIuCisKK01vbiBKYW4gMDggMjE6MzAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4xLTIwMDEwMTA4CisJLSBDaGFuZ2UgYSBjb3VwbGUgb2YgZGVmaW5lcyBjb250YWluaW5nIG5jciBvciBOQ1IgYnkgdGhlaXIgCisJICBlcXVpdmFsZW50IGNvbnRhaW5pbmcgc3ltIG9yIFNZTSBpbnN0ZWFkLgorCitTdW4gSmFuIDE0IDIyOjMwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMi0yMDAxMDExNAorCS0gRml4IGEgY291cGxlIG9mIHByaW50ZnM6CisJICAqIEFkZCB0aGUgdGFyZ2V0IG51bWJlciB0byB0aGUgZGlzcGxheSBvZiB0cmFuc2ZlciBwYXJhbWV0ZXJzLgorCSAgKiBNYWtlIHRoZSBkaXNwbGF5IG9mIFRDUSBhbmQgcXVldWUgZGVwdGggY2xlYXJlci4KKworV2VkIEphbiAxNyAyMzozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjMtMjAwMTAxMTcKKwktIFdyb25nIHJlc2lkdWFsIHZhbHVlcyB3ZXJlIHJldHVybmVkIGluIHNvbWUgc2l0dWF0aW9ucy4KKwkgIFRoaXMgYnJva2UgY2RyZWNvcmQgd2l0aCBsaW51eC0yLjQuMCwgZm9yIGV4YW1wbGUuCisKK1NhdCBKYW4gMjAgMTg6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS40LTIwMDEwMTIwCisJLSBBZGQgeWVhciAyMDAxIHRvIENvcHlyaWdodC4KKwktIEEgdGlueSBidWcgaW4gdGhlIGRtYSBtZW1vcnkgZnJlZWluZyBwYXRoIGhhcyBiZWVuIGZpeGVkLgorCSAgKERyaXZlciB1bmxvYWQgZmFpbGVkIHdpdGggYSBiYWQgYWRkcmVzcyByZWZlcmVuY2UpLgorCitXZWQgSmFuIDI0IDIxOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuNS0yMDAxMDEyNAorCS0gTWFrZSB0aGUgZHJpdmVyIHdvcmsgdW5kZXIgTGludXgtMi40Lnggd2hlbiBzdGF0aWNhbGx5IGxpbmtlZCAKKwkgIHdpdGggdGhlIGtlcm5lbC4KKwktIENoZWNrIGFnYWluc3QgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBmb3IgU0NSSVBUWiBhbmQgYWRkIHRoZSAKKwkgIG1pc3NpbmcgZnJlZSBvZiB0aGlzIG1lbW9yeSBvbiBpbnN0YW5jZSBkZXRhY2guCisJLSBDaGVjayBhZ2FpbnN0IEdQSU8zIHB1bGxlZCBsb3cgZm9yIEhWRCBjb250cm9sbGVycyAoZHJpdmVyIGRpZCAKKwkgIGp1c3QgdGhlIG9wcG9zaXRlKS4KKwkgIE1pc2RldGVjdGlvbiBvZiBCVVMgbW9kZSB3YXMgdHJpZ2dlcmVkIG9uIG1vZHVsZSByZWxvYWQgb25seSwgCisJICBzaW5jZSBCSU9TIHNldHRpbmdzIHdlcmUgdHJ1c3RlZCBpbnN0ZWFkIG9uIGZpcnN0IGxvYWQuCisKK1dlZCBGZWIgNyAyMTowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjYtMjAwMTAyMDcKKwktIENhbGwgcGNpX2VuYWJsZV9kZXZpY2UoKSBhcyB3aXNoZWQgYnkga2VybmVsIG1haW50YWluZXJzLgorCS0gQ2hhbmdlIHRoZSBzeW1fcXVldWVfc2NzaWlvKCkgaW50ZXJmYWNlLgorCSAgVGhpcyBpcyBpbnRlbmRlZCB0byBzaW1wbGlmeSBwb3J0YWJpbGl0eS4KKwktIE1vdmUgdGhlIGNvZGUgaW50ZW5kZWQgdG8gZGVhbCB3aXRoIHRoZSBkb3dsb2FkaW5nIG9mIFNDUklQVFMgCisJICBmcm9tIFNDUklQVFMgOikgaW4gdGhlIHBhdGNoIG1ldGhvZCAod2FzIHdyb25nbHkgcGxhY2VkIGluIAorCSAgdGhlIFNDUklQVFMgc2V0dXAgbWV0aG9kKS4KKwktIEFkZCBhIG1pc3NpbmcgY3B1X3RvX3NjcigpICAobnAtPmFib3J0X3RibC5hZGRyKQorCS0gUmVtb3ZlIGEgd3JvbmcgY3B1X3RvX3NjcigpIChucC0+dGFyZ3RibF9iYSkKKwktIENsZWFudXAgYSBiaXQgdGhlIFBQUiBmYWlsdXJlIHJlY292ZXJ5IGNvZGUuCisKK1NhdCBNYXIgMyAyMTowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCS0gQWRkIG9wdGlvbiBTWU1fT1BUX0FOTk9VTkNFX1RSQU5TRkVSX1JBVEUgYW5kIG1vdmUgdGhlIAorCSAgY29ycmVzcG9uZGluZyBjb2RlIHRvIGZpbGUgc3ltX21pc2MuYy4KKwkgIEFsc28gbW92ZSB0aGUgY29kZSB0aGF0IHNuaWZmZXMgSU5RVUlSWSB0byBzeW1fbWlzYy5jLgorCSAgVGhpcyBhbGxvd3MgdG8gc2hhcmUgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSB3aXRoIE5ldEJTRCAKKwkgIHdpdGhvdXQgcG9sbHVhdGluZyB0aGUgY29yZSBkcml2ZXIgc291cmNlIChzeW1faGlwZC5jKS4KKwktIEFkZCBvcHRpb25uYWwgY29kZSB0aGF0IGhhbmRsZXMgSU8gdGltZW91dHMgZnJvbSB0aGUgZHJpdmVyLgorCSAgKG5vdCB1c2VkIHVuZGVyIExpbnV4LCBidXQgcmVxdWlyZWQgZm9yIE5ldEJTRCkKKwktIERvbm5vdCBhc3N1bWUgYW55IGxvbmdlciB0aGF0IFBBR0VfU0hJRlQgYW5kIFBBR0VfU0laRSBhcmUgCisJICBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSwgYXMgYXQgbGVhc3QgTmV0QlNEIHVzZXMgdmFyaWFibGVzIAorCSAgaW4gbWVtb3J5IGZvciB0aGF0LgorCS0gUmVmaW5lIGEgd29yay1hcm91bmQgZm9yIHRoZSBDMTAxMC0zMyB0aGF0IGNvbnNpc3RzIGluIAorCSAgZGlzYWJsaW5nIGludGVybmFsIExPQUQvU1RPUkUuIFdhcyBhcHBsaWVkIHVwIHRvIHJldmlzaW9uIDEuCisJICBJcyBub3cgb25seSBhcHBsaWVkIHRvIHJldmlzaW9uIDAuCisJLSBTb21lIGNvZGUgcmVvcmdhbmlzYXRpb25zIGR1ZSB0byBjb2RlIG1vdmVzIGJldHdlZW4gZmlsZXMuCisKK1R1ZXMgQXByIDEwIDIxOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuOS0yMDAxMDQxMgorCS0gUmVzZXQgNTNDODk2IGFuZCA1M0MxMDEwIGNoaXAgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwuCisJICAoaS5lLjogc2V0IHRoZSBBQlJUIGJpdCBpbiBJU1RBVCBpZiBTQ1JJUFRTIGFyZSBydW5uaW5nKQorCS0gU2V0ICNMVU4gaW4gcmVxdWVzdCBzZW5zZSBvbmx5IGlmIHNjc2kgdmVyc2lvbiA8PSAyIGFuZAorCSAgI0xVTiA8PSA3LgorCS0gU2V0IGJ1c3lfaXRsIGluIExDQiB0byAxIGlmIHRoZSBMQ0IgaXMgYWxsb2NhdGVkIGFuZCBhIAorCSAgU0NTSSBjb21tYW5kIGlzIGFjdGl2ZS4gVGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uLgorCS0gSW4gc3ltX2hjYl9mcmVlKCksIGRvIG5vdCBzY2FuIHRoZSBmcmVlX2NjYnEgaWYgbm8gQ0NCcyAKKwkgIGhhcyBiZWVuIGFsbG9jYXRlZC4gVGhpcyBmaXhlcyBhIHBhbmljIGlmIGF0dGFjaCBmYWlsZWQuCisJLSBBZGQgRFQvU1QgKGRvdWJsZS9zaW1wbGUgdHJhbnNpdGlvbikgaW4gdGhlIHRyYW5zZmVyIAorCSAgbmVnb3RpYXRpb24gYW5ub3VuY2UuCisJLSBGb3JjZXMgdGhlIG1heCBudW1iZXIgb2YgdGFza3MgcGVyIExVTiB0byBhdCBsZWFzdCA2NC4KKwktIFVzZSBwY2lfc2V0X2RtYV9tYXNrKCkgZm9yIGxpbnV4LTIuNC4zIGFuZCBhYm92ZS4KKwktIEEgY291cGxlIG9mIGNvbW1lbnRzIGZpeGVzLgorCitXZWQgTWF5IDIyOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTAtMjAwMTA1MDkKKwktIE1hc2sgR1BDTlRMIGFnYWluc3QgMHgxYyAod2FzIDB4ZmMpIGZvciB0aGUgcmVhZGluZyBvZiB0aGUgTlZSQU0uCisJICBUaGlzIGVuc3VyZSBMRURDIGJpdCB3aWxsIG5vdCBiZSBzZXQgb24gODk2IGFuZCBsYXRlciBjaGlwcy4KKwkgIEZpeCBzZW50IGJ5IENoaXAgU2FsemVuYmVyZyA8Y2hpcEBwZXJsc3VwcG9ydC5jb20+LgorCS0gRGVmaW5lIHRoZSBudW1iZXIgb2YgUFFTIEJVU2VzIHN1cHBvcnRlZC4KKwkgIEZpeCBzZW50IGJ5IFN0aWcgVGVsZmVyIDxzdGlnQGFwaS1uZXR3b3Jrcy5jb20+CisJLSBNaXNjZWxsYW5lb3VzIGNvbW1vbiBjb2RlIHJlYXJyYW5nZW1lbnRzIGR1ZSB0byBOZXRCU0QgYWNjZWwgCisJICBpb2N0bCBzdXBwb3J0LCB3aXRob3V0IGltcGFjdCBvbiBMaW51eCAoaG9wZWZ1bGx5KS4KKworTW9uIEp1bHkgMiAxMjowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjExLTIwMDEwNzAyCisJLSBBZGQgVGVrcmFtIDM5MCBVMkIvVTJXIFNDU0kgTEVEIGhhbmRsaW5nLgorCSAgU3VibWl0dGVkIGJ5IENoaXAgU2FsemVuYmVyZyA8Y2hpcEB2YWxpbnV4LmNvbT4KKwktIEFkZCBjYWxsIHRvIHNjc2lfc2V0X3BjaV9kZXZpY2UoKSBmb3Iga2VybmVscyA+PSAyLjQuNC4KKwktIENoZWNrIHBjaSBkbWEgbWFwcGluZyBmYWlsdXJlcyBhbmQgY29tcGxldGUgdGhlIElPIHdpdGggc29tZSAKKwkgIGVycm9yIHdoZW4gc3VjaCBtYXBwaW5nIGZhaWxzLgorCS0gRmlsbCBpbiBpbnN0YW5jZS0+bWF4X2NtZF9sZW4gZm9yIGtlcm5lbHMgPiAyLjQuMC4KKwktIEEgY291cGxlIG9mIHRpbnkgZml4ZXMgLi4uCisKK1N1biBTZXAgOSAxODowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjEyLTIwMDEwOTA5CisJLSBDaGFuZ2UgbXkgZW1haWwgYWRkcmVzcy4KKwktIEFkZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGZvcnRoY29taW5nIDY0IGJpdCBETUEgYWRkcmVzc2luZyBzdXBwb3J0LgorCSAgKEJhc2VkIG9uIFBDSSA2NCBiaXQgcGF0Y2ggZnJvbSBEYXZpZCBTLiBNaWxsZXIpCisJLSBEb25ub3QgdXNlIGFueW1vcmUgdm1fb2Zmc2V0X3QgdHlwZS4KKworU2F0IFNlcCAxNSAyMDowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjEzLTIwMDEwOTE2CisJLSBBZGQgc3VwcG9ydCBmb3IgNjQgYml0IERNQSBhZGRyZXNzaW5nIHVzaW5nIHNlZ21lbnQgcmVnaXN0ZXJzLgorCSAgMTYgcmVnaXN0ZXJzIGZvciB1cCB0byA0IEdCIHggMTYgLT4gNjQgR0IuCisKK1NhdCBTZXAgMjIgMTI6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4xNC0yMDAxMDkyMgorCS0gQ29tcGxldGUgcmV3cml0ZSBvZiB0aGUgZWggaGFuZGxpbmcuIFRoZSBkcml2ZXIgaXMgbm93IHVzaW5nIGEgCisJICBzZW1hcGhvcmUgaW4gb3JkZXIgdG8gYmVoYXZlIHN5bmNocm9ub3VzbHkgYXMgcmVxdWlyZWQgYnkgdGhlIGVoIAorCSAgdGhyZWFkcy4gQSB0aW1lciBpcyBhbHNvIHVzZWQgdG8gcHJldmVudCBmcm9tIHdhaXRpbmcgaW5kZWZpbml0ZWx5LgorCitTdW4gU2VwIDMwIDE3OjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTUtMjAwMTA5MzAKKwktIEluY2x1ZGUgPGxpbnV4L21vZHVsZS5oPiB1bmNvbmRpdGlvbm5hbHkgYXMgZXhwZWN0ZWQgYnkgbGF0ZXN0CisJICBrZXJuZWxzLgorCS0gVXNlIGRlbF90aW1lcl9zeW5jKCkgZm9yIHJlY2VudCBrZXJuZWxzIHRvIGtpbGwgdGhlIGRyaXZlciB0aW1lciAKKwkgIG9uIG1vZHVsZSByZWxlYXNlLgorCitTdW4gT2N0IDI4IDE1OjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTYtMjAwMTEwMjgKKwktIFNsaWdodGx5IHNpbXBsaWZ5IGRyaXZlciBjb25maWd1cmF0aW9uLgorCS0gUHJlcGFyZSBhIG5ldyBwYXRjaCBhZ2FpbnN0IGxpbnV4LTIuNC4xMy4KKworU2F0IE5vdiAxNyAxMDowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjE3CisJLSBGaXggYSBjb3VwbGUgb2YgZ2NjL2djYzMgd2FybmluZ3MuCisJLSBBbGxvY2F0ZSBzZXBhcmF0ZWx5IGZyb20gdGhlIEhDQiB0aGUgYXJyYXkgZm9yIENDQnMgaGFzaGVkIGJ5IERTQS4KKwkgIEFsbCBkcml2ZXIgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBub3cgbm90IGdyZWF0ZXIgdGhhbiAxIFBBR0UgCisJICBldmVuIG9uIFBQQzY0IC8gNEtCIFBBR0Ugc3VycHJpc2luZyBzZXR1cC4KKworU2F0IERlYyAwMSAxODowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjE3YQorCS0gVXNlIHVfbG9uZyBpbnN0ZWFkIG9mIFUzMiBmb3IgdGhlIElPIGJhc2UgY29va2llLiBUaGlzIGlzIG1vcmUgCisJICBjb25zaXN0ZW50IHdpdGggd2hhdCBhcmNocyBhcmUgZXhwZWN0aW5nLgorCS0gVXNlIE1NSU8gcGVyIGRlZmF1bHQgZm9yIFBvd2VyIFBDIGluc3RlYWQgb2Ygc29tZSBmYWtlIG5vcm1hbCBJTywKKwkgIGFzIFBhdWwgTWFja2VycmFzIHN0YXRlZCB0aGF0IE1NSU8gd29ya3MgZmluZSBub3cgb24gdGhpcyBhcmNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YWNhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvRmxhc2hQb2ludC50eHQKQEAgLTAsMCArMSwxNjMgQEAKK1RoZSBCdXNMb2dpYyBGbGFzaFBvaW50IFNDU0kgSG9zdCBBZGFwdGVycyBhcmUgbm93IGZ1bGx5IHN1cHBvcnRlZCBvbiBMaW51eC4KK1RoZSB1cGdyYWRlIHByb2dyYW0gZGVzY3JpYmVkIGJlbG93IGhhcyBiZWVuIG9mZmljaWFsbHkgdGVybWluYXRlZCBlZmZlY3RpdmUKKzMxIE1hcmNoIDE5OTcgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKworCisKKwkgIE1ZTEVYIElOVFJPRFVDRVMgTElOVVggT1BFUkFUSU5HIFNZU1RFTSBTVVBQT1JUIEZPUiBJVFMKKwkgICAgICBCVVNMT0dJQyBGTEFTSFBPSU5UIExJTkUgT0YgU0NTSSBIT1NUIEFEQVBURVJTCisKKworRlJFTU9OVCwgQ0EsIC0tIE9jdG9iZXIgOCwgMTk5NiAtLSBNeWxleCBDb3Jwb3JhdGlvbiBoYXMgZXhwYW5kZWQgTGludXgKK29wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydCB0byBpdHMgQnVzTG9naWMgYnJhbmQgb2YgRmxhc2hQb2ludCBVbHRyYSBTQ1NJCitob3N0IGFkYXB0ZXJzLiAgQWxsIG9mIEJ1c0xvZ2ljJ3Mgb3RoZXIgU0NTSSBob3N0IGFkYXB0ZXJzLCBpbmNsdWRpbmcgdGhlCitNdWx0aU1hc3RlciBsaW5lLCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4gIExpbnV4Citkcml2ZXJzIGFuZCBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSBvbiBPY3RvYmVyIDE1dGggYXQKK2h0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8uCisKKyJNeWxleCBpcyBjb21taXR0ZWQgdG8gc3VwcG9ydGluZyB0aGUgTGludXggY29tbXVuaXR5LCIgc2F5cyBQZXRlciBTaGFtYm9yYSwKK3ZpY2UgcHJlc2lkZW50IG9mIG1hcmtldGluZyBmb3IgTXlsZXguICAiV2UgaGF2ZSBzdXBwb3J0ZWQgTGludXggZHJpdmVyCitkZXZlbG9wbWVudCBhbmQgcHJvdmlkZWQgdGVjaG5pY2FsIHN1cHBvcnQgZm9yIG91ciBob3N0IGFkYXB0ZXJzIGZvciBzZXZlcmFsCit5ZWFycywgYW5kIGFyZSBwbGVhc2VkIHRvIG5vdyBtYWtlIG91ciBGbGFzaFBvaW50IHByb2R1Y3RzIGF2YWlsYWJsZSB0byB0aGlzCit1c2VyIGJhc2UuIgorCitUaGUgTGludXggT3BlcmF0aW5nIFN5c3RlbQorCitMaW51eCBpcyBhIGZyZWVseS1kaXN0cmlidXRlZCBpbXBsZW1lbnRhdGlvbiBvZiBVTklYIGZvciBJbnRlbCB4ODYsIFN1bgorU1BBUkMsIFNHSSBNSVBTLCBNb3Rvcm9sYSA2OGssIERpZ2l0YWwgQWxwaGEgQVhQIGFuZCBNb3Rvcm9sYSBQb3dlclBDCittYWNoaW5lcy4gIEl0IHN1cHBvcnRzIGEgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHRoZSBYIFdpbmRvdworU3lzdGVtLCBFbWFjcywgYW5kIFRDUC9JUCBuZXR3b3JraW5nLiAgRnVydGhlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cubGludXgub3JnIGFuZCBodHRwOi8vd3d3LnNzYy5jb20vbGludXguCisKK0ZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycworCitUaGUgRmxhc2hQb2ludCBmYW1pbHkgb2YgVWx0cmEgU0NTSSBob3N0IGFkYXB0ZXJzLCBkZXNpZ25lZCBmb3Igd29ya3N0YXRpb24KK2FuZCBmaWxlIHNlcnZlciBlbnZpcm9ubWVudHMsIGFyZSBhdmFpbGFibGUgaW4gbmFycm93LCB3aWRlLCBkdWFsIGNoYW5uZWwsCithbmQgZHVhbCBjaGFubmVsIHdpZGUgdmVyc2lvbnMuICBUaGVzZSBhZGFwdGVycyBmZWF0dXJlIFNlcUVuZ2luZQorYXV0b21hdGlvbiB0ZWNobm9sb2d5LCB3aGljaCBtaW5pbWl6ZXMgU0NTSSBjb21tYW5kIG92ZXJoZWFkIGFuZCByZWR1Y2VzCit0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgZ2VuZXJhdGVkIHRvIHRoZSBDUFUuCisKK0Fib3V0IE15bGV4CisKK015bGV4IENvcnBvcmF0aW9uIChOQVNEQVEvTk0gU1lNQk9MOiBNWUxYKSwgZm91bmRlZCBpbiAxOTgzLCBpcyBhIGxlYWRpbmcKK3Byb2R1Y2VyIG9mIFJBSUQgdGVjaG5vbG9neSBhbmQgbmV0d29yayBtYW5hZ2VtZW50IHByb2R1Y3RzLiAgVGhlIGNvbXBhbnkKK3Byb2R1Y2VzIGhpZ2ggcGVyZm9ybWFuY2UgZGlzayBhcnJheSAoUkFJRCkgY29udHJvbGxlcnMsIGFuZCBjb21wbGVtZW50YXJ5Citjb21wdXRlciBwcm9kdWN0cyBmb3IgbmV0d29yayBzZXJ2ZXJzLCBtYXNzIHN0b3JhZ2Ugc3lzdGVtcywgd29ya3N0YXRpb25zCithbmQgc3lzdGVtIGJvYXJkcy4gIFRocm91Z2ggaXRzIHdpZGUgcmFuZ2Ugb2YgUkFJRCBjb250cm9sbGVycyBhbmQgaXRzCitCdXNMb2dpYyBsaW5lIG9mIFVsdHJhIFNDU0kgaG9zdCBhZGFwdGVyIHByb2R1Y3RzLCBNeWxleCBwcm92aWRlcyBlbmFibGluZworaW50ZWxsaWdlbnQgSS9PIHRlY2hub2xvZ2llcyB0aGF0IGluY3JlYXNlIG5ldHdvcmsgbWFuYWdlbWVudCBjb250cm9sLAorZW5oYW5jZSBDUFUgdXRpbGl6YXRpb24sIG9wdGltaXplIEkvTyBwZXJmb3JtYW5jZSwgYW5kIGVuc3VyZSBkYXRhIHNlY3VyaXR5CithbmQgYXZhaWxhYmlsaXR5LiAgUHJvZHVjdHMgYXJlIHNvbGQgZ2xvYmFsbHkgdGhyb3VnaCBhIG5ldHdvcmsgb2YgT0VNcywKK21ham9yIGRpc3RyaWJ1dG9ycywgVkFScywgYW5kIHN5c3RlbSBpbnRlZ3JhdG9ycy4gIE15bGV4IENvcnBvcmF0aW9uIGlzCitoZWFkcXVhcnRlcmVkIGF0IDM0NTUxIEFyZGVud29vZCBCbHZkLiwgRnJlbW9udCwgQ0EuCisKKwkJCQkgICAjIyMjCisKK0NvbnRhY3Q6CisKK1BldGVyIFNoYW1ib3JhCitWaWNlIFByZXNpZGVudCBvZiBNYXJrZXRpbmcKK015bGV4IENvcnAuCis1MTAvNzk2LTYxMDAKK3BldGVyc0BteWxleC5jb20KKwwKKwkJCSAgICAgICBBTk5PVU5DRU1FTlQKKwkgICAgICAgQnVzTG9naWMgRmxhc2hQb2ludCBMVC9CVC05NDggVXBncmFkZSBQcm9ncmFtCisJCQkgICAgICAxIEZlYnJ1YXJ5IDE5OTYKKworCQkJICBBRERJVElPTkFMIEFOTk9VTkNFTUVOVAorCSAgICAgICBCdXNMb2dpYyBGbGFzaFBvaW50IExXL0JULTk1OCBVcGdyYWRlIFByb2dyYW0KKwkJCSAgICAgICAxNCBKdW5lIDE5OTYKKworRXZlciBzaW5jZSBpdHMgaW50cm9kdWN0aW9uIGxhc3QgT2N0b2JlciwgdGhlIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgTFQgaGFzCitiZWVuIHByb2JsZW1hdGljIGZvciBtZW1iZXJzIG9mIHRoZSBMaW51eCBjb21tdW5pdHksIGluIHRoYXQgbm8gTGludXgKK2RyaXZlcnMgaGF2ZSBiZWVuIGF2YWlsYWJsZSBmb3IgdGhpcyBuZXcgVWx0cmEgU0NTSSBwcm9kdWN0LiAgRGVzcGl0ZSBpdCdzCitvZmZpY2lhbGx5IGJlaW5nIHBvc2l0aW9uZWQgYXMgYSBkZXNrdG9wIHdvcmtzdGF0aW9uIHByb2R1Y3QsIGFuZCBub3QgYmVpbmcKK3BhcnRpY3VsYXJseSB3ZWxsIHN1aXRlZCBmb3IgYSBoaWdoIHBlcmZvcm1hbmNlIG11bHRpdGFza2luZyBvcGVyYXRpbmcKK3N5c3RlbSBsaWtlIExpbnV4LCB0aGUgRmxhc2hQb2ludCBMVCBoYXMgYmVlbiB0b3V0ZWQgYnkgY29tcHV0ZXIgc3lzdGVtCit2ZW5kb3JzIGFzIHRoZSBsYXRlc3QgdGhpbmcsIGFuZCBoYXMgYmVlbiBzb2xkIGV2ZW4gb24gbWFueSBvZiB0aGVpciBoaWdoCitlbmQgc3lzdGVtcywgdG8gdGhlIGV4Y2x1c2lvbiBvZiB0aGUgb2xkZXIgTXVsdGlNYXN0ZXIgcHJvZHVjdHMuICBUaGlzIGhhcworY2F1c2VkIGdyaWVmIGZvciBtYW55IHBlb3BsZSB3aG8gaW5hZHZlcnRlbnRseSBwdXJjaGFzZWQgYSBzeXN0ZW0gZXhwZWN0aW5nCit0aGF0IGFsbCBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMgd2VyZSBzdXBwb3J0ZWQgYnkgTGludXgsIG9ubHkgdG8KK2Rpc2NvdmVyIHRoYXQgdGhlIEZsYXNoUG9pbnQgd2FzIG5vdCBzdXBwb3J0ZWQgYW5kIHdvdWxkIG5vdCBiZSBmb3IgcXVpdGUKK3NvbWUgdGltZSwgaWYgZXZlci4KKworQWZ0ZXIgdGhpcyBwcm9ibGVtIHdhcyBpZGVudGlmaWVkLCBCdXNMb2dpYyBjb250YWN0ZWQgaXRzIG1ham9yIE9FTQorY3VzdG9tZXJzIHRvIG1ha2Ugc3VyZSB0aGUgQlQtOTQ2Qy85NTZDIE11bHRpTWFzdGVyIGNhcmRzIHdvdWxkIHN0aWxsIGJlCittYWRlIGF2YWlsYWJsZSwgYW5kIHRoYXQgTGludXggdXNlcnMgd2hvIG1pc3Rha2VubHkgb3JkZXJlZCBzeXN0ZW1zIHdpdGgKK3RoZSBGbGFzaFBvaW50IHdvdWxkIGJlIGFibGUgdG8gdXBncmFkZSB0byB0aGUgQlQtOTQ2Qy4gIFdoaWxlIHRoaXMgaGVscGVkCittYW55IHB1cmNoYXNlcnMgb2YgbmV3IHN5c3RlbXMsIGl0IHdhcyBvbmx5IGEgcGFydGlhbCBzb2x1dGlvbiB0byB0aGUKK292ZXJhbGwgcHJvYmxlbSBvZiBGbGFzaFBvaW50IHN1cHBvcnQgZm9yIExpbnV4IHVzZXJzLiAgSXQgZGlkIG5vdGhpbmcgdG8KK2Fzc2lzdCB0aGUgcGVvcGxlIHdobyBpbml0aWFsbHkgcHVyY2hhc2VkIGEgRmxhc2hQb2ludCBmb3IgYSBzdXBwb3J0ZWQKK29wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZW4gbGF0ZXIgZGVjaWRlZCB0byBydW4gTGludXgsIG9yIHRob3NlIHdobyBoYWQKK2VuZGVkIHVwIHdpdGggYSBGbGFzaFBvaW50IExULCBiZWxpZXZpbmcgaXQgd2FzIHN1cHBvcnRlZCwgYW5kIHdlcmUgdW5hYmxlCit0byByZXR1cm4gaXQuCisKK0luIHRoZSBtaWRkbGUgb2YgRGVjZW1iZXIsIEkgYXNrZWQgdG8gbWVldCB3aXRoIEJ1c0xvZ2ljJ3Mgc2VuaW9yCittYW5hZ2VtZW50IHRvIGRpc2N1c3MgdGhlIGlzc3VlcyByZWxhdGVkIHRvIExpbnV4IGFuZCBmcmVlIHNvZnR3YXJlIHN1cHBvcnQKK2ZvciB0aGUgRmxhc2hQb2ludC4gIFJ1bW9ycyBvZiB2YXJ5aW5nIGFjY3VyYWN5IGhhZCBiZWVuIGNpcmN1bGF0aW5nCitwdWJsaWNseSBhYm91dCBCdXNMb2dpYydzIGF0dGl0dWRlIHRvd2FyZCB0aGUgTGludXggY29tbXVuaXR5LCBhbmQgSSBmZWx0CitpdCB3YXMgYmVzdCB0aGF0IHRoZXNlIGlzc3VlcyBiZSBhZGRyZXNzZWQgZGlyZWN0bHkuICBJIHNlbnQgYW4gZW1haWwKK21lc3NhZ2UgYWZ0ZXIgMTFwbSBvbmUgZXZlbmluZywgYW5kIHRoZSBtZWV0aW5nIHRvb2sgcGxhY2UgdGhlIG5leHQKK2FmdGVybm9vbi4gIFVuZm9ydHVuYXRlbHksIGNvcnBvcmF0ZSB3aGVlbHMgc29tZXRpbWVzIGdyaW5kIHNsb3dseSwKK2VzcGVjaWFsbHkgd2hlbiBhIGNvbXBhbnkgaXMgYmVpbmcgYWNxdWlyZWQsIGFuZCBzbyBpdCdzIHRha2VuIHVudGlsIG5vdworYmVmb3JlIHRoZSBkZXRhaWxzIHdlcmUgY29tcGxldGVseSBkZXRlcm1pbmVkIGFuZCBhIHB1YmxpYyBzdGF0ZW1lbnQgY291bGQKK2JlIG1hZGUuCisKK0J1c0xvZ2ljIGlzIG5vdCBwcmVwYXJlZCBhdCB0aGlzIHRpbWUgdG8gcmVsZWFzZSB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5Citmb3IgdGhpcmQgcGFydGllcyB0byB3cml0ZSBkcml2ZXJzIGZvciB0aGUgRmxhc2hQb2ludC4gIFRoZSBvbmx5IGV4aXN0aW5nCitGbGFzaFBvaW50IGRyaXZlcnMgaGF2ZSBiZWVuIHdyaXR0ZW4gZGlyZWN0bHkgYnkgQnVzTG9naWMgRW5naW5lZXJpbmcsIGFuZAordGhlcmUgaXMgbm8gRmxhc2hQb2ludCBkb2N1bWVudGF0aW9uIHN1ZmZpY2llbnRseSBkZXRhaWxlZCB0byBhbGxvdyBvdXRzaWRlCitkZXZlbG9wZXJzIHRvIHdyaXRlIGEgZHJpdmVyIHdpdGhvdXQgc3Vic3RhbnRpYWwgYXNzaXN0YW5jZS4gIFdoaWxlIHRoZXJlCithcmUgcGVvcGxlIGF0IEJ1c0xvZ2ljIHdobyB3b3VsZCByYXRoZXIgbm90IHJlbGVhc2UgdGhlIGRldGFpbHMgb2YgdGhlCitGbGFzaFBvaW50IGFyY2hpdGVjdHVyZSBhdCBhbGwsIHRoYXQgZGViYXRlIGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCBlaXRoZXIKK3dheS4gIEluIGFueSBldmVudCwgZXZlbiBpZiBkb2N1bWVudGF0aW9uIHdlcmUgYXZhaWxhYmxlIHRvZGF5IGl0IHdvdWxkCit0YWtlIHF1aXRlIGEgd2hpbGUgZm9yIGEgdXNhYmxlIGRyaXZlciB0byBiZSB3cml0dGVuLCBlc3BlY2lhbGx5IHNpbmNlIEknbQorbm90IGNvbnZpbmNlZCB0aGF0IHRoZSBlZmZvcnQgcmVxdWlyZWQgd291bGQgYmUgd29ydGh3aGlsZS4KKworSG93ZXZlciwgQnVzTG9naWMgZG9lcyByZW1haW4gY29tbWl0dGVkIHRvIHByb3ZpZGluZyBhIGhpZ2ggcGVyZm9ybWFuY2UKK1NDU0kgc29sdXRpb24gZm9yIHRoZSBMaW51eCBjb21tdW5pdHksIGFuZCBkb2VzIG5vdCB3YW50IHRvIHNlZSBhbnlvbmUgbGVmdAordW5hYmxlIHRvIHJ1biBMaW51eCBiZWNhdXNlIHRoZXkgaGF2ZSBhIEZsYXNocG9pbnQgTFQuICBUaGVyZWZvcmUsIEJ1c0xvZ2ljCitoYXMgcHV0IGluIHBsYWNlIGEgZGlyZWN0IHVwZ3JhZGUgcHJvZ3JhbSB0byBhbGxvdyBhbnkgTGludXggdXNlciB3b3JsZHdpZGUKK3RvIHRyYWRlIGluIHRoZWlyIEZsYXNoUG9pbnQgTFQgZm9yIHRoZSBuZXcgQlQtOTQ4IE11bHRpTWFzdGVyIFBDSSBVbHRyYQorU0NTSSBIb3N0IEFkYXB0ZXIuICBUaGUgQlQtOTQ4IGlzIHRoZSBVbHRyYSBTQ1NJIHN1Y2Nlc3NvciB0byB0aGUgQlQtOTQ2QworYW5kIGhhcyBhbGwgdGhlIGJlc3QgZmVhdHVyZXMgb2YgYm90aCB0aGUgQlQtOTQ2QyBhbmQgRmxhc2hQb2ludCBMVCwKK2luY2x1ZGluZyBzbWFydCB0ZXJtaW5hdGlvbiBhbmQgYSBmbGFzaCBQUk9NIGZvciBlYXN5IGZpcm13YXJlIHVwZGF0ZXMsIGFuZAoraXMgb2YgY291cnNlIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJlc2VudCBMaW51eCBkcml2ZXIuICBUaGUgcHJpY2UgZm9yIHRoaXMKK3VwZ3JhZGUgaGFzIGJlZW4gc2V0IGF0IFVTICQ0NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZywgYW5kIHRoZSB1cGdyYWRlCitwcm9ncmFtIHdpbGwgYmUgYWRtaW5pc3RlcmVkIHRocm91Z2ggQnVzTG9naWMgVGVjaG5pY2FsIFN1cHBvcnQsIHdoaWNoIGNhbgorYmUgcmVhY2hlZCBieSBlbGVjdHJvbmljIG1haWwgYXQgdGVjaHN1cEBidXNsb2dpYy5jb20sIGJ5IFZvaWNlIGF0ICsxIDQwOAorNjU0LTA3NjAsIG9yIGJ5IEZBWCBhdCArMSA0MDggNDkyLTE1NDIuCisKK0FzIG9mIDE0IEp1bmUgMTk5NiwgdGhlIG9yaWdpbmFsIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgTFQgdG8gQlQtOTQ4IHVwZ3JhZGUKK3Byb2dyYW0gaGFzIG5vdyBiZWVuIGV4dGVuZGVkIHRvIGVuY29tcGFzcyB0aGUgRmxhc2hQb2ludCBMVyBXaWRlIFVsdHJhCitTQ1NJIEhvc3QgQWRhcHRlci4gIEFueSBMaW51eCB1c2VyIHdvcmxkd2lkZSBtYXkgdHJhZGUgaW4gdGhlaXIgRmxhc2hQb2ludAorTFcgKEJULTk1MCkgZm9yIGEgQlQtOTU4IE11bHRpTWFzdGVyIFBDSSBVbHRyYSBTQ1NJIEhvc3QgQWRhcHRlci4gIFRoZQorcHJpY2UgZm9yIHRoaXMgdXBncmFkZSBoYXMgYmVlbiBzZXQgYXQgVVMgJDY1IHBsdXMgc2hpcHBpbmcgYW5kIGhhbmRsaW5nLgorCitJIHdhcyBhIGJldGEgdGVzdCBzaXRlIGZvciB0aGUgQlQtOTQ4Lzk1OCwgYW5kIHZlcnNpb25zIDEuMi4xIGFuZCAxLjMuMSBvZgorbXkgQnVzTG9naWMgZHJpdmVyIGFscmVhZHkgaW5jbHVkZWQgbGF0ZW50IHN1cHBvcnQgZm9yIHRoZSBCVC05NDgvOTU4LgorQWRkaXRpb25hbCBjb3NtZXRpYyBzdXBwb3J0IGZvciB0aGUgVWx0cmEgU0NTSSBNdWx0aU1hc3RlciBjYXJkcyB3YXMgYWRkZWQKK3N1YnNlcXVlbnQgcmVsZWFzZXMuICBBcyBhIHJlc3VsdCBvZiB0aGlzIGNvb3BlcmF0aXZlIHRlc3RpbmcgcHJvY2VzcywKK3NldmVyYWwgZmlybXdhcmUgYnVncyB3ZXJlIGZvdW5kIGFuZCBjb3JyZWN0ZWQuICBNeSBoZWF2aWx5IGxvYWRlZCBMaW51eAordGVzdCBzeXN0ZW0gcHJvdmlkZWQgYW4gaWRlYWwgZW52aXJvbm1lbnQgZm9yIHRlc3RpbmcgZXJyb3IgcmVjb3ZlcnkKK3Byb2Nlc3NlcyB0aGF0IGFyZSBtdWNoIG1vcmUgcmFyZWx5IGV4ZXJjaXNlZCBpbiBwcm9kdWN0aW9uIHN5c3RlbXMsIGJ1dAorYXJlIGNydWNpYWwgdG8gb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiAgSXQgd2FzIGVzcGVjaWFsbHkgY29udmVuaWVudAorYmVpbmcgYWJsZSB0byB3b3JrIGRpcmVjdGx5IHdpdGggdGhlaXIgZmlybXdhcmUgZW5naW5lZXIgaW4gZGVtb25zdHJhdGluZwordGhlIHByb2JsZW1zIHVuZGVyIGNvbnRyb2wgb2YgdGhlIGZpcm13YXJlIGRlYnVnZ2luZyBlbnZpcm9ubWVudDsgdGhpbmdzCitzdXJlIGhhdmUgY29tZSBhIGxvbmcgd2F5IHNpbmNlIHRoZSBsYXN0IHRpbWUgSSB3b3JrZWQgb24gZmlybXdhcmUgZm9yIGFuCitlbWJlZGRlZCBzeXN0ZW0uICBJIGFtIHByZXNlbnRseSB3b3JraW5nIG9uIHNvbWUgcGVyZm9ybWFuY2UgdGVzdGluZyBhbmQKK2V4cGVjdCB0byBoYXZlIHNvbWUgZGF0YSB0byByZXBvcnQgaW4gdGhlIG5vdCB0b28gZGlzdGFudCBmdXR1cmUuCisKK0J1c0xvZ2ljIGFza2VkIG1lIHRvIHNlbmQgdGhpcyBhbm5vdW5jZW1lbnQgc2luY2UgYSBsYXJnZSBwZXJjZW50YWdlIG9mIHRoZQorcXVlc3Rpb25zIHJlZ2FyZGluZyBzdXBwb3J0IGZvciB0aGUgRmxhc2hQb2ludCBoYXZlIGVpdGhlciBiZWVuIHNlbnQgdG8gbWUKK2RpcmVjdGx5IHZpYSBlbWFpbCwgb3IgaGF2ZSBhcHBlYXJlZCBpbiB0aGUgTGludXggbmV3c2dyb3VwcyBpbiB3aGljaCBJCitwYXJ0aWNpcGF0ZS4gIFRvIHN1bW1hcml6ZSwgQnVzTG9naWMgaXMgb2ZmZXJpbmcgTGludXggdXNlcnMgYW4gdXBncmFkZQorZnJvbSB0aGUgdW5zdXBwb3J0ZWQgRmxhc2hQb2ludCBMVCAoQlQtOTMwKSB0byB0aGUgc3VwcG9ydGVkIEJULTk0OCBmb3IgVVMKKyQ0NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZywgb3IgZnJvbSB0aGUgdW5zdXBwb3J0ZWQgRmxhc2hQb2ludCBMVworKEJULTk1MCkgdG8gdGhlIHN1cHBvcnRlZCBCVC05NTggZm9yICQ2NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZy4KK0NvbnRhY3QgQnVzTG9naWMgVGVjaG5pY2FsIFN1cHBvcnQgYXQgdGVjaHN1cEBidXNsb2dpYy5jb20gb3IgKzEgNDA4Cis2NTQtMDc2MCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVpciBvZmZlci4KKworCQlMZW9uYXJkIE4uIFp1YmtvZmYKKwkJbG56QGRhbmRlbGlvbi5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9MSUNFTlNFLkZsYXNoUG9pbnQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5GbGFzaFBvaW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDBmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5GbGFzaFBvaW50CkBAIC0wLDAgKzEsNjAgQEAKKyAgICAgICAgICAgICAgICAgICAgIEZsYXNoUG9pbnQgRHJpdmVyIERldmVsb3BlcidzIEtpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMAorCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTUtMTk5NiBieSBNeWxleCBDb3Jwb3JhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgICBhKSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiwKKworICAgIG9yCisKKyAgICBiKSB0aGUgIkJTRC1zdHlsZSBMaWNlbnNlIiBpbmNsdWRlZCBiZWxvdy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFksIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIG9yIHRoZSBCU0Qtc3R5bGUgTGljZW5zZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitUaGUgQlNELXN0eWxlIExpY2Vuc2UgaXMgYXMgZm9sbG93czoKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGlzIExJQ0VOU0UuRmxhc2hQb2ludAorICAgZmlsZSwgd2l0aG91dCBtb2RpZmljYXRpb24sIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgdGhlIGJlZ2lubmluZyBvZiBhbGwgc291cmNlIGZpbGVzOgorCisgICAgICAgIENvcHlyaWdodCAxOTk1LTE5OTYgYnkgTXlsZXggQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBib3RoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICAgICBhbmQgYSBCU0Qtc3R5bGUgY29weXJpZ2h0OyBzZWUgTElDRU5TRS5GbGFzaFBvaW50IGZvciBkZXRhaWxzLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWUgb2YgTXlsZXggQ29ycG9yYXRpb24gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1ZTEVYIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCitOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvTXlsZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGY2OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dApAQCAtMCwwICsxLDUgQEAKK1BsZWFzZSBzZWUgdGhlIGZpbGUgUkVBRE1FLkJ1c0xvZ2ljIGZvciBpbmZvcm1hdGlvbiBhYm91dCBMaW51eCBzdXBwb3J0IGZvcgorTXlsZXggKGZvcm1lcmx5IEJ1c0xvZ2ljKSBNdWx0aU1hc3RlciBhbmQgRmxhc2hQb2ludCBTQ1NJIEhvc3QgQWRhcHRlcnMuCisKK1RoZSBNeWxleCBEQUM5NjAgUENJIFJBSUQgQ29udHJvbGxlcnMgYXJlIG5vdyBzdXBwb3J0ZWQuICBQbGVhc2UgY29uc3VsdAoraHR0cDovL3d3dy5kYW5kZWxpb24uY29tL0xpbnV4LyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgREFDOTYwIGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9OaW5qYVNDU0kudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL05pbmphU0NTSS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxNzgwZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9OaW5qYVNDU0kudHh0CkBAIC0wLDAgKzEsMTMwIEBACisKKyAgICAgICAgIFdvcmtCaVQgTmluamFTQ1NJLTMvMzJCaSBkcml2ZXIgZm9yIExpbnV4CisKKzEuIENvbW1lbnQKKyBUaGlzIGlzIFdvcmtiaXQgY29ycC4ncyhodHRwOi8vd3d3LndvcmtiaXQuY28uanAvKSBOaW5qYVNDU0ktMworKGh0dHA6Ly93d3cud29ya2JpdC5jby5qcC90cy96X25qM3IuaHRtbCkgYW5kIE5pbmphU0NTSS0zMkJpCisoaHR0cDovL3d3dy53b3JrYml0LmNvLmpwL3RzL3pfbmpzYzMyYmkuaHRtbCkgUENNQ0lBIGNhcmQgZHJpdmVyIG1vZHVsZQorZm9yIExpbnV4LgorCisyLiBNeSBMaW51eCBlbnZpcm9ubWVudAorTGludXgga2VybmVsOiAyLjQuNyAvIDIuMi4xOQorcGNtY2lhLWNzOiAgICAzLjEuMjcKK2djYzogICAgICAgICAgZ2NjLTIuOTUuNAorUEMgY2FyZDogICAgICBJLU8gZGF0YSBQQ1NDLUYgKE5pbmphU0NTSS0zKQorICAgICAgICAgICAgICBJLU8gZGF0YSBDQlNDLUlJIGluIDE2IGJpdCBtb2RlIChOaW5qYVNDU0ktMzJCaSkKK1NDU0kgZGV2aWNlOiAgSS1PIGRhdGEgQ0RQUy1QWDI0IChDRC1ST00gZHJpdmUpCisgICAgICAgICAgICAgIE1lZGlhIEludGVsbGlnZW50IE1NTy02NDBHVCAoT3B0aWNhbCBkaXNrIGRyaXZlKQorCiszLiBJbnN0YWxsCitbMV0gQ2hlY2sgeW91ciBQQyBjYXJkIGlzIHRydWUgIk5pbmphU0NTSS0zIiBjYXJkLgorICAgIElmIHlvdSBpbnN0YWxsZWQgcGNtY2lhLWNzIGFscmVhZHksIHBjbWNpYSByZXBvcnRzIHlvdXIgY2FyZCBhcyBVTktOT1dOCisgICAgY2FyZCwgYW5kIHdyaXRlIFsiV0JUIiwgIk5pbmphU0NTSS0zIiwgIlIxLjAiXSBvciBzb21lIG90aGVyIHN0cmluZyB0bworICAgIHlvdXIgY29uc29sZSBvciBsb2cgZmlsZS4KKyAgICBZb3UgY2FuIGFsc28gdXNlICJjYXJkY3RsIiBwcm9ncmFtICh0aGlzIHByb2dyYW0gaXMgaW4gcGNtY2lhLWNzIHNvdXJjZQorICAgIGNvZGUpIHRvIGdldCBtb3JlIGluZm8uCisKKyMgY2F0IC92YXIvbG9nL21lc3NnYWVzCisuLi4KK0phbiAgMiAwMzo0NTowNiBsaW5kYmVyZyBjYXJkbWdyWzc4XTogdW5zdXBwb3J0ZWQgY2FyZCBpbiBzb2NrZXQgMQorSmFuICAyIDAzOjQ1OjA2IGxpbmRiZXJnIGNhcmRtZ3JbNzhdOiAgIHByb2R1Y3QgaW5mbzogIldCVCIsICJOaW5qYVNDU0ktMyIsICJSMS4wIgorLi4uCisjIGNhcmRjdGwgaWRlbnQKK1NvY2tldCAwOgorICBubyBwcm9kdWN0IGluZm8gYXZhaWxhYmxlCitTb2NrZXQgMToKKyAgcHJvZHVjdCBpbmZvOiAiSU8gREFUQSIsICJDQlNDMTYgICAgICAgIiwgIjEiCisKKworWzJdIEdldCBMaW51eCBrZXJuZWwgc291cmNlLCBhbmQgZXh0cmFjdCBpdCB0byAvdXNyL3NyYy4KKyAgICBCZWNhdXNlIE5pbmphU0NTSSBkcml2ZXIgcmVxdWllcnMgc29tZSBTQ1NJIGhlYWRlciBmaWxlcyBpbiBMaW51eCBrZXJuZWwKKyAgICBzb3VyY2UuCisgICAgSSByZWNvbWVuZCByZWJ1aWxkaW5nIHlvdXIga2VybmVsLiBUaGlzIGVsaW1pbmF0ZSBzb21lIHZlcnNpb25pbmcgcHJvYmxlbS4KKyQgY2QgL3Vzci9zcmMKKyQgdGFyIC16eHZmIGxpbnV4LXgueC54LnRhci5negorJCBjZCBsaW51eAorJCBtYWtlIGNvbmZpZworLi4uCisKK1szXSBJZiB5b3UgdXNlIHRoaXMgZHJpdmVyIHdpdGggS2VybmVsIDIuMiwgVW5wYWNrIHBjbWNpYS1jcyBpbiBzb21lIGRpcmVjdG9yeQorICAgIGFuZCBtYWtlICYgaW5zdGFsbC4gVGhpcyBkcml2ZXIgcmVxdWllcyBwY21jaWEtY3MgaGVhZGVyIGZpbGUuCiskIGNkIC91c3Ivc3JjCiskIHRhciB6eHZmIGNzLXBjbWNpYS1jcy0zLngueC50YXIuZ3oKKy4uLgorCitbNF0gRXh0cmFjdCB0aGlzIGRyaXZlcidzIGFyY2hpdmUgc29tZXdoZXJlLCBhbmQgZWRpdCBNYWtlZmlsZSwgdGhlbiBkbyBtYWtlLgorJCB0YXIgLXp4dmYgbnNwX2NzLXgueC50YXIuZ3oKKyQgY2QgbnNwX2NzLXgueAorJCBlbWFjcyBNYWtlZmlsZQorLi4uCiskIG1ha2UKKworWzVdIENvcHkgbnNwX2NzLm8gdG8gc3VpdGFibGUgcGxhc2UsIGxpa2UgL2xpYi9tb2R1bGVzLzxLZXJuZWwgdmVyc2lvbj4vcGNtY2lhLyAuCisKK1s2XSBBZGQgdGhlc2UgbGluZXMgdG8gL2V0Yy9wY21jaWEvY29uZmlnIC4KKyAgICBJZiB5b3UgeXNlIHBjbWNpYS1jcy0zLjEuOCBvciBsYXRlciwgd2UgY2FuIHVzZSAibnNwX2NzLmNvbmYiIGZpbGUuCisgICAgU28sIHlvdSBkb24ndCBuZWVkIHRvIGVkaXQgZmlsZS4gSnVzdCBjb3B5IHRvIC9ldGMvcGNtY2lhLyAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RldmljZSAibnNwX2NzIgorICBjbGFzcyAic2NzaSIgbW9kdWxlICJuc3BfY3MiCisKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMiCisgIHZlcnNpb24gIldCVCIsICJOaW5qYVNDU0ktMyIsICJSMS4wIgorICBiaW5kICJuc3BfY3MiCisKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSIKKyAgdmVyc2lvbiAiV09SS0JJVCIsICJVbHRyYU5pbmphLTE2IiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKKworIyBPRU0KK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSAvIElPLURBVEEiCisgIHZlcnNpb24gIklPIERBVEEiLCAiQ0JTQzE2ICAgICAgICIsICIxIgorICBiaW5kICJuc3BfY3MiCisKKyMgT0VNCitjYXJkICJXb3JrQml0IE5pbmphU0NTSS0zMkJpICgxNmJpdCkgLyBLTUUtMSIKKyAgdmVyc2lvbiAiS01FICAgICIsICJTQ1NJLUNBUkQtMDAxIiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSAvIEtNRS0yIgorICB2ZXJzaW9uICJLTUUgICAgIiwgIlNDU0ktQ0FSRC0wMDIiLCAiMSIKKyAgYmluZCAibnNwX2NzIgorY2FyZCAiV29ya0JpdCBOaW5qYVNDU0ktMzJCaSAoMTZiaXQpIC8gS01FLTMiCisgIHZlcnNpb24gIktNRSAgICAiLCAiU0NTSS1DQVJELTAwMyIsICIxIgorICBiaW5kICJuc3BfY3MiCitjYXJkICJXb3JrQml0IE5pbmphU0NTSS0zMkJpICgxNmJpdCkgLyBLTUUtNCIKKyAgdmVyc2lvbiAiS01FICAgICIsICJTQ1NJLUNBUkQtMDA0IiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWzddIFN0YXJ0IChvciByZXN0YXJ0KSBwY21jaWEtY3MuCisjIC9ldGMvcmMuZC9yYy5wY21jaWEgc3RhcnQgICAgICAgIChCU0Qgc3R5bGUpCitvcgorIyAvZXRjL2luaXQuZC9wY21jaWEgc3RhcnQgICAgICAgICAoU1lTViBzdHlsZSkKKworCis0LiBIaXN0b3J5CitTZWUgUkVBRE1FLm5pbl9jcyAuCisKKzUuIENhdXRpb24KKyBJZiB5b3UgZWplY3QgY2FyZCB3aGVuIGRvaW5nIHNvbWUgb3BlcmF0aW9uIGZvciB5b3VyIFNDU0kgZGV2aWNlIG9yIHN1c3BlbmQKK3lvdXIgY29tcHV0ZXIsIHlvdSBlbmNvdW50IHNvbWUgKkJBRCogZXJyb3IgbGlrZSBkaXNrIGNyYXNoLgorIEl0IHdvcmtzIGdvb2Qgd2hlbiBJIHVzaW5nIHRoaXMgZHJpdmVyIHJpZ2h0IHdheS4gQnV0IEknbSBub3QgZ3VhcmFudGVlCit5b3VyIGRhdGEuIFBsZWFzZSBiYWNrdXAgeW91ciBkYXRhIHdoZW4geW91IHVzZSB0aGlzIGRyaXZlci4KKworNi4gS25vd24gQnVncworIEluIDIuNCBrZXJuZWwsIHlvdSBjYW4ndCB1c2UgNjQwTUIgT3B0aWNhbCBkaXNrLiBUaGlzIGVycm9yIGNvbWVzIGZyb20KK2hpZ2ggbGV2ZWwgU0NTSSBkcml2ZXIuCisKKzcuIFRlc3RpbmcKKyBQbGVhc2Ugc2VuZCBtZSBzb21lIHJlcG9ydHMoYnVnIHJlcG9ydHMgZXRjLi4pIG9mIHRoaXMgc29mdHdhcmUuCitXaGVuIHlvdSBzZW5kIHJlcG9ydCwgcGxlYXNlIHRlbGwgbWUgdGhlc2Ugb3IgbW9yZS4KKwljYXJkIG5hbWUKKwlrZXJuZWwgdmVyc2lvbgorCXlvdXIgU0NTSSBkZXZpY2UgbmFtZShoYXJkIGRyaXZlLCBDRC1ST00sIGV0Yy4uLikKKworOC4gQ29weXJpZ2h0CisgU2VlIEdQTC4KKworCisyMDAxLzA4LzA4IHlva290YUBuZXRsYWIuaXMudHN1a3ViYS5hYy5qcCA8WU9LT1RBIEhpcm9zaGk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlMDIyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dApAQCAtMCwwICsxLDE4MyBAQAorJElkOiBSRUFETUUuYWhhMTUyeCx2IDEuMiAxOTk5LzEyLzI1IDE1OjMyOjMwIGZpc2NoZXIgRXhwIGZpc2NoZXIgJAorQWRhcHRlYyBBSEEtMTUyMC8xNTIyIFNDU0kgZHJpdmVyIGZvciBMaW51eCAoYWhhMTUyeCkKKworQ29weXJpZ2h0IDE5OTMtMTk5OSBK/HJnZW4gRmlzY2hlciA8ZmlzY2hlckBub3JiaXQuZGU+CitUQzE1NTAgcGF0Y2hlcyBieSBMdXVrIHZhbiBEaWprIChsZHpAeHM0YWxsLm5sKQorCisKK0luIFJldmlzaW9uIDIgdGhlIGRyaXZlciB3YXMgbW9kaWZpZWQgYSBsb3QgKGVzcGVjaWFsbHkgdGhlCitib3R0b20taGFsZiBoYW5kbGVyIGNvbXBsZXRlKCkpLgorCitUaGUgZHJpdmVyIGlzIG11Y2ggY2xlYW5lciBub3csIGhhcyBzdXBwb3J0IGZvciB0aGUgbmV3CitlcnJvciBoYW5kbGluZyBjb2RlIGluIDIuMywgcHJvZHVjZWQgbGVzcyBjcHUgbG9hZCAobXVjaAorbGVzcyBwb2xsaW5nIGxvb3BzKSwgaGFzIHNsaWdodGx5IGhpZ2hlciB0aHJvdWdocHV0IChhdAorbGVhc3Qgb24gbXkgYW5jaWVudCB0ZXN0IGJveDsgYSBpNDg2LzMzTWh6LzIwTUIpLgorCisKK0NPTkZJR1VSQVRJT04gQVJHVU1FTlRTOgorCitJT1BPUlQgICAgICAgIGJhc2UgaW8gYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDM0MC8weDE0MCkKK0lSUSAgICAgICAgICAgaW50ZXJydXB0IGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKDktMTI7IGRlZmF1bHQgMTEpCitTQ1NJX0lEICAgICAgIHNjc2kgaWQgb2YgY29udHJvbGxlciAgICAgICAgICAgICAgICAgICAgICgwLTc7IGRlZmF1bHQgNykKK1JFQ09OTkVDVCAgICAgYWxsb3cgdGFyZ2V0cyB0byBkaXNjb25uZWN0IGZyb20gdGhlIGJ1cyAgKDAvMTsgZGVmYXVsdCAxIFtvbl0pCitQQVJJVFkgICAgICAgIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcgICAgICAgICAgICAgICAgICAgICgwLzE7IGRlZmF1bHQgMSBbb25dKQorU1lOQ0hST05PVVMgICBlbmFibGUgc3luY2hyb25vdXMgdHJhbnNmZXJzICAgICAgICAgICAgICAoMC8xOyBkZWZhdWx0IDEgW29uXSkKK0RFTEFZOiAgICAgICAgYnVzIHJlc2V0IGRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMTAwKQorRVhUX1RSQU5TOiAgICBlbmFibGUgZXh0ZW5kZWQgdHJhbnNsYXRpb24gICAgICAgICAgICAgICAoMC8xOiBkZWZhdWx0IDAgW29mZl0pCisgICAgICAgICAgICAgIChzZWUgTk9URVMpCisKK0NPTVBJTEUgVElNRSBDT05GSUdVUkFUSU9OIChnbyBpbnRvIEFIQTE1MlggaW4gZHJpdmVycy9zY3NpL01ha2VmaWxlKToKKworLURBVVRPQ09ORgorIHVzZSBjb25maWd1cmF0aW9uIHRoZSBjb250cm9sbGVyIHJlcG9ydHMgKEFIQS0xNTJ4IG9ubHkpCisKKy1EU0tJUF9CSU9TVEVTVAorIERvbid0IHRlc3QgZm9yIEJJT1Mgc2lnbmF0dXJlIChBSEEtMTUxMCBvciBkaXNhYmxlZCBCSU9TKQorCistRFNFVFVQMD0ieyBJT1BPUlQsIElSUSwgU0NTSV9JRCwgUkVDT05ORUNULCBQQVJJVFksIFNZTkNIUk9OT1VTLCBERUxBWSwgRVhUX1RSQU5TIH0iCisgb3ZlcnJpZGUgZm9yIHRoZSBmaXJzdCBjb250cm9sbGVyIAorCistRFNFVFVQMT0ieyBJT1BPUlQsIElSUSwgU0NTSV9JRCwgUkVDT05ORUNULCBQQVJJVFksIFNZTkNIUk9OT1VTLCBERUxBWSwgRVhUX1RSQU5TIH0iCisgb3ZlcnJpZGUgZm9yIHRoZSBzZWNvbmQgY29udHJvbGxlcgorCistREFIQTE1MlhfREVCVUcKKyBlbmFibGUgZGVidWdnaW5nIG91dHB1dAorCistREFIQTE1MlhfU1RBVAorIGVuYWJsZSBzb21lIHN0YXRpc3RpY3MKKworCitMSUxPIENPTU1BTkQgTElORSBPUFRJT05TOgorCithaGExNTJ4PTxJT1BPUlQ+Wyw8SVJRPlssPFNDU0ktSUQ+Wyw8UkVDT05ORUNUPlssPFBBUklUWT5bLDxTWU5DSFJPTk9VUz5bLDxERUxBWT4gWyw8RVhUX1RSQU5TXV1dXV1dXQorCisgVGhlIG5vcm1hbCBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcgYSBjb21tYW5kIGxpbmUuCisgV2hlbiB5b3UgZG8gdGhpcywgdGhlIEJJT1MgdGVzdCBpcyBza2lwcGVkLiBFbnRlcmVkIHZhbHVlcyBoYXZlIHRvIGJlCisgdmFsaWQgKGtub3duKS4gIERvbid0IHVzZSB2YWx1ZXMgdGhhdCBhcmVuJ3Qgc3VwcG9ydGVkIHVuZGVyIG5vcm1hbAorIG9wZXJhdGlvbi4gIElmIHlvdSB0aGluayB0aGF0IHlvdSBuZWVkIG90aGVyIHZhbHVlczogY29udGFjdCBtZS4KKyBGb3IgdHdvIGNvbnRyb2xsZXJzIHVzZSB0aGUgYWhhMTUyeCBzdGF0ZW1lbnQgdHdpY2UuCisKKworU1lNQk9MUyBGT1IgTU9EVUxFIENPTkZJR1VSQVRJT046CisKK0Nob29zZSBmcm9tIDIgYWx0ZXJuYXRpdmVzOgorCisxLiBzcGVjaWZ5IGV2ZXJ5dGhpbmcgKG9sZCkKKworYWhhMTUyeD1JT1BPUlQsSVJRLFNDU0lfSUQsUkVDT05ORUNULFBBUklUWSxTWU5DSFJPTk9VUyxERUxBWSxFWFRfVFJBTlMKKyAgY29uZmlndXJhdGlvbiBvdmVycmlkZSBmb3IgZmlyc3QgY29udHJvbGxlcgorCisKK2FoYTE1MngxPUlPUE9SVCxJUlEsU0NTSV9JRCxSRUNPTk5FQ1QsUEFSSVRZLFNZTkNIUk9OT1VTLERFTEFZLEVYVF9UUkFOUworICBjb25maWd1cmF0aW9uIG92ZXJyaWRlIGZvciBzZWNvbmQgY29udHJvbGxlcgorCisyLiBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbmVlZCB0byAoaXJxIG9yIGlvIGlzIHJlcXVpcmVkOyBuZXcpCisKK2lvPUlPUE9SVDBbLElPUE9SVDFdCisgIElPUE9SVCBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKK2lycT1JUlEwWyxJUlExXQorICBJUlEgZm9yIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbGxlcgorCitzY3NpaWQ9U0NTSUlEMFssU0NTSUlEMV0KKyAgU0NTSUlEIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworcmVjb25uZWN0PVJFQ09OTkVDVDBbLFJFQ09OTkVDVDFdCisgIGFsbG93IHRhcmdldHMgdG8gZGlzY29ubmVjdCBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKK3Bhcml0eT1QQVIwW1BBUjFdCisgIHVzZSBwYXJpdHkgZm9yIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbGxlcgorCitzeW5jPVNZTkNIUk9OT1VTMFssU1lOQ0hST05PVVMxXQorICBlbmFibGUgc3luY2hyb25vdXMgdHJhbnNmZXJzIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworZGVsYXk9REVMQVkwWyxERUxBWTFdCisgIHJlc2V0IERFTEFZIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworZXh0dHJhbnM9RVhUVFJBTlMwWyxFWFRUUkFOUzFdCisgIGVuYWJsZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKKworSWYgeW91IHVzZSBib3RoIGFsdGVybmF0aXZlcyB0aGUgZmlyc3Qgd2lsbCBiZSB0YWtlbi4KKworCitOT1RFUyBPTiBFWFRfVFJBTlM6IAorCitTQ1NJIHVzZXMgYmxvY2sgbnVtYmVycyB0byBhZGRyZXNzIGJsb2Nrcy9zZWN0b3JzIG9uIGEgZGV2aWNlLgorVGhlIEJJT1MgdXNlcyBhIGN5bGluZGVyL2hlYWQvc2VjdG9yIGFkZHJlc3Npbmcgc2NoZW1lIChDL0gvUykKK3NjaGVtZSBpbnN0ZWFkLiAgRE9TIGV4cGVjdHMgYSBCSU9TIG9yIGRyaXZlciB0aGF0IHVuZGVyc3RhbmRzIHRoaXMKK0MvSC9TIGFkZHJlc3NpbmcuCisKK1RoZSBudW1iZXIgb2YgY3lsaW5kZXJzL2hlYWRzL3NlY3RvcnMgaXMgY2FsbGVkIGdlb21ldHJ5IGFuZCBpcyByZXF1aXJlZAorYXMgYmFzZSBmb3IgcmVxdWVzdHMgaW4gQy9IL1MgYWRkcmVzc2luZy4gIFNDU0kgb25seSBrbm93cyBhYm91dCB0aGUKK3RvdGFsIGNhcGFjaXR5IG9mIGRpc2tzIGluIGJsb2NrcyAoc2VjdG9ycykuCisKK1RoZXJlZm9yZSB0aGUgU0NTSSBCSU9TL0RPUyBkcml2ZXIgaGFzIHRvIGNhbGN1bGF0ZSBhIGxvZ2ljYWwvdmlydHVhbAorZ2VvbWV0cnkganVzdCB0byBiZSBhYmxlIHRvIHN1cHBvcnQgdGhhdCBhZGRyZXNzaW5nIHNjaGVtZS4gIFRoZSBnZW9tZXRyeQorcmV0dXJuZWQgYnkgdGhlIFNDU0kgQklPUyBpcyBhIHB1cmUgY2FsY3VsYXRpb24gYW5kIGhhcyBub3RoaW5nIHRvCitkbyB3aXRoIHRoZSByZWFsL3BoeXNpY2FsIGdlb21ldHJ5IG9mIHRoZSBkaXNrICh3aGljaCBpcyB1c3VhbGx5CitpcnJlbGV2YW50IGFueXdheSkuCisKK0Jhc2ljYWxseSB0aGlzIGhhcyBubyBpbXBhY3QgYXQgYWxsIG9uIExpbnV4LCBiZWNhdXNlIGl0IGFsc28gdXNlcyBibG9jaworaW5zdGVhZCBvZiBDL0gvUyBhZGRyZXNzaW5nLiAgVW5mb3J0dW5hdGVseSBDL0gvUyBhZGRyZXNzaW5nIGlzIGFsc28gdXNlZAoraW4gdGhlIHBhcnRpdGlvbiB0YWJsZSBhbmQgdGhlcmVmb3JlIGV2ZXJ5IG9wZXJhdGluZyBzeXN0ZW0gaGFzIHRvIGtub3cKK3RoZSByaWdodCBnZW9tZXRyeSB0byBiZSBhYmxlIHRvIGludGVycHJldCBpdC4KKworTW9yZW92ZXIgdGhlcmUgYXJlIGNlcnRhaW4gbGltaXRhdGlvbnMgdG8gdGhlIEMvSC9TIGFkZHJlc3Npbmcgc2NoZW1lLAorbmFtZWx5IHRoZSBhZGRyZXNzIHNwYWNlIGlzIGxpbWl0ZWQgdG8gdXB0byAyNTUgaGVhZHMsIHVwdG8gNjMgc2VjdG9ycworYW5kIGEgbWF4aW11bSBvZiAxMDIzIGN5bGluZGVycy4KKworVGhlIEFIQS0xNTIyIEJJT1MgY2FsY3VsYXRlcyB0aGUgZ2VvbWV0cnkgYnkgZml4aW5nIHRoZSBudW1iZXIgb2YgaGVhZHMKK3RvIDY0LCB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgdG8gMzIgYW5kIGJ5IGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YKK2N5bGluZGVycyBieSBkaXZpZGluZyB0aGUgY2FwYWNpdHkgcmVwb3J0ZWQgYnkgdGhlIGRpc2sgYnkgNjQqMzIgKDEgTUIpLgorVGhpcyBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHRyYW5zbGF0aW9uLgorCitXaXRoIHJlc3BlY3QgdG8gdGhlIGxpbWl0IG9mIDEwMjMgY3lsaW5kZXJzIHVzaW5nIEMvSC9TIHlvdSBjYW4gb25seQorYWRkcmVzcyB0aGUgZmlyc3QgR0Igb2YgeW91ciBkaXNrIGluIHRoZSBwYXJ0aXRpb24gdGFibGUuICBUaGVyZWZvcmUKK0JJT1NlcyBvZiBzb21lIG5ld2VyIGNvbnRyb2xsZXJzIGJhc2VkIG9uIHRoZSBBSUMtNjI2MC82MzYwIHN1cHBvcnQKK2V4dGVuZGVkIHRyYW5zbGF0aW9uLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBCSU9TIHVzZXMgMjU1IGZvciBoZWFkcywKKzYzIGZvciBzZWN0b3JzIGFuZCB0aGVuIGRpdmlkZXMgdGhlIGNhcGFjaXR5IG9mIHRoZSBkaXNrIGJ5IDI1NSo2MworKGFib3V0IDggTUIpLCBhcyBzb29uIGl0IHNlZXMgYSBkaXNrIGdyZWF0ZXIgdGhhbiAxIEdCLiAgVGhhdCByZXN1bHRzCitpbiBhIG1heGltdW0gb2YgYWJvdXQgOCBHQiBhZGRyZXNzYWJsZSBkaXNrc3BhY2UgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZQorKGJ1dCB0aGVyZSBhcmUgYWxyZWFkeSBiaWdnZXIgZGlza3Mgb3V0IHRoZXJlIHRvZGF5KS4KKworVG8gbWFrZSBpdCBldmVuIG1vcmUgY29tcGxpY2F0ZWQgdGhlIHRyYW5zbGF0aW9uIG1vZGUgbWlnaHQvbWlnaHQKK25vdCBiZSBjb25maWd1cmFibGUgaW4gY2VydGFpbiBCSU9TIHNldHVwcy4KKworVGhpcyBkcml2ZXIgZG9lcyBzb21lIG1vcmUgb3IgbGVzcyBmYWlsc2FmZSBndWVzc2luZyB0byBnZXQgdGhlCitnZW9tZXRyeSByaWdodCBpbiBtb3N0IGNhc2VzOgorCistIGZvciBkaXNrczwxR0I6IHVzZSBkZWZhdWx0IHRyYW5zbGF0aW9uIChDLzMyLzY0KQorCistIGZvciBkaXNrcz4xR0I6CisgIC0gdGFrZSBjdXJyZW50IGdlb21ldHJ5IGZyb20gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICh1c2luZyBzY3NpY2FtX2Jpb3NfcGFyYW0gYW5kIGFjY2VwdCBvbmx5IGB2YWxpZCcgZ2VvbWV0cmllcywKKyAgICBpZS4gZWl0aGVyIChDLzMyLzY0KSBvciAoQy82My8yNTUpKS4gIFRoaXMgY2FuIGJlIGV4dGVuZGVkIHRyYW5zbGF0aW9uCisgICAgZXZlbiBpZiBpdCdzIG5vdCBlbmFibGVkIGluIHRoZSBkcml2ZXIuCisKKyAgLSBpZiB0aGF0IGZhaWxzLCB0YWtlIGV4dGVuZGVkIHRyYW5zbGF0aW9uIGlmIGVuYWJsZWQgYnkgb3ZlcnJpZGUsCisgICAga2VybmVsIG9yIG1vZHVsZSBwYXJhbWV0ZXIsIG90aGVyd2lzZSB0YWtlIGRlZmF1bHQgdHJhbnNsYXRpb24gYW5kCisgICAgYXNrIHRoZSB1c2VyIGZvciB2ZXJpZmljYXRpb24uICBUaGlzIG1pZ2h0IG9uIG5vdCB5ZXQgcGFydGl0aW9uZWQKKyAgICBkaXNrcy4KKworCitSRUZFUkVOQ0VTIFVTRUQ6CisKKyAiQUlDLTYyNjAgU0NTSSBDaGlwIFNwZWNpZmljYXRpb24iLCBBZGFwdGVjIENvcnBvcmF0aW9uLgorCisgIlNDU0kgQ09NUFVURVIgU1lTVEVNIElOVEVSRkFDRSAtIDIgKFNDU0ktMikiLCBYM1Q5LjIvODYtMTA5IHJldi4gMTBoCisKKyAiV3JpdGluZyBhIFNDU0kgZGV2aWNlIGRyaXZlciBmb3IgTGludXgiLCBSaWsgRmFpdGggKGZhaXRoQGNzLnVuYy5lZHUpCisKKyAiS2VybmVsIEhhY2tlcidzIEd1aWRlIiwgTWljaGFlbCBLLiBKb2huc29uIChqb2huc29ubUBzdW5zaXRlLnVuYy5lZHUpCisKKyAiQWRhcHRlYyAxNTIwLzE1MjIgVXNlcidzIEd1aWRlIiwgQWRhcHRlYyBDb3Jwb3JhdGlvbi4KKworIE1pY2hhZWwgSy4gSm9obnNvbiAoam9obnNvbm1Ac3Vuc2l0ZS51bmMuZWR1KQorCisgRHJldyBFY2toYXJkdCAoZHJld0Bjcy5jb2xvcmFkby5lZHUpCisKKyBFcmljIFlvdW5nZGFsZSAoZXJpY0BhbmRhbnRlLm9yZykgCisKKyBzcGVjaWFsIHRoYW5rcyB0byBFcmljIFlvdW5nZGFsZSBmb3IgdGhlIGZyZWUoISkgc3VwcGx5aW5nIHRoZQorIGRvY3VtZW50YXRpb24gb24gdGhlIGNoaXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlZWY3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dApAQCAtMCwwICsxLDUxNiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgICAgICAgICAgQWRhcHRlYyBVbHRyYTMyMCBGYW1pbHkgTWFuYWdlciBTZXQgdjEuMy4xMSAgICAgICAgICA9Cis9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPQorPSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFETUUgZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgID0KKz0gICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBPcGVyYXRpbmcgU3lzdGVtICAgICAgICAgICAgICAgICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGlzIGZpbGU6CisKKyAgMS4gU3VwcG9ydGVkIEhhcmR3YXJlCisgIDIuIFZlcnNpb24gSGlzdG9yeQorICAzLiBDb21tYW5kIExpbmUgT3B0aW9ucworICA0LiBBZGRpdGlvbmFsIE5vdGVzCisgIDUuIENvbnRhY3RpbmcgQWRhcHRlYworCisKKzEuIFN1cHBvcnRlZCBIYXJkd2FyZQorCisgICBUaGUgZm9sbG93aW5nIEFkYXB0ZWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyAKKyAgIGRyaXZlciBzZXQuIAorCisgICBVbHRyYTMyMCBBU0lDICAgICAgICAgICAgICBEZXNjcmlwdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQUlDLTc5MDFBICAgICAgICAgICAgICAgICAgU2luZ2xlIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQworICAgQUlDLTc5MDFCICAgICAgICAgICAgICAgICAgU2luZ2xlIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQyB3aXRoIFJldGFpbmVkIFRyYWluaW5nCisgICBBSUMtNzkwMkE0ICAgICAgICAgICAgICAgICBEdWFsIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQworICAgQUlDLTc5MDJCICAgICAgICAgICAgICAgICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQyB3aXRoIFJldGFpbmVkIFRyYWluaW5nCisKKyAgIFVsdHJhMzIwIEFkYXB0ZXJzICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNJQworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEFkYXB0ZWMgU0NTSSBDYXJkIDM5MzIwICAgIER1YWwgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgNzkwMkE0Lzc5MDJCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbikKKyAgIEFkYXB0ZWMgU0NTSSBDYXJkIDM5MzIwQSAgIER1YWwgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgICAgNzkwMkIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAob25lIGV4dGVybmFsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgtcGluLCB0d28gaW50ZXJuYWwgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMzkzMjBEICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8gICAgICA3OTAyQTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAodHdvIGV4dGVybmFsIFZIREMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbmUgaW50ZXJuYWwgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMzkzMjBEICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8gICAgICA3OTAyQTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAodHdvIGV4dGVybmFsIFZIREMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbmUgaW50ZXJuYWwgNjgtcGluKSBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFJQy03OTAyQiBBU0lDCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMCAgICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgIDc5MDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbiwgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA1MC1waW4pCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMEEgICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgIDc5MDFCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbiwgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA1MC1waW4pCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMExQICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgTG93IFByb2ZpbGUgICAgICAgIDc5MDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ktWCAxMzNNSHogdG8gVWx0cmEzMjAgU0NTSSBDYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT25lIGV4dGVybmFsIFZIREMsIG9uZSBpbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMjkzMjBBTFAgU2luZ2xlIENoYW5uZWwgNjQtYml0IExvdyBQcm9maWxlICAgICAgICA3OTAxQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJLVggMTMzTUh6IHRvIFVsdHJhMzIwIFNDU0kgQ2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9uZSBleHRlcm5hbCBWSERDLCBvbmUgaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbikKKzIuIFZlcnNpb24gSGlzdG9yeQorCisgICAxLjMuMTEgKEp1bHkgMTEsIDIwMDMpCisgICAgICAgIC0gRml4IHNldmVyYWwgZGVhZGxvY2sgaXNzdWVzLgorICAgICAgICAtIEFkZCAyOTMyMEFMUCBhbmQgMzkzMjBCIElkJ3MuCisKKyAgIDEuMy4xMCAoSnVuZSAzcmQsIDIwMDMpCisgICAgICAgIC0gQWxpZ24gdGhlIFNDQl9UQUcgZmllbGQgb24gYSAxNmJ5dGUgYm91bmRhcnkuICBUaGlzIGF2b2lkcworICAgICAgICAgIFNDQiBjb3JydXB0aW9uIG9uIHNvbWUgUENJLTMzIGJ1c3Nlcy4KKyAgICAgICAgLSBDb3JyZWN0IG5vbi16ZXJvIGx1bnMgb24gUmV2IEIuIGhhcmR3YXJlLgorICAgICAgICAtIFVwZGF0ZSBmb3IgY2hhbmdlIGluIDIuNS5YIFNDU0kgcHJvYyBGUyBpbnRlcmZhY2UuCisgICAgICAgIC0gV2hlbiBuZWdvdGlhdGlvbiBhc3luYyB2aWEgYW4gOGJpdCBXRFRSIG1lc3NhZ2UsIHNlbmQKKyAgICAgICAgICBhbiBTRFRSIHdpdGggYW4gb2Zmc2V0IG9mIDAgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0CisgICAgICAgICAga25vd3Mgd2UgYXJlIGFzeW5jLiAgVGhpcyB3b3JrcyBhcm91bmQgYSBmaXJtd2FyZSBkZWZlY3QKKyAgICAgICAgICBpbiB0aGUgUXVhbnR1bSBBdGxhcyAxMEsuCisgICAgICAgIC0gSW1wbGVtZW50IGNvbnRyb2xsZXIgc3VzdXBlbmQgYW5kIHJlc3VtZS4KKyAgICAgICAgLSBDbGVhciBQQ0kgZXJyb3Igc3RhdGUgZHVyaW5nIGRyaXZlciBhdHRhY2ggc28gdGhhdCB3ZQorICAgICAgICAgIGRvbid0IGRpc2FibGUgbWVtb3J5IG1hcHBlZCBJL08gZHVlIHRvIGEgc3RyYXkgd3JpdGUKKyAgICAgICAgICBieSBzb21lIG90aGVyIGRyaXZlciBwcm9iZSB0aGF0IG9jY3VycmVkIGJlZm9yZSB3ZQorICAgICAgICAgIGNsYWltZWQgdGhlIGNvbnRyb2xsZXIuCisKKyAgIDEuMy45IChNYXkgMjJuZCwgMjAwMykKKyAgICAgICAgLSBGaXggY29tcGlsZXIgZXJyb3JzLgorICAgICAgICAtIFJlbW92ZSBTL0cgc3BsaXR0aW5nIGZvciBzZWdtZW50cyB0aGF0IGNyb3NzIGEgNEdCIGJvdW5kYXJ5LgorICAgICAgICAgIFRoaXMgaXMgZ3VhcmFudGVlZCBub3QgdG8gaGFwcGVuIGluIExpbnV4LgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciBzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoKSBmb3VuZCBpbgorICAgICAgICAgIDIuNS5YIGtlcm5lbHMuCisgICAgICAgIC0gQWRkIDc5MDFCIHN1cHBvcnQuCisgICAgICAgIC0gU2ltcGxpZnkgaGFuZGxpbmcgb2YgdGhlIHBhY2t0aXplZCBsdW4gUmV2IEEgd29ya2Fyb3VuZC4KKyAgICAgICAgLSBDb3JyZWN0IGFuZCBzaW1wbGlmeSBoYW5kbGluZyBvZiB0aGUgaWdub3JlIHdpZGUgcmVzaWR1ZQorICAgICAgICAgIG1lc3NhZ2UuICBUaGUgcHJldmlvdXMgY29kZSB3b3VsZCBmYWlsIHRvIHJlcG9ydCBhIHJlc2lkdWFsCisgICAgICAgICAgaWYgdGhlIHRyYW5zYWN0aW9uIGRhdGEgbGVuZ3RoIHdhcyBldmVuIGFuZCB3ZSByZWNlaXZlZAorICAgICAgICAgIGFuIElXUiBtZXNzYWdlLgorCisgICAxLjMuOCAoQXByaWwgMjl0aCwgMjAwMykKKyAgICAgICAgLSBGaXggdHlwZXMgYWNjZXNzZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGNvZGUuCisgICAgICAgIC0gUGVyZm9ybSBhIGZldyBmaXJtd2FyZSBvcHRpbWl6YXRpb25zLgorICAgICAgICAtIEZpeCAiVW5leHBlY3RlZCBQS1QgYnVzZnJlZSIgZXJyb3JzLgorICAgICAgICAtIFVzZSBhIHNlcXVlbmNlciBpbnRlcnJ1cHQgdG8gbm90aWZ5IHRoZSBob3N0IG9mCisgICAgICAgICAgY29tbWFuZHMgd2l0aCBiYWQgc3RhdHVzLiAgV2UgZGVmZXIgdGhlIG5vdGlmaWNhdGlvbgorICAgICAgICAgIHVudGlsIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyBzZWxlY3Rpb25zIHRvIGVuc3VyZQorICAgICAgICAgIHRoYXQgdGhlIGhvc3QgaXMgaW50ZXJydXB0ZWQgZm9yIGFzIHNob3J0IGEgdGltZSBhcworICAgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAtIFJlbW92ZSBwcmUtMi4yLlggc3VwcG9ydC4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgbmV3IDIuNS5YIGludGVycnVwdCBBUEkuCisgICAgICAgIC0gQ29ycmVjdCBiaWctZW5kaWFuIGFyY2hpdGVjdHVyZSBzdXBwb3J0LgorCisgICAxLjMuNyAoQXByaWwgMTZ0aCwgMjAwMykKKyAgICAgICAgLSBVc2UgZGVsX3RpbWVyX3N5bmMoKSB0byBlbnN1cmUgdGhhdCBubyB0aW1lb3V0cworICAgICAgICAgIGFyZSBwZW5kaW5nIGR1cmluZyBjb250cm9sbGVyIHNodXRkb3duLgorICAgICAgICAtIEZvciBwcmUtMi41Llgga2VybmVscywgY2FyZWZ1bGx5IGFkanVzdCBvdXIgc2VnbWVudAorICAgICAgICAgIGxpc3Qgc2l6ZSB0byBhdm9pZCBTQ1NJIG1hbGxvYyBwb29sIGZyYWdtZW50YXRpb24uCisgICAgICAgIC0gQ2xlYW51cCBjaGFubmVsIGRpc3BsYXkgaW4gb3VyIC9wcm9jIG91dHB1dC4KKyAgICAgICAgLSBXb3JrYXJvdW5kIGR1cGxpY2F0ZSBkZXZpY2UgZW50cmllcyBpbiB0aGUgbWlkLWxheWVyCisgICAgICAgICAgZGV2bGljZSBsaXN0IGR1cmluZyBhZGQtc2luZ2xlLWRldmljZS4KKworICAgMS4zLjYgKE1hcmNoIDI4dGgsIDIwMDMpCisgICAgICAgIC0gQ29ycmVjdCBhIGRvdWJsZSBmcmVlIGluIHRoZSBEb21haW4gVmFsaWRhdGlvbiBjb2RlLgorICAgICAgICAtIENvcnJlY3QgYSByZWZlcmVuY2UgdG8gZnJlZSdlZCBtZW1vcnkgZHVyaW5nIGNvbnRyb2xsZXIKKyAgICAgICAgICBzaHV0ZG93bi4KKyAgICAgICAgLSBSZXNldCB0aGUgYnVzIG9uIGFuIFNFLT5MVkQgY2hhbmdlLiAgVGhpcyBpcyByZXF1aXJlZAorICAgICAgICAgIHRvIHJlc2V0IG91ciB0cmFuc2NpZXZlcnMuCisKKyAgIDEuMy41IChNYXJjaCAyNHRoLCAyMDAzKQorICAgICAgICAtIEZpeCBhIGZldyByZWdpc3RlciB3aW5kb3cgbW9kZSBidWdzLgorICAgICAgICAtIEluY2x1ZGUgcmVhZCBzdHJlYW1pbmcgaW4gdGhlIFBQUiBmbGFncyB3ZSBkaXNwbGF5IGluCisgICAgICAgICAgZGlhZ25vc3RpY3MgYXMgd2VsbCBhcyAvcHJvYy4KKyAgICAgICAgLSBBZGQgUENJIGhvdCBwbHVnIHN1cHBvcnQgZm9yIDIuNS5YIGtlcm5lbHMuCisgICAgICAgIC0gQ29ycmVjdCBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiB2YWx1ZSBmb3IgUmV2QSBoYXJkd2FyZS4KKyAgICAgICAgLSBGaXggRG9tYWluIFZhbGlkYXRpb24gdGhyZWFkIHNodXRkb3duLgorICAgICAgICAtIEFkZCBhIGZpcm13YXJlIHdvcmthcm91bmQgdG8gbWFrZSB0aGUgTEVEIGJsaW5rCisgICAgICAgICAgYnJpZ2h0ZXIgZHVyaW5nIHBhY2tldGl6ZWQgb3BlcmF0aW9ucyBvbiB0aGUgSDJBNC4KKyAgICAgICAgLSBDb3JyZWN0IC9wcm9jIGRpc3BsYXkgb2YgdXNlciByZWFkIHN0cmVhbWluZyBzZXR0aW5ncy4KKyAgICAgICAgLSBTaW1wbGlmeSBkcml2ZXIgbG9ja2luZyBieSByZWxlYXNpbmcgdGhlIGlvX3JlcXVlc3RfbG9jaworICAgICAgICAgIHVwb24gZHJpdmVyIGVudHJ5IGZyb20gdGhlIG1pZC1sYXllci4KKyAgICAgICAgLSBDbGVhbnVwIGNvbW1hbmQgbGluZSBwYXJzaW5nIGFuZCBtb3ZlIG11Y2ggb2YgdGhpcyBjb2RlCisgICAgICAgICAgdG8gYWljbGliLgorCisgICAxLjMuNCAoRmVicnVhcnkgMjh0aCwgMjAwMykKKyAgICAgICAgLSBDb3JyZWN0IGEgcmFjZSBjb25kaXRpb24gaW4gb3VyIGVycm9yIHJlY292ZXJ5IGhhbmRsZXIuCisgICAgICAgIC0gQWxsb3cgVGVzdCBVbml0IFJlYWR5IGNvbW1hbmRzIHRvIHRha2UgYSBmdWxsIDUgc2Vjb25kcworICAgICAgICAgIGR1cmluZyBEb21haW4gVmFsaWRhdGlvbi4KKworICAgMS4zLjIgKEZlYnJ1YXJ5IDE5dGgsIDIwMDMpCisgICAgICAgIC0gQ29ycmVjdCBhIFJldiBCLiByZWdyZXNzaW9uIGR1ZSB0byB0aGUgR0VNMzE4CisgICAgICAgICAgY29tcGF0aWJpbGl0eSBmaXggaW5jbHVkZWQgaW4gMS4zLjEuCisgICAgICAgICAgCisgICAxLjMuMSAoRmVicnVhcnkgMTF0aCwgMjAwMykKKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIDM5MzIwQS4KKyAgICAgICAgLSBJbXByb3ZlIHJlY292ZXJ5IGZvciBjZXJ0YWluIFBDSS1YIGVycm9ycy4KKyAgICAgICAgLSBGaXggaGFuZGxpbmcgb2YgTFEvREFUQS9MUS9EQVRBIGZvciB0aGUKKyAgICAgICAgICBzYW1lIHdyaXRlIHRyYW5zYWN0aW9uIHRoYXQgY2FuIG9jY3VyIHdpdGhvdXQKKyAgICAgICAgICBpbnRlcnZlaW5pbmcgdHJhaW5pbmcuCisgICAgICAgIC0gQ29ycmVjdCBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHRoZSBHRU0zMTgKKyAgICAgICAgICBlbmNsb3N1cmUgc2VydmljZXMgZGV2aWNlLgorICAgICAgICAtIENvcnJlY3QgZGF0YSBjb3JydXB0aW9uIGlzc3VlIHRoYXQgb2NjdXJyZWQgdW5kZXIKKyAgICAgICAgICBoaWdoIHRhZyBkZXB0aCB3cml0ZSBsb2Fkcy4KKyAgICAgICAgLSBBZGFwdCB0byBhIGNoYW5nZSBpbiB0aGUgMi41LlggZGFlbW9uaXplKCkgQVBJLgorICAgICAgICAtIENvcnJlY3QgYSAiTWlzc2luZyBjYXNlIGluIGFoZF9oYW5kbGVfc2NzaWludCIgcGFuaWMuCisKKyAgIDEuMy4wIChKYW51YXJ5IDIxc3QsIDIwMDMpCisgICAgICAgIC0gRnVsbCByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIGFsbCBVMzIwIHByb2R1Y3RzIGNvbXBsZXRlZC4KKyAgICAgICAgLSBBZGRlZCBhYm9ydCBhbmQgdGFyZ2V0L2x1biByZXNldCBlcnJvciByZWNvdmVyeSBoYW5kbGVyIGFuZAorICAgICAgICAgIGludGVycnVwdCBjb2FsZXNzaW5nLgorCisgICAxLjIuMCAoTm92ZW1iZXIgMTR0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBEb21haW4gVmFsaWRhdGlvbgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgSGV3bGV0dC1QYWNrYXJkIHZlcnNpb24gb2YgdGhlIDM5MzIwRAorICAgICAgICAgIGFuZCBBSUMtNzkwMiBhZGFwdGVycy4KKyAgICAgICAgU3VwcG9ydCBmb3IgcHJldmlvdXMgYWRhcHRlcnMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZCBhbmQgc2hvdWxkCisgICAgICAgIG9ubHkgYmUgdXNlZCBhdCB0aGUgY3VzdG9tZXIncyBvd24gcmlzay4KKworICAgMS4xLjEgKFNlcHRlbWJlciAyNHRoLCAyMDAyKQorICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBMaW51eCAyLjUuWCBrZXJuZWwgc2VyaWVzCisKKyAgIDEuMS4wIChTZXB0ZW1iZXIgMTd0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBmb3VyIGFkZGl0aW9uYWwgU0NTSSBwcm9kdWN0czoKKyAgICAgICAgICBBU0MtMzkzMjAsIEFTQy0yOTMyMCwgQVNDLTI5MzIwTFAsIEFJQy03OTAxLgorCisgICAxLjAuMCAoTWF5IDMwdGgsIDIwMDIpCisgICAgICAgIC0gSW5pdGlhbCBkcml2ZXIgcmVsZWFzZS4KKworICAgMi4xLiBTb2Z0d2FyZS9IYXJkd2FyZSBGZWF0dXJlcworICAgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBTUEktNCAiVWx0cmEzMjAiIHN0YW5kYXJkOgorICAgICAgICAgIC0gMzIwTUIvcyB0cmFuc2ZlciByYXRlcworICAgICAgICAgIC0gUGFja2V0aXplZCBTQ1NJIFByb3RvY29sIGF0IDE2ME1CL3MgYW5kIDMyME1CL3MKKyAgICAgICAgICAtIFF1aWNrIEFyYml0cmF0aW9uIFNlbGVjdGlvbiAoUUFTKQorICAgICAgICAgIC0gUmV0YWluZWQgVHJhaW5pbmcgSW5mb3JtYXRpb24gKFJldiBCLiBBU0lDIG9ubHkpCisgICAgICAgIC0gSW50ZXJydXB0IENvYWxlc3NpbmcKKyAgICAgICAgLSBJbml0aWF0b3IgTW9kZSAodGFyZ2V0IG1vZGUgbm90IGN1cnJlbnRseSAKKyAgICAgICAgICBzdXBwb3J0ZWQpCisgICAgICAgIC0gU3VwcG9ydCBmb3IgdGhlIFBDSS1YIHN0YW5kYXJkIHVwIHRvIDEzM01IegorICAgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBQQ0kgdjIuMiBzdGFuZGFyZAorCS0gRG9tYWluIFZhbGlkYXRpb24KKworICAgMi4yLiBPcGVyYXRpbmcgU3lzdGVtIFN1cHBvcnQ6CisgICAgICAgIC0gUmVkaGF0IExpbnV4IDcuMiwgNy4zLCA4LjAsIEFkdmFuY2VkIFNlcnZlciAyLjEKKyAgICAgICAgLSBTdVNFIExpbnV4IDcuMywgOC4wLCA4LjEsIEVudGVycHJpc2UgU2VydmVyIDcKKyAgICAgICAgLSBvbmx5IEludGVsIGFuZCBBTUQgeDg2IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUKKyAgICAgICAgLSA+NEdCIG1lbW9yeSBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQuCisKKyAgICAgUmVmZXIgdG8gdGhlIFVzZXIncyBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuCisKKzMuIENvbW1hbmQgTGluZSBPcHRpb25zCisKKyAgICAgICAgV0FSTklORzogQUxURVJJTkcgT1IgQURESU5HIFRIRVNFIERSSVZFUiBQQVJBTUVURVJTCisgICAgICAgICAgICAgICAgIElOQ09SUkVDVExZIENBTiBSRU5ERVIgWU9VUiBTWVNURU0gSU5PUEVSQUJMRS4KKyAgICAgICAgICAgICAgICAgVVNFIFRIRU0gV0lUSCBDQVVUSU9OLiAKKworICAgRWRpdCB0aGUgZmlsZSAibW9kcHJvYmUuY29uZiIgaW4gdGhlIGRpcmVjdG9yeSAvZXRjIGFuZCBhZGQvZWRpdCBhCisgICBsaW5lIGNvbnRhaW5pbmcgJ29wdGlvbnMgYWljNzl4eCBhaWM3OXh4PVtjb21tYW5kWyxjb21tYW5kLi4uXV0nIHdoZXJlCisgICAnY29tbWFuZCcgaXMgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogdmVyYm9zZQorICAgICAgICAgIERlZmluaXRpb246IGVuYWJsZSBhZGRpdGlvbmFsIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBvcGVyYXRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZGVidWc6W3ZhbHVlXQorICAgICAgICAgIERlZmluaXRpb246IEVuYWJsZXMgdmFyaW91cyBsZXZlbHMgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgVGhlIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIGRlYnVnZ2luZyBtYXNrIGNhbgorICAgICAgICAgICAgICAgICAgICAgIGJlIGZvdW5kIGluIGRyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaCB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgIHRoZSAiRGVidWciIGhlYWRpbmcuCisgICAgIFBvc3NpYmxlIFZhbHVlczogMHgwMDAwID0gbm8gZGVidWdnaW5nLCAweGZmZmYgPSBmdWxsIGRlYnVnZ2luZworICAgICAgIERlZmF1bHQgVmFsdWU6IDB4MDAwMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBub19yZXNldAorICAgICAgICAgIERlZmluaXRpb246IERvIG5vdCByZXNldCB0aGUgYnVzIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZQorICAgICAgICAgICAgICAgICAgICAgIHBoYXNlCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZXh0ZW5kZWQKKyAgICAgICAgICBEZWZpbml0aW9uOiBGb3JjZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBvbiB0aGUgY29udHJvbGxlcgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBlcmlvZGljX290YWcKKyAgICAgICAgICBEZWZpbml0aW9uOiBTZW5kIGFuIG9yZGVyZWQgdGFnIHBlcmlvZGljYWxseSB0byBwcmV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgdGFnIHN0YXJ2YXRpb24uICBOZWVkZWQgZm9yIHNvbWUgb2xkZXIgZGV2aWNlcworICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJldmVyc2Vfc2NhbgorICAgICAgICAgIERlZmluaXRpb246IFByb2JlIHRoZSBzY3NpIGJ1cyBpbiByZXZlcnNlIG9yZGVyLCBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFyZ2V0IDE1CisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZ2xvYmFsX3RhZ19kZXB0aAorICAgICAgICAgIERlZmluaXRpb246IEdsb2JhbCB0YWcgZGVwdGggZm9yIGFsbCB0YXJnZXRzIG9uIGFsbCBidXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCB0YWcgZGVwdGggd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgc2VsZWN0aXZlbHkgb3ZlcnJpZGRlbiB2aSB0aGUgdGFnX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHRhZ19pbmZvOnt7dmFsdWVbLHZhbHVlLi4uXX1bLHt2YWx1ZVssdmFsdWUuLi5dfS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IHRoZSBwZXItdGFyZ2V0IHRhZ2dlZCBxdWV1ZSBkZXB0aCBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgcGVyIGNvbnRyb2xsZXIgYmFzaXMuICBCb3RoIGNvbnRyb2xsZXJzIGFuZCB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdCB0aGV5IHNob3VsZCByZXRhaW4KKyAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB0YWcgZGVwdGguCisgICAgICAgICAgICBFeGFtcGxlczogdGFnX2luZm86e3sxNiwzMiwzMiw2NCw4LDgsLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAxNiBmb3IgdGFyZ2V0IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgdGFnIGRlcHRoIG9mIDY0IGZvciB0YXJnZXQgMworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgOCBmb3IgdGFyZ2V0cyA0IGFuZCA1CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXZlcyB0YXJnZXQgNiBhdCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMSwyLDctMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCBkZXB0aC4KKworICAgICAgICAgICAgICAgICAgICAgIHRhZ19pbmZvOnt7fSx7MzIsLDMyfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMCBhbmQgMgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IGRlcHRoLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJkX3N0cm06IHtyZF9zdHJtX2JpdG1hc2tbLHJkX3N0cm1fYml0bWFzay4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogRW5hYmxlIHJlYWQgc3RyZWFtaW5nIG9uIGEgcGVyIHRhcmdldCBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGUgcmRfc3RybV9iaXRtYXNrIGlzIGEgMTYgYml0IGhleCB2YWx1ZSBpbiB3aGljaAorICAgICAgICAgICAgICAgICAgICAgIGVhY2ggYml0IHJlcHJlc2VudHMgYSB0YXJnZXQuICBTZXR0aW5nIHRoZSB0YXJnZXQncworICAgICAgICAgICAgICAgICAgICAgIGJpdCB0byAnMScgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC4gIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwNDF9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGFyZ2V0cyAwIGFuZCA2LgorICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGFyZ2V0cyAxLTUsNy0xNS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwMjMsLDB4RkZGRn0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0YXJnZXRzIDEsMiwgYW5kIDUuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0YXJnZXRzIDMsNCw2LTE1LgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAyCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgcmVhZCBzdHJlYW1pbmcgZm9yIGFsbCB0YXJnZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbWluZyBzZXR0aW5nLgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDB4MDAwMCAtIDB4ZmZmZgorICAgICAgIERlZmF1bHQgVmFsdWU6IDB4MDAwMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBkdjoge3ZhbHVlWyx2YWx1ZS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IERvbWFpbiBWYWxpZGF0aW9uIFBvbGljeSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiBkdjp7LTEsMCwsMSwxLDB9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgbGVhdmUgRFYgYXQgaXRzIGRlZmF1bHQgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMSBkaXNhYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCBjb25maWd1cmF0aW9uIG9uIENvbnRyb2xsZXIgMi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXJzIDMgYW5kIDQgZW5hYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciA1IGRpc2FibGUgRFYuCisKKyAgICAgUG9zc2libGUgVmFsdWVzOiA8IDAgVXNlIHNldHRpbmcgZnJvbSBzZXJpYWwgRUVQUk9NLgorICAgICAgICAgICAgICAgICAgICAgIDAgRGlzYWJsZSBEVgorICAgICAgICAgICAgICAgICAgICAgID4gMCBFbmFibGUgRFYKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBEViBTZXJpYWwgRUVQUk9NIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2VsdGltZTpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogU3BlY2lmaWVzIHRoZSBzZWxlY3Rpb24gdGltZW91dCB2YWx1ZQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgPSAyNTZtcywgMSA9IDEyOG1zLCAyID0gNjRtcywgMyA9IDMybXMKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAwCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAqKiogVGhlIGZvbGxvd2luZyB0aHJlZSBvcHRpb25zIHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYXQgKioqCisgICAqKiogdGhlIGRpcmVjdGlvbiBvZiBhIHRlY2huaWNhbCBzdXBwb3J0IHJlcHJlc2VudGF0aXZlLiAgKioqCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogcHJlY29tcDoge3ZhbHVlWyx2YWx1ZS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IElPIENlbGwgcHJlY29tcGVuc2F0aW9uIHZhbHVlIG9uIGEgcGVyLWNvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICAgICAgICBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgdGhleSBzaG91bGQgcmV0YWluIHRoZSBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiBzZXR0aW5nLgorICAgICAgICAgICAgIEV4YW1wbGU6IHByZWNvbXA6ezB4MX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCisgICAgICAgICAgICAgRXhhbXBsZTogcHJlY29tcDp7MSwsN30KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDIgc2V0IHByZWNvbXBlbnNhdGlvbiB0byA4LgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgLSA3CisgICAgICAgRGVmYXVsdCBWYWx1ZTogVmFyaWVzIGJhc2VkIG9uIGNoaXAgcmV2aXNpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2xld3JhdGU6IHt2YWx1ZVssdmFsdWUuLi5dfQorICAgICAgICAgIERlZmluaXRpb246IFNldCBJTyBDZWxsIHNsZXcgcmF0ZSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgc2xldyByYXRlIHNldHRpbmcuCisgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGU6ezB4MX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgc2xldyByYXRlIHRvIDEuCisgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGUgOnsxLCw4fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBzbGV3IHJhdGUgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMiBzZXQgc2xldyByYXRlIHRvIDguCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMCAtIDE1CisgICAgICAgRGVmYXVsdCBWYWx1ZTogVmFyaWVzIGJhc2VkIG9uIGNoaXAgcmV2aXNpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogYW1wbGl0dWRlOiB7dmFsdWVbLHZhbHVlLi4uXX0KKyAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgSU8gQ2VsbCBzaWduYWwgYW1wbGl0dWRlIG9uIGEgcGVyLWNvbnRyb2xsZXIgYmFzaXMuCisgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkIHN0cmVhbWluZyBzZXR0aW5nLgorICAgICAgICAgICAgIEV4YW1wbGU6IGFtcGxpdHVkZTp7MHgxfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KKyAgICAgICAgICAgICBFeGFtcGxlOiBhbXBsaXR1ZGUgOnsxLCw3fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMiBzZXQgYW1wbGl0dWRlIHRvIDcuCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBWYXJpZXMgYmFzZWQgb24gY2hpcCByZXZpc2lvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgRXhhbXBsZTogJ29wdGlvbnMgYWljNzl4eCBhaWM3OXh4PXZlcmJvc2UscmRfc3RybTp7ezB4MDA0MX19JworICAgICAgICBlbmFibGVzIHZlcmJvc2Ugb3V0cHV0IGluIHRoZSBkcml2ZXIgYW5kIHR1cm5zIHJlYWQgc3RyZWFtaW5nIG9uCisgICAgICAgIGZvciB0YXJnZXRzIDAgYW5kIDYgb2YgQ29udHJvbGxlciAwLgorCis0LiBBZGRpdGlvbmFsIE5vdGVzCisKKyAgIDQuMS4gS25vd24vVW5yZXNvbHZlZCBvciBGWUkgSXNzdWVzCisKKyAgICAgICAgKiBVbmRlciBTdVNFIExpbnV4IEVudGVycHJpc2UgNywgdGhlIGRyaXZlciBtYXkgZmFpbCB0byBvcGVyYXRlCisgICAgICAgICAgY29ycmVjdGx5IGR1ZSB0byBhIHByb2JsZW0gd2l0aCBQQ0kgaW50ZXJydXB0IHJvdXRpbmcgaW4gdGhlCisgICAgICAgICAgTGludXgga2VybmVsLiAgUGxlYXNlIGNvbnRhY3QgU3VTRSBmb3IgYW4gdXBkYXRlZCBMaW51eAorICAgICAgICAgIGtlcm5lbC4KKworICAgNC4yLiBUaGlyZC1QYXJ0eSBDb21wYXRpYmlsaXR5IElzc3VlcworCisgICAgICAgICogQWRhcHRlYyBvbmx5IHN1cHBvcnRzIFVsdHJhMzIwIGhhcmQgZHJpdmVzIHJ1bm5pbmcKKyAgICAgICAgICB0aGUgbGF0ZXN0IGZpcm13YXJlIGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHdpdGgKKyAgICAgICAgICB5b3VyIGhhcmQgZHJpdmUgbWFudWZhY3R1cmVyIHRvIGVuc3VyZSB5b3UgaGF2ZSB0aGUKKyAgICAgICAgICBsYXRlc3QgdmVyc2lvbi4KKworICAgNC4zLiBPcGVyYXRpbmcgU3lzdGVtIG9yIFRlY2hub2xvZ3kgTGltaXRhdGlvbnMKKyAgICAgICAgCisgICAgICAgICogUENJIEhvdCBQbHVnIGlzIHVudGVzdGVkIGFuZCBtYXkgY2F1c2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0gCisgICAgICAgICAgdG8gc3RvcCByZXNwb25kaW5nLgorICAgICAgICAqIEx1bnMgdGhhdCBhcmUgbm90IG51bWJlcmVkIGNvbnRpZ3VvdXNseSBzdGFydGluZyB3aXRoIDAgbWlnaHQgbm90CisgICAgICAgICAgYmUgYXV0b21hdGljYWxseSBwcm9iZWQgZHVyaW5nIHN5c3RlbSBzdGFydHVwLiAgVGhpcyBpcyBhIGxpbWl0YXRpb24KKyAgICAgICAgICBvZiB0aGUgT1MuICBQbGVhc2UgY29udGFjdCB5b3VyIExpbnV4IHZlbmRvciBmb3IgaW5zdHJ1Y3Rpb25zIG9uCisgICAgICAgICAgbWFudWFsbHkgcHJvYmluZyBub24tY29udGlndW91cyBsdW5zLgorICAgICAgICAqIFVzaW5nIHRoZSBEcml2ZXIgVXBkYXRlIERpc2sgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UgZHVyaW5nIE9TCisgICAgICAgICAgaW5zdGFsbGF0aW9uIHVuZGVyIFJlZEhhdCBtaWdodCByZXN1bHQgaW4gdHdvIHZlcnNpb25zIG9mIHRoaXMKKyAgICAgICAgICBkcml2ZXIgYmVpbmcgaW5zdGFsbGVkIGludG8gdGhlIHN5c3RlbSBtb2R1bGUgZGlyZWN0b3J5LiAgVGhpcworICAgICAgICAgIG1pZ2h0IGNhdXNlIHByb2JsZW1zIHdpdGggdGhlIC9zYmluL21raW5pdHJkIHByb2dyYW0gYW5kL29yCisgICAgICAgICAgb3RoZXIgUlBNIHBhY2thZ2VzIHRoYXQgdHJ5IHRvIGluc3RhbGwgc3lzdGVtIG1vZHVsZXMuICBUaGUgYmVzdAorICAgICAgICAgIHdheSB0byBjb3JyZWN0IHRoaXMgb25jZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgaXMgdG8gaW5zdGFsbAorICAgICAgICAgIHRoZSBsYXRlc3QgUlBNIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciwgYXZhaWxhYmxlIGZyb20KKyAgICAgICAgICBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLgorCisKKzUuIENvbnRhY3RpbmcgQWRhcHRlYworCisgICBBIFRlY2huaWNhbCBTdXBwb3J0IElkZW50aWZpY2F0aW9uIChUU0lEKSBOdW1iZXIgaXMgcmVxdWlyZWQgZm9yIAorICAgQWRhcHRlYyB0ZWNobmljYWwgc3VwcG9ydC4KKyAgICAtIFRoZSAxMi1kaWdpdCBUU0lEIGNhbiBiZSBmb3VuZCBvbiB0aGUgd2hpdGUgYmFyY29kZS10eXBlIGxhYmVsCisgICAgICBpbmNsdWRlZCBpbnNpZGUgdGhlIGJveCB3aXRoIHlvdXIgcHJvZHVjdC4gVGhlIFRTSUQgaGVscHMgdXMgCisgICAgICBwcm92aWRlIG1vcmUgZWZmaWNpZW50IHNlcnZpY2UgYnkgYWNjdXJhdGVseSBpZGVudGlmeWluZyB5b3VyIAorICAgICAgcHJvZHVjdCBhbmQgc3VwcG9ydCBzdGF0dXMuCisgICBTdXBwb3J0IE9wdGlvbnMKKyAgICAtIFNlYXJjaCB0aGUgQWRhcHRlYyBTdXBwb3J0IEtub3dsZWRnZWJhc2UgKEFTSykgYXQKKyAgICAgIGh0dHA6Ly9hc2suYWRhcHRlYy5jb20gZm9yIGFydGljbGVzLCB0cm91Ymxlc2hvb3RpbmcgdGlwcywgYW5kCisgICAgICBmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBmb3IgeW91ciBwcm9kdWN0LgorICAgIC0gRm9yIHN1cHBvcnQgdmlhIEVtYWlsLCBzdWJtaXQgeW91ciBxdWVzdGlvbiB0byBBZGFwdGVjJ3MgCisgICAgICBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0cyBhdCBodHRwOi8vYXNrLmFkYXB0ZWMuY29tLgorICAgICAKKyAgIE5vcnRoIEFtZXJpY2EKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIEZpYnJlIENoYW5uZWwvUkFJRC9FeHRlcm5hbCBTdG9yYWdlIFRlY2huaWNhbAorICAgICAgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIDEtMzIxLTIwNy0yMDAwLAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDM6MDAgQS5NLiB0byA1OjAwIFAuTS4sIFBTVC4KKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKyAgICAtIEZvciBUZWNobmljYWwgU3VwcG9ydCBpbiBhbGwgb3RoZXIgdGVjaG5vbG9naWVzIGluY2x1ZGluZyAKKyAgICAgIFNDU0ksIGNhbGwgMS00MDgtOTM0LTcyNzQsCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgNjowMCBBLk0uIHRvIDU6MDAgUC5NLiwgUFNULgorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorICAgIC0gRm9yIGFmdGVyIGhvdXJzIHN1cHBvcnQsIGNhbGwgMS04MDAtNDE2LTgwNjYgKCQ5OS9jYWxsLCAKKyAgICAgICQxNDkvY2FsbCBvbiBob2xpZGF5cykKKyAgICAtIFRvIG9yZGVyIEFkYXB0ZWMgcHJvZHVjdHMgaW5jbHVkaW5nIHNvZnR3YXJlIGFuZCBjYWJsZXMsIGNhbGwKKyAgICAgIDEtODAwLTQ0Mi03Mjc0IG9yIDEtNDA4LTk1Ny03Mjc0LiBZb3UgY2FuIGFsc28gdmlzaXQgb3VyIAorICAgICAgb25saW5lIHN0b3JlIGF0IGh0dHA6Ly93d3cuYWRhcHRlY3N0b3JlLmNvbQorCisgICBFdXJvcGUKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMtZXVyb3BlLmNvbS4KKyAgICAtIEVuZ2xpc2ggYW5kIEZyZW5jaDogVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IAorICAgICAgU3BlY2lhbGlzdCwgY2FsbCBvbmUgb2YgdGhlIGZvbGxvd2luZyBudW1iZXJzOgorICAgICAgICAtIEVuZ2xpc2g6ICszMi0yLTM1Mi0zNDcwCisgICAgICAgIC0gRnJlbmNoOiAgKzMyLTItMzUyLTM0NjAKKyAgICAgIEhvdXJzOiBNb25kYXktVGh1cnNkYXksIDEwOjAwIHRvIDEyOjMwLCAxMzozMCB0byAxNzozMCBDRVQgCisgICAgICAgICAgICAgRnJpZGF5LCAxMDowMCB0byAxMjozMCwgMTM6MzAgdG8gMTY6MzAgQ0VUCisgICAgLSBHZXJtYW46IFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LAorICAgICAgY2FsbCArNDktODktNDU2LTQwNjYwCisgICAgICBIb3VyczogTW9uZGF5LVRodXJzZGF5LCAwOTozMCB0byAxMjozMCwgMTM6MzAgdG8gMTY6MzAgQ0VUCisgICAgICAgICAgICAgRnJpZGF5LCAwOTozMCB0byAxMjozMCwgMTM6MzAgdG8gMTU6MDAgQ0VUCisgICAgLSBUbyBvcmRlciBBZGFwdGVjIHByb2R1Y3RzLCBpbmNsdWRpbmcgYWNjZXNzb3JpZXMgYW5kIGNhYmxlczoKKyAgICAgICAgLSBVSzogKzA4MDAtOTYtNjUtMjYgb3IgZmF4ICswODAwLTczMS0wMi05NQorICAgICAgICAtIE90aGVyIEV1cm9wZWFuIGNvdW50cmllczogKzMyLTExLTMwMC0zNzkKKworICAgQXVzdHJhbGlhIGFuZCBOZXcgWmVhbGFuZAorICAgIC0gVmlzaXQgb3VyIFdlYiBzaXRlIGF0IGh0dHA6Ly93d3cuYWRhcHRlYy5jb20uYXUuCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs2MTItOTQxNi0wNjk4CisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgQS5NLiB0byA0OjMwIFAuTS4sIEVBVAorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorCisgICBKYXBhbgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArODEtMy01MzA4LTYxMjAgCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgOTowMCBhLm0uIHRvIDEyOjAwIHAubS4sIDE6MDAgcC5tLiB0bworICAgICAgNjowMCBwLm0uIFRTQworCisgICBIb25nIEtvbmcgYW5kIENoaW5hCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs4NTItMjg2OS03MjAwCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgdG8gMTc6MDAuCisgICAgLSBGYXggVGVjaG5pY2FsIFN1cHBvcnQgYXQgKzg1Mi0yODY5LTcxMDAuCisKKyAgIFNpbmdhcG9yZQorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArNjUtMjQ1LTc0NzAKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAxMDowMCB0byAxNzowMC4KKyAgICAtIEZheCBUZWNobmljYWwgU3VwcG9ydCBhdCArODUyLTI4NjktNzEwMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzIEFkYXB0ZWMgSW5jLiA2OTEgUy4gTWlscGl0YXMgQmx2ZC4sIE1pbHBpdGFzIENBIDk1MDM1IFVTQS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IGFyZSBwZXJtaXR0ZWQgdG8gcmVkaXN0cmlidXRlLCB1c2UgYW5kIG1vZGlmeSB0aGlzIFJFQURNRSBmaWxlIGluIHdob2xlCisgKiBvciBpbiBwYXJ0IGluIGNvbmp1bmN0aW9uIHdpdGggcmVkaXN0cmlidXRpb24gb2Ygc29mdHdhcmUgZ292ZXJuZWQgYnkgdGhlCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIFJFQURNRSBmaWxlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAzLiBNb2RpZmljYXRpb25zIG9yIG5ldyBjb250cmlidXRpb25zIG11c3QgYmUgYXR0cmlidXRlZCBpbiBhIGNvcHlyaWdodAorICogICAgbm90aWNlIGlkZW50aWZ5aW5nIHRoZSBhdXRob3IgKCJDb250cmlidXRvciIpIGFuZCBhZGRlZCBiZWxvdyB0aGUKKyAqICAgIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UuIFRoZSBjb3B5cmlnaHQgbm90aWNlIGlzIGZvciBwdXJwb3NlcyBvZgorICogICAgaWRlbnRpZnlpbmcgY29udHJpYnV0b3JzIGFuZCBzaG91bGQgbm90IGJlIGRlZW1lZCBhcyBwZXJtaXNzaW9uIHRvIGFsdGVyCisgKiAgICB0aGUgcGVybWlzc2lvbnMgZ2l2ZW4gYnkgQWRhcHRlYy4KKyAqCisgKiBUSElTIFJFQURNRSBGSUxFIElTIFBST1ZJREVEIEJZIEFEQVBURUMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkKKyAqIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCBPUiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTAorICogQURBUFRFQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBSRUFETUUKKyAqIEZJTEUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjBlNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHgudHh0CkBAIC0wLDAgKzEsNDE0IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBBZGFwdGVjIEFpYzd4eHggRmFzdCAtPiBVbHRyYTE2MCBGYW1pbHkgTWFuYWdlciBTZXQgdjYuMi4yOCAgID0KKz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRE1FIGZvciAgICAgICAgICAgICAgICAgICAgICAgICAgICA9Cis9ICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IE9wZXJhdGluZyBTeXN0ZW0gICAgICAgICAgICAgICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhpcyBmaWxlOgorCisgIDEuIFN1cHBvcnRlZCBIYXJkd2FyZQorICAyLiBWZXJzaW9uIEhpc3RvcnkKKyAgMy4gQ29tbWFuZCBMaW5lIE9wdGlvbnMKKyAgNC4gQ29udGFjdGluZyBBZGFwdGVjCisKKzEuIFN1cHBvcnRlZCBIYXJkd2FyZQorCisgICBUaGUgZm9sbG93aW5nIEFkYXB0ZWMgU0NTSSBDaGlwcyBhbmQgSG9zdCBBZGFwdGVycyBhcmUgc3VwcG9ydGVkIGJ5CisgICB0aGUgYWljN3h4eCBkcml2ZXIuIAorCisgICBDaGlwICAgIE1JUFMgIEhvc3QgQnVzICBNYXhTeW5jICBNYXhXaWR0aCAgU0NCcyAgTm90ZXMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgYWljNzc3MCAgMTAgICAgRUlTQS9WTCAgIDEwTUh6ICAgIDE2Qml0ICAgICAgNCAgIDEKKyAgIGFpYzc4NTAgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTUgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTYgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTkgIDEwICAgIFBDSS8zMiAgICAyME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NjAgIDEwICAgIFBDSS8zMiAgICAyME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NzAgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICAxNkJpdCAgICAgIDE2CisgICBhaWM3ODgwICAxMCAgICBQQ0kvMzIgICAgMjBNSHogICAgMTZCaXQgICAgICAxNgorICAgYWljNzg5MCAgMjAgICAgUENJLzMyICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5MSAgMjAgICAgUENJLzY0ICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5MiAgMjAgICBQQ0kvNjQtNjYgIDgwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5NSAgMTUgICAgUENJLzMyICAgIDIwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNQorICAgYWljNzg5NUMgMTUgICAgUENJLzMyICAgIDIwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSAgICAgOAorICAgYWljNzg5NiAgMjAgICAgUENJLzMyICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorICAgYWljNzg5NyAgMjAgICAgUENJLzY0ICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorICAgYWljNzg5OSAgMjAgICBQQ0kvNjQtNjYgIDgwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorCisgICAxLiAgIE11bHRpcGxleGVkIFR3aW4gQ2hhbm5lbCBEZXZpY2UgLSBPbmUgY29udHJvbGxlciBzZXJ2aWNpbmcgdHdvCisgICAgICAgIGJ1c3Nlcy4KKyAgIDIuICAgTXVsdGktZnVuY3Rpb24gVHdpbiBDaGFubmVsIERldmljZSAtIFR3byBjb250cm9sbGVycyBvbiBvbmUgY2hpcC4KKyAgIDMuICAgQ29tbWFuZCBDaGFubmVsIFNlY29uZGFyeSBETUEgRW5naW5lIC0gQWxsb3dzIHNjYXR0ZXIgZ2F0aGVyIGxpc3QKKyAgICAgICAgYW5kIFNDQiBwcmVmZXRjaC4KKyAgIDQuICAgNjQgQnl0ZSBTQ0IgU3VwcG9ydCAtIEFsbG93cyBkaXNjb25uZWN0ZWQsIHVudHRhZ2dlZCByZXF1ZXN0IHRhYmxlCisgICAgICAgIGZvciBhbGwgcG9zc2libGUgdGFyZ2V0L2x1biBjb21iaW5hdGlvbnMuCisgICA1LiAgIEJsb2NrIE1vdmUgSW5zdHJ1Y3Rpb24gU3VwcG9ydCAtIERvdWJsZXMgdGhlIHNwZWVkIG9mIGNlcnRhaW4KKyAgICAgICAgc2VxdWVuY2VyIG9wZXJhdGlvbnMuCisgICA2LiAgIGBCYXlvbmV0JyBzdHlsZSBTY2F0dGVyIEdhdGhlciBFbmdpbmUgLSBJbXByb3ZlcyBTL0cgcHJlZmV0Y2gKKyAgICAgICAgcGVyZm9ybWFuY2UuCisgICA3LiAgIFF1ZXVpbmcgUmVnaXN0ZXJzIC0gQWxsb3dzIHF1ZXVpbmcgb2YgbmV3IHRyYW5zYWN0aW9ucyB3aXRob3V0CisgICAgICAgIHBhdXNpbmcgdGhlIHNlcXVlbmNlci4KKyAgIDguICAgTXVsdGlwbGUgVGFyZ2V0IElEcyAtIEFsbG93cyB0aGUgY29udHJvbGxlciB0byByZXNwb25kIHRvIHNlbGVjdGlvbgorICAgICAgICBhcyBhIHRhcmdldCBvbiBtdWx0aXBsZSBTQ1NJIElEcy4KKworICAgQ29udHJvbGxlciAgICAgIENoaXAgICBIb3N0LUJ1cyAgICBJbnQtQ29ubmVjdG9ycyAgRXh0LUNvbm5lY3RvcnMgIE5vdGVzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQUhBLTI3NFhbQV0gICAgYWljNzc3MCAgIEVJU0EgICAgICAgICBTRS01ME0gICAgICAgICBTRS1IRDUwRgorICAgQUhBLTI3NFhbQV1XICAgYWljNzc3MCAgIEVJU0EgICAgICAgICBTRS1IRDY4RiAgICAgICBTRS1IRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRS01ME0KKyAgIEFIQS0yNzRYW0FdVCAgIGFpYzc3NzAgICBFSVNBICAgICAgIDIgWCBTRS01ME0gICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yODQyICAgICAgIGFpYzc3NzAgICAgVkwgICAgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTQwQVUgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFWQS0yOTAySSAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBVkEtMjkwMkUgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQVZBLTI5MDYgICAgICAgYWljNzg1NiAgIFBDSS8zMiAgICAgICBTRS01ME0gICAgICAgICBTRS1EQjI1RgorICAgQVBDLTc4NTAgICAgICAgYWljNzg1MCAgIFBDSS8zMiAgICAgICBTRS01ME0gICAgICAgICAgICAgICAgICAgICAgIDEKKyAgIEFWQS0yOTQwICAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjkyMEIgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5MzBCICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFIQS0yOTIwQyAgICAgIGFpYzc4NTYgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTMwQyAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjkzMEMgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5MTBDICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFIQS0yOTE1QyAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjk0MEFVL0NOICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTSAgICAgICAgIFNFLUhENTBGCisgICBBSEEtMjk0NFcgICAgICBhaWM3ODcwICAgUENJLzMyICAgICBIVkQtSEQ2OEYgICAgICAgIEhWRC1IRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWRC01ME0KKyAgIEFIQS0zOTQwVyAgICAgIGFpYzc4NzAgICBQQ0kvMzIgICAgIDIgWCBTRS1IRDY4RiAgICAgU0UtSEQ2OEYgICAgICAgIDIKKyAgIEFIQS0yOTQwVVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICAgU0UtSEQ2OEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ2OEYKKyAgIEFIQS0yOTQwVSAgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTQwRCAgICAgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIGFIQS0yOTQwIEEvVCAgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIEFIQS0yOTQwRCBBL1QgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIEFIQS0zOTQwVVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgIDIgWCBTRS1IRDY4RiAgICAgU0UtSEQ2OEYgICAgICAgICAgMworICAgQUhBLTM5NDBVV0QgICAgYWljNzg4MCAgIFBDSS8zMiAgICAgMiBYIFNFLUhENjhGICAgMiBYIFNFLVZIRDY4RiAgICAgICAzCisgICBBSEEtMzk0MFUgICAgICBhaWM3ODgwICAgUENJLzMyICAgICAyIFggU0UtNTBNICAgICAgIFNFLUhENTBGICAgICAgICAgIDMKKyAgIEFIQS0yOTQ0VVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICBIVkQtSEQ2OEYgICAgICAgSFZELUhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWRC01ME0KKyAgIEFIQS0zOTQ0VVdEICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgIDIgWCBIVkQtSEQ2OEYgIDIgWCBIVkQtVkhENjhGICAgICAgMworICAgQUhBLTQ5NDRVVyAgICAgYWljNzg4MCAgIFBDSS8zMgorICAgQUhBLTI5MzBVVyAgICAgYWljNzg4MCAgIFBDSS8zMgorICAgQUhBLTI5NDBVVyBQcm8gYWljNzg4MCAgIFBDSS8zMiAgICAgIFNFLUhENjhGICAgICAgICBTRS1IRDY4RiAgICAgICAgICAgIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNCisgICBBSEEtMjk0MFVXL0NOICBhaWM3ODgwICAgUENJLzMyCisgICBBSEEtMjk0MFVEdWFsICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMjk0MFVXRHVhbCBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MFVXRCAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVVyAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVV0QgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVICAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0NEFVV0QgICBhaWM3ODk1ICAgUENJLzMyICAgICAyIFggSFZELUhENjhGICAyIFggSFZELVZIRDY4RgorICAgQUhBLTI5NDBVMkIgICAgYWljNzg5MCAgIFBDSS8zMiAgICAgIExWRC1IRDY4RiAgICAgICBMVkQtSEQ2OEYKKyAgIEFIQS0yOTQwVTIgT0VNIGFpYzc4OTEgICBQQ0kvNjQKKyAgIEFIQS0yOTQwVTJXICAgIGFpYzc4OTAgICBQQ0kvMzIgICAgICBMVkQtSEQ2OEYgICAgICAgTFZELUhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtSEQ2OEYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFLTUwTQorICAgQUhBLTI5NTBVMkIgICAgYWljNzg5MSAgIFBDSS82NCAgICAgIExWRC1IRDY4RiAgICAgICBMVkQtSEQ2OEYKKyAgIEFIQS0yOTMwVTIgICAgIGFpYzc4OTAgICBQQ0kvMzIgICAgICBMVkQtSEQ2OEYgICAgICAgU0UtSEQ1MEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNIAorICAgQUhBLTM5NTBVMkIgICAgYWljNzg5NyAgIFBDSS82NAorICAgQUhBLTM5NTBVMkQgICAgYWljNzg5NyAgIFBDSS82NAorICAgQUhBLTI5MTYwICAgICAgYWljNzg5MiAgIFBDSS82NC02NgorICAgQUhBLTI5MTYwIENQUSAgYWljNzg5MiAgIFBDSS82NC02NgorICAgQUhBLTI5MTYwTiAgICAgYWljNzg5MiAgIFBDSS8zMiAgICAgIExWRC1IRDY4RiAgICAgICBTRS1IRDUwRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRS01ME0KKyAgIEFIQS0yOTE2MExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0xOTE2MCAgICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0yOTE1MExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0yOTEzMExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0zOTYwRCAgICAgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKyAgIEFIQS0zOTYwRCBDUFEgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKyAgIEFIQS0zOTE2MCAgICAgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKworICAgMS4gTm8gQklPUyBzdXBwb3J0CisgICAyLiBERUMyMTA1MCBQQ0ktUENJIGJyaWRnZSB3aXRoIG11bHRpcGxlIGNvbnRyb2xsZXIgY2hpcHMgb24gc2Vjb25kYXJ5IGJ1cworICAgMy4gREVDMjExNVggUENJLVBDSSBicmlkZ2Ugd2l0aCBtdWx0aXBsZSBjb250cm9sbGVyIGNoaXBzIG9uIHNlY29uZGFyeSBidXMKKyAgIDQuIEFsbCB0aHJlZSBTQ1NJIGNvbm5lY3RvcnMgbWF5IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aG91dAorICAgICAgU0NTSSAic3R1YiIgZWZmZWN0cy4KKworMi4gVmVyc2lvbiBIaXN0b3J5CisgICA2LjIuMzYgKEp1bmUgM3JkLCAyMDAzKQorICAgICAgICAtIENvcnJlY3QgY29kZSB0aGF0IGRpc2FibGVzIFBDSSBwYXJpdHkgZXJyb3IgY2hlY2tpbmcuCisgICAgICAgIC0gQ29ycmVjdCBhbmQgc2ltcGxpZnkgaGFuZGxpbmcgb2YgdGhlIGlnbm9yZSB3aWRlIHJlc2lkdWUKKyAgICAgICAgICBtZXNzYWdlLiAgVGhlIHByZXZpb3VzIGNvZGUgd291bGQgZmFpbCB0byByZXBvcnQgYSByZXNpZHVhbAorICAgICAgICAgIGlmIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGxlbmd0aCB3YXMgZXZlbiBhbmQgd2UgcmVjZWl2ZWQKKyAgICAgICAgICBhbiBJV1IgbWVzc2FnZS4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIDIuNS5YIEVJU0EgZnJhbWV3b3JrLgorICAgICAgICAtIFVwZGF0ZSBmb3IgY2hhbmdlIGluIDIuNS5YIFNDU0kgcHJvYyBGUyBpbnRlcmZhY2UuCisgICAgICAgIC0gQ29ycmVjdCBEb21haW4gVmFsaWRhdGlvbiBjb21tYW5kLWxpbmUgb3B0aW9uIHBhcnNpbmcuCisgICAgICAgIC0gV2hlbiBuZWdvdGlhdGlvbiBhc3luYyB2aWEgYW4gOGJpdCBXRFRSIG1lc3NhZ2UsIHNlbmQKKyAgICAgICAgICBhbiBTRFRSIHdpdGggYW4gb2Zmc2V0IG9mIDAgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0CisgICAgICAgICAga25vd3Mgd2UgYXJlIGFzeW5jLiAgVGhpcyB3b3JrcyBhcm91bmQgYSBmaXJtd2FyZSBkZWZlY3QKKyAgICAgICAgICBpbiB0aGUgUXVhbnR1bSBBdGxhcyAxMEsuCisgICAgICAgIC0gQ2xlYXIgUENJIGVycm9yIHN0YXRlIGR1cmluZyBkcml2ZXIgYXR0YWNoIHNvIHRoYXQgd2UKKyAgICAgICAgICBkb24ndCBkaXNhYmxlIG1lbW9yeSBtYXBwZWQgSS9PIGR1ZSB0byBhIHN0cmF5IHdyaXRlCisgICAgICAgICAgYnkgc29tZSBvdGhlciBkcml2ZXIgcHJvYmUgdGhhdCBvY2N1cnJlZCBiZWZvcmUgd2UKKyAgICAgICAgICBjbGFpbWVkIHRoZSBjb250cm9sbGVyLgorCisgICA2LjIuMzUgKE1heSAxNHRoLCAyMDAzKQorICAgICAgICAtIEZpeCBhIGZldyBHQ0MgMy4zIGNvbXBpbGVyIHdhcm5pbmdzLgorICAgICAgICAtIENvcnJlY3Qgb3BlcmF0aW9uIG9uIEVJU0EgVHdpbiBDaGFubmVsIGNvbnRyb2xsZXIuCisgICAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIDIuNS5YJ3Mgc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KCkuCisKKyAgIDYuMi4zNCAoTWF5IDV0aCwgMjAwMykKKyAgICAgICAgLSBGaXggbG9ja2luZyByZWdyZXNzaW9uIGluc3Ryb2R1Y2VkIGluIDYuMi4yOSB0aGF0CisgICAgICAgICAgY291bGQgY3Vhc2UgYSBsb2NrIG9yZGVyIHJldmVyc2FsIGJldHdlZW4gdGhlIGlvX3JlcXVlc3RfbG9jaworICAgICAgICAgIGFuZCBvdXIgcGVyLXNvZnRjIGxvY2suICBUaGlzIHdhcyBvbmx5IHBvc3NpYmxlIG9uIFJIOSwKKyAgICAgICAgICBTdVNFLCBhbmQga2VybmVsLm9yZyAyLjQuWCBrZXJuZWxzLgorCisgICA2LjIuMzMgKEFwcmlsIDMwdGgsIDIwMDMpCisgICAgICAgIC0gRHluYW1pY2FsbHkgZGlzYWJsZSBQQ0kgcGFyaXR5IGVycm9yIHJlcG9ydGluZyBhZnRlcgorICAgICAgICAgIDEwIGVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIuICBUaGVzZSBlcnJvcnMgYXJlCisgICAgICAgICAgdGhlIHJlc3VsdCBvZiBzb21lIG90aGVyIGRldmljZSBpc3N1aW5nIFBDSSB0cmFuc2FjdGlvbnMKKyAgICAgICAgICB3aXRoIGJhZCBwYXJpdHkuICBPbmNlIHRoZSB1c2VyIGhhcyBiZWVuIGluZm9ybWVkIG9mIHRoZQorICAgICAgICAgIHByb2JsZW0sIGNvbnRpbnVpbmcgdG8gcmVwb3J0IHRoZSBlcnJvcnMganVzdCBkZWdyYWRlcworICAgICAgICAgIG91ciBwZXJmb3JtYW5jZS4KKworICAgNi4yLjMyIChNYXJjaCAyOHRoLCAyMDAzKQorICAgICAgICAtIER5bmFtaWNhbGx5IHNpemVkIFMvRyBsaXN0cyB0byBhdm9pZCBTQ1NJIG1hbGxvYworICAgICAgICAgIHBvb2wgZnJhZ21lbnRhdGlvbiBhbmQgU0NTSSBtaWQtbGF5ZXIgZGVhZGxvY2suCisKKyAgIDYuMi4yOCAoSmFudWFyeSAyMHRoLCAyMDAzKQorICAgICAgICAtIERvbWFpbiBWYWxpZGF0aW9uIEZpeGVzCisgICAgICAgIC0gQWRkIGFiaWxpdHkgdG8gZGlzYWJsZSBQQ0kgcGFyaXR5IGVycm9yIGNoZWNraW5nLgorICAgICAgICAtIEVuaGFuY2VkIE1lbW9yeSBNYXBwZWQgSS9PIHByb2JlCisKKyAgIDYuMi4yMCAoTm92ZW1iZXIgN3RoLCAyMDAyKQorICAgICAgICAtIEFkZGVkIERvbWFpbiBWYWxpZGF0aW9uLgorCiszLiBDb21tYW5kIExpbmUgT3B0aW9ucworCisgICAgICAgIFdBUk5JTkc6IEFMVEVSSU5HIE9SIEFERElORyBUSEVTRSBEUklWRVIgUEFSQU1FVEVSUworICAgICAgICAgICAgICAgICBJTkNPUlJFQ1RMWSBDQU4gUkVOREVSIFlPVVIgU1lTVEVNIElOT1BFUkFCTEUuCisgICAgICAgICAgICAgICAgIFVTRSBUSEVNIFdJVEggQ0FVVElPTi4gCisKKyAgIEVkaXQgdGhlIGZpbGUgIm1vZHByb2JlLmNvbmYiIGluIHRoZSBkaXJlY3RvcnkgL2V0YyBhbmQgYWRkL2VkaXQgYQorICAgbGluZSBjb250YWluaW5nICdvcHRpb25zIGFpYzd4eHggYWljN3h4eD1bY29tbWFuZFssY29tbWFuZC4uLl1dJyB3aGVyZQorICAgJ2NvbW1hbmQnIGlzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHZlcmJvc2UKKyAgICAgICAgICBEZWZpbml0aW9uOiBlbmFibGUgYWRkaXRpb25hbCBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgb3BlcmF0aW9uLgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IGRlYnVnOlt2YWx1ZV0KKyAgICAgICAgICBEZWZpbml0aW9uOiBFbmFibGVzIHZhcmlvdXMgbGV2ZWxzIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDB4MDAwMCA9IG5vIGRlYnVnZ2luZywgMHhmZmZmID0gZnVsbCBkZWJ1Z2dpbmcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAweDAwMDAKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogbm9fcHJvYmUKKyAgICAgICAgICAgICAgT3B0aW9uOiBwcm9iZV9laXNhX3ZsCisgICAgICAgICAgRGVmaW5pdGlvbjogRG8gbm90IHByb2JlIGZvciBFSVNBL1ZMQiBjb250cm9sbGVycy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgdG9nZ2xlLiAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICAgIHRvIG5vdCBwcm9iZSBFSVNBL1ZMQiBjb250cm9sbGVycyBieSBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgIm5vX3Byb2JlIiB3aWxsIGVuYWJsZSB0aGlzIHByb2JpbmcuCisgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCB0byBwcm9iZSBFSVNBL1ZMQgorICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzIGJ5IGRlZmF1bHQsIHNwZWNpZnlpbmcgIm5vX3Byb2JlIgorICAgICAgICAgICAgICAgICAgICAgIHdpbGwgZGlzYWJsZSB0aGlzIHByb2JpbmcuCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSB0b2dnbGUKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBFSVNBL1ZMQiBwcm9iaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBjaV9wYXJpdHkKKyAgICAgICAgICBEZWZpbml0aW9uOiBUb2dnbGVzIHRoZSBkZXRlY3Rpb24gb2YgUENJIHBhcml0eSBlcnJvcnMuCisgICAgICAgICAgICAgICAgICAgICAgT24gbWFueSBtb3RoZXJib2FyZHMgd2l0aCBWSUEgY2hpcHNldHMsCisgICAgICAgICAgICAgICAgICAgICAgUENJIHBhcml0eSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBQQ0kgYnVzLiAgSXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIGhhcmR3YXJlIHRvCisgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlICJzcHVyaW91cyIgcGFyaXR5CisgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzIGFuZCByZWFsIHBhcml0eSBlcnJvcnMuICBUaGUgc3ltcHRvbSBvZgorICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvYmxlbSBpcyBhIHN0cmVhbSBvZiB0aGUgbWVzc2FnZToKKyAgICAic2NzaTA6IERhdGEgUGFyaXR5IEVycm9yIERldGVjdGVkIGR1cmluZyBhZGRyZXNzIG9yIHdyaXRlIGRhdGEgcGhhc2UiCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGJ5IHRoZSBkcml2ZXIuCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSB0b2dnbGUKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBQQ0kgUGFyaXR5IEVycm9yIHJlcG9ydGluZyBpcyBkaXNhYmxlZAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBub19yZXNldAorICAgICAgICAgIERlZmluaXRpb246IERvIG5vdCByZXNldCB0aGUgYnVzIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZQorICAgICAgICAgICAgICAgICAgICAgIHBoYXNlCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZXh0ZW5kZWQKKyAgICAgICAgICBEZWZpbml0aW9uOiBGb3JjZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBvbiB0aGUgY29udHJvbGxlcgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBlcmlvZGljX290YWcKKyAgICAgICAgICBEZWZpbml0aW9uOiBTZW5kIGFuIG9yZGVyZWQgdGFnIHBlcmlvZGljYWxseSB0byBwcmV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgdGFnIHN0YXJ2YXRpb24uICBOZWVkZWQgZm9yIHNvbWUgb2xkZXIgZGV2aWNlcworICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJldmVyc2Vfc2NhbgorICAgICAgICAgIERlZmluaXRpb246IFByb2JlIHRoZSBzY3NpIGJ1cyBpbiByZXZlcnNlIG9yZGVyLCBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFyZ2V0IDE1CisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZ2xvYmFsX3RhZ19kZXB0aDpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogR2xvYmFsIHRhZyBkZXB0aCBmb3IgYWxsIHRhcmdldHMgb24gYWxsIGJ1c3Nlcy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHRhZyBkZXB0aCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBzZWxlY3RpdmVseSBvdmVycmlkZGVuIHZpIHRoZSB0YWdfaW5mbworICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgUG9zc2libGUgVmFsdWVzOiAxIC0gMjUzCisgICAgICAgRGVmYXVsdCBWYWx1ZTogMzIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogdGFnX2luZm86e3t2YWx1ZVssdmFsdWUuLi5dfVsse3ZhbHVlWyx2YWx1ZS4uLl19Li4uXX0KKyAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgdGhlIHBlci10YXJnZXQgdGFnZ2VkIHF1ZXVlIGRlcHRoIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgICBwZXIgY29udHJvbGxlciBiYXNpcy4gIEJvdGggY29udHJvbGxlcnMgYW5kIHRhcmdldHMKKyAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0IHRoZXkgc2hvdWxkIHJldGFpbgorICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHRhZyBkZXB0aC4KKyAgICAgICAgICAgIEV4YW1wbGVzOiB0YWdfaW5mbzp7ezE2LDMyLDMyLDY0LDgsOCwsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJ9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgdGFnIGRlcHRoIG9mIDE2IGZvciB0YXJnZXQgMAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgNjQgZm9yIHRhcmdldCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiA4IGZvciB0YXJnZXRzIDQgYW5kIDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhdmVzIHRhcmdldCA2IGF0IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAzMiBmb3IgdGFyZ2V0cyAxLDIsNy0xNQorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IGRlcHRoLgorCisgICAgICAgICAgICAgICAgICAgICAgdGFnX2luZm86e3t9LHszMiwsMzJ9fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAxCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAzMiBmb3IgdGFyZ2V0cyAwIGFuZCAyCisgICAgICAgICAgICAgICAgICAgICAgICBBbGwgb3RoZXIgdGFyZ2V0cyByZXRhaW4gdGhlIGRlZmF1bHQgZGVwdGguCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgUG9zc2libGUgVmFsdWVzOiAxIC0gMjUzCisgICAgICAgRGVmYXVsdCBWYWx1ZTogMzIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2VsdGltZTpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogU3BlY2lmaWVzIHRoZSBzZWxlY3Rpb24gdGltZW91dCB2YWx1ZQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgPSAyNTZtcywgMSA9IDEyOG1zLCAyID0gNjRtcywgMyA9IDMybXMKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAwCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IGR2OiB7dmFsdWVbLHZhbHVlLi4uXX0gCisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IERvbWFpbiBWYWxpZGF0aW9uIFBvbGljeSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiBkdjp7LTEsMCwsMSwxLDB9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgbGVhdmUgRFYgYXQgaXRzIGRlZmF1bHQgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMSBkaXNhYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCBjb25maWd1cmF0aW9uIG9uIENvbnRyb2xsZXIgMi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXJzIDMgYW5kIDQgZW5hYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciA1IGRpc2FibGUgRFYuCisKKyAgICAgUG9zc2libGUgVmFsdWVzOiA8IDAgVXNlIHNldHRpbmcgZnJvbSBzZXJpYWwgRUVQUk9NLgorICAgICAgICAgICAgICAgICAgICAgIDAgRGlzYWJsZSBEVgorICAgICAgICAgICAgICAgICAgICAgID4gMCBFbmFibGUgRFYKKworICAgICAgIERlZmF1bHQgVmFsdWU6IFNDU0ktU2VsZWN0IHNldHRpbmcgb24gY29udHJvbGxlcnMgd2l0aCBhIFNDU0kgU2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIGZvciBEVi4gIE90aGVyd2lzZSwgb24gZm9yIGNvbnRyb2xsZXJzIHN1cHBvcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgICBVMTYwIHNwZWVkcyBhbmQgb2ZmIGZvciBhbGwgb3RoZXIgY29udHJvbGxlciB0eXBlcy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEV4YW1wbGU6CisgICAnb3B0aW9ucyBhaWM3eHh4IGFpYzd4eHg9dmVyYm9zZSxub19wcm9iZSx0YWdfaW5mbzp7e30seywsMTB9fSxzZWx0aW1lOjEiCisgICAgICAgIGVuYWJsZXMgdmVyYm9zZSBsb2dnaW5nLCBEaXNhYmxlIEVJU0EvVkxCIHByb2JpbmcsCisgICAgICAgIGFuZCBzZXQgdGFnIGRlcHRoIG9uIENvbnRyb2xsZXIgMS9UYXJnZXQgMiB0byAxMCB0YWdzLgorCiszLiBDb250YWN0aW5nIEFkYXB0ZWMKKworICAgQSBUZWNobmljYWwgU3VwcG9ydCBJZGVudGlmaWNhdGlvbiAoVFNJRCkgTnVtYmVyIGlzIHJlcXVpcmVkIGZvciAKKyAgIEFkYXB0ZWMgdGVjaG5pY2FsIHN1cHBvcnQuCisgICAgLSBUaGUgMTItZGlnaXQgVFNJRCBjYW4gYmUgZm91bmQgb24gdGhlIHdoaXRlIGJhcmNvZGUtdHlwZSBsYWJlbAorICAgICAgaW5jbHVkZWQgaW5zaWRlIHRoZSBib3ggd2l0aCB5b3VyIHByb2R1Y3QuIFRoZSBUU0lEIGhlbHBzIHVzIAorICAgICAgcHJvdmlkZSBtb3JlIGVmZmljaWVudCBzZXJ2aWNlIGJ5IGFjY3VyYXRlbHkgaWRlbnRpZnlpbmcgeW91ciAKKyAgICAgIHByb2R1Y3QgYW5kIHN1cHBvcnQgc3RhdHVzLgorICAgU3VwcG9ydCBPcHRpb25zCisgICAgLSBTZWFyY2ggdGhlIEFkYXB0ZWMgU3VwcG9ydCBLbm93bGVkZ2ViYXNlIChBU0spIGF0CisgICAgICBodHRwOi8vYXNrLmFkYXB0ZWMuY29tIGZvciBhcnRpY2xlcywgdHJvdWJsZXNob290aW5nIHRpcHMsIGFuZAorICAgICAgZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMgZm9yIHlvdXIgcHJvZHVjdC4KKyAgICAtIEZvciBzdXBwb3J0IHZpYSBFbWFpbCwgc3VibWl0IHlvdXIgcXVlc3Rpb24gdG8gQWRhcHRlYydzIAorICAgICAgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdHMgYXQgaHR0cDovL2Fzay5hZGFwdGVjLmNvbS4KKyAgICAgCisgICBOb3J0aCBBbWVyaWNhCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLmNvbS4KKyAgICAtIFRvIHNwZWFrIHdpdGggYSBGaWJyZSBDaGFubmVsL1JBSUQvRXh0ZXJuYWwgU3RvcmFnZSBUZWNobmljYWwKKyAgICAgIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAxLTMyMS0yMDctMjAwMCwKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAzOjAwIEEuTS4gdG8gNTowMCBQLk0uLCBQU1QuCisgICAgICAoTm90IG9wZW4gb24gaG9saWRheXMpCisgICAgLSBGb3IgVGVjaG5pY2FsIFN1cHBvcnQgaW4gYWxsIG90aGVyIHRlY2hub2xvZ2llcyBpbmNsdWRpbmcgCisgICAgICBTQ1NJLCBjYWxsIDEtNDA4LTkzNC03Mjc0LAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDY6MDAgQS5NLiB0byA1OjAwIFAuTS4sIFBTVC4KKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKyAgICAtIEZvciBhZnRlciBob3VycyBzdXBwb3J0LCBjYWxsIDEtODAwLTQxNi04MDY2ICgkOTkvY2FsbCwgCisgICAgICAkMTQ5L2NhbGwgb24gaG9saWRheXMpCisgICAgLSBUbyBvcmRlciBBZGFwdGVjIHByb2R1Y3RzIGluY2x1ZGluZyBzb2Z0d2FyZSBhbmQgY2FibGVzLCBjYWxsCisgICAgICAxLTgwMC00NDItNzI3NCBvciAxLTQwOC05NTctNzI3NC4gWW91IGNhbiBhbHNvIHZpc2l0IG91ciAKKyAgICAgIG9ubGluZSBzdG9yZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWNzdG9yZS5jb20KKworICAgRXVyb3BlCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLWV1cm9wZS5jb20uCisgICAgLSBFbmdsaXNoIGFuZCBGcmVuY2g6IFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCAKKyAgICAgIFNwZWNpYWxpc3QsIGNhbGwgb25lIG9mIHRoZSBmb2xsb3dpbmcgbnVtYmVyczoKKyAgICAgICAgLSBFbmdsaXNoOiArMzItMi0zNTItMzQ3MAorICAgICAgICAtIEZyZW5jaDogICszMi0yLTM1Mi0zNDYwCisgICAgICBIb3VyczogTW9uZGF5LVRodXJzZGF5LCAxMDowMCB0byAxMjozMCwgMTM6MzAgdG8gMTc6MzAgQ0VUIAorICAgICAgICAgICAgIEZyaWRheSwgMTA6MDAgdG8gMTI6MzAsIDEzOjMwIHRvIDE2OjMwIENFVAorICAgIC0gR2VybWFuOiBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwKKyAgICAgIGNhbGwgKzQ5LTg5LTQ1Ni00MDY2MAorICAgICAgSG91cnM6IE1vbmRheS1UaHVyc2RheSwgMDk6MzAgdG8gMTI6MzAsIDEzOjMwIHRvIDE2OjMwIENFVAorICAgICAgICAgICAgIEZyaWRheSwgMDk6MzAgdG8gMTI6MzAsIDEzOjMwIHRvIDE1OjAwIENFVAorICAgIC0gVG8gb3JkZXIgQWRhcHRlYyBwcm9kdWN0cywgaW5jbHVkaW5nIGFjY2Vzc29yaWVzIGFuZCBjYWJsZXM6CisgICAgICAgIC0gVUs6ICswODAwLTk2LTY1LTI2IG9yIGZheCArMDgwMC03MzEtMDItOTUKKyAgICAgICAgLSBPdGhlciBFdXJvcGVhbiBjb3VudHJpZXM6ICszMi0xMS0zMDAtMzc5CisKKyAgIEF1c3RyYWxpYSBhbmQgTmV3IFplYWxhbmQKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLmF1LgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArNjEyLTk0MTYtMDY5OAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDEwOjAwIEEuTS4gdG8gNDozMCBQLk0uLCBFQVQKKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKworICAgSmFwYW4KKyAgICAtIFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIAorICAgICAgKzgxLTMtNTMwOC02MTIwIAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDk6MDAgYS5tLiB0byAxMjowMCBwLm0uLCAxOjAwIHAubS4gdG8KKyAgICAgIDY6MDAgcC5tLiBUU0MKKworICAgSG9uZyBLb25nIGFuZCBDaGluYQorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArODUyLTI4NjktNzIwMAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDEwOjAwIHRvIDE3OjAwLgorICAgIC0gRmF4IFRlY2huaWNhbCBTdXBwb3J0IGF0ICs4NTItMjg2OS03MTAwLgorCisgICBTaW5nYXBvcmUKKyAgICAtIFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIAorICAgICAgKzY1LTI0NS03NDcwCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgdG8gMTc6MDAuCisgICAgLSBGYXggVGVjaG5pY2FsIFN1cHBvcnQgYXQgKzg1Mi0yODY5LTcxMDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBBZGFwdGVjIEluYy4gNjkxIFMuIE1pbHBpdGFzIEJsdmQuLCBNaWxwaXRhcyBDQSA5NTAzNSBVU0EuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBhcmUgcGVybWl0dGVkIHRvIHJlZGlzdHJpYnV0ZSwgdXNlIGFuZCBtb2RpZnkgdGhpcyBSRUFETUUgZmlsZSBpbiB3aG9sZQorICogb3IgaW4gcGFydCBpbiBjb25qdW5jdGlvbiB3aXRoIHJlZGlzdHJpYnV0aW9uIG9mIHNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoZQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBSRUFETUUgZmlsZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMy4gTW9kaWZpY2F0aW9ucyBvciBuZXcgY29udHJpYnV0aW9ucyBtdXN0IGJlIGF0dHJpYnV0ZWQgaW4gYSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSBpZGVudGlmeWluZyB0aGUgYXV0aG9yICgiQ29udHJpYnV0b3IiKSBhbmQgYWRkZWQgYmVsb3cgdGhlCisgKiAgICBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlLiBUaGUgY29weXJpZ2h0IG5vdGljZSBpcyBmb3IgcHVycG9zZXMgb2YKKyAqICAgIGlkZW50aWZ5aW5nIGNvbnRyaWJ1dG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBkZWVtZWQgYXMgcGVybWlzc2lvbiB0byBhbHRlcgorICogICAgdGhlIHBlcm1pc3Npb25zIGdpdmVuIGJ5IEFkYXB0ZWMuCisgKgorICogVEhJUyBSRUFETUUgRklMRSBJUyBQUk9WSURFRCBCWSBBREFQVEVDIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZCisgKiBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQgT1IgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIEFEQVBURUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgUkVBRE1FCisgKiBGSUxFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eF9vbGQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHhfb2xkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWU1YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHhfb2xkLnR4dApAQCAtMCwwICsxLDUxMSBAQAorCQkJICAgIEFJQzd4eHggRHJpdmVyIGZvciBMaW51eAorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBBSUM3eHh4IFNDU0kgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgQWRhcHRlYyAoaHR0cDovL3d3dy5hZGFwdGVjLmNvbSkKK1NDU0kgY29udHJvbGxlcnMgYW5kIGNoaXBzZXRzLiBNYWpvciBwb3J0aW9ucyBvZiB0aGUgZHJpdmVyIGFuZCBkcml2ZXIKK2RldmVsb3BtZW50IGFyZSBzaGFyZWQgYmV0d2VlbiBib3RoIExpbnV4IGFuZCBGcmVlQlNELiBTdXBwb3J0IGZvciB0aGUKK0FJQy03eHh4IGNoaXBzZXRzIGhhdmUgYmVlbiBpbiB0aGUgZGVmYXVsdCBMaW51eCBrZXJuZWwgc2luY2UgYXBwcm94aW1hdGVseQorbGludXgtMS4xLnggYW5kIGZhaXJseSBzdGFibGUgc2luY2UgbGludXgtMS4yLngsIGFuZCBhcmUgYWxzbyBpbiBGcmVlQlNECisyLjEuMCBvciBsYXRlci4KKworICBTdXBwb3J0ZWQgY2FyZHMvY2hpcHNldHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFkYXB0ZWMgQ2FyZHMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQUhBLTI3NHgKKyAgICBBSEEtMjc0eFQgICAgICAgICAgICAgICAKKyAgICBBSEEtMjg0MgorICAgIEFIQS0yOTEwQiAgICAgICAgICAgICAgIAorICAgIEFIQS0yOTIwQworICAgIEFIQS0yOTMwCisgICAgQUhBLTI5MzBVCisgICAgQUhBLTI5MzBDVQorICAgIEFIQS0yOTMwVTIKKyAgICBBSEEtMjk0MCAgICAgICAgICAgICAgIAorICAgIEFIQS0yOTQwVyAgICAgICAgICAgICAgCisgICAgQUhBLTI5NDBVICAgICAgICAgICAgICAKKyAgICBBSEEtMjk0MFVXCisgICAgQUhBLTI5NDBVVy1QUk8KKyAgICBBSEEtMjk0MEFVIAorICAgIEFIQS0yOTQwVTJXCisgICAgQUhBLTI5NDBVMgorICAgIEFIQS0yOTQwVTJCCisgICAgQUhBLTI5NDBVMkJPRU0KKyAgICBBSEEtMjk0NEQgICAgICAgICAgICAgIAorICAgIEFIQS0yOTQ0V0QKKyAgICBBSEEtMjk0NFVECisgICAgQUhBLTI5NDRVV0QKKyAgICBBSEEtMjk1MFUyCisgICAgQUhBLTI5NTBVMlcKKyAgICBBSEEtMjk1MFUyQgorICAgIEFIQS0yOTE2ME0KKyAgICBBSEEtMzk0MAorICAgIEFIQS0zOTQwVQorICAgIEFIQS0zOTQwVworICAgIEFIQS0zOTQwVVcKKyAgICBBSEEtMzk0MEFVVworICAgIEFIQS0zOTQwVTJXCisgICAgQUhBLTM5NTBVMkIKKyAgICBBSEEtMzk1MFUyRAorICAgIEFIQS0zOTYwRAorICAgIEFIQS0zOTE2ME0KKyAgICBBSEEtMzk4NQorICAgIEFIQS0zOTg1VQorICAgIEFIQS0zOTg1VworICAgIEFIQS0zOTg1VVcKKworICAgIE1vdGhlcmJvYXJkIENoaXBzZXRzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFJQy03Nzd4ICAgCisgICAgQUlDLTc4NXgKKyAgICBBSUMtNzg2eAorICAgIEFJQy03ODd4CisgICAgQUlDLTc4OHgKKyAgICBBSUMtNzg5eAorICAgIEFJQy0zODYwCisKKyAgICBCdXMgVHlwZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVyAtIFdpZGUgU0NTSSwgU0NTSS0zLCAxNmJpdCBidXMsIDY4cGluIGNvbm5lY3Rvciwgd2lsbCBhbHNvIHN1cHBvcnQKKyAgICAgICAgU0NTSS0xL1NDU0ktMiA1MHBpbiBkZXZpY2VzLCB0cmFuc2ZlciByYXRlcyB1cCB0byAyME1CL3MuCisgICAgVSAtIFVsdHJhIFNDU0ksIHRyYW5zZmVyIHJhdGVzIHVwIHRvIDQwTUIvcy4KKyAgICBVMi0gVWx0cmEgMiBTQ1NJLCB0cmFuc2ZlciByYXRlcyB1cCB0byA4ME1CL3MuCisgICAgRCAtIERpZmZlcmVudGlhbCBTQ1NJLgorICAgIFQgLSBUd2luIENoYW5uZWwgU0NTSS4gVXAgdG8gMTQgU0NTSSBkZXZpY2VzLgorCisgICAgQUhBLTI3NHggLSBFSVNBIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0yODR4IC0gVkxCIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0yOXh4IC0gUENJIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0zOTR4IC0gUENJIGNvbnRyb2xsZXJzIHdpdGggdHdvIHNlcGFyYXRlIFNDU0kgY29udHJvbGxlcnMgb24tYm9hcmQuCisgICAgQUhBLTM5OHggLSBQQ0kgUkFJRCBjb250cm9sbGVycyB3aXRoIHRocmVlIHNlcGFyYXRlIFNDU0kgY29udHJvbGxlcnMKKyAgICAgICAgICAgICAgIG9uLWJvYXJkLgorCisgIE5vdCBTdXBwb3J0ZWQgRGV2aWNlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBZGFwdGVjIENhcmRzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFIQS0yOTIwIChPbmx5IHRoZSBjYXJkcyB0aGF0IHVzZSB0aGUgRnV0dXJlIERvbWFpbiBjaGlwc2V0IGFyZSBub3QKKyAgICAgICAgICAgICAgc3VwcG9ydGVkLCBhbnkgMjkyMCBjYXJkcyBiYXNlZCBvbiBBZGFwdGVjIEFJQyBjaGlwc2V0cywKKwkgICAgICBzdWNoIGFzIHRoZSAyOTIwQywgYXJlIHN1cHBvcnRlZCkKKyAgICBBQUEtMTN4IFJhaWQgQWRhcHRlcnMKKyAgICBBQUEtMTEzeCBSYWlkIFBvcnQgQ2FyZAorCisgICAgTW90aGVyYm9hcmQgQ2hpcHNldHMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQUlDLTc4MTAKKworICAgIEJ1cyBUeXBlcworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBSIC0gUmFpZCBQb3J0IGJ1c3NlcyBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgIFRoZSBoYXJkd2FyZSBSQUlEIGRldmljZXMgc29sZCBieSBBZGFwdGVjIGFyZSAqTk9UKiBzdXBwb3J0ZWQgYnkgdGhpcworICAgIGRyaXZlciAoYW5kIHdpbGwgcGVvcGxlIHBsZWFzZSBzdG9wIGVtYWlsaW5nIG1lIGFib3V0IHRoZW0sIHRoZXkgYXJlCisgICAgYSB0b3RhbGx5IHNlcGFyYXRlIGJlYXN0IGZyb20gdGhlIGJhcmUgU0NTSSBjb250cm9sbGVycyBhbmQgdGhpcyBkcml2ZXIKKyAgICBjYW4gbm90IGJlIHJldHJvZml0dGVkIGluIGFueSBzYW5lIG1hbm5lciB0byBzdXBwb3J0IHRoZSBoYXJkd2FyZSBSQUlECisgICAgZmVhdHVyZXMgb24gdGhvc2UgY2FyZHMgLSBEb3VnIExlZGZvcmQpLgorICAgIAorCisgIFBlb3BsZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBKdXN0aW4gVCBHaWJicyAgZ2liYnNAcGx1dG90ZWNoLmNvbQorICAgICAgKEJTRCBEcml2ZXIgQXV0aG9yKQorICAgIERhbiBFaXNjaGVuICAgICBkZWlzY2hlbkBpd29ya3MuSW50ZXJXb3Jrcy5vcmcKKyAgICAgIChPcmlnaW5hbCBMaW51eCBEcml2ZXIgQ28tbWFpbnRhaW5lcikKKyAgICBEZWFuIEdlaG5lcnQgICAgZGVhbmdAdGVsZXBvcnQuY29tCisgICAgICAoT3JpZ2luYWwgTGludXggRlRQL3BhdGNoIG1haW50YWluZXIpCisgICAgSmVzcyBKb2huc29uICAgIGplc3RlckBmcmVuenkuY29tCisgICAgICAoQUlDN3h4eCBGQVEgYXV0aG9yKQorICAgIERvdWcgTGVkZm9yZCAgICBkbGVkZm9yZEByZWRoYXQuY29tCisgICAgICAoQ3VycmVudCBMaW51eCBhaWM3eHh4LTUueC54IERyaXZlci9QYXRjaC9GVFAgbWFpbnRhaW5lcikKKyAgICAKKyAgICBTcGVjaWFsIHRoYW5rcyBnbyB0byBKb2huIEF5Y29jayAoYXljb2NrQGNwc2MudWNhbGdhcnkuY2EpLCB0aGUgb3JpZ2luYWwKKyAgICBhdXRob3Igb2YgdGhlIGRyaXZlci4gSm9obiBoYXMgc2luY2UgcmV0aXJlZCBmcm9tIHRoZSBwcm9qZWN0LiBUaGFua3MKKyAgICBhZ2FpbiBmb3IgYWxsIGhpcyB3b3JrIQorICAgIAorICBNYWlsaW5nIGxpc3QKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVGhlcmUgaXMgYSBtYWlsaW5nIGxpc3QgYXZhaWxhYmxlIGZvciB1c2VycyB3aG8gd2FudCB0byB0cmFjayBkZXZlbG9wbWVudAorICAgIGFuZCBjb252ZXJzZSB3aXRoIG90aGVyIHVzZXJzIGFuZCBkZXZlbG9wZXJzLiBUaGlzIGxpc3QgaXMgZm9yIGJvdGgKKyAgICBGcmVlQlNEIGFuZCBMaW51eCBzdXBwb3J0IG9mIHRoZSBBSUM3eHh4IGNoaXBzZXRzLgorCisgICAgVG8gc3Vic2NyaWJlIHRvIHRoZSBBSUM3eHh4IG1haWxpbmcgbGlzdCBzZW5kIG1haWwgdG8gdGhlIGxpc3Qgc2VydmVyLAorICAgIHdpdGggInN1YnNjcmliZSBBSUM3eHh4IiBpbiB0aGUgYm9keSAobm8gU3ViamVjdDogcmVxdWlyZWQpOgorICAgICAgICBUbzogbWFqb3Jkb21vQEZyZWVCU0QuT1JHCisgICAgICAgIC0tLQorICAgICAgICBzdWJzY3JpYmUgQUlDN3h4eAorCisgICAgVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgbGlzdCwgc2VuZCBtYWlsIHRvIHRoZSBsaXN0IHNlcnZlciB3aXRoOgorICAgICAgICBUbzogbWFqb3Jkb21vQEZyZWVCU0QuT1JHCisgICAgICAgIC0tLQorICAgICAgICB1bnN1YnNjcmliZSBBSUM3eHh4CisKKyAgICBTZW5kIHJlZ3VsYXIgbWVzc2FnZXMgYW5kIHJlcGxpZXMgdG86IEFJQzd4eHhARnJlZUJTRC5PUkcKKyAgICAKKyAgQm9vdCBDb21tYW5kIGxpbmUgb3B0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAiYWljN3h4eD1ub19yZXNldCIgLSAgRWxpbWluYXRlIHRoZSBTQ1NJIGJ1cyByZXNldCBkdXJpbmcgc3RhcnR1cC4KKyAgICAgICAgU29tZSBTQ1NJIGRldmljZXMgbmVlZCB0aGUgaW5pdGlhbCByZXNldCB0aGF0IHRoaXMgb3B0aW9uIGRpc2FibGVzCisJaW4gb3JkZXIgdG8gd29yay4gIElmIHlvdSBoYXZlIHByb2JsZW1zIGF0IGJvb3R1cCwgcGxlYXNlIG1ha2Ugc3VyZQorCXlvdSBhcmVuJ3QgdXNpbmcgdGhpcyBvcHRpb24uCisJCisgICAgImFpYzd4eHg9cmV2ZXJzZV9zY2FuIiAtIENlcnRhaW4gUENJIG1vdGhlcmJvYXJkcyBzY2FuIGZvciBkZXZpY2VzIGF0CisgICAgICAgIGJvb3R1cCBieSBzY2FubmluZyBmcm9tIHRoZSBoaWdoZXN0IG51bWJlcmVkIFBDSSBkZXZpY2UgdG8gdGhlCisJbG93ZXN0IG51bWJlcmVkIFBDSSBkZXZpY2UsIG90aGVycyBkbyBqdXN0IHRoZSBvcHBvc2l0ZSBhbmQgc2NhbgorCWZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgbnVtYmVyZWQgUENJIGRldmljZS4gIFRoZXJlIGlzIG5vIHJlbGlhYmxlCisJd2F5IHRvIGF1dG9kZXRlY3QgdGhpcyBvcmRlcmluZy4gIFNvLCB3ZSBkZWZhdWx0IHRvIHRoZSBtb3N0IGNvbW1vbgorCW9yZGVyLCB3aGljaCBpcyBsb3dlc3QgdG8gaGlnaGVzdC4gIFRoZW4sIGluIGNhc2UgeW91ciBtb3RoZXJib2FyZAorCXNjYW5zIGZyb20gaGlnaGVzdCB0byBsb3dlc3QsIHdlIGhhdmUgdGhpcyBvcHRpb24uICBJZiB5b3VyIEJJT1MKKwlmaW5kcyB0aGUgZHJpdmVzIG9uIGNvbnRyb2xsZXIgQSBiZWZvcmUgY29udHJvbGxlciBCIGJ1dCB0aGUgbGludXgKKwlrZXJuZWwgZmluZHMgeW91ciBkcml2ZXMgb24gY29udHJvbGxlciBCIGJlZm9yZSBBLCB0aGVuIHlvdSBzaG91bGQKKwl1c2UgdGhpcyBvcHRpb24uCisJCisgICAgImFpYzd4eHg9ZXh0ZW5kZWQiIC0gRm9yY2UgdGhlIGRyaXZlciB0byBkZXRlY3QgZXh0ZW5kZWQgZHJpdmUgdHJhbnNsYXRpb24KKyAgICAgICAgb24geW91ciBjb250cm9sbGVyLiAgVGhpcyBoZWxwcyB0aG9zZSBwZW9wbGUgd2hvIGhhdmUgY2FyZHMgd2l0aG91dAorICAgICAgICBhIFNFRVBST00gbWFrZSBzdXJlIHRoYXQgbGludXggYW5kIGFsbCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyB0aGluaworICAgICAgICB0aGUgc2FtZSB3YXkgYWJvdXQgeW91ciBoYXJkIGRyaXZlcy4KKworICAgICJhaWM3eHh4PXNjYnJhbSIgLSBTb21lIGNhcmRzIGhhdmUgZXh0ZXJuYWwgU0NCIFJBTSB0aGF0IGNhbiBiZSB1c2VkIHRvCisgICAgICAgIGdpdmUgdGhlIGNhcmQgbW9yZSBoYXJkd2FyZSBTQ0Igc2xvdHMuICBUaGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIHVzZQorCXRoYXQgU0NCIFJBTS4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIHRoZSBkcml2ZXIgd29uJ3QgdG91Y2ggdGhlIFNDQgorCVJBTSBiZWNhdXNlIGl0IGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIG9uIGEgZmV3IGNhcmRzIG91dCB0aGVyZQorCShzdWNoIGFzIDM5ODUgY2xhc3MgY2FyZHMpLgorCQorICAgICJhaWM3eHh4PWlycV90cmlnZ2VyOngiIC0gUmVwbGFjZSB4IHdpdGggZWl0aGVyIDAgb3IgMSB0byBmb3JjZSB0aGUga2VybmVsCisgICAgICAgIHRvIHVzZSB0aGUgY29ycmVjdCBJUlEgdHlwZSBmb3IgeW91ciBjYXJkLiAgVGhpcyBvbmx5IGFwcGxpZXMgdG8gRUlTQQorICAgICAgICBiYXNlZCBjb250cm9sbGVycy4gIE9uIHRoZXNlIGNvbnRyb2xsZXJzLCAwIGlzIGZvciBFZGdlIHRyaWdnZXJlZAorICAgICAgICBpbnRlcnJ1cHRzLCBhbmQgMSBpcyBmb3IgTGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuICBJZiB5b3UgYXJlbid0CisgICAgICAgIHN1cmUgb3IgZG9uJ3Qga25vdyB3aGljaCBJUlEgdHJpZ2dlciB0eXBlIHlvdXIgRUlTQSBjYXJkIHVzZXMsIHRoZW4KKyAgICAgICAgbGV0IHRoZSBrZXJuZWwgYXV0b2RldGVjdCB0aGUgdHJpZ2dlciB0eXBlLgorCQorICAgICJhaWM3eHh4PXZlcmJvc2UiIC0gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgaW4gb25lIG9mIHR3byB3YXlzLiAgSWYgeW91CisgICAgICAgIHNpbXBseSBzcGVjaWZ5IGFpYzd4eHg9dmVyYm9zZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgYXV0b21hdGljYWxseQorCXBpY2sgdGhlIGRlZmF1bHQgc2V0IG9mIHZlcmJvc2UgbWVzc2FnZXMgZm9yIHlvdSB0byBzZWUuCisJQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBjb21tYW5kIGFzIAorCSJhaWM3eHh4PXZlcmJvc2U6MHhYWFhYIiB3aGVyZSB0aGUgWCBlbnRyaWVzIGFyZSByZXBsYWNlZCB3aXRoCisJaGV4YWRlY2ltYWwgZGlnaXRzLiAgVGhpcyBvcHRpb24gaXMgYSBiaXQgZmllbGQgdHlwZSBvcHRpb24uICBGb3IKKwlhIGZ1bGwgbGlzdGluZyBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMsIHNlYXJjaCBmb3IgdGhlIAorCSNkZWZpbmUgVkVSQk9TRV94eHh4eHggbGluZXMgaW4gdGhlIGFpYzd4eHguYyBmaWxlLiAgSWYgeW91IHdhbnQKKwl2ZXJib3NlIG1lc3NhZ2VzLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHNpbXBseSB1c2UgdGhlCisJYWljN3h4eD12ZXJib3NlIHZhcmlhbnQgb2YgdGhpcyBjb21tYW5kLgorCQorICAgICJhaWM3eHh4PXBjaV9wYXJpdHk6eCIgLSBUaGlzIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgZHJpdmVyCisgICAgICAgIGVuYWJsZXMgUENJIHBhcml0eSBlcnJvciBjaGVja2luZyBvbiB0aGUgUENJIGJ1cy4gIEJ5IGRlZmF1bHQsIHRoaXMKKyAgICAgICAgY2hlY2tpbmcgaXMgZGlzYWJsZWQuICBUbyBlbmFibGUgdGhlIGNoZWNrcywgc2ltcGx5IHNwZWNpZnkgcGNpX3Bhcml0eQorICAgICAgICB3aXRoIG5vIHZhbHVlIGFmdGVyd29yZHMuICBUbyByZXZlcnNlIHRoZSBwYXJpdHkgZnJvbSBldmVuIHRvIG9kZCwKKyAgICAgICAgc3VwcGx5IGFueSBudW1iZXIgb3RoZXIgdGhhbiAwIG9yIDI1NS4gIEluIHNob3J0OgorICAgICAgICAgIHBjaV9wYXJpdHkgICAgIC0gRXZlbiBwYXJpdHkgY2hlY2tpbmcgKGV2ZW4gaXMgdGhlIG5vcm1hbCBQQ0kgcGFyaXR5KQorICAgICAgICAgIHBjaV9wYXJpdHk6eCAgIC0gV2hlcmUgeCA+IDAsIE9kZCBwYXJpdHkgY2hlY2tpbmcKKyAgICAgICAgICBwY2lfcGFyaXR5OjAgICAtIE5vIGNoZWNrIChkZWZhdWx0KQorICAgICAgICBOT1RFOiBJbiBvcmRlciB0byBnZXQgRXZlbiBQQ0kgcGFyaXR5IGNoZWNraW5nLCB5b3UgbXVzdCB1c2UgdGhlCisgICAgICAgIHZlcnNpb24gb2YgdGhlIG9wdGlvbiB0aGF0IGRvZXMgbm90IGluY2x1ZGUgdGhlIDogYW5kIGEgbnVtYmVyIGF0CisgICAgICAgIHRoZSBlbmQgKHVubGVzcyB5b3Ugd2FudCB0byBlbnRlciBleGFjdGx5IDJeMzIgLSAxIGFzIHRoZSBudW1iZXIpLgorCQorICAgICJhaWM3eHh4PW5vX3Byb2JlIiAtIFRoaXMgb3B0aW9uIHdpbGwgZGlzYWJsZSB0aGUgcHJvYmluZyBmb3IgYW55IFZMQgorICAgICAgICBiYXNlZCAyODQyIGNvbnRyb2xsZXJzIGFuZCBhbnkgRUlTQSBiYXNlZCBjb250cm9sbGVycy4gIFRoaXMgaXMKKwluZWVkZWQgb24gY2VydGFpbiBuZXdlciBtb3RoZXJib2FyZHMgd2hlcmUgdGhlIG5vcm1hbCBFSVNBIEkvTyByYW5nZXMKKwloYXZlIGJlZW4gY2xhaW1lZCBieSBvdGhlciBQQ0kgZGV2aWNlcy4gIFByb2Jpbmcgb24gdGhvc2UgbWFjaGluZXMKKwl3aWxsIG9mdGVuIHJlc3VsdCBpbiB0aGUgbWFjaGluZSBjcmFzaGluZyBvciBzcG9udGFuZW91c2x5IHJlYm9vdGluZworCWR1cmluZyBzdGFydHVwLiAgRXhhbXBsZXMgb2YgbWFjaGluZXMgdGhhdCBuZWVkIHRoaXMgYXJlIHRoZQorCURlbGwgUG93ZXJFZGdlIDYzMDAgbWFjaGluZXMuCisKKyAgICAiYWljN3h4eD1zZWx0aW1lOjIiIC0gVGhpcyBvcHRpb24gY29udHJvbHMgaG93IGxvbmcgdGhlIGNhcmQgd2FpdHMKKyAgICAgICAgZHVyaW5nIGEgZGV2aWNlIHNlbGVjdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIGRldmljZSB0byByZXNwb25kLgorCVRoZSBvcmlnaW5hbCBTQ1NJIHNwZWMgc2F5cyB0aGF0IHRoaXMgInNob3VsZCBiZSIgMjU2bXMuICBUaGlzCisJaXMgZ2VuZXJhbGx5IG5vdCByZXF1aXJlZCB3aXRoIG1vZGVybiBkZXZpY2VzLiAgSG93ZXZlciwgc29tZQorCXZlcnkgb2xkIFNDU0kgSSBkZXZpY2VzIG5lZWQgdGhlIGZ1bGwgMjU2bXMuICBNb3N0IG1vZGVybiBkZXZpY2VzCisJY2FuIHJ1biBmaW5lIHdpdGggb25seSA2NG1zLiAgVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzCisJNjRtcy4gIElmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGlzIG9wdGlvbiwgdGhlbiB1c2UgdGhlIGZvbGxvd2luZworCXRhYmxlIHRvIHNldCB0aGUgcHJvcGVyIHZhbHVlIGluIHRoZSBleGFtcGxlIGFib3ZlOgorCSAgMCAgLSAgMjU2bXMKKwkgIDEgIC0gIDEyOG1zCisJICAyICAtICAgNjRtcworCSAgMyAgLSAgIDMybXMKKwkKKyAgICAiYWljN3h4eD1wYW5pY19vbl9hYm9ydCIgLSBUaGlzIG9wdGlvbiBpcyBmb3IgZGVidWdnaW5nIGFuZCB3aWxsIGNhdXNlCisgICAgICAgIHRoZSBkcml2ZXIgdG8gcGFuaWMgdGhlIGxpbnV4IGtlcm5lbCBhbmQgZnJlZXplIHRoZSBzeXN0ZW0gdGhlIGZpcnN0CisJdGltZSB0aGUgZHJpdmVycyBhYm9ydCBvciByZXNldCByb3V0aW5lcyBhcmUgY2FsbGVkLiAgVGhpcyBpcyBtb3N0CisJaGVscGZ1bCB3aGVuIHNvbWUgcHJvYmxlbSBjYXVzZXMgaW5maW5pdGUgcmVzZXQgbG9vcHMgdGhhdCBzY3JvbGwgdG9vCisJZmFzdCB0byBzZWUuICBCeSB1c2luZyB0aGlzIG9wdGlvbiwgeW91IGNhbiB3cml0ZSBkb3duIHdoYXQgdGhlIGVycm9ycworCWFjdHVhbGx5IGFyZSBhbmQgc2VuZCB0aGF0IGluZm9ybWF0aW9uIHRvIG1lIHNvIGl0IGNhbiBiZSBmaXhlZC4KKwkKKyAgICAiYWljN3h4eD1kdW1wX2NhcmQiIC0gVGhpcyBvcHRpb24gd2lsbCBwcmludCBvdXQgdGhlICplbnRpcmUqIHNldCBvZgorICAgICAgICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBvbiB0aGUgY2FyZCBkdXJpbmcgdGhlIGluaXQgc2VxdWVuY2UuICBUaGlzCisJaXMgYSBkZWJ1Z2dpbmcgYWlkIHVzZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCBzdGF0ZSB0aGUgY2FyZCBpcyBpbgorCXdoZW4gd2UgZmluYWxseSBmaW5pc2ggb3VyIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiAgSWYgeW91IGRvbid0CisJaGF2ZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBjaGlwc2V0cywgdGhpcyB3aWxsIGRvIHlvdSBhYnNvbHV0ZWx5CisJbm8gZ29vZCB1bmxlc3MgeW91IGFyZSBzaW1wbHkgdHJ5aW5nIHRvIHdyaXRlIGFsbCB0aGUgaW5mb3JtYXRpb24KKwlkb3duIGluIG9yZGVyIHRvIHNlbmQgaXQgdG8gbWUuCisJCisgICAgImFpYzd4eHg9ZHVtcF9zZXF1ZW5jZXIiIC0gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYWJvdmUgb3B0aW9ucyBleGNlcHQKKyAgICAgICAgdGhhdCBpbnN0ZWFkIG9mIGR1bXBpbmcgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIG9uIHRoZSBjYXJkLCB0aGlzCisJb3B0aW9uIGR1bXBzIHRoZSBjb250ZW50cyBvZiB0aGUgc2VxdWVuY2VyIHByb2dyYW0gUkFNLiAgVGhpcyBnaXZlcworCXRoZSBhYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgZG93bmxvYWRlZCB0byB0aGUKKwljYXJkJ3Mgc2VxdWVuY2VyIGFyZSBpbmRlZWQgd2hhdCB0aGV5IGFyZSBzdXBwb3NzZWQgdG8gYmUuICBBZ2FpbiwKKwl1bmxlc3MgeW91IGhhdmUgZG9jdW1lbnRhdGlvbiB0byB0ZWxsIHlvdSBob3cgdG8gaW50ZXJwcmV0IHRoZXNlCisJbnVtYmVycywgdGhlbiBpdCBpcyB0b3RhbGx5IHVzZWxlc3MuCisJCisgICAgImFpYzd4eHg9b3ZlcnJpZGVfdGVybToweGZmZmZmZmZmIiAtIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gZm9yY2UgdGhlCisgICAgCXRlcm1pbmF0aW9uIG9uIHlvdXIgU0NTSSBjb250cm9sbGVycyB0byBhIHBhcnRpY3VsYXIgc2V0dGluZy4gIFRoaXMKKwlpcyBhIGJpdCBtYXNrIHZhcmlhYmxlIHRoYXQgYXBwbGllcyBmb3IgdXAgdG8gOCBhaWM3eHh4IFNDU0kgY2hhbm5lbHMuCisJRWFjaCBjaGFubmVsIGdldHMgNCBiaXRzLCBkaXZpZGVkIGFzIGZvbGxvd3M6CisJYml0ICAgMyAgIDIgICAxICAgMAorCSAgICAgIHwgICB8ICAgfCAgIEVuYWJsZS9EaXNhYmxlIFNpbmdsZSBFbmRlZCBMb3cgQnl0ZSBUZXJtaW5hdGlvbgorCSAgICAgIHwgICB8ICAgRW4vRGlzYWJsZSBTaW5nbGUgRW5kZWQgSGlnaCBCeXRlIFRlcm1pbmF0aW9uCisJICAgICAgfCAgIEVuL0Rpc2FibGUgTG93IEJ5dGUgTFZEIFRlcm1pbmF0aW9uCisJICAgICAgRW4vRGlzYWJsZSBIaWdoIEJ5dGUgTFZEIFRlcm1pbmF0aW9uCisKKwlUaGUgdXBwZXIgMiBiaXRzIHRoYXQgZGVhbCB3aXRoIExWRCB0ZXJtaW5hdGlvbiBvbmx5IGFwcGx5IHRvIFVsdHJhMgorCWNvbnRyb2xsZXJzLiAgRnV0aGVybW9yZSwgZHVlIHRvIHRoZSBjdXJyZW50IFVsdHJhMiBjb250cm9sbGVyCisJZGVzaWducywgdGhlc2UgYml0cyBhcmUgdGllZCB0b2dldGhlciBzdWNoIHRoYXQgc2V0dGluZyBlaXRoZXIgYml0CisJZW5hYmxlcyBib3RoIGxvdyBhbmQgaGlnaCBieXRlIExWRCB0ZXJtaW5hdGlvbi4gIEl0IGlzIG5vdCBwb3NzaWJsZQorCXRvIG9ubHkgc2V0IGhpZ2ggb3IgbG93IGJ5dGUgTFZEIHRlcm1pbmF0aW9uIGluIHRoaXMgbWFubmVyLiAgVGhpcyBpcworCWFuIGFydGlmYWN0IG9mIHRoZSBCSU9TIGRlZmluaXRpb24gb24gVWx0cmEyIGNvbnRyb2xsZXJzLiAgRm9yIG90aGVyCisJY29udHJvbGxlcnMsIHRoZSBvbmx5IGltcG9ydGFudCBiaXRzIGFyZSB0aGUgdHdvIGxvd2VzdCBiaXRzLiAgU2V0dGluZworCXRoZSBoaWdoZXIgYml0cyBvbiBub24tVWx0cmEyIGNvbnRyb2xsZXJzIGhhcyBubyBlZmZlY3QuICBBIGZldworCWV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcyBvcHRpb246CisKKwlFbmFibGUgbG93IGFuZCBoaWdoIGJ5dGUgdGVybWluYXRpb24gb24gYSBub24tdWx0cmEyIGNvbnRyb2xsZXIgdGhhdAorCWlzIHRoZSBmaXJzdCBhaWM3eHh4IGNvbnRyb2xsZXIgKHRoZSBjb3JyZWN0IGJpdHMgYXJlIDAwMTEpLCAKKwlhaWM3eHh4PW92ZXJyaWRlX3Rlcm06MHgzCisKKwlFbmFibGUgYWxsIHRlcm1pbmF0aW9uIG9uIHRoZSB0aGlyZCBhaWM3eHh4IGNvbnRyb2xsZXIsIGhpZ2ggYnl0ZQorCXRlcm1pbmF0aW9uIG9uIHRoZSBzZWNvbmQgYWljN3h4eCBjb250cm9sbGVyLCBhbmQgbG93IGFuZCBoaWdoIGJ5dGUKKwlTRSB0ZXJtaW5hdGlvbiBvbiB0aGUgZmlyc3QgYWljN3h4eCBjb250cm9sbGVyIAorCShiaXRzIGFyZSAxMTExIDAwMTAgMDAxMSksIAorCWFpYzd4eHg9b3ZlcnJpZGVfdGVybToweGYyMworCQorCU5vIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBtYWtlIHRoaXMgb3B0aW9uIG5vbi1jcnlwdGljLiAgSXQgcmVhbGx5CisJc2hvdWxkbid0IGJlIHVzZWQgZXhjZXB0IGluIGRpcmUgY2lyY3Vtc3RhbmNlcywgYW5kIGlmIHRoYXQgaGFwcGVucywKKwlJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgdGVsbGluZyB5b3Ugd2hhdCB0byBzZXQgdGhpcyB0byBhbnl3YXkgOikKKworICAgICJhaWM3eHh4PXN0cHdsZXY6MHhmZmZmZmZmZiIgLSBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIFNUUFdMRVYKKyAgICAgICAgYml0IGluIHRoZSBERVZDT05GSUcgUENJIHJlZ2lzdGVyLiAgQ3VycmVudGx5LCB0aGlzIGlzIG9uZSBvZiB0aGUKKwl2ZXJ5IGZldyByZWdpc3RlcnMgdGhhdCB3ZSBoYXZlIGFic29sdXRlbHkgKm5vKiB3YXkgb2YgZGV0ZWN0aW5nCisJd2hhdCB0aGUgdmFyaWFibGUgc2hvdWxkIGJlLiAgSXQgZGVwZW5kcyBlbnRpcmVseSBvbiBob3cgdGhlIGNoaXBzZXQKKwlhbmQgZXh0ZXJuYWwgdGVybWluYXRvcnMgd2VyZSBjb3VwbGVkIGJ5IHRoZSBjYXJkL21vdGhlcmJvYXJkIG1ha2VyLgorCUZ1cnRoZXIsIGEgY2hpcCByZXNldCAoYXQgcG93ZXIgdXApIGFsd2F5cyBzZXRzIHRoaXMgYml0IHRvIDAuICBJZgorCXRoZXJlIGlzIG5vIEJJT1MgdG8gcnVuIG9uIHRoZSBjaGlwc2V0L2NhcmQgKHN1Y2ggYXMgd2l0aCBhIDI5MTBDCisJb3IgYSBtb3RoZXJib2FyZCBjb250cm9sbGVyIHdpdGggdGhlIEJJT1MgdG90YWxseSBkaXNhYmxlZCkgdGhlbgorCXRoZSB2YXJpYWJsZSBtYXkgbm90IGdldCBzZXQgcHJvcGVybHkuICBPZiBjb3Vyc2UsIGlmIHRoZSBwcm9wZXIKKwlzZXR0aW5nIHdhcyAwLCB0aGVuIHRoYXQncyB3aGF0IGl0IHdvdWxkIGJlIGFmdGVyIHRoZSByZXNldCwgYnV0IGlmCisJdGhlIHByb3BlciBzZXR0aW5nIGlzIGFjdHVhbGx5IDEuLi4uLnlvdSBnZXQgdGhlIHBpY3R1cmUuICBOb3csIHNpbmNlCisJd2UgY2FuJ3QgZGV0ZWN0IHRoaXMgYXQgYWxsLCBJJ3ZlIGFkZGVkIHRoaXMgb3B0aW9uIHRvIGZvcmNlIHRoZQorCXNldHRpbmcuICBJZiB5b3UgaGF2ZSBhIEJJT1Mgb24geW91ciBjb250cm9sbGVyIHRoZW4geW91IHNob3VsZCBuZXZlcgorCW5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uLiAgSG93ZXZlciwgaWYgeW91IGFyZSBoYXZpbmcgbG90cyBvZiBTQ1NJCisJcmVzZXQgcHJvYmxlbXMgYW5kIGNhbid0IHNlZW0gdG8gZ2V0IHRoZW0ga25vY2tlZCBvdXQsIHRoaXMgbWF5IGhlbHAuCisKKwlIZXJlJ3MgYSB0ZXN0IHRvIGtub3cgZm9yIGNlcnRhaW4gaWYgeW91IG5lZWQgdGhpcyBvcHRpb24uICBNYWtlCisJYSBib290IGZsb3BweSB0aGF0IHlvdSBjYW4gdXNlIHRvIGJvb3QgeW91ciBjb21wdXRlciB1cCBhbmQgdGhhdAorCXdpbGwgZGV0ZWN0IHRoZSBhaWM3eHh4IGNvbnRyb2xsZXIuICBOZXh0LCBwb3dlciBkb3duIHlvdXIgY29tcHV0ZXIuCisJV2hpbGUgaXQncyBkb3duLCB1bnBsdWcgYWxsIFNDU0kgY2FibGVzIGZyb20geW91ciBBZGFwdGVjIFNDU0kKKwljb250cm9sbGVyLiAgQm9vdCB0aGUgc3lzdGVtIGJhY2sgdXAgdG8gdGhlIEFkYXB0ZWMgRVotU0NTSSBCSU9TCisJYW5kIHRoZW4gbWFrZSBzdXJlIHRoYXQgdGVybWluYXRpb24gaXMgZW5hYmxlZCBvbiB5b3VyIGFkYXB0ZXIgKGlmCisJeW91IGhhdmUgYW4gQWRhcHRlYyBCSU9TIG9mIGNvdXJzZSkuICBOZXh0LCBib290IHVwIHRoZSBmbG9wcHkgeW91CisJbWFkZSBhbmQgd2FpdCBmb3IgaXQgdG8gZGV0ZWN0IHRoZSBhaWM3eHh4IGNvbnRyb2xsZXIuICBJZiB0aGUga2VybmVsCisJZmluZHMgdGhlIGNvbnRyb2xsZXIgZmluZSwgc2F5cyBzY3NpIDogeCBob3N0cyBhbmQgdGhlbiB0cmllcyB0bworCWRldGVjdCB5b3VyIGRldmljZXMgbGlrZSBub3JtYWwsIHVwIHRvIHRoZSBwb2ludCB3aGVyZSBpdCBmYWlscyB0bworCW1vdW50IHlvdXIgcm9vdCBmaWxlIHN5c3RlbSBhbmQgcGFuaWNzLCB0aGVuIHlvdSdyZSBmaW5lLiAgSWYsIG9uCisJdGhlIG90aGVyIGhhbmQsIHRoZSBzeXN0ZW0gZ29lcyBpbnRvIGFuIGluZmluaXRlIHJlc2V0IGxvb3AsIHRoZW4KKwl5b3UgbmVlZCB0byB1c2UgdGhpcyBvcHRpb24gYW5kL29yIHRoZSBwcmV2aW91cyBvcHRpb24gdG8gZm9yY2UgdGhlCisJcHJvcGVyIHRlcm1pbmF0aW9uIHNldHRpbmdzIG9uIHlvdXIgY29udHJvbGxlci4gICBJZiB0aGlzIGhhcHBlbnMsCisJdGhlbiB5b3UgbmV4dCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB5b3VyIHNldHRpbmdzIHNob3VsZCBiZS4KKworCVRvIGZpbmQgdGhlIGNvcnJlY3Qgc2V0dGluZ3MsIHBvd2VyIHlvdXIgbWFjaGluZSBiYWNrIGRvd24sIGNvbm5lY3QKKwliYWNrIHVwIHRoZSBTQ1NJIGNhYmxlcywgYW5kIGJvb3QgYmFjayBpbnRvIHlvdXIgbWFjaGluZSBsaWtlIG5vcm1hbC4KKwlIb3dldmVyLCBib290IHdpdGggdGhlIGFpYzd4eHg9dmVyYm9zZToweDM5IG9wdGlvbi4gIFJlY29yZCB0aGUKKwlpbml0aWFsIERFVkNPTkZJRyB2YWx1ZXMgZm9yIGVhY2ggb2YgeW91ciBhaWM3eHh4IGNvbnRyb2xsZXJzIGFzCisJdGhleSBhcmUgbGlzdGVkLCBhbmQgYWxzbyByZWNvcmQgd2hhdCB0aGUgbWFjaGluZSBpcyBkZXRlY3RpbmcgYXMKKwl0aGUgcHJvcGVyIHRlcm1pbmF0aW9uIG9uIHlvdXIgY29udHJvbGxlcnMuICBOT1RFOiB0aGUgb3JkZXIgaW4KKwl3aGljaCB0aGUgaW5pdGlhbCBERVZDT05GSUcgdmFsdWVzIGFyZSBwcmludGVkIG91dCBpcyBub3QgZ2F1cmFudGVlZAorCXRvIGJlIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBTQ1NJIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkLiAgVGhlCisJYWJvdmUgb3B0aW9uIGFuZCB0aGlzIG9wdGlvbiBib3RoIHdvcmsgb24gdGhlIG9yZGVyIG9mIHRoZSBTQ1NJCisJY29udHJvbGxlcnMgYXMgdGhleSBhcmUgcmVnaXN0ZXJlZCwgc28gbWFrZSBzdXJlIHlvdSBtYXRjaCB0aGUgcmlnaHQKKwlERVZDT05GSUcgdmFsdWVzIHdpdGggdGhlIHJpZ2h0IGNvbnRyb2xsZXJzIGlmIHlvdSBoYXZlIG1vcmUgdGhhbgorCW9uZSBhaWM3eHh4IGNvbnRyb2xsZXIuCisKKwlPbmNlIHlvdSBoYXZlIHRoZSBkZXRlY3RlZCB0ZXJtaW5hdGlvbiBzZXR0aW5ncyBhbmQgdGhlIGluaXRpYWwKKwlERVZDT05GSUcgdmFsdWVzIGZvciBlYWNoIGNvbnRyb2xsZXIsIHRoZW4gZmlndXJlIG91dCB3aGF0IHRoZQorCXRlcm1pbmF0aW9uIG9uIGVhY2ggb2YgdGhlIGNvbnRyb2xsZXJzICpzaG91bGQqIGJlLiAgSG9wZWZ1bGx5LCB0aGF0CisJcGFydCBpcyBjb3JyZWN0LCBidXQgaXQgY291bGQgcG9zc2libHkgYmUgd3JvbmcgaWYgdGhlcmUgaXMKKwlib2d1cyBjYWJsZSBkZXRlY3Rpb24gbG9naWMgb24geW91ciBjb250cm9sbGVyIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorCUlmIGFsbCB0aGUgY29udHJvbGxlcnMgaGF2ZSB0aGUgY29ycmVjdCB0ZXJtaW5hdGlvbiBzZXR0aW5ncywgdGhlbgorCWRvbid0IHNldCB0aGUgYWljN3h4eD1vdmVycmlkZV90ZXJtIHZhcmlhYmxlIGF0IGFsbCwgbGVhdmUgaXQgYWxvbmUuCisJTmV4dCwgb24gYW55IGNvbnRyb2xsZXJzIHRoYXQgZ28gaW50byBhbiBpbmZpbml0ZSByZXNldCBsb29wIHdoZW4KKwl5b3UgdW5wbHVnIGFsbCB0aGUgU0NTSSBjYWJsZXMsIGdldCB0aGUgc3RhcnRpbmcgREVWQ09ORklHIHZhbHVlLgorCUlmIHRoZSBpbml0aWFsIERFVkNPTkZJRyB2YWx1ZSBpcyBkaXZpc2libGUgYnkgMiwgdGhlbiB0aGUgY29ycmVjdAorCXNldHRpbmcgZm9yIHRoYXQgY29udHJvbGxlciBpcyAwLiAgSWYgaXQncyBhbiBvZGQgbnVtYmVyLCB0aGVuCisJdGhlIGNvcnJlY3Qgc2V0dGluZyBmb3IgdGhhdCBjb250cm9sbGVyIGlzIDEuICBGb3IgYW55IG90aGVyCisJY29udHJvbGxlcnMgdGhhdCBkaWRuJ3QgaGF2ZSBhbiBpbmZpbml0ZSByZXNldCBwcm9ibGVtLCB0aGVuIHJldmVyc2UKKwl0aGUgYWJvdmUgb3B0aW9ucy4gIElmIERFVkNPTkZJRyB3YXMgZXZlbiwgdGhlbiB0aGUgY29ycmVjdCBzZXR0aW5nCisJaXMgMSwgaWYgbm90IHRoZW4gdGhlIGNvcnJlY3Qgc2V0dGluZyBpcyAwLgorCisJTm93IHRoYXQgeW91IGtub3cgd2hhdCB0aGUgY29ycmVjdCBzZXR0aW5nIHdhcyBmb3IgZWFjaCBjb250cm9sbGVyLAorCXdlIG5lZWQgdG8gZW5jb2RlIHRoYXQgaW50byB0aGUgYWljN3h4eD1zdHB3bGV2OjB4Li4uIHZhcmlhYmxlLgorCVRoaXMgdmFyaWFibGUgaXMgYSBiaXQgZmllbGQgZW5jb2RlZCB2YXJpYWJsZS4gIEJpdCAwIGlzIGZvciB0aGUgZmlyc3QKKwlhaWM3eHh4IGNvbnRyb2xsZXIsIGJpdCAxIGZvciB0aGUgbmV4dCwgZXRjLiAgUHV0IGFsbCB0aGVzZSBiaXRzCisJdG9nZXRoZXIgYW5kIHlvdSBnZXQgYSBudW1iZXIuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHRoaXJkIGFpYzd4eHgKKwluZWVkZWQgYSAxLCBidXQgdGhlIHNlY29uZCBhbmQgZmlyc3QgYm90aCBuZWVkZWQgYSAwLCB0aGVuIHRoZSBiaXRzCisJd291bGQgYmUgMTAwIGluIGJpbmFyeS4gIFRoaXMgdGhlbiB0cmFuc2xhdGVzIHRvIDB4MDQuICBZb3Ugd291bGQKKwl0aGVyZWZvcmUgc2V0IGFpYzd4eHg9c3Rwd2xldjoweDA0LiAgVGhpcyBpcyBmYWlybHkgc3RhbmRhcmQgYmluYXJ5CisJdG8gaGV4YWRlY2ltYWwgY29udmVyc2lvbnMgaGVyZS4gIElmIHlvdSBhcmVuJ3QgdXAgdG8gc3BlZWQgb24gdGhlCisJYmluYXJ5LT5oZXggY29udmVyc2lvbiB0aGVuIHNlbmQgYW4gZW1haWwgdG8gdGhlIGFpYzd4eHggbWFpbGluZworCWxpc3QgYW5kIHNvbWVvbmUgY2FuIGhlbHAgeW91IG91dC4KKworICAgICJhaWM3eHh4PXRhZ19pbmZvOnt7OCw4Li59LHs4LDguLn0sLi59IiAtIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZQorICAgICAgICBvciBlbmFibGUgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcgKFRDUSkgb24gc3BlY2lmaWMgZGV2aWNlcy4gIEFzIG9mCisJZHJpdmVyIHZlcnNpb24gNS4xLjExLCBUQ1EgaXMgbm93IGVpdGhlciBvbiBvciBvZmYgYnkgZGVmYXVsdAorCWFjY29yZGluZyB0byB0aGUgc2V0dGluZyB5b3UgY2hvb3NlIGR1cmluZyB0aGUgbWFrZSBjb25maWcgcHJvY2Vzcy4KKwlJbiBvcmRlciB0byBlbi9kaXNhYmxlIFRDUSBmb3IgY2VydGlhbiBkZXZpY2VzIGF0IGJvb3QgdGltZSwgYSB1c2VyCisJbWF5IHVzZSB0aGlzIGJvb3QgcGFyYW0uICBUaGUgZHJpdmVyIHdpbGwgdGhlbiBwYXJzZSB0aGlzIG1lc3NhZ2Ugb3V0CisgICAgICAgIGFuZCBlbi9kaXNhYmxlIHRoZSBzcGVjaWZpYyBkZXZpY2UgZW50cmllcyB0aGF0IGFyZSBwcmVzZW50IGJhc2VkIHVwb24KKyAgICAgICAgdGhlIHZhbHVlIGdpdmVuLiAgVGhlIHBhcmFtIGxpbmUgaXMgcGFyc2VkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgorCisgICAgICAgICAgeyAtIGZpcnN0IGluc3RhbmNlIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgdGhpcyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICAgICAgICAgIHNlY29uZCBpbnN0YW5jZSBpcyB0aGUgc3RhcnQgb2YgZW50cmllcyBmb3IgYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgIGRldmljZSBlbnRyeQorICAgICAgICAgIH0gLSBlbmQgdGhlIGVudHJpZXMgZm9yIGEgcGFydGljdWxhciBob3N0IGFkYXB0ZXIsIG9yIGVuZCB0aGUgZW50aXJlCisgICAgICAgICAgICAgIHNldCBvZiBwYXJhbWV0ZXIgZW50cmllcworICAgICAgICAgICwgLSBtb3ZlIHRvIG5leHQgZW50cnkuICBJbnNpZGUgb2YgYSBzZXQgb2YgZGV2aWNlIGVudHJpZXMsIHRoaXMKKyAgICAgICAgICAgICAgbW92ZXMgdXMgdG8gdGhlIG5leHQgZGV2aWNlIG9uIHRoZSBsaXN0LiAgT3V0c2lkZSBvZiBkZXZpY2UKKyAgICAgICAgICAgICAgZW50cmllcywgdGhpcyBtb3ZlcyB1cyB0byB0aGUgbmV4dCBob3N0IGFkYXB0ZXIKKyAgICAgICAgICAuIC0gU2FtZSBlZmZlY3QgYXMgLCBidXQgaXMgc2FmZSB0byB1c2Ugd2l0aCBpbnNtb2QuCisgICAgICAgICAgeCAtIHRoZSBudW1iZXIgdG8gZW50ZXIgaW50byB0aGUgYXJyYXkgYXQgdGhpcyBwb3NpdGlvbi4gIAorICAgICAgICAgICAgICAwID0gRW5hYmxlIHRhZ2dlZCBxdWV1ZWluZyBvbiB0aGlzIGRldmljZSBhbmQgdXNlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICBxdWV1ZSBkZXB0aAorICAgICAgICAgICAgICAxLTI1NCA9IEVuYWJsZSB0YWdnZWQgcXVldWVpbmcgb24gdGhpcyBkZXZpY2UgYW5kIHVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGFzIHRoZSBxdWV1ZSBkZXB0aAorICAgICAgICAgICAgICAyNTUgPSBEaXNhYmxlIHRhZ2dlZCBxdWV1ZWluZyBvbiB0aGlzIGRldmljZS4KKyAgICAgICAgICAgICAgTm90ZTogYW55dGhpbmcgYWJvdmUgMzIgZm9yIGFuIGFjdHVhbCBxdWV1ZSBkZXB0aCBpcyB3YXN0ZWZ1bAorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IHJlY29tbWVuZGVkLgorCisgICAgICAgIEEgZmV3IGV4YW1wbGVzIG9mIGhvdyB0aGlzIGNhbiBiZSB1c2VkOgorCisgICAgICAgIHRhZ19pbmZvOnt7OCwxMiwsMCwsMjU1LDR9fQorICAgICAgICAgIFRoaXMgbGluZSB3aWxsIG9ubHkgZWZmZWN0IHRoZSBmaXJzdCBhaWM3eHh4IGNhcmQgcmVnaXN0ZXJlZC4gIEl0CisgICAgICAgICAgd2lsbCBzZXQgc2NzaSBpZCAwIHRvIGEgcXVldWUgZGVwdGggb2YgOCwgaWQgMSB0byAxMiwgbGVhdmUgaWQgMgorICAgICAgICAgIGF0IHRoZSBkZWZhdWx0LCBzZXQgaWQgMyB0byB0YWdnZWQgcXVldWVpbmcgZW5hYmxlZCBhbmQgdXNlIHRoZQorICAgICAgICAgIGRlZmF1bHQgcXVldWUgZGVwdGgsIGlkIDQgZGVmYXVsdCwgaWQgNSBkaXNhYmxlZCwgYW5kIGlkIDYgdG8gNC4KKyAgICAgICAgICBBbnkgbm90IHNwZWNpZmllZCBlbnRyaWVzIHN0YXkgYXQgdGhlIGRlZmF1bHQgdmFsdWUsIHJlcGVhdGVkCisgICAgICAgICAgY29tbWFzIHdpdGggbm8gdmFsdWUgc3BlY2lmaWVkIHdpbGwgc2ltcGx5IGluY3JlbWVudCB0byB0aGUgbmV4dCBpZAorICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgYW55dGhpbmcgZm9yIHRoZSBtaXNzaW5nIHZhbHVlcy4KKworICAgICAgICB0YWdfaW5mbzp7LCwseywsLDI1NX19CisgICAgICAgICAgRmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGFkYXB0ZXJzIGF0IGRlZmF1bHQgdmFsdWVzLiAgRm91cnRoCisgICAgICAgICAgYWRhcHRlciwgaWQgMyBpcyBkaXNhYmxlZC4gIE5vdGljZSB0aGF0IGxlYWRpbmcgY29tbWFzIHNpbXBseQorCSAgaW5jcmVtZW50IHdoYXQgdGhlIGZpcnN0IG51bWJlciBlZmZlY3RzLCBhbmQgdGhlcmUgYXJlIG5vIG5lZWQKKwkgIGZvciB0cmFpbGluZyBjb21tYXMuICBXaGVuIHlvdSBjbG9zZSBvdXQgYW4gYWRhcHRlciwgb3IgdGhlCisJICBlbnRpcmUgZW50cnksIGFueXRoaW5nIG5vdCBleHBsaWNpdGx5IHNldCBzdGF5cyBhdCB0aGUgZGVmYXVsdAorCSAgdmFsdWUuCisKKyAgICAgICAgQSBmaW5hbCBub3RlIG9uIHRoaXMgb3B0aW9uLiAgVGhlIHNjYW5uZXIgSSB1c2VkIGZvciB0aGlzIGlzbid0CisgICAgICAgIHBlcmZlY3Qgb3IgaGlnaGx5IHJvYnVzdC4gIElmIHlvdSBtZXNzIHRoZSBsaW5lIHVwLCB0aGUgd29yc3QgdGhhdAorICAgICAgICBzaG91bGQgaGFwcGVuIGlzIHRoYXQgdGhlIGxpbmUgd2lsbCBnZXQgaWdub3JlZC4gIElmIHlvdSBkb24ndAorICAgICAgICBjbG9zZSBvdXQgdGhlIGVudGlyZSBlbnRyeSB3aXRoIHRoZSBmaW5hbCBicmFja2V0LCB0aGVuIGFueSBvdGhlcgorICAgICAgICBhaWM3eHh4IG9wdGlvbnMgYWZ0ZXIgdGhpcyB3aWxsIGdldCBpZ25vcmVkLiAgU28sIGluIGdlbmVyYWwsIGJlCisgICAgICAgIHN1cmUgb2Ygd2hhdCB5b3UgYXJlIGVudGVyaW5nLCBhbmQgYWZ0ZXIgeW91IGhhdmUgaXQgcmlnaHQsIGp1c3QKKyAgICAgICAgYWRkIGl0IHRvIHRoZSBsaWxvLmNvbmYgZmlsZSBzbyB0aGVyZSB3b24ndCBiZSBhbnkgbWlzdGFrZXMuICBBcworICAgICAgICBhIG1lYW5zIG9mIGNoZWNraW5nIHRoaXMgcGFyc2VyLCB0aGUgZW50aXJlIHRhZ19pbmZvIGFycmF5IGZvcgorICAgICAgICBlYWNoIGNhcmQgaXMgbm93IHByaW50ZWQgb3V0IGluIHRoZSAvcHJvYy9zY3NpL2FpYzd4eHgveCBmaWxlLiAgWW91CisgICAgICAgIGNhbiB1c2UgdGhhdCB0byB2ZXJpZnkgdGhhdCB5b3VyIG9wdGlvbnMgd2VyZSBwYXJzZWQgY29ycmVjdGx5LiAKKyAgICAgICAgCisgICAgQm9vdCBjb21tYW5kIGxpbmUgb3B0aW9ucyBtYXkgYmUgY29tYmluZWQgdG8gZm9ybSB0aGUgcHJvcGVyIHNldCBvZiBvcHRpb25zCisgICAgYSB1c2VyIG1pZ2h0IG5lZWQuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBpcyB2YWxpZDoKKyAgICAKKyAgICBhaWM3eHh4PXZlcmJvc2UsZXh0ZW5kZWQsaXJxX3RyaWdnZXI6MQorICAgIAorICAgIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgaW5kaXZpZHVhbCBvcHRpb25zIGJlIHNlcGFyYXRlZCBieSBhIGNvbW1hIG9yCisgICAgYSBwZXJpb2Qgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgCisgIE1vZHVsZSBMb2FkaW5nIGNvbW1hbmQgb3B0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXaGVuIGxvYWRpbmcgdGhlIGFpYzd4eHggZHJpdmVyIGFzIGEgbW9kdWxlLCB0aGUgZXhhY3Qgc2FtZSBvcHRpb25zIGFyZQorICAgIGF2YWlsYWJsZSB0byB0aGUgdXNlci4gIEhvd2V2ZXIsIHRoZSBzeW50YXggdG8gc3BlY2lmeSB0aGUgb3B0aW9ucyBjaGFuZ2VzCisgICAgc2xpZ2h0bHkuICBGb3IgaW5zbW9kLCB5b3UgbmVlZCB0byB3cmFwIHRoZSBhaWM3eHh4PSBhcmd1bWVudCBpbiBxdW90ZXMKKyAgICBhbmQgcmVwbGFjZSBhbGwgJywnIHdpdGggJy4nLiAgU28sIGZvciBleGFtcGxlLCBhIHZhbGlkIGluc21vZCBsaW5lCisgICAgd291bGQgYmU6CisKKyAgICBpbnNtb2QgYWljN3h4eCBhaWM3eHh4PSd2ZXJib3NlLmlycV90cmlnZ2VyOjEuZXh0ZW5kZWQnCisKKyAgICBUaGlzIGxpbmUgc2hvdWxkIHJlc3VsdCBpbiB0aGUgKmV4YWN0KiBzYW1lIGJlaGF2aW91ciBhcyBpZiB5b3UgdHlwZWQKKyAgICBpdCBpbiBhdCB0aGUgbGlsbyBwcm9tcHQgYW5kIHRoZSBkcml2ZXIgd2FzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbAorICAgIGluc3RlYWQgb2YgYmVpbmcgYSBtb2R1bGUuICBUaGUgcmVhc29uIGZvciB0aGUgc2luZ2xlIHF1b3RlIGlzIHNvIHRoYXQKKyAgICB0aGUgc2hlbGwgd29uJ3QgdHJ5IHRvIGludGVycHJldCBhbnl0aGluZyBpbiB0aGUgbGluZSwgc3VjaCBhcyB7LiAKKyAgICBJbnNtb2QgYXNzdW1lcyBhbnkgb3B0aW9ucyBzdGFydGluZyB3aXRoIGEgbGV0dGVyIGluc3RlYWQgb2YgYSBudW1iZXIKKyAgICBpcyBhIGNoYXJhY3RlciBzdHJpbmcgKHdoaWNoIGlzIHdoYXQgd2Ugd2FudCkgYW5kIGJ5IHN3aXRjaGluZyBhbGwgb2YKKyAgICB0aGUgY29tbWFzIHRvIHBlcmlvZHMsIGluc21vZCB3b24ndCBpbnRlcnByZXQgdGhpcyBhcyBtb3JlIHRoYW4gb25lCisgICAgc3RyaW5nIGFuZCB3cml0ZSBqdW5rIGludG8gb3VyIGJpbmFyeSBpbWFnZS4gIEkgY29uc2lkZXIgaXQgYSBidWcgaW4KKyAgICB0aGUgaW5zbW9kIHByb2dyYW0gdGhhdCBldmVuIGlmIHlvdSB3cmFwIHlvdXIgc3RyaW5nIGluIHF1b3RlcyAocXVvdGVzCisgICAgdGhhdCBwYXNzIHRoZSBzaGVsbCBtaW5kIHlvdSBhbmQgdGhhdCBpbnNtb2Qgc2VlcykgaXQgc3RpbGwgdHJlYXRlcworICAgIGEgY29tbWEgaW5zaWRlIG9mIHRob3NlIHF1b3RlcyBhcyBzdGFydGluZyBhIG5ldyB2YXJpYWJsZSwgcmVzdWx0aW5nCisgICAgaW4gbWVtb3J5IHNjcmliYmxlcyBpZiB5b3UgZG9uJ3Qgc3dpdGNoIHRoZSBjb21tYXMgdG8gcGVyaW9kcy4KKworCisgIEtlcm5lbCBDb21waWxlIG9wdGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVGhlIHZhcmlvdXMga2VybmVsIGNvbXBpbGUgdGltZSBvcHRpb25zIGZvciB0aGlzIGRyaXZlciBhcmUgbm93IGZhaXJseQorICAgIHdlbGwgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwLiAgSW4gb3JkZXIgdG8KKyAgICBzZWUgdGhpcyBkb2N1bWVudGF0aW9uLCB5b3UgbmVlZCB0byB1c2Ugb25lIG9mIHRoZSBhZHZhbmNlZCBjb25maWd1cmF0aW9uCisgICAgcHJvZ3JhbXMgKG1lbnVjb25maWcgYW5kIHhjb25maWcpLiAgSWYgeW91IGFyZSB1c2luZyB0aGUgIm1ha2UgbWVudWNvbmZpZyIKKyAgICBtZXRob2Qgb2YgY29uZmlndXJpbmcgeW91ciBrZXJuZWwsIHRoZW4geW91IHdvdWxkIHNpbXBseSBoaWdobGlnaHQgdGhlCisgICAgb3B0aW9uIGluIHF1ZXN0aW9uIGFuZCBoaXQgdGhlID8ga2V5LiAgSWYgeW91IGFyZSB1c2luZyB0aGUgIm1ha2UgeGNvbmZpZyIKKyAgICBtZXRob2Qgb2YgY29uZmlndXJpbmcgeW91ciBrZXJuZWwsIHRoZW4gc2ltcGx5IGNsaWNrIG9uIHRoZSBoZWxwIGJ1dHRvbgorICAgIG5leHQgdG8gdGhlIG9wdGlvbiB5b3UgaGF2ZSBxdWVzdGlvbnMgYWJvdXQuICBUaGUgaGVscCBpbmZvcm1hdGlvbiBmcm9tCisgICAgdGhlIENvbmZpZ3VyZS5oZWxwIGZpbGUgd2lsbCB0aGVuIGdldCBhdXRvbWF0aWNhbGx5IGRpc3BsYXllZC4KKworICAvcHJvYyBzdXBwb3J0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFRoZSAvcHJvYyBzdXBwb3J0IGZvciB0aGUgQUlDN3h4eCBjYW4gYmUgZm91bmQgaW4gdGhlIC9wcm9jL3Njc2kvYWljN3h4eC8KKyAgICBkaXJlY3RvcnkuIFRoYXQgZGlyZWN0b3J5IGNvbnRhaW5zIGEgZmlsZSBmb3IgZWFjaCBTQ1NJIGNvbnRyb2xsZXIgaW4KKyAgICB0aGUgc3lzdGVtLiBFYWNoIGZpbGUgcHJlc2VudHMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgdHJhbnNmZXIKKyAgICBzdGF0aXN0aWNzIChlbmFibGVkIHdpdGggI2RlZmluZSBpbiBhaWM3eHh4LmMpIGZvciBlYWNoIGNvbnRyb2xsZXIuCisKKyAgICBUaGFua3MgdG8gTWljaGFlbCBOZXVmZmVyIGZvciBoaXMgdXBwZXItbGV2ZWwgU0NTSSBoZWxwLCBhbmQKKyAgICBNYXR0aGV3IEphY29iIGZvciBzdGF0aXN0aWNzIHN1cHBvcnQuCisKKyAgRGVidWdnaW5nIHRoZSBkcml2ZXIKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU2hvdWxkIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIGFuZCB3b3VsZCBsaWtlIHNvbWUgaGVscCBpbgorICAgIGdldHRpbmcgdGhlbSBzb2x2ZWQsIHRoZXJlIGFyZSBhIGNvdXBsZSBkZWJ1Z2dpbmcgaXRlbXMgYnVpbHQgaW50bworICAgIHRoZSBkcml2ZXIgdG8gZmFjaWxpdGF0ZSBnZXR0aW5nIHRoZSBuZWVkZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3lzdGVtLgorICAgIEluIGdlbmVyYWwsIEkgbmVlZCBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLCB3aXRoIGFzIG1hbnkKKyAgICBsb2dzIGFzIHBvc3NpYmxlIGNvbmNlcm5pbmcgd2hhdCBoYXBwZW5zLiAgVG8gaGVscCB3aXRoIHRoaXMsIHRoZXJlIGlzCisgICAgYSBjb21tYW5kIG9wdGlvbiBhaWM3eHh4PXBhbmljX29uX2Fib3J0LiAgVGhpcyBvcHRpb24sIHdoZW4gc2V0LCBmb3JjZXMKKyAgICB0aGUgZHJpdmVyIHRvIHBhbmljIHRoZSBrZXJuZWwgb24gdGhlIGZpcnN0IFNDU0kgYWJvcnQgaXNzdWVkIGJ5IHRoZQorICAgIG1pZCBsZXZlbCBTQ1NJIGNvZGUuICBJZiB5b3VyIHN5c3RlbSBpcyBnb2luZyB0byByZXNldCBsb29wcyBhbmQgeW91CisgICAgY2FuJ3QgcmVhZCB0aGUgc2NyZWVuLCB0aGVuIHRoaXMgaXMgd2hhdCB5b3UgbmVlZC4gIE5vdCBvbmx5IHdpbGwgaXQKKyAgICBzdG9wIHRoZSBzeXN0ZW0sIGJ1dCBpdCBhbHNvIHByaW50cyBvdXQgYSBsYXJnZSBhbW91bnQgb2Ygc3RhdGUKKyAgICBpbmZvcm1hdGlvbiBpbiB0aGUgcHJvY2Vzcy4gIFNlY29uZCwgaWYgeW91IHNwZWNpZnkgdGhlIG9wdGlvbgorICAgICJhaWM3eHh4PXZlcmJvc2U6MHgxZmZmZiIsIHRoZSBzeXN0ZW0gd2lsbCBwcmludCBvdXQgKlNPT09PKiBtdWNoCisgICAgaW5mb3JtYXRpb24gYXMgaXQgcnVucyB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIHNlZSBhbnl0aGluZy4KKyAgICBIb3dldmVyLCB0aGlzIGNhbiBhY3R1YWxseSBiZSB2ZXJ5IHVzZWZ1bCBpZiB5b3VyIG1hY2hpbmUgc2ltcGx5CisgICAgbG9ja3MgdXAgd2hlbiB0cnlpbmcgdG8gYm9vdCwgc2luY2UgaXQgd2lsbCBwaW4tcG9pbnQgd2hhdCB3YXMgbGFzdAorICAgIGhhcHBlbmluZyAoaW4gcmVnYXJkcyB0byB0aGUgYWljN3h4eCBkcml2ZXIpIGltbWVkaWF0ZWx5IHByaW9yIHRvCisgICAgdGhlIGxvY2t1cC4gIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGlmIHlvdXIgbWFjaGluZSBzaW1wbHkgY2FuCisgICAgbm90IGJvb3QgdXAgc3VjY2Vzc2Z1bGx5LiAgSWYgeW91IGNhbiBnZXQgeW91ciBtYWNoaW5lIHRvIHJ1biwgdGhlbgorICAgIHRoaXMgd2lsbCBwcm9kdWNlIGZhciB0b28gbXVjaCBpbmZvcm1hdGlvbi4KKworICBGVFAgc2l0ZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZnRwOi8vZnRwLnJlZGhhdC5jb20vcHViL2FpYy8KKyAgICAgIC0gT3V0IG9mIGRhdGUuICBJIHVzZWQgdG8ga2VlcCBzdHVmZiBoZXJlLCBidXQgdG9vIG1hbnkgcGVvcGxlCisgICAgICAgIGNvbXBsYWluZWQgYWJvdXQgaGF2aW5nIGEgaGFyZCB0aW1lIGdldHRpbmcgaW50byBSZWQgSGF0J3MgZnRwCisJc2VydmVyLiAgU28gdXNlIHRoZSB3ZWIgc2l0ZSBiZWxvdyBpbnN0ZWFkLgorICAgIGZ0cDovL2Z0cC5wY25ldC5jb20vdXNlcnMvZWlzY2hlbi9MaW51eC8KKyAgICAgIC0gRGFuIEVpc2NoZW4ncyBkcml2ZXIgZGlzdHJpYnV0aW9uIGFyZWEKKyAgICBmdHA6Ly9la2YyLnZzYi5jei9wdWIvbGludXgva2VybmVsL2FpYzd4eHgvZnRwLnRlbGVwb3J0LmNvbS8KKyAgICAgIC0gRXVyb3BlYW4gTGludXggbWlycm9yIG9mIFRlbGVwb3J0IHNpdGUKKworICBXZWIgc2l0ZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL2RsZWRmb3JkLworICAgICAgLSBNeSB3ZWIgc2l0ZSwgYWxzbyB0aGUgcHJpbWFyeSBhaWM3eHh4IHNpdGUgd2l0aCBzZXZlcmFsIHJlbGF0ZWQKKyAgICAgICAgcGFnZXMuCisKK0RlYW4gVy4gR2VobmVydAorZGVhbmdAdGVsZXBvcnQuY29tCisKKyRSZXZpc2lvbjogMy4wICQKKworTW9kaWZpZWQgYnkgRG91ZyBMZWRmb3JkIDE5OTgtMjAwMAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvY3BxZmMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2NwcWZjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDMzZTYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2NwcWZjLnR4dApAQCAtMCwwICsxLDI3MiBAQAorTm90ZXMgZm9yIENQUUZDVFMgZHJpdmVyIGZvciBDb21wYXEgVGFjaHlvbiBUUworRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLCBQQ0kgNjQtYml0LCA2Nk1IegorZm9yIExpbnV4IChSSCA2LjEsIDYuMiBrZXJuZWwgMi4yLjEyLTMyLCAyLjIuMTQtNSkKK1NNUCB0ZXN0ZWQKK1Rlc3RlZCBpbiBzaW5nbGUgYW5kIGR1YWwgSEJBIGNvbmZpZ3VyYXRpb24sIDMyIGFuZCA2NGJpdCBidXNzZXMsCiszMyBhbmQgNjZNSHouICBPbmx5IHN1cHBvcnRzIEZDLUFMLgorU0VTVCBzaXplIDUxMiBFeGNoYW5nZXMgKHNpbXVsdGFuZW91cyBJL09zKSBsaW1pdGVkIGJ5IG1vZHVsZSBrbWFsbG9jKCkgCisJbWF4IG9mIDEyOGsgYnl0ZXMgY29udGlndW91cy4KKworVmVyIDIuNS40ICBPY3QgMDMsIDIwMDIKKyAgICogZml4ZWQgbWVtY3B5IG9mIHNlbnNlIGJ1ZmZlciBpbiBpb2N0bCB0byBjb3B5IHRoZSBzbWFsbGVyIGRlZmluZWQgc2l6ZQorVmVyIDIuNS4zICBBdWcgMDEsIDIwMDIKKyAgICogZml4IHRoZSBwYXNzdGhydSBpb2N0bCB0byBoYW5kbGUgdGhlIFNjc2lfQ21uZC0+cmVxdWVzdCBiZWluZyBhIHBvaW50ZXIKK1ZlciAyLjUuMSAgSnVsIDMwLCAyMDAyCisgICAqIGZpeCBpb2N0bCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzcGVjaWZpZWQgTFVOLgorVmVyIDIuNS4wICBOb3YgMjksIDIwMDEKKyAgICogZWxpbWluYXRlZCBpb19yZXF1ZXN0X2xvY2suICBUaGlzIGNoYW5nZSBtYWtlcyB0aGUgZHJpdmVyIHNwZWNpZmljCisgICAgIHRvIHRoZSAyLjUueCBrZXJuZWxzLgorICAgKiBzaWxlbmNlZCBleGNlc3NpdmVseSBub2lzeSBwcmludGtzLgorCitWZXIgMi4xLjIgIEp1bHkgMjMsIDIwMDIKKyAgICogaW5pdGlhbGl6ZSBEdW1DbW5kLT5sdW4gaW4gY3BxZmNUU19pb2N0bCAodXNlZCBpbiBmY0ZpbmRMb2dnZWRJblBvcnRzIGFzIExVTiBpbmRleCkKKworVmVyIDIuMS4xICBPY3QgMTgsIDIwMDEKKyAgICogcmVpbml0aWFsaXplIENtbmQtPlNDcC5zZW50X2NvbW1hbmQgKHVzZWQgdG8gaWRlbnRpZnkgY29tbWFuZHMgYXMKKyAgICAgcGFzc3RocnVzKSBvbiBjYWxsaW5nIHNjc2lfZG9uZSwgc2luY2UgdGhlIHNjc2kgbWlkIGxheWVyIGRvZXMgbm90CisgICAgIHVzZSAob3IgcmVpbml0aWFsaXplKSB0aGlzIGZpZWxkIHRvIHByZXZlbnQgc3Vic2VxdWVudCBjb21hbmRzIGZyb20KKyAgICAgaGF2aW5nIGl0IHNldCBpbmNvcnJlY3RseS4gCisKK1ZlciAyLjEuMCAgQXVnIDI3LCAyMDAxCisgICAqIFJldmlzZSBkcml2ZXIgdG8gdXNlIG5ldyBrZXJuZWwgMi40LnggUENJIERNQSBBUEksIGluc3RlYWQgb2YgCisgICAgIHZpcnRfdG9fYnVzKCkuICAoZW5hYmxlcyBkcml2ZXIgdG8gd29yayB3LyBpYTY0IHN5c3RlbXMgd2l0aCA+MkdiIFJBTS4pCisgICAgIFJld29yayBtYWluIHNjYXR0ZXItZ2F0aGVyIGNvZGUgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIFNHIGVsZW1lbnQKKyAgICAgbGVuZ3RocyBhcmUgbGFyZ2VyIHRoYW4gMHg3RkZGRiBieXRlcyBhbmQgdXNlIGFzIG1hbnkgc2NhdHRlciAKKyAgICAgZ2F0aGVyIHBhZ2VzIGFzIG5lY2Vzc2FyeS4gKFN0ZXZlIENhbWVyb24pCisgICAqIE1ha2VmaWxlIGNoYW5nZXMgdG8gYnJpbmcgY3BxZmMgaW50byBsaW5lIHcvIHJlc3Qgb2YgU0NTSSBkcml2ZXJzCisgICAgICh0aGFua3MgdG8gS2VpdGggT3dlbnMpCisKK1ZlciAyLjAuNSAgQXVnIDA2LCAyMDAxCisgICAqIFJlamVjdCBub24tZXhpc3RlbnQgbHVucyBpbiB0aGUgZHJpdmVyIHJhdGhlciB0aGFuIGxldHRpbmcgdGhlIAorICAgICBoYXJkd2FyZSBkbyBpdC4gIChzb21lIEhXIGJlaGF2ZXMgZGlmZmVyZW50bHkgdGhhbiBvdGhlcnMgaW4gdGhpcyBhcmVhLikKKyAgICogQ2hhbmdlZCBNYWtlZmlsZSB0byByZWx5IG9uICJtYWtlIGRlcCIgaW5zdGVhZCBvZiBleHBsaWNpdCBkZXBlbmRlbmNpZXMKKyAgICogaWZkZWYnZWQgb3V0IGZpYnJlIGNoYW5uZWwgYW5hbHl6ZXIgdHJpZ2dlcmluZyBkZWJ1ZyBjb2RlCisgICAqIGZpeGVkIGEgamlmZmllcyB3cmFwcGluZyBpc3N1ZQorCitWZXIgMi4wLjQgIEF1ZyAwMSwgMjAwMQorICAgKiBJbmNvcnBvcmF0ZWQgZml4IGZvciB0YXJnZXQgZGV2aWNlIHJlc2V0IGZyb20gU3RlZWxleWUKKyAgICogRml4ZWQgcGFzc3Rocm91Z2ggaW9jdGwgc28gaXQgZG9lc24ndCBoYW5nLgorICAgKiBGaXhlZCBoYW5nIGluIGxhdW5jaF9GQ3dvcmtlcl90aHJlYWQoKSB0aGF0IG9jY3VycmVkIG9uIHNvbWUgbWFjaGluZXMuCisgICAqIEF2b2lkIHByb2JsZW0gd2hlbiBudW1iZXIgb2Ygdm9sdW1lcyBpbiBhIHNpbmdsZSBjYWJpbmV0ID4gOAorCitWZXIgMi4wLjIgIEp1bHkgMjMsIDIwMDEKKyAgIENoYW5nZWQgdGhlIHNlbWlwaG9yZSBjaGFuZ2VzIHNvIHRoZSBkcml2ZXIgd291bGQgY29tcGlsZSBpbiAyLjQuNy4gCisgICBUaGlzIHZlcnNpb24gaXMgZm9yIDIuNC43IGFuZCBiZXlvbmQuIAorIAorVmVyIDIuMC4xICBNYXkgCTcsIDIwMDEKKyAgIE1lcmdlZCB2ZXJzaW9uIDEuMy42IGZpeGVzIGludG8gdmVyc2lvbiAyLjAuMC4gICAKKworVmVyIDIuMC4wICBNYXkgICA3LCAyMDAxCisgIEZpeGVkIHByb2JsZW0gc28gc3BpbmxvY2sgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gVU5MT0NLRUQuIAorICBGaXhlZCB1cGRhdGVkIGRyaXZlciBzbyBpdCBjb21waWxlcyBpbiB0aGUgMi40IHRyZWUuIAorIAorIFZlciAxLjMuNiAgRmViICAyNywgMjAwMQorICAgQWRkZWQgVGFyZ2V0X0RldmljZV9SZXNldCBmdW5jdGlvbiBmb3IgU0NTSSBlcnJvciBoYW5kbGluZworICAgRml4ZWQgcHJvYmxlbSB3aXRoIG5vdCByZXNldGluZyBhZGRyZXNzaW5nIG1vZGUgYWZ0ZXIgaW1wbGljaXQgbG9nb3V0CisgCisKK1ZlciAxLjMuNCAgU2VwICAgNywgMjAwMAorICBBZGRlZCBNb2RpbmZvIGluZm9ybWF0aW9uCisgIEZpeGVkIHByb2JsZW0gd2l0aCBzdGF0aWNhbGx5IGxpbmtpbmcgdGhlIGRyaXZlcgorCitWZXIgMS4zLjMsIEF1ZyAgMjMsIDIwMDAKKyAgRml4ZWQgZGV2aWNlL2Z1bmN0aW9uIG51bWJlciBpbiBpb2N0bAorCitWZXIgMS4zLjIsIEp1bHkgMjcsIDIwMDAKKyAgQWRkIGluY2x1ZGUgZm9yIEFscGhhIGNvbXBpbGUgb24gMi4yLjE0IGtlcm5lbCAoY3BxKmkyYy5jKQorICBDaGFuZ2UgbG9naWMgZm9yIGRpZmZlcmVudCBGQ1AtUlNQIHNlbnNlX2J1ZmZlciBsb2NhdGlvbiBmb3IgSFNHODAgdGFyZ2V0CisgIEFuZCBzZWFyY2ggZm9yIEFnaWxlbnQgVGFjaHlvbiBYTDIgSEJBcyAobm90IGZpbmlzaGVkISAtIGluIHRlc3QpCisKK1Rlc3RlZCB3aXRoIAorKHN0b3JhZ2UpOgorICAgICAgICAgICBDb21wYXEgUkEtNHgwMDAsIFJBSUQgZmlybXdhcmUgdmVyIDIuNDAgLSAyLjU0CisgICAgICAgICAgIFNlYWdhdGUgRkMgZHJpdmVzIG1vZGVsIFNUMzkxMDJGQywgcmV2IDAwMDYKKyAgICAgICAgICAgSGl0YWNoaSBESzMxQ0otNzJGQyByZXYgSjhBOAorICAgICAgICAgICBJQk0gRERZRi1UMTgzNTBSIHJldiBGNjBLCisgICAgICAgICAgIENvbXBhcSBGQy1TQ1NJIGJyaWRnZSB3LyBETFQgMzUvNzAgR2IgRExUICh0YXBlKQorKHNlcnZlcnMpOgorICAgICAgICAgICBDb21wYXEgUEwtMTg1MFIKKyAgICAgICAgICAgQ29tcGFxIFBMLTY1MDAgWGVvbiAoNDAwTUh6KQorCSAgIENvbXBhcSBQTC04NTAwICg1MDBNSHosIDY2TUh6LCA2NGJpdCBQQ0kpCisgICAgICAgICAgIENvbXBhcSBBbHBoYSBEUzIwIChSSCA2LjEpCisoaHVicyk6CisgICAgICAgICAgIFZpeGVsIFJhcHBvcnQgMTAwMCAoNy1wb3J0ICJkdW1iIikKKwkgICBHYWR6b294IEdpYnJhbHRlciAoMTItcG9ydCAiZHVtYiIpCisJICAgR2Fkem9veCBDYXBlbGxpeCAyMDAwLCAzMDAwIAorKHN3aXRjaGVzKToKKyAgICAgICAgICAgQnJvY2FkZSAyMDEwLCAyNDAwLCAyODAwLCByZXYgMi4wLjNhICgmIGxhdGVyKQorICAgICAgICAgICBHYWR6b294IDMyMTAgKEZhYnJpYyBibGFkZSBiZXRhKQorICAgICAgICAgICBWaXhlbCA3MTAwIChGYWJyaWMgYmV0YSBmaXJtYXJlIC0ga25vd24gaG90IHBsdWcgaXNzdWVzKQordXNpbmcgInFhX3Rlc3QiIChlc3AuIGlvX3Rlc3Qgc2NyaXB0KSBzdWl0ZSBtb2RpZmllZCBmcm9tIFVuaXggdGVzdHMuCisJCitJbnN0YWxsYXRpb246CittYWtlIG1lbnVjb25maWcKKyAgKHNlbGVjdCBTQ1NJIGxvdy1sZXZlbCwgQ29tcGFxIEZDIEhCQSkKK21ha2UgbW9kdWxlcworbWFrZSBtb2R1bGVzX2luc3RhbGwKKworZS5nLiBpbnNtb2QgLWYgY3BxZmMKKworRHVlIHRvIEZhYnJpYy9zd2l0Y2ggZGVsYXlzLCBkcml2ZXIgcmVxdWlyZXMgNCBzZWNvbmRzIAordG8gaW5pdGlhbGl6ZS4gIElmIGFkYXB0ZXJzIGFyZSBmb3VuZCwgdGhlcmUgd2lsbCBiZSBhIGVudHJpZXMgYXQKKy9wcm9jL3Njc2kvY3BxZmNUUy8qCisKK3NhbXBsZSBjb250ZW50cyBvZiBzdGFydHVwIG1lc3NhZ2VzCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioKKyBzY3NpX3JlZ2lzdGVyIGFsbG9jYXRpbmcgMzU5NiBieXRlcyBmb3IgQ1BRRkNIQkEKKyBpb3JlbWFwJ2QgTWVtYmFzZTogYzg4N2U2MDAKKyAgSEJBIFRhY2h5b24gUmV2SWQgMS4yCitBbGxvY2F0aW5nIDExOTgwOCBmb3IgNTc2IEV4Y2hhbmdlcyBAIGMwZGMwMDAwCitBbGxvY2F0aW5nIDExMjkwNCBmb3IgTGlua1EgQCBjMGMyMDAwMCAoNTc2IGVsZW1lbnRzKQorQWxsb2NhdGluZyAxMTA2MDAgZm9yIFRhY2hTRVNUIGZvciA1MTIgRXhjaGFuZ2VzCisgIGNwcWZjVFM6IHdyaXRpbmcgSU1RIEJBU0UgN0MwMDAwaCAgICBQSSA3QzQwMDBoCisgIGNwcWZjVFM6IFNFU1QgYzBlNDAwMDAodmlydCk6IFdyb3RlIGJhc2UgRTQwMDAwaCBAIGM4ODdlNzQwCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRThoIFdXTjogNTAwNTA3NjUwNjQyNDk5RCBTQ1NJIENoYW4vVHJndCAwLzAKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBFRmggV1dOOiA1MDAwMEUxMDAwMDBENUE2IFNDU0kgQ2hhbi9Ucmd0IDAvMQorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMEU0aCBXV046IDIxMDAwMDIwMzcwMDk3QkIgU0NTSSBDaGFuL1RyZ3QgMC8yCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRTJoIFdXTjogMjEwMDAwMjAzNzAwOTk0NiBTQ1NJIENoYW4vVHJndCAwLzMKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBFMWggV1dOOiAyMTAwMDAyMDM3MDA5OEZFIFNDU0kgQ2hhbi9Ucmd0IDAvNAorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMEUwaCBXV046IDIxMDAwMDIwMzcwMDk3QjIgU0NTSSBDaGFuL1RyZ3QgMC81CitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRENoIFdXTjogMjEwMDAwMjAzNzAwNkNDMSBTQ1NJIENoYW4vVHJndCAwLzYKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBEQWggV1dOOiAyMTAwMDAyMDM3MDA1OUY2IFNDU0kgQ2hhbi9Ucmd0IDAvNworY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMDBGaCBXV046IDUwMDgwNUYxRkFEQjBFMjAgU0NTSSBDaGFuL1RyZ3QgMC84CitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwMDhoIFdXTjogNTAwODA1RjFGQURCMEVCQSBTQ1NJIENoYW4vVHJndCAwLzkKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwNGggV1dOOiA1MDA4MDVGMUZBREIxRUI5IFNDU0kgQ2hhbi9Ucmd0IDAvMTAKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwMmggV1dOOiA1MDA4MDVGMUZBREIxQURFIFNDU0kgQ2hhbi9Ucmd0IDAvMTEKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwMWggV1dOOiA1MDA4MDVGMUZBREJBMkNBIFNDU0kgQ2hhbi9Ucmd0IDAvMTIKK3Njc2k0IDogQ29tcGFxIEZpYnJlQ2hhbm5lbCBIQkEgVGFjaHlvbiBUUyBIUEZDLTUxNjZBLzEuMjogV1dOIDUwMDUwOEIyMDAxOTNGNTAKKyBvbiBQQ0kgYnVzIDAgZGV2aWNlIDB4YTBmYyBpcnEgNSBJT2Jhc2VMIDB4MzQwMCwgTUVNQkFTRSAweGM2ZWY4NjAwCitQQ0kgYnVzIHdpZHRoIDMyIGJpdHMsIGJ1cyBzcGVlZCAzMyBNSHoKK0ZDUC1TQ1NJIERyaXZlciB2MS4zLjAKK0dCSUMgZGV0ZWN0ZWQ6IFNob3J0LXdhdmUuICBMUFNNIDBoIE1vbml0b3IKK3Njc2kgOiA1IGhvc3RzLgorICBWZW5kb3I6IElCTSAgICAgICBNb2RlbDogRERZRi1UMTgzNTBSICAgICAgUmV2OiBGNjBLCisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAzCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RiIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDAsIGx1biAwCisgIFZlbmRvcjogSElUQUNISSAgIE1vZGVsOiBESzMxQ0otNzJGQyAgICAgICBSZXY6IEo4QTgKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGMgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgMSwgbHVuIDAKKyAgVmVuZG9yOiBTRUFHQVRFICAgTW9kZWw6IFNUMzkxMDJGQyAgICAgICAgIFJldjogMDAwNgorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkZCBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAyLCBsdW4gMAorICBWZW5kb3I6IFNFQUdBVEUgICBNb2RlbDogU1QzOTEwMkZDICAgICAgICAgUmV2OiAwMDA2CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RlIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDMsIGx1biAwCisgIFZlbmRvcjogU0VBR0FURSAgIE1vZGVsOiBTVDM5MTAyRkMgICAgICAgICBSZXY6IDAwMDYKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGYgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgNCwgbHVuIDAKKyAgVmVuZG9yOiBTRUFHQVRFICAgTW9kZWw6IFNUMzkxMDJGQyAgICAgICAgIFJldjogMDAwNgorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkZyBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA1LCBsdW4gMAorICBWZW5kb3I6IFNFQUdBVEUgICBNb2RlbDogU1QzOTEwMkZDICAgICAgICAgUmV2OiAwMDA2CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RoIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDYsIGx1biAwCisgIFZlbmRvcjogU0VBR0FURSAgIE1vZGVsOiBTVDM5MTAyRkMgICAgICAgICBSZXY6IDAwMDYKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGkgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgNywgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi40OAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkaiBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA4LCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjQ4CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RrIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDgsIGx1biAxCisgIFZlbmRvcjogQ09NUEFRICAgIE1vZGVsOiBMT0dJQ0FMIFZPTFVNRSAgICBSZXY6IDIuNDAKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGwgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgOSwgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi40MAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkbSBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA5LCBsdW4gMQorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RuIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEwLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RvIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDExLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RwIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDExLCBsdW4gMQorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RxIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEyLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RyIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEyLCBsdW4gMQorcmVzaXplX2RtYV9wb29sOiB1bmtub3duIGRldmljZSB0eXBlIDEyCityZXNpemVfZG1hX3Bvb2w6IHVua25vd24gZGV2aWNlIHR5cGUgMTIKK1NDU0kgZGV2aWNlIHNkYjogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMzU4NDM2NzAgWzE3NTAxIE1CXSBbMTcuNSBHQl0KKyBzZGI6IHNkYjEKK1NDU0kgZGV2aWNlIHNkYzogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTQ0NDEwODgwIFs3MDUxMyBNQl0gWzcwLjUgR0JdCisgc2RjOiBzZGMxCitTQ1NJIGRldmljZSBzZGQ6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzgzMjQwIFs4NjgzIE1CXSBbOC43IEdCXQorIHNkZDogc2RkMQorU0NTSSBkZXZpY2Ugc2RlOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc4MzI0MCBbODY4MyBNQl0gWzguNyBHQl0KKyBzZGU6IHNkZTEKK1NDU0kgZGV2aWNlIHNkZjogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3ODMyNDAgWzg2ODMgTUJdIFs4LjcgR0JdCisgc2RmOiBzZGYxCitTQ1NJIGRldmljZSBzZGc6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzgzMjQwIFs4NjgzIE1CXSBbOC43IEdCXQorIHNkZzogc2RnMQorU0NTSSBkZXZpY2Ugc2RoOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc4MzI0MCBbODY4MyBNQl0gWzguNyBHQl0KKyBzZGg6IHNkaDEKK1NDU0kgZGV2aWNlIHNkaTogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3ODMyNDAgWzg2ODMgTUJdIFs4LjcgR0JdCisgc2RpOiBzZGkxCitTQ1NJIGRldmljZSBzZGo6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDIwNTYxNjAgWzEwMDMgTUJdIFsxLjAgR0JdCisgc2RqOiBzZGoxCitTQ1NJIGRldmljZSBzZGs6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDIwNTI3MzYgWzEwMDIgTUJdIFsxLjAgR0JdCisgc2RrOiBzZGsxCitTQ1NJIGRldmljZSBzZGw6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzY0MzIwIFs4NjczIE1CXSBbOC43IEdCXQorIHNkbDogc2RsMQorU0NTSSBkZXZpY2Ugc2RtOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSA4MzgwMzIwIFs0MDkxIE1CXSBbNC4xIEdCXQorIHNkbTogc2RtMQorU0NTSSBkZXZpY2Ugc2RuOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc2NDMyMCBbODY3MyBNQl0gWzguNyBHQl0KKyBzZG46IHNkbjEKK1NDU0kgZGV2aWNlIHNkbzogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3NjQzMjAgWzg2NzMgTUJdIFs4LjcgR0JdCisgc2RvOiBzZG8xCitTQ1NJIGRldmljZSBzZHA6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzY0MzIwIFs4NjczIE1CXSBbOC43IEdCXQorIHNkcDogc2RwMQorU0NTSSBkZXZpY2Ugc2RxOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAyMDU2MTYwIFsxMDAzIE1CXSBbMS4wIEdCXQorIHNkcTogc2RxMQorU0NTSSBkZXZpY2Ugc2RyOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAyMDUyNzM2IFsxMDAyIE1CXSBbMS4wIEdCXQorIHNkcjogc2RyMQorCisqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0lmIGEgR0JJQyBvZiB0eXBlIFNob3J0LXdhdmUsIExvbmctd2F2ZSwgb3IgQ29wcGVyIGlzIGRldGVjdGVkLCBpdCB3aWxsCitwcmludCBvdXQ7IG90aGVyd2lzZSwgIm5vbmUiIGlzIGRpc3BsYXllZC4gIElmIHRoZSBjYWJsaW5nIGlzIGNvcnJlY3QKK2FuZCBhIGxvb3AgY2lyY3VpdCBpcyBjb21wbGV0ZWQsIHlvdSBzaG91bGQgc2VlICJNb25pdG9yIjsgb3RoZXJ3aXNlLCAKKyJMb29wRmFpbCIgKG9uIG9wZW4gY2lyY3VpdCkgb3Igc29tZSBMUFNNIG51bWJlci9zdGF0ZSB3aXRoIGJpdCAzIHNldC4KKworCitFUlJBVEE6CisxLiBOb3JtYWxseSwgTGludXggU2NzaSBxdWVyaWVzIEZDIGRldmljZXMgd2l0aCBJTlFVSVJZIHN0cmluZ3MuICBBbGwgTFVOcworZm91bmQgYWNjb3JkaW5nIHRvIElOUVVJUlkgc2hvdWxkIGdldCBSRUFEIGNvbW1hbmRzIGF0IHNlY3RvciAwIHRvIGZpbmQKK3BhcnRpdGlvbiB0YWJsZSwgZXRjLiAgT2xkZXIga2VybmVscyBvbmx5IHF1ZXJ5IHRoZSBmaXJzdCA0IGRldmljZXMuICBTb21lCitMaW51eCBrZXJuZWxzIG9ubHkgbG9vayBmb3Igb25lIExVTiBwZXIgdGFyZ2V0IChpLmUuIEZDIGRldmljZSkuCisKKzIuIFBoeXNpY2FsbHkgcmVtb3ZpbmcgYSBkZXZpY2UsIG9yIGEgbWFsZnVuY3Rpb25pbmcgc3lzdGVtIHdoaWNoIGhpZGVzIGEKK2RldmljZSwgbGVhZHMgdG8gYSAzMC1zZWNvbmQgdGltZW91dCBhbmQgc3Vic2VxdWVudCBfYWJvcnQgY2FsbC4gIAorSW4gc29tZSBwcm9jZXNzIGNvbnRleHRzLCB0aGlzIHdpbGwgaGFuZyB0aGUga2VybmVsIChjcmFzaGluZyB0aGUgc3lzdGVtKS4KK1NpbmdsZSBiaXQgZXJyb3JzIGluIGZyYW1lcyBhbmQgdmlydHVhbGx5IGFsbCBob3QgcGx1Z2dpbmcgZXZlbnRzIGFyZSAKK2dyYWNlZnVsbHkgaGFuZGxlZCB3aXRoIGludGVybmFsIGRyaXZlciB0aW1lciBhbmQgQWJvcnQgcHJvY2Vzc2luZy4KKworMy4gU29tZSBTQ1NJIGRyaXZlcyB3aXRoIGVycm9yIGNvbmRpdGlvbnMgd2lsbCBub3QgaGFuZGxlIHRoZSA3IHNlY29uZCB0aW1lb3V0CitpbiB0aGlzIHNvZnR3YXJlIGRyaXZlciwgbGVhZGluZyB0byBpbmZpbml0ZSByZXRyaWVzIG9uIHRpbWVkIG91dCBTQ1NJIGNvbW1hbmRzLgorVGhlIDcgc2VjcyBiYWxhbmNlcyB0aGUgbmVlZCB0byBxdWlja2x5IHJlY292ZXIgZnJvbSBsb3N0IGZyYW1lcyAoZXNwLiBvbiBzZXF1ZW5jZQoraW5pdGlhdGl2ZXMpIGFuZCB0aW1lIG5lZWRlZCBieSBvbGRlci9zbG93ZXIvZXJyb3Itc3RhdGUgZHJpdmVzIGluIHJlc3BvbmRpbmcuCitUaGlzIGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBpbiAiRXhjaGFuZ2VzW10udGltZU91dCIuCisKKzQuIER1ZSB0byB0aGUgbmF0dXJlIG9mIEZDIHNvZnQgYWRkcmVzc2luZywgdGhlcmUgaXMgbm8gYXNzdXJhbmNlIHRoYXQgdGhlIAorc2FtZSBMVU5zIChkcml2ZXMpIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXRoIChlLmcuIC9kZXYvc2RiMSkgZnJvbSBvbmUgYm9vdCB0bworbmV4dC4gIER5bmFtaWMgc29mdCBhZGRyZXNzIGNoYW5nZXMgKGkuZS4gMjQtYml0IEZDIHBvcnRfaWQpIGFyZQorc3VwcG9ydGVkIGR1cmluZyBydW4gdGltZSAoZS5nLiBkdWUgdG8gaG90IHBsdWcgZXZlbnQpIGJ5IHRoZSB1c2Ugb2YgV1dOIHRvCitTQ1NJIE5leHVzIChjaGFubmVsL3RhcmdldC9MVU4pIG1hcHBpbmcuCisKKzUuIENvbXBhcSBSQTR4MDAgZmlybXdhcmUgdmVyc2lvbiAyLjU0IGFuZCBsYXRlciBzdXBwb3J0cyBTU1AgKFNlbGVjdGl2ZSAKK1N0b3JhZ2UgUHJlc2VudGF0aW9uKSwgd2hpY2ggbWFwcyBMVU5zIHRvIGEgV1dOLiAgSWYgUkE0eDAwIGZpcm13YXJlIHByaW9yCisyLjU0IChlLmcuIG9sZGVyIGNvbnRyb2xsZXIpIGlzIHVzZWQsIG9yIHRoZSBGQyBIQkEgaXMgcmVwbGFjZWQgKGFub3RoZXIgV1dOCitpcyB1c2VkKSwgbG9naWNhbCB2b2x1bWVzIG9uIHRoZSBSQTR4MDAgd2lsbCBubyBsb25nZXIgYmUgdmlzaWJsZS4KKworCitTZW5kIHF1ZXN0aW9ucy9jb21tZW50cyB0bzoKK0FteSBWYW56YW50LUhvZGdlIChmaWJyZWNoYW5uZWxAY29tcGFxLmNvbSkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2RjMzk1eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvZGMzOTV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNiNzlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2RjMzk1eC50eHQKQEAgLTAsMCArMSwxMDIgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgZGMzOTV4IFNDU0kgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3RhdHVzCistLS0tLS0KK1RoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIHdpdGggQ0QtUiBhbmQgQ0QtUi9XIGRyaXZlcy4gVGhlc2Ugc2hvdWxkCitiZSBzYWZlIHRvIHVzZS4gVGVzdGluZyB3aXRoIGhhcmQgZGlza3MgaGFzIG5vdCBiZWVuIGRvbmUgdG8gYW55CitncmVhdCBkZWdyZWUgYW5kIGNhdXRpb24gc2hvdWxkIGJlIGV4ZXJjaXNlZCBpZiB5b3Ugd2FudCB0byBhdHRlbXB0Cit0byB1c2UgdGhpcyBkcml2ZXIgd2l0aCBoYXJkIGRpc2tzLgorCitUaGlzIGlzIGEgMi41IG9ubHkgZHJpdmVyLiBGb3IgYSAyLjQgZHJpdmVyIHBsZWFzZSBzZWUgdGhlIG9yaWdpbmFsCitkcml2ZXIgKHdoaWNoIHRoaXMgZHJpdmVyIHN0YXJ0ZWQgZnJvbSkgYXQKK2h0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzk1LworCitQcm9ibGVtcywgcXVlc3Rpb25zIGFuZCBwYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gdGhlIG1haWxpbmcKK2xpc3QuIERldGFpbHMgb24gdGhlIGxpc3QsIGluY2x1ZGluZyBhcmNoaXZlcywgYXJlIGF2YWlsYWJsZSBhdAoraHR0cDovL2xpc3RzLnR3aWJibGUub3JnL21haWxtYW4vbGlzdGluZm8vZGMzOTV4LworCitQYXJhbWV0ZXJzCistLS0tLS0tLS0tCitUaGUgZHJpdmVyIHVzZXMgdGhlIHNldHRpbmdzIGZyb20gdGhlIEVFUFJPTSBzZXQgaW4gdGhlIFNDU0kgQklPUyAKK3NldHVwLiBJZiB0aGVyZSBpcyBubyBFRVBST00sIHRoZSBkcml2ZXIgdXNlcyBkZWZhdWx0IHZhbHVlcy4KK0JvdGggY2FuIGJlIG92ZXJyaWRlbiBieSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyAobW9kdWxlIG9yIGtlcm5lbAorcGFyYW1ldGVycykuCisKK1RoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlOgorCisgLSBzYWZlCisgICBEZWZhdWx0OiAwLCBBY2NlcHRhYmxlIHZhbHVlczogMCBvciAxCisKKyAgIElmIHNhZmUgaXMgc2V0IHRvIDEgdGhlbiB0aGUgYWRhcHRlciB3aWxsIHVzZSBjb25zZXJ2YXRpdmUKKyAgICgic2FmZSIpIGRlZmF1bHQgc2V0dGluZ3MuIFRoaXMgc2V0czoKKworCQlzaG9ydGN1dCBmb3IgZGMzOTV4PTcsNCw5LDE1LDIsMTAKKworIC0gYWRhcHRlcl9pZAorICAgRGVmYXVsdDogNywgQWNjZXB0YWJsZSB2YWx1ZXM6IDAgdG8gMTUKKworICAgU2V0cyB0aGUgaG9zdCBhZGFwdGVyIFNDU0kgSUQuCisKKyAtIG1heF9zcGVlZAorICAgRGVmYXVsdDogMSwgQWNjZXB0YWJsZSB2YWx1ZTogMCB0byA3CisgICAwID0gMjAgICBNaHoKKyAgIDEgPSAxMi4yIE1oegorICAgMiA9IDEwICAgTWh6CisgICAzID0gOCAgICBNaHoKKyAgIDQgPSA2LjcgIE1oegorICAgNSA9IDUuOCAgSGh6CisgICA2ID0gNSAgICBNaHoKKyAgIDcgPSA0ICAgIE1oegorCisgLSBkZXZfbW9kZQorICAgQml0bWFwIGZvciBkZXZpY2UgY29uZmlndXJhdGlvbgorCisgICBEZXZNb2RlIGJpdCBkZWZpbml0aW9uOgorICAgICAgQml0IFZhbChoZXgpIFZhbChkZWMpICBNZWFuaW5nCisgICAgICAqMCAgICAweDAxICAgICAgIDEgICAgIFBhcml0eSBjaGVjaworICAgICAgKjEgICAgMHgwMiAgICAgICAyICAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbgorICAgICAgKjIgICAgMHgwNCAgICAgICA0ICAgICBEaXNjb25uZWN0aW9uCisgICAgICAqMyAgICAweDA4ICAgICAgIDggICAgIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwLiAoTm90IHVzZWQpCisgICAgICAqNCAgICAweDEwICAgICAgMTYgICAgIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nCisgICAgICAqNSAgICAweDIwICAgICAgMzIgICAgIFdpZGUgTmVnb3RpYXRpb24KKworIC0gYWRhcHRlcl9tb2RlCisgICBCaXRtYXAgZm9yIGFkYXB0ZXIgY29uZmlndXJhdGlvbgorCisgICBBZGFwdE1vZGUgYml0IGRlZmluaXRpb24KKyAgICAgIEJpdCBWYWwoaGV4KSBWYWwoZGVjKSAgTWVhbmluZworICAgICAgKjAgICAgMHgwMSAgICAgICAxICAgICBTdXBwb3J0IG1vcmUgdGhhbiB0d28gZHJpdmVzLiAoTm90IHVzZWQpCisgICAgICAqMSAgICAweDAyICAgICAgIDIgICAgIFVzZSBET1MgY29tcGF0aWJsZSBtYXBwaW5nIGZvciBIRHMgZ3JlYXRlciB0aGFuIDFHQi4KKyAgICAgICoyICAgIDB4MDQgICAgICAgNCAgICAgUmVzZXQgU0NTSSBCdXMgb24gc3RhcnR1cC4KKyAgICAgICozICAgIDB4MDggICAgICAgOCAgICAgQWN0aXZlIE5lZ2F0aW9uOiBJbXByb3ZlcyBTQ1NJIEJ1cyBub2lzZSBpbW11bml0eS4KKyAgICAgICA0ICAgIDB4MTAgICAgICAxNiAgICAgSW1tZWRpYXRlIHJldHVybiBvbiBCSU9TIHNlZWsgY29tbWFuZC4gKE5vdCB1c2VkKQorICAgICgqKTUgICAgMHgyMCAgICAgIDMyICAgICBDaGVjayBmb3IgTFVOcyA+PSAxLgorCisgLSB0YWdzCisgICBEZWZhdWx0OiAzLCBBY2NlcHRhYmxlIHZhbHVlczogMC01CisgICAKKyAgIFRoZSBudW1iZXIgb2YgdGFncyBpcyAxPDx4LCBpZiB4IGhhcyBiZWVuIHNwZWNpZmllZAorCisgLSByZXNldF9kZWxheQorICAgRGVmYXVsdDogMSwgQWNjZXB0YWJsZSB2YWx1ZXM6IDAtMTgwCisKKyAgIFRoZSBzZWNvbmRzIHRvIG5vdCBhY2NlcHQgY29tbWFuZHMgYWZ0ZXIgYSBTQ1NJIFJlc2V0CisKKworRm9yIHRoZSBidWlsdCAgaW4gZHJpdmVyIHRoZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoCitkYzM5NXguIChlZyAiZGMzOTV4LnNhZmU9MSIpCisKKworQ29weXJpZ2h0CistLS0tLS0tLS0KK1RoZSBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZS4gSXQgaXMgcHJvdGVjdGVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkuIFBsZWFzZSByZWFkIGl0LCBiZWZvcmUgdXNpbmcgdGhpcyBkcml2ZXIuIEl0IHNob3VsZCBiZQoraW5jbHVkZWQgaW4geW91ciBrZXJuZWwgc291cmNlcyBhbmQgd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSXQgY2FycmllcyB0aGUKK2ZpbGVuYW1lIENPUFlJTkcuIElmIHlvdSBkb24ndCBoYXZlIGl0LCBwbGVhc2UgYXNrIG1lIHRvIHNlbmQgeW91IG9uZSBieQorZW1haWwuCitOb3RlOiBUaGUgR05VIEdQTCBzYXlzIGFsc28gc29tZXRoaW5nIGFib3V0IHdhcnJhbnR5IGFuZCBsaWFiaWxpdHkuIAorUGxlYXNlIGJlIGF3YXJlIHRoZSBmb2xsb3dpbmc6IFdoaWxlIHdlIGRvIG15IGJlc3QgdG8gcHJvdmlkZSBhIHdvcmtpbmcgYW5kCityZWxpYWJsZSBkcml2ZXIsIHRoZXJlIGlzIGEgY2hhbmNlLCB0aGF0IGl0IHdpbGwga2lsbCB5b3VyIHZhbHVhYmxlIGRhdGEuIAorV2UgcmVmdXNlIHRvIHRha2UgYW55IHJlc3BvbnNpYmlsaXR5IGZvciB0aGF0LiBUaGUgZHJpdmVyIGlzIHByb3ZpZGVkIGFzLWlzCithbmQgWU9VIFVTRSBJVCBBVCBZT1VSIE9XTiBSRVNQT05TSUJJTElUWS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9kcHRpLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9kcHRpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ1ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2RwdGkudHh0CkBAIC0wLDAgKzEsODMgQEAKKyAvKiBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBVU0UKKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgZm9ybSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCByZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBhcyBpcycgYnkgQWRhcHRlYyBhbmQKKyAqIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZQorICogaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsCisgKiBhcmUgZGlzY2xhaW1lZC4gSW4gbm8gZXZlbnQgc2hhbGwgQWRhcHRlYyBiZQorICogbGlhYmxlIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5IG9yCisgKiBjb25zZXF1ZW50aWFsIGRhbWFnZXMgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBwcm9jdXJlbWVudCBvZgorICogc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHM7IG9yIGJ1c2luZXNzCisgKiBpbnRlcnJ1cHRpb25zKSBob3dldmVyIGNhdXNlZCBhbmQgb24gYW55IHRoZW9yeSBvZiBsaWFiaWxpdHksIHdoZXRoZXIgaW4KKyAqIGNvbnRyYWN0LCBzdHJpY3QgbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSBvciBvdGhlcndpc2UpCisgKiBhcmlzaW5nIGluIGFueSB3YXkgb3V0IG9mIHRoZSB1c2Ugb2YgdGhpcyBkcml2ZXIgc29mdHdhcmUsIGV2ZW4gaWYgYWR2aXNlZAorICogb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFkYXB0ZWMgSTJPIFJBSUQgYW5kIERQVCBTbWFydFJBSUQgViBJMk8gYm9hcmRzLgorICoKKyAqIENSRURJVFM6CisgKiBUaGUgb3JpZ2luYWwgbGludXggZHJpdmVyIHdhcyBwb3J0ZWQgdG8gTGludXggYnkgS2FyZW4gV2hpdGUgd2hpbGUgYXQgCisgKiBEZWxsIENvbXB1dGVyLiAgSXQgd2FzIHBvcnRlZCBmcm9tIEJvYiBQYXN0ZXVyJ3MgKG9mIERQVCkgb3JpZ2luYWwgCisgKiBub24tTGludXggZHJpdmVyLiAgTWFyayBTYWx5enluIGFuZCBCb2IgUGFzdGV1ciBjb25zdWx0ZWQgb24gdGhlIG9yaWdpbmFsCisgKiBkcml2ZXIuIAorICogCisgKiAyLjAgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGJ5IERlYW5uYSBCb25kcyBhbmQgTWFyayBTYWx5enluLgorICoKKyAqIEhJU1RPUlk6CisgKiBUaGUgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IHBvcnRlZCB0byBsaW51eCB2ZXJzaW9uIDIuMC4zNCAKKyAqCisgKiBWMi4wIFJld3JpdGUgb2YgZHJpdmVyLiAgUmUtYXJjaGl0ZWN0dXJlZCBiYXNlZCBvbiBpMm8gc3Vic3lzdGVtLgorICogICBUaGlzIHdhcyB0aGUgZmlyc3QgZnVsbCBHUEwgdmVyc2lvbiBzaW5jZSB0aGUgbGFzdCB2ZXJzaW9uIHVzZWQKKyAqICAgaTJvc2lnIGhlYWRlcnMgd2hpY2ggd2VyZSBub3QgR1BMLiAgRGV2ZWxvcGVyIFRlc3RpbmcgdmVyc2lvbi4KKyAqIFYyLjEgSW50ZXJuYWwgdGVzdGluZworICogVjIuMiBGaXJzdCByZWxlYXNlZCB2ZXJzaW9uCisgKgorICogVjIuMyAKKyAqICAgQ2hhbmdlczoKKyAqICAgICAgQWRkZWQgUmFwdG9yIFN1cHBvcnQKKyAqICAgICAgRml4ZWQgYnVnIGNhdXNpbmcgc3lzdGVtIHRvIGhhbmcgdW5kZXIgZXh0cmVtZSBsb2FkIHdpdGggCisgKiAgICAgICAgIG1hbmFnZW1lbnQgdXRpbGl0aWVzIHJ1bm5pbmcgKHJlbW92ZWQgR0ZQX0RNQSBmcm9tIGttYWxsb2MgZmxhZ3MpCisgKgorICoKKyAqIFYyLjQgRmlyc3QgdmVyc2lvbiByZWFkeSB0byBiZSBzdWJtaXR0ZWQgdG8gYmUgZW1iZWRkZWQgaW4gdGhlIGtlcm5lbAorICogICBDaGFuZ2VzOiAKKyAqICAgICAgSW1wbGVtZW50ZWQgc3VnZ2VzdGlvbnMgZnJvbSBBbGFuIENveAorICogICAgICBBZGRlZCBjYWxjdWxhdGlvbiBvZiByZXNpZCBmb3Igc2cgbGF5ZXIKKyAqICAgICAgQmV0dGVyIGVycm9yIGhhbmRsaW5nCisgKiAgICAgICAgIEFkZGVkIGNoZWNraW5nIHVuZGVyZmxvdyBjb25kdGlvbnMgCisgKiAgICAgICAgIEFkZGVkIERBVEFQUk9URUNUIGNoZWNraW5nCisgKiAgICAgICAgIENoYW5nZWQgZXJyb3IgcmV0dXJuIGNvZGVzCisgKiAgICAgICAgIEZpeGVkIHBvaW50ZXIgYnVnIGluIGJ1cyByZXNldCByb3V0aW5lCisgKiAgICAgIEVuYWJsZWQgaGJhIHJlc2V0IGZyb20gaW9jdGxzIChhbGxvd3MgYSBGVyBmbGFzaCB0byByZWJvb3QgYW5kIHVzZSB0aGUgbmV3CisgKiAgICAgICAgIEZXIHdpdGhvdXQgaGF2aW5nIHRvIHJlYm9vdCkKKyAqICAgICAgQ2hhbmdlZCBwcm9jIG91dHB1dAorICoKKyAqIFRPRE86CisgKiAgICAgIEFkZCA2NCBiaXQgU2NhdHRlciBHYXRoZXIgd2hlbiBjb21waWxlZCBvbiA2NCBiaXQgYXJjaGl0ZWN0dXJlcworICogICAgICBBZGQgc3BhcnNlIGx1biBzY2FubmluZyAKKyAqICAgICAgQWRkIGNvZGUgdGhhdCBjaGVja3MgaWYgYSBkZXZpY2UgdGhhdCBoYWQgYmVlbiB0YWtlbiBvZmZsaW5lIGlzCisgKiAgICAgICAgIG5vdyBvbmxpbmUgKGF0IHRoZSBGVyBsZXZlbCkgd2hlbiB0ZXN0IHVuaXQgcmVhZHkgb3IgaW5xdWlyeSAKKyAqICAgICAgICAgY29tbWFuZCBmcm9tIHNjc2ktY29yZQorICogICAgICBBZGQgcHJvYyByZWFkIGludGVyZmFjZQorICogICAgICAgICBidXNyZXNjYW4gY29tbWFuZAorICogICAgICAgICByZXNjYW4gY29tbWFuZAorICogICAgICBBZGQgY29kZSB0byByZXNjYW4gcm91dGluZSB0aGF0IG5vdGlmaWVzIHNjc2ktY29yZSBhYm91dCBuZXcgZGV2aWNlcworICogICAgICBBZGQgc3VwcG9ydCBmb3IgQy1QQ0kgKGhvdHBsdWcgc3R1ZmYpCisgKiAgICAgIEFkZCBpb2N0bCBwYXNzdGhydSBlcnJvciByZWNvdmVyeQorICoKKyAqIE5PVEVTOgorICogVGhlIERQVCBjYXJkIG9wdGltaXplcyB0aGUgb3JkZXIgb2YgcHJvY2Vzc2luZyBjb21tYW5kcy4gIENvbnNlcXVlbnRseSwKKyAqIGEgY29tbWFuZCBtYXkgdGFrZSB1cCB0byA2IG1pbnV0ZXMgdG8gY29tcGxldGUgYWZ0ZXIgaXQgaGFzIGJlZW4gc2VudAorICogdG8gdGhlIGJvYXJkLiAgCisgKgorICogVGhlIGZpbGVzIGRwdGlfaW9jdGwuaCBkcHRzaWcuaCBvc2RfZGVmcy5oIG9zZF91dGlsLmggc3lzX2luZm8uaCBhcmUgcGFydCBvZiB0aGUKKyAqIGludGVyZmFjZSBmaWxlcyBmb3IgQWRhcHRlYydzIG1hbmFnZW1lbnQgcm91dGluZXMuICBUaGVzZSBkZWZpbmUgdGhlIHN0cnVjdHVyZXMgdXNlZAorICogaW4gdGhlIGlvY3Rscy4gIFRoZXkgYXJlIHdyaXR0ZW4gdG8gYmUgcG9ydGFibGUuICBUaGV5IGFyZSBoYXJkIHRvIHJlYWQsIGJ1dCBJIG5lZWQKKyAqIHRvIHVzZSB0aGVtICdhcyBpcycgb3IgSSBjYW4gbWlzcyBjaGFuZ2VzIGluIHRoZSBpbnRlcmZhY2UuCisgKgorICovCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9kdGMzeDgwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9kdGMzeDgwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFlNjIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2R0YzN4ODAudHh0CkBAIC0wLDAgKzEsNDMgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgTGludXggRFRDMzE4MC8zMjgwIHNjc2kgZHJpdmVyLgorYnkgUmF5IFZhbiBUYXNzbGUgKHJheXZ0QGNvbW0ubW90LmNvbSkgIE1hcmNoIDE5OTYKK0Jhc2VkIG9uIHRoZSBnZW5lcmljICYgY29yZSBOQ1I1MzgwIGNvZGUgYnkgRHJldyBFY2toYXJkCisKK1NDU0kgZGV2aWNlIGRyaXZlciBmb3IgdGhlIERUQyAzMTgwLzMyODAuCitEYXRhIFRlY2hub2xvZ3kgQ29ycC0tLWEgZGl2aXNpb24gb2YgUXVtZS4KKworVGhlIDMyODAgaGFzIGEgc3RhbmRhcmQgZmxvcHB5IGludGVyZmFjZS4KKworVGhlIDMxODAgZG9lcyBub3QuICBPdGhlcndpc2UsIHRoZXkgYXJlIGlkZW50aWNhbC4KKworVGhlIERUQzN4ODAgZG9lcyBub3Qgc3VwcG9ydCBETUEgYnV0IGl0IGRvZXMgaGF2ZSBQc2V1ZG8tRE1BIHdoaWNoIGlzCitzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworSXQncyBEVEM0MDYgc2NzaSBjaGlwIGlzIHN1cHBvc2VkbHkgY29tcGF0aWJsZSB3aXRoIHRoZSBOQ1IgNTNDNDAwLgorSXQgaXMgbWVtb3J5IG1hcHBlZCwgdXNlcyBhbiBJUlEsIGJ1dCBubyBkbWEgb3IgaW8tcG9ydC4gIFRoZXJlIGlzCitpbnRlcm5hbCBETUEsIGJldHdlZW4gU0NTSSBidXMgYW5kIGFuIG9uLWNoaXAgMTI4LWJ5dGUgYnVmZmVyLiAgRG91YmxlCitidWZmZXJpbmcgaXMgZG9uZSBhdXRvbWFnaWNhbGx5IGJ5IHRoZSBjaGlwLiAgRGF0YSBpcyB0cmFuc2ZlcnJlZAorYmV0d2VlbiB0aGUgb24tY2hpcCBidWZmZXIgYW5kIENQVS9SQU0gdmlhIG1lbW9yeSBtb3Zlcy4KKworVGhlIGRyaXZlciBkZXRlY3RzIHRoZSBwb3NzaWJsZSBtZW1vcnkgYWRkcmVzc2VzIChqdW1wZXIgc2VsZWN0YWJsZSk6CisJQ0MwMCwgREMwMCwgQzgwMCwgYW5kIEQ4MDAKK1RoZSBwb3NzaWJsZSBJUlEncyAoanVtcGVyIHNlbGVjdGFibGUpIGFyZToKKwlJUlEgMTAsIDExLCAxMiwgMTUKK1Bhcml0eSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAsIGJ1dCBub3QgYnkgdGhpcyBkcml2ZXIuCitJbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSAvcHJvYy9zY3NpL2R0YzNjODAvTi4KKworTm90ZSBvbiBpbnRlcnJ1cHRzOgorCitUaGUgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgaXQgY2FuIGJlIHNldCB0byBpbnRlcnJ1cHQgd2hlbmV2ZXIgdGhlCitvbi1jaGlwIGJ1ZmZlciBuZWVkcyBDUFUgYXR0ZW50aW9uLiAgSSBjb3VsZG4ndCBnZXQgdGhpcyB0byB3b3JrLiAgU28KK3RoZSBkcml2ZXIgcG9sbHMgZm9yIGRhdGEtcmVhZHkgaW4gdGhlIHBzZXVkby1ETUEgdHJhbnNmZXIgcm91dGluZS4KK1RoZSBpbnRlcnJ1cHQgc3VwcG9ydCByb3V0aW5lcyBpbiB0aGUgTkNSMzI4MC5jIGNvcmUgbW9kdWxlcyBoYW5kbGUKK3Njc2kgZGlzY29ubmVjdC9yZWNvbm5lY3QsIGFuZCB0aGlzIChtb3N0bHkpIHdvcmtzLiAgSG93ZXZlci4uLi4uICBJCitoYXZlIHRlc3RlZCBpdCB3aXRoIDQgdG90YWxseSBkaWZmZXJlbnQgaGFyZCBkcml2ZXMgKGJvdGggU0NTSS0xIGFuZAorU0NTSS0yKSwgYW5kIG9uZSBDRFJPTSBkcml2ZS4gIEludGVycnVwdHMgd29ya3MgZ3JlYXQgZm9yIGFsbCBidXQgb25lCitzcGVjaWZpYyBoYXJkIGRyaXZlLiAgRm9yIHRoaXMgb25lLCB0aGUgZHJpdmVyIHdpbGwgZXZlbnR1YWxseSBoYW5nIGluCit0aGUgdHJhbnNmZXIgc3RhdGUuICBJIGhhdmUgdGVzdGVkIHdpdGg6ICJkZCBicz00ayBjb3VudD0yaworb2Y9L2Rldi9udWxsIGlmPS9kZXYvc2RiIi4gIEl0IHJlYWRzIG9rIGZvciBhIHdoaWxlLCB0aGVuIGhhbmdzLgorQWZ0ZXIgYmVhdGluZyBteSBoZWFkIGFnYWluc3QgdGhpcyBmb3IgYSBjb3VwbGUgb2Ygd2Vla3MsIGdldHRpbmcKK25vd2hlcmUsIEkgZ2l2ZSB1cC4gIFNvLi4uLi5UaGlzIGRyaXZlciBkb2VzIE5PVCB1c2UgaW50ZXJydXB0cywgZXZlbgoraWYgeW91IGhhdmUgdGhlIGNhcmQganVtcGVyZWQgdG8gYW4gSVJRLiAgUHJvYmFibHkgbm9ib2R5IHdpbGwgZXZlcgorY2FyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9nX05DUjUzODAudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2dfTkNSNTM4MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4MGY1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9nX05DUjUzODAudHh0CkBAIC0wLDAgKzEsNjMgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgTGludXggZ19OQ1I1MzgwIGRyaXZlci4KKworKGMpIDE5OTMgRHJldyBFY2toYXJkCitOQ1I1M2M0MDAgZXh0ZW5zaW9ucyAoYykgMTk5NCwxOTk1LDE5OTYgS2V2aW4gTGVudGluCisKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIE5DUjUzYzQwMCBleHRlbnNpb25zIGJ5IEtldmluIExlbnRpbiBhbmQgc29tZQorZW5oYW5jZW1lbnRzIHRvIHRoZSBOQ1I1MzgwIGNvcmUuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGJvdGggTkNSNTM4MCBhbmQgTkNSNTNjNDAwIGNhcmRzIGluIHBvcnQgb3IgbWVtb3J5CittYXBwZWQgbW9kZXMuIEN1cnJlbnRseSB0aGlzIGRyaXZlciBjYW4gb25seSBzdXBwb3J0IG9uZSBvZiB0aG9zZSBtYXBwaW5nCittb2RlcyBhdCBhIHRpbWUgYnV0IGl0IGRvZXMgc3VwcG9ydCBib3RoIG9mIHRoZXNlIGNoaXBzIGF0IHRoZSBzYW1lIHRpbWUuCitUaGUgbmV4dCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyIHdpbGwgc3VwcG9ydCBwb3J0ICYgbWVtb3J5IG1hcHBlZCBjYXJkcyBhdAordGhlIHNhbWUgdGltZS4gSXQgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIG11bHRpcGxlIGRpZmZlcmVudCBjYXJkcyBpbiB0aGUKK3NhbWUgbWFjaGluZS4KKworVGhlIGRyaXZlcnMvc2NzaS9NYWtlZmlsZSBoYXMgYW4gb3ZlcnJpZGUgaW4gaXQgZm9yIHRoZSBtb3N0IGNvbW1vbgorTkNSNTNjNDAwIGNhcmQsIHRoZSBUcmFudG9yIFQxMzBCIGluIGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb246CisJUG9ydDogMHgzNTAKKwlJUlEgOiA1CisKK1RoZSBOQ1I1M2M0MDAgZG9lcyBub3Qgc3VwcG9ydCBETUEgYnV0IGl0IGRvZXMgaGF2ZSBQc2V1ZG8tRE1BIHdoaWNoIGlzCitzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworSWYgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBkb2VzIG5vdCB3b3JrIGZvciB5b3UsIHlvdSBjYW4gdXNlIHRoZSBrZXJuZWwKK2NvbW1hbmQgbGluZXMgKGVnIHVzaW5nIHRoZSBsaWxvIGFwcGVuZCBjb21tYW5kKToKKwluY3I1MzgwPXBvcnQsaXJxLGRtYQorCW5jcjUzYzQwMD1wb3J0LGlycQorb3IKKwluY3I1MzgwPWJhc2UsaXJxLGRtYQorCW5jcjUzYzQwMD1iYXNlLGlycQorCitUaGUgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBhbnkgYWRkcmVzc2VzIG9yIHBvcnRzIG90aGVyIHRoYW4gdGhvc2UgaW4KK3RoZSBPVkVSUklERSBvciBnaXZlbiB0byB0aGUga2VybmVsIGFzIGFib3ZlLgorCitUaGlzIGRyaXZlciBwcm92aWRlcyBzb21lIGluZm9ybWF0aW9uIG9uIHdoYXQgaXQgaGFzIGRldGVjdGVkIGluCisvcHJvYy9zY3NpL2dfTkNSNTM4MC94IHdoZXJlIHggaXMgdGhlIHNjc2kgY2FyZCBudW1iZXIgYXMgZGV0ZWN0ZWQgYXQgYm9vdAordGltZS4gTW9yZSBpbmZvIHRvIGNvbWUgaW4gdGhlIGZ1dHVyZS4KKworV2hlbiBOQ1I1M2M0MDAgc3VwcG9ydCBpcyBjb21waWxlZCBpbiwgQklPUyBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQgYnkKK3RoZSBkcml2ZXIgKHRoZSByYXcgNTM4MCBkcml2ZXIgZG9lcyBub3QgYW5kIEkgZG9uJ3QgcGxhbiB0byBmaWRkbGUgd2l0aAoraXQhKS4KKworVGhpcyBkcml2ZXIgd29ya3MgYXMgYSBtb2R1bGUuCitXaGVuIGluY2x1ZGVkIGFzIGEgbW9kdWxlLCBwYXJhbWV0ZXJzIGNhbiBiZSBwYXNzZWQgb24gdGhlIGluc21vZC9tb2Rwcm9iZQorY29tbWFuZCBsaW5lOgorICBuY3JfaXJxPXh4ICAgdGhlIGludGVycnVwdAorICBuY3JfYWRkcj14eCAgdGhlIHBvcnQgb3IgYmFzZSBhZGRyZXNzIChmb3IgcG9ydCBvciBtZW1vcnkKKyAgICAgICAgICAgICAgIG1hcHBlZCwgcmVzcC4pCisgIG5jcl9kbWE9eHggICB0aGUgRE1BCisgIG5jcl81MzgwPTEgICB0byBzZXQgdXAgZm9yIGEgTkNSNTM4MCBib2FyZAorICBuY3JfNTNjNDAwPTEgdG8gc2V0IHVwIGZvciBhIE5DUjUzQzQwMCBib2FyZAorZS5nLgorbW9kcHJvYmUgZ19OQ1I1MzgwIG5jcl9pcnE9NSBuY3JfYWRkcj0weDM1MCBuY3JfNTM4MD0xCisgIGZvciBhIHBvcnQgbWFwcGVkIE5DUjUzODAgYm9hcmQgb3IKK21vZHByb2JlIGdfTkNSNTM4MCBuY3JfaXJxPTI1NSBuY3JfYWRkcj0weGM4MDAwIG5jcl81M2M0MDA9MQorICBmb3IgYSBtZW1vcnkgbWFwcGVkIE5DUjUzQzQwMCBib2FyZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisKKygyNTUgc2hvdWxkIGJlIHNwZWNpZmllZCBmb3Igbm8gb3IgRE1BIGludGVycnVwdCwgMjU0IHRvIGF1dG9wcm9iZSBmb3IgYW4gCisgICAgIElSUSBsaW5lIGlmIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZS4pCisKKworS2V2aW4gTGVudGluCitLLkxlbnRpbkBjcy5tb25hc2guZWR1LmF1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9pYm1tY2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTQ0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dApAQCAtMCwwICsxLDE0MDIgQEAKKworICAgICAgICAgICAgICAgLT08IFRoZSBJQk0gTWljcm9jaGFubmVsIFNDU0ktU3Vic3lzdGVtID49LQorCSAgICAgICAKKwkgICAgICAgICAgICAgICAgIGZvciB0aGUgSUJNIFBTLzIgc2VyaWVzCisJCSAKKwkgIAkgICBMb3cgTGV2ZWwgU29mdHdhcmUtRHJpdmVyIGZvciBMaW51eAorCQkgCisgICAgIENvcHlyaWdodCAoYykgMTk5NSBTdHJvbSBTeXN0ZW1zLCBJbmMuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIAorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWFydGluIEtvbGluZWssIERlY2VtYmVyIDE5OTUuCisgICBPZmZpY2lhbGx5IG1vZGlmaWVkIGFuZCBtYWludGFpbmVkIGJ5IE1pY2hhZWwgTGFuZyBzaW5jZSBKYW51YXJ5IDE5OTkuCisJICAgCisgCSAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA0LjBhCisJCisgICBMYXN0IHVwZGF0ZTogSmFudWFyeSAzLCAyMDAxCisgICAKKyAgIEJlZm9yZSB5b3UgU3RhcnQKKyAgIC0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoaXMgaXMgdGhlIGNvbW1vbiBSRUFETUUuaWJtbWNhIGZpbGUgZm9yIGFsbCBkcml2ZXIgcmVsZWFzZXMgb2YgdGhlIAorICAgSUJNIE1DQSBTQ1NJIGRyaXZlciBmb3IgTGludXguIFBsZWFzZSBub3RlLCB0aGF0IGRyaXZlciByZWxlYXNlcyA0LjAKKyAgIG9yIG5ld2VyIGRvIG5vdCB3b3JrIHdpdGgga2VybmVsIHZlcnNpb25zIG9sZGVyIHRoYW4gMi40LjAsIHdoaWxlIGRyaXZlcgorICAgdmVyc2lvbnMgb2xkZXIgdGhhbiA0LjAgZG8gbm90IHdvcmsgd2l0aCBrZXJuZWxzIDIuNC4wIG9yIGxhdGVyISBJZiB5b3UKKyAgIHRyeSB0byBjb21waWxlIHlvdXIga2VybmVsIHdpdGggdGhlIHdyb25nIGRyaXZlciBzb3VyY2UsIHRoZSAKKyAgIGNvbXBpbGF0aW9uIGlzIGFib3J0ZWQgYW5kIHlvdSBnZXQgYSBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMKKyAgIG5vIGJ1ZyBpbiB0aGUgZHJpdmVyLiBJdCBwcmV2ZW50cyB5b3UgZnJvbSB1c2luZyB0aGUgd3Jvbmcgc291cmNlY29kZQorICAgd2l0aCB0aGUgd3Jvbmcga2VybmVsIHZlcnNpb24uCisKKyAgIEF1dGhvcnMgb2YgdGhpcyBEcml2ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAtIENocmlzIEJlYXVyZWdhcmQgKGltcHJvdmVtZW50IG9mIHRoZSBTQ1NJLWRldmljZSBtYXBwaW5nIGJ5IHRoZSBkcml2ZXIpCisgICAgLSBNYXJ0aW4gS29saW5layAob3JpZ2luLCBmaXJzdCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyKQorICAgIC0gS2xhdXMgS3VkaWVsa2EgKG11bHRpcGxlIFNDU0ktaG9zdCBtYW5hZ2VtZW50L2RldGVjdGlvbiwgYWRhcHRpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgICBMaW51eCBLZXJuZWwgMi4xLngsIG1vZHVsZSBzdXBwb3J0KQorICAgIC0gTWljaGFlbCBMYW5nIChhc3NpZ25pbmcgb3JpZ2luYWwgcHVuL2x1biBtYXBwaW5nLCBkeW5hbWljYWwgbGRuCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQsIHJld3JpdHRlbiBhZGFwdGVyIGRldGVjdGlvbiwgdGhpcyBmaWxlLCAKKwkJICAgIHBhdGNoZXMsIG9mZmljaWFsIGRyaXZlciBtYWludGVuYW5jZSBhbmQgc3Vic2VxdWVudCAKKwkJICAgIGRlYnVnZ2luZywgcmVsYXRlZCB3aXRoIHRoZSBkcml2ZXIpCisKKyAgIFRhYmxlIG9mIENvbnRlbnRzCisgICAtLS0tLS0tLS0tLS0tLS0tLQorICAgMSBBYnN0cmFjdAorICAgMiBEcml2ZXIgRGVzY3JpcHRpb24KKyAgICAgMi4xICBJQk0gU0NTSS1TdWJzeXN0ZW0gRGV0ZWN0aW9uCisgICAgIDIuMiAgUGh5c2ljYWwgVW5pdHMsIExvZ2ljYWwgVW5pdHMsIGFuZCBMb2dpY2FsIERldmljZXMKKyAgICAgMi4zICBTQ1NJLURldmljZSBSZWNvZ25pdGlvbiBhbmQgZHluYW1pY2FsIGxkbiBBc3NpZ25tZW50CisgICAgIDIuNCAgU0NTSS1EZXZpY2UgT3JkZXIKKyAgICAgMi41ICBSZWd1bGFyIFNDU0ktQ29tbWFuZC1Qcm9jZXNzaW5nCisgICAgIDIuNiAgQWJvcnQgJiBSZXNldCBDb21tYW5kcworICAgICAyLjcgIERpc2sgR2VvbWV0cnkKKyAgICAgMi44ICBLZXJuZWwgQm9vdCBPcHRpb24KKyAgICAgMi45ICBEcml2ZXIgTW9kdWxlIFN1cHBvcnQKKyAgICAgMi4xMCBNdWx0aXBsZSBIb3N0YWRhcHRlciBTdXBwb3J0CisgICAgIDIuMTEgL3Byb2Mvc2NzaS1GaWxlc3lzdGVtIEluZm9ybWF0aW9uCisgICAgIDIuMTIgL3Byb2MvbWNhLUZpbGVzeXN0ZW0gSW5mb3JtYXRpb24KKyAgICAgMi4xMyBTdXBwb3J0ZWQgSUJNIFNDU0ktU3Vic3lzdGVtcworICAgICAyLjE0IExpbnV4IEtlcm5lbCBWZXJzaW9ucworICAgMyBDb2RlIEhpc3RvcnkKKyAgIDQgVG8gZG8KKyAgIDUgVXNlcnMnIE1hbnVhbAorICAgICA1LjEgQ29tbWFuZGxpbmUgUGFyYW1ldGVycworICAgICA1LjIgVHJvdWJsZXNob290aW5nCisgICAgIDUuMyBCdWdyZXBvcnRzCisgICAgIDUuNCBTdXBwb3J0IFdXVy1wYWdlCisgICA2IFJlZmVyZW5jZXMKKyAgIDcgQ3JlZGl0cyB0bworICAgICA3LjEgUGVvcGxlCisgICAgIDcuMiBTcG9uc29ycyAmIFN1cHBvcnRlcnMKKyAgIDggVHJhZGVtYXJrcworICAgOSBEaXNjbGFpbWVyCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKiAqCisKKyAgIDEgQWJzdHJhY3QKKyAgIC0tLS0tLS0tLS0KKyAgIFRoaXMgUkVBRE1FLWZpbGUgZGVzY3JpYmVzIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gbG93IGxldmVsIGRyaXZlciBmb3IgCisgICBMaW51eC4gVGhlIGRlc2NyaXB0aW9ucyB3aGljaCB3ZXJlIGZvcm1lcmx5IGtlcHQgaW4gdGhlIHNvdXJjZS1jb2RlIGhhdmUgCisgICBiZWVuIHRha2VuIG91dCB0byB0aGlzIGZpbGUgdG8gZWFzaWZ5IHRoZSBjb2RlcycgcmVhZGFiaWxpdHkuIFRoZSBkcml2ZXIgCisgICBkZXNjcmlwdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCBhcyBtb3N0IG9mIHRoZSBmb3JtZXIgZGVzY3JpcHRpb24gd2FzIGFscmVhZHkKKyAgIHF1aXRlIG91dGRhdGVkLiBUaGUgaGlzdG9yeSBvZiB0aGUgZHJpdmVyIGRldmVsb3BtZW50IGlzIGFsc28ga2VwdCBpbnNpZGUgCisgICBoZXJlLiBNdWx0aXBsZSBoaXN0b3JpY2FsIGRldmVsb3BtZW50cyBoYXZlIGJlZW4gc3VtbWFyaXplZCB0byBzaG9ydGVuIHRoZSAKKyAgIHRleHRzaXplIGEgYml0LiBBdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSB5b3UgY2FuIGZpbmQgYSBzbWFsbCBtYW51YWwgZm9yIAorICAgdGhpcyBkcml2ZXIgYW5kIGhpbnRzIHRvIGdldCBpdCBydW5uaW5nIG9uIHlvdXIgbWFjaGluZS4KKworICAgMiBEcml2ZXIgRGVzY3JpcHRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAyLjEgSUJNIFNDU0ktU3Vic3lzdGVtIERldGVjdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoaXMgaXMgZG9uZSBpbiB0aGUgaWJtbWNhX2RldGVjdCgpIGZ1bmN0aW9uLiBJdCBmaXJzdCBjaGVja3MsIGlmIHRoZQorICAgTWljcm9jaGFubmVsLWJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQsIGFzIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gbmVlZHMgdGhlCisgICBNaWNyb2NoYW5uZWwuIEluIGEgbmV4dCBzdGVwLCBhIGZyZWUgaW50ZXJydXB0IGlzIGNob3NlbiBhbmQgdGhlIG1haW4KKyAgIGludGVycnVwdCBoYW5kbGVyIGlzIGNvbm5lY3RlZCB0byBpdCB0byBoYW5kbGUgYW5zd2VycyBvZiB0aGUgU0NTSS0KKyAgIHN1YnN5c3RlbShzKS4gSWYgdGhlIEYvVyBTQ1NJLWFkYXB0ZXIgaXMgZm9yY2VkIGJ5IHRoZSBCSU9TIHRvIHVzZSBJUlExMQorICAgaW5zdGVhZCBvZiBJUlExNCwgSVJRMTEgaXMgdXNlZCBmb3IgdGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIuIEluIGEgCisgICBmdXJ0aGVyIHN0ZXAgaXQgaXMgY2hlY2tlZCwgaWYgdGhlIGFkYXB0ZXIgZ2V0cyBkZXRlY3RlZCBieSBmb3JjZSBmcm9tCisgICB0aGUga2VybmVsIGNvbW1hbmRsaW5lLCB3aGVyZSB0aGUgSS9PIHBvcnQgYW5kIHRoZSBTQ1NJLXN1YnN5c3RlbSBpZCBjYW4gCisgICBiZSBzcGVjaWZpZWQuIFRoZSBuZXh0IHN0ZXAgY2hlY2tzIGlmIHRoZXJlIGlzIGFuIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW0KKyAgIGluc3RhbGxlZC4gVGhpcyByZWdpc3RlciBhcmVhIGlzIGZpeGVkIHRocm91Z2ggYWxsIElCTSBQUy8yIE1DQS1tYWNoaW5lcyAKKyAgIGFuZCBhcHBlYXJzIGFzIHNvbWV0aGluZyBsaWtlIGEgdmlydHVhbCBzbG90IDEwIG9mIHRoZSBNQ0EtYnVzLiBPbiBtb3N0CisgICBQUy8yIG1hY2hpbmVzLCB0aGUgUE9TIHJlZ2lzdGVycyBvZiBzbG90IDEwIGFyZSBzZXQgdG8gMHhmZiBvciAweDAwIGlmIG5vdAorICAgaW50ZWdyYXRlZCBTQ1NJLWNvbnRyb2xsZXIgaXMgYXZhaWxhYmxlLiBCdXQgb24gY2VydGFpbiBQUy8ycywgbGlrZSBtb2RlbCAKKyAgIDk1OTUsIHRoaXMgc2xvdCAxMCBpcyB1c2VkIHRvIHN0b3JlIG90aGVyIGluZm9ybWF0aW9uIHdoaWNoIGF0IGVhcmxpZXIKKyAgIHN0YWdlIGNvbmZ1c2VkIHRoZSBkcml2ZXIgYW5kIHJlc3VsdGVkIGluIHRoZSBkZXRlY3Rpb24gb2Ygc29tZSBnaG9zdC1TQ1NJLiAKKyAgIElmIFBPUy1yZWdpc3RlciAyIGFuZCAzIGFyZSBub3QgMHgwMCBhbmQgbm90IDB4ZmYsIGJ1dCBhbGwgb3RoZXIgUE9TCisgICByZWdpc3RlcnMgYXJlIGVpdGhlciAweGZmIG9yIDB4MDAsIHRoZXJlIG11c3QgYmUgYW4gaW50ZWdyYXRlZCBTQ1NJLQorICAgc3Vic3lzdGVtIHByZXNlbnQgYW5kIGl0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyBJQk0gSW50ZWdyYXRlZCBTQ1NJLQorICAgU3Vic3lzdGVtLiBUaGUgbmV4dCBzdGVwIGNoZWNrcywgaWYgdGhlcmUgaXMgYSBzbG90LWFkYXB0ZXIgaW5zdGFsbGVkIG9uIAorICAgdGhlIE1DQS1idXMuIFRvIGdldCB0aGlzLCB0aGUgZmlyc3QgdHdvIFBPUy1yZWdpc3RlcnMsIHRoYXQgcmVwcmVzZW50IHRoZSAKKyAgIGFkYXB0ZXIgSUQgYXJlIGNoZWNrZWQuIElmIHRoZXkgZml0IHRvIG9uZSBvZiB0aGUgaWRzLCBzdG9yZWQgaW4gdGhlIAorICAgYWRhcHRlciBsaXN0LCBhIFNDU0ktc3Vic3lzdGVtIGlzIGFzc3VtZWQgdG8gYmUgZm91bmQgaW4gYSBzbG90IGFuZCB3aWxsIGJlIAorICAgcmVnaXN0ZXJlZC4gVGhpcyBjaGVjayBpcyBkb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIE1DQS1idXMgc2xvdHMgdG8gYWxsb3cgCisgICBtb3JlIHRoYW4gb25lIFNDU0ktYWRhcHRlciB0byBiZSBwcmVzZW50IGluIHRoZSBQUy8yLXN5c3RlbSBhbmQgdGhpcyBpcyAKKyAgIGFscmVhZHkgdGhlIGZpcnN0IHBvaW50IG9mIHByb2JsZW1zLiBMb29raW5nIGludG8gdGhlIHRlY2huaWNhbCByZWZlcmVuY2UgCisgICBtYW51YWwgZm9yIHRoZSBJQk0gUFMvMiBjb21tb24gaW50ZXJmYWNlcywgdGhlIFBPUzIgcmVnaXN0ZXIgbXVzdCBoYXZlIAorICAgZGlmZmVyZW50IGludGVycHJldGF0aW9uIG9mIGl0cyBzaW5nbGUgYml0cyB0byBhdm9pZCBvdmVybGFwcGluZyBJL08KKyAgIHJlZ2lvbnMuIFdoaWxlIG9uZSBjYW4gYXNzdW1lLCB0aGF0IHRoZSBpbnRlZ3JhdGVkIHN1YnN5c3RlbSBoYXMgYSBmaXggCisgICBJL08tYWRkcmVzcyBhdCAweDM1NDAgLSAweDM1NDcsIGZ1cnRoZXIgaW5zdGFsbGVkIElCTSBTQ1NJLWFkYXB0ZXJzIG11c3QgCisgICB1c2UgYSBkaWZmZXJlbnQgSS9PLWFkZHJlc3MuIFRoaXMgaXMgZXhwcmVzc2VkIGJ5IGJpdCAxIHRvIDMgb2YgUE9TMiAKKyAgIChtdWx0aXBsaWVkIGJ5IDggKyAweDM1NDApLiBCaXRzIDIgYW5kIDMgYXJlIHJlc2VydmVkIGZvciB0aGUgaW50ZWdyYXRlZCAKKyAgIHN1YnN5c3RlbSwgYnV0IG5vdCBmb3IgdGhlIGFkYXB0ZXJzISBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MsIGhvdyB0aGUgCisgICBiaXRzIG9mIFBPUzIgYW5kIFBPUzMgc2hvdWxkIGJlIGludGVycHJldGVkLgorICAgCisgICBUaGUgUE9TMi1yZWdpc3RlciBvZiBhbGwgUFMvMiBtb2RlbHMnIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW1zIGhhcyB0aGUgCisgICBmb2xsb3dpbmcgaW50ZXJwcmV0YXRpb24gb2YgYml0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNCA6IENoaXAgUmV2aXNpb24gSUQgKFJlbGVhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMyAtIDIgOiBSZXNlcnZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDEgICAgIDogOGsgTlZSQU0gRGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwICAgICA6IENoaXAgRW5hYmxlIChFTi1TaWduYWwpCisgICBUaGUgUE9TMy1yZWdpc3RlciBpcyBpbnRlcnByZXRlZCBhcyBmb2xsb3dzIChmb3IgbW9zdCBJQk0gU0NTSS1zdWJzeXMuKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNSA6IFNDU0kgSUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA0IC0gMCA6IFJlc2VydmVkID0gMAorICAgVGhlIHNsb3QtYWRhcHRlcnMgaGF2ZSBkaWZmZXJlbnQgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgYml0cy4gVGhlIElCTSBTQ1NJCisgICBhZGFwdGVyICh3L0NhY2hlKSBhbmQgdGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIgdXNlIHRoZSBmb2xsb3dpbmcKKyAgIGludGVycHJldGF0aW9uIG9mIHRoZSBQT1MyIHJlZ2lzdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDcgLSA0IDogUk9NIFNlZ21lbnQgQWRkcmVzcyBTZWxlY3QKKwkJCSAgIEJpdCAzIC0gMSA6IEFkYXB0ZXIgSS9PIEFkZHJlc3MgU2VsZWN0ICgqOCsweDM1NDApCisJCQkgICBCaXQgMCAgICAgOiBBZGFwdGVyIEVuYWJsZSAoRU4tU2lnbmFsKQorICAgYW5kIGZvciB0aGUgUE9TMyByZWdpc3RlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNSA6IFNDU0kgSUQgCisJCQkgICBCaXQgNCAgICAgOiBGYWlybmVzcyBFbmFibGUgKFNDU0kgSUQzIGYuIEYvVykKKwkJCSAgIEJpdCAzIC0gMCA6IEFyYml0cmF0aW9uIExldmVsCisgICBUaGUgbW9zdCBtb2Rlcm4gcHJvZHVjdCBvZiB0aGUgc2VyaWVzIGlzIHRoZSBJQk0gU0NTSS0yIEYvVyBhZGFwdGVyLCBpdCAKKyAgIGFsbG93cyBkdWFsLWJ1cyBTQ1NJIGFuZCBTQ1NJLXdpZGUgYWRkcmVzc2luZywgd2hpY2ggbWVhbnMsIFBVTnMgbWF5IGJlCisgICBiZXR3ZWVuIDAgYW5kIDE1LiBIZXJlLCBCaXQgNCBpcyB0aGUgaGlnaC1vcmRlciBiaXQgb2YgdGhlIDQtYml0IHdpZGUKKyAgIGFkYXB0ZXIgUFVOIGV4cHJlc3Npb24uIEluIHNob3J0IHdvcmRzLCB0aGlzIG1lYW5zLCB0aGF0IElCTSBQUy8yIG1hY2hpbmVzIAorICAgY2FuIG9ubHkgc3VwcG9ydCAxIHNpbmdsZSBpbnRlZ3JhdGVkIHN1YnN5c3RlbSBieSBkZWZhdWx0LiBBZGRpdGlvbmFsCisgICBzbG90LWFkYXB0ZXJzIGdldCBwb3J0cyBhc3NpZ25lZCBieSB0aGUgYXV0b21hdGljIGNvbmZpZ3VyYXRpb24gdG9vbC4KKworICAgT25lIGRheSBJIGZvdW5kIGEgcGF0Y2ggaW4gaWJtbWNhX2RldGVjdCgpLCBmb3JjaW5nIHRoZSBJL08tYWRkcmVzcyB0byBiZSAKKyAgIDB4MzU0MCBmb3IgaW50ZWdyYXRlZCBTQ1NJLXN1YnN5c3RlbXMsIHRoZXJlIHdhcyBhIHJlbWFyayBwbGFjZWQsIHRoYXQgb24gCisgICBpbnRlZ3JhdGVkIElCTSBTQ1NJLXN1YnN5c3RlbXMgb2YgbW9kZWwgNTYsIHRoZSBQT1MyIHJlZ2lzdGVyIHdhcyBzaG93aW5nIDUuCisgICBUaGlzIG1lYW5zLCB0aGF0IHJlYWxseSBmb3IgdGhlc2UgbW9kZWxzLCBQT1MyIGhhcyB0byBiZSBpbnRlcnByZXRlZAorICAgc3RpY2tpbmcgdG8gdGhlIHRlY2huaWNhbCByZWZlcmVuY2UgZ3VpZGUuIEluIHRoaXMgY2FzZSwgdGhlIGJpdCAyICg0KSBpcyAKKyAgIGEgcmVzZXJ2ZWQgYml0IGFuZCBtYXkgbm90IGJlIGludGVycHJldGVkLiBUaGVzZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSAKKyAgIGFkYXB0ZXJzIGFuZCB0aGUgaW50ZWdyYXRlZCBjb250cm9sbGVycyBhcmUgdGFrZW4gaW50byBhY2NvdW50IGJ5IHRoZSAKKyAgIGRldGVjdGlvbiByb3V0aW5lIG9mIHRoZSBkcml2ZXIgb24gZnJvbSB2ZXJzaW9uID4zLjBnLiAKKworICAgRXZlcnkgdGltZSwgYSBTQ1NJLXN1YnN5c3RlbSBpcyBkaXNjb3ZlcmVkLCB0aGUgaWJtbWNhX3JlZ2lzdGVyKCkgZnVuY3Rpb24KKyAgIGlzIGNhbGxlZC4gVGhpcyBmdW5jdGlvbiBjaGVja3MgZmlyc3QsIGlmIHRoZSByZXF1ZXN0ZWQgYXJlYSBmb3IgdGhlIEkvTy0KKyAgIGFkZHJlc3Mgb2YgdGhpcyBTQ1NJLXN1YnN5c3RlbSBpcyBzdGlsbCBhdmFpbGFibGUgYW5kIGFzc2lnbnMgdGhpcyBJL08tCisgICBhcmVhIHRvIHRoZSBTQ1NJLXN1YnN5c3RlbS4gVGhlcmUgYXJlIGFsd2F5cyA4IHNlcXVlbnRpYWwgSS9PLWFkZHJlc3NlcworICAgdGFrZW4gZm9yIGVhY2ggaW5kaXZpZHVhbCBTQ1NJLXN1YnN5c3RlbSBmb3VuZCwgd2hpY2ggYXJlOgorICAgCisgICAgIE9mZnNldCAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9ucworICAgICAgIDAgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDEgICAgUmVhZC9Xcml0ZQorICAgICAgIDEgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDIgICAgUmVhZC9Xcml0ZQorICAgICAgIDIgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDMgICAgUmVhZC9Xcml0ZQorICAgICAgIDMgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDQgICAgUmVhZC9Xcml0ZQorICAgICAgIDQgICAgIEF0dGVudGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgUmVhZC9Xcml0ZQorICAgICAgIDUgICAgIEJhc2ljIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgUmVhZC9Xcml0ZQorICAgICAgIDYgICAgIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgUmVhZAorICAgICAgIDcgICAgIEJhc2ljIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgUmVhZAorICAgCisgICBBZnRlciB0aGUgSS9PLWFkZHJlc3MgcmFuZ2UgaXMgYXNzaWduZWQsIHRoZSBob3N0LWFkYXB0ZXIgaXMgYXNzaWduZWQKKyAgIHRvIGEgbG9jYWwgc3RydWN0dXJlIHdoaWNoIGtlZXBzIGFsbCBhZGFwdGVyIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisgICBkcml2ZXIgaXRzZWxmIGFuZCB0aGUgbWlkLSBhbmQgaGlnaGVyLWxldmVsIFNDU0ktZHJpdmVycy4gVGhlIFNDU0kgcHVuL2x1bgorICAgYW5kIHRoZSBhZGFwdGVycycgbGRuIHRhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGdldCBwcm9iZWQgYWZ0ZXJ3YXJkcyBieQorICAgdGhlIGNoZWNrX2RldmljZXMoKSBmdW5jdGlvbi4gSWYgbm8gZnVydGhlciBhZGFwdGVycyBhcmUgZm91bmQsIAorICAgaWJtbWNhX2RldGVjdCgpIHF1aXRzLgorICAgCisgICAyLjIgUGh5c2ljYWwgVW5pdHMsIExvZ2ljYWwgVW5pdHMsIGFuZCBMb2dpY2FsIERldmljZXMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlcmUgY2FuIGJlIHVwIHRvIDU2IGRldmljZXMgb24gdGhlIFNDU0kgYnVzIChiZXNpZGVzIHRoZSBhZGFwdGVyKToKKyAgIHRoZXJlIGFyZSB1cCB0byA3ICJwaHlzaWNhbCB1bml0cyIgKGVhY2ggaWRlbnRpZmllZCBieSBwaHlzaWNhbCB1bml0IAorICAgbnVtYmVyIG9yIHB1biwgYWxzbyBjYWxsZWQgdGhlIHNjc2kgaWQsIHRoaXMgaXMgdGhlIG51bWJlciB5b3Ugc2VsZWN0CisgICB3aXRoIGhhcmR3YXJlIGp1bXBlcnMpLCBhbmQgZWFjaCBwaHlzaWNhbCB1bml0IGNhbiBoYXZlIHVwIHRvIDggCisgICAibG9naWNhbCB1bml0cyIgKGVhY2ggaWRlbnRpZmllZCBieSBsb2dpY2FsIHVuaXQgbnVtYmVyLCBvciBsdW4sIAorICAgYmV0d2VlbiAwIGFuZCA3KS4gVGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIgb2ZmZXJzIHRoaXMgb24gdXAgdG8gdHdvCisgICBidXNzZXMgYW5kIHByb3ZpZGVzIHN1cHBvcnQgZm9yIDMwIGxvZ2ljYWwgZGV2aWNlcyBhdCB0aGUgc2FtZSB0aW1lLCB3aGVyZQorICAgaW4gd2lkZS1hZGRyZXNzaW5nIG1vZGUgeW91IGNhbiBoYXZlIDE2IHB1bnMgd2l0aCAzMiBsdW5zIG9uIGVhY2ggZGV2aWNlLgorICAgVGhpcyBzZWN0aW9uIGRleHJpYmVzIHlvdSB0aGUgaGFuZGxpbmcgb2YgZGV2aWNlcyBvbiBub24tRi9XIGFkYXB0ZXJzLgorICAgSnVzdCBpbWFnaW5lLCB0aGF0IHlvdSBjYW4gaGF2ZSAxNiAqIDMyID0gNTEyIGRldmljZXMgb24gYSBGL1cgYWRhcHRlcgorICAgd2hpY2ggbWVhbnMgYSBsb3Qgb2YgcG9zc2libGUgZGV2aWNlcyBmb3Igc3VjaCBhIHNtYWxsIG1hY2hpbmUuCisKKyAgIFR5cGljYWxseSB0aGUgYWRhcHRlciBoYXMgcHVuPTcsIHNvIHB1bnMgb2Ygb3RoZXIgcGh5c2ljYWwgdW5pdHMKKyAgIGFyZSBiZXR3ZWVuIDAgYW5kIDYoMTUpLiBPbiBhIHdpZGUtYWRhcHRlciBhIHB1biBoaWdoZXIgdGhhbiA3IGlzCisgICBwb3NzaWJsZSwgYnV0IGlzIG5vcm1hbGx5IG5vdCB1c2VkLiBBbG1vc3QgYWxsIHBoeXNpY2FsIHVuaXRzIGhhdmUgb25seSAKKyAgIG9uZSBsb2dpY2FsIHVuaXQsIHdpdGggbHVuPTAuIEEgQ0QtUk9NIGp1a2Vib3ggd291bGQgYmUgYW4gZXhhbXBsZSBvZiBhIAorICAgcGh5c2ljYWwgdW5pdCB3aXRoIG1vcmUgdGhhbiBvbmUgbG9naWNhbCB1bml0LgorCisgICBUaGUgZW1iZWRkZWQgbWljcm9wcm9jZXNzb3Igb2YgdGhlIElCTSBTQ1NJLXN1YnN5c3RlbSBoaWRlcyB0aGUgY29tcGxleAorICAgdHdvLWRpbWVuc2lvbmFsIChwdW4sbHVuKSBvcmdhbml6YXRpb24gZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KKyAgIFdoZW4gdGhlIG1hY2hpbmUgaXMgcG93ZXJlZC11cCAob3IgcmVib290ZWQpLCB0aGUgZW1iZWRkZWQgbWljcm9wcm9jZXNzb3IgCisgICBjaGVja3MsIG9uIGl0cyBvd24sIGFsbCA1NiBwb3NzaWJsZSAocHVuLGx1bikgY29tYmluYXRpb25zLCBhbmQgdGhlIGZpcnN0IAorICAgMTUgZGV2aWNlcyBmb3VuZCBhcmUgYXNzaWduZWQgaW50byBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBvZiBzby1jYWxsZWQgCisgICAibG9naWNhbCBkZXZpY2VzIiwgaWRlbnRpZmllZCBieSAibG9naWNhbCBkZXZpY2UgbnVtYmVycyIgb3IgbGRuLiBUaGUgbGFzdCAKKyAgIGxkbj0xNSBpcyByZXNlcnZlZCBmb3IgdGhlIHN1YnN5c3RlbSBpdHNlbGYuIFdpZGUgYWRhcHRlcnMgbWF5IGhhdmUgCisgICB0byBjaGVjayB1cCB0byAxNSAqIDggPSAxMjAgcHVuL2x1biBjb21iaW5hdGlvbnMuCisgICAKKyAgIDIuMyBTQ1NJLURldmljZSBSZWNvZ25pdGlvbiBhbmQgRHluYW1pY2FsIGxkbiBBc3NpZ25tZW50CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgT25lIGNvbnNlcXVlbmNlIG9mIGluZm9ybWF0aW9uIGhpZGluZyBpcyB0aGF0IHRoZSByZWFsIChwdW4sbHVuKSAgICAKKyAgIG51bWJlcnMgYXJlIGFsc28gaGlkZGVuLiBUaGUgdHdvIHBvc3NpYmlsaXRpZXMgdG8gZ2V0IGFyb3VuZCB0aGlzIHByb2JsZW0KKyAgIGlzIHRvIG9mZmVyIGZha2UgcHVuL2x1biBjb21iaW5hdGlvbnMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgdG8gCisgICBkZWxldGUgdGhlIHdob2xlIG1hcHBpbmcgb2YgdGhlIGFkYXB0ZXIgYW5kIHRvIHJlYXNzaWduIHRoZSBsZG5zLCB1c2luZworICAgdGhlIGltbWVkaWF0ZSBhc3NpZ24gY29tbWFuZCBvZiB0aGUgU0NTSS1zdWJzeXN0ZW0gZm9yIHByb2JpbmcgdGhyb3VnaAorICAgYWxsIHBvc3NpYmxlIHB1bi9sdW4gY29tYmluYXRpb25zLiBhIGxkbiBpcyBhICJsb2dpY2FsIGRldmljZSBudW1iZXIiCisgICB3aGljaCBpcyB1c2VkIGJ5IElCTSBTQ1NJLXN1YnN5c3RlbXMgdG8gYWNjZXNzIHNvbWUgdmFsaWQgU0NTSS1kZXZpY2UuCisgICBBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlciwgdGhlIGZvbGxvd2luZyBhcHByb2FjaCAKKyAgIHdhcyB1c2VkOgorICAgCisgICBGaXJzdCwgdGhlIGRyaXZlciBjaGVja2VkIHRoZSBsZG4ncyAoMCB0byA2KSB0byBmaW5kIG91dCB3aGljaCBsZG4ncworICAgaGF2ZSBkZXZpY2VzIGFzc2lnbmVkLiBUaGlzIHdhcyBkb25lIGJ5IHRoZSBmdW5jdGlvbnMgY2hlY2tfZGV2aWNlcygpIGFuZAorICAgZGV2aWNlX2V4aXN0cygpLiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaGFzIGEgc3BlY2lhbCBwYXJhZ3JhcGggb2YgY29kZQorICAgKHNlZSBsb2NhbF9jaGVja2luZ19waGFzZV9mbGFnKSB0byBhc3Npc3QgaW4gdGhlIGNoZWNraW5nLiBBc3N1bWUsIGZvcgorICAgZXhhbXBsZSwgdGhhdCB0aHJlZSBsb2dpY2FsIGRldmljZXMgd2VyZSBmb3VuZCBhc3NpZ25lZCBhdCBsZG4gMCwgMSwgMi4KKyAgIFRoZXNlIGFyZSBwcmVzZW50ZWQgdG8gdGhlIHVwcGVyIGxheWVyIG9mIExpbnV4IFNDU0kgZHJpdmVyCisgICBhcyBkZXZpY2VzIHdpdGggYm9ndXMgKHB1biwgbHVuKSBlcXVhbCB0byAoMCwwKSwgKDEsMCksICgyLDApLiAKKyAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgdXBwZXIgbGF5ZXIgaXNzdWVzIGEgY29tbWFuZCB0byBkZXZpY2UKKyAgIHNheSAoNCwwKSwgdGhpcyBkcml2ZXIgcmV0dXJucyBESURfTk9fQ09OTkVDVCBlcnJvci4KKworICAgSW4gYSBzZWNvbmQgc3RlcCBvZiB0aGUgZHJpdmVyIGRldmVsb3BtZW50LCB0aGUgZm9sbG93aW5nIGltcHJvdmVtZW50IGhhcworICAgYmVlbiBhcHBsaWVkOiBUaGUgZmlyc3QgYXBwcm9hY2ggbGltaXRlZCB0aGUgbnVtYmVyIG9mIGRldmljZXMgdG8gNywgZmFyCisgICBmZXdlciB0aGFuIHRoZSAxNSB0aGF0IGl0IGNvdWxkIHVzZW0gdGhlbiBpdCBqdXN0IG1hcGVkIGxkbiAtPiAKKyAgIChsZG4vOCxsZG4lOCkgZm9yIHB1bixsdW4uICBXZSBlbmRlZCB1cCB3aXRoIGEgcmVhbCBtaXNobWFzaCBvZiBwdW5zCisgICBhbmQgbHVucywgYnV0IGl0IGFsbCBzZWVtZWQgdG8gd29yay4KKworICAgVGhlIGxhdGVzdCBkZXZlbG9wbWVudCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgZnJvbSB0aGUgZHJpdmVyIHZlcnNpb24gMy4wCisgICBhbmQgbGF0ZXIsIHJlYWxpemVzIHRoZSBkZXZpY2UgcmVjb2duaXRpb24gaW4gdGhlIGZvbGxvd2luZyB3YXk6CisgICBUaGUgcGh5c2ljYWwgU0NTSS1kZXZpY2VzIG9uIHRoZSBTQ1NJLWJ1cyBhcmUgcHJvYmVkIHZpYSBpbW1lZGlhdGVfYXNzaWduLSAKKyAgIGFuZCBkZXZpY2VfaW5xdWlyeS1jb21tYW5kcywgdGhhdCBpcyBhbGwgaW1wbGVtZW50ZWQgaW4gYSBjb21wbGV0ZWx5IG5ldworICAgbWFkZSBjaGVja19kZXZpY2VzKCkgc3Vicm91dGluZS4gVGhpcyBkZWxpdmVycyBhbiBleGFjdCBtYXAgb2YgdGhlIHBoeXNpY2FsCisgICBTQ1NJLXdvcmxkIHRoYXQgaXMgbm93IHN0b3JlZCBpbiB0aGUgZ2V0X3Njc2lbXVtdLWFycmF5LiBUaGlzIG1lYW5zLAorICAgdGhhdCB0aGUgb25jZSBoaWRkZW4gcHVuLGx1biBhc3NpZ25tZW50IGlzIG5vdyBrbm93biB0byB0aGlzIGRyaXZlci4KKyAgIEl0IG5vIGxvbmdlciBiZWxpZXZlcyBpbiBkZWZhdWx0LXNldHRpbmdzIG9mIHRoZSBzdWJzeXN0ZW0gYW5kIG1hcHMgYWxsCisgICBsZG5zIHRvIGV4aXN0aW5nIHB1bixsdW4gImJ5IGZvb3QiLiBUaGlzIGFzc3VyZXMgZnVsbCBjb250cm9sIG9mIHRoZSBsZG4KKyAgIG1hcHBpbmcgYW5kIGFsbG93cyBkeW5hbWljYWwgcmVtYXBwaW5nIG9mIGxkbnMgdG8gZGlmZmVyZW50IHB1bixsdW4sIGlmCisgICB0aGVyZSBhcmUgbW9yZSBTQ1NJLWRldmljZXMgaW5zdGFsbGVkIHRoYW4gbGRucyBhdmFpbGFibGUgKG4+MTUpLiBUaGUKKyAgIGxkbnMgZnJvbSAwIHRvIDYgZ2V0ICdoYXJkd2lyZWQnIGJ5IHRoaXMgZHJpdmVyIHRvIHB1bnMgMCB0byA3IGF0IGx1bj0wLAorICAgZXhjbHVkaW5nIHRoZSBwdW4gb2YgdGhlIHN1YnN5c3RlbS4gVGhpcyBhc3N1cmVzLCB0aGF0IGF0IGxlYXN0IHNpbXBsZSAKKyAgIFNDU0ktaW5zdGFsbGF0aW9ucyBoYXZlIG9wdGltdW0gYWNjZXNzLXNwZWVkIGFuZCBhcmUgbm90IHRvdWNoZWQgYnkKKyAgIGR5bmFtaWNhbCByZW1hcHBpbmcuIFRoZSBsZG5zIDcgdG8gMTQgYXJlIHB1dCB0byBleGlzdGluZyBkZXZpY2VzIHdpdGggCisgICBsdW4+MCBvciB0byBub24tZXhpc3RpbmcgZGV2aWNlcywgaW4gb3JkZXIgdG8gc2F0aXNmeSB0aGUgc3Vic3lzdGVtLCBpZiAKKyAgIHRoZXJlIGFyZSBsZXNzIHRoYW4gMTUgU0NTSS1kZXZpY2VzIGNvbm5lY3RlZC4gSW4gdGhlIGNhc2Ugb2YgbW9yZSB0aGFuIDE1IAorICAgZGV2aWNlcywgdGhlIGR5bmFtaWNhbCBtYXBwaW5nIGdvZXMgYWN0aXZlLiBJZiB0aGUgZ2V0X3Njc2lbXVtdIHJlcG9ydHMgYSAKKyAgIGRldmljZSB0byBiZSBleGlzdGFudCwgYnV0IGl0IGhhcyBubyBsZG4gYXNzaWduZWQsIGl0IGdldHMgYSBsZG4gb3V0IG9mIDcgCisgICB0byAxNC4gVGhlIG51bWJlcnMgYXJlIGFzc2lnbmVkIGluIGN5Y2xpYyBvcmRlci4gVGhlcmVmb3JlIGl0IHRha2VzIDggCisgICBkeW5hbWljYWwgcmVhc3NpZ25tZW50cyBvbiB0aGUgU0NTSS1kZXZpY2VzLCB1bnRpbCBhIGNlcnRhaW4gZGV2aWNlIAorICAgbG9zZXMgaXRzIGxkbiBhZ2Fpbi4gVGhpcyBhc3N1cmVzLCB0aGF0IGR5bmFtaWNhbCByZW1hcHBpbmcgaXMgYXZvaWRlZCAKKyAgIGR1cmluZyBpbnRlbnNlIEkvTyBiZXR3ZWVuIHVwIHRvIDE1IFNDU0ktZGV2aWNlcyAobWVhbnMgcHVuLGx1biAKKyAgIGNvbWJpbmF0aW9ucykuIEEgZnVydGhlciBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMsIHRoYXQgcGVvcGxlIHdobworICAgYnVpbGQgdGhlaXIga2VybmVsIHdpdGhvdXQgcHJvYmluZyBvbiBhbGwgbHVucyB3aWxsIGdldCB3aGF0IHRoZXkgZXhwZWN0LAorICAgYmVjYXVzZSB0aGUgZHJpdmVyIGp1c3Qgd29uJ3QgYXNzaWduIGV2ZXJ5dGhpbmcgd2l0aCBsdW4+MCB3aGVuIAorICAgbXVsdHBpbGUgbHVuIHByb2JpbmcgaXMgaW5hY3RpdmUuCisgCisgICAyLjQgU0NTSS1EZXZpY2UgT3JkZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQmVjYXVzZSBvZiB0aGUgbm93IGNvcnJlY3QgcmVjb2duaXRpb24gb2YgcGh5c2ljYWwgcHVuLGx1biwgYW5kIAorICAgdGhlaXIgcmVwb3J0IHRvIG1pZC1sZXZlbC0gYW5kIGhpZ2hlci1sZXZlbC1kcml2ZXJzLCB0aGUgbmV3IHJlcG9ydGVkIHB1bnMKKyAgIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkLCBmYWtlZCBwdW5zLiBUaGVyZWZvcmUsIExpbnV4IHdpbGwgZXZlbnR1YWxseQorICAgY2hhbmdlIC9kZXYvc2RYWFggYXNzaWdubWVudHMgYW5kIHByb21wdCB5b3UgZm9yIGNvcnJ1cHRlZCBzdXBlcmJsb2NrCisgICByZXBhaXIgb24gYm9vdHRpbWUuIEluIHRoaXMgY2FzZSBETyBOT1QgUEFOSUMsIFlPVVIgRElTS1MgQVJFIFNUSUxMIE9LISEhCisgICBZb3UgaGF2ZSB0byByZWJvb3QgKENUUkwtRCkgd2l0aCBhbiBvbGQga2VybmVsIGFuZCBzZXQgdGhlIC9ldGMvZnN0YWItZmlsZQorICAgZW50cmllcyByaWdodC4gQWZ0ZXIgdGhhdCwgdGhlIHN5c3RlbSBzaG91bGQgY29tZSB1cCBhcyBlcnJvcmZyZWUgYXMgYmVmb3JlLgorICAgSWYgeW91ciBib290LXBhcnRpdGlvbiBpcyBub3QgY29taW5nIHVwLCBhbHNvIGVkaXQgdGhlIC9ldGMvbGlsby5jb25mLWZpbGUKKyAgIGluIGEgTGludXggc2Vzc2lvbiBib290ZWQgb24gb2xkIGtlcm5lbCBhbmQgcnVuIGxpbG8gYmVmb3JlIHJlYm9vdC4gQ2hlY2sKKyAgIGxpbG8uY29uZiBhbnl3YXkgdG8gZ2V0IGJvb3Qgb24gb3RoZXIgcGFydGl0aW9ucyB3aXRoIGZvcmVpZ24gT1NlcyByaWdodAorICAgYWdhaW4uIEJ1dCB0aGVyZSBleGlzdHMgYSBmZWF0dXJlIG9mIHRoaXMgZHJpdmVyIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UKKyAgIHRoZSBhc3NpZ25tZW50IG9yZGVyIG9mIHRoZSBTQ1NJLWRldmljZXMgYnkgZmxpcHBpbmcgdGhlIFBVTi1hc3NpZ25tZW50LgorICAgU2VlIHRoZSBuZXh0IHBhcmFncmFwaCBmb3IgYSBkZXNjcmlwdGlvbi4KKyAKKyAgIFRoZSBwcm9ibGVtIGZvciB0aGlzIGlzLCB0aGF0IExpbnV4IGRvZXMgbm90IGFzc2lnbiB0aGUgU0NTSS1kZXZpY2VzIGluIHRoZQorICAgd2F5IGFzIGRlc2NyaWJlZCBpbiB0aGUgQU5TSS1TQ1NJLXN0YW5kYXJkLiBMaW51eCBhc3NpZ25zIC9kZXYvc2RhIHRvIAorICAgdGhlIGRldmljZSB3aXRoIGF0IG1pbmltdW0gaWQgMC4gQnV0IHRoZSBmaXJzdCBkcml2ZSBzaG91bGQgYmUgYXQgaWQgNiwKKyAgIGJlY2F1c2UgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgZHJpdmUgYXQgaWQgNiBoYXMsIGJ5IGhhcmR3YXJlLCB0aGUgaGlnaGVzdAorICAgcHJpb3JpdHkgYW5kIGEgZHJpdmUgYXQgaWQgMCB0aGUgbG93ZXN0LiBJQk0gd2FzIG9uZSBvZiB0aGUgcmFyZSBwcm9kdWNlcnMsCisgICB3aGVyZSB0aGUgQklPUyBhc3NpZ25zIGRyaXZlcyBiZWxvbmdpbmcgdG8gdGhlIEFOU0ktU0NTSS1zdGFuZGFyZC4gTW9zdCAKKyAgIG90aGVyIHByb2R1Y2VycycgQklPUyBkb2VzIG5vdCAoSSB0aGluayBldmVuIEFkYXB0ZWMtQklPUykuIFRoZSAKKyAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIGZsYWcsIHdoaWNoIHlvdSBzZXQgd2hpbGUgY29uZmlndXJpbmcgdGhlCisgICBrZXJuZWwgZW5hYmxlcyB0byBjaG9vc2UgdGhlIHByZWZlcnJlZCB3YXkgb2YgU0NTSS1kZXZpY2UtYXNzaWdubWVudC4gCisgICBEZWZpbmluZyB0aGlzIGZsYWcgd291bGQgcmVzdWx0IGluIExpbnV4IGRldGVybWluaW5nIHRoZSBkZXZpY2VzIGluIHRoZSAKKyAgIHNhbWUgb3JkZXIgYXMgRE9TIGFuZCBPUy8yIGRvZXMgb24geW91ciBNQ0EtbWFjaGluZS4gVGhpcyBpcyBhbHNvIHN0YW5kYXJkIAorICAgb24gbW9zdCBpbmR1c3RyaWFsIGNvbXB1dGVycyBhbmQgT1NlcywgbGlrZSBlLmcuIE9TLTkuIExlYXZpbmcgdGhpcyBmbGFnIAorICAgdW5kZWZpbmVkIHdpbGwgZ2V0IHlvdXIgZGV2aWNlcyBvcmRlcmVkIGluIHRoZSBkZWZhdWx0IHdheSBvZiBMaW51eC4gU2VlIAorICAgYWxzbyB0aGUgcmVtYXJrcyBvZiBDaHJpcyBCZWF1cmVnYXJkIGZyb20gRGVjIDE1LCAxOTk3IGFuZCB0aGUgZm9sbG93dXBzIAorICAgaW4gc2VjdGlvbiAzLgorICAgCisgICAyLjUgUmVndWxhciBTQ1NJLUNvbW1hbmQtUHJvY2Vzc2luZworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE9ubHkgdGhyZWUgZnVuY3Rpb25zIGdldCBpbnZvbHZlZDogaWJtbWNhX3F1ZXVlY29tbWFuZCgpLCBpc3N1ZV9jbWQoKSwKKyAgIGFuZCBpbnRlcnJ1cHRfaGFuZGxlcigpLgorCisgICBUaGUgdXBwZXIgbGF5ZXIgaXNzdWVzIGEgc2NzaSBjb21tYW5kIGJ5IGNhbGxpbmcgZnVuY3Rpb24gCisgICBpYm1tY2FfcXVldWVjb21tYW5kKCkuIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAic3Vic3lzdGVtIGNvbnRyb2wgYmxvY2siCisgICAoc2NiKSBhbmQgY2FsbHMgYSBsb2NhbCBmdW5jdGlvbiBpc3N1ZV9jbWQoKSwgd2hpY2ggd3JpdGVzIGEgc2NiIAorICAgY29tbWFuZCBpbnRvIHN1YnN5c3RlbSBJL08gcG9ydHMuIE9uY2UgdGhlIHNjYiBjb21tYW5kIGlzIGNhcnJpZWQgb3V0LCAKKyAgIHRoZSBpbnRlcnJ1cHRfaGFuZGxlcigpIGlzIGludm9rZWQuIElmIGEgZGV2aWNlIGlzIGRldGVybWluZWQgdG8gYmUgCisgICBleGlzdGFudCBhbmQgaXQgaGFzIG5vdCBhc3NpZ25lZCBhbnkgbGRuLCBpdCBnZXRzIG9uZSBkeW5hbWljYWxseS4KKyAgIEZvciB0aGlzLCB0aGUgd2hvbGUgc3R1ZmYgaXMgZG9uZSBpbiBpYm1tY2FfcXVldWVjb21tYW5kKCkuCisKKyAgIDIuNiBBYm9ydCAmIFJlc2V0IENvbW1hbmRzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlc2UgYXJlIGltcGxlbWVudGVkIHdpdGggYnVzeSB3YWl0aW5nIGZvciBpbnRlcnJ1cHQgdG8gYXJyaXZlLgorICAgaWJtbWNhX3Jlc2V0KCkgYW5kIGlibW1jYV9hYm9ydCgpIGRvIG5vdCB3b3JrIHN1ZmZpY2VudGx5IHdlbGwKKyAgIHVwIHRvIG5vdyBhbmQgbmVlZCBzdGlsbCBhIGxvdCBvZiBkZXZlbG9wbWVudCB3b3JrLiBCdXQsIHRoaXMgc2VlbXMKKyAgIHRvIGJlIGV2ZW4gYSBwcm9ibGVtIHdpdGggb3RoZXIgU0NTSS1sb3cgbGV2ZWwgZHJpdmVycywgdG9vLiBIb3dldmVyLAorICAgdGhpcyBzaG91bGQgYmUgbm8gZXhjdXNlLgorCisgICAyLjcgRGlzayBHZW9tZXRyeQorICAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZSBpYm1tY2FfYmlvc3BhcmFtcygpIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgZGlzayBnZW9tZXRyeSAKKyAgIGFzIHRoZSBiaW9zLiBUaGlzIGlzIG5lZWRlZCBmb3IgZmRpc2ssIGV0Yy4gVGhlIHJldHVybmVkIGdlb21ldHJ5IGlzIAorICAgY2VydGFpbmx5IGNvcnJlY3QgZm9yIGRpc2tzIHNtYWxsZXIgdGhhbiAxIGdpZ2FieXRlLiBJbiB0aGUgbWVhbnRpbWUsCisgICBpdCBoYXMgYmVlbiBwcm92ZWQsIHRoYXQgdGhpcyB3b3JrcyBmaW5lIGV2ZW4gd2l0aCBkaXNrcyBsYXJnZXIgdGhhbgorICAgMSBnaWdhYnl0ZS4KKworICAgMi44IEtlcm5lbCBCb290IE9wdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlIGZ1bmN0aW9uIGlibW1jYV9zY3NpX3NldHVwKCkgaXMgY2FsbGVkIGlmIG9wdGlvbiBpYm1tY2FzY3NpPW4gCisgICBpcyBwYXNzZWQgdG8gdGhlIGtlcm5lbC4gU2VlIGZpbGUgbGludXgvaW5pdC9tYWluLmMgZm9yIGRldGFpbHMuCisgICAKKyAgIDIuOSBEcml2ZXIgTW9kdWxlIFN1cHBvcnQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIElzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgYnkgSy4gS3VkaWVsa2EuIFRoaXMgY291bGQgcHJvYmFibHkgbm90IHdvcmsKKyAgIG9uIGtlcm5lbHMgPDIuMS4wLgorICAKKyAgIDIuMTAgTXVsdGlwbGUgSG9zdGFkYXB0ZXIgU3VwcG9ydAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB1cCB0byBlaWdodCBpbnRlcmZhY2VzIG9mIHR5cGUgSUJNLVNDU0ktU3Vic3lzdGVtLiAKKyAgIEludGVncmF0ZWQtLCBhbmQgTUNBLWFkYXB0ZXJzIGFyZSBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZWQuIFVucmVjb2duaXphYmxlCisgICBJQk0tU0NTSS1TdWJzeXN0ZW0gaW50ZXJmYWNlcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGtlcm5lbC1wYXJhbWV0ZXJzLgorIAorICAgMi4xMSAvcHJvYy9zY3NpLUZpbGVzeXN0ZW0gSW5mb3JtYXRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJpdmVyIGNvbmRpdGlvbiBpcyBnaXZlbiBpbiAKKyAgIC9wcm9jL3Njc2kvaWJtbWNhLzxob3N0X25vPi4gaWJtbWNhX3Byb2NfaW5mbygpIHByb3ZpZGVzIHRoaXMgaW5mb3JtYXRpb24uCisgICAKKyAgIFRoaXMgdGFibGUgaXMgcXVpdGUgaW5mb3JtYXRpdmUgZm9yIGludGVyZXN0ZWQgdXNlcnMuIEl0IHNob3dzIHRoZSBsb2FkCisgICBvZiBjb21tYW5kcyBvbiB0aGUgc3Vic3lzdGVtIGFuZCB3ZXRoZXIgeW91IGFyZSBydW5uaW5nIHRoZSBieXBhc3NlZCAKKyAgIChzb2Z0d2FyZSkgb3IgaW50ZWdyYXRlZCAoaGFyZHdhcmUpIFNDU0ktY29tbWFuZCBzZXQgKHNlZSBiZWxvdykuIFRoZQorICAgYW1vdW50IG9mIGFjY2Vzc2VzIGlzIHNob3duLiBSZWFkLCB3cml0ZSwgbW9kZXNlbGVjdCBpcyBzaG93biBzZXBhcmF0ZWx5CisgICBpbiBvcmRlciB0byBoZWxwIGRlYnVnZ2luZyBwcm9ibGVtcyB3aXRoIENELVJPTXMgb3IgdGFwZWRyaXZlcy4KKyAgIAorICAgVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbGlzdCBvZiAxNSBsb2dpY2FsIGRldmljZSBudW1iZXJzLCB0aGF0IGFyZQorICAgdXNlZCBieSB0aGUgU0NTSS1zdWJzeXN0ZW0uIFRoZSBsb2FkIG9uIGVhY2ggbGRuIGlzIHNob3duIGluIHRoZSB0YWJsZSwKKyAgIGFnYWluLCByZWFkIGFuZCB3cml0ZSBjb21tYW5kcyBhcmUgc3BsaXQuIFRoZSBsYXN0IGNvbHVtbiBzaG93cyB0aGUgYW1vdW50CisgICBvZiByZWFzc2lnbm1lbnRzLCB0aGF0IGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoZSBsZG5zLCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4KKyAgIDE1IHB1bi9sdW4gY29tYmluYXRpb25zIGF2YWlsYWJsZSBvbiB0aGUgU0NTSS1idXMuCisgICAKKyAgIFRoZSBsYXN0IHR3byB0YWJsZXMgc2hvdyB0aGUgcHVuL2x1biBtYXAgYW5kIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGxkbnMKKyAgIG9uIHRoaXMgcHVuL2x1biBtYXAuIFRoaXMgbWF5IGNoYW5nZSBkdXJpbmcgb3BlcmF0aW9uLCB3aGVuIGEgbGRuIGlzCisgICByZWFzc2lnbmVkIHRvIGFub3RoZXIgcHVuL2x1biBjb21iaW5hdGlvbi4gSWYgdGhlIG5lY2Vzc2l0eSBmb3IgZHluYW1pY2FsCisgICBhc3NpZ25tZW50cyBpcyBzZXQgdG8gJ25vJywgdGhlIGxkbiBzdHJ1Y3R1cmUga2VlcHMgc3RhdGljLgorICAgCisgICAyLjEyIC9wcm9jL21jYS1GaWxlc3lzdGVtIEluZm9ybWF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgc2xvdC1maWxlIGNvbnRhaW5zIGFsbCBkZWZhdWx0IGVudHJpZXMgYW5kIGluIGFkZGl0aW9uIGNoaXAgYW5kIEkvTy0KKyAgIGFkZHJlc3MgaW5mb3JtYXRpb24gb2YgdGhlIFNDU0ktc3Vic3lzdGVtLiBUaGlzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkCisgICBieSBpYm1tY2FfZ2V0aW5mbygpLgorICAgCisgICAyLjEzIFN1cHBvcnRlZCBJQk0gU0NTSS1TdWJzeXN0ZW1zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgZm9sbG93aW5nIElCTSBTQ1NJLXN1YnN5c3RlbXMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjoKKyAgIAorICAgICAtIElCTSBGYXN0L1dpZGUgU0NTSS0yIEFkYXB0ZXIKKyAgICAgLSBJQk0gNzU2OCBJbmR1c3RyaWFsIENvbXB1dGVyIFNDU0kgQWRhcHRlciB3L0NhY2hlCisgICAgIC0gSUJNIEV4cGFuc2lvbiBVbml0IFNDU0kgQ29udHJvbGxlcgorICAgICAtIElCTSBTQ1NJIEFkYXB0ZXIgdy9DYWNoZQorICAgICAtIElCTSBTQ1NJIEFkYXB0ZXIKKyAgICAgLSBJQk0gSW50ZWdyYXRlZCBTQ1NJIENvbnRyb2xsZXIKKyAgICAgLSBBbGwgY2xvbmVzLCAxMDAlIGNvbXBhdGlibGUgd2l0aCB0aGUgY2hpcHNldCBhbmQgc3Vic3lzdGVtIGNvbW1hbmQKKyAgICAgICBzeXN0ZW0gb2YgSUJNIFNDU0ktYWRhcHRlcnMgKGZvcmNlZCBkZXRlY3Rpb24pCisgICAgIAorICAgMi4xNCBMaW51eCBLZXJuZWwgVmVyc2lvbnMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgSUJNIFNDU0ktc3Vic3lzdGVtIGxvdyBsZXZlbCBkcml2ZXIgaXMgcHJlcGFyZWQgdG8gYmUgdXNlZCB3aXRoCisgICBhbGwgdmVyc2lvbnMgb2YgTGludXggYmV0d2VlbiAyLjAueCBhbmQgMi40LnguIFRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcworICAgYXJlIGZ1bGx5IGltcGxlbWVudGVkIHVwIGZyb20gdmVyc2lvbiAzLjFlIG9mIHRoZSBkcml2ZXIuIFRoaXMgbWVhbnMsIHRoYXQKKyAgIHlvdSBqdXN0IG5lZWQgdGhlIGxhdGVzdCBpYm1tY2EuaCBhbmQgaWJtbWNhLmMgZmlsZSBhbmQgY29weSBpdCBpbiB0aGUKKyAgIGxpbnV4L2RyaXZlcnMvc2NzaSBkaXJlY3RvcnkuIFRoZSBjb2RlIGlzIGF1dG9tYXRpY2FsbHkgYWRhcHRlZCBkdXJpbmcgCisgICBrZXJuZWwgY29tcGlsYXRpb24uIFRoaXMgaXMgZGlmZmVyZW50IGZyb20ga2VybmVsIDIuNC4wISBIZXJlIHZlcnNpb24gCisgICA0LjAgb3IgbGF0ZXIgb2YgdGhlIGRyaXZlciBtdXN0IGJlIHVzZWQgZm9yIGtlcm5lbCAyLjQuMCBvciBsYXRlci4gVmVyc2lvbgorICAgNC4wIG9yIGxhdGVyIGRvZXMgbm90IHdvcmsgdG9nZXRoZXIgd2l0aCBvbGRlciBrZXJuZWxzISBEcml2ZXIgdmVyc2lvbnMKKyAgIG9sZGVyIHRoYW4gNC4wIGRvIG5vdCB3b3JrIHRvZ2V0aGVyIHdpdGgga2VybmVsIDIuNC4wIG9yIGxhdGVyLiBUaGV5IHdvcmsKKyAgIG9uIGFsbCBvbGRlciBrZXJuZWxzLgorCisgICAzIENvZGUgSGlzdG9yeQorICAgLS0tLS0tLS0tLS0tLS0KKyAgIEphbiAxNSAxOTk2OiAgRmlyc3QgcHVibGljIHJlbGVhc2UuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEphbiAyMyAxOTk2OiAgU2NyYXBwZWQgY29kZSB3aGljaCByZWFzc2lnbmVkIHNjc2kgZGV2aWNlcyB0byBsb2dpY2FsCisgICBkZXZpY2UgbnVtYmVycy4gSW5zdGVhZCwgdGhlIGV4aXN0aW5nIGFzc2lnbm1lbnQgKGNyZWF0ZWQKKyAgIHdoZW4gdGhlIG1hY2hpbmUgaXMgcG93ZXJlZC11cCBvciByZWJvb3RlZCkgaXMgdXNlZC4gCisgICBBIHNpZGUgZWZmZWN0IGlzIHRoYXQgdGhlIHVwcGVyIGxheWVyIG9mIExpbnV4IFNDU0kgCisgICBkZXZpY2UgZHJpdmVyIGdldHMgYm9ndXMgc2NzaSBpZHMgKHRoaXMgaXMgYmVuaWduKSwgCisgICBhbmQgYWxzbyB0aGUgaGFyZCBkaXNrcyBhcmUgb3JkZXJlZCB1bmRlciBMaW51eCB0aGUgCisgICBzYW1lIHdheSBhcyB0aGV5IGFyZSB1bmRlciBkb3MgKGkuZS4sIEM6IGRpc2sgaXMgc2RhLCAKKyAgIEQ6IGRpc2sgaXMgc2RiLCBldGMuKS4KKyAgIC0gTWFydGluIEtvbGluZWsKKworICAgSSB0aGluayB0aGF0IHRoZSBDRC1ST00gaXMgbm93IGRldGVjdGVkIG9ubHkgaWYgYSBDRCBpcyAKKyAgIGluc2lkZSBDRF9ST00gd2hpbGUgTGludXggYm9vdHMuIFRoaXMgY2FuIGJlIGZpeGVkIGxhdGVyLAorICAgb25jZSB0aGUgZHJpdmVyIHdvcmtzIG9uIGFsbCB0eXBlcyBvZiBQUy8yJ3MuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEZlYiA3IDE5OTY6ICAgTW9kaWZpZWQgYmlvc3BhcmFtIGZ1bmN0aW9uLiBGaXhlZCB0aGUgQ0QtUk9NIGRldGVjdGlvbi4gCisgICBGb3Igbm93LCBkZXZpY2VzIG90aGVyIHRoYW4gaGFyZGRpc2sgYW5kIENEX1JPTSBhcmUgCisgICBpZ25vcmVkLiBUZW1wb3JhcmlseSBtb2RpZmllZCBhYm9ydCgpIGZ1bmN0aW9uIAorICAgdG8gYmVoYXZlIGxpa2UgcmVzZXQoKS4KKyAgIC0gTWFydGluIEtvbGluZWsKKworICAgTWFyIDMxIDE5OTY6ICBUaGUgaW50ZWdyYXRlZCBzY3NpIHN1YnN5c3RlbSBpcyBjb3JyZWN0bHkgZm91bmQKKyAgIGluIFBTLzIgbW9kZWxzIDU2LDU3LCBidXQgbm90IGluIG1vZGVsIDc2LiBUaGVyZWZvcmUKKyAgIHRoZSBpYm1tY2Ffc2NzaV9zZXR1cCgpIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIHRvZGF5LgorICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gZm9yY2UgZGV0ZWN0aW9uIG9mCisgICBzY3NpIHN1YnN5c3RlbS4gVGhlIGtlcm5lbCBvcHRpb24gaGFzIGZvcm1hdAorICAgaWJtbWNhc2NzaT1uCisgICB3aGVyZSBuIGlzIHRoZSBzY3NpX2lkIChwdW4pIG9mIHRoZSBzdWJzeXN0ZW0uIE1vc3QgbGlrZWx5LCBuIGlzIDcuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEF1ZyAyMSAxOTk2OiAgTW9kaWZpZWQgdGhlIGNvZGUgd2hpY2ggbWFwcyBsZG5zIHRvIChwdW4sMCkuICBJdCB3YXMKKyAgIGluc3VmZmljaWVudCBmb3IgdGhvc2Ugb2YgdXMgd2l0aCBDRC1ST00gY2hhbmdlcnMuCisgICAtIENocmlzIEJlYXVyZWdhcmQKKyAKKyAgIERlYyAxNCAxOTk2OiBNb3JlIGltcHJvdmVtZW50cyB0byB0aGUgbGRuIG1hcHBpbmcuICBTZWUgY2hlY2tfZGV2aWNlcworICAgZm9yIGRldGFpbHMuICBEaWQgbW9yZSBmaWRkbGluZyB3aXRoIHRoZSBpbnRlZ3JhdGVkIFNDU0kgZGV0ZWN0aW9uLAorICAgYnV0IEkgdGhpbmsgaXQncyB1bHRpbWF0ZWx5IGhvcGVsZXNzIHdpdGhvdXQgYWN0dWFsbHkgdGVzdGluZyB0aGUKKyAgIG1vZGVsIG9mIHRoZSBtYWNoaW5lLiAgVGhlIDU2LCA1NywgNzYgYW5kIDk1ICh1bHRpbWVkaWEpIGFsbCBoYXZlCisgICBkaWZmZXJlbnQgaW50ZWdyYXRlZCBTQ1NJIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb25zLiAgSG93ZXZlciwgdGhlIDU2CisgICBhbmQgNTcgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBoYXZlIHByb2JsZW1zIHdpdGggZm9yY2VkIGRldGVjdGlvbi4KKyAgIC0gQ2hyaXMgQmVhdXJlZ2FyZAorIAorICAgTWFyIDgtMTYgMTk5NzogTW9kaWZpZWQgZHJpdmVyIHRvIHJ1biBhcyBhIG1vZHVsZSBhbmQgdG8gc3VwcG9ydCAKKyAgIG11bHRpcGxlIGFkYXB0ZXJzLiBBIHN0cnVjdHVyZSwgY2FsbGVkIGlibW1jYV9ob3N0ZGF0YSwgaXMgbm93CisgICBwcmVzZW50LCBjb250YWluaW5nIGFsbCB0aGUgdmFyaWFibGVzLCB0aGF0IHdlcmUgb25jZSBvbmx5CisgICBhdmFpbGFibGUgZm9yIG9uZSBzaW5nbGUgYWRhcHRlci4gVGhlIGZpbmRfc3Vic3lzdGVtLXJvdXRpbmUgaGFzIHZhbmlzaGVkLgorICAgVGhlIGhhcmR3YXJlIHJlY29nbml0aW9uIGlzIG5vdyBkb25lIGluIGlibW1jYV9kZXRlY3QgZGlyZWN0bHkuCisgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGZvciBwcmVzZW5jZSBvZiBNQ0EtYnVzLCBjaGVja3MgdGhlIGludGVycnVwdAorICAgbGV2ZWwgYW5kIGNvbnRpbnVlcyB3aXRoIGNoZWNraW5nIHRoZSBpbnN0YWxsZWQgaGFyZHdhcmUuCisgICBDZXJ0YWluIFBTLzItbW9kZWxzIGRvIG5vdCByZWNvZ25pemUgYSBTQ1NJLXN1YnN5c3RlbSBhdXRvbWF0aWNhbGx5LgorICAgSGVuY2UsIHRoZSBzZXR1cCBkZWZpbmVkIGJ5IGNvbW1hbmQtbGluZS1wYXJhbWV0ZXJzIGlzIGNoZWNrZWQgZmlyc3QuCisgICBUaGVyZWFmdGVyLCB0aGUgcm91dGluZSBwcm9iZXMgZm9yIGFuIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW0uCisgICBGaW5hbGx5LCBhZGFwdGVycyBhcmUgY2hlY2tlZC4gVGhpcyBtZXRob2QgaGFzIHRoZSBhZHZhbnRhZ2UgdG8gY292ZXIgYWxsCisgICBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgbXVsdGlwbGUgU0NTSS1zdWJzeXN0ZW1zIG9uIG9uZSBNQ0EtYm9hcmQuIFVwIHRvCisgICBlaWdodCBTQ1NJLXN1YnN5c3RlbXMgY2FuIGJlIHJlY29nbml6ZWQgYW5kIGFubm91bmNlZCB0byB0aGUgdXBwZXItbGV2ZWwKKyAgIGRyaXZlcnMgd2l0aCB0aGlzIGltcHJvdmVtZW50LiBBIHNldCBvZiBkZWZpbmVzIG1hZGUgY2hhbmdlcyB0byBvdGhlcgorICAgcm91dGluZXMgYXMgc21hbGwgYXMgcG9zc2libGUuCisgICAtIEtsYXVzIEt1ZGllbGthCisgICAKKyAgIE1heSAzMCAxOTk3OiAodjEuNWIpCisgICAxKSBTQ1NJLWNvbW1hbmQgY2FwYWJpbGl0eSBlbmxhcmdlZCBieSB0aGUgcmVjb2duaXRpb24gb2YgTU9ERV9TRUxFQ1QuCisgICAgICBUaGlzIG5lZWRzIHRoZSBSRC1CaXQgdG8gYmUgZGlzYWJsZWQgb24gSU1fT1RIRVJfU0NTSV9DTURfQ01EIHdoaWNoIAorICAgICAgYWxsb3dzIGRhdGEgdG8gYmUgd3JpdHRlbiBmcm9tIHRoZSBzeXN0ZW0gdG8gdGhlIGRldmljZS4gSXQgaXMgYQorICAgICAgbmVjZXNzYXJ5IHN0ZXAgdG8gYmUgYWxsb3dlZCB0byBzZXQgYmxvY2tzaXplIG9mIFNDU0ktdGFwZS1kcml2ZXMgYW5kIAorICAgICAgdGhlIHRhcGUtc3BlZWQsIHdoaXRob3V0IGNvbmZ1c2luZyB0aGUgU0NTSS1TdWJzeXN0ZW0uCisgICAyKSBUaGUgcmVjb2duaXRpb24gb2YgYSB0YXBlIGlzIGluY2x1ZGVkIGluIHRoZSBjaGVja19kZXZpY2VzIHJvdXRpbmUuCisgICAgICBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgZm9yIFRZUEVfVEFQRSwgdGhhdCBpcyBhbHJlYWR5IGRlZmluZWQgaW4KKyAgICAgIHRoZSBrZXJuZWwtc2NzaS1lbnZpcm9ubWVudC4gVGhlIG1hcmt1cCBvZiBhIHRhcGUgaXMgZG9uZSBpbiB0aGUgCisgICAgICBnbG9iYWwgbGRuX2lzX3RhcGVbXSBhcnJheS4gSWYgdGhlIGVudHJ5IG9uIGluZGV4IGxkbiAKKyAgICAgIGlzIDEsIHRoZXJlIGlzIGEgdGFwZWRyaXZlIGNvbm5lY3RlZC4KKyAgIDMpIFRoZSBsZG5faXNfdGFwZVtdIGFycmF5IGlzIG5lY2Vzc2FyeSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRhcGUtIGFuZCAKKyAgICAgIG90aGVyIGRldmljZXMuIEZpeGVkIGJsb2NrbGVuZ3RoIGRldmljZXMgc2hvdWxkIG5vdCBjYXVzZSBhIHByb2JsZW0KKyAgICAgIHdpdGggdGhlIFNDQi1jb21tYW5kIGZvciByZWFkIGFuZCB3cml0ZSBpbiB0aGUgaWJtbWNhX3F1ZXVlY29tbWFuZAorICAgICAgc3Vicm91dGluZS4gVGhlcmVmb3JlLCBJIG9ubHkgZGVyaXZhdGUgdGhlIFJFQURfWFgsIFdSSVRFX1hYIGZvcgorICAgICAgdGhlIHRhcGUtZGV2aWNlcywgYXMgcmVjb21tZW5kZWQgYnkgSUJNIGluIHRoaXMgVGVjaG5pY2FsIFJlZmVyZW5jZSwKKyAgICAgIG1lbnRpb25lZCBiZWxvdy4gKElCTSByZWNvbW1lbmRzIHRvIGF2b2lkIHVzaW5nIHRoZSByZWFkL3dyaXRlIG9mIHRoZQorICAgICAgc3Vic3lzdGVtLCBidXQgdGhlIGZhY3Qgd2FzLCB0aGF0IHJlYWQvd3JpdGUgY2F1c2VzIGEgY29tbWFuZCBlcnJvciBmcm9tCisgICAgICB0aGUgc3Vic3lzdGVtIGFuZCB0aGlzIGNhdXNlcyBrZXJuZWwtcGFuaWMuKQorICAgNCkgSW4gYWRkaXRpb24sIEkgcHJvcG9zZSB0byB1c2UgdGhlIGxkbiBpbnN0ZWFkIG9mIGEgZml4IGNoYXIgZm9yIHRoZQorICAgICAgZGlzcGxheSBvZiBQUzJfRElTS19MRURfT04oKS4gT24gOTUsIG9uZSBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKKyAgICAgIGRldmljZXMgdGhhdCBhcmUgYWNjZXNzZWQuIEl0IHNob3dzIGFjdGl2aXR5IGFuZCBlYXN5ZmllcyBkZWJ1Z2dpbmcuICAgCisgICBUaGUgdGFwZS1zdXBwb3J0IGhhcyBiZWVuIHRlc3RlZCB3aXRoIGEgU09OWSBTRFQtNTIwMCBhbmQgYSBIUCBERFMtMgorICAgKEkgZG8gbm90IGtub3cgeWV0IHRoZSB0eXBlKS4gT3B0aW1pemF0aW9uIGFuZCBDRC1ST00gYXVkaW8tc3VwcG9ydCwgCisgICBJIGFtIHdvcmtpbmcgb24gLi4uCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdW5lIDE5IDE5OTc6ICh2MS42YikKKyAgIDEpIFN1Ym1pdHRpbmcgdGhlIGV4dHJhLWFycmF5IGxkbl9pc190YXBlW10gLT4gdG8gdGhlIGxvY2FsIGxkW10KKyAgICAgIGRldmljZS1hcnJheS4gCisgICAyKSBDRC1ST00gQXVkaW8tUGxheSBzZWVtcyB0byB3b3JrIG5vdy4KKyAgIDMpIFdoZW4gdXNpbmcgRERTLTIgKDEyME0pIERBVC1UYXBlcywgbXRzdCBzaG93cyBzdGlsbCBkZW5zaXR5LWNvZGUKKyAgICAgIDB4MTMgZm9yIG9yZGluYXJ5IEREUyAoNjEwMDAgQlBNKSBpbnN0ZWFkIDB4MjQgZm9yIEREUy0yLiBUaGlzIGFwcGVhcnMgCisgICAgICBhbHNvIG9uIEFkYXB0ZWMgMjk0MCBhZGFwdG9yIGluIGEgUENJLVN5c3RlbS4gVGhlcmVmb3JlLCBJIGFzc3VtZSB0aGF0IAorICAgICAgdGhlIHByb2JsZW0gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGxvdy1sZXZlbC1kcml2ZXIvYnVzLWFyY2hpdGVjdHVyZS4KKyAgIDQpIEhleGFkZWNpbWFsIGxkbiBvbiBQUy8yLTk1IExFRC1kaXNwbGF5LgorICAgNSkgRml4aW5nIG9mIHRoZSBQUy8yLUxFRCBvbi9vZmYgdGhhdCBpdCB3b3JrcyByaWdodCB3aXRoIHRhcGVkcml2ZXMgYW5kCisgICAgICBkb2VzIG5vdCBjb25mdXNlIHRoZSBkaXNrX3J3X2luX3Byb2dyZXNzIGNvdW50ZXIuCisgICAtIE1pY2hhZWwgTGFuZworICAKKyAgIEp1bmUgMjEgMTk5NzogKHYxLjdiKQorICAgMSkgQWRkaW5nIG9mIGEgcHJvY19pbmZvIHJvdXRpbmUgdG8gaW5mb3JtIGluIC9wcm9jL3Njc2kvaWJtbWNhLzxob3N0PiB0aGUKKyAgICAgIG91dGVyLXdvcmxkIGFib3V0IG9wZXJhdGlvbmFsIGxvYWQgc3RhdGlzdGljcyBvbiB0aGUgZGlmZmVyZW50IGxkbnMsCisgICAgICBzZWVuIGJ5IHRoZSBkcml2ZXIuIEV2ZXJ5Ym9keSB0aGF0IGhhcyBtb3JlIHRoYW4gb25lIElCTS1TQ1NJIHNob3VsZAorICAgICAgdGVzdCB0aGlzLCBiZWNhdXNlIEkgb25seSBoYXZlIG9uZSBhbmQgY2Fubm90IHNlZSB3aGF0IGhhcHBlbnMgd2l0aCBtb3JlCisgICAgICB0aGFuIG9uZSBJQk0tU0NTSSBob3N0cy4KKyAgIDIpIERlZmluaXRpb24gb2YgYSBkcml2ZXIgdmVyc2lvbi1udW1iZXIgdG8gaGF2ZSBhIGJldHRlciByZWNvZ25pdGlvbiBvZiAKKyAgICAgIHRoZSBzb3VyY2Ugd2hlbiB0aGVyZSBhcmUgZXhpc3RpbmcgdG9vIG11Y2ggcmVsZWFzZXMgdGhhdCBtYXkgY29uZnVzZQorICAgICAgdGhlIHVzZXIsIHdoZW4gcmVhZGluZyBhYm91dCByZWxlYXNlLXNwZWNpZmljIHByb2JsZW1zLiBVcCB0byBrbm93LAorICAgICAgSSBjYWxjdWxhdGVkIHRoZSB2ZXJzaW9uLW51bWJlciB0byBiZSAxLjcuIEJlY2F1c2Ugd2UgYXJlIGluIEJFVEEtdGVzdAorICAgICAgeWV0LCBpdCBpcyB0b2RheSAxLjdiLgorICAgMykgU29ycnkgZm9yIHRoZSBoZWF2eSBidWcgSSBwcm9ncmFtbWVkIG9uIEp1bmUgMTkgMTk5NyEgQWZ0ZXIgdGhhdCwgdGhlCisgICAgICBDRC1ST00gZGlkIG5vdCB3b3JrIGFueSBtb3JlISBUaGUgQzctY29tbWFuZCB3YXMgYSBmYWtlIGltcHJlc3Npb24KKyAgICAgIEkgZ290IHdoaWxlIHByb2dyYW1taW5nLiBOb3csIHRoZSBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgQ0QtUk9NIGFyZQorICAgICAgbm8gbG9uZ2VyIHJ1bm5pbmcgb3ZlciB0aGUgc3Vic3lzdGVtLCBidXQganVzdCBvdmVyIAorICAgICAgSU1fT1RIRVJfU0NTSV9DTURfQ01ELiBPbiBteSBvYnNlcnZhdGlvbnMgKFBTLzItOTUpLCBub3cgQ0QtUk9NIG1vdW50cworICAgICAgbXVjaCBmYXN0ZXIoISkgYW5kIGhvcGVmdWxseSBhbGwgZmFuY3kgbXVsdGltZWRpYS1mdW5jdGlvbnMsIGxpa2UgZGlyZWN0CisgICAgICBkaWdpdGFsIHJlY29yZGluZyBmcm9tIGF1ZGlvLUNEcyBhbHNvIHdvcmsuIChJIHRyaWVkIGl0IHdpdGggY2RkYTJ3YXYKKyAgICAgIGZyb20gdGhlIGNkd3Rvb2xzLXBhY2thZ2UgYW5kIGl0IGZpbGxlZCB1cCB0aGUgaGFyZGRpc2sgaW1tZWRpYXRlbHkgOi0pLikKKyAgICAgIFRvIGVhc2lmeSBib29sZWFuIGxvZ2ljcywgYSBmdXJ0aGVyIGxvY2FsIGRldmljZS10eXBlIGluIGxkW10sIGNhbGxlZAorICAgICAgaXNfY2Ryb20gaGFzIGJlZW4gaW5jbHVkZWQuCisgICA0KSBJZiBvbmUgdXNlcyBhIFNDU0ktZGV2aWNlIG9mIHVuc3VwcG9ydGVkIHR5cGUvY29tbWFuZHMsIG9uZQorICAgICAgaW1tZWRpYXRlbHkgcnVucyBpbnRvIGEga2VybmVsLXBhbmljIGNhdXNlZCBieSBDb21tYW5kIEVycm9yLiBUbyBiZXR0ZXIKKyAgICAgIHVuZGVyc3RhbmQgd2hpY2ggU0NTSS1jb21tYW5kIGNhdXNlZCB0aGUgcHJvYmxlbSwgSSBleHRlbmRlZCB0aGlzCisgICAgICBzcGVjaWZpYyBwYW5pYy1tZXNzYWdlIHNsaWdodGx5LgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIEp1bmUgMjUgMTk5NzogKHYxLjhiKQorICAgMSkgU29tZSBjb3NtZXRpY2FsIGNoYW5nZXMgZm9yIHRoZSBoYW5kbGluZyBvZiBTQ1NJLWRldmljZS10eXBlcy4KKyAgICAgIE5vdywgYWxzbyBDRC1CdXJuZXJzIC8gV09STXMgYW5kIFNDU0ktc2Nhbm5lcnMgc2hvdWxkIHdvcmsuIEZvcgorICAgICAgTU8tZHJpdmVzIEkgaGF2ZSBubyBleHBlcmllbmNlLCB0aGVyZWZvcmUgbm90IHlldCBzdXBwb3J0ZWQuCisgICAgICBJbiBsb2dpY2FsX2RldmljZXMgSSBjaGFuZ2VkIGZyb20gZGlmZmVyZW50IHR5cGUtdmFyaWFibGVzIHRvIG9uZQorICAgICAgY2FsbGVkICdkZXZpY2VfdHlwZScgd2hlcmUgdGhlIHZhbHVlcywgY29ycmVzcG9uZGluZyB0byBzY3NpLmgsCisgICAgICBvZiBhIFNDU0ktZGV2aWNlIGFyZSBzdG9yZWQuCisgICAyKSBUaGVyZSBleGlzdGVkIGEgc21hbGwgYnVnLCB0aGF0IG1hcHMgYSBkZXZpY2UsIGNvbWluZyBhZnRlciBhIFNDU0ktdGFwZQorICAgICAgd3JvbmcuIFRoZXJlZm9yZSwgZS5nLiBhIENELVJPTSBjaGFuZ2VyIHdvdWxkIGhhdmUgYmVlbiBtYXBwZWQgd3JvbmcKKyAgICAgIC0+IHByb2JsZW0gcmVtb3ZlZC4KKyAgIDMpIEV4dGVuc2lvbiBvZiB0aGUgbG9naWNhbF9kZXZpY2Ugc3RydWN0dXJlLiBOb3cgaXQgY29udGFpbnMgYWxzbyBkZXZpY2UsCisgICAgICB2ZW5kb3IgYW5kIHJldmlzaW9uLWxldmVsIG9mIGEgU0NTSS1kZXZpY2UgZm9yIGludGVybmFsIHVzYWdlLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgSnVuZSAyNi0yOSAxOTk3OiAodjIuMGIpCisgICAxKSBUaGUgcmVsZWFzZSBudW1iZXIgMi4wYiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiB0aGUgY29tcGxldGVseSBuZXcgZG9uZQorICAgICAgcmVjb2duaXRpb24gYW5kIGhhbmRsaW5nIG9mIFNDU0ktZGV2aWNlcyB3aXRoIHRoZSBhZGFwdGVyLiBBcyBJIGdvdAorICAgICAgZnJvbSBDaHJpcyB0aGUgaGludCwgdGhhdCB0aGUgc3Vic3lzdGVtIGNhbiByZWFzc2lnbiBsZG5zIGR5bmFtaWNhbGx5LAorICAgICAgSSByZW1lbWJlcmVkIHRoaXMgaW1tZWRpYXRlX2Fzc2lnbi1jb21tYW5kLCBJIGZvdW5kIG9uY2UgaW4gdGhlIGhhbmRib29rLgorICAgICAgTm93LCB0aGUgZHJpdmVyIGZpcnN0IGtpbGxzIGFsbCBsZG4gYXNzaWdubWVudHMgdGhhdCBhcmUgc2V0IGJ5IGRlZmF1bHQKKyAgICAgIG9uIHRoZSBTQ1NJLXN1YnN5c3RlbS4gQWZ0ZXIgdGhhdCwgaXQgcHJvYmVzIG9uIGFsbCBwdW5zIGFuZCBsdW5zIGZvcgorICAgICAgZGV2aWNlcyBieSBnb2luZyB0aHJvdWdoIGFsbCBjb21iaW5hdGlvbnMgd2l0aCBpbW1lZGlhdGVfYXNzaWduIGFuZAorICAgICAgcHJvYmluZyBmb3IgZGV2aWNlcywgdXNpbmcgZGV2aWNlX2lucXVpcnkuIFRoZSBmb3VuZCBwaHlzaWNhbCghKSBwdW4sbHVuCisgICAgICBzdHJ1Y3R1cmUgaXMgc3RvcmVkIGluIGdldF9zY3NpW11bXSBhcyBkZXZpY2UgdHlwZXMuIFRoaXMgaXMgZm9sbG93ZWQKKyAgICAgIGJ5IHRoZSBhc3NpZ25tZW50IG9mIGFsbCBsZG5zIHRvIGV4aXN0aW5nIFNDU0ktZGV2aWNlcy4gSWYgbW9yZSBsZG5zCisgICAgICB0aGFuIGRldmljZXMgYXJlIGF2YWlsYWJsZSwgdGhleSBhcmUgYXNzaWduZWQgdG8gbm9uIGV4aXN0aW5nIHB1bixsdW4KKyAgICAgIGNvbWJpbmF0aW9ucyB0byBzYXRpc2Z5IHRoZSBhZGFwdGVyLiBXaXRoIHRoaXMsIHRoZSBkeW5hbWljYWwgbWFwcGluZworICAgICAgd2FzIHBvc3NpYmxlIHRvIGltcGxlbWVudC4gKEZvciBmdXJ0aGVyIGluZm8gc2VlIHRoZSB0ZXh0IGluIHRoZSAKKyAgICAgIHNvdXJjZS1jb2RlIGFuZCBpbiB0aGUgZGVzY3JpcHRpb24gYmVsb3cuIFJlYWQgdGhlIGRlc2NyaXB0aW9uCisgICAgICBiZWxvdyBCRUZPUkUgaW5zdGFsbGluZyB0aGlzIGRyaXZlciBvbiB5b3VyIHN5c3RlbSEpCisgICAyKSBDaGFuZ2VkIHRoZSBuYW1lIElCTU1DQV9EUklWRVJfVkVSU0lPTiB0byBJQk1NQ0FfU0NTSV9EUklWRVJfVkVSU0lPTi4KKyAgIDMpIFRoZSBMRUQtZGlzcGxheSBzaG93cyBvbiBQUy8yLTk1IG5vIGxvbmdlciB0aGUgbGRuLCBidXQgdGhlIFNDU0ktSUQKKyAgICAgIChwdW4pIG9mIHRoZSBhY2Nlc3NlZCBTQ1NJLWRldmljZS4gVGhpcyBpcyBub3cgc2Vuc2VmdWwsIGJlY2F1c2UgdGhlIAorICAgICAgcHVuIGtub3duIHdpdGhpbiB0aGUgZHJpdmVyIGlzIGV4YWN0bHkgdGhlIHB1biBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlCisgICAgICBhbmQgbm8gbG9uZ2VyIGEgZmFrZSBvbmUuCisgICA0KSBUaGUgL3Byb2Mvc2NzaS9pYm1tY2EvPGhvc3Rfbm8+IGNvbnNpc3RzIG5vdyBvZiB0aGUgZmlyc3QgcGFydCwgd2hlcmUKKyAgICAgIGhpdC1zdGF0aXN0aWNzIG9mIGxkbnMgaXMgc2hvd24gYW5kIGEgc2Vjb25kIHBhcnQsIHdoZXJlIHRoZSBtYXBzIG9mIAorICAgICAgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgU0NTSS1kZXZpY2VzIGFyZSBkaXNwbGF5ZWQuIFRoaXMgY291bGQgYmUgdmVyeSAKKyAgICAgIGludGVyZXN0aW5nLCB3aGVuIG9uZSBpcyB1c2luZyBtb3JlIHRoYW4gMTUgU0NTSS1kZXZpY2VzIGluIG9yZGVyIHRvIAorICAgICAgZm9sbG93IHRoZSBkeW5hbWljYWwgcmVtYXBwaW5nIG9mIGxkbnMuCisgICAtIE1pY2hhZWwgTGFuZworIAorICAgSnVuZSAyNi0yOSAxOTk3OiAodjIuMGItMSkKKyAgIDEpIEkgZm9yZ290IHRvIHN3aXRjaCB0aGUgbG9jYWxfY2hlY2tpbmdfcGhhc2VfZmxhZyB0byAxIGFuZCBiYWNrIHRvIDAKKyAgICAgIGluIHRoZSBkeW5hbWljYWwgcmVtYXBwaW5nIHBhcnQgaW4gaWJtbWNhX3F1ZXVlY29tbWFuZCBmb3IgdGhlIAorICAgICAgZGV2aWNlX2V4aXN0IHJvdXRpbmUuIFNvcnJ5LgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIEp1bHkgMS0xMyAxOTk3OiAodjMuMGIsYykKKyAgIDEpIE1lcmdpbmcgb2YgdGhlIGRyaXZlci1kZXZlbG9wbWVudHMgb2YgS2xhdXMgS3VkaWVsa2EgYW5kIE1pY2hhZWwgTGFuZyAKKyAgICAgIGluIG9yZGVyIHRvIGdldCBhIG9wdGltdW0gYW5kIHVuaWZpZWQgZHJpdmVyLXJlbGVhc2UgZm9yIHRoZSAKKyAgICAgIElCTS1TQ1NJLVN1YnN5c3RlbS1BZGFwdGVyKHMpLgorICAgICAgICAgRm9yIHBlb3BsZSwgdXNpbmcgdGhlIEtlcm5lbC1yZWxlYXNlID49Mi4xLjAsIG1vZHVsZS1zdXBwb3J0IHNob3VsZCAKKyAgICAgIGJlIG5vIHByb2JsZW0uIEZvciB1c2VycywgcnVubmluZyB1bmRlciA8Mi4xLjAsIG1vZHVsZS1zdXBwb3J0IG1heSBub3QgCisgICAgICB3b3JrLCBiZWNhdXNlIHRoZSBtZXRob2RzIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIDIuMC54IGFuZCAyLjEueC4KKyAgIDIpIEFkZGVkIHNvbWUgbW9yZSBlZmZlY3RpdmUgc3RhdGlzdGljcyBmb3IgL3Byb2Mtb3V0cHV0LgorICAgMykgQ2hhbmdlIHR5cGVjYXN0aW5nIGF0IG5lY2Vzc2FyeSBwb2ludHMgZnJvbSAodW5zaWduZWQgbG9uZykgdG8KKyAgICAgIHZpcnRfdG9fYnVzKCkuCisgICA0KSBJbmNsdWRlZCAjaWYuLi4gYXQgc3BlY2lhbCBwb2ludHMgdG8gaGF2ZSBzcGVjaWZpYyBhZGFwdGlvbiBvZiB0aGUKKyAgICAgIGRyaXZlciB0byBrZXJuZWwgMi4wLnggYW5kIDIuMS54LiBJdCBzaG91bGQgdGhlcmVmb3JlIGFsc28gcnVuIHdpdGggCisgICAgICBsYXRlciByZWxlYXNlcy4KKyAgIDUpIE1hZ25ldG8tT3B0aWNhbCBkcml2ZXMgYW5kIG1lZGl1bS1jaGFuZ2VycyBhcmUgYWxzbyByZWNvZ25pemVkLCBub3cuCisgICAgICBUaGVyZWZvcmUsIHdlIGhhdmUgYSBjb21wbGV0ZWx5IGdhcGZyZWUgcmVjb2duaXRpb24gb2YgYWxsIFNDU0ktCisgICAgICBkZXZpY2UtdHlwZXMsIHRoYXQgYXJlIGtub3duIGJ5IExpbnV4IHVwIHRvIGtlcm5lbCAyLjEuMzEuCisgICA2KSBUaGUgZmxhZyBTQ1NJX0lCTU1DQV9ERVZfUkVTRVQgaGFzIGJlZW4gaW5zZXJ0ZWQuIElmIGl0IGlzIHNldCB3aXRoaW4KKyAgICAgIHRoZSBjb25maWd1cmF0aW9uLCBlYWNoIGNvbm5lY3RlZCBTQ1NJLWRldmljZSB3aWxsIGdldCBhIHJlc2V0IGNvbW1hbmQKKyAgICAgIGR1cmluZyBib290dGltZS4gVGhpcyBjYW4gYmUgbmVjZXNzYXJ5IGZvciBzb21lIHNwZWNpYWwgU0NTSS1kZXZpY2VzLgorICAgICAgVGhpcyBmbGFnIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBDb25maWcuaW4uCisgICAgICAoU2VlIGFsc28gdGhlIG5ldyBDb25maWcuaW4gZmlsZS4pCisgICBQcm9iYWJsZSBuZXh0IGltcHJvdmVtZW50OiBiYWQgZGlzayBoYW5kbGVyLgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIFNlcHQgMTQgMTk5NzogKHYzLjBjKQorICAgMSkgU29tZSBkZWJ1Z2dpbmcgYW5kIHNwZWVkIG9wdGltaXphdGlvbiBhcHBsaWVkLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgRGVjIDE1LCAxOTk3CisgICAgLSBjaHJpc2JAdHJ1ZXNwZWN0cmEuY29tCisgICAgLSBtYWRlIHRoZSBmcm9udCBwYW5lbCBkaXNwbGF5IHRoaW5neSBvcHRpb25hbCwgc3BlY2lmaWVkIGZyb20gdGhlCisgICAgY29tbWFuZC1saW5lIHZpYSBpYm1tY2FzY3NpPWRpc3BsYXkuICBBbG9uZyB0aGUgbGluZXMgb2YgdGhlIC9MRUQKKyAgICBvcHRpb24gZm9yIHRoZSBPUy8yIGRyaXZlci4KKyAgICAtIGZpeGVkIHNtYWxsIGJ1ZyBpbiB0aGUgTEVEIGRpc3BsYXkgdGhhdCB3b3VsZCBoYW5nIHNvbWUgbWFjaGluZXMuCisgICAgLSByZXZlcnNlZCBvcmRlcmluZyBvZiB0aGUgZHJpdmVzICh1c2luZyB0aGUKKyAgICBJQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCBkZWZpbmUpLiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHR3byBtYWluCisgICAgcmVhc29uczoKKwktIHVzZXJzIHdobyd2ZSBhbHJlYWR5IGluc3RhbGxlZCBMaW51eCB3b24ndCBiZSBzY3Jld2VkLiAgS2VlcAorCWluIG1pbmQgdGhhdCBub3QgZXZlcnlvbmUgaXMgYSBrZXJuZWwgaGFja2VyLgorCS0gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBCSU9TIG9yZGVyaW5nIG9mIHRoZSBkcml2ZXMuICBJbiB0aGUKKwlCSU9TLCBpZCA2IGlzIEM6LCBpZCAwIG1pZ2h0IGJlIEQ6LiAgV2l0aCB0aGlzIHNjaGVtZSwgdGhleSdkIGJlCisJYmFja3dhcmRzLiAgVGhpcyBjb25mdXNlcyB0aGUgY3JhcCBvdXQgb2YgdGhvc2UgaGVhdGhlbnMgd2hvJ3ZlCisJZ290IGEgaW1wdXJlIExpbnV4IGluc3RhbGxhdGlvbiAod2hpY2gsIDx3aW5jZT4sIEknbSBvbmUgb2YpLgorICAgIFRoaXMgd2hvbGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBJQk0gaXMgYWN0dWFsbHkgbm9uLXN0YW5kYXJkIHdpdGgKKyAgICB0aGUgaWQgdG8gQklPUyBtYXBwaW5ncy4gIFlvdSdsbCBmaW5kLCBpbiBmZG9tYWluLmMsIGEgc2ltaWxhcgorICAgIGNvbW1lbnQgYWJvdXQgYSBmZXcgRkQgQklPUyByZXZpc2lvbnMuICBUaGUgTGludXggKGFuZCBhcHBhcmVudGx5CisgICAgaW5kdXN0cnkpIHN0YW5kYXJkIGlzIHRoYXQgQzogbWFwcyB0byBzY3NpIGlkICgwLDApLiAgTGV0J3Mgc3RpY2sKKyAgICB3aXRoIHRoYXQgc3RhbmRhcmQuCisgICAgLSBTaW5jZSB0aGlzIGlzIHRlY2huaWNhbGx5IGEgYnJhbmNoIG9mIG15IG93biwgSSBjaGFuZ2VkIHRoZQorICAgIHZlcnNpb24gbnVtYmVyIHRvIDMuMGUtY3BiLgorCisgICBKYW4gMTcsIDE5OTg6ICh2My4wZikKKyAgIDEpIEFkZGl0aW9uIG9mIHNvbWUgc3RhdGlzdGljYWwgaW5mbyBmb3IgL3Byb2MgaW4gcHJvY19pbmZvLgorICAgMikgVGFraW5nIGNhcmUgb2YgdGhlIFNDU0ktYXNzaWdubWVudCBwcm9ibGVtLCBkZWFsZWQgYnkgQ2hyaXMgYXQgRGVjIDE1CisgICAgICAxOTk3LiBJbiBmYWN0LCBJQk0gaXMgcmlnaHQsIGNvbmNlcm5pbmcgdGhlIGFzc2lnbm1lbnQgb2YgU0NTSS1kZXZpY2VzIAorICAgICAgdG8gZHJpdmVsZXR0ZXJzLiBJdCBpcyBjb25mb3JtIHRvIHRoZSBBTlNJLWRlZmluaXRpb24gb2YgdGhlIFNDU0ktCisgICAgICBzdGFuZGFyZCB0byBhc3NpZ24gZHJpdmUgQzogdG8gU0NTSS1pZCA2LCBiZWNhdXNlIGl0IGlzIHRoZSBoaWdoZXN0CisgICAgICBoYXJkd2FyZSBwcmlvcml0eSBhZnRlciB0aGUgaG9zdGFkYXB0ZXIgKHRoYXQgaGFzIHN0aWxsIHRvZGF5IGJ5CisgICAgICBkZWZhdWx0IGV2ZXJ5d2hlcmUgaWQgNykuIEFsc28gcmVhbHRpbWUtb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBJIHVzZSwgCisgICAgICBsaWtlIEx5bnhPUyBhbmQgT1M5LCB3aGljaCBhcmUgcXVpdGUgaW5kdXN0cmlhbCBzeXN0ZW1zIHVzZSB0b3AtZG93bgorICAgICAgbnVtYmVyaW5nIG9mIHRoZSBoYXJkZGlza3MsIHRoYXQgaXMgYWxzbyBzdGFydGluZyBhdCBpZCA2LiBOb3csIG9uZQorICAgICAgc2l0cyBhIGJpdCBiZXR3ZWVuIHR3byBjaGFpcnMuIE9uIG9uZSBoYW5kIHNpZGUsIHVzaW5nIHRoZSBkZWZpbmUKKyAgICAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIG1ha2VzIExpbnV4IGFzc2lnbmluZyBkaXNrcyBjb25mb3JtIHRvCisgICAgICB0aGUgSUJNLSBhbmQgQU5TSS1TQ1NJLXN0YW5kYXJkIGFuZCBrZWVwcyB0aGlzIGRyaXZlciBkb3dud2FyZAorICAgICAgY29tcGF0aWJsZSB0byBvbGRlciByZWxlYXNlcywgb24gdGhlIG90aGVyIGhhbmQgc2lkZSwgcGVvcGxlIGlzIHF1aXRlCisgICAgICBoYWJpdHVhdGVkIGluIGJlbGlldmluZyB0aGF0IEM6IGlzIGFzc2lnbmVkIHRvICgwLDApIGFuZCBtdWNoIG90aGVyCisgICAgICBTQ1NJLUJJT1MgZG8gc28uIFRoZXJlZm9yZSwgSSBtb3ZlZCB0aGUgSUJNTUNBX1NDU0lfT1JERVJfU1RBTkRBUkQgCisgICAgICBkZWZpbmUgb3V0IG9mIHRoZSBkcml2ZXIgYW5kIHB1dCBpdCBpbnRvIENvbmZpZy5pbiBhcyBzdWJpdGVtIG9mIAorICAgICAgJ0lCTSBTQ1NJIHN1cHBvcnQnLiBBIGhlbHAsIGFkZGVkIHRvIERvY3VtZW50YXRpb24vQ29uZmlndXJlLmhlbHAgCisgICAgICBleHBsYWlucyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBzYXlpbmcgJ3knIG9yICduJyB0byB0aGUgdXNlciwgd2hlbiAKKyAgICAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIHByb21wdHMsIHNvIHRoZSBvcmRpbmFyeSB1c2VyIGlzIGVuYWJsZWQgdG8gCisgICAgICBjaG9vc2UgdGhlIHdheSBvZiBhc3NpZ25tZW50LCBkZXBlbmRpbmcgb24gaGlzIG93biBzaXR1YXRpb24gYW5kIGd1c3RvLgorICAgMykgQWRhcHRlZCBTQ1NJX0lCTU1DQV9ERVZfUkVTRVQgdG8gdGhlIGxvY2FsIG5hbWluZyBjb252ZW50aW9uLCBzbyBpdCBpcworICAgICAgbm93IGNhbGxlZCBJQk1NQ0FfU0NTSV9ERVZfUkVTRVQuCisgICA0KSBPcHRpbWl6YXRpb24gb2YgcHJvY19pbmZvIGFuZCBpdHMgc3Vicm91dGluZXMuCisgICA1KSBBZGRlZCBtb3JlIGluLXNvdXJjZS1jb21tZW50cyBhbmQgZXh0ZW5kZWQgdGhlIGRyaXZlciBkZXNjcmlwdGlvbiBieQorICAgICAgc29tZSBleHBsYW5hdGlvbiBhYm91dCB0aGUgU0NTSS1kZXZpY2UtYXNzaWdubWVudCBwcm9ibGVtLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgSmFuIDE4LCAxOTk4OiAodjMuMGcpCisgICAxKSBDb3JyZWN0aW5nIG5hbWVzIHRvIGJlIGFic29sdXRlbHkgY29uZm9ybSB0byB0aGUgbGF0ZXIgMi4xLnggcmVsZWFzZXMuCisgICAgICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgCisgICAgICAgICAgICBJQk1NQ0FfU0NTSV9ERVZfUkVTRVQgLT4gQ09ORklHX0lCTU1DQV9TQ1NJX0RFVl9SRVNFVAorICAgICAgICAgICAgSUJNTUNBX1NDU0lfT1JERVJfU1RBTkRBUkQgLT4gQ09ORklHX0lCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJECisgICAtIE1pY2hhZWwgTGFuZworIAorICAgSmFuIDE4LCAxOTk5OiAodjMuMSBNQ0EtdGVhbSBpbnRlcm5hbCkKKyAgIDEpIFRoZSBtdWx0aXBsZSBob3N0cyBzdHJ1Y3R1cmUgaXMgYWNjZXNzZWQgZnJvbSBldmVyeSBzdWJyb3V0aW5lLCBzbyB0aGVyZQorICAgICAgaXMgbm8gbG9uZ2VyIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHBhc3NlZCBmcm9tIGZ1bmN0aW9uCisgICAgICB0byBmdW5jdGlvbiwgYnV0IG9ubHkgdGhlIGhvc3RpbmRleC4gQSBjYWxsIGJ5IHZhbHVlLCBub3RoaW5nIG1vcmUuIFRoaXMKKyAgICAgIHNob3VsZCByZWFsbHkgYmUgdW5kZXJzdG9vZCBieSB0aGUgY29tcGlsZXIgYW5kIHRoZSBzdWJzeXN0ZW0gc2hvdWxkIGdldAorICAgICAgdGhlIHJpZ2h0IHZhbHVlcyBhbmQgYWRkcmVzc2VzLgorICAgMikgVGhlIFNDU0ktc3Vic3lzdGVtIGRldGVjdGlvbiB3YXMgbm90IGNvbXBsZXRlIGFuZCBxdWl0ZSBodWdlbHkgYnVnZ3kgdXAKKyAgICAgIHRvIG5vdywgY29tcGFyZWQgdG8gdGhlIHRlY2huaWNhbCBtYW51YWwuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgcG9zMgorICAgICAgcmVnaXN0ZXIgaXMgbm90IGFzIGFzc3VtZWQgYnkgcGVvcGxlIGJlZm9yZSwgdGhlcmVmb3JlLCBJIGRyb3BwZWQgYSBub3RlCisgICAgICBpbiB0aGUgaWJtbWNhX2RldGVjdCBmdW5jdGlvbiB0byBzaG93IHRoZSByZWdpc3RlcnMnIGludGVycHJldGF0aW9uLgorICAgICAgVGhlIHBvcy1yZWdpc3RlcnMgb2YgaW50ZWdyYXRlZCBTQ1NJLXN1YnN5c3RlbXMgZG8gbm90IGNvbnRhaW4gYW55IAorICAgICAgaW5mb3JtYXRpb24gY29uY2VybmluZyB0aGUgSU8tcG9ydCBvZmZzZXQsIHJlYWxseS4gSW5zdGVhZCwgdGhleSBjb250YWluCisgICAgICBzb21lIGluZm8gYWJvdXQgdGhlIGFkYXB0ZXIsIHRoZSBjaGlwLCB0aGUgTlZSQU0gLi4uLiBUaGUgSS9PLXBvcnQgaXMKKyAgICAgIGZpeGVkIHRvIDB4MzU0MCAtIDB4MzU0Ny4gVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgYWRhcHRlcnMgaW4gdGhlIAorICAgICAgc2xvdHMgYW5kIHRoZXkgZ2V0IGFuIG9mZnNldCBmb3IgdGhlIEkvTyBhcmVhIGluIG9yZGVyIHRvIGdldCB0aGVpciBvd24KKyAgICAgIEkvTy1hZGRyZXNzIGFyZWEuIFNlZSBjaGFwdGVyIDIgZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uLiBBdCBsZWFzdCwgdGhlIAorICAgICAgZGV0ZWN0aW9uIHNob3VsZCBub3cgd29yayByaWdodCwgZXZlbiBvbiBtb2RlbHMgb3RoZXIgdGhhbiA5NS4gVGhlIDk1ZXJzCisgICAgICBjYW1lIGhhcHBpbHkgYXJvdW5kIHRoZSBidWcsIGFzIHRoZWlyIHBvczIgcmVnaXN0ZXIgY29udGFpbnMgYWx3YXlzIDAgCisgICAgICBpbiB0aGUgY3JpdGljYWwgYXJlYS4gUmVzZXJ2ZWQgYml0cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgaW50ZXJwcmV0ZWQsIAorICAgICAgdGhlcmVmb3JlLCBJQk0gaXMgYWxsb3dlZCB0byBzZXQgdGhvc2UgYml0cyBhcyB0aGV5IGxpa2UgYW5kIHRoZXkgbWF5IAorICAgICAgcmVhbGx5IHZhcnkgYmV0d2VlbiBkaWZmZXJlbnQgUFMvMiBtb2RlbHMuIFNvLCBub3csIG5vIGludGVycHJldGF0aW9uIAorICAgICAgb2YgcmVzZXJ2ZWQgYml0cyAtIGhvcGVmdWxseSBubyB0cm91YmxlIGhlcmUgYW55bW9yZS4KKyAgIDMpIFRoZSBjb21tYW5kIGVycm9yLCB3aGljaCB5b3UgbWF5IGdldCBvbiBtb2RlbHMgNTUsIDU2LCA1NywgNzAsIDc3IGFuZAorICAgICAgUDcwIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IHRoZSBmYWN0LCB0aGF0IGFkYXB0ZXJzIG9mIG9sZGVyIGRlc2lnbiBkbworICAgICAgbm90IGxpa2Ugc2VuZGluZyBjb21tYW5kcyB0byBub24tZXhpc3RpbmcgU0NTSS1kZXZpY2VzIGFuZCB3aWxsIHJlYWN0CisgICAgICB3aXRoIGEgY29tbWFuZCBlcnJvciBhcyBhIHNpZ24gb2YgcHJvdGVzdC4gV2hpbGUgdGhpcyBlcnJvciBpcyBub3QKKyAgICAgIHByZXNlbnQgb24gSUJNIFNDU0kgQWRhcHRlciB3L2NhY2hlLCBpdCBhcHBlYXJzIG9uIElCTSBJbnRlZ3JhdGVkIFNDU0kKKyAgICAgIEFkYXB0ZXJzLiBUaGVyZWZvcmUsIEkgaW1wbGVtZW50ZWQgYSB3b3JrYXJyb3VuZCB0byBmb3JnaXZlIHRob3NlIAorICAgICAgYWRhcHRlcnMgdGhlaXIgcHJvdGVzdHMsIGJ1dCBpdCBpcyBtYXJrZWQgdXAgaW4gdGhlIHN0YXRpc2N0aXMsIHNvCisgICAgICBhZnRlciBhIHN1Y2Nlc3NmdWwgYm9vdCwgeW91IGNhbiBzZWUgaW4gL3Byb2Mvc2NzaS9pYm1tY2EvPGhvc3RfbnVtYmVyPgorICAgICAgaG93IG9mdGVuIHRoZSBjb21tYW5kIGVycm9ycyBoYXZlIGJlZW4gZm9yZ2l2ZW4gdG8gdGhlIFNDU0ktc3Vic3lzdGVtLgorICAgICAgSWYgdGhlIG51bWJlciBpcyBiaWdnZXIgdGhhbiAwLCB5b3UgaGF2ZSBhIFNDU0kgc3Vic3lzdGVtIG9mIG9sZGVyCisgICAgICBkZXNpZ24sIHdoYXQgc2hvdWxkIG5vIGxvbmdlciBtYXR0ZXIuCisgICA0KSBpYm1tY2FfZ2V0aW5mbygpIGhhcyBiZWVuIGFkYXB0ZWQgdmVyeSBjYXJlZnVsbHksIHNvIGl0IHNob3dzIGluIHRoZSAKKyAgICAgIHNsb3RuIGZpbGUgcmVhbGx5LCB3aGF0IGlzIHNlbnNlZnVsIHRvIGJlIHByZXNlbnRlZC4KKyAgIDUpIGlibW1jYV9yZWdpc3RlcigpIGhhcyBiZWVuIGV4dGVuZGVkIGluIGl0cyBwYXJhbWV0ZXIgbGlzdCBpbiBvcmRlciB0bworICAgICAgcGFzcyB0aGUgcmlnaHQgbmFtZSBvZiB0aGUgU0NTSS1hZGFwdGVyIHRvIExpbnV4LgorICAgLSBNaWNoYWVsIExhbmcKKworICAgRmViIDYsIDE5OTk6ICh2My4xKQorICAgMSkgRmluYWxseSwgYWZ0ZXIgc29tZSAzLjFCZXRhLXJlbGVhc2VzLCB0aGUgMy4xIHJlbGVhc2UuIFNvcnJ5LCBmb3IgCisgICAgICB0aGUgZGVsYXllZCByZWxlYXNlLCBidXQgaXQgd2FzIG5vdCBmaW5pc2hlZCB3aXRoIHRoZSByZWxlYXNlIG9mIAorICAgICAgS2VybmVsIDIuMi4wLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgRmViIDEwLCAxOTk5ICh2My4xKQorICAgMSkgQWRkZWQgYSBuZXcgY29tbWFuZGxpbmUgcGFyYW1ldGVyIGNhbGxlZCAnYnlwYXNzJyBpbiBvcmRlciB0byBieXBhc3MKKyAgICAgIGV2ZXJ5IGludGVncmF0ZWQgc3Vic3lzdGVtIFNDU0ktY29tbWFuZCBjb25zZXF1ZW50bHkgaW4gY2FzZSBvZgorICAgICAgdHJvdWJsZXMuCisgICAyKSBDb25jYXRlbmF0ZWQgcmVhZF9jYXBhY2l0eSByZXF1ZXN0cyB0byB0aGUgaGFyZGRpc2tzLiBJdCBnYXZlIGEgbG90CisgICAgICBvZiB0cm91YmxlcyB3aXRoIHNvbWUgY29udHJvbGxlcnMgYW5kIGFmdGVyIEkgd2FudGVkIHRvIGFwcGx5IHNvbWUKKyAgICAgIGV4dGVuc2lvbnMsIGl0IGp1bXBlZCBvdXQgaW4gdGhlIHNhbWUgc2l0dWF0aW9uLCBvbiBteSB3L2NhY2hlLCBhcyBsaWtlIAorICAgICAgb24gRC4gV2VpbmVoYWxscycgTW9kZWwgNTYsIGhhdmluZyBpbnRlZ3JhdGVkIFNDU0kuIFRoaXMgZ2F2ZSBtZSB0aGUgCisgICAgICBkZXNjaXNzaXZlIGhpbnQgdG8gbW92ZSB0aGUgY29kZS1wYXJ0IG91dCBhbmQgZGVjbGFyZSBpdCBnbG9iYWwuIE5vdywKKyAgICAgIGl0IHNlZW1zIHRvIHdvcmsgYnkgZmFyIG11Y2ggYmV0dGVyIGFuIG1vcmUgc3RhYmxlLiBMZXQgdXMgc2VlLCB3aGF0CisgICAgICB0aGUgd29ybGQgdGhpbmtzIG9mIGl0Li4uCisgICAzKSBCeSB0aGUgd2F5LCBvbmx5IFNvbnkgREFULWRyaXZlcyBzZWVtIHRvIHNob3cgZGVuc2l0eSBjb2RlIDB4MTMuIEEKKyAgICAgIHRlc3Qgd2l0aCBhIEhQIGRyaXZlIGdhdmUgcmlnaHQgcmVzdWx0cywgc28gdGhlIHByb2JsZW0gaXMgdmVuZG9yLQorICAgICAgc3BlY2lmaWMgYW5kIG5vdCBhIHByb2JsZW0gb2YgdGhlIE9TIG9yIHRoZSBkcml2ZXIuCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBGZWIgMTgsIDE5OTkgKHYzLjFkKQorICAgMSkgVGhlIGFib3J0IGNvbW1hbmQgYW5kIHRoZSByZXNldCBmdW5jdGlvbiBoYXZlIGJlZW4gY2hlY2tlZCBmb3IgCisgICAgICBpbmNvbnNpc3RlbmNpZXMuIEZyb20gdGhlIGxvZ2ljYWwgcG9pbnQgb2YgdGhpbmtpbmcsIHRoZXkgd29yaworICAgICAgYXQgdGhlaXIgb3B0aW11bSwgbm93LCBidXQgYXMgdGhlIHN1YnN5c3RlbSBkb2VzIG5vdCBhbnN3ZXIgd2l0aCBhbgorICAgICAgaW50ZXJydXB0LCBhYm9ydCBuZXZlciBmaW5pc2hlcywgc2lnaC4uLgorICAgMikgRXZlcnl0aGluZywgdGhhdCBpcyBhY2Nlc3NlZCBieSBhIGJ1c21hc3RlciByZXF1ZXN0IGZyb20gdGhlIGFkYXB0ZXIKKyAgICAgIGlzIG5vdyBkZWNsYXJlZCBhcyBnbG9iYWwgdmFyaWFibGUsIGV2ZW4gdGhlIHJldHVybi1idWZmZXIgaW4gdGhlCisgICAgICBsb2NhbCBjaGVja2luZyBwaGFzZS4gVGhpcyBhc3N1cmVzLCB0aGF0IG5vIGFjY2Vzc2VzIHRvIHVuZGVmaW5lZCBtZW1vcnkKKyAgICAgIGFyZWFzIGFyZSBwZXJmb3JtZWQuCisgICAzKSBJbiBpYm1tY2EuaCwgdGhlIGxpbmUgdW5jaGVja2VkX2lzYV9kbWEgaXMgYWRkZWQgd2l0aCAxIGluIG9yZGVyIHRvCisgICAgICBhdm9pZCBtZW1vcnktcG9pbnRlcnMgZm9yIHRoZSBhcmVhcyBoaWdoZXIgdGhhbiAxNk1CeXRlIGluIG9yZGVyIHRvCisgICAgICBiZSBzdXJlLCBpdCBhbHNvIHdvcmtzIG9uIDE2LUJpdCBNaWNyb2NoYW5uZWwgYnVzIHN5c3RlbXMuCisgICA0KSBBIGxvdCBvZiBzbWFsbCB0aGluZ3MgaGF2ZSBiZWVuIGZvdW5kLCBidXQgbm90aGluZyB0aGF0IGVuZGFuZ2VyZWQgdGhlCisgICAgICBkcml2ZXIgb3BlcmF0aW9ucy4gSnVzdCBpdCBzaG91bGQgYmUgbW9yZSBzdGFibGUsIG5vdy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAgICAKKyAgIEZlYiAyMCwgMTk5OSAodjMuMWUpCisgICAxKSBJIHRvb2sgdGhlIHdhcm5pbmcgZnJvbSB0aGUgTGludXggS2VybmVsIEhhY2tlcnMgR3VpZGUgc2VyaW91cyBhbmQgCisgICAgICBjaGVja2VkIHRoZSBjbWQtPnJlc3VsdCByZXR1cm4gdmFsdWUgdG8gdGhlIGRvbmUtZnVuY3Rpb24gdmVyeSBjYXJlZnVsbHkuCisgICAgICBJdCBpcyBvYnZpb3VzLCB0aGF0IHRoZSBJQk0gU0NTSSBvbmx5IGRlbGl2ZXJzIHRoZSB0c2IuZGV2X3N0YXR1cywgaWYKKyAgICAgIHNvbWUgZXJyb3IgYXBwZWFyZWQsIGVsc2UgaXQgaXMgdW5kZWZpbmVkLiBOb3csIHRoaXMgaXMgZml4ZWQuIEJlZm9yZQorICAgICAgYW55IFNDQiBjb21tYW5kIGdldHMgcXVldWVkLCB0aGUgdHNiLmRldl9zdGF0dXMgaXMgc2V0IHRvIDAsIHNvIHRoZSAKKyAgICAgIGNtZC0+cmVzdWx0IHdvbid0IHNjcmV3IHVwIExpbnV4IGhpZ2hlciBsZXZlbCBkcml2ZXJzLgorICAgMikgVGhlIHJlc2V0LWZ1bmN0aW9uIGhhcyBzbGlnaHRseSBpbXByb3ZlZC4gVGhpcyBpcyBzdGlsbCBwbGFuZWQgZm9yIAorICAgICAgYWJvcnQuIER1cmluZyB0aGUgYWJvcnQgYW5kIHRoZSByZXNldCBmdW5jdGlvbiwgbm8gaW50ZXJydXB0cyBhcmUgCisgICAgICBhbGxvd2VkLiBUaGlzIGlzIGhvd2V2ZXIgcXVpdGUgaGFyZCB0byBjb3BlIHdpdGgsIHNvIHRoZSBJTlQtc3RhdHVzCisgICAgICByZWdpc3RlciBpcyByZWFkLiBXaGVuIHRoZSBpbnRlcnJ1cHQgZ2V0cyBxdWV1ZWQsIG9uZSBjYW4gZmluZCBpdHMKKyAgICAgIHN0YXR1cyBpbW1lZGlhdGVseSBvbiB0aGF0IHJlZ2lzdGVyIGFuZCBpcyBlbmFibGVkIHRvIGNvbnRpbnVlIGluIHRoZQorICAgICAgcmVzZXQgZnVuY3Rpb24uIEkgaGFkIG5vIGNoYW5jZSB0byB0ZXN0IHRoaXMgcmVhbGx5LCBvbmx5IGluIGEgYm9ndXMgCisgICAgICBzaXR1YXRpb24sIEkgZ290IHRoaXMgZnVuY3Rpb24gcnVubmluZywgYnV0IHRoZSBzaXR1YXRpb24gd2FzIHRvbyBtdWNoCisgICAgICB3b3JzZSBmb3IgTGludXggOi0oLCBzbyB0ZXN0cyB3aWxsIGNvbnRpbnVlLgorICAgMykgQnVmZmVycyBnb3Qgbm93IGNvbnNpc3RlbnQuIE5vIG9wZW4gYWRkcmVzcyBtYXBwaW5nLCBhcyBiZWZvcmUgYW5kCisgICAgICB0aGVyZWZvcmUgbm8gZnVydGhlciB0cm91YmxlcyB3aXRoIHRoZSB1bmFzc2lnbmVkIG1lbW9yeSBzZWdtZW50YXRpb24KKyAgICAgIGZhdWx0cyB0aGF0IHNjcmFtYmxlZCBwcm9iZXMgb24gOTVYWCBzZXJpZXMgYW5kIGV2ZW4gb24gODVYWCBzZXJpZXMsCisgICAgICB3aGVuIHRoZSBrZXJuZWwgaXMgZG9uZSBpbiBhIG5vdCBzbyBwZXJmZWN0bHkgZml0dGluZyB3YXkuCisgICA0KSBTcG9udGFuZW91cyBpbnRlcnJ1cHRzIGZyb20gdGhlIHN1YnN5c3RlbSwgYXBwZWFyaW5nIHdpdGhvdXQgYW55CisgICAgICBjb21tYW5kIHByZXZpb3VzbHkgcXVldWVkIGFyZSBhbnN3ZXJlZCB3aXRoIGEgRElEX0JBRF9JTlRSIHJlc3VsdC4KKyAgIDUpIFRha2VuIGludG8gYWNjb3VudCBaUCBHdXMnIHByb3Bvc2FscyB0byByZXZlcnNlIHRoZSBTQ1NJLWRldmljZQorICAgICAgc2NhbiBvcmRlci4gQXMgaXQgZG9lcyBub3Qgd29yayBvbiBLZXJuZWwgMi4xLnggb3IgMi4yLngsIGFzIHByb3Bvc2VkCisgICAgICBieSBoaW0sIEkgaW1wbGVtZW50ZWQgaXQgaW4gYSBzbGlnaHRseSBkZXJpdmVkIHdheSwgd2hpY2ggb2ZmZXJzIGluIAorICAgICAgYWRkaXRpb24gbW9yZSBmbGV4aWJpbGl0eS4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIEFwciAyMywgMjAwMCAodjMuMnByZTEpCisgICAxKSBEdXJpbmcgYSB2ZXJ5IGxvbmcgdGltZSwgSSBjb2xsZWN0ZWQgYSBodWdlIGFtb3VudCBvZiBidWdyZXBvcnRzIGZyb20KKyAgICAgIHZhcmlvdXMgcGVvcGxlLCB0cnlpbmcgcmVhbGx5IHF1aXRlIGRpZmZlcmVudCB0aGluZ3Mgb24gdGhlaXIgU0NTSS0KKyAgICAgIFBTLzJzLiBUb2RheSwgYWxsIHRoZXNlIGJ1Z3JlcG9ydHMgYXJlIHRha2VuIGludG8gYWNjb3VudCBhbmQgc2hvdWxkIGJlCisgICAgICBtb3N0bHkgc29sdmVkLiBUaGUgbWFqb3IgdG9waWNzIHdlcmU6CisgICAgICAtIERyaXZlciBjcmFzaGVzIGR1cmluZyBib290dGltZSBieSBubyBvYnZpb3VzIHJlYXNvbi4KKyAgICAgIC0gRHJpdmVyIHBhbmljcyB3aGlsZSB0aGUgbWlkbGV2ZWwtU0NTSS1kcml2ZXIgaXMgdHJ5aW5nIHRvIGlucXVpcmUKKyAgICAgICAgdGhlIFNDU0ktZGV2aWNlIHByb3BlcnRpZXMsIGV2ZW4gdGhvdWdoIGhhcmR3YXJlIGlzIGluIHBlcmZlY3Qgc3RhdGUuCisgICAgICAtIERpc3BsYXllZCBpbmZvIGZvciB0aGUgdmFyaW91cyBzbG90LWNhcmRzIGlzIGludGVycHJldGVkIHdyb25nLgorICAgICAgVGhlIG1haW4gcmVhc29ucyBmb3IgdGhlIGNyYXNoZXMgd2VyZSB0d286CisgICAgICAxKSBUaGUgY29tbWFuZHMgdG8gY2hlY2sgZm9yIGRldmljZSBpbmZvcm1hdGlvbiBsaWtlIElOUVVJUlksIAorICAgICAgICAgVEVTVF9VTklUX1JFQURZLCBSRVFVRVNUX1NFTlNFIGFuZCBNT0RFX1NFTlNFIGNhdXNlIHRoZSBkZXZpY2VzCisJIHRvIGRlbGl2ZXIgaW5mb3JtYXRpb24gb2YgdXAgdG8gMjU1IGJ5dGVzLiBNaWRsZXZlbCBkcml2ZXJzIG9mZmVyCisJIDEwMjQgYnl0ZXMgb2Ygc3BhY2UgZm9yIHRoZSBhbnN3ZXIsIGJ1dCB0aGUgSUJNLVNDU0ktYWRhcHRlcnMgZG8KKwkgbm90IGFjY2VwdCB0aGlzLCBhcyB0aGV5IHN0aWNrIHF1aXRlIG5lYXIgdG8gQU5TSS1TQ1NJIGFuZCByZXBvcnQKKwkgYSBDT01NQU5EX0VSUk9SIG1lc3NhZ2Ugd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8gcGFuaWMuIFRoZSBtYWluCisJIHByb2JsZW0gd2FzIGxvY2F0ZWQgYXJvdW5kIHRoZSBJTlFVSVJZIGNvbW1hbmQuIE5vdywgZm9yIGFsbCB0aGUKKwkgbWVudGlvbmVkIGNvbW1hbmRzLCB0aGUgYnVmZmVyc2l6ZSwgc2VudCB0byB0aGUgYWRhcHRlciBpcyBhdCAKKwkgbWF4aW11bSAyNTUgd2hpY2ggc2VlbXMgdG8gYmUgYSBxdWl0ZSByZWFzb25hYmxlIHNvbHV0aW9uLiAKKwkgVEVTVF9VTklUX1JFQURZIGdldHMgYSBidWZmZXJzaXplIG9mIDAgdG8gbWFrZSBzdXJlLCB0aGF0IG5vIAorCSBkYXRhIGlzIHRyYW5zZmVycmVkIGluIG9yZGVyIHRvIGF2b2lkIGFueSBwb3NzaWJsZSBjb21tYW5kIGZhaWx1cmUuCisgICAgICAyKSBPbiB1bnN1Y2Nlc3NmdWwgVEVTVF9VTklUX1JFQURZLCB0aGUgbWlkbGV2ZWwtZHJpdmVyIGhhcyB0byBzZW5kCisgICAgICAgICBhIFJFUVVFU1RfU0VOU0UgaW4gb3JkZXIgdG8gc2VlLCB3aGVyZSB0aGUgcHJvYmxlbSBpcyBsb2NhdGVkLiBUaGlzCisJIFJFUVVFU1RfU0VOU0UgbWF5IGhhdmUgdmFyaW91cyBsZW5ndGggaW4gaXRzIGFuc3dlci1idWZmZXIuIElCTQorCSBTQ1NJLXN1YnN5c3RlbXMgcmVwb3J0IGEgY29tbWFuZCBmYWlsdXJlLCBpZiB0aGUgcmV0dXJuZWQgYnVmZmVyc2l6ZQorCSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2VudCBidWZmZXJzaXplLCBidXQgdGhpcyBjYW4gYmUgc3VwcmVzc2VkIGJ5CisJIGEgc3BlY2lhbCBiaXQsIHdoaWNoIGlzIG5vdyBkb25lIGFuZCBwcm9ibGVtcyBzZWVtIHRvIGJlIHNvbHZlZC4KKyAgIDIpIENvZGUgYWRhcHRpb24gdG8gYWxsIGtlcm5lbC1yZWxlYXNlcy4gTm93LCB0aGUgMy4yIGNvZGUgY29tcGlsZXMgb24gCisgICAgICAyLjAueCwgMi4xLngsIDIuMi54IGFuZCAyLjMueCBrZXJuZWwgcmVsZWFzZXMgd2l0aG91dCBhbnkgY29kZS1jaGFuZ2VzLgorICAgMykgQ29tbWFuZGxpbmUtcGFyYW1ldGVycyBhcmUgcmVjb2duaXplZCBhZ2FpbiwgZXZlbiB1bmRlciBLZXJuZWwgMi4zLnggb3IKKyAgICAgIGhpZ2hlci4KKyAgIC0gTWljaGFlbCBMYW5nICAgCisKKyAgIEFwcmlsIDI3LCAyMDAwICh2My4ycHJlMikKKyAgIDEpIEJ5cGFzc2VkIGNvbW1hbmRzIGdldCByZWFkIGJ5IHRoZSBhZGFwdGVyIGJ5IG9uZSBjeWNsZSBpbnN0ZWFkIG9mIHR3by4KKyAgICAgIFRoaXMgaW5jcmVhc2VzIFNDU0ktcGVyZm9ybWFuY2UuCisgICAyKSBTeW5jaHJvbm91cyBkYXRhdHJhbnNmZXIgaXMgcHJvdmlkZWQgZm9yIHN1cmUgdG8gYmUgNSBNSHogb24gb2xkZXIKKyAgICAgIFNDU0kgYW5kIDEwIE1IeiBvbiBpbnRlcm5hbCBGL1cgU0NTSS1hZGFwdGVyLgorICAgMykgTmV3IGNvbW1hbmRsaW5lIHBhcmFtZXRlcnMgYWxsb3cgdG8gZm9yY2UgdGhlIGFkYXB0ZXIgdG8gc2xvdyBkb3duIHdoaWxlCisgICAgICBpbiBzeW5jaHJvbm91cyB0cmFuc2Zlci4gQ291bGQgYmUgaGVscGZ1bCBmb3IgdmVyeSBvbGQgZGV2aWNlcy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bmUgMiwgMjAwMCAodjMuMnByZTUpCisgICAxKSBBZGRlZCBKaW0gU2hvcm5leSdzIGNvbnRyaWJ1dGlvbiB0byBtYWtlIHRoZSBhY3Rpdml0eSBpbmRpY2F0b3IKKyAgICAgIGZsYXNoaW5nIGluIGFkZGl0aW9uIHRvIHRoZSBMRUQtYWxwaGFudW1lcmljIGRpc3BsYXktcGFuZWwgb24KKyAgICAgIG1vZGVscyA5NUEuIFRvIGJlIGVuYWJsZWQgdG8gY2hvb3NlIHRoaXMgZmVhdHVyZSBmcmVlbHksIGEgbmV3CisgICAgICBjb21tYW5kbGluZSBwYXJhbWV0ZXIgaXMgYWRkZWQsIGNhbGxlZCAnYWN0aXZpdHknLgorICAgMikgQWRkZWQgdGhlIFJFQURfQ09OVFJPTCBiaXQgZm9yIHRlc3RfdW5pdF9yZWFkeSBTQ1NJLWNvbW1hbmQuCisgICAzKSBBZGRlZCBzb21lIHN1cHByZXNzX2V4Y2VwdGlvbiBiaXRzIHRvIHJlYWRfZGV2aWNlX2NhcGFjaXR5IGFuZAorICAgICAgYWxsIGRldmljZV9pbnF1aXJ5IG9jY3VycmVuY2VzIGluIHRoZSBkcml2ZXIgY29kZS4KKyAgIDQpIENvbXBsYWludHMgYWJvdXQgdGhlIHZhcmlvdXMgS0VSTkVMX1ZFUlNJT04gaW1wbGVtZW50YXRpb25zIGFyZQorICAgICAgdGFrZW4gaW50byBhY2NvdW50LiBFdmVyeSBsb2NhbF9MaW51eEtlcm5lbFZlcnNpb24gb2NjdXJyZW5jZSBpcworICAgICAgbm93IHJlcGxhY2VkIGJ5IEtFUk5FTF9WRVJTSU9OLCBkZWZpbmVkIGluIGxpbnV4L3ZlcnNpb24uaC4gCisgICAgICBDb3JyZXNwb25kaW5nIGNoYW5nZXMgd2VyZSBhcHBsaWVkIHRvIGlibW1jYS5oLCB0b28uIFRoaXMgd2FzIGEKKyAgICAgIGNvbnRyaWJ1dGlvbiB0byBhbGwga2VybmVsLXBhcnRzIGJ5IFBoaWxpcHAgSGFobi4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bHkgMTcsIDIwMDAgKHYzLjJwcmU4KQorICAgQSBsb25nIHBlcmlvZCBvZiBjb2xsZWN0aW5nIGJ1Z3JlcG9ydHMgZnJvbSBhbGwgY29ybmVycyBvZiB0aGUgd29ybGQKKyAgIG5vdyBsZWFkIHRvIHRoZSBmb2xsb3dpbmcgY29ycmVjdGlvbnMgdG8gdGhlIGNvZGU6CisgICAxKSBTQ1NJLTIgRi9XIHN1cHBvcnQgY3Jhc2hlZCB3aXRoIGEgQ09NTUFORCBFUlJPUi4gVGhlIHJlYXNvbiBmb3IgdGhpcyAKKyAgICAgIHdhcywgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBkaXNiYWxlIEZhc3QtU0NTSSBmb3IgdGhlIGV4dGVybmFsIGJ1cy4KKyAgICAgIFRoZSBmZWF0dXJlLWNvbnRyb2wgY29tbWFuZCwgd2hlcmUgdGhpcyBjcmFzaCBhcHBlYXJlZCByZWd1bGFybHkgdHJpZWQKKyAgICAgIHRvIHNldCB0aGUgbWF4aW11bSBzcGVlZCBvZiAxME1IeiBzeW5jaHJvbm91cyB0cmFuc2ZlciBzcGVlZCBhbmQgdGhhdAorICAgICAgcmVwb3J0cyBhIENPTU1BTkQgRVJST1IsIGlmIGV4dGVybmFsIGJ1cyBGYXN0LVNDU0kgaXMgZGlzYWJsZWQuIE5vdywKKyAgICAgIHRoZSBmZWF0dXJlLWNvbW1hbmQgcHJvYmVzIGRvd24gZnJvbSBtYXhpbXVtIHNwZWVkIHVudGlsIHRoZSBhZGFwdGVyIAorICAgICAgc3RvcHMgdG8gY29tcGxhaW4sIHdoaWNoIGlzIGF0IHRoZSBzYW1lIHRpbWUgdGhlIG1heGltdW0gcG9zc2libGUKKyAgICAgIHNwZWVkIHNlbGVjdGVkIGluIHRoZSByZWZlcmVuY2UgcHJvZ3JhbS4gU28sIEYvVyBleHRlcm5hbCBjYW4gcnVuIGF0CisgICAgICA1IE1IeiAoc2xvdy0pIG9yIDEwIE1IeiAoZmFzdC1TQ1NJKS4gRHVyaW5nIGZlYXR1cmUgcHJvYmluZywgdGhlIAorICAgICAgQ09NTUFORCBFUlJPUiBtZXNzYWdlIGlzIHVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBhZGFwdGVyIGRvZXMgbm90IGNvbXBsYWluLgorICAgMikgVXAgdG8gbm93LCBvbmx5IGNvbWJpbmVkIGJ1c21vZGUgaXMgc3VwcG9ydGVkLCBpZiB5b3UgdXNlIGV4dGVybmFsCisgICAgICBTQ1NJLWRldmljZXMsIGF0dGFjaGVkIHRvIHRoZSBGL1ctY29udHJvbGxlci4gSWYgZHVhbCBidXMgaXMgc2VsZWN0ZWQsCisgICAgICBvbmx5IHRoZSBpbnRlcm5hbCBTQ1NJLWRldmljZXMgZ2V0IGFjY2Vzc2VkIGJ5IExpbnV4LiBGb3IgbW9zdCAKKyAgICAgIGFwcGxpY2F0aW9ucywgdGhpcyBzaG91bGQgZG8gZmluZS4gCisgICAzKSBXaWRlLVNDU0ktYWRkcmVzc2luZyAoMTYtQml0KSBpcyBub3cgcG9zc2libGUgZm9yIHRoZSBpbnRlcm5hbCBGL1cKKyAgICAgIGJ1cyBvbiB0aGUgRi9XIGFkYXB0ZXIuIElmIEYvVyBhZGFwdGVyIGlzIGRldGVjdGVkLCB0aGUgZHJpdmVyCisgICAgICBhdXRvbWF0aWNhbGx5IHVzZXMgdGhlIGV4dGVuZGVkIFBVTi9MVU4gPC0+IExETiBtYXBwaW5nIHRhYmxlcywgd2hpY2gKKyAgICAgIGFyZSBub3cgbmV3IGZyb20gMy4ycHJlOC4gVGhpcyBhbGxvd3MgUFVOcyBiZXR3ZWVuIDAgYW5kIDE1IGFuZCBzaG91bGQKKyAgICAgIHByb3ZpZGUgbW9yZSBmdW4gd2l0aCB0aGUgRi9XIGFkYXB0ZXIuCisgICA0KSBTZXZlcmFsIG1hY2hpbmVzIHVzZSB0aGUgU0NTSTogUE9TIHJlZ2lzdGVycyBmb3IgaW50ZXJuYWwvdW5kb2N1bWVudGVkCisgICAgICBzdG9yYWdlIG9mIHN5c3RlbSByZWxldmFudCBpbmZvLiBUaGlzIGNvbmZ1c2VkIHRoZSBkcml2ZXIsIG1haW5seSBvbgorICAgICAgbW9kZWxzIDk1OTUsIGFzIGl0IGV4cGVjdGVkIG5vIG9uYm9hcmQgU0NTSSBvbmx5LCBpZiBhbGwgUE9TIGluCisgICAgICB0aGUgaW50ZWdyYXRlZCBTQ1NJLWFyZWEgYXJlIHNldCB0byAweDAwIG9yIDB4ZmYuIE5vdywgdGhlIG1lY2hhbmlzbQorICAgICAgdG8gY2hlY2sgZm9yIGludGVncmF0ZWQgU0NTSSBpcyBtdWNoIG1vcmUgcmVzdHJpY3RpdmUgYW5kIHRoZXNlIHByb2JsZW1zCisgICAgICBzaG91bGQgYmUgaGlzdG9yeS4KKyAgIC0gTWljaGFlbCBMYW5nICAgICAgICAgIAorCisgICBKdWx5IDE4LCAyMDAwICh2My4ycHJlOSkKKyAgIFRoaXMgZGV2ZWxvcCByYXRoZXIgcXVpY2tseSBhdCB0aGUgbW9tZW50LiBUd28gbWFqb3IgdGhpbmdzIHdlcmUgc3RpbGwKKyAgIG1pc3NpbmcgaW4gMy4ycHJlODoKKyAgIDEpIFRoZSBhZGFwdGVyIFBVTiBmb3IgRi9XIGFkYXB0ZXJzIGhhcyA0LWJpdHMsIHdoaWxlIGFsbCBvdGhlciBhZGFwdGVycworICAgICAgaGF2ZSAzLWJpdHMuIFRoaXMgaXMgbm93IHRha2VuIGludG8gYWNjb3VudCBmb3IgRi9XLgorICAgMikgV2hlbiB5b3Ugc2VsZWN0IENPTkZJR19JQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCwgeW91IHNob3VsZCAKKyAgICAgIG5vcm1hbGx5IGdldCB0aGUgaW52ZXJzZSBwcm9iaW5nIG9yZGVyIG9mIHlvdXIgZGV2aWNlcyBvbiB0aGUgU0NTSS1idXMuCisgICAgICBUaGUgQU5TSSBkZXZpY2Ugb3JkZXIgZ2V0cyBzY3JhbWJsZWQgaW4gdmVyc2lvbiAzLjJwcmU4ISEgTm93LCBhIG5ldworICAgICAgYW5kIHRlc3RlZCBhbGdvcml0aG0gaW52ZXJ0cyB0aGUgZGV2aWNlLW9yZGVyIG9uIHRoZSBTQ1NJLWJ1cyBhbmQKKyAgICAgIGF1dG9tYXRpY2FsbHkgYXZvaWRzIGFjY2lkZW50YWwgYWNjZXNzIHRvIHdoYXRldmVyIFNDU0kgUFVOIHRoZSBhZGFwdGVyIAorICAgICAgaXMgc2V0IGFuZCB3b3JrcyB3aXRoIFNDU0ktIGFuZCBXaWRlLVNDU0ktYWRkcmVzc2luZy4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIEp1bHkgMjMsIDIwMDAgKHYzLjJwcmUxMCB1bnB1Ymxpc2hlZCkgCisgICAxKSBMRUQgcGFuZWwgZGlzcGxheSBzdXBwb3J0cyB3aWRlLWFkZHJlc3NpbmcgaW4gaWJtbWNhPWRpc3BsYXkgbW9kZS4KKyAgIDIpIEFkYXB0ZXItaW5mb3JtYXRpb24gYW5kIGF1dG9hZGFwdGlvbiB0byBhZGRyZXNzLXNwYWNlIGlzIGRvbmUuCisgICAzKSBBdXRvLXByb2JpbmcgZm9yIG1heGltdW0gc3luY2hyb25vdXMgU0NTSSB0cmFuc2ZlciByYXRlIGlzIHdvcmtpbmcuCisgICA0KSBPcHRpbWl6YXRpb24gdG8gc29tZSBlbWJlZGRlZCBmdW5jdGlvbiBjYWxscyBpcyBhcHBsaWVkLgorICAgNSkgQWRkZWQgc29tZSBjb21tZW50IGZvciB0aGUgdXNlciB0byB3YWl0IGZvciBTQ1NJLWRldmljZXMgYmVpbmcgcHJvYmVkLgorICAgNikgRmluaXNoZWQgdmVyc2lvbiAzLjIgZm9yIEtlcm5lbCAyLjQuMC4gSXQgbGVhc3QsIEkgdGhvdWdodCBpdCBpcyBidXQuLi4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bHkgMjYsIDIwMDAgKHYzLjJwcmUxMSkKKyAgIDEpIEkgcGFzc2VkIGEgaG9ycmlibGUgd2Vla2VuZCBnZXR0aW5nIG1hZCB3aXRoIE5NSXMgb24ga2VybmVsIDIuMi4xNCBhbmQKKyAgICAgIGEgbW9kZWwgOTU5NS4gQXNraW5nIGFyb3VuZCBpbiB0aGUgY29tbXVuaXR5LCBub2JvZHkgZXhjZXB0IG9mIG1lIGhhcworICAgICAgc2VlbiBzdWNoIGVycm9ycy4gV2VpcmVkLCBidXQgSSBhbSB0cnlpbmcgdG8gcmVjb21waWxlIGV2ZXJ5dGhpbmcgb24KKyAgICAgIHRoZSBtb2RlbCA5NTk1LiBNYXliZSwgYXMgSSB1c2UgYSBzcGVjaWFsbHkgbW9kaWZpZWQgZ2NjLCB0aGF0IGNvdWxkCisgICAgICBjYXVzZSBwcm9ibGVtcy4gQnV0LCBpdCB3YXMgbm90IHRoZSByZWFzb24uIFRoZSB0cnVlIGJhY2tncm91bmQgd2FzLAorICAgICAgdGhhdCB0aGUga2VybmVsIHdhcyBjb21waWxlZCBmb3IgaTM4NiBhbmQgdGhlIDk1OTUgaGFzIGEgNDg2RFgtMi4gCisgICAgICBOb3JtYWxseSwgbm8gdHJvdWJsZXMgc2hvdWxkIGFwcGVhciwgYnV0IGZvciB0aGlzIHNwZWNpYWwgbWFjaGluZSwKKyAgICAgIG9ubHkgdGhlIHJpZ2h0IHByb2Nlc3NvciBzdXBwb3J0IGlzIHdvcmtpbmcgZmluZSEKKyAgIDIpIFByZXZpb3VzIHByb2JsZW1zIHdpdGggc3luY2hyb25vdXMgc3BlZWQsIHNsb3dpbmcgZG93biBmcm9tIG9uZSBhZGFwdGVyIAorICAgICAgdG8gdGhlIG5leHQgZHVyaW5nIHByb2JpbmcgYXJlIGNvcnJlY3RlZC4gTm93LCBsb2NhbCB2YXJpYWJsZXMgc3RvcmUKKyAgICAgIHRoZSBzeW5jaHJvbm91cyBiaXRtYXNrIGZvciBldmVyeSBzaW5nbGUgYWRhcHRlciBmb3VuZCBvbiB0aGUgTUNBIGJ1cy4KKyAgIDMpIExFRCBhbHBoYW51bWVyaWMgcGFuZWwgc3VwcG9ydCBmb3IgWFg5NSBzeXN0ZW1zIGlzIG5vdyBzaG93aW5nIHNvbWUKKyAgICAgIGFsaXZlIHJvdGF0b3IgZHVyaW5nIGJvb3R0aW1lLiBUaGlzIG1ha2VzIHNlbnNlLCB3aGVuIG5vIG1vbml0b3IgaXMgCisgICAgICBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gWW91IGNhbiBnZXQgcmlkIG9mIGFsbCBkaXNwbGF5IGFjdGl2aXR5LCBpZgorICAgICAgeW91IGRvIG5vdCB1c2UgYW55IHBhcmFtZXRlciBvciBqdXN0IGlibW1jYXNjc2k9YWN0aXZpdHksIGZvciB0aGUgCisgICAgICBoYXJkZHJpdmUgYWN0aXZpdHkgTEVELCBleGlzdGFudCBvbiBhbGwgUFMvMiwgZXhjZXB0IG1vZGVscyA4NTk1LVhYWC4KKyAgICAgIElmIG5vIG1vbml0b3IgaXMgYXZhaWxhYmxlLCBwbGVhc2UgdXNlIGlibW1jYXNjc2k9ZGlzcGxheSwgd2hpY2ggd29ya3MKKyAgICAgIGZpbmUgdG9nZXRoZXIgd2l0aCB0aGUgbGludXhpbmZvIHV0aWxpdHkgZm9yIHRoZSBMRUQtcGFuZWwuCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdWx5IDI5LCAyMDAwICh2My4yKQorICAgMSkgU3VibWlzc2lvbiBvZiB0aGlzIGRyaXZlciBmb3Iga2VybmVsIDIuNHRlc3QtWFggYW5kIDIuMi4xNy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIERlY2VtYmVyIDI4LCAyMDAwICh2My4yZCAvIHY0LjApCisgICAxKSBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaGFkIHNvbWUgd3Jvbmcgc3RhdGVtZW50IHRvIHdhaXQgZm9yLiBUaGlzCisgICAgICB3YXMgZG9uZSBkdWUgdG8gZXhwZXJpbWVudGFsIHJlYXNvbnMgZHVyaW5nIDMuMiBkZXZlbG9wbWVudCBidXQgaXQKKyAgICAgIGhhcyBzaG93biB0aGF0IHRoaXMgaXMgbm90IHN0YWJsZSBlbm91Z2guIEdvaW5nIGJhY2sgdG8gd2FpdCBmb3IgdGhlCisgICAgICBhZGFwdGVyIHRvIGJlIG5vdCBidXN5IGlzIGJlc3QuCisgICAyKSBJbnF1aXJ5IHJlcXVlc3RzIGNhbiBiZSBzaG9ydGVyIHRoYW4gMjU1IGJ5dGVzIG9mIHJldHVybiBidWZmZXIuIER1ZQorICAgICAgdG8gYSBidWcgaW4gdGhlIGlibW1jYV9xdWV1ZWNvbW1hbmQgcm91dGluZSwgdGhpcyBidWZmZXIgd2FzIGZvcmNlZAorICAgICAgdG8gMjU1IGF0IG1pbmltdW0uIElmIHRoZSBtZW1vcnkgYWRkcmVzcywgdGhpcyByZXR1cm4gYnVmZmVyIGlzIHBvaW50aW5nCisgICAgICB0byBkb2VzIG5vdCBvZmZlciBtb3JlIHNwYWNlLCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkZXN0YWJpbGl6ZWQgdGhlCisgICAgICBrZXJuZWwuCisgICAzKSB2ZXJzaW9uIDQuMCBpcyBvbmx5IHZhbGlkIGZvciBrZXJuZWwgMi40LjAgb3IgbGF0ZXIuIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgICB0byByZW1vdmUgb2xkIGtlcm5lbCB2ZXJzaW9uIGRlcGVuZGVudCB3YXN0ZSBmcm9tIHRoZSBkcml2ZXIuIDMuMmQgaXMKKyAgICAgIG9ubHkgZGlzdHJpYnV0ZWQgd2l0aCBvbGRlciBrZXJuZWxzIGJ1dCBrZWVwcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKKyAgICAgIGtlcm5lbCB2ZXJzaW9ucy4gNC4wIGFuZCBoaWdoZXIgdmVyc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCBvbGRlciAKKyAgICAgIGtlcm5lbHMgYW55bW9yZSEhIFlvdSBtdXN0IGhhdmUgYXQgbGVhc3Qga2VybmVsIDIuNC4wISEKKyAgIDQpIFRoZSBjb21tYW5kbGluZSBhcmd1bWVudCAnYnlwYXNzJyBhbmQgYWxsIGl0cyBmdW5jdGlvbmFsaXR5IGdvdCByZW1vdmVkCisgICAgICBpbiB2ZXJzaW9uIDQuMC4gVGhpcyB3YXMgbmV2ZXIgcmVhbGx5IG5lY2Vzc2FyeSwgYXMgYWxsIHRyb3VibGVzIHdlcmUKKyAgICAgIGJhc2VkIG9uIG5vbi1jb21tYW5kIHJlbGF0ZWQgcmVhc29ucyB1cCB0byBub3csIHNvIGJ5cGFzc2luZyBjb21tYW5kcworICAgICAgZGlkIG5vdCBoZWxwIHRvIGF2b2lkIGFueSBidWdzLiBJdCBpcyBrZXB0IGluIDMuMlggZm9yIGRlYnVnZ2luZyByZWFzb25zLgorICAgNSkgRHluYW1pY2FsIHJlYXNzaWdubWVudCBvZiBsZG5zIHdhcyBhZ2FpbiB2ZXJpZmllZCBhbmQgYW5hbHl6ZWQgdG8gYmUKKyAgICAgIGNvbXBsZXRlbHkgaW5vcGVyYXRpb25hbC4gVGhpcyBpcyBjb3JyZWN0ZWQgYW5kIHNob3VsZCB3b3JrIG5vdy4KKyAgIDYpIEFsbCBjb21tYW5kcyB0aGF0IGdldCBzZW50IHRvIHRoZSBTQ1NJIGFkYXB0ZXIgd2VyZSB2ZXJpZmllZCBhbmQKKyAgICAgIGNvbXBsZXRlZCBpbiBzdWNoIGEgd2F5LCB0aGF0IHRoZXkgYXJlIG5vdyBjb21wbGV0ZWx5IGNvbmZvcm0gdG8gdGhlCisgICAgICBkZW1hbmRzIGluIHRoZSB0ZWNobmljYWwgZGVzY3JpcHRpb24gb2YgSUJNLiBNYWluIGNhbmRpZGF0ZXMgd2VyZSB0aGUKKyAgICAgIERFVklDRV9JTlFVSVJZLCBSRVFVRVNUX1NFTlNFIGFuZCBERVZJQ0VfQ0FQQUNJVFkgY29tbWFuZHMuIFRoZXkgbXVzdAorICAgICAgYmUgdHJhbmZlcnJlZCBieSBieXBhc3NpbmcgdGhlIGludGVybmFsIGNvbW1hbmQgYnVmZmVyIG9mIHRoZSBhZGFwdGVyCisgICAgICBvciBlbHNlIHRoZSByZXNwb25zZSBjYW4gYmUgYSByYW5kb20gcmVzdWx0LiBHRVRfUE9TX0lORk8gd291bGQgYmUgbW9yZQorICAgICAgc2FmZSBpbiB1c2FnZSwgaWYgb25lIGNvdWxkIHVzZSB0aGUgU1VQUkVTU19FWENFUFRJT05fU0hPUlQsIGJ1dCB0aGlzCisgICAgICBpcyBub3QgYWxsb3dlZCBieSB0aGUgdGVjaG5pY2FsIHJlZmVyZW5jZXMgb2YgSUJNLiAoU29ycnksIGZvbGtzLCB0aGUKKyAgICAgIG1vZGVsIDgwIHByb2JsZW0gaXMgc3RpbGwgYSB0YXNrIHRvIGJlIHNvbHZlZCBpbiBhIGRpZmZlcmVudCB3YXkuKQorICAgNykgdjMuMmQgaXMgc3RpbGwgaG9sZCBiYWNrIGZvciBzb21lIGRheXMgZm9yIHRlc3RpbmcsIHdoaWxlIDQuMCBpcyAKKyAgICAgIHJlbGVhc2VkLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgSmFudWFyeSAzLCAyMDAxICh2NC4wYSkKKyAgIDEpIEEgbG90IG9mIGNvbXBsYWlucyBhZnRlciB0aGUgMi40LjAtcHJlcmVsZWFzZSBrZXJuZWwgY2FtZSBpbiBhYm91dAorICAgICAgdGhlIGltcG9zc2liaWxpdHkgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLiBUaGlzIHByb2JsZW0gaXMKKyAgICAgIHNvbHZlZC4gSW4gY29tYmluYXRpb24gd2l0aCB0aGF0IHByb2JsZW0sIHNvbWUgdW5wcmVjaXNlIGRlY2xhcmF0aW9uCisgICAgICBvZiB0aGUgZnVuY3Rpb24gb3B0aW9uX3NldHVwKCkgZ2F2ZSBzb21lIHdhcm5pbmdzIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgIFRoaXMgaXMgc29sdmVkLCB0b28gYnkgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIGluIGlibW1jYS5jLgorICAgMikgI2lmZGVmIGFyZ3VtZW50IGNvbmNlcm5pbmcgQ09ORklHX1NDU0lfSUJNTUNBIGlzIG5vIGxvbmdlciBuZWVkZWQgYW5kCisgICAgICB3YXMgZW50aXJlbHkgcmVtb3ZlZC4KKyAgIDMpIFNvbWUgc3dpdGNoIHN0YXRlbWVudHMgZ290IG9wdGltaXplZCBpbiBjb2RlLCBhcyBzb21lIG1pbm9yIHZhcmlhYmxlcworICAgICAgaW4gaW50ZXJuYWwgU0NTSS1jb21tYW5kIGhhbmRsZXJzLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgNCBUbyBkbworICAgLS0tLS0tLQorICAgICAgICAtIElCTSBTQ1NJLTIgRi9XIGV4dGVybmFsIFNDU0kgYnVzIHN1cHBvcnQgaW4gc2VwYXJhdGUgbW9kZSEKKwktIEl0IHNlZW1zIHRoYXQgdGhlIGhhbmRsaW5nIG9mIGJhZCBkaXNrcyBpcyByZWFsbHkgYmFkIC0KKwkgIG5vbi1leGlzdGVudCwgaW4gZmFjdC4gSG93ZXZlciwgYSBsb3ctbGV2ZWwgZHJpdmVyIGNhbm5vdCBoZWxwCisJICBtdWNoLCBpZiBzdWNoIHRoaW5ncyBoYXBwZW4uCisKKyAgIDUgVXNlcnMnIE1hbnVhbAorICAgLS0tLS0tLS0tLS0tLS0tCisgICA1LjEgQ29tbWFuZGxpbmUgUGFyYW1ldGVycworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZXJlIGV4aXN0IHNldmVyYWwgZmVhdHVyZXMgZm9yIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gZHJpdmVyLgorICAgVGhlIGNvbW1hbmRsaW5lIHBhcmFtZXRlciBmb3JtYXQgaXM6CisgICAKKyAgICAgICAgIGlibW1jYXNjc2k9PGNvbW1hbmQxPiw8Y29tbWFuZDI+LDxjb21tYW5kMz4sLi4uCisJIAorICAgd2hlcmUgY29tbWFuZE4gY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgCisgICAgICAgICBkaXNwbGF5ICAgIE93bmVycyBvZiBhIG1vZGVsIDk1IG9yIG90aGVyIFBTLzIgc3lzdGVtcyB3aXRoIGFuCisJICAgICAgICAgICAgYWxwaGFudW1lcmljIExFRCBkaXNwbGF5IG1heSBzZXQgdGhpcyB0byBoYXZlIHRoZWlyCisJCSAgICBkaXNwbGF5IHNob3dpbmcgdGhlIGZvbGxvd2luZyBvdXRwdXQgb2YgdGhlIDggZGlnaXRzOgorCQkgICAgICAKKwkJICAgICAgICAgICAgICAgIC0tLS0tLURBCisJCQkJCisJCSAgICB3aGVyZSAnLScgc3RheXMgZGFyaywgJ0QnIHNob3dzIHRoZSBTQ1NJLWRldmljZSBpZAorCQkgICAgYW5kICdBJyBzaG93cyB0aGUgU0NTSSBob3N0aW5kZXgsIGJlaW5nIGN1cnJlbnRseSAKKwkJICAgIGFjY2Vzc2VkLiBEdXJpbmcgYm9vdHRpbWUsIHRoaXMgd2lsbCBnaXZlIHRoZSBtZXNzYWdlCisJCSAgICAKKwkJICAgICAgICAgICAgICAgIFNDU0lpbmkqCisJCQkJCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBMRUQtcGFuZWwsIHdoZXJlIHRoZSAqIHJlcHJlc2VudHMgYSByb3RhdG9yLCAKKwkJICAgIHNob3dpbmcgdGhlIGFjdGl2aXR5IGR1cmluZyB0aGUgcHJvYmluZyBwaGFzZSBvZiB0aGUKKwkJICAgIGRyaXZlciB3aGljaCBjYW4gdGFrZSB1cCB0byB0d28gbWludXRlcyBwZXIgU0NTSS1hZGFwdGVyLgorCSBhZGlzcGxheSAgIFRoaXMgd29ya3MgbGlrZSBkaXNwbGF5LCBidXQgZ2l2ZXMgbW9yZSBvcHRpY2FsIG92ZXJ2aWV3IAorCSAgICAgICAgICAgIG9mIHRoZSBhY3Rpdml0aWVzIG9uIHRoZSBTQ1NJLWJ1cy4gVGhlIGRpc3BsYXkgd2lsbCBoYXZlCisJCSAgICB0aGUgZm9sbG93aW5nIG91dHB1dDoKKwkJICAgIAorCQkgICAgICAgICAgICAgICAgNjU0MzIxMEEKKwkJCQkKKwkJICAgIHdoZXJlIHRoZSBudW1iZXJzIDAgdG8gNiBsaWdodCB1cCBhdCB0aGUgc2hvd24gcG9zaXRpb24sCisJCSAgICB3aGVuIHRoZSBTQ1NJLWRldmljZSBpcyBhY2Nlc3NlZC4gJ0EnIHNob3dzIGFnYWluIHRoZSBTQ1NJCisJCSAgICBob3N0aW5kZXguIElmIGRpc3BsYXkgbm9yIGFkaXNwbGF5IGlzIHNldCwgdGhlIGludGVybmFsCisJCSAgICBQUy8yIGhhcmRkaXNrIExFRCBpcyB1c2VkIGZvciBtZWRpYS1hY3Rpdml0aWVzLiBTbywgaWYKKwkJICAgIHlvdSByZWFsbHkgZG8gbm90IGhhdmUgYSBzeXN0ZW0gd2l0aCBhIExFRC1kaXNwbGF5LCB5b3UKKwkJICAgIHNob3VsZCBub3Qgc2V0IGRpc3BsYXkgb3IgYWRpc3BsYXkuIEtlZXAgaW4gbWluZCwgdGhhdAorCQkgICAgZGlzcGxheSBhbmQgYWRpc3BsYXkgY2FuIG9ubHkgYmUgdXNlZCBhbHRlcm5hdGl2ZWx5LiBJdAorCQkgICAgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIG9wdGlvbiwgaWYgeW91IGhhdmUgc29tZQorCQkgICAgd2lkZS1hZGRyZXNzZWQgZGV2aWNlcyBlLmcuIGF0IHRoZSBTQ1NJLTIgRi9XIGFkYXB0ZXIgaW4KKwkJICAgIHlvdXIgc3lzdGVtLiBJbiBhZGRpdGlvbiwgdGhlIHVzYWdlIG9mIHRoZSBkaXNwbGF5IGZvcgorCQkgICAgb3RoZXIgdGFza3MgaW4gcGFyYWxsZWwsIGxpa2UgdGhlIGxpbnV4aW5mby11dGlsaXR5IG1ha2VzIAorCQkgICAgbm8gc2Vuc2Ugd2l0aCB0aGlzIG9wdGlvbi4KKwkgYWN0aXZpdHkgICBUaGlzIGVuYWJsZXMgdGhlIFBTLzIgaGFyZGRpc2sgTEVEIGFjdGl2aXR5IGluZGljYXRvci4KKwkgICAgICAgICAgICBNb3N0IFBTLzIgaGF2ZSBubyBhbHBoYW51bWVyaWMgTEVEIGRpc3BsYXksIGJ1dCBzb21lCisJCSAgICBpbmRpY2F0b3IuIFNvIHlvdSBzaG91bGQgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGFjdGl2YXRlIGl0LgorCQkgICAgSWYgeW91IG93biBtb2RlbCA5NTk1IChTZXJ2ZXI5NSksIHlvdSBjYW4gaGF2ZSBib3RoLCB0aGUgCisJCSAgICBMRUQgcGFuZWwgYW5kIHRoZSBhY3Rpdml0eSBpbmRpY2F0b3IgaW4gcGFyYWxsZWwuIEhvd2V2ZXIsCisJCSAgICBzb21lIFBTLzJzLCBsaWtlIHRoZSA4NTk1IGRvIG5vdCBoYXZlIGFueSBoYXJkZGlzayBMRUQgCisJCSAgICBhY3Rpdml0eSBpbmRpY2F0b3IsIHdoaWNoIG1lYW5zLCB0aGF0IHlvdSBtdXN0IHVzZSB0aGUKKwkJICAgIGFscGhhbnVtZXJpYyBMRUQgZGlzcGxheSBpZiB5b3Ugd2FudCB0byBtb25pdG9yIFNDU0ktCisJCSAgICBhY3Rpdml0eS4KKwkgYnlwYXNzICAgICBUaGlzIGlzIG9ic29sZXRlIGZyb20gZHJpdmVyIHZlcnNpb24gNC4wLCBhcyB0aGUgYWRhcHRlcnMKKwkgICAgICAgICAgICBnb3QgdGhhdCBmYXIgdW5kZXJzdG9vZCwgdGhhdCB0aGUgc2VsZWN0aW9uIGJldHdlZW4gCisJCSAgICBpbnRlZ3JhdGVkIGFuZCBieXBhc3NlZCBjb21tYW5kcyBzaG91bGQgbm93IHdvcmsgY29tcGxldGVseQorCQkgICAgY29ycmVjdCEgRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlIG9sZCBkZXNjcmlwdGlvbiBpcworCQkgICAga2VwdCBoZXJlOgorCSAgICAgICAgICAgIFRoaXMgY29tbWFuZGxpbmUgcGFyYW1ldGVyIGZvcmNlcyB0aGUgZHJpdmVyIG5ldmVyIHRvIHVzZQorCSAgICAgICAgICAgIFNDU0ktc3Vic3lzdGVtcycgaW50ZWdyYXRlZCBTQ1NJLWNvbW1hbmQgc2V0LiBFeGNlcHQgb2YKKwkJICAgIHRoZSBpbW1lZGlhdGUgYXNzaWduLCB3aGljaCBpcyBvZiB2aXRhbCBpbXBvcnRhbmNlIGZvcgorCQkgICAgZXZlcnkgSUJNIFNDU0ktc3Vic3lzdGVtIHRvIHNldCBpdHMgbGRucyByaWdodC4gSW5zdGVhZCwKKwkJICAgIHRoZSBvcmRpbmFyeSBBTlNJLVNDU0ktY29tbWFuZHMgYXJlIHVzZWQgYW5kIHBhc3NlZCBieSB0aGUKKwkJICAgIGNvbnRyb2xsZXIgdG8gdGhlIFNDU0ktZGV2aWNlcywgdGhlcmVmb3JlICdieXBhc3MnLiBUaGUKKwkJICAgIGVmZm9ydCwgZG9uZSBieSB0aGUgc3Vic3lzdGVtIGlzIHF1aXRlIGJvZ3VzIGFuZCBhdCBhCisJCSAgICBtaW5pbXVtIGFuZCB0aGVyZWZvcmUgaXQgc2hvdWxkIHdvcmsgZXZlcnl3aGVyZS4gVGhpcworCQkgICAgY291bGQgbWF5YmUgc29sdmUgdHJvdWJsZXMgd2l0aCBvbGQgb3IgaW50ZWdyYXRlZCBTQ1NJLQorCQkgICAgY29udHJvbGxlcnMgYW5kIG5hc3R5IGhhcmRkaXNrcy4gS2VlcCBpbiBtaW5kLCB0aGF0IHVzaW5nIAorCQkgICAgdGhpcyBmbGFnIHdpbGwgc2xvdy1kb3duIFNDU0ktYWNjZXNzZXMgc2xpZ2h0bHksIGFzIHRoZSAKKwkJICAgIHNvZnR3YXJlIGdlbmVyYXRlZCBjb21tYW5kcyBhcmUgYWx3YXlzIHNsb3dlciB0aGFuIHRoZSAKKwkJICAgIGhhcmR3YXJlLiBOb24taGFyZGRpc2sgZGV2aWNlcyBhbHdheXMgZ2V0IHJlYWQvd3JpdGUtCisJCSAgICBjb21tYW5kcyBpbiBieXBhc3MgbW9kZS4gT24gdGhlIG1vc3QgcmVjZW50IHJlbGVhc2VzIG9mIAorCQkgICAgdGhlIExpbnV4IElCTS1TQ1NJLWRyaXZlciwgdGhlIGJ5cGFzcyBjb21tYW5kIHNob3VsZCBiZQorCQkgICAgbm8gbG9uZ2VyIGEgbmVjZXNzYXJ5IHRoaW5nLCBpZiB5b3UgYXJlIHN1cmUgYWJvdXQgeW91cgorCQkgICAgU0NTSS1oYXJkd2FyZSEKKwkgbm9ybWFsICAgICBUaGlzIGlzIHRoZSBwYXJhbWV0ZXIsIGludHJvZHVjZWQgb24gdGhlIDIuMC54IGRldmVsb3BtZW50CisJICAgICAgICAgICAgcmFpbCBieSBaUCBHdS4gVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgU0NTSS1kZXZpY2UKKwkJICAgIHNjYW4gb3JkZXIgaW4gdGhlIG5ldyBpbmR1c3RyeSBzdGFuZGFyZC4gVGhpcyBtZWFucywgdGhhdAorCQkgICAgdGhlIGZpcnN0IFNDU0ktZGV2aWNlIGlzIHRoZSBvbmUgd2l0aCB0aGUgbG93ZXN0IHB1bi4KKwkJICAgIEUuZy4gaGFyZGRpc2sgYXQgcHVuPTAgaXMgc2Nhbm5lZCBiZWZvcmUgaGFyZGRpc2sgYXQKKwkJICAgIHB1bj02LCB3aGljaCBtZWFucywgdGhhdCBoYXJkZGlzayBhdCBwdW49MCBnZXRzIHNkYQorCQkgICAgYW5kIHRoZSBvbmUgYXQgcHVuPTYgZ2V0cyBzZGIuCisJIGFuc2kgICAgICAgVGhlIEFOU0ktc3RhbmRhcmQgZm9yIHRoZSByaWdodCBzY2FuIG9yZGVyLCBhcyBkb25lIGJ5CisJICAgICAgICAgICAgSUJNLCBNaWNyb3dhcmUgYW5kIE1pY3Jvc29mdCwgc2NhbnMgU0NTSS1kZXZpY2VzIHN0YXJ0aW5nCisJCSAgICBhdCB0aGUgaGlnaGVzdCBwdW4sIHdoaWNoIG1lYW5zLCB0aGF0IGUuZy4gaGFyZGRpc2sgYXQKKwkJICAgIHB1bj02IGdldHMgc2RhIGFuZCBhIGhhcmRkaXNrIGF0IHB1bj0wIGdldHMgc2RiLiBJZiB5b3UKKwkJICAgIGxpa2UgdG8gaGF2ZSB0aGUgc2FtZSBTQ1NJLWRldmljZSBvcmRlciwgYXMgaW4gRE9TLCBPUy05CisJCSAgICBvciBPUy8yLCBqdXN0IHVzZSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgIGZhc3QgICAgICAgU0NTSS1JL08gaW4gc3luY2hyb25vdXMgbW9kZSBpcyBkb25lIGF0IDUgTUh6IGZvciBJQk0tCisgICAgICAgICAgICAgICAgICAgIFNDU0ktZGV2aWNlcy4gU0NTSS0yIEZhc3QvV2lkZSBBZGFwdGVyL0EgZXh0ZXJuYWwgYnVzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0aGVuIHJ1biBhdCAxMCBNSHogaWYgRmFzdC1TQ1NJIGlzIGVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgIGFuZCBhdCA1IE1IeiBpZiBGYXN0LVNDU0kgaXMgZGlzYWJsZWQgb24gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgIGJ1cy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nIHdoZW4gbm90aGluZyBpcyAKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGhlcmUuCisgICAgICAgICBtZWRpdW0gICAgIFN5bmNocm9ub3VzIHJhdGUgaXMgYXQgNTAlIGFwcHJveGltYXRlbHksIHdoaWNoIG1lYW5zCisgICAgICAgICAgICAgICAgICAgIDIuNSBNSHogZm9yIElCTSBTQ1NJLWFkYXB0ZXJzIGFuZCA1LjAgTUh6IGZvciBGL1cgZXh0LgorICAgICAgICAgICAgICAgICAgICBTQ1NJLWJ1cyAod2hlbiBGYXN0LVNDU0kgc3BlZWQgZW5hYmxlZCBvbiBleHRlcm5hbCBidXMpLgorICAgICAgICAgc2xvdyAgICAgICBUaGUgc2xvd2VzdCBwb3NzaWJsZSBzeW5jaHJvbm91cyB0cmFuc2ZlciByYXRlIGlzIHNldC4gCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgMS44MiBNSHogZm9yIElCTSBTQ1NJLWFkYXB0ZXJzIGFuZCAyLjAgTUh6CisgICAgICAgICAgICAgICAgICAgIGZvciBGL1cgZXh0ZXJuYWwgYnVzIGF0IEZhc3QtU0NTSSBzcGVlZCBvbiB0aGUgZXh0ZXJuYWwKKwkJICAgIGJ1cy4KKwkJICAgIAorICAgQSBmdXJ0aGVyIG9wdGlvbiBpcyB0aGF0IHlvdSBjYW4gZm9yY2UgdGhlIFNDU0ktZHJpdmVyIHRvIGFjY2VwdCBhIFNDU0ktCisgICBzdWJzeXN0ZW0gYXQgYSBjZXJ0YWluIEkvTy1hZGRyZXNzIHdpdGggYSBwcmVkZWZpbmVkIGFkYXB0ZXIgUFVOLiBUaGlzCisgICBpcyBkb25lIGJ5IGVudGVyaW5nIAorCisgICAgICAgICAgICAgICAgICBjb21tYW5kTiAgID0gSS9PLWJhc2UKKwkJICBjb21tYW5kTisxID0gYWRhcHRlciBQVU4KKwkJICAKKyAgIGUuZy4gaWJtbWNhc2NzaT0weDM1NDAsNyB3aWxsIGZvcmNlIHRoZSBkcml2ZXIgdG8gZGV0ZWN0IGEgU0NTSS1zdWJzeXN0ZW0gCisgICBhdCBJL08tYWRkcmVzcyAweDM1NDAgd2l0aCBhZGFwdGVyIFBVTiA3LiBQbGVhc2Ugb25seSB1c2UgdGhpcyBtZXRob2QsIGlmCisgICB0aGUgZHJpdmVyIGRvZXMgcmVhbGx5IG5vdCByZWNvZ25pemUgeW91ciBTQ1NJLWFkYXB0ZXIhIFdpdGggZHJpdmVyIHZlcnNpb24KKyAgIDMuMiwgdGhpcyByZWNvZ25pdGlvbiBvZiB2YXJpb3VzIGFkYXB0ZXJzIHdhcyBodWdlbHkgaW1wcm92ZWQgYW5kIHlvdQorICAgc2hvdWxkIHRyeSBmaXJzdCB0byByZW1vdmUgeW91ciBjb21tYW5kbGluZSBhcmd1bWVudHMgb2Ygc3VjaCB0eXBlIHdpdGggYSAKKyAgIG5ld2VyIGRyaXZlci4gSSBiZXQsIGl0IHdpbGwgYmUgcmVjb2duaXplZCBjb3JyZWN0bHkuIEV2ZW4gbXVsdGlwbGUgYW5kIAorICAgZGlmZmVyZW50IHR5cGVzIG9mIElCTSBTQ1NJLWFkYXB0ZXJzIHNob3VsZCBiZSByZWNvZ25pemVkIGNvcnJlY3RseSwgdG9vLgorICAgVXNlIHRoZSBmb3JjZWQgZGV0ZWN0aW9uIG1ldGhvZCBvbmx5IGFzIGxhc3Qgc29sdXRpb24hCisgICAKKyAgIEV4YW1wbGVzOgorICAgCisgICAgICAgIGlibW1jYXNjc2k9YWRpc3BsYXkKKwkKKyAgIFRoaXMgd2lsbCB1c2UgdGhlIGFkdmFuY2VkIGRpc3BsYXkgbW9kZSBmb3IgdGhlIG1vZGVsIDk1IExFRCBhbHBoYW51bWVyaWMKKyAgIGRpc3BsYXkuCisgICAKKyAgICAgICAgaWJtbWNhc2NzaT1kaXNwbGF5LDB4MzU1OCw3CisJCisgICBUaGlzIHdpbGwgYWN0aXZhdGUgdGhlIGRlZmF1bHQgZGlzcGxheSBtb2RlIGZvciB0aGUgbW9kZWwgOTUgTEVEIGRpc3BsYXkKKyAgIGFuZCB3aWxsIGZvcmNlIHRoZSBkcml2ZXIgdG8gYWNjZXB0IGEgU0NTSS1zdWJzeXN0ZW0gYXQgSS9PLWJhc2UgMHgzNTU4CisgICB3aXRoIGFkYXB0ZXIgUFVOIDcuCisgICAKKyAgIDUuMiBUcm91Ymxlc2hvb3RpbmcKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZSBmb2xsb3dpbmcgRkFRcyBzaG91bGQgaGVscCB5b3UgdG8gc29sdmUgc29tZSBtYWpvciBwcm9ibGVtcyB3aXRoIHRoaXMKKyAgIGRyaXZlci4KKyAgIAorICAgICBROiAiUmVzZXQgU0NTSS1kZXZpY2VzIGF0IGJvb3R0aW1lIiBoYWx0cyB0aGUgc3lzdGVtIGF0IGJvb3R0aW1lLCB3aHk/CisgICAgIEE6IFRoaXMgaXMgb25seSB0ZXN0ZWQgd2l0aCB0aGUgSUJNIFNDU0kgQWRhcHRlciB3L2NhY2hlLiBJdCBpcyBub3QKKyAgICAgICAgeWV0IHByb292ZWQgdG8gcnVuIG9uIG90aGVyIGFkYXB0ZXJzLCBob3dldmVyIHlvdSBtYXkgYmUgbHVja3kuCisJSW4gdmVyc2lvbiAzLjFkIHRoaXMgaGFzIGJlZW4gaHVnZWx5IGltcHJvdmVkIGFuZCBzaG91bGQgd29yayBiZXR0ZXIsCisJbm93LiBOb3JtYWxseSB5b3UgcmVhbGx5IHdvbid0IG5lZWQgdG8gYWN0aXZhdGUgdGhpcyBmbGFnIGluIHRoZQorCWtlcm5lbCBjb25maWd1cmF0aW9uLCBhcyBhbGwgcG9zdCAxOTg5IFNDU0ktZGV2aWNlcyBzaG91bGQgYWNjZXB0CisJdGhlIHJlc2V0LXNpZ25hbCwgd2hlbiB0aGUgY29tcHV0ZXIgaXMgc3dpdGNoZWQgb24uIFRoZSBTQ1NJLQorCXN1YnN5c3RlbSBnZW5lcmF0ZXMgdGhpcyByZXNldCB3aGlsZSBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBmbGFnCisJaXMgcmVhbGx5IHJlc2VydmVkIGZvciB1c2VycyB3aXRoIHZlcnkgb2xkLCB2ZXJ5IHN0cmFuZ2Ugb3Igc2VsZi1tYWRlCisJU0NTSS1kZXZpY2VzLgorICAgICBROiBXaHkgaXMgdGhlIFNDU0ktb3JkZXIgb2YgbXkgZHJpdmVzIG1pcnJvcmVkIHRvIHRoZSBkZXZpY2Utb3JkZXIKKyAgICAgICAgc2VlbiBmcm9tIE9TLzIgb3IgRE9TID8KKyAgICAgQTogSXQgZGVwZW5kcyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgaWYgaXQgbG9va3MgYXQgdGhlIGRldmljZXMgaW4KKyAgICAgICAgQU5TSS1TQ1NJLXN0YW5kYXJkIChzdGFydGluZyBmcm9tIHB1biA2IGFuZCBnb2luZyBkb3duIHRvIHB1biAwKSBvcgorCWlmIGl0IGp1c3Qgc3RhcnRzIGF0IHB1biAwIGFuZCBjb3VudHMgdXAuIElmIHlvdSB3YW50IHRvIGJlIGNvbmZvcm0KKwl3aXRoIE9TLzIgYW5kIERPUywgeW91IGhhdmUgdG8gYWN0aXZhdGUgdGhpcyBmbGFnIGluIHRoZSBrZXJuZWwKKwljb25maWd1cmF0aW9uIG9yIHlvdSBzaG91bGQgc2V0ICdhbnNpJyBhcyBwYXJhbWV0ZXIgZm9yIHRoZSBrZXJuZWwuCisJVGhlIHBhcmFtZXRlciAnbm9ybWFsJyBzZXRzIHRoZSBuZXcgaW5kdXN0cnkgc3RhbmRhcmQsIHN0YXJ0aW5nCisJZnJvbSBwdW4gMCwgc2Nhbm5pbmcgdXAgdG8gcHVuIDYuIFRoaXMgYWxsb3dzIHlvdSB0byBjaGFuZ2UgeW91ciAKKwlvcGluaW9uIHN0aWxsIGFmdGVyIGhhdmluZyBhbHJlYWR5IGNvbXBpbGVkIHRoZSBrZXJuZWwuCisgICAgIFE6IFdoeSBJIGNhbm5vdCBmaW5kIHRoZSBJQk0gTUNBIFNDU0kgc3VwcG9ydCBpbiB0aGUgY29uZmlnIG1lbnVlPworICAgICBBOiBZb3UgaGF2ZSB0byBhY3RpdmF0ZSBNQ0EgYnVzIHN1cHBvcnQsIGZpcnN0LgorICAgICBROiBXaGVyZSBjYW4gSSBmaW5kIHRoZSBsYXRlc3QgaW5mbyBhYm91dCB0aGlzIGRyaXZlcj8KKyAgICAgQTogU2VlIHRoZSBmaWxlIE1BSU5UQUlORVJTIGZvciB0aGUgY3VycmVudCBXV1ctYWRkcmVzcywgd2hpY2ggb2ZmZXJzCisgICAgICAgIHVwZGF0ZXMsIGluZm8gYW5kIFEvQSBsaXN0cy4gQXQgdGhpcyBmaWxlcycgb3JpZ2luLCB0aGUgd2ViYWRkcmVzcworCXdhczogaHR0cDovL3d3dy51bmktbWFpbnouZGUvfmxhbmdtMDAwL2xpbnV4Lmh0bWwKKyAgICAgUTogTXkgU0NTSS1hZGFwdGVyIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHdoYXQgY2FuIEkgZG8/CisgICAgIEE6IEp1c3QgZm9yY2UgaXQgdG8gYmUgcmVjb2duaXplZCBieSBrZXJuZWwgcGFyYW1ldGVycy4gU2VlIHNlY3Rpb24gNS4xLgorICAgICAgICBJZiB0aGlzIHJlYWxseSBoYXBwZW5zLCBkbyBhbHNvIHNlbmQgZS1tYWlsIHRvIHRoZSBtYWludGFpbmVyLCBhcworCWZvcmNlZCBkZXRlY3Rpb24gc2hvdWxkIGJlIG5ldmVyIG5lY2Vzc2FyeS4gRm9yY2VkIGRldGVjdGlvbiBpcyBpbgorCXByaW5jaXBhbCBzb21lIGZsYXcgb2YgdGhlIGRyaXZlciBhZGFwdGVyIGRldGVjdGlvbiBhbmQgZ29lcyBpbnRvIAorCWJ1Z3JlcG9ydHMuCisgICAgIFE6IFRoZSBkcml2ZXIgc2NyZXdzIHVwLCBpZiBpdCBzdGFydHMgdG8gcHJvYmUgU0NTSS1kZXZpY2VzLCBpcyB0aGVyZQorICAgICAgICBzb21lIHdheSBvdXQgb2YgaXQ/CisgICAgIEE6IFllcywgdGhhdCB3YXMgc29tZSByZWNvZ25pdGlvbiBwcm9ibGVtIG9mIHRoZSBjb3JyZWN0IFNDU0ktYWRhcHRlcgorICAgICAgICBhbmQgaXRzIEkvTyBiYXNlIGFkZHJlc3Nlcy4gVXBncmFkZSB5b3VyIGRyaXZlciB0byB0aGUgbGF0ZXN0IHJlbGVhc2UKKwlhbmQgaXQgc2hvdWxkIGJlIGZpbmUgYWdhaW4uCisgICAgIFE6IEkgZ2V0IGEgbWVzc2FnZTogcGFuaWMgSUJNIE1DQSBTQ1NJOiBjb21tYW5kIGVycm9yIC4uLi4gLCB3aGF0IGNhbgorICAgICAgICBJIGRvIGFnYWluc3QgdGhpcz8KKyAgICAgQTogUHJldmlvdXNseSwgSSBmb2xsb3dlZCB0aGUgd2F5IGJ5IGlnbm9yaW5nIGNvbW1hbmQgZXJyb3JzIGJ5IHVzaW5nCisgICAgICAgIGlibW1jYXNjc2k9Zm9yZ2l2ZWFsbCwgYnV0IHRoaXMgY29tbWFuZCBubyBsb25nZXIgZXhpc3RzIGFuZCBpcworCW9ic29sZXRlLiBJZiBzdWNoIGEgcHJvYmxlbSBhcHBlYXJzLCBpdCBpcyBjYXVzZWQgYnkgc29tZSBzZWdtZW50YXRpb24KKwlmYXVsdCBvZiB0aGUgZHJpdmVyLCB3aGljaCBtYXBzIHRvIHNvbWUgdW5hbGxvd2VkIGFyZWEuIFRoZSBsYXRlc3QgCisJdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHNob3VsZCBiZSBvaywgYXMgbW9zdCBidWdzIGhhdmUgYmVlbiBzb2x2ZWQuCisgICAgIFE6IFRoZXJlIGFyZSBzdGlsbCBrZXJuZWwgcGFuaWNzLCBldmVuIGFmdGVyIGhhdmluZyBzZXQgCisgICAgICAgIGlibW1jYXNjc2k9Zm9yZ2l2ZWFsbC4gQXJlIHRoZXJlIG90aGVyIHBvc3NpYmlsaXRpZXMgdG8gcHJldmVudAorCXN1Y2ggcGFuaWNzPworICAgICBBOiBObywgZ2V0IGp1c3QgdGhlIGxhdGVzdCByZWxlYXNlIG9mIHRoZSBkcml2ZXIgYW5kIGl0IHNob3VsZCB3b3JrIAorICAgICAgICBiZXR0ZXIgYW5kIGJldHRlciB3aXRoIGluY3JlYXNpbmcgdmVyc2lvbiBudW1iZXIuIEZvcmdldCBhYm91dCB0aGlzCisJaWJtbWNhc2NzaT1mb3JnaXZlYWxsLCBhcyBhbHNvIGlnbm9yZWNtZCBhcmUgb2Jzb2xldGUuIQorICAgICBROiBMaW51eCBwYW5pY3Mgb3Igc3RvcHMgd2l0aG91dCBhbnkgY29tbWVudCwgYnV0IGl0IGlzIHByb2JhYmxlLCB0aGF0IG15CisgICAgICAgIGhhcmRkaXNrKHMpIGhhdmUgYmFkIGJsb2Nrcy4KKyAgICAgQTogU29ycnksIHRoZSBiYWQtYmxvY2sgaGFuZGxpbmcgaXMgc3RpbGwgYSBmZWVibGUgcG9pbnQgb2YgdGhpcyBkcml2ZXIsCisgICAgICAgIGJ1dCBpcyBvbiB0aGUgc2NoZWR1bGUgZm9yIGRldmVsb3BtZW50IGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgICAgUTogTGludXggcGFuaWNzIHdoaWxlIGR5bmFtaWNhbGx5IGFzc2lnbmluZyBTQ1NJLWlkcyBvciBsZG5zLgorICAgICBBOiBJZiB5b3UgZGlzY29ubmVjdCBhIFNDU0ktZGV2aWNlIGZyb20gdGhlIG1hY2hpbmUsIHdoaWxlIExpbnV4IGlzIHVwCisgICAgICAgIGFuZCB0aGUgZHJpdmVyIHVzZXMgZHluYW1pY2FsIHJlYXNzaWdubWVudCBvZiBsb2dpY2FsIGRldmljZSBudW1iZXJzCisJKGxkbiksIGl0IHJlYWxseSBnZXRzICJhbmdyeSIgaWYgaXQgd29uJ3QgZmluZCBkZXZpY2VzLCB0aGF0IHdlcmUgc3RpbGwKKwlwcmVzZW50IGF0IGJvb3R0aW1lIGFuZCBzdG9wcyBMaW51eC4KKyAgICAgUTogVGhlIHN5c3RlbSBkb2VzIG5vdCByZWNvdmVyIGFmdGVyIGFuIGFib3J0LWNvbW1hbmQgaGFzIGJlZW4gZ2VuZXJhdGVkLgorICAgICBBOiBUaGlzIGlzIHJlZ3JldHRhYmx5IHRydWUsIGFzIGl0IGlzIG5vdCB5ZXQgdW5kZXJzdG9vZCwgd2h5IHRoZSAKKyAgICAgICAgU0NTSS1hZGFwdGVyIGRvZXMgcmVhbGx5IE5PVCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0IGF0IHRoZSBlbmQgb2YKKwl0aGUgYWJvcnQtY29tbWFuZC4gQXMgbm8gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCwgdGhlIGFib3J0IGNvbW1hbmQKKwljYW5ub3QgZ2V0IGZpbmlzaGVkIGFuZCB0aGUgc3lzdGVtIGhhbmdzLCBzb3JyeSwgYnV0IGNoZWNrcyBhcmUgCisJcnVubmluZyB0byBodW50IGRvd24gdGhpcyBwcm9ibGVtLiBJZiB0aGVyZSBpcyBhIHJlYWwgcGVuZGluZyBjb21tYW5kLAorCXRoZSBpbnRlcnJ1cHQgTVVTVCBnZXQgZ2VuZXJhdGVkIGFmdGVyIGFib3J0LiBJbiB0aGlzIGNhc2UsIGl0CisJc2hvdWxkIGZpbmlzaCB3ZWxsLgorICAgICBROiBUaGUgc3lzdGVtIGdldHMgaW4gYmFkIHNoYXBlIGFmdGVyIGEgU0NTSS1yZXNldCwgaXMgdGhpcyBrbm93bj8KKyAgICAgQTogWWVzLCBhcyB0aGVyZSBhcmUgYSBsb3Qgb2YgcHJlc2NyaXB0aW9ucyAoc2VlIHRoZSBMaW51eCBIYWNrZXJzJworICAgICAgICBHdWlkZSkgd2hhdCBoYXMgdG8gYmUgZG9uZSBmb3IgcmVzZXQsIHdlIHN0aWxsIHNoYXJlIHRoZSBiYWQgc2hhcGUgb2YKKwl0aGUgcmVzZXQgZnVuY3Rpb25zIHdpdGggYWxsIG90aGVyIGxvdyBsZXZlbCBTQ1NJLWRyaXZlcnMuIAorCUFzdG9uaXNoaW5nbHksIHJlc2V0IHdvcmtzIGluIG1vc3QgY2FzZXMgcXVpdGUgb2ssIGJ1dCB0aGUgaGFyZGRpc2tzCisJd29uJ3QgcnVuIGluIHN5bmNob25vdXMgbW9kZSBhbnltb3JlIGFmdGVyIGEgcmVzZXQsIHVudGlsIHlvdSByZWJvb3QuCisgICAgIFE6IFdoeSBkb2VzIG15IFhYWCB3L0NhY2hlIGFkYXB0ZXIgbm90IHVzZSByZWFkLXByZWZldGNoPworICAgICBBOiBPaywgdGhhdCBpcyBub3QgY29tcGxldGVseSBwb3NzaWJsZS4gSWYgYSBjYWNoZSBpcyBwcmVzZW50LCB0aGUgCisgICAgICAgIGFkYXB0ZXIgdHJpZXMgdG8gdXNlIGl0IGludGVybmFsbHkuIEV4cGxpY2l0bHksIG9uZSBjYW4gdXNlIHRoZSBjYWNoZQorCXdpdGggYSByZWFkIHByZWZldGNoIGNvbW1hbmQsIG1heWJlIGluIGZ1dHVyZSwgYnV0IHRoaXMgcmVxdWlyZXMKKwlzb21lIG1ham9yIG92ZXJoZWFkIG9mIFNDU0ktY29tbWFuZHMgdGhhdCByaXNrcyB0aGUgcGVyZm9ybWFuY2UgdG8KKwlnbyBkb3duIG1vcmUgdGhhbiBpdCBnZXRzIGltcHJvdmVkLiBUZXN0cyB3aXRoIHRoYXQgYXJlIHJ1bm5pbmcuCisgICAgIFE6IEkgaGF2ZSBhIElCTSBTQ1NJLTIgRmFzdC9XaWRlIGFkYXB0ZXIsIGl0IGJvb3RzIGluIHNvbWUgd2F5IGFuZCBoYW5ncy4KKyAgICAgQTogWWVzLCB0aGF0IGlzIHVuZGVyc3Rvb2QsIGFzIGZvciBzdXJlLCB5b3VyIFNDU0ktMiBGYXN0L1dpZGUgYWRhcHRlcgorICAgICAgICB3YXMgaW4gc3VjaCBhIGNhc2UgcmVjb2duaXplZCBhcyBpbnRlZ3JhdGVkIFNDU0ktYWRhcHRlciBvciBzb21ldGhpbmcgCisJZWxzZSwgYnV0IG5vdCBhcyB0aGUgY29ycmVjdCBhZGFwdGVyLiBBcyB0aGUgSS9PLXBvcnRzIGdldCBhc3NpZ25lZCAKKwl3cm9uZ2x5IGJ5IHRoYXQgcmVhc29uLCB0aGUgc3lzdGVtIHNob3VsZCBjcmFzaCBpbiBtb3N0IGNhc2VzLiBZb3UgCisJc2hvdWxkIHVwZ3JhZGUgdG8gdGhlIGxhdGVzdCByZWxlYXNlIG9mIHRoZSBTQ1NJLWRyaXZlci4gVGhlIAorCXJlY29tbWVuZGVkIHZlcnNpb24gaXMgMy4yIG9yIGxhdGVyLiBIZXJlLCB0aGUgRi9XIHN1cHBvcnQgaXMgaW4KKwlhIHN0YWJsZSBhbmQgcmVsaWFibGUgY29uZGl0aW9uLiBXaWRlLWFkZHJlc3NpbmcgaXMgaW4gYWRkaXRpb24gCisJc3VwcG9ydGVkLgorICAgICBROiBJIGdldCBhIE9vb3BzIG1lc3NhZ2UgYW5kIHNvbWV0aGluZyBsaWtlICJraWxsaW5nIGludGVycnVwdCIuCisgICAgIEE6IFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIG9ubHkgc2VuZHMgYSAKKyAgICAgICAgdGVybWluYXRpb24gc3RhdHVzIGJhY2ssIGlmIHNvbWUgZXJyb3IgYXBwZWFyZWQuIEluIGZvcm1lciByZWxlYXNlcworCW9mIHRoZSBkcml2ZXIsIGl0IHdhcyBub3QgY2hlY2tlZCwgaWYgdGhlIHRlcm1pbmF0aW9uIHN0YXR1cyBibG9jaworCWlzIE5VTEwuIEZyb20gdmVyc2lvbiAzLjIsIGl0IGlzIHRha2VuIGNhcmUgb2YgdGhpcy4KKyAgICAgUTogSSBoYXZlIGEgRi9XIGFkYXB0ZXIgYW5kIHRoZSBkcml2ZXIgc2VlcyBteSBpbnRlcm5hbCBTQ1NJLWRldmljZXMsCisgICAgICAgIGJ1dCBpZ25vcmVzIHRoZSBleHRlcm5hbCBvbmVzLgorICAgICBBOiBTZWxlY3QgY29tYmluZWQgYnVzbW9kZSBpbiB0aGUgSUJNIGNvbmZpZy1wcm9ncmFtIGFuZCBjaGVjayBmb3IgdGhhdAorICAgICAgICBubyBTQ1NJLWlkIG9uIHRoZSBleHRlcm5hbCBkZXZpY2VzIGFwcGVhcnMgb24gaW50ZXJuYWwgZGV2aWNlcy4KKyAgICAgICAgUmVib290IGFmdGVyd2FyZHMuIER1YWwgYnVzbW9kZSBpcyBzdXBwb3J0ZWQsIGJ1dCB3b3JrcyBvbmx5IGZvciB0aGUKKwlpbnRlcm5hbCBidXMsIHlldC4gRXh0ZXJuYWwgYnVzIGlzIHN0aWxsIGlnbm9yZWQuIFRha2UgY2FyZSBmb3IgeW91cgorCVNDU0ktaWRzLiBJZiBjb21iaW5lZCBidXMtbW9kZSBpcyBhY3RpdmF0ZWQsIG9uIHNvbWUgYWRhcHRlcnMsIAorCXRoZSB3aWRlLWFkZHJlc3NpbmcgaXMgbm90IHBvc3NpYmxlLCBzbyBkZXZpY2VzIHdpdGggaWRzIGJldHdlZW4gOCAKKwlhbmQgMTUgZ2V0IGlnbm9yZWQgYnkgdGhlIGRyaXZlciAmIGFkYXB0ZXIhCisgICAgIFE6IEkgaGF2ZSBhIDk1OTUgYW5kIEkgZ2V0IGEgTk1JIGR1cmluZyBoZWF2eSBTQ1NJIEkvTyBlLmcuIGR1cmluZyBmc2NrLgorICAgICAgICBBIENPTU1BTkQgRVJST1IgaXMgcmVwb3J0ZWQgYW5kIGNoYXJhY3RlcnMgb24gdGhlIHNjcmVlbiBhcmUgbWlzc2luZy4KKwlXYXJtIHJlYm9vdCBpcyBub3QgcG9zc2libGUuIFRoaW5ncyBsb29rIGxpa2UgcXVpdGUgd2VpcmVkLgorICAgICBBOiBDaGVjayB0aGUgcHJvY2Vzc29yIHR5cGUgb2YgeW91ciA5NTk1LiBJZiB5b3UgaGF2ZSBhbiA4MDQ4NiBvciA0ODZEWC0yCisgICAgICAgIHByb2Nlc3NvciBjb21wbGV4IG9uIHlvdXIgbWFpbmJvYXJkIGFuZCB5b3UgY29tcGlsZWQgYSBrZXJuZWwgdGhhdAorCXN1cHBvcnRzIDgwMzg2IHByb2Nlc3NvcnMsIGl0IGlzIHBvc3NpYmxlLCB0aGF0IHRoZSBrZXJuZWwgY2Fubm90CisJa2VlcCB0cmFjayBvZiB0aGUgUFMvMiBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHN0b3BzIG9uIGFuIE5NSS4gSnVzdAorCWNvbXBpbGUgYSBrZXJuZWwgZm9yIHRoZSBjb3JyZWN0IHByb2Nlc3NvciB0eXBlIG9mIHlvdXIgUFMvMiBhbmQKKwlldmVyeXRoaW5nIHNob3VsZCBiZSBmaW5lLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIG9uZSBhc3N1bWVzLAorCXRoYXQgc29tZSA4MDQ4NiBzeXN0ZW0gc2hvdWxkIGJlIGRvd253YXJkIGNvbXBhdGlibGUgdG8gODAzODYKKwlzb2Z0d2FyZS4KKyAgICAgUTogU29tZSBjb21tYW5kcyBoYW5nIGFuZCBpbnRlcnJ1cHRzIGJsb2NrIHRoZSBtYWNoaW5lLiBBZnRlciBzb21lCisgICAgICAgIHRpbWVvdXQsIHRoZSBzeXNsb2cgcmVwb3J0cyB0aGF0IGl0IHRyaWVzIHRvIGNhbGwgYWJvcnQsIGJ1dCB0aGUKKwltYWNoaW5lIGlzIGZyb3plbi4KKyAgICAgQTogVGhpcyBjYW4gYmUgYSBidXN5IHdhaXQgYnVnIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBvZiBkcml2ZXIgCisgICAgICAgIHZlcnNpb24gMy4yLiBZb3Ugc2hvdWxkIGF0IGxlYXN0IHVwZ3JhZGUgdG8gMy4yYyBpZiB5b3UgdXNlIAorCWtlcm5lbCA8IDIuNC4wIGFuZCBkcml2ZXIgdmVyc2lvbiA0LjAgaWYgeW91IHVzZSBrZXJuZWwgMi40LjAgb3IgCisJbGF0ZXIgKGluY2x1ZGluZyBhbGwgdGVzdCByZWxlYXNlcykuCisgICAgIFE6IEkgaGF2ZSBhIFBTLzIgbW9kZWwgODAgYW5kIG1vcmUgdGhhbiAxNiBNQnl0ZXMgb2YgUkFNLiBUaGUgZHJpdmVyCisgICAgICAgIGNvbXBsZXRlbHkgcmVmdXNlcyB0byB3b3JrLCByZXBvcnRzIE5NSXMsIENPTU1BTkQgRVJST1JzIG9yIG90aGVyCisJYW1iaWd1b3VzIHN0dWZmLiBXaGVuIHJlZHVjaW5nIHRoZSBSQU0gc2l6ZSBkb3duIGJlbG93IDE2IE1CLCAKKwlldmVyeXRoaW5nIGlzIHJ1bm5pbmcgc21vb3RobHkuCisgICAgIEE6IE5vIHJlYWwgYW5zd2VyLCB5ZXQuIEluIGFueSBjYXNlLCBvbmUgc2hvdWxkIGZvcmNlIHRoZSBrZXJuZWwgdG8KKyAgICAgICAgcHJlc2VudCBTQ0JzIG9ubHkgYmVsb3cgdGhlIDE2IE1CeXRlcyBiYXJyaWVyLiBNYXliZSB0aGlzIHNvbHZlcyB0aGUKKwlwcm9ibGVtLiBOb3QgeWV0IHRyaWVkLCBidXQgZ3Vlc3NpbmcgdGhhdCBpdCBjb3VsZCB3b3JrLiBUbyBnZXQgdGhpcywKKwlzZXQgdW5jaGVja2VkX2lzYV9kbWEgYXJndW1lbnQgb2YgaWJtbWNhLmggZnJvbSAwIHRvIDEuCisKKyAgIDUuMyBCdWdyZXBvcnRzCisgICAtLS0tLS0tLS0tLS0tLQorICAgSWYgeW91IHJlYWxseSBmaW5kIGJ1Z3MgaW4gdGhlIHNvdXJjZWNvZGUgb3IgdGhlIGRyaXZlciB3aWxsIHN1Y2Nlc3NmdWxseQorICAgcmVmdXNlIHRvIHdvcmsgb24geW91ciBtYWNoaW5lLCB5b3Ugc2hvdWxkIHNlbmQgYSBidWcgcmVwb3J0IHRvIG1lLiBUaGUKKyAgIGJlc3QgZm9yIHRoaXMgaXMgdG8gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgb24gdGhlIFdXVy1wYWdlIGZvciB0aGlzCisgICBkcml2ZXIuIEZpbGwgb3V0IHRoZSBidWctcmVwb3J0IGZvcm0sIHBsYWNlZCBvbiB0aGUgV1dXLXBhZ2UgYW5kIHNoaXAgaXQsCisgICBzbyB0aGUgYnVncyBjYW4gYmUgdGFrZW4gaW50byBhY2NvdW50IHdpdGggbWF4aW11bSBlZmZvcnRzLiBCdXQsIHBsZWFzZQorICAgZG8gbm90IHNlbmQgYnVnIHJlcG9ydHMgYWJvdXQgdGhpcyBkcml2ZXIgdG8gTGludXMgVG9ydmFsZHMgb3IgTGVvbmFyZAorICAgWnVia29mZiwgYXMgTGludXMgaXMgYnVycmllZCBpbiBFLU1haWwgYW5kIExlb25hcmQgaXMgc3VwZXJ2aXNpbmcgYWxsCisgICBTQ1NJLWRyaXZlcnMgYW5kIHdvbid0IGhhdmUgdGhlIHRpbWUgbGVmdCB0byBsb29rIGluc2lkZSBldmVyeSBzaW5nbGUKKyAgIGRyaXZlciB0byBmaXggYSBidWcgYW5kIGVzcGVjaWFsbHkgRE8gTk9UIHNlbmQgbW9kaWZpZWQgY29kZSB0byBMaW51cworICAgVG9ydmFsZHMgb3IgQWxhbiBKLiBDb3ggd2hpY2ggaGFzIG5vdCBiZWVuIGNoZWNrZWQgaGVyZSEhISBUaGV5IGFyZSBib3RoCisgICBxdWl0ZSBidXJyaWVkIGluIEUtbWFpbCAoYXMgbWUsIHNvbWV0aW1lcywgdG9vKSBhbmQgb25lIHNob3VsZCBmaXJzdCBjaGVjaworICAgZm9yIHByb2JsZW1zIG9uIG15IGxvY2FsIHRlc3RzdGFuZC4gUmVjZW50bHksIEkgZ290IGEgbG90IG9mIAorICAgYnVncmVwb3J0cyBmb3IgZXJyb3JzIGluIHRoZSBpYm1tY2EuYyBjb2RlLCB3aGljaCBJIGNvdWxkIG5vdCBpbWFnaW5lLCBidXQKKyAgIGEgbG9vayBpbnNpZGUgc29tZSBMaW51eC1kaXN0cmlidXRpb24gc2hvd2VkIG1lIHF1aXRlIG9mdGVuIHNvbWUgbW9kaWZpZWQKKyAgIGNvZGUsIHdoaWNoIGRpZCBubyBsb25nZXIgd29yayBvbiBtb3N0IG90aGVyIG1hY2hpbmVzIHRoYW4gdGhlIG9uZSBvZiB0aGUKKyAgIG1vZGlmaWVyLiBPaywgc28gbm93IHRoYXQgdGhlcmUgaXMgbWFpbnRlbmFuY2Ugc2VydmljZSBhdmFpbGFibGUgZm9yIHRoaXMKKyAgIGRyaXZlciwgcGxlYXNlIHVzZSB0aGlzIGFkZHJlc3MgZmlyc3QgaW4gb3JkZXIgdG8ga2VlcCB0aGUgbGV2ZWwgb2YKKyAgIGNvbmZ1c2lvbiBsb3cuIFRoYW5rIHlvdSEKKyAgIAorICAgV2hlbiB5b3UgZ2V0IGEgU0NTSS1lcnJvciBtZXNzYWdlIHRoYXQgcGFuaWNzIHlvdXIgc3lzdGVtLCBhIGxpc3Qgb2YKKyAgIHJlZ2lzdGVyLWVudHJpZXMgb2YgdGhlIFNDU0ktc3Vic3lzdGVtIGlzIHNob3duIChmcm9tIFZlcnNpb24gMy4xZCkuIFdpdGggCisgICB0aGlzIGxpc3QsIGl0IGlzIHZlcnkgZWFzeSBmb3IgdGhlIG1haW50YWluZXIgdG8gbG9jYWxpemUgdGhlIHByb2JsZW0gaW4gCisgICB0aGUgZHJpdmVyIG9yIGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB1c2VyLiBQbGVhc2Ugd3JpdGUgZG93biBhbGwgdGhlIAorICAgdmFsdWVzIGZyb20gdGhpcyByZXBvcnQgYW5kIHNlbmQgdGhlbSB0byB0aGUgbWFpbnRhaW5lci4gVGhpcyB3b3VsZCByZWFsbHkgCisgICBoZWxwIGEgbG90IGFuZCBtYWtlcyBsaWZlIGVhc2llciBjb25jZXJuaW5nIG1pc3VuZGVyc3RhbmRpbmdzLgorICAgCisgICBVc2UgdGhlIGJ1Zy1yZXBvcnQgZm9ybSAoc2VlIDUuNCBmb3IgaXRzIGFkZHJlc3MpIHRvIHNlbmQgYWxsIHRoZSBidWctCisgICBzdHVmZiB0byB0aGUgbWFpbnRhaW5lciBvciB3cml0ZSBlLW1haWwgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIHRhYmxlLiAKKyAgIAorICAgNS40IFN1cHBvcnQgV1dXLXBhZ2UKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgYWRkcmVzcyBvZiB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIHN1cHBvcnRpbmcgV1dXLXBhZ2UgaXM6CisgICAKKyAgICAgICAgaHR0cDovL3d3dy51bmktbWFpbnouZGUvfmxhbmdtMDAwL2xpbnV4Lmh0bWwKKwkKKyAgIEhlcmUgeW91IGNhbiBmaW5kIGluZm8gYWJvdXQgdGhlIGJhY2tncm91bmQgb2YgdGhpcyBkcml2ZXIsIHBhdGNoZXMsCisgICB0cm91Ymxlc2hvb3Rpbmcgc3VwcG9ydCwgbmV3cyBhbmQgYSBidWdyZXBvcnQgZm9ybS4gUGxlYXNlIGNoZWNrIHRoYXQKKyAgIFdXVy1wYWdlIHJlZ3VsYXJseSBmb3IgbGF0ZXN0IGhpbnRzLiBJZiBldmVyIHRoaXMgVVJMIGNoYW5nZXMsIHBsZWFzZSAKKyAgIHJlZmVyIHRvIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGluIG9yZGVyIHRvIGdldCB0aGUgbGF0ZXN0IGFkZHJlc3MuCisgICAKKyAgIEZvciB0aGUgYnVncmVwb3J0LCBwbGVhc2UgZmlsbCBvdXQgdGhlIGZvcm11bGFyIG9uIHRoZSBjb3JyZXNwb25kaW5nCisgICBXV1ctcGFnZS4gUmVhZCB0aGUgZGVkaWNhdGVkIGluc3RydWN0aW9ucyBhbmQgd3JpdGUgYXMgbXVjaCBhcyB5b3UKKyAgIGtub3cgYWJvdXQgeW91ciBwcm9ibGVtLiBJZiB5b3UgZG8gbm90IGxpa2Ugc3VjaCBmb3JtdWxhcnMsIHBsZWFzZSBzZW5kCisgICBzb21lIGUtbWFpbCBkaXJlY3RseSwgYnV0IGF0IGxlYXN0IHdpdGggdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgcmVxdWlyZWQgYnkKKyAgIHRoZSBmb3JtdWxhci4KKyAgIAorICAgSWYgeW91IGhhdmUgZXh0ZW5zaXZlIGJ1Z3JlcG9ydHMsIGluY2x1ZGluZyBPb29wcyBtZXNzYWdlcyBhbmQgCisgICBzY3JlZW4tc2hvdHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gc2VuZCBpdCBkaXJlY3RseSB0byB0aGUgYWRkcmVzcworICAgb2YgdGhlIG1haW50YWluZXIsIHRvby4gVGhlIGN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgbWFpbnRhaW5lciBpczoKKyAgIAorICAgICAgICAgICAgTWljaGFlbCBMYW5nIDxsYW5nYTJAa3BoLnVuaS1tYWluei5kZT4KKyAgIAorICAgNiBSZWZlcmVuY2VzCisgICAtLS0tLS0tLS0tLS0KKyAgIElCTSBDb3JwLiwgIlVwZGF0ZSBmb3IgdGhlIFBTLzIgSGFyZHdhcmUgSW50ZXJmYWNlIFRlY2huaWNhbCBSZWZlcmVuY2UsIAorICAgQ29tbW9uIEludGVyZmFjZXMiLCBBcm1vbmssIFNlcHRlbWJlciAxOTkxLCBQTiAwNEczMjgxLCAKKyAgIChhdmFpbGFibGUgaW4gdGhlIFUuUy4gZm9yICQyMS43NSBhdCAxLTgwMC1JQk0tUENUQiBvciBpbiBHZXJtYW55IGZvcgorICAgYXJvdW5kIDQwLC1ETSBhdCAiSGFsbG8gSUJNIikuCisgIAorICAgSUJNIENvcnAuLCAiUGVyc29uYWwgU3lzdGVtLzIgTWljcm8gQ2hhbm5lbCBTQ1NJCisgICBBZGFwdGVyIHdpdGggQ2FjaGUgVGVjaG5pY2FsIFJlZmVyZW5jZSIsIEFybW9uaywgTWFyY2ggMTk5MCwgUE4gNjhYMjM2NS4KKworICAgSUJNIENvcnAuLCAiUGVyc29uYWwgU3lzdGVtLzIgTWljcm8gQ2hhbm5lbCBTQ1NJCisgICBBZGFwdGVyIFRlY2huaWNhbCBSZWZlcmVuY2UiLCBBcm1vbmssIE1hcmNoIDE5OTAsIFBOIDY4WDIzOTcuCisKKyAgIElCTSBDb3JwLiwgIlNDU0ktMiBGYXN0L1dpZGUgQWRhcHRlci9BIFRlY2huaWNhbCBSZWZlcmVuY2UgLSBEdWFsIEJ1cyIsCisgICBBcm1vbmssIE1hcmNoIDE5OTQsIFBOIDgzRzc1NDUuCisgCisgICBGcmllZGhlbG0gU2NobWlkdCwgIlNDU0ktQnVzIHVuZCBJREUtU2Nobml0dHN0ZWxsZSAtIE1vZGVybmUgUGVyaXBoZXJpZS0KKyAgIFNjaG5pdHRzdGVsbGVuOiBIYXJkd2FyZSwgUHJvdG9rb2xsYmVzY2hyZWlidW5nIHVuZCBBbndlbmR1bmciLCAyLiBBdWZsLgorICAgQWRkaXNvbiBXZXNsZXksIDE5OTYuCisgICAKKyAgIE1pY2hhZWwgSy4gSm9obnNvbiwgIlRoZSBMaW51eCBLZXJuZWwgSGFja2VycycgR3VpZGUiLCBWZXJzaW9uIDAuNiwgQ2hhcGVsCisgICBIaWxsIC0gTm9ydGggQ2Fyb2xpbmEsIDE5OTUKKyAgIAorICAgQW5kcmVhcyBLYWlzZXIsICJTQ1NJIFRBUEUgQkFDS1VQIGZvciBPUy8yIDIuMCIsIFZlcnNpb24gMi4xMiwgU3R1dHRnYXJ0CisgICAxOTkzCisgICAKKyAgIEhlbG11dCBSb21wZWwsICJJQk0gQ29tcHV0ZXJ3ZWx0IEdVSURFIiwgV2hhdCBpcyB3aGF0IGJlaSBJQk0uLCBTeXN0ZW1lICoKKyAgIFByb2dyYW1tZSAqIEJlZ3JpZmZlLCBJV1QtVmVybGFnIEdtYkggLSBNdWVuY2hlbiwgMTk4OAorICAgCisgICA3IENyZWRpdHMgdG8KKyAgIC0tLS0tLS0tLS0tLQorICAgNy4xIFBlb3BsZQorICAgLS0tLS0tLS0tLQorICAgS2xhdXMgR3JpbW0KKyAgICAgICAgICAgICAgICB3aG8gYWxyZWFkeSBhIGxvbmcgdGltZSBhZ28gZ2F2ZSBtZSB0aGUgb2xkIGNvZGUgZnJvbSB0aGUKKwkJU0NTSS1kcml2ZXIgaW4gb3JkZXIgdG8gZ2V0IGl0IHJ1bm5pbmcgZm9yIHNvbWUgb2xkIG1hY2hpbmUKKwkJaW4gb3VyIGluc3RpdHV0ZS4KKyAgIE1hcnRpbiBLb2xpbmVrCisgICAgICAgICAgICAgICAgd2hvIHdyb3RlIHRoZSBmaXJzdCByZWxlYXNlIG9mIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gZHJpdmVyLgorICAgQ2hyaXMgQmVhdXJlZ2FyZAorICAgICAgICAgICAgICAgIHdobyBmb3IgYSBsb25nIHRpbWUgbWFpbnRhaW5lZCBNQ0EtTGludXggYW5kIHRoZSBTQ1NJLWRyaXZlcgorCQlpbiB0aGUgYmVnaW5uaW5nLiBDaHJpcywgd2hlcmV2ZXIgeW91IGFyZTogQ2hlZXJzIHRvIHlvdSEKKyAgIEtsYXVzIEt1ZGllbGthCisgICAgICAgICAgICAgICAgd2l0aCB3aG9tIGluIHRoZSAyLjEueCB0aW1lcywgSSBoYWQgYSBxdWl0ZSBmcnVpdGZ1bAorICAgICAgICAgICAgICAgIGNvb3BlcmF0aW9uIHRvIGdldCB0aGUgZHJpdmVyIHJ1bm5pbmcgYXMgYSBtb2R1bGUgYW5kIHRvIGdldAorCQlpdCBydW5uaW5nIHdpdGggbXVsdGlwbGUgU0NTSS1hZGFwdGVycy4KKyAgIERhdmlkIFdlaW5laGFsbAorICAgICAgICAgICAgICAgIGZvciBoaXMgZXhjZWxsZW50IG1haW50ZW5hbmNlIG9mIHRoZSBNQ0Etc3R1ZmYgYW5kIHRoZSBxdWl0ZSAKKwkJZGV0YWlsZWQgYnVnIHJlcG9ydHMgYW5kIGlkZWFzIGZvciB0aGlzIGRyaXZlciAoYW5kIGhpcyAKKwkJcGF0aWVuY2UgOy0pKS4KKyAgIEFsYW4gSi4gQ294ICAKKyAgICAgICAgICAgICAgICBmb3IgaGlzIGJ1Z3JlcG9ydHMgYW5kIGhpcyBib2xkIGFjdGl2aXRpZXMgaW4gY3Jvc3MtY2hlY2tpbmcKKwkJdGhlIGRyaXZlci1jb2RlIHdpdGggaGlzIHRlc3RzdGFuZC4KKwkJCisgICA3LjIgU3BvbnNvcnMgJiBTdXBwb3J0ZXJzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAiSGFsbG8gSUJNIiwKKyAgIElCTS1EZXV0c2NobGFuZCBHbWJICisgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2Ugb2YgSUJNLURldXRzY2hsYW5kIGZvciBjdXN0b21lcnMuIFRoZWlyIEUtTWFpbAorCQlzZXJ2aWNlIGlzIHVuYmVhdGFibGUuIFdoYXRldmVyIG9sZCBzdHVmZiBJIGFza2VkIGZvciwgSSAKKwkJYWx3YXlzIGdvdCBzb21lIGhlbHBmdWwgYW5zd2Vycy4KKyAgIEthcmwtT3R0byBSZWltZXJzLAorICAgSUJNIEtsdWIgLSBTcGFydGUgSUJNIEdlc2NoaWNodGUsIFNpbmRlbGZpbmdlbgorICAgICAgICAgICAgICAgIGZvciBzZW5kaW5nIG1lIGEgY29weSBvZiB0aGUgdy9DYWNoZSBtYW51YWwgZnJvbSB0aGUgCisJCUlCTS1EZXV0c2NobGFuZCBhcmNoaXZlcy4KKyAgIEhhcmFsZCBTdGFpZ2VyCisgICAgICAgICAgICAgICAgZm9yIGhpcyBleHRlbnNpdmUgaGFyZHdhcmUgZG9uYXRpb25zIHdoaWNoIGFsbG93cyBtZSB0b2RheQorCQlzdGlsbCB0byB0ZXN0IHRoZSBkcml2ZXIgaW4gdmFyaW91cyBjb25zdGVsbGF0aW9ucy4KKyAgIEVyaWNoIEZyaXRzY2hlcgorICAgICAgICAgICAgICAgIGZvciBoaXMgdmVyeSBraW5kIHNwb25zb3JpbmcuCisgICBMb3VpcyBPaGxhbmQsCisgICBDaGFybGVzIExhc2l0dGVyCisgICAgICAgICAgICAgICAgZm9yIHN1cHBvcnQgYnkgc2hpcHBpbmcgbWUgYW4gSUJNIFNDU0ktMiBGYXN0L1dpZGUgbWFudWFsLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uLCB0aGUgY29udHJpYnV0aW9uIG9mIHZhcmlvdXMgaGFyZHdhcmUgaXMgcXVpdGUgCisgICAgICAgICAgICAgICAgZGVjZXNzaXZlIGFuZCB3aWxsIG1ha2UgaXQgcG9zc2libGUgdG8gYWRkIEZXU1IgKFJBSUQpCisgICAgICAgICAgICAgICAgYWRhcHRlciBzdXBwb3J0IHRvIHRoZSBkcml2ZXIgaW4gdGhlIG5lYXIgZnV0dXJlISBTbywKKyAgICAgICAgICAgICAgICBjb21wbGFpbnRzIGFib3V0IG5vIFJBSUQgc3VwcG9ydCB3b24ndCByZW1haW4gZm9yZXZlci4KKyAgICAgICAgICAgICAgICBZZXMsIGZvbGtzLCB0aGF0IGlzIG5vIGpva2UsIFJBSUQgc3VwcG9ydCBpcyBnb2luZyB0byByaXNlIQorICAgRXJpayBXZWJlcgorICAgICAgICAgICAgICAgIGZvciB0aGUgZ3JlYXQgZGVhbCB3ZSBtYWRlIGFib3V0IGEgbW9kZWwgOTU5NSBhbmQgdGhlIG5pY2UKKyAgICAgICAgICAgICAgICBzdXJyb3VuZGluZyBlcXVpcG1lbnQgYW5kIHRoZSBjb29sIHRyaXAgdG8gTWFubmhlaW0KKyAgICAgICAgICAgICAgICBzZWNvbmQtaGFuZCBjb21wdXRlciBtYXJrZXQuIEluIGFkZGl0aW9uLCBJIHdvdWxkIGxpa2UKKwkJdG8gdGhhbmsgaGltIGZvciBoaXMgZXhoYXVzdGl2ZSBTQ1NJLWRyaXZlciB0ZXN0aW5nIG9uIGhpcyAKKwkJOTVlciBQUy8yIHBhcmsuCisgICBBbnRob255IEhvZ2JpbgorICAgICAgICAgICAgICAgIGZvciBoaXMgZGlyZWN0IHNoaXBtZW50IG9mIGEgU0NTSSBGL1cgYWRhcHRlciwgd2hpY2ggYWxsb3dlZAorICAgICAgICAgICAgICAgIG1lIGltbWVkaWF0ZWx5IG9uIHRoZSBmaXJzdCBzdGFnZSB0byB0cnkgaXQgb24gbW9kZWwgODU1NworICAgICAgICAgICAgICAgIHRvZ2V0aGVyIHdpdGggb25ib2FyZCBTQ1NJIGFkYXB0ZXIgYW5kIHNvbWUgU0NTSSB3L0NhY2hlLgorICAgQW5kcmVhcyBIb3R6CisgICAgICAgICAgICAgICAgZm9yIGhpcyBzdXBwb3J0IGJ5IG1lbW9yeSBhbmQgYW4gSUJNIFNDU0ktYWRhcHRlci4gQ29sbGVjdGluZworICAgICAgICAgICAgICAgIGFsbCB0aGlzIHRvZ2V0aGVyIG5vdyBhbGxvd3MgbWUgdG8gdHJ5IHJlYWxseSB0aGluZ3Mgd2l0aAorICAgICAgICAgICAgICAgIHRoZSBkcml2ZXIgYXQgbWF4aW11bSBsb2FkIGFuZCB2YXJpZXR5IG9uIHZhcmlvdXMgbW9kZWxzIGluCisgICAgICAgICAgICAgICAgYSB2ZXJ5IHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5LgorICAgUGV0ZXIgSmVubmV3ZWluCisgICAgICAgICAgICAgICAgZm9yIGhpcyBtb2RlbCAzMCwgd2hpY2ggc2VydmVzIG1lIGFzIHBhcnQgb2YgbXkgdGVzdHN0YW5kCisJCWFuZCBoaXMgY29vbCByZW1hcmsgYWJvdXQgaG93IHlvdSBtYWtlIGFuIG9yZGluYXJ5IGRpc2tldHRlCisJCWRyaXZlIHdvcmtpbmcgYW5kIGhvdyB0byBjb25uZWN0IGl0IHRvIGFuIElCTS1kaXNrZXR0ZSBwb3J0LgorICAgSm9oYW5uZXMgR3V0ZW5iZXJnLVVuaXZlcnNpdGFldCwgTWFpbnogJgorICAgSW5zdGl0dXQgZnVlciBLZXJucGh5c2lrLCBNYWlueiBNaWNyb3Ryb24gKE1BTUkpCisgICAgICAgICAgICAgICAgZm9yIHRoZSBvZmZlcmVkIHNwYWNlLCB0aGUgbGluaywgcGxhY2VkIG9uIHRoZSBjZW50cmFsCisgICAgICAgICAgICAgICAgaG9tZXBhZ2UgYW5kIHRoZSBzcGFjZSB0byBzdG9yZSBhbmQgb2ZmZXIgdGhlIGRyaXZlciBhbmQgCisJCXJlbGF0ZWQgbWF0ZXJpYWwgYW5kIHRoZSBmcmVlIHdvcmtpbmcgdGltZXMsIHdoaWNoIGFsbG93CisgICAgICAgICAgICAgICAgbWUgdG8gYW5zd2VyIGFsbCB5b3VyIGUtbWFpbC4KKyAgICAgICAgICAgICAgICAgICAKKyAgIDggVHJhZGVtYXJrcworICAgLS0tLS0tLS0tLS0tCisgICBJQk0sIFBTLzIsIE9TLzIsIE1pY3JvY2hhbm5lbCBhcmUgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIEludGVybmF0aW9uYWwgCisgICBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorICAgCisgICBNUy1ET1MgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBNaWNyb3NvZnQgQ29ycG9yYXRpb24KKyAgIAorICAgTWljcm93YXJlLCBPUy05IGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgTWljcm93YXJlIFN5c3RlbXMKKyAgIAorICAgOSBEaXNjbGFpbWVyCisgICAtLS0tLS0tLS0tLS0KKyAgIEJlc2lkZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZSBkZXBlbmRlbnQgZGlzY2xhaW1lcnMgYW5kIGRpc2NsYWltZXJzCisgICBjb25jZXJuaW5nIHRoZSBMaW51eC1rZXJuZWwgaW4gc3BlY2lhbCwgdGhpcyBTQ1NJLWRyaXZlciBjb21lcyB3aXRob3V0IGFueQorICAgd2FycmFudHkuIEl0cyBmdW5jdGlvbmFsaXR5IGlzIHRlc3RlZCBhcyBnb29kIGFzIHBvc3NpYmxlIG9uIGNlcnRhaW4gCisgICBtYWNoaW5lcyBhbmQgY29tYmluYXRpb25zIG9mIGNvbXB1dGVyIGhhcmR3YXJlLCB3aGljaCBkb2VzIG5vdCBleGNsdWRlLAorICAgdGhhdCBkYXRhbG9zcyBvciBzZXZlcmUgZGFtYWdlIG9mIGhhcmR3YXJlIGlzIHBvc3NpYmxlIHdoaWxlIHVzaW5nIHRoaXMKKyAgIHBhcnQgb2Ygc29mdHdhcmUgb24gc29tZSBhcmJpdHJhcnkgY29tcHV0ZXIgaGFyZHdhcmUgb3IgaW4gY29tYmluYXRpb24gCisgICB3aXRoIG90aGVyIHNvZnR3YXJlIHBhY2thZ2VzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gbWFrZSBiYWNrdXAKKyAgIGNvcGllcyBvZiB5b3VyIGRhdGEgYmVmb3JlIHVzaW5nIHRoaXMgc29mdHdhcmUuIEZ1cnRoZXJtb3JlLCBwZXJzb25hbAorICAgaW5qdXJpZXMgYnkgaGFyZHdhcmUgZGVmZWN0cywgdGhhdCBjb3VsZCBiZSBjYXVzZWQgYnkgdGhpcyBTQ1NJLWRyaXZlciBhcmUKKyAgIG5vdCBleGNsdWRlZCBhbmQgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGhhbmRsZSB0aGlzIGRyaXZlciB3aXRoIGEKKyAgIG1heGltdW0gb2YgY2FyZWZ1bG5lc3MuCisgICAKKyAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlLCBwcm9kdWNlZCBieSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgICBDb3Jwb3JhdGlvbiAoSUJNKS4KKyAgIAorLS0tLS0tCitNaWNoYWVsIExhbmcgCisobGFuZ2EyQGtwaC51bmktbWFpbnouZGUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvaW4yMDAwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9pbjIwMDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZjEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaW4yMDAwLnR4dApAQCAtMCwwICsxLDIwMiBAQAorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjMzIC0gMjYgQXVnIDk4CisKKyAgIEludGVycnVwdCBtYW5hZ2VtZW50IGluIHRoaXMgZHJpdmVyIGhhcyBiZWNvbWUsIG92ZXIKKyAgIHRpbWUsIGluY3JlYXNpbmdseSBvZGQgYW5kIGRpZmZpY3VsdCB0byBleHBsYWluIC0gdGhpcworICAgaGFzIGJlZW4gbW9zdGx5IGR1ZSB0byBteSBvd24gbWVudGFsIGluYWRlcXVhY2llcy4gSW4KKyAgIHJlY2VudCBrZXJuZWxzLCBpdCBoYXMgZmFpbGVkIHRvIGZ1bmN0aW9uIGF0IGFsbCB3aGVuCisgICBjb21waWxlZCBmb3IgU01QLiBJJ3ZlIGZpeGVkIHRoYXQgcHJvYmxlbSwgYW5kIGFmdGVyCisgICB0YWtpbmcgYSBmcmVzaCBsb29rIGF0IGludGVycnVwdHMgaW4gZ2VuZXJhbCwgZ3JlYXRseQorICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHBsYWNlcyB3aGVyZSB0aGV5J3JlIGZpZGRsZWQKKyAgIHdpdGguIERvbmUgc29tZSBoZWF2eSB0ZXN0aW5nIGFuZCBpdCBsb29rcyB2ZXJ5IGdvb2QuCisgICBUaGUgZHJpdmVyIG5vdyBtYWtlcyB1c2Ugb2YgdGhlIF9faW5pdGZ1bmMoKSBhbmQKKyAgIF9faW5pdGRhdGEgbWFjcm9zIHRvIHNhdmUgYWJvdXQgNGsgb2Yga2VybmVsIG1lbW9yeS4KKyAgIE9uY2UgYWdhaW4sIHRoZSBzYW1lIGNvZGUgd29ya3MgZm9yIGJvdGggMi4wLnh4IGFuZAorICAgMi4xLnh4IGtlcm5lbHMuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMzIgLSAyOCBNYXIgOTgKKworICAgUmVtb3ZlZCB0aGUgY2hlY2sgZm9yIGxlZ2FsIElOMjAwMCBoYXJkd2FyZSB2ZXJzaW9uczoKKyAgIEl0IGFwcGVhcnMgdGhhdCB0aGUgZHJpdmVyIHdvcmtzIGZpbmUgd2l0aCBzZXJpYWwKKyAgIEVQUk9NcyAodGhlIDgtcGluIGNoaXAgdGhhdCBkZWZpbmVzIGhhcmR3YXJlIHJldikgYXMKKyAgIG9sZCBhcyAyLjEsIHNvIHdlJ2xsIGFzc3VtZSB0aGF0IGFsbCBjYXJkcyBhcmUgT0suCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMzEgLSA2IEp1bCA5NworCisgICBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBpbmNvcnJlY3QgU0NTSSBzdGF0dXMgYnl0ZXMgdG8gYmUKKyAgIHJldHVybmVkIGZyb20gY29tbWFuZHMgc2VudCB0byBMVU4ncyBncmVhdGVyIHRoYW4gMC4gVGhpcworICAgbWVhbnMgdGhhdCBDRFJPTSBjaGFuZ2VycyB3b3JrIG5vdyEgRml4ZWQgYSBidWcgaW4gdGhlCisgICBoYW5kbGluZyBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHdoZW4gbG9hZGVkIGFzIGEgbW9kdWxlLgorICAgQWxzbyBwdXQgYWxsIHRoZSBoZWFkZXIgZGF0YSBpbiBpbjIwMDAuaCB3aGVyZSBpdCBiZWxvbmdzLgorICAgVGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGlzIGRyaXZlciBpbgorICAgdGhlIDIuMS54eCBzb3VyY2UgdHJlZSBhbmQgdGhlIDIuMC54eCB0cmVlLCBhcyBvZiAyLjAuMzEKKyAgIGFuZCAyLjEuNDUgKG9yIGlzIGl0IC40Nj8pIC0gdGhpcyBtYWtlcyB0aGluZ3MgbXVjaCBlYXNpZXIKKyAgIGZvciBtZS4uLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjMwIC0gMTQgT2N0IDk2CisKKyAgIEZpeGVkIGEgYnVnIGluIHRoZSBjb2RlIHRoYXQgc2V0cyB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uCisgICBiaXQgKERFU1RJRF9EUEQgaW4gdGhlIFdEX0RFU1RJTkFUSU9OX0lEIHJlZ2lzdGVyKS4gVGhlcmUKKyAgIGFyZSBxdWl0ZSBhIGZldyBTQ1NJIGNvbW1hbmRzIHRoYXQgZG8gYSB3cml0ZS10by1kZXZpY2U7CisgICBub3cgd2UgZGVhbCB3aXRoIGFsbCBvZiB0aGVtIGNvcnJlY3RseS4gVGhhbmtzIHRvIEpvZXJnCisgICBEb3JjaGFpbiBmb3IgY2F0Y2hpbmcgdGhpcyBvbmUuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjkgLSAyNCBTZXAgOTYKKworICAgVGhlIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgb24gdGhlIGNhcmQgaXMgbm93IGFjY2Vzc2VkIHZpYQorICAgdGhlICdyZWFkYigpJyBhbmQgJ3JlYWRsKCknIG1hY3JvcyAtIHJlcXVpcmVkIGJ5IHRoZSBuZXcKKyAgIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBpbiB0aGUgMi4xLngga2VybmVsIHNlcmllcy4KKyAgIEFzIHN1Z2dlc3RlZCBieSBBbmRyaWVzIEJyb3V3ZXIsICdiaW9zX3BhcmFtKCknIG5vIGxvbmdlcgorICAgZm9yY2VzIGFuIGFydGlmaWNpYWwgMTAyMyB0cmFjayBsaW1pdCBvbiBkcml2ZXMuIEFsc28KKyAgIHJlbW92ZWQgc29tZSBrbHVkZ2UtY29kZSBsZWZ0IG92ZXIgZnJvbSBzdHJ1Z2dsZXMgd2l0aAorICAgb2xkZXIgKGJ1Z2d5KSBjb21waWxlcnMuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjggLSAwNyBNYXkgOTYKKworICAgVGlnaHRlbmVkIHVwIHRoZSAiaW50ZXJydXB0cyBlbmFibGVkL2Rpc2FibGVkIiBkaXNjaXBsaW5lCisgICBpbiAnaW4yMDAwX3F1ZXVlY29tbWFuZCgpJyBhbmQgbWF5YmUgMSBvciAyIG90aGVyIHBsYWNlcy4KKyAgIEkgX3RoaW5rXyBpdCBtYXkgaGF2ZSBiZWVuIGEgbGl0dGxlIHRvbyBsYXgsIGNhdXNpbmcgYW4KKyAgIG9jY2FzaW9uYWwgY3Jhc2ggZHVyaW5nIGZ1bGwgbW9vbi4gQSBmdWxseSBmdW5jdGlvbmFsCisgICAvcHJvYyBpbnRlcmZhY2UgaXMgbm93IGluIHBsYWNlIC0gaWYgeW91IHdhbnQgdG8gcGxheQorICAgd2l0aCBpdCwgc3RhcnQgYnkgZG9pbmcgJ2NhdCAvcHJvYy9zY3NpL2luMjAwMC8wJy4gWW91CisgICBjYW4gYWxzbyB1c2UgaXQgdG8gY2hhbmdlIGEgZmV3IHJ1bi10aW1lIHBhcmFtZXRlcnMgb24KKyAgIHRoZSBmbHksIGJ1dCBpdCdzIG1vc3RseSBmb3IgZGVidWdnaW5nLiBUaGUgY3VyaW91cworICAgc2hvdWxkIHRha2UgYSBnb29kIGxvb2sgYXQgJ2luMjAwMF9wcm9jX2luZm8oKScgaW4gdGhlCisgICBpbjIwMDAuYyBmaWxlIHRvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaXQncyBhbGwKKyAgIGFib3V0OyBJIGZpZ3VyZSB0aGF0IHBlb3BsZSB3aG8gYXJlIHJlYWxseSBpbnRvIGl0IHdpbGwKKyAgIHdhbnQgdG8gYWRkIGZlYXR1cmVzIHN1aXRlZCB0byB0aGVpciBvd24gbmVlZHMuLi4KKyAgIEFsc28sIHN5bmMgaXMgbm93IERJU0FCTEVEIGJ5IGRlZmF1bHQuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjcgLSAxMCBBcHIgOTYKKworICAgRml4ZWQgYSB3ZWxsLWhpZGRlbiBidWcgaW4gdGhlIGFkYXB0aXZlLWRpc2Nvbm5lY3QgY29kZQorICAgdGhhdCB3b3VsZCBzaG93IHVwIGV2ZXJ5IG5vdyBhbmQgdGhlbiBkdXJpbmcgZXh0cmVtZQorICAgaGVhdnkgbG9hZHMgaW52b2x2aW5nIDIgb3IgbW9yZSBzaW11bHRhbmVvdXNseSBhY3RpdmUKKyAgIGRldmljZXMuIFRoYW5rcyB0byBKb2UgTWFjayBmb3Iga2VlcGluZyBteSBub3NlIHRvIHRoZQorICAgZ3JpbmRzdG9uZSBvbiB0aGlzIG9uZS4KKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4yNiAtIDA3IE1hciA5NgorCisgICAxLjI1IGhhZCBhIG5hc3R5IGJ1ZyB0aGF0IGJpdCBwZW9wbGUgd2l0aCBzd2FwIHBhcnRpdGlvbnMKKyAgIGFuZCB0YXBlIGRyaXZlcy4gQWxzbywgaW4gbXkgYXR0ZW1wdCB0byBndWVzcyBteSB3YXkKKyAgIHRocm91Z2ggSW50ZWwgYXNzZW1ibHkgbGFuZ3VhZ2UsIEkgbWFkZSBhbiBlcnJvciBpbiB0aGUKKyAgIGlubGluZSBjb2RlIGZvciBJTyB3cml0ZXMuIE1hZGUgYSBmZXcgb3RoZXIgY2hhbmdlcyBhbmQKKyAgIHJlcGFpcnMgLSB0aGlzIHZlcnNpb24gKGZpbmdlcnMgY3Jvc3NlZCkgc2hvdWxkIHdvcmsgd2VsbC4KKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4yNSAtIDA1IE1hciA5NgorCisgICBLZXJuZWwgMS4zLjcwIGludGVycnVwdCBtb2RzIGFkZGVkOyBvbGQga2VybmVscyBzdGlsbCBPSy4KKyAgIEJpZyBoZWxwIGZyb20gQmlsbCBFYXJuZXN0IGFuZCBEYXZpZCBXaWxsbW9yZSBvbiBzcGVlZAorICAgdGVzdGluZyBhbmQgb3B0aW1pemluZzogSSB0aGluayB0aGVyZSdzIGEgcmVhbCBpbXByb3ZlbWVudAorICAgaW4gdGhpcyBhcmVhLgorICAgTmV3ISBVc2VyLWZyaWVuZGx5IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIExJTE8gYW5kCisgICBtb2R1bGUgbG9hZGluZyAtIHRoZSBvbGQgbWV0aG9kIGlzIGdvbmUsIHNvIHlvdSdsbCBuZWVkCisgICB0byByZWFkIHRoZSBjb21tZW50cyBmb3IgJ3NldHVwX3N0cmluZ3MnIG5lYXIgdGhlIHRvcAorICAgb2YgaW4yMDAwLmMuIEZvciBwZW9wbGUgd2l0aCBDRFJPTSdzIG9yIG90aGVyIGRldmljZXMKKyAgIHRoYXQgaGF2ZSBhIHRvdWdoIHRpbWUgd2l0aCBzeW5jIG5lZ290aWF0aW9uLCB5b3UgY2FuCisgICBub3cgc2VsZWN0aXZlbHkgZGlzYWJsZSBzeW5jIG9uIGluZGl2aWR1YWwgZGV2aWNlcyAtCisgICBzZWFyY2ggZm9yIHRoZSAnbm9zeW5jJyBrZXl3b3JkIGluIHRoZSBjb21tYW5kLWxpbmUKKyAgIGNvbW1lbnRzLiBTb21lIG9mIHlvdSBkaXNhYmxlIHRoZSBCSU9TIG9uIHRoZSBjYXJkLCB3aGljaAorICAgY2F1c2VkIHRoZSBhdXRvLWRldGVjdCBmdW5jdGlvbiB0byBmYWlsOyB0aGVyZSBpcyBub3cgYQorICAgY29tbWFuZC1saW5lIG9wdGlvbiB0byBmb3JjZSBkZXRlY3Rpb24gb2YgYSBST00tbGVzcyBjYXJkLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjI0YSAtIDI0IEZlYiA5NgorCisgICBUaGVyZSB3YXMgYSBidWcgaW4gdGhlIHN5bmNocm9ub3VzIHRyYW5zZmVyIGNvZGUuIE9ubHkKKyAgIGEgZmV3IHBlb3BsZSBkb3dubG9hZGVkIGJlZm9yZSBJIGNhdWdodCBpdCAtIGNvdWxkIGhhdmUKKyAgIGJlZW4gd29yc2UuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjQgLSAyMyBGZWIgOTYKKworICAgTG90cyBvZiBnb29kIGNoYW5nZXMuIEFkdmljZSBmcm9tIEJpbGwgRWFybmVzdCByZXN1bHRlZAorICAgaW4gbXVjaCBiZXR0ZXIgZGV0ZWN0aW9uIG9mIGNhcmRzLCBtb3JlIGVmZmljaWVudCB1c2FnZQorICAgb2YgdGhlIGZpZm8sIGFuZCAoaG9wZWZ1bGx5KSBmYXN0ZXIgZGF0YSB0cmFuc2ZlcnMuIFRoZQorICAganVyeSBpcyBzdGlsbCBvdXQgb24gc3BlZWQgLSBJIGhvcGUgaXQncyBpbXByb3ZlZCBzb21lLgorICAgT25lIG5pZnR5IG5ldyBmZWF0dXJlIGlzIGEgY29vbCB3YXkgb2YgZG9pbmcgZGlzY29ubmVjdC8KKyAgIHJlc2VsZWN0LiBUaGUgZHJpdmVyIGRlZmF1bHRzIHRvIHdoYXQgSSdtIGNhbGxpbmcKKyAgICdhZGFwdGl2ZSBkaXNjb25uZWN0JyAtIG1lYW5pbmcgdGhhdCBlYWNoIGNvbW1hbmQgaXMKKyAgIGV2YWx1YXRlZCBpbmRpdmlkdWFsbHkgYXMgdG8gd2hldGhlciBvciBub3QgaXQgc2hvdWxkIGJlCisgICBydW4gd2l0aCB0aGUgb3B0aW9uIHRvIGRpc2Nvbm5lY3QvcmVzZWxlY3QgKGlmIHRoZSBkZXZpY2UKKyAgIGNob29zZXMpLCBvciBhcyBhICJTQ1NJLWJ1cy1ob2ciLiBXaGVuIHNldmVyYWwgZGV2aWNlcworICAgYXJlIG9wZXJhdGluZyBzaW11bHRhbmVvdXNseSwgZGlzY29ubmVjdHMgYXJlIHVzdWFsbHkgYW4KKyAgIGFkdmFudGFnZS4gSW4gYSBzaW5nbGUgZGV2aWNlIHN5c3RlbSwgb3IgaWYgb25seSAxIGRldmljZQorICAgaXMgYmVpbmcgYWNjZXNzZWQsIHRyYW5zZmVycyB1c3VhbGx5IGdvIGZhc3RlciBpZiBkaXNjb25uZWN0cworICAgYXJlIG5vdCBhbGxvd2VkLgorCisKKworVGhlIGRlZmF1bHQgYXJndW1lbnRzICh5b3UgZ2V0IHRoZXNlIHdoZW4geW91IGRvbid0IGdpdmUgYW4gJ2luMjAwMCcKK2NvbW1hbmQtbGluZSBhcmd1bWVudCwgb3IgeW91IGdpdmUgYSBibGFuayBhcmd1bWVudCkgd2lsbCBjYXVzZQordGhlIGRyaXZlciB0byBkbyBhZGFwdGl2ZSBkaXNjb25uZWN0LCBzeW5jaHJvbm91cyB0cmFuc2ZlcnMsIGFuZCBhCittaW5pbXVtIG9mIGRlYnVnIG1lc3NhZ2VzLiBJZiB5b3Ugd2FudCB0byBmb29sIHdpdGggdGhlIG9wdGlvbnMsCitzZWFyY2ggZm9yICdzZXR1cF9zdHJpbmdzJyBuZWFyIHRoZSB0b3Agb2YgdGhlIGluMjAwMC5jIGZpbGUgYW5kCitjaGVjayB0aGUgJ2hvc3RkYXRhLT5hcmdzJyBzZWN0aW9uIGluIGluMjAwMC5oIC0gYnV0IGJlIHdhcm5lZCEgTm90CitldmVyeXRoaW5nIGlzIHdvcmtpbmcgeWV0IChzb21lIHRoaW5ncyB3aWxsIG5ldmVyIHdvcmssIHByb2JhYmx5KS4KK0kgYmVsaWV2ZSB0aGF0IGRpc2FibGluZyBkaXNjb25uZWN0cyAoRElTX05FVkVSKSB3aWxsIGFsbG93IHlvdQordG8gY2hvb3NlIGEgTEVWRUwyIHZhbHVlIGhpZ2hlciB0aGFuICdMMl9CQVNJQycsIGJ1dCBJIGhhdmVuJ3QKK3NwZW50IGEgbG90IG9mIHRpbWUgdGVzdGluZyB0aGlzLiBZb3UgbWlnaHQgdHJ5ICdFTkFCTEVfQ0xVU1RFUklORycKK3RvIHNlZSB3aGF0IGhhcHBlbnM6IG15IHRlc3RzIHNob3dlZCBsaXR0bGUgZGlmZmVyZW5jZSBlaXRoZXIgd2F5LgorVGhlcmUncyBhbHNvIGEgZGVmaW5lIGNhbGxlZCAnREVGQVVMVF9TWF9QRVInOyB0aGlzIHNldHMgdGhlIGRhdGEKK3RyYW5zZmVyIHNwZWVkIGZvciB0aGUgYXN5bmNocm9ub3VzIG1vZGUuIEkndmUgcHV0IGl0IGF0IDUwMCBucworZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBjYXJkIGNvdWxkIGhhbmRsZSBzZXR0aW5ncyBvZiAzNzYgb3IKKzI1MiwgYmVjYXVzZSBoaWdoZXIgc3BlZWRzIG1heSBiZSBhIHByb2JsZW0gd2l0aCBwb29yIHF1YWxpdHkKK2NhYmxlcyBvciBpbXByb3BlciB0ZXJtaW5hdGlvbjsgNTAwIG5zIGlzIGEgY29tcHJvbWlzZS4gWW91IGNhbgorY2hvb3NlIHlvdXIgb3duIGRlZmF1bHQgdGhyb3VnaCB0aGUgY29tbWFuZC1saW5lIHdpdGggdGhlCisncGVyaW9kJyBrZXl3b3JkLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioqKioqKioqKiogIERJUCBzd2l0Y2ggc2V0dGluZ3MgICoqKioqKioqKioqKioqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgc3cxLTEgc3cxLTIgICAgQklPUyBhZGRyZXNzIChoZXgpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgIG9mZiAgICAgQzgwMDAgLSBDQkZGMAorICAgIG9uICAgIG9mZiAgICAgRDgwMDAgLSBEQkZGMAorICAgIG9mZiAgIG9uICAgICAgRDAwMDAgLSBEM0ZGMAorICAgIG9uICAgIG9uICAgICAgQklPUyBkaXNhYmxlZAorCisgICBzdzEtMyBzdzEtNCAgICBJTyBwb3J0IGFkZHJlc3MgKGhleCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgIG9mZiAgICAgMjIwIC0gMjJGCisgICAgb24gICAgb2ZmICAgICAyMDAgLSAyMEYKKyAgICBvZmYgICBvbiAgICAgIDExMCAtIDExRgorICAgIG9uICAgIG9uICAgICAgMTAwIC0gMTBGCisKKyAgIHN3MS01IHN3MS02IHN3MS03ICAgIEludGVycnVwdAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgb2ZmICAgb2ZmICAgb2ZmICAgICAxNQorICAgIG9mZiAgIG9uICAgIG9mZiAgICAgMTQKKyAgICBvZmYgICBvZmYgICBvbiAgICAgIDExCisgICAgb2ZmICAgb24gICAgb24gICAgICAxMAorICAgIG9uICAgIC0gICAgIC0gICAgICAgZGlzYWJsZWQKKworICAgc3cxLTggZnVuY3Rpb24gZGVwZW5kcyBvbiBCSU9TIHZlcnNpb24uIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhpcworICAgY29udHJvbGxlZCBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIHN1cHBvcnQgZm9yIE1TRE9TOgorICAgICAgb2ZmID0gZGlzYWJsZWQKKyAgICAgIG9uICA9IGVuYWJsZWQKKyAgIEluIGxhdGVyIFJPTXMgKHN0YXJ0aW5nIHdpdGggMDEuMyBpbiBBcHJpbCAxOTk0KSBzdzEtOCBjb250cm9scworICAgdGhlICJncmVhdGVyIHRoYW4gMiBkaXNrIGRyaXZlIiBmZWF0dXJlIHRoYXQgZmlyc3QgYXBwZWFyZWQgaW4KKyAgIE1TRE9TIDUuMCAoaWdub3JlZCBieSBMaW51eCk6CisgICAgICBvZmYgPSAyIGRyaXZlcyBtYXhpbXVtCisgICAgICBvbiAgPSA3IGRyaXZlcyBtYXhpbXVtCisKKyAgIHN3MS05ICAgIEZsb3BweSBjb250cm9sbGVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgICAgZGlzYWJsZWQKKyAgICBvbiAgICAgIGVuYWJsZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEkgc2hvdWxkIG1lbnRpb24gdGhhdCBEcmV3IEVja2hhcmR0J3MgJ0dlbmVyaWMgTkNSNTM4MCcgc291cmNlcworICAgd2VyZSBteSBtYWluIGluc3BpcmF0aW9uLCB3aXRoIGxvdHMgb2YgcmVmZXJlbmNlIHRvIHRoZSBJTjIwMDAKKyAgIGRyaXZlciBjdXJyZW50bHkgZGlzdHJpYnV0ZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgYWxzbyBvd2UKKyAgIG11Y2ggdG8gYSBkcml2ZXIgd3JpdHRlbiBieSBIYW1pc2ggTWFjZG9uYWxkIGZvciBMaW51eC1tNjhrKCEpLgorICAgQW5kIHRvIEVyaWMgV3JpZ2h0IGZvciBiZWluZyBhbiBBTFBIQSBndWluZWEgcGlnLiBBbmQgdG8gQmlsbAorICAgRWFybmVzdCBmb3IgMiB0b25zIG9mIGdyZWF0IGlucHV0IGFuZCBpbmZvcm1hdGlvbi4gQW5kIHRvIERhdmlkCisgICBXaWxsbW9yZSBmb3IgZXh0ZW5zaXZlICdib25uaWUnIHRlc3RpbmcuIEFuZCB0byBKb2UgTWFjayBmb3IKKyAgIGNvbnRpbnVhbCB0ZXN0aW5nIGFuZCBmZWVkYmFjay4KKworCisgICAgICAgICAgICBKb2huIFNoaWZmbGV0dCAgICBqc2hpZmZsZUBuZXRjb20uY29tCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9tZWdhcmFpZC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbWVnYXJhaWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODY0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbWVnYXJhaWQudHh0CkBAIC0wLDAgKzEsNzAgQEAKKwkJCU5vdGVzIG9uIE1hbmFnZW1lbnQgTW9kdWxlCisJCQl+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitPdmVydmlldzoKKy0tLS0tLS0tCisKK0RpZmZlcmVudCBjbGFzc2VzIG9mIGNvbnRyb2xsZXJzIGZyb20gTFNJIExvZ2ljLCBhY2NlcHQgYW5kIHJlc3BvbmQgdG8gdGhlCit1c2VyIGFwcGxpY2F0aW9ucyBpbiBhIHNpbWlsYXIgd2F5LiBUaGV5IHVuZGVyc3RhbmQgdGhlIHNhbWUgZmlybXdhcmUgY29udHJvbAorY29tbWFuZHMuIEZ1cnRoZXJtb3JlLCB0aGUgYXBwbGljYXRpb25zIGFsc28gY2FuIHRyZWF0IGRpZmZlcmVudCBjbGFzc2VzIG9mCit0aGUgY29udHJvbGxlcnMgdW5pZm9ybWx5LiBIZW5jZSBpdCBpcyBsb2dpY2FsIHRvIGhhdmUgYSBzaW5nbGUgbW9kdWxlIHRoYXQKK2ludGVyZWZhY2VzIHdpdGggdGhlIGFwcGxpY2F0aW9ucyBvbiBvbmUgc2lkZSBhbmQgYWxsIHRoZSBsb3cgbGV2ZWwgZHJpdmVycworb24gdGhlIG90aGVyLgorCitUaGUgYWR2YW50YWdlcywgdGhvdWdoIG9idmlvdXMsIGFyZSBsaXN0ZWQgZm9yIGNvbXBsZXRlbmVzczoKKworCWkuCUF2b2lkIGR1cGxpY2F0ZSBjb2RlIGZyb20gdGhlIGxvdyBsZXZlbCBkcml2ZXJzLgorCWlpLglVbmJ1cmRlbiB0aGUgbG93IGxldmVsIGRyaXZlcnMgZnJvbSBoYXZpbmcgdG8gZXhwb3J0IHRoZQorCQljaGFyYWN0ZXIgbm9kZSBkZXZpY2UgYW5kIHJlbGF0ZWQgaGFuZGxpbmcuCisJaWlpLglJbXBsZW1lbnQgYW55IHBvbGljeSBtZWNoYW5pc21zIGluIG9uZSBwbGFjZS4KKwlpdi4JQXBwbGljYXRpb25zIGhhdmUgdG8gaW50ZXJmYWNlIHdpdGggb25seSBtb2R1bGUgaW5zdGVhZCBvZgorCQltdWx0aXBsZSBsb3cgbGV2ZWwgZHJpdmVycy4KKworQ3VycmVudGx5IHRoaXMgbW9kdWxlIChjYWxsZWQgQ29tbW9uIE1hbmFnZW1lbnQgTW9kdWxlKSBpcyB1c2VkIG9ubHkgdG8gaXNzdWUKK2lvY3RsIGNvbW1hbmRzLiBCdXQgdGhpcyBtb2R1bGUgaXMgZW52aXNpb25lZCB0byBoYW5kbGUgYWxsIHVzZXIgc3BhY2UgbGV2ZWwKK2ludGVyYWN0aW9ucy4gU28gYW55ICdwcm9jJywgJ3N5c2ZzJyBpbXBsZW1lbnRhdGlvbnMgd2lsbCBiZSBsb2NhbGl6ZWQgaW4gdGhpcworY29tbW9uIG1vZHVsZS4KKworQ3JlZGl0czoKKy0tLS0tLS0KKworIlNoYXJlZCBjb2RlIGluIGEgdGhpcmQgbW9kdWxlLCBhICJsaWJyYXJ5IG1vZHVsZSIsIGlzIGFuIGFjY2VwdGFibGUKK3NvbHV0aW9uLiBtb2Rwcm9iZSBhdXRvbWF0aWNhbGx5IGxvYWRzIGRlcGVuZGVudCBtb2R1bGVzLCBzbyB1c2VycworcnVubmluZyAibW9kcHJvYmUgZHJpdmVyMSIgb3IgIm1vZHByb2JlIGRyaXZlcjIiIHdvdWxkIGF1dG9tYXRpY2FsbHkKK2xvYWQgdGhlIHNoYXJlZCBsaWJyYXJ5IG1vZHVsZS4iCisKKwkJLSBKZWZmIEdhcnppayAoamdhcnppa0Bwb2JveC5jb20pLCAwMi4yNS4yMDA0IExLTUwKKworIkFzIEplZmYgaGludGVkLCBpZiB5b3VyIHVzZXJzcGFjZTwtPmRyaXZlciBBUEkgaXMgY29uc2lzdGVudCBiZXR3ZWVuCit5b3VyIG5ldyBNUFQtYmFzZWQgUkFJRCBjb250cm9sbGVycyBhbmQgeW91ciBleGlzdGluZyBtZWdhcmFpZCBkcml2ZXIsCit0aGVuIHBlcmhhcHMgeW91IG5lZWQgYSBzaW5nbGUgc21hbGwgaGVscGVyIG1vZHVsZSAobHNpaW9jdGwgb3Igc29tZQorYmV0dGVyIG5hbWUpLCBsb2FkZWQgYnkgYm90aCBtcHRyYWlkIGFuZCBtZWdhcmFpZCBhdXRvbWF0aWNhbGx5LCB3aGljaAoraGFuZGxlcyByZWdpc3RlcmluZyB0aGUgL2Rldi9tZWdhcmFpZCBub2RlIGR5bmFtaWNhbGx5LiBJbiB0aGlzIGNhc2UsCitib3RoIG1wdHJhaWQgYW5kIG1lZ2FyYWlkIHdvdWxkIHJlZ2lzdGVyIHdpdGggbHNpaW9jdGwgZm9yIGVhY2gKK2FkYXB0ZXIgZGlzY292ZXJlZCwgYW5kIGxzaWlvY3RsIHdvdWxkIGVzc2VudGlhbGx5IGJlIGEgc3dpdGNoLAorcmVkaXJlY3RpbmcgdXNlcnNwYWNlIHRvb2wgaW9jdGxzIHRvIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXIuIgorCisJCS0gTWF0dCBEb21zY2gsIChNYXR0X0RvbXNjaEBkZWxsLmNvbSksIDAyLjI1LjIwMDQgTEtNTAorCitEZXNpZ246CistLS0tLS0KKworVGhlIENvbW1vbiBNYW5hZ2VtZW50IE1vZHVsZSBpcyBpbXBsZW1lbnRlZCBpbiBtZWdhcmFpZF9tbS5bY2hdIGZpbGVzLiBUaGlzCittb2R1bGUgYWN0cyBhcyBhIHJlZ2lzdHJ5IGZvciBsb3cgbGV2ZWwgaGJhIGRyaXZlcnMuIFRoZSBsb3cgbGV2ZWwgZHJpdmVycworKGN1cnJlbnRseSBvbmx5IG1lZ2FyYWlkKSByZWdpc3RlciBlYWNoIGNvbnRyb2xsZXIgd2l0aCB0aGUgY29tbW9uIG1vZHVsZS4KKworVGhlIGFwcGxpY2F0aW9ucyBpbnRlcmZhY2Ugd2l0aCB0aGUgY29tbW9uIG1vZHVsZSB2aWEgdGhlIGNoYXJhY3RlciBkZXZpY2UKK25vZGUgZXhwb3J0ZWQgYnkgdGhlIG1vZHVsZS4KKworVGhlIGxvd2VyIGxldmVsIGRyaXZlcnMgbm93IHVuZGVyc3RhbmQgb25seSBhIG5ldyBpbXByb3ZlZCBpb2N0bCBwYWNrZXQgY2FsbGVkCit1aW9jX3QuIFRoZSBtYW5hZ2VtZW50IG1vZHVsZSBjb252ZXJ0cyB0aGUgb2xkZXIgaW9jdGwgcGFja2V0cyBmcm9tIHRoZSBvbGRlcgorYXBwbGljYXRpb25zIGludG8gdWlvY190LiBBZnRlciBkcml2ZXIgaGFuZGxlcyB0aGUgdWlvY190LCB0aGUgY29tbW9uIG1vZHVsZQord2lsbCBjb252ZXJ0IHRoYXQgYmFjayBpbnRvIHRoZSBvbGQgZm9ybWF0IGJlZm9yZSByZXR1cm5pbmcgdG8gYXBwbGljYXRpb25zLgorCitBcyBuZXcgYXBwbGljYXRpb25zIGV2b2x2ZSBhbmQgcmVwbGFjZSB0aGUgb2xkIG9uZXMsIHRoZSBvbGQgcGFja2V0IGZvcm1hdCAKK3dpbGwgYmUgcmV0aXJlZC4KKworQ29tbW9uIG1vZHVsZSBkZWRpY2F0ZXMgb25lIHVpb2NfdCBwYWNrZXQgdG8gZWFjaCBjb250cm9sbGVyIHJlZ2lzdGVyZWQuIFRoaXMKK2NhbiBlYXNpbHkgYmUgbW9yZSB0aGFuIG9uZS4gQnV0IHNpbmNlIG1lZ2FyYWlkIGlzIHRoZSBvbmx5IGxvdyBsZXZlbCBkcml2ZXIKK3RvZGF5LCBhbmQgaXQgY2FuIGhhbmRsZSBvbmx5IG9uZSBpb2N0bCwgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGhhdmUgbW9yZS4gQnV0CithcyBuZXcgY29udHJvbGxlciBjbGFzc2VzIGdldCBhZGRlZCwgdGhpcyB3aWxsIGJlIHR1bmVkIGFwcHJvcHJpYXRlbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjN3h4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9uY3I1M2M3eHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTk1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjN3h4LnR4dApAQCAtMCwwICsxLDQwIEBACitSRUFETUUgZm9yIFdhcnBFbmdpbmUvQTQwMDBUL0E0MDkxIFNDU0kga2VybmVscy4KKworVXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBkaXNhYmxlIG9wdGlvbnMgaW4gdGhlIFNDU0kgZHJpdmVyLgorCitVc2luZyBhbWlib290IGZvciBleGFtcGxlLi4uLi4KKworVG8gZGlzYWJsZSBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbi4uLi4KKworCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub3N5bmM6MAkKKworVG8gZGlzYWJsZSBEaXNjb25uZWN0aW9uLi4uLgorCQorCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub2Rpc2Nvbm5lY3Q6MAorCitUbyBkaXNhYmxlIGNlcnRhaW4gU0NTSSBkZXZpY2VzLi4uCisKKwlhbWlib290IC1rIGtlcm5lbCA1M2M3eHg9dmFsaWRpZHM6MHgzRgorCisJdGhpcyBhbGxvd3Mgb25seSBkZXZpY2UgSUQncyAwLDEsMiwzLDQgYW5kIDUgZm9yIGxpbnV4IHRvIGhhbmRsZS4KKwkodGhpcyBpcyBhIGJpdG1hc2tlZCBmaWVsZCAtIGkuZS4gZWFjaCBiaXQgcmVwcmVzZW50cyBhIFNDU0kgSUQpCisKK1RoZXNlIGNvbW1hbmRzIHdvcmsgb24gYSBwZXIgY29udHJvbGxlciBiYXNpcyBhbmQgdXNlIHRoZSBvcHRpb24gJ25leHQnIHRvCittb3ZlIHRvIHRoZSBuZXh0IGNvbnRyb2xsZXIgaW4gdGhlIHN5c3RlbS4KKworZS5nLgorCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub2Rpc2Nvbm5lY3Q6MCxuZXh0LG5vc3luYzowCisKKwl0aGlzIHVzZXMgTm8gRGlzY29ubmVjdGlvbiBvbiB0aGUgZmlyc3QgY29udHJvbGxlciBhbmQgQXN5bmNocm9ub3VzCisJU0NTSSBvbiB0aGUgc2Vjb25kIGNvbnRyb2xsZXIuCisKK0tub3duIElzc3VlczoKKworVHdvIGRldmljZXMgYXJlIGtub3duIG5vdCB0byBmdW5jdGlvbiB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHVzaW5nCitzeW5jaHJvbm91cyBTQ1NJLiBUaGVzZSBhcmUgdGhlIEFyY2hpdmUgVmlwZXIgMTUwIFRhcGUgRHJpdmUgYW5kIHRoZSAKK1N5UXVlc3QgU1E1NTUgcmVtb3ZlYWJsZSBoYXJkIGRyaXZlLiBXaGVuIHVzaW5nIHRoZXNlIGRldmljZXMgb24gYSBjb250cm9sbGVyCit1c2UgdGhlICdub3N5bmM6MCcgb3B0aW9uLgorCitQbGVhc2UgdHJ5IHRoZXNlIG9wdGlvbnMgYW5kIHBvc3QgYW55IHByb2JsZW1zL3N1Y2Nlc3NlcyB0byBtZS4KKworQWxhbiBIb3VyaWhhbmUgPGFsYW5oQGZhaXJsaXRlLmRlbW9uLmNvLnVrPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjOHh4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJkMmFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQKQEAgLTAsMCArMSwxODU0IEBACitUaGUgTGludXggTkNSNTNDOFhYL1NZTTUzQzhYWCBkcml2ZXJzIFJFQURNRSBmaWxlCisKK1dyaXR0ZW4gYnkgR2VyYXJkIFJvdWRpZXIgPGdyb3VkaWVyQGZyZWUuZnI+CisyMSBSdWUgQ2Fybm90Cis5NTE3MCBERVVJTCBMQSBCQVJSRSAtIEZSQU5DRQorCisyOSBNYXkgMTk5OQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgSW50cm9kdWN0aW9uCisyLiAgU3VwcG9ydGVkIGNoaXBzIGFuZCBTQ1NJIGZlYXR1cmVzCiszLiAgQWR2YW50YWdlcyBvZiB0aGUgZW5oYW5jZWQgODk2IGRyaXZlcgorICAgICAgMy4xIE9wdGltaXplZCBTQ1NJIFNDUklQVFMKKyAgICAgIDMuMiBOZXcgZmVhdHVyZXMgb2YgdGhlIFNZTTUzQzg5NiAoNjQgYml0IFBDSSBkdWFsIExWRCBTQ1NJIGNvbnRyb2xsZXIpCis0LiAgTWVtb3J5IG1hcHBlZCBJL08gdmVyc3VzIG5vcm1hbCBJL08KKzUuICBUYWdnZWQgY29tbWFuZCBxdWV1ZWluZworNi4gIFBhcml0eSBjaGVja2luZworNy4gIFByb2ZpbGluZyBpbmZvcm1hdGlvbgorOC4gIENvbnRyb2wgY29tbWFuZHMKKyAgICAgIDguMSAgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kCisgICAgICA4LjIgIFNldCB3aWRlIHNpemUKKyAgICAgIDguMyAgU2V0IG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgICAgICA4LjQgIFNldCBvcmRlciB0eXBlIGZvciB0YWdnZWQgY29tbWFuZAorICAgICAgOC41ICBTZXQgZGVidWcgbW9kZQorICAgICAgOC42ICBDbGVhciBwcm9maWxlIGNvdW50ZXJzCisgICAgICA4LjcgIFNldCBmbGFnIChub19kaXNjKQorICAgICAgOC44ICBTZXQgdmVyYm9zZSBsZXZlbAorICAgICAgOC45ICBSZXNldCBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorICAgICAgOC4xMCBBYm9ydCBhbGwgdGFza3Mgb2YgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKzkuICBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKzEwLiBCb290IHNldHVwIGNvbW1hbmRzCisgICAgICAxMC4xIFN5bnRheAorICAgICAgMTAuMiBBdmFpbGFibGUgYXJndW1lbnRzCisgICAgICAgICAgICAgMTAuMi4xICBNYXN0ZXIgcGFyaXR5IGNoZWNraW5nCisgICAgICAgICAgICAgMTAuMi4yICBTY3NpIHBhcml0eSBjaGVja2luZworICAgICAgICAgICAgIDEwLjIuMyAgU2NzaSBkaXNjb25uZWN0aW9ucworICAgICAgICAgICAgIDEwLjIuNCAgU3BlY2lhbCBmZWF0dXJlcworICAgICAgICAgICAgIDEwLjIuNSAgVWx0cmEgU0NTSSBzdXBwb3J0CisgICAgICAgICAgICAgMTAuMi42ICBEZWZhdWx0IG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgICAgICAxMC4yLjcgIERlZmF1bHQgc3luY2hyb25vdXMgcGVyaW9kIGZhY3RvcgorICAgICAgICAgICAgIDEwLjIuOCAgTmVnb3RpYXRlIHN5bmNocm9ub3VzIHdpdGggYWxsIGRldmljZXMKKyAgICAgICAgICAgICAxMC4yLjkgIFZlcmJvc2l0eSBsZXZlbAorICAgICAgICAgICAgIDEwLjIuMTAgRGVidWcgbW9kZQorICAgICAgICAgICAgIDEwLjIuMTEgQnVyc3QgbWF4CisgICAgICAgICAgICAgMTAuMi4xMiBMRUQgc3VwcG9ydAorICAgICAgICAgICAgIDEwLjIuMTMgTWF4IHdpZGUKKyAgICAgICAgICAgICAxMC4yLjE0IERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgICAgICAgMTAuMi4xNSBJUlEgbW9kZQorICAgICAgICAgICAgIDEwLjIuMTYgUmV2ZXJzZSBwcm9iZQorICAgICAgICAgICAgIDEwLjIuMTcgRml4IHVwIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgICAgICAgICAgICAgMTAuMi4xOCBTZXJpYWwgTlZSQU0KKyAgICAgICAgICAgICAxMC4yLjE5IENoZWNrIFNDU0kgQlVTIAorICAgICAgICAgICAgIDEwLjIuMjAgRXhjbHVkZSBhIGhvc3QgZnJvbSBiZWluZyBhdHRhY2hlZAorICAgICAgICAgICAgIDEwLjIuMjEgU3VnZ2VzdCBhIGRlZmF1bHQgU0NTSSBpZCBmb3IgaG9zdHMKKyAgICAgICAgICAgICAxMC4yLjIyIEVuYWJsZSB1c2Ugb2YgSU1NRURJQVRFIEFSQklUUkFUSU9OCisgICAgICAxMC4zIEFkdmlzZWQgYm9vdCBzZXR1cCBjb21tYW5kcworICAgICAgMTAuNCBQQ0kgY29uZmlndXJhdGlvbiBmaXgtdXAgYm9vdCBvcHRpb24KKyAgICAgIDEwLjUgU2VyaWFsIE5WUkFNIHN1cHBvcnQgYm9vdCBvcHRpb24KKyAgICAgIDEwLjYgU0NTSSBCVVMgY2hlY2tpbmcgYm9vdCBvcHRpb24KKyAgICAgIDEwLjcgSU1NRURJQVRFIEFSQklUUkFUSU9OIGJvb3Qgb3B0aW9uCisxMS4gU29tZSBjb25zdGFudHMgYW5kIGZsYWdzIG9mIHRoZSBuY3I1M2M4eHguaCBoZWFkZXIgZmlsZQorMTIuIEluc3RhbGxhdGlvbgorMTMuIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZmVhdHVyZXMKKzE0LiBLbm93biBwcm9ibGVtcworICAgICAgMTQuMSBUYWdnZWQgY29tbWFuZHMgd2l0aCBJb21lZ2EgSmF6IGRldmljZQorICAgICAgMTQuMiBEZXZpY2UgbmFtZXMgY2hhbmdlIHdoZW4gYW5vdGhlciBjb250cm9sbGVyIGlzIGFkZGVkCisgICAgICAxNC4zIFVzaW5nIG9ubHkgOCBiaXQgZGV2aWNlcyB3aXRoIGEgV0lERSBTQ1NJIGNvbnRyb2xsZXIuCisgICAgICAxNC40IFBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBkdXJpbmcgYSBNZW1vcnkgV3JpdGUgYW5kIEludmFsaWRhdGUKKyAgICAgIDE0LjUgSVJRIHNoYXJpbmcgcHJvYmxlbXMKKzE1LiBTQ1NJIHByb2JsZW0gdHJvdWJsZXNob290aW5nCisgICAgICAxNS4xIFByb2JsZW0gdHJhY2tpbmcKKyAgICAgIDE1LjIgVW5kZXJzdGFuZGluZyBoYXJkd2FyZSBlcnJvciByZXBvcnRzCisxNi4gU3luY2hvbm91cyB0cmFuc2ZlciBuZWdvdGlhdGlvbiB0YWJsZXMKKyAgICAgIDE2LjEgU3luY2hyb25vdXMgdGltaW5ncyBmb3IgNTNDODc1IGFuZCA1M0M4NjAgVWx0cmEtU0NTSSBjb250cm9sbGVycworICAgICAgMTYuMiBTeW5jaHJvbm91cyB0aW1pbmdzIGZvciBmYXN0IFNDU0ktMiA1M0M4WFggY29udHJvbGxlcnMKKzE3LiBTZXJpYWwgTlZSQU0gc3VwcG9ydCAoYnkgUmljaGFyZCBXYWx0aGFtKQorICAgICAgMTcuMSBGZWF0dXJlcworICAgICAgMTcuMiBTeW1iaW9zIE5WUkFNIGxheW91dAorICAgICAgMTcuMyBUZWtyYW0gIE5WUkFNIGxheW91dAorMTguIFN1cHBvcnQgZm9yIEJpZyBFbmRpYW4KKyAgICAgIDE4LjEgQmlnIEVuZGlhbiBDUFUKKyAgICAgIDE4LjIgTkNSIGNoaXAgaW4gQmlnIEVuZGlhbiBtb2RlIG9mIG9wZXJhdGlvbnMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBJbnRyb2R1Y3Rpb24KKworVGhlIGluaXRpYWwgTGludXggbmNyNTNjOHh4IGRyaXZlciBoYXMgYmVlbiBhIHBvcnQgb2YgdGhlIG5jciBkcml2ZXIgZnJvbSAKK0ZyZWVCU0QgdGhhdCBoYXMgYmVlbiBhY2hpZXZlZCBpbiBOb3ZlbWJlciAxOTk1IGJ5OgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyICAgICAgICAgICAgICA8Z3JvdWRpZXJAZnJlZS5mcj4KKworVGhlIG9yaWdpbmFsIGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIGZvciAzODZic2QgYW5kIEZyZWVCU0QgYnk6CisgICAgICAgICAgV29sZmdhbmcgU3RhbmdsbWVpZXIgICAgICAgIDx3b2xmQGNvbG9nbmUuZGU+CisgICAgICAgICAgU3RlZmFuIEVzc2VyICAgICAgICAgICAgICAgIDxzZUBtaS5VbmktS29lbG4uZGU+CisKK0l0IGlzIG5vdyBhdmFpbGFibGUgYXMgYSBidW5kbGUgb2YgMiBkcml2ZXJzOgorCistIG5jcjUzYzh4eCBnZW5lcmljIGRyaXZlciB0aGF0IHN1cHBvcnRzIGFsbCB0aGUgU1lNNTNDOFhYIGZhbWlseSBpbmNsdWRpbmcgCisgIHRoZSBlYWxpZXN0IDgxMCByZXYuIDEsIHRoZSBsYXRlc3QgODk2ICgyIGNoYW5uZWwgTFZEIFNDU0kgY29udHJvbGxlcikgYW5kCisgIHRoZSBuZXcgODk1QSAoMSBjaGFubmVsIExWRCBTQ1NJIGNvbnRyb2xsZXIpLgorLSBzeW01M2M4eHggZW5oYW5jZWQgZHJpdmVyIChhLmsuYS4gODk2IGRyaXZlcnMpIHRoYXQgZHJvcHMgc3VwcG9ydCBvZiBvbGRlc3QgCisgIGNoaXBzIGluIG9yZGVyIHRvIGdhaW4gYWR2YW50YWdlIG9mIG5ldyBmZWF0dXJlcywgYXMgTE9BRC9TVE9SRSBpbnRydWN0aW9ucyAKKyAgYXZhaWxhYmxlIHNpbmNlIHRoZSA4MTBBIGFuZCBoYXJkd2FyZSBwaGFzZSBtaXNtYXRjaCBhdmFpbGFibGUgd2l0aCB0aGUgCisgIDg5NiBhbmQgdGhlIDg5NUEuCisKK1lvdSBjYW4gZmluZCB0ZWNobmljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE5DUiA4eHggZmFtaWx5IGluIHRoZQorUENJLUhPV1RPIHdyaXR0ZW4gYnkgTWljaGFlbCBXaWxsIGFuZCBpbiB0aGUgU0NTSS1IT1dUTyB3cml0dGVuIGJ5CitEcmV3IEVja2hhcmR0LgorCitJbmZvcm1hdGlvbiBhYm91dCBuZXcgY2hpcHMgaXMgYXZhaWxhYmxlIGF0IExTSUxPR0lDIHdlYiBzZXJ2ZXI6CisKKyAgICAgICAgICBodHRwOi8vd3d3LmxzaWxvZ2ljLmNvbS8KKworU0NTSSBzdGFuZGFyZCBkb2N1bWVudGF0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IFNZTUJJT1MgZnRwIHNlcnZlcjoKKworICAgICAgICAgIGZ0cDovL2Z0cC5zeW1iaW9zLmNvbS8KKworVXNlZnVsbCBTQ1NJIHRvb2xzIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZ2RhbGUgYXJlIGF2YWlsYWJsZSBhdCB0c3gtMTE6CisKKyAgICAgICAgICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvc2NzaS9zY3NpaW5mby1YLlkudGFyLmd6CisgICAgICAgICAgZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L0FMUEhBL3Njc2kvc2NzaWRldi1YLlkudGFyLmd6CisKK1RoZXNlIHRvb2xzIGFyZSBub3QgQUxQSEEgYnV0IHF1aXRlIGNsZWFuIGFuZCB3b3JrIHF1aXRlIHdlbGwuCitJdCBpcyBlc3NlbnRpYWwgeW91IGhhdmUgdGhlICdzY3NpaW5mbycgcGFja2FnZS4KKworVGhpcyBzaG9ydCBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGUgZmVhdHVyZXMgb2YgdGhlIGdlbmVyaWMgYW5kIGVuaGFuY2VkCitkcml2ZXJzLCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIGNvbnRyb2wgY29tbWFuZHMgYXZhaWxhYmxlIHRocm91Z2ggCit0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtIHJlYWQgLyB3cml0ZSBvcGVyYXRpb25zLgorCitUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgT0sgd2l0aCBsaW51eC9pMzg2LCBMaW51eC9BbHBoYSBhbmQgTGludXgvUFBDLgorCitMYXRlc3QgZHJpdmVyIHZlcnNpb24gYW5kIHBhdGNoZXMgYXJlIGF2YWlsYWJsZSBhdDoKKworICAgICAgICAgIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9wZW9wbGUvZ2VyYXJkLXJvdWRpZXIKK29yCisgICAgICAgICAgZnRwOi8vZnRwLnN5bWJpb3MuY29tL21pcnJvci9mdHAudHV4Lm9yZy9wdWIvdHV4L3JvdWRpZXIvZHJpdmVycworCitJIGFtIG5vdCBhIG5hdGl2ZSBzcGVha2VyIG9mIEVuZ2xpc2ggYW5kIHRoZXJlIGFyZSBwcm9iYWJseSBsb3RzIG9mCittaXN0YWtlcyBpbiB0aGlzIFJFQURNRSBmaWxlLiBBbnkgaGVscCB3aWxsIGJlIHdlbGNvbWUuCisKKworMi4gU3VwcG9ydGVkIGNoaXBzIGFuZCBTQ1NJIGZlYXR1cmVzCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBmb3IgYWxsIGNoaXBzOgorCisJU3luY2hyb25vdXMgbmVnb3RpYXRpb24KKwlEaXNjb25uZWN0aW9uCisJVGFnZ2VkIGNvbW1hbmQgcXVldWluZworCVNDU0kgcGFyaXR5IGNoZWNraW5nCisJTWFzdGVyIHBhcml0eSBjaGVja2luZworCisiV2lkZSBuZWdvdGlhdGlvbiIgaXMgc3VwcG9ydGVkIGZvciBjaGlwcyB0aGF0IGFsbG93IGl0LiAgVGhlCitmb2xsb3dpbmcgdGFibGUgc2hvd3Mgc29tZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgTkNSIDh4eCBmYW1pbHkgY2hpcHMgCithbmQgd2hhdCBkcml2ZXJzIHN1cHBvcnQgdGhlbS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWQgYnkgICBTdXBwb3J0ZWQgYnkKKyAgICAgICBPbiBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdlbmVyaWMgICAgdGhlIGVuaGFuY2VkIAorQ2hpcCAgIFNETVMgQklPUyAgIFdpZGUgICBTQ1NJIHN0ZC4gICBNYXguIHN5bmMgICBkcml2ZXIgICAgICAgICBkcml2ZXIKKy0tLS0gICAtLS0tLS0tLS0gICAtLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLQorODEwICAgICAgICBOICAgICAgICAgTiAgICAgIEZBU1QxMCAgICAxMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzgxMEEgICAgICAgTiAgICAgICAgIE4gICAgICBGQVNUMTAgICAgMTAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4MTUgICAgICAgIFkgICAgICAgICBOICAgICAgRkFTVDEwICAgIDEwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODI1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QxMCAgICAyMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzgyNUEgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMTAgICAgMjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4NjAgICAgICAgIE4gICAgICAgICBOICAgICAgRkFTVDIwICAgIDIwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODc1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QyMCAgICA0MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg3NiAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMjAgICAgNDAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTUgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODk1QSAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg5NiAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTcgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorMTUxMEQgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzEwMTAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUODAgICAxNjAgTUIvcyAgICAgICAgTiAgICAgICAgICAgICBZCisxMDEwXzY2KiAgIFkgICAgICAgICBZICAgICAgRkFTVDgwICAgMTYwIE1CL3MgICAgICAgIE4gICAgICAgICAgICAgWQorCisqIENoaXAgc3VwcG9ydHMgMzNNSHogYW5kIDY2TUh6IFBDSSBidXNlcy4KKworCitTdW1tYXJ5IG9mIG90aGVyIHN1cHBvcnRlZCBmZWF0dXJlczoKKworTW9kdWxlOiAgICAgICAgICAgICAgICBhbGxvdyB0byBsb2FkIHRoZSBkcml2ZXIKK01lbW9yeSBtYXBwZWQgSS9POiAgICAgaW5jcmVhc2VzIHBlcmZvcm1hbmNlCitQcm9maWxpbmcgaW5mb3JtYXRpb246IHJlYWQgb3BlcmF0aW9ucyBmcm9tIHRoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0KK0NvbnRyb2wgY29tbWFuZHM6ICAgICAgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtCitEZWJ1Z2dpbmcgaW5mb3JtYXRpb246IHdyaXR0ZW4gdG8gc3lzbG9nIChleHBlcnQgb25seSkKK1NjYXR0ZXIgLyBnYXRoZXIKK1NoYXJlZCBpbnRlcnJ1cHQKK0Jvb3Qgc2V0dXAgY29tbWFuZHMKK1NlcmlhbCBOVlJBTTogICAgICAgICAgU3ltYmlvcyBhbmQgVGVrcmFtIGZvcm1hdHMKKworCiszLiBBZHZhbnRhZ2VzIG9mIHRoZSBlbmhhbmNlZCA4OTYgZHJpdmVyCisKKzMuMSBPcHRpbWl6ZWQgU0NTSSBTQ1JJUFRTLgorCitUaGUgODEwQSwgODI1QSwgODc1LCA4OTUsIDg5NiBhbmQgODk1QSBzdXBwb3J0IG5ldyBTQ1NJIFNDUklQVFMgaW5zdHJ1Y3Rpb25zIAorbmFtZWQgTE9BRCBhbmQgU1RPUkUgdGhhdCBhbGxvdyB0byBtb3ZlIHVwIHRvIDEgRFdPUkQgZnJvbS90byBhbiBJTyByZWdpc3RlciAKK3RvL2Zyb20gbWVtb3J5IG11Y2ggZmFzdGVyIHRoYXQgdGhlIE1PVkUgTUVNT1JZIGluc3RydWN0aW9uIHRoYXQgaXMgc3VwcG9ydGVkIAorYnkgdGhlIDUzYzd4eCBhbmQgNTNjOHh4IGZhbWlseS4KK1RoZSBMT0FEL1NUT1JFIGluc3RydWN0aW9ucyBzdXBwb3J0IGFic29sdXRlIGFuZCBEU0EgcmVsYXRpdmUgYWRkcmVzc2luZyAKK21vZGVzLiAgVGhlIFNDU0kgU0NSSVBUUyBoYWQgYmVlbiBlbnRpcmVseSByZXdyaXR0ZW4gdXNpbmcgTE9BRC9TVE9SRSBpbnN0ZWFkIAorb2YgTU9WRSBNRU1PUlkgaW5zdHJ1Y3Rpb25zLgorCiszLjIgTmV3IGZlYXR1cmVzIG9mIHRoZSBTWU01M0M4OTYgKDY0IGJpdCBQQ0kgZHVhbCBMVkQgU0NTSSBjb250cm9sbGVyKQorCitUaGUgODk2IGFuZCB0aGUgODk1QSBhbGxvd3MgaGFuZGxpbmcgb2YgdGhlIHBoYXNlIG1pc21hdGNoIGNvbnRleHQgZnJvbSAKK1NDUklQVFMgKGF2b2lkcyB0aGUgcGhhc2UgbWlzbWF0Y2ggaW50ZXJydXB0IHRoYXQgc3RvcHMgdGhlIFNDU0kgcHJvY2Vzc29yIAordW50aWwgdGhlIEMgY29kZSBoYXMgc2F2ZWQgdGhlIGNvbnRleHQgb2YgdGhlIHRyYW5zZmVyKS4KK0ltcGxlbWVudGluZyB0aGlzIHdpdGhvdXQgdXNpbmcgTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgd291bGQgYmUgcGFpbmZ1bGwgCithbmQgSSBkaWQnbnQgZXZlbiB3YW50IHRvIHRyeSBpdC4KKworVGhlIDg5NiBjaGlwIHN1cHBvcnRzIDY0IGJpdCBQQ0kgdHJhbnNhY3Rpb25zIGFuZCBhZGRyZXNzaW5nLCB3aGlsZSB0aGUgCis4OTVBIHN1cHBvcnRzIDMyIGJpdCBQQ0kgdHJhbnNhY3Rpb25zIGFuZCA2NCBiaXQgYWRkcmVzc2luZy4KK1RoZSBTQ1JJUFRTIHByb2Nlc3NvciBvZiB0aGVzZSBjaGlwcyBpcyBub3QgdHJ1ZSA2NCBiaXQsIGJ1dCB1c2VzIHNlZ21lbnQgCityZWdpc3RlcnMgZm9yIGJpdCAzMi02My4gQW5vdGhlciBpbnRlcmVzdGluZyBmZWF0dXJlIGlzIHRoYXQgTE9BRC9TVE9SRSAKK2luc3RydWN0aW9ucyB0aGF0IGFkZHJlc3MgdGhlIG9uLWNoaXAgUkFNICg4aykgcmVtYWluIGludGVybmFsIHRvIHRoZSBjaGlwLgorCitEdWUgdG8gdGhlIHVzZSBvZiBMT0FEL1NUT1JFIFNDUklQVFMgaW5zdHJ1Y3Rpb25zLCB0aGlzIGRyaXZlciBkb2VzIG5vdCAKK3N1cHBvcnQgdGhlIGZvbGxvd2luZyBjaGlwczoKKy0gU1lNNTNDODEwIHJldmlzaW9uIDwgMHgxMCAoMTYpCistIFNZTTUzQzgxNSBhbGwgcmV2aXNpb25zCistIFNZTTUzQzgyNSByZXZpc2lvbiA8IDB4MTAgKDE2KQorCis0LiBNZW1vcnkgbWFwcGVkIEkvTyB2ZXJzdXMgbm9ybWFsIEkvTworCitNZW1vcnkgbWFwcGVkIEkvTyBoYXMgbGVzcyBsYXRlbmN5IHRoYW4gbm9ybWFsIEkvTy4gIFNpbmNlCitsaW51eC0xLjMueCwgbWVtb3J5IG1hcHBlZCBJL08gaXMgdXNlZCByYXRoZXIgdGhhbiBub3JtYWwgSS9PLiAgTWVtb3J5CittYXBwZWQgSS9PIHNlZW1zIHRvIHdvcmsgZmluZSBvbiBtb3N0IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBidXQKK3NvbWUgcG9vcmx5IGRlc2lnbmVkIG1vdGhlcmJvYXJkcyBtYXkgYnJlYWsgdGhpcyBmZWF0dXJlLgorCitUaGUgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX1NDU0lfTkNSNTNDOFhYX0lPTUFQUEVEIGZvcmNlcyB0aGUKK2RyaXZlciB0byB1c2Ugbm9ybWFsIEkvTyBpbiBhbGwgY2FzZXMuCisKKworNS4gVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKworUXVldWluZyBtb3JlIHRoYW4gMSBjb21tYW5kIGF0IGEgdGltZSB0byBhIGRldmljZSBhbGxvd3MgaXQgdG8gcGVyZm9ybSAKK29wdGltaXphdGlvbnMgYmFzZWQgb24gYWN0dWFsIGhlYWQgcG9zaXRpb25zIGFuZCBpdHMgbWVjaGFuaWNhbCAKK2NoYXJhY3RlcmlzdGljcy4gVGhpcyBmZWF0dXJlIG1heSBhbHNvIHJlZHVjZSBhdmVyYWdlIGNvbW1hbmQgbGF0ZW5jeS4KK0luIG9yZGVyIHRvIHJlYWxseSBnYWluIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUsIGRldmljZXMgbXVzdCBoYXZlIAorYSByZWFzb25hYmxlIGNhY2hlIHNpemUgKE5vIG1pcmFjbGUgaXMgdG8gYmUgZXhwZWN0ZWQgZm9yIGEgbG93LWVuZCAKK2hhcmQgZGlzayB3aXRoIDEyOCBLQiBvciBsZXNzKS4KK1NvbWUga293biBTQ1NJIGRldmljZXMgZG8gbm90IHByb3Blcmx5IHN1cHBvcnQgdGFnZ2VkIGNvbW1hbmQgcXVldWluZy4KK0dlbmVyYWxseSwgZmlybXdhcmUgcmV2aXNpb25zIHRoYXQgZml4IHRoaXMga2luZCBvZiBwcm9ibGVtcyBhcmUgYXZhaWxhYmxlIAorYXQgcmVzcGVjdGl2ZSB2ZW5kb3Igd2ViL2Z0cCBzaXRlcy4KK0FsbCBJIGNhbiBzYXkgaXMgdGhhdCB0aGUgaGFyZCBkaXNrcyBJIHVzZSBvbiBteSBtYWNoaW5lcyBiZWhhdmUgd2VsbCB3aXRoIAordGhpcyBkcml2ZXIgd2l0aCB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGVuYWJsZWQ6CisKKy0gSUJNIFMxMiAwNjYyCistIENvbm5lciAxMDgwUworLSBRdWFudHVtIEF0bGFzIEkKKy0gUXVhbnR1bSBBdGxhcyBJSQorCitJZiB5b3VyIGNvbnRyb2xsZXIgaGFzIE5WUkFNLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGlzIGZlYXR1cmUgcGVyIHRhcmdldCAKK2Zyb20gdGhlIHVzZXIgc2V0dXAgdG9vbC4gVGhlIFRla3JhbSBTZXR1cCBwcm9ncmFtIGFsbG93cyB0byB0dW5lIHRoZSAKK21heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyB1cCB0byAzMi4gVGhlIFN5bWJpb3MgU2V0dXAgb25seSBhbGxvd3MgCit0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUuCisKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXMgdGFnZ2VkIGNvbW1hbmRzIHF1ZXVlZCB0byBhIGRldmljZQoraXMgY3VycmVudGx5IHNldCB0byA4IGJ5IGRlZmF1bHQuICBUaGlzIHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0IFNDU0kKK2Rpc2tzLiAgV2l0aCBsYXJnZSBTQ1NJIGRpc2tzICg+PSAyR0IsIGNhY2hlID49IDUxMktCLCBhdmVyYWdlIHNlZWsgdGltZQorPD0gMTAgbXMpLCB1c2luZyBhIGxhcmdlciB2YWx1ZSBtYXkgZ2l2ZSBiZXR0ZXIgcGVyZm9ybWFuY2VzLgorCitUaGUgc3ltNTNjOHh4IGRyaXZlciBzdXBwb3J0cyB1cCB0byAyNTUgY29tbWFuZHMgcGVyIGRldmljZSwgYW5kIHRoZSAKK2dlbmVyaWMgbmNyNTNjOHh4IGRyaXZlciBzdXBwb3J0cyB1cCB0byA2NCwgYnV0IHVzaW5nIG1vcmUgdGhhbiAzMiBpcyAKK2dlbmVyYWxseSBub3Qgd29ydGgtd2hpbGUsIHVubGVzcyB5b3UgYXJlIHVzaW5nIGEgdmVyeSBsYXJnZSBkaXNrIG9yIGRpc2sgCithcnJheS4gSXQgaXMgbm90aWNlYWJsZSB0aGF0IG1vc3Qgb2YgcmVjZW50IGhhcmQgZGlza3Mgc2VlbSBub3QgdG8gYWNjZXB0IAorbW9yZSB0aGFuIDY0IHNpbXVsdGFuZW91cyBjb21tYW5kcy4gU28sIHVzaW5nIG1vcmUgdGhhbiA2NCBxdWV1ZWQgY29tbWFuZHMgCitpcyBwcm9iYWJseSBqdXN0IHJlc291cmNlIHdhc3RpbmcuCisKK0lmIHlvdXIgY29udHJvbGxlciBkb2VzIG5vdCBoYXZlIE5WUkFNIG9yIGlmIGl0IGlzIG1hbmFnZWQgYnkgdGhlIFNETVMgCitCSU9TL1NFVFVQLCB5b3UgY2FuIGNvbmZpZ3VyZSB0YWdnZWQgcXVldWVpbmcgZmVhdHVyZSBhbmQgZGV2aWNlIHF1ZXVlIAorZGVwdGhzIGZyb20gdGhlIGJvb3QgY29tbWFuZC1saW5lLiBGb3IgZXhhbXBsZToKKworICBuY3I1M2M4eHg9dGFnczo0L3QydDNxMTUtdDRxNy90MXUwcTMyCisKK3dpbGwgc2V0IHRhZ2dlZCBjb21tYW5kcyBxdWV1ZSBkZXB0aHMgYXMgZm9sbG93OgorCistIHRhcmdldCAyICBhbGwgbHVucyAgb24gY29udHJvbGxlciAwIC0tPiAxNQorLSB0YXJnZXQgMyAgYWxsIGx1bnMgIG9uIGNvbnRyb2xsZXIgMCAtLT4gMTUKKy0gdGFyZ2V0IDQgIGFsbCBsdW5zICBvbiBjb250cm9sbGVyIDAgLS0+ICA3CistIHRhcmdldCAxICBsdW4gMCAgICAgb24gY29udHJvbGxlciAxIC0tPiAzMgorLSBhbGwgb3RoZXIgdGFyZ2V0L2x1biAgICAgICAgICAgICAgICAtLT4gIDQKKworSW4gc29tZSBzcGVjaWFsIGNvbmRpdGlvbnMsIHNvbWUgU0NTSSBkaXNrIGZpcm13YXJlcyBtYXkgcmV0dXJuIGEKK1FVRVVFIEZVTEwgc3RhdHVzIGZvciBhIFNDU0kgY29tbWFuZC4gVGhpcyBiZWhhdmlvdXIgaXMgbWFuYWdlZCBieSB0aGUKK2RyaXZlciB1c2luZyB0aGUgZm9sbG93aW5nIGhldXJpc3RpYzoKKworLSBFYWNoIHRpbWUgYSBRVUVVRSBGVUxMIHN0YXR1cyBpcyByZXR1cm5lZCwgdGFnZ2VkIHF1ZXVlIGRlcHRoIGlzIHJlZHVjZWQgCisgIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGRpc2Nvbm5lY3RlZCBjb21tYW5kcy4gCisKKy0gRXZlcnkgMTAwMCBzdWNjZXNzZnVsbHkgY29tcGxldGVkIFNDU0kgY29tbWFuZHMsIGlmIGFsbG93ZWQgYnkgdGhlCisgIGN1cnJlbnQgbGltaXQsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWFibGUgY29tbWFuZHMgaXMgaW5jcmVtZW50ZWQuCisKK1NpbmNlIFFVRVVFIEZVTEwgc3RhdHVzIHJlY2VwdGlvbiBhbmQgaGFuZGxpbmcgaXMgcmVzb3VyY2Ugd2FzdGluZywgdGhlIAorZHJpdmVyIG5vdGlmaWVzIGJ5IGRlZmF1bHQgdGhpcyBwcm9ibGVtIHRvIHVzZXIgYnkgaW5kaWNhdGluZyB0aGUgYWN0dWFsIAorbnVtYmVyIG9mIGNvbW1hbmRzIHVzZWQgYW5kIHRoZWlyIHN0YXR1cywgYXMgd2VsbCBhcyBpdHMgZGVjaXNpb24gb24gdGhlIAorZGV2aWNlIHF1ZXVlIGRlcHRoIGNoYW5nZS4KK1RoZSBoZXVyaXN0aWMgdXNlZCBieSB0aGUgZHJpdmVyIGluIGhhbmRsaW5nIFFVRVVFIEZVTEwgZW5zdXJlcyB0aGF0IHRoZSAKK2ltcGFjdCBvbiBwZXJmb3JtYW5jZXMgaXMgbm90IHRvbyBiYWQuIFlvdSBjYW4gZ2V0IHJpZCBvZiB0aGUgbWVzc2FnZXMgYnkgCitzZXR0aW5nIHZlcmJvc2UgbGV2ZWwgdG8gemVybywgYXMgZm9sbG93OgorCisxc3QgbWV0aG9kOiBib290IHlvdXIgc3lzdGVtIHVzaW5nICduY3I1M2M4eHg9dmVyYjowJyBvcHRpb24uCisybmQgbWV0aG9kOiBhcHBseSAic2V0dmVyYm9zZSAwIiBjb250cm9sIGNvbW1hbmQgdG8gdGhlIHByb2MgZnMgZW50cnkgCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHlvdXIgY29udHJvbGxlciBhZnRlciBib290LXVwLgorCis2LiBQYXJpdHkgY2hlY2tpbmcKKworVGhlIGRyaXZlciBzdXBwb3J0cyBTQ1NJIHBhcml0eSBjaGVja2luZyBhbmQgUENJIGJ1cyBtYXN0ZXIgcGFyaXR5CitjaGVja2luZy4gIFRoZXNlIGZlYXR1cmVzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byBlbnN1cmUgc2FmZSBkYXRhCit0cmFuc2ZlcnMuICBIb3dldmVyLCBzb21lIGZsYXdlZCBkZXZpY2VzIG9yIG1vdGhlciBib2FyZHMgd2lsbCBoYXZlCitwcm9ibGVtcyB3aXRoIHBhcml0eS4gWW91IGNhbiBkaXNhYmxlIGVpdGhlciBQQ0kgcGFyaXR5IG9yIFNDU0kgcGFyaXR5IAorY2hlY2tpbmcgYnkgZW50ZXJpbmcgYXBwcm9wcmlhdGUgb3B0aW9ucyBmcm9tIHRoZSBib290IGNvbW1hbmQgbGluZS4KKyhTZWUgMTA6IEJvb3Qgc2V0dXAgY29tbWFuZHMpLgorCis3LiBQcm9maWxpbmcgaW5mb3JtYXRpb24KKworUHJvZmlsaW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0uCitTaW5jZSBnYXRoZXJpbmcgcHJvZmlsaW5nIGluZm9ybWF0aW9uIG1heSBpbXBhY3QgcGVyZm9ybWFuY2VzLCB0aGlzIAorZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCByZXF1aXJlcyBhIGNvbXBpbGF0aW9uIGNvbmZpZ3VyYXRpb24gCitvcHRpb24gdG8gYmUgc2V0IHRvIFkuCisKK1RoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgaG9zdCBoYXMgdGhlIGZvbGxvd2luZyBwYXRobmFtZToKKworICAgICAgICAgIC9wcm9jL3Njc2kvbmNyNTNjOHh4L04gICAgIChOPTAsMSwyIC4uLi4pCisKK0dlbmVyYWxseSwgb25seSAxIGJvYXJkIGlzIHVzZWQgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgZGV2aWNlIGlzOgorICAgICAgICAgIC9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKworSG93ZXZlciwgaWYgdGhlIGRyaXZlciBoYXMgYmVlbiBtYWRlIGFzIG1vZHVsZSwgdGhlIG51bWJlciBvZiB0aGUKK2hvc3RzIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgZHJpdmVyIGlzIGxvYWRlZC4KKworSW4gb3JkZXIgdG8gZGlzcGxheSBwcm9maWxpbmcgaW5mb3JtYXRpb24sIGp1c3QgZW50ZXI6CisKKyAgICAgICAgIGNhdCAvcHJvYy9zY3NpL25jcjUzYzh4eC8wCisKK2FuZCB5b3Ugd2lsbCBnZXQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB0ZXh0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmFsIGluZm9ybWF0aW9uOgorICBDaGlwIE5DUjUzQzgxMCwgZGV2aWNlIGlkIDB4MSwgcmV2aXNpb24gaWQgMHgyCisgIElPIHBvcnQgYWRkcmVzcyAweDYwMDAsIElSUSBudW1iZXIgMTAKKyAgVXNpbmcgbWVtb3J5IG1hcHBlZCBJTyBhdCB2aXJ0dWFsIGFkZHJlc3MgMHgyODJjMDAwCisgIFN5bmNocm9ub3VzIHRyYW5zZmVyIHBlcmlvZCAyNSwgbWF4IGNvbW1hbmRzIHBlciBsdW4gNAorUHJvZmlsaW5nIGluZm9ybWF0aW9uOgorICBudW1fdHJhbnMgICAgPSAxODAxNAorICBudW1fa2J5dGVzICAgPSA2NzEzMTQKKyAgbnVtX2Rpc2MgICAgID0gMjU3NjMKKyAgbnVtX2JyZWFrICAgID0gMTY3MworICBudW1faW50ICAgICAgPSAxNjg1CisgIG51bV9mbHkgICAgICA9IDE4MDM4CisgIG1zX3NldHVwICAgICA9IDQ5NDAKKyAgbXNfZGF0YSAgICAgID0gMzY5OTQwCisgIG1zX2Rpc2MgICAgICA9IDE4MzA5MAorICBtc19wb3N0ICAgICAgPSAxMzIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlbmVyYWwgaW5mb3JtYXRpb24gaXMgZWFzeSB0byB1bmRlcnN0YW5kLiBUaGUgZGV2aWNlIElEIGFuZCB0aGUKK3JldmlzaW9uIElEIGlkZW50aWZ5IHRoZSBTQ1NJIGNoaXAgYXMgZm9sbG93czoKKworQ2hpcCAgICBEZXZpY2UgaWQgICAgIFJldmlzaW9uIElkCistLS0tICAgIC0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0KKzgxMCAgICAgICAweDEgICAgICAgICAgICA8ICAweDEwCis4MTBBICAgICAgMHgxICAgICAgICAgICAgPj0gMHgxMAorODE1ICAgICAgIDB4NAorODI1ICAgICAgIDB4MyAgICAgICAgICAgIDwgIDB4MTAKKzg2MCAgICAgICAweDYKKzgyNUEgICAgICAweDMgICAgICAgICAgICA+PSAweDEwCis4NzUgICAgICAgMHhmCis4OTUgICAgICAgMHhjCisKK1RoZSBwcm9maWxpbmcgaW5mb3JtYXRpb24gaXMgdXBkYXRlZCB1cG9uIGNvbXBsZXRpb24gb2YgU0NTSSBjb21tYW5kcy4KK0EgZGF0YSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvZWQgd2hlbiB0aGUgaG9zdCBhZGFwdGVyIGlzCithdHRhY2hlZC4gU28sIGlmIHRoZSBkcml2ZXIgaXMgYSBtb2R1bGUsIHRoZSBwcm9maWxlIGNvdW50ZXJzIGFyZQorY2xlYXJlZCBlYWNoIHRpbWUgdGhlIGRyaXZlciBpcyBsb2FkZWQuICBUaGUgImNsZWFycHJvZiIgY29tbWFuZAorYWxsb3dzIHlvdSB0byBjbGVhciB0aGVzZSBjb3VudGVycyBhdCBhbnkgdGltZS4KKworVGhlIGZvbGxvd2luZyBjb3VudGVycyBhcmUgYXZhaWxhYmxlOgorCisoIm51bSIgcHJlZml4IG1lYW5zICJudW1iZXIgb2YiLAorIm1zIiBtZWFucyBtaWxsaS1zZWNvbmRzKQorCitudW1fdHJhbnMKKwlOdW1iZXIgb2YgY29tcGxldGVkIGNvbW1hbmRzCisJRXhhbXBsZSBhYm92ZTogMTgwMTQgY29tcGxldGVkIGNvbW1hbmRzCisKK251bV9rYnl0ZXMKKwlOdW1iZXIgb2Yga2J5dGVzIHRyYW5zZmVycmVkCisJRXhhbXBsZSBhYm92ZTogNjcxIE1CIHRyYW5zZmVycmVkCisKK251bV9kaXNjCisJTnVtYmVyIG9mIFNDU0kgZGlzY29ubmVjdGlvbnMKKwlFeGFtcGxlIGFib3ZlOiAyNTc2MyBTQ1NJIGRpc2Nvbm5lY3Rpb25zCisKK251bV9icmVhaworCW51bWJlciBvZiBzY3JpcHQgaW50ZXJydXB0aW9ucyAocGhhc2UgbWlzbWF0Y2gpCisJRXhhbXBsZSBhYm92ZTogMTY3MyBzY3JpcHQgaW50ZXJydXB0aW9ucworCitudW1faW50CisJTnVtYmVyIG9mIGludGVycnVwdHMgb3RoZXIgdGhhbiAib24gdGhlIGZseSIKKwlFeGFtcGxlIGFib3ZlOiAxNjg1IGludGVycnVwdGlvbnMgbm90ICJvbiB0aGUgZmx5IgorCitudW1fZmx5CisJTnVtYmVyIG9mIGludGVycnVwdHMgIm9uIHRoZSBmbHkiCisJRXhhbXBsZSBhYm92ZTogMTgwMzggaW50ZXJydXB0aW9ucyAib24gdGhlIGZseSIKKworbXNfc2V0dXAKKwlFbGFwc2VkIHRpbWUgZm9yIFNDU0kgY29tbWFuZHMgc2V0dXBzCisJRXhhbXBsZSBhYm92ZTogNC45NCBzZWNvbmRzCisKK21zX2RhdGEKKwlFbGFwc2VkIHRpbWUgZm9yIGRhdGEgdHJhbnNmZXJzCisJRXhhbXBsZSBhYm92ZTogMzY5Ljk0IHNlY29uZHMgc3BlbnQgZm9yIGRhdGEgdHJhbnNmZXIKKworbXNfZGlzYworCUVsYXBzZWQgdGltZSBmb3IgU0NTSSBkaXNjb25uZWN0aW9ucworCUV4YW1wbGUgYWJvdmU6IDE4My4wOSBzZWNvbmRzIHNwZW50IGRpc2Nvbm5lY3RlZAorCittc19wb3N0CisJRWxhcHNlZCB0aW1lIGZvciBjb21tYW5kIHBvc3QgcHJvY2Vzc2luZworCSh0aW1lIGZyb20gU0NTSSBzdGF0dXMgZ2V0IHRvIGNvbW1hbmQgY29tcGxldGlvbiBjYWxsKQorCUV4YW1wbGUgYWJvdmU6IDEuMzIgc2Vjb25kcyBzcGVudCBmb3IgcG9zdCBwcm9jZXNzaW5nCisKK0R1ZSB0byB0aGUgMS8xMDAgc2Vjb25kIHRpY2sgb2YgdGhlIHN5c3RlbSBjbG9jaywgIm1zX3Bvc3QiIHRpbWUgbWF5CitiZSB3cm9uZy4KKworSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdlIGdvdCAxODAzOCBpbnRlcnJ1cHRzICJvbiB0aGUgZmx5IiBhbmQgb25seQorMTY3MyBzY3JpcHQgYnJlYWtzIGdlbmVyYWxseSBkdWUgdG8gZGlzY29ubmVjdGlvbnMgaW5zaWRlIGEgc2VnbWVudCAKK29mIHRoZSBzY2F0dGVyIGxpc3QuCisKKworOC4gQ29udHJvbCBjb21tYW5kcworCitDb250cm9sIGNvbW1hbmRzIGNhbiBiZSBzZW50IHRvIHRoZSBkcml2ZXIgd2l0aCB3cml0ZSBvcGVyYXRpb25zIHRvCit0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtLiBUaGUgZ2VuZXJpYyBjb21tYW5kIHN5bnRheCBpcyB0aGUKK2ZvbGxvd2luZzoKKworICAgICAgZWNobyAiPHZlcmI+IDxwYXJhbWV0ZXJzPiIgPi9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKyAgICAgIChhc3N1bWVzIGNvbnRyb2xsZXIgbnVtYmVyIGlzIDApCisKK1VzaW5nICJhbGwiIGZvciAiPHRhcmdldD4iIHBhcmFtZXRlciB3aXRoIHRoZSBjb21tYW5kcyBiZWxvdyB3aWxsCithcHBseSB0byBhbGwgdGFyZ2V0cyBvZiB0aGUgU0NTSSBjaGFpbiAoZXhjZXB0IHRoZSBjb250cm9sbGVyKS4KKworQXZhaWxhYmxlIGNvbW1hbmRzOgorCis4LjEgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kIGZhY3RvcgorCisgICAgc2V0c3luYyA8dGFyZ2V0PiA8cGVyaW9kIGZhY3Rvcj4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIHBlcmlvZDogICAgbWluaW11bSBzeW5jaHJvbm91cyBwZXJpb2QuCisgICAgICAgICAgICAgICBNYXhpbXVtIHNwZWVkID0gMTAwMC8oNCpwZXJpb2QgZmFjdG9yKSBleGNlcHQgZm9yIHNwZWNpYWwKKyAgICAgICAgICAgICAgIGNhc2VzIGJlbG93LgorCisgICAgU3BlY2lmeSBhIHBlcmlvZCBvZiAyNTUsIHRvIGZvcmNlIGFzeW5jaHJvbm91cyB0cmFuc2ZlciBtb2RlLgorCisgICAgICAxMCBtZWFucyAyNSBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMSBtZWFucyAzMCBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMiBtZWFucyA1MCBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisKKzguMiBTZXQgd2lkZSBzaXplCisKKyAgICBzZXR3aWRlIDx0YXJnZXQ+IDxzaXplPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgc2l6ZTogICAgICAwPTggYml0cywgMT0xNmJpdHMKKworOC4zIFNldCBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworIAorICAgIHNldHRhZ3MgPHRhcmdldD4gPHRhZ3M+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICB0YWdzOiAgICAgIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworICAgICAgICAgICAgICAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFNDU0lfTkNSX01BWF9UQUdTIChkZWZhdWx0OiA4KQorCis4LjQgU2V0IG9yZGVyIHR5cGUgZm9yIHRhZ2dlZCBjb21tYW5kCisKKyAgICBzZXRvcmRlciA8b3JkZXI+CisKKyAgICBvcmRlcjogICAgIDMgcG9zc2libGUgdmFsdWVzOgorICAgICAgICAgICAgICAgc2ltcGxlOiB1c2UgU0lNUExFIFRBRyBmb3IgYWxsIG9wZXJhdGlvbnMgKHJlYWQgYW5kIHdyaXRlKQorICAgICAgICAgICAgICAgb3JkZXJlZDogdXNlIE9SREVSRUQgVEFHIGZvciBhbGwgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgZGVmYXVsdDogdXNlIGRlZmF1bHQgdGFnIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBTSU1QTEUgIFRBRyBmb3IgcmVhZCAgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgT1JERVJFRCBUQUcgZm9yIHdyaXRlIG9wZXJhdGlvbnMKKworCis4LjUgU2V0IGRlYnVnIG1vZGUKKworICAgIHNldGRlYnVnIDxsaXN0IG9mIGRlYnVnIGZsYWdzPgorCisgICAgQXZhaWxhYmxlIGRlYnVnIGZsYWdzOgorICAgICAgICBhbGxvYzogICBwcmludCBpbmZvIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9ucyAoY2NiLCBsY2IpCisgICAgICAgIHF1ZXVlOiAgIHByaW50IGluZm8gYWJvdXQgaW5zZXJ0aW9ucyBpbnRvIHRoZSBjb21tYW5kIHN0YXJ0IHF1ZXVlCisgICAgICAgIHJlc3VsdDogIHByaW50IHNlbnNlIGRhdGEgb24gQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cworICAgICAgICBzY2F0dGVyOiBwcmludCBpbmZvIGFib3V0IHRoZSBzY2F0dGVyIHByb2Nlc3MKKyAgICAgICAgc2NyaXB0czogcHJpbnQgaW5mbyBhYm91dCB0aGUgc2NyaXB0IGJpbmRpbmcgcHJvY2VzcworCXRpbnk6ICAgIHByaW50IG1pbmltYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uCisJdGltaW5nOiAgcHJpbnQgdGltaW5nIGluZm9ybWF0aW9uIG9mIHRoZSBOQ1IgY2hpcAorCW5lZ286ICAgIHByaW50IGluZm9ybWF0aW9uIGFib3V0IFNDU0kgbmVnb3RpYXRpb25zCisJcGhhc2U6ICAgcHJpbnQgaW5mb3JtYXRpb24gb24gc2NyaXB0IGludGVycnVwdGlvbnMKKworICAgIFVzZSAic2V0ZGVidWciIHdpdGggbm8gYXJndW1lbnQgdG8gcmVzZXQgZGVidWcgZmxhZ3MuCisKKworOC42IENsZWFyIHByb2ZpbGUgY291bnRlcnMKKworICAgIGNsZWFycHJvZgorCisgICAgVGhlIHByb2ZpbGUgY291bnRlcnMgYXJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIHRoZSBhbW91bnQgb2YKKyAgICBkYXRhIHRyYW5zZmVycmVkIHJlYWNoZXMgMTAwMCBHQiBpbiBvcmRlciB0byBhdm9pZCBvdmVyZmxvdy4KKyAgICBUaGUgImNsZWFycHJvZiIgY29tbWFuZCBhbGxvd3MgeW91IHRvIGNsZWFyIHRoZXNlIGNvdW50ZXJzIGF0IGFueSB0aW1lLgorCisKKzguNyBTZXQgZmxhZyAobm9fZGlzYykKKyAKKyAgICBzZXRmbGFnIDx0YXJnZXQ+IDxmbGFnPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisKKyAgICBGb3IgdGhlIG1vbWVudCwgb25seSBvbmUgZmxhZyBpcyBhdmFpbGFibGU6CisKKyAgICAgICAgbm9fZGlzYzogICBub3QgYWxsb3cgdGFyZ2V0IHRvIGRpc2Nvbm5lY3QuCisKKyAgICBEbyBub3Qgc3BlY2lmeSBhbnkgZmxhZyBpbiBvcmRlciB0byByZXNldCB0aGUgZmxhZy4gRm9yIGV4YW1wbGU6CisgICAgLSBzZXRmbGFnIDQKKyAgICAgIHdpbGwgcmVzZXQgbm9fZGlzYyBmbGFnIGZvciB0YXJnZXQgNCwgc28gd2lsbCBhbGxvdyBpdCBkaXNjb25uZWN0aW9ucy4KKyAgICAtIHNldGZsYWcgYWxsCisgICAgICB3aWxsIGFsbG93IGRpc2Nvbm5lY3Rpb24gZm9yIGFsbCBkZXZpY2VzIG9uIHRoZSBTQ1NJIGJ1cy4KKworCis4LjggU2V0IHZlcmJvc2UgbGV2ZWwKKworICAgIHNldHZlcmJvc2UgI2xldmVsCisKKyAgICBUaGUgZHJpdmVyIGRlZmF1bHQgdmVyYm9zZSBsZXZlbCBpcyAxLiBUaGlzIGNvbW1hbmQgYWxsb3dzIHRvIGNoYW5nZSAKKyAgICB0aCBkcml2ZXIgdmVyYm9zZSBsZXZlbCBhZnRlciBib290LXVwLgorCis4LjkgUmVzZXQgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKworICAgIHJlc2V0ZGV2IDx0YXJnZXQ+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIHNlbmQgYSBCVVMgREVWSUNFIFJFU0VUIG1lc3NhZ2UgdG8gdGhlIHRhcmdldC4KKyAgICAoT25seSBzdXBwb3J0ZWQgYnkgdGhlIFNZTTUzQzhYWCBkcml2ZXIgYW5kIHByb3ZpZGVkIGZvciB0ZXN0IHB1cnBvc2UpCisKKzguMTAgQWJvcnQgYWxsIHRhc2tzIG9mIGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0CisKKyAgICBjbGVhcmRldiA8dGFyZ2V0PgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGEgQUJPUlQgbWVzc2FnZSB0byBhbGwgdGhlIGxvZ2ljYWwgdW5pdHMgCisgICAgb2YgdGhlIHRhcmdldC4KKyAgICAoT25seSBzdXBwb3J0ZWQgYnkgdGhlIFNZTTUzQzhYWCBkcml2ZXIgYW5kIHByb3ZpZGVkIGZvciB0ZXN0IHB1cnBvc2UpCisKKworOS4gQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisKK0lmIHRoZSBmaXJtd2FyZSBvZiBhbGwgeW91ciBkZXZpY2VzIGlzIHBlcmZlY3QgZW5vdWdoLCBhbGwgdGhlCitmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBjYW4gYmUgZW5hYmxlZCBhdCBzdGFydC11cC4gIEhvd2V2ZXIsCitpZiBvbmx5IG9uZSBoYXMgYSBmbGF3IGZvciBzb21lIFNDU0kgZmVhdHVyZSwgeW91IGNhbiBkaXNhYmxlIHRoZQorc3VwcG9ydCBieSB0aGUgZHJpdmVyIG9mIHRoaXMgZmVhdHVyZSBhdCBsaW51eCBzdGFydC11cCBhbmQgZW5hYmxlCit0aGlzIGZlYXR1cmUgYWZ0ZXIgYm9vdC11cCBvbmx5IGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBpdCBzYWZlbHkuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9QUk9GSUxFX1NVUFBPUlQgIChkZWZhdWx0IGFuc3dlcjogbikKKyAgICBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBmb3IgcHJvZmlsaW5nIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmVkIAorICAgIGFuZCBwcmludGVkIG91dCB0aHJvdWdoIHRoZSBwcm9jIGZpbGUgc3lzdGVtLiBUaGlzIGZlYXR1cmVzIG1heSAKKyAgICBpbXBhY3QgcGVyZm9ybWFuY2VzLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfSU9NQVBQRUQgICAgICAgKGRlZmF1bHQgYW5zd2VyOiBuKQorICAgIEFuc3dlciAieSIgaWYgeW91IHN1c3BlY3QgeW91ciBtb3RoZXIgYm9hcmQgdG8gbm90IGFsbG93IG1lbW9yeSBtYXBwZWQgSS9PLgorICAgIE1heSBzbG93IGRvd24gcGVyZm9ybWFuY2UgYSBsaXR0bGUuICBUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCBieQorICAgIExpbnV4L1BQQyBhbmQgaXMgdXNlZCBubyBtYXR0ZXIgd2hhdCB5b3Ugc2VsZWN0IGhlcmUuICBMaW51eC9QUEMKKyAgICBzdWZmZXJzIG5vIHBlcmZvcm1hbmNlIGxvc3Mgd2l0aCB0aGlzIG9wdGlvbiBzaW5jZSBhbGwgSU8gaXMgbWVtb3J5CisgICAgbWFwcGVkIGFueXdheS4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX0RFRkFVTFRfVEFHUyAgICAoZGVmYXVsdCBhbnN3ZXI6IDgpCisgICAgRGVmYXVsdCB0YWdnZWQgY29tbWFuZCBxdWV1ZSBkZXB0aC4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX01BWF9UQUdTICAgICAgICAgKGRlZmF1bHQgYW5zd2VyOiA4KQorICAgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzIAorICAgIHRoYXQgY2FuIGJlIHF1ZXVlZCB0byBhIGRldmljZS4gVGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIDMyLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQyAgICAgICAgICAgIChkZWZhdWx0IGFuc3dlcjogNSkKKyAgICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGZyZXF1ZW5jeSBpbiBNSHogdGhlIGRyaXZlciAKKyAgICB3aWxsIHVzZSBhdCBib290IHRpbWUgZm9yIHN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXIgbmVnb3RpYXRpb25zLgorICAgIFRoaXMgZnJlcXVlbmN5IGNhbiBiZSBjaGFuZ2VkIGxhdGVyIHdpdGggdGhlICJzZXRzeW5jIiBjb250cm9sIGNvbW1hbmQuCisgICAgMCBtZWFucyAiYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzIi4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX0ZPUkNFX1NZTkNfTkVHTyAoZGVmYXVsdCBhbnN3ZXI6IG4pCisgICAgRm9yY2Ugc3luY2hyb25vdXMgbmVnb3RpYXRpb24gZm9yIGFsbCBTQ1NJLTIgZGV2aWNlcy4KKyAgICBTb21lIFNDU0ktMiBkZXZpY2VzIGRvIG5vdCByZXBvcnQgdGhpcyBmZWF0dXJlIGluIGJ5dGUgNyBvZiBpbnF1aXJ5IAorICAgIHJlc3BvbnNlIGJ1dCBkbyBzdXBwb3J0IGl0IHByb3Blcmx5IChUQU1BUkFDSyBzY2FubmVycyBmb3IgZXhhbXBsZSkuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9OT19ESVNDT05ORUNUICAgKGRlZmF1bHQgYW5kIG9ubHkgcmVhc29uYWJsZSBhbnN3ZXI6IG4pCisgICAgSWYgeW91IHN1c3BlY3QgYSBkZXZpY2Ugb2YgeW91cnMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBkaXNjb25uZWN0aW9ucywKKyAgICB5b3UgY2FuIGFuc3dlciAieSIuIFRoZW4sIGFsbCBTQ1NJIGRldmljZXMgd2lsbCBuZXZlciBkaXNjb25uZWN0IHRoZSBidXMgCisgICAgZXZlbiB3aGlsZSBwZXJmb3JtaW5nIGxvbmcgU0NTSSBvcGVyYXRpb25zLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lNQklPU19DT01QQVQKKyAgICBHZW51aW5lIFNZTUJJT1MgYm9hcmRzIHVzZSBHUElPMCBpbiBvdXRwdXQgZm9yIGNvbnRyb2xsZXIgTEVEIGFuZCBHUElPMyAKKyAgICBiaXQgYXMgYSBmbGFnIGluZGljYXRpbmcgc2luZ2xlZC1lbmRlZC9kaWZmZXJlbnRpYWwgaW50ZXJmYWNlLgorICAgIElmIGFsbCB0aGUgYm9hcmRzIG9mIHlvdXIgc3lzdGVtIGFyZSBnZW51aW5lIFNZTUJJT1MgYm9hcmRzIG9yIHVzZQorICAgIEJJT1MgYW5kIGRyaXZlcnMgZnJvbSBTWU1CSU9TLCB5b3Ugd291bGQgd2FudCB0byBlbmFibGUgdGhpcyBvcHRpb24uCisgICAgVGhpcyBvcHRpb24gbXVzdCBOT1QgYmUgZW5hYmxlZCBpZiB5b3VyIHN5c3RlbSBoYXMgYXQgbGVhc3Qgb25lIDUzQzhYWCAKKyAgICBiYXNlZCBzY3NpIGJvYXJkIHdpdGggYSB2ZW5kb3Itc3BlY2lmaWMgQklPUy4KKyAgICBGb3IgZXhhbXBsZSwgVGVrcmFtIERDLTM5MC9VLCBEQy0zOTAvVyBhbmQgREMtMzkwL0Ygc2NzaSBjb250cm9sbGVycyAKKyAgICB1c2UgYSB2ZW5kb3Itc3BlY2lmaWMgQklPUyBhbmQgYXJlIGtub3duIHRvIG5vdCB1c2UgU1lNQklPUyBjb21wYXRpYmxlIAorICAgIEdQSU8gd2lyaW5nLiBTbywgdGhpcyBvcHRpb24gbXVzdCBub3QgYmUgZW5hYmxlZCBpZiB5b3VyIHN5c3RlbSBoYXMgCisgICAgc3VjaCBhIGJvYXJkIGluc3RhbGxlZC4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX05WUkFNX0RFVEVDVAorICAgIEVuYWJsZSBzdXBwb3J0IGZvciByZWFkaW5nIHRoZSBzZXJpYWwgTlZSQU0gZGF0YSBvbiBTeW1iaW9zIGFuZAorICAgIHNvbWUgU3ltYmlvcyBjb21wYXRpYmxlIGNhcmRzLCBhbmQgVGVrcmFtIERDMzkwVy9VL0YgY2FyZHMuIFVzZWZ1bCBmb3IKKyAgICBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBTeW1iaW9zIGNvbXBhdGlibGUgY29udHJvbGxlciB3aGVyZSBhdCBsZWFzdAorICAgIG9uZSBoYXMgYSBzZXJpYWwgTlZSQU0sIG9yIGZvciBhIHN5c3RlbSB3aXRoIGEgbWl4dHVyZSBvZiBTeW1iaW9zIGFuZAorICAgIFRla3JhbSBjYXJkcy4gRW5hYmxlcyBzZXR0aW5nIHRoZSBib290IG9yZGVyIG9mIGhvc3QgYWRhcHRvcnMKKyAgICB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBvcmRlciBvciAicmV2ZXJzZSBwcm9iZSIgb3JkZXIuIAorICAgIEFsc28gZW5hYmxlcyBTeW1iaW9zIGFuZCBUZWtyYW0gY2FyZHMgdG8gYmUgZGlzdGluZ3Vpc2hlZCBzbworICAgIENPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU1CSU9TX0NPTVBBVCBtYXkgYmUgc2V0IGluIGEgc3lzdGVtIHdpdGggYQorICAgIG1peHR1cmUgb2YgU3ltYmlvcyBhbmQgVGVrcmFtIGNhcmRzIHNvIHRoZSBTeW1iaW9zIGNhcmRzIGNhbiBtYWtlIHVzZSBvZgorICAgIHRoZSBmdWxsIHJhbmdlIG9mIFN5bWJpb3MgZmVhdHVyZXMsIGRpZmZlcmVudGlhbCwgbGVkIHBpbiwgd2l0aG91dAorICAgIGNhdXNpbmcgcHJvYmxlbXMgZm9yIHRoZSBUZWtyYW0gY2FyZChzKS4KKworMTAuIEJvb3Qgc2V0dXAgY29tbWFuZHMKKworMTAuMSBTeW50YXgKKworU2V0dXAgY29tbWFuZHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGVpdGhlciBhdCBib290IHRpbWUgb3IgYXMgYSAKK3N0cmluZyB2YXJpYWJsZSB1c2luZyAnaW5zbW9kJy4KKworQSBib290IHNldHVwIGNvbW1hbmQgZm9yIHRoZSBuY3I1M2M4eHggKHN5bTUzYzh4eCkgZHJpdmVyIGJlZ2lucyB3aXRoIHRoZSAKK2RyaXZlciBuYW1lICJuY3I1M2M4eHg9IihzeW01M2M4eHgpLiBUaGUga2VybmVsIHN5bnRheCBwYXJzZXIgdGhlbiBleHBlY3RzIAorYW4gb3B0aW9ubmFsIGxpc3Qgb2YgaW50ZWdlcnMgc2VwYXJhdGVkIHdpdGggY29tbWEgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgCitsaXN0IG9mICBjb21tYS1zZXBhcmF0ZWQgc3RyaW5ncy4gRXhhbXBsZSBvZiBib290IHNldHVwIGNvbW1hbmQgdW5kZXIgbGlsbyAKK3Byb21wdDoKKworbGlsbzogbGludXggcm9vdD0vZGV2L2hkYTIgbmNyNTNjOHh4PXRhZ3M6NCxzeW5jOjEwLGRlYnVnOjB4MjAwCisKKy0gZW5hYmxlIHRhZ2dlZCBjb21tYW5kcywgdXAgdG8gNCB0YWdnZWQgY29tbWFuZHMgcXVldWVkLgorLSBzZXQgc3luY2hyb25vdXMgbmVnb3RpYXRpb24gc3BlZWQgdG8gMTAgTWVnYS10cmFuc2ZlcnMgLyBzZWNvbmQuCistIHNldCBERUJVR19ORUdPIGZsYWcuCisKK1NpbmNlIGNvbW1hIHNlZW1zIG5vdCB0byBiZSBhbGxvd2VkIHdoZW4gZGVmaW5pbmcgYSBzdHJpbmcgdmFyaWFibGUgdXNpbmcgIAorJ2luc21vZCcsIHRoZSBkcml2ZXIgYWxzbyBhY2NlcHRzIDxzcGFjZT4gYXMgb3B0aW9uIHNlcGFyYXRvci4gCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBpbnN0YWxsIGRyaXZlciBtb2R1bGUgd2l0aCB0aGUgc2FtZSBvcHRpb25zIGFzIAorYWJvdmUuCisKKyAgICBpbnNtb2QgbmNyNTNjOHh4Lm8gbmNyNTNjOHh4PSJ0YWdzOjQgc3luYzoxMCBkZWJ1ZzoweDIwMCIKKworRm9yIHRoZSBtb21lbnQsIHRoZSBpbnRlZ2VyIGxpc3Qgb2YgYXJndW1lbnRzIGlzIGRpc2NhcmRlZCBieSB0aGUgZHJpdmVyLiAKK0l0IHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIGluIG9yZGVyIHRvIGFsbG93IGEgcGVyIGNvbnRyb2xsZXIgc2V0dXAuCisKK0VhY2ggc3RyaW5nIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkIGFzICJrZXl3b3JkOnZhbHVlIi4gT25seSBsb3dlci1jYXNlIAorY2hhcmFjdGVycyBhbmQgZGlnaXRzIGFyZSBhbGxvd2VkLgorCitJbiBhIHN5c3RlbSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIDUzQzh4eCBhZGFwdGVycyBpbnNtb2Qgd2lsbCBpbnN0YWxsIHRoZSAKK3NwZWNpZmllZCBkcml2ZXIgb24gZWFjaCBhZGFwdGVyLiBUbyBleGNsdWRlIGEgY2hpcCB1c2UgdGhlICdleGNsJyBrZXl3b3JkLgorCitUaGUgc2VxdWVuY2Ugb2YgY29tbWFuZHMsIAorCisgICAgaW5zbW9kIHN5bTUzYzh4eCBzeW01M2M4eHg9ZXhjbDoweDE0MDAKKyAgICBpbnNtb2QgbmNyNTNjOHh4CisKK2luc3RhbGxzIHRoZSBzeW01M2M4eHggZHJpdmVyIG9uIGFsbCBhZGFwdGVycyBleGNlcHQgdGhlIG9uZSBhdCBJTyBwb3J0IAorYWRkcmVzcyAweDE0MDAgYW5kIHRoZW4gaW5zdGFsbHMgdGhlIG5jcjUzYzh4eCBkcml2ZXIgdG8gdGhlIGFkYXB0ZXIgYXQgSU8gCitwb3J0IGFkZHJlc3MgMHgxNDAwLgorCisKKzEwLjIgQXZhaWxhYmxlIGFyZ3VtZW50cworCisxMC4yLjEgIE1hc3RlciBwYXJpdHkgY2hlY2tpbmcKKyAgICAgICAgbXBhcjp5ICAgICBlbmFibGVkCisgICAgICAgIG1wYXI6biAgICAgZGlzYWJsZWQKKworMTAuMi4yICBTY3NpIHBhcml0eSBjaGVja2luZworICAgICAgICBzcGFyOnkgICAgIGVuYWJsZWQKKyAgICAgICAgc3BhcjpuICAgICBkaXNhYmxlZAorCisxMC4yLjMgIFNjc2kgZGlzY29ubmVjdGlvbnMKKyAgICAgICAgZGlzYzp5ICAgICBlbmFibGVkCisgICAgICAgIGRpc2M6biAgICAgZGlzYWJsZWQKKyAKKzEwLjIuNCAgU3BlY2lhbCBmZWF0dXJlcworICAgT25seSBhcHBseSB0byA4MTBBLCA4MjVBLCA4NjAsIDg3NSBhbmQgODk1IGNvbnRyb2xsZXJzLgorICAgSGF2ZSBubyBlZmZlY3Qgd2l0aCBvdGhlciBvbmVzLgorICAgICAgICBzcGVjZjp5ICAgIChvciAxKSBlbmFibGVkCisgICAgICAgIHNwZWNmOm4gICAgKG9yIDApIGRpc2FibGVkCisgICAgICAgIHNwZWNmOjMgICAgICAgICAgIGVuYWJsZWQgZXhjZXB0IE1lbW9yeSBXcml0ZSBBbmQgSW52YWxpZGF0ZQorICAgVGhlIGRlZmF1bHQgZHJpdmVyIHNldHVwIGlzICdzcGVjZjozJy4gQXMgYSBjb25zZXF1ZW5jZSwgb3B0aW9uICdzcGVjZjp5JyAKKyAgIG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSBib290IHNldHVwIGNvbW1hbmQgdG8gZW5hYmxlIE1lbW9yeSBXcml0ZSBBbmQgCisgICBJbnZhbGlkYXRlLgorCisxMC4yLjUgIFVsdHJhIFNDU0kgc3VwcG9ydAorICAgT25seSBhcHBseSB0byA4NjAsIDg3NSwgODk1LCA4OTVhLCA4OTYsIDEwMTAgYW5kIDEwMTBfNjYgY29udHJvbGxlcnMuCisgICBIYXZlIG5vIGVmZmVjdCB3aXRoIG90aGVyIG9uZXMuCisgICAgICAgIHVsdHJhOm4gICAgQWxsIHVsdHJhIHNwZWVkcyBlbmFibGVkCisgICAgICAgIHVsdHJhOjIgICAgVWx0cmEyIGVuYWJsZWQKKyAgICAgICAgdWx0cmE6MSAgICBVbHRyYSBlbmFibGVkCisgICAgICAgIHVsdHJhOjAgICAgVWx0cmEgc3BlZWRzIGRpc2FibGVkCisKKzEwLjIuNiAgRGVmYXVsdCBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzCisgICAgICAgIHRhZ3M6MCAgICAgKG9yIHRhZ3M6MSApIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZGlzYWJsZWQKKyAgICAgICAgdGFnczojdGFncyAoI3RhZ3MgID4gMSkgdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBlbmFibGVkCisgICN0YWdzIHdpbGwgYmUgdHJ1bmNhdGVkIHRvIHRoZSBtYXggcXVldWVkIGNvbW1hbmRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLgorICBUaGlzIG9wdGlvbiBhbHNvIGFsbG93cyB0byBzcGVjaWZ5IGEgY29tbWFuZCBxdWV1ZSBkZXB0aCBmb3IgZWFjaCBkZXZpY2UgCisgIHRoYXQgc3VwcG9ydCB0YWdnZWQgY29tbWFuZCBxdWV1ZWluZy4KKyAgRXhhbXBsZToKKyAgICAgIG5jcjUzYzh4eD10YWdzOjEwL3QydDNxMTYtdDVxMjQvdDF1MnEzMgorICAgICAgICAgICAgICAgd2lsbCBzZXQgZGV2aWNlcyBxdWV1ZSBkZXB0aCBhcyBmb2xsb3c6CisgICAgICAtIGNvbnRyb2xsZXIgIzAgdGFyZ2V0ICMyIGFuZCB0YXJnZXQgIzMgICAgICAgICAgICAgICAgICAtPiAxNiBjb21tYW5kcywKKyAgICAgIC0gY29udHJvbGxlciAjMCB0YXJnZXQgIzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IDI0IGNvbW1hbmRzLAorICAgICAgLSBjb250cm9sbGVyICMxIHRhcmdldCAjMSBsb2dpY2FsIHVuaXQgIzIgICAgICAgICAgICAgICAgLT4gMzIgY29tbWFuZHMsCisgICAgICAtIGFsbCBvdGhlciBsb2dpY2FsIHVuaXRzIChhbGwgdGFyZ2V0cywgYWxsIGNvbnRyb2xsZXJzKSAtPiAxMCBjb21tYW5kcy4KKworMTAuMi43ICBEZWZhdWx0IHN5bmNocm9ub3VzIHBlcmlvZCBmYWN0b3IKKyAgICAgICAgc3luYzoyNTUgICAgIGRpc2FibGVkIChhc3luY2hyb25vdXMgdHJhbnNmZXIgbW9kZSkKKyAgICAgICAgc3luYzojZmFjdG9yCisgICNmYWN0b3IgPSAxMCAgICAgVWx0cmEtMiBTQ1NJIDQwIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPSAxMSAgICAgVWx0cmEtMiBTQ1NJIDMzIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPCAyNSAgICAgVWx0cmEgICBTQ1NJIDIwIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPCA1MCAgICAgRmFzdCAgICBTQ1NJLTIKKworICBJbiBhbGwgY2FzZXMsIHRoZSBkcml2ZXIgd2lsbCB1c2UgdGhlIG1pbmltdW0gdHJhbnNmZXIgcGVyaW9kIHN1cHBvcnRlZCBieSAKKyAgY29udHJvbGxlcnMgYWNjb3JkaW5nIHRvIE5DUjUzQzhYWCBjaGlwIHR5cGUuCisKKzEwLjIuOCAgTmVnb3RpYXRlIHN5bmNocm9ub3VzIHdpdGggYWxsIGRldmljZXMKKyAgICAgICAgKGZvcmNlIHN5bmMgbmVnbykKKyAgICAgICAgZnNuOnkgICAgICBlbmFibGVkCisgICAgICAgIGZzbjpuICAgICAgZGlzYWJsZWQKKworMTAuMi45ICBWZXJib3NpdHkgbGV2ZWwKKyAgICAgICAgdmVyYjowICAgICBtaW5pbWFsCisgICAgICAgIHZlcmI6MSAgICAgbm9ybWFsCisgICAgICAgIHZlcmI6MiAgICAgdG9vIG11Y2gKKworMTAuMi4xMCBEZWJ1ZyBtb2RlCisgICAgICAgIGRlYnVnOjAJIGNsZWFyIGRlYnVnIGZsYWdzCisgICAgICAgIGRlYnVnOiN4ICAgc2V0IGRlYnVnIGZsYWdzCisgICN4IGlzIGFuIGludGVnZXIgdmFsdWUgY29tYmluaW5nIHRoZSBmb2xsb3dpbmcgcG93ZXItb2YtMiB2YWx1ZXM6CisgIERFQlVHX0FMTE9DICAgICAgIDB4MQorICBERUJVR19QSEFTRSAgICAgICAweDIKKyAgREVCVUdfUE9MTCAgICAgICAgMHg0CisgIERFQlVHX1FVRVVFICAgICAgIDB4OAorICBERUJVR19SRVNVTFQgICAgIDB4MTAKKyAgREVCVUdfU0NBVFRFUiAgICAweDIwCisgIERFQlVHX1NDUklQVCAgICAgMHg0MAorICBERUJVR19USU5ZICAgICAgIDB4ODAKKyAgREVCVUdfVElNSU5HICAgIDB4MTAwCisgIERFQlVHX05FR08gICAgICAweDIwMAorICBERUJVR19UQUdTICAgICAgMHg0MDAKKyAgREVCVUdfRlJFRVpFICAgIDB4ODAwCisgIERFQlVHX1JFU1RBUlQgIDB4MTAwMAorCisgIFlvdSBjYW4gcGxheSBzYWZlbHkgd2l0aCBERUJVR19ORUdPLiBIb3dldmVyLCBzb21lIG9mIHRoZXNlIGZsYWdzIG1heSAKKyAgZ2VuZXJhdGUgYnVuY2hlcyBvZiBzeXNsb2cgbWVzc2FnZXMuIAorCisxMC4yLjExIEJ1cnN0IG1heAorICAgICAgICBidXJzdDowICAgIGJ1cnN0IGRpc2FibGVkCisgICAgICAgIGJ1cnN0OjI1NSAgZ2V0IGJ1cnN0IGxlbmd0aCBmcm9tIGluaXRpYWwgSU8gcmVnaXN0ZXIgc2V0dGluZ3MuCisgICAgICAgIGJ1cnN0OiN4ICAgYnVyc3QgZW5hYmxlZCAoMTw8I3ggYnVyc3QgdHJhbnNmZXJzIG1heCkKKyAgI3ggaXMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCBpcyBsb2cgYmFzZSAyIG9mIHRoZSBidXJzdCB0cmFuc2ZlcnMgbWF4LgorICBUaGUgTkNSNTNDODc1IGFuZCBOQ1I1M0M4MjVBIHN1cHBvcnQgdXAgdG8gMTI4IGJ1cnN0IHRyYW5zZmVycyAoI3ggPSA3KS4KKyAgT3RoZXIgY2hpcHMgb25seSBzdXBwb3J0IHVwIHRvIDE2ICgjeCA9IDQpLgorICBUaGlzIGlzIGEgbWF4aW11bSB2YWx1ZS4gVGhlIGRyaXZlciBzZXQgdGhlIGJ1cnN0IGxlbmd0aCBhY2NvcmRpbmcgdG8gY2hpcCAKKyAgYW5kIHJldmlzaW9uIGlkcy4gQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHVzZXMgdGhlIG1heGltdW0gdmFsdWUgc3VwcG9ydGVkIAorICBieSB0aGUgY2hpcC4KKworMTAuMi4xMiBMRUQgc3VwcG9ydAorICAgICAgICBsZWQ6MSAgICAgIGVuYWJsZSAgTEVEIHN1cHBvcnQKKyAgICAgICAgbGVkOjAgICAgICBkaXNhYmxlIExFRCBzdXBwb3J0CisgIERvbm5vdCBlbmFibGUgTEVEIHN1cHBvcnQgaWYgeW91ciBzY3NpIGJvYXJkIGRvZXMgbm90IHVzZSBTRE1TIEJJT1MuCisgIChTZWUgJ0NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycycpCisKKzEwLjIuMTMgTWF4IHdpZGUKKyAgICAgICAgd2lkZToxICAgICAgd2lkZSBzY3NpIGVuYWJsZWQKKyAgICAgICAgd2lkZTowICAgICAgd2lkZSBzY3NpIGRpc2FibGVkCisgIFNvbWUgc2NzaSBib2FyZHMgdXNlIGEgODc1ICh1bHRyYSB3aWRlKSBhbmQgb25seSBzdXBwbHkgbmFycm93IGNvbm5lY3RvcnMuCisgIElmIHlvdSBoYXZlIGNvbm5lY3RlZCBhIHdpZGUgZGV2aWNlIHdpdGggYSA1MCBwaW5zIHRvIDY4IHBpbnMgY2FibGUgCisgIGNvbnZlcnRlciwgYW55IGFjY2VwdGVkIHdpZGUgbmVnb3RpYXRpb24gd2lsbCBicmVhayBmdXJ0aGVyIGRhdGEgdHJhbnNmZXJzLgorICBJbiBzdWNoIGEgY2FzZSwgdXNpbmcgIndpZGU6MCIgaW4gdGhlIGJvb3R1cCBjb21tYW5kIHdpbGwgYmUgaGVscGZ1bGwuIAorCisxMC4yLjE0IERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgIGRpZmY6MAluZXZlciBzZXQgdXAgZGlmZiBtb2RlCisgICAgICAgIGRpZmY6MQlzZXQgdXAgZGlmZiBtb2RlIGlmIEJJT1Mgc2V0IGl0CisgICAgICAgIGRpZmY6MglhbHdheXMgc2V0IHVwIGRpZmYgbW9kZQorICAgICAgICBkaWZmOjMJc2V0IGRpZmYgbW9kZSBpZiBHUElPMyBpcyBub3Qgc2V0CisKKzEwLjIuMTUgSVJRIG1vZGUKKyAgICAgICAgaXJxbTowICAgICBhbHdheXMgb3BlbiBkcmFpbgorICAgICAgICBpcnFtOjEgICAgIHNhbWUgYXMgaW5pdGlhbCBzZXR0aW5ncyAoYXNzdW1lZCBCSU9TIHNldHRpbmdzKQorICAgICAgICBpcnFtOjIgICAgIGFsd2F5cyB0b3RlbSBwb2xlCisgICAgICAgIGlycW06MHgxMCAgZHJpdmVyIHdpbGwgbm90IHVzZSBTQV9TSElSUSBmbGFnIHdoZW4gcmVxdWVzdGluZyBpcnEKKyAgICAgICAgaXJxbToweDIwICBkcml2ZXIgd2lsbCBub3QgdXNlIFNBX0lOVEVSUlVQVCBmbGFnIHdoZW4gcmVxdWVzdGluZyBpcnEKKworICAgIChCaXRzIDB4MTAgYW5kIDB4MjAgY2FuIGJlIGNvbWJpbmVkIHdpdGggaGFyZHdhcmUgaXJxIG1vZGUgb3B0aW9uKQorCisxMC4yLjE2IFJldmVyc2UgcHJvYmUKKyAgICAgICAgcmV2cHJvYjpuICAgcHJvYmUgY2hpcCBpZHMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gaW4gdGhpcyBvcmRlcjoKKyAgICAgICAgICAgICAgICAgICAgODEwLCA4MTUsIDgyMCwgODYwLCA4NzUsIDg4NSwgODk1LCA4OTYKKyAgICAgICAgcmV2cHJvYjp5ICAgcHJvYmUgY2hpcCBpZHMgaW4gdGhlIHJldmVyc2Ugb3JkZXIuCisKKzEwLjIuMTcgRml4IHVwIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgICAgICAgIHBjaWZpeDo8b3B0aW9uIGJpdHM+CisKKyAgICBBdmFpbGFibGUgb3B0aW9uIGJpdHM6CisgICAgICAgIDB4MDogICBObyBhdHRlbXB0IHRvIGZpeCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSByZWdpc3RlcnMgdmFsdWVzLgorICAgICAgICAweDE6ICAgU2V0IFBDSSBjYWNoZS1saW5lIHNpemUgcmVnaXN0ZXIgaWYgbm90IHNldC4KKyAgICAgICAgMHgyOiAgIFNldCB3cml0ZSBhbmQgaW52YWxpZGF0ZSBiaXQgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisgICAgICAgIDB4NDogICBJbmNyZWFzZSBpZiBuZWNlc3NhcnkgUENJIGxhdGVuY3kgdGltZXIgYWNjb3JkaW5nIHRvIGJ1cnN0IG1heC4KKworICAgIFVzZSAncGNpZml4OjcnIGluIG9yZGVyIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gZml4IHVwIGFsbCBQQ0kgZmVhdHVyZXMuCisKKzEwLjIuMTggU2VyaWFsIE5WUkFNCisgICAgICAgIG52cmFtOm4gICAgIGRvIG5vdCBsb29rIGZvciBzZXJpYWwgTlZSQU0KKyAgICAgICAgbnZyYW06eSAgICAgdGVzdCBjb250cm9sbGVycyBmb3Igb25ib2FyZCBzZXJpYWwgTlZSQU0KKyAgICAgICAgKGFsdGVybmF0ZSBiaW5hcnkgZm9ybSkKKyAgICAgICAgbXZyYW09PGJpdHMgb3B0aW9ucz4KKyAgICAgICAgMHgwMSAgIGxvb2sgZm9yIE5WUkFNICAoZXF1aXZhbGVudCB0byBudnJhbT15KQorICAgICAgICAweDAyICAgaWdub3JlIE5WUkFNICJTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiIgcGFyYW1ldGVycyBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHgwNCAgIGlnbm9yZSBOVlJBTSAiV2lkZSBuZWdvdGlhdGlvbiIgIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHgwOCAgIGlnbm9yZSBOVlJBTSAiU2NhbiBhdCBib290IHRpbWUiIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHg4MCAgIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHNldCB0byBPRkYgaW4gdGhlIE5WUkFNIChzeW01M2M4eHggb25seSkKKworMTAuMi4xOSBDaGVjayBTQ1NJIEJVUyAKKyAgICAgICAgYnVzY2hrOjxvcHRpb24gYml0cz4KKworICAgIEF2YWlsYWJsZSBvcHRpb24gYml0czoKKyAgICAgICAgMHgwOiAgIE5vIGNoZWNrLgorICAgICAgICAweDE6ICAgQ2hlY2sgYW5kIGRvIG5vdCBhdHRhY2ggdGhlIGNvbnRyb2xsZXIgb24gZXJyb3IuICAKKyAgICAgICAgMHgyOiAgIENoZWNrIGFuZCBqdXN0IHdhcm4gb24gZXJyb3IuCisgICAgICAgIDB4NDogICBEaXNhYmxlIFNDU0kgYnVzIGludGVncml0eSBjaGVja2luZy4KKworMTAuMi4yMCBFeGNsdWRlIGEgaG9zdCBmcm9tIGJlaW5nIGF0dGFjaGVkCisgICAgICAgIGV4Y2w9PGlvX2FkZHJlc3M+CisKKyAgICBQcmV2ZW50IGhvc3QgYXQgYSBnaXZlbiBpbyBhZGRyZXNzIGZyb20gYmVpbmcgYXR0YWNoZWQuCisgICAgRm9yIGV4YW1wbGUgJ25jcjUzYzh4eD1leGNsOjB4YjQwMCxleGNsOjB4YzAwMCcgaW5kaWNhdGUgdG8gdGhlIAorICAgIG5jcjUzYzh4eCBkcml2ZXIgbm90IHRvIGF0dGFjaCBob3N0cyBhdCBhZGRyZXNzIDB4YjQwMCBhbmQgMHhjMDAwLgorCisxMC4yLjIxIFN1Z2dlc3QgYSBkZWZhdWx0IFNDU0kgaWQgZm9yIGhvc3RzCisgICAgICAgIGhvc3RpZDoyNTUJbm8gaWQgc3VnZ2VzdGVkLgorICAgICAgICBob3N0aWQ6I3ggICAoMCA8IHggPCA3KSB4IHN1Z2dlc3RlZCBmb3IgaG9zdHMgU0NTSSBpZC4KKworICAgIElmIGEgaG9zdCBTQ1NJIGlkIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBOVlJBTSwgdGhlIGRyaXZlciB3aWxsIGlnbm9yZSAKKyAgICBhbnkgdmFsdWUgc3VnZ2VzdGVkIGFzIGJvb3Qgb3B0aW9uLiBPdGhlcndpc2UsIGlmIGEgc3VnZ2VzdGVkIHZhbHVlIAorICAgIGRpZmZlcmVudCBmcm9tIDI1NSBoYXMgYmVlbiBzdXBwbGllZCwgaXQgd2lsbCB1c2UgaXQuIE90aGVyd2lzZSwgaXQgd2lsbCAKKyAgICB0cnkgdG8gZGVkdWNlIHRoZSB2YWx1ZSBwcmV2aW91c2x5IHNldCBpbiB0aGUgaGFyZHdhcmUgYW5kIHVzZSB2YWx1ZSAKKyAgICA3IGlmIHRoZSBoYXJkd2FyZSB2YWx1ZSBpcyB6ZXJvLgorCisxMC4yLjIyIEVuYWJsZSB1c2Ugb2YgSU1NRURJQVRFIEFSQklUUkFUSU9OCisgICAgICAgIChvbmx5IHN1cHBvcnRlZCBieSB0aGUgc3ltNTNjOHh4IGRyaXZlci4gU2VlIDEwLjcgZm9yIG1vcmUgZGV0YWlscykKKyAgICAgICAgaWFyYjowICAgIGRvIG5vdCB1c2UgdGhpcyBmZWF0dXJlLgorICAgICAgICBpYXJiOiN4ICAgdXNlIHRoaXMgZmVhdHVyZSBhY2NvcmRpbmcgdG8gYml0IGZpZWxkcyBhcyBmb2xsb3c6CisKKyAgICBiaXQgMCAoMSkgOiBlbmFibGUgSUFSQiBlYWNoIHRpbWUgdGhlIGluaXRpYXRvciBoYXMgYmVlbiByZXNlbGVjdGVkIAorICAgICAgICAgICAgICAgIHdoZW4gaXQgYXJiaXRyYXRlZCBmb3IgdGhlIFNDU0kgQlVTLgorICAgICgjeCA+PiA0KSA6IG1heGltdW0gbnVtYmVyIG9mIHN1Y2Nlc3NpdmUgc2V0dGluZ3Mgb2YgSUFSQiBpZiB0aGUgaW5pdGlhdG9yIAorICAgICAgICAgICAgICAgIHdpbiBhcmJpdHJhdGlvbiBhbmQgaXQgaGFzIG90aGVyIGNvbW1hbmRzIHRvIHNlbmQgdG8gYSBkZXZpY2UuCisKK0Jvb3QgZmFpbCBzYWZlCisgICAgc2FmZTp5CWxvYWQgdGhlIGZvbGxvd2luZyBhc3N1bWVkIGZhaWwgc2FmZSBpbml0aWFsIHNldHVwCisKKyAgbWFzdGVyIHBhcml0eQkJCWRpc2FibGVkCQltcGFyOm4KKyAgc2NzaSBwYXJpdHkJCQllbmFibGVkCQkJc3Bhcjp5CisgIGRpc2Nvbm5lY3Rpb25zCQlub3QgYWxsb3dlZAkJZGlzYzpuCisgIHNwZWNpYWwgZmVhdHVyZXMJCWRpc2FibGVkCQlzcGVjZjpuCisgIHVsdHJhIHNjc2kJCQlkaXNhYmxlZAkJdWx0cmE6bgorICBmb3JjZSBzeW5jIG5lZ290aWF0aW9uCWRpc2FibGVkCQlmc246bgorICByZXZlcnNlIHByb2JlCQkJZGlzYWJsZWQJCXJldnByb2I6bgorICBQQ0kgZml4IHVwICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCAgICAgICAgICAgICAgICBwY2lmaXg6MAorICBzZXJpYWwgTlZSQU0gICAgICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgICAgICAgICBudnJhbTp5CisgIHZlcmJvc2l0eSBsZXZlbAkJMgkJCXZlcmI6MgorICB0YWdnZWQgY29tbWFuZCBxdWV1aW5nCWRpc2FibGVkCQl0YWdzOjAKKyAgc3luY2hyb25vdXMgbmVnb3RpYXRpb24JZGlzYWJsZWQJCXN5bmM6MjU1CisgIGRlYnVnIGZsYWdzCQkJbm9uZQkJCWRlYnVnOjAKKyAgYnVyc3QgbGVuZ3RoCQkJZnJvbSBCSU9TIHNldHRpbmdzCWJ1cnN0OjI1NQorICBMRUQgc3VwcG9ydAkJCWRpc2FibGVkCQlsZWQ6MAorICB3aWRlIHN1cHBvcnQJCQlkaXNhYmxlZAkJd2lkZTowCisgIHNldHRsZSB0aW1lCQkJMTAgc2Vjb25kcwkJc2V0dGxlOjEwCisgIGRpZmZlcmVudGlhbCBzdXBwb3J0CQlmcm9tIEJJT1Mgc2V0dGluZ3MJZGlmZjoxCisgIGlycSBtb2RlCQkJZnJvbSBCSU9TIHNldHRpbmdzCWlycW06MQorICBTQ1NJIEJVUyBjaGVjawkJZG8gbm90IGF0dGFjaCBvbiBlcnJvcglidXNjaGs6MQorICBpbW1lZGlhdGUgYXJiaXRyYXRpb24JCWRpc2FibGVkCQlpYXJiOjAKKworMTAuMyBBZHZpc2VkIGJvb3Qgc2V0dXAgY29tbWFuZHMKKworSWYgdGhlIGRyaXZlciBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggZGVmYXVsdCBvcHRpb25zLCB0aGUgZXF1aXZhbGVudCAKK2Jvb3Qgc2V0dXAgaXM6CisKKyAgIG5jcjUzYzh4eD1tcGFyOnksc3Bhcjp5LGRpc2M6eSxzcGVjZjozLGZzbjpuLHVsdHJhOjIsZnNuOm4scmV2cHJvYjpuLHZlcmI6MVwKKyAgICAgICAgICAgICB0YWdzOjAsc3luYzo1MCxkZWJ1ZzowLGJ1cnN0OjcsbGVkOjAsd2lkZToxLHNldHRsZToyLGRpZmY6MCxpcnFtOjAKKworRm9yIGFuIGluc3RhbGxhdGlvbiBkaXNrZXR0ZSBvciBhIHNhZmUgYnV0IG5vdCBmYXN0IHN5c3RlbSwKK2Jvb3Qgc2V0dXAgY2FuIGJlOgorCisgICAgbmNyNTNjOHh4PXNhZmU6eSxtcGFyOnksZGlzYzp5CisgICAgbmNyNTNjOHh4PXNhZmU6eSxkaXNjOnkKKyAgICBuY3I1M2M4eHg9c2FmZTp5LG1wYXI6eQorICAgIG5jcjUzYzh4eD1zYWZlOnkKKworTXkgcGVyc29ubmFsIHN5c3RlbSB3b3JrcyBmbGF3bGVzc2x5IHdpdGggdGhlIGZvbGxvd2luZyBlcXVpdmFsZW50IHNldHVwOgorCisgICBuY3I1M2M4eHg9bXBhcjp5LHNwYXI6eSxkaXNjOnksc3BlY2Y6MSxmc246bix1bHRyYToyLGZzbjpuLHJldnByb2I6bix2ZXJiOjFcCisgICAgICAgICAgICAgdGFnczozMixzeW5jOjEyLGRlYnVnOjAsYnVyc3Q6NyxsZWQ6MSx3aWRlOjEsc2V0dGxlOjIsZGlmZjowLGlycW06MAorCitUaGUgZHJpdmVyIHByaW50cyBpdHMgYWN0dWFsIHNldHVwIHdoZW4gdmVyYm9zaXR5IGxldmVsIGlzIDIuIFlvdSBjYW4gdHJ5IAorIm5jcjUzYzh4eD12ZXJiOjIiIHRvIGdldCB0aGUgInN0YXRpYyIgc2V0dXAgb2YgdGhlIGRyaXZlciwgb3IgYWRkICJ2ZXJiOjIiIAordG8geW91ciBib290IHNldHVwIGNvbW1hbmQgaW4gb3JkZXIgdG8gY2hlY2sgdGhlIGFjdHVhbCBzZXR1cCB0aGUgZHJpdmVyIGlzIAordXNpbmcuCisKKzEwLjQgUENJIGNvbmZpZ3VyYXRpb24gZml4LXVwIGJvb3Qgb3B0aW9uCisKK3BjaWZpeDo8b3B0aW9uIGJpdHM+CisKK0F2YWlsYWJsZSBvcHRpb24gYml0czoKKyAgICAweDE6ICAgICBTZXQgUENJIGNhY2hlLWxpbmUgc2l6ZSByZWdpc3RlciBpZiBub3Qgc2V0LgorICAgIDB4MjogICAgIFNldCB3cml0ZSBhbmQgaW52YWxpZGF0ZSBiaXQgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisKK1VzZSAncGNpZml4OjMnIGluIG9yZGVyIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gZml4IGJvdGggUENJIGZlYXR1cmVzLgorCitUaGVzZSBvcHRpb25zIG9ubHkgYXBwbHkgdG8gbmV3IFNZTUJJT1MgY2hpcHMgODEwQSwgODI1QSwgODYwLCA4NzUgCithbmQgODk1IGFuZCBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFBlbnRpdW0gYW5kIDQ4NiBjbGFzcyBwcm9jZXNzb3JzLgorUmVjZW50IFNZTUJJT1MgNTNDOFhYIHNjc2kgcHJvY2Vzc29ycyBhcmUgYWJsZSB0byB1c2UgUENJIHJlYWQgbXVsdGlwbGUgCithbmQgUENJIHdyaXRlIGFuZCBpbnZhbGlkYXRlIGNvbW1hbmRzLiBUaGVzZSBmZWF0dXJlcyByZXF1aXJlIHRoZSAKK2NhY2hlIGxpbmUgc2l6ZSByZWdpc3RlciB0byBiZSBwcm9wZXJseSBzZXQgaW4gdGhlIFBDSSBjb25maWd1cmF0aW9uIAorc3BhY2Ugb2YgdGhlIGNoaXBzLiBPbiB0aGUgb3RoZXIgaGFuZCwgY2hpcHMgd2lsbCB1c2UgUENJIHdyaXRlIGFuZCAKK2ludmFsaWRhdGUgY29tbWFuZHMgb25seSBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0IHRvIDEgaW4gdGhlIAorUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisKK05vdCBhbGwgUENJIGJpb3NlcyBzZXQgdGhlIFBDSSBjYWNoZSBsaW5lIHJlZ2lzdGVyIGFuZCB0aGUgUENJIHdyaXRlIGFuZCAKK2ludmFsaWRhdGUgYml0IGluIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBvZiA1M0M4WFggY2hpcHMuCitPcHRpbWl6ZWQgUENJIGFjY2Vzc2VzIG1heSBiZSBicm9rZW4gZm9yIHNvbWUgUENJL21lbW9yeSBjb250cm9sbGVycyBvciAKK21ha2UgcHJvYmxlbXMgd2l0aCBzb21lIFBDSSBib2FyZHMuCisKK1RoaXMgZml4LXVwIHdvcmtlZCBmbGF3bGVzc2x5IG9uIG15IHByZXZpb3VzIHN5c3RlbS4KKyhNQiBUcml0b24gSFggLyA1M0M4NzUgLyA1M0M4MTBBKQorSSB1c2UgdGhlc2Ugb3B0aW9ucyBhdCBteSBvd24gcmlza3MgYXMgeW91IHdpbGwgZG8gaWYgeW91IGRlY2lkZSB0byAKK3VzZSB0aGVtIHRvby4KKworCisxMC41IFNlcmlhbCBOVlJBTSBzdXBwb3J0IGJvb3Qgb3B0aW9uCisKK252cmFtOm4gICAgIGRvIG5vdCBsb29rIGZvciBzZXJpYWwgTlZSQU0KK252cmFtOnkgICAgIHRlc3QgY29udHJvbGxlcnMgZm9yIG9uYm9hcmQgc2VyaWFsIE5WUkFNCisKK1RoaXMgb3B0aW9uIGNhbiBhbHNvIGJlZW4gZW50ZXJlZCBhcyBhbiBoZXhhZGVjaW1hbCB2YWx1ZSB0aGF0IGFsbG93cyAKK3RvIGNvbnRyb2wgd2hhdCBpbmZvcm1hdGlvbiB0aGUgZHJpdmVyIHdpbGwgZ2V0IGZyb20gdGhlIE5WUkFNIGFuZCB3aGF0IAoraW5mb3JtYXRpb24gaXQgd2lsbCBpZ25vcmUuCitGb3IgZGV0YWlscyBzZWUgJzE3LiBTZXJpYWwgTlZSQU0gc3VwcG9ydCcuCisKK1doZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGRyaXZlciB0cmllcyB0byBkZXRlY3QgYWxsIGJvYXJkcyB1c2luZyAKK2EgU2VyaWFsIE5WUkFNLiBUaGlzIG1lbW9yeSBpcyB1c2VkIHRvIGhvbGQgdXNlciBzZXQgdXAgcGFyYW1ldGVycy4KKworVGhlIHBhcmFtZXRlcnMgdGhlIGRyaXZlciBpcyBhYmxlIHRvIGdldCBmcm9tIHRoZSBOVlJBTSBkZXBlbmQgb24gdGhlIAorZGF0YSBmb3JtYXQgdXNlZCwgYXMgZm9sbG93OgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWtyYW0gZm9ybWF0ICAgICAgU3ltYmlvcyBmb3JtYXQKK0dlbmVyYWwgYW5kIGhvc3QgcGFyYW1ldGVycworICAgIEJvb3Qgb3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCisgICAgSG9zdCBTQ1NJIElEICAgICAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBTQ1NJIHBhcml0eSBjaGVja2luZyAgICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFZlcmJvc2UgYm9vdCBtZXNzYWdlcyAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCitTQ1NJIGRldmljZXMgcGFyYW1ldGVycworICAgIFN5bmNocm9ub3VzIHRyYW5zZmVyIHNwZWVkICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgV2lkZSAxNiAvIE5hcnJvdyAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBUYWdnZWQgQ29tbWFuZCBRdWV1aW5nIGVuYWJsZWQgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIERpc2Nvbm5lY3Rpb25zIGVuYWJsZWQgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgU2NhbiBhdCBib290IHRpbWUgICAgICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgICAgIFkKKworSW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIHN5c3RlbSBib290LCBmb3IgZWFjaCBkZXZpY2UgY29uZmlndXJlZCB3aXRob3V0IAordGhlICJzY2FuIGF0IGJvb3QgdGltZSIgb3B0aW9uLCB0aGUgZHJpdmVyIGZvcmNlcyBhbiBlcnJvciBvbiB0aGUgCitmaXJzdCBURVNUIFVOSVQgUkVBRFkgY29tbWFuZCByZWNlaXZlZCBmb3IgdGhpcyBkZXZpY2UuCisKK1NvbWUgU0RNUyBCSU9TIHJldmlzaW9ucyBzZWVtIHRvIGJlIHVuYWJsZSB0byBib290IGNsZWFubHkgd2l0aCB2ZXJ5IGZhc3QgCitoYXJkIGRpc2tzLiBJbiBzdWNoIGEgc2l0dWF0aW9uIHlvdSBjYW5ub3QgY29uZmlndXJlIHRoZSBOVlJBTSB3aXRoIAorb3B0aW1pemVkIHBhcmFtZXRlcnMgdmFsdWUuCisKK1RoZSAnbnZyYW0nIGJvb3Qgb3B0aW9uIGNhbiBiZSBlbnRlcmVkIGluIGhleGFkZWNpbWFsIGZvcm0gaW4gb3JkZXIgCit0byBpZ25vcmUgc29tZSBvcHRpb25zIGNvbmZpZ3VyZWQgaW4gdGhlIE5WUkFNLCBhcyBmb2xsb3c6CisKK212cmFtPTxiaXRzIG9wdGlvbnM+CisgICAgICAweDAxICAgbG9vayBmb3IgTlZSQU0gIChlcXVpdmFsZW50IHRvIG52cmFtPXkpCisgICAgICAweDAyICAgaWdub3JlIE5WUkFNICJTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiIgcGFyYW1ldGVycyBmb3IgYWxsIGRldmljZXMKKyAgICAgIDB4MDQgICBpZ25vcmUgTlZSQU0gIldpZGUgbmVnb3RpYXRpb24iICBwYXJhbWV0ZXIgZm9yIGFsbCBkZXZpY2VzCisgICAgICAweDA4ICAgaWdub3JlIE5WUkFNICJTY2FuIGF0IGJvb3QgdGltZSIgcGFyYW1ldGVyIGZvciBhbGwgZGV2aWNlcworICAgICAgMHg4MCAgIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHNldCB0byBPRkYgaW4gdGhlIE5WUkFNIChzeW01M2M4eHggb25seSkKKworT3B0aW9uIDB4ODAgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIHN5bTUzYzh4eCBkcml2ZXIgYW5kIGlzIGRpc2FibGVkIGJ5IAorZGVmYXVsdC4gUmVzdWx0IGlzIHRoYXQsIGJ5IGRlZmF1bHQgKG9wdGlvbiBub3Qgc2V0KSwgdGhlIHN5bTUzYzh4eCBkcml2ZXIgCit3aWxsIG5vdCBhdHRhY2ggY29udHJvbGxlcnMgc2V0IHRvIE9GRiBpbiB0aGUgTlZSQU0uCisKK1RoZSBuY3I1M2M4eHggYWx3YXlzIHRyaWVzIHRvIGF0dGFjaCBhbGwgdGhlIGNvbnRyb2xsZXJzLiBPcHRpb24gMHg4MCBoYXMgCitub3QgYmVlbiBhZGRlZCB0byB0aGUgbmNyNTNjOHh4IGRyaXZlciwgc2luY2UgaXQgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gCitjb25mdXNlIHVzZXJzIHdobyB1c2UgdGhpcyBkcml2ZXIgc2luY2UgYSBsb25nIHRpbWUuIElmIHlvdSBkZXNpcmUgYSAKK2NvbnRyb2xsZXIgbm90IHRvIGJlIGF0dGFjaGVkIGJ5IHRoZSBuY3I1M2M4eHggZHJpdmVyIGF0IExpbnV4IGJvb3QsIHlvdSAKK211c3QgdXNlIHRoZSAnZXhjbCcgZHJpdmVyIGJvb3Qgb3B0aW9uLgorCisxMC42IFNDU0kgQlVTIGNoZWNraW5nIGJvb3Qgb3B0aW9uLgorCitXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgZHJpdmVyIGNoZWNrcyBTQ1NJIGxpbmVzIAorbG9naWMgc3RhdGUsIDEwMCBtaWNyby1zZWNvbmRzIGFmdGVyIGhhdmluZyBhc3NlcnRlZCB0aGUgU0NTSSBSRVNFVCBsaW5lLgorVGhlIGRyaXZlciBqdXN0IHJlYWRzIFNDU0kgbGluZXMgYW5kIGNoZWNrcyBhbGwgbGluZXMgcmVhZCBGQUxTRSBleGNlcHQgUkVTRVQuCitTaW5jZSBTQ1NJIGRldmljZXMgc2hhbGwgcmVsZWFzZSB0aGUgQlVTIGF0IG1vc3QgODAwIG5hbm8tc2Vjb25kcyBhZnRlciBTQ1NJIAorUkVTRVQgaGFzIGJlZW4gYXNzZXJ0ZWQsIGFueSBzaWduYWwgdG8gVFJVRSBtYXkgaW5kaWNhdGUgYSBTQ1NJIEJVUyBwcm9ibGVtLgorVW5mb3J0dW5hdGVseSwgdGhlIGZvbGxvd2luZyBjb21tb24gU0NTSSBCVVMgcHJvYmxlbXMgYXJlIG5vdCBkZXRlY3RlZDoKKy0gT25seSAxIHRlcm1pbmF0b3IgaW5zdGFsbGVkLgorLSBNaXNwbGFjZWQgdGVybWluYXRvcnMuCistIEJhZCBxdWFsaXR5IHRlcm1pbmF0b3JzLgorT24gdGhlIG90aGVyIGhhbmQsIGVpdGhlciBiYWQgY2FibGluZywgYnJva2VuIGRldmljZXMsIG5vdCBjb25mb3JtYW50IAorZGV2aWNlcywgLi4uIG1heSBjYXVzZSBhIFNDU0kgc2lnbmFsIHRvIGJlIHdyb25nIHdoZW4gdGUgZHJpdmVyIHJlYWRzIGl0LgorCisxMC43IElNTUVESUFURSBBUkJJVFJBVElPTiBib290IG9wdGlvbgorCitUaGlzIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgU1lNNTNDOFhYIGRyaXZlciAobm90IGJ5IHRoZSBOQ1I1M0M4WFgpLgorCitTWU1CSU9TIDUzQzhYWCBjaGlwcyBhcmUgYWJsZSB0byBhcmJpdHJhdGUgZm9yIHRoZSBTQ1NJIEJVUyBhcyBzb29uIGFzIHRoZXkgCitoYXZlIGRldGVjdGVkIGFuIGV4cGVjdGVkIGRpc2Nvbm5lY3Rpb24gKEJVUyBGUkVFIFBIQVNFKS4gRm9yIHRoaXMgcHJvY2VzcyAKK3RvIGJlIHN0YXJ0ZWQsIGJpdCAxIG9mIFNDTlRMMSBJTyByZWdpc3RlciBtdXN0IGJlIHNldCB3aGVuIHRoZSBjaGlwIGlzIAorY29ubmVjdGVkIHRvIHRoZSBTQ1NJIEJVUy4KKworV2hlbiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiwgdGhlIGNoaXAgaGFzIAorZXZlcnkgY2hhbmNlIHRvIHdpbiBhcmJpdHJhdGlvbiBpZiBvbmx5IGRldmljZXMgd2l0aCBsb3dlciBwcmlvcml0eSBhcmUgCitjb21wZXRpbmcgZm9yIHRoZSBTQ1NJIEJVUy4gQnkgdGhlIHdheSwgd2hlbiB0aGUgY2hpcCBpcyB1c2luZyBTQ1NJIGlkIDcsIAordGhlbiBpdCB3aWxsIGZvciBzdXJlIHdpbiB0aGUgbmV4dCBTQ1NJIEJVUyBhcmJpdHJhdGlvbi4KKworU2luY2UsIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdoYXQgZGV2aWNlcyBhcmUgdHJ5aW5nIHRvIGFyYml0cmF0ZSBmb3IgdGhlIAorQlVTLCB1c2luZyB0aGlzIGZlYXR1cmUgY2FuIGJlIGV4dHJlbWVseSB1bmZhaXIuIFNvLCB5b3UgYXJlIG5vdCBhZHZpc2VkCit0byBlbmFibGUgaXQsIG9yIGF0IG1vc3QgZW5hYmxlIHRoaXMgZmVhdHVyZSBmb3IgdGhlIGNhc2UgdGhlIGNoaXAgbG9zdCAKK3RoZSBwcmV2aW91cyBhcmJpdHJhdGlvbiAoYm9vdCBvcHRpb24gJ2lhcmI6MScpLgorCitUaGlzIGZlYXR1cmUgaGFzIHRoZSBmb2xsb3dpbmcgYWR2YW50YWdlczoKKworYSkgQWxsb3cgdGhlIGluaXRpYXRvciB3aXRoIElEIDcgdG8gd2luIGFyYml0cmF0aW9uIHdoZW4gaXQgd2FudHMgc28uCitiKSBPdmVybGFwIGF0IGxlYXN0IDQgbWljcm8tc2Vjb25kcyBvZiBhcmJpdHJhdGlvbiB0aW1lIHdpdGggdGhlIGV4ZWN1dGlvbiAKKyAgIG9mIFNDUklQVFMgdGhhdCBkZWFsIHdpdGggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9uIGFuZCB0aGF0IAorICAgc3RhcnRzIHRoZSBuZXh0IGpvYi4KKworSG1tbS4uLiBCdXQgKGEpIG1heSBqdXN0IHByZXZlbnQgb3RoZXIgZGV2aWNlcyBmcm9tIHJlc2VsZWN0aW5nIHRoZSBpbml0aWF0b3IsIAorYW5kIGRlbGF5IGRhdGEgdHJhbnNmZXJzIG9yIHN0YXR1cy9jb21wbGV0aW9ucywgYW5kIChiKSBtYXkganVzdCB3YXN0ZSAKK1NDU0kgQlVTIGJhbmR3aWR0aCBpZiB0aGUgU0NSSVBUUyBleGVjdXRpb24gbGFzdHMgbW9yZSB0aGFuIDQgbWljcm8tc2Vjb25kcy4KKworVGhlIHVzZSBvZiBJQVJCIG5lZWRzIHRoZSBTQ1NJX05DUl9JQVJCX1NVUFBPUlQgb3B0aW9uIHRvIGhhdmUgYmVlbiBkZWZpbmVkIAorYXQgY29tcGlsZSB0aW1lIGFuZCB0aGUgJ2lhcmInIGJvb3Qgb3B0aW9uIHRvIGhhdmUgYmVlbiBzZXQgdG8gYSBub24gemVybyAKK3ZhbHVlIGF0IGJvb3QgdGltZS4gSXQgaXMgbm90IHRoYXQgdXNlZnVsIGZvciByZWFsIHdvcmssIGJ1dCBjYW4gYmUgdXNlZCAKK3RvIHN0cmVzcyBTQ1NJIGRldmljZXMgb3IgZm9yIHNvbWUgYXBwbGljYXRpb25zIHRoYXQgY2FuIGdhaW4gYWR2YW50YWdlIG9mIAoraXQuIEJ5IHRoZSB3YXksIGlmIHlvdSBleHBlcmllbmNlIGJhZG5lc3NlcyBsaWtlICd1bmV4cGVjdGVkIGRpc2Nvbm5lY3Rpb25zJywgCisnYmFkIHJlc2VsZWN0aW9ucycsIGV0Yy4uLiB3aGVuIHVzaW5nIElBUkIgb24gaGVhdnkgSU8gbG9hZCwgeW91IHNob3VsZCBub3QgCitiZSBzdXJwcmlzZWQsIGJlY2F1c2UgZm9yY2UtZmVlZGluZyBhbnl0aGluZyBhbmQgYmxvY2tpbmcgaXRzIGFyc2UgYXQgdGhlIAorc2FtZSB0aW1lIGNhbm5vdCB3b3JrIGZvciBhIGxvbmcgdGltZS4gOi0pKQorCisKKzExLiBTb21lIGNvbnN0YW50cyBhbmQgZmxhZ3Mgb2YgdGhlIG5jcjUzYzh4eC5oIGhlYWRlciBmaWxlCisKK1NvbWUgb2YgdGhlc2UgYXJlIGRlZmluZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiAgVG8KK2NoYW5nZSBvdGhlciAiZGVmaW5lcyIsIHlvdSBtdXN0IGVkaXQgdGhlIGhlYWRlciBmaWxlLiAgRG8gdGhhdCBvbmx5CitpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKK1NDU0lfTkNSX1NFVFVQX1NQRUNJQUxfRkVBVFVSRVMJKGRlZmF1bHQ6IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgdGhlIGRyaXZlciB3aWxsIGVuYWJsZSBzb21lIHNwZWNpYWwgZmVhdHVyZXMgYWNjb3JkaW5nICAKKwl0byBjaGlwIGFuZCByZXZpc2lvbiBpZC4KKyAgICAgICAgRm9yIDgxMEEsIDg2MCwgODI1QSwgODc1IGFuZCA4OTUgc2NzaSBjaGlwcywgdGhpcyBvcHRpb24gZW5hYmxlcyAKKwlzdXBwb3J0IG9mIGZlYXR1cmVzIHRoYXQgcmVkdWNlIGxvYWQgb2YgUENJIGJ1cyBhbmQgbWVtb3J5IGFjY2Vzc2VzIAorCWR1cmluZyAgc2NzaSB0cmFuc2ZlciBwcm9jZXNzaW5nOiBidXJzdCBvcC1jb2RlIGZldGNoLCByZWFkIG11bHRpcGxlLCAKKyAgICAgICAgcmVhZCBsaW5lLCBwcmVmZXRjaCwgY2FjaGUgbGluZSwgd3JpdGUgYW5kIGludmFsaWRhdGUsIAorICAgICAgICBidXJzdCAxMjggKDg3NSBvbmx5KSwgbGFyZ2UgZG1hIGZpZm8gKDg3NSBvbmx5KSwgb2Zmc2V0IDE2ICg4NzUgb25seSkuCisJQ2FuIGJlIGNoYW5nZWQgYnkgdGhlIGZvbGxvd2luZyBib290IHNldHVwIGNvbW1hbmQ6CisJCW5jcjUzYzh4eD1zcGVjZjpuCisKK1NDU0lfTkNSX0lPTUFQUEVECQkoZGVmYXVsdDogbm90IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgbm9ybWFsIEkvTyBpcyBmb3JjZWQuCisKK1NDU0lfTkNSX1NIQVJFX0lSUQkJKGRlZmF1bHQ6IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgcmVxdWVzdCBzaGFyZWQgSVJRLgorCQorU0NTSV9OQ1JfTUFYX1RBR1MJCShkZWZhdWx0OiA4KQorCU1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0YWdnZWQgY29tbWFuZHMgdG8gYSBkZXZpY2UuCisJQ2FuIGJlIGNoYW5nZWQgYnkgInNldHRhZ3MgPHRhcmdldD4gPG1heHRhZ3M+IgorCitTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1NZTkMgICAgIChkZWZhdWx0OiA1MCkKKwlUcmFuc2ZlciBwZXJpb2QgZmFjdG9yIHRoZSBkcml2ZXIgd2lsbCB1c2UgYXQgYm9vdCB0aW1lIGZvciBzeW5jaHJvbm91cyAKKwluZWdvdGlhdGlvbi4gMCBtZWFucyBhc3luY2hyb25vdXMuCisJQ2FuIGJlIGNoYW5nZWQgYnkgInNldHN5bmMgPHRhcmdldD4gPHBlcmlvZCBmYWN0b3I+IgorCitTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1RBR1MgICAgIChkZWZhdWx0OiA4KQorCURlZmF1bHQgbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0YWdnZWQgY29tbWFuZHMgdG8gYSBkZXZpY2UuCisJPCAxIG1lYW5zIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZGlzYWJsZWQgYXQgc3RhcnQtdXAuCisKK1NDU0lfTkNSX0FMV0FZU19TSU1QTEVfVEFHCShkZWZhdWx0OiBkZWZpbmVkKQorCVVzZSBTSU1QTEUgVEFHIGZvciByZWFkIGFuZCB3cml0ZSBjb21tYW5kcy4KKwlDYW4gYmUgY2hhbmdlZCBieSAic2V0b3JkZXIgPG9yZGVyZWR8c2ltcGxlfGRlZmF1bHQ+IgorCitTQ1NJX05DUl9TRVRVUF9ESVNDT05ORUNUSU9OCShkZWZhdWx0OiBkZWZpbmVkKQorCUlmIGRlZmluZWQsIHRhcmdldHMgYXJlIGFsbG93ZWQgdG8gZGlzY29ubmVjdC4KKworU0NTSV9OQ1JfU0VUVVBfRk9SQ0VfU1lOQ19ORUdPCShkZWZhdWx0OiBub3QgZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBpcyB0cmllZCBmb3IgYWxsIFNDU0ktMiBkZXZpY2VzLgorCUNhbiBiZSBjaGFuZ2VkIGJ5ICJzZXRzeW5jIDx0YXJnZXQ+IDxwZXJpb2Q+IgorCitTQ1NJX05DUl9TRVRVUF9NQVNURVJfUEFSSVRZCShkZWZhdWx0OiBkZWZpbmVkKQorCUlmIGRlZmluZWQsIG1hc3RlciBwYXJpdHkgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKworU0NTSV9OQ1JfU0VUVVBfTUFTVEVSX1BBUklUWQkoZGVmYXVsdDogZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCBTQ1NJIHBhcml0eSBjaGVja2luZyBpcyBlbmFibGVkLgorCitTQ1NJX05DUl9QUk9GSUxFX1NVUFBPUlQJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorCUlmIGRlZmluZWQsIHByb2ZpbGluZyBpbmZvcm1hdGlvbiBpcyBnYXRoZXJlZC4KKworU0NTSV9OQ1JfTUFYX1NDQVRURVIJCShkZWZhdWx0OiAxMjgpCisJU2NhdHRlciBsaXN0IHNpemUgb2YgdGhlIGRyaXZlciBjY2IuCisKK1NDU0lfTkNSX01BWF9UQVJHRVQJCShkZWZhdWx0OiAxNikKKwlNYXggbnVtYmVyIG9mIHRhcmdldHMgcGVyIGhvc3QuCisKK1NDU0lfTkNSX01BWF9IT1NUCQkoZGVmYXVsdDogMikKKwlNYXggbnVtYmVyIG9mIGhvc3QgY29udHJvbGxlcnMuCisKK1NDU0lfTkNSX1NFVFRMRV9USU1FCQkoZGVmYXVsdDogMikKKwlOdW1iZXIgb2Ygc2Vjb25kcyB0aGUgZHJpdmVyIHdpbGwgd2FpdCBhZnRlciByZXNldC4KKworU0NTSV9OQ1JfVElNRU9VVF9BTEVSVAkJKGRlZmF1bHQ6IDMpCisJSWYgYSBwZW5kaW5nIGNvbW1hbmQgd2lsbCB0aW1lIG91dCBhZnRlciB0aGlzIGFtb3VudCBvZiBzZWNvbmRzLAorCWFuIG9yZGVyZWQgdGFnIGlzIHVzZWQgZm9yIHRoZSBuZXh0IGNvbW1hbmQuCisJQXZvaWRzIHRpbWVvdXRzIGZvciB1bm9yZGVyZWQgdGFnZ2VkIGNvbW1hbmRzLgorCitTQ1NJX05DUl9DQU5fUVVFVUUJCShkZWZhdWx0OiA3KlNDU0lfTkNSX01BWF9UQUdTKQorCU1heCBudW1iZXIgb2YgY29tbWFuZHMgdGhhdCBjYW4gYmUgcXVldWVkIHRvIGEgaG9zdC4KKworU0NTSV9OQ1JfQ01EX1BFUl9MVU4JCShkZWZhdWx0OiBTQ1NJX05DUl9NQVhfVEFHUykKKwlNYXggbnVtYmVyIG9mIGNvbW1hbmRzIHF1ZXVlZCB0byBhIGhvc3QgZm9yIGEgZGV2aWNlLgorCitTQ1NJX05DUl9TR19UQUJMRVNJWkUJCShkZWZhdWx0OiBTQ1NJX05DUl9NQVhfU0NBVFRFUi0xKQorCU1heCBzaXplIG9mIHRoZSBMaW51eCBzY2F0dGVyL2dhdGhlciBsaXN0LgorCitTQ1NJX05DUl9NQVhfTFVOCShkZWZhdWx0OiA4KQorCU1heCBudW1iZXIgb2YgTFVOcyBwZXIgdGFyZ2V0LgorCisKKzEyLiBJbnN0YWxsYXRpb24KKworVGhpcyBkcml2ZXIgaXMgcGFydCBvZiB0aGUgbGludXgga2VybmVsIGRpc3RyaWJ1dGlvbi4KK0RyaXZlciBmaWxlcyBhcmUgbG9jYXRlZCBpbiB0aGUgc3ViLWRpcmVjdG9yeSAiZHJpdmVycy9zY3NpIiBvZiB0aGUgCitrZXJuZWwgc291cmNlIHRyZWUuCisKK0RyaXZlciBmaWxlczoKKworCVJFQURNRS5uY3I1M2M4eHgJOiB0aGlzIGZpbGUKKwlDaGFuZ2VMb2cubmNyNTNjOHh4CTogY2hhbmdlIGxvZworCW5jcjUzYzh4eC5oCQk6IGRlZmluaXRpb25zCisJbmNyNTNjOHh4LmMJCTogdGhlIGRyaXZlciBjb2RlCisKK05ldyBkcml2ZXIgdmVyc2lvbnMgYXJlIG1hZGUgYXZhaWxhYmxlIHNlcGFyYXRlbHkgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdGluZyAKK2NoYW5nZXMgYW5kIG5ldyBmZWF0dXJlcyBwcmlvciB0byBpbmNsdWRpbmcgdGhlbSBpbnRvIHRoZSBsaW51eCBrZXJuZWwgCitkaXN0cmlidXRpb24uIFRoZSBmb2xsb3dpbmcgVVJMIHByb3ZpZGVzIGluZm9ybWF0aW9ucyBvbiBsYXRlc3QgYXZhbGFpYmxlIAorcGF0Y2hlczogCisKKyAgICAgIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9wZW9wbGUvZ2VyYXJkLXJvdWRpZXIvUkVBRE1FCisKKworMTMuIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZmVhdHVyZXMuCisKKzxOb3QgeWV0IHdyaXR0ZW4+CisKKworMTQuIEtub3duIHByb2JsZW1zCisKKzE0LjEgVGFnZ2VkIGNvbW1hbmRzIHdpdGggSW9tZWdhIEpheiBkZXZpY2UKKworSSBoYXZlIG5vdCB0cmllZCB0aGlzIGRldmljZSwgaG93ZXZlciBpdCBoYXMgYmVlbiByZXBvcnRlZCB0byBtZSB0aGUKK2ZvbGxvd2luZzogVGhpcyBkZXZpY2UgaXMgY2FwYWJsZSBvZiBUYWdnZWQgY29tbWFuZCBxdWV1aW5nLiBIb3dldmVyCit3aGlsZSBzcGlubmluZyB1cCwgaXQgcmVqZWN0cyBUYWdnZWQgY29tbWFuZHMuIFRoaXMgYmVoYXZpb3VyIGlzCitjb25mb3JtcyB0byA2LjguMiBvZiBTQ1NJLTIgc3BlY2lmaWNhdGlvbnMuIFRoZSBjdXJyZW50IGJlaGF2aW91ciBvZgordGhlIGRyaXZlciBpbiB0aGF0IHNpdHVhdGlvbiBpcyBub3Qgc2F0aXNmeWluZy4gU28gZG8gbm90IGVuYWJsZQorVGFnZ2VkIGNvbW1hbmQgcXVldWluZyBmb3IgZGV2aWNlcyB0aGF0IGFyZSBhYmxlIHRvIHNwaW4gZG93bi4gIFRoZQorb3RoZXIgcHJvYmxlbSB0aGF0IG1heSBhcHBlYXIgaXMgdGltZW91dHMuIFRoZSBvbmx5IHdheSB0byBhdm9pZAordGltZW91dHMgc2VlbXMgdG8gZWRpdCBsaW51eC9kcml2ZXJzL3Njc2kvc2QuYyBhbmQgdG8gaW5jcmVhc2UgdGhlCitjdXJyZW50IHRpbWVvdXQgdmFsdWVzLgorCisxNC4yIERldmljZSBuYW1lcyBjaGFuZ2Ugd2hlbiBhbm90aGVyIGNvbnRyb2xsZXIgaXMgYWRkZWQuCisKK1doZW4geW91IGFkZCBhIG5ldyBOQ1I1M0M4WFggY2hpcCBiYXNlZCBjb250cm9sbGVyIHRvIGEgc3lzdGVtIHRoYXQgYWxyZWFkeSAKK2hhcyBvbmUgb3IgbW9yZSBjb250cm9sbGVycyBvZiB0aGlzIGZhbWlseSwgaXQgbWF5IGhhcHBlbiB0aGF0IHRoZSBvcmRlciAKK3RoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZW0gdG8gdGhlIGtlcm5lbCBjYXVzZXMgcHJvYmxlbXMgZHVlIHRvIGRldmljZSAKK25hbWUgY2hhbmdlcy4KK1doZW4gYXQgbGVhc3Qgb25lIGNvbnRyb2xsZXIgdXNlcyBOdlJBTSwgU0RNUyBCSU9TIHZlcnNpb24gNCBhbGxvd3MgeW91IHRvIAorZGVmaW5lIHRoZSBvcmRlciB0aGUgQklPUyB3aWxsIHNjYW4gdGhlIHNjc2kgYm9hcmRzLiBUaGUgZHJpdmVyIGF0dGFjaGVzIAorY29udHJvbGxlcnMgYWNjb3JkaW5nIHRvIEJJT1MgaW5mb3JtYXRpb24gaWYgTnZSQU0gZGV0ZWN0IG9wdGlvbiBpcyBzZXQuCisKK0lmIHlvdXIgY29udHJvbGxlcnMgZG8gbm90IGhhdmUgTnZSQU0sIHlvdSBjYW46CisKKy0gQXNrIHRoZSBkcml2ZXIgdG8gcHJvYmUgY2hpcCBpZHMgaW4gcmV2ZXJzZSBvcmRlciBmcm9tIHRoZSBib290IGNvbW1hbmQKKyAgbGluZTogbmNyNTNjOHh4PXJldnByb2I6eQorLSBNYWtlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gdGhlIGZzdGFiLgorLSBVc2UgdGhlICdzY3NpZGV2JyB0b29sIGZyb20gRXJpYyBZb3VuZ2RhbGUuCisKKzE0LjMgVXNpbmcgb25seSA4IGJpdCBkZXZpY2VzIHdpdGggYSBXSURFIFNDU0kgY29udHJvbGxlci4KKworV2hlbiBvbmx5IDggYml0IE5BUlJPVyBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgdG8gYSAxNiBiaXQgV0lERSBTQ1NJIGNvbnRyb2xsZXIsIAoreW91IG11c3QgZW5zdXJlIHRoYXQgbGluZXMgb2YgdGhlIHdpZGUgcGFydCBvZiB0aGUgU0NTSSBCVVMgYXJlIHB1bGxlZC11cC4KK1RoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IEVOQUJMSU5HIHRoZSBXSURFIFRFUk1JTkFUT1IgcG9ydGlvbiBvZiB0aGUgU0NTSSAKK2NvbnRyb2xsZXIgY2FyZC4KK1RoZSBUWUFOIDEzNjUgZG9jdW1lbnRhdGlvbiByZXZpc2lvbiAxLjIgaXMgbm90IGNvcnJlY3QgYWJvdXQgc3VjaCBzZXR0aW5ncy4KKyhwYWdlIDEwLCBmaWd1cmUgMy4zKS4KKworMTQuNCBQb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gZHVyaW5nIGEgTWVtb3J5IFdyaXRlIGFuZCBJbnZhbGlkYXRlCisKK1RoaXMgcHJvYmxlbSBpcyBkZXNjcmliZWQgaW4gU1lNQklPUyBERUwgMzk3LCBQYXJ0IE51bWJlciA2OS0wMzkyNDEsIElURU0gNC4KKworSW4gc29tZSBjb21wbGV4IHNpdHVhdGlvbnMsIDUzQzg3NSBjaGlwcyByZXZpc2lvbiA8PSAzIG1heSBzdGFydCBhIFBDSSAKK1dyaXRlIGFuZCBJbnZhbGlkYXRlIENvbW1hbmQgYXQgYSBub3QgY2FjaGUtbGluZS1hbGlnbmVkIDQgRFdPUkRTIGJvdW5kYXJ5LgorVGhpcyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gQ2FjaGUgTGluZSBTaXplIGlzIDggRFdPUkRTIG9yIGdyZWF0ZXIuCitQZW50aXVtIHN5c3RlbXMgdXNlIGEgOCBEV09SRFMgY2FjaGUgbGluZSBzaXplIGFuZCBzbyBhcmUgY29uY2VybmVkIGJ5IAordGhpcyBjaGlwIGJ1ZywgdW5saWtlIGk0ODYgc3lzdGVtcyB0aGF0IHVzZSBhIDQgRFdPUkRTIGNhY2hlIGxpbmUgc2l6ZS4KKworV2hlbiB0aGlzIHNpdHVhdGlvbiBvY2N1cnMsIHRoZSBjaGlwIG1heSBjb21wbGV0ZSB0aGUgV3JpdGUgYW5kIEludmFsaWRhdGUgCitjb21tYW5kIGFmdGVyIGhhdmluZyBvbmx5IGZpbGxlZCBwYXJ0IG9mIHRoZSBsYXN0IGNhY2hlIGxpbmUgaW52b2x2ZWQgaW4gCit0aGUgdHJhbnNmZXIsIGxlYXZpbmcgdG8gZGF0YSBjb3JydXB0aW9uIHRoZSByZW1haW5kZXIgb2YgdGhpcyBjYWNoZSBsaW5lLgorCitOb3QgdXNpbmcgV3JpdGUgQW5kIEludmFsaWRhdGUgb2J2aW91c2x5IGdldHMgcmlkIG9mIHRoaXMgY2hpcCBidWcsIGFuZCBzbyAKK2l0IGlzIG5vdyB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBkcml2ZXIuCitIb3dldmVyLCBmb3IgcGVvcGxlIGxpa2UgbWUgd2hvIHdhbnQgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwgSSBoYXZlIGFkZGVkIAorcGFydCBvZiBhIHdvcmstYXJvdW5kIHN1Z2dlc3RlZCBieSBTWU1CSU9TLiBUaGlzIHdvcmstYXJvdW5kIHJlc2V0cyB0aGUgCithZGRyZXNzaW5nIGxvZ2ljIHdoZW4gdGhlIERBVEEgSU4gcGhhc2UgaXMgZW50ZXJlZCBhbmQgc28gcHJldmVudHMgdGhlIGJ1ZyAKK2Zyb20gYmVpbmcgdHJpZ2dlcmVkIGZvciB0aGUgZmlyc3QgU0NTSSBNT1ZFIG9mIHRoZSBwaGFzZS4gVGhpcyB3b3JrLWFyb3VuZCAKK3Nob3VsZCBiZSBlbm91Z2ggYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBvbmx5IGRyaXZlciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB0aGF0IGlzIGdyZWF0ZXIgdGhhbiA4IERXT1JEUyAgYW5kIAordGhhdCBpcyBtb3ZlZCBieSB0aGUgU0NSSVBUUyBwcm9jZXNzb3IgaXMgdGhlICdDQ0IgaGVhZGVyJyB0aGF0IGNvbnRhaW5zIAordGhlIGNvbnRleHQgb2YgdGhlIFNDU0kgdHJhbnNmZXIuIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgYWxpZ25lZCBvbiA4IERXT1JEUyAKK2JvdW5kYXJ5IChQZW50aXVtIENhY2hlIExpbmUgU2l6ZSksIGFuZCBzbyBpcyBpbW11bmUgdG8gdGhpcyBjaGlwIGJ1ZywgYXQgCitsZWFzdCBvbiBQZW50aXVtIHN5c3RlbXMuCitCdXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBidWcgY2FuIGJlIG1ldCB3aGVuIGEgU0NTSSByZWFkIGNvbW1hbmQgaXMgCitwZXJmb3JtZWQgdXNpbmcgYSBidWZmZXIgdGhhdCBpcyA0IERXT1JEUyBidXQgbm90IGNhY2hlLWxpbmUgYWxpZ25lZC4KK1RoaXMgY2Fubm90IGhhcHBlbiB1bmRlciBMaW51eCB3aGVuIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzIGFyZSB1c2VkIHNpbmNlIAordGhleSBvbmx5IHJlZmVyIHRvIHN5c3RlbSBidWZmZXJzIHRoYXQgYXJlIHdlbGwgYWxpZ25lZC4gU28sIGEgd29yayBhcm91bmQgCittYXkgb25seSBiZSBuZWVkZWQgdW5kZXIgTGludXggd2hlbiBhIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgaXMgbm90IHVzZWQgYW5kIAord2hlbiB0aGUgU0NTSSBEQVRBIElOIHBoYXNlIGlzIHJlZW50ZXJlZCBhZnRlciBhIHBoYXNlIG1pc21hdGNoLgorCisxNC41IElSUSBzaGFyaW5nIHByb2JsZW1zCisKK1doZW4gYW4gSVJRIGlzIHNoYXJlZCBieSBkZXZpY2VzIHRoYXQgYXJlIGhhbmRsZWQgYnkgZGlmZmVyZW50IGRyaXZlcnMsIGl0IAorbWF5IGhhcHBlbiB0aGF0IG9uZSBkcml2ZXIgY29tcGxhaW5zIGFib3V0IHRoZSByZXF1ZXN0IG9mIHRoZSBJUlEgaGF2aW5nIAorZmFpbGVkLiBJbmRlciBMaW51eC0yLjAsIHRoaXMgbWF5IGJlIGR1ZSB0byBvbmUgZHJpdmVyIGhhdmluZyByZXF1ZXN0ZWQgdGhlIAorSVJRIHVzaW5nIHRoZSBTQV9JTlRFUlJVUFQgZmxhZyBidXQgc29tZSBvdGhlciBoYXZpbmcgcmVxdWVzdGVkIHRoZSBzYW1lIElSUSAKK3dpdGhvdXQgdGhpcyBmbGFnLiBVbmRlciBib3RoIExpbnV4LTIuMCBhbmQgbGludXgtMi4yLCB0aGlzIG1heSBiZSBjYXVzZWQgYnkgCitvbmUgZHJpdmVyIG5vdCBoYXZpbmcgcmVxdWVzdGVkIHRoZSBJUlEgd2l0aCB0aGUgU0FfU0hJUlEgZmxhZy4KKworQnkgZGVmYXVsdCwgdGhlIG5jcjUzYzh4eCBhbmQgc3ltNTNjOHh4IGRyaXZlcnMgcmVxdWVzdCBJUlFzIHdpdGggYm90aCB0aGUgCitTQV9JTlRFUlJVUFQgYW5kIHRoZSBTQV9TSElSUSBmbGFnIHVuZGVyIExpbnV4LTIuMCBhbmQgd2l0aCBvbmx5IHRoZSBTQV9TSElSUSAKK2ZsYWcgdW5kZXIgTGludXgtMi4yLgorCitVbmRlciBMaW51eC0yLjAsIHlvdSBjYW4gZGlzYWJsZSB1c2Ugb2YgU0FfSU5URVJSVVBUIGZsYWcgZnJvbSB0aGUgYm9vdCAKK2NvbW1hbmQgbGluZSBieSB1c2luZyB0aGUgZm9sbG93aW5nIG9wdGlvbjoKKworICAgICBuY3I1M2M4eHg9aXJxbToweDIwICAgKGZvciB0aGUgZ2VuZXJpYyBuY3I1M2M4eHggZHJpdmVyKQorICAgICBzeW01M2M4eHg9aXJxbToweDIwICAgKGZvciB0aGUgc3ltNTNjOHh4IGRyaXZlcikKKworSWYgdGhpcyBkb2VzIG5vdCBmaXggdGhlIHByb2JsZW0sIHRoZW4geW91IG1heSB3YW50IHRvIGNoZWNrIGhvdyBhbGwgb3RoZXIgCitkcml2ZXJzIGFyZSByZXF1ZXN0aW5nIHRoZSBJUlEgYW5kIHJlcG9ydCB0aGUgcHJvYmxlbS4gTm90ZSB0aGF0IGlmIGF0IGxlYXN0IAorYSBzaW5nbGUgZHJpdmVyIGRvZXMgbm90IHJlcXVlc3QgdGhlIElSUSB3aXRoIHRoZSBTQV9TSElSUSBmbGFnIChzaGFyZSBJUlEpLCAKK3RoZW4gdGhlIHJlcXVlc3Qgb2YgdGhlIElSUSBvYnZpb3VzbHkgd2lsbCBub3Qgc3VjY2VlZCBmb3IgYWxsIHRoZSBkcml2ZXJzLgorCisxNS4gU0NTSSBwcm9ibGVtIHRyb3VibGVzaG9vdGluZworCisxNS4xIFByb2JsZW0gdHJhY2tpbmcKKworTW9zdCBTQ1NJIHByb2JsZW1zIGFyZSBkdWUgdG8gYSBub24gY29uZm9ybWFudCBTQ1NJIGJ1cyBvciB0byBidWdneQorZGV2aWNlcy4gIElmIGluZm9ydHVuYXRlbHkgeW91IGhhdmUgU0NTSSBwcm9ibGVtcywgeW91IGNhbiBjaGVjayB0aGUKK2ZvbGxvd2luZyB0aGluZ3M6CisKKy0gU0NTSSBidXMgY2FibGVzCistIHRlcm1pbmF0aW9ucyBhdCBib3RoIGVuZCBvZiB0aGUgU0NTSSBjaGFpbgorLSBsaW51eCBzeXNsb2cgbWVzc2FnZXMgKHNvbWUgb2YgdGhlbSBtYXkgaGVscCB5b3UpCisKK0lmIHlvdSBkbyBub3QgZmluZCB0aGUgc291cmNlIG9mIHByb2JsZW1zLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUKK2RyaXZlciB3aXRoIG5vIGZlYXR1cmVzIGVuYWJsZWQuCisKKy0gb25seSBhc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMKKy0gdGFnZ2VkIGNvbW1hbmRzIGRpc2FibGVkCistIGRpc2Nvbm5lY3Rpb25zIG5vdCBhbGxvd2VkCisKK05vdywgaWYgeW91ciBTQ1NJIGJ1cyBpcyBvaywgeW91ciBzeXN0ZW0gaGF2ZSBldmVyeSBjaGFuY2UgdG8gd29yaword2l0aCB0aGlzIHNhZmUgY29uZmlndXJhdGlvbiBidXQgcGVyZm9ybWFuY2VzIHdpbGwgbm90IGJlIG9wdGltYWwuCisKK0lmIGl0IHN0aWxsIGZhaWxzLCB0aGVuIHlvdSBjYW4gc2VuZCB5b3VyIHByb2JsZW0gZGVzY3JpcHRpb24gdG8KK2FwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3cy1ncm91cHMuICBTZW5kIG1lIGEgY29weSBpbiBvcmRlciB0bworYmUgc3VyZSBJIHdpbGwgcmVjZWl2ZSBpdC4gIE9idmlvdXNseSwgYSBidWcgaW4gdGhlIGRyaXZlciBjb2RlIGlzCitwb3NzaWJsZS4KKworICAgICBNeSBlbWFpbCBhZGRyZXNzOiBHZXJhcmQgUm91ZGllciA8Z3JvdWRpZXJAZnJlZS5mcj4KKworQWxsb3dpbmcgZGlzY29ubmVjdGlvbnMgaXMgaW1wb3J0YW50IGlmIHlvdSB1c2Ugc2V2ZXJhbCBkZXZpY2VzIG9uCit5b3VyIFNDU0kgYnVzIGJ1dCBvZnRlbiBjYXVzZXMgcHJvYmxlbXMgd2l0aCBidWdneSBkZXZpY2VzLgorU3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMgaW5jcmVhc2VzIHRocm91Z2hwdXQgb2YgZmFzdCBkZXZpY2VzIGxpa2UKK2hhcmQgZGlza3MuICBHb29kIFNDU0kgaGFyZCBkaXNrcyB3aXRoIGEgbGFyZ2UgY2FjaGUgZ2FpbiBhZHZhbnRhZ2Ugb2YKK3RhZ2dlZCBjb21tYW5kcyBxdWV1aW5nLgorCitUcnkgdG8gZW5hYmxlIG9uZSBmZWF0dXJlIGF0IGEgdGltZSB3aXRoIGNvbnRyb2wgY29tbWFuZHMuICBGb3IgZXhhbXBsZToKKworLSBlY2hvICJzZXRzeW5jIGFsbCAyNSIgPi9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKyAgV2lsbCBlbmFibGUgZmFzdCBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBhbGwgdGFyZ2V0cy4KKworLSBlY2hvICJzZXRmbGFnIDMiID4vcHJvYy9zY3NpL25jcjUzYzh4eC8wCisgIFdpbGwgcmVzZXQgZmxhZ3MgKG5vX2Rpc2MpIGZvciB0YXJnZXQgMywgYW5kIHNvIHdpbGwgYWxsb3cgaXQgdG8gZGlzY29ubmVjdCAKKyAgdGhlIFNDU0kgQnVzLgorCistIGVjaG8gInNldHRhZ3MgMyA4IiA+L3Byb2Mvc2NzaS9uY3I1M2M4eHgvMAorICBXaWxsIGVuYWJsZSB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGZvciB0YXJnZXQgMyBpZiB0aGF0IGRldmljZSBzdXBwb3J0cyBpdC4KKworT25jZSB5b3UgaGF2ZSBmb3VuZCB0aGUgZGV2aWNlIGFuZCB0aGUgZmVhdHVyZSB0aGF0IGNhdXNlIHByb2JsZW1zLCBqdXN0IAorZGlzYWJsZSB0aGF0IGZlYXR1cmUgZm9yIHRoYXQgZGV2aWNlLgorCisxNS4yIFVuZGVyc3RhbmRpbmcgaGFyZHdhcmUgZXJyb3IgcmVwb3J0cworCitXaGVuIHRoZSBkcml2ZXIgZGV0ZWN0cyBhbiB1bmV4cGVjdGVkIGVycm9yIGNvbmRpdGlvbiwgaXQgbWF5IGRpc3BsYXkgYSAKK21lc3NhZ2Ugb2YgdGhlIGZvbGxvd2luZyBwYXR0ZXJuLgorCitzeW01M2M4NzYtMDoxOiBFUlJPUiAoMDo0OCkgKDEtMjEtNjUpIChmLzk1KSBAIChzY3JpcHQgN2MwOjE5MDAwMDAwKS4KK3N5bTUzYzg3Ni0wOiBzY3JpcHQgY21kID0gMTkwMDAwMDAKK3N5bTUzYzg3Ni0wOiByZWdkdW1wOiBkYSAxMCA4MCA5NSA0NyAwZiAwMSAwNyA3NSAwMSA4MSAyMSA4MCAwMSAwOSAwMC4KKworU29tZSBmaWVsZHMgaW4gc3VjaCBhIG1lc3NhZ2UgbWF5IGhlbHAgeW91IHVuZGVyc3RhbmQgdGhlIGNhdXNlIG9mIHRoZSAKK3Byb2JsZW0sIGFzIGZvbGxvd3M6CisKK3N5bTUzYzg3Ni0wOjE6IEVSUk9SICgwOjQ4KSAoMS0yMS02NSkgKGYvOTUpIEAgKHNjcmlwdCA3YzA6MTkwMDAwMDApLgorLi4uLi4uLi4uLi4uQS4uLi4uLi4uLkIuQy4uLi5ELkUuLkYuLi4uRy5ILi4uLi4uLkkuLi4uLkouLi5LLi4uLi4uLgorCitGaWVsZCBBIDogdGFyZ2V0IG51bWJlci4KKyAgU0NTSSBJRCBvZiB0aGUgZGV2aWNlIHRoZSBjb250cm9sbGVyIHdhcyB0YWxraW5nIHdpdGggYXQgdGhlIG1vbWVudCB0aGUgCisgIGVycm9yIG9jY3Vycy4KKworRmllbGQgQiA6IERTVEFUIGlvIHJlZ2lzdGVyIChETUEgU1RBVFVTKQorICBCaXQgMHg0MCA6IE1EUEUgTWFzdGVyIERhdGEgUGFyaXR5IEVycm9yCisgICAgICAgICAgICAgRGF0YSBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQgb24gdGhlIFBDSSBCVVMuCisgIEJpdCAweDIwIDogQkYgICBCdXMgRmF1bHQKKyAgICAgICAgICAgICBQQ0kgYnVzIGZhdWx0IGNvbmRpdGlvbiBkZXRlY3RlZAorICBCaXQgMHgwMSA6IElJRCAgSWxsZWdhbCBJbnN0cnVjdGlvbiBEZXRlY3RlZAorICAgICAgICAgICAgIFNldCBieSB0aGUgY2hpcCB3aGVuIGl0IGRldGVjdHMgYW4gSWxsZWdhbCBJbnN0cnVjdGlvbiBmb3JtYXQgCisgICAgICAgICAgICAgb24gc29tZSBjb25kaXRpb24gdGhhdCBtYWtlcyBhbiBpbnN0cnVjdGlvbiBpbGxlZ2FsLgorICBCaXQgMHg4MCA6IERGRSBEbWEgRmlmbyBFbXB0eQorICAgICAgICAgICAgIFB1cmUgc3RhdHVzIGJpdCB0aGF0IGRvZXMgbm90IGluZGljYXRlIGFuIGVycm9yLgorICBJZiB0aGUgcmVwb3J0ZWQgRFNUQVQgdmFsdWUgY29udGFpbnMgYSBjb21iaW5hdGlvbiBvZiBNRFBFICgweDQwKSwgCisgIEJGICgweDIwKSwgdGhlbiB0aGUgY2F1c2UgbWF5IGJlIGxpa2VseSBkdWUgdG8gYSBQQ0kgQlVTIHByb2JsZW0uCisKK0ZpZWxkIEMgOiBTSVNUIGlvIHJlZ2lzdGVyIChTQ1NJIEludGVycnVwdCBTdGF0dXMpCisgIEJpdCAweDA4IDogU0dFICBTQ1NJIEdST1NTIEVSUk9SCisgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGNoaXAgZGV0ZWN0ZWQgYSBzZXZlcmUgZXJyb3IgY29uZGl0aW9uIAorICAgICAgICAgICAgIG9uIHRoZSBTQ1NJIEJVUyB0aGF0IHByZXZlbnRzIHRoZSBTQ1NJIHByb3RvY29sIGZyb20gZnVuY3Rpb25pbmcKKyAgICAgICAgICAgICBwcm9wZXJseS4KKyAgQml0IDB4MDQgOiBVREMgIFVuZXhwZWN0ZWQgRGlzY29ubmVjdGlvbgorICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UgcmVsZWFzZWQgdGhlIFNDU0kgQlVTIHdoZW4gdGhlIGNoaXAgCisgICAgICAgICAgICAgd2FzIG5vdCBleHBlY3RpbmcgdGhpcyB0byBoYXBwZW4uIEEgZGV2aWNlIG1heSBiZWhhdmUgc28gdG8gCisgICAgICAgICAgICAgaW5kaWNhdGUgdGhlIFNDU0kgaW5pdGlhdG9yIHRoYXQgYW4gZXJyb3IgY29uZGl0aW9uIG5vdCByZXBvcnRhYmxlICAgICAgICAgICAgICB1c2luZyB0aGUgU0NTSSBwcm90b2NvbCBoYXMgb2NjdXJyZWQuCisgIEJpdCAweDAyIDogUlNUICBTQ1NJIEJVUyBSZXNldAorICAgICAgICAgICAgIEdlbmVyYWxseSBTQ1NJIHRhcmdldHMgZG8gbm90IHJlc2V0IHRoZSBTQ1NJIEJVUywgYWx0aG91Z2ggYW55IAorICAgICAgICAgICAgIGRldmljZSBvbiB0aGUgQlVTIGNhbiByZXNldCBpdCBhdCBhbnkgdGltZS4KKyAgQml0IDB4MDEgOiBQQVIgIFBhcml0eQorICAgICAgICAgICAgIFNDU0kgcGFyaXR5IGVycm9yIGRldGVjdGVkLgorICBPbiBhIGZhdWx0eSBTQ1NJIEJVUywgYW55IGVycm9yIGNvbmRpdGlvbiBhbW9uZyBTR0UgKDB4MDgpLCBVREMgKDB4MDQpIGFuZCAKKyAgUEFSICgweDAxKSBtYXkgYmUgZGV0ZWN0ZWQgYnkgdGhlIGNoaXAuIElmIHlvdXIgU0NTSSBzeXN0ZW0gc29tZXRpbWVzIAorICBlbmNvdW50ZXJzIHN1Y2ggZXJyb3IgY29uZGl0aW9ucywgZXNwZWNpYWxseSBTQ1NJIEdST1NTIEVSUk9SLCB0aGVuIGEgU0NTSSAKKyAgQlVTIHByb2JsZW0gaXMgbGlrZWx5IHRoZSBjYXVzZSBvZiB0aGVzZSBlcnJvcnMuCisKK0ZvciBmaWVsZHMgRCxFLEYsRyBhbmQgSCwgeW91IG1heSBsb29rIGludG8gdGhlIHN5bTUzYzh4eF9kZWZzLmggZmlsZSAKK3RoYXQgY29udGFpbnMgc29tZSBtaW5pbWFsIGNvbW1lbnRzIG9uIElPIHJlZ2lzdGVyIGJpdHMuCitGaWVsZCBEIDogU09DTCAgU2NzaSBPdXRwdXQgQ29udHJvbCBMYXRjaAorICAgICAgICAgIFRoaXMgcmVnaXN0ZXIgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBTQ1NJIGNvbnRyb2wgbGluZXMgdGhlIAorICAgICAgICAgIGNoaXAgd2FudCB0byBkcml2ZSBvciBjb21wYXJlIGFnYWluc3QuCitGaWVsZCBFIDogU0JDTCAgU2NzaSBCdXMgQ29udHJvbCBMaW5lcworICAgICAgICAgIEFjdHVhbCB2YWx1ZSBvZiBjb250cm9sIGxpbmVzIG9uIHRoZSBTQ1NJIEJVUy4KK0ZpZWxkIEYgOiBTQkRMICBTY3NpIEJ1cyBEYXRhIExpbmVzCisgICAgICAgICAgQWN0dWFsIHZhbHVlIG9mIGRhdGEgbGluZXMgb24gdGhlIFNDU0kgQlVTLgorRmllbGQgRyA6IFNYRkVSICBTQ1NJIFRyYW5zZmVyCisgICAgICAgICAgQ29udGFpbnMgdGhlIHNldHRpbmcgb2YgdGhlIFN5bmNocm9ub3VzIFBlcmlvZCBmb3Igb3V0cHV0IGFuZCAKKyAgICAgICAgICB0aGUgY3VycmVudCBTeW5jaHJvbm91cyBvZmZzZXQgKG9mZnNldCAwIG1lYW5zIGFzeW5jaHJvbm91cykuCitGaWVsZCBIIDogU0NOVEwzIFNjc2kgQ29udHJvbCBSZWdpc3RlciAzCisgICAgICAgICAgQ29udGFpbnMgdGhlIHNldHRpbmcgb2YgdGltaW5nIHZhbHVlcyBmb3IgYm90aCBhc3luY2hyb25vdXMgYW5kIAorICAgICAgICAgIHN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzLiAKKworVW5kZXJzdGFuZGluZyBGaWVsZHMgSSwgSiwgSyBhbmQgZHVtcHMgcmVxdWlyZXMgdG8gaGF2ZSBnb29kIGtub3dsZWRnZSBvZiAKK1NDU0kgc3RhbmRhcmRzLCBjaGlwIGNvcmVzIGZ1bmN0aW9ubmFscyBhbmQgaW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcy4KK1lvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGRlY29kZSBhbmQgdW5kZXJzdGFuZCB0aGVtLCB1bmxlc3MgeW91IHdhbnQgdG8gaGVscCAKK21haW50YWluIHRoZSBkcml2ZXIgY29kZS4KKworMTYuIFN5bmNob25vdXMgdHJhbnNmZXIgbmVnb3RpYXRpb24gdGFibGVzCisKK1RhYmxlcyBiZWxvdyBoYXZlIGJlZW4gY3JlYXRlZCBieSBjYWxsaW5nIHRoZSByb3V0aW5lIHRoZSBkcml2ZXIgdXNlcworZm9yIHN5bmNocm9uaXNhdGlvbiBuZWdvdGlhdGlvbiB0aW1pbmcgY2FsY3VsYXRpb24gYW5kIGNoaXAgc2V0dGluZy4KK1RoZSBmaXJzdCB0YWJsZSBjb3JyZXNwb25kcyB0byBVbHRyYSBjaGlwcyA1Mzg3NSBhbmQgNTNDODYwIHdpdGggODAgTUh6IAorY2xvY2sgYW5kIDUgY2xvY2sgZGl2aXNvcnMuCitUaGUgc2Vjb25kIG9uZSBoYXMgYmVlbiBjYWxjdWxhdGVkIGJ5IHNldHRpbmcgdGhlIHNjc2kgY2xvY2sgdG8gNDAgTWh6IAorYW5kIHVzaW5nIDQgY2xvY2sgZGl2aXNvcnMgYW5kIHNvIGFwcGxpZXMgdG8gYWxsIE5DUjUzQzhYWCBjaGlwcyBpbiBmYXN0IAorU0NTSS0yIG1vZGUuCisKK1BlcmlvZHMgYXJlIGluIG5hbm8tc2Vjb25kcyBhbmQgc3BlZWRzIGFyZSBpbiBNZWdhLXRyYW5zZmVycyBwZXIgc2Vjb25kLgorMSBNZWdhLXRyYW5zZmVycy9zZWNvbmQgbWVhbnMgMSBNQi9zIHdpdGggOCBiaXRzIFNDU0kgYW5kIDIgTUIvcyB3aXRoIAorV2lkZTE2IFNDU0kuCisKKzE2LjEgU3luY2hyb25vdXMgdGltaW5ncyBmb3IgNTNDODk1LCA1M0M4NzUgYW5kIDUzQzg2MCBTQ1NJIGNvbnRyb2xsZXJzCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVnb3RpYXRlZCAgICAgICAgICAgICAgICAgICAgIE5DUiBzZXR0aW5ncworIEZhY3RvciAgIFBlcmlvZCAgIFNwZWVkICAgICAgICBQZXJpb2QgICBTcGVlZAorIC0tLS0tLSAgIC0tLS0tLSAgIC0tLS0tLSAgICAgICAtLS0tLS0gICAtLS0tLS0KKyAxMCAgICAgICAyNSAgICAgICA0MC4wMDAgICAgICAgMjUgICAgICAgNDAuMDAwICAgKDUzQzg5NSBvbmx5KQorIDExICAgICAgIDMwLjIgICAgIDMzLjExMiAgICAgICAzMS4yNSAgICAzMi4wMDAgICAoNTNDODk1IG9ubHkpCisgMTIgICAgICAgNTAgICAgICAgMjAuMDAwICAgICAgIDUwICAgICAgIDIwLjAwMAorIDEzICAgICAgIDUyICAgICAgIDE5LjIzMCAgICAgICA2MiAgICAgICAxNi4wMDAKKyAxNCAgICAgICA1NiAgICAgICAxNy44NTcgICAgICAgNjIgICAgICAgMTYuMDAwCisgMTUgICAgICAgNjAgICAgICAgMTYuNjY2ICAgICAgIDYyICAgICAgIDE2LjAwMAorIDE2ICAgICAgIDY0ICAgICAgIDE1LjYyNSAgICAgICA3NSAgICAgICAxMy4zMzMKKyAxNyAgICAgICA2OCAgICAgICAxNC43MDUgICAgICAgNzUgICAgICAgMTMuMzMzCisgMTggICAgICAgNzIgICAgICAgMTMuODg4ICAgICAgIDc1ICAgICAgIDEzLjMzMworIDE5ICAgICAgIDc2ICAgICAgIDEzLjE1NyAgICAgICA4NyAgICAgICAxMS40MjgKKyAyMCAgICAgICA4MCAgICAgICAxMi41MDAgICAgICAgODcgICAgICAgMTEuNDI4CisgMjEgICAgICAgODQgICAgICAgMTEuOTA0ICAgICAgIDg3ICAgICAgIDExLjQyOAorIDIyICAgICAgIDg4ICAgICAgIDExLjM2MyAgICAgICA5MyAgICAgICAxMC42NjYKKyAyMyAgICAgICA5MiAgICAgICAxMC44NjkgICAgICAgOTMgICAgICAgMTAuNjY2CisgMjQgICAgICAgOTYgICAgICAgMTAuNDE2ICAgICAgMTAwICAgICAgIDEwLjAwMAorIDI1ICAgICAgMTAwICAgICAgIDEwLjAwMCAgICAgIDEwMCAgICAgICAxMC4wMDAKKyAyNiAgICAgIDEwNCAgICAgICAgOS42MTUgICAgICAxMTIgICAgICAgIDguODg4CisgMjcgICAgICAxMDggICAgICAgIDkuMjU5ICAgICAgMTEyICAgICAgICA4Ljg4OAorIDI4ICAgICAgMTEyICAgICAgICA4LjkyOCAgICAgIDExMiAgICAgICAgOC44ODgKKyAyOSAgICAgIDExNiAgICAgICAgOC42MjAgICAgICAxMjUgICAgICAgIDguMDAwCisgMzAgICAgICAxMjAgICAgICAgIDguMzMzICAgICAgMTI1ICAgICAgICA4LjAwMAorIDMxICAgICAgMTI0ICAgICAgICA4LjA2NCAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAzMiAgICAgIDEyOCAgICAgICAgNy44MTIgICAgICAxMzEgICAgICAgIDcuNjE5CisgMzMgICAgICAxMzIgICAgICAgIDcuNTc1ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM0ICAgICAgMTM2ICAgICAgICA3LjM1MiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNSAgICAgIDE0MCAgICAgICAgNy4xNDIgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzYgICAgICAxNDQgICAgICAgIDYuOTQ0ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM3ICAgICAgMTQ4ICAgICAgICA2Ljc1NiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzOCAgICAgIDE1MiAgICAgICAgNi41NzggICAgICAxNzUgICAgICAgIDUuNzE0CisgMzkgICAgICAxNTYgICAgICAgIDYuNDEwICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQwICAgICAgMTYwICAgICAgICA2LjI1MCAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MSAgICAgIDE2NCAgICAgICAgNi4wOTcgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDIgICAgICAxNjggICAgICAgIDUuOTUyICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQzICAgICAgMTcyICAgICAgICA1LjgxMyAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0NCAgICAgIDE3NiAgICAgICAgNS42ODEgICAgICAxODcgICAgICAgIDUuMzMzCisgNDUgICAgICAxODAgICAgICAgIDUuNTU1ICAgICAgMTg3ICAgICAgICA1LjMzMworIDQ2ICAgICAgMTg0ICAgICAgICA1LjQzNCAgICAgIDE4NyAgICAgICAgNS4zMzMKKyA0NyAgICAgIDE4OCAgICAgICAgNS4zMTkgICAgICAyMDAgICAgICAgIDUuMDAwCisgNDggICAgICAxOTIgICAgICAgIDUuMjA4ICAgICAgMjAwICAgICAgICA1LjAwMAorIDQ5ICAgICAgMTk2ICAgICAgICA1LjEwMiAgICAgIDIwMCAgICAgICAgNS4wMDAKKworCisxNi4yIFN5bmNocm9ub3VzIHRpbWluZ3MgZm9yIGZhc3QgU0NTSS0yIDUzQzhYWCBjb250cm9sbGVycworCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lZ290aWF0ZWQgICAgICAgICAgICAgICAgICAgICBOQ1Igc2V0dGluZ3MKKyBGYWN0b3IgICBQZXJpb2QgICBTcGVlZCAgICAgICAgUGVyaW9kICAgU3BlZWQKKyAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAgICAgLS0tLS0tICAgLS0tLS0tCisgMjUgICAgICAxMDAgICAgICAgMTAuMDAwICAgICAgMTAwICAgICAgIDEwLjAwMAorIDI2ICAgICAgMTA0ICAgICAgICA5LjYxNSAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAyNyAgICAgIDEwOCAgICAgICAgOS4yNTkgICAgICAxMjUgICAgICAgIDguMDAwCisgMjggICAgICAxMTIgICAgICAgIDguOTI4ICAgICAgMTI1ICAgICAgICA4LjAwMAorIDI5ICAgICAgMTE2ICAgICAgICA4LjYyMCAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAzMCAgICAgIDEyMCAgICAgICAgOC4zMzMgICAgICAxMjUgICAgICAgIDguMDAwCisgMzEgICAgICAxMjQgICAgICAgIDguMDY0ICAgICAgMTI1ICAgICAgICA4LjAwMAorIDMyICAgICAgMTI4ICAgICAgICA3LjgxMiAgICAgIDEzMSAgICAgICAgNy42MTkKKyAzMyAgICAgIDEzMiAgICAgICAgNy41NzUgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzQgICAgICAxMzYgICAgICAgIDcuMzUyICAgICAgMTUwICAgICAgICA2LjY2NgorIDM1ICAgICAgMTQwICAgICAgICA3LjE0MiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNiAgICAgIDE0NCAgICAgICAgNi45NDQgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzcgICAgICAxNDggICAgICAgIDYuNzU2ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM4ICAgICAgMTUyICAgICAgICA2LjU3OCAgICAgIDE3NSAgICAgICAgNS43MTQKKyAzOSAgICAgIDE1NiAgICAgICAgNi40MTAgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDAgICAgICAxNjAgICAgICAgIDYuMjUwICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQxICAgICAgMTY0ICAgICAgICA2LjA5NyAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MiAgICAgIDE2OCAgICAgICAgNS45NTIgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDMgICAgICAxNzIgICAgICAgIDUuODEzICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQ0ICAgICAgMTc2ICAgICAgICA1LjY4MSAgICAgIDE4NyAgICAgICAgNS4zMzMKKyA0NSAgICAgIDE4MCAgICAgICAgNS41NTUgICAgICAxODcgICAgICAgIDUuMzMzCisgNDYgICAgICAxODQgICAgICAgIDUuNDM0ICAgICAgMTg3ICAgICAgICA1LjMzMworIDQ3ICAgICAgMTg4ICAgICAgICA1LjMxOSAgICAgIDIwMCAgICAgICAgNS4wMDAKKyA0OCAgICAgIDE5MiAgICAgICAgNS4yMDggICAgICAyMDAgICAgICAgIDUuMDAwCisgNDkgICAgICAxOTYgICAgICAgIDUuMTAyICAgICAgMjAwICAgICAgICA1LjAwMAorCisKKzE3LiBTZXJpYWwgTlZSQU0gKGFkZGVkIGJ5IFJpY2hhcmQgV2FsdGhhbTogZG9ybW91c2VAZmFyc3JvYnQuZGVtb24uY28udWspCisKKzE3LjEgRmVhdHVyZXMKKworRW5hYmxpbmcgc2VyaWFsIE5WUkFNIHN1cHBvcnQgZW5hYmxlcyBkZXRlY3Rpb24gb2YgdGhlIHNlcmlhbCBOVlJBTSBpbmNsdWRlZAorb24gU3ltYmlvcyBhbmQgc29tZSBTeW1iaW9zIGNvbXBhdGlibGUgaG9zdCBhZGFwdG9ycywgYW5kIFRla3JhbSBib2FyZHMuIFRoZSAKK3NlcmlhbCBOVlJBTSBpcyB1c2VkIGJ5IFN5bWJpb3MgYW5kIFRla3JhbSB0byBob2xkIHNldCB1cCBwYXJhbWV0ZXJzIGZvciB0aGUgCitob3N0IGFkYXB0b3IgYW5kIGl0J3MgYXR0YWNoZWQgZHJpdmVzLgorCitUaGUgU3ltYmlvcyBOVlJBTSBhbHNvIGhvbGRzIGRhdGEgb24gdGhlIGJvb3Qgb3JkZXIgb2YgaG9zdCBhZGFwdG9ycyBpbiBhCitzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIGhvc3QgYWRhcHRvci4gVGhpcyBlbmFibGVzIHRoZSBvcmRlciBvZiBzY2FubmluZwordGhlIGNhcmRzIGZvciBkcml2ZXMgdG8gYmUgY2hhbmdlZCBmcm9tIHRoZSBkZWZhdWx0IHVzZWQgZHVyaW5nIGhvc3QgYWRhcHRvcgorZGV0ZWN0aW9uLgorCitUaGlzIGNhbiBiZSBkb25lIHRvIGEgbGltaXRlZCBleHRlbnQgYXQgdGhlIG1vbWVudCB1c2luZyAicmV2ZXJzZSBwcm9iZSIgYnV0Cit0aGlzIG9ubHkgY2hhbmdlcyB0aGUgb3JkZXIgb2YgZGV0ZWN0aW9uIG9mIGRpZmZlcmVudCB0eXBlcyBvZiBjYXJkcy4gVGhlCitOVlJBTSBib290IG9yZGVyIHNldHRpbmdzIGNhbiBkbyB0aGlzIGFzIHdlbGwgYXMgY2hhbmdlIHRoZSBvcmRlciB0aGUgc2FtZQordHlwZXMgb2YgY2FyZHMgYXJlIHNjYW5uZWQgaW4sIHNvbWV0aGluZyAicmV2ZXJzZSBwcm9iZSIgY2Fubm90IGRvLgorCitUZWtyYW0gYm9hcmRzIHVzaW5nIFN5bWJpb3MgY2hpcHMsIERDMzkwVy9GL1UsIHdoaWNoIGhhdmUgTlZSQU0gYXJlIGRldGVjdGVkCithbmQgdGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gU3ltYmlvcyBjb21wYXRpYmxlIGFuZCBUZWtyYW0gaG9zdCAKK2FkYXB0b3JzLiBUaGlzIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgU3ltYmlvcyBjb21wYXRpYmxlICJkaWZmIiBzZXR0aW5nCitpbmNvcnJlY3RseSBzZXQgb24gVGVrcmFtIGJvYXJkcyBpZiB0aGUgQ09ORklHX1NDU0lfNTNDOFhYX1NZTUJJT1NfQ09NUEFUIAorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgc2V0IGVuYWJsaW5nIGJvdGggU3ltYmlvcyBhbmQgVGVrcmFtIGJvYXJkcyB0byBiZSAKK3VzZWQgdG9nZXRoZXIgd2l0aCB0aGUgU3ltYmlvcyBjYXJkcyB1c2luZyBhbGwgdGhlaXIgZmVhdHVyZXMsIGluY2x1ZGluZworImRpZmYiIHN1cHBvcnQuICgibGVkIHBpbiIgc3VwcG9ydCBmb3IgU3ltYmlvcyBjb21wYXRpYmxlIGNhcmRzIGNhbiByZW1haW4KK2VuYWJsZWQgd2hlbiB1c2luZyBUZWtyYW0gY2FyZHMuIEl0IGRvZXMgbm90aGluZyB1c2VmdWwgZm9yIFRla3JhbSBob3N0CithZGFwdG9ycyBidXQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMgZWl0aGVyLikKKworCisxNy4yIFN5bWJpb3MgTlZSQU0gbGF5b3V0CisKK3R5cGljYWwgZGF0YSBhdCBOVlJBTSBhZGRyZXNzIDB4MTAwICg1M2M4MTBhIE5WUkFNKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAwIDAwCis2NCAwMQorOGUgMGIKKworMDAgMzAgMDAgMDAgMDAgMDAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgMDQgMTAgMDQgMDAgMDAgCisKKzA0IDAwIDBmIDAwIDAwIDEwIDAwIDUwIDAwIDAwIDAxIDAwIDAwIDYyIAorMDQgMDAgMDMgMDAgMDAgMTAgMDAgNTggMDAgMDAgMDEgMDAgMDAgNjMgCiswNCAwMCAwMSAwMCAwMCAxMCAwMCA0OCAwMCAwMCAwMSAwMCAwMCA2MSAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworZmUgZmUKKzAwIDAwCiswMCAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05WUkFNIGxheW91dCBkZXRhaWxzCisKK05WUkFNIEFkZHJlc3MgMHgwMDAtMHgwZmYgbm90IHVzZWQKKyAgICAgICAgICAgICAgMHgxMDAtMHgyNmYgaW5pdGlhbGlzZWQgZGF0YQorICAgICAgICAgICAgICAweDI3MC0weDdmZiBub3QgdXNlZAorCitnZW5lcmFsIGxheW91dAorCisgICAgICAgIGhlYWRlciAgLSAgIDYgYnl0ZXMsCisgICAgICAgIGRhdGEgICAgLSAzNTYgYnl0ZXMgKGNoZWNrc3VtIGlzIGJ5dGUgc3VtIG9mIHRoaXMgZGF0YSkKKyAgICAgICAgdHJhaWxlciAtICAgNiBieXRlcworICAgICAgICAgICAgICAgICAgLS0tCisgICAgICAgIHRvdGFsICAgICAzNjggYnl0ZXMKKworZGF0YSBhcmVhIGxheW91dAorCisgICAgICAgIGNvbnRyb2xsZXIgc2V0IHVwICAtICAyMCBieXRlcworICAgICAgICBib290IGNvbmZpZ3VyYXRpb24gLSAgNTYgYnl0ZXMgKDR4MTQgYnl0ZXMpCisgICAgICAgIGRldmljZSBzZXQgdXAgICAgICAtIDEyOCBieXRlcyAoMTZ4OCBieXRlcykKKyAgICAgICAgdW51c2VkIChzcGFyZT8pICAgIC0gMTUyIGJ5dGVzICgxOXg4IGJ5dGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0KKyAgICAgICAgdG90YWwgICAgICAgICAgICAgICAgMzU2IGJ5dGVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitoZWFkZXIKKworMDAgMDAgICAtID8/IHN0YXJ0IG1hcmtlcgorNjQgMDEgICAtIGJ5dGUgY291bnQgKGxzYi9tc2IgZXhjbHVkZXMgaGVhZGVyL3RyYWlsZXIpCis4ZSAwYiAgIC0gY2hlY2tzdW0gKGxzYi9tc2IgZXhjbHVkZXMgaGVhZGVyL3RyYWlsZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29udHJvbGxlciBzZXQgdXAKKworMDAgMzAgMDAgMDAgMDAgMDAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgMDQgMTAgMDQgMDAgMDAKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgIC0tIGhvc3QgSUQKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgIC0tUmVtb3ZhYmxlIE1lZGlhIFN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMCA9IG5vbmUKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMSA9IEJvb3RhYmxlIERldmljZQorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICAweDAyID0gQWxsIHdpdGggTWVkaWEKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgIC0tZmxhZyBiaXRzIDIKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAweDAwMDAwMDAxPSBzY2FuIG9yZGVyIGhpLT5sb3cKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgKGRlZmF1bHQgMHgwMCAtIHNjYW4gbG93LT5oaSkKKyAgICAgICAgICAgICAgICAgICAgLS1mbGFnIGJpdHMgMQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIHNjYW0gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAgcGFyaXR5IGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwIHZlcmJvc2UgYm9vdCBtc2dzCisKK3JlbWFpbmluZyBieXRlcyB1bmtub3duIC0gdGhleSBkbyBub3QgYXBwZWFyIHRvIGNoYW5nZSBpbiBteQorY3VycmVudCBzZXQgdXAgZm9yIGFueSBvZiB0aGUgY29udHJvbGxlcnMuCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCisoUmVtb3ZhYmxlIE1lZGlhIGFkZGVkIFN5bWJpb3MgQklPUyB2ZXJzaW9uIDQuMDkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9vdCBjb25maWd1cmF0aW9uCisKK2Jvb3Qgb3JkZXIgc2V0IGJ5IG9yZGVyIG9mIHRoZSBkZXZpY2VzIGluIHRoaXMgdGFibGUKKworMDQgMDAgMGYgMDAgMDAgMTAgMDAgNTAgMDAgMDAgMDEgMDAgMDAgNjIgLS0gMXN0IGNvbnRyb2xsZXIKKzA0IDAwIDAzIDAwIDAwIDEwIDAwIDU4IDAwIDAwIDAxIDAwIDAwIDYzICAgIDJuZCBjb250cm9sbGVyCiswNCAwMCAwMSAwMCAwMCAxMCAwMCA0OCAwMCAwMCAwMSAwMCAwMCA2MSAgICAzcmQgY29udHJvbGxlcgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgICAgNHRoIGNvbnRyb2xsZXIKKyAgICAgICB8ICB8ICB8ICB8ICAgICB8ICAgICAgICB8ICAgICB8ICB8CisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgfCAgICAgIC0tLS0gUENJIGlvIHBvcnQgYWRyCisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgIC0tMHgwMSBpbml0L3NjYW4gYXQgYm9vdCB0aW1lCisgICAgICAgfCAgfCAgfCAgfCAgICAgIC0tUENJIGRldmljZS9mdW5jdGlvbiBudW1iZXIgKDB4ZGRkZGRmZmYpCisgICAgICAgfCAgfCAgIC0tLS0tID8/IFBDSSB2ZW5kb3IgSUQgKGxzYi9tc2IpCisgICAgICAgIC0tLS1QQ0kgZGV2aWNlIElEIChsc2IvbXNiKQorCis/PyB1c2Ugb2YgdGhpcyBkYXRhIGlzIGEgZ3Vlc3MgYnV0IHNlZW1zIHJlYXNvbmFibGUKKworcmVtYWluaW5nIGJ5dGVzIHVua25vd24gLSB0aGV5IGRvIG5vdCBhcHBlYXIgdG8gY2hhbmdlIGluIG15CitjdXJyZW50IHNldCB1cAorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RldmljZSBzZXQgdXAgKHVwIHRvIDE2IGRldmljZXMgLSBpbmNsdWRlcyBjb250cm9sbGVyKQorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAtIGlkIDAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIC0gaWQgMTUKKyB8ICAgICB8ICB8ICB8ICAgICB8ICB8CisgfCAgICAgfCAgfCAgfCAgICAgIC0tLS10aW1lb3V0IChsc2IvbXNiKQorIHwgICAgIHwgIHwgICAtLXN5bmNoIHBlcmlvZCAoMHg/PyA0MCBNdHJhbnMvc2VjLSBmYXN0IDQwKSAocHJvYmFibHkgMHgyOCkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4MzAgMjAgTXRyYW5zL3NlYy0gZmFzdCAyMCkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4NjQgMTAgTXRyYW5zL3NlYy0gZmFzdCApCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweGM4ICA1IE10cmFucy9zZWMpCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDAwICBhc3luY2hyb25vdXMpCisgfCAgICAgfCAgIC0tID8/IG1heCBzeW5jIG9mZnNldCAoMHgwOCBpbiBOVlJBTSBvbiA1M2M4MTBhKSAKKyB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwIGluIE5WUkFNIG9uIDUzYzg3NSkKKyB8ICAgICAgLS1kZXZpY2UgYnVzIHdpZHRoICgweDA4IG5hcnJvdykKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwIDE2IGJpdCB3aWRlKQorICAtLWZsYWcgYml0cworICAgIDB4MDAwMDAwMDEgLSBkaXNjb25uZWN0IGVuYWJsZWQKKyAgICAweDAwMDAwMDEwIC0gc2NhbiBhdCBib290IHRpbWUKKyAgICAweDAwMDAwMTAwIC0gc2NhbiBsdW5zCisgICAgMHgwMDAwMTAwMCAtIHF1ZXVlIHRhZ3MgZW5hYmxlZAorCityZW1haW5pbmcgYnl0ZXMgdW5rbm93biAtIHRoZXkgZG8gbm90IGFwcGVhciB0byBjaGFuZ2UgaW4gbXkKK2N1cnJlbnQgc2V0IHVwCisKKz8/IHVzZSBvZiB0aGlzIGRhdGEgaXMgYSBndWVzcyBidXQgc2VlbXMgcmVhc29uYWJsZSAKKyhidXQgaXQgY291bGQgYmUgbWF4IGJ1cyB3aWR0aCkKKworZGVmYXVsdCBzZXQgdXAgZm9yIDUzYzgxMGEgTlZSQU0KK2RlZmF1bHQgc2V0IHVwIGZvciA1M2M4NzUgTlZSQU0gLSBidXMgd2lkdGggICAgIC0gMHgxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN5bmMgb2Zmc2V0ID8gLSAweDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3luYyBwZXJpb2QgICAtIDB4MzAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis/PyBzcGFyZSBkZXZpY2Ugc3BhY2UgKDMyIGJpdCBidXMgPz8pCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAoMTl4OGJ5dGVzKQorLgorLgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0cmFpbGVyCisKK2ZlIGZlICAgLSA/IGVuZCBtYXJrZXIgPworMDAgMDAKKzAwIDAwCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworMTcuMyBUZWtyYW0gTlZSQU0gbGF5b3V0CisKK252cmFtIDY0eDE2ICgxMDI0IGJpdCkKKworRHJpdmUgc2V0dGluZ3MKKworRHJpdmUgSUQgMC0xNSAoYWRkciAweDB5eXl5MCA9IGRldmljZSBzZXR1cCwgeXl5eSA9IElEKQorICAgICAgICAgICAgICAoYWRkciAweDB5eXl5MSA9IDB4MDAwMCkKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgIC0tLS0tIHBhcml0eSBjaGVjayAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgIC0tLS0tLS0gc3luYyBuZWcgICAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8ICAtLS0tLS0tLS0gZGlzY29ubmVjdCAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgIC0tLS0tLS0tLS0tIHN0YXJ0IGNtZCAgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8ICAtLS0tLS0tLS0tLS0tLSB0YWdnZWQgY21kcyAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgLS0tLS0tLS0tLS0tLS0tLSB3aWRlIG5lZyAgICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3luYyByYXRlICAgICAgMCAtIDEwLjAgTXRyYW5zL3NlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gIDguMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDYuNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gIDUuNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gIDUuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC0gIDQuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IC0gIDMuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IC0gIDIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IC0gIDIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0gMjAuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5IC0gMTYuNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIC0gMTMuOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC0gMTEuOQorCitHbG9iYWwgc2V0dGluZ3MKKworSG9zdCBmbGFncyAwIChhZGRyIDB4MTAwMDAwLCAzMikgCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgfCB8IHwgfCAgfCB8IHwgfCAgICAgICAgICAgfCB8IHwgfAorICAgIHwgfCB8IHwgIHwgfCB8IHwgICAgICAgICAgICAtLS0tLS0tLS0tLSBob3N0IElEICAgIDB4MDAgLSAweDBmCisgICAgfCB8IHwgfCAgfCB8IHwgfAorICAgIHwgfCB8IHwgIHwgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBwb3J0IGZvciAgICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgID4gMiBkcml2ZXMgICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwgfCB8IAorICAgIHwgfCB8IHwgIHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBwb3J0IGRyaXZlcyAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gMUdieXRlcyAgICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwgfAorICAgIHwgfCB8IHwgIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBidXMgcmVzZXQgb24gICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93ZXIgb24gICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwKKyAgICB8IHwgfCB8ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWN0aXZlIG5lZyAgICAgMCAtIG9mZgorICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwgfCB8CisgICAgfCB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGltbSBzZWVrICAgICAgIDAgLSBvZmYKKyAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8IHwKKyAgICB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NhbiBsdW5zICAgICAgMCAtIG9mZgorICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVtb3ZhYmxlICAgICAgMCAtIGRpc2FibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgQklPUyBkZXYgICAgMSAtIGJvb3QgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSBhbGwKKworSG9zdCBmbGFncyAxIChhZGRyIDB4MTAwMDAxLCAzMykKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgIHwgfCB8IAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgIC0tLS0tLS0tLSBib290IGRlbGF5ICAgICAwIC0gICAzIHNlYworICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gICA1CisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSAgMTAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtICAyMAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gIDMwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgLSAgNjAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAtIDEyMAorICAgICAgICAgICAgICAgfCB8IHwKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWF4IHRhZyBjbWRzICAgMCAtICAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIDE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgLSAzMgorCitIb3N0IGZsYWdzIDIgKGFkZHIgMHgxMDAwMTAsIDM0KQorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gRjIvRjYgZW5hYmxlICAgMCAtIG9mZiA/Pz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uICA/Pz8KKworY2hlY2tzdW0gKGFkZHIgMHgxMTExMTEpCisKK2NoZWNrc3VtID0gMHgxMjM0IC0gKHN1bSBhZGRyIDAtNjMpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmYXVsdCBudnJhbSBkYXRhOgorCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIAorCisweDBmMDcgMHgwNDAwIDB4MDAwMSAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHhmYmJjCisKKworMTguIFN1cHBvcnQgZm9yIEJpZyBFbmRpYW4KKworVGhlIFBDSSBsb2NhbCBidXMgaGFzIGJlZW4gcHJpbWFyaWx5IGRlc2lnbmVkIGZvciB4ODYgYXJjaGl0ZWN0dXJlLgorQXMgYSBjb25zZXF1ZW5jZSwgUENJIGRldmljZXMgZ2VuZXJhbGx5IGV4cGVjdCBEV09SRFMgdXNpbmcgbGl0dGxlIGVuZGlhbiAKK2J5dGUgb3JkZXJpbmcuCisKKzE4LjEgQmlnIEVuZGlhbiBDUFUKKworSW4gb3JkZXIgdG8gc3VwcG9ydCBOQ1IgY2hpcHMgb24gYSBCaWcgRW5kaWFuIGFyY2hpdGVjdHVyZSB0aGUgZHJpdmVyIGhhcyB0byAKK3BlcmZvcm0gYnl0ZSByZW9yZGVyaW5nIGVhY2ggdGltZSBpdCBpcyBuZWVkZWQuIFRoaXMgZmVhdHVyZSBoYXMgYmVlbiAKK2FkZGVkIHRvIHRoZSBkcml2ZXIgYnkgQ29ydCA8Y29ydEBjcy5ubXQuZWR1PiBhbmQgaXMgYXZhaWxhYmxlIGluIGRyaXZlciAKK3ZlcnNpb24gMi41IGFuZCBsYXRlciBvbmVzLiBGb3IgdGhlIG1vbWVudCBCaWcgRW5kaWFuIHN1cHBvcnQgaGFzIG9ubHkgCitiZWVuIHRlc3RlZCBvbiBMaW51eC9QUEMgKFBvd2VyUEMpLgorCisxOC4yIE5DUiBjaGlwIGluIEJpZyBFbmRpYW4gbW9kZSBvZiBvcGVyYXRpb25zCisKK0l0IGNhbiBiZSByZWFkIGluIFNZTUJJT1MgZG9jdW1lbnRhdGlvbiB0aGF0IHNvbWUgY2hpcHMgc3VwcG9ydCBhIHNwZWNpYWwgCitCaWcgRW5kaWFuIG1vZGUsIG9uIHBhcGVyOiA1M0M4MTUsIDUzQzgyNUEsIDUzQzg3NSwgNTNDODc1TiwgNTNDODk1LgorVGhpcyBtb2RlIG9mIG9wZXJhdGlvbnMgaXMgbm90IHNvZnR3YXJlLXNlbGVjdGFibGUsIGJ1dCBuZWVkcyBwaW4gbmFtZWQgCitCaWdMaXQgdG8gYmUgcHVsbGVkLXVwLiBVc2luZyB0aGlzIG1vZGUsIG1vc3Qgb2YgYnl0ZSByZW9yZGVyaW5ncyBzaG91bGQgCitiZSBhdm9pZGVkIHdoZW4gdGhlIGRyaXZlciBpcyBydW5uaW5nIG9uIGEgQmlnIEVuZGlhbiBDUFUuCitEcml2ZXIgdmVyc2lvbiAyLjUgaXMgYWxzbywgaW4gdGhlb3J5LCByZWFkeSBmb3IgdGhpcyBmZWF0dXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFbmQgb2YgTkNSNTNDOFhYIGRyaXZlciBSRUFETUUgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL29zc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL29zc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTc0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvb3NzdC50eHQKQEAgLTAsMCArMSwyMTkgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgb3NzdCBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyh3KSBLdXJ0IEdhcmxvZmYgPGdhcmxvZmZAc3VzZS5kZT4gMTIvMjAwMAorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBvc3N0IGRyaXZlciBhcyBvZiB2ZXJzaW9uIDAuOC54LzAuOS54LCB0aGUgcmVsZWFzZWQKK3ZlcnNpb24gb2YgdGhlIG9zc3QgZHJpdmVyLgorSXQgaXMgaW50ZW5kZWQgdG8gaGVscCBhZHZhbmNlZCB1c2VycyB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIG9zc3QgYW5kIHRvCitnZXQgdGhlbSBzdGFydGVkIHVzaW5nIChhbmQgbWF5YmUgZGVidWdnaW5nKSBpdC4KK0l0IHdvbid0IGFkZHJlc3MgaXNzdWVzIGxpa2UgIkhvdyBkbyBJIGNvbXBpbGUgYSBrZXJuZWw/IiBvciAiSG93IGRvIEkgbG9hZAorYSBtb2R1bGU/IiwgYXMgdGhlc2UgYXJlIHRvbyBiYXNpYy4KK09uY2UgdGhlIE9uU3RyZWFtIGdvdCBtZXJnZWQgaW50byB0aGUgb2ZmaWNpYWwga2VybmVsLCB0aGUgZGlzdHJvIG1ha2Vycword2lsbCBwcm92aWRlIHRoZSBPblN0cmVhbSBzdXBwb3J0IGZvciB0aG9zZSB3aG8gYXJlIG5vdCBmYW1pbGlhciB3aXRoCitoYWNraW5nIHRoZWlyIGtlcm5lbHMuCisKKworUHVycG9zZQorLS0tLS0tLQorVGhlIG9zc3QgZHJpdmVyIHdhcyBkZXZlbG9wZWQsIGJlY2F1c2UgdGhlIHN0YW5kYXJkIFNDU0kgdGFwZSBkcml2ZXIgaW4KK0xpbnV4LCBzdCwgZG9lcyBub3Qgc3VwcG9ydCB0aGUgT25TdHJlYW0gU0MteDAgU0NTSSB0YXBlLiBUaGUgc3QgaXMgbm90IHRvCitibGFtZSBmb3IgdGhhdCwgYXMgdGhlIE9uU3RyZWFtIHRhcGUgZHJpdmVzIGRvIG5vdCBzdXBwb3J0IHRoZSBzdGFuZGFyZCBTQ1NJCitjb21tYW5kIHNldCBmb3IgU2VyaWFsIEFjY2VzcyBTdG9yYWdlIERldmljZXMgKFNBU0RzKSwgd2hpY2ggYmFzaWNhbGx5Citjb3JyZXNwb25kcyB0byB0aGUgUUlDLTE1NyBzcGVjLgorTmV2ZXJ0aGVsZXNzLCB0aGUgT25TdHJlYW0gdGFwZXMgYXJlIG5pY2UgcGllY2VzIG9mIGhhcmR3YXJlIGFuZCB0aGVyZWZvcmUKK3RoZSBvc3N0IGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIHRvIG1ha2UgdGhlc2UgdGFwZSBkZXZzIHN1cHBvcnRlZCBieSBMaW51eC4KK1RoZSBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZS4gSXQncyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdQTCBhbmQgcGxhbm5lZCB0bworYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBtYWluc3RyZWFtIGtlcm5lbC4KKworCitJbXBsZW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK1RoZSBvc3N0IGlzIGEgbmV3IGhpZ2gtbGV2ZWwgU0NTSSBkcml2ZXIsIGp1c3QgbGlrZSBzdCwgc3IsIHNkIGFuZCBzZy4gSXQKK2NhbiBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgbG9hZGVkIGFzIGEgbW9kdWxlLgorQXMgaXQgcmVwcmVzZW50cyBhIG5ldyBkZXZpY2UsIGl0IGdvdCBhc3NpZ25lZCBhIG5ldyBkZXZpY2Ugbm9kZTogL2Rldi9vc3N0WAorYXJlIGNoYXJhY3RlciBkZXZpY2VzIHdpdGggbWFqb3Igbm8gMjA2IGFuZCBtaW5vciBudW1iZXJzIGxpa2UgdGhlIC9kZXYvc3RYCitkZXZpY2VzLiBJZiB0aG9zZSBhcmUgbm90IHByZXNlbnQsIHlvdSBtYXkgY3JlYXRlIHRoZW0gYnkgY2FsbGluZworTWFrZWRldnMuc2ggYXMgcm9vdCAoc2VlIGJlbG93KS4KK1RoZSBkcml2ZXIgc3RhcnRlZCBiZWluZyBhIGNvcHkgb2Ygc3QgYW5kIGFzIHN1Y2gsIHRoZSBvc3N0IGRldmljZXMnCitiZWhhdmlvciBsb29rcyB2ZXJ5IG11Y2ggdGhlIHNhbWUgYXMgc3QgdG8gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuCisKKworSGlzdG9yeQorLS0tLS0tLQorSW4gdGhlIGZpcnN0IHBsYWNlLCBvc3N0IHNoYXJlZCBpdCdzIGlkZW50aXR5IHZlcnkgbXVjaCB3aXRoIHN0LiBUaGF0IG1lYW50Cit0aGF0IGl0IHVzZWQgdGhlIHNhbWUga2VybmVsIHN0cnVjdHVyZXMgYW5kIHRoZSBzYW1lIGRldmljZSBub2RlIGFzIHN0LgorU28geW91IGNvdWxkIG9ubHkgaGF2ZSBlaXRoZXIgb2YgdGhlbSBiZWluZyBwcmVzZW50IGluIHRoZSBrZXJuZWwuIFRoaXMgaGFzCitiZWVuIGZpeGVkIGJ5IHJlZ2lzdGVyaW5nIGFuIG93biBkZXZpY2UsIG5vdy4KK3N0IGFuZCBvc3N0IGNhbiBjb2V4aXN0LCBlYWNoIG9ubHkgYWNjZXNzaW5nIHRoZSBkZXZpY2VzIGl0IGNhbiBzdXBwb3J0IGJ5Cit0aGVtc2VsdmVzLgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCitvc3N0IGdvdCBpbnRlZ3JhdGVkIGludG8gdGhlIGxpbnV4IGtlcm5lbC4gU2VsZWN0IGl0IGR1cmluZyBrZXJuZWwKK2NvbmZpZ3VyYXRpb24gYXMgbW9kdWxlIG9yIGNvbXBpbGUgc3RhdGljYWxseSBpbnRvIHRoZSBrZXJuZWwuCitDb21waWxlIHlvdXIga2VybmVsIGFuZCBpbnN0YWxsIHRoZSBtb2R1bGVzLgorCitOb3csIHlvdXIgb3NzdCBkcml2ZXIgaXMgaW5zaWRlIHRoZSBrZXJuZWwgb3IgYXZhaWxhYmxlIGFzIGEgbW9kdWxlLAorZGVwZW5kaW5nIG9uIHlvdXIgY2hvaWNlIGR1cmluZyBrZXJuZWwgY29uZmlnLiBZb3UgbWF5IHN0aWxsIG5lZWQgdG8gY3JlYXRlCit0aGUgZGV2aWNlIG5vZGVzIGJ5IGNhbGxpbmcgdGhlIE1ha2VkZXZzLnNoIHNjcmlwdCAoc2VlIGJlbG93KSBtYW51YWxseSwKK3VubGVzcyB5b3UgdXNlIGEgZGV2ZnMga2VybmVsLCB3aGVyZSB0aGlzIHdvbid0IGJlIG5lZWRlZC4KKworVG8gbG9hZCB5b3VyIG1vZHVsZSwgeW91IG1heSB1c2UgdGhlIGNvbW1hbmQgCittb2Rwcm9iZSBvc3N0CithcyByb290LiBkbWVzZyBzaG91bGQgc2hvdyB5b3UsIHdoZXRoZXIgeW91ciBPblN0cmVhbSB0YXBlcyBoYXZlIGJlZW4KK3JlY29nbml6ZWQuCisKK0lmIHlvdSB3YW50IHRvIGhhdmUgdGhlIG1vZHVsZSBhdXRvbG9hZGVkIG9uIGFjY2VzcyB0byAvZGV2L29zc3QsIHlvdSBtYXkKK2FkZCBzb21ldGhpbmcgbGlrZQorYWxpYXMgY2hhci1tYWpvci0yMDYgb3NzdAordG8geW91ciAvZXRjL21vZHByb2JlLmNvbmYgKGJlZm9yZSAyLjY6IG1vZHVsZXMuY29uZikuCisKK1lvdSBtYXkgZmluZCBpdCBjb252ZW5pZW50IHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgCitsbiAtcyBub3NzdDAgL2Rldi90YXBlCit0byBtYWtlIHByb2dyYW1zIGFzc3VtaW5nIGEgZGVmYXVsdCBuYW1lIG9mIC9kZXYvdGFwZSBtb3JlIGNvbnZlbmllbnQgdG8KK3VzZS4KKworVGhlIGRldmljZSBub2RlcyBmb3Igb3NzdCBoYXZlIHRvIGJlIGNyZWF0ZWQuIFVzZSB0aGUgTWFrZWRldnMuc2ggc2NyaXB0CithdHRhY2hlZCB0byB0aGlzIGZpbGUuCisKKworVXNpbmcgaXQKKy0tLS0tLS0tCitZb3UgbWF5IHVzZSB0aGUgT25TdHJlYW0gdGFwZSBkcml2ZXIgd2l0aCB5b3VyIHN0YW5kYXJkIGJhY2t1cCBzb2Z0d2FyZSwKK3doaWNoIG1heSBiZSB0YXIsIGNwaW8sIGFtYW5kYSwgYXJrZWlhLCBCUlUsIExvbmUgVGFyLCAuLi4KK2J5IHNwZWNpZnlpbmcgL2Rldi8obilvc3N0MCBhcyB0aGUgdGFwZSBkZXZpY2UgdG8gdXNlIG9yIHVzaW5nIHRoZSBhYm92ZQorc3ltbGluayB0cmljay4gVGhlIElPQ1RMcyB0byBjb250cm9sIHRhcGUgb3BlcmF0aW9uIGFyZSBhbHNvIG1vc3RseQorc3VwcG9ydGVkIGFuZCB5b3UgbWF5IHRyeSB0aGUgbXQgKG9yIG10X3N0KSBwcm9ncmFtIHRvIGp1bXAgYmV0d2VlbgorZmlsZW1hcmtzLCBlamVjdCB0aGUgdGFwZSwgLi4uCisKK1RoZXJlJ3Mgb25lIGxpbWl0YXRpb246IFlvdSBuZWVkIHRvIHVzZSBhIGJsb2NrIHNpemUgb2YgMzJrQi4KKworKFRoaXMgbGltaXRhdGlvbiBpcyB3b3JrZWQgb24gYW5kIHdpbGwgYmUgZml4ZWQgaW4gdmVyc2lvbiAwLjguOCBvZgorIHRoaXMgZHJpdmVyLikKKworSWYgeW91IGp1c3Qgd2FudCB0byBnZXQgc3RhcnRlZCB3aXRoIHN0YW5kYXJkIHNvZnR3YXJlLCBoZXJlIGlzIGFuIGV4YW1wbGUKK2ZvciBjcmVhdGluZyBhbmQgcmVzdG9yaW5nIGEgZnVsbCBiYWNrdXA6CisjIEJhY2t1cAordGFyIGN2ZiAtIC8gLS1leGNsdWRlIC9wcm9jIHwgYnVmZmVyIC1zIDMyayAtbSAyNE0gLUIgLXQgLW8gL2Rldi9ub3NzdDAKKyMgUmVzdG9yZQorYnVmZmVyIC1zIDMyayAtbSA4TSAtQiAtdCAtaSAvZGV2L29zc3QwIHwgdGFyIHh2ZiAtIC1DIC8KKworVGhlIGJ1ZmZlciBjb21tYW5kIGhhcyBiZWVuIHVzZWQgdG8gYnVmZmVyIHRoZSBkYXRhIGJlZm9yZSBpdCBnb2VzIHRvIHRoZQordGFwZSAob3IgdGhlIGZpbGUgc3lzdGVtKSBpbiBvcmRlciB0byBzbW9vdGggb3V0IHRoZSBkYXRhIHN0cmVhbSBhbmQgcHJldmVudAordGhlIHRhcGUgZnJvbSBuZWVkaW5nIHRvIHN0b3AgYW5kIHJld2luZC4gVGhlIE9uU3RyZWFtIGRvZXMgaGF2ZSBhbiBpbnRlcm5hbAorYnVmZmVyIGFuZCBhIHZhcmlhYmxlIHNwZWVkIHdoaWNoIGhlbHAgdGhpcywgYnV0IGVzcGVjaWFsbHkgb24gd3JpdGluZywgdGhlCitidWZmZXJpbmcgc3RpbGwgcHJvdmVzIHVzZWZ1bCBpbiBtb3N0IGNhc2VzLiBJdCBhbHNvIHBhZHMgdGhlIGRhdGEgdG8KK2d1YXJhbnRlZXMgdGhlIGJsb2NrIHNpemUgb2YgMzJrLiAoT3RoZXJ3aXNlIHlvdSBtYXkgcGFzcyB0aGUgLWI2NCBvcHRpb24gdG8KK3Rhci4pCitFeHBlY3Qgc29tZXRoaW5nIGxpa2UgMS44TUIvcyBmb3IgdGhlIFNDLXgwIGRyaXZlcyBhbmQgMC45TUIvcyBmb3IgdGhlIERJLTMwLgorVGhlIFVTQiBkcml2ZSB3aWxsIGdpdmUgeW91IGFib3V0IDAuN01CL3MuCitPbiBhIGZhc3QgbWFjaGluZSwgeW91IG1heSBwcm9maXQgZnJvbSBzb2Z0d2FyZSBkYXRhIGNvbXByZXNzaW9uICh6IGZsYWcgZm9yCit0YXIpLgorCisKK1VTQiBhbmQgSURFCistLS0tLS0tLS0tLQorVmlhIHRoZSBTQ1NJIGVtdWxhdGlvbiBsYXllcnMgdXNiLXN0b3JhZ2UgYW5kIGlkZS1zY3NpLCB5b3UgY2FuIGFsc28gdXNlIHRoZQorb3NzdCBkcml2ZXIgdG8gZHJpdmUgdGhlIFVTQi0zMCBhbmQgdGhlIERJLTMwIGRyaXZlcy4gKFVuZm9ydHVuYXRlbHksIHRoZXJlCitpcyBubyBzdWNoIGxheWVyIGZvciB0aGUgcGFyYWxsZWwgcG9ydCwgb3RoZXJ3aXNlIHRoZSBEUC0zMCB3b3VsZCB3b3JrIGFzCit3ZWxsLikgRm9yIHRoZSBVU0Igc3VwcG9ydCwgeW91IG5lZWQgdGhlIGxhdGVzdCAyLjQuMC10ZXN0IGtlcm5lbHMgYW5kIHRoZSAKK2xhdGVzdCB1c2Itc3RvcmFnZSBkcml2ZXIgZnJvbSAKK2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy8KK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvY3ZzLz9ncm91cF9pZD0zNTgxCisKK05vdGUgdGhhdCB0aGUgaWRlLXRhcGUgZHJpdmVyIGFzIG9mIDEuMTZmIHVzZXMgYSBzbGlnaHRseSBvdXRkYXRlZCBvbi10YXBlCitmb3JtYXQgYW5kIHRoZXJlZm9yZSBpcyBub3QgY29tcGxldGVseSBpbnRlcm9wZXJhYmxlIHdpdGggb3NzdCB0YXBlcy4KKworVGhlIEFEUi14MCBsaW5lIGlzIGZ1bGx5IFNDU0ktMiBjb21wbGlhbnQgYW5kIGlzIHN1cHBvcnRlZCBieSBzdCwgbm90IG9zc3QuCitUaGUgb24tdGFwZSBmb3JtYXQgaXMgc3VwcG9zZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgdXNlZCBieSBvc3N0LgorCisKK0ZlZWRiYWNrIGFuZCB1cGRhdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGRyaXZlciBkZXZlbG9wbWVudCBpcyBjb29yZGluYXRlZCB0aHJvdWdoIGEgbWFpbGluZyBsaXN0Cis8b3NzdEBsaW51eDEub25zdHJlYW0ubmw+CithIENWUyByZXBvc2l0b3J5IGFuZCBzb21lIHdlYiBwYWdlcy4gCitUaGUgdGVzdGVyJ3MgcGFnZXMgd2hpY2ggY29udGFpbiByZWNlbnQgbmV3cyBhbmQgdXBkYXRlZCBkcml2ZXJzIHRvIGRvd25sb2FkCitjYW4gYmUgZm91bmQgb24KK2h0dHA6Ly9saW51eDEub25zdHJlYW0ubmwvdGVzdC8KKworSWYgeW91IGZpbmQgYW55IHByb2JsZW1zLCBwbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIHRlc3RlcidzIHBhZ2UgaW4gb3JkZXIKK3RvIHNlZSB3aGV0aGVyIHRoZSBwcm9ibGVtIGlzIGFscmVhZHkga25vd24gYW5kIHNvbHZlZC4gT3RoZXJ3aXNlLCBwbGVhc2UKK3JlcG9ydCBpdCB0byB0aGUgbWFpbGluZyBsaXN0LiBZb3VyIGZlZWRiYWNrIGlzIHdlbGNvbWUuIChUaGlzIGhvbGRzIGFsc28KK2ZvciByZXBvcnRzIG9mIHN1Y2Nlc3NmdWwgdXNhZ2UsIG9mIGNvdXJzZS4pIAorSW4gY2FzZSBvZiB0cm91YmxlLCBwbGVhc2UgZG8gYWx3YXlzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvOgorKiBkcml2ZXIgYW5kIGtlcm5lbCB2ZXJzaW9uIHVzZWQgKHNlZSBzeXNsb2cpCisqIGRyaXZlciBtZXNzYWdlcyAoc3lzbG9nKQorKiBTQ1NJIGNvbmZpZyBhbmQgT25TdHJlYW0gRmlybXdhcmUgKC9wcm9jL3Njc2kvc2NzaSkKKyogZGVzY3JpcHRpb24gb2YgZXJyb3IuIElzIGl0IHJlcHJvZHVjaWJsZT8KKyogc29mdHdhcmUgYW5kIGNvbW1hbmRzIHVzZWQKKworWW91IG1heSBzdWJzY3JpYmUgdG8gdGhlIG1haWxpbmcgbGlzdCwgQlRXLCBpdCdzIGEgbWFqb3Jkb21vIGxpc3QuCisKKworU3RhdHVzCistLS0tLS0KKzAuOC4wIHdhcyB0aGUgZmlyc3Qgd2lkZXNwcmVhZCBCRVRBIHJlbGVhc2UuIFNpbmNlIHRoZW4gYSBsb3Qgb2YgcmVwb3J0cworaGF2ZSBiZWVuIHNlbnQsIGJ1dCBtb3N0bHkgcmVwb3J0ZWQgc3VjY2VzcyBvciBvbmx5IG1pbm9yIHRyb3VibGUuCitBbGwgdGhlIGlzc3VlcyBoYXZlIGJlZW4gYWRkcmVzc2VkLgorQ2hlY2sgdGhlIHdlYiBwYWdlcyBmb3IgbW9yZSBpbmZvIGFib3V0IHRoZSBjdXJyZW50IGRldmVsb3BtZW50cy4KKzAuOS54IGlzIHRoZSB0cmVlIGZvciB0aGUgMi4zLzIuNCBrZXJuZWwuCisKKworQWNrbm93bGVkZ21lbnRzCistLS0tLS0tLS0tLS0tLS0tCitUaGUgZHJpdmVyIGhhcyBiZWVuIHN0YXJ0ZWQgYnkgbWFraW5nIGEgY29weSBvZiBLYWkgTWFraXNhcmEncyBzdCBkcml2ZXIuCitNb3N0IG9mIHRoZSBkZXZlbG9wbWVudCBoYXMgYmVlbiBkb25lIGJ5IFdpbGxlbSBSaWVkZS4gVGhlIHByZXNlbmNlIG9mIHRoZQordXNlcnNwYWNlIHByb2dyYW0gb3NnIChvbnN0cmVhbXNnKSBmcm9tIFRlcnJ5IEhhcmRpZSBoYXMgYmVlbiByYXRoZXIKK2hlbHBmdWwuIFRoZSBzYW1lIGhvbGRzIGZvciBHYWRpIE94bWFuJ3MgaWRlLXRhcGUgc3VwcG9ydCBmb3IgdGhlIERJLTMwLgorSSBkaWQgYWRkIHNvbWUgcGF0Y2hlcyB0byB0aG9zZSBkcml2ZXJzIGFzIHdlbGwgYW5kIGNvb3JkaW5hdGVkIHRoaW5ncyBhCitsaXR0bGUgYml0LiAKK05vdGUgdGhhdCBtb3N0IG9mIHRoZW0gZGlkIG1vc3RseSBzcGVuZCB0aGVpciBzcGFyZSB0aW1lIGZvciB0aGUgY3JlYXRpb24gb2YKK3RoaXMgZHJpdmVyLgorVGhlIHBlb3BsZSBmcm9tIE9uU3RyZWFtLCBlc3BlY2lhbGx5IEphY2sgQm9tYmVlY2sgZGlkIHN1cHBvcnQgdGhpcyBwcm9qZWN0CithbmQgYWx3YXlzIHRyaWVkIHRvIGFuc3dlciBIVyBvciBGVyByZWxhdGVkIHF1ZXN0aW9ucy4gRnVydGhlcm1vcmUsIGhlCitwdXNoZWQgdGhlIEZXIGRldmVsb3BlcnMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5ncy4KK1N1U0UgZGlkIHN1cHBvcnQgdGhpcyBwcm9qZWN0IGJ5IGFsbG93aW5nIG1lIHRvIHdvcmsgb24gaXQgZHVyaW5nIG15IHdvcmtpbmcKK3RpbWUgZm9yIHRoZW0gYW5kIGJ5IGludGVncmF0aW5nIHRoZSBkcml2ZXIgaW50byB0aGVpciBkaXN0cm8uCisKK01vcmUgcGVvcGxlIGRpZCBoZWxwIGJ5IHNlbmRpbmcgdXNlZnVsIGNvbW1lbnRzLiBTb3JyeSB0byB0aG9zZSB3aG8gaGF2ZQorYmVlbiBmb3Jnb3R0ZW4uIFRoYW5rcyB0byBhbGwgdGhlIEdOVS9GU0YgYW5kIExpbnV4IGRldmVsb3BlcnMgd2hvIG1hZGUgdGhpcworcGxhdGZvcm0gc3VjaCBhbiBpbnRlcmVzdGluZywgbmljZSBhbmQgc3RhYmxlIHBsYXRmb3JtLgorVGhhbmtzIGdvIHRvIHRob3NlIHdobyB0ZXN0ZWQgdGhlIGRyaXZlcnMgYW5kIGRpZCBzZW5kIHVzZWZ1bCByZXBvcnRzLiBZb3VyCitoZWxwIGlzIG5lZWRlZCEKKworCitNYWtlZGV2cy5zaAorLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorIyBTY3JpcHQgdG8gY3JlYXRlIE9uU3RyZWFtIFNDLXgwIGRldmljZSBub2RlcyAobWFqb3IgMjA2KQorIyBVc2FnZTogTWFrZWRldnMuc2ggW25vcyBbcGF0aCB0byBkZXZdXQorIyAkSWQ6IFJFQURNRS5vc3N0Lmtlcm5lbCx2IDEuNCAyMDAwLzEyLzIwIDE0OjEzOjE1IGdhcmxvZmYgRXhwICQKK21ham9yPTIwNgorbnJzPTQKK2Rpcj0vZGV2Cit0ZXN0IC16ICIkMSIgfHwgbnJzPSQxCit0ZXN0IC16ICIkMiIgfHwgZGlyPSQyCitkZWNsYXJlIC1pIG5yCitucj0wCit0ZXN0IC1kICRkaXIgfHwgbWtkaXIgLXAgJGRpcgord2hpbGUgdGVzdCAkbnIgLWx0ICRucnM7IGRvCisgIG1rbm9kICRkaXIvb3NzdCRuciBjICRtYWpvciAkbnIKKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCRucjsgY2htb2QgNjYwICRkaXIvb3NzdCRucjsKKyAgbWtub2QgJGRpci9ub3NzdCRuciBjICRtYWpvciAkW25yKzEyOF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3QkbnI7IGNobW9kIDY2MCAkZGlyL25vc3N0JG5yOworICBta25vZCAkZGlyL29zc3Qke25yfWwgYyAkbWFqb3IgJFtuciszMl0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9bDsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9bDsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9bCBjICRtYWpvciAkW25yKzE2MF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfWw7IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1sOworICBta25vZCAkZGlyL29zc3Qke25yfW0gYyAkbWFqb3IgJFtucis2NF0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9bTsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9bTsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9bSBjICRtYWpvciAkW25yKzE5Ml0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfW07IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1tOworICBta25vZCAkZGlyL29zc3Qke25yfWEgYyAkbWFqb3IgJFtucis5Nl0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9YTsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9YTsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9YSBjICRtYWpvciAkW25yKzIyNF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfWE7IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1hOworICBsZXQgbnIrPTEKK2RvbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9wcGEudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3BwYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhYzg4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9wcGEudHh0CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tLS0tIFRlcnNlIHdoZXJlIHRvIGdldCBaSVAgRHJpdmUgaGVscCBpbmZvIC0tLS0tLS0tCisKK0dlbmVyYWwgSW9tZWdhIFpJUCBkcml2ZSBwYWdlIGZvciBMaW51eDoKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9+Y2FtcGJlbGwvCisKK0RyaXZlciBhY2hpdmUgZm9yIG9sZCBkcml2ZXJzOgoraHR0cDovL3d3dy50b3JxdWUubmV0L35jYW1wYmVsbC9wcGEvCisKK0xpbnV4IFBhcnBvcnQgcGFnZSAocGFyYWxsZWwgcG9ydCkKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9wYXJwb3J0LworCitFbWFpbCBsaXN0IGZvciBMaW51eCBQYXJwb3J0CitsaW51eC1wYXJwb3J0QHRvcnF1ZS5uZXQKKworRW1haWwgZm9yIHByb2JsZW1zIHdpdGggWklQIG9yIFpJUCBQbHVzIGRyaXZlcnMKK2NhbXBiZWxsQHRvcnF1ZS5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9xbGEyeHh4LnJldmlzaW9uLm5vdGVzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3FsYTJ4eHgucmV2aXNpb24ubm90ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwY2RhZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9xbGEyeHh4LnJldmlzaW9uLm5vdGVzCkBAIC0wLDAgKzEsNDU3IEBACisvKgorICogUUxvZ2ljIElTUDIyMDAgYW5kIElTUDIzMDAgTGludXggRHJpdmVyIFJldmlzaW9uIExpc3QgRmlsZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSZXZpc2lvbiBIaXN0b3J5CisgKgorICogIFJldiAgOC4wMC4wMGI4CURlY2VtYmVyIDUsIDIwMDMJQVYKKyAqCS0gSW5zdHJ1Y3QgbWlkLWxheWVyIHRvIHBlcmZvcm0gaW5pdGlhbCBzY2FuLgorICoKKyAqICBSZXYgIDguMDAuMDBiNwlEZWNlbWJlciA1LCAyMDAzCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0MTEuCisgKgktIEFkZCBiYXNpYyBOVlJBTSBwYXJzZXIgKGV4dHJhcy9xbGFfbnZyKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjctcHJlMTEgRGVjZW1iZXIgMywgMjAwMwlBVgorICoJLSBTYW5pdGl6ZSB0aGUgc2NzaV9xbGFfaG9zdCBzdHJ1Y3R1cmU6CisgKgkgIC0gUHVyZ2UgdW51c2VkIGVsZW1lbnRzLgorICoJICAtIFJlb3JnYW5pemUgaGlnaC1wcmlvcml0eSBtZW1iZXJzIChjYWNoZSBjb2hlcmVuY3kpLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgTlZSQU0gYWNjZXNzIHZpYSBhIHN5c2ZzIGJpbmFyeSBhdHRyaWJ1dGU6CisgKgkgIC0gQ29uc29saWRhdGUgc2VtYXBob3JlIGxvY2tpbmcgYWNjZXNzLgorICoJLSBGaXggbW9yZSBQQ0kgcG9zdGluZyBpc3N1ZXMuCisgKgktIEFkZCBleHRyYXMgZGlyZWN0b3J5IGZvciBkdW1wL05WUkFNIHRvb2xzLgorICoJLSBSZW1vdmUgdW51c2VkIHFsYV92ZW5kb3IuYyBmaWxlLgorICoKKyAqICBSZXYgIDguMDAuMDBiNy1wcmUxMSBOb3ZlbWJlciAyNiwgMjAwMwlERy9BVgorICoJLSBNZXJnZSBzZXZlcmFsIHBhdGNoZXMgZnJvbSBDaHJpc3RvcGggSGVsbHdpZyBbaGNoQGxzdC5kZV06CisgKgkgIC0gaW4gTGludXggMi42IGJvdGggcGNpIGFuZCB0aGUgc2NzaSBsYXllciB1c2UgdGhlIGdlbmVyaWMKKyAqCSAgICBkbWEgZGlyZWN0aW9uIGJpdHMsIHVzZSB0aGVtIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIHNjc2kKKyAqCSAgICBhbmQgcGNpIHZhcmlhbnRzIGFuZCB0aGUgKG5vb3ApIGNvbnZlcnNpb24gcm91dGluZXMuCisgKgktIEZpeCBfSU9YWF9CQUQoKSB1c2FnZSBmb3IgZXh0ZXJuYWwgSU9DVEwgaW50ZXJmYWNlLgorICoJLSBVc2UgYXRvbWljIGNvbnN0cnVjdCBmb3IgSEEgbG9vcF9zdGF0ZSBtZW1iZXIuCisgKgktIEFkZCBnZW5lcmljIG1vZGVsIGRlc2NyaXB0aW9uIHRleHQgZm9yIEhCQSB0eXBlcy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjctcHJlNQlOb3ZlbWJlciAxNywgMjAwMwlBVgorICoJLSBNZXJnZSBzZXZlcmFsIHBhdGNoZXMgZnJvbSBDaHJpc3RvcGggSGVsbHdpZyBbaGNoQGxzdC5kZV06CisgKgkgIC0gcGF0Y2ggdG8gc3BsaXQgdGhlIGRyaXZlciBpbnRvIGEgY29tbW9uIHFsYTJ4eHgua28gYW5kIGEKKyAqCSAgICBxbGEyPzAwLmtvIGZvciBlYWNoIEhCQSB0eXBlIC0gdGhlIGxhdHRlciBtb2R1bGVzIGFyZQorICoJICAgIG9ubHkgdmVyeSBzbWFsbCB3cmFwcGVycywgbW9zdGx5IGZvciB0aGUgZmlybXdhcmUKKyAqCSAgICBpbWFnZXMsIGFsbCB0aGUgbWVhdCBpcyBpbiB0aGUgY29tbW9uIHFsYTJ4eHgua28uCisgKgkgIC0gbWFrZSB0aGUgZmFpbG92ZXIgY29kZSBvcHRpb25hbC4KKyAqCSAgLSBraWxsIHVzZWxlc3MgbG9ja19rZXJuZWwgaW4gZHBjIHRocmVhZCBzdGFydHVwLgorICoJICAtIG5vIG5lZWQgZm9yIG1vZHZlcnNpb25zIGhhY2tzIGluIDIuNiAob3IgMi40KS4KKyAqCSAgLSBraWxsIHFsYTJ4MDBfcmVnaXN0ZXJfd2l0aF9MaW51eC4KKyAqCSAgLSBzaW1wbGlmeSBFSCBjb2RlLCBjbWQgb3IgaXQncyBob3N0ZGF0YSBjYW4ndCBiZSBOVUxMLCBubworICoJICAgIG5lZWQgdG8gc2VhcmNoIHdoZXRoZXIgdGhlIGhvc3QgaXQncyBvdXJzLCB0aGUgbWlkbGF5ZXIKKyAqCSAgICBtYWtlcyBzdXJlIGl0IHdvbid0IGNhbGwgaW50byBhIGRyaXZlciBmb3Igc29tZSBlbHNlCisgKgkgICAgaG9zdC4KKyAqCS0gTWVyZ2Ugc2V2ZXJhbCBwYXRjaGVzIGZyb20gSmVzIFNvcmVuc2VuCisgKgkgIFtqZXNAd2lsZG9wZW5zb3VyY2UuY29tXToKKyAqCSAgLSBDYWxsIHFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKCkgYmVmb3JlIHBlcmZvcm1pbmcKKyAqCSAgICBhbnkgY29uc2lzdGVudCBhbGxvY2F0aW9ucy4gVGhpcyBpcyByZXF1aXJlZCBzaW5jZSB0aGUKKyAqCSAgICBkbWEgbWFzayBzZXR0aW5ncyB3aWxsIGFmZmVjdCB0aGUgbWVtb3J5CisgKgkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSB3aWxsIHJldHVybi4KKyAqCSAgLSBDYWxsIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpIHRvIGFsbG93IGZvciA2NCBiaXQKKyAqCSAgICBjb25zaXN0ZW50IGFsbG9jYXRpb25zLCByZXF1aXJlZCBvbiBzb21lIHBsYXRmb3JtcyBzdWNoCisgKgkgICAgYXMgdGhlIFNOMi4KKyAqCSAgLSBXYWl0IDIwIHVzZWNzIChub3Qgc3VyZSBob3cgbG9uZyBpcyByZWFsbHkgbmVjZXNzYXJ5LAorICoJICAgIGJ1dCB0aGlzIHNlZW1zIHNhZmUpIGFmdGVyIHNldHRpbmcgQ1NSX0lTUF9TT0ZUX1JFU0VUIGluCisgKgkgICAgdGhlIGN0cmxfc3RhdHVzIHJlZ2lzdGVyIGFzIHRoZSBjYXJkIGRvZXNuJ3QgcmVzcG9uZCB0bworICoJICAgIFBDSSByZWFkcyB3aGlsZSBpbiByZXNldCBzdGF0ZS4gVGhpcyBjYXVzZXMgYSBtYWNoaW5lCisgKgkgICAgY2hlY2sgb24gc29tZSBhcmNoaXRlY3R1cmVzLgorICoJICAtIEZsdXNoIFBDSSB3cml0ZXMgYmVmb3JlIGNhbGxpbmcgdWRlbGF5KCkgdG8gZW5zdXJlIHRoZQorICoJICAgIHdyaXRlIGlzIG5vdCBzaXR0aW5nIGlkbGUgaW4tZmxpZ2h0IGZvciBhIHdoaWxlIGJlZm9yZQorICoJICAgIGhpdHRpbmcgdGhlIGhhcmR3YXJlLgorICoJICAtIEluY2x1ZGUgbGludXgvdm1hbGxvYy5oIGluIHFsYV9vcy5jIHNpbmNlIGl0IHVzZXMKKyAqCSAgICB2bWFsbG9jKCkuCisgKgkgIC0gVXNlIGF1dG8tbmVnb3RpYXRlIGxpbmsgc3BlZWQgd2hlbiB1c2luZyBkZWZhdWx0CisgKgkgICAgcGFyYW1ldGVycyByYXRoZXIgdGhhbiBOVlJBTSBzZXR0aW5ncy4gRGlzYWJsZSBOVlJBTQorICoJICAgIHJlYWRpbmcgb24gU04yIHNpbmNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhlCisgKgkgICAgSEJBJ3MgQklPUyBvbiBhbiBTTjIuIEkgc3VnZ2VzdCBkb2luZyBzb21ldGhpbmcgc2ltaWxhcgorICoJICAgIGZvciBhbGwgYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBwcm92aWRlIHg4NiBCSU9TCisgKgkgICAgZW11bGF0aW9uLgorICoJLSBDbGVhbi11cCBzbGFiLWNhY2hlIGFsbG9jYXRpb25zOgorICoJICAtIGxvY2tpbmcuCisgKgkgIC0gbWVtcG9vbCBhbGxvY2F0aW9ucyBpbiBjYXNlIG9mIGxvdy1tZW1vcnkgc2l0dWF0aW9ucy4KKyAqCS0gRmFsbGJhY2sgdG8gR0FfTlhUIHNjYW4gaWYgR0lEX1BUIGNhbGwgcmV0dXJucyBtb3JlIHRoYW4KKyAqCSAgTUFYX0ZJQlJFX0RFVklDRVMuCisgKgktIFByZXNlcnZlIGl0ZXJhdGluZyBwb3J0IElEIGFjcm9zcyBHQV9OWFQgY2FsbHMgaW4KKyAqCSAgcWxhMngwMF9maW5kX2FsbF9mYWJyaWNfZGV2cygpLgorICoJLSBQcmUtY2FsY3VsYXRlIEFTQ0lJIGZpcm13YXJlIGR1bXAgbGVuZ3RoIGFzIHRvIG5vdCBpbmN1ciB0aGUKKyAqCSAgY29zdC10by1jYWxjdWxhdGUgYXQgZWFjaCBpbnZvY2F0aW9uIG9mIGEgcmVhZCgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNglOb3ZlbWJlciA0LCAyMDAzCUFWCisgKgktIEFkZCBuZXcgMjMwMCBUUFggZmlybXdhcmUgKDMuMDIuMTgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUyNSBPY3RvYmVyIDIwLCAyMDAzCVJBL0FWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0OS4KKyAqCS0gUmV3b3JrIGZpcm13YXJlIGR1bXAgcHJvY2VzczoKKyAqCSAgLSBVc2UgYmluYXJ5IGF0dHJpYnV0ZSB3aXRoaW4gc3lzZnMgdHJlZS4KKyAqCSAgLSBBZGQgdXNlci1zcGFjZSB0b29sIChnZHVtcC5zaCkgdG8gcmV0cmlldmUgZm9ybWF0dGVkCisgKgkgICAgYnVmZmVyLgorICoJICAtIEFkZCBJU1AyMTAwIHN1cHBvcnQuCisgKgktIFVzZSBhIHNsYWIgY2FjaGUgZm9yIFNSQiBhbGxvY2F0aW9ucyB0byByZWR1Y2UgbWVtb3J5CisgKgkgIHByZXNzdXJlLgorICoJLSBJbml0aWFsIGNvbnZlcnNpb24gb2YgZHJpdmVyIGxvZ2dpbmcgbWV0aG9kcyB0byBhIG5ldworICoJICBxbGFfcHJpbnRrKCkgZnVuY3Rpb24gd2hpY2ggdXNlcyBkZXZfcHJpbnRrIChEYW5pZWwKKyAqCSAgU3Rla2xvZmYsIElCTSkuCisgKgktIEZ1cnRoZXIgcmVkdWNlIHN0YWNrIHVzYWdlIGluIHFsYTJ4MDBfY29uZmlndXJlX2xvY2FsX2xvb3AoKQorICoJICBhbmQgcWxhMngwMF9maW5kX2FsbF9mYWJyaWNfZGV2cygpLgorICoJLSBTZXBhcmF0ZSBwb3J0IHN0YXRlIHVzZWQgZm9yIHJvdXRpbmcgb2YgSS9PJ3MgZnJvbSBwb3J0CisgKgkgIG1nbXQtbG9naW4gcmV0cnkgZXRjLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUxOSBPY3RvYmVyIDEzLCAyMDAzCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0Ny1iazUuCisgKgktIEFkZCBpbnRlbGxpZ2VudCBSU0NOIGV2ZW50IGhhbmRsaW5nOgorICoJICAtIHJlZHVjZSBzY2FuIHRpbWUgZHVyaW5nICdwb3J0JyBSU0NOIGV2ZW50cyBieSBvbmx5CisgKgkgICAgcXVlcnlpbmcgc3BlY2lmaWVkIHBvcnQgaWRzLgorICoJICAtIEF2YWlsYWJsZSBvbiBJU1AyM3h4IGNhcmRzIG9ubHkuCisgKgktIEluY3JlYXNlIG1heGltdW0gbnVtYmVyIG9mIHJlY29nbml6YWJsZSB0YXJnZXRzIGZyb20gMjU2CisgKgkgIHRvIDUxMi4KKyAqCSAgLSBCYWNrZW5kIGNoYW5nZXMgd2VyZSBwcmV2aW91c2x5IGFkZGVkIHRvIHN1cHBvcnQgVFBYCisgKgkgICAgKDJLIGxvZ2lucykgZmlybXdhcmUuICBNaWQtbGF5ZXIgY2FuIG5vdyBzY2FuIGZvciB0YXJnZXRzCisgKgkgICAgKEgsIEIsIFQsIEwpIHdoZXJlIDUxMiA8IFQgPj0gMC4KKyAqCS0gUmVtb3ZlIElQIHN1cHBvcnQgZnJvbSBkcml2ZXIuCisgKgkgIC0gU3dpdGNoIGZpcm13YXJlIHR5cGVzIGZyb20gSVAtPlRQIGZvciBJU1AyMnh4IGFuZAorICoJICAgIElQWC0+VFBYIGZvciBJU1AyM3h4IGNhcmRzLgorICoJICAtIFJlbW92ZSBmaWxlcyBxbGFfaXAuW2NoXS4KKyAqCS0gUmVtb3ZlIHR5cGUgZGVzaWduYXRpb25zIGZyb20gZmlybXdhcmUgZmlsZW5hbWVzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUxMSBTZXB0ZW1iZXIgMTUsIDIwMDMJREcvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMC4KKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNi4wLXRlc3Q1LWJrMy4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xNSkuCisgKgorICogIFJldiAgOC4wMC4wMGI1CUp1bHkgMzEsIDIwMDMJCUFWCisgKgktIEFsd2F5cyBjcmVhdGUgYW4gZmNfbHVuX3QgZW50cnkgZm9yIGx1biAwIC0gYXMgdGhlIG1pZC0KKyAqCSAgbGF5ZXIgcmVxdWlyZXMgYWNjZXNzIHRvIHRoaXMgbHVuIGZvciBkaXNjb3ZlcnkgdG8gb2NjdXIuCisgKgktIEdlbmVyYWwgc2FuaXRpemluZzoKKyAqCSAgLSBBZGQgZ2VuZXJpYyBmaXJtd2FyZSBvcHRpb24gZGVmaW5pdGlvbnMuCisgKgkgIC0gR2VuZXJhbGl6ZSByZXRyaWV2YWwvdXBkYXRlIG9mIGZpcm13YXJlIG9wdGlvbnMuCisgKgkgIC0gRml4IGNvbXBpbGUgZXJyb3JzIHdoaWNoIG9jY3VyIHdpdGggZXh0ZW5kZWQgZGVidWcuCisgKgkgIC0gSGFuZGxlIGZhaWx1cmUgY2FzZXMgZm9yIHNjc2lfYWRkX2hvc3QoKSBhbmQKKyAqCSAgICBkb3duX2ludGVycnVwdGlibGUoKS4KKyAqCS0gSG9zdCB0ZW1wbGF0ZSB1cGRhdGVzOgorICoJICAtIFVzZSBzdGFuZGFyZCBiaW9zX3BhcmFtIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoJICAtIERpc2FibGUgY2x1c3RlcmluZy4KKyAqCSAgLSBSZW1vdmUgdW5jaGVja2VkX2lzX2RtYSBlbnRyeS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjUtcHJlNQlKdWx5IDI5LCAyMDAzCQlERy9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEzLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDIuCisgKgktIFBhc3MgdGhlIGNvbXBsZXRlIGxvb3BfaWQsIG5vdCB0aGUgbWFza2VkICgweGZmKSB2YWx1ZQorICoJICB3aGlsZSBpc3N1aW5nIG1haWxib3ggY29tbWFuZHMgKHFsYV9tYnguYy9xbGFfZm8uYy8KKyAqCSAgcWxhX2lvY2IuYy9xbGFfaW5pdC5jKS4KKyAqCS0gUHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIHJldHVybiBzdGF0dXMgZm9yIGFuIFJMQyBDREIuCisgKgktIENyZWF0ZSBhbiBmY2x1bl90IHN0cnVjdHVyZSBmb3IgJ2Rpc2Nvbm5lY3RlZCcgbHVucywKKyAqCSAgcGVyaXBoZXJhbC1xdWFsaWZpZXIgb2YgMDAxYi4KKyAqCS0gUmVtb3ZlIHVudXNlZCBMSVAtc2VxdWVuY2UgcmVnaXN0ZXIgYWNjZXNzIGR1cmluZyBBRSA4MDEwLgorICoJLSBHZW5lcmFsaXplIHFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCgpIHRvIGhhbmRsZSBmb3JjZWQgCisgKgkgIGxvZ2luIHJlcXVlc3QgLS0gbW9kaWZ5IGFsbCBkaXJlY3QvaW5kaXJlY3QgaW52b2NhdGlvbnMgCisgKgkgIHdpdGggcHJvcGVyIGZsYWcuCisgKgktIFNhdmUgUlNDTiBub3RpZmljYXRpb24gKEFFIDgwMTVoKSBkYXRhIGluIGEgcHJvcGVyIGFuZCAKKyAqCSAgY29uc2lzdGVudCBmb3JtYXQgKGRvbWFpbiwgYXJlYSwgYWxfcGEpLgorICoJLSBHZW5lcmFsIHNhbml0aXppbmc6CisgKgkgIC0gc2NzaV9xbGFfaG9zdCBzdHJ1Y3R1cmUgbWVtYmVyIHJlb3JkZXJpbmcgZm9yIGNhY2hlLWxpbmUKKyAqCSAgICBjb2hlcmVuY3kuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCBTQ1NJIG9wY29kZXMsIGVuZGlhbi1zd2FwIGRlZmluaXRpb25zLgorICoJICAtIFJlbW92ZSBDTURfKiBwcmUtcHJvY2Vzc29yIGRlZmluZXMuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCBTQ1NJRkNIT1RTV0FQL0dBTUFQL01VTFRJSE9TVCBjb2Rlcy4KKyAqCS0gQmFja291dCBwYXRjaCB3aGljaCBhZGRlZCBhIHBlci1zY3NpX3FsYV9ob3N0IHNjc2kgaG9zdAorICoJICBzcGlubG9jaywgc2luY2UgbWlkLWxheWVyIGFscmVhZHkgZGVmaW5lcyBvbmUuCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTUpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNAlKdWx5IDE0LCAyMDAzCQlSQS9ERy9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEyLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDEuCisgKgktIFJlbW92ZSBJT0NCIHRocm90dGxpbmcgY29kZSAtLSBvcmlnaW5hbGx5ICNpZidkLgorICoJLSBSZW1vdmUgYXBpZGV2XyooKSByb3V0aW5lcyBzaW5jZSBwcm9jX21rbm9kKCkgaGFzIGJlZW4KKyAqCSAgcmVtb3ZlZCAtLSBuZWVkIGFsdGVybmF0ZSBJT0NUTCBpbnRlcmZhY2UuCisgKgktIE1lcmdlIHNldmVyYWwgcGVyZm9ybWFuY2UvZml4IHBhdGNoZXMgZnJvbSBBcmphbiB2YW4gZGUKKyAqCSAgVmVuOgorICoJICAtIFVuZGVmaW5lZCBvcGVyYXRpb24gPj4gMzIuCisgKgkgIC0gTm8gbmVlZCB0byBhY3F1aXJlIG1pZC1sYXllciBsb2NrIGR1cmluZyBjb21tYW5kCisgKgkgICAgY2FsbGJhY2suIAorICoJICAtIFVzZSBhIHBlci1IQkEgbWlkLWxheWVyIGxvY2suCisgKgkgIC0gVXNlIGEgbm9uLWxvY2tlZCBjeWNsZSBmb3Igc2V0dGluZyB0aGUgY291bnQgb2YgdGhlCisgKgkgICAgbmV3bHkgYWxsb2NhdGVkIHNwIChxbGEyeDAwX2dldF9uZXdfc3AoKSkuCisgKgkgIC0gTW9kaWZ5IHNlbWFudGljIGJlaGF2aW9yIG9mIHFsYTJ4MDBfcXVldWVjb21tYW5kKCk6CisgKgkgICAgLSBSZWR1Y2UgY2FjaGVsaW5lIGJvdW5jaW5nIGJ5IGhhdmluZyBJL09zIHN1Ym1pdHRlZAorICoJICAgICAgYnkgdGhlIElSUSBoYW5kbGVyLgorICoJICAgIC0gUmVtb3ZlIGV4dHJhbmVvdXMgY2FsbHMgdG8gcWxhMngwMF9uZXh0KCkgZHVyaW5nIEkvTworICoJICAgICAgcXVldWluZy4KKyAqCSAgLSBVc2UgbGlzdF9zcGxpY2VfaW5pdCgpIGR1cmluZyBxbGEyeDAwX2RvbmUoKSBoYW5kbGluZworICoJICAgIG9mIGNvbW1hbmRzIHRvIHJlZHVjZSBsaXN0X2xvY2sgY29udGVudGlvbi4KKyAqCSAgLSBSSU8gbW9kZSBzdXBwb3J0IGZvciBJU1AyMjAwOgorICoJICAgIC0gSW1wbGVtZW50YXRpb24gZGlmZmVycyBzbGlnaHRseSBmcm9tIG9yaWdpbmFsIHBhdGNoLgorICoJICAtIERvIG5vdCB1c2UgYm90dG9tLWhhbGYgaGFuZGxlciAodGFza2xldC93b3JrIHF1ZXVlKQorICoJICAgIGZvciBxbGEyeDAwX2RvbmUoKSBwcm9jZXNzaW5nLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUyMiBKdWx5IDEyLCAyMDAzCQlBVgorICoJLSBDaGVjayBmb3IgJ1Byb2Nlc3MgUmVzcG9uc2UgUXVldWUnIHJlcXVlc3RzIGVhcmx5IGR1cmluZworICoJICB0aGUgSG9zdCBTdGF0dXMgY2hlY2suCisgKgktIEdlbmVyYWwgc2FuaXRpemluZzoKKyAqCSAgLSBzcmJfdCBzdHJ1Y3R1cmUgcmV3cml0ZSwgcmVtb3ZhbCBvZiB1bnVzZWQgbWVtYmVycy4KKyAqCSAgLSBSZW1vdmUgdW51c2VkIGZjZGV2IGFycmF5LCBmYWJyaWNpZCwgYW5kIFBPUlRfKgorICoJICAgIGRlZmluaXRpb25zLgorICoJICAtIFJlbW92ZSB1bnVzZWQgY29uZmlnX3JlZ190IFBDSSBkZWZpbml0aW9ucy4KKyAqCS0gQWRkIG5ldyAyMjAwIElQIGZpcm13YXJlICgyLjAyLjA2KS4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xNCkuCisgKgorICogIFJldiAgOC4wMC4wMGI0LXByZTE5IEp1bmUgMzAsIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNzMtYms4LgorICoJLSBSZXdvcmsgSU9DQiBjb21tYW5kIHF1ZXVpbmcgbWV0aG9kczoKKyAqCSAgLSBVcHBlci1sYXllciBkcml2ZXIgKk1VU1QqIHByb3Blcmx5IHNldCB0aGUgZGlyZWN0aW9uCisgKgkgICAgYml0IG9mIFNDU0kgY29tbWFuZHMuCisgKgkgIC0gR2VuZXJhbGl6ZSAzMmJpdC82NGJpdCBxdWV1aW5nIHBhdGggZnVuY3Rpb25zLgorICoJICAtIFJlbW92ZSBjb3N0bHkgcGFnZS1ib3VuZGFyeSBjcm9zcyBjaGVjayB3aGVuIHVzaW5nCisgKgkgICAgNjRiaXQgYWRkcmVzcyBjYXBhYmxlIElPQ0JzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUxNSBKdW5lIDE5LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjExLgorICoJLSBDb250aW51ZSBmY3BvcnQgbGlzdCBjb25zb2xpZGF0aW9uIHdvcms6CisgKgkgIC0gVXBkYXRlZCBJT0NUTCBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlIG5ldyBmY3BvcnRzIAorICoJICAgIGxpc3QuCisgKgktIE1vZGlmaWVkIHByb2R1Y3QgSUQgY2hlY2sgdG8gbm90IHZlcmlmeSBJU1AgY2hpcAorICoJICByZXZpc2lvbiAtLSBJU1AyMzEyIHYzIChxbGEyeDAwX2NoaXBfZGlhZygpKS4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xMyk6CisgKgorICogIFJldiAgOC4wMC4wMGI0LXByZTEzIEp1bmUgMTksIDIwMDMJCUFWCisgKgktIEZpeCBidWlsZCBwcm9jZXNzIGZvciBxbGEyMTAwIGRyaXZlciAtLSBubyBzdXBwb3J0CisgKgkgIGZvciBJUC4KKyAqCS0gU0NTSSBob3N0IHRlbXBsYXRlIG1vZGlmaWNhdGlvbnM6CisgKgkgIC0gU2V0IHNnX3RhYmxlc2l6ZSBiYXNlZCBvbiB0aGUgZGVyaXZlZCBETUEgbWFzay4KKyAqCSAgLSBJbmNyZWFzZSBtYXhfc2VjdG9ycyBzaW5jZSBvbmx5IGxpbWl0IHdpdGhpbiBSSVNDCisgKgkgICAgaXMgdHJhbnNmZXIgb2YgKCgoMl4zMikgLSAxKSA+PiA5KSBzZWN0b3JzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUxMiBKdW5lIDE4LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEwLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjcyLgorICoJLSBJbml0aWFsIGZjcG9ydCBsaXN0IGNvbnNvbGlkYXRpb24gd29yazoKKyAqCSAgLSBmY3BvcnRzL2ZjaW5pdGlhdG9ycy9mY2Rldi9mY19pcCAtLT4gaGEtPmZjcG9ydHMKKyAqCSAgICBsaXN0LgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmU3CSBKdW5lIDA1LCAyMDAzCQlBVgorICoJLSBQcm9wZXJseSByZWxlYXNlIFBDSSByZXNvdWNlcyBpbiBpbml0LWZhaWx1cmUgY2FzZS4KKyAqCS0gUmVjb25jaWxlIGRpc3Bhcml0ZSBmdW5jdGlvbiByZXR1cm4gY29kZSBkZWZpbml0aW9ucy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlNAkgSnVuZSAwMywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS43MC1iazg6CisgKgkgIC0gU0hUIHByb2NfaW5mbygpIGNoYW5nZXMuCisgKgktIFJlc3RydWN0dXJlIFNOUyBHZW5lcmljIFNlcnZpY2VzIHJvdXRpbmVzOgorICoJICAtIEFkZCBxbGFfZ3MuYyBmaWxlIHRvIGRyaXZlciBkaXN0cmlidXRpb24uCisgKgktIENvbmZpZ3VyZSBQQ0kgbGF0ZW5jeSB0aW1lciBmb3IgSVNQMjN4eC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlMwkgSnVuZSAwMiwgMjAwMwkJUkEsIERHLCBSTCwgQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGI1LgorICoJLSBSZXdvcmsgKGFnYWluKSBQQ0kgSS9PIHNwYWNlIGNvbmZpZ3VyYXRpb24KKyAqCSAgKEFudG9uIEJsYW5jaGFyZCk6CisgKgkgIC0gVXNlIHBjaV9zZXRfbXdpKCkgcm91dGluZTsKKyAqCSAgICAtIFJlbW92ZSB1bmVlZGVkIHFsYTJ4MDBfc2V0X2NhY2hlX2xpbmUoKSBmdW5jdGlvbi4KKyAqCSAgLSBSZW1vdmUgZXh0cmFuZW91cyBtb2RpZmljYXRpb24gb2YgUENJX0NPTU1BTkQgd29yZC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjMgCSBNYXkgMjksIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNzAuCisgKgktIE1vdmUgUklTQyBwYXVzZWQgY2hlY2sgZnJvbSBJU1IgZmFzdC1wYXRoLgorICoKKyAqICBSZXYgIDguMDAuMDBiMy1wcmU4IE1heSAyNiwgMjAwMwkJQVYKKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xMik6CisgKgktIFJld29yayBQQ0kgSS9PIHNwYWNlIGNvbmZpZ3VyYXRpb24uCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTYJTWF5IDIyLCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjMuCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTQJTWF5IDIxIDIwMDMJCUFWCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTEpOgorICoJICAtIFJlbW92ZSAyMzAwIFRQWCBmaXJtd2FyZSBmcm9tIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjMtcHJlMwlNYXkgMjEgMjAwMwkJQVYKKyAqCS0gUHJvcGVybHkgc2V0dXAgUENJIGNvbmZpZ3VhdGlvbiBzcGFjZSBkdXJpbmcKKyAqCSAgaW5pdGlhbGl6YXRpb246CisgKgkgIC0gUHJvcGVybHkgY29uZmlndXJlIE1lbW9yeS1NYXBwZWQgSS9PIGR1cmluZyBlYXJseQorICoJICAgIGNvbmZpZ3VyYXRpb24gc3RhZ2UuCisgKgktIFJld29yayBJUCBmdW5jdGlvbmFsaXR5IHRvIHN1cHBvcnQgMmsgbG9naW5zLgorICoJLSBBZGQgbmV3IDIzMDAgSVBYIGZpcm13YXJlICgzLjAyLjExKToKKyAqCSAgLSBSZW1vdmUgMjMwMCBUUFggZmlybXdhcmUgZnJvbSBkaXN0cmlidXRpb24uCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTIJTWF5ID8/LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEuCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTEJTWF5ID8/LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwLgorICoKKyAqICBSZXYgIDguMDAuMDBiMglNYXkgMTksIDIwMDMJCUFWCisgKgktIFNpbXBsaWZ5IGRtYV9hZGRyX3QgaGFuZGxpbmcgZHVyaW5nIGNvbW1hbmQgcXVldWluZyBnaXZlbgorICoJICBuZXcgYmxvY2stbGF5ZXIgZGVmaW5lZCByZXN0cmljdGlvbnM6CisgKgkgIC0gUGh5c2ljYWwgYWRkcmVzc2VzIG5vdCBzcGFubmluZyA0R0IgYm91bmRhcmllcy4KKyAqCS0gRmlybXdhcmUgdmVyc2lvbnM6IDIxMDAgVFAgKDEuMTkuMjQpLCAyMjAwIElQICgyLjAyLjA1KSwKKyAqCSAgMjMwMCBUUFggKDMuMDIuMTApLgorICoKKyAqICBSZXYgIDguMDAuMDBiMi1wcmUxCU1heSAxMywgMjAwMwkJQVYKKyAqCS0gQWRkIHN1cHBvcnQgZm9yIG5ldyAnSG90cGx1ZyBpbml0aWFsaXphdGlvbicgbW9kZWwuIAorICoJLSBTaW1wbGlmeSBob3N0IHRlbXBsYXRlIGJ5IHJlbW92aW5nIHVudXNlZCBjYWxsYmFja3MuCisgKgktIFVzZSBzY3NpY2FtIGZhY2lsaXRpZXMgdG8gZGV0ZXJtaW5lIGdlb21ldHJ5LgorICoJLSBGaXggY29tcGlsYXRpb24gaXNzdWVzIGZvciBub24tSVNQMjN4eCBidWlsZHM6CisgKgkgIC0gQ29ycmVjdCByZWdpc3RlciByZWZlcmVuY2VzIGluIHFsYV9kYmcuYy4KKyAqCSAgLSBDb3JyZWN0IE1ha2VmaWxlIGJ1aWxkIHByb2Nlc3MuCisgKgorICogIFJldiAgOC4wMC4wMGIxCU1heSAwNSwgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS42OS4KKyAqCS0gRmlybXdhcmUgdmVyc2lvbnM6IDIxMDAgVFAgKDEuMTkuMjQpLCAyMjAwIFRQICgyLjAyLjA1KSwKKyAqCSAgMjMwMCBUUFggKDMuMDIuMTApLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU0NSBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS42OC1iazExOgorICoJLSBGaXggaW1wcm9wZXIgcmV0dXJuLWNvZGUgYXNzaWdubWVudCBkdXJpbmcgZmFicmljCisgKgkgIGRpc2NvdmVyeS4KKyAqCS0gUmVtb3ZlIGFkZGl0aW9uYWwgZXh0cmFuZW91cyAjZGVmaW5lcyBmcm9tCisgKgkgIHFsYV9zZXR0aW5ncy5oLgorICoJICAtIFVTRV9QT1JUTkFNRSAtLSBGTyB3aWxsIGFsd2F5cyB1c2UgcG9ydG5hbWUuCisgKgktIERlZmF1bHQgcXVldWUgZGVwdGggc2l6ZSBzZXQgdG8gNjQuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTQyIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBDb252ZXJ0IGJvdHRvbS1oYWxmIHRhc2tsZXQgdG8gYSB3b3JrX3F1ZXVlLgorICoJLSBJbml0aWFsIGJhc2ljIGNvZGluZyBvZiBkeW5hbWljIHF1ZXVlIGRlcHRoIGhhbmRsaW5nCisgKgkgIGR1cmluZyBRVUVVRSBGVUxMIHN0YXR1c2VzLgorICoJLSBGaXggbWFpbGJveCBpbnRlcmZhY2UgcHJvYmxlbSB3aXRoCisgKgkgIHFsYTJ4MDBfZ2V0X3JldHJ5X2NudCgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU0MSBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gQ29udmVydCBidWlsZCBkZWZpbmVzIHFsYTJbMXwyfDNdMDAgbWFjcm9zIHRvCisgKgkgIHFsYTJbMXwyfDNdeHggZHVlIHRvIG1vZHVsZSBuYW1lIHN0cmluZ2lmaWNhdGlvbiBjbGFzaGVzLgorICoJLSBBZGQgYWRkaXRpb25hbCBJU1AyMzIyIGNoZWNrcyBkdXJpbmcgYm9hcmQgY29uZmlndXJhdGlvbi4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlNDAgQXByaWwgPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNjgtYms4OgorICoJICAtIFVwZGF0ZWQgSVJRIGhhbmRsZXIgaW50ZXJmYWNlLgorICoJLSBBZGQgSVNQIGR1bXAgY29kZSAoc3R1YikgaW4gY2FzZSBvZiBTWVNURU1fRVJST1Igb24KKyAqCSAgSVNQMjEwMC4KKyAqCS0gQWRkIG5ldyAyMjAwIElQIGZpcm13YXJlICgyLjAyLjA1KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMzkgQXByaWwgPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNjguCisgKgktIEFkZCBzaW1wbGUgYnVpbGQuc2ggc2NyaXB0IHRvIGFpZCBpbiBleHRlcm5hbCBjb21waWxhdGlvbi4KKyAqCS0gQ2xlYW4tYnJlYWsgd2l0aCBLZXJuZWwgMi40IGNvbXBhdGliaWxpdHkuCisgKgkgIC0gUmV3b3JrIERQQyByb3V0aW5lIC0tIGNvbXBsZXRpb24gcm91dGluZXMgZm9yIHNpZ25hbGluZy4KKyAqCS0gUmUtYWRkIEhCQUFQSSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgZm9yIElPQ1RMIHN1cHBvcnQuCisgKgktIFJlbW92ZSByZXNpZHVhbCBRTEEyWF9QRVJGT1JNQU5DRSBkZWZpbmVzLgorICoJLSBBbGxvY2F0ZSBTUCBwb29sIHZpYSBfX2dldF9mcmVlX3BhZ2VzKCkgcmF0aGVyIHRoYW4KKyAqCSAgaW5kaXZpZHVhbCBrbWFsbG9jKCkncy4KKyAqCS0gSW5mb3JtIFNDU0kgbWlkLWxheWVyIG9mIDE2LWJ5dGUgQ0RCIHN1cHBvcnQKKyAqCSAgKGhvc3QtPm1heF9jbWRfbGVuKToKKyAqCSAgLSBSZW1vdmUgdW5lY2Vzc2FyeSAnbW9yZV9jZGInIGhhbmRsaW5nIGNvZGUgZnJvbQorICoJICAgIHFsYV9pb2NiLmMgYW5kIHFsYV94aW9jdC5jLgorICoJLSBSZWR1Y2UgZHVwbGljYXRlIGNvZGUgaW4gZmFicmljIHNjYW5uaW5nIGxvZ2ljIChNUyBJT0NCCisgKgkgIHByZXBhcmF0aW9uKS4KKyAqCS0gQWRkIElTUCBkdW1wIGNvZGUgaW4gY2FzZSBvZiBTWVNURU1fRVJST1IuCisgKgktIFJlbW92ZSAyMzAwIFZJWCBmaXJtd2FyZSBmcm9tIGRpc3RyaWJ1dGlvbjoKKyAqCSAgLSBBZGQgaW5pdGlhbCBjb2RlIGZvciBJUFggc3VwcG9ydC4KKyAqCS0gQWRkIG5ldyAyMzAwIFRQWCBmaXJtd2FyZSAoMy4wMi4xMCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTM0IEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjY3LgorICoJLSBVc2UgZG9tYWluL2FyZWEvYWxfcGEgZmllbGRzIHdoZW4gZGlzcGxheWluZyBQb3J0SUQgCisgKgkgIHZhbHVlcyAtLSBhZGRyZXNzZXMgZW5kaWFuZXNzIGlzc3Vlcy4KKyAqCS0gUmV3b3JrIGxhcmdlIGNhc2Ugc3RhdGVtZW50IHRvIGNoZWNrICdjb21tb24nIENEQiBjb21tYW5kcworICoJICBlYXJseSBpbiBxbGEyeDAwX2dldF9jbWRfZGlyZWN0aW9uKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTMxIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBVcGRhdGUgbWFrZWZpbGUgdG8gc3VwcG9ydCBQUEM2NCBidWlsZC4KKyAqCS0gUmV0b29sIE5WUkFNIGNvbmZpZ3VyYXRpb24gcm91dGluZSBhbmQgc3RydWN0dXJlczoKKyAqCSAgLSBDb25zb2xkYXRlIElTUDIxeHgvSVNQMjJ4eC9JU1AyM3h4IGNvbmZpZ3VyYXRpb24KKyAqCSAgICAoc3RydWN0IG52cmFtX3QpLgorICoJICAtIFJlbW92ZSBiaWcvbGl0dGxlIGVuZGlhbiBzdXBwb3J0IHN0cnVjdHVyZXMgaW4gZmF2b3Igb2YKKyAqCSAgICBzaW1wbGlmaWVkIGJpdC1vcGVyYXRpb25zIHdpdGhpbiBieXRlIGZpZWxkcy4KKyAqCS0gRml4IGxvbmctc3RhbmRpbmcgJ3N0YXRpYycgYnVmZmVyIHNoYXJpbmcgcHJvYmxlbSBpbiAKKyAqCSAgcWxhMngwMF9jb25maWd1cmVfZmFicmljKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTMwIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBHSURfUFQgc2Nhbi4KKyAqCS0gVXNlIGNvbnNpc3RlbnQgTVMgSU9DQiBpbnZvY2F0aW9uIG1ldGhvZCB0byBxdWVyeSBTTlM6CisgKgkgIC0gQWRkIFJOTl9JRCBhbmQgUlNOTl9OTiByZWdpc3RyYXRpb25zIGluIGEgZmFicmljLgorICoJLSBSZW1vdmUgdW51c2VkIE1haWxib3ggQ29tbWFuZCA2RWggKFNlbmQgU05TKSBzdXBwb3J0CisgKgkgIHN0cnVjdHVyZXMuCisgKgktIFVzZSA2NGJpdCBzYWZlIElPQ0JzIHdoaWxlIGlzc3VpbmcgSU5RVUlSWSBhbmQgUkxDIGR1cmluZworICoJICB0b3BvbG9neSBzY2FuLgorICoJLSBVbnRpbCByZWltcGxlbWVudGF0aW9uIG9mIGZjZGV2X3QvZmNwb3J0IGxpc3QKKyAqCSAgY29uc29saWRhdGlvbiwgdmFsaWQgbG9vcF9pZCByYW5nZXMgYXJlIHN0aWxsIGxpbWl0ZWQgZnJvbQorICoJICAweDAwIHRocm91Z2ggMHhGRiAtLSBlbmZvcmNlIHRoaXMgd2l0aGluIHRoZSBjb2RlLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUyNyBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGI5LgorICoJLSBSZXRvb2wgSEJBIFBDSSBjb25maWd1cmF0aW9uIC0tIHFsYTJ4MDBfcGNpX2NvbmZpZygpLgorICoJLSBSZW1vdmUgaW5jb25zaXN0ZW50IHVzZSBvZiBkZWxheSByb3V0aW5lcyAoVURFTEFZL1NZUyopLgorICoJLSBDb250aW51ZSB0byB0ZWFyZG93bi9jbGVhbi9hZGQgY29tbWVudHMgYW5kIGRlYnVnCisgKgkgIHJvdXRpbmVzLgorICoJLSBQcm9wZXJseSBzd2FwIGJ5dGVzIG9mIHRoZSBkZXZpY2UncyBub2RlbmFtZSBpbgorICoJICBxbGEyeDAwX2NvbmZpZ3VyZV9sb2NhbF9sb29wKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTI1IE1hcmNoID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwYjguCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTIzIE1hcmNoID8/LCAyMDAzCQlBVgorICoJLSBSZW1vdmUgKCNkZWZpbmUpIElPQ0IgdXNhZ2UgdGhyb3R0bGluZy4KKyAqCS0gQWJzdHJhY3QgaW50ZXJydXB0IHBvbGxpbmcgd2l0aCBxbGEyeDAwX3BvbGwoKS4KKyAqCS0gTW9kaWZ5IGx1biBzY2FubmluZyBsb2dpYzoKKyAqCSAgLSBJZiB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIFNDU0kgUmVwb3J0IEx1bnMKKyAqCSAgICBjb21tYW5kLCB0aGUgZHJpdmVyIHdpbGwgbm93IG9ubHkgc2NhbiBmcm9tIDAgdG8gdGhlCisgKgkgICAgbWF4Iy1sdW5zIGFzIGRlZmluZWQgaW4gdGhlIE5WUkFNIChCSU9TKSwgcmF0aGVyIHRoYW4KKyAqCSAgICBibGluZGx5IHNjYW5uaW5nIGZyb20gMCB0byAyNTUgLS0gd2hpY2ggY291bGQgcmVzdWx0IGluCisgKgkgICAgYW4gaW5jcmVhc2UgaW4gc3RhcnR1cCB0aW1lIHdoZW4gcnVubmluZyBhZ2FpbnN0IHNsb3cKKyAqCSAgICAoSkJPRCkgZGV2aWNlcy4KKyAqCS0gUmV3b3JrIHJlc2V0IGxvZ2ljIGluIHFsYTJ4MDBfcmVzZXRfY2hpcCgpIChzcGVjKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMjIgTWFyY2ggPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIDYuMDUuMDBiNy4KKyAqCS0gQ2xlYW51cCAocmV3cml0ZSkgSVNSIGhhbmRsZXIuCisgKgktIFJlbmFtZSBrbWVtX3phbGxvYyAtLT4gcWxhMngwMF9rbWVtX3phbGxvYygpOgorICoJICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCisgKgktIEFkZCBuZXcgMjMwMCBWSVggZmlybXdhcmUgKDMuMDIuMDkpOgorICoJICAtIFN1cHBvcnQgZm9yIFRhcGUsIEZhYnJpYywgMksgbG9naW5zLCBJUCwgYW5kIFZJLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUxOCBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gU3VwcG9ydCAyMzJ4IHR5cGUgSVNQcy4KKyAqCS0gU3VwcG9ydCBzaW5nbGUgZmlybXdhcmUgZm9yIGVhY2ggSVNQIHR5cGU6CisgKgkgIC0gUmVzdHJ1Y3R1cmUgYnJkX2luZm8vZndfaW5mbyBtZXRob2RzLgorICoJICAtIFN0cmVhbWxpbmUgZmlybXdhcmUgbG9hZCBwcm9jZXNzLgorICoJICAtIFByb3Blcmx5IHF1ZXJ5IGZpcm13YXJlIGZvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICoJLSBSZW1vdmUgZXh0cmFuZW91cyBzY3NpX3FsYV9ob3N0IG1lbWJlcnM6CisgKgkgIC0gZGV2aWNlX2lkID09PiBwZGV2LT5kZXZpY2UKKyAqCS0gRml4IGZjNCBmZWF0dXJlcyAoUkZGX0lEKSByZWdpc3RyYXRpb24uCisgKgktIENvbnZlcnQga21lbV96YWxsb2MgLS0+IHFsYTJ4MDBfa21lbV96YWxsb2MoKS4KKyAqCS0gUmVtb3ZlIHVudXNlZC9leHRyYW5lb3VzICNkZWZpbmVzIChVU0VfUE9SVE5BTUUpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUxNCBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGI2LgorICoJLSBJbml0aWFsIHNvdXJjZS1jb2RlIHJlc3RydWN0dXJpbmcgZWZmb3J0LgorICoJICAtIEJ1aWxkIHByb2NlZHVyZS4KKyAqCSAgLSBTb3VyY2UgZmlsZSBsYXlvdXQgLS0gaW50dWl0aXZlIGNvbXBvbmVudCBsYXlvdXQuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCAjZGVmaW5lcyAoKlBFUkZPUk1BTkNFLCBXT1JEX0ZXX0xPQUQsIGV0YykuCisgKgktIEFkZCBzdXBwb3J0IGZvciAySyBsb2dpbnMgKFRQWCAtLSBmaXJtd2FyZSkuCisgKgktIEFkZCBtb2R1bGUgcGFyYW1ldGVyIHFsMnhzdXNwZW5kY291bnQuCisgKgktIEFkZCBuZXcgMjIwMCBJUC9UUCBmaXJtd2FyZSAoMi4wMi4wNCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTkJTWFyY2ggPz8sIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gVXNlIGtlcm5lbCBzdHJ1Y3QgbGlzdF9oZWFkIGZvciBmY3BvcnQgYW5kIGZjbHVuIGxpc3RzLgorICoJLSBSZW1vdmUgZXh0cmFuZW91cyAoTHxNKVNfNjRCSVRTKCkgYW5kIFFMMjFfNjQqKCkgZGVmaW5lcy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlOAlGZWJydWFyeSAyOCwgMjAwMwlSTC9ERy9SQS9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwYjMuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTcJRmVicnVhcnkgMjMsIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gQWRkIGFsdGVybmF0ZSBmYWJyaWMgc2Nhbm5pbmcgbG9naWMgKEdJRF9QVC9HTk5fSUQvR1BOX0lEKS4KKyAqCS0gUmVtb3ZlIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9uIGNoZWNrX3JlZ2lvbigpLgorICoJLSBBZGQgbmV3IDIzMDAgSVAvVFAgZmlybXdhcmUgKDMuMDIuMDgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU1CUphbnVhcnkgMjgsIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGIzLgorICoJLSBDb25zb2xpZGF0ZSBkZXZpY2VfcmVnIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgSVNQIHR5cGVzLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgbmV3IHF1ZXVlLWRlcHRoIHNlbGVjdGlvbi4KKyAqCS0gQWRkIG5ldyAyMzAwIElQL1RQIGZpcm13YXJlICgzLjAyLjA3KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMQlKYW51YXJ5IDE3LCAyMDAzCUFWCisgKgktIEluaXRpYWwgYnJhbmNoIGZyb20gNi4wNC4wMGI4IGRyaXZlci4KKyAqCS0gUmVtb3ZlIFZNV0FSRSBzcGVjaWZpYyBjb2RlLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgcGNpX2RyaXZlciBpbnRlcmZhY2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvcWxvZ2ljZmFzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThmOTkxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQKQEAgLTAsMCArMSw3OSBAQAorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUWxvZ2ljIEZBU1hYWCBmYW1pbHkgb2YgY2hpcHMuICBUaGlzIGRyaXZlcgorb25seSB3b3JrcyB3aXRoIHRoZSBJU0EsIFZMQiwgYW5kIFBDTUNJQSB2ZXJzaW9ucyBvZiB0aGUgUWxvZ2ljCitGYXN0U0NTSSEgIGNhcmRzIGFzIHdlbGwgYXMgYW55IG90aGVyIGNhcmQgYmFzZWQgb24gdGhlIEZBU1hYIGNoaXAKKyhpbmNsdWRpbmcgdGhlIENvbnRyb2wgQ29uY2VwdHMgU0NTSS9JREUvU0lPL1BJTy9GREMgY2FyZHMpLgorCitUaGlzIGRyaXZlciBkb2VzIE5PVCBzdXBwb3J0IHRoZSBQQ0kgdmVyc2lvbi4gIFN1cHBvcnQgZm9yIHRoZXNlIFBDSQorUWxvZ2ljIGJvYXJkczoKKworCSogSVEtUENJCisJKiBJUS1QQ0ktMTAKKwkqIElRLVBDSS1ECisKK2lzIHByb3ZpZGVkIGJ5IHRoZSBxbG9naWNpc3AuYyBkcml2ZXIuICBDaGVjayBSRUFETUUucWxvZ2ljaXNwIGZvcgorZGV0YWlscy4KKworTm9yIGRvZXMgaXQgc3VwcG9ydCB0aGUgUENJLUJhc2ljLCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgdGhlCisnYW01M2M5NzQnIGRyaXZlci4KKworUENNQ0lBIFNVUFBPUlQKKworVGhpcyBjdXJyZW50bHkgb25seSB3b3JrcyBpZiB0aGUgY2FyZCBpcyBlbmFibGVkIGZpcnN0IGZyb20gRE9TLiAgVGhpcworbWVhbnMgeW91IHdpbGwgaGF2ZSB0byBsb2FkIHlvdXIgc29ja2V0IGFuZCBjYXJkIHNlcnZpY2VzLCBhbmQKK1FMNDFET1MuU1lTIGFuZCBRTDQwRU5CTC5TWVMuICBUaGVzZSBhcmUgYSBtaW5pbXVtLCBidXQgbG9hZGluZyB0aGUKK3Jlc3Qgb2YgdGhlIG1vZHVsZXMgd29uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIG9wZXJhdGlvbi4gIFRoZSBuZXh0Cit0aGluZyB0byBkbyBpcyBsb2FkIHRoZSBrZXJuZWwgd2l0aG91dCByZXNldHRpbmcgdGhlIGhhcmR3YXJlLCB3aGljaAorY2FuIGJlIGEgc2ltcGxlIGN0cmwtYWx0LWRlbGV0ZSB3aXRoIGEgYm9vdCBmbG9wcHksIG9yIGJ5IHVzaW5nCitsb2FkbGluIHdpdGggdGhlIGtlcm5lbCBpbWFnZSBhY2Nlc3NpYmxlIGZyb20gRE9TLiAgSWYgeW91IGFyZSB1c2luZwordGhlIExpbnV4IFBDTUNJQSBkcml2ZXIsIHlvdSB3aWxsIGhhdmUgdG8gYWRqdXN0IGl0IG9yIG90aGVyd2lzZSBzdG9wCitpdCBmcm9tIGNvbmZpZ3VyaW5nIHRoZSBjYXJkLgorCitJIGFtIHdvcmtpbmcgd2l0aCB0aGUgUENNQ0lBIGdyb3VwIHRvIG1ha2UgaXQgbW9yZSBmbGV4aWJsZSwgYnV0IHRoYXQKK21heSB0YWtlIGEgd2hpbGUuCisKK0FMTCBDQVJEUworCitUaGUgdG9wIG9mIHRoZSBxbG9naWMuYyBmaWxlIGhhcyBhIG51bWJlciBvZiBkZWZpbmVzIHRoYXQgY29udHJvbHMKK2NvbmZpZ3VyYXRpb24uICBBcyBzaGlwcGVkLCBpdCBwcm92aWRlcyBhIGJhbGFuY2UgYmV0d2VlbiBzcGVlZCBhbmQKK2Z1bmN0aW9uLiAgSWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcywgdHJ5IHNldHRpbmcgU0xPV19DQUJMRSB0byAxLCBhbmQKK3RoZW4gdHJ5IGNoYW5naW5nIFVTRV9JUlEgYW5kIFRVUkJPX1BETUEgdG8gemVyby4gIElmIHlvdSBhcmUgZmFtaWxpYXIKK3dpdGggU0NTSSwgdGhlcmUgYXJlIG90aGVyIHNldHRpbmdzIHdoaWNoIGNhbiB0dW5lIHRoZSBidXMuCisKK0l0IG1heSBiZSBhIGdvb2QgaWRlYSB0byBlbmFibGUgUkVTRVRfQVRfU1RBUlQsIGVzcGVjaWFsbHkgaWYgdGhlCitkZXZpY2VzIG1heSBub3QgaGF2ZSBiZWVuIGp1c3QgcG93ZXJlZCB1cCwgb3IgaWYgeW91IGFyZSByZXN0YXJ0aW5nCithZnRlciBhIGNyYXNoLCBzaW5jZSB0aGV5IG1heSBiZSBidXN5IHRyeWluZyB0byBjb21wbGV0ZSB0aGUgbGFzdAorY29tbWFuZCBvciBzb21ldGhpbmcuICBJdCBjb21lcyB1cCBmYXN0ZXIgaWYgdGhpcyBpcyBzZXQgdG8gemVybywgYW5kCitpZiB5b3UgaGF2ZSByZWxpYWJsZSBoYXJkd2FyZSBhbmQgY29ubmVjdGlvbnMgaXQgbWF5IGJlIG1vcmUgdXNlZnVsIHRvCitub3QgcmVzZXQgdGhpbmdzLgorCitTT01FIFRST1VCTEVTSE9PVElORyBUSVBTCisKK01ha2Ugc3VyZSBpdCB3b3JrcyBwcm9wZXJseSB1bmRlciBET1MuICBZb3Ugc2hvdWxkIGFsc28gZG8gYW4gaW5pdGlhbCBGRElTSworb24gYSBuZXcgZHJpdmUgaWYgeW91IHdhbnQgcGFydGl0aW9ucy4KKworRG9uJ3QgZW5hYmxlIGFsbCB0aGUgc3BlZWR1cHMgZmlyc3QuICBJZiBhbnl0aGluZyBpcyB3cm9uZywgdGhleSB3aWxsIG1ha2UKK2FueSBwcm9ibGVtIHdvcnNlLgorCitJTVBPUlRBTlQKKworVGhlIGJlc3Qgd2F5IHRvIHRlc3QgaWYgeW91ciBjYWJsZXMsIHRlcm1pbmF0aW9uLCBldGMuIGFyZSBnb29kIGlzIHRvCitjb3B5IGEgdmVyeSBiaWcgZmlsZSAoZS5nLiBhIGRvdWJsZXNwYWNlIGNvbnRhaW5lciBmaWxlLCBvciBhIHZlcnkKK2xhcmdlIGV4ZWN1dGFibGUgb3IgYXJjaGl2ZSkuICBJdCBzaG91bGQgYmUgYXQgbGVhc3QgNSBtZWdhYnl0ZXMsIGJ1dAoreW91IGNhbiBkbyBtdWx0aXBsZSB0ZXN0cyBvbiBzbWFsbGVyIGZpbGVzLiAgVGhlbiBkbyBhIENPTVAgdG8gdmVyaWZ5Cit0aGF0IHRoZSBmaWxlIGNvcGllZCBwcm9wZXJseS4gIChUdXJuIG9mZiBhbGwgY2FjaGluZyB3aGVuIGRvaW5nIHRoZXNlCit0ZXN0cywgb3RoZXJ3aXNlIHlvdSB3aWxsIHRlc3QgeW91ciBSQU0gYW5kIG5vdCB0aGUgZmlsZXMpLiAgVGhlbiBkbworMTAgQ09NUHMsIGNvbXBhcmluZyB0aGUgc2FtZSBmaWxlIG9uIHRoZSBTQ1NJIGhhcmQgZHJpdmUsIGkuZS4gIkNPTVAKK3JlYWxiaWcuZG9jIHJlYWxiaWcuZG9jIi4gIFRoZW4gZG8gaXQgYWZ0ZXIgdGhlIGNvbXB1dGVyIGdldHMgd2FybS4KKworSSBub3RpY2VkIG15IHN5c3RlbSB3aGljaCBzZWVtcyB0byB3b3JrIDEwMCUgd291bGQgZmFpbCB0aGlzIHRlc3QgaWYKK3RoZSBjb21wdXRlciB3YXMgbGVmdCBvbiBmb3IgYSBmZXcgaG91cnMuICBJdCB3YXMgd29yc2Ugd2l0aCBsb25nZXIKK2NhYmxlcywgYW5kIG1vcmUgZGV2aWNlcyBvbiB0aGUgU0NTSSBidXMuICBXaGF0IHNlZW1zIHRvIGhhcHBlbiBpcwordGhhdCBpdCBnZXRzIGEgZmFsc2UgQUNLIGNhdXNpbmcgYW4gZXh0cmEgYnl0ZSB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZQorc3RyZWFtIChhbmQgdGhpcyBpcyBub3QgZGV0ZWN0ZWQpLiAgVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGJhZAordGVybWluYXRpb24gKHRoZSBBQ0sgY2FuIGJlIHJlZmxlY3RlZCksIG9yIGJ5IG5vaXNlIHdoZW4gdGhlIGNoaXBzCit3b3JrIGxlc3Mgd2VsbCBiZWNhdXNlIG9mIHRoZSBoZWF0LCBvciB3aGVuIGNhYmxlcyBnZXQgdG9vIGxvbmcgZm9yCit0aGUgc3BlZWQuCisKK1JlbWVtYmVyLCBpZiBpdCBkb2Vzbid0IHdvcmsgdW5kZXIgRE9TLCBpdCBwcm9iYWJseSB3b24ndCB3b3JrIHVuZGVyCitMaW51eC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNpc3AudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2lzcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyMGY2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvcWxvZ2ljaXNwLnR4dApAQCAtMCwwICsxLDMwIEBACitOb3RlcyBmb3IgdGhlIFFMb2dpYyBJU1AxMDIwIFBDSSBTQ1NJIERyaXZlcjoKKworVGhpcyBkcml2ZXIgd29ya3Mgd2VsbCBpbiBwcmFjdGljZSwgYnV0IGRvZXMgbm90IHN1cHBvcnQgZGlzY29ubmVjdC8KK3JlY29ubmVjdCwgd2hpY2ggbWFrZXMgdXNpbmcgaXQgd2l0aCB0YXBlIGRyaXZlcyBpbXByYWN0aWNhbC4KKworSXQgc2hvdWxkIHdvcmsgZm9yIG1vc3QgaG9zdCBhZGFwdG9ycyB3aXRoIHRoZSBJU1AxMDIwIGNoaXAuICBUaGUKK1FMb2dpYyBDb3Jwb3JhdGlvbiBwcm9kdWNlcyBzZXZlcmFsIFBDSSBTQ1NJIGFkYXB0ZXJzIHdoaWNoIHNob3VsZAord29yazoKKworCSogSVEtUENJCisJKiBJUS1QQ0ktMTAKKwkqIElRLVBDSS1ECisKK1RoaXMgZHJpdmVyIG1heSB3b3JrIHdpdGggYm9hcmRzIGNvbnRhaW5pbmcgdGhlIElTUDEwMjBBIG9yIElTUDEwNDBBCitjaGlwcywgYnV0IHRoYXQgaGFzIG5vdCBiZWVuIHRlc3RlZC4KKworVGhpcyBkcml2ZXIgd2lsbCBOT1Qgd29yayB3aXRoOgorCisJKiBJU0Egb3IgVkwgQnVzIFFsb2dpYyBjYXJkcyAodGhleSB1c2UgdGhlICdxbG9naWNmYXMnIGRyaXZlcikKKwkqIFBDSS1iYXNpYyAoaXQgdXNlcyB0aGUgJ2FtNTNjOTc0JyBkcml2ZXIpCisKK011Y2ggdGhhbmtzIHRvIFFMb2dpYydzIHRlY2ggc3VwcG9ydCBmb3IgcHJvdmlkaW5nIHRoZSBsYXRlc3QgSVNQMTAyMAorZmlybXdhcmUsIGFuZCBmb3IgdGFraW5nIHRoZSB0aW1lIHRvIHJldmlldyBteSBjb2RlLgorCitFcmlrIE1vZQorZWhtQGNyaXMuY29tCisKK1JldmlzZWQ6CitNaWNoYWVsIEEuIEdyaWZmaXRoCitncmlmQGNzLnVjci5lZHUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLWdlbmVyaWMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4ZTJiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLWdlbmVyaWMudHh0CkBAIC0wLDAgKzEsMTAxIEBACisgICAgICAgICAgICBOb3RlcyBvbiBMaW51eCBTQ1NJIEdlbmVyaWMgKHNnKSBkcml2ZXIKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAyMDEyNgorSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KK1RoZSBTQ1NJIEdlbmVyaWMgZHJpdmVyIChzZykgaXMgb25lIG9mIHRoZSBmb3VyICJoaWdoIGxldmVsIiBTQ1NJIGRldmljZQorZHJpdmVycyBhbG9uZyB3aXRoIHNkLCBzdCBhbmQgc3IgKGRpc2ssIHRhcGUgYW5kIENEUk9NIHJlc3BlY3RpdmVseSkuIFNnCitpcyBtb3JlIGdlbmVyYWxpemVkIChidXQgbG93ZXIgbGV2ZWwpIHRoYW4gaXRzIHNpYmxpbmdzIGFuZCB0ZW5kcyB0byBiZQordXNlZCBvbiBTQ1NJIGRldmljZXMgdGhhdCBkb24ndCBmaXQgaW50byB0aGUgYWxyZWFkeSBzZXJ2aWNlZCBjYXRlZ29yaWVzLgorVGh1cyBzZyBpcyB1c2VkIGZvciBzY2FubmVycywgQ0Qgd3JpdGVycyBhbmQgcmVhZGluZyBhdWRpbyBDRHMgZGlnaXRhbGx5CithbW9uZ3N0IG90aGVyIHRoaW5ncy4KKworUmF0aGVyIHRoYW4gZG9jdW1lbnQgdGhlIGRyaXZlcidzIGludGVyZmFjZSBoZXJlLCB2ZXJzaW9uIGluZm9ybWF0aW9uCitpcyBwcm92aWRlZCBwbHVzIHBvaW50ZXJzIChpLmUuIFVSTHMpIHdoZXJlIHRvIGZpbmQgZG9jdW1lbnRhdGlvbgorYW5kIGV4YW1wbGVzLgorCisKK01ham9yIHZlcnNpb25zIG9mIHRoZSBzZyBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZXJlIGFyZSB0aHJlZSBtYWpvciB2ZXJzaW9ucyBvZiBzZyBmb3VuZCBpbiB0aGUgbGludXgga2VybmVsIChsayk6CisgICAgICAtIHNnIHZlcnNpb24gMSAob3JpZ2luYWwpIGZyb20gMTk5MiB0byBlYXJseSAxOTk5IChsayAyLjIuNSkgLiAKKwlJdCBpcyBiYXNlZCBpbiB0aGUgc2dfaGVhZGVyIGludGVyZmFjZSBzdHJ1Y3R1cmUuCisgICAgICAtIHNnIHZlcnNpb24gMiBmcm9tIGxrIDIuMi42IGluIHRoZSAyLjIgc2VyaWVzLiBJdCBpcyBiYXNlZCBvbgorCWFuIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlIHNnX2hlYWRlciBpbnRlcmZhY2Ugc3RydWN0dXJlLgorICAgICAgLSBzZyB2ZXJzaW9uIDMgZm91bmQgaW4gdGhlIGxrIDIuNCBzZXJpZXMgKGFuZCB0aGUgbGsgMi41IHNlcmllcykuCisJSXQgYWRkcyB0aGUgc2dfaW9faGRyIGludGVyZmFjZSBzdHJ1Y3R1cmUuCisKKworU2cgZHJpdmVyIGRvY3VtZW50YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09CitUaGUgbW9zdCByZWNlbnQgZG9jdW1lbnRhdGlvbiBvZiB0aGUgc2cgZHJpdmVyIGlzIGtlcHQgYXQgdGhlIExpbnV4CitEb2N1bWVudGF0aW9uIFByb2plY3QncyAoTERQKSBzaXRlOiAKK2h0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vU0NTSS1HZW5lcmljLUhPV1RPCitUaGlzIGRlc2NyaWJlcyB0aGUgc2cgdmVyc2lvbiAzIGRyaXZlciBmb3VuZCBpbiB0aGUgbGsgMi40IHNlcmllcy4KK1RoZSBMRFAgcmVuZGVycyBkb2N1bWVudHMgaW4gc2luZ2xlIGFuZCBtdWx0aXBsZSBwYWdlIEhUTUwsIHBvc3RzY3JpcHQKK2FuZCBwZGYuIFRoaXMgZG9jdW1lbnQgY2FuIGFsc28gYmUgZm91bmQgYXQ6CitodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9zZ192M19oby5odG1sCisKK0RvY3VtZW50YXRpb24gZm9yIHRoZSB2ZXJzaW9uIDIgc2cgZHJpdmVyIGZvdW5kIGluIHRoZSBsayAyLjIgc2VyaWVzIGNhbgorYmUgZm91bmQgYXQgaHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3Avc2NzaS1nZW5lcmljLnR4dCAuIEEgbGFyZ2VyIHZlcnNpb24KK2lzIGF0OiAgaHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3Avc2NzaS1nZW5lcmljX2xvbmcudHh0IC4KKworVGhlIG9yaWdpbmFsIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzZyBkcml2ZXIgKHByaW9yIHRvIGxrIDIuMi42KSBjYW4gYmUKK2ZvdW5kIGF0IGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zZy9wL29yaWdpbmFsL1NDU0ktUHJvZ3JhbW1pbmctSE9XVE8udHh0CithbmQgaW4gdGhlIExEUCBhcmNoaXZlcy4KKworQSBjaGFuZ2Vsb2cgd2l0aCBicmllZiBub3RlcyBjYW4gYmUgZm91bmQgaW4gdGhlCisvdXNyL3NyYy9saW51eC9pbmNsdWRlL3Njc2kvc2cuaCBmaWxlLiBOb3RlIHRoYXQgdGhlIGdsaWJjIG1haW50YWluZXJzIGNvcHkgCithbmQgZWRpdCB0aGlzIGZpbGUgKHJlbW92aW5nIGl0cyBjaGFuZ2Vsb2cgZm9yIGV4YW1wbGUpIGJlZm9yZSBwbGFjaW5nIGl0IAoraW4gL3Vzci9pbmNsdWRlL3Njc2kvc2cuaCAuIERyaXZlciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIG5vdGVzIAorY2FuIGJlIGZvdW5kIGF0IHRoZSB0b3Agb2YgdGhlIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvc2NzaS9zZy5jIGZpbGUuCisKK0EgbW9yZSBnZW5lcmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBMaW51eCBTQ1NJIHN1YnN5c3RlbSBvZiB3aGljaCBzZyBpcyBhIAorcGFydCBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy50bGRwLm9yZy9IT1dUTy9TQ1NJLTIuNC1IT1dUTyAuCisKKworRXhhbXBsZSBjb2RlIGFuZCB1dGlsaXRpZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGVyZSBhcmUgdHdvIHBhY2thZ2VzIG9mIHNnIHV0aWxpdGllczoKKyAgLSBzZzNfdXRpbHMgICBmb3IgdGhlIHNnIHZlcnNpb24gMyBkcml2ZXIgZm91bmQgaW4gbGsgMi40CisgIC0gc2dfdXRpbHMgICAgZm9yIHRoZSBzZyB2ZXJzaW9uIDIgKGFuZCBvcmlnaW5hbCkgZHJpdmVyIGZvdW5kIGluIGxrIDIuMgorICAgICAgICAgICAgICAgIGFuZCBlYXJsaWVyCitCb3RoIHBhY2thZ2VzIHdpbGwgd29yayBpbiB0aGUgbGsgMi40IHNlcmllcyBob3dldmVyIHNnM191dGlscyBvZmZlcnMgbW9yZQorY2FwYWJpbGl0aWVzLiBUaGV5IGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy50b3JxdWUubmV0L3NnIGFuZCAKK2ZyZXNobWVhdC5uZXQKKworQW5vdGhlciBhcHByb2FjaCBpcyB0byBsb29rIGF0IHRoZSBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIHNnIGRyaXZlci4KK1RoZXNlIGluY2x1ZGUgY2RyZWNvcmQsIGNkcGFyYW5vaWEsIFNBTkUgYW5kIGNkcmRhby4KKworCitNYXBwaW5nIG9mIExpbnV4IGtlcm5lbCB2ZXJzaW9ucyB0byBzZyBkcml2ZXIgdmVyc2lvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSGVyZSBpcyBhIGxpc3Qgb2YgbGludXgga2VybmVscyBpbiB0aGUgMi40IHNlcmllcyB0aGF0IGhhZCBuZXcgdmVyc2lvbgorb2YgdGhlIHNnIGRyaXZlcjoKKyAgICAgIGxrIDIuNC4wIDogc2cgdmVyc2lvbiAzLjEuMTcKKyAgICAgIGxrIDIuNC43IDogc2cgdmVyc2lvbiAzLjEuMTkgCisgICAgICBsayAyLjQuMTAgOiBzZyB2ZXJzaW9uIDMuMS4yMCAgKioKKyAgICAgIGxrIDIuNC4xNyA6IHNnIHZlcnNpb24gMy4xLjIyIAorCisqKiBUaGVyZSB3ZXJlIDMgY2hhbmdlcyB0byBzZyB2ZXJzaW9uIDMuMS4yMCBieSB0aGlyZCBwYXJ0aWVzIGluIHRoZQorICAgbmV4dCBzaXggbGludXgga2VybmVsIHZlcnNpb25zLgorCitGb3IgcmVmZXJlbmNlIGhlcmUgaXMgYSBsaXN0IG9mIGxpbnV4IGtlcm5lbHMgaW4gdGhlIDIuMiBzZXJpZXMgdGhhdCBoYWQgCituZXcgdmVyc2lvbiBvZiB0aGUgc2cgZHJpdmVyOgorICAgICAgbGsgMi4yLjAgOiBvcmlnaW5hbCBzZyB2ZXJzaW9uIFt3aXRoIG5vIHZlcnNpb24gbnVtYmVyXQorICAgICAgbGsgMi4yLjYgOiBzZyB2ZXJzaW9uIDIuMS4zMQorICAgICAgbGsgMi4yLjggOiBzZyB2ZXJzaW9uIDIuMS4zMgorICAgICAgbGsgMi4yLjEwIDogc2cgdmVyc2lvbiAyLjEuMzQgW1NHX0dFVF9WRVJTSU9OX05VTSBpb2N0bCBmaXJzdCBhcHBlYXJlZF0KKyAgICAgIGxrIDIuMi4xNCA6IHNnIHZlcnNpb24gMi4xLjM2CisgICAgICBsayAyLjIuMTYgOiBzZyB2ZXJzaW9uIDIuMS4zOAorICAgICAgbGsgMi4yLjE3IDogc2cgdmVyc2lvbiAyLjEuMzkKKyAgICAgIGxrIDIuMi4yMCA6IHNnIHZlcnNpb24gMi4xLjQwCisKK1RoZSBsayAyLjUgZGV2ZWxvcG1lbnQgc2VyaWVzIGhhcyByZWNlbnRseSBjb21tZW5jZWQgYW5kIGl0IGN1cnJlbnRseQorY29udGFpbnMgc2cgdmVyc2lvbiAzLjUuMjMgd2hpY2ggaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gc2cKK3ZlcnNpb24gMy4xLjIyIGZvdW5kIGluIGxrIDIuNC4xNyAuCisKKworRG91Z2xhcyBHaWxiZXJ0CisyNnRoIEphbnVhcnkgMjAwMgorZGdpbGJlcnRAaW50ZXJsb2cuY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxYmJmNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLnR4dApAQCAtMCwwICsxLDQ0IEBACitTQ1NJIHN1YnN5c3RlbSBkb2N1bWVudGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgTGludXggRG9jdW1lbnRhdGlvbiBQcm9qZWN0IChMRFApIG1haW50YWlucyBhIGRvY3VtZW50IGRlc2NyaWJpbmcKK3RoZSBTQ1NJIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsIChsaykgMi40IHNlcmllcy4gU2VlOgoraHR0cDovL3d3dy50bGRwLm9yZy9IT1dUTy9TQ1NJLTIuNC1IT1dUTyAuIFRoZSBMRFAgaGFzIHNpbmdsZQorYW5kIG11bHRpcGxlIHBhZ2UgSFRNTCByZW5kZXJpbmdzIGFzIHdlbGwgYXMgcG9zdHNjcmlwdCBhbmQgcGRmLgorSXQgY2FuIGFsc28gYmUgZm91bmQgYXQgaHR0cDovL3d3dy50b3JxdWUubmV0L3Njc2kvU0NTSS0yLjQtSE9XVE8gLgorCisKK05vdGVzIG9uIHVzaW5nIG1vZHVsZXMgaW4gdGhlIFNDU0kgc3Vic3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIHNjc2kgc3VwcG9ydCBpbiB0aGUgbGludXgga2VybmVsIGNhbiBiZSBtb2R1bGFyaXplZCBpbiBhIG51bWJlciBvZiAKK2RpZmZlcmVudCB3YXlzIGRlcGVuZGluZyB1cG9uIHRoZSBuZWVkcyBvZiB0aGUgZW5kIHVzZXIuICBUbyB1bmRlcnN0YW5kCit5b3VyIG9wdGlvbnMsIHdlIHNob3VsZCBmaXJzdCBkZWZpbmUgYSBmZXcgdGVybXMuCisKK1RoZSBzY3NpLWNvcmUgKGFsc28ga25vd24gYXMgdGhlICJtaWQgbGV2ZWwiKSBjb250YWlucyB0aGUgY29yZSBvZiBzY3NpIAorc3VwcG9ydC4gIFdpdGhvdXQgaXQgeW91IGNhbiBkbyBub3RoaW5nIHdpdGggYW55IG9mIHRoZSBvdGhlciBzY3NpIGRyaXZlcnMuCitUaGUgc2NzaSBjb3JlIHN1cHBvcnQgY2FuIGJlIGEgbW9kdWxlIChzY3NpX21vZC5vKSwgb3IgaXQgY2FuIGJlIGJ1aWx0IGludG8KK3RoZSBrZXJuZWwuIElmIHRoZSBjb3JlIGlzIGEgbW9kdWxlLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBzY3NpIG1vZHVsZSAKK2xvYWRlZCwgYW5kIGlmIHlvdSB1bmxvYWQgdGhlIG1vZHVsZXMsIGl0IHdpbGwgaGF2ZSB0byBiZSB0aGUgbGFzdCBvbmUgCit1bmxvYWRlZC4gIEluIHByYWN0aWNlIHRoZSBtb2Rwcm9iZSBhbmQgcm1tb2QgY29tbWFuZHMgKGFuZCAiYXV0b2NsZWFuIikKK3dpbGwgZW5mb3JjZSB0aGUgY29ycmVjdCBvcmRlcmluZyBvZiBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgbW9kdWxlcyBpbgordGhlIFNDU0kgc3Vic3lzdGVtLgorCitUaGUgaW5kaXZpZHVhbCB1cHBlciBhbmQgbG93ZXIgbGV2ZWwgZHJpdmVycyBjYW4gYmUgbG9hZGVkIGluIGFueSBvcmRlciAKK29uY2UgdGhlIHNjc2kgY29yZSBpcyBwcmVzZW50IGluIHRoZSBrZXJuZWwgKGVpdGhlciBjb21waWxlZCBpbiBvciBsb2FkZWQKK2FzIGEgbW9kdWxlKS4gIFRoZSBkaXNrIGRyaXZlciAoc2RfbW9kLm8pLCBjZHJvbSBkcml2ZXIgKHNyX21vZC5vKSwKK3RhcGUgZHJpdmVyICoqIChzdC5vKSBhbmQgc2NzaSBnZW5lcmljcyBkcml2ZXIgKHNnLm8pIHJlcHJlc2VudCB0aGUgdXBwZXIgCitsZXZlbCBkcml2ZXJzIHRvIHN1cHBvcnQgdGhlIHZhcmlvdXMgYXNzb3J0ZWQgZGV2aWNlcyB3aGljaCBjYW4gYmUgCitjb250cm9sbGVkLiAgWW91IGNhbiBmb3IgZXhhbXBsZSBsb2FkIHRoZSB0YXBlIGRyaXZlciB0byB1c2UgdGhlIHRhcGUgZHJpdmUsIAorYW5kIHRoZW4gdW5sb2FkIGl0IG9uY2UgeW91IGhhdmUgbm8gZnVydGhlciBuZWVkIGZvciB0aGUgZHJpdmVyIChhbmQgcmVsZWFzZQordGhlIGFzc29jaWF0ZWQgbWVtb3J5KS4KKworVGhlIGxvd2VyIGxldmVsIGRyaXZlcnMgYXJlIHRoZSBvbmVzIHRoYXQgc3VwcG9ydCB0aGUgaW5kaXZpZHVhbCBjYXJkcyB0aGF0CithcmUgc3VwcG9ydGVkIGZvciB0aGUgaGFyZHdhcmUgcGxhdGZvcm0gdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdW5kZXIuIFRob3NlCitpbmRpdmlkdWFsIGNhcmRzIGFyZSBvZnRlbiBjYWxsZWQgSG9zdCBCdXMgQWRhcHRlcnMgKEhCQXMpLiBGb3IgZXhhbXBsZSB0aGUKK2FpYzd4eHgubyBkcml2ZXIgaXMgdXNlZCB0byBjb250cm9sIGFsbCByZWNlbnQgU0NTSSBjb250cm9sbGVyIGNhcmRzIGZyb20gCitBZGFwdGVjLiBBbG1vc3QgYWxsIGxvd2VyIGxldmVsIGRyaXZlcnMgY2FuIGJlIGJ1aWx0IGVpdGhlciBhcyBtb2R1bGVzIG9yIAorYnVpbHQgaW50byB0aGUga2VybmVsLgorCisKKyoqIFRoZXJlIGlzIGEgdmFyaWFudCBvZiB0aGUgc3QgZHJpdmVyIGZvciBjb250cm9sbGluZyBPblN0cmVhbSB0YXBlCisgICBkZXZpY2VzLiBJdHMgbW9kdWxlIG5hbWUgaXMgb3NzdC5vIC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjQxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKQEAgLTAsMCArMSwxNTQ2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgIExpbnV4IEtlcm5lbCAyLjYgc2VyaWVzCisgICAgICAgICAgICAgICAgIFNDU0kgbWlkX2xldmVsIC0gbG93ZXJfbGV2ZWwgZHJpdmVyIGludGVyZmFjZQorICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KK1RoaXMgZG9jdW1lbnQgb3V0bGluZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBMaW51eCBTQ1NJIG1pZCBsZXZlbCBhbmQKK1NDU0kgbG93ZXIgbGV2ZWwgZHJpdmVycy4gTG93ZXIgbGV2ZWwgZHJpdmVycyAoTExEcykgYXJlIHZhcmlvdXNseSBjYWxsZWQgCitob3N0IGJ1cyBhZGFwdGVyIChIQkEpIGRyaXZlcnMgYW5kIGhvc3QgZHJpdmVycyAoSEQpLiBBICJob3N0IiBpbiB0aGlzCitjb250ZXh0IGlzIGEgYnJpZGdlIGJldHdlZW4gYSBjb21wdXRlciBJTyBidXMgKGUuZy4gUENJIG9yIElTQSkgYW5kIGEKK3NpbmdsZSBTQ1NJIGluaXRpYXRvciBwb3J0IG9uIGEgU0NTSSB0cmFuc3BvcnQuIEFuICJpbml0aWF0b3IiIHBvcnQKKyhTQ1NJIHRlcm1pbm9sb2d5LCBzZWUgU0FNLTMgYXQgaHR0cDovL3d3dy50MTAub3JnKSBzZW5kcyBTQ1NJIGNvbW1hbmRzCit0byAidGFyZ2V0IiBTQ1NJIHBvcnRzIChlLmcuIGRpc2tzKS4gVGhlcmUgY2FuIGJlIG1hbnkgTExEcyBpbiBhIHJ1bm5pbmcKK3N5c3RlbSwgYnV0IG9ubHkgb25lIHBlciBoYXJkd2FyZSB0eXBlLiBNb3N0IExMRHMgY2FuIGNvbnRyb2wgb25lIG9yIG1vcmUKK1NDU0kgSEJBcy4gU29tZSBIQkFzIGNvbnRhaW4gbXVsdGlwbGUgaG9zdHMuCisKK0luIHNvbWUgY2FzZXMgdGhlIFNDU0kgdHJhbnNwb3J0IGlzIGFuIGV4dGVybmFsIGJ1cyB0aGF0IGFscmVhZHkgaGFzCitpdHMgb3duIHN1YnN5c3RlbSBpbiBMaW51eCAoZS5nLiBVU0IgYW5kIGllZWUxMzk0KS4gSW4gc3VjaCBjYXNlcyB0aGUKK1NDU0kgc3Vic3lzdGVtIExMRCBpcyBhIHNvZnR3YXJlIGJyaWRnZSB0byB0aGUgb3RoZXIgZHJpdmVyIHN1YnN5c3RlbS4KK0V4YW1wbGVzIGFyZSB0aGUgdXNiLXN0b3JhZ2UgZHJpdmVyIChmb3VuZCBpbiB0aGUgZHJpdmVycy91c2Ivc3RvcmFnZQorZGlyZWN0b3J5KSBhbmQgdGhlIGllZWUxMzk0L3NicDIgZHJpdmVyIChmb3VuZCBpbiB0aGUgZHJpdmVycy9pZWVlMTM5NAorZGlyZWN0b3J5KS4KKworRm9yIGV4YW1wbGUsIHRoZSBhaWM3eHh4IExMRCBjb250cm9scyBBZGFwdGVjIFNDU0kgcGFyYWxsZWwgaW50ZXJmYWNlCisoU1BJKSBjb250cm9sbGVycyBiYXNlZCBvbiB0aGF0IGNvbXBhbnkncyA3eHh4IGNoaXAgc2VyaWVzLiBUaGUgYWljN3h4eAorTExEIGNhbiBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgbG9hZGVkIGFzIGEgbW9kdWxlLiBUaGVyZSBjYW4gb25seSBiZQorb25lIGFpYzd4eHggTExEIHJ1bm5pbmcgaW4gYSBMaW51eCBzeXN0ZW0gYnV0IGl0IG1heSBiZSBjb250cm9sbGluZyBtYW55IAorSEJBcy4gVGhlc2UgSEJBcyBtaWdodCBiZSBlaXRoZXIgb24gUENJIGRhdWdodGVyLWJvYXJkcyBvciBidWlsdCBpbnRvIAordGhlIG1vdGhlcmJvYXJkIChvciBib3RoKS4gU29tZSBhaWM3eHh4IGJhc2VkIEhCQXMgYXJlIGR1YWwgY29udHJvbGxlcnMKK2FuZCB0aHVzIHJlcHJlc2VudCB0d28gaG9zdHMuIExpa2UgbW9zdCBtb2Rlcm4gSEJBcywgZWFjaCBhaWM3eHh4IGhvc3QKK2hhcyBpdHMgb3duIFBDSSBkZXZpY2UgYWRkcmVzcy4gW1RoZSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4KK2EgU0NTSSBob3N0IGFuZCBhIFBDSSBkZXZpY2UgaXMgY29tbW9uIGJ1dCBub3QgcmVxdWlyZWQgKGUuZy4gd2l0aAorSVNBIG9yIE1DQSBhZGFwdGVycykuXQorCitUaGUgU0NTSSBtaWQgbGV2ZWwgaXNvbGF0ZXMgYW4gTExEIGZyb20gb3RoZXIgbGF5ZXJzIHN1Y2ggYXMgdGhlIFNDU0kKK3VwcGVyIGxheWVyIGRyaXZlcnMgYW5kIHRoZSBibG9jayBsYXllci4KKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCByb3VnaGx5IG1hdGNoZXMgbGludXgga2VybmVsIHZlcnNpb24gMi42LjggLgorCitEb2N1bWVudGF0aW9uCis9PT09PT09PT09PT09CitUaGVyZSBpcyBhIFNDU0kgZG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIAordHlwaWNhbGx5IERvY3VtZW50YXRpb24vc2NzaSAuIE1vc3QgZG9jdW1lbnRzIGFyZSBpbiBwbGFpbgorKGkuZS4gQVNDSUkpIHRleHQuIFRoaXMgZmlsZSBpcyBuYW1lZCBzY3NpX21pZF9sb3dfYXBpLnR4dCBhbmQgY2FuIGJlIAorZm91bmQgaW4gdGhhdCBkaXJlY3RvcnkuIEEgbW9yZSByZWNlbnQgY29weSBvZiB0aGlzIGRvY3VtZW50IG1heSBiZSBmb3VuZAorYXQgaHR0cDovL3d3dy50b3JxdWUubmV0L3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQuZ3ogLiAKK01hbnkgTExEcyBhcmUgZG9jdW1lbnRlZCB0aGVyZSAoZS5nLiBhaWM3eHh4LnR4dCkuIFRoZSBTQ1NJIG1pZC1sZXZlbCBpcworYnJpZWZseSBkZXNjcmliZWQgaW4gc2NzaS50eHQgd2hpY2ggY29udGFpbnMgYSB1cmwgdG8gYSBkb2N1bWVudCAKK2Rlc2NyaWJpbmcgdGhlIFNDU0kgc3Vic3lzdGVtIGluIHRoZSBsayAyLjQgc2VyaWVzLiBUd28gdXBwZXIgbGV2ZWwgCitkcml2ZXJzIGhhdmUgZG9jdW1lbnRzIGluIHRoYXQgZGlyZWN0b3J5OiBzdC50eHQgKFNDU0kgdGFwZSBkcml2ZXIpIGFuZCAKK3Njc2ktZ2VuZXJpYy50eHQgKGZvciB0aGUgc2cgZHJpdmVyKS4KKworU29tZSBkb2N1bWVudGF0aW9uIChvciB1cmxzKSBmb3IgTExEcyBtYXkgYmUgZm91bmQgaW4gdGhlIEMgc291cmNlIGNvZGUKK29yIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgQyBzb3VyY2UgY29kZS4gRm9yIGV4YW1wbGUgdG8gZmluZCBhIHVybAorYWJvdXQgdGhlIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyIHNlZSB0aGUgCisvdXNyL3NyYy9saW51eC9kcml2ZXJzL3VzYi9zdG9yYWdlIGRpcmVjdG9yeS4KKworVGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2lkcml2ZXJzLnRtcGwgZmlsZQorcmVmZXJzIHRvIHRoaXMgZmlsZS4gV2l0aCB0aGUgYXBwcm9wcmlhdGUgRG9jQm9vayB0b29sLXNldCwgdGhpcyBwZXJtaXRzCit1c2VycyB0byBnZW5lcmF0ZSBodG1sLCBwcyBhbmQgcGRmIHJlbmRlcmluZ3Mgb2YgaW5mb3JtYXRpb24gd2l0aGluIHRoaXMKK2ZpbGUgKGUuZy4gdGhlIGludGVyZmFjZSBmdW5jdGlvbnMpLgorCitEcml2ZXIgc3RydWN0dXJlCis9PT09PT09PT09PT09PT09CitUcmFkaXRpb25hbGx5IGFuIExMRCBmb3IgdGhlIFNDU0kgc3Vic3lzdGVtIGhhcyBiZWVuIGF0IGxlYXN0IHR3byBmaWxlcyBpbgordGhlIGRyaXZlcnMvc2NzaSBkaXJlY3RvcnkuIEZvciBleGFtcGxlLCBhIGRyaXZlciBjYWxsZWQgInh5eiIgaGFzIGEgaGVhZGVyCitmaWxlICJ4eXouaCIgYW5kIGEgc291cmNlIGZpbGUgInh5ei5jIi4gW0FjdHVhbGx5IHRoZXJlIGlzIG5vIGdvb2QgcmVhc29uCit3aHkgdGhpcyBjb3VsZG4ndCBhbGwgYmUgaW4gb25lIGZpbGU7IHRoZSBoZWFkZXIgZmlsZSBpcyBzdXBlcmZsdW91cy5dIFNvbWUKK2RyaXZlcnMgdGhhdCBoYXZlIGJlZW4gcG9ydGVkIHRvIHNldmVyYWwgb3BlcmF0aW5nIHN5c3RlbXMgaGF2ZSBtb3JlIHRoYW4KK3R3byBmaWxlcy4gRm9yIGV4YW1wbGUgdGhlIGFpYzd4eHggZHJpdmVyIGhhcyBzZXBhcmF0ZSBmaWxlcyBmb3IgZ2VuZXJpYyAKK2FuZCBPUy1zcGVjaWZpYyBjb2RlIChlLmcuIEZyZWVCU0QgYW5kIExpbnV4KS4gU3VjaCBkcml2ZXJzIHRlbmQgdG8gaGF2ZQordGhlaXIgb3duIGRpcmVjdG9yeSB1bmRlciB0aGUgZHJpdmVycy9zY3NpIGRpcmVjdG9yeS4KKworV2hlbiBhIG5ldyBMTEQgaXMgYmVpbmcgYWRkZWQgdG8gTGludXgsIHRoZSBmb2xsb3dpbmcgZmlsZXMgKGZvdW5kIGluIHRoZQorZHJpdmVycy9zY3NpIGRpcmVjdG9yeSkgd2lsbCBuZWVkIHNvbWUgYXR0ZW50aW9uOiBNYWtlZmlsZSBhbmQgS2NvbmZpZyAuCitJdCBpcyBwcm9iYWJseSBiZXN0IHRvIHN0dWR5IGhvdyBleGlzdGluZyBMTERzIGFyZSBvcmdhbml6ZWQuCisKK0FzIHRoZSAyLjUgc2VyaWVzIGRldmVsb3BtZW50IGtlcm5lbHMgZXZvbHZlIGludG8gdGhlIDIuNiBzZXJpZXMKK3Byb2R1Y3Rpb24gc2VyaWVzLCBjaGFuZ2VzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIGludG8gdGhpcyBpbnRlcmZhY2UuIEFuCitleGFtcGxlIG9mIHRoaXMgaXMgZHJpdmVyIGluaXRpYWxpemF0aW9uIGNvZGUgd2hlcmUgdGhlcmUgYXJlIG5vdyAyIG1vZGVscworYXZhaWxhYmxlLiBUaGUgb2xkZXIgb25lLCBzaW1pbGFyIHRvIHdoYXQgd2FzIGZvdW5kIGluIHRoZSBsayAyLjQgc2VyaWVzLAoraXMgYmFzZWQgb24gaG9zdHMgdGhhdCBhcmUgZGV0ZWN0ZWQgYXQgSEJBIGRyaXZlciBsb2FkIHRpbWUuIFRoaXMgd2lsbCBiZQorcmVmZXJyZWQgdG8gdGhlICJwYXNzaXZlIiBpbml0aWFsaXphdGlvbiBtb2RlbC4gVGhlIG5ld2VyIG1vZGVsIGFsbG93cyBIQkFzCit0byBiZSBob3QgcGx1Z2dlZCAoYW5kIHVucGx1Z2dlZCkgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgTExEIGFuZCB3aWxsCitiZSByZWZlcnJlZCB0byBhcyB0aGUgImhvdHBsdWciIGluaXRpYWxpemF0aW9uIG1vZGVsLiBUaGUgbmV3ZXIgbW9kZWwgaXMKK3ByZWZlcnJlZCBhcyBpdCBjYW4gaGFuZGxlIGJvdGggdHJhZGl0aW9uYWwgU0NTSSBlcXVpcG1lbnQgdGhhdCBpcworcGVybWFuZW50bHkgY29ubmVjdGVkIGFzIHdlbGwgYXMgbW9kZXJuICJTQ1NJIiBkZXZpY2VzIChlLmcuIFVTQiBvcgorSUVFRSAxMzk0IGNvbm5lY3RlZCBkaWdpdGFsIGNhbWVyYXMpIHRoYXQgYXJlIGhvdHBsdWdnZWQuIEJvdGggCitpbml0aWFsaXphdGlvbiBtb2RlbHMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorCitBbiBMTEQgaW50ZXJmYWNlcyB0byB0aGUgU0NTSSBzdWJzeXN0ZW0gc2V2ZXJhbCB3YXlzOgorICBhKSBkaXJlY3RseSBpbnZva2luZyBmdW5jdGlvbnMgc3VwcGxpZWQgYnkgdGhlIG1pZCBsZXZlbAorICBiKSBwYXNzaW5nIGEgc2V0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uCisgICAgIHN1cHBsaWVkIGJ5IHRoZSBtaWQgbGV2ZWwuIFRoZSBtaWQgbGV2ZWwgd2lsbCB0aGVuIGludm9rZSB0aGVzZQorICAgICBmdW5jdGlvbnMgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLiBUaGUgTExEIHdpbGwgc3VwcGx5CisgICAgIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMuCisgIGMpIGRpcmVjdCBhY2Nlc3MgdG8gaW5zdGFuY2VzIG9mIHdlbGwga25vd24gZGF0YSBzdHJ1Y3R1cmVzIG1haW50YWluZWQKKyAgICAgYnkgdGhlIG1pZCBsZXZlbAorCitUaG9zZSBmdW5jdGlvbnMgaW4gZ3JvdXAgYSkgYXJlIGxpc3RlZCBpbiBhIHNlY3Rpb24gZW50aXRsZWQgIk1pZCBsZXZlbAorc3VwcGxpZWQgZnVuY3Rpb25zIiBiZWxvdy4KKworVGhvc2UgZnVuY3Rpb25zIGluIGdyb3VwIGIpIGFyZSBsaXN0ZWQgaW4gYSBzZWN0aW9uIGVudGl0bGVkICJJbnRlcmZhY2UKK2Z1bmN0aW9ucyIgYmVsb3cuIFRoZWlyIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBwbGFjZWQgaW4gdGhlIG1lbWJlcnMgb2YKKyJzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIiwgYW4gaW5zdGFuY2Ugb2Ygd2hpY2ggaXMgcGFzc2VkIHRvCitzY3NpX2hvc3RfYWxsb2MoKSAqKiAuICBUaG9zZSBpbnRlcmZhY2UgZnVuY3Rpb25zIHRoYXQgdGhlIExMRCBkb2VzIG5vdCAKK3dpc2ggdG8gc3VwcGx5IHNob3VsZCBoYXZlIE5VTEwgcGxhY2VkIGluIHRoZSBjb3JyZXNwb25kaW5nIG1lbWJlciBvZiAKK3N0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUuICBEZWZpbmluZyBhbiBpbnN0YW5jZSBvZiBzdHJ1Y3QgCitzY3NpX2hvc3RfdGVtcGxhdGUgYXQgZmlsZSBzY29wZSB3aWxsIGNhdXNlIE5VTEwgdG8gYmUgIHBsYWNlZCBpbiBmdW5jdGlvbgorIHBvaW50ZXIgbWVtYmVycyBub3QgZXhwbGljaXRseSBpbml0aWFsaXplZC4KKworVGhvc2UgdXNhZ2VzIGluIGdyb3VwIGMpIHNob3VsZCBiZSBoYW5kbGVkIHdpdGggY2FyZSwgZXNwZWNpYWxseSBpbiBhCisiaG90cGx1ZyIgZW52aXJvbm1lbnQuIExMRHMgc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSBsaWZldGltZSBvZiBpbnN0YW5jZXMKK3RoYXQgYXJlIHNoYXJlZCB3aXRoIHRoZSBtaWQgbGV2ZWwgYW5kIG90aGVyIGxheWVycy4KKworQWxsIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBhbiBMTEQgYW5kIGFsbCBkYXRhIGRlZmluZWQgYXQgZmlsZSBzY29wZQorc2hvdWxkIGJlIHN0YXRpYy4gRm9yIGV4YW1wbGUgdGhlIHNsYXZlX2FsbG9jKCkgZnVuY3Rpb24gaW4gYW4gTExECitjYWxsZWQgInh4eCIgY291bGQgYmUgZGVmaW5lZCBhcyAKKyJzdGF0aWMgaW50IHh4eF9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2KSB7IC8qIGNvZGUgKi8gfSIKKworKiogdGhlIHNjc2lfaG9zdF9hbGxvYygpIGZ1bmN0aW9uIGlzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSByYXRoZXIgdmFndWVseQorbmFtZWQgc2NzaV9yZWdpc3RlcigpIGZ1bmN0aW9uIGluIG1vc3Qgc2l0dWF0aW9ucy4gVGhlIHNjc2lfcmVnaXN0ZXIoKQorYW5kIHNjc2lfdW5yZWdpc3RlcigpIGZ1bmN0aW9ucyByZW1haW4gdG8gc3VwcG9ydCBsZWdhY3kgTExEcyB0aGF0IHVzZQordGhlIHBhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZWwuCisKKworSG90cGx1ZyBpbml0aWFsaXphdGlvbiBtb2RlbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSW4gdGhpcyBtb2RlbCBhbiBMTEQgY29udHJvbHMgd2hlbiBTQ1NJIGhvc3RzIGFyZSBpbnRyb2R1Y2VkIGFuZCByZW1vdmVkCitmcm9tIHRoZSBTQ1NJIHN1YnN5c3RlbS4gSG9zdHMgY2FuIGJlIGludHJvZHVjZWQgYXMgZWFybHkgYXMgZHJpdmVyCitpbml0aWFsaXphdGlvbiBhbmQgcmVtb3ZlZCBhcyBsYXRlIGFzIGRyaXZlciBzaHV0ZG93bi4gVHlwaWNhbGx5IGEgZHJpdmVyCit3aWxsIHJlc3BvbmQgdG8gYSBzeXNmcyBwcm9iZSgpIGNhbGxiYWNrIHRoYXQgaW5kaWNhdGVzIGFuIEhCQSBoYXMgYmVlbgorZGV0ZWN0ZWQuIEFmdGVyIGNvbmZpcm1pbmcgdGhhdCB0aGUgbmV3IGRldmljZSBpcyBvbmUgdGhhdCB0aGUgTExEIHdhbnRzCit0byBjb250cm9sLCB0aGUgTExEIHdpbGwgaW5pdGlhbGl6ZSB0aGUgSEJBIGFuZCB0aGVuIHJlZ2lzdGVyIGEgbmV3IGhvc3QKK3dpdGggdGhlIFNDU0kgbWlkIGxldmVsLgorCitEdXJpbmcgTExEIGluaXRpYWxpemF0aW9uIHRoZSBkcml2ZXIgc2hvdWxkIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZQorYXBwcm9wcmlhdGUgSU8gYnVzIG9uIHdoaWNoIGl0IGV4cGVjdHMgdG8gZmluZCBIQkEocykgKGUuZy4gdGhlIFBDSSBidXMpLgorVGhpcyBjYW4gcHJvYmFibHkgYmUgZG9uZSB2aWEgc3lzZnMuIEFueSBkcml2ZXIgcGFyYW1ldGVycyAoZXNwZWNpYWxseQordGhvc2UgdGhhdCBhcmUgd3JpdGFibGUgYWZ0ZXIgdGhlIGRyaXZlciBpcyBsb2FkZWQpIGNvdWxkIGFsc28gYmUKK3JlZ2lzdGVyZWQgd2l0aCBzeXNmcyBhdCB0aGlzIHBvaW50LiBUaGUgU0NTSSBtaWQgbGV2ZWwgZmlyc3QgYmVjb21lcworYXdhcmUgb2YgYW4gTExEIHdoZW4gdGhhdCBMTEQgcmVnaXN0ZXJzIGl0cyBmaXJzdCBIQkEuCisKK0F0IHNvbWUgbGF0ZXIgdGltZSwgdGhlIExMRCBiZWNvbWVzIGF3YXJlIG9mIGFuIEhCQSBhbmQgd2hhdCBmb2xsb3dzCitpcyBhIHR5cGljYWwgc2VxdWVuY2Ugb2YgY2FsbHMgYmV0d2VlbiB0aGUgTExEIGFuZCB0aGUgbWlkIGxldmVsLgorVGhpcyBleGFtcGxlIHNob3dzIHRoZSBtaWQgbGV2ZWwgc2Nhbm5pbmcgdGhlIG5ld2x5IGludHJvZHVjZWQgSEJBIGZvciAzIAorc2NzaSBkZXZpY2VzIG9mIHdoaWNoIG9ubHkgdGhlIGZpcnN0IDIgcmVzcG9uZDoKKworICAgICBIQkEgUFJPQkU6IGFzc3VtZSAyIFNDU0kgZGV2aWNlcyBmb3VuZCBpbiBzY2FuCitMTEQgICAgICAgICAgICAgICAgICAgbWlkIGxldmVsICAgICAgICAgICAgICAgICAgICBMTEQKKz09PS0tLS0tLS0tLS0tLS0tLS0tLS09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS0tLS0tLQorc2NzaV9ob3N0X2FsbG9jKCkgIC0tPgorc2NzaV9hZGRfaG9zdCgpICAtLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgLS0+ICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpICAgKioqCisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKSAqKioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgTExEIHdhbnRzIHRvIGFkanVzdCB0aGUgZGVmYXVsdCBxdWV1ZSBzZXR0aW5ncywgaXQgY2FuIGludm9rZQorc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKSBpbiBpdHMgc2xhdmVfY29uZmlndXJlKCkgcm91dGluZS4KKworKioqIEZvciBzY3NpIGRldmljZXMgdGhhdCB0aGUgbWlkIGxldmVsIHRyaWVzIHRvIHNjYW4gYnV0IGRvIG5vdAorICAgIHJlc3BvbmQsIGEgc2xhdmVfYWxsb2MoKSwgc2xhdmVfZGVzdHJveSgpIHBhaXIgaXMgY2FsbGVkLgorCitXaGVuIGFuIEhCQSBpcyBiZWluZyByZW1vdmVkIGl0IGNvdWxkIGJlIGFzIHBhcnQgb2YgYW4gb3JkZXJseSBzaHV0ZG93bgorYXNzb2NpYXRlZCB3aXRoIHRoZSBMTEQgbW9kdWxlIGJlaW5nIHVubG9hZGVkIChlLmcuIHdpdGggdGhlICJybW1vZCIKK2NvbW1hbmQpIG9yIGluIHJlc3BvbnNlIHRvIGEgImhvdCB1bnBsdWciIGluZGljYXRlZCBieSBzeXNmcygpJ3MKK3JlbW92ZSgpIGNhbGxiYWNrIGJlaW5nIGludm9rZWQuIEluIGVpdGhlciBjYXNlLCB0aGUgc2VxdWVuY2UgaXMgdGhlCitzYW1lOgorCisgICAgICAgIEhCQSBSRU1PVkU6IGFzc3VtZSAyIFNDU0kgZGV2aWNlcyBhdHRhY2hlZAorTExEICAgICAgICAgICAgICAgICAgICAgIG1pZCBsZXZlbCAgICAgICAgICAgICAgICAgTExECis9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09LS0tLS0tLS0tLS0tLS0tLS09PT0tLS0tLS0KK3Njc2lfcmVtb3ZlX2hvc3QoKSAtLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpCisgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkKK3Njc2lfaG9zdF9wdXQoKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAKK0l0IG1heSBiZSB1c2VmdWwgZm9yIGEgTExEIHRvIGtlZXAgdHJhY2sgb2Ygc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZXMKKyhhIHBvaW50ZXIgaXMgcmV0dXJuZWQgYnkgc2NzaV9ob3N0X2FsbG9jKCkpLiBTdWNoIGluc3RhbmNlcyBhcmUgIm93bmVkIgorYnkgdGhlIG1pZC1sZXZlbC4gIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2VzIGFyZSBmcmVlZCBmcm9tCitzY3NpX2hvc3RfcHV0KCkgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IGhpdHMgemVyby4KKworSG90IHVucGx1Z2dpbmcgYW4gSEJBIHRoYXQgY29udHJvbHMgYSBkaXNrIHdoaWNoIGlzIHByb2Nlc3NpbmcgU0NTSQorY29tbWFuZHMgb24gYSBtb3VudGVkIGZpbGUgc3lzdGVtIGlzIGFuIGludGVyZXN0aW5nIHNpdHVhdGlvbi4gUmVmZXJlbmNlCitjb3VudGluZyBsb2dpYyBpcyBiZWluZyBpbnRyb2R1Y2VkIGludG8gdGhlIG1pZCBsZXZlbCB0byBjb3BlIHdpdGggbWFueQorb2YgdGhlIGlzc3VlcyBpbnZvbHZlZC4gU2VlIHRoZSBzZWN0aW9uIG9uIHJlZmVyZW5jZSBjb3VudGluZyBiZWxvdy4KKworCitUaGUgaG90cGx1ZyBjb25jZXB0IG1heSBiZSBleHRlbmRlZCB0byBTQ1NJIGRldmljZXMuIEN1cnJlbnRseSwgd2hlbiBhbgorSEJBIGlzIGFkZGVkLCB0aGUgc2NzaV9hZGRfaG9zdCgpIGZ1bmN0aW9uIGNhdXNlcyBhIHNjYW4gZm9yIFNDU0kgZGV2aWNlcworYXR0YWNoZWQgdG8gdGhlIEhCQSdzIFNDU0kgdHJhbnNwb3J0LiBPbiBuZXdlciBTQ1NJIHRyYW5zcG9ydHMgdGhlIEhCQQorbWF5IGJlY29tZSBhd2FyZSBvZiBhIG5ldyBTQ1NJIGRldmljZSBfYWZ0ZXJfIHRoZSBzY2FuIGhhcyBjb21wbGV0ZWQuCitBbiBMTEQgY2FuIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2UgdGhlIG1pZCBsZXZlbCBhd2FyZSBvZiBhIFNDU0kgZGV2aWNlOgorCisgICAgICAgICAgICAgICAgIFNDU0kgREVWSUNFIGhvdHBsdWcKK0xMRCAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitzY3NpX2FkZF9kZXZpY2UoKSAgLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAgIFstLT4gc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBhIHNpbWlsYXIgZmFzaGlvbiwgYW4gTExEIG1heSBiZWNvbWUgYXdhcmUgdGhhdCBhIFNDU0kgZGV2aWNlIGhhcyBiZWVuCityZW1vdmVkICh1bnBsdWdnZWQpIG9yIHRoZSBjb25uZWN0aW9uIHRvIGl0IGhhcyBiZWVuIGludGVycnVwdGVkLiBTb21lCitleGlzdGluZyBTQ1NJIHRyYW5zcG9ydHMgKGUuZy4gU1BJKSBtYXkgbm90IGJlY29tZSBhd2FyZSB0aGF0IGEgU0NTSQorZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgdW50aWwgYSBzdWJzZXF1ZW50IFNDU0kgY29tbWFuZCBmYWlscyB3aGljaCB3aWxsCitwcm9iYWJseSBjYXVzZSB0aGF0IGRldmljZSB0byBiZSBzZXQgb2ZmbGluZSBieSB0aGUgbWlkIGxldmVsLiBBbiBMTEQgdGhhdAorZGV0ZWN0cyB0aGUgcmVtb3ZhbCBvZiBhIFNDU0kgZGV2aWNlIGNhbiBpbnN0aWdhdGUgaXRzIHJlbW92YWwgZnJvbQordXBwZXIgbGF5ZXJzIHdpdGggdGhpcyBzZXF1ZW5jZToKKworICAgICAgICAgICAgICAgICAgU0NTSSBERVZJQ0UgaG90IHVucGx1ZworTExEICAgICAgICAgICAgICAgICAgICAgIG1pZCBsZXZlbCAgICAgICAgICAgICAgICAgTExECis9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09LS0tLS0tLS0tLS0tLS0tLS09PT0tLS0tLS0KK3Njc2lfcmVtb3ZlX2RldmljZSgpIC0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgbWF5IGJlIHVzZWZ1bCBmb3IgYW4gTExEIHRvIGtlZXAgdHJhY2sgb2Ygc3RydWN0IHNjc2lfZGV2aWNlIGluc3RhbmNlcworKGEgcG9pbnRlciBpcyBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlciB0byBzbGF2ZV9hbGxvYygpIGFuZAorc2xhdmVfY29uZmlndXJlKCkgY2FsbGJhY2tzKS4gU3VjaCBpbnN0YW5jZXMgYXJlICJvd25lZCIgYnkgdGhlIG1pZC1sZXZlbC4KK3N0cnVjdCBzY3NpX2RldmljZSBpbnN0YW5jZXMgYXJlIGZyZWVkIGFmdGVyIHNsYXZlX2Rlc3Ryb3koKS4KKworCitQYXNzaXZlIGluaXRpYWxpemF0aW9uIG1vZGVsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGVzZSBvbGRlciBMTERzIGluY2x1ZGUgYSBmaWxlIGNhbGxlZCAic2NzaV9tb2R1bGUuYyIgW3llcyB0aGUgIi5jIiBpcyBhCitsaXR0bGUgc3VycHJpc2luZ10gaW4gdGhlaXIgc291cmNlIGNvZGUuIEZvciB0aGF0IGZpbGUgdG8gd29yayBhbgoraW5zdGFuY2Ugb2Ygc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB3aXRoIHRoZSBuYW1lICJkcml2ZXJfdGVtcGxhdGUiCituZWVkcyB0byBiZSBkZWZpbmVkLiBIZXJlIGlzIGEgdHlwaWNhbCBjb2RlIHNlcXVlbmNlIHVzZWQgaW4gdGhpcyBtb2RlbDoKKyAgICBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CisgICAgICAgIC4uLgorICAgIH07CisgICAgI2luY2x1ZGUgInNjc2lfbW9kdWxlLmMiCisKK1RoZSBzY3NpX21vZHVsZS5jIGZpbGUgY29udGFpbnMgdHdvIGZ1bmN0aW9uczoKKyAgLSBpbml0X3RoaXNfc2NzaV9kcml2ZXIoKSB3aGljaCBpcyBleGVjdXRlZCB3aGVuIHRoZSBMTEQgaXMKKyAgICBpbml0aWFsaXplZCAoaS5lLiBib290IHRpbWUgb3IgbW9kdWxlIGxvYWQgdGltZSkKKyAgLSBleGl0X3RoaXNfc2NzaV9kcml2ZXIoKSB3aGljaCBpcyBleGVjdXRlZCB3aGVuIHRoZSBMTEQgaXMgc2h1dAorICAgIGRvd24gKGkuZS4gbW9kdWxlIHVubG9hZCB0aW1lKQorTm90ZTogc2luY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0YWdnZWQgd2l0aCBfX2luaXQgYW5kIF9fZXhpdCBxdWFsaWZpZXJzCithbiBMTEQgc2hvdWxkIG5vdCBjYWxsIHRoZW0gZXhwbGljaXRseSAoc2luY2UgdGhlIGtlcm5lbCBkb2VzIHRoYXQpLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugd2hlbiB0d28gaG9zdHMgYXJlCitkZXRlY3RlZCAoc28gZGV0ZWN0KCkgcmV0dXJucyAyKSBhbmQgdGhlIFNDU0kgYnVzIHNjYW4gb24gZWFjaCBob3N0CitmaW5kcyAxIFNDU0kgZGV2aWNlIChhbmQgYSBzZWNvbmQgZGV2aWNlIGRvZXMgbm90IHJlc3BvbmQpLgorCitMTEQgICAgICAgICAgICAgICAgICAgICAgbWlkIGxldmVsICAgICAgICAgICAgICAgICBMTEQKKz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLT09PS0tLS0tLQoraW5pdF90aGlzX3Njc2lfZHJpdmVyKCkgLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0KCkgIC0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHNjc2lfcmVnaXN0ZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgc2NzaV9yZWdpc3RlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAgLS0+ICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKSAgICoqKgorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKSAqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKSAgICoqKgorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKSAqKioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWlkIGxldmVsIGludm9rZXMgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKSB3aXRoIHRhZ2dlZCBxdWV1aW5nIG9mZiBhbmQKKyJjbWRfcGVyX2x1biIgZm9yIHRoYXQgaG9zdCBhcyB0aGUgcXVldWUgbGVuZ3RoLiBUaGVzZSBzZXR0aW5ncyBjYW4gYmUKK292ZXJyaWRkZW4gYnkgYSBzbGF2ZV9jb25maWd1cmUoKSBzdXBwbGllZCBieSB0aGUgTExELgorCisqKiogRm9yIHNjc2kgZGV2aWNlcyB0aGF0IHRoZSBtaWQgbGV2ZWwgdHJpZXMgdG8gc2NhbiBidXQgZG8gbm90CisgICAgcmVzcG9uZCwgYSBzbGF2ZV9hbGxvYygpLCBzbGF2ZV9kZXN0cm95KCkgcGFpciBpcyBjYWxsZWQuCisKK0hlcmUgaXMgYW4gTExEIHNodXRkb3duIHNlcXVlbmNlOgorCitMTEQgICAgICAgICAgICAgICAgICAgICAgbWlkIGxldmVsICAgICAgICAgICAgICAgICBMTEQKKz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLT09PS0tLS0tLQorZXhpdF90aGlzX3Njc2lfZHJpdmVyKCkgLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UoKSAgIC0tPiAgIHNjc2lfdW5yZWdpc3RlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlKCkgICAtLT4gICBzY3NpX3VucmVnaXN0ZXIoKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIExMRCBuZWVkIG5vdCBkZWZpbmUgc2xhdmVfZGVzdHJveSgpIChpLmUuIGl0IGlzIG9wdGlvbmFsKS4gCisKK1RoZSBzaG9ydGNvbWluZyBvZiB0aGUgInBhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZWwiIGlzIHRoYXQgaG9zdAorcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24gYXJlICh0eXBpY2FsbHkpIHRpZWQgdG8gTExEIGluaXRpYWxpemF0aW9uCithbmQgc2h1dGRvd24uIE9uY2UgdGhlIExMRCBpcyBpbml0aWFsaXplZCB0aGVuIGEgbmV3IGhvc3QgdGhhdCBhcHBlYXJzCisoZS5nLiB2aWEgaG90cGx1Z2dpbmcpIGNhbm5vdCBlYXNpbHkgYmUgYWRkZWQgd2l0aG91dCBhIHJlZHVuZGFudAorZHJpdmVyIHNodXRkb3duIGFuZCByZS1pbml0aWFsaXphdGlvbi4gSXQgbWF5IGJlIHBvc3NpYmxlIHRvIHdyaXRlIGFuIExMRAordGhhdCB1c2VzIGJvdGggaW5pdGlhbGl6YXRpb24gbW9kZWxzLgorCisKK1JlZmVyZW5jZSBDb3VudGluZworPT09PT09PT09PT09PT09PT09CitUaGUgU2NzaV9Ib3N0IHN0cnVjdHVyZSBoYXMgaGFkIHJlZmVyZW5jZSBjb3VudGluZyBpbmZyYXN0cnVjdHVyZSBhZGRlZC4KK1RoaXMgZWZmZWN0aXZlbHkgc3ByZWFkcyB0aGUgb3duZXJzaGlwIG9mIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2VzCithY3Jvc3MgdGhlIHZhcmlvdXMgU0NTSSBsYXllcnMgd2hpY2ggdXNlIHRoZW0uIFByZXZpb3VzbHkgc3VjaCBpbnN0YW5jZXMKK3dlcmUgZXhjbHVzaXZlbHkgb3duZWQgYnkgdGhlIG1pZCBsZXZlbC4gTExEcyB3b3VsZCBub3QgdXN1YWxseSBuZWVkIHRvCitkaXJlY3RseSBtYW5pcHVsYXRlIHRoZXNlIHJlZmVyZW5jZSBjb3VudHMgYnV0IHRoZXJlIG1heSBiZSBzb21lIGNhc2VzCit3aGVyZSB0aGV5IGRvLgorCitUaGVyZSBhcmUgMyByZWZlcmVuY2UgY291bnRpbmcgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFzc29jaWF0ZWQgd2l0aAorc3RydWN0IFNjc2lfSG9zdDoKKyAgLSBzY3NpX2hvc3RfYWxsb2MoKTogcmV0dXJucyBhIHBvaW50ZXIgdG8gbmV3IGluc3RhbmNlIG9mIHN0cnVjdCAKKyAgICAgICAgU2NzaV9Ib3N0IHdoaWNoIGhhcyBpdHMgcmVmZXJlbmNlIGNvdW50IF5eIHNldCB0byAxCisgIC0gc2NzaV9ob3N0X2dldCgpOiBhZGRzIDEgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gaW5zdGFuY2UKKyAgLSBzY3NpX2hvc3RfcHV0KCk6IGRlY3JlbWVudHMgMSBmcm9tIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuCisgICAgICAgIGluc3RhbmNlLiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgMCB0aGVuIHRoZSBnaXZlbiBpbnN0YW5jZQorICAgICAgICBpcyBmcmVlZAorCitUaGUgU2NzaV9kZXZpY2Ugc3RydWN0dXJlIGhhcyBoYWQgcmVmZXJlbmNlIGNvdW50aW5nIGluZnJhc3RydWN0dXJlIGFkZGVkLgorVGhpcyBlZmZlY3RpdmVseSBzcHJlYWRzIHRoZSBvd25lcnNoaXAgb2Ygc3RydWN0IFNjc2lfZGV2aWNlIGluc3RhbmNlcworYWNyb3NzIHRoZSB2YXJpb3VzIFNDU0kgbGF5ZXJzIHdoaWNoIHVzZSB0aGVtLiBQcmV2aW91c2x5IHN1Y2ggaW5zdGFuY2VzCit3ZXJlIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBtaWQgbGV2ZWwuIFNlZSB0aGUgYWNjZXNzIGZ1bmN0aW9ucyBkZWNsYXJlZAordG93YXJkcyB0aGUgZW5kIG9mIGluY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIC4gSWYgYW4gTExEIHdhbnRzIHRvIGtlZXAKK2EgY29weSBvZiBhIHBvaW50ZXIgdG8gYSBTY3NpX2RldmljZSBpbnN0YW5jZSBpdCBzaG91bGQgdXNlIHNjc2lfZGV2aWNlX2dldCgpCit0byBidW1wIGl0cyByZWZlcmVuY2UgY291bnQuIFdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCB0aGUgcG9pbnRlciBpdCBjYW4KK3VzZSBzY3NpX2RldmljZV9wdXQoKSB0byBkZWNyZW1lbnQgaXRzIHJlZmVyZW5jZSBjb3VudCAoYW5kIHBvdGVudGlhbGx5CitkZWxldGUgaXQpLgorCiteXiBzdHJ1Y3QgU2NzaV9Ib3N0IGFjdHVhbGx5IGhhcyAyIHJlZmVyZW5jZSBjb3VudHMgd2hpY2ggYXJlIG1hbmlwdWxhdGVkCitpbiBwYXJhbGxlbCBieSB0aGVzZSBmdW5jdGlvbnMuCisKKworQ29udmVudGlvbnMKKz09PT09PT09PT09CitGaXJzdCwgTGludXMgVG9ydmFsZHMncyB0aG91Z2h0cyBvbiBDIGNvZGluZyBzdHlsZSBjYW4gYmUgZm91bmQgaW4gdGhlCitEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlIGZpbGUuIAorCitOZXh0LCB0aGVyZSBpcyBhIG1vdmVtZW50IHRvICJvdXRsYXciIHR5cGVkZWZzIGludHJvZHVjaW5nIHN5bm9ueW1zIGZvciAKK3N0cnVjdCB0YWdzLiBCb3RoIGNhbiBiZSBzdGlsbCBmb3VuZCBpbiB0aGUgU0NTSSBzdWJzeXN0ZW0sIGJ1dAordGhlIHR5cGVkZWZzIGhhdmUgYmVlbiBtb3ZlZCB0byBhIHNpbmdsZSBmaWxlLCBzY3NpX3R5cGVkZWZzLmggdG8KK21ha2UgdGhlaXIgZnV0dXJlIHJlbW92YWwgZWFzaWVyLCBmb3IgZXhhbXBsZTogCisidHlwZWRlZiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIFNjc2lfSG9zdF9UZW1wbGF0ZTsiCisKK0Fsc28sIG1vc3QgQzk5IGVuaGFuY2VtZW50cyBhcmUgZW5jb3VyYWdlZCB0byB0aGUgZXh0ZW50IHRoZXkgYXJlIHN1cHBvcnRlZAorYnkgdGhlIHJlbGV2YW50IGdjYyBjb21waWxlcnMuIFNvIEM5OSBzdHlsZSBzdHJ1Y3R1cmUgYW5kIGFycmF5Citpbml0aWFsaXplcnMgYXJlIGVuY291cmFnZWQgd2hlcmUgYXBwcm9wcmlhdGUuIERvbid0IGdvIHRvbyBmYXIsCitWTEFzIGFyZSBub3QgcHJvcGVybHkgc3VwcG9ydGVkIHlldC4gIEFuIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSB1c2Ugb2YKKyIvLyIgc3R5bGUgY29tbWVudHM7IC8qLi4uKi8gY29tbWVudHMgYXJlIHN0aWxsIHByZWZlcnJlZCBpbiBMaW51eC4KKworV2VsbCB3cml0dGVuLCB0ZXN0ZWQgYW5kIGRvY3VtZW50ZWQgY29kZSwgbmVlZCBub3QgYmUgcmUtZm9ybWF0dGVkIHRvCitjb21wbHkgd2l0aCB0aGUgYWJvdmUgY29udmVudGlvbnMuIEZvciBleGFtcGxlLCB0aGUgYWljN3h4eCBkcml2ZXIKK2NvbWVzIHRvIExpbnV4IGZyb20gRnJlZUJTRCBhbmQgQWRhcHRlYydzIG93biBsYWJzLiBObyBkb3VidCBGcmVlQlNECithbmQgQWRhcHRlYyBoYXZlIHRoZWlyIG93biBjb2RpbmcgY29udmVudGlvbnMuCisKKworTWlkIGxldmVsIHN1cHBsaWVkIGZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlc2UgZnVuY3Rpb25zIGFyZSBzdXBwbGllZCBieSB0aGUgU0NTSSBtaWQgbGV2ZWwgZm9yIHVzZSBieSBMTERzLgorVGhlIG5hbWVzIChpLmUuIGVudHJ5IHBvaW50cykgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCAKK3NvIGFuIExMRCB0aGF0IGlzIGEgbW9kdWxlIGNhbiBhY2Nlc3MgdGhlbS4gVGhlIGtlcm5lbCB3aWxsCithcnJhbmdlIGZvciB0aGUgU0NTSSBtaWQgbGV2ZWwgdG8gYmUgbG9hZGVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYW55IExMRAoraXMgaW5pdGlhbGl6ZWQuIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGxpc3RlZCBhbHBoYWJldGljYWxseSBhbmQgdGhlaXIKK25hbWVzIGFsbCBzdGFydCB3aXRoICJzY3NpXyIuCisKK1N1bW1hcnk6CisgICBzY3NpX2FjdGl2YXRlX3RjcSAtIHR1cm4gb24gdGFnIGNvbW1hbmQgcXVldWVpbmcKKyAgIHNjc2lfYWRkX2RldmljZSAtIGNyZWF0ZXMgbmV3IHNjc2kgZGV2aWNlIChsdSkgaW5zdGFuY2UKKyAgIHNjc2lfYWRkX2hvc3QgLSBwZXJmb3JtIHN5c2ZzIHJlZ2lzdHJhdGlvbiBhbmQgU0NTSSBidXMgc2Nhbi4KKyAgIHNjc2lfYWRkX3RpbWVyIC0gKHJlLSlzdGFydCB0aW1lciBvbiBhIFNDU0kgY29tbWFuZC4KKyAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gY2hhbmdlIHRoZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCisgICBzY3NpX2Fzc2lnbl9sb2NrIC0gcmVwbGFjZSBkZWZhdWx0IGhvc3RfbG9jayB3aXRoIGdpdmVuIGxvY2sKKyAgIHNjc2lfYmlvc19wdGFibGUgLSByZXR1cm4gY29weSBvZiBibG9jayBkZXZpY2UncyBwYXJ0aXRpb24gdGFibGUKKyAgIHNjc2lfYmxvY2tfcmVxdWVzdHMgLSBwcmV2ZW50IGZ1cnRoZXIgY29tbWFuZHMgYmVpbmcgcXVldWVkIHRvIGdpdmVuIGhvc3QKKyAgIHNjc2lfZGVhY3RpdmF0ZV90Y3EgLSB0dXJuIG9mZiB0YWcgY29tbWFuZCBxdWV1ZWluZworICAgc2NzaV9kZWxldGVfdGltZXIgLSBjYW5jZWwgdGltZXIgb24gYSBTQ1NJIGNvbW1hbmQuCisgICBzY3NpX2hvc3RfYWxsb2MgLSByZXR1cm4gYSBuZXcgc2NzaV9ob3N0IGluc3RhbmNlIHdob3NlIHJlZmNvdW50PT0xCisgICBzY3NpX2hvc3RfZ2V0IC0gaW5jcmVtZW50cyBTY3NpX0hvc3QgaW5zdGFuY2UncyByZWZjb3VudAorICAgc2NzaV9ob3N0X3B1dCAtIGRlY3JlbWVudHMgU2NzaV9Ib3N0IGluc3RhbmNlJ3MgcmVmY291bnQgKGZyZWUgaWYgMCkKKyAgIHNjc2lfcGFydHNpemUgLSBwYXJzZSBwYXJ0aXRpb24gdGFibGUgaW50byBjeWxpbmRlcnMsIGhlYWRzICsgc2VjdG9ycworICAgc2NzaV9yZWdpc3RlciAtIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgYSBzY3NpIGhvc3QgYWRhcHRlciBpbnN0YW5jZS4KKyAgIHNjc2lfcmVtb3ZlX2RldmljZSAtIGRldGFjaCBhbmQgcmVtb3ZlIGEgU0NTSSBkZXZpY2UKKyAgIHNjc2lfcmVtb3ZlX2hvc3QgLSBkZXRhY2ggYW5kIHJlbW92ZSBhbGwgU0NTSSBkZXZpY2VzIG93bmVkIGJ5IGhvc3QKKyAgIHNjc2lfcmVwb3J0X2J1c19yZXNldCAtIHJlcG9ydCBzY3NpIF9idXNfIHJlc2V0IG9ic2VydmVkCisgICBzY3NpX3NldF9kZXZpY2UgLSBwbGFjZSBkZXZpY2UgcmVmZXJlbmNlIGluIGhvc3Qgc3RydWN0dXJlCisgICBzY3NpX3RvX3BjaV9kbWFfZGlyIC0gY29udmVydCBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZyB0byBQQ0kKKyAgIHNjc2lfdG9fc2J1c19kbWFfZGlyIC0gY29udmVydCBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZyB0byBTQlVTCisgICBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwgLSB0cmFjayBzdWNjZXNzaXZlIFFVRVVFX0ZVTEwgZXZlbnRzIAorICAgc2NzaV91bmJsb2NrX3JlcXVlc3RzIC0gYWxsb3cgZnVydGhlciBjb21tYW5kcyB0byBiZSBxdWV1ZWQgdG8gZ2l2ZW4gaG9zdAorICAgc2NzaV91bnJlZ2lzdGVyIC0gW2NhbGxzIHNjc2lfaG9zdF9wdXQoKV0KKworCitEZXRhaWxzOgorCisvKioKKyAqIHNjc2lfYWN0aXZhdGVfdGNxIC0gdHVybiBvbiB0YWcgY29tbWFuZCBxdWV1ZWluZyAoIm9yZGVyZWQiIHRhc2sgYXR0cmlidXRlKQorICogQHNkZXY6ICAgICAgIGRldmljZSB0byB0dXJuIG9uIFRDUSBmb3IKKyAqIEBkZXB0aDogICAgICBxdWV1ZSBkZXB0aAorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBFdmVudHVhbGx5LCBpdCBpcyBob3BlZCBkZXB0aCB3b3VsZCBiZSB0aGUgbWF4aW11bSBkZXB0aAorICogICAgICB0aGUgZGV2aWNlIGNvdWxkIGNvcGUgd2l0aCBhbmQgdGhlIHJlYWwgcXVldWUgZGVwdGgKKyAqICAgICAgd291bGQgYmUgYWRqdXN0YWJsZSBmcm9tIDAgdG8gZGVwdGguCisgKgorICogICAgICBEZWZpbmVkIChpbmxpbmUpIGluOiBpbmNsdWRlL3Njc2kvc2NzaV90Y3EuaAorICoqLwordm9pZCBzY3NpX2FjdGl2YXRlX3RjcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKKworCisvKioKKyAqIHNjc2lfYWRkX2RldmljZSAtIGNyZWF0ZXMgbmV3IHNjc2kgZGV2aWNlIChsdSkgaW5zdGFuY2UKKyAqIEBzaG9zdDogICBwb2ludGVyIHRvIHNjc2kgaG9zdCBpbnN0YW5jZQorICogQGNoYW5uZWw6IGNoYW5uZWwgbnVtYmVyIChyYXJlbHkgb3RoZXIgdGhhbiAwKQorICogQGlkOiAgICAgIHRhcmdldCBpZCBudW1iZXIKKyAqIEBsdW46ICAgICBsb2dpY2FsIHVuaXQgbnVtYmVyCisgKgorICogICAgICBSZXR1cm5zIHBvaW50ZXIgdG8gbmV3IHN0cnVjdCBzY3NpX2RldmljZSBpbnN0YW5jZSBvciAKKyAqICAgICAgRVJSX1BUUigtRU5PREVWKSAob3Igc29tZSBvdGhlciBiZW50IHBvaW50ZXIpIGlmIHNvbWV0aGluZyBpcworICogICAgICB3cm9uZyAoZS5nLiBubyBsdSByZXNwb25kcyBhdCBnaXZlbiBhZGRyZXNzKQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IHllcworICoKKyAqICAgICAgTm90ZXM6IFRoaXMgY2FsbCBpcyB1c3VhbGx5IHBlcmZvcm1lZCBpbnRlcm5hbGx5IGR1cmluZyBhIHNjc2kKKyAqICAgICAgYnVzIHNjYW4gd2hlbiBhbiBIQkEgaXMgYWRkZWQgKGkuZS4gc2NzaV9hZGRfaG9zdCgpKS4gU28gaXQKKyAqICAgICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBIQkEgYmVjb21lcyBhd2FyZSBvZiBhIG5ldyBzY3NpCisgKiAgICAgIGRldmljZSAobHUpIGFmdGVyIHNjc2lfYWRkX2hvc3QoKSBoYXMgY29tcGxldGVkLiBJZiBzdWNjZXNzZnVsCisgKiAgICAgIHRoaXMgY2FsbCB3ZSBsZWFkIHRvIHNsYXZlX2FsbG9jKCkgYW5kIHNsYXZlX2NvbmZpZ3VyZSgpIGNhbGxiYWNrcworICogICAgICBpbnRvIHRoZSBMTEQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKyAqKi8KK3N0cnVjdCBzY3NpX2RldmljZSAqIHNjc2lfYWRkX2RldmljZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgbHVuKQorCisKKy8qKgorICogc2NzaV9hZGRfaG9zdCAtIHBlcmZvcm0gc3lzZnMgcmVnaXN0cmF0aW9uIGFuZCBTQ1NJIGJ1cyBzY2FuLgorICogQHNob3N0OiAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IGluc3RhbmNlCisgKiBAZGV2OiAgICAgcG9pbnRlciB0byBzdHJ1Y3QgZGV2aWNlIG9mIHR5cGUgc2NzaSBjbGFzcworICoKKyAqICAgICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9mIGZhaWx1cmUgKGUuZy4gLUVOT01FTSkKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IE9ubHkgcmVxdWlyZWQgaW4gImhvdHBsdWcgaW5pdGlhbGl6YXRpb24gbW9kZWwiIGFmdGVyIGEKKyAqICAgICAgc3VjY2Vzc2Z1bCBjYWxsIHRvIHNjc2lfaG9zdF9hbGxvYygpLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMKKyAqKi8KK2ludCBzY3NpX2FkZF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3QgZGV2aWNlICogZGV2KQorCisKKy8qKgorICogc2NzaV9hZGRfdGltZXIgLSAocmUtKXN0YXJ0IHRpbWVyIG9uIGEgU0NTSSBjb21tYW5kLgorICogQHNjbWQ6ICAgIHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIGluc3RhbmNlCisgKiBAdGltZW91dDogZHVyYXRpb24gb2YgdGltZW91dCBpbiAiamlmZmllcyIKKyAqIEBjb21wbGV0ZTogcG9pbnRlciB0byBmdW5jdGlvbiB0byBjYWxsIGlmIHRpbWVvdXQgZXhwaXJlcworICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBFYWNoIHNjc2kgY29tbWFuZCBoYXMgaXRzIG93biB0aW1lciwgYW5kIGFzIGl0IGlzIGFkZGVkCisgKiAgICAgIHRvIHRoZSBxdWV1ZSwgd2Ugc2V0IHVwIHRoZSB0aW1lci4gV2hlbiB0aGUgY29tbWFuZCBjb21wbGV0ZXMsIAorICogICAgICB3ZSBjYW5jZWwgdGhlIHRpbWVyLiBBbiBMTEQgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZQorICogICAgICB0aGUgZXhpc3RpbmcgdGltZW91dCB2YWx1ZS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKyAqKi8KK3ZvaWQgc2NzaV9hZGRfdGltZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgaW50IHRpbWVvdXQsIAorICAgICAgICAgICAgICAgICAgICB2b2lkICgqY29tcGxldGUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCisKKworLyoqCisgKiBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCAtIGFsbG93IExMRCB0byBjaGFuZ2UgcXVldWUgZGVwdGggb24gYSBTQ1NJIGRldmljZQorICogQHNkZXY6ICAgICAgIHBvaW50ZXIgdG8gU0NTSSBkZXZpY2UgdG8gY2hhbmdlIHF1ZXVlIGRlcHRoIG9uCisgKiBAdGFnZ2VkOiAgICAgMCAtIG5vIHRhZ2dlZCBxdWV1aW5nCisgKiAgICAgICAgICAgICAgTVNHX1NJTVBMRV9UQUcgLSBzaW1wbGUgdGFnZ2VkIHF1ZXVpbmcKKyAqICAgICAgICAgICAgICBNU0dfT1JERVJFRF9UQUcgLSBvcmRlcmVkIHRhZ2dlZCBxdWV1aW5nCisgKiBAdGFncyAgICAgICAgTnVtYmVyIG9mIHRhZ3MgYWxsb3dlZCBpZiB0YWdnZWQgcXVldWluZyBlbmFibGVkLAorICogICAgICAgICAgICAgIG9yIG51bWJlciBvZiBjb21tYW5kcyB0aGUgTExEIGNhbiBxdWV1ZSB1cAorICogICAgICAgICAgICAgIGluIG5vbi10YWdnZWQgbW9kZSAoYXMgcGVyIGNtZF9wZXJfbHVuKS4KKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogQ2FuIGJlIGludm9rZWQgYW55IHRpbWUgb24gYSBTQ1NJIGRldmljZSBjb250cm9sbGVkIGJ5IHRoaXMKKyAqICAgICAgTExELiBbU3BlY2lmaWNhbGx5IGR1cmluZyBhbmQgYWZ0ZXIgc2xhdmVfY29uZmlndXJlKCkgYW5kIHByaW9yIHRvCisgKiAgICAgIHNsYXZlX2Rlc3Ryb3koKS5dIENhbiBzYWZlbHkgYmUgaW52b2tlZCBmcm9tIGludGVycnVwdCBjb2RlLiBBY3R1YWwKKyAqICAgICAgcXVldWUgZGVwdGggY2hhbmdlIG1heSBiZSBkZWxheWVkIHVudGlsIHRoZSBuZXh0IGNvbW1hbmQgaXMgYmVpbmcKKyAqICAgICAgcHJvY2Vzc2VkLiBTZWUgYWxzbyBzY3NpX2FjdGl2YXRlX3RjcSgpIGFuZCBzY3NpX2RlYWN0aXZhdGVfdGNxKCkuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaS5jIFtzZWUgc291cmNlIGNvZGUgZm9yIG1vcmUgbm90ZXNdCisgKgorICoqLwordm9pZCBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2LCBpbnQgdGFnZ2VkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZ3MpCisKKworLyoqCisgKiBzY3NpX2Fzc2lnbl9sb2NrIC0gcmVwbGFjZSBkZWZhdWx0IGhvc3RfbG9jayB3aXRoIGdpdmVuIGxvY2sKKyAqIEBzaG9zdDogYSBwb2ludGVyIHRvIGEgc2NzaSBob3N0IGluc3RhbmNlCisgKiBAbG9jazogcG9pbnRlciB0byBsb2NrIHRvIHJlcGxhY2UgaG9zdF9sb2NrIGZvciB0aGlzIGhvc3QKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBEZWZpbmVkIGluOiBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggLgorICoqLwordm9pZCBzY3NpX2Fzc2lnbl9sb2NrKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzcGlubG9ja190ICpsb2NrKQorCisKKy8qKgorICogc2NzaV9iaW9zX3B0YWJsZSAtIHJldHVybiBjb3B5IG9mIGJsb2NrIGRldmljZSdzIHBhcnRpdGlvbiB0YWJsZQorICogQGRldjogICAgICAgIHBvaW50ZXIgdG8gYmxvY2sgZGV2aWNlCisgKgorICogICAgICBSZXR1cm5zIHBvaW50ZXIgdG8gcGFydGl0aW9uIHRhYmxlLCBvciBOVUxMIGZvciBmYWlsdXJlCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogQ2FsbGVyIG93bnMgbWVtb3J5IHJldHVybmVkIChmcmVlIHdpdGgga2ZyZWUoKSApCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaWNhbS5jCisgKiovCit1bnNpZ25lZCBjaGFyICpzY3NpX2Jpb3NfcHRhYmxlKHN0cnVjdCBibG9ja19kZXZpY2UgKmRldikKKworCisvKioKKyAqIHNjc2lfYmxvY2tfcmVxdWVzdHMgLSBwcmV2ZW50IGZ1cnRoZXIgY29tbWFuZHMgYmVpbmcgcXVldWVkIHRvIGdpdmVuIGhvc3QKKyAqCisgKiBAc2hvc3Q6IHBvaW50ZXIgdG8gaG9zdCB0byBibG9jayBjb21tYW5kcyBvbgorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBUaGVyZSBpcyBubyB0aW1lciBub3IgYW55IG90aGVyIG1lYW5zIGJ5IHdoaWNoIHRoZSByZXF1ZXN0cworICogICAgICBnZXQgdW5ibG9ja2VkIG90aGVyIHRoYW4gdGhlIExMRCBjYWxsaW5nIHNjc2lfdW5ibG9ja19yZXF1ZXN0cygpLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKyoqLwordm9pZCBzY3NpX2Jsb2NrX3JlcXVlc3RzKHN0cnVjdCBTY3NpX0hvc3QgKiBzaG9zdCkKKworCisvKioKKyAqIHNjc2lfZGVhY3RpdmF0ZV90Y3EgLSB0dXJuIG9mZiB0YWcgY29tbWFuZCBxdWV1ZWluZworICogQHNkZXY6ICAgICAgIGRldmljZSB0byB0dXJuIG9mZiBUQ1EgZm9yCisgKiBAZGVwdGg6ICAgICAgcXVldWUgZGVwdGggKHN0b3JlZCBpbiBzZGV2KQorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIERlZmluZWQgKGlubGluZSkgaW46IGluY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCisgKiovCit2b2lkIHNjc2lfZGVhY3RpdmF0ZV90Y3Eoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCisKKworLyoqCisgKiBzY3NpX2RlbGV0ZV90aW1lciAtIGNhbmNlbCB0aW1lciBvbiBhIFNDU0kgY29tbWFuZC4KKyAqIEBzY21kOiAgICBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBpbnN0YW5jZQorICoKKyAqICAgICAgUmV0dXJucyAxIGlmIGFibGUgdG8gY2FuY2VsIHRpbWVyIGVsc2UgMCAoaS5lLiB0b28gbGF0ZSBvciBhbHJlYWR5CisgKiAgICAgIGNhbmNlbGxlZCkuCisgKgorICogICAgICBNaWdodCBibG9jazogbm8gW21heSBpbiB0aGUgZnV0dXJlIGlmIGl0IGludm9rZXMgZGVsX3RpbWVyX3N5bmMoKV0KKyAqCisgKiAgICAgIE5vdGVzOiBBbGwgY29tbWFuZHMgaXNzdWVkIGJ5IHVwcGVyIGxldmVscyBhbHJlYWR5IGhhdmUgYSB0aW1lb3V0CisgKiAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBBbiBMTEQgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUKKyAqICAgICAgdGltZXIuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisgKiovCitpbnQgc2NzaV9kZWxldGVfdGltZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKKworCisvKioKKyAqIHNjc2lfaG9zdF9hbGxvYyAtIGNyZWF0ZSBhIHNjc2kgaG9zdCBhZGFwdGVyIGluc3RhbmNlIGFuZCBwZXJmb3JtIGJhc2ljCisgKiAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbi4KKyAqIEBzaHQ6ICAgICAgICBwb2ludGVyIHRvIHNjc2kgaG9zdCB0ZW1wbGF0ZQorICogQHByaXZzaXplOiAgIGV4dHJhIGJ5dGVzIHRvIGFsbG9jYXRlIGluIGhvc3RkYXRhIGFycmF5ICh3aGljaCBpcyB0aGUKKyAqICAgICAgICAgICAgICBsYXN0IG1lbWJlciBvZiB0aGUgcmV0dXJuZWQgU2NzaV9Ib3N0IGluc3RhbmNlKQorICoKKyAqICAgICAgUmV0dXJucyBwb2ludGVyIHRvIG5ldyBTY3NpX0hvc3QgaW5zdGFuY2Ugb3IgTlVMTCBvbiBmYWlsdXJlCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogV2hlbiB0aGlzIGNhbGwgcmV0dXJucyB0byB0aGUgTExELCB0aGUgU0NTSSBidXMgc2NhbiBvbgorICogICAgICB0aGlzIGhvc3QgaGFzIF9ub3RfIHlldCBiZWVuIGRvbmUuCisgKiAgICAgIFRoZSBob3N0ZGF0YSBhcnJheSAoYnkgZGVmYXVsdCB6ZXJvIGxlbmd0aCkgaXMgYSBwZXIgaG9zdCBzY3JhdGNoIAorICogICAgICBhcmVhIGZvciB0aGUgTExEJ3MgZXhjbHVzaXZlIHVzZS4KKyAqICAgICAgQm90aCBhc3NvY2lhdGVkIHJlZmNvdW50aW5nIG9iamVjdHMgaGF2ZSB0aGVpciByZWZjb3VudCBzZXQgdG8gMS4KKyAqICAgICAgRnVsbCByZWdpc3RyYXRpb24gKGluIHN5c2ZzKSBhbmQgYSBidXMgc2NhbiBhcmUgcGVyZm9ybWVkIGxhdGVyIHdoZW4KKyAqICAgICAgc2NzaV9hZGRfaG9zdCgpIGlzIGNhbGxlZC4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jIC4KKyAqKi8KK3N0cnVjdCBTY3NpX0hvc3QgKiBzY3NpX2hvc3RfYWxsb2Moc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHNodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByaXZzaXplKQorCisKKy8qKgorICogc2NzaV9ob3N0X2dldCAtIGluY3JlbWVudCBTY3NpX0hvc3QgaW5zdGFuY2UgcmVmY291bnQKKyAqIEBzaG9zdDogICBwb2ludGVyIHRvIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IGN1cnJlbnRseSBtYXkgYmxvY2sgYnV0IG1heSBiZSBjaGFuZ2VkIHRvIG5vdCBibG9jaworICoKKyAqICAgICAgTm90ZXM6IEFjdHVhbGx5IGluY3JlbWVudHMgdGhlIGNvdW50cyBpbiB0d28gc3ViLW9iamVjdHMKKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jCisgKiovCit2b2lkIHNjc2lfaG9zdF9nZXQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCisKKworLyoqCisgKiBzY3NpX2hvc3RfcHV0IC0gZGVjcmVtZW50IFNjc2lfSG9zdCBpbnN0YW5jZSByZWZjb3VudCwgZnJlZSBpZiAwCisgKiBAc2hvc3Q6ICAgcG9pbnRlciB0byBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBjdXJyZW50bHkgbWF5IGJsb2NrIGJ1dCBtYXkgYmUgY2hhbmdlZCB0byBub3QgYmxvY2sKKyAqCisgKiAgICAgIE5vdGVzOiBBY3R1YWxseSBkZWNyZW1lbnRzIHRoZSBjb3VudHMgaW4gdHdvIHN1Yi1vYmplY3RzLiBJZiB0aGUKKyAqICAgICAgbGF0dGVyIHJlZmNvdW50IHJlYWNoZXMgMCwgdGhlIFNjc2lfSG9zdCBpbnN0YW5jZSBpcyBmcmVlZC4KKyAqICAgICAgVGhlIExMRCBuZWVkIG5vdCB3b3JyeSBleGFjdGx5IHdoZW4gdGhlIFNjc2lfSG9zdCBpbnN0YW5jZSBpcworICogICAgICBmcmVlZCwgaXQganVzdCBzaG91bGRuJ3QgYWNjZXNzIHRoZSBpbnN0YW5jZSBhZnRlciBpdCBoYXMgYmFsYW5jZWQKKyAqICAgICAgb3V0IGl0cyByZWZjb3VudCB1c2FnZS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jCisgKiovCit2b2lkIHNjc2lfaG9zdF9wdXQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCisKKworLyoqCisgKiBzY3NpX3BhcnRzaXplIC0gcGFyc2UgcGFydGl0aW9uIHRhYmxlIGludG8gY3lsaW5kZXJzLCBoZWFkcyArIHNlY3RvcnMKKyAqIEBidWY6IHBvaW50ZXIgdG8gcGFydGl0aW9uIHRhYmxlCisgKiBAY2FwYWNpdHk6IHNpemUgb2YgKHRvdGFsKSBkaXNrIGluIDUxMiBieXRlIHNlY3RvcnMKKyAqIEBjeWxzOiBvdXRwdXRzIG51bWJlciBvZiBjeWxpbmRlcnMgY2FsY3VsYXRlZCB2aWEgdGhpcyBwb2ludGVyCisgKiBAaGRzOiBvdXRwdXRzIG51bWJlciBvZiBoZWFkcyBjYWxjdWxhdGVkIHZpYSB0aGlzIHBvaW50ZXIKKyAqIEBzZWNzOiBvdXRwdXRzIG51bWJlciBvZiBzZWN0b3JzIGNhbGN1bGF0ZWQgdmlhIHRoaXMgcG9pbnRlcgorICoKKyAqICAgICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IENhbGxlciBvd25zIG1lbW9yeSByZXR1cm5lZCAoZnJlZSB3aXRoIGtmcmVlKCkgKQorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2ljYW0uYworICoqLworaW50IHNjc2lfcGFydHNpemUodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGNhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpjeWxzLCB1bnNpZ25lZCBpbnQgKmhkcywgdW5zaWduZWQgaW50ICpzZWNzKQorCisKKy8qKgorICogc2NzaV9yZWdpc3RlciAtIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgYSBzY3NpIGhvc3QgYWRhcHRlciBpbnN0YW5jZS4KKyAqIEBzaHQ6ICAgICAgICBwb2ludGVyIHRvIHNjc2kgaG9zdCB0ZW1wbGF0ZQorICogQHByaXZzaXplOiAgIGV4dHJhIGJ5dGVzIHRvIGFsbG9jYXRlIGluIGhvc3RkYXRhIGFycmF5ICh3aGljaCBpcyB0aGUKKyAqICAgICAgICAgICAgICBsYXN0IG1lbWJlciBvZiB0aGUgcmV0dXJuZWQgU2NzaV9Ib3N0IGluc3RhbmNlKQorICoKKyAqICAgICAgUmV0dXJucyBwb2ludGVyIHRvIG5ldyBTY3NpX0hvc3QgaW5zdGFuY2Ugb3IgTlVMTCBvbiBmYWlsdXJlCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogV2hlbiB0aGlzIGNhbGwgcmV0dXJucyB0byB0aGUgTExELCB0aGUgU0NTSSBidXMgc2NhbiBvbgorICogICAgICB0aGlzIGhvc3QgaGFzIF9ub3RfIHlldCBiZWVuIGRvbmUuCisgKiAgICAgIFRoZSBob3N0ZGF0YSBhcnJheSAoYnkgZGVmYXVsdCB6ZXJvIGxlbmd0aCkgaXMgYSBwZXIgaG9zdCBzY3JhdGNoIAorICogICAgICBhcmVhIGZvciB0aGUgTExELgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMgLgorICoqLworc3RydWN0IFNjc2lfSG9zdCAqIHNjc2lfcmVnaXN0ZXIoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHNodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcml2c2l6ZSkKKworCisvKioKKyAqIHNjc2lfcmVtb3ZlX2RldmljZSAtIGRldGFjaCBhbmQgcmVtb3ZlIGEgU0NTSSBkZXZpY2UKKyAqIEBzZGV2OiAgICAgIGEgcG9pbnRlciB0byBhIHNjc2kgZGV2aWNlIGluc3RhbmNlCisgKgorICogICAgICBSZXR1cm5zIHZhbHVlOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgZGV2aWNlIG5vdCBhdHRhY2hlZAorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IHllcworICoKKyAqICAgICAgTm90ZXM6IElmIGFuIExMRCBiZWNvbWVzIGF3YXJlIHRoYXQgYSBzY3NpIGRldmljZSAobHUpIGhhcworICogICAgICBiZWVuIHJlbW92ZWQgYnV0IGl0cyBob3N0IGlzIHN0aWxsIHByZXNlbnQgdGhlbiBpdCBjYW4gcmVxdWVzdAorICogICAgICB0aGUgcmVtb3ZhbCBvZiB0aGF0IHNjc2kgZGV2aWNlLiBJZiBzdWNjZXNzZnVsIHRoaXMgY2FsbCB3aWxsCisgKiAgICAgIGxlYWQgdG8gdGhlIHNsYXZlX2Rlc3Ryb3koKSBjYWxsYmFjayBiZWluZyBpbnZva2VkLiBzZGV2IGlzIGFuIAorICogICAgICBpbnZhbGlkIHBvaW50ZXIgYWZ0ZXIgdGhpcyBjYWxsLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyAuCisgKiovCitpbnQgc2NzaV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKKworCisvKioKKyAqIHNjc2lfcmVtb3ZlX2hvc3QgLSBkZXRhY2ggYW5kIHJlbW92ZSBhbGwgU0NTSSBkZXZpY2VzIG93bmVkIGJ5IGhvc3QKKyAqIEBzaG9zdDogICAgICBhIHBvaW50ZXIgdG8gYSBzY3NpIGhvc3QgaW5zdGFuY2UKKyAqCisgKiAgICAgIFJldHVybnMgdmFsdWU6IDAgb24gc3VjY2VzcywgMSBvbiBmYWlsdXJlIChlLmcuIExMRCBidXN5ID8/KQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IHllcworICoKKyAqICAgICAgTm90ZXM6IFNob3VsZCBvbmx5IGJlIGludm9rZWQgaWYgdGhlICJob3RwbHVnIGluaXRpYWxpemF0aW9uCisgKiAgICAgIG1vZGVsIiBpcyBiZWluZyB1c2VkLiBJdCBzaG91bGQgYmUgY2FsbGVkIF9wcmlvcl8gdG8gIAorICogICAgICBzY3NpX3VucmVnaXN0ZXIoKS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jIC4KKyAqKi8KK2ludCBzY3NpX3JlbW92ZV9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQorCisKKy8qKgorICogc2NzaV9yZXBvcnRfYnVzX3Jlc2V0IC0gcmVwb3J0IHNjc2kgX2J1c18gcmVzZXQgb2JzZXJ2ZWQKKyAqIEBzaG9zdDogYSBwb2ludGVyIHRvIGEgc2NzaSBob3N0IGludm9sdmVkCisgKiBAY2hhbm5lbDogY2hhbm5lbCAod2l0aGluKSBob3N0IG9uIHdoaWNoIHNjc2kgYnVzIHJlc2V0IG9jY3VycmVkCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IFRoaXMgb25seSBuZWVkcyB0byBiZSBjYWxsZWQgaWYgdGhlIHJlc2V0IGlzIG9uZSB3aGljaAorICogICAgICBvcmlnaW5hdGVzIGZyb20gYW4gdW5rbm93biBsb2NhdGlvbi4gIFJlc2V0cyBvcmlnaW5hdGVkIGJ5IHRoZSAKKyAqICAgICAgbWlkIGxldmVsIGl0c2VsZiBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcywgYnV0IHRoZXJlIHNob3VsZCBiZSAKKyAqICAgICAgbm8gaGFybS4gIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCBhCisgKiAgICAgIENIRUNLX0NPTkRJVElPTiBpcyBwcm9wZXJseSB0cmVhdGVkLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyAuCisgKiovCit2b2lkIHNjc2lfcmVwb3J0X2J1c19yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hvc3QsIGludCBjaGFubmVsKQorCisKKy8qKgorICogc2NzaV9zZXRfZGV2aWNlIC0gcGxhY2UgZGV2aWNlIHJlZmVyZW5jZSBpbiBob3N0IHN0cnVjdHVyZQorICogQHNob3N0OiBhIHBvaW50ZXIgdG8gYSBzY3NpIGhvc3QgaW5zdGFuY2UKKyAqIEBwZGV2OiBwb2ludGVyIHRvIGRldmljZSBpbnN0YW5jZSB0byBhc3NpZ24KKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBEZWZpbmVkIGluOiBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggLgorICoqLwordm9pZCBzY3NpX3NldF9kZXZpY2Uoc3RydWN0IFNjc2lfSG9zdCAqIHNob3N0LCBzdHJ1Y3QgZGV2aWNlICogZGV2KQorCisKKy8qKgorICogc2NzaV90b19wY2lfZG1hX2RpciAtIGNvbnZlcnQgU0NTSSBzdWJzeXN0ZW0gZGlyZWN0aW9uIGZsYWcgdG8gUENJCisgKiBAc2NzaV9kYXRhX2RpcmVjdGlvbjogU0NTSSBzdWJzeXN0ZW0gZGlyZWN0aW9uIGZsYWcKKyAqCisgKiAgICAgIFJldHVybnMgRE1BX1RPX0RFVklDRSBnaXZlbiBTQ1NJX0RBVEFfV1JJVEUsCisgKiAgICAgICAgICAgICAgRE1BX0ZST01fREVWSUNFIGdpdmVuIFNDU0lfREFUQV9SRUFECisgKiAgICAgICAgICAgICAgRE1BX0JJRElSRUNUSU9OQUwgZ2l2ZW4gU0NTSV9EQVRBX1VOS05PV04KKyAqICAgICAgICAgICAgICBlbHNlIHJldHVybnMgRE1BX05PTkUKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IFRoZSBTQ1NJIHN1YnN5c3RlbSBub3cgdXNlcyB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZXNlCisgKiAgICAgIGNvbnN0YW50cyBhcyB0aGUgUENJIHN1YnN5c3RlbSBzbyB0aGlzIGZ1bmN0aW9uIGlzIGEgbm9wLgorICogICAgICBUaGUgcmVjb21tZW5kYXRpb24gaXMgbm90IHRvIHVzZSB0aGlzIGNvbnZlcnNpb24gZnVuY3Rpb24gYW55bW9yZQorICogICAgICAoaW4gdGhlIDIuNiBrZXJuZWwgc2VyaWVzKSBhcyBpdCBpcyBub3QgbmVlZGVkLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2kuaCAuCisgKiovCitpbnQgc2NzaV90b19wY2lfZG1hX2Rpcih1bnNpZ25lZCBjaGFyIHNjc2lfZGF0YV9kaXJlY3Rpb24pCisKKworLyoqCisgKiBzY3NpX3RvX3NidXNfZG1hX2RpciAtIGNvbnZlcnQgU0NTSSBzdWJzeXN0ZW0gZGlyZWN0aW9uIGZsYWcgdG8gU0JVUworICogQHNjc2lfZGF0YV9kaXJlY3Rpb246IFNDU0kgc3Vic3lzdGVtIGRpcmVjdGlvbiBmbGFnCisgKgorICogICAgICBSZXR1cm5zIERNQV9UT19ERVZJQ0UgZ2l2ZW4gU0NTSV9EQVRBX1dSSVRFLAorICogICAgICAgICAgICAgIEZST01fREVWSUNFIGdpdmVuIFNDU0lfREFUQV9SRUFECisgKiAgICAgICAgICAgICAgRE1BX0JJRElSRUNUSU9OQUwgZ2l2ZW4gU0NTSV9EQVRBX1VOS05PV04KKyAqICAgICAgICAgICAgICBlbHNlIHJldHVybnMgRE1BX05PTkUKKyAqCisgKiAgICAgIE5vdGVzOiBUaGUgU0NTSSBzdWJzeXN0ZW0gbm93IHVzZXMgdGhlIHNhbWUgdmFsdWVzIGZvciB0aGVzZQorICogICAgICBjb25zdGFudHMgYXMgdGhlIFNCVVMgc3Vic3lzdGVtIHNvIHRoaXMgZnVuY3Rpb24gaXMgYSBub3AuCisgKiAgICAgIFRoZSByZWNvbW1lbmRhdGlvbiBpcyBub3QgdG8gdXNlIHRoaXMgY29udmVyc2lvbiBmdW5jdGlvbiBhbnltb3JlCisgKiAgICAgIChpbiB0aGUgMi42IGtlcm5lbCBzZXJpZXMpIGFzIGl0IGlzIG5vdCBuZWVkZWQuCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpLmggLgorICoqLworaW50IHNjc2lfdG9fc2J1c19kbWFfZGlyKHVuc2lnbmVkIGNoYXIgc2NzaV9kYXRhX2RpcmVjdGlvbikKKworCisvKioKKyAqIHNjc2lfdHJhY2tfcXVldWVfZnVsbCAtIHRyYWNrIHN1Y2Nlc3NpdmUgUVVFVUVfRlVMTCBldmVudHMgb24gZ2l2ZW4KKyAqICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB0byBkZXRlcm1pbmUgaWYgYW5kIHdoZW4gdGhlcmUgaXMgYSBuZWVkCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBhZGp1c3QgdGhlIHF1ZXVlIGRlcHRoIG9uIHRoZSBkZXZpY2UuCisgKiBAc2RldjogIHBvaW50ZXIgdG8gU0NTSSBkZXZpY2UgaW5zdGFuY2UKKyAqIEBkZXB0aDogQ3VycmVudCBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgU0NTSSBjb21tYW5kcyBvbiB0aGlzIGRldmljZSwKKyAqICAgICAgICAgbm90IGNvdW50aW5nIHRoZSBvbmUgcmV0dXJuZWQgYXMgUVVFVUVfRlVMTC4KKyAqCisgKiAgICAgIFJldHVybnMgMCAgLSBubyBjaGFuZ2UgbmVlZGVkCisgKiAgICAgICAgICAgICAgPjAgLSBhZGp1c3QgcXVldWUgZGVwdGggdG8gdGhpcyBuZXcgZGVwdGgKKyAqICAgICAgICAgICAgICAtMSAtIGRyb3AgYmFjayB0byB1bnRhZ2dlZCBvcGVyYXRpb24gdXNpbmcgaG9zdC0+Y21kX3Blcl9sdW4KKyAqICAgICAgICAgICAgICAgICAgIGFzIHRoZSB1bnRhZ2dlZCBjb21tYW5kIGRlcHRoCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBMTERzIG1heSBjYWxsIHRoaXMgYXQgYW55IHRpbWUgYW5kIHdlIHdpbGwgZG8gIlRoZSBSaWdodAorICogICAgICAgICAgICAgIFRoaW5nIjsgaW50ZXJydXB0IGNvbnRleHQgc2FmZS4gCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaS5jIC4KKyAqKi8KK2ludCBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoU2NzaV9EZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKKworCisvKioKKyAqIHNjc2lfdW5ibG9ja19yZXF1ZXN0cyAtIGFsbG93IGZ1cnRoZXIgY29tbWFuZHMgdG8gYmUgcXVldWVkIHRvIGdpdmVuIGhvc3QKKyAqCisgKiBAc2hvc3Q6IHBvaW50ZXIgdG8gaG9zdCB0byB1bmJsb2NrIGNvbW1hbmRzIG9uCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgLgorKiovCit2b2lkIHNjc2lfdW5ibG9ja19yZXF1ZXN0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hvc3QpCisKKworLyoqCisgKiBzY3NpX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGFuZCBmcmVlIG1lbW9yeSB1c2VkIGJ5IGhvc3QgaW5zdGFuY2UKKyAqIEBzaHA6ICAgICAgICBwb2ludGVyIHRvIHNjc2kgaG9zdCBpbnN0YW5jZSB0byB1bnJlZ2lzdGVyLgorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBTaG91bGQgbm90IGJlIGludm9rZWQgaWYgdGhlICJob3RwbHVnIGluaXRpYWxpemF0aW9uCisgKiAgICAgIG1vZGVsIiBpcyBiZWluZyB1c2VkLiBDYWxsZWQgaW50ZXJuYWxseSBieSBleGl0X3RoaXNfc2NzaV9kcml2ZXIoKQorICogICAgICBpbiB0aGUgInBhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZWwiLiBIZW5jZSBhIExMRCBoYXMgbm8gbmVlZCB0bworICogICAgICBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYyAuCisgKiovCit2b2lkIHNjc2lfdW5yZWdpc3RlcihzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hwKQorCisKKworCitJbnRlcmZhY2UgRnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09CitJbnRlcmZhY2UgZnVuY3Rpb25zIGFyZSBzdXBwbGllZCAoZGVmaW5lZCkgYnkgTExEcyBhbmQgdGhlaXIgZnVuY3Rpb24KK3BvaW50ZXJzIGFyZSBwbGFjZWQgaW4gYW4gaW5zdGFuY2Ugb2Ygc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB3aGljaAoraXMgcGFzc2VkIHRvIHNjc2lfaG9zdF9hbGxvYygpIFtvciBzY3NpX3JlZ2lzdGVyKCkgLyBpbml0X3RoaXNfc2NzaV9kcml2ZXIoKV0uCitTb21lIGFyZSBtYW5kYXRvcnkuIEludGVyZmFjZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGRlY2xhcmVkIHN0YXRpYy4gVGhlCithY2NlcHRlZCBjb252ZW50aW9uIGlzIHRoYXQgZHJpdmVyICJ4eXoiIHdpbGwgZGVjbGFyZSBpdHMgc2xhdmVfY29uZmlndXJlKCkgCitmdW5jdGlvbiBhczoKKyAgICBzdGF0aWMgaW50IHh5el9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICogc2Rldik7CithbmQgc28gZm9ydGggZm9yIGFsbCBpbnRlcmZhY2UgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdy4KKworQSBwb2ludGVyIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgJ3NsYXZlX2NvbmZpZ3VyZScgbWVtYmVyCitvZiBhICJzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIiBpbnN0YW5jZS4gQSBwb2ludGVyIHRvIHN1Y2ggYW4gaW5zdGFuY2UKK3Nob3VsZCBiZSBwYXNzZWQgdG8gdGhlIG1pZCBsZXZlbCdzIHNjc2lfaG9zdF9hbGxvYygpIFtvciBzY3NpX3JlZ2lzdGVyKCkgLworaW5pdF90aGlzX3Njc2lfZHJpdmVyKCldLgorCitUaGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYWxzbyBkZXNjcmliZWQgaW4gdGhlIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorZmlsZSBpbW1lZGlhdGVseSBhYm92ZSB0aGVpciBkZWZpbml0aW9uIHBvaW50IGluICJzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIi4KK0luIHNvbWUgY2FzZXMgbW9yZSBkZXRhaWwgaXMgZ2l2ZW4gaW4gc2NzaV9ob3N0LmggdGhhbiBiZWxvdy4KKworVGhlIGludGVyZmFjZSBmdW5jdGlvbnMgYXJlIGxpc3RlZCBiZWxvdyBpbiBhbHBoYWJldGljYWwgb3JkZXIuCisKK1N1bW1hcnk6CisgICBiaW9zX3BhcmFtIC0gZmV0Y2ggaGVhZCwgc2VjdG9yLCBjeWxpbmRlciBpbmZvIGZvciBhIGRpc2sKKyAgIGRldGVjdCAtIGRldGVjdHMgSEJBcyB0aGlzIGRyaXZlciB3YW50cyB0byBjb250cm9sCisgICBlaF90aW1lZF9vdXQgLSBub3RpZnkgdGhlIGhvc3QgdGhhdCBhIGNvbW1hbmQgdGltZXIgZXhwaXJlZAorICAgZWhfYWJvcnRfaGFuZGxlciAtIGFib3J0IGdpdmVuIGNvbW1hbmQKKyAgIGVoX2J1c19yZXNldF9oYW5kbGVyIC0gaXNzdWUgU0NTSSBidXMgcmVzZXQKKyAgIGVoX2RldmljZV9yZXNldF9oYW5kbGVyIC0gaXNzdWUgU0NTSSBkZXZpY2UgcmVzZXQKKyAgIGVoX2hvc3RfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGhvc3QgKGhvc3QgYnVzIGFkYXB0ZXIpCisgICBlaF9zdHJhdGVneV9oYW5kbGVyIC0gZHJpdmVyIHN1cHBsaWVkIGFsdGVybmF0ZSB0byBzY3NpX3VuamFtX2hvc3QoKQorICAgaW5mbyAtIHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dCBnaXZlbiBob3N0CisgICBpb2N0bCAtIGRyaXZlciBjYW4gcmVzcG9uZCB0byBpb2N0bHMKKyAgIHByb2NfaW5mbyAtIHN1cHBvcnRzIC9wcm9jL3Njc2kve2RyaXZlcl9uYW1lfS97aG9zdF9ub30KKyAgIHF1ZXVlY29tbWFuZCAtIHF1ZXVlIHNjc2kgY29tbWFuZCwgaW52b2tlICdkb25lJyBvbiBjb21wbGV0aW9uCisgICByZWxlYXNlIC0gcmVsZWFzZSBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBob3N0CisgICBzbGF2ZV9hbGxvYyAtIHByaW9yIHRvIGFueSBjb21tYW5kcyBiZWluZyBzZW50IHRvIGEgbmV3IGRldmljZSAKKyAgIHNsYXZlX2NvbmZpZ3VyZSAtIGRyaXZlciBmaW5lIHR1bmluZyBmb3IgZ2l2ZW4gZGV2aWNlIGFmdGVyIGF0dGFjaAorICAgc2xhdmVfZGVzdHJveSAtIGdpdmVuIGRldmljZSBpcyBhYm91dCB0byBiZSBzaHV0IGRvd24KKworCitEZXRhaWxzOgorCisvKioKKyAqICAgICAgYmlvc19wYXJhbSAtIGZldGNoIGhlYWQsIHNlY3RvciwgY3lsaW5kZXIgaW5mbyBmb3IgYSBkaXNrCisgKiAgICAgIEBzZGV2OiBwb2ludGVyIHRvIHNjc2kgZGV2aWNlIGNvbnRleHQgKGRlZmluZWQgaW4gCisgKiAgICAgICAgICAgICBpbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCkKKyAqICAgICAgQGJkZXY6IHBvaW50ZXIgdG8gYmxvY2sgZGV2aWNlIGNvbnRleHQgKGRlZmluZWQgaW4gZnMuaCkKKyAqICAgICAgQGNhcGFjaXR5OiAgZGV2aWNlIHNpemUgKGluIDUxMiBieXRlIHNlY3RvcnMpCisgKiAgICAgIEBwYXJhbXM6IHRocmVlIGVsZW1lbnQgYXJyYXkgdG8gcGxhY2Ugb3V0cHV0OgorICogICAgICAgICAgICAgIHBhcmFtc1swXSBudW1iZXIgb2YgaGVhZHMgKG1heCAyNTUpCisgKiAgICAgICAgICAgICAgcGFyYW1zWzFdIG51bWJlciBvZiBzZWN0b3JzIChtYXggNjMpCisgKiAgICAgICAgICAgICAgcGFyYW1zWzJdIG51bWJlciBvZiBjeWxpbmRlcnMgCisgKgorICogICAgICBSZXR1cm4gdmFsdWUgaXMgaWdub3JlZAorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcyAoc2QpCisgKgorICogICAgICBOb3RlczogYW4gYXJiaXRyYXJ5IGdlb21ldHJ5IChiYXNlZCBvbiBSRUFEIENBUEFDSVRZKSBpcyB1c2VkCisgKiAgICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgbm90IHByb3ZpZGVkLiBUaGUgcGFyYW1zIGFycmF5IGlzCisgKiAgICAgIHByZS1pbml0aWFsaXplZCB3aXRoIG1hZGUgdXAgdmFsdWVzIGp1c3QgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIAorICogICAgICBkb2Vzbid0IG91dHB1dCBhbnl0aGluZy4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IGJpb3NfcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICogc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKyAgICAgICAgICAgICAgICAgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50IHBhcmFtc1szXSkKKworCisvKioKKyAqICAgICAgZGV0ZWN0IC0gZGV0ZWN0cyBIQkFzIHRoaXMgZHJpdmVyIHdhbnRzIHRvIGNvbnRyb2wKKyAqICAgICAgQHNodHA6IGhvc3QgdGVtcGxhdGUgZm9yIHRoaXMgZHJpdmVyLgorICoKKyAqICAgICAgUmV0dXJucyBudW1iZXIgb2YgaG9zdHMgdGhpcyBkcml2ZXIgd2FudHMgdG8gY29udHJvbC4gMCBtZWFucyBubworICogICAgICBzdWl0YWJsZSBob3N0cyBmb3VuZC4KKyAqCisgKiAgICAgIExvY2tzOiBub25lIGhlbGQKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcyBbaW52b2tlZCBmcm9tIGluaXRfdGhpc19zY3NpX2RyaXZlcigpXQorICoKKyAqICAgICAgTm90ZXM6IEZpcnN0IGZ1bmN0aW9uIGNhbGxlZCBmcm9tIHRoZSBTQ1NJIG1pZCBsZXZlbCBvbiB0aGlzCisgKiAgICAgIGRyaXZlci4gVXBwZXIgbGV2ZWwgZHJpdmVycyAoZS5nLiBzZCkgbWF5IG5vdCAoeWV0KSBiZSBwcmVzZW50LgorICogICAgICBGb3IgZWFjaCBob3N0IGZvdW5kLCB0aGlzIG1ldGhvZCBzaG91bGQgY2FsbCBzY3NpX3JlZ2lzdGVyKCkgCisgKiAgICAgIFtzZWUgaG9zdHMuY10uCisgKgorICogICAgICBEZWZpbmVkIGluOiBMTEQgKHJlcXVpcmVkIGlmICJwYXNzaXZlIGluaXRpYWxpemF0aW9uIG1vZGUiIGlzIHVzZWQsCisgKiAgICAgICAgICAgICAgICAgICAgICAgbm90IGludm9rZWQgaW4gImhvdHBsdWcgaW5pdGlhbGl6YXRpb24gbW9kZSIpCisgKiovCisgICAgaW50IGRldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogc2h0cCkKKworCisvKioKKyAqICAgICAgZWhfdGltZWRfb3V0IC0gVGhlIHRpbWVyIGZvciB0aGUgY29tbWFuZCBoYXMganVzdCBmaXJlZAorICogICAgICBAc2NwOiBpZGVudGlmaWVzIGNvbW1hbmQgdGltaW5nIG91dAorICoKKyAqICAgICAgUmV0dXJuczoKKyAqCisgKiAgICAgIEVIX0hBTkRMRUQ6ICAgICAgICAgICAgIEkgZml4ZWQgdGhlIGVycm9yLCBwbGVhc2UgY29tcGxldGUgdGhlIGNvbW1hbmQKKyAqICAgICAgRUhfUkVTRVRfVElNRVI6ICAgICAgICAgSSBuZWVkIG1vcmUgdGltZSwgcmVzZXQgdGhlIHRpbWVyIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiBjb3VudGluZyBhZ2FpbgorICogICAgICBFSF9OT1RfSEFORExFRCAgICAgICAgICBCZWdpbiBub3JtYWwgZXJyb3IgcmVjb3ZlcnkKKyAqCisgKgorICogICAgICBMb2NrczogTm9uZSBoZWxkCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGludGVycnVwdAorICoKKyAqICAgICAgTm90ZXM6IFRoaXMgaXMgdG8gZ2l2ZSB0aGUgTExEIGFuIG9wcG9ydHVuaXR5IHRvIGRvIGxvY2FsIHJlY292ZXJ5LgorICogICAgICBUaGlzIHJlY292ZXJ5IGlzIGxpbWl0ZWQgdG8gZGV0ZXJtaW5pbmcgaWYgdGhlIG91dHN0YW5kaW5nIGNvbW1hbmQKKyAqICAgICAgd2lsbCBldmVyIGNvbXBsZXRlLiAgWW91IG1heSBub3QgYWJvcnQgYW5kIHJlc3RhcnQgdGhlIGNvbW1hbmQgZnJvbQorICogICAgICB0aGlzIGNhbGxiYWNrLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICAgaW50IGVoX3RpbWVkX291dChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwKQorCisKKy8qKgorICogICAgICBlaF9hYm9ydF9oYW5kbGVyIC0gYWJvcnQgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGggc2NwCisgKiAgICAgIEBzY3A6IGlkZW50aWZpZXMgY29tbWFuZCB0byBiZSBhYm9ydGVkCisgKgorICogICAgICBSZXR1cm5zIFNVQ0NFU1MgaWYgY29tbWFuZCBhYm9ydGVkIGVsc2UgRkFJTEVECisgKgorICogICAgICBMb2Nrczogc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIGhlbGQgKHdpdGggaXJxc2F2ZSkgb24gZW50cnkgCisgKiAgICAgIGFuZCBhc3N1bWVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBObyBvdGhlciBjb21tYW5kcyB3aWxsIGJlCisgKiAgICAgIHF1ZXVlZCBvbiBjdXJyZW50IGhvc3QgZHVyaW5nIGVoLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICAgaW50IGVoX2Fib3J0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqIHNjcCkKKworCisvKioKKyAqICAgICAgZWhfYnVzX3Jlc2V0X2hhbmRsZXIgLSBpc3N1ZSBTQ1NJIGJ1cyByZXNldAorICogICAgICBAc2NwOiBTQ1NJIGJ1cyB0aGF0IGNvbnRhaW5zIHRoaXMgZGV2aWNlIHNob3VsZCBiZSByZXNldAorICoKKyAqICAgICAgUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICoKKyAqICAgICAgTG9ja3M6IHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBoZWxkICh3aXRoIGlycXNhdmUpIG9uIGVudHJ5IAorICogICAgICBhbmQgYXNzdW1lZCB0byBiZSBoZWxkIG9uIHJldHVybi4KKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDoga2VybmVsIHRocmVhZAorICoKKyAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX2VoIHRocmVhZC4gTm8gb3RoZXIgY29tbWFuZHMgd2lsbCBiZQorICogICAgICBxdWV1ZWQgb24gY3VycmVudCBob3N0IGR1cmluZyBlaC4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgIGludCBlaF9idXNfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwKQorCisKKy8qKgorICogICAgICBlaF9kZXZpY2VfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgZGV2aWNlIHJlc2V0CisgKiAgICAgIEBzY3A6IGlkZW50aWZpZXMgU0NTSSBkZXZpY2UgdG8gYmUgcmVzZXQKKyAqCisgKiAgICAgIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKKyAqCisgKiAgICAgIExvY2tzOiBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgaGVsZCAod2l0aCBpcnFzYXZlKSBvbiBlbnRyeQorICogICAgICBhbmQgYXNzdW1lZCB0byBiZSBoZWxkIG9uIHJldHVybi4KKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDoga2VybmVsIHRocmVhZAorICoKKyAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX2VoIHRocmVhZC4gTm8gb3RoZXIgY29tbWFuZHMgd2lsbCBiZQorICogICAgICBxdWV1ZWQgb24gY3VycmVudCBob3N0IGR1cmluZyBlaC4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgIGludCBlaF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwKQorCisKKy8qKgorICogICAgICBlaF9ob3N0X3Jlc2V0X2hhbmRsZXIgLSByZXNldCBob3N0IChob3N0IGJ1cyBhZGFwdGVyKQorICogICAgICBAc2NwOiBTQ1NJIGhvc3QgdGhhdCBjb250YWlucyB0aGlzIGRldmljZSBzaG91bGQgYmUgcmVzZXQKKyAqCisgKiAgICAgIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKKyAqCisgKiAgICAgIExvY2tzOiBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgaGVsZCAod2l0aCBpcnFzYXZlKSBvbiBlbnRyeQorICogICAgICBhbmQgYXNzdW1lZCB0byBiZSBoZWxkIG9uIHJldHVybi4KKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDoga2VybmVsIHRocmVhZAorICoKKyAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX2VoIHRocmVhZC4gTm8gb3RoZXIgY29tbWFuZHMgd2lsbCBiZQorICogICAgICBxdWV1ZWQgb24gY3VycmVudCBob3N0IGR1cmluZyBlaC4gCisgKiAgICAgIFdpdGggdGhlIGRlZmF1bHQgZWhfc3RyYXRlZ3kgaW4gcGxhY2UsIGlmIG5vbmUgb2YgdGhlIF9hYm9ydF8sIAorICogICAgICBfZGV2aWNlX3Jlc2V0XywgX2J1c19yZXNldF8gb3IgdGhpcyBlaCBoYW5kbGVyIGZ1bmN0aW9uIGFyZSAKKyAqICAgICAgZGVmaW5lZCAob3IgdGhleSBhbGwgcmV0dXJuIEZBSUxFRCkgdGhlbiB0aGUgZGV2aWNlIGluIHF1ZXN0aW9uIAorICogICAgICB3aWxsIGJlIHNldCBvZmZsaW5lIHdoZW5ldmVyIGVoIGlzIGludm9rZWQuCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfaG9zdF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3ApCisKKworLyoqCisgKiAgICAgIGVoX3N0cmF0ZWd5X2hhbmRsZXIgLSBkcml2ZXIgc3VwcGxpZWQgYWx0ZXJuYXRlIHRvIHNjc2lfdW5qYW1faG9zdCgpCisgKiAgICAgIEBzaHA6IGhvc3Qgb24gd2hpY2ggZXJyb3IgaGFzIG9jY3VycmVkCisgKgorICogICAgICBSZXR1cm5zIFRSVUUgaWYgaG9zdCB1bmphbW1lZCwgZWxzZSBGQUxTRS4KKyAqCisgKiAgICAgIExvY2tzOiBub25lCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGtlcm5lbCB0aHJlYWQKKyAqCisgKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9laCB0aHJlYWQuIExMRCBzdXBwbGllZCBhbHRlcm5hdGUgdG8gCisgKiAgICAgIHNjc2lfdW5qYW1faG9zdCgpIGZvdW5kIGluIHNjc2lfZXJyb3IuYworICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICAgaW50IGVoX3N0cmF0ZWd5X2hhbmRsZXIoc3RydWN0IFNjc2lfSG9zdCAqIHNocCkKKworCisvKioKKyAqICAgICAgaW5mbyAtIHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dCBnaXZlbiBob3N0OiBkcml2ZXIgbmFtZSBwbHVzIGRhdGEKKyAqICAgICAgICAgICAgIHRvIGRpc3Rpbmd1aXNoIGdpdmVuIGhvc3QKKyAqICAgICAgQHNocDogaG9zdCB0byBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQKKyAqCisgKiAgICAgIFJldHVybiBBU0NJSSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nLiBbVGhpcyBkcml2ZXIgaXMgYXNzdW1lZCB0bworICogICAgICBtYW5hZ2UgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGFuZCBtYWludGFpbiBpdCwgdHlwaWNhbGx5IGZvciB0aGUKKyAqICAgICAgbGlmZXRpbWUgb2YgdGhpcyBob3N0Ll0KKyAqCisgKiAgICAgIExvY2tzOiBub25lCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MKKyAqCisgKiAgICAgIE5vdGVzOiBPZnRlbiBzdXBwbGllcyBQQ0kgb3IgSVNBIGluZm9ybWF0aW9uIHN1Y2ggYXMgSU8gYWRkcmVzc2VzCisgKiAgICAgIGFuZCBpbnRlcnJ1cHQgbnVtYmVycy4gSWYgbm90IHN1cHBsaWVkIHN0cnVjdCBTY3NpX0hvc3Q6Om5hbWUgdXNlZAorICogICAgICBpbnN0ZWFkLiBJdCBpcyBhc3N1bWVkIHRoZSByZXR1cm5lZCBpbmZvcm1hdGlvbiBmaXRzIG9uIG9uZSBsaW5lIAorICogICAgICAoaS5lLiBkb2VzIG5vdCBpbmNsdWRlZCBlbWJlZGRlZCBuZXdsaW5lcykuCisgKiAgICAgIFRoZSBTQ1NJX0lPQ1RMX1BST0JFX0hPU1QgaW9jdGwgeWllbGRzIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhpcworICogICAgICBmdW5jdGlvbiAob3Igc3RydWN0IFNjc2lfSG9zdDo6bmFtZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogICAgICBhdmFpbGFibGUpLgorICogICAgICBJbiBhIHNpbWlsYXIgbWFubmVyLCBpbml0X3RoaXNfc2NzaV9kcml2ZXIoKSBvdXRwdXRzIHRvIHRoZSBjb25zb2xlCisgKiAgICAgIGVhY2ggaG9zdCdzICJpbmZvIiAob3IgbmFtZSkgZm9yIHRoZSBkcml2ZXIgaXQgaXMgcmVnaXN0ZXJpbmcuCisgKiAgICAgIEFsc28gaWYgcHJvY19pbmZvKCkgaXMgbm90IHN1cHBsaWVkLCB0aGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24KKyAqICAgICAgaXMgdXNlZCBpbnN0ZWFkLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBjb25zdCBjaGFyICogaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hwKQorCisKKy8qKgorICogICAgICBpb2N0bCAtIGRyaXZlciBjYW4gcmVzcG9uZCB0byBpb2N0bHMKKyAqICAgICAgQHNkcDogZGV2aWNlIHRoYXQgaW9jdGwgd2FzIGlzc3VlZCBmb3IKKyAqICAgICAgQGNtZDogaW9jdGwgbnVtYmVyCisgKiAgICAgIEBhcmc6IHBvaW50ZXIgdG8gcmVhZCBvciB3cml0ZSBkYXRhIGZyb20uIFNpbmNlIGl0IHBvaW50cyB0bworICogICAgICAgICAgICB1c2VyIHNwYWNlLCBzaG91bGQgdXNlIGFwcHJvcHJpYXRlIGtlcm5lbCBmdW5jdGlvbnMKKyAqICAgICAgICAgICAgKGUuZy4gY29weV9mcm9tX3VzZXIoKSApLiBJbiB0aGUgVW5peCBzdHlsZSB0aGlzIGFyZ3VtZW50CisgKiAgICAgICAgICAgIGNhbiBhbHNvIGJlIHZpZXdlZCBhcyBhbiB1bnNpZ25lZCBsb25nLgorICoKKyAqICAgICAgUmV0dXJucyBuZWdhdGl2ZSAiZXJybm8iIHZhbHVlIHdoZW4gdGhlcmUgaXMgYSBwcm9ibGVtLiAwIG9yIGEKKyAqICAgICAgcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3MgYW5kIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyIHNwYWNlLgorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IFRoZSBTQ1NJIHN1YnN5c3RlbSB1c2VzIGEgInRyaWNrbGUgZG93biIgaW9jdGwgbW9kZWwuCisgKiAgICAgIFRoZSB1c2VyIGlzc3VlcyBhbiBpb2N0bCgpIGFnYWluc3QgYW4gdXBwZXIgbGV2ZWwgZHJpdmVyCisgKiAgICAgIChlLmcuIC9kZXYvc2RjKSBhbmQgaWYgdGhlIHVwcGVyIGxldmVsIGRyaXZlciBkb2Vzbid0IHJlY29nbml6ZQorICogICAgICB0aGUgJ2NtZCcgdGhlbiBpdCBpcyBwYXNzZWQgdG8gdGhlIFNDU0kgbWlkIGxldmVsLiBJZiB0aGUgU0NTSQorICogICAgICBtaWQgbGV2ZWwgZG9lcyBub3QgcmVjb2duaXplIGl0LCB0aGVuIHRoZSBMTEQgdGhhdCBjb250cm9scworICogICAgICB0aGUgZGV2aWNlIHJlY2VpdmVzIHRoZSBpb2N0bC4gQWNjb3JkaW5nIHRvIHJlY2VudCBVbml4IHN0YW5kYXJkcworICogICAgICB1bnN1cHBvcnRlZCBpb2N0bCgpICdjbWQnIG51bWJlcnMgc2hvdWxkIHJldHVybiAtRU5PVFRZLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBpbnQgaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpzZHAsIGludCBjbWQsIHZvaWQgKmFyZykKKworCisvKioKKyAqICAgICAgcHJvY19pbmZvIC0gc3VwcG9ydHMgL3Byb2Mvc2NzaS97ZHJpdmVyX25hbWV9L3tob3N0X25vfQorICogICAgICBAYnVmZmVyOiBhbmNob3IgcG9pbnQgdG8gb3V0cHV0IHRvICgwPT13cml0ZXRvMV9yZWFkMCkgb3IgZmV0Y2ggZnJvbQorICogICAgICAgICAgICAgICAoMT09d3JpdGV0bzFfcmVhZDApLgorICogICAgICBAc3RhcnQ6IHdoZXJlICJpbnRlcmVzdGluZyIgZGF0YSBpcyB3cml0dGVuIHRvLiBJZ25vcmVkIHdoZW4KKyAqICAgICAgICAgICAgICAxPT13cml0ZXRvMV9yZWFkMC4KKyAqICAgICAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiBidWZmZXIgMD09d3JpdGV0bzFfcmVhZDAgaXMgYWN0dWFsbHkKKyAqICAgICAgICAgICAgICAgaW50ZXJlc3RlZCBpbi4gSWdub3JlZCB3aGVuIDE9PXdyaXRldG8xX3JlYWQwIC4KKyAqICAgICAgQGxlbmd0aDogbWF4aW11bSAob3IgYWN0dWFsKSBleHRlbnQgb2YgYnVmZmVyCisgKiAgICAgIEBob3N0X25vOiBob3N0IG51bWJlciBvZiBpbnRlcmVzdCAoc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9ubykKKyAqICAgICAgQHdyaXRldG8xX3JlYWQwOiAxIC0+IGRhdGEgY29taW5nIGZyb20gdXNlciBzcGFjZSB0b3dhcmRzIGRyaXZlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gImVjaG8gc29tZV9zdHJpbmcgPiAvcHJvYy9zY3NpL3h5ei8yIikKKyAqICAgICAgICAgICAgICAgICAgICAgICAwIC0+IHVzZXIgd2hhdCBkYXRhIGZyb20gdGhpcyBkcml2ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICJjYXQgL3Byb2Mvc2NzaS94eXovMiIpCisgKgorICogICAgICBSZXR1cm5zIGxlbmd0aCB3aGVuIDE9PXdyaXRldG8xX3JlYWQwLiBPdGhlcndpc2UgbnVtYmVyIG9mIGNoYXJzCisgKiAgICAgIG91dHB1dCB0byBidWZmZXIgcGFzdCBvZmZzZXQuCisgKgorICogICAgICBMb2Nrczogbm9uZSBoZWxkCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MKKyAqCisgKiAgICAgIE5vdGVzOiBEcml2ZW4gZnJvbSBzY3NpX3Byb2MuYyB3aGljaCBpbnRlcmZhY2VzIHRvIHByb2NfZnMuIHByb2NfZnMKKyAqICAgICAgc3VwcG9ydCBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgb3V0IG9mIHRoZSBzY3NpIHN1YnN5c3RlbS4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IHByb2NfaW5mbyhjaGFyICogYnVmZmVyLCBjaGFyICoqIHN0YXJ0LCBvZmZfdCBvZmZzZXQsIAorICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwgaW50IGhvc3Rfbm8sIGludCB3cml0ZXRvMV9yZWFkMCkKKworCisvKioKKyAqICAgICAgcXVldWVjb21tYW5kIC0gcXVldWUgc2NzaSBjb21tYW5kLCBpbnZva2UgJ2RvbmUnIG9uIGNvbXBsZXRpb24KKyAqICAgICAgQHNjcDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKiAgICAgIEBkb25lOiBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIGludm9rZWQgb24gY29tcGxldGlvbgorICoKKyAqICAgICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKgorICogICAgICBJZiB0aGVyZSdzIGEgZmFpbHVyZSwgcmV0dXJuIGVpdGhlcjoKKyAqCisgKiAgICAgIFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSBpZiB0aGUgZGV2aWNlIHF1ZXVlIGlzIGZ1bGwsIG9yCisgKiAgICAgIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kgaWYgdGhlIGVudGlyZSBob3N0IHF1ZXVlIGlzIGZ1bGwKKyAqCisgKiAgICAgIE9uIGJvdGggb2YgdGhlc2UgcmV0dXJucywgdGhlIG1pZC1sYXllciB3aWxsIHJlcXVldWUgdGhlIEkvTworICoKKyAqICAgICAgLSBpZiB0aGUgcmV0dXJuIGlzIFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSwgb25seSB0aGF0IHBhcnRpY3VsYXIKKyAqICAgICAgZGV2aWNlIHdpbGwgYmUgcGF1c2VkLCBhbmQgaXQgd2lsbCBiZSB1bnBhdXNlZCB3aGVuIGEgY29tbWFuZCB0bworICogICAgICB0aGUgZGV2aWNlIHJldHVybnMgKG9yIGFmdGVyIGEgYnJpZWYgZGVsYXkgaWYgdGhlcmUgYXJlIG5vIG1vcmUKKyAqICAgICAgb3V0c3RhbmRpbmcgY29tbWFuZHMgdG8gaXQpLiAgQ29tbWFuZHMgdG8gb3RoZXIgZGV2aWNlcyBjb250aW51ZQorICogICAgICB0byBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCisgKgorICogICAgICAtIGlmIHRoZSByZXR1cm4gaXMgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSwgYWxsIEkvTyB0byB0aGUgaG9zdAorICogICAgICBpcyBwYXVzZWQgYW5kIHdpbGwgYmUgdW5wYXVzZWQgd2hlbiBhbnkgY29tbWFuZCByZXR1cm5zIGZyb20KKyAqICAgICAgdGhlIGhvc3QgKG9yIGFmdGVyIGEgYnJpZWYgZGVsYXkgaWYgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nCisgKiAgICAgIGNvbW1hbmRzIHRvIHRoZSBob3N0KS4KKyAqCisgKiAgICAgIEZvciBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBxdWV1ZWNvbW1hbmQsIGFueQorICogICAgICBvdGhlciByZXR1cm4gdmFsdWUgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcworICogICAgICBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZLgorICoKKyAqICAgICAgT3RoZXIgdHlwZXMgb2YgZXJyb3JzIHRoYXQgYXJlIGRldGVjdGVkIGltbWVkaWF0ZWx5IG1heSBiZQorICogICAgICBmbGFnZ2VkIGJ5IHNldHRpbmcgc2NwLT5yZXN1bHQgdG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUsCisgKiAgICAgIGludm9raW5nIHRoZSAnZG9uZScgY2FsbGJhY2ssIGFuZCB0aGVuIHJldHVybmluZyAwIGZyb20gdGhpcworICogICAgICBmdW5jdGlvbi4gSWYgdGhlIGNvbW1hbmQgaXMgbm90IHBlcmZvcm1lZCBpbW1lZGlhdGVseSAoYW5kIHRoZQorICogICAgICBMTEQgaXMgc3RhcnRpbmcgKG9yIHdpbGwgc3RhcnQpIHRoZSBnaXZlbiBjb21tYW5kKSB0aGVuIHRoaXMKKyAqICAgICAgZnVuY3Rpb24gc2hvdWxkIHBsYWNlIDAgaW4gc2NwLT5yZXN1bHQgYW5kIHJldHVybiAwLgorICoKKyAqICAgICAgQ29tbWFuZCBvd25lcnNoaXAuICBJZiB0aGUgZHJpdmVyIHJldHVybnMgemVybywgaXQgb3ducyB0aGUKKyAqICAgICAgY29tbWFuZCBhbmQgbXVzdCB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciBlbnN1cmluZyB0aGUgJ2RvbmUnCisgKiAgICAgIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLiAgTm90ZTogdGhlIGRyaXZlciBtYXkgY2FsbCBkb25lIGJlZm9yZQorICogICAgICByZXR1cm5pbmcgemVybywgYnV0IGFmdGVyIGl0IGhhcyBjYWxsZWQgZG9uZSwgaXQgbWF5IG5vdAorICogICAgICByZXR1cm4gYW55IHZhbHVlIG90aGVyIHRoYW4gemVyby4gIElmIHRoZSBkcml2ZXIgbWFrZXMgYQorICogICAgICBub24temVybyByZXR1cm4sIGl0IG11c3Qgbm90IGV4ZWN1dGUgdGhlIGNvbW1hbmQncyBkb25lCisgKiAgICAgIGNhbGxiYWNrIGF0IGFueSB0aW1lLgorICoKKyAqICAgICAgTG9ja3M6IHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBoZWxkIG9uIGVudHJ5ICh3aXRoICJpcnFzYXZlIikKKyAqICAgICAgICAgICAgIGFuZCBpcyBleHBlY3RlZCB0byBiZSBoZWxkIG9uIHJldHVybi4KKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogaW4gaW50ZXJydXB0IChzb2Z0IGlycSkgb3IgcHJvY2VzcyBjb250ZXh0CisgKgorICogICAgICBOb3RlczogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcmVsYXRpdmVseSBmYXN0LiBOb3JtYWxseSBpdCB3aWxsCisgKiAgICAgIG5vdCB3YWl0IGZvciBJTyB0byBjb21wbGV0ZS4gSGVuY2UgdGhlICdkb25lJyBjYWxsYmFjayBpcyBpbnZva2VkIAorICogICAgICAob2Z0ZW4gZGlyZWN0bHkgZnJvbSBhbiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lKSBzb21lIHRpbWUgYWZ0ZXIKKyAqICAgICAgdGhpcyBmdW5jdGlvbiBoYXMgcmV0dXJuZWQuIEluIHNvbWUgY2FzZXMgKGUuZy4gcHNldWRvIGFkYXB0ZXIgCisgKiAgICAgIGRyaXZlcnMgdGhhdCBtYW51ZmFjdHVyZSB0aGUgcmVzcG9uc2UgdG8gYSBTQ1NJIElOUVVJUlkpCisgKiAgICAgIHRoZSAnZG9uZScgY2FsbGJhY2sgbWF5IGJlIGludm9rZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKyAqICAgICAgSWYgdGhlICdkb25lJyBjYWxsYmFjayBpcyBub3QgaW52b2tlZCB3aXRoaW4gYSBjZXJ0YWluIHBlcmlvZAorICogICAgICB0aGUgU0NTSSBtaWQgbGV2ZWwgd2lsbCBjb21tZW5jZSBlcnJvciBwcm9jZXNzaW5nLgorICogICAgICBJZiBhIHN0YXR1cyBvZiBDSEVDSyBDT05ESVRJT04gaXMgcGxhY2VkIGluICJyZXN1bHQiIHdoZW4gdGhlCisgKiAgICAgICdkb25lJyBjYWxsYmFjayBpcyBpbnZva2VkLCB0aGVuIHRoZSBMTEQgZHJpdmVyIHNob3VsZCAKKyAqICAgICAgcGVyZm9ybSBhdXRvc2Vuc2UgYW5kIGZpbGwgaW4gdGhlIHN0cnVjdCBzY3NpX2NtbmQ6OnNlbnNlX2J1ZmZlcgorICogICAgICBhcnJheS4gVGhlIHNjc2lfY21uZDo6c2Vuc2VfYnVmZmVyIGFycmF5IGlzIHplcm9lZCBwcmlvciB0bworICogICAgICB0aGUgbWlkIGxldmVsIHF1ZXVpbmcgYSBjb21tYW5kIHRvIGFuIExMRC4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IExMRAorICoqLworICAgIGludCBxdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwgCisgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKKworCisvKioKKyAqICAgICAgcmVsZWFzZSAtIHJlbGVhc2UgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZ2l2ZW4gaG9zdAorICogICAgICBAc2hwOiBob3N0IHRvIGJlIHJlbGVhc2VkLgorICoKKyAqICAgICAgUmV0dXJuIHZhbHVlIGlnbm9yZWQgKGNvdWxkIHNvb24gYmUgYSBmdW5jdGlvbiByZXR1cm5pbmcgdm9pZCkuCisgKgorICogICAgICBMb2Nrczogbm9uZSBoZWxkCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MKKyAqCisgKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9tb2R1bGUuYydzIGV4aXRfdGhpc19zY3NpX2RyaXZlcigpLgorICogICAgICBMTEQncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBjYWxsIAorICogICAgICBzY3NpX3VucmVnaXN0ZXIoc2hwKSBwcmlvciB0byByZXR1cm5pbmcuCisgKiAgICAgIE9ubHkgbmVlZGVkIGZvciBvbGQtc3R5bGUgaG9zdCB0ZW1wbGF0ZXMuCisgKgorICogICAgICBEZWZpbmVkIGluOiBMTEQgKHJlcXVpcmVkIGluICJwYXNzaXZlIGluaXRpYWxpemF0aW9uIG1vZGVsIiwKKyAqICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgbm90IGJlIGRlZmluZWQgaW4gaG90cGx1ZyBtb2RlbCkKKyAqKi8KKyAgICBpbnQgcmVsZWFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hwKQorCisKKy8qKgorICogICAgICBzbGF2ZV9hbGxvYyAtICAgcHJpb3IgdG8gYW55IGNvbW1hbmRzIGJlaW5nIHNlbnQgdG8gYSBuZXcgZGV2aWNlIAorICogICAgICAgICAgICAgICAgICAgICAgKGkuZS4ganVzdCBwcmlvciB0byBzY2FuKSB0aGlzIGNhbGwgaXMgbWFkZQorICogICAgICBAc2RwOiBwb2ludGVyIHRvIG5ldyBkZXZpY2UgKGFib3V0IHRvIGJlIHNjYW5uZWQpCisgKgorICogICAgICBSZXR1cm5zIDAgaWYgb2suIEFueSBvdGhlciByZXR1cm4gaXMgYXNzdW1lZCB0byBiZSBhbiBlcnJvciBhbmQKKyAqICAgICAgdGhlIGRldmljZSBpcyBpZ25vcmVkLgorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IEFsbG93cyB0aGUgZHJpdmVyIHRvIGFsbG9jYXRlIGFueSByZXNvdXJjZXMgZm9yIGEgZGV2aWNlCisgKiAgICAgIHByaW9yIHRvIGl0cyBpbml0aWFsIHNjYW4uIFRoZSBjb3JyZXNwb25kaW5nIHNjc2kgZGV2aWNlIG1heSBub3QKKyAqICAgICAgZXhpc3QgYnV0IHRoZSBtaWQgbGV2ZWwgaXMganVzdCBhYm91dCB0byBzY2FuIGZvciBpdCAoaS5lLiBzZW5kCisgKiAgICAgIGFuZCBJTlFVSVJZIGNvbW1hbmQgcGx1cyAuLi4pLiBJZiBhIGRldmljZSBpcyBmb3VuZCB0aGVuCisgKiAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGlmIGEgZGV2aWNlIGlzIG5vdCBmb3VuZAorICogICAgICBzbGF2ZV9kZXN0cm95KCkgaXMgY2FsbGVkLgorICogICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGZpbGUuCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIGludCBzbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCkKKworCisvKioKKyAqICAgICAgc2xhdmVfY29uZmlndXJlIC0gZHJpdmVyIGZpbmUgdHVuaW5nIGZvciBnaXZlbiBkZXZpY2UganVzdCBhZnRlciBpdAorICogICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBmaXJzdCBzY2FubmVkIChpLmUuIGl0IHJlc3BvbmRlZCB0byBhbgorICogICAgICAgICAgICAgICAgICAgICBJTlFVSVJZKQorICogICAgICBAc2RwOiBkZXZpY2UgdGhhdCBoYXMganVzdCBiZWVuIGF0dGFjaGVkCisgKgorICogICAgICBSZXR1cm5zIDAgaWYgb2suIEFueSBvdGhlciByZXR1cm4gaXMgYXNzdW1lZCB0byBiZSBhbiBlcnJvciBhbmQKKyAqICAgICAgdGhlIGRldmljZSBpcyB0YWtlbiBvZmZsaW5lLiBbb2ZmbGluZSBkZXZpY2VzIHdpbGwgX25vdF8gaGF2ZQorICogICAgICBzbGF2ZV9kZXN0cm95KCkgY2FsbGVkIG9uIHRoZW0gc28gY2xlYW4gdXAgcmVzb3VyY2VzLl0KKyAqCisgKiAgICAgIExvY2tzOiBub25lCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MKKyAqCisgKiAgICAgIE5vdGVzOiBBbGxvd3MgdGhlIGRyaXZlciB0byBpbnNwZWN0IHRoZSByZXNwb25zZSB0byB0aGUgaW5pdGlhbAorICogICAgICBJTlFVSVJZIGRvbmUgYnkgdGhlIHNjYW5uaW5nIGNvZGUgYW5kIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uLgorICogICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGZpbGUuCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIGludCBzbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCisKKworLyoqCisgKiAgICAgIHNsYXZlX2Rlc3Ryb3kgLSBnaXZlbiBkZXZpY2UgaXMgYWJvdXQgdG8gYmUgc2h1dCBkb3duLiBBbGwKKyAqICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5IGhhcyBjZWFzZWQgb24gdGhpcyBkZXZpY2UuCisgKiAgICAgIEBzZHA6IGRldmljZSB0aGF0IGlzIGFib3V0IHRvIGJlIHNodXQgZG93bgorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogTWlkIGxldmVsIHN0cnVjdHVyZXMgZm9yIGdpdmVuIGRldmljZSBhcmUgc3RpbGwgaW4gcGxhY2UKKyAqICAgICAgYnV0IGFyZSBhYm91dCB0byBiZSB0b3JuIGRvd24uIEFueSBwZXIgZGV2aWNlIHJlc291cmNlcyBhbGxvY2F0ZWQKKyAqICAgICAgYnkgdGhpcyBkcml2ZXIgZm9yIGdpdmVuIGRldmljZSBzaG91bGQgYmUgZnJlZWQgbm93LiBObyBmdXJ0aGVyCisgKiAgICAgIGNvbW1hbmRzIHdpbGwgYmUgc2VudCBmb3IgdGhpcyBzZHAgaW5zdGFuY2UuIFtIb3dldmVyIHRoZSBkZXZpY2UKKyAqICAgICAgY291bGQgYmUgcmUtYXR0YWNoZWQgaW4gdGhlIGZ1dHVyZSBpbiB3aGljaCBjYXNlIGEgbmV3IGluc3RhbmNlCisgKiAgICAgIG9mIHN0cnVjdCBzY3NpX2RldmljZSB3b3VsZCBiZSBzdXBwbGllZCBieSBmdXR1cmUgc2xhdmVfYWxsb2MoKQorICogICAgICBhbmQgc2xhdmVfY29uZmlndXJlKCkgY2FsbHMuXQorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICB2b2lkIHNsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCisKKworCitEYXRhIFN0cnVjdHVyZXMKKz09PT09PT09PT09PT09PQorc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgaXMgb25lICJzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIiBpbnN0YW5jZSBwZXIgTExEICoqKi4gSXQgaXMKK3R5cGljYWxseSBpbml0aWFsaXplZCBhcyBhIGZpbGUgc2NvcGUgc3RhdGljIGluIGEgZHJpdmVyJ3MgaGVhZGVyIGZpbGUuIFRoYXQKK3dheSBtZW1iZXJzIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpbGwgYmUgc2V0IHRvIDAgb3IgTlVMTC4KK01lbWJlciBvZiBpbnRlcmVzdDoKKyAgICBuYW1lICAgICAgICAgLSBuYW1lIG9mIGRyaXZlciAobWF5IGNvbnRhaW4gc3BhY2VzLCBwbGVhc2UgbGltaXQgdG8KKyAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gODAgY2hhcmFjdGVycykKKyAgICBwcm9jX25hbWUgICAgLSBuYW1lIHVzZWQgaW4gIi9wcm9jL3Njc2kvPHByb2NfbmFtZT4vPGhvc3Rfbm8+IiBhbmQKKyAgICAgICAgICAgICAgICAgICBieSBzeXNmcyBpbiBvbmUgb2YgaXRzICJkcml2ZXJzIiBkaXJlY3Rvcmllcy4gSGVuY2UKKyAgICAgICAgICAgICAgICAgICAicHJvY19uYW1lIiBzaG91bGQgb25seSBjb250YWluIGNoYXJhY3RlcnMgYWNjZXB0YWJsZQorICAgICAgICAgICAgICAgICAgIHRvIGEgVW5peCBmaWxlIG5hbWUuCisgICAoKnF1ZXVlY29tbWFuZCkoKSAtIHByaW1hcnkgY2FsbGJhY2sgdGhhdCB0aGUgbWlkIGxldmVsIHVzZXMgdG8gaW5qZWN0CisgICAgICAgICAgICAgICAgICAgU0NTSSBjb21tYW5kcyBpbnRvIGFuIExMRC4KK1RoZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgY29tbWVudGVkIGluIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorCisqKiogSW4gZXh0cmVtZSBzaXR1YXRpb25zIGEgc2luZ2xlIGRyaXZlciBtYXkgaGF2ZSBzZXZlcmFsIGluc3RhbmNlcworICAgIGlmIGl0IGNvbnRyb2xzIHNldmVyYWwgZGlmZmVyZW50IGNsYXNzZXMgb2YgaGFyZHdhcmUgKGUuZy4gYW4gTExECisgICAgdGhhdCBoYW5kbGVzIGJvdGggSVNBIGFuZCBQQ0kgY2FyZHMgYW5kIGhhcyBhIHNlcGFyYXRlIGluc3RhbmNlIG9mCisgICAgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBmb3IgZWFjaCBjbGFzcykuCisKK3N0cnVjdCBTY3NpX0hvc3QKKy0tLS0tLS0tLS0tLS0tLS0KK1RoZXJlIGlzIG9uZSBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlIHBlciBob3N0IChIQkEpIHRoYXQgYW4gTExECitjb250cm9scy4gVGhlIHN0cnVjdCBTY3NpX0hvc3Qgc3RydWN0dXJlIGhhcyBtYW55IG1lbWJlcnMgaW4gY29tbW9uCit3aXRoICJzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIi4gV2hlbiBhIG5ldyBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlCitpcyBjcmVhdGVkIChpbiBzY3NpX2hvc3RfYWxsb2MoKSBpbiBob3N0cy5jKSB0aG9zZSBjb21tb24gbWVtYmVycyBhcmUKK2luaXRpYWxpemVkIGZyb20gdGhlIGRyaXZlcidzIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgaW5zdGFuY2UuIE1lbWJlcnMKK29mIGludGVyZXN0OgorICAgIGhvc3Rfbm8gICAgICAtIHN5c3RlbSB3aWRlIHVuaXF1ZSBudW1iZXIgdGhhdCBpcyB1c2VkIGZvciBpZGVudGlmeWluZworICAgICAgICAgICAgICAgICAgIHRoaXMgaG9zdC4gSXNzdWVkIGluIGFzY2VuZGluZyBvcmRlciBmcm9tIDAuCisgICAgY2FuX3F1ZXVlICAgIC0gbXVzdCBiZSBncmVhdGVyIHRoYW4gMDsgZG8gbm90IHNlbmQgbW9yZSB0aGFuIGNhbl9xdWV1ZQorICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzIHRvIHRoZSBhZGFwdGVyLgorICAgIHRoaXNfaWQgICAgICAtIHNjc2kgaWQgb2YgaG9zdCAoc2NzaSBpbml0aWF0b3IpIG9yIC0xIGlmIG5vdCBrbm93bgorICAgIHNnX3RhYmxlc2l6ZSAtIG1heGltdW0gc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgYWxsb3dlZCBieSBob3N0LgorICAgICAgICAgICAgICAgICAgIDAgaW1wbGllcyBzY2F0dGVyIGdhdGhlciBub3Qgc3VwcG9ydGVkIGJ5IGhvc3QKKyAgICBtYXhfc2VjdG9ycyAgLSBtYXhpbXVtIG51bWJlciBvZiBzZWN0b3JzICh1c3VhbGx5IDUxMiBieXRlcykgYWxsb3dlZAorICAgICAgICAgICAgICAgICAgIGluIGEgc2luZ2xlIFNDU0kgY29tbWFuZC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgMCBsZWFkcworICAgICAgICAgICAgICAgICAgIHRvIGEgc2V0dGluZyBvZiBTQ1NJX0RFRkFVTFRfTUFYX1NFQ1RPUlMgKGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICBzY3NpX2hvc3QuaCkgd2hpY2ggaXMgY3VycmVudGx5IHNldCB0byAxMDI0LiBTbyBmb3IgYQorICAgICAgICAgICAgICAgICAgIGRpc2sgdGhlIG1heGltdW0gdHJhbnNmZXIgc2l6ZSBpcyA1MTIgS0Igd2hlbiBtYXhfc2VjdG9ycworICAgICAgICAgICAgICAgICAgIGlzIG5vdCBkZWZpbmVkLiBOb3RlIHRoYXQgdGhpcyBzaXplIG1heSBub3QgYmUgc3VmZmljaWVudAorICAgICAgICAgICAgICAgICAgIGZvciBkaXNrIGZpcm13YXJlIHVwbG9hZHMuCisgICAgY21kX3Blcl9sdW4gIC0gbWF4aW11bSBudW1iZXIgb2YgY29tbWFuZHMgdGhhdCBjYW4gYmUgcXVldWVkIG9uIGRldmljZXMKKyAgICAgICAgICAgICAgICAgICBjb250cm9sbGVkIGJ5IHRoZSBob3N0LiBPdmVycmlkZGVuIGJ5IExMRCBjYWxscyB0bworICAgICAgICAgICAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkuCisgICAgdW5jaGVja2VkX2lzYV9kbWEgLSAxPT5vbmx5IHVzZSBib3R0b20gMTYgTUIgb2YgcmFtIChJU0EgRE1BIGFkZHJlc3NpbmcKKyAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbiksIDA9PmNhbiB1c2UgZnVsbCAzMiBiaXQgKG9yIGJldHRlcikgRE1BCisgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBzcGFjZQorICAgIHVzZV9jbHVzdGVyaW5nIC0gMT0+U0NTSSBjb21tYW5kcyBpbiBtaWQgbGV2ZWwncyBxdWV1ZSBjYW4gYmUgbWVyZ2VkLAorICAgICAgICAgICAgICAgICAgICAgMD0+ZGlzYWxsb3cgU0NTSSBjb21tYW5kIG1lcmdpbmcKKyAgICBob3N0dCAgICAgICAgLSBwb2ludGVyIHRvIGRyaXZlcidzIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZnJvbSB3aGljaAorICAgICAgICAgICAgICAgICAgIHRoaXMgc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZSB3YXMgc3Bhd25lZAorICAgIGhvc3R0LT5wcm9jX25hbWUgIC0gbmFtZSBvZiBMTEQuIFRoaXMgaXMgdGhlIGRyaXZlciBuYW1lIHRoYXQgc3lzZnMgdXNlcworICAgIHRyYW5zcG9ydHQgICAtIHBvaW50ZXIgdG8gZHJpdmVyJ3Mgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgKGlmIGFueSkuIEZDIGFuZCBTUEkgdHJhbnNwb3J0cyBjdXJyZW50bHkgc3VwcG9ydGVkLgorICAgIHNoX2xpc3QgICAgICAtIGEgZG91YmxlIGxpbmtlZCBsaXN0IG9mIHBvaW50ZXJzIHRvIGFsbCBzdHJ1Y3QgU2NzaV9Ib3N0CisgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzIChjdXJyZW50bHkgb3JkZXJlZCBieSBhc2NlbmRpbmcgaG9zdF9ubykKKyAgICBteV9kZXZpY2VzICAgLSBhIGRvdWJsZSBsaW5rZWQgbGlzdCBvZiBwb2ludGVycyB0byBzdHJ1Y3Qgc2NzaV9kZXZpY2UgCisgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzIHRoYXQgYmVsb25nIHRvIHRoaXMgaG9zdC4KKyAgICBob3N0ZGF0YVswXSAgLSBhcmVhIHJlc2VydmVkIGZvciBMTEQgYXQgZW5kIG9mIHN0cnVjdCBTY3NpX0hvc3QuIFNpemUKKyAgICAgICAgICAgICAgICAgICBpcyBzZXQgYnkgdGhlIHNlY29uZCBhcmd1bWVudCAobmFtZWQgJ3h0cl9ieXRlcycpIHRvCisgICAgICAgICAgICAgICAgICAgc2NzaV9ob3N0X2FsbG9jKCkgb3Igc2NzaV9yZWdpc3RlcigpLgorCitUaGUgc2NzaV9ob3N0IHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorCitzdHJ1Y3Qgc2NzaV9kZXZpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhbGx5LCB0aGVyZSBpcyBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgZm9yIGVhY2ggU0NTSSBsb2dpY2FsIHVuaXQKK29uIGEgaG9zdC4gU2NzaSBkZXZpY2VzIGNvbm5lY3RlZCB0byBhIGhvc3QgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgYQorY2hhbm5lbCBudW1iZXIsIHRhcmdldCBpZCBhbmQgbG9naWNhbCB1bml0IG51bWJlciAobHVuKS4KK1RoZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorCitzdHJ1Y3Qgc2NzaV9jbW5kCistLS0tLS0tLS0tLS0tLS0tCitJbnN0YW5jZXMgb2YgdGhpcyBzdHJ1Y3R1cmUgY29udmV5IFNDU0kgY29tbWFuZHMgdG8gdGhlIExMRCBhbmQgcmVzcG9uc2VzCitiYWNrIHRvIHRoZSBtaWQgbGV2ZWwuIFRoZSBTQ1NJIG1pZCBsZXZlbCB3aWxsIGVuc3VyZSB0aGF0IG5vIG1vcmUgU0NTSQorY29tbWFuZHMgYmVjb21lIHF1ZXVlZCBhZ2FpbnN0IHRoZSBMTEQgdGhhbiBhcmUgaW5kaWNhdGVkIGJ5CitzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIChvciBzdHJ1Y3QgU2NzaV9Ib3N0OjpjbWRfcGVyX2x1bikuIFRoZXJlIHdpbGwKK2JlIGF0IGxlYXN0IG9uZSBpbnN0YW5jZSBvZiBzdHJ1Y3Qgc2NzaV9jbW5kIGF2YWlsYWJsZSBmb3IgZWFjaCBTQ1NJIGRldmljZS4KK01lbWJlcnMgb2YgaW50ZXJlc3Q6CisgICAgY21uZCAgICAgICAgIC0gYXJyYXkgY29udGFpbmluZyBTQ1NJIGNvbW1hbmQKKyAgICBjbW5kX2xlbiAgICAgLSBsZW5ndGggKGluIGJ5dGVzKSBvZiBTQ1NJIGNvbW1hbmQKKyAgICBzY19kYXRhX2RpcmVjdGlvbiAtIGRpcmVjdGlvbiBvZiBkYXRhIHRyYW5zZmVyIGluIGRhdGEgcGhhc2UuIFNlZQorICAgICAgICAgICAgICAgICJlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiIgaW4gaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCisgICAgcmVxdWVzdF9idWZmbGVuIC0gbnVtYmVyIG9mIGRhdGEgYnl0ZXMgdG8gdHJhbnNmZXIgKDAgaWYgbm8gZGF0YSBwaGFzZSkKKyAgICB1c2Vfc2cgICAgICAgLSA9PTAgLT4gbm8gc2NhdHRlciBnYXRoZXIgbGlzdCwgaGVuY2UgdHJhbnNmZXIgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICB0by9mcm9tIHJlcXVlc3RfYnVmZmVyCisgICAgICAgICAgICAgICAgIC0gPjAgLT4gIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgKGFjdHVhbGx5IGFuIGFycmF5KSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2J1ZmZlciB3aXRoIHVzZV9zZyBlbGVtZW50cworICAgIHJlcXVlc3RfYnVmZmVyIC0gZWl0aGVyIGNvbnRhaW5zIGRhdGEgYnVmZmVyIG9yIHNjYXR0ZXIgZ2F0aGVyIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgc2V0dGluZyBvZiB1c2Vfc2cuIFNjYXR0ZXIgZ2F0aGVyCisgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyBhcmUgZGVmaW5lZCBieSAnc3RydWN0IHNjYXR0ZXJsaXN0JyBmb3VuZAorICAgICAgICAgICAgICAgICAgICAgaW4gaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCAuCisgICAgZG9uZSAgICAgICAgIC0gZnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBiZSBpbnZva2VkIGJ5IExMRCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgIFNDU0kgY29tbWFuZCBpcyBjb21wbGV0ZWQgKHN1Y2Nlc3NmdWxseSBvciBvdGhlcndpc2UpLgorICAgICAgICAgICAgICAgICAgIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSBhbiBMTEQgaWYgdGhlIExMRCBoYXMgYWNjZXB0ZWQKKyAgICAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCAoaS5lLiBxdWV1ZWNvbW1hbmQoKSByZXR1cm5lZCBvciB3aWxsIHJldHVybgorICAgICAgICAgICAgICAgICAgIDApLiBUaGUgTExEIG1heSBpbnZva2UgJ2RvbmUnICBwcmlvciB0byBxdWV1ZWNvbW1hbmQoKQorICAgICAgICAgICAgICAgICAgIGZpbmlzaGluZy4KKyAgICByZXN1bHQgICAgICAgLSBzaG91bGQgYmUgc2V0IGJ5IExMRCBwcmlvciB0byBjYWxsaW5nICdkb25lJy4gQSB2YWx1ZQorICAgICAgICAgICAgICAgICAgIG9mIDAgaW1wbGllcyBhIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgY29tbWFuZCAoYW5kIGFsbAorICAgICAgICAgICAgICAgICAgIGRhdGEgKGlmIGFueSkgaGFzIGJlZW4gdHJhbnNmZXJyZWQgdG8gb3IgZnJvbSB0aGUgU0NTSQorICAgICAgICAgICAgICAgICAgIHRhcmdldCBkZXZpY2UpLiAncmVzdWx0JyBpcyBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQKKyAgICAgICAgICAgICAgICAgICBjYW4gYmUgdmlld2VkIGFzIDQgcmVsYXRlZCBieXRlcy4gVGhlIFNDU0kgc3RhdHVzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgaW4gdGhlIExTQi4gU2VlIGluY2x1ZGUvc2NzaS9zY3NpLmggc3RhdHVzX2J5dGUoKSwKKyAgICAgICAgICAgICAgICAgICBtc2dfYnl0ZSgpLCBob3N0X2J5dGUoKSBhbmQgZHJpdmVyX2J5dGUoKSBtYWNyb3MgYW5kCisgICAgICAgICAgICAgICAgICAgcmVsYXRlZCBjb25zdGFudHMuCisgICAgc2Vuc2VfYnVmZmVyIC0gYW4gYXJyYXkgKG1heGltdW0gc2l6ZTogU0NTSV9TRU5TRV9CVUZGRVJTSVpFIGJ5dGVzKSB0aGF0CisgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHdyaXR0ZW4gd2hlbiB0aGUgU0NTSSBzdGF0dXMgKExTQiBvZiAncmVzdWx0JykKKyAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gQ0hFQ0tfQ09ORElUSU9OICgyKS4gV2hlbiBDSEVDS19DT05ESVRJT04gaXMKKyAgICAgICAgICAgICAgICAgICBzZXQsIGlmIHRoZSB0b3AgbmliYmxlIG9mIHNlbnNlX2J1ZmZlclswXSBoYXMgdGhlIHZhbHVlIDcKKyAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSBtaWQgbGV2ZWwgd2lsbCBhc3N1bWUgdGhlIHNlbnNlX2J1ZmZlciBhcnJheQorICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEgdmFsaWQgU0NTSSBzZW5zZSBidWZmZXI7IG90aGVyd2lzZSB0aGUgbWlkCisgICAgICAgICAgICAgICAgICAgbGV2ZWwgd2lsbCBpc3N1ZSBhIFJFUVVFU1RfU0VOU0UgU0NTSSBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgICAgcmV0cmlldmUgdGhlIHNlbnNlIGJ1ZmZlci4gVGhlIGxhdHRlciBzdHJhdGVneSBpcyBlcnJvcgorICAgICAgICAgICAgICAgICAgIHByb25lIGluIHRoZSBwcmVzZW5jZSBvZiBjb21tYW5kIHF1ZXVpbmcgc28gdGhlIExMRCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICBhbHdheXMgImF1dG8tc2Vuc2UiLgorICAgIGRldmljZSAgICAgICAtIHBvaW50ZXIgdG8gc2NzaV9kZXZpY2Ugb2JqZWN0IHRoYXQgdGhpcyBjb21tYW5kIGlzCisgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoLgorICAgIHJlc2lkICAgICAgICAtIGFuIExMRCBzaG91bGQgc2V0IHRoaXMgc2lnbmVkIGludGVnZXIgdG8gdGhlIHJlcXVlc3RlZAorICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIGxlbmd0aCAoaS5lLiAncmVxdWVzdF9idWZmbGVuJykgbGVzcyB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgb2YgYnl0ZXMgdGhhdCBhcmUgYWN0dWFsbHkgdHJhbnNmZXJyZWQuICdyZXNpZCcgaXMKKyAgICAgICAgICAgICAgICAgICBwcmVzZXQgdG8gMCBzbyBhbiBMTEQgY2FuIGlnbm9yZSBpdCBpZiBpdCBjYW5ub3QgZGV0ZWN0CisgICAgICAgICAgICAgICAgICAgdW5kZXJydW5zIChvdmVycnVucyBzaG91bGQgYmUgcmFyZSkuIElmIHBvc3NpYmxlIGFuIExMRAorICAgICAgICAgICAgICAgICAgIHNob3VsZCBzZXQgJ3Jlc2lkJyBwcmlvciB0byBpbnZva2luZyAnZG9uZScuIFRoZSBtb3N0CisgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmcgY2FzZSBpcyBkYXRhIHRyYW5zZmVycyBmcm9tIGEgU0NTSSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICBkZXZpY2UgZGV2aWNlIChpLmUuIFJFQURzKSB0aGF0IHVuZGVycnVuLiAKKyAgICB1bmRlcmZsb3cgICAgLSBMTEQgc2hvdWxkIHBsYWNlIChESURfRVJST1IgPDwgMTYpIGluICdyZXN1bHQnIGlmCisgICAgICAgICAgICAgICAgICAgYWN0dWFsIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpcyBsZXNzIHRoYW4gdGhpcworICAgICAgICAgICAgICAgICAgIGZpZ3VyZS4gTm90IG1hbnkgTExEcyBpbXBsZW1lbnQgdGhpcyBjaGVjayBhbmQgc29tZSB0aGF0CisgICAgICAgICAgICAgICAgICAgZG8ganVzdCBvdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbG9nIHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgcmVwb3J0IGEgRElEX0VSUk9SLiBCZXR0ZXIgZm9yIGFuIExMRCB0byBpbXBsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAncmVzaWQnLgorCitUaGUgc2NzaV9jbW5kIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIGluY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAorCisKK0xvY2tzCis9PT09PQorRWFjaCBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlIGhhcyBhIHNwaW5fbG9jayBjYWxsZWQgc3RydWN0IAorU2NzaV9Ib3N0OjpkZWZhdWx0X2xvY2sgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgaW4gc2NzaV9ob3N0X2FsbG9jKCkgW2ZvdW5kIGluIAoraG9zdHMuY10uIFdpdGhpbiB0aGUgc2FtZSBmdW5jdGlvbiB0aGUgc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIHBvaW50ZXIKK2lzIGluaXRpYWxpemVkIHRvIHBvaW50IGF0IGRlZmF1bHRfbG9jayB3aXRoIHRoZSBzY3NpX2Fzc2lnbl9sb2NrKCkgZnVuY3Rpb24uCitUaGVyZWFmdGVyIGxvY2sgYW5kIHVubG9jayBvcGVyYXRpb25zIHBlcmZvcm1lZCBieSB0aGUgbWlkIGxldmVsIHVzZSB0aGUKK3N0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBwb2ludGVyLgorCitMTERzIGNhbiBvdmVycmlkZSB0aGUgdXNlIG9mIHN0cnVjdCBTY3NpX0hvc3Q6OmRlZmF1bHRfbG9jayBieQordXNpbmcgc2NzaV9hc3NpZ25fbG9jaygpLiBUaGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkgdG8gZG8gdGhpcyB3b3VsZAorYmUgaW4gdGhlIGRldGVjdCgpIGZ1bmN0aW9uIGFmdGVyIGl0IGhhcyBpbnZva2VkIHNjc2lfcmVnaXN0ZXIoKS4gSXQKK2NvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgY29hcnNlciBncmFpbiBsb2NrIChlLmcuIHBlciBkcml2ZXIpIG9yIGEKK2xvY2sgb2YgZXF1YWwgZ3JhbnVsYXJpdHkgKGkuZS4gcGVyIGhvc3QpLiBVc2luZyBmaW5lciBncmFpbiBsb2NrcyAKKyhlLmcuIHBlciBTQ1NJIGRldmljZSkgbWF5IGJlIHBvc3NpYmxlIGJ5IGp1Z2dsaW5nIGxvY2tzIGluCitxdWV1ZWNvbW1hbmQoKS4KKworQXV0b3NlbnNlCis9PT09PT09PT0KK0F1dG9zZW5zZSAob3IgYXV0by1zZW5zZSkgaXMgZGVmaW5lZCBpbiB0aGUgU0FNLTIgZG9jdW1lbnQgYXMgInRoZQorYXV0b21hdGljIHJldHVybiBvZiBzZW5zZSBkYXRhIHRvIHRoZSBhcHBsaWNhdGlvbiBjbGllbnQgY29pbmNpZGVudAord2l0aCB0aGUgY29tcGxldGlvbiBvZiBhIFNDU0kgY29tbWFuZCIgd2hlbiBhIHN0YXR1cyBvZiBDSEVDSyBDT05ESVRJT04KK29jY3Vycy4gTExEcyBzaG91bGQgcGVyZm9ybSBhdXRvc2Vuc2UuIFRoaXMgc2hvdWxkIGJlIGRvbmUgd2hlbiB0aGUgTExECitkZXRlY3RzIGEgQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cyBieSBlaXRoZXI6IAorICAgIGEpIGluc3RydWN0aW5nIHRoZSBTQ1NJIHByb3RvY29sIChlLmcuIFNDU0kgUGFyYWxsZWwgSW50ZXJmYWNlIChTUEkpKQorICAgICAgIHRvIHBlcmZvcm0gYW4gZXh0cmEgZGF0YSBpbiBwaGFzZSBvbiBzdWNoIHJlc3BvbnNlcworICAgIGIpIG9yLCB0aGUgTExEIGlzc3VpbmcgYSBSRVFVRVNUIFNFTlNFIGNvbW1hbmQgaXRzZWxmCisKK0VpdGhlciB3YXksIHdoZW4gYSBzdGF0dXMgb2YgQ0hFQ0sgQ09ORElUSU9OIGlzIGRldGVjdGVkLCB0aGUgbWlkIGxldmVsCitkZWNpZGVzIHdoZXRoZXIgdGhlIExMRCBoYXMgcGVyZm9ybWVkIGF1dG9zZW5zZSBieSBjaGVja2luZyBzdHJ1Y3QgCitzY3NpX2NtbmQ6OnNlbnNlX2J1ZmZlclswXSAuIElmIHRoaXMgYnl0ZSBoYXMgYW4gdXBwZXIgbmliYmxlIG9mIDcgKG9yIDB4ZikKK3RoZW4gYXV0b3NlbnNlIGlzIGFzc3VtZWQgdG8gaGF2ZSB0YWtlbiBwbGFjZS4gSWYgaXQgaGFzIGFub3RoZXIgdmFsdWUgKGFuZAordGhpcyBieXRlIGlzIGluaXRpYWxpemVkIHRvIDAgYmVmb3JlIGVhY2ggY29tbWFuZCkgdGhlbiB0aGUgbWlkIGxldmVsIHdpbGwKK2lzc3VlIGEgUkVRVUVTVCBTRU5TRSBjb21tYW5kLgorCitJbiB0aGUgcHJlc2VuY2Ugb2YgcXVldWVkIGNvbW1hbmRzIHRoZSAibmV4dXMiIHRoYXQgbWFpbnRhaW5zIHNlbnNlCitidWZmZXIgZGF0YSBmcm9tIHRoZSBjb21tYW5kIHRoYXQgZmFpbGVkIHVudGlsIGEgZm9sbG93aW5nIFJFUVVFU1QgU0VOU0UKK21heSBnZXQgb3V0IG9mIHN5bmNocm9uaXphdGlvbi4gVGhpcyBpcyB3aHkgaXQgaXMgYmVzdCBmb3IgdGhlIExMRAordG8gcGVyZm9ybSBhdXRvc2Vuc2UuCisKKworQ2hhbmdlcyBzaW5jZSBsayAyLjQgc2VyaWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2lvX3JlcXVlc3RfbG9jayBoYXMgYmVlbiByZXBsYWNlZCBieSBzZXZlcmFsIGZpbmVyIGdyYWluZWQgbG9ja3MuIFRoZSBsb2NrIAorcmVsZXZhbnQgdG8gTExEcyBpcyBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgYW5kIHRoZXJlIGlzCitvbmUgcGVyIFNDU0kgaG9zdC4KKworVGhlIG9sZGVyIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbSBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIG1lYW5zIHRoZQorTExEIGludGVyZmFjZSBmdW5jdGlvbnMgYWJvcnQoKSBhbmQgcmVzZXQoKSBoYXZlIGJlZW4gcmVtb3ZlZC4KK1RoZSBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlOjp1c2VfbmV3X2VoX2NvZGUgZmxhZyBoYXMgYmVlbiByZW1vdmVkLgorCitJbiB0aGUgMi40IHNlcmllcyB0aGUgU0NTSSBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiBkZXNjcmlwdGlvbnMgd2VyZSAKK2FnZ3JlZ2F0ZWQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBkZXNjcmlwdGlvbnMgZnJvbSBhbGwgb3RoZXIgTGludXggCitzdWJzeXN0ZW1zIGluIHRoZSBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwIGZpbGUuIEluIHRoZSAyLjYgc2VyaWVzLCAKK3RoZSBTQ1NJIHN1YnN5c3RlbSBub3cgaGFzIGl0cyBvd24gKG11Y2ggc21hbGxlcikgZHJpdmVycy9zY3NpL0tjb25maWcKK2ZpbGUgdGhhdCBjb250YWlucyBib3RoIGNvbmZpZ3VyYXRpb24gYW5kIGhlbHAgaW5mb3JtYXRpb24uCisKK3N0cnVjdCBTSFQgaGFzIGJlZW4gcmVuYW1lZCB0byBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlLgorCitBZGRpdGlvbiBvZiB0aGUgImhvdHBsdWcgaW5pdGlhbGl6YXRpb24gbW9kZWwiIGFuZCBtYW55IGV4dHJhIGZ1bmN0aW9ucwordG8gc3VwcG9ydCBpdC4KKworCitDcmVkaXRzCis9PT09PT09CitUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoaXMgZG9jdW1lbnQ6CisgICAgICAgIE1pa2UgQW5kZXJzb24gPGFuZG1pa2UgYXQgdXMgZG90IGlibSBkb3QgY29tPgorICAgICAgICBKYW1lcyBCb3R0b21sZXkgPEphbWVzIGRvdCBCb3R0b21sZXkgYXQgc3RlZWxleWUgZG90IGNvbT4gCisgICAgICAgIFBhdHJpY2sgTWFuc2ZpZWxkIDxwYXRtYW5zIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4gCisgICAgICAgIENocmlzdG9waCBIZWxsd2lnIDxoY2ggYXQgaW5mcmFkZWFkIGRvdCBvcmc+CisgICAgICAgIERvdWcgTGVkZm9yZCA8ZGxlZGZvcmQgYXQgcmVkaGF0IGRvdCBjb20+CisgICAgICAgIEFuZHJpZXMgQnJvdXdlciA8QW5kcmllcyBkb3QgQnJvdXdlciBhdCBjd2kgZG90IG5sPgorICAgICAgICBSYW5keSBEdW5sYXAgPHJkZHVubGFwIGF0IG9zZGwgZG90IG9yZz4KKyAgICAgICAgQWxhbiBTdGVybiA8c3Rlcm4gYXQgcm93bGFuZCBkb3QgaGFydmFyZCBkb3QgZWR1PgorCisKK0RvdWdsYXMgR2lsYmVydAorZGdpbGJlcnQgYXQgaW50ZXJsb2cgZG90IGNvbQorMjFzdCBTZXB0ZW1iZXIgMjAwNApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlMzBjZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQKQEAgLTAsMCArMSw0OTkgQEAKK1RoaXMgZmlsZSBjb250YWlucyBicmllZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgU0NTSSB0YXBlIGRyaXZlci4KK1RoZSBkcml2ZXIgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgS2FpIE3ka2lzYXJhIChlbWFpbAorS2FpLk1ha2lzYXJhQGtvbHVtYnVzLmZpKQorCitMYXN0IG1vZGlmaWVkOiBNb24gTWFyICA3IDIxOjE0OjQ0IDIwMDUgYnkga2FpLm1ha2lzYXJhCisKKworQkFTSUNTCisKK1RoZSBkcml2ZXIgaXMgZ2VuZXJpYywgaS5lLiwgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgY29kZSB0YWlsb3JlZAordG8gYW55IHNwZWNpZmljIHRhcGUgZHJpdmUuIFRoZSB0YXBlIHBhcmFtZXRlcnMgY2FuIGJlIHNwZWNpZmllZCB3aXRoCitvbmUgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzOgorCisxLiBFYWNoIHVzZXIgY2FuIHNwZWNpZnkgdGhlIHRhcGUgcGFyYW1ldGVycyBoZS9zaGUgd2FudHMgdG8gdXNlCitkaXJlY3RseSB3aXRoIGlvY3Rscy4gVGhpcyBpcyBhZG1pbmlzdHJhdGl2ZWx5IGEgdmVyeSBzaW1wbGUgYW5kCitmbGV4aWJsZSBtZXRob2QgYW5kIGFwcGxpY2FibGUgdG8gc2luZ2xlLXVzZXIgd29ya3N0YXRpb25zLiBIb3dldmVyLAoraW4gYSBtdWx0aXVzZXIgZW52aXJvbm1lbnQgdGhlIG5leHQgdXNlciBmaW5kcyB0aGUgdGFwZSBwYXJhbWV0ZXJzIGluCitzdGF0ZSB0aGUgcHJldmlvdXMgdXNlciBsZWZ0IHRoZW0uCisKKzIuIFRoZSBzeXN0ZW0gbWFuYWdlciAocm9vdCkgY2FuIGRlZmluZSBkZWZhdWx0IHZhbHVlcyBmb3Igc29tZSB0YXBlCitwYXJhbWV0ZXJzLCBsaWtlIGJsb2NrIHNpemUgYW5kIGRlbnNpdHkgdXNpbmcgdGhlIE1UU0VURFJWQlVGRkVSIGlvY3RsLgorVGhlc2UgcGFyYW1ldGVycyBjYW4gYmUgcHJvZ3JhbW1lZCB0byBjb21lIGludG8gZWZmZWN0IGVpdGhlciB3aGVuIGEKK25ldyB0YXBlIGlzIGxvYWRlZCBpbnRvIHRoZSBkcml2ZSBvciBpZiB3cml0aW5nIGJlZ2lucyBhdCB0aGUKK2JlZ2lubmluZyBvZiB0aGUgdGFwZS4gVGhlIHNlY29uZCBtZXRob2QgaXMgYXBwbGljYWJsZSBpZiB0aGUgdGFwZQorZHJpdmUgcGVyZm9ybXMgYXV0by1kZXRlY3Rpb24gb2YgdGhlIHRhcGUgZm9ybWF0IHdlbGwgKGxpa2Ugc29tZQorUUlDLWRyaXZlcykuIFRoZSByZXN1bHQgaXMgdGhhdCBhbnkgdGFwZSBjYW4gYmUgcmVhZCwgd3JpdGluZyBjYW4gYmUKK2NvbnRpbnVlZCB1c2luZyBleGlzdGluZyBmb3JtYXQsIGFuZCB0aGUgZGVmYXVsdCBmb3JtYXQgaXMgdXNlZCBpZgordGhlIHRhcGUgaXMgcmV3cml0dGVuIGZyb20gdGhlIGJlZ2lubmluZyAob3IgYSBuZXcgdGFwZSBpcyB3cml0dGVuCitmb3IgdGhlIGZpcnN0IHRpbWUpLiBUaGUgZmlyc3QgbWV0aG9kIGlzIGFwcGxpY2FibGUgaWYgdGhlIGRyaXZlCitkb2VzIG5vdCBwZXJmb3JtIGF1dG8tZGV0ZWN0aW9uIHdlbGwgZW5vdWdoIGFuZCB0aGVyZSBpcyBhIHNpbmdsZQorInNlbnNpYmxlIiBtb2RlIGZvciB0aGUgZGV2aWNlLiBBbiBleGFtcGxlIGlzIGEgREFUIGRyaXZlIHRoYXQgaXMKK3VzZWQgb25seSBpbiB2YXJpYWJsZSBibG9jayBtb2RlIChJIGRvbid0IGtub3cgaWYgdGhpcyBpcyBzZW5zaWJsZQorb3Igbm90IDotKS4KKworVGhlIHVzZXIgY2FuIG92ZXJyaWRlIHRoZSBwYXJhbWV0ZXJzIGRlZmluZWQgYnkgdGhlIHN5c3RlbQorbWFuYWdlci4gVGhlIGNoYW5nZXMgcGVyc2lzdCB1bnRpbCB0aGUgZGVmYXVsdHMgYWdhaW4gY29tZSBpbnRvCitlZmZlY3QuCisKKzMuIEJ5IGRlZmF1bHQsIHVwIHRvIGZvdXIgbW9kZXMgY2FuIGJlIGRlZmluZWQgYW5kIHNlbGVjdGVkIHVzaW5nIHRoZSBtaW5vcgorbnVtYmVyIChiaXRzIDUgYW5kIDYpLiBUaGUgbnVtYmVyIG9mIG1vZGVzIGNhbiBiZSBjaGFuZ2VkIGJ5IGNoYW5naW5nCitTVF9OQlJfTU9ERV9CSVRTIGluIHN0LmguIE1vZGUgMCBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVsdHMgZGlzY3Vzc2VkCithYm92ZS4gQWRkaXRpb25hbCBtb2RlcyBhcmUgZG9ybWFudCB1bnRpbCB0aGV5IGFyZSBkZWZpbmVkIGJ5IHRoZQorc3lzdGVtIG1hbmFnZXIgKHJvb3QpLiBXaGVuIHNwZWNpZmljYXRpb24gb2YgYSBuZXcgbW9kZSBpcyBzdGFydGVkLAordGhlIGNvbmZpZ3VyYXRpb24gb2YgbW9kZSAwIGlzIHVzZWQgdG8gcHJvdmlkZSBhIHN0YXJ0aW5nIHBvaW50IGZvcgorZGVmaW5pdGlvbiBvZiB0aGUgbmV3IG1vZGUuCisKK1VzaW5nIHRoZSBtb2RlcyBhbGxvd3MgdGhlIHN5c3RlbSBtYW5hZ2VyIHRvIGdpdmUgdGhlIHVzZXJzIGNob2ljZXMKK292ZXIgc29tZSBvZiB0aGUgYnVmZmVyaW5nIHBhcmFtZXRlcnMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgdG8gdGhlCit1c2VycyAoYnVmZmVyZWQgYW5kIGFzeW5jaHJvbm91cyB3cml0ZXMpLiBUaGUgbW9kZXMgYWxzbyBhbGxvdyBjaG9pY2VzCitiZXR3ZWVuIGZvcm1hdHMgaW4gbXVsdGktdGFwZSBvcGVyYXRpb25zICh0aGUgZXhwbGljaXRseSBvdmVycmlkZGVuCitwYXJhbWV0ZXJzIGFyZSByZXNldCB3aGVuIGEgbmV3IHRhcGUgaXMgbG9hZGVkKS4KKworSWYgbW9yZSB0aGFuIG9uZSBtb2RlIGlzIHVzZWQsIGFsbCBtb2RlcyBzaG91bGQgY29udGFpbiBkZWZpbml0aW9ucworZm9yIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzLgorCitNYW55IFVuaWNlcyBjb250YWluIGludGVybmFsIHRhYmxlcyB0aGF0IGFzc29jaWF0ZSBkaWZmZXJlbnQgbW9kZXMgdG8KK3N1cHBvcnRlZCBkZXZpY2VzLiBUaGUgTGludXggU0NTSSB0YXBlIGRyaXZlciBkb2VzIG5vdCBjb250YWluIHN1Y2gKK3RhYmxlcyAoYW5kIHdpbGwgbm90IGRvIHRoYXQgaW4gZnV0dXJlKS4gSW5zdGVhZCBvZiB0aGF0LCBhIHV0aWxpdHkKK3Byb2dyYW0gY2FuIGJlIG1hZGUgdGhhdCBmZXRjaGVzIHRoZSBpbnF1aXJ5IGRhdGEgc2VudCBieSB0aGUgZGV2aWNlLAorc2NhbnMgaXRzIGRhdGFiYXNlLCBhbmQgc2V0cyB1cCB0aGUgbW9kZXMgdXNpbmcgdGhlIGlvY3Rscy4gQW5vdGhlcgorYWx0ZXJuYXRpdmUgaXMgdG8gbWFrZSBhIHNtYWxsIHNjcmlwdCB0aGF0IHVzZXMgbXQgdG8gc2V0IHRoZSBkZWZhdWx0cwordGFpbG9yZWQgdG8gdGhlIHN5c3RlbS4KKworVGhlIGRyaXZlciBzdXBwb3J0cyBmaXhlZCBhbmQgdmFyaWFibGUgYmxvY2sgc2l6ZSAod2l0aGluIGJ1ZmZlcgorbGltaXRzKS4gQm90aCB0aGUgYXV0by1yZXdpbmQgKG1pbm9yIGVxdWFscyBkZXZpY2UgbnVtYmVyKSBhbmQKK25vbi1yZXdpbmQgZGV2aWNlcyAobWlub3IgaXMgMTI4ICsgZGV2aWNlIG51bWJlcikgYXJlIGltcGxlbWVudGVkLgorCitJbiB2YXJpYWJsZSBibG9jayBtb2RlLCB0aGUgYnl0ZSBjb3VudCBpbiB3cml0ZSgpIGRldGVybWluZXMgdGhlIHNpemUKK29mIHRoZSBwaHlzaWNhbCBibG9jayBvbiB0YXBlLiBXaGVuIHJlYWRpbmcsIHRoZSBkcml2ZSByZWFkcyB0aGUgbmV4dAordGFwZSBibG9jayBhbmQgcmV0dXJucyB0byB0aGUgdXNlciB0aGUgZGF0YSBpZiB0aGUgcmVhZCgpIGJ5dGUgY291bnQKK2lzIGF0IGxlYXN0IHRoZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGVycm9yIEVOT01FTSBpcyByZXR1cm5lZC4KKworSW4gZml4ZWQgYmxvY2sgbW9kZSwgdGhlIGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB0aGUgZHJpdmUgYW5kIHRoZQorZHJpdmVyIGlzIGluIG11bHRpcGxlcyBvZiB0aGUgYmxvY2sgc2l6ZS4gVGhlIHdyaXRlKCkgYnl0ZSBjb3VudCBtdXN0CitiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIG5vdCByZXF1aXJlZCB3aGVuIHJlYWRpbmcgYnV0CittYXkgYmUgYWR2aXNhYmxlIGZvciBwb3J0YWJpbGl0eS4KKworU3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgY2hhbmdpbmcgdGhlIHRhcGUgcGFydGl0aW9uIGFuZCBwYXJ0aXRpb25pbmcKK29mIHRoZSB0YXBlIHdpdGggb25lIG9yIHR3byBwYXJ0aXRpb25zLiBCeSBkZWZhdWx0IHN1cHBvcnQgZm9yCitwYXJ0aXRpb25lZCB0YXBlIGlzIGRpc2FibGVkIGZvciBlYWNoIGRyaXZlciBhbmQgaXQgY2FuIGJlIGVuYWJsZWQKK3dpdGggdGhlIGlvY3RsIE1UU0VURFJWQlVGRkVSLgorCitCeSBkZWZhdWx0IHRoZSBkcml2ZXIgd3JpdGVzIG9uZSBmaWxlbWFyayB3aGVuIHRoZSBkZXZpY2UgaXMgY2xvc2VkIGFmdGVyCit3cml0aW5nIGFuZCB0aGUgbGFzdCBvcGVyYXRpb24gaGFzIGJlZW4gYSB3cml0ZS4gVHdvIGZpbGVtYXJrcyBjYW4gYmUKK29wdGlvbmFsbHkgd3JpdHRlbi4gSW4gYm90aCBjYXNlcyBlbmQgb2YgZGF0YSBpcyBzaWduaWZpZWQgYnkKK3JldHVybmluZyB6ZXJvIGJ5dGVzIGZvciB0d28gY29uc2VjdXRpdmUgcmVhZHMuCisKK0lmIHJld2luZCwgb2ZmbGluZSwgYnNmLCBvciBzZWVrIGlzIGRvbmUgYW5kIHByZXZpb3VzIHRhcGUgb3BlcmF0aW9uIHdhcword3JpdGUsIGEgZmlsZW1hcmsgaXMgd3JpdHRlbiBiZWZvcmUgbW92aW5nIHRhcGUuCisKK1RoZSBjb21waWxlIG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGZpbGUgbGludXgvZHJpdmVycy9zY3NpL3N0X29wdGlvbnMuaC4KKworNC4gSWYgdGhlIG9wZW4gb3B0aW9uIE9fTk9OQkxPQ0sgaXMgdXNlZCwgb3BlbiBzdWNjZWVkcyBldmVuIGlmIHRoZQorZHJpdmUgaXMgbm90IHJlYWR5LiBJZiBPX05PTkJMT0NLIGlzIG5vdCB1c2VkLCB0aGUgZHJpdmVyIHdhaXRzIGZvcgordGhlIGRyaXZlIHRvIGJlY29tZSByZWFkeS4gSWYgdGhpcyBkb2VzIG5vdCBoYXBwZW4gaW4gU1RfQkxPQ0tfU0VDT05EUworc2Vjb25kcywgb3BlbiBmYWlscyB3aXRoIHRoZSBlcnJubyB2YWx1ZSBFSU8uIFdpdGggT19OT05CTE9DSyB0aGUKK2RldmljZSBjYW4gYmUgb3BlbmVkIGZvciB3cml0aW5nIGV2ZW4gaWYgdGhlcmUgaXMgYSB3cml0ZSBwcm90ZWN0ZWQKK3RhcGUgaW4gdGhlIGRyaXZlIChjb21tYW5kcyB0cnlpbmcgdG8gd3JpdGUgc29tZXRoaW5nIHJldHVybiBlcnJvciBpZgorYXR0ZW1wdGVkKS4KKworCitNSU5PUiBOVU1CRVJTCisKK1RoZSB0YXBlIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgMTI4IGRyaXZlcyBieSBkZWZhdWx0LiBUaGlzIG51bWJlcgorY2FuIGJlIGluY3JlYXNlZCBieSBlZGl0aW5nIHN0LmggYW5kIHJlY29tcGlsaW5nIHRoZSBkcml2ZXIgaWYKK25lY2Vzc2FyeS4gVGhlIHVwcGVyIGxpbWl0IGlzIDJeMTcgZHJpdmVzIGlmIDQgbW9kZXMgZm9yIGVhY2ggZHJpdmUKK2FyZSB1c2VkLgorCitUaGUgbWlub3IgbnVtYmVycyBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcgYml0IGZpZWxkczoKKworZGV2X3VwcGVyIG5vbi1yZXcgbW9kZSBkZXYtbG93ZXIKKyAgMjAgLSAgOCAgICAgNyAgICA2IDUgIDQgICAgICAwCitUaGUgbm9uLXJld2luZCBiaXQgaXMgYWx3YXlzIGJpdCA3ICh0aGUgdXBwZXJtb3N0IGJpdCBpbiB0aGUgbG93ZXJtb3N0CitieXRlKS4gVGhlIGJpdHMgZGVmaW5pbmcgdGhlIG1vZGUgYXJlIGJlbG93IHRoZSBub24tcmV3aW5kIGJpdC4gVGhlCityZW1haW5pbmcgYml0cyBkZWZpbmUgdGhlIHRhcGUgZGV2aWNlIG51bWJlci4gVGhpcyBudW1iZXJpbmcgaXMKK2JhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCB0aGUgbnVtYmVyaW5nIHVzZWQgd2hlbiB0aGUgbWlub3IgbnVtYmVyIHdhcworb25seSA4IGJpdHMgd2lkZS4KKworCitTWVNGUyBTVVBQT1JUCisKK1RoZSBkcml2ZXIgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IC9zeXMvY2xhc3Mvc2NzaV90YXBlIGFuZCBwb3B1bGF0ZXMgaXQgd2l0aAorZGlyZWN0b3JpZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZXhpc3RpbmcgdGFwZSBkZXZpY2VzLiBUaGVyZSBhcmUgYXV0b3Jld2luZAorYW5kIG5vbi1yZXdpbmQgZW50cmllcyBmb3IgZWFjaCBtb2RlLiBUaGUgbmFtZXMgYXJlIHN0eHkgYW5kIG5zdHh5LCB3aGVyZSB4CitpcyB0aGUgdGFwZSBudW1iZXIgYW5kIHkgYSBjaGFyYWN0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgbW9kZSAobm9uZSwgbCwgbSwKK2EpLiBGb3IgZXhhbXBsZSwgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUgZmlyc3QgdGFwZSBkZXZpY2UgYXJlIChhc3N1bWluZyBmb3VyCittb2Rlcyk6IHN0MCAgbnN0MCAgc3QwbCAgbnN0MGwgIHN0MG0gIG5zdDBtICBzdDBhICBuc3QwYS4KKworRWFjaCBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGVudHJpZXM6IGRlZmF1bHRfYmxrc2l6ZSAgZGVmYXVsdF9jb21wcmVzc2lvbgorZGVmYXVsdF9kZW5zaXR5ICBkZWZpbmVkICBkZXYgIGRldmljZSAgZHJpdmVyLiBUaGUgZmlsZSAnZGVmaW5lZCcgY29udGFpbnMgMQoraWYgdGhlIG1vZGUgaXMgZGVmaW5lZCBhbmQgemVybyBpZiBub3QgZGVmaW5lZC4gVGhlIGZpbGVzICdkZWZhdWx0XyonIGNvbnRhaW4KK3RoZSBkZWZhdWx0cyBzZXQgYnkgdGhlIHVzZXIuIFRoZSB2YWx1ZSAtMSBtZWFucyB0aGUgZGVmYXVsdCBpcyBub3Qgc2V0LiBUaGUKK2ZpbGUgJ2RldicgY29udGFpbnMgdGhlIGRldmljZSBudW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBkZXZpY2UuIFRoZSBsaW5rcworJ2RldmljZScgYW5kICdkcml2ZXInIHBvaW50IHRvIHRoZSBTQ1NJIGRldmljZSBhbmQgZHJpdmVyIGVudHJpZXMuCisKK0EgbGluayBuYW1lZCAndGFwZScgaXMgbWFkZSBmcm9tIHRoZSBTQ1NJIGRldmljZSBkaXJlY3RvcnkgdG8gdGhlIGNsYXNzCitkaXJlY3RvcnkgY29ycmVzcG9uZGluZyB0byB0aGUgbW9kZSAwIGF1dG8tcmV3aW5kIGRldmljZSAoZS5nLiwgc3QwKS4gCisKKworQlNEIEFORCBTWVMgViBTRU1BTlRJQ1MKKworVGhlIHVzZXIgY2FuIGNob29zZSBiZXR3ZWVuIHRoZXNlIHR3byBiZWhhdmlvdXJzIG9mIHRoZSB0YXBlIGRyaXZlciBieQorZGVmaW5pbmcgdGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wgU1RfU1lTVi4gVGhlIHNlbWFudGljcyBkaWZmZXIgd2hlbiBhCitmaWxlIGJlaW5nIHJlYWQgaXMgY2xvc2VkLiBUaGUgQlNEIHNlbWFudGljcyBsZWF2ZXMgdGhlIHRhcGUgd2hlcmUgaXQKK2N1cnJlbnRseSBpcyB3aGVyZWFzIHRoZSBTWVMgViBzZW1hbnRpY3MgbW92ZXMgdGhlIHRhcGUgcGFzdCB0aGUgbmV4dAorZmlsZW1hcmsgdW5sZXNzIHRoZSBmaWxlbWFyayBoYXMganVzdCBiZWVuIGNyb3NzZWQuCisKK1RoZSBkZWZhdWx0IGlzIEJTRCBzZW1hbnRpY3MuCisKKworQlVGRkVSSU5HCisKK1RoZSBkcml2ZXIgdHJpZXMgdG8gZG8gdHJhbnNmZXJzIGRpcmVjdGx5IHRvL2Zyb20gdXNlciBzcGFjZS4gSWYgdGhpcworaXMgbm90IHBvc3NpYmxlLCBhIGRyaXZlciBidWZmZXIgYWxsb2NhdGVkIGF0IHJ1bi10aW1lIGlzIHVzZWQuIElmCitkaXJlY3QgaS9vIGlzIG5vdCBwb3NzaWJsZSBmb3IgdGhlIHdob2xlIHRyYW5zZmVyLCB0aGUgZHJpdmVyIGJ1ZmZlcgoraXMgdXNlZCAoaS5lLiwgYm91bmNlIGJ1ZmZlcnMgZm9yIGluZGl2aWR1YWwgcGFnZXMgYXJlIG5vdAordXNlZCkuIERpcmVjdCBpL28gY2FuIGJlIGltcG9zc2libGUgYmVjYXVzZSBvZiBzZXZlcmFsIHJlYXNvbnMsIGUuZy46CistIG9uZSBvciBtb3JlIHBhZ2VzIGFyZSBhdCBhZGRyZXNzZXMgbm90IHJlYWNoYWJsZSBieSB0aGUgSEJBCistIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHRyYW5zZmVyIGV4Y2VlZHMgdGhlIG51bWJlciBvZgorICBzY2F0dGVyL2dhdGhlciBzZWdtZW50cyBwZXJtaXR0ZWQgYnkgdGhlIEhCQQorLSBvbmUgb3IgbW9yZSBwYWdlcyBjYW4ndCBiZSBsb2NrZWQgaW50byBtZW1vcnkgKHNob3VsZCBub3QgaGFwcGVuIGluCisgIGFueSByZWFzb25hYmxlIHNpdHVhdGlvbikKKworVGhlIHNpemUgb2YgdGhlIGRyaXZlciBidWZmZXJzIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgdGFwZSBibG9jay4gSW4gZml4ZWQKK2Jsb2NrIG1vZGUsIHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIGlzIGRlZmluZWQgKGluIDEwMjQgYnl0ZSB1bml0cykgYnkKK1NUX0ZJWEVEX0JVRkZFUl9CTE9DS1MuIFdpdGggc21hbGwgYmxvY2sgc2l6ZSB0aGlzIGFsbG93cyBidWZmZXJpbmcgb2YKK3NldmVyYWwgYmxvY2tzIGFuZCB1c2luZyBvbmUgU0NTSSByZWFkIG9yIHdyaXRlIHRvIHRyYW5zZmVyIGFsbCBvZiB0aGUKK2Jsb2Nrcy4gQnVmZmVyaW5nIG9mIGRhdGEgYWNyb3NzIHdyaXRlIGNhbGxzIGluIGZpeGVkIGJsb2NrIG1vZGUgaXMKK2FsbG93ZWQgaWYgU1RfQlVGRkVSX1dSSVRFUyBpcyBub24temVybyBhbmQgZGlyZWN0IGkvbyBpcyBub3QgdXNlZC4KK0J1ZmZlciBhbGxvY2F0aW9uIHVzZXMgY2h1bmtzIG9mIG1lbW9yeSBoYXZpbmcgc2l6ZXMgMl5uICogKHBhZ2UKK3NpemUpLiBCZWNhdXNlIG9mIHRoaXMgdGhlIGFjdHVhbCBidWZmZXIgc2l6ZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlCittaW5pbXVtIGFsbG93YWJsZSBidWZmZXIgc2l6ZS4KKworTk9URSB0aGF0IGlmIGRpcmVjdCBpL28gaXMgdXNlZCwgdGhlIHNtYWxsIHdyaXRlcyBhcmUgbm90IGJ1ZmZlcmVkLiBUaGlzIG1heQorY2F1c2UgYSBzdXJwcmlzZSB3aGVuIG1vdmluZyBmcm9tIDIuNC4gVGhlcmUgc21hbGwgd3JpdGVzIChlLmcuLCB0YXIgd2l0aG91dAorLWIgb3B0aW9uKSBtYXkgaGF2ZSBoYWQgZ29vZCB0aHJvdWdocHV0IGJ1dCB0aGlzIGlzIG5vdCB0cnVlIGFueSBtb3JlIHdpdGgKKzIuNi4gRGlyZWN0IGkvbyBjYW4gYmUgdHVybmVkIG9mZiB0byBzb2x2ZSB0aGlzIHByb2JsZW0gYnV0IGEgYmV0dGVyIHNvbHV0aW9uCitpcyB0byB1c2UgYmlnZ2VyIHdyaXRlKCkgYnl0ZSBjb3VudHMgKGUuZy4sIHRhciAtYiA2NCkuCisKK0FzeW5jaHJvbm91cyB3cml0aW5nLiBXcml0aW5nIHRoZSBidWZmZXIgY29udGVudHMgdG8gdGhlIHRhcGUgaXMKK3N0YXJ0ZWQgYW5kIHRoZSB3cml0ZSBjYWxsIHJldHVybnMgaW1tZWRpYXRlbHkuIFRoZSBzdGF0dXMgaXMgY2hlY2tlZAorYXQgdGhlIG5leHQgdGFwZSBvcGVyYXRpb24uIEFzeW5jaHJvbm91cyB3cml0ZXMgYXJlIG5vdCBkb25lIHdpdGgKK2RpcmVjdCBpL28gYW5kIG5vdCBpbiBmaXhlZCBibG9jayBtb2RlLgorCitCdWZmZXJlZCB3cml0ZXMgYW5kIGFzeW5jaHJvbm91cyB3cml0ZXMgbWF5IGluIHNvbWUgcmFyZSBjYXNlcyBjYXVzZQorcHJvYmxlbXMgaW4gbXVsdGl2b2x1bWUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIG9uIHRoZQordGFwZSBhZnRlciB0aGUgZWFybHktd2FybmluZyBtYXJrIHRvIGZsdXNoIHRoZSBkcml2ZXIgYnVmZmVyLgorCitSZWFkIGFoZWFkIGZvciBmaXhlZCBibG9jayBtb2RlIChTVF9SRUFEX0FIRUFEKS4gRmlsbGluZyB0aGUgYnVmZmVyIGlzCithdHRlbXB0ZWQgZXZlbiBpZiB0aGUgdXNlciBkb2VzIG5vdCB3YW50IHRvIGdldCBhbGwgb2YgdGhlIGRhdGEgYXQKK3RoaXMgcmVhZCBjb21tYW5kLiBTaG91bGQgYmUgZGlzYWJsZWQgZm9yIHRob3NlIGRyaXZlcyB0aGF0IGRvbid0IGxpa2UKK2EgZmlsZW1hcmsgdG8gdHJ1bmNhdGUgYSByZWFkIHJlcXVlc3Qgb3IgdGhhdCBkb24ndCBsaWtlIGJhY2tzcGFjaW5nLgorCitTY2F0dGVyL2dhdGhlciBidWZmZXJzIChidWZmZXJzIHRoYXQgY29uc2lzdCBvZiBjaHVua3Mgbm9uLWNvbnRpZ3VvdXMKK2luIHRoZSBwaHlzaWNhbCBtZW1vcnkpIGFyZSB1c2VkIGlmIGNvbnRpZ3VvdXMgYnVmZmVycyBjYW4ndCBiZQorYWxsb2NhdGVkLiBUbyBzdXBwb3J0IGFsbCBTQ1NJIGFkYXB0ZXJzIChpbmNsdWRpbmcgdGhvc2Ugbm90CitzdXBwb3J0aW5nIHNjYXR0ZXIvZ2F0aGVyKSwgYnVmZmVyIGFsbG9jYXRpb24gaXMgdXNpbmcgdGhlIGZvbGxvd2luZwordGhyZWUga2luZHMgb2YgY2h1bmtzOgorMS4gVGhlIGluaXRpYWwgc2VnbWVudCB0aGF0IGlzIHVzZWQgZm9yIGFsbCBTQ1NJIGFkYXB0ZXJzIGluY2x1ZGluZwordGhvc2Ugbm90IHN1cHBvcnRpbmcgc2NhdHRlci9nYXRoZXIuIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIHdpbGwgYmUKKyhQQUdFX1NJWkUgPDwgU1RfRklSU1RfT1JERVIpIGJ5dGVzIGlmIHRoZSBzeXN0ZW0gY2FuIGdpdmUgYSBjaHVuayBvZgordGhpcyBzaXplIChhbmQgaXQgaXMgbm90IGxhcmdlciB0aGFuIHRoZSBidWZmZXIgc2l6ZSBzcGVjaWZpZWQgYnkKK1NUX0JVRkZFUl9CTE9DS1MpLiBJZiB0aGlzIHNpemUgaXMgbm90IGF2YWlsYWJsZSwgdGhlIGRyaXZlciBoYWx2ZXMKK3RoZSBzaXplIGFuZCB0cmllcyBhZ2FpbiB1bnRpbCB0aGUgc2l6ZSBvZiBvbmUgcGFnZS4gVGhlIGRlZmF1bHQKK3NldHRpbmdzIGluIHN0X29wdGlvbnMuaCBtYWtlIHRoZSBkcml2ZXIgdG8gdHJ5IHRvIGFsbG9jYXRlIGFsbCBvZiB0aGUKK2J1ZmZlciBhcyBvbmUgY2h1bmsuCisyLiBUaGUgc2NhdHRlci9nYXRoZXIgc2VnbWVudHMgdG8gZmlsbCB0aGUgc3BlY2lmaWVkIGJ1ZmZlciBzaXplIGFyZQorYWxsb2NhdGVkIHNvIHRoYXQgYXMgbWFueSBzZWdtZW50cyBhcyBwb3NzaWJsZSBhcmUgdXNlZCBidXQgdGhlIG51bWJlcgorb2Ygc2VnbWVudHMgZG9lcyBub3QgZXhjZWVkIFNUX0ZJUlNUX1NHLgorMy4gVGhlIHJlbWFpbmluZyBzZWdtZW50cyBiZXR3ZWVuIFNUX01BWF9TRyAob3IgdGhlIG1vZHVsZSBwYXJhbWV0ZXIKK21heF9zZ19zZWdzKSBhbmQgdGhlIG51bWJlciBvZiBzZWdtZW50cyB1c2VkIGluIHBoYXNlcyAxIGFuZCAyCithcmUgdXNlZCB0byBleHRlbmQgdGhlIGJ1ZmZlciBhdCBydW4tdGltZSBpZiB0aGlzIGlzIG5lY2Vzc2FyeS4gVGhlCitudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgc2VnbWVudHMgYWxsb3dlZCBmb3IgdGhlIFNDU0kgYWRhcHRlciBpcyBub3QKK2V4Y2VlZGVkIGlmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIKK3NlZ21lbnRzIHNwZWNpZmllZC4gSWYgdGhlIG1heGltdW0gbnVtYmVyIGFsbG93ZWQgZm9yIHRoZSBTQ1NJIGFkYXB0ZXIKK2lzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gcGhhc2VzIDEgYW5kIDIsCitleHRlbmRpbmcgdGhlIGJ1ZmZlciB3aWxsIGFsd2F5cyBmYWlsLgorCisKK0VPTSBCRUhBVklPVVIgV0hFTiBXUklUSU5HCisKK1doZW4gdGhlIGVuZCBvZiBtZWRpdW0gZWFybHkgd2FybmluZyBpcyBlbmNvdW50ZXJlZCwgdGhlIGN1cnJlbnQgd3JpdGUKK2lzIGZpbmlzaGVkIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlzIHJldHVybmVkLiBUaGUgbmV4dCB3cml0ZQorcmV0dXJucyAtMSBhbmQgZXJybm8gaXMgc2V0IHRvIEVOT1NQQy4gVG8gZW5hYmxlIHdyaXRpbmcgYSB0cmFpbGVyLAordGhlIG5leHQgd3JpdGUgaXMgYWxsb3dlZCB0byBwcm9jZWVkIGFuZCwgaWYgc3VjY2Vzc2Z1bCwgdGhlIG51bWJlciBvZgorYnl0ZXMgaXMgcmV0dXJuZWQuIEFmdGVyIHRoaXMsIC0xIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFyZQorYWx0ZXJuYXRlbHkgcmV0dXJuZWQgdW50aWwgdGhlIHBoeXNpY2FsIGVuZCBvZiBtZWRpdW0gKG9yIHNvbWUgb3RoZXIKK2Vycm9yKSBpcyBlbmNvdW50ZXJlZC4KKworCitNT0RVTEUgUEFSQU1FVEVSUworCitUaGUgYnVmZmVyIHNpemUsIHdyaXRlIHRocmVzaG9sZCwgYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhbGxvY2F0ZWQgYnVmZmVycworYXJlIGNvbmZpZ3VyYWJsZSB3aGVuIHRoZSBkcml2ZXIgaXMgbG9hZGVkIGFzIGEgbW9kdWxlLiBUaGUga2V5d29yZHMgYXJlOgorCitidWZmZXJfa2JzPXh4eCAgICAgICAgICAgICB0aGUgYnVmZmVyIHNpemUgZm9yIGZpeGVkIGJsb2NrIG1vZGUgaXMgc2V0CisJCQkgICB0byB4eHgga2lsb2J5dGVzCit3cml0ZV90aHJlc2hvbGRfa2JzPXh4eCAgICB0aGUgd3JpdGUgdGhyZXNob2xkIGluIGtpbG9ieXRlcyBzZXQgdG8geHh4CittYXhfc2dfc2Vncz14eHgJCSAgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlcgorCQkJICAgc2VnbWVudHMKK3RyeV9kaXJlY3RfaW89eAkJICAgdHJ5IGRpcmVjdCB0cmFuc2ZlciBiZXR3ZWVuIHVzZXIgYnVmZmVyIGFuZAorCQkJICAgdGFwZSBkcml2ZSBpZiB0aGlzIGlzIG5vbi16ZXJvCisKK05vdGUgdGhhdCBpZiB0aGUgYnVmZmVyIHNpemUgaXMgY2hhbmdlZCBidXQgdGhlIHdyaXRlIHRocmVzaG9sZCBpcyBub3QKK3NldCwgdGhlIHdyaXRlIHRocmVzaG9sZCBpcyBzZXQgdG8gdGhlIG5ldyBidWZmZXIgc2l6ZSAtIDIga0IuCisKKworQk9PVCBUSU1FIENPTkZJR1VSQVRJT04KKworSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHRoZSBzYW1lIHBhcmFtZXRlcnMgY2FuIGJlCithbHNvIHNldCB1c2luZywgZS5nLiwgdGhlIExJTE8gY29tbWFuZCBsaW5lLiBUaGUgcHJlZmVycmVkIHN5bnRheCBpcworaXMgdG8gdXNlIHRoZSBzYW1lIGtleXdvcmQgdXNlZCB3aGVuIGxvYWRpbmcgYXMgbW9kdWxlIGJ1dCBwcmVwZW5kZWQKK3dpdGggJ3N0LicuIEZvciBpbnN0YW5jZSwgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlcgorc2VnbWVudHMsIHRoZSBwYXJhbWV0ZXIgJ3N0Lm1heF9zZ19zZWdzPXh4JyBzaG91bGQgYmUgdXNlZCAoeHggaXMgdGhlCitudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgc2VnbWVudHMpLgorCitGb3IgY29tcGF0aWJpbGl0eSwgdGhlIG9sZCBzeW50YXggZnJvbSBlYXJseSAyLjUgYW5kIDIuNCBrZXJuZWwKK3ZlcnNpb25zIGlzIHN1cHBvcnRlZC4gVGhlIHNhbWUga2V5d29yZHMgY2FuIGJlIHVzZWQgYXMgd2hlbiBsb2FkaW5nCit0aGUgZHJpdmVyIGFzIG1vZHVsZS4gSWYgc2V2ZXJhbCBwYXJhbWV0ZXJzIGFyZSBzZXQsIHRoZSBrZXl3b3JkLXZhbHVlCitwYWlycyBhcmUgc2VwYXJhdGVkIHdpdGggYSBjb21tYSAobm8gc3BhY2VzIGFsbG93ZWQpLiBBIGNvbG9uIGNhbiBiZQordXNlZCBpbnN0ZWFkIG9mIHRoZSBlcXVhbCBtYXJrLiBUaGUgZGVmaW5pdGlvbiBpcyBwcmVwZW5kZWQgYnkgdGhlCitzdHJpbmcgc3Q9LiBIZXJlIGlzIGFuIGV4YW1wbGU6CisKKwlzdD1idWZmZXJfa2JzOjY0LHdyaXRlX3RocmVob2xkX2ticzo2MAorCitUaGUgZm9sbG93aW5nIHN5bnRheCB1c2VkIGJ5IHRoZSBvbGQga2VybmVsIHZlcnNpb25zIGlzIGFsc28gc3VwcG9ydGVkOgorCisgICAgICAgICAgIHN0PWFhWyxiYlssZGRdXQorCit3aGVyZQorICBhYSBpcyB0aGUgYnVmZmVyIHNpemUgZm9yIGZpeGVkIGJsb2NrIG1vZGUgaW4gMTAyNCBieXRlIHVuaXRzCisgIGJiIGlzIHRoZSB3cml0ZSB0aHJlc2hvbGQgaW4gMTAyNCBieXRlIHVuaXRzCisgIGRkIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlciBzZWdtZW50cworCisKK0lPQ1RMUworCitUaGUgdGFwZSBpcyBwb3NpdGlvbmVkIGFuZCB0aGUgZHJpdmUgcGFyYW1ldGVycyBhcmUgc2V0IHdpdGggaW9jdGxzCitkZWZpbmVkIGluIG10aW8uaCBUaGUgdGFwZSBjb250cm9sIHByb2dyYW0gJ210JyB1c2VzIHRoZXNlIGlvY3Rscy4gVHJ5Cit0byBmaW5kIGFuIG10IHRoYXQgc3VwcG9ydHMgYWxsIG9mIHRoZSBMaW51eCBTQ1NJIHRhcGUgaW9jdGxzIGFuZAorb3BlbnMgdGhlIGRldmljZSBmb3Igd3JpdGluZyBpZiB0aGUgdGFwZSBjb250ZW50cyB3aWxsIGJlIG1vZGlmaWVkCisobG9vayBmb3IgYSBwYWNrYWdlIG10LXN0KiBmcm9tIHRoZSBMaW51eCBmdHAgc2l0ZXM7IHRoZSBHTlUgbXQgZG9lcworbm90IG9wZW4gZm9yIHdyaXRpbmcgZm9yLCBlLmcuLCBlcmFzZSkuCisKK1RoZSBzdXBwb3J0ZWQgaW9jdGxzIGFyZToKKworVGhlIGZvbGxvd2luZyB1c2UgdGhlIHN0cnVjdHVyZSBtdG9wOgorCitNVEZTRiAgIFNwYWNlIGZvcndhcmQgb3ZlciBjb3VudCBmaWxlbWFya3MuIFRhcGUgcG9zaXRpb25lZCBhZnRlciBmaWxlbWFyay4KK01URlNGTSAgQXMgYWJvdmUgYnV0IHRhcGUgcG9zaXRpb25lZCBiZWZvcmUgZmlsZW1hcmsuCitNVEJTRglTcGFjZSBiYWNrd2FyZCBvdmVyIGNvdW50IGZpbGVtYXJrcy4gVGFwZSBwb3NpdGlvbmVkIGJlZm9yZQorICAgICAgICBmaWxlbWFyay4KK01UQlNGTSAgQXMgYWJvdmUgYnV0IGFwZSBwb3NpdGlvbmVkIGFmdGVyIGZpbGVtYXJrLgorTVRGU1IgICBTcGFjZSBmb3J3YXJkIG92ZXIgY291bnQgcmVjb3Jkcy4KK01UQlNSICAgU3BhY2UgYmFja3dhcmQgb3ZlciBjb3VudCByZWNvcmRzLgorTVRGU1MgICBTcGFjZSBmb3J3YXJkIG92ZXIgY291bnQgc2V0bWFya3MuCitNVEJTUyAgIFNwYWNlIGJhY2t3YXJkIG92ZXIgY291bnQgc2V0bWFya3MuCitNVFdFT0YgIFdyaXRlIGNvdW50IGZpbGVtYXJrcy4KK01UV1NNICAgV3JpdGUgY291bnQgc2V0bWFya3MuCitNVFJFVyAgIFJld2luZCB0YXBlLgorTVRPRkZMICBTZXQgZGV2aWNlIG9mZiBsaW5lIChvZnRlbiByZXdpbmQgcGx1cyBlamVjdCkuCitNVE5PUCAgIERvIG5vdGhpbmcgZXhjZXB0IGZsdXNoIHRoZSBidWZmZXJzLgorTVRSRVRFTiBSZS10ZW5zaW9uIHRhcGUuCitNVEVPTSAgIFNwYWNlIHRvIGVuZCBvZiByZWNvcmRlZCBkYXRhLgorTVRFUkFTRSBFcmFzZSB0YXBlLiBJZiB0aGUgYXJndW1lbnQgaXMgemVybywgdGhlIHNob3J0IGVyYXNlIGNvbW1hbmQKKwlpcyB1c2VkLiBUaGUgbG9uZyBlcmFzZSBjb21tYW5kIGlzIHVzZWQgd2l0aCBhbGwgb3RoZXIgdmFsdWVzCisJb2YgdGhlIGFyZ3VtZW50LgorTVRTRUVLCVNlZWsgdG8gdGFwZSBibG9jayBjb3VudC4gVXNlcyBUYW5kYmVyZy1jb21wYXRpYmxlIHNlZWsgKFFGQSkKKyAgICAgICAgZm9yIFNDU0ktMSBkcml2ZXMgYW5kIFNDU0ktMiBzZWVrIGZvciBTQ1NJLTIgZHJpdmVzLiBUaGUgZmlsZSBhbmQKKwlibG9jayBudW1iZXJzIGluIHRoZSBzdGF0dXMgYXJlIG5vdCB2YWxpZCBhZnRlciBhIHNlZWsuCitNVFNFVEJMSyBTZXQgdGhlIGRyaXZlIGJsb2NrIHNpemUuIFNldHRpbmcgdG8gemVybyBzZXRzIHRoZSBkcml2ZSBpbnRvCisgICAgICAgIHZhcmlhYmxlIGJsb2NrIG1vZGUgKGlmIGFwcGxpY2FibGUpLgorTVRTRVRERU5TSVRZIFNldHMgdGhlIGRyaXZlIGRlbnNpdHkgY29kZSB0byBhcmcuIFNlZSBkcml2ZQorICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBhdmFpbGFibGUgY29kZXMuCitNVExPQ0sgYW5kIE1UVU5MT0NLIEV4cGxpY2l0bHkgbG9jay91bmxvY2sgdGhlIHRhcGUgZHJpdmUgZG9vci4KK01UTE9BRCBhbmQgTVRVTkxPQUQgRXhwbGljaXRseSBsb2FkIGFuZCB1bmxvYWQgdGhlIHRhcGUuIElmIHRoZQorCWNvbW1hbmQgYXJndW1lbnQgeCBpcyBiZXR3ZWVuIE1UX1NUX0hQTE9BREVSX09GRlNFVCArIDEgYW5kCisJTVRfU1RfSFBMT0FERVJfT0ZGU0VUICsgNiwgdGhlIG51bWJlciB4IGlzIHVzZWQgc2VudCB0byB0aGUKKwlkcml2ZSB3aXRoIHRoZSBjb21tYW5kIGFuZCBpdCBzZWxlY3RzIHRoZSB0YXBlIHNsb3QgdG8gdXNlIG9mCisJSFAgQzE1NTNBIGNoYW5nZXIuCitNVENPTVBSRVNTSU9OIFNldHMgY29tcHJlc3Npbmcgb3IgdW5jb21wcmVzc2luZyBkcml2ZSBtb2RlIHVzaW5nIHRoZQorCVNDU0kgbW9kZSBwYWdlIDE1LiBOb3RlIHRoYXQgc29tZSBkcml2ZXMgb3RoZXIgbWV0aG9kcyBmb3IKKwljb250cm9sIG9mIGNvbXByZXNzaW9uLiBTb21lIGRyaXZlcyAobGlrZSB0aGUgRXhhYnl0ZXMpIHVzZQorCWRlbnNpdHkgY29kZXMgZm9yIGNvbXByZXNzaW9uIGNvbnRyb2wuIFNvbWUgZHJpdmVzIHVzZSBhbm90aGVyCisJbW9kZSBwYWdlIGJ1dCB0aGlzIHBhZ2UgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGluIHRoZQorCWRyaXZlci4gU29tZSBkcml2ZXMgd2l0aG91dCBjb21wcmVzc2lvbiBjYXBhYmlsaXR5IHdpbGwgYWNjZXB0CisJYW55IGNvbXByZXNzaW9uIG1vZGUgd2l0aG91dCBlcnJvci4KK01UU0VUUEFSVCBNb3ZlcyB0aGUgdGFwZSB0byB0aGUgcGFydGl0aW9uIGdpdmVuIGJ5IHRoZSBhcmd1bWVudCBhdCB0aGUKKwluZXh0IHRhcGUgb3BlcmF0aW9uLiBUaGUgYmxvY2sgYXQgd2hpY2ggdGhlIHRhcGUgaXMgcG9zaXRpb25lZAorCWlzIHRoZSBibG9jayB3aGVyZSB0aGUgdGFwZSB3YXMgcHJldmlvdXNseSBwb3NpdGlvbmVkIGluIHRoZQorCW5ldyBhY3RpdmUgcGFydGl0aW9uIHVubGVzcyB0aGUgbmV4dCB0YXBlIG9wZXJhdGlvbiBpcworCU1UU0VFSy4gSW4gdGhpcyBjYXNlIHRoZSB0YXBlIGlzIG1vdmVkIGRpcmVjdGx5IHRvIHRoZSBibG9jaworCXNwZWNpZmllZCBieSBNVFNFRUsuIE1UU0VUUEFSVCBpcyBpbmFjdGl2ZSB1bmxlc3MKKwlNVF9TVF9DQU5fUEFSVElUSU9OUyBzZXQuCitNVE1LUEFSVCBGb3JtYXRzIHRoZSB0YXBlIHdpdGggb25lIHBhcnRpdGlvbiAoYXJndW1lbnQgemVybykgb3IgdHdvCisJcGFydGl0aW9ucyAodGhlIGFyZ3VtZW50IGdpdmVzIGluIG1lZ2FieXRlcyB0aGUgc2l6ZSBvZgorCXBhcnRpdGlvbiAxIHRoYXQgaXMgcGh5c2ljYWxseSB0aGUgZmlyc3QgcGFydGl0aW9uIG9mIHRoZQorCXRhcGUpLiBUaGUgZHJpdmUgaGFzIHRvIHN1cHBvcnQgcGFydGl0aW9ucyB3aXRoIHNpemUgc3BlY2lmaWVkCisJYnkgdGhlIGluaXRpYXRvci4gSW5hY3RpdmUgdW5sZXNzIE1UX1NUX0NBTl9QQVJUSVRJT05TIHNldC4KK01UU0VURFJWQlVGRkVSCisJSXMgdXNlZCBmb3Igc2V2ZXJhbCBwdXJwb3Nlcy4gVGhlIGNvbW1hbmQgaXMgb2J0YWluZWQgZnJvbSBjb3VudAorICAgICAgICB3aXRoIG1hc2sgTVRfU0VUX09QVElPTlMsIHRoZSBsb3cgb3JkZXIgYml0cyBhcmUgdXNlZCBhcyBhcmd1bWVudC4KKwlUaGlzIGNvbW1hbmQgaXMgb25seSBhbGxvd2VkIGZvciB0aGUgc3VwZXJ1c2VyIChyb290KS4gVGhlCisJc3ViY29tbWFuZHMgYXJlOgorCTAKKyAgICAgICAgICAgVGhlIGRyaXZlIGJ1ZmZlciBvcHRpb24gaXMgc2V0IHRvIHRoZSBhcmd1bWVudC4gWmVybyBtZWFucworICAgICAgICAgICBubyBidWZmZXJpbmcuCisgICAgICAgIE1UX1NUX0JPT0xFQU5TCisgICAgICAgICAgIFNldHMgdGhlIGJ1ZmZlcmluZyBvcHRpb25zLiBUaGUgYml0cyBhcmUgdGhlIG5ldyBzdGF0ZXMKKyAgICAgICAgICAgKGVuYWJsZWQvZGlzYWJsZWQpIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyAoaW4gdGhlCisJICAgcGFyZW50aGVzaXMgaXMgc3BlY2lmaWVkIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBnbG9iYWwgb3IKKwkgICBjYW4gYmUgc3BlY2lmaWVkIGRpZmZlcmVudGx5IGZvciBlYWNoIG1vZGUpOgorCSAgICAgTVRfU1RfQlVGRkVSX1dSSVRFUyB3cml0ZSBidWZmZXJpbmcgKG1vZGUpCisJICAgICBNVF9TVF9BU1lOQ19XUklURVMgYXN5bmNocm9ub3VzIHdyaXRlcyAobW9kZSkKKyAgICAgICAgICAgICBNVF9TVF9SRUFEX0FIRUFEICByZWFkIGFoZWFkIChtb2RlKQorICAgICAgICAgICAgIE1UX1NUX1RXT19GTSB3cml0aW5nIG9mIHR3byBmaWxlbWFya3MgKGdsb2JhbCkKKwkgICAgIE1UX1NUX0ZBU1RfRU9NIHVzaW5nIHRoZSBTQ1NJIHNwYWNpbmcgdG8gRU9EIChnbG9iYWwpCisJICAgICBNVF9TVF9BVVRPX0xPQ0sgYXV0b21hdGljIGxvY2tpbmcgb2YgdGhlIGRyaXZlIGRvb3IgKGdsb2JhbCkKKyAgICAgICAgICAgICBNVF9TVF9ERUZfV1JJVEVTIHRoZSBkZWZhdWx0cyBhcmUgbWVhbnQgb25seSBmb3Igd3JpdGVzIChtb2RlKQorCSAgICAgTVRfU1RfQ0FOX0JTUiBiYWNrc3BhY2luZyBvdmVyIG1vcmUgdGhhbiBvbmUgcmVjb3JkcyBjYW4KKwkJYmUgdXNlZCBmb3IgcmVwb3NpdGlvbmluZyB0aGUgdGFwZSAoZ2xvYmFsKQorCSAgICAgTVRfU1RfTk9fQkxLTElNUyB0aGUgZHJpdmVyIGRvZXMgbm90IGFzayB0aGUgYmxvY2sgbGltaXRzCisJCWZyb20gdGhlIGRyaXZlIChibG9jayBzaXplIGNhbiBiZSBjaGFuZ2VkIG9ubHkgdG8KKwkJdmFyaWFibGUpIChnbG9iYWwpCisJICAgICBNVF9TVF9DQU5fUEFSVElUSU9OUyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkCisJCXRhcGVzIChnbG9iYWwpCisJICAgICBNVF9TVF9TQ1NJMkxPR0lDQUwgdGhlIGxvZ2ljYWwgYmxvY2sgbnVtYmVyIGlzIHVzZWQgaW4KKwkJdGhlIE1UU0VFSyBhbmQgTVRJT0NQT1MgZm9yIFNDU0ktMiBkcml2ZXMgaW5zdGVhZCBvZgorCQl0aGUgZGV2aWNlIGRlcGVuZGVudCBhZGRyZXNzLiBJdCBpcyByZWNvbW1lbmRlZCB0byBzZXQKKwkJdGhpcyBmbGFnIHVubGVzcyB0aGVyZSBhcmUgdGFwZXMgdXNpbmcgdGhlIGRldmljZQorCQlkZXBlbmRlbnQgKGZyb20gdGhlIG9sZCB0aW1lcykgKGdsb2JhbCkKKwkgICAgIE1UX1NUX1NZU1Ygc2V0cyB0aGUgU1lTViBzZW1hdGljcyAobW9kZSkKKwkgICAgIE1UX1NUX05PV0FJVCBlbmFibGVzIGltbWVkaWF0ZSBtb2RlIChpLmUuLCBkb24ndCB3YWl0IGZvcgorCSAgICAgICAgdGhlIGNvbW1hbmQgdG8gZmluaXNoKSBmb3Igc29tZSBjb21tYW5kcyAoZS5nLiwgcmV3aW5kKQorCSAgICAgTVRfU1RfREVCVUdHSU5HIGRlYnVnZ2luZyAoZ2xvYmFsOyBkZWJ1Z2dpbmcgbXVzdCBiZQorCQljb21waWxlZCBpbnRvIHRoZSBkcml2ZXIpCisJTVRfU1RfU0VUQk9PTEVBTlMKKwlNVF9TVF9DTEVBUkJPT0xFQU5TCisJICAgU2V0cyBvciBjbGVhcnMgdGhlIG9wdGlvbiBiaXRzLgorICAgICAgICBNVF9TVF9XUklURV9USFJFU0hPTEQKKyAgICAgICAgICAgU2V0cyB0aGUgd3JpdGUgdGhyZXNob2xkIGZvciB0aGlzIGRldmljZSB0byBraWxvYnl0ZXMKKyAgICAgICAgICAgc3BlY2lmaWVkIGJ5IHRoZSBsb3dlc3QgYml0cy4KKwlNVF9TVF9ERUZfQkxLU0laRQorCSAgIERlZmluZXMgdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBzZXQgYXV0b21hdGljYWxseS4gVmFsdWUKKwkgICAweGZmZmZmZiBtZWFucyB0aGF0IHRoZSBkZWZhdWx0IGlzIG5vdCB1c2VkIGFueSBtb3JlLgorCU1UX1NUX0RFRl9ERU5TSVRZCisJTVRfU1RfREVGX0RSVkJVRkZFUgorCSAgIFVzZWQgdG8gc2V0IG9yIGNsZWFyIHRoZSBkZW5zaXR5ICg4IGJpdHMpLCBhbmQgZHJpdmUgYnVmZmVyCisJICAgc3RhdGUgKDMgYml0cykuIElmIHRoZSB2YWx1ZSBpcyBNVF9TVF9DTEVBUl9ERUZBVUxUCisJICAgKDB4ZmZmZmYpIHRoZSBkZWZhdWx0IHdpbGwgbm90IGJlIHVzZWQgYW55IG1vcmUuIE90aGVyd2lzZQorCSAgIHRoZSBsb3dlcm1vc3QgYml0cyBvZiB0aGUgdmFsdWUgY29udGFpbiB0aGUgbmV3IHZhbHVlIG9mCisJICAgdGhlIHBhcmFtZXRlci4KKwlNVF9TVF9ERUZfQ09NUFJFU1NJT04KKwkgICBUaGUgY29tcHJlc3Npb24gZGVmYXVsdCB3aWxsIG5vdCBiZSB1c2VkIGlmIHRoZSB2YWx1ZSBvZgorCSAgIHRoZSBsb3dlcm1vc3QgYnl0ZSBpcyAweGZmLiBPdGhlcndpc2UgdGhlIGxvd2VybW9zdCBiaXQKKwkgICBjb250YWlucyB0aGUgbmV3IGRlZmF1bHQuIElmIHRoZSBiaXRzIDgtMTUgYXJlIHNldCB0byBhCisJICAgbm9uLXplcm8gbnVtYmVyLCBhbmQgdGhpcyBudW1iZXIgaXMgbm90IDB4ZmYsIHRoZSBudW1iZXIgaXMKKwkgICB1c2VkIGFzIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZSB2YWx1ZQorCSAgIE1UX1NUX0NMRUFSX0RFRkFVTFQgY2FuIGJlIHVzZWQgdG8gY2xlYXIgdGhlIGNvbXByZXNzaW9uCisJICAgZGVmYXVsdC4KKwlNVF9TVF9TRVRfVElNRU9VVAorCSAgIFNldCB0aGUgbm9ybWFsIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgdGhpcyBkZXZpY2UuIFRoZQorCSAgIGRlZmF1bHQgaXMgOTAwIHNlY29uZHMgKDE1IG1pbnV0ZXMpLiBUaGUgdGltZW91dCBzaG91bGQgYmUKKwkgICBsb25nIGVub3VnaCBmb3IgdGhlIHJldHJpZXMgZG9uZSBieSB0aGUgZGV2aWNlIHdoaWxlCisJICAgcmVhZGluZy93cml0aW5nLgorCU1UX1NUX1NFVF9MT05HX1RJTUVPVVQKKwkgICBTZXQgdGhlIGxvbmcgdGltZW91dCB0aGF0IGlzIHVzZWQgZm9yIG9wZXJhdGlvbnMgdGhhdCBhcmUKKwkgICBrbm93biB0byB0YWtlIGEgbG9uZyB0aW1lLiBUaGUgZGVmYXVsdCBpcyAxNDAwMCBzZWNvbmRzCisJICAgKDMuOSBob3VycykuIEZvciBlcmFzZSB0aGlzIHZhbHVlIGlzIGZ1cnRoZXIgbXVsdGlwbGllZCBieQorCSAgIGVpZ2h0LgorCU1UX1NUX1NFVF9DTE4KKwkgICBTZXQgdGhlIGNsZWFuaW5nIHJlcXVlc3QgaW50ZXJwcmV0YXRpb24gcGFyYW1ldGVycyB1c2luZworCSAgIHRoZSBsb3dlc3QgMjQgYml0cyBvZiB0aGUgYXJndW1lbnQuIFRoZSBkcml2ZXIgY2FuIHNldCB0aGUKKwkgICBnZW5lcmljIHN0YXR1cyBiaXQgR01UX0NMTiBpZiBhIGNsZWFuaW5nIHJlcXVlc3QgYml0IHBhdHRlcm4KKwkgICBpcyBmb3VuZCBmcm9tIHRoZSBleHRlbmRlZCBzZW5zZSBkYXRhLiBNYW55IGRyaXZlcyBzZXQgb25lIG9yCisJICAgbW9yZSBiaXRzIGluIHRoZSBleHRlbmRlZCBzZW5zZSBkYXRhIHdoZW4gdGhlIGRyaXZlIG5lZWRzCisJICAgY2xlYW5pbmcuIFRoZSBiaXRzIGFyZSBkZXZpY2UtZGVwZW5kZW50LiBUaGUgZHJpdmVyIGlzCisJICAgZ2l2ZW4gdGhlIG51bWJlciBvZiB0aGUgc2Vuc2UgZGF0YSBieXRlICh0aGUgbG93ZXN0IGVpZ2h0CisJICAgYml0cyBvZiB0aGUgYXJndW1lbnQ7IG11c3QgYmUgPj0gMTggKHZhbHVlcyAxIC0gMTcKKwkgICByZXNlcnZlZCkgYW5kIDw9IHRoZSBtYXhpbXVtIHJlcXVlc3RlZCBzZW5zZSBkYXRhIHNpeGUpLCAKKwkgICBhIG1hc2sgdG8gc2VsZWN0IHRoZSByZWxldmFudCBiaXRzICh0aGUgYml0cyA5LTE2KSwgYW5kIHRoZQorCSAgIGJpdCBwYXR0ZXJuIChiaXRzIDE3LTIzKS4gSWYgdGhlIGJpdCBwYXR0ZXJuIGlzIHplcm8sIG9uZQorCSAgIG9yIG1vcmUgYml0cyB1bmRlciB0aGUgbWFzayBpbmRpY2F0ZSBjbGVhbmluZyByZXF1ZXN0LiBJZgorCSAgIHRoZSBwYXR0ZXJuIGlzIG5vbi16ZXJvLCB0aGUgcGF0dGVybiBtdXN0IG1hdGNoIHRoZSBtYXNrZWQKKwkgICBzZW5zZSBkYXRhIGJ5dGUuCisKKwkgICAoVGhlIGNsZWFuaW5nIGJpdCBpcyBzZXQgaWYgdGhlIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBhbmQKKwkgICBxdWFsaWZpZXIgMDBoIDE3aCBhcmUgc2VlbiByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mCisJICAgTVRfU1RfU0VUX0NMTi4pCisKK1RoZSBmb2xsb3dpbmcgaW9jdGwgdXNlcyB0aGUgc3RydWN0dXJlIG10cG9zOgorTVRJT0NQT1MgUmVhZHMgdGhlIGN1cnJlbnQgcG9zaXRpb24gZnJvbSB0aGUgZHJpdmUuIFVzZXMKKyAgICAgICAgVGFuZGJlcmctY29tcGF0aWJsZSBRRkEgZm9yIFNDU0ktMSBkcml2ZXMgYW5kIHRoZSBTQ1NJLTIKKyAgICAgICAgY29tbWFuZCBmb3IgdGhlIFNDU0ktMiBkcml2ZXMuCisKK1RoZSBmb2xsb3dpbmcgaW9jdGwgdXNlcyB0aGUgc3RydWN0dXJlIG10Z2V0IHRvIHJldHVybiB0aGUgc3RhdHVzOgorTVRJT0NHRVQgUmV0dXJucyBzb21lIHN0YXR1cyBpbmZvcm1hdGlvbi4KKyAgICAgICAgVGhlIGZpbGUgbnVtYmVyIGFuZCBibG9jayBudW1iZXIgd2l0aGluIGZpbGUgYXJlIHJldHVybmVkLiBUaGUKKyAgICAgICAgYmxvY2sgaXMgLTEgd2hlbiBpdCBjYW4ndCBiZSBkZXRlcm1pbmVkIChlLmcuLCBhZnRlciBNVEJTRikuCisgICAgICAgIFRoZSBkcml2ZSB0eXBlIGlzIGVpdGhlciBNVElTU0NTSTEgb3IgTVRJU1NDU0kyLgorICAgICAgICBUaGUgbnVtYmVyIG9mIHJlY292ZXJlZCBlcnJvcnMgc2luY2UgdGhlIHByZXZpb3VzIHN0YXR1cyBjYWxsCisgICAgICAgIGlzIHN0b3JlZCBpbiB0aGUgbG93ZXIgd29yZCBvZiB0aGUgZmllbGQgbXRfZXJyZWcuCisgICAgICAgIFRoZSBjdXJyZW50IGJsb2NrIHNpemUgYW5kIHRoZSBkZW5zaXR5IGNvZGUgYXJlIHN0b3JlZCBpbiB0aGUgZmllbGQKKyAgICAgICAgbXRfZHNyZWcgKHNoaWZ0cyBmb3IgdGhlIHN1YmZpZWxkcyBhcmUgTVRfU1RfQkxLU0laRV9TSElGVCBhbmQKKyAgICAgICAgTVRfU1RfREVOU0lUWV9TSElGVCkuCisJVGhlIEdNVF94eHggc3RhdHVzIGJpdHMgcmVmbGVjdCB0aGUgZHJpdmUgc3RhdHVzLiBHTVRfRFJfT1BFTgorCWlzIHNldCBpZiB0aGVyZSBpcyBubyB0YXBlIGluIHRoZSBkcml2ZS4gR01UX0VPRCBtZWFucyBlaXRoZXIKKwllbmQgb2YgcmVjb3JkZWQgZGF0YSBvciBlbmQgb2YgdGFwZS4gR01UX0VPVCBtZWFucyBlbmQgb2YgdGFwZS4KKworCitNSVNDRUxMQU5FT1VTIENPTVBJTEUgT1BUSU9OUworCitUaGUgcmVjb3ZlcmVkIHdyaXRlIGVycm9ycyBhcmUgY29uc2lkZXJlZCBmYXRhbCBpZiBTVF9SRUNPVkVSRURfV1JJVEVfRkFUQUwKK2lzIGRlZmluZWQuCisKK1RoZSBtYXhpbXVtIG51bWJlciBvZiB0YXBlIGRldmljZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZGVmaW5lCitTVF9NQVhfVEFQRVMuIElmIG1vcmUgdGFwZXMgYXJlIGRldGVjdGVkIGF0IGRyaXZlciBpbml0aWFsaXphdGlvbiwgdGhlCittYXhpbXVtIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgorCitJbW1lZGlhdGUgcmV0dXJuIGZyb20gdGFwZSBwb3NpdGlvbmluZyBTQ1NJIGNvbW1hbmRzIGNhbiBiZSBlbmFibGVkIGJ5CitkZWZpbmluZyBTVF9OT1dBSVQuIElmIHRoaXMgaXMgZGVmaW5lZCwgdGhlIHVzZXIgc2hvdWxkIHRha2UgY2FyZSB0aGF0Cit0aGUgbmV4dCB0YXBlIG9wZXJhdGlvbiBpcyBub3Qgc3RhcnRlZCBiZWZvcmUgdGhlIHByZXZpb3VzIG9uZSBoYXMKK2ZpbmlzaGVkLiBUaGUgZHJpdmVzIGFuZCBTQ1NJIGFkYXB0ZXJzIHNob3VsZCBoYW5kbGUgdGhpcyBjb25kaXRpb24KK2dyYWNlZnVsbHksIGJ1dCBzb21lIGRyaXZlL2FkYXB0ZXIgY29tYmluYXRpb25zIGFyZSBrbm93biB0byBoYW5nIHRoZQorU0NTSSBidXMgaW4gdGhpcyBjYXNlLgorCitUaGUgTVRFT00gY29tbWFuZCBpcyBieSBkZWZhdWx0IGltcGxlbWVudGVkIGFzIHNwYWNpbmcgb3ZlciAzMjc2NworZmlsZW1hcmtzLiBXaXRoIHRoaXMgbWV0aG9kIHRoZSBmaWxlIG51bWJlciBpbiB0aGUgc3RhdHVzIGlzCitjb3JyZWN0LiBUaGUgdXNlciBjYW4gcmVxdWVzdCB1c2luZyBkaXJlY3Qgc3BhY2luZyB0byBFT0QgYnkgc2V0dGluZworU1RfRkFTVF9FT00gMSAob3IgdXNpbmcgdGhlIE1UX1NUX09QVElPTlMgaW9jdGwpLiBJbiB0aGlzIGNhc2UgdGhlIGZpbGUKK251bWJlciB3aWxsIGJlIGludmFsaWQuCisKK1doZW4gdXNpbmcgcmVhZCBhaGVhZCBvciBidWZmZXJlZCB3cml0ZXMgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgZmlsZQorbWF5IG5vdCBiZSBjb3JyZWN0IGFmdGVyIHRoZSBmaWxlIGlzIGNsb3NlZCAoY29ycmVjdCBwb3NpdGlvbiBtYXkKK3JlcXVpcmUgYmFja3NwYWNpbmcgb3ZlciBtb3JlIHRoYW4gb25lIHJlY29yZCkuIFRoZSBjb3JyZWN0IHBvc2l0aW9uCit3aXRoaW4gZmlsZSBjYW4gYmUgb2J0YWluZWQgaWYgU1RfSU5fRklMRV9QT1MgaXMgZGVmaW5lZCBhdCBjb21waWxlCit0aW1lIG9yIHRoZSBNVF9TVF9DQU5fQlNSIGJpdCBpcyBzZXQgZm9yIHRoZSBkcml2ZSB3aXRoIGFuIGlvY3RsLgorKFRoZSBkcml2ZXIgYWx3YXlzIGJhY2tzIG92ZXIgYSBmaWxlbWFyayBjcm9zc2VkIGJ5IHJlYWQgYWhlYWQgaWYgdGhlCit1c2VyIGRvZXMgbm90IHJlcXVlc3QgZGF0YSB0aGF0IGZhci4pCisKKworREVCVUdHSU5HIEhJTlRTCisKK1RvIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMsIGVkaXQgc3QuYyBhbmQgI2RlZmluZSBERUJVRyAxLiBBcyBzZWVuCithYm92ZSwgZGVidWdnaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgd2l0aCBhbiBpb2N0bCBpZiBkZWJ1Z2dpbmcgaXMKK2NvbXBpbGVkIGludG8gdGhlIGRyaXZlci4gVGhlIGRlYnVnZ2luZyBvdXRwdXQgaXMgbm90IHZvbHVtaW5vdXMuCisKK0lmIHRoZSB0YXBlIHNlZW1zIHRvIGhhbmcsIEkgd291bGQgYmUgdmVyeSBpbnRlcmVzdGVkIHRvIGhlYXIgd2hlcmUKK3RoZSBkcml2ZXIgaXMgd2FpdGluZy4gV2l0aCB0aGUgY29tbWFuZCAncHMgLWwnIHlvdSBjYW4gc2VlIHRoZSBzdGF0ZQorb2YgdGhlIHByb2Nlc3MgdXNpbmcgdGhlIHRhcGUuIElmIHRoZSBzdGF0ZSBpcyBELCB0aGUgcHJvY2VzcyBpcword2FpdGluZyBmb3Igc29tZXRoaW5nLiBUaGUgZmllbGQgV0NIQU4gdGVsbHMgd2hlcmUgdGhlIGRyaXZlciBpcword2FpdGluZy4gSWYgeW91IGhhdmUgdGhlIGN1cnJlbnQgU3lzdGVtLm1hcCBpbiB0aGUgY29ycmVjdCBwbGFjZSAoaW4KKy9ib290IGZvciB0aGUgcHJvY3BzIEkgdXNlKSBvciBoYXZlIHVwZGF0ZWQgL2V0Yy9wc2RhdGFiYXNlIChmb3Iga21lbQorcHMpLCBwcyB3cml0ZXMgdGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIFdDSEFOIGZpZWxkLiBJZiBub3QsIHlvdSBoYXZlCit0byBsb29rIHVwIHRoZSBmdW5jdGlvbiBmcm9tIFN5c3RlbS5tYXAuCisKK05vdGUgYWxzbyB0aGF0IHRoZSB0aW1lb3V0cyBhcmUgdmVyeSBsb25nIGNvbXBhcmVkIHRvIG1vc3Qgb3RoZXIKK2RyaXZlcnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgTGludXggZHJpdmVyIG1heSBhcHBlYXIgaHVuZyBhbHRob3VnaCB0aGUKK3JlYWwgcmVhc29uIGlzIHRoYXQgdGhlIHRhcGUgZmlybXdhcmUgaGFzIGdvdCBjb25mdXNlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M1MDBfY3MudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzUwMF9jcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZWJjZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M1MDBfY3MudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1RoZSBzeW01M2M1MDBfY3MgZHJpdmVyIG9yaWdpbmF0ZWQgYXMgYW4gYWRkLW9uIHRvIERhdmlkIEhpbmRzJyBwY21jaWEtY3MKK3BhY2thZ2UsIGFuZCB3YXMgd3JpdHRlbiBieSBUb20gQ29ybmVyICh0Y29ybmVyQHZpYS5hdCkuICBBIHJld3JpdGUgd2FzCitsb25nIG92ZXJkdWUsIGFuZCB0aGUgY3VycmVudCB2ZXJzaW9uIGFkZHJlc3NlcyB0aGUgZm9sbG93aW5nIGNvbmNlcm5zOgorCisJKDEpIGV4dGVuc2l2ZSBrZXJuZWwgY2hhbmdlcyBiZXR3ZWVuIDIuNCBhbmQgMi42LgorCSgyKSBkZXByZWNhdGVkIFBDTUNJQSBzdXBwb3J0IG91dHNpZGUgdGhlIGtlcm5lbC4KKworQWxsIHRoZSBVU0VfQklPUyBjb2RlIGhhcyBiZWVuIHJpcHBlZCBvdXQuICBJdCB3YXMgbmV2ZXIgdXNlZCwgYW5kIGNvdWxkCitub3QgaGF2ZSB3b3JrZWQgYW55d2F5LiAgVGhlIFVTRV9ETUEgY29kZSBpcyBsaWtld2lzZSBnb25lLiAgTWFueSB0aGFua3MKK3RvIFlPS09UQSBIaXJvc2hpIChuc3BfY3MgZHJpdmVyKSBhbmQgRGF2aWQgSGluZHMgKHFsb2dpY19jcyBkcml2ZXIpIGZvcgordGhlIGNvZGUgZnJhZ21lbnRzIEkgc2hhbWVsZXNzbHkgYWRhcHRlZCBmb3IgdGhpcyB3b3JrLiAgVGhhbmtzIGFsc28gdG8KK0NocmlzdG9waCBIZWxsd2lnIGZvciBoaXMgcGF0aWVudCB0dXRlbGFnZSB3aGlsZSBJIHN0dW1ibGVkIGFib3V0LgorCitUaGUgU3ltYmlvcyBMb2dpYyA1M2M1MDAgY2hpcCB3YXMgdXNlZCBpbiB0aGUgIm5ld2VyIiAoY2lyY2EgMTk5NykgdmVyc2lvbgorb2YgdGhlIE5ldyBNZWRpYSBCdXMgVG9hc3RlciBQQ01DSUEgU0NTSSBjb250cm9sbGVyLiAgUHJlc3VtYWJseSB0aGVyZSBhcmUKK290aGVyIHByb2R1Y3RzIHVzaW5nIHRoaXMgY2hpcCwgYnV0IEkndmUgbmV2ZXIgbGFpZCBleWVzIChtdWNoIGxlc3MgaGFuZHMpCitvbiBvbmUuCisKK1Rocm91Z2ggdGhlIHllYXJzLCB0aGVyZSBoYXZlIGJlZW4gYSBudW1iZXIgb2YgZG93bmxvYWRzIG9mIHRoZSBwY21jaWEtY3MKK3ZlcnNpb24gb2YgdGhpcyBkcml2ZXIsIGFuZCBJIGd1ZXNzIGl0IHdvcmtlZCBmb3IgdGhvc2UgdXNlcnMuICBJdCB3b3JrZWQKK2ZvciBUb20gQ29ybmVyLCBhbmQgaXQgd29ya3MgZm9yIG1lLiAgWW91ciBtaWxlYWdlIHdpbGwgcHJvYmFibHkgdmFyeS4KKworLS1Cb2IgVHJhY3kgKHJjdEBmcnVzLmNvbSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjOHh4XzIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTE2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjOHh4XzIudHh0CkBAIC0wLDAgKzEsMTA1OSBAQAorVGhlIExpbnV4IFNZTS0yIGRyaXZlciBkb2N1bWVudGF0aW9uIGZpbGUKKworV3JpdHRlbiBieSBHZXJhcmQgUm91ZGllciA8Z3JvdWRpZXJAZnJlZS5mcj4KKzIxIFJ1ZSBDYXJub3QKKzk1MTcwIERFVUlMIExBIEJBUlJFIC0gRlJBTkNFCisKK1VwZGF0ZWQgYnkgTWF0dGhldyBXaWxjb3ggPG1hdHRoZXdAd2lsLmN4PgorCisyMDA0LTEwLTA5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuICBJbnRyb2R1Y3Rpb24KKzIuICBTdXBwb3J0ZWQgY2hpcHMgYW5kIFNDU0kgZmVhdHVyZXMKKzMuICBBZHZhbnRhZ2VzIG9mIHRoaXMgZHJpdmVyIGZvciBuZXdlciBjaGlwcy4KKyAgICAgIDMuMSBPcHRpbWl6ZWQgU0NTSSBTQ1JJUFRTCisgICAgICAzLjIgTmV3IGZlYXR1cmVzIGFwcGVhcmVkIHdpdGggdGhlIFNZTTUzQzg5NgorNC4gIE1lbW9yeSBtYXBwZWQgSS9PIHZlcnN1cyBub3JtYWwgSS9PCis1LiAgVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKzYuICBQYXJpdHkgY2hlY2tpbmcKKzcuICBQcm9maWxpbmcgaW5mb3JtYXRpb24KKzguICBDb250cm9sIGNvbW1hbmRzCisgICAgICA4LjEgIFNldCBtaW5pbXVtIHN5bmNocm9ub3VzIHBlcmlvZAorICAgICAgOC4yICBTZXQgd2lkZSBzaXplCisgICAgICA4LjMgIFNldCBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworICAgICAgOC40ICBTZXQgZGVidWcgbW9kZQorICAgICAgOC41ICBTZXQgZmxhZyAobm9fZGlzYykKKyAgICAgIDguNiAgU2V0IHZlcmJvc2UgbGV2ZWwKKyAgICAgIDguNyAgUmVzZXQgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKyAgICAgIDguOCAgQWJvcnQgYWxsIHRhc2tzIG9mIGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0Cis5LiAgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisxMC4gQm9vdCBzZXR1cCBjb21tYW5kcworICAgICAgMTAuMSBTeW50YXgKKyAgICAgIDEwLjIgQXZhaWxhYmxlIGFyZ3VtZW50cworICAgICAgICAgICAgIDEwLjIuMSAgRGVmYXVsdCBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzCisgICAgICAgICAgICAgMTAuMi4yICBCdXJzdCBtYXgKKyAgICAgICAgICAgICAxMC4yLjMgIExFRCBzdXBwb3J0CisgICAgICAgICAgICAgMTAuMi40ICBEaWZmZXJlbnRpYWwgbW9kZQorICAgICAgICAgICAgIDEwLjIuNSAgSVJRIG1vZGUKKyAgICAgICAgICAgICAxMC4yLjYgIENoZWNrIFNDU0kgQlVTIAorICAgICAgICAgICAgIDEwLjIuNyAgU3VnZ2VzdCBhIGRlZmF1bHQgU0NTSSBpZCBmb3IgaG9zdHMKKyAgICAgICAgICAgICAxMC4yLjggIFZlcmJvc2l0eSBsZXZlbAorICAgICAgICAgICAgIDEwLjIuOSAgRGVidWcgbW9kZQorICAgICAgICAgICAgIDEwLjIuMTAgU2V0dGxlIGRlbGF5CisgICAgICAgICAgICAgMTAuMi4xMSBTZXJpYWwgTlZSQU0KKyAgICAgICAgICAgICAxMC4yLjEyIEV4Y2x1ZGUgYSBob3N0IGZyb20gYmVpbmcgYXR0YWNoZWQKKyAgICAgIDEwLjMgQ29udmVydGluZyBmcm9tIG9sZCBvcHRpb25zCisgICAgICAxMC40IFNDU0kgQlVTIGNoZWNraW5nIGJvb3Qgb3B0aW9uCisxMS4gU0NTSSBwcm9ibGVtIHRyb3VibGVzaG9vdGluZworICAgICAgMTUuMSBQcm9ibGVtIHRyYWNraW5nCisgICAgICAxNS4yIFVuZGVyc3RhbmRpbmcgaGFyZHdhcmUgZXJyb3IgcmVwb3J0cworMTIuIFNlcmlhbCBOVlJBTSBzdXBwb3J0IChieSBSaWNoYXJkIFdhbHRoYW0pCisgICAgICAxNy4xIEZlYXR1cmVzCisgICAgICAxNy4yIFN5bWJpb3MgTlZSQU0gbGF5b3V0CisgICAgICAxNy4zIFRla3JhbSAgTlZSQU0gbGF5b3V0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gSW50cm9kdWN0aW9uCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSB3aG9sZSBTWU01M0M4WFggZmFtaWx5IG9mIFBDSS1TQ1NJIGNvbnRyb2xsZXJzLgorSXQgYWxzbyBzdXBwb3J0IHRoZSBzdWJzZXQgb2YgTFNJNTNDMTBYWCBQQ0ktU0NTSSBjb250cm9sbGVycyB0aGF0IGFyZSBiYXNlZCAKK29uIHRoZSBTWU01M0M4WFggU0NSSVBUUyBsYW5ndWFnZS4KKworSXQgcmVwbGFjZXMgdGhlIHN5bTUzYzh4eCtuY3I1M2M4eHggZHJpdmVyIGJ1bmRsZSBhbmQgc2hhcmVzIGl0cyBjb3JlIGNvZGUgCit3aXRoIHRoZSBGcmVlQlNEIFNZTS0yIGRyaXZlci4gVGhlIGBnbHVlJyB0aGF0IGFsbG93cyB0aGlzIGRyaXZlciB0byB3b3JrIAordW5kZXIgTGludXggaXMgY29udGFpbmVkIGluIDIgZmlsZXMgbmFtZWQgc3ltX2dsdWUuaCBhbmQgc3ltX2dsdWUuYy4KK090aGVyIGRyaXZlcnMgZmlsZXMgYXJlIGludGVuZGVkIG5vdCB0byBkZXBlbmQgb24gdGhlIE9wZXJhdGluZyBTeXN0ZW0gCitvbiB3aGljaCB0aGUgZHJpdmVyIGlzIHVzZWQuCisKK1RoZSBoaXN0b3J5IG9mIHRoaXMgZHJpdmVyIGNhbiBiZSBzdW1tZXJpemVkIGFzIGZvbGxvd3M6CisKKzE5OTM6IG5jciBkcml2ZXIgd3JpdHRlbiBmb3IgMzg2YnNkIGFuZCBGcmVlQlNEIGJ5OgorICAgICAgICAgIFdvbGZnYW5nIFN0YW5nbG1laWVyICAgICAgICA8d29sZkBjb2xvZ25lLmRlPgorICAgICAgICAgIFN0ZWZhbiBFc3NlciAgICAgICAgICAgICAgICA8c2VAbWkuVW5pLUtvZWxuLmRlPgorCisxOTk2OiBwb3J0IG9mIHRoZSBuY3IgZHJpdmVyIHRvIExpbnV4LTEuMi4xMyBhbmQgcmVuYW1lIGl0IG5jcjUzYzh4eC4KKyAgICAgICAgICBHZXJhcmQgUm91ZGllcgorCisxOTk4OiBuZXcgc3ltNTNjOHh4IGRyaXZlciBmb3IgTGludXggYmFzZWQgb24gTE9BRC9TVE9SRSBpbnN0cnVjdGlvbiBhbmQgdGhhdCAKKyAgICAgIGFkZHMgZnVsbCBzdXBwb3J0IGZvciB0aGUgODk2IGJ1dCBkcm9wcyBzdXBwb3J0IGZvciBlYXJseSBOQ1IgZGV2aWNlcy4KKyAgICAgICAgICBHZXJhcmQgUm91ZGllcgorCisxOTk5OiBwb3J0IG9mIHRoZSBzeW01M2M4eHggZHJpdmVyIHRvIEZyZWVCU0QgYW5kIHN1cHBvcnQgZm9yIHRoZSBMU0k1M0MxMDEwIAorICAgICAgMzMgTUh6IGFuZCA2Nk1IeiBVbHRyYS0zIGNvbnRyb2xsZXJzLiBUaGUgbmV3IGRyaXZlciBpcyBuYW1lZCBgc3ltJy4KKyAgICAgICAgICBHZXJhcmQgUm91ZGllcgorCisyMDAwOiBBZGQgc3VwcG9ydCBmb3IgZWFybHkgTkNSIGRldmljZXMgdG8gRnJlZUJTRCBgc3ltJyBkcml2ZXIuCisgICAgICBCcmVhayB0aGUgZHJpdmVyIGludG8gc2V2ZXJhbCBzb3VyY2VzIGFuZCBzZXBhcmF0ZSB0aGUgT1MgZ2x1ZSAKKyAgICAgIGNvZGUgZnJvbSB0aGUgY29yZSBjb2RlIHRoYXQgY2FuIGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgTy9TZXMuCisgICAgICBXcml0ZSBhIGdsdWUgY29kZSBmb3IgTGludXguCisgICAgICAgICAgR2VyYXJkIFJvdWRpZXIKKworMjAwNDogUmVtb3ZlIEZyZWVCU0QgY29tcGF0aWJpbGl0eSBjb2RlLiAgUmVtb3ZlIHN1cHBvcnQgZm9yIHZlcnNpb25zIG9mCisgICAgICBMaW51eCBiZWZvcmUgMi42LiAgU3RhcnQgdXNpbmcgTGludXggZmFjaWxpdGllcy4KKworVGhpcyBSRUFETUUgZmlsZSBhZGRyZXNzZXMgdGhlIExpbnV4IHZlcnNpb24gb2YgdGhlIGRyaXZlci4gVW5kZXIgRnJlZUJTRCwgCit0aGUgZHJpdmVyIGRvY3VtZW50YXRpb24gaXMgdGhlIHN5bS44IG1hbiBwYWdlLgorCitJbmZvcm1hdGlvbiBhYm91dCBuZXcgY2hpcHMgaXMgYXZhaWxhYmxlIGF0IExTSUxPR0lDIHdlYiBzZXJ2ZXI6CisKKyAgICAgICAgICBodHRwOi8vd3d3LmxzaWxvZ2ljLmNvbS8KKworU0NTSSBzdGFuZGFyZCBkb2N1bWVudGF0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IFQxMCBzaXRlOgorCisgICAgICAgICAgaHR0cDovL3d3dy50MTAub3JnLworCitVc2VmdWwgU0NTSSB0b29scyB3cml0dGVuIGJ5IEVyaWMgWW91bmdkYWxlIGFyZSBwYXJ0IG9mIG1vc3QgTGludXggCitkaXN0cmlidXRpb25zOgorICAgc2NzaWluZm86ICAgIGNvbW1hbmQgbGluZSB0b29sCisgICBzY3NpLWNvbmZpZzogVENML1RrIHRvb2wgdXNpbmcgc2NzaWluZm8KKworMi4gU3VwcG9ydGVkIGNoaXBzIGFuZCBTQ1NJIGZlYXR1cmVzCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBmb3IgYWxsIGNoaXBzOgorCisJU3luY2hyb25vdXMgbmVnb3RpYXRpb24KKwlEaXNjb25uZWN0aW9uCisJVGFnZ2VkIGNvbW1hbmQgcXVldWluZworCVNDU0kgcGFyaXR5IGNoZWNraW5nCisJUENJIE1hc3RlciBwYXJpdHkgY2hlY2tpbmcKKworT3RoZXIgZmVhdHVyZXMgZGVwZW5kcyBvbiBjaGlwIGNhcGFiaWxpdGllcy4KK1RoZSBkcml2ZXIgbm90YWJseSB1c2VzIG9wdGltaXplZCBTQ1JJUFRTIGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCAKK0xPQUQvU1RPUkUgYW5kIGhhbmRsZXMgUEhBU0UgTUlTTUFUQ0ggZnJvbSBTQ1JJUFRTIGZvciBkZXZpY2VzIHRoYXQgCitzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIGZlYXR1cmUuCisKK1RoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3Mgc29tZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGNoaXAgZmFtaWx5LgorCisgICAgICAgT24gYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPQUQvU1RPUkUgICBIQVJEV0FSRQorQ2hpcCAgIFNETVMgQklPUyAgIFdpZGUgICBTQ1NJIHN0ZC4gICBNYXguIHN5bmMgICBTQ1JJUFRTICAgICAgUEhBU0UgTUlTTUFUQ0gKKy0tLS0gICAtLS0tLS0tLS0gICAtLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tLSAgLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tCis4MTAgICAgICAgIE4gICAgICAgICBOICAgICAgRkFTVDEwICAgIDEwIE1CL3MgICAgICAgIE4gICAgICAgICAgICAgTgorODEwQSAgICAgICBOICAgICAgICAgTiAgICAgIEZBU1QxMCAgICAxMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzgxNSAgICAgICAgWSAgICAgICAgIE4gICAgICBGQVNUMTAgICAgMTAgTUIvcyAgICAgICAgTiAgICAgICAgICAgICBOCis4MjUgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDEwICAgIDIwIE1CL3MgICAgICAgIE4gICAgICAgICAgICAgTgorODI1QSAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QxMCAgICAyMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzg2MCAgICAgICAgTiAgICAgICAgIE4gICAgICBGQVNUMjAgICAgMjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4NzUgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDIwICAgIDQwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODc1QSAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QyMCAgICA0MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg3NiAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMjAgICAgNDAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4OTUgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODk1QSAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg5NiAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTcgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorMTUxMEQgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzEwMTAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUODAgICAxNjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCisxMDEwXzY2KiAgIFkgICAgICAgICBZICAgICAgRkFTVDgwICAgMTYwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorCisqIENoaXAgc3VwcG9ydHMgMzNNSHogYW5kIDY2TUh6IFBDSSBidXMgY2xvY2suCisKKworU3VtbWFyeSBvZiBvdGhlciBzdXBwb3J0ZWQgZmVhdHVyZXM6CisKK01vZHVsZTogICAgICAgICAgICAgICAgYWxsb3cgdG8gbG9hZCB0aGUgZHJpdmVyCitNZW1vcnkgbWFwcGVkIEkvTzogICAgIGluY3JlYXNlcyBwZXJmb3JtYW5jZQorQ29udHJvbCBjb21tYW5kczogICAgICB3cml0ZSBvcGVyYXRpb25zIHRvIHRoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0KK0RlYnVnZ2luZyBpbmZvcm1hdGlvbjogd3JpdHRlbiB0byBzeXNsb2cgKGV4cGVydCBvbmx5KQorU2NhdHRlciAvIGdhdGhlcgorU2hhcmVkIGludGVycnVwdAorQm9vdCBzZXR1cCBjb21tYW5kcworU2VyaWFsIE5WUkFNOiAgICAgICAgICBTeW1iaW9zIGFuZCBUZWtyYW0gZm9ybWF0cworCisKKzMuIEFkdmFudGFnZXMgb2YgdGhpcyBkcml2ZXIgZm9yIG5ld2VyIGNoaXBzLgorCiszLjEgT3B0aW1pemVkIFNDU0kgU0NSSVBUUy4KKworQWxsIGNoaXBzIGV4Y2VwdCB0aGUgODEwLCA4MTUgYW5kIDgyNSwgc3VwcG9ydCBuZXcgU0NTSSBTQ1JJUFRTIGluc3RydWN0aW9ucyAKK25hbWVkIExPQUQgYW5kIFNUT1JFIHRoYXQgYWxsb3cgdG8gbW92ZSB1cCB0byAxIERXT1JEIGZyb20vdG8gYW4gSU8gcmVnaXN0ZXIgCit0by9mcm9tIG1lbW9yeSBtdWNoIGZhc3RlciB0aGF0IHRoZSBNT1ZFIE1FTU9SWSBpbnN0cnVjdGlvbiB0aGF0IGlzIHN1cHBvcnRlZCAKK2J5IHRoZSA1M2M3eHggYW5kIDUzYzh4eCBmYW1pbHkuCisKK1RoZSBMT0FEL1NUT1JFIGluc3RydWN0aW9ucyBzdXBwb3J0IGFic29sdXRlIGFuZCBEU0EgcmVsYXRpdmUgYWRkcmVzc2luZyAKK21vZGVzLiBUaGUgU0NTSSBTQ1JJUFRTIGhhZCBiZWVuIGVudGlyZWx5IHJld3JpdHRlbiB1c2luZyBMT0FEL1NUT1JFIGluc3RlYWQgCitvZiBNT1ZFIE1FTU9SWSBpbnN0cnVjdGlvbnMuCisKK0R1ZSB0byB0aGUgbGFjayBvZiBMT0FEL1NUT1JFIFNDUklQVFMgaW5zdHJ1Y3Rpb25zIGJ5IGVhcmxpZXIgY2hpcHMsIHRoaXMgCitkcml2ZXIgYWxzbyBpbmNvcnBvcmF0ZXMgYSBkaWZmZXJlbnQgU0NSSVBUUyBzZXQgYmFzZWQgb24gTUVNT1JZIE1PVkUsIGluIAorb3JkZXIgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgZW50aXJlIFNZTTUzQzhYWCBjaGlwcyBmYW1pbHkuCisKKzMuMiBOZXcgZmVhdHVyZXMgYXBwZWFyZWQgd2l0aCB0aGUgU1lNNTNDODk2CisKK05ld2VyIGNoaXBzIChzZWUgYWJvdmUpIGFsbG93cyBoYW5kbGluZyBvZiB0aGUgcGhhc2UgbWlzbWF0Y2ggY29udGV4dCBmcm9tIAorU0NSSVBUUyAoYXZvaWRzIHRoZSBwaGFzZSBtaXNtYXRjaCBpbnRlcnJ1cHQgdGhhdCBzdG9wcyB0aGUgU0NTSSBwcm9jZXNzb3IgCit1bnRpbCB0aGUgQyBjb2RlIGhhcyBzYXZlZCB0aGUgY29udGV4dCBvZiB0aGUgdHJhbnNmZXIpLgorCitUaGUgODk2IGFuZCAxMDEwIGNoaXBzIHN1cHBvcnQgNjQgYml0IFBDSSB0cmFuc2FjdGlvbnMgYW5kIGFkZHJlc3NpbmcsIAord2hpbGUgdGhlIDg5NUEgc3VwcG9ydHMgMzIgYml0IFBDSSB0cmFuc2FjdGlvbnMgYW5kIDY0IGJpdCBhZGRyZXNzaW5nLgorVGhlIFNDUklQVFMgcHJvY2Vzc29yIG9mIHRoZXNlIGNoaXBzIGlzIG5vdCB0cnVlIDY0IGJpdCwgYnV0IHVzZXMgc2VnbWVudCAKK3JlZ2lzdGVycyBmb3IgYml0IDMyLTYzLiBBbm90aGVyIGludGVyZXN0aW5nIGZlYXR1cmUgaXMgdGhhdCBMT0FEL1NUT1JFIAoraW5zdHJ1Y3Rpb25zIHRoYXQgYWRkcmVzcyB0aGUgb24tY2hpcCBSQU0gKDhrKSByZW1haW4gaW50ZXJuYWwgdG8gdGhlIGNoaXAuCisKKzQuIE1lbW9yeSBtYXBwZWQgSS9PIHZlcnN1cyBub3JtYWwgSS9PCisKK01lbW9yeSBtYXBwZWQgSS9PIGhhcyBsZXNzIGxhdGVuY3kgdGhhbiBub3JtYWwgSS9PIGFuZCBpcyB0aGUgcmVjb21tZW5kZWQgCit3YXkgZm9yIGRvaW5nIElPIHdpdGggUENJIGRldmljZXMuIE1lbW9yeSBtYXBwZWQgSS9PIHNlZW1zIHRvIHdvcmsgZmluZSBvbiAKK21vc3QgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMsIGJ1dCBzb21lIHBvb3JseSBkZXNpZ25lZCBjaGlwc2V0cyBtYXkgYnJlYWsgCit0aGlzIGZlYXR1cmUuIEEgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgcHJvdmlkZWQgZm9yIG5vcm1hbCBJL08gdG8gYmUgCit1c2VkIGJ1dCB0aGUgZHJpdmVyIGRlZmF1bHRzIHRvIE1NSU8uCisKKzUuIFRhZ2dlZCBjb21tYW5kIHF1ZXVlaW5nCisKK1F1ZXVpbmcgbW9yZSB0aGFuIDEgY29tbWFuZCBhdCBhIHRpbWUgdG8gYSBkZXZpY2UgYWxsb3dzIGl0IHRvIHBlcmZvcm0gCitvcHRpbWl6YXRpb25zIGJhc2VkIG9uIGFjdHVhbCBoZWFkIHBvc2l0aW9ucyBhbmQgaXRzIG1lY2hhbmljYWwgCitjaGFyYWN0ZXJpc3RpY3MuIFRoaXMgZmVhdHVyZSBtYXkgYWxzbyByZWR1Y2UgYXZlcmFnZSBjb21tYW5kIGxhdGVuY3kuCitJbiBvcmRlciB0byByZWFsbHkgZ2FpbiBhZHZhbnRhZ2Ugb2YgdGhpcyBmZWF0dXJlLCBkZXZpY2VzIG11c3QgaGF2ZSAKK2EgcmVhc29uYWJsZSBjYWNoZSBzaXplIChObyBtaXJhY2xlIGlzIHRvIGJlIGV4cGVjdGVkIGZvciBhIGxvdy1lbmQgCitoYXJkIGRpc2sgd2l0aCAxMjggS0Igb3IgbGVzcykuCitTb21lIGtvd24gb2xkIFNDU0kgZGV2aWNlcyBkbyBub3QgcHJvcGVybHkgc3VwcG9ydCB0YWdnZWQgY29tbWFuZCBxdWV1aW5nLgorR2VuZXJhbGx5LCBmaXJtd2FyZSByZXZpc2lvbnMgdGhhdCBmaXggdGhpcyBraW5kIG9mIHByb2JsZW1zIGFyZSBhdmFpbGFibGUgCithdCByZXNwZWN0aXZlIHZlbmRvciB3ZWIvZnRwIHNpdGVzLgorQWxsIEkgY2FuIHNheSBpcyB0aGF0IEkgbmV2ZXIgaGF2ZSBoYWQgcHJvYmxlbSB3aXRoIHRhZ2dlZCBxdWV1aW5nIHVzaW5nIAordGhpcyBkcml2ZXIgYW5kIGl0cyBwcmVkZWNlc3NvcnMuIEhhcmQgZGlza3MgdGhhdCBiZWhhdmVkIGNvcnJlY3RseSBmb3IgCittZSB1c2luZyB0YWdnZWQgY29tbWFuZHMgYXJlIHRoZSBmb2xsb3dpbmc6CisKKy0gSUJNIFMxMiAwNjYyCistIENvbm5lciAxMDgwUworLSBRdWFudHVtIEF0bGFzIEkKKy0gUXVhbnR1bSBBdGxhcyBJSQorLSBTZWFnYXRlIENoZWV0YWggSQorLSBRdWFudHVtIFZpa2luZyBJSQorLSBJQk0gRFJWUworLSBRdWFudHVtIEF0bGFzIElWCistIFNlYWdhdGUgQ2hlZXRhaCBJSQorCitJZiB5b3VyIGNvbnRyb2xsZXIgaGFzIE5WUkFNLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGlzIGZlYXR1cmUgcGVyIHRhcmdldCAKK2Zyb20gdGhlIHVzZXIgc2V0dXAgdG9vbC4gVGhlIFRla3JhbSBTZXR1cCBwcm9ncmFtIGFsbG93cyB0byB0dW5lIHRoZSAKK21heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyB1cCB0byAzMi4gVGhlIFN5bWJpb3MgU2V0dXAgb25seSBhbGxvd3MgCit0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUuCisKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXMgdGFnZ2VkIGNvbW1hbmRzIHF1ZXVlZCB0byBhIGRldmljZQoraXMgY3VycmVudGx5IHNldCB0byAxNiBieSBkZWZhdWx0LiAgVGhpcyB2YWx1ZSBpcyBzdWl0YWJsZSBmb3IgbW9zdCBTQ1NJCitkaXNrcy4gIFdpdGggbGFyZ2UgU0NTSSBkaXNrcyAoPj0gMkdCLCBjYWNoZSA+PSA1MTJLQiwgYXZlcmFnZSBzZWVrIHRpbWUKKzw9IDEwIG1zKSwgdXNpbmcgYSBsYXJnZXIgdmFsdWUgbWF5IGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlcy4KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdXAgdG8gMjU1IGNvbW1hbmRzIHBlciBkZXZpY2UsIGFuZCBidXQgdXNpbmcgbW9yZSB0aGFuIAorNjQgaXMgZ2VuZXJhbGx5IG5vdCB3b3J0aC13aGlsZSwgdW5sZXNzIHlvdSBhcmUgdXNpbmcgYSB2ZXJ5IGxhcmdlIGRpc2sgb3IgCitkaXNrIGFycmF5cy4gSXQgaXMgbm90aWNlYWJsZSB0aGF0IG1vc3Qgb2YgcmVjZW50IGhhcmQgZGlza3Mgc2VlbSBub3QgdG8gCithY2NlcHQgbW9yZSB0aGFuIDY0IHNpbXVsdGFuZW91cyBjb21tYW5kcy4gU28sIHVzaW5nIG1vcmUgdGhhbiA2NCBxdWV1ZWQgCitjb21tYW5kcyBpcyBwcm9iYWJseSBqdXN0IHJlc291cmNlIHdhc3RpbmcuCisKK0lmIHlvdXIgY29udHJvbGxlciBkb2VzIG5vdCBoYXZlIE5WUkFNIG9yIGlmIGl0IGlzIG1hbmFnZWQgYnkgdGhlIFNETVMgCitCSU9TL1NFVFVQLCB5b3UgY2FuIGNvbmZpZ3VyZSB0YWdnZWQgcXVldWVpbmcgZmVhdHVyZSBhbmQgZGV2aWNlIHF1ZXVlIAorZGVwdGhzIGZyb20gdGhlIGJvb3QgY29tbWFuZC1saW5lLiBGb3IgZXhhbXBsZToKKworICBzeW01M2M4eHg9dGFnczo0L3QydDNxMTUtdDRxNy90MXUwcTMyCisKK3dpbGwgc2V0IHRhZ2dlZCBjb21tYW5kcyBxdWV1ZSBkZXB0aHMgYXMgZm9sbG93OgorCistIHRhcmdldCAyICBhbGwgbHVucyAgb24gY29udHJvbGxlciAwIC0tPiAxNQorLSB0YXJnZXQgMyAgYWxsIGx1bnMgIG9uIGNvbnRyb2xsZXIgMCAtLT4gMTUKKy0gdGFyZ2V0IDQgIGFsbCBsdW5zICBvbiBjb250cm9sbGVyIDAgLS0+ICA3CistIHRhcmdldCAxICBsdW4gMCAgICAgb24gY29udHJvbGxlciAxIC0tPiAzMgorLSBhbGwgb3RoZXIgdGFyZ2V0L2x1biAgICAgICAgICAgICAgICAtLT4gIDQKKworSW4gc29tZSBzcGVjaWFsIGNvbmRpdGlvbnMsIHNvbWUgU0NTSSBkaXNrIGZpcm13YXJlcyBtYXkgcmV0dXJuIGEKK1FVRVVFIEZVTEwgc3RhdHVzIGZvciBhIFNDU0kgY29tbWFuZC4gVGhpcyBiZWhhdmlvdXIgaXMgbWFuYWdlZCBieSB0aGUKK2RyaXZlciB1c2luZyB0aGUgZm9sbG93aW5nIGhldXJpc3RpYzoKKworLSBFYWNoIHRpbWUgYSBRVUVVRSBGVUxMIHN0YXR1cyBpcyByZXR1cm5lZCwgdGFnZ2VkIHF1ZXVlIGRlcHRoIGlzIHJlZHVjZWQgCisgIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGRpc2Nvbm5lY3RlZCBjb21tYW5kcy4gCisKKy0gRXZlcnkgMjAwIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgU0NTSSBjb21tYW5kcywgaWYgYWxsb3dlZCBieSB0aGUKKyAgY3VycmVudCBsaW1pdCwgdGhlIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlYWJsZSBjb21tYW5kcyBpcyBpbmNyZW1lbnRlZC4KKworU2luY2UgUVVFVUUgRlVMTCBzdGF0dXMgcmVjZXB0aW9uIGFuZCBoYW5kbGluZyBpcyByZXNvdXJjZSB3YXN0aW5nLCB0aGUgCitkcml2ZXIgbm90aWZpZXMgYnkgZGVmYXVsdCB0aGlzIHByb2JsZW0gdG8gdXNlciBieSBpbmRpY2F0aW5nIHRoZSBhY3R1YWwgCitudW1iZXIgb2YgY29tbWFuZHMgdXNlZCBhbmQgdGhlaXIgc3RhdHVzLCBhcyB3ZWxsIGFzIGl0cyBkZWNpc2lvbiBvbiB0aGUgCitkZXZpY2UgcXVldWUgZGVwdGggY2hhbmdlLgorVGhlIGhldXJpc3RpYyB1c2VkIGJ5IHRoZSBkcml2ZXIgaW4gaGFuZGxpbmcgUVVFVUUgRlVMTCBlbnN1cmVzIHRoYXQgdGhlIAoraW1wYWN0IG9uIHBlcmZvcm1hbmNlcyBpcyBub3QgdG9vIGJhZC4gWW91IGNhbiBnZXQgcmlkIG9mIHRoZSBtZXNzYWdlcyBieSAKK3NldHRpbmcgdmVyYm9zZSBsZXZlbCB0byB6ZXJvLCBhcyBmb2xsb3c6CisKKzFzdCBtZXRob2Q6IGJvb3QgeW91ciBzeXN0ZW0gdXNpbmcgJ3N5bTUzYzh4eD12ZXJiOjAnIG9wdGlvbi4KKzJuZCBtZXRob2Q6IGFwcGx5ICJzZXR2ZXJib3NlIDAiIGNvbnRyb2wgY29tbWFuZCB0byB0aGUgcHJvYyBmcyBlbnRyeSAKKyAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8geW91ciBjb250cm9sbGVyIGFmdGVyIGJvb3QtdXAuCisKKzYuIFBhcml0eSBjaGVja2luZworCitUaGUgZHJpdmVyIHN1cHBvcnRzIFNDU0kgcGFyaXR5IGNoZWNraW5nIGFuZCBQQ0kgYnVzIG1hc3RlciBwYXJpdHkKK2NoZWNraW5nLiAgVGhlc2UgZmVhdHVyZXMgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIHRvIGVuc3VyZSBzYWZlCitkYXRhIHRyYW5zZmVycy4gIFNvbWUgZmxhd2VkIGRldmljZXMgb3IgbW90aGVyIGJvYXJkcyBtYXkgaGF2ZSBwcm9ibGVtcword2l0aCBwYXJpdHkuICBUaGUgb3B0aW9ucyB0byBkZWZlYXQgcGFyaXR5IGNoZWNraW5nIGhhdmUgYmVlbiByZW1vdmVkCitmcm9tIHRoZSBkcml2ZXIuCisKKzcuIFByb2ZpbGluZyBpbmZvcm1hdGlvbgorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIHByb2ZpbGluZyBpbmZvcm1hdGlvbnMgYXMgZGlkIGl0cyBwcmVkZWNlc3NvcnMuCitUaGlzIGZlYXR1cmUgd2FzIG5vdCB0aGlzIHVzZWZ1bCBhbmQgYWRkZWQgY29tcGxleGl0eSB0byB0aGUgY29kZS4gCitBcyB0aGUgZHJpdmVyIGNvZGUgZ290IG1vcmUgY29tcGxleCwgSSBoYXZlIGRlY2lkZWQgdG8gcmVtb3ZlIGV2ZXJ5dGhpbmcgCit0aGF0IGRpZG4ndCBzZWVtIGFjdHVhbGx5IHVzZWZ1bC4KKworOC4gQ29udHJvbCBjb21tYW5kcworCitDb250cm9sIGNvbW1hbmRzIGNhbiBiZSBzZW50IHRvIHRoZSBkcml2ZXIgd2l0aCB3cml0ZSBvcGVyYXRpb25zIHRvCit0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtLiBUaGUgZ2VuZXJpYyBjb21tYW5kIHN5bnRheCBpcyB0aGUKK2ZvbGxvd2luZzoKKworICAgICAgZWNobyAiPHZlcmI+IDxwYXJhbWV0ZXJzPiIgPi9wcm9jL3Njc2kvc3ltNTNjOHh4LzAKKyAgICAgIChhc3N1bWVzIGNvbnRyb2xsZXIgbnVtYmVyIGlzIDApCisKK1VzaW5nICJhbGwiIGZvciAiPHRhcmdldD4iIHBhcmFtZXRlciB3aXRoIHRoZSBjb21tYW5kcyBiZWxvdyB3aWxsCithcHBseSB0byBhbGwgdGFyZ2V0cyBvZiB0aGUgU0NTSSBjaGFpbiAoZXhjZXB0IHRoZSBjb250cm9sbGVyKS4KKworQXZhaWxhYmxlIGNvbW1hbmRzOgorCis4LjEgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kIGZhY3RvcgorCisgICAgc2V0c3luYyA8dGFyZ2V0PiA8cGVyaW9kIGZhY3Rvcj4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIHBlcmlvZDogICAgbWluaW11bSBzeW5jaHJvbm91cyBwZXJpb2QuCisgICAgICAgICAgICAgICBNYXhpbXVtIHNwZWVkID0gMTAwMC8oNCpwZXJpb2QgZmFjdG9yKSBleGNlcHQgZm9yIHNwZWNpYWwKKyAgICAgICAgICAgICAgIGNhc2VzIGJlbG93LgorCisgICAgU3BlY2lmeSBhIHBlcmlvZCBvZiAwLCB0byBmb3JjZSBhc3luY2hyb25vdXMgdHJhbnNmZXIgbW9kZS4KKworICAgICAgIDkgbWVhbnMgMTIuNSBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMCBtZWFucyAyNSBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMSBtZWFucyAzMCBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMiBtZWFucyA1MCBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisKKzguMiBTZXQgd2lkZSBzaXplCisKKyAgICBzZXR3aWRlIDx0YXJnZXQ+IDxzaXplPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgc2l6ZTogICAgICAwPTggYml0cywgMT0xNmJpdHMKKworOC4zIFNldCBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworIAorICAgIHNldHRhZ3MgPHRhcmdldD4gPHRhZ3M+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICB0YWdzOiAgICAgIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworICAgICAgICAgICAgICAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIGNvbmZpZ3VyZWQgKGRlZmF1bHQ6IDE2KQorCis4LjQgU2V0IGRlYnVnIG1vZGUKKworICAgIHNldGRlYnVnIDxsaXN0IG9mIGRlYnVnIGZsYWdzPgorCisgICAgQXZhaWxhYmxlIGRlYnVnIGZsYWdzOgorICAgICAgICBhbGxvYzogICBwcmludCBpbmZvIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9ucyAoY2NiLCBsY2IpCisgICAgICAgIHF1ZXVlOiAgIHByaW50IGluZm8gYWJvdXQgaW5zZXJ0aW9ucyBpbnRvIHRoZSBjb21tYW5kIHN0YXJ0IHF1ZXVlCisgICAgICAgIHJlc3VsdDogIHByaW50IHNlbnNlIGRhdGEgb24gQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cworICAgICAgICBzY2F0dGVyOiBwcmludCBpbmZvIGFib3V0IHRoZSBzY2F0dGVyIHByb2Nlc3MKKyAgICAgICAgc2NyaXB0czogcHJpbnQgaW5mbyBhYm91dCB0aGUgc2NyaXB0IGJpbmRpbmcgcHJvY2VzcworCXRpbnk6ICAgIHByaW50IG1pbmltYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uCisJdGltaW5nOiAgcHJpbnQgdGltaW5nIGluZm9ybWF0aW9uIG9mIHRoZSBOQ1IgY2hpcAorCW5lZ286ICAgIHByaW50IGluZm9ybWF0aW9uIGFib3V0IFNDU0kgbmVnb3RpYXRpb25zCisJcGhhc2U6ICAgcHJpbnQgaW5mb3JtYXRpb24gb24gc2NyaXB0IGludGVycnVwdGlvbnMKKworICAgIFVzZSAic2V0ZGVidWciIHdpdGggbm8gYXJndW1lbnQgdG8gcmVzZXQgZGVidWcgZmxhZ3MuCisKKworOC41IFNldCBmbGFnIChub19kaXNjKQorIAorICAgIHNldGZsYWcgPHRhcmdldD4gPGZsYWc+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKworICAgIEZvciB0aGUgbW9tZW50LCBvbmx5IG9uZSBmbGFnIGlzIGF2YWlsYWJsZToKKworICAgICAgICBub19kaXNjOiAgIG5vdCBhbGxvdyB0YXJnZXQgdG8gZGlzY29ubmVjdC4KKworICAgIERvIG5vdCBzcGVjaWZ5IGFueSBmbGFnIGluIG9yZGVyIHRvIHJlc2V0IHRoZSBmbGFnLiBGb3IgZXhhbXBsZToKKyAgICAtIHNldGZsYWcgNAorICAgICAgd2lsbCByZXNldCBub19kaXNjIGZsYWcgZm9yIHRhcmdldCA0LCBzbyB3aWxsIGFsbG93IGl0IGRpc2Nvbm5lY3Rpb25zLgorICAgIC0gc2V0ZmxhZyBhbGwKKyAgICAgIHdpbGwgYWxsb3cgZGlzY29ubmVjdGlvbiBmb3IgYWxsIGRldmljZXMgb24gdGhlIFNDU0kgYnVzLgorCisKKzguNiBTZXQgdmVyYm9zZSBsZXZlbAorCisgICAgc2V0dmVyYm9zZSAjbGV2ZWwKKworICAgIFRoZSBkcml2ZXIgZGVmYXVsdCB2ZXJib3NlIGxldmVsIGlzIDEuIFRoaXMgY29tbWFuZCBhbGxvd3MgdG8gY2hhbmdlIAorICAgIHRoIGRyaXZlciB2ZXJib3NlIGxldmVsIGFmdGVyIGJvb3QtdXAuCisKKzguNyBSZXNldCBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorCisgICAgcmVzZXRkZXYgPHRhcmdldD4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIFRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gc2VuZCBhIEJVUyBERVZJQ0UgUkVTRVQgbWVzc2FnZSB0byB0aGUgdGFyZ2V0LgorCis4LjggQWJvcnQgYWxsIHRhc2tzIG9mIGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0CisKKyAgICBjbGVhcmRldiA8dGFyZ2V0PgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGEgQUJPUlQgbWVzc2FnZSB0byBhbGwgdGhlIGxvZ2ljYWwgdW5pdHMgCisgICAgb2YgdGhlIHRhcmdldC4KKworCis5LiBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKworVW5kZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gdG9vbHMgKG1ha2UgbWVudWNvbmZpZywgZm9yIGV4YW1wbGUpLCBpdCBpcyAKK3Bvc3NpYmxlIHRvIGNoYW5nZSBzb21lIGRlZmF1bHQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KK0lmIHRoZSBmaXJtd2FyZSBvZiBhbGwgeW91ciBkZXZpY2VzIGlzIHBlcmZlY3QgZW5vdWdoLCBhbGwgdGhlCitmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBjYW4gYmUgZW5hYmxlZCBhdCBzdGFydC11cC4gSG93ZXZlciwKK2lmIG9ubHkgb25lIGhhcyBhIGZsYXcgZm9yIHNvbWUgU0NTSSBmZWF0dXJlLCB5b3UgY2FuIGRpc2FibGUgdGhlCitzdXBwb3J0IGJ5IHRoZSBkcml2ZXIgb2YgdGhpcyBmZWF0dXJlIGF0IGxpbnV4IHN0YXJ0LXVwIGFuZCBlbmFibGUKK3RoaXMgZmVhdHVyZSBhZnRlciBib290LXVwIG9ubHkgZm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IGl0IHNhZmVseS4KKworQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOgorCitVc2Ugbm9ybWFsIElPICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IGFuc3dlcjogbikKKyAgICBBbnN3ZXIgInkiIGlmIHlvdSBzdXNwZWN0IHlvdXIgbW90aGVyIGJvYXJkIHRvIG5vdCBhbGxvdyBtZW1vcnkgbWFwcGVkIEkvTy4KKyAgICBNYXkgc2xvdyBkb3duIHBlcmZvcm1hbmNlIGEgbGl0dGxlLgorCitEZWZhdWx0IHRhZ2dlZCBjb21tYW5kIHF1ZXVlIGRlcHRoICAgIChkZWZhdWx0IGFuc3dlcjogMTYpCisgICAgRW50ZXJpbmcgMCBkZWZhdWx0cyB0byB0YWdnZWQgY29tbWFuZHMgbm90IGJlaW5nIHVzZWQuCisgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNwZWNpZmllZCBmcm9tIHRoZSBib290IGNvbW1hbmQgbGluZS4KKworTWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbW1hbmRzICAgICAoZGVmYXVsdCBhbnN3ZXI6IDMyKQorICAgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzIAorICAgIHRoYXQgY2FuIGJlIHF1ZXVlZCB0byBhIGRldmljZS4gVGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIDI1NS4KKworU3luY2hyb25vdXMgdHJhbnNmZXJzIGZyZXF1ZW5jeSAgICAgICAoZGVmYXVsdCBhbnN3ZXI6IDgwKQorICAgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgZnJlcXVlbmN5IGluIE1IeiB0aGUgZHJpdmVyIAorICAgIHdpbGwgdXNlIGF0IGJvb3QgdGltZSBmb3Igc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlciBuZWdvdGlhdGlvbnMuCisgICAgMCBtZWFucyAiYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzIi4KKworMTAuIEJvb3Qgc2V0dXAgY29tbWFuZHMKKworMTAuMSBTeW50YXgKKworU2V0dXAgY29tbWFuZHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGVpdGhlciBhdCBib290IHRpbWUgb3IgYXMKK3BhcmFtZXRlcnMgdG8gbW9kcHJvYmUsIGFzIGRlc2NyaWJlZCBpbiBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorCitFeGFtcGxlIG9mIGJvb3Qgc2V0dXAgY29tbWFuZCB1bmRlciBsaWxvIHByb21wdDoKKworbGlsbzogbGludXggcm9vdD0vZGV2L3NkYTIgc3ltNTNjOHh4LmNtZF9wZXJfbHVuPTQgc3ltNTNjOHh4LnN5bmM9MTAgc3ltNTNjOHh4LmRlYnVnPTB4MjAwCisKKy0gZW5hYmxlIHRhZ2dlZCBjb21tYW5kcywgdXAgdG8gNCB0YWdnZWQgY29tbWFuZHMgcXVldWVkLgorLSBzZXQgc3luY2hyb25vdXMgbmVnb3RpYXRpb24gc3BlZWQgdG8gMTAgTWVnYS10cmFuc2ZlcnMgLyBzZWNvbmQuCistIHNldCBERUJVR19ORUdPIGZsYWcuCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIGluc3RhbGwgdGhlIGRyaXZlciBtb2R1bGUgd2l0aCB0aGUgc2FtZQorb3B0aW9ucyBhcyBhYm92ZS4KKworICAgIG1vZHByb2JlIHN5bTUzYzh4eCBjbWRfcGVyX2x1bj00IHN5bmM9MTAgZGVidWc9MHgyMDAKKworMTAuMiBBdmFpbGFibGUgYXJndW1lbnRzCisKKzEwLjIuMSAgRGVmYXVsdCBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzCisgICAgICAgIGNtZF9wZXJfbHVuPTAgKG9yIGNtZF9wZXJfbHVuPTEpIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZGlzYWJsZWQKKyAgICAgICAgY21kX3Blcl9sdW49I3RhZ3MgKCN0YWdzID4gMSkgdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBlbmFibGVkCisgICN0YWdzIHdpbGwgYmUgdHJ1bmNhdGVkIHRvIHRoZSBtYXggcXVldWVkIGNvbW1hbmRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLgorCisxMC4yLjIgIERldGFpbGVkIGNvbnRyb2wgb2YgdGFnZ2VkIGNvbW1hbmRzCisgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGNvbW1hbmQgcXVldWUgZGVwdGggZm9yIGVhY2ggZGV2aWNlIAorICB0aGF0IHN1cHBvcnRzIHRhZ2dlZCBjb21tYW5kIHF1ZXVlaW5nLgorICBFeGFtcGxlOgorICAgICAgdGFnX2N0cmw9MTAvdDJ0M3ExNi10NXEyNC90MXUycTMyCisgIHdpbGwgc2V0IGRldmljZXMgcXVldWUgZGVwdGggYXMgZm9sbG93OgorICAgICAgLSBjb250cm9sbGVyICMwIHRhcmdldCAjMiBhbmQgdGFyZ2V0ICMzICAgICAgICAgICAgICAgICAgLT4gMTYgY29tbWFuZHMsCisgICAgICAtIGNvbnRyb2xsZXIgIzAgdGFyZ2V0ICM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAyNCBjb21tYW5kcywKKyAgICAgIC0gY29udHJvbGxlciAjMSB0YXJnZXQgIzEgbG9naWNhbCB1bml0ICMyICAgICAgICAgICAgICAgIC0+IDMyIGNvbW1hbmRzLAorICAgICAgLSBhbGwgb3RoZXIgbG9naWNhbCB1bml0cyAoYWxsIHRhcmdldHMsIGFsbCBjb250cm9sbGVycykgLT4gMTAgY29tbWFuZHMuCisKKzEwLjIuMyBCdXJzdCBtYXgKKyAgICAgICAgYnVyc3Q9MCAgICBidXJzdCBkaXNhYmxlZAorICAgICAgICBidXJzdD0yNTUgIGdldCBidXJzdCBsZW5ndGggZnJvbSBpbml0aWFsIElPIHJlZ2lzdGVyIHNldHRpbmdzLgorICAgICAgICBidXJzdD0jeCAgIGJ1cnN0IGVuYWJsZWQgKDE8PCN4IGJ1cnN0IHRyYW5zZmVycyBtYXgpCisgICN4IGlzIGFuIGludGVnZXIgdmFsdWUgd2hpY2ggaXMgbG9nIGJhc2UgMiBvZiB0aGUgYnVyc3QgdHJhbnNmZXJzIG1heC4KKyAgQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHVzZXMgdGhlIG1heGltdW0gdmFsdWUgc3VwcG9ydGVkIGJ5IHRoZSBjaGlwLgorCisxMC4yLjQgTEVEIHN1cHBvcnQKKyAgICAgICAgbGVkPTEgICAgICBlbmFibGUgIExFRCBzdXBwb3J0CisgICAgICAgIGxlZD0wICAgICAgZGlzYWJsZSBMRUQgc3VwcG9ydAorICBEbyBub3QgZW5hYmxlIExFRCBzdXBwb3J0IGlmIHlvdXIgc2NzaSBib2FyZCBkb2VzIG5vdCB1c2UgU0RNUyBCSU9TLgorICAoU2VlICdDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMnKQorCisxMC4yLjQgRGlmZmVyZW50aWFsIG1vZGUKKyAgICAgICAgZGlmZj0wCW5ldmVyIHNldCB1cCBkaWZmIG1vZGUKKyAgICAgICAgZGlmZj0xCXNldCB1cCBkaWZmIG1vZGUgaWYgQklPUyBzZXQgaXQKKyAgICAgICAgZGlmZj0yCWFsd2F5cyBzZXQgdXAgZGlmZiBtb2RlCisgICAgICAgIGRpZmY9MwlzZXQgZGlmZiBtb2RlIGlmIEdQSU8zIGlzIG5vdCBzZXQKKworMTAuMi41IElSUSBtb2RlCisgICAgICAgIGlycW09MCAgICAgYWx3YXlzIG9wZW4gZHJhaW4KKyAgICAgICAgaXJxbT0xICAgICBzYW1lIGFzIGluaXRpYWwgc2V0dGluZ3MgKGFzc3VtZWQgQklPUyBzZXR0aW5ncykKKyAgICAgICAgaXJxbT0yICAgICBhbHdheXMgdG90ZW0gcG9sZQorCisxMC4yLjYgQ2hlY2sgU0NTSSBCVVMgCisgICAgICAgIGJ1c2Noaz08b3B0aW9uIGJpdHM+CisKKyAgICBBdmFpbGFibGUgb3B0aW9uIGJpdHM6CisgICAgICAgIDB4MDogICBObyBjaGVjay4KKyAgICAgICAgMHgxOiAgIENoZWNrIGFuZCBkbyBub3QgYXR0YWNoIHRoZSBjb250cm9sbGVyIG9uIGVycm9yLiAgCisgICAgICAgIDB4MjogICBDaGVjayBhbmQganVzdCB3YXJuIG9uIGVycm9yLgorCisxMC4yLjcgU3VnZ2VzdCBhIGRlZmF1bHQgU0NTSSBpZCBmb3IgaG9zdHMKKyAgICAgICAgaG9zdGlkPTI1NQlubyBpZCBzdWdnZXN0ZWQuCisgICAgICAgIGhvc3RpZD0jeCAgICgwIDwgeCA8IDcpIHggc3VnZ2VzdGVkIGZvciBob3N0cyBTQ1NJIGlkLgorCisgICAgSWYgYSBob3N0IFNDU0kgaWQgaXMgYXZhaWxhYmxlIGZyb20gdGhlIE5WUkFNLCB0aGUgZHJpdmVyIHdpbGwgaWdub3JlIAorICAgIGFueSB2YWx1ZSBzdWdnZXN0ZWQgYXMgYm9vdCBvcHRpb24uIE90aGVyd2lzZSwgaWYgYSBzdWdnZXN0ZWQgdmFsdWUgCisgICAgZGlmZmVyZW50IGZyb20gMjU1IGhhcyBiZWVuIHN1cHBsaWVkLCBpdCB3aWxsIHVzZSBpdC4gT3RoZXJ3aXNlLCBpdCB3aWxsIAorICAgIHRyeSB0byBkZWR1Y2UgdGhlIHZhbHVlIHByZXZpb3VzbHkgc2V0IGluIHRoZSBoYXJkd2FyZSBhbmQgdXNlIHZhbHVlIAorICAgIDcgaWYgdGhlIGhhcmR3YXJlIHZhbHVlIGlzIHplcm8uCisKKzEwLjIuOCAgVmVyYm9zaXR5IGxldmVsCisgICAgICAgIHZlcmI9MCAgICAgbWluaW1hbAorICAgICAgICB2ZXJiPTEgICAgIG5vcm1hbAorICAgICAgICB2ZXJiPTIgICAgIHRvbyBtdWNoCisKKzEwLjIuOSBEZWJ1ZyBtb2RlCisgICAgICAgIGRlYnVnPTAJIGNsZWFyIGRlYnVnIGZsYWdzCisgICAgICAgIGRlYnVnPSN4ICAgc2V0IGRlYnVnIGZsYWdzCisgICN4IGlzIGFuIGludGVnZXIgdmFsdWUgY29tYmluaW5nIHRoZSBmb2xsb3dpbmcgcG93ZXItb2YtMiB2YWx1ZXM6CisgIERFQlVHX0FMTE9DICAgICAgIDB4MQorICBERUJVR19QSEFTRSAgICAgICAweDIKKyAgREVCVUdfUE9MTCAgICAgICAgMHg0CisgIERFQlVHX1FVRVVFICAgICAgIDB4OAorICBERUJVR19SRVNVTFQgICAgIDB4MTAKKyAgREVCVUdfU0NBVFRFUiAgICAweDIwCisgIERFQlVHX1NDUklQVCAgICAgMHg0MAorICBERUJVR19USU5ZICAgICAgIDB4ODAKKyAgREVCVUdfVElNSU5HICAgIDB4MTAwCisgIERFQlVHX05FR08gICAgICAweDIwMAorICBERUJVR19UQUdTICAgICAgMHg0MDAKKyAgREVCVUdfRlJFRVpFICAgIDB4ODAwCisgIERFQlVHX1JFU1RBUlQgIDB4MTAwMAorCisgIFlvdSBjYW4gcGxheSBzYWZlbHkgd2l0aCBERUJVR19ORUdPLiBIb3dldmVyLCBzb21lIG9mIHRoZXNlIGZsYWdzIG1heSAKKyAgZ2VuZXJhdGUgYnVuY2hlcyBvZiBzeXNsb2cgbWVzc2FnZXMuIAorCisxMC4yLjEwIFNldHRsZSBkZWxheQorICAgICAgICBzZXR0bGU9bglkZWxheSBmb3IgbiBzZWNvbmRzCisKKyAgQWZ0ZXIgYSBidXMgcmVzZXQsIHRoZSBkcml2ZXIgd2lsbCBkZWxheSBmb3IgbiBzZWNvbmRzIGJlZm9yZSB0YWxraW5nCisgIHRvIGFueSBkZXZpY2Ugb24gdGhlIGJ1cy4gIFRoZSBkZWZhdWx0IGlzIDMgc2Vjb25kcyBhbmQgc2FmZSBtb2RlIHdpbGwKKyAgZGVmYXVsdCBpdCB0byAxMC4KKworMTAuMi4xMSBTZXJpYWwgTlZSQU0KKwlOQjogb3B0aW9uIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisgICAgICAgIG52cmFtPW4gICAgIGRvIG5vdCBsb29rIGZvciBzZXJpYWwgTlZSQU0KKyAgICAgICAgbnZyYW09eSAgICAgdGVzdCBjb250cm9sbGVycyBmb3Igb25ib2FyZCBzZXJpYWwgTlZSQU0KKyAgICAgICAgKGFsdGVybmF0ZSBiaW5hcnkgZm9ybSkKKyAgICAgICAgbnZyYW09PGJpdHMgb3B0aW9ucz4KKyAgICAgICAgMHgwMSAgIGxvb2sgZm9yIE5WUkFNICAoZXF1aXZhbGVudCB0byBudnJhbT15KQorICAgICAgICAweDAyICAgaWdub3JlIE5WUkFNICJTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiIgcGFyYW1ldGVycyBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHgwNCAgIGlnbm9yZSBOVlJBTSAiV2lkZSBuZWdvdGlhdGlvbiIgIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHgwOCAgIGlnbm9yZSBOVlJBTSAiU2NhbiBhdCBib290IHRpbWUiIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHg4MCAgIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHNldCB0byBPRkYgaW4gdGhlIE5WUkFNIChzeW01M2M4eHggb25seSkKKworMTAuMi4xMiBFeGNsdWRlIGEgaG9zdCBmcm9tIGJlaW5nIGF0dGFjaGVkCisgICAgICAgIGV4Y2w9PGlvX2FkZHJlc3M+LC4uLgorCisgICAgUHJldmVudCBob3N0IGF0IGEgZ2l2ZW4gaW8gYWRkcmVzcyBmcm9tIGJlaW5nIGF0dGFjaGVkLgorICAgIEZvciBleGFtcGxlICdleGNsPTB4YjQwMCwweGMwMDAnIGluZGljYXRlIHRvIHRoZSAKKyAgICBkcml2ZXIgbm90IHRvIGF0dGFjaCBob3N0cyBhdCBhZGRyZXNzIDB4YjQwMCBhbmQgMHhjMDAwLgorCisxMC4zIENvbnZlcnRpbmcgZnJvbSBvbGQgc3R5bGUgb3B0aW9ucworCitQcmV2aW91c2x5LCB0aGUgc3ltMiBkcml2ZXIgYWNjZXB0ZWQgYXJndW1lbnRzIG9mIHRoZSBmb3JtCisJc3ltNTNjOHh4PXRhZ3M6NCxzeW5jOjEwLGRlYnVnOjB4MjAwCisKK0FzIGEgcmVzdWx0IG9mIHRoZSBuZXcgbW9kdWxlIHBhcmFtZXRlcnMsIHRoaXMgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4KK01vc3Qgb2YgdGhlIG9wdGlvbnMgaGF2ZSByZW1haW5lZCB0aGUgc2FtZSwgYnV0IHRhZ3MgaGFzIHNwbGl0IGludG8KK2NtZF9wZXJfbHVuIGFuZCB0YWdfY3RybCBmb3IgaXRzIHR3byBkaWZmZXJlbnQgcHVycG9zZXMuICBUaGUgc2FtcGxlIGFib3ZlCit3b3VsZCBiZSBzcGVjaWZpZWQgYXM6CisJbW9kcHJvYmUgc3ltNTNjOHh4IGNtZF9wZXJfbHVuPTQgc3luYz0xMCBkZWJ1Zz0weDIwMAorCitvciBvbiB0aGUga2VybmVsIGJvb3QgbGluZSBhczoKKwlzeW01M2M4eHguY21kX3Blcl9sdW49NCBzeW01M2M4eHguc3luYz0xMCBzeW01M2M4eHguZGVidWc9MHgyMDAKKworMTAuNCBTQ1NJIEJVUyBjaGVja2luZyBib290IG9wdGlvbi4KKworV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSwgdGhlIGRyaXZlciBjaGVja3MgU0NTSSBsaW5lcyAKK2xvZ2ljIHN0YXRlLCAxMDAgbWljcm8tc2Vjb25kcyBhZnRlciBoYXZpbmcgYXNzZXJ0ZWQgdGhlIFNDU0kgUkVTRVQgbGluZS4KK1RoZSBkcml2ZXIganVzdCByZWFkcyBTQ1NJIGxpbmVzIGFuZCBjaGVja3MgYWxsIGxpbmVzIHJlYWQgRkFMU0UgZXhjZXB0IFJFU0VULgorU2luY2UgU0NTSSBkZXZpY2VzIHNoYWxsIHJlbGVhc2UgdGhlIEJVUyBhdCBtb3N0IDgwMCBuYW5vLXNlY29uZHMgYWZ0ZXIgU0NTSSAKK1JFU0VUIGhhcyBiZWVuIGFzc2VydGVkLCBhbnkgc2lnbmFsIHRvIFRSVUUgbWF5IGluZGljYXRlIGEgU0NTSSBCVVMgcHJvYmxlbS4KK1VuZm9ydHVuYXRlbHksIHRoZSBmb2xsb3dpbmcgY29tbW9uIFNDU0kgQlVTIHByb2JsZW1zIGFyZSBub3QgZGV0ZWN0ZWQ6CistIE9ubHkgMSB0ZXJtaW5hdG9yIGluc3RhbGxlZC4KKy0gTWlzcGxhY2VkIHRlcm1pbmF0b3JzLgorLSBCYWQgcXVhbGl0eSB0ZXJtaW5hdG9ycy4KK09uIHRoZSBvdGhlciBoYW5kLCBlaXRoZXIgYmFkIGNhYmxpbmcsIGJyb2tlbiBkZXZpY2VzLCBub3QgY29uZm9ybWFudCAKK2RldmljZXMsIC4uLiBtYXkgY2F1c2UgYSBTQ1NJIHNpZ25hbCB0byBiZSB3cm9uZyB3aGVuIHRlIGRyaXZlciByZWFkcyBpdC4KKworMTUuIFNDU0kgcHJvYmxlbSB0cm91Ymxlc2hvb3RpbmcKKworMTUuMSBQcm9ibGVtIHRyYWNraW5nCisKK01vc3QgU0NTSSBwcm9ibGVtcyBhcmUgZHVlIHRvIGEgbm9uIGNvbmZvcm1hbnQgU0NTSSBidXMgb3IgdG9vIGJ1Z2d5CitkZXZpY2VzLiAgSWYgaW5mb3J0dW5hdGVseSB5b3UgaGF2ZSBTQ1NJIHByb2JsZW1zLCB5b3UgY2FuIGNoZWNrIHRoZQorZm9sbG93aW5nIHRoaW5nczoKKworLSBTQ1NJIGJ1cyBjYWJsZXMKKy0gdGVybWluYXRpb25zIGF0IGJvdGggZW5kIG9mIHRoZSBTQ1NJIGNoYWluCistIGxpbnV4IHN5c2xvZyBtZXNzYWdlcyAoc29tZSBvZiB0aGVtIG1heSBoZWxwIHlvdSkKKworSWYgeW91IGRvIG5vdCBmaW5kIHRoZSBzb3VyY2Ugb2YgcHJvYmxlbXMsIHlvdSBjYW4gY29uZmlndXJlIHRoZQorZHJpdmVyIG9yIGRldmljZXMgaW4gdGhlIE5WUkFNIHdpdGggbWluaW1hbCBmZWF0dXJlcy4KKworLSBvbmx5IGFzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycworLSB0YWdnZWQgY29tbWFuZHMgZGlzYWJsZWQKKy0gZGlzY29ubmVjdGlvbnMgbm90IGFsbG93ZWQKKworTm93LCBpZiB5b3VyIFNDU0kgYnVzIGlzIG9rLCB5b3VyIHN5c3RlbSBoYXMgZXZlcnkgY2hhbmNlIHRvIHdvcmsKK3dpdGggdGhpcyBzYWZlIGNvbmZpZ3VyYXRpb24gYnV0IHBlcmZvcm1hbmNlcyB3aWxsIG5vdCBiZSBvcHRpbWFsLgorCitJZiBpdCBzdGlsbCBmYWlscywgdGhlbiB5b3UgY2FuIHNlbmQgeW91ciBwcm9ibGVtIGRlc2NyaXB0aW9uIHRvCithcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3MtZ3JvdXBzLiAgU2VuZCBtZSBhIGNvcHkgaW4gb3JkZXIgdG8KK2JlIHN1cmUgSSB3aWxsIHJlY2VpdmUgaXQuICBPYnZpb3VzbHksIGEgYnVnIGluIHRoZSBkcml2ZXIgY29kZSBpcworcG9zc2libGUuCisKKyAgTXkgY3lycmVudCBlbWFpbCBhZGRyZXNzOiBHZXJhcmQgUm91ZGllciA8Z3JvdWRpZXJAZnJlZS5mcj4KKworQWxsb3dpbmcgZGlzY29ubmVjdGlvbnMgaXMgaW1wb3J0YW50IGlmIHlvdSB1c2Ugc2V2ZXJhbCBkZXZpY2VzIG9uCit5b3VyIFNDU0kgYnVzIGJ1dCBvZnRlbiBjYXVzZXMgcHJvYmxlbXMgd2l0aCBidWdneSBkZXZpY2VzLgorU3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMgaW5jcmVhc2VzIHRocm91Z2hwdXQgb2YgZmFzdCBkZXZpY2VzIGxpa2UKK2hhcmQgZGlza3MuICBHb29kIFNDU0kgaGFyZCBkaXNrcyB3aXRoIGEgbGFyZ2UgY2FjaGUgZ2FpbiBhZHZhbnRhZ2Ugb2YKK3RhZ2dlZCBjb21tYW5kcyBxdWV1aW5nLgorCisxNS4yIFVuZGVyc3RhbmRpbmcgaGFyZHdhcmUgZXJyb3IgcmVwb3J0cworCitXaGVuIHRoZSBkcml2ZXIgZGV0ZWN0cyBhbiB1bmV4cGVjdGVkIGVycm9yIGNvbmRpdGlvbiwgaXQgbWF5IGRpc3BsYXkgYSAKK21lc3NhZ2Ugb2YgdGhlIGZvbGxvd2luZyBwYXR0ZXJuLgorCitzeW0wOjE6IEVSUk9SICgwOjQ4KSAoMS0yMS02NSkgKGYvOTUvMCkgQCAoc2NyaXB0IDdjMDoxOTAwMDAwMCkuCitzeW0wOiBzY3JpcHQgY21kID0gMTkwMDAwMDAKK3N5bTA6IHJlZ2R1bXA6IGRhIDEwIDgwIDk1IDQ3IDBmIDAxIDA3IDc1IDAxIDgxIDIxIDgwIDAxIDA5IDAwLgorCitTb21lIGZpZWxkcyBpbiBzdWNoIGEgbWVzc2FnZSBtYXkgaGVscCB5b3UgdW5kZXJzdGFuZCB0aGUgY2F1c2Ugb2YgdGhlIAorcHJvYmxlbSwgYXMgZm9sbG93czoKKworc3ltMDoxOiBFUlJPUiAoMDo0OCkgKDEtMjEtNjUpIChmLzk1LzApIEAgKHNjcmlwdCA3YzA6MTkwMDAwMDApLgorLi4uLi5BLi4uLi4uLi4uQi5DLi4uLkQuRS4uRi4uLi5HLkguLkkuLi4uLi4uSi4uLi4uSy4uLkwuLi4uLi4uCisKK0ZpZWxkIEEgOiB0YXJnZXQgbnVtYmVyLgorICBTQ1NJIElEIG9mIHRoZSBkZXZpY2UgdGhlIGNvbnRyb2xsZXIgd2FzIHRhbGtpbmcgd2l0aCBhdCB0aGUgbW9tZW50IHRoZSAKKyAgZXJyb3Igb2NjdXJzLgorCitGaWVsZCBCIDogRFNUQVQgaW8gcmVnaXN0ZXIgKERNQSBTVEFUVVMpCisgIEJpdCAweDQwIDogTURQRSBNYXN0ZXIgRGF0YSBQYXJpdHkgRXJyb3IKKyAgICAgICAgICAgICBEYXRhIHBhcml0eSBlcnJvciBkZXRlY3RlZCBvbiB0aGUgUENJIEJVUy4KKyAgQml0IDB4MjAgOiBCRiAgIEJ1cyBGYXVsdAorICAgICAgICAgICAgIFBDSSBidXMgZmF1bHQgY29uZGl0aW9uIGRldGVjdGVkCisgIEJpdCAweDAxIDogSUlEICBJbGxlZ2FsIEluc3RydWN0aW9uIERldGVjdGVkCisgICAgICAgICAgICAgU2V0IGJ5IHRoZSBjaGlwIHdoZW4gaXQgZGV0ZWN0cyBhbiBJbGxlZ2FsIEluc3RydWN0aW9uIGZvcm1hdCAKKyAgICAgICAgICAgICBvbiBzb21lIGNvbmRpdGlvbiB0aGF0IG1ha2VzIGFuIGluc3RydWN0aW9uIGlsbGVnYWwuCisgIEJpdCAweDgwIDogREZFIERtYSBGaWZvIEVtcHR5CisgICAgICAgICAgICAgUHVyZSBzdGF0dXMgYml0IHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgYW4gZXJyb3IuCisgIElmIHRoZSByZXBvcnRlZCBEU1RBVCB2YWx1ZSBjb250YWlucyBhIGNvbWJpbmF0aW9uIG9mIE1EUEUgKDB4NDApLCAKKyAgQkYgKDB4MjApLCB0aGVuIHRoZSBjYXVzZSBtYXkgYmUgbGlrZWx5IGR1ZSB0byBhIFBDSSBCVVMgcHJvYmxlbS4KKworRmllbGQgQyA6IFNJU1QgaW8gcmVnaXN0ZXIgKFNDU0kgSW50ZXJydXB0IFN0YXR1cykKKyAgQml0IDB4MDggOiBTR0UgIFNDU0kgR1JPU1MgRVJST1IKKyAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgY2hpcCBkZXRlY3RlZCBhIHNldmVyZSBlcnJvciBjb25kaXRpb24gCisgICAgICAgICAgICAgb24gdGhlIFNDU0kgQlVTIHRoYXQgcHJldmVudHMgdGhlIFNDU0kgcHJvdG9jb2wgZnJvbSBmdW5jdGlvbmluZworICAgICAgICAgICAgIHByb3Blcmx5LgorICBCaXQgMHgwNCA6IFVEQyAgVW5leHBlY3RlZCBEaXNjb25uZWN0aW9uCisgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSByZWxlYXNlZCB0aGUgU0NTSSBCVVMgd2hlbiB0aGUgY2hpcCAKKyAgICAgICAgICAgICB3YXMgbm90IGV4cGVjdGluZyB0aGlzIHRvIGhhcHBlbi4gQSBkZXZpY2UgbWF5IGJlaGF2ZSBzbyB0byAKKyAgICAgICAgICAgICBpbmRpY2F0ZSB0aGUgU0NTSSBpbml0aWF0b3IgdGhhdCBhbiBlcnJvciBjb25kaXRpb24gbm90IHJlcG9ydGFibGUgICAgICAgICAgICAgIHVzaW5nIHRoZSBTQ1NJIHByb3RvY29sIGhhcyBvY2N1cnJlZC4KKyAgQml0IDB4MDIgOiBSU1QgIFNDU0kgQlVTIFJlc2V0CisgICAgICAgICAgICAgR2VuZXJhbGx5IFNDU0kgdGFyZ2V0cyBkbyBub3QgcmVzZXQgdGhlIFNDU0kgQlVTLCBhbHRob3VnaCBhbnkgCisgICAgICAgICAgICAgZGV2aWNlIG9uIHRoZSBCVVMgY2FuIHJlc2V0IGl0IGF0IGFueSB0aW1lLgorICBCaXQgMHgwMSA6IFBBUiAgUGFyaXR5CisgICAgICAgICAgICAgU0NTSSBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQuCisgIE9uIGEgZmF1bHR5IFNDU0kgQlVTLCBhbnkgZXJyb3IgY29uZGl0aW9uIGFtb25nIFNHRSAoMHgwOCksIFVEQyAoMHgwNCkgYW5kIAorICBQQVIgKDB4MDEpIG1heSBiZSBkZXRlY3RlZCBieSB0aGUgY2hpcC4gSWYgeW91ciBTQ1NJIHN5c3RlbSBzb21ldGltZXMgCisgIGVuY291bnRlcnMgc3VjaCBlcnJvciBjb25kaXRpb25zLCBlc3BlY2lhbGx5IFNDU0kgR1JPU1MgRVJST1IsIHRoZW4gYSBTQ1NJIAorICBCVVMgcHJvYmxlbSBpcyBsaWtlbHkgdGhlIGNhdXNlIG9mIHRoZXNlIGVycm9ycy4KKworRm9yIGZpZWxkcyBELEUsRixHIGFuZCBILCB5b3UgbWF5IGxvb2sgaW50byB0aGUgc3ltNTNjOHh4X2RlZnMuaCBmaWxlIAordGhhdCBjb250YWlucyBzb21lIG1pbmltYWwgY29tbWVudHMgb24gSU8gcmVnaXN0ZXIgYml0cy4KK0ZpZWxkIEQgOiBTT0NMICBTY3NpIE91dHB1dCBDb250cm9sIExhdGNoCisgICAgICAgICAgVGhpcyByZWdpc3RlciByZWZsZWN0cyB0aGUgc3RhdGUgb2YgdGhlIFNDU0kgY29udHJvbCBsaW5lcyB0aGUgCisgICAgICAgICAgY2hpcCB3YW50IHRvIGRyaXZlIG9yIGNvbXBhcmUgYWdhaW5zdC4KK0ZpZWxkIEUgOiBTQkNMICBTY3NpIEJ1cyBDb250cm9sIExpbmVzCisgICAgICAgICAgQWN0dWFsIHZhbHVlIG9mIGNvbnRyb2wgbGluZXMgb24gdGhlIFNDU0kgQlVTLgorRmllbGQgRiA6IFNCREwgIFNjc2kgQnVzIERhdGEgTGluZXMKKyAgICAgICAgICBBY3R1YWwgdmFsdWUgb2YgZGF0YSBsaW5lcyBvbiB0aGUgU0NTSSBCVVMuCitGaWVsZCBHIDogU1hGRVIgIFNDU0kgVHJhbnNmZXIKKyAgICAgICAgICBDb250YWlucyB0aGUgc2V0dGluZyBvZiB0aGUgU3luY2hyb25vdXMgUGVyaW9kIGZvciBvdXRwdXQgYW5kIAorICAgICAgICAgIHRoZSBjdXJyZW50IFN5bmNocm9ub3VzIG9mZnNldCAob2Zmc2V0IDAgbWVhbnMgYXN5bmNocm9ub3VzKS4KK0ZpZWxkIEggOiBTQ05UTDMgU2NzaSBDb250cm9sIFJlZ2lzdGVyIDMKKyAgICAgICAgICBDb250YWlucyB0aGUgc2V0dGluZyBvZiB0aW1pbmcgdmFsdWVzIGZvciBib3RoIGFzeW5jaHJvbm91cyBhbmQgCisgICAgICAgICAgc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMuIAorRmllbGQgSSA6IFNDTlRMNCBTY3NpIENvbnRyb2wgUmVnaXN0ZXIgNAorICAgICAgICAgIE9ubHkgbWVhbmluZnVsIGZvciA1M0MxMDEwIFVsdHJhMyBjb250cm9sbGVycy4KKworVW5kZXJzdGFuZGluZyBGaWVsZHMgSiwgSywgTCBhbmQgZHVtcHMgcmVxdWlyZXMgdG8gaGF2ZSBnb29kIGtub3dsZWRnZSBvZiAKK1NDU0kgc3RhbmRhcmRzLCBjaGlwIGNvcmVzIGZ1bmN0aW9ubmFscyBhbmQgaW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcy4KK1lvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGRlY29kZSBhbmQgdW5kZXJzdGFuZCB0aGVtLCB1bmxlc3MgeW91IHdhbnQgdG8gaGVscCAKK21haW50YWluIHRoZSBkcml2ZXIgY29kZS4KKworMTcuIFNlcmlhbCBOVlJBTSAoYWRkZWQgYnkgUmljaGFyZCBXYWx0aGFtOiBkb3Jtb3VzZUBmYXJzcm9idC5kZW1vbi5jby51aykKKworMTcuMSBGZWF0dXJlcworCitFbmFibGluZyBzZXJpYWwgTlZSQU0gc3VwcG9ydCBlbmFibGVzIGRldGVjdGlvbiBvZiB0aGUgc2VyaWFsIE5WUkFNIGluY2x1ZGVkCitvbiBTeW1iaW9zIGFuZCBzb21lIFN5bWJpb3MgY29tcGF0aWJsZSBob3N0IGFkYXB0b3JzLCBhbmQgVGVrcmFtIGJvYXJkcy4gVGhlIAorc2VyaWFsIE5WUkFNIGlzIHVzZWQgYnkgU3ltYmlvcyBhbmQgVGVrcmFtIHRvIGhvbGQgc2V0IHVwIHBhcmFtZXRlcnMgZm9yIHRoZSAKK2hvc3QgYWRhcHRvciBhbmQgaXQncyBhdHRhY2hlZCBkcml2ZXMuCisKK1RoZSBTeW1iaW9zIE5WUkFNIGFsc28gaG9sZHMgZGF0YSBvbiB0aGUgYm9vdCBvcmRlciBvZiBob3N0IGFkYXB0b3JzIGluIGEKK3N5c3RlbSB3aXRoIG1vcmUgdGhhbiBvbmUgaG9zdCBhZGFwdG9yLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBubyBsb25nZXIgdXNlZAorYXMgaXQncyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBob3RwbHVnIFBDSSBtb2RlbC4KKworVGVrcmFtIGJvYXJkcyB1c2luZyBTeW1iaW9zIGNoaXBzLCBEQzM5MFcvRi9VLCB3aGljaCBoYXZlIE5WUkFNIGFyZSBkZXRlY3RlZAorYW5kIHRoaXMgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFN5bWJpb3MgY29tcGF0aWJsZSBhbmQgVGVrcmFtIGhvc3QgCithZGFwdG9ycy4gVGhpcyBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIFN5bWJpb3MgY29tcGF0aWJsZSAiZGlmZiIgc2V0dGluZworaW5jb3JyZWN0bHkgc2V0IG9uIFRla3JhbSBib2FyZHMgaWYgdGhlIENPTkZJR19TQ1NJXzUzQzhYWF9TWU1CSU9TX0NPTVBBVCAKK2NvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGlzIHNldCBlbmFibGluZyBib3RoIFN5bWJpb3MgYW5kIFRla3JhbSBib2FyZHMgdG8gYmUgCit1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIFN5bWJpb3MgY2FyZHMgdXNpbmcgYWxsIHRoZWlyIGZlYXR1cmVzLCBpbmNsdWRpbmcKKyJkaWZmIiBzdXBwb3J0LiAoImxlZCBwaW4iIHN1cHBvcnQgZm9yIFN5bWJpb3MgY29tcGF0aWJsZSBjYXJkcyBjYW4gcmVtYWluCitlbmFibGVkIHdoZW4gdXNpbmcgVGVrcmFtIGNhcmRzLiBJdCBkb2VzIG5vdGhpbmcgdXNlZnVsIGZvciBUZWtyYW0gaG9zdAorYWRhcHRvcnMgYnV0IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zIGVpdGhlci4pCisKK1RoZSBwYXJhbWV0ZXJzIHRoZSBkcml2ZXIgaXMgYWJsZSB0byBnZXQgZnJvbSB0aGUgTlZSQU0gZGVwZW5kIG9uIHRoZSAKK2RhdGEgZm9ybWF0IHVzZWQsIGFzIGZvbGxvdzoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVrcmFtIGZvcm1hdCAgICAgIFN5bWJpb3MgZm9ybWF0CitHZW5lcmFsIGFuZCBob3N0IHBhcmFtZXRlcnMKKyAgICBCb290IG9yZGVyICAgICAgICAgICAgICAgICAgICAgICAgIE4gICAgICAgICAgICAgICAgICAgWQorICAgIEhvc3QgU0NTSSBJRCAgICAgICAgICAgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgU0NTSSBwYXJpdHkgY2hlY2tpbmcgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBWZXJib3NlIGJvb3QgbWVzc2FnZXMgICAgICAgICAgICAgIE4gICAgICAgICAgICAgICAgICAgWQorU0NTSSBkZXZpY2VzIHBhcmFtZXRlcnMKKyAgICBTeW5jaHJvbm91cyB0cmFuc2ZlciBzcGVlZCAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFdpZGUgMTYgLyBOYXJyb3cgICAgICAgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgVGFnZ2VkIENvbW1hbmQgUXVldWluZyBlbmFibGVkICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBEaXNjb25uZWN0aW9ucyBlbmFibGVkICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFNjYW4gYXQgYm9vdCB0aW1lICAgICAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCisKK0luIG9yZGVyIHRvIHNwZWVkIHVwIHRoZSBzeXN0ZW0gYm9vdCwgZm9yIGVhY2ggZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aG91dCAKK3RoZSAic2NhbiBhdCBib290IHRpbWUiIG9wdGlvbiwgdGhlIGRyaXZlciBmb3JjZXMgYW4gZXJyb3Igb24gdGhlIAorZmlyc3QgVEVTVCBVTklUIFJFQURZIGNvbW1hbmQgcmVjZWl2ZWQgZm9yIHRoaXMgZGV2aWNlLgorCisKKzE3LjIgU3ltYmlvcyBOVlJBTSBsYXlvdXQKKwordHlwaWNhbCBkYXRhIGF0IE5WUkFNIGFkZHJlc3MgMHgxMDAgKDUzYzgxMGEgTlZSQU0pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDAgMDAKKzY0IDAxCis4ZSAwYgorCiswMCAzMCAwMCAwMCAwMCAwMCAwNyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwNyAwNCAxMCAwNCAwMCAwMCAKKworMDQgMDAgMGYgMDAgMDAgMTAgMDAgNTAgMDAgMDAgMDEgMDAgMDAgNjIgCiswNCAwMCAwMyAwMCAwMCAxMCAwMCA1OCAwMCAwMCAwMSAwMCAwMCA2MyAKKzA0IDAwIDAxIDAwIDAwIDEwIDAwIDQ4IDAwIDAwIDAxIDAwIDAwIDYxIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKworMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCitmZSBmZQorMDAgMDAKKzAwIDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTlZSQU0gbGF5b3V0IGRldGFpbHMKKworTlZSQU0gQWRkcmVzcyAweDAwMC0weDBmZiBub3QgdXNlZAorICAgICAgICAgICAgICAweDEwMC0weDI2ZiBpbml0aWFsaXNlZCBkYXRhCisgICAgICAgICAgICAgIDB4MjcwLTB4N2ZmIG5vdCB1c2VkCisKK2dlbmVyYWwgbGF5b3V0CisKKyAgICAgICAgaGVhZGVyICAtICAgNiBieXRlcywKKyAgICAgICAgZGF0YSAgICAtIDM1NiBieXRlcyAoY2hlY2tzdW0gaXMgYnl0ZSBzdW0gb2YgdGhpcyBkYXRhKQorICAgICAgICB0cmFpbGVyIC0gICA2IGJ5dGVzCisgICAgICAgICAgICAgICAgICAtLS0KKyAgICAgICAgdG90YWwgICAgIDM2OCBieXRlcworCitkYXRhIGFyZWEgbGF5b3V0CisKKyAgICAgICAgY29udHJvbGxlciBzZXQgdXAgIC0gIDIwIGJ5dGVzCisgICAgICAgIGJvb3QgY29uZmlndXJhdGlvbiAtICA1NiBieXRlcyAoNHgxNCBieXRlcykKKyAgICAgICAgZGV2aWNlIHNldCB1cCAgICAgIC0gMTI4IGJ5dGVzICgxNng4IGJ5dGVzKQorICAgICAgICB1bnVzZWQgKHNwYXJlPykgICAgLSAxNTIgYnl0ZXMgKDE5eDggYnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLQorICAgICAgICB0b3RhbCAgICAgICAgICAgICAgICAzNTYgYnl0ZXMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2hlYWRlcgorCiswMCAwMCAgIC0gPz8gc3RhcnQgbWFya2VyCis2NCAwMSAgIC0gYnl0ZSBjb3VudCAobHNiL21zYiBleGNsdWRlcyBoZWFkZXIvdHJhaWxlcikKKzhlIDBiICAgLSBjaGVja3N1bSAobHNiL21zYiBleGNsdWRlcyBoZWFkZXIvdHJhaWxlcikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjb250cm9sbGVyIHNldCB1cAorCiswMCAzMCAwMCAwMCAwMCAwMCAwNyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwNyAwNCAxMCAwNCAwMCAwMAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICAgLS0gaG9zdCBJRAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgLS1SZW1vdmFibGUgTWVkaWEgU3VwcG9ydAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICAweDAwID0gbm9uZQorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICAweDAxID0gQm9vdGFibGUgRGV2aWNlCisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIDB4MDIgPSBBbGwgd2l0aCBNZWRpYQorICAgICAgICAgICAgICAgICAgIHwgICAgIHwKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgLS1mbGFnIGJpdHMgMgorICAgICAgICAgICAgICAgICAgIHwgICAgICAgIDB4MDAwMDAwMDE9IHNjYW4gb3JkZXIgaGktPmxvdworICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAoZGVmYXVsdCAweDAwIC0gc2NhbiBsb3ctPmhpKQorICAgICAgICAgICAgICAgICAgICAtLWZsYWcgYml0cyAxCisgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgc2NhbSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMCBwYXJpdHkgZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgdmVyYm9zZSBib290IG1zZ3MKKworcmVtYWluaW5nIGJ5dGVzIHVua25vd24gLSB0aGV5IGRvIG5vdCBhcHBlYXIgdG8gY2hhbmdlIGluIG15CitjdXJyZW50IHNldCB1cCBmb3IgYW55IG9mIHRoZSBjb250cm9sbGVycy4KKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKyhSZW1vdmFibGUgTWVkaWEgYWRkZWQgU3ltYmlvcyBCSU9TIHZlcnNpb24gNC4wOSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib290IGNvbmZpZ3VyYXRpb24KKworYm9vdCBvcmRlciBzZXQgYnkgb3JkZXIgb2YgdGhlIGRldmljZXMgaW4gdGhpcyB0YWJsZQorCiswNCAwMCAwZiAwMCAwMCAxMCAwMCA1MCAwMCAwMCAwMSAwMCAwMCA2MiAtLSAxc3QgY29udHJvbGxlcgorMDQgMDAgMDMgMDAgMDAgMTAgMDAgNTggMDAgMDAgMDEgMDAgMDAgNjMgICAgMm5kIGNvbnRyb2xsZXIKKzA0IDAwIDAxIDAwIDAwIDEwIDAwIDQ4IDAwIDAwIDAxIDAwIDAwIDYxICAgIDNyZCBjb250cm9sbGVyCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgICA0dGggY29udHJvbGxlcgorICAgICAgIHwgIHwgIHwgIHwgICAgIHwgICAgICAgIHwgICAgIHwgIHwKKyAgICAgICB8ICB8ICB8ICB8ICAgICB8ICAgICAgICB8ICAgICAgLS0tLSBQQ0kgaW8gcG9ydCBhZHIKKyAgICAgICB8ICB8ICB8ICB8ICAgICB8ICAgICAgICAgLS0weDAxIGluaXQvc2NhbiBhdCBib290IHRpbWUKKyAgICAgICB8ICB8ICB8ICB8ICAgICAgLS1QQ0kgZGV2aWNlL2Z1bmN0aW9uIG51bWJlciAoMHhkZGRkZGZmZikKKyAgICAgICB8ICB8ICAgLS0tLS0gPz8gUENJIHZlbmRvciBJRCAobHNiL21zYikKKyAgICAgICAgLS0tLVBDSSBkZXZpY2UgSUQgKGxzYi9tc2IpCisKKz8/IHVzZSBvZiB0aGlzIGRhdGEgaXMgYSBndWVzcyBidXQgc2VlbXMgcmVhc29uYWJsZQorCityZW1haW5pbmcgYnl0ZXMgdW5rbm93biAtIHRoZXkgZG8gbm90IGFwcGVhciB0byBjaGFuZ2UgaW4gbXkKK2N1cnJlbnQgc2V0IHVwCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGV2aWNlIHNldCB1cCAodXAgdG8gMTYgZGV2aWNlcyAtIGluY2x1ZGVzIGNvbnRyb2xsZXIpCisKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIC0gaWQgMAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgLSBpZCAxNQorIHwgICAgIHwgIHwgIHwgICAgIHwgIHwKKyB8ICAgICB8ICB8ICB8ICAgICAgLS0tLXRpbWVvdXQgKGxzYi9tc2IpCisgfCAgICAgfCAgfCAgIC0tc3luY2ggcGVyaW9kICgweD8/IDQwIE10cmFucy9zZWMtIGZhc3QgNDApIChwcm9iYWJseSAweDI4KQorIHwgICAgIHwgIHwgICAgICAgICAgICAgICAgICAoMHgzMCAyMCBNdHJhbnMvc2VjLSBmYXN0IDIwKQorIHwgICAgIHwgIHwgICAgICAgICAgICAgICAgICAoMHg2NCAxMCBNdHJhbnMvc2VjLSBmYXN0ICkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4YzggIDUgTXRyYW5zL3NlYykKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4MDAgIGFzeW5jaHJvbm91cykKKyB8ICAgICB8ICAgLS0gPz8gbWF4IHN5bmMgb2Zmc2V0ICgweDA4IGluIE5WUkFNIG9uIDUzYzgxMGEpIAorIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAgaW4gTlZSQU0gb24gNTNjODc1KQorIHwgICAgICAtLWRldmljZSBidXMgd2lkdGggKDB4MDggbmFycm93KQorIHwgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAgMTYgYml0IHdpZGUpCisgIC0tZmxhZyBiaXRzCisgICAgMHgwMDAwMDAwMSAtIGRpc2Nvbm5lY3QgZW5hYmxlZAorICAgIDB4MDAwMDAwMTAgLSBzY2FuIGF0IGJvb3QgdGltZQorICAgIDB4MDAwMDAxMDAgLSBzY2FuIGx1bnMKKyAgICAweDAwMDAxMDAwIC0gcXVldWUgdGFncyBlbmFibGVkCisKK3JlbWFpbmluZyBieXRlcyB1bmtub3duIC0gdGhleSBkbyBub3QgYXBwZWFyIHRvIGNoYW5nZSBpbiBteQorY3VycmVudCBzZXQgdXAKKworPz8gdXNlIG9mIHRoaXMgZGF0YSBpcyBhIGd1ZXNzIGJ1dCBzZWVtcyByZWFzb25hYmxlIAorKGJ1dCBpdCBjb3VsZCBiZSBtYXggYnVzIHdpZHRoKQorCitkZWZhdWx0IHNldCB1cCBmb3IgNTNjODEwYSBOVlJBTQorZGVmYXVsdCBzZXQgdXAgZm9yIDUzYzg3NSBOVlJBTSAtIGJ1cyB3aWR0aCAgICAgLSAweDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3luYyBvZmZzZXQgPyAtIDB4MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzeW5jIHBlcmlvZCAgIC0gMHgzMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz8/IHNwYXJlIGRldmljZSBzcGFjZSAoMzIgYml0IGJ1cyA/PykKKworMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgICgxOXg4Ynl0ZXMpCisuCisuCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RyYWlsZXIKKworZmUgZmUgICAtID8gZW5kIG1hcmtlciA/CiswMCAwMAorMDAgMDAKKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCisxNy4zIFRla3JhbSBOVlJBTSBsYXlvdXQKKworbnZyYW0gNjR4MTYgKDEwMjQgYml0KQorCitEcml2ZSBzZXR0aW5ncworCitEcml2ZSBJRCAwLTE1IChhZGRyIDB4MHl5eXkwID0gZGV2aWNlIHNldHVwLCB5eXl5ID0gSUQpCisgICAgICAgICAgICAgIChhZGRyIDB4MHl5eXkxID0gMHgwMDAwKQorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCAgLS0tLS0gcGFyaXR5IGNoZWNrICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCAgLS0tLS0tLSBzeW5jIG5lZyAgICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgIC0tLS0tLS0tLSBkaXNjb25uZWN0ICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICAgLS0tLS0tLS0tLS0gc3RhcnQgY21kICAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgIC0tLS0tLS0tLS0tLS0tIHRhZ2dlZCBjbWRzICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAtLS0tLS0tLS0tLS0tLS0tIHdpZGUgbmVnICAgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfAorICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzeW5jIHJhdGUgICAgICAwIC0gMTAuMCBNdHJhbnMvc2VjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgOC4wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSAgNi42CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAgNS43CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgLSAgNS4wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgLSAgNC4wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgLSAgMy4wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgLSAgMi4wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgLSAgMi4wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLSAyMC4wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgLSAxNi43CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgLSAxMy45CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgLSAxMS45CisKK0dsb2JhbCBzZXR0aW5ncworCitIb3N0IGZsYWdzIDAgKGFkZHIgMHgxMDAwMDAsIDMyKSAKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICB8IHwgfCB8ICB8IHwgfCB8ICAgICAgICAgICB8IHwgfCB8CisgICAgfCB8IHwgfCAgfCB8IHwgfCAgICAgICAgICAgIC0tLS0tLS0tLS0tIGhvc3QgSUQgICAgMHgwMCAtIDB4MGYKKyAgICB8IHwgfCB8ICB8IHwgfCB8CisgICAgfCB8IHwgfCAgfCB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1cHBvcnQgZm9yICAgIDAgLSBvZmYKKyAgICB8IHwgfCB8ICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgPiAyIGRyaXZlcyAgICAgMSAtIG9uCisgICAgfCB8IHwgfCAgfCB8IHwgCisgICAgfCB8IHwgfCAgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1cHBvcnQgZHJpdmVzIDAgLSBvZmYKKyAgICB8IHwgfCB8ICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAxR2J5dGVzICAgICAgMSAtIG9uCisgICAgfCB8IHwgfCAgfCB8CisgICAgfCB8IHwgfCAgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGJ1cyByZXNldCBvbiAgIDAgLSBvZmYKKyAgICB8IHwgfCB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3dlciBvbiAgICAgMSAtIG9uCisgICAgfCB8IHwgfCAgfAorICAgIHwgfCB8IHwgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhY3RpdmUgbmVnICAgICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgIHwgfCB8IHwKKyAgICB8IHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW1tIHNlZWsgICAgICAgMCAtIG9mZgorICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwgfAorICAgIHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzY2FuIGx1bnMgICAgICAwIC0gb2ZmCisgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgIHwgfAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZW1vdmFibGUgICAgICAwIC0gZGlzYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBCSU9TIGRldiAgICAxIC0gYm9vdCBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtIGFsbAorCitIb3N0IGZsYWdzIDEgKGFkZHIgMHgxMDAwMDEsIDMzKQorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgfCB8IHwgCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgLS0tLS0tLS0tIGJvb3QgZGVsYXkgICAgIDAgLSAgIDMgc2VjCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgIDUKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtICAxMAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gIDIwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgLSAgMzAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAtICA2MAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IC0gMTIwCisgICAgICAgICAgICAgICB8IHwgfAorICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYXggdGFnIGNtZHMgICAwIC0gIDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSAgOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gMTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtIDMyCisKK0hvc3QgZmxhZ3MgMiAoYWRkciAweDEwMDAxMCwgMzQpCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLSBGMi9GNiBlbmFibGUgICAwIC0gb2ZmID8/PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24gID8/PworCitjaGVja3N1bSAoYWRkciAweDExMTExMSkKKworY2hlY2tzdW0gPSAweDEyMzQgLSAoc3VtIGFkZHIgMC02MykKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWZhdWx0IG52cmFtIGRhdGE6CisKKzB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAKKzB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAKKzB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAKKzB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgCisKKzB4MGYwNyAweDA0MDAgMHgwMDAxIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAKKzB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAKKzB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAKKzB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweGZiYmMKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFbmQgb2YgTGludXggU1lNLTIgZHJpdmVyIGRvY3VtZW50YXRpb24gZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjUyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHQKQEAgLTAsMCArMSw0NDkgQEAKK1RoZSB0bXNjc2ltIGRyaXZlcgorPT09PT09PT09PT09PT09PT09CisKKzEuIFB1cnBvc2UgYW5kIGhpc3RvcnkKKzIuIEluc3RhbGxhdGlvbgorMy4gRmVhdHVyZXMKKzQuIENvbmZpZ3VyYXRpb24gdmlhIC9wcm9jL3Njc2kvdG1zY3NpbS8/Cis1LiBDb25maWd1cmF0aW9uIHZpYSBib290L21vZHVsZSBwYXJhbXMKKzYuIFBvdGVudGlhbCBpbXByb3ZlbWVudHMKKzcuIEJ1ZyByZXBvcnRzLCBkZWJ1Z2dpbmcgYW5kIHVwZGF0ZXMKKzguIEFja25vd2xlZGdlbWVudHMKKzkuIENvcHlyaWdodAorCisKKzEuIFB1cnBvc2UgYW5kIGhpc3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSB0bXNjc2ltIGRyaXZlciBzdXBwb3J0cyBQQ0kgU0NTSSBIb3N0IEFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBBTTUzQzk3NAorY2hpcC4gQU01M0M5NzQgYmFzZWQgU0NTSSBhZGFwdGVycyBpbmNsdWRlOiAKKyBUZWtyYW0gREMzOTAsIERDMzkwVAorIERhd2ljb250cm9sIDI5NzQKKyBRTG9naWMgRmFzdCEgUENJIEJhc2ljCisgc29tZSBvbi1ib2FyZCBhZGFwdGVycworKFRoaXMgaXMgbW9zdCBwcm9iYWJseSBub3QgYSBjb21wbGV0ZSBsaXN0KQorCitJdCBoYXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEMuTC4gSHVhbmcgZnJvbSB0aGUgVGVrcmFtIGNvcnAuIHRvIHN1cHBvcnQgdGhlCitUZWtyYW0gREMzOTAoVCkgYWRhcHRlci4gVGhpcyBpcyB3aGVyZSB0aGUgbmFtZSBjb21lcyBmcm9tOiB0bSA9IFRla3JhbQorc2NzaSA9IFNDU0kgZHJpdmVyLCBtID0gQU1EICg/KSBhcyBvcHBvc2VkIHRvIHcgZm9yIHRoZSBEQzM5MFcvVS9GCisoTkNSNTNjOFg1LCBYPTIvNykgZHJpdmVyLiBZZXMsIHRoZXJlIHdhcyBhbHNvIGEgZHJpdmVyIGZvciB0aGUgbGF0dGVyLAordG1zY3Npdywgd2hpY2ggc3VwcG9ydGVkIERDMzkwVy9VL0YgYWRhcHRlcnMuIEl0J3Mgbm90IG1haW50YWluZWQgYW55IG1vcmUsCithcyB0aGUgbmNyNTNjOHh4IGlzIHBlcmZlY3RseSBzdXBwb3J0aW5nIHRoZXNlIGFkcGF0ZXJzIHNpbmNlIHNvbWUgdGltZS4KKworVGhlIGRyaXZlciBmaXJzdCBhcHBlYXJlZCBpbiBBcHJpbCAxOTk2LCBleGNsdXNpdmVseSBzdXBwb3J0ZWQgdGhlIERDMzkwIAorYW5kIGhhcyBiZWVuIGVuaGFuY2VkIHNpbmNlIHRoZW4gaW4gdmFyaW91cyBzdGVwcy4gSW4gTWF5IDE5OTggc3VwcG9ydCBmb3IgCitnZW5lcmFsIEFNNTNDOTc0IGJhc2VkIGFkYXB0ZXJzIGFuZCBzb21lIHBvc3NpYmlsaXRpZXMgdG8gY29uZmlndXJlIGl0IHdlcmUKK2FkZGVkLiBUaGUgbm9uLURDMzkwIHN1cHBvcnQgd29ya3MgYnkgYXNzdW1pbmcgc29tZSB2YWx1ZXMgZm9yIHRoZSBkYXRhCitub3JtYWxseSB0YWtlbiBmcm9tIHRoZSBEQzM5MCBFRVBST00uIFNlZSBiZWxvdyAoY2hhcHRlciA1KSBmb3IgZGV0YWlscy4KKworV2hlbiB1c2luZyB0aGUgREMzOTAsIHRoZSBjb25maWd1cmF0aW9uIGlzIHN0aWxsIGJlIGRvbmUgdXNpbmcgdGhlIERDMzkwCitCSU9TIHNldHVwLiBUaGUgREMzOTAgRUVQUk9NIGlzIHJlYWQgYW5kIHVzZWQgYnkgdGhlIGRyaXZlciwgYW55IGJvb3Qgb3IKK21vZHVsZSBwYXJhbWV0ZXJzIChjaGFwdGVyIDUpIGFyZSBpZ25vcmVkISBIb3dldmVyLCB5b3UgY2FuIGNoYW5nZSBzZXR0aW5ncworZHluYW1pY2FsbHksIGFzIGRlc2NyaWJlZCBpbiBjaGFwdGVyIDQuIAorCitGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBkcml2ZXIncyBoaXN0b3J5LCBzZWUgdGhlIGZpcnN0IGxpbmVzCitvZiB0bXNjc2ltLmMuCitUaGUgbnVtYmVyaW5nIHNjaGVtZSBpc24ndCBjb25zaXN0ZW50LiBUaGUgZmlyc3QgdmVyc2lvbnMgd2VudCBmcm9tIDEuMDAgdG8KKzEuMTIsIHRoZW4gMS4yMGEgdG8gMS4yMHQuIEZpbmFsbHkgSSBkZWNpZGVkIHRvIHVzZSB0aGUgbmNyNTNjOHh4IHNjaGVtZS4gU28KK3RoZSBuZXh0IHJldmlzaW9ucyB3aWxsIGJlIDIuMGEgdG8gMi4wWCAoc3RhYmxlKSwgMi4xYSB0byAyLjFYIChleHBlcmltZW50YWwpLAorMi4yYSB0byAyLjJYIChzdGFibGUsIGFnYWluKSBldGMuIChYID0gYW55dGhpbmcgYmV0d2VlbiBhIGFuZCB6LikgSWYgSSBzZW5kCitmaXhlcyB0byBwZW9wbGUgZm9yIHRlc3RpbmcsIEkgY3JlYXRlIGludGVybWVkaWF0ZSB2ZXJzaW9ucyB3aXRoIGEgZGlnaXQgCithcHBlbmRlZCwgZS5nLiAyLjBjMy4KKworCisyLiBJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLS0tLQorSWYgeW91IGdvdCBhbnkgcmVjZW50IGtlcm5lbCB3aXRoIHRoaXMgZHJpdmVyIGFuZCBkb2N1bWVudCBpbmNsdWRlZCBpbgorbGludXgvZHJpdmVycy9zY3NpLCB5b3UgYmFzaWNhbGx5IGhhdmUgdG8gZG8gbm90aGluZyBzcGVjaWFsIHRvIHVzZSB0aGlzCitkcml2ZXIuIE9mIGNvdXJzZSB5b3UgaGF2ZSB0byBjaG9vc2UgdG8gY29tcGlsZSBTQ1NJIHN1cHBvcnQgYW5kIERDMzkwKFQpCitzdXBwb3J0IGludG8geW91ciBrZXJuZWwgb3IgYXMgbW9kdWxlIHdoZW4gY29uZmlndXJpbmcgeW91ciBrZXJuZWwgZm9yCitjb21waWxpbmcuCitORVc6IFlvdSBtYXkgYXMgd2VsbCBjb21waWxlIHRoaXMgbW9kdWxlIG91dHNpZGUgeW91ciBrZXJuZWwsIHVzaW5nIHRoZQorc3VwcGxpZWQgTWFrZWZpbGUuCisKKyBJZiB5b3UgZ290IGFuIG9sZCBrZXJuZWwgKHByZSAyLjEuMTI3LCBwcmUgMi4wLjM3cDEpIHdpdGggYW4gb2xkIHZlcnNpb24gb2YKKyB0aGlzIGRyaXZlcjogR2V0IGRjMzkwLTIxMTI1LTIwYi5kaWZmLmd6IG9yIGRjMzkwLTIwMzZwMjEtMjBiMS5kaWZmLmd6IGZyb20KKyBteSB3ZWIgcGFnZSBhbmQgYXBwbHkgdGhlIHBhdGNoLiBBcHBseSBmdXJ0aGVyIHBhdGNoZXMgdG8gdXBncmFkZSB0byB0aGUgCisgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlci4KKworIElmIHlvdSB3YW50IHRvIGRvIGl0IG1hbnVhbGx5LCB5b3Ugc2hvdWxkIGNvcHkgdGhlIGZpbGVzIChkYzM5MC5oLAorIHRtc2NzaW0uaCwgdG1zY3NpbS5jLCBzY3NpaW9tLmMgYW5kIFJFQURNRS50bXNjc2ltKSBmcm9tIHRoaXMgZGlyZWN0b3J5IHRvCisgbGludXgvZHJpdmVycy9zY3NpLiBZb3UgaGF2ZSB0byByZWNvbXBpbGUgeW91ciBrZXJuZWwvbW9kdWxlIG9mIGNvdXJzZS4KKworIFlvdSBzaG91bGQgYXBwbHkgdGhlIHRocmVlIHBhdGNoZXMgaW5jbHVkZWQgaW4gZGMzOTAtMTIwLWtlcm5lbC5kaWZmCisgKEFwcGx5aW5nIHRoZW06IGNkIC91c3Ivc3JjOyBwYXRjaCAtcDAgPH4vZGMzOTAtMTIwLWtlcm5lbC5kaWZmKQorIFRoZSBwYXRjaGVzIGFyZSBhZ2FpbnN0IDIuMS4xMjUsIHNvIHlvdSBtaWdodCBoYXZlIHRvIG1hbnVhbGx5IHJlc29sdmUKKyByZWplY3Rpb25zIHdoZW4gYXBwbHlpbmcgdG8gYW5vdGhlciBrZXJuZWwgdmVyc2lvbi4KKworIFRoZSBwYXRjaGVzIHdpbGwgdXBkYXRlIHRoZSBrZXJuZWwgc3RhcnR1cCBjb2RlIHRvIGFsbG93IGJvb3QgcGFyYW1ldGVycyB0bworIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyLCB1cGRhdGUgdGhlIERvY3VtZW50YXRpb24gYW5kIGZpbmFsbHkgb2ZmZXIgeW91IHRoZQorIHBvc3NpYmlsaXR5IHRvIG9taXQgdGhlIG5vbi1EQzM5MCBwYXJ0cyBvZiB0aGUgZHJpdmVyLgorIChCeSBzZWxlY3RpbmcgIk9taXQgc3VwcG9ydCBmb3Igbm9uIERDMzkwIiB5b3UgYmFzaWNhbGx5IGRpc2FibGUgdGhlCisgZW11bGF0aW9uIG9mIGEgREMzOTAgRUVQUk9NIGZvciBub24gREMzOTAgYWRhcHRlcnMuIFRoaXMgc2F2ZXMgYSBmZXcgYnl0ZXMKKyBvZiBtZW1vcnkuKQorCitJZiB5b3UgZ290IGEgdmVyeSBvbGQga2VybmVsIHdpdGhvdXQgdGhlIHRtc2NzaW0gZHJpdmVyIChwcmUgMi4wLjMxKQorSSByZWNvbW1lbmQgdXBncmFkaW5nIHlvdXIga2VybmVsLiBIb3dldmVyLCBpZiB5b3UgZG9uJ3Qgd2FudCB0bywgcGxlYXNlCitjb250YWN0IG1lIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgcGF0Y2hlcy4KKworCitVcGdyYWRpbmcgYSBTQ1NJIGRyaXZlciBpcyBhbHdheXMgYSBkZWxpY2F0ZSB0aGluZyB0byBkby4gVGhlIDIuMCBkcml2ZXIgaGFzCitwcm92ZW4gc3RhYmxlIG9uIG1hbnkgc3lzdGVtcywgYnV0IGl0J3Mgc3RpbGwgYSBnb29kIGlkZWEgdG8gdGFrZSBzb21lCitwcmVjYXV0aW9ucy4gSW4gYW4gaWRlYWwgd29ybGQgeW91IHdvdWxkIGhhdmUgYSBmdWxsIGJhY2t1cCBvZiB5b3VyIGRpc2tzLgorVGhlIHdvcmxkIGlzbid0IGlkZWFsIGFuZCBtb3N0IHBlb3BsZSBkb24ndCBoYXZlIGZ1bGwgYmFja3VwcyAobWUgbmVpdGhlcikuCitTbyB0YWtlIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgbWVhc3VyZXM6CisqIG1ha2UgeW91ciBrZXJuZWwgcmVtb3VudCB0aGUgRlMgcmVhZC1vbmx5IG9uIGRldGVjdGluZyBhbiBlcnJvcjoKKyAgdHVuZTJmcyAtZSByZW1vdW50LXJvIC9kZXYvc2Q/PworKiBoYXZlIGNvcGllcyBvZiB5b3VyIFNDU0kgZGlzaydzIHBhcnRpdGlvbiB0YWJsZXMgb24gc29tZSBzYWZlIGxvY2F0aW9uOgorICBkZCBpZj0vZGV2L3NkYSBvZj0vbW50L2Zsb3BweS9zZGEgYnM9NTEyIGNvdW50PTEKKyAgb3IganVzdCBwcmludCBpdCB3aXRoOgorICBmZGlzayAtbCB8IGxwcgorKiBtYWtlIHN1cmUgeW91IGFyZSBhYmxlIHRvIGJvb3QgTGludXggKGUuZy4gZnJvbSBmbG9wcHkgZGlzayB1c2luZyBJbml0UkQpCisgIGlmIHlvdXIgU0NTSSBkaXNrIGdldHMgY29ycnVwdGVkLiBZb3UgY2FuIHVzZSAKKyAgZnRwOi8vc3R1ZGVudC5waHlzaWsudW5pLWRvcnRtdW5kLmRlL3B1Yi9saW51eC9rZXJuZWwvYm9vdGRpc2suZ3oKKworT25lIG1vcmUgd2FybmluZzogSSB1c2VkIHRvIG92ZXJjbG9jayBteSBQQ0kgYnVzIHRvIDQxLjY3IE1Iei4gTXkgVGVrcmFtCitEQzM5MEYgKFN5bTUzYzg3NSkgYWNjZXB0ZWQgdGhpcyBhcyB3ZWxsIGFzIG15IE1pbGxlbml1bS4gQnV0IHRoZSBBbTUzQzk3NAorcHJvZHVjZWQgZXJyb3JzIGFuZCBzdGFydGVkIHRvIGNvcnJ1cHQgbXkgZGlza3MuIFNvIGRvbid0IGRvIHRoYXQhIEEgMzcuNTAKK01IeiBQQ0kgYnVzIHdvcmtzIGZvciBtZSwgdGhvdWdoLCBidXQgSSBkb24ndCByZWNvbW1lbmQgdXNpbmcgaGlnaGVyIGNsb2NrcwordGhhbiB0aGUgMzMuMzMgTUh6IGJlaW5nIGluIHRoZSBQQ0kgc3BlYy4KKworSWYgeW91IHdhbnQgdG8gc2hhcmUgdGhlIElSUSB3aXRoIGFub3RoZXIgZGV2aWNlIGFuZCB0aGUgZHJpdmVyIHJlZnVzZXMgdG8KK2RvIHNvLCB5b3UgbWlnaHQgc3VjY2VlZCB3aXRoIGNoYW5naW5nIHRoZSBEQzM5MF9JUlEgdHlwZSBpbiB0bXNjc2ltLmMgdG8gCitTQV9TSElSUSB8IFNBX0lOVEVSUlVQVC4KKworCiszLkZlYXR1cmVzCistLS0tLS0tLS0tCistIFNDU0kKKyAqIFRhZ2dlZCBjb21tYW5kIHF1ZXVlaW5nCisgKiBTeW5jIHNwZWVkIHVwIHRvIDEwIE1IegorICogRGlzY29ubmVjdGlvbgorICogTXVsdGlwbGUgTFVOcworCistIEdlbmVyYWwgLyBMaW51eCBpbnRlcmZhY2UKKyAqIFN1cHBvcnQgZm9yIHVwIHRvIDQgQU01M0M5NzQgYWRhcHRlcnMuCisgKiBEQzM5MCBFRVBST00gdXNhZ2Ugb3IgYm9vdC9tb2R1bGUgcGFyYW1zCisgKiBJbmZvcm1hdGlvbiB2aWEgY2F0IC9wcm9jL3Njc2kvdG1zY3NpbS8/CisgKiBEeW5hbWljYWxseSBjb25maWd1cmFibGUgYnkgd3JpdGluZyB0byAvcHJvYy9zY3NpL3Rtc2NzaW0vPworICogRHluYW1pYyBhbGxvY2F0aW9uIG9mIHJlc291cmNlcworICogU01QIHN1cHBvcnQ6IExvY2tpbmcgb24gaW9fcmVxdWVzdCBsb2NrIChMaW51eCAyLjEvMi4yKSBvciBhZGFwdGVyIAorICAgIHNwZWNpZmljIGxvY2tzIChMaW51eCAyLjU/KQorICogVW5pZm9ybSBzb3VyY2UgY29kZSBmb3IgTGludXgtMi54LnkKKyAqIFN1cHBvcnQgZm9yIGR5bi4gYWRkaXRpb24vcmVtb3ZhbCBvZiBkZXZpY2VzIHZpYSBhZGQvcmVtb3ZlLXNpbmdsZS1kZXZpY2UKKyAgIChUcnk6IGVjaG8gInNjc2kgYWRkLXNpbmdsZS1kZXZpY2UgQyBCIFQgVSIgPi9wcm9jL3Njc2kvc2NzaSAKKyAgICBDID0gQ29udHJvbGxlciwgQiA9IEJ1cywgVCA9IFRhcmdldCBTQ1NJIElELCBVID0gVW5pdCBTQ1NJIExVTi4pIAorICAgIFVzZSB3aXRoIGNhcmUhCisgKiBUcnkgdG8gdXNlIHRoZSBwYXJ0aXRpb24gdGFibGUgZm9yIHRoZSBkZXRlcm1pbmF0aW9uIG9mIHRoZSBtYXBwaW5nCisKKworNC4gQ29uZmlndXJhdGlvbiB2aWEgL3Byb2Mvc2NzaS90bXNjc2ltLz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGaXJzdCBvZiBhbGwgbG9vayBhdCB0aGUgb3V0cHV0IG9mIC9wcm9jL3Njc2kvdG1zY3NpbS8/IGJ5IHR5cGluZworIGNhdCAvcHJvYy9zY3NpL3Rtc2NzaW0vPworVGhlICI/IiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgdGhlIFNDU0kgaG9zdCBudW1iZXIuIChUaGUgc2hlbGwgbWlnaHQgZG8gdGhpcworZm9yIHlvdS4pCitZb3Ugd2lsbCBzZWUgc29tZSBpbmZvIHJlZ2FyZGluZyB0aGUgYWRhcHRlciBhbmQsIGF0IHRoZSBlbmQsIGEgbGlzdGluZyBvZgordGhlIGF0dGFjaGVkIGRldmljZXMgYW5kIHRoZWlyIHNldHRpbmdzLgorCitIZXJlJ3MgYW4gZXhhbXBsZToKK2dhcmxvZmZAa3VydDovaG9tZS9nYXJsb2ZmID4gY2F0IC9wcm9jL3Njc2kvdG1zY3NpbS8wCitUZWtyYW0gREMzOTAvQU01M0M5NzQgUENJIFNDU0kgSG9zdCBBZGFwdGVyLCBEcml2ZXIgVmVyc2lvbiAyLjBlNyAyMDAwLTExLTI4CitTQ1NJIEhvc3QgTnIgMSwgQU01M0M5NzQgQWRhcHRlciBOciAwCitJT1BvcnRCYXNlIDB4YjAwMCwgSVJRIDEwCitNYXhJRCA4LCBNYXhMVU4gOCwgQWRhcHRlcklEIDYsIFNlbFRpbWVvdXQgMjUwIG1zLCBEZWxheVJlc2V0IDEgcworVGFnTWF4TnVtIDE2LCBTdGF0dXMgMHgwMCwgQUNCRmxhZyAweDAwLCBHbGl0Y2hFYXRlciAyNCBucworU3RhdGlzdGljczogQ21uZHMgMTQ3MDE2NSwgQ21uZHMgbm90IHNlbnQgZGlyZWN0bHkgMCwgT3V0IG9mIFNSQiBjb25kcyAwCisgICAgICAgICAgICBMb3N0IGFyYml0cmF0aW9ucyA1ODcsICBTZWwuIGNvbm5lY3RlZCAwLCBDb25uZWN0ZWQ6IE5vCitOciBvZiBhdHRhY2hlZCBkZXZpY2VzOiA0LCBOciBvZiBEQ0JzOiA0CitNYXAgb2YgYXR0YWNoZWQgTFVOczogMDEgMDAgMDAgMDMgMDEgMDAgMDAgMDAKK0lkeCBJRCBMVU4gUHJ0eSBTeW5jIERzQ24gU25kUyBUYWdRIE5lZ29QZXJpb2QgU3luY1NwZWVkIFN5bmNPZmZzIE1heENtZAorMDAgIDAwICAwMCAgWWVzICBZZXMgIFllcyAgWWVzICBZZXMgICAxMDAgbnMgICAgMTAuMCBNICAgICAgMTUgICAgICAxNgorMDEgIDAzICAwMCAgWWVzICBZZXMgIFllcyAgWWVzICBObyAgICAxMDAgbnMgICAgMTAuMCBNICAgICAgMTUgICAgICAwMQorMDIgIDAzICAwMSAgWWVzICBZZXMgIFllcyAgWWVzICBObyAgICAxMDAgbnMgICAgMTAuMCBNICAgICAgMTUgICAgICAwMQorMDMgIDA0ICAwMCAgWWVzICBZZXMgIFllcyAgWWVzICBObyAgICAxMDAgbnMgICAgMTAuMCBNICAgICAgMTUgICAgICAwMQorCitOb3RlIHRoYXQgdGhlIHNldHRpbmdzIE1heElEIGFuZCBNYXhMVU4gYXJlIG5vdCB6ZXJvLSBidXQgb25lLWJhc2VkLCB3aGljaAorbWVhbnMgdGhhdCBhIHNldHRpbmcgTWF4TFVOPTQsIHdpbGwgcmVzdWx0IGluIHRoZSBzdXBwb3J0IG9mIExVTnMgMC4uMy4gVGhpcworaXMgc29tZWhvdyBpbmNvbnZlbmllbnQsIGJ1dCB0aGUgd2F5IHRoZSBtaWQtbGV2ZWwgU0NTSSBjb2RlIGV4cGVjdHMgaXQgdG8gYmUuCisKK0FDQiBhbmQgRENCIGFyZSBhY3JvbnltcyBmb3IgQWRhcHRlciBDb250cm9sIEJsb2NrIGFuZCBEZXZpY2UgQ29udHJvbCBCbG9jay4KK1RoZXNlIGFyZSBkYXRhIHN0cnVjdHVyZXMgb2YgdGhlIGRyaXZlciBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZQorYWRhcHRlciBhbmQgdGhlIGNvbm5lY3RlZCBTQ1NJIGRldmljZXMgcmVzcGVjdGl2ZWx5LgorCitJZHggaXMgdGhlIGRldmljZSBpbmRleCAoanVzdCBhIGNvbnNlY3V0aXZlIG51bWJlciBmb3IgdGhlIGRyaXZlciksIElEIGFuZAorTFVOIGFyZSB0aGUgU0NTSSBJRCBhbmQgTFVOLCBQcnR5IG1lYW5zIFBhcml0eSBjaGVja2luZywgU3luYyBzeW5jaHJvbm91cworbmVnb3RpYXRpb24sIERzQ24gRGlzY29ubmVjdGlvbiwgU25kUyBTZW5kIFN0YXJ0IGNvbW1hbmQgb24gc3RhcnR1cCAobm90Cit1c2VkIGJ5IHRoZSBkcml2ZXIpIGFuZCBUYWdRIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nLiBOZWdvUGVyaW9kIGFuZAorU3luY1NwZWVkIGFyZSBzb21laG93IHJlZHVuZGFudCwgYmVjYXVzZSB0aGV5IGFyZSByZWNpcHJvY2FsIHZhbHVlcyAKKygxIC8gMTEyIG5zID0gOC45IE1IeikuIEF0IGxlYXN0IGluIHRoZW9yeS4gVGhlIGRyaXZlciBpcyBhYmxlIHRvIGFkanVzdCB0aGUKK05lZ29QZXJpb2QgbW9yZSBhY2N1cmF0ZSAoNG5zKSB0aGFuIHRoZSBTeW5jU3BlZWQgKDEgLyAyNW5zKS4gSSBkb24ndCBrbm93CitpZiBjZXJ0YWluIGRldmljZXMgd2lsbCBoYXZlIHByb2JsZW1zIHdpdGggdGhpcyBkaXNjcmVwYW5jeS4gTWF4LiBzcGVlZCBpcworMTAgTUh6IGNvcnJlc3AuIHRvIGEgbWluLiBOZWdvUGVyaW9kIG9mIDEwMCBucy4gCisoVGhlIGRyaXZlciBhbGxvd3Mgc2xpZ2h0bHkgaGlnaGVyIHNwZWVkcyBpZiB0aGUgZGV2aWNlcyAoVWx0cmEgU0NTSSkgYWNjZXB0CitpdCwgYnV0IHRoYXQncyBvdXQgb2YgYWRhcHRlciBzcGVjLCBvbiB5b3VyIG93biByaXNrIGFuZCB1bmxpa2VseSB0byBpbXByb3ZlCitwZXJmb3JtYW5jZS4gWW91J3JlIGxpa2VseSB0byBjcmFzaCB5b3VyIGRpc2tzLikgCitTeW5jT2ZmcyBpcyB0aGUgb2Zmc2V0IHVzZWQgZm9yIHN5bmNocm9ub3VzIG5lZ290aWF0aW9uczsgbWF4LiBpcyAxNS4gCitUaGUgbGFzdCB2YWx1ZXMgYXJlIG9ubHkgc2hvd24sIGlmIFN5bmMgaXMgZW5hYmxlZC4gKE5lZ29QZXJpb2QgaXMgc3RpbGwKK2Rpc3BsYXllZCBpbiBicmFja2V0cyB0byBzaG93IHRoZSB2YWx1ZXMgd2hpY2ggd2lsbCBiZSB1c2VkIGFmdGVyIGVuYWJsaW5nCitTeW5jLikKK01heENtZCBpc3QgdGhlIG51bWJlciBvZiBjb21tYW5kcyAoPXRhZ3MpIHdoaWNoIGNhbiBiZSBwcm9jZXNzZWQgYXQgdGhlIHNhbWUKK3RpbWUgYnkgdGhlIGRldmljZS4KKworSWYgeW91IHdhbnQgdG8gY2hhbmdlIGEgc2V0dGluZywgeW91IGNhbiBkbyB0aGF0IGJ5IHdyaXRpbmcgdG8KKy9wcm9jL3Njc2kvdG1zY3NpbS8/LiBCYXNpY2FsbHkgeW91IGhhdmUgdG8gaW1pdGF0ZSB0aGUgb3V0cHV0IG9mIGRyaXZlci4KKyhEb24ndCB1c2UgdGhlIGJyYWNrZXRzIGZvciBOZWdvUGVyaW9kIG9uIFN5bmMgZGlzYWJsZWQgZGV2aWNlcy4pCitZb3UgZG9uJ3QgaGF2ZSB0byBjYXJlIGFib3V0IGNhcGl0YWxpc2F0aW9uLiBUaGUgZHJpdmVyIHdpbGwgYWNjZXB0IHNwYWNlLAordGFiLCBjb21tYSwgPSBhbmQgOiBhcyBzZXBhcmF0b3JzLgorCitUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgY2hhbmdlczogCisKKygxKSBDaGFuZ2UgZHJpdmVyIHNldHRpbmdzOiAKKyAgICBZb3UgdHlwZSB0aGUgbmFtZXMgb2YgdGhlIHBhcmFtZXRlcnMgYW5kIHRoZSBwYXJhbXMgZm9sbG93aW5nIGl0LgorICAgIEV4YW1wbGU6CisgICAgIGVjaG8gIk1heExVTj04IHNlbHRpbWVvdXQgMjAwIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKworICAgIE5vdGUgdGhhdCB5b3UgY2FuIG9ubHkgY2hhbmdlIE1heElELCBNYXhMVU4sIEFkYXB0ZXJJRCwgU2VsVGltZU91dCwKKyAgICBUYWdNYXhOdW0sIEFDQkZsYWcsIEdsaXRjaEVhdGVyIGFuZCBEZWxheVJlc2V0LiBEb24ndCBjaGFuZ2UgQUNCRmxhZworICAgIHVubGVzcyB5b3Ugd2FudCB0byBzZWUgd2hhdCBoYXBwZW5zLCBpZiB0aGUgZHJpdmVyIGhhbmdzLgorCisoMikgQ2hhbmdlIGRldmljZSBzZXR0aW5nczogWW91IHdyaXRlIGEgY29uZmlnIGxpbmUgdG8gdGhlIGRyaXZlci4gVGhlIE5yCisgICAgbXVzdCBtYXRjaCB0aGUgSUQgYW5kIExVTiBnaXZlbi4gSWYgeW91IGdpdmUgIi0iIGFzIHBhcmFtZXRlciwgaXQgaXMKKyAgICBpZ25vcmVkIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzZXR0aW5nIHdvbid0IGJlIGNoYW5nZWQuIAorICAgIFlvdSBjYW4gdXNlICJ5IiBvciAibiIgaW5zdGVhZCBvZiAiWWVzIiBhbmQgIk5vIiBpZiB5b3Ugd2FudCB0by4KKyAgICBZb3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGEgZnVsbCBsaW5lLiBUaGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgcGVyZm9ybXMKKyAgICBhbiBJTlFVSVJZIG9uIHRoZSBkZXZpY2UgaWYgbmVjZXNzYXJ5IHRvIGNoZWNrIGlmIGl0IGlzIGNhcGFibGUgdG8gb3BlcmF0ZQorICAgIHdpdGggdGhlIGdpdmVuIHNldHRpbmdzIChTeW5jLCBUYWdRKS4KKyAgICBFeGFtcGxlczoKKyAgICAgZWNobyAiMCAwIDAgeSB5IHkgLSB5IC0gMTAgIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKyAgICAgZWNobyAiMyA1IDAgeSBuIHkgIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKworICAgIFRvIGdpdmUgYSBzaG9ydCBleHBsYW5hdGlvbiBvZiB0aGUgZmlyc3QgZXhhbXBsZTogCisgICAgVGhlIGZpcnN0IHRocmVlIG51bWJlcnMsICIwIDAgMCIgKERldmljZSBpbmRleCAwLCBTQ1NJIElEIDAsIFNDU0kgTFVOIDApLAorICAgIHNlbGVjdCB0aGUgZGV2aWNlIHRvIHdoaWNoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcHBseS4gTm90ZSB0aGF0IGl0CisgICAgd291bGQgYmUgc3VmZmljaWVudCB0byB1c2UgdGhlIGluZGV4IG9yIGJvdGggU0NTSSBJRCBhbmQgTFVOLCBidXQgSSBjaG9zZQorICAgIHRvIHJlcXVpcmUgYWxsIHRocmVlIHRvIGhhdmUgYSBzeW50YXggc2ltaWxhciB0byB0aGUgb3V0cHV0LgorICAgIFRoZSBmb2xsb3dpbmcgInkgeSB5IC0geSIgZW5hYmxlcyBQYXJpdHkgY2hlY2tpbmcsIGVuYWJsZXMgU3luY2hyb25vdXMKKyAgICB0cmFuc2ZlcnMsIERpc2Nvbm5lY3Rpb24sIGxlYXZlcyBTZW5kIFN0YXJ0IChub3QgdXNlZCkgdW50b3VjaGVkIGFuZAorICAgIGVuYWJsZXMgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcgZm9yIHRoZSBzZWxlY3RlZCBkZXZpY2UuIFRoZSAiLSIgc2tpcHMKKyAgICB0aGUgTmVnb3RpYXRpb24gUGVyaW9kIHNldHRpbmcgYnV0IHRoZSAiMTAiIHNldHMgdGhlIG1heCBzeW5jLiBzcGVlZCB0bworICAgIDEwIE1Iei4gSXQncyB1c2VsZXNzIHRvIHNwZWNpZnkgYm90aCBOZWdvUGVyaW9kIGFuZCBTeW5jU3BlZWQgYXMKKyAgICBkaXNjdXNzZWQgYWJvdmUuIFRoZSB2YWx1ZXMgdXNlZCBpbiB0aGlzIGV4YW1wbGUgd2lsbCByZXN1bHQgaW4gbWF4aW11bQorICAgIHBlcmZvcm1hbmNlLgorCisoMykgU3BlY2lhbCBjb21tYW5kczogWW91IGNhbiBmb3JjZSBhIFNDU0kgYnVzIHJlc2V0LCBhbiBJTlFVSVJZIGNvbW1hbmQsIHRoZQorICAgIHJlbW92YWwgb3IgdGhlIGFkZGl0aW9uIG9mIGEgZGV2aWNlJ3MgRENCIGFuZCBhIFNDU0kgcmVnaXN0ZXIgZHVtcC4KKyAgICBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIHdoZW4geW91IG1lZXQgcHJvYmxlbXMuIFRoZSBwYXJhbWV0ZXIgb2YKKyAgICB0aGUgSU5RVUlSWSBhbmQgUkVNT1ZFIGNvbW1hbmRzIGlzIHRoZSBkZXZpY2UgaW5kZXggYXMgc2hvd24gYnkgdGhlCisgICAgb3V0cHV0IG9mIC9wcm9jL3Njc2kvdG1zY3NpbS8/IGluIHRoZSBkZXZpY2UgbGlzdGluZyBpbiB0aGUgZmlyc3QgY29sdW1uCisgICAgKElkeCkuIEFERCB0YWtlcyB0aGUgU0NTSSBJRCBhbmQgTFVOLgorICAgIEV4YW1wbGVzOgorICAgICBlY2hvICJyZXNldCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisgICAgIGVjaG8gImlucXVpcnkgMSIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisgICAgIGVjaG8gInJlbW92ZSAyIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzEKKyAgICAgZWNobyAiYWRkIDIgMyIgPi9wcm9jL3Njc2kvdG1zY3NpbS8/CisgICAgIGVjaG8gImR1bXAiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorCisgICAgTm90ZSB0aGF0IHlvdSB3aWxsIG1lZXQgcHJvYmxlbXMgd2hlbiB5b3UgUkVNT1ZFIGEgZGV2aWNlJ3MgRENCIHdpdGggdGhlCisgICAgcmVtb3ZlIGNvbW1hbmQgaWYgaXQgY29udGFpbnMgcGFydGl0aW9ucyB3aGljaCBhcmUgbW91bnRlZC4gT25seSB1c2UgaXQKKyAgICBhZnRlciB1bm1vdW50aW5nIGl0cyBwYXJ0aXRpb25zLCB0ZWxsaW5nIHRoZSBTQ1NJIG1pZC1sZXZlbCBjb2RlIHRvCisgICAgcmVtb3ZlIGl0IChzY3NpIHJlbW92ZS1zaW5nbGUtZGV2aWNlKSBhbmQgeW91IHJlYWxseSBuZWVkIGEgZmV3IGJ5dGVzIG9mCisgICAgbWVtb3J5LgorICAgIFRoZSBBREQgY29tbWFuZCBhbGxvd3MgeW91IHRvIGNvbmZpZ3VyZSBhIGRldmljZSBiZWZvcmUgeW91IHRlbGwgdGhlCisgICAgbWlkLWxldmVsIGNvZGUgdG8gdHJ5IGRldGVjdGlvbi4KKworCitJJ2Qgc3VnZ2VzdCByZXZpZXdpbmcgdGhlIG91dHB1dCBvZiAvcHJvYy9zY3NpL3Rtc2NzaW0vPyBhZnRlciBjaGFuZ2luZworc2V0dGluZ3MgdG8gc2VlIGlmIGV2ZXJ5dGhpbmcgY2hhbmdlZCBhcyByZXF1ZXN0ZWQuCisKKworNS4gQ29uZmlndXJhdGlvbiB2aWEgYm9vdC9tb2R1bGUgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2l0aCB0aGUgREMzOTAsIHRoZSBkcml2ZXIgcmVhZHMgaXRzIEVFUFJPTSBzZXR0aW5ncyBhbmQgdHJpZXMgdG8gdXNlIHRoZW0uCitCdXQgeW91IG1heSB3YW50IHRvIG92ZXJyaWRlIHRoZSBzZXR0aW5ncyBwcmlvciB0byBiZWluZyBhYmxlIHRvIGNoYW5nZSB0aGUKK2RyaXZlciBjb25maWd1cmF0aW9uIHZpYSAvcHJvYy9zY3NpL3Rtc2NzaW0vPy4KK0lmIHlvdSBkbyBoYXZlIGFub3RoZXIgQU01M0M5NzQgYmFzZWQgYWRhcHRlciwgdGhhdCdzIGV2ZW4gdGhlIG9ubHkKK3Bvc3NpYmlsaXR5IHRvIGFkanVzdCBzZXR0aW5ncyBiZWZvcmUgeW91IGFyZSBhYmxlIHRvIHdyaXRlIHRvIHRoZQorL3Byb2Mvc2NzaS90bXNjc2ltLz8gcHNldWRvLWZpbGUsIGUuZy4gaWYgeW91IHdhbnQgdG8gdXNlIGFub3RoZXIgCithZGFwdGVyIElEIHRoYW4gNy4gIAorKEJUVywgdGhlIGxvZyBtZXNzYWdlICJEQzM5MDogTm8gRUVQUk9NIGZvdW5kISIgaXMgbm9ybWFsIHdpdGhvdXQgYSBEQzM5MC4pCitGb3IgdGhpcyBwdXJwb3NlLCB5b3UgY2FuIHBhc3Mgb3B0aW9ucyB0byB0aGUgZHJpdmVyIGJlZm9yZSBpdCBpcyBpbml0aWFsaXNlZAorYnkgdXNpbmcga2VybmVsIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLiBTZWUgbGlsbyg4KSBvciBtb2Rwcm9iZSgxKSBtYW51YWwKK3BhZ2VzIG9uIGhvdyB0byBwYXNzIHBhcmFtcyB0byB0aGUga2VybmVsIG9yIGEgbW9kdWxlLgorW05PVEU6IEZvcm1lcmx5LCBpdCB3YXMgbm90IHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSBFRVBST00gc3VwcGxpZWQKKyBzZXR0aW5ncyBvZiB0aGUgREMzOTAgd2l0aCBjbWQgbGluZSBwYXJhbWV0ZXJzLiBUaGlzIGhhcyBjaGFuZ2VkIHNpbmNlCisgMi4wZTddCisKK1RoZSBzeW50YXggb2YgdGhlIHBhcmFtcyBpcyBtdWNoIHNob3J0ZXIgdGhhbiB0aGUgc3ludGF4IG9mIHRoZSAvcHJvYy8uLi4KK2ludGVyZmFjZS4gVGhpcyBtYWtlcyBpdCBhIGxpdHRsZSBiaXQgbW9yZSBkaWZmaWN1bHQgdG8gdXNlLiBIb3dldmVyLCBsb25nCitwYXJhbWV0ZXIgbGluZXMgaGF2ZSB0aGUgcmlzayB0byBiZSBtaXNpbnRlcnByZXRlZCBhbmQgdGhlIGxlbmd0aCBvZiBrZXJuZWwKK3BhcmFtZXRlcnMgaXMgbGltaXRlZC4KKworQXMgdGhlIHN1cHBvcnQgZm9yIG5vbi1EQzM5MCBhZGFwdGVycyB3b3JrcyBieSBzaW11bGF0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlCitEQzM5MCBFRVBST00sIHRoZSBzZXR0aW5ncyBhcmUgZ2l2ZW4gaW4gYSBEQzM5MCBCSU9TJyB3YXkuCisKK0hlcmUncyB0aGUgc3ludGF4OgordG1zY3NpbT1BZGFwdElELFNwZElkeCxEZXZNb2RlLEFkYXB0TW9kZSxUYWdnZWRDbW5kcyxEZWxheVJlc2V0CisKK0VhY2ggb2YgdGhlIHBhcmFtZXRlcnMgaXMgYSBudW1iZXIsIGNvbnRhaW5pbmcgdGhlIGRlc2NyaWJlZCBpbmZvcm1hdGlvbjoKKworKiBBZGFwdElEOiBUaGUgU0NTSSBJRCBvZiB0aGUgaG9zdCBhZGFwdGVyLiBNdXN0IGJlIGluIHRoZSByYW5nZSAwLi43CisgIERlZmF1bHQgaXMgNy4KKworKiBTcGRJZHg6IFRoZSBpbmRleCBvZiB0aGUgbWF4aW11bSBzcGVlZCBhcyBpbiB0aGUgREMzOTAgQklPUy4gVGhlIHZhbHVlcworICAwLi43IG1lYW4gMTAsIDguMCwgNi43LCA1LjcsIDUuMCwgNC4wLCAzLjEgYW5kIDIgTUh6IHJlc3AuIERlZmF1bHQgaXMKKyAgMCAoMTAuMCBNSHopLgorCisqIERldk1vZGUgaXMgYSBiaXQgbWFwcGVkIHZhbHVlIGRlc2NyaWJpbmcgdGhlIHBlci1kZXZpY2UgZmVhdHVyZXMuIEl0CisgIGFwcGxpZXMgdG8gYWxsIGRldmljZXMuIChTeW5jLCBEaXNjIGFuZCBUYWdRIHdpbGwgb25seSBhcHBseSwgaWYgdGhlCisgIGRldmljZSBzdXBwb3J0cyBpdC4pIFRoZSBtZWFuaW5nIG9mIHRoZSBiaXRzICgqID0gZGVmYXVsdCk6CisKKyAgIEJpdCBWYWwoaGV4KSBWYWwoZGVjKSAgTWVhbmluZworICAgKjAJIDB4MDEJICAgIDEJICBQYXJpdHkgY2hlY2sKKyAgICoxCSAweDAyCSAgICAyCSAgU3luY2hyb25vdXMgTmVnb3RpYXRpb24KKyAgICoyCSAweDA0CSAgICA0CSAgRGlzY29ubmVjdGlvbgorICAgKjMJIDB4MDgJICAgIDgJICBTZW5kIFN0YXJ0IGNvbW1hbmQgb24gc3RhcnR1cC4gKE5vdCB1c2VkKQorICAgKjQJIDB4MTAJICAgMTYJICBUYWdnZWQgQ29tbWFuZCBRdWV1ZWluZworCisgIEFzIHVzdWFsLCB0aGUgZGVzaXJlZCB2YWx1ZSBpcyBvYnRhaW5lZCBieSBhZGRpbmcgdGhlIHdhbnRlZCB2YWx1ZXMuIElmCisgIHlvdSB3YW50IHRvIGVuYWJsZSBhbGwgdmFsdWVzLCBlLmcuLCB5b3Ugd291bGQgdXNlIDMxKDB4MWYpLiBEZWZhdWx0IGlzIDMxLgorCisqIEFkYXB0TW9kZSBpcyBhIGJpdCBtYXBwZWQgdmFsdWUgZGVzY3JpYmluZyB0aGUgZW5hYmxlZCBhZGFwdGVyIGZlYXR1cmVzLgorCisgICBCaXQgVmFsKGhleCkgVmFsKGRlYykgIE1lYW5pbmcKKyAgICowCSAweDAxCSAgICAxCSAgU3VwcG9ydCBtb3JlIHRoYW4gdHdvIGRyaXZlcy4gKE5vdCB1c2VkKQorICAgKjEJIDB4MDIJICAgIDIJICBVc2UgRE9TIGNvbXBhdGlibGUgbWFwcGluZyBmb3IgSERzIGdyZWF0ZXIgdGhhbiAxR0IuCisgICAqMgkgMHgwNAkgICAgNAkgIFJlc2V0IFNDU0kgQnVzIG9uIHN0YXJ0dXAuCisgICAqMwkgMHgwOAkgICAgOAkgIEFjdGl2ZSBOZWdhdGlvbjogSW1wcm92ZXMgU0NTSSBCdXMgbm9pc2UgaW1tdW5pdHkuCisgICAgNAkgMHgxMAkgICAxNgkgIEltbWVkaWF0ZSByZXR1cm4gb24gQklPUyBzZWVrIGNvbW1hbmQuIChOb3QgdXNlZCkKKyAoKik1CSAweDIwCSAgIDMyCSAgQ2hlY2sgZm9yIExVTnMgPj0gMS4KKyAgCisgIFRoZSBkZWZhdWx0IGZvciBMVU4gQ2hlY2sgZGVwZW5kcyBvbiBDT05GSUdfU0NTSV9NVUxUSV9MVU4uCisKKyogVGFnZ2VkQ21uZHMgaXMgYSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgVGFnZ2VkIENvbW1hbmRzLgorICBJdCBpcyB0aGUgYmluYXJ5IGxvZ2FyaXRobSAtIDEgb2YgdGhlIGFjdHVhbCBudW1iZXIuIE1heCBpcyA0ICgzMikuCisgICBWYWx1ZSAgTnVtYmVyIG9mIFRhZ2dlZCBDb21tYW5kcworICAgICAwCQkgMgorICAgICAxCQkgNAorICAgICAyCQkgOAorICAgICozCQkxNgorICAgICA0CQkzMgorCisqIERlbGF5UmVzZXQgaXMgdGhlIHRpbWUgaW4gc2Vjb25kcyAobWludXMgMC41cyksIHRoZSBhZGFwdGVyIHdhaXRzLCBhZnRlciBhCisgIGJ1cyByZXNldC4gRGVmYXVsdCBpcyAxIChjb3JyZXNwLiB0byAxLjVzKS4KKworRXhhbXBsZToKKyBtb2Rwcm9iZSB0bXNjc2ltIHRtc2NzaW09NiwyLDMxCit3b3VsZCBzZXQgdGhlIGFkYXB0ZXIgSUQgdG8gNiwgbWF4LiBzcGVlZCB0byA2LjcgTUh6LCBlbmFibGUgYWxsIGRldmljZQorZmVhdHVyZXMgYW5kIGxlYXZlIHRoZSBhZGFwdGVyIGZlYXR1cmVzLCB0aGUgbnVtYmVyIG9mIFRhZ2dlZCBDb21tYW5kcworYW5kIHRoZSBEZWxheSBhZnRlciBhIHJlc2V0IHRvIHRoZSBkZWZhdWx0cy4KKworQXMgeW91IGNhbiBzZWUsIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYWxsIG9mIHRoZSBzaXggcGFyYW1zLgorSWYgeW91IHdhbnQgdmFsdWVzIHRvIGJlIGlnbm9yZWQgKGkuZS4gdGhlIEVFcHJvbSBzZXR0aW5ncyBvciB0aGUgZGVmYXVsdHMKK3dpbGwgYmUgdXNlZCksIHlvdSBtYXkgcGFzcyAtMiAobm90IDAhKSBhdCB0aGUgY29ycmVzcG9uZGluZyBwb3NpdGlvbi4KKworVGhlIGRlZmF1bHRzICg3LDAsMzEsMTUsMywxKSBhcmUgYWdncmVzc2l2ZSB0byBhbGxvdyBnb29kIHBlcmZvcm1hbmNlLiBZb3UKK2NhbiB1c2UgdG1zY3NpbT03LDAsMzEsNjMsNCwwIGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlLCBpZiB5b3VyIFNDU0kgY2hhaW4KK2FsbG93cyBpdC4gSWYgeW91IG1lZXQgcHJvYmxlbXMsIHlvdSBjYW4gdXNlIHRtc2NzaW09LTEgd2hpY2ggaXMgYSBzaG9ydGN1dAorZm9yIHRtc2NzaW09Nyw0LDksMTUsMiwxMC4KKworCis2LiBQb3RlbnRpYWwgaW1wcm92ZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNb3N0IG9mIHRoZSBpbnRlbmRlZCB3b3JrIG9uIHRoZSBkcml2ZXIgaGFzIGJlZW4gZG9uZS4gSGVyZSBhcmUgYSBmZXcgaWRlYXMKK3RvIGZ1cnRoZXIgaW1wcm92ZSBpdHMgdXNhYmlsaXR5OgorCisqIENsZWFubHkgc2VwYXJhdGUgcGVyLVRhcmdldCBhbmQgcGVyLUxVTiBwcm9wZXJ0aWVzIChEQ0IpCisqIE1vcmUgaW50ZWxsaWdlbnQgYWJvcnQoKSByb3V0aW5lCisqIFVzZSBuZXdfZWggY29kZSAoTGludXgtMi4xKykKKyogSGF2ZSB0aGUgbWlkLWxldmVsIChNTCkgY29kZSAoYW5kIG5vdCB0aGUgZHJpdmVyKSBoYW5kbGUgbW9yZSBvZiB0aGUKKyAgdmFyaW91cyBjb25kaXRpb25zLgorKiBDb21tYW5kIHF1ZXVlaW5nIGluIHRoZSBkcml2ZXI6IEVsaW1pbmF0ZSBRdWVyeSBsaXN0IGFuZCB1c2UgTUwgaW5zdGVhZC4KKyogTW9yZSB1c2VyIGZyaWVuZGx5IGJvb3QvbW9kdWxlIHBhcmFtIHN5bnRheAorCitGdXJ0aGVyIGludmVzdGlnYXRpb24gb24gdGhlc2UgcHJvYmxlbXM6CisKKyogRHJpdmVyIGhhbmdzIHdpdGggc3luYyByZWFkY2RkYSAoeGNkcm9hc3QpIChtb3N0IHByb2JhYmx5IFZJQSBQQ0kgZXJyb3IpCisKK0tub3duIHByb2JsZW1zOiAKK1BsZWFzZSBzZWUgaHR0cDovL3d3dy5nYXJsb2ZmLmRlL2t1cnQvbGludXgvZGMzOTAvcHJvYmxlbXMuaHRtbAorCisqIENoYW5naW5nIHRoZSBwYXJhbWV0ZXJzIG9mIG11bHRpLWx1biBieSB0aGUgdG1zY3NpbS8/IGludGVyZmFjZSB3aWxsCisgIGNhdXNlIHByb2JsZW1zLCBjYXVzZSB0aGVzZSBzZXR0aW5ncyBhcmUgbW9zdGx5IHBlciBUYXJnZXQgYW5kIG5vdCBwZXIgTFVOCisgIGFuZCBzaG91bGQgYmUgdXBkYXRlZCBhY2NvcmRpbmdseS4gVG8gYmUgZml4ZWQgZm9yIDIuMGQyNC4KKyogQ0RScyAoZWcgWWFtIENSVzQ0MTYpIG5vdCByZWNvZ25pemVkLCBiZWNhdXNlIHNvbWUgYnVnZ3kgZGV2aWNlcyBkb24ndCAKKyAgcmVjb3ZlciBmcm9tIGEgU0NTSSByZXNldCBpbiB0aW1lLiBVc2UgYSBoaWdoZXIgZGVsYXkgb3IgZG9uJ3QgaXNzdWUKKyAgYSBTQ1NJIGJ1cyByZXNldCBvbiBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIFNlZSBwcm9ibGVtcyBwYWdlLgorICBGb3IgdGhlIENSVzQ0MTZTLCB0aGlzIHNlZW1zIHRvIGJlIHNvbHZlZCB3aXRoIGZpcm13YXJlIDEuMGcgKHJlcG9ydGVkIGJ5IAorICBKZWFuLVl2ZXMgQmFyYmllcikuCisqIFRFQUMgQ0QtNTMyUyBub3QgYmVpbmcgcmVjb2duaXplZC4gKFdvcmtzIHdpdGggMS4xMSkuCisqIFNjYW5uZXJzIChlZy4gQXN0cmEgVU1BWCAxMjIwUykgZG9uJ3Qgd29yazogRGlzYWJsZSBTeW5jIE5lZ290aWF0aW9uLgorICBJZiB0aGlzIGRvZXMgbm90IGhlbHAsIHRyeSBlY2hvICJJTlFVSVJZIHQiID4vcHJvYy9zY3NpL3Rtc2NzaW0vPyAodAorICByZXBsYWNlZCBieSB0aGUgZGV2IGluZGV4IG9mIHlvdXIgc2Nhbm5lcikuIFlvdSBtYXkgdHJ5IHRvIHJlc2V0IHlvdXIgU0NTSQorICBidXMgYWZ0ZXJ3YXJkcyAoZWNobyAiUkVTRVQiID4vcHJvYy9zY3NpL3Rtc2NzaW0vPykuCisgIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHNvbHZlZCBhcyBvZiAyLjBkMTgsIHRoYW5rcyB0byBBbmRyZWFzIFJpY2suCisqIElmIHRoZXJlIGlzIGEgdmFsaWQgcGFydGl0aW9uIHRhYmxlLCB0aGUgZHJpdmVyIHdpbGwgdXNlIGl0IGZvciBkZXRlcm1pbmcKKyAgdGhlIG1hcHBpbmcuIElmIHRoZXJlJ3Mgbm9uZSwgYSByZWFzb25hYmxlIG1hcHBpbmcgKFN5bWJpb3MtbGlrZSkgd2lsbCBiZQorICBhc3N1bWVkLiBPdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBtYXkgbm90IGxpa2UgdGhpcyBtYXBwaW5nLCB0aG91Z2gKKyAgaXQncyBjb25zaXN0ZW50IHdpdGggdGhlIEJJT1MnIGJlaGF2aW91ci4gT2xkIERDMzkwIGRyaXZlcnMgaWdub3JlZCB0aGUKKyAgcGFydGl0aW9uIHRhYmxlIGFuZCB1c2VkIGEgSC9TID0gNjQvMzIgb3IgMjU1LzYzIHRyYW5zbGF0aW9uLiBTbyBpZiB5b3UKKyAgd2FudCB0byBiZSBjb21wYXRpYmxlIHRvIHRob3NlLCB1c2UgdGhpcyBvbGQgbWFwcGluZyB3aGVuIGNyZWF0aW5nCisgIHBhcnRpdGlvbiB0YWJsZXMuIEV2ZW4gd29yc2UsIG9uIGJvb3R1cCB0aGUgREMzOTAgbWlnaHQgY29tcGxhaW4gaWYgb3RoZXIKKyAgbWFwcGluZ3MgYXJlIGZvdW5kLCBzbyBhdXRvIHJlYm9vdGluZyBtYXkgZmFpbC4KKyogSW4gc29tZSBzaXR1YXRpb25zLCB0aGUgZHJpdmVyIHdpbGwgZ2V0IHN0dWNrIGluIGFuIGFib3J0IGxvb3AuIFRoaXMgaXMgYQorICBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgTWlkLUxheWVyIG9mIExpbnV4JyBTQ1NJIGNvZGUgYW5kIHRoZSBkcml2ZXIuCisgIFRyeSB0byBkaXNhYmxlIERzQ24sIGlmIHlvdSBtZWV0IHRoaXMgcHJvYmxlbS4gUGxlYXNlIGNvbnRhY3QgbWUgZm9yCisgIGZ1cnRoZXIgZGVidWdnaW5nLgorCisKKzcuIEJ1ZyByZXBvcnRzLCBkZWJ1Z2dpbmcgYW5kIHVwZGF0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1doZW5ldmVyIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhlIGRyaXZlciwgeW91IGFyZSBpbnZpdGVkIHRvIGFzayB0aGUKK2F1dGhvciBmb3IgaGVscC4gSG93ZXZlciwgSSdkIHN1Z2dlc3QgcmVhZGluZyB0aGUgZG9jcyBhbmQgdHJ5aW5nIHRvIHNvbHZlCit0aGUgcHJvYmxlbSB5b3Vyc2VsZiwgZmlyc3QuIAorSWYgeW91IGZpbmQgc29tZXRoaW5nLCB3aGljaCB5b3UgYmVsaWV2ZSB0byBiZSBhIGJ1ZywgcGxlYXNlIHJlcG9ydCBpdCB0byBtZS4gCitQbGVhc2UgYXBwZW5kIHRoZSBvdXRwdXQgb2YgL3Byb2Mvc2NzaS9zY3NpLCAvcHJvYy9zY3NpL3Rtc2NzaW0vPyBhbmQKK21heWJlIHRoZSBEQzM5MCBsb2cgbWVzc2FnZXMgdG8gdGhlIHJlcG9ydC4gCisKK0J1ZyByZXBvcnRzIHNob3VsZCBiZSBzZW5kIHRvIG1lIChLdXJ0IEdhcmxvZmYgPGRjMzkwQGdhcmxvZmYuZGU+KSBhcyB3ZWxsCithcyB0byB0aGUgbGludXgtc2NzaSBsaXN0ICg8bGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmc+KSwgYXMgc29tZXRpbWVzIGJ1Z3MKK2FyZSBjYXVzZWQgYnkgdGhlIFNDU0kgbWlkLWxldmVsIGNvZGUuCisKK0kgd2lsbCBhc2sgeW91IGZvciBzb21lIG1vcmUgZGV0YWlscyBhbmQgcHJvYmFibHkgSSB3aWxsIGFsc28gYXNrIHlvdSB0bworZW5hYmxlIHNvbWUgb2YgdGhlIERFQlVHIG9wdGlvbnMgaW4gdGhlIGRyaXZlciAodG1zY3NpbS5jOkRDMzkwX0RFQlVHWFhYCitkZWZpbmVzKS4gVGhlIGRyaXZlciB3aWxsIHByb2R1Y2Ugc29tZSBkYXRhIGZvciB0aGUgc3lzbG9nIGZhY2lsaXR5IHRoZW4uCitCZXdhcmU6IElmIHlvdXIgc3lzbG9nIGdldHMgd3JpdHRlbiB0byBhIFNDU0kgZGlzayBjb25uZWN0ZWQgdG8geW91cgorQU01M0M5NzQsIHRoZSBsb2dnaW5nIG1pZ2h0IHByb2R1Y2UgbG9nIG91dHB1dCBhZ2FpbiwgYW5kIHlvdSBtaWdodCBlbmQKK2hhdmluZyB5b3VyIGJveCBzcGVuZGluZyBtb3N0IG9mIGl0cyB0aW1lIGRvaW5nIHRoZSBsb2dnaW5nLgorCitUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciBjYW4gYmUgZm91bmQgYXQ6CisgaHR0cDovL3d3dy5nYXJsb2ZmLmRlL2t1cnQvbGludXgvZGMzOTAvCisgZnRwOi8vZnRwLnN1c2UuY29tL3B1Yi9wZW9wbGUvZ2FybG9mZi9saW51eC9kYzM5MC8KKworCis4LiBBY2tub3dsZWRnZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tCitUaGFua3MgdG8gTGludXMgVG9ydmFsZHMsIEFsYW4gQ294LCB0aGUgRlNGIHBlb3BsZSwgdGhlIFhGcmVlODYgdGVhbSBhbmQgCithbGwgdGhlIG90aGVycyBmb3IgdGhlIHdvbmRlcmZ1bCBPUyBhbmQgc29mdHdhcmUuCitUaGFua3MgdG8gQy5MLiBIdWFuZyBhbmQgUGhpbGlwIEdpYW5nIChUZWtyYW0pIGZvciB0aGUgaW5pdGlhbCBkcml2ZXIKK3JlbGVhc2UgYW5kIHN1cHBvcnQuCitUaGFua3MgdG8gRG91ZyBMZWRmb3JkLCBH6XJhcmQgUm91ZGllciBmb3Igc3VwcG9ydCB3aXRoIFNDU0kgY29kaW5nLgorVGhhbmtzIHRvIGEgbG90IG9mIHBlb3BsZSAoZXNwZWMuIENoaWFraSBJc2hpa2F3YSwgQW5kcmVhcyBIYXVtZXIsIEh1YmVydCAKK1Rvbm5lYXUpIGZvciBpbnRlbnNpdmVseSB0ZXN0aW5nIHRoZSBkcml2ZXIgKGFuZCBldmVuIHJpc2tpbmcgZGF0YSBsb3NzCitkb2luZyB0aGlzIGR1cmluZyBlYXJseSByZXZpc2lvbnMpLgorUmVjZW50bHksIFN1U0UgR21iSCwgTnVlcm5iZXJnLCBGUkcsIGhhcyBiZWVuIHBheWluZyBtZSBmb3IgdGhlIGRyaXZlcgorZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlLiBTcGVjaWFsIHRoYW5rcyEKKworCis5LiBDb3B5cmlnaHQKKy0tLS0tLS0tLS0tLQorIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgIAorIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyBJZiB5b3Ugd2FudCB0byB1c2UgYW55IGxhdGVyIHZlcnNpb24gb2YgdGhlIEdOVSBHUEwsIHlvdSB3aWxsIHByb2JhYmx5CisgYmUgYWxsb3dlZCB0bywgYnV0IHlvdSBoYXZlIHRvIGFzayBtZSBhbmQgVGVrcmFtIDxlcmljaEB0ZWtyYW0uY29tLnR3PgorIGJlZm9yZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV3JpdHRlbiBieSBLdXJ0IEdhcmxvZmYgPGt1cnRAZ2FybG9mZi5kZT4gMTk5OC8wNi8xMQorTGFzdCB1cGRhdGVkIDIwMDAvMTEvMjgsIGRyaXZlciByZXZpc2lvbiAyLjBlNworJElkOiBSRUFETUUudG1zY3NpbSx2IDIuMjUuMi43IDIwMDAvMTIvMjAgMDE6MDc6MTIgZ2FybG9mZiBFeHAgJApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZWNsdmwudHh0IGIvRG9jdW1lbnRhdGlvbi9zZWNsdmwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Mjc0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NlY2x2bC50eHQKQEAgLTAsMCArMSw5NyBAQAorQlNEIFNlY3VyZSBMZXZlbHMgTGludXggU2VjdXJpdHkgTW9kdWxlCitNaWNoYWVsIEEuIEhhbGNyb3cgPG1pa2VAaGFsY3Jvdy51cz4KKworCitJbnRyb2R1Y3Rpb24KKworVW5kZXIgdGhlIEJTRCBTZWN1cmUgTGV2ZWxzIHNlY3VyaXR5IG1vZGVsLCBzZXRzIG9mIHBvbGljaWVzIGFyZQorYXNzb2NpYXRlZCB3aXRoIGxldmVscy4gTGV2ZWxzIHJhbmdlIGZyb20gLTEgdG8gMiwgd2l0aCAtMSBiZWluZyB0aGUKK3dlYWtlc3QgYW5kIDIgYmVpbmcgdGhlIHN0cm9uZ2VzdC4gVGhlc2Ugc2VjdXJpdHkgcG9saWNpZXMgYXJlCitlbmZvcmNlZCBhdCB0aGUga2VybmVsIGxldmVsLCBzbyBub3QgZXZlbiB0aGUgc3VwZXJ1c2VyIGlzIGFibGUgdG8KK2Rpc2FibGUgb3IgY2lyY3VtdmVudCB0aGVtLiBUaGlzIGhhcmRlbnMgdGhlIG1hY2hpbmUgYWdhaW5zdCBhdHRhY2tlcnMKK3dobyBnYWluIHJvb3QgYWNjZXNzIHRvIHRoZSBzeXN0ZW0uCisKKworTGV2ZWxzIGFuZCBQb2xpY2llcworCitMZXZlbCAtMSAoUGVybWFuZW50bHkgSW5zZWN1cmUpOgorIC0gQ2Fubm90IGluY3JlYXNlIHRoZSBzZWN1cmUgbGV2ZWwKKworTGV2ZWwgMCAoSW5zZWN1cmUpOgorIC0gQ2Fubm90IHB0cmFjZSB0aGUgaW5pdCBwcm9jZXNzCisKK0xldmVsIDEgKERlZmF1bHQpOgorIC0gL2Rldi9tZW0gYW5kIC9kZXYva21lbSBhcmUgcmVhZC1vbmx5CisgLSBJTU1VVEFCTEUgYW5kIEFQUEVORCBleHRlbmRlZCBhdHRyaWJ1dGVzLCBpZiBzZXQsIG1heSBub3QgYmUgdW5zZXQKKyAtIENhbm5vdCBsb2FkIG9yIHVubG9hZCBrZXJuZWwgbW9kdWxlcworIC0gQ2Fubm90IHdyaXRlIGRpcmVjdGx5IHRvIGEgbW91bnRlZCBibG9jayBkZXZpY2UKKyAtIENhbm5vdCBwZXJmb3JtIHJhdyBJL08gb3BlcmF0aW9ucworIC0gQ2Fubm90IHBlcmZvcm0gbmV0d29yayBhZG1pbmlzdHJhdGl2ZSB0YXNrcworIC0gQ2Fubm90IHNldHVpZCBhbnkgZmlsZQorCitMZXZlbCAyIChTZWN1cmUpOgorIC0gQ2Fubm90IGRlY3JlbWVudCB0aGUgc3lzdGVtIHRpbWUKKyAtIENhbm5vdCB3cml0ZSB0byBhbnkgYmxvY2sgZGV2aWNlLCB3aGV0aGVyIG1vdW50ZWQgb3Igbm90CisgLSBDYW5ub3QgdW5tb3VudCBhbnkgbW91bnRlZCBmaWxlc3lzdGVtcworCisKK0NvbXBpbGF0aW9uCisKK1RvIGNvbXBpbGUgdGhlIEJTRCBTZWN1cmUgTGV2ZWxzIExTTSwgc2VjbHZsLmtvLCBlbmFibGUgdGhlCitTRUNVUklUWV9TRUNMVkwgY29uZmlndXJhdGlvbiBvcHRpb24uICBUaGlzIGlzIGZvdW5kIHVuZGVyIFNlY3VyaXR5CitvcHRpb25zIC0+IEJTRCBTZWN1cmUgTGV2ZWxzIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBtZW51LgorCisKK0Jhc2ljIFVzYWdlCisKK09uY2UgdGhlIG1hY2hpbmUgaXMgaW4gYSBydW5uaW5nIHN0YXRlLCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMKK2xvYWRlZCBhbmQgYWxsIHRoZSBmaWxlc3lzdGVtcyBtb3VudGVkLCB5b3UgY2FuIGxvYWQgdGhlIHNlY2x2bC5rbworbW9kdWxlOgorCisjIGluc21vZCBzZWNsdmwua28KKworVGhlIG1vZHVsZSBkZWZhdWx0cyB0byBzZWN1cmUgbGV2ZWwgMSwgZXhjZXB0IHdoZW4gY29tcGlsZWQgZGlyZWN0bHkKK2ludG8gdGhlIGtlcm5lbCwgaW4gd2hpY2ggY2FzZSBpdCBkZWZhdWx0cyB0byBzZWN1cmUgbGV2ZWwgMC4gVG8gcmFpc2UKK3RoZSBzZWN1cmUgbGV2ZWwgdG8gMiwgdGhlIGFkbWluaXN0cmF0b3Igd3JpdGVzIGBgMicnIHRvIHRoZQorc2VjbHZsL3NlY2x2bCBmaWxlIHVuZGVyIHRoZSBzeXNmcyBtb3VudCBwb2ludCAoYXNzdW1lZCB0byBiZSAvc3lzIGluCit0aGVzZSBleGFtcGxlcyk6CisKKyMgZWNobyAtbiAiMiIgPiAvc3lzL3NlY2x2bC9zZWNsdmwKKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBpbml0aWFsaXplIHRoZSBtb2R1bGUgYXQgc2VjdXJlIGxldmVsIDIgd2l0aAordGhlIGluaXRsdmwgbW9kdWxlIHBhcmFtZXRlcjoKKworIyBpbnNtb2Qgc2VjbHZsLmtvIGluaXRsdmw9MgorCitBdCB0aGlzIHBvaW50LCBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbW92ZSB0aGUgbW9kdWxlIG9yIHJlZHVjZSB0aGUKK3NlY3VyZSBsZXZlbC4gIElmIHRoZSBhZG1pbmlzdHJhdG9yIHdpc2hlcyB0byBoYXZlIHRoZSBvcHRpb24gb2YgZG9pbmcKK3NvLCBoZSBtdXN0IHByb3ZpZGUgYSBtb2R1bGUgcGFyYW1ldGVyLCBzaGExX3Bhc3N3ZCwgdGhhdCBzcGVjaWZpZXMKK3RoZSBTSEExIGhhc2ggb2YgdGhlIHBhc3N3b3JkIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBzZWN1cmUKK2xldmVsIHRvIDAuCisKK1RvIGdlbmVyYXRlIHRoaXMgU0hBMSBoYXNoLCB0aGUgYWRtaW5pc3RyYXRvciBjYW4gdXNlIE9wZW5TU0w6CisKKyMgZWNobyAtbiAiYm9vZ2Fib29nYSIgfCBvcGVuc3NsIHNoYTEKK2FiZWRhNGUwZjMzZGVmYTUxNzQxMjE3NTkyYmY1OTVlZmI4ZDI4OWMKKworSW4gb3JkZXIgdG8gdXNlIHBhc3N3b3JkLWluc3RpZ2F0ZWQgc2VjdXJlIGxldmVsIHJlZHVjdGlvbiwgdGhlIFNIQTEKK2NyeXB0byBtb2R1bGUgbXVzdCBiZSBsb2FkZWQgb3IgY29tcGlsZWQgaW50byB0aGUga2VybmVsOgorCisjIGluc21vZCBzaGExLmtvCisKK1RoZSBhZG1pbmlzdHJhdG9yIGNhbiB0aGVuIGluc21vZCB0aGUgc2VjbHZsIG1vZHVsZSwgaW5jbHVkaW5nIHRoZQorU0hBMSBoYXNoIG9mIHRoZSBwYXNzd29yZDoKKworIyBpbnNtb2Qgc2VjbHZsLmtvCisgICAgICAgICBzaGExX3Bhc3N3ZD1hYmVkYTRlMGYzM2RlZmE1MTc0MTIxNzU5MmJmNTk1ZWZiOGQyODljCisKK1RvIHJlZHVjZSB0aGUgc2VjdXJlIGxldmVsLCB3cml0ZSB0aGUgcGFzc3dvcmQgdG8gc2VjbHZsL3Bhc3N3ZCB1bmRlcgoreW91ciBzeXNmcyBtb3VudCBwb2ludDoKKworIyBlY2hvIC1uICJib29nYWJvb2dhIiA+IC9zeXMvc2VjbHZsL3Bhc3N3ZAorCitUaGUgU2VwdGVtYmVyIDIwMDQgZWRpdGlvbiBvZiBTeXMgQWRtaW4gTWFnYXppbmUgaGFzIGFuIGFydGljbGUgYWJvdXQKK3RoZSBCU0QgU2VjdXJlIExldmVscyBMU00uICBJIGVuY291cmFnZSB5b3UgdG8gcmVmZXIgdG8gdGhhdCBhcnRpY2xlCitmb3IgYSBtb3JlIGluLWRlcHRoIHRyZWF0bWVudCBvZiB0aGlzIHNlY3VyaXR5IG1vZHVsZToKKworaHR0cDovL3d3dy5zYW1hZy5jb20vZG9jdW1lbnRzL3M9OTMwNC9zYW0wNDA5YS8wNDA5YS5odG0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwtY29uc29sZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2ODliMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0CkBAIC0wLDAgKzEsMTA0IEBACisgICAgICAgICAgICAgICAgICAgICAgIExpbnV4IFNlcmlhbCBDb25zb2xlCisKK1RvIHVzZSBhIHNlcmlhbCBwb3J0IGFzIGNvbnNvbGUgeW91IG5lZWQgdG8gY29tcGlsZSB0aGUgc3VwcG9ydCBpbnRvIHlvdXIKK2tlcm5lbCAtIGJ5IGRlZmF1bHQgaXQgaXMgbm90IGNvbXBpbGVkIGluLiBGb3IgUEMgc3R5bGUgc2VyaWFsIHBvcnRzCitpdCdzIHRoZSBjb25maWcgb3B0aW9uIG5leHQgdG8gIlN0YW5kYXJkL2dlbmVyaWMgKGR1bWIpIHNlcmlhbCBzdXBwb3J0Ii4KK1lvdSBtdXN0IGNvbXBpbGUgc2VyaWFsIHN1cHBvcnQgaW50byB0aGUga2VybmVsIGFuZCBub3QgYXMgYSBtb2R1bGUuCisKK0l0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgbXVsdGlwbGUgZGV2aWNlcyBmb3IgY29uc29sZSBvdXRwdXQuIFlvdSBjYW4KK2RlZmluZSBhIG5ldyBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiB0byBzZWxlY3Qgd2hpY2ggZGV2aWNlKHMpIHRvCit1c2UgZm9yIGNvbnNvbGUgb3V0cHV0LgorCitUaGUgZm9ybWF0IG9mIHRoaXMgb3B0aW9uIGlzOgorCisJY29uc29sZT1kZXZpY2Usb3B0aW9ucworCisJZGV2aWNlOgkJdHR5MCBmb3IgdGhlIGZvcmVncm91bmQgdmlydHVhbCBjb25zb2xlCisJCQl0dHlYIGZvciBhbnkgb3RoZXIgdmlydHVhbCBjb25zb2xlCisJCQl0dHlTeCBmb3IgYSBzZXJpYWwgcG9ydAorCQkJbHAwIGZvciB0aGUgZmlyc3QgcGFyYWxsZWwgcG9ydAorCisJb3B0aW9uczoJZGVwZW5kIG9uIHRoZSBkcml2ZXIuIEZvciB0aGUgc2VyaWFsIHBvcnQgdGhpcworCQkJZGVmaW5lcyB0aGUgYmF1ZHJhdGUvcGFyaXR5L2JpdHMgb2YgdGhlIHBvcnQsCisJCQlpbiB0aGUgZm9ybWF0IEJCQkJQTiwgd2hlcmUgQkJCQiBpcyB0aGUgc3BlZWQsCisJCQlQIGlzIHBhcml0eSAobi9vL2UpLCBhbmQgTiBpcyBiaXRzLiBEZWZhdWx0IGlzCisJCQk5NjAwbjguIFRoZSBtYXhpbXVtIGJhdWRyYXRlIGlzIDExNTIwMC4KKworWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGNvbnNvbGU9IG9wdGlvbnMgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCitPdXRwdXQgd2lsbCBhcHBlYXIgb24gYWxsIG9mIHRoZW0uIFRoZSBsYXN0IGRldmljZSB3aWxsIGJlIHVzZWQgd2hlbgoreW91IG9wZW4gL2Rldi9jb25zb2xlLiBTbywgZm9yIGV4YW1wbGU6CisKKwljb25zb2xlPXR0eVMxLDk2MDAgY29uc29sZT10dHkwCisKK2RlZmluZXMgdGhhdCBvcGVuaW5nIC9kZXYvY29uc29sZSB3aWxsIGdldCB5b3UgdGhlIGN1cnJlbnQgZm9yZWdyb3VuZAordmlydHVhbCBjb25zb2xlLCBhbmQga2VybmVsIG1lc3NhZ2VzIHdpbGwgYXBwZWFyIG9uIGJvdGggdGhlIFZHQQorY29uc29sZSBhbmQgdGhlIDJuZCBzZXJpYWwgcG9ydCAodHR5UzEgb3IgQ09NMikgYXQgOTYwMCBiYXVkLgorCitOb3RlIHRoYXQgeW91IGNhbiBvbmx5IGRlZmluZSBvbmUgY29uc29sZSBwZXIgZGV2aWNlIHR5cGUgKHNlcmlhbCwgdmlkZW8pLgorCitJZiBubyBjb25zb2xlIGRldmljZSBpcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCBkZXZpY2UgZm91bmQgY2FwYWJsZSBvZgorYWN0aW5nIGFzIGEgc3lzdGVtIGNvbnNvbGUgd2lsbCBiZSB1c2VkLiBBdCB0aGlzIHRpbWUsIHRoZSBzeXN0ZW0KK2ZpcnN0IGxvb2tzIGZvciBhIFZHQSBjYXJkIGFuZCB0aGVuIGZvciBhIHNlcmlhbCBwb3J0LiBTbyBpZiB5b3UgZG9uJ3QKK2hhdmUgYSBWR0EgY2FyZCBpbiB5b3VyIHN5c3RlbSB0aGUgZmlyc3Qgc2VyaWFsIHBvcnQgd2lsbCBhdXRvbWF0aWNhbGx5CitiZWNvbWUgdGhlIGNvbnNvbGUuCisKK1lvdSB3aWxsIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGRldmljZSB0byB1c2UgL2Rldi9jb25zb2xlLiBUaGUgb2ZmaWNpYWwKKy9kZXYvY29uc29sZSBpcyBub3cgY2hhcmFjdGVyIGRldmljZSA1LDEuCisKK0hlcmUncyBhbiBleGFtcGxlIHRoYXQgd2lsbCB1c2UgL2Rldi90dHlTMSAoQ09NMikgYXMgdGhlIGNvbnNvbGUuCitSZXBsYWNlIHRoZSBzYW1wbGUgdmFsdWVzIGFzIG5lZWRlZC4KKworMS4gQ3JlYXRlIC9kZXYvY29uc29sZSAocmVhbCBjb25zb2xlKSBhbmQgL2Rldi90dHkwIChtYXN0ZXIgdmlydHVhbAorICAgY29uc29sZSk6CisKKyAgIGNkIC9kZXYKKyAgIHJtIC1mIGNvbnNvbGUgdHR5MAorICAgbWtub2QgLW0gNjIyIGNvbnNvbGUgYyA1IDEKKyAgIG1rbm9kIC1tIDYyMiB0dHkwIGMgNCAwCisKKzIuIExJTE8gY2FuIGFsc28gdGFrZSBpbnB1dCBmcm9tIGEgc2VyaWFsIGRldmljZS4gVGhpcyBpcyBhIHZlcnkKKyAgIHVzZWZ1bCBvcHRpb24uIFRvIHRlbGwgTElMTyB0byB1c2UgdGhlIHNlcmlhbCBwb3J0OgorICAgSW4gbGlsby5jb25mIChnbG9iYWwgc2VjdGlvbik6IAorCisgICBzZXJpYWwgID0gMSw5NjAwbjggKHR0eVMxLCA5NjAwIGJkLCBubyBwYXJpdHksIDggYml0cykKKworMy4gQWRqdXN0IHRvIGtlcm5lbCBmbGFncyBmb3IgdGhlIG5ldyBrZXJuZWwsCisgICBhZ2FpbiBpbiBsaWxvLmNvbmYgKGtlcm5lbCBzZWN0aW9uKQorCisgICBhcHBlbmQgPSAiY29uc29sZT10dHlTMSw5NjAwIiAKKworNC4gTWFrZSBzdXJlIGEgZ2V0dHkgcnVucyBvbiB0aGUgc2VyaWFsIHBvcnQgc28gdGhhdCB5b3UgY2FuIGxvZ2luIHRvCisgICBpdCBvbmNlIHRoZSBzeXN0ZW0gaXMgZG9uZSBib290aW5nLiBUaGlzIGlzIGRvbmUgYnkgYWRkaW5nIGEgbGluZQorICAgbGlrZSB0aGlzIHRvIC9ldGMvaW5pdHRhYiAoZXhhY3Qgc3ludGF4IGRlcGVuZHMgb24geW91ciBnZXR0eSk6CisKKyAgIFMxOjIzOnJlc3Bhd246L3NiaW4vZ2V0dHkgLUwgdHR5UzEgOTYwMCB2dDEwMAorCis1LiBJbml0IGFuZCAvZXRjL2lvY3RsLnNhdmUKKworICAgU3lzdmluaXQgcmVtZW1iZXJzIGl0cyBzdHR5IHNldHRpbmdzIGluIGEgZmlsZSBpbiAvZXRjLCBjYWxsZWQKKyAgIGAvZXRjL2lvY3RsLnNhdmUnLiBSRU1PVkUgVEhJUyBGSUxFIGJlZm9yZSB1c2luZyB0aGUgc2VyaWFsCisgICBjb25zb2xlIGZvciB0aGUgZmlyc3QgdGltZSwgYmVjYXVzZSBvdGhlcndpc2UgaW5pdCB3aWxsIHByb2JhYmx5CisgICBzZXQgdGhlIGJhdWRyYXRlIHRvIDM4NDAwIChiYXVkcmF0ZSBvZiB0aGUgdmlydHVhbCBjb25zb2xlKS4KKworNi4gL2Rldi9jb25zb2xlIGFuZCBYCisgICBQcm9ncmFtcyB0aGF0IHdhbnQgdG8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHZpcnR1YWwgY29uc29sZSB1c3VhbGx5CisgICBvcGVuIC9kZXYvY29uc29sZS4gSWYgeW91IGhhdmUgY3JlYXRlZCB0aGUgbmV3IC9kZXYvY29uc29sZSBkZXZpY2UsCisgICBhbmQgeW91ciBjb25zb2xlIGlzIE5PVCB0aGUgdmlydHVhbCBjb25zb2xlIHNvbWUgcHJvZ3JhbXMgd2lsbCBmYWlsLgorICAgVGhvc2UgYXJlIHByb2dyYW1zIHRoYXQgd2FudCB0byBhY2Nlc3MgdGhlIFZUIGludGVyZmFjZSwgYW5kIHVzZQorICAgL2Rldi9jb25zb2xlIGluc3RlYWQgb2YgL2Rldi90dHkwLiBTb21lIG9mIHRob3NlIHByb2dyYW1zIGFyZToKKworICAgWGZyZWU4Niwgc3ZnYWxpYiwgZ3BtLCBTVkdBVGV4dE1vZGUKKworICAgSXQgc2hvdWxkIGJlIGZpeGVkIGluIG1vZGVybiB2ZXJzaW9ucyBvZiB0aGVzZSBwcm9ncmFtcyB0aG91Z2guCisKKyAgIE5vdGUgdGhhdCBpZiB5b3UgYm9vdCB3aXRob3V0IGEgY29uc29sZT0gb3B0aW9uIChvciB3aXRoCisgICBjb25zb2xlPS9kZXYvdHR5MCksIC9kZXYvY29uc29sZSBpcyB0aGUgc2FtZSBhcyAvZGV2L3R0eTAuIEluIHRoYXQKKyAgIGNhc2UgZXZlcnl0aGluZyB3aWxsIHN0aWxsIHdvcmsuCisKKzcuIFRoYW5rcworCisgICBUaGFua3MgdG8gR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBsaW51eC1tNjhrLm9yZz4KKyAgIGZvciBwb3J0aW5nIHRoZSBwYXRjaGVzIGZyb20gMi4xLjR4IHRvIDIuMS42eCBmb3IgdGFraW5nIGNhcmUgb2YKKyAgIHRoZSBpbnRlZ3JhdGlvbiBvZiB0aGVzZSBwYXRjaGVzIGludG8gbTY4aywgcHBjIGFuZCBhbHBoYS4KKworTWlxdWVsIHZhbiBTbW9vcmVuYnVyZyA8bWlxdWVsc0BjaXN0cm9uLm5sPiwgMTEtSnVuLTIwMDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlciBiL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWMwMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyCkBAIC0wLDAgKzEsMzMwIEBACisKKwkJCUxvdyBMZXZlbCBTZXJpYWwgQVBJCisJCQktLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgICRJZDogZHJpdmVyLHYgMS4xMCAyMDAyLzA3LzIyIDE1OjI3OjMwIHJtayBFeHAgJAorCisKK1RoaXMgZG9jdW1lbnQgaXMgbWVhbnQgYXMgYSBicmllZiBvdmVydmlldyBvZiBzb21lIGFzcGVjdHMgb2YgdGhlIG5ldyBzZXJpYWwKK2RyaXZlci4gIEl0IGlzIG5vdCBjb21wbGV0ZSwgYW55IHF1ZXN0aW9ucyB5b3UgaGF2ZSBzaG91bGQgYmUgZGlyZWN0ZWQgdG8KKzxybWtAYXJtLmxpbnV4Lm9yZy51az4KKworVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBjb250YWluZWQgd2l0aGluIHNlcmlhbF9hbWJhLmMuCisKKworCitMb3cgTGV2ZWwgU2VyaWFsIEhhcmR3YXJlIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxvdyBsZXZlbCBzZXJpYWwgaGFyZHdhcmUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBzdXBwbHlpbmcgcG9ydAoraW5mb3JtYXRpb24gKGRlZmluZWQgYnkgdWFydF9wb3J0KSBhbmQgYSBzZXQgb2YgY29udHJvbCBtZXRob2RzIChkZWZpbmVkCitieSB1YXJ0X29wcykgdG8gdGhlIGNvcmUgc2VyaWFsIGRyaXZlci4gIFRoZSBsb3cgbGV2ZWwgZHJpdmVyIGlzIGFsc28KK3Jlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBpbnRlcnJ1cHRzIGZvciB0aGUgcG9ydCwgYW5kIHByb3ZpZGluZyBhbnkKK2NvbnNvbGUgc3VwcG9ydC4KKworCitDb25zb2xlIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgc2VyaWFsIGNvcmUgcHJvdmlkZXMgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucy4gIFRoaXMgaW5jbHVkZXMgaWRlbnRpZmluZwordGhlIGNvcnJlY3QgcG9ydCBzdHJ1Y3R1cmUgKHZpYSB1YXJ0X2dldF9jb25zb2xlKSBhbmQgZGVjb2RpbmcgY29tbWFuZCBsaW5lCithcmd1bWVudHMgKHVhcnRfcGFyc2Vfb3B0aW9ucykuCisKKworTG9ja2luZworLS0tLS0tLQorCitJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSBkcml2ZXIgdG8gcGVyZm9ybSB0aGUKK25lY2Vzc2FyeSBsb2NraW5nIHVzaW5nIHBvcnQtPmxvY2suICBUaGVyZSBhcmUgc29tZSBleGNlcHRpb25zICh3aGljaAorYXJlIGRlc2NyaWJlZCBpbiB0aGUgdWFydF9vcHMgbGlzdGluZyBiZWxvdy4pCisKK1RoZXJlIGFyZSB0aHJlZSBsb2Nrcy4gIEEgcGVyLXBvcnQgc3BpbmxvY2ssIGEgcGVyLXBvcnQgdG1wYnVmIHNlbWFwaG9yZSwKK2FuZCBhbiBvdmVyYWxsIHNlbWFwaG9yZS4KKworRnJvbSB0aGUgY29yZSBkcml2ZXIgcGVyc3BlY3RpdmUsIHRoZSBwb3J0LT5sb2NrIGxvY2tzIHRoZSBmb2xsb3dpbmcKK2RhdGE6CisKKwlwb3J0LT5tY3RybAorCXBvcnQtPmljb3VudAorCWluZm8tPnhtaXQuaGVhZCAoY2lyYy0+aGVhZCkKKwlpbmZvLT54bWl0LnRhaWwgKGNpcmMtPnRhaWwpCisKK1RoZSBsb3cgbGV2ZWwgZHJpdmVyIGlzIGZyZWUgdG8gdXNlIHRoaXMgbG9jayB0byBwcm92aWRlIGFueSBhZGRpdGlvbmFsCitsb2NraW5nLgorCitUaGUgY29yZSBkcml2ZXIgdXNlcyB0aGUgaW5mby0+dG1wYnVmX3NlbSBsb2NrIHRvIHByZXZlbnQgbXVsdGktdGhyZWFkZWQKK2FjY2VzcyB0byB0aGUgaW5mby0+dG1wYnVmIGJvdW5jZWJ1ZmZlciB1c2VkIGZvciBwb3J0IHdyaXRlcy4KKworVGhlIHBvcnRfc2VtIHNlbWFwaG9yZSBpcyB1c2VkIHRvIHByb3RlY3QgYWdhaW5zdCBwb3J0cyBiZWluZyBhZGRlZC8KK3JlbW92ZWQgb3IgcmVjb25maWd1cmVkIGF0IGluYXBwcm9wcmlhdGUgdGltZXMuCisKKwordWFydF9vcHMKKy0tLS0tLS0tCisKK1RoZSB1YXJ0X29wcyBzdHJ1Y3R1cmUgaXMgdGhlIG1haW4gaW50ZXJmYWNlIGJldHdlZW4gc2VyaWFsX2NvcmUgYW5kIHRoZQoraGFyZHdhcmUgc3BlY2lmaWMgZHJpdmVyLiAgSXQgY29udGFpbnMgYWxsIHRoZSBtZXRob2RzIHRvIGNvbnRyb2wgdGhlCitoYXJkd2FyZS4KKworICB0eF9lbXB0eShwb3J0KQorCVRoaXMgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgdHJhbnNtaXR0ZXIgZmlmbyBhbmQgc2hpZnRlcgorCWZvciB0aGUgcG9ydCBkZXNjcmliZWQgYnkgJ3BvcnQnIGlzIGVtcHR5LiAgSWYgaXQgaXMgZW1wdHksCisJdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIFRJT0NTRVJfVEVNVCwgb3RoZXJ3aXNlIHJldHVybiAwLgorCUlmIHRoZSBwb3J0IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIHRoZW4gaXQgc2hvdWxkCisJcmV0dXJuIFRJT0NTRVJfVEVNVC4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKwlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKKworICBzZXRfbWN0cmwocG9ydCwgbWN0cmwpCisJVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtb2RlbSBjb250cm9sIGxpbmVzIGZvciBwb3J0IGRlc2NyaWJlZAorCWJ5ICdwb3J0JyB0byB0aGUgc3RhdGUgZGVzY3JpYmVkIGJ5IG1jdHJsLiAgVGhlIHJlbGV2YW50IGJpdHMKKwlvZiBtY3RybCBhcmU6CisJCS0gVElPQ01fUlRTCVJUUyBzaWduYWwuCisJCS0gVElPQ01fRFRSCURUUiBzaWduYWwuCisJCS0gVElPQ01fT1VUMQlPVVQxIHNpZ25hbC4KKwkJLSBUSU9DTV9PVVQyCU9VVDIgc2lnbmFsLgorCUlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0LCB0aGUgc2lnbmFsIHNob3VsZCBiZSBkcml2ZW4KKwlhY3RpdmUuICBJZiB0aGUgYml0IGlzIGNsZWFyLCB0aGUgc2lnbmFsIHNob3VsZCBiZSBkcml2ZW4KKwlpbmFjdGl2ZS4KKworCUxvY2tpbmc6IHBvcnQtPmxvY2sgdGFrZW4uCisJSW50ZXJydXB0czogbG9jYWxseSBkaXNhYmxlZC4KKwlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKKworICBnZXRfbWN0cmwocG9ydCkKKwlSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIG1vZGVtIGNvbnRyb2wgaW5wdXRzLiAgVGhlIHN0YXRlCisJb2YgdGhlIG91dHB1dHMgc2hvdWxkIG5vdCBiZSByZXR1cm5lZCwgc2luY2UgdGhlIGNvcmUga2VlcHMKKwl0cmFjayBvZiB0aGVpciBzdGF0ZS4gIFRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBzaG91bGQgaW5jbHVkZToKKwkJLSBUSU9DTV9EQ0QJc3RhdGUgb2YgRENEIHNpZ25hbAorCQktIFRJT0NNX0NUUwlzdGF0ZSBvZiBDVFMgc2lnbmFsCisJCS0gVElPQ01fRFNSCXN0YXRlIG9mIERTUiBzaWduYWwKKwkJLSBUSU9DTV9SSQlzdGF0ZSBvZiBSSSBzaWduYWwKKwlUaGUgYml0IGlzIHNldCBpZiB0aGUgc2lnbmFsIGlzIGN1cnJlbnRseSBkcml2ZW4gYWN0aXZlLiAgSWYKKwl0aGUgcG9ydCBkb2VzIG5vdCBzdXBwb3J0IENUUywgRENEIG9yIERTUiwgdGhlIGRyaXZlciBzaG91bGQKKwlpbmRpY2F0ZSB0aGF0IHRoZSBzaWduYWwgaXMgcGVybWFuZW50bHkgYWN0aXZlLiAgSWYgUkkgaXMKKwlub3QgYXZhaWxhYmxlLCB0aGUgc2lnbmFsIHNob3VsZCBub3QgYmUgaW5kaWNhdGVkIGFzIGFjdGl2ZS4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKwlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKKworICBzdG9wX3R4KHBvcnQsdHR5X3N0b3ApCisJU3RvcCB0cmFuc21pdHRpbmcgY2hhcmFjdGVycy4gIFRoaXMgbWlnaHQgYmUgZHVlIHRvIHRoZSBDVFMKKwlsaW5lIGJlY29taW5nIGluYWN0aXZlIG9yIHRoZSB0dHkgbGF5ZXIgaW5kaWNhdGluZyB3ZSB3YW50CisJdG8gc3RvcCB0cmFuc21pc3Npb24uCisKKwl0dHlfc3RvcDogMSBpZiB0aGlzIGNhbGwgaXMgZHVlIHRvIHRoZSBUVFkgbGF5ZXIgaXNzdWluZyBhCisJICAgICAgICAgIFRUWSBzdG9wIHRvIHRoZSBkcml2ZXIgKGVxdWl2IHRvIHJzX3N0b3ApLgorCisJTG9ja2luZzogcG9ydC0+bG9jayB0YWtlbi4KKwlJbnRlcnJ1cHRzOiBsb2NhbGx5IGRpc2FibGVkLgorCVRoaXMgY2FsbCBtdXN0IG5vdCBzbGVlcAorCisgIHN0YXJ0X3R4KHBvcnQsdHR5X3N0YXJ0KQorCXN0YXJ0IHRyYW5zbWl0dGluZyBjaGFyYWN0ZXJzLiAgKGluY2lkZW50YWxseSwgbm9uZW1wdHkgd2lsbAorCWFsd2F5cyBiZSBub256ZXJvLCBhbmQgc2hvdWxkbid0IGJlIHVzZWQgLSBpdCB3aWxsIGJlIGRyb3BwZWQpLgorCisJdHR5X3N0YXJ0OiAxIGlmIHRoaXMgY2FsbCB3YXMgZHVlIHRvIHRoZSBUVFkgbGF5ZXIgaXNzdWluZworCSAgICAgICAgICAgYSBUVFkgc3RhcnQgdG8gdGhlIGRyaXZlciAoZXF1aXYgdG8gcnNfc3RhcnQpCisKKwlMb2NraW5nOiBwb3J0LT5sb2NrIHRha2VuLgorCUludGVycnVwdHM6IGxvY2FsbHkgZGlzYWJsZWQuCisJVGhpcyBjYWxsIG11c3Qgbm90IHNsZWVwCisKKyAgc3RvcF9yeChwb3J0KQorCVN0b3AgcmVjZWl2aW5nIGNoYXJhY3RlcnM7IHRoZSBwb3J0IGlzIGluIHRoZSBwcm9jZXNzIG9mCisJYmVpbmcgY2xvc2VkLgorCisJTG9ja2luZzogcG9ydC0+bG9jayB0YWtlbi4KKwlJbnRlcnJ1cHRzOiBsb2NhbGx5IGRpc2FibGVkLgorCVRoaXMgY2FsbCBtdXN0IG5vdCBzbGVlcAorCisgIGVuYWJsZV9tcyhwb3J0KQorCUVuYWJsZSB0aGUgbW9kZW0gc3RhdHVzIGludGVycnVwdHMuCisKKwlMb2NraW5nOiBwb3J0LT5sb2NrIHRha2VuLgorCUludGVycnVwdHM6IGxvY2FsbHkgZGlzYWJsZWQuCisJVGhpcyBjYWxsIG11c3Qgbm90IHNsZWVwCisKKyAgYnJlYWtfY3RsKHBvcnQsY3RsKQorCUNvbnRyb2wgdGhlIHRyYW5zbWlzc2lvbiBvZiBhIGJyZWFrIHNpZ25hbC4gIElmIGN0bCBpcworCW5vbnplcm8sIHRoZSBicmVhayBzaWduYWwgc2hvdWxkIGJlIHRyYW5zbWl0dGVkLiAgVGhlIHNpZ25hbAorCXNob3VsZCBiZSB0ZXJtaW5hdGVkIHdoZW4gYW5vdGhlciBjYWxsIGlzIG1hZGUgd2l0aCBhIHplcm8KKwljdGwuCisKKwlMb2NraW5nOiBub25lLgorCUludGVycnVwdHM6IGNhbGxlciBkZXBlbmRlbnQuCisJVGhpcyBjYWxsIG11c3Qgbm90IHNsZWVwCisKKyAgc3RhcnR1cChwb3J0KQorCUdyYWIgYW55IGludGVycnVwdCByZXNvdXJjZXMgYW5kIGluaXRpYWxpc2UgYW55IGxvdyBsZXZlbCBkcml2ZXIKKwlzdGF0ZS4gIEVuYWJsZSB0aGUgcG9ydCBmb3IgcmVjZXB0aW9uLiAgSXQgc2hvdWxkIG5vdCBhY3RpdmF0ZQorCVJUUyBub3IgRFRSOyB0aGlzIHdpbGwgYmUgZG9uZSB2aWEgYSBzZXBhcmF0ZSBjYWxsIHRvIHNldF9tY3RybC4KKworCUxvY2tpbmc6IHBvcnRfc2VtIHRha2VuLgorCUludGVycnVwdHM6IGdsb2JhbGx5IGRpc2FibGVkLgorCisgIHNodXRkb3duKHBvcnQpCisJRGlzYWJsZSB0aGUgcG9ydCwgZGlzYWJsZSBhbnkgYnJlYWsgY29uZGl0aW9uIHRoYXQgbWF5IGJlIGluCisJZWZmZWN0LCBhbmQgZnJlZSBhbnkgaW50ZXJydXB0IHJlc291cmNlcy4gIEl0IHNob3VsZCBub3QgZGlzYWJsZQorCVJUUyBub3IgRFRSOyB0aGlzIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSB2aWEgYSBzZXBhcmF0ZQorCWNhbGwgdG8gc2V0X21jdHJsLgorCisJTG9ja2luZzogcG9ydF9zZW0gdGFrZW4uCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKworICBzZXRfdGVybWlvcyhwb3J0LHRlcm1pb3Msb2xkdGVybWlvcykKKwlDaGFuZ2UgdGhlIHBvcnQgcGFyYW1ldGVycywgaW5jbHVkaW5nIHdvcmQgbGVuZ3RoLCBwYXJpdHksIHN0b3AKKwliaXRzLiAgVXBkYXRlIHJlYWRfc3RhdHVzX21hc2sgYW5kIGlnbm9yZV9zdGF0dXNfbWFzayB0byBpbmRpY2F0ZQorCXRoZSB0eXBlcyBvZiBldmVudHMgd2UgYXJlIGludGVyZXN0ZWQgaW4gcmVjZWl2aW5nLiAgUmVsZXZhbnQKKwl0ZXJtaW9zLT5jX2NmbGFnIGJpdHMgYXJlOgorCQlDU0laRQktIHdvcmQgc2l6ZQorCQlDU1RPUEIJLSAyIHN0b3AgYml0cworCQlQQVJFTkIJLSBwYXJpdHkgZW5hYmxlCisJCVBBUk9ERAktIG9kZCBwYXJpdHkgKHdoZW4gUEFSRU5CIGlzIGluIGZvcmNlKQorCQlDUkVBRAktIGVuYWJsZSByZWNlcHRpb24gb2YgY2hhcmFjdGVycyAoaWYgbm90IHNldCwKKwkJCSAgc3RpbGwgcmVjZWl2ZSBjaGFyYWN0ZXJzIGZyb20gdGhlIHBvcnQsIGJ1dAorCQkJICB0aHJvdyB0aGVtIGF3YXkuCisJCUNSVFNDVFMJLSBpZiBzZXQsIGVuYWJsZSBDVFMgc3RhdHVzIGNoYW5nZSByZXBvcnRpbmcKKwkJQ0xPQ0FMCS0gaWYgbm90IHNldCwgZW5hYmxlIG1vZGVtIHN0YXR1cyBjaGFuZ2UKKwkJCSAgcmVwb3J0aW5nLgorCVJlbGV2YW50IHRlcm1pb3MtPmNfaWZsYWcgYml0cyBhcmU6CisJCUlOUENLCS0gZW5hYmxlIGZyYW1lIGFuZCBwYXJpdHkgZXJyb3IgZXZlbnRzIHRvIGJlCisJCQkgIHBhc3NlZCB0byB0aGUgVFRZIGxheWVyLgorCQlCUktJTlQKKwkJUEFSTVJLCS0gYm90aCBvZiB0aGVzZSBlbmFibGUgYnJlYWsgZXZlbnRzIHRvIGJlCisJCQkgIHBhc3NlZCB0byB0aGUgVFRZIGxheWVyLgorCisJCUlHTlBBUgktIGlnbm9yZSBwYXJpdHkgYW5kIGZyYW1pbmcgZXJyb3JzCisJCUlHTkJSSwktIGlnbm9yZSBicmVhayBlcnJvcnMsICBJZiBJR05QQVIgaXMgYWxzbworCQkJICBzZXQsIGlnbm9yZSBvdmVycnVuIGVycm9ycyBhcyB3ZWxsLgorCVRoZSBpbnRlcmFjdGlvbiBvZiB0aGUgaWZsYWcgYml0cyBpcyBhcyBmb2xsb3dzIChwYXJpdHkgZXJyb3IKKwlnaXZlbiBhcyBhbiBleGFtcGxlKToKKwlQYXJpdHkgZXJyb3IJSU5QQ0sJSUdOUEFSCisJTm9uZQkJbi9hCW4vYQljaGFyYWN0ZXIgcmVjZWl2ZWQKKwlZZXMJCW4vYQkwCWNoYXJhY3RlciBkaXNjYXJkZWQKKwlZZXMJCTAJMQljaGFyYWN0ZXIgcmVjZWl2ZWQsIG1hcmtlZCBhcworCQkJCQlUVFlfTk9STUFMCisJWWVzCQkxCTEJY2hhcmFjdGVyIHJlY2VpdmVkLCBtYXJrZWQgYXMKKwkJCQkJVFRZX1BBUklUWQorCisJT3RoZXIgZmxhZ3MgbWF5IGJlIHVzZWQgKGVnLCB4b24veG9mZiBjaGFyYWN0ZXJzKSBpZiB5b3VyCisJaGFyZHdhcmUgc3VwcG9ydHMgaGFyZHdhcmUgInNvZnQiIGZsb3cgY29udHJvbC4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKwlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKKworICBwbShwb3J0LHN0YXRlLG9sZHN0YXRlKQorCVBlcmZvcm0gYW55IHBvd2VyIG1hbmFnZW1lbnQgcmVsYXRlZCBhY3Rpdml0aWVzIG9uIHRoZSBzcGVjaWZpZWQKKwlwb3J0LiAgU3RhdGUgaW5kaWNhdGVzIHRoZSBuZXcgc3RhdGUgKGRlZmluZWQgYnkgQUNQSSBEMC1EMyksCisJb2xkc3RhdGUgaW5kaWNhdGVzIHRoZSBwcmV2aW91cyBzdGF0ZS4gIEVzc2VudGlhbGx5LCBEMCBtZWFucworCWZ1bGx5IG9uLCBEMyBtZWFucyBwb3dlcmVkIGRvd24uCisKKwlUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB0byBncmFiIGFueSByZXNvdXJjZXMuCisKKwlUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHBvcnQgaXMgaW5pdGlhbGx5IG9wZW5lZCBhbmQgZmluYWxseQorCWNsb3NlZCwgZXhjZXB0IHdoZW4gdGhlIHBvcnQgaXMgYWxzbyB0aGUgc3lzdGVtIGNvbnNvbGUuICBUaGlzCisJd2lsbCBvY2N1ciBldmVuIGlmIENPTkZJR19QTSBpcyBub3Qgc2V0LgorCisJTG9ja2luZzogbm9uZS4KKwlJbnRlcnJ1cHRzOiBjYWxsZXIgZGVwZW5kZW50LgorCisgIHR5cGUocG9ydCkKKwlSZXR1cm4gYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnN0YW50IGRlc2NyaWJpbmcgdGhlIHNwZWNpZmllZAorCXBvcnQsIG9yIHJldHVybiBOVUxMLCBpbiB3aGljaCBjYXNlIHRoZSBzdHJpbmcgJ3Vua25vd24nIGlzCisJc3Vic3RpdHV0ZWQuCisKKwlMb2NraW5nOiBub25lLgorCUludGVycnVwdHM6IGNhbGxlciBkZXBlbmRlbnQuCisKKyAgcmVsZWFzZV9wb3J0KHBvcnQpCisJUmVsZWFzZSBhbnkgbWVtb3J5IGFuZCBJTyByZWdpb24gcmVzb3VyY2VzIGN1cnJlbnRseSBpbiB1c2UgYnkKKwl0aGUgcG9ydC4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKworICByZXF1ZXN0X3BvcnQocG9ydCkKKwlSZXF1ZXN0IGFueSBtZW1vcnkgYW5kIElPIHJlZ2lvbiByZXNvdXJjZXMgcmVxdWlyZWQgYnkgdGhlIHBvcnQuCisJSWYgYW55IGZhaWwsIG5vIHJlc291cmNlcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aGVuIHRoaXMgZnVuY3Rpb24KKwlyZXR1cm5zLCBhbmQgaXQgc2hvdWxkIHJldHVybiAtRUJVU1kgb24gZmFpbHVyZS4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKworICBjb25maWdfcG9ydChwb3J0LHR5cGUpCisJUGVyZm9ybSBhbnkgYXV0b2NvbmZpZ3VyYXRpb24gc3RlcHMgcmVxdWlyZWQgZm9yIHRoZSBwb3J0LiAgYHR5cGVgCisJY29udGFpbnMgYSBiaXQgbWFzayBvZiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbi4gIFVBUlRfQ09ORklHX1RZUEUKKwlpbmRpY2F0ZXMgdGhhdCB0aGUgcG9ydCByZXF1aXJlcyBkZXRlY3Rpb24gYW5kIGlkZW50aWZpY2F0aW9uLgorCXBvcnQtPnR5cGUgc2hvdWxkIGJlIHNldCB0byB0aGUgdHlwZSBmb3VuZCwgb3IgUE9SVF9VTktOT1dOIGlmCisJbm8gcG9ydCB3YXMgZGV0ZWN0ZWQuCisKKwlVQVJUX0NPTkZJR19JUlEgaW5kaWNhdGVzIGF1dG9jb25maWd1cmF0aW9uIG9mIHRoZSBpbnRlcnJ1cHQgc2lnbmFsLAorCXdoaWNoIHNob3VsZCBiZSBwcm9iZWQgdXNpbmcgc3RhbmRhcmQga2VybmVsIGF1dG9wcm9iaW5nIHRlY2huaXF1ZXMuCisJVGhpcyBpcyBub3QgbmVjZXNzYXJ5IG9uIHBsYXRmb3JtcyB3aGVyZSBwb3J0cyBoYXZlIGludGVycnVwdHMKKwlpbnRlcm5hbGx5IGhhcmQgd2lyZWQgKGVnLCBzeXN0ZW0gb24gYSBjaGlwIGltcGxlbWVudGF0aW9ucykuCisKKwlMb2NraW5nOiBub25lLgorCUludGVycnVwdHM6IGNhbGxlciBkZXBlbmRlbnQuCisKKyAgdmVyaWZ5X3BvcnQocG9ydCxzZXJpbmZvKQorCVZlcmlmeSB0aGUgbmV3IHNlcmlhbCBwb3J0IGluZm9ybWF0aW9uIGNvbnRhaW5lZCB3aXRoaW4gc2VyaW5mbyBpcworCXN1aXRhYmxlIGZvciB0aGlzIHBvcnQgdHlwZS4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKworICBpb2N0bChwb3J0LGNtZCxhcmcpCisJUGVyZm9ybSBhbnkgcG9ydCBzcGVjaWZpYyBJT0NUTHMuICBJT0NUTCBjb21tYW5kcyBtdXN0IGJlIGRlZmluZWQKKwl1c2luZyB0aGUgc3RhbmRhcmQgbnVtYmVyaW5nIHN5c3RlbSBmb3VuZCBpbiA8YXNtL2lvY3RsLmg+CisKKwlMb2NraW5nOiBub25lLgorCUludGVycnVwdHM6IGNhbGxlciBkZXBlbmRlbnQuCisKK090aGVyIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tCisKK3VhcnRfdXBkYXRlX3RpbWVvdXQocG9ydCxjZmxhZyxxdW90KQorCVVwZGF0ZSB0aGUgRklGTyBkcmFpbiB0aW1lb3V0LCBwb3J0LT50aW1lb3V0LCBhY2NvcmRpbmcgdG8gdGhlCisJbnVtYmVyIG9mIGJpdHMsIHBhcml0eSwgc3RvcCBiaXRzIGFuZCBxdW90aWVudC4KKworCUxvY2tpbmc6IGNhbGxlciBpcyBleHBlY3RlZCB0byB0YWtlIHBvcnQtPmxvY2sKKwlJbnRlcnJ1cHRzOiBuL2EKKwordWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsdGVybWlvcykKKwlSZXR1cm4gdGhlIG51bWVyaWMgYmF1ZCByYXRlIGZvciB0aGUgc3BlY2lmaWVkIHRlcm1pb3MsIHRha2luZworCWFjY291bnQgb2YgdGhlIHNwZWNpYWwgMzg0MDAgYmF1ZCAia2x1ZGdlIi4gIFRoZSBCMCBiYXVkIHJhdGUKKwlpcyBtYXBwZWQgdG8gOTYwMCBiYXVkLgorCisJTG9ja2luZzogY2FsbGVyIGRlcGVuZGVudC4KKwlJbnRlcnJ1cHRzOiBuL2EKKwordWFydF9nZXRfZGl2aXNvcihwb3J0LHRlcm1pb3Msb2xkdGVybWlvcykKKwlSZXR1cm4gdGhlIGRpdnNvciAoYmF1ZF9iYXNlIC8gYmF1ZCkgZm9yIHRoZSBzZWxlY3RlZCBiYXVkIHJhdGUKKwlzcGVjaWZpZWQgYnkgdGVybWlvcy4gIElmIHRoZSBiYXVkIHJhdGUgaXMgb3V0IG9mIHJhbmdlLCB0cnkKKwl0aGUgb3JpZ2luYWwgYmF1ZCByYXRlIHNwZWNpZmllZCBieSBvbGR0ZXJtaW9zIChpZiBub24tTlVMTCkuCisJSWYgdGhhdCBmYWlscywgdHJ5IDk2MDAgYmF1ZC4KKworCUlmIDM4NDAwIGJhdWQgYW5kIGN1c3RvbSBkaXZpc29yIGlzIHNlbGVjdGVkLCByZXR1cm4gdGhlCisJY3VzdG9tIGRpdmlzb3IgaW5zdGVhZC4KKworCUxvY2tpbmc6IGNhbGxlciBkZXBlbmRlbnQuCisJSW50ZXJydXB0czogbi9hCisKK090aGVyIG5vdGVzCistLS0tLS0tLS0tLQorCitJdCBpcyBpbnRlbmRlZCBzb21lIGRheSB0byBkcm9wIHRoZSAndW51c2VkJyBlbnRyaWVzIGZyb20gdWFydF9wb3J0LCBhbmQKK2FsbG93IGxvdyBsZXZlbCBkcml2ZXJzIHRvIHJlZ2lzdGVyIHRoZWlyIG93biBpbmRpdmlkdWFsIHVhcnRfcG9ydCdzIHdpdGgKK3RoZSBjb3JlLiAgVGhpcyB3aWxsIGFsbG93IGRyaXZlcnMgdG8gdXNlIHVhcnRfcG9ydCBhcyBhIHBvaW50ZXIgdG8gYQorc3RydWN0dXJlIGNvbnRhaW5pbmcgYm90aCB0aGUgdWFydF9wb3J0IGVudHJ5IHdpdGggdGhlaXIgb3duIGV4dGVuc2lvbnMsCit0aHVzOgorCisJc3RydWN0IG15X3BvcnQgeworCQlzdHJ1Y3QgdWFydF9wb3J0CXBvcnQ7CisJCWludAkJCW15X3N0dWZmOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NnaS12aXN3cy50eHQgYi9Eb2N1bWVudGF0aW9uL3NnaS12aXN3cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmMDgxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NnaS12aXN3cy50eHQKQEAgLTAsMCArMSwxMyBAQAorCitUaGUgU0dJIFZpc3VhbCBXb3Jrc3RhdGlvbnMgKG1vZGVscyAzMjAgYW5kIDU0MCkgYXJlIGJhc2VkIGFyb3VuZAordGhlIENvYmFsdCwgTGl0aGl1bSwgYW5kIEFyc2VuaWMgQVNJQ3MuICBUaGUgQ29iYWx0IEFTSUMgaXMgdGhlCittYWluIHN5c3RlbSBBU0lDIHdoaWNoIGludGVyZmFjZXMgdGhlIDEtNCBJQTMyIGNwdXMsIHRoZSBtZW1vcnkKK3N5c3RlbSwgYW5kIHRoZSBJL08gc3lzdGVtIGluIHRoZSBMaXRoaXVtIEFTSUMuICBUaGUgQ29iYWx0IEFTSUMKK2Fsc28gY29udGFpbnMgdGhlIDNEIGdmeCByZW5kZXJpbmcgZW5naW5lIHdoaWNoIHJlbmRlcnMgdG8gbWFpbgorc3lzdGVtIG1lbW9yeSAtLSBwYXJ0IG9mIHdoaWNoIGlzIHVzZWQgYXMgdGhlIGZyYW1lIGJ1ZmZlciB3aGljaAoraXMgRE1BJ2VkIHRvIGEgdmlkZW8gY29ubmVjdG9yIHVzaW5nIHRoZSBBcnNlbmljIEFTSUMuICBBIFBJSVg0CitjaGlwIGFuZCBOUzg3MzA3IGFyZSB1c2VkIHRvIHByb3ZpZGUgbGVnYWN5IGRldmljZSBzdXBwb3J0IChJREUsCitzZXJpYWwsIGZsb3BweSwgYW5kIHBhcmFsbGVsKS4KKworVGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiBjaGlwc2V0IGxhcmdlbHkgY29uZm9ybXMgdG8gdGhlIFBDIGFyY2hpdGVjdHVyZQord2l0aCBzb21lIG5vdGFibGUgZXhjZXB0aW9ucyBzdWNoIGFzIGludGVycnVwdCBoYW5kbGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2gva2dkYi50eHQgYi9Eb2N1bWVudGF0aW9uL3NoL2tnZGIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMDRmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NoL2tnZGIudHh0CkBAIC0wLDAgKzEsMTc5IEBACisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGJlaGF2aW9yIG9mIEtHREIgZm9yIHRoZSBTSAora2VybmVsLiBCYXNlZCBvbiBhIGRlc2NyaXB0aW9uIGZyb20gSGVucnkgQmVsbCA8aGVucnkuYmVsbEBzdC5jb20+LCBpdAoraGFzIGJlZW4gbW9kaWZpZWQgdG8gYWNjb3VudCBmb3IgcXVpcmtzIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLgorCitWZXJzaW9uCis9PT09PT09CisKK1RoaXMgdmVyc2lvbiBvZiBLR0RCIHdhcyB3cml0dGVuIGZvciAyLjQueHgga2VybmVscyBmb3IgdGhlIFNIIGFyY2hpdGVjdHVyZS4KK0Z1cnRoZXIgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZnJvbSB0aGUgbGludXgtc2ggcHJvamVjdCB3ZWJzaXRlLgorCisKK0RlYnVnZ2luZyBTZXR1cDogSG9zdAorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgdHdvIG1hY2hpbmVzIHdpbGwgYmUgY29ubmVjdGVkIHRvZ2V0aGVyIHZpYSBhIHNlcmlhbCBsaW5lIC0gdGhpcworc2hvdWxkIGJlIGEgbnVsbCBtb2RlbSBjYWJsZSBpLmUuIHdpdGggYSB0d2lzdC4KKworT24geW91ciBERVZFTE9QTUVOVCBtYWNoaW5lLCBnbyB0byB5b3VyIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5IGFuZAorYnVpbGQgdGhlIGtlcm5lbCwgZW5hYmxpbmcgS0dEQiBzdXBwb3J0IGluIHRoZSAia2VybmVsIGhhY2tpbmciIHNlY3Rpb24uCitUaGlzIGluY2x1ZGVzIHRoZSBLR0RCIGNvZGUsIGFuZCBhbHNvIG1ha2VzIHRoZSBrZXJuZWwgYmUgY29tcGlsZWQgd2l0aAordGhlICItZyIgb3B0aW9uIHNldCAtLSBuZWNlc3NhcnkgZm9yIGRlYnVnZ2luZy4KKworVG8gaW5zdGFsbCB0aGlzIG5ldyBrZXJuZWwsIHVzZSB0aGUgZm9sbG93aW5nIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUuCisKK0RlY2lkZSBvbiB3aGljaCB0dHkgcG9ydCB5b3Ugd2FudCB0aGUgbWFjaGluZXMgdG8gY29tbXVuaWNhdGUsIHRoZW4KK2NhYmxlIHRoZW0gdXAgYmFjay10by1iYWNrIHVzaW5nIHRoZSBudWxsIG1vZGVtLiAgT24gdGhlIERFVkVMT1BNRU5UCittYWNoaW5lLCB5b3UgbWF5IHdpc2ggdG8gY3JlYXRlIGFuIGluaXRpYWxpemF0aW9uIGZpbGUgY2FsbGVkIC5nZGJpbml0CisoaW4gdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5IG9yIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkpIHRvIGV4ZWN1dGUgCitjb21tb25seS11c2VkIGNvbW1hbmRzIGF0IHN0YXJ0dXAuCisKK0EgbWluaW1hbCAuZ2RiaW5pdCBtaWdodCBsb29rIGxpa2UgdGhpczoKKworICBmaWxlIHZtbGludXgKKyAgc2V0IHJlbW90ZWJhdWQgMTE1MjAwCisgIHRhcmdldCByZW1vdGUgL2Rldi90dHlTMAorCitDaGFuZ2UgdGhlICJ0YXJnZXQiIGRlZmluaXRpb24gc28gdGhhdCBpdCBzcGVjaWZpZXMgdGhlIHR0eSBwb3J0IHRoYXQKK3lvdSBpbnRlbmQgdG8gdXNlLiAgQ2hhbmdlIHRoZSAicmVtb3RlYmF1ZCIgZGVmaW5pdGlvbiB0byBtYXRjaCB0aGUKK2RhdGEgcmF0ZSB0aGF0IHlvdSBhcmUgZ29pbmcgdG8gdXNlIGZvciB0aGUgY29tIGxpbmUgKDExNTIwMCBpcyB0aGUKK2RlZmF1bHQpLiAKKworRGVidWdnaW5nIFNldHVwOiBUYXJnZXQKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCeSBkZWZhdWx0LCB0aGUgS0dEQiBzdHViIHdpbGwgY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdCBHREIgdXNpbmcKK3R0eVNDMSBhdCAxMTUyMDAgYmF1ZCwgOCBkYXRhYml0cywgbm8gcGFyaXR5OyB0aGVzZSBkZWZhdWx0cyBjYW4gYmUKK2NoYW5nZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBBcyB0aGUga2VybmVsIHN0YXJ0cyB1cCwgS0dEQiB3aWxsCitpbml0aWFsaXplIHNvIHRoYXQgYnJlYWtwb2ludHMsIGtlcm5lbCBzZWdmYXVsdHMsIGFuZCBzbyBmb3J0aCB3aWxsCitnZW5lcmFsbHkgZW50ZXIgdGhlIGRlYnVnZ2VyLgorCitUaGlzIGJlaGF2aW9yIGNhbiBiZSBtb2RpZmllZCBieSBpbmNsdWRpbmcgdGhlICJrZ2RiIiBvcHRpb24gaW4gdGhlCitrZXJuZWwgY29tbWFuZCBsaW5lOyB0aGlzIG9wdGlvbiBoYXMgdGhlIGdlbmVyYWwgZm9ybToKKworICBrZ2RiPTx0dHlzcGVjPiw8YWN0aW9uPgorCitUaGUgPHR0eXNwZWM+IGluZGljYXRlcyB0aGUgcG9ydCB0byB1c2UsIGFuZCBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5CitiYXVkLCBwYXJpdHkgYW5kIGRhdGFiaXRzIC0tIGUuZy4gInR0eVNDMCw5NjAwTjgiIG9yICJ0dHlTQzEsMTkyMDAiLgorCitUaGUgPGFjdGlvbj4gY2FuIGJlICJoYWx0IiBvciAiZGlzYWJsZWQiLiAgVGhlICJoYWx0IiBhY3Rpb24gZW50ZXJzIHRoZQorZGVidWdnZXIgdmlhIGEgYnJlYWtwb2ludCBhcyBzb29uIGFzIGtnZGIgaXMgaW5pdGlhbGl6ZWQ7IHRoZSAiZGlzYWJsZWQiCithY3Rpb24gY2F1c2VzIGtnZGIgdG8gaWdub3JlIGtlcm5lbCBzZWdmYXVsdHMgYW5kIHN1Y2ggdW50aWwgZXhwbGljaXRseQorZW50ZXJlZCBieSBhIGJyZWFrcG9pbnQgaW4gdGhlIGNvZGUgb3IgYnkgZXh0ZXJuYWwgYWN0aW9uIChzeXNycSBvciBOTUkpLiAKKworKEJvdGggPHR0eXNwZWM+IGFuZCA8YWN0aW9uPiBjYW4gYXBwZWFyIGFsb25lLCB3L28gdGhlIHNlcGFyYXRpbmcgY29tbWEuKQorCitGb3IgZXhhbXBsZSwgaWYgeW91IHdpc2ggdG8gZGVidWcgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXAgY29kZSwgeW91CittaWdodCBzcGVjaWZ5IHRoZSBoYWx0IG9wdGlvbjoKKworICBrZ2RiPWhhbHQKKworQm9vdCB0aGUgVEFSR0VUIG1hY2hpbmVtLCB3aGljaCB3aWxsIGFwcGVhciB0byBoYW5nLiAKKworT24geW91ciBERVZFTE9QTUVOVCBtYWNoaW5lLCBjZCB0byB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBnZGIKK3Byb2dyYW0uICAoVGhpcyBpcyBsaWtlbHkgdG8gYmUgYSBjcm9zcyBHREIgd2hpY2ggcnVucyBvbiB5b3VyIGhvc3QgYnV0CitpcyBidWlsdCBmb3IgYW4gU0ggdGFyZ2V0LikgSWYgZXZlcnl0aGluZyBpcyB3b3JraW5nIGNvcnJlY3RseSB5b3UKK3Nob3VsZCBzZWUgZ2RiIHByaW50IG91dCBhIGZldyBsaW5lcyBpbmRpY2F0aW5nIHRoYXQgYSBicmVha3BvaW50IGhhcworYmVlbiB0YWtlbi4gIEl0IHdpbGwgYWN0dWFsbHkgc2hvdyBhIGxpbmUgb2YgY29kZSBpbiB0aGUgdGFyZ2V0IGtlcm5lbAoraW5zaWRlIHRoZSBnZGJzdHViIGFjdGl2YXRpb24gY29kZS4KKworTk9URTogQkUgU1VSRSBUTyBURVJNSU5BVEUgT1IgU1VTUEVORCBhbnkgb3RoZXIgaG9zdCBhcHBsaWNhdGlvbiB3aGljaAorbWF5IGJlIHVzaW5nIHRoZSBzYW1lIHNlcmlhbCBwb3J0IChmb3IgZXhhbXBsZSwgYSB0ZXJtaW5hbCBlbXVsYXRvciB5b3UKK2hhdmUgYmVlbiB1c2luZyB0byBjb25uZWN0IHRvIHRoZSB0YXJnZXQgYm9vdCBjb2RlLikgIE90aGVyd2lzZSwgZGF0YQorZnJvbSB0aGUgdGFyZ2V0IG1heSBub3QgYWxsIGdldCB0byBHREIhCisKK1lvdSBjYW4gbm93IHVzZSB3aGF0ZXZlciBnZGIgY29tbWFuZHMgeW91IGxpa2UgdG8gc2V0IGJyZWFrcG9pbnRzLgorRW50ZXIgImNvbnRpbnVlIiB0byBzdGFydCB5b3VyIHRhcmdldCBtYWNoaW5lIGV4ZWN1dGluZyBhZ2Fpbi4gIEF0IHRoaXMKK3BvaW50IHRoZSB0YXJnZXQgc3lzdGVtIHdpbGwgcnVuIGF0IGZ1bGwgc3BlZWQgdW50aWwgaXQgZW5jb3VudGVycworeW91ciBicmVha3BvaW50IG9yIGdldHMgYSBzZWdtZW50IHZpb2xhdGlvbiBpbiB0aGUga2VybmVsLCBvciB3aGF0ZXZlci4KKworU2VyaWFsIFBvcnRzOiBLR0RCLCBDb25zb2xlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgdmVyc2lvbiBvZiBLR0RCIG1heSBub3QgZ3JhY2VmdWxseSBoYW5kbGUgY29uZmxpY3Qgd2l0aCBvdGhlcgorZHJpdmVycyBpbiB0aGUga2VybmVsIHVzaW5nIHRoZSBzYW1lIHBvcnQuIElmIEtHREIgaXMgY29uZmlndXJlZCBvbiB0aGUKK3NhbWUgcG9ydCAoYW5kIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycykgYXMgdGhlIGtlcm5lbCBjb25zb2xlLCBvciBpZgorQ09ORklHX1NIX0tHREJfQ09OU09MRSBpcyBjb25maWd1cmVkLCB0aGluZ3Mgc2hvdWxkIGJlIGZpbmUgKHRob3VnaCBpbgorc29tZSBjYXNlcyBjb25zb2xlIG1lc3NhZ2VzIG1heSBhcHBlYXIgdHdpY2UgdGhyb3VnaCBHREIpLiAgQnV0IGlmIHRoZQorS0dEQiBwb3J0IGlzIG5vdCB0aGUga2VybmVsIGNvbnNvbGUgYW5kIHVzZWQgYnkgYW5vdGhlciBzZXJpYWwgZHJpdmVyCit3aGljaCBhc3N1bWVzIGRpZmZlcmVudCBzZXJpYWwgcGFyYW1ldGVycyAoZS5nLiBiYXVkIHJhdGUpIEtHREIgbWF5IG5vdAorcmVjb3Zlci4KKworQWxzbywgd2hlbiBLR0RCIGlzIGVudGVyZWQgdmlhIHN5c3JxLWcgKHJlcXVpcmVzIENPTkZJR19LR0RCX1NZU1JRKSBhbmQKK3RoZSBrZ2RiIHBvcnQgdXNlcyB0aGUgc2FtZSBwb3J0IGFzIHRoZSBjb25zb2xlLCBkZXRhY2hpbmcgR0RCIHdpbGwgbm90CityZXN0b3JlIHRoZSBjb25zb2xlIHRvIHdvcmtpbmcgb3JkZXIgd2l0aG91dCB0aGUgcG9ydCBiZWluZyByZS1vcGVuZWQuCisKK0Fub3RoZXIgc2VyaW91cyBjb25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgR0RCIGN1cnJlbnRseSBDQU5OT1QgYnJlYWsKK2ludG8gS0dEQiBleHRlcm5hbGx5IChlLmcuIHZpYSBeQyBvciA8QlJFQUs+KTsgdW5sZXNzIGEgYnJlYWtwb2ludCBvcgorZXJyb3IgaXMgZW5jb3VudGVyZWQsIHRoZSBvbmx5IHdheSB0byBlbnRlciBLR0RCIGFmdGVyIHRoZSBpbml0aWFsIGhhbHQKKyhzZWUgYWJvdmUpIGlzIHZpYSBOTUkgKENPTkZJR19LR0RCX05NSSkgb3Igc3lzcnEtZyAoQ09ORklHX0tHREJfU1lTUlEpLgorCitDb2RlIGlzIGluY2x1ZGVkIGZvciB0aGUgYmFzaWMgSGl0YWNoaSBTb2x1dGlvbiBFbmdpbmUgYm9hcmRzIHRvIGFsbG93Cit0aGUgdXNlIG9mIHR0eVMwIGZvciBLR0RCIGlmIGRlc2lyZWQ7IHRoaXMgaXMgbGVzcyByb2J1c3QsIGJ1dCBtYXkgYmUKK3VzZWZ1bCBpbiBzb21lIGNhc2VzLiAgKFRoaXMgY2Fubm90IGJlIHNlbGVjdGVkIHVzaW5nIHRoZSBjb25maWcgZmlsZSwgCitidXQgb25seSB0aHJvdWdoIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBlLmcuICJrZ2RiPXR0eVMwIiwgdGhvdWdoIHRoZQorY29uZmlndXJlZCBkZWZhdWx0cyBmb3IgYmF1ZCByYXRlIGV0Yy4gc3RpbGwgYXBwbHkgaWYgbm90IG92ZXJyaWRkZW4uKQorCitJZiBnZGJzdHViIERvZXMgTm90IFdvcmsKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiBpdCBkb2Vzbid0IHdvcmssIHlvdSB3aWxsIGhhdmUgdG8gdHJvdWJsZXNob290IGl0LiAgRG8gdGhlIGVhc3kKK3RoaW5ncyBmaXJzdCBsaWtlIGRvdWJsZSBjaGVja2luZyB5b3VyIGNhYmxpbmcgYW5kIGRhdGEgcmF0ZXMuICBZb3UKK21pZ2h0IHRyeSBzb21lIG5vbi1rZXJuZWwgYmFzZWQgcHJvZ3JhbXMgdG8gc2VlIGlmIHRoZSBiYWNrLXRvLWJhY2sKK2Nvbm5lY3Rpb24gd29ya3MgcHJvcGVybHkuICBKdXN0IHNvbWV0aGluZyBzaW1wbGUgbGlrZSBjYXQgL2V0Yy9ob3N0cworL2Rldi90dHlTMCBvbiBvbmUgbWFjaGluZSBhbmQgY2F0IC9kZXYvdHR5UzAgb24gdGhlIG90aGVyIHdpbGwgdGVsbCB5b3UKK2lmIHlvdSBjYW4gc2VuZCBkYXRhIGZyb20gb25lIG1hY2hpbmUgdG8gdGhlIG90aGVyLiAgVGhlcmUgaXMgbm8gcG9pbnQKK2luIHRlYXJpbmcgb3V0IHlvdXIgaGFpciBpbiB0aGUga2VybmVsIGlmIHRoZSBsaW5lIGRvZXNuJ3Qgd29yay4KKworSWYgeW91IG5lZWQgdG8gZGVidWcgdGhlIEdEQi9LR0RCIGNvbW11bmljYXRpb24gaXRzZWxmLCB0aGUgZ2RiIGNvbW1hbmRzCisic2V0IGRlYnVnIHJlbW90ZSAxIiBhbmQgInNldCBkZWJ1ZyBzZXJpYWwgMSIgbWF5IGJlIHVzZWZ1bCwgYnV0IGJlCit3YXJuZWQ6IHRoZXkgcHJvZHVjZSBhIGxvdCBvZiBvdXRwdXQuCisKK1RocmVhZHMKKz09PT09PT0KKworRWFjaCBwcm9jZXNzIGluIGEgdGFyZ2V0IG1hY2hpbmUgaXMgc2VlbiBhcyBhIGdkYiB0aHJlYWQuIGdkYiB0aHJlYWQgcmVsYXRlZAorY29tbWFuZHMgKGluZm8gdGhyZWFkcywgdGhyZWFkIG4pIGNhbiBiZSB1c2VkLiBDT05GSUdfS0dEQl9USFJFQUQgbXVzdAorYmUgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCitJbiB0aGlzIHZlcnNpb24sIGtnZGIgcmVwb3J0cyBQSURfTUFYICgzMjc2OCkgYXMgdGhlIHByb2Nlc3MgSUQgZm9yIHRoZQoraWRsZSBwcm9jZXNzIChwaWQgMCksIHNpbmNlIEdEQiBkb2VzIG5vdCBhY2NlcHQgMCBhcyBhbiBJRC4KKworRGV0YWNoaW5nIChleGl0aW5nIEtHREIpCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSB0d28gd2F5cyB0byByZXN1bWUgZnVsbC1zcGVlZCB0YXJnZXQgZXhlY3V0aW9uOiAiY29udGludWUiIGFuZAorImRldGFjaCIuIFdpdGggImNvbnRpbnVlIiwgR0RCIGluc2VydHMgYW55IHNwZWNpZmllZCBicmVha3BvaW50cyBpbiB0aGUKK3RhcmdldCBjb2RlIGFuZCByZXN1bWVzIGV4ZWN1dGlvbjsgdGhlIHRhcmdldCBpcyBzdGlsbCBpbiAiZ2RiIG1vZGUiLgorSWYgYSBicmVha3BvaW50IG9yIG90aGVyIGRlYnVnIGV2ZW50IChlLmcuIE5NSSkgaGFwcGVucywgdGhlIHRhcmdldAoraGFsdHMgYW5kIGNvbW11bmljYXRlcyB3aXRoIEdEQiBhZ2Fpbiwgd2hpY2ggaXMgd2FpdGluZyBmb3IgaXQuCisKK1dpdGggImRldGFjaCIsIEdEQiBkb2VzICpub3QqIGluc2VydCBhbnkgYnJlYWtwb2ludHM7IHRhcmdldCBleGVjdXRpb24KK2lzIHJlc3VtZWQgYW5kIEdEQiBzdG9wcyBjb21tdW5pY2F0aW5nIChkb2VzIG5vdCB3YWl0IGZvciB0aGUgdGFyZ2V0KS4KK0luIHRoaXMgY2FzZSwgdGhlIHRhcmdldCBpcyBubyBsb25nZXIgaW4gImdkYiBtb2RlIiAtLSBmb3IgZXhhbXBsZSwKK2NvbnNvbGUgbWVzc2FnZXMgbm8gbG9uZ2VyIGdldCBzZW50IHNlcGFyYXRlbHkgdG8gdGhlIEtHREIgcG9ydCwgb3IKK2VuY2Fwc3VsYXRlZCBmb3IgR0RCLiAgSWYgYSBkZWJ1ZyBldmVudCAoZS5nLiBOTUkpIG9jY3VycywgdGhlIHRhcmdldAord2lsbCByZS1lbnRlciAiZ2RiIG1vZGUiIGFuZCB3aWxsIGRpc3BsYXkgdGhpcyBmYWN0IG9uIHRoZSBjb25zb2xlOyB5b3UKK211c3QgZ2l2ZSBhIG5ldyAidGFyZ2V0IHJlbW90ZSIgY29tbWFuZCB0byBnZGIuCisKK05PVEU6IFRPIEFWT0lEIExPU1NJTkcgQ09OU09MRSBNRVNTQUdFUyBJTiBDQVNFIFRIRSBLRVJORUwgQ09OU09MRSBBTkQKK0tHREIgVVNJTkcgVEhFIFNBTUUgUE9SVCwgVEhFIFRBUkdFVCBXQUlUUyBGT1IgQU5ZIElOUFVUIENIQVJBQ1RFUiBPTgorVEhFIEtHREIgUE9SVCBBRlRFUiBBIERFVEFDSCBDT01NQU5ELiAgRm9yIGV4YW1wbGUsIGFmdGVyIHRoZSBkZXRhY2ggeW91Citjb3VsZCBzdGFydCBhIHRlcm1pbmFsIGVtdWxhdG9yIG9uIHRoZSBzYW1lIGhvc3QgcG9ydCBhbmQgZW50ZXIgYSA8Y3I+OworaG93ZXZlciwgdGhpcyBwcm9ncmFtIG11c3QgdGhlbiBiZSB0ZXJtaW5hdGVkIG9yIHN1c3BlbmRlZCBpbiBvcmRlciB0bwordXNlIEdCRCBhZ2FpbiBpZiBLR0RCIGlzIHJlLWVudGVyZWQuCisKKworQWNrbm93bGVkZ2VtZW50cworPT09PT09PT09PT09PT09PQorCitUaGlzIGNvZGUgd2FzIG1vc3RseSBnZW5lcmF0ZWQgYnkgSGVucnkgQmVsbCA8aGVucnkuYmVsbEBzdC5jb20+OworbGFyZ2VseSBmcm9tIEtHREIgYnkgQW1pdCBTLiBLYWxlIDxha2FsZUB2ZXJpdGFzLmNvbT4gLSBleHRyYWN0cyBmcm9tCitjb2RlIGJ5IEdsZW5uIEVuZ2VsLCBKaW0gS2luZ2RvbiwgRGF2aWQgR3JvdGhlIDxkYXZlQGdjb20uY29tPiwgVGlncmFuCitBaXZhemlhbiA8dGlncmFuQHNjby5jb20+LCBXaWxsaWFtIEdhdGxpZmYgPGJnYXRAb3Blbi13aWRnZXRzLmNvbT4sIEJlbgorTGVlLCBTdGV2ZSBDaGFtYmVybGFpbiBhbmQgQmVub2l0IE1pbGxlciA8ZnVsZ0BpbmFtZS5jb20+IGFyZSBhbHNvCitpbmNsdWRlZC4gCisKK0plcmVteSBTaWVnZWwKKzxqc2llZ2VsQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NoL25ldy1tYWNoaW5lLnR4dCBiL0RvY3VtZW50YXRpb24vc2gvbmV3LW1hY2hpbmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMmRkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NoL25ldy1tYWNoaW5lLnR4dApAQCAtMCwwICsxLDMwNiBAQAorCisgICAgICAgICAgICAgICAgQWRkaW5nIGEgbmV3IGJvYXJkIHRvIExpbnV4U0gKKyAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgIFBhdWwgTXVuZHQgPGxldGhhbEBsaW51eC1zaC5vcmc+CisKK1RoaXMgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gb3V0bGluZSB3aGF0IHN0ZXBzIGFyZSBuZWNlc3NhcnkgdG8gYWRkIHN1cHBvcnQKK2ZvciBuZXcgYm9hcmRzIHRvIHRoZSBMaW51eFNIIHBvcnQgdW5kZXIgdGhlIG5ldyAyLjUgYW5kIDIuNiBrZXJuZWxzLiBUaGlzCithbHNvIGF0dGVtcHRzIHRvIG91dGxpbmUgc29tZSBvZiB0aGUgbm90aWNlYWJsZSBjaGFuZ2VzIGJldHdlZW4gdGhlIDIuNAorYW5kIHRoZSAyLjUvMi42IFNIIGJhY2tlbmQuCisKKzEuIE5ldyBEaXJlY3RvcnkgU3RydWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZmlyc3QgdGhpbmcgdG8gbm90ZSBpcyB0aGUgbmV3IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFVuZGVyIDIuNCwgbW9zdAorb2YgdGhlIGJvYXJkLXNwZWNpZmljIGNvZGUgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBzdGJvYXJkcykgZW5kZWQgdXAKK2luIGFyY2gvc2gva2VybmVsLyBkaXJlY3RseSwgd2l0aCBib2FyZC1zcGVjaWZpYyBoZWFkZXJzIGVuZGluZyB1cCBpbgoraW5jbHVkZS9hc20tc2gvLiBGb3IgdGhlIG5ldyBrZXJuZWwsIHRoaW5ncyBhcmUgYnJva2VuIG91dCBieSBib2FyZCB0eXBlLAorY29tcGFuaW9uIGNoaXAgdHlwZSwgYW5kIENQVSB0eXBlLiBMb29raW5nIGF0IGEgdHJlZSB2aWV3IG9mIHRoaXMgZGlyZWN0b3J5CitoZWlyYXJjaHkgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOgorCitCb2FyZC1zcGVjaWZpYyBjb2RlOgorCisuCit8LS0gYXJjaAorfCAgIGAtLSBzaAorfCAgICAgICBgLS0gYm9hcmRzCit8ICAgICAgICAgICB8LS0gYWR4Cit8ICAgICAgICAgICB8ICAgYC0tIGJvYXJkLXNwZWNpZmljIGZpbGVzCit8ICAgICAgICAgICB8LS0gYmlnc3VyCit8ICAgICAgICAgICB8ICAgYC0tIGJvYXJkLXNwZWNpZmljIGZpbGVzCit8ICAgICAgICAgICB8Cit8ICAgICAgICAgICAuLi4gbW9yZSBib2FyZHMgaGVyZSAuLi4KK3wKK2AtLSBpbmNsdWRlCisgICAgYC0tIGFzbS1zaAorICAgICAgICB8LS0gYWR4CisgICAgICAgIHwgICBgLS0gYm9hcmQtc3BlY2lmaWMgaGVhZGVycworICAgICAgICB8LS0gYmlnc3VyCisgICAgICAgIHwgICBgLS0gYm9hcmQtc3BlY2lmaWMgaGVhZGVycworICAgICAgICB8CisJLi4gbW9yZSBib2FyZHMgaGVyZSAuLi4KKworSXQgc2hvdWxkIGFsc28gYmUgbm90ZWQgdGhhdCBlYWNoIGJvYXJkIGlzIHJlcXVpcmVkIHRvIGhhdmUgc29tZSBjZXJ0YWluCitoZWFkZXJzLiBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGlvLmggaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBuZWVkcwordG8gYmUgcHJvdmlkZWQgZm9yIGVhY2ggYm9hcmQsIGFuZCBjYW4gZ2VuZXJhbGx5IGp1c3QgcmVmZXJlbmNlIGdlbmVyaWMKK2Z1bmN0aW9ucyAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGlzYV9wb3J0MmFkZHIpLgorCitOZXh0LCBmb3IgY29tcGFuaW9uIGNoaXBzOgorLgorYC0tIGFyY2gKKyAgICBgLS0gc2gKKyAgICAgICAgYC0tIGNjaGlwcworICAgICAgICAgICAgYC0tIGhkNjQ0NngKKyAgICAgICAgICAgICAgICB8LS0gaGQ2NDQ2MQorICAgICAgICAgICAgICAgIHwgICBgLS0gY2NoaXAtc3BlY2lmaWMgZmlsZXMKKyAgICAgICAgICAgICAgICBgLS0gaGQ2NDQ2NQorICAgICAgICAgICAgICAgICAgICBgLS0gY2NoaXAtc3BlY2lmaWMgZmlsZXMKKworLi4uIGFuZCBzbyBvbi4gSGVhZGVycyBmb3IgdGhlIGNvbXBhbmlvbiBjaGlwcyBhcmUgdHJlYXRlZCB0aGUgc2FtZSB3YXkgYXMKK2JvYXJkLXNwZWNpZmljIGhlYWRlcnMuIFRodXMsIGluY2x1ZGUvYXNtLXNoL2hkNjQ0NjEgaXMgaG9tZSB0byBhbGwgb2YgdGhlCitoZDY0NDYxLXNwZWNpZmljIGhlYWRlcnMuCisKK0ZpbmFsbHksIENQVSBmYW1pbHkgc3VwcG9ydCBpcyBhbHNvIGFic3RyYWN0ZWQ6CisuCit8LS0gYXJjaAorfCAgIGAtLSBzaAorfCAgICAgICB8LS0ga2VybmVsCit8ICAgICAgIHwgICBgLS0gY3B1Cit8ICAgICAgIHwgICAgICAgfC0tIHNoMgorfCAgICAgICB8ICAgICAgIHwgICBgLS0gU0gtMiBnZW5lcmljIGZpbGVzCit8ICAgICAgIHwgICAgICAgfC0tIHNoMworfCAgICAgICB8ICAgICAgIHwgICBgLS0gU0gtMyBnZW5lcmljIGZpbGVzCit8ICAgICAgIHwgICAgICAgYC0tIHNoNAorfCAgICAgICB8ICAgICAgICAgICBgLS0gU0gtNCBnZW5lcmljIGZpbGVzCit8ICAgICAgIGAtLSBtbQorfCAgICAgICAgICAgYC0tIFRoaXMgaXMgYWxzbyBicm9rZW4gb3V0IHBlciBDUFUgZmFtaWx5LCBzbyBlYWNoIGZhbWlseSBjYW4KK3wgICAgICAgICAgICAgICBoYXZlIHRoZWlyIG93biBzZXQgb2YgY2FjaGUvdGxiIGZ1bmN0aW9ucy4KK3wKK2AtLSBpbmNsdWRlCisgICAgYC0tIGFzbS1zaAorICAgICAgICB8LS0gY3B1LXNoMgorICAgICAgICB8ICAgYC0tIFNILTIgc3BlY2lmaWMgaGVhZGVycworICAgICAgICB8LS0gY3B1LXNoMworICAgICAgICB8ICAgYC0tIFNILTMgc3BlY2lmaWMgaGVhZGVycworICAgICAgICBgLS0gY3B1LXNoNAorICAgICAgICAgICAgYC0tIFNILTQgc3BlY2lmaWMgaGVhZGVycworCitJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBDUFUgc3VidHlwZXMgYXJlIF9ub3RfIGFic3RyYWN0ZWQuIFRodXMsIHRoZXNlIHN0aWxsCituZWVkIHRvIGJlIGRlYWx0IHdpdGggYnkgdGhlIENQVSBmYW1pbHkgc3BlY2lmaWMgY29kZS4KKworMi4gQWRkaW5nIGEgTmV3IEJvYXJkCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZpcnN0IHRoaW5nIHRvIGRldGVybWluZSBpcyB3aGV0aGVyIHRoZSBib2FyZCB5b3UgYXJlIGFkZGluZyB3aWxsIGJlCitpc29sYXRlZCwgb3Igd2hldGhlciBpdCB3aWxsIGJlIHBhcnQgb2YgYSBmYW1pbHkgb2YgYm9hcmRzIHRoYXQgY2FuIG1vc3RseQorc2hhcmUgdGhlIHNhbWUgYm9hcmQtc3BlY2lmaWMgY29kZSB3aXRoIG1pbm9yIGRpZmZlcmVuY2VzLgorCitJbiB0aGUgZmlyc3QgY2FzZSwgdGhpcyBpcyBqdXN0IGEgbWF0dGVyIG9mIG1ha2luZyBhIGRpcmVjdG9yeSBmb3IgeW91cgorYm9hcmQgaW4gYXJjaC9zaC9ib2FyZHMvIGFuZCBhZGRpbmcgcnVsZXMgdG8gaG9vayB5b3VyIGJvYXJkIGluIHdpdGggdGhlCitidWlsZCBzeXN0ZW0gKG1vcmUgb24gdGhpcyBpbiB0aGUgbmV4dCBzZWN0aW9uKS4gSG93ZXZlciwgZm9yIGJvYXJkIGZhbWlsaWVzCitpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGhhdmUgYSBjb21tb24gdG9wLWxldmVsIGFyY2gvc2gvYm9hcmRzLyBkaXJlY3RvcnkKK2FuZCB0aGVuIHBvcHVsYXRlIHRoYXQgd2l0aCBzdWItZGlyZWN0b3JpZXMgZm9yIGVhY2ggbWVtYmVyIG9mIHRoZSBmYW1pbHkuCitCb3RoIHRoZSBTb2x1dGlvbiBFbmdpbmUgYW5kIHRoZSBocDZ4eCBib2FyZHMgYXJlIGFuIGV4YW1wbGUgb2YgdGhpcy4KKworQWZ0ZXIgeW91IGhhdmUgc2V0dXAgeW91ciBuZXcgYXJjaC9zaC9ib2FyZHMvIGRpcmVjdG9yeSwgcmVtZW1iZXIgdGhhdCB5b3UKK2Fsc28gbXVzdCBhZGQgYSBkaXJlY3RvcnkgaW4gaW5jbHVkZS9hc20tc2ggZm9yIGhlYWRlcnMgbG9jYWxpemVkIHRvIHRoaXMKK2JvYXJkLiBJbiBvcmRlciB0byBpbnRlcm9wZXJhdGUgc2VhbWxlc3NseSB3aXRoIHRoZSBidWlsZCBzeXN0ZW0sIGl0J3MgYmVzdAordG8gaGF2ZSB0aGlzIGRpcmVjdG9yeSB0aGUgc2FtZSBhcyB0aGUgYXJjaC9zaC9ib2FyZHMvIGRpcmVjdG9yeSBuYW1lLAordGhvdWdoIGlmIHlvdXIgYm9hcmQgaXMgYWdhaW4gcGFydCBvZiBhIGZhbWlseSwgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgd2F5cworb2YgZGVhbGluZyB3aXRoIHRoaXMsIGFuZCB5b3UgY2FuIGZlZWwgZnJlZSB0byBuYW1lIHRoZSBkaXJlY3RvcnkgYWZ0ZXIKK3RoZSBmYW1pbHkgbWVtYmVyIGl0c2VsZi4KKworVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0aGF0IGVhY2ggYm9hcmQgaXMgcmVxdWlyZWQgdG8gaGF2ZSwgYm90aCBpbiB0aGUKK2FyY2gvc2gvYm9hcmRzIGFuZCB0aGUgaW5jbHVkZS9hc20tc2gvIGhlaXJhcmNoeS4gSW4gb3JkZXIgdG8gYmV0dGVyCitleHBsYWluIHRoaXMsIHdlIHVzZSBzb21lIGV4YW1wbGVzIGZvciBhZGRpbmcgYW4gaW1hZ2luYXJ5IGJvYXJkLiBGb3IKK3NldHVwIGNvZGUsIHdlJ3JlIHJlcXVpcmVkIGF0IHRoZSB2ZXJ5IGxlYXN0IHRvIHByb3ZpZGUgZGVmaW5pdGlvbnMgZm9yCitnZXRfc3lzdGVtX3R5cGUoKSBhbmQgcGxhdGZvcm1fc2V0dXAoKS4gRm9yIG91ciBpbWFnaW5hcnkgYm9hcmQsIHRoaXMKK21pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6CisKKy8qCisgKiBhcmNoL3NoL2JvYXJkcy92YXBvci9zZXR1cC5jIC0gU2V0dXAgY29kZSBmb3IgaW1hZ2luYXJ5IGJvYXJkCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiRm9vVGVjaCBWYXBvcmJvYXJkIjsKK30KKworaW50IF9faW5pdCBwbGF0Zm9ybV9zZXR1cCh2b2lkKQoreworICAJLyoKKwkgKiBJZiBvdXIgaGFyZHdhcmUgYWN0dWFsbHkgZXhpc3RlZCwgd2Ugd291bGQgZG8gcmVhbAorCSAqIHNldHVwIGhlcmUuIFRob3VnaCBpdCdzIGFsc28gc2FuZSB0byBsZWF2ZSB0aGlzIGVtcHR5CisJICogaWYgdGhlcmUncyBubyByZWFsIGluaXQgd29yayB0aGF0IGhhcyB0byBiZSBkb25lIGZvcgorCSAqIHRoaXMgYm9hcmQuCisJICovCisKKyAgCS8qIAorCSAqIFByZXN1bWUgYWxsIEZvb1RlY2ggYm9hcmRzIGhhdmUgdGhlIHNhbWUgYnJva2VuIHRpbWVyLAorCSAqIGFuZCBhbHNvIHByZXN1bWUgdGhhdCB3ZSd2ZSBkZWZpbmVkIGZvb190aW1lcl9pbml0IHRvCisJICogZG8gc29tZXRoaW5nIHVzZWZ1bC4KKwkgKi8KKyAgCWJvYXJkX3RpbWVfaW5pdCA9IGZvb190aW1lcl9pbml0OworCisJLyogU3RhcnQtdXAgaW1hZ2luYXJ5IFBDSSAuLi4gKi8KKworCS8qIEFuZCB3aGF0ZXZlciBlbHNlIC4uLiAqLworCisJcmV0dXJuIDA7Cit9CisKK091ciBuZXcgaW1hZ2luYXJ5IGJvYXJkIHdpbGwgYWxzbyBoYXZlIHRvIHRpZSBpbnRvIHRoZSBtYWNodmVjIGluIG9yZGVyIGZvciBpdAordG8gYmUgb2YgYW55IHVzZS4gQ3VycmVudGx5IHRoZSBtYWNodmVjIGlzIHNsb3dseSBvbiBpdHMgd2F5IG91dCwgYnV0IGlzIHN0aWxsCityZXF1aXJlZCBmb3IgdGhlIHRpbWUgYmVpbmcuIEFzIHN1Y2gsIGxldCB1cyB0YWtlIGEgbG9vayBhdCB3aGF0IG5lZWRzIHRvIGJlCitkb25lIGZvciB0aGUgbWFjaHZlYyBhc3NpZ25tZW50LgorCittYWNodmVjIGZ1bmN0aW9ucyBmYWxsIGludG8gYSBudW1iZXIgb2YgY2F0ZWdvcmllczoKKworIC0gSS9PIGZ1bmN0aW9ucyB0byBJTyBtZW1vcnkgKGluYiBldGMpIGFuZCBQQ0kvbWFpbiBtZW1vcnkgKHJlYWRiIGV0YykuCisgLSBJL08gcmVtYXBwaW5nIGZ1bmN0aW9ucyAoaW9yZW1hcCBldGMpCisgLSBzb21lIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucworIC0gYSAnaGVhcnRiZWF0JyBmdW5jdGlvbgorIC0gc29tZSBtaXNjZWxsYW5lb3VzIGZsYWdzCisKK1RoZSB0cmVlIGNhbiBiZSBidWlsdCBpbiB0d28gd2F5czoKKyAtIGFzIGEgZnVsbHkgZ2VuZXJpYyBidWlsZC4gQWxsIGRyaXZlcnMgYXJlIGxpbmtlZCBpbiwgYW5kIGFsbCBmdW5jdGlvbnMKKyAgIGdvIHRocm91Z2ggdGhlIG1hY2h2ZWMKKyAtIGFzIGEgbWFjaGluZSBzcGVjaWZpYyBidWlsZC4gSW4gdGhpcyBjYXNlIG9ubHkgdGhlIHJlcXVpcmVkIGRyaXZlcnMKKyAgIHdpbGwgYmUgbGlua2VkIGluLCBhbmQgc29tZSBtYWNyb3MgbWF5IGJlIHJlZGVmaW5lZCB0byBub3QgZ28gdGhyb3VnaAorICAgdGhlIG1hY2h2ZWMgd2hlcmUgcGVyZm9ybWFuY2UgaXMgaW1wb3J0YW50IChpbiBwYXJ0aWN1bGFyIElPIGZ1bmN0aW9ucykuCisKK1RoZXJlIGFyZSB0aHJlZSB3YXlzIGluIHdoaWNoIElPIGNhbiBiZSBwZXJmb3JtZWQ6CisgLSBub25lIGF0IGFsbC4gVGhpcyBpcyByZWFsbHkgb25seSB1c2VmdWwgZm9yIHRoZSAndW5rbm93bicgbWFjaGluZSB0eXBlLAorICAgd2hpY2ggdXMgZGVzaWduZWQgdG8gcnVuIG9uIGEgbWFjaGluZSBhYm91dCB3aGljaCB3ZSBrbm93IG5vdGhpbmcsIGFuZAorICAgc28gYWxsIGFsbCBJTyBpbnN0cnVjdGlvbnMgZG8gbm90aGluZy4KKyAtIGZ1bGx5IGN1c3RvbS4gSW4gdGhpcyBjYXNlIGFsbCBJTyBmdW5jdGlvbnMgZ28gdG8gYSBtYWNoaW5lIHNwZWNpZmljCisgICBzZXQgb2YgZnVuY3Rpb25zIHdoaWNoIGNhbiBkbyB3aGF0IHRoZXkgbGlrZQorIC0gYSBnZW5lcmljIHNldCBvZiBmdW5jdGlvbnMuIFRoZXNlIHdpbGwgY29wZSB3aXRoIG1vc3Qgc2l0dWF0aW9ucywKKyAgIGFuZCByZWx5IG9uIGEgc2luZ2xlIGZ1bmN0aW9uLCBtdl9wb3J0MmFkZHIsIHdoaWNoIGlzIGNhbGxlZCB0aHJvdWdoIHRoZQorICAgbWFjaGluZSB2ZWN0b3IsIGFuZCBjb252ZXJ0cyBhbiBJTyBhZGRyZXNzIGludG8gYSBtZW1vcnkgYWRkcmVzcywgd2hpY2gKKyAgIGNhbiBiZSByZWFkIGZyb20vd3JpdHRlbiB0byBkaXJlY3RseS4KKworVGh1cyBhZGRpbmcgYSBuZXcgbWFjaGluZSBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIHN0ZXBzIChJIHdpbGwgYXNzdW1lIEkgYW0KK2FkZGluZyBhIG1hY2hpbmUgY2FsbGVkIHZhcG9yKToKKworIC0gYWRkIGEgbmV3IGZpbGUgaW5jbHVkZS9hc20tc2gvdmFwb3IvaW8uaCB3aGljaCBjb250YWlucyBwcm90b3R5cGVzIGZvcgorICAgYW55IG1hY2hpbmUgc3BlY2lmaWMgSU8gZnVuY3Rpb25zIHByZWZpeGVkIHdpdGggdGhlIG1hY2hpbmUgbmFtZSwgZm9yCisgICBleGFtcGxlIHZhcG9yX2luYi4gVGhlc2Ugd2lsbCBiZSBuZWVkZWQgd2hlbiBmaWxsaW5nIG91dCB0aGUgbWFjaGluZQorICAgdmVjdG9yLgorCisgICBUaGlzIGlzIHRoZSBtaW5pbXVtIHRoYXQgaXMgcmVxdWlyZWQsIGhvd2V2ZXIgdGhlcmUgYXJlIGFtcGxlCisgICBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXNlIHRoaXMuIEluIHBhcnRpY3VsYXIsIGJ5IG1ha2luZyB0aGUgcHJvdG90eXBlcworICAgaW5saW5lIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBpdCBpcyBwb3NzaWJsZSB0byBpbmxpbmUgdGhlIGZ1bmN0aW9uIHdoZW4KKyAgIGJ1aWxkaW5nIG1hY2hpbmUgc3BlY2lmaWMgdmVyc2lvbnMuIE5vdGUgdGhhdCB0aGUgbWFjaGluZSB2ZWN0b3IKKyAgIGZ1bmN0aW9ucyB3aWxsIHN0aWxsIGJlIG5lZWRlZCwgc28gdGhhdCBhIG1vZHVsZSBidWlsdCBmb3IgYSBnZW5lcmljCisgICBzZXR1cCBjYW4gYmUgbG9hZGVkLgorCisgLSBhZGQgYSBuZXcgZmlsZSBhcmNoL3NoL2JvYXJkcy92YXBvci9tYWNoLmMuIFRoaXMgY29udGFpbnMgdGhlIGRlZmluaXRpb24KKyAgIG9mIHRoZSBtYWNoaW5lIHZlY3Rvci4gV2hlbiBidWlsZGluZyB0aGUgbWFjaGluZSBzcGVjaWZpYyB2ZXJzaW9uLCB0aGlzCisgICB3aWxsIGJlIHRoZSByZWFsIG1hY2hpbmUgdmVjdG9yICh2aWEgYW4gYWxpYXMpLCB3aGlsZSBpbiB0aGUgZ2VuZXJpYworICAgdmVyc2lvbiBpcyB1c2VkIHRvIGluaXRpYWxpc2UgdGhlIG1hY2hpbmUgdmVjdG9yLCBhbmQgdGhlbiBmcmVlZCwgYnkKKyAgIG1ha2luZyBpdCBpbml0ZGF0YS4gVGhpcyBzaG91bGQgYmUgZGVmaW5lZCBhczoKKworICAgICBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfdmFwb3IgX19pbml0bXYgPSB7CisgICAgICAgLm12X25hbWUgPSAidmFwb3IiLAorICAgICB9CisgICAgIEFMSUFTX01WKHZhcG9yKQorCisgLSBmaW5hbGx5IGFkZCBhIGZpbGUgYXJjaC9zaC9ib2FyZHMvdmFwb3IvaW8uYywgd2hpY2ggY29udGFpbnMKKyAgIGRlZmluaXRpb25zIG9mIHRoZSBtYWNoaW5lIHNwZWNpZmljIGlvIGZ1bmN0aW9ucy4KKworQSBub3RlIGFib3V0IGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucy4gVGhyZWUgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIGFyZQorcHJvdmlkZWQgaW4gdGhlIG1hY2hpbmUgdmVjdG9yOgorIC0gbXZfYXJjaF9pbml0IC0gY2FsbGVkIHZlcnkgZWFybHkgb24gZnJvbSBzZXR1cF9hcmNoCisgLSBtdl9pbml0X2lycSAtIGNhbGxlZCBmcm9tIGluaXRfSVJRLCBhZnRlciB0aGUgZ2VuZXJpYyBTSCBpbnRlcnJ1cHQKKyAgIGluaXRpYWxpc2F0aW9uCisgLSBtdl9pbml0X3BjaSAtIGN1cnJlbnRseSBub3QgdXNlZAorCitBbnkgb3RoZXIgcmVtYWluaW5nIGZ1bmN0aW9ucyB3aGljaCBuZWVkIHRvIGJlIGNhbGxlZCBhdCBzdGFydCB1cCBjYW4gYmUKK2FkZGVkIHRvIHRoZSBsaXN0IHVzaW5nIHRoZSBfX2luaXRjYWxscyBtYWNybyAob3IgbW9kdWxlX2luaXQgaWYgdGhlIGNvZGUKK2NhbiBiZSBidWlsdCBhcyBhIG1vZHVsZSkuIE1hbnkgZ2VuZXJpYyBkcml2ZXJzIHByb2JlIHRvIHNlZSBpZiB0aGUgZGV2aWNlCit0aGV5IGFyZSB0YXJnZXRpbmcgaXMgcHJlc2VudCwgaG93ZXZlciB0aGlzIG1heSBub3QgYWx3YXlzIGJlIGFwcHJvcHJpYXRlLAorc28gYSBmbGFnIGNhbiBiZSBhZGRlZCB0byB0aGUgbWFjaGluZSB2ZWN0b3Igd2hpY2ggd2lsbCBiZSBzZXQgb24gdGhvc2UKK21hY2hpbmVzIHdoaWNoIGhhdmUgdGhlIGhhcmR3YXJlIGluIHF1ZXN0aW9uLCByZWR1Y2luZyB0aGUgcHJvYmUgdG8gYQorc2luZ2xlIGNvbmRpdGlvbmFsLgorCiszLiBIb29raW5nIGludG8gdGhlIEJ1aWxkIFN5c3RlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm93IHRoYXQgd2UgaGF2ZSB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcmllcyBzZXR1cCwgYW5kIGFsbCBvZiB0aGUKK2JvYXJkLXNwZWNpZmljIGNvZGUgaXMgaW4gcGxhY2UsIGl0J3MgdGltZSB0byBsb29rIGF0IGhvdyB0byBnZXQgdGhlCit3aG9sZSBtZXNzIHRvIGZpdCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uCisKK0xhcmdlIHBvcnRpb25zIG9mIHRoZSBidWlsZCBzeXN0ZW0gYXJlIG5vdyBlbnRpcmVseSBkeW5hbWljLCBhbmQgbWVyZWx5CityZXF1aXJlIHRoZSBwcm9wZXIgZW50cnkgaGVyZSBhbmQgdGhlcmUgaW4gb3JkZXIgdG8gZ2V0IHRoaW5ncyBkb25lLgorCitUaGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMgdG8gYWRkIGFuIGVudHJ5IHRvIGFyY2gvc2gvS2NvbmZpZywgdW5kZXIgdGhlCisiU3lzdGVtIHR5cGUiIG1lbnU6CisKK2NvbmZpZyBTSF9WQVBPUgorCWJvb2wgIlZhcG9yIgorCWhlbHAKKwkgIHNlbGVjdCBWYXBvciBpZiBjb25maWd1cmluZyBmb3IgYSBGb29UZWNoIFZhcG9yYm9hcmQuCisKK25leHQsIHRoaXMgaGFzIHRvIGJlIGFkZGVkIGludG8gYXJjaC9zaC9NYWtlZmlsZS4gQWxsIGJvYXJkcyByZXF1aXJlIGEKK21hY2hkaXIteSBlbnRyeSBpbiBvcmRlciB0byBiZSBidWlsdC4gVGhpcyBlbnRyeSBuZWVkcyB0byBiZSB0aGUgbmFtZSBvZgordGhlIGJvYXJkIGRpcmVjdG9yeSBhcyBpdCBhcHBlYXJzIGluIGFyY2gvc2gvYm9hcmRzLCBldmVuIGlmIGl0IGlzIGluIGEKK3N1Yi1kaXJlY3RvcnkgKGluIHdoaWNoIGNhc2UsIGFsbCBwYXJlbnQgZGlyZWN0b3JpZXMgYmVsb3cgYXJjaC9zaC9ib2FyZHMvCituZWVkIHRvIGJlIGxpc3RlZCkuIEZvciBvdXIgbmV3IGJvYXJkLCB0aGlzIGVudHJ5IGNhbiBsb29rIGxpa2U6CisKK21hY2hkaXItJChDT05GSUdfU0hfVkFQT1IpCSs9IHZhcG9yCisKK3Byb3ZpZGVkIHRoYXQgd2UndmUgcGxhY2VkIGV2ZXJ5dGhpbmcgaW4gdGhlIGFyY2gvc2gvYm9hcmRzL3ZhcG9yLyBkaXJlY3RvcnkuCisKK05leHQsIHRoZSBidWlsZCBzeXN0ZW0gYXNzdW1lcyB0aGF0IHlvdXIgaW5jbHVkZS9hc20tc2ggZGlyZWN0b3J5IHdpbGwgYWxzbworYmUgbmFtZWQgdGhlIHNhbWUuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlIChhcyBpcyB0aGUgY2FzZSB3aXRoIG11bHRpcGxlCitib2FyZHMgYmVsb25naW5nIHRvIGEgY29tbW9uIGZhbWlseSksIHRoZW4gdGhlIGRpcmVjdG9yeSBuYW1lIG5lZWRzIHRvIGJlCitpbXBsaWNpdGx5IGFwcGVuZGVkIHRvIGluY2Rpci15LiBUaGUgZXhpc3RpbmcgY29kZSBtYW5hZ2VzIHRoaXMgZm9yIHRoZQorU29sdXRpb24gRW5naW5lIGFuZCBocDZ4eCBib2FyZHMsIHNvIHNlZSB0aGVzZSBmb3IgYW4gZXhhbXBsZS4KKworT25jZSB0aGF0IGlzIHRha2VuIGNhcmUgb2YsIGl0J3MgdGltZSB0byBhZGQgYW4gZW50cnkgZm9yIHRoZSBtYWNoIHR5cGUuCitUaGlzIGlzIGRvbmUgYnkgYWRkaW5nIGFuIGVudHJ5IHRvIHRoZSBlbmQgb2YgdGhlIGFyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworbGlzdC4gVGhlIG1ldGhvZCBmb3IgZG9pbmcgdGhpcyBpcyBzZWxmIGV4cGxhbmF0b3J5LCBhbmQgc28gd2Ugd29uJ3Qgd2FzdGUKK3NwYWNlIHJlc3RhdGluZyBpdCBoZXJlLiBBZnRlciB0aGlzIGlzIGRvbmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlCitpbXBsaWNpdCBjaGVja3MgZm9yIHlvdXIgYm9hcmQgaWYgeW91IG5lZWQgdGhpcyBzb21ld2hlcmUgdGhyb3VnaG91dCB0aGUKK2NvbW1vbiBjb2RlLCBzdWNoIGFzOgorCisJLyogTWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBGb29UZWNoIFZhcG9yYm9hcmQgKi8KKwlpZiAoIW1hY2hfaXNfdmFwb3IoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKK2Fsc28gbm90ZSB0aGF0IHRoZSBtYWNoX2lzX2JvYXJkbmFtZSgpIGNoZWNrIHdpbGwgYmUgaW1wbGljaXRseSBmb3JjZWQgdG8KK2xvd2VyY2FzZSwgcmVnYXJkbGVzcyBvZiB0aGUgZmFjdCB0aGF0IHRoZSBtYWNoLXR5cGVzIGVudHJpZXMgYXJlIGFsbAordXBwZXJjYXNlLiBZb3UgY2FuIHJlYWQgdGhlIHNjcmlwdCBpZiB5b3UgcmVhbGx5IGNhcmUsIGJ1dCBpdCdzIHByZXR0eSB1Z2x5LAorc28geW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gZG8gdGhhdC4KKworTm93IGFsbCB0aGF0J3MgbGVmdCB0byBkbyBpcyBwcm92aWRpbmcgYSBkZWZjb25maWcgZm9yIHlvdXIgbmV3IGJvYXJkLiBUaGlzCit3YXksIG90aGVyIHBlb3BsZSB3aG8gZW5kIHVwIHdpdGggdGhpcyBib2FyZCBjYW4gc2ltcGx5IHVzZSB0aGlzIGNvbmZpZworZm9yIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHRyeWluZyB0byBndWVzcyB3aGF0IHNldHRpbmdzIGFyZSBzdXBwb3NlZCB0byBiZQordXNlZCBvbiBpdC4KKworQWxzbywgYXMgc29vbiBhcyB5b3UgaGF2ZSBjb3BpZWQgb3ZlciBhIHNhbXBsZSAuY29uZmlnIGZvciB5b3VyIG5ldyBib2FyZAorKGFzc3VtZSBhcmNoL3NoL2NvbmZpZ3MvdmFwb3JfZGVmY29uZmlnKSwgeW91IGNhbiBhbHNvIHVzZSB0aGlzIGRpcmVjdGx5IGFzIGEKK2J1aWxkIHRhcmdldCwgYW5kIGl0IHdpbGwgYmUgaW1wbGljaXRseSBsaXN0ZWQgYXMgc3VjaCBpbiB0aGUgaGVscCB0ZXh0LgorCitMb29raW5nIGF0IHRoZSAnbWFrZSBoZWxwJyBvdXRwdXQsIHlvdSBzaG91bGQgbm93IHNlZSBzb21ldGhpbmcgbGlrZToKKworQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHRhcmdldHMgKHNoKToKKyAgekltYWdlICAgICAgICAgICAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZSAoYXJjaC9zaC9ib290L3pJbWFnZSkKKyAgYWR4X2RlZmNvbmZpZyAgICAgICAgICAgLSBCdWlsZCBmb3IgYWR4CisgIGNxcmVla19kZWZjb25maWcgICAgICAgIC0gQnVpbGQgZm9yIGNxcmVlaworICBkcmVhbWNhc3RfZGVmY29uZmlnICAgICAtIEJ1aWxkIGZvciBkcmVhbWNhc3QKKy4uLgorICB2YXBvcl9kZWZjb25maWcgICAgICAgICAtIEJ1aWxkIGZvciB2YXBvcgorCit3aGljaCB0aGVuIGFsbG93cyB5b3UgdG8gZG86CisKKyQgbWFrZSBBUkNIPXNoIENST1NTX0NPTVBJTEU9c2g0LWxpbnV4LSB2YXBvcl9kZWZjb25maWcgdm1saW51eAorCit3aGljaCB3aWxsIGluIHR1cm4gY29weSB0aGUgZGVmY29uZmlnIGZvciB0aGlzIGJvYXJkLCBydW4gaXQgdGhyb3VnaAorb2xkY29uZmlnIChwcm9tcHRpbmcgeW91IGZvciBhbnkgbmV3IG9wdGlvbnMgc2luY2UgdGhlIHRpbWUgb2YgY3JlYXRpb24pLAorYW5kIHN0YXJ0IHlvdSBvbiB5b3VyIHdheSB0byBoYXZpbmcgYSBmdW5jdGlvbmFsIGtlcm5lbCBmb3IgeW91ciBuZXcKK2JvYXJkLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NtYXJ0LWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL3NtYXJ0LWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliZWQ0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc21hcnQtY29uZmlnLnR4dApAQCAtMCwwICsxLDEwMiBAQAorU21hcnQgQ09ORklHXyogRGVwZW5kZW5jaWVzCisxIEF1Z3VzdCAxOTk5CisKK01pY2hhZWwgQ2hhc3RhaW4gICA8bWVjQHNob3V0Lm5ldD4KK1dlcm5lciBBbG1lc2JlcmdlciA8YWxtZXNiZXJAbHJjLmRpLmVwZmwuY2g+CitNYXJ0aW4gdm9uIExvZXdpcyAgPG1hcnRpbkBtaXJhLmlzZG4uY3MudHUtYmVybGluLmRlPgorCitIZXJlIGlzIHRoZSBwcm9ibGVtOgorCisgICAgU3VwcG9zZSB0aGF0IGRyaXZlcnMvbmV0L2Zvby5jIGhhcyB0aGUgZm9sbG93aW5nIGxpbmVzOgorCisJI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisJLi4uCisKKwkjaWZkZWYgQ09ORklHX0ZPT19BVVRPRlJPQgorCSAgICAvKiBDb2RlIGZvciBhdXRvLWZyb2JiaW5nICovCisJI2Vsc2UKKwkgICAgLyogTWFudWFsIGZyb2JiaW5nIG9ubHkgKi8KKwkjZW5kaWYKKworCS4uLgorCisJI2lmZGVmIENPTkZJR19GT09fTU9ERUxfVFdPCisJICAgIC8qIENvZGUgZm9yIG1vZGVsIHR3byAqLworCSNlbmRpZgorCisgICAgTm93IHN1cHBvc2UgdGhlIHVzZXIgKHRoZSBwZXJzb24gYnVpbGRpbmcga2VybmVscykgcmVjb25maWd1cmVzIHRoZQorICAgIGtlcm5lbCB0byBjaGFuZ2Ugc29tZSB1bnJlbGF0ZWQgc2V0dGluZy4gIFRoaXMgd2lsbCByZWdlbmVyYXRlIHRoZQorICAgIGZpbGUgaW5jbHVkZS9saW51eC9hdXRvY29uZi5oLCB3aGljaCB3aWxsIGNhdXNlIGluY2x1ZGUvbGludXgvY29uZmlnLmgKKyAgICB0byBiZSBvdXQgb2YgZGF0ZSwgd2hpY2ggd2lsbCBjYXVzZSBkcml2ZXJzL25ldC9mb28uYyB0byBiZSByZWNvbXBpbGVkLgorCisgICAgTW9zdCBrZXJuZWwgc291cmNlcywgcGVyaGFwcyA4MCUgb2YgdGhlbSwgaGF2ZSBhdCBsZWFzdCBvbmUgQ09ORklHXyoKKyAgICBkZXBlbmRlbmN5IHNvbWV3aGVyZS4gIFNvIGNoYW5naW5nIF9hbnlfIENPTkZJR18qIHNldHRpbmcgcmVxdWlyZXMKKyAgICBhbG1vc3QgX2FsbF8gb2YgdGhlIGtlcm5lbCB0byBiZSByZWNvbXBpbGVkLgorCitIZXJlIGlzIHRoZSBzb2x1dGlvbjoKKworICAgIFdlJ3ZlIG1hZGUgdGhlIGRlcGVuZGVuY3kgZ2VuZXJhdG9yLCBta2RlcC5jLCBzbWFydGVyLiAgSW5zdGVhZCBvZgorICAgIGdlbmVyYXRpbmcgdGhpcyBkZXBlbmRlbmN5OgorCisJZHJpdmVycy9uZXQvZm9vLmM6IGluY2x1ZGUvbGludXgvY29uZmlnLmgKKworICAgIEl0IG5vdyBnZW5lcmF0ZXMgdGhlc2UgZGVwZW5kZW5jaWVzOgorCisJZHJpdmVycy9uZXQvZm9vLmM6IFwKKwkgICAgaW5jbHVkZS9jb25maWcvZm9vL2F1dG9mcm9iLmggXAorCSAgICBpbmNsdWRlL2NvbmZpZy9mb28vbW9kZWwvdHdvLmgKKworICAgIFNvIGRyaXZlcnMvbmV0L2Zvby5jIGRlcGVuZHMgb25seSBvbiB0aGUgQ09ORklHXyogbGluZXMgdGhhdAorICAgIGl0IGFjdHVhbGx5IHVzZXMuCisKKyAgICBBIG5ldyBwcm9ncmFtLCBzcGxpdC1pbmNsdWRlLmMsIHJ1bnMgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgIGNvbXBpbGF0aW9uIChtYWtlIGJ6SW1hZ2Ugb3IgbWFrZSB6SW1hZ2UpLiAgc3BsaXQtaW5jbHVkZSByZWFkcworICAgIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCBhbmQgdXBkYXRlcyB0aGUgaW5jbHVkZS9jb25maWcvIHRyZWUsCisgICAgd3JpdGluZyBvbmUgZmlsZSBwZXIgb3B0aW9uLiAgSXQgdXBkYXRlcyBvbmx5IHRoZSBmaWxlcyBmb3Igb3B0aW9ucworICAgIHRoYXQgaGF2ZSBjaGFuZ2VkLgorCisgICAgbWtkZXAuYyBubyBsb25nZXIgZ2VuZXJhdGVzIHdhcm5pbmcgbWVzc2FnZXMgZm9yIG1pc3Npbmcgb3IgdW5uZWVkZWQKKyAgICA8bGludXgvY29uZmlnLmg+IGxpbmVzLiAgVGhlIG5ldyB0b3AtbGV2ZWwgdGFyZ2V0ICdtYWtlIGNoZWNrY29uZmlnJworICAgIGNoZWNrcyBmb3IgdGhlc2UgcHJvYmxlbXMuCisKK0ZsYWcgRGVwZW5kZW5jaWVzCisKKyAgICBNYXJ0aW4gVm9uIExvZXdpcyBjb250cmlidXRlZCBhbm90aGVyIGZlYXR1cmUgdG8gdGhpcyBwYXRjaDoKKyAgICAnZmxhZyBkZXBlbmRlbmNpZXMnLiAgVGhlIGlkZWEgaXMgdGhhdCBhIC5vIGZpbGUgZGVwZW5kcyBvbgorICAgIHRoZSBjb21waWxhdGlvbiBmbGFncyB1c2VkIHRvIGJ1aWxkIGl0LiAgVGhlIGZpbGUgZm9vLm8gaGFzCisgICAgaXRzIGZsYWdzIHN0b3JlZCBpbiAuZmxhZ3MuZm9vLm8uCisKKyAgICBTdXBwb3NlIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGZvbyBkcml2ZXIgZnJvbSByZXNpZGVudCB0byBtb2R1bGFyLgorICAgICdtYWtlJyB3aWxsIG5vdGljZSB0aGF0IHRoZSBjdXJyZW50IGZvby5vIHdhcyBub3QgY29tcGlsZWQgd2l0aAorICAgIC1ETU9EVUxFIGFuZCB3aWxsIHJlY29tcGlsZSBmb28uYy4KKworICAgIEFsbCAubyBmaWxlcyBtYWRlIGZyb20gQyBzb3VyY2UgaGF2ZSBmbGFnIGRlcGVuZGVuY2llcy4gIFNvIGRvIC5vCisgICAgZmlsZXMgbWFkZSB3aXRoIGxkLCBhbmQgLmEgZmlsZXMgbWFkZSB3aXRoIGFyLiAgSG93ZXZlciwgLm8gZmlsZXMKKyAgICBtYWRlIGZyb20gYXNzZW1ibHkgc291cmNlIGRvIG5vdCBoYXZlIGZsYWcgZGVwZW5kZW5jaWVzIChub2JvZHkKKyAgICBuZWVkcyB0aGlzIHlldCwgYnV0IGl0IHdvdWxkIGJlIGdvb2QgdG8gZml4KS4KKworUGVyLXNvdXJjZS1maWxlIEZsYWdzCisKKyAgICBGbGFnIGRlcGVuZGVuY2llcyBhbHNvIHdvcmsgd2l0aCBwZXItc291cmNlLWZpbGUgZmxhZ3MuCisgICAgWW91IGNhbiBzcGVjaWZ5IGNvbXBpbGF0aW9uIGZsYWdzIGZvciBpbmRpdmlkdWFsIHNvdXJjZSBmaWxlcworICAgIGxpa2UgdGhpczoKKworCUNGTEFHU19mb28ubyA9IC1EU1BFQ0lBTF9GT09fREVGSU5FCisKKyAgICBUaGlzIGhlbHBzIGNsZWFuIHVwIGRyaXZlcnMvbmV0L01ha2VmaWxlLCBkcml2ZXJzL3Njc2kvTWFrZWZpbGUsCisgICAgYW5kIHNldmVyYWwgb3RoZXIgTWFrZWZpbGVzLgorCitDcmVkaXQKKworICAgIFdlcm5lciBBbG1lc2JlcmdlciBoYWQgdGhlIG9yaWdpbmFsIGlkZWEgYW5kIHdyb3RlIHRoZSBmaXJzdAorICAgIHZlcnNpb24gb2YgdGhpcyBwYXRjaC4KKyAgICAKKyAgICBNaWNoYWVsIENoYXN0YWluIHBpY2tlZCBpdCB1cCBhbmQgY29udGludWVkIGRldmVsb3BtZW50LiAgSGUgaXMKKyAgICBub3cgdGhlIHByaW5jaXBhbCBhdXRob3IgYW5kIG1haW50YWluZXIuICBQbGVhc2UgcmVwb3J0IGFueSBidWdzCisgICAgdG8gaGltLgorCisgICAgTWFydGluIHZvbiBMb2V3aXMgd3JvdGUgZmxhZyBkZXBlbmRlbmNpZXMsIHdpdGggc29tZSBtb2RpZmljYXRpb25zCisgICAgYnkgTWljaGFlbCBDaGFzdGFpbi4KKworICAgIFRoYW5rcyB0byBhbGwgb2YgdGhlIGJldGEgdGVzdGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc21wLnR4dCBiL0RvY3VtZW50YXRpb24vc21wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmZjNTBiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zbXAudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1RvIHNldCB1cCBTTVAKKworQ29uZmlndXJlIHRoZSBrZXJuZWwgYW5kIGFuc3dlciBZIHRvIENPTkZJR19TTVAuCisKK0lmIHlvdSBhcmUgdXNpbmcgTElMTywgaXQgaXMgaGFuZHkgdG8gaGF2ZSBib3RoIFNNUCBhbmQgbm9uLVNNUAora2VybmVsIGltYWdlcyBvbiBoYW5kLiBFZGl0IC9ldGMvbGlsby5jb25mIHRvIGNyZWF0ZSBhbiBlbnRyeQorZm9yIGFub3RoZXIga2VybmVsIGltYWdlIGNhbGxlZCAibGludXgtc21wIiBvciBzb21ldGhpbmcuCisKK1RoZSBuZXh0IHRpbWUgeW91IGNvbXBpbGUgdGhlIGtlcm5lbCwgd2hlbiBydW5uaW5nIGEgU01QIGtlcm5lbCwKK2VkaXQgbGludXgvTWFrZWZpbGUgYW5kIGNoYW5nZSAiTUFLRT1tYWtlIiB0byAiTUFLRT1tYWtlIC1qTiIKKyh3aGVyZSBOID0gbnVtYmVyIG9mIENQVSArIDEsIG9yIGlmIHlvdSBoYXZlIHRvbnMgb2YgbWVtb3J5L3N3YXAKKyB5b3UgY2FuIGp1c3QgdXNlICItaiIgd2l0aG91dCBhIG51bWJlcikuIEZlZWwgZnJlZSB0byBleHBlcmltZW50Cit3aXRoIHRoaXMgb25lLgorCitPZiBjb3Vyc2UgeW91IHNob3VsZCB0aW1lIGhvdyBsb25nIGVhY2ggYnVpbGQgdGFrZXMgOi0pCitFeGFtcGxlOgorICAgbWFrZSBjb25maWcKKyAgIHRpbWUgLXYgc2ggLWMgJ21ha2UgY2xlYW4gaW5zdGFsbCBtb2R1bGVzIG1vZHVsZXNfaW5zdGFsbCcKKworSWYgeW91IGFyZSB1c2luZyBzb21lIENvbXBhcSBNUCBjb21wbGlhbnQgbWFjaGluZXMgeW91IHdpbGwgbmVlZCB0byBzZXQKK3RoZSBvcGVyYXRpbmcgc3lzdGVtIGluIHRoZSBCSU9TIHNldHRpbmdzIHRvICJVbml4d2FyZSIgLSBkb24ndCBhc2sgbWUKK3doeSBDb21wYXFzIGRvbid0IHdvcmsgb3RoZXJ3aXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb255cGkudHh0IGIvRG9jdW1lbnRhdGlvbi9zb255cGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmM2IyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvbnlwaS50eHQKQEAgLTAsMCArMSwxNDIgQEAKK1NvbnkgUHJvZ3JhbW1hYmxlIEkvTyBDb250cm9sIERldmljZSBEcml2ZXIgUmVhZG1lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUNvcHlyaWdodCAoQykgMjAwMS0yMDA0IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CisJQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgQWxj9HZlIDx3d3cuYWxjb3ZlLmNvbT4KKwlDb3B5cmlnaHQgKEMpIDIwMDEgTWljaGFlbCBBc2hsZXkgPG0uYXNobGV5QHVuc3cuZWR1LmF1PgorCUNvcHlyaWdodCAoQykgMjAwMSBKdW5pY2hpIE1vcml0YSA8anVuMW1AbWFycy5kdGkubmUuanA+CisJQ29weXJpZ2h0IChDKSAyMDAwIFRha2F5YSBLaW5qbyA8dC1raW5qb0B0YzQuc28tbmV0Lm5lLmpwPgorCUNvcHlyaWdodCAoQykgMjAwMCBBbmRyZXcgVHJpZGdlbGwgPHRyaWRnZUBzYW1iYS5vcmc+CisKK1RoaXMgZHJpdmVyIGVuYWJsZXMgYWNjZXNzIHRvIHRoZSBTb255IFByb2dyYW1tYWJsZSBJL08gQ29udHJvbCBEZXZpY2Ugd2hpY2gKK2NhbiBiZSBmb3VuZCBpbiBtYW55IFNvbnkgVmFpbyBsYXB0b3BzLiBTb21lIG5ld2VyIFNvbnkgbGFwdG9wcyAoc2VlbXMgdG8gYmUKK2xpbWl0ZWQgdG8gbmV3IEZYIHNlcmllcyBsYXB0b3BzLCBhdCBsZWFzdCB0aGUgRlg1MDEgYW5kIHRoZSBGWDcwMikgbGFjayBhCitzb255cGkgZGV2aWNlIGFuZCBhcmUgbm90IHN1cHBvcnRlZCBhdCBhbGwgYnkgdGhpcyBkcml2ZXIuCisKK0l0IHdpbGwgZ2l2ZSBhY2Nlc3MgKHRocm91Z2ggYSB1c2VyIHNwYWNlIHV0aWxpdHkpIHRvIHNvbWUgZXZlbnRzIHRob3NlIGxhcHRvcHMKK2dlbmVyYXRlLCBsaWtlOgorCS0gam9nZGlhbCBldmVudHMgKHRoZSBzbWFsbCB3aGVlbCBvbiB0aGUgc2lkZSBvZiBWYWlvcykKKwktIGNhcHR1cmUgYnV0dG9uIGV2ZW50cyAob25seSBvbiBWYWlvIFBpY3R1cmVib29rIHNlcmllcykKKwktIEZuIGtleXMKKwktIGJsdWV0b290aCBidXR0b24gKG9ubHkgb24gQzFWUiBtb2RlbCkKKwktIHByb2dyYW1tYWJsZSBrZXlzLCBiYWNrLCBoZWxwLCB6b29tLCB0aHVtYnBocmFzZSBidXR0b25zLCBldGMuCisJICAod2hlbiBhdmFpbGFibGUpCisKK1Rob3NlIGV2ZW50cyAoc2VlIGxpbnV4L3NvbnlwaS5oKSBjYW4gYmUgcG9sbGVkIHVzaW5nIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUKKy9kZXYvc29ueXBpIChtYWpvciAxMCwgbWlub3IgYXV0byBhbGxvY2F0ZWQgb3Igc3BlY2lmaWVkIGFzIGEgb3B0aW9uKS4KK0Egc2ltcGxlIGRhZW1vbiB3aGljaCB0cmFuc2xhdGVzIHRoZSBqb2dkaWFsIG1vdmVtZW50cyBpbnRvIG1vdXNlIHdoZWVsIGV2ZW50cworY2FuIGJlIGRvd25sb2FkZWQgYXQ6IDxodHRwOi8vcG9waWVzLm5ldC9zb255cGkvPgorCitBbm90aGVyIG9wdGlvbiB0byBpbnRlcmNlcHQgdGhlIGV2ZW50cyBpcyB0byBnZXQgdGhlbSBkaXJlY3RseSB0aHJvdWdoIHRoZQoraW5wdXQgbGF5ZXIuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGFsc28gc29tZSBpb2N0bCBjb21tYW5kcyBmb3Igc2V0dGluZyB0aGUgTENEIHNjcmVlbgorYnJpZ2h0bmVzcyBhbmQgcXVlcnlpbmcgdGhlIGJhdHRlcmllcyBjaGFyZ2UgaW5mb3JtYXRpb24gKHNvbWUgbW9yZQorY29tbWFuZHMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUpLgorCitUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIHNldCB0aGUgY2FtZXJhIGNvbnRyb2xzIG9uIFBpY3R1cmVib29rIHNlcmllcworKGJyaWdodG5lc3MsIGNvbnRyYXN0IGV0YyksIGFuZCBpcyB1c2VkIGJ5IHRoZSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZQorTW90aW9uIEV5ZSBjYW1lcmEuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhpcyBkcml2ZXIgd2FzIGNyZWF0ZWQgYnkgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUgV2luZG93cworZHJpdmVyIGFuZCB0aGUgQUNQSSBCSU9TLCBiZWNhdXNlIFNvbnkgZG9lc24ndCBhZ3JlZSB0byByZWxlYXNlIGFueSBwcm9ncmFtbWluZworc3BlY3MgZm9yIGl0cyBsYXB0b3BzLiBJZiBzb21lb25lIGNvbnZpbmNlcyB0aGVtIHRvIGRvIHNvLCBkcm9wIG1lIGEgbm90ZS4KKworRHJpdmVyIG9wdGlvbnM6CistLS0tLS0tLS0tLS0tLS0KKworU2V2ZXJhbCBvcHRpb25zIGNhbiBiZSBwYXNzZWQgdG8gdGhlIHNvbnlwaSBkcml2ZXIgdXNpbmcgdGhlIHN0YW5kYXJkCittb2R1bGUgYXJndW1lbnQgc3ludGF4ICg8cGFyYW0+PTx2YWx1ZT4gd2hlbiBwYXNzaW5nIHRoZSBvcHRpb24gdG8gdGhlCittb2R1bGUgb3Igc29ueXBpLjxwYXJhbT49PHZhbHVlPiBvbiB0aGUga2VybmVsIGJvb3QgbGluZSB3aGVuIHNvbnlwaSBpcworc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUga2VybmVsKS4gVGhvc2Ugb3B0aW9ucyBhcmU6CisKKwltaW5vcjogCQltaW5vciBudW1iZXIgb2YgdGhlIG1pc2MgZGV2aWNlIC9kZXYvc29ueXBpLAorCQkJZGVmYXVsdCBpcyAtMSAoYXV0b21hdGljIGFsbG9jYXRpb24sIHNlZSAvcHJvYy9taXNjCisJCQlvciBrZXJuZWwgbG9ncykKKworCWNhbWVyYToJCWlmIHlvdSBoYXZlIGEgUGljdHVyZUJvb2sgc2VyaWVzIFZhaW8gKHdpdGggdGhlCisJCQlpbnRlZ3JhdGVkIE1vdGlvbkV5ZSBjYW1lcmEpLCBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gMQorCQkJaW4gb3JkZXIgdG8gbGV0IHRoZSBkcml2ZXIgYWNjZXNzIHRvIHRoZSBjYW1lcmEKKworCWZua2V5aW5pdDoJb24gc29tZSBWYWlvcyAoQzFWRSwgQzFWUiBldGMpLCB0aGUgRm4ga2V5IGV2ZW50cyBkb24ndAorCQkJZ2V0IGVuYWJsZWQgdW5sZXNzIHlvdSBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gMS4KKwkJCURvIG5vdCB1c2UgdGhpcyBvcHRpb24gdW5sZXNzIGl0J3MgYWN0dWFsbHkgbmVjZXNzYXJ5LAorCQkJc29tZSBWYWlvIG1vZGVscyBkb24ndCBkZWFsIHdlbGwgd2l0aCB0aGlzIG9wdGlvbi4KKwkJCVRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHRoZSBrZXJuZWwgaXMKKwkJCWNvbXBpbGVkIHdpdGhvdXQgQUNQSSBzdXBwb3J0IChzaW5jZSBpdCBjb25mbGljdHMKKwkJCXdpdGggaXQgYW5kIGl0IHNob3VsZG4ndCBiZSByZXF1aXJlZCBhbnl3YXkgaWYKKwkJCUFDUEkgaXMgYWxyZWFkeSBlbmFibGVkKS4KKworCXZlcmJvc2U6CXNldCB0byAxIHRvIHByaW50IHVua25vd24gZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlCisJCQlzb255cGkgZGV2aWNlLgorCQkJc2V0IHRvIDIgdG8gcHJpbnQgYWxsIGV2ZW50cyByZWNlaXZlZCBmcm9tIHRoZQorCQkJc29ueXBpIGRldmljZS4KKworCWNvbXBhdDoJCXVzZXMgc29tZSBjb21wYXRpYmlsaXR5IGNvZGUgZm9yIGVuYWJsaW5nIHRoZSBzb255cGkKKwkJCWV2ZW50cy4gSWYgdGhlIGRyaXZlciB3b3JrZWQgZm9yIHlvdSBpbiB0aGUgcGFzdAorCQkJKHByaW9yIHRvIHZlcnNpb24gMS41KSBhbmQgZG9lcyBub3Qgd29yayBhbnltb3JlLAorCQkJYWRkIHRoaXMgb3B0aW9uIGFuZCByZXBvcnQgdG8gdGhlIGF1dGhvci4KKworCW1hc2s6CQlldmVudCBtYXNrIHRlbGxpbmcgdGhlIGRyaXZlciB3aGF0IGV2ZW50cyB3aWxsIGJlCisJCQlyZXBvcnRlZCB0byB0aGUgdXNlci4gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yCisJCQlzb21lIFZhaW8gbW9kZWxzIHdoZXJlIHRoZSBoYXJkd2FyZSByZXVzZXMgdmFsdWVzCisJCQl1c2VkIGluIG90aGVyIFZhaW8gbW9kZWxzIChsaWtlIHRoZSBGWCBzZXJpZXMgd2hvIGRvZXMKKwkJCW5vdCBoYXZlIGEgam9nZGlhbCBidXQgcmV1c2VzIHRoZSBqb2dkaWFsIGV2ZW50cyBmb3IKKwkJCXByb2dyYW1tYWJsZSBrZXlzIGV2ZW50cykuIFRoZSBkZWZhdWx0IGV2ZW50IG1hc2sgaXMKKwkJCXNldCB0byAweGZmZmZmZmZmLCBtZWFuaW5nIHRoYXQgYWxsIHBvc3NpYmxlIGV2ZW50cworCQkJd2lsbCBiZSB0cmllZC4gWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBiaXRzIHRvCisJCQljb25zdHJ1Y3QgeW91ciBvd24gZXZlbnQgbWFzayAoZnJvbQorCQkJZHJpdmVycy9jaGFyL3NvbnlwaS5oKToKKwkJCQlTT05ZUElfSk9HR0VSX01BU0sgCQkweDAwMDEKKwkJCQlTT05ZUElfQ0FQVFVSRV9NQVNLIAkJMHgwMDAyCisJCQkJU09OWVBJX0ZOS0VZX01BU0sgCQkweDAwMDQKKwkJCQlTT05ZUElfQkxVRVRPT1RIX01BU0sgCQkweDAwMDgKKwkJCQlTT05ZUElfUEtFWV9NQVNLIAkJMHgwMDEwCisJCQkJU09OWVBJX0JBQ0tfTUFTSyAJCTB4MDAyMAorCQkJCVNPTllQSV9IRUxQX01BU0sgCQkweDAwNDAKKwkJCQlTT05ZUElfTElEX01BU0sgCQkweDAwODAKKwkJCQlTT05ZUElfWk9PTV9NQVNLIAkJMHgwMTAwCisJCQkJU09OWVBJX1RIVU1CUEhSQVNFX01BU0sgCTB4MDIwMAorCQkJCVNPTllQSV9NRVlFX01BU0sJCTB4MDQwMAorCQkJCVNPTllQSV9NRU1PUllTVElDS19NQVNLCQkweDA4MDAKKwkJCQlTT05ZUElfQkFUVEVSWV9NQVNLCQkweDEwMDAKKworCXVzZWlucHV0OglpZiBzZXQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSB0d28gaW5wdXQgZGV2aWNlcyBhcmUKKwkJCWNyZWF0ZWQsIG9uZSB3aGljaCBpbnRlcnByZXRzIHRoZSBqb2dkaWFsIGV2ZW50cyBhcworCQkJbW91c2UgZXZlbnRzLCB0aGUgb3RoZXIgb25lIHdoaWNoIGFjdHMgbGlrZSBhCisJCQlrZXlib2FyZCByZXBvcnRpbmcgdGhlIHByZXNzaW5nIG9mIHRoZSBzcGVjaWFsIGtleXMuCisKK01vZHVsZSB1c2U6CistLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIHNvbnlwaSBtb2R1bGUgb24gdXNlLCB5b3UgY2FuIHB1dCB0aG9zZQorbGluZXMgaW4geW91ciAvZXRjL21vZHByb2JlLmNvbmYgZmlsZToKKworCWFsaWFzIGNoYXItbWFqb3ItMTAtMjUwIHNvbnlwaQorCW9wdGlvbnMgc29ueXBpIG1pbm9yPTI1MAorCitUaGlzIHN1cHBvc2VzIHRoZSB1c2Ugb2YgbWlub3IgMjUwIGZvciB0aGUgc29ueXBpIGRldmljZToKKworCSMgbWtub2QgL2Rldi9zb255cGkgYyAxMCAyNTAKKworQnVnczoKKy0tLS0tCisKKwktIHNldmVyYWwgdXNlcnMgcmVwb3J0ZWQgdGhhdCB0aGlzIGRyaXZlciBkaXNhYmxlcyB0aGUgQklPUy1tYW5hZ2VkCisJICBGbi1rZXlzIHdoaWNoIHB1dCB0aGUgbGFwdG9wIGluIHNsZWVwaW5nIHN0YXRlLCBvciBzd2l0Y2ggdGhlCisJICBleHRlcm5hbCBtb25pdG9yIG9uL29mZi4gVGhlcmUgaXMgbm8gd29ya2Fyb3VuZCB5ZXQsIHNpbmNlIHRoaXMKKwkgIGRyaXZlciBkaXNhYmxlcyBhbGwgQVBNIG1hbmFnZW1lbnQgZm9yIHRob3NlIGtleXMsIGJ5IGVuYWJsaW5nIHRoZQorCSAgQUNQSSBtYW5hZ2VtZW50IChhbmQgdGhlIEFDUEkgY29yZSBzdHVmZiBpcyBub3QgY29tcGxldGUgeWV0KS4gSWYKKwkgIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSBsYXB0b3BzIHdpdGggd29ya2luZyBGbiBrZXlzIGFuZCB3YW50IHRvCisJICBjb250aW51ZSB0byB1c2UgdGhlbSwgZG9uJ3QgdXNlIHRoaXMgZHJpdmVyLgorCisJLSBzb21lIHVzZXJzIHJlcG9ydGVkIHRoYXQgdGhlIGxhcHRvcCBzcGVlZCBpcyBsb3dlciAoZGhyeXN0b25lCisJICB0ZXN0ZWQpIHdoZW4gdXNpbmcgdGhlIGRyaXZlciB3aXRoIHRoZSBmbmtleWluaXQgcGFyYW1ldGVyLiBJIGNhbm5vdAorCSAgcmVwcm9kdWNlIGl0IG9uIG15IGxhcHRvcCBhbmQgbm90IGFsbCB1c2VycyBoYXZlIHRoaXMgcHJvYmxlbS4KKwkgIFRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZSBmbmtleWluaXQgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIEFDUEkKKwkgIG1vZGUgKGJ1dCB3aXRob3V0IGFkZGl0aW9uYWwgQUNQSSBjb250cm9sLCBsaWtlIHByb2Nlc3NvcgorCSAgc3BlZWQgaGFuZGxpbmcgZXRjKS4gVXNlIEFDUEkgaW5zdGVhZCBvZiBBUE0gaWYgaXQgd29ya3Mgb24geW91cgorCSAgbGFwdG9wLgorCisJLSBzaW5jZSBhbGwgZGV2ZWxvcG1lbnQgd2FzIGRvbmUgYnkgcmV2ZXJzZSBlbmdpbmVlcmluZywgdGhlcmUgaXMKKwkgIF9hYnNvbHV0ZWx5IG5vIGd1YXJhbnRlZV8gdGhhdCB0aGlzIGRyaXZlciB3aWxsIG5vdCBjcmFzaCB5b3VyCisJICBsYXB0b3AuIFBlcm1hbmVudGx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWVmMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTAsMCArMSwxNTA1IEBACisKKwkJQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlIC0gRHJpdmVyCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJICAgIENvbmZpZ3VyYXRpb24gZ3VpZGUKKworCitLZXJuZWwgQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PT09PT09PT0KKworVG8gZW5hYmxlIEFMU0Egc3VwcG9ydCB5b3UgbmVlZCBhdCBsZWFzdCB0byBidWlsZCB0aGUga2VybmVsIHdpdGgKK3ByaW1hcnkgc291bmQgY2FyZCBzdXBwb3J0IChDT05GSUdfU09VTkQpLiAgU2luY2UgQUxTQSBjYW4gZW11bGF0ZSBPU1MsCit5b3UgZG9uJ3QgaGF2ZSB0byBjaG9vc2UgYW55IG9mIHRoZSBPU1MgbW9kdWxlcy4KKworRW5hYmxlICJPU1MgQVBJIGVtdWxhdGlvbiIgKENPTkZJR19TTkRfT1NTRU1VTCkgYW5kIGJvdGggT1NTIG1peGVyIGFuZAorUENNIHN1cHBvcnRzIGlmIHlvdSB3YW50IHRvIHJ1biBPU1MgYXBwbGljYXRpb25zIHdpdGggQUxTQS4KKworSWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0aGUgV2F2ZVRhYmxlIGZ1bmN0aW9uYWxpdHkgb24gY2FyZHMgc3VjaCBhcworU0IgTGl2ZSEgdGhlbiB5b3UgbmVlZCB0byBlbmFibGUgIlNlcXVlbmNlciBzdXBwb3J0IgorKENPTkZJR19TTkRfU0VRVUVOQ0VSKS4KKworVG8gbWFrZSBBTFNBIGRlYnVnIG1lc3NhZ2VzIG1vcmUgdmVyYm9zZSwgZW5hYmxlIHRoZSAiVmVyYm9zZSBwcmludGsiCithbmQgIkRlYnVnIiBvcHRpb25zLiAgVG8gY2hlY2sgZm9yIG1lbW9yeSBsZWFrcywgdHVybiBvbiAiRGVidWcgbWVtb3J5IgordG9vLiAgIkRlYnVnIGRldGVjdGlvbiIgd2lsbCBhZGQgY2hlY2tzIGZvciB0aGUgZGV0ZWN0aW9uIG9mIGNhcmRzLgorCitQbGVhc2Ugbm90ZSB0aGF0IGFsbCB0aGUgQUxTQSBJU0EgZHJpdmVycyBzdXBwb3J0IHRoZSBMaW51eCBpc2FwbnAgQVBJCisoaWYgdGhlIGNhcmQgc3VwcG9ydHMgSVNBIFBuUCkuICBZb3UgZG9uJ3QgbmVlZCB0byBjb25maWd1cmUgdGhlIGNhcmRzCit1c2luZyBpc2FwbnB0b29scy4KKworCitDcmVhdGluZyBBTFNBIGRldmljZXMKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlcGVuZHMgb24geW91ciBkaXN0cmlidXRpb24sIGJ1dCBub3JtYWxseSB5b3UgdXNlIHRoZSAvZGV2L01BS0VERVYKK3NjcmlwdCB0byBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBkZXZpY2Ugbm9kZXMuICBPbiBzb21lIHN5c3RlbXMgeW91IHVzZSBhCitzY3JpcHQgbmFtZWQgJ3NuZGRldmljZXMnLgorCisKK01vZHVsZSBwYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PQorCitUaGUgdXNlciBjYW4gbG9hZCBtb2R1bGVzIHdpdGggb3B0aW9ucy4gSWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBtb3JlIHRoYW4KK29uZSBjYXJkIGFuZCB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGNhcmQgb2YgdGhlIHNhbWUgdHlwZSB0aGVuIHlvdSBjYW4KK3NwZWNpZnkgbXVsdGlwbGUgdmFsdWVzIGZvciB0aGUgb3B0aW9uIHNlcGFyYXRlZCBieSBjb21tYXMuCisKK1ByaW9yIHRvIHZlcnNpb24gMC45LjByYzQgb3B0aW9ucyBoYWQgYSAnc25kXycgcHJlZml4LiBUaGlzIHdhcyByZW1vdmVkLgorCisgIE1vZHVsZSBzbmQKKyAgLS0tLS0tLS0tLQorCisgICAgVGhlIGNvcmUgQUxTQSBtb2R1bGUuICBJdCBpcyB1c2VkIGJ5IGFsbCBBTFNBIGNhcmQgZHJpdmVycy4KKyAgICBJdCB0YWtlcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgd2hpY2ggaGF2ZSBnbG9iYWwgZWZmZWN0cy4KKworICAgIG1ham9yCS0gbWFqb3IgbnVtYmVyIGZvciBzb3VuZCBkcml2ZXIKKwkJLSBEZWZhdWx0OiAxMTYKKyAgICBjYXJkc19saW1pdAorCQktIGxpbWl0aW5nIGNhcmQgaW5kZXggZm9yIGF1dG8tbG9hZGluZyAoMS04KQorCQktIERlZmF1bHQ6IDEKKwkJLSBGb3IgYXV0by1sb2FkaW5nIG1vcmUgdGhhbiBvbmUgY2FyZCwgc3BlY2lmeSB0aGlzCisJCSAgb3B0aW9uIHRvZ2V0aGVyIHdpdGggc25kLWNhcmQtWCBhbGlhc2VzLgorICAgIGRldmljZV9tb2RlCisJCS0gcGVybWlzc2lvbiBtYXNrIGZvciBkeW5hbWljIHNvdW5kIGRldmljZSBmaWxlc3lzdGVtCisJCS0gVGhpcyBpcyBhdmFpbGFibGUgb25seSB3aGVuIERFVkZTIGlzIGVuYWJsZWQKKwkJLSBEZWZhdWx0OiAwNjY2CisJCS0gRS5nLjogZGV2aWNlX21vZGU9MDY2MAorCisgIAorICBNb2R1bGUgc25kLXBjbS1vc3MKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgUENNIE9TUyBlbXVsYXRpb24gbW9kdWxlLgorICAgIFRoaXMgbW9kdWxlIHRha2VzIG9wdGlvbnMgd2hpY2ggY2hhbmdlIHRoZSBtYXBwaW5nIG9mIGRldmljZXMuCisKKyAgICBkc3BfbWFwCS0gUENNIGRldmljZSBudW1iZXIgbWFwcyBhc3NpZ25lZCB0byB0aGUgMXN0IE9TUyBkZXZpY2UuCisJCS0gRGVmYXVsdDogMAorICAgIGFkc3BfbWFwCS0gUENNIGRldmljZSBudW1iZXIgbWFwcyBhc3NpZ25lZCB0byB0aGUgMnN0IE9TUyBkZXZpY2UuCisJCS0gRGVmYXVsdDogMQorICAgIG5vbmJsb2NrX29wZW4KKwkJLSBEb24ndCBibG9jayBvcGVuaW5nIGJ1c3kgUENNIGRldmljZXMuCisKKyAgICBGb3IgZXhhbXBsZSwgd2hlbiBkc3BfbWFwPTIsIC9kZXYvZHNwIHdpbGwgYmUgbWFwcGVkIHRvIFBDTSAjMiBvZgorICAgIHRoZSBjYXJkICMwLiAgU2ltaWxhcmx5LCB3aGVuIGFkc3BfbWFwPTAsIC9kZXYvYWRzcCB3aWxsIGJlIG1hcHBlZAorICAgIHRvIFBDTSAjMCBvZiB0aGUgY2FyZCAjMC4KKyAgICBGb3IgY2hhbmdpbmcgdGhlIHNlY29uZCBvciBsYXRlciBjYXJkLCBzcGVjaWZ5IHRoZSBvcHRpb24gd2l0aAorICAgIGNvbW1hcywgc3VjaCBsaWtlICJkc3BfbWFwPTAsMSIuCisKKyAgICBub25ibG9ja19vcGVuIG9wdGlvbiBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIFBDTQorICAgIHJlZ2FyZGluZyBvcGVuaW5nIHRoZSBkZXZpY2UuICBXaGVuIHRoaXMgb3B0aW9uIGlzIG5vbi16ZXJvLAorICAgIG9wZW5pbmcgYSBidXN5IE9TUyBQQ00gZGV2aWNlIHdvbid0IGJlIGJsb2NrZWQgYnV0IHJldHVybgorICAgIGltbWVkaWF0ZWx5IHdpdGggRUFHQUlOIChqdXN0IGxpa2UgT19OT05CTE9DSyBmbGFnKS4KKyAgICAKKyAgTW9kdWxlIHNuZC1yYXdtaWRpCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBtb2R1bGUgdGFrZXMgb3B0aW9ucyB3aGljaCBjaGFuZ2UgdGhlIG1hcHBpbmcgb2YgZGV2aWNlcy4KKyAgICBzaW1pbGFyIHRvIHRob3NlIG9mIHRoZSBzbmQtcGNtLW9zcyBtb2R1bGUuCisKKyAgICBtaWRpX21hcAktIE1JREkgZGV2aWNlIG51bWJlciBtYXBzIGFzc2lnbmVkIHRvIHRoZSAxc3QgT1NTIGRldmljZS4KKwkJLSBEZWZhdWx0OiAwCisgICAgYW1pZGlfbWFwCS0gTUlESSBkZXZpY2UgbnVtYmVyIG1hcHMgYXNzaWduZWQgdG8gdGhlIDJzdCBPU1MgZGV2aWNlLgorCQktIERlZmF1bHQ6IDEKKworICBDb21tb24gcGFyYW1ldGVycyBmb3IgdG9wIHNvdW5kIGNhcmQgbW9kdWxlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgRWFjaCBvZiB0b3AgbGV2ZWwgc291bmQgY2FyZCBtb2R1bGUgdGFrZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zLgorCisgICAgaW5kZXgJLSBpbmRleCAoc2xvdCAjKSBvZiBzb3VuZCBjYXJkCisJCS0gVmFsdWVzOiAwIHRocm91Z2ggNyBvciBuZWdhdGl2ZQorCQktIElmIG5vbm5lZ2F0aXZlLCBhc3NpZ24gdGhhdCBpbmRleCBudW1iZXIKKyAgICAgICAgICAgICAgICAtIGlmIG5lZ2F0aXZlLCBpbnRlcnByZXQgYXMgYSBiaXRtYXNrIG9mIHBlcm1pc3NpYmxlCisJCSAgaW5kaWNlczsgdGhlIGZpcnN0IGZyZWUgcGVybWl0dGVkIGluZGV4IGlzIGFzc2lnbmVkCisJCS0gRGVmYXVsdDogLTEKKyAgICBpZAkJLSBjYXJkIElEIChpZGVudGlmaWVyIG9yIG5hbWUpCisJCS0gQ2FuIGJlIHVwIHRvIDE1IGNoYXJhY3RlcnMgbG9uZworCQktIERlZmF1bHQ6IHRoZSBjYXJkIHR5cGUKKwkJLSBBIGRpcmVjdG9yeSBieSB0aGlzIG5hbWUgaXMgY3JlYXRlZCB1bmRlciAvcHJvYy9hc291bmQvCisJCSAgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FyZAorCQktIFRoaXMgSUQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW5kZXggbnVtYmVyIGluCisJCSAgaWRlbnRpZnlpbmcgdGhlIGNhcmQKKyAgICBlbmFibGUgIAktIGVuYWJsZSBjYXJkCisJCS0gRGVmYXVsdDogZW5hYmxlZCwgZm9yIFBDSSBhbmQgSVNBIFBuUCBjYXJkcworCisgIE1vZHVsZSBzbmQtYWQxODE2YQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQW5hbG9nIERldmljZXMgQUQxODE2QS9BRDE4MTUgSVNBIGNoaXBzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgQUQxODE2QSBjaGlwIChQblAgc2V0dXApCisgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwKQorICAgIGZtX3BvcnQJLSBwb3J0ICMgZm9yIE9QTDMgKFBuUCBzZXR1cCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIEFEMTgxNkEgY2hpcCAoUG5QIHNldHVwKQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXApCisgICAgZG1hMQktIGZpcnN0IERNQSAjIGZvciBBRDE4MTZBIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBBRDE4MTZBIGNoaXAgKFBuUCBzZXR1cCkKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBQblAuCisgICAgCisgIE1vZHVsZSBzbmQtYWQxODQ4CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEFEMTg0OC9BRDE4NDcvQ1M0MjQ4IElTQSBjaGlwcy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEFEMTg0OCBjaGlwCisgICAgaXJxCQktIElSUSAjIGZvciBBRDE4NDggIGNoaXAKKyAgICBkbWExCS0gRE1BICMgZm9yIEFEMTg0OCBjaGlwICgwLDEsMykKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4gVGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBhdXRvcHJvYmUKKyAgICB0aHVzIG1haW4gcG9ydCBtdXN0IGJlIHNwZWNpZmllZCEhISBPdGhlciBwb3J0cyBhcmUgb3B0aW9uYWwuCisgICAgCisgIE1vZHVsZSBzbmQtYWxpNTQ1MQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQUxpIE01NDUxIFBDSSBjaGlwLgorCisgICAgcGNtX2NoYW5uZWxzICAgIC0gTnVtYmVyIG9mIGhhcmR3YXJlIGNoYW5uZWxzIGFzc2lnbmVkIGZvciBQQ00KKyAgICBzcGRpZiAgICAgICAgICAgLSBTdXBwb3J0IFNQRElGIEkvTworICAgIAkJICAgIC0gRGVmYXVsdDogZGlzYWJsZWQKKworICAgIE1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNoaXBzIChtYXggOCkuCisKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKKyAgTW9kdWxlIHNuZC1hbHMxMDAKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQXZhbmNlIExvZ2ljIEFMUzEwMC9BTFMxMjAgSVNBIGNoaXBzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgQUxTMTAwIChTQjE2KSBjaGlwIChQblAgc2V0dXApCisgICAgaXJxCQktIElSUSAjIGZvciBBTFMxMDAgKFNCMTYpIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBkbWE4CS0gOC1iaXQgRE1BICMgZm9yIEFMUzEwMCAoU0IxNikgY2hpcCAoUG5QIHNldHVwKQorICAgIGRtYTE2CS0gMTYtYml0IERNQSAjIGZvciBBTFMxMDAgKFNCMTYpIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXApCisgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIChQblAgc2V0dXApCisgICAgZm1fcG9ydAktIHBvcnQgIyBmb3IgT1BMMyBGTSAoUG5QIHNldHVwKQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBhdXRvcHJvYmUgYW5kIFBuUC4KKworICBNb2R1bGUgc25kLWFsczQwMDAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEF2YW5jZSBMb2dpYyBBTFM0MDAwIFBDSSBjaGlwLgorCisgICAgam95c3RpY2tfcG9ydCAtIHBvcnQgIyBmb3IgbGVnYWN5IGpveXN0aWNrIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDAgPSBkaXNhYmxlZCAoZGVmYXVsdCksIDEgPSBhdXRvLWRldGVjdAorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBhdXRvcHJvYmUgYW5kIFBuUC4KKworICBNb2R1bGUgc25kLWF0aWl4cAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBBVEkgSVhQIDE1MC8yMDAvMjUwIEFDOTcgY29udHJvbGxlcnMuCisKKyAgICBhYzk3X2Nsb2NrCQktIEFDJzk3IGNsb2NrIChkZWZhbHV0ID0gNDgwMDApCisgICAgYWM5N19xdWlyawkJLSBBQyc5NyB3b3JrYXJvdW5kIGZvciBzdHJhbmdlIGhhcmR3YXJlCisJCQkgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgaW50ZWw4eDAgbW9kdWxlIGZvciBkZXRhaWxzLgorICAgIHNwZGlmX2FjbGluawktIFMvUERJRiB0cmFuc2ZlciBvdmVyIEFDLWxpbmsgKGRlZmF1bHQgPSAxKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgIE1vZHVsZSBzbmQtYXRpaXhwLW1vZGVtCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFUSSBJWFAgMTUwLzIwMC8yNTAgQUM5NyBtb2RlbSBjb250cm9sbGVycy4KKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgICAgTm90ZTogVGhlIGRlZmF1bHQgaW5kZXggdmFsdWUgb2YgdGhpcyBtb2R1bGUgaXMgLTIsIGkuZS4gdGhlIGZpcnN0CisgICAgICAgICAgc2xvdCBpcyBleGNsdWRlZC4KKworICBNb2R1bGUgc25kLWF1ODgxMCwgc25kLWF1ODgyMCwgc25kLWF1ODgzMAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBBdXJlYWwgVm9ydGV4LCBWb3J0ZXgyIGFuZCBBZHZhbnRhZ2UgZGV2aWNlLgorCisgICAgcGNpZml4CS0gQ29udHJvbCBQQ0kgd29ya2Fyb3VuZHMKKwkJICAwID0gRGlzYWJsZSBhbGwgd29ya2Fyb3VuZHMKKwkJICAxID0gRm9yY2UgdGhlIFBDSSBsYXRlbmN5IG9mIHRoZSBBdXJlYWwgY2FyZCB0byAweGZmCisJCSAgMiA9IEZvcmNlIHRoZSBFeHRlbmQgUENJIzIgSW50ZXJuYWwgTWFzdGVyIGZvciBFZmZpY2llbnQKKwkJICAgICAgSGFuZGxpbmcgb2YgRHVtbXkgUmVxdWVzdHMgb24gdGhlIFZJQSBLVDEzMyBBR1AgQnJpZGdlCisJCSAgMyA9IEZvcmNlIGJvdGggc2V0dGluZ3MKKwkJICAyNTUgPSBBdXRvZGV0ZWN0IHdoYXQgaXMgcmVxdWlyZWQgKGRlZmF1bHQpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBhbGwgQURCIFBDTSBjaGFubmVscywgYWM5NyBtaXhlciwgU1BESUYsIGhhcmR3YXJlCisgICAgRVEsIG1wdTQwMSwgZ2FtZXBvcnQuIEEzRCBhbmQgd2F2ZXRhYmxlIHN1cHBvcnQgYXJlIHN0aWxsIGluIGRldmVsb3BtZW50LgorICAgIERldmVsb3BtZW50IGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIHdvcmsgaXMgYmVpbmcgY29vcmRpbmF0ZWQgYXQKKyAgICBodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9vcGVudm9ydGV4LworICAgIFNQRElGIG91dHB1dCBoYXMgYSBjb3B5IG9mIHRoZSBBQzk3IGNvZGVjIG91dHB1dCwgdW5sZXNzIHlvdSB1c2UgdGhlCisgICAgInNwZGlmIiBwY20gZGV2aWNlLCB3aGljaCBhbGxvd3MgcmF3IGRhdGEgcGFzc3RocnUuCisgICAgVGhlIGhhcmR3YXJlIEVRIGhhcmR3YXJlIGFuZCBTUERJRiBpcyBvbmx5IHByZXNlbnQgaW4gdGhlIFZvcnRleDIgYW5kIAorICAgIEFkdmFudGFnZS4KKworICAgIE5vdGU6IFNvbWUgQUxTQSBtaXhlciBhcHBsaWNhY3Rpb25zIGRvbid0IGhhbmRsZSB0aGUgU1BESUYgc2FtcGxlcmF0ZSAKKyAgICAgICAgICAgY29udHJvbCBjb3JyZWN0bHkuIElmIHlvdSBoYXZlIHByb2JsZW1zIHJlZ2FyZGluZyB0aGlzLCB0cnkKKyAgICAgICAgICAgYW5vdGhlciBBTFNBIGNvbXBsaWFudCBtaXhlciAoYWxzYW1peGVyIHdvcmtzKS4KKworICBNb2R1bGUgc25kLWF6dDIzMjAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEF6dGVjaCBTeXN0ZW0gQVpUMjMyMCBJU0EgY2hpcCAoUG5QIG9ubHkpLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgQVpUMjMyMCBjaGlwIChQblAgc2V0dXApCisgICAgd3NzX3BvcnQJLSBwb3J0ICMgZm9yIFdTUyAoUG5QIHNldHVwKQorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIFVBUlQgKFBuUCBzZXR1cCkKKyAgICBmbV9wb3J0CS0gRk0gcG9ydCAjIGZvciBBWlQyMzIwIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIEFaVDIzMjAgKFdTUykgY2hpcCAoUG5QIHNldHVwKQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXApCisgICAgZG1hMQktIDFzdCBETUEgIyBmb3IgQVpUMjMyMCAoV1NTKSBjaGlwIChQblAgc2V0dXApCisgICAgZG1hMgktIDJuZCBETUEgIyBmb3IgQVpUMjMyMCAoV1NTKSBjaGlwIChQblAgc2V0dXApCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIFBuUCBhbmQgYXV0b3Byb2JlLgorICAgIAorICBNb2R1bGUgc25kLWF6dDMzMjgKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEF6dGVjaCBBWkYzMzI4IFBDSSBjaGlwLgorCisgICAgam95c3RpY2sJLSBFbmFibGUgam95c3RpY2sgKGRlZmF1bHQgb2ZmKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1idDg3eAorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHZpZGVvIGNhcmRzIGJhc2VkIG9uIEJ0ODd4IGNoaXBzLgorCisgICAgZGlnaXRhbF9yYXRlIC0gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgZGlnaXRhbCByYXRlIChIeikKKyAgICBsb2FkX2FsbAktIExvYWQgdGhlIGRyaXZlciBldmVuIGlmIHRoZSBjYXJkIG1vZGVsIGlzbid0IGtub3duCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIE5vdGU6IFRoZSBkZWZhdWx0IGluZGV4IHZhbHVlIG9mIHRoaXMgbW9kdWxlIGlzIC0yLCBpLmUuIHRoZSBmaXJzdAorICAgICAgICAgIHNsb3QgaXMgZXhjbHVkZWQuCisKKyAgTW9kdWxlIHNuZC1jYTAxMDYKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQ3JlYXRpdmUgQXVkaWd5IExTIGFuZCBTQiBMaXZlIDI0Yml0CisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworCisgIE1vZHVsZSBzbmQtY21pODMzMAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQy1NZWRpYSBDTUk4MzMwIElTQSBjaGlwcy4KKworICAgIHdzc3BvcnQJLSBwb3J0ICMgZm9yIENNSTgzMzAgY2hpcCAoV1NTKQorICAgIHdzc2lycQktIElSUSAjIGZvciBDTUk4MzMwIGNoaXAgKFdTUykKKyAgICB3c3NkbWEJLSBmaXJzdCBETUEgIyBmb3IgQ01JODMzMCBjaGlwIChXU1MpCisgICAgc2Jwb3J0CS0gcG9ydCAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCisgICAgc2JpcnEJLSBJUlEgIyBmb3IgQ01JODMzMCBjaGlwIChTQjE2KQorICAgIHNiZG1hOAktIDhiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKKyAgICBzYmRtYTE2CS0gMTZiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgTW9kdWxlIHNuZC1jbWlwY2kKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQy1NZWRpYSBDTUk4MzM4IGFuZCA4NzM4IFBDSSBzb3VuZCBjYXJkcy4KKworICAgIG1wdV9wb3J0CS0gMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzAsIDAgPSBkaXNhYmxlIChkZWZhdWx0KQorICAgIGZtX3BvcnQgICAgIC0gMHgzODggKGRlZmF1bHQpLCAwID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBzb2Z0X2FjMyAgICAtIFNvZndhcmUtY29udmVyc2lvbiBvZiByYXcgU1BESUYgcGFja2V0cyAobW9kZWwgMDMzIG9ubHkpCisgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA9IDEpCisgICAgam95c3RpY2tfcG9ydCAtIEpveXN0aWNrIHBvcnQgYWRkcmVzcyAoMCA9IGRpc2FibGUsIDEgPSBhdXRvLWRldGVjdCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNoaXBzIChtYXggOCkuCisgICAgCisgIE1vZHVsZSBzbmQtY3M0MjMxCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzMSBJU0EgY2hpcHMuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBDUzQyMzEgY2hpcAorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIFVBUlQgKG9wdGlvbmFsKSwgLTEgPSBkaXNhYmxlCisgICAgaXJxCQktIElSUSAjIGZvciBDUzQyMzEgY2hpcAorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUCisgICAgZG1hMQktIGZpcnN0IERNQSAjIGZvciBDUzQyMzEgY2hpcAorICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIENTNDIzMSBjaGlwCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCisgICAgdGh1cyBtYWluIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlIG9wdGlvbmFsLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorICAgIAorICBNb2R1bGUgc25kLWNzNDIzMgorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQyMzIvQ1M0MjMyQSBJU0EgY2hpcHMuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBDUzQyMzIgY2hpcCAoUG5QIHNldHVwIC0gMHg1MzQpCisgICAgY3BvcnQJLSBjb250cm9sIHBvcnQgIyBmb3IgQ1M0MjMyIGNoaXAgKFBuUCBzZXR1cCAtIDB4MTIwLDB4MjEwLDB4ZjAwKQorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIFVBUlQgKFBuUCBzZXR1cCAtIDB4MzAwKSwgLTEgPSBkaXNhYmxlCisgICAgZm1fcG9ydAktIEZNIHBvcnQgIyBmb3IgQ1M0MjMyIGNoaXAgKFBuUCBzZXR1cCAtIDB4Mzg4KSwgLTEgPSBkaXNhYmxlCisgICAgaXJxCQktIElSUSAjIGZvciBDUzQyMzIgY2hpcCAoNSw3LDksMTEsMTIsMTUpCisgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIFVBUlQgKDksMTEsMTIsMTUpCisgICAgZG1hMQktIGZpcnN0IERNQSAjIGZvciBDUzQyMzIgY2hpcCAoMCwxLDMpCisgICAgZG1hMgktIHNlY29uZCBETUEgIyBmb3IgWWFtYWhhIENTNDIzMiBjaGlwICgwLDEsMyksIC0xID0gZGlzYWJsZQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCisgICAgdGh1cyBtYWluIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlIG9wdGlvbmFsLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorICAgIAorICBNb2R1bGUgc25kLWNzNDIzNgorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQyMzUvQ1M0MjM2L0NTNDIzNkIvQ1M0MjM3Qi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1M0MjM4Qi9DUzQyMzkgSVNBIGNoaXBzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjM2IGNoaXAgKFBuUCBzZXR1cCAtIDB4NTM0KQorICAgIGNwb3J0CS0gY29udHJvbCBwb3J0ICMgZm9yIENTNDIzNiBjaGlwIChQblAgc2V0dXAgLSAweDEyMCwweDIxMCwweGYwMCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXAgLSAweDMwMCksIC0xID0gZGlzYWJsZQorICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIENTNDIzNiBjaGlwIChQblAgc2V0dXAgLSAweDM4OCksIC0xID0gZGlzYWJsZQorICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjM2IGNoaXAgKDUsNyw5LDExLDEyLDE1KQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg5LDExLDEyLDE1KQorICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjM2IGNoaXAgKDAsMSwzKQorICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIENTNDIzNiBjaGlwICgwLDEsMyksIC0xID0gZGlzYWJsZQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCisgICAgKGlmIElTQSBQblAgaXMgbm90IHVzZWQpIHRodXMgbWFpbiBwb3J0IGFuZCBjb250cm9sIHBvcnQgbXVzdCBiZQorICAgIHNwZWNpZmllZCEhISBPdGhlciBwb3J0cyBhcmUgb3B0aW9uYWwuCisKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKKyAgTW9kdWxlIHNuZC1jczQyODEKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQ2lycnVzIExvZ2ljIENTNDI4MSBzb3VuZGNoaXAuCisKKyAgICBkdWFsX2NvZGVjCS0gU2Vjb25kYXJ5IGNvZGVjIElEICgwID0gZGlzYWJsZSwgZGVmYXVsdCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtY3M0Nnh4CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFBDSSBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQ2MTAvQ1M0NjEyL0NTNDYxNC9DUzQ2MTUvQ1M0NjIyLworCQkJCSAgICAgICBDUzQ2MjQvQ1M0NjMwL0NTNDI4MCBQQ0kgY2hpcHMuCisKKyAgICBleHRlcm5hbF9hbXAgICAgIC0gRm9yY2UgdG8gZW5hYmxlIGV4dGVybmFsIGFtcGxpZmVyLgorICAgIHRoaW5rcGFkICAgICAgICAgLSBGb3JjZSB0byBlbmFibGUgVGhpbmtwYWQncyBDTEtSVU4gY29udHJvbC4KKyAgICBtbWFwX3ZhbGlkICAgICAgIC0gU3VwcG9ydCBPU1MgbW1hcCBtb2RlIChkZWZhdWx0ID0gMCkuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorICAgIFVzdWFsbHkgZXh0ZXJuYWwgYW1wIGFuZCBDTEtSVU4gY29udHJvbHMgYXJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkKKyAgICBmcm9tIFBDSSBzdWIgdmVuZG9yL2RldmljZSBpZHMuICBJZiB0aGV5IGRvbid0IHdvcmssIGdpdmUgdGhlIG9wdGlvbnMKKyAgICBhYm92ZSBleHBsaWNpdGx5LgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorICAgIAorICBNb2R1bGUgc25kLWR0MDE5eAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTlYIC8gQXZhbmNlIExvZ2ljIEFMUy0wMDcgKFBuUAorICAgIG9ubHkpCisKKyAgICBwb3J0CS0gUG9ydCAjIChQblAgc2V0dXApCisgICAgbXB1X3BvcnQJLSBQb3J0ICMgZm9yIE1QVS00MDEgKFBuUCBzZXR1cCkKKyAgICBmbV9wb3J0CS0gUG9ydCAjIGZvciBGTSBPUEwtMyAoUG5QIHNldHVwKQorICAgIGlycQkJLSBJUlEgIyAoUG5QIHNldHVwKQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSAoUG5QIHNldHVwKQorICAgIGRtYTgJLSBETUEgIyAoUG5QIHNldHVwKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuICBUaGlzIG1vZHVsZSBpcyBlbmFibGVkIG9ubHkgd2l0aAorICAgIElTQSBQblAgc3VwcG9ydC4KKworICBNb2R1bGUgc25kLWR1bW15CisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgdGhlIGR1bW15IHNvdW5kIGNhcmQuIFRoaXMgImNhcmQiIGRvZXNuJ3QgZG8gYW55IG91dHB1dAorICAgIG9yIGlucHV0LCBidXQgeW91IG1heSB1c2UgdGhpcyBtb2R1bGUgZm9yIGFueSBhcHBsaWNhdGlvbiB3aGljaAorICAgIHJlcXVpcmVzIGEgc291bmQgY2FyZCAobGlrZSBSZWFsUGxheWVyKS4KKworICBNb2R1bGUgc25kLWVtdTEwazEKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEVNVTEwSzEvRU1VMTBrMiBiYXNlZCBQQ0kgc291bmQgY2FyZHMuCisJCQkqIFNvdW5kIEJsYXN0ZXIgTGl2ZSEKKwkJCSogU291bmQgQmxhc3RlciBQQ0kgNTEyCisJCQkqIEVtdSBBUFMgKHBhcnRpYWxseSBzdXBwb3J0ZWQpCisJCQkqIFNvdW5kIEJsYXN0ZXIgQXVkaWd5CisKKyAgICBleHRpbiAgIC0gYml0bWFwIG9mIGF2YWlsYWJsZSBleHRlcm5hbCBpbnB1dHMgZm9yIEZYODAxMCAoc2VlIGJlbGxvdykKKyAgICBleHRvdXQgIC0gYml0bWFwIG9mIGF2YWlsYWJsZSBleHRlcm5hbCBvdXRwdXRzIGZvciBGWDgwMTAgKHNlZSBiZWxsb3cpCisgICAgc2VxX3BvcnRzIC0gYWxsb2NhdGVkIHNlcXVlbmNlciBwb3J0cyAoNCBieSBkZWZhdWx0KQorICAgIG1heF9zeW50aF92b2ljZXMgLSBsaW1pdCBvZiB2b2ljZXMgdXNlZCBmb3Igd2F2ZXRhYmxlICg2NCBieSBkZWZhdWx0KQorICAgIG1heF9idWZmZXJfc2l6ZSAgLSBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBvZiB3YXZldGFibGUvcGNtIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gaW4gTUIgdW5pdC4gIERlZmF1bHQgdmFsdWUgaXMgMTI4LgorICAgIGVuYWJsZV9pciAtIGVuYWJsZSBJUgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICAgIElucHV0ICYgT3V0cHV0IGNvbmZpZ3VyYXRpb25zIAkJCVtleHRpbi9leHRvdXRdCisJKiBDcmVhdGl2ZSBDYXJkIHdvL0RpZ2l0YWwgb3V0CQkJWzB4MDAwMy8weDFmMDNdCisJKiBDcmVhdGl2ZSBDYXJkIHcvRGlnaXRhbCBvdXQJCQlbMHgwMDAzLzB4MWYwZl0KKwkqIENyZWF0aXZlIENhcmQgdy9EaWdpdGFsIENEIGluCQkJWzB4MDAwZi8weDFmMGZdCisJKiBDcmVhdGl2ZSBDYXJkIHdvL0RpZ2l0YWwgb3V0ICsgTGl2ZURyaXZlCVsweDNmYzMvMHgxZmMzXQorCSogQ3JlYXRpdmUgQ2FyZCB3L0RpZ2l0YWwgb3V0ICsgTGl2ZURyaXZlCVsweDNmYzMvMHgxZmNmXQorCSogQ3JlYXRpdmUgQ2FyZCB3L0RpZ2l0YWwgQ0QgaW4gKyBMaXZlRHJpdmUJWzB4M2ZjZi8weDFmY2ZdCisJKiBDcmVhdGl2ZSBDYXJkIHdvL0RpZ2l0YWwgb3V0ICsgRGlnaXRhbCBJL08gMiAgWzB4MGZjMy8weDFmMGZdCisJKiBDcmVhdGl2ZSBDYXJkIHcvRGlnaXRhbCBvdXQgKyBEaWdpdGFsIEkvTyAyCVsweDBmYzMvMHgxZjBmXQorCSogQ3JlYXRpdmUgQ2FyZCB3L0RpZ2l0YWwgQ0QgaW4gKyBEaWdpdGFsIEkvTyAyCVsweDBmY2YvMHgxZjBmXQorICAgICAgICAqIENyZWF0aXZlIENhcmQgNS4xL3cgRGlnaXRhbCBvdXQgKyBMaXZlRHJpdmUJWzB4M2ZjMy8weDFmZmZdCisJKiBDcmVhdGl2ZSBDYXJkIDUuMSAoYykgMjAwMwkJCVsweDNmYzMvMHg3Y2ZmXQorICAgICAgICAqIENyZWF0aXZlIENhcmQgYWxsIGlucyBhbmQgb3V0cwkJWzB4M2ZmZi8weDdmZmZdCisgICAgCisgIE1vZHVsZSBzbmQtZW11MTBrMXgKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBDcmVhdGl2ZSBFbXUxMGsxWCAoU0IgTGl2ZSBEZWxsIE9FTSB2ZXJzaW9uKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1lbnMxMzcwCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFbnNvbmlxIEF1ZGlvUENJIEVTMTM3MCBQQ0kgc291bmQgY2FyZHMuCisJCQkqIFNvdW5kQmxhc3RlciBQQ0kgNjQKKwkJCSogU291bmRCbGFzdGVyIFBDSSAxMjgKKworICAgIGpveXN0aWNrCQktIEVuYWJsZSBqb3lzdGljayAoZGVmYXVsdCBvZmYpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorICAgIAorICBNb2R1bGUgc25kLWVuczEzNzEKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEVuc29uaXEgQXVkaW9QQ0kgRVMxMzcxIFBDSSBzb3VuZCBjYXJkcy4KKwkJCSogU291bmRCbGFzdGVyIFBDSSA2NAorCQkJKiBTb3VuZEJsYXN0ZXIgUENJIDEyOAorCQkJKiBTb3VuZEJsYXN0ZXIgVmlicmEgUENJCisKKyAgICBqb3lzdGlja19wb3J0CS0gcG9ydCAjIGZvciBqb3lzdGljayAoMHgyMDAsMHgyMDgsMHgyMTAsMHgyMTgpLAorCQkJICAwID0gZGlzYWJsZSAoZGVmYXVsdCksIDEgPSBhdXRvLWRldGVjdAorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1lczk2OAorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEVTUyBFUzk2OCBjaGlwIChQblAgb25seSkuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBFUzk2OCAoU0I4KSBjaGlwIChQblAgc2V0dXApCisgICAgaXJxCQktIElSUSAjIGZvciBFUzk2OCAoU0I4KSBjaGlwIChQblAgc2V0dXApCisgICAgZG1hMQktIERNQSAjIGZvciBFUzk2OCAoU0I4KSBjaGlwIChQblAgc2V0dXApCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIFBuUCBhbmQgYXV0b3Byb2JlLgorICAgIAorICBNb2R1bGUgc25kLWVzMTY4OAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFU1MgQXVkaW9Ecml2ZSBFUy0xNjg4IGFuZCBFUy02ODggc291bmQgY2FyZHMuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBFUy0xNjg4IGNoaXAgKDB4MjIwLDB4MjQwLDB4MjYwKQorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIHBvcnQgKDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwKSwgLTEgPSBkaXNhYmxlIChkZWZhdWx0KQorICAgIGlycQkJLSBJUlEgIyBmb3IgRVMtMTY4OCBjaGlwICg1LDcsOSwxMCkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgcG9ydCAoNSw3LDksMTApCisgICAgZG1hOAktIERNQSAjIGZvciBFUy0xNjg4IGNoaXAgKDAsMSwzKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZSAod2l0aG91dCBNUFUtNDAxIHBvcnQpLgorCisgIE1vZHVsZSBzbmQtZXMxOHh4CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEVTUyBBdWRpb0RyaXZlIEVTLTE4eHggc291bmQgY2FyZHMuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBFUy0xOHh4IGNoaXAgKDB4MjIwLDB4MjQwLDB4MjYwKQorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIHBvcnQgKDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwKSwgLTEgPSBkaXNhYmxlIChkZWZhdWx0KQorICAgIGZtX3BvcnQJLSBwb3J0ICMgZm9yIEZNIChvcHRpb25hbCwgbm90IHVzZWQpCisgICAgaXJxCQktIElSUSAjIGZvciBFUy0xOHh4IGNoaXAgKDUsNyw5LDEwKQorICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgRVMtMTh4eCBjaGlwICgwLDEsMykKKyAgICBkbWEyCS0gZmlyc3QgRE1BICMgZm9yIEVTLTE4eHggY2hpcCAoMCwxLDMpCisgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIElTQSBQblAgYW5kIGF1dG9wcm9iZSAod2l0aG91dCBNUFUtNDAxIHBvcnQKKyAgICBpZiBuYXRpdmUgSVNBIFBuUCByb3V0aW5lcyBhcmUgbm90IHVzZWQpLgorICAgIFdoZW4gZG1hMiBpcyBlcXVhbCB3aXRoIGRtYTEsIHRoZSBkcml2ZXIgd29ya3MgYXMgaGFsZi1kdXBsZXguCisKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKKyAgTW9kdWxlIHNuZC1lczE5MzgKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gRVNTIFNvbG8tMSAoRVMxOTM4LEVTMTk0NikgY2hpcHMuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgIE1vZHVsZSBzbmQtZXMxOTY4CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEVTUyBNYWVzdHJvLTEvMi8yRSAoRVMxOTY4L0VTMTk3OCkgY2hpcHMuCisKKyAgICB0b3RhbF9idWZzaXplCS0gdG90YWwgYnVmZmVyIHNpemUgaW4ga0IgKDEtNDA5NmtCKQorICAgIHBjbV9zdWJzdHJlYW1zX3AJLSBwbGF5YmFjayBjaGFubmVscyAoMS04LCBkZWZhdWx0PTIpCisgICAgcGNtX3N1YnN0cmVhbXNfYwktIGNhcHR1cmUgY2hhbm5lbHMgKDEtOCwgZGVmYXVsdD0wKQorICAgIGNsb2NrCQktIGNsb2NrICgwID0gYXV0by1kZXRlY3Rpb24pCisgICAgdXNlX3BtCQktIHN1cHBvcnQgdGhlIHBvd2VyLW1hbmFnZW1lbnQgKDAgPSBvZmYsIDEgPSBvbiwKKwkJCSAgMiA9IGF1dG8gKGRlZmF1bHQpKQorICAgIGVuYWJsZV9tcHUJCS0gZW5hYmxlIE1QVTQwMSAoMCA9IG9mZiwgMSA9IG9uLCAyID0gYXV0byAoZGVmYXVsdCkpCisgICAgam95c3RpY2sJCS0gZW5hYmxlIGpveXN0aWNrIChkZWZhdWx0IG9mZikgICAgICAgCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtZm04MDEKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBGb3J0ZU1lZGlhIEZNODAxIGJhc2VkIFBDSSBzb3VuZCBjYXJkcy4KKworICAgIHRlYTU3NXhfdHVuZXIgICAgICAgLSBFbmFibGUgVEVBNTc1eCB0dW5lcgorICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgPSBNZWRpYUZvcnRlIDI1Ni1QQ1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSAyID0gTWVkaWFGb3J0ZSAyNTYtUENQUgorICAgICAgICAgICAgICAgICAgICAgICAgICAtIDMgPSBNZWRpYUZvcnRlIDY0LVBDUiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSGlnaCAxNi1iaXRzIGFyZSB2aWRlbyAocmFkaW8pIGRldmljZSBudW1iZXIgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZXhhbXBsZTogMHgxMDAwMiAoTWVkaWFGb3J0ZSAyNTYtUENQUiwgZGV2aWNlIDEpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorICAgIAorICBNb2R1bGUgc25kLWd1c2NsYXNzaWMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEdyYXZpcyBVbHRyYVNvdW5kIENsYXNzaWMgc291bmQgY2FyZC4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEdGMSBjaGlwICgweDIyMCwweDIzMCwweDI0MCwweDI1MCwweDI2MCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIEdGMSBjaGlwICgzLDUsOSwxMSwxMiwxNSkKKyAgICBkbWExCS0gRE1BICMgZm9yIEdGMSBjaGlwICgxLDMsNSw2LDcpCisgICAgZG1hMgktIERNQSAjIGZvciBHRjEgY2hpcCAoMSwzLDUsNiw3LC0xPWRpc2FibGUpCisgICAgam95c3RpY2tfZGFjIC0gMCB0byAzMSwgKDAuNTlWLTQuNTJWIG9yIDAuMzg5Vi0yLjk4VikKKyAgICB2b2ljZXMJLSBHRjEgdm9pY2VzIGxpbWl0ICgxNC0zMikKKyAgICBwY21fdm9pY2VzCS0gcmVzZXJ2ZWQgUENNIHZvaWNlcworCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICBNb2R1bGUgc25kLWd1c2V4dHJlbWUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEdyYXZpcyBVbHRyYVNvdW5kIEV4dHJlbWUgKFN5bmVyZ3kgVmlwZXJNYXgpIHNvdW5kIGNhcmQuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBFUy0xNjg4IGNoaXAgKDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIGdmMV9wb3J0CS0gcG9ydCAjIGZvciBHRjEgY2hpcCAoMHgyMTAsMHgyMjAsMHgyMzAsMHgyNDAsMHgyNTAsMHgyNjAsMHgyNzApCisgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgcG9ydCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApLCAtMSA9IGRpc2FibGUKKyAgICBpcnEJCS0gSVJRICMgZm9yIEVTLTE2ODggY2hpcCAoNSw3LDksMTApCisgICAgZ2YxX2lycQktIElSUSAjIGZvciBHRjEgY2hpcCAoMyw1LDksMTEsMTIsMTUpCisgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIHBvcnQgKDUsNyw5LDEwKQorICAgIGRtYTgJLSBETUEgIyBmb3IgRVMtMTY4OCBjaGlwICgwLDEsMykKKyAgICBkbWExCS0gRE1BICMgZm9yIEdGMSBjaGlwICgxLDMsNSw2LDcpCisgICAgam95c3RpY2tfZGFjIC0gMCB0byAzMSwgKDAuNTlWLTQuNTJWIG9yIDAuMzg5Vi0yLjk4VikKKyAgICB2b2ljZXMJLSBHRjEgdm9pY2VzIGxpbWl0ICgxNC0zMikKKyAgICBwY21fdm9pY2VzCS0gcmVzZXJ2ZWQgUENNIHZvaWNlcworCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZSAod2l0aG91dCBNUFUtNDAxIHBvcnQpLgorCisgIE1vZHVsZSBzbmQtZ3VzbWF4CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEdyYXZpcyBVbHRyYVNvdW5kIE1BWCBzb3VuZCBjYXJkLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgR0YxIGNoaXAgKDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgR0YxIGNoaXAgKDMsNSw5LDExLDEyLDE1KQorICAgIGRtYTEJLSBETUEgIyBmb3IgR0YxIGNoaXAgKDEsMyw1LDYsNykKKyAgICBkbWEyCS0gRE1BICMgZm9yIEdGMSBjaGlwICgxLDMsNSw2LDcsLTE9ZGlzYWJsZSkKKyAgICBqb3lzdGlja19kYWMgLSAwIHRvIDMxLCAoMC41OVYtNC41MlYgb3IgMC4zODlWLTIuOThWKQorICAgIHZvaWNlcwktIEdGMSB2b2ljZXMgbGltaXQgKDE0LTMyKQorICAgIHBjbV92b2ljZXMJLSByZXNlcnZlZCBQQ00gdm9pY2VzCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorICAgIAorICBNb2R1bGUgc25kLWhkYS1pbnRlbAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBJbnRlbCBIRCBBdWRpbyAoSUNINiwgSUNINk0sIElDSDcpCisKKyAgICBtb2RlbAktIGZvcmNlIHRoZSBtb2RlbCBuYW1lCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIEVhY2ggY29kZWMgbWF5IGhhdmUgYSBtb2RlbCB0YWJsZSBmb3IgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgorICAgIElmIHlvdXIgbWFjaGluZSBpc24ndCBsaXN0ZWQgdGhlcmUsIHRoZSBkZWZhdWx0ICh1c3VhbGx5IG1pbmltYWwpCisgICAgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAuICBZb3UgY2FuIHBhc3MgIm1vZGVsPTxuYW1lPiIgb3B0aW9uIHRvCisgICAgc3BlY2lmeSBhIGNlcnRhaW4gbW9kZWwgaW4gc3VjaCBhIGNhc2UuICBUaGVyZSBhcmUgZGlmZmVyZW50CisgICAgbW9kZWxzIGRlcGVuZGluZyBvbiB0aGUgY29kZWMgY2hpcC4KKworCSAgTW9kZWwgbmFtZQlEZXNjcmlwdGlvbgorCSAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLQorCUFMQzg4MAorCSAgM3N0YWNrCTMtamFjayBpbiBiYWNrIGFuZCBhIGhlYWRwaG9uZSBvdXQKKwkgIDNzdGFjay1kaWdvdXQJMy1qYWNrIGluIGJhY2ssIGEgSFAgb3V0IGFuZCBhIFNQRElGIG91dAorCSAgNXN0YWNrCTUtamFjayBpbiBiYWNrLCAyLWphY2sgaW4gZnJvbnQKKwkgIDVzdGFjay1kaWdvdXQJNS1qYWNrIGluIGJhY2ssIDItamFjayBpbiBmcm9udCwgYSBTUERJRiBvdXQKKwkgIHc4MTAJCTMtamFjaworCisJQ01JOTg4MAorCSAgbWluaW1hbAkzLWphY2sgaW4gYmFjaworCSAgbWluX2ZwCTMtamFjayBpbiBiYWNrLCAyLWphY2sgaW4gZnJvbnQKKwkgIGZ1bGwJCTYtamFjayBpbiBiYWNrLCAyLWphY2sgaW4gZnJvbnQKKwkgIGZ1bGxfZGlnCTYtamFjayBpbiBiYWNrLCAyLWphY2sgaW4gZnJvbnQsIFNQRElGIEkvTworCSAgYWxsb3V0CTUtamFjayBpbiBiYWNrLCAyLWphY2sgaW4gZnJvbnQsIFNQRElGIG91dAorCisgIE1vZHVsZSBzbmQtaGRzcAorICAtLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUk1FIEhhbW1lcmZhbGwgRFNQIGF1ZGlvIGludGVyZmFjZShzKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgICBOb3RlOiBUaGUgZmlybXdhcmUgZGF0YSBjYW4gYmUgYXV0b21hdGljYWxseSBsb2FkZWQgdmlhIGhvdHBsdWcKKyAgICAgICAgICB3aGVuIENPTkZJR19GV19MT0FERVIgaXMgc2V0LiAgT3RoZXJ3aXNlLCB5b3UgbmVlZCB0byBsb2FkCisgICAgICAgICAgdGhlIGZpcm13YXJlIHZpYSBoZHNwbG9hZGVyIHV0aWxpdHkgaW5jbHVkZWQgaW4gYWxzYS10b29scworICAgICAgICAgIHBhY2thZ2UuCisgICAgICAgICAgVGhlIGZpcm13YXJlIGRhdGEgaXMgZm91bmQgaW4gYWxzYS1maXJtd2FyZSBwYWNrYWdlLgorCisgICAgTm90ZTogc25kLXBhZ2UtYWxsb2MgbW9kdWxlIGRvZXMgdGhlIGpvYiB3aGljaCBzbmQtaGFtbWVyZmFsbC1tZW0KKyAgICAgICAgICBtb2R1bGUgZGlkIGZvcm1lcmx5LiAgSXQgd2lsbCBhbGxvY2F0ZSB0aGUgYnVmZmVycyBpbiBhZHZhbmNlCisgICAgICAgICAgd2hlbiBhbnkgSERTUCBjYXJkcyBhcmUgZm91bmQuICBUbyBtYWtlIHRoZSBidWZmZXIKKyAgICAgICAgICBhbGxvY2F0aW9uIHN1cmUsIGxvYWQgc25kLXBhZ2UtYWxsb2MgbW9kdWxlIGluIHRoZSBlYXJseQorICAgICAgICAgIHN0YWdlIG9mIGJvb3Qgc2VxdWVuY2UuCisKKyAgTW9kdWxlIHNuZC1pY2UxNzEyCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFbnZ5MjQgKElDRTE3MTIpIGJhc2VkIFBDSSBzb3VuZCBjYXJkcy4KKwkJCSogTWlkaU1hbiBNIEF1ZGlvIERlbHRhIDEwMTAKKwkJCSogTWlkaU1hbiBNIEF1ZGlvIERlbHRhIDEwMTBMVAorCQkJKiBNaWRpTWFuIE0gQXVkaW8gRGVsdGEgRGlPIDI0OTYKKwkJCSogTWlkaU1hbiBNIEF1ZGlvIERlbHRhIDY2CisJCQkqIE1pZGlNYW4gTSBBdWRpbyBEZWx0YSA0NAorCQkJKiBNaWRpTWFuIE0gQXVkaW8gRGVsdGEgNDEwCisJCQkqIE1pZGlNYW4gTSBBdWRpbyBBdWRpb3BoaWxlIDI0OTYKKyAgICAgICAgICAgICAgICAgICAgICAgICogVGVycmFUZWMgRVdTIDg4TVQKKyAgICAgICAgICAgICAgICAgICAgICAgICogVGVycmFUZWMgRVdTIDg4RAorICAgICAgICAgICAgICAgICAgICAgICAgKiBUZXJyYVRlYyBFV1ggMjQvOTYKKyAgICAgICAgICAgICAgICAgICAgICAgICogVGVycmFUZWMgRE1YIDZGaXJlCisgICAgICAgICAgICAgICAgICAgICAgICAqIEhvb250ZWNoIFNvdW5kVHJhY2sgRFNQIDI0CisgICAgICAgICAgICAgICAgICAgICAgICAqIEhvb250ZWNoIFNvdW5kVHJhY2sgRFNQIDI0IFZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAqIEhvb250ZWNoIFNvdW5kVHJhY2sgRFNQIDI0IE1lZGlhIDcuMQorICAgICAgICAgICAgICAgICAgICAgICAgKiBEaWdpZ3JhbSBWWDQ0MgorCisgICAgbW9kZWwgICAgICAgLSBVc2UgdGhlIGdpdmVuIGJvYXJkIG1vZGVsLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKwkJICBkZWx0YTEwMTAsIGRpbzI0OTYsIGRlbHRhNjYsIGRlbHRhNDQsIGF1ZGlvcGhpbGUsIGRlbHRhNDEwLAorCQkgIGRlbHRhMTAxMGx0LCB2eDQ0MiwgZXd4MjQ5NiwgZXdzODhtdCwgZXdzODhtdF9uZXcsIGV3czg4ZCwKKwkJICBkbXg2ZmlyZSwgZHNwMjQsIGRzcDI0X3ZhbHVlLCBkc3AyNF83MSwgZXo4CisgICAgb21uaQktIE9tbmkgSS9PIHN1cHBvcnQgZm9yIE1pZGlNYW4gTS1BdWRpbyBEZWx0YTQ0LzY2CisgICAgY3M4NDI3X3RpbWVvdXQgLSByZXNldCB0aW1lb3V0IGZvciB0aGUgQ1M4NDI3IGNoaXAgKFMvUERJRiB0cmFuc2NpZXZlcikKKyAgICAgICAgICAgICAgICAgICAgIGluIG1zZWMgcmVzb2x1dGlvbiwgZGVmYXVsdCB2YWx1ZSBpcyA1MDAgKDAuNSBzZWMpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLiBOb3RlOiBUaGUgY29uc3VtZXIgcGFydAorICAgIGlzIG5vdCB1c2VkIHdpdGggYWxsIEVudnkyNCBiYXNlZCBjYXJkcyAoZm9yIGV4YW1wbGUgaW4gdGhlIE1pZGlNYW4gRGVsdGEKKyAgICBzZXJpZSkuCisKKyAgTW9kdWxlIHNuZC1pY2UxNzI0CisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFbnZ5MjRIVCAoVlQvSUNFMTcyNCkgYmFzZWQgUENJIHNvdW5kIGNhcmRzLgorCQkJKiBNaWRpTWFuIE0gQXVkaW8gUmV2b2x1dGlvbiA3LjEKKwkJCSogQU1QIEx0ZCBBVURJTzIwMDAKKwkJCSogVGVycmFUZWMgQXVyZW9uIFNreS01LjEsIFNwYWNlLTcuMQorCisgICAgbW9kZWwgICAgICAgLSBVc2UgdGhlIGdpdmVuIGJvYXJkIG1vZGVsLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKwkJICByZXZvNzEsIGFtcDIwMDAsIHByb2RpZ3k3MSwgYXVyZW9uNTEsIGF1cmVvbjcxLAorCQkgIGs4eDgwMAorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICBNb2R1bGUgc25kLWludGVsOHgwCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQUMnOTcgbW90aGVyYm9hcmRzIGZyb20gSW50ZWwgYW5kIGNvbXBhdGlibGVzLgorCQkJKiBJbnRlbCBpODEwLzgxMEUsIGk4MTUsIGk4MjAsIGk4MzAsIGk4NHgsIE1YNDQwCisJCQkqIFNpUyA3MDEyIChTaVMgNzM1KQorCQkJKiBOVmlkaWEgTkZvcmNlLCBORm9yY2UyCisJCQkqIEFNRCBBTUQ3NjgsIEFNRDgxMTEKKwkJCSogQUxpIG01NDU1CisKKyAgICBhYzk3X2Nsb2NrCSAgLSBBQyc5NyBjb2RlYyBjbG9jayBiYXNlICgwID0gYXV0by1kZXRlY3QpCisgICAgYWM5N19xdWlyayAgICAtIEFDJzk3IHdvcmthcm91bmQgZm9yIHN0cmFuZ2UgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdHJpbmdzIGFyZSBhY2NlcHRlZDoKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gZG9uJ3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2V0dGluZworICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUgPSBkaXNhYmxlIHRoZSBxdWlyaworICAgICAgICAgICAgICAgICAgICAgIGhwX29ubHkgPSB1c2UgaGVhZHBob25lIGNvbnRyb2wgYXMgbWFzdGVyCisgICAgICAgICAgICAgICAgICAgICAgc3dhcF9ocCA9IHN3YXAgaGVhZHBob25lIGFuZCBtYXN0ZXIgY29udHJvbHMKKyAgICAgICAgICAgICAgICAgICAgICBzd2FwX3N1cnJvdW5kID0gc3dhcCBtYXN0ZXIgYW5kIHN1cnJvdW5kIGNvbnRyb2xzCisgICAgICAgICAgICAgICAgICAgICAgYWRfc2hhcmluZyA9IGZvciBBRDE5ODUsIHR1cm4gb24gT01TIGJpdCBhbmQgdXNlIGhlYWRwaG9uZQorICAgICAgICAgICAgICAgICAgICAgIGFsY19qYWNrID0gZm9yIEFMQzY1eCwgdHVybiBvbiB0aGUgamFjayBzZW5zZSBtb2RlCisgICAgICAgICAgICAgICAgICAgICAgaW52X2VhcGQgPSBpbnZlcnRlZCBFQVBEIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgbXV0ZV9sZWQgPSBiaW5kIEVBUEQgYml0IGZvciB0dXJuaW5nIG9uL29mZiBtdXRlIExFRAorICAgICAgICAgICAgICAgICAgICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZWdlcgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAtMSwgMCwgLi4uIGFyZSBhY2NlcHRlZCwgdG9vLgorICAgIGJ1Z2d5X2lycSAgICAgLSBFbmFibGUgd29ya2Fyb3VuZCBmb3IgYnVnZ3kgaW50ZXJydXB0cyBvbiBzb21lCisgICAgICAgICAgICAgICAgICAgIG1vdGhlcmJvYXJkcyAoZGVmYXVsdCBvZmYpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBidXMtbWFzdGVyIGNoaXBzIChtYXggOCkuCisKKyAgICBOb3RlOiB0aGUgbGF0ZXN0IGRyaXZlciBzdXBwb3J0cyBhdXRvLWRldGVjdGlvbiBvZiBjaGlwIGNsb2NrLgorICAgIGlmIHlvdSBzdGlsbCBlbmNvdW50ZXIgdG9vIGZhc3QgcGxheWJhY2ssIHNwZWNpZnkgdGhlIGNsb2NrCisgICAgZXhwbGljaXRseSB2aWEgdGhlIG1vZHVsZSBvcHRpb24gImFjOTdfY2xvY2s9NDExOTQiLgorCisgICAgSm95c3RpY2svTUlESSBwb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4gIElmIHlvdXIKKyAgICBtb3RoZXJib2FyZCBoYXMgdGhlc2UgZGV2aWNlcywgdXNlIHRoZSBuczU1OCBvciBzbmQtbXB1NDAxCisgICAgbW9kdWxlcywgcmVzcGVjdGl2ZWx5LgorCisgICAgVGhlIGFjOTdfcXVpcmsgb3B0aW9uIGlzIHVzZWQgdG8gZW5hYmxlL292ZXJyaWRlIHRoZSB3b3JrYXJvdW5kCisgICAgZm9yIHNwZWNpZmljIGRldmljZXMuICBTb21lIGhhcmR3YXJlIGhhdmUgc3dhcHBlZCBvdXRwdXQgcGlucworICAgIGJldHdlZW4gTWFzdGVyIGFuZCBIZWFkcGhvbmUsIG9yIFN1cnJvdW5kLiAgVGhlIGRyaXZlciBwcm92aWRlcworICAgIHRoZSBhdXRvLWRldGVjdGlvbiBvZiBrbm93biBwcm9ibGVtYXRpYyBkZXZpY2VzLCBidXQgc29tZSBtaWdodAorICAgIGJlIHVua25vd24gb3Igd3JvbmdseSBkZXRlY3RlZC4gIEluIHN1Y2ggYSBjYXNlLCBwYXNzIHRoZSBwcm9wZXIKKyAgICB2YWx1ZSB3aXRoIHRoaXMgb3B0aW9uLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorICAgIAorICBNb2R1bGUgc25kLWludGVsOHgwbQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBJbnRlbCBJQ0ggKGk4eDApIGNoaXBzZXQgTUM5NyBtb2RlbXMuCisKKyAgICBhYzk3X2Nsb2NrCSAgLSBBQyc5NyBjb2RlYyBjbG9jayBiYXNlICgwID0gYXV0by1kZXRlY3QpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgICBOb3RlOiBUaGUgZGVmYXVsdCBpbmRleCB2YWx1ZSBvZiB0aGlzIG1vZHVsZSBpcyAtMiwgaS5lLiB0aGUgZmlyc3QKKyAgICAgICAgICBzbG90IGlzIGV4Y2x1ZGVkLgorCisgIE1vZHVsZSBzbmQtaW50ZXJ3YXZlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEdyYXZpcyBVbHRyYVNvdW5kIFBuUCwgRHluYXNvbmljIDMtRC9Qcm8sIFNUQiBTb3VuZCBSYWdlIDMyCisgICAgYW5kIG90aGVyIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEFNRCBJbnRlcldhdmUgKHRtKSBjaGlwLgorICAKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBJbnRlcldhdmUgY2hpcCAoMHgyMTAsMHgyMjAsMHgyMzAsMHgyNDAsMHgyNTAsMHgyNjApCisgICAgaXJxCQktIElSUSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMyw1LDksMTEsMTIsMTUpCisgICAgZG1hMQktIERNQSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMCwxLDMsNSw2LDcpCisgICAgZG1hMgktIERNQSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMCwxLDMsNSw2LDcsLTE9ZGlzYWJsZSkKKyAgICBqb3lzdGlja19kYWMgLSAwIHRvIDMxLCAoMC41OVYtNC41MlYgb3IgMC4zODlWLTIuOThWKQorICAgIG1pZGkJLSAxID0gTUlESSBVQVJUIGVuYWJsZSwgMCA9IE1JREkgVUFSVCBkaXNhYmxlIChkZWZhdWx0KQorICAgIHBjbV92b2ljZXMJLSByZXNlcnZlZCBQQ00gdm9pY2VzIGZvciB0aGUgc3ludGhlc2l6ZXIgKGRlZmF1bHQgMikKKyAgICBlZmZlY3QJLSAxID0gSW50ZXJXYXZlIGVmZmVjdHMgZW5hYmxlIChkZWZhdWx0IDApOworICAgICAgICAgICAgICAgICAgcmVxdWlyZXMgOCB2b2ljZXMKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBhdXRvcHJvYmUgYW5kIElTQSBQblAuCisKKyAgTW9kdWxlIHNuZC1pbnRlcndhdmUtc3RiCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBVbHRyYVNvdW5kIDMyLVBybyAoc291bmQgY2FyZCBmcm9tIFNUQiB1c2VkIGJ5IENvbXBhcSkKKyAgICBhbmQgb3RoZXIgc291bmQgY2FyZHMgYmFzZWQgb24gQU1EIEludGVyV2F2ZSAodG0pIGNoaXAgd2l0aCBURUE2MzMwVAorICAgIGNpcmN1aXQgZm9yIGV4dGVuZGVkIGNvbnRyb2wgb2YgYmFzcywgdHJlYmxlIGFuZCBtYXN0ZXIgdm9sdW1lLgorICAKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBJbnRlcldhdmUgY2hpcCAoMHgyMTAsMHgyMjAsMHgyMzAsMHgyNDAsMHgyNTAsMHgyNjApCisgICAgcG9ydF90YwktIHRvbmUgY29udHJvbCAoaTJjIGJ1cykgcG9ydCAjIGZvciBURUE2MzMwVCBjaGlwICgweDM1MCwweDM2MCwweDM3MCwweDM4MCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIEludGVyV2F2ZSBjaGlwICgzLDUsOSwxMSwxMiwxNSkKKyAgICBkbWExCS0gRE1BICMgZm9yIEludGVyV2F2ZSBjaGlwICgwLDEsMyw1LDYsNykKKyAgICBkbWEyCS0gRE1BICMgZm9yIEludGVyV2F2ZSBjaGlwICgwLDEsMyw1LDYsNywtMT1kaXNhYmxlKQorICAgIGpveXN0aWNrX2RhYyAtIDAgdG8gMzEsICgwLjU5Vi00LjUyViBvciAwLjM4OVYtMi45OFYpCisgICAgbWlkaQktIDEgPSBNSURJIFVBUlQgZW5hYmxlLCAwID0gTUlESSBVQVJUIGRpc2FibGUgKGRlZmF1bHQpCisgICAgcGNtX3ZvaWNlcwktIHJlc2VydmVkIFBDTSB2b2ljZXMgZm9yIHRoZSBzeW50aGVzaXplciAoZGVmYXVsdCAyKQorICAgIGVmZmVjdAktIDEgPSBJbnRlcldhdmUgZWZmZWN0cyBlbmFibGUgKGRlZmF1bHQgMCk7CisgICAgICAgICAgICAgICAgICByZXF1aXJlcyA4IHZvaWNlcworCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIGF1dG9wcm9iZSBhbmQgSVNBIFBuUC4KKworICBNb2R1bGUgc25kLWtvcmcxMjEyCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgS29yZyAxMjEyIElPIFBDSSBjYXJkCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICBNb2R1bGUgc25kLW1hZXN0cm8zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQWxsZWdyby9NYWVzdHJvMyBjaGlwcworCisgICAgZXh0ZXJuYWxfYW1wICAgICAtIGVuYWJsZSBleHRlcm5hbCBhbXAgKGVuYWJsZWQgYnkgZGVmYXVsdCkKKyAgICBhbXBfZ3BpbyAgICAgICAgIC0gR1BJTyBwaW4gbnVtYmVyIGZvciBleHRlcm5hbCBhbXAgKDAtMTUpIG9yCisgICAgICAgICAgICAgICAgICAgICAgIC0xIGZvciBkZWZhdWx0IHBpbiAoOCBmb3IgYWxsZWdybywgMSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzKSAKKworICAgIE1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNoaXBzIChtYXggOCkuCisKKyAgICBOb3RlOiB0aGUgYmluZGluZyBvZiBhbXBsaWZpZXIgaXMgZGVwZW5kZW50IG9uIGhhcmR3YXJlLgorICAgIElmIHRoZXJlIGlzIG5vIHNvdW5kIGV2ZW4gdGhvdWdoIGFsbCBjaGFubmVscyBhcmUgdW5tdXRlZCwgdHJ5IHRvCisgICAgc3BlY2lmeSBvdGhlciBncGlvIGNvbm5lY3Rpb24gdmlhIGFtcF9ncGlvIG9wdGlvbi4gCisgICAgRm9yIGV4YW1wbGUsIGEgUGFuYXNvbmljIG5vdGVib29rIG1pZ2h0IG5lZWQgImFtcF9ncGlvPTB4MGQiCisgICAgb3B0aW9uLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtbWl4YXJ0CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIERpZ2lncmFtIG1pWGFydDggc291bmQgY2FyZHMuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisgICAgTm90ZTogT25lIG1pWGFydDggYm9hcmQgd2lsbCBiZSByZXByZXNlbnRlZCBhcyA0IGFsc2EgY2FyZHMuCisgICAgICAgICAgU2VlIE1JWEFSVC50eHQgZm9yIGRldGFpbHMuCisKKyAgICBXaGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHRoZSBob3RwbHVnIGZpcm13YXJlCisgICAgaXMgc3VwcG9ydGVkLCB0aGUgZmlybXdhcmUgZGF0YSBpcyBsb2FkZWQgdmlhIGhvdHBsdWcgYXV0b21hdGljYWxseS4KKyAgICBJbnN0YWxsIHRoZSBuZWNlc3NhcnkgZmlybXdhcmUgZmlsZXMgaW4gYWxzYS1maXJtd2FyZSBwYWNrYWdlLgorICAgIFdoZW4gbm8gaG90cGx1ZyBmdyBsb2FkZXIgaXMgYXZhaWxhYmxlLCB5b3UgbmVlZCB0byBsb2FkIHRoZQorICAgIGZpcm13YXJlIHZpYSBtaXhhcnRsb2FkZXIgdXRpbGl0eSBpbiBhbHNhLXRvb2xzIHBhY2thZ2UuCisKKyAgTW9kdWxlIHNuZC1tcHU0MDEKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgTVBVLTQwMSBVQVJUIGRldmljZXMuCisKKyAgICBwb3J0CS0gcG9ydCBudW1iZXIgb3IgLTEgKGRpc2FibGUpCisgICAgaXJxCQktIElSUSBudW1iZXIgb3IgLTEgKGRpc2FibGUpCisgICAgcG5wCQktIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBkZXZpY2VzIChtYXggOCkgYW5kIFBuUC4KKyAgICAKKyAgTW9kdWxlIHNuZC1tdHBhdgorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIE1PVFUgTWlkaVRpbWVQaWVjZSBBViBtdWx0aXBvcnQgTUlESSAob24gdGhlIHBhcmFsbGVsCisgICAgcG9ydCkuCisKKyAgICBwb3J0CS0gSS9PIHBvcnQgIyBmb3IgTVRQQVYgKDB4Mzc4LDB4Mjc4LCBkZWZhdWx0PTB4Mzc4KQorICAgIGlycQkJLSBJUlEgIyBmb3IgTVRQQVYgKDcsNSwgZGVmYXVsdD03KQorICAgIGh3cG9ydHMJLSBudW1iZXIgb2Ygc3VwcG9ydGVkIGhhcmR3YXJlIHBvcnRzLCBkZWZhdWx0PTguCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIG9ubHkgMSBjYXJkLiAgVGhpcyBtb2R1bGUgaGFzIG5vIGVuYWJsZSBvcHRpb24uCisKKyAgTW9kdWxlIHNuZC1ubTI1NgorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIE5lb01hZ2ljIE5NMjU2QVYvWlggY2hpcHMKKworICAgIHBsYXliYWNrX2J1ZnNpemUgLSBtYXggcGxheWJhY2sgZnJhbWUgc2l6ZSBpbiBrQiAoNC0xMjhrQikKKyAgICBjYXB0dXJlX2J1ZnNpemUgIC0gbWF4IGNhcHR1cmUgZnJhbWUgc2l6ZSBpbiBrQiAoNC0xMjhrQikKKyAgICBmb3JjZV9hYzk3ICAgICAgIC0gMCBvciAxIChkaXNhYmxlZCBieSBkZWZhdWx0KQorICAgIGJ1ZmZlcl90b3AgICAgICAgLSBzcGVjaWZ5IGJ1ZmZlciB0b3AgYWRkcmVzcworICAgIHVzZV9jYWNoZSAgICAgICAgLSAwIG9yIDEgKGRpc2FibGVkIGJ5IGRlZmF1bHQpCisgICAgdmFpb19oYWNrICAgICAgICAtIGFsaWFzIGJ1ZmZlcl90b3A9MHgyNWE4MDAKKyAgICByZXNldF93b3JrYXJvdW5kIC0gZW5hYmxlIEFDOTcgUkVTRVQgd29ya2Fyb3VuZCBmb3Igc29tZSBsYXB0b3BzCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgICAgTm90ZTogb24gc29tZSBub3RlYm9va3MgdGhlIGJ1ZmZlciBhZGRyZXNzIGNhbm5vdCBiZSBkZXRlY3RlZAorICAgIGF1dG9tYXRpY2FsbHksIG9yIGNhdXNlcyBoYW5nLXVwIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAgICBJbiBzdWNoIGEgY2FzZSwgc3BlY2lmeSB0aGUgYnVmZmVyIHRvcCBhZGRyZXNzIGV4cGxpY2l0eSB2aWEKKyAgICBidWZmZXJfdG9wIG9wdGlvbi4KKyAgICBGb3IgZXhhbXBsZSwKKyAgICAgIFNvbnkgRjI1MDogYnVmZmVyX3RvcD0weDI1YTgwMAorICAgICAgU29ueSBGMjcwOiBidWZmZXJfdG9wPTB4MjcyODAwCisgICAgVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IGFjOTcgY29kZWMuICBJdCdzIHBvc3NpYmxlIHRvIGZvcmNlCisgICAgdG8gaW5pdGlhbGl6ZS91c2UgYWM5NyBhbHRob3VnaCBpdCdzIG5vdCBkZXRlY3RlZC4gIEluIHN1Y2ggYQorICAgIGNhc2UsIHVzZSBmb3JjZV9hYzk3PTEgb3B0aW9uIC0gYnV0ICpOTyogZ3VhcmFudGVlIHdoZXRoZXIgaXQKKyAgICB3b3JrcyEKKworICAgIE5vdGU6IFRoZSBOTTI1NiBjaGlwIGNhbiBiZSBsaW5rZWQgaW50ZXJuYWxseSB3aXRoIG5vbi1BQzk3CisgICAgY29kZWNzLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgb25seSB0aGUgQUM5NyBjb2RlYywgYW5kIHdvbid0IHdvcmsKKyAgICB3aXRoIG1hY2hpbmVzIHdpdGggb3RoZXIgKG1vc3QgbGlrZWx5IENTNDIzeCBvciBPUEwzU0F4KSBjaGlwcywKKyAgICBldmVuIHRob3VnaCB0aGUgZGV2aWNlIGlzIGRldGVjdGVkIGluIGxzcGNpLiAgSW4gc3VjaCBhIGNhc2UsIHRyeQorICAgIG90aGVyIGRyaXZlcnMsIGUuZy4gc25kLWNzNDIzMiBvciBzbmQtb3BsM3NhMi4gIFNvbWUgaGFzIElTQS1QblAKKyAgICBidXQgc29tZSBkb2Vzbid0IGhhdmUgSVNBIFBuUC4gIFlvdSdsbCBuZWVkIHRvIHNwZWljZnkgaXNhcG5wPTAKKyAgICBhbmQgcHJvcGVyIGhhcmR3YXJlIHBhcmFtZXRlcnMgaW4gdGhlIGNhc2Ugd2l0aG91dCBJU0EgUG5QLgorCisgICAgTm90ZTogc29tZSBsYXB0b3BzIG5lZWQgYSB3b3JrYXJvdW5kIGZvciBBQzk3IFJFU0VULiAgRm9yIHRoZQorICAgIGtub3duIGhhcmR3YXJlIGxpa2UgRGVsbCBMYXRpdHVkZSBMUyBhbmQgU29ueSBQQ0ctRjMwNSwgdGhpcworICAgIHdvcmthcm91bmQgaXMgZW5hYmxlZCBhdXRvbWF0aWNhbGx5LiAgRm9yIG90aGVyIGxhcHRvcHMgd2l0aCBhCisgICAgaGFyZCBmcmVlemUsIHlvdSBjYW4gdHJ5IHJlc2V0X3dvcmthcm91bmQ9MSBvcHRpb24uCisKKyAgICBOb3RlOiBUaGlzIGRyaXZlciBpcyByZWFsbHkgY3JhcHB5LiAgSXQncyBhIHBvcnRpbmcgZnJvbSB0aGUKKyAgICBPU1MgZHJpdmVyLCB3aGljaCBpcyBhIHJlc3VsdCBvZiBibGFjay1tYWdpYyByZXZlcnNlIGVuZ2luZWVyaW5nLgorICAgIFRoZSBkZXRlY3Rpb24gb2YgY29kZWMgd2lsbCBmYWlsIGlmIHRoZSBkcml2ZXIgaXMgbG9hZGVkICphZnRlcioKKyAgICBYLXNlcnZlciBhcyBkZXNjcmliZWQgYWJvdmUuICBZb3UgbWlnaHQgYmUgYWJsZSB0byBmb3JjZSB0byBsb2FkCisgICAgdGhlIG1vZHVsZSwgYnV0IGl0IG1heSByZXN1bHQgaW4gaGFuZy11cC4gICBIZW5jZSwgbWFrZSBzdXJlIHRoYXQKKyAgICB5b3UgbG9hZCB0aGlzIG1vZHVsZSAqYmVmb3JlKiBYIGlmIHlvdSBlbmNvdW50ZXIgdGhpcyBraW5kIG9mCisgICAgcHJvYmxlbS4KKworICBNb2R1bGUgc25kLW9wbDNzYTIKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFlhbWFoYSBPUEwzLVNBMi9TQTMgc291bmQgY2FyZHMuCisKKyAgICBwb3J0CS0gY29udHJvbCBwb3J0ICMgZm9yIE9QTDMtU0EgY2hpcCAoMHgzNzApCisgICAgc2JfcG9ydAktIFNCIHBvcnQgIyBmb3IgT1BMMy1TQSBjaGlwICgweDIyMCwweDI0MCkKKyAgICB3c3NfcG9ydAktIFdTUyBwb3J0ICMgZm9yIE9QTDMtU0EgY2hpcCAoMHg1MzAsMHhlODAsMHhmNDAsMHg2MDQpCisgICAgbWlkaV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIFVBUlQgKDB4MzAwLDB4MzMwKSwgLTEgPSBkaXNhYmxlCisgICAgZm1fcG9ydAktIEZNIHBvcnQgIyBmb3IgT1BMMy1TQSBjaGlwICgweDM4OCksIC0xID0gZGlzYWJsZQorICAgIGlycQkJLSBJUlEgIyBmb3IgT1BMMy1TQSBjaGlwICg1LDcsOSwxMCkKKyAgICBkbWExCS0gZmlyc3QgRE1BICMgZm9yIFlhbWFoYSBPUEwzLVNBIGNoaXAgKDAsMSwzKQorICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIFlhbWFoYSBPUEwzLVNBIGNoaXAgKDAsMSwzKSwgLTEgPSBkaXNhYmxlCisgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgSVNBIFBuUC4gVGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydAorICAgIGF1dG9wcm9iZSAoaWYgSVNBIFBuUCBpcyBub3QgdXNlZCkgdGh1cyBhbGwgcG9ydHMgbXVzdCBiZSBzcGVjaWZpZWQhISEKKyAgICAKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKKyAgTW9kdWxlIHNuZC1vcHRpOTJ4LWFkMTg0OAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIE9QVGkgODJjOTJ4IGFuZCBBbmFsb2cgRGV2aWNlcyBBRDE4NDggY2hpcHMuCisgICAgTW9kdWxlIHdvcmtzIHdpdGggT0FLIE1vemFydCBjYXJkcyBhcyB3ZWxsLgorICAgIAorICAgIHBvcnQgICAgICAtIHBvcnQgIyBmb3IgV1NTIGNoaXAgKDB4NTMwLDB4ZTgwLDB4ZjQwLDB4NjA0KQorICAgIG1wdV9wb3J0ICAtIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUICgweDMwMCwweDMxMCwweDMyMCwweDMzMCkKKyAgICBmbV9wb3J0ICAgLSBwb3J0ICMgZm9yIE9QTDMgZGV2aWNlICgweDM4OCkKKyAgICBpcnEgICAgICAgLSBJUlEgIyBmb3IgV1NTIGNoaXAgKDUsNyw5LDEwLDExKQorICAgIG1wdV9pcnEgICAtIElSUSAjIGZvciBNUFUtNDAxIFVBUlQgKDUsNyw5LDEwKQorICAgIGRtYTEgICAgICAtIGZpcnN0IERNQSAjIGZvciBXU1MgY2hpcCAoMCwxLDMpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvbmx5IG9uZSBjYXJkLCBhdXRvcHJvYmUgYW5kIFBuUC4KKworICBNb2R1bGUgc25kLW9wdGk5MngtY3M0MjMxCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gT1BUaSA4MmM5MnggYW5kIENyeXN0YWwgQ1M0MjMxIGNoaXBzLgorICAgIAorICAgIHBvcnQgICAgICAtIHBvcnQgIyBmb3IgV1NTIGNoaXAgKDB4NTMwLDB4ZTgwLDB4ZjQwLDB4NjA0KQorICAgIG1wdV9wb3J0ICAtIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUICgweDMwMCwweDMxMCwweDMyMCwweDMzMCkKKyAgICBmbV9wb3J0ICAgLSBwb3J0ICMgZm9yIE9QTDMgZGV2aWNlICgweDM4OCkKKyAgICBpcnEgICAgICAgLSBJUlEgIyBmb3IgV1NTIGNoaXAgKDUsNyw5LDEwLDExKQorICAgIG1wdV9pcnEgICAtIElSUSAjIGZvciBNUFUtNDAxIFVBUlQgKDUsNyw5LDEwKQorICAgIGRtYTEgICAgICAtIGZpcnN0IERNQSAjIGZvciBXU1MgY2hpcCAoMCwxLDMpCisgICAgZG1hMiAgICAgIC0gc2Vjb25kIERNQSAjIGZvciBXU1MgY2hpcCAoMCwxLDMpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvbmx5IG9uZSBjYXJkLCBhdXRvcHJvYmUgYW5kIFBuUC4KKworICBNb2R1bGUgc25kLW9wdGk5M3gKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIE9QVGkgODJjOTN4IGNoaXBzLgorICAgIAorICAgIHBvcnQgICAgICAtIHBvcnQgIyBmb3IgV1NTIGNoaXAgKDB4NTMwLDB4ZTgwLDB4ZjQwLDB4NjA0KQorICAgIG1wdV9wb3J0ICAtIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUICgweDMwMCwweDMxMCwweDMyMCwweDMzMCkKKyAgICBmbV9wb3J0ICAgLSBwb3J0ICMgZm9yIE9QTDMgZGV2aWNlICgweDM4OCkKKyAgICBpcnEgICAgICAgLSBJUlEgIyBmb3IgV1NTIGNoaXAgKDUsNyw5LDEwLDExKQorICAgIG1wdV9pcnEgICAtIElSUSAjIGZvciBNUFUtNDAxIFVBUlQgKDUsNyw5LDEwKQorICAgIGRtYTEgICAgICAtIGZpcnN0IERNQSAjIGZvciBXU1MgY2hpcCAoMCwxLDMpCisgICAgZG1hMiAgICAgIC0gc2Vjb25kIERNQSAjIGZvciBXU1MgY2hpcCAoMCwxLDMpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvbmx5IG9uZSBjYXJkLCBhdXRvcHJvYmUgYW5kIFBuUC4KKworICBNb2R1bGUgc25kLXBvd2VybWFjIChvbiBwcGMgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFBvd2VyTWFjLCBpTWFjIGFuZCBpQm9vayBvbi1ib2FyZCBzb3VuZGNoaXBzCisKKyAgICBlbmFibGVfYmVlcCAgICAgLSBlbmFibGUgYmVlcCB1c2luZyBQQ00gKGVuYWJsZWQgYXMgZGVmYXVsdCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYSBjaGlwLgorCisgICAgTm90ZTogdGhlIGRyaXZlciBtYXkgaGF2ZSBwcm9ibGVtcyByZWdhcmRpbmcgZW5kaWFuZXNzLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtcm1lMzIKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBSTUUgRGlnaTMyLCBEaWdpMzIgUHJvIGFuZCBEaWdpMzIvOCAoU2VrJ2QgUHJvZGlmMzIsIAorICAgIFByb2RpZjk2IGFuZCBQcm9kaWYgR29sZCkgc291bmQgY2FyZHMuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICBNb2R1bGUgc25kLXJtZTk2CisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUk1FIERpZ2k5NiwgRGlnaTk2LzggYW5kIERpZ2k5Ni84IFBSTy9QQUQvUFNUIHNvdW5kIGNhcmRzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1ybWU5NjUyCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBSTUUgRGlnaTk2NTIgKEhhbW1lcmZhbGwsIEhhbW1lcmZhbGwtTGlnaHQpIHNvdW5kIGNhcmRzLgorCisgICAgcHJlY2lzZV9wdHIJLSBFbmFibGUgcHJlY2lzZSBwb2ludGVyIChkb2Vzbid0IHdvcmsgcmVsaWFibHkpLgorCQkgIChkZWZhdWx0ID0gMCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgICAgTm90ZTogc25kLXBhZ2UtYWxsb2MgbW9kdWxlIGRvZXMgdGhlIGpvYiB3aGljaCBzbmQtaGFtbWVyZmFsbC1tZW0KKyAgICAgICAgICBtb2R1bGUgZGlkIGZvcm1lcmx5LiAgSXQgd2lsbCBhbGxvY2F0ZSB0aGUgYnVmZmVycyBpbiBhZHZhbmNlCisgICAgICAgICAgd2hlbiBhbnkgUk1FOTY1MiBjYXJkcyBhcmUgZm91bmQuICBUbyBtYWtlIHRoZSBidWZmZXIKKyAgICAgICAgICBhbGxvY2F0aW9uIHN1cmUsIGxvYWQgc25kLXBhZ2UtYWxsb2MgbW9kdWxlIGluIHRoZSBlYXJseQorICAgICAgICAgIHN0YWdlIG9mIGJvb3Qgc2VxdWVuY2UuCisKKyAgTW9kdWxlIHNuZC1zYTExeHgtdWRhMTM0MSAob24gYXJtIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBQaGlsaXBzIFVEQTEzNDFUUyBvbiBDb21wYXEgaVBBUSBIMzYwMCBzb3VuZCBjYXJkLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIG9ubHkgb25lIGNhcmQuCisgICAgTW9kdWxlIGhhcyBubyBlbmFibGUgYW5kIGluZGV4IG9wdGlvbnMuCisKKyAgTW9kdWxlIHNuZC1zYjgKKyAgLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgOC1iaXQgU291bmRCbGFzdGVyIGNhcmRzOiBTb3VuZEJsYXN0ZXIgMS4wLAorCQkJCQkgU291bmRCbGFzdGVyIDIuMCwKKwkJCQkJIFNvdW5kQmxhc3RlciBQcm8KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIFNCIERTUCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIFNCIERTUCBjaGlwICg1LDcsOSwxMCkKKyAgICBkbWE4CS0gRE1BICMgZm9yIFNCIERTUCBjaGlwICgxLDMpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorICAgIAorICBNb2R1bGUgc25kLXNiMTYgYW5kIHNuZC1zYmF3ZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciAxNi1iaXQgU291bmRCbGFzdGVyIGNhcmRzOiBTb3VuZEJsYXN0ZXIgMTYgKFBuUCksCisJCQkJCSAgU291bmRCbGFzdGVyIEFXRSAzMiAoUG5QKSwKKwkJCQkJICBTb3VuZEJsYXN0ZXIgQVdFIDY0IFBuUAorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgU0IgRFNQIDQueCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUICgweDMwMCwweDMzMCksIC0xID0gZGlzYWJsZQorICAgIGF3ZV9wb3J0CS0gYmFzZSBwb3J0ICMgZm9yIEVNVTgwMDAgc3ludGhlc2l6ZXIgKDB4NjIwLDB4NjQwLDB4NjYwKQorICAgICAgICAgICAgICAgICAgIChzbmQtc2Jhd2UgbW9kdWxlIG9ubHkpCisgICAgaXJxCQktIElSUSAjIGZvciBTQiBEU1AgNC54IGNoaXAgKDUsNyw5LDEwKQorICAgIGRtYTgJLSA4LWJpdCBETUEgIyBmb3IgU0IgRFNQIDQueCBjaGlwICgwLDEsMykKKyAgICBkbWExNgktIDE2LWJpdCBETUEgIyBmb3IgU0IgRFNQIDQueCBjaGlwICg1LDYsNykKKyAgICBtaWNfYWdjCS0gTWljIEF1dG8tR2Fpbi1Db250cm9sIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgY3NwCQktIEFTUC9DU1AgY2hpcCBzdXBwb3J0IC0gMCA9IGRpc2FibGUgKGRlZmF1bHQpLCAxID0gZW5hYmxlCisgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBJU0EgUG5QLgorCisgICAgTm90ZTogVG8gdXNlIFZpYnJhMTZYIGNhcmRzIGluIDE2LWJpdCBoYWxmIGR1cGxleCBtb2RlLCB5b3UgbXVzdAorICAgICAgICAgIGRpc2FibGUgMTZiaXQgRE1BIHdpdGggZG1hMTYgPSAtMSBtb2R1bGUgcGFyYW1ldGVyLgorICAgICAgICAgIEFsc28sIGFsbCBTb3VuZCBCbGFzdGVyIDE2IHR5cGUgY2FyZHMgY2FuIG9wZXJhdGUgaW4gMTYtYml0CisgICAgICAgICAgaGFsZiBkdXBsZXggbW9kZSB0aHJvdWdoIDgtYml0IERNQSBjaGFubmVsIGJ5IGRpc2FibGluZyB0aGVpcgorICAgICAgICAgIDE2LWJpdCBETUEgY2hhbm5lbC4KKyAgICAKKyAgTW9kdWxlIHNuZC1zZ2FsYXh5CisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBBenRlY2ggU291bmQgR2FsYXh5IHNvdW5kIGNhcmQuCisKKyAgICBzYnBvcnQJLSBQb3J0ICMgZm9yIFNCMTYgaW50ZXJmYWNlICgweDIyMCwweDI0MCkKKyAgICB3c3Nwb3J0CS0gUG9ydCAjIGZvciBXU1MgaW50ZXJmYWNlICgweDUzMCwweGU4MCwweGY0MCwweDYwNCkKKyAgICBpcnEJCS0gSVJRICMgKDcsOSwxMCwxMSkKKyAgICBkbWExCS0gRE1BICMKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtc3NjYXBlCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEVOU09OSVEgU291bmRTY2FwZSBQblAgY2FyZHMuCisKKyAgICBwb3J0CS0gUG9ydCAjIChQblAgc2V0dXApCisgICAgaXJxCQktIElSUSAjIChQblAgc2V0dXApCisgICAgbXB1X2lycQktIE1QVS00MDEgSVJRICMgKFBuUCBzZXR1cCkKKyAgICBkbWEJCS0gRE1BICMgKFBuUCBzZXR1cCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiAgSVNBIFBuUCBtdXN0IGJlIGVuYWJsZWQuCisgICAgWW91IG5lZWQgc3NjYXBlX2N0bCB0b29sIGluIGFsc2EtdG9vbHMgcGFja2FnZSBmb3IgbG9hZGluZworICAgIHRoZSBtaWNyb2NvZGUuCisKKyAgTW9kdWxlIHNuZC1zdW4tYW1kNzkzMCAob24gc3BhcmMgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQU1ENzkzMCBzb3VuZCBjaGlwcyBmb3VuZCBvbiBTcGFyY3MuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICBNb2R1bGUgc25kLXN1bi1jczQyMzEgKG9uIHNwYXJjIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQ1M0MjMxIHNvdW5kIGNoaXBzIGZvdW5kIG9uIFNwYXJjcy4KKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtd2F2ZWZyb250CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFR1cnRsZSBCZWFjaCBNYXVpLCBUcm9wZXogYW5kIFRyb3Bleisgc291bmQgY2FyZHMuCisKKyAgICBjczQyMzJfcGNtX3BvcnQgLSBQb3J0ICMgZm9yIENTNDIzMiBQQ00gaW50ZXJmYWNlLgorICAgIGNzNDIzMl9wY21faXJxICAtIElSUSAjIGZvciBDUzQyMzIgUENNIGludGVyZmFjZSAoNSw3LDksMTEsMTIsMTUpLgorICAgIGNzNDIzMl9tcHVfcG9ydCAtIFBvcnQgIyBmb3IgQ1M0MjMyIE1QVS00MDEgaW50ZXJmYWNlLgorICAgIGNzNDIzMl9tcHVfaXJxICAtIElSUSAjIGZvciBDUzQyMzIgTVBVLTQwMSBpbnRlcmZhY2UgKDksMTEsMTIsMTUpLgorICAgIHVzZV9jczQyMzJfbWlkaSAtIFVzZSBDUzQyMzIgTVBVLTQwMSBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAoaW5hY2Nlc3NpYmx5IGxvY2F0ZWQgaW5zaWRlIHlvdXIgY29tcHV0ZXIpCisgICAgaWNzMjExNV9wb3J0ICAgIC0gUG9ydCAjIGZvciBJQ1MyMTE1CisgICAgaWNzMjExNV9pcnEgICAgIC0gSVJRICMgZm9yIElDUzIxMTUKKyAgICBmbV9wb3J0ICAgICAgICAgLSBGTSBPUEwtMyBQb3J0ICMKKyAgICBkbWExICAgICAgICAgICAgLSBETUExICMgZm9yIENTNDIzMiBQQ00gaW50ZXJmYWNlLgorICAgIGRtYTIgICAgICAgICAgICAtIERNQTIgIyBmb3IgQ1M0MjMyIFBDTSBpbnRlcmZhY2UuCisgICAgaXNhcG5wICAgICAgICAgIC0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBJU0EgUG5QLgorCisgIE1vZHVsZSBzbmQtc29uaWN2aWJlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUzMgU29uaWNWaWJlcyBQQ0kgc291bmQgY2FyZHMuCisJCQkqIFBJTkUgU2NodWJlcnQgMzIgUENJCisKKyAgICByZXZlcmIgICAgLSBSZXZlcmIgRW5hYmxlIC0gMSA9IGVuYWJsZSwgMCA9IGRpc2FibGUgKGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAtIFNvdW5kQ2FyZCBtdXN0IGhhdmUgb25ib2FyZCBTUkFNIGZvciB0aGlzLgorICAgIG1nZSAgICAgICAtIE1pYyBHYWluIEVuYWJsZSAtIDEgPSBlbmFibGUsIDAgPSBkaXNhYmxlIChkZWZhdWx0KQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgTW9kdWxlIHNuZC1zZXJpYWwtdTE2NTUwCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBVQVJUMTY1NTBBIHNlcmlhbCBNSURJIHBvcnRzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgVUFSVDE2NTUwQSBjaGlwCisgICAgaXJxCQktIElSUSAjIGZvciBVQVJUMTY1NTBBIGNoaXAsIC0xID0gcG9sbCBtb2RlCisgICAgc3BlZWQJLSBzcGVlZCBpbiBiYXVkcyAoOTYwMCwxOTIwMCwzODQwMCw1NzYwMCwxMTUyMDApCisJCSAgMzg0MDAgPSBkZWZhdWx0CisgICAgYmFzZQktIGJhc2UgZm9yIGRpdmlzb3IgaW4gYmF1ZHMgKDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwKQorCQkgIDExNTIwMCA9IGRlZmF1bHQKKyAgICBvdXRzCS0gbnVtYmVyIG9mIE1JREkgcG9ydHMgaW4gYSBzZXJpYWwgcG9ydCAoMS00KQorCQkgIDEgPSBkZWZhdWx0CisgICAgYWRhcHRvcgktIFR5cGUgb2YgYWRhcHRvci4KKyAgICAgICAgICAgICAgICAgIDAgPSBTb3VuZGNhbnZhcywgMSA9IE1TLTEyNFQsIDIgPSBNUy0xMjRXIFMvQSwKKwkJICAzID0gTVMtMTI0VyBNL0IsIDQgPSBHZW5lcmljCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCisgICAgdGh1cyB0aGUgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIG9wdGlvbnMgYXJlIG9wdGlvbmFsLgorCisgIE1vZHVsZSBzbmQtdHJpZGVudAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVHJpZGVudCA0RFdhdmUgRFgvTlggc291bmQgY2FyZHMuCisJCQkqIEJlc3QgVW5pb24gIE1pc3MgTWVsb2R5IDREV2F2ZSBQQ0kKKwkJCSogSElTICA0RFdhdmUgUENJCisJCQkqIFdhcnBzcGVlZCAgT05TcGVlZCA0RFdhdmUgUENJCisJCQkqIEF6VGVjaCAgUENJIDY0LVEzRAorCQkJKiBBZGRvbmljcyAgU1YgNzUwCisJCQkqIENISUMgIFRydWUgU291bmQgNER3YXZlCisJCQkqIFNoYXJrICBQcmVkYXRvcjRELVBDSQorCQkJKiBKYXRvbiAgU29uaWNXYXZlIDRECisKKyAgICBwY21fY2hhbm5lbHMgICAtIG1heCBjaGFubmVscyAodm9pY2VzKSByZXNlcnZlZCBmb3IgUENNCisgICAgd2F2ZXRhYmxlX3NpemUgLSBtYXggd2F2ZXRhYmxlIHNpemUgaW4ga0IgKDQtP2tiKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLXVzYi1hdWRpbworICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBVU0IgYXVkaW8gYW5kIFVTQiBNSURJIGRldmljZXMuCisKKyAgICB2aWQgICAgICAgICAgICAgLSBWZW5kb3IgSUQgZm9yIHRoZSBkZXZpY2UgKG9wdGlvbmFsKQorICAgIHBpZCAgICAgICAgICAgICAtIFByb2R1Y3QgSUQgZm9yIHRoZSBkZXZpY2UgKG9wdGlvbmFsKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBob3RwbHVnZ2luZy4KKworICBNb2R1bGUgc25kLXVzYi11c3gyeQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUYXNjYW0gVVNCIFVTLTEyMiwgVVMtMjI0IGFuZCBVUy00MjggZGV2aWNlcy4KKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIGF1dG9wcm9iZSBhbmQgaG90cGx1Z2dpbmcuCisKKyAgICBOb3RlOiB5b3UgbmVlZCB0byBsb2FkIHRoZSBmaXJtd2FyZSB2aWEgdXN4Mnlsb2FkZXIgdXRpbGl0eSBpbmNsdWRlZAorICAgICAgICAgIGluIGFsc2EtdG9vbHMgYW5kIGFsc2EtZmlybXdhcmUgcGFja2FnZXMuCisKKyAgTW9kdWxlIHNuZC12aWE4Mnh4CisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBBQyc5NyBtb3RoZXJib2FyZHMgYmFzZWQgb24gVklBIDgyQzY4NkEvNjg2QiwgODIzMywKKyAgICA4MjMzQSwgODIzM0MsIDgyMzUgKHNvdXRoKSBicmlkZ2UuCisKKyAgICBtcHVfcG9ydAktIDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwLCBvdGhlcndpc2Ugb2J0YWluIEJJT1Mgc2V0dXAKKwkJICBbVklBNjg2QS82ODZCIG9ubHldCisgICAgam95c3RpY2sJLSBFbmFibGUgam95c3RpY2sgKGRlZmF1bHQgb2ZmKSBbVklBNjg2QS82ODZCIG9ubHldCisgICAgYWM5N19jbG9jawktIEFDJzk3IGNvZGVjIGNsb2NrIGJhc2UgKGRlZmF1bHQgNDgwMDBIeikKKyAgICBkeHNfc3VwcG9ydAktIHN1cHBvcnQgRFhTIGNoYW5uZWxzLAorCQkgIDAgPSBhdXRvIChkZWZhbHV0KSwgMSA9IGVuYWJsZSwgMiA9IGRpc2FibGUsCisJCSAgMyA9IDQ4ayBvbmx5LCA0ID0gbm8gVlJBCisJCSAgW1ZJQTgyMzMvQyw4MjM1IG9ubHldCisgICAgYWM5N19xdWlyayAgLSBBQyc5NyB3b3JrYXJvdW5kIGZvciBzdHJhbmdlIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVsOHgwIG1vZHVsZSBmb3IgZGV0YWlscy4KKworICAgIE1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGJ1cy1tYXN0ZXIgY2hpcHMgKG1heCA4KS4KKworICAgIE5vdGU6IG9uIHNvbWUgU01QIG1vdGhlcmJvYXJkcyBsaWtlIE1TSSA2OTREIHRoZSBpbnRlcnJ1cHRzIG1pZ2h0CisgICAgICAgICAgbm90IGJlIGdlbmVyYXRlZCBwcm9wZXJseS4gIEluIHN1Y2ggYSBjYXNlLCBwbGVhc2UgdHJ5IHRvCisgICAgICAgICAgc2V0IHRoZSBTTVAgKG9yIE1QUykgdmVyc2lvbiBvbiBCSU9TIHRvIDEuMSBpbnN0ZWFkIG9mCisgICAgICAgICAgZGVmYXVsdCB2YWx1ZSAxLjQuICBUaGVuIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIHdpbGwgYmUKKyAgICAgICAgICBhc3NpZ25lZCB1bmRlciAxNS4gWW91IG1pZ2h0IGFsc28gdXBncmFkZSB5b3VyIEJJT1MuCisgICAgCisgICAgTm90ZTogVklBODIzMy81IChub3QgVklBODIzM0EpIGNhbiBzdXBwb3J0IERYUyAoZGlyZWN0IHNvdW5kKQorCSAgY2hhbm5lbHMgYXMgdGhlIGZpcnN0IFBDTS4gIE9uIHRoZXNlIGNoYW5uZWxzLCB1cCB0byA0CisJICBzdHJlYW1zIGNhbiBiZSBwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZS4KKwkgIEFzIGRlZmF1bHQgKGR4c19zdXBwb3J0ID0gMCksIDQ4ayBmaXhlZCByYXRlIGlzIGNob3NlbgorCSAgZXhjZXB0IGZvciB0aGUga25vd24gZGV2aWNlcyBzaW5jZSB0aGUgb3V0cHV0IGlzIG9mdGVuCisJICBub2lzeSBleGNlcHQgZm9yIDQ4ayBvbiBzb21lIG1vdGhlciBib2FyZHMgZHVlIHRvIHRoZQorCSAgYnVnIG9mIEJJT1MuCisJICBQbGVhc2UgdHJ5IG9uY2UgZHhzX3N1cHBvcnQ9MSBhbmQgaWYgaXQgd29ya3Mgb24gb3RoZXIKKwkgIHNhbXBsZSByYXRlcyAoZS5nLiA0NC4xa0h6IG9mIG1wMyBwbGF5YmFjayksIHBsZWFzZSBsZXQgdXMKKwkgIGtub3cgdGhlIFBDSSBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBpZCdzIChvdXRwdXQgb2YKKwkgICJsc3BjaSAtbnYiKS4KKwkgIElmIGl0IGRvZXNuJ3Qgd29yaywgdHJ5IGR4c19zdXBwb3J0PTQuICBJZiBpdCBzdGlsbCBkb2Vzbid0CisJICB3b3JrIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5nIGlzIG9rLCBkeHNfc3VwcG9ydD0zIGlzIHRoZQorCSAgcmlnaHQgY2hvaWNlLiAgSWYgdGhlIGRlZmF1bHQgc2V0dGluZyBkb2Vzbid0IHdvcmsgYXQgYWxsLAorCSAgdHJ5IGR4c19zdXBwb3J0PTIgdG8gZGlzYWJsZSB0aGUgRFhTIGNoYW5uZWxzLgorCSAgSW4gYW55IGNhc2VzLCBwbGVhc2UgbGV0IHVzIGtub3cgdGhlIHJlc3VsdCBhbmQgdGhlCisJICBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBpZHMuCisKKyAgICBOb3RlOiBmb3IgdGhlIE1QVTQwMSBvbiBWSUE4MjN4LCB1c2Ugc25kLW1wdTQwMSBkcml2ZXIKKwkgIGFkZGl0b25hbGx5LiAgVGhlIG1wdV9wb3J0IG9wdGlvbiBpcyBmb3IgVklBNjg2IGNoaXBzIG9ubHkuCisKKyAgTW9kdWxlIHNuZC12aWE4Mnh4LW1vZGVtCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBWSUE4Mnh4IEFDOTcgbW9kZW0KKworICAgIGFjOTdfY2xvY2sJLSBBQyc5NyBjb2RlYyBjbG9jayBiYXNlIChkZWZhdWx0IDQ4MDAwSHopCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIE5vdGU6IFRoZSBkZWZhdWx0IGluZGV4IHZhbHVlIG9mIHRoaXMgbW9kdWxlIGlzIC0yLCBpLmUuIHRoZSBmaXJzdAorICAgICAgICAgIHNsb3QgaXMgZXhjbHVkZWQuCisKKyAgTW9kdWxlIHNuZC12aXJtaWRpCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciB2aXJ0dWFsIHJhd21pZGkgZGV2aWNlcy4KKyAgICBUaGlzIG1vZHVsZSBjcmVhdGVzIHZpcnR1YWwgcmF3bWlkaSBkZXZpY2VzIHdoaWNoIGNvbW11bmljYXRlCisgICAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQUxTQSBzZXF1ZW5jZXIgcG9ydHMuCisKKyAgICBtaWRpX2RldnMJLSBNSURJIGRldmljZXMgIyAoMS04LCBkZWZhdWx0PTQpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC12eDIyMgorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIERpZ2lncmFtIFZYLVBvY2tldCBWWDIyMiwgVjIyMiB2MiBhbmQgTWljIGNhcmRzLgorCisgICAgbWljCQktIEVuYWJsZSBNaWNyb3Bob25lIG9uIFYyMjIgTWljIChOWUkpCisgICAgaWJsCQktIENhcHR1cmUgSUJMIHNpemUuIChkZWZhdWx0ID0gMCwgbWluaW11bSBzaXplKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgICBXaGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHRoZSBob3RwbHVnIGZpcm13YXJlCisgICAgaXMgc3VwcG9ydGVkLCB0aGUgZmlybXdhcmUgZGF0YSBpcyBsb2FkZWQgdmlhIGhvdHBsdWcgYXV0b21hdGljYWxseS4KKyAgICBJbnN0YWxsIHRoZSBuZWNlc3NhcnkgZmlybXdhcmUgZmlsZXMgaW4gYWxzYS1maXJtd2FyZSBwYWNrYWdlLgorICAgIFdoZW4gbm8gaG90cGx1ZyBmdyBsb2FkZXIgaXMgYXZhaWxhYmxlLCB5b3UgbmVlZCB0byBsb2FkIHRoZQorICAgIGZpcm13YXJlIHZpYSB2eGxvYWRlciB1dGlsaXR5IGluIGFsc2EtdG9vbHMgcGFja2FnZS4gIFRvIGludm9rZQorICAgIHZ4bG9hZGVyIGF1dG9tYXRpY2FsbHksIGFkZCB0aGUgZm9sbG93aW5nIHRvIC9ldGMvbW9kcHJvYmUuY29uZgorCisJaW5zdGFsbCBzbmQtdngyMjIgL3NiaW4vbW9kcHJvYmUgLS1maXJzdC10aW1lIC1pIHNuZC12eDIyMiAmJiAvdXNyL2Jpbi92eGxvYWRlcgorCisgICAgKGZvciAyLjIvMi40IGtlcm5lbHMsIGFkZCAicG9zdC1pbnN0YWxsIC91c3IvYmluL3Z4bG9hZGVyIiB0bworICAgICAvZXRjL21vZHVsZXMuY29uZiwgaW5zdGVhZC4pCisgICAgSUJMIHNpemUgZGVmaW5lcyB0aGUgaW50ZXJydXB0cyBwZXJpb2QgZm9yIFBDTS4gIFRoZSBzbWFsbGVyIHNpemUKKyAgICBnaXZlcyBzbWFsbGVyIGxhdGVuY3kgYnV0IGxlYWRzIHRvIG1vcmUgQ1BVIGNvbnN1bXB0aW9uLCB0b28uCisgICAgVGhlIHNpemUgaXMgdXN1YWxseSBhbGlnbmVkIHRvIDEyNi4gIEFzIGRlZmF1bHQgKD0wKSwgdGhlIHNtYWxsZXN0CisgICAgc2l6ZSBpcyBjaG9zZW4uICBUaGUgcG9zc2libGUgSUJMIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4KKyAgICAvcHJvYy9hc291bmQvY2FyZFgvdngtc3RhdHVzIHByb2MgZmlsZS4KKworICBNb2R1bGUgc25kLXZ4cG9ja2V0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRGlnaWdyYW0gVlgtUG9ja2V0IFZYMiBQQ01DSUEgY2FyZC4KKworICAgIGlibCAgICAgIC0gQ2FwdHVyZSBJQkwgc2l6ZS4gKGRlZmF1bHQgPSAwLCBtaW5pbXVtIHNpemUpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4gIFRoZSBtb2R1bGUgaXMgY29tcGlsZWQgb25seSB3aGVuCisgICAgUENNQ0lBIGlzIHN1cHBvcnRlZCBvbiBrZXJuZWwuCisKKyAgICBUbyBhY3RpdmF0ZSB0aGUgZHJpdmVyIHZpYSB0aGUgY2FyZCBtYW5hZ2VyLCB5b3UnbGwgbmVlZCB0byBzZXQKKyAgICB1cCAvZXRjL3BjbWNpYS92eHBvY2tldC5jb25mLiAgU2VlIHRoZSBzb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYy4KKworICAgIFdoZW4gdGhlIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSBhbmQgdGhlIGhvdHBsdWcgZmlybXdhcmUKKyAgICBpcyBzdXBwb3J0ZWQsIHRoZSBmaXJtd2FyZSBkYXRhIGlzIGxvYWRlZCB2aWEgaG90cGx1ZyBhdXRvbWF0aWNhbGx5LgorICAgIEluc3RhbGwgdGhlIG5lY2Vzc2FyeSBmaXJtd2FyZSBmaWxlcyBpbiBhbHNhLWZpcm13YXJlIHBhY2thZ2UuCisgICAgV2hlbiBubyBob3RwbHVnIGZ3IGxvYWRlciBpcyBhdmFpbGFibGUsIHlvdSBuZWVkIHRvIGxvYWQgdGhlCisgICAgZmlybXdhcmUgdmlhIHZ4bG9hZGVyIHV0aWxpdHkgaW4gYWxzYS10b29scyBwYWNrYWdlLgorCisgICAgQWJvdXQgY2FwdHVyZSBJQkwsIHNlZSB0aGUgZGVzY3JpcHRpb24gb2Ygc25kLXZ4MjIyIG1vZHVsZS4KKworICAgIE5vdGU6IHRoZSBkcml2ZXIgaXMgYnVpbGQgb25seSB3aGVuIENPTkZJR19JU0EgaXMgc2V0LgorICAgIAorICBNb2R1bGUgc25kLXZ4cDQ0MAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBEaWdpZ3JhbSBWWC1Qb2NrZXQgNDQwIFBDTUNJQSBjYXJkLgorCisgICAgaWJsICAgICAgLSBDYXB0dXJlIElCTCBzaXplLiAoZGVmYXVsdCA9IDAsIG1pbmltdW0gc2l6ZSkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiAgVGhlIG1vZHVsZSBpcyBjb21waWxlZCBvbmx5IHdoZW4KKyAgICBQQ01DSUEgaXMgc3VwcG9ydGVkIG9uIGtlcm5lbC4KKworICAgIFRvIGFjdGl2YXRlIHRoZSBkcml2ZXIgdmlhIHRoZSBjYXJkIG1hbmFnZXIsIHlvdSdsbCBuZWVkIHRvIHNldAorICAgIHVwIC9ldGMvcGNtY2lhL3Z4cDQ0MC5jb25mLiAgU2VlIHRoZSBzb3VuZC9wY21jaWEvdngvdnhwNDQwLmMuCisKKyAgICBXaGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHRoZSBob3RwbHVnIGZpcm13YXJlCisgICAgaXMgc3VwcG9ydGVkLCB0aGUgZmlybXdhcmUgZGF0YSBpcyBsb2FkZWQgdmlhIGhvdHBsdWcgYXV0b21hdGljYWxseS4KKyAgICBJbnN0YWxsIHRoZSBuZWNlc3NhcnkgZmlybXdhcmUgZmlsZXMgaW4gYWxzYS1maXJtd2FyZSBwYWNrYWdlLgorICAgIFdoZW4gbm8gaG90cGx1ZyBmdyBsb2FkZXIgaXMgYXZhaWxhYmxlLCB5b3UgbmVlZCB0byBsb2FkIHRoZQorICAgIGZpcm13YXJlIHZpYSB2eGxvYWRlciB1dGlsaXR5IGluIGFsc2EtdG9vbHMgcGFja2FnZS4KKworICAgIEFib3V0IGNhcHR1cmUgSUJMLCBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHNuZC12eDIyMiBtb2R1bGUuCisKKyAgICBOb3RlOiB0aGUgZHJpdmVyIGlzIGJ1aWxkIG9ubHkgd2hlbiBDT05GSUdfSVNBIGlzIHNldC4KKyAgICAKKyAgTW9kdWxlIHNuZC15bWZwY2kKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgWWFtYWhhIFBDSSBjaGlwcyAoWU1GNzJ4LCBZTUY3NHggJiBZTUY3NXgpLgorCisgICAgbXB1X3BvcnQgICAgICAtIDB4MzAwLDB4MzMwLDB4MzMyLDB4MzM0LCAwIChkaXNhYmxlKSBieSBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAxIChhdXRvLWRldGVjdCBmb3IgWU1GNzQ0Lzc1NCBvbmx5KQorICAgIGZtX3BvcnQgICAgICAgLSAweDM4OCwweDM5OCwweDNhMCwweDNhOCwgMCAoZGlzYWJsZSkgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAxIChhdXRvLWRldGVjdCBmb3IgWU1GNzQ0Lzc1NCBvbmx5KQorICAgIGpveXN0aWNrX3BvcnQgLSAweDIwMSwweDIwMiwweDIwNCwweDIwNSwgMCAoZGlzYWJsZSkgYnkgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgMSAoYXV0by1kZXRlY3QpCisgICAgcmVhcl9zd2l0Y2ggICAtIGVuYWJsZSBzaGFyZWQgcmVhci9saW5lLWluIHN3aXRjaCAoYm9vbCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNoaXBzIChtYXggOCkuCisKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKKyAgTW9kdWxlIHNuZC1wZGF1ZGlvY2YKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgU291bmQgQ29yZSBQREF1ZGlvQ0Ygc291bmQgY2FyZC4KKworICAgIE5vdGU6IHRoZSBkcml2ZXIgaXMgYnVpbGQgb25seSB3aGVuIENPTkZJR19JU0EgaXMgc2V0LgorCisKK0NvbmZpZ3VyaW5nIE5vbi1JU0FQTlAgQ2FyZHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgd2l0aCBJU0EtUG5QIHN1cHBvcnQsIHRoZSBtb2R1bGVzCitzdXBwb3J0aW5nIHRoZSBpc2FwbnAgY2FyZHMgd2lsbCBoYXZlIG1vZHVsZSBvcHRpb25zICJpc2FwbnAiLgorSWYgdGhpcyBvcHRpb24gaXMgc2V0LCAqb25seSogdGhlIElTQS1QblAgZGV2aWNlcyB3aWxsIGJlIHByb2JlZC4KK0ZvciBwcm9iaW5nIHRoZSBub24gSVNBLVBuUCBjYXJkcywgeW91IGhhdmUgdG8gcGFzcyAiaXNhcG5wPTAiIG9wdGlvbgordG9nZXRoZXIgd2l0aCB0aGUgcHJvcGVyIGkvbyBhbmQgaXJxIGNvbmZpZ3VyYXRpb24uCisKK1doZW4gdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIHdpdGhvdXQgSVNBLVBuUCBzdXBwb3J0LCBpc2FwbnAgb3B0aW9uCit3aWxsIGJlIG5vdCBidWlsdCBpbi4KKworCitNb2R1bGUgQXV0b2xvYWRpbmcgU3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIEFMU0EgZHJpdmVycyBjYW4gYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkgb24gZGVtYW5kIGJ5IGRlZmluaW5nCittb2R1bGUgYWxpYXNlcy4gIFRoZSBzdHJpbmcgJ3NuZC1jYXJkLSUxJyBpcyByZXF1ZXN0ZWQgZm9yIEFMU0EgbmF0aXZlCitkZXZpY2VzIHdoZXJlICVpIGlzIHNvdW5kIGNhcmQgbnVtYmVyIGZyb20gemVybyB0byBzZXZlbi4KKworVG8gYXV0by1sb2FkIGFuIEFMU0EgZHJpdmVyIGZvciBPU1Mgc2VydmljZXMsIGRlZmluZSB0aGUgc3RyaW5nCisnc291bmQtc2xvdC0laScgd2hlcmUgJWkgbWVhbnMgdGhlIHNsb3QgbnVtYmVyIGZvciBPU1MsIHdoaWNoCitjb3JyZXNwb25kcyB0byB0aGUgY2FyZCBpbmRleCBvZiBBTFNBLiAgVXN1YWxseSwgZGVmaW5lIHRoaXMKK2FzIHRoZSB0aGUgc2FtZSBjYXJkIG1vZHVsZS4KKworQW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIGZvciBhIHNpbmdsZSBlbXUxMGsxIGNhcmQgaXMgbGlrZSBiZWxvdzoKKy0tLS0tIC9ldGMvbW9kcHJvYmUuY29uZgorYWxpYXMgc25kLWNhcmQtMCBzbmQtZW11MTBrMQorYWxpYXMgc291bmQtc2xvdC0wIHNuZC1lbXUxMGsxCistLS0tLSAvZXRjL21vZHByb2JlLmNvbmYKKworVGhlIGF2YWlsYWJsZSBudW1iZXIgb2YgYXV0by1sb2FkZWQgc291bmQgY2FyZHMgZGVwZW5kcyBvbiB0aGUgbW9kdWxlCitvcHRpb24gImNhcmRzX2xpbWl0IiBvZiBzbmQgbW9kdWxlLiAgQXMgZGVmYXVsdCBpdCdzIHNldCB0byAxLgorVG8gZW5hYmxlIHRoZSBhdXRvLWxvYWRpbmcgb2YgbXVsdGlwbGUgY2FyZHMsIHNwZWNpZnkgdGhlIG51bWJlciBvZgorc291bmQgY2FyZHMgaW4gdGhhdCBvcHRpb24uCisKK1doZW4gbXVsdGlwbGUgY2FyZHMgYXJlIGF2YWlsYWJsZSwgaXQnZCBiZXR0ZXIgdG8gc3BlY2lmeSB0aGUgaW5kZXgKK251bWJlciBmb3IgZWFjaCBjYXJkIHZpYSBtb2R1bGUgb3B0aW9uLCB0b28sIHNvIHRoYXQgdGhlIG9yZGVyIG9mCitjYXJkcyBpcyBrZXB0IGNvbnNpc3RlbnQuCisKK0FuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgdHdvIHNvdW5kIGNhcmRzIGlzIGxpa2UgYmVsb3c6CisKKy0tLS0tIC9ldGMvbW9kcHJvYmUuY29uZgorIyBBTFNBIHBvcnRpb24KK29wdGlvbnMgc25kIGNhcmRzX2xpbWl0PTIKK2FsaWFzIHNuZC1jYXJkLTAgc25kLWludGVyd2F2ZQorYWxpYXMgc25kLWNhcmQtMSBzbmQtZW5zMTM3MQorb3B0aW9ucyBzbmQtaW50ZXJ3YXZlIGluZGV4PTAKK29wdGlvbnMgc25kLWVuczEzNzEgaW5kZXg9MQorIyBPU1MvRnJlZSBwb3J0aW9uCithbGlhcyBzb3VuZC1zbG90LTAgc25kLWludGVyd2F2ZQorYWxpYXMgc291bmQtc2xvdC0xIHNuZC1lbnMxMzcxCistLS0tLSAvZXRjL21vcHJvYmUuY29uZgorCitJbiB0aGlzIGV4YW1wbGUsIHRoZSBpbnRlcndhdmUgY2FyZCBpcyBhbHdheXMgbG9hZGVkIGFzIHRoZSBmaXJzdCBjYXJkCisoaW5kZXggMCkgYW5kIGVuczEzNzEgYXMgdGhlIHNlY29uZCAoaW5kZXggMSkuCisKKworQUxTQSBQQ00gZGV2aWNlcyB0byBPU1MgZGV2aWNlcyBtYXBwaW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworL2Rldi9zbmQvcGNtQzBEMFtjfHBdICAtPiAvZGV2L2F1ZGlvMCAoL2Rldi9hdWRpbykgLT4gbWlub3IgNAorL2Rldi9zbmQvcGNtQzBEMFtjfHBdICAtPiAvZGV2L2RzcDAgKC9kZXYvZHNwKSAgICAgLT4gbWlub3IgMworL2Rldi9zbmQvcGNtQzBEMVtjfHBdICAtPiAvZGV2L2Fkc3AwICgvZGV2L2Fkc3ApICAgLT4gbWlub3IgMTIKKy9kZXYvc25kL3BjbUMxRDBbY3xwXSAgLT4gL2Rldi9hdWRpbzEgICAgICAgICAgICAgIC0+IG1pbm9yIDQrMTYgPSAyMAorL2Rldi9zbmQvcGNtQzFEMFtjfHBdICAtPiAvZGV2L2RzcDEgICAgICAgICAgICAgICAgLT4gbWlub3IgMysxNiA9IDE5CisvZGV2L3NuZC9wY21DMUQxW2N8cF0gIC0+IC9kZXYvYWRzcDEgICAgICAgICAgICAgICAtPiBtaW5vciAxMisxNiA9IDI4CisvZGV2L3NuZC9wY21DMkQwW2N8cF0gIC0+IC9kZXYvYXVkaW8yICAgICAgICAgICAgICAtPiBtaW5vciA0KzMyID0gMzYKKy9kZXYvc25kL3BjbUMyRDBbY3xwXSAgLT4gL2Rldi9kc3AyICAgICAgICAgICAgICAgIC0+IG1pbm9yIDMrMzIgPSAzOQorL2Rldi9zbmQvcGNtQzJEMVtjfHBdICAtPiAvZGV2L2Fkc3AyICAgICAgICAgICAgICAgLT4gbWlub3IgMTIrMzIgPSA0NAorCitUaGUgZmlyc3QgbnVtYmVyIGZyb20gL2Rldi9zbmQvcGNtQ3tYfUR7WX1bY3xwXSBleHByZXNzaW9uIG1lYW5zCitzb3VuZCBjYXJkIG51bWJlciBhbmQgc2Vjb25kIG1lYW5zIGRldmljZSBudW1iZXIuICBUaGUgQUxTQSBkZXZpY2VzCitoYXZlIGVpdGhlciAnYycgb3IgJ3AnIHN1ZmZpeCBpbmRpY2F0aW5nIHRoZSBkaXJlY3Rpb24sIGNhcHR1cmUgYW5kCitwbGF5YmFjaywgcmVzcGVjdGl2ZWx5LgorCitQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZXZpY2UgbWFwcGluZyBhYm92ZSBtYXkgYmUgdmFyaWVkIHZpYSB0aGUgbW9kdWxlCitvcHRpb25zIG9mIHNuZC1wY20tb3NzIG1vZHVsZS4KKworCitERVZGUyBzdXBwb3J0Cis9PT09PT09PT09PT09CisKK1RoZSBBTFNBIGRyaXZlciBmdWxseSBzdXBwb3J0cyB0aGUgZGV2ZnMgZXh0ZW5zaW9uLgorWW91IHNob3VsZCBhZGQgbGluZXMgYmVsb3cgdG8geW91ciBkZXZmc2QuY29uZiBmaWxlOgorCitMT09LVVAgc25kIE1PRExPQUQgQUNUSU9OIHNuZAorUkVHSVNURVIgXnNvdW5kLy4qIFBFUk1JU1NJT05TIHJvb3QuYXVkaW8gNjYwCitSRUdJU1RFUiBec25kLy4qIFBFUk1JU1NJT05TIHJvb3QuYXVkaW8gNjYwCisKK1dhcm5pbmc6IFRoZXNlIGxpbmVzIGFzc3VtZSB0aGF0IHlvdSBoYXZlIHRoZSBhdWRpbyBncm91cCBpbiB5b3VyIHN5c3RlbS4KKyAgICAgICAgIE90aGVyd2lzZSByZXBsYWNlIGF1ZGlvIHdvcmQgd2l0aCBhbm90aGVyIGdyb3VwIG5hbWUgKHJvb3QgZm9yCisgICAgICAgICBleGFtcGxlKS4KKworCitQcm9jIGludGVyZmFjZXMgKC9wcm9jL2Fzb3VuZCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvcHJvYy9hc291bmQvY2FyZCMvcGNtI1tjcF0vb3NzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN0cmluZyAiZXJhc2UiIC0gZXJhc2UgYWxsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25zIGFib3V0IE9TUyBhcHBsaWNhdGlvbnMKKyAgU3RyaW5nICI8YXBwX25hbWU+IDxmcmFnbWVudHM+IDxmcmFnbWVudF9zaXplPiBbPG9wdGlvbnM+XSIKKworICAgPGFwcF9uYW1lPiAtIG5hbWUgb2YgYXBwbGljYXRpb24gd2l0aCAoaGlnaGVyIHByaW9yaXR5KSBvciB3aXRob3V0IHBhdGgKKyAgIDxmcmFnbWVudHM+IC0gbnVtYmVyIG9mIGZyYWdtZW50cyBvciB6ZXJvIGlmIGF1dG8KKyAgIDxmcmFnbWVudF9zaXplPiAtIHNpemUgb2YgZnJhZ21lbnQgaW4gYnl0ZXMgb3IgemVybyBpZiBhdXRvCisgICA8b3B0aW9ucz4gLSBvcHRpb25hbCBwYXJhbWV0ZXJzCisJICAtIGRpc2FibGUgICB0aGUgYXBwbGljYXRpb24gdHJpZXMgdG8gb3BlbiBhIHBjbSBkZXZpY2UgZm9yCisJCSAgICAgIHRoaXMgY2hhbm5lbCBidXQgZG9lcyBub3Qgd2FudCB0byB1c2UgaXQuCisJCSAgICAgIChDYXVzZSBhIGJ1ZyBvciBtbWFwIG5lZWRzKQorCQkgICAgICBJdCdzIGdvb2QgZm9yIFF1YWtlIGV0Yy4uLgorCSAgLSBkaXJlY3QgICAgZG9uJ3QgdXNlIHBsdWdpbnMKKwkgIC0gYmxvY2sgICAgIGZvcmNlIGJsb2NrIG1vZGUgKHJ2cGxheWVyKQorCSAgLSBub24tYmxvY2sgZm9yY2Ugbm9uLWJsb2NrIG1vZGUKKwkgIC0gd2hvbGUtZnJhZyAgd3JpdGUgb25seSB3aG9sZSBmcmFnbWVudHMgKG9wdGltaXphdGlvbiBhZmZlY3RpbmcKKwkJCXBsYXliYWNrIG9ubHkpCisJICAtIG5vLXNpbGVuY2UgIGRvIG5vdCBmaWxsIHNpbGVuY2UgYWhlYWQgdG8gYXZvaWQgY2xpY2tzCisKKyAgRXhhbXBsZTogZWNobyAieDExYW1wIDEyOCAxNjM4NCIgPiAvcHJvYy9hc291bmQvY2FyZDAvcGNtMHAvb3NzCisgICAgICAgICAgIGVjaG8gInNxdWFrZSAwIDAgZGlzYWJsZSIgPiAvcHJvYy9hc291bmQvY2FyZDAvcGNtMGMvb3NzCisJICAgZWNobyAicnZwbGF5ZXIgMCAwIGJsb2NrIiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wcC9vc3MKKworCitMaW5rcworPT09PT0KKworICBBTFNBIHByb2plY3QgaG9tZXBhZ2UKKyAgICAgICBodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0F1ZGlneS1taXhlci50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQXVkaWd5LW1peGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTMyZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0F1ZGlneS1taXhlci50eHQKQEAgLTAsMCArMSwzNDUgQEAKKworCQlTb3VuZCBCbGFzdGVyIEF1ZGlneSBtaXhlciAvIGRlZmF1bHQgRFNQIGNvZGUKKwkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGJhc2VkIG9uIFNCLUxpdmUtbWl4ZXIudHh0LgorCitUaGUgRU1VMTBLMiBjaGlwcyBoYXZlIGEgRFNQIHBhcnQgd2hpY2ggY2FuIGJlIHByb2dyYW1tZWQgdG8gc3VwcG9ydCAKK3ZhcmlvdXMgd2F5cyBvZiBzYW1wbGUgcHJvY2Vzc2luZywgd2hpY2ggaXMgZGVzY3JpYmVkIGhlcmUuCisoVGhpcyBhY3RpY2xlIGRvZXMgbm90IGRlYWwgd2l0aCB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSAKK0VNVTEwSzIgY2hpcHMuIFNlZSB0aGUgbWFudWFscyBzZWN0aW9uIGZvciBmdXJ0aGVyIGRldGFpbHMuKQorCitUaGUgQUxTQSBkcml2ZXIgcHJvZ3JhbXMgdGhpcyBwb3J0aW9uIG9mIGNoaXAgYnkgZGVmYXVsdCBjb2RlCisoY2FuIGJlIGFsdGVyZWQgbGF0ZXIpIHdoaWNoIG9mZmVycyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdHk6CisKKworMSkgRGlnaXRhbCBtaXhlciBjb250cm9scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBjb250cm9scyBhcmUgYnVpbHQgdXNpbmcgdGhlIERTUCBpbnN0cnVjdGlvbnMuIFRoZXkgb2ZmZXIgZXh0ZW5kZWQKK2Z1bmN0aW9uYWxpdHkuIE9ubHkgdGhlIGRlZmF1bHQgYnVpbGQtaW4gY29kZSBpbiB0aGUgQUxTQSBkcml2ZXIgaXMgZGVzY3JpYmVkCitoZXJlLiBOb3RlIHRoYXQgdGhlIGNvbnRyb2xzIHdvcmsgYXMgYXR0ZW51YXRvcnM6IHRoZSBtYXhpbXVtIHZhbHVlIGlzIHRoZSAKK25ldXRyYWwgcG9zaXRpb24gbGVhdmluZyB0aGUgc2lnbmFsIHVuY2hhbmdlZC4gTm90ZSB0aGF0IGlmIHRoZSAgc2FtZSBkZXN0aW5hdGlvbiAKK2lzIG1lbnRpb25lZCBpbiBtdWx0aXBsZSBjb250cm9scywgdGhlIHNpZ25hbCBpcyBhY2N1bXVsYXRlZCBhbmQgY2FuIGJlIHdyYXBwZWQgCisoc2V0IHRvIG1heGltYWwgb3IgbWluaW1hbCB2YWx1ZSB3aXRob3V0IGNoZWNraW5nIG9mIG92ZXJmbG93KS4KKworCitFeHBsYW5hdGlvbiBvZiB1c2VkIGFiYnJldmlhdGlvbnM6CisKK0RBQyAgICAtIGRpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlcgorQURDICAgIC0gYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVyCitJMlMgICAgLSBvbmUtd2F5IHRocmVlIHdpcmUgc2VyaWFsIGJ1cyBmb3IgZGlnaXRhbCBzb3VuZCBieSBQaGlsaXBzIFNlbWljb25kdWN0b3JzCisgICAgICAgICAodGhpcyBzdGFuZGFyZCBpcyB1c2VkIGZvciBjb25uZWN0aW5nIHN0YW5kYWxvbmUgREFDIGFuZCBBREMgY29udmVydGVycykKK0xGRSAgICAtIGxvdyBmcmVxdWVuY3kgZWZmZWN0cyAoc3Vid29vZmVyIHNpZ25hbCkKK0FDOTcgICAtIGEgY2hpcCBjb250YWluaW5nIGFuIGFuYWxvZyBtaXhlciwgREFDIGFuZCBBREMgY29udmVydGVycworSUVDOTU4IC0gUy9QRElGCitGWC1idXMgLSB0aGUgRU1VMTBLMiBjaGlwIGhhcyBhbiBlZmZlY3QgYnVzIGNvbnRhaW5pbmcgNjQgYWNjdW11bGF0b3JzLgorICAgICAgICAgRWFjaCBvZiB0aGUgc3ludGhlc2l6ZXIgdm9pY2VzIGNhbiBmZWVkIGl0cyBvdXRwdXQgdG8gdGhlc2UgYWNjdW11bGF0b3JzCisgICAgICAgICBhbmQgdGhlIERTUCBtaWNyb2NvbnRyb2xsZXIgY2FuIG9wZXJhdGUgd2l0aCB0aGUgcmVzdWx0aW5nIHN1bS4KKworbmFtZT0nUENNIEZyb250IFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgZnJvbnQgUENNIEZYLWJ1cworYWNjdW11bGF0b3JzLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDggYW5kIDkgZm9yIGxlZnQgYW5kIHJpZ2h0IGZyb250IFBDTSAKK3NhbXBsZXMgZm9yIDUuMSBwbGF5YmFjay4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gCitzbG90cyBvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J1BDTSBTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHN1cnJvdW5kIFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAyIGFuZCAzIGZvciBsZWZ0IGFuZCByaWdodCBzdXJyb3VuZCBQQ00gCitzYW1wbGVzIGZvciA1LjEgcGxheWJhY2suIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBzdXJyb3VuZCBEQUMgUENNIAorc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gQ2VudGVyIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgY2VudGVyIFBDTSBGWC1idXMgYWNjdW11bGF0b3IuCitBTFNBIHVzZXMgYWNjdW11bGF0b3IgNiBmb3IgY2VudGVyIFBDTSBzYW1wbGUgZm9yIDUuMSBwbGF5YmFjay4gVGhlIHJlc3VsdCBzYW1wbGUKK2lzIGZvcndhcmRlZCB0byB0aGUgY2VudGVyIERBQyBQQ00gc2xvdCBvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J1BDTSBMRkUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGUgZm9yIExGRSBQQ00gRlgtYnVzIGFjY3VtdWxhdG9yLiAKK0FMU0EgdXNlcyBhY2N1bXVsYXRvciA3IGZvciBMRkUgUENNIHNhbXBsZSBmb3IgNS4xIHBsYXliYWNrLiBUaGUgcmVzdWx0IHNhbXBsZSAKK2lzIGZvcndhcmRlZCB0byB0aGUgTEZFIERBQyBQQ00gc2xvdCBvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J1BDTSBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAwIGFuZCAxIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gc2FtcGxlcyBmb3IKK3N0ZXJlbyBwbGF5YmFjay4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgCitvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J1BDTSBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIEZYLWJ1cworYWNjdW11bGF0b3IuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgorVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUKK1BDTSBkZXZpY2UpLgorCituYW1lPSdNdXNpYyBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBzYW1wbGVzLgorVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J011c2ljIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoZXNlIGNvbnRyb2xzIGFyZSB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNSURJIEZYLWJ1cworYWNjdW11bGF0b3IuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgorVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUKK1BDTSBkZXZpY2UpLgorCituYW1lPSdNaWMgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNaWMgaW5wdXQuCitGb3IgTWljIGlucHV0IGlzIHVzZWQgQUM5NyBjb2RlYy4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gCit0aGUgZnJvbnQgREFDIFBDTSBzbG90cyBvZiB0aGUgUGhpbGlwcyBEQUMuIFNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byBNaWMKK2NhcHR1cmUgRklGTyAoZGV2aWNlIDEgLSAxNmJpdC84S0h6IG1vbm8pIHRvbyB3aXRob3V0IHZvbHVtZSBjb250cm9sLgorCituYW1lPSdNaWMgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IE1pYyBpbnB1dC4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nQXVkaWd5IENEIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBUVEwKK2RpZ2l0YWwgaW5wdXRzICh1c3VhbGx5IHVzZWQgYnkgYSBDRFJPTSBkcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUKK2ZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cyBvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J0F1ZGlneSBDRCBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBUVEwKK2RpZ2l0YWwgaW5wdXRzICh1c3VhbGx5IHVzZWQgYnkgYSBDRFJPTSBkcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUKK2ZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nSUVDOTU4IE9wdGljYWwgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSUVDOTU4IG9wdGljYWwKK2RpZ2l0YWwgaW5wdXQuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzCitvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J0lFQzk1OCBPcHRpY2FsIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSUVDOTU4IG9wdGljYWwKK2RpZ2l0YWwgaW5wdXRzLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTworKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0xpbmUyIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IEkyUyBBREMKK2lucHV0cyAob24gdGhlIEF1ZGlneURyaXZlKS4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250CitEQUMgUENNIHNsb3RzIG9mIHRoZSBQaGlsaXBzIERBQy4KKworbmFtZT0nTGluZTIgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTEKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgKG9uIHRoZSBBdWRpZ3lEcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBBREMKK2NhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgZnJvbSBQaGlsaXBzIEFEQy4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250CitEQUMgUENNIHNsb3RzIG9mIHRoZSBQaGlsaXBzIERBQy4gVGhpcyBjb250YWlucyBtaXggZnJvbSBhbmFsb2cgc291cmNlcworbGlrZSBDRCwgTGluZSBJbiwgQXV4LCAuLi4uCisKK25hbWU9J0FuYWxvZyBNaXggQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTEKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgUGhpbGlwcyBBREMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBBREMKK2NhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nQXV4MiBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgKG9uIHRoZSBBdWRpZ3lEcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udAorREFDIFBDTSBzbG90cyBvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J0F1eDIgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTEKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgKG9uIHRoZSBBdWRpZ3lEcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBBREMKK2NhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nRnJvbnQgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK0FsbCBzdGVyZW8gc2lnbmFscyBhcmUgbWl4ZWQgdG9nZXRoZXIgYW5kIG1pcnJvcmVkIHRvIHN1cnJvdW5kLCBjZW50ZXIgYW5kIExGRS4KK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBmcm9udCBzcGVha2VycyBvZgordGhpcyBtaXguCisKK25hbWU9J1N1cnJvdW5kIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitBbGwgc3RlcmVvIHNpZ25hbHMgYXJlIG1peGVkIHRvZ2V0aGVyIGFuZCBtaXJyb3JlZCB0byBzdXJyb3VuZCwgY2VudGVyIGFuZCBMRkUuCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgc3Vycm91bmQgc3BlYWtlcnMgb2YKK3RoaXMgbWl4LgorCituYW1lPSdDZW50ZXIgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK0FsbCBzdGVyZW8gc2lnbmFscyBhcmUgbWl4ZWQgdG9nZXRoZXIgYW5kIG1pcnJvcmVkIHRvIHN1cnJvdW5kLCBjZW50ZXIgYW5kIExGRS4KK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGUgZm9yIGNlbnRlciBzcGVha2VyIG9mIHRoaXMgbWl4LgorCituYW1lPSdMRkUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK0FsbCBzdGVyZW8gc2lnbmFscyBhcmUgbWl4ZWQgdG9nZXRoZXIgYW5kIG1pcnJvcmVkIHRvIHN1cnJvdW5kLCBjZW50ZXIgYW5kIExGRS4KK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGUgZm9yIExGRSBzcGVha2VyIG9mIHRoaXMgbWl4LgorCituYW1lPSdUb25lIENvbnRyb2wgLSBTd2l0Y2gnLGluZGV4PTAKKworVGhpcyBjb250cm9sIHR1cm5zIHRoZSB0b25lIGNvbnRyb2wgb24gb3Igb2ZmLiBUaGUgc2FtcGxlcyBmb3IgZnJvbnQsIHJlYXIKK2FuZCBjZW50ZXIgLyBMRkUgb3V0cHV0cyBhcmUgYWZmZWN0ZWQuCisKK25hbWU9J1RvbmUgQ29udHJvbCAtIEJhc3MnLGluZGV4PTAKKworVGhpcyBjb250cm9sIHNldHMgdGhlIGJhc3MgaW50ZW5zaXR5LiBUaGVyZSBpcyBubyBuZXV0cmFsIHZhbHVlISEKK1doZW4gdGhlIHRvbmUgY29udHJvbCBjb2RlIGlzIGFjdGl2YXRlZCwgdGhlIHNhbXBsZXMgYXJlIGFsd2F5cyBtb2RpZmllZC4KK1RoZSBjbG9zZXN0IHZhbHVlIHRvIHB1cmUgc2lnbmFsIGlzIDIwLgorCituYW1lPSdUb25lIENvbnRyb2wgLSBUcmVibGUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIHNldHMgdGhlIHRyZWJsZSBpbnRlbnNpdHkuIFRoZXJlIGlzIG5vIG5ldXRyYWwgdmFsdWUhIQorV2hlbiB0aGUgdG9uZSBjb250cm9sIGNvZGUgaXMgYWN0aXZhdGVkLCB0aGUgc2FtcGxlcyBhcmUgYWx3YXlzIG1vZGlmaWVkLgorVGhlIGNsb3Nlc3QgdmFsdWUgdG8gcHVyZSBzaWduYWwgaXMgMjAuCisKK25hbWU9J01hc3RlciBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGZyb250LCBzdXJyb3VuZCwgY2VudGVyIGFuZCAKK0xGRSBvdXRwdXRzLgorCituYW1lPSdJRUM5NTggT3B0aWNhbCBSYXcgUGxheWJhY2sgU3dpdGNoJyxpbmRleD0wCisKK0lmIHRoaXMgc3dpdGNoIGlzIG9uLCB0aGVuIHRoZSBzYW1wbGVzIGZvciB0aGUgSUVDOTU4IChTL1BESUYpIGRpZ2l0YWwKK291dHB1dCBhcmUgdGFrZW4gb25seSBmcm9tIHRoZSByYXcgRlg4MDEwIFBDTSwgb3RoZXJ3aXNlIHN0YW5kYXJkIGZyb250CitQQ00gc2FtcGxlcyBhcmUgdGFrZW4uCisKKworMikgUENNIHN0cmVhbSByZWxhdGVkIGNvbnRyb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbmFtZT0nRU1VMTBLMSBQQ00gVm9sdW1lJyxpbmRleCAwLTMxCisKK0NoYW5uZWwgdm9sdW1lIGF0dGVudWF0aW9uIGluIHJhbmdlIDAtMHhmZmZmLiBUaGUgbWF4aW11bSB2YWx1ZSAobm8KK2F0dGVudWF0aW9uKSBpcyBkZWZhdWx0LiBUaGUgY2hhbm5lbCBtYXBwaW5nIGZvciB0aHJlZSB2YWx1ZXMgaXMKK2FzIGZvbGxvd3M6CisKKwkwIC0gbW9ubywgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCTEgLSBsZWZ0LCBkZWZhdWx0IDB4ZmZmZiAobm8gYXR0ZW51YXRpb24pCisJMiAtIHJpZ2h0LCBkZWZhdWx0IDB4ZmZmZiAobm8gYXR0ZW51YXRpb24pCisKK25hbWU9J0VNVTEwSzEgUENNIFNlbmQgUm91dGluZycsaW5kZXggMC0zMQorCitUaGlzIGNvbnRyb2wgc3BlY2lmaWVzIHRoZSBkZXN0aW5hdGlvbiAtIEZYLWJ1cyBhY2N1bXVsYXRvcnMuIFRoZXJlIDI0Cit2YWx1ZXMgd2l0aCB0aGlzIG1hcHBpbmc6CisKKwkgMCAtICBtb25vLCBBIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCSAxIC0gIG1vbm8sIEIgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAxCisJIDIgLSAgbW9ubywgQyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDIKKwkgMyAtICBtb25vLCBEIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMworCSA0IC0gIG1vbm8sIEUgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJIDUgLSAgbW9ubywgRiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkgNiAtICBtb25vLCBHIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCSA3IC0gIG1vbm8sIEggZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJIDggLSAgbGVmdCwgQSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkgOSAtICBsZWZ0LCBCIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMQorCTEwIC0gIGxlZnQsIEMgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAyCisJMTEgLSAgbGVmdCwgRCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDMKKwkxMiAtICBsZWZ0LCBFIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTEzIC0gIGxlZnQsIEYgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJMTQgLSAgbGVmdCwgRyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkxNSAtICBsZWZ0LCBIIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTE2IC0gcmlnaHQsIEEgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJMTcgLSByaWdodCwgQiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDEKKwkxOCAtIHJpZ2h0LCBDIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMgorCTE5IC0gcmlnaHQsIEQgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAzCisJMjAgLSByaWdodCwgRSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkyMSAtIHJpZ2h0LCBGIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTIyIC0gcmlnaHQsIEcgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJMjMgLSByaWdodCwgSCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKworRG9uJ3QgZm9yZ2V0IHRoYXQgaXQncyBpbGxlZ2FsIHRvIGFzc2lnbiBhIGNoYW5uZWwgdG8gdGhlIHNhbWUgRlgtYnVzIGFjY3VtdWxhdG9yIAorbW9yZSB0aGFuIG9uY2UgKGl0IG1lYW5zIDA9MCAmJiAxPTAgaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbikuCisgCituYW1lPSdFTVUxMEsxIFBDTSBTZW5kIFZvbHVtZScsaW5kZXggMC0zMQorCitJdCBzcGVjaWZpZXMgdGhlIGF0dGVudWF0aW9uIChhbW91bnQpIGZvciBnaXZlbiBkZXN0aW5hdGlvbiBpbiByYW5nZSAwLTI1NS4KK1RoZSBjaGFubmVsIG1hcHBpbmcgaXMgZm9sbG93aW5nOgorCisJIDAgLSAgbW9ubywgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDEgLSAgbW9ubywgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDIgLSAgbW9ubywgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDMgLSAgbW9ubywgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDQgLSAgbW9ubywgRSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDUgLSAgbW9ubywgRiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDYgLSAgbW9ubywgRyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDcgLSAgbW9ubywgSCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDggLSAgbGVmdCwgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDkgLSAgbGVmdCwgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTAgLSAgbGVmdCwgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTEgLSAgbGVmdCwgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTIgLSAgbGVmdCwgRSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTMgLSAgbGVmdCwgRiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTQgLSAgbGVmdCwgRyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTUgLSAgbGVmdCwgSCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTYgLSByaWdodCwgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTcgLSByaWdodCwgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJMTggLSByaWdodCwgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTkgLSByaWdodCwgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMjAgLSByaWdodCwgRSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMjEgLSByaWdodCwgRiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMjIgLSByaWdodCwgRyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMjMgLSByaWdodCwgSCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisKKworCis0KSBNQU5VQUxTL1BBVEVOVFM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z0cDovL29wZW5zb3VyY2UuY3JlYXRpdmUuY29tL3B1Yi9kb2MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBGaWxlczoKKyAgICAgICAgTE00NTQ1LnBkZiAgICAgIEFDOTcgQ29kZWMKKworICAgICAgICBtMjA0OS5wZGYgICAgICAgVGhlIEVNVTEwSzEgRGlnaXRhbCBBdWRpbyBQcm9jZXNzb3IKKworICAgICAgICBob2c2My5wcyAgICAgICAgRlg4MDEwIC0gQSBEU1AgQ2hpcCBBcmNoaXRlY3R1cmUgZm9yIEF1ZGlvIEVmZmVjdHMKKworCitXSVBPIFBhdGVudHMKKy0tLS0tLS0tLS0tLQorICAgICAgICBQYXRlbnQgbnVtYmVyczoKKyAgICAgICAgV08gOTkwMTgxMyAoQTEpIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIHdpdGggbXVsdGlwbGUgYXN5bmNocm9ub3VzIChKYW4uIDE0LCAxOTk5KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcworCisgICAgICAgIFdPIDk5MDE4MTQgKEExKSBQcm9jZXNzb3Igd2l0aCBJbnN0cnVjdGlvbiBTZXQgZm9yIEF1ZGlvIEVmZmVjdHMgKEphbi4gMTQsIDE5OTkpCisKKyAgICAgICAgV08gOTkwMTk1MyAoQTEpIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIGhhdmluZyBEZWNvdXBsZWQgSW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBhbmQgQXVkaW8gRGF0YSBTZXF1ZW5jaW5nIChKYW4uIDE0LCAxOTk5KQorCisKK1VTIFBhdGVudHMgKGh0dHA6Ly93d3cudXNwdG8uZ292LykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBVUyA1OTI1ODQxICAgICAgRGlnaXRhbCBTYW1wbGluZyBJbnN0cnVtZW50IGVtcGxveWluZyBjYWNoZSBtZW1vcnkgKEp1bC4gMjAsIDE5OTkpCisKKyAgICAgICAgVVMgNTkyODM0MiAgICAgIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIGludGVncmF0ZWQgb24gYSBzaW5nbGUgY2hpcCAoSnVsLiAyNywgMTk5OSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBtdWx0aXBvcnQgbWVtb3J5IG9udG8gd2hpY2ggbXVsdGlwbGUgYXN5bmNocm9ub3VzCisgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdGFsIHNvdW5kIHNhbXBsZXMgY2FuIGJlIGNvbmN1cnJlbnRseSBsb2FkZWQKKworICAgICAgICBVUyA1OTMwMTU4ICAgICAgUHJvY2Vzc29yIHdpdGggSW5zdHJ1Y3Rpb24gU2V0IGZvciBBdWRpbyBFZmZlY3RzIChKdWwuIDI3LCAxOTk5KQorCisgICAgICAgIFVTIDYwMzIyMzUgICAgICBNZW1vcnkgaW5pdGlhbGl6YXRpb24gY2lyY3VpdCAoVHJhbSkgKEZlYi4gMjksIDIwMDApCisKKyAgICAgICAgVVMgNjEzODIwNyAgICAgIEludGVycG9sYXRpb24gbG9vcGluZyBvZiBhdWRpbyBzYW1wbGVzIGluIGNhY2hlIGNvbm5lY3RlZCB0byAgICAoT2N0LiAyNCwgMjAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBidXMgd2l0aCBwcmlvcml0aXphdGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIGJ1cyB0cmFuc2ZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIGFjY29yZGFuY2Ugd2l0aCBsb29wIGVuZHMgYW5kIG1pbmltdW0gYmxvY2sgc2l6ZXMKKworICAgICAgICBVUyA2MTUxNjcwICAgICAgTWV0aG9kIGZvciBjb25zZXJ2aW5nIG1lbW9yeSBzdG9yYWdlIHVzaW5nIGEgKE5vdi4gMjEsIDIwMDApCisgICAgICAgICAgICAgICAgICAgICAgICBwb29sIG9mICBzaG9ydCB0ZXJtIG1lbW9yeSByZWdpc3RlcnMKKworICAgICAgICBVUyA2MTk1NzE1ICAgICAgSW50ZXJydXB0IGNvbnRyb2wgZm9yIG11bHRpcGxlIHByb2dyYW1zIGNvbW11bmljYXRpbmcgd2l0aCAgICAgIChGZWIuIDI3LCAyMDAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21tb24gaW50ZXJydXB0IGJ5IGFzc29jaWF0aW5nIHByb2dyYW1zIHRvIEdQIHJlZ2lzdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nIGludGVycnVwdCByZWdpc3RlciwgcG9sbGluZyBHUCByZWdpc3RlcnMsIGFuZCBpbnZva2luZworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgcm91dGluZSBhc3NvY2lhdGVkIHdpdGggZGVmaW5lZCBpbnRlcnJ1cHQgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9CdDg3eC50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQnQ4N3gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZWRiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQnQ4N3gudHh0CkBAIC0wLDAgKzEsNzggQEAKK0ludHJvCis9PT09PQorCitZb3UgbWlnaHQgaGF2ZSBub3RpY2VkIHRoYXQgdGhlIGJ0ODc4IGdyYWJiZXIgY2FyZHMgaGF2ZSBhY3R1YWxseQorX3R3b18gUENJIGZ1bmN0aW9uczoKKworJCBsc3BjaQorWyAuLi4gXQorMDA6MGEuMCBNdWx0aW1lZGlhIHZpZGVvIGNvbnRyb2xsZXI6IEJyb29rdHJlZSBDb3Jwb3JhdGlvbiBCdDg3OCAocmV2IDAyKQorMDA6MGEuMSBNdWx0aW1lZGlhIGNvbnRyb2xsZXI6IEJyb29rdHJlZSBDb3Jwb3JhdGlvbiBCdDg3OCAocmV2IDAyKQorWyAuLi4gXQorCitUaGUgZmlyc3QgZG9lcyB2aWRlbywgaXQgaXMgYmFja3dhcmQgY29tcGF0aWJsZSB0byB0aGUgYnQ4NDguICBUaGUgc2Vjb25kCitkb2VzIGF1ZGlvLiAgc25kLWJ0ODd4IGlzIGEgZHJpdmVyIGZvciB0aGUgc2Vjb25kIGZ1bmN0aW9uLiAgSXQncyBhIHNvdW5kCitkcml2ZXIgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHJlY29yZGluZyBzb3VuZCAoYW5kIF9vbmx5XyByZWNvcmRpbmcsIG5vCitwbGF5YmFjaykuICBBcyBtb3N0IFRWIGNhcmRzIGNvbWUgd2l0aCBhIHNob3J0IGNhYmxlIHdoaWNoIGNhbiBiZSBwbHVnZ2VkCitpbnRvIHlvdXIgc291bmQgY2FyZCdzIGxpbmUtaW4geW91IHByb2JhYmx5IGRvbid0IG5lZWQgdGhpcyBkcml2ZXIgaWYgYWxsCit5b3Ugd2FudCB0byBkbyBpcyBqdXN0IHdhdGNoaW5nIFRWLi4uCisKK1NvbWUgY2FyZHMgZG8gbm90IGJvdGhlciB0byBjb25uZWN0IGFueXRoaW5nIHRvIHRoZSBhdWRpbyBpbnB1dCBwaW5zIG9mCit0aGUgY2hpcCwgYW5kIHNvbWUgb3RoZXIgY2FyZHMgdXNlIHRoZSBhdWRpbyBmdW5jdGlvbiB0byB0cmFuc3BvcnQgTVBFRwordmlkZW8gZGF0YSwgc28gaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IGF1ZGlvIHJlY29yZGluZyBtYXkgbm90IHdvcmsKK3dpdGggeW91ciBjYXJkLgorCisKK0RyaXZlciBTdGF0dXMKKz09PT09PT09PT09PT0KKworVGhlIGRyaXZlciBpcyBub3cgc3RhYmxlLiAgSG93ZXZlciwgaXQgZG9lc24ndCBrbm93IGFib3V0IG1hbnkgVFYgY2FyZHMsCithbmQgaXQgcmVmdXNlcyB0byBsb2FkIGZvciBjYXJkcyBpdCBkb2Vzbid0IGtub3cuCisKK0lmIHRoZSBkcml2ZXIgY29tcGxhaW5zICgiVW5rbm93biBUViBjYXJkIGZvdW5kLCB0aGUgYXVkaW8gZHJpdmVyIHdpbGwKK25vdCBsb2FkIiksIHlvdSBjYW4gc3BlY2lmeSB0aGUgbG9hZF9hbGw9MSBvcHRpb24gdG8gZm9yY2UgdGhlIGRyaXZlciB0bwordHJ5IHRvIHVzZSB0aGUgYXVkaW8gY2FwdHVyZSBmdW5jdGlvbiBvZiB5b3VyIGNhcmQuICBJZiB0aGUgZnJlcXVlbmN5IG9mCityZWNvcmRlZCBkYXRhIGlzIG5vdCByaWdodCwgdHJ5IHRvIHNwZWNpZnkgdGhlIGRpZ2l0YWxfcmF0ZSBvcHRpb24gd2l0aAorb3RoZXIgdmFsdWVzIHRoYW4gdGhlIGRlZmF1bHQgMzIwMDAgKG9mdGVuIGl0J3MgNDQxMDAgb3IgNjQwMDApLgorCitJZiB5b3UgaGF2ZSBhbiB1bmtub3duIGNhcmQsIHBsZWFzZSBtYWlsIHRoZSBJRCBhbmQgYm9hcmQgbmFtZSB0bworPGFsc2EtZGV2ZWxAbGlzdHMuc2YubmV0PiwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGF1ZGlvIGNhcHR1cmUgd29ya3Mgb3IKK25vdCwgc28gdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIga25vdyBhYm91dCB5b3VyIGNhcmQuCisKKworQXVkaW8gbW9kZXMKKz09PT09PT09PT09CisKK1RoZSBjaGlwIGtub3dzIHR3byBkaWZmZXJlbnQgbW9kZXMgKGRpZ2l0YWwvYW5hbG9nKS4gIHNuZC1idDg3eAorcmVnaXN0ZXJzIHR3byBQQ00gZGV2aWNlcywgb25lIGZvciBlYWNoIG1vZGUuICBUaGV5IGNhbm5vdCBiZSB1c2VkIGF0Cit0aGUgc2FtZSB0aW1lLgorCisKK0RpZ2l0YWwgYXVkaW8gbW9kZQorPT09PT09PT09PT09PT09PT09CisKK1RoZSBmaXJzdCBkZXZpY2UgKGh3OlgsMCkgZ2l2ZXMgeW91IDE2IGJpdCBzdGVyZW8gc291bmQuICBUaGUgc2FtcGxlCityYXRlIGRlcGVuZHMgb24gdGhlIGV4dGVybmFsIHNvdXJjZSB3aGljaCBmZWVkcyB0aGUgQnQ4N3ggd2l0aCBkaWdpdGFsCitzb3VuZCB2aWEgSTJTIGludGVyZmFjZS4KKworCitBbmFsb2cgYXVkaW8gbW9kZSAoQS9EKQorPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHNlY29uZCBkZXZpY2UgKGh3OlgsMSkgZ2l2ZXMgeW91IDggb3IgMTYgYml0IG1vbm8gc291bmQuICBTdXBwb3J0ZWQKK3NhbXBsZSByYXRlcyBhcmUgYmV0d2VlbiAxMTk0NjYgYW5kIDQ0ODAwMCBIeiAoeWVzLCB0aGVzZSBudW1iZXJzIGFyZQordGhhdCBoaWdoKS4gIElmIHlvdSd2ZSBzZXQgdGhlIENPTkZJR19TTkRfQlQ4N1hfT1ZFUkNMT0NLIG9wdGlvbiwgdGhlCittYXhpbXVtIHNhbXBsZSByYXRlIGlzIDE3OTIwMDAgSHosIGJ1dCBhdWRpbyBkYXRhIGJlY29tZXMgdW51c2FibGUKK2JleW9uZCA4OTYwMDAgSHogb24gbXkgY2FyZC4KKworVGhlIGNoaXAgaGFzIHRocmVlIGFuYWxvZyBpbnB1dHMuICBDb25zZXF1ZW50bHkgeW91J2xsIGdldCBhIG1peGVyCitkZXZpY2UgdG8gY29udHJvbCB0aGVzZS4KKworCitIYXZlIGZ1biwKKworICBDbGVtZW5zCisKKworV3JpdHRlbiBieSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KK2JpZyBwYXJ0cyBjb3BpZWQgZnJvbSBidGF1ZGlvLnR4dCBieSBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQ01JUENJLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9DTUlQQ0kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhN2RmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQ01JUENJLnR4dApAQCAtMCwwICsxLDI0MiBAQAorICAgICAgICAgICAgICBCcmllZiBOb3RlcyBvbiBDLU1lZGlhIDg3MzgvODMzOCBEcml2ZXIKKyAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisKKworRnJvbnQvUmVhciBNdWx0aS1jaGFubmVsIFBsYXliYWNrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ004eDM4IGNoaXAgY2FuIHVzZSBBREMgYXMgdGhlIHNlY29uZCBEQUMgc28gdGhhdCB0d28gZGlmZmVyZW50IHN0ZXJlbworY2hhbm5lbHMgY2FuIGJlIHVzZWQgZm9yIGZyb250L3JlYXIgcGxheWJhY2tzLiAgU2luY2UgdGhlcmUgYXJlIHR3bworREFDcywgYm90aCBzdHJlYW1zIGFyZSBoYW5kbGVkIGluZGVwZW5kZW50bHkgdW5saWtlIHRoZSA0LzZjaCBtdWx0aS0KK2NoYW5uZWwgcGxheWJhY2tzIGluIHRoZSBzZWN0aW9uIGJlbG93LgorCitBcyBkZWZhdWx0LCBBTFNBIGRyaXZlciBhc3NpZ25zIHRoZSBmaXJzdCBQQ00gZGV2aWNlIChpLmUuIGh3OjAsMCBmb3IKK2NhcmQjMCkgZm9yIGZyb250IGFuZCA0LzZjaCBwbGF5YmFja3MsIHdoaWxlIHRoZSBzZWNvbmQgUENNIGRldmljZQorKGh3OjAsMSkgaXMgYXNzaWduZWQgdG8gdGhlIHNlY29uZCBEQUMgZm9yIHJlYXIgcGxheWJhY2suCisKK1RoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBEQUNzLgorCistIFRoZSBmaXJzdCBEQUMgc3VwcG9ydHMgVTggYW5kIFMxNkxFIGZvcm1hdHMsIHdoaWxlIHRoZSBzZWNvbmQgREFDCisgIHN1cHBvcnRzIG9ubHkgUzE2TEUuCistIFRoZSBzZWNvbmRlIERBQyBzdXBwb3J0cyBvbmx5IHR3byBjaGFubmVsIHN0ZXJlby4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgQ004eDM4IERBQyBkb2Vzbid0IHN1cHBvcnQgY29udGludW91cyBwbGF5YmFjaworcmF0ZSBidXQgb25seSBmaXhlZCByYXRlczogNTUxMiwgODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgMzIwMDAsCis0NDEwMCBhbmQgNDgwMDAgSHouCisKK1RoZSByZWFyIG91dHB1dCBjYW4gYmUgaGVhcmQgb25seSB3aGVuICJGb3VyIENoYW5uZWwgTW9kZSIgc3dpdGNoIGlzCitkaXNhYmxlZC4gIE90aGVyd2lzZSBubyBzaWduYWwgd2lsbCBiZSByb3V0ZWQgdG8gdGhlIHJlYXIgc3BlYWtlcnMuCitBcyBkZWZhdWx0IGl0J3MgdHVybmVkIG9uLgorCisqKiogV0FSTklORyAqKioKK1doZW4gIkZvdXIgQ2hhbm5lbCBNb2RlIiBzd2l0Y2ggaXMgb2ZmLCB0aGUgb3V0cHV0IGZyb20gcmVhciBzcGVha2Vycword2lsbCBiZSBGVUxMIFZPTFVNRSByZWdhcmRsZXNzIG9mIE1hc3RlciBhbmQgUENNIHZvbHVtZXMuCitUaGlzIG1pZ2h0IGRhbWFnZSB5b3VyIGF1ZGlvIGVxdWlwbWVudC4gIFBsZWFzZSBkaXNjb25uZWN0IHNwZWFrZXJzCitiZWZvcmUgeW91ciB0dXJuIG9mZiB0aGlzIHN3aXRjaC4KKyoqKiBXQVJOSU5HICoqKgorCitbIFdlbGwuLiBJIG9uY2UgZ290IHRoZSBvdXRwdXQgd2l0aCBjb3JyZWN0IHZvbHVtZSAoaS5lLiBzYW1lIHdpdGggdGhlCisgIGZyb250IG9uZSkgYW5kIHdhcyBzbyBleGNpdGVkLiAgSXQgd2FzIGV2ZW4gd2l0aCAiRm91ciBDaGFubmVsIiBiaXQKKyAgb24gYW5kICJkb3VibGUgREFDIiBtb2RlLiAgQWN0dWFsbHkgSSBjb3VsZCBoZWFyIHNlcGFyYXRlIDQgY2hhbm5lbHMKKyAgZnJvbSBmcm9udCBhbmQgcmVhciBzcGVha2VycyEgIEJ1dC4uIGFmdGVyIHJlYm9vdCwgYWxsIHdhcyBnb25lLgorICBJdCdzIGEgdmVyeSBwaXR5IHRoYXQgSSBkaWRuJ3Qgc2F2ZSB0aGUgcmVnaXN0ZXIgZHVtcCBhdCB0aGF0CisgIHRpbWUuLiAgTWF5YmUgdGhlcmUgaXMgYW4gdW5rbm93biByZWdpc3RlciB0byBhY2hpZXZlIHRoaXMuLi4gXQorCitJZiB5b3VyIGNhcmQgaGFzIGFuIGV4dHJhIG91dHB1dCBqYWNrIGZvciB0aGUgcmVhciBvdXRwdXQsIHRoZSByZWFyCitwbGF5YmFjayBzaG91bGQgYmUgcm91dGVkIHRoZXJlIGFzIGRlZmF1bHQuICBJZiBub3QsIHRoZXJlIGlzIGEKK2NvbnRyb2wgc3dpdGNoIGluIHRoZSBkcml2ZXIgIkxpbmUtSW4gQXMgUmVhciIsIHdoaWNoIHlvdSBjYW4gY2hhbmdlCit2aWEgYWxzYW1peGVyIG9yIHNvbWV3aGF0IGVsc2UuICBXaGVuIHRoaXMgc3dpdGNoIGlzIG9uLCBsaW5lLWluIGphY2sKK2lzIHVzZWQgYXMgcmVhciBvdXRwdXQuCisKK1RoZXJlIGFyZSB0d28gbW9yZSBjb250cm9scyByZWdhcmRpbmcgdG8gdGhlIHJlYXIgb3V0cHV0LgorVGhlICJFeGNoYW5nZSBEQUMiIHN3aXRjaCBpcyB1c2VkIHRvIGV4Y2hhbmdlIGZyb250IGFuZCByZWFyIHBsYXliYWNrCityb3V0ZXMsIGkuZS4gdGhlIDJuZCBEQUMgaXMgb3V0cHV0IGZyb20gZnJvbnQgb3V0cHV0LgorCisKKzQvNiBNdWx0aS1DaGFubmVsIFBsYXliYWNrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmVjZW50IENNODczOCBjaGlwcyBzdXBwb3J0IGZvciB0aGUgNC82IG11bHRpLWNoYW5uZWwgcGxheWJhY2sKK2Z1bmN0aW9uLiAgVGhpcyBpcyB1c2VmdWwgZXNwZWNpYWxseSBmb3IgQUMzIGRlY29kaW5nLgorCitXaGVuIHRoZSBtdWx0aS1jaGFubmVsIGlzIHN1cHBvcnRlZCwgdGhlIGRyaXZlciBuYW1lIGhhcyBhIHN1ZmZpeAorIi1NQyIgc3VjaCBsaWtlICJDTUk4NzM4LU1DNiIuICBZb3UgY2FuIGNoZWNrIHRoaXMgbmFtZSBmcm9tCisvcHJvYy9hc291bmQvY2FyZHMuCisKK1doZW4gdGhlIDQvNi1jaCBvdXRwdXQgaXMgZW5hYmxlZCwgdGhlIHNlY29uZCBEQUMgYWNjZXB0cyB1cCB0byA2IChvcgorNCkgY2hhbm5lbHMuICBXaGlsZSB0aGUgZHVhbCBEQUMgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCByYXRlcyBvcgorZm9ybWF0cywgdGhlIDQvNi1jaCBwbGF5YmFjayBzdXBwb3J0cyBvbmx5IHRoZSBzYW1lIGNvbmRpdGlvbiBmb3IgYWxsCitjaGFubmVscy4gIFNpbmNlIHRoZSBtdWx0aS1jaGFubmVsIHBsYXliYWNrIG1vZGUgdXNlcyBib3RoIERBQ3MsIHlvdQorY2Fubm90IG9wZXJhdGUgd2l0aCBmdWxsLWR1cGxleC4KKworVGhlIDQuMCBhbmQgNS4xIG1vZGVzIGFyZSBkZWZpbmVkIGFzIHRoZSBwY20gInN1cnJvdW5kNDAiIGFuZCAic3Vycm91bmQ1MSIKK2luIGFsc2EtbGliLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gcGxheSBhIFdBViBmaWxlIHdpdGggNiBjaGFubmVscyBsaWtlCisKKwklIGFwbGF5IC1Ec3Vycm91bmQ1MSBzaXhjaGFubmVscy53YXYKKworRm9yIHByb2dyYW1taW4gdGhlIDQvNiBjaGFubmVsIHBsYXliYWNrLCB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBQQ00KK2NoYW5uZWxzIGFzIHlvdSBsaWtlIGFuZCBzZXQgdGhlIGZvcm1hdCBTMTZMRS4gIEZvciBleGFtcGxlLCBmb3IgcGxheWJhY2sKK3dpdGggNCBjaGFubmVscywKKworCXNuZF9wY21faHdfcGFyYW1zX3NldF9hY2Nlc3MocGNtLCBodywgU05EX1BDTV9BQ0NFU1NfUldfSU5URVJMRUFWRUQpOworCSAgICAvLyBvciBtbWFwIGlmIHlvdSBsaWtlCisJc25kX3BjbV9od19wYXJhbXNfc2V0X2Zvcm1hdChwY20sIGh3LCBTTkRfUENNX0ZPUk1BVF9TMTZfTEUpOworCXNuZF9wY21faHdfcGFyYW1zX3NldF9jaGFubmVscyhwY20sIGh3LCA0KTsKKworYW5kIHVzZSB0aGUgaW50ZXJsZWF2ZWQgNCBjaGFubmVsIGRhdGEuCisKK1RoZXJlIGFyZSBzb21lIGNvbnRyb2wgc3dpdGNocyBhZmZlY3RpbmcgdG8gdGhlIHNwZWFrZXIgY29ubmVjdGlvbnM6CisKKyJMaW5lLUluIEFzIFJlYXIiCS0gQXMgbWVudGlvbmVkIGFib3ZlLCB0aGUgbGluZS1pbiBqYWNrIGlzIHVzZWQKKwlmb3IgdGhlIHJlYXIgKDN0aCBhbmQgNHRoIGNoYW5uZWxzKSBvdXRwdXQuCisiTGluZS1JbiBBcyBCYXNzIgktIFRoZSBsaW5lLWluIGphY2sgaXMgdXNlZCBmb3IgdGhlIGJhc3MgKDV0aAorCWFuZCA2dGggY2hhbm5lbHMpIG91dHB1dC4KKyJNaWMgQXMgQ2VudGVyL0xGRSIJLSBUaGUgbWljIGphY2sgaXMgdXNlZCBmb3IgdGhlIGJhc3Mgb3V0cHV0LgorCUlmIHRoaXMgc3dpdGNoIGlzIG9uLCB5b3UgY2Fubm90IHVzZSBhIG1pY3JvcGhvbmUgYXMgYSBjYXB0dXJlCisJc291cmNlLCBvZiBjb3Vyc2UuCisKKworRGlnaXRhbCBJL08KKy0tLS0tLS0tLS0tCisKK1RoZSBDTTh4MzggcHJvdmlkZXMgdGhlIGV4Y2VsbGVudCBTUERJRiBjYXBhYmlsaXR5IHdpdGggdmVyeSBjaGlwCitwcmljZSAoeWVzLCB0aGF0J3MgdGhlIHJlYXNvbiBJIGJvdWdodCB0aGUgY2FyZCA6KQorCitUaGUgU1BESUYgcGxheWJhY2sgYW5kIGNhcHR1cmUgYXJlIGRvbmUgdmlhIHRoZSB0aGlyZCBQQ00gZGV2aWNlCisoaHc6MCwyKS4gIFVzdWFsbHkgdGhpcyBpcyBhc3NpZ25lZCB0byB0aGUgUENNIGRldmljZSAic3BkaWYiLgorVGhlIGF2YWlsYWJsZSByYXRlcyBhcmUgNDQxMDAgYW5kIDQ4MDAwIEh6LgorRm9yIHBsYXliYWNrIHdpdGggYXBsYXksIHlvdSBjYW4gcnVuIGxpa2UgYmVsb3c6CisKKwklIGFwbGF5IC1EaHc6MCwyIGZvby53YXYKKworb3IKKworCSUgYXBsYXkgLURzcGRpZiBmb28ud2F2CisKKzI0Yml0IGZvcm1hdCBpcyBhbHNvIHN1cHBvcnRlZCBleHBlcmltZW50YWxseS4KKworVGhlIHBsYXliYWNrIGFuZCBjYXB0dXJlIG92ZXIgU1BESUYgdXNlIG5vcm1hbCBEQUMgYW5kIEFEQywKK3Jlc3BlY3RpdmVseSwgc28geW91IGNhbm5vdCBwbGF5YmFjayBib3RoIGFuYWxvZyBhbmQgZGlnaXRhbCBzdHJlYW1zCitzaW11bHRhbmVvdXNseS4KKworVG8gZW5hYmxlIFNQRElGIG91dHB1dCwgeW91IG5lZWQgdG8gdHVybiBvbiAiSUVDOTU4IE91dHB1dCBTd2l0Y2giCitjb250cm9sIHZpYSBtaXhlciBvciBhbHNhY3RsLiAgVGhlbiB5b3UnbGwgc2VlIHRoZSByZWQgbGlnaHQgb24gZnJvbQordGhlIGNhcmQgc28geW91IGtub3cgdGhhdCdzIHdvcmtpbmcgb2J2aW91c2x5IDopCitUaGUgU1BESUYgaW5wdXQgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIHlvdSBjYW4gaGVhciBTUERJRiBpbnB1dCBkYXRhCitmcm9tIGxpbmUtb3V0IHdpdGggIklFQzk1OCBJbiBNb25pdG9yIiBzd2l0Y2ggYXQgYW55IHRpbWUgKHNlZQorYmVsb3cpLgorCitZb3UgY2FuIHBsYXkgdmlhIFNQRElGIGV2ZW4gd2l0aCB0aGUgZmlyc3QgZGV2aWNlIChodzowLDApLAorYnV0IFNQRElGIGlzIGVuYWJsZWQgb25seSB3aGVuIHRoZSBwcm9wZXIgZm9ybWF0IChTMTZMRSksIHNhbXBsZSByYXRlCisoNDQxMTAwIG9yIDQ4MDAwKSBhbmQgY2hhbm5lbHMgKDIpIGFyZSB1c2VkLiAgT3RoZXJ3aXNlIGl0J3MgdHVybmVkCitvZmYuICAoQWxzbyBkb24ndCBmb3JnZXQgdG8gdHVybiBvbiAiSUVDOTU4IE91dHB1dCBTd2l0Y2giLCB0b28uKQorCisKK0FkZGl0aW9uYWxseSB0aGVyZSBhcmUgcmVsZXZhbnQgY29udHJvbCBzd2l0Y2hlczoKKworIklFQzk1OCBNaXggQW5hbG9nIiAtIE1peCBhbmFsb2cgUENNIHBsYXliYWNrIGFuZCBGTS1PUEwvMyBzdHJlYW1zIGFuZAorCW91dHB1dCB0aHJvdWdoIFNQRElGLiAgVGhpcyBzd2l0Y2ggYXBwZWFycyBvbmx5IG9uIG9sZCBjaGlwCisJbW9kZWxzIChDTTg3MzggMDMzIGFuZCAwMzcpLgorCU5vdGU6IHdpdGhvdXQgdGhpcyBjb250cm9sIHlvdSBjYW4gb3V0cHV0IFBDTSB0byBTUERJRi4KKwlUaGlzIGlzICJtaXhpbmciIG9mIHN0cmVhbXMsIHNvIGUuZy4gaXQncyBub3QgZm9yIEFDMyBvdXRwdXQKKwkoc2VlIHRoZSBuZXh0IHNlY3Rpb24pLgorCisiSUVDOTU4IEluIFNlbGVjdCIgIC0gU2VsZWN0IFNQRElGIGlucHV0LCB0aGUgaW50ZXJuYWwgQ0QtaW4gKGZhbHNlKQorCWFuZCB0aGUgZXh0ZXJuYWwgaW5wdXQgKHRydWUpLgorCisiSUVDOTU4IExvb3AiICAgICAgIC0gU1BESUYgaW5wdXQgZGF0YSBpcyBsb29wIGJhY2sgaW50byBTUERJRgorCW91dHB1dCAoYWthIGJ5cGFzcykKKworIklFQzk1OCBDb3B5cmlnaHQiICAtIFNldCB0aGUgY29weXJpZ2h0IGJpdC4KKworIklFQzk1OCA1ViIgICAgICAgICAtIFNlbGVjdCAwLjVWIChjb2F4KSBvciA1ViAob3B0aWNhbCkgaW50ZXJmYWNlLgorCU9uIHNvbWUgY2FyZHMgdGhpcyBkb2Vzbid0IHdvcmsgYW5kIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUKKwljb25maWd1cmF0aW9uIHdpdGggaGFyZHdhcmUgZGlwLXN3aXRjaC4KKworIklFQzk1OCBJbiBNb25pdG9yIiAtIFNQRElGIGlucHV0IGlzIHJvdXRlZCB0byBEQUMuCisKKyJJRUM5NTggSW4gUGhhc2UgSW52ZXJzZSIgLSBTZXQgU1BESUYgaW5wdXQgZm9ybWF0IGFzIGludmVyc2UuCisJW0ZJWE1FOiB0aGlzIGRvZXNuJ3Qgd29yayBvbiBhbGwgY2hpcHMuLl0KKworIklFQzk1OCBJbiBWYWxpZCIgICAtIFNldCBpbnB1dCB2YWxpZGl0eSBmbGFnIGRldGVjdGlvbi4KKworTm90ZTogV2hlbiAiUENNIFBsYXliYWNrIFN3aXRjaCIgaXMgb24sIHlvdSdsbCBoZWFyIHRoZSBkaWdpdGFsIG91dHB1dAorc3RyZWFtIHRocm91Z2ggYW5hbG9nIGxpbmUtb3V0LgorCisKK1RoZSBBQzMgKFJBVyBESUdJVEFMKSBPVVRQVVQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyByYXcgZGlnaXRhbCAodHlwaWNhbGx5IEFDMykgaS9vIG92ZXIgU1BESUYuICBUaGlzCitjYW4gYmUgdG9nZ2xlZCB2aWEgSUVDOTU4IHBsYXliYWNrIGNvbnRyb2wsIGJ1dCB1c3VhbGx5IHlvdSBuZWVkIHRvCithY2Nlc3MgaXQgdmlhIGFsc2EtbGliLiAgU2VlIGFsc2EtbGliIGRvY3VtZW50cyBmb3IgbW9yZSBkZXRhaWxzLgorCitPbiB0aGUgcmF3IGRpZ2l0YWwgbW9kZSwgdGhlICJQQ00gUGxheWJhY2sgU3dpdGNoIiBpcyBhdXRvbWF0aWNhbGx5Cit0dXJuZWQgb2ZmIHNvIHRoYXQgbm9uLWF1ZGlvIGRhdGEgaXMgaGVhcmQgZnJvbSB0aGUgYW5hbG9nIGxpbmUtb3V0LgorU2ltaWxhcmx5IHRoZSBmb2xsb3dpbmcgc3dpdGNoZXMgYXJlIG9mZjogIklFQzk1OCBNaXggQW5hbG9nIiBhbmQKKyJJRUM5NTggTG9vcCIuICBUaGUgc3dpdGNoZXMgYXJlIHJlc3VtZWQgYWZ0ZXIgY2xvc2luZyB0aGUgU1BESUYgUENNCitkZXZpY2UgYXV0b21hdGljYWxseSB0byB0aGUgcHJldmlvdXMgc3RhdGUuCisKK09uIHRoZSBtb2RlbCAwMzMsIEFDMyBpcyBpbXBsZW1lbnRlZCBieSB0aGUgc29mdHdhcmUgY29udmVyc2lvbiBpbgordGhlIGFsc2EtbGliLiAgSWYgeW91IG5lZWQgdG8gYnlwYXNzIHRoZSBzb2Z0d2FyZSBjb252ZXJzaW9uIG9mIElFQzk1OAorc3ViZnJhbWVzLCBwYXNzIHRoZSAic29mdF9hYzM9MCIgbW9kdWxlIG9wdGlvbi4gIFRoaXMgZG9lc24ndCBtYXR0ZXIKK29uIHRoZSBuZXdlciBtb2RlbHMuCisKKworQU5BTE9HIE1JWEVSIElOVEVSRkFDRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWl4ZXIgaW50ZXJmYWNlIG9uIENNOHgzOCBpcyBzaW1pbGFyIHRvIFNCMTYuCitUaGVyZSBhcmUgTWFzdGVyLCBQQ00sIFN5bnRoLCBDRCwgTGluZSwgTWljIGFuZCBQQyBTcGVha2VyIHBsYXliYWNrCit2b2x1bWVzLiAgU3ludGgsIENELCBMaW5lIGFuZCBNaWMgaGF2ZSBwbGF5YmFjayBhbmQgY2FwdHVyZSBzd2l0Y2hlcywKK3RvbywgYXMgd2VsbCBhcyBTQjE2LgorCitJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgU0IgbWl4ZXIsIENNOHgzOCBwcm92aWRlcyBtb3JlIGZ1bmN0aW9ucy4KKy0gUENNIHBsYXliYWNrIHN3aXRjaAorLSBQQ00gY2FwdHVyZSBzd2l0Y2ggKHRvIGNhcHR1cmUgdGhlIGRhdGEgc2VudCB0byBEQUMpCistIE1pYyBCb29zdCBzd2l0Y2gKKy0gTWljIGNhcHR1cmUgdm9sdW1lCistIEF1eCBwbGF5YmFjayB2b2x1bWUvc3dpdGNoIGFuZCBjYXB0dXJlIHN3aXRjaAorLSAzRCBjb250cm9sIHN3aXRjaAorCisKK01JREkgQ09OVFJPTExFUgorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBNUFU0MDEtVUFSVCBpbnRlcmZhY2UgaXMgZW5hYmxlZCBhcyBkZWZhdWx0IG9ubHkgZm9yIHRoZSBmaXJzdAorKENNSVBDSSkgY2FyZC4gIFlvdSBuZWVkIHRvIHNldCBtb2R1bGUgb3B0aW9uICJtaWRpX3BvcnQiIHByb3Blcmx5Citmb3IgdGhlIDJuZCAoQ01JUENJKSBjYXJkLgorCitUaGVyZSBpcyBfbm9fIGhhcmR3YXJlIHdhdmV0YWJsZSBmdW5jdGlvbiBvbiB0aGlzIGNoaXAgKGV4Y2VwdCBmb3IKK09QTDMgc3ludGggYmVsb3cpLgorV2hhdCdzIHNhaWQgYXMgTUlESSBzeW50aCBvbiBXaW5kb3dzIGlzIGEgc29mdHdhcmUgc3ludGhlc2l6ZXIKK2VtdWxhdGlvbi4gIE9uIExpbnV4IHVzZSBUaU1pZGl0eSBvciBvdGhlciBzb2Z0c3ludGggcHJvZ3JhbSBmb3IKK3BsYXlpbmcgTUlESSBtdXNpYy4KKworCitGTSBPUEwvMyBTeW50aAorLS0tLS0tLS0tLS0tLS0KKworVGhlIEZNIE9QTC8zIGlzIGFsc28gZW5hYmxlZCBhcyBkZWZhdWx0IG9ubHkgZm9yIHRoZSBmaXJzdCBjYXJkLgorU2V0ICJmbV9wb3J0IiBtb2R1bGUgb3B0aW9uIGZvciBtb3JlIGNhcmRzLgorCitUaGUgb3V0cHV0IHF1YWxpdHkgb2YgRk0gT1BMLzMgaXMsIGhvd2V2ZXIsIHZlcnkgd2VpcmQuCitJIGRvbid0IGtub3cgd2h5Li4KKworCitKb3lzdGljayBhbmQgTW9kZW0KKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgam95c3RpY2sgYW5kIG1vZGVtIHNob3VsZCBiZSBhdmFpbGFibGUgYnkgZW5hYmxpbmcgdGhlIGNvbnRyb2wKK3N3aXRjaCAiSm95c3RpY2siIGFuZCAiTW9kZW0iIHJlc3BlY3RpdmVseS4gIEJ1dCBJIG15c2VsZiBoYXZlIG5ldmVyCit0ZXN0ZWQgdGhlbSB5ZXQuCisKKworRGVidWdnaW5nIEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlZ2lzdGVycyBhcmUgc2hvd24gaW4gL3Byb2MvYXNvdW5kL2NhcmRYL2NtaXBjaS4gIElmIHlvdSBoYXZlIGFueQorcHJvYmxlbSAoZXNwZWNpYWxseSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9mIG1peGVyKSwgcGxlYXNlIGF0dGFjaCB0aGUKK291dHB1dCBvZiB0aGlzIHByb2MgZmlsZSB0b2dldGhlciB3aXRoIHRoZSBidWcgcmVwb3J0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NvbnRyb2xOYW1lcy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQ29udHJvbE5hbWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE4Mjk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NvbnRyb2xOYW1lcy50eHQKQEAgLTAsMCArMSw4NCBAQAorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgc3RhbmRhcmQgbmFtZXMgb2YgbWl4ZXIgY29udHJvbHMuCisKK1N5bnRheDogU09VUkNFIFtESVJFQ1RJT05dIEZVTkNUSU9OCisKK0RJUkVDVElPTjoKKyAgPG5vdGhpbmc+CShib3RoIGRpcmVjdGlvbnMpCisgIFBsYXliYWNrCisgIENhcHR1cmUKKyAgQnlwYXNzIFBsYXliYWNrCisgIEJ5cGFzcyBDYXB0dXJlCisKK0ZVTkNUSU9OOgorICBTd2l0Y2gJKG9uL29mZiBzd2l0Y2gpCisgIFZvbHVtZQorICBSb3V0ZQkJKHJvdXRlIGNvbnRyb2wsIGhhcmR3YXJlIHNwZWNpZmljKQorCitTT1VSQ0U6CisgIE1hc3RlcgorICBNYXN0ZXIgTW9ubworICBIYXJkd2FyZSBNYXN0ZXIKKyAgSGVhZHBob25lCisgIFBDIFNwZWFrZXIKKyAgUGhvbmUKKyAgUGhvbmUgSW5wdXQKKyAgUGhvbmUgT3V0cHV0CisgIFN5bnRoCisgIEZNCisgIE1pYworICBMaW5lCisgIENECisgIFZpZGVvCisgIFpvb20gVmlkZW8KKyAgQXV4CisgIFBDTQorICBQQ00gRnJvbnQKKyAgUENNIFJlYXIKKyAgUENNIFBhbgorICBMb29wYmFjaworICBBbmFsb2cgTG9vcGJhY2sJKEQvQSAtPiBBL0QgbG9vcGJhY2spCisgIERpZ2l0YWwgTG9vcGJhY2sJKHBsYXliYWNrIC0+IGNhcHR1cmUgbG9vcGJhY2sgLSB3aXRob3V0IGFuYWxvZyBwYXRoKQorICBNb25vCisgIE1vbm8gT3V0cHV0CisgIE11bHRpCisgIEFEQworICBXYXZlCisgIE11c2ljCisgIEkyUworICBJRUM5NTgKKworRXhjZXB0aW9uczoKKyAgW0RpZ2l0YWxdIENhcHR1cmUgU291cmNlCisgIFtEaWdpdGFsXSBDYXB0dXJlIFN3aXRjaAkoYWthIGlucHV0IGdhaW4gc3dpdGNoKQorICBbRGlnaXRhbF0gQ2FwdHVyZSBWb2x1bWUJKGFrYSBpbnB1dCBnYWluIHZvbHVtZSkKKyAgW0RpZ2l0YWxdIFBsYXliYWNrIFN3aXRjaAkoYWthIG91dHB1dCBnYWluIHN3aXRjaCkKKyAgW0RpZ2l0YWxdIFBsYXliYWNrIFZvbHVtZQkoYWthIG91dHB1dCBnYWluIHZvbHVtZSkKKyAgVG9uZSBDb250cm9sIC0gU3dpdGNoCisgIFRvbmUgQ29udHJvbCAtIEJhc3MKKyAgVG9uZSBDb250cm9sIC0gVHJlYmxlCisgIDNEIENvbnRyb2wgLSBTd2l0Y2gKKyAgM0QgQ29udHJvbCAtIENlbnRlcgorICAzRCBDb250cm9sIC0gRGVwdGgKKyAgM0QgQ29udHJvbCAtIFdpZGUKKyAgM0QgQ29udHJvbCAtIFNwYWNlCisgIDNEIENvbnRyb2wgLSBMZXZlbAorICBNaWMgQm9vc3QgWyg/ZEIpXQorCitQQ00gaW50ZXJmYWNlOgorCisgIFNhbXBsZSBDbG9jayBTb3VyY2UJeyAiV29yZCIsICJJbnRlcm5hbCIsICJBdXRvU3luYyIgfQorICBDbG9jayBTeW5jIFN0YXR1cwl7ICJMb2NrIiwgIlN5bmMiLCAiTm8gTG9jayIgfQorICBFeHRlcm5hbCBSYXRlCQkvKiBleHRlcm5hbCBjYXB0dXJlIHJhdGUgKi8KKyAgQ2FwdHVyZSBSYXRlCQkvKiBjYXB0dXJlIHJhdGUgdGFrZW4gZnJvbSBleHRlcm5hbCBzb3VyY2UgKi8KKworSUVDOTU4IChTL1BESUYpIGludGVyZmFjZToKKworICBJRUM5NTggWy4uLl0gW1BsYXliYWNrfENhcHR1cmVdIFN3aXRjaAkvKiB0dXJuIG9uL29mZiB0aGUgSUVDOTU4IGludGVyZmFjZSAqLworICBJRUM5NTggWy4uLl0gW1BsYXliYWNrfENhcHR1cmVdIFZvbHVtZQkvKiBkaWdpdGFsIHZvbHVtZSBjb250cm9sICovCisgIElFQzk1OCBbLi4uXSBbUGxheWJhY2t8Q2FwdHVyZV0gRGVmYXVsdAkvKiBkZWZhdWx0IG9yIGdsb2JhbCB2YWx1ZSAtIHJlYWQvd3JpdGUgKi8KKyAgSUVDOTU4IFsuLi5dIFtQbGF5YmFja3xDYXB0dXJlXSBNYXNrCQkvKiBjb25zdW1lciBhbmQgcHJvZmVzc2lvbmFsIG1hc2sgKi8KKyAgSUVDOTU4IFsuLi5dIFtQbGF5YmFja3xDYXB0dXJlXSBDb24gTWFzawkvKiBjb25zdW1lciBtYXNrICovCisgIElFQzk1OCBbLi4uXSBbUGxheWJhY2t8Q2FwdHVyZV0gUHJvIE1hc2sJLyogcHJvZmVzc2lvbmFsIG1hc2sgKi8KKyAgSUVDOTU4IFsuLi5dIFtQbGF5YmFja3xDYXB0dXJlXSBQQ00gU3RyZWFtCS8qIHRoZSBzZXR0aW5ncyBhc3NpZ25lZCB0byBhIFBDTSBzdHJlYW0gKi8KKyAgSUVDOTU4IFEtc3ViY29kZSBbUGxheWJhY2t8Q2FwdHVyZV0gRGVmYXVsdAkvKiBRLXN1YmNvZGUgYml0cyAqLworICBJRUM5NTggUHJlYW1ibGUgW1BsYXliYWNrfENhcHR1cmVdIERlZmF1bHQJLyogYnVyc3QgcHJlYW1ibGUgd29yZHMgKDQqMTZiaXRzKSAqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjNhZTNlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwKQEAgLTAsMCArMSwxMDAgQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFY0LjEvL0VOIj4KKworPGJvb2s+Cis8P2RiaHRtbCBmaWxlbmFtZT0iaW5kZXguaHRtbCI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBIZWFkZXIgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxib29raW5mbz4KKyAgICA8dGl0bGU+VGhlIEFMU0EgRHJpdmVyIEFQSTwvdGl0bGU+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudCBpcyBmcmVlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoaXMgZG9jdW1lbnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgPGVtcGhhc2lzPldJVEhPVVQgQU5ZIFdBUlJBTlRZPC9lbXBoYXNpcz47IHdpdGhvdXQgZXZlbiB0aGUKKyAgICBpbXBsaWVkIHdhcnJhbnR5IG9mIDxlbXBoYXNpcz5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICAgIFBBUlRJQ1VMQVIgUFVSUE9TRTwvZW1waGFzaXM+LiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgZm9yIG1vcmUgZGV0YWlscy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgIDwvYm9va2luZm8+CisKKyAgPGNoYXB0ZXI+PHRpdGxlPk1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIERldmljZXM8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkNhcmQgTWFuYWdtZW50PC90aXRsZT4KKyFFc291bmQvY29yZS9pbml0LmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgQ29tcG9uZW50czwvdGl0bGU+CishRXNvdW5kL2NvcmUvZGV2aWNlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5LTU9EIGFuZCBEZXZpY2UgRmlsZSBFbnRyaWVzPC90aXRsZT4KKyFFc291bmQvY29yZS9zb3VuZC5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+TWVtb3J5IE1hbmFnZW1lbnQgSGVscGVyczwvdGl0bGU+CishRXNvdW5kL2NvcmUvbWVtb3J5LmMKKyFFc291bmQvY29yZS9tZW1hbGxvYy5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPlBDTSBBUEk8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPlBDTSBDb3JlPC90aXRsZT4KKyFFc291bmQvY29yZS9wY20uYworIUVzb3VuZC9jb3JlL3BjbV9saWIuYworIUVzb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPlBDTSBGb3JtYXQgSGVscGVyczwvdGl0bGU+CishRXNvdW5kL2NvcmUvcGNtX21pc2MuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPlBDTSBNZW1vcnkgTWFuYWdtZW50PC90aXRsZT4KKyFFc291bmQvY29yZS9wY21fbWVtb3J5LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+Q29udHJvbC9NaXhlciBBUEk8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkdlbmVyYWwgQ29udHJvbCBJbnRlcmZhY2U8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2NvbnRyb2wuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkFDOTcgQ29kZWMgQVBJPC90aXRsZT4KKyFFc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCishRXNvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+TUlESSBBUEk8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPlJhdyBNSURJIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvcmF3bWlkaS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+TVBVNDAxLVVBUlQgQVBJPC90aXRsZT4KKyFFc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxX3VhcnQuYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyPjx0aXRsZT5Qcm9jIEluZm8gQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Qcm9jIEluZm8gSW50ZXJmYWNlPC90aXRsZT4KKyFFc291bmQvY29yZS9pbmZvLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+TWlzY2VsbGFuZW91cyBGdW5jdGlvbnM8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkhhcmR3YXJlLURlcGVuZGVudCBEZXZpY2VzIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvaHdkZXAuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPklTQSBETUEgSGVscGVyczwvdGl0bGU+CishRXNvdW5kL2NvcmUvaXNhZG1hLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5PdGhlciBIZWxwZXIgTWFjcm9zPC90aXRsZT4KKyFJaW5jbHVkZS9zb3VuZC9jb3JlLmgKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4OTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApAQCAtMCwwICsxLDYwNDUgQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFY0LjEvL0VOIj4KKworPGJvb2s+Cis8P2RiaHRtbCBmaWxlbmFtZT0iaW5kZXguaHRtbCI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBIZWFkZXIgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxib29raW5mbz4KKyAgICA8dGl0bGU+V3JpdGluZyBhbiBBTFNBIERyaXZlcjwvdGl0bGU+CisgICAgPGF1dGhvcj4KKyAgICAgIDxmaXJzdG5hbWU+VGFrYXNoaTwvZmlyc3RuYW1lPgorICAgICAgPHN1cm5hbWU+SXdhaTwvc3VybmFtZT4KKyAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgPGFkZHJlc3M+CisgICAgICAgICAgPGVtYWlsPnRpd2FpQHN1c2UuZGU8L2VtYWlsPgorICAgICAgICA8L2FkZHJlc3M+CisgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICA8L2F1dGhvcj4KKworICAgICA8ZGF0ZT5NYXJjaCA2LCAyMDA1PC9kYXRlPgorICAgICA8ZWRpdGlvbj4wLjMuNDwvZWRpdGlvbj4KKworICAgIDxhYnN0cmFjdD4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUgYW4gQUxTQSAoQWR2YW5jZWQgTGludXgKKyAgICAgICAgU291bmQgQXJjaGl0ZWN0dXJlKSBkcml2ZXIuCisgICAgICA8L3BhcmE+CisgICAgPC9hYnN0cmFjdD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICA8cGFyYT4KKyAgICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCAgVGFrYXNoaSBJd2FpIDxlbWFpbD50aXdhaUBzdXNlLmRlPC9lbWFpbD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGlzIGRvY3VtZW50IGlzIGZyZWU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCA8ZW1waGFzaXM+V0lUSE9VVCBBTlkgV0FSUkFOVFk8L2VtcGhhc2lzPjsgd2l0aG91dCBldmVuIHRoZQorICAgIGltcGxpZWQgd2FycmFudHkgb2YgPGVtcGhhc2lzPk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgICAgUEFSVElDVUxBUiBQVVJQT1NFPC9lbXBoYXNpcz4uIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBmb3IgbW9yZSBkZXRhaWxzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICAgPC9wYXJhPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgPC9ib29raW5mbz4KKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFByZWZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxwcmVmYWNlIGlkPSJwcmVmYWNlIj4KKyAgICA8dGl0bGU+UHJlZmFjZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUgYW4KKyAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZy8iPjxjaXRldGl0bGU+CisgICAgICBBTFNBIChBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUpPC9jaXRldGl0bGU+PC91bGluaz4KKyAgICAgIGRyaXZlci4gVGhlIGRvY3VtZW50IGZvY3VzZXMgbWFpbmx5IG9uIHRoZSBQQ0kgc291bmRjYXJkLgorICAgICAgSW4gdGhlIGNhc2Ugb2Ygb3RoZXIgZGV2aWNlIHR5cGVzLCB0aGUgQVBJIG1pZ2h0CisgICAgICBiZSBkaWZmZXJlbnQsIHRvby4gSG93ZXZlciwgYXQgbGVhc3QgdGhlIEFMU0Ega2VybmVsIEFQSSBpcworICAgICAgY29uc2lzdGVudCwgYW5kIHRoZXJlZm9yZSBpdCB3b3VsZCBiZSBzdGlsbCBhIGJpdCBoZWxwIGZvcgorICAgICAgd3JpdGluZyB0aGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSB0YXJnZXQgb2YgdGhpcyBkb2N1bWVudCBpcyBvbmVzIHdobyBhbHJlYWR5IGhhdmUgZW5vdWdoCisgICAgc2tpbGwgb2YgQyBsYW5ndWFnZSBhbmQgaGF2ZSB0aGUgYmFzaWMga25vd2xlZGdlIG9mIGxpbnV4CisgICAga2VybmVsIHByb2dyYW1taW5nLiAgVGhpcyBkb2N1bWVudCBkb2Vzbid0IGV4cGxhaW4gdGhlIGdlbmVyYWwKKyAgICB0b3BpY3Mgb2YgbGludXgga2VybmVsIGNvZGVzIGFuZCBkb2Vzbid0IGNvdmVyIHRoZSBkZXRhaWwgb2YKKyAgICBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIGxvdy1sZXZlbCBkcml2ZXIuICBJdCBkZXNjcmliZXMgb25seSBob3cgaXMKKyAgICB0aGUgc3RhbmRhcmQgd2F5IHRvIHdyaXRlIGEgUENJIHNvdW5kIGRyaXZlciBvbiBBTFNBLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgeW91IGFyZSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIG9sZGVyIEFMU0EgdmVyLjAuNS54LCB5b3UKKyAgICBjYW4gY2hlY2sgdGhlIGRyaXZlcnMgc3VjaCBhcyA8ZmlsZW5hbWU+ZXMxOTM4LmM8L2ZpbGVuYW1lPiBvcgorICAgIDxmaWxlbmFtZT5tYWVzdHJvMy5jPC9maWxlbmFtZT4gd2hpY2ggaGF2ZSBhbHNvIGFsbW9zdCB0aGUgc2FtZQorICAgIGNvZGUtYmFzZSBpbiB0aGUgQUxTQSAwLjUueCB0cmVlLCBzbyB5b3UgY2FuIGNvbXBhcmUgdGhlIGRpZmZlcmVuY2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhpcyBkb2N1bWVudCBpcyBzdGlsbCBhIGRyYWZ0IHZlcnNpb24uIEFueSBmZWVkYmFja3MgYW5kCisgICAgY29ycmVjdGlvbnMsIHBsZWFzZSEhCisgICAgPC9wYXJhPgorICA8L3ByZWZhY2U+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIEZpbGUgVHJlZSBTdHJ1Y3R1cmUgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJmaWxlLXRyZWUiPgorICAgIDx0aXRsZT5GaWxlIFRyZWUgU3RydWN0dXJlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZ2VuZXJhbCI+CisgICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIEFMU0EgZHJpdmVycyBhcmUgcHJvdmlkZWQgaW4gdGhlIHR3byB3YXlzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgT25lIGlzIHRoZSB0cmVlcyBwcm92aWRlZCBhcyBhIHRhcmJhbGwgb3IgdmlhIGN2cyBmcm9tIHRoZQorICAgICAgQUxTQSdzIGZ0cCBzaXRlLCBhbmQgYW5vdGhlciBpcyB0aGUgMi42IChvciBsYXRlcikgTGludXgga2VybmVsCisgICAgICB0cmVlLiBUbyBzeW5jaHJvbml6ZSBib3RoLCB0aGUgQUxTQSBkcml2ZXIgdHJlZSBpcyBzcGxpdCBpbnRvCisgICAgICB0d28gZGlmZmVyZW50IHRyZWVzOiBhbHNhLWtlcm5lbCBhbmQgYWxzYS1kcml2ZXIuIFRoZSBmb3JtZXIKKyAgICAgIGNvbnRhaW5zIHB1cmVseSB0aGUgc291cmNlIGNvZGVzIGZvciB0aGUgTGludXggMi42IChvciBsYXRlcikKKyAgICAgIHRyZWUuIFRoaXMgdHJlZSBpcyBkZXNpZ25lZCBvbmx5IGZvciBjb21waWxhdGlvbiBvbiAyLjYgb3IKKyAgICAgIGxhdGVyIGVudmlyb25tZW50LiBUaGUgbGF0dGVyLCBhbHNhLWRyaXZlciwgY29udGFpbnMgbWFueSBzdWJ0bGUKKyAgICAgIGZpbGVzIGZvciBjb21waWxpbmcgdGhlIEFMU0EgZHJpdmVyIG9uIHRoZSBvdXRzaWRlIG9mIExpbnV4CisgICAgICBrZXJuZWwgbGlrZSBjb25maWd1cmUgc2NyaXB0LCB0aGUgd3JhcHBlciBmdW5jdGlvbnMgZm9yIG9sZGVyLAorICAgICAgMi4yIGFuZCAyLjQga2VybmVscywgdG8gYWRhcHQgdGhlIGxhdGVzdCBrZXJuZWwgQVBJLAorICAgICAgYW5kIGFkZGl0aW9uYWwgZHJpdmVycyB3aGljaCBhcmUgc3RpbGwgaW4gZGV2ZWxvcG1lbnQgb3IgaW4KKyAgICAgIHRlc3RzLiAgVGhlIGRyaXZlcnMgaW4gYWxzYS1kcml2ZXIgdHJlZSB3aWxsIGJlIG1vdmVkIHRvCisgICAgICBhbHNhLWtlcm5lbCAoZXZlbnR1YWxseSAyLjYga2VybmVsIHRyZWUpIG9uY2Ugd2hlbiB0aGV5IGFyZQorICAgICAgZmluaXNoZWQgYW5kIGNvbmZpcm1lZCB0byB3b3JrIGZpbmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZmlsZSB0cmVlIHN0cnVjdHVyZSBvZiBBTFNBIGRyaXZlciBpcyBkZXBpY3RlZCBiZWxvdy4gQm90aAorICAgICAgICBhbHNhLWtlcm5lbCBhbmQgYWxzYS1kcml2ZXIgaGF2ZSBhbG1vc3QgdGhlIHNhbWUgZmlsZQorICAgICAgICBzdHJ1Y3R1cmUsIGV4Y2VwdCBmb3IgPHF1b3RlPmNvcmU8L3F1b3RlPiBkaXJlY3RvcnkuIEl0J3MKKyAgICAgICAgbmFtZWQgYXMgPHF1b3RlPmFjb3JlPC9xdW90ZT4gaW4gYWxzYS1kcml2ZXIgdHJlZS4gCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPkFMU0EgRmlsZSBUcmVlIFN0cnVjdHVyZTwvdGl0bGU+CisgICAgICAgICAgPGxpdGVyYWxsYXlvdXQ+CisgICAgICAgIHNvdW5kCisgICAgICAgICAgICAgICAgL2NvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC9vc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC9zZXEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL29zcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvaW5zdHIKKyAgICAgICAgICAgICAgICAvaW9jdGwzMgorICAgICAgICAgICAgICAgIC9pbmNsdWRlCisgICAgICAgICAgICAgICAgL2RyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIC9tcHU0MDEKKyAgICAgICAgICAgICAgICAgICAgICAgIC9vcGwzCisgICAgICAgICAgICAgICAgL2kyYworICAgICAgICAgICAgICAgICAgICAgICAgL2wzCisgICAgICAgICAgICAgICAgL3N5bnRoCisgICAgICAgICAgICAgICAgICAgICAgICAvZW11eAorICAgICAgICAgICAgICAgIC9wY2kKKyAgICAgICAgICAgICAgICAgICAgICAgIC8oY2FyZHMpCisgICAgICAgICAgICAgICAgL2lzYQorICAgICAgICAgICAgICAgICAgICAgICAgLyhjYXJkcykKKyAgICAgICAgICAgICAgICAvYXJtCisgICAgICAgICAgICAgICAgL3BwYworICAgICAgICAgICAgICAgIC9zcGFyYworICAgICAgICAgICAgICAgIC91c2IKKyAgICAgICAgICAgICAgICAvcGNtY2lhIC8oY2FyZHMpCisgICAgICAgICAgICAgICAgL29zcworICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmNvcmUgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbWlkZGxlIGxheWVyLCB0aGF0IGlzLCB0aGUgaGVhcnQKKyAgICAgIG9mIEFMU0EgZHJpdmVycy4gSW4gdGhpcyBkaXJlY3RvcnksIHRoZSBuYXRpdmUgQUxTQSBtb2R1bGVzIGFyZQorICAgICAgc3RvcmVkLiBUaGUgc3ViLWRpcmVjdG9yaWVzIGNvbnRhaW4gZGlmZmVyZW50IG1vZHVsZXMgYW5kIGFyZQorICAgICAgZGVwZW5kZW50IHVwb24gdGhlIGtlcm5lbCBjb25maWcuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LW9zcyI+CisgICAgICAgIDx0aXRsZT5jb3JlL29zczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNvZGVzIGZvciBQQ00gYW5kIG1peGVyIE9TUyBlbXVsYXRpb24gbW9kdWxlcyBhcmUgc3RvcmVkCisgICAgICAgIGluIHRoaXMgZGlyZWN0b3J5LiBUaGUgcmF3bWlkaSBPU1MgZW11bGF0aW9uIGlzIGluY2x1ZGVkIGluCisgICAgICAgIHRoZSBBTFNBIHJhd21pZGkgY29kZSBzaW5jZSBpdCdzIHF1aXRlIHNtYWxsLiBUaGUgc2VxdWVuY2VyCisgICAgICAgIGNvZGUgaXMgc3RvcmVkIGluIGNvcmUvc2VxL29zcyBkaXJlY3RvcnkgKHNlZQorICAgICAgICA8bGluayBsaW5rZW5kPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktc2VxLW9zcyI+PGNpdGV0aXRsZT4KKyAgICAgICAgYmVsb3c8L2NpdGV0aXRsZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LWlvY3RsMzIiPgorICAgICAgICA8dGl0bGU+Y29yZS9pb2N0bDMyPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgMzJiaXQtaW9jdGwgd3JhcHBlcnMgZm9yIDY0Yml0CisgICAgICAgIGFyY2hpdGVjdHVyZXMgc3VjaCBsaWtlIHg4Ni02NCwgcHBjNjQgYW5kIHNwYXJjNjQuIEZvciAzMmJpdAorICAgICAgICBhbmQgYWxwaGEgYXJjaGl0ZWN0dXJlcywgdGhlc2UgYXJlIG5vdCBjb21waWxlZC4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1zZXEiPgorICAgICAgICA8dGl0bGU+Y29yZS9zZXE8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzIGFyZSBmb3IgdGhlIEFMU0EKKyAgICAgICAgc2VxdWVuY2VyLiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgc2VxdWVuY2VyIGNvcmUgYW5kCisgICAgICAgIHByaW1hcnkgc2VxdWVuY2VyIG1vZHVsZXMgc3VjaCBsaWtlIHNuZC1zZXEtbWlkaSwKKyAgICAgICAgc25kLXNlcS12aXJtaWRpLCBldGMuIFRoZXkgYXJlIGNvbXBpbGVkIG9ubHkgd2hlbgorICAgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9TRVFVRU5DRVI8L2NvbnN0YW50PiBpcyBzZXQgaW4gdGhlIGtlcm5lbAorICAgICAgICBjb25maWcuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktc2VxLW9zcyI+CisgICAgICAgIDx0aXRsZT5jb3JlL3NlcS9vc3M8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBPU1Mgc2VxdWVuY2VyIGVtdWxhdGlvbiBjb2Rlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LWRlcS1pbnN0ciI+CisgICAgICAgIDx0aXRsZT5jb3JlL3NlcS9pbnN0cjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBtb2R1bGVzIGZvciB0aGUgc2VxdWVuY2VyCisgICAgICAgIGluc3RydW1lbnQgbGF5ZXIuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pbmNsdWRlLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+aW5jbHVkZSBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgdGhlIHBsYWNlIGZvciB0aGUgcHVibGljIGhlYWRlciBmaWxlcyBvZiBBTFNBIGRyaXZlcnMsCisgICAgICB3aGljaCBhcmUgdG8gYmUgZXhwb3J0ZWQgdG8gdGhlIHVzZXItc3BhY2UsIG9yIGluY2x1ZGVkIGJ5CisgICAgICBzZXZlcmFsIGZpbGVzIGF0IGRpZmZlcmVudCBkaXJlY3Rvcmllcy4gQmFzaWNhbGx5LCB0aGUgcHJpdmF0ZQorICAgICAgaGVhZGVyIGZpbGVzIHNob3VsZCBub3QgYmUgcGxhY2VkIGluIHRoaXMgZGlyZWN0b3J5LCBidXQgeW91IG1heQorICAgICAgc3RpbGwgZmluZCBmaWxlcyB0aGVyZSwgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29uIDopIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZHJpdmVycy1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmRyaXZlcnMgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgY29kZXMgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBkcml2ZXJzCisgICAgICBvbiB0aGUgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuICBUaGV5IGFyZSBoZW5jZSBzdXBwb3NlZCBub3QgdG8gYmUKKyAgICAgIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4KKyAgICAgIEZvciBleGFtcGxlLCB0aGUgZHVtbXkgcGNtIGRyaXZlciBhbmQgdGhlIHNlcmlhbCBNSURJCisgICAgICBkcml2ZXIgYXJlIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5LiBJbiB0aGUgc3ViLWRpcmVjdG9yaWVzLAorICAgICAgdGhlcmUgYXJlIHRoZSBjb2RlcyBmb3IgY29tcG9uZW50cyB3aGljaCBhcmUgaW5kZXBlbmRlbnQgZnJvbQorICAgICAgYnVzIGFuZCBjcHUgYXJjaGl0ZWN0dXJlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZHJpdmVycy1kaXJlY3RvcnktbXB1NDAxIj4KKyAgICAgICAgPHRpdGxlPmRyaXZlcnMvbXB1NDAxPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIE1QVTQwMSBhbmQgTVBVNDAxLVVBUlQgbW9kdWxlcyBhcmUgc3RvcmVkIGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1kcml2ZXJzLWRpcmVjdG9yeS1vcGwzIj4KKyAgICAgICAgPHRpdGxlPmRyaXZlcnMvb3BsMyBhbmQgb3BsNDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBPUEwzIGFuZCBPUEw0IEZNLXN5bnRoIHN0dWZmIGlzIGZvdW5kIGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWkyYy1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmkyYyBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY29udGFpbnMgdGhlIEFMU0EgaTJjIGNvbXBvbmVudHMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbHRob3VnaCB0aGVyZSBpcyBhIHN0YW5kYXJkIGkyYyBsYXllciBvbiBMaW51eCwgQUxTQSBoYXMgaXRzCisgICAgICBvd24gaTJjIGNvZGVzIGZvciBzb21lIGNhcmRzLCBiZWNhdXNlIHRoZSBzb3VuZGNhcmQgbmVlZHMgb25seSBhCisgICAgICBzaW1wbGUgb3BlcmF0aW9uIGFuZCB0aGUgc3RhbmRhcmQgaTJjIEFQSSBpcyB0b28gY29tcGxpY2F0ZWQgZm9yCisgICAgICBzdWNoIGEgcHVycG9zZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtaTJjLWRpcmVjdG9yeS1sMyI+CisgICAgICAgIDx0aXRsZT5pMmMvbDM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIGEgc3ViLWRpcmVjdG9yeSBmb3IgQVJNIEwzIGkyYy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtc3ludGgtZGlyZWN0b3J5Ij4KKyAgICAgICAgPHRpdGxlPnN5bnRoIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY29udGFpbnMgdGhlIHN5bnRoIG1pZGRsZS1sZXZlbCBtb2R1bGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgU28gZmFyLCB0aGVyZSBpcyBvbmx5IEVtdTgwMDAvRW11MTBrMSBzeW50aCBkcml2ZXIgdW5kZXIKKyAgICAgICAgc3ludGgvZW11eCBzdWItZGlyZWN0b3J5LiAKKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtcGNpLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+cGNpIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcyBob2xkIHRoZSB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzCisgICAgICBmb3IgUENJIHNvdW5kY2FyZHMgYW5kIHRoZSBjb2RlcyBzcGVjaWZpYyB0byB0aGUgUENJIEJVUy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkcml2ZXJzIGNvbXBpbGVkIGZyb20gYSBzaW5nbGUgZmlsZSBpcyBzdG9yZWQgZGlyZWN0bHkgb24KKyAgICAgIHBjaSBkaXJlY3RvcnksIHdoaWxlIHRoZSBkcml2ZXJzIHdpdGggc2V2ZXJhbCBzb3VyY2UgZmlsZXMgYXJlCisgICAgICBzdG9yZWQgb24gaXRzIG93biBzdWItZGlyZWN0b3J5IChlLmcuIGVtdTEwazEsIGljZTE3MTIpLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWlzYS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmlzYSBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgYW5kIGl0cyBzdWItZGlyZWN0b3JpZXMgaG9sZCB0aGUgdG9wLWxldmVsIGNhcmQgbW9kdWxlcworICAgICAgZm9yIElTQSBzb3VuZGNhcmRzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWFybS1wcGMtc3BhcmMtZGlyZWN0b3JpZXMiPgorICAgICAgPHRpdGxlPmFybSwgcHBjLCBhbmQgc3BhcmMgZGlyZWN0b3JpZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZXNlIGFyZSBmb3IgdGhlIHRvcC1sZXZlbCBjYXJkIG1vZHVsZXMgd2hpY2ggYXJlCisgICAgICBzcGVjaWZpYyB0byBlYWNoIGdpdmVuIGFyY2hpdGVjdHVyZS4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS11c2ItZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT51c2IgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBVU0ItYXVkaW8gZHJpdmVyLiBPbiB0aGUgbGF0ZXN0IHZlcnNpb24sIHRoZQorICAgICAgVVNCIE1JREkgZHJpdmVyIGlzIGludGVncmF0ZWQgdG9nZXRoZXIgd2l0aCB1c2ItYXVkaW8gZHJpdmVyLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXBjbWNpYS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPnBjbWNpYSBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBQQ01DSUEsIGVzcGVjaWFsbHkgUENDYXJkIGRyaXZlcnMgd2lsbCBnbyBoZXJlLiBDYXJkQnVzCisgICAgICBkcml2ZXJzIHdpbGwgYmUgb24gcGNpIGRpcmVjdG9yeSwgYmVjYXVzZSBpdHMgQVBJIGlzIGlkZW50aWNhbAorICAgICAgd2l0aCB0aGUgc3RhbmRhcmQgUENJIGNhcmRzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLW9zcy1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPm9zcyBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBPU1MvTGl0ZSBzb3VyY2UgZmlsZXMgYXJlIHN0b3JlZCBoZXJlIG9uIExpbnV4IDIuNiAob3IKKyAgICAgIGxhdGVyKSB0cmVlLiAoSW4gdGhlIEFMU0EgZHJpdmVyIHRhcmJhbGwsIGl0J3MgZW1wdHksIG9mIGNvdXJzZSA6KSAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQmFzaWMgRmxvdyBmb3IgUENJIERyaXZlcnMgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJiYXNpYy1mbG93Ij4KKyAgICA8dGl0bGU+QmFzaWMgRmxvdyBmb3IgUENJIERyaXZlcnM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctb3V0bGluZSI+CisgICAgICA8dGl0bGU+T3V0bGluZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1pbmltdW0gZmxvdyBvZiBQQ0kgc291bmRjYXJkIGlzIGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5kZWZpbmUgdGhlIFBDSSBJRCB0YWJsZSAoc2VlIHRoZSBzZWN0aW9uCisgICAgICAgICAgPGxpbmsgbGlua2VuZD0icGNpLXJlc291cmNlLWVudHJpZXMiPjxjaXRldGl0bGU+UENJIEVudHJpZXMKKyAgICAgICAgICA8L2NpdGV0aXRsZT48L2xpbms+KS48L3BhcmE+PC9saXN0aXRlbT4gCisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSA8ZnVuY3Rpb24+cHJvYmUoKTwvZnVuY3Rpb24+IGNhbGxiYWNrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgPGZ1bmN0aW9uPnJlbW92ZSgpPC9mdW5jdGlvbj4gY2FsbGJhY2suPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSBwY2lfZHJpdmVyIHRhYmxlIHdoaWNoIGNvbnRhaW5zIHRoZSB0aHJlZSBwb2ludGVycyBhYm92ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIDxmdW5jdGlvbj5pbml0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBqdXN0IGNhbGxpbmcgPGZ1bmN0aW9uPnBjaV9tb2R1bGVfaW5pdCgpPC9mdW5jdGlvbj4gdG8gcmVnaXN0ZXIgdGhlIHBjaV9kcml2ZXIgdGFibGUgZGVmaW5lZCBhYm92ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIDxmdW5jdGlvbj5leGl0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiB0byBjYWxsIDxmdW5jdGlvbj5wY2lfdW5yZWdpc3Rlcl9kcml2ZXIoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1leGFtcGxlIj4KKyAgICAgIDx0aXRsZT5GdWxsIENvZGUgRXhhbXBsZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvZGUgZXhhbXBsZSBpcyBzaG93biBiZWxvdy4gU29tZSBwYXJ0cyBhcmUga2VwdAorICAgICAgdW5pbXBsZW1lbnRlZCBhdCB0aGlzIG1vbWVudCBidXQgd2lsbCBiZSBmaWxsZWQgaW4gdGhlCisgICAgICBzdWNjZWVkaW5nIHNlY3Rpb25zLiBUaGUgbnVtYmVycyBpbiBjb21tZW50IGxpbmVzIG9mCisgICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9wcm9iZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gYXJlIHRoZQorICAgICAgbWFya2Vycy4gCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPkJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzIEV4YW1wbGU8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisgICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisgICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyAgI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyAgI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworICAvKiBtb2R1bGUgcGFyYW1ldGVycyAoc2VlICJNb2R1bGUgUGFyYW1ldGVycyIpICovCisgIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CisgIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKKyAgc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworCisgIC8qIGRlZmluaXRpb24gb2YgdGhlIGNoaXAtc3BlY2lmaWMgcmVjb3JkICovCisgIHR5cGVkZWYgc3RydWN0IHNuZF9teWNoaXAgbXljaGlwX3Q7CisgIHN0cnVjdCBzbmRfbXljaGlwIHsKKyAgICAgICAgICBzbmRfY2FyZF90ICpjYXJkOworICAgICAgICAgIC8vIHJlc3Qgb2YgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBpbiB0aGUgc2VjdGlvbgorICAgICAgICAgIC8vICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudHMiCisgIH07CisKKyAgLyogY2hpcC1zcGVjaWZpYyBkZXN0cnVjdG9yCisgICAqIChzZWUgIlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50cyIpCisgICAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIC4uLi4gLy8gd2lsbCBiZSBpbXBsZW1lbnRlZCBsYXRlci4uLgorICB9CisKKyAgLyogY29tcG9uZW50LWRlc3RydWN0b3IKKyAgICogKHNlZSAiTWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50cyIpCisgICAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZGV2X2ZyZWUoc25kX2RldmljZV90ICpkZXZpY2UpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisgICAgICAgICAgcmV0dXJuIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgfQorCisgIC8qIGNoaXAtc3BlY2lmaWMgY29uc3RydWN0b3IKKyAgICogKHNlZSAiTWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50cyIpCisgICAqLworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteWNoaXBfdCAqKnJjaGlwKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXA7CisgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICBzdGF0aWMgc25kX2RldmljZV9vcHNfdCBvcHMgPSB7CisgICAgICAgICAgICAgICAgIC5kZXZfZnJlZSA9IHNuZF9teWNoaXBfZGV2X2ZyZWUsCisgICAgICAgICAgfTsKKworICAgICAgICAgICpyY2hpcCA9IE5VTEw7CisKKyAgICAgICAgICAvLyBjaGVjayBQQ0kgYXZhaWxhYmlsaXR5IGhlcmUKKyAgICAgICAgICAvLyAoc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudHMiKQorICAgICAgICAgIC4uLi4KKworICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi8KKyAgICAgICAgICBjaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgICBjaGlwLT5jYXJkID0gY2FyZDsKKworICAgICAgICAgIC8vIHJlc3Qgb2YgaW5pdGlhbGl6YXRpb24gaGVyZTsgd2lsbCBiZSBpbXBsZW1lbnRlZAorICAgICAgICAgIC8vIGxhdGVyLCBzZWUgIlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50cyIKKyAgICAgICAgICAuLi4uCisKKyAgICAgICAgICBpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAsICZvcHMpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOworCisgICAgICAgICAgKnJjaGlwID0gY2hpcDsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNvbnN0cnVjdG9yIC0tIHNlZSAiQ29uc3RydWN0b3IiIHN1Yi1zZWN0aW9uICovCisgIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQorICB7CisgICAgICAgICAgc3RhdGljIGludCBkZXY7CisgICAgICAgICAgc25kX2NhcmRfdCAqY2FyZDsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOworCisgICAgICAgICAgLyogKDEpICovCisgICAgICAgICAgaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICAgIGlmICghZW5hYmxlW2Rldl0pIHsKKyAgICAgICAgICAgICAgICAgIGRldisrOworICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDIpICovCisgICAgICAgICAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisgICAgICAgICAgaWYgKGNhcmQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgICAgICAgLyogKDMpICovCisgICAgICAgICAgaWYgKChlcnIgPSBzbmRfbXljaGlwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiAoNCkgKi8KKyAgICAgICAgICBzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiTXkgQ2hpcCIpOworICAgICAgICAgIHN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJNeSBPd24gQ2hpcCAxMjMiKTsKKyAgICAgICAgICBzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHggaXJxICVpIiwKKyAgICAgICAgICAgICAgICAgIGNhcmQtPnNob3J0bmFtZSwgY2hpcC0+aW9wb3J0LCBjaGlwLT5pcnEpOworCisgICAgICAgICAgLyogKDUpICovCisgICAgICAgICAgLi4uLiAvLyBpbXBsZW1lbnRlZCBsYXRlcgorCisgICAgICAgICAgLyogKDYpICovCisgICAgICAgICAgaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiAoNykgKi8KKyAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKKyAgICAgICAgICBkZXYrKzsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGRlc3RydWN0b3IgLS0gc2VlICJEZXN0cnVjdG9yIiBzdWItc2VjdGlvbiAqLworICBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX215Y2hpcF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKKyAgeworICAgICAgICAgIHNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOworICAgICAgICAgIHBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3IiPgorICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcmVhbCBjb25zdHJ1Y3RvciBvZiBQQ0kgZHJpdmVycyBpcyBwcm9iZSBjYWxsYmFjay4gVGhlCisgICAgICBwcm9iZSBjYWxsYmFjayBhbmQgb3RoZXIgY29tcG9uZW50LWNvbnN0cnVjdG9ycyB3aGljaCBhcmUgY2FsbGVkCisgICAgICBmcm9tIHByb2JlIGNhbGxiYWNrIHNob3VsZCBiZSBkZWZpbmVkIHdpdGgKKyAgICAgIDxwYXJhbWV0ZXI+X19kZXZpbml0PC9wYXJhbWV0ZXI+IHByZWZpeC4gWW91IAorICAgICAgY2Fubm90IHVzZSA8cGFyYW1ldGVyPl9faW5pdDwvcGFyYW1ldGVyPiBwcmVmaXggZm9yIHRoZW0sCisgICAgICBiZWNhdXNlIGFueSBQQ0kgZGV2aWNlIGNvdWxkIGJlIGEgaG90cGx1ZyBkZXZpY2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIHByb2JlIGNhbGxiYWNrLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBpcyBvZnRlbiB1c2VkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1kZXZpY2UtaW5kZXgiPgorICAgICAgICA8dGl0bGU+MSkgQ2hlY2sgYW5kIGluY3JlbWVudCB0aGUgZGV2aWNlIGluZGV4LjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBkZXY7CisgIC4uLi4KKyAgaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKyAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgaWYgKCFlbmFibGVbZGV2XSkgeworICAgICAgICAgIGRldisrOworICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgd2hlcmUgZW5hYmxlW2Rldl0gaXMgdGhlIG1vZHVsZSBvcHRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBdCBlYWNoIHRpbWUgcHJvYmUgY2FsbGJhY2sgaXMgY2FsbGVkLCBjaGVjayB0aGUKKyAgICAgICAgYXZhaWxhYmlsaXR5IG9mIHRoZSBkZXZpY2UuIElmIG5vdCBhdmFpbGFibGUsIHNpbXBseSBpbmNyZW1lbnQKKyAgICAgICAgdGhlIGRldmljZSBpbmRleCBhbmQgcmV0dXJucy4gZGV2IHdpbGwgYmUgaW5jcmVtZW50ZWQgYWxzbworICAgICAgICBsYXRlciAoPGxpbmsKKyAgICAgICAgbGlua2VuZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1zZXQtcGNpIj48Y2l0ZXRpdGxlPnN0ZXAKKyAgICAgICAgNzwvY2l0ZXRpdGxlPjwvbGluaz4pLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtY2FyZCI+CisgICAgICAgIDx0aXRsZT4yKSBDcmVhdGUgYSBjYXJkIGluc3RhbmNlPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfY2FyZF90ICpjYXJkOworICAuLi4uCisgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGRldGFpbCB3aWxsIGJlIGV4cGxhaW5lZCBpbiB0aGUgc2VjdGlvbgorICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImNhcmQtbWFuYWdlbWVudC1jYXJkLWluc3RhbmNlIj48Y2l0ZXRpdGxlPgorICAgICAgICAgIE1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHM8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLWNyZWF0ZS1tYWluIj4KKyAgICAgICAgPHRpdGxlPjMpIENyZWF0ZSBhIG1haW4gY29tcG9uZW50PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gdGhpcyBwYXJ0LCB0aGUgUENJIHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLgorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteWNoaXBfdCAqY2hpcDsKKyAgLi4uLgorICBpZiAoKGVyciA9IHNuZF9teWNoaXBfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgIHJldHVybiBlcnI7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIFRoZSBkZXRhaWwgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24gPGxpbmsKKyAgICAgICAgbGlua2VuZD0icGNpLXJlc291cmNlIj48Y2l0ZXRpdGxlPlBDSSBSZXNvdXJjZQorICAgICAgICBNYW5hZ2VtZW50czwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItbWFpbi1jb21wb25lbnQiPgorICAgICAgICA8dGl0bGU+NCkgU2V0IHRoZSBkcml2ZXIgSUQgYW5kIG5hbWUgc3RyaW5ncy48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cmNweShjYXJkLT5kcml2ZXIsICJNeSBDaGlwIik7CisgIHN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJNeSBPd24gQ2hpcCAxMjMiKTsKKyAgc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCisgICAgICAgICAgY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5pb3BvcnQsIGNoaXAtPmlycSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGUgZHJpdmVyIGZpZWxkIGhvbGRzIHRoZSBtaW5pbWFsIElEIHN0cmluZyBvZiB0aGUKKyAgICAgICAgY2hpcC4gVGhpcyBpcyByZWZlcnJlZCBieSBhbHNhLWxpYidzIGNvbmZpZ3VyYXRvciwgc28ga2VlcCBpdAorICAgICAgICBzaW1wbGUgYnV0IHVuaXF1ZS4gCisgICAgICAgICAgRXZlbiB0aGUgc2FtZSBkcml2ZXIgY2FuIGhhdmUgZGlmZmVyZW50IGRyaXZlciBJRHMgdG8KKyAgICAgICAgZGlzdGluZ3Vpc2ggdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZWFjaCBjaGlwIHR5cGUuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHNob3J0bmFtZSBmaWVsZCBpcyBhIHN0cmluZyBzaG93biBhcyBtb3JlIHZlcmJvc2UKKyAgICAgICAgbmFtZS4gVGhlIGxvbmduYW1lIGZpZWxkIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiB3aGljaCBpcworICAgICAgICBzaG93biBpbiA8ZmlsZW5hbWU+L3Byb2MvYXNvdW5kL2NhcmRzPC9maWxlbmFtZT4uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLWNyZWF0ZS1vdGhlciI+CisgICAgICAgIDx0aXRsZT41KSBDcmVhdGUgb3RoZXIgY29tcG9uZW50cywgc3VjaCBhcyBtaXhlciwgTUlESSwgZXRjLjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEhlcmUgeW91IGRlZmluZSB0aGUgYmFzaWMgY29tcG9uZW50cyBzdWNoIGFzCisgICAgICAgICAgPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZSI+PGNpdGV0aXRsZT5QQ008L2NpdGV0aXRsZT48L2xpbms+LAorICAgICAgICAgIG1peGVyIChlLmcuIDxsaW5rIGxpbmtlbmQ9ImFwaS1hYzk3Ij48Y2l0ZXRpdGxlPkFDOTc8L2NpdGV0aXRsZT48L2xpbms+KSwKKyAgICAgICAgICBNSURJIChlLmcuIDxsaW5rIGxpbmtlbmQ9Im1pZGktaW50ZXJmYWNlIj48Y2l0ZXRpdGxlPk1QVS00MDE8L2NpdGV0aXRsZT48L2xpbms+KSwKKyAgICAgICAgICBhbmQgb3RoZXIgaW50ZXJmYWNlcy4KKyAgICAgICAgICBBbHNvLCBpZiB5b3Ugd2FudCBhIDxsaW5rIGxpbmtlbmQ9InByb2MtaW50ZXJmYWNlIj48Y2l0ZXRpdGxlPnByb2MKKyAgICAgICAgZmlsZTwvY2l0ZXRpdGxlPjwvbGluaz4sIGRlZmluZSBpdCBoZXJlLCB0b28uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItcmVnaXN0ZXItY2FyZCI+CisgICAgICAgIDx0aXRsZT42KSBSZWdpc3RlciB0aGUgY2FyZCBpbnN0YW5jZS48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgeworICAgICAgICAgIHNuZF9jYXJkX2ZyZWUoY2FyZCk7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24gPGxpbmsKKyAgICAgICAgbGlua2VuZD0iY2FyZC1tYW5hZ2VtZW50LXJlZ2lzdHJhdGlvbiI+PGNpdGV0aXRsZT5NYW5hZ2VtZW50CisgICAgICAgIG9mIENhcmRzIGFuZCBDb21wb25lbnRzPC9jaXRldGl0bGU+PC9saW5rPiwgdG9vLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1zZXQtcGNpIj4KKyAgICAgICAgPHRpdGxlPjcpIFNldCB0aGUgUENJIGRyaXZlciBkYXRhIGFuZCByZXR1cm4gemVyby48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICAgICAgIHBjaV9zZXRfZHJ2ZGF0YShwY2ksIGNhcmQpOworICAgICAgICBkZXYrKzsKKyAgICAgICAgcmV0dXJuIDA7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBJbiB0aGUgYWJvdmUsIHRoZSBjYXJkIHJlY29yZCBpcyBzdG9yZWQuIFRoaXMgcG9pbnRlciBpcworICAgICAgICByZWZlcnJlZCBpbiB0aGUgcmVtb3ZlIGNhbGxiYWNrIGFuZCBwb3dlci1tYW5hZ2VtZW50CisgICAgICAgIGNhbGxiYWNrcywgdG9vLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWRlc3RydWN0b3IiPgorICAgICAgPHRpdGxlPkRlc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkZXN0cnVjdG9yLCByZW1vdmUgY2FsbGJhY2ssIHNpbXBseSByZWxlYXNlcyB0aGUgY2FyZAorICAgICAgaW5zdGFuY2UuIFRoZW4gdGhlIEFMU0EgbWlkZGxlIGxheWVyIHdpbGwgcmVsZWFzZSBhbGwgdGhlCisgICAgICBhdHRhY2hlZCBjb21wb25lbnRzIGF1dG9tYXRpY2FsbHkuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSXQgd291bGQgYmUgdHlwaWNhbGx5IGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX215Y2hpcF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKKyAgeworICAgICAgICAgIHNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOworICAgICAgICAgIHBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBUaGUgYWJvdmUgY29kZSBhc3N1bWVzIHRoYXQgdGhlIGNhcmQgcG9pbnRlciBpcyBzZXQgdG8gdGhlIFBDSQorCWRyaXZlciBkYXRhLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWhlYWRlci1maWxlcyI+CisgICAgICA8dGl0bGU+SGVhZGVyIEZpbGVzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgdGhlIGFib3ZlIGV4YW1wbGUsIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgaW5jbHVkZSBmaWxlcworICAgICAgYXJlIG5lY2Vzc2FyeS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorICAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisgICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisgICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworCXdoZXJlIHRoZSBsYXN0IG9uZSBpcyBuZWNlc3Nhcnkgb25seSB3aGVuIG1vZHVsZSBvcHRpb25zIGFyZQorICAgICAgZGVmaW5lZCBpbiB0aGUgc291cmNlIGZpbGUuICBJZiB0aGUgY29kZXMgYXJlIHNwbGl0IHRvIHNldmVyYWwKKyAgICAgIGZpbGVzLCB0aGUgZmlsZSB3aXRob3V0IG1vZHVsZSBvcHRpb25zIGRvbid0IG5lZWQgdGhlbS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZW0sIHlvdSdsbCBuZWVkCisgICAgICA8ZmlsZW5hbWU+Jmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OzwvZmlsZW5hbWU+IGZvciB0aGUgaW50ZXJydXB0CisgICAgICBoYW5kbGluZywgYW5kIDxmaWxlbmFtZT4mbHQ7YXNtL2lvLmgmZ3Q7PC9maWxlbmFtZT4gZm9yIHRoZSBpL28KKyAgICAgIGFjY2Vzcy4gSWYgeW91IHVzZSA8ZnVuY3Rpb24+bWRlbGF5KCk8L2Z1bmN0aW9uPiBvcgorICAgICAgPGZ1bmN0aW9uPnVkZWxheSgpPC9mdW5jdGlvbj4gZnVuY3Rpb25zLCB5b3UnbGwgbmVlZCB0byBpbmNsdWRlCisgICAgICA8ZmlsZW5hbWU+Jmx0O2xpbnV4L2RlbGF5LmgmZ3Q7PC9maWxlbmFtZT4sIHRvby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIEFMU0EgaW50ZXJmYWNlcyBsaWtlIFBDTSBvciBjb250cm9sIEFQSSBhcmUgZGVmaW5lZCBpbiBvdGhlcgorICAgICAgaGVhZGVyIGZpbGVzIGFzIDxmaWxlbmFtZT4mbHQ7c291bmQveHh4LmgmZ3Q7PC9maWxlbmFtZT4uCisgICAgICBUaGV5IGhhdmUgdG8gYmUgaW5jbHVkZWQgYWZ0ZXIKKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvY29yZS5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIE1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJjYXJkLW1hbmFnZW1lbnQiPgorICAgIDx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY2FyZC1pbnN0YW5jZSI+CisgICAgICA8dGl0bGU+Q2FyZCBJbnN0YW5jZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIEZvciBlYWNoIHNvdW5kY2FyZCwgYSA8cXVvdGU+Y2FyZDwvcXVvdGU+IHJlY29yZCBtdXN0IGJlIGFsbG9jYXRlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBIGNhcmQgcmVjb3JkIGlzIHRoZSBoZWFkcXVhcnRlcnMgb2YgdGhlIHNvdW5kY2FyZC4gIEl0IG1hbmFnZXMKKyAgICAgIHRoZSBsaXN0IG9mIHdob2xlIGRldmljZXMgKGNvbXBvbmVudHMpIG9uIHRoZSBzb3VuZGNhcmQsIHN1Y2ggYXMKKyAgICAgIFBDTSwgbWl4ZXJzLCBNSURJLCBzeW50aGVzaXplciwgYW5kIHNvIG9uLiAgQWxzbywgdGhlIGNhcmQKKyAgICAgIHJlY29yZCBob2xkcyB0aGUgSUQgYW5kIHRoZSBuYW1lIHN0cmluZ3Mgb2YgdGhlIGNhcmQsIG1hbmFnZXMKKyAgICAgIHRoZSByb290IG9mIHByb2MgZmlsZXMsIGFuZCBjb250cm9scyB0aGUgcG93ZXItbWFuYWdlbWVudCBzdGF0ZXMKKyAgICAgIGFuZCBob3RwbHVnIGRpc2Nvbm5lY3Rpb25zLiAgVGhlIGNvbXBvbmVudCBsaXN0IG9uIHRoZSBjYXJkCisgICAgICByZWNvcmQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIHByb3BlciByZWxlYXNlcyBvZiByZXNvdXJjZXMgYXQKKyAgICAgIGRlc3RydWN0aW9uLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgdG8gY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSwgY2FsbAorICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2NhcmRfdCAqY2FyZDsKKyAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIG1vZHVsZSwgZXh0cmFfc2l6ZSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmdW5jdGlvbiB0YWtlcyBmb3VyIGFyZ3VtZW50cywgdGhlIGNhcmQtaW5kZXggbnVtYmVyLCB0aGUKKyAgICAgICAgaWQgc3RyaW5nLCB0aGUgbW9kdWxlIHBvaW50ZXIgKHVzdWFsbHkKKyAgICAgICAgPGNvbnN0YW50PlRISVNfTU9EVUxFPC9jb25zdGFudD4pLAorICAgICAgICBhbmQgdGhlIHNpemUgb2YgZXh0cmEtZGF0YSBzcGFjZS4gIFRoZSBsYXN0IGFyZ3VtZW50IGlzIHVzZWQgdG8KKyAgICAgICAgYWxsb2NhdGUgY2FyZC0mZ3Q7cHJpdmF0ZV9kYXRhIGZvciB0aGUKKyAgICAgICAgY2hpcC1zcGVjaWZpYyBkYXRhLiAgTm90ZSB0aGF0IHRoaXMgZGF0YQorICAgICAgICA8ZW1waGFzaXM+aXM8L2VtcGhhc2lzPiBhbGxvY2F0ZWQgYnkKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1jb21wb25lbnQiPgorICAgICAgPHRpdGxlPkNvbXBvbmVudHM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEFmdGVyIHRoZSBjYXJkIGlzIGNyZWF0ZWQsIHlvdSBjYW4gYXR0YWNoIHRoZSBjb21wb25lbnRzCisgICAgICAoZGV2aWNlcykgdG8gdGhlIGNhcmQgaW5zdGFuY2UuIE9uIEFMU0EgZHJpdmVyLCBhIGNvbXBvbmVudCBpcworICAgICAgcmVwcmVzZW50ZWQgYXMgYSA8dHlwZT5zbmRfZGV2aWNlX3Q8L3R5cGU+IG9iamVjdC4KKyAgICAgIEEgY29tcG9uZW50IGNhbiBiZSBhIFBDTSBpbnN0YW5jZSwgYSBjb250cm9sIGludGVyZmFjZSwgYSByYXcKKyAgICAgIE1JREkgaW50ZXJmYWNlLCBldGMuICBFYWNoIG9mIHN1Y2ggaW5zdGFuY2VzIGhhcyBvbmUgY29tcG9uZW50CisgICAgICBlbnRyeS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEEgY29tcG9uZW50IGNhbiBiZSBjcmVhdGVkIHZpYQorICAgICAgICA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfWFhYLCBjaGlwLCAmb3BzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyB0YWtlcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgZGV2aWNlLWxldmVsCisgICAgICAoPGNvbnN0YW50PlNORFJWX0RFVl9YWFg8L2NvbnN0YW50PiksIHRoZSBkYXRhIHBvaW50ZXIsIGFuZCB0aGUKKyAgICAgIGNhbGxiYWNrIHBvaW50ZXJzICg8cGFyYW1ldGVyPiZhbXA7b3BzPC9wYXJhbWV0ZXI+KS4gVGhlCisgICAgICBkZXZpY2UtbGV2ZWwgZGVmaW5lcyB0aGUgdHlwZSBvZiBjb21wb25lbnRzIGFuZCB0aGUgb3JkZXIgb2YKKyAgICAgIHJlZ2lzdHJhdGlvbiBhbmQgZGUtcmVnaXN0cmF0aW9uLiAgRm9yIG1vc3Qgb2YgY29tcG9uZW50cywgdGhlCisgICAgICBkZXZpY2UtbGV2ZWwgaXMgYWxyZWFkeSBkZWZpbmVkLiAgRm9yIGEgdXNlci1kZWZpbmVkIGNvbXBvbmVudCwKKyAgICAgIHlvdSBjYW4gdXNlIDxjb25zdGFudD5TTkRSVl9ERVZfTE9XTEVWRUw8L2NvbnN0YW50Pi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGlzIGZ1bmN0aW9uIGl0c2VsZiBkb2Vzbid0IGFsbG9jYXRlIHRoZSBkYXRhIHNwYWNlLiBUaGUgZGF0YQorICAgICAgbXVzdCBiZSBhbGxvY2F0ZWQgbWFudWFsbHkgYmVmb3JlaGFuZCwgYW5kIGl0cyBwb2ludGVyIGlzIHBhc3NlZAorICAgICAgYXMgdGhlIGFyZ3VtZW50LiBUaGlzIHBvaW50ZXIgaXMgdXNlZCBhcyB0aGUgaWRlbnRpZmllcgorICAgICAgKDxwYXJhbWV0ZXI+Y2hpcDwvcGFyYW1ldGVyPiBpbiB0aGUgYWJvdmUgZXhhbXBsZSkgZm9yIHRoZQorICAgICAgaW5zdGFuY2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRWFjaCBBTFNBIHByZS1kZWZpbmVkIGNvbXBvbmVudCBzdWNoIGFzIGFjOTcgb3IgcGNtIGNhbGxzCisgICAgICA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+IGluc2lkZSBpdHMKKyAgICAgIGNvbnN0cnVjdG9yLiBUaGUgZGVzdHJ1Y3RvciBmb3IgZWFjaCBjb21wb25lbnQgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgIGNhbGxiYWNrIHBvaW50ZXJzLiAgSGVuY2UsIHlvdSBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZgorICAgICAgY2FsbGluZyBhIGRlc3RydWN0b3IgZm9yIHN1Y2ggYSBjb21wb25lbnQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Ugd291bGQgbGlrZSB0byBjcmVhdGUgeW91ciBvd24gY29tcG9uZW50LCB5b3UgbmVlZCB0bworICAgICAgc2V0IHRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIHRvIGRldl9mcmVlIGNhbGxiYWNrIGluCisgICAgICA8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPiwgc28gdGhhdCBpdCBjYW4gYmUgcmVsZWFzZWQKKyAgICAgIGF1dG9tYXRpY2FsbHkgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlKCk8L2Z1bmN0aW9uPi4gVGhlCisgICAgICBleGFtcGxlIHdpbGwgYmUgc2hvd24gbGF0ZXIgYXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYQorICAgICAgY2hpcC1zcGVjaWZpYyBkYXRhLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMiPgorICAgICAgPHRpdGxlPkNoaXAtU3BlY2lmaWMgRGF0YTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBjaGlwLXNwZWNpZmljIGluZm9ybWF0aW9uLCBlLmcuIHRoZSBpL28gcG9ydCBhZGRyZXNzLCBpdHMKKyAgICAgIHJlc291cmNlIHBvaW50ZXIsIG9yIHRoZSBpcnEgbnVtYmVyLCBpcyBzdG9yZWQgaW4gdGhlCisgICAgICBjaGlwLXNwZWNpZmljIHJlY29yZC4KKyAgICAgIFVzdWFsbHksIHRoZSBjaGlwLXNwZWNpZmljIHJlY29yZCBpcyB0eXBlZGVmJ2VkIGFzCisgICAgICA8dHlwZT54eHhfdDwvdHlwZT4gbGlrZSB0aGUgZm9sbG93aW5nOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHR5cGVkZWYgc3RydWN0IHNuZF9teWNoaXAgbXljaGlwX3Q7CisgIHN0cnVjdCBzbmRfbXljaGlwIHsKKyAgICAgICAgICAuLi4uCisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIGdlbmVyYWwsIHRoZXJlIGFyZSB0d28gd2F5cyB0byBhbGxvY2F0ZSB0aGUgY2hpcCByZWNvcmQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY2hpcC1zcGVjaWZpYy1zbmQtY2FyZC1uZXciPgorICAgICAgICA8dGl0bGU+MS4gQWxsb2NhdGluZyB2aWEgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXMgbWVudGlvbmVkIGFib3ZlLCB5b3UgY2FuIHBhc3MgdGhlIGV4dHJhLWRhdGEtbGVuZ3RoIHRvIHRoZSA0dGggYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4sIGkuZS4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKG15Y2hpcF90KSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICB3aGV0aGVyIDx0eXBlPm15Y2hpcF90PC90eXBlPiBpcyB0aGUgdHlwZSBvZiB0aGUgY2hpcCByZWNvcmQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJbiByZXR1cm4sIHRoZSBhbGxvY2F0ZWQgcmVjb3JkIGNhbiBiZSBhY2Nlc3NlZCBhcworCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteWNoaXBfdCAqY2hpcCA9IChteWNoaXBfdCAqKWNhcmQtPnByaXZhdGVfZGF0YTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIFdpdGggdGhpcyBtZXRob2QsIHlvdSBkb24ndCBoYXZlIHRvIGFsbG9jYXRlIHR3aWNlLgorICAgICAgICAgIFRoZSByZWNvcmQgaXMgcmVsZWFzZWQgdG9nZXRoZXIgd2l0aCB0aGUgY2FyZCBpbnN0YW5jZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtYWxsb2NhdGUtZXh0cmEiPgorICAgICAgICA8dGl0bGU+Mi4gQWxsb2NhdGluZyBhbiBleHRyYSBkZXZpY2UuPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEKKyAgICAgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiAod2l0aAorICAgICAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gb24gdGhlIDR0aCBhcmcpLCBjYWxsCisgICAgICAgICAgPGZ1bmN0aW9uPmtjYWxsb2MoKTwvZnVuY3Rpb24+LiAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2NhcmRfdCAqY2FyZDsKKyAgbXljaGlwX3QgKmNoaXA7CisgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIE5VTEwpOworICAuLi4uLgorICBjaGlwID0ga2NhbGxvYygxLCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBjaGlwIHJlY29yZCBzaG91bGQgaGF2ZSB0aGUgZmllbGQgdG8gaG9sZCB0aGUgY2FyZAorICAgICAgICAgIHBvaW50ZXIgYXQgbGVhc3QsIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX215Y2hpcCB7CisgICAgICAgICAgc25kX2NhcmRfdCAqY2FyZDsKKyAgICAgICAgICAuLi4uCisgIH07CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGVuLCBzZXQgdGhlIGNhcmQgcG9pbnRlciBpbiB0aGUgcmV0dXJuZWQgY2hpcCBpbnN0YW5jZS4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgY2hpcC0+Y2FyZCA9IGNhcmQ7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOZXh0LCBpbml0aWFsaXplIHRoZSBmaWVsZHMsIGFuZCByZWdpc3RlciB0aGlzIGNoaXAKKyAgICAgICAgICByZWNvcmQgYXMgYSBsb3ctbGV2ZWwgZGV2aWNlIHdpdGggYSBzcGVjaWZpZWQKKyAgICAgICAgICA8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPiwgCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzbmRfZGV2aWNlX29wc190IG9wcyA9IHsKKyAgICAgICAgICAuZGV2X2ZyZWUgPSAgICAgICAgc25kX215Y2hpcF9kZXZfZnJlZSwKKyAgfTsKKyAgLi4uLgorICBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfZGV2X2ZyZWUoKTwvZnVuY3Rpb24+IGlzIHRoZQorICAgICAgICBkZXZpY2UtZGVzdHJ1Y3RvciBmdW5jdGlvbiwgd2hpY2ggd2lsbCBjYWxsIHRoZSByZWFsCisgICAgICAgIGRlc3RydWN0b3IuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZGV2X2ZyZWUoc25kX2RldmljZV90ICpkZXZpY2UpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisgICAgICAgICAgcmV0dXJuIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgd2hlcmUgPGZ1bmN0aW9uPnNuZF9teWNoaXBfZnJlZSgpPC9mdW5jdGlvbj4gaXMgdGhlIHJlYWwgZGVzdHJ1Y3Rvci4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtcmVnaXN0cmF0aW9uIj4KKyAgICAgIDx0aXRsZT5SZWdpc3RyYXRpb24gYW5kIFJlbGVhc2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEFmdGVyIGFsbCBjb21wb25lbnRzIGFyZSBhc3NpZ25lZCwgcmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UKKyAgICAgIGJ5IGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9jYXJkX3JlZ2lzdGVyKCk8L2Z1bmN0aW9uPi4gVGhlIGFjY2VzcworICAgICAgdG8gdGhlIGRldmljZSBmaWxlcyBhcmUgZW5hYmxlZCBhdCB0aGlzIHBvaW50LiBUaGF0IGlzLCBiZWZvcmUKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9yZWdpc3RlcigpPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCB0aGUKKyAgICAgIGNvbXBvbmVudHMgYXJlIHNhZmVseSBpbmFjY2Vzc2libGUgZnJvbSBleHRlcm5hbCBzaWRlLiBJZiB0aGlzCisgICAgICBjYWxsIGZhaWxzLCBleGl0IHRoZSBwcm9iZSBmdW5jdGlvbiBhZnRlciByZWxlYXNpbmcgdGhlIGNhcmQgdmlhCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfZnJlZSgpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHJlbGVhc2luZyB0aGUgY2FyZCBpbnN0YW5jZSwgeW91IGNhbiBjYWxsIHNpbXBseQorICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LiBBcyBhbHJlYWR5IG1lbnRpb25lZCwgYWxsCisgICAgICBjb21wb25lbnRzIGFyZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgY2FsbC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBcyBmdXJ0aGVyIG5vdGVzLCB0aGUgZGVzdHJ1Y3RvcnMgKGJvdGgKKyAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX2Rldl9mcmVlPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9mcmVlPC9mdW5jdGlvbj4pIGNhbm5vdCBiZSBkZWZpbmVkIHdpdGgKKyAgICAgIDxwYXJhbWV0ZXI+X19kZXZleGl0PC9wYXJhbWV0ZXI+IHByZWZpeCwgYmVjYXVzZSB0aGV5IG1heSBiZQorICAgICAgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yLCB0b28sIGF0IHRoZSBmYWxzZSBwYXRoLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBGb3IgYSBkZXZpY2Ugd2hpY2ggYWxsb3dzIGhvdHBsdWdnaW5nLCB5b3UgY2FuIHVzZQorICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWVfaW5fdGhyZWFkPC9mdW5jdGlvbj4uICBUaGlzIG9uZSB3aWxsCisgICAgICBwb3N0cG9uZSB0aGUgZGVzdHJ1Y3Rpb24gYW5kIHdhaXQgaW4gYSBrZXJuZWwtdGhyZWFkIHVudGlsIGFsbAorICAgICAgZGV2aWNlcyBhcmUgY2xvc2VkLgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUENJIFJlc291cmNlIE1hbmFnZW1lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0icGNpLXJlc291cmNlIj4KKyAgICA8dGl0bGU+UENJIFJlc291cmNlIE1hbmFnZW1lbnRzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtZXhhbXBsZSI+CisgICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgc2VjdGlvbiwgd2UnbGwgZmluaXNoIHRoZSBjaGlwLXNwZWNpZmljIGNvbnN0cnVjdG9yLAorICAgICAgZGVzdHJ1Y3RvciBhbmQgUENJIGVudHJpZXMuIFRoZSBleGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsCisgICAgICBiZWxvdy4gCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50cyBFeGFtcGxlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9teWNoaXAgeworICAgICAgICAgIHNuZF9jYXJkX3QgKmNhcmQ7CisgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaTsKKworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydDsKKyAgICAgICAgICBpbnQgaXJxOworICB9OworCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9mcmVlKG15Y2hpcF90ICpjaGlwKQorICB7CisgICAgICAgICAgLyogZGlzYWJsZSBoYXJkd2FyZSBoZXJlIGlmIGFueSAqLworICAgICAgICAgIC4uLi4gLy8gKG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGRvY3VtZW50KQorCisgICAgICAgICAgLyogcmVsZWFzZSB0aGUgaXJxICovCisgICAgICAgICAgaWYgKGNoaXAtPmlycSA+PSAwKQorICAgICAgICAgICAgICAgICAgZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOworICAgICAgICAgIC8qIHJlbGVhc2UgdGhlIGkvbyBwb3J0cyAmIG1lbW9yeSAqLworICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKKyAgICAgICAgICAvKiBkaXNhYmxlIHRoZSBQQ0kgZW50cnkgKi8KKyAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKyAgICAgICAgICAvKiByZWxlYXNlIHRoZSBkYXRhICovCisgICAgICAgICAga2ZyZWUoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBjaGlwLXNwZWNpZmljIGNvbnN0cnVjdG9yICovCisgIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfY3JlYXRlKHNuZF9jYXJkX3QgKmNhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Y2hpcF90ICoqcmNoaXApCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIHN0YXRpYyBzbmRfZGV2aWNlX29wc190IG9wcyA9IHsKKyAgICAgICAgICAgICAgICAgLmRldl9mcmVlID0gc25kX215Y2hpcF9kZXZfZnJlZSwKKyAgICAgICAgICB9OworCisgICAgICAgICAgKnJjaGlwID0gTlVMTDsKKworICAgICAgICAgIC8qIGluaXRpYWxpemUgdGhlIFBDSSBlbnRyeSAqLworICAgICAgICAgIGlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAvKiBjaGVjayBQQ0kgYXZhaWxhYmlsaXR5ICgyOGJpdCBETUEpICovCisgICAgICAgICAgaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDAgfHwKKyAgICAgICAgICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwKSB7CisgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7CisgICAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87CisgICAgICAgICAgfQorCisgICAgICAgICAgY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBpbml0aWFsaXplIHRoZSBzdHVmZiAqLworICAgICAgICAgIGNoaXAtPmNhcmQgPSBjYXJkOworICAgICAgICAgIGNoaXAtPnBjaSA9IHBjaTsKKyAgICAgICAgICBjaGlwLT5pcnEgPSAtMTsKKworICAgICAgICAgIC8qICgxKSBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLworICAgICAgICAgIGlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJNeSBDaGlwIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAga2ZyZWUoY2hpcCk7CisgICAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgICAgIGNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKKyAgICAgICAgICBpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9teWNoaXBfaW50ZXJydXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsICJNeSBDaGlwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiljaGlwKSkgeworICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnEgJWRcbiIsIHBjaS0+aXJxKTsKKyAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgICAgfQorICAgICAgICAgIGNoaXAtPmlycSA9IHBjaS0+aXJxOworCisgICAgICAgICAgLyogKDIpIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGlwIGhhcmR3YXJlICovCisgICAgICAgICAgLi4uLiAvLyAgIChub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBkb2N1bWVudCkKKworICAgICAgICAgIGlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpcCwgJm9wcykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX215Y2hpcF9mcmVlKGNoaXApOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CisKKyAgICAgICAgICAqcmNoaXAgPSBjaGlwOworICAgICAgICAgIHJldHVybiAwOworICB9ICAgICAgICAKKworICAvKiBQQ0kgSURzICovCisgIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbXljaGlwX2lkc1tdID0geworICAgICAgICAgIHsgUENJX1ZFTkRPUl9JRF9GT08sIFBDSV9ERVZJQ0VfSURfQkFSLAorICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgeyAwLCB9CisgIH07CisgIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbmRfbXljaGlwX2lkcyk7CisKKyAgLyogcGNpX2RyaXZlciBkZWZpbml0aW9uICovCisgIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICAgICAgLm5hbWUgPSAiTXkgT3duIENoaXAiLAorICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teWNoaXBfaWRzLAorICAgICAgICAgIC5wcm9iZSA9IHNuZF9teWNoaXBfcHJvYmUsCisgICAgICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9teWNoaXBfcmVtb3ZlKSwKKyAgfTsKKworICAvKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgbW9kdWxlICovCisgIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9teWNoaXBfaW5pdCh2b2lkKQorICB7CisgICAgICAgICAgcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmZHJpdmVyKTsKKyAgfQorCisgIC8qIGNsZWFuIHVwIHRoZSBtb2R1bGUgKi8KKyAgc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9teWNoaXBfZXhpdCh2b2lkKQorICB7CisgICAgICAgICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworICB9CisKKyAgbW9kdWxlX2luaXQoYWxzYV9jYXJkX215Y2hpcF9pbml0KQorICBtb2R1bGVfZXhpdChhbHNhX2NhcmRfbXljaGlwX2V4aXQpCisKKyAgRVhQT1JUX05PX1NZTUJPTFM7IC8qIGZvciBvbGQga2VybmVscyBvbmx5ICovCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1zb21lLWhhZnRhcyI+CisgICAgICA8dGl0bGU+U29tZSBIYWZ0YSdzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBQQ0kgcmVzb3VyY2VzIGlzIGRvbmUgaW4gdGhlCisgICAgICA8ZnVuY3Rpb24+cHJvYmUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLCBhbmQgdXN1YWxseSBhbiBleHRyYQorICAgICAgPGZ1bmN0aW9uPnh4eF9jcmVhdGUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHdyaXR0ZW4gZm9yIHRoaXMKKyAgICAgIHB1cnBvc2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgUENJIGRldmljZXMsIHlvdSBoYXZlIHRvIGNhbGwgYXQgZmlyc3QKKyAgICAgIDxmdW5jdGlvbj5wY2lfZW5hYmxlX2RldmljZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gYmVmb3JlCisgICAgICBhbGxvY2F0aW5nIHJlc291cmNlcy4gQWxzbywgeW91IG5lZWQgdG8gc2V0IHRoZSBwcm9wZXIgUENJIERNQQorICAgICAgbWFzayB0byBsaW1pdCB0aGUgYWNjZXNzZWQgaS9vIHJhbmdlLiBJbiBzb21lIGNhc2VzLCB5b3UgbWlnaHQKKyAgICAgIG5lZWQgdG8gY2FsbCA8ZnVuY3Rpb24+cGNpX3NldF9tYXN0ZXIoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLAorICAgICAgdG9vLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFN1cHBvc2UgdGhlIDI4Yml0IG1hc2ssIGFuZCB0aGUgY29kZSB0byBiZSBhZGRlZCB3b3VsZCBiZSBsaWtlOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQorICAgICAgICAgIHJldHVybiBlcnI7CisgIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwIHx8CisgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDApIHsKKyAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7CisgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKKyAgfQorICAKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtcmVzb3VyY2UtYWxsb2NhdGlvbiI+CisgICAgICA8dGl0bGU+UmVzb3VyY2UgQWxsb2NhdGlvbjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgSS9PIHBvcnRzIGFuZCBpcnFzIGFyZSBkb25lIHZpYSBzdGFuZGFyZCBrZXJuZWwKKyAgICAgIGZ1bmN0aW9ucy4gVW5saWtlIEFMU0EgdmVyLjAuNS54LiwgdGhlcmUgYXJlIG5vIGhlbHBlcnMgZm9yCisgICAgICB0aGF0LiBBbmQgdGhlc2UgcmVzb3VyY2VzIG11c3QgYmUgcmVsZWFzZWQgaW4gdGhlIGRlc3RydWN0b3IKKyAgICAgIGZ1bmN0aW9uIChzZWUgYmVsb3cpLiBBbHNvLCBvbiBBTFNBIDAuOS54LCB5b3UgZG9uJ3QgbmVlZCB0bworICAgICAgYWxsb2NhdGUgKHBzZXVkby0pRE1BIGZvciBQQ0kgbGlrZSBBTFNBIDAuNS54LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE5vdyBhc3N1bWUgdGhhdCB0aGlzIFBDSSBkZXZpY2UgaGFzIGFuIEkvTyBwb3J0IHdpdGggOCBieXRlcworICAgICAgICBhbmQgYW4gaW50ZXJydXB0LiBUaGVuIDx0eXBlPm15Y2hpcF90PC90eXBlPiB3aWxsIGhhdmUgdGhlCisgICAgICAgIGZvbGxvd2luZyBmaWVsZHM6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfbXljaGlwIHsKKyAgICAgICAgICBzbmRfY2FyZF90ICpjYXJkOworCisgICAgICAgICAgdW5zaWduZWQgbG9uZyBwb3J0OworICAgICAgICAgIGludCBpcnE7CisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBhbiBpL28gcG9ydCAoYW5kIGFsc28gYSBtZW1vcnkgcmVnaW9uKSwgeW91IG5lZWQgdG8gaGF2ZQorICAgICAgdGhlIHJlc291cmNlIHBvaW50ZXIgZm9yIHRoZSBzdGFuZGFyZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBGb3IKKyAgICAgIGFuIGlycSwgeW91IGhhdmUgdG8ga2VlcCBvbmx5IHRoZSBpcnEgbnVtYmVyIChpbnRlZ2VyKS4gQnV0IHlvdQorICAgICAgbmVlZCB0byBpbml0aWFsaXplIHRoaXMgbnVtYmVyIGFzIC0xIGJlZm9yZSBhY3R1YWwgYWxsb2NhdGlvbiwKKyAgICAgIHNpbmNlIGlycSAwIGlzIHZhbGlkLiBUaGUgcG9ydCBhZGRyZXNzIGFuZCBpdHMgcmVzb3VyY2UgcG9pbnRlcgorICAgICAgY2FuIGJlIGluaXRpYWxpemVkIGFzIG51bGwgYnkKKyAgICAgIDxmdW5jdGlvbj5rY2FsbG9jKCk8L2Z1bmN0aW9uPiBhdXRvbWF0aWNhbGx5LCBzbyB5b3UKKyAgICAgIGRvbid0IGhhdmUgdG8gdGFrZSBjYXJlIG9mIHJlc2V0dGluZyB0aGVtLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIGFuIGkvbyBwb3J0IGlzIGRvbmUgbGlrZSB0aGlzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJNeSBDaGlwIikpIDwgMCkgeyAKKyAgICAgICAgICBrZnJlZShjaGlwKTsKKyAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CisgIGNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPCEtLSBvYnNvbGV0ZSAtLT4KKyAgICAgICAgSXQgd2lsbCByZXNlcnZlIHRoZSBpL28gcG9ydCByZWdpb24gb2YgOCBieXRlcyBvZiB0aGUgZ2l2ZW4KKyAgICAgIFBDSSBkZXZpY2UuIFRoZSByZXR1cm5lZCB2YWx1ZSwgY2hpcC0mZ3Q7cmVzX3BvcnQsIGlzIGFsbG9jYXRlZAorICAgICAgdmlhIDxmdW5jdGlvbj5rbWFsbG9jKCk8L2Z1bmN0aW9uPiBieQorICAgICAgPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPi4gVGhlIHBvaW50ZXIgbXVzdCBiZQorICAgICAgcmVsZWFzZWQgdmlhIDxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4sIGJ1dCB0aGVyZSBpcyBzb21lCisgICAgICBwcm9ibGVtIHJlZ2FyZGluZyB0aGlzLiBUaGlzIGlzc3VlIHdpbGwgYmUgZXhwbGFpbmVkIG1vcmUgYmVsb3cuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBhbiBpbnRlcnJ1cHQgc291cmNlIGlzIGRvbmUgbGlrZSB0aGlzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX215Y2hpcF9pbnRlcnJ1cHQsCisgICAgICAgICAgICAgICAgICBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsICJNeSBDaGlwIiwKKyAgICAgICAgICAgICAgICAgICh2b2lkICopY2hpcCkpIHsKKyAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycSAlZFxuIiwgcGNpLT5pcnEpOworICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICByZXR1cm4gLUVCVVNZOworICB9CisgIGNoaXAtPmlycSA9IHBjaS0+aXJxOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgd2hlcmUgPGZ1bmN0aW9uPnNuZF9teWNoaXBfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPiBpcyB0aGUKKyAgICAgIGludGVycnVwdCBoYW5kbGVyIGRlZmluZWQgPGxpbmsKKyAgICAgIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXIiPjxjaXRldGl0bGU+bGF0ZXI8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgTm90ZSB0aGF0IGNoaXAtJmd0O2lycSBzaG91bGQgYmUgZGVmaW5lZAorICAgICAgb25seSB3aGVuIDxmdW5jdGlvbj5yZXF1ZXN0X2lycSgpPC9mdW5jdGlvbj4gc3VjY2VlZGVkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIE9uIHRoZSBQQ0kgYnVzLCB0aGUgaW50ZXJydXB0cyBjYW4gYmUgc2hhcmVkLiBUaHVzLAorICAgICAgPGNvbnN0YW50PlNBX1NISVJRPC9jb25zdGFudD4gaXMgZ2l2ZW4gYXMgdGhlIGludGVycnVwdCBmbGFnIG9mCisgICAgICA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBsYXN0IGFyZ3VtZW50IG9mIDxmdW5jdGlvbj5yZXF1ZXN0X2lycSgpPC9mdW5jdGlvbj4gaXMgdGhlCisgICAgICBkYXRhIHBvaW50ZXIgcGFzc2VkIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVXN1YWxseSwgdGhlCisgICAgICBjaGlwLXNwZWNpZmljIHJlY29yZCBpcyB1c2VkIGZvciB0aGF0LCBidXQgeW91IGNhbiB1c2Ugd2hhdCB5b3UKKyAgICAgIGxpa2UsIHRvby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJIHdvbid0IGRlZmluZSB0aGUgZGV0YWlsIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhdCB0aGlzCisgICAgICAgIHBvaW50LCBidXQgYXQgbGVhc3QgaXRzIGFwcGVhcmFuY2UgY2FuIGJlIGV4cGxhaW5lZCBub3cuIFRoZQorICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBsb29rcyB1c3VhbGx5IGxpa2UgdGhlIGZvbGxvd2luZzogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZfaWQ7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3cgbGV0J3Mgd3JpdGUgdGhlIGNvcnJlc3BvbmRpbmcgZGVzdHJ1Y3RvciBmb3IgdGhlIHJlc291cmNlcworICAgICAgYWJvdmUuIFRoZSByb2xlIG9mIGRlc3RydWN0b3IgaXMgc2ltcGxlOiBkaXNhYmxlIHRoZSBoYXJkd2FyZQorICAgICAgKGlmIGFscmVhZHkgYWN0aXZhdGVkKSBhbmQgcmVsZWFzZSB0aGUgcmVzb3VyY2VzLiBTbyBmYXIsIHdlCisgICAgICBoYXZlIG5vIGhhcmR3YXJlIHBhcnQsIHNvIHRoZSBkaXNhYmxpbmcgaXMgbm90IHdyaXR0ZW4gaGVyZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgcmVsZWFzaW5nIHRoZSByZXNvdXJjZXMsIDxxdW90ZT5jaGVjay1hbmQtcmVsZWFzZTwvcXVvdGU+CisgICAgICAgIG1ldGhvZCBpcyBhIHNhZmVyIHdheS4gRm9yIHRoZSBpbnRlcnJ1cHQsIGRvIGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKGNoaXAtPmlycSA+PSAwKQorICAgICAgICAgIGZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIFNpbmNlIHRoZSBpcnEgbnVtYmVyIGNhbiBzdGFydCBmcm9tIDAsIHlvdSBzaG91bGQgaW5pdGlhbGl6ZQorICAgICAgICBjaGlwLSZndDtpcnEgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIChlLmcuIC0xKSwgc28gdGhhdCB5b3UgY2FuCisgICAgICAgIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgaXJxIG51bWJlciBhcyBhYm92ZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4geW91IHJlcXVlc3RlZCBJL08gcG9ydHMgb3IgbWVtb3J5IHJlZ2lvbnMgdmlhCisJPGZ1bmN0aW9uPnBjaV9yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4gb3IKKwk8ZnVuY3Rpb24+cGNpX3JlcXVlc3RfcmVnaW9ucygpPC9mdW5jdGlvbj4gbGlrZSB0aGlzIGV4YW1wbGUsCisJcmVsZWFzZSB0aGUgcmVzb3VyY2UocykgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24sCisJPGZ1bmN0aW9uPnBjaV9yZWxlYXNlX3JlZ2lvbigpPC9mdW5jdGlvbj4gb3IKKwk8ZnVuY3Rpb24+cGNpX3JlbGVhc2VfcmVnaW9ucygpPC9mdW5jdGlvbj4uCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVdoZW4geW91IHJlcXVlc3RlZCBtYW51YWxseSB2aWEgPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPgorCW9yIDxmdW5jdGlvbj5yZXF1ZXN0X21lbV9yZWdpb248L2Z1bmN0aW9uPiwgeW91IGNhbiByZWxlYXNlIGl0IHZpYQorCTxmdW5jdGlvbj5yZWxlYXNlX3Jlc291cmNlKCk8L2Z1bmN0aW9uPi4gIFN1cHBvc2UgdGhhdCB5b3Uga2VlcAorCXRoZSByZXNvdXJjZSBwb2ludGVyIHJldHVybmVkIGZyb20gPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPgorCWluIGNoaXAtJmd0O3Jlc19wb3J0LCB0aGUgcmVsZWFzZSBwcm9jZWR1cmUgbG9va3MgbGlrZSBiZWxvdzoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoY2hpcC0+cmVzX3BvcnQpIHsKKyAgICAgICAgICByZWxlYXNlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKKyAgICAgICAgICBrZnJlZV9ub2NoZWNrKGNoaXAtPnJlc19wb3J0KTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgIEFzIHlvdSBjYW4gc2VlLCB0aGUgcmVzb3VyY2UgcG9pbnRlciBpcyBhbHNvIHRvIGJlIGZyZWVkCisgICAgICB2aWEgPGZ1bmN0aW9uPmtmcmVlX25vY2hlY2soKTwvZnVuY3Rpb24+IGFmdGVyCisgICAgICA8ZnVuY3Rpb24+cmVsZWFzZV9yZXNvdXJjZSgpPC9mdW5jdGlvbj4gaXMgY2FsbGVkLiBZb3UKKyAgICAgIGNhbm5vdCB1c2UgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPiBoZXJlLCBiZWNhdXNlIG9uIEFMU0EsCisgICAgICA8ZnVuY3Rpb24+a2ZyZWUoKTwvZnVuY3Rpb24+IG1heSBiZSBhIHdyYXBwZXIgdG8gaXRzIG93bgorICAgICAgYWxsb2NhdG9yIHdpdGggdGhlIG1lbW9yeSBkZWJ1Z2dpbmcuIFNpbmNlIHRoZSByZXNvdXJjZSBwb2ludGVyCisgICAgICBpcyBhbGxvY2F0ZWQgZXh0ZXJuYWxseSBvdXRzaWRlIHRoZSBBTFNBLCBpdCBtdXN0IGJlIHJlbGVhc2VkCisgICAgICB2aWEgdGhlIG5hdGl2ZQorICAgICAgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPi4KKyAgICAgIDxmdW5jdGlvbj5rZnJlZV9ub2NoZWNrKCk8L2Z1bmN0aW9uPiBpcyB1c2VkIGZvciB0aGF0OyBpdCBjYWxscworICAgICAgdGhlIG5hdGl2ZSA8ZnVuY3Rpb24+a2ZyZWUoKTwvZnVuY3Rpb24+IHdpdGhvdXQgd3JhcHBlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgRG9uJ3QgZm9yZ2V0IHRvIGNhbGwgPGZ1bmN0aW9uPnBjaV9kaXNhYmxlX2RldmljZSgpPC9mdW5jdGlvbj4KKyAgICAgIGJlZm9yZSBhbGwgZmluaXNoZWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbmQgZmluYWxseSwgcmVsZWFzZSB0aGUgY2hpcC1zcGVjaWZpYyByZWNvcmQuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAga2ZyZWUoY2hpcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBZ2FpbiwgcmVtZW1iZXIgdGhhdCB5b3UgY2Fubm90CisgICAgICBzZXQgPHBhcmFtZXRlcj5fX2RldmV4aXQ8L3BhcmFtZXRlcj4gcHJlZml4IGZvciB0aGlzIGRlc3RydWN0b3IuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFdlIGRpZG4ndCBpbXBsZW1lbnQgdGhlIGhhcmR3YXJlLWRpc2FibGluZyBwYXJ0IGluIHRoZSBhYm92ZS4KKyAgICAgIElmIHlvdSBuZWVkIHRvIGRvIHRoaXMsIHBsZWFzZSBub3RlIHRoYXQgdGhlIGRlc3RydWN0b3IgbWF5IGJlCisgICAgICBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGlwIGlzIGNvbXBsZXRlZC4KKyAgICAgIEl0IHdvdWxkIGJlIGJldHRlciB0byBoYXZlIGEgZmxhZyB0byBza2lwIHRoZSBoYXJkd2FyZS1kaXNhYmxpbmcKKyAgICAgIGlmIHRoZSBoYXJkd2FyZSB3YXMgbm90IGluaXRpYWxpemVkIHlldC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBjaGlwLWRhdGEgaXMgYXNzaWduZWQgdG8gdGhlIGNhcmQgdXNpbmcKKyAgICAgIDxmdW5jdGlvbj5zbmRfZGV2aWNlX25ldygpPC9mdW5jdGlvbj4gd2l0aAorICAgICAgPGNvbnN0YW50PlNORFJWX0RFVl9MT1dMRUxWRUw8L2NvbnN0YW50PiAsIGl0cyBkZXN0cnVjdG9yIGlzIAorICAgICAgY2FsbGVkIGF0IHRoZSBsYXN0LiAgVGhhdCBpcywgaXQgaXMgYXNzdXJlZCB0aGF0IGFsbCBvdGhlcgorICAgICAgY29tcG9uZW50cyBsaWtlIFBDTXMgYW5kIGNvbnRyb2xzIGhhdmUgYmVlbiBhbHJlYWR5IHJlbGVhc2VkLgorICAgICAgWW91IGRvbid0IGhhdmUgdG8gY2FsbCBzdG9wcGluZyBQQ01zLCBldGMuIGV4cGxpY2l0bHksIGJ1dCBqdXN0CisgICAgICBzdG9wIHRoZSBoYXJkd2FyZSBpbiB0aGUgbG93LWxldmVsLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1hbmFnZW1lbnQgb2YgYSBtZW1vcnktbWFwcGVkIHJlZ2lvbiBpcyBhbG1vc3QgYXMgc2FtZSBhcworICAgICAgICB0aGUgbWFuYWdlbWVudCBvZiBhbiBpL28gcG9ydC4gWW91J2xsIG5lZWQgdGhyZWUgZmllbGRzIGxpa2UKKyAgICAgICAgdGhlIGZvbGxvd2luZzogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9teWNoaXAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICB1bnNpZ25lZCBsb25nIGlvYmFzZV9waHlzOworICAgICAgICAgIHZvaWQgX19pb21lbSAqaW9iYXNlX3ZpcnQ7CisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBhbmQgdGhlIGFsbG9jYXRpb24gd291bGQgYmUgbGlrZSBiZWxvdzoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpKSA8IDApIHsKKyAgICAgICAgICBrZnJlZShjaGlwKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CisgIGNoaXAtPmlvYmFzZV9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CisgIGNoaXAtPmlvYmFzZV92aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKGNoaXAtPmlvYmFzZV9waHlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaSwgMCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIAorICAgICAgICBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGVzdHJ1Y3RvciB3b3VsZCBiZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBpZiAoY2hpcC0+aW9iYXNlX3ZpcnQpCisgICAgICAgICAgICAgICAgICBpb3VubWFwKGNoaXAtPmlvYmFzZV92aXJ0KTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLWRldmljZS1zdHJ1Y3QiPgorICAgICAgPHRpdGxlPlJlZ2lzdHJhdGlvbiBvZiBEZXZpY2UgU3RydWN0PC90aXRsZT4KKyAgICAgIDxwYXJhPgorCUF0IHNvbWUgcG9pbnQsIHR5cGljYWxseSBhZnRlciBjYWxsaW5nIDxmdW5jdGlvbj5zbmRfZGV2aWNlX25ldygpPC9mdW5jdGlvbj4sCisJeW91IG5lZWQgdG8gcmVnaXN0ZXIgdGhlIDxzdHJ1Y3RuYW1lPnN0cnVjdCBkZXZpY2U8L3N0cnVjdG5hbWU+IG9mIHRoZSBjaGlwCisJeW91J3JlIGhhbmRsaW5nIGZvciB1ZGV2IGFuZCBjby4gIEFMU0EgcHJvdmlkZXMgYSBtYWNybyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisJb2xkZXIga2VybmVscy4gIFNpbXBseSBjYWxsIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisJc28gdGhhdCBpdCBzdG9yZXMgdGhlIFBDSSdzIGRldmljZSBwb2ludGVyIHRvIHRoZSBjYXJkLiAgVGhpcyB3aWxsIGJlCisJcmVmZXJyZWQgYnkgQUxTQSBjb3JlIGZ1bmN0aW9ucyBsYXRlciB3aGVuIHRoZSBkZXZpY2VzIGFyZSByZWdpc3RlcmVkLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisJSW4gdGhlIGNhc2Ugb2Ygbm9uLVBDSSwgcGFzcyB0aGUgcHJvcGVyIGRldmljZSBzdHJ1Y3QgcG9pbnRlciBvZiB0aGUgQlVTCisJaW5zdGVhZC4gIChJbiB0aGUgY2FzZSBvZiBsZWdhY3kgSVNBIHdpdGhvdXQgUG5QLCB5b3UgZG9uJ3QgaGF2ZSB0byBkbworCWFueXRoaW5nLikKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLWVudHJpZXMiPgorICAgICAgPHRpdGxlPlBDSSBFbnRyaWVzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTbyBmYXIsIHNvIGdvb2QuIExldCdzIGZpbmlzaCB0aGUgcmVzdCBvZiBtaXNzaW5nIFBDSQorICAgICAgc3R1ZmZzLiBBdCBmaXJzdCwgd2UgbmVlZCBhCisgICAgICA8c3RydWN0bmFtZT5wY2lfZGV2aWNlX2lkPC9zdHJ1Y3RuYW1lPiB0YWJsZSBmb3IgdGhpcworICAgICAgY2hpcHNldC4gSXQncyBhIHRhYmxlIG9mIFBDSSB2ZW5kb3IvZGV2aWNlIElEIG51bWJlciwgYW5kIHNvbWUKKyAgICAgIG1hc2tzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBleGFtcGxlLAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbXljaGlwX2lkc1tdID0geworICAgICAgICAgIHsgUENJX1ZFTkRPUl9JRF9GT08sIFBDSV9ERVZJQ0VfSURfQkFSLAorICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgeyAwLCB9CisgIH07CisgIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbmRfbXljaGlwX2lkcyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhbmQgc2Vjb25kIGZpZWxkcyBvZgorICAgICAgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gc3RydWN0IGFyZSB0aGUgdmVuZG9yIGFuZAorICAgICAgZGV2aWNlIElEcy4gSWYgeW91IGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGZpbHRlciB0aGUgbWF0Y2hpbmcKKyAgICAgIGRldmljZXMsIHlvdSBjYW4gdXNlIHRoZSByZXN0IG9mIGZpZWxkcyBsaWtlIGFib3ZlLiBUaGUgbGFzdAorICAgICAgZmllbGQgb2YgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gc3RydWN0IGlzIGEKKyAgICAgIHByaXZhdGUgZGF0YSBmb3IgdGhpcyBlbnRyeS4gWW91IGNhbiBzcGVjaWZ5IGFueSB2YWx1ZSBoZXJlLCBmb3IKKyAgICAgIGV4YW1wbGUsIHRvIHRlbGwgdGhlIHR5cGUgb2YgZGlmZmVyZW50IG9wZXJhdGlvbnMgcGVyIGVhY2gKKyAgICAgIGRldmljZSBJRHMuIFN1Y2ggYW4gZXhhbXBsZSBpcyBmb3VuZCBpbiBpbnRlbDh4MCBkcml2ZXIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGxhc3QgZW50cnkgb2YgdGhpcyBsaXN0IGlzIHRoZSB0ZXJtaW5hdG9yLiBZb3UgbXVzdAorICAgICAgc3BlY2lmeSB0aGlzIGFsbC16ZXJvIGVudHJ5LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZW4sIHByZXBhcmUgdGhlIDxzdHJ1Y3RuYW1lPnBjaV9kcml2ZXI8L3N0cnVjdG5hbWU+IHJlY29yZDoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgICAgIC5uYW1lID0gIk15IE93biBDaGlwIiwKKyAgICAgICAgICAuaWRfdGFibGUgPSBzbmRfbXljaGlwX2lkcywKKyAgICAgICAgICAucHJvYmUgPSBzbmRfbXljaGlwX3Byb2JlLAorICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXljaGlwX3JlbW92ZSksCisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cHJvYmU8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5yZW1vdmU8L3N0cnVjdGZpZWxkPiBmdW5jdGlvbnMgYXJlIHdoYXQgd2UgYWxyZWFkeQorICAgICAgZGVmaW5lZCBpbiAKKyAgICAgIHRoZSBwcmV2aW91cyBzZWN0aW9ucy4gVGhlIDxzdHJ1Y3RmaWVsZD5yZW1vdmU8L3N0cnVjdGZpZWxkPiBzaG91bGQKKyAgICAgIGJlIGRlZmluZWQgd2l0aCAKKyAgICAgIDxmdW5jdGlvbj5fX2RldmV4aXRfcCgpPC9mdW5jdGlvbj4gbWFjcm8sIHNvIHRoYXQgaXQncyBub3QKKyAgICAgIGRlZmluZWQgZm9yIGJ1aWx0LWluIChhbmQgbm9uLWhvdC1wbHVnZ2FibGUpIGNhc2UuIFRoZQorICAgICAgPHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPiAKKyAgICAgIGZpZWxkIGlzIHRoZSBuYW1lIHN0cmluZyBvZiB0aGlzIGRldmljZS4gTm90ZSB0aGF0IHlvdSBtdXN0IG5vdAorICAgICAgdXNlIGEgc2xhc2ggPHF1b3RlPi88L3F1b3RlPiBpbiB0aGlzIHN0cmluZy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbmQgYXQgbGFzdCwgdGhlIG1vZHVsZSBlbnRyaWVzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9teWNoaXBfaW5pdCh2b2lkKQorICB7CisgICAgICAgICAgcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmZHJpdmVyKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfbXljaGlwX2V4aXQodm9pZCkKKyAgeworICAgICAgICAgIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKyAgfQorCisgIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9teWNoaXBfaW5pdCkKKyAgbW9kdWxlX2V4aXQoYWxzYV9jYXJkX215Y2hpcF9leGl0KQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3RlIHRoYXQgdGhlc2UgbW9kdWxlIGVudHJpZXMgYXJlIHRhZ2dlZCB3aXRoCisgICAgICA8cGFyYW1ldGVyPl9faW5pdDwvcGFyYW1ldGVyPiBhbmQgCisgICAgICA8cGFyYW1ldGVyPl9fZXhpdDwvcGFyYW1ldGVyPiBwcmVmaXhlcywgbm90CisgICAgICA8cGFyYW1ldGVyPl9fZGV2aW5pdDwvcGFyYW1ldGVyPiBub3IKKyAgICAgIDxwYXJhbWV0ZXI+X19kZXZleGl0PC9wYXJhbWV0ZXI+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgT2gsIG9uZSB0aGluZyB3YXMgZm9yZ290dGVuLiBJZiB5b3UgaGF2ZSBubyBleHBvcnRlZCBzeW1ib2xzLAorICAgICAgICB5b3UgbmVlZCB0byBkZWNsYXJlIGl0IG9uIDIuMiBvciAyLjQga2VybmVscyAob24gMi42IGtlcm5lbHMKKyAgICAgICAgaXQncyBub3QgbmVjZXNzYXJ5LCB0aG91Z2gpLgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIEVYUE9SVF9OT19TWU1CT0xTOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgVGhhdCdzIGFsbCEKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUENNIEludGVyZmFjZSAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBjbS1pbnRlcmZhY2UiPgorICAgIDx0aXRsZT5QQ00gSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWdlbmVyYWwiPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBQQ00gbWlkZGxlIGxheWVyIG9mIEFMU0EgaXMgcXVpdGUgcG93ZXJmdWwgYW5kIGl0IGlzIG9ubHkKKyAgICAgIG5lY2Vzc2FyeSBmb3IgZWFjaCBkcml2ZXIgdG8gaW1wbGVtZW50IHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zCisgICAgICB0byBhY2Nlc3MgaXRzIGhhcmR3YXJlLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGFjY2Vzc2luZyB0byB0aGUgUENNIGxheWVyLCB5b3UgbmVlZCB0byBpbmNsdWRlCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbS5oJmd0OzwvZmlsZW5hbWU+IGFib3ZlIGFsbC4gSW4gYWRkaXRpb24sCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbV9wYXJhbXMuaCZndDs8L2ZpbGVuYW1lPiBtaWdodCBiZSBuZWVkZWQKKyAgICAgIGlmIHlvdSBhY2Nlc3MgdG8gc29tZSBmdW5jdGlvbnMgcmVsYXRlZCB3aXRoIGh3X3BhcmFtLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEVhY2ggY2FyZCBkZXZpY2UgY2FuIGhhdmUgdXAgdG8gZm91ciBwY20gaW5zdGFuY2VzLiBBIHBjbQorICAgICAgaW5zdGFuY2UgY29ycmVzcG9uZHMgdG8gYSBwY20gZGV2aWNlIGZpbGUuIFRoZSBsaW1pdGF0aW9uIG9mCisgICAgICBudW1iZXIgb2YgaW5zdGFuY2VzIGNvbWVzIG9ubHkgZnJvbSB0aGUgYXZhaWxhYmxlIGJpdCBzaXplIG9mCisgICAgICB0aGUgbGludXgncyBkZXZpY2UgbnVtYmVyLiBPbmNlIHdoZW4gNjRiaXQgZGV2aWNlIG51bWJlciBpcworICAgICAgdXNlZCwgd2UnbGwgaGF2ZSBtb3JlIGF2YWlsYWJsZSBwY20gaW5zdGFuY2VzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEEgcGNtIGluc3RhbmNlIGNvbnNpc3RzIG9mIHBjbSBwbGF5YmFjayBhbmQgY2FwdHVyZSBzdHJlYW1zLAorICAgICAgYW5kIGVhY2ggcGNtIHN0cmVhbSBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBwY20gc3Vic3RyZWFtcy4gU29tZQorICAgICAgc291bmRjYXJkIHN1cHBvcnRzIHRoZSBtdWx0aXBsZS1wbGF5YmFjayBmdW5jdGlvbi4gRm9yIGV4YW1wbGUsCisgICAgICBlbXUxMGsxIGhhcyBhIFBDTSBwbGF5YmFjayBvZiAzMiBzdGVyZW8gc3Vic3RyZWFtcy4gSW4gdGhpcyBjYXNlLCBhdAorICAgICAgZWFjaCBvcGVuLCBhIGZyZWUgc3Vic3RyZWFtIGlzICh1c3VhbGx5KSBhdXRvbWF0aWNhbGx5IGNob3NlbgorICAgICAgYW5kIG9wZW5lZC4gTWVhbndoaWxlLCB3aGVuIG9ubHkgb25lIHN1YnN0cmVhbSBleGlzdHMgYW5kIGl0IHdhcworICAgICAgYWxyZWFkeSBvcGVuZWQsIHRoZSBzdWNjZWVkaW5nIG9wZW4gd2lsbCByZXN1bHQgaW4gdGhlIGJsb2NraW5nCisgICAgICBvciB0aGUgZXJyb3Igd2l0aCA8Y29uc3RhbnQ+RUFHQUlOPC9jb25zdGFudD4gYWNjb3JkaW5nIHRvIHRoZQorICAgICAgZmlsZSBvcGVuIG1vZGUuIEJ1dCB5b3UgZG9uJ3QgaGF2ZSB0byBrbm93IHRoZSBkZXRhaWwgaW4geW91cgorICAgICAgZHJpdmVyLiBUaGUgUENNIG1pZGRsZSBsYXllciB3aWxsIHRha2UgYWxsIHN1Y2ggam9icy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtZXhhbXBsZSI+CisgICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICBUaGUgZXhhbXBsZSBjb2RlIGJlbG93IGRvZXMgbm90IGluY2x1ZGUgYW55IGhhcmR3YXJlIGFjY2VzcworICAgICAgcm91dGluZXMgYnV0IHNob3dzIG9ubHkgdGhlIHNrZWxldG9uLCBob3cgdG8gYnVpbGQgdXAgdGhlIFBDTQorICAgICAgaW50ZXJmYWNlcy4KKworICAgICAgICA8ZXhhbXBsZT4KKyAgICAgICAgICA8dGl0bGU+UENNIEV4YW1wbGUgQ29kZTwvdGl0bGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyAgLi4uLgorCisgIC8qIGhhcmR3YXJlIGRlZmluaXRpb24gKi8KKyAgc3RhdGljIHNuZF9wY21faGFyZHdhcmVfdCBzbmRfbXljaGlwX3BsYXliYWNrX2h3ID0geworICAgICAgICAgIC5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCisgICAgICAgICAgLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKyAgICAgICAgICAucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisgICAgICAgICAgLnJhdGVfbWluID0gICAgICAgICA4MDAwLAorICAgICAgICAgIC5yYXRlX21heCA9ICAgICAgICAgNDgwMDAsCisgICAgICAgICAgLmNoYW5uZWxzX21pbiA9ICAgICAyLAorICAgICAgICAgIC5jaGFubmVsc19tYXggPSAgICAgMiwKKyAgICAgICAgICAuYnVmZmVyX2J5dGVzX21heCA9IDMyNzY4LAorICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWluID0gNDA5NiwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21heCA9IDMyNzY4LAorICAgICAgICAgIC5wZXJpb2RzX21pbiA9ICAgICAgMSwKKyAgICAgICAgICAucGVyaW9kc19tYXggPSAgICAgIDEwMjQsCisgIH07CisKKyAgLyogaGFyZHdhcmUgZGVmaW5pdGlvbiAqLworICBzdGF0aWMgc25kX3BjbV9oYXJkd2FyZV90IHNuZF9teWNoaXBfY2FwdHVyZV9odyA9IHsKKyAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisgICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKKyAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAorICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKKyAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisgICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCisgICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAorICB9OworCisgIC8qIG9wZW4gY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BsYXliYWNrX29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKyAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfcGxheWJhY2tfaHc7CisgICAgICAgICAgLy8gbW9yZSBoYXJkd2FyZS1pbml0aWFsaXphdGlvbiB3aWxsIGJlIGRvbmUgaGVyZQorICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogY2xvc2UgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BsYXliYWNrX2Nsb3NlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIC8vIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlcyB3aWxsIGJlIGhlcmUKKyAgICAgICAgICByZXR1cm4gMDsKKworICB9CisKKyAgLyogb3BlbiBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfY2FwdHVyZV9vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX2NhcHR1cmVfaHc7CisgICAgICAgICAgLy8gbW9yZSBoYXJkd2FyZS1pbml0aWFsaXphdGlvbiB3aWxsIGJlIGRvbmUgaGVyZQorICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogY2xvc2UgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2NhcHR1cmVfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgLy8gdGhlIGhhcmR3YXJlLXNwZWNpZmljIGNvZGVzIHdpbGwgYmUgaGVyZQorICAgICAgICAgIHJldHVybiAwOworCisgIH0KKworICAvKiBod19wYXJhbXMgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9wY21faHdfcGFyYW1zX3QgKiBod19wYXJhbXMpCisgIHsKKyAgICAgICAgICByZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworICB9CisKKyAgLyogaHdfZnJlZSBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX2h3X2ZyZWUoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKKyAgfQorCisgIC8qIHByZXBhcmUgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV9wcmVwYXJlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgLyogc2V0IHVwIHRoZSBoYXJkd2FyZSB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgKiBmb3IgZXhhbXBsZS4uLgorICAgICAgICAgICAqLworICAgICAgICAgIG15Y2hpcF9zZXRfc2FtcGxlX2Zvcm1hdChjaGlwLCBydW50aW1lLT5mb3JtYXQpOworICAgICAgICAgIG15Y2hpcF9zZXRfc2FtcGxlX3JhdGUoY2hpcCwgcnVudGltZS0+cmF0ZSk7CisgICAgICAgICAgbXljaGlwX3NldF9jaGFubmVscyhjaGlwLCBydW50aW1lLT5jaGFubmVscyk7CisgICAgICAgICAgbXljaGlwX3NldF9kbWFfc2V0dXAoY2hpcCwgcnVudGltZS0+ZG1hX2FyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpcC0+YnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpcC0+cGVyaW9kX3NpemUpOworICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogdHJpZ2dlciBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNtZCkKKyAgeworICAgICAgICAgIHN3aXRjaCAoY21kKSB7CisgICAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKyAgICAgICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB0byBzdGFydCB0aGUgUENNIGVuZ2luZQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorICAgICAgICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHRvIHN0b3AgdGhlIFBDTSBlbmdpbmUKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICB9CisgIH0KKworICAvKiBwb2ludGVyIGNhbGxiYWNrICovCisgIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorICBzbmRfbXljaGlwX3BjbV9wb2ludGVyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHVuc2lnbmVkIGludCBjdXJyZW50X3B0cjsKKworICAgICAgICAgIC8qIGdldCB0aGUgY3VycmVudCBoYXJkd2FyZSBwb2ludGVyICovCisgICAgICAgICAgY3VycmVudF9wdHIgPSBteWNoaXBfZ2V0X2h3X3BvaW50ZXIoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIGN1cnJlbnRfcHRyOworICB9CisKKyAgLyogb3BlcmF0b3JzICovCisgIHN0YXRpYyBzbmRfcGNtX29wc190IHNuZF9teWNoaXBfcGxheWJhY2tfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgICAgIHNuZF9teWNoaXBfcGxheWJhY2tfb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgICAgICBzbmRfbXljaGlwX3BsYXliYWNrX2Nsb3NlLAorICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAorICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKKyAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAorICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCisgICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKKyAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAorICB9OworCisgIC8qIG9wZXJhdG9ycyAqLworICBzdGF0aWMgc25kX3BjbV9vcHNfdCBzbmRfbXljaGlwX2NhcHR1cmVfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgICAgIHNuZF9teWNoaXBfY2FwdHVyZV9vcGVuLAorICAgICAgICAgIC5jbG9zZSA9ICAgICAgIHNuZF9teWNoaXBfY2FwdHVyZV9jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKKworICAvKgorICAgKiAgZGVmaW5pdGlvbnMgb2YgY2FwdHVyZSBhcmUgb21pdHRlZCBoZXJlLi4uCisgICAqLworCisgIC8qIGNyZWF0ZSBhIHBjbSBkZXZpY2UgKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9uZXdfcGNtKG15Y2hpcF90ICpjaGlwKQorICB7CisgICAgICAgICAgc25kX3BjbV90ICpwY207CisgICAgICAgICAgaW50IGVycjsKKworICAgICAgICAgIGlmICgoZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIk15IENoaXAiLCAwLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjbSkpIDwgMCkgCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIHBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgICAgICAgICBzdHJjcHkocGNtLT5uYW1lLCAiTXkgQ2hpcCIpOworICAgICAgICAgIGNoaXAtPnBjbSA9IHBjbTsKKyAgICAgICAgICAvKiBzZXQgb3BlcmF0b3JzICovCisgICAgICAgICAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnNuZF9teWNoaXBfcGxheWJhY2tfb3BzKTsKKyAgICAgICAgICBzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX2NhcHR1cmVfb3BzKTsKKyAgICAgICAgICAvKiBwcmUtYWxsb2NhdGlvbiBvZiBidWZmZXJzICovCisgICAgICAgICAgLyogTk9URTogdGhpcyBtYXkgZmFpbCAqLworICAgICAgICAgIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgQSBwY20gaW5zdGFuY2UgaXMgYWxsb2NhdGVkIGJ5IDxmdW5jdGlvbj5zbmRfcGNtX25ldygpPC9mdW5jdGlvbj4KKyAgICAgIGZ1bmN0aW9uLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY3JlYXRlIGEgY29uc3RydWN0b3IgZm9yIHBjbSwKKyAgICAgIG5hbWVseSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9uZXdfcGNtKG15Y2hpcF90ICpjaGlwKQorICB7CisgICAgICAgICAgc25kX3BjbV90ICpwY207CisgICAgICAgICAgaW50IGVycjsKKworICAgICAgICAgIGlmICgoZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIk15IENoaXAiLCAwLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjbSkpIDwgMCkgCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIHBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgICAgICAgICBzdHJjcHkocGNtLT5uYW1lLCAiTXkgQ2hpcCIpOworICAgICAgICAgIGNoaXAtPnBjbSA9IHBjbTsKKwkgIC4uLi4KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPnNuZF9wY21fbmV3KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiB0YWtlcyB0aGUgZm91cgorICAgICAgYXJndW1lbnRzLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhcmQgcG9pbnRlciB0byB3aGljaCB0aGlzCisgICAgICBwY20gaXMgYXNzaWduZWQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBJRCBzdHJpbmcuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50ICg8cGFyYW1ldGVyPmluZGV4PC9wYXJhbWV0ZXI+LCAwIGluIHRoZQorICAgICAgYWJvdmUpIGlzIHRoZSBpbmRleCBvZiB0aGlzIG5ldyBwY20uIEl0IGJlZ2lucyBmcm9tIHplcm8uIFdoZW4KKyAgICAgIHlvdSB3aWxsIGNyZWF0ZSBtb3JlIHRoYW4gb25lIHBjbSBpbnN0YW5jZXMsIHNwZWNpZnkgdGhlCisgICAgICBkaWZmZXJlbnQgbnVtYmVycyBpbiB0aGlzIGFyZ3VtZW50LiBGb3IgZXhhbXBsZSwKKyAgICAgIDxwYXJhbWV0ZXI+aW5kZXg8L3BhcmFtZXRlcj4gPSAxIGZvciB0aGUgc2Vjb25kIFBDTSBkZXZpY2UuICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb3VydGggYW5kIGZpZnRoIGFyZ3VtZW50cyBhcmUgdGhlIG51bWJlciBvZiBzdWJzdHJlYW1zCisgICAgICBmb3IgcGxheWJhY2sgYW5kIGNhcHR1cmUsIHJlc3BlY3RpdmVseS4gSGVyZSBib3RoIDEgYXJlIGdpdmVuIGluCisgICAgICB0aGUgYWJvdmUgZXhhbXBsZS4gIFdoZW4gbm8gcGxheWJhY2sgb3Igbm8gY2FwdHVyZSBpcyBhdmFpbGFibGUsCisgICAgICBwYXNzIDAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiBhIGNoaXAgc3VwcG9ydHMgbXVsdGlwbGUgcGxheWJhY2tzIG9yIGNhcHR1cmVzLCB5b3UgY2FuCisgICAgICBzcGVjaWZ5IG1vcmUgbnVtYmVycywgYnV0IHRoZXkgbXVzdCBiZSBoYW5kbGVkIHByb3Blcmx5IGluCisgICAgICBvcGVuL2Nsb3NlLCBldGMuIGNhbGxiYWNrcy4gIFdoZW4geW91IG5lZWQgdG8ga25vdyB3aGljaAorICAgICAgc3Vic3RyZWFtIHlvdSBhcmUgcmVmZXJyaW5nIHRvLCB0aGVuIGl0IGNhbiBiZSBvYnRhaW5lZCBmcm9tCisgICAgICA8dHlwZT5zbmRfcGNtX3N1YnN0cmVhbV90PC90eXBlPiBkYXRhIHBhc3NlZCB0byBlYWNoIGNhbGxiYWNrCisgICAgICBhcyBmb2xsb3dzOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07CisgIGludCBpbmRleCA9IHN1YnN0cmVhbS0+bnVtYmVyOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciB0aGUgcGNtIGlzIGNyZWF0ZWQsIHlvdSBuZWVkIHRvIHNldCBvcGVyYXRvcnMgZm9yIGVhY2gKKyAgICAgICAgcGNtIHN0cmVhbS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKyAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX3BsYXliYWNrX29wcyk7CisgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKyAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX2NhcHR1cmVfb3BzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG9wZXJhdG9ycyBhcmUgZGVmaW5lZCB0eXBpY2FsbHkgbGlrZSB0aGlzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzbmRfcGNtX29wc190IHNuZF9teWNoaXBfcGxheWJhY2tfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgICAgIHNuZF9teWNoaXBfcGNtX29wZW4sCisgICAgICAgICAgLmNsb3NlID0gICAgICAgc25kX215Y2hpcF9wY21fY2xvc2UsCisgICAgICAgICAgLmlvY3RsID0gICAgICAgc25kX3BjbV9saWJfaW9jdGwsCisgICAgICAgICAgLmh3X3BhcmFtcyA9ICAgc25kX215Y2hpcF9wY21faHdfcGFyYW1zLAorICAgICAgICAgIC5od19mcmVlID0gICAgIHNuZF9teWNoaXBfcGNtX2h3X2ZyZWUsCisgICAgICAgICAgLnByZXBhcmUgPSAgICAgc25kX215Y2hpcF9wY21fcHJlcGFyZSwKKyAgICAgICAgICAudHJpZ2dlciA9ICAgICBzbmRfbXljaGlwX3BjbV90cmlnZ2VyLAorICAgICAgICAgIC5wb2ludGVyID0gICAgIHNuZF9teWNoaXBfcGNtX3BvaW50ZXIsCisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBFYWNoIG9mIGNhbGxiYWNrcyBpcyBleHBsYWluZWQgaW4gdGhlIHN1YnNlY3Rpb24gCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzIj48Y2l0ZXRpdGxlPgorICAgICAgICBPcGVyYXRvcnM8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWZ0ZXIgc2V0dGluZyB0aGUgb3BlcmF0b3JzLCBtb3N0IGxpa2VseSB5b3UnZCBsaWtlIHRvCisgICAgICAgIHByZS1hbGxvY2F0ZSB0aGUgYnVmZmVyLiBGb3IgdGhlIHByZS1hbGxvY2F0aW9uLCBzaW1wbHkgY2FsbAorICAgICAgICB0aGUgZm9sbG93aW5nOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEl0IHdpbGwgYWxsb2NhdGUgdXAgdG8gNjRrQiBidWZmZXIgYXMgZGVmYXVsdC4gVGhlIGRldGFpbHMgb2YKKyAgICAgIGJ1ZmZlciBtYW5hZ2VtZW50IHdpbGwgYmUgZGVzY3JpYmVkIGluIHRoZSBsYXRlciBzZWN0aW9uIDxsaW5rCisgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQorICAgICAgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWRkaXRpb25hbGx5LCB5b3UgY2FuIHNldCBzb21lIGV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGlzIHBjbQorICAgICAgICBpbiBwY20tJmd0O2luZm9fZmxhZ3MuCisgICAgICAgIFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZSBkZWZpbmVkIGFzCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19YWFg8L2NvbnN0YW50PiBpbgorICAgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZC5oJmd0OzwvZmlsZW5hbWU+LCB3aGljaCBpcyB1c2VkIGZvcgorICAgICAgICB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbiAoZGVzY3JpYmVkIGxhdGVyKS4gV2hlbiB5b3VyIHNvdW5kY2hpcAorICAgICAgICBzdXBwb3J0cyBvbmx5IGhhbGYtZHVwbGV4LCBzcGVjaWZ5IGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgcGNtLT5pbmZvX2ZsYWdzID0gU05EUlZfUENNX0lORk9fSEFMRl9EVVBMRVg7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1kZXN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT4uLi4gQW5kIHRoZSBEZXN0cnVjdG9yPzwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlc3RydWN0b3IgZm9yIGEgcGNtIGluc3RhbmNlIGlzIG5vdCBhbHdheXMKKyAgICAgIG5lY2Vzc2FyeS4gU2luY2UgdGhlIHBjbSBkZXZpY2Ugd2lsbCBiZSByZWxlYXNlZCBieSB0aGUgbWlkZGxlCisgICAgICBsYXllciBjb2RlIGF1dG9tYXRpY2FsbHksIHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgZGVzdHJ1Y3RvcgorICAgICAgZXhwbGljaXRseS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkZXN0cnVjdG9yIHdvdWxkIGJlIG5lY2Vzc2FyeSB3aGVuIHlvdSBjcmVhdGVkIHNvbWUKKyAgICAgICAgc3BlY2lhbCByZWNvcmRzIGludGVybmFsbHkgYW5kIG5lZWQgdG8gcmVsZWFzZSB0aGVtLiBJbiBzdWNoIGEKKyAgICAgICAgY2FzZSwgc2V0IHRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIHRvCisgICAgICAgIHBjbS0mZ3Q7cHJpdmF0ZV9mcmVlOiAKKworICAgICAgICA8ZXhhbXBsZT4KKyAgICAgICAgICA8dGl0bGU+UENNIEluc3RhbmNlIHdpdGggYSBEZXN0cnVjdG9yPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgbXljaGlwX3BjbV9mcmVlKHNuZF9wY21fdCAqcGNtKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBzbmRfcGNtX2NoaXAocGNtKTsKKyAgICAgICAgICAvKiBmcmVlIHlvdXIgb3duIGRhdGEgKi8KKyAgICAgICAgICBrZnJlZShjaGlwLT5teV9wcml2YXRlX3BjbV9kYXRhKTsKKyAgICAgICAgICAvLyBkbyB3aGF0IHlvdSBsaWtlIGVsc2UKKyAgICAgICAgICAuLi4uCisgIH0KKworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX25ld19wY20obXljaGlwX3QgKmNoaXApCisgIHsKKyAgICAgICAgICBzbmRfcGNtX3QgKnBjbTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgLyogYWxsb2NhdGUgeW91ciBvd24gZGF0YSAqLworICAgICAgICAgIGNoaXAtPm15X3ByaXZhdGVfcGNtX2RhdGEgPSBrbWFsbG9jKC4uLik7CisgICAgICAgICAgLyogc2V0IHRoZSBkZXN0cnVjdG9yICovCisgICAgICAgICAgcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworICAgICAgICAgIHBjbS0+cHJpdmF0ZV9mcmVlID0gbXljaGlwX3BjbV9mcmVlOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUiPgorICAgICAgPHRpdGxlPlJ1bnRpbWUgUG9pbnRlciAtIFRoZSBDaGVzdCBvZiBQQ00gSW5mb3JtYXRpb248L3RpdGxlPgorCTxwYXJhPgorCSAgV2hlbiB0aGUgUENNIHN1YnN0cmVhbSBpcyBvcGVuZWQsIGEgUENNIHJ1bnRpbWUgaW5zdGFuY2UgaXMKKwlhbGxvY2F0ZWQgYW5kIGFzc2lnbmVkIHRvIHRoZSBzdWJzdHJlYW0uIFRoaXMgcG9pbnRlciBpcworCWFjY2Vzc2libGUgdmlhIDxjb25zdGFudD5zdWJzdHJlYW0tJmd0O3J1bnRpbWU8L2NvbnN0YW50Pi4KKwlUaGlzIHJ1bnRpbWUgcG9pbnRlciBob2xkcyB0aGUgdmFyaW91cyBpbmZvcm1hdGlvbjsgaXQgaG9sZHMKKwl0aGUgY29weSBvZiBod19wYXJhbXMgYW5kIHN3X3BhcmFtcyBjb25maWd1cmF0aW9ucywgdGhlIGJ1ZmZlcgorCXBvaW50ZXJzLCBtbWFwIHJlY29yZHMsIHNwaW5sb2NrcywgZXRjLiAgQWxtb3N0IGV2ZXJ5aGluZyB5b3UKKwluZWVkIGZvciBjb250cm9sbGluZyB0aGUgUENNIGNhbiBiZSBmb3VuZCB0aGVyZS4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgZGVmaW5pdGlvbiBvZiBydW50aW1lIGluc3RhbmNlIGlzIGZvdW5kIGluCisJPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPi4gIEhlcmUgaXMgdGhlCisJY29weSBmcm9tIHRoZSBmaWxlLgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKK3N0cnVjdCBfc25kX3BjbV9ydW50aW1lIHsKKwkvKiAtLSBTdGF0dXMgLS0gKi8KKwlzbmRfcGNtX3N1YnN0cmVhbV90ICp0cmlnZ2VyX21hc3RlcjsKKwlzbmRfdGltZXN0YW1wX3QgdHJpZ2dlcl90c3RhbXA7CS8qIHRyaWdnZXIgdGltZXN0YW1wICovCisJaW50IG92ZXJyYW5nZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbF9tYXg7CisJc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyX2Jhc2U7CS8qIFBvc2l0aW9uIGF0IGJ1ZmZlciByZXN0YXJ0ICovCisJc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyX2ludGVycnVwdDsgLyogUG9zaXRpb24gYXQgaW50ZXJydXB0IHRpbWUqLworCisJLyogLS0gSFcgcGFyYW1zIC0tICovCisJc25kX3BjbV9hY2Nlc3NfdCBhY2Nlc3M7CS8qIGFjY2VzcyBtb2RlICovCisJc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQ7CS8qIFNORFJWX1BDTV9GT1JNQVRfKiAqLworCXNuZF9wY21fc3ViZm9ybWF0X3Qgc3ViZm9ybWF0OwkvKiBzdWJmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgcmF0ZTsJCS8qIHJhdGUgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CQkvKiBjaGFubmVscyAqLworCXNuZF9wY21fdWZyYW1lc190IHBlcmlvZF9zaXplOwkvKiBwZXJpb2Qgc2l6ZSAqLworCXVuc2lnbmVkIGludCBwZXJpb2RzOwkJLyogcGVyaW9kcyAqLworCXNuZF9wY21fdWZyYW1lc190IGJ1ZmZlcl9zaXplOwkvKiBidWZmZXIgc2l6ZSAqLworCXVuc2lnbmVkIGludCB0aWNrX3RpbWU7CQkvKiB0aWNrIHRpbWUgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBtaW5fYWxpZ247CS8qIE1pbiBhbGlnbm1lbnQgZm9yIHRoZSBmb3JtYXQgKi8KKwlzaXplX3QgYnl0ZV9hbGlnbjsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfYml0czsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlX2JpdHM7CisJdW5zaWduZWQgaW50IGluZm87CisJdW5zaWduZWQgaW50IHJhdGVfbnVtOworCXVuc2lnbmVkIGludCByYXRlX2RlbjsKKworCS8qIC0tIFNXIHBhcmFtcyAtLSAqLworCWludCB0c3RhbXBfdGltZXNwZWM7CQkvKiB1c2UgdGltZXZhbCAoMCkgb3IgdGltZXNwZWMgKDEpICovCisJc25kX3BjbV90c3RhbXBfdCB0c3RhbXBfbW9kZTsJLyogbW1hcCB0aW1lc3RhbXAgaXMgdXBkYXRlZCAqLworICAJdW5zaWduZWQgaW50IHBlcmlvZF9zdGVwOworCXVuc2lnbmVkIGludCBzbGVlcF9taW47CQkvKiBtaW4gdGlja3MgdG8gc2xlZXAgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCB4ZmVyX2FsaWduOwkvKiB4ZmVyIHNpemUgbmVlZCB0byBiZSBhIG11bHRpcGxlICovCisJc25kX3BjbV91ZnJhbWVzX3Qgc3RhcnRfdGhyZXNob2xkOworCXNuZF9wY21fdWZyYW1lc190IHN0b3BfdGhyZXNob2xkOworCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VfdGhyZXNob2xkOyAvKiBTaWxlbmNlIGZpbGxpbmcgaGFwcGVucyB3aGVuCisJCQkJCQlub2lzZSBpcyBuZWFyZXN0IHRoYW4gdGhpcyAqLworCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2Vfc2l6ZTsJLyogU2lsZW5jZSBmaWxsaW5nIHNpemUgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBib3VuZGFyeTsJLyogcG9pbnRlcnMgd3JhcCBwb2ludCAqLworCisJc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZWRfc3RhcnQ7CisJc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZWRfc2l6ZTsKKworCXNuZF9wY21fc3luY19pZF90IHN5bmM7CQkvKiBoYXJkd2FyZSBzeW5jaHJvbml6YXRpb24gSUQgKi8KKworCS8qIC0tIG1tYXAgLS0gKi8KKwl2b2xhdGlsZSBzbmRfcGNtX21tYXBfc3RhdHVzX3QgKnN0YXR1czsKKwl2b2xhdGlsZSBzbmRfcGNtX21tYXBfY29udHJvbF90ICpjb250cm9sOworCWF0b21pY190IG1tYXBfY291bnQ7CisKKwkvKiAtLSBsb2NraW5nIC8gc2NoZWR1bGluZyAtLSAqLworCXNwaW5sb2NrX3QgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBzbGVlcDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aWNrX3RpbWVyOworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CisKKwkvKiAtLSBwcml2YXRlIHNlY3Rpb24gLS0gKi8KKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUpOworCisJLyogLS0gaGFyZHdhcmUgZGVzY3JpcHRpb24gLS0gKi8KKwlzbmRfcGNtX2hhcmR3YXJlX3QgaHc7CisJc25kX3BjbV9od19jb25zdHJhaW50c190IGh3X2NvbnN0cmFpbnRzOworCisJLyogLS0gaW50ZXJydXB0IGNhbGxiYWNrcyAtLSAqLworCXZvaWQgKCp0cmFuc2Zlcl9hY2tfYmVnaW4pKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisJdm9pZCAoKnRyYW5zZmVyX2Fja19lbmQpKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisKKwkvKiAtLSB0aW1lciAtLSAqLworCXVuc2lnbmVkIGludCB0aW1lcl9yZXNvbHV0aW9uOwkvKiB0aW1lciByZXNvbHV0aW9uICovCisKKwkvKiAtLSBETUEgLS0gKi8gICAgICAgICAgIAorCXVuc2lnbmVkIGNoYXIgKmRtYV9hcmVhOwkvKiBETUEgYXJlYSAqLworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CQkvKiBwaHlzaWNhbCBidXMgYWRkcmVzcyAobm90IGFjY2Vzc2libGUgZnJvbSBtYWluIENQVSkgKi8KKwlzaXplX3QgZG1hX2J5dGVzOwkJLyogc2l6ZSBvZiBETUEgYXJlYSAqLworCisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFfYnVmZmVyX3A7CS8qIGFsbG9jYXRlZCBidWZmZXIgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCisJLyogLS0gT1NTIHRoaW5ncyAtLSAqLworCXNuZF9wY21fb3NzX3J1bnRpbWVfdCBvc3M7CisjZW5kaWYKK307CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisJPC9wYXJhPgorCisJPHBhcmE+CisJICBGb3IgdGhlIG9wZXJhdG9ycyAoY2FsbGJhY2tzKSBvZiBlYWNoIHNvdW5kIGRyaXZlciwgbW9zdCBvZgorCXRoZXNlIHJlY29yZHMgYXJlIHN1cHBvc2VkIHRvIGJlIHJlYWQtb25seS4gIE9ubHkgdGhlIFBDTQorCW1pZGRsZS1sYXllciBjaGFuZ2VzIC8gdXBkYXRlcyB0aGVzZSBpbmZvLiAgVGhlIGV4Y2VwdGlvbnMgYXJlCisJdGhlIGhhcmR3YXJlIGRlc2NyaXB0aW9uIChodyksIGludGVycnVwdCBjYWxsYmFja3MKKwkodHJhbnNmZXJfYWNrX3h4eCksIERNQSBidWZmZXIgaW5mb3JtYXRpb24sIGFuZCB0aGUgcHJpdmF0ZQorCWRhdGEuICBCZXNpZGVzLCBpZiB5b3UgdXNlIHRoZSBzdGFuZGFyZCBidWZmZXIgYWxsb2NhdGlvbgorCW1ldGhvZCB2aWEgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4sCisJeW91IGRvbid0IG5lZWQgdG8gc2V0IHRoZSBETUEgYnVmZmVyIGluZm9ybWF0aW9uIGJ5IHlvdXJzZWxmLgorCTwvcGFyYT4KKworCTxwYXJhPgorCUluIHRoZSBzZWN0aW9ucyBiZWxvdywgaW1wb3J0YW50IHJlY29yZHMgYXJlIGV4cGxhaW5lZC4KKwk8L3BhcmE+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWh3Ij4KKwk8dGl0bGU+SGFyZHdhcmUgRGVzY3JpcHRpb248L3RpdGxlPgorCTxwYXJhPgorCSAgVGhlIGhhcmR3YXJlIGRlc2NyaXB0b3IgKDx0eXBlPnNuZF9wY21faGFyZHdhcmVfdDwvdHlwZT4pCisJY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBmdW5kYW1lbnRhbCBoYXJkd2FyZQorCWNvbmZpZ3VyYXRpb24uICBBYm92ZSBhbGwsIHlvdSdsbCBuZWVkIHRvIGRlZmluZSB0aGlzIGluCisJPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtb3Blbi1jYWxsYmFjayI+PGNpdGV0aXRsZT4KKwl0aGUgb3BlbiBjYWxsYmFjazwvY2l0ZXRpdGxlPjwvbGluaz4uCisJTm90ZSB0aGF0IHRoZSBydW50aW1lIGluc3RhbmNlIGhvbGRzIHRoZSBjb3B5IG9mIHRoZQorCWRlc2NyaXB0b3IsIG5vdCB0aGUgcG9pbnRlciB0byB0aGUgZXhpc3RpbmcgZGVzY3JpcHRvci4gIFRoYXQKKwlpcywgaW4gdGhlIG9wZW4gY2FsbGJhY2ssIHlvdSBjYW4gbW9kaWZ5IHRoZSBjb3BpZWQgZGVzY3JpcHRvcgorCSg8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7aHc8L2NvbnN0YW50PikgYXMgeW91IG5lZWQuICBGb3IgZXhhbXBsZSwgaWYgdGhlIG1heGltdW0KKwludW1iZXIgb2YgY2hhbm5lbHMgaXMgMSBvbmx5IG9uIHNvbWUgY2hpcCBtb2RlbHMsIHlvdSBjYW4KKwlzdGlsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgZGVzY3JpcHRvciBhbmQgY2hhbmdlIHRoZQorCWNoYW5uZWxzX21heCBsYXRlcjoKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICAgICAgICAgc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisgICAgICAgICAgLi4uCisgICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX3BsYXliYWNrX2h3OyAvKiBjb21tb24gZGVmaW5pdGlvbiAqLworICAgICAgICAgIGlmIChjaGlwLT5tb2RlbCA9PSBWRVJZX09MRF9PTkUpCisgICAgICAgICAgICAgICAgICBydW50aW1lLT5ody5jaGFubmVsc19tYXggPSAxOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKworCTxwYXJhPgorCSAgVHlwaWNhbGx5LCB5b3UnbGwgaGF2ZSBhIGhhcmR3YXJlIGRlc2NyaXB0b3IgbGlrZSBiZWxvdzoKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzbmRfcGNtX2hhcmR3YXJlX3Qgc25kX215Y2hpcF9wbGF5YmFja19odyA9IHsKKyAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisgICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKKyAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAorICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKKyAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisgICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCisgICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAorICB9OworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJPGl0ZW1pemVkbGlzdD4KKwk8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMgdGhlIHR5cGUgYW5kCisgICAgICAgIGNhcGFiaWxpdGllcyBvZiB0aGlzIHBjbS4gVGhlIGJpdCBmbGFncyBhcmUgZGVmaW5lZCBpbgorICAgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZC5oJmd0OzwvZmlsZW5hbWU+IGFzCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19YWFg8L2NvbnN0YW50Pi4gSGVyZSwgYXQgbGVhc3QsIHlvdQorICAgICAgICBoYXZlIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgbW1hcCBpcyBzdXBwb3J0ZWQgYW5kIHdoaWNoCisgICAgICAgIGludGVybGVhdmVkIGZvcm1hdCBpcyBzdXBwb3J0ZWQuCisgICAgICAgIFdoZW4gdGhlIG1tYXAgaXMgc3VwcG9ydGVkLCBhZGQKKyAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX01NQVA8L2NvbnN0YW50PiBmbGFnIGhlcmUuIFdoZW4gdGhlCisgICAgICAgIGhhcmR3YXJlIHN1cHBvcnRzIHRoZSBpbnRlcmxlYXZlZCBvciB0aGUgbm9uLWludGVybGVhdmVkCisgICAgICAgIGZvcm1hdCwgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEPC9jb25zdGFudD4gb3IKKyAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX05PTklOVEVSTEVBVkVEPC9jb25zdGFudD4gZmxhZyBtdXN0CisgICAgICAgIGJlIHNldCwgcmVzcGVjdGl2ZWx5LiBJZiBib3RoIGFyZSBzdXBwb3J0ZWQsIHlvdSBjYW4gc2V0IGJvdGgsCisgICAgICAgIHRvby4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGNvbnN0YW50Pk1NQVBfVkFMSUQ8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PkJMT0NLX1RSQU5TRkVSPC9jb25zdGFudD4gYXJlIHNwZWNpZmllZCBmb3IgT1NTIG1tYXAKKyAgICAgICAgbW9kZS4gVXN1YWxseSBib3RoIGFyZSBzZXQuIE9mIGNvdXJzZSwKKyAgICAgICAgPGNvbnN0YW50Pk1NQVBfVkFMSUQ8L2NvbnN0YW50PiBpcyBzZXQgb25seSBpZiB0aGUgbW1hcCBpcworICAgICAgICByZWFsbHkgc3VwcG9ydGVkLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBvdGhlciBwb3NzaWJsZSBmbGFncyBhcmUKKyAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1BBVVNFPC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19SRVNVTUU8L2NvbnN0YW50Pi4gVGhlCisgICAgICAgIDxjb25zdGFudD5QQVVTRTwvY29uc3RhbnQ+IGJpdCBtZWFucyB0aGF0IHRoZSBwY20gc3VwcG9ydHMgdGhlCisgICAgICAgIDxxdW90ZT5wYXVzZTwvcXVvdGU+IG9wZXJhdGlvbiwgd2hpbGUgdGhlCisgICAgICAgIDxjb25zdGFudD5SRVNVTUU8L2NvbnN0YW50PiBiaXQgbWVhbnMgdGhhdCB0aGUgcGNtIHN1cHBvcnRzCisgICAgICAgIHRoZSA8cXVvdGU+c3VzcGVuZC9yZXN1bWU8L3F1b3RlPiBvcGVyYXRpb24uIElmIHRoZXNlIGZsYWdzCisgICAgICAgIGFyZSBzZXQsIHRoZSA8c3RydWN0ZmllbGQ+dHJpZ2dlcjwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGJlbG93CisgICAgICAgIG11c3QgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmRzLiAKKyAgICAgICAgPC9wYXJhPgorCisJPHBhcmE+CisJICBXaGVuIHRoZSBQQ00gc3Vic3RyZWFtcyBjYW4gYmUgc3luY2hyb25pemVkICh0eXBpY2FsbHksCisJc3luY2hvcmluaXplZCBzdGFydC9zdG9wIG9mIGEgcGxheWJhY2sgYW5kIGEgY2FwdHVyZSBzdHJlYW1zKSwKKwl5b3UgY2FuIGdpdmUgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQ8L2NvbnN0YW50PiwKKwl0b28uICBJbiB0aGlzIGNhc2UsIHlvdSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBsaW5rZWQtbGlzdCBvZgorCVBDTSBzdWJzdHJlYW1zIGluIHRoZSB0cmlnZ2VyIGNhbGxiYWNrLiAgVGhpcyB3aWxsIGJlCisJZGVzY3JpYmVkIGluIHRoZSBsYXRlciBzZWN0aW9uLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8c3RydWN0ZmllbGQ+Zm9ybWF0czwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBiaXQtZmxhZ3MKKyAgICAgICAgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgKDxjb25zdGFudD5TTkRSVl9QQ01fRk1UQklUX1hYWDwvY29uc3RhbnQ+KS4KKyAgICAgICAgSWYgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIG1vcmUgdGhhbiBvbmUgZm9ybWF0LCBnaXZlIGFsbCBvcidlZAorICAgICAgICBiaXRzLiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBzaWduZWQgMTZiaXQgbGl0dGxlLWVuZGlhbgorICAgICAgICBmb3JtYXQgaXMgc3BlY2lmaWVkLgorICAgICAgICA8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5yYXRlczwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBiaXQtZmxhZ3Mgb2YKKyAgICAgICAgc3VwcG9ydGVkIHJhdGVzICg8Y29uc3RhbnQ+U05EUlZfUENNX1JBVEVfWFhYPC9jb25zdGFudD4pLgorICAgICAgICBXaGVuIHRoZSBjaGlwIHN1cHBvcnRzIGNvbnRpbnVvdXMgcmF0ZXMsIHBhc3MKKyAgICAgICAgPGNvbnN0YW50PkNPTlRJTlVPVVM8L2NvbnN0YW50PiBiaXQgYWRkaXRpb25hbGx5LgorICAgICAgICBUaGUgcHJlLWRlZmluZWQgcmF0ZSBiaXRzIGFyZSBwcm92aWRlZCBvbmx5IGZvciB0eXBpY2FsCisJcmF0ZXMuIElmIHlvdXIgY2hpcCBzdXBwb3J0cyB1bmNvbnZlbnRpb25hbCByYXRlcywgeW91IG5lZWQgdG8gYWRkCisgICAgICAgIDxjb25zdGFudD5LTk9UPC9jb25zdGFudD4gYml0IGFuZCBzZXQgdXAgdGhlIGhhcmR3YXJlCisgICAgICAgIGNvbnN0cmFpbnQgbWFudWFsbHkgKGV4cGxhaW5lZCBsYXRlcikuCisgICAgICAgIDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCTxzdHJ1Y3RmaWVsZD5yYXRlX21pbjwvc3RydWN0ZmllbGQ+IGFuZAorCTxzdHJ1Y3RmaWVsZD5yYXRlX21heDwvc3RydWN0ZmllbGQ+IGRlZmluZSB0aGUgbWluaW1hbCBhbmQKKwltYXhpbWFsIHNhbXBsZSByYXRlLiAgVGhpcyBzaG91bGQgY29ycmVzcG9uZCBzb21laG93IHRvCisJPHN0cnVjdGZpZWxkPnJhdGVzPC9zdHJ1Y3RmaWVsZD4gYml0cy4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwk8c3RydWN0ZmllbGQ+Y2hhbm5lbF9taW48L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+Y2hhbm5lbF9tYXg8L3N0cnVjdGZpZWxkPiAKKwlkZWZpbmUsIGFzIHlvdSBtaWdodCBhbHJlYWR5IGV4cGVjdGVkLCB0aGUgbWluaW1hbCBhbmQgbWF4aW1hbAorCW51bWJlciBvZiBjaGFubmVscy4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwk8c3RydWN0ZmllbGQ+YnVmZmVyX2J5dGVzX21heDwvc3RydWN0ZmllbGQ+IGRlZmluZXMgdGhlCisJbWF4aW1hbCBidWZmZXIgc2l6ZSBpbiBieXRlcy4gIFRoZXJlIGlzIG5vCisJPHN0cnVjdGZpZWxkPmJ1ZmZlcl9ieXRlc19taW48L3N0cnVjdGZpZWxkPiBmaWVsZCwgc2luY2UKKwlpdCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBtaW5pbWFsIHBlcmlvZCBzaXplIGFuZCB0aGUKKwltaW5pbWFsIG51bWJlciBvZiBwZXJpb2RzLgorCU1lYW53aGlsZSwgPHN0cnVjdGZpZWxkPnBlcmlvZF9ieXRlc19taW48L3N0cnVjdGZpZWxkPiBhbmQKKwlkZWZpbmUgdGhlIG1pbmltYWwgYW5kIG1heGltYWwgc2l6ZSBvZiB0aGUgcGVyaW9kIGluIGJ5dGVzLgorCTxzdHJ1Y3RmaWVsZD5wZXJpb2RzX21heDwvc3RydWN0ZmllbGQ+IGFuZAorCTxzdHJ1Y3RmaWVsZD5wZXJpb2RzX21pbjwvc3RydWN0ZmllbGQ+IGRlZmluZSB0aGUgbWF4aW1hbCBhbmQKKwltaW5pbWFsIG51bWJlciBvZiBwZXJpb2RzIGluIHRoZSBidWZmZXIuCisgICAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCVRoZSA8cXVvdGU+cGVyaW9kPC9xdW90ZT4gaXMgYSB0ZXJtLCB0aGF0IGNvcnJlc3BvbmRzIHRvCisJZnJhZ21lbnQgaW4gdGhlIE9TUyB3b3JsZC4gIFRoZSBwZXJpb2QgZGVmaW5lcyB0aGUgc2l6ZSBhdAorCXdoaWNoIHRoZSBQQ00gaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVGhpcyBzaXplIHN0cm9uZ2x5CisJZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUuIAorCUdlbmVyYWxseSwgdGhlIHNtYWxsZXIgcGVyaW9kIHNpemUgd2lsbCBnaXZlIHlvdSBtb3JlCisJaW50ZXJydXB0cywgdGhhdCBpcywgbW9yZSBjb250cm9scy4gCisJSW4gdGhlIGNhc2Ugb2YgY2FwdHVyZSwgdGhpcyBzaXplIGRlZmluZXMgdGhlIGlucHV0IGxhdGVuY3kuCisJT24gdGhlIG90aGVyIGhhbmQsIHRoZSB3aG9sZSBidWZmZXIgc2l6ZSBkZWZpbmVzIHRoZQorCW91dHB1dCBsYXRlbmN5IGZvciB0aGUgcGxheWJhY2sgZGlyZWN0aW9uLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCVRoZXJlIGlzIGFsc28gYSBmaWVsZCA8c3RydWN0ZmllbGQ+Zmlmb19zaXplPC9zdHJ1Y3RmaWVsZD4uCisJVGhpcyBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGhhcmR3YXJlIEZJRk8sIGJ1dCBpdCdzIG5vdAorCXVzZWQgY3VycmVudGx5IGluIHRoZSBkcml2ZXIgbm9yIGluIHRoZSBhbHNhLWxpYi4gIFNvLCB5b3UKKwljYW4gaWdub3JlIHRoaXMgZmllbGQuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPC9pdGVtaXplZGxpc3Q+CisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtY29uZmlnIj4KKwk8dGl0bGU+UENNIENvbmZpZ3VyYXRpb25zPC90aXRsZT4KKwk8cGFyYT4KKwlPaywgbGV0J3MgZ28gYmFjayBhZ2FpbiB0byB0aGUgUENNIHJ1bnRpbWUgcmVjb3Jkcy4KKwlUaGUgbW9zdCBmcmVxdWVudGx5IHJlZmVycmVkIHJlY29yZHMgaW4gdGhlIHJ1bnRpbWUgaW5zdGFuY2UgYXJlCisJdGhlIFBDTSBjb25maWd1cmF0aW9ucy4KKwlUaGUgUENNIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQgb24gcnVudGltZSBpbnN0YW5jZQorCWFmdGVyIHRoZSBhcHBsaWNhdGlvbiBzZW5kcyA8dHlwZT5od19wYXJhbXM8L3R5cGU+IGRhdGEgdmlhCisJYWxzYS1saWIuICBUaGVyZSBhcmUgbWFueSBmaWVsZHMgY29waWVkIGZyb20gaHdfcGFyYW1zIGFuZAorCXN3X3BhcmFtcyBzdHJ1Y3RzLiAgRm9yIGV4YW1wbGUsCisJPHN0cnVjdGZpZWxkPmZvcm1hdDwvc3RydWN0ZmllbGQ+IGhvbGRzIHRoZSBmb3JtYXQgdHlwZQorCWNob3NlbiBieSB0aGUgYXBwbGljYXRpb24uICBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBlbnVtIHZhbHVlCisJPGNvbnN0YW50PlNORFJWX1BDTV9GT1JNQVRfWFhYPC9jb25zdGFudD4uCisJPC9wYXJhPgorCisJPHBhcmE+CisJT25lIHRoaW5nIHRvIGJlIG5vdGVkIGlzIHRoYXQgdGhlIGNvbmZpZ3VyZWQgYnVmZmVyIGFuZCBwZXJpb2QKKwlzaXplcyBhcmUgc3RvcmVkIGluIDxxdW90ZT5mcmFtZXM8L3F1b3RlPiBpbiB0aGUgcnVudGltZQorICAgICAgICBJbiB0aGUgQUxTQSB3b3JsZCwgMSBmcmFtZSA9IGNoYW5uZWxzICogc2FtcGxlcy1zaXplLgorCUZvciBjb252ZXJzaW9uIGJldHdlZW4gZnJhbWVzIGFuZCBieXRlcywgeW91IGNhbiB1c2UgdGhlCisJaGVscGVyIGZ1bmN0aW9ucywgPGZ1bmN0aW9uPmZyYW1lc190b19ieXRlcygpPC9mdW5jdGlvbj4gYW5kCisgICAgICAgICAgPGZ1bmN0aW9uPmJ5dGVzX3RvX2ZyYW1lcygpPC9mdW5jdGlvbj4uIAorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgcGVyaW9kX2J5dGVzID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisJPHBhcmE+CisJQWxzbywgbWFueSBzb2Z0d2FyZSBwYXJhbWV0ZXJzIChzd19wYXJhbXMpIGFyZQorCXN0b3JlZCBpbiBmcmFtZXMsIHRvby4gIFBsZWFzZSBjaGVjayB0aGUgdHlwZSBvZiB0aGUgZmllbGQuCisJPHR5cGU+c25kX3BjbV91ZnJhbWVzX3Q8L3R5cGU+IGlzIGZvciB0aGUgZnJhbWVzIGFzIHVuc2lnbmVkCisJaW50ZWdlciB3aGlsZSA8dHlwZT5zbmRfcGNtX3NmcmFtZXNfdDwvdHlwZT4gaXMgZm9yIHRoZSBmcmFtZXMKKwlhcyBzaWduZWQgaW50ZWdlci4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1kbWEiPgorCTx0aXRsZT5ETUEgQnVmZmVyIEluZm9ybWF0aW9uPC90aXRsZT4KKwk8cGFyYT4KKwlUaGUgRE1BIGJ1ZmZlciBpcyBkZWZpbmVkIGJ5IHRoZSBmb2xsb3dpbmcgZm91ciBmaWVsZHMsCisJPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4sCisJPHN0cnVjdGZpZWxkPmRtYV9hZGRyPC9zdHJ1Y3RmaWVsZD4sCisJPHN0cnVjdGZpZWxkPmRtYV9ieXRlczwvc3RydWN0ZmllbGQ+IGFuZAorCTxzdHJ1Y3RmaWVsZD5kbWFfcHJpdmF0ZTwvc3RydWN0ZmllbGQ+LgorCVRoZSA8c3RydWN0ZmllbGQ+ZG1hX2FyZWE8L3N0cnVjdGZpZWxkPiBob2xkcyB0aGUgYnVmZmVyCisJcG9pbnRlciAodGhlIGxvZ2ljYWwgYWRkcmVzcykuICBZb3UgY2FuIGNhbGwKKwk8ZnVuY3Rpb24+bWVtY3B5PC9mdW5jdGlvbj4gZnJvbS90byAKKwl0aGlzIHBvaW50ZXIuICBNZWFud2hpbGUsIDxzdHJ1Y3RmaWVsZD5kbWFfYWRkcjwvc3RydWN0ZmllbGQ+CisJaG9sZHMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgZmllbGQgaXMKKwlzcGVjaWZpZWQgb25seSB3aGVuIHRoZSBidWZmZXIgaXMgYSBsaW5lYXIgYnVmZmVyLgorCTxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBob2xkcyB0aGUgc2l6ZSBvZiBidWZmZXIKKwlpbiBieXRlcy4gIDxzdHJ1Y3RmaWVsZD5kbWFfcHJpdmF0ZTwvc3RydWN0ZmllbGQ+IGlzIHVzZWQgZm9yCisJdGhlIEFMU0EgRE1BIGFsbG9jYXRvci4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJZiB5b3UgdXNlIGEgc3RhbmRhcmQgQUxTQSBmdW5jdGlvbiwKKwk8ZnVuY3Rpb24+c25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKCk8L2Z1bmN0aW9uPiwgZm9yCisJYWxsb2NhdGluZyB0aGUgYnVmZmVyLCB0aGVzZSBmaWVsZHMgYXJlIHNldCBieSB0aGUgQUxTQSBtaWRkbGUKKwlsYXllciwgYW5kIHlvdSBzaG91bGQgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGNoYW5nZSB0aGVtIGJ5CisJeW91cnNlbGYuICBZb3UgY2FuIHJlYWQgdGhlbSBidXQgbm90IHdyaXRlIHRoZW0uCisJT24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSB3YW50IHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgYnkKKwl5b3Vyc2VsZiwgeW91J2xsIG5lZWQgdG8gbWFuYWdlIGl0IGluIGh3X3BhcmFtcyBjYWxsYmFjay4KKwlBdCBsZWFzdCwgPHN0cnVjdGZpZWxkPmRtYV9ieXRlczwvc3RydWN0ZmllbGQ+IGlzIG1hbmRhdG9yeS4KKwk8c3RydWN0ZmllbGQ+ZG1hX2FyZWE8L3N0cnVjdGZpZWxkPiBpcyBuZWNlc3Nhcnkgd2hlbiB0aGUKKwlidWZmZXIgaXMgbW1hcHBlZC4gIElmIHlvdXIgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBtbWFwLCB0aGlzCisJZmllbGQgaXMgbm90IG5lY2Vzc2FyeS4gIDxzdHJ1Y3RmaWVsZD5kbWFfYWRkcjwvc3RydWN0ZmllbGQ+CisJaXMgYWxzbyBub3QgbWFuZGF0b3J5LiAgWW91IGNhbiB1c2UKKwk8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPiBhcyB5b3UgbGlrZSwgdG9vLgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLXN0YXR1cyI+CisJPHRpdGxlPlJ1bm5pbmcgU3RhdHVzPC90aXRsZT4KKwk8cGFyYT4KKwlUaGUgcnVubmluZyBzdGF0dXMgY2FuIGJlIHJlZmVycmVkIHZpYSA8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7c3RhdHVzPC9jb25zdGFudD4uCisJVGhpcyBpcyB0aGUgcG9pbnRlciB0byA8dHlwZT5zbmRfcGNtX21tYXBfc3RhdHVzX3Q8L3R5cGU+CisJcmVjb3JkLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZ2V0IHRoZSBjdXJyZW50IERNQSBoYXJkd2FyZQorCXBvaW50ZXIgdmlhIDxjb25zdGFudD5ydW50aW1lLSZndDtzdGF0dXMtJmd0O2h3X3B0cjwvY29uc3RhbnQ+LgorCTwvcGFyYT4KKworCTxwYXJhPgorCVRoZSBETUEgYXBwbGljYXRpb24gcG9pbnRlciBjYW4gYmUgcmVmZXJyZWQgdmlhCisJPGNvbnN0YW50PnJ1bnRpbWUtJmd0O2NvbnRyb2w8L2NvbnN0YW50Piwgd2hpY2ggcG9pbnRzCisJPHR5cGU+c25kX3BjbV9tbWFwX2NvbnRyb2xfdDwvdHlwZT4gcmVjb3JkLgorCUhvd2V2ZXIsIGFjY2Vzc2luZyBkaXJlY3RseSB0byB0aGlzIHZhbHVlIGlzIG5vdCByZWNvbW1lbmRlZC4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1wcml2YXRlIj4KKwk8dGl0bGU+UHJpdmF0ZSBEYXRhPC90aXRsZT4gCisJPHBhcmE+CisJWW91IGNhbiBhbGxvY2F0ZSBhIHJlY29yZCBmb3IgdGhlIHN1YnN0cmVhbSBhbmQgc3RvcmUgaXQgaW4KKwk8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4uICBVc3VhbGx5LCB0aGlzCisJZG9uZSBpbgorCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+CisJdGhlIG9wZW4gY2FsbGJhY2s8L2NpdGV0aXRsZT48L2xpbms+LgorCURvbid0IG1peCB0aGlzIHdpdGggPGNvbnN0YW50PnBjbS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4uCisJVGhlIDxjb25zdGFudD5wY20tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+IHVzdWFsbHkgcG9pbnRzIHRoZQorCWNoaXAgaW5zdGFuY2UgYXNzaWduZWQgc3RhdGljYWxseSBhdCB0aGUgY3JlYXRpb24gb2YgUENNLCB3aGlsZSB0aGUgCisJPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+IHBvaW50cyBhIGR5bmFtaWMKKwlkYXRhIGNyZWF0ZWQgYXQgdGhlIFBDTSBvcGVuIGNhbGxiYWNrLgorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfb3BlbihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteV9wY21fZGF0YV90ICpkYXRhOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBkYXRhID0ga21hbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGRhdGE7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgYWxsb2NhdGVkIG9iamVjdCBtdXN0IGJlIHJlbGVhc2VkIGluCisJPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtb3Blbi1jYWxsYmFjayI+PGNpdGV0aXRsZT4KKwl0aGUgY2xvc2UgY2FsbGJhY2s8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgICA8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1pbnRyIj4KKwk8dGl0bGU+SW50ZXJydXB0IENhbGxiYWNrczwvdGl0bGU+CisJPHBhcmE+CisJVGhlIGZpZWxkIDxzdHJ1Y3RmaWVsZD50cmFuc2Zlcl9hY2tfYmVnaW48L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+dHJhbnNmZXJfYWNrX2VuZDwvc3RydWN0ZmllbGQ+IGFyZSBjYWxsZWQgYXQKKwl0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mCisJPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+LCByZXNwZWN0aXZlbHkuIAorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMiPgorICAgICAgPHRpdGxlPk9wZXJhdG9yczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgT0ssIG5vdyBsZXQgbWUgZXhwbGFpbiB0aGUgZGV0YWlsIG9mIGVhY2ggcGNtIGNhbGxiYWNrCisgICAgICAoPHBhcmFtZXRlcj5vcHM8L3BhcmFtZXRlcj4pLiBJbiBnZW5lcmFsLCBldmVyeSBjYWxsYmFjayBtdXN0CisgICAgICByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIG51bWJlciB3aXRoIHRoZSBlcnJvcgorICAgICAgbnVtYmVyIHN1Y2ggYXMgPGNvbnN0YW50Pi1FSU5WQUw8L2NvbnN0YW50PiBhdCBhbnkKKyAgICAgIGVycm9yLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0YWtlcyBhdCBsZWFzdCB0aGUgYXJndW1lbnQgd2l0aAorICAgICAgICA8dHlwZT5zbmRfcGNtX3N1YnN0cmVhbV90PC90eXBlPiBwb2ludGVyLiBGb3IgcmV0cmlldmluZyB0aGUKKyAgICAgICAgY2hpcCByZWNvcmQgZnJvbSB0aGUgZ2l2ZW4gc3Vic3RyZWFtIGluc3RhbmNlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgZm9sbG93aW5nIG1hY3JvLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpbnQgeHh4KCkgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKwlUaGUgbWFjcm8gcmVhZHMgPGNvbnN0YW50PnN1YnN0cmVhbS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4sCisJd2hpY2ggaXMgYSBjb3B5IG9mIDxjb25zdGFudD5wY20tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LgorCVlvdSBjYW4gb3ZlcnJpZGUgdGhlIGZvcm1lciBpZiB5b3UgbmVlZCB0byBhc3NpZ24gZGlmZmVyZW50IGRhdGEKKwlyZWNvcmRzIHBlciBQQ00gc3Vic3RyZWFtLiAgRm9yIGV4YW1wbGUsIGNtaTgzMzAgZHJpdmVyIGFzc2lnbnMKKwlkaWZmZXJlbnQgcHJpdmF0ZV9kYXRhIGZvciBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLAorCWJlY2F1c2UgaXQgdXNlcyB0d28gZGlmZmVyZW50IGNvZGVjcyAoU0ItIGFuZCBBRC1jb21wYXRpYmxlKSBmb3IKKwlkaWZmZXJlbnQgZGlyZWN0aW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+b3BlbiBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBwY20gc3Vic3RyZWFtIGlzIG9wZW5lZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEF0IGxlYXN0LCBoZXJlIHlvdSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHJ1bnRpbWUtJmd0O2h3CisgICAgICAgICAgcmVjb3JkLiBUeXBpY2FsbHksIHRoaXMgaXMgZG9uZSBieSBsaWtlIHRoaXM6IAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfb3BlbihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9wbGF5YmFja19odzsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgd2hlcmUgPHBhcmFtZXRlcj5zbmRfbXljaGlwX3BsYXliYWNrX2h3PC9wYXJhbWV0ZXI+IGlzIHRoZQorICAgICAgICAgIHByZS1kZWZpbmVkIGhhcmR3YXJlIGRlc2NyaXB0aW9uLgorCTwvcGFyYT4KKworCTxwYXJhPgorCVlvdSBjYW4gYWxsb2NhdGUgYSBwcml2YXRlIGRhdGEgaW4gdGhpcyBjYWxsYmFjaywgYXMgZGVzY3JpYmVkCisJaW4gPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1ydW50aW1lLXByaXZhdGUiPjxjaXRldGl0bGU+CisJUHJpdmF0ZSBEYXRhPC9jaXRldGl0bGU+PC9saW5rPiBzZWN0aW9uLgorCTwvcGFyYT4KKworCTxwYXJhPgorCUlmIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIG5lZWRzIG1vcmUgY29uc3RyYWludHMsIHNldCB0aGUKKwloYXJkd2FyZSBjb25zdHJhaW50cyBoZXJlLCB0b28uCisJU2VlIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UtY29uc3RyYWludHMiPjxjaXRldGl0bGU+CisJQ29uc3RyYWludHM8L2NpdGV0aXRsZT48L2xpbms+IGZvciBtb3JlIGRldGFpbHMuCisJPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtY2xvc2UtY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+Y2xvc2UgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9jbG9zZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgT2J2aW91c2x5LCB0aGlzIGlzIGNhbGxlZCB3aGVuIGEgcGNtIHN1YnN0cmVhbSBpcyBjbG9zZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbnkgcHJpdmF0ZSBpbnN0YW5jZSBmb3IgYSBwY20gc3Vic3RyZWFtIGFsbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICBvcGVuIGNhbGxiYWNrIHdpbGwgYmUgcmVsZWFzZWQgaGVyZS4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9jbG9zZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAga2ZyZWUoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEpOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1pb2N0bC1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5pb2N0bCBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgdXNlZCBmb3IgYW55IHNwZWNpYWwgYWN0aW9uIHRvIHBjbSBpb2N0bHMuIEJ1dAorICAgICAgICB1c3VhbGx5IHlvdSBjYW4gcGFzcyBhIGdlbmVyaWMgaW9jdGwgY2FsbGJhY2ssIAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfaW9jdGw8L2Z1bmN0aW9uPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaHctcGFyYW1zLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPmh3X3BhcmFtcyBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X2h3X3BhcmFtcyhzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9wY21faHdfcGFyYW1zX3QgKiBod19wYXJhbXMpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhpcyBhbmQgPHN0cnVjdGZpZWxkPmh3X2ZyZWU8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MgZXhpc3QKKyAgICAgICAgb25seSBvbiBBTFNBIDAuOS54LiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGhhcmR3YXJlIHBhcmFtZXRlcgorICAgICAgICAoPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+KSBpcyBzZXQKKyAgICAgICAgdXAgYnkgdGhlIGFwcGxpY2F0aW9uLCAKKyAgICAgICAgdGhhdCBpcywgb25jZSB3aGVuIHRoZSBidWZmZXIgc2l6ZSwgdGhlIHBlcmlvZCBzaXplLCB0aGUKKyAgICAgICAgZm9ybWF0LCBldGMuIGFyZSBkZWZpbmVkIGZvciB0aGUgcGNtIHN1YnN0cmVhbS4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNYW55IGhhcmR3YXJlIHNldC11cCBzaG91bGQgYmUgZG9uZSBpbiB0aGlzIGNhbGxiYWNrLAorICAgICAgICBpbmNsdWRpbmcgdGhlIGFsbG9jYXRpb24gb2YgYnVmZmVycy4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBQYXJhbWV0ZXJzIHRvIGJlIGluaXRpYWxpemVkIGFyZSByZXRyaWV2ZWQgYnkKKyAgICAgICAgICA8ZnVuY3Rpb24+cGFyYW1zX3h4eCgpPC9mdW5jdGlvbj4gbWFjcm9zLiBGb3IgYWxsb2NhdGluZyBhCisgICAgICAgICAgYnVmZmVyLCB5b3UgY2FuIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24sIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4gaXMgYXZhaWxhYmxlCisJICBvbmx5IHdoZW4gdGhlIERNQSBidWZmZXJzIGhhdmUgYmVlbiBwcmUtYWxsb2NhdGVkLgorCSAgU2VlIHRoZSBzZWN0aW9uIDxsaW5rCisJICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeS1idWZmZXItdHlwZXMiPjxjaXRldGl0bGU+CisJICBCdWZmZXIgVHlwZXM8L2NpdGV0aXRsZT48L2xpbms+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBhbmQgPHN0cnVjdGZpZWxkPnByZXBhcmU8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MKKyAgICAgICAgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgT1NTIGVtdWxhdGlvbiBtYXkKKyAgICAgICAgY2FsbCB0aGVzZSBjYWxsYmFja3MgYXQgZWFjaCBjaGFuZ2UgdmlhIGl0cyBpb2N0bC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaHVzLCB5b3UgbmVlZCB0byB0YWtlIGNhcmUgbm90IHRvIGFsbG9jYXRlIHRoZSBzYW1lIGJ1ZmZlcnMKKyAgICAgICAgbWFueSB0aW1lcywgd2hpY2ggd2lsbCBsZWFkIHRvIG1lbW9yeSBsZWFrISAgQ2FsbGluZyB0aGUKKyAgICAgICAgaGVscGVyIGZ1bmN0aW9uIGFib3ZlIG1hbnkgdGltZXMgaXMgT0suIEl0IHdpbGwgcmVsZWFzZSB0aGUKKyAgICAgICAgcHJldmlvdXMgYnVmZmVyIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQW5vdGhlciBub3RlIGlzIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBub24tYXRvbWljCisgICAgICAgIChzY2hlZHVsYWJsZSkuIFRoaXMgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZQorICAgICAgICA8c3RydWN0ZmllbGQ+dHJpZ2dlcjwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIAorICAgICAgICBpcyBhdG9taWMgKG5vbi1zY2hlZHVsYWJsZSkuIFRoYXQgaXMsIG11dGV4IG9yIGFueQorICAgICAgICBzY2hlZHVsZS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSBpbgorICAgICAgICA8c3RydWN0ZmllbGQ+dHJpZ2dlcjwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLgorCVBsZWFzZSBzZWUgdGhlIHN1YnNlY3Rpb24KKwk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWF0b21pY2l0eSI+PGNpdGV0aXRsZT4KKwlBdG9taWNpdHk8L2NpdGV0aXRsZT48L2xpbms+IGZvciBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1ody1mcmVlLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPmh3X2ZyZWUgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9od19mcmVlKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgdG8gcmVsZWFzZSB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB2aWEKKyAgICAgICAgICA8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4uIEZvciBleGFtcGxlLCByZWxlYXNpbmcgdGhlCisgICAgICAgICAgYnVmZmVyIHZpYSAKKyAgICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKCk8L2Z1bmN0aW9uPiBpcyBkb25lIGJ5CisgICAgICAgICAgY2FsbGluZyB0aGUgZm9sbG93aW5nOiAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgY2FsbGVkIGJlZm9yZSB0aGUgY2xvc2UgY2FsbGJhY2sgaXMgY2FsbGVkLgorICAgICAgICAgIEFsc28sIHRoZSBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCB0b28uCisgICAgICAgICAgS2VlcCB0cmFjayB3aGV0aGVyIHRoZSByZXNvdXJjZSB3YXMgYWxyZWFkeSByZWxlYXNlZC4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXByZXBhcmUtY2FsbGJhY2siPgorICAgICAgIDx0aXRsZT5wcmVwYXJlIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHBjbSBpcworICAgICAgICA8cXVvdGU+cHJlcGFyZWQ8L3F1b3RlPi4gWW91IGNhbiBzZXQgdGhlIGZvcm1hdCB0eXBlLCBzYW1wbGUKKyAgICAgICAgcmF0ZSwgZXRjLiBoZXJlLiBUaGUgZGlmZmVyZW5jZSBmcm9tCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPiBpcyB0aGF0IHRoZSAKKyAgICAgICAgPHN0cnVjdGZpZWxkPnByZXBhcmU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBhdCBlYWNoCisgICAgICAgIHRpbWUgCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3ByZXBhcmUoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgaS5lLiB3aGVuCisgICAgICAgIHJlY292ZXJlZCBhZnRlciB1bmRlcnJ1bnMsIGV0Yy4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKwlOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBiZWNhbWUgbm9uLWF0b21pYyBzaW5jZSB0aGUgcmVjZW50IHZlcnNpb24uCisJWW91IGNhbiB1c2Ugc2NoZWR1bGUtcmVsYXRlZCBmdWNudGlvbnMgc2FmZWx5IGluIHRoaXMgY2FsbGJhY2sgbm93LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBjYWxsYmFja3MsIHlvdSBjYW4gcmVmZXIgdG8gdGhlCisgICAgICAgIHZhbHVlcyB2aWEgdGhlIHJ1bnRpbWUgcmVjb3JkLAorICAgICAgICBzdWJzdHJlYW0tJmd0O3J1bnRpbWUuCisgICAgICAgIEZvciBleGFtcGxlLCB0byBnZXQgdGhlIGN1cnJlbnQKKyAgICAgICAgcmF0ZSwgZm9ybWF0IG9yIGNoYW5uZWxzLCBhY2Nlc3MgdG8KKyAgICAgICAgcnVudGltZS0mZ3Q7cmF0ZSwKKyAgICAgICAgcnVudGltZS0mZ3Q7Zm9ybWF0IG9yCisgICAgICAgIHJ1bnRpbWUtJmd0O2NoYW5uZWxzLCByZXNwZWN0aXZlbHkuIAorICAgICAgICBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBpcyBzZXQgdG8KKwlydW50aW1lLSZndDtkbWFfYXJlYS4gIFRoZSBidWZmZXIgYW5kIHBlcmlvZCBzaXplcyBhcmUKKwlpbiBydW50aW1lLSZndDtidWZmZXJfc2l6ZSBhbmQgcnVudGltZS0mZ3Q7cGVyaW9kX3NpemUsCisJcmVzcGVjdGl2ZWx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQmUgY2FyZWZ1bCB0aGF0IHRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgbWFueSB0aW1lcyBhdAorICAgICAgICBlYWNoIHNldCB1cCwgdG9vLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtdHJpZ2dlci1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT50cmlnZ2VyIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfdHJpZ2dlcihzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtLCBpbnQgY21kKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHBjbSBpcyBzdGFydGVkLCBzdG9wcGVkIG9yIHBhdXNlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdoaWNoIGFjdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlIHNlY29uZCBhcmd1bWVudCwKKyAgICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX1RSSUdHRVJfWFhYPC9jb25zdGFudD4gaW4KKyAgICAgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbS5oJmd0OzwvZmlsZW5hbWU+LiBBdCBsZWFzdCwKKyAgICAgICAgICA8Y29uc3RhbnQ+U1RBUlQ8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlNUT1A8L2NvbnN0YW50PgorICAgICAgICAgIGNvbW1hbmRzIG11c3QgYmUgZGVmaW5lZCBpbiB0aGlzIGNhbGxiYWNrLiAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3dpdGNoIChjbWQpIHsKKyAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKyAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgdG8gc3RhcnQgdGhlIFBDTSBlbmdpbmUKKyAgICAgICAgICBicmVhazsKKyAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB0byBzdG9wIHRoZSBQQ00gZW5naW5lCisgICAgICAgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdoZW4gdGhlIHBjbSBzdXBwb3J0cyB0aGUgcGF1c2Ugb3BlcmF0aW9uIChnaXZlbiBpbiBpbmZvCisgICAgICAgIGZpZWxkIG9mIHRoZSBoYXJkd2FyZSB0YWJsZSksIDxjb25zdGFudD5QQVVTRV9QVVNFPC9jb25zdGFudD4KKyAgICAgICAgYW5kIDxjb25zdGFudD5QQVVTRV9SRUxFQVNFPC9jb25zdGFudD4gY29tbWFuZHMgbXVzdCBiZQorICAgICAgICBoYW5kbGVkIGhlcmUsIHRvby4gVGhlIGZvcm1lciBpcyB0aGUgY29tbWFuZCB0byBwYXVzZSB0aGUgcGNtLAorICAgICAgICBhbmQgdGhlIGxhdHRlciB0byByZXN0YXJ0IHRoZSBwY20gYWdhaW4uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2hlbiB0aGUgcGNtIHN1cHBvcnRzIHRoZSBzdXNwZW5kL3Jlc3VtZSBvcGVyYXRpb24KKyAgICAgICAgKGkuZS4gPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+IGZsYWcgaXMgc2V0KSwKKyAgICAgICAgPGNvbnN0YW50PlNVU1BFTkQ8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+CisgICAgICAgIGNvbW1hbmRzIG11c3QgYmUgaGFuZGxlZCwgdG9vLgorICAgICAgICBUaGVzZSBjb21tYW5kcyBhcmUgaXNzdWVkIHdoZW4gdGhlIHBvd2VyLW1hbmFnZW1lbnQgc3RhdHVzIGlzCisgICAgICAgIGNoYW5nZWQuICBPYnZpb3VzbHksIHRoZSA8Y29uc3RhbnQ+U1VTUEVORDwvY29uc3RhbnQ+IGFuZAorICAgICAgICA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4KKyAgICAgICAgZG8gc3VzcGVuZCBhbmQgcmVzdW1lIG9mIHRoZSBwY20gc3Vic3RyZWFtLCBhbmQgdXN1YWxseSwgdGhleQorICAgICAgICBhcmUgaWRlbnRpY2FsIHdpdGggPGNvbnN0YW50PlNUT1A8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PlNUQVJUPC9jb25zdGFudD4gY29tbWFuZHMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFzIG1lbnRpb25lZCwgdGhpcyBjYWxsYmFjayBpcyBhdG9taWMuICBZb3UgY2Fubm90IGNhbGwKKwkgIHRoZSBmdW5jdGlvbiBnb2luZyB0byBzbGVlcC4KKwkgIFRoZSB0cmlnZ2VyIGNhbGxiYWNrIHNob3VsZCBiZSBhcyBtaW5pbWFsIGFzIHBvc3NpYmxlLAorCSAganVzdCByZWFsbHkgdHJpZ2dlcmluZyB0aGUgRE1BLiAgVGhlIG90aGVyIHN0dWZmIHNob3VsZCBiZQorCSAgaW5pdGlhbGl6ZWQgaHdfcGFyYW1zIGFuZCBwcmVwYXJlIGNhbGxiYWNrcyBwcm9wZXJseQorCSAgYmVmb3JlaGFuZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcG9pbnRlci1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5wb2ludGVyIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3h4eF9wb2ludGVyKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pCitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBQQ00gbWlkZGxlIGxheWVyIGlucXVpcmVzCisgICAgICAgIHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvc2l0aW9uIG9uIHRoZSBidWZmZXIuIFRoZSBwb3NpdGlvbiBtdXN0CisgICAgICAgIGJlIHJldHVybmVkIGluIGZyYW1lcyAod2hpY2ggd2FzIGluIGJ5dGVzIG9uIEFMU0EgMC41LngpLAorICAgICAgICByYW5nZWQgZnJvbSAwIHRvIGJ1ZmZlcl9zaXplIC0gMS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHVzdWFsbHkgZnJvbSB0aGUgYnVmZmVyLXVwZGF0ZSByb3V0aW5lIGluIHRoZQorICAgICAgICBwY20gbWlkZGxlIGxheWVyLCB3aGljaCBpcyBpbnZva2VkIHdoZW4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCBpbiB0aGUKKyAgICAgICAgaW50ZXJydXB0IHJvdXRpbmUuIFRoZW4gdGhlIHBjbSBtaWRkbGUgbGF5ZXIgdXBkYXRlcyB0aGUKKyAgICAgICAgcG9zaXRpb24gYW5kIGNhbGN1bGF0ZXMgdGhlIGF2YWlsYWJsZSBzcGFjZSwgYW5kIHdha2VzIHVwIHRoZQorICAgICAgICBzbGVlcGluZyBwb2xsIHRocmVhZHMsIGV0Yy4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGFsc28gYXRvbWljLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1jb3B5LXNpbGVuY2UiPgorICAgICAgICA8dGl0bGU+Y29weSBhbmQgc2lsZW5jZSBjYWxsYmFja3M8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGVzZSBjYWxsYmFja3MgYXJlIG5vdCBtYW5kYXRvcnksIGFuZCBjYW4gYmUgb21pdHRlZCBpbgorICAgICAgICBtb3N0IGNhc2VzLiBUaGVzZSBjYWxsYmFja3MgYXJlIHVzZWQgd2hlbiB0aGUgaGFyZHdhcmUgYnVmZmVyCisgICAgICAgIGNhbm5vdCBiZSBvbiB0aGUgbm9ybWFsIG1lbW9yeSBzcGFjZS4gU29tZSBjaGlwcyBoYXZlIHRoZWlyCisgICAgICAgIG93biBidWZmZXIgb24gdGhlIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBtYXBwYWJsZS4gSW4gc3VjaCBhCisgICAgICAgIGNhc2UsIHlvdSBoYXZlIHRvIHRyYW5zZmVyIHRoZSBkYXRhIG1hbnVhbGx5IGZyb20gdGhlIG1lbW9yeQorICAgICAgICBidWZmZXIgdG8gdGhlIGhhcmR3YXJlIGJ1ZmZlci4gT3IsIGlmIHRoZSBidWZmZXIgaXMKKyAgICAgICAgbm9uLWNvbnRpZ3VvdXMgb24gYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbCBtZW1vcnkgc3BhY2VzLAorICAgICAgICB0aGVzZSBjYWxsYmFja3MgbXVzdCBiZSBkZWZpbmVkLCB0b28uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgdGhlc2UgdHdvIGNhbGxiYWNrcyBhcmUgZGVmaW5lZCwgY29weSBhbmQgc2V0LXNpbGVuY2UKKyAgICAgICAgb3BlcmF0aW9ucyBhcmUgZG9uZSBieSB0aGVtLiBUaGUgZGV0YWlsZWQgd2lsbCBiZSBkZXNjcmliZWQgaW4KKyAgICAgICAgdGhlIGxhdGVyIHNlY3Rpb24gPGxpbmsKKyAgICAgICAgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnkiPjxjaXRldGl0bGU+QnVmZmVyIGFuZCBNZW1vcnkKKyAgICAgICAgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1hY2siPgorICAgICAgICA8dGl0bGU+YWNrIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBhbHNvIG5vdCBtYW5kYXRvcnkuIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkCisgICAgICAgIHdoZW4gdGhlIGFwcGxfcHRyIGlzIHVwZGF0ZWQgaW4gcmVhZCBvciB3cml0ZSBvcGVyYXRpb25zLgorICAgICAgICBTb21lIGRyaXZlcnMgbGlrZSBlbXUxMGsxLWZ4IGFuZCBjczQ2eHggbmVlZCB0byB0cmFjayB0aGUKKwljdXJyZW50IGFwcGxfcHRyIGZvciB0aGUgaW50ZXJuYWwgYnVmZmVyLCBhbmQgdGhpcyBjYWxsYmFjaworCWlzIHVzZWZ1bCBvbmx5IGZvciBzdWNoIGEgcHVycG9zZS4KKwk8L3BhcmE+CisJPHBhcmE+CisJICBUaGlzIGNhbGxiYWNrIGlzIGF0b21pYy4KKwk8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wYWdlLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPnBhZ2UgY2FsbGJhY2s8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgYWxzbyBub3QgbWFuZGF0b3J5LiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQKKyAgICAgICAgbWFpbmx5IGZvciB0aGUgbm9uLWNvbnRpZ3VvdXMgYnVmZmVyLiBUaGUgbW1hcCBjYWxscyB0aGlzCisgICAgICAgIGNhbGxiYWNrIHRvIGdldCB0aGUgcGFnZSBhZGRyZXNzLiBTb21lIGV4YW1wbGVzIHdpbGwgYmUKKyAgICAgICAgZXhwbGFpbmVkIGluIHRoZSBsYXRlciBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij48Y2l0ZXRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5CisgICAgICAgIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+LCB0b28uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXIiPgorICAgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcmVzdCBvZiBwY20gc3R1ZmYgaXMgdGhlIFBDTSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhlCisgICAgICByb2xlIG9mIFBDTSBpbnRlcnJ1cHQgaGFuZGxlciBpbiB0aGUgc291bmQgZHJpdmVyIGlzIHRvIHVwZGF0ZQorICAgICAgdGhlIGJ1ZmZlciBwb3NpdGlvbiBhbmQgdG8gdGVsbCB0aGUgUENNIG1pZGRsZSBsYXllciB3aGVuIHRoZQorICAgICAgYnVmZmVyIHBvc2l0aW9uIGdvZXMgYWNyb3NzIHRoZSBwcmVzY3JpYmVkIHBlcmlvZCBzaXplLiBUbworICAgICAgaW5mb3JtIHRoaXMsIGNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+CisgICAgICBmdW5jdGlvbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBzb3VuZCBjaGlwcyB0byBnZW5lcmF0ZSB0aGUgaW50ZXJydXB0cy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXItYm91bmRhcnkiPgorICAgICAgICA8dGl0bGU+SW50ZXJydXB0cyBhdCB0aGUgcGVyaW9kIChmcmFnbWVudCkgYm91bmRhcnk8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIHRoZSBtb3N0IGZyZXF1ZW50bHkgZm91bmQgdHlwZTogIHRoZSBoYXJkd2FyZQorICAgICAgICBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IGF0IGVhY2ggcGVyaW9kIGJvdW5kYXJ5LgorCUluIHRoaXMgY2FzZSwgeW91IGNhbiBjYWxsCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBhdCBlYWNoIAorICAgICAgICBpbnRlcnJ1cHQuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IHRha2VzIHRoZQorICAgICAgICBzdWJzdHJlYW0gcG9pbnRlciBhcyBpdHMgYXJndW1lbnQuIFRodXMsIHlvdSBuZWVkIHRvIGtlZXAgdGhlCisgICAgICAgIHN1YnN0cmVhbSBwb2ludGVyIGFjY2Vzc2libGUgZnJvbSB0aGUgY2hpcCBpbnN0YW5jZS4gRm9yCisgICAgICAgIGV4YW1wbGUsIGRlZmluZSBzdWJzdHJlYW0gZmllbGQgaW4gdGhlIGNoaXAgcmVjb3JkIHRvIGhvbGQgdGhlCisgICAgICAgIGN1cnJlbnQgcnVubmluZyBzdWJzdHJlYW0gcG9pbnRlciwgYW5kIHNldCB0aGUgcG9pbnRlciB2YWx1ZQorICAgICAgICBhdCBvcGVuIGNhbGxiYWNrIChhbmQgcmVzZXQgYXQgY2xvc2UgY2FsbGJhY2spLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBhcXVpcmUgYSBzcGlubG9jayBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGFuZCB0aGUKKyAgICAgICAgbG9jayBpcyB1c2VkIGluIG90aGVyIHBjbSBjYWxsYmFja3MsIHRvbywgdGhlbiB5b3UgaGF2ZSB0bworICAgICAgICByZWxlYXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiwgYmVjYXVzZQorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gY2FsbHMgb3RoZXIgcGNtCisgICAgICAgIGNhbGxiYWNrcyBpbnNpZGUuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQSB0eXBpY2FsIGNvZGluZyB3b3VsZCBiZSBsaWtlOgorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlciBDYXNlICMxPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX215Y2hpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGRldl9pZDsKKyAgICAgICAgICBzcGluX2xvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBpZiAocGNtX2lycV9pbnZva2VkKGNoaXApKSB7CisgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVwZGF0ZXIsIHVubG9jayBiZWZvcmUgaXQgKi8KKyAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgIHNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+c3Vic3RyZWFtKTsKKyAgICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgICAgICAgICAvLyBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGlmIG5lY2Vzc2FyeQorICAgICAgICAgIH0KKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci10aW1lciI+CisgICAgICAgIDx0aXRsZT5IaWdoLWZyZXF1ZW50IHRpbWVyIGludGVycnVwdHM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKwlUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIGhhcmR3YXJlIGRvZXNuJ3QgZ2VuZXJhdGUgaW50ZXJydXB0cworICAgICAgICBhdCB0aGUgcGVyaW9kIGJvdW5kYXJ5IGJ1dCBkbyB0aW1lci1pbnRlcnJ1cHRzIGF0IHRoZSBmaXhlZAorICAgICAgICB0aW1lciByYXRlIChlLmcuIGVzMTk2OCBvciB5bWZwY2kgZHJpdmVycykuIAorICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IGhhcmR3YXJlCisgICAgICAgIHBvc2l0aW9uIGFuZCBhY2N1bXVsYXRlcyB0aGUgcHJvY2Vzc2VkIHNhbXBsZSBsZW5ndGggYXQgZWFjaAorICAgICAgICBpbnRlcnJ1cHQuICBXaGVuIHRoZSBhY2N1bXVsYXRlZCBzaXplIG92ZXJjb21lcyB0aGUgcGVyaW9kCisgICAgICAgIHNpemUsIGNhbGwgCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBhbmQgcmVzZXQgdGhlCisgICAgICAgIGFjY3VtdWxhdG9yLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEEgdHlwaWNhbCBjb2Rpbmcgd291bGQgYmUgbGlrZSB0aGUgZm9sbG93aW5nLgorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlciBDYXNlICMyPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX215Y2hpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGRldl9pZDsKKyAgICAgICAgICBzcGluX2xvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBpZiAocGNtX2lycV9pbnZva2VkKGNoaXApKSB7CisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGFzdF9wdHIsIHNpemU7CisgICAgICAgICAgICAgICAgICAvKiBnZXQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcG9pbnRlciAoaW4gZnJhbWVzKSAqLworICAgICAgICAgICAgICAgICAgbGFzdF9wdHIgPSBnZXRfaHdfcHRyKGNoaXApOworICAgICAgICAgICAgICAgICAgLyogY2FsY3VsYXRlIHRoZSBwcm9jZXNzZWQgZnJhbWVzIHNpbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICogbGFzdCB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgaWYgKGxhc3RfcHRyIDwgY2hpcC0+bGFzdF9wdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBydW50aW1lLT5idWZmZXJfc2l6ZSArIGxhc3RfcHRyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGNoaXAtPmxhc3RfcHRyOyAKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGxhc3RfcHRyIC0gY2hpcC0+bGFzdF9wdHI7CisgICAgICAgICAgICAgICAgICAvKiByZW1lbWJlciB0aGUgbGFzdCB1cGRhdGVkIHBvaW50ICovCisgICAgICAgICAgICAgICAgICBjaGlwLT5sYXN0X3B0ciA9IGxhc3RfcHRyOworICAgICAgICAgICAgICAgICAgLyogYWNjdW11bGF0ZSB0aGUgc2l6ZSAqLworICAgICAgICAgICAgICAgICAgY2hpcC0+c2l6ZSArPSBzaXplOworICAgICAgICAgICAgICAgICAgLyogb3ZlciB0aGUgcGVyaW9kIGJvdW5kYXJ5PyAqLworICAgICAgICAgICAgICAgICAgaWYgKGNoaXAtPnNpemUgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzZXQgdGhlIGFjY3VtdWxhdG9yICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPnNpemUgJT0gcnVudGltZS0+cGVyaW9kX3NpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhbGwgdXBkYXRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIC8vIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5CisgICAgICAgICAgfQorICAgICAgICAgIC4uLi4KKyAgICAgICAgICBzcGluX3VubG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9leGFtcGxlPgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyLWJvdGgiPgorICAgICAgICA8dGl0bGU+T24gY2FsbGluZyA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJbiBib3RoIGNhc2VzLCBldmVuIGlmIG1vcmUgdGhhbiBvbmUgcGVyaW9kIGFyZSBlbGFwc2VkLCB5b3UKKyAgICAgICAgZG9uJ3QgaGF2ZSB0byBjYWxsCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBtYW55IHRpbWVzLiBDYWxsCisgICAgICAgIG9ubHkgb25jZS4gQW5kIHRoZSBwY20gbGF5ZXIgd2lsbCBjaGVjayB0aGUgY3VycmVudCBoYXJkd2FyZQorICAgICAgICBwb2ludGVyIGFuZCB1cGRhdGUgdG8gdGhlIGxhdGVzdCBzdGF0dXMuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtYXRvbWljaXR5Ij4KKyAgICAgIDx0aXRsZT5BdG9taWNpdHk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IChhbmQgdGh1cyBkaWZmaWN1bHQgdG8gZGVidWcpIHByb2JsZW0KKyAgICAgIG9uIHRoZSBrZXJuZWwgcHJvZ3JhbW1pbmcgaXMgdGhlIHJhY2UgY29uZGl0aW9uLgorICAgICAgT24gbGludXgga2VybmVsLCB1c3VhbGx5IGl0J3Mgc29sdmVkIHZpYSBzcGluLWxvY2tzIG9yCisgICAgICBzZW1hcGhvcmVzLiAgSW4gZ2VuZXJhbCwgaWYgdGhlIHJhY2UgY29uZGl0aW9uIG1heQorICAgICAgaGFwcGVuIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgaXQncyBoYW5kbGVkIGFzIGF0b21pYywgYW5kIHlvdQorICAgICAgaGF2ZSB0byB1c2Ugc3BpbmxvY2sgZm9yIHByb3RlY3RpbmcgdGhlIGNyaXRpY2FsIHNlc3Npb24uICBJZiBpdAorICAgICAgbmV2ZXIgaGFwcGVucyBpbiB0aGUgaW50ZXJydXB0IGFuZCBpdCBtYXkgdGFrZSByZWxhdGl2ZWx5IGxvbmcKKyAgICAgIHRpbWUsIHlvdSBzaG91bGQgdXNlIHNlbWFwaG9yZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBcyBhbHJlYWR5IHNlZW4sIHNvbWUgcGNtIGNhbGxiYWNrcyBhcmUgYXRvbWljIGFuZCBzb21lIGFyZQorICAgICAgbm90LiAgRm9yIGV4YW1wbGUsIDxwYXJhbWV0ZXI+aHdfcGFyYW1zPC9wYXJhbWV0ZXI+IGNhbGxiYWNrIGlzCisgICAgICBub24tYXRvbWljLCB3aGlsZSA8cGFyYW1ldGVyPnRyaWdnZXI8L3BhcmFtZXRlcj4gY2FsbGJhY2sgaXMKKyAgICAgIGF0b21pYy4gIFRoaXMgbWVhbnMsIHRoZSBsYXR0ZXIgaXMgY2FsbGVkIGFscmVhZHkgaW4gYSBzcGlubG9jaworICAgICAgaGVsZCBieSB0aGUgUENNIG1pZGRsZSBsYXllci4gUGxlYXNlIHRha2UgdGhpcyBhdG9taWNpdHkgaW50bworICAgICAgYWNjb3VudCB3aGVuIHlvdSB1c2UgYSBzcGlubG9jayBvciBhIHNlbWFwaG9yZSBpbiB0aGUgY2FsbGJhY2tzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEluIHRoZSBhdG9taWMgY2FsbGJhY2tzLCB5b3UgY2Fubm90IHVzZSBmdW5jdGlvbnMgd2hpY2ggbWF5IGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zY2hlZHVsZTwvZnVuY3Rpb24+IG9yIGdvIHRvCisgICAgICA8ZnVuY3Rpb24+c2xlZXA8L2Z1bmN0aW9uPi4gIFRoZSBzZW1hcGhvcmUgYW5kIG11dGV4IGRvIHNsZWVwLAorICAgICAgYW5kIGhlbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgaW5zaWRlIHRoZSBhdG9taWMgY2FsbGJhY2tzCisgICAgICAoZS5nLiA8cGFyYW1ldGVyPnRyaWdnZXI8L3BhcmFtZXRlcj4gY2FsbGJhY2spLgorICAgICAgRm9yIHRha2luZyBhIGNlcnRhaW4gZGVsYXkgaW4gc3VjaCBhIGNhbGxiYWNrLCBwbGVhc2UgdXNlCisgICAgICA8ZnVuY3Rpb24+dWRlbGF5KCk8L2Z1bmN0aW9uPiBvciA8ZnVuY3Rpb24+bWRlbGF5KCk8L2Z1bmN0aW9uPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBbGwgdGhyZWUgYXRvbWljIGNhbGxiYWNrcyAodHJpZ2dlciwgcG9pbnRlciwgYW5kIGFjaykgYXJlCisgICAgICBjYWxsZWQgd2l0aCBsb2NhbCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWNvbnN0cmFpbnRzIj4KKyAgICAgIDx0aXRsZT5Db25zdHJhaW50czwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91ciBjaGlwIHN1cHBvcnRzIHVuY29udmVudGlvbmFsIHNhbXBsZSByYXRlcywgb3Igb25seSB0aGUKKyAgICAgIGxpbWl0ZWQgc2FtcGxlcywgeW91IG5lZWQgdG8gc2V0IGEgY29uc3RyYWludCBmb3IgdGhlCisgICAgICBjb25kaXRpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGluIG9yZGVyIHRvIHJlc3RyaWN0IHRoZSBzYW1wbGUgcmF0ZXMgaW4gdGhlIHNvbWUKKyAgICAgICAgc3VwcG9ydGVkIHZhbHVlcywgdXNlCisJPGZ1bmN0aW9uPnNuZF9wY21faHdfY29uc3RyYWludF9saXN0KCk8L2Z1bmN0aW9uPi4KKwlZb3UgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gdGhlIG9wZW4gY2FsbGJhY2suCisKKyAgICAgICAgPGV4YW1wbGU+CisJICA8dGl0bGU+RXhhbXBsZSBvZiBIYXJkd2FyZSBDb25zdHJhaW50czwvdGl0bGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9CisgICAgICAgICAgezQwMDAsIDEwMDAwLCAyMjA1MCwgNDQxMDB9OworICBzdGF0aWMgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3RfdCBjb25zdHJhaW50c19yYXRlcyA9IHsKKyAgICAgICAgICAuY291bnQgPSBBUlJBWV9TSVpFKHJhdGVzKSwKKyAgICAgICAgICAubGlzdCA9IHJhdGVzLAorICAgICAgICAgIC5tYXNrID0gMCwKKyAgfTsKKworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25zdHJhaW50c19yYXRlcyk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IGNvbnN0cmFpbnRzLgorICAgICAgICBMb29rIGluIDxmaWxlbmFtZT5zb3VuZC9wY20uaDwvZmlsZW5hbWU+IGZvciBhIGNvbXBsZXRlIGxpc3QuCisgICAgICAgIFlvdSBjYW4gZXZlbiBkZWZpbmUgeW91ciBvd24gY29uc3RyYWludCBydWxlcy4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGxldCdzIHN1cHBvc2UgbXlfY2hpcCBjYW4gbWFuYWdlIGEgc3Vic3RyZWFtIG9mIDEgY2hhbm5lbAorICAgICAgICBpZiBhbmQgb25seSBpZiB0aGUgZm9ybWF0IGlzIFMxNl9MRSwgb3RoZXJ3aXNlIGl0IHN1cHBvcnRzIGFueSBmb3JtYXQKKyAgICAgICAgc3BlY2lmaWVkIGluIHRoZSA8dHlwZT5zbmRfcGNtX2hhcmR3YXJlX3Q8L3R5cGU+IHN0dWN0dXJlIChvciBpbiBhbnkKKyAgICAgICAgb3RoZXIgY29uc3RyYWludF9saXN0KS4gWW91IGNhbiBidWlsZCBhIHJ1bGUgbGlrZSB0aGlzOgorCisgICAgICAgIDxleGFtcGxlPgorCSAgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHMgZm9yIENoYW5uZWxzPC90aXRsZT4KKwkgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IGh3X3J1bGVfZm9ybWF0X2J5X2NoYW5uZWxzKHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX2h3X3J1bGVfdCAqcnVsZSkKKyAgeworICAgICAgICAgIHNuZF9pbnRlcnZhbF90ICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworICAgICAgICAgIHNuZF9tYXNrX3QgKmYgPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisgICAgICAgICAgc25kX21hc2tfdCBmbXQ7CisKKyAgICAgICAgICBzbmRfbWFza19hbnkoJmZtdCk7ICAgIC8qIEluaXQgdGhlIHN0cnVjdCAqLworICAgICAgICAgIGlmIChjLT5taW4gPCAyKSB7CisgICAgICAgICAgICAgICAgICBmbXQuYml0c1swXSAmPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBzbmRfbWFza19yZWZpbmUoZiwgJmZtdCk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlbiB5b3UgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gYWRkIHlvdXIgcnVsZToKKworICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisJIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2h3X3J1bGVfYWRkKHN1YnN0cmVhbS0+cnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorICAgICAgICAgICAgICAgICAgICAgIGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0LCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgIC0xKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJ1bGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gc2V0cyB0aGUgbnVtYmVyIG9mCisgICAgICAgIGNoYW5uZWxzLiBCdXQgYW4gYXBwbGljYXRpb24gY2FuIHNldCB0aGUgZm9ybWF0IGJlZm9yZSB0aGUgbnVtYmVyIG9mCisgICAgICAgIGNoYW5uZWxzLiBUaHVzIHlvdSBhbHNvIG5lZWQgdG8gZGVmaW5lIHRoZSBpbnZlcnNlIHJ1bGU6CisKKyAgICAgICA8ZXhhbXBsZT4KKwkgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHMgZm9yIENoYW5uZWxzPC90aXRsZT4KKwkgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgaHdfcnVsZV9jaGFubmVsc19ieV9mb3JtYXQoc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9wY21faHdfcnVsZV90ICpydWxlKQorICB7CisgICAgICAgICAgc25kX2ludGVydmFsX3QgKmMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisgICAgICAgICAgc25kX21hc2tfdCAqZiA9IGh3X3BhcmFtX21hc2socGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUKTsKKyAgICAgICAgICBzbmRfaW50ZXJ2YWxfdCBjaDsKKworICAgICAgICAgIHNuZF9pbnRlcnZhbF9hbnkoJmNoKTsKKyAgICAgICAgICBpZiAoZi0+Yml0c1swXSA9PSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkgeworICAgICAgICAgICAgICAgICAgY2gubWluID0gY2gubWF4ID0gMTsKKyAgICAgICAgICAgICAgICAgIGNoLmludGVnZXIgPSAxOworICAgICAgICAgICAgICAgICAgcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJmNoKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAuLi5hbmQgaW4gdGhlIG9wZW4gY2FsbGJhY2s6CisgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKwkgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21faHdfcnVsZV9hZGQoc3Vic3RyZWFtLT5ydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgIGh3X3J1bGVfZm9ybWF0X2J5X2NoYW5uZWxzLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisgICAgICAgICAgICAgICAgICAgICAgLTEpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJIHdvbid0IGV4cGxhaW4gbW9yZSBkZXRhaWxzIGhlcmUsIHJhdGhlciBJCisgICAgICAgIHdvdWxkIGxpa2UgdG8gc2F5LCA8cXVvdGU+THVrZSwgdXNlIHRoZSBzb3VyY2UuPC9xdW90ZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBDb250cm9sIEludGVyZmFjZSAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9ImNvbnRyb2wtaW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+Q29udHJvbCBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWdlbmVyYWwiPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb250cm9sIGludGVyZmFjZSBpcyB1c2VkIHdpZGVseSBmb3IgbWFueSBzd2l0Y2hlcywKKyAgICAgIHNsaWRlcnMsIGV0Yy4gd2hpY2ggYXJlIGFjY2Vzc2VkIGZyb20gdGhlIHVzZXItc3BhY2UuIEl0cyBtb3N0CisgICAgICBpbXBvcnRhbnQgdXNlIGlzIHRoZSBtaXhlciBpbnRlcmZhY2UuIEluIG90aGVyIHdvcmRzLCBvbiBBTFNBCisgICAgICAwLjkueCwgYWxsIHRoZSBtaXhlciBzdHVmZiBpcyBpbXBsZW1lbnRlZCBvbiB0aGUgY29udHJvbCBrZXJuZWwKKyAgICAgIEFQSSAod2hpbGUgdGhlcmUgd2FzIGFuIGluZGVwZW5kZW50IG1peGVyIGtlcm5lbCBBUEkgb24gMC41LngpLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFMU0EgaGFzIGEgd2VsbC1kZWZpbmVkIEFDOTcgY29udHJvbCBtb2R1bGUuIElmIHlvdXIgY2hpcAorICAgICAgc3VwcG9ydHMgb25seSB0aGUgQUM5NyBhbmQgbm90aGluZyBlbHNlLCB5b3UgY2FuIHNraXAgdGhpcworICAgICAgc2VjdGlvbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY29udHJvbCBBUEkgaXMgZGVmaW5lZCBpbgorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9jb250cm9sLmgmZ3Q7PC9maWxlbmFtZT4uCisgICAgICBJbmNsdWRlIHRoaXMgZmlsZSBpZiB5b3UgYWRkIHlvdXIgb3duIGNvbnRyb2xzLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1kZWZpbml0aW9uIj4KKyAgICAgIDx0aXRsZT5EZWZpbml0aW9uIG9mIENvbnRyb2xzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgY3JlYXRpbmcgYSBuZXcgY29udHJvbCwgeW91IG5lZWQgdG8gZGVmaW5lIHRoZSB0aHJlZQorICAgICAgY2FsbGJhY2tzOiA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+LAorICAgICAgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnB1dDwvc3RydWN0ZmllbGQ+LiBUaGVuLCBkZWZpbmUgYQorICAgICAgPHR5cGU+c25kX2tjb250cm9sX25ld190PC90eXBlPiByZWNvcmQsIHN1Y2ggYXM6IAorCisgICAgICAgIDxleGFtcGxlPgorCSAgPHRpdGxlPkRlZmluaXRpb24gb2YgYSBDb250cm9sPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHNuZF9rY29udHJvbF9uZXdfdCBteV9jb250cm9sIF9fZGV2aW5pdGRhdGEgPSB7CisgICAgICAgICAgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisgICAgICAgICAgLm5hbWUgPSAiUENNIFBsYXliYWNrIFN3aXRjaCIsCisgICAgICAgICAgLmluZGV4ID0gMCwKKyAgICAgICAgICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKKyAgICAgICAgICAucHJpdmF0ZV92YWx1ZXMgPSAweGZmZmYsCisgICAgICAgICAgLmluZm8gPSBteV9jb250cm9sX2luZm8sCisgICAgICAgICAgLmdldCA9IG15X2NvbnRyb2xfZ2V0LAorICAgICAgICAgIC5wdXQgPSBteV9jb250cm9sX3B1dAorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTW9zdCBsaWtlbHkgdGhlIGNvbnRyb2wgaXMgY3JlYXRlZCB2aWEKKyAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX25ldzEoKTwvZnVuY3Rpb24+LCBhbmQgaW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4KKyAgICAgIGFkZCA8cGFyYW1ldGVyPl9fZGV2aW5pdGRhdGE8L3BhcmFtZXRlcj4gcHJlZml4IHRvIHRoZQorICAgICAgZGVmaW5pdGlvbiBsaWtlIGFib3ZlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aWZhY2U8L3N0cnVjdGZpZWxkPiBmaWVsZCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YKKyAgICAgIHRoZSBjb250cm9sLAorICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0lGQUNFX1hYWDwvY29uc3RhbnQ+LiBUaGVyZSBhcmUKKyAgICAgIDxjb25zdGFudD5NSVhFUjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+UENNPC9jb25zdGFudD4sCisgICAgICA8Y29uc3RhbnQ+Q0FSRDwvY29uc3RhbnQ+LCBldGMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPiBpcyB0aGUgbmFtZSBpZGVudGlmaWVyCisgICAgICBzdHJpbmcuIE9uIEFMU0EgMC45LngsIHRoZSBjb250cm9sIG5hbWUgaXMgdmVyeSBpbXBvcnRhbnQsCisgICAgICBiZWNhdXNlIGl0cyByb2xlIGlzIGNsYXNzaWZpZWQgZnJvbSBpdHMgbmFtZS4gVGhlcmUgYXJlCisgICAgICBwcmUtZGVmaW5lZCBzdGFuZGFyZCBjb250cm9sIG5hbWVzLiBUaGUgZGV0YWlscyBhcmUgZGVzY3JpYmVkIGluCisgICAgICB0aGUgc3Vic2VjdGlvbgorICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY29udHJvbC1uYW1lcyI+PGNpdGV0aXRsZT4KKyAgICAgIENvbnRyb2wgTmFtZXM8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGhvbGRzIHRoZSBpbmRleCBudW1iZXIKKyAgICAgIG9mIHRoaXMgY29udHJvbC4gSWYgdGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IGNvbnRyb2xzIHdpdGgKKyAgICAgIHRoZSBzYW1lIG5hbWUsIHRoZXkgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIGluZGV4CisgICAgICBudW1iZXIuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiAKKyAgICAgIHNldmVyYWwgY29kZWNzIGV4aXN0IG9uIHRoZSBjYXJkLiBJZiB0aGUgaW5kZXggaXMgemVybywgeW91IGNhbgorICAgICAgb21pdCB0aGUgZGVmaW5pdGlvbiBhYm92ZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmFjY2Vzczwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBhY2Nlc3MKKyAgICAgIHR5cGUgb2YgdGhpcyBjb250cm9sLiBHaXZlIHRoZSBjb21iaW5hdGlvbiBvZiBiaXQgbWFza3MsCisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1hYWDwvY29uc3RhbnQ+LCB0aGVyZS4KKyAgICAgIFRoZSBkZXRhaWxlZCB3aWxsIGJlIGV4cGxhaW5lZCBpbiB0aGUgc3Vic2VjdGlvbgorICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtYWNjZXNzLWZsYWdzIj48Y2l0ZXRpdGxlPgorICAgICAgQWNjZXNzIEZsYWdzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV92YWx1ZXM8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucworICAgICAgYW4gYXJiaXRyYXJ5IGxvbmcgaW50ZWdlciB2YWx1ZSBmb3IgdGhpcyByZWNvcmQuIFdoZW4gdXNpbmcKKyAgICAgIGdlbmVyaWMgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MsIHlvdSBjYW4gcGFzcyBhIHZhbHVlIAorICAgICAgdGhyb3VnaCB0aGlzIGZpZWxkLiBJZiBzZXZlcmFsIHNtYWxsIG51bWJlcnMgYXJlIG5lY2Vzc2FyeSwgeW91IGNhbgorICAgICAgY29tYmluZSB0aGVtIGluIGJpdHdpc2UuIE9yLCBpdCdzIHBvc3NpYmxlIHRvIGdpdmUgYSBwb2ludGVyCisgICAgICAoY2FzdGVkIHRvIHVuc2lnbmVkIGxvbmcpIG9mIHNvbWUgcmVjb3JkIHRvIHRoaXMgZmllbGQsIHRvby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgb3RoZXIgdGhyZWUgYXJlCisJPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzIj48Y2l0ZXRpdGxlPgorCWNhbGxiYWNrIGZ1bmN0aW9uczwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMiPgorICAgICAgPHRpdGxlPkNvbnRyb2wgTmFtZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkcyBmb3IgZGVmaW5pbmcgdGhlIGNvbnRyb2wgbmFtZXMuIEEKKyAgICAgIGNvbnRyb2wgaXMgdXN1YWxseSBkZWZpbmVkIGZyb20gdGhlIHRocmVlIHBhcnRzIGFzCisgICAgICA8cXVvdGU+U09VUkNFIERJUkVDVElPTiBGVU5DVElPTjwvcXVvdGU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCwgPGNvbnN0YW50PlNPVVJDRTwvY29uc3RhbnQ+LCBzcGVjaWZpZXMgdGhlIHNvdXJjZQorICAgICAgb2YgdGhlIGNvbnRyb2wsIGFuZCBpcyBhIHN0cmluZyBzdWNoIGFzIDxxdW90ZT5NYXN0ZXI8L3F1b3RlPiwKKyAgICAgIDxxdW90ZT5QQ008L3F1b3RlPiwgPHF1b3RlPkNEPC9xdW90ZT4gb3IKKyAgICAgIDxxdW90ZT5MaW5lPC9xdW90ZT4uIFRoZXJlIGFyZSBtYW55IHByZS1kZWZpbmVkIHNvdXJjZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHNlY29uZCwgPGNvbnN0YW50PkRJUkVDVElPTjwvY29uc3RhbnQ+LCBpcyBvbmUgb2YgdGhlCisgICAgICBmb2xsb3dpbmcgc3RyaW5ncyBhY2NvcmRpbmcgdG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgY29udHJvbDoKKyAgICAgIDxxdW90ZT5QbGF5YmFjazwvcXVvdGU+LCA8cXVvdGU+Q2FwdHVyZTwvcXVvdGU+LCA8cXVvdGU+QnlwYXNzCisgICAgICBQbGF5YmFjazwvcXVvdGU+IGFuZCA8cXVvdGU+QnlwYXNzIENhcHR1cmU8L3F1b3RlPi4gT3IsIGl0IGNhbgorICAgICAgYmUgb21pdHRlZCwgbWVhbmluZyBib3RoIHBsYXliYWNrIGFuZCBjYXB0dXJlIGRpcmVjdGlvbnMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHRoaXJkLCA8Y29uc3RhbnQ+RlVOQ1RJT048L2NvbnN0YW50PiwgaXMgb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBvZiB0aGUgY29udHJvbDoKKyAgICAgIDxxdW90ZT5Td2l0Y2g8L3F1b3RlPiwgPHF1b3RlPlZvbHVtZTwvcXVvdGU+IGFuZAorICAgICAgPHF1b3RlPlJvdXRlPC9xdW90ZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGV4YW1wbGUgb2YgY29udHJvbCBuYW1lcyBhcmUsIHRodXMsIDxxdW90ZT5NYXN0ZXIgQ2FwdHVyZQorICAgICAgU3dpdGNoPC9xdW90ZT4gb3IgPHF1b3RlPlBDTSBQbGF5YmFjayBWb2x1bWU8L3F1b3RlPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgc29tZSBleGNlcHRpb25zOgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY29udHJvbC1uYW1lcy1nbG9iYWwiPgorICAgICAgICA8dGl0bGU+R2xvYmFsIGNhcHR1cmUgYW5kIHBsYXliYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPHF1b3RlPkNhcHR1cmUgU291cmNlPC9xdW90ZT4sIDxxdW90ZT5DYXB0dXJlIFN3aXRjaDwvcXVvdGU+CisgICAgICAgIGFuZCA8cXVvdGU+Q2FwdHVyZSBWb2x1bWU8L3F1b3RlPiBhcmUgdXNlZCBmb3IgdGhlIGdsb2JhbAorICAgICAgICBjYXB0dXJlIChpbnB1dCkgc291cmNlLCBzd2l0Y2ggYW5kIHZvbHVtZS4gU2ltaWxhcmx5LAorICAgICAgICA8cXVvdGU+UGxheWJhY2sgU3dpdGNoPC9xdW90ZT4gYW5kIDxxdW90ZT5QbGF5YmFjaworICAgICAgICBWb2x1bWU8L3F1b3RlPiBhcmUgdXNlZCBmb3IgdGhlIGdsb2JhbCBvdXRwdXQgZ2FpbiBzd2l0Y2ggYW5kCisgICAgICAgIHZvbHVtZS4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtdG9uZSI+CisgICAgICAgIDx0aXRsZT5Ub25lLWNvbnRyb2xzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgdG9uZS1jb250cm9sIHN3aXRjaCBhbmQgdm9sdW1lcyBhcmUgc3BlY2lmaWVkIGxpa2UKKyAgICAgICAgPHF1b3RlPlRvbmUgQ29udHJvbCAtIFhYWDwvcXVvdGU+LCBlLmcuIDxxdW90ZT5Ub25lIENvbnRyb2wgLQorICAgICAgICBTd2l0Y2g8L3F1b3RlPiwgPHF1b3RlPlRvbmUgQ29udHJvbCAtIEJhc3M8L3F1b3RlPiwKKyAgICAgICAgPHF1b3RlPlRvbmUgQ29udHJvbCAtIENlbnRlcjwvcXVvdGU+LiAgCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtM2QiPgorICAgICAgICA8dGl0bGU+M0QgY29udHJvbHM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAzRC1jb250cm9sIHN3aXRjaGVzIGFuZCB2b2x1bWVzIGFyZSBzcGVjaWZpZWQgbGlrZSA8cXVvdGU+M0QKKyAgICAgICAgQ29udHJvbCAtIFhYWDwvcXVvdGU+LCBlLmcuIDxxdW90ZT4zRCBDb250cm9sIC0KKyAgICAgICAgU3dpdGNoPC9xdW90ZT4sIDxxdW90ZT4zRCBDb250cm9sIC0gQ2VudGVyPC9xdW90ZT4sIDxxdW90ZT4zRAorICAgICAgICBDb250cm9sIC0gU3BhY2U8L3F1b3RlPi4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtbWljIj4KKyAgICAgICAgPHRpdGxlPk1pYyBib29zdDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1pYy1ib29zdCBzd2l0Y2ggaXMgc2V0IGFzIDxxdW90ZT5NaWMgQm9vc3Q8L3F1b3RlPiBvcgorICAgICAgICA8cXVvdGU+TWljIEJvb3N0ICg2ZEIpPC9xdW90ZT4uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTW9yZSBwcmVjaXNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbgorICAgICAgICA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NvbnRyb2xOYW1lcy50eHQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1hY2Nlc3MtZmxhZ3MiPgorICAgICAgPHRpdGxlPkFjY2VzcyBGbGFnczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIGFjY2VzcyBmbGFnIGlzIHRoZSBiaXQtZmxhZ3Mgd2hpY2ggc3BlY2lmaWVzIHRoZSBhY2Nlc3MgdHlwZQorICAgICAgb2YgdGhlIGdpdmVuIGNvbnRyb2wuICBUaGUgZGVmYXVsdCBhY2Nlc3MgdHlwZSBpcworICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEU8L2NvbnN0YW50PiwgCisgICAgICB3aGljaCBtZWFucyBib3RoIHJlYWQgYW5kIHdyaXRlIGFyZSBhbGxvd2VkIHRvIHRoaXMgY29udHJvbC4KKyAgICAgIFdoZW4gdGhlIGFjY2VzcyBmbGFnIGlzIG9taXR0ZWQgKGkuZS4gPSAwKSwgaXQgaXMKKyAgICAgIHJlZ2FyZGVkIGFzIDxjb25zdGFudD5SRUFEV1JJVEU8L2NvbnN0YW50PiBhY2Nlc3MgYXMgZGVmYXVsdC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgV2hlbiB0aGUgY29udHJvbCBpcyByZWFkLW9ubHksIHBhc3MKKyAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRDwvY29uc3RhbnQ+IGluc3RlYWQuCisgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBkb24ndCBoYXZlIHRvIGRlZmluZQorICAgICAgPHN0cnVjdGZpZWxkPnB1dDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLgorICAgICAgU2ltaWxhcmx5LCB3aGVuIHRoZSBjb250cm9sIGlzIHdyaXRlLW9ubHkgKGFsdGhvdWdoIGl0J3MgYSByYXJlCisgICAgICBjYXNlKSwgeW91IGNhbiB1c2UgPGNvbnN0YW50PldSSVRFPC9jb25zdGFudD4gZmxhZyBpbnN0ZWFkLCBhbmQKKyAgICAgIHlvdSBkb24ndCBuZWVkIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJZiB0aGUgY29udHJvbCB2YWx1ZSBjaGFuZ2VzIGZyZXF1ZW50bHkgKGUuZy4gdGhlIFZVIG1ldGVyKSwKKyAgICAgIDxjb25zdGFudD5WT0xBVElMRTwvY29uc3RhbnQ+IGZsYWcgc2hvdWxkIGJlIGdpdmVuLiAgVGhpcyBtZWFucworICAgICAgdGhhdCB0aGUgY29udHJvbCBtYXkgYmUgY2hhbmdlZCB3aXRob3V0CisgICAgICA8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS1jaGFuZ2Utbm90aWZpY2F0aW9uIj48Y2l0ZXRpdGxlPgorICAgICAgbm90aWZpY2F0aW9uPC9jaXRldGl0bGU+PC9saW5rPi4gIEFwcGxpY2F0aW9ucyBzaG91bGQgcG9sbCBzdWNoCisgICAgICBhIGNvbnRyb2wgY29uc3RhbnRseS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBjb250cm9sIGlzIGluYWN0aXZlLCBzZXQKKyAgICAgIDxjb25zdGFudD5JTkFDVElWRTwvY29uc3RhbnQ+IGZsYWcsIHRvby4KKyAgICAgIFRoZXJlIGFyZSA8Y29uc3RhbnQ+TE9DSzwvY29uc3RhbnQ+IGFuZAorICAgICAgPGNvbnN0YW50Pk9XTkVSPC9jb25zdGFudD4gZmxhZ3MgZm9yIGNoYW5naW5nIHRoZSB3cml0ZQorICAgICAgcGVybWlzc2lvbnMuCisgICAgICA8L3BhcmE+CisKKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzIj4KKyAgICAgIDx0aXRsZT5DYWxsYmFja3M8L3RpdGxlPgorCisgICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWluZm8iPgorICAgICAgICA8dGl0bGU+aW5mbyBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgdG8gZ2V0CisgICAgICAgIHRoZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvZiB0aGlzIGNvbnRyb2wuIFRoaXMgbXVzdCBzdG9yZSB0aGUKKyAgICAgICAgdmFsdWVzIG9mIHRoZSBnaXZlbiA8dHlwZT5zbmRfY3RsX2VsZW1faW5mb190PC90eXBlPgorICAgICAgICBvYmplY3QuIEZvciBleGFtcGxlLCBmb3IgYSBib29sZWFuIGNvbnRyb2wgd2l0aCBhIHNpbmdsZQorICAgICAgICBlbGVtZW50IHdpbGwgYmU6IAorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5FeGFtcGxlIG9mIGluZm8gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX2luZm8oc25kX2tjb250cm9sX3QgKmtjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfY3RsX2VsZW1faW5mb190ICp1aW5mbykKKyAgeworICAgICAgICAgIHVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworICAgICAgICAgIHVpbmZvLT5jb3VudCA9IDE7CisgICAgICAgICAgdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKyAgICAgICAgICB1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9leGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlCisgICAgICAgIG9mIHRoZSBjb250cm9sLiBUaGVyZSBhcmUgPGNvbnN0YW50PkJPT0xFQU48L2NvbnN0YW50PiwKKyAgICAgICAgPGNvbnN0YW50PklOVEVHRVI8L2NvbnN0YW50PiwgPGNvbnN0YW50PkVOVU1FUkFURUQ8L2NvbnN0YW50PiwKKyAgICAgICAgPGNvbnN0YW50PkJZVEVTPC9jb25zdGFudD4sIDxjb25zdGFudD5JRUM5NTg8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PklOVEVHRVI2NDwvY29uc3RhbnQ+LiBUaGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSAKKyAgICAgICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgY29udHJvbC4gRm9yIGV4YW1wbGUsIGEgc3RlcmVvCisgICAgICAgIHZvbHVtZSB3b3VsZCBoYXZlIGNvdW50ID0gMi4gVGhlCisgICAgICAgIDxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGEgdW5pb24sIGFuZCAKKyAgICAgICAgdGhlIHZhbHVlcyBzdG9yZWQgYXJlIGRlcGVuZGluZyBvbiB0aGUgdHlwZS4gVGhlIGJvb2xlYW4gYW5kCisgICAgICAgIGludGVnZXIgYXJlIGlkZW50aWNhbC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgZW51bWVyYXRlZCB0eXBlIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tIG90aGVycy4gIFlvdSdsbAorICAgICAgICAgIG5lZWQgdG8gc2V0IHRoZSBzdHJpbmcgZm9yIHRoZSBjdXJyZW50bHkgZ2l2ZW4gaXRlbSBpbmRleC4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX2luZm8oc25kX2tjb250cm9sX3QgKmtjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfY3RsX2VsZW1faW5mb190ICp1aW5mbykKKyAgeworICAgICAgICAgIHN0YXRpYyBjaGFyICp0ZXh0c1s0XSA9IHsKKyAgICAgICAgICAgICAgICAgICJGaXJzdCIsICJTZWNvbmQiLCAiVGhpcmQiLCAiRm91cnRoIgorICAgICAgICAgIH07CisgICAgICAgICAgdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisgICAgICAgICAgdWluZm8tPmNvdW50ID0gMTsKKyAgICAgICAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDQ7CisgICAgICAgICAgaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAzKQorICAgICAgICAgICAgICAgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDM7CisgICAgICAgICAgc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisgICAgICAgICAgICAgICAgIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jYWxsYmFja3MtZ2V0Ij4KKyAgICAgICAgPHRpdGxlPmdldCBjYWxsYmFjazwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyB1c2VkIHRvIHJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCisgICAgICAgIGNvbnRyb2wgYW5kIHRvIHJldHVybiB0byB0aGUgdXNlci1zcGFjZS4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBGb3IgZXhhbXBsZSwKKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBnZXQgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX2dldChzbmRfa2NvbnRyb2xfdCAqa2NvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqdWNvbnRyb2wpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKyAgICAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGdldF9zb21lX3ZhbHVlKGNoaXApOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9leGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSGVyZSwgdGhlIGNoaXAgaW5zdGFuY2UgaXMgcmV0cmlldmVkIHZpYQorICAgICAgICA8ZnVuY3Rpb24+c25kX2tjb250cm9sX2NoaXAoKTwvZnVuY3Rpb24+IG1hY3JvLiAgVGhpcyBtYWNybworICAgICAgICBjb252ZXJ0cyBmcm9tIGtjb250cm9sLSZndDtwcml2YXRlX2RhdGEgdG8gdGhlIHR5cGUgZGVmaW5lZCBieQorICAgICAgICA8dHlwZT5jaGlwX3Q8L3R5cGU+LiBUaGUKKyAgICAgICAga2NvbnRyb2wtJmd0O3ByaXZhdGVfZGF0YSBmaWVsZCBpcyAKKyAgICAgICAgZ2l2ZW4gYXMgdGhlIGFyZ3VtZW50IG9mIDxmdW5jdGlvbj5zbmRfY3RsX25ldygpPC9mdW5jdGlvbj4KKyAgICAgICAgKHNlZSB0aGUgbGF0ZXIgc3Vic2VjdGlvbgorICAgICAgICA8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+PGNpdGV0aXRsZT5Db25zdHJ1Y3RvcjwvY2l0ZXRpdGxlPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJVGhlIDxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGRlcGVuZGluZyBvbgorICAgICAgICB0aGUgdHlwZSBvZiBjb250cm9sIGFzIHdlbGwgYXMgb24gaW5mbyBjYWxsYmFjay4gIEZvciBleGFtcGxlLAorCXRoZSBzYiBkcml2ZXIgdXNlcyB0aGlzIGZpZWxkIHRvIHN0b3JlIHRoZSByZWdpc3RlciBvZmZzZXQsCisgICAgICAgIHRoZSBiaXQtc2hpZnQgYW5kIHRoZSBiaXQtbWFzay4gIFRoZQorICAgICAgICA8c3RydWN0ZmllbGQ+cHJpdmF0ZV92YWx1ZTwvc3RydWN0ZmllbGQ+IGlzIHNldCBsaWtlCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAucHJpdmF0ZV92YWx1ZSA9IHJlZyB8IChzaGlmdCA8PCAxNikgfCAobWFzayA8PCAyNCkKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwlhbmQgaXMgcmV0cmlldmVkIGluIGNhbGxiYWNrcyBsaWtlCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9zYm1peGVyX2dldF9zaW5nbGUoc25kX2tjb250cm9sX3QgKmtjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKnVjb250cm9sKQorICB7CisgICAgICAgICAgaW50IHJlZyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKyAgICAgICAgICBpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKKyAgICAgICAgICBpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweGZmOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKworCTxwYXJhPgorCUluIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjaywgeW91IGhhdmUgdG8gZmlsbCBhbGwgdGhlIGVsZW1lbnRzIGlmIHRoZQorICAgICAgICBjb250cm9sIGhhcyBtb3JlIHRoYW4gb25lIGVsZW1lbnRzLAorICAgICAgICBpLmUuIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+ICZndDsgMS4KKwlJbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2UgZmlsbGVkIG9ubHkgb25lIGVsZW1lbnQKKyAgICAgICAgKDxzdHJ1Y3RmaWVsZD52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdPC9zdHJ1Y3RmaWVsZD4pIHNpbmNlIGl0J3MKKyAgICAgICAgYXNzdW1lZCBhcyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiA9IDEuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1wdXQiPgorICAgICAgICA8dGl0bGU+cHV0IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gd3JpdGUgYSB2YWx1ZSBmcm9tIHRoZSB1c2VyLXNwYWNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIGV4YW1wbGUsCisKKyAgICAgICAgICA8ZXhhbXBsZT4KKwkgICAgPHRpdGxlPkV4YW1wbGUgb2YgcHV0IGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9wdXQoc25kX2tjb250cm9sX3QgKmtjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKnVjb250cm9sKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisgICAgICAgICAgaW50IGNoYW5nZWQgPSAwOworICAgICAgICAgIGlmIChjaGlwLT5jdXJyZW50X3ZhbHVlICE9CisgICAgICAgICAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworICAgICAgICAgICAgICAgICAgY2hhbmdlX2N1cnJlbnRfdmFsdWUoY2hpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKyAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKworICAgICAgICAgIEFzIHNlZW4gYWJvdmUsIHlvdSBoYXZlIHRvIHJldHVybiAxIGlmIHRoZSB2YWx1ZSBpcworICAgICAgICBjaGFuZ2VkLiBJZiB0aGUgdmFsdWUgaXMgbm90IGNoYW5nZWQsIHJldHVybiAwIGluc3RlYWQuIAorCUlmIGFueSBmYXRhbCBlcnJvciBoYXBwZW5zLCByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGFzCisgICAgICAgIHVzdWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJTGlrZSA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2ssCisJd2hlbiB0aGUgY29udHJvbCBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50cywKKwlhbGwgZWxlbWVodHMgbXVzdCBiZSBldmFsdWF0ZWQgaW4gdGhpcyBjYWxsYmFjaywgdG9vLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jYWxsYmFja3MtYWxsIj4KKyAgICAgICAgPHRpdGxlPkNhbGxiYWNrcyBhcmUgbm90IGF0b21pYzwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFsbCB0aGVzZSB0aHJlZSBjYWxsYmFja3MgYXJlIGJhc2ljYWxseSBub3QgYXRvbWljLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBldmVyeXRoaW5nIGlzIHJlYWR5LCBmaW5hbGx5IHdlIGNhbiBjcmVhdGUgYSBuZXcKKyAgICAgIGNvbnRyb2wuIEZvciBjcmVhdGluZyBhIGNvbnRyb2wsIHRoZXJlIGFyZSB0d28gZnVuY3Rpb25zIHRvIGJlCisgICAgICBjYWxsZWQsIDxmdW5jdGlvbj5zbmRfY3RsX25ldzEoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnNuZF9jdGxfYWRkKCk8L2Z1bmN0aW9uPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgc2ltcGxlc3Qgd2F5LCB5b3UgY2FuIGRvIGxpa2UgdGhpczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmbXlfY29udHJvbCwgY2hpcCkpKSA8IDApCisgICAgICAgICAgcmV0dXJuIGVycjsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIDxwYXJhbWV0ZXI+bXlfY29udHJvbDwvcGFyYW1ldGVyPiBpcyB0aGUKKyAgICAgIDx0eXBlPnNuZF9rY29udHJvbF9uZXdfdDwvdHlwZT4gb2JqZWN0IGRlZmluZWQgYWJvdmUsIGFuZCBjaGlwCisgICAgICBpcyB0aGUgb2JqZWN0IHBvaW50ZXIgdG8gYmUgcGFzc2VkIHRvCisgICAgICBrY29udHJvbC0mZ3Q7cHJpdmF0ZV9kYXRhIAorICAgICAgd2hpY2ggY2FuIGJlIHJlZmVycmVkIGluIGNhbGxiYWNrcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiBhbGxvY2F0ZXMgYSBuZXcKKyAgICAgIDx0eXBlPnNuZF9rY29udHJvbF90PC90eXBlPiBpbnN0YW5jZSAodGhhdCdzIHdoeSB0aGUgZGVmaW5pdGlvbgorICAgICAgb2YgPHBhcmFtZXRlcj5teV9jb250cm9sPC9wYXJhbWV0ZXI+IGNhbiBiZSB3aXRoCisgICAgICA8cGFyYW1ldGVyPl9fZGV2aW5pdGRhdGE8L3BhcmFtZXRlcj4gCisgICAgICBwcmVmaXgpLCBhbmQgPGZ1bmN0aW9uPnNuZF9jdGxfYWRkPC9mdW5jdGlvbj4gYXNzaWducyB0aGUgZ2l2ZW4KKyAgICAgIGNvbnRyb2wgY29tcG9uZW50IHRvIHRoZSBjYXJkLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2hhbmdlLW5vdGlmaWNhdGlvbiI+CisgICAgICA8dGl0bGU+Q2hhbmdlIE5vdGlmaWNhdGlvbjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IG5lZWQgdG8gY2hhbmdlIGFuZCB1cGRhdGUgYSBjb250cm9sIGluIHRoZSBpbnRlcnJ1cHQKKyAgICAgIHJvdXRpbmUsIHlvdSBjYW4gY2FsbCA8ZnVuY3Rpb24+c25kX2N0bF9ub3RpZnkoKTwvZnVuY3Rpb24+LiBGb3IKKyAgICAgIGV4YW1wbGUsIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9jdGxfbm90aWZ5KGNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLCBpZF9wb2ludGVyKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGNhcmQgcG9pbnRlciwgdGhlIGV2ZW50LW1hc2ssIGFuZCB0aGUKKyAgICAgIGNvbnRyb2wgaWQgcG9pbnRlciBmb3IgdGhlIG5vdGlmaWNhdGlvbi4gVGhlIGV2ZW50LW1hc2sKKyAgICAgIHNwZWNpZmllcyB0aGUgdHlwZXMgb2Ygbm90aWZpY2F0aW9uLCBmb3IgZXhhbXBsZSwgaW4gdGhlIGFib3ZlCisgICAgICBleGFtcGxlLCB0aGUgY2hhbmdlIG9mIGNvbnRyb2wgdmFsdWVzIGlzIG5vdGlmaWVkLgorICAgICAgVGhlIGlkIHBvaW50ZXIgaXMgdGhlIHBvaW50ZXIgb2YgPHR5cGU+c25kX2N0bF9lbGVtX2lkX3Q8L3R5cGU+CisgICAgICB0byBiZSBub3RpZmllZC4KKyAgICAgIFlvdSBjYW4gZmluZCBzb21lIGV4YW1wbGVzIGluIDxmaWxlbmFtZT5lczE5MzguYzwvZmlsZW5hbWU+IG9yCisgICAgICA8ZmlsZW5hbWU+ZXMxOTY4LmM8L2ZpbGVuYW1lPiBmb3IgaGFyZHdhcmUgdm9sdW1lIGludGVycnVwdHMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIEFQSSBmb3IgQUM5NyBDb2RlYyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9ImFwaS1hYzk3Ij4KKyAgICA8dGl0bGU+QVBJIGZvciBBQzk3IENvZGVjPC90aXRsZT4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIEFDOTcgY29kZWMgbGF5ZXIgaXMgYSB3ZWxsLWRlZmluZWQgb25lLCBhbmQgeW91IGRvbid0CisgICAgICBoYXZlIHRvIHdyaXRlIG1hbnkgY29kZXMgdG8gY29udHJvbCBpdC4gT25seSBsb3ctbGV2ZWwgY29udHJvbAorICAgICAgcm91dGluZXMgYXJlIG5lY2Vzc2FyeS4gVGhlIEFDOTcgY29kZWMgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvYWM5N19jb2RlYy5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctZXhhbXBsZSI+CisgICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5FeGFtcGxlIG9mIEFDOTcgSW50ZXJmYWNlPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX215Y2hpcCB7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGFjOTdfdCAqYWM5NzsKKyAgICAgICAgICAuLi4uCisgIH07CisKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNuZF9teWNoaXBfYWM5N19yZWFkKGFjOTdfdCAqYWM5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZykKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICAvLyByZWFkIGEgcmVnaXN0ZXIgdmFsdWUgaGVyZSBmcm9tIHRoZSBjb2RlYworICAgICAgICAgIHJldHVybiB0aGVfcmVnaXN0ZXJfdmFsdWU7CisgIH0KKworICBzdGF0aWMgdm9pZCBzbmRfbXljaGlwX2FjOTdfd3JpdGUoYWM5N190ICphYzk3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICAvLyB3cml0ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXIgdmFsdWUgdG8gdGhlIGNvZGVjCisgIH0KKworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfYWM5NyhteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIGFjOTdfYnVzX3QgKmJ1czsKKyAgICAgICAgICBhYzk3X3RlbXBsYXRlX3QgYWM5NzsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIHN0YXRpYyBhYzk3X2J1c19vcHNfdCBvcHMgPSB7CisgICAgICAgICAgICAgICAgICAud3JpdGUgPSBzbmRfbXljaGlwX2FjOTdfd3JpdGUsCisgICAgICAgICAgICAgICAgICAucmVhZCA9IHNuZF9teWNoaXBfYWM5N19yZWFkLAorICAgICAgICAgIH07CisKKyAgICAgICAgICBpZiAoKGVyciA9IHNuZF9hYzk3X2J1cyhjaGlwLT5jYXJkLCAwLCAmb3BzLCBOVUxMLCAmYnVzKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBtZW1zZXQoJmFjOTcsIDAsIHNpemVvZihhYzk3KSk7CisgICAgICAgICAgYWM5Ny5wcml2YXRlX2RhdGEgPSBjaGlwOworICAgICAgICAgIHJldHVybiBzbmRfYWM5N19taXhlcihidXMsICZhYzk3LCAmY2hpcC0+YWM5Nyk7CisgIH0KKworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEZvciBjcmVhdGluZyBhbiBhYzk3IGluc3RhbmNlLCBmaXJzdCBjYWxsIDxmdW5jdGlvbj5zbmRfYWM5N19idXM8L2Z1bmN0aW9uPgorICAgICAgd2l0aCBhbiA8dHlwZT5hYzk3X2J1c19vcHNfdDwvdHlwZT4gcmVjb3JkIHdpdGggY2FsbGJhY2sgZnVuY3Rpb25zLgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGFjOTdfYnVzX3QgKmJ1czsKKyAgc3RhdGljIGFjOTdfYnVzX29wc190IG9wcyA9IHsKKyAgICAgICAgLndyaXRlID0gc25kX215Y2hpcF9hYzk3X3dyaXRlLAorICAgICAgICAucmVhZCA9IHNuZF9teWNoaXBfYWM5N19yZWFkLAorICB9OworCisgIHNuZF9hYzk3X2J1cyhjYXJkLCAwLCAmb3BzLCBOVUxMLCAmcGJ1cyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgVGhlIGJ1cyByZWNvcmQgaXMgc2hhcmVkIGFtb25nIGFsbCBiZWxvbmdpbmcgYWM5NyBpbnN0YW5jZXMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQW5kIHRoZW4gY2FsbCA8ZnVuY3Rpb24+c25kX2FjOTdfbWl4ZXIoKTwvZnVuY3Rpb24+IHdpdGggYW4gPHR5cGU+YWM5N190ZW1wbGF0ZV90PC90eXBlPgorICAgICAgcmVjb3JkIHRvZ2V0aGVyIHdpdGggdGhlIGJ1cyBwb2ludGVyIGNyZWF0ZWQgYWJvdmUuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgYWM5N190ZW1wbGF0ZV90IGFjOTc7CisgIGludCBlcnI7CisKKyAgbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOworICBhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisgIHNuZF9hYzk3X21peGVyKGJ1cywgJmFjOTcsICZjaGlwLT5hYzk3KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIGNoaXAtJmd0O2FjOTcgaXMgdGhlIHBvaW50ZXIgb2YgYSBuZXdseSBjcmVhdGVkCisgICAgICAgIDx0eXBlPmFjOTdfdDwvdHlwZT4gaW5zdGFuY2UuCisgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNoaXAgcG9pbnRlciBpcyBzZXQgYXMgdGhlIHByaXZhdGUgZGF0YSwgc28gdGhhdAorICAgICAgICB0aGUgcmVhZC93cml0ZSBjYWxsYmFjayBmdW5jdGlvbnMgY2FuIHJlZmVyIHRvIHRoaXMgY2hpcCBpbnN0YW5jZS4KKyAgICAgICAgVGhpcyBpbnN0YW5jZSBpcyBub3QgbmVjZXNzYXJpbHkgc3RvcmVkIGluIHRoZSBjaGlwCisJcmVjb3JkLiAgV2hlbiB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIHJlZ2lzdGVyIHZhbHVlcyBmcm9tIHRoZQorICAgICAgICBkcml2ZXIsIG9yIG5lZWQgdGhlIHN1c3BlbmQvcmVzdW1lIG9mIGFjOTcgY29kZWNzLCBrZWVwIHRoaXMKKyAgICAgICAgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctY2FsbGJhY2tzIj4KKyAgICAgIDx0aXRsZT5DYWxsYmFja3M8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBzdGFuZGFyZCBjYWxsYmFja3MgYXJlIDxzdHJ1Y3RmaWVsZD5yZWFkPC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+d3JpdGU8L3N0cnVjdGZpZWxkPi4gT2J2aW91c2x5IHRoZXkgCisgICAgICBjb3JyZXNwb25kIHRvIHRoZSBmdW5jdGlvbnMgZm9yIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIHRvIHRoZQorICAgICAgaGFyZHdhcmUgbG93LWxldmVsIGNvZGVzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cmVhZDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIHJldHVybnMgdGhlCisgICAgICAgIHJlZ2lzdGVyIHZhbHVlIHNwZWNpZmllZCBpbiB0aGUgYXJndW1lbnQuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfbXljaGlwX2FjOTdfcmVhZChhYzk3X3QgKmFjOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgcmV0dXJuIHRoZV9yZWdpc3Rlcl92YWx1ZTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgSGVyZSwgdGhlIGNoaXAgY2FuIGJlIGNhc3QgZnJvbSBhYzk3LSZndDtwcml2YXRlX2RhdGEuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBNZWFud2hpbGUsIHRoZSA8c3RydWN0ZmllbGQ+d3JpdGU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcworICAgICAgICB1c2VkIHRvIHNldCB0aGUgcmVnaXN0ZXIgdmFsdWUuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIHNuZF9teWNoaXBfYWM5N193cml0ZShhYzk3X3QgKmFjOTcsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBub24tYXRvbWljIGxpa2UgdGhlIGNhbGxiYWNrcyBvZiBjb250cm9sIEFQSS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBhbHNvIG90aGVyIGNhbGxiYWNrczoKKyAgICAgIDxzdHJ1Y3RmaWVsZD5yZXNldDwvc3RydWN0ZmllbGQ+LAorICAgICAgPHN0cnVjdGZpZWxkPndhaXQ8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5pbml0PC9zdHJ1Y3RmaWVsZD4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5yZXNldDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVzZXQKKyAgICAgIHRoZSBjb2RlYy4gSWYgdGhlIGNoaXAgcmVxdWlyZXMgYSBzcGVjaWFsIHdheSBvZiByZXNldCwgeW91IGNhbgorICAgICAgZGVmaW5lIHRoaXMgY2FsbGJhY2suIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD53YWl0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgdXNlZCBmb3IgYQorICAgICAgY2VydGFpbiB3YWl0IGF0IHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgY29kZWMuIElmIHRoZQorICAgICAgY2hpcCByZXF1aXJlcyB0aGUgZXh0cmEgd2FpdC10aW1lLCBkZWZpbmUgdGhpcyBjYWxsYmFjay4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmluaXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIGZvcgorICAgICAgYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBvZiB0aGUgY29kZWMuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LXVwZGF0aW5nLXJlZ2lzdGVycyI+CisgICAgICA8dGl0bGU+VXBkYXRpbmcgUmVnaXN0ZXJzIGluIFRoZSBEcml2ZXI8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0byB0aGUgY29kZWMgZnJvbSB0aGUgZHJpdmVyLCB5b3UgY2FuCisgICAgICBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3dyaXRlKCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N19yZWFkKCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGUoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZV9iaXRzKCk8L2Z1bmN0aW9uPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBCb3RoIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4gYW5kCisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBhcmUgdXNlZCB0bworICAgICAgICBzZXQgYSB2YWx1ZSB0byB0aGUgZ2l2ZW4gcmVnaXN0ZXIKKyAgICAgICAgKDxjb25zdGFudD5BQzk3X1hYWDwvY29uc3RhbnQ+KS4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzCisgICAgICAgIHRoYXQgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZSgpPC9mdW5jdGlvbj4gZG9lc24ndCB3cml0ZSBhCisgICAgICAgIHZhbHVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBoYXMgYmVlbiBhbHJlYWR5IHNldCwgd2hpbGUKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3dyaXRlKCk8L2Z1bmN0aW9uPiBhbHdheXMgcmV3cml0ZXMgdGhlCisgICAgICAgIHZhbHVlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X01BU1RFUiwgMHg4MDgwKTsKKyAgc25kX2FjOTdfdXBkYXRlKGFjOTcsIEFDOTdfTUFTVEVSLCAweDgwODApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfcmVhZCgpPC9mdW5jdGlvbj4gaXMgdXNlZCB0byByZWFkIHRoZSB2YWx1ZQorICAgICAgICBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIuIEZvciBleGFtcGxlLCAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB2YWx1ZSA9IHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19NQVNURVIpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlX2JpdHMoKTwvZnVuY3Rpb24+IGlzIHVzZWQgdG8gdXBkYXRlCisgICAgICAgIHNvbWUgYml0cyBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIuICAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfYWM5N191cGRhdGVfYml0cyhhYzk3LCByZWcsIG1hc2ssIHZhbHVlKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWxzbywgdGhlcmUgaXMgYSBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIHNhbXBsZSByYXRlIChvZiBhCisgICAgICAgIGNlcnRhaW4gcmVnaXN0ZXIgc3VjaCBhcworICAgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fRlJPTlRfREFDX1JBVEU8L2NvbnN0YW50Pikgd2hlbiBWUkEgb3IKKyAgICAgICAgRFJBIGlzIHN1cHBvcnRlZCBieSB0aGUgY29kZWM6CisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N19zZXRfcmF0ZSgpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hYzk3X3NldF9yYXRlKGFjOTcsIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFLCA0NDEwMCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgZm9yIHNldHRpbmcgdGhlIHJhdGU6CisgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fTUlDX0FEQ19SQVRFPC9jb25zdGFudD4sCisgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fRlJPTlRfREFDX1JBVEU8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5BQzk3X1BDTV9MUl9BRENfUkFURTwvY29uc3RhbnQ+LAorICAgICAgPGNvbnN0YW50PkFDOTdfU1BESUY8L2NvbnN0YW50Pi4gV2hlbiB0aGUKKyAgICAgIDxjb25zdGFudD5BQzk3X1NQRElGPC9jb25zdGFudD4gaXMgc3BlY2lmaWVkLCB0aGUgcmVnaXN0ZXIgaXMKKyAgICAgIG5vdCByZWFsbHkgY2hhbmdlZCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgSUVDOTU4IHN0YXR1cyBiaXRzIHdpbGwKKyAgICAgIGJlIHVwZGF0ZWQuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1jbG9jay1hZGp1c3RtZW50Ij4KKyAgICAgIDx0aXRsZT5DbG9jayBBZGp1c3RtZW50PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBPbiBzb21lIGNoaXAsIHRoZSBjbG9jayBvZiB0aGUgY29kZWMgaXNuJ3QgNDgwMDAgYnV0IHVzaW5nIGEKKyAgICAgIFBDSSBjbG9jayAodG8gc2F2ZSBhIHF1YXJ0eiEpLiBJbiB0aGlzIGNhc2UsIGNoYW5nZSB0aGUgZmllbGQKKyAgICAgIGJ1cy0mZ3Q7Y2xvY2sgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgIHZhbHVlLiBGb3IgZXhhbXBsZSwgaW50ZWw4eDAgCisgICAgICBhbmQgZXMxOTY4IGRyaXZlcnMgaGF2ZSB0aGUgYXV0by1tZWFzdXJlbWVudCBmdW5jdGlvbiBvZiB0aGUKKyAgICAgIGNsb2NrLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctcHJvYy1maWxlcyI+CisgICAgICA8dGl0bGU+UHJvYyBGaWxlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIEFMU0EgQUM5NyBpbnRlcmZhY2Ugd2lsbCBjcmVhdGUgYSBwcm9jIGZpbGUgc3VjaCBhcworICAgICAgPGZpbGVuYW1lPi9wcm9jL2Fzb3VuZC9jYXJkMC9jb2RlYzk3IzAvYWM5NyMwLTA8L2ZpbGVuYW1lPiBhbmQKKyAgICAgIDxmaWxlbmFtZT5hYzk3IzAtMCtyZWdzPC9maWxlbmFtZT4uIFlvdSBjYW4gcmVmZXIgdG8gdGhlc2UgZmlsZXMgdG8KKyAgICAgIHNlZSB0aGUgY3VycmVudCBzdGF0dXMgYW5kIHJlZ2lzdGVycyBvZiB0aGUgY29kZWMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1tdWx0aXBsZS1jb2RlY3MiPgorICAgICAgPHRpdGxlPk11bHRpcGxlIENvZGVjczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBjb2RlY3Mgb24gdGhlIHNhbWUgY2FyZCwgeW91IG5lZWQgdG8KKyAgICAgIGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X25ldygpPC9mdW5jdGlvbj4gbXVsdGlwbGUgdGltZXMgd2l0aAorICAgICAgYWM5Ny5udW09MSBvciBncmVhdGVyLiBUaGUgPHN0cnVjdGZpZWxkPm51bTwvc3RydWN0ZmllbGQ+IGZpZWxkCisgICAgICBzcGVjaWZpZXMgdGhlIGNvZGVjIAorICAgICAgbnVtYmVyLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBoYXZlIHNldCB1cCBtdWx0aXBsZSBjb2RlY3MsIHlvdSBuZWVkIHRvIGVpdGhlciB3cml0ZQorICAgICAgZGlmZmVyZW50IGNhbGxiYWNrcyBmb3IgZWFjaCBjb2RlYyBvciBjaGVjaworICAgICAgYWM5Ny0mZ3Q7bnVtIGluIHRoZSAKKyAgICAgIGNhbGxiYWNrIHJvdXRpbmVzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNSURJIChNUFU0MDEtVUFSVCkgSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0ibWlkaS1pbnRlcmZhY2UiPgorICAgIDx0aXRsZT5NSURJIChNUFU0MDEtVUFSVCkgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJtaWRpLWludGVyZmFjZS1nZW5lcmFsIj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBNYW55IHNvdW5kY2FyZHMgaGF2ZSBidWlsdC1pbiBNSURJIChNUFU0MDEtVUFSVCkKKyAgICAgIGludGVyZmFjZXMuIFdoZW4gdGhlIHNvdW5kY2FyZCBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgTVBVNDAxLVVBUlQKKyAgICAgIGludGVyZmFjZSwgbW9zdCBsaWtlbHkgeW91IGNhbiB1c2UgdGhlIEFMU0EgTVBVNDAxLVVBUlQgQVBJLiBUaGUKKyAgICAgIE1QVTQwMS1VQVJUIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL21wdTQwMS5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNvbWUgc291bmRjaGlwcyBoYXZlIHNpbWlsYXIgYnV0IGEgbGl0dGxlIGJpdCBkaWZmZXJlbnQKKyAgICAgIGltcGxlbWVudGF0aW9uIG9mIG1wdTQwMSBzdHVmZi4gRm9yIGV4YW1wbGUsIGVtdTEwazEgaGFzIGl0cyBvd24KKyAgICAgIG1wdTQwMSByb3V0aW5lcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Im1pZGktaW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGNyZWF0aW5nIGEgcmF3bWlkaSBvYmplY3QsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3Jhd21pZGlfdCAqcm1pZGk7CisgIHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwgcG9ydCwgaW50ZWdyYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICBpcnEsIGlycV9mbGFncywgJnJtaWRpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZQorICAgICAgaW5kZXggb2YgdGhpcyBjb21wb25lbnQuIFlvdSBjYW4gY3JlYXRlIHVwIHRvIDggcmF3bWlkaQorICAgICAgZGV2aWNlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIHR5cGUgb2YgdGhlIGhhcmR3YXJlLAorICAgICAgPGNvbnN0YW50Pk1QVTQwMV9IV19YWFg8L2NvbnN0YW50Pi4gSWYgaXQncyBub3QgYSBzcGVjaWFsIG9uZSwKKyAgICAgIHlvdSBjYW4gdXNlIDxjb25zdGFudD5NUFU0MDFfSFdfTVBVNDAxPC9jb25zdGFudD4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDR0aCBhcmd1bWVudCBpcyB0aGUgaS9vIHBvcnQgYWRkcmVzcy4gTWFueQorICAgICAgYmFja3dhcmQtY29tcGF0aWJsZSBNUFU0MDEgaGFzIGFuIGkvbyBwb3J0IHN1Y2ggYXMgMHgzMzAuIE9yLCBpdAorICAgICAgbWlnaHQgYmUgYSBwYXJ0IG9mIGl0cyBvd24gUENJIGkvbyByZWdpb24uIEl0IGRlcGVuZHMgb24gdGhlCisgICAgICBjaGlwIGRlc2lnbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHRoZSBpL28gcG9ydCBhZGRyZXNzIGFib3ZlIGlzIGEgcGFydCBvZiB0aGUgUENJIGkvbworICAgICAgcmVnaW9uLCB0aGUgTVBVNDAxIGkvbyBwb3J0IG1pZ2h0IGhhdmUgYmVlbiBhbHJlYWR5IGFsbG9jYXRlZAorICAgICAgKHJlc2VydmVkKSBieSB0aGUgZHJpdmVyIGl0c2VsZi4gSW4gc3VjaCBhIGNhc2UsIHBhc3Mgbm9uLXplcm8KKyAgICAgIHRvIHRoZSA1dGggYXJndW1lbnQKKyAgICAgICg8cGFyYW1ldGVyPmludGVncmF0ZWQ8L3BhcmFtZXRlcj4pLiBPdGhlcndpc2UsIHBhc3MgMCB0byBpdCwKKyAgICAgIGFuZCAKKyAgICAgIHRoZSBtcHU0MDEtdWFydCBsYXllciB3aWxsIGFsbG9jYXRlIHRoZSBpL28gcG9ydHMgYnkgaXRzZWxmLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFVzdWFsbHksIHRoZSBwb3J0IGFkZHJlc3MgY29ycmVzcG9uZHMgdG8gdGhlIGNvbW1hbmQgcG9ydCBhbmQKKyAgICAgICAgcG9ydCArIDEgY29ycmVzcG9uZHMgdG8gdGhlIGRhdGEgcG9ydC4gSWYgbm90LCB5b3UgbWF5IGNoYW5nZQorICAgICAgICB0aGUgPHN0cnVjdGZpZWxkPmNwb3J0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YKKyAgICAgICAgPHR5cGU+bXB1NDAxX3Q8L3R5cGU+IG1hbnVhbGx5IAorICAgICAgICBhZnRlcndhcmQuIEhvd2V2ZXIsIDx0eXBlPm1wdTQwMV90PC90eXBlPiBwb2ludGVyIGlzIG5vdAorICAgICAgICByZXR1cm5lZCBleHBsaWNpdGx5IGJ5CisgICAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPi4gWW91IG5lZWQgdG8gY2FzdAorICAgICAgICBybWlkaS0mZ3Q7cHJpdmF0ZV9kYXRhIHRvCisgICAgICAgIDx0eXBlPm1wdTQwMV90PC90eXBlPiBleHBsaWNpdGx5LCAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBtcHU0MDFfdCAqbXB1OworICBtcHUgPSBybWlkaS0+cHJpdmF0ZV9kYXRhOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgYW5kIHJlc2V0IHRoZSBjcG9ydCBhcyB5b3UgbGlrZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBtcHUtPmNwb3J0ID0gbXlfb3duX2NvbnRyb2xfcG9ydDsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDZ0aCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGlycSBudW1iZXIgZm9yIFVBUlQuIElmIHRoZSBpcnEKKyAgICAgIGlzIGFscmVhZHkgYWxsb2NhdGVkLCBwYXNzIDAgdG8gdGhlIDd0aCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+aXJxX2ZsYWdzPC9wYXJhbWV0ZXI+KS4gT3RoZXJ3aXNlLCBwYXNzIHRoZSBmbGFncworICAgICAgZm9yIGlycSBhbGxvY2F0aW9uIAorICAgICAgKDxjb25zdGFudD5TQV9YWFg8L2NvbnN0YW50PiBiaXRzKSB0byBpdCwgYW5kIHRoZSBpcnEgd2lsbCBiZQorICAgICAgcmVzZXJ2ZWQgYnkgdGhlIG1wdTQwMS11YXJ0IGxheWVyLiBJZiB0aGUgY2FyZCBkb2Vzbid0IGdlbmVyYXRlcworICAgICAgVUFSVCBpbnRlcnJ1cHRzLCBwYXNzIC0xIGFzIHRoZSBpcnEgbnVtYmVyLiBUaGVuIGEgdGltZXIKKyAgICAgIGludGVycnVwdCB3aWxsIGJlIGludm9rZWQgZm9yIHBvbGxpbmcuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaWRpLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlciI+CisgICAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXI8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIGludGVycnVwdCBpcyBhbGxvY2F0ZWQgaW4KKyAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPiwgdGhlIHByaXZhdGUKKyAgICAgIGludGVycnVwdCBoYW5kbGVyIGlzIHVzZWQsIGhlbmNlIHlvdSBkb24ndCBoYXZlIHRvIGRvIG5vdGhpbmcKKyAgICAgIGVsc2UgdGhhbiBjcmVhdGluZyB0aGUgbXB1NDAxIHN0dWZmLiBPdGhlcndpc2UsIHlvdSBoYXZlIHRvIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPiBleHBsaWNpdGx5IHdoZW4KKyAgICAgIGEgVUFSVCBpbnRlcnJ1cHQgaXMgaW52b2tlZCBhbmQgY2hlY2tlZCBpbiB5b3VyIG93biBpbnRlcnJ1cHQKKyAgICAgIGhhbmRsZXIuICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG5lZWQgdG8gcGFzcyB0aGUgcHJpdmF0ZV9kYXRhIG9mIHRoZQorICAgICAgICByZXR1cm5lZCByYXdtaWRpIG9iamVjdCBmcm9tCisgICAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPiBhcyB0aGUgc2Vjb25kCisgICAgICAgIGFyZ3VtZW50IG9mIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX21wdTQwMV91YXJ0X2ludGVycnVwdChpcnEsIHJtaWRpLT5wcml2YXRlX2RhdGEsIHJlZ3MpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUmF3TUlESSBJbnRlcmZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJyYXdtaWRpLWludGVyZmFjZSI+CisgICAgPHRpdGxlPlJhd01JREkgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vdmVydmlldyI+CisgICAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSByYXcgTUlESSBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgaGFyZHdhcmUgTUlESSBwb3J0cyB0aGF0IGNhbgorICAgICAgYmUgYWNjZXNzZWQgYXMgYSBieXRlIHN0cmVhbS4gIEl0IGlzIG5vdCB1c2VkIGZvciBzeW50aGVzaXplcgorICAgICAgY2hpcHMgdGhhdCBkbyBub3QgZGlyZWN0bHkgdW5kZXJzdGFuZCBNSURJLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEFMU0EgaGFuZGxlcyBmaWxlIGFuZCBidWZmZXIgbWFuYWdlbWVudC4gIEFsbCB5b3UgaGF2ZSB0byBkbyBpcworICAgICAgdG8gd3JpdGUgc29tZSBjb2RlIHRvIG1vdmUgZGF0YSBiZXR3ZWVuIHRoZSBidWZmZXIgYW5kIHRoZQorICAgICAgaGFyZHdhcmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIHJhd21pZGkgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvcmF3bWlkaS5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRvIGNyZWF0ZSBhIHJhd21pZGkgZGV2aWNlLCBjYWxsIHRoZQorICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX25ldzwvZnVuY3Rpb24+IGZ1bmN0aW9uOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcmF3bWlkaV90ICpybWlkaTsKKyAgZXJyID0gc25kX3Jhd21pZGlfbmV3KGNoaXAtPmNhcmQsICJNeU1JREkiLCAwLCBvdXRzLCBpbnMsICZybWlkaSk7CisgIGlmIChlcnIgPCAwKQorICAgICAgICAgIHJldHVybiBlcnI7CisgIHJtaWRpLT5wcml2YXRlX2RhdGEgPSBjaGlwOworICBzdHJjcHkocm1pZGktPm5hbWUsICJNeSBNSURJIik7CisgIHJtaWRpLT5pbmZvX2ZsYWdzID0gU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCB8CisgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUIHwKKyAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKKyAgICAgIHRoZSBJRCBzdHJpbmcuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBpbmRleCBvZiB0aGlzIGNvbXBvbmVudC4gIFlvdSBjYW4KKyAgICAgIGNyZWF0ZSB1cCB0byA4IHJhd21pZGkgZGV2aWNlcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgZm91cnRoIGFuZCBmaWZ0aCBhcmd1bWVudHMgYXJlIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGFuZAorICAgICAgaW5wdXQgc3Vic3RyZWFtcywgcmVzcGVjdGl2ZWx5LCBvZiB0aGlzIGRldmljZS4gIChBIHN1YnN0cmVhbSBpcworICAgICAgdGhlIGVxdWl2YWxlbnQgb2YgYSBNSURJIHBvcnQuKQorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFNldCB0aGUgPHN0cnVjdGZpZWxkPmluZm9fZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byBzcGVjaWZ5CisgICAgICB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UuCisgICAgICBTZXQgPGNvbnN0YW50PlNORFJWX1JBV01JRElfSU5GT19PVVRQVVQ8L2NvbnN0YW50PiBpZiB0aGVyZSBpcworICAgICAgYXQgbGVhc3Qgb25lIG91dHB1dCBwb3J0LAorICAgICAgPGNvbnN0YW50PlNORFJWX1JBV01JRElfSU5GT19JTlBVVDwvY29uc3RhbnQ+IGlmIHRoZXJlIGlzIGF0CisgICAgICBsZWFzdCBvbmUgaW5wdXQgcG9ydCwKKyAgICAgIGFuZCA8Y29uc3RhbnQ+U05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDwvY29uc3RhbnQ+IGlmIHRoZSBkZXZpY2UKKyAgICAgIGNhbiBoYW5kbGUgb3V0cHV0IGFuZCBpbnB1dCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEFmdGVyIHRoZSByYXdtaWRpIGRldmljZSBpcyBjcmVhdGVkLCB5b3UgbmVlZCB0byBzZXQgdGhlCisgICAgICBvcGVyYXRvcnMgKGNhbGxiYWNrcykgZm9yIGVhY2ggc3Vic3RyZWFtLiAgVGhlcmUgYXJlIGhlbHBlcgorICAgICAgZnVuY3Rpb25zIHRvIHNldCB0aGUgb3BlcmF0b3JzIGZvciBhbGwgc3Vic3RyZWFtIG9mIGEgZGV2aWNlOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQsICZzbmRfbXltaWRpX291dHB1dF9vcHMpOworICBzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwgJnNuZF9teW1pZGlfaW5wdXRfb3BzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBvcGVyYXRvcnMgYXJlIHVzdWFsbHkgZGVmaW5lZCBsaWtlIHRoaXM6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzbmRfcmF3bWlkaV9vcHNfdCBzbmRfbXltaWRpX291dHB1dF9vcHMgPSB7CisgICAgICAgICAgLm9wZW4gPSAgICBzbmRfbXltaWRpX291dHB1dF9vcGVuLAorICAgICAgICAgIC5jbG9zZSA9ICAgc25kX215bWlkaV9vdXRwdXRfY2xvc2UsCisgICAgICAgICAgLnRyaWdnZXIgPSBzbmRfbXltaWRpX291dHB1dF90cmlnZ2VyLAorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICBUaGVzZSBjYWxsYmFja3MgYXJlIGV4cGxhaW5lZCBpbiB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9InJhd21pZGktaW50ZXJmYWNlLWNhbGxiYWNrcyI+PGNpdGV0aXRsZT5DYWxsYmFja3M8L2NpdGV0aXRsZT48L2xpbms+CisgICAgICBzZWN0aW9uLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc3Vic3RyZWFtLCB5b3Ugc2hvdWxkIGdpdmUgZWFjaCBvbmUgYQorICAgICAgdW5pcXVlIG5hbWU6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisgIHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07CisgIGxpc3RfZm9yX2VhY2gobGlzdCwgJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtcykgeworICAgICAgICAgIHN1YnN0cmVhbSA9IGxpc3RfZW50cnkobGlzdCwgc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QsIGxpc3QpOworICAgICAgICAgIHNwcmludGYoc3Vic3RyZWFtLT5uYW1lLCAiTXkgTUlESSBQb3J0ICVkIiwgc3Vic3RyZWFtLT5udW1iZXIgKyAxKTsKKyAgfQorICAvKiBzYW1lIGZvciBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCAqLworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLWNhbGxiYWNrcyI+CisgICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICBJbiBhbGwgY2FsbGJhY2tzLCB0aGUgcHJpdmF0ZSBkYXRhIHRoYXQgeW91J3ZlIHNldCBmb3IgdGhlCisgICAgICByYXdtaWRpIGRldmljZSBjYW4gYmUgYWNjZXNzZWQgYXMKKyAgICAgIHN1YnN0cmVhbS0mZ3Q7cm1pZGktJmd0O3ByaXZhdGVfZGF0YS4KKyAgICAgIDwhLS0gPGNvZGU+IGlzbid0IGF2YWlsYWJsZSBiZWZvcmUgRG9jQm9vayA0LjMgLS0+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwb3J0LCB5b3VyIGNhbGxiYWNrcyBjYW4gZGV0ZXJtaW5lIHRoZQorICAgICAgcG9ydCBpbmRleCBmcm9tIHRoZSBzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCBkYXRhIHBhc3NlZCB0byBlYWNoCisgICAgICBjYWxsYmFjazoKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKnN1YnN0cmVhbTsKKyAgaW50IGluZGV4ID0gc3Vic3RyZWFtLT5udW1iZXI7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLW9wZW4iPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5vcGVuPC9mdW5jdGlvbj4gY2FsbGJhY2s8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9vcGVuKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBzdWJzdHJlYW0gaXMgb3BlbmVkLgorICAgICAgICBZb3UgY2FuIGluaXRpYWxpemUgdGhlIGhhcmR3YXJlIGhlcmUsIGJ1dCB5b3Ugc2hvdWxkIG5vdCB5ZXQKKyAgICAgICAgc3RhcnQgdHJhbnNtaXR0aW5nL3JlY2VpdmluZyBkYXRhLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC1jbG9zZSI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj4gY2FsbGJhY2s8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9jbG9zZShzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBHdWVzcyB3aGF0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+b3BlbjwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+Y2xvc2U8L2Z1bmN0aW9uPgorICAgICAgICBjYWxsYmFja3Mgb2YgYSByYXdtaWRpIGRldmljZSBhcmUgc2VyaWFsaXplZCB3aXRoIGEgbXV0ZXgsCisgICAgICAgIGFuZCBjYW4gc2xlZXAuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLXRyaWdnZXItb3V0Ij4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIGZvciBvdXRwdXQKKyAgICAgIHN1YnN0cmVhbXM8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIHNuZF94eHhfb3V0cHV0X3RyaWdnZXIoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgaW50IHVwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aXRoIGEgbm9uemVybyA8cGFyYW1ldGVyPnVwPC9wYXJhbWV0ZXI+CisgICAgICAgIHBhcmFtZXRlciB3aGVuIHRoZXJlIGlzIHNvbWUgZGF0YSBpbiB0aGUgc3Vic3RyZWFtIGJ1ZmZlciB0aGF0CisgICAgICAgIG11c3QgYmUgdHJhbnNtaXR0ZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVG8gcmVhZCBkYXRhIGZyb20gdGhlIGJ1ZmZlciwgY2FsbAorICAgICAgICA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXRfcGVlazwvZnVuY3Rpb24+LiAgSXQgd2lsbAorICAgICAgICByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiByZWFkOyB0aGlzIHdpbGwgYmUKKyAgICAgICAgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWVzdGVkIHdoZW4gdGhlcmUgaXMgbm8gbW9yZQorICAgICAgICBkYXRhIGluIHRoZSBidWZmZXIuCisgICAgICAgIEFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWxseSwgY2FsbAorICAgICAgICA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXRfYWNrPC9mdW5jdGlvbj4gdG8gcmVtb3ZlIHRoZQorICAgICAgICBkYXRhIGZyb20gdGhlIHN1YnN0cmVhbSBidWZmZXI6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB1bnNpZ25lZCBjaGFyIGRhdGE7CisgIHdoaWxlIChzbmRfcmF3bWlkaV90cmFuc21pdF9wZWVrKHN1YnN0cmVhbSwgJmRhdGEsIDEpID09IDEpIHsKKyAgICAgICAgICBpZiAobXljaGlwX3RyeV90b190cmFuc21pdChkYXRhKSkKKyAgICAgICAgICAgICAgICAgIHNuZF9yYXdtaWRpX3RyYW5zbWl0X2FjayhzdWJzdHJlYW0sIDEpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBoYXJkd2FyZSBGSUZPIGZ1bGwgKi8KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBrbm93IGJlZm9yZWhhbmQgdGhhdCB0aGUgaGFyZHdhcmUgd2lsbCBhY2NlcHQgZGF0YSwgeW91CisgICAgICAgIGNhbiB1c2UgdGhlIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV90cmFuc21pdDwvZnVuY3Rpb24+IGZ1bmN0aW9uCisgICAgICAgIHdoaWNoIHJlYWRzIHNvbWUgZGF0YSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBidWZmZXIgYXQgb25jZToKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHdoaWxlIChteWNoaXBfdHJhbnNtaXRfcG9zc2libGUoKSkgeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YTsKKyAgICAgICAgICBpZiAoc25kX3Jhd21pZGlfdHJhbnNtaXQoc3Vic3RyZWFtLCAmZGF0YSwgMSkgIT0gMSkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBubyBtb3JlIGRhdGEgKi8KKyAgICAgICAgICBteWNoaXBfdHJhbnNtaXQoZGF0YSk7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Uga25vdyBiZWZvcmVoYW5kIGhvdyBtYW55IGJ5dGVzIHlvdSBjYW4gYWNjZXB0LCB5b3UgY2FuCisgICAgICAgIHVzZSBhIGJ1ZmZlciBzaXplIGdyZWF0ZXIgdGhhbiBvbmUgd2l0aCB0aGUKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0KjwvZnVuY3Rpb24+IGZ1bmN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBtdXN0IG5vdCBzbGVlcC4gIElmCisgICAgICAgIHRoZSBoYXJkd2FyZSBGSUZPIGlzIGZ1bGwgYmVmb3JlIHRoZSBzdWJzdHJlYW0gYnVmZmVyIGhhcyBiZWVuCisgICAgICAgIGVtcHRpZWQsIHlvdSBoYXZlIHRvIGNvbnRpbnVlIHRyYW5zbWl0dGluZyBkYXRhIGxhdGVyLCBlaXRoZXIKKyAgICAgICAgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIG9yIHdpdGggYSB0aW1lciBpZiB0aGUgaGFyZHdhcmUKKyAgICAgICAgZG9lc24ndCBoYXZlIGEgTUlESSB0cmFuc21pdCBpbnRlcnJ1cHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggYQorICAgICAgICB6ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIHdoZW4gdGhlIHRyYW5zbWlzc2lvbgorICAgICAgICBvZiBkYXRhIHNob3VsZCBiZSBhYm9ydGVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC10cmlnZ2VyLWluIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIGZvciBpbnB1dAorICAgICAgc3Vic3RyZWFtczwvdGl0bGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgc25kX3h4eF9pbnB1dF90cmlnZ2VyKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIGludCB1cCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2l0aCBhIG5vbnplcm8gPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPgorICAgICAgICBwYXJhbWV0ZXIgdG8gZW5hYmxlIHJlY2VpdmluZyBkYXRhLCBvciB3aXRoIGEgemVybworICAgICAgICA8cGFyYW1ldGVyPnVwPC9wYXJhbWV0ZXI+IHBhcmFtZXRlciBkbyBkaXNhYmxlIHJlY2VpdmluZyBkYXRhLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIG11c3Qgbm90IHNsZWVwOyB0aGUKKyAgICAgICAgYWN0dWFsIHJlYWRpbmcgb2YgZGF0YSBmcm9tIHRoZSBkZXZpY2UgaXMgdXN1YWxseSBkb25lIGluIGFuCisgICAgICAgIGludGVycnVwdCBoYW5kbGVyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gZGF0YSByZWNlcHRpb24gaXMgZW5hYmxlZCwgeW91ciBpbnRlcnJ1cHQgaGFuZGxlciBzaG91bGQKKyAgICAgICAgY2FsbCA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfcmVjZWl2ZTwvZnVuY3Rpb24+IGZvciBhbGwgcmVjZWl2ZWQKKyAgICAgICAgZGF0YToKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHZvaWQgc25kX215Y2hpcF9taWRpX2ludGVycnVwdCguLi4pCisgIHsKKyAgICAgICAgICB3aGlsZSAobXljaGlwX21pZGlfYXZhaWxhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YTsKKyAgICAgICAgICAgICAgICAgIGRhdGEgPSBteWNoaXBfbWlkaV9yZWFkKCk7CisgICAgICAgICAgICAgICAgICBzbmRfcmF3bWlkaV9yZWNlaXZlKHN1YnN0cmVhbSwgJmRhdGEsIDEpOworICAgICAgICAgIH0KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC1kcmFpbiI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPmRyYWluPC9mdW5jdGlvbj4gY2FsbGJhY2s8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIHNuZF94eHhfZHJhaW4oc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBpcyBvbmx5IHVzZWQgd2l0aCBvdXRwdXQgc3Vic3RyZWFtcy4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHdhaXQKKyAgICAgICAgdW50aWwgYWxsIGRhdGEgcmVhZCBmcm9tIHRoZSBzdWJzdHJlYW0gYnVmZmVyIGhhcyBiZWVuIHRyYW5zbWl0dGVkLgorICAgICAgICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZGV2aWNlIGNhbiBiZSBjbG9zZWQgYW5kIHRoZSBkcml2ZXIgdW5sb2FkZWQKKyAgICAgICAgd2l0aG91dCBsb3NpbmcgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLiAgSWYgeW91IGRvIG5vdCBzZXQKKyAgICAgICAgPHN0cnVjdGZpZWxkPmRyYWluPC9zdHJ1Y3RmaWVsZD4gaW4gdGhlIHNuZF9yYXdtaWRpX29wc190CisgICAgICAgIHN0cnVjdHVyZSwgQUxTQSB3aWxsIHNpbXBseSB3YWl0IGZvciA1MCZuYnNwO21pbGxpc2Vjb25kcworICAgICAgICBpbnN0ZWFkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gTWlzY2VsbGFuZW91cyBEZXZpY2VzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0ibWlzYy1kZXZpY2VzIj4KKyAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBEZXZpY2VzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtb3BsMyI+CisgICAgICA8dGl0bGU+Rk0gT1BMMzwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIEZNIE9QTDMgaXMgc3RpbGwgdXNlZCBvbiBtYW55IGNoaXBzIChtYWlubHkgZm9yIGJhY2t3YXJkCisgICAgICBjb21wYXRpYmlsaXR5KS4gQUxTQSBoYXMgYSBuaWNlIE9QTDMgRk0gY29udHJvbCBsYXllciwgdG9vLiBUaGUKKyAgICAgIE9QTDMgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvb3BsMy5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZNIHJlZ2lzdGVycyBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgdGhyb3VnaCBkaXJlY3QtRk0gQVBJLAorICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZF9mbS5oJmd0OzwvZmlsZW5hbWU+LiBJbgorICAgICAgQUxTQSBuYXRpdmUgbW9kZSwgRk0gcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoCisgICAgICBIYXJkd2FyZS1EZXBlbmRhbnQgRGV2aWNlIGRpcmVjdC1GTSBleHRlbnNpb24gQVBJLCB3aGVyZWFzIGluCisgICAgICBPU1MgY29tcGF0aWJsZSBtb2RlLCBGTSByZWdpc3RlcnMgY2FuIGJlIGFjY2Vzc2VkIHdpdGggT1NTCisgICAgICBkaXJlY3QtRk0gY29tcGF0aWJsZSBBUEkgb24gPGZpbGVuYW1lPi9kZXYvZG1mbVg8L2ZpbGVuYW1lPiBkZXZpY2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGNyZWF0aW5nIHRoZSBPUEwzIGNvbXBvbmVudCwgeW91IGhhdmUgdHdvIGZ1bmN0aW9ucyB0bworICAgICAgICBjYWxsLiBUaGUgZmlyc3Qgb25lIGlzIGEgY29uc3RydWN0b3IgZm9yIDx0eXBlPm9wbDNfdDwvdHlwZT4KKyAgICAgICAgaW5zdGFuY2UuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG9wbDNfdCAqb3BsMzsKKyAgc25kX29wbDNfY3JlYXRlKGNhcmQsIGxwb3J0LCBycG9ydCwgT1BMM19IV19PUEwzX1hYWCwKKyAgICAgICAgICAgICAgICAgIGludGVncmF0ZWQsICZvcGwzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBzZWNvbmQgb25lIGlzIHRoZQorICAgICAgbGVmdCBwb3J0IGFkZHJlc3MsIGFuZCB0aGUgdGhpcmQgaXMgdGhlIHJpZ2h0IHBvcnQgYWRkcmVzcy4gSW4KKyAgICAgIG1vc3QgY2FzZXMsIHRoZSByaWdodCBwb3J0IGlzIHBsYWNlZCBhdCB0aGUgbGVmdCBwb3J0ICsgMi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZm91cnRoIGFyZ3VtZW50IGlzIHRoZSBoYXJkd2FyZSB0eXBlLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgbGVmdCBhbmQgcmlnaHQgcG9ydHMgaGF2ZSBiZWVuIGFscmVhZHkgYWxsb2NhdGVkIGJ5CisgICAgICB0aGUgY2FyZCBkcml2ZXIsIHBhc3Mgbm9uLXplcm8gdG8gdGhlIGZpZnRoIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5pbnRlZ3JhdGVkPC9wYXJhbWV0ZXI+KS4gT3RoZXJ3aXNlLCBvcGwzIG1vZHVsZSB3aWxsCisgICAgICBhbGxvY2F0ZSB0aGUgc3BlY2lmaWVkIHBvcnRzIGJ5IGl0c2VsZi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHRoZSBhY2Nlc3NpbmcgdG8gdGhlIGhhcmR3YXJlIHJlcXVpcmVzIHNwZWNpYWwgbWV0aG9kCisgICAgICAgIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIEkvTyBhY2Nlc3MsIHlvdSBjYW4gY3JlYXRlIG9wbDMgaW5zdGFuY2UKKyAgICAgICAgc2VwYXJhdGVseSB3aXRoIDxmdW5jdGlvbj5zbmRfb3BsM19uZXcoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG9wbDNfdCAqb3BsMzsKKyAgc25kX29wbDNfbmV3KGNhcmQsIE9QTDNfSFdfT1BMM19YWFgsICZvcGwzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlUaGVuIHNldCA8c3RydWN0ZmllbGQ+Y29tbWFuZDwvc3RydWN0ZmllbGQ+LAorCTxzdHJ1Y3RmaWVsZD5wcml2YXRlX2RhdGE8L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cHJpdmF0ZV9mcmVlPC9zdHJ1Y3RmaWVsZD4gZm9yIHRoZSBwcml2YXRlCisJYWNjZXNzIGZ1bmN0aW9uLCB0aGUgcHJpdmF0ZSBkYXRhIGFuZCB0aGUgZGVzdHJ1Y3Rvci4KKwlUaGUgbF9wb3J0IGFuZCByX3BvcnQgYXJlIG5vdCBuZWNlc3NhcmlseSBzZXQuICBPbmx5IHRoZQorCWNvbW1hbmQgbXVzdCBiZSBzZXQgcHJvcGVybHkuICBZb3UgY2FuIHJldHJpZXZlIHRoZSBkYXRhCisJZnJvbSBvcGwzLSZndDtwcml2YXRlX2RhdGEgZmllbGQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCUFmdGVyIGNyZWF0aW5nIHRoZSBvcGwzIGluc3RhbmNlIHZpYSA8ZnVuY3Rpb24+c25kX29wbDNfbmV3KCk8L2Z1bmN0aW9uPiwKKwljYWxsIDxmdW5jdGlvbj5zbmRfb3BsM19pbml0KCk8L2Z1bmN0aW9uPiB0byBpbml0aWFsaXplIHRoZSBjaGlwIHRvIHRoZQorCXByb3BlciBzdGF0ZS4gIE5vdGUgdGhhdCA8ZnVuY3Rpb24+c25kX29wbDNfY3JlYXRlKCk8L2Z1bmN0aW9uPiBhbHdheXMKKwljYWxscyBpdCBpbnRlcm5hbGx5LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgdGhlIG9wbDMgaW5zdGFuY2UgaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHksIHRoZW4gY3JlYXRlIGEKKyAgICAgICAgaHdkZXAgZGV2aWNlIGZvciB0aGlzIG9wbDMuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9od2RlcF90ICpvcGwzaHdkZXA7CisgIHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmb3BsM2h3ZGVwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSA8dHlwZT5vcGwzX3Q8L3R5cGU+IGluc3RhbmNlIHlvdQorICAgICAgY3JlYXRlZCwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIGluZGV4IG51bWJlciwgdXN1YWxseSAwLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXgtb2Zmc2V0IGZvciB0aGUgc2VxdWVuY2VyCisgICAgICBjbGllbnQgYXNzaWduZWQgdG8gdGhlIE9QTDMgcG9ydC4gV2hlbiB0aGVyZSBpcyBhbiBNUFU0MDEtVUFSVCwKKyAgICAgIGdpdmUgMSBmb3IgaGVyZSAoVUFSVCBhbHdheXMgdGFrZXMgMCkuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtaGFyZHdhcmUtZGVwZW5kZW50Ij4KKyAgICAgIDx0aXRsZT5IYXJkd2FyZS1EZXBlbmRlbnQgRGV2aWNlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgU29tZSBjaGlwcyBuZWVkIHRoZSBhY2Nlc3MgZnJvbSB0aGUgdXNlci1zcGFjZSBmb3Igc3BlY2lhbAorICAgICAgY29udHJvbHMgb3IgZm9yIGxvYWRpbmcgdGhlIG1pY3JvIGNvZGUuIEluIHN1Y2ggYSBjYXNlLCB5b3UgY2FuCisgICAgICBjcmVhdGUgYSBod2RlcCAoaGFyZHdhcmUtZGVwZW5kZW50KSBkZXZpY2UuIFRoZSBod2RlcCBBUEkgaXMKKyAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9od2RlcC5oJmd0OzwvZmlsZW5hbWU+LiBZb3UgY2FuCisgICAgICBmaW5kIGV4YW1wbGVzIGluIG9wbDMgZHJpdmVyIG9yCisgICAgICA8ZmlsZW5hbWU+aXNhL3NiL3NiMTZfY3NwLmM8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBDcmVhdGlvbiBvZiB0aGUgPHR5cGU+aHdkZXA8L3R5cGU+IGluc3RhbmNlIGlzIGRvbmUgdmlhCisgICAgICAgIDxmdW5jdGlvbj5zbmRfaHdkZXBfbmV3KCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2h3ZGVwX3QgKmh3OworICBzbmRfaHdkZXBfbmV3KGNhcmQsICJNeSBIV0RFUCIsIDAsICZodyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4IG51bWJlci4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gdGhlbiBwYXNzIGFueSBwb2ludGVyIHZhbHVlIHRvIHRoZQorICAgICAgICA8cGFyYW1ldGVyPnByaXZhdGVfZGF0YTwvcGFyYW1ldGVyPi4KKyAgICAgICAgSWYgeW91IGFzc2lnbiBhIHByaXZhdGUgZGF0YSwgeW91IHNob3VsZCBkZWZpbmUgdGhlCisgICAgICAgIGRlc3RydWN0b3IsIHRvby4gVGhlIGRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IHRvCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX2ZyZWU8L3N0cnVjdGZpZWxkPiBmaWVsZC4gIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG15ZGF0YV90ICpwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKyAgaHctPnByaXZhdGVfZGF0YSA9IHA7CisgIGh3LT5wcml2YXRlX2ZyZWUgPSBteWRhdGFfZnJlZTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGVzdHJ1Y3RvciB3b3VsZCBiZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteWRhdGFfZnJlZShzbmRfaHdkZXBfdCAqaHcpCisgIHsKKyAgICAgICAgICBteWRhdGFfdCAqcCA9IGh3LT5wcml2YXRlX2RhdGE7CisgICAgICAgICAga2ZyZWUocCk7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGFyYml0cmFyeSBmaWxlIG9wZXJhdGlvbnMgY2FuIGJlIGRlZmluZWQgZm9yIHRoaXMKKyAgICAgICAgaW5zdGFuY2UuIFRoZSBmaWxlIG9wZXJhdG9ycyBhcmUgZGVmaW5lZCBpbgorICAgICAgICA8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPiB0YWJsZS4gRm9yIGV4YW1wbGUsIGFzc3VtZSB0aGF0CisgICAgICAgIHRoaXMgY2hpcCBuZWVkcyBhbiBpb2N0bC4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaHctPm9wcy5vcGVuID0gbXlkYXRhX29wZW47CisgIGh3LT5vcHMuaW9jdGwgPSBteWRhdGFfaW9jdGw7CisgIGh3LT5vcHMucmVsZWFzZSA9IG15ZGF0YV9yZWxlYXNlOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgQW5kIGltcGxlbWVudCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFzIHlvdSBsaWtlLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtSUVDOTU4Ij4KKyAgICAgIDx0aXRsZT5JRUM5NTggKFMvUERJRik8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFVzdWFsbHkgdGhlIGNvbnRyb2xzIGZvciBJRUM5NTggZGV2aWNlcyBhcmUgaW1wbGVtZW50ZWQgdmlhCisgICAgICBjb250cm9sIGludGVyZmFjZS4gVGhlcmUgaXMgYSBtYWNybyB0byBjb21wb3NlIGEgbmFtZSBzdHJpbmcgZm9yCisgICAgICBJRUM5NTggY29udHJvbHMsIDxmdW5jdGlvbj5TTkRSVl9DVExfTkFNRV9JRUM5NTgoKTwvZnVuY3Rpb24+CisgICAgICBkZWZpbmVkIGluIDxmaWxlbmFtZT4mbHQ7aW5jbHVkZS9hc291bmQuaCZndDs8L2ZpbGVuYW1lPi4gIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIHNvbWUgc3RhbmRhcmQgY29udHJvbHMgZm9yIElFQzk1OCBzdGF0dXMgYml0cy4gVGhlc2UKKyAgICAgIGNvbnRyb2xzIHVzZSB0aGUgdHlwZSA8dHlwZT5TTkRSVl9DVExfRUxFTV9UWVBFX0lFQzk1ODwvdHlwZT4sCisgICAgICBhbmQgdGhlIHNpemUgb2YgZWxlbWVudCBpcyBmaXhlZCBhcyA0IGJ5dGVzIGFycmF5CisgICAgICAodmFsdWUuaWVjOTU4LnN0YXR1c1t4XSkuIEZvciA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+CisgICAgICBjYWxsYmFjaywgeW91IGRvbid0IHNwZWNpZnkgCisgICAgICB0aGUgdmFsdWUgZmllbGQgZm9yIHRoaXMgdHlwZSAodGhlIGNvdW50IGZpZWxkIG11c3QgYmUgc2V0LAorICAgICAgdGhvdWdoKS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8cXVvdGU+SUVDOTU4IFBsYXliYWNrIENvbiBNYXNrPC9xdW90ZT4gaXMgdXNlZCB0byByZXR1cm4gdGhlCisgICAgICBiaXQtbWFzayBmb3IgdGhlIElFQzk1OCBzdGF0dXMgYml0cyBvZiBjb25zdW1lciBtb2RlLiBTaW1pbGFybHksCisgICAgICA8cXVvdGU+SUVDOTU4IFBsYXliYWNrIFBybyBNYXNrPC9xdW90ZT4gcmV0dXJucyB0aGUgYml0bWFzayBmb3IKKyAgICAgIHByb2Zlc3Npb25hbCBtb2RlLiBUaGV5IGFyZSByZWFkLW9ubHkgY29udHJvbHMsIGFuZCBhcmUgZGVmaW5lZAorICAgICAgYXMgTUlYRVIgY29udHJvbHMgKGlmYWNlID0KKyAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUjwvY29uc3RhbnQ+KS4gIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTWVhbndoaWxlLCA8cXVvdGU+SUVDOTU4IFBsYXliYWNrIERlZmF1bHQ8L3F1b3RlPiBjb250cm9sIGlzCisgICAgICBkZWZpbmVkIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSBjdXJyZW50IGRlZmF1bHQgSUVDOTU4CisgICAgICBiaXRzLiBOb3RlIHRoYXQgdGhpcyBvbmUgaXMgdXN1YWxseSBkZWZpbmVkIGFzIGEgUENNIGNvbnRyb2wKKyAgICAgIChpZmFjZSA9IDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9JRkFDRV9QQ008L2NvbnN0YW50PiksCisgICAgICBhbHRob3VnaCBpbiBzb21lIHBsYWNlcyBpdCdzIGRlZmluZWQgYXMgYSBNSVhFUiBjb250cm9sLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uLCB5b3UgY2FuIGRlZmluZSB0aGUgY29udHJvbCBzd2l0Y2hlcyB0bworICAgICAgZW5hYmxlL2Rpc2FibGUgb3IgdG8gc2V0IHRoZSByYXcgYml0IG1vZGUuIFRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgd2lsbCBkZXBlbmQgb24gdGhlIGNoaXAsIGJ1dCB0aGUgY29udHJvbCBzaG91bGQgYmUgbmFtZWQgYXMKKyAgICAgIDxxdW90ZT5JRUM5NTggeHh4PC9xdW90ZT4sIHByZWZlcmFibHkgdXNpbmcKKyAgICAgIDxmdW5jdGlvbj5TTkRSVl9DVExfTkFNRV9JRUM5NTgoKTwvZnVuY3Rpb24+IG1hY3JvLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBzZXZlcmFsIGNhc2VzLCBmb3IgZXhhbXBsZSwKKyAgICAgIDxmaWxlbmFtZT5wY2kvZW11MTBrMTwvZmlsZW5hbWU+LAorICAgICAgPGZpbGVuYW1lPnBjaS9pY2UxNzEyPC9maWxlbmFtZT4sIG9yCisgICAgICA8ZmlsZW5hbWU+cGNpL2NtaXBjaS5jPC9maWxlbmFtZT4uICAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBCdWZmZXIgYW5kIE1lbW9yeSBNYW5hZ2VtZW50ICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYnVmZmVyLWFuZC1tZW1vcnkiPgorICAgIDx0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeSBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJidWZmZXItYW5kLW1lbW9yeS1idWZmZXItdHlwZXMiPgorICAgICAgPHRpdGxlPkJ1ZmZlciBUeXBlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgQUxTQSBwcm92aWRlcyBzZXZlcmFsIGRpZmZlcmVudCBidWZmZXIgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAgICAgIGRlcGVuZGluZyBvbiB0aGUgYnVzIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLiBBbGwgdGhlc2UgaGF2ZSBhCisgICAgICBjb25zaXN0ZW50IEFQSS4gVGhlIGFsbG9jYXRpb24gb2YgcGh5c2ljYWxseS1jb250aWd1b3VzIHBhZ2VzIGlzCisgICAgICBkb25lIHZpYSAKKyAgICAgIDxmdW5jdGlvbj5zbmRfbWFsbG9jX3h4eF9wYWdlcygpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHdoZXJlIHh4eAorICAgICAgaXMgdGhlIGJ1cyB0eXBlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIHBhZ2VzIHdpdGggZmFsbGJhY2sgaXMKKyAgICAgIDxmdW5jdGlvbj5zbmRfbWFsbG9jX3h4eF9wYWdlc19mYWxsYmFjaygpPC9mdW5jdGlvbj4uIFRoaXMKKyAgICAgIGZ1bmN0aW9uIHRyaWVzIHRvIGFsbG9jYXRlIHRoZSBzcGVjaWZpZWQgcGFnZXMgYnV0IGlmIHRoZSBwYWdlcworICAgICAgYXJlIG5vdCBhdmFpbGFibGUsIGl0IHRyaWVzIHRvIHJlZHVjZSB0aGUgcGFnZSBzaXplcyB1bnRpbCB0aGUKKyAgICAgIGVub3VnaCBzcGFjZSBpcyBmb3VuZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBGb3IgcmVsZWFzaW5nIHRoZSBzcGFjZSwgY2FsbAorICAgICAgPGZ1bmN0aW9uPnNuZF9mcmVlX3h4eF9wYWdlcygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFVzdWFsbHksIEFMU0EgZHJpdmVycyB0cnkgdG8gYWxsb2NhdGUgYW5kIHJlc2VydmUKKyAgICAgICBhIGxhcmdlIGNvbnRpZ3VvdXMgcGh5c2ljYWwgc3BhY2UKKyAgICAgICBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGxvYWRlZCBmb3IgdGhlIGxhdGVyIHVzZS4KKyAgICAgICBUaGlzIGlzIGNhbGxlZCA8cXVvdGU+cHJlLWFsbG9jYXRpb248L3F1b3RlPi4KKyAgICAgICBBcyBhbHJlYWR5IHdyaXR0ZW4sIHlvdSBjYW4gY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGF0IHRoZQorICAgICAgIGNvbnN0cnVjdGlvbiBvZiBwY20gaW5zdGFuY2UgKGluIHRoZSBjYXNlIG9mIFBDSSBidXMpLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9kbWFfcGNpX2RhdGEocGNpKSwgc2l6ZSwgbWF4KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPiBpcyB0aGUgYnl0ZSBzaXplIHRvIGJlCisgICAgICBwcmUtYWxsb2NhdGVkIGFuZCB0aGUgPHBhcmFtZXRlcj5tYXg8L3BhcmFtZXRlcj4gaXMgdGhlIG1heGltYWwKKyAgICAgIHNpemUgdG8gYmUgY2hhbmdlZCB2aWEgPGZpbGVuYW1lPnByZWFsbG9jPC9maWxlbmFtZT4gcHJvYyBmaWxlLgorICAgICAgVGhlIGFsbG9jYXRvciB3aWxsIHRyeSB0byBnZXQgYXMgbGFyZ2UgYXJlYSBhcyBwb3NzaWJsZQorICAgICAgd2l0aGluIHRoZSBnaXZlbiBzaXplLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgc2Vjb25kIGFyZ3VtZW50ICh0eXBlKSBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IChkZXZpY2UgcG9pbnRlcikKKyAgICAgIGFyZSBkZXBlbmRlbnQgb24gdGhlIGJ1cy4KKyAgICAgIEluIHRoZSBjYXNlIG9mIElTQSBidXMsIHBhc3MgPGZ1bmN0aW9uPnNuZF9kbWFfaXNhX2RhdGEoKTwvZnVuY3Rpb24+CisgICAgICBhcyB0aGUgdGhpcmQgYXJndW1lbnQgd2l0aCA8Y29uc3RhbnQ+U05EUlZfRE1BX1RZUEVfREVWPC9jb25zdGFudD4gdHlwZS4KKyAgICAgIEZvciB0aGUgY29udGludW91cyBidWZmZXIgdW5yZWxhdGVkIHRvIHRoZSBidXMgY2FuIGJlIHByZS1hbGxvY2F0ZWQKKyAgICAgIHdpdGggPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVM8L2NvbnN0YW50PiB0eXBlIGFuZCB0aGUKKyAgICAgIDxmdW5jdGlvbj5zbmRfZG1hX2NvbnRpbnVvdXNfZGF0YShHRlBfS0VSTkVMKTwvZnVuY3Rpb24+IGRldmljZSBwb2ludGVyLAorICAgICAgd2hlcmVoIDxjb25zdGFudD5HRlBfS0VSTkVMPC9jb25zdGFudD4gaXMgdGhlIGtlcm5lbCBhbGxvY2F0aW9uIGZsYWcgdG8KKyAgICAgIHVzZS4gIEZvciB0aGUgU0JVUywgPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX1NCVVM8L2NvbnN0YW50PiBhbmQKKyAgICAgIDxmdW5jdGlvbj5zbmRfZG1hX3NidXNfZGF0YShzYnVzX2Rldik8L2Z1bmN0aW9uPiBhcmUgdXNlZCBpbnN0ZWFkLgorICAgICAgRm9yIHRoZSBQQ0kgc2NhdHRlci1nYXRoZXIgYnVmZmVycywgdXNlCisgICAgICA8Y29uc3RhbnQ+U05EUlZfRE1BX1RZUEVfREVWX1NHPC9jb25zdGFudD4gd2l0aAorICAgICAgPGZ1bmN0aW9uPnNuZF9kbWFfcGNpX2RhdGEocGNpKTwvZnVuY3Rpb24+CisgICAgICAoc2VlIHRoZSBzZWN0aW9uCisgICAgICAgICAgPGxpbmsgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnktbm9uLWNvbnRpZ3VvdXMiPjxjaXRldGl0bGU+Tm9uLUNvbnRpZ3VvdXMgQnVmZmVycworICAgICAgICAgIDwvY2l0ZXRpdGxlPjwvbGluaz4pLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgT25jZSB3aGVuIHRoZSBidWZmZXIgaXMgcHJlLWFsbG9jYXRlZCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgIGFsbG9jYXRvciBpbiB0aGUgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHNpemUpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHByZS1hbGxvY2F0ZSB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktZXh0ZXJuYWwtaGFyZHdhcmUiPgorICAgICAgPHRpdGxlPkV4dGVybmFsIEhhcmR3YXJlIEJ1ZmZlcnM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvbWUgY2hpcHMgaGF2ZSB0aGVpciBvd24gaGFyZHdhcmUgYnVmZmVycyBhbmQgdGhlIERNQQorICAgICAgdHJhbnNmZXIgZnJvbSB0aGUgaG9zdCBtZW1vcnkgaXMgbm90IGF2YWlsYWJsZS4gSW4gc3VjaCBhIGNhc2UsCisgICAgICB5b3UgbmVlZCB0byBlaXRoZXIgMSkgY29weS9zZXQgdGhlIGF1ZGlvIGRhdGEgZGlyZWN0bHkgdG8gdGhlCisgICAgICBleHRlcm5hbCBoYXJkd2FyZSBidWZmZXIsIG9yIDIpIG1ha2UgYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBhbmQKKyAgICAgIGNvcHkvc2V0IHRoZSBkYXRhIGZyb20gaXQgdG8gdGhlIGV4dGVybmFsIGhhcmR3YXJlIGJ1ZmZlciBpbgorICAgICAgaW50ZXJydXB0cyAob3IgaW4gdGFza2xldHMsIHByZWZlcmFibHkpLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGNhc2Ugd29ya3MgZmluZSBpZiB0aGUgZXh0ZXJuYWwgaGFyZHdhcmUgYnVmZmVyIGlzIGVub3VnaAorICAgICAgbGFyZ2UuICBUaGlzIG1ldGhvZCBkb2Vzbid0IG5lZWQgYW55IGV4dHJhIGJ1ZmZlcnMgYW5kIHRodXMgaXMKKyAgICAgIG1vcmUgZWZmZWN0aXZlLiBZb3UgbmVlZCB0byBkZWZpbmUgdGhlCisgICAgICA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MgZm9yIAorICAgICAgdGhlIGRhdGEgdHJhbnNmZXIuIEhvd2V2ZXIsIHRoZXJlIGlzIGEgZHJhd2JhY2s6IGl0IGNhbm5vdAorICAgICAgYmUgbW1hcHBlZC4gVGhlIGV4YW1wbGVzIGFyZSBHVVMncyBHRjEgUENNIG9yIGVtdTgwMDAncworICAgICAgd2F2ZXRhYmxlIFBDTS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgc2Vjb25kIGNhc2UgYWxsb3dzIHRoZSBtbWFwIG9mIHRoZSBidWZmZXIsIGFsdGhvdWdoIHlvdSBoYXZlCisgICAgICB0byBoYW5kbGUgYW4gaW50ZXJydXB0IG9yIGEgdGFza2xldCBmb3IgdHJhbnNmZXJyaW5nIHRoZSBkYXRhCisgICAgICBmcm9tIHRoZSBpbnRlcm1lZGlhdGUgYnVmZmVyIHRvIHRoZSBoYXJkd2FyZSBidWZmZXIuIFlvdSBjYW4gZmluZCBhbgorICAgICAgZXhhbXBsZSBpbiB2eHBvY2tldCBkcml2ZXIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBjYXNlIGlzIHRoYXQgdGhlIGNoaXAgdXNlcyBhIFBDSSBtZW1vcnktbWFwCisgICAgICByZWdpb24gZm9yIHRoZSBidWZmZXIgaW5zdGVhZCBvZiB0aGUgaG9zdCBtZW1vcnkuIEluIHRoaXMgY2FzZSwKKyAgICAgIG1tYXAgaXMgYXZhaWxhYmxlIG9ubHkgb24gY2VydGFpbiBhcmNoaXRlY3R1cmVzIGxpa2UgaW50ZWwuIEluCisgICAgICBub24tbW1hcCBtb2RlLCB0aGUgZGF0YSBjYW5ub3QgYmUgdHJhbnNmZXJyZWQgYXMgdGhlIG5vcm1hbAorICAgICAgd2F5LiBUaHVzIHlvdSBuZWVkIHRvIGRlZmluZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MgYXMgd2VsbCAKKyAgICAgIGFzIGluIHRoZSBjYXNlcyBhYm92ZS4gVGhlIGV4YW1wbGVzIGFyZSBmb3VuZCBpbgorICAgICAgPGZpbGVuYW1lPnJtZTMyLmM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnJtZTk2LmM8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgICAgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MgZGVwZW5kcyB1cG9uIAorICAgICAgICB3aGV0aGVyIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBpbnRlcmxlYXZlZCBvciBub24taW50ZXJsZWF2ZWQKKyAgICAgICAgc2FtcGxlcy4gVGhlIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMKKyAgICAgICAgZGVmaW5lZCBsaWtlIGJlbG93LCBhIGJpdCAKKyAgICAgICAgZGlmZmVyZW50bHkgZGVwZW5kaW5nIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBpcyBwbGF5YmFjayBvcgorICAgICAgICBjYXB0dXJlOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHBsYXliYWNrX2NvcHkoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKKyAgICAgICAgICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgdm9pZCAqc3JjLCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCk7CisgIHN0YXRpYyBpbnQgY2FwdHVyZV9jb3B5KHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHZvaWQgKmRzdCwgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBpbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgc2Vjb25kIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5jaGFubmVsPC9wYXJhbWV0ZXI+KSBpcyBub3QgdXNlZC4gVGhlIHRoaXJkIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIHBvaW50cyB0aGUgCisgICAgICBjdXJyZW50IHBvc2l0aW9uIG9mZnNldCBpbiBmcmFtZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1lYW5pbmcgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBpcyBkaWZmZXJlbnQgYmV0d2VlbgorICAgICAgcGxheWJhY2sgYW5kIGNhcHR1cmUuIEZvciBwbGF5YmFjaywgaXQgaG9sZHMgdGhlIHNvdXJjZSBkYXRhCisgICAgICBwb2ludGVyLCBhbmQgZm9yIGNhcHR1cmUsIGl0J3MgdGhlIGRlc3RpbmF0aW9uIGRhdGEgcG9pbnRlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBiZSBjb3BpZWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGF0IHlvdSBoYXZlIHRvIGRvIGluIHRoaXMgY2FsbGJhY2sgaXMgYWdhaW4gZGlmZmVyZW50CisgICAgICAgIGJldHdlZW4gcGxheWJhY2sgYW5kIGNhcHR1cmUgZGlyZWN0aW9ucy4gSW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgcGxheWJhY2ssIHlvdSBkbzogY29weSB0aGUgZ2l2ZW4gYW1vdW50IG9mIGRhdGEKKyAgICAgICAgKDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4pIGF0IHRoZSBzcGVjaWZpZWQgcG9pbnRlcgorICAgICAgICAoPHBhcmFtZXRlcj5zcmM8L3BhcmFtZXRlcj4pIHRvIHRoZSBzcGVjaWZpZWQgb2Zmc2V0CisgICAgICAgICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgb24gdGhlIGhhcmR3YXJlIGJ1ZmZlci4gV2hlbgorICAgICAgICBjb2RlZCBsaWtlIG1lbWNweS1saWtlIHdheSwgdGhlIGNvcHkgd291bGQgYmUgbGlrZTogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXlfbWVtY3B5KG15X2J1ZmZlciArIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBwb3MpLCBzcmMsCisgICAgICAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHRoZSBjYXB0dXJlIGRpcmVjdGlvbiwgeW91IGRvOiBjb3B5IHRoZSBnaXZlbiBhbW91bnQgb2YKKyAgICAgICAgZGF0YSAoPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPikgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXQKKyAgICAgICAgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBvbiB0aGUgaGFyZHdhcmUgYnVmZmVyIHRvIHRoZQorICAgICAgICBzcGVjaWZpZWQgcG9pbnRlciAoPHBhcmFtZXRlcj5kc3Q8L3BhcmFtZXRlcj4pLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteV9tZW1jcHkoZHN0LCBteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwKKyAgICAgICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgTm90ZSB0aGF0IGJvdGggb2YgdGhlIHBvc2l0aW9uIGFuZCB0aGUgZGF0YSBhbW91bnQgYXJlIGdpdmVuCisgICAgICBpbiBmcmFtZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIGNhc2Ugb2Ygbm9uLWludGVybGVhdmVkIHNhbXBsZXMsIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgd2lsbCBiZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBuZWVkIHRvIGNoZWNrIHRoZSBjaGFubmVsIGFyZ3VtZW50LCBhbmQgaWYgaXQncyAtMSwgY29weQorICAgICAgdGhlIHdob2xlIGNoYW5uZWxzLiBPdGhlcndpc2UsIHlvdSBoYXZlIHRvIGNvcHkgb25seSB0aGUKKyAgICAgIHNwZWNpZmllZCBjaGFubmVsLiBQbGVhc2UgY2hlY2sKKyAgICAgIDxmaWxlbmFtZT5pc2EvZ3VzL2d1c19wY20uYzwvZmlsZW5hbWU+IGFzIGFuIGV4YW1wbGUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgYWxzbworICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIHNpbWlsYXIgd2F5LiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNpbGVuY2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbWVhbmluZ3Mgb2YgYXJndW1lbnRzIGFyZSBpZGVudGljYWwgd2l0aCB0aGUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gCisgICAgICBjYWxsYmFjaywgYWx0aG91Z2ggdGhlcmUgaXMgbm8gPHBhcmFtZXRlcj5zcmMvZHN0PC9wYXJhbWV0ZXI+CisgICAgICBhcmd1bWVudC4gSW4gdGhlIGNhc2Ugb2YgaW50ZXJsZWF2ZWQgc2FtcGxlcywgdGhlIGNoYW5uZWwKKyAgICAgIGFyZ3VtZW50IGhhcyBubyBtZWFuaW5nLCBhcyB3ZWxsIGFzIG9uCisgICAgICA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcm9sZSBvZiA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHRvCisgICAgICAgIHNldCB0aGUgZ2l2ZW4gYW1vdW50IAorICAgICAgICAoPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPikgb2Ygc2lsZW5jZSBkYXRhIGF0IHRoZQorICAgICAgICBzcGVjaWZpZWQgb2Zmc2V0ICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgb24gdGhlIGhhcmR3YXJlCisgICAgICAgIGJ1ZmZlci4gU3VwcG9zZSB0aGF0IHRoZSBkYXRhIGZvcm1hdCBpcyBzaWduZWQgKHRoYXQgaXMsIHRoZQorICAgICAgICBzaWxlbnQtZGF0YSBpcyAwKSwgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBhIG1lbXNldC1saWtlCisgICAgICAgIGZ1bmN0aW9uIHdvdWxkIGJlIGxpa2U6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG15X21lbWNweShteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwgMCwKKyAgICAgICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBub24taW50ZXJsZWF2ZWQgc2FtcGxlcywgYWdhaW4sIHRoZQorICAgICAgaW1wbGVtZW50YXRpb24gYmVjb21lcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLiBTZWUsIGZvciBleGFtcGxlLAorICAgICAgPGZpbGVuYW1lPmlzYS9ndXMvZ3VzX3BjbS5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJidWZmZXItYW5kLW1lbW9yeS1ub24tY29udGlndW91cyI+CisgICAgICA8dGl0bGU+Tm9uLUNvbnRpZ3VvdXMgQnVmZmVyczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91ciBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgcGFnZSB0YWJsZSBsaWtlIGVtdTEwazEgb3IgdGhlCisgICAgICBidWZmZXIgZGVzY3JpcHRvcnMgbGlrZSB2aWE4Mnh4LCB5b3UgY2FuIHVzZSB0aGUgc2NhdHRlci1nYXRoZXIKKyAgICAgIChTRykgRE1BLiBBTFNBIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgaGFuZGxpbmcgU0ctYnVmZmVycy4KKyAgICAgIFRoZSBBUEkgaXMgcHJvdmlkZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgY3JlYXRpbmcgdGhlIFNHLWJ1ZmZlciBoYW5kbGVyLCBjYWxsCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlcygpPC9mdW5jdGlvbj4gb3IKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwoKTwvZnVuY3Rpb24+CisgICAgICAgIHdpdGggPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVl9TRzwvY29uc3RhbnQ+CisJaW4gdGhlIFBDTSBjb25zdHJ1Y3RvciBsaWtlIG90aGVyIFBDSSBwcmUtYWxsb2NhdG9yLgorICAgICAgICBZb3UgbmVlZCB0byBwYXNzIHRoZSA8ZnVuY3Rpb24+c25kX2RtYV9wY2lfZGF0YShwY2kpPC9mdW5jdGlvbj4sCisgICAgICAgIHdoZXJlIHBjaSBpcyB0aGUgc3RydWN0IDxzdHJ1Y3RuYW1lPnBjaV9kZXY8L3N0cnVjdG5hbWU+IHBvaW50ZXIKKyAgICAgICAgb2YgdGhlIGNoaXAgYXMgd2VsbC4KKyAgICAgICAgVGhlIDx0eXBlPnNuZF9zZ19idWZfdDwvdHlwZT4gaW5zdGFuY2UgaXMgY3JlYXRlZCBhcworICAgICAgICBzdWJzdHJlYW0tJmd0O2RtYV9wcml2YXRlLiBZb3UgY2FuIGNhc3QKKyAgICAgICAgdGhlIHBvaW50ZXIgbGlrZTogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9zZ2J1Zl90ICpzZ2J1ZiA9IChzbmRfcGNtX3NnYnVmX3QqKXN1YnN0cmVhbS0+ZG1hX3ByaXZhdGU7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZW4gY2FsbCA8ZnVuY3Rpb24+c25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKCk8L2Z1bmN0aW9uPgorICAgICAgaW4gPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrCisgICAgICBhcyB3ZWxsIGFzIGluIHRoZSBjYXNlIG9mIG5vcm1hbCBQQ0kgYnVmZmVyLgorICAgICAgVGhlIFNHLWJ1ZmZlciBoYW5kbGVyIHdpbGwgYWxsb2NhdGUgdGhlIG5vbi1jb250aWd1b3VzIGtlcm5lbAorICAgICAgcGFnZXMgb2YgdGhlIGdpdmVuIHNpemUgYW5kIG1hcCB0aGVtIG9udG8gdGhlIHZpcnR1YWxseSBjb250aWd1b3VzCisgICAgICBtZW1vcnkuICBUaGUgdmlydHVhbCBwb2ludGVyIGlzIGFkZHJlc3NlZCBpbiBydW50aW1lLSZndDtkbWFfYXJlYS4KKyAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIChydW50aW1lLSZndDtkbWFfYWRkcikgaXMgc2V0IHRvIHplcm8sCisgICAgICBiZWNhdXNlIHRoZSBidWZmZXIgaXMgcGh5c2ljYWxseSBub24tY29udGlnb3VzLgorICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3MgdGFibGUgaXMgc2V0IHVwIGluIHNnYnVmLSZndDt0YWJsZS4KKyAgICAgIFlvdSBjYW4gZ2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF0IGEgY2VydGFpbiBvZmZzZXQgdmlhCisgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9zZ2J1Zl9nZXRfYWRkcigpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBhIFNHLWhhbmRsZXIgaXMgdXNlZCwgeW91IG5lZWQgdG8gc2V0CisgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9zZ2J1Zl9vcHNfcGFnZTwvZnVuY3Rpb24+IGFzCisgICAgICB0aGUgPHN0cnVjdGZpZWxkPnBhZ2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKyAgICAgIChTZWUgPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcGFnZS1jYWxsYmFjayI+CisgICAgICA8Y2l0ZXRpdGxlPnBhZ2UgY2FsbGJhY2sgc2VjdGlvbjwvY2l0ZXRpdGxlPjwvbGluaz4uKQorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHJlbGVhc2luZyB0aGUgZGF0YSwgY2FsbAorICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX2ZyZWVfcGFnZXMoKTwvZnVuY3Rpb24+IGluIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmh3X2ZyZWU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBhcyB1c3VhbC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktdm1hbGxvY2VkIj4KKyAgICAgIDx0aXRsZT5WbWFsbG9jJ2VkIEJ1ZmZlcnM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEl0J3MgcG9zc2libGUgdG8gdXNlIGEgYnVmZmVyIGFsbG9jYXRlZCB2aWEKKyAgICAgIDxmdW5jdGlvbj52bWFsbG9jPC9mdW5jdGlvbj4sIGZvciBleGFtcGxlLCBmb3IgYW4gaW50ZXJtZWRpYXRlCisgICAgICBidWZmZXIuIFNpbmNlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIG5vdCBjb250aWd1b3VzLCB5b3UgbmVlZAorICAgICAgdG8gc2V0IHRoZSA8c3RydWN0ZmllbGQ+cGFnZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIHRvIG9idGFpbgorICAgICAgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXQgZXZlcnkgb2Zmc2V0LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiA8c3RydWN0ZmllbGQ+cGFnZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrCisgICAgICAgIHdvdWxkIGJlIGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworICAvKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBvbiB0aGUgZ2l2ZW4gb2Zmc2V0ICovCisgIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbXljaGlwX3BhZ2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorICB7CisgICAgICAgICAgdm9pZCAqcGFnZXB0ciA9IHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQ7CisgICAgICAgICAgcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShwYWdlcHRyKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUHJvYyBJbnRlcmZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJwcm9jLWludGVyZmFjZSI+CisgICAgPHRpdGxlPlByb2MgSW50ZXJmYWNlPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEFMU0EgcHJvdmlkZXMgYW4gZWFzeSBpbnRlcmZhY2UgZm9yIHByb2Nmcy4gVGhlIHByb2MgZmlsZXMgYXJlCisgICAgICB2ZXJ5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiBJIHJlY29tbWVuZCB5b3Ugc2V0IHVwIHByb2MgZmlsZXMgaWYKKyAgICAgIHlvdSB3cml0ZSBhIGRyaXZlciBhbmQgd2FudCB0byBnZXQgYSBydW5uaW5nIHN0YXR1cyBvciByZWdpc3RlcgorICAgICAgZHVtcHMuIFRoZSBBUEkgaXMgZm91bmQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvaW5mby5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEZvciBjcmVhdGluZyBhIHByb2MgZmlsZSwgY2FsbAorICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX3Byb2NfbmV3KCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfaW5mb19lbnRyeV90ICplbnRyeTsKKyAgaW50IGVyciA9IHNuZF9jYXJkX3Byb2NfbmV3KGNhcmQsICJteS1maWxlIiwgJmVudHJ5KTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgIHdoZXJlIHRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBwcm9jLWZpbGUgbmFtZSB0byBiZQorICAgIGNyZWF0ZWQuIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgY3JlYXRlIGEgZmlsZQorICAgIDxmaWxlbmFtZT5teS1maWxlPC9maWxlbmFtZT4gdW5kZXIgdGhlIGNhcmQgZGlyZWN0b3J5LAorICAgIGUuZy4gPGZpbGVuYW1lPi9wcm9jL2Fzb3VuZC9jYXJkMC9teS1maWxlPC9maWxlbmFtZT4uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIExpa2Ugb3RoZXIgY29tcG9uZW50cywgdGhlIHByb2MgZW50cnkgY3JlYXRlZCB2aWEKKyAgICA8ZnVuY3Rpb24+c25kX2NhcmRfcHJvY19uZXcoKTwvZnVuY3Rpb24+IHdpbGwgYmUgcmVnaXN0ZXJlZCBhbmQKKyAgICByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IGluIHRoZSBjYXJkIHJlZ2lzdHJhdGlvbiBhbmQgcmVsZWFzZQorICAgIGZ1bmN0aW9ucy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFdoZW4gdGhlIGNyZWF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSBmdW5jdGlvbiBzdG9yZXMgYSBuZXcKKyAgICBpbnN0YW5jZSBhdCB0aGUgcG9pbnRlciBnaXZlbiBpbiB0aGUgdGhpcmQgYXJndW1lbnQuCisgICAgSXQgaXMgaW5pdGlhbGl6ZWQgYXMgYSB0ZXh0IHByb2MgZmlsZSBmb3IgcmVhZCBvbmx5LiAgRm9yIHVzaW5nCisgICAgdGhpcyBwcm9jIGZpbGUgYXMgYSByZWFkLW9ubHkgdGV4dCBmaWxlIGFzIGl0IGlzLCBzZXQgdGhlIHJlYWQKKyAgICBjYWxsYmFjayB3aXRoIGEgcHJpdmF0ZSBkYXRhIHZpYSAKKyAgICAgPGZ1bmN0aW9uPnNuZF9pbmZvX3NldF90ZXh0X29wcygpPC9mdW5jdGlvbj4uCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIHJlYWRfc2l6ZSwgbXlfcHJvY19yZWFkKTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgCisgICAgd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCAoPHBhcmFtZXRlcj5jaGlwPC9wYXJhbWV0ZXI+KSBpcyB0aGUKKyAgICBwcml2YXRlIGRhdGEgdG8gYmUgdXNlZCBpbiB0aGUgY2FsbGJhY2tzLiBUaGUgdGhpcmQgcGFyYW1ldGVyCisgICAgc3BlY2lmaWVzIHRoZSByZWFkIGJ1ZmZlciBzaXplIGFuZCB0aGUgZm91cnRoCisgICAgKDxwYXJhbWV0ZXI+bXlfcHJvY19yZWFkPC9wYXJhbWV0ZXI+KSBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoCisgICAgaXMgZGVmaW5lZCBsaWtlCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteV9wcm9jX3JlYWQoc25kX2luZm9fZW50cnlfdCAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfaW5mb19idWZmZXJfdCAqYnVmZmVyKTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgSW4gdGhlIHJlYWQgY2FsbGJhY2ssIHVzZSA8ZnVuY3Rpb24+c25kX2lwcmludGYoKTwvZnVuY3Rpb24+IGZvcgorICAgIG91dHB1dCBzdHJpbmdzLCB3aGljaCB3b3JrcyBqdXN0IGxpa2Ugbm9ybWFsCisgICAgPGZ1bmN0aW9uPnByaW50ZigpPC9mdW5jdGlvbj4uICBGb3IgZXhhbXBsZSwKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIG15X3Byb2NfcmVhZChzbmRfaW5mb19lbnRyeV90ICplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9pbmZvX2J1ZmZlcl90ICpidWZmZXIpCisgIHsKKyAgICAgICAgICBjaGlwX3QgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCisgICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiVGhpcyBpcyBteSBjaGlwIVxuIik7CisgICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiUG9ydCA9ICVsZFxuIiwgY2hpcC0+cG9ydCk7CisgIH0KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhlIGZpbGUgcGVybWlzc2lvbiBjYW4gYmUgY2hhbmdlZCBhZnRlcndhcmRzLiAgQXMgZGVmYXVsdCwgaXQncworICAgIHNldCBhcyByZWFkIG9ubHkgZm9yIGFsbCB1c2Vycy4gIElmIHlvdSB3YW50IHRvIGFkZCB0aGUgd3JpdGUKKyAgICBwZXJtaXNzaW9uIHRvIHRoZSB1c2VyIChyb290IGFzIGRlZmF1bHQpLCBzZXQgbGlrZSBiZWxvdzoKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgZW50cnktPm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1I7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgYW5kIHNldCB0aGUgd3JpdGUgYnVmZmVyIHNpemUgYW5kIHRoZSBjYWxsYmFjaworCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgZW50cnktPmMudGV4dC53cml0ZV9zaXplID0gMjU2OworICBlbnRyeS0+Yy50ZXh0LndyaXRlID0gbXlfcHJvY193cml0ZTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhlIGJ1ZmZlciBzaXplIGZvciByZWFkIGlzIHNldCB0byAxMDI0IGltcGxpY2l0bHkgYnkKKyAgICA8ZnVuY3Rpb24+c25kX2luZm9fc2V0X3RleHRfb3BzKCk8L2Z1bmN0aW9uPi4gIEl0IHNob3VsZCBzdWZmaWNlCisgICAgaW4gbW9zdCBjYXNlcyAodGhlIHNpemUgd2lsbCBiZSBhbGlnbmVkIHRvCisgICAgPGNvbnN0YW50PlBBR0VfU0laRTwvY29uc3RhbnQ+IGFueXdheSksIGJ1dCBpZiB5b3UgbmVlZCB0byBoYW5kbGUKKyAgICB2ZXJ5IGxhcmdlIHRleHQgZmlsZXMsIHlvdSBjYW4gc2V0IGl0IGV4cGxpY2l0bHksIHRvby4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGVudHJ5LT5jLnRleHQucmVhZF9zaXplID0gNjU1MzY7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgRm9yIHRoZSB3cml0ZSBjYWxsYmFjaywgeW91IGNhbiB1c2UKKyAgICA8ZnVuY3Rpb24+c25kX2luZm9fZ2V0X2xpbmUoKTwvZnVuY3Rpb24+IHRvIGdldCBhIHRleHQgbGluZSwgYW5kCisgICAgPGZ1bmN0aW9uPnNuZF9pbmZvX2dldF9zdHIoKTwvZnVuY3Rpb24+IHRvIHJldHJpZXZlIGEgc3RyaW5nIGZyb20KKyAgICB0aGUgbGluZS4gU29tZSBleGFtcGxlcyBhcmUgZm91bmQgaW4KKyAgICA8ZmlsZW5hbWU+Y29yZS9vc3MvbWl4ZXJfb3NzLmM8L2ZpbGVuYW1lPiwgY29yZS9vc3MvYW5kCisgICAgPGZpbGVuYW1lPnBjbV9vc3MuYzwvZmlsZW5hbWU+LiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEZvciBhIHJhdy1kYXRhIHByb2MtZmlsZSwgc2V0IHRoZSBhdHRyaWJ1dGVzIGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3Qgc25kX2luZm9fZW50cnlfb3BzIG15X2ZpbGVfaW9fb3BzID0geworICAgICAgICAgIC5yZWFkID0gbXlfZmlsZV9pb19yZWFkLAorICB9OworCisgIGVudHJ5LT5jb250ZW50ID0gU05EUlZfSU5GT19DT05URU5UX0RBVEE7CisgIGVudHJ5LT5wcml2YXRlX2RhdGEgPSBjaGlwOworICBlbnRyeS0+Yy5vcHMgPSAmbXlfZmlsZV9pb19vcHM7CisgIGVudHJ5LT5zaXplID0gNDA5NjsKKyAgZW50cnktPm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTzsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgY2FsbGJhY2sgaXMgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gdGhlIHRleHQtZmlsZQorICAgICAgdmVyc2lvbi4gWW91IG5lZWQgdG8gdXNlIGEgbG93LWxldmVsIGkvbyBmdW5jdGlvbnMgc3VjaCBhcworICAgICAgPGZ1bmN0aW9uPmNvcHlfZnJvbS90b191c2VyKCk8L2Z1bmN0aW9uPiB0byB0cmFuc2ZlciB0aGUKKyAgICAgIGRhdGEuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgbG9uZyBteV9maWxlX2lvX3JlYWQoc25kX2luZm9fZW50cnlfdCAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmaWxlX3ByaXZhdGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9zKQorICB7CisgICAgICAgICAgbG9uZyBzaXplID0gY291bnQ7CisgICAgICAgICAgaWYgKHBvcyArIHNpemUgPiBsb2NhbF9tYXhfc2l6ZSkKKyAgICAgICAgICAgICAgICAgIHNpemUgPSBsb2NhbF9tYXhfc2l6ZSAtIHBvczsKKyAgICAgICAgICBpZiAoY29weV90b191c2VyKGJ1ZiwgbG9jYWxfZGF0YSArIHBvcywgc2l6ZSkpCisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICByZXR1cm4gc2l6ZTsKKyAgfQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQb3dlciBNYW5hZ2VtZW50ICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0icG93ZXItbWFuYWdlbWVudCI+CisgICAgPHRpdGxlPlBvd2VyIE1hbmFnZW1lbnQ8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgSWYgdGhlIGNoaXAgaXMgc3VwcG9zZWQgdG8gd29yayB3aXRoIHdpdGggc3VzcGVuZC9yZXN1bWUKKyAgICAgIGZ1bmN0aW9ucywgeW91IG5lZWQgdG8gYWRkIHRoZSBwb3dlci1tYW5hZ2VtZW50IGNvZGVzIHRvIHRoZQorICAgICAgZHJpdmVyLiBUaGUgYWRkaXRpb25hbCBjb2RlcyBmb3IgdGhlIHBvd2VyLW1hbmFnZW1lbnQgc2hvdWxkIGJlCisgICAgICA8ZnVuY3Rpb24+aWZkZWY8L2Z1bmN0aW9uPidlZCB3aXRoCisgICAgICA8Y29uc3RhbnQ+Q09ORklHX1BNPC9jb25zdGFudD4uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgQUxTQSBwcm92aWRlcyB0aGUgY29tbW9uIHBvd2VyLW1hbmFnZW1lbnQgbGF5ZXIuIEVhY2ggY2FyZCBkcml2ZXIKKyAgICAgIG5lZWRzIHRvIGhhdmUgb25seSBsb3ctbGV2ZWwgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcy4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNpZmRlZiBDT05GSUdfUE0KKyAgc3RhdGljIGludCBzbmRfbXlfc3VzcGVuZChzbmRfY2FyZF90ICpjYXJkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisgIHsKKyAgICAgICAgICAuLi4uIC8vIGRvIHRoaW5ncyBmb3Igc3VzcHNlbmQKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorICBzdGF0aWMgaW50IHNuZF9teV9yZXN1bWUoc25kX2NhcmRfdCAqY2FyZCkKKyAgeworICAgICAgICAgIC4uLi4gLy8gZG8gdGhpbmdzIGZvciBzdXNwc2VuZAorICAgICAgICAgIHJldHVybiAwOworICB9CisgICNlbmRpZgorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBzY2hlbWUgb2YgdGhlIHJlYWwgc3VzcGVuZCBqb2IgaXMgYXMgZm9sbG93aW5nLgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXRyaWV2ZSB0aGUgY2hpcCBkYXRhIGZyb20gcG1fcHJpdmF0ZV9kYXRhIGZpZWxkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2FsbCA8ZnVuY3Rpb24+c25kX3BjbV9zdXNwZW5kX2FsbCgpPC9mdW5jdGlvbj4gdG8gc3VzcGVuZCB0aGUgcnVubmluZyBQQ00gc3RyZWFtcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNhdmUgdGhlIHJlZ2lzdGVyIHZhbHVlcyBpZiBuZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdG9wIHRoZSBoYXJkd2FyZSBpZiBuZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EaXNhYmxlIHRoZSBQQ0kgZGV2aWNlIGJ5IGNhbGxpbmcgPGZ1bmN0aW9uPnBjaV9kaXNhYmxlX2RldmljZSgpPC9mdW5jdGlvbj4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgQSB0eXBpY2FsIGNvZGUgd291bGQgYmUgbGlrZToKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgbXljaGlwX3N1c3BlbmQoc25kX2NhcmRfdCAqY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKQorICB7CisgICAgICAgICAgLyogKDEpICovCisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBjYXJkLT5wbV9wcml2YXRlX2RhdGE7CisgICAgICAgICAgLyogKDIpICovCisgICAgICAgICAgc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOworICAgICAgICAgIC8qICgzKSAqLworICAgICAgICAgIHNuZF9teWNoaXBfc2F2ZV9yZWdpc3RlcnMoY2hpcCk7CisgICAgICAgICAgLyogKDQpICovCisgICAgICAgICAgc25kX215Y2hpcF9zdG9wX2hhcmR3YXJlKGNoaXApOworICAgICAgICAgIC8qICg1KSAqLworICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBzY2hlbWUgb2YgdGhlIHJlYWwgcmVzdW1lIGpvYiBpcyBhcyBmb2xsb3dpbmcuCisKKyAgICA8b3JkZXJlZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJldHJpZXZlIHRoZSBjaGlwIGRhdGEgZnJvbSBwbV9wcml2YXRlX2RhdGEgZmllbGQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkVuYWJsZSB0aGUgcGNpIGRldmljZSBhZ2FpbiBieSBjYWxsaW5nCisgICAgPGZ1bmN0aW9uPnBjaV9lbmFibGVfZGV2aWNlKCk8L2Z1bmN0aW9uPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmUtaW5pdGlhbGl6ZSB0aGUgY2hpcC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdG9yZSB0aGUgc2F2ZWQgcmVnaXN0ZXJzIGlmIG5lY2Vzc2FyeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdW1lIHRoZSBtaXhlciwgZS5nLiBjYWxsaW5nCisgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3Jlc3VtZSgpPC9mdW5jdGlvbj4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlc3RhcnQgdGhlIGhhcmR3YXJlIChpZiBhbnkpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgQSB0eXBpY2FsIGNvZGUgd291bGQgYmUgbGlrZToKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIG15Y2hpcF9yZXN1bWUobXljaGlwX3QgKmNoaXApCisgIHsKKyAgICAgICAgICAvKiAoMSkgKi8KKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGNhcmQtPnBtX3ByaXZhdGVfZGF0YTsKKyAgICAgICAgICAvKiAoMikgKi8KKyAgICAgICAgICBwY2lfZW5hYmxlX2RldmljZShjaGlwLT5wY2kpOworICAgICAgICAgIC8qICgzKSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVpbml0X2NoaXAoY2hpcCk7CisgICAgICAgICAgLyogKDQpICovCisgICAgICAgICAgc25kX215Y2hpcF9yZXN0b3JlX3JlZ2lzdGVycyhjaGlwKTsKKyAgICAgICAgICAvKiAoNSkgKi8KKyAgICAgICAgICBzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5Nyk7CisgICAgICAgICAgLyogKDYpICovCisgICAgICAgICAgc25kX215Y2hpcF9yZXN0YXJ0X2NoaXAoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBPSywgd2UgaGF2ZSBhbGwgY2FsbGJhY2tzIG5vdy4gTGV0J3Mgc2V0IHVwIHRoZW0gbm93LiBJbiB0aGUKKyAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjYXJkLCBhZGQgdGhlIGZvbGxvd2luZzogCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKKyAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBzbmRfY2FyZF90ICpjYXJkOworICAgICAgICAgIG15Y2hpcF90ICpjaGlwOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBzbmRfY2FyZF9zZXRfcG1fY2FsbGJhY2soY2FyZCwgc25kX215X3N1c3BlbmQsIHNuZF9teV9yZXN1bWUsIGNoaXApOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgIEhlcmUgeW91IGRvbid0IGhhdmUgdG8gcHV0IGlmZGVmIENPTkZJR19QTSBhcm91bmQsIHNpbmNlIGl0J3MgYWxyZWFkeQorICAgIGNoZWNrZWQgaW4gdGhlIGhlYWRlciBhbmQgZXhwYW5kZWQgdG8gZW1wdHkgaWYgbm90IG5lZWRlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHlvdSBuZWVkIGEgc3BhY2UgZm9yIHNhdmluZyB0aGUgcmVnaXN0ZXJzLCB5b3UnbGwgbmVlZCB0bworICAgIGFsbG9jYXRlIHRoZSBidWZmZXIgZm9yIGl0IGhlcmUsIHRvbywgc2luY2UgaXQgd291bGQgYmUgZmF0YWwKKyAgICBpZiB5b3UgY2Fubm90IGFsbG9jYXRlIGEgbWVtb3J5IGluIHRoZSBzdXNwZW5kIHBoYXNlLgorICAgIFRoZSBhbGxvY2F0ZWQgYnVmZmVyIHNob3VsZCBiZSByZWxlYXNlZCBpbiB0aGUgY29ycmVzcG9uZGluZworICAgIGRlc3RydWN0b3IuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBBbmQgbmV4dCwgc2V0IHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcyB0byB0aGUgcGNpX2RyaXZlciwKKyAgICAgIFRoaXMgY2FuIGJlIGRvbmUgYnkgcGFzc2luZyBhIG1hY3JvIFNORF9QQ0lfUE1fQ0FMTEJBQ0tTCisgICAgICBpbiB0aGUgcGNpX2RyaXZlciBzdHJ1Y3QuICBUaGlzIG1hY3JvIGlzIGV4cGFuZGVkIHRvIHRoZSBjb3JyZWN0CisgICAgICAoZ2xvYmFsKSBjYWxsYmFja3MgaWYgQ09ORklHX1BNIGlzIHNldC4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICAgICAgLm5hbWUgPSAiTXkgQ2hpcCIsCisgICAgICAgICAgLmlkX3RhYmxlID0gc25kX215X2lkcywKKyAgICAgICAgICAucHJvYmUgPSBzbmRfbXlfcHJvYmUsCisgICAgICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9teV9yZW1vdmUpLAorICAgICAgICAgIFNORF9QQ0lfUE1fQ0FMTEJBQ0tTCisgIH07CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIE1vZHVsZSBQYXJhbWV0ZXJzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0ibW9kdWxlLXBhcmFtZXRlcnMiPgorICAgIDx0aXRsZT5Nb2R1bGUgUGFyYW1ldGVyczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGVyZSBhcmUgc3RhbmRhcmQgbW9kdWxlIG9wdGlvbnMgZm9yIEFMU0EuIEF0IGxlYXN0LCBlYWNoCisgICAgICBtb2R1bGUgc2hvdWxkIGhhdmUgPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiwKKyAgICAgIDxwYXJhbWV0ZXI+aWQ8L3BhcmFtZXRlcj4gYW5kIDxwYXJhbWV0ZXI+ZW5hYmxlPC9wYXJhbWV0ZXI+CisgICAgICBvcHRpb25zLiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgKHVzdWFsbHkgdXAgdG8KKyAgICAgIDggPSA8Y29uc3RhbnQ+U05EUlZfQ0FSRFM8L2NvbnN0YW50PiBjYXJkcyksIHRoZXkgc2hvdWxkIGJlCisgICAgICBhcnJheXMuICBUaGUgZGVmYXVsdCBpbml0aWFsIHZhbHVlcyBhcmUgZGVmaW5lZCBhbHJlYWR5IGFzCisgICAgICBjb25zdGFudHMgZm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmc6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworICBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CisgIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB0aGUgbW9kdWxlIHN1cHBvcnRzIG9ubHkgYSBzaW5nbGUgY2FyZCwgdGhleSBjb3VsZCBiZSBzaW5nbGUKKyAgICB2YXJpYWJsZXMsIGluc3RlYWQuICA8cGFyYW1ldGVyPmVuYWJsZTwvcGFyYW1ldGVyPiBvcHRpb24gaXMgbm90CisgICAgYWx3YXlzIG5lY2Vzc2FyeSBpbiB0aGlzIGNhc2UsIGJ1dCBpdCB3b3VsZG4ndCBiZSBzbyBiYWQgdG8gaGF2ZSBhCisgICAgZHVtbXkgb3B0aW9uIGZvciBjb21wYXRpYmlsaXR5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIG1vZHVsZSBwYXJhbWV0ZXJzIG11c3QgYmUgZGVjbGFyZWQgd2l0aCB0aGUgc3RhbmRhcmQKKyAgICA8ZnVuY3Rpb24+bW9kdWxlX3BhcmFtKCkoKTwvZnVuY3Rpb24+LAorICAgIDxmdW5jdGlvbj5tb2R1bGVfcGFyYW1fYXJyYXkoKSgpPC9mdW5jdGlvbj4gYW5kCisgICAgPGZ1bmN0aW9uPk1PRFVMRV9QQVJNX0RFU0MoKTwvZnVuY3Rpb24+IG1hY3Jvcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSB0eXBpY2FsIGNvZGluZyB3b3VsZCBiZSBsaWtlIGJlbG93OgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2RlZmluZSBDQVJEX05BTUUgIk15IENoaXAiCisKKyAgbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOworICBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yICIgQ0FSRF9OQU1FICIgc291bmRjYXJkLiIpOworICBtb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgIiBDQVJEX05BTUUgIiBzb3VuZGNhcmQuIik7CisgIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworICBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSAiIENBUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBBbHNvLCBkb24ndCBmb3JnZXQgdG8gZGVmaW5lIHRoZSBtb2R1bGUgZGVzY3JpcHRpb24sIGNsYXNzZXMsCisgICAgICBsaWNlbnNlIGFuZCBkZXZpY2VzLiBFc3BlY2lhbGx5LCB0aGUgcmVjZW50IG1vZHByb2JlIHJlcXVpcmVzIHRvCisgICAgICBkZWZpbmUgdGhlIG1vZHVsZSBsaWNlbnNlIGFzIEdQTCwgZXRjLiwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMKKyAgICAgIHNob3duIGFzIDxxdW90ZT50YWludGVkPC9xdW90ZT4uIAorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgTU9EVUxFX0RFU0NSSVBUSU9OKCJNeSBDaGlwIik7CisgIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKyAgTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VmVuZG9yLE15IENoaXAgTmFtZX19Iik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIEhvdyBUbyBQdXQgWW91ciBEcml2ZXIgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJob3ctdG8tcHV0LXlvdXItZHJpdmVyIj4KKyAgICA8dGl0bGU+SG93IFRvIFB1dCBZb3VyIERyaXZlciBJbnRvIEFMU0EgVHJlZTwvdGl0bGU+CisJPHNlY3Rpb24+CisJPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorCTxwYXJhPgorCVNvIGZhciwgeW91J3ZlIGxlYXJuZWQgaG93IHRvIHdyaXRlIHRoZSBkcml2ZXIgY29kZXMuCisJQW5kIHlvdSBtaWdodCBoYXZlIGEgcXVlc3Rpb24gbm93OiBob3cgdG8gcHV0IG15IG93bgorCWRyaXZlciBpbnRvIHRoZSBBTFNBIGRyaXZlciB0cmVlPworCUhlcmUgKGZpbmFsbHkgOikgdGhlIHN0YW5kYXJkIHByb2NlZHVyZSBpcyBkZXNjcmliZWQgYnJpZWZseS4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlTdXBwb3NlIHRoYXQgeW91J2xsIGNyZWF0ZSBhIG5ldyBQQ0kgZHJpdmVyIGZvciB0aGUgY2FyZAorCTxxdW90ZT54eXo8L3F1b3RlPi4gIFRoZSBjYXJkIG1vZHVsZSBuYW1lIHdvdWxkIGJlCisJc25kLXh5ei4gIFRoZSBuZXcgZHJpdmVyIGlzIHVzdWFsbHkgcHV0IGludG8gYWxzYS1kcml2ZXIKKwl0cmVlLCA8ZmlsZW5hbWU+YWxzYS1kcml2ZXIvcGNpPC9maWxlbmFtZT4gZGlyZWN0b3J5IGluCisJdGhlIGNhc2Ugb2YgUENJIGNhcmRzLgorCVRoZW4gdGhlIGRyaXZlciBpcyBldmFsdWF0ZWQsIGF1ZGl0ZWQgYW5kIHRlc3RlZAorCWJ5IGRldmVsb3BlcnMgYW5kIHVzZXJzLiAgQWZ0ZXIgYSBjZXJ0YWluIHRpbWUsIHRoZSBkcml2ZXIKKwl3aWxsIGdvIHRvIGFsc2Eta2VybmVsIHRyZWUgKHRvIHRoZSBjb3JyZXNwb25kaW5nIGRpcmVjdG9yeSwKKwlzdWNoIGFzIDxmaWxlbmFtZT5hbHNhLWtlcm5lbC9wY2k8L2ZpbGVuYW1lPikgYW5kIGV2ZW50dWFsbHkKKwlpbnRlZ3JhdGVkIGludG8gTGludXggMi42IHRyZWUgKHRoZSBkaXJlY3Rvcnkgd291bGQgYmUKKwk8ZmlsZW5hbWU+bGludXgvc291bmQvcGNpPC9maWxlbmFtZT4pLgorCTwvcGFyYT4KKworCTxwYXJhPgorCUluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMsIHRoZSBkcml2ZXIgY29kZSBpcyBzdXBwb3NlZAorCXRvIGJlIHB1dCBpbnRvIGFsc2EtZHJpdmVyIHRyZWUuICBUaGUgdHdvIGNhc2VzIGFyZSBhc3N1bWVkOgorCWEgZHJpdmVyIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgc291cmNlIGZpbGUgYW5kIG9uZSBjb25zaXN0aW5nCisJb2Ygc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uPgorCTx0aXRsZT5Ecml2ZXIgd2l0aCBBIFNpbmdsZSBTb3VyY2UgRmlsZTwvdGl0bGU+CisJPHBhcmE+CisJPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlNb2RpZnkgYWxzYS1kcml2ZXIvcGNpL01ha2VmaWxlCisJPC9wYXJhPgorCisJPHBhcmE+CisJU3VwcG9zZSB5b3UgaGF2ZSBhIGZpbGUgeHl6LmMuICBBZGQgdGhlIGZvbGxvd2luZworCXR3byBsaW5lcworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZC14eXotb2JqcyA6PSB4eXoubworICBvYmotJChDT05GSUdfU05EX1hZWikgKz0gc25kLXh5ei5vCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCUNyZWF0ZSB0aGUgS2NvbmZpZyBlbnRyeQorCTwvcGFyYT4KKworCTxwYXJhPgorCUFkZCB0aGUgbmV3IGVudHJ5IG9mIEtjb25maWcgZm9yIHlvdXIgeHl6IGRyaXZlci4KKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBjb25maWcgU05EX1hZWgorICAgICAgICAgIHRyaXN0YXRlICJGb29iYXIgWFlaIgorICAgICAgICAgIGRlcGVuZHMgb24gU05ECisgICAgICAgICAgc2VsZWN0IFNORF9QQ00KKyAgICAgICAgICBoZWxwCisgICAgICAgICAgICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRm9vYmFyIFhZWiBzb3VuZGNhcmQuCisKKyAgICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKyAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHNuZC14eXouCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJdGhlIGxpbmUsIHNlbGVjdCBTTkRfUENNLCBzcGVjaWZpZXMgdGhhdCB0aGUgZHJpdmVyIHh5eiBzdXBwb3J0cworCVBDTS4gIEluIGFkZGl0aW9uIHRvIFNORF9QQ00sIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBhcmUKKwlzdXBwb3J0ZWQgZm9yIHNlbGVjdCBjb21tYW5kOgorCVNORF9SQVdNSURJLCBTTkRfVElNRVIsIFNORF9IV0RFUCwgU05EX01QVTQwMV9VQVJULAorCVNORF9PUEwzX0xJQiwgU05EX09QTDRfTElCLCBTTkRfVlhfTElCLCBTTkRfQUM5N19DT0RFQy4KKwlBZGQgdGhlIHNlbGVjdCBjb21tYW5kIGZvciBlYWNoIHN1cHBvcnRlZCBjb21wb25lbnQuCisJPC9wYXJhPgorCisJPHBhcmE+CisJTm90ZSB0aGF0IHNvbWUgc2VsZWN0aW9ucyBpbXBseSB0aGUgbG93bGV2ZWwgc2VsZWN0aW9ucy4KKwlGb3IgZXhhbXBsZSwgUENNIGluY2x1ZGVzIFRJTUVSLCBNUFU0MDFfVUFSVCBpbmNsdWRlcyBSQVdNSURJLAorCUFDOTdfQ09ERUMgaW5jbHVkZXMgUENNLCBhbmQgT1BMM19MSUIgaW5jbHVkZXMgSFdERVAuCisJWW91IGRvbid0IG5lZWQgdG8gZ2l2ZSB0aGUgbG93bGV2ZWwgc2VsZWN0aW9ucyBhZ2Fpbi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlGb3IgdGhlIGRldGFpbHMgb2YgS2NvbmZpZyBzY3JpcHQsIHJlZmVyIHRvIHRoZSBrYnVpbGQKKwlkb2N1bWVudGF0aW9uLgorCTwvcGFyYT4KKworCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJUnVuIGN2c2NvbXBpbGUgc2NyaXB0IHRvIHJlLWdlbmVyYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0IGFuZAorCWJ1aWxkIHRoZSB3aG9sZSBzdHVmZiBhZ2Fpbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8L29yZGVyZWRsaXN0PgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbj4KKwk8dGl0bGU+RHJpdmVycyB3aXRoIFNldmVyYWwgU291cmNlIEZpbGVzPC90aXRsZT4KKwk8cGFyYT4KKwlTdXBwb3NlIHRoYXQgdGhlIGRyaXZlciBzbmQteHl6IGhhdmUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisJVGhleSBhcmUgbG9jYXRlZCBpbiB0aGUgbmV3IHN1YmRpcmVjdG9yeSwKKwlwY2kveHl6LgorCisJPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlBZGQgYSBuZXcgZGlyZWN0b3J5ICg8ZmlsZW5hbWU+eHl6PC9maWxlbmFtZT4pIGluCisJPGZpbGVuYW1lPmFsc2EtZHJpdmVyL3BjaS9NYWtlZmlsZTwvZmlsZW5hbWU+IGxpa2UgYmVsb3cKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG9iai0kKENPTkZJR19TTkQpICs9IHh5ei8KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJVW5kZXIgdGhlIGRpcmVjdG9yeSA8ZmlsZW5hbWU+eHl6PC9maWxlbmFtZT4sIGNyZWF0ZSBhIE1ha2VmaWxlCisKKyAgICAgIDxleGFtcGxlPgorCTx0aXRsZT5TYW1wbGUgTWFrZWZpbGUgZm9yIGEgZHJpdmVyIHh5ejwvdGl0bGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZm5kZWYgU05EX1RPUERJUgorICBTTkRfVE9QRElSPS4uLy4uCisgIGVuZGlmCisKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL3RvcGxldmVsLmNvbmZpZworICBpbmNsdWRlICQoU05EX1RPUERJUikvTWFrZWZpbGUuY29uZgorCisgIHNuZC14eXotb2JqcyA6PSB4eXoubyBhYmMubyBkZWYubworCisgIG9iai0kKENPTkZJR19TTkRfWFlaKSArPSBzbmQteHl6Lm8KKworICBpbmNsdWRlICQoU05EX1RPUERJUikvUnVsZXMubWFrZQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2V4YW1wbGU+CisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJQ3JlYXRlIHRoZSBLY29uZmlnIGVudHJ5CisJPC9wYXJhPgorCisJPHBhcmE+CisJVGhpcyBwcm9jZWR1cmUgaXMgYXMgc2FtZSBhcyBpbiB0aGUgbGFzdCBzZWN0aW9uLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCVJ1biBjdnNjb21waWxlIHNjcmlwdCB0byByZS1nZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQKKwlidWlsZCB0aGUgd2hvbGUgc3R1ZmYgYWdhaW4uCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPC9vcmRlcmVkbGlzdD4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFVzZWZ1bCBGdW5jdGlvbnMgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJ1c2VmdWwtZnVuY3Rpb25zIj4KKyAgICA8dGl0bGU+VXNlZnVsIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtcHJpbnRrIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX3ByaW50aygpPC9mdW5jdGlvbj4gYW5kIGZyaWVuZHM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEFMU0EgcHJvdmlkZXMgYSB2ZXJib3NlIHZlcnNpb24gb2YKKyAgICAgIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBJZiBhIGtlcm5lbCBjb25maWcKKyAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPC9jb25zdGFudD4gaXMgc2V0LCB0aGlzCisgICAgICBmdW5jdGlvbiBwcmludHMgdGhlIGdpdmVuIG1lc3NhZ2UgdG9nZXRoZXIgd2l0aCB0aGUgZmlsZSBuYW1lCisgICAgICBhbmQgdGhlIGxpbmUgb2YgdGhlIGNhbGxlci4gVGhlIDxjb25zdGFudD5LRVJOX1hYWDwvY29uc3RhbnQ+CisgICAgICBwcmVmaXggaXMgcHJvY2Vzc2VkIGFzIAorICAgICAgd2VsbCBhcyB0aGUgb3JpZ2luYWwgPGZ1bmN0aW9uPnByaW50aygpPC9mdW5jdGlvbj4gZG9lcywgc28gaXQncworICAgICAgcmVjb21tZW5kZWQgdG8gYWRkIHRoaXMgcHJlZml4LCBlLmcuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wcmludGsoS0VSTl9FUlIgIk9oIG15LCBzb3JyeSwgaXQncyBleHRyZW1lbHkgYmFkIVxuIik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBhbHNvIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+J3MgZm9yCisgICAgICBkZWJ1Z2dpbmcuIDxmdW5jdGlvbj5zbmRfcHJpbnRkKCk8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZCBmb3IKKyAgICAgIGdlbmVyYWwgZGVidWdnaW5nIHB1cnBvc2VzLiBJZgorICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUc8L2NvbnN0YW50PiBpcyBzZXQsIHRoaXMgZnVuY3Rpb24gaXMKKyAgICAgIGNvbXBpbGVkLCBhbmQgd29ya3MganVzdCBsaWtlCisgICAgICA8ZnVuY3Rpb24+c25kX3ByaW50aygpPC9mdW5jdGlvbj4uIElmIHRoZSBBTFNBIGlzIGNvbXBpbGVkCisgICAgICB3aXRob3V0IHRoZSBkZWJ1Z2dpbmcgZmxhZywgaXQncyBpZ25vcmVkLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5zbmRfcHJpbnRkZCgpPC9mdW5jdGlvbj4gaXMgY29tcGlsZWQgaW4gb25seSB3aGVuCisgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVR19ERVRFQ1Q8L2NvbnN0YW50PiBpcyBzZXQuIFBsZWFzZSBub3RlCisgICAgICB0aGF0IDxjb25zdGFudD5ERUJVR19ERVRFQ1Q8L2NvbnN0YW50PiBpcyBub3Qgc2V0IGFzIGRlZmF1bHQKKyAgICAgIGV2ZW4gaWYgeW91IGNvbmZpZ3VyZSB0aGUgYWxzYS1kcml2ZXIgd2l0aAorICAgICAgPG9wdGlvbj4tLXdpdGgtZGVidWc9ZnVsbDwvb3B0aW9uPiBvcHRpb24uIFlvdSBuZWVkIHRvIGdpdmUKKyAgICAgIGV4cGxpY2l0bHkgPG9wdGlvbj4tLXdpdGgtZGVidWc9ZGV0ZWN0PC9vcHRpb24+IG9wdGlvbiBpbnN0ZWFkLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtYXNzZXJ0Ij4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX2Fzc2VydCgpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5zbmRfYXNzZXJ0KCk8L2Z1bmN0aW9uPiBtYWNybyBpcyBzaW1pbGFyIHdpdGggdGhlCisgICAgICBub3JtYWwgPGZ1bmN0aW9uPmFzc2VydCgpPC9mdW5jdGlvbj4gbWFjcm8uIEZvciBleGFtcGxlLCAgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2Fzc2VydChwb2ludGVyICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlLCBhbmQgdGhlCisgICAgICBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFjdGlvbiBpZiBpdCBmYWlscy4gV2hlbgorICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUc8L2NvbnN0YW50PiwgaXMgc2V0LCBpdCB3aWxsIHNob3cgYW4KKyAgICAgIGVycm9yIG1lc3NhZ2Ugc3VjaCBhcyA8Y29tcHV0ZXJvdXRwdXQ+QlVHPyAoeHh4KSAoY2FsbGVkIGZyb20KKyAgICAgIHl5eSk8L2NvbXB1dGVyb3V0cHV0Pi4gV2hlbiBubyBkZWJ1ZyBmbGFnIGlzIHNldCwgdGhpcyBpcworICAgICAgaWdub3JlZC4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InVzZWZ1bC1mdW5jdGlvbnMtc25kLXJ1bnRpbWUtY2hlY2siPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5zbmRfcnVudGltZV9jaGVjaygpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgbWFjcm8gaXMgcXVpdGUgc2ltaWxhciB3aXRoCisgICAgICA8ZnVuY3Rpb24+c25kX2Fzc2VydCgpPC9mdW5jdGlvbj4uIFVubGlrZQorICAgICAgPGZ1bmN0aW9uPnNuZF9hc3NlcnQoKTwvZnVuY3Rpb24+LCB0aGUgZXhwcmVzc2lvbiBpcyBhbHdheXMKKyAgICAgIGV2YWx1YXRlZCByZWdhcmRsZXNzIG9mCisgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVRzwvY29uc3RhbnQ+LiBXaGVuCisgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVRzwvY29uc3RhbnQ+IGlzIHNldCwgdGhlIG1hY3JvIHdpbGwKKyAgICAgIHNob3cgYSBtZXNzYWdlIGxpa2UgPGNvbXB1dGVyb3V0cHV0PkVSUk9SICh4eCkgKGNhbGxlZCBmcm9tCisgICAgICB5eXkpPC9jb21wdXRlcm91dHB1dD4uIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJ1c2VmdWwtZnVuY3Rpb25zLXNuZC1idWciPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5zbmRfQlVHKCk8L2Z1bmN0aW9uPjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSXQgY2FsbHMgPGZ1bmN0aW9uPnNuZF9hc3NlcnQoMCwpPC9mdW5jdGlvbj4gLS0gdGhhdCBpcywganVzdAorICAgICAgcHJpbnRzIHRoZSBlcnJvciBtZXNzYWdlIGF0IHRoZSBwb2ludC4gSXQncyB1c2VmdWwgdG8gc2hvdyB0aGF0CisgICAgICBhIGZhdGFsIGVycm9yIGhhcHBlbnMgdGhlcmUuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBBY2tub3dsZWRnbWVudHMgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJhY2tub3dsZWRtZW50cyI+CisgICAgPHRpdGxlPkFja25vd2xlZGdtZW50czwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBJIHdvdWxkIGxpa2UgdG8gdGhhbmsgUGhpbCBLZXJyIGZvciBoaXMgaGVscCBmb3IgaW1wcm92ZW1lbnQgYW5kCisgICAgICBjb3JyZWN0aW9ucyBvZiB0aGlzIGRvY3VtZW50LiAKKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgS2V2aW4gQ29uZGVyIHJlZm9ybWF0dGVkIHRoZSBvcmlnaW5hbCBwbGFpbi10ZXh0IHRvIHRoZQorICAgIERvY0Jvb2sgZm9ybWF0LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICBHaXVsaWFubyBQb2NoaW5pIGNvcnJlY3RlZCB0eXBvcyBhbmQgY29udHJpYnV0ZWQgdGhlIGV4YW1wbGUgY29kZXMKKyAgICBpbiB0aGUgaGFyZHdhcmUgY29uc3RyYWludHMgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSm95c3RpY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0pveXN0aWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RhNDFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0pveXN0aWNrLnR4dApAQCAtMCwwICsxLDg2IEBACitBbmFsb2cgSm95c3RpY2sgU3VwcG9ydCBvbiBBTFNBIERyaXZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICAgICBPY3QuIDE0LCAyMDAzCisgICAgICAgICAgIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKworR2VuZXJhbAorLS0tLS0tLQorCitGaXJzdCBvZiBhbGwsIHlvdSBuZWVkIHRvIGVuYWJsZSBHQU1FUE9SVCBzdXBwb3J0IG9uIExpbnV4IGtlcm5lbCBmb3IKK3VzaW5nIGEgam95c3RpY2sgd2l0aCB0aGUgQUxTQSBkcml2ZXIuICBGb3IgdGhlIGRldGFpbHMgb2YgZ2FtZXBvcnQKK3N1cHBvcnQsIHJlZmVyIHRvIERvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0LgorCitUaGUgam95c3RpY2sgc3VwcG9ydCBvZiBBTFNBIGRyaXZlcnMgaXMgZGlmZmVyZW50IGJldHdlZW4gSVNBIGFuZCBQQ0kKK2NhcmRzLiAgSW4gdGhlIGNhc2Ugb2YgSVNBIChQblApIGNhcmRzLCBpdCdzIHVzdWFsbHkgaGFuZGxlZCBieSB0aGUKK2luZGVwZW5kZW50IG1vZHVsZSAobnM1NTgpLiAgTWVhbndoaWxlLCB0aGUgQUxTQSBQQ0kgZHJpdmVycyBoYXZlIHRoZQorYnVpbHQtaW4gZ2FtZXBvcnQgc3VwcG9ydC4gIEhlbmNlLCB3aGVuIHRoZSBBTFNBIFBDSSBkcml2ZXIgaXMgYnVpbHQKK2luIHRoZSBrZXJuZWwsIENPTkZJR19HQU1FUE9SVCBtdXN0IGJlICd5JywgdG9vLiAgT3RoZXJ3aXNlLCB0aGUKK2dhbWVwb3J0IHN1cHBvcnQgb24gdGhhdCBjYXJkIHdpbGwgYmUgKHNpbGVudGx5KSBkaXNhYmxlZC4KKworU29tZSBhZGFwdGVyIG1vZHVsZXMgcHJvYmUgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gb2YgdGhlIGRldmljZSBhdAordGhlIGxvYWQgdGltZS4gIEl0J2QgYmUgc2FmZXIgdG8gcGx1ZyBpbiB0aGUgam95c3RpY2sgZGV2aWNlIGJlZm9yZQorbG9hZGluZyB0aGUgbW9kdWxlLgorCisKK1BDSSBDYXJkcworLS0tLS0tLS0tCisKK0ZvciBQQ0kgY2FyZHMsIHRoZSBqb3lzdGljayBpcyBlbmFibGVkIHdoZW4gdGhlIGFwcHJvcHJpYXRlIG1vZHVsZQorb3B0aW9uIGlzIHNwZWNpZmllZC4gIFNvbWUgZHJpdmVycyBkb24ndCBuZWVkIG9wdGlvbnMsIGFuZCB0aGUKK2pveXN0aWNrIHN1cHBvcnQgaXMgYWx3YXlzIGVuYWJsZWQuICBJbiB0aGUgZm9ybWVyIEFMU0EgdmVyc2lvbiwgdGhlcmUKK3dhcyBhIGR5bmFtaWMgY29udHJvbCBBUEkgZm9yIHRoZSBqb3lzdGljayBhY3RpdmF0aW9uLiAgSXQgd2FzCitjaGFuZ2VkLCBob3dldmVyLCB0byB0aGUgc3RhdGljIG1vZHVsZSBvcHRpb25zIGJlY2F1c2Ugb2YgdGhlIHN5c3RlbQorc3RhYmlsaXR5IGFuZCB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudC4KKworVGhlIGZvbGxvd2luZyBQQ0kgZHJpdmVycyBzdXBwb3J0IHRoZSBqb3lzdGljayBuYXRpdmVseS4KKworICAgIERyaXZlcglNb2R1bGUgT3B0aW9uCUF2YWlsYWJsZSBWYWx1ZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhbHM0MDAwCWpveXN0aWNrX3BvcnQJMCA9IGRpc2FibGUgKGRlZmF1bHQpLCAxID0gYXV0by1kZXRlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbDogYW55IGFkZHJlc3MgKGUuZy4gMHgyMDApCisgICAgYXU4OHgwCU4vQQkJTi9BCisgICAgYXpmMzMyOAlqb3lzdGljawkwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSwgLTEgPSBhdXRvIChkZWZhdWx0KQorICAgIGVuczEzNzAJam95c3RpY2sJMCA9IGRpc2FibGUgKGRlZmF1bHQpLCAxID0gZW5hYmxlCisgICAgZW5zMTM3MQlqb3lzdGlja19wb3J0CTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGF1dG8tZGV0ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWw6IDB4MjAwLCAweDIwOCwgMHgyMTAsIDB4MjE4CisgICAgY21pcGNpCWpveXN0aWNrX3BvcnQJMCA9IGRpc2FibGUgKGRlZmF1bHQpLCAxID0gYXV0by1kZXRlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbDogYW55IGFkZHJlc3MgKGUuZy4gMHgyMDApCisgICAgY3M0MjgxCU4vQQkJTi9BCisgICAgY3M0Nnh4CU4vQQkJTi9BCisgICAgZXMxOTM4CU4vQQkJTi9BCisgICAgZXMxOTY4CWpveXN0aWNrCTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGVuYWJsZQorICAgIHNvbmljdmliZXMJTi9BCQlOL0EKKyAgICB0cmlkZW50CU4vQQkJTi9BCisgICAgdmlhODJ4eCgqMSkJam95c3RpY2sJMCA9IGRpc2FibGUgKGRlZmF1bHQpLCAxID0gZW5hYmxlCisgICAgeW1mcGNpCWpveXN0aWNrX3BvcnQJMCA9IGRpc2FibGUgKGRlZmF1bHQpLCAxID0gYXV0by1kZXRlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbDogMHgyMDEsIDB4MjAyLCAweDIwNCwgMHgyMDUoKjIpCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAqMSkgIFZJQTY4NkEvQiBvbmx5CisgICAgKjIpICBXaXRoIFlNRjc0NC83NTQgY2hpcHMsIHRoZSBwb3J0IGFkZHJlc3MgY2FuIGJlIGNob3NlbiBhcmJpdHJhcmlseQorCitUaGUgZm9sbG93aW5nIGRyaXZlcnMgZG9uJ3Qgc3VwcG9ydCBnYW1lcG9ydCBuYXRpdmVseSwgYnV0IHRoZXJlIGFyZQorYWRkaXRpb25hbCBtb2R1bGVzLiAgTG9hZCB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgdG8gYWRkIHRoZSBnYW1lcG9ydAorc3VwcG9ydC4KKworICAgIERyaXZlcglBZGRpdGlvbmFsIE1vZHVsZQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZW11MTBrMQllbXUxMGsxLWdwCisgICAgZm04MDEJZm04MDEtZ3AKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOiB0aGUgInBjaWdhbWUiIGFuZCAiY3M0NjF4IiBtb2R1bGVzIGFyZSBmb3IgdGhlIE9TUyBkcml2ZXJzIG9ubHkuCisgICAgICBUaGVzZSBBTFNBIGRyaXZlcnMgKGNzNDZ4eCwgdHJpZGVudCBhbmQgYXU4OHgwKSBoYXZlIHRoZQorICAgICAgYnVpbHQtaW4gZ2FtZXBvcnQgc3VwcG9ydC4KKworQXMgbWVudGlvbmVkIGFib3ZlLCBBTFNBIFBDSSBkcml2ZXJzIGhhdmUgdGhlIGJ1aWx0LWluIGdhbWVwb3J0CitzdXBwb3J0LCBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBsb2FkIG5zNTU4IG1vZHVsZS4gIEp1c3QgbG9hZCAiam95ZGV2IgorYW5kIHRoZSBhcHByb3ByaWF0ZSBhZGFwdGVyIG1vZHVsZSAoZS5nLiAiYW5hbG9nIikuCisKKworSVNBIENhcmRzCistLS0tLS0tLS0KKworQUxTQSBJU0EgZHJpdmVycyBkb24ndCBoYXZlIHRoZSBidWlsdC1pbiBnYW1lcG9ydCBzdXBwb3J0LgorSW5zdGVhZCwgeW91IG5lZWQgdG8gbG9hZCAibnM1NTgiIG1vZHVsZSBpbiBhZGRpdGlvbiB0byAiam95ZGV2IiBhbmQKK3RoZSBhZGFwdGVyIG1vZHVsZSAoZS5nLiAiYW5hbG9nIikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvTUlYQVJULnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9NSVhBUlQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjk3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvTUlYQVJULnR4dApAQCAtMCwwICsxLDEwMCBAQAorICAgIEFsc2EgZHJpdmVyIGZvciBEaWdpZ3JhbSBtaVhhcnQ4IGFuZCBtaVhhcnQ4QUVTL0VCVSBzb3VuZGNhcmRzCisJICAgIERpZ2lncmFtIDxhbHNhQGRpZ2lncmFtLmNvbT4KKworCitHRU5FUkFMCis9PT09PT09CisKK1RoZSBtaVhhcnQ4IGlzIGEgbXVsdGljaGFubmVsIGF1ZGlvIHByb2Nlc3NpbmcgYW5kIG1peGluZyBzb3VuZGNhcmQKK3RoYXQgaGFzIDQgc3RlcmVvIGF1ZGlvIGlucHV0cyBhbmQgNCBzdGVyZW8gYXVkaW8gb3V0cHV0cy4KK1RoZSBtaVhhcnQ4QUVTL0VCVSBpcyB0aGUgc2FtZSB3aXRoIGEgYWRkLW9uIGNhcmQgdGhhdCBvZmZlcnMgZnVydGhlcgorNCBkaWdpdGFsIHN0ZXJlbyBhdWRpbyBpbnB1dHMgYW5kIG91dHB1dHMuCitGdXJ0aGVybW9yZSB0aGUgYWRkLW9uIGNhcmQgb2ZmZXJzIGV4dGVybmFsIGNsb2NrIHN5bmNocm9uaXNhdGlvbgorKEFFUy9FQlUsIFdvcmQgQ2xvY2ssIFRpbWUgQ29kZSBhbmQgVmlkZW8gU3luY2hybykKKworVGhlIG1haW5ib2FyZCBoYXMgYSBQb3dlclBDIHRoYXQgb2ZmZXJzIG9uYm9hcmQgbXBlZyBlbmNvZGluZyBhbmQKK2RlY29kaW5nLCBzYW1wbGVyYXRlIGNvbnZlcnNpb25zIGFuZCB2YXJpb3VzIGVmZmVjdHMuCisKK1RoZSBkcml2ZXIgZG9uJ3Qgd29yayBwcm9wZXJseSBhdCBhbGwgdW50aWwgdGhlIGNlcnRhaW4gZmlybXdhcmVzCithcmUgbG9hZGVkLCBpLmUuIG5vIFBDTSBub3IgbWl4ZXIgZGV2aWNlcyB3aWxsIGFwcGVhci4KK1VzZSB0aGUgbWl4YXJ0bG9hZGVyIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBhbHNhLXRvb2xzIHBhY2thZ2UuCisKKworVkVSU0lPTiAwLjEuMAorPT09PT09PT09PT09PQorCitPbmUgbWlYYXJ0OCBib2FyZCB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIDQgYWxzYSBjYXJkcywgZWFjaCB3aXRoIDEKK3N0ZXJlbyBhbmFsb2cgY2FwdHVyZSAncGNtMGMnIGFuZCAxIHN0ZXJlbyBhbmFsb2cgcGxheWJhY2sgJ3BjbTBwJyBkZXZpY2UuCitXaXRoIGEgbWlYYXJ0OEFFUy9FQlUgdGhlcmUgaXMgaW4gYWRkaXRpb24gMSBzdGVyZW8gZGlnaXRhbCBpbnB1dAorJ3BjbTFjJyBhbmQgMSBzdGVyZW8gZGlnaXRhbCBvdXRwdXQgJ3BjbTFwJyBwZXIgY2FyZC4KKworRm9ybWF0cworLS0tLS0tLQorVTgsIFMxNl9MRSwgUzE2X0JFLCBTMjRfM0xFLCBTMjRfM0JFLCBGTE9BVF9MRSwgRkxPQVRfQkUKK1NhbXBsZSByYXRlcyA6IDgwMDAgLSA0ODAwMCBIeiBjb250aW5vdXNseQorCitQbGF5YmFjaworLS0tLS0tLS0KK0ZvciBpbnN0YW5jZSB0aGUgcGxheWJhY2sgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB0byBoYXZlIG1heC4gNAorc3Vic3RyZWFtcyBwZXJmb3JtaW5nIGhhcmR3YXJlIG1peGluZy4gVGhpcyBjb3VsZCBiZSBjaGFuZ2VkIHRvIGEKK21heGltdW0gb2YgMjQgc3Vic3RyZWFtcyBpZiB3aXNoZWQuCitNb25vIGZpbGVzIHdpbGwgYmUgcGxheWVkIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVsLiBFYWNoIGNoYW5uZWwKK2NhbiBiZSBtdXRlZCBmb3IgZWFjaCBzdHJlYW0gdG8gdXNlIDggYW5hbG9nL2RpZ2l0YWwgb3V0cHV0cyBzZXBlcmF0ZWx5LgorCitDYXB0dXJlCistLS0tLS0tCitUaGVyZSBpcyBvbmUgc3Vic3RyZWFtIHBlciBjYXB0dXJlIGRldmljZS4gRm9yIGluc3RhbmNlIG9ubHkgc3RlcmVvCitmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuCisKK01peGVyCistLS0tLQorPE1hc3Rlcj4gYW5kIDxNYXN0ZXIgQ2FwdHVyZT4gOiBhbmFsb2cgdm9sdW1lIGNvbnRyb2wgb2YgcGxheWJhY2sgYW5kIGNhcHR1cmUgUENNLgorPFBDTSAwLTM+IGFuZCA8UENNIENhcHR1cmU+IDogZGlnaXRhbCB2b2x1bWUgY29udHJvbCBvZiBlYWNoIGFuYWxvZyBzdWJzdHJlYW0uCis8QUVTIDAtMz4gYW5kIDxBRVMgQ2FwdHVyZT4gOiBkaWdpdGFsIHZvbHVtZSBjb250cm9sIG9mIGVhY2ggQUVTL0VCVSBzdWJzdHJlYW0uCis8TW9uaXRvcmluZz4gOiBMb29wYmFjayBmcm9tICdwY20wYycgdG8gJ3BjbTBwJyB3aXRoIGRpZ2l0YWwgdm9sdW1lCithbmQgbXV0ZSBjb250cm9sLgorCitSZW0gOiBmb3IgYmVzdCBhdWRpbyBxdWFsaXR5IHRyeSB0byBrZWVwIGEgMCBhdHRlbnVhdGlvbiBvbiB0aGUgUENNCithbmQgQUVTIHZvbHVtZSBjb250cm9scyB3aGljaCBpcyBzZXQgYnkgMjE5IGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMjU1CisoYWJvdXQgODYlIHdpdGggYWxzYW1peGVyKQorCisKK05PVCBZRVQgSU1QTEVNRU5URUQKKz09PT09PT09PT09PT09PT09PT0KKworLSBleHRlcm5hbCBjbG9jayBzdXBwb3J0IChBRVMvRUJVLCBXb3JkIENsb2NrLCBUaW1lIENvZGUsIFZpZGVvIFN5bmMpCistIE1QRUcgYXVkaW8gZm9ybWF0cworLSBtb25vIHJlY29yZAorLSBvbi1ib2FyZCBlZmZlY3RzIGFuZCBzYW1wbGVyYXRlIGNvbnZlcnNpb25zCistIGxpbmtlZCBzdHJlYW1zCisKKworRklSTVdBUkUKKz09PT09PT09CisKK1tBcyBvZiAyLjYuMTEsIHRoZSBmaXJtd2FyZSBjYW4gYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkgd2l0aCBob3RwbHVnCisgd2hlbiBDT05GSUdfRldfTE9BREVSIGlzIHNldC4gIFRoZSBtaXhhcnRsb2FkZXIgaXMgbmVjZXNzYXJ5IG9ubHkKKyBmb3Igb2xkZXIgdmVyc2lvbnMgb3Igd2hlbiB5b3UgYnVpbGQgdGhlIGRyaXZlciBpbnRvIGtlcm5lbC5dCisgCitGb3IgbG9hZGluZyB0aGUgZmlybXdhcmUgYXV0b21hdGljYWxseSBhZnRlciB0aGUgbW9kdWxlIGlzIGxvYWRlZCwgdXNlCit0aGUgcG9zdC1pbnN0YWxsIGNvbW1hbmQuICBGb3IgZXhhbXBsZSwgYWRkIHRoZSBmb2xsb3dpbmcgZW50cnkgdG8KKy9ldGMvbW9kcHJvYmUuY29uZiBmb3IgbWlYYXJ0IGRyaXZlcjoKKworCWluc3RhbGwgc25kLW1peGFydCAvc2Jpbi9tb2Rwcm9iZSAtLWZpcnN0LXRpbWUgLWkgc25kLW1peGFydCAmJiBcCisJCQkgICAvdXNyL2Jpbi9taXhhcnRsb2FkZXIKKyhmb3IgMi4yLzIuNCBrZXJuZWxzLCBhZGQgInBvc3QtaW5zdGFsbCBzbmQtbWl4YXJ0IC91c3IvYmluL3Z4bG9hZGVyIiB0bworIC9ldGMvbW9kdWxlcy5jb25mLCBpbnN0ZWFkLikKKworVGhlIGZpcm13YXJlIGJpbmFyaWVzIGFyZSBpbnN0YWxsZWQgb24gL3Vzci9zaGFyZS9hbHNhL2Zpcm13YXJlCisob3IgL3Vzci9sb2NhbC9zaGFyZS9hbHNhL2Zpcm13YXJlLCBkZXBlbmRpbmcgdG8gdGhlIHByZWZpeCBvcHRpb24gb2YKK2NvbmZpZ3VyZSkuICBUaGVyZSB3aWxsIGJlIGEgbWlYYXJ0LmNvbmYgZmlsZSwgd2hpY2ggZGVmaW5lIHRoZSBkc3AgaW1hZ2UKK2ZpbGVzLgorCitUaGUgZmlybXdhcmUgZmlsZXMgYXJlIGNvcHlyaWdodCBieSBEaWdpZ3JhbSBTQQorCisKK0NPUFlSSUdIVAorPT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMyBEaWdpZ3JhbSBTQSA8YWxzYUBkaWdpZ3JhbS5jb20+CitEaXN0cmlidXRhbGJlIHVuZGVyIEdQTC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9PU1MtRW11bGF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9PU1MtRW11bGF0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzJhMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL09TUy1FbXVsYXRpb24udHh0CkBAIC0wLDAgKzEsMjk3IEBACisJCU5PVEVTIE9OIEtFUk5FTCBPU1MtRU1VTEFUSU9OCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkJSmFuLiAyMiwgMjAwNCAgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorCisKK01vZHVsZXMKKz09PT09PT0KKworQUxTQSBwcm92aWRlcyBhIHBvd2VyZnVsIE9TUyBlbXVsYXRpb24gb24gdGhlIGtlcm5lbC4KK1RoZSBPU1MgZW11bGF0aW9uIGZvciBQQ00sIG1peGVyIGFuZCBzZXF1ZW5jZXIgZGV2aWNlcyBpcyBpbXBsZW1lbnRlZAorYXMgYWRkLW9uIGtlcm5lbCBtb2R1bGVzLCBzbmQtcGNtLW9zcywgc25kLW1peGVyLW9zcyBhbmQgc25kLXNlcS1vc3MuCitXaGVuIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgT1NTIFBDTSwgbWl4ZXIgb3Igc2VxdWVuY2VyIGRldmljZXMsIHRoZQorY29ycmVzcG9uZGluZyBtb2R1bGUgaGFzIHRvIGJlIGxvYWRlZC4KKworVGhlc2UgbW9kdWxlcyBhcmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBzZXJ2aWNlCitpcyBjYWxsZWQuICBUaGUgYWxpYXMgaXMgZGVmaW5lZCBzb3VuZC1zZXJ2aWNlLXgteSwgd2hlcmUgeCBhbmQgeSBhcmUKK3RoZSBjYXJkIG51bWJlciBhbmQgdGhlIG1pbm9yIHVuaXQgbnVtYmVyLiAgVXN1YWxseSB5b3UgZG9uJ3QgaGF2ZSB0bworZGVmaW5lIHRoZXNlIGFsaWFzZXMgYnkgeW91cnNlbGYuCisKK09ubHkgbmVjZXNzYXJ5IHN0ZXAgZm9yIGF1dG8tbG9hZGluZyBvZiBPU1MgbW9kdWxlcyBpcyB0byBkZWZpbmUgdGhlCitjYXJkIGFsaWFzIGluIC9ldGMvbW9kcHJvYmUuY29uZiwgc3VjaCBhcworCisJYWxpYXMgc291bmQtc2xvdC0wIHNuZC1lbXUxMGsxCisKK0FzIHRoZSBzZWNvbmQgY2FyZCwgZGVmaW5lIHNvdW5kLXNsb3QtMSBhcyB3ZWxsLgorTm90ZSB0aGF0IHlvdSBjYW4ndCB1c2UgdGhlIGFsaWFzZWQgbmFtZSBhcyB0aGUgdGFyZ2V0IG5hbWUgKGkuZS4KKyJhbGlhcyBzb3VuZC1zbG90LTAgc25kLWNhcmQtMCIgZG9lc24ndCB3b3JrIGFueSBtb3JlIGxpa2UgdGhlIG9sZAorbW9kdXRpbHMpLgorCitUaGUgY3VycmVudGx5IGF2YWlsYWJsZSBPU1MgY29uZmlndXJhdGlvbiBpcyBzaG93biBpbgorL3Byb2MvYXNvdW5kL29zcy9zbmRzdGF0LiAgVGhpcyBzaG93cyBpbiB0aGUgc2FtZSBzeW50YXggb2YKKy9kZXYvc25kc3RhdCwgd2hpY2ggaXMgYXZhaWxhYmxlIG9uIHRoZSBjb21tZXJjaWFsIE9TUyBkcml2ZXIuCitPbiBBTFNBLCB5b3UgY2FuIHN5bWxpbmsgL2Rldi9zbmRzdGF0IHRvIHRoaXMgcHJvYyBmaWxlLgorCitQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZXZpY2VzIGxpc3RlZCBpbiB0aGlzIHByb2MgZmlsZSBhcHBlYXIgb25seQorYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgT1NTLWVtdWxhdGlvbiBtb2R1bGUgaXMgbG9hZGVkLiAgRG9uJ3Qgd29ycnkKK2V2ZW4gaWYgIk5PVCBFTkFCTEVEIElOIENPTkZJRyIgaXMgc2hvd24gaW4gaXQuCisKKworRGV2aWNlIE1hcHBpbmcKKz09PT09PT09PT09PT09CisKK0FMU0Egc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBPU1MgZGV2aWNlIGZpbGVzOgorCisJUENNOgorCQkvZGV2L2RzcFgKKwkJL2Rldi9hZHNwWAorCisJTWl4ZXI6CisJCS9kZXYvbWl4ZXJYCisKKwlNSURJOgorCQkvZGV2L21pZGkwWAorCQkvZGV2L2FtaWRpMFgKKworCVNlcXVlbmNlcjoKKwkJL2Rldi9zZXF1ZW5jZXIKKwkJL2Rldi9zZXF1ZW5jZXIyIChha2EgL2Rldi9tdXNpYykKKword2hlcmUgWCBpcyB0aGUgY2FyZCBudW1iZXIgZnJvbSAwIHRvIDcuCisKKyhOT1RFOiBTb21lIGRpc3RyaWJ1dGlvbnMgaGF2ZSB0aGUgZGV2aWNlIGZpbGVzIGxpa2UgL2Rldi9taWRpMCBhbmQKKyAgICAgICAvZGV2L21pZGkxLiAgVGhleSBhcmUgTk9UIGZvciBPU1MgYnV0IGZvciB0Y2xtaWRpLCB3aGljaCBpcworICAgICAgIGEgdG90YWxseSBkaWZmZXJlbnQgdGhpbmcuKQorCitVbmxpa2UgdGhlIHJlYWwgT1NTLCBBTFNBIGNhbm5vdCB1c2UgdGhlIGRldmljZSBmaWxlcyBtb3JlIHRoYW4gdGhlCithc3NpZ25lZCBvbmVzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBjYXJkIGNhbm5vdCB1c2UgL2Rldi9kc3AxIG9yCisvZGV2L2RzcDIsIGJ1dCBvbmx5IC9kZXYvZHNwMCBhbmQgL2Rldi9hZHNwMC4KKworQXMgc2VlbiBhYm92ZSwgUENNIGFuZCBNSURJIG1heSBoYXZlIHR3byBkZXZpY2VzLiAgVXN1YWxseSwgdGhlIGZpcnN0CitQQ00gZGV2aWNlIChodzowLDAgaW4gQUxTQSkgaXMgbWFwcGVkIHRvIC9kZXYvZHNwIGFuZCB0aGUgc2Vjb25kYXJ5CitkZXZpY2UgKGh3OjAsMSkgdG8gL2Rldi9hZHNwIChpZiBhdmFpbGFibGUpLiAgRm9yIE1JREksIC9kZXYvbWlkaSBhbmQKKy9kZXYvYW1pZGksIHJlc3BlY3RpdmVseS4KKworWW91IGNhbiBjaGFuZ2UgdGhpcyBkZXZpY2UgbWFwcGluZyB2aWEgdGhlIG1vZHVsZSBvcHRpb25zIG9mCitzbmQtcGNtLW9zcyBhbmQgc25kLXJhd21pZGkuICBJbiB0aGUgY2FzZSBvZiBQQ00sIHRoZSBmb2xsb3dpbmcKK29wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3Igc25kLXBjbS1vc3M6CisKKwlkc3BfbWFwCQlQQ00gZGV2aWNlIG51bWJlciBhc3NpZ25lZCB0byAvZGV2L2RzcFgKKwkJCShkZWZhdWx0ID0gMCkKKwlhZHNwX21hcAlQQ00gZGV2aWNlIG51bWJlciBhc3NpZ25lZCB0byAvZGV2L2Fkc3BYCisJCQkoZGVmYXVsdCA9IDEpCisKK0ZvciBleGFtcGxlLCB0byBtYXAgdGhlIHRoaXJkIFBDTSBkZXZpY2UgKGh3OjAsMikgdG8gL2Rldi9hZHNwMCwKK2RlZmluZSBsaWtlIHRoaXM6CisKKwlvcHRpb25zIHNuZC1wY20tb3NzIGFkc3BfbWFwPTIKKworVGhlIG9wdGlvbnMgdGFrZSBhcnJheXMuICBGb3IgY29uZmlndXJpbmcgdGhlIHNlY29uZCBjYXJkLCBzcGVjaWZ5Cit0d28gZW50cmllcyBzZXBhcmF0ZWQgYnkgY29tbWEuICBGb3IgZXhhbXBsZSwgdG8gbWFwIHRoZSB0aGlyZCBQQ00KK2RldmljZSBvbiB0aGUgc2Vjb25kIGNhcmQgdG8gL2Rldi9hZHNwMSwgZGVmaW5lIGxpa2UgYmVsb3c6CisKKwlvcHRpb25zIHNuZC1wY20tb3NzIGFkc3BfbWFwPTAsMgorCitUbyBjaGFuZ2UgdGhlIG1hcHBpbmcgb2YgTUlESSBkZXZpY2VzLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlCithdmFpbGFibGUgZm9yIHNuZC1yYXdtaWRpOgorCisJbWlkaV9tYXAJTUlESSBkZXZpY2UgbnVtYmVyIGFzc2lnbmVkIHRvIC9kZXYvbWlkaTBYCisJCQkoZGVmYXVsdCA9IDApCisJYW1pZGlfbWFwCU1JREkgZGV2aWNlIG51bWJlciBhc3NpZ25lZCB0byAvZGV2L2FtaWRpMFgKKwkJCShkZWZhdWx0ID0gMSkKKworRm9yIGV4YW1wbGUsIHRvIGFzc2lnbiB0aGUgdGhpcmQgTUlESSBkZXZpY2Ugb24gdGhlIGZpcnN0IGNhcmQgdG8KKy9kZXYvbWlkaTAwLCBkZWZpbmUgYXMgZm9sbG93czoKKworCW9wdGlvbnMgc25kLXJhd21pZGkgbWlkaV9tYXA9MgorCisKK1BDTSBNb2RlCis9PT09PT09PQorCitBcyBkZWZhdWx0LCBBTFNBIGVtdWxhdGVzIHRoZSBPU1MgUENNIHdpdGggc28tY2FsbGVkIHBsdWdpbiBsYXllciwKK2kuZS4gdHJpZXMgdG8gY29udmVydCB0aGUgc2FtcGxlIGZvcm1hdCwgcmF0ZSBvciBjaGFubmVscworYXV0b21hdGljYWxseSB3aGVuIHRoZSBjYXJkIGRvZXNuJ3Qgc3VwcG9ydCBpdCBuYXRpdmVseS4KK1RoaXMgd2lsbCBsZWFkIHRvIHNvbWUgcHJvYmxlbXMgZm9yIHNvbWUgYXBwbGljYXRpb25zIGxpa2UgcXVha2Ugb3IKK3dpbmUsIGVzcGVjaWFsbHkgaWYgdGhleSB1c2UgdGhlIGNhcmQgb25seSBpbiB0aGUgTU1BUCBtb2RlLgorCitJbiBzdWNoIGEgY2FzZSwgeW91IGNhbiBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIFBDTSBwZXIgYXBwbGljYXRpb24gYnkKK3dyaXRpbmcgYSBjb21tYW5kIHRvIHRoZSBwcm9jIGZpbGUuICBUaGVyZSBpcyBhIHByb2MgZmlsZSBmb3IgZWFjaCBQQ00KK3N0cmVhbSwgL3Byb2MvYXNvdW5kL2NhcmRYL3BjbVlbY3BdL29zcywgd2hlcmUgWCBpcyB0aGUgY2FyZCBudW1iZXIKKyh6ZXJvLWJhc2VkKSwgWSB0aGUgUENNIGRldmljZSBudW1iZXIgKHplcm8tYmFzZWQpLCBhbmQgJ3AnIGlzIGZvcgorcGxheWJhY2sgYW5kICdjJyBmb3IgY2FwdHVyZSwgcmVzcGVjdGl2ZWx5LiAgTm90ZSB0aGF0IHRoaXMgcHJvYyBmaWxlCitleGlzdHMgb25seSBhZnRlciBzbmQtcGNtLW9zcyBtb2R1bGUgaXMgbG9hZGVkLgorCitUaGUgY29tbWFuZCBzZXF1ZW5jZSBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXg6CisKKwlhcHBfbmFtZSBmcmFnbWVudHMgZnJhZ21lbnRfc2l6ZSBbb3B0aW9uc10KKworYXBwX25hbWUgaXMgdGhlIG5hbWUgb2YgYXBwbGljYXRpb24gd2l0aCAoaGlnaGVyIHByaW9yaXR5KSBvciB3aXRob3V0CitwYXRoLgorZnJhZ21lbnRzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBvciB6ZXJvIGlmIG5vIHNwZWNpZmljCitudW1iZXIgaXMgZ2l2ZW4uCitmcmFnbWVudF9zaXplIGlzIHRoZSBzaXplIG9mIGZyYWdtZW50IGluIGJ5dGVzIG9yIHplcm8gaWYgbm90IGdpdmVuLgorb3B0aW9ucyBpcyB0aGUgb3B0aW9uYWwgcGFyYW1ldGVycy4gIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUKK2F2YWlsYWJsZToKKworCWRpc2FibGUJCXRoZSBhcHBsaWNhdGlvbiB0cmllcyB0byBvcGVuIGEgcGNtIGRldmljZSBmb3IKKwkJCXRoaXMgY2hhbm5lbCBidXQgZG9lcyBub3Qgd2FudCB0byB1c2UgaXQuCisJZGlyZWN0CQlkb24ndCB1c2UgcGx1Z2lucworCWJsb2NrCQlmb3JjZSBibG9jayBvcGVuIG1vZGUKKwlub24tYmxvY2sJZm9yY2Ugbm9uLWJsb2NrIG9wZW4gbW9kZQorCXBhcnRpYWwtZnJhZwl3cml0ZSBhbHNvIHBhcnRpYWwgZnJhZ21lbnRzIChhZmZlY3RzIHBsYXliYWNrIG9ubHkpCisJbm8tc2lsZW5jZQlkbyBub3QgZmlsbCBzaWxlbmNlIGFoZWFkIHRvIGF2b2lkIGNsaWNrcworCitUaGUgZGlzYWJsZSBvcHRpb24gaXMgdXNlZnVsIHdoZW4gb25lIHN0cmVhbSBkaXJlY3Rpb24gKHBsYXliYWNrIG9yCitjYXB0dXJlKSBpcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIGFsdGhvdWdoIHRoZQoraGFyZHdhcmUgaXRzZWxmIGRvZXMgc3VwcG9ydCBib3RoIGRpcmVjdGlvbnMuCitUaGUgZGlyZWN0IG9wdGlvbiBpcyB1c2VkLCBhcyBtZW50aW9uZWQgYWJvdmUsIHRvIGJ5cGFzcyB0aGUgYXV0b21hdGljCitjb252ZXJzaW9uIGFuZCB1c2VmdWwgZm9yIE1NQVAtYXBwbGljYXRpb25zLgorRm9yIGV4YW1wbGUsIHRvIHBsYXliYWNrIHRoZSBmaXJzdCBQQ00gZGV2aWNlIHdpdGhvdXQgcGx1Z2lucyBmb3IKK3F1YWtlLCBzZW5kIGEgY29tbWFuZCB2aWEgZWNobyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKwklIGVjaG8gInF1YWtlIDAgMCBkaXJlY3QiID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL29zcworCitXaGlsZSBxdWFrZSB3YW50cyBvbmx5IHBsYXliYWNrLCB5b3UgbWF5IGFwcGVuZCB0aGUgc2Vjb25kIGNvbW1hbmQKK3RvIG5vdGlmeSBkcml2ZXIgdGhhdCBvbmx5IHRoaXMgZGlyZWN0aW9uIGlzIGFib3V0IHRvIGJlIGFsbG9jYXRlZDoKKworCSUgZWNobyAicXVha2UgMCAwIGRpc2FibGUiID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBjL29zcworCitUaGUgcGVybWlzc2lvbiBvZiBwcm9jIGZpbGVzIGRlcGVuZCBvbiB0aGUgbW9kdWxlIG9wdGlvbnMgb2Ygc25kLgorQXMgZGVmYXVsdCBpdCdzIHNldCBhcyByb290LCBzbyB5b3UnbGwgbGlrZWx5IG5lZWQgdG8gYmUgc3VwZXJ1c2VyIGZvcgorc2VuZGluZyB0aGUgY29tbWFuZCBhYm92ZS4KKworVGhlIGJsb2NrIGFuZCBub24tYmxvY2sgb3B0aW9ucyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCitvcGVuaW5nIHRoZSBkZXZpY2UgZmlsZS4KKworQXMgZGVmYXVsdCwgQUxTQSBiZWhhdmVzIGFzIG9yaWdpbmFsIE9TUyBkcml2ZXJzLCBpLmUuIGRvZXMgbm90IGJsb2NrCit0aGUgZmlsZSB3aGVuIGl0J3MgYnVzeS4gVGhlIC1FQlVTWSBlcnJvciBpcyByZXR1cm5lZCBpbiB0aGlzIGNhc2UuCisKK1RoaXMgYmxvY2tpbmcgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgZ2xvYmFsbHkgdmlhIG5vbmJsb2NrX29wZW4KK21vZHVsZSBvcHRpb24gb2Ygc25kLXBjbS1vc3MuICBGb3IgdXNpbmcgdGhlIGJsb2NraW5nIG1vZGUgYXMgZGVmYXVsdAorZm9yIE9TUyBkZXZpY2VzLCBkZWZpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgorCisJb3B0aW9ucyBzbmQtcGNtLW9zcyBub25ibG9ja19vcGVuPTAKKworVGhlIHBhcnRpYWwtZnJhZyBhbmQgbm8tc2lsZW5jZSBjb21tYW5kcyBoYXZlIGJlZW4gYWRkZWQgcmVjZW50bHkuCitCb3RoIGNvbW1hbmRzIGFyZSBmb3Igb3B0aW1pemF0aW9uIHVzZSBvbmx5LiAgVGhlIGZvcm1lciBjb21tYW5kCitzcGVjaWZpZXMgdG8gaW52b2tlIHRoZSB3cml0ZSB0cmFuc2ZlciBvbmx5IHdoZW4gdGhlIHdob2xlIGZyYWdtZW50IGlzCitmaWxsZWQuICBUaGUgbGF0dGVyIHN0b3BzIHdyaXRpbmcgdGhlIHNpbGVuY2UgZGF0YSBhaGVhZAorYXV0b21hdGljYWxseS4gIEJvdGggYXJlIGRpc2FibGVkIGFzIGRlZmF1bHQuCisKK1lvdSBjYW4gY2hlY2sgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGNvbmZpZ3VyYXRpb24gYnkgcmVhZGluZyB0aGUgcHJvYworZmlsZS4gIFRoZSByZWFkIGltYWdlIGNhbiBiZSBzZW50IHRvIHRoZSBwcm9jIGZpbGUgYWdhaW4sIGhlbmNlIHlvdQorY2FuIHNhdmUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbgorCisJJSBjYXQgL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL29zcyA+IC9zb21ld2hlcmUvb3NzLWNmZworCithbmQgcmVzdG9yZSBpdCBsaWtlCisKKwklIGNhdCAvc29tZXdoZXJlL29zcy1jZmcgPiAvcHJvYy9hc291bmQvY2FyZDAvcGNtMHAvb3NzCisKK0Fsc28sIGZvciBjbGVhcmluZyBhbGwgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgc2VuZCAiZXJhc2UiIGNvbW1hbmQKK2FzIGJlbG93OgorCisJJSBlY2hvICJlcmFzZSIgPiAvcHJvYy9hc291bmQvY2FyZDAvcGNtMHAvb3NzCisKKworTWl4ZXIgRWxlbWVudHMKKz09PT09PT09PT09PT09CisKK1NpbmNlIEFMU0EgaGFzIGNvbXBsZXRlbHkgZGlmZmVyZW50IG1peGVyIGludGVyZmFjZSwgdGhlIGVtdWxhdGlvbiBvZgorT1NTIG1peGVyIGlzIHJlbGF0aXZlbHkgY29tcGxpY2F0ZWQuICBBTFNBIGJ1aWxkcyB1cCBhIG1peGVyIGVsZW1lbnQKK2Zyb20gc2V2ZXJhbCBkaWZmZXJlbnQgQUxTQSAobWl4ZXIpIGNvbnRyb2xzIGJhc2VkIG9uIHRoZSBuYW1lCitzdHJpbmcuICBGb3IgZXhhbXBsZSwgdGhlIHZvbHVtZSBlbGVtZW50IFNPVU5EX01JWEVSX1BDTSBpcyBjb21wb3NlZAorZnJvbSAiUENNIFBsYXliYWNrIFZvbHVtZSIgYW5kICJQQ00gUGxheWJhY2sgU3dpdGNoIiBjb250cm9scyBmb3IgdGhlCitwbGF5YmFjayBkaXJlY3Rpb24gYW5kIGZyb20gIlBDTSBDYXB0dXJlIFZvbHVtZSIgYW5kICJQQ00gQ2FwdHVyZQorU3dpdGNoIiBmb3IgdGhlIGNhcHR1cmUgZGlyZWN0b3J5IChpZiBleGlzdHMpLiAgV2hlbiB0aGUgUENNIHZvbHVtZSBvZgorT1NTIGlzIGNoYW5nZWQsIGFsbCB0aGUgdm9sdW1lIGFuZCBzd2l0Y2ggY29udHJvbHMgYWJvdmUgYXJlIGFkanVzdGVkCithdXRvbWF0aWNhbGx5LgorCitBcyBkZWZhdWx0LCBBTFNBIHVzZXMgdGhlIGZvbGxvd2luZyBjb250cm9sIGZvciBPU1Mgdm9sdW1lczoKKworCU9TUyB2b2x1bWUJCUFMU0EgY29udHJvbAkJSW5kZXgKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNPVU5EX01JWEVSX1ZPTFVNRSAJTWFzdGVyCQkJMAorCVNPVU5EX01JWEVSX0JBU1MJVG9uZSBDb250cm9sIC0gQmFzcwkwCisJU09VTkRfTUlYRVJfVFJFQkxFCVRvbmUgQ29udHJvbCAtIFRyZWJsZQkwCisJU09VTkRfTUlYRVJfU1lOVEgJU3ludGgJCQkwCisJU09VTkRfTUlYRVJfUENNCQlQQ00JCQkwCisJU09VTkRfTUlYRVJfU1BFQUtFUglQQyBTcGVha2VyIAkJMAorCVNPVU5EX01JWEVSX0xJTkUJTGluZQkJCTAKKwlTT1VORF9NSVhFUl9NSUMJCU1pYyAJCQkwCisJU09VTkRfTUlYRVJfQ0QJCUNEIAkJCTAKKwlTT1VORF9NSVhFUl9JTUlYCU1vbml0b3IgTWl4IAkJMAorCVNPVU5EX01JWEVSX0FMVFBDTQlQQ00JCQkxCisJU09VTkRfTUlYRVJfUkVDTEVWCShub3QgYXNzaWduZWQpCisJU09VTkRfTUlYRVJfSUdBSU4JQ2FwdHVyZQkJCTAKKwlTT1VORF9NSVhFUl9PR0FJTglQbGF5YmFjawkJMAorCVNPVU5EX01JWEVSX0xJTkUxCUF1eAkJCTAKKwlTT1VORF9NSVhFUl9MSU5FMglBdXgJCQkxCisJU09VTkRfTUlYRVJfTElORTMJQXV4CQkJMgorCVNPVU5EX01JWEVSX0RJR0lUQUwxCURpZ2l0YWwJCQkwCisJU09VTkRfTUlYRVJfRElHSVRBTDIJRGlnaXRhbAkJCTEKKwlTT1VORF9NSVhFUl9ESUdJVEFMMwlEaWdpdGFsCQkJMgorCVNPVU5EX01JWEVSX1BIT05FSU4JUGhvbmUJCQkwCisJU09VTkRfTUlYRVJfUEhPTkVPVVQJUGhvbmUJCQkxCisJU09VTkRfTUlYRVJfVklERU8JVmlkZW8JCQkwCisJU09VTkRfTUlYRVJfUkFESU8JUmFkaW8JCQkwCisJU09VTkRfTUlYRVJfTU9OSVRPUglNb25pdG9yCQkJMAorCitUaGUgc2Vjb25kIGNvbHVtbiBpcyB0aGUgYmFzZS1zdHJpbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgQUxTQQorY29udHJvbC4gIEluIGZhY3QsIHRoZSBjb250cm9scyB3aXRoICJYWFggW1BsYXliYWNrfENhcHR1cmVdCitbVm9sdW1lfFN3aXRjaF0iIHdpbGwgYmUgY2hlY2tlZCBpbiBhZGRpdGlvbi4KKworVGhlIGN1cnJlbnQgYXNzaWdubWVudCBvZiB0aGVzZSBtaXhlciBlbGVtZW50cyBpcyBsaXN0ZWQgaW4gdGhlIHByb2MKK2ZpbGUsIC9wcm9jL2Fzb3VuZC9jYXJkWC9vc3NfbWl4ZXIsIHdoaWNoIHdpbGwgYmUgbGlrZSB0aGUgZm9sbG93aW5nCisKKwlWT0xVTUUgIk1hc3RlciIgMAorCUJBU1MgIiIgMAorCVRSRUJMRSAiIiAwCisJU1lOVEggIiIgMAorCVBDTSAiUENNIiAwCisJLi4uCisKK3doZXJlIHRoZSBmaXJzdCBjb2x1bW4gaXMgdGhlIE9TUyB2b2x1bWUgZWxlbWVudCwgdGhlIHNlY29uZCBjb2x1bW4KK3RoZSBiYXNlLXN0cmluZyBvZiB0aGUgY29ycmVzcG9uZGluZyBBTFNBIGNvbnRyb2wsIGFuZCB0aGUgdGhpcmQgdGhlCitjb250cm9sIGluZGV4LiAgV2hlbiB0aGUgc3RyaW5nIGlzIGVtcHR5LCBpdCBtZWFucyB0aGF0IHRoZQorY29ycmVzcG9uZGluZyBPU1MgY29udHJvbCBpcyBub3QgYXZhaWxhYmxlLgorCitGb3IgY2hhbmdpbmcgdGhlIGFzc2lnbm1lbnQsIHlvdSBjYW4gd3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdGhpcworcHJvYyBmaWxlLiAgRm9yIGV4YW1wbGUsIHRvIG1hcCAiV2F2ZSBQbGF5YmFjayIgdG8gdGhlIFBDTSB2b2x1bWUsCitzZW5kIHRoZSBjb21tYW5kIGxpa2UgdGhlIGZvbGxvd2luZzoKKworCSUgZWNobyAnVk9MVU1FICJXYXZlIFBsYXliYWNrIiAwJyA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9vc3NfbWl4ZXIKKworVGhlIGNvbW1hbmQgaXMgZXhhY3RseSBhcyBzYW1lIGFzIGxpc3RlZCBpbiB0aGUgcHJvYyBmaWxlLiAgWW91IGNhbgorY2hhbmdlIG9uZSBvciBtb3JlIGVsZW1lbnRzLCBvbmUgdm9sdW1lIHBlciBsaW5lLiAgSW4gdGhlIGxhc3QKK2V4YW1wbGUsIGJvdGggIldhdmUgUGxheWJhY2sgVm9sdW1lIiBhbmQgIldhdmUgUGxheWJhY2sgU3dpdGNoIiB3aWxsCitiZSBhZmZlY3RlZCB3aGVuIFBDTSB2b2x1bWUgaXMgY2hhbmdlZC4KKworTGlrZSB0aGUgY2FzZSBvZiBQQ00gcHJvYyBmaWxlLCB0aGUgcGVybWlzc2lvbiBvZiBwcm9jIGZpbGVzIGRlcGVuZCBvbgordGhlIG1vZHVsZSBvcHRpb25zIG9mIHNuZC4gIHlvdSdsbCBsaWtlbHkgbmVlZCB0byBiZSBzdXBlcnVzZXIgZm9yCitzZW5kaW5nIHRoZSBjb21tYW5kIGFib3ZlLgorCitBcyB3ZWxsIGFzIGluIHRoZSBjYXNlIG9mIFBDTSBwcm9jIGZpbGUsIHlvdSBjYW4gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKK2N1cnJlbnQgbWl4ZXIgY29uZmlndXJhdGlvbiBieSByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSB3aG9sZSBmaWxlCitpbWFnZS4KKworCitVbnN1cHBvcnRlZCBGZWF0dXJlcworPT09PT09PT09PT09PT09PT09PT0KKworTU1BUCBvbiBJQ0UxNzEyIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSUNFMTcxMiBzdXBwb3J0cyBvbmx5IHRoZSB1bmNvbnZlbnRpb25hbCBmb3JtYXQsIGludGVybGVhdmVkCisxMC1jaGFubmVscyAyNGJpdCAocGFja2VkIGluIDMyYml0KSBmb3JtYXQuICBUaGVyZWZvcmUgeW91IGNhbm5vdCBtbWFwCit0aGUgYnVmZmVyIGFzIHRoZSBjb252ZW50aW9uYWwgKG1vbm8gb3IgMi1jaGFubmVscywgOCBvciAxNmJpdCkgZm9ybWF0CitvbiBPU1MuCisKK1VTQiBkZXZpY2VzCistLS0tLS0tLS0tLQorU29tZSBVU0IgZGV2aWNlcyBzdXBwb3J0IG9ubHkgMjRiaXQgZm9ybWF0IHBhY2tlZCBpbiAzYnl0ZXMuICBUaGlzCitmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCBieSBPU1MgYW5kIG5vIGNvbnZlcnNpb24gaXMgcHJvdmlkZWQgYnkga2VybmVsCitPU1MgZW11bGF0aW9uLiAgWW91IGNhbiB1c2UgdGhlIHVzZXItc3BhY2UgT1NTIGVtdWxhdGlvbiB2aWEgbGliYW9zcworaW5zdGVhZC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1Byb2NmaWxlLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Qcm9jZmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjNWQ2NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Qcm9jZmlsZS50eHQKQEAgLTAsMCArMSwxOTEgQEAKKwkJUHJvYyBGaWxlcyBvZiBBTFNBIERyaXZlcnMKKwkJPT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorCitHZW5lcmFsCistLS0tLS0tCisKK0FMU0EgaGFzIGl0cyBvd24gcHJvYyB0cmVlLCAvcHJvYy9hc291bmQuICBNYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhcmUKK2ZvdW5kIGluIHRoaXMgdHJlZS4gIFdoZW4geW91IGVuY291bnRlciBhIHByb2JsZW0gYW5kIG5lZWQgZGVidWdnaW5nLAorY2hlY2sgdGhlIGZpbGVzIGxpc3RlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorCitFYWNoIGNhcmQgaGFzIGl0cyBzdWJ0cmVlIGNhcmRYLCB3aGVyZSBYIGlzIGZyb20gMCB0byA3LiBUaGUKK2NhcmQtc3BlY2lmaWMgZmlsZXMgYXJlIHN0b3JlZCBpbiB0aGUgY2FyZCogc3ViZGlyZWN0b3JpZXMuCisKKworR2xvYmFsIEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0KKworY2FyZHMKKwlTaG93cyB0aGUgbGlzdCBvZiBjdXJyZW50bHkgY29uZmlndXJlZCBBTFNBIGRyaXZlcnMsCisJaW5kZXgsIHRoZSBpZCBzdHJpbmcsIHNob3J0IGFuZCBsb25nIGRlc2NyaXB0aW9ucy4KKwordmVyc2lvbgorCVNob3dzIHRoZSB2ZXJzaW9uIHN0cmluZyBhbmQgY29tcGlsZSBkYXRlLgorCittb2R1bGVzCisJTGlzdHMgdGhlIG1vZHVsZSBvZiBlYWNoIGNhcmQKKworZGV2aWNlcworCUxpc3RzIHRoZSBBTFNBIG5hdGl2ZSBkZXZpY2UgbWFwcGluZ3MuCisKK21lbWluZm8KKwlTaG93cyB0aGUgc3RhdHVzIG9mIGFsbG9jYXRlZCBwYWdlcyB2aWEgQUxTQSBkcml2ZXJzLgorCUFwcGVhcnMgb25seSB3aGVuIENPTkZJR19TTkRfREVCVUc9eS4KKworaHdkZXAKKwlMaXN0cyB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBod2RlcCBkZXZpY2VzIGluIGZvcm1hdCBvZgorCTxjYXJkPi08ZGV2aWNlPjogPG5hbWU+CisKK3BjbQorCUxpc3RzIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIFBDTSBkZXZpY2VzIGluIGZvcm1hdCBvZgorCTxjYXJkPi08ZGV2aWNlPjogPGlkPjogPG5hbWU+IDogPHN1Yi1zdHJlYW1zPgorCit0aW1lcgorCUxpc3RzIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIHRpbWVyIGRldmljZXMKKworCitvc3MvZGV2aWNlcworCUxpc3RzIHRoZSBPU1MgZGV2aWNlIG1hcHBpbmdzLgorCitvc3Mvc25kc3RhdAorCVByb3ZpZGVzIHRoZSBvdXRwdXQgY29tcGF0aWJsZSB3aXRoIC9kZXYvc25kc3RhdC4KKwlZb3UgY2FuIHN5bWxpbmsgdGhpcyB0byAvZGV2L3NuZHN0YXQuCisKKworQ2FyZCBTcGVjaWZpYyBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY2FyZC1zcGVjaWZpYyBmaWxlcyBhcmUgZm91bmQgaW4gL3Byb2MvYXNvdW5kL2NhcmQqIGRpcmVjdG9yaWVzLgorU29tZSBkcml2ZXJzIChlLmcuIGNtaXBjaSkgaGF2ZSB0aGVpciBvd24gcHJvYyBlbnRyaWVzIGZvciB0aGUKK3JlZ2lzdGVyIGR1bXAsIGV0YyAoZS5nLiAvcHJvYy9hc291bmQvY2FyZCovY21pcGNpIHNob3dzIHRoZSByZWdpc3RlcgorZHVtcCkuICBUaGVzZSBmaWxlcyB3b3VsZCBiZSByZWFsbHkgaGVscGZ1bCBmb3IgZGVidWdnaW5nLgorCitXaGVuIFBDTSBkZXZpY2VzIGFyZSBhdmFpbGFibGUgb24gdGhpcyBjYXJkLCB5b3UgY2FuIHNlZSBkaXJlY3RvcmllcworbGlrZSBwY20wcCBvciBwY20xYy4gIFRoZXkgaG9sZCB0aGUgUENNIGluZm9ybWF0aW9uIGZvciBlYWNoIFBDTQorc3RyZWFtLiAgVGhlIG51bWJlciBhZnRlciAncGNtJyBpcyB0aGUgUENNIGRldmljZSBudW1iZXIgZnJvbSAwLCBhbmQKK3RoZSBsYXN0ICdwJyBvciAnYycgbWVhbnMgcGxheWJhY2sgb3IgY2FwdHVyZSBkaXJlY3Rpb24uICBUaGUgZmlsZXMgaW4KK3RoaXMgc3VidHJlZSBpcyBkZXNjcmliZWQgbGF0ZXIuCisKK1RoZSBzdGF0dXMgb2YgTUlESSBJL08gaXMgZm91bmQgaW4gbWlkaSogZmlsZXMuICBJdCBzaG93cyB0aGUgZGV2aWNlCituYW1lIGFuZCB0aGUgcmVjZWl2ZWQvdHJhbnNtaXR0ZWQgYnl0ZXMgdGhyb3VnaCB0aGUgTUlESSBkZXZpY2UuCisKK1doZW4gdGhlIGNhcmQgaXMgZXF1aXBwZWQgd2l0aCBBQzk3IGNvZGVjcywgdGhlcmUgYXJlIGNvZGVjOTcjKgorc3ViZGlyZWN0b3JpZXMgKGRlc3JpYmVkIGxhdGVyKS4KKworV2hlbiB0aGUgT1NTIG1peGVyIGVtdWxhdGlvbiBpcyBlbmFibGVkIChhbmQgdGhlIG1vZHVsZSBpcyBsb2FkZWQpLAorb3NzX21peGVyIGZpbGUgYXBwZWFycyBoZXJlLCB0b28uICBUaGlzIHNob3dzIHRoZSBjdXJyZW50IG1hcHBpbmcgb2YKK09TUyBtaXhlciBlbGVtZW50cyB0byB0aGUgQUxTQSBjb250cm9sIGVsZW1lbnRzLiAgWW91IGNhbiBjaGFuZ2UgdGhlCittYXBwaW5nIGJ5IHdyaXRpbmcgdG8gdGhpcyBkZXZpY2UuICBSZWFkIE9TUy1FbXVsYXRpb24udHh0IGZvcgorZGV0YWlscy4KKworCitQQ00gUHJvYyBGaWxlcworLS0tLS0tLS0tLS0tLS0KKworY2FyZCovcGNtKi9pbmZvCisJVGhlIGdlbmVyYWwgaW5mb3JtYXRpb24gb2YgdGhpcyBQQ00gZGV2aWNlOiBjYXJkICMsIGRldmljZSAjLAorCXN1YnN0cmVhbXMsIGV0Yy4KKworY2FyZCovcGNtKi94cnVuX2RlYnVnCisJVGhpcyBmaWxlIGFwcGVhcnMgd2hlbiBDT05GSUdfU05EX0RFQlVHPXkuCisJVGhpcyBzaG93cyB0aGUgc3RhdHVzIG9mIHhydW4gKD0gYnVmZmVyIG92ZXJydW4veHJ1bikgZGVidWcgb2YKKwlBTFNBIFBDTSBtaWRkbGUgbGF5ZXIsIGFzIGFuIGludGVnZXIgZnJvbSAwIHRvIDIuICBUaGUgdmFsdWUKKwljYW4gYmUgY2hhbmdlZCBieSB3cml0aW5nIHRvIHRoaXMgZmlsZSwgc3VjaCBhcworCisJCSAjIGNhdCAyID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL3hydW5fZGVidWcKKworCVdoZW4gdGhpcyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMCwgdGhlIGRyaXZlciB3aWxsIHNob3cgdGhlCisJbWVzc2FnZXMgdG8ga2VybmVsIGxvZyB3aGVuIGFuIHhydW4gaXMgZGV0ZWN0ZWQuICBUaGUgZGVidWcKKwltZXNzYWdlIGlzIHNob3duIGFsc28gd2hlbiB0aGUgaW52YWxpZCBIL1cgcG9pbnRlciBpcyBkZXRlY3RlZAorCWF0IHRoZSB1cGRhdGUgb2YgcGVyaW9kcyAodXN1YWxseSBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0CisJaGFuZGxlcikuCisKKwlXaGVuIHRoaXMgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDEsIHRoZSBkcml2ZXIgd2lsbCBzaG93IHRoZQorCXN0YWNrIHRyYWNlIGFkZGl0aW9uYWxseS4gIFRoaXMgbWF5IGhlbHAgdGhlIGRlYnVnZ2luZy4KKworY2FyZCovcGNtKi9zdWIqL2luZm8KKwlUaGUgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvZiB0aGlzIFBDTSBzdWItc3RyZWFtLgorCitjYXJkKi9wY20qL3N1Yiovc3RhdHVzCisJVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgUENNIHN1Yi1zdHJlYW0sIGVsYXBzZWQgdGltZSwKKwlIL1cgcG9zaXRpb24sIGV0Yy4KKworY2FyZCovcGNtKi9zdWIqL2h3X3BhcmFtcworCVRoZSBoYXJkd2FyZSBwYXJhbWV0ZXJzIHNldCBmb3IgdGhpcyBzdWItc3RyZWFtLgorCitjYXJkKi9wY20qL3N1Yiovc3dfcGFyYW1zCisJVGhlIHNvZnQgcGFyYW1ldGVycyBzZXQgZm9yIHRoaXMgc3ViLXN0cmVhbS4KKworY2FyZCovcGNtKi9zdWIqL3ByZWFsbG9jCisJVGhlIGJ1ZmZlciBwcmUtYWxsb2NhdGlvbiBpbmZvcm1hdGlvbi4KKworCitBQzk3IENvZGVjIEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NhcmQqL2NvZGVjOTcjKi9hYzk3Iz8tPworCVNob3dzIHRoZSBnZW5lcmFsIGluZm9ybWF0aW9uIG9mIHRoaXMgQUM5NyBjb2RlYyBjaGlwLCBzdWNoIGFzCisJbmFtZSwgY2FwYWJpbGl0aWVzLCBzZXQgdXAuCisKK2NhcmQqL2NvZGVjOTcjMC9hYzk3Iz8tPytyZWdzCisJU2hvd3MgdGhlIEFDOTcgcmVnaXN0ZXIgZHVtcC4gIFVzZWZ1bCBmb3IgZGVidWdnaW5nLgorCisJV2hlbiBDT05GSUdfU05EX0RFQlVHIGlzIGVuYWJsZWQsIHlvdSBjYW4gd3JpdGUgdG8gdGhpcyBmaWxlIGZvcgorCWNoYW5naW5nIGFuIEFDOTcgcmVnaXN0ZXIgZGlyZWN0bHkuICBQYXNzIHR3byBoZXggbnVtYmVycy4KKwlGb3IgZXhhbXBsZSwKKworCSMgZWNobyAwMiA5ZjFmID4gL3Byb2MvYXNvdW5kL2NhcmQwL2NvZGVjOTcjMC9hYzk3IzAtMCtyZWdzCisKKworU2VxdWVuY2VyIEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2VxL2RyaXZlcnMKKwlMaXN0cyB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBBTFNBIHNlcXVlbmNlciBkcml2ZXJzLgorCitzZXEvY2xpZW50cworCVNob3dzIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBhdmFpbGFibGUgc2VxdWVuY2VyIGNsaW5ldHMgYW5kCisJcG9ydHMuICBUaGUgY29ubmVjdGlvbiBzdGF0dXMgYW5kIHRoZSBydW5uaW5nIHN0YXR1cyBhcmUgc2hvd24KKwlpbiB0aGlzIGZpbGUsIHRvby4KKworc2VxL3F1ZXVlcworCUxpc3RzIHRoZSBjdXJyZW50bHkgYWxsb2NhdGVkL3J1bm5pbmcgc2VxdWVuZXIgcXVldWVzLgorCitzZXEvdGltZXIKKwlMaXN0cyB0aGUgY3VycmVudGx5IGFsbG9jYXRlZC9ydW5uaW5nIHNlcXVlbmNlciB0aW1lcnMuCisKK3NlcS9vc3MKKwlMaXN0cyB0aGUgT1NTLWNvbXBhdGlibGUgc2VxdWVuY2VyIHN0dWZmcy4KKworCitIZWxwIEZvciBEZWJ1Z2dpbmc/CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlIHByb2JsZW0gaXMgcmVsYXRlZCB3aXRoIFBDTSwgZmlyc3QgdHJ5IHRvIHR1cm4gb24geHJ1bl9kZWJ1ZworbW9kZS4gIFRoaXMgd2lsbCBnaXZlIHlvdSB0aGUga2VybmVsIG1lc3NhZ2VzIHdoZW4gYW5kIHdoZXJlIHhydW4KK2hhcHBlbmVkLgorCitJZiBpdCdzIHJlYWxseSBhIGJ1ZywgcmVwb3J0IGl0IHdpdGggdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbgorCisgIC0gdGhlIG5hbWUgb2YgdGhlIGRyaXZlci9jYXJkLCBzaG93IGluIC9wcm9jL2Fzb3VuZC9jYXJkcworICAtIHRoZSByZWlnc3RlciBkdW1wLCBpZiBhdmFpbGFibGUgKGUuZy4gY2FyZCovY21pcGNpKQorCit3aGVuIGl0J3MgYSBQQ00gcHJvYmxlbSwKKworICAtIHNldC11cCBvZiBQQ00sIHNob3duIGluIGh3X3Bhcm1zLCBzd19wYXJhbXMsIGFuZCBzdGF0dXMgaW4gdGhlIFBDTQorICAgIHN1Yi1zdHJlYW0gZGlyZWN0b3J5CisKK3doZW4gaXQncyBhIG1peGVyIHByb2JsZW0sCisKKyAgLSBBQzk3IHByb2MgZmlsZXMsIGNvZGVjOTcjKi8qIGZpbGVzCisKK2ZvciBVU0IgYXVkaW8vbWlkaSwKKworICAtIG91dHB1dCBvZiBsc3VzYiAtdgorICAtIHN0cmVhbSogZmlsZXMgaW4gY2FyZCBkaXJlY3RvcnkKKworCitUaGUgQUxTQSBidWctdHJhY2tpbmcgc3lzdGVtIGlzIGZvdW5kIGF0OgorCisgICAgaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MWFkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvU0ItTGl2ZS1taXhlci50eHQKQEAgLTAsMCArMSwzNTYgQEAKKworCQlTb3VuZCBCbGFzdGVyIExpdmUgbWl4ZXIgLyBkZWZhdWx0IERTUCBjb2RlCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitUaGUgRU1VMTBLMSBjaGlwcyBoYXZlIGEgRFNQIHBhcnQgd2hpY2ggY2FuIGJlIHByb2dyYW1tZWQgdG8gc3VwcG9ydAordmFyaW91cyB3YXlzIG9mIHNhbXBsZSBwcm9jZXNzaW5nLCB3aGljaCBpcyBkZXNjcmliZWQgaGVyZS4KKyhUaGlzIGFjdGljbGUgZG9lcyBub3QgZGVhbCB3aXRoIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIAorRU1VMTBLMSBjaGlwcy4gU2VlIHRoZSBtYW51YWxzIHNlY3Rpb24gZm9yIGZ1cnRoZXIgZGV0YWlscy4pCisKK1RoZSBBTFNBIGRyaXZlciBwcm9ncmFtcyB0aGlzIHBvcnRpb24gb2YgY2hpcCBieSBkZWZhdWx0IGNvZGUKKyhjYW4gYmUgYWx0ZXJlZCBsYXRlcikgd2hpY2ggb2ZmZXJzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0eToKKworCisxKSBJRUM5NTggKFMvUERJRikgcmF3IFBDTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBQQ00gZGV2aWNlIChpdCdzIHRoZSA0dGggUENNIGRldmljZSAoaW5kZXggMyEpIGFuZCBmaXJzdCBzdWJkZXZpY2UKKyhpbmRleCAwKSBmb3IgYSBnaXZlbiBjYXJkKSBhbGxvd3MgdG8gZm9yd2FyZCA0OGtIeiwgc3RlcmVvLCAxNi1iaXQKK2xpdHRsZSBlbmRpYW4gc3RyZWFtcyB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoZSBkaWdpdGFsIG91dHB1dAorKGNvYXhpYWwgb3Igb3B0aWNhbCkuIFRoZSB1bml2ZXJzYWwgaW50ZXJmYWNlIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgdXAKK3RvIDggcmF3IFBDTSBkZXZpY2VzIG9wZXJhdGluZyBhdCA0OGtIeiwgMTYtYml0IGxpdHRsZSBlbmRpYW4uIEl0IHdvdWxkCitiZSBlYXN5IHRvIGFkZCBzdXBwb3J0IGZvciBtdWx0aWNoYW5uZWwgZGV2aWNlcyB0byB0aGUgY3VycmVudCBjb2RlLAorYnV0IHRoZSBjb252ZXJzaW9uIHJvdXRpbmVzIGV4aXN0IG9ubHkgZm9yIHN0ZXJlbyAoMi1jaGFubmVsIHN0cmVhbXMpCithdCB0aGUgdGltZS4gCisKK0xvb2sgdG8gdHJhbV9wb2tlIHJvdXRpbmVzIGluIGxvd2xldmVsL2VtdTEwazEvZW11ZnguYyBmb3IgbW9yZSBkZXRhaWxzLgorCisKKzIpIERpZ2l0YWwgbWl4ZXIgY29udHJvbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29udHJvbHMgYXJlIGJ1aWx0IHVzaW5nIHRoZSBEU1AgaW5zdHJ1Y3Rpb25zLiBUaGV5IG9mZmVyIGV4dGVuZGVkCitmdW5jdGlvbmFsaXR5LiBPbmx5IHRoZSBkZWZhdWx0IGJ1aWxkLWluIGNvZGUgaW4gdGhlIEFMU0EgZHJpdmVyIGlzIGRlc2NyaWJlZAoraGVyZS4gTm90ZSB0aGF0IHRoZSBjb250cm9scyB3b3JrIGFzIGF0dGVudWF0b3JzOiB0aGUgbWF4aW11bSB2YWx1ZSBpcyB0aGUgCituZXV0cmFsIHBvc2l0aW9uIGxlYXZpbmcgdGhlIHNpZ25hbCB1bmNoYW5nZWQuIE5vdGUgdGhhdCBpZiB0aGUgIHNhbWUgZGVzdGluYXRpb24gCitpcyBtZW50aW9uZWQgaW4gbXVsdGlwbGUgY29udHJvbHMsIHRoZSBzaWduYWwgaXMgYWNjdW11bGF0ZWQgYW5kIGNhbiBiZSB3cmFwcGVkIAorKHNldCB0byBtYXhpbWFsIG9yIG1pbmltYWwgdmFsdWUgd2l0aG91dCBjaGVja2luZyBvZiBvdmVyZmxvdykuCisKKworRXhwbGFuYXRpb24gb2YgdXNlZCBhYmJyZXZpYXRpb25zOgorCitEQUMgICAgLSBkaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXIKK0FEQyAgICAtIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcgorSTJTICAgIC0gb25lLXdheSB0aHJlZSB3aXJlIHNlcmlhbCBidXMgZm9yIGRpZ2l0YWwgc291bmQgYnkgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICAgICAgICAgKHRoaXMgc3RhbmRhcmQgaXMgdXNlZCBmb3IgY29ubmVjdGluZyBzdGFuZGFsb25lIERBQyBhbmQgQURDIGNvbnZlcnRlcnMpCitMRkUgICAgLSBsb3cgZnJlcXVlbmN5IGVmZmVjdHMgKHN1Yndvb2ZlciBzaWduYWwpCitBQzk3ICAgLSBhIGNoaXAgY29udGFpbmluZyBhbiBhbmFsb2cgbWl4ZXIsIERBQyBhbmQgQURDIGNvbnZlcnRlcnMKK0lFQzk1OCAtIFMvUERJRgorRlgtYnVzIC0gdGhlIEVNVTEwSzEgY2hpcCBoYXMgYW4gZWZmZWN0IGJ1cyBjb250YWluaW5nIDE2IGFjY3VtdWxhdG9ycy4KKyAgICAgICAgIEVhY2ggb2YgdGhlIHN5bnRoZXNpemVyIHZvaWNlcyBjYW4gZmVlZCBpdHMgb3V0cHV0IHRvIHRoZXNlIGFjY3VtdWxhdG9ycworICAgICAgICAgYW5kIHRoZSBEU1AgbWljcm9jb250cm9sbGVyIGNhbiBvcGVyYXRlIHdpdGggdGhlIHJlc3VsdGluZyBzdW0uCisKKworbmFtZT0nV2F2ZSBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAwIGFuZCAxIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gc2FtcGxlcy4KK1RoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzIG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdXYXZlIFN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIEZYLWJ1cworYWNjdW11bGF0b3JzLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDAgYW5kIDEgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBzYW1wbGVzLgorVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIHJlYXIgSTJTIERBQ3MuIFRoZXNlIERBQ3Mgb3BlcmF0ZXMKK3NlcGFyYXRlbHkgKHRoZXkgYXJlIG5vdCBpbnNpZGUgdGhlIEFDOTcgY29kZWMpLgorCituYW1lPSdXYXZlIENlbnRlciBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAwIGFuZCAxIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gc2FtcGxlcy4KK1RoZSByZXN1bHQgaXMgbWl4ZWQgdG8gbW9ubyBzaWduYWwgKHNpbmdsZSBjaGFubmVsKSBhbmQgZm9yd2FyZGVkIHRvCit0aGUgPz9yZWFyPz8gcmlnaHQgREFDIFBDTSBzbG90IG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdXYXZlIExGRSBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAwIGFuZCAxIGZvciBsZWZ0IGFuZCByaWdodCBQQ00uCitUaGUgcmVzdWx0IGlzIG1peGVkIHRvIG1vbm8gc2lnbmFsIChzaW5nbGUgY2hhbm5lbCkgYW5kIGZvcndhcmRlZCB0bwordGhlID8/cmVhcj8/IGxlZnQgREFDIFBDTSBzbG90IG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdXYXZlIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCituYW1lPSdXYXZlIENhcHR1cmUgU3dpdGNoJyxpbmRleD0wCisKK1RoZXNlIGNvbnRyb2xzIGFyZSB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvci4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAwIGFuZCAxIGZvciBsZWZ0IGFuZCByaWdodCBQQ00uCitUaGUgcmVzdWx0IGlzIGZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZQorUENNIGRldmljZSkuCisKK25hbWU9J011c2ljIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyA0IGFuZCA1IGZvciBsZWZ0IGFuZCByaWdodCBNSURJIHNhbXBsZXMuCitUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cyBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nTXVzaWMgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKK25hbWU9J011c2ljIENhcHR1cmUgU3dpdGNoJyxpbmRleD0wCisKK1RoZXNlIGNvbnRyb2xzIGFyZSB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNSURJIEZYLWJ1cworYWNjdW11bGF0b3IuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgorVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUKK1BDTSBkZXZpY2UpLgorCituYW1lPSdTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHJlYXIgUENNIEZYLWJ1cworYWNjdW11bGF0b3JzLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDIgYW5kIDMgZm9yIGxlZnQgYW5kIHJpZ2h0IHJlYXIgUENNIHNhbXBsZXMuCitUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgcmVhciBJMlMgREFDcy4gVGhlc2UgREFDcyBvcGVyYXRlCitzZXBhcmF0ZWx5ICh0aGV5IGFyZSBub3QgaW5zaWRlIHRoZSBBQzk3IGNvZGVjKS4KKworbmFtZT0nU3Vycm91bmQgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKK25hbWU9J1N1cnJvdW5kIENhcHR1cmUgU3dpdGNoJyxpbmRleD0wCisKK1RoZXNlIGNvbnRyb2xzIGFyZSB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCByZWFyIFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAyIGFuZCAzIGZvciBsZWZ0IGFuZCByaWdodCByZWFyIFBDTSBzYW1wbGVzLgorVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUKK1BDTSBkZXZpY2UpLgorCituYW1lPSdDZW50ZXIgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGUgZm9yIGNlbnRlciBQQ00gRlgtYnVzIGFjY3VtdWxhdG9yLgorQUxTQSB1c2VzIGFjY3VtdWxhdG9yIDYgZm9yIGNlbnRlciBQQ00gc2FtcGxlLiBUaGUgcmVzdWx0IHNhbXBsZSBpcyBmb3J3YXJkZWQKK3RvIHRoZSA/P3JlYXI/PyByaWdodCBEQUMgUENNIHNsb3Qgb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J0xGRSBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZSBmb3IgY2VudGVyIFBDTSBGWC1idXMgYWNjdW11bGF0b3IuCitBTFNBIHVzZXMgYWNjdW11bGF0b3IgNiBmb3IgY2VudGVyIFBDTSBzYW1wbGUuIFRoZSByZXN1bHQgc2FtcGxlIGlzIGZvcndhcmRlZAordG8gdGhlID8/cmVhcj8/IGxlZnQgREFDIFBDTSBzbG90IG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdBQzk3IFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgZnJvbnQgQURDIFBDTSBzbG90cworb2YgdGhlIEFDOTcgY29kZWMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNCitzbG90cyBvZiB0aGUgQUM5NyBjb2RlYy4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiogTm90ZTogVGhpcyBjb250cm9sIHNob3VsZCBiZSB6ZXJvIGZvciB0aGUgc3RhbmRhcmQgb3BlcmF0aW9ucywgb3RoZXJ3aXNlICoqKgorKioqIGEgZGlnaXRhbCBsb29wYmFjayBpcyBhY3RpdmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK25hbWU9J0FDOTcgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IGZyb250IEFEQyBQQ00gc2xvdHMKK29mIHRoZSBBQzk3IGNvZGVjLiBUaGUgcmVzdWx0IGlzIGZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTyAodGh1cyB0bwordGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqIE5vdGU6IFRoaXMgY29udHJvbCBzaG91bGQgYmUgMTAwIChtYXhpbWFsIHZhbHVlKSwgb3RoZXJ3aXNlIG5vIGFuYWxvZyAgICAqKioKKyoqKiBpbnB1dHMgb2YgdGhlIEFDOTcgY29kZWMgY2FuIGJlIGNhcHR1cmVkIChyZWNvcmRlZCkuICAgICAgICAgICAgICAgICAgICAgKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCituYW1lPSdJRUM5NTggVFRMIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBUVEwKK2RpZ2l0YWwgaW5wdXRzICh1c3VhbGx5IHVzZWQgYnkgYSBDRFJPTSBkcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUKK2ZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cyBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nSUVDOTU4IFRUTCBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBUVEwKK2RpZ2l0YWwgaW5wdXRzICh1c3VhbGx5IHVzZWQgYnkgYSBDRFJPTSBkcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUKK2ZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nWm9vbSBWaWRlbyBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCB6b29tIHZpZGVvCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J1pvb20gVmlkZW8gQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCB6b29tIHZpZGVvCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0lFQzk1OCBMaXZlRHJpdmUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSUVDOTU4IG9wdGljYWwKK2RpZ2l0YWwgaW5wdXQuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzCitvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nSUVDOTU4IExpdmVEcml2ZSBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBvcHRpY2FsCitkaWdpdGFsIGlucHV0cy4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8KKyh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlIFBDTSBkZXZpY2UpLgorCituYW1lPSdJRUM5NTggQ29heGlhbCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggY29heGlhbAorZGlnaXRhbCBpbnB1dHMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzCitvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nSUVDOTU4IENvYXhpYWwgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggY29heGlhbAorZGlnaXRhbCBpbnB1dHMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPCisodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nTGluZSBMaXZlRHJpdmUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCituYW1lPSdMaW5lIExpdmVEcml2ZSBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTEKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgKG9uIHRoZSBMaXZlRHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQKK0RBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J0xpbmUgTGl2ZURyaXZlIENhcHR1cmUgVm9sdW1lJyxpbmRleD0xCituYW1lPSdMaW5lIExpdmVEcml2ZSBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MQorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IEkyUyBBREMKK2lucHV0cyAob24gdGhlIExpdmVEcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBBREMKK2NhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nVG9uZSBDb250cm9sIC0gU3dpdGNoJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCB0dXJucyB0aGUgdG9uZSBjb250cm9sIG9uIG9yIG9mZi4gVGhlIHNhbXBsZXMgZm9yIGZyb250LCByZWFyCithbmQgY2VudGVyIC8gTEZFIG91dHB1dHMgYXJlIGFmZmVjdGVkLgorCituYW1lPSdUb25lIENvbnRyb2wgLSBCYXNzJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBzZXRzIHRoZSBiYXNzIGludGVuc2l0eS4gVGhlcmUgaXMgbm8gbmV1dHJhbCB2YWx1ZSEhCitXaGVuIHRoZSB0b25lIGNvbnRyb2wgY29kZSBpcyBhY3RpdmF0ZWQsIHRoZSBzYW1wbGVzIGFyZSBhbHdheXMgbW9kaWZpZWQuCitUaGUgY2xvc2VzdCB2YWx1ZSB0byBwdXJlIHNpZ25hbCBpcyAyMC4KKworbmFtZT0nVG9uZSBDb250cm9sIC0gVHJlYmxlJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBzZXRzIHRoZSB0cmVibGUgaW50ZW5zaXR5LiBUaGVyZSBpcyBubyBuZXV0cmFsIHZhbHVlISEKK1doZW4gdGhlIHRvbmUgY29udHJvbCBjb2RlIGlzIGFjdGl2YXRlZCwgdGhlIHNhbXBsZXMgYXJlIGFsd2F5cyBtb2RpZmllZC4KK1RoZSBjbG9zZXN0IHZhbHVlIHRvIHB1cmUgc2lnbmFsIGlzIDIwLgorCituYW1lPSdJRUM5NTggT3B0aWNhbCBSYXcgUGxheWJhY2sgU3dpdGNoJyxpbmRleD0wCisKK0lmIHRoaXMgc3dpdGNoIGlzIG9uLCB0aGVuIHRoZSBzYW1wbGVzIGZvciB0aGUgSUVDOTU4IChTL1BESUYpIGRpZ2l0YWwKK291dHB1dCBhcmUgdGFrZW4gb25seSBmcm9tIHRoZSByYXcgRlg4MDEwIFBDTSwgb3RoZXJ3aXNlIHN0YW5kYXJkIGZyb250CitQQ00gc2FtcGxlcyBhcmUgdGFrZW4uCisKK25hbWU9J0hlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTEKKworVGhpcyBjb250cm9sIGF0dGVudWF0ZXMgdGhlIHNhbXBsZXMgZm9yIHRoZSBoZWFkcGhvbmUgb3V0cHV0LgorCituYW1lPSdIZWFkcGhvbmUgQ2VudGVyIFBsYXliYWNrIFN3aXRjaCcsaW5kZXg9MQorCitJZiB0aGlzIHN3aXRjaCBpcyBvbiwgdGhlbiB0aGUgc2FtcGxlIGZvciB0aGUgY2VudGVyIFBDTSBpcyBwdXQgdG8gdGhlCitsZWZ0IGhlYWRwaG9uZSBvdXRwdXQgKHVzZWZ1bCBmb3IgU0IgTGl2ZSBjYXJkcyB3aXRob3V0IHNlcGFyYXRlIGNlbnRlci9MRkUKK291dHB1dCkuCisKK25hbWU9J0hlYWRwaG9uZSBMRkUgUGxheWJhY2sgU3dpdGNoJyxpbmRleD0xCisKK0lmIHRoaXMgc3dpdGNoIGlzIG9uLCB0aGVuIHRoZSBzYW1wbGUgZm9yIHRoZSBjZW50ZXIgUENNIGlzIHB1dCB0byB0aGUKK3JpZ2h0IGhlYWRwaG9uZSBvdXRwdXQgKHVzZWZ1bCBmb3IgU0IgTGl2ZSBjYXJkcyB3aXRob3V0IHNlcGFyYXRlIGNlbnRlci9MRkUKK291dHB1dCkuCisKKworMykgUENNIHN0cmVhbSByZWxhdGVkIGNvbnRyb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbmFtZT0nRU1VMTBLMSBQQ00gVm9sdW1lJyxpbmRleCAwLTMxCisKK0NoYW5uZWwgdm9sdW1lIGF0dGVudWF0aW9uIGluIHJhbmdlIDAtMHhmZmZmLiBUaGUgbWF4aW11bSB2YWx1ZSAobm8KK2F0dGVudWF0aW9uKSBpcyBkZWZhdWx0LiBUaGUgY2hhbm5lbCBtYXBwaW5nIGZvciB0aHJlZSB2YWx1ZXMgaXMKK2FzIGZvbGxvd3M6CisKKwkwIC0gbW9ubywgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCTEgLSBsZWZ0LCBkZWZhdWx0IDB4ZmZmZiAobm8gYXR0ZW51YXRpb24pCisJMiAtIHJpZ2h0LCBkZWZhdWx0IDB4ZmZmZiAobm8gYXR0ZW51YXRpb24pCisKK25hbWU9J0VNVTEwSzEgUENNIFNlbmQgUm91dGluZycsaW5kZXggMC0zMQorCitUaGlzIGNvbnRyb2wgc3BlY2lmaWVzIHRoZSBkZXN0aW5hdGlvbiAtIEZYLWJ1cyBhY2N1bXVsYXRvcnMuIFRoZXJlIGFyZQordHdlbHZlIHZhbHVlcyB3aXRoIHRoaXMgbWFwcGluZzoKKworCSAwIC0gIG1vbm8sIEEgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAwCisJIDEgLSAgbW9ubywgQiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDEKKwkgMiAtICBtb25vLCBDIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMgorCSAzIC0gIG1vbm8sIEQgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAzCisJIDQgLSAgbGVmdCwgQSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDAKKwkgNSAtICBsZWZ0LCBCIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMQorCSA2IC0gIGxlZnQsIEMgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAyCisJIDcgLSAgbGVmdCwgRCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDMKKwkgOCAtIHJpZ2h0LCBBIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMAorCSA5IC0gcmlnaHQsIEIgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAxCisJMTAgLSByaWdodCwgQyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDIKKwkxMSAtIHJpZ2h0LCBEIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMworCitEb24ndCBmb3JnZXQgdGhhdCBpdCdzIGlsbGVnYWwgdG8gYXNzaWduIGEgY2hhbm5lbCB0byB0aGUgc2FtZSBGWC1idXMgYWNjdW11bGF0b3IgCittb3JlIHRoYW4gb25jZSAoaXQgbWVhbnMgMD0wICYmIDE9MCBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uKS4KKyAKK25hbWU9J0VNVTEwSzEgUENNIFNlbmQgVm9sdW1lJyxpbmRleCAwLTMxCisKK0l0IHNwZWNpZmllcyB0aGUgYXR0ZW51YXRpb24gKGFtb3VudCkgZm9yIGdpdmVuIGRlc3RpbmF0aW9uIGluIHJhbmdlIDAtMjU1LgorVGhlIGNoYW5uZWwgbWFwcGluZyBpcyBmb2xsb3dpbmc6CisKKwkgMCAtICBtb25vLCBBIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMjU1IChubyBhdHRlbnVhdGlvbikKKwkgMSAtICBtb25vLCBCIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMjU1IChubyBhdHRlbnVhdGlvbikKKwkgMiAtICBtb25vLCBDIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMCAobXV0ZSkKKwkgMyAtICBtb25vLCBEIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMCAobXV0ZSkKKwkgNCAtICBsZWZ0LCBBIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMjU1IChubyBhdHRlbnVhdGlvbikKKwkgNSAtICBsZWZ0LCBCIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMCAobXV0ZSkKKwkgNiAtICBsZWZ0LCBDIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMCAobXV0ZSkKKwkgNyAtICBsZWZ0LCBEIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMCAobXV0ZSkKKwkgOCAtIHJpZ2h0LCBBIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMCAobXV0ZSkKKwkgOSAtIHJpZ2h0LCBCIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMjU1IChubyBhdHRlbnVhdGlvbikKKwkxMCAtIHJpZ2h0LCBDIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMCAobXV0ZSkKKwkxMSAtIHJpZ2h0LCBEIGRlc3RpbmF0aW9uIGF0dG4sIGRlZmF1bHQgMCAobXV0ZSkKKworCisKKzQpIE1BTlVBTFMvUEFURU5UUzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnRwOi8vb3BlbnNvdXJjZS5jcmVhdGl2ZS5jb20vcHViL2RvYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIEZpbGVzOgorICAgICAgICBMTTQ1NDUucGRmICAgICAgQUM5NyBDb2RlYworCisgICAgICAgIG0yMDQ5LnBkZiAgICAgICBUaGUgRU1VMTBLMSBEaWdpdGFsIEF1ZGlvIFByb2Nlc3NvcgorCisgICAgICAgIGhvZzYzLnBzICAgICAgICBGWDgwMTAgLSBBIERTUCBDaGlwIEFyY2hpdGVjdHVyZSBmb3IgQXVkaW8gRWZmZWN0cworCisKK1dJUE8gUGF0ZW50cworLS0tLS0tLS0tLS0tCisgICAgICAgIFBhdGVudCBudW1iZXJzOgorICAgICAgICBXTyA5OTAxODEzIChBMSkgQXVkaW8gRWZmZWN0cyBQcm9jZXNzb3Igd2l0aCBtdWx0aXBsZSBhc3luY2hyb25vdXMgKEphbi4gMTQsIDE5OTkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zCisKKyAgICAgICAgV08gOTkwMTgxNCAoQTEpIFByb2Nlc3NvciB3aXRoIEluc3RydWN0aW9uIFNldCBmb3IgQXVkaW8gRWZmZWN0cyAoSmFuLiAxNCwgMTk5OSkKKworICAgICAgICBXTyA5OTAxOTUzIChBMSkgQXVkaW8gRWZmZWN0cyBQcm9jZXNzb3IgaGF2aW5nIERlY291cGxlZCBJbnN0cnVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uIGFuZCBBdWRpbyBEYXRhIFNlcXVlbmNpbmcgKEphbi4gMTQsIDE5OTkpCisKKworVVMgUGF0ZW50cyAoaHR0cDovL3d3dy51c3B0by5nb3YvKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFVTIDU5MjU4NDEgICAgICBEaWdpdGFsIFNhbXBsaW5nIEluc3RydW1lbnQgZW1wbG95aW5nIGNhY2hlIG1lbW9yeSAoSnVsLiAyMCwgMTk5OSkKKworICAgICAgICBVUyA1OTI4MzQyICAgICAgQXVkaW8gRWZmZWN0cyBQcm9jZXNzb3IgaW50ZWdyYXRlZCBvbiBhIHNpbmdsZSBjaGlwIChKdWwuIDI3LCAxOTk5KQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIG11bHRpcG9ydCBtZW1vcnkgb250byB3aGljaCBtdWx0aXBsZSBhc3luY2hyb25vdXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0YWwgc291bmQgc2FtcGxlcyBjYW4gYmUgY29uY3VycmVudGx5IGxvYWRlZAorCisgICAgICAgIFVTIDU5MzAxNTggICAgICBQcm9jZXNzb3Igd2l0aCBJbnN0cnVjdGlvbiBTZXQgZm9yIEF1ZGlvIEVmZmVjdHMgKEp1bC4gMjcsIDE5OTkpCisKKyAgICAgICAgVVMgNjAzMjIzNSAgICAgIE1lbW9yeSBpbml0aWFsaXphdGlvbiBjaXJjdWl0IChUcmFtKSAoRmViLiAyOSwgMjAwMCkKKworICAgICAgICBVUyA2MTM4MjA3ICAgICAgSW50ZXJwb2xhdGlvbiBsb29waW5nIG9mIGF1ZGlvIHNhbXBsZXMgaW4gY2FjaGUgY29ubmVjdGVkIHRvICAgIChPY3QuIDI0LCAyMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGJ1cyB3aXRoIHByaW9yaXRpemF0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgYnVzIHRyYW5zZmVycworICAgICAgICAgICAgICAgICAgICAgICAgaW4gYWNjb3JkYW5jZSB3aXRoIGxvb3AgZW5kcyBhbmQgbWluaW11bSBibG9jayBzaXplcworCisgICAgICAgIFVTIDYxNTE2NzAgICAgICBNZXRob2QgZm9yIGNvbnNlcnZpbmcgbWVtb3J5IHN0b3JhZ2UgdXNpbmcgYSAoTm92LiAyMSwgMjAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvb2wgb2YgIHNob3J0IHRlcm0gbWVtb3J5IHJlZ2lzdGVycworCisgICAgICAgIFVTIDYxOTU3MTUgICAgICBJbnRlcnJ1cHQgY29udHJvbCBmb3IgbXVsdGlwbGUgcHJvZ3JhbXMgY29tbXVuaWNhdGluZyB3aXRoICAgICAgKEZlYi4gMjcsIDIwMDEpCisgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbW1vbiBpbnRlcnJ1cHQgYnkgYXNzb2NpYXRpbmcgcHJvZ3JhbXMgdG8gR1AgcmVnaXN0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmcgaW50ZXJydXB0IHJlZ2lzdGVyLCBwb2xsaW5nIEdQIHJlZ2lzdGVycywgYW5kIGludm9raW5nCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayByb3V0aW5lIGFzc29jaWF0ZWQgd2l0aCBkZWZpbmVkIGludGVycnVwdCByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1ZJQTgyeHgtbWl4ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1ZJQTgyeHgtbWl4ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMGFjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvVklBODJ4eC1taXhlci50eHQKQEAgLTAsMCArMSw4IEBACisKKwkJCQlWSUE4Mnh4IG1peGVyCisJCQkJPT09PT09PT09PT09PQorCitPbiBtYW55IFZJQTgyeHggYm9hcmRzLCB0aGUgJ0lucHV0IFNvdXJjZSBTZWxlY3QnIG1peGVyIGNvbnRyb2wgZG9lcyBub3Qgd29yay4KK1NldHRpbmcgaXQgdG8gJ0lucHV0Micgb24gc3VjaCBib2FyZHMgd2lsbCBjYXVzZSByZWNvcmRpbmcgdG8gaGFuZywgb3IgZmFpbAord2l0aCBFSU8gKGlucHV0L291dHB1dCBlcnJvcikgdmlhIE9TUyBlbXVsYXRpb24uICBUaGlzIGNvbnRyb2wgc2hvdWxkIGJlIGxlZnQKK2F0ICdJbnB1dDEnIGZvciBzdWNoIGNhcmRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL2hkYV9jb2RlYy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvaGRhX2NvZGVjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWQwN2I4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL2hkYV9jb2RlYy50eHQKQEAgLTAsMCArMSwyOTkgQEAKK05vdGVzIG9uIFVuaXZlcnNhbCBJbnRlcmZhY2UgZm9yIEludGVsIEhpZ2ggRGVmaW5pdGlvbiBBdWRpbyBDb2RlYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Rha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKworCitbU3RpbGwgYSBkcmFmdCB2ZXJzaW9uXQorCisKK0dlbmVyYWwKKz09PT09PT0KKworVGhlIHNuZC1oZGEtY29kZWMgbW9kdWxlIHN1cHBvcnRzIHRoZSBnZW5lcmljIGFjY2VzcyBmdW5jdGlvbiBmb3IgdGhlCitIaWdoIERlZmluaXRpb24gKEhEKSBhdWRpbyBjb2RlY3MuICBJdCdzIGRlc2lnbmVkIHRvIGJlIGluZGVwZW5kZW50Citmcm9tIHRoZSBjb250cm9sbGVyIGNvZGUgbGlrZSBhYzk3IGNvZGVjIG1vZHVsZS4gIFRoZSByZWFsIGFjY2Vzc29ycworZnJvbS90byB0aGUgY29udHJvbGxlciBtdXN0IGJlIGltcGxlbWVudGVkIGluIHRoZSBsb3dsZXZlbCBkcml2ZXIuCisKK1RoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBtb2R1bGUgaXMgc2ltaWxhciB3aXRoIGFjOTdfY29kZWMgbW9kdWxlLgorRWFjaCBjb2RlYyBjaGlwIGJlbG9uZ3MgdG8gYSBidXMgY2xhc3Mgd2hpY2ggY29tbXVuaWNhdGVzIHdpdGggdGhlCitjb250cm9sbGVyLgorCisKK0luaXRpYWxpemF0aW9uIG9mIEJ1cyBJbnN0YW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBjYXJkIGRyaXZlciBoYXMgdG8gY3JlYXRlIHN0cnVjdCBoZGFfYnVzIGF0IGZpcnN0LiAgVGhlIHRlbXBsYXRlCitzdHJ1Y3Qgc2hvdWxkIGJlIGZpbGxlZCBhbmQgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvcjoKKworc3RydWN0IGhkYV9idXNfdGVtcGxhdGUgeworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCWNvbnN0IGNoYXIgKm1vZGVsbmFtZTsKKwlzdHJ1Y3QgaGRhX2J1c19vcHMgb3BzOworfTsKKworVGhlIGNhcmQgZHJpdmVyIGNhbiBzZXQgYW5kIHVzZSB0aGUgcHJpdmF0ZV9kYXRhIGZpZWxkIHRvIHJldHJpZXZlIGl0cworb3duIGRhdGEgaW4gY2FsbGJhY2sgZnVuY3Rpb25zLiAgVGhlIHBjaSBmaWVsZCBpcyB1c2VkIHdoZW4gdGhlIHBhdGNoCituZWVkcyB0byBjaGVjayB0aGUgUENJIHN1YnN5c3RlbSBJRHMsIHNvIG9uLiAgRm9yIG5vbi1QQ0kgc3lzdGVtLCBpdAorZG9lc24ndCBoYXZlIHRvIGJlIHNldCwgb2YgY291cnNlLgorVGhlIG1vZGVsbmFtZSBmaWVsZCBzcGVjaWZpZXMgdGhlIGJvYXJkJ3Mgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gIFRoZQorc3RyaW5nIGlzIHBhc3NlZCB0byB0aGUgY29kZWMgcGFyc2VyLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFyc2VyIGhvdwordGhlIHN0cmluZyBpcyB1c2VkLgorVGhlc2UgZmllbGRzLCBwcml2YXRlX2RhdGEsIHBjaSBhbmQgbW9kZWxuYW1lIGFyZSBhbGwgb3B0aW9uYWwuCisKK1RoZSBvcHMgZmllbGQgY29udGFpbnMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcyB0aGUgZm9sbG93aW5nOgorCitzdHJ1Y3QgaGRhX2J1c19vcHMgeworCWludCAoKmNvbW1hbmQpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgZGlyZWN0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHZlcmIsIHVuc2lnbmVkIGludCBwYXJtKTsKKwl1bnNpZ25lZCBpbnQgKCpnZXRfcmVzcG9uc2UpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwl2b2lkICgqcHJpdmF0ZV9mcmVlKShzdHJ1Y3QgaGRhX2J1cyAqKTsKK307CisKK1RoZSBjb21tYW5kIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBjb2RlYyBtb2R1bGUgbmVlZHMgdG8gc2VuZCBhCitWRVJCIHRvIHRoZSBjb250cm9sbGVyLiAgSXQncyBhbHdheXMgYSBzaW5nbGUgY29tbWFuZC4KK1RoZSBnZXRfcmVzcG9uc2UgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGNvZGVjIHJlcXVpcmVzIHRoZSBhbnN3ZXIKK2ZvciB0aGUgbGFzdCBjb21tYW5kLiAgVGhlc2UgdHdvIGNhbGxiYWNrcyBhcmUgbWFuZGF0b3J5IGFuZCBoYXZlIHRvCitiZSBnaXZlbi4KK1RoZSBsYXN0LCBwcml2YXRlX2ZyZWUgY2FsbGJhY2ssIGlzIG9wdGlvbmFsLiAgSXQncyBjYWxsZWQgaW4gdGhlCitkZXN0cnVjdG9yIHRvIHJlbGVhc2UgYW55IG5lY2Vzc2FyeSBkYXRhIGluIHRoZSBsb3dsZXZlbCBkcml2ZXIuCisKK1RoZSBidXMgaW5zdGFuY2UgaXMgY3JlYXRlZCB2aWEgc25kX2hkYV9idXNfbmV3KCkuICBZb3UgbmVlZCB0byBwYXNzCit0aGUgY2FyZCBpbnN0YW5jZSwgdGhlIHRlbXBsYXRlLCBhbmQgdGhlIHBvaW50ZXIgdG8gc3RvcmUgdGhlCityZXN1bHRhbnQgYnVzIGluc3RhbmNlLgorCitpbnQgc25kX2hkYV9idXNfbmV3KHNuZF9jYXJkX3QgKmNhcmQsIGNvbnN0IHN0cnVjdCBoZGFfYnVzX3RlbXBsYXRlICp0ZW1wLAorCQkgICAgc3RydWN0IGhkYV9idXMgKipidXNwKTsKKworSXQgcmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwuICBBIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSBtZWFucyBhbnkKK2Vycm9yIGR1cmluZyBjcmVhdGlvbi4KKworCitDcmVhdGlvbiBvZiBDb2RlYyBJbnN0YW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRWFjaCBjb2RlYyBjaGlwIG9uIHRoZSBib2FyZCBpcyB0aGVuIGNyZWF0ZWQgb24gdGhlIEJVUyBpbnN0YW5jZS4KK1RvIGNyZWF0ZSBhIGNvZGVjIGluc3RhbmNlLCBjYWxsIHNuZF9oZGFfY29kZWNfbmV3KCkuCisKK2ludCBzbmRfaGRhX2NvZGVjX25ldyhzdHJ1Y3QgaGRhX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgY29kZWNfYWRkciwKKwkJICAgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCk7CisKK1RoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgQlVTIGluc3RhbmNlLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZQorYWRkcmVzcyBvZiB0aGUgY29kZWMsIGFuZCB0aGUgbGFzdCBvbmUgaXMgdGhlIHBvaW50ZXIgdG8gc3RvcmUgdGhlCityZXN1bHRhbnQgY29kZWMgaW5zdGFuY2UgKGNhbiBiZSBOVUxMIGlmIG5vdCBuZWVkZWQpLgorCitUaGUgY29kZWMgaXMgc3RvcmVkIGluIGEgbGlua2VkIGxpc3Qgb2YgYnVzIGluc3RhbmNlLiAgWW91IGNhbiBmb2xsb3cKK3RoZSBjb2RlYyBsaXN0IGxpa2U6CisKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOworCWxpc3RfZm9yX2VhY2gocCwgJmJ1cy0+Y29kZWNfbGlzdCkgeworCQljb2RlYyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhkYV9jb2RlYywgbGlzdCk7CisJCS4uLgorCX0KKworVGhlIGNvZGVjIGlzbid0IGluaXRpYWxpemVkIGF0IHRoaXMgc3RhZ2UgcHJvcGVybHkuICBUaGUKK2luaXRpYWxpemF0aW9uIHNlcXVlbmNlIGlzIGNhbGxlZCB3aGVuIHRoZSBjb250cm9scyBhcmUgYnVpbHQgbGF0ZXIuCisKKworQ29kZWMgQWNjZXNzCis9PT09PT09PT09PT0KKworVG8gYWNjZXNzIGNvZGVjLCB1c2Ugc25kX2NvZGVjX3JlYWQoKSBhbmQgc25kX2NvZGVjX3dyaXRlKCkuCitzbmRfaGRhX3BhcmFtX3JlYWQoKSBpcyBmb3IgcmVhZGluZyBwYXJhbWV0ZXJzLgorRm9yIHdyaXRpbmcgYSBzZXF1ZW5jZSBvZiB2ZXJicywgdXNlIHNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoKS4KKworVG8gcmV0cmlldmUgdGhlIG51bWJlciBvZiBzdWIgbm9kZXMgY29ubmVjdGVkIHRvIHRoZSBnaXZlbiBub2RlLCB1c2UKK3NuZF9oZGFfZ2V0X3N1Yl9ub2RlcygpLiAgVGhlIGNvbm5lY3Rpb24gbGlzdCBjYW4gYmUgb2J0YWluZWQgdmlhCitzbmRfaGRhX2dldF9jb25uZWN0aW9ucygpIGNhbGwuCisKK1doZW4gYW4gdW5zb2xpY2l0ZWQgZXZlbnQgaGFwcGVucywgcGFzcyB0aGUgZXZlbnQgdmlhCitzbmRfaGRhX3F1ZXVlX3Vuc29sX2V2ZW50KCkgc28gdGhhdCB0aGUgY29kZWMgcm91dGluZXMgd2lsbCBwcm9jZXNzIGl0CitsYXRlci4KKworCisoTWl4ZXIpIENvbnRyb2xzCis9PT09PT09PT09PT09PT09CisKK1RvIGNyZWF0ZSBtaXhlciBjb250cm9scyBvZiBhbGwgY29kZWNzLCBjYWxsCitzbmRfaGRhX2J1aWxkX2NvbnRyb2xzKCkuICBJdCB0aGVuIGJ1aWxkcyB0aGUgbWl4ZXJzIGFuZCBkb2VzCitpbml0aWFsaXphdGlvbiBzdHVmZiBvbiBlYWNoIGNvZGVjLgorCisKK1BDTSBTdHVmZgorPT09PT09PT09CisKK3NuZF9oZGFfYnVpbGRfcGNtcygpIGdpdmVzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gY3JlYXRlIFBDTQorc3RyZWFtcy4gIFdoZW4gaXQncyBjYWxsZWQsIGVhY2ggY29kZWMgYmVsb25naW5nIHRvIHRoZSBidXMgc3RvcmVzIAorY29kZWMtPm51bV9wY21zIGFuZCBjb2RlYy0+cGNtX2luZm8gZmllbGRzLiAgVGhlIG51bV9wY21zIGluZGljYXRlcwordGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBwY21faW5mbyBhcnJheS4gIFRoZSBjYXJkIGRyaXZlciBpcyBzdXBwb3NlZAordG8gdHJhdmVyc2UgdGhlIGNvZGVjIGxpbmtlZCBsaXN0LCByZWFkIHRoZSBwY20gaW5mb3JtYXRpb24gaW4KK3BjbV9pbmZvIGFycmF5LCBhbmQgYnVpbGQgcGNtIGluc3RhbmNlcyBhY2NvcmRpbmcgdG8gdGhlbS4gCisKK1RoZSBwY21faW5mbyBhcnJheSBjb250YWlucyB0aGUgZm9sbG93aW5nIHJlY29yZDoKKworLyogUENNIGluZm9ybWF0aW9uIGZvciBlYWNoIHN1YnN0cmVhbSAqLworc3RydWN0IGhkYV9wY21fc3RyZWFtIHsKKwl1bnNpZ25lZCBpbnQgc3Vic3RyZWFtczsJLyogbnVtYmVyIG9mIHN1YnN0cmVhbXMsIDAgPSBub3QgZXhpc3QgKi8KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWluOwkvKiBtaW4uIG51bWJlciBvZiBjaGFubmVscyAqLworCXVuc2lnbmVkIGludCBjaGFubmVsc19tYXg7CS8qIG1heC4gbnVtYmVyIG9mIGNoYW5uZWxzICovCisJaGRhX25pZF90IG5pZDsJLyogZGVmYXVsdCBOSUQgdG8gcXVlcnkgcmF0ZXMvZm9ybWF0cy9icHMsIG9yIHNldCB1cCAqLworCXUzMiByYXRlczsJLyogc3VwcG9ydGVkIHJhdGVzICovCisJdTY0IGZvcm1hdHM7CS8qIHN1cHBvcnRlZCBmb3JtYXRzIChTTkRSVl9QQ01fRk1UQklUXykgKi8KKwl1bnNpZ25lZCBpbnQgbWF4YnBzOwkvKiBzdXBwb3J0ZWQgbWF4LiBiaXQgcGVyIHNhbXBsZSAqLworCXN0cnVjdCBoZGFfcGNtX29wcyBvcHM7Cit9OworCisvKiBmb3IgUENNIGNyZWF0aW9uICovCitzdHJ1Y3QgaGRhX3BjbSB7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gc3RyZWFtWzJdOworfTsKKworVGhlIG5hbWUgY2FuIGJlIHBhc3NlZCB0byBzbmRfcGNtX25ldygpLiAgVGhlIHN0cmVhbSBmaWVsZCBjb250YWlucwordGhlIGluZm9ybWF0aW9uICBmb3IgcGxheWJhY2sgKFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgPSAwKSBhbmQKK2NhcHR1cmUgKFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSA9IDEpIGRpcmVjdGlvbnMuICBUaGUgY2FyZCBkcml2ZXIKK3Nob3VsZCBwYXNzIHN1YnN0cmVhbXMgdG8gc25kX3BjbV9uZXcoKSBmb3IgdGhlIG51bWJlciBvZiBzdWJzdHJlYW1zCit0byBjcmVhdGUuCisKK1RoZSBjaGFubmVsc19taW4sIGNoYW5uZWxzX21heCwgcmF0ZXMgYW5kIGZvcm1hdHMgc2hvdWxkIGJlIGNvcGllZCB0bworcnVudGltZS0+aHcgcmVjb3JkLiAgVGhleSBhbmQgbWF4YnBzIGZpZWxkcyBhcmUgdXNlZCBhbHNvIHRvIGNvbXB1dGUKK3RoZSBmb3JtYXQgdmFsdWUgZm9yIHRoZSBIREEgY29kZWMgYW5kIGNvbnRyb2xsZXIuICBDYWxsCitzbmRfaGRhX2NhbGNfc3RyZWFtX2Zvcm1hdCgpIHRvIGdldCB0aGUgZm9ybWF0IHZhbHVlLgorCitUaGUgb3BzIGZpZWxkIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY2FsbGJhY2sgZnVuY3Rpb25zOgorCitzdHJ1Y3QgaGRhX3BjbV9vcHMgeworCWludCAoKm9wZW4pKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaW5mbywgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCSAgICBzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCWludCAoKmNsb3NlKShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmluZm8sIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkgICAgIHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisJaW50ICgqcHJlcGFyZSkoc3RydWN0IGhkYV9wY21fc3RyZWFtICppbmZvLCBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1fdGFnLCB1bnNpZ25lZCBpbnQgZm9ybWF0LAorCQkgICAgICAgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKKwlpbnQgKCpjbGVhbnVwKShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmluZm8sIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkgICAgICAgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK307CisKK0FsbCBhcmUgbm9uLU5VTEwsIHNvIHlvdSBjYW4gY2FsbCB0aGVtIHNhZmVseSB3aXRob3V0IE5VTEwgY2hlY2suCisKK1RoZSBvcGVuIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgaW4gUENNIG9wZW4gYWZ0ZXIgcnVudGltZS0+aHcgaXMKK3NldCB1cC4gIEl0IG1heSBvdmVycmlkZSBzb21lIHNldHRpbmcgYW5kIGNvbnN0cmFpbnRzIGFkZGl0aW9uYWxseS4KK1NpbWlsYXJseSwgdGhlIGNsb3NlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIFBDTSBjbG9zZS4KKworVGhlIHByZXBhcmUgY2FsbGJhY2sgc2hvdWxkIGJlIGNhbGxlZCBpbiBQQ00gcHJlcGFyZS4gIFRoaXMgd2lsbCBzZXQKK3VwIHRoZSBjb2RlYyBjaGlwIHByb3Blcmx5IGZvciB0aGUgb3BlcmF0aW9uLiAgVGhlIGNsZWFudXAgc2hvdWxkIGJlCitjYWxsZWQgaW4gaHdfZnJlZSB0byBjbGVhbiB1cCB0aGUgY29uZmlndXJhdGlvbi4KKworVGhlIGNhbGxlciBzaG91bGQgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgYXQgbGVhc3QgZm9yIG9wZW4gYW5kCitwcmVwYXJlIGNhbGxiYWNrcy4gIFdoZW4gYSBuZWdhdGl2ZSB2YWx1ZSBpcyByZXR1cm5lZCwgc29tZSBlcnJvcgorb2NjdXJyZWQuCisKKworUHJvYyBGaWxlcworPT09PT09PT09PQorCitFYWNoIGNvZGVjIGR1bXBzIHRoZSB3aWRnZXQgbm9kZSBpbmZvcm1hdGlvbiBpbgorL3Byb2MvYXNvdW5kL2NhcmQqL2NvZGVjIyogZmlsZS4gIFRoaXMgaW5mb3JtYXRpb24gd291bGQgYmUgcmVhbGx5CitoZWxwZnVsIGZvciBkZWJ1Z2dpbmcuICBQbGVhc2UgcHJvdmlkZSBpdHMgY29udGVudHMgdG9nZXRoZXIgd2l0aCB0aGUKK2J1ZyByZXBvcnQuCisKKworUG93ZXIgTWFuYWdlbWVudAorPT09PT09PT09PT09PT09PQorCitJdCdzIHNpbXBsZToKK0NhbGwgc25kX2hkYV9zdXNwZW5kKCkgaW4gdGhlIFBNIHN1c3BlbmQgY2FsbGJhY2suCitDYWxsIHNuZF9oZGFfcmVzdW1lKCkgaW4gdGhlIFBNIHJlc3VtZSBjYWxsYmFjay4KKworCitDb2RlYyBQcmVzZXQgKFBhdGNoKQorPT09PT09PT09PT09PT09PT09PT0KKworVG8gc2V0IHVwIGFuZCBoYW5kbGUgdGhlIGNvZGVjIGZ1bmN0aW9uYWxpdHkgZnVsbHksIGVhY2ggY29kZWMgbWF5CitoYXZlIGEgY29kZWMgcHJlc2V0IChwYXRjaCkuICBJdCdzIGRlZmluZWQgaW4gc3RydWN0IGhkYV9jb2RlY19wcmVzZXQ6CisKKwlzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldCB7CisJCXVuc2lnbmVkIGludCBpZDsKKwkJdW5zaWduZWQgaW50IG1hc2s7CisJCXVuc2lnbmVkIGludCBzdWJzOworCQl1bnNpZ25lZCBpbnQgc3Vic19tYXNrOworCQl1bnNpZ25lZCBpbnQgcmV2OworCQljb25zdCBjaGFyICpuYW1lOworCQlpbnQgKCpwYXRjaCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCX07CisKK1doZW4gdGhlIGNvZGVjIGlkIGFuZCBjb2RlYyBzdWJzeXN0ZW0gaWQgbWF0Y2ggd2l0aCB0aGUgZ2l2ZW4gaWQgYW5kCitzdWJzIGZpZWxkcyBiaXR3aXNlICh3aXRoIGJpdG1hc2sgbWFzayBhbmQgc3Vic19tYXNrKSwgdGhlIGNhbGxiYWNrCitwYXRjaCBpcyBjYWxsZWQuICBUaGUgcGF0Y2ggY2FsbGJhY2sgc2hvdWxkIGluaXRpYWxpemUgdGhlIGNvZGVjIGFuZAorc2V0IHRoZSBjb2RlYy0+cGF0Y2hfb3BzIGZpZWxkLiAgVGhpcyBpcyBkZWZpbmVkIGFzIGJlbG93OgorCisJc3RydWN0IGhkYV9jb2RlY19vcHMgeworCQlpbnQgKCpidWlsZF9jb250cm9scykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCQlpbnQgKCpidWlsZF9wY21zKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisJCWludCAoKmluaXQpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwkJdm9pZCAoKmZyZWUpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwkJdm9pZCAoKnVuc29sX2V2ZW50KShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcyk7CisJI2lmZGVmIENPTkZJR19QTQorCQlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKTsKKwkJaW50ICgqcmVzdW1lKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisJI2VuZGlmCisJfTsKKworVGhlIGJ1aWxkX2NvbnRyb2xzIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tIHNuZF9oZGFfYnVpbGRfY29udHJvbHMoKS4KK1NpbWlsYXJseSwgdGhlIGJ1aWxkX3BjbXMgY2FsbGJhY2sgaXMgY2FsbGVkIGZyb20KK3NuZF9oZGFfYnVpbGRfcGNtcygpLiAgVGhlIGluaXQgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyCitidWlsZF9jb250cm9scyB0byBpbml0aWFsaXplIHRoZSBoYXJkd2FyZS4KK1RoZSBmcmVlIGNhbGxiYWNrIGlzIGNhbGxlZCBhcyBhIGRlc3RydWN0b3IuCisKK1RoZSB1bnNvbF9ldmVudCBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiBhbiB1bnNvbGljaXRlZCBldmVudCBpcworcmVjZWl2ZWQuCisKK1RoZSBzdXNwZW5kIGFuZCByZXN1bWUgY2FsbGJhY2tzIGFyZSBmb3IgcG93ZXIgbWFuYWdlbWVudC4KKworRWFjaCBlbnRyeSBjYW4gYmUgTlVMTCBpZiBub3QgbmVjZXNzYXJ5IHRvIGJlIGNhbGxlZC4KKworCitHZW5lcmljIFBhcnNlcgorPT09PT09PT09PT09PT0KKworV2hlbiB0aGUgZGV2aWNlIGRvZXNuJ3QgbWF0Y2ggd2l0aCBhbnkgZ2l2ZW4gcHJlc2V0cywgdGhlIHdpZGdldHMgYXJlCitwYXJzZWQgdmlhIHRoIGdlbmVyaWMgcGFyc2VyIChoZGFfZ2VuZXJpYy5jKS4gIEl0cyBzdXBwb3J0IGlzCitsaW1pdGVkOiBubyBtdWx0aS1jaGFubmVsIHN1cHBvcnQsIGZvciBleGFtcGxlLgorCisKK0RpZ2l0YWwgSS9PCis9PT09PT09PT09PQorCitDYWxsIHNuZF9oZGFfY3JlYXRlX3NwZGlmX291dF9jdGxzKCkgZnJvbSB0aGUgcGF0Y2ggdG8gY3JlYXRlIGNvbnRyb2xzCityZWxhdGVkIHdpdGggU1BESUYgb3V0LiAgSW4gdGhlIHBhdGNoIHJlc3VtZSBjYWxsYmFjaywgY2FsbAorc25kX2hkYV9yZXN1bWVfc3BkaWYoKS4KKworCitIZWxwZXIgRnVuY3Rpb25zCis9PT09PT09PT09PT09PT09CisKK3NuZF9oZGFfZ2V0X2NvZGVjX25hbWUoKSBzdG9yZXMgdGhlIGNvZGVjIG5hbWUgb24gdGhlIGdpdmVuIHN0cmluZy4KKworc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoKSBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhlIGNvbmZpZ3VyYXRpb24KK2luZm9ybWF0aW9uIG1hdGNoaW5nIHdpdGggdGhlIGRldmljZS4gIERlZmluZSB0aGUgdGFibGUgd2l0aCBzdHJ1Y3QKK2hkYV9ib2FyZF9jb25maWcgZW50cmllcyAoemVyby10ZXJtaW5hdGVkKSwgYW5kIHBhc3MgaXQgdG8gdGhlCitmdW5jdGlvbi4gIFRoZSBmdW5jdGlvbiBjaGVja3MgdGhlIG1vZGVsbmFtZSBnaXZlbiBhcyBhIG1vZHVsZQorcGFyYW1ldGVyLCBhbmQgUENJIHN1YnN5c3RlbSBJRHMuICBJZiB0aGUgbWF0Y2hpbmcgZW50cnkgaXMgZm91bmQsIGl0CityZXR1cm5zIHRoZSBjb25maWcgZmllbGQgdmFsdWUuCisKK3NuZF9oZGFfYWRkX25ld19jdGxzKCkgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGFuZCBhZGQgY29udHJvbCBlbnRyaWVzLgorUGFzcyB0aGUgemVyby10ZXJtaW5hdGVkIGFycmF5IG9mIHNuZF9rY29udHJvbF9uZXdfdC4gIFRoZSBzYW1lIGFycmF5CitjYW4gYmUgcGFzc2VkIHRvIHNuZF9oZGFfcmVzdW1lX2N0bHMoKSBmb3IgcmVzdW1lLgorTm90ZSB0aGF0IHRoaXMgd2lsbCBjYWxsIGNvbnRyb2wtPnB1dCBjYWxsYmFjayBvZiB0aGVzZSBlbnRyaWVzLiAgU28sCitwdXQgY2FsbGJhY2sgc2hvdWxkIGNoZWNrIGNvZGVjLT5pbl9yZXN1bWUgYW5kIGZvcmNlIHRvIHJlc3RvcmUgdGhlCitnaXZlbiB2YWx1ZSBpZiBpdCdzIG5vbi16ZXJvIGV2ZW4gaWYgdGhlIHZhbHVlIGlzIGlkZW50aWNhbCB3aXRoIHRoZQorY2FjaGVkIHZhbHVlLgorCitNYWNyb3MgSERBX0NPREVDX1ZPTFVNRSgpLCBIREFfQ09ERUNfTVVURSgpIGFuZCB0aGVpciB2YXJpYWJsZXMgY2FuIGJlCit1c2VkIGZvciB0aGUgZW50cnkgb2Ygc25kX2tjb250cm9sX25ld190LgorCitUaGUgaW5wdXQgTVVYIGhlbHBlciBjYWxsYmFja3MgZm9yIHN1Y2ggYSBjb250cm9sIGFyZSBwcm92aWRlZCwgdG9vOgorc25kX2hkYV9pbnB1dF9tdXhfaW5mbygpIGFuZCBzbmRfaGRhX2lucHV0X211eF9wdXQoKS4gIFNlZQorcGF0Y2hfcmVhbHRlay5jIGZvciBleGFtcGxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NlcV9vc3MuaHRtbCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zZXFfb3NzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3NzZjZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zZXFfb3NzLmh0bWwKQEAgLTAsMCArMSw0MDkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD4KKzxIRUFEPgorICAgPFRJVExFPk9TUyBTZXF1ZW5jZXIgRW11bGF0aW9uIG9uIEFMU0E8L1RJVExFPgorPC9IRUFEPgorPEJPRFk+CisKKzxDRU5URVI+Cis8SDE+CisKKzxIUiBXSURUSD0iMTAwJSI+PC9IMT48L0NFTlRFUj4KKworPENFTlRFUj4KKzxIMT4KK09TUyBTZXF1ZW5jZXIgRW11bGF0aW9uIG9uIEFMU0E8L0gxPjwvQ0VOVEVSPgorCis8SFIgV0lEVEg9IjEwMCUiPgorPFA+Q29weXJpZ2h0IChjKSAxOTk4LDE5OTkgYnkgVGFrYXNoaSBJd2FpCis8VFQ+PEEgSFJFRj0ibWFpbHRvOml3YWlAd3cudW5pLWVybGFuZ2VuLmRlIj4mbHQ7aXdhaUB3dy51bmktZXJsYW5nZW4uZGU+PC9BPjwvVFQ+Cis8UD52ZXIuMC4xLjg7IE5vdi4gMTYsIDE5OTkKKzxIMj4KKworPEhSIFdJRFRIPSIxMDAlIj48L0gyPgorCis8SDI+CisxLiBEZXNjcmlwdGlvbjwvSDI+CitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgT1NTIHNlcXVlbmNlciBlbXVsYXRpb24gZHJpdmVyIG9uIEFMU0EuIE5vdGUKK3RoYXQgdGhpcyBwcm9ncmFtIGlzIHN0aWxsIGluIHRoZSBkZXZlbG9wbWVudCBzdGF0ZS4KKzxQPldoYXQgdGhpcyBkb2VzIC0gaXQgcHJvdmlkZXMgdGhlIGVtdWxhdGlvbiBvZiB0aGUgT1NTIHNlcXVlbmNlciwgYWNjZXNzCit2aWEKKzxUVD4vZGV2L3NlcXVlbmNlcjwvVFQ+IGFuZCA8VFQ+L2Rldi9tdXNpYzwvVFQ+IGRldmljZXMuCitUaGUgbW9zdCBvZiBhcHBsaWNhdGlvbnMgdXNpbmcgT1NTIGNhbiBydW4gaWYgdGhlIGFwcHJvcHJpYXRlIEFMU0EKK3NlcXVlbmNlciBpcyBwcmVwYXJlZC4KKzxQPlRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGVtdWxhdGVkIGJ5IHRoaXMgZHJpdmVyOgorPFVMPgorPExJPgorTm9ybWFsIHNlcXVlbmNlciBhbmQgTUlESSBldmVudHM6PC9MST4KKworPEJSPlRoZXkgYXJlIGNvbnZlcnRlZCB0byB0aGUgQUxTQSBzZXF1ZW5jZXIgZXZlbnRzLCBhbmQgc2VudCB0byB0aGUgY29ycmVzcG9uZGluZworcG9ydC4KKzxMST4KK1RpbWVyIGV2ZW50czo8L0xJPgorCis8QlI+VGhlIHRpbWVyIGlzIG5vdCBzZWxlY3RhYmxlIGJ5IGlvY3RsLiBUaGUgY29udHJvbCByYXRlIGlzIGZpeGVkIHRvCisxMDAgcmVnYXJkbGVzcyBvZiBIWi4gVGhhdCBpcywgZXZlbiBvbiBBbHBoYSBzeXN0ZW0sIGEgdGljayBpcyBhbHdheXMKKzEvMTAwIHNlY29uZC4gVGhlIGJhc2UgcmF0ZSBhbmQgdGVtcG8gY2FuIGJlIGNoYW5nZWQgaW4gPFRUPi9kZXYvbXVzaWM8L1RUPi4KKworPExJPgorUGF0Y2ggbG9hZGluZzo8L0xJPgorCis8QlI+SXQgcHVyZWx5IGRlcGVuZHMgb24gdGhlIHN5bnRoIGRyaXZlcnMgd2hldGhlciBpdCdzIHN1cHBvcnRlZCBzaW5jZQordGhlIHBhdGNoIGxvYWRpbmcgaXMgcmVhbGl6ZWQgYnkgY2FsbGJhY2sgdG8gdGhlIHN5bnRoIGRyaXZlci4KKzxMST4KK0kvTyBjb250cm9sczo8L0xJPgorCis8QlI+TW9zdCBvZiBjb250cm9scyBhcmUgYWNjZXB0ZWQuIFNvbWUgY29udHJvbHMKK2FyZSBkZXBlbmRlbnQgb24gdGhlIHN5bnRoIGRyaXZlciwgYXMgd2VsbCBhcyBldmVuIG9uIG9yaWdpbmFsIE9TUy48L1VMPgorRnVydGhlcm1vcmUsIHlvdSBjYW4gZmluZCB0aGUgZm9sbG93aW5nIGFkdmFuY2VkIGZlYXR1cmVzOgorPFVMPgorPExJPgorQmV0dGVyIHF1ZXVlIG1lY2hhbmlzbTo8L0xJPgorCis8QlI+VGhlIGV2ZW50cyBhcmUgcXVldWVkIGJlZm9yZSBwcm9jZXNzaW5nIHRoZW0uCis8TEk+CitNdWx0aXBsZSBhcHBsaWNhdGlvbnM6PC9MST4KKworPEJSPllvdSBjYW4gcnVuIHR3byBvciBtb3JlIGFwcGxpY2F0aW9ucyBzaW11bHRhbmVvdXNseSAoZXZlbiBmb3IgT1NTIHNlcXVlbmNlcikhCitIb3dldmVyLCBlYWNoIE1JREkgZGV2aWNlIGlzIGV4Y2x1c2l2ZSAtIHRoYXQgaXMsIGlmIGEgTUlESSBkZXZpY2UgaXMgb3BlbmVkCitvbmNlIGJ5IHNvbWUgYXBwbGljYXRpb24sIG90aGVyIGFwcGxpY2F0aW9ucyBjYW4ndCB1c2UgaXQuIE5vIHN1Y2ggYSByZXN0cmljdGlvbgoraW4gc3ludGggZGV2aWNlcy4KKzxMST4KK1JlYWwtdGltZSBldmVudCBwcm9jZXNzaW5nOjwvTEk+CisKKzxCUj5UaGUgZXZlbnRzIGNhbiBiZSBwcm9jZXNzZWQgaW4gcmVhbCB0aW1lIHdpdGhvdXQgdXNpbmcgb3V0IG9mIGJvdW5kCitpb2N0bC4gVG8gc3dpdGNoIHRvIHJlYWwtdGltZSBtb2RlLCBzZW5kIEFCU1RJTUUgMCBldmVudC4gVGhlIGZvbGxvd2VkCitldmVudHMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gcmVhbC10aW1lIHdpdGhvdXQgcXVldWVkLiBUbyBzd2l0Y2ggb2ZmIHRoZQorcmVhbC10aW1lIG1vZGUsIHNlbmQgUkVMVElNRSAwIGV2ZW50LgorPExJPgorPFRUPi9wcm9jPC9UVD4gaW50ZXJmYWNlOjwvTEk+CisKKzxCUj5UaGUgc3RhdHVzIG9mIGFwcGxpY2F0aW9ucyBhbmQgZGV2aWNlcyBjYW4gYmUgc2hvd24gdmlhIDxUVD4vcHJvYy9hc291bmQvc2VxL29zczwvVFQ+CithdCBhbnkgdGltZS4gSW4gdGhlIGxhdGVyIHZlcnNpb24sIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBjaGFuZ2VkIHZpYSA8VFQ+L3Byb2M8L1RUPgoraW50ZXJmYWNlLCB0b28uPC9VTD4KKworPEgyPgorMi4gSW5zdGFsbGF0aW9uPC9IMj4KK1J1biBjb25maWd1cmUgc2NyaXB0IHdpdGggYm90aCBzZXF1ZW5jZXIgc3VwcG9ydCAoPFRUPi0td2l0aC1zZXF1ZW5jZXI9eWVzPC9UVD4pCithbmQgT1NTIGVtdWxhdGlvbiAoPFRUPi0td2l0aC1vc3M9eWVzPC9UVD4pIG9wdGlvbnMuIEEgbW9kdWxlIDxUVD5zbmQtc2VxLW9zcy5vPC9UVD4KK3dpbGwgYmUgY3JlYXRlZC4gSWYgdGhlIHN5bnRoIG1vZHVsZSBvZiB5b3VyIHNvdW5kIGNhcmQgc3VwcG9ydHMgZm9yIE9TUworZW11bGF0aW9uIChzbyBmYXIsIG9ubHkgRW11ODAwMCBkcml2ZXIpLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LgorT3RoZXJ3aXNlLCB5b3UgbmVlZCB0byBsb2FkIHRoaXMgbW9kdWxlIG1hbnVhbGx5LgorPFA+QXQgYmVnaW5uaW5nLCB0aGlzIG1vZHVsZSBwcm9iZXMgYWxsIHRoZSBNSURJIHBvcnRzIHdoaWNoIGhhdmUgYmVlbgorYWxyZWFkeSBjb25uZWN0ZWQgdG8gdGhlIHNlcXVlbmNlci4gT25jZSBhZnRlciB0aGF0LCB0aGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uCitvZiBwb3J0cyBhcmUgd2F0Y2hlZCBieSBhbm5vdW5jZW1lbnQgbWVjaGFuaXNtIG9mIEFMU0Egc2VxdWVuY2VyLgorPFA+VGhlIGF2YWlsYWJsZSBzeW50aCBhbmQgTUlESSBkZXZpY2VzIGNhbiBiZSBmb3VuZCBpbiBwcm9jIGludGVyZmFjZS4KK1J1biAiPFRUPmNhdCAvcHJvYy9hc291bmQvc2VxL29zczwvVFQ+IiwgYW5kIGNoZWNrIHRoZSBkZXZpY2VzLiBGb3IgZXhhbXBsZSwKK2lmIHlvdSB1c2UgYW4gQVdFNjQgY2FyZCwgeW91J2xsIHNlZSBsaWtlIHRoZSBmb2xsb3dpbmc6Cis8UFJFPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBPU1Mgc2VxdWVuY2VyIGVtdWxhdGlvbiB2ZXJzaW9uIDAuMS44CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQUxTQSBjbGllbnQgbnVtYmVyIDYzCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQUxTQSByZWNlaXZlciBwb3J0IDAKKworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IE51bWJlciBvZiBhcHBsaWNhdGlvbnM6IDAKKworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IE51bWJlciBvZiBzeW50aCBkZXZpY2VzOiAxCisKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzeW50aCAwOiBbRU1VODAwMF0KKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0eXBlIDB4MSA6IHN1YnR5cGUgMHgyMCA6IHZvaWNlcyAzMgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNhcGFiaWx0aWVzIDogaW9jdGwgZW5hYmxlZCAvIGxvYWRfcGF0Y2ggZW5hYmxlZAorCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgTnVtYmVyIG9mIE1JREkgZGV2aWNlczogMworCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgbWlkaSAwOiBbRW11ODAwMCBQb3J0LTBdIEFMU0EgcG9ydCA2NTowCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY2FwYWJpbGl0eSB3cml0ZSAvIG9wZW5lZCBub25lCisKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBtaWRpIDE6IFtFbXU4MDAwIFBvcnQtMV0gQUxTQSBwb3J0IDY1OjEKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjYXBhYmlsaXR5IHdyaXRlIC8gb3BlbmVkIG5vbmUKKworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IG1pZGkgMjogWzA6IE1QVS00MDEgKFVBUlQpXSBBTFNBIHBvcnQgNjQ6MAorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNhcGFiaWxpdHkgcmVhZC93cml0ZSAvIG9wZW5lZCBub25lPC9QUkU+CitOb3RlIHRoYXQgdGhlIGRldmljZSBudW1iZXIgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBpbmZvcm1hdGlvbiBvZgorPFRUPi9wcm9jL2Fzb3VuZC9vc3MtZGV2aWNlczwvVFQ+CitvciBvbmVzIG9mIHRoZSBvcmlnaW5hbCBPU1MgZHJpdmVyLiBVc2UgdGhlIGRldmljZSBudW1iZXIgbGlzdGVkIGluIDxUVD4vcHJvYy9hc291bmQvc2VxL29zczwvVFQ+Cit0byBwbGF5IHZpYSBPU1Mgc2VxdWVuY2VyIGVtdWxhdGlvbi4KKzxIMj4KKzMuIFVzaW5nIFN5bnRoZXNpemVyIERldmljZXM8L0gyPgorUnVuIHlvdXIgZmF2b3JpdGUgcHJvZ3JhbS4gSSd2ZSB0ZXN0ZWQgcGxheW1pZGktMi40LCBhd2VtaWRpLTAuNC4zLCBnbW9kLTMuMQorYW5kIHhtcC0xLjEuNS4gWW91IGNhbiBsb2FkIHNhbXBsZXMgdmlhIDxUVD4vZGV2L3NlcXVlbmNlcjwvVFQ+IGxpa2Ugc2Z4bG9hZCwKK3Rvby4KKzxQPklmIHRoZSBsb3dsZXZlbCBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYWNjZXNzIHRvIHN5bnRoIGRldmljZXMgKGxpa2UKK0VtdTgwMDAgZHJpdmVyKSwgdHdvIG9yIG1vcmUgYXBwbGljYXRpb25zIGFyZSBhbGxvd2VkIHRvIHJ1biBhdCB0aGUgc2FtZQordGltZS4KKzxIMj4KKzQuIFVzaW5nIE1JREkgRGV2aWNlczwvSDI+CitTbyBmYXIsIG9ubHkgTUlESSBvdXRwdXQgd2FzIHRlc3RlZC4gTUlESSBpbnB1dCB3YXMgbm90IGNoZWNrZWQgYXQgYWxsLAorYnV0IGhvcGVmdWxseSBpdCB3aWxsIHdvcmsuIFVzZSB0aGUgZGV2aWNlIG51bWJlciBsaXN0ZWQgaW4gPFRUPi9wcm9jL2Fzb3VuZC9zZXEvb3NzPC9UVD4uCitCZSBhd2FyZSB0aGF0IHRoZXNlIG51bWJlcnMgYXJlIG1vc3RseSBkaWZmZXJlbnQgZnJvbSB0aGUgbGlzdCBpbgorPFRUPi9wcm9jL2Fzb3VuZC9vc3MtZGV2aWNlczwvVFQ+LgorPEgyPgorNS4gTW9kdWxlIE9wdGlvbnM8L0gyPgorVGhlIGZvbGxvd2luZyBtb2R1bGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOgorPFVMPgorPExJPgorPFRUPm1heHFsZW48L1RUPjwvTEk+CisKKzxCUj5zcGVjaWZpZXMgdGhlIG1heGltdW0gcmVhZC93cml0ZSBxdWV1ZSBsZW5ndGguIFRoaXMgcXVldWUgaXMgcHJpdmF0ZQorZm9yIE9TUyBzZXF1ZW5jZXIsIHNvIHRoYXQgaXQgaXMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgcXVldWUgbGVuZ3RoIG9mIEFMU0EKK3NlcXVlbmNlci4gRGVmYXVsdCB2YWx1ZSBpcyAxMDI0LgorPExJPgorPFRUPnNlcV9vc3NfZGVidWc8L1RUPjwvTEk+CisKKzxCUj5zcGVjaWZpZXMgdGhlIGRlYnVnIGxldmVsIGFuZCBhY2NlcHRzIHplcm8gKD0gbm8gZGVidWcgbWVzc2FnZSkgb3IKK3Bvc2l0aXZlIGludGVnZXIuIERlZmF1bHQgdmFsdWUgaXMgMC48L1VMPgorCis8SDI+Cis2LiBRdWV1ZSBNZWNoYW5pc208L0gyPgorT1NTIHNlcXVlbmNlciBlbXVsYXRpb24gdXNlcyBhbiBBTFNBIHByaW9yaXR5IHF1ZXVlLiBUaGUKK2V2ZW50cyBmcm9tIDxUVD4vZGV2L3NlcXVlbmNlcjwvVFQ+IGFyZSBwcm9jZXNzZWQgYW5kIHB1dCBvbnRvIHRoZSBxdWV1ZQorc3BlY2lmaWVkIGJ5IG1vZHVsZSBvcHRpb24uCis8UD5BbGwgdGhlIGV2ZW50cyBmcm9tIDxUVD4vZGV2L3NlcXVlbmNlcjwvVFQ+IGFyZSBwYXJzZWQgYXQgYmVnaW5uaW5nLgorVGhlIHRpbWluZyBldmVudHMgYXJlIGFsc28gcGFyc2VkIGF0IHRoaXMgbW9tZW50LCBzbyB0aGF0IHRoZSBldmVudHMgbWF5CitiZSBwcm9jZXNzZWQgaW4gcmVhbC10aW1lLiBTZW5kaW5nIGFuIGV2ZW50IEFCU1RJTUUgMCBzd2l0Y2hlcyB0aGUgb3BlcmF0aW9uCittb2RlIHRvIHJlYWwtdGltZSBtb2RlLCBhbmQgc2VuZGluZyBhbiBldmVudCBSRUxUSU1FIDAgc3dpdGNoZXMgaXQgb2ZmLgorSW4gdGhlIHJlYWwtdGltZSBtb2RlLCBhbGwgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGltbWVkaWF0ZWx5LgorPFA+VGhlIHF1ZXVlZCBldmVudHMgYXJlIGRpc3BhdGNoZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQUxTQSBzZXF1ZW5jZXIKK3BvcnRzIGFmdGVyIHNjaGVkdWxlZCB0aW1lIGJ5IEFMU0Egc2VxdWVuY2VyIGRpc3BhdGNoZXIuCis8UD5JZiB0aGUgd3JpdGUtcXVldWUgaXMgZnVsbCwgdGhlIGFwcGxpY2F0aW9uIHNsZWVwcyB1bnRpbCBhIGNlcnRhaW4gYW1vdW50CisoYXMgZGVmYXVsdCBvbmUgaGFsZikgYmVjb21lcyBlbXB0eSBpbiBibG9ja2luZyBtb2RlLiBUaGUgc3luY2hyb25pemF0aW9uCit0byB3cml0ZSB0aW1pbmcgd2FzIGltcGxlbWVudGVkLCB0b28uCis8UD5UaGUgaW5wdXQgZnJvbSBNSURJIGRldmljZXMgb3IgZWNoby1iYWNrIGV2ZW50cyBhcmUgc3RvcmVkIG9uIHJlYWQgRklGTworcXVldWUuIElmIGFwcGxpY2F0aW9uIHJlYWRzIDxUVD4vZGV2L3NlcXVlbmNlcjwvVFQ+IGluIGJsb2NraW5nIG1vZGUsIHRoZQorcHJvY2VzcyB3aWxsIGJlIGF3YWtlZC4KKworPEgyPgorNy4gSW50ZXJmYWNlIHRvIFN5bnRoZXNpemVyIERldmljZTwvSDI+CisKKzxIMz4KKzcuMS4gUmVnaXN0cmF0aW9uPC9IMz4KK1RvIHJlZ2lzdGVyIGFuIE9TUyBzeW50aGVzaXplciBkZXZpY2UsIHVzZSA8VFQ+c25kX3NlcV9vc3Nfc3ludGhfcmVnaXN0ZXI8L1RUPgorZnVuY3Rpb24uCis8UFJFPmludCBzbmRfc2VxX29zc19zeW50aF9yZWdpc3RlcihjaGFyICpuYW1lLCBpbnQgdHlwZSwgaW50IHN1YnR5cGUsIGludCBudm9pY2VzLAorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNuZF9zZXFfb3NzX2NhbGxiYWNrX3QgKm9wZXIsIHZvaWQgKnByaXZhdGVfZGF0YSk8L1BSRT4KK1RoZSBhcmd1bWVudHMgPFRUPm5hbWU8L1RUPiwgPFRUPnR5cGU8L1RUPiwgPFRUPnN1YnR5cGU8L1RUPiBhbmQKKzxUVD5udm9pY2VzPC9UVD4KK2FyZSB1c2VkIGZvciBtYWtpbmcgdGhlIGFwcHJvcHJpYXRlIHN5bnRoX2luZm8gc3RydWN0dXJlIGZvciBpb2N0bC4gVGhlCityZXR1cm4gdmFsdWUgaXMgYW4gaW5kZXggbnVtYmVyIG9mIHRoaXMgZGV2aWNlLiBUaGlzIGluZGV4IG11c3QgYmUgcmVtZW1iZXJlZAorZm9yIHVucmVnaXN0ZXIuIElmIHJlZ2lzdHJhdGlvbiBpcyBmYWlsZWQsIC1lcnJubyB3aWxsIGJlIHJldHVybmVkLgorPFA+VG8gcmVsZWFzZSB0aGlzIGRldmljZSwgY2FsbCA8VFQ+c25kX3NlcV9vc3Nfc3ludGhfdW5yZWdpc3RlciBmdW5jdGlvbjwvVFQ+OgorPFBSRT5pbnQgc25kX3NlcV9vc3Nfc3ludGhfdW5yZWdpc3RlcihpbnQgaW5kZXgpLDwvUFJFPgord2hlcmUgdGhlIDxUVD5pbmRleDwvVFQ+IGlzIHRoZSBpbmRleCBudW1iZXIgcmV0dXJuZWQgYnkgcmVnaXN0ZXIgZnVuY3Rpb24uCis8SDM+Cis3LjIuIENhbGxiYWNrczwvSDM+CitPU1Mgc3ludGhlc2l6ZXIgZGV2aWNlcyBoYXZlIGNhcGFiaWxpdHkgZm9yIHNhbXBsZSBkb3dubG9hZGluZyBhbmQgaW9jdGxzCitsaWtlIHNhbXBsZSByZXNldC4gSW4gT1NTIGVtdWxhdGlvbiwgdGhlc2Ugc3BlY2lhbCBmZWF0dXJlcyBhcmUgcmVhbGl6ZWQKK2J5IHVzaW5nIGNhbGxiYWNrcy4gVGhlIHJlZ2lzdHJhdGlvbiBhcmd1bWVudCBvcGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGVzZQorY2FsbGJhY2tzLiBUaGUgZm9sbG93aW5nIGNhbGxiYWNrIGZ1bmN0aW9ucyBtdXN0IGJlIGRlZmluZWQ6Cis8UFJFPnNuZF9zZXFfb3NzX2NhbGxiYWNrX3Q6CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50ICgqb3Blbikoc25kX3NlcV9vc3NfYXJnX3QgKnAsIHZvaWQgKmNsb3N1cmUpOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKmNsb3NlKShzbmRfc2VxX29zc19hcmdfdCAqcCk7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50ICgqaW9jdGwpKHNuZF9zZXFfb3NzX2FyZ190ICpwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50ICgqbG9hZF9wYXRjaCkoc25kX3NlcV9vc3NfYXJnX3QgKnAsIGludCBmb3JtYXQsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IG9mZnMsIGludCBjb3VudCk7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50ICgqcmVzZXQpKHNuZF9zZXFfb3NzX2FyZ190ICpwKTsKK0V4Y2VwdCBmb3IgPFRUPm9wZW48L1RUPiBhbmQgPFRUPmNsb3NlPC9UVD4gY2FsbGJhY2tzLCB0aGV5IGFyZSBhbGxvd2VkCit0byBiZSBOVUxMLgorPFA+RWFjaCBjYWxsYmFjayBmdW5jdGlvbiB0YWtlcyB0aGUgYXJndW1lbnQgdHlwZSBzbmRfc2VxX29zc19hcmdfdCBhcyB0aGUKK2ZpcnN0IGFyZ3VtZW50LgorPFBSRT5zdHJ1Y3Qgc25kX3NlcV9vc3NfYXJnX3QgeworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCBhcHBfaW5kZXg7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50IGZpbGVfbW9kZTsKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpbnQgc2VxX21vZGU7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc25kX3NlcV9hZGRyX3QgYWRkcjsKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2b2lkICpwcml2YXRlX2RhdGE7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50IGV2ZW50X3Bhc3Npbmc7Cit9OzwvUFJFPgorVGhlIGZpcnN0IHRocmVlIGZpZWxkcywgPFRUPmFwcF9pbmRleDwvVFQ+LCA8VFQ+ZmlsZV9tb2RlPC9UVD4gYW5kCis8VFQ+c2VxX21vZGU8L1RUPgorYXJlIGluaXRpYWxpemVkIGJ5IE9TUyBzZXF1ZW5jZXIuIFRoZSA8VFQ+YXBwX2luZGV4PC9UVD4gaXMgdGhlIGFwcGxpY2F0aW9uCitpbmRleCB3aGljaCBpcyB1bmlxdWUgdG8gZWFjaCBhcHBsaWNhdGlvbiBvcGVuaW5nIE9TUyBzZXF1ZW5jZXIuIFRoZQorPFRUPmZpbGVfbW9kZTwvVFQ+CitpcyBiaXQtZmxhZ3MgaW5kaWNhdGluZyB0aGUgZmlsZSBvcGVyYXRpb24gbW9kZS4gU2VlCis8VFQ+c2VxX29zcy5oPC9UVD4KK2ZvciBpdHMgbWVhbmluZy4gVGhlIDxUVD5zZXFfbW9kZTwvVFQ+IGlzIHNlcXVlbmNlciBvcGVyYXRpb24gbW9kZS4gSW4KK3RoZSBjdXJyZW50IHZlcnNpb24sIG9ubHkgPFRUPlNORF9PU1NTRVFfTU9ERV9TWU5USDwvVFQ+IGlzIHVzZWQuCis8UD5UaGUgbmV4dCB0d28gZmllbGRzLCA8VFQ+YWRkcjwvVFQ+IGFuZCA8VFQ+cHJpdmF0ZV9kYXRhPC9UVD4sIG11c3QgYmUKK2ZpbGxlZCBieSB0aGUgc3ludGggZHJpdmVyIGF0IG9wZW4gY2FsbGJhY2suIFRoZSA8VFQ+YWRkcjwvVFQ+IGNvbnRhaW5zCit0aGUgYWRkcmVzcyBvZiBBTFNBIHNlcXVlbmNlciBwb3J0IHdoaWNoIGlzIGFzc2lnbmVkIHRvIHRoaXMgZGV2aWNlLiBJZgordGhlIGRyaXZlciBhbGxvY2F0ZXMgbWVtb3J5IGZvciA8VFQ+cHJpdmF0ZV9kYXRhPC9UVD4sIGl0IG11c3QgYmUgcmVsZWFzZWQKK2luIGNsb3NlIGNhbGxiYWNrIGJ5IGl0c2VsZi4KKzxQPlRoZSBsYXN0IGZpZWxkLCA8VFQ+ZXZlbnRfcGFzc2luZzwvVFQ+LCBpbmRpY2F0ZXMgaG93IHRvIHRyYW5zbGF0ZSBub3RlLW9uCisvIG9mZiBldmVudHMuIEluIDxUVD5QUk9DRVNTX0VWRU5UUzwvVFQ+IG1vZGUsIHRoZSBub3RlIDI1NSBpcyByZWdhcmRlZAorYXMgdmVsb2NpdHkgY2hhbmdlLCBhbmQga2V5IHByZXNzdXJlIGV2ZW50IGlzIHBhc3NlZCB0byB0aGUgcG9ydC4gSW4gPFRUPlBBU1NfRVZFTlRTPC9UVD4KK21vZGUsIGFsbCBub3RlIG9uL29mZiBldmVudHMgYXJlIHBhc3NlZCB0byB0aGUgcG9ydCB3aXRob3V0IG1vZGlmaWVkLiA8VFQ+UFJPQ0VTU19LRVlQUkVTUzwvVFQ+Cittb2RlIGNoZWNrcyB0aGUgbm90ZSBhYm92ZSAxMjggYW5kIHJlZ2FyZHMgaXQgYXMga2V5IHByZXNzdXJlIGV2ZW50IChtYWlubHkKK2ZvciBFbXU4MDAwIGRyaXZlcikuCis8SDQ+Cis3LjIuMS4gT3BlbiBDYWxsYmFjazwvSDQ+CitUaGUgPFRUPm9wZW48L1RUPiBpcyBjYWxsZWQgYXQgZWFjaCB0aW1lIHRoaXMgZGV2aWNlIGlzIG9wZW5lZCBieSBhbiBhcHBsaWNhdGlvbgordXNpbmcgT1NTIHNlcXVlbmNlci4gVGhpcyBtdXN0IG5vdCBiZSBOVUxMLiBUeXBpY2FsbHksIHRoZSBvcGVuIGNhbGxiYWNrCitkb2VzIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlOgorPE9MPgorPExJPgorQWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHJlY29yZC48L0xJPgorCis8TEk+CitDcmVhdGUgYW4gQUxTQSBzZXF1ZW5jZXIgcG9ydC48L0xJPgorCis8TEk+CitTZXQgdGhlIG5ldyBwb3J0IGFkZHJlc3Mgb24gYXJnLT5hZGRyLjwvTEk+CisKKzxMST4KK1NldCB0aGUgcHJpdmF0ZSBkYXRhIHJlY29yZCBwb2ludGVyIG9uIGFyZy0+cHJpdmF0ZV9kYXRhLjwvTEk+Cis8L09MPgorTm90ZSB0aGF0IHRoZSB0eXBlIGJpdC1mbGFncyBpbiBwb3J0X2luZm8gb2YgdGhpcyBzeW50aCBwb3J0IG11c3QgTk9UIGNvbnRhaW4KKzxUVD5UWVBFX01JRElfR0VORVJJQzwvVFQ+CitiaXQuIEluc3RlYWQsIDxUVD5UWVBFX1NQRUNJRklDPC9UVD4gc2hvdWxkIGJlIHVzZWQuIEFsc28sIDxUVD5DQVBfU1VCU0NSSVBUSU9OPC9UVD4KK2JpdCBzaG91bGQgTk9UIGJlIGluY2x1ZGVkLCB0b28uIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHRlbGwgaXQgZnJvbSBvdGhlcgorbm9ybWFsIE1JREkgZGV2aWNlcy4gSWYgdGhlIG9wZW4gcHJvY2VkdXJlIHN1Y2NlZWRlZCwgcmV0dXJuIHplcm8uIE90aGVyd2lzZSwKK3JldHVybiAtZXJybm8uCis8SDQ+Cis3LjIuMiBJb2N0bCBDYWxsYmFjazwvSDQ+CitUaGUgPFRUPmlvY3RsPC9UVD4gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNlcXVlbmNlciByZWNlaXZlcyBkZXZpY2Utc3BlY2lmaWMKK2lvY3Rscy4gVGhlIGZvbGxvd2luZyB0d28gaW9jdGxzIHNob3VsZCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBjYWxsYmFjazoKKzxVTD4KKzxMST4KKzxUVD5JT0NUTF9TRVFfUkVTRVRfU0FNUExFUzwvVFQ+PC9MST4KKworPEJSPnJlc2V0IGFsbCBzYW1wbGVzIG9uIG1lbW9yeSAtLSByZXR1cm4gMAorPExJPgorPFRUPklPQ1RMX1NZTlRIX01FTUFWTDwvVFQ+PC9MST4KKworPEJSPnJldHVybiB0aGUgYXZhaWxhYmxlIG1lbW9yeSBzaXplCis8TEk+Cis8VFQ+Rk1fNE9QX0VOQUJMRTwvVFQ+PC9MST4KKworPEJSPmNhbiBiZSBpZ25vcmVkIHVzdWFsbHk8L1VMPgorVGhlIG90aGVyIGlvY3RscyBhcmUgcHJvY2Vzc2VkIGluc2lkZSB0aGUgc2VxdWVuY2VyIHdpdGhvdXQgcGFzc2luZyB0bwordGhlIGxvd2xldmVsIGRyaXZlci4KKzxIND4KKzcuMi4zIExvYWRfUGF0Y2ggQ2FsbGJhY2s8L0g0PgorVGhlIDxUVD5sb2FkX3BhdGNoPC9UVD4gY2FsbGJhY2sgaXMgdXNlZCBmb3Igc2FtcGxlLWRvd25sb2FkaW5nLiBUaGlzIGNhbGxiYWNrCittdXN0IHJlYWQgdGhlIGRhdGEgb24gdXNlci1zcGFjZSBhbmQgdHJhbnNmZXIgdG8gZWFjaCBkZXZpY2UuIFJldHVybiAwCitpZiBzdWNjZWVkZWQsIGFuZCAtZXJybm8gaWYgZmFpbGVkLiBUaGUgZm9ybWF0IGFyZ3VtZW50IGlzIHRoZSBwYXRjaCBrZXkKK2luIHBhdGNoX2luZm8gcmVjb3JkLiBUaGUgYnVmIGlzIHVzZXItc3BhY2UgcG9pbnRlciB3aGVyZSBwYXRjaF9pbmZvIHJlY29yZAoraXMgc3RvcmVkLiBUaGUgb2ZmcyBjYW4gYmUgaWdub3JlZC4gVGhlIGNvdW50IGlzIHRvdGFsIGRhdGEgc2l6ZSBvZiB0aGlzCitzYW1wbGUgZGF0YS4KKzxIND4KKzcuMi40IENsb3NlIENhbGxiYWNrPC9IND4KK1RoZSA8VFQ+Y2xvc2U8L1RUPiBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGlzIGRldmljZSBpcyBjbG9zZWQgYnkgdGhlCithcHBsaWNhaW9uLiBJZiBhbnkgcHJpdmF0ZSBkYXRhIHdhcyBhbGxvY2F0ZWQgaW4gb3BlbiBjYWxsYmFjaywgaXQgbXVzdAorYmUgcmVsZWFzZWQgaW4gdGhlIGNsb3NlIGNhbGxiYWNrLiBUaGUgZGVsZXRpb24gb2YgQUxTQSBwb3J0IHNob3VsZCBiZQorZG9uZSBoZXJlLCB0b28uIFRoaXMgY2FsbGJhY2sgbXVzdCBub3QgYmUgTlVMTC4KKzxIND4KKzcuMi41IFJlc2V0IENhbGxiYWNrPC9IND4KK1RoZSA8VFQ+cmVzZXQ8L1RUPiBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiBzZXF1ZW5jZXIgZGV2aWNlIGlzIHJlc2V0IG9yCitjbG9zZWQgYnkgYXBwbGljYXRpb25zLiBUaGUgY2FsbGJhY2sgc2hvdWxkIHR1cm4gb2ZmIHRoZSBzb3VuZHMgb24gdGhlCityZWxldmFudCBwb3J0IGltbWVkaWF0ZWx5LCBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RhdHVzIG9mIHRoZSBwb3J0LiBJZiB0aGlzCitjYWxsYmFjayBpcyB1bmRlZmluZWQsIE9TUyBzZXEgc2VuZHMgYSA8VFQ+SEVBUlRCRUFUPC9UVD4gZXZlbnQgdG8gdGhlCitwb3J0LgorPEgzPgorNy4zIEV2ZW50czwvSDM+CitNb3N0IG9mIHRoZSBldmVudHMgYXJlIHByb2Nlc3NlZCBieSBzZXF1ZW5jZXIgYW5kIHRyYW5zbGF0ZWQgdG8gdGhlIGFkZXF1YXRlCitBTFNBIHNlcXVlbmNlciBldmVudHMsIHNvIHRoYXQgZWFjaCBzeW50aCBkZXZpY2UgY2FuIHJlY2VpdmUgYnkgaW5wdXRfZXZlbnQKK2NhbGxiYWNrIG9mIEFMU0Egc2VxdWVuY2VyIHBvcnQuIFRoZSBmb2xsb3dpbmcgQUxTQSBldmVudHMgc2hvdWxkIGJlIGltcGxlbWVudGVkCitieSB0aGUgZHJpdmVyOgorPEJSPiZuYnNwOworPFRBQkxFIEJPUkRFUiBXSURUSD0iNzUlIiBOT1NBVkUgPgorPFRSIE5PU0FWRT4KKzxURCBOT1NBVkU+PEI+QUxTQSBldmVudDwvQj48L1REPgorCis8VEQ+PEI+T3JpZ2luYWwgT1NTIGV2ZW50czwvQj48L1REPgorPC9UUj4KKworPFRSPgorPFREPk5PVEVPTjwvVEQ+CisKKzxURD5TRVFfTk9URU9OCis8QlI+TUlESV9OT1RFT048L1REPgorPC9UUj4KKworPFRSPgorPFREPk5PVEU8L1REPgorCis8VEQ+U0VRX05PVEVPRkYKKzxCUj5NSURJX05PVEVPRkY8L1REPgorPC9UUj4KKworPFRSIE5PU0FWRT4KKzxURCBOT1NBVkU+S0VZUFJFU1M8L1REPgorCis8VEQ+TUlESV9LRVlfUFJFU1NVUkU8L1REPgorPC9UUj4KKworPFRSIE5PU0FWRT4KKzxURD5DSEFOUFJFU1M8L1REPgorCis8VEQgTk9TQVZFPlNFUV9BRlRFUlRPVUNICis8QlI+TUlESV9DSE5fUFJFU1NVUkU8L1REPgorPC9UUj4KKworPFRSIE5PU0FWRT4KKzxURCBOT1NBVkU+UEdNQ0hBTkdFPC9URD4KKworPFREIE5PU0FWRT5TRVFfUEdNQ0hBTkdFCis8QlI+TUlESV9QR01fQ0hBTkdFPC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5QSVRDSEJFTkQ8L1REPgorCis8VEQ+U0VRX0NPTlRST0xMRVIoQ1RSTF9QSVRDSF9CRU5ERVIpCis8QlI+TUlESV9QSVRDSF9CRU5EPC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5DT05UUk9MTEVSPC9URD4KKworPFREPk1JRElfQ1RMX0NIQU5HRQorPEJSPlNFUV9CQUxBTkNFICh3aXRoIENUTF9QQU4pPC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5DT05UUk9MMTQ8L1REPgorCis8VEQ+U0VRX0NPTlRST0xMRVI8L1REPgorPC9UUj4KKworPFRSPgorPFREPlJFR1BBUkFNPC9URD4KKworPFREPlNFUV9DT05UUk9MTEVSKENUUkxfUElUQ0hfQkVOREVSX1JBTkdFKTwvVEQ+Cis8L1RSPgorCis8VFI+Cis8VEQ+U1lTRVg8L1REPgorCis8VEQ+U0VRX1NZU0VYPC9URD4KKzwvVFI+Cis8L1RBQkxFPgorCis8UD5UaGUgbW9zdCBvZiB0aGVzZSBiZWhhdmlvciBjYW4gYmUgcmVhbGl6ZWQgYnkgTUlESSBlbXVsYXRpb24gZHJpdmVyCitpbmNsdWRlZCBpbiB0aGUgRW11ODAwMCBsb3dsZXZlbCBkcml2ZXIuIEluIHRoZSBmdXR1cmUgcmVsZWFzZSwgdGhpcyBtb2R1bGUKK3dpbGwgYmUgaW5kZXBlbmRlbnQuCis8UD5Tb21lIE9TUyBldmVudHMgKDxUVD5TRVFfUFJJVkFURTwvVFQ+IGFuZCA8VFQ+U0VRX1ZPTFVNRTwvVFQ+IGV2ZW50cykgYXJlIHBhc3NlZCBhcyBldmVudAordHlwZSBTTkRfU0VRX09TU19QUklWQVRFLiAgVGhlIE9TUyBzZXF1ZW5jZXIgcGFzc2VzIHRoZXNlIGV2ZW50IDggYnl0ZQorcGFja2V0cyB3aXRob3V0IGFueSBtb2RpZmljYXRpb24uIFRoZSBsb3dsZXZlbCBkcml2ZXIgc2hvdWxkIHByb2Nlc3MgdGhlc2UKK2V2ZW50cyBhcHByb3ByaWF0ZWx5LgorPEgyPgorOC4gSW50ZXJmYWNlIHRvIE1JREkgRGV2aWNlPC9IMj4KK1NpbmNlIHRoZSBPU1MgZW11bGF0aW9uIHByb2JlcyB0aGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uIG9mIEFMU0EgTUlESSBzZXF1ZW5jZXIKK3BvcnRzIGF1dG9tYXRpY2FsbHkgYnkgcmVjZWl2aW5nIGFubm91bmNlbWVudCBmcm9tIEFMU0Egc2VxdWVuY2VyLCB0aGUKK01JREkgZGV2aWNlcyBkb24ndCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgZXhwbGljaXRseSBsaWtlIHN5bnRoIGRldmljZXMuCitIb3dldmVyLCB0aGUgTUlESSBwb3J0X2luZm8gcmVnaXN0ZXJlZCB0byBBTFNBIHNlcXVlbmNlciBtdXN0IGluY2x1ZGUgYSBncm91cAorbmFtZSA8VFQ+U05EX1NFUV9HUk9VUF9ERVZJQ0U8L1RUPiBhbmQgYSBjYXBhYmlsaXR5LWJpdCA8VFQ+Q0FQX1JFQUQ8L1RUPiBvcgorPFRUPkNBUF9XUklURTwvVFQ+LiBBbHNvLCBzdWJzY3JpcHRpb24gY2FwYWJpbGl0aWVzLCA8VFQ+Q0FQX1NVQlNfUkVBRDwvVFQ+IG9yIDxUVD5DQVBfU1VCU19XUklURTwvVFQ+LAorbXVzdCBiZSBkZWZpbmVkLCB0b28uIElmIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQsIHRoZSBwb3J0IGlzIG5vdAorcmVnaXN0ZXJlZCBhcyBPU1Mgc2VxdWVuY2VyIE1JREkgZGV2aWNlLgorPFA+VGhlIGV2ZW50cyB2aWEgTUlESSBkZXZpY2VzIGFyZSBwYXJzZWQgaW4gT1NTIHNlcXVlbmNlciBhbmQgY29udmVydGVkCit0byB0aGUgY29ycmVzcG9uZGluZyBBTFNBIHNlcXVlbmNlciBldmVudHMuIFRoZSBpbnB1dCBmcm9tIE1JREkgc2VxdWVuY2VyCitpcyBhbHNvIGNvbnZlcnRlZCB0byBNSURJIGJ5dGUgZXZlbnRzIGJ5IE9TUyBzZXF1ZW5jZXIuIFRoaXMgd29ya3MganVzdAorYSByZXZlcnNlIHdheSBvZiBzZXFfbWlkaSBtb2R1bGUuCis8SDI+Cis5LiBLbm93biBQcm9ibGVtcyAvIFRPRE8nczwvSDI+CisKKzxVTD4KKzxMST4KK1BhdGNoIGxvYWRpbmcgdmlhIEFMU0EgaW5zdHJ1bWVudCBsYXllciBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LjwvTEk+Cis8L1VMPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc2VyaWFsLXUxNjU1MC50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc2VyaWFsLXUxNjU1MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5MTk1NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zZXJpYWwtdTE2NTUwLnR4dApAQCAtMCwwICsxLDg4IEBACisKKwkJCVNlcmlhbCBVQVJUIDE2NDUwLzE2NTUwIE1JREkgZHJpdmVyCisJCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYWRhcHRvciBtb2R1bGUgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gc2VsZWN0IGVpdGhlcjoKKworICAwIC0gUm9sYW5kIFNvdW5kY2FudmFzIHN1cHBvcnQgKGRlZmF1bHQpCisgIDEgLSBNaWRpYXRvciBNUy0xMjRUIHN1cHBvcnQgKDEpCisgIDIgLSBNaWRpYXRvciBNUy0xMjRXIFMvQSBtb2RlICgyKQorICAzIC0gTVMtMTI0VyBNL0IgbW9kZSBzdXBwb3J0ICgzKQorICA0IC0gR2VuZXJpYyBkZXZpY2Ugd2l0aCBtdWx0aXBsZSBpbnB1dCBzdXBwb3J0ICg0KQorCitGb3IgdGhlIE1pZGlhdG9yIE1TLTEyNFcsIHlvdSBtdXN0IHNldCB0aGUgcGh5c2ljYWwgTS1TIGFuZCBBLUIKK3N3aXRjaGVzIG9uIHRoZSBNaWRpYXRvciB0byBtYXRjaCB0aGUgZHJpdmVyIG1vZGUgeW91IHNlbGVjdC4KKworSW4gUm9sYW5kIFNvdW5kY2FudmFzIG1vZGUsIG11bHRpcGxlIEFMU0EgcmF3IE1JREkgc3Vic3RyZWFtcyBhcmUgc3VwcG9ydGVkCisobWlkaUNuRDAtbWlkaUNuRDE1KS4gIFdoZW5ldmVyIHlvdSB3cml0ZSB0byBhIGRpZmZlcmVudCBzdWJzdHJlYW0sIHRoZSBkcml2ZXIKK3NlbmRzIHRoZSBub25zdGFuZGFyZCBNSURJIGNvbW1hbmQgc2VxdWVuY2UgRjUgTk4sIHdoZXJlIE5OIGlzIHRoZSBzdWJzdHJlYW0KK251bWJlciBwbHVzIDEuICBSb2xhbmQgbW9kdWxlcyB1c2UgdGhpcyBjb21tYW5kIHRvIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudAorInBhcnRzIiwgc28gdGhpcyBmZWF0dXJlIGxldHMgeW91IHRyZWF0IGVhY2ggcGFydCBhcyBhIGRpc3RpbmN0IHJhdyBNSURJCitzdWJzdHJlYW0uIFRoZSBkcml2ZXIgcHJvdmlkZXMgbm8gd2F5IHRvIHNlbmQgRjUgMDAgKG5vIHNlbGVjdGlvbikgb3IgdG8gbm90CitzZW5kIHRoZSBGNSBOTiBjb21tYW5kIHNlcXVlbmNlIGF0IGFsbDsgcGVyaGFwcyBpdCBvdWdodCB0by4KKworVXNhZ2UgZXhhbXBsZSBmb3Igc2ltcGxlIHNlcmlhbCBjb252ZXJ0ZXI6CisKKwkvc2Jpbi9zZXRzZXJpYWwgL2Rldi90dHlTMCB1YXJ0IG5vbmUKKwkvc2Jpbi9tb2Rwcm9iZSBzbmQtc2VyaWFsLXUxNjU1MCBwb3J0PTB4M2Y4IGlycT00IHNwZWVkPTExNTIwMAorCitVc2FnZSBleGFtcGxlIGZvciBSb2xhbmQgU291bmRDYW52YXMgd2l0aCA0IE1JREkgcG9ydHM6CisKKwkvc2Jpbi9zZXRzZXJpYWwgL2Rldi90dHlTMCB1YXJ0IG5vbmUKKwkvc2Jpbi9tb2Rwcm9iZSBzbmQtc2VyaWFsLXUxNjU1MCBwb3J0PTB4M2Y4IGlycT00IG91dHM9NAorCitJbiBNUy0xMjRUIG1vZGUsIG9uZSByYXcgTUlESSBzdWJzdHJlYW0gaXMgc3VwcG9ydGVkIChtaWRpQ25EMCk7IHRoZSBvdXRzCittb2R1bGUgcGFyYW1ldGVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIDEuIFRoZSBkcml2ZXIgc2VuZHMgdGhlIHNhbWUgZGF0YSB0bworYWxsIGZvdXIgTUlESSBPdXQgY29ubmVjdG9ycy4gIFNldCB0aGUgQS1CIHN3aXRjaCBhbmQgdGhlIHNwZWVkIG1vZHVsZQorcGFyYW1ldGVyIHRvIG1hdGNoIChBPTE5MjAwLCBCPTk2MDApLgorCitVc2FnZSBleGFtcGxlIGZvciBNUy0xMjRULCB3aXRoIEEtQiBzd2l0Y2ggaW4gQSBwb3NpdGlvbjoKKworCS9zYmluL3NldHNlcmlhbCAvZGV2L3R0eVMwIHVhcnQgbm9uZQorCS9zYmluL21vZHByb2JlIHNuZC1zZXJpYWwtdTE2NTUwIHBvcnQ9MHgzZjggaXJxPTQgYWRhcHRvcj0xIFwKKwkJCXNwZWVkPTE5MjAwCisKK0luIE1TLTEyNFcgUy9BIG1vZGUsIG9uZSByYXcgTUlESSBzdWJzdHJlYW0gaXMgc3VwcG9ydGVkIChtaWRpQ25EMCk7Cit0aGUgb3V0cyBtb2R1bGUgcGFyYW1ldGVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIDEuIFRoZSBkcml2ZXIgc2VuZHMKK3RoZSBzYW1lIGRhdGEgdG8gYWxsIGZvdXIgTUlESSBPdXQgY29ubmVjdG9ycyBhdCBmdWxsIE1JREkgc3BlZWQuCisKK1VzYWdlIGV4YW1wbGUgZm9yIFMvQSBtb2RlOgorCisJL3NiaW4vc2V0c2VyaWFsIC9kZXYvdHR5UzAgdWFydCBub25lCisJL3NiaW4vbW9kcHJvYmUgc25kLXNlcmlhbC11MTY1NTAgcG9ydD0weDNmOCBpcnE9NCBhZGFwdG9yPTIKKworSW4gTVMtMTI0VyBNL0IgbW9kZSwgdGhlIGRyaXZlciBzdXBwb3J0cyAxNiBBTFNBIHJhdyBNSURJIHN1YnN0cmVhbXM7Cit0aGUgb3V0cyBtb2R1bGUgcGFyYW1ldGVyIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIDE2LiAgVGhlIHN1YnN0cmVhbQorbnVtYmVyIGdpdmVzIGEgYml0bWFzayBvZiB3aGljaCBNSURJIE91dCBjb25uZWN0b3JzIHRoZSBkYXRhIHNob3VsZCBiZQorc2VudCB0bywgd2l0aCBtaWRpQ25EMSBzZW5kaW5nIHRvIE91dCAxLCBtaWRpQ25EMiB0byBPdXQgMiwgbWlkaUNuRDQgdG8KK091dCAzLCBhbmQgbWlkaUNuRDggdG8gT3V0IDQuICBUaHVzIG1pZGlDbkQxNSBzZW5kcyB0aGUgZGF0YSB0byBhbGwgNCBwb3J0cy4KK0FzIGEgc3BlY2lhbCBjYXNlLCBtaWRpQ25EMCBhbHNvIHNlbmRzIHRvIGFsbCBwb3J0cywgc2luY2UgaXQgaXMgbm90IHVzZWZ1bAordG8gc2VuZCB0aGUgZGF0YSB0byBubyBwb3J0cy4gIE0vQiBtb2RlIGhhcyBleHRyYSBvdmVyaGVhZCB0byBzZWxlY3QgdGhlIE1JREkKK091dCBmb3IgZWFjaCBieXRlLCBzbyB0aGUgYWdncmVnYXRlIGRhdGEgcmF0ZSBhY3Jvc3MgYWxsIGZvdXIgTUlESSBPdXRzIGlzCithdCBtb3N0IG9uZSBieXRlIGV2ZXJ5IDUyMCB1cywgYXMgY29tcGFyZWQgd2l0aCB0aGUgZnVsbCBNSURJIGRhdGEgcmF0ZSBvZgorb25lIGJ5dGUgZXZlcnkgMzIwIHVzIHBlciBwb3J0LgorCitVc2FnZSBleGFtcGxlIGZvciBNL0IgbW9kZToKKworCS9zYmluL3NldHNlcmlhbCAvZGV2L3R0eVMwIHVhcnQgbm9uZQorCS9zYmluL21vZHByb2JlIHNuZC1zZXJpYWwtdTE2NTUwIHBvcnQ9MHgzZjggaXJxPTQgYWRhcHRvcj0zCisKK1RoZSBNUy0xMjRXIGhhcmR3YXJlJ3MgTS9BIG1vZGUgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuIFRoaXMgbW9kZSBhbGxvd3MKK3RoZSBNSURJIE91dHMgdG8gYWN0IGluZGVwZW5kZW50bHkgYXQgZG91YmxlIHRoZSBhZ2dyZWdhdGUgdGhyb3VnaHB1dCBvZiBNL0IsCitidXQgZG9lcyBub3QgYWxsb3cgc2VuZGluZyB0aGUgc2FtZSBieXRlIHNpbXVsdGFuZW91c2x5IHRvIG11bHRpcGxlIE1JREkgT3V0cy4gCitUaGUgTS9BIHByb3RvY29sIHJlcXVpcmVzIHRoZSBkcml2ZXIgdG8gdHdpZGRsZSB0aGUgbW9kZW0gY29udHJvbCBsaW5lcyB1bmRlcgordGltaW5nIGNvbnN0cmFpbnRzLCBzbyBpdCB3b3VsZCBiZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRvIGltcGxlbWVudCB0aGFuCit0aGUgb3RoZXIgbW9kZXMuCisKK01pZGlhdG9yIG1vZGVscyBvdGhlciB0aGFuIE1TLTEyNFcgYW5kIE1TLTEyNFQgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiAKK05vdGUgdGhhdCB0aGUgc3VmZml4IGxldHRlciBpcyBzaWduaWZpY2FudDsgdGhlIE1TLTEyNCBhbmQgTVMtMTI0QiBhcmUgbm90Citjb21wYXRpYmxlLCBub3IgYXJlIHRoZSBvdGhlciBrbm93biBtb2RlbHMgTVMtMTAxLCBNUy0xMDFCLCBNUy0xMDMsIGFuZCBNUy0xMTQuCitJIGRvIGhhdmUgZG9jdW1lbnRhdGlvbiAodGltLm1hbm5AY29tcGFxLmNvbSkgdGhhdCBwYXJ0aWFsbHkgY292ZXJzIHRoZXNlIG1vZGVscywKK2J1dCBubyB1bml0cyB0byBleHBlcmltZW50IHdpdGguICBUaGUgTVMtMTI0VyBzdXBwb3J0IGlzIHRlc3RlZCB3aXRoIGEgcmVhbCB1bml0LgorVGhlIE1TLTEyNFQgc3VwcG9ydCBpcyB1bnRlc3RlZCwgYnV0IHNob3VsZCB3b3JrLgorCitUaGUgR2VuZXJpYyBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgaW5wdXQgYW5kIG91dHB1dCBzdWJzdHJlYW1zIG92ZXIgYSBzaW5nbGUKK3NlcmlhbCBwb3J0LiAgU2ltaWxhciB0byBSb2xhbmQgU291bmRjYW52YXMgbW9kZSwgRjUgTk4gaXMgdXNlZCB0byBzZWxlY3QgdGhlCithcHByb3ByaWF0ZSBpbnB1dCBvciBvdXRwdXQgc3RyZWFtIChkZXBlbmRpbmcgb24gdGhlIGRhdGEgZGlyZWN0aW9uKS4KK0FkZGl0aW9uYWxseSwgdGhlIENUUyBzaWduYWwgaXMgdXNlZCB0byByZWd1bGF0ZSB0aGUgZGF0YSBmbG93LiAgVGhlIG51bWJlciBvZgoraW5wdXRzIGlzIHNwZWNpZmllZCBieSB0aGUgaW5zIHBhcmFtZXRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FEMTgxNiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FEMTgxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGJkOGYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQUQxODE2CkBAIC0wLDAgKzEsODQgQEAKK0RvY3VtZW50YXRpb24gZm9yIHRoZSBBRDE4MTYoQSkgc291bmQgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnN0YWxsYXRpb246CistLS0tLS0tLS0tLS0tCisKK1RvIGdldCB5b3VyIEFEMTgxNihBKSBiYXNlZCBzb3VuZCBjYXJkIHdvcmssIHlvdSdsbCBoYXZlIHRvIGVuYWJsZSBzdXBwb3J0IGZvcgorZXhwZXJpbWVudGFsIGNvZGUgKCJQcm9tcHQgZm9yIGRldmVsb3BtZW50IGFuZC9vciBpbmNvbXBsZXRlIGNvZGUvZHJpdmVycyIpCithbmQgaXNhcG5wICgiUGx1ZyBhbmQgUGxheSBzdXBwb3J0IiwgIklTQSBQbHVnIGFuZCBQbGF5IHN1cHBvcnQiKS4gRW5hYmxlCisiU291bmQgY2FyZCBzdXBwb3J0IiwgIk9TUyBtb2R1bGVzIHN1cHBvcnQiIGFuZCAiU3VwcG9ydCBmb3IgQUQxODE2KEEpIGJhc2VkCitjYXJkcyAoRVhQRVJJTUVOVEFMKSIgaW4gdGhlIHNvdW5kIGNvbmZpZ3VyYXRpb24gbWVudSwgdG9vLiBOb3cgYnVpbGQsIGluc3RhbGwKK2FuZCByZWJvb3QgdGhlIG5ldyBrZXJuZWwgYXMgdXN1YWwuCisKK0ZlYXR1cmVzOgorLS0tLS0tLS0tCisKK0xpc3Qgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyOgorLSBmdWxsLWR1cGxleCBzdXBwb3J0CistIHN1cHBvcnRlZCBhdWRpbyBmb3JtYXRzOiB1bnNpZ25lZCA4Yml0LCBzaWduZWQgMTZiaXQgbGl0dGxlIGVuZGlhbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgMTZiaXQgYmlnIGVuZGlhbiwgtS1sYXcsIEEtbGF3CistIHN1cHBvcnRlZCBjaGFubmVsczogbW9ubyBhbmQgc3RlcmVvCistIHN1cHBvcnRlZCByZWNvcmRpbmcgc291cmNlczogTWFzdGVyLCBDRCwgTGluZSwgTGluZTEsIExpbmUyLCBNaWMKKy0gc3VwcG9ydHMgcGhhdCAzZCBzdGVyZW8gY2lyY3VpdCAoTGluZSAzKQorCisKK1N1cHBvcnRlZCBjYXJkczoKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBjYXJkcyBhcmUga25vd24gdG8gd29yayB3aXRoIHRoaXMgZHJpdmVyOgorLSBUZXJyYXRlYyBCYXNlIDEgCistIFRlcnJhdGVjIEJhc2UgNjQgCistIEhQIEtheWFrIAorLSBBY2VyIEZYLTNECistIFNZLTE4MTYgCistIEhpZ2hzY3JlZW4gU291bmQtQm9vc3RhciAzMiBXYXZlIDNECistIEhpZ2hzY3JlZW4gU291bmQtQm9vc3RhciAxNiAKKy0gQVZNIEFwZXggUHJvIGNhcmQgCistIChBenRlY2ggU0MtMTYgM0QpIAorLSAoTmV3Y29tIFNDLTE2IDNEKSAKKy0gKFRlcnJhdGVjIEVXUzY0UykgCisKK0NhcmRzIGxpc3RlZCBpbiBicmFja2V0cyBhcmUgbm90IHN1cHBvcnRlZCByZWxpYWJsZS4gSWYgeW91IGhhdmUgc3VjaCBhIGNhcmQgCit5b3Ugc2hvdWxkIGFkZCB0aGUgZXh0cmEgcGFyYW1ldGVyOgorICBvcHRpb25zPTEKK3doZW4gbG9hZGluZyB0aGUgYWQxODE2IG1vZHVsZSB2aWEgbW9kcHJvYmUuIAorCisKK1Ryb3VibGVzaG9vdGluZzoKKy0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3Qgb2YgYWxsIHlvdSBzaG91bGQgY2hlY2ssIGlmIHRoZSBkcml2ZXIgaGFzIGJlZW4gbG9hZGVkCitwcm9wZXJseS4KKworSWYgbG9hZGluZyBvZiB0aGUgZHJpdmVyIHN1Y2NlZWRzLCBidXQgcGxheWJhY2svY2FwdHVyZSBmYWlscywgY2hlY2sKK2lmIHlvdSB1c2VkIHRoZSBjb3JyZWN0IHZhbHVlcyBmb3IgaXJxLCBkbWEgYW5kIGRtYTIgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuCitJZiBvbmUgb2YgdGhlbSBpcyB3cm9uZyB5b3UgdXN1YWxseSBnZXQgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlOgorCitOb3YgIDYgMTc6MDY6MTMgdGVrMDEga2VybmVsOiBTb3VuZDogRE1BIChvdXRwdXQpIHRpbWVkIG91dCAtIElSUS9EUlEgY29uZmlnIGVycm9yPworCitJZiBwbGF5YmFjay9jYXB0dXJlIGlzIHRvbyBmYXN0IG9yIHRvIHNsb3csIHlvdSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQKK3RoZSBjbG9jayBjaGlwIG9mIHlvdXIgc291bmQgY2FyZC4gVGhlIEFEMTgxNiB3YXMgZGVzaWduZWQgZm9yIGEgMzNNSHoKK29zY2lsbGF0b3IsIGhvd2V2ZXIgbW9zdCBzb3VuZCBjYXJkIG1hbnVmYWN0dXJlciB1c2Ugc2xpZ2h0bHkKK2RpZmZlcmVudCBvc2NpbGxhdG9ycyBhcyB0aGV5IGFyZSBjaGVhcGVyIHRoYW4gMzNNSHogb3NjaWxsYXRvcnMuIElmCit5b3UgaGF2ZSBzdWNoIGEgY2FyZCB5b3UgaGF2ZSB0byBhZGp1c3QgdGhlIGFkMTgxNl9jbG9ja2ZyZXEgcGFyYW1ldGVyCithYm92ZS4gRm9yIGV4YW1wbGU6IEZvciBhIGNhcmQgdXNpbmcgYSAzMi44NzVNSHogb3NjaWxsYXRvciB1c2UKK2FkMTgxNl9jbG9ja2ZyZXE9MzI4NzUgaW5zdGVhZCBvZiBhZDE4MTZfY2xvY2tmcmVxPTMzMDAwLgorCisKK1VwZGF0ZXMsIGJ1Z2ZpeGVzIGFuZCBidWdyZXBvcnRzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgdGhlIGRyaXZlciBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIHVuZGVyIGRldmVsb3BtZW50LCB5b3Ugc2hvdWxkCit3YXRjaCBvdXQgZm9yIHVwZGF0ZXMuICBVcGRhdGVzIG9mIHRoZSBkcml2ZXIgYXJlIGF2YWlsYWJsZSBvbiB0aGUKK0ludGVybmV0IGZyb20gb25lIG9mIG15IGhvbWUgcGFnZXM6CisgIGh0dHA6Ly93d3cuc3R1ZGVudC5pbmZvcm1hdGlrLnR1LWRhcm1zdGFkdC5kZS9+dGVrL3Byb2plY3RzL2xpbnV4Lmh0bWwKK29yOgorICBodHRwOi8vd3d3LnR1LWRhcm1zdGFkdC5kZS9+dGVrMDEvcHJvamVjdHMvbGludXguaHRtbAorCitCdWdyZXBvcnRzLCBidWdmaXhlcyBhbmQgcmVsYXRlZCBxdWVzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdmlhIEUtTWFpbCB0bzoKKyAgdGVrQHJiZy5pbmZvcm1hdGlrLnR1LWRhcm1zdGFkdC5kZQorCitUaG9yc3RlbiBLbmFiZSA8dGVrQHJiZy5pbmZvcm1hdGlrLnR1LWRhcm1zdGFkdC5kZT4KK0NocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KKwlMYXN0IG1vZGlmaWVkOiAyMDAwLzA5LzIwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BTFMgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BTFMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxZmZiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FMUwpAQCAtMCwwICsxLDY2IEBACitBTFMtMDA3L0FMUy0xMDAvQUxTLTIwMCBiYXNlZCBzb3VuZCBjYXJkcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydCBmb3Igc291bmQgY2FyZHMgYmFzZWQgYXJvdW5kIHRoZSBBdmFuY2UgTG9naWMKK0FMUy0wMDcvQUxTLTEwMC9BTFMtMjAwIGNoaXAgaXMgaW5jbHVkZWQuICBUaGVzZSBjaGlwcyBhcmUgYSBzaW5nbGUKK2NoaXAgUG5QIHNvdW5kIHNvbHV0aW9uIHdoaWNoIGlzIG1vc3RseSBoYXJkd2FyZSBjb21wYXRpYmxlIHdpdGggdGhlCitTb3VuZCBCbGFzdGVyIDE2IGNhcmQsIHdpdGggbW9zdCBkaWZmZXJlbmNlcyBvY2N1cnJpbmcgaW4gdGhlIHVzZSBvZgordGhlIG1peGVyIHJlZ2lzdGVycy4gIEZvciB0aGlzIHJlYXNvbiB0aGUgQUxTIGNvZGUgaXMgaW50ZWdyYXRlZAorYXMgcGFydCBvZiB0aGUgU291bmQgQmxhc3RlciAxNiBkcml2ZXIgKGFkZGluZyBvbmx5IDgwMCBieXRlcyB0byB0aGUKK1NCMTYgZHJpdmVyKS4KKworVG8gdXNlIGFuIEFMUyBzb3VuZCBjYXJkIHVuZGVyIExpbnV4LCBlbmFibGUgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFzCittb2R1bGVzIGluIHRoZSBzb3VuZCBjb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBjb25maWc6CisgIC0gMTAwJSBTb3VuZCBCbGFzdGVyIGNvbXBhdGlibGVzIChTQjE2LzMyLzY0LCBFU1MsIEphenoxNikgc3VwcG9ydAorICAtIEZNIHN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQgCisgIC0gc3RhbmRhbG9uZSBNUFU0MDEgc3VwcG9ydCBtYXkgYmUgcmVxdWlyZWQgZm9yIHNvbWUgY2FyZHM7IGZvciB0aGUKKyAgICBBTFMtMDA3LCB3aGVuIHVzaW5nIGlzYXBucHRvb2xzLCBpdCBpcyByZXF1aXJlZAorU2luY2UgdGhlIEFMUy0wMDcvMTAwLzIwMCBhcmUgUG5QIGNhcmRzLCBJU0FQblAgc3VwcG9ydCBzaG91bGQgcHJvYmFibHkgYmUKK2NvbXBpbGVkIGluLiAgSWYga2VybmVsIGxldmVsIFBuUCBzdXBwb3J0IGlzIG5vdCBpbmNsdWRlZCwgaXNhcG5wdG9vbHMgd2lsbAorYmUgcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoZSBjYXJkIGJlZm9yZSB0aGUgc291bmQgbW9kdWxlcyBhcmUgbG9hZGVkLgorCitXaGVuIHVzaW5nIGtlcm5lbCBsZXZlbCBJU0FQblAsIHRoZSBrZXJuZWwgc2hvdWxkIGNvcnJlY3RseSBpZGVudGlmeSBhbmQKK2NvbmZpZ3VyZSBhbGwgcmVzb3VyY2VzIHJlcXVpcmVkIGJ5IHRoZSBjYXJkIHdoZW4gdGhlICJzYiIgbW9kdWxlIGlzCitpbnNlcnRlZC4gIE5vdGUgdGhhdCB0aGUgQUxTLTAwNyBkb2VzIG5vdCBoYXZlIGEgMTYgYml0IERNQSBjaGFubmVsIGFuZCB0aGF0Cit0aGUgTVBVNDAxIGludGVyZmFjZSBvbiB0aGlzIGNhcmQgdXNlcyBhIGRpZmZlcmVudCBpbnRlcnJ1cHQgdG8gdGhlIGF1ZGlvCitzZWN0aW9uLiAgVGhpcyBzaG91bGQgYWxsIGJlIGNvcnJlY3RseSBjb25maWd1cmVkIGJ5IHRoZSBrZXJuZWw7IGlmIHByb2JsZW1zCit3aXRoIHRoZSBNUFU0MDEgaW50ZXJmYWNlIHN1cmZhY2UsIHRyeSB1c2luZyB0aGUgc3RhbmRhbG9uZSBNUFU0MDEgbW9kdWxlLAorcGFzc2luZyAiMCIgYXMgdGhlICJzYiIgbW9kdWxlJ3MgIm1wdV9pbyIgbW9kdWxlIHBhcmFtZXRlciB0byBwcmV2ZW50IHRoZQorc291bmRibGFzdGVyIGRyaXZlciBhdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIHRoZSBNUFU0MDEgaXRzZWxmLiAgVGhlIG9uYm9hcmQKK3N5bnRoIGRldmljZSBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgdGhlICJvcGwzIiBtb2R1bGUuCisKK0lmIGlzYXBucHRvb2xzIGlzIHVzZWQgdG8gd2FrZSB1cCB0aGUgc291bmQgY2FyZCAoYXMgaW4gMi4yLngpLCB0aGUgc2V0dGluZ3MKK29mIHRoZSBjYXJkJ3MgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGtlcm5lbCBtb2R1bGVzICgic2IiLCAib3BsMyIKK2FuZCAibXB1NDAxIikgdXNpbmcgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzLiAgV2hlbiBjb25maWd1cmluZyBhbiBBTFMtMDA3LCBiZQorc3VyZSB0byBzcGVjaWZ5IGRpZmZlcmVudCBJUlFzIGZvciB0aGUgYXVkaW8gYW5kIE1QVTQwMSBzZWN0aW9ucyAtIHRoaXMgY2FyZAorcmVxdWlyZXMgdGhleSBiZSBkaWZmZXJlbnQuICBGb3IgInNiIiwgImlvIiwgImlycSIgYW5kICJkbWEiIHNob3VsZCBiZSBzZXQKK3RvIHRoZSBzYW1lIHZhbHVlcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYXVkaW8gc2VjdGlvbiBvZiB0aGUgY2FyZCB3aXRoCitpc2FwbnAuICAiZG1hMTYiIHNob3VsZCBiZSBleHBsaWNpdGx5IHNldCB0byAiLTEiIGZvciBhbiBBTFMtMDA3IHNpbmNlIHRoaXMKK2NhcmQgZG9lcyBub3QgaGF2ZSBhIDE2IGJpdCBkbWEgY2hhbm5lbDsgaWYgbm90IHNwZWNpZmllZCB0aGUga2VybmVsIHdpbGwKK2RlZmF1bHQgdG8gdXNpbmcgY2hhbm5lbCA1IGFueXdheSB3aGljaCB3aWxsIGNhdXNlIGF1ZGlvIG5vdCB0byB3b3JrLiAKKyJtcHVfaW8iIHNob3VsZCBiZSBzZXQgdG8gMC4gIFRoZSAiaW8iIHBhcmFtZXRlciBvZiB0aGUgIm9wbDMiIG1vZHVsZSBzaG91bGQKK2Fsc28gYWdyZWUgd2l0aCB0aGUgc2V0dGluZyB1c2VkIGJ5IGlzYXBucC4gIFRvIGdldCB0aGUgTVBVNDAxIGludGVyZmFjZQord29ya2luZyBvbiBhbiBBTFMtMDA3IGNhcmQsIHRoZSAibXB1NDAxIiBtb2R1bGUgd2lsbCBiZSByZXF1aXJlZCBzaW5jZSB0aGlzCitjYXJkIHVzZXMgc2VwYXJhdGUgSVJRcyBmb3IgdGhlIGF1ZGlvIGFuZCBNUFU0MDEgc2VjdGlvbnMgYW5kIHRoZXJlIGlzIG5vCitwYXJhbWV0ZXIgYXZhaWxhYmxlIHRvIHBhc3MgYSBkaWZmZXJlbnQgSVJRIHRvIHRoZSAic2IiIGRyaXZlciAod2hvc2UKK2luYnVpbHQgTVBVNDAxIGRyaXZlciB3b3VsZCBvdGhlcndpc2UgYmUgZmluZSkuICBJbnNlcnQgdGhlIG1wdTQwMSBtb2R1bGUKK3Bhc3NpbmcgYXBwcm9wcmlhdGUgdmFsdWVzIHVzaW5nIHRoZSAiaW8iIGFuZCAiaXJxIiBwYXJhbWV0ZXJzLgorCitUaGUgcmVzdWx0aW5nIHNvdW5kIGRyaXZlciB3aWxsIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXM6CisgIC0gOCBhbmQgMTYgYml0IGF1ZGlvIHBsYXliYWNrCisgIC0gOCBhbmQgMTYgYml0IGF1ZGlvIHJlY29yZGluZworICAtIFNvZnR3YXJlIHNlbGVjdGlvbiBvZiByZWNvcmQgc291cmNlIChsaW5lIGluLCBDRCwgRk0sIG1pYywgbWFzdGVyKQorICAtIFJlY29yZCBhbmQgcGxheWJhY2sgb2YgbWlkaSBkYXRhIHZpYSB0aGUgZXh0ZXJuYWwgTVBVLTQwMQorICAtIFBsYXliYWNrIG9mIG1pZGkgZGF0YSB1c2luZyBpbmJ1aWx0IEZNIHN5bnRoZXNpemVyCisgIC0gQ29udHJvbCBvZiB0aGUgQUxTLTAwNyBtaXhlciB2aWEgYW55IE9TUy1jb21wYXRpYmxlIG1peGVyIHByb2dyYW1zLiAKKyAgICBDb250cm9scyBhdmFpbGFibGUgYXJlIE1hc3RlciAoTCZSKSwgTGluZSBpbiAoTCZSKSwgQ0QgKEwmUiksIAorICAgIERTUC9QQ00vYXVkaW8gb3V0IChMJlIpLCBGTSAoTCZSKSBhbmQgTWljIGluIChtb25vKS4KKworSm9uYXRoYW4gV29pdGhlCitqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1CiszMCBNYXJjaCAxOTk4CisKK01vZGlmaWVkIDIwMDAtMDItMjYgYnkgRGF2ZSBGb3JyZXN0LCBkcmY1bkB2aXJnaW5pYS5lZHUgdG8gYWRkIEFMUzEwMC9BTFMyMDAKK01vZGlmaWVkIDIwMDAtMDQtMTAgYnkgUGF1bCBMYXVmZXIsIHBlbGF1ZmVyQGNzdXBvbW9uYS5lZHUgdG8gYWRkIElTQVBuUCBpbmZvLgorTW9kaWZpZWQgMjAwMC0xMS0xOSBieSBKb25hdGhhbiBXb2l0aGUsIGp3b2l0aGVAcGh5c2ljcy5hZGVsYWlkZS5lZHUuYXUKKyAtIHVwZGF0ZWQgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCAyLjQueC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FXRTMyIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQVdFMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxNzliZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FXRTMyCkBAIC0wLDAgKzEsNzYgQEAKKwlJbnN0YWxsaW5nIGFuZCB1c2luZyBDcmVhdGl2ZSBBV0UgbWlkaSBzb3VuZCB1bmRlciBMaW51eC4KKworVGhpcyBkb2N1bWVudGF0aW9uIGlzIGRldm90ZWQgdG8gdGhlIENyZWF0aXZlIFNvdW5kIEJsYXN0ZXIgQVdFMzIsIEFXRTY0IGFuZCAKK1NCMzIuCisKKzEpIE1ha2Ugc3VyZSB5b3UgaGF2ZSBhbiBPUklHSU5BTCBDcmVhdGl2ZSBTQjMyLCBBV0UzMiBvciBBV0U2NCBjYXJkLiBUaGlzCisgICBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIGRyaXZlciB3b3JrcyBvbmx5IHdpdGggcmVhbCBDcmVhdGl2ZSBjYXJkcy4KKworMikgVGhlIGZpcnN0IHRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIHJlLWNvbXBpbGUgeW91ciBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvcgorICAgeW91ciBzb3VuZCBjYXJkLiBSdW4geW91ciBmYXZvdXJpdGUgdG9vbCB0byBjb25maWd1cmUgdGhlIGtlcm5lbCBhbmQgd2hlbgorICAgeW91IGdldCB0byB0aGUgIlNvdW5kIiBtZW51IHlvdSBzaG91bGQgZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmc6CisKKyAgIFNvdW5kIGNhcmQgc3VwcG9ydCwKKyAgIE9TUyBzb3VuZCBtb2R1bGVzLAorICAgMTAwJSBTb3VuZCBCbGFzdGVyIGNvbXBhdGlibGVzIChTQjE2LzMyLzY0LCBFU1MsIEphenoxNikgc3VwcG9ydCwKKyAgIEFXRTMyIHN5bnRoCisKKyAgIElmIHlvdXIgY2FyZCBpcyAiUGx1ZyBhbmQgUGxheSIgeW91IHdpbGwgYWxzbyBuZWVkIHRvIGVuYWJsZSB0aGVzZSB0d28KKyAgIG9wdGlvbnMsIGZvdW5kIHVuZGVyIHRoZSAiUGx1ZyBhbmQgUGxheSBjb25maWd1cmF0aW9uIiBtZW51OgorCisgICBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyAgIElTQSBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKworICAgTm93IGNvbXBpbGUgYW5kIGluc3RhbGwgdGhlIGtlcm5lbCBpbiBub3JtYWwgZmFzaGlvbi4gSWYgeW91IGRvbid0IGtub3cKKyAgIGhvdyB0byBkbyB0aGlzIHlvdSBjYW4gZmluZCBpbnN0cnVjdGlvbnMgZm9yIHRoaXMgaW4gdGhlIFJFQURNRSBmaWxlCisgICBsb2NhdGVkIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHNvdXJjZS4KKworMykgQmVmb3JlIHlvdSBjYW4gc3RhcnQgcGxheWluZyBtaWRpIGZpbGVzIHlvdSB3aWxsIGhhdmUgdG8gbG9hZCBhIHNvdW5kCisgICBiYW5rIGZpbGUuIFRoZSB1dGlsaXR5IG5lZWRlZCBmb3IgZG9pbmcgdGhpcyBpcyBjYWxsZWQgInNmeGxvYWQiLCBhbmQgaXQKKyAgIGlzIG9uZSBvZiB0aGUgdXRpbGl0aWVzIGZvdW5kIGluIGEgcGFja2FnZSBjYWxsZWQgImF3ZXNmeCIuIElmIHRoaXMKKyAgIHBhY2thZ2UgaXMgbm90IGF2YWlsYWJsZSBpbiB5b3VyIGRpc3RyaWJ1dGlvbiB5b3UgY2FuIGRvd25sb2FkIHRoZSBBV0UKKyAgIHNuYXBzaG90IGZyb20gQ3JlYXRpdmUgTGFicyBPcGVuIFNvdXJjZSB3ZWJzaXRlOgorCisgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuY3JlYXRpdmUuY29tL3NuYXBzaG90Lmh0bWwKKworICAgT25jZSB5b3UgaGF2ZSB1bnBhY2tlZCB0aGUgQVdFIHNuYXBzaG90IHlvdSB3aWxsIHNlZSBhICJhd2VzZngiCisgICBkaXJlY3RvcnkuIEZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIGF3ZXNmeC9kb2NzL0lOU1RBTEwgdG8gaW5zdGFsbCB0aGUKKyAgIHV0aWxpdGllcyBpbiB0aGlzIHBhY2thZ2UuIEFmdGVyIGRvaW5nIHRoaXMsIHNmeGxvYWQgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgYXM6CisKKyAgIC91c3IvbG9jYWwvYmluL3NmeGxvYWQKKworICAgVG8gZW5hYmxlIEFXRSBnZW5lcmFsIG1pZGkgc3ludGhlc2lzIHlvdSBzaG91bGQgYWxzbyBnZXQgdGhlIHNvdW5kIGJhbmsKKyAgIGZpbGUgZm9yIGdlbmVyYWwgbWlkaSBmcm9tOgorCisgICBodHRwOi8vbWVtYmVycy54b29tLmNvbS95YXIvc3ludGhnbS5zYmsuZ3oKKworICAgQ29weSBpdCB0byBhIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZSwgYW5kIHVucGFjayBpdCB0aGVyZS4KKworNCkgRWRpdCAvZXRjL21vZHByb2JlLmNvbmYsIGFuZCBpbnNlcnQgdGhlIGZvbGxvd2luZyBsaW5lcyBhdCB0aGUgZW5kIG9mIHRoZQorICAgZmlsZToKKworICBhbGlhcyBzb3VuZC1zbG90LTAgc2IKKyAgYWxpYXMgc291bmQtc2VydmljZS0wLTEgYXdlX3dhdmUKKyAgaW5zdGFsbCBhd2Vfd2F2ZSAvc2Jpbi9tb2Rwcm9iZSAtLWZpcnN0LXRpbWUgLWkgYXdlX3dhdmUgJiYgL3Vzci9sb2NhbC9iaW4vc2Z4bG9hZCBQQVRIX1RPX1NPVU5EX0JBTktfRklMRQorCisgIFlvdSB3aWxsIG9mIGNvdXJzZSBoYXZlIHRvIGNoYW5nZSAiUEFUSF9UT19TT1VORF9CQU5LX0ZJTEUiIHRvIHRoZSBmdWxsCisgIHBhdGggb2Ygb2YgdGhlIHNvdW5kIGJhbmsgZmlsZS4gVGhhdCB3aWxsIGVuYWJsZSB0aGUgU291bmQgQmxhc3RlciBhbmQgQVdFCisgIHdhdmUgc3ludGhlc2lzLiBUbyBwbGF5IG1pZGkgZmlsZXMgeW91IHNob3VsZCBnZXQgb25lIG9mIHRoZXNlIHByb2dyYW1zIGlmCisgIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgdGhlbToKKworICBQbGF5bWlkaToJCQlodHRwOi8vcGxheW1pZGkub3BlbnByb2plY3RzLm5ldAorCisgIEFXRU1pZGkgUGxheWVyIChkcnZtaWRpKSAgCUluY2x1ZGVkIGluIHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCBBV0UKKyAgCQkJCXNuYXBzaG90LgorCisgIFlvdSB3aWxsIHByb2JhYmx5IGhhdmUgdG8gcGFzcyB0aGUgIi1lIiBzd2l0Y2ggdG8gcGxheW1pZGkgdG8gaGF2ZSBpdCB1c2UKKyAgeW91ciBtaWRpIGRldmljZS4gZHJ2bWlkaSBzaG91bGQgd29yayB3aXRob3V0IHN3aXRjaGVzLgorCisgIElmIHNvbWV0aGluZyBnb2VzIHdyb25nIHBsZWFzZSBlLW1haWwgbWUuIEFsbCBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgYXJlCisgIHdlbGNvbWUuCisKKwkJICAgIFlhcm9zbGF2IFJvc29tYWtobyAoYWxvbnM1NUBkaWFsdXAucHR0LnJ1KQorCQkJICAgIGh0dHA6Ly93d3cueWFyLm9wZW5uZXQucnUKKworTGFzdCBVcGRhdGVkOiBGZWIgMyAyMDAxCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BdWRpb0V4Y2VsRFNQMTYgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BdWRpb0V4Y2VsRFNQMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmMDg5MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0F1ZGlvRXhjZWxEU1AxNgpAQCAtMCwwICsxLDEwMSBAQAorRHJpdmVyCistLS0tLS0KKworSW5mb3JtYXRpb25zIGFib3V0IEF1ZGlvIEV4Y2VsIERTUCAxNiBkcml2ZXIgY2FuIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UKK2ZpbGUgYWVkc3AxNi5jCitQbGVhc2UsIHJlYWQgdGhlIGhlYWQgb2YgdGhlIHNvdXJjZSBiZWZvcmUgdXNpbmcgaXQuIEl0IGNvbnRhaW4gdXNlZnVsCitpbmZvcm1hdGlvbnMuCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworVGhlIEF1ZGlvIEV4Y2VsIGNvbmZpZ3VyYXRpb24sIGlzIG5vdyBkb25lIHdpdGggdGhlIHN0YW5kYXJkIExpbnV4IHNldHVwLgorWW91IGhhdmUgdG8gY29uZmlndXJlIHRoZSBzb3VuZCBjYXJkIChTb3VuZCBCbGFzdGVyIG9yIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0pCithbmQsIGlmIHlvdSB3YW50IGl0LCB0aGUgUm9sYW5kIE1QVS00MDEgKGRvIG5vdCB1c2UgdGhlIFNvdW5kIEJsYXN0ZXIgTVBVLTQwMSwKK1NCLU1QVTQwMSkgaW4gdGhlIG1haW4gZHJpdmVyIG1lbnUuIEFjdGl2YXRlIHRoZSBsb3dsZXZlbCBkcml2ZXJzIHRoZW4gc2VsZWN0Cit0aGUgQXVkaW8gRXhjZWwgaGFyZHdhcmUgdGhhdCB5b3Ugd2FudCB0byBpbml0aWFsaXplLiBDaGVjayB0aGUgSVJRL0RNQS9NSVJRCitvZiB0aGUgQXVkaW8gRXhjZWwgaW5pdGlhbGl6YXRpb246IGl0IG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIFNCUFJPIChvciBNU1MpCitzZXR1cC4gSWYgdGhlIHBhcmFtZXRlcnMgYXJlIGRpZmZlcmVudCwgY29ycmVjdCBpdC4KK0kgeW91IG93biBhIEdhbGxhbnQncyBhdWRpbyBjYXJkIGJhc2VkIG9uIFNDLTY2MDAsIGFjdGl2YXRlIHRoZSBTQy02NjAwIHN1cHBvcnQuCitJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNvdW5kIGJvYXJkLCBiZSBzdXJlIHRvCitjaGVjayBvZmYgYWxsIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGJlZm9yZSByZS1jb25maWd1cmUgaXQuCisKK01vZHVsZSBwYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorVG8gdXNlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCB5b3UgbXVzdCBjb25maWd1cmUgc29tZSBtb2R1bGUgcGFyYW1ldGVycywgdG8KK3NldCB1cCBJL08gYWRkcmVzc2VzLCBJUlEgbGluZXMgYW5kIERNQSBjaGFubmVscy4gU29tZSBwYXJhbWV0ZXJzIGFyZQorbWFuZGF0b3J5IHdoaWxlIHNvbWUgb3RoZXJzIGFyZSBvcHRpb25hbC4gSGVyZSBhIGxpc3Qgb2YgcGFyYW1ldGVycyB5b3UgY2FuCit1c2Ugd2l0aCB0aGlzIG1vZHVsZToKKworTmFtZQkJRGVzY3JpcHRpb24KKz09PT0JCT09PT09PT09PT09CitNQU5EQVRPUlkKK2lvCQlJL08gYmFzZSBhZGRyZXNzICgweDIyMCBvciAweDI0MCkKK2lycQkJaXJxIGxpbmUgKDUsIDcsIDksIDEwIG9yIDExKQorZG1hCQlkbWEgY2hhbm5lbCAoMCwgMSBvciAzKQorCitPUFRJT05BTAorbXNzX2Jhc2UJSS9PIGJhc2UgYWRkcmVzcyBmb3IgYWN0aXZhdGUgTVNTIG1vZGUgKGRlZmF1bHQgU0JQUk8pCisJCSgweDUzMCBvciAweEU4MCkKK21wdV9iYXNlCUkvTyBiYXNlIGFkZHJlc3MgZm9yIGFjdGl2YXRlIE1QVS00MDEgbW9kZQorCQkoMHgzMDAsIDB4MzEwLCAweDMyMCBvciAweDMzMCkKK21wdV9pcnEJCU1QVS00MDEgaXJxIGxpbmUgKDUsIDcsIDksIDEwIG9yIDApCisKK1RoZSAvZXRjL21vZHByb2JlLmNvbmYgd2lsbCBoYXZlIGxpbmVzIGxpa2UgdGhpczoKKworb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CitvcHRpb25zIGFkMTg0OCBpbz0weDUzMCBpcnE9MTEgZG1hPTMKK29wdGlvbnMgYWVkc3AxNiBpbz0weDIyMCBpcnE9MTEgZG1hPTMgbXNzX2Jhc2U9MHg1MzAKKworV2hlcmUgdGhlIGFlZHNwMTYgb3B0aW9ucyBhcmUgdGhlIG9wdGlvbnMgZm9yIHRoaXMgZHJpdmVyIHdoaWxlIG9wbDMgYW5kCithZDE4NDggYXJlIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbnMgZm9yIHRoZSBNU1MgYW5kIE9QTDMgbW9kdWxlcy4KKworTG9hZGluZyBNU1MgYW5kIE9QTDMgbmVlZHMgdG8gcHJlIGxvYWQgdGhlIGFlZHNwMTYgbW9kdWxlIHRvIHNldCB1cCBjb3JyZWN0bHkKK3RoZSBzb3VuZCBjYXJkLiBJbnN0YWxsYXRpb24gZGVwZW5kZW5jaWVzIG11c3QgYmUgd3JpdHRlbiBpbiB0aGUgbW9kcHJvYmUuY29uZgorZmlsZToKKworaW5zdGFsbCBhZDE4NDggL3NiaW4vbW9kcHJvYmUgYWVkc3AxNiAmJiAvc2Jpbi9tb2Rwcm9iZSAtaSBhZDE4NDgKK2luc3RhbGwgb3BsMyAvc2Jpbi9tb2Rwcm9iZSBhZWRzcDE2ICYmIC9zYmluL21vZHByb2JlIC1pIG9wbDMKKworVGhlbiB5b3UgbXVzdCBsb2FkIHRoZSBzb3VuZCBtb2R1bGVzIHN0YWNrIGluIHRoaXMgb3JkZXI6Citzb3VuZCAtPiBhZWRzcDE2IC0+IFsgYWQxODQ4LCBvcGwzIF0KKworV2l0aCB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiwgbG9hZGluZyBhZDE4NDggb3Igb3BsMyBtb2R1bGVzLCB3aWxsCithdXRvbWF0aWNhbGx5IGxvYWQgYWxsIHRoZSBzb3VuZCBzdGFjay4KKworU291bmQgY2FyZHMgc3VwcG9ydGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBTQy02MDAwIGFuZCBTQy02NjAwIGJhc2VkIEdhbGxhbnQncyBzb3VuZCBjYXJkLgorSXQgZG9uJ3Qgc3VwcG9ydCB0aGUgQXVkaW8gRXhjZWwgRFNQIDE2IElJSSAodHJ5IHRoZSBTQy02NjAwIGNvZGUpLgorSSdtIHdvcmtpbmcgb24gdGhlIElJSSB2ZXJzaW9uIG9mIHRoZSBjYXJkOiBpZiBzb21lb25lIGhhdmUgdXNlZnVsCitpbmZvcm1hdGlvbnMgYWJvdXQgaXQsIHBsZWFzZSBsZXQgbWUga25vdy4KK0ZvciBhbGwgdGhlIG5vbi1zdXBwb3J0ZWQgYXVkaW8gY2FyZHMsIHlvdSBoYXZlIHRvIGJvb3QgTVMtRE9TIChvciBXSU45NSkKK2FjdGl2YXRpbmcgdGhlIGF1ZGlvIGNhcmQgd2l0aCB0aGUgTVMtRE9TIGRldmljZSBkcml2ZXIsIHRoZW4geW91IGhhdmUgdG8KKzxjdHJsPi08YWx0Pi08ZGVsPiBhbmQgYm9vdCBMaW51eC4KK0ZvbGxvdyB0aGVzZSBzdGVwczoKKworMSkgQ29tcGlsZSBMaW51eCBrZXJuZWwgd2l0aCBzdGFuZGFyZCBzb3VuZCBkcml2ZXIsIHVzaW5nIHRoZSBlbXVsYXRpb24KKyAgIHlvdSB3YW50LCB3aXRoIHRoZSBwYXJhbWV0ZXJzIG9mIHlvdXIgYXVkaW8gY2FyZCwKKyAgIGUuZy4gTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSBpcnExMCBkbWEzCisyKSBJbnN0YWxsIHlvdXIgbmV3IGtlcm5lbCBhcyB0aGUgZGVmYXVsdCBib290IGtlcm5lbC4KKzMpIEJvb3QgTVMtRE9TIGFuZCBjb25maWd1cmUgdGhlIGF1ZGlvIGNhcmQgd2l0aCB0aGUgYm9vdCB0aW1lIGRldmljZQorICAgZHJpdmVyLCBmb3IgTVNTIGlycTEwIGRtYTMgaW4gb3VyIGV4YW1wbGUuCis0KSA8Y3RybD4tPGFsdD4tPGRlbD4gYW5kIGJvb3QgTGludXguIFRoaXMgd2lsbCBtYWludGFpbiB0aGUgRE9TIGNvbmZpZ3VyYXRpb24KKyAgIGFuZCB3aWxsIGJvb3QgdGhlIG5ldyBrZXJuZWwgd2l0aCBzb3VuZCBkcml2ZXIuIFRoZSBzb3VuZCBkcml2ZXIgd2lsbCBmaW5kCisgICB0aGUgYXVkaW8gY2FyZCBhbmQgd2lsbCByZWNvZ25pemUgYW5kIGF0dGFjaCBpdC4KKworUmVwb3J0cyBvbiBVc2VyIHN1Y2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis+IERhdGU6IE1vbiwgMjkgSnVsIDE5OTYgMDg6MzU6NDAgKzAxMDAKKz4gRnJvbTogTXIgUyBKIEdyZWVuYXdheSA8c2pnOTVAdW5peGZlLnJsLmFjLnVrPgorPiBUbzogcmljY2FyZG9AY2RjOGc1LmNkYy5wb2xpbWkuaXQgKFJpY2NhcmRvIEZhY2NoZXR0aSkKKz4gU3ViamVjdDogUmU6IEF1ZGlvIEV4Y2VsIERTUCAxNiBpbml0aWFsaXphdGlvbiBjb2RlCis+Cis+IEp1c3QgdG8gbGV0IHlvdSBrbm93IGdvdCBteSBBdWRpbyBFeGNlbCAoZW11bGF0aW5nIGEgTVNTKSB3b3JraW5nCis+IHdpdGggbXkgb3JpZ2luYWwgU0IxNiwgdGhhbmtzIGZvciB0aGUgZHJpdmVyIQorCisKK0xhc3QgcmV2aXNlZDogMjAgQXVndXN0IDE5OTgKK1JpY2NhcmRvIEZhY2NoZXR0aQorZml6YmFuQHRpbi5pdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ01JODMzMCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NNSTgzMzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0MzlmMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NNSTgzMzAKQEAgLTAsMCArMSwxNTMgQEAKK0RvY3VtZW50YXRpb24gZm9yIENNSSA4MzMwIChTb3VuZFBSTykgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbGVzc2FuZHJvIFp1bW1vIDxhenVtbW9AaXRhLmZsYXNobmV0Lml0PgorCisoIEJlIHN1cmUgdG8gcmVhZCBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Tb3VuZFBybyB0b28gKQorCisKK1RoaXMgYWRhcHRlciBpcyBub3cgZGlyZWN0bHkgc3VwcG9ydGVkIGJ5IHRoZSBzYiBkcml2ZXIuCisKKyBUaGUgb25seSB0aGluZyB5b3UgaGF2ZSB0byBkbyBpcyB0byBjb21waWxlIHRoZSBrZXJuZWwgc291bmQKK3N1cHBvcnQgYXMgYSBtb2R1bGUgYW5kIHRvIGVuYWJsZSBrZXJuZWwgSVNBUG5QIHN1cHBvcnQsCithcyBzaG93biBiZWxvdy4KKworCitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX1NCPW0KKworQ09ORklHX1BOUD15CitDT05GSUdfSVNBUE5QPXkKKworCithbmQgb3B0aW9uYWxseToKKworCitDT05GSUdfU09VTkRfTVBVNDAxPW0KKworIGZvciBNUFU0MDEgc3VwcG9ydC4KKworCisoSSBzdWdnZXN0IHlvdSB0byB1c2UgIm1ha2UgbWVudWNvbmZpZyIgb3IgIm1ha2UgeGNvbmZpZyIgCisgZm9yIGEgbW9yZSBjb21mb3J0YWJsZSBjb25maWd1cmF0aW9uIGVkaXRpbmcpCisKKworCitUaGVuIHlvdSBjYW4gZG8KKworIG1vZHByb2JlIHNiCisKK2FuZCBldmVyeXRoaW5nIHdpbGwgYmUgKGhvcGVmdWxseSkgY29uZmlndXJlZC4KKworWW91IHNob3VsZCBnZXQgc29tZXRoaW5nIHNpbWlsYXIgaW4gc3lzbG9nOgorCitzYjogQ01JODMzMCBkZXRlY3RlZC4KK3NiOiBDTUk4MzMwIHNiIGJhc2UgbG9jYXRlZCBhdCAweDIyMAorc2I6IENNSTgzMzAgbXB1IGJhc2UgbG9jYXRlZCBhdCAweDMzMAorc2I6IENNSTgzMzAgbWFpbCByZXBvcnRzIHRvIEFsZXNzYW5kcm8gWnVtbW8gPGF6dW1tb0BpdGEuZmxhc2huZXQuaXQ+CitzYjogSVNBUG5QIHJlcG9ydHMgQ01JIDgzMzAgU291bmRQUk8gYXQgaS9vIDB4MjIwLCBpcnEgNywgZG1hIDEsNQorCisKKworCitUaGUgb2xkIGRvY3VtZW50YXRpb24gZmlsZSBmb2xsb3dzIGZvciByZWZlcmVuY2UKK3B1cnBvc2VzLgorCisKK0hvdyB0byBlbmFibGUgQ01JIDgzMzAgKFNPVU5EUFJPKSBzb3VuZGNoaXAgb24gTGludXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RlZmFuIExhdWRhdCA8U3RlZmFuLkxhdWRhdEBhc2l0LnJvPgorCitbTm90ZTogVGhlIENNSSA4MzM4IGlzIHVucmVsYXRlZCBhbmQgaXMgc3VwcG9ydGVkIGJ5IGNtcGNpLm9dCisKKwkKKwlJbiBvcmRlciB0byB1c2UgQ01JODMzMCB1bmRlciBMaW51eCAgeW91IGp1c3QgaGF2ZSB0byB1c2UgYSBwcm9wZXIgaXNhcG5wLmNvbmYsIGEgZ29vZCBpc2FwbnAgYW5kIGEgbGl0dGxlIGJpdCBvZiBwYXRpZW5jZS4gIEkgdXNlIGlzYXBucCAxLjE3LCBidXQKK3lvdSBtYXkgZ2V0IGEgYmV0dGVyIG9uZSBJIGd1ZXNzIGF0IGh0dHA6Ly93d3cucm9lc3RvY2suZGVtb24uY28udWsvaXNhcG5wdG9vbHMvLgorCisJT2YgY291cnNlIHlvdSB3aWxsIGhhdmUgdG8gY29tcGlsZSBrZXJuZWwgc291bmQgc3VwcG9ydCBhcyBtb2R1bGUsIGFzIHNob3duIGJlbG93OgorCitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX09TUz1tCitDT05GSUdfU09VTkRfU0I9bQorQ09ORklHX1NPVU5EX0FETElCPW0KK0NPTkZJR19TT1VORF9NUFU0MDE9bQorIyBNaWtybyRjaGFmdCBzb3VuZCBzeXN0ZW0gKGtpbmRhIHVzZWZ1bCBoZXJlIDspKQkKK0NPTkZJR19TT1VORF9NU1M9bQorCisJVGhlIC9ldGMvaXNhcG5wLmNvbmYgZmlsZSB3aWxsIGJlOgorCis8c25pcCBiZWxvdz4KKworCisoUkVBRFBPUlQgMHgwMjAzKQorKElTT0xBVEUgUFJFU0VSVkUpCisoSURFTlRJRlkgKikKKyhWRVJCT1NJVFkgMikKKyhDT05GTElDVCAoSU8gRkFUQUwpKElSUSBGQVRBTCkoRE1BIEZBVEFMKShNRU0gRkFUQUwpKSAjIG9yIFdBUk5JTkcKKyhWRVJJRllMRCBOKQorCisKKyMgV1NTIAorCisoQ09ORklHVVJFIENNSTAwMDEvMTY3Nzc0NzIgKExEIDAKKyhJTyAwIChTSVpFIDgpIChCQVNFIDB4MDUzMCkpCisoSU8gMSAoU0laRSA4KSAoQkFTRSAweDAzODgpKQorKElOVCAwIChJUlEgNyAoTU9ERSArRSkpKQorKERNQSAwIChDSEFOTkVMIDApKQorKE5BTUUgIkNNSTAwMDEvMTY3Nzc0NzJbMF17Q01JODMzMC9DM0QgQXVkaW8gQWRhcHRlcn0iKQorKEFDVCBZKQorKSkKKworIyBNUFUKKworKENPTkZJR1VSRSBDTUkwMDAxLzE2Nzc3NDcyIChMRCAxCisoSU8gMCAoU0laRSAyKSAoQkFTRSAweDAzMzApKQorKElOVCAwIChJUlEgMTEgKE1PREUgK0UpKSkKKyhOQU1FICJDTUkwMDAxLzE2Nzc3NDcyWzFde0NNSTgzMzAvQzNEIEF1ZGlvIEFkYXB0ZXJ9IikKKyhBQ1QgWSkKKykpCisKKyMgSm95c3RpY2sKKworKENPTkZJR1VSRSBDTUkwMDAxLzE2Nzc3NDcyIChMRCAyCisoSU8gMCAoU0laRSA4KSAoQkFTRSAweDAyMDApKQorKE5BTUUgIkNNSTAwMDEvMTY3Nzc0NzJbMl17Q01JODMzMC9DM0QgQXVkaW8gQWRhcHRlcn0iKQorKEFDVCBZKQorKSkKKworIyBTb3VuZEJsYXN0ZXIgCisgCisoQ09ORklHVVJFIENNSTAwMDEvMTY3Nzc0NzIgKExEIDMKKyhJTyAwIChTSVpFIDE2KSAoQkFTRSAweDAyMjApKQorKElOVCAwIChJUlEgNSAoTU9ERSArRSkpKQorKERNQSAwIChDSEFOTkVMIDEpKQorKERNQSAxIChDSEFOTkVMIDUpKQorKE5BTUUgIkNNSTAwMDEvMTY3Nzc0NzJbM117Q01JODMzMC9DM0QgQXVkaW8gQWRhcHRlcn0iKQorKEFDVCBZKQorKSkKKworCisoV0FJVEZPUktFWSkKKworPGVuZCBvZiBzbmlwPgorCisJVGhlIG1vZHVsZSBzZXF1ZW5jZSBpcyB0cml2aWFsOgorCisvc2Jpbi9pbnNtb2Qgc291bmRjb3JlCisvc2Jpbi9pbnNtb2Qgc291bmQKKy9zYmluL2luc21vZCB1YXJ0NDAxCisjIGluc2VydCB0aGlzIGZpcnN0Cisvc2Jpbi9pbnNtb2QgYWQxODQ4IGlvPTB4NTMwIGlycT03IGRtYT0wIHNvdW5kcHJvPTEKKyMgVGhlIHNiIG1vZHVsZSBpcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgYWQxODQ4IChNaWNyb3NvZnQgU291bmQgU3lzdGVtKQorIyBBbnlob3csIHRoaXMgaXMgZnVsbCBkdXBsZXggYW5kIGhhcyBNSURJCisvc2Jpbi9pbnNtb2Qgc2IgaW89MHgyMjAgZG1hPTEgZG1hMTY9NSBpcnE9NSBtcHVfaW89MHgzMzAKKworCisKK0FsbWEgQ2hhbyA8ZWx5c2lhbkBldGhlcmVhbC50b3JzaW9uLm9yZz4gc3VnZ2VzdHMgdGhlIGZvbGxvd2luZyAvZXRjL21vZHByb2JlLmNvbmY6CisKK2FsaWFzIHNvdW5kIGFkMTg0OAorYWxpYXMgc3ludGgwIG9wbDMKK29wdGlvbnMgYWQxODQ4IGlvPTB4NTMwIGlycT03IGRtYT0wIHNvdW5kcHJvPTEKK29wdGlvbnMgb3BsMyBpbz0weDM4OAorCisJCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DTUk4MzM4IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ01JODMzOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODdkMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ01JODMzOApAQCAtMCwwICsxLDg1IEBACitBdWRpbyBkcml2ZXIgZm9yIENNODMzOC9DTTg3MzggY2hpcHMgYnkgQ2hlbi1MaSBUaWVuCisKKworSEFSRFdBUkUgU1VQUE9SVEVECis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQy1NZWRpYSBDTUk4MzM4CitDLU1lZGlhIENNSTg3MzgKK09uLWJvYXJkIEMtTWVkaWEgY2hpcHMKKworCitTVEVQUyBUTyBCVUlMRCBEUklWRVIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgMS4gQmFja3VwIHRoZSBDb25maWcuaW4gYW5kIE1ha2VmaWxlIGluIHRoZSBzb3VuZCBkcml2ZXIgZGlyZWN0b3J5CisgICAgICgvdXNyL3NyYy9saW51eC9kcml2ZXIvc291bmQpLgorICAgICBUaGUgQ29uZmlndXJlLmhlbHAgcHJvdmlkZSBoZWxwIHdoZW4geW91IGNvbmZpZyBkcml2ZXIgaW4gc3RlcAorICAgICA0LCBwbGVhc2UgYmFja3VwIHRoZSBvcmlnaW5hbCBvbmUgKC91c3Ivc3JjL2xpbnV4L0RvY3VtZW50KSBhbmQKKyAgICAgY29weSB0aGlzIGZpbGUuCisgICAgIFRoZSBjbXBjaSBpcyBkb2N1bWVudCBmb3IgdGhlIGRyaXZlciBpbiBkZXRhaWwsIHBsZWFzZSBjb3B5IGl0CisgICAgIHRvIC91c3Ivc3JjL2xpbnV4L0RvY3VtZW50L3NvdW5kIHNvIHlvdSBjYW4gcmVmZXIgaXQuIEJhY2t1cCBpZgorICAgICB0aGVyZSBpcyBhbHJlYWR5IG9uZS4KKworICAyLiBFeHRyYWN0IHRoZSB0YXIgZmlsZSBieSAndGFyIHh2emYgY21wY2kteHgudGFyLmd6JyBpbiB0aGUgYWJvdmUKKyAgICAgZGlyZWN0b3J5LgorCisgIDMuIENoYW5nZSBkaXJlY3RvcnkgdG8gL3Vzci9zcmMvbGludXgKKworICA0LiBDb25maWcgY204MzM4IGRyaXZlciBieSAnbWFrZSBtZW51Y29uZmlnJywgJ21ha2UgY29uZmlnJyBvcgorICAgICAnbWFrZSB4Y29uZmlnJyBjb21tYW5kLgorCisgIDUuIFBsZWFzZSBzZWxlY3QgU291bmQgQ2FyZCAoQ09ORklHX1NPVU5EPW0pIHN1cHBvcnQgYW5kIENNUENJCisgICAgIGRyaXZlciAoQ09ORklHX1NPVU5EX0NNUENJPW0pIGFzIG1vZHVsZXMuIFJlc2lkZW50IG1vZGUgbm90IHRlc3RlZC4KKyAgICAgRm9yIGRyaXZlciBvcHRpb24sIHBsZWFzZSByZWZlciAnRFJJVkVSIFBBUkFNRVRFUicKKworICA2LiBDb21waWxlIHRoZSBrZXJuZWwgaWYgbmVjZXNzYXJ5LgorCisgIDcuIENvbXBpbGUgdGhlIG1vZHVsZXMgYnkgJ21ha2UgbW9kdWxlcycuCisKKyAgOC4gSW5zdGFsbCB0aGUgbW9kdWxlcyBieSAnbWFrZSBtb2R1bGVzX2luc3RhbGwnCisKKworSU5TVEFMTCBEUklWRVIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgMS4gQmVmb3JlIGZpcnN0IHRpbWUgdG8gcnVuIHRoZSBkcml2ZXIsIGNyZWF0ZSBtb2R1bGUgZGVwZW5kZW5jeSBieQorICAgICAnZGVwbW9kIC1hJworCisgIDIuIFRvIGluc3RhbGwgdGhlIGRyaXZlciBtYW51YWxseSwgZW50ZXIgJ21vZHByb2JlIGNtcGNpJy4KKworICAzLiBEcml2ZXIgaW5zdGFsbGF0aW9uIGZvciB2YXJpb3VzIGRpc3RyaWJ1dGlvbnM6CisKKyAgICBhLiBTbGFja3dhcmUgNC4wCisgICAgICAgQWRkIHRoZSAnbW9kcHJvYmUgY21wY2knIGNvbW1hbmQgaW4geW91ciAvZXRjL3JjLmQvcmMubW9kdWxlcworICAgICAgIGZpbGUuc28geW91IGNhbiBzdGFydCB0aGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgZWFjaCB0aW1lIGJvb3RpbmcuCisKKyAgICBiLiBDYWxkZXJhIE9wZW5MaW51eCAyLjIKKyAgICAgICBVc2UgTElTQSB0byBsb2FkIHRoZSBjbXBjaSBtb2R1bGUuCisKKyAgICBjLiBSZWRIYXQgNi4wIGFuZCBTLnUuUy5FLiA2LjEKKyAgICAgICBBZGQgZm9sbG93aW5nIGNvbW1hbmQgaW4gL2V0Yy9jb25mLm1vZHVsZXM6CisKKyAgICAgICBhbGlhcyBzb3VuZCBjbXBjaQorCisJYWxzbyB2aXNpdCBodHRwOi8vd3d3LmNtZWRpYS5jb20udHcgZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbi4KKworRFJJVkVSIFBBUkFNRVRFUgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBTb21lIGZ1bmN0aW9ucyBmb3IgdGhlIGNtODczOCBjYW4gYmUgY29uZmlndXJlZCBpbiBLZXJuZWwgQ29uZmlndXJhdGlvbgorICBvciBtb2R1bGVzIHBhcmFtZXRlcnMuIFNldCB0aGVzZSBwYXJhbWV0ZXJzIHRvIDEgdG8gZW5hYmxlLgorCisgIG1wdWlvOglJL08gcG9ydHMgYmFzZSBmb3IgTVBVLTQwMSwgMCBpZiBkaXNhYmxlZC4KKyAgZm1pbzoJCUkvTyBwb3J0cyBiYXNlIGZvciBPUEwtMywgMCBpZiBkaXNhYmxlZC4KKyAgc3BkaWZfaW52ZXJzZTpJbnZlcnNlIHRoZSBTL1BESUYtaW4gc2lnbmFsLCB0aGlzIGRlcGVuZHMgb24geW91cgorCQlDRC1ST00gb3IgRFZELVJPTS4KKyAgc3BkaWZfbG9vcDogICBFbmFibGUgUy9QRElGIGxvb3AsIHRoaXMgcm91dGUgUy9QRElGLWluIHRvIFMvUERJRi1vdXQKKyAgICAgICAgICAgICAgICBkaXJlY3RseS4KKyAgc3BlYWtlcnM6ICAgICBOdW1iZXIgb2Ygc3BlYWtlcnMgdXNlZC4KKyAgdXNlX2xpbmVfYXNfcmVhcjpFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgbGluZS1pbiBhcworICAgICAgICAgICAgICAgIHJlYXItb3V0LgorICB1c2VfbGluZV9hc19iYXNzOkVuYWJsZSB0aGlzIGlmIHlvdSB3YW50IHRvIHVzZSBsaW5lLWluIGFzCisgICAgICAgICAgICAgICAgYmFzcy1vdXQuCisgIGpveXN0aWNrOglFbmFibGUgam95c3RpY2suIFlvdSB3aWxsIG5lZWQgdG8gaW5zdGFsbCBMaW51eCBqb3lzdGljaworCQlkcml2ZXIuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZhZjdhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyCkBAIC0wLDAgKzEsMjMgQEAKK1RvIGNvbmZpZ3VyZSB0aGUgQ3J5c3RhbCBDUzQyM3ggc291bmQgY2hpcCBhbmQgYWN0aXZhdGUgaXRzIERTUCBmdW5jdGlvbnMsCittb2R1bGVzIG1heSBiZSBsb2FkZWQgaW4gdGhpcyBvcmRlcjoKKyAgCisJbW9kcHJvYmUgc291bmQKKwlpbnNtb2QgYWQxODQ4CisJaW5zbW9kIHVhcnQ0MDEKKwlpbnNtb2QgY3M0MjMyIGlvPSogaXJxPSogZG1hPSogZG1hMj0qCisgIAorVGhpcyBpcyB0aGUgbWVhbmluZyBvZiB0aGUgcGFyYW1ldGVyczoKKyAgCisJaW8tLUkvTyBhZGRyZXNzIG9mIHRoZSBXaW5kb3dzIFNvdW5kIFN5c3RlbSAobm9ybWFsbHkgMHg1MzQpCisJaXJxLS1JUlEgb2YgdGhpcyBkZXZpY2UKKwlkbWEgYW5kIGRtYTItLURNQSBjaGFubmVscyAoRE1BMiBtYXkgYmUgMCkKKyAgCitPbiBzb21lIGNhcmRzLCB0aGUgYm9hcmQgYXR0ZW1wdHMgdG8gZG8gbm9uLVBuUCBzZXR1cCwgYW5kIGZhaWxzLiAgSWYgeW91CitoYXZlIHByb2JsZW1zLCB1c2UgTGludXgnIFBuUCBmYWNpbGl0aWVzLiAKKyAgCitUbyBnZXQgTUlESSBmYWNpbGl0aWVzIGFkZAorICAKKwlpbnNtb2Qgb3BsMyBpbz0qCisgIAord2hlcmUgImlvIiBpcyB0aGUgSS9PIGFkZHJlc3Mgb2YgdGhlIE9QTDMgc3ludGhlc2l6ZXIuIFRoaXMgd2lsbCBiZSBzaG93bgoraW4gL3Byb2Mvc3lzL3BucCBhbmQgaXMgbm9ybWFsbHkgMHgzODguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9FU1MgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9FU1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhOTNiNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0VTUwpAQCAtMCwwICsxLDM0IEBACitEb2N1bWVudGF0aW9uIGZvciB0aGUgRVNTIEF1ZGlvRHJpdmUgY2hpcHMKKworSW4gMi40IGtlcm5lbHMgdGhlIFNvdW5kQmxhc3RlciBkcml2ZXIgbm90IG9ubHkgdHJpZXMgdG8gZGV0ZWN0IGFuIEVTUyBjaGlwLCBpdAordHJpZXMgdG8gZGV0ZWN0IHRoZSB0eXBlIG9mIEVTUyBjaGlwIHRvby4gVGhlIGNvcnJlY3QgZGV0ZWN0aW9uIG9mIHRoZSBjaGlwIAorZG9lc24ndCBhbHdheXMgc3VjY2VlZCBob3dldmVyLCBzbyB1bmxlc3MgeW91IHVzZSB0aGUga2VybmVsIGlzYXBucCBmYWNpbGl0aWVzCisoYW5kIHlvdSBjaGlwIGlzIHBucCBjYXBhYmxlKSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgMi4wIGJlaGF2aW91ciB3aGljaAorbWVhbnM6IG9ubHkgZGV0ZWN0IEVTNjg4IGFuZCBFUzE2ODguCisKK0FsbCBFU1MgY2hpcHMgbm93IGhhdmUgYSByZWNvcmRpbmcgbGV2ZWwgc2V0dGluZy4gVGhpcyBpcyBhIG5lZWQtdG8taGF2ZSBmb3IKK3Blb3BsZSB3aG8gd2FudCB0byB1c2UgdGhlaXIgRVNTIGZvciByZWNvcmRpbmcgc291bmQuCisKK0V2ZXJ5IGNoaXAgdGhhdCdzIGRldGVjdGVkIGFzIGEgbGF0ZXItdGhhbi1lczE2ODggY2hpcCBoYXMgYSA2IGJpdHMgbG9nYXJpdGhtaWMKK21hc3RlciB2b2x1bWUgY29udHJvbC4KKworRXZlcnkgY2hpcCB0aGF0J3MgZGV0ZWN0ZWQgYXMgYSBFUzE4ODcgbm93IGhhcyBGdWxsIER1cGxleCBzdXBwb3J0LiBNYWRlIGEgCitsaXR0bGUgdGVzdHByb2dyYW0gdGhhdCBzaG93cyB0aGF0IGlzIHdvcmtzLCBoYXZlbid0IHNlZW4gYSByZWFsIHByb2dyYW0gdGhhdAorbmVlZHMgdGhpcyBob3dldmVyLgorCitGb3IgRVNTIGNoaXBzIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyICJlc3N0eXBlIiBjYW4gYmUgc3BlY2lmaWVkLiBUaGlzIGNvbnRyb2xzCit0aGUgKGF1dG8pIGRldGVjdGlvbiBvZiB0aGUgRVNTIGNoaXBzLiBJdCBjYW4gaGF2ZSAzIGtpbmRzIG9mIHZhbHVlczoKKworLTEgICBBY3QgbGlrZSAyLjAga2VybmVsczogb25seSBkZXRlY3QgRVM2ODggb3IgRVMxNjg4LgorMAkgVHJ5IHRvIGF1dG8tZGV0ZWN0IHRoZSBjaGlwIChtYXkgZmFpbCBmb3IgRVMxNjg4KQorNjg4ICBUaGUgY2hpcCB3aWxsIGJlIHRyZWF0ZWQgYXMgIEVTNjg4CisxNjg4ICAsLCAgLCwgICAsLCAgLCwgICAgLCwgICAsLCBFUzE2ODgKKzE4NjggICwsICAsLCAgICwsICAsLCAgICAsLCAgICwsIEVTMTg2OAorMTg2OSAgLCwgICwsICAgLCwgICwsICAgICwsICAgLCwgRVMxODY5CisxNzg4ICAsLCAgLCwgICAsLCAgLCwgICAgLCwgICAsLCBFUzE3ODgKKzE4ODcgICwsICAsLCAgICwsICAsLCAgICAsLCAgICwsIEVTMTg4NworMTg4OCAgLCwgICwsICAgLCwgICwsICAgICwsICAgLCwgRVMxODg4CisKK0JlY2F1c2UgRnVsbCBEdXBsZXggaXMgc3VwcG9ydGVkIGZvciBFUzE4ODcgeW91IGNhbiBzcGVjaWZ5IGEgc2Vjb25kIERNQQorY2hhbm5lbCBieSBzcGVjaWZ5aW5nIG1vZHVsZSBwYXJhbWV0ZXIgZG1hMTYuIEl0IGNhbiBiZSBvbmUgb2Y6IDAsIDEsIDMgb3IgNS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvRVNTMTg2OCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0VTUzE4NjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlOTIyZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0VTUzE4NjgKQEAgLTAsMCArMSw1NSBAQAorRG9jdW1lbnRhdGlvbiBmb3IgdGhlIEVTUzE4NjhGIEF1ZGlvRHJpdmUgUG5QIHNvdW5kIGNhcmQKKworVGhlIEVTUzE4Njggc291bmQgY2FyZCBpcyBhIFBuUCBFU1MxNjg4LWNvbXBhdGlibGUgMTYtYml0IHNvdW5kIGNhcmQuCisKK0l0IHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGJ5IHRoZSBMaW51eCBLZXJuZWwgaXNhcG5wIHN1cHBvcnQgd2hlbiB5b3UKK2xvYWQgdGhlIHNiLm8gbW9kdWxlLiBPdGhlcndpc2UgeW91IHNob3VsZCB0YWtlIGNhcmUgb2Y6CisKKyAgKiAgVGhlIEVTUzE4NjggZG9lcyBub3QgYWxsb3cgdXNlIG9mIGEgMTYtYml0IERNQSwgdGh1cyBETUEgMCwgMSwgMiwgYW5kIDMKKyAgICAgbWF5IG9ubHkgYmUgdXNlZC4KKworICAqICBpc2FwbnB0b29scyB2ZXJzaW9uIDEuMTQgZG9lcyB3b3JrIHdpdGggRVNTMTg2OC4gIEVhcmxpZXIgdmVyc2lvbnMgbWlnaHQKKyAgICAgbm90LgorCisgICogIFNvdW5kIHN1cHBvcnQgTVVTVCBiZSBjb21waWxlZCBhcyBNT0RVTEVTLCBub3Qgc3RhdGljYWxseSBsaW5rZWQKKyAgICAgaW50byB0aGUga2VybmVsLgorCisKK05PVEU6IHRoaXMgaXMgb25seSBuZWVkZWQgd2hlbiBub3QgdXNpbmcgdGhlIGtlcm5lbCBpc2FwbnAgc3VwcG9ydCEKKworRm9yIGNvbmZpZ3VyaW5nIHRoZSBzb3VuZCBjYXJkJ3MgSS9PIGFkZHJlc3NlcywgSVJRIGFuZCBETUEsIGhlcmUgaXMgYQorc2FtcGxlIGNvcHkgb2YgdGhlIGlzYXBucC5jb25mIGRpcmVjdGl2ZXMgcmVnYXJkaW5nIHRoZSBFU1MxODY4OgorCisoQ09ORklHVVJFIEVTUzE4NjgvLTEgKExEIDEKKyhJTyAwIChCQVNFIDB4MDIyMCkpCisoSU8gMSAoQkFTRSAweDAzODgpKQorKElPIDIgKEJBU0UgMHgwMzMwKSkKKyhETUEgMCAoQ0hBTk5FTCAxKSkKKyhJTlQgMCAoSVJRIDUgKE1PREUgK0UpKSkKKyhBQ1QgWSkKKykpCisKKyhmb3IgYSBmdWxsIHdvcmtpbmcgaXNhcG5wLmNvbmYgZmlsZSwgcmVtZW1iZXIgdGhlCisoSVNPTEFURSkKKyhJREVOVElGWSAqKQorYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlCisoV0FJVEZPUktFWSkKK2F0IHRoZSBlbmQuKQorCitJbiB0aGlzIHNldHVwLCB0aGUgbWFpbiBjYXJkIEkvTyBpcyAweDAyMjAsIEZNIHN5bnRoZXNpemVyIGlzIDB4MDM4OCwgYW5kCit0aGUgTVBVLTQwMSBNSURJIHBvcnQgaXMgbG9jYXRlZCBhdCAweDAzMzAuICBJUlEgaXMgSVJRIDUsIERNQSBpcyBjaGFubmVsIDEuCisKK0FmdGVyIGNvbmZpZ3VyaW5nIHRoZSBzb3VuZCBjYXJkIHZpYSBpc2FwbnAsIHRvIHVzZSB0aGUgY2FyZCB5b3UgbXVzdCBsb2FkCit0aGUgc291bmQgbW9kdWxlcyB3aXRoIHRoZSBwcm9wZXIgSS9PIGluZm9ybWF0aW9uLiAgSGVyZSBpcyBteSBzZXR1cDoKKworIyBFU1MxODY4RiBBdWRpb0RyaXZlIGluaXRpYWxpemF0aW9uCisKKy9zYmluL21vZHByb2JlIHNvdW5kCisvc2Jpbi9pbnNtb2QgdWFydDQwMQorL3NiaW4vaW5zbW9kIHNiIGlvPTB4MjIwIGlycT01IGRtYT0xIGRtYTE2PS0xCisvc2Jpbi9pbnNtb2QgbXB1NDAxIGlvPTB4MzMwCisvc2Jpbi9pbnNtb2Qgb3BsMyBpbz0weDM4OAorL3NiaW4vaW5zbW9kIHZfbWlkaQorCitvcGwzIGlzIHRoZSBGTSBzeW50aGVzaXplcgorL3NiaW4vaW5zbW9kIG9wbDMgaW89MHgzODgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0lOU1RBTEwuYXdlIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSU5TVEFMTC5hd2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwZjQyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0lOU1RBTEwuYXdlCkBAIC0wLDAgKzEsMTM0IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJSU5TVEFMTEFUSU9OIE9GIEFXRTMyIFNPVU5EIERSSVZFUiBGT1IgTElOVVgKKwlUYWthc2hpIEl3YWkJPGl3YWlAd3cudW5pLWVybGFuZ2VuLmRlPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEF0dGVudGlvbiB0byBTQi1QblAgQ2FyZCBVc2VycworCitJZiB5b3UncmUgdXNpbmcgUG5QIGNhcmRzLCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgUG5QIGlzIHJlcXVpcmVkCitiZWZvcmUgbG9hZGluZyB0aGlzIGRyaXZlci4gIFlvdSBoYXZlIG5vdyB0aHJlZSBvcHRpb25zOgorICAxLiBVc2UgaXNhcG5wdG9vbHMuCisgIDIuIFVzZSBpbi1rZXJuZWwgaXNhcG5wIHN1cHBvcnQuCisgIDMuIEluaXRpYWxpemUgUG5QIG9uIERPUy9XaW5kb3dzLCB0aGVuIGJvb3QgbGludXggYnkgbG9hZGxpbi4KK0luIHRoaXMgZG9jdW1lbnQsIG9ubHkgdGhlIGNhc2UgMSBjYXNlIGlzIHRyZWF0ZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogSW5zdGFsbGF0aW9uIG9uIFJlZCBIYXQgNS4wIFNvdW5kIERyaXZlcgorCitQbGVhc2UgdXNlIGluc3RhbGwtcmguc2ggdW5kZXIgUmVkSGF0NS4wIGRpcmVjdG9yeS4KK0RPIE5PVCBVU0UgaW5zdGFsbC5zaCBiZWxvdy4KK1NlZSBJTlNUQUxMLlJIIGZvciBtb3JlIGRldGFpbHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogSW5zdGFsbGF0aW9uL1VwZGF0ZSBieSBTaGVsbCBTY3JpcHQKKworICAxLiBCZWNvbWUgcm9vdAorCisJJSBzdQorCisgIDIuIElmIHlvdSBoYXZlIG5ldmVyIGNvbmZpZ3VyZWQgdGhlIGtlcm5lbCB0cmVlIHlldCwgcnVuIG1ha2UgY29uZmlnCisgICAgb25jZSAodG8gbWFrZSBkZXBlbmRlbmNpZXMgYW5kIHN5bWxpbmtzKS4KKworCSMgY2QgL3Vzci9zcmMvbGludXgKKwkjIG1ha2UgeGNvbmZpZworICAgIAorICAzLiBSdW4gaW5zdGFsbC5zaCBzY3JpcHQKKworCSMgc2ggLi9pbnN0YWxsLnNoCisKKyAgNC4gQ29uZmlndXJlIHlvdXIga2VybmVsCisKKwkoZm9yIExpbnV4IDIuWzAxXS54IHVzZXIpCisJIyBjZCAvdXNyL3NyYy9saW51eAorCSMgbWFrZSB4Y29uZmlnIChvciBtYWtlIG1lbnVjb25maWcpCisKKwkoZm9yIExpbnV4IDEuMi54IHVzZXIpCisJIyBjZCAvdXNyL3NyYy9saW51eAorCSMgbWFrZSBjb25maWcKKworICAgIEFuc3dlciBZRVMgdG8gYm90aCAibG93bGV2ZWwgZHJpdmVycyIgYW5kICJBV0UzMiB3YXZlIHN5bnRoIiBpdGVtcyAKKyAgICBpbiBTb3VuZCBtZW51LiAgKCJsb3dsZXZlbCBkcml2ZXJzIiB3aWxsIGFwcGVhciBvbmx5IGluIDIueAorICAgIGtlcm5lbC4pCisKKyAgNS4gTWFrZSB5b3VyIGtlcm5lbCAoYW5kIG1vZHVsZXMpLCBhbmQgaW5zdGFsbCB0aGVtIGFzIHVzdWFsLgorCisJNWEuIG1ha2Uga2VybmVsIGltYWdlCisJCSMgbWFrZSB6SW1hZ2UKKworCTViLiBtYWtlIG1vZHVsZXMgYW5kIGluc3RhbGwgdGhlbQorCQkjIG1ha2UgbW9kdWxlcyAmJiBtYWtlIG1vZHVsZXNfaW5zdGFsbAorCisJNWMuIElmIHlvdSdyZSB1c2luZyBsaWxvLCBjb3B5IHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHJ1biBsaWxvLgorCSAgICBPdGhlcndpc2UsIGNvcHkgdGhlIGtlcm5lbCBpbWFnZSB0byBzdWl0YWJsZSBkaXJlY3Rvcnkgb3IKKwkgICAgbWVkaWEgZm9yIHlvdXIgc3lzdGVtLgorCisgIDYuIFJlYm9vdCB0aGUga2VybmVsIGlmIG5lY2Vzc2FyeS4KKwktIElmIHlvdSB1cGRhdGVkIG9ubHkgdGhlIG1vZHVsZXMsIHlvdSBkb24ndCBoYXZlIHRvIHJlYm9vdAorCSAgdGhlIHN5c3RlbS4gIEp1c3QgcmVtb3ZlIHRoZSBvbGQgc291bmQgbW9kdWxlcyBoZXJlLgorCQlpbiAKKwkJIyBybW1vZCBzb3VuZC5vCQkobGludXgtMi4wIG9yIE9TUy9GcmVlKQorCQkjIHJtbW9kIGF3ZV93YXZlLm8JKGxpbnV4LTIuMSkKKworICA3LiBJZiB5b3VyIEFXRSBjYXJkIGlzIGEgUG5QIGFuZCBub3QgaW5pdGlhbGl6ZWQgeWV0LCB5b3UnbGwgaGF2ZSB0bworICAgIGRvIGl0IGJ5IGlzYXBucCB0b29scy4gIE90aGVyd2lzZSwgc2tpcCB0byA4LgorCisJVGhpcyBzZWN0aW9uIGRlc2NyaWJlZCBvbmx5IGEgYnJpZWYgZXhwbGFuYXRpb24uICBGb3IgbW9yZQorCWRldGFpbHMsIHBsZWFzZSBzZWUgdGhlIEFXRTY0LU1pbmktSE9XVE8gb3IgaXNhcG5wIHRvb2xzIEZBUS4KKworCTdhLiBJZiB5b3UgaGF2ZSBubyBpc2FwbnAuY29uZiBmaWxlLCBnZW5lcmF0ZSBpdCBieSBwbnBkdW1wLgorCSAgICBPdGhlcndpc2UsIHNraXAgdG8gN2QuCisJCSMgcG5wZHVtcCA+IC9ldGMvaXNhcG5wLmNvbmYKKworCTdiLiBFZGl0IGlzYXBucC5jb25mIGZpbGUuICBDb21tZW50IG91dCB0aGUgYXBwcm9wcmlhdGUKKwkgICAgbGluZXMgY29udGFpbmluZyBkZXNpcmFibGUgSS9PIHBvcnRzLCBETUEgYW5kIElSUXMuCisJICAgIERvbid0IGZvcmdldCB0byBlbmFibGUgKEFDVCBZKSBsaW5lLgorCisJN2MuIEFkZCB0d28gaS9vIHBvcnRzICgweEEyMCBhbmQgMHhFMjApIGluIFdhdmVUYWJsZSBwYXJ0LgorCSAgICBleCkKKwkJKENPTkZJR1VSRSBDVEwwMDQ4LzU4MTI4IChMRCAyCisJCSMgICAgIEFOU0kgc3RyaW5nIC0tPldhdmVUYWJsZTwtLQorCQkgIChJTyAwIChCQVNFIDB4MDYyMCkpCisJCSAgKElPIDEgKEJBU0UgMHgwQTIwKSkKKwkJICAoSU8gMiAoQkFTRSAweDBFMjApKQorCQkgIChBQ1QgWSkKKwkJKSkKKworCTdkLiBMb2FkIHRoZSBjb25maWcgZmlsZS4KKwkgICAgQ0FVVElPTjogVGhpcyB3aWxsIHJlc2V0IGFsbCBQblAgY2FyZHMhCisKKwkJIyBpc2FwbnAgL2V0Yy9pc2FwbnAuY29uZgorCisgIDguIExvYWQgdGhlIHNvdW5kIG1vZHVsZSAoaWYgeW91IGNvbmZpZ3VyZWQgaXQgYXMgYSBtb2R1bGUpOgorCisJZm9yIDIuMCBrZXJuZWwgb3IgT1NTL0ZyZWUgbW9ub2xpdGhpYyBtb2R1bGU6CisKKwkJIyBtb2Rwcm9iZSBzb3VuZC5vCisKKwlmb3IgMi4xIGtlcm5lbDoKKworCQkjIG1vZHByb2JlIHNvdW5kCisJCSMgaW5zbW9kIHVhcnQ0MDEKKwkJIyBpbnNtb2Qgc2IgaW89MHgyMjAgaXJxPTUgZG1hPTEgZG1hMTY9NSBtcHVfaW89MHgzMzAKKwkJKFRoZXNlIHZhbHVlcyBkZXBlbmQgb24geW91ciBzZXR0aW5ncy4pCisJCSMgaW5zbW9kIGF3ZV93YXZlCisJCShCZSBzdXJlIHRvIGxvYWQgYXdlX3dhdmUgYWZ0ZXIgc2IhKQorCisJCVNlZSBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BV0UzMiBmb3IKKwkJbW9yZSBkZXRhaWxzLgorCisgIDkuIChvbmx5IGZvciBvYnNvbGV0ZSBzeXN0ZW1zKSBJZiB5b3UgZG9uJ3QgaGF2ZSAvZGV2L3NlcXVlbmNlcgorICAgICBkZXZpY2UgZmlsZSwgbWFrZSBpdCBhY2NvcmRpbmcgdG8gUmVhZG1lLmxpbnV4IGZpbGUgb24KKyAgICAgL3Vzci9zcmMvbGludXgvZHJpdmVycy9zb3VuZC4gKFJ1biBhIHNoZWxsIHNjcmlwdCBpbmNsdWRlZCBpbgorICAgICB0aGF0IGZpbGUpLiA8LS0gVGhpcyBmaWxlIG5vIGxvbmdlciBleGlzdHMgaW4gdGhlIHJlY2VudCBrZXJuZWxzIQorCisgIDEwLiBPSywgbG9hZCB5b3VyIG93biBzb3VuZGZvbnQgZmlsZSwgYW5kIGVuam95IE1JREkhCisKKwklIHNmeGxvYWQgc3ludGhnbS5zYmsKKwklIGRydm1pZGkgZm9vLm1pZAorCisgIDExLiBGb3IgbW9yZSBhZHZhbmNlZCB1c2UgKGVnLiBkeW5hbWljIGxvYWRpbmcsIHZpcnR1YWwgYmFuayBhbmQKKyAgICAgIGV0Yy4pLCBwbGVhc2UgcmVhZCB0aGUgYXdlZHJ2IEZBUSBvciB0aGUgaW5zdHJ1Y3Rpb25zIGluIGF3ZXNmeAorICAgICAgYW5kIGF3ZW1pZGkgcGFja2FnZXMuCisKK0dvb2QgbHVjayEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ0ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCkBAIC0wLDAgKzEsNDU5IEBACitJbnRyb2R1Y3Rpb24JTm90ZXMgb24gTW9kdWxhciBTb3VuZCBEcml2ZXJzIGFuZCBTb3VuZGNvcmUKK1dhZGUgSGFtcHRvbiAKKzIvMTQvMjAwMQorCitQdXJwb3NlOiAgCis9PT09PT09PQorVGhpcyBkb2N1bWVudCBwcm92aWRlcyBzb21lIGdlbmVyYWwgbm90ZXMgb24gdGhlIG1vZHVsYXIgCitzb3VuZCBkcml2ZXJzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uLCBhbG9uZyB3aXRoIHRoZSAKK3N1cHBvcnQgbW9kdWxlcyBzb3VuZC5vIGFuZCBzb3VuZGNvcmUuby4KKworTm90ZSwgc29tZSBvZiB0aGlzIHByb2JhYmx5IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgU291bmQtSE9XVE8hCisKK05vdGUsIHNvdW5kbG93Lm8gd2FzIHByZXNlbnQgd2l0aCAyLjIga2VybmVscyBidXQgaXMgbm90IAorcmVxdWlyZWQgZm9yIDIuNC54IGtlcm5lbHMuICBSZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkCit0byB0aGlzLgorCisKK0NvcHlpbmc6Cis9PT09PT09PQorbm9uZQorCisKK0hpc3Rvcnk6Cis9PT09PT09PQorMC4xLjAgIDExLzIwLzE5OTggIEZpcnN0IHZlcnNpb24sIGRyYWZ0CisxLjAuMCAgMTEvMTk5OCAgICAgQWxhbiBDb3ggY2hhbmdlcywgaW5jb3Jwb3JhdGlvbiBpbiAyLjIuMAorICAgICAgICAgICAgICAgICAgIGFzIERvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgorMS4xLjAgIDYvMzAvMTk5OSAgIFNlY29uZCB2ZXJzaW9uLCBhZGRlZCBub3RlcyBvbiBtYWtpbmcgdGhlIGRyaXZlcnMsCisgICAgICAgICAgICAgICAgICAgYWRkZWQgaW5mbyBvbiBtdWx0aXBsZSBzb3VuZCBjYXJkcyBvZiBzaW1pbGFyIHR5cGVzLF0KKyAgICAgICAgICAgICAgICAgICBhZGRlZCBtb3JlIGRpYWdub3N0aWNzIGluZm8sIGFkZGVkIGluZm8gYWJvdXQgZXNkLgorICAgICAgICAgICAgICAgICAgIGFkZGVkIGluZm8gb24gT1NTIGFuZCBBTFNBLgorMS4xLjEgIDE5OTkxMDMxCSAgIEFkZGVkIG5vdGVzIG9uIHNvdW5kLXNsb3QtIGFuZCBzb3VuZC1zZXJ2aWNlLgorCQkJKEFsYW4gQ294KQorMS4xLjIgIDIwMDAwOTIwICAgIE1vZGlmaWVkIGZvciBLZXJuZWwgMi40IChDaHJpc3RvcGggSGVsbHdpZykKKzEuMS4zICAyMDAxMDIxNCAgICBNaW5vciBub3RlcyBhbmQgY29ycmVjdGlvbnMgKFdhZGUgSGFtcHRvbikKKyAgICAgICAgICAgICAgICAgICBBZGRlZCBleGFtcGxlcyBvZiBzb3VuZC1zbG90LTAsIGV0Yy4KKworCitNb2R1bGFyIFNvdW5kIERyaXZlcnM6Cis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoYW5rcyB0byB0aGUgR1JFQVQgd29yayBieSBBbGFuIENveCAoYWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrKSwKKworW0FuZCBPbGVnIERyb2tpbiwgVGhvbWFzIFNhaWxlciwgQW5kcmV3IFZlbGlhdGggYW5kIG1vcmUgdGhhbiBhIGZldyAKKyBvdGhlcnMgLSBub3QgdG8gbWVudGlvbiBIYW5udSdzIG9yaWdpbmFsIGNvZGUgYmVpbmcgZGVzaWduZWQgd2VsbAorIGVub3VnaCB0byBjb3BlIHdpdGggdGhhdCBraW5kIG9mIGNob3BwaW5nIHVwXShBbGFuKQorCit0aGUgc3RhbmRhcmQgTGludXgga2VybmVscyBzdXBwb3J0IGEgbW9kdWxhciBzb3VuZCBkcml2ZXIuICBGcm9tCitBbGFuJ3MgY29tbWVudHMgaW4gbGludXgvZHJpdmVycy9zb3VuZC9SRUFETUUuRklSU1Q6CisKKyAgVGhlIG1vZHVsYXIgc291bmQgZHJpdmVyIHBhdGNoZXMgd2VyZSBmdW5kZWQgYnkgUmVkIEhhdCBTb2Z0d2FyZSAKKyAgKHd3dy5yZWRoYXQuY29tKS4gVGhlIHNvdW5kIGRyaXZlciBoZXJlIGlzIHRodXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIAorICBIYW5udSdzIGNvZGUuIFBsZWFzZSBiZWFyIHRoYXQgaW4gbWluZCB3aGVuIGNvbnNpZGVyaW5nIHRoZSBhcHByb3ByaWF0ZQorICBmb3J1bXMgZm9yIGJ1ZyByZXBvcnRpbmcuCisKK1RoZSBtb2R1bGFyIHNvdW5kIGRyaXZlcnMgbWF5IGJlIGxvYWRlZCB2aWEgaW5zbW9kIG9yIG1vZHByb2JlLiAgCitUbyBzdXBwb3J0IGFsbCB0aGUgdmFyaW91cyBzb3VuZCBtb2R1bGVzLCB0aGVyZSBhcmUgdHdvIGdlbmVyYWwgCitzdXBwb3J0IG1vZHVsZXMgdGhhdCBtdXN0IGJlIGxvYWRlZCBmaXJzdDoKKyAKKyAgIHNvdW5kY29yZS5vOiAgIFRvcCBsZXZlbCBoYW5kbGVyIGZvciB0aGUgc291bmQgc3lzdGVtLCBwcm92aWRlcworICAgICAgICAgICAgICAgICAgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciByZWdpc3RyYXRpb24gb2YgZGV2aWNlcworICAgICAgICAgICAgICAgICAgYnkgdHlwZS4KKworICAgc291bmQubzogICAgICAgQ29tbW9uIHNvdW5kIGZ1bmN0aW9ucyByZXF1aXJlZCBieSBhbGwgbW9kdWxlcy4KKworRm9yIHRoZSBzcGVjaWZpYyBzb3VuZCBtb2R1bGVzIChlLmcuLCBzYi5vIGZvciB0aGUgU291bmRibGFzdGVyKSwgCityZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoYXQgbW9kdWxlIHRvIGRldGVybWluZSB3aGF0IG9wdGlvbnMKK2FyZSBhdmFpbGFibGUsIGZvciBleGFtcGxlIElSUSwgYWRkcmVzcywgRE1BLgorCitXYXJuaW5nLCB0aGUgb3B0aW9ucyBmb3IgZGlmZmVyZW50IGNhcmRzIHNvbWV0aW1lIHVzZSBkaWZmZXJlbnQgbmFtZXMgCitmb3IgdGhlIHNhbWUgb3IgYSBzaW1pbGFyIGZlYXR1cmUgKGRtYTE9IHZlcnN1cyBkbWExNj0pLiAgQXMgYSBsYXN0IAorcmVzb3J0LCBpbnNwZWN0IHRoZSBjb2RlIChzZWFyY2ggZm9yIE1PRFVMRV9QQVJNKS4KKworTm90ZXM6CisKKzEuICBUaGVyZSBpcyBhIG5ldyBPcGVuU291cmNlIHNvdW5kIGRyaXZlciBjYWxsZWQgQUxTQSB3aGljaCBpcworICAgIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudDogIGh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZy8KKyAgICBUaGUgQUxTQSBkcml2ZXJzIHN1cHBvcnQgc29tZSBuZXdlciBoYXJkd2FyZSB0aGF0IG1heSBub3QgCisgICAgYmUgc3VwcG9ydGVkIGJ5IHRoaXMgc291bmQgZHJpdmVyIGFuZCBhbHNvIHByb3ZpZGUgc29tZSAKKyAgICBhZGRpdGlvbmFsIGZlYXR1cmVzLgorCisyLiAgVGhlIGNvbW1lcmNpYWwgT1NTIGRyaXZlciBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgc2l0ZToKKyAgICBodHRwOi8vd3d3L29wZW5zb3VuZC5jb20uICBUaGlzIG1heSBiZSB1c2VkIGZvciBjYXJkcyB0aGF0CisgICAgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLCBvciBtYXkgYmUgdXNlZAorICAgIGJ5IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLiAgCisKKzMuICBUaGUgZW5saWdodGVubWVudCBzb3VuZCBkYWVtb24gbWF5IGJlIHVzZWQgZm9yIHBsYXlpbmcKKyAgICBtdWx0aXBsZSBzb3VuZHMgYXQgdGhlIHNhbWUgdGltZSB2aWEgYSBzaW5nbGUgY2FyZCwgZWxpbWluYXRpbmcKKyAgICBzb21lIG9mIHRoZSByZXF1aXJlbWVudHMgZm9yIG11bHRpcGxlIHNvdW5kIGNhcmQgc3lzdGVtcy4gIEZvcgorICAgIG1vcmUgaW5mb3JtYXRpb24sIHNlZTogIGh0dHA6Ly93d3cudHV4Lm9yZy9+cmljZHVkZS9Fc291bkQuaHRtbCAgCisgICAgVGhlICJlc2QiIHByb2dyYW0gbWF5IGJlIHVzZWQgd2l0aCB0aGUgcmVhbC1wbGF5ZXIgYW5kIG1wZWcgCisgICAgcGxheWVycyBsaWtlIG1wZzEyMyBhbmQgeDExYW1wLiAgVGhlIG5ld2VyIHJlYWwtcGxheWVyIAorICAgIGFuZCBzb21lIGdhbWVzIGV2ZW4gaW5jbHVkZSBidWlsdC1pbiBzdXBwb3J0IGZvciBFU0QhCisKKworQnVpbGRpbmcgdGhlIE1vZHVsZXM6Cis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkb2VzIG5vdCBwcm92aWRlIGZ1bGwgZGV0YWlscyBvbiBidWlsZGluZyB0aGUgCitrZXJuZWwsIGV0Yy4gIFRoZSBub3RlcyBiZWxvdyBhcHBseSBvbmx5IHRvIG1ha2luZyB0aGUga2VybmVsCitzb3VuZCBtb2R1bGVzLiAgIElmIHRoaXMgY29uZmxpY3RzIHdpdGggdGhlIGtlcm5lbCdzIFJFQURNRSwKK3RoZSBSRUFETUUgdGFrZXMgcHJlY2VkZW5jZS4gCisKKzEuICBUbyBtYWtlIHRoZSBrZXJuZWwgc291bmQgbW9kdWxlcywgY2QgdG8geW91ciAvdXNyL3NyYy9saW51eAorICAgIGRpcmVjdG9yeSAodHlwaWNhbGx5KSBhbmQgdHlwZSBtYWtlIGNvbmZpZywgbWFrZSBtZW51Y29uZmlnLCAKKyAgICBvciBtYWtlIHhjb25maWcgKHRvIHN0YXJ0IHRoZSBjb21tYW5kIGxpbmUsIGRpYWxvZywgb3IgeC1iYXNlZAorICAgIGNvbmZpZ3VyYXRpb24gdG9vbCkuICAKKworMi4gIFNlbGVjdCB0aGUgU291bmQgb3B0aW9uIGFuZCBhIGRpYWxvZyB3aWxsIGJlIGRpc3BsYXllZC4gIAorCiszLiAgU2VsZWN0IE0gKG1vZHVsZSkgZm9yICJTb3VuZCBjYXJkIHN1cHBvcnQiLgorCis0LiAgU2VsZWN0IHlvdXIgc291bmQgZHJpdmVyKHMpIGFzIGEgbW9kdWxlLiAgRm9yIFByb0F1ZGlvLCBTb3VuZAorICAgIEJsYXN0ZXIsIGV0Yy4sIHNlbGVjdCBNIChtb2R1bGUpIGZvciBPU1Mgc291bmQgbW9kdWxlcy4KKyAgICBbdGhhbmtzIHRvIE1hcnZpbiBTdG9kb2xza3kgPHN0b2RvbHNrQGVyb2xzLmNvbT5dQQorCis1LiAgTWFrZSB0aGUga2VybmVsIChlLmcuLCBtYWtlIGJ6SW1hZ2UpLCBhbmQgaW5zdGFsbCB0aGUga2VybmVsLgorCis2LiAgTWFrZSB0aGUgbW9kdWxlcyBhbmQgaW5zdGFsbCB0aGVtIChtYWtlIG1vZHVsZXM7IG1ha2UgbW9kdWxlc19pbnN0YWxsKS4KKworTm90ZSwgZm9yIDIuNS54IGtlcm5lbHMsIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgbmV3ZXIgbW9kdWxlLWluaXQtdG9vbHMgCitpbnN0YWxsZWQgb3IgbW9kdWxlcyB3aWxsIG5vdCBiZSBsb2FkZWQgcHJvcGVybHkuICAyLjUueCByZXF1aXJlcyBhbgordXBkYXRlZCBtb2R1bGUtaW5pdC10b29scy4KKworCitQbHVnIGFuZCBQbGF5IChQblA6Cis9PT09PT09PT09PT09PT09PT09CisKK0lmIHRoZSBzb3VuZCBjYXJkIGlzIGFuIElTQSBQblAgY2FyZCwgaXNhcG5wIG1heSBiZSB1c2VkCit0byBjb25maWd1cmUgdGhlIGNhcmQuICBTZWUgdGhlIGZpbGUgaXNhcG5wLnR4dCBpbiB0aGUgCitkaXJlY3Rvcnkgb25lIGxldmVsIHVwIChlLmcuLCAvdXNyL3NyYy9saW51eC9Eb2N1bWVudGF0aW9uKS4KKworQWxzbyB0aGUgMi40Lngga2VybmVscyBwcm92aWRlIFBuUCBjYXBhYmlsaXRpZXMsIHNlZSB0aGUgCitmaWxlIE5FV1MgaW4gdGhpcyBkaXJlY3RvcnkuCisKK1BDSSBzb3VuZCBjYXJkcyBhcmUgaGlnaGx5IHJlY29tbWVuZGVkLCBhcyB0aGV5IGFyZSBmYXIgCitlYXNpZXIgdG8gY29uZmlndXJlIGFuZCBmcm9tIHdoYXQgSSBoYXZlIHJlYWQsIHRoZXkgdXNlCitsZXNzIHJlc291cmNlcyBhbmQgYXJlIG1vcmUgQ1BVIGVmZmljaWVudC4KKworCitJTlNNT0Q6Cis9PT09PT09CisKK0lmIGxvYWRpbmcgdmlhIGluc21vZCwgdGhlIGNvbW1vbiBtb2R1bGVzIG11c3QgYmUgbG9hZGVkIGluIHRoZSAKK29yZGVyIGJlbG93IEJFRk9SRSBsb2FkaW5nIHRoZSBvdGhlciBzb3VuZCBtb2R1bGVzLiAgVGhlIGNhcmQtc3BlY2lmaWMKK21vZHVsZXMgbWF5IHRoZW4gYmUgbG9hZGVkIChtb3N0IHJlcXVpcmUgcGFyYW1ldGVycykuICBGb3IgZXhhbXBsZSwKK0kgdXNlIHRoZSBmb2xsb3dpbmcgdmlhIGEgc2hlbGwgc2NyaXB0IHRvIGxvYWQgbXkgU291bmRCbGFzdGVyOgorCitTQl9CQVNFPTB4MjQwCitTQl9JUlE9OQorU0JfRE1BPTMKK1NCX0RNQTI9NQorU0JfTVBVPTB4MzAwCisjCitlY2hvIFN0YXJ0aW5nIHNvdW5kCisvc2Jpbi9pbnNtb2Qgc291bmRjb3JlCisvc2Jpbi9pbnNtb2Qgc291bmQgIAorIworZWNobyBTdGFydGluZyBzb3VuZCBibGFzdGVyLi4uLgorL3NiaW4vaW5zbW9kIHVhcnQ0MDEKKy9zYmluL2luc21vZCBzYiBpbz0kU0JfQkFTRSBpcnE9JFNCX0lSUSBkbWE9JFNCX0RNQSBkbWExNj0kU0JfRE1BMiBtcHVfaW89JFNCX01QCisKK1doZW4gdXNpbmcgc291bmQgYXMgYSBtb2R1bGUsIEkgdHlwaWNhbGx5IHB1dCB0aGVzZSBjb21tYW5kcworaW4gYSBmaWxlIHN1Y2ggYXMgL3Jvb3Qvc291bmRvbi5zaC4KKworCitNT0RQUk9CRToKKz09PT09PT09PQorCitJZiBsb2FkaW5nIHZpYSBtb2Rwcm9iZSwgdGhlc2UgY29tbW9uIGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IGxvYWRlZCAKK3doZW4gcmVxdWVzdGVkIGJ5IG1vZHByb2JlLiAgRm9yIGV4YW1wbGUsIG15IC9ldGMvbW9kcHJvYmUuY29uZiBjb250YWluczoKKworYWxpYXMgc291bmQgc2IgCitvcHRpb25zIHNiIGlvPTB4MjQwIGlycT05IGRtYT0zIGRtYTE2PTUgbXB1X2lvPTB4MzAwCisKK0FsbCB5b3UgbmVlZCB0byBkbyB0byBsb2FkIHRoZSBtb2R1bGUgaXM6CisKKwkvc2Jpbi9tb2Rwcm9iZSBzYgorCisKK1NvdW5kIFN0YXR1czoKKz09PT09PT09PT09PT0KKworVGhlIHN0YXR1cyBvZiBzb3VuZCBtYXkgYmUgcmVhZC9jaGVja2VkIGJ5OgorICAgICAgICBjYXQgKGFueWZpbGUpLmF1ID4vZGV2L2F1ZGlvCisKK1tXV0g6ICBUaGlzIG1heSBub3Qgd29yayBwcm9wZXJseSBmb3IgU291bmRCbGFzdGVyIFBDSSAxMjggY2FyZHMKK3N1Y2ggYXMgdGhlIGVzMTM3MC8xIChzZWUgdGhlIGVzMTM3MC8xIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5KSAKK2FzIHRoZXkgZG8gbm90IGF1dG9tYXRpY2FsbHkgc3VwcG9ydCB1TGF3IG9uIC9kZXYvYXVkaW8uXQorCitUaGUgc3RhdHVzIG9mIHRoZSBtb2R1bGVzIGFuZCB3aGljaCBtb2R1bGVzIGRlcGVuZCBvbiAKK3doaWNoIG90aGVyIG1vZHVsZXMgbWF5IGJlIGNoZWNrZWQgYnk6CisJL3NiaW4vbHNtb2QKKworL3NiaW4vbHNtb2Qgc2hvdWxkIHNob3cgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKwlzYiAgICAgICAgICAgICAgICAgICAgIDI2MjgwICAgMCAKKwl1YXJ0NDAxICAgICAgICAgICAgICAgICA1NjQwICAgMCAgW3NiXQorCXNvdW5kICAgICAgICAgICAgICAgICAgNTcxMTIgICAwICBbc2IgdWFydDQwMV0KKwlzb3VuZGNvcmUgICAgICAgICAgICAgICAxOTY4ICAgOCAgW3NiIHNvdW5kXQorCisKK1JlbW92aW5nIFNvdW5kOiAKKz09PT09PT09PT09PT09PSAKKworU291bmQgbWF5IGJlIHJlbW92ZWQgYnkgdXNpbmcgL3NiaW4vcm1tb2QgaW4gdGhlIHJldmVyc2Ugb3JkZXIKK2luIHdoaWNoIHlvdSBsb2FkIHRoZSBtb2R1bGVzLiAgTm90ZSwgaWYgYSBwcm9ncmFtIGhhcyBhIHNvdW5kIGRldmljZQorb3BlbiAoZS5nLiwgeG1peGVyKSwgdGhhdCBtb2R1bGUgKGFuZCB0aGUgbW9kdWxlcyBvbiB3aGljaCBpdCAKK2RlcGVuZHMpIG1heSBub3QgYmUgdW5sb2FkZWQuCisKK0ZvciBleGFtcGxlLCBJIHVzZSB0aGUgZm9sbG93aW5nIHRvIHJlbW92ZSBteSBTb3VuZGJsYXN0ZXIgKHJtbW9kCitpbiB0aGUgcmV2ZXJzZSBvcmRlciBpbiB3aGljaCBJIGxvYWRlZCB0aGUgbW9kdWxlcyk6CisKKy9zYmluL3JtbW9kIHNiCisvc2Jpbi9ybW1vZCB1YXJ0NDAxCisvc2Jpbi9ybW1vZCBzb3VuZAorL3NiaW4vcm1tb2Qgc291bmRjb3JlCisKK1doZW4gdXNpbmcgc291bmQgYXMgYSBtb2R1bGUsIEkgdHlwaWNhbGx5IHB1dCB0aGVzZSBjb21tYW5kcworaW4gYSBzY3JpcHQgc3VjaCBhcyAvcm9vdC9zb3VuZG9mZi5zaC4KKworCitSZW1vdmluZyBTb3VuZCBmb3IgdXNlIHdpdGggT1NTOiAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorCitJZiB5b3UgZ2V0IHJlYWxseSBzdHVjayBvciBoYXZlIGEgY2FyZCB0aGF0IHRoZSBrZXJuZWwgbW9kdWxlcword2lsbCBub3Qgc3VwcG9ydCwgeW91IGNhbiBnZXQgYSBjb21tZXJjaWFsIHNvdW5kIGRyaXZlciBmcm9tCitodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20uICBCZWZvcmUgbG9hZGluZyB0aGUgY29tbWVyY2lhbCBzb3VuZAorZHJpdmVyLCB5b3Ugc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmc6CisKKzEuICByZW1vdmUgc291bmQgbW9kdWxlcyAoZGV0YWlsZWQgYWJvdmUpCisyLiAgcmVtb3ZlIHRoZSBzb3VuZCBtb2R1bGVzIGZyb20gL2V0Yy9tb2Rwcm9iZS5jb25mCiszLiAgbW92ZSB0aGUgc291bmQgbW9kdWxlcyBmcm9tIC9saWIvbW9kdWxlcy88a2VybmVsPi9taXNjCisgICAgKGZvciBleGFtcGxlLCBJIG1ha2UgYSAvbGliL21vZHVsZXMvPGtlcm5lbD4vbWlzYy90bXAKKyAgICBkaXJlY3RvcnkgYW5kIGNvcHkgdGhlIHNvdW5kIG1vZHVsZSBmaWxlcyB0byB0aGF0IAorICAgIGRpcmVjdG9yeSkuCisKKworTXVsdGlwbGUgU291bmQgQ2FyZHM6Cis9PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHNvdW5kIGRyaXZlcnMgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNvdW5kIGNhcmRzIGFuZCB0aGVyZQorYXJlIHNvbWUgZ3JlYXQgYXBwbGljYXRpb25zIGxpa2UgbXVsdGl0cmFjayB0aGF0IHN1cHBvcnQgdGhlbS4gIAorVHlwaWNhbGx5LCB5b3UgbmVlZCB0d28gc291bmQgY2FyZHMgb2YgZGlmZmVyZW50IHR5cGVzLiAgTm90ZSwgdGhpcwordXNlcyBtb3JlIHByZWNpb3VzIGludGVycnVwdHMgYW5kIERNQSBjaGFubmVscyBhbmQgc29tZXRpbWVzIAorY2FuIGJlIGEgY29uZmlndXJhdGlvbiBuaWdodG1hcmUuICBJIGhhdmUgaGVhcmQgcmVwb3J0cyBvZiAzLTQKK3NvdW5kIGNhcmRzICh0eXBpY2FsbHkgSSBvbmx5IHVzZSAyKS4gIFlvdSBjYW4gc29tZXRpbWVzIHVzZQorbXVsdGlwbGUgUENJIHNvdW5kIGNhcmRzIG9mIHRoZSBzYW1lIHR5cGUuCisKK09uIG15IG1hY2hpbmUgSSBoYXZlIHR3byBzb3VuZCBjYXJkcyAoY3M0MjMyIGFuZCBTb3VuZGJsYXN0ZXIgVmlicmEKKzE2KS4gIEJ5IGxvYWRpbmcgc291bmQgYXMgbW9kdWxlcywgSSBjYW4gY29udHJvbCB3aGljaCBpcyB0aGUgZmlyc3QKK3NvdW5kIGRldmljZSAoL2Rldi9kc3AsIC9kZXYvYXVkaW8sIC9kZXYvbWl4ZXIpIGFuZCB3aGljaCBpcyAKK3RoZSBzZWNvbmQuICBOb3JtYWxseSwgdGhlIGNzNDIzMiAoRGVsbCBzb3VuZCBvbiB0aGUgbW90aGVyYm9hcmQpIAord291bGQgYmUgdGhlIGZpcnN0IHNvdW5kIGRldmljZSwgYnV0IEkgcHJlZmVyIHRoZSBTb3VuZGJsYXN0ZXIuICAKK0FsbCB5b3UgaGF2ZSB0byBkbyBpcyB0byBsb2FkIHRoZSBvbmUgeW91IHdhbnQgYXMgL2Rldi9kc3AgCitmaXJzdCAoaW4gbXkgY2FzZSAic2IiKSBhbmQgdGhlbiBsb2FkIHRoZSBvdGhlciBvbmUKKyhpbiBteSBjYXNlICJjczQyMzIiKS4KKworSWYgeW91IGhhdmUgdHdvIGNhcmRzIG9mIHRoZSBzYW1lIHR5cGUgdGhhdCBhcmUganVtcGVyZWQgCitjYXJkcyBvciBkaWZmZXJlbnQgUG5QIHJldmlzaW9ucywgeW91IG1heSBsb2FkIHRoZSBzYW1lIAorbW9kdWxlIHR3aWNlLiAgRm9yIGV4YW1wbGUsIEkgaGF2ZSBhIFNvdW5kQmxhc3RlciB2aWJyYSAxNgorYW5kIGFuIG9sZGVyIFNvdW5kQmxhc3RlciAxNiAoanVtcGVycykuICBUbyBsb2FkIHRoZSBtb2R1bGUKK3R3aWNlLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisxLiAgQ29weSB0aGUgc291bmQgbW9kdWxlcyB0byBhIG5ldyBuYW1lLiAgRm9yIGV4YW1wbGUKKyAgICBzYi5vIGNvdWxkIGJlIGNvcGllZCAob3Igc3ltbGlua2VkKSB0byBzYjEubyBmb3IgdGhlCisgICAgc2Vjb25kIFNvdW5kQmxhc3Rlci4KKworMi4gIE1ha2UgYSBzZWNvbmQgZW50cnkgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mLCBmb3IgZXhhbXBsZSwKKyAgICBzb3VuZDEgb3Igc2IxLiAgVGhpcyBzZWNvbmQgZW50cnkgc2hvdWxkIHJlZmVyIHRvIHRoZQorICAgIG5ldyBtb2R1bGUgbmFtZXMgZm9yIGV4YW1wbGUgc2IxLCBhbmQgc2hvdWxkIGluY2x1ZGUKKyAgICB0aGUgSS9PLCBldGMuIGZvciB0aGUgc2Vjb25kIHNvdW5kIGNhcmQuCisKKzMuICBVcGRhdGUgeW91ciBzb3VuZG9uLnNoIHNjcmlwdCwgZXRjLgorCitXYXJuaW5nOiAgSSBoYXZlIG5ldmVyIGJlZW4gYWJsZSB0byBnZXQgdHdvIFBuUCBzb3VuZCBjYXJkcyBvZiB0aGUKK3NhbWUgdHlwZSB0byBsb2FkIGF0IHRoZSBzYW1lIHRpbWUuICBJIGhhdmUgdHJpZWQgdGhpcyBzZXZlcmFsIHRpbWVzCit3aXRoIHRoZSBTb3VuZGJsYXN0ZXIgVmlicmEgMTYgY2FyZHMuICBPU1MgaGFzIGluZGljYXRlZCB0aGF0IHRoaXMKK2lzIGEgUG5QIHByb2JsZW0uLi4uICBJZiBhbnlvbmUgaGFzIGFueSBsdWNrIGRvaW5nIHRoaXMsIHBsZWFzZSAKK3NlbmQgbWUgYW4gRS1NQUlMLiAgUENJIHNvdW5kIGNhcmRzIHNob3VsZCBub3QgaGF2ZSB0aGlzIHByb2JsZW0uYQorU2luY2UgdGhpcyB3YXMgb3JpZ2luYWxseSByZWxlYXNlLCBJIGhhdmUgcmVjZWl2ZWQgYSBjb3VwbGUgb2YgCittYWlscyBmcm9tIHBlb3BsZSB3aG8gaGF2ZSBhY2NvbXBsaXNoZWQgdGhpcyEKKworTk9URTogSW4gTGludXggMi40IHRoZSBTb3VuZCBCbGFzdGVyIGRyaXZlciAoYW5kIG9ubHkgdGhpcyBvbmUgeWV0KQorc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgd2l0aCBvbmUgbW9kdWxlIGJ5IGRlZmF1bHQuCitSZWFkIHRoZSBmaWxlICdTb3VuZGJsYXN0ZXInIGluIHRoaXMgZGlyZWN0b3J5IGZvciBkZXRhaWxzLgorCisKK1NvdW5kIFByb2JsZW1zOgorPT09PT09PT09PT09PT09CisKK0ZpcnN0IFJURk0gKGluY2x1ZGluZyB0aGUgdHJvdWJsZXNob290aW5nIHNlY3Rpb24gCitpbiB0aGUgU291bmQtSE9XVE8pLiAKKworMSkgIElmIHlvdSBhcmUgaGF2aW5nIHByb2JsZW1zIGxvYWRpbmcgdGhlIG1vZHVsZXMgKGZvcgorICAgIGV4YW1wbGUsIGlmIHlvdSBnZXQgZGV2aWNlIGNvbmZsaWN0IGVycm9ycykgdHJ5IHRoZQorICAgIGZvbGxvd2luZzoKKworICBBKSAgSWYgeW91IGhhdmUgV2luOTUgb3IgTlQgb24gdGhlIHNhbWUgY29tcHV0ZXIsICAKKyAgICAgIHdyaXRlIGRvd24gd2hhdCBhZGRyZXNzZXMsIElSUSwgYW5kIERNQSBjaGFubmVscworICAgICAgdGhvc2Ugd2VyZSB1c2luZyBmb3IgdGhlIHNhbWUgaGFyZHdhcmUuICBZb3UgcHJvYmFibHkgCisgICAgICBjYW4gdXNlIHRoZXNlIGFkZHJlc3NlcywgSVJRcywgYW5kIERNQSBjaGFubmVscy4KKyAgICAgIFlvdSBzaG91bGQgcmVhbGx5IGRvIHRoaXMgQkVGT1JFIGF0dGVtcHRpbmcgdG8gZ2V0CisgICAgICBzb3VuZCB3b3JraW5nIQorICAKKyAgQikgIENoZWNrIChjYXQpIC9wcm9jL2ludGVycnVwdHMsIC9wcm9jL2lvcG9ydHMsCisgICAgICBhbmQgL3Byb2MvZG1hLiAgQXJlIHlvdSB0cnlpbmcgdG8gdXNlIGFuIGFkZHJlc3MsCisgICAgICBJUlEgb3IgRE1BIHBvcnQgdGhhdCBhbm90aGVyIGRldmljZSBpcyB1c2luZz8KKyAgCisgIEMpICBDaGVjayAoY2F0KSAvcHJvYy9pc2FwbnAKKyAgCisgIEQpICBJbnNwZWN0IHlvdXIgL3Zhci9sb2cvbWVzc2FnZXMgZmlsZS4gIE9mdGVuIHRoYXQgd2lsbCAKKyAgICAgIGluZGljYXRlIHdoYXQgSVJRIG9yIElPIHBvcnQgY291bGQgbm90IGJlIG9idGFpbmVkLgorICAKKyAgRSkgIFRyeSBhbm90aGVyIHBvcnQgb3IgSVJRLiAgTm90ZSB0aGlzIG1heSBpbnZvbHZlIAorICAgICAgdXNpbmcgdGhlIFBuUCB0b29scyB0byBtb3ZlIHRoZSBzb3VuZCBjYXJkIHRvIAorICAgICAgYW5vdGhlciBsb2NhdGlvbi4gIFNvbWV0aW1lcyB0aGlzIGlzIHRoZSBvbmx5IHdheSAKKyAgICAgIGFuZCBpdCBpcyBtb3JlIG9yIGxlc3MgdHJpYWwgYW5kIGVycm9yLgorCisyKSAgSWYgeW91IGdldCBtb3Rvci1ib2F0aW5nICh0aGUgc2FtZSBzb3VuZCBvciBwYXJ0IG9mIGEgCisgICAgc291bmQgY2xpcCByZXBlYXRlZCksIHlvdSBwcm9iYWJseSBoYXZlIGVpdGhlciBhbiBJUlEKKyAgICBvciBETUEgY29uZmxpY3QuICBNb3ZlIHRoZSBjYXJkIHRvIGFub3RoZXIgSVJRIG9yIERNQQorICAgIHBvcnQuICBUaGlzIGhhcyBoYXBwZW5lZCB0byBtZSB3aGVuIHBsYXlpbmcgbG9uZyBmaWxlcyAKKyAgICB3aGVuIEkgaGFkIGFuIElSUSBjb25mbGljdC4KKworMy4gIElmIHlvdSBnZXQgZHJvcG91dHMgb3IgcGF1c2VzIHdoZW4gcGxheWluZyBoaWdoIHNhbXBsZQorICAgIHJhdGUgZmlsZXMgc3VjaCBhcyB1c2luZyBtcGcxMjMgb3IgeDExYW1wL3htbXMsIHlvdSBtYXkgCisgICAgaGF2ZSB0b28gc2xvdyBvZiBhIENQVSBhbmQgbWF5IGhhdmUgdG8gdXNlIHRoZSBvcHRpb25zIHRvIAorICAgIHBsYXkgdGhlIGZpbGVzIGF0IDEvMiBzcGVlZC4gIEZvciBleGFtcGxlLCB5b3UgbWF5IHVzZQorICAgIHRoZSAtMiBvciAtNCBvcHRpb24gb24gbXBnMTIzLiAgWW91IG1heSBhbHNvIGdldCB0aGlzCisgICAgd2hlbiB0cnlpbmcgdG8gcGxheSBtcGVnIGZpbGVzIHN0b3JlZCBvbiBhIENELVJPTQorICAgIChteSBUb3NoaWJhIFQ4MDAwIFBJSS8zNjYgc29tZXRpbWVzIGhhcyB0aGlzIHByb2JsZW0pLgorCis0LiAgSWYgeW91IGdldCAiY2Fubm90IGFjY2VzcyBkZXZpY2UiIGVycm9ycywgeW91ciAvZGV2L2RzcAorICAgIGZpbGVzLCBldGMuIG1heSBiZSBzZXQgdG8gb3duZXIgcm9vdCwgbW9kZSA2MDAuICBZb3UgCisgICAgbWF5IGhhdmUgdG8gdXNlIHRoZSBjb21tYW5kOgorICAgICAgY2htb2QgNjY2IC9kZXYvZHNwIC9kZXYvbWl4ZXIgL2Rldi9hdWRpbworCis1LiAgSWYgeW91IGdldCAiZGV2aWNlIGJ1c3kiIGVycm9ycywgYW5vdGhlciBwcm9ncmFtIGhhcyB0aGUKKyAgICBzb3VuZCBkZXZpY2Ugb3Blbi4gIEZvciBleGFtcGxlLCBpZiB1c2luZyB0aGUgRW5saWdodGVubWVudAorICAgIHNvdW5kIGRhZW1vbiAiZXNkIiwgdGhlICJlc2QiIHByb2dyYW0gaGFzIHRoZSBzb3VuZCBkZXZpY2UuCisgICAgSWYgdXNpbmcgImVzZCIsIHBsZWFzZSBSVEZNIHRoZSBkb2NzIG9uIEVTRC4gIEZvciBleGFtcGxlLAorICAgIGVzZGRzcCA8cHJvZ3JhbT4gbWF5IGJlIHVzZWQgdG8gcGxheSBmaWxlcyB2aWEgYSBub24tZXNkCisgICAgYXdhcmUgcHJvZ3JhbS4KKworNikgIEFzayBmb3IgaGVscCBvbiB0aGUgc291bmQgbGlzdCBvciBzZW5kIEUtTUFJTCB0byB0aGUKKyAgICBzb3VuZCBkcml2ZXIgYXV0aG9yL21haW50YWluZXIuCisKKzcpICBUdXJuIG9uIGRlYnVnIGluIGRyaXZlcnMvc291bmQvc291bmRfY29uZmlnLmggKERFQiwgRERCLCBNREIpLgorCis4KSAgSWYgdGhlIHN5c3RlbSByZXBvcnRzIGluc3VmZmljaWVudCBETUEgbWVtb3J5IHRoZW4geW91IG1heSB3YW50IHRvCisgICAgbG9hZCBzb3VuZCB3aXRoIHRoZSAiZG1hYnVmcz0xIiBvcHRpb24uIE9yIGluIC9ldGMvY29uZi5tb2R1bGVzIGFkZAorCQorCXByZWluc3RhbGwgc291bmQgZG1hYnVmcz0xCisKKyAgICBUaGlzIG1ha2VzIHRoZSBzb3VuZCBzeXN0ZW0gYWxsb2NhdGUgaXRzIGJ1ZmZlcnMgYW5kIGhhbmcgb250byB0aGVtLgorCisgICAgWW91IG1heSBhbHNvIHNldCBwZXJzaXN0ZW50IERNQSB3aGVuIGJ1aWxkaW5nIGEgMi40Lngga2VybmVsLgorCisKK0NvbmZpZ3VyaW5nIFNvdW5kOgorPT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSBzZXZlcmFsIHdheXMgb2YgY29uZmlndXJpbmcgeW91ciBzb3VuZDoKKworMSkgIE9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lICh3aGVuIHVzaW5nIHRoZSBzb3VuZCBkcml2ZXIocykKKyAgICBjb21waWxlZCBpbiB0aGUga2VybmVsKS4gQ2hlY2sgdGhlIGRyaXZlciBzb3VyY2UgYW5kCisgICAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworMikgIE9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbiB1c2luZyBpbnNtb2Qgb3IgaW4gYSBiYXNoIHNjcmlwdAorICAgIHVzaW5nIGNvbW1hbmQgbGluZSBjYWxscyB0byBsb2FkIHNvdW5kLgorCiszKSAgSW4gL2V0Yy9tb2Rwcm9iZS5jb25mIHdoZW4gdXNpbmcgbW9kcHJvYmUuCisKKzQpICBWaWEgUmVkIEhhdCdzIEdQTCdkIC91c3Ivc2Jpbi9zbmRjb25maWcgcHJvZ3JhbSAodGV4dCBiYXNlZCkuCisKKzUpICBWaWEgdGhlIE9TUyBzb3VuZGNvbmYgcHJvZ3JhbSAod2l0aCB0aGUgY29tbWVyY2lhbCB2ZXJzaW9uCisgICAgb2YgdGhlIE9TUyBkcml2ZXIuCisKKzYpICBCeSBqdXN0IGxvYWRpbmcgdGhlIG1vZHVsZSBhbmQgbGV0IGlzYXBucCBkbyBldmVyeXRoaW5nIHJlbGV2YW50CisgICAgZm9yIHlvdS4gVGhpcyB3b3JrcyBvbmx5IHdpdGggYSBmZXcgZHJpdmVycyB5ZXQgYW5kIC0gb2YgY291cnNlIC0KKyAgICBvbmx5IHdpdGggaXNhcG5wIGhhcmR3YXJlLgorCitBbmQgSSBhbSBzdXJlLCBzZXZlcmFsIG90aGVyIHdheXMuICAKKworQW55b25lIHdhbnQgdG8gd3JpdGUgYSBsaW51eGNvbmYgbW9kdWxlIGZvciBjb25maWd1cmluZyBzb3VuZD8KKworCitNb2R1bGUgTG9hZGluZzoKKz09PT09PT09PT09PT09PQorCitXaGVuIGEgc291bmQgY2FyZCBpcyBmaXJzdCByZWZlcmVuY2VkIGFuZCBzb3VuZCBpcyBtb2R1bGFyLCB0aGUgc291bmQgc3lzdGVtCit3aWxsIGFzayBmb3IgdGhlIHNvdW5kIGRldmljZXMgdG8gYmUgbG9hZGVkLiBJbml0aWFsbHkgaXQgcmVxdWVzdHMgdGhhdAordGhlIGRyaXZlciBmb3IgdGhlIHNvdW5kIHN5c3RlbSBpcyBsb2FkZWQuIEl0IHRoZW4gd2lsbCBhc2sgZm9yIAorc291bmQtc2xvdC0wLCB3aGVyZSAwIGlzIHRoZSBmaXJzdCBzb3VuZCBjYXJkLiAoc291bmQtc2xvdC0xIHRoZSBzZWNvbmQgYW5kCitzbyBvbikuIFRodXMgeW91IGNhbiBkbworCithbGlhcyBzb3VuZC1zbG90LTAgc2IKKworVG8gbG9hZCBhIHNvdW5kYmxhc3RlciBhdCB0aGlzIHBvaW50LiBJZiB0aGUgc2xvdCBsb2FkaW5nIGRvZXMgbm90IHByb3ZpZGUKK3RoZSBkZXNpcmVkIGRldmljZSAtIGZvciBleGFtcGxlIGEgc291bmRibGFzdGVyIGRvZXMgbm90IGRpcmVjdGx5IHByb3ZpZGUKK2EgbWlkaSBzeW50aCBpbiBhbGwgY2FzZXMgdGhlbiBpdCB3aWxsIHJlcXVlc3QgInNvdW5kLXNlcnZpY2UtMC1uIiB3aGVyZSBuCitpcworCisgIDAJTWl4ZXIKKworICAyICAJTUlESQorCisgIDMsIDQJRFNQIGF1ZGlvCisKKworRm9yIGV4YW1wbGUsIEkgdXNlIHRoZSBmb2xsb3dpbmcgdG8gbG9hZCBteSBTb3VuZGJsYXN0ZXIgUENJIDEyOAorKEVTIDEzNzEpIGNhcmQgZmlyc3QsIGZvbGxvd2VkIGJ5IG15IFNvdW5kQmxhc3RlciBWaWJyYSAxNiBjYXJkLAordGhlbiBieSBteSBUViBjYXJkOgorCisjIExvYWQgdGhlIFNvdW5kYmxhc3RlciBQQ0kgMTI4IGFzIC9kZXYvZHNwLCAvZGV2L2RzcDEsIC9kZXYvbWl4ZXIKK2FsaWFzIHNvdW5kLXNsb3QtMCBlczEzNzEKKworIyBMb2FkIHRoZSBTb3VuZGJsYXN0ZXIgVmlicmEgMTYgYXMgL2Rldi9kc3AyLCAvZGV2L21peGVyMQorYWxpYXMgc291bmQtc2xvdC0xIHNiCitvcHRpb25zIHNiIGlvPTB4MjQwIGlycT01IGRtYT0xIGRtYTE2PTUgbXB1X2lvPTB4MzMwCisKKyMgTG9hZCB0aGUgQlRUViAoVFYgY2FyZCkgYXMgL2Rldi9taXhlcjIKK2FsaWFzIHNvdW5kLXNsb3QtMiBidHR2CithbGlhcyBzb3VuZC1zZXJ2aWNlLTItMCB0dm1peGVyCisKK3ByZS1pbnN0YWxsIGJ0dHYgIG1vZHByb2JlIHR1bmVyIDsgbW9kcHJvYmUgdHZtaXhlcgorcHJlLWluc3RhbGwgdHZtaXhlciBtb2Rwcm9iZSBtc3AzNDAwOyBtb2Rwcm9iZSB0dmF1ZGlvIAorb3B0aW9ucyB0dW5lciBkZWJ1Zz0wIHR5cGU9OCAKK29wdGlvbnMgYnR0diAgY2FyZD0wIHJhZGlvPTAgcGxsPTAKKworCitGb3IgTW9yZSBJbmZvcm1hdGlvbiAoUlRGTSk6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxKSAgSW5mb3JtYXRpb24gb24ga2VybmVsIG1vZHVsZXM6IG1hbnVhbCBwYWdlcyBmb3IgaW5zbW9kIGFuZCBtb2Rwcm9iZS4KKworMikgIEluZm9ybWF0aW9uIG9uIFBuUCwgUlRGTSBtYW51YWwgcGFnZXMgZm9yIGlzYXBucC4KKworMykgIFNvdW5kLUhPV1RPIGFuZCBTb3VuZC1QbGF5aW5nLUhPV1RPLgorCis0KSAgT1NTJ3MgV1dXIHNpdGUgYXQgaHR0cDovL3d3dy5vcGVuc291bmQuY29tLgorCis1KSAgQWxsIHRoZSBmaWxlcyBpbiBEb2N1bWVudGF0aW9uL3NvdW5kLgorCis2KSAgVGhlIGNvbW1lbnRzIGFuZCBjb2RlIGluIGxpbnV4L2RyaXZlcnMvc291bmQuCisKKzcpICBUaGUgc25kY29uZmlnIGFuZCByaHNvdW5kIGRvY3VtZW50YXRpb24gZnJvbSBSZWQgSGF0LgorCis4KSAgVGhlIExpbnV4LXNvdW5kIG1haWxpbmcgbGlzdDogIHNvdW5kLWxpc3RAcmVkaGF0LmNvbS4KKworOSkgIEVubGlnaHRlbm1lbnQgZG9jdW1lbnRhdGlvbiAoZm9yIGluZm8gb24gZXNkKQorICAgIGh0dHA6Ly93d3cudHV4Lm9yZy9+cmljZHVkZS9Fc291bkQuaHRtbC4KKworMTApIEFMU0EgaG9tZSBwYWdlOiAgaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnLworCisKK0NvbnRhY3QgSW5mb3JtYXRpb246Cis9PT09PT09PT09PT09PT09PT09PQorV2FkZSBIYW1wdG9uOiAgKHdoYW1wdG9uQHN0YWZmbmV0LmNvbSkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTUFEMTYgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NQUQxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjVkYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTUFEMTYKQEAgLTAsMCArMSw1NiBAQAorKFRoaXMgcmVjaXBlIGhhcyBiZWVuIGVkaXRlZCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gc3ltYm9scywKKyBhbmQgY2hhbmdlIG92ZXIgdG8gbW9kcHJvYmUuY29uZiBmb3IgMi42KQorCitGcm9tOiBTaGF3IENhcnJ1dGhlcnMgPHNoYXdAc2hhd2MuZGVtb24uY28udWs+CisKK0kgaGF2ZSBiZWVuIHVzaW5nIG1hZDE2IHNvdW5kIGZvciBzb21lIHRpbWUgbm93IHdpdGggbm8gcHJvYmxlbXMsIGN1cnJlbnQKK2tlcm5lbCAyLjEuODkKKworbHNtb2Qgc2hvd3M6CisKK21hZDE2ICAgICAgICAgICAgICAgICAgIDUxNzYgICAwIAorc2IgICAgICAgICAgICAgICAgICAgICAyMjA0NCAgIDAgIFttYWQxNl0KK3VhcnQ0MDEgICAgICAgICAgICAgICAgIDU1NzYgICAwICBbbWFkMTYgc2JdCithZDE4NDggICAgICAgICAgICAgICAgIDE0MTc2ICAgMSAgW21hZDE2XQorc291bmQgICAgICAgICAgICAgICAgICA2MTkyOCAgIDAgIFttYWQxNiBzYiB1YXJ0NDAxIGFkMTg0OF0KKworLmNvbmZpZyBoYXM6CisKK0NPTkZJR19TT1VORD1tCitDT05GSUdfU09VTkRfQURMSUI9bQorQ09ORklHX1NPVU5EX01BRDE2PW0KK0NPTkZJR19TT1VORF9ZTTM4MTI9bQorCittb2Rwcm9iZS5jb25mIGhhczoKKworYWxpYXMgY2hhci1tYWpvci0xNC0qIG1hZDE2CitvcHRpb25zIHNiIG1hZDE2PTEKK29wdGlvbnMgbWFkMTYgaW89MHg1MzAgaXJxPTcgZG1hPTAgZG1hMTY9MSAgJiYgL3Vzci9sb2NhbC9iaW4vYXVtaXggLXcgMTUgLXAgMjAgLW0gMCAtMSAwIC0yIDAgLTMgMCAtaSAwCisKKworVG8gZ2V0IHRoZSBidWlsdCBpbiBtaXhlciB0byB3b3JrIHRoaXMgbmVlZHMgdG8gYmU6CisKK29wdGlvbnMgYWRsaWJfY2FyZCBpbz0weDM4OCAgICAgIyBGTSBzeW50aGVzaXplcgorb3B0aW9ucyBzYiBtYWQxNj0xCitvcHRpb25zIG1hZDE2IGlvPTB4NTMwIGlycT03IGRtYT0wIGRtYTE2PTEgbXB1X2lvPTgxNiBtcHVfaXJxPTUgJiYgL3Vzci9sb2NhbC9iaW4vYXVtaXggLXcgMTUgLXAgMjAgLW0gMCAtMSAwIC0yIDAgLTMgMCAtaSAwCisKK1RoZSBhZGRpdGlvbiBvZiB0aGUgIm1wdV9pbz04MTYgbXB1X2lycT01IiB0byB0aGUgbWFkMTYgb3B0aW9ucyBsaW5lIGlzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIG1hZDE2IG1vZHVsZSBpbiBhZGRpdGlvbiBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKK29wdGlvbjoJCQltZWFuaW5nOgkJCWRlZmF1bHQ6Citqb3lzdGljaz0wLDEgCQlkaXNhYmxlZCwgZW5hYmxlZCAJCWRpc2FibGVkCitjZHR5cGU9MHgwMCwweDAyLDB4MDQsCWRpc2FibGVkLCBTb255IENEVTMxQSwJCWRpc2FibGVkCisgICAgICAgMHgwNiwweDA4LDB4MGEgICBNaXRzdW1pLCBQYW5hc29uaWMsCisJCQlTZWNvbmRhcnkgSURFLCBQcmltYXJ5IElERSAKK2NkcG9ydD0weDM0MCwweDMyMCwJCQkJCTB4MzQwCisgICAgICAgMHgzMzAsMHgzNjAKK2NkaXJxPTAsMyw1LDcsOSwxMCwxMSAJZGlzYWJsZWQsIElSUTMsIC4uLiAJCWRpc2FibGVkCitjZGRtYT0wLDUsNiw3IAkJZGlzYWJsZWQsIERNQTUsIC4uLiAJCURNQTUgZm9yIE1pdHN1bWkgb3IgSURFCitjZGRtYT0wLDEsMiwzIAkJZGlzYWJsZWQsIERNQTEsIC4uLiAJCURNQTMgZm9yIFNvbnkgb3IgUGFuYXNvbmljCitvcGw0PTAsMSAJCU9QTDMsIE9QTDQgCQkJT1BMMwkKKworZm9yIG1vcmUgZGV0YWlscyBzZWUgbGludXgvZHJpdmVycy9zb3VuZC9tYWQxNi5jCisKK1J1aSBTb3VzYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTWFlc3RybyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01hZXN0cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4MGViMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01hZXN0cm8KQEAgLTAsMCArMSwxMjMgQEAKKwlBbiBPU1MvTGl0ZSBEcml2ZXIgZm9yIHRoZSBFU1MgTWFlc3RybyBmYW1pbHkgb2Ygc291bmQgY2FyZHMKKworCQkJWmFjaCBCcm93biwgRGVjZW1iZXIgMTk5OQorCitEcml2ZXIgU3RhdHVzIGFuZCBBdmFpbGFiaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciB3aWxsIGhvcGVmdWxseSBhbHdheXMgYmUgYXZhaWxhYmxlIGF0CisJaHR0cDovL3d3dy56YWJiby5uZXQvbWFlc3Ryby8KKworSSB3aWxsIHRyeSBhbmQgbWFpbnRhaW4gdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIKK2luIGJvdGggdGhlIHN0YWJsZSBhbmQgZGV2ZWxvcG1lbnQga2VybmVsIGxpbmVzLgorCitFU1MgTWFlc3RybyBDaGlwIEZhbWlseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIDMgbWFpbiB2YXJpYW50cyBvZiB0aGUgRVNTIE1hZXN0cm8gUENJIHNvdW5kIGNoaXAuICBUaGUgZmlyc3QKK2lzIHRoZSBNYWVzdHJvIDEuICBJdCB3YXMgb3JpZ2luYWxseSBwcm9kdWNlZCBieSBQbGF0Zm9ybSBUZWNoIGFzIHRoZQorJ0FHT0dPJy4gIEl0IGNhbiBiZSByZWNvZ25pemVkIGJ5IFBsYXRmb3JtIFRlY2gncyBQQ0kgSUQgMHgxMjg1IHdpdGgKKzB4MDEwMCBhcyB0aGUgZGV2aWNlIElELiAgSXQgd2FzIHB1dCBvbiBzb21lIHNvdW5kIGJvYXJkcyBhbmQgYSBmZXcgbGFwdG9wcy4gIAorRVNTIGJvdWdodCB0aGUgZGVzaWduIGFuZCBjbGVhbmVkIGl0IHVwIGFzIHRoZSBNYWVzdHJvIDIuICBUaGlzIHN0YXJ0cwordGhlaXIgbWFya2luZyB3aXRoIHRoZSBFU1MgdmVuZG9yIElEIDB4MTI1RCBhbmQgdGhlICd5ZWFyJyBkZXZpY2UgSURzLgorVGhlIE1hZXN0cm8gMiBjbGFpbXMgMHgxOTY4IHdoaWxlIHRoZSBNYWVzdHJvIDJlIGhhcyAweDE5NzguCisKK1RoZSB2YXJpb3VzIGZhbWlsaWVzIG9mIE1hZXN0cm8gYXJlIG1vc3RseSBpZGVudGljYWwgYXMgZmFyIGFzIHRoaXMgCitkcml2ZXIgaXMgY29uY2VybmVkLiAgSXQgZG9lc24ndCB0b3VjaCB0aGUgRFNQIHBhcnRzIHRoYXQgZGlmZmVyICh0aG91Z2gKK2l0IGNvdWxkIGZvciBGTSBzeW50aGVzaXMpLgorCitEcml2ZXIgT1NTIEJlaGF2aW9yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIE9TUyBkcml2ZXIgZXhwb3J0cyAvZGV2L21peGVyIGFuZCAvZGV2L2RzcCB0byBhcHBsaWNhdGlvbnMsIHdoaWNoCittb3N0bHkgYWRoZXJlIHRvIHRoZSBPU1Mgc3BlYy4gICBUaGlzIGRyaXZlciBkb2Vzbid0IHJlZ2lzdGVyIGl0c2VsZgord2l0aCAvZGV2L3NuZHN0YXQsIHNvIGRvbid0IGV4cGVjdCBpbmZvcm1hdGlvbiB0byBhcHBlYXIgdGhlcmUuCisKK1RoZSAvZGV2L2RzcCBkZXZpY2UgZXhwb3J0ZWQgYmVoYXZlcyBhbG1vc3QgYXMgZXhwZWN0ZWQuICBQbGF5YmFjayBpcworc3VwcG9ydGVkIGluIGFsbCB0aGUgdmFyaW91cyBsb3ZlbHkgZm9ybWF0cy4gIDgvMTZiaXQgc3RlcmVvL21vbm8gZnJvbQorOGtoeiB0byA0OGtoeiwgYW5kIG1tYXAoKWluZyBmb3IgcGxheWJhY2sgYmVoYXZlcy4gIENhcHR1cmUvcmVjb3JkaW5nCitpcyBsaW1pdGVkIGR1ZSB0byBvZGRpdGllcyB3aXRoIHRoZSBNYWVzdHJvIGhhcmR3YXJlLiAgT25lIGNhbiBvbmx5CityZWNvcmQgaW4gMTZiaXQgc3RlcmVvLiAgRm9yIHJlY29yZGluZyB0aGUgbWFlc3RybyB1c2VzIG5vbiBpbnRlcmxlYXZlZAorc3RlcmVvIGJ1ZmZlcnMgc28gdGhhdCBtbWFwKClpbmcgdGhlIGluY29taW5nIGRhdGEgZG9lcyBub3QgcmVzdWx0IGluCithIHJpbmcgYnVmZmVyIG9mIExSTFIgZGF0YS4gIG1tYXAoKWluZyBvZiB0aGUgcmVhZCBidWZmZXJzIGlzIHRoZXJlZm9yZQorZGlzYWxsb3dlZCB1bnRpbCB0aGlzIGNhbiBiZSBjbGVhbmVkIHVwLgorCisvZGV2L21peGVyIGlzIGFuIGludGVyZmFjZSB0byB0aGUgQUMnOTcgY29kZWMgb24gdGhlIE1hZXN0cm8uICBJdCBpcword29ydGggbm90aW5nIHRoYXQgdGhlcmUgYXJlIGEgdmFyaWV0eSBvZiBBQyc5N3MgdGhhdCBjYW4gYmUgd2lyZWQgdG8KK3RoZSBNYWVzdHJvLiAgV2hpY2ggaXMgdXNlZCBpcyBlbnRpcmVseSB1cCB0byB0aGUgaGFyZHdhcmUgaW1wbGVtZW50b3IuCitUaGlzIHNob3VsZCBvbmx5IGJlIHZpc2libGUgdG8gdGhlIHVzZXIgYnkgdGhlIHByZXNlbmNlLCBvciBsYWNrLCBvZgorJ0Jhc3MnIGFuZCAnVHJlYmxlJyBzbGlkZXJzIGluIHRoZSBtaXhlci4gIE5vdCBhbGwgQUMnOTdzIGhhdmUgdGhlbS4KKworVGhlIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgTUlESSBvciBGTSBwbGF5YmFjayBhdCB0aGUgbW9tZW50LiAgVHlwaWNhbGx5Cit0aGUgTWFlc3RybyBpcyB3aXJlZCB0byBhbiBNUFUgTUlESSBjaGlwLCBidXQgc29tZSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMKK2Rvbid0LiAgV2UgbmVlZCB0byBhc3NlbWJsZSBhIHdoaXRlIGxpc3Qgb2YgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zIHRoYXQKK2hhdmUgTUlESSB3aXJlZCBwcm9wZXJseSBiZWZvcmUgd2UgY2FuIGNsYWltIHRvIHN1cHBvcnQgaXQgc2FmZWx5LgorCitDb21waWxpbmcgYW5kIEluc3RhbGxpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoZSBkcml2ZXJzIGluY2x1c2lvbiBpbnRvIHRoZSBrZXJuZWwsIGNvbXBpbGluZyBhbmQgaW5zdGFsbGluZworaXMgdGhlIHNhbWUgYXMgbW9zdCBPU1MvTGl0ZSBtb2R1bGFyIHNvdW5kIGRyaXZlcnMuICBDb21waWxhdGlvbgorb2YgdGhlIGRyaXZlciBpcyBlbmFibGVkIHRocm91Z2ggdGhlIENPTkZJR19TT1VORF9NQUVTVFJPIHZhcmlhYmxlCitpbiB0aGUgY29uZmlnIHN5c3RlbS4gIAorCitJdCBtYXkgYmUgbW9kdWxhciBvciBzdGF0aWNhbGx5IGxpbmtlZC4gIElmIGl0IGlzIG1vZHVsYXIgaXQgc2hvdWxkIGJlCitpbnN0YWxsZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbW9kdWxlcyBmb3IgdGhlIGtlcm5lbCBvbiB0aGUgc3lzdGVtLgorVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSBpbiAvbGliL21vZHVsZXMvIHNvbWV3aGVyZS4gICdhbGlhcyBzb3VuZCBtYWVzdHJvJworc2hvdWxkIGFsc28gYmUgYWRkZWQgdG8geW91ciBtb2R1bGUgY29uZmlncyAodHlwaWNhbGx5IC9ldGMvY29uZi5tb2R1bGVzKQoraWYgeW91J3JlIHVzaW5nIG1vZHVsYXIgT1NTL0xpdGUgc291bmQgYW5kIHdhbnQgdG8gZGVmYXVsdCB0byB1c2luZyBhCittYWVzdHJvIGNoaXAuCisKK0FzIHRoaXMgaXMgYSBQQ0kgZGV2aWNlLCB0aGUgbW9kdWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5mb3JtZWQgb2YKK2FueSBJTyBvciBJUlEgcmVzb3VyY2VzIGl0IHNob3VsZCB1c2UsIGl0IGRldmluZXMgdGhlc2UgZnJvbSB0aGUKK3N5c3RlbS4gIFNvbWV0aW1lcywgb24gc3Vja3kgUENzLCB0aGUgQklPUyBmYWlscyB0byBhbGxvY2F0ZWQgcmVzb3VyY2VzCitmb3IgdGhlIG1hZXN0cm8uICBUaGlzIHdpbGwgcmVzdWx0IGluIGEgbWVzc2FnZSBsaWtlOgorCW1hZXN0cm86IFBDSSBzdWJzeXN0ZW0gcmVwb3J0cyBJUlEgMCwgdGhpcyBtaWdodCBub3QgYmUgY29ycmVjdC4KK2Zyb20gdGhlIGtlcm5lbC4gIFNob3VsZCB0aGlzIGhhcHBlbiB0aGUgc291bmQgY2hpcCBtb3N0IGxpa2VseSB3aWxsCitub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuICBUbyBzb2x2ZSB0aGlzIG9uZSBoYXMgdG8gZGlnIHRocm91Z2ggdGhlaXIgQklPUworKHR5cGljYWxseSBlbnRlcmVkIGJ5IGhpdHRpbmcgYSBob3Qga2V5IGF0IGJvb3QgdGltZSkgYW5kIGZpZ3VyZSBvdXQKK3doYXQgbWFnaWMgbmVlZHMgdG8gaGFwcGVuIHNvIHRoYXQgdGhlIEJJT1Mgd2lsbCByZXdhcmQgdGhlIG1hZXN0cm8gd2l0aAorYW4gSVJRLiAgVGhpcyBvcGVyYXRpb24gaXMgaW5jcmVkaWJseSBzeXN0ZW0gc3BlY2lmaWMsIHNvIHlvdSdyZSBvbiB5b3VyCitvd24uICBTb21ldGltZXMgdGhlIG1hZ2ljIGxpZXMgaW4gJ1BOUCBDYXBhYmxlIE9wZXJhdGluZyBTeXN0ZW0nIHNldHRpbmdzLgorCitUaGVyZSBhcmUgdmVyeSBmZXcgb3B0aW9ucyB0byB0aGUgZHJpdmVyLiAgT25lIGlzICdkZWJ1Zycgd2hpY2ggd2lsbCAKK3RlbGwgdGhlIGRyaXZlciB0byBwcmludCBtaW5pbWFsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhcyBpdCBydW5zLiAgVGhpcworY2FuIGJlIGNvbGxlY3RlZCB3aXRoICdkbWVzZycgb3IgdGhyb3VnaCB0aGUga2xvZ2QgZGFlbW9uLgorCitUaGUgb3RoZXIsIG1vcmUgaW50ZXJlc3Rpbmcgb3B0aW9uLCBpcyAnZHNwc19vcmRlcicuICBUeXBpY2FsbHkgYXQKK2luc3RhbGwgdGltZSB0aGUgZHJpdmVyIHdpbGwgb25seSByZWdpc3RlciBvbmUgYXZhaWxhYmxlIC9kZXYvZHNwIGRldmljZQorZm9yIGl0cyB1c2UuICBUaGUgJ2RzcHNfb3JkZXInIG1vZHVsZSBwYXJhbWV0ZXIgYWxsb3dzIGZvciBtb3JlIGRldmljZXMKK3RvIGJlIGFsbG9jYXRlZCwgYXMgYSBwb3dlciBvZiB0d28uICBVcCB0byA0IGRldmljZXMgY2FuIGJlIHJlZ2lzdGVyZWQKKyggZHNwc19vcmRlcj0yICkuICBUaGVzZSBkZXZpY2VzIGFjdCBhcyBmdWxseSBkaXN0aW5jdCB1bml0cyBhbmQgdXNlCitzZXBhcmF0ZSBjaGFubmVscyBpbiB0aGUgbWFlc3Ryby4KKworUG93ZXIgTWFuYWdlbWVudAorLS0tLS0tLS0tLS0tLS0tLQorCitBcyBvZiB2ZXJzaW9uIDAuMTQsIHRoaXMgZHJpdmVyIGhhcyBhIG1pbmltYWwgdW5kZXJzdGFuZGluZyBvZiBQQ0kKK1Bvd2VyIE1hbmFnZW1lbnQuICBJZiBpdCBmaW5kcyBhIHZhbGlkIHBvd2VyIG1hbmFnZW1lbnQgY2FwYWJpbGl0eQorb24gdGhlIFBDSSBkZXZpY2UgaXQgd2lsbCBhdHRlbXB0IHRvIHVzZSB0aGUgcG93ZXIgbWFuYWdlbWVudAorZnVuY3Rpb25zIG9mIHRoZSBtYWVzdHJvLiAgSXQgd2lsbCBvbmx5IGRvIHRoaXMgb24gTWFlc3RybyAyRXMgYW5kCitvbmx5IG9uIG1hY2hpbmVzIHRoYXQgYXJlIGtub3duIHRvIGZ1bmN0aW9uIHdlbGwuICBZb3UgY2FuCitmb3JjZSB0aGUgdXNlIG9mIHBvd2VyIG1hbmFnZW1lbnQgYnkgc2V0dGluZyB0aGUgJ3VzZV9wbScgbW9kdWxlCitvcHRpb24gdG8gMSwgb3IgY2FuIGRpc2FibGUgaXQgZW50aXJlbHkgYnkgc2V0dGluZyBpdCB0byAwLgorCitXaGVuIHVzaW5nIHBvd2VyIG1hbmFnZW1lbnQsIHRoZSBkcml2ZXIgZG9lcyBhIGZldyB0aGluZ3MKK2RpZmZlcmVudGx5LiAgSXQgd2lsbCBrZWVwIHRoZSBjaGlwIGluIGEgbG93ZXIgcG93ZXIgbW9kZQord2hlbiB0aGUgbW9kdWxlIGlzIGluc2VydGVkIGJ1dCAvZGV2L2RzcCBpcyBub3Qgb3Blbi4gIFRoaXMKK2FsbG93cyB0aGUgbWl4ZXIgdG8gZnVuY3Rpb24gYnV0IHR1cm5zIG9mZiB0aGUgY2xvY2tzCitvbiBvdGhlciBwYXJ0cyBvZiB0aGUgY2hpcC4gIFdoZW4gL2Rldi9kc3AgaXMgb3BlbmVkIHRoZSBjaGlwCitpcyBicm91Z2h0IGludG8gZnVsbCBwb3dlciBtb2RlLCBhbmQgYnJvdWdodCBiYWNrIGRvd24KK3doZW4gaXQgaXMgY2xvc2VkLiAgSXQgYWxzbyBwb3dlcnMgZG93biB0aGUgY2hpcCBlbnRpcmVseQord2hlbiB0aGUgbW9kdWxlIGlzIHJlbW92ZWQgb3IgdGhlIG1hY2hpbmUgaXMgc2h1dGRvd24uICBUaGlzCitjYW4gaGF2ZSBub25vYnZpb3VzIGNvbnNlcXVlbmNlcy4gIENEIGF1ZGlvIG1heSBub3Qgd29yaworYWZ0ZXIgYSBwb3dlciBtYW5hZ2luZyBkcml2ZXIgaXMgcmVtb3ZlZC4gIEFsc28sIHNvZnR3YXJlIHRoYXQKK2RvZXNuJ3QgdW5kZXJzdGFuZCBwb3dlciBtYW5hZ2VtZW50IG1heSBub3QgYmUgYWJsZSB0byB0YWxrCit0byB0aGUgcG93ZXJlZCBkb3duIGNoaXAgdW50aWwgdGhlIG1hY2hpbmUgZ29lcyB0aHJvdWdoIGEgaGFyZAorcmVib290IHRvIGJyaW5nIGl0IGJhY2suCisKKy4uIG1vcmUgZGV0YWlscyAuLgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RyaXZlcnMvc291bmQvbWFlc3Ryby5jIGNvbnRhaW5zIGNvbW1lbnRzIHRoYXQgaG9wZWZ1bGx5IGV4cGxhaW4KK3RoZSBtYWVzdHJvIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTWFlc3RybzMgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NYWVzdHJvMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTEzNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTWFlc3RybzMKQEAgLTAsMCArMSw5MiBAQAorCUFuIE9TUy9MaXRlIERyaXZlciBmb3IgdGhlIEVTUyBNYWVzdHJvMyBmYW1pbHkgb2Ygc291bmQgY2hpcHMKKworCQkJWmFjaCBCcm93biwgSmFudWFyeSAyMDAxCisKK0RyaXZlciBTdGF0dXMgYW5kIEF2YWlsYWJpbGl0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyIHdpbGwgaG9wZWZ1bGx5IGFsd2F5cyBiZSBhdmFpbGFibGUgYXQKKwlodHRwOi8vd3d3LnphYmJvLm5ldC9tYWVzdHJvMy8KKworSSB3aWxsIHRyeSBhbmQgbWFpbnRhaW4gdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIKK2luIGJvdGggdGhlIHN0YWJsZSBhbmQgZGV2ZWxvcG1lbnQga2VybmVsIGxpbmVzLgorCitIaXN0b3JpY2FsbHkgSSd2ZSBzdWNrZWQgcHJldHR5IGhhcmQgYXQgYWN0dWFsbHkgZG9pbmcgdGhhdCwgaG93ZXZlci4KKworRVNTIE1hZXN0cm8zIENoaXAgRmFtaWx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ01hZXN0cm8zJyBpcyBtdWNoIGxpa2UgdGhlIE1hZXN0cm8yIGNoaXAuICBUaGUgbm90ZWQgaW1wcm92ZW1lbnQKK2lzIHRoZSByZW1vdmFsIG9mIHRoZSBzaWxpY29uIGluIHRoZSAnMicgdGhhdCBkaWQgUENNIG1peGluZy4gIEFsbCB0aGF0Cit3b3JrIGlzIG5vdyBkb25lIHRocm91Z2ggYSBjdXN0b20gRFNQIGNhbGxlZCB0aGUgQVNTUCwgdGhlIEFzeW5jaHJvbnVzCitTcGVjaWZpYyBTaWduYWwgUHJvY2Vzc29yLgorCitUaGUgJ0FsbGVncm8nIGlzIGEgYmFieSB2ZXJzaW9uIG9mIHRoZSBNYWVzdHJvMy4gIEknbSBub3QgZW50aXJlbHkgY2xlYXIKK29uIHRoZSBleHRlbnQgb2YgdGhlIGRpZmZlcmVuY2VzLCBidXQgdGhlIGRyaXZlciBzdXBwb3J0cyB0aGVtIGJvdGggOikKKworVGhlICdBbGxlZ3JvJyBzaG93cyB1cCBhcyBQQ0kgSUQgMHgxOTg4IGFuZCB0aGUgTWFlc3RybzMgYXMgMHgxOTk4LAorYm90aCB1bmRlciBFU1MncyB2ZW5kb3IgSUQgb2YgMHgxMjVELiAgVGhlIE1hZXN0cm8zIGNhbiBhbHNvIHNob3cgdXAgYXMKKzB4MTk5YSB3aGVuIGhhcmR3YXJlIHN0cmFwcGluZyBpcyB1c2VkLgorCitUaGUgY2hpcCBjYW4gYWxzbyBhY3QgYXMgYSBtdWx0aSBmdW5jdGlvbiBkZXZpY2UuICBUaGUgbW9kZW0gSURzIGZvbGxvdwordGhlIGF1ZGlvIG11bHRpbWVkaWEgZGV2aWNlIElEcy4gIChzbyB0aGUgbW9kZW0gcGFydCBvZiBhbiBBbGxlZ3JvIHNob3dzCit1cCBhcyAweDE5ODkpCisKK0RyaXZlciBPU1MgQmVoYXZpb3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgT1NTIGRyaXZlciBleHBvcnRzIC9kZXYvbWl4ZXIgYW5kIC9kZXYvZHNwIHRvIGFwcGxpY2F0aW9ucywgd2hpY2gKK21vc3RseSBhZGhlcmUgdG8gdGhlIE9TUyBzcGVjLiAgIFRoaXMgZHJpdmVyIGRvZXNuJ3QgcmVnaXN0ZXIgaXRzZWxmCit3aXRoIC9kZXYvc25kc3RhdCwgc28gZG9uJ3QgZXhwZWN0IGluZm9ybWF0aW9uIHRvIGFwcGVhciB0aGVyZS4KKworVGhlIC9kZXYvZHNwIGRldmljZSBleHBvcnRlZCBiZWhhdmVzIGFzIGV4cGVjdGVkLiAgUGxheWJhY2sgaXMKK3N1cHBvcnRlZCBpbiBhbGwgdGhlIHZhcmlvdXMgbG92ZWx5IGZvcm1hdHMuICA4LzE2Yml0IHN0ZXJlby9tb25vIGZyb20KKzhraHogdG8gNDhraHosIHdpdGggYm90aCByZWFkKCkvd3JpdGUoKSwgYW5kIG1tYXAoKS4KKworL2Rldi9taXhlciBpcyBhbiBpbnRlcmZhY2UgdG8gdGhlIEFDJzk3IGNvZGVjIG9uIHRoZSBNYWVzdHJvMy4gIEl0IGlzCit3b3J0aCBub3RpbmcgdGhhdCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIEFDJzk3cyB0aGF0IGNhbiBiZSB3aXJlZCB0bwordGhlIE1hZXN0cm8zLiAgV2hpY2ggaXMgdXNlZCBpcyBlbnRpcmVseSB1cCB0byB0aGUgaGFyZHdhcmUgaW1wbGVtZW50b3IuCitUaGlzIHNob3VsZCBvbmx5IGJlIHZpc2libGUgdG8gdGhlIHVzZXIgYnkgdGhlIHByZXNlbmNlLCBvciBsYWNrLCBvZgorJ0Jhc3MnIGFuZCAnVHJlYmxlJyBzbGlkZXJzIGluIHRoZSBtaXhlci4gIE5vdCBhbGwgQUMnOTdzIGhhdmUgdGhlbS4KK1RoZSBBbGxlZ3JvIGhhcyBhbiBvbmNoaXAgQUMnOTcuCisKK1RoZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IE1JREkgb3IgRk0gcGxheWJhY2sgYXQgdGhlIG1vbWVudC4KKworQ29tcGlsaW5nIGFuZCBJbnN0YWxsaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgZHJpdmVycyBpbmNsdXNpb24gaW50byB0aGUga2VybmVsLCBjb21waWxpbmcgYW5kIGluc3RhbGxpbmcKK2lzIHRoZSBzYW1lIGFzIG1vc3QgT1NTL0xpdGUgbW9kdWxhciBzb3VuZCBkcml2ZXJzLiAgQ29tcGlsYXRpb24KK29mIHRoZSBkcml2ZXIgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZSBDT05GSUdfU09VTkRfTUFFU1RSTzMgdmFyaWFibGUKK2luIHRoZSBjb25maWcgc3lzdGVtLiAgCisKK0l0IG1heSBiZSBtb2R1bGFyIG9yIHN0YXRpY2FsbHkgbGlua2VkLiAgSWYgaXQgaXMgbW9kdWxhciBpdCBzaG91bGQgYmUKK2luc3RhbGxlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBtb2R1bGVzIGZvciB0aGUga2VybmVsIG9uIHRoZSBzeXN0ZW0uCitUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIGluIC9saWIvbW9kdWxlcy8gc29tZXdoZXJlLiAgJ2FsaWFzIHNvdW5kLXNsb3QtMAorbWFlc3RybzMnIHNob3VsZCBhbHNvIGJlIGFkZGVkIHRvIHlvdXIgbW9kdWxlIGNvbmZpZ3MgKHR5cGljYWxseQorL2V0Yy9tb2Rwcm9iZS5jb25mKSBpZiB5b3UncmUgdXNpbmcgbW9kdWxhciBPU1MvTGl0ZSBzb3VuZCBhbmQgd2FudCB0bworZGVmYXVsdCB0byB1c2luZyBhIG1hZXN0cm8zIGNoaXAuCisKK1RoZXJlIGFyZSB2ZXJ5IGZldyBvcHRpb25zIHRvIHRoZSBkcml2ZXIuICBPbmUgaXMgJ2RlYnVnJyB3aGljaCB3aWxsIAordGVsbCB0aGUgZHJpdmVyIHRvIHByaW50IG1pbmltYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFzIGl0IHJ1bnMuICBUaGlzCitjYW4gYmUgY29sbGVjdGVkIHdpdGggJ2RtZXNnJyBvciB0aHJvdWdoIHRoZSBrbG9nZCBkYWVtb24uCisKK09uZSBpcyAnZXh0ZXJuYWxfYW1wJywgd2hpY2ggdGVsbHMgdGhlIGRyaXZlciB0byBhdHRlbXB0IHRvIGVuYWJsZQorYW4gZXh0ZXJuYWwgYW1wbGlmaWVyLiAgVGhpcyBkZWZhdWx0cyB0byAnMScsIHlvdSBjYW4gdGVsbCB0aGUgZHJpdmVyCitub3QgdG8gYm90aGVyIGVuYWJsaW5nIHN1Y2ggYW4gYW1wbGlmaWVyIGJ5IHNldHRpbmcgaXQgdG8gJzAnLgorCitBbmQgdGhlIGxhc3QgaXMgJ2dwaW9fcGluJywgd2hpY2ggdGVsbHMgdGhlIGRyaXZlciB3aGljaCBHUElPIHBpbiBudW1iZXIKK3RoZSBleHRlcm5hbCBhbXAgdXNlcyAoMC0xNSksIFRoZSBBbGxlZ3JvIHVzZXMgOCBieSBkZWZhdWx0LCBhbGwgb3RoZXJzIDEuCitJZiBldmVyeXRoaW5nIGxvYWRzIGNvcnJlY3RseSBhbmQgc2VlbXMgdG8gYmUgd29ya2luZyBidXQgeW91IGdldCBubyBzb3VuZCwgCit0cnkgdHdlYWtpbmcgdGhpcyB2YWx1ZS4gCisKK1N5c3RlbXMga25vd24gdG8gbmVlZCBhIGRpZmZlcmVudCB2YWx1ZQorICAgICAgICBQYW5hc29uaWMgVG91Z2hCb29rIENGLTcyOiBncGlvX3Bpbj0xMyAKKworUG93ZXIgTWFuYWdlbWVudAorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBoYXMgYSBtaW5pbWFsIHVuZGVyc3RhbmRpbmcgb2YgUENJIFBvd2VyIE1hbmFnZW1lbnQuICBJdCB3aWxsCit0cnkgYW5kIHBvd2VyIGRvd24gdGhlIGNoaXAgd2hlbiB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZCwgYW5kIHBvd2VyCitpdCB1cCB3aXRoIGl0IGlzIHJlc3VtZWQuICBJdCB3aWxsIGFsc28gdHJ5IGFuZCBwb3dlciBkb3duIHRoZSBjaGlwCit3aGVuIHRoZSBtYWNoaW5lIGlzIHNodXQgZG93bi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL011bHRpU291bmQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YTE4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kCkBAIC0wLDAgKzEsMTEzNyBAQAorIyEgL2Jpbi9zaAorIworIyAgVHVydGxlIEJlYWNoIE11bHRpU291bmQgRHJpdmVyIE5vdGVzCisjICAtLSBBbmRyZXcgVmVsaWF0aCA8YW5kcmV3dHZAdXNhLm5ldD4KKyMKKyMgIExhc3QgdXBkYXRlOiAgICAgICAgICAgICAgICAgICAgICBTZXB0ZW1iZXIgMTAsIDE5OTgKKyMgIENvcnJlc3BvbmRpbmcgbXNuZCBkcml2ZXI6ICAgICAgICAwLjguMworIworIyAqKiBUaGlzIGZpbGUgaXMgYSBSRUFETUUgKHRvcCBwYXJ0KSBhbmQgc2hlbGwgYXJjaGl2ZSAoYm90dG9tIHBhcnQpLgorIyAgICBUaGUgY29ycmVzcG9uZGluZyBhcmNoaXZlZCB1dGlsaXR5IHNvdXJjZXMgY2FuIGJlIHVucGFja2VkIGJ5CisjICAgIHJ1bm5pbmcgYHNoIE11bHRpU291bmQnICh0aGUgdXRpbGl0aWVzIGFyZSBvbmx5IG5lZWRlZCBmb3IgdGhlCisjICAgIFBpbm5hY2xlIGFuZCBGaWppIGNhcmRzKS4gKioKKyMKKyMKKyMgIC09LT0tIEdldHRpbmcgRmlybXdhcmUgLT0tPS0KKyMgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgU2VlIHRoZSBzZWN0aW9uIGBPYnRhaW5pbmcgYW5kIENyZWF0aW5nIEZpcm13YXJlIEZpbGVzJyBpbiB0aGlzCisjICBkb2N1bWVudCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIG9idGFpbmluZyB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlCisjICBmaWxlcy4KKyMgIAorIyAgCisjICBTdXBwb3J0ZWQgRmVhdHVyZXMKKyMgIH5+fn5+fn5+fn5+fn5+fn5+fgorIyAgCisjICBDdXJyZW50bHksIGZ1bGwtZHVwbGV4IGRpZ2l0YWwgYXVkaW8gKC9kZXYvZHNwIG9ubHksIC9kZXYvYXVkaW8gaXMKKyMgIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlKSBhbmQgbWl4ZXIgZnVuY3Rpb25hbGl0eSAoL2Rldi9taXhlcikgYXJlCisjICBzdXBwb3J0ZWQgKG1lbW9yeSBtYXBwZWQgZGlnaXRhbCBhdWRpbyBpcyBub3QgeWV0IHN1cHBvcnRlZCkuCisjICBEaWdpdGFsIHRyYW5zZmVycyBhbmQgbW9uaXRvcmluZyBjYW4gYmUgZG9uZSBhcyB3ZWxsIGlmIHlvdSBoYXZlCisjICB0aGUgZGlnaXRhbCBkYXVnaHRlcmJvYXJkIChzZWUgdGhlIHNlY3Rpb24gb24gdXNpbmcgdGhlIFMvUERJRiBwb3J0CisjICBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisjCisjICBTdXBwb3J0IGZvciB0aGUgVHVydGxlIEJlYWNoIE11bHRpU291bmQgSHVycmljYW5lIGFyY2hpdGVjdHVyZSBpcworIyAgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBtb2R1bGVzICh0aGVzZSBjYW4gYWxzbyBvcGVyYXRlIGNvbXBpbGVkCisjICBpbnRvIHRoZSBrZXJuZWwpOgorIyAgCisjICBtc25kICAgICAgICAgICAgICAgLSBNdWx0aVNvdW5kIGJhc2UgKHJlcXVpcmVzIHNvdW5kY29yZSkKKyMKKyMgIG1zbmRfY2xhc3NpYyAgICAgICAtIEJhc2UgYXVkaW8vbWl4ZXIgc3VwcG9ydCBmb3IgQ2xhc3NpYywgTW9uZXRlcnkgYW5kCisjICAgICAgICAgICAgICAgICAgICAgICBUYWhpdGkgY2FyZHMKKyMKKyMgIG1zbmRfcGlubmFjbGUgICAgICAtIEJhc2UgYXVkaW8vbWl4ZXIgc3VwcG9ydCBmb3IgUGlubmFjbGUgYW5kIEZpamkgY2FyZHMKKyMgIAorIyAgCisjICBJbXBvcnRhbnQgTm90ZXMgLSBSZWFkIEJlZm9yZSBVc2luZworIyAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgVGhlIGZpcm13YXJlIGZpbGVzIGFyZSBub3QgaW5jbHVkZWQgKG1heSBjaGFuZ2UgaW4gZnV0dXJlKS4gIFlvdQorIyAgbXVzdCBvYnRhaW4gdGhlc2UgaW1hZ2VzIGZyb20gVHVydGxlIEJlYWNoICh0aGV5IGFyZSBpbmNsdWRlZCBpbgorIyAgdGhlIE11bHRpU291bmQgRGV2ZWxvcG1lbnQgS2l0cyksIGFuZCBwbGFjZSB0aGVtIGluIC9ldGMvc291bmQgZm9yCisjICBleGFtcGxlLCBhbmQgZ2l2ZSB0aGUgZnVsbCBwYXRocyBpbiB0aGUgTGludXggY29uZmlndXJhdGlvbi4gIElmCisjICB5b3UgYXJlIGNvbXBpbGluZyBpbiBzdXBwb3J0IGZvciB0aGUgTXVsdGlTb3VuZCBkcml2ZXIgcmF0aGVyIHRoYW4KKyMgIHVzaW5nIGl0IGFzIGEgbW9kdWxlLCB0aGVzZSBmaXJtd2FyZSBmaWxlcyBtdXN0IGJlIGFjY2Vzc2libGUKKyMgIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24uCisjCisjICBQbGVhc2Ugbm90ZSB0aGVzZSBmaWxlcyBtdXN0IGJlIGJpbmFyeSBmaWxlcywgbm90IGFzc2VtYmxlci4gIFNlZQorIyAgdGhlIHNlY3Rpb24gbGF0ZXIgaW4gdGhpcyBkb2N1bWVudCBmb3IgaW5zdHJ1Y3Rpb25zIHRvIG9idGFpbiB0aGVzZQorIyAgZmlsZXMuCisjICAKKyMgIAorIyAgQ29uZmlndXJpbmcgQ2FyZCBSZXNvdXJjZXMKKyMgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjCisjICAqKiBUaGlzIHNlY3Rpb24gaXMgdmVyeSBpbXBvcnRhbnQsIGFzIHlvdXIgY2FyZCBtYXkgbm90IHdvcmsgYXQgYWxsCisjICAgICBvciB5b3VyIG1hY2hpbmUgbWF5IGNyYXNoIGlmIHlvdSBkbyBub3QgZG8gdGhpcyBjb3JyZWN0bHkuICoqCisjCisjICAqIENsYXNzaWMvTW9udGVyZXkvVGFoaXRpCisjICAKKyMgIFRoZXNlIGNhcmRzIGFyZSBjb25maWd1cmVkIHRocm91Z2ggdGhlIGRyaXZlciBtc25kX2NsYXNzaWMuICBZb3UgbXVzdAorIyAga25vdyB0aGUgaW8gcG9ydCwgdGhlbiB0aGUgZHJpdmVyIHdpbGwgc2VsZWN0IHRoZSBpcnEgYW5kIG1lbW9yeSByZXNvdXJjZXMKKyMgIG9uIHRoZSBjYXJkLiAgSXQgaXMgdXAgdG8geW91IHRvIGtub3cgaWYgdGhlc2UgYXJlIGZyZWUgbG9jYXRpb25zIG9yIG5vdywKKyMgIGEgY29uZmxpY3QgY2FuIGxvY2sgdGhlIG1hY2hpbmUgdXAuCisjCisjICAqIFBpbm5hY2xlL0ZpamkKKyMKKyMgIFRoZSBQaW5uYWNsZSBhbmQgRmlqaSBjYXJkcyBoYXZlIGFuIGV4dHJhIGNvbmZpZyBwb3J0LCBlaXRoZXIKKyMgIDB4MjUwLCAweDI2MCBvciAweDI3MC4gIFRoaXMgcG9ydCBjYW4gYmUgZGlzYWJsZWQgdG8gaGF2ZSB0aGUgY2FyZAorIyAgY29uZmlndXJlZCBzdHJpY3RseSB0aHJvdWdoIFBuUCwgaG93ZXZlciB5b3UgbG9zZSB0aGUgYWJpbGl0eSB0bworIyAgYWNjZXNzIHRoZSBJREUgY29udHJvbGxlciBhbmQgam95c3RpY2sgZGV2aWNlcyBvbiB0aGlzIGNhcmQgd2hlbgorIyAgdXNpbmcgUG5QLiAgVGhlIGluY2x1ZGVkIHBpbm5hY2xlY2ZnIHByb2dyYW0gaW4gdGhpcyBzaGVsbCBhcmNoaXZlCisjICBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGNhcmQgaW4gbm9uLVBuUCBtb2RlLCBhbmQgaW4gUG5QIG1vZGUKKyMgIHlvdSBjYW4gdXNlIGlzYXBucHRvb2xzLiAgVGhlc2UgYXJlIGRlc2NyaWJlZCBicmllZmx5IGhlcmUuCisjCisjICBwaW5uYWNsZWNmZyBpcyBub3QgcmVxdWlyZWQ7IHlvdSBjYW4gdXNlIHRoZSBtc25kX3Bpbm5hY2xlIG1vZHVsZQorIyAgdG8gZnVsbHkgY29uZmlndXJlIHRoZSBjYXJkIGFzIHdlbGwuICBIb3dldmVyLCBwaW5uYWNsZWNmZyBjYW4gYmUKKyMgIHVzZWQgdG8gY2hhbmdlIHRoZSByZXNvdXJjZSB2YWx1ZXMgb2YgYSBwYXJ0aWN1bGFyIGRldmljZSBhZnRlciB0aGUKKyMgIG1zbmRfcGlubmFjbGUgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZC4gIElmIHlvdSBhcmUgY29tcGlsaW5nIHRoZQorIyAgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IG11c3Qgc2V0IHRoZXNlIHZhbHVlcyBkdXJpbmcgY29tcGlsZQorIyAgdGltZSwgaG93ZXZlciBvdGhlciBwZXJpcGhlcmFsIHJlc291cmNlIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCB3aXRoCisjICB0aGUgcGlubmFjbGVjZmcgcHJvZ3JhbSBhZnRlciB0aGUga2VybmVsIGlzIGxvYWRlZC4KKyMKKyMKKyMgICoqKiBQblAgbW9kZQorIyAgCisjICBVc2UgcG5wZHVtcCB0byBvYnRhaW4gYSBzYW1wbGUgY29uZmlndXJhdGlvbiBpZiB5b3UgY2FuOyBJIHdhcyBhYmxlCisjICB0byBvYnRhaW4gb25lIHdpdGggdGhlIGNvbW1hbmQgYHBucGR1bXAgMSAweDIwMycgLS0gdGhpcyBtYXkgdmFyeQorIyAgZm9yIHlvdSAocnVubmluZyBwbnBkdW1wIGJ5IGl0c2VsZiBkaWQgbm90IHdvcmsgZm9yIG1lKS4gIFRoZW4sCisjICBlZGl0IHRoaXMgZmlsZSBhbmQgdXNlIGlzYXBucCB0byB1bmNvbW1lbnQgYW5kIHNldCB0aGUgY2FyZCB2YWx1ZXMuCisjICBVc2UgdGhlc2UgdmFsdWVzIHdoZW4gaW5zZXJ0aW5nIHRoZSBtc25kX3Bpbm5hY2xlIG1vZHVsZS4gIFVzaW5nCisjICB0aGlzIG1ldGhvZCwgeW91IGNhbiBzZXQgdGhlIHJlc291cmNlcyBmb3IgdGhlIERTUCBhbmQgdGhlIEt1cnp3ZWlsCisjICBzeW50aCAoUGlubmFjbGUpLiAgU2luY2UgTGludXggZG9lcyBub3QgZGlyZWN0bHkgc3VwcG9ydCBQblAKKyMgIGRldmljZXMsIHlvdSBtYXkgaGF2ZSBkaWZmaWN1bHR5IHdoZW4gdXNpbmcgdGhlIGNhcmQgaW4gUG5QIG1vZGUKKyMgIHdoZW4gaXQgdGhlIGRyaXZlciBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuICBVc2luZyBub24tUG5QIG1vZGUKKyMgIGlzIHByZWZlcmFibGUgaW4gdGhpcyBjYXNlLgorIworIyAgSGVyZSBpcyBhbiBleGFtcGxlIG15cGlubmFjbGUuY29uZiBmb3IgaXNhcG5wIHRoYXQgc2V0cyB0aGUgY2FyZCB0bworIyAgaW8gYmFzZSAweDIxMCwgaXJxIDUgYW5kIG1lbSAweGQ4MDAwLCBhbmQgYWxzbyBzZXRzIHRoZSBLdXJ6d2VpbAorIyAgc3ludGggdG8gMHgzMzAgYW5kIGlycSA5IChtYXkgbmVlZCBlZGl0aW5nIGZvciB5b3VyIHN5c3RlbSk6CisjCisjICAoUkVBRFBPUlQgMHgwMjAzKQorIyAgKENTTiAyKQorIyAgKElERU5USUZZICopCisjICAKKyMgICMgRFNQCisjICAoQ09ORklHVVJFIEJWSjA0NDAvLTEgKExEIDAKKyMgICAgICAgICAgKElOVCAwIChJUlEgNSAoTU9ERSArRSkpKSAoSU8gMCAoQkFTRSAweDAyMTApKSAoTUVNIDAgKEJBU0UgMHgwZDgwMDApKQorIyAgICAgICAgICAoQUNUIFkpKSkKKyMgIAorIyAgIyBLdXJ6d2VpbCBTeW50aCAoUGlubmFjbGUgT25seSkKKyMgIChDT05GSUdVUkUgQlZKMDQ0MC8tMSAoTEQgMQorIyAgICAgICAgICAoSU8gMCAoQkFTRSAweDAzMzApKSAoSU5UIDAgKElSUSA5IChNT0RFICtFKSkpCisjICAgICAgICAgIChBQ1QgWSkpKQorIyAgCisjICAoV0FJVEZPUktFWSkKKyMKKyMKKyMgICoqKiBOb24tUG5QIG1vZGUKKyMgIAorIyAgVGhlIHNlY29uZCB3YXkgaXMgYnkgcnVubmluZyB0aGUgY2FyZCBpbiBub24tUG5QIG1vZGUuICBUaGlzCisjICBhY3R1YWxseSBoYXMgc29tZSBhZHZhbnRhZ2VzIGluIHRoYXQgeW91IGNhbiBhY2Nlc3Mgc29tZSBvdGhlcgorIyAgZGV2aWNlcyBvbiB0aGUgY2FyZCwgc3VjaCBhcyB0aGUgam95c3RpY2sgYW5kIElERSBjb250cm9sbGVyLiAgVG8KKyMgIGNvbmZpZ3VyZSB0aGUgY2FyZCwgdW5wYWNrIHRoaXMgc2hlbGwgYXJjaGl2ZSBhbmQgYnVpbGQgdGhlCisjICBwaW5uYWNsZWNmZyBwcm9ncmFtLiAgVXNpbmcgdGhpcyBwcm9ncmFtLCB5b3UgY2FuIGFzc2lnbiB0aGUKKyMgIHJlc291cmNlIHZhbHVlcyB0byB0aGUgY2FyZCdzIGRldmljZXMsIG9yIGRpc2FibGUgdGhlIGRldmljZXMuICBBcworIyAgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgcGlubmFjbGVjZmcsIHlvdSBjYW4gc3BlY2lmeSBtYW55IG9mIHRoZQorIyAgY29uZmlndXJhdGlvbiB2YWx1ZXMgd2hlbiBsb2FkaW5nIHRoZSBtc25kX3Bpbm5hY2xlIG1vZHVsZSAob3IKKyMgIGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbiB3aGVuIGNvbXBpbGluZyB0aGUgZHJpdmVyIGludG8gdGhlCisjICBrZXJuZWwpLgorIworIyAgSWYgeW91IHNwZWNpZnkgY2ZnPTB4MjUwIGZvciB0aGUgbXNuZF9waW5uYWNsZSBtb2R1bGUsIGl0CisjICBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSB0aGUgY2FyZCB0byB0aGUgZ2l2ZW4gaW8sIGlycSBhbmQgbWVtb3J5CisjICB2YWx1ZXMgdXNpbmcgdGhhdCBjb25maWcgcG9ydCAodGhlIGNvbmZpZyBwb3J0IGlzIGp1bXBlciBzZWxlY3RhYmxlCisjICBvbiB0aGUgY2FyZCB0byAweDI1MCwgMHgyNjAgb3IgMHgyNzApLgorIworIyAgU2VlIHRoZSBgbXNuZF9waW5uYWNsZSBBZGRpdGlvbmFsIE9wdGlvbnMnIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUKKyMgIGluZm9ybWF0aW9uIG9uIHRoZXNlIHBhcmFtZXRlcnMgKGFsc28sIGlmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIKKyMgIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCwgdGhlc2UgZXh0cmEgcGFyYW1ldGVycyBjYW4gYmUgdXNlZnVsCisjICBoZXJlKS4KKyMKKyMKKyMgKiogSXQgaXMgdmVyeSBlYXN5IHRvIGNhdXNlIHByb2JsZW1zIGluIHlvdXIgbWFjaGluZSBpZiB5b3UgY2hvb3NlIGEKKyMgICAgcmVzb3VyY2UgdmFsdWUgd2hpY2ggaXMgaW5jb3JyZWN0LiAqKgorIyAgCisjCisjICBFeGFtcGxlcworIyAgfn5+fn5+fn4KKyMgIAorIyAgKiBNdWx0aVNvdW5kIENsYXNzaWMvTW9udGVyZXkvVGFoaXRpOgorIyAgCisjICBtb2Rwcm9iZSBzb3VuZGNvcmUKKyMgIGluc21vZCBtc25kCisjICBpbnNtb2QgbXNuZF9jbGFzc2ljIGlvPTB4MjkwIGlycT03IG1lbT0weGQwMDAwCisjICAKKyMgICogTXVsdGlTb3VuZCBQaW5uYWNsZSBpbiBQblAgbW9kZToKKyMgIAorIyAgbW9kcHJvYmUgc291bmRjb3JlCisjICBpbnNtb2QgbXNuZAorIyAgaXNhcG5wIG15cGlubmFjbGUuY29uZgorIyAgaW5zbW9kIG1zbmRfcGlubmFjbGUgaW89MHgyMTAgaXJxPTUgbWVtPTB4ZDgwMDAgPC0tIG1hdGNoIG15cGlubmFjbGUuY29uZiB2YWx1ZXMKKyMgIAorIyAgKiBNdWx0aVNvdW5kIFBpbm5hY2xlIGluIG5vbi1QblAgbW9kZSAocmVwbGFjZSAweDI1MCB3aXRoIHlvdXIgY29uZmlndXJhdGlvbiBwb3J0LAorIyAgICBvbmUgb2YgMHgyNTAsIDB4MjYwIG9yIDB4MjcwKToKKyMgIAorIyAgaW5zbW9kIHNvdW5kY29yZQorIyAgaW5zbW9kIG1zbmQKKyMgIGluc21vZCBtc25kX3Bpbm5hY2xlIGNmZz0weDI1MCBpbz0weDI5MCBpcnE9NSBtZW09MHhkMDAwMAorIyAgCisjICogVG8gdXNlIHRoZSBNUFUtY29tcGF0aWJsZSBLdXJ6d2VpbCBzeW50aCBvbiB0aGUgUGlubmFjbGUgaW4gUG5QCisjICAgbW9kZSwgYWRkIHRoZSBmb2xsb3dpbmcgKGFzc3VtZXMgeW91IGRpZCBgaXNhcG5wIG15cGlubmFjbGUuY29uZicpOgorIyAgCisjICBpbnNtb2Qgc291bmQKKyMgIGluc21vZCBtcHU0MDEgaW89MHgzMzAgaXJxPTkgICAgICAgICAgICAgICAgICAgIDwtLSBtYXRjaCBteXBpbm5hY2xlLmNvbmYgdmFsdWVzCisjICAKKyMgKiBUbyB1c2UgdGhlIE1QVS1jb21wYXRpYmxlIEt1cnp3ZWlsIHN5bnRoIG9uIHRoZSBQaW5uYWNsZSBpbiBub24tUG5QCisjICAgbW9kZSwgYWRkIHRoZSBmb2xsb3dpbmcuICBOb3RlIGhvdyB3ZSBmaXJzdCBjb25maWd1cmUgdGhlIHBlcmlwaGVyYWwncworIyAgIHJlc291cmNlcywgX3RoZW5fIGluc3RhbGwgYSBMaW51eCBkcml2ZXIgZm9yIGl0OgorIyAgCisjICBpbnNtb2Qgc291bmQKKyMgIHBpbm5hY2xlY2ZnIDB4MjUwIG1wdSAweDMzMCA5CisjICBpbnNtb2QgbXB1NDAxIGlvPTB4MzMwIGlycT05CisjCisjICAtLSBPUiB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIHdpdGhvdXQgcGlubmFjbGVjZmcgaW4gbm9uLVBuUCBtb2RlOgorIworIyAgaW5zbW9kIHNvdW5kY29yZQorIyAgaW5zbW9kIG1zbmQKKyMgIGluc21vZCBtc25kX3Bpbm5hY2xlIGNmZz0weDI1MCBpbz0weDI5MCBpcnE9NSBtZW09MHhkMDAwMCBtcHVfaW89MHgzMzAgbXB1X2lycT05CisjICBpbnNtb2Qgc291bmQKKyMgIGluc21vZCBtcHU0MDEgaW89MHgzMzAgaXJxPTkKKyMKKyMgKiBUbyBzZXR1cCB0aGUgam95c3RpY2sgcG9ydCBvbiB0aGUgUGlubmFjbGUgaW4gbm9uLVBuUCBtb2RlICh0aG91Z2gKKyMgICB5b3UgaGF2ZSB0byBmaW5kIHRoZSBhY3R1YWwgTGludXggam95c3RpY2sgZHJpdmVyIGVsc2V3aGVyZSksIHlvdQorIyAgIGNhbiB1c2UgcGlubmFjbGVjZmc6CisjCisjICAgcGlubmFjbGVjZmcgMHgyNTAgam95c3RpY2sgMHgyMDAKKyMKKyMgIC0tIE9SIHlvdSBjYW4gY29uZmlndXJlIHRoaXMgdXNpbmcgbXNuZF9waW5uYWNsZSB3aXRoIHRoZSBmb2xsb3dpbmc6CisjCisjICBpbnNtb2Qgc291bmRjb3JlCisjICBpbnNtb2QgbXNuZAorIyAgaW5zbW9kIG1zbmRfcGlubmFjbGUgY2ZnPTB4MjUwIGlvPTB4MjkwIGlycT01IG1lbT0weGQwMDAwIGpveXN0aWNrX2lvPTB4MjAwCisjCisjICAKKyMgIG1zbmRfY2xhc3NpYywgbXNuZF9waW5uYWNsZSBSZXF1aXJlZCBPcHRpb25zCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyAgCisjICBJZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIG5vdCBnaXZlbiwgdGhlIG1vZHVsZSB3aWxsIG5vdCBsb2FkLgorIyAgRXhhbWluZSB0aGUga2VybmVsIG1lc3NhZ2UgbG9nIGZvciBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlcy4KKyMgIFdBUk5JTkctLXByb2JpbmcgaXNuJ3Qgc3VwcG9ydGVkIHNvIHRyeSB0byBtYWtlIHN1cmUgeW91IGhhdmUgdGhlCisjICBjb3JyZWN0IHNoYXJlZCBtZW1vcnkgYXJlYSwgb3RoZXJ3aXNlIHlvdSBtYXkgZXhwZXJpZW5jZSBwcm9ibGVtcy4KKyMgIAorIyAgaW8gICAgICAgICAgICAgICAgICAgSS9PIGJhc2Ugb2YgRFNQLCBlLmcuIGlvPTB4MjEwCisjICBpcnEgICAgICAgICAgICAgICAgICBJUlEgbnVtYmVyLCBlLmcuIGlycT01CisjICBtZW0gICAgICAgICAgICAgICAgICBTaGFyZWQgbWVtb3J5IGFyZWEsIGUuZy4gbWVtPTB4ZDgwMDAKKyMgIAorIyAgCisjICBtc25kX2NsYXNzaWMsIG1zbmRfcGlubmFjbGUgQWRkaXRpb25hbCBPcHRpb25zCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjICAKKyMgIGZpZm9zaXplICAgICAgICAgICAgIFRoZSBkaWdpdGFsIGF1ZGlvIEZJRk9zLCBpbiBraWxvYnl0ZXMuICBJZiBub3QKKyMgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgd2lsbCBiZSB1c2VkLiAgSW5jcmVhc2luZworIyAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB2YWx1ZSB3aWxsIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGEgRklGTworIyAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJmbG93IGF0IHRoZSBleHBlbnNlIG9mIGluY3JlYXNpbmcgb3ZlcmFsbAorIyAgICAgICAgICAgICAgICAgICAgICAgbGF0ZW5jeS4gIEZvciBleGFtcGxlLCBmaWZvc2l6ZT01MTIgd2lsbAorIyAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGUgNTEya0IgcmVhZCBhbmQgd3JpdGUgRklGT3MgKDFNQiB0b3RhbCkuCisjICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGlzIG1heSByZWR1Y2UgZHJvcG91dHMsIGEgaGVhdnkgbWFjaGluZQorIyAgICAgICAgICAgICAgICAgICAgICAgbG9hZCB3aWxsIHVuZG91YnRlZGx5IHN0YXJ2ZSB0aGUgRklGTyBvZiBkYXRhCisjICAgICAgICAgICAgICAgICAgICAgICBhbmQgeW91IHdpbGwgZXZlbnR1YWxseSBnZXQgZHJvcG91dHMuICBPbmUKKyMgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBpcyB0byBhbHRlciB0aGUgc2NoZWR1bGluZyBwcmlvcml0eSBvZgorIyAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBsYXliYWNrIHByb2Nlc3MsIHVzaW5nIGBuaWNlJyBvciBzb21lIGZvcm0KKyMgICAgICAgICAgICAgICAgICAgICAgIG9mIFBPU0lYIHNvZnQgcmVhbC10aW1lIHNjaGVkdWxpbmcuCisjCisjICBjYWxpYnJhdGVfc2lnbmFsICAgICBTZXR0aW5nIHRoaXMgdG8gb25lIGNhbGlicmF0ZXMgdGhlIEFEQ3MgdG8gdGhlCisjICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwsIHplcm8gY2FsaWJyYXRlcyB0byB0aGUgY2FyZCAoZGVmYXVsdHMKKyMgICAgICAgICAgICAgICAgICAgICAgIHRvIHplcm8pLgorIyAgCisjICAKKyMgIG1zbmRfcGlubmFjbGUgQWRkaXRpb25hbCBPcHRpb25zCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIworIyAgZGlnaXRhbCAgICAgICAgICAgICAgU3BlY2lmeSBkaWdpdGFsPTEgdG8gZW5hYmxlIHRoZSBTL1BESUYgaW5wdXQKKyMgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdSBoYXZlIHRoZSBkaWdpdGFsIGRhdWdodGVyYm9hcmQKKyMgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIuIFRoaXMgd2lsbCBlbmFibGUgYWNjZXNzIHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgRElHSVRBTDEgaW5wdXQgZm9yIHRoZSBzb3VuZGNhcmQgaW4gdGhlIG1peGVyLgorIyAgICAgICAgICAgICAgICAgICAgICAgU29tZSBtaXhlciBwcm9ncmFtcyBtaWdodCBoYXZlIHRyb3VibGUgc2V0dGluZworIyAgICAgICAgICAgICAgICAgICAgICAgdGhlIERJR0lUQUwxIHNvdXJjZSBhcyBhbiBpbnB1dC4gIElmIHlvdSBoYXZlCisjICAgICAgICAgICAgICAgICAgICAgICB0cm91YmxlLCB5b3UgY2FuIHRyeSB0aGUgc2V0ZGlnaXRhbC5jIHByb2dyYW0KKyMgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBib3R0b20gb2YgdGhpcyBkb2N1bWVudC4KKyMKKyMgIGNmZyAgICAgICAgICAgICAgICAgIE5vbi1QblAgY29uZmlndXJhdGlvbiBwb3J0IGZvciB0aGUgUGlubmFjbGUKKyMgICAgICAgICAgICAgICAgICAgICAgIGFuZCBGaWppICh0eXBpY2FsbHkgMHgyNTAsIDB4MjYwIG9yIDB4MjcwLAorIyAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBqdW1wZXIgY29uZmlndXJhdGlvbikuICBJZgorIyAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBvcHRpb24gaXMgb21pdHRlZCwgdGhlbiBpdCBpcyBhc3N1bWVkCisjICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBjYXJkIGlzIGluIFBuUCBtb2RlLCBhbmQgdGhhdCB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBEU1AgcmVzb3VyY2UgdmFsdWVzIGFyZSBhbHJlYWR5CisjICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIHdpdGggUG5QIChpLmUuIGl0IHdvbid0IGF0dGVtcHQgdG8KKyMgICAgICAgICAgICAgICAgICAgICAgIGRvIGFueSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24pLgorIworIyAgV2hlbiB0aGUgUGlubmFjbGUgaXMgaW4gbm9uLVBuUCBtb2RlLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nCisjICBvcHRpb25zIHRvIGNvbmZpZ3VyZSBwYXJ0aWN1bGFyIGRldmljZXMuICBJZiBhIGZ1bGwgc3BlY2lmaWNhdGlvbgorIyAgZm9yIGEgZGV2aWNlIGlzIG5vdCBnaXZlbiwgdGhlbiB0aGUgZGV2aWNlIGlzIG5vdCBjb25maWd1cmVkLiAgTm90ZQorIyAgdGhhdCB5b3Ugc3RpbGwgbXVzdCB1c2UgYSBMaW51eCBkcml2ZXIgZm9yIGFueSBvZiB0aGVzZSBkZXZpY2VzCisjICBvbmNlIHRoZWlyIHJlc291cmNlcyBhcmUgc2V0dXAgKHN1Y2ggYXMgdGhlIExpbnV4IGpveXN0aWNrIGRyaXZlciwKKyMgIG9yIHRoZSBNUFU0MDEgZHJpdmVyIGZyb20gT1NTIGZvciB0aGUgS3VyendlaWwgc3ludGgpLgorIworIyAgbXB1X2lvICAgICAgICAgICAgICAgSS9PIHBvcnQgb2YgTVBVIChvbi1ib2FyZCBLdXJ6d2VpbCBzeW50aCkKKyMgIG1wdV9pcnEgICAgICAgICAgICAgIElSUSBvZiBNUFUgKG9uLWJvYXJkIEt1cnp3ZWlsIHN5bnRoKQorIyAgaWRlX2lvMAkJRmlyc3QgSS9PIHBvcnQgb2YgSURFIGNvbnRyb2xsZXIKKyMgIGlkZV9pbzEJCVNlY29uZCBJL08gcG9ydCBvZiBJREUgY29udHJvbGxlcgorIyAgaWRlX2lycQkJSVJRIElERSBjb250cm9sbGVyCisjICBqb3lzdGlja19pbyAgICAgICAgICBJL08gcG9ydCBvZiBqb3lzdGljaworIyAgCisjICAKKyMgIE9idGFpbmluZyBhbmQgQ3JlYXRpbmcgRmlybXdhcmUgRmlsZXMKKyMgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgICAgICBGb3IgdGhlIENsYXNzaWMvVGFoaXRpL01vbnRlcmV5CisjICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4gCisjICAKKyMgIERvd25sb2FkIHRvIC90bXAgYW5kIHVuemlwIHRoZSBmb2xsb3dpbmcgZmlsZSBmcm9tIFR1cnRsZSBCZWFjaDoKKyMgIAorIyAgICAgICBmdHA6Ly9mdHAudm95ZXRyYS5jb20vcHViL3Ricy9tc25kY2wvbXNuZHZraXQuemlwCisjICAKKyMgIFdoZW4gdW56aXBwZWQsIHVuemlwIHRoZSBmaWxlIG5hbWVkIE1zbmRGaWxlcy56aXAuICBUaGVuIGNvcHkgdGhlCisjICBmb2xsb3dpbmcgZmlybXdhcmUgZmlsZXMgdG8gL2V0Yy9zb3VuZCAobm90ZSB0aGUgZmlsZSByZW5hbWluZyk6CisjICAKKyMgICAgY3AgRFNQQ09ERS9NU05ESU5JVC5CSU4gL2V0Yy9zb3VuZC9tc25kaW5pdC5iaW4KKyMgICAgY3AgRFNQQ09ERS9NU05EUEVSTS5SRUIgL2V0Yy9zb3VuZC9tc25kcGVybS5iaW4KKyMgIAorIyAgV2hlbiBjb25maWd1cmluZyB0aGUgTGludXgga2VybmVsLCBzcGVjaWZ5IC9ldGMvc291bmQvbXNuZGluaXQuYmluIGFuZAorIyAgL2V0Yy9zb3VuZC9tc25kcGVybS5iaW4gZm9yIHRoZSB0d28gZmlybXdhcmUgZmlsZXMgKExpbnV4IGtlcm5lbAorIyAgdmVyc2lvbnMgb2xkZXIgdGhhbiAyLjIgZG8gbm90IGFzayBmb3IgZmlybXdhcmUgcGF0aHMsIGFuZCBhcmUKKyMgIGhhcmRjb2RlZCB0byAvZXRjL3NvdW5kKS4KKyMKKyMgIElmIHlvdSBhcmUgY29tcGlsaW5nIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsLCB0aGVzZSBmaWxlcyBtdXN0CisjICBiZSBhY2Nlc3NpYmxlIGR1cmluZyBjb21waWxhdGlvbiwgYnV0IHdpbGwgbm90IGJlIG5lZWRlZCBsYXRlci4KKyMgIFRoZSBmaWxlcyBtdXN0IHJlbWFpbiwgaG93ZXZlciwgaWYgdGhlIGRyaXZlciBpcyB1c2VkIGFzIGEgbW9kdWxlLgorIyAgCisjICAKKyMgICAgICAgRm9yIHRoZSBQaW5uYWNsZS9GaWppCisjICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyAgCisjICBEb3dubG9hZCB0byAvdG1wIGFuZCB1bnppcCB0aGUgZm9sbG93aW5nIGZpbGUgZnJvbSBUdXJ0bGUgQmVhY2ggKGJlCisjICBzdXJlIHRvIHVzZSB0aGUgZW50aXJlIFVSTDsgc29tZSBoYXZlIGhhZCB0cm91YmxlIG5hdmlnYXRpbmcgdG8gdGhlCisjICBVUkwpOgorIyAgCisjICAgICAgIGZ0cDovL2Z0cC52b3lldHJhLmNvbS9wdWIvdGJzL3Bpbm4vcG5kZGsxMDAuemlwCisjCisjICBVbnBhY2sgdGhpcyBzaGVsbCBhcmNoaXZlLCBhbmQgcnVuIG1ha2UgaW4gdGhlIGNyZWF0ZWQgZGlyZWN0b3J5CisjICAoeW91IG5lZWQgYSBDIGNvbXBpbGVyIGFuZCBmbGV4IHRvIGJ1aWxkIHRoZSB1dGlsaXRpZXMpLiAgVGhpcworIyAgc2hvdWxkIGdpdmUgeW91IHRoZSBleGVjdXRhYmxlcyBjb252LCBwaW5uYWNsZWNmZyBhbmQgc2V0ZGlnaXRhbC4KKyMgIGNvbnYgaXMgb25seSB1c2VkIHRlbXBvcmFyaWx5IGhlcmUgdG8gY3JlYXRlIHRoZSBmaXJtd2FyZSBmaWxlcywKKyMgIHdoaWxlIHBpbm5hY2xlY2ZnIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBQaW5uYWNsZSBvciBGaWppIGNhcmQgaW4KKyMgIG5vbi1QblAgbW9kZSwgYW5kIHNldGRpZ2l0YWwgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBTL1BESUYgaW5wdXQgb24KKyMgIHRoZSBtaXhlciAocGlubmFjbGVjZmcgYW5kIHNldGRpZ2l0YWwgc2hvdWxkIGJlIGNvcGllZCB0byBhCisjICBjb252ZW5pZW50IHBsYWNlLCBwb3NzaWJseSBydW4gZHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbikuCisjCisjICBUbyBnZW5lcmF0aW5nIHRoZSBmaXJtd2FyZSBmaWxlcyB3aXRoIHRoZSBgY29udicgcHJvZ3JhbSwgd2UgY3JlYXRlCisjICB0aGUgYmluYXJ5IGZpcm13YXJlIGZpbGVzIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbgorIyAgKGFzc3VtaW5nIHRoZSBhcmNoaXZlIHVucGFja2VkIGludG8gYSBkaXJlY3RvcnkgbmFtZWQgUElOTkRESyk6CisjICAKKyMgICAgLi9jb252IDwgUElOTkRESy9kc3Bjb2RlL3BuZHNwaW5pLmFzbSA+IC9ldGMvc291bmQvcG5kc3BpbmkuYmluCisjICAgIC4vY29udiA8IFBJTk5EREsvZHNwY29kZS9wbmRzcGVybS5hc20gPiAvZXRjL3NvdW5kL3BuZHNwZXJtLmJpbgorIyAgCisjICBUaGUgY29udiAoYW5kIGNvbnYubCkgcHJvZ3JhbSBpcyBub3QgbmVlZGVkIGFmdGVyIGNvbnZlcnNpb24gYW5kIGNhbgorIyAgYmUgc2FmZWx5IGRlbGV0ZWQuICBUaGVuLCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZnkKKyMgIC9ldGMvc291bmQvcG5kc3BpbmkuYmluIGFuZCAvZXRjL3NvdW5kL3BuZHNwZXJtLmJpbiBmb3IgdGhlIHR3bworIyAgZmlybXdhcmUgZmlsZXMgKExpbnV4IGtlcm5lbCB2ZXJzaW9ucyBvbGRlciB0aGFuIDIuMiBkbyBub3QgYXNrIGZvcgorIyAgZmlybXdhcmUgcGF0aHMsIGFuZCBhcmUgaGFyZGNvZGVkIHRvIC9ldGMvc291bmQpLgorIyAgCisjICBJZiB5b3UgYXJlIGNvbXBpbGluZyB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgdGhlc2UgZmlsZXMgbXVzdAorIyAgYmUgYWNjZXNzaWJsZSBkdXJpbmcgY29tcGlsYXRpb24sIGJ1dCB3aWxsIG5vdCBiZSBuZWVkZWQgbGF0ZXIuCisjICBUaGUgZmlsZXMgbXVzdCByZW1haW4sIGhvd2V2ZXIsIGlmIHRoZSBkcml2ZXIgaXMgdXNlZCBhcyBhIG1vZHVsZS4KKyMKKyMgIAorIyAgVXNpbmcgRGlnaXRhbCBJL08gd2l0aCB0aGUgUy9QRElGIFBvcnQKKyMgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjCisjICBJZiB5b3UgaGF2ZSBhIFBpbm5hY2xlIG9yIEZpamkgd2l0aCB0aGUgZGlnaXRhbCBkYXVnaHRlcmJvYXJkIGFuZAorIyAgd2FudCB0byBzZXQgaXQgYXMgdGhlIGlucHV0IHNvdXJjZSwgeW91IGNhbiB1c2UgdGhpcyBwcm9ncmFtIGlmIHlvdQorIyAgaGF2ZSB0cm91YmxlIHRyeWluZyB0byBkbyBpdCB3aXRoIGEgbWl4ZXIgcHJvZ3JhbSAoYmUgc3VyZSB0bworIyAgaW5zZXJ0IHRoZSBtb2R1bGUgd2l0aCB0aGUgZGlnaXRhbD0xIG9wdGlvbiwgb3Igc2F5IFkgdG8gdGhlIG9wdGlvbgorIyAgZHVyaW5nIGNvbXBpbGVkLWluIGtlcm5lbCBvcGVyYXRpb24pLiAgVXBvbiBzZWxlY3Rpb24gb2YgdGhlIFMvUERJRgorIyAgcG9ydCwgeW91IHNob3VsZCBiZSBhYmxlIG1vbml0b3IgYW5kIHJlY29yZCBmcm9tIGl0LgorIworIyAgVGhlcmUgaXMgc29tZXRoaW5nIHRvIG5vdGUgYWJvdXQgdXNpbmcgdGhlIFMvUERJRiBwb3J0LiAgRGlnaXRhbAorIyAgdGltaW5nIGlzIHRha2VuIGZyb20gdGhlIGRpZ2l0YWwgc2lnbmFsLCBzbyBpZiBhIHNpZ25hbCBpcyBub3QKKyMgIGNvbm5lY3RlZCB0byB0aGUgcG9ydCBhbmQgaXQgaXMgc2VsZWN0ZWQgYXMgcmVjb3JkaW5nIGlucHV0LCB5b3UKKyMgIHdpbGwgZmluZCBQQ00gcGxheWJhY2sgdG8gYmUgZGlzdG9ydGVkIGluIHBsYXliYWNrIHJhdGUuICBBbHNvLAorIyAgYXR0ZW1wdGluZyB0byByZWNvcmQgYXQgYSBzYW1wbGluZyByYXRlIG90aGVyIHRoYW4gdGhlIERBVCByYXRlIG1heQorIyAgYmUgcHJvYmxlbWF0aWMgKGkuZS4gdHJ5aW5nIHRvIHJlY29yZCBhdCA4MDAwSHogd2hlbiB0aGUgREFUIHNpZ25hbAorIyAgaXMgNDQxMDBIeikuICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gd2l0aCB0aGlzLCBzZXQgdGhlIHJlY29yZGluZworIyAgaW5wdXQgdG8gYW5hbG9nIGlmIHlvdSBuZWVkIHRvIHJlY29yZCBhdCBhIHJhdGUgb3RoZXIgdGhhbiB0aGF0IG9mCisjICB0aGUgREFUIHJhdGUuCisjCisjCisjICAtLSBTaGVsbCBhcmNoaXZlIGF0dGFjaGVkIGJlbG93LCBqdXN0IHJ1biBgc2ggTXVsdGlTb3VuZCcgdG8gZXh0cmFjdC4KKyMgICAgIENvbnRhaW5zIFBpbm5hY2xlL0ZpamkgdXRpbGl0aWVzIHRvIGNvbnZlcnQgZmlybXdhcmUsIGNvbmZpZ3VyZQorIyAgICAgaW4gbm9uLVBuUCBtb2RlLCBhbmQgc2VsZWN0IHRoZSBESUdJVEFMMSBpbnB1dCBmb3IgdGhlIG1peGVyLgorIworIworIyEvYmluL3NoCisjIFRoaXMgaXMgYSBzaGVsbCBhcmNoaXZlIChwcm9kdWNlZCBieSBHTlUgc2hhcnV0aWxzIDQuMikuCisjIFRvIGV4dHJhY3QgdGhlIGZpbGVzIGZyb20gdGhpcyBhcmNoaXZlLCBzYXZlIGl0IHRvIHNvbWUgRklMRSwgcmVtb3ZlCisjIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBgIS9iaW4vc2gnIGxpbmUgYWJvdmUsIHRoZW4gdHlwZSBgc2ggRklMRScuCisjCisjIE1hZGUgb24gMTk5OC0xMi0wNCAxMDowNyBFU1QgYnkgPGFuZHJld3R2QHp0cmFuc2Zvcm0udmVsc29mdC5jb20+LgorIyBTb3VyY2UgZGlyZWN0b3J5IHdhcyBgL2hvbWUvYW5kcmV3dHYvcHJvZ3JhbW1pbmcvcGlubmFjbGUvcGlubmFjbGUnLgorIworIyBFeGlzdGluZyBmaWxlcyB3aWxsICpub3QqIGJlIG92ZXJ3cml0dGVuIHVubGVzcyBgLWMnIGlzIHNwZWNpZmllZC4KKyMKKyMgVGhpcyBzaGFyIGNvbnRhaW5zOgorIyBsZW5ndGggbW9kZSAgICAgICBuYW1lCisjIC0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgIDIwNDYgLXJ3LXJ3LXItLSBNdWx0aVNvdW5kLmQvc2V0ZGlnaXRhbC5jCisjICAxMDIzNSAtcnctcnctci0tIE11bHRpU291bmQuZC9waW5uYWNsZWNmZy5jCisjICAgIDEwNiAtcnctcnctci0tIE11bHRpU291bmQuZC9NYWtlZmlsZQorIyAgICAxNDEgLXJ3LXJ3LXItLSBNdWx0aVNvdW5kLmQvY29udi5sCisjICAgMTQ3MiAtcnctcnctci0tIE11bHRpU291bmQuZC9tc25kcmVzZXQuYworIworc2F2ZV9JRlM9IiR7SUZTfSIKK0lGUz0iJHtJRlN9OiIKK2dldHRleHRfZGlyPUZBSUxFRAorbG9jYWxlX2Rpcj1GQUlMRUQKK2ZpcnN0X3BhcmFtPSIkMSIKK2ZvciBkaXIgaW4gJFBBVEgKK2RvCisgIGlmIHRlc3QgIiRnZXR0ZXh0X2RpciIgPSBGQUlMRUQgJiYgdGVzdCAtZiAkZGlyL2dldHRleHQgXAorICAgICAmJiAoJGRpci9nZXR0ZXh0IC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+JjEpCisgIHRoZW4KKyAgICBzZXQgYCRkaXIvZ2V0dGV4dCAtLXZlcnNpb24gMj4mMWAKKyAgICBpZiB0ZXN0ICIkMyIgPSBHTlUKKyAgICB0aGVuCisgICAgICBnZXR0ZXh0X2Rpcj0kZGlyCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAiJGxvY2FsZV9kaXIiID0gRkFJTEVEICYmIHRlc3QgLWYgJGRpci9zaGFyIFwKKyAgICAgJiYgKCRkaXIvc2hhciAtLXByaW50LXRleHQtZG9tYWluLWRpciA+L2Rldi9udWxsIDI+JjEpCisgIHRoZW4KKyAgICBsb2NhbGVfZGlyPWAkZGlyL3NoYXIgLS1wcmludC10ZXh0LWRvbWFpbi1kaXJgCisgIGZpCitkb25lCitJRlM9IiRzYXZlX0lGUyIKK2lmIHRlc3QgIiRsb2NhbGVfZGlyIiA9IEZBSUxFRCB8fCB0ZXN0ICIkZ2V0dGV4dF9kaXIiID0gRkFJTEVECit0aGVuCisgIGVjaG89ZWNobworZWxzZQorICBURVhURE9NQUlORElSPSRsb2NhbGVfZGlyCisgIGV4cG9ydCBURVhURE9NQUlORElSCisgIFRFWFRET01BSU49c2hhcnV0aWxzCisgIGV4cG9ydCBURVhURE9NQUlOCisgIGVjaG89IiRnZXR0ZXh0X2Rpci9nZXR0ZXh0IC1zIgorZmkKK3RvdWNoIC1hbSAxMjMxMjM1OTk5ICQkLnRvdWNoID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAhIC1mIDEyMzEyMzU5OTkgJiYgdGVzdCAtZiAkJC50b3VjaDsgdGhlbgorICBzaGFyX3RvdWNoPXRvdWNoCitlbHNlCisgIHNoYXJfdG91Y2g9OgorICBlY2hvCisgICRlY2hvICdXQVJOSU5HOiBub3QgcmVzdG9yaW5nIHRpbWVzdGFtcHMuICBDb25zaWRlciBnZXR0aW5nIGFuZCcKKyAgJGVjaG8gImluc3RhbGxpbmcgR05VIFxgdG91Y2gnLCBkaXN0cmlidXRlZCBpbiBHTlUgRmlsZSBVdGlsaXRpZXMuLi4iCisgIGVjaG8KK2ZpCitybSAtZiAxMjMxMjM1OTk5ICQkLnRvdWNoCisjCitpZiBta2RpciBfc2gwMTQyNjsgdGhlbgorICAkZWNobyAneCAtJyAnY3JlYXRpbmcgbG9jayBkaXJlY3RvcnknCitlbHNlCisgICRlY2hvICdmYWlsZWQgdG8gY3JlYXRlIGxvY2sgZGlyZWN0b3J5JworICBleGl0IDEKK2ZpCisjID09PT09PT09PT09PT0gTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYyA9PT09PT09PT09PT09PQoraWYgdGVzdCAhIC1kICdNdWx0aVNvdW5kLmQnOyB0aGVuCisgICRlY2hvICd4IC0nICdjcmVhdGluZyBkaXJlY3RvcnknICdNdWx0aVNvdW5kLmQnCisgIG1rZGlyICdNdWx0aVNvdW5kLmQnCitmaQoraWYgdGVzdCAtZiAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYycgJiYgdGVzdCAiJGZpcnN0X3BhcmFtIiAhPSAtYzsgdGhlbgorICAkZWNobyAneCAtJyBTS0lQUElORyAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYycgJyhmaWxlIGFscmVhZHkgZXhpc3RzKScKK2Vsc2UKKyAgJGVjaG8gJ3ggLScgZXh0cmFjdGluZyAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYycgJyh0ZXh0KScKKyAgc2VkICdzL15YLy8nIDw8ICdTSEFSX0VPRicgPiAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYycgJiYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1ggKgorWCAqIHNldGRpZ2l0YWwuYyAtIHNldHMgdGhlIERJR0lUQUwxIGlucHV0IGZvciBhIG1peGVyCitYICoKK1ggKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKK1ggKgorWCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitYICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK1ggKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorWCAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitYICoKK1ggKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK1ggKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorWCAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK1ggKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorWCAqCitYICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK1ggKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorWCAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorWCAqCitYICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworWAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb3VuZGNhcmQuaD4KK1gKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CitYCWludCBmZDsKK1gJdW5zaWduZWQgbG9uZyByZWNtYXNrLCByZWNzcmM7CitYCitYCWlmIChhcmdjICE9IDIpIHsKK1gJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IHNldGRpZ2l0YWwgPG1peGVyIGRldmljZT5cbiIpOworWAkJZXhpdCgxKTsKK1gJfQorWAorWAlpZiAoKGZkID0gb3Blbihhcmd2WzFdLCBPX1JEV1IpKSA8IDApIHsKK1gJCXBlcnJvcihhcmd2WzFdKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKGlvY3RsKGZkLCBTT1VORF9NSVhFUl9SRUFEX1JFQ01BU0ssICZyZWNtYXNrKSA8IDApIHsKK1gJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGlvY3RsIHJlYWQgcmVjb3JkaW5nIG1hc2sgZmFpbGVkXG4iKTsKK1gJCXBlcnJvcigiaW9jdGwiKTsKK1gJCWNsb3NlKGZkKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKCEocmVjbWFzayAmIFNPVU5EX01BU0tfRElHSVRBTDEpKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBjYW5ub3QgZmluZCBESUdJVEFMMSBkZXZpY2UgaW4gbWl4ZXJcbiIpOworWAkJY2xvc2UoZmQpOworWAkJZXhpdCgxKTsKK1gJfQorWAorWAlpZiAoaW9jdGwoZmQsIFNPVU5EX01JWEVSX1JFQURfUkVDU1JDLCAmcmVjc3JjKSA8IDApIHsKK1gJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGlvY3RsIHJlYWQgcmVjb3JkaW5nIHNvdXJjZSBmYWlsZWRcbiIpOworWAkJcGVycm9yKCJpb2N0bCIpOworWAkJY2xvc2UoZmQpOworWAkJZXhpdCgxKTsKK1gJfQorWAorWAlyZWNzcmMgfD0gU09VTkRfTUFTS19ESUdJVEFMMTsKK1gJCitYCWlmIChpb2N0bChmZCwgU09VTkRfTUlYRVJfV1JJVEVfUkVDU1JDLCAmcmVjc3JjKSA8IDApIHsKK1gJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGlvY3RsIHdyaXRlIHJlY29yZGluZyBzb3VyY2UgZmFpbGVkXG4iKTsKK1gJCXBlcnJvcigiaW9jdGwiKTsKK1gJCWNsb3NlKGZkKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJY2xvc2UoZmQpOworWAkKK1gJcmV0dXJuIDA7Cit9CitTSEFSX0VPRgorICAkc2hhcl90b3VjaCAtYW0gMTIwNDA5MjU5OCAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYycgJiYKKyAgY2htb2QgMDY2NCAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYycgfHwKKyAgJGVjaG8gJ3Jlc3RvcmUgb2YnICdNdWx0aVNvdW5kLmQvc2V0ZGlnaXRhbC5jJyAnZmFpbGVkJworICBpZiAoIG1kNXN1bSAtLWhlbHAgMj4mMSB8IGdyZXAgJ3NhZ2U6IG1kNXN1bSBcWycgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiAoIG1kNXN1bSAtLXZlcnNpb24gMj4mMSB8IGdyZXAgLXYgJ3RleHR1dGlscyAxLjEyJyApID4vZGV2L251bGw7IHRoZW4KKyAgICBtZDVzdW0gLWMgPDwgU0hBUl9FT0YgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICB8fCAkZWNobyAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYzonICdNRDUgY2hlY2sgZmFpbGVkJworZTg3MjE3ZmMzZTcxMjg4MTAyYmE0MWZkODFmNzFlYzQgIE11bHRpU291bmQuZC9zZXRkaWdpdGFsLmMKK1NIQVJfRU9GCisgIGVsc2UKKyAgICBzaGFyX2NvdW50PSJgTENfQUxMPSBMQ19DVFlQRT0gTEFORz0gd2MgLWMgPCAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYydgIgorICAgIHRlc3QgMjA0NiAtZXEgIiRzaGFyX2NvdW50IiB8fAorICAgICRlY2hvICdNdWx0aVNvdW5kLmQvc2V0ZGlnaXRhbC5jOicgJ29yaWdpbmFsIHNpemUnICcyMDQ2LCcgJ2N1cnJlbnQgc2l6ZScgIiRzaGFyX2NvdW50ISIKKyAgZmkKK2ZpCisjID09PT09PT09PT09PT0gTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMgPT09PT09PT09PT09PT0KK2lmIHRlc3QgLWYgJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jJyAmJiB0ZXN0ICIkZmlyc3RfcGFyYW0iICE9IC1jOyB0aGVuCisgICRlY2hvICd4IC0nIFNLSVBQSU5HICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgJyhmaWxlIGFscmVhZHkgZXhpc3RzKScKK2Vsc2UKKyAgJGVjaG8gJ3ggLScgZXh0cmFjdGluZyAnTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMnICcodGV4dCknCisgIHNlZCAncy9eWC8vJyA8PCAnU0hBUl9FT0YnID4gJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jJyAmJgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorWCAqCitYICogcGlubmFjbGVjZmcuYyAtIFBpbm5hY2xlL0ZpamkgRGV2aWNlIENvbmZpZ3VyYXRpb24gUHJvZ3JhbQorWCAqCitYICogVGhpcyBpcyBmb3IgTk9OLVBuUCBtb2RlIG9ubHkuICBGb3IgUG5QIG1vZGUsIHVzZSBpc2FwbnB0b29scy4KK1ggKgorWCAqIFRoaXMgaXMgTGludXgtc3BlY2lmaWMsIGFuZCBtdXN0IGJlIHJ1biB3aXRoIHJvb3QgcGVybWlzc2lvbnMuCitYICoKK1ggKiBQYXJ0IG9mIHRoZSBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKK1ggKgorWCAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorWCAqCitYICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK1ggKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorWCAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCitYICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK1ggKgorWCAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorWCAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitYICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorWCAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCitYICoKK1ggKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorWCAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitYICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCitYICoKK1ggKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitYCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorWAorI2RlZmluZSBJUkVHX0xPR0RFVklDRQkJMHgwNworI2RlZmluZSBJUkVHX0FDVElWQVRFCQkweDMwCisjZGVmaW5lIExEX0FDVElWQVRFCQkweDAxCisjZGVmaW5lIExEX0RJU0FDVElWQVRFCQkweDAwCisjZGVmaW5lIElSRUdfRUVDT05UUk9MCQkweDNGCisjZGVmaW5lIElSRUdfTUVNQkFTRUhJCQkweDQwCisjZGVmaW5lIElSRUdfTUVNQkFTRUxPCQkweDQxCisjZGVmaW5lIElSRUdfTUVNQ09OVFJPTAkJMHg0MgorI2RlZmluZSBJUkVHX01FTVJBTkdFSEkJCTB4NDMKKyNkZWZpbmUgSVJFR19NRU1SQU5HRUxPCQkweDQ0CisjZGVmaW5lIE1FTVRZUEVfOEJJVAkJMHgwMAorI2RlZmluZSBNRU1UWVBFXzE2QklUCQkweDAyCisjZGVmaW5lIE1FTVRZUEVfUkFOR0UJCTB4MDAKKyNkZWZpbmUgTUVNVFlQRV9ISUFERFIJCTB4MDEKKyNkZWZpbmUgSVJFR19JTzBfQkFTRUhJCQkweDYwCisjZGVmaW5lIElSRUdfSU8wX0JBU0VMTwkJMHg2MQorI2RlZmluZSBJUkVHX0lPMV9CQVNFSEkJCTB4NjIKKyNkZWZpbmUgSVJFR19JTzFfQkFTRUxPCQkweDYzCisjZGVmaW5lIElSRUdfSVJRX05VTUJFUgkJMHg3MAorI2RlZmluZSBJUkVHX0lSUV9UWVBFCQkweDcxCisjZGVmaW5lIElSUVRZUEVfSElHSAkJMHgwMgorI2RlZmluZSBJUlFUWVBFX0xPVwkJMHgwMAorI2RlZmluZSBJUlFUWVBFX0xFVkVMCQkweDAxCisjZGVmaW5lIElSUVRZUEVfRURHRQkJMHgwMAorWAorI2RlZmluZSBISUJZVEUodykJCSgoQllURSkoKChXT1JEKSh3KSA+PiA4KSAmIDB4RkYpKQorI2RlZmluZSBMT0JZVEUodykJCSgoQllURSkodykpCisjZGVmaW5lIE1BS0VXT1JEKGxvdyxoaSkJKChXT1JEKSgoKEJZVEUpKGxvdykpfCgoKFdPUkQpKChCWVRFKShoaSkpKTw8OCkpKQorWAordHlwZWRlZiBfX3U4CQkJQllURTsKK3R5cGVkZWYgX191MTYJCQlVU0hPUlQ7Cit0eXBlZGVmIF9fdTE2CQkJV09SRDsKK1gKK3N0YXRpYyBpbnQgY29uZmlnX3BvcnQgPSAtMTsKK1gKK3N0YXRpYyBpbnQgbXNuZF93cml0ZV9jZmcoaW50IGNmZywgaW50IHJlZywgaW50IHZhbHVlKQoreworWAlvdXRiKHJlZywgY2ZnKTsKK1gJb3V0Yih2YWx1ZSwgY2ZnICsgMSk7CitYCWlmICh2YWx1ZSAhPSBpbmIoY2ZnICsgMSkpIHsKK1gJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IG1zbmRfd3JpdGVfY2ZnOiBJL08gZXJyb3JcbiIpOworWAkJcmV0dXJuIC1FSU87CitYCX0KK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfcmVhZF9jZmcoaW50IGNmZywgaW50IHJlZykKK3sKK1gJb3V0YihyZWcsIGNmZyk7CitYCXJldHVybiBpbmIoY2ZnICsgMSk7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfd3JpdGVfY2ZnX2lvMChpbnQgY2ZnLCBpbnQgbnVtLCBXT1JEIGlvKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFSEksIEhJQllURShpbykpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8wX0JBU0VMTywgTE9CWVRFKGlvKSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfcmVhZF9jZmdfaW8wKGludCBjZmcsIGludCBudW0sIFdPUkQgKmlvKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAkKK1gJKmlvID0gTUFLRVdPUkQobXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfSU8wX0JBU0VMTyksCitYCQkgICAgICAgbXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfSU8wX0JBU0VISSkpOworWAorWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF93cml0ZV9jZmdfaW8xKGludCBjZmcsIGludCBudW0sIFdPUkQgaW8pCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VISSwgSElCWVRFKGlvKSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzFfQkFTRUxPLCBMT0JZVEUoaW8pKSkKK1gJCXJldHVybiAtRUlPOworWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF9yZWFkX2NmZ19pbzEoaW50IGNmZywgaW50IG51bSwgV09SRCAqaW8pCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCQorWAkqaW8gPSBNQUtFV09SRChtc25kX3JlYWRfY2ZnKGNmZywgSVJFR19JTzFfQkFTRUxPKSwKK1gJCSAgICAgICBtc25kX3JlYWRfY2ZnKGNmZywgSVJFR19JTzFfQkFTRUhJKSk7CitYCitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3dyaXRlX2NmZ19pcnEoaW50IGNmZywgaW50IG51bSwgV09SRCBpcnEpCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSVJRX05VTUJFUiwgTE9CWVRFKGlycSkpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSVJRX1RZUEUsIElSUVRZUEVfRURHRSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfcmVhZF9jZmdfaXJxKGludCBjZmcsIGludCBudW0sIFdPUkQgKmlycSkKK3sKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJCitYCSppcnEgPSBtc25kX3JlYWRfY2ZnKGNmZywgSVJFR19JUlFfTlVNQkVSKTsKK1gKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfd3JpdGVfY2ZnX21lbShpbnQgY2ZnLCBpbnQgbnVtLCBpbnQgbWVtKQoreworWAlXT1JEIHdtZW07CitYCitYCW1lbSA+Pj0gODsKK1gJbWVtICY9IDB4ZmZmOworWAl3bWVtID0gKFdPUkQpbWVtOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUJBU0VISSwgSElCWVRFKHdtZW0pKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUJBU0VMTywgTE9CWVRFKHdtZW0pKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAod21lbSAmJiBtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTUVNQ09OVFJPTCwgKE1FTVRZUEVfSElBRERSIHwgTUVNVFlQRV8xNkJJVCkpKQorWAkJcmV0dXJuIC1FSU87CitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3JlYWRfY2ZnX21lbShpbnQgY2ZnLCBpbnQgbnVtLCBpbnQgKm1lbSkKK3sKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJCitYCSptZW0gPSBNQUtFV09SRChtc25kX3JlYWRfY2ZnKGNmZywgSVJFR19NRU1CQVNFTE8pLAorWAkJCW1zbmRfcmVhZF9jZmcoY2ZnLCBJUkVHX01FTUJBU0VISSkpOworWAkqbWVtIDw8PSA4OworWAorWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF9hY3RpdmF0ZV9sb2dpY2FsKGludCBjZmcsIGludCBudW0pCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfQUNUSVZBVEUsIExEX0FDVElWQVRFKSkKK1gJCXJldHVybiAtRUlPOworWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF93cml0ZV9jZmdfbG9naWNhbChpbnQgY2ZnLCBpbnQgbnVtLCBXT1JEIGlvMCwgV09SRCBpbzEsIFdPUkQgaXJxLCBpbnQgbWVtKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmdfaW8wKGNmZywgbnVtLCBpbzApKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZ19pbzEoY2ZnLCBudW0sIGlvMSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnX2lycShjZmcsIG51bSwgaXJxKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmdfbWVtKGNmZywgbnVtLCBtZW0pKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX2FjdGl2YXRlX2xvZ2ljYWwoY2ZnLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3JlYWRfY2ZnX2xvZ2ljYWwoaW50IGNmZywgaW50IG51bSwgV09SRCAqaW8wLCBXT1JEICppbzEsIFdPUkQgKmlycSwgaW50ICptZW0pCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3JlYWRfY2ZnX2lvMChjZmcsIG51bSwgaW8wKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF9yZWFkX2NmZ19pbzEoY2ZnLCBudW0sIGlvMSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfcmVhZF9jZmdfaXJxKGNmZywgbnVtLCBpcnEpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3JlYWRfY2ZnX21lbShjZmcsIG51bSwgbWVtKSkKK1gJCXJldHVybiAtRUlPOworWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CitYCWZwcmludGYoc3RkZXJyLAorWAkJIlxuIgorWAkJInBpbm5hY2xlY2ZnIDEuMFxuIgorWAkJIlxuIgorWAkJInVzYWdlOiBwaW5uYWNsZWNmZyA8Y29uZmlnIHBvcnQ+IFtkZXZpY2UgY29uZmlnXVxuIgorWAkJIlxuIgorWAkJIlRoaXMgaXMgZm9yIHVzZSB3aXRoIHRoZSBjYXJkIGluIE5PTi1QblAgbW9kZSBvbmx5LlxuIgorWAkJIlxuIgorWAkJIkF2YWlsYWJsZSBkZXZpY2VzIChub3QgYWxsIGF2YWlsYWJsZSBmb3IgRmlqaSk6XG4iCitYCQkiXG4iCitYCQkiICAgICAgICBEZXZpY2UgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uXG4iCitYCQkiICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCitYCQkiICAgICAgICByZXNldCAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0IGFsbCBkZXZpY2VzIChpLmUuIGRpc2FibGUpXG4iCitYCQkiICAgICAgICBzaG93ICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgY3VycmVudCBkZXZpY2UgY29uZmlndXJhdGlvbnNcbiIKK1gJCSJcbiIKK1gJCSIgICAgICAgIGRzcCA8aW8+IDxpcnE+IDxtZW0+ICAgICAgICAgQXVkaW8gZGV2aWNlXG4iCitYCQkiICAgICAgICBtcHUgPGlvPiA8aXJxPiAgICAgICAgICAgICAgIEludGVybmFsIEt1cnp3ZWlsIHN5bnRoXG4iCitYCQkiICAgICAgICBpZGUgPGlvMD4gPGlvMT4gPGlycT4gICAgICAgIE9uLWJvYXJkIElERSBjb250cm9sbGVyXG4iCitYCQkiICAgICAgICBqb3lzdGljayA8aW8+ICAgICAgICAgICAgICAgIEpveXN0aWNrIHBvcnRcbiIKK1gJCSJcbiIpOworWAlleGl0KDEpOworfQorWAorc3RhdGljIGludCBjZmdfcmVzZXQodm9pZCkKK3sKK1gJaW50IGk7CitYCitYCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCitYCQltc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNvbmZpZ19wb3J0LCBpLCAwLCAwLCAwLCAwKTsKK1gJCitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBjZmdfc2hvdyh2b2lkKQoreworWAlpbnQgaTsKK1gJaW50IGNvdW50ID0gMDsKK1gKK1gJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworWAkJV09SRCBpbzAsIGlvMSwgaXJxOworWAkJaW50IG1lbTsKK1gJCW1zbmRfcmVhZF9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgaSwgJmlvMCwgJmlvMSwgJmlycSwgJm1lbSk7CitYCQlzd2l0Y2ggKGkpIHsKK1gJCWNhc2UgMDoKK1gJCQlpZiAoaW8wIHx8IGlycSB8fCBtZW0pIHsKK1gJCQkJcHJpbnRmKCJkc3AgMHgleCAlZCAweCV4XG4iLCBpbzAsIGlycSwgbWVtKTsKK1gJCQkJKytjb3VudDsKK1gJCQl9CitYCQkJYnJlYWs7CitYCQljYXNlIDE6CitYCQkJaWYgKGlvMCB8fCBpcnEpIHsKK1gJCQkJcHJpbnRmKCJtcHUgMHgleCAlZFxuIiwgaW8wLCBpcnEpOworWAkJCQkrK2NvdW50OworWAkJCX0KK1gJCQlicmVhazsKK1gJCWNhc2UgMjoKK1gJCQlpZiAoaW8wIHx8IGlvMSB8fCBpcnEpIHsKK1gJCQkJcHJpbnRmKCJpZGUgMHgleCAweCV4ICVkXG4iLCBpbzAsIGlvMSwgaXJxKTsKK1gJCQkJKytjb3VudDsKK1gJCQl9CitYCQkJYnJlYWs7CitYCQljYXNlIDM6CitYCQkJaWYgKGlvMCkgeworWAkJCQlwcmludGYoImpveXN0aWNrIDB4JXhcbiIsIGlvMCk7CitYCQkJCSsrY291bnQ7CitYCQkJfQorWAkJCWJyZWFrOworWAkJfQorWAl9CitYCitYCWlmIChjb3VudCA9PSAwKQorWAkJZnByaW50ZihzdGRlcnIsICJubyBkZXZpY2VzIGNvbmZpZ3VyZWRcbiIpOworWAkKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IGNmZ19kc3AoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJaW50IGlvLCBpcnEsIG1lbTsKK1gKK1gJaWYgKGFyZ2MgPCAzIHx8CitYCSAgICBzc2NhbmYoYXJndlswXSwgIjB4JXgiLCAmaW8pICE9IDEgfHwKK1gJICAgIHNzY2FuZihhcmd2WzFdLCAiJWQiLCAmaXJxKSAhPSAxIHx8CitYCSAgICBzc2NhbmYoYXJndlsyXSwgIjB4JXgiLCAmbWVtKSAhPSAxKQorWAkJdXNhZ2UoKTsKK1gKK1gJaWYgKCEoaW8gPT0gMHgyOTAgfHwKK1gJICAgICAgaW8gPT0gMHgyNjAgfHwKK1gJICAgICAgaW8gPT0gMHgyNTAgfHwKK1gJICAgICAgaW8gPT0gMHgyNDAgfHwKK1gJICAgICAgaW8gPT0gMHgyMzAgfHwKK1gJICAgICAgaW8gPT0gMHgyMjAgfHwKK1gJICAgICAgaW8gPT0gMHgyMTAgfHwKK1gJICAgICAgaW8gPT0gMHgzZTApKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpbyBtdXN0IGJlIG9uZSBvZiAiCitYCQkJIjIxMCwgMjIwLCAyMzAsIDI0MCwgMjUwLCAyNjAsIDI5MCwgb3IgM0UwXG4iKTsKK1gJCXVzYWdlKCk7CitYCX0KK1gJCitYCWlmICghKGlycSA9PSA1IHx8CitYCSAgICAgIGlycSA9PSA3IHx8CitYCSAgICAgIGlycSA9PSA5IHx8CitYCSAgICAgIGlycSA9PSAxMCB8fAorWAkgICAgICBpcnEgPT0gMTEgfHwKK1gJICAgICAgaXJxID09IDEyKSkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogaXJxIG11c3QgYmUgb25lIG9mICIKK1gJCQkiNSwgNywgOSwgMTAsIDExIG9yIDEyXG4iKTsKK1gJCXVzYWdlKCk7CitYCX0KK1gKK1gJaWYgKCEobWVtID09IDB4YjAwMDAgfHwKK1gJICAgICAgbWVtID09IDB4YzgwMDAgfHwKK1gJICAgICAgbWVtID09IDB4ZDAwMDAgfHwKK1gJICAgICAgbWVtID09IDB4ZDgwMDAgfHwKK1gJICAgICAgbWVtID09IDB4ZTAwMDAgfHwKK1gJICAgICAgbWVtID09IDB4ZTgwMDApKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBtZW0gbXVzdCBiZSBvbmUgb2YgIgorWAkJCSIweGIwMDAwLCAweGM4MDAwLCAweGQwMDAwLCAweGQ4MDAwLCAweGUwMDAwIG9yIDB4ZTgwMDBcbiIpOworWAkJdXNhZ2UoKTsKK1gJfQorWAorWAlyZXR1cm4gbXNuZF93cml0ZV9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgMCwgaW8sIDAsIGlycSwgbWVtKTsKK30KK1gKK3N0YXRpYyBpbnQgY2ZnX21wdShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworWAlpbnQgaW8sIGlycTsKK1gKK1gJaWYgKGFyZ2MgPCAyIHx8CitYCSAgICBzc2NhbmYoYXJndlswXSwgIjB4JXgiLCAmaW8pICE9IDEgfHwKK1gJICAgIHNzY2FuZihhcmd2WzFdLCAiJWQiLCAmaXJxKSAhPSAxKQorWAkJdXNhZ2UoKTsKK1gJCitYCXJldHVybiBtc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNvbmZpZ19wb3J0LCAxLCBpbywgMCwgaXJxLCAwKTsKK30KK1gKK3N0YXRpYyBpbnQgY2ZnX2lkZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworWAlpbnQgaW8wLCBpbzEsIGlycTsKK1gKK1gJaWYgKGFyZ2MgPCAzIHx8CitYCSAgICBzc2NhbmYoYXJndlswXSwgIjB4JXgiLCAmaW8wKSAhPSAxIHx8CitYCSAgICBzc2NhbmYoYXJndlswXSwgIjB4JXgiLCAmaW8xKSAhPSAxIHx8CitYCSAgICBzc2NhbmYoYXJndlsxXSwgIiVkIiwgJmlycSkgIT0gMSkKK1gJCXVzYWdlKCk7CitYCQorWAlyZXR1cm4gbXNuZF93cml0ZV9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgMiwgaW8wLCBpbzEsIGlycSwgMCk7Cit9CitYCitzdGF0aWMgaW50IGNmZ19qb3lzdGljayhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworWAlpbnQgaW87CitYCitYCWlmIChhcmdjIDwgMSB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvKSAhPSAxKQorWAkJdXNhZ2UoKTsKK1gJCitYCXJldHVybiBtc25kX3dyaXRlX2NmZ19sb2dpY2FsKGNvbmZpZ19wb3J0LCAzLCBpbywgMCwgMCwgMCk7Cit9CitYCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworWAljaGFyICpkZXZpY2U7CitYCWludCBydiA9IDA7CitYCitYCS0tYXJnYzsgKythcmd2OworWAorWAlpZiAoYXJnYyA8IDIpCitYCQl1c2FnZSgpOworWAorWAlzc2NhbmYoYXJndlswXSwgIjB4JXgiLCAmY29uZmlnX3BvcnQpOworWAlpZiAoY29uZmlnX3BvcnQgIT0gMHgyNTAgJiYgY29uZmlnX3BvcnQgIT0gMHgyNjAgJiYgY29uZmlnX3BvcnQgIT0gMHgyNzApIHsKK1gJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IDxjb25maWcgcG9ydD4gbXVzdCBiZSAweDI1MCwgMHgyNjAgb3IgMHgyNzBcbiIpOworWAkJZXhpdCgxKTsKK1gJfQorWAlpZiAoaW9wZXJtKGNvbmZpZ19wb3J0LCAyLCAxKSkgeworWAkJcGVycm9yKCJpb3Blcm0iKTsKK1gJCWZwcmludGYoc3RkZXJyLCAibm90ZTogcGlubmFjbGVjZmcgbXVzdCBiZSBydW4gYXMgcm9vdFxuIik7CitYCQlleGl0KDEpOworWAl9CitYCWRldmljZSA9IGFyZ3ZbMV07CitYCitYCWFyZ2MgLT0gMjsgYXJndiArPSAyOworWAorWAlpZiAoc3RyY21wKGRldmljZSwgInJlc2V0IikgPT0gMCkKK1gJCXJ2ID0gY2ZnX3Jlc2V0KCk7CitYCWVsc2UgaWYgKHN0cmNtcChkZXZpY2UsICJzaG93IikgPT0gMCkKK1gJCXJ2ID0gY2ZnX3Nob3coKTsKK1gJZWxzZSBpZiAoc3RyY21wKGRldmljZSwgImRzcCIpID09IDApCitYCQlydiA9IGNmZ19kc3AoYXJnYywgYXJndik7CitYCWVsc2UgaWYgKHN0cmNtcChkZXZpY2UsICJtcHUiKSA9PSAwKQorWAkJcnYgPSBjZmdfbXB1KGFyZ2MsIGFyZ3YpOworWAllbHNlIGlmIChzdHJjbXAoZGV2aWNlLCAiaWRlIikgPT0gMCkKK1gJCXJ2ID0gY2ZnX2lkZShhcmdjLCBhcmd2KTsKK1gJZWxzZSBpZiAoc3RyY21wKGRldmljZSwgImpveXN0aWNrIikgPT0gMCkKK1gJCXJ2ID0gY2ZnX2pveXN0aWNrKGFyZ2MsIGFyZ3YpOworWAllbHNlIHsKK1gJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHVua25vd24gZGV2aWNlICVzXG4iLCBkZXZpY2UpOworWAkJdXNhZ2UoKTsKK1gJfQorWAorWAlpZiAocnYpCitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBkZXZpY2UgY29uZmlndXJhdGlvbiBmYWlsZWRcbiIpOworWAkKK1gJcmV0dXJuIDA7Cit9CitTSEFSX0VPRgorICAkc2hhcl90b3VjaCAtYW0gMTIwNDA5MjU5OCAnTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMnICYmCisgIGNobW9kIDA2NjQgJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jJyB8fAorICAkZWNobyAncmVzdG9yZSBvZicgJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jJyAnZmFpbGVkJworICBpZiAoIG1kNXN1bSAtLWhlbHAgMj4mMSB8IGdyZXAgJ3NhZ2U6IG1kNXN1bSBcWycgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiAoIG1kNXN1bSAtLXZlcnNpb24gMj4mMSB8IGdyZXAgLXYgJ3RleHR1dGlscyAxLjEyJyApID4vZGV2L251bGw7IHRoZW4KKyAgICBtZDVzdW0gLWMgPDwgU0hBUl9FT0YgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICB8fCAkZWNobyAnTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmM6JyAnTUQ1IGNoZWNrIGZhaWxlZCcKKzM2NmJkZjI3ZjBkYjc2N2EzYzc5MjFkMGE2ZGIyMGZlICBNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYworU0hBUl9FT0YKKyAgZWxzZQorICAgIHNoYXJfY291bnQ9ImBMQ19BTEw9IExDX0NUWVBFPSBMQU5HPSB3YyAtYyA8ICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYydgIgorICAgIHRlc3QgMTAyMzUgLWVxICIkc2hhcl9jb3VudCIgfHwKKyAgICAkZWNobyAnTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmM6JyAnb3JpZ2luYWwgc2l6ZScgJzEwMjM1LCcgJ2N1cnJlbnQgc2l6ZScgIiRzaGFyX2NvdW50ISIKKyAgZmkKK2ZpCisjID09PT09PT09PT09PT0gTXVsdGlTb3VuZC5kL01ha2VmaWxlID09PT09PT09PT09PT09CitpZiB0ZXN0IC1mICdNdWx0aVNvdW5kLmQvTWFrZWZpbGUnICYmIHRlc3QgIiRmaXJzdF9wYXJhbSIgIT0gLWM7IHRoZW4KKyAgJGVjaG8gJ3ggLScgU0tJUFBJTkcgJ011bHRpU291bmQuZC9NYWtlZmlsZScgJyhmaWxlIGFscmVhZHkgZXhpc3RzKScKK2Vsc2UKKyAgJGVjaG8gJ3ggLScgZXh0cmFjdGluZyAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyAnKHRleHQpJworICBzZWQgJ3MvXlgvLycgPDwgJ1NIQVJfRU9GJyA+ICdNdWx0aVNvdW5kLmQvTWFrZWZpbGUnICYmCitDQwk9IGdjYworQ0ZMQUdTCT0gLU8KK1BST0dTCT0gc2V0ZGlnaXRhbCBtc25kcmVzZXQgcGlubmFjbGVjZmcgY29udgorWAorYWxsOiAkKFBST0dTKQorWAorY2xlYW46CitYCXJtIC1mICQoUFJPR1MpCitTSEFSX0VPRgorICAkc2hhcl90b3VjaCAtYW0gMTIwNDA5MjM5OCAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyAmJgorICBjaG1vZCAwNjY0ICdNdWx0aVNvdW5kLmQvTWFrZWZpbGUnIHx8CisgICRlY2hvICdyZXN0b3JlIG9mJyAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyAnZmFpbGVkJworICBpZiAoIG1kNXN1bSAtLWhlbHAgMj4mMSB8IGdyZXAgJ3NhZ2U6IG1kNXN1bSBcWycgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiAoIG1kNXN1bSAtLXZlcnNpb24gMj4mMSB8IGdyZXAgLXYgJ3RleHR1dGlscyAxLjEyJyApID4vZGV2L251bGw7IHRoZW4KKyAgICBtZDVzdW0gLWMgPDwgU0hBUl9FT0YgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICB8fCAkZWNobyAnTXVsdGlTb3VuZC5kL01ha2VmaWxlOicgJ01ENSBjaGVjayBmYWlsZWQnCis3NmNhOGJiNDRlMzg4MmVkY2Y3OWM5N2RmNmM4MTg0NSAgTXVsdGlTb3VuZC5kL01ha2VmaWxlCitTSEFSX0VPRgorICBlbHNlCisgICAgc2hhcl9jb3VudD0iYExDX0FMTD0gTENfQ1RZUEU9IExBTkc9IHdjIC1jIDwgJ011bHRpU291bmQuZC9NYWtlZmlsZSdgIgorICAgIHRlc3QgMTA2IC1lcSAiJHNoYXJfY291bnQiIHx8CisgICAgJGVjaG8gJ011bHRpU291bmQuZC9NYWtlZmlsZTonICdvcmlnaW5hbCBzaXplJyAnMTA2LCcgJ2N1cnJlbnQgc2l6ZScgIiRzaGFyX2NvdW50ISIKKyAgZmkKK2ZpCisjID09PT09PT09PT09PT0gTXVsdGlTb3VuZC5kL2NvbnYubCA9PT09PT09PT09PT09PQoraWYgdGVzdCAtZiAnTXVsdGlTb3VuZC5kL2NvbnYubCcgJiYgdGVzdCAiJGZpcnN0X3BhcmFtIiAhPSAtYzsgdGhlbgorICAkZWNobyAneCAtJyBTS0lQUElORyAnTXVsdGlTb3VuZC5kL2NvbnYubCcgJyhmaWxlIGFscmVhZHkgZXhpc3RzKScKK2Vsc2UKKyAgJGVjaG8gJ3ggLScgZXh0cmFjdGluZyAnTXVsdGlTb3VuZC5kL2NvbnYubCcgJyh0ZXh0KScKKyAgc2VkICdzL15YLy8nIDw8ICdTSEFSX0VPRicgPiAnTXVsdGlTb3VuZC5kL2NvbnYubCcgJiYKKyUlCitbIFxuXHQsXHJdCitcOy4qCitEQgorWzAtOUEtRmEtZl0rSAl7IGludCBuOyBzc2NhbmYoeXl0ZXh0LCAiJXhIIiwgJm4pOyBwcmludGYoIiVjIiwgbik7IH0KKyUlCitpbnQgeXl3cmFwKCkgeyByZXR1cm4gMTsgfQorbWFpbigpIHsgeXlsZXgoKTsgfQorU0hBUl9FT0YKKyAgJHNoYXJfdG91Y2ggLWFtIDA4MjgyMzE3OTggJ011bHRpU291bmQuZC9jb252LmwnICYmCisgIGNobW9kIDA2NjQgJ011bHRpU291bmQuZC9jb252LmwnIHx8CisgICRlY2hvICdyZXN0b3JlIG9mJyAnTXVsdGlTb3VuZC5kL2NvbnYubCcgJ2ZhaWxlZCcKKyAgaWYgKCBtZDVzdW0gLS1oZWxwIDI+JjEgfCBncmVwICdzYWdlOiBtZDVzdW0gXFsnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgKCBtZDVzdW0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC12ICd0ZXh0dXRpbHMgMS4xMicgKSA+L2Rldi9udWxsOyB0aGVuCisgICAgbWQ1c3VtIC1jIDw8IFNIQVJfRU9GID4vZGV2L251bGwgMj4mMSBcCisgICAgfHwgJGVjaG8gJ011bHRpU291bmQuZC9jb252Lmw6JyAnTUQ1IGNoZWNrIGZhaWxlZCcKK2QyNDExZmMzMmNkNzFhMDBkY2RjMWYwMDllODU4ZGQyICBNdWx0aVNvdW5kLmQvY29udi5sCitTSEFSX0VPRgorICBlbHNlCisgICAgc2hhcl9jb3VudD0iYExDX0FMTD0gTENfQ1RZUEU9IExBTkc9IHdjIC1jIDwgJ011bHRpU291bmQuZC9jb252LmwnYCIKKyAgICB0ZXN0IDE0MSAtZXEgIiRzaGFyX2NvdW50IiB8fAorICAgICRlY2hvICdNdWx0aVNvdW5kLmQvY29udi5sOicgJ29yaWdpbmFsIHNpemUnICcxNDEsJyAnY3VycmVudCBzaXplJyAiJHNoYXJfY291bnQhIgorICBmaQorZmkKKyMgPT09PT09PT09PT09PSBNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMgPT09PT09PT09PT09PT0KK2lmIHRlc3QgLWYgJ011bHRpU291bmQuZC9tc25kcmVzZXQuYycgJiYgdGVzdCAiJGZpcnN0X3BhcmFtIiAhPSAtYzsgdGhlbgorICAkZWNobyAneCAtJyBTS0lQUElORyAnTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jJyAnKGZpbGUgYWxyZWFkeSBleGlzdHMpJworZWxzZQorICAkZWNobyAneCAtJyBleHRyYWN0aW5nICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICcodGV4dCknCisgIHNlZCAncy9eWC8vJyA8PCAnU0hBUl9FT0YnID4gJ011bHRpU291bmQuZC9tc25kcmVzZXQuYycgJiYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1ggKgorWCAqIG1zbmRyZXNldC5jIC0gcmVzZXRzIHRoZSBNdWx0aVNvdW5kIGNhcmQKK1ggKgorWCAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorWCAqCitYICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK1ggKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorWCAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCitYICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK1ggKgorWCAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorWCAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitYICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorWCAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCitYICoKK1ggKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorWCAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitYICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCitYICoKK1ggKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitYCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3NvdW5kY2FyZC5oPgorWAoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJaW50IGZkOworWAorWAlpZiAoYXJnYyAhPSAyKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBtc25kcmVzZXQgPG1peGVyIGRldmljZT5cbiIpOworWAkJZXhpdCgxKTsKK1gJfQorWAorWAlpZiAoKGZkID0gb3Blbihhcmd2WzFdLCBPX1JEV1IpKSA8IDApIHsKK1gJCXBlcnJvcihhcmd2WzFdKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKGlvY3RsKGZkLCBTT1VORF9NSVhFUl9QUklWQVRFMSwgMCkgPCAwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBtc25kIGlvY3RsIHJlc2V0IGZhaWxlZFxuIik7CitYCQlwZXJyb3IoImlvY3RsIik7CitYCQljbG9zZShmZCk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWNsb3NlKGZkKTsKK1gJCitYCXJldHVybiAwOworfQorU0hBUl9FT0YKKyAgJHNoYXJfdG91Y2ggLWFtIDEyMDQxMDA2OTggJ011bHRpU291bmQuZC9tc25kcmVzZXQuYycgJiYKKyAgY2htb2QgMDY2NCAnTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jJyB8fAorICAkZWNobyAncmVzdG9yZSBvZicgJ011bHRpU291bmQuZC9tc25kcmVzZXQuYycgJ2ZhaWxlZCcKKyAgaWYgKCBtZDVzdW0gLS1oZWxwIDI+JjEgfCBncmVwICdzYWdlOiBtZDVzdW0gXFsnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgKCBtZDVzdW0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC12ICd0ZXh0dXRpbHMgMS4xMicgKSA+L2Rldi9udWxsOyB0aGVuCisgICAgbWQ1c3VtIC1jIDw8IFNIQVJfRU9GID4vZGV2L251bGwgMj4mMSBcCisgICAgfHwgJGVjaG8gJ011bHRpU291bmQuZC9tc25kcmVzZXQuYzonICdNRDUgY2hlY2sgZmFpbGVkJworYzUyZjg3NjUyMTA4NGU4ZWIyNWUxMmUwMWRjY2NiOGEgIE11bHRpU291bmQuZC9tc25kcmVzZXQuYworU0hBUl9FT0YKKyAgZWxzZQorICAgIHNoYXJfY291bnQ9ImBMQ19BTEw9IExDX0NUWVBFPSBMQU5HPSB3YyAtYyA8ICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnYCIKKyAgICB0ZXN0IDE0NzIgLWVxICIkc2hhcl9jb3VudCIgfHwKKyAgICAkZWNobyAnTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jOicgJ29yaWdpbmFsIHNpemUnICcxNDcyLCcgJ2N1cnJlbnQgc2l6ZScgIiRzaGFyX2NvdW50ISIKKyAgZmkKK2ZpCitybSAtZnIgX3NoMDE0MjYKK2V4aXQgMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTkVXUyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL05FV1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxZTBlZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL05FV1MKQEAgLTAsMCArMSw0MiBAQAorTGludXggMi40IFNvdW5kIENoYW5nZXMKKzIwMDAtU2VwdGVtYmVyLTI1CitDaHJpc3RvcGggSGVsbHdpZywgPGhjaEBpbmZyYWRlYWQub3JnPgorCisKKworPT09IGlzYXBucCBzdXBwb3J0CisKK1RoZSBMaW51eCAyLjQgS2VybmVsIGRvZXMgaGF2ZSByZWxpYWJsZSBpbi1rZXJuZWwgaXNhcG5wIHN1cHBvcnQuCitTb21lIGRyaXZlcnMgKHNiLm8sIGFkMTgxNi5vIGF3ZV93YXZlLm8pIGRvIG5vdyBzdXBwb3J0IGF1dG9tYXRpY2FsbHkKK2RldGVjdGluZyBhbmQgY29uZmlndXJpbmcgaXNhcG5wIGRldmljZXMuCitJZiB5b3UgaGF2ZSBhIG5vdCB5ZXQgc3VwcG9ydGVkIGlzYXBucCBzb3VuZGNhcmQsIG1haWwgbWUgdGhlIGNvbnRlbnQKK29mICcvcHJvYy9pc2FwbnAnIG9uIHlvdXIgc3lzdGVtIGFuZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgY2FyZAorYW5kIGl0cyBkcml2ZXIocykgc28gSSBjYW4gdHJ5IHRvIGdldCBpc2FwbnAgd29ya2luZyBmb3IgaXQuCisKKworCis9PT0gc291bmRjYXJkIHJlc291cmNlcyBvbiBrZXJuZWwgY29tbWFuZGxpbmUKKworQmVmb3JlIExpbnV4IDIuNCB5b3UgaGFkIHRvIHNwZWNpZnkgdGhlIHJlc291cmNlcyBmb3Igc291bmRkcml2ZXJzCitzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwgYXQgY29tcGlsZSB0aW1lCisoaW4gbWFrZSBjb25maWcvbWVudWNvbmZpZy94Y29uZmlnKS4gSW4gTGludXggMi40IHRoZSByZXNvdXJjZXMgYXJlCitub3cgc3BlY2lmaWVkIGF0IHRoZSBib290LXRpbWUga2VybmVsIGNvbW1hbmRsaW5lIChlLmcuIHRoZSBsaWxvCisnYXBwZW5kPScgbGluZSBvciBldmVyeXRoaW5nIHRoYXQncyBhZnRlciB0aGUga2VybmVsIG5hbWUgaW4gZ3J1YikuCitSZWFkIHRoZSBDb25maWd1cmUuaGVscCBlbnRyeSBmb3IgeW91ciBjYXJkIGZvciB0aGUgcGFyYW1ldGVycy4KKworCis9PT0gc29mdG9zcyBpcyBnb25lCisKK0luIExpbnV4IDIuNCB0aGUgc29mdG9zcyBpbi1rZXJuZWwgc29mdHdhcmUgc3ludGhlc2l6ZXIgaXMgbm8gbW9yZSBhdmlhYmxlLgorVXNlIGEgdXNlciBzcGFjZSBzb2Z0d2FyZSBzeW50aGVzaXplciBsaWtlIHRpbWlkaXR5IGluc3RlYWQuCisKKworCis9PT0gL2Rldi9zbmRzdGF0IGFuZCAvcHJvYy9zb3VuZCBhcmUgZ29uZQorCitJbiBvbGRlciBMaW51eCB2ZXJzaW9ucyB0aG9zZSBmaWxlcyBleHBvcnRlZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZQorT1NTL0ZyZWUgY29uZmlndXJhdGlvbiB0byB1c2Vyc3BhY2UuIEluIExpbnV4IDIuMyB0aGV5IHdlcmUgcmVtb3ZlZCBiZWNhdXNlCit0aGV5IGRpZCBub3Qgc3VwcG9ydCB0aGUgZ3Jvd2luZyBudW1iZXIgb2YgcGNpIHNvdW5kY2FyZHMgYW5kIHRoZXJlIHdlcmUKK3NvbWUgZ2VuZXJhbCBwcm9ibGVtcyB3aXRoIHRoaXMgaW50ZXJmYWNlLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL05NMjU2IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTk0yNTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwMzIxNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL05NMjU2CkBAIC0wLDAgKzEsMjgwIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitEb2N1bWVudGF0aW9uIGZvciB0aGUgTmVvTWFnaWMgMjU2QVYvMjU2Wlggc291bmQgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSdyZSBsb29raW5nIGF0IHZlcnNpb24gMS4xIG9mIHRoZSBkcml2ZXIuICAoV29vaG9vISkgSXQgaGFzIGJlZW4KK3N1Y2Nlc3NmdWxseSB0ZXN0ZWQgYWdhaW5zdCB0aGUgZm9sbG93aW5nIGxhcHRvcCBtb2RlbHM6CisKKwlTb255IFo1MDVTL1o1MDVTWC9aNTA1RFgvWjUwNVJYCisJU29ueSBGMTUwLCBGMTYwLCBGMTgwLCBGMjUwLCBGMjcwLCBGMjgwLCBQQ0ctRjI2CisJRGVsbCBMYXRpdHVkZSBDUGksIENQdCAodmFyaW91cyBzdWJtb2RlbHMpCisKK1RoZXJlIGFyZSBhIGZldyBjYXZlYXRzLCB3aGljaCBpcyB3aHkgeW91IHNob3VsZCByZWFkIHRoZSBlbnRpcmV0eSBvZgordGhpcyBkb2N1bWVudCBmaXJzdC4KKworVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCB3aXRob3V0IGFueSBzdXBwb3J0IG9yIGFzc2lzdGFuY2UgZnJvbQorTmVvTWFnaWMuICBUaGVyZSBpcyBubyB3YXJyYW50eSwgZXhwcmVzc2VkLCBpbXBsaWVkLCBvciBvdGhlcndpc2UuICBJdAoraXMgZnJlZSBzb2Z0d2FyZSBpbiB0aGUgcHVibGljIGRvbWFpbjsgZmVlbCBmcmVlIHRvIHVzZSBpdCwgc2VsbCBpdCwKK2dpdmUgaXQgdG8geW91ciBiZXN0IGZyaWVuZHMsIGV2ZW4gY2xhaW0gdGhhdCB5b3Ugd3JvdGUgaXQgKGJ1dCB3aHk/ISkKK2J1dCBkb24ndCBnbyB3aGluaW5nIHRvIG1lLCBOZW9NYWdpYywgU29ueSwgRGVsbCwgb3IgYW55b25lIGVsc2UKK3doZW4gaXQgYmxvd3MgdXAgeW91ciBjb21wdXRlci4KKworVmVyc2lvbiAxLjEgY29udGFpbnMgYSBjaGFuZ2UgdG8gdHJ5IGFuZCBkZXRlY3Qgbm9uLUFDOTcgdmVyc2lvbnMgb2YKK3RoZSBoYXJkd2FyZSwgYW5kIG5vdCBpbnN0YWxsIGl0c2VsZiBhcHByb3ByaWF0ZWx5LiAgSXQgc2hvdWxkIGFsc28KK3JlaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgb24gYW4gQVBNIHJlc3VtZSBldmVudCwgYXNzdW1pbmcgdGhhdCBBUE0KK3dhcyBjb25maWd1cmVkIGludG8geW91ciBrZXJuZWwuCisKKz09PT09PT09PT09PQorSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT0KKworRW5hYmxlIHRoZSBzb3VuZCBkcml2ZXJzLCB0aGUgT1NTIHNvdW5kIGRyaXZlcnMsIGFuZCB0aGVuIHRoZSBOTTI1NgorZHJpdmVyLiAgVGhlIE5NMjU2IGRyaXZlciAqbXVzdCogYmUgY29uZmlndXJlZCBhcyBhIG1vZHVsZSAoaXQgd29uJ3QKK2dpdmUgeW91IGFueSBvdGhlciBjaG9pY2UpLgorCitOZXh0LCBkbyB0aGUgdXN1YWwgIm1ha2UgbW9kdWxlcyIgYW5kICJtYWtlIG1vZHVsZXNfaW5zdGFsbCIuCitGaW5hbGx5LCBpbnNtb2QgdGhlIHNvdW5kY29yZSwgc291bmQgYW5kIG5tMjU2IG1vZHVsZXMuCisKK1doZW4gdGhlIG5tMjU2IGRyaXZlciBtb2R1bGUgaXMgbG9hZGVkLCB5b3Ugc2hvdWxkIHNlZSBhIGNvdXBsZSBvZgorY29uZmlybWF0aW9uIG1lc3NhZ2VzIGluIHRoZSBrZXJuZWwgbG9nZmlsZSBpbmRpY2F0aW5nIHRoYXQgaXQgZm91bmQKK3RoZSBkZXZpY2UgKHRoZSBkZXZpY2UgZG9lcyAqbm90KiB1c2UgYW55IEkvTyBwb3J0cyBvciBETUEgY2hhbm5lbHMpLgorTm93IHRyeSBwbGF5aW5nIGEgd2F2IGZpbGUsIGZ1dHogd2l0aCB0aGUgQ0QtUk9NIGlmIHlvdSBoYXZlIG9uZSwgZXRjLgorCitUaGUgTk0yNTYgaXMgZW50aXJlbHkgYSBQQ0ktYmFzZWQgZGV2aWNlLCBhbmQgYWxsIHRoZSBuZWNlc3NhcnkKK2luZm9ybWF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgb2J0YWluZWQgZnJvbSB0aGUgY2FyZC4gIEl0IGNhbiBvbmx5IGJlCitjb25maWd1cmVkIGFzIGEgbW9kdWxlIGluIGEgdmFpbiBhdHRlbXB0IHRvIHByZXZlbnQgcGVvcGxlIGZyb20KK2h1cnRpbmcgdGhlbXNlbHZlcy4gIEl0IHdvcmtzIGNvcnJlY3RseSBpZiBpdCBzaGFyZXMgYW4gSVJRIHdpdGgKK2Fub3RoZXIgZGV2aWNlIChpdCBub3JtYWxseSBzaGFyZXMgSVJRIDkgd2l0aCB0aGUgYnVpbHRpbiBlZXBybzEwMAorZXRoZXJuZXQgb24gdGhlIFNvbnkgWjUwNSBsYXB0b3BzKS4gCisKK0l0IGRvZXMgbm90IHJ1biB0aGUgY2FyZCBpbiBhbnkgc29ydCBvZiBjb21wYXRpYmlsaXR5IG1vZGUuIEl0IHdpbGwKK25vdCB3b3JrIG9uIGxhcHRvcHMgdGhhdCBoYXZlIHRoZSBTQjE2LWNvbXBhdGlibGUsIEFEMTg0OC1jb21wYXRpYmxlCitvciBDUzQyMzItY29tcGF0aWJsZSBjb2RlYy9taXhlcjsgeW91IHdpbGwgd2FudCB0byB1c2UgdGhlIGFwcHJvcHJpYXRlCitjb21wYXRpYmxlIE9TUyBkcml2ZXIgd2l0aCB0aGVzZSBjaGlwc2V0cy4gIEkgY2Fubm90IHByb3ZpZGUgYW55Cithc3Npc3RhbmNlIHdpdGggbWFjaGluZXMgdXNpbmcgdGhlIFNCMTYsIEFEMTg0OCBvciBDUzQyMzIgY29tcGF0aWJsZQordmVyc2lvbnMuICAoVGhlIGRyaXZlciBub3cgYXR0ZW1wdHMgdG8gZGV0ZWN0IHRoZSBtaXhlciB2ZXJzaW9uLCBhbmQKK3dpbGwgcmVmdXNlIHRvIGxvYWQgaWYgaXQgYmVsaWV2ZXMgdGhlIGhhcmR3YXJlIGlzIG5vdAorQUM5Ny1jb21wYXRpYmxlLikKKworVGhlIHNvdW5kIHN1cHBvcnQgaXMgdmVyeSBiYXNpYywgYnV0IGl0IGRvZXMgaW5jbHVkZSBzaW11bHRhbmVvdXMKK3BsYXliYWNrIGFuZCByZWNvcmQgY2FwYWJpbGl0eS4gIFRoZSBtaXhlciBzdXBwb3J0IGlzIGFsc28gcXVpdGUKK3NpbXBsZSwgYWx0aG91Z2ggdGhpcyBpcyBpbiBrZWVwaW5nIHdpdGggdGhlIHJhdGhlciBsaW1pdGVkCitmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaGlwc2V0LgorCitUaGVyZSBpcyBubyBoYXJkd2FyZSBzeW50aGVzaXplciBhdmFpbGFibGUsIGFzIHRoZSBMb3NlZG93cyBPUEwtMyBhbmQKK01JREkgc3VwcG9ydCBpcyBkb25lIHZpYSBoYXJkd2FyZSBlbXVsYXRpb24uCisKK09ubHkgdGhyZWUgcmVjb3JkaW5nIGRldmljZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgU29ueTogdGhlCittaWNyb3Bob25lLCB0aGUgQ0QtUk9NIGlucHV0LCBhbmQgdGhlIHZvbHVtZSBkZXZpY2UgKHdoaWNoIGNvcnJlc3BvbmRzCit0byB0aGUgc3RlcmVvIG91dHB1dCkuICAoT3RoZXIgZGV2aWNlcyBtYXkgYmUgYXZhaWxhYmxlIG9uIG90aGVyCittb2RlbHMgb2YgbGFwdG9wcy4pICBUaGUgWjUwNSBzZXJpZXMgZG9lcyBub3QgaGF2ZSBhIGJ1aWx0aW4gQ0QtUk9NLAorc28gb2YgY291cnNlIHRoZSBDRC1ST00gaW5wdXQgZG9lc24ndCB3b3JrLiAgSXQgZG9lcyB3b3JrIG9uIGxhcHRvcHMKK3dpdGggYSBidWlsdGluIENELVJPTSBkcml2ZS4KKworVGhlIG1peGVyIGRldmljZSBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSBhbnkgdG9uZSBjb250cm9scywgYXQgbGVhc3QKK29uIHRoZSBaNTA1IHNlcmllcy4gIFRoZSBtaXhlciBtb2R1bGUgY2hlY2tzIGZvciB0b25lIGNvbnRyb2xzIGluIHRoZQorQUM5NyBtaXhlciwgYW5kIHdpbGwgZW5hYmxlIHRoZW0gaWYgdGhleSBhcmUgYXZhaWxhYmxlLgorCis9PT09PT09PT09PT09PQorS25vd24gcHJvYmxlbXMKKz09PT09PT09PT09PT09CisKKyAgKiBUaGVyZSBhcmUga25vd24gcHJvYmxlbXMgd2l0aCBQQ01DSUEgY2FyZHMgYW5kIHRoZSBlZXBybzEwMCBldGhlcm5ldCAKKyAgICBkcml2ZXIgb24gdGhlIFo1MDVTL1o1MDVTWC9aNTA1RFguICBLZWVwIHJlYWRpbmcuCisKKyAgKiBUaGVyZSBhcmUgYWxzbyBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCB1c2luZyBhIHZpcnR1YWwgWCBkaXNwbGF5LCBhbmQKKyAgICBhbHNvIHByb2JsZW1zIGxvYWRpbmcgdGhlIG1vZHVsZSBhZnRlciB0aGUgWCBzZXJ2ZXIgaGFzIGJlZW4gc3RhcnRlZC4gCisgICAgS2VlcCByZWFkaW5nLgorCisgICogVGhlIHZvbHVtZSBjb250cm9sIGlzbid0IGFueXdoZXJlIG5lYXIgbGluZWFyLiAgU29ycnkuICBUaGlzIHdpbGwgYmUKKyAgICBmaXhlZCBldmVudHVhbGx5LCB3aGVuIEkgZ2V0IHN1ZmZpY2llbnRseSBhbm5veWVkIHdpdGggaXQuICAoSSBkb3VidAorICAgIGl0IHdpbGwgZXZlciBiZSBmaXhlZCBub3csIHNpbmNlIEkndmUgbmV2ZXIgZ290dGVuIHN1ZmZpY2llbnRseQorICAgIGFubm95ZWQgd2l0aCBpdCBhbmQgbm9ib2R5IGVsc2Ugc2VlbXMgdG8gY2FyZS4pCisKKyAgKiBUaGVyZSBhcmUgcmVwb3J0cyB0aGF0IHRoZSBDRC1ST00gdm9sdW1lIGlzIHZlcnkgbG93LiAgU2luY2UgSSBkbyBub3QKKyAgICBoYXZlIGEgQ0QtUk9NIGVxdWlwcGVkIGxhcHRvcCwgSSBjYW5ub3QgdGVzdCB0aGlzIChpdCdzIGtpbmRhIGhhcmQgdG8KKyAgICBkbyByZW1vdGVseSkuCisKKyAgKiBPbmx5IDggZml4ZWQtcmF0ZSBzcGVlZHMgYXJlIHN1cHBvcnRlZC4gIFRoaXMgaXMgbWFpbmx5IGEgY2hpcHNldAorICAgIGxpbWl0YXRpb24uICBJdCBtYXkgYmUgcG9zc2libGUgdG8gc3VwcG9ydCBvdGhlciBzcGVlZHMgaW4gdGhlIGZ1dHVyZS4KKworICAqIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHRoZSB0ZWxlcGhvbmUgbWl4ZXIvY29kZWMuICBUaGVyZSBpcyBzdXBwb3J0CisgICAgZm9yIGEgcGhvbmVpbi9waG9uZW91dCBkZXZpY2UgaW4gdGhlIG1peGVyIGRyaXZlcjsgIHdoZXRoZXIgb3Igbm90IAorICAgIGl0IGRvZXMgYW55dGhpbmcgaXMgYW55b25lJ3MgZ3Vlc3MuICAoUmVwb3J0cyBvbiB0aGlzIHdvdWxkIGJlCisgICAgYXBwcmVjaWF0ZWQuICBZb3UnbGwgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0byBnZXQgdGhlIHBob25lIHRvCisgICAgZ28gb2ZmLWhvb2sgYmVmb3JlIGl0J2xsIHdvcmssIHRoby4pCisKKyAgKiBUaGlzIGRyaXZlciB3YXMgbm90IHdyaXR0ZW4gd2l0aCBhbnkgY29vcGVyYXRpb24gb3Igc3VwcG9ydCBmcm9tCisgICAgTmVvTWFnaWMuICBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMsIHNlZSB0aGVpciB3ZWJzaXRlCisgICAgZm9yIHRoZWlyIG9mZmljaWFsIHN0YW5jZSBvbiBzdXBwb3J0aW5nIG9wZW4gc291cmNlIGRyaXZlcnMuCisKKz09PT09PT09PT09PQorVmlkZW8gbWVtb3J5Cis9PT09PT09PT09PT0KKworVGhlIE5lb01hZ2ljIHNvdW5kIGVuZ2luZSB1c2VzIGEgcG9ydGlvbiBvZiB0aGUgZGlzcGxheSBtZW1vcnkgdG8gaG9sZAordGhlIHNvdW5kIGJ1ZmZlci4gIChDcmF6eSwgZWg/KSAgVGhlIE5lb01hZ2ljIHZpZGVvIEJJT1Mgc2V0cyB1cCBhCitzcGVjaWFsIHBvaW50ZXIgYXQgdGhlIHRvcCBvZiB2aWRlbyBSQU0gdG8gaW5kaWNhdGUgd2hlcmUgdGhlIHRvcCBvZgordGhlIGF1ZGlvIGJ1ZmZlciBzaG91bGQgYmUgcGxhY2VkLgorCitBdCB0aGUgcHJlc2VudCB0aW1lIFhGcmVlODYgaXMgYXBwYXJlbnRseSBub3QgYXdhcmUgb2YgdGhpcy4gIEl0IHdpbGwKK3RodXMgd3JpdGUgb3ZlciBlaXRoZXIgdGhlIHBvaW50ZXIgb3IgdGhlIHNvdW5kIGJ1ZmZlciB3aXRoIGFiYW5kb24uCisoQWNjZWxlcmF0ZWQtWCBzZWVtcyB0byBkbyBhIGJldHRlciBqb2IgaGVyZS4pCisKK1RoaXMgaW1wbGllcyBhIGZldyB0aGluZ3M6CisKKyAgKiBTb21ldGltZXMgdGhlIE5NMjU2IGRyaXZlciBoYXMgdG8gZ3Vlc3MgYXQgd2hlcmUgdGhlIGJ1ZmZlciAKKyAgICBzaG91bGQgYmUgcGxhY2VkLCBlc3BlY2lhbGx5IGlmIHRoZSBtb2R1bGUgaXMgbG9hZGVkIGFmdGVyIHRoZQorICAgIFggc2VydmVyIGlzIHN0YXJ0ZWQuICBJdCdzIHVzdWFsbHkgY29ycmVjdCwgYnV0IGl0IHdpbGwgY29uc2lzdGVudGx5CisgICAgZmFpbCBvbiB0aGUgU29ueSBGMjUwLgorCisgICogVmlydHVhbCBzY3JlZW5zIGdyZWF0ZXIgdGhhbiAxMDI0eDc2OHgxNiB1bmRlciBYRnJlZTg2IGFyZQorICAgIHByb2JsZW1hdGljIG9uIGxhcHRvcHMgd2l0aCBvbmx5IDIuNU1CIG9mIHNjcmVlbiBSQU0uIFRoaXMKKyAgICBpbmNsdWRlcyBhbGwgb2YgdGhlIDI1NkFWLWVxdWlwcGVkIGxhcHRvcHMuICAoVmlydHVhbCBkaXNwbGF5cworICAgIG1heSBvciBtYXkgbm90IHdvcmsgb24gdGhlIDI1NlpYLCB3aGljaCBoYXMgYXQgbGVhc3QgNE1CIG9mCisgICAgdmlkZW8gUkFNLikKKworSWYgeW91IHN0YXJ0IGhhdmluZyBwcm9ibGVtcyB3aXRoIHJhbmRvbSBub2lzZSBiZWluZyBvdXRwdXQgZWl0aGVyCitjb25zdGFudGx5ICh0aGlzIGlzIHRoZSB1c3VhbCBzeW1wdG9tIG9uIHRoZSBGMjUwKSwgb3Igd2hlbiB3aW5kb3dzCithcmUgbW92ZWQgYXJvdW5kICh0aGlzIGlzIHRoZSB1c3VhbCBzeW1wdG9tIHdoZW4gdXNpbmcgYSB2aXJ0dWFsCitzY3JlZW4pLCB0aGUgYmVzdCBmaXggaXMgdG8KKworICAqIERvbid0IHVzZSBhIHZpcnR1YWwgZnJhbWUgYnVmZmVyLgorICAqIE1ha2Ugc3VyZSB5b3UgbG9hZCB0aGUgTk0yNTYgbW9kdWxlIGJlZm9yZSB0aGUgWCBzZXJ2ZXIgaXMKKyAgICBzdGFydGVkLgorCitPbiB0aGUgRjI1MCwgaXQgaXMgcG9zc2libGUgdG8gZm9yY2UgdGhlIGRyaXZlciB0byBsb2FkIHByb3Blcmx5IGV2ZW4KK2FmdGVyIHRoZSBYRnJlZTg2IHNlcnZlciBpcyBzdGFydGVkIGJ5IGRvaW5nOgorCisJaW5zbW9kIG5tMjU2IGJ1ZmZlcnRvcD0weDI1YTgwMAorCitUaGlzIGZvcmNlcyB0aGUgYXVkaW8gYnVmZmVycyB0byB0aGUgY29ycmVjdCBvZmZzZXQgaW4gc2NyZWVuIFJBTS4KKworT25lIHVzZXIgaGFzIHJlcG9ydGVkIGEgc2ltaWxhciBwcm9ibGVtIG9uIHRoZSBTb255IEYyNzAsIGFsdGhvdWdoCitvdGhlcnMgYXBwYXJlbnRseSBhcmVuJ3Qgc2VlaW5nIGFueSBwcm9ibGVtcy4gIEhpcyBzdWdnZXN0ZWQgY29tbWFuZAoraXMKKworCWluc21vZCBubTI1NiBidWZmZXJ0b3A9MHgyNzI4MDAKKworPT09PT09PT09PT09PT09PT0KK09mZmljaWFsIFdXVyBzaXRlCis9PT09PT09PT09PT09PT09PQorCitUaGUgb2ZmaWNpYWwgc2l0ZSBmb3IgdGhlIE5NMjU2IGRyaXZlciBpczoKKworCWh0dHA6Ly93d3cudWdseC5vcmcvc29ueS5odG1sCisKK1lvdSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHRoZXJlLAorYW5kIHRoZSBkcml2ZXIgd2lsbCBiZSBzdXBwb3J0ZWQgZm9yIHRoZSBmb3Jlc2VlYWJsZSBmdXR1cmUuCisKKz09PT09PT09PT09PT09CitaNTA1UlggYW5kIElERQorPT09PT09PT09PT09PT0KKworVGhlcmUgYXBwZWFycyB0byBiZSBhIHByb2JsZW0gd2l0aCB0aGUgSURFIGNoaXBzZXQgb24gdGhlIFo1MDVSWDsgb25lCitvZiB0aGUgc3ltcHRvbXMgaXMgdGhhdCBzb3VuZCBwbGF5YmFjayBwZXJpb2RpY2FsbHkgaGFuZ3MgKHdoZW4gdGhlCitkaXNrIGlzIGFjY2Vzc2VkKS4gIFRoZSB1c2VyIHJlcG9ydGluZyB0aGUgcHJvYmxlbSBhbHNvIHJlcG9ydGVkIHRoYXQKK2VuYWJsaW5nIGFsbCBvZiB0aGUgSURFIGNoaXBzZXQgd29ya2Fyb3VuZHMgaW4gdGhlIGtlcm5lbCBzb2x2ZWQgdGhlCitwcm9ibGVtLCB0aG8gb2J2aW91c2x5IG9ubHkgb25lIG9mIHRoZW0gc2hvdWxkIGJlIG5lZWRlZC0taWYgc29tZW9uZQorY2FuIGdpdmUgbWUgbW9yZSBkZXRhaWxzIEkgd291bGQgYXBwcmVjaWF0ZSBpdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitaNTA1Uy9aNTA1U1ggb24tYm9hcmQgRXRoZXJuZXQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB5b3UncmUgdXNpbmcgdGhlIG9uLWJvYXJkIEV0aGVybmV0IFByby8xMDAgZXRoZXJuZXQgc3VwcG9ydCBvbiB0aGUgWjUwNQorc2VyaWVzLCBJIHN0cm9uZ2x5IGVuY291cmFnZSB5b3UgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCBlZXBybzEwMCBkcml2ZXIgZnJvbQorRG9uYWxkIEJlY2tlcidzIHNpdGU6CisKKwlmdHA6Ly9jZXNkaXMuZ3NmYy5uYXNhLmdvdi9wdWIvbGludXgvZHJpdmVycy90ZXN0L2VlcHJvMTAwLmMKKworVGhlcmUgd2FzIGEgcmVwb3J0ZWQgcHJvYmxlbSBvbiB0aGUgWjUwNVNYIHRoYXQgaWYgdGhlIGV0aGVybmV0CitpbnRlcmZhY2UgaXMgZGlzYWJsZWQgYW5kIHJlZW5hYmxlZCB3aGlsZSB0aGUgc291bmQgZHJpdmVyIGlzIGxvYWRlZCwKK3RoZSBtYWNoaW5lIHdvdWxkIGxvY2sgdXAuICBJIGhhdmUgaW5jbHVkZWQgYSB3b3JrYXJvdW5kIHRoYXQgaXMKK3dvcmtpbmcgc2F0aXNmYWN0b3JpbHkuICBIb3dldmVyLCB5b3UgbWF5IG9jY2FzaW9uYWxseSBzZWUgYSBtZXNzYWdlCithYm91dCAiUmVsZWFzaW5nIGludGVycnVwdHMsIG92ZXIgMTAwMCBiYWQgaW50ZXJydXB0cyIgd2hpY2ggaW5kaWNhdGVzCit0aGF0IHRoZSB3b3JrYXJvdW5kIGlzIGRvaW5nIGl0cyBqb2IuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BDTUNJQSBhbmQgdGhlIFo1MDVTL1o1MDVTWC9aNTA1RFgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgaXMgYWxzbyBhIGtub3duIHByb2JsZW0gd2l0aCB0aGUgU29ueSBaNTA1UyBhbmQgWjUwNVNYIGhhbmdpbmcKK2lmIGEgUENNQ0lBIGNhcmQgaXMgaW5zZXJ0ZWQgd2hpbGUgdGhlIGV0aGVybmV0IGRyaXZlciBpcyBsb2FkZWQsIG9yCitpbiBzb21lIGNhc2VzIGlmIHRoZSBsYXB0b3AgaXMgc3VzcGVuZGVkLiAgVGhpcyBpcyBjYXVzZWQgYnkgdG9ucyBvZgorc3B1cmlvdXMgSVJRIDlzLCBwcm9iYWJseSBnZW5lcmF0ZWQgZnJvbSB0aGUgUENNQ0lBIG9yIEFDUEkgYnJpZGdlcy4KKworVGhlcmUgaXMgY3VycmVudGx5IG5vIGZpeCBmb3IgdGhlIHByb2JsZW0gdGhhdCB3b3JrcyBpbiBldmVyeSBjYXNlLgorVGhlIG9ubHkga25vd24gd29ya2Fyb3VuZHMgYXJlIHRvIGRpc2FibGUgdGhlIGV0aGVybmV0IGludGVyZmFjZQorYmVmb3JlIGluc2VydGluZyBvciByZW1vdmluZyBhIFBDTUNJQSBjYXJkLCBvciB3aXRoIHNvbWUgY2FyZHMKK2Rpc2FibGluZyB0aGUgUENNQ0lBIGNhcmQgYmVmb3JlIGVqZWN0aW5nIGl0IHdpbGwgYWxzbyBoZWxwIHRoZQorcHJvYmxlbSB3aXRoIHRoZSBsYXB0b3AgaGFuZ2luZyB3aGVuIHRoZSBjYXJkIGlzIGVqZWN0ZWQuCisKK09uZSB1c2VyIGhhcyByZXBvcnRlZCB0aGF0IHNldHRpbmcgdGhlIHRjaWMncyBjc19pcnEgdG8gc29tZSB2YWx1ZQorb3RoZXIgdGhhbiA5IChsaWtlIDExKSBmaXhlZCB0aGUgcHJvYmxlbS4gIFRoaXMgZG9lc24ndCB3b3JrIG9uIG15CitaNTA1UywgaG93ZXZlci0tY2hhbmdpbmcgdGhlIHZhbHVlIGNhdXNlcyB0aGUgY2FyZG1nciB0byBzdG9wIHNlZWluZworY2FyZCBpbnNlcnRpb25zIGFuZCByZW1vdmFscywgY2FyZHMgZG9uJ3Qgc2VlbSB0byB3b3JrIGNvcnJlY3RseSwgYW5kCitJIHN0aWxsIGdldCBoYW5ncyBpZiBhIGNhcmQgaXMgaW5zZXJ0ZWQgd2hlbiB0aGUga2VybmVsIGlzIGJvb3RlZC4KKworVXNpbmcgdGhlIGxhdGVzdCBldGhlcm5ldCBkcml2ZXIgYW5kIHBjbWNpYSBwYWNrYWdlIGFsbG93cyBtZSB0bworaW5zZXJ0IGFuIEFkYXB0ZWMgMTQ4MEEgU2xpbVNjc2kgY2FyZCB3aXRob3V0IHRoZSBsYXB0b3AgaGFuZ2luZywKK2FsdGhvdWdoIEkgc3RpbGwgaGF2ZSB0byBzaHV0IGRvd24gdGhlIGNhcmQgYmVmb3JlIGVqZWN0aW5nIG9yCitwb3dlcmluZyBkb3duIHRoZSBsYXB0b3AuICBIb3dldmVyLCBzaW1pbGFyIGV4cGVyaW1lbnRzIHdpdGggYSBERS02NjAKK2V0aGVybmV0IGNhcmQgc3RpbGwgcmVzdWx0IGluIGhhbmdzIHdoZW4gdGhlIGNhcmQgaXMgaW5zZXJ0ZWQuICBJIGFtCitiZWdpbm5pbmcgdG8gdGhpbmsgdGhhdCB0aGUgaW50ZXJydXB0cyBhcmUgQ2FyZEJ1cy1yZWxhdGVkLCBzaW5jZSB0aGUKK0FkYXB0ZWMgY2FyZCBpcyBhIENhcmRCdXMgY2FyZCwgYW5kIHRoZSBERS02NjAgaXMgbm90OyBob3dldmVyLCBJCitkb24ndCBoYXZlIGFueSBvdGhlciBDYXJkQnVzIGNhcmRzIHRvIHRlc3Qgd2l0aC4KKworPT09PT09CitUaGFua3MKKz09PT09PQorCitGaXJzdCwgSSB3YW50IHRvIHRoYW5rIGV2ZXJ5b25lIChleGNlcHQgTmVvTWFnaWMgb2YgY291cnNlKSBmb3IgdGhlaXIKK2dlbmVyb3VzIHN1cHBvcnQgYW5kIGVuY291cmFnZW1lbnQuICBJJ2QgbGlrZSB0byBsaXN0IGV2ZXJ5b25lJ3MgbmFtZQoraGVyZSB0aGF0IHJlcGxpZWQgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBwaGFzZSwgYnV0IHRoZSBsaXN0IGlzCithbWF6aW5nbHkgbG9uZy4KKworSSB3aWxsIGJlIHJhdGhlciB1bmZhaXIgYW5kIHNpbmdsZSBvdXQgYSBmZXcgcGVvcGxlLCBob3dldmVyOgorCisJSnVzdGluIE1hdXJlciwgZm9yIGJlaW5nIHRoZSBmaXJzdCByYW5kb20gbmV0LnBlcnNvbiB0byB0cnkgaXQsCisJYW5kIGZvciBsZXR0aW5nIG1lIGxvZ2luIHRvIGhpcyBaNTA1U1ggdG8gZ2V0IGl0IHdvcmtpbmcgdGhlcmUKKworCUVkaSBXZWl0eiBmb3IgdHJ5aW5nIG91dCBzZXZlcmFsIGRpZmZlcmVudCB2ZXJzaW9ucywgYW5kIGdpdmluZworCW1lIGEgbG90IG9mIHVzZWZ1bCBmZWVkYmFjaworCisJR3JlZyBSdW1wbGUgZm9yIGxldHRpbmcgbWUgbG9naW4gcmVtb3RlbHkgdG8gZ2V0IHRoZSBkcml2ZXIgCisJZnVuY3Rpb25hbCBvbiB0aGUgMjU2WlgsIGZvciBoaXMgYXNzaXN0YW5jZSBvbiB0cmFja2luZworCWRvd24gYWxsIHNvcnRzIG9mIHJhbmRvbSBzdHVmZiwgYW5kIGZvciB0cnlpbmcgb3V0IEFjY2VsLVgKKworCVphY2ggQnJvd24sIGZvciB0aGUgaW5pdGlhbCBBQzk3IG1peGVyIGludGVyZmFjZSBkZXNpZ24KKworCUplZmYgR2FyemlrLCBmb3IgdmFyaW91cyBoZWxwZnVsIHN1Z2dlc3Rpb25zIG9uIHRoZSBBQzk3CisJaW50ZXJmYWNlCisKKwkiTXIuIEJ1bXB5IiBmb3IgZmVlZGJhY2sgb24gdGhlIFo1MDVSWAorCisJQmlsbCBOb3R0aW5naGFtLCBmb3IgZ2VuZXJvdXMgYXNzaXN0YW5jZSBpbiBnZXR0aW5nIHRoZSBtaXhlciBJRAorCWNvZGUgd29ya2luZworCis9PT09PT09PT09PT09PT09PQorUHJldmlvdXMgdmVyc2lvbnMKKz09PT09PT09PT09PT09PT09CisKK1ZlcnNpb25zIHByaW9yIHRvIDAuMyAoYWthIGBub25hbWUnKSBoYWQgcHJvYmxlbXMgd2l0aCB3ZWlyZCBhcnRpZmFjdHMKK2luIHRoZSBvdXRwdXQgYW5kIGZhaWxlZCB0byBzZXQgdGhlIHJlY29yZGluZyByYXRlIHByb3Blcmx5LiAgVGhlc2UKK3Byb2JsZW1zIGhhdmUgbG9uZyBzaW5jZSBiZWVuIGZpeGVkLgorCitWZXJzaW9ucyBwcmlvciB0byAwLjUgaGFkIHByb2JsZW1zIHdpdGggY2xpY2tzIGluIHRoZSBvdXRwdXQgd2hlbgorYW55dGhpbmcgb3RoZXIgdGhhbiAxNi1iaXQgc3RlcmVvIHNvdW5kIHdhcyBiZWluZyBwbGF5ZWQsIGFuZCBhbHNvIGhhZAorcGVyaW9kaWMgY2xpY2tzIHdoZW4gcmVjb3JkaW5nLgorCitWZXJzaW9uIDAuNyBmaXJzdCBpbmNvcnBvcmF0ZWQgc3VwcG9ydCBmb3IgdGhlIE5NMjU2WlggY2hpcHNldCwgd2hpY2gKK2lzIGZvdW5kIG9uIHNvbWUgRGVsbCBMYXRpdHVkZSBsYXB0b3BzICh0aGUgQ1B0LCBhbmQgYXBwYXJlbnRseQorc29tZSBDUGkgbW9kZWxzIGFzIHdlbGwpLiAgSXQgYWxzbyBpbmNsdWRlZCB0aGUgZ2VuZXJpYyBBQzk3CittaXhlciBtb2R1bGUuCisKK1ZlcnNpb24gMC43NSByZW5hbWVkIGFsbCB0aGUgZnVuY3Rpb25zIGFuZCBmaWxlcyB3aXRoIHNsaWdodGx5IG1vcmUKK2dlbmVyaWMgbmFtZXMuCisKK05vdGUgdGhhdCBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGlzIGRvY3VtZW50IGNsYWltZWQgdGhhdCByZWNvcmRpbmcgd2FzCis4LWJpdCBvbmx5OyBpdCBhY3R1YWxseSBoYXMgYmVlbiB3b3JraW5nIGZvciAxNi1iaXRzIGFsbCBhbG9uZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjhmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzCkBAIC0wLDAgKzEsNiBAQAorQSBwdXJlIE9QTDMgY2FyZCBpcyBuaWNlIGFuZCBlYXN5IHRvIGNvbmZpZ3VyZS4gU2ltcGx5IGRvCisKK2luc21vZCBvcGwzIGlvPTB4Mzg4CisKK0NoYW5nZSB0aGUgSS9PIGFkZHJlc3MgaW4gdGhlIHZlcnkgdW5saWtlbHkgY2FzZSB0aGlzIGNhcmQgaXMgZGlmZmVyZW50bHkKK2NvbmZpZ3VyZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMtU0EgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzLVNBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTkxODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzLVNBCkBAIC0wLDAgKzEsNTIgQEAKK09QTDMtU0ExIHNvdW5kIGRyaXZlciAob3BsM3NhLm8pCisKKy0tLQorTm90ZTogVGhpcyBob3d0byBvbmx5IGRlc2NyaWJlcyBob3cgdG8gc2V0dXAgdGhlIE9QTDMtU0ExIGNoaXA7IHRoaXMgaW5mbworZG9lcyBub3QgYXBwbHkgdG8gdGhlIFNBMiwgU0EzLCBvciBTQTQuIAorLS0tCisKK1RoZSBZYW1haGEgT1BMMy1TQTEgc291bmQgY2hpcCBpcyB1c3VhbGx5IGZvdW5kIGJ1aWx0IGludG8gbW90aGVyYm9hcmRzLCBhbmQKK2l0J3MgYSBkZWNlbnQgbGl0dGxlIGNoaXAgb2ZmZXJpbmcgYSBXU1MgbW9kZSwgYSBTQiBQcm8gZW11bGF0aW9uIG1vZGUsIE1QVTQwMQorYW5kIE9QTDMgRk0gU3ludGggY2FwYWJpbGl0aWVzLgorCitZb3UgY2FuIGVuYWJsZSBpbmNsdXNpb24gb2YgdGhlIGRyaXZlciB2aWEgQ09ORklHX1NPVU5EX09QTDNTQTE9bSwgb3IKK0NPTkZJR19TT1VORF9PUEwzU0ExPXkgdGhyb3VnaCAnbWFrZSBjb25maWcveGNvbmZpZy9tZW51Y29uZmlnJy4KKworWW91J2xsIG5lZWQgdG8ga25vdyBhbGwgb2YgdGhlIHJlbGV2YW50IGluZm8gKGlycSwgZG1hLCBhbmQgaW8gcG9ydCkgZm9yIHRoZQorY2hpcCdzIFdTUyBtb2RlLCBzaW5jZSB0aGF0IGlzIHRoZSBtb2RlIHRoZSBrZXJuZWwgc291bmQgZHJpdmVyIHVzZXMsIGFuZCBvZgorY291cnNlIHlvdSdsbCBhbHNvIG5lZWQgdG8ga25vdyBhYm91dCB3aGVyZSB0aGUgTVBVNDAxIGFuZCBPUEwzIHBvcnRzIGFuZAorSVJRcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRob3NlLgorCitIZXJlJ3MgdGhlIHNraW5ueSBvbiBob3cgdG8gbG9hZCBpdCBhcyBhIG1vZHVsZToKKworCW1vZHByb2JlIG9wbDNzYSBpbz0weDUzMCBpcnE9MTEgZG1hPTAgZG1hMj0xIG1wdV9pbz0weDMzMCBtcHVfaXJxPTUKKworTW9kdWxlIG9wdGlvbnMgaW4gZGV0YWlsOgorCisJaW86CVRoaXMgaXMgdGhlIFdTUydzIHBvcnQgYmFzZS4KKwlpcnE6CVRoaXMgaXMgdGhlIFdTUydzIElSUS4KKwlkbWE6CVRoaXMgaXMgdGhlIFdTUydzIERNQSBsaW5lLiBJbiBteSBCSU9TIHNldHVwIHNjcmVlbiB0aGlzIHdhcworCQlsaXN0ZWQgYXMgIldTUyBQbGF5IERNQSIKKwlkbWEyOglUaGlzIGlzIHRoZSBXU1MncyBzZWNvbmRhcnkgRE1BIGxpbmUuIE15IEJJT1MgY2FsbHMgaXQgdGhlCisJCSJXU1MgY2FwdHVyZSBETUEiCisJCisJbXB1X2lvOglUaGlzIGlzIHRoZSBNUFU0MDEncyBwb3J0IGJhc2UuCisJbXB1X2lycTogVGhpcyBpcyB0aGUgTVBVNDAxJ3MgSVJRLgorCitJZiB5b3UnZCBsaWtlIHRvIHVzZSB0aGUgT1BMMyBGTSBTeW50aGVzaXplciwgbWFrZSBzdXJlIHlvdSBlbmFibGUKK0NPTkZJR19TT1VORF9ZTTM4MTIgKGluICdtYWtlIGNvbmZpZycpLiBUaGF0J2xsIGJ1aWxkIHRoZSBvcGwzLm8gbW9kdWxlLgorCitUaGVuIGEgc2ltcGxlICdpbnNtb2Qgb3BsMyBpbz0weDM4OCcsIGFuZCB5b3Ugbm93IGhhdmUgRk0gU3ludGguCisKK1lvdSBjYW4gYWxzbyB1c2UgdGhlIFNvZnRPU1Mgc29mdHdhcmUgc3ludGhlc2l6ZXIgaW5zdGVhZCBvZiB0aGUgYnVpbHRpbiBPUEwzLgorSGVyZSdzIGhvdzoKKworU2F5ICd5JyBvciAnbScgdG8gIlNvZnRPU1Mgc29mdHdhcmUgd2F2ZSB0YWJsZSBlbmdpbmUiIGluIG1ha2UgY29uZmlnLgorCitJZiB5b3Ugc2FpZCB5ZXMsIHRoZSBzb2Z0d2FyZSBzeW50aCBpcyBhdmFpbGFibGUgb25jZSB5b3UgYm9vdCB5b3VyIG5ldwora2VybmVsLgorCitJZiB5b3UgY2hvc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGp1c3QgaW5zbW9kIHRoZSByZXN1bHRpbmcgc29mdG9zczIubworCitRdWVzdGlvbnM/IENvbW1lbnRzPworPHN0aWtlckBub3J0aGxpbmsuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMy1TQTIgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzLVNBMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGI2ZDJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMy1TQTIKQEAgLTAsMCArMSwyMTAgQEAKK0RvY3VtZW50YXRpb24gZm9yIHRoZSBPUEwzLVNBMiwgU0EzLCBhbmQgU0F4IGRyaXZlciAob3BsM3NhMi5vKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Njb3R0IE11cnJheSwgc2NvdHRAc3BpdGVmdWwub3JnCitKYW51YXJ5IDcsIDIwMDEKKworTk9URTogQWxsIHRyYWRlLW1hcmtlZCB0ZXJtcyBtZW50aW9uZWQgYmVsb3cgYXJlIHByb3BlcnRpZXMgb2YgdGhlaXIKKyAgICAgIHJlc3BlY3RpdmUgb3duZXJzLgorCisKK1N1cHBvcnRlZCBEZXZpY2VzCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpcyBmb3IgUG5QIHNvdW5kY2FyZHMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBZYW1haGEgYXVkaW8KK2NvbnRyb2xsZXIgY2hpcHNldHM6CisKK1lNRjcxMSBha2EgT1BMMy1TQTIKK1lNRjcxNSBhbmQgWU1GNzE5IGFrYSBPUEwzLVNBMworCitVcCB1bnRpbCByZWNlbnRseSAoRGVjZW1iZXIgMjAwMCksIEknZCB0aG91Z2h0IHRoZSA3MTkgdG8gYmUgYQorZGlmZmVyZW50IGNoaXBzZXQsIHRoZSBPUEwzLVNBeC4gIEFmdGVyIGFuIGVtYWlsIGV4aGFuZ2Ugd2l0aAorWWFtYWhhLCBob3dldmVyLCBpdCB0dXJucyBvdXQgdGhhdCB0aGUgNzE5IGlzIGp1c3QgYSByZS1iYWRnZWQKKzcxNSwgYW5kIHRoZSBjaGlwc2V0cyBhcmUgaWRlbnRpY2FsLiAgVGhlIGNoaXBzZXQgZGV0ZWN0aW9uIGNvZGUKK2hhcyBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGlzLgorCitBbnl3YXlzLCBhbGwgb2YgdGhlc2UgY2hpcHNldHMgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKworT1BMMyBGTSBzeW50aGVzaXplcgorU291bmRibGFzdGVyIFBybworTWljcm9zb2Z0L1dpbmRvd3MgU291bmQgU3lzdGVtCitNUFU0MDEgTUlESSBpbnRlcmZhY2UKKworTm90ZSB0aGF0IHRoaXMgZHJpdmVyIHVzZXMgdGhlIE1TUyBkZXZpY2UsIGFuZCB0byBteSBrbm93bGVkZ2UgdGhlc2UKK2NoaXBzZXRzIGVuZm9yY2UgYW4gZWl0aGVyL29yIHNpdHVhdGlvbiB3aXRoIHRoZSBTb3VuZGJsYXN0ZXIgUHJvCitkZXZpY2UgYW5kIHRoZSBNU1MgZGV2aWNlLiAgU2luY2UgdGhlIE1TUyBkZXZpY2UgaGFzIGJldHRlcgorY2FwYWJpbGl0aWVzLCBJIGhhdmUgaW1wbGVtZW50ZWQgdGhlIGRyaXZlciB0byB1c2UgaXQuCisKKworTWl4ZXIgQ2hhbm5lbHMKKy0tLS0tLS0tLS0tLS0tCisKK09sZGVyIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIChwcmUtRGVjZW1iZXIgMjAwMCkgaGFkIHR3byBtaXhlcnMsCithbiBPUEwzLVNBMiBvciBTQTMgbWl4ZXIgYW5kIGEgTVNTIG1peGVyLiAgVGhlIE9QTDMtU0FbMjNdIG1peGVyCitkZXZpY2UgY29udGFpbmVkIGEgc3VwZXJzZXQgb2YgbWl4ZXIgY2hhbm5lbHMgY29uc2lzdGluZyBvZiBpdHMgb3duCitjaGFubmVscyBhbmQgYWxsIG9mIHRoZSBNU1MgbWl4ZXIgY2hhbm5lbHMuICBUbyBzaW1wbGlmeSB0aGUgZHJpdmVyCitjb25zaWRlcmFibHksIGFuZCB0byBwYXJ0aXRpb24gZnVuY3Rpb25hbGl0eSBiZXR0ZXIsIHRoZSBPUEwzLVNBWzIzXQorbWl4ZXIgZGV2aWNlIG5vdyBjb250YWlucyBoYXMgaXRzIG93biBzcGVjaWZpYyBtaXhlciBjaGFubmVscy4gIFRoZXkKK2FyZToKKworVm9sdW1lICAgICAtIEhhcmR3YXJlIG1hc3RlciB2b2x1bWUgY29udHJvbAorQmFzcyAgICAgICAtIFNBMyBvbmx5LCBub3cgc3VwcG9ydHMgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMKK1RyZWJsZSAgICAgLSBTQTMgb25seSwgbm93IHN1cHBvcnRzIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzCitNaWNyb3Bob25lIC0gSGFyZHdhcmUgbWljcm9waG9uZSBpbnB1dCB2b2x1bWUgY29udHJvbAorRGlnaXRhbDEgICAtIFlhbWFoYSAzRCBlbmhhbmNlbWVudCAiV2lkZSIgbWl4ZXIKKworQWxsIG90aGVyIG1peGVyIGNoYW5uZWxzIChlLmcuICJQQ00iLCAiQ0QiLCBldGMuKSBub3cgaGF2ZSB0byBiZQorY29udHJvbGxlZCB2aWEgdGhlICJNUyBTb3VuZCBTeXN0ZW0gKENTNDIzMSkiIG1peGVyLiAgVG8gZmFjaWxpdGF0ZQordGhpcywgdGhlIG1peGVyIGRldmljZSBjcmVhdGlvbiBvcmRlciBoYXMgYmVlbiBzd2l0Y2hlZCBzbyB0aGF0Cit0aGUgTVNTIG1peGVyIGlzIGNyZWF0ZWQgZmlyc3QuICBUaGlzIGFsbG93cyBhY2Nlc3NpbmcgdGhlIG1ham9yaXR5CitvZiB0aGUgdXNlZnVsIG1peGVyIGNoYW5uZWxzIGV2ZW4gdmlhIHNpbmdsZSBtaXhlci1hd2FyZSB0b29scworc3VjaCBhcyAiYXVtaXgiLgorCisKK1BsdWcgJ24gUGxheQorLS0tLS0tLS0tLS0tCisKK0luIHByZXZpb3VzIGtlcm5lbHMgKDIuMi54KSwgc29tZSBjb25maWd1cmF0aW9uIHdhcyByZXF1aXJlZCB0bworZ2V0IHRoZSBkcml2ZXIgdG8gdGFsayB0byB0aGUgY2FyZC4gIEJlaW5nIHRoZSBuZXcgbWlsbGVubml1bSBhbmQKK2FsbCwgdGhlIDIuNC54IGtlcm5lbHMgbm93IHN1cHBvcnQgYXV0by1jb25maWd1cmF0aW9uIGlmIElTQSBQblAKK3N1cHBvcnQgaXMgY29uZmlndXJlZCBpbi4gIFRoZW9yZXRpY2FsbHksIHRoZSBkcml2ZXIgZXZlbiBzdXBwb3J0cworaGF2aW5nIG1vcmUgdGhhbiBvbmUgY2FyZCBpbiB0aGlzIGNhc2UuCisKK1dpdGggdGhlIGFkZGl0aW9uIG9mIFBuUCBzdXBwb3J0IHRvIHRoZSBkcml2ZXIsIHR3byBuZXcgcGFyYW1ldGVycworaGF2ZSBiZWVuIGFkZGVkIHRvIGNvbnRyb2wgaXQ6CisKK2lzYXBucCAgIC0gc2V0IHRvIDAgdG8gZGlzYWJsZSBJU0EgUG5QIGNhcmQgZGV0ZWN0aW9uCisKK211bHRpcGxlIC0gc2V0IHRvIDAgdG8gZGlzYWJsZSBtdWx0aXBsZSBQblAgY2FyZCBkZXRlY3Rpb24KKworCitPcHRpb25hbCBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlY2VudCAoRGVjZW1iZXIgMjAwMCkgYWRkaXRpb25zIHRvIHRoZSBkcml2ZXIgKGJhc2VkIG9uIGEgcGF0Y2gKK3Byb3ZpZGVkIGJ5IFBldGVyIEVuZ2xtYWllcikgYXJlIHR3byBuZXcgcGFyYW1ldGVyczoKKworeW1vZGUgLSAgICBTZXQgWWFtYWhhIDNEIGVuaGFuY2VtZW50IG1vZGU6CisgICAgICAgICAgIDAgPSBEZXNrdG9wL05vcm1hbCAgNS0xMiBjbSBzcGVha2VycworICAgICAgICAgICAxID0gTm90ZWJvb2sgUEMgKDEpIDMgY20gc3BlYWtlcnMKKyAgICAgICAgICAgMiA9IE5vdGVib29rIFBDICgyKSAxLjUgY20gc3BlYWtlcnMKKyAgICAgICAgICAgMyA9IEhpLUZpICAgICAgICAgICAxNi0zOCBjbSBzcGVha2VycworCitsb29wYmFjayAtIFNldCBBL0QgaW5wdXQgc291cmNlLiBVc2VmdWwgZm9yIGVjaG8gY2FuY2VsbGF0aW9uOgorICAgICAgICAgICAwID0gTWljIFJpZ2h0IGNoYW5uZWwgKGRlZmF1bHQpCisgICAgICAgICAgIDEgPSBNb25vIG91dHB1dCBsb29wYmFjaworCitUaGUgeW1vZGUgcGFyYW1ldGVyIGhhcyBiZWVuIHRlc3RlZCBhbmQgZG9lcyB3b3JrLiAgVGhlIGxvb3BiYWNrCitwYXJhbWV0ZXIsIGhvd2V2ZXIsIGlzIHVudGVzdGVkLiAgQW55IGZlZWRiYWNrIG9uIGl0cyB1c2VmdWxuZXNzCit3b3VsZCBiZSBhcHByZWNpYXRlZC4KKworCitNYW51YWwgQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBkZWNpZGUgbm90IHRvIGNvbXBpbGUgSVNBIFBuUCBzdXBwb3J0IGludG8KK3lvdXIga2VybmVsLCBvciBkaXNhYmxlZCB0aGUgZHJpdmVyJ3MgdXNhZ2Ugb2YgaXQgYnkgc2V0dGluZyB0aGUKK2lzYXBucCBwYXJhbWV0ZXIgYXMgZGlzY3Vzc2VkIGFib3ZlLCB0aGVuIHlvdSB3aWxsIG5lZWQgdG8gZG8gc29tZQorbWFudWFsIGNvbmZpZ3VyYXRpb24uICBUaGVyZSBhcmUgdHdvIHdheXMgb2YgZG9pbmcgdGhpcy4gIFRoZSBtb3N0Citjb21tb24gaXMgdG8gdXNlIHRoZSBpc2FwbnB0b29scyBwYWNrYWdlIHRvIGluaXRpYWxpemUgdGhlIGNhcmQsIGFuZAordXNlIHRoZSBrZXJuZWwgbW9kdWxlIGZvcm0gb2YgdGhlIHNvdW5kIHN1YnN5c3RlbSBhbmQgc291bmQgZHJpdmVycy4KK0FsdGVybmF0aXZlbHksIHNvbWUgQklPUydzIGFsbG93IG1hbnVhbCBjb25maWd1cmF0aW9uIG9mIGluc3RhbGxlZAorUG5QIGRldmljZXMgaW4gYSBCSU9TIG1lbnUsIHdoaWNoIHNob3VsZCBhbGxvdyB1c2luZyB0aGUgbm9uLW1vZHVsYXIKK3NvdW5kIGRyaXZlcnMsIGkuZS4gYnVpbHQgaW50byB0aGUga2VybmVsLgorCitJIHBlcnNvbmFsbHkgdXNlIGlzYXBucCBhbmQgbW9kdWxlcywgYW5kIGRvIG5vdCBoYXZlIGFjY2VzcyB0byBhIFBuUAorQklPUyBtYWNoaW5lIHRvIHRlc3QuICBJZiB5b3UgaGF2ZSBzdWNoIGEgYmVhc3QsIGNvbmZpZ3VyaW5nIHRoZQorZHJpdmVyIHRvIGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBzaG91bGQganVzdCB3b3JrICh0aGFua3MgdG8gd29yaworZG9uZSBieSBEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+KS4gIFlvdSB3aWxsIHN0aWxsIG5lZWQKK3RvIHNwZWNpZnkgc2V0dGluZ3MsIHdoaWNoIGNhbiBiZSBkb25lIGJ5IGFkZGluZzoKKworb3BsM3NhMj08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8bXNzaW8+LDxtcHVpbz4KKwordG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZToKKworb3BsM3NhMj0weDM3MCw1LDAsMSwweDUzMCwweDMzMAorCitJZiB5b3UgYXJlIGluc3RlYWQgdXNpbmcgdGhlIGlzYXBucCB0b29scyAoYXMgbW9zdCBwZW9wbGUgaGF2ZSBiZWVuCitiZWZvcmUgTGludXggMi40LngpLCBmb2xsb3cgdGhlIGRpcmVjdGlvbnMgaW4gdGhlaXIgZG9jdW1lbnRhdGlvbiB0bworcHJvZHVjZSBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gIEhlcmUgaXMgdGhlIHJlbGV2YW50IGV4Y2VycHQgSSB1c2VkIHRvCit1c2UgZm9yIG15IFNBMyBjYXJkIGZyb20gbXkgaXNhcG5wLmNvbmY6CisKKyhDT05GSUdVUkUgWU1IMDgwMC8tMSAoTEQgMAorCisjIE5PVEU6IElPIDAgaXMgZm9yIHRoZSB1bnVzZWQgU291bmRCbGFzdGVyIHBhcnQgb2YgdGhlIGNoaXBzZXQuCisoSU8gMCAoQkFTRSAweDAyMjApKQorKElPIDEgKEJBU0UgMHgwNTMwKSkKKyhJTyAyIChCQVNFIDB4MDM4OCkpCisoSU8gMyAoQkFTRSAweDAzMzApKQorKElPIDQgKEJBU0UgMHgwMzcwKSkKKyhJTlQgMCAoSVJRIDUgKE1PREUgK0UpKSkKKyhETUEgMCAoQ0hBTk5FTCAwKSkKKyhETUEgMSAoQ0hBTk5FTCAxKSkKKworSGVyZSwgbm90ZSB0aGF0OgorCitQb3J0ICBBY2NlcHRhYmxlIFJhbmdlICBQdXJwb3NlCistLS0tICAtLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tCitJTyAwICAweDAyMjAgLSAweDAyODAgICBTQiBiYXNlIGFkZHJlc3MsIHVudXNlZC4KK0lPIDEgIDB4MDUzMCAtIDB4MEY0OCAgIE1TUyBiYXNlIGFkZHJlc3MKK0lPIDIgIDB4MDM4OCAtIDB4MDNGOCAgIE9QTDMgYmFzZSBhZGRyZXNzCitJTyAzICAweDAzMDAgLSAweDAzMzQgICBNUFUgYmFzZSBhZGRyZXNzCitJTyA0ICAweDAxMDAgLSAweDBGRkUgICBjYXJkJ3Mgb3duIGJhc2UgYWRkcmVzcyBmb3IgaXRzIGNvbnRyb2wgSS9PIHBvcnRzCisKK1RoZSBJUlEgYW5kIERNQSB2YWx1ZXMgY2FuIGJlIGFueSB0aGF0IGFyZSBjb25zaWRlcmVkIGFjY2VwdGFibGUgZm9yIGEKK01TUy4gIEFzc3VtaW5nIHlvdSd2ZSBnb3QgaXNhcG5wIGFsbCBoYXBweSwgdGhlbiB5b3Ugc2hvdWxkIGJlIGFibGUgdG8KK2RvIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgKHdoaWNoIG1hdGNoZXMgdXAgd2l0aCB0aGUgaXNhcG5wCitjb25maWd1cmF0aW9uIGFib3ZlKToKKworbW9kcHJvYmUgbXB1NDAxCittb2Rwcm9iZSBhZDE4NDgKK21vZHByb2JlIG9wbDNzYTIgaW89MHgzNzAgbXNzX2lvPTB4NTMwIG1wdV9pbz0weDMzMCBpcnE9NSBkbWE9MCBkbWEyPTEKK21vZHByb2JlIG9wbDMgaW89MHgzODgKKworU2VlIHRoZSBzZWN0aW9uICJBdXRvbWF0aWMgTW9kdWxlIExvYWRpbmciIGJlbG93IGZvciBob3cgdG8gc2V0IHVwCisvZXRjL21vZHByb2JlLmNvbmYgdG8gYXV0b21hdGUgdGhpcy4KKworQW4gaW1wb3J0YW50IHRoaW5nIHRvIHJlbWVtYmVyIHRoYXQgdGhlIG9wbDNzYTIgbW9kdWxlJ3MgaW8gYXJndW1lbnQgaXMKK2ZvciBpdCdzIG93biBjb250cm9sIHBvcnQsIHdoaWNoIGhhbmRsZXMgdGhlIGNhcmQncyBtYXN0ZXIgbWl4ZXIgZm9yCit2b2x1bWUgKG9uIGFsbCBjYXJkcyksIGFuZCBiYXNzIGFuZCB0cmVibGUgKG9uIFNBMyBjYXJkcykuCisKKworVHJvdWJsZXNob290aW5nCistLS0tLS0tLS0tLS0tLS0KKworSWYgYWxsIGdvZXMgd2VsbCBhbmQgeW91IHNlZSBubyBlcnJvciBtZXNzYWdlcywgeW91IHNob3VsZCBiZSBhYmxlIHRvCitzdGFydCB1c2luZyB0aGUgc291bmQgY2FwYWJpbGl0aWVzIG9mIHlvdXIgc3lzdGVtLiAgSWYgeW91IGdldCBhbgorZXJyb3IgbWVzc2FnZSB3aGlsZSB0cnlpbmcgdG8gaW5zZXJ0IHRoZSBvcGwzc2EyIG1vZHVsZSwgdGhlbiBtYWtlCitzdXJlIHRoYXQgdGhlIHZhbHVlcyBvZiB0aGUgdmFyaW91cyBhcmd1bWVudHMgbWF0Y2ggd2hhdCB5b3Ugc3BlY2lmaWVkCitpbiB5b3VyIGlzYXBucCBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB0aGF0IHRoZXJlIGlzIG5vIGNvbmZsaWN0IHdpdGgKK2Fub3RoZXIgZGV2aWNlIGZvciBhbiBJL08gcG9ydCBvciBpbnRlcnJ1cHQuICBDaGVja2luZyB0aGUgY29udGVudHMgb2YKKy9wcm9jL2lvcG9ydHMgYW5kIC9wcm9jL2ludGVycnVwdHMgY2FuIGJlIHVzZWZ1bCB0byBzZWUgaWYgeW91J3JlCitidXR0aW5nIGhlYWRzIHdpdGggYW5vdGhlciBkZXZpY2UuCisKK0lmIHlvdSBzdGlsbCBjYW5ub3QgZ2V0IHRoZSBtb2R1bGUgdG8gbG9hZCwgbG9vayBhdCB0aGUgY29udGVudHMgb2YKK3lvdXIgc3lzdGVtIGxvZyBmaWxlLCB1c3VhbGx5IC92YXIvbG9nL21lc3NhZ2VzLiAgSWYgeW91IHNlZSB0aGUKK21lc3NhZ2UgIm9wbDNzYTI6IFVua25vd24gWWFtYWhhIGF1ZGlvIGNvbnRyb2xsZXIgdmVyc2lvbiIsIHRoZW4geW91CitoYXZlIGEgZGlmZmVyZW50IGNoaXBzZXQgdmVyc2lvbiB0aGFuIEkndmUgZW5jb3VudGVyZWQgc28gZmFyLiAgTG9vaworZm9yIGFsbCBtZXNzYWdlcyBpbiB0aGUgbG9nIGZpbGUgdGhhdCBzdGFydCB3aXRoICJvcGwzc2EyOiAiIGFuZCBzZWUKK2lmIHRoZXkgcHJvdmlkZSBhbnkgY2x1ZXMuICBJZiB5b3UgZG8gbm90IHNlZSB0aGUgY2hpcHNldCB2ZXJzaW9uCittZXNzYWdlLCBhbmQgbm9uZSBvZiB0aGUgb3RoZXIgbWVzc2FnZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGxvZyBhcmUKK2hlbHBmdWwsIGVtYWlsIG1lIHNvbWUgZGV0YWlscyBhbmQgSSdsbCB0cnkgbXkgYmVzdCB0byBoZWxwLgorCisKK0F1dG9tYXRpYyBNb2R1bGUgTG9hZGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xhc3RseSwgaWYgeW91J3JlIHVzaW5nIG1vZHVsZXMgYW5kIHdhbnQgdG8gc2V0IHVwIGF1dG9tYXRpYyBtb2R1bGUKK2xvYWRpbmcgd2l0aCBrbW9kLCB0aGUga2VybmVsIG1vZHVsZSBsb2FkZXIsIGhlcmUgaXMgdGhlIHNlY3Rpb24gSQorY3VycmVudGx5IHVzZSBpbiBteSBtb2Rwcm9iZS5jb25mIGZpbGU6CisKKyMgU291bmQKK2FsaWFzIHNvdW5kLXNsb3QtMCBvcGwzc2EyCitvcHRpb25zIG9wbDNzYTIgaW89MHgzNzAgbXNzX2lvPTB4NTMwIG1wdV9pbz0weDMzMCBpcnE9NyBkbWE9MCBkbWEyPTMKK29wdGlvbnMgb3BsMyBpbz0weDM4OAorCitUaGF0J3MgYWxsIGl0IGN1cnJlbnRseSB0YWtlcyB0byBnZXQgYW4gT1BMMy1TQTMgY2FyZCB3b3JraW5nIG9uIG15CitzeXN0ZW0uICBPbmNlIGFnYWluLCBpZiB5b3UgaGF2ZSBhbnkgb3RoZXIgcHJvYmxlbXMsIGVtYWlsIG1lIGF0IHRoZQorYWRkcmVzcyBsaXN0ZWQgYWJvdmUuCisKK1Njb3R0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PcHRpIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT3B0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVhZjNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT3B0aQpAQCAtMCwwICsxLDIyMiBAQAorU3VwcG9ydCBmb3IgdGhlIE9QVGkgODJDOTMxIGNoaXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOb3RlOiBwYXJ0cyBvZiB0aGlzIFJFQURNRSBmaWxlIGFwcGx5IGFsc28gdG8gb3RoZXIKK2NhcmRzIHRoYXQgdXNlIHRoZSBtYWQxNiBkcml2ZXIuCisKK1NvbWUgaXRlbXMgaW4gdGhpcyBSRUFETUUgZmlsZSBhcmUgYmFzZWQgb24gZmVhdHVyZXMKK2FkZGVkIHRvIHRoZSBzb3VuZCBkcml2ZXIgYWZ0ZXIgTGludXgtMi4xLjkxIHdhcyBvdXQuCitCeSB0aGUgdGltZSBvZiB3cml0aW5nIHRoaXMgSSBkbyBub3Qga25vdyB3aGljaCBvZmZpY2lhbAora2VybmVsIHJlbGVhc2Ugd2lsbCBpbmNsdWRlIHRoZXNlIGZlYXR1cmVzLgorUGxlYXNlIGRvIG5vdCByZXBvcnQgaW5jb25zaXN0ZW5jaWVzIG9uIG9sZGVyIExpbnV4CitrZXJuZWxzLgorCitUaGUgT1BUaSA4MkM5MzEgaXMgc3VwcG9ydGVkIGluIGl0cyBub24tUG5QIG1vZGUuCitVc3VhbGx5IHlvdSBkbyBub3QgbmVlZCB0byBzZXQganVtcGVycywgZXRjLiBUaGUgc291bmQgZHJpdmVyCit3aWxsIGNoZWNrIHRoZSBjYXJkIHN0YXR1cyBhbmQgaWYgaXQgaXMgcmVxdWlyZWQgaXQgd2lsbAorZm9yY2UgdGhlIGNhcmQgaW50byBhIG1vZGUgaW4gd2hpY2ggaXQgY2FuIGJlIHByb2dyYW1tZWQuCisKK0lmIHlvdSBoYXZlIGFub3RoZXIgT1MgaW5zdGFsbGVkIG9uIHlvdXIgY29tcHV0ZXIgaXQgaXMgcmVjb21tZW5kZWQKK3RoYXQgTGludXggYW5kIHRoZSBvdGhlciBPUyB1c2UgdGhlIHNhbWUgcmVzb3VyY2VzLgorCitBbHNvLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHJlc291cmNlcyBzcGVjaWZpZWQgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mCithbmQgcmVzb3VyY2VzIHNwZWNpZmllZCBpbiAvZXRjL2lzYXBucC5jb25mIGFncmVlLgorCitDb21waWxpbmcgdGhlIHNvdW5kIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0kgaGlnaGx5IHJlY29tbWVuZCB0aGF0IHlvdSBidWlsZCBhIG1vZHVsYXJpemVkIHNvdW5kIGRyaXZlci4KK1RoaXMgZG9jdW1lbnQgZG9lcyBub3QgY292ZXIgYSBzb3VuZC1kcml2ZXIgd2hpY2ggaXMgYnVpbHQgaW4KK3RoZSBrZXJuZWwuCisKK1NvdW5kIGNhcmQgc3VwcG9ydCBzaG91bGQgYmUgZW5hYmxlZCBhcyBhIG1vZHVsZSAoY2hvc2UgbSkuCitBbnN3ZXIgJ20nIGZvciAgdGhlc2UgaXRlbXM6CisgIEdlbmVyaWMgT1BMMi9PUEwzIEZNIHN5bnRoZXNpemVyIHN1cHBvcnQJCShDT05GSUdfU09VTkRfQURMSUIpCisgIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0gc3VwcG9ydAkJCShDT05GSUdfU09VTkRfTVNTKQorICBTdXBwb3J0IGZvciBPUFRpIE1BRDE2IGFuZC9vciBNb3phcnQgYmFzZWQgY2FyZHMJKENPTkZJR19TT1VORF9NQUQxNikKKyAgRk0gc3ludGhlc2l6ZXIgKFlNMzgxMi9PUEwtMykgc3VwcG9ydAkJCShDT05GSUdfU09VTkRfWU0zODEyKQorCitUaGUgY29uZmlndXJhdGlvbiBtZW51IG1heSBhc2sgZm9yIGFkZHJlc3NlcywgSVJRIGxpbmVzIG9yIERNQQorY2hhbm5lbHMuIElmIHRoZSBjYXJkIGlzIHVzZWQgYXMgYSBtb2R1bGUgdGhlIG1vZHVsZSBsb2FkaW5nCitvcHRpb25zIHdpbGwgb3ZlcnJpZGUgdGhlc2UgdmFsdWVzLgorCitGb3IgdGhlIE9QVGkgOTMxIHlvdSBjYW4gYW5zd2VyICduJyB0bzoKKyAgU3VwcG9ydCBNSURJIGluIG9sZGVyIE1BRDE2IGJhc2VkIGNhcmRzIChyZXF1aXJlcyBTQikJKENPTkZJR19TT1VORF9NQUQxNl9PTERDQVJEKQorSWYgeW91IGRvIG5lZWQgTUlESSBzdXBwb3J0IGluIGEgTW96YXJ0IG9yIEM5MjggYmFzZWQgY2FyZCB5b3UKK25lZWQgdG8gYW5zd2VyICdtJyB0byB0aGUgYWJvdmUgcXVlc3Rpb24uIEluIHRoYXQgY2FzZSB5b3Ugd2lsbAorYWxzbyBuZWVkIHRvIGFuc3dlciAnbScgdG86CisgICcxMDAlIFNvdW5kIEJsYXN0ZXIgY29tcGF0aWJsZXMgKFNCMTYvMzIvNjQsIEVTUywgSmF6ejE2KSBzdXBwb3J0JyAoQ09ORklHX1NPVU5EX1NCKQorCitHbyBvbiBhbmQgY29tcGlsZSB5b3VyIGtlcm5lbCBhbmQgbW9kdWxlcy4gSW5zdGFsbCB0aGUgbW9kdWxlcy4gUnVuIGRlcG1vZCAtYS4KKworVXNpbmcgaXNhcG5wdG9vbHMKKy0tLS0tLS0tLS0tLS0tLS0tCitJbiBtb3N0IHN5c3RlbXMgd2l0aCBhIFBuUCBCSU9TIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgaXNhcG5wLiBUaGUKK2luaXRpYWxpemF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBCSU9TIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBkcml2ZXIKK3RvIHBpY2sgdXAgdGhlIGNhcmQgYW5kIGNvbnRpbnVlIGluaXRpYWxpemF0aW9uLgorCitJZiB0aGF0IGZhaWxzLCBvciBpZiB5b3UgaGF2ZSBvdGhlciBQblAgY2FyZHMsIHlvdSBuZWVkIHRvIHVzZSBpc2FwbnAKK3RvIGluaXRpYWxpemUgdGhlIGNhcmQuCitUaGlzIHdhcyB0ZXN0ZWQgd2l0aCBpc2FwbnB0b29scy0xLjExIGJ1dCBJIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UKK2lzYXBucHRvb2xzLTEuMTMgKG9yIG5ld2VyKS4gUnVuIHBucGR1bXAgdG8gZHVtcCB0aGUgaW5mb3JtYXRpb24KK2Fib3V0IHlvdXIgUG5QIGNhcmRzLiBUaGVuIGVkaXQgdGhlIHJlc3VsdGluZyBmaWxlIGFuZCBzZWxlY3QKK3RoZSBvcHRpb25zIG9mIHlvdXIgY2hvaWNlLiBUaGlzIGZpbGUgaXMgbm9ybWFsbHkgaW5zdGFsbGVkIGFzCisvZXRjL2lzYXBucC5jb25mLgorCitUaGUgZHJpdmVyIGhhcyBvbmUgbGltaXRhdGlvbiB3aXRoIHJlc3BlY3QgdG8gSS9PIHBvcnQgcmVzb3VyY2VzOgorSU8zIGJhc2UgbXVzdCBiZSAweDBFMEMuICBBbHRob3VnaCBpc2FwbnAgYWxsb3dzIG90aGVyIHBvcnRzLCB0aGlzCithZGRyZXNzIGlzIGhhcmQtY29kZWQgaW50byB0aGUgZHJpdmVyLgorCitVc2luZyBrbW9kIGFuZCBhdXRvbG9hZGluZyB0aGUgc291bmQgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tZW50OiBhcyBvZiBsaW51eC0yLjEuOTAga21vZCBpcyByZXBsYWNpbmcga2VybmVsZC4KK1RoZSBjb25maWcgZmlsZSAnL2V0Yy9tb2Rwcm9iZS5jb25mJyBpcyB1c2VkIGFzIGJlZm9yZS4KKworVGhpcyBpcyB0aGUgc291bmQgcGFydCBvZiBteSAvZXRjL21vZHByb2JlLmNvbmYgZmlsZS4KK0ZvbGxvd2luZyB0aGF0IEkgd2lsbCBleHBsYWluIGVhY2ggbGluZS4KKworYWxpYXMgbWl4ZXIwIG1hZDE2CithbGlhcyBhdWRpbzAgbWFkMTYKK2FsaWFzIG1pZGkwICBtYWQxNgorYWxpYXMgc3ludGgwIG9wbDMKK29wdGlvbnMgc2IgbWFkMTY9MQorb3B0aW9ucyBtYWQxNiBpcnE9MTAgZG1hPTAgZG1hMTY9MSBpbz0weDUzMCBqb3lzdGljaz0xIGNkdHlwZT0wCitvcHRpb25zIG9wbDMgaW89MHgzODgKK2luc3RhbGwgbWFkMTYgL3NiaW4vbW9kcHJvYmUgLWkgbWFkMTYgJiYgL3NiaW4vYWQxODQ4X21peGVyX3Jlcm91dGUgMTQgOCAxNSAzIDE2IDYKKworSWYgeW91IGhhdmUgYW4gTVBVIGRhdWdodGVyY2FyZCBvciBvbmJvYXJkIE1QVSB5b3Ugd2lsbCB3YW50IHRvIGFkZCB0byB0aGUKKyJvcHRpb25zIG1hZDE2IiBsaW5lIC0gZWcgCisKK29wdGlvbnMgbWFkMTYgaXJxPTUgZG1hPTAgZG1hMTY9MyBpbz0weDUzMCBtcHVfaW89MHgzMzAgbXB1X2lycT05CisKK1RvIHNldCB0aGUgSS9PIGFuZCBJUlEgb2YgdGhlIE1QVS4KKworCitFeHBsYWluOgorCithbGlhcyBtaXhlcjAgbWFkMTYKK2FsaWFzIGF1ZGlvMCBtYWQxNgorYWxpYXMgbWlkaTAgIG1hZDE2CithbGlhcyBzeW50aDAgb3BsMworCitXaGVuIGFueSBzb3VuZCBkZXZpY2UgaXMgb3BlbmVkIHRoZSBrZXJuZWwgcmVxdWVzdHMgYXV0by1sb2FkaW5nCitvZiBjaGFyLW1ham9yLTE0LiBUaGVyZSBpcyBhIGJ1aWx0LWluIGFsaWFzIHRoYXQgdHJhbnNsYXRlcyB0aGlzCityZXF1ZXN0IHRvIGxvYWRpbmcgdGhlIG1haW4gc291bmQgbW9kdWxlLgorCitUaGUgc291bmQgbW9kdWxlIGluIGl0cyB0dXJuIHdpbGwgcmVxdWVzdCBsb2FkaW5nIG9mIGEgc3ViLWRyaXZlcgorZm9yIG1peGVyLCBhdWRpbywgbWlkaSBvciBzeW50aGVzaXplciBkZXZpY2UuIFRoZSBmaXJzdCAzIGFyZQorc3VwcG9ydGVkIGJ5IHRoZSBtYWQxNiBkcml2ZXIuIFRoZSBzeW50aCBkZXZpY2UgaXMgc3VwcG9ydGVkCitieSB0aGUgb3BsMyBkcml2ZXIuCisKK1RoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gYXV0b2xvYWQgdGhlIHNvdW5kIGRldmljZSBkcml2ZXIKK2lmIG1vcmUgdGhhbiBvbmUgY2FyZCBpcyBpbnN0YWxsZWQuCisKK29wdGlvbnMgc2IgbWFkMTY9MQorCitUaGlzIGlzIGxlZnQgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gSWYgeW91IGVuYWJsZSB0aGUKK2NvbmZpZyBvcHRpb24gJ1N1cHBvcnQgTUlESSBpbiBvbGRlciBNQUQxNiBiYXNlZCBjYXJkcyAocmVxdWlyZXMgU0IpJworb3IgaWYgeW91IHVzZSBhbiBvbGRlciBtYWQxNiBkcml2ZXIgaXQgd2lsbCBmb3JjZSBsb2FkaW5nIG9mIHRoZQorU291bmRCbGFzdGVyIGRyaXZlci4gVGhpcyBvcHRpb24gdGVsbHMgdGhlIFNCIGRyaXZlciBub3QgdG8gbG9vaworZm9yIGEgU0IgY2FyZCBidXQgdG8gd2FpdCBmb3IgdGhlIG1hZDE2IGRyaXZlci4KKworb3B0aW9ucyBtYWQxNiBpcnE9MTAgZG1hPTAgZG1hMTY9MSBpbz0weDUzMCBqb3lzdGljaz0xIGNkdHlwZT0wCitvcHRpb25zIG9wbDMgaW89MHgzODgKKworcG9zdC1pbnN0YWxsIG1hZDE2IC9zYmluL2FkMTg0OF9taXhlcl9yZXJvdXRlIDE0IDggMTUgMyAxNiA2CisKK1RoaXMgc2V0cyByZXNvdXJjZXMgYW5kIG9wdGlvbnMgZm9yIHRoZSBtYWQxNiBhbmQgb3BsMyBkcml2ZXJzLgorSSB1c2UgdHdvIERNQSBjaGFubmVscyAob25seSBvbmUgaXMgcmVxdWlyZWQpIHRvIGVuYWJsZSBmdWxsIGR1cGxleC4KK2pveXN0aWNrPTEgZW5hYmxlcyB0aGUgam95c3RpY2sgcG9ydC4gY2R0eXBlPTAgZGlzYWJsZXMgdGhlIGNkIHBvcnQuCitZb3UgY2FuIGFsc28gc2V0IG1wdV9pbyBhbmQgbXB1X2lycSBpbiB0aGUgbWFkMTYgb3B0aW9ucyBmb3IgdGhlCit1YXJ0NDAxIGRyaXZlci4KKworVGhpcyB0ZWxscyBtb2Rwcm9iZSB0byBydW4gL3NiaW4vYWQxODQ4X21peGVyX3Jlcm91dGUgYWZ0ZXIKK21hZDE2IGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgYW5kIGluaXRpYWxpemVkLiBUaGUgc291cmNlCitmb3IgYWQxODQ4X21peGVyX3Jlcm91dGUgaXMgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGlzIHJlYWRtZQorZmlsZS4gSXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIHNvdW5kIGRyaXZlciB0byBrbm93IHRoZSBhY3R1YWwKK2Nvbm5lY3Rpb25zIHRvIHRoZSBtaXhlci4gVGhlIDMgaW5wdXRzIGludGVuZGVkIGZvciBjZCwgc3ludGgKK2FuZCBsaW5lLWluIGFyZSBtYXBwZWQgdG8gdGhlIGdlbmVyaWMgaW5wdXRzIGxpbmUxLCBsaW5lMiBhbmQKK2xpbmUzLiBUaGlzIHByb2dyYW0gcmVyb3V0ZXMgdGhlc2UgbWl4ZXIgY2hhbm5lbHMgdG8gdGhlaXIKK3JpZ2h0IG5hbWVzIChub3RlIHRoZSByaWdodCBtYXBwaW5nIGRlcGVuZHMgb24gdGhlIGFjdHVhbCBzb3VuZAorY2FyZCB0aGF0IHlvdSB1c2UpLgorVGhlIG51bWVyaWMgcGFyYW1ldGVycyBtZWFuOgorIDE0PWxpbmUxIDg9Y2QgICAgLSByZXJvdXRlIGxpbmUxIHRvIHRoZSBDRCBpbnB1dC4KKyAxNT1saW5lMiAzPXN5bnRoIC0gcmVyb3V0ZSBsaW5lMiB0byB0aGUgc3ludGhlc2l6ZXIgaW5wdXQuCisgMTY9bGluZTMgNj1saW5lICAtIHJlcm91dGUgbGluZTMgdG8gdGhlIGxpbmUgaW5wdXQuCitGb3IgcmVmZXJlbmNlIG9uIG90aGVyIGlucHV0IG5hbWVzIGxvb2sgYXQgdGhlIGZpbGUKKy91c3IvaW5jbHVkZS9saW51eC9zb3VuZGNhcmQuaC4KKworVXNpbmcgYSBqb3lzdGljaworLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBtdXN0IGVuYWJsZSBhIGpveXN0aWNrIGluIHRoZSBtYWQxNiBvcHRpb25zLiAoYWxzbworaW4gL2V0Yy9pc2FwbnAuY29uZiBpZiB5b3UgdXNlIGl0KS4KK1Rlc3RlZCB3aXRoIHJlZ3VsYXIgYW5hbG9nIGpveXN0aWNrcy4KKworQSBDRFJPTSBkcml2ZSBjb25uZWN0ZWQgdG8gdGhlIHNvdW5kIGNhcmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgODJDOTMxIGNoaXAgaGFzIHN1cHBvcnQgb25seSBmb3Igc2Vjb25kYXJ5IEFUQVBJIGNkcm9tLgorKGNkdHlwZT04KS4gTG9hZGluZyB0aGUgbWFkMTYgZHJpdmVyIHJlc2V0cyB0aGUgQzkzMSBjaGlwCithbmQgaWYgYSBjZHJvbSB3YXMgYWxyZWFkeSBtb3VudGVkIGl0IG1heSBjYXVzZSBhIGNvbXBsZXRlCitzeXN0ZW0gaGFuZy4gRG8gbm90IHVzZSB0aGUgc291bmQgY2FyZCBpZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZS4KK0lmIHlvdSBkbyB1c2UgdGhlIHNvdW5kIGNhcmQgaXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IGxvYWQKK3RoZSBtYWQxNiBkcml2ZXIgKHVzZSAibW9kcHJvYmUgbWFkMTYiIHRvIHByZXZlbnQgYXV0by11bmxvYWRpbmcpCitiZWZvcmUgdGhlIGNkcm9tIGlzIGFjY2Vzc2VkIHRoZSBmaXJzdCB0aW1lLgorCitVc2luZyB0aGUgc291bmQgZHJpdmVyIGJ1aWx0LWluIHRvIHRoZSBrZXJuZWwgbWF5IGhlbHAgaGVyZSwgYnV0Li4uCitNb3N0IG5ldyBzeXN0ZW1zIGhhdmUgYSBQblAgQklPUyBhbmQgYWxzbyB0d28gSURFIGNvbnRyb2xsZXJzLgorVGhlIElERSBjb250cm9sbGVyIG9uIHRoZSBzb3VuZCBjYXJkIG1heSBiZSBuZWVkZWQgb25seSBvbiBvbGRlcgorc3lzdGVtcyAod2hpY2ggaGF2ZSBvbmx5IG9uZSBJREUgY29udHJvbGxlcikgYnV0IHRoZXNlIHN5c3RlbXMKK2Fsc28gZG8gbm90IGhhdmUgYSBQblAgQklPUyAtIHJlcXVpcmluZyBpc2FwbnB0b29scyBhbmQgYSBtb2R1bGFyaXplZAorZHJpdmVyLgorCitLbm93biBwcm9ibGVtcworLS0tLS0tLS0tLS0tLS0KKzEuIFNlZSB0aGUgc2VjdGlvbiBvbiAiQSBDRFJPTSBkcml2ZSBjb25uZWN0ZWQgdG8gdGhlIHNvdW5kIGNhcmQiLgorCisyLiBPbiBteSBzeXN0ZW0gdGhlIGNvZGVjIGNhbm5vdCBjYXB0dXJlIGNvbXBhbmRlZCBzb3VuZCBzYW1wbGVzLgorICAgKGVnLiwgcmVjb3JkaW5nIGZyb20gL2Rldi9hdWRpbykuIFdoZW4gYW55IGNvbXBhbmRlZCBjYXB0dXJlIGlzCisgICByZXF1ZXN0ZWQgSSBnZXQgc3RlcmVvLTE2IGJpdCBzYW1wbGVzIGluc3RlYWQuIFBsYXliYWNrIG9mCisgICBjb21wYW5kZWQgc2FtcGxlcyB3b3JrcyB3ZWxsLiBBcHBhcmVudGx5IHRoaXMgcHJvYmxlbSBpcyBub3QgY29tbW9uCisgICB0byBhbGwgQzkzMSBiYXNlZCBjYXJkcy4gSSBkbyBub3Qga25vdyBob3cgdG8gaWRlbnRpZnkgY2FyZHMgdGhhdAorICAgaGF2ZSB0aGlzIHByb2JsZW0uCisKK1NvdXJjZSBmb3IgYWQxODQ4X21peGVyX3Jlcm91dGUuYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgorCitzdGF0aWMgY2hhciAqbWl4ZXJfbmFtZXNbU09VTkRfTUlYRVJfTlJERVZJQ0VTXSA9CisJU09VTkRfREVWSUNFX0xBQkVMUzsKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworCWludCB2YWwsIGZyb20sIHRvOworCWludCBpLCBmZDsKKworCWZkID0gb3BlbigiL2Rldi9taXhlciIsIE9fUkRXUik7CisJaWYoZmQgPCAwKSB7CisJCXBlcnJvcigiL2Rldi9taXhlciIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IoaSA9IDI7IGkgPCBhcmdjOyBpICs9IDIpIHsKKwkJZnJvbSA9IGF0b2koYXJndltpLTFdKTsKKwkJdG8gPSBhdG9pKGFyZ3ZbaV0pOworCisJCWlmKHRvID09IFNPVU5EX01JWEVSX05PTkUpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB0dXJuaW5nIG9mZiBtaXhlciAlc1xuIiwKKwkJCQlhcmd2WzBdLCBtaXhlcl9uYW1lc1t0b10pOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiByZXJvdXRpbmcgbWl4ZXIgJXMgdG8gJXNcbiIsCisJCQkJYXJndlswXSwgbWl4ZXJfbmFtZXNbZnJvbV0sIG1peGVyX25hbWVzW3RvXSk7CisKKwkJdmFsID0gZnJvbSA8PCA4IHwgdG87CisKKwkJaWYoaW9jdGwoZmQsIFNPVU5EX01JWEVSX1BSSVZBVEUyLCAmdmFsKSkgeworCQkJcGVycm9yKCJBRDE4NDggbWl4ZXIgcmVyb3V0ZSIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUEFTMTYgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9QQVMxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTFiM2RjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUEFTMTYKQEAgLTAsMCArMSwxNjMgQEAKK1BybyBBdWRpbyBTcGVjdHJ1bSAxNiBmb3IgMi4zLjk5IGFuZCBsYXRlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2J5IFRob21hcyBNb2xpbmEgKHRtb2xpbmFAaG9tZS5jb20pCitsYXN0IG1vZGlmaWVkIDMgTWFyIDIwMDEKK0Fja25vd2xlZGdlbWVudCB0byBBeGVsIEJvbGR0IChib2xkdEBtYXRoLnVjc2IuZWR1KSBmb3Igc3R1ZmYgdGFrZW4KK2Zyb20gQ29uZmlndXJlLmhlbHAsIFJpY2NhcmRvIEZhY2NoZXR0aSBmb3Igc3R1ZmYgZnJvbSBSRUFETUUuT1NTLAorYW5kIG90aGVycyB3aG9zZSBuYW1lcyBJIGNvdWxkIG5vdCBmaW5kLgorCitUaGlzIGRvY3VtZW50YXRpb24gaXMgcmVsZXZhbnQgZm9yIHRoZSBQQVMxNiBkcml2ZXIgKHBhczJfY2FyZC5jIGFuZAorZnJpZW5kcykgdW5kZXIga2VybmVsIHZlcnNpb24gMi4zLjk5IGFuZCBsYXRlci4gIElmIHlvdSBhcmUKK3VuZmFtaWxpYXIgd2l0aCBjb25maWd1cmluZyBzb3VuZCB1bmRlciBMaW51eCwgcGxlYXNlIHJlYWQgdGhlCitTb3VuZC1IT1dUTywgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uIGFuZCBvdGhlcgorcmVsZXZhbnQgZG9jcyBmaXJzdC4KKworVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyByZWxldmFudCBpbmZvcm1hdGlvbiBmcm9tIFJFQURNRS5PU1MKK2FuZCBsZWdhY3kgZG9jcyBmb3IgdGhlIFBybyBBdWRpbyBTcGVjdHJ1bSAxNiAoUEFTMTYpOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBwYXMyX2NhcmQuYyBkcml2ZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBjYXJkcyAtLQorUHJvIEF1ZGlvIFNwZWN0cnVtIDE2IChQQVMxNikgYW5kIGNvbXBhdGlibGVzOgorICAgICAgICBQcm8gQXVkaW8gU3BlY3RydW0gMTYKKyAgICAgICAgUHJvIEF1ZGlvIFN0dWRpbyAxNgorICAgICAgICBMb2dpdGVjaCBTb3VuZCBNYW4gMTYKKyAgICAgICAgTk9URSEgVGhlIG9yaWdpbmFsIFBybyBBdWRpbyBTcGVjdHJ1bSBhcyB3ZWxsIGFzIHRoZSBQQVMrIGFyZSBub3QKKyAgICAgICAgICAgICAgYW5kIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgorCitUaGUgc291bmQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZGlhbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvdW5kIGNvbmZpZ3VyYXRpb24gc3RhcnRzIGJ5IG1ha2luZyBzb21lIHllcy9ubyBxdWVzdGlvbnMuIEJlIGNhcmVmdWwKK3doZW4gYW5zd2VyaW5nIHRvIHRoZXNlIHF1ZXN0aW9ucyBzaW5jZSBhbnN3ZXJpbmcgeSB0byBhIHF1ZXN0aW9uIG1heQorcHJldmVudCBzb21lIGxhdGVyIG9uZXMgZnJvbSBiZWluZyBhc2tlZC4gRm9yIGV4YW1wbGUgZG9uJ3QgYW5zd2VyIHkgdG8KK3RoZSBxdWVzdGlvbiBhYm91dCAoUEFTMTYpIGlmIHlvdSBkb24ndCByZWFsbHkgaGF2ZSBhIFBBUzE2LiAgU291bmQKK2NvbmZpZ3VyYXRpb24gbWF5IGFsc28gYmUgbWFkZSBtb2R1bGFyIGJ5IGFuc3dlcmluZyBtIHRvIGNvbmZpZ3VyYXRpb24KK29wdGlvbnMgcHJlc2VudGVkLiAKKworTm90ZSBhbHNvIHRoYXQgYWxsIHF1ZXN0aW9ucyBtYXkgbm90IGJlIGFza2VkLiBUaGUgY29uZmlndXJhdGlvbiBwcm9ncmFtCittYXkgZGlzYWJsZSBzb21lIHF1ZXN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGVhcmxpZXIgY2hvaWNlcy4gSXQgbWF5IGFsc28KK3NlbGVjdCBzb21lIG9wdGlvbnMgYXV0b21hdGljYWxseSBhcyB3ZWxsLgorCisgICJQcm9BdWRpb1NwZWN0cnVtIDE2IHN1cHBvcnQiLAorICAgICAgICAtIEFuc3dlciAneSdfT05MWV8gaWYgeW91IGhhdmUgYSBQcm8gQXVkaW8gU3BlY3RydW0gXzE2XywKKyAgICAgICAgICBQcm8gQXVkaW8gU3R1ZGlvIDE2IG9yIExvZ2l0ZWNoIFNvdW5kTWFuIDE2IChiZSBzdXJlIHRoYXQKKyAgICAgICAgICB5b3UgcmVhZCB0aGUgYWJvdmUgbGlzdCBjb3JyZWN0bHkpLiBEb24ndCBhbnN3ZXIgJ3knIGlmIHlvdQorICAgICAgICAgIGhhdmUgc29tZSBvdGhlciBjYXJkIG1hZGUgYnkgTWVkaWEgVmlzaW9uIG9yIExvZ2l0ZWNoIHNpbmNlIHRoZXkKKyAgICAgICAgICBhcmUgbm90IFBBUzE2IGNvbXBhdGlibGUuCisgICAgICAgICAgTk9URSEgU2luY2UgMy41LWJldGExMCB5b3UgbmVlZCB0byBlbmFibGUgU0Igc3VwcG9ydCAobmV4dCBxdWVzdGlvbikKKyAgICAgICAgICBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFNCIGVtdWxhdGlvbiBvZiBQQVMxNi4gSXQncyBhbHNvIHBvc3NpYmxlIHRvCisgICAgICAgICAgdGhlIGVtdWxhdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgYSB0cnVlIFNCIGNhcmQgdG9nZXRoZXIgd2l0aCBQQVMxNgorICAgICAgICAgICh0aGVyZSBpcyBhbm90aGVyIHF1ZXN0aW9uIGFib3V0IHRoaXMgdGhhdCBpcyBhc2tlZCBsYXRlcikuCisKKyAgIkdlbmVyaWMgT1BMMi9PUEwzIEZNIHN5bnRoZXNpemVyIHN1cHBvcnQiLAorICAgICAgICAtIEFuc3dlciAneScgaWYgeW91ciBjYXJkIGhhcyBhIEZNIGNoaXAgbWFkZSBieSBZYW1haGEgKE9QTDIvT1BMMy9PUEw0KS4KKwkgIFRoZSBQQVMxNiBoYXMgYW4gT1BMMy1jb21wYXRpYmxlIEZNIGNoaXAuCisKK1dpdGggUEFTMTYgeW91IGNhbiB1c2UgdHdvIGF1ZGlvIGRldmljZSBmaWxlcyBhdCB0aGUgc2FtZSB0aW1lLiAvZGV2L2RzcCAoYW5kCisvZGV2L2F1ZGlvKSBpcyBjb25uZWN0ZWQgdG8gdGhlIDgvMTYgYml0IG5hdGl2ZSBjb2RlYyBhbmQgdGhlIC9kZXYvZHNwMSAoYW5kCisvZGV2L2F1ZGlvMSkgaXMgY29ubmVjdGVkIHRvIHRoZSBTQiBlbXVsYXRpb24gKDggYml0IG1vbm8gb25seSkuCisKKworVGhlIG5ldyBzdHVmZiBmb3IgMi4zLjk5IGFuZCBsYXRlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZnJvbSBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwCithcmUgcmVsZXZhbnQgdG8gY29uZmlndXJpbmcgdGhlIFBBUzE2OgorCitTb3VuZCBjYXJkIHN1cHBvcnQKK0NPTkZJR19TT1VORAorICBJZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQgaW4geW91ciBjb21wdXRlciwgaS5lLiBpZiBpdCBjYW4gc2F5IG1vcmUKKyAgdGhhbiBhbiBvY2Nhc2lvbmFsIGJlZXAsIHNheSBZLiBCZSBzdXJlIHRvIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbgorICBhYm91dCB5b3VyIHNvdW5kIGNhcmQgYW5kIGl0cyBjb25maWd1cmF0aW9uIGRvd24gKEkvTyBwb3J0LAorICBpbnRlcnJ1cHQgYW5kIERNQSBjaGFubmVsKSwgYmVjYXVzZSB5b3Ugd2lsbCBiZSBhc2tlZCBmb3IgaXQuCisKKyAgWW91IHdhbnQgdG8gcmVhZCB0aGUgU291bmQtSE9XVE8sIGF2YWlsYWJsZSBmcm9tCisgIGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvIC4gR2VuZXJhbCBpbmZvcm1hdGlvbgorICBhYm91dCB0aGUgbW9kdWxhciBzb3VuZCBzeXN0ZW0gaXMgY29udGFpbmVkIGluIHRoZSBmaWxlcworICBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24uIFRoZSBmaWxlCisgIERvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MgY29udGFpbnMgc29tZSBzbGlnaHRseSBvdXRkYXRlZCBidXQKKyAgc3RpbGwgdXNlZnVsIGluZm9ybWF0aW9uIGFzIHdlbGwuCisKK09TUyBzb3VuZCBtb2R1bGVzCitDT05GSUdfU09VTkRfT1NTCisgIE9TUyBpcyB0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gc3VpdGUgb2Ygc291bmQgY2FyZCBkcml2ZXJzLiBUaGV5IG1ha2UKKyAgc291bmQgcHJvZ3JhbW1pbmcgZWFzaWVyIHNpbmNlIHRoZXkgcHJvdmlkZSBhIGNvbW1vbiBBUEkuIFNheSBZIG9yIE0KKyAgaGVyZSAodGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzb3VuZC5vKSBpZiB5b3UgaGF2ZW4ndCBmb3VuZCBhCisgIGRyaXZlciBmb3IgeW91ciBzb3VuZCBjYXJkIGFib3ZlLCB0aGVuIHBpY2sgeW91ciBkcml2ZXIgZnJvbSB0aGUKKyAgbGlzdCBiZWxvdy4KKworUGVyc2lzdGVudCBETUEgYnVmZmVycworQ09ORklHX1NPVU5EX0RNQVAKKyAgTGludXggY2FuIG9mdGVuIGhhdmUgcHJvYmxlbXMgYWxsb2NhdGluZyBETUEgYnVmZmVycyBmb3IgSVNBIHNvdW5kCisgIGNhcmRzIG9uIG1hY2hpbmVzIHdpdGggbW9yZSB0aGFuIDE2TUIgb2YgUkFNLiBUaGlzIGlzIGJlY2F1c2UgSVNBCisgIERNQSBidWZmZXJzIG11c3QgZXhpc3QgYmVsb3cgdGhlIDE2TUIgYm91bmRhcnkgYW5kIGl0IGlzIHF1aXRlCisgIHBvc3NpYmxlIHRoYXQgYSBsYXJnZSBlbm91Z2ggZnJlZSBibG9jayBpbiB0aGlzIHJlZ2lvbiBjYW5ub3QgYmUKKyAgZm91bmQgYWZ0ZXIgdGhlIG1hY2hpbmUgaGFzIGJlZW4gcnVubmluZyBmb3IgYSB3aGlsZS4gSWYgeW91IHNheSBZCisgIGhlcmUgdGhlIERNQSBidWZmZXJzICg2NEtiKSB3aWxsIGJlIGFsbG9jYXRlZCBhdCBib290IHRpbWUgYW5kIGtlcHQKKyAgdW50aWwgdGhlIHNodXRkb3duLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBpZiB5b3Ugc2FpZCBZIHRvCisgICJPU1Mgc291bmQgbW9kdWxlcyIsIGFib3ZlLiBJZiB5b3Ugc2FpZCBNIHRvICJPU1Mgc291bmQgbW9kdWxlcyIKKyAgdGhlbiB5b3UgY2FuIGdldCB0aGUgcGVyc2lzdGVudCBETUEgYnVmZmVyIGZ1bmN0aW9uYWxpdHkgYnkgcGFzc2luZworICB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50ICJkbWFidWY9MSIgdG8gdGhlIHNvdW5kLm8gbW9kdWxlLgorCisgIFNheSB5IGhlcmUgZm9yIFBBUzE2LgorCitQcm9BdWRpb1NwZWN0cnVtIDE2IHN1cHBvcnQKK0NPTkZJR19TT1VORF9QQVMKKyAgQW5zd2VyIFkgb25seSBpZiB5b3UgaGF2ZSBhIFBybyBBdWRpbyBTcGVjdHJ1bSAxNiwgUHJvQXVkaW8gU3R1ZGlvCisgIDE2IG9yIExvZ2l0ZWNoIFNvdW5kTWFuIDE2IHNvdW5kIGNhcmQuIERvbid0IGFuc3dlciBZIGlmIHlvdSBoYXZlCisgIHNvbWUgb3RoZXIgY2FyZCBtYWRlIGJ5IE1lZGlhIFZpc2lvbiBvciBMb2dpdGVjaCBzaW5jZSB0aGV5IGFyZSBub3QKKyAgUEFTMTYgY29tcGF0aWJsZS4gIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZW5hYmxlIHRoZSAgc2VwYXJhdGUKKyAgU291bmQgQmxhc3RlciBzdXBwb3J0OyBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgUEFTIGRyaXZlci4KKworICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCisgICJwYXMyPTxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxzYmlvPiw8c2JpcnE+LDxzYmRtYT4sPHNiZG1hMj4KKyAgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKK0ZNIFN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQKK0NPTkZJR19TT1VORF9ZTTM4MTIKKyAgQW5zd2VyIFkgaWYgeW91ciBjYXJkIGhhcyBhIEZNIGNoaXAgbWFkZSBieSBZYW1haGEgKE9QTDIvT1BMMy9PUEw0KS4KKyAgQW5zd2VyaW5nIFkgaXMgdXN1YWxseSBhIHNhZmUgYW5kIHJlY29tbWVuZGVkIGNob2ljZSwgaG93ZXZlciBzb21lCisgIGNhcmRzIG1heSBoYXZlIHNvZnR3YXJlIChUU1IpIEZNIGVtdWxhdGlvbi4gRW5hYmxpbmcgRk0gc3VwcG9ydCB3aXRoCisgIHRoZXNlIGNhcmRzIG1heSBjYXVzZSB0cm91YmxlIChJIGRvbid0IGN1cnJlbnRseSBrbm93IG9mIGFueSBzdWNoCisgIGNhcmRzLCBob3dldmVyKS4KKyAgUGxlYXNlIHJlYWQgdGhlIGZpbGUgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMyBpZiB5b3VyIGNhcmQgaGFzIGFuCisgIE9QTDMgY2hpcC4KKyAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAorICAib3BsMz08aW8+IiB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKworICBJZiB5b3UgY29tcGlsZSB5b3VyIGRyaXZlcnMgaW50byB0aGUga2VybmVsLCB5b3UgTVVTVCBjb25maWd1cmUgCisgIE9QTDMgc3VwcG9ydCBhcyBhIG1vZHVsZSBmb3IgUEFTMTYgc3VwcG9ydCB0byB3b3JrIHByb3Blcmx5LgorICBZb3UgY2FuIHRoZW4gZ2V0IE9QTDMgZnVuY3Rpb25hbGl0eSBieSBpc3N1aW5nIHRoZSBjb21tYW5kOgorICBpbnNtb2Qgb3BsMworICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZWl0aGVyIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gCisgIC9ldGMvbW9kcHJvYmUuY29uZjoKKyAgb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CisgIG9yIGVsc2UgYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL2xpbG8uY29uZjoKKyAgb3BsMz0weDM4OAorCisKK0VYQU1QTEVTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUbyB1c2UgdGhlIFBBUzE2IGluIG15IGNvbXB1dGVyIEkgaGF2ZSBlbmFibGVkIHRoZSBmb2xsb3dpbmcgc291bmQKK2NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKworQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TT1VORF9PU1M9eQorQ09ORklHX1NPVU5EX1RSQUNFSU5JVD15CitDT05GSUdfU09VTkRfRE1BUD15CitDT05GSUdfU09VTkRfUEFTPXkKK0NPTkZJR19TT1VORF9TQj1uCitDT05GSUdfU09VTkRfWU0zODEyPW0KKworSSBoYXZlIGFsc28gaW5jbHVkZWQgdGhlIGZvbGxvd2luZyBhcHBlbmQgbGluZSBpbiAvZXRjL2xpbG8uY29uZjoKK2FwcGVuZD0icGFzMj0weDM4OCwxMCwzLC0xLDB4MjIwLDUsMSwtMSBzYj0weDIyMCw1LDEsLTEgb3BsMz0weDM4OCIKKworVGhlIGlvIGFkZHJlc3Mgb2YgMHgzODggaXMgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9uIHRoZSBQQVMxNi4gIFRoZQoraXJxIG9mIDEwIGFuZCBkbWEgb2YgMyBtYXkgbm90IG1hdGNoIHlvdXIgaW5zdGFsbGF0aW9uLiAgVGhlIGFib3ZlIAorY29uZmlndXJhdGlvbiBlbmFibGVzIFBBUzE2LCA4LWJpdCBTb3VuZGJsYXN0ZXIgYW5kIE9QTDMKK2Z1bmN0aW9uYWxpdHkuICBJZiBTb3VuZGJsYXN0ZXIgZnVuY3Rpb25hbGl0eSBpcyBub3QgZGVzaXJlZCwgdGhlCitmb2xsb3dpbmcgbGluZSB3b3VsZCBiZSBhcHByb3ByaWF0ZToKK2FwcGVuZD0icGFzMj0weDM4OCwxMCwzLC0xLDAsLTEsLTEsLTEgb3BsMz0weDM4OCIKKworSWYgc291bmQgaXMgYnVpbHQgdG90YWxseSBtb2R1bGFyLCB0aGUgYWJvdmUgb3B0aW9ucyBtYXkgYmUgCitzcGVjaWZpZWQgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mIGZvciBwYXMyLCBzYiBhbmQgb3BsMworcmVzcGVjdGl2ZWx5LiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BTUyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BTUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODdiOTUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUFNTCkBAIC0wLDAgKzEsNDEgQEAKK1RoZSBQU1MgY2FyZHMgYW5kIG90aGVyIEVDSE8gYmFzZWQgY2FyZHMgcHJvdmlkZSBhbiBvbmJvYXJkIERTUCB3aXRoIAorZG93bmxvYWRhYmxlIHByb2dyYW1zIGFuZCBhbHNvIGhhcyBhbiBBRDE4NDggIk1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0iIAorZGV2aWNlLiBUaGUgUFNTIGRyaXZlciBlbmFibGVzIE1TUyBhbmQgTVBVNDAxIG1vZGVzIG9mIHRoZSBjYXJkLiBTQiAKK2lzIG5vdCBlbmFibGVkIHNpbmNlIGl0IGRvZXNuJ3Qgd29yayBjb25jdXJyZW50bHkgd2l0aCBNU1MuIAorCitJZiB5b3UgYnVpbGQgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgdGhlbiB0aGUgZHJpdmVyIHRha2VzIHRoZSBmb2xsb3dpbmcKK3BhcmFtZXRlcnMKKworcHNzX2lvLiAJVGhlIEkvTyBiYXNlIHRoZSBQU1MgY2FyZCBpcyBjb25maWd1cmVkIGF0IChub3JtYWxseSAweDIyMAorCQlvciAweDI0MCkKKworbXNzX2lvCQlUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBNaWNyb3NvZnQgU291bmQgU3lzdGVtIGludGVyZmFjZS4KKwkJVGhpcyBpcyBub3JtYWxseSAweDUzMCwgYnV0IG1heSBiZSAweDYwNCBvciBvdGhlciBhZGRyZXNzZXMuCisKK21zc19pcnEJCVRoZSBpbnRlcnJ1cHQgYXNzaWduZWQgdG8gdGhlIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0KKwkJZW11bGF0aW9uLiBJUlEncyAzLDUsNyw5LDEwLDExIGFuZCAxMiBhcmUgYXZhaWxhYmxlLiBJZiB5b3UKKwkJZ2V0IElSUSBlcnJvcnMgYmUgc3VyZSB0byBjaGVjayB0aGUgaW50ZXJydXB0IGlzIHNldCB0byAKKwkJIklTQS9MZWdhY3kiIGluIHRoZSBCSU9TIG9uIG1vZGVybiBtYWNoaW5lcy4KKworbXNzX2RtYQkJVGhlIERNQSBjaGFubmVsIHVzZWQgYnkgdGhlIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0uCisJCVRoaXMgY2FuIGJlIDAsIDEsIG9yIDMuIERNQSAwIGlzIG5vdCBhdmFpbGFibGUgb24gb2xkZXIgCisJCW1hY2hpbmVzIGFuZCB3aWxsIGNhdXNlIGEgY3Jhc2ggb24gdGhlbS4KKworbXB1X2lvCQlUaGUgTVBVIGVtdWxhdGlvbiBiYXNlIGFkZHJlc3MuIFRoaXMgc2V0cyB0aGUgYmFzZSBvZiB0aGUKKwkJc3ludGhlc2l6ZXIuIEl0IGlzIHR5cGljYWxseSAweDMzMCBidXQgY2FuIGJlIGFsdGVyZWQuCisKK21wdV9pcnEJCVRoZSBpbnRlcnJ1cHQgdG8gdXNlIGZvciB0aGUgc3ludGhlc2l6ZXIuIEl0IG11c3QgZGlmZmVyCisJCWZyb20gdGhlIElSUSB1c2VkIGJ5IHRoZSBNaWNyb3NvZnQgU291bmQgU3lzdGVtIHBvcnQuCisKKworVGhlIG1wdV9pby9tcHVfaXJxIGZpZWxkcyBhcmUgb3B0aW9uYWwuIElmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQgdGhlIAorc3ludGhlc2l6ZXIgcGFydHMgYXJlIG5vdCBjb25maWd1cmVkLgorCitXaGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkIGl0IGxvb2tzIGZvciBhIGZpbGUgY2FsbGVkIAorL2V0Yy9zb3VuZC9wc3Nfc3ludGguIFRoaXMgaXMgdGhlIGZpcm13YXJlIGZpbGUgZnJvbSB0aGUgRE9TIGluc3RhbGwgZGlza3MuCitUaGlzIGZpbCBob2xkcyBhIGdlbmVyYWwgTUlESSBlbXVsYXRpb24uIFRoZSBmaWxlIGV4cGVjdGVkIGlzIGNhbGxlZAorZ2VubWlkaS5sZCBvbiBuZXdlciBET1MgZHJpdmVyIGluc3RhbGwgZGlza3MgYW5kIHN5bnRoLmxkIG9uIG9sZGVyIG9uZXMuCisKK1lvdSBjYW4gYWxzbyBsb2FkIGFsdGVybmF0aXZlIERTUCBhbGdvcml0aG1zIGludG8gdGhlIGNhcmQgaWYgeW91IHdpc2guIE9uZQorYWx0ZXJuYXRpdmUgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3Lm1wZzEyMy5kZS8KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUFNTLXVwZGF0ZXMgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9QU1MtdXBkYXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODRkZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUFNTLXVwZGF0ZXMKQEAgLTAsMCArMSw4OCBAQAorCVRoaXMgZmlsZSBjb250YWlucyBub3RlcyBmb3IgdXNlcnMgb2YgUFNTIHNvdW5kIGNhcmRzIHdobyB3aXNoIHRvIHVzZSB0aGUgCituZXdseSBhZGRlZCBmZWF0dXJlcyBvZiB0aGUgbmV3ZXN0IHZlcnNpb24gb2YgdGhpcyBkcml2ZXIuCisKKwlUaGUgbWFqb3IgZW5oYW5jZW1lbnRzIHByZXNlbnQgaW4gdGhpcyBuZXcgcmV2aXNpb24gb2YgdGhpcyBkcml2ZXIgaXMgdGhlIAorYWRkaXRpb24gb2YgdHdvIG5ldyBtb2R1bGUgcGFyYW1ldGVycyB0aGF0IGFsbG93IHlvdSB0byB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIAorYWxsIHRoZSBmZWF0dXJlcyBwcmVzZW50IG9uIHlvdXIgUFNTIHNvdW5kIGNhcmQuICBUaGVzZSBmZWF0dXJlcyBpbmNsdWRlIHRoZSAKK2FiaWxpdHkgdG8gZW5hYmxlIGJvdGggdGhlIGJ1aWx0aW4gQ0RST00gYW5kIGpveXN0aWNrIHBvcnRzLgorCitwc3NfZW5hYmxlX2pveXN0aWNrCisKKwlUaGlzIHBhcmFtZXRlciBpcyBiYXNpY2FsbHkgYSBmbGFnLiAgQSAwIHdpbGwgbGVhdmUgdGhlIGpveXN0aWNrIHBvcnQgCitkaXNhYmxlZCwgd2hpbGUgYSBub24temVybyB2YWx1ZSB3b3VsZCBlbmFibGUgdGhlIGpveXN0aWNrIHBvcnQuICBUaGUgZGVmYXVsdCAKK3NldHRpbmcgaXMgcHNzX2VuYWJsZV9qb3lzdGljaz0wIGFzIHRoaXMga2VlcHMgdGhpcyBkcml2ZXIgZnVsbHkgY29tcGF0aWJsZSAKK3dpdGggc3lzdGVtcyB0aGF0IHdlcmUgdXNpbmcgcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIuICBJZiB5b3Ugd2lzaCB0byAKK2VuYWJsZSB0aGUgam95c3RpY2sgcG9ydCB5b3Ugd2lsbCBoYXZlIHRvIGFkZCBwc3NfZW5hYmxlX2pveXN0aWNrPTEgYXMgYW4gCithcmd1bWVudCB0byB0aGUgZHJpdmVyLiAgVG8gYWN0dWFsbHkgdXNlIHRoZSBqb3lzdGljayBwb3J0IHlvdSB3aWxsIHRoZW4gaGF2ZSAKK3RvIGxvYWQgdGhlIGpveXN0aWNrIGRyaXZlciBpdHNlbGYuICBKdXN0IHJlbWVtYmVyIHRvIGxvYWQgdGhlIGpveXN0aWNrIGRyaXZlciAKK0FGVEVSIHRoZSBwc3Mgc291bmQgZHJpdmVyLgorCitwc3NfY2Ryb21fcG9ydAorCisJVGhpcyBwYXJhbWV0ZXIgdGFrZXMgYSBwb3J0IGFkZHJlc3MgYXMgaXRzIHBhcmFtZXRlci4gIEFueSBhdmFpbGFibGUgcG9ydCAKK2FkZHJlc3MgY2FuIGJlIHNwZWNpZmllZCB0byBlbmFibGUgdGhlIENEUk9NIHBvcnQsIGV4Y2VwdCBmb3IgMHgwIGFuZCAtMSBhcyAKK3RoZXNlIHZhbHVlcyB3b3VsZCBsZWF2ZSB0aGUgcG9ydCBkaXNhYmxlZC4gIExpa2UgdGhlIGpveXN0aWNrIHBvcnQsIHRoZSBjZHJvbSAKK3BvcnQgd2lsbCByZXF1aXJlIHRoYXQgYW4gYXBwcm9wcmlhdGUgQ0RST00gZHJpdmVyIGJlIGxvYWRlZCBiZWZvcmUgeW91IGNhbiBtYWtlIAordXNlIG9mIHRoZSBuZXdseSBlbmFibGVkIENEUk9NIHBvcnQuICBMaWtlIHRoZSBqb3lzdGljayBwb3J0IG9wdGlvbiBhYm92ZSwgCityZW1lbWJlciB0byBsb2FkIHRoZSBDRFJPTSBkcml2ZXIgQUZURVIgdGhlIHBzcyBzb3VuZCBkcml2ZXIuICBXaGlsZSBpdCBtYXkgCitkaWZmZXIgb24gc29tZSBQU1Mgc291bmQgY2FyZHMsIGFsbCB0aGUgUFNTIHNvdW5kIGNhcmRzIHRoYXQgSSBoYXZlIHNlZW4gaGF2ZSBhIAorYnVpbHRpbiBXZWFybmVzIENEUk9NIHBvcnQuICBJZiB0aGlzIGlzIHRoZSBjYXNlIHdpdGggeW91ciBQU1Mgc291bmQgY2FyZCB5b3UgCitzaG91bGQgbG9hZCBhenRjZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwb3J0IG9wdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHBvcnQgeW91IAorYXNzaWduZWQgdG8gdGhlIENEUk9NIHBvcnQgd2hlbiB5b3UgbG9hZGVkIHlvdXIgcHNzIHNvdW5kIGRyaXZlci4gIChleC4gCittb2Rwcm9iZSBwc3MgcHNzX2Nkcm9tX3BvcnQ9MHgzNDAgJiYgbW9kcHJvYmUgYXp0Y2QgYXp0Y2Q9MHgzNDApICBUaGUgZGVmYXVsdCAKK3NldHRpbmcgb2YgdGhpcyBwYXJhbWV0ZXIgbGVhdmVzIHRoZSBDRFJPTSBwb3J0IGRpc2FibGVkIHRvIG1haW50YWluIGZ1bGwgCitjb21wYXRpYmlsaXR5IHdpdGggc3lzdGVtcyB1c2luZyBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlci4KKworCU90aGVyIG9wdGlvbnMgaGF2ZSBhbHNvIGJlZW4gYWRkZWQgZm9yIHRoZSBhZGRlZCBjb252ZW5pZW5jZSBhbmQgdXRpbGl0eSAKK29mIHRoZSB1c2VyLiAgVGhlc2Ugb3B0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhpcyBkcml2ZXIgaXMgbG9hZGVkIGFzIGEgCittb2R1bGUuCisKK3Bzc19ub19zb3VuZAorCisJVGhpcyBtb2R1bGUgcGFyYW1ldGVyIGlzIGEgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIGRyaXZlciB0byAKK2p1c3QgY29uZmlndXJlIG5vbi1zb3VuZCBjb21wb25lbnRzLiAgMCBjb25maWd1cmVzIGFsbCBjb21wb25lbnRzLCBhIG5vbi0wIAordmFsdWUgd2lsbCBvbmx5IGF0dGVwdCB0byBjb25maWd1cmUgdGhlIENEUk9NIGFuZCBqb3lzdGljayBwb3J0cy4gIFRoaXMgCitwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgYnkgYSB1c2VyIHdobyBvbmx5IHdpc2hlZCB0byB1c2UgdGhlIGJ1aWx0aW4gam95c3RpY2sgCithbmQvb3IgQ0RST00gcG9ydChzKSBvZiBoaXMgUFNTIHNvdW5kIGNhcmQuICBJZiB0aGlzIGRyaXZlciBpcyBsb2FkZWQgd2l0aCB0aGlzIAorcGFyYW1ldGVyIGFuZCB3aXRoIHRoZSBwYXJhbWV0ZXIgYmVsb3cgc2V0IHRvIHRydWUgdGhlbiBhIHVzZXIgY2FuIHNhZmVseSB1bmxvYWQgCit0aGlzIGRyaXZlciB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZCAicm1tb2QgcHNzICYmIHJtbW9kIGFkMTg0OCAmJiBybW1vZCAKK21wdTQwMSAmJiBybW1vZCBzb3VuZCAmJiBybW1vZCBzb3VuZGNvcmUiIGFuZCByZXRhaW4gdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eSBvZiAKK2hpcyBDRFJPTSBhbmQvb3Igam95c3RpY2sgcG9ydChzKSB3aGlsZSBnYWluaW5nIGJhY2sgdGhlIG1lbW9yeSBwcmV2aW91c2x5IHVzZWQgCitieSB0aGUgc291bmQgZHJpdmVycy4gIFRoaXMgZGVmYXVsdCBzZXR0aW5nIG9mIHRoaXMgcGFyYW1ldGVyIGlzIDAgdG8gcmV0YWluIAorZnVsbCBiZWhhdmlvcmFsIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlci4KKworcHNzX2tlZXBfc2V0dGluZ3MKKworCVRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciB5b3Ugd2FudCB0aGUgZHJpdmVyIHRvIHJlc2V0IAorYWxsIGVtdWxhdGlvbnMgd2hlbmV2ZXIgaXRzIHVubG9hZGVkLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciB0aG9zZSB3aG8gYXJlIAorc2hhcmluZyByZXNvdXJjZXMgKGlvIHBvcnRzLCBJUlEncywgRE1BJ3MpIGJldHdlZW4gZGlmZmVyZW50IElTQSBjYXJkcy4gIFRoaXMgCitmbGFnIGNhbiBhbHNvIGJlIHVzZWZ1bCBpbiB0aGF0IGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlciBtYXkgcmVzZXQgYWxsIAorZW11bGF0aW9ucyBieSBkZWZhdWx0IG9uIHRoZSBkcml2ZXIncyB1bmxvYWRpbmcgKGFzIGl0IHByb2JhYmx5IHNob3VsZCksIHNvIAorc3BlY2lmeWluZyBpdCBub3cgd2lsbCBlbnN1cmUgdGhhdCBhbGwgZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIHdpbGwgCitjb250aW51ZSB0byB3b3JrIGFzIGV4cGVjdGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgMSB0byAKK3JldGFpbiBmdWxsIGJlaGF2aW9yYWwgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyLgorCitwc3NfZmlybXdhcmUKKworCVRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZmlybXdhcmUgCitjb2RlIHNvIHRoYXQgYSB1c2VyIGNvdWxkIHRlbGwgdGhlIGRyaXZlciB3aGVyZSB0aGF0IGZpbGUgaXMgbG9jYXRlZCBpbnN0ZWFkIAorb2YgaGF2aW5nIHRvIHB1dCBpdCBpbiBhIHByZWRlZmluZWQgbG9jYXRpb24gd2l0aCBhIHByZWRlZmluZWQgbmFtZS4gIFRoZSAKK2RlZmF1bHQgc2V0dGluZyBvZiB0aGlzIHBhcmFtZXRlciBpcyAiL2V0Yy9zb3VuZC9wc3Nfc3ludGgiIGFzIHRoaXMgd2FzIHRoZSAKK3BhdGggYW5kIGZpbGVuYW1lIHRoZSBoYXJkY29kZWQgdmFsdWUgaW4gdGhlIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyLgorCitFeGFtcGxlczoKKworIyBOb3JtYWwgUFNTIHNvdW5kIGNhcmQgc3lzdGVtLCBsb2FkaW5nIG9mIGRyaXZlcnMuCisjIFNob3VsZCBiZSBzcGVjaWZpZWQgaW4gYW4gcmMgZmlsZSAoZXguIFNsYWNrd2FyZSB1c2VzIC9ldGMvcmMuZC9yYy5tb2R1bGVzKS4KKworL3NiaW4vbW9kcHJvYmUgcHNzIHBzc19pbz0weDIyMCBtcHVfaW89MHgzMzggbXB1X2lycT05IG1zc19pbz0weDUzMCBtc3NfaXJxPTEwIG1zc19kbWE9MSBwc3NfY2Ryb21fcG9ydD0weDM0MCBwc3NfZW5hYmxlX2pveXN0aWNrPTEKKy9zYmluL21vZHByb2JlIGF6dGNkIGF6dGNkPTB4MzQwCisvc2Jpbi9tb2Rwcm9iZSBqb3lzdGljaworCisjIFN5c3RlbSB1c2luZyB0aGUgUFNTIHNvdW5kIGNhcmQganVzdCBmb3IgaXRzIENEUk9NIGFuZCBqb3lzdGljayBwb3J0cy4KKyMgU2hvdWxkIGJlIHNwZWNpZmllZCBpbiBhbiByYyBmaWxlIChleC4gU2xhY2t3YXJlIHVzZXMgL2V0Yy9yYy5kL3JjLm1vZHVsZXMpLgorCisvc2Jpbi9tb2Rwcm9iZSBwc3MgcHNzX2lvPTB4MjIwIHBzc19jZHJvbV9wb3J0PTB4MzQwIHBzc19lbmFibGVfam95c3RpY2s9MSBwc3Nfbm9fc291bmQ9MQorL3NiaW4vcm1tb2QgcHNzICYmIC9zYmluL3JtbW9kIGFkMTg0OCAmJiAvc2Jpbi9ybW1vZCBtcHU0MDEgJiYgL3NiaW4vcm1tb2Qgc291bmQgJiYgL3NiaW4vcm1tb2Qgc291bmRjb3JlICAjIFRoaXMgbGluZSBub3QgbmVlZGVkLCBidXQgc2F2ZXMgbWVtb3J5LgorL3NiaW4vbW9kcHJvYmUgYXp0Y2QgYXp0Y2Q9MHgzNDAKKy9zYmluL21vZHByb2JlIGpveXN0aWNrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuT1NTIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLk9TUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQyYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLk9TUwpAQCAtMCwwICsxLDE0NTYgQEAKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBpcyBhIGNvbGxlY3Rpb24gb2YgYWxsIHRoZSBvbGQgUmVhZG1lIGZpbGVzIGRpc3RyaWJ1dGVkIHdpdGgKK09TUy9MaXRlIGJ5IEhhbm51IFNhdm9sYWluZW4uIFNpbmNlIHRoZSBuZXcgTGludXggc291bmQgZHJpdmVyIGlzIGZvdW5kZWQKK29uIGl0IEkgdGhpbmsgdGhlc2UgaW5mb3JtYXRpb24gbWF5IHN0aWxsIGJlIGludGVyZXN0aW5nIGZvciB1c2VycyB0aGF0CitoYXZlIHRvIGNvbmZpZ3VyZSB0aGVpciBzb3VuZCBzeXN0ZW0uCisKK0JlIHdhcm5lZDogQWxhbiBDb3ggaXMgdGhlIGN1cnJlbnQgbWFpbnRhaW5lciBvZiB0aGUgTGludXggc291bmQgZHJpdmVyIHNvIGlmCit5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIGl0LCBwbGVhc2UgY29udGFjdCBoaW0gb3IgdGhlIGN1cnJlbnQgZGV2aWNlLXNwZWNpZmljCitkcml2ZXIgbWFpbnRhaW5lciAoZS5nLiBmb3IgYWVkc3AxNiBzcGVjaWZpYyBwcm9ibGVtcyBjb250YWN0IG1lKS4gSWYgeW91IGhhdmUKK3BhdGNoZXMsIGNvbnRyaWJ1dGlvbnMgb3Igc3VnZ2VzdGlvbnMgc2VuZCB0aGVtIHRvIEFsYW46IEknbSBzdXJlIHRoZXkgYXJlCit3ZWxjb21lLgorCitJbiB0aGlzIGRvY3VtZW50IHlvdSB3aWxsIGZpbmQgYSBsb3Qgb2YgcmVmZXJlbmNlcyBhYm91dCBPU1MvTGl0ZSBvciBvc3NmcmVlOgordGhleSBhcmUgZ29uZSBmb3JldmVyLiBLZWVwaW5nIHRoaXMgaW4gbWluZCBhbmQgd2l0aCBhIGdyYWluIG9mIHNhbHQgdGhpcworZG9jdW1lbnQgY2FuIGJlIHN0aWxsIGludGVyZXN0aW5nIGFuZCB2ZXJ5IGhlbHBmdWwuCisKK1sgRmlsZSBlZGl0ZWQgMTcuMDEuMTk5OSAtIFJpY2NhcmRvIEZhY2NoZXR0aSBdCitbIEVkaXRlZCBtaXJvU09VTkQgc2VjdGlvbiAxOS4wNC4yMDAxIC0gUm9iZXJ0IFNpZW1lciBdCisKK09TUy9GcmVlIHZlcnNpb24gMy44IHJlbGVhc2Ugbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIHJlYWQgdGhlIFNPVU5ELUhPV1RPIChhdmFpbGFibGUgZnJvbSBzdW5zaXRlLnVuYy5lZHUgYW5kIG90aGVyIExpbnV4IEZUUCAKK3NpdGVzKS4gSXQgZ2l2ZXMgaW5zdHJ1Y3Rpb25zIGFib3V0IHVzaW5nIHNvdW5kIHdpdGggTGludXguIEl0J3MgYml0IG91dCBvZgorZGF0ZSBidXQgc3RpbGwgdmVyeSB1c2VmdWwuIEluZm9ybWF0aW9uIGFib3V0IGJ1ZyBmaXhlcyBhbmQgc3VjaCB0aGluZ3MKK2lzIGF2YWlsYWJsZSBmcm9tIHRoZSB3ZWIgcGFnZSAoc2VlIGFib3ZlKS4KKworUGxlYXNlIGNoZWNrIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9wZ3VpZGUgZm9yIG1vcmUgaW5mbyBhYm91dCBwcm9ncmFtbWluZword2l0aCBPU1MgQVBJLgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistICBUSElTIFZFUlNJT04gX19fX1JFUVVJUkVTX19fXyBMaW51eCAyLjEuNTcgT1IgTEFURVIuCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BhY2thZ2VzICJzbmQtdXRpbC0zLjgudGFyLmd6IiBhbmQgInNuZC1kYXRhLTAuMS50YXIuWiIKK2NvbnRhaW4gdXNlZnVsIHV0aWxpdGllcyB0byBiZSB1c2VkIHdpdGggdGhpcyBkcml2ZXIuCitTZWUgaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zc2ZyZWUvZ2V0dGluZy5odG1sIGZvcgorZG93bmxvYWQgaW5zdHJ1Y3Rpb25zLgorCitJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLCBwbGVhc2UKK2xvb2sgZm9yd2FyZCBpbnRvIHRoaXMgZG9jdW1lbnQuCisKK1N1cHBvcnRlZCBzb3VuZCBjYXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBiZWxvdy4KKworQ29udHJpYnV0b3JzCistLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgY29udGFpbnMgY29kZSBieSBzZXZlcmFsIGNvbnRyaWJ1dG9ycy4gSW4gYWRkaXRpb24gc2V2ZXJhbCBvdGhlcgorcGVyc29ucyBoYXZlIGdpdmVuIHVzZWZ1bCBzdWdnZXN0aW9ucy4gVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgbWFqb3IKK2NvbnRyaWJ1dG9ycy4gKEkgY291bGQgaGF2ZSBmb3Jnb3R0ZW4gc29tZSBuYW1lcy4pCisKKwlDcmFpZyBNZXR6CTEvMiBvZiB0aGUgUEFTMTYgTWl4ZXIgYW5kIFBDTSBzdXBwb3J0CisJUm9iIEhvb2Z0CVZvbHVtZSBjb21wdXRhdGlvbiBhbGdvcml0aG0gZm9yIHRoZSBGTSBzeW50aC4KKwlNaWthIExpbGplYmVyZwl1TGF3IGVuY29kaW5nIGFuZCBkZWNvZGluZyByb3V0aW5lcworCUplZmYgVHJhbnRlcglMaW51eCBTT1VORCBIT1dUTyBkb2N1bWVudAorCUdyZWcgTGVlCVZvbHVtZSBjb21wdXRhdGlvbiBhbGdvcml0aG0gZm9yIHRoZSBHVVMgYW5kCisJCQlsb3RzIG9mIHZhbHVhYmxlIHN1Z2dlc3Rpb25zLgorCUFuZHkgV2FybmVyCUlTQyBwb3J0CisJSmltIExvd2UsCisJQW1hbmNpbyBIYXN0eSBKcglGcmVlQlNEL05ldEJTRCBwb3J0CisJQW5kZXJzIEJhZWtnYWFyZCAJQnVnIGh1bnRpbmcgYW5kIHZhbHVhYmxlIHN1Z2dlc3Rpb25zLgorCUpvZXJnIFNjaHViZXJ0CVNCMTYgRFNQIHN1cHBvcnQgKGluaXRpYWwgdmVyc2lvbikuCisJQW5kcmV3IFJvYmluc29uIEltcHJvdmVtZW50cyB0byB0aGUgR1VTIGRyaXZlcgorCU1lZ2VucyBTQQlNSURJIHJlY29yZGluZyBmb3IgU0IgYW5kIFNCIFBybyAoaW5pdGlhbCB2ZXJzaW9uKS4KKwlNaWthZWwgTm9yZHF2aXN0ICBMaW5lYXIgdm9sdW1lIHN1cHBvcnQgZm9yIEdVUyBhbmQKKwkJCSAgbm9uYmxvY2tpbmcgL2Rldi9zZXF1ZW5jZXIuCisJSWFuIEhhcnRhcwkJU1ZSNC4yIHBvcnQKKwlNYXJrdXMgQXJvaGFyanUJYW5kCisJUmlzdG8gS2Fua2t1bmVuCQlNYWpvciBjb250cmlidXRpb25zIHRvIHRoZSBtaXhlciBzdXBwb3J0CisJCQkJb2YgR1VTIHYzLjcuCisJSHVueXVlIFlhdQlNaXhlciBzdXBwb3J0IGZvciBTRyBOWCBQcm8uCisJTWFyYyBIb2ZmbWFuCVBTUyBzdXBwb3J0IChpbml0aWFsIHZlcnNpb24pLgorCVJhaW5lciBWcmFua2VuCUluaXRpYWxpemF0aW9uIGZvciBKYXp6MTYgKGluaXRpYWwgdmVyc2lvbikuCisJUGV0ZXIgVHJhdHRsZXIJSW5pdGlhbCB2ZXJzaW9uIG9mIGxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0IGZvciBMaW51eC4KKwlKUkEgR2lic29uCTE2IGJpdCBtb2RlIGZvciBKYXp6MTYgKGluaXRpYWwgdmVyc2lvbikKKwlEYXZvciBKYWRyaWpldmljIE1BRDE2IHN1cHBvcnQgKGluaXRpYWwgdmVyc2lvbikKKwlHcmVnb3IgSG9mZmxlaXQJTW96YXJ0IHN1cHBvcnQgKGluaXRpYWwgdmVyc2lvbikKKwlSaWNjYXJkbyBGYWNjaGV0dGkgQXVkaW8gRXhjZWwgRFNQIDE2IChhZWRzcDE2KSBzdXBwb3J0CisJSmFtZXMgSGlnaHRvd2VyIFNwb3R0aW5nIGEgdGlueSBidXQgaW1wb3J0YW50IGJ1ZyBpbiBDUzQyM3ggc3VwcG9ydC4KKwlEZW5pcyBTYWJsaWMJT1BUaSA4MkM5MjQgc3BlY2lmaWMgZW5oYW5jZW1lbnRzIChub24gUG5QIG1vZGUpCisJVGltIE1hY0tlbnppZQlGdWxsIGR1cGxleCBzdXBwb3J0IGZvciBPUFRpIDgyQzkzMC4KKwkKKwlQbGVhc2UgbG9vayBhdCBsb3dsZXZlbC9SRUFETUUgZm9yIG1vcmUgY29udHJpYnV0b3JzLgorCitUaGVyZSBhcmUgcHJvYmFibHkgbWFueSBvdGhlciBuYW1lcyBtaXNzaW5nLiBJZiB5b3UgaGF2ZSBzZW50IG1lIHNvbWUKK3BhdGNoZXMgYW5kIHlvdXIgbmFtZSBpcyBub3QgaW4gdGhlIGFib3ZlIGxpc3QsIHBsZWFzZSBpbmZvcm0gbWUuCisKK1NlbmRpbmcgeW91ciBjb250cmlidXRpb25zIG9yIHBhdGNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3Qgb2YgYWxsIGl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGNvbnRhY3QgbWUgYmVmb3JlIHNlbmRpbmcgYW55dGhpbmcKK29yIGJlZm9yZSBldmVuIHN0YXJ0aW5nIHRvIGRvIGFueSB3b3JrLiBUZWxsIG1lIHdoYXQgeW91IHN1Z2dlc3QgdG8gYmUKK2NoYW5nZWQgb3Igd2hhdCB5b3UgaGF2ZSBwbGFubmVkIHRvIGRvLiBBbHNvIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHRoZQordmVyeSBsYXRlc3QgKGRldmVsb3BtZW50KSB2ZXJzaW9uIG9mIE9TUy9GcmVlIHNpbmNlIHRoZSBjaGFuZ2UgbWF5IGFscmVhZHkgYmUKK2ltcGxlbWVudGVkIHRoZXJlLiBJbiBnZW5lcmFsIGl0J3MgYSBtYWpvciB3YXN0ZSBvZiB0aW1lIHRvIHRyeSB0byBpbXByb3ZlIGEKK3NldmVyYWwgbW9udGhzIG9sZCB2ZXJzaW9uLiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbGF0ZXN0IHZlcnNpb24gY2FuIGJlIGZvdW5kCitmcm9tIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlLiBJbiBnZW5lcmFsIHRoZXJlIGlzIG5vIHBvaW50IGluCitzZW5kaW5nIG1lIHBhdGNoZXMgcmVsYXRpdmUgdG8gcHJvZHVjdGlvbiBrZXJuZWxzLgorCitTcG9uc29ycyBldGMuCistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgY29tcGFuaWVzIGhhdmUgZ3JlYXRseSBoZWxwZWQgZGV2ZWxvcG1lbnQgb2YgdGhpcyBkcml2ZXIgCitpbiBmb3JtIG9mIGEgZnJlZSBjb3B5IG9mIHRoZWlyIHByb2R1Y3Q6CisKK05vdmVsbCwgSW5jLgkJVW5peFdhcmUgcGVyc29uYWwgZWRpdGlvbiArIFNESworVGhlIFNhbnRhIENydXogT3BlcmF0aW9uLCBJbmMuIAlBIFNDTyBPcGVuU2VydmVyICsgU0RLCitFbnNvbmlxIENvcnAsCQlhIFNvdW5kU2NhcGUgY2FyZCBhbmQgZXh0ZW5zaXZlIGFtb3VudCBvZiBhc3Npc3RhbmNlCitNZWRpYVRyaXggUGVyaXBoZXJhbHMgSW5jLCBhIEF1ZGlvVHJpeCBQcm8gY2FyZCArIFNESworQWNlciwgSW5jLgkJYSBwYWlyIG9mIEFjZXJNYWdpYyBTMjMgY2FyZHMuCisKK0luIGFkZGl0aW9uIHRoZSBmb2xsb3dpbmcgY29tcGFuaWVzIGhhdmUgcHJvdmlkZWQgbWUgc3VmZmljaWVudCBhbW91bnQKK29mIHRlY2huaWNhbCBpbmZvcm1hdGlvbiBhdCBsZWFzdCBzb21lIG9mIHRoZWlyIHByb2R1Y3RzIChmcmVlIG9yICQkJCk6CisKK0FkdmFuY2VkIEdyYXZpcyBDb21wdXRlciBUZWNobm9sb2d5IEx0ZC4KK01lZGlhIFZpc2lvbiBJbmMuCitBbmFsb2cgRGV2aWNlcyBJbmMuCitMb2dpdGVjaCBJbmMuCitBenRlY2ggTGFicyBJbmMuCitDcnlzdGFsIFNlbWljb25kdWN0b3IgQ29ycG9yYXRpb24sCitJbnRlZ3JhdGVkIENpcmN1aXQgU3lzdGVtcyBJbmMuCitPQUsgVGVjaG5vbG9neQorT1BUaQorVHVydGxlIEJlYWNoCittaXJvCitBZCBMaWIgSW5jLiAoJCQpCitNdXNpYyBRdWVzdCBJbmMuICgkJCkKK0NyZWF0aXZlIExhYnMgKCQkJCkKKworSWYgeW91IGhhdmUgc29tZSBwcm9ibGVtcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWFkIHRoZSBzb3VuZCBIT1dUTyAoc3Vuc2l0ZS51bmMuZWR1Oi9wdWIvTGludXgvZG9jcy8uLi4/KS4KK0Fsc28gbG9vayBhdCB0aGUgaG9tZSBwYWdlIChodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZSkuIEl0IG1heQorY29udGFpbiBpbmZvIGFib3V0IHNvbWUgcmVjZW50IGJ1ZyBmaXhlcy4KKworSXQncyBsaWtlbHkgdGhhdCB5b3UgaGF2ZSBzb21lIHByb2JsZW1zIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgc291bmQgZHJpdmVyCitmaXJzdCB0aW1lLiBTb3VuZCBjYXJkcyBkb24ndCBoYXZlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc28gdGhlcmUgYXJlIG5vCitnb29kIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0byB1c2UuIFBsZWFzZSB0cnkgdG8gdXNlIHNhbWUgSS9PLCBETUEgYW5kIElSUQordmFsdWVzIGZvciB0aGUgc291bmQgY2FyZCB0aGFuIHdpdGggRE9TLgorCitJZiB5b3UgZ2V0IGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSBkcml2ZXIsIHBsZWFzZSBsb29rCithdCAvdmFyL2FkbS9tZXNzYWdlcyBmb3IgbW9yZSB2ZXJib3NlIGVycm9yIG1lc3NhZ2UuCisKKworVGhlIGZvbGxvd2luZyBlcnJvcnMgYXJlIGxpa2VseSB3aXRoIC9kZXYvZHNwIGFuZCAvZGV2L2F1ZGlvLgorCisJLSAiTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIuCisJVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgbm8gc3VpdGFibGUgaGFyZHdhcmUgZm9yIHRoZQorCWRldmljZSBmaWxlIG9yIHRoZSBzb3VuZCBkcml2ZXIgaGFzIGJlZW4gY29tcGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvcgorCXRoaXMgcGFydGljdWxhciBkZXZpY2UuIEZvciBleGFtcGxlIC9kZXYvYXVkaW8gYW5kIC9kZXYvZHNwIHdpbGwgbm90CisJd29yayBpZiAiZGlnaXRpemVkIHZvaWNlIHN1cHBvcnQiIHdhcyBub3QgZW5hYmxlZCBkdXJpbmcgIm1ha2UgY29uZmlnIi4KKwkKKwktICJEZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeSIuIFByb2JhYmx5IHRoZSBJUlEgKG9yIERNQSkgY2hhbm5lbCAKKwlyZXF1aXJlZCBieSB0aGUgc291bmQgY2FyZCBpcyBpbiB1c2UgYnkgc29tZSBvdGhlciBkZXZpY2UvZHJpdmVyLgorCisJLSAiSS9PIGVycm9yIi4gQWxtb3N0IGNlcnRhaW5seSAoOTklKSBpdCdzIGFuIElSUSBvciBETUEgY29uZmxpY3QuCisJTG9vayBhdCB0aGUga2VybmVsIG1lc3NhZ2VzIGluIC92YXIvYWRtL25vdGljZSBmb3IgbW9yZSBpbmZvLgorCisJLSAiSW52YWxpZCBhcmd1bWVudCIuIFRoZSBhcHBsaWNhdGlvbiBpcyBjYWxsaW5nIGlvY3RsKCkKKwl3aXRoIGltcG9zc2libGUgcGFyYW1ldGVycy4gQ2hlY2sgdGhhdCB0aGUgYXBwbGljYXRpb24gaXMKKwlmb3Igc291bmQgZHJpdmVyIHZlcnNpb24gMi5YIG9yIGxhdGVyLgorCitMaW51eCBpbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PQorCitJTVBPUlRBTlQhCVJlYWQgdGhpcyBpZiB5b3UgYXJlIGluc3RhbGxpbmcgYSBzZXBhcmF0ZWx5CisJCWRpc3RyaWJ1dGVkIHZlcnNpb24gb2YgdGhpcyBkcml2ZXIuCisKKwkJQ2hlY2sgdGhhdCB5b3VyIGtlcm5lbCB2ZXJzaW9uIHdvcmtzIHdpdGggdGhpcworCQlyZWxlYXNlIG9mIHRoZSBkcml2ZXIgKHNlZSBSZWFkbWUpLiBBbHNvIHZlcmlmeQorCQl0aGF0IHlvdXIgY3VycmVudCBrZXJuZWwgdmVyc2lvbiBkb2Vzbid0IGhhdmUgbW9yZQorCQlyZWNlbnQgc291bmQgZHJpdmVyIHZlcnNpb24gdGhhbiB0aGlzIG9uZS4gSVQnUyBISUdITFkKKwkJUkVDT01NRU5ERUQgVEhBVCBZT1UgVVNFIFRIRSBTT1VORCBEUklWRVIgVkVSU0lPTiBUSEFUCisJCUlTIERJU1RSSUJVVEVEIFdJVEggS0VSTkVMIFNPVVJDRVMuCisKKy0gV2hlbiBpbnN0YWxsaW5nIHNlcGFyYXRlbHkgZGlzdHJpYnV0ZWQgc291bmQgZHJpdmVyIHlvdSBzaG91bGQgZmlyc3QKKyAgcmVhZCB0aGUgYWJvdmUgbm90aWNlLiBUaGVuIHRyeSB0byBmaW5kIHByb3BlciBkaXJlY3Rvcnkgd2hlcmUgYW5kIGhvdworICB0byBpbnN0YWxsIHRoZSBkcml2ZXIgc291cmNlcy4gWW91IHNob3VsZCBub3QgdHJ5IHRvIGluc3RhbGwgYSBzZXBhcmF0ZWx5CisgIGRpc3RyaWJ1dGVkIGRyaXZlciB2ZXJzaW9uIGlmIHlvdSBhcmUgbm90IGFibGUgdG8gZmluZCB0aGUgcHJvcGVyIHdheQorICB5b3Vyc2VsZiAoaW4gdGhpcyBjYXNlIHVzZSB0aGUgdmVyc2lvbiB0aGF0IGlzIGRpc3RyaWJ1dGVkIHdpdGgga2VybmVsCisgIHNvdXJjZXMpLiBSZW1vdmUgb2xkIHZlcnNpb24gb2YgbGludXgvZHJpdmVycy9zb3VuZCBkaXJlY3RvcnkgYmVmb3JlCisgIGluc3RhbGxpbmcgbmV3IGZpbGVzLgorCistIFRvIGJ1aWxkIHRoZSBkZXZpY2UgZmlsZXMgeW91IG5lZWQgdG8gcnVuIHRoZSBlbmNsb3NlZCBzaGVsbCBzY3JpcHQgCisgIChzZWUgYmVsb3cpLiBZb3UgbmVlZCB0byBkbyB0aGlzIG9ubHkgd2hlbiBpbnN0YWxsaW5nIHNvdW5kIGRyaXZlcgorICBmaXJzdCB0aW1lIG9yIHdoZW4gdXBncmFkaW5nIHRvIG11Y2ggcmVjZW50IHZlcnNpb24gdGhhbiB0aGUgZWFybGllcgorICBvbmUuCisKKy0gQ29uZmlndXJlIGFuZCBjb21waWxlIExpbnV4IGFzIG5vcm1hbGx5IChyZW1lbWJlciB0byBpbmNsdWRlIHRoZQorICBzb3VuZCBzdXBwb3J0IGR1cmluZyAibWFrZSBjb25maWciKS4gUGxlYXNlIHJlZmVyIHRvIGtlcm5lbCBkb2N1bWVudGF0aW9uCisgIGZvciBpbnN0cnVjdGlvbnMgYWJvdXQgY29uZmlndXJpbmcgYW5kIGNvbXBpbGluZyBrZXJuZWwuIEZpbGUgUmVhZG1lLmNhcmRzCisgIGNvbnRhaW5zIGNhcmQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZvciBjb25maWd1cmluZyB0aGlzIGRyaXZlciBmb3IKKyAgdXNlIHdpdGggdmFyaW91cyBzb3VuZCBjYXJkcy4KKworQm9vdCB0aW1lIGNvbmZpZ3VyYXRpb24gKHVzaW5nIGxpbG8gYW5kIGluc21vZCkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGluZm9ybWF0aW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRvbyBtYW55IHVzZXJzIGRpZG4ndCBiZWxpZXZlCit0aGF0IGl0J3MgcmVhbGx5IG5vdCBuZWNlc3NhcnkgdG8gdXNlIHRoaXMgbWV0aG9kLiBQbGVhc2UgbG9vayBhdAorUmVhZG1lIG9mIHNvdW5kIGRyaXZlciB2ZXJzaW9uIDMuMC4xIGlmIHlvdSBzdGlsbCB3YW50IHRvIHVzZSB0aGlzIG1ldGhvZC4KKworUHJvYmxlbXMKKy0tLS0tLS0tCisKK0NvbW1vbiBlcnJvciBtZXNzYWdlczoKKworLSAvZGV2Lz8/Pz8/Pz86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkuCitSdW4gdGhlIHNjcmlwdCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKworLSAvZGV2Lz8/Pz8/Pz86IE5vIHN1Y2ggZGV2aWNlLgorWW91IGFyZSBub3QgcnVubmluZyBrZXJuZWwgd2hpY2ggY29udGFpbnMgdGhlIHNvdW5kIGRyaXZlci4gV2hlbiB1c2luZworbW9kdWxhcml6ZWQgc291bmQgZHJpdmVyIHRoaXMgZXJyb3IgbWVhbnMgdGhhdCB0aGUgc291bmQgZHJpdmVyIGlzIG5vdAorbG9hZGVkLgorCistIC9kZXYvPz8/PzogTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcy4KK1NvdW5kIGRyaXZlciBkaWRuJ3QgZGV0ZWN0IHN1aXRhYmxlIGNhcmQgd2hlbiBpbml0aWFsaXppbmcuIFBsZWFzZSBsb29rIGF0CitSZWFkbWUuY2FyZHMgZm9yIGluZm8gYWJvdXQgY29uZmlndXJpbmcgdGhlIGRyaXZlciB3aXRoIHlvdXIgY2FyZC4gQWxzbworY2hlY2sgZm9yIHBvc3NpYmxlIGJvb3QgKGluc21vZCkgdGltZSBlcnJvciBtZXNzYWdlcyBpbiAvdmFyL2FkbS9tZXNzYWdlcy4KKworLSBPdGhlciBtZXNzYWdlcyBvciBwcm9ibGVtcworUGxlYXNlIGNoZWNrIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlIGZvciBtb3JlIGluZm8uCisKK0NvbmZpZ3VyaW5nIHZlcnNpb24gMy44IChmb3IgTGludXgpIHdpdGggc29tZSBjb21tb24gc291bmQgY2FyZHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgY29uZmlndXJpbmcgc291bmQgY2FyZHMgd2l0aCB0aGUgZnJlZXdhcmUgdmVyc2lvbiBvZgorT3BlbiBTb3VuZCBTeXN0ZW1zIChPU1MvRnJlZSkuIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21tZXJjaWFsIHZlcnNpb24KKyhPU1MvTGludXgpIGFuZCBpdHMgY29uZmlndXJhdGlvbiBpcyBhdmFpbGFibGUgZnJvbSAKK2h0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9saW51eC5odG1sLiBJbmZvcm1hdGlvbiBwcmVzZW50ZWQgaGVyZSBpcworbm90IHZhbGlkIGZvciBPU1MvTGludXguIAorCitJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCBob3cgdG8gY29uZmlndXJlIE9TUy9GcmVlCit5b3UgY2FuIGRvd25sb2FkIHRoZSBmcmVlIGV2YWx1YXRpb24gdmVyc2lvbiBvZiBPU1MvTGludXggZnJvbSB0aGUgYWJvdmUKK2FkZHJlc3MuIFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgaXQgY2FuIGF1dG9kZXRlY3QgeW91ciBzb3VuZCBjYXJkLiBJbiB0aGlzIGNhc2UKK3lvdSBjYW4gdXNlIHRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlZCBpbiBzb3VuZG9uLmxvZyB3aGVuIGNvbmZpZ3VyaW5nIE9TUy9GcmVlLgorCisKK0lNUE9SVEFOVCEJVGhpcyBkb2N1bWVudCBjb3ZlcnMgb25seSBjYXJkcyB0aGF0IHdlcmUgImtub3duIiB3aGVuCisJCXRoaXMgZHJpdmVyIHZlcnNpb24gd2FzIHJlbGVhc2VkLiBQbGVhc2UgbG9vayBhdAorCQlodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZSBmb3IgaW5mbyBhYm91dAorCQljYXJkcyBpbnRyb2R1Y2VkIHJlY2VudGx5LgorCisJCVdoZW4gY29uZmlndXJpbmcgdGhlIHNvdW5kIGRyaXZlciwgeW91IHNob3VsZCBjYXJlZnVsbHkKKwkJY2hlY2sgZWFjaCBzb3VuZCBjb25maWd1cmF0aW9uIG9wdGlvbiAocGFydGljdWxhcmx5CisJCSJTdXBwb3J0IGZvciAvZGV2L2RzcCBhbmQgL2Rldi9hdWRpbyIpLiBUaGUgZGVmYXVsdCB2YWx1ZXMKKwkJb2ZmZXJlZCBieSB0aGVzZSBwcm9ncmFtcyBhcmUgbm90IG5lY2Vzc2FyaWx5IHZhbGlkLgorCisKK1RIRSBCSUdHRVNUIE1JU1RBS0VTIFlPVSBDQU4gTUFLRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIEFzc3VtaW5nIHRoYXQgdGhlIGNhcmQgaXMgU291bmQgQmxhc3RlciBjb21wYXRpYmxlIHdoZW4gaXQncyBub3QuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbnVtYmVyIG9uZSBtaXN0YWtlIGlzIHRvIGFzc3VtZSB0aGF0IHlvdXIgY2FyZCBpcyBjb21wYXRpYmxlIHdpdGgKK1NvdW5kIEJsYXN0ZXIuIE9ubHkgdGhlIGNhcmRzIG1hZGUgYnkgQ3JlYXRpdmUgVGVjaG5vbG9neSBvciB3aGljaCBoYXZlCitvbmUgb3IgbW9yZSBjaGlwcyBsYWJlbGVkIGJ5IENyZWF0aXZlIGFyZSBTQiBjb21wYXRpYmxlLiBJbiBhZGRpdGlvbiB0aGVyZQorYXJlIGZldyBzb3VuZCBjaGlwc2V0cyB3aGljaCBhcmUgU0IgY29tcGF0aWJsZSBpbiBMaW51eCBzdWNoIGFzIEVTUzE2ODggb3IKK0phenoxNi4gTm90ZSB0aGF0IFNCIGNvbXBhdGliaWxpdHkgaW4gRE9TL1dpbmRvd3MgZG9lcyBfTk9UXyBtZWFuIGFueXRoaW5nCitpbiBMaW51eC4gCisKK0lGIFlPVSBSRUFMTFkgQVJFIDE1MCUgU1VSRSBZT1UgSEFWRSBBIFNPVU5EIEJMQVNURVIgWU9VIENBTiBTS0lQIFRIRSBSRVNUIE9GCitUSElTIENIQVBURVIuCisKK0ZvciBtb3N0IG90aGVyICJzdXBwb3NlZCB0byBiZSBTQiBjb21wYXRpYmxlIiBjYXJkcyB5b3UgaGF2ZSB0byB1c2Ugb3RoZXIKK3RoYW4gU0IgZHJpdmVycyAoc2VlIGJlbG93KS4gIEl0IGlzIHBvc3NpYmxlIHRvIGdldCBtb3N0IHNvdW5kIGNhcmRzIHRvIHdvcmsKK2luIFNCIG1vZGUgYnV0IGluIGdlbmVyYWwgaXQncyBhIGNvbXBsZXRlIHdhc3RlIG9mIHRpbWUuIFRoZXJlIGFyZSBzZXZlcmFsCitwcm9ibGVtcyB3aGljaCB5b3Ugd2lsbCBlbmNvdW50ZXIgYnkgdXNpbmcgU0IgbW9kZSB3aXRoIGNhcmRzIHRoYXQgYXJlIG5vdAordHJ1bHkgU0IgY29tcGF0aWJsZToKKworLSBUaGUgU0IgZW11bGF0aW9uIGlzIGF0IG1vc3QgU0IgUHJvIChEU1AgdmVyc2lvbiAzLngpIHdoaWNoIG1lYW5zIHRoYXQgCit5b3UgZ2V0IG9ubHkgOCBiaXQgYXVkaW8gKHRoZXJlIGlzIGFsd2F5cyBhbiBhbm90aGVyICgibmF0aXZlIikgbW9kZSB3aGljaAorZ2l2ZXMgdGhlIDE2IGJpdCBjYXBhYmlsaXR5KS4gVGhlIDggYml0IG9ubHkgb3BlcmF0aW9uIGlzIHRoZSByZWFzb24gd2h5CittYW55IHVzZXJzIGNsYWltIHRoYXQgc291bmQgcXVhbGl0eSBpbiBMaW51eCBpcyBtdWNoIHdvcnNlIHRoYW4gaW4gRE9TLgorSW4gYWRkaXRpb24gc29tZSBhcHBsaWNhdGlvbnMgcmVxdWlyZSAxNiBiaXQgbW9kZSBhbmQgdGhleSBwcm9kdWNlIGp1c3QKK25vaXNlIHdpdGggYSA4IGJpdCBvbmx5IGRldmljZS4KKy0gVGhlIGNhcmQgbWF5IHdvcmsgb25seSBpbiBzb21lIGNhc2VzIGJ1dCByZWZ1c2UgdG8gd29yayBtb3N0IG9mIHRoZQordGltZS4gVGhlIFNCIGNvbXBhdGlibGUgbW9kZSBhbHdheXMgcmVxdWlyZXMgc3BlY2lhbCBpbml0aWFsaXphdGlvbiB3aGljaCBpcyAKK2RvbmUgYnkgdGhlIERPUy9XaW5kb3dzIGRyaXZlcnMuIFRoaXMga2luZCBvZiBjYXJkcyB3b3JrIGluIExpbnV4IGFmdGVyCit5b3UgaGF2ZSB3YXJtIGJvb3RlZCBpdCBhZnRlciBET1MgYnV0IHRoZXkgZG9uJ3Qgd29yayBhZnRlciBjb2xkIGJvb3QKKyhwb3dlciBvbiBvciByZXNldCkuCistIFlvdSBnZXQgdGhlIGZhbW91cyAiRE1BIHRpbWVkIG91dCIgbWVzc2FnZXMuIFVzdWFsbHkgYWxsIFNCIGNsb25lcyBoYXZlCitzb2Z0d2FyZSBzZWxlY3RhYmxlIElSUSBhbmQgRE1BIHNldHRpbmdzLiBJZiB0aGUgKHBvd2VyIG9uIGRlZmF1bHQpIHZhbHVlcworY3VycmVudGx5IHVzZWQgYnkgdGhlIGNhcmQgZG9uJ3QgbWF0Y2ggY29uZmlndXJhdGlvbiBvZiB0aGUgZHJpdmVyIHlvdSB3aWxsCitnZXQgdGhlIGFib3ZlIGVycm9yIG1lc3NhZ2Ugd2hlbmV2ZXIgeW91IHRyeSB0byByZWNvcmQgb3IgcGxheS4gVGhlcmUgYXJlCitmZXcgb3RoZXIgcmVhc29ucyB0byB0aGUgRE1BIHRpbWVvdXQgbWVzc2FnZSBidXQgdXNpbmcgdGhlIFNCIG1vZGUgc2VlbXMKK3RvIGJlIHRoZSBtb3N0IGNvbW1vbiBjYXVzZS4KKworMi4gVHJ5aW5nIHRvIHVzZSBhIFBuUCAoUGx1ZyAmIFBsYXkpIGNhcmQganVzdCBsaWtlIGFuIG9yZGluYXJ5IHNvdW5kIGNhcmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsdWcgJiBQbGF5IGlzIGEgcHJvdG9jb2wgZGVmaW5lZCBieSBJbnRlbCBhbmQgTWljcm9zb2Z0LiBJdCBsZXRzIG9wZXJhdGluZworc3lzdGVtcyB0byBlYXNpbHkgaWRlbnRpZnkgYW5kIHJlY29uZmlndXJlIEkvTyBwb3J0cywgSVJRcyBhbmQgRE1BcyBvZiBJU0EKK2NhcmRzLiBUaGUgcHJvYmxlbSB3aXRoIFBuUCBjYXJkcyBpcyB0aGF0IHRoZSBzdGFuZGFyZCBMaW51eCBkb2Vzbid0IGN1cnJlbnRseQorKHZlcnNpb25zIDIuMS54IGFuZCBlYXJsaWVyKSBkb24ndCBzdXBwb3J0IFBuUC4gVGhpcyBtZWFucyB0aGF0IHlvdSB3aWxsIGhhdmUKK3RvIHVzZSBzb21lIHNwZWNpYWwgdHJpY2tzIChzZWUgbGF0ZXIpIHRvIGdldCBhIFBuUCBjYXJkIGFsaXZlLiBNYW55IFBuUCBjYXJkcword29yayBhZnRlciB0aGV5IGhhdmUgYmVlbiBpbml0aWFsaXplZCBidXQgdGhpcyBpcyBub3QgYWx3YXlzIHRoZSBjYXNlLgorCitUaGVyZSBhcmUgc29tZXRpbWVzIGJvdGggUG5QIGFuZCBub24tUG5QIHZlcnNpb25zIG9mIHRoZSBzYW1lIHNvdW5kIGNhcmQuCitUaGUgbm9uLVBuUCB2ZXJzaW9uIGlzIHRoZSBvcmlnaW5hbCBtb2RlbCB3aGljaCB1c3VhbGx5IGhhcyBiZWVuIGRpc2NvbnRpbnVlZAorbW9yZSB0aGFuIGFuIHllYXIgYWdvLiBUaGUgUG5QIHZlcnNpb24gaGFzIHRoZSBzYW1lIG5hbWUgYnV0IHdpdGggIlBuUCIKK2FwcGVuZGVkIHRvIGl0IChzb21ldGltZXMgbm90KS4gVGhpcyBjYXVzZXMgbWFqb3IgY29uZnVzaW9uIHNpbmNlIHRoZSBub24tUG5QCittb2RlbCB3b3JrcyB3aXRoIExpbnV4IGJ1dCB0aGUgUG5QIG9uZSBkb2Vzbid0LgorCitZb3Ugc2hvdWxkIGNhcmVmdWxseSBjaGVjayBpZiAiUGx1ZyAmIFBsYXkiIG9yICJQblAiIGlzIG1lbnRpb25lZCBpbiB0aGUgbmFtZQorb2YgdGhlIGNhcmQgb3IgaW4gdGhlIGRvY3VtZW50YXRpb24gb3IgcGFja2FnZSB0aGF0IGNhbWUgd2l0aCB0aGUgY2FyZC4gCitFdmVyeXRoaW5nIGRlc2NyaWJlZCBpbiB0aGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGlzIG5vdCBuZWNlc3NhcmlseSB2YWxpZCBmb3IKK1BuUCBtb2RlbHMgb2Ygc291bmQgY2FyZHMgZXZlbiB5b3UgaGF2ZSBtYW5hZ2VkIHRvIHdha2UgdXAgdGhlIGNhcmQgcHJvcGVybHkuCitNYW55IFBuUCBjYXJkcyBhcmUgc2ltcGx5IHRvbyBkaWZmZXJlbnQgZnJvbSB0aGVpciBub24tUG5QIGFuY2VzdG9ycyB3aGljaCBhcmUKK2NvdmVyZWQgYnkgdGhpcyBkb2N1bWVudC4KKworCitDYXJkcyB0aGF0IGFyZSBub3QgKGZ1bGx5KSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZWUgaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zc2ZyZWUgZm9yIGluZm9ybWF0aW9uIGFib3V0IHNvdW5kIGNhcmRzIAordG8gYmUgc3VwcG9ydGVkIGluIGZ1dHVyZS4gCisKKworSG93IHRvIHVzZSBzb3VuZCB3aXRob3V0IHJlY29tcGlsaW5nIGtlcm5lbCBhbmQvb3Igc291bmQgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgaXMgYSBjb21tZXJjaWFsIHNvdW5kIGRyaXZlciB3aGljaCBjb21lcyBpbiBwcmVjb21waWxlZCBmb3JtIGFuZCBkb2Vzbid0CityZXF1aXJlIHJlY29tcGlsaW5nIG9mIHRoZSBrZXJuZWwuIFNlZSBodHRwOi8vd3d3LjRGcm9udC10ZWNoLmNvbS9vc3MuaHRtbCBmb3IKK21vcmUgaW5mby4KKworCitDb25maWd1cmluZyBQblAgY2FyZHMKKz09PT09PT09PT09PT09PT09PT09PQorCitOZXcgdmVyc2lvbnMgb2YgbW9zdCBzb3VuZCBjYXJkcyB1c2UgdGhlIHNvLWNhbGxlZCBJU0EgUG5QIHByb3RvY29sIGZvcgorc29mdCBjb25maWd1cmluZyB0aGVpciBJL08sIElSUSwgRE1BIGFuZCBzaGFyZWQgbWVtb3J5IHJlc291cmNlcy4KK0N1cnJlbnRseSBhdCBsZWFzdCBjYXJkcyBtYWRlIGJ5IENyZWF0aXZlIFRlY2hub2xvZ3kgKFNCMzIgYW5kIFNCMzJBV0UKK1BuUCksIEdyYXZpcyAoR1VTIFBuUCBhbmQgR1VTIFBuUCBQcm8pLCBFbnNvbmlxIChTb3VuZHNjYXBlIFBuUCkgYW5kCitBenRlY2ggKHNvbWUgU291bmQgR2FsYXh5IG1vZGVscykgdXNlIFBuUCB0ZWNobm9sb2d5LiBUaGUgQ1M0MjMyLzQyMzYgYXVkaW8KK2NoaXAgYnkgQ3J5c3RhbCBTZW1pY29uZHVjdG9yIChJbnRlbCBBdGxhbnRpcywgSFAgUGF2aWxpb24gYW5kIG1hbnkgb3RoZXIKK21vdGhlcmJvYXJkcykgaXMgYWxzbyBiYXNlZCBvbiBQblAgdGVjaG5vbG9neSBidXQgdGhlcmUgaXMgYSAibmF0aXZlIiBkcml2ZXIKK2F2YWlsYWJsZSBmb3IgaXQgKHNlZSBpbmZvcm1hdGlvbiBhYm91dCBDUzQyMzIgbGF0ZXIgaW4gdGhpcyBkb2N1bWVudCkuCisKK1BuUCBzb3VuZCBjYXJkcyAoYXMgd2VsbCBhcyBtb3N0IG90aGVyIFBuUCBJU0EgY2FyZHMpIGFyZSBub3Qgc3VwcG9ydGVkCitieSB0aGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciAuIFByb3Blcgorc3VwcG9ydCBmb3IgdGhlbSBzaG91bGQgYmUgcmVsZWFzZWQgZHVyaW5nIDk3IG9uY2UgdGhlIGtlcm5lbCBsZXZlbAorUG5QIHN1cHBvcnQgaXMgYXZhaWxhYmxlLgorCitUaGVyZSBpcyBhIG1ldGhvZCB0byBnZXQgbW9zdCBvZiB0aGUgUG5QIGNhcmRzIHRvIHdvcmsuIFRoZSBiYXNpYyBtZXRob2QKK2lzIHRoZSBmb2xsb3dpbmc6CisKKzEpIEJvb3QgRE9TIHNvIHRoZSBjYXJkJ3MgRE9TIGRyaXZlcnMgaGF2ZSBhIGNoYW5jZSB0byBpbml0aWFsaXplIGl0LgorMikgX0NvbGRfIGJvb3QgdG8gTGludXggYnkgdXNpbmcgImxvYWRsaW4uZXhlIi4gIEhpdHRpbmcgY3RybC1hbHQtZGVsCit3b3JrcyB3aXRoIG9sZGVyIG1hY2hpbmVzIGJ1dCBjYXVzZXMgYSBoYXJkIHJlc2V0IG9mIGFsbCBjYXJkcyBvbiByZWNlbnQKKyhQZW50aXVtKSBtYWNoaW5lcy4KKzMpIElmIHlvdSBoYXZlIHRoZSBzb3VuZCBkcml2ZXIgaW4gTGludXggY29uZmlndXJlZCBwcm9wZXJseSwgdGhlIGNhcmQgc2hvdWxkCit3b3JrIG5vdy4gIlByb3BlciIgbWVhbnMgdGhhdCBJL08sIElSUSBhbmQgRE1BIHNldHRpbmdzIGFyZSB0aGUgc2FtZSBhcyBpbgorRE9TLiBUaGUgaGFyZCBwYXJ0IGlzIHRvIGZpbmQgd2hpY2ggc2V0dGluZ3Mgd2VyZSB1c2VkLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YKK3lvdXIgY2FyZCBmb3IgbW9yZSBpbmZvLgorCitXaW5kb3dzIDk1IGNvdWxkIHdvcmsgYXMgd2VsbCBhcyBET1MgYnV0IHJ1bm5pbmcgbG9hZGxpbiBtYXkgYmUgZGlmZmljdWx0LgorUHJvYmFibHkgeW91IHNob3VsZCAic2h1dCBkb3duIiB5b3VyIG1hY2hpbmUgdG8gTVMtRE9TIG1vZGUgYmVmb3JlIHJ1bm5pbmcgaXQuCisKK1NvbWUgbWFjaGluZXMgaGF2ZSBhIEJJT1MgdXRpbGl0eSBmb3Igc2V0dGluZyBQblAgcmVzb3VyY2VzLiBUaGlzIGlzIGEgZ29vZAord2F5IHRvIGNvbmZpZ3VyZSBzb21lIGNhcmRzLiBJbiB0aGlzIGNhc2UgeW91IGRvbid0IG5lZWQgdG8gYm9vdCBET1MvV2luOTUKK2JlZm9yZSBzdGFydGluZyBMaW51eC4KKworQW5vdGhlciB3YXkgdG8gaW5pdGlhbGl6ZSBQblAgY2FyZHMgd2l0aG91dCBET1MvV2luOTUgaXMgYSBMaW51eCBiYXNlZAorUG5QIGlzb2xhdGlvbiB0b29sLiBXaGVuIHdyaXRpbmcgdGhpcyB0aGVyZSBpcyBhIHByZSBhbHBoYSB0ZXN0IHZlcnNpb24KK29mIHN1Y2ggYSB0b29sIGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC5kZW1vbi5jby51ay9wdWIvdW5peC9saW51eC91dGlscy4gVGhlCitmaWxlIGlzIGNhbGxlZCBpc2FwbnB0b29scy0qLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgdG9vbCBpcyBqdXN0IGEgdGVtcG9yYXJ5Citzb2x1dGlvbiB3aGljaCBtYXkgYmUgaW5jb21wYXRpYmxlIHdpdGggZnV0dXJlIGtlcm5lbCB2ZXJzaW9ucyBoYXZpbmcgcHJvcGVyCitzdXBwb3J0IGZvciBQblAgY2FyZHMuIFRoZXJlIGFyZSBidWdzIGluIHNldHRpbmcgRE1BIGNoYW5uZWxzIGluIGVhcmxpZXIKK3ZlcnNpb25zIG9mIGlzYXBucHRvb2xzIHNvIGF0IGxlYXN0IHZlcnNpb24gMS42IGlzIHJlcXVpcmVkIHdpdGggc291bmQgY2FyZHMuCisKK1lldCBhbm90aGVyIHdheSB0byB1c2UgUG5QIGNhcmRzIGlzIHRvIHVzZSAoY29tbWVyY2lhbCkgT1NTL0xpbnV4IGRyaXZlcnMuICBTZWUKK2h0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9saW51eC5odG1sIGZvciBtb3JlIGluZm8uIFRoaXMgaXMgcHJvYmFibHkgdGhlIHdheSB5b3UKK3Nob3VsZCBkbyBpdCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzcGVuZCB0aW1lIHJlY29tcGlsaW5nIHRoZSBrZXJuZWwgYW5kIAorcmVxdWlyZWQgdG9vbHMuCisKKworUmVhZCB0aGlzIGJlZm9yZSB0cnlpbmcgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSBjdXJyZW50bHkgbWFueSBjYXJkcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlci4gU29tZSBvZiB0aGUgY2FyZHMKK2hhdmUgbmF0aXZlIHN1cHBvcnQgd2hpbGUgb3RoZXJzIHdvcmsgc2luY2UgdGhleSBlbXVsYXRlIHNvbWUgb3RoZXIKK2NhcmQgKHVzdWFsbHkgU0IsIE1TUy9XU1MgYW5kL29yIE1QVTQwMSkuIFRoZSBmb2xsb3dpbmcgY2FyZHMgaGF2ZSBuYXRpdmUKK3N1cHBvcnQgaW4gdGhlIGRyaXZlci4gRGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIGZvciBjb25maWd1cmluZyB0aGVzZSBjYXJkcword2lsbCBiZSBnaXZlbiBsYXRlciBpbiB0aGlzIGRvY3VtZW50LgorCitQcm8gQXVkaW8gU3BlY3RydW0gMTYgKFBBUzE2KSBhbmQgY29tcGF0aWJsZXM6CisJUHJvIEF1ZGlvIFNwZWN0cnVtIDE2CisJUHJvIEF1ZGlvIFN0dWRpbyAxNgorCUxvZ2l0ZWNoIFNvdW5kIE1hbiAxNgorCU5PVEUhIFRoZSBvcmlnaW5hbCBQcm8gQXVkaW8gU3BlY3RydW0gYXMgd2VsbCBhcyB0aGUgUEFTKyBhcmUgbm90CisJICAgICAgYW5kIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgorCitNZWRpYSBWaXNpb24gSmF6ejE2IGJhc2VkIGNhcmRzCisJUHJvIFNvbmljIDE2CisJTG9naXRlY2ggU291bmRNYW4gV2F2ZQorCShPdGhlciBKYXp6IGJhc2VkIGNhcmRzIHNob3VsZCB3b3JrIGJ1dCBJIGRvbid0IGhhdmUgYW55IHJlcG9ydHMKKwlhYm91dCB0aGVtKS4KKworU291bmQgQmxhc3RlcnMKKwlTQiAxLjAgdG8gMi4wCisJU0IgUHJvCisJU0IgMTYKKwlTQjMyLzY0L0FXRQorCQlDb25maWd1cmUgU0IzMi82NC9BV0UganVzdCBsaWtlIFNCMTYuIFNlZSBsb3dsZXZlbC9SRUFETUUuYXdlCisJCWZvciBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgd2F2ZSB0YWJsZSBzeW50aC4KKwkgICAgICAgIE5PVEUhIEFXRTYzL0dvbGQgYW5kIDE2LzMyL0FXRSAiUG5QIiBjYXJkcyBuZWVkIHRvIGJlIGFjdGl2YXRlZAorCQkgICAgICB1c2luZyBpc2FwbnB0b29scyBiZWZvcmUgdGhleSB3b3JrIHdpdGggT1NTL0ZyZWUuCisJU0IxNiBjb21wYXRpYmxlIGNhcmRzIGJ5IG90aGVyIG1hbnVmYWN0dXJlcnMgdGhhbiBDcmVhdGl2ZS4KKwkJWW91IGhhdmUgYmVlbiBmb29sZWQgc2luY2UgdGhlcmUgYXJlIF9ub18gU0IxNiBjb21wYXRpYmxlCisJCWNhcmRzIG9uIHRoZSBtYXJrZXQgKGFzIG9mIE1heSAxOTk3KS4gSXQncyBsaWtlbHkgdGhhdCB5b3VyIGNhcmQKKwkJaXMgY29tcGF0aWJsZSBqdXN0IHdpdGggU0IgUHJvIGJ1dCB0aGVyZSBpcyBhbHNvIGEgbm9uLVNCLQorCQljb21wYXRpYmxlIDE2IGJpdCBtb2RlLiBVc3VhbGx5IGl0J3MgTVNTL1dTUyBidXQgaXQgY291bGQgYWxzbworCQliZSBhIHByb3ByaWV0YXJ5IG9uZSBsaWtlIE1WIEphenoxNiBvciBFU1MgRVM2ODguIE9QVGkKKwkJTUFEMTYgY2hpcHMgYXJlIHZlcnkgY29tbW9uIGluIHNvIGNhbGxlZCAiU0IgMTYgYml0IGNhcmRzIgorCQkodHJ5IHdpdGggdGhlIE1BRDE2IGRyaXZlcikuCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJIlN1cHBvc2VkIHRvIGJlIFNCIGNvbXBhdGlibGUiIGNhcmRzLgorCQlGb3JnZXQgdGhlIFNCIGNvbXBhdGliaWxpdHkgYW5kIGNoZWNrIGZvciBvdGhlciBhbHRlcm5hdGl2ZXMKKwkJZmlyc3QuIFRoZSBvbmx5IGNhcmRzIHRoYXQgd29yayB3aXRoIHRoZSBTQiBkcml2ZXIgaW4KKwkJTGludXggaGF2ZSBiZWVuIG1hZGUgYnkgQ3JlYXRpdmUgVGVjaG5vbG9neSAodGhlcmUgaXMgYXQgbGVhc3QKKwkJb25lIGNoaXAgb24gdGhlIGNhcmQgd2l0aCAiQ1JFQVRJVkUiIHByaW50ZWQgb24gaXQpLiBUaGUKKwkJb25seSBvdGhlciBTQiBjb21wYXRpYmxlIGNoaXBzIGFyZSBFU1MgYW5kIEphenoxNiBjaGlwcworCQkobWF5YmUgQUxTeHh4IGNoaXBzIHRvbyBidXQgdGhleSBwcm9iYWJseSBkb24ndCB3b3JrKS4KKwkJTW9zdCBvdGhlciAiMTYgYml0IFNCIGNvbXBhdGlibGUiIGNhcmRzIHN1Y2ggYXMgIk9QVGkvTUFEMTYiIG9yCisJCSJDcnlzdGFsIiBhcmUgX05PVF8gU0IgY29tcGF0aWJsZSBpbiBMaW51eC4KKworCQlQcmFjdGljYWxseSBhbGwgc291bmQgY2FyZHMgaGF2ZSBzb21lIGtpbmQgb2YgU0IgZW11bGF0aW9uIG1vZGUKKwkJaW4gYWRkaXRpb24gdG8gdGhlaXIgbmF0aXZlICgxNiBiaXQpIG1vZGUuIEluIG1vc3QgY2FzZXMgdGhpcworCQkoOCBiaXQgb25seSkgU0IgY29tcGF0aWJsZSBtb2RlIGRvZXNuJ3Qgd29yayB3aXRoIExpbnV4LiBJZgorCQl5b3UgZ2V0IGl0IHdvcmtpbmcgaXQgbWF5IGNhdXNlIHByb2JsZW1zIHdpdGggZ2FtZXMgYW5kCisJCWFwcGxpY2F0aW9ucyB3aGljaCByZXF1aXJlIDE2IGJpdCBhdWRpby4gU29tZSAxNiBiaXQgb25seQorCQlhcHBsaWNhdGlvbnMgZG9uJ3QgY2hlY2sgaWYgdGhlIGNhcmQgYWN0dWFsbHkgc3VwcG9ydHMgMTYgYml0cy4KKwkJVGhleSBqdXN0IGR1bXAgMTYgYml0IGRhdGEgdG8gYSA4IGJpdCBjYXJkIHdoaWNoIHByb2R1Y2VzIGp1c3QKKwkJbm9pc2UuCisKKwkJSW4gbW9zdCBjYXNlcyB0aGUgMTYgYml0IG5hdGl2ZSBtb2RlIGlzIHN1cHBvcnRlZCBieSBMaW51eC4KKwkJVXNlIHRoZSBTQiBtb2RlIHdpdGggImNsb25lcyIgb25seSBpZiB5b3UgZG9uJ3QgZmluZCBhbnl0aGluZworCQliZXR0ZXIgZnJvbSB0aGUgcmVzdCBvZiB0aGlzIGRvYy4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0dyYXZpcyBVbHRyYXNvdW5kIChHVVMpCisJR1VTCisJR1VTICsgdGhlIDE2IGJpdCBvcHRpb24KKwlHVVMgTUFYCisJR1VTIEFDRSAoTm8gTUlESSBwb3J0IGFuZCBhdWRpbyByZWNvcmRpbmcpCisJR1VTIFBuUCAod2l0aCBSQU0pCisKK01QVS00MDEJYW5kIGNvbXBhdGlibGVzCisJVGhlIGRyaXZlciB3b3JrcyBib3RoIHdpdGggdGhlIGZ1bGwgKGludGVsbGlnZW50IG1vZGUpIE1QVS00MDEKKwljYXJkcyAoc3VjaCBhcyBNUFUgSVBDLVQgYW5kIE1RWC0zMk0pIGFuZCB3aXRoIHRoZSBVQVJUIG9ubHkKKwlkdW1iIE1JREkgcG9ydHMuIE1QVS00MDEgaXMgY3VycmVudGx5IHRoZSBtb3N0IGNvbW1vbiBNSURJCisJaW50ZXJmYWNlLiBNb3N0IHNvdW5kIGNhcmRzIGFyZSBjb21wYXRpYmxlIHdpdGggaXQuIEhvd2V2ZXIsCisJZG9uJ3QgZW5hYmxlIE1QVTQwMSBtb2RlIGJsaW5kbHkuIE1hbnkgY2FyZHMgd2l0aCBuYXRpdmUgc3VwcG9ydAorCWluIHRoZSBkcml2ZXIgaGF2ZSB0aGVpciBvd24gTVBVNDAxIGRyaXZlci4gRW5hYmxpbmcgdGhlIHN0YW5kYXJkIG9uZQorCXdpbGwgY2F1c2UgYSBjb25mbGljdCB3aXRoIHRoZXNlIGNhcmRzLiBTbyBjaGVjayBpZiB5b3VyIGNhcmQgaXMKKwlpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2FyZHMgYmVmb3JlIGVuYWJsaW5nIE1QVTQwMS4KKworV2luZG93cyBTb3VuZCBTeXN0ZW0gKE1TUy9XU1MpCisJRXZlbiB3aGVuIE1pY3Jvc29mdCBoYXMgZGlzY29udGludWVkIHRoZWlyIG93biBTb3VuZCBTeXN0ZW0gY2FyZCAKKwl0aGV5IG1hbmFnZWQgdG8gbWFrZSBpdCBhIHN0YW5kYXJkLiBNU1MgY29tcGF0aWJsZSBjYXJkcyBhcmUgYmFzZWQgb24gCisJYSBjb2RlYyBjaGlwIHdoaWNoIGlzIGVhc2lseSBhdmFpbGFibGUgZnJvbSBhdCBsZWFzdCB0d28gbWFudWZhY3R1cmVycworCShBRDE4NDggYnkgQW5hbG9nIERldmljZXMgYW5kIENTNDIzMS9DUzQyNDggYnkgQ3J5c3RhbCBTZW1pY29uZHVjdG9yKS4KKwlDdXJyZW50bHkgbW9zdCBzb3VuZCBjYXJkcyBhcmUgYmFzZWQgb24gb25lIG9mIHRoZSBNU1MgY29tcGF0aWJsZSBjb2RlYworCWNoaXBzLiBUaGUgQ1M0MjMxIGlzIHVzZWQgaW4gdGhlIGhpZ2ggcXVhbGl0eSBjYXJkcyBzdWNoIGFzIEdVUyBNQVgsCisJTWVkaWFUcml4IEF1ZGlvVHJpeCBQcm8gYW5kIFRCIFRyb3BleiAoR1VTIE1BWCBpcyBub3QgTVNTIGNvbXBhdGlibGUpLiAKKworCUhhdmluZyBhIEFEMTg0OCwgQ1M0MjQ4IG9yIENTNDIzMSBjb2RlYyBjaGlwIG9uIHRoZSBjYXJkIGlzIGEgZ29vZAorCXNpZ24uIEV2ZW4gaWYgdGhlIGNhcmQgaXMgbm90IE1TUyBjb21wYXRpYmxlLCBpdCBjb3VsZCBiZSBlYXN5IHRvIHdyaXRlCisJc3VwcG9ydCBmb3IgaXQuIE5vdGUgYWxzbyB0aGF0IG1vc3QgTVNTIGNvbXBhdGlibGUgY2FyZHMKKwlyZXF1aXJlIHNwZWNpYWwgYm9vdCB0aW1lIGluaXRpYWxpemF0aW9uIHdoaWNoIG1heSBub3QgYmUgcHJlc2VudAorCWluIHRoZSBkcml2ZXIuIEFsc28sIHNvbWUgTVNTIGNvbXBhdGlibGUgY2FyZHMgaGF2ZSBuYXRpdmUgc3VwcG9ydC4KKwlFbmFibGluZyB0aGUgTVNTIHN1cHBvcnQgd2l0aCB0aGVzZSBjYXJkcyBpcyBsaWtlbHkgdG8KKwljYXVzZSBhIGNvbmZsaWN0LiBTbyBjaGVjayBpZiB5b3VyIGNhcmQgaXMgbGlzdGVkIGluIHRoaXMgZmlsZSBiZWZvcmUKKwllbmFibGluZyB0aGUgTVNTIHN1cHBvcnQuCisKK1lhbWFoYSBGTSBzeW50aGVzaXplcnMgKE9QTDIsIE9QTDMgKG5vdCBPUEwzLVNBKSBhbmQgT1BMNCkKKwlNb3N0IHNvdW5kIGNhcmRzIGhhdmUgYSBGTSBzeW50aGVzaXplciBjaGlwLiBUaGUgT1BMMiBpcyBhIDIKKwlvcGVyYXRvciBjaGlwIHVzZWQgaW4gdGhlIG9yaWdpbmFsIEFkTGliIGNhcmQuIEN1cnJlbnRseSBpdCdzIHVzZWQKKwlvbmx5IGluIHRoZSBjaGVhcGVzdCAoOCBiaXQgbW9ubykgY2FyZHMuIFRoZSBPUEwzIGlzIGEgNCBvcGVyYXRvciAKKwlGTSBjaGlwIHdoaWNoIHByb3ZpZGVzIGJldHRlciBzb3VuZCBxdWFsaXR5IGFuZC9vciBtb3JlIGF2YWlsYWJsZSAKKwl2b2ljZXMgdGhhbiB0aGUgT1BMMi4gVGhlIE9QTDQgaXMgYSBuZXcgY2hpcCB0aGF0IGhhcyBhbiBPUEwzIGFuZAorCWEgd2F2ZSB0YWJsZSBzeW50aGVzaXplciBwYWNrZWQgb250byB0aGUgc2FtZSBjaGlwLiBUaGUgZHJpdmVyIHN1cHBvcnRzCisJanVzdCB0aGUgT1BMMyBtb2RlIGRpcmVjdGx5LiBNb3N0IGNhcmRzIHdpdGggYW4gT1BMNCAobGlrZQorCVNNIFdhdmUgYW5kIEF1ZGlvVHJpeCBQcm8pIHN1cHBvcnQgdGhlIE9QTDQgbW9kZSB1c2luZyBNUFU0MDEKKwllbXVsYXRpb24uIFdyaXRpbmcgYSBuYXRpdmUgT1BMNCBzdXBwb3J0IGlzIGRpZmZpY3VsdAorCXNpbmNlIFlhbWFoYSBkb2Vzbid0IGdpdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIgc2FtcGxlIFJPTSBjaGlwLgorCisJRW5hYmxlIHRoZSBnZW5lcmljIE9QTDIvT1BMMyBGTSBzeW50aGVzaXplciBzdXBwb3J0IGlmIHlvdXIKKwljYXJkIGhhcyBhIEZNIGNoaXAgbWFkZSBieSBZYW1haGEuIERvbid0IGVuYWJsZSBpdCBpZiB5b3VyIGNhcmQKKwloYXMgYSBzb2Z0d2FyZSAoVFJTKSBiYXNlZCBGTSBlbXVsYXRvci4KKworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOT1RFISBPUEwzLVNBIGlzIGRpZmZlcmVudCBjaGlwIHRoYW4gdGhlIG9yZGluYXJ5IE9QTDMuIEluIGFkZGl0aW9uCisJdG8gdGhlIEZNIHN5bnRoIHRoaXMgY2hpcCBoYXMgYWxzbyBkaWdpdGFsIGF1ZGlvIChXU1MpIGFuZAorCU1JREkgKE1QVTQwMSkgY2FwYWJpbGl0aWVzLiBTdXBwb3J0IGZvciBPUEwzLVNBIGlzIGRlc2NyaWJlZCBiZWxvdy4KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lhbWFoYSBPUEwzLVNBMQorCisJWWFtYWhhIE9QTDMtU0ExIChZTUY3MDEpIGlzIGFuIGF1ZGlvIGNvbnRyb2xsZXIgY2hpcCB1c2VkIG9uIHNvbWUKKwkoSW50ZWwpIG1vdGhlcmJvYXJkcyBhbmQgb24gY2hlYXAgc291bmQgY2FyZHMuIEl0IHNob3VsZCBub3QgYmUKKwljb25mdXNlZCB3aXRoIHRoZSBvcmlnaW5hbCBPUEwzIGNoaXAgKFlNRjI3OCkgd2hpY2ggaXMgZW50aXJlbHkKKyAgICAgICAgZGlmZmVyZW50IGNoaXAuIE9QTDMtU0ExIGhhcyBzdXBwb3J0IGZvciBNU1MsIE1QVTQwMSBhbmQgU0IgUHJvCisJKG5vdCB1c2VkIGluIE9TUy9GcmVlKSBpbiBhZGRpdGlvbiB0byB0aGUgT1BMMyBGTSBzeW50aC4KKworCVRoZXJlIGFyZSBhbHNvIGNoaXBzIGNhbGxlZCBPUEwzLVNBMiwgT1BMMy1TQTMsIC4uLiwgT1BMM1NBLU4uIFRoZXkKKwlhcmUgUG5QIGNoaXBzIGFuZCB3aWxsIG5vdCB3b3JrIHdpdGggdGhlIE9QTDMtU0ExIGRyaXZlci4gWW91IHNob3VsZCAKKwl1c2UgdGhlIHN0YW5kYXJkIE1TUywgTVBVNDAxIGFuZCBPUEwzIG9wdGlvbnMgd2l0aCB0aGVzZSBjaGlwcyBhbmQgdG8KKwlhY3RpdmF0ZSB0aGUgY2FyZCB1c2luZyBpc2FwbnB0b29scy4KKworNEZyb250IFRlY2hub2xvZ2llcyBTb2Z0T1NTCisKKwlTb2Z0T1NTIGlzIGEgc29mdHdhcmUgYmFzZWQgd2F2ZSB0YWJsZSBlbXVsYXRpb24gd2hpY2ggd29ya3Mgd2l0aAorCWFueSAxNiBiaXQgc3RlcmVvIHNvdW5kIGNhcmQuIER1ZSB0byBpdHMgbmF0dXJlIGEgZmFzdCBDUFUgaXMKKwlyZXF1aXJlZCAoUDEzMyBpcyBtaW5pbXVtKS4gQWx0aG91Z2ggU29mdE9TUyBkb2VzIF9ub3RfIHVzZSBNTVgKKwlpbnN0cnVjdGlvbnMgaXQgaGFzIHByb3ZlbiBvdXQgdGhhdCByZWNlbnQgcHJvY2Vzc29ycyAod2hpY2ggYXBwZWFyCisJdG8gaGF2ZSBNTVgpIHBlcmZvcm0gc2lnbmlmaWNhbnRseSBiZXR0ZXIgd2l0aCBTb2Z0T1NTIHRoYW4gZWFybGllcgorCW9uZXMuIEZvciBleGFtcGxlIGEgUDE2Nk1NWCBiZWF0cyBhIFBQcm8yMDAuIFNvZnRPU1Mgc2hvdWxkIG5vdCBiZSB1c2VkCisJb24gNDg2IG9yIDM4NiBtYWNoaW5lcy4KKworCVRoZSBhbW91bnQgb2YgQ1BVIGxvYWQgY2F1c2VkIGJ5IFNvZnRPU1MgY2FuIGJlIGNvbnRyb2xsZWQgYnkKKwlzZWxlY3RpbmcgdGhlIENPTkZJR19TT0ZUT1NTX1JBVEUgYW5kIENPTkZJR19TT0ZUT1NTX1ZPSUNFUworCXBhcmFtZXRlcnMgcHJvcGVybHkgKHRoZXkgd2lsbCBiZSBwcm9tcHRlZCBieSBtYWtlIGNvbmZpZykuIEl0J3MKKwlyZWNvbW1lbmRlZCB0byBzZXQgQ09ORklHX1NPRlRPU1NfVk9JQ0VTIHRvIDMyLiBJZiB5b3UgaGF2ZSBhCisJUDE2Nk1NWCBvciBmYXN0ZXIgKFBQcm8yMDAgaXMgbm90IGZhc3RlcikgeW91IGNhbiBzZXQKKwlDT05GSUdfU09GVE9TU19SQVRFIHRvIDQ0MTAwIChrSHopLiBIb3dldmVyIHdpdGggc2xvd2VyIHN5c3RlbXMgaXQKKwlyZWNvbW1lbmRlZCB0byB1c2Ugc2FtcGxpbmcgcmF0ZXMgYXJvdW5kIDIyMDUwIG9yIGV2ZW4gMTYwMDAga0h6LgorCVNlbGVjdGluZyB0b28gaGlnaCB2YWx1ZXMgZm9yIHRoZXNlIHBhcmFtZXRlcnMgbWF5IGhhbmcgeW91cgorCXN5c3RlbSB3aGVuIHBsYXlpbmcgTUlESSBmaWxlcyB3aXRoIGhpZ2h0IGRlZ3JlZSBvZiBwb2x5cGhvbnkKKwkobnVtYmVyIG9mIGNvbmN1cnJlbnRseSBwbGF5aW5nIG5vdGVzKS4gSXQncyBhbHNvIHBvc3NpYmxlIHRvCisJZGVjcmVhc2UgQ09ORklHX1NPRlRPU1NfVk9JQ0VTLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZQorCWhpZ2hlciBzYW1wbGluZyByYXRlcy4gSG93ZXZlciB1c2luZyBmZXdlciB2b2ljZXMgZGVjcmVhc2VzCisJcGxheWJhY2sgcXVhbGl0eSBtb3JlIHRoYW4gZGVjcmVhc2luZyB0aGUgc2FtcGxpbmcgcmF0ZS4KKworCVNvZnRPU1Mga2VlcHMgdGhlIHNhbXBsZXMgbG9hZGVkIG9uIHRoZSBzeXN0ZW0ncyBSQU0gc28gbXVjaCBSQU0gaXMKKwlyZXF1aXJlZC4gU29mdE9TUyBzaG91bGQgbmV2ZXIgYmUgdXNlZCBvbiBtYWNoaW5lcyB3aXRoIGxlc3MgdGhhbiAxNiBNQgorCW9mIFJBTSBzaW5jZSB0aGlzIGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cyAoeW91IG1heSBhY2NpZGVudGFsbHkgcnVuIG91dAorCW9mIG1lbW9yeSB3aGljaCBwcm9iYWJseSBjcmFzaGVzIHRoZSBtYWNoaW5lKS4gCisKKwlTb2Z0T1NTIGltcGxlbWVudHMgdGhlIHdhdmUgdGFibGUgQVBJIG9yaWdpbmFsbHkgZGVzaWduZWQgZm9yIEdVUy4gRm9yCisJdGhpcyByZWFzb24gYWxsIGFwcGxpY2F0aW9ucyBkZXNpZ25lZCBmb3IgR1VTIHNob3VsZCB3b3JrIChhdCBsZWFzdAorCWFmdGVyIG1pbm9yIG1vZGlmaWNhdGlvbnMpLiBGb3IgZXhhbXBsZSBnbW9kL3hnbW9kIGFuZCBwbGF5bWlkaSAtZyBhcmUKKwlrbm93biB0byB3b3JrLgorCisJVG8gd29yayBTb2Z0T1NTIHdpbGwgcmVxdWlyZSBHVVMgY29tcGF0aWJsZQorCXBhdGNoIGZpbGVzIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtIChpbiAvZG9zL3VsdHJhc25kL21pZGkpLiBZb3UKKwljYW4gdXNlIHRoZSBwdWJsaWMgZG9tYWluIE1JRElBIHBhdGNoc2V0IGF2YWlsYWJsZSBmcm9tIHNldmVyYWwgZnRwCisJc2l0ZXMuCisKKyAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJSU1QT1JUQU5UIE5PVElDRSEgVGhlIG9yaWdpbmFsIHBhdGNoIHNldCBkaXN0cmlidXRlZCB3aXRoIHRoZSBHcmF2aXMgCisJVWx0cmFzb3VuZCBjYXJkIGlzIG5vdCBpbiBwdWJsaWMgZG9tYWluIChldmVuIHRob3VnaCBpdCdzIGF2YWlsYWJsZSBmcm9tCisJc29tZSBGVFAgc2l0ZXMpLiBZb3Ugc2hvdWxkIGNvbnRhY3QgVm9pY2UgQ3J5c3RhbCAod3d3LnZvaWNlY3J5c3RhbC5jb20pCisJaWYgeW91IGxpa2UgdG8gdXNlIHRoZXNlIHBhdGNoZXMgd2l0aCBTb2Z0T1NTIGluY2x1ZGVkIGluIE9TUy9GcmVlLgorICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworUFNTIGJhc2VkIGNhcmRzIChBRDE4NDggKyBBRFNQLTIxMTUgKyBFY2hvIEVTQzYxNCBBU0lDKQorCUFuYWxvZyBEZXZpY2VzIGFuZCBFY2hvIFNwZWVjaCBoYXZlIHRvZ2V0aGVyIGRlZmluZWQgYSBzb3VuZCBjYXJkCisJYXJjaGl0ZWN0dXJlIGJhc2VkIG9uIHRoZSBhYm92ZSBjaGlwcy4gVGhlIERTUCBjaGlwIGlzIHVzZWQKKwlmb3IgZW11bGF0aW9uIG9mIFNCIFBybywgRk0gYW5kIEdlbmVyYWwgTUlESS9NVDMyLgorCisJVGhlcmUgYXJlIHNldmVyYWwgY2FyZHMgYmFzZWQgb24gdGhpcyBhcmNoaXRlY3R1cmUuIFRoZSBtb3N0IGtub3duCisJb25lcyBhcmUgT3JjaGlkIFNXMzIgYW5kIENhcmRpbmFsIERTUDE2LiAKKworCVRoZSBkcml2ZXIgc3VwcG9ydHMgZG93bmxvYWRpbmcgRFNQIGFsZ29yaXRobXMgdG8gdGhlc2UgY2FyZHMuCisKKwlOT1RFISBZb3Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgIm9sZCIgY29uZmlnIHNjcmlwdCB3aGVuIGNvbmZpZ3VyaW5nCisJUFNTIGNhcmRzLgorCitNZWRpYVRyaXggQXVkaW9Ucml4IFBybworCVRoZSBBVFAgY2FyZCBpcyBidWlsdCBhcm91bmQgYSBDUzQyMzEgY29kZWMgYW5kIGFuIE9QTDQgc3ludGhlc2l6ZXIKKwljaGlwcy4gVGhlIE9QTDQgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgYSBtaWNyb2NvbnRyb2xsZXIgcnVubmluZyBhCisJR2VuZXJhbCBNSURJIGVtdWxhdG9yLiBUaGVyZSBpcyBhbHNvIGEgU0IgMS41IGNvbXBhdGlibGUgcGxheWJhY2sgbW9kZS4KKworRW5zb25pcSBTb3VuZFNjYXBlIGFuZCBjb21wYXRpYmxlcworCUVuc29uaXEgaGFzIGRlc2lnbmVkIGEgc291bmQgY2FyZCBhcmNoaXRlY3R1cmUgYmFzZWQgb24gdGhlCisJT1RUTyBzeW50aGVzaXplciBjaGlwIHVzZWQgaW4gdGhlaXIgcHJvZmVzc2lvbmFsIE1JREkgc3ludGhlc2l6ZXJzLgorCVNldmVyYWwgY29tcGFuaWVzIChpbmNsdWRpbmcgRW5zb25pcSwgUmV2ZWFsIGFuZCBTcGVhKSBhcmUgc2VsbGluZworCWNhcmRzIGJhc2VkIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLgorCisJTk9URSEgVGhlIFNvdW5kU2NhcGUgUG5QIGlzIG5vdCBzdXBwb3J0ZWQgYnkgT1NTL0ZyZWUuIEVuc29uaXEgVklWTyBhbmQKKwlWSVZPOTAgY2FyZHMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggU291bmRzY2FwZXMgc28gdGhlIFNvdW5kc2NhcGUKKyAgICAgICAgZHJpdmVyIHdpbGwgbm90IHdvcmsgd2l0aCB0aGVtLiBZb3UgbWF5IHdhbnQgdG8gdXNlIE9TUy9MaW51eCB3aXRoIHRoZXNlCisgICAgICAgIGNhcmRzLgorCitPUFRpIE1BRDE2IGFuZCBNb3phcnQgYmFzZWQgY2FyZHMKKwlUaGUgTW96YXJ0IChPQUsgT1RJLTYwMSksIE1BRDE2IChPUFRpIDgyQzkyOCksIE1BRDE2IFBybyAoT1BUaSA4MkM5MjkpLAorCU9QVGkgODJDOTI0LzgyQzkyNSAoaW4gX25vbl8gUG5QIG1vZGUpIGFuZCBPUFRpIDgyQzkzMCBpbnRlcmZhY2UKKwljaGlwcyBhcmUgdXNlZCBpbiBtYW55IGRpZmZlcmVudCBzb3VuZCBjYXJkcywgaW5jbHVkaW5nIHNvbWUKKwljYXJkcyBieSBSZXZlYWwgbWlybyBhbmQgVHVydGxlIEJlYWNoIChUcm9wZXopLiBUaGUgcHVycG9zZSBvZiB0aGVzZQorCWNoaXBzIGlzIHRvIGNvbm5lY3Qgb3RoZXIgYXVkaW8gY29tcG9uZW50cyB0byB0aGUgUEMgYnVzLiBUaGUKKwlpbnRlcmZhY2UgY2hpcCBwZXJmb3JtcyBhZGRyZXNzIGRlY29kaW5nIGZvciB0aGUgb3RoZXIgY2hpcHMuCisJTk9URSEgVHJvcGV6IFBsdXMgaXMgbm90IE1BRDE2IGJ1dCBDUzQyMzIgYmFzZWQuCisJTk9URSEgTUFEMTYgUG5QIGNhcmRzICg4MkM5MjQsIDgyQzkyNSwgODJDOTMxKSBhcmUgbm90IE1BRDE2IGNvbXBhdGlibGUKKwlpbiB0aGUgUG5QIG1vZGUuIFlvdSB3aWxsIGhhdmUgdG8gdXNlIHRoZW0gaW4gTVNTIG1vZGUgYWZ0ZXIgaGF2aW5nCisJaW5pdGlhbGl6ZWQgdGhlbSB1c2luZyBpc2FwbnB0b29scyBvciBET1MuIDgyQzkzMSBwcm9iYWJseSByZXF1aXJlcworCWluaXRpYWxpemF0aW9uIHVzaW5nIERPUy9XaW5kb3dzIChydW5uaW5nIGlzYXBucHRvb2xzIGlzIG5vdCBlbm91Z2gpLgorCUl0J3MgcG9zc2libGUgdG8gdXNlIDgyQzkzMSB3aXRoIE9TUy9GcmVlIGJ5IGp1bXBlcmluZyBpdCB0byBub24tUG5QCisJbW9kZSAocHJvdmlkZWQgdGhhdCB0aGUgY2FyZCBoYXMgYSBqdW1wZXIgZm9yIHRoaXMpLiBJbiBub24tUG5QIG1vZGUKKwk4MkM5MzEgaXMgY29tcGF0aWJsZSB3aXRoIDgyQzkzMCBhbmQgc2hvdWxkIHdvcmsgd2l0aCB0aGUgTUFEMTYgZHJpdmVyCisJKHdpdGhvdXQgbmVlZCB0byB1c2UgaXNhcG5wdG9vbHMgb3IgRE9TIHRvIGluaXRpYWxpemUgaXQpLiBBbGwgT1BUaQorCWNoaXBzIGFyZSBzdXBwb3J0ZWQgYnkgT1NTL0xpbnV4IChib3RoIGluIFBuUCBhbmQgbm9uLVBuUCBtb2RlcykuCisKK0F1ZGlvIEV4Y2VsIERTUDE2IAorCVN1cHBvcnQgZm9yIHRoaXMgY2FyZCB3YXMgd3JpdHRlbiBieSBSaWNjYXJkbyBGYWNjZXR0aQorCShyaWNjYXJkb0BjZGM4ZzUuY2RjLnBvbGltaS5pdCkuIFRoZSBBRURTUDE2IGRyaXZlciBpbmNsdWRlZCBpbgorCXRoZSBsb3dsZXZlbC8gZGlyZWN0b3J5LiBUbyB1c2UgaXQgeW91IHNob3VsZCBlbmFibGUgdGhlCisJIkFkZGl0aW9uYWwgbG93IGxldmVsIGRyaXZlcnMiIG9wdGlvbi4KKworQ3J5c3RhbCBDUzQyMzIgYW5kIENTNDIzNiBiYXNlZCBjYXJkcyBzdWNoIGFzIEFjZXJNYWdpYyBTMjMsIFRCIFRyb3BleiBfUGx1c18gYW5kIAorCW1hbnkgUEMgbW90aGVyYm9hcmRzIChDb21wYXEsIEhQLCBJbnRlbCwgLi4uKQorCUNTNDIzMiBpcyBhIFBuUCBtdWx0aW1lZGlhIGNoaXAgd2hpY2ggY29udGFpbnMgYSBDUzMyMzFBIGNvZGVjLAorCVNCIGFuZCBNUFU0MDEgZW11bGF0aW9ucy4gVGhlcmUgaXMgc3VwcG9ydCBmb3IgT1BMMyB0b28uCisJVW5mb3J0dW5hdGVseSB0aGUgTVBVNDAxIG1vZGUgZG9lc24ndCB3b3JrIChJIGRvbid0IGtub3cgaG93IHRvCisJaW5pdGlhbGl6ZSBpdCkuIENTNDIzNiBpcyBhbiBlbmhhbmNlZCAoY29tcGF0aWJsZSkgdmVyc2lvbiBvZiBDUzQyMzIuCisJTk9URSEgRG9uJ3QgZXZlciB0cnkgdG8gdXNlIGlzYXBucHRvb2xzIHdpdGggQ1M0MjMyIHNpbmNlIHRoaXMgd2lsbCBqdXN0CisJZnJlZXplIHlvdXIgbWFjaGluZSAoZHVlIHRvIGNoaXAgYnVncykuIElmIHlvdSBoYXZlIHByb2JsZW1zIGluIGdldHRpbmcKKwlDUzQyMzIgd29ya2luZyB5b3UgY291bGQgdHJ5IGluaXRpYWxpemluZyBpdCB3aXRoIERPUyAoQ1M0MjMyQy5FWEUpIGFuZAorCXRoZW4gYm9vdGluZyBMaW51eCB1c2luZyBsb2FkbGluLiBDUzQyMzJDLkVYRSBsb2FkcyBhIHNlY3JldCBmaXJtd2FyZQorCXBhdGNoIHdoaWNoIGlzIG5vdCBkb2N1bWVudGVkIGJ5IENyeXN0YWwuCisKK1R1cnRsZSBCZWFjaCBNYXVpIGFuZCBUcm9wZXogImNsYXNzaWMiCisJVGhpcyBkcml2ZXIgdmVyc2lvbiBzdXBwb3J0cyBzYW1wbGUsIHBhdGNoIGFuZCBwcm9ncmFtIGxvYWRpbmcgY29tbWFuZHMKKwlkZXNjcmliZWQgaW4gdGhlIE1hdWkvVHJvcGV6IFVzZXIncyBtYW51YWwuIAorCVRoZXJlIGlzIG5vdyBmdWxsIGluaXRpYWxpemF0aW9uIHN1cHBvcnQgdG9vLiBUaGUgYXVkaW8gc2lkZSBvZgorCXRoZSBUcm9wZXogaXMgYmFzZWQgb24gdGhlIE1BRDE2IGNoaXAgKHNlZSBhYm92ZSkuCisJTk9URSEgVHJvcGV6IFBsdXMgaXMgZGlmZmVyZW50IGNhcmQgdGhhbiBUcm9wZXogImNsYXNzaWMiIGFuZCB3aWxsIG5vdAorCXdvcmsgZnVsbHkgaW4gTGludXguIFlvdSBjYW4gZ2V0IGF1ZGlvIGZlYXR1cmVzIHdvcmtpbmcgYnkgY29uZmlndXJpbmcKKwl0aGUgY2FyZCBhcyBhIENTNDIzMiBiYXNlZCBjYXJkIChhYm92ZSkuCisKKworSnVtcGVycyBhbmQgc29mdHdhcmUgY29uZmlndXJhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTb21lIG9mIHRoZSBlYXJsaWVzdCBzb3VuZCBjYXJkcyB3ZXJlIGp1bXBlciBjb25maWd1cmFibGUuIFlvdSBoYXZlIHRvCitjb25maWd1cmUgdGhlIGRyaXZlciB1c2UgSS9PLCBJUlEgYW5kIERNQSBzZXR0aW5ncwordGhhdCBtYXRjaCB0aGUganVtcGVycy4gSnVzdCBmZXcgOCBiaXQgY2FyZHMgYXJlIGZ1bGx5IGp1bXBlciAKK2NvbmZpZ3VyYWJsZSAoU0IgMS54LzIueCwgU0IgUHJvIGFuZCBjbG9uZXMpLgorU29tZSBjYXJkcyBtYWRlIGJ5IEF6dGVjaCBoYXZlIGFuIEVFUFJPTSB3aGljaCBjb250YWlucyB0aGUgCitjb25maWcgaW5mby4gVGhlc2UgY2FyZHMgYmVoYXZlIG11Y2ggbGlrZSBoYXJkd2FyZSBqdW1wZXJlZCBjYXJkcy4KKworTW9zdCBjYXJkcyBoYXZlIGp1bXBlciBmb3IgdGhlIGJhc2UgSS9PIGFkZHJlc3MgYnV0IG90aGVyIHBhcmFtZXRlcnMKK2FyZSBzb2Z0d2FyZSBjb25maWd1cmFibGUuIFNvbWV0aW1lcyB0aGVyZSBhcmUgZmV3IG90aGVyIGp1bXBlcnMgdG9vLgorCitMYXRlc3QgY2FyZHMgYXJlIGZ1bGx5IHNvZnR3YXJlIGNvbmZpZ3VyYWJsZSBvciB0aGV5IGFyZSBQblAgSVNBCitjb21wYXRpYmxlLiBUaGVyZSBhcmUgbm8ganVtcGVycyBvbiB0aGUgYm9hcmQuCisKK1RoZSBkcml2ZXIgaGFuZGxlcyBzb2Z0d2FyZSBjb25maWd1cmFibGUgY2FyZHMgYXV0b21hdGljYWxseS4gSnVzdCBjb25maWd1cmUKK3RoZSBkcml2ZXIgdG8gdXNlIEkvTywgSVJRIGFuZCBETUEgc2V0dGluZ3Mgd2hpY2ggYXJlIGtub3duIHRvIHdvcmsuCitZb3UgY291bGQgdXN1YWxseSB1c2UgdGhlIHNhbWUgdmFsdWVzIHRoYW4gd2l0aCBET1MgYW5kL29yIFdpbmRvd3MuCitVc2luZyBkaWZmZXJlbnQgc2V0dGluZ3MgaXMgcG9zc2libGUgYnV0IG5vdCByZWNvbW1lbmRlZCBzaW5jZSBpdCBtYXkgY2F1c2UKK3NvbWUgdHJvdWJsZSAoZm9yIGV4YW1wbGUgd2hlbiB3YXJtIGJvb3RpbmcgZnJvbSBhbiBPUyB0byBhbm90aGVyIG9yCit3aGVuIGluc3RhbGxpbmcgbmV3IGhhcmR3YXJlIHRvIHRoZSBtYWNoaW5lKS4KKworU291bmQgZHJpdmVyIHNldHMgdGhlIHNvZnQgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgb2YgdGhlIGNhcmQgYXV0b21hdGljYWxseQorZHVyaW5nIGJvb3QuIFVzdWFsbHkgeW91IGRvbid0IG5lZWQgdG8gcnVuIGFueSBleHRyYSBpbml0aWFsaXphdGlvbgorcHJvZ3JhbXMgd2hlbiBib290aW5nIExpbnV4IGJ1dCB0aGVyZSBhcmUgc29tZSBleGNlcHRpb25zLiBTZWUgdGhlCitjYXJkLXNwZWNpZmljIGluc3RydWN0aW9ucyBiZWxvdyBmb3IgbW9yZSBpbmZvLgorCitUaGUgZHJhd2JhY2sgb2Ygc29mdHdhcmUgY29uZmlndXJhdGlvbiBpcyB0aGF0IHRoZSBkcml2ZXIgbmVlZHMgdG8ga25vdworaG93IHRoZSBjYXJkIG11c3QgYmUgaW5pdGlhbGl6ZWQuIEl0IGNhbm5vdCBpbml0aWFsaXplIHVua25vd24gY2FyZHMKK2V2ZW4gaWYgdGhleSBhcmUgb3RoZXJ3aXNlIGNvbXBhdGlibGUgd2l0aCBzb21lIG90aGVyIGNhcmRzIChsaWtlIFNCLAorTVBVNDAxIG9yIFdpbmRvd3MgU291bmQgU3lzdGVtKS4KKworCitXaGF0IGlmIHlvdXIgY2FyZCB3YXMgbm90IGxpc3RlZCBhYm92ZT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMgdG8gbG9vayBhdCB0aGUgbWFqb3IgSUMgY2hpcHMgb24gdGhlIGNhcmQuCitNYW55IG9mIHRoZSBsYXRlc3Qgc291bmQgY2FyZHMgYXJlIGJhc2VkIG9uIHNvbWUgc3RhbmRhcmQgY2hpcHMuIElmIHlvdQorYXJlIGx1Y2t5LCBhbGwgb2YgdGhlbSBjb3VsZCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4gVGhlIG1vc3QgY29tbW9uIG9uZXMKK2FyZSB0aGUgT1BUaSBNQUQxNiwgTW96YXJ0LCBTb3VuZFNjYXBlIChFbnNvbmlxKSBhbmQgdGhlIFBTUyBhcmNoaXRlY3R1cmVzCitsaXN0ZWQgYWJvdmUuIEFsc28gbG9vayBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgbGlzdCBvZiB1bnN1cHBvcnRlZAorY2FyZHMgYW5kIHRoZSBvbmVzIHdoaWNoIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlci4KKworVGhlIGxhc3QgcmVzb3J0IGlzIHRvIHNlbmQgX2V4YWN0XyBuYW1lIGFuZCBtb2RlbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2FyZAordG8gbWUgdG9nZXRoZXIgd2l0aCBhIGxpc3Qgb2YgdGhlIG1ham9yIElDIGNoaXBzIChtYW51ZmFjdHVyZWQsIG1vZGVsKSB0byAKK21lLiBJIGNvdWxkIHRoZW4gdHJ5IHRvIGNoZWNrIGlmIHlvdXIgY2FyZCBsb29rcyBsaWtlIHNvbWV0aGluZyBmYW1pbGlhci4KKworVGhlcmUgYXJlIG1hbnkgbW9yZSBjYXJkcyBpbiB0aGUgd29ybGQgdGhhbiBsaXN0ZWQgYWJvdmUuIFRoZSBmaXJzdCB0aGluZyB0bworZG8gd2l0aCB0aGVzZSBjYXJkcyBpcyB0byBjaGVjayBpZiB0aGV5IGVtdWxhdGUgc29tZSBvdGhlciBjYXJkIG9yIGludGVyZmFjZQorc3VjaCBhcyBTQiwgTVNTIGFuZC9vciBNUFU0MDEuIEluIHRoaXMgY2FzZSB0aGVyZSBpcyBhIGNoYW5jZSB0byBnZXQgdGhlCitjYXJkIHRvIHdvcmsgYnkgYm9vdGluZyBET1MgYmVmb3JlIHN0YXJ0aW5nIExpbnV4IChib290IERPUywgaGl0IGN0cmwtYWx0LWRlbAorYW5kIGJvb3QgTGludXggd2l0aG91dCBoYXJkIHJlc2V0dGluZyB0aGUgbWFjaGluZSkuIEluIHRoaXMgbWV0aG9kIHRoZQorRE9TIGJhc2VkIGRyaXZlciBpbml0aWFsaXplcyB0aGUgaGFyZHdhcmUgdG8gdXNlIGtub3duIEkvTywgSVJRIGFuZCBETUEKK3NldHRpbmdzLiBJZiBzb3VuZCBkcml2ZXIgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHNhbWUgc2V0dGluZ3MsIGV2ZXJ5dGhpbmcKK3Nob3VsZCB3b3JrIE9LLgorCisKK0NvbmZpZ3VyaW5nIHNvdW5kIGRyaXZlciAod2l0aCBMaW51eCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHNvdW5kIGRyaXZlciBpcyBjdXJyZW50bHkgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsLiBUaGUgCitmaWxlcyBhcmUgaW4gL3Vzci9zcmMvbGludXgvZHJpdmVycy9zb3VuZC8uIAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCUFMV0FZUyBVU0UgVEhFIFNPVU5EIERSSVZFUiBWRVJTSU9OIFdISUNIIElTIERJU1RSSUJVVEVEIFdJVEgJICAgKgorKglUSEUgS0VSTkVMIFNPVVJDRSBQQUNLQUdFIFlPVSBBUkUgVVNJTkcuIFNPTUUgQUxQSEEgQU5EIEJFVEEgVEVTVCAgKgorKglWRVJTSU9OUyBDQU4gQkUgSU5TVEFMTEVEIEZST00gQSBTRVBBUkFURUxZIERJU1RSSUJVVEVEIFBBQ0tBR0UJICAgKgorKglCVVQgQ0hFQ0sgVEhBVCBUSEUgUEFDS0FHRSBJUyBOT1QgTVVDSCBPTERFUiAoT1IgTkVXRVIpIFRIQU4gVEhFICAgKgorKglLRVJORUwgWU9VIEFSRSBVU0lORy4gSVQnUyBQT1NTSUJMRSBUSEFUIFRIRSBLRVJORUwvRFJJVkVSIAkgICAqCisqCUlOVEVSRkFDRSBDSEFOR0VTIEJFVFdFRU4gS0VSTkVMIFJFTEVBU0VTIFdISUNIIE1BWSBDQVVTRSBTT01FCSAgICoKKyoJSU5DT01QQVRJQklMSVRZIFBST0JMRU1TLgkJCQkJICAgKgorKgkJCQkJCQkJCSAgICoKKyoJSU4gQ0FTRSBZT1UgSU5TVEFMTCBBIFNFUEFSQVRFTFkgRElTVFJJQlVURUQgU09VTkQgRFJJVkVSIFZFUlNJT04sICoKKyoJQkUgU1VSRSBUTyBSRU1PVkUgT1IgUkVOQU1FIFRIRSBPTEQgU09VTkQgRFJJVkVSIERJUkVDVE9SWSBCRUZPUkUgICoKKyoJSU5TVEFMTElORyBUSEUgTkVXIE9ORS4gTEVBVklORyBPTEQgRklMRVMgVE8gVEhFIFNPVU5EIERSSVZFUgkgICAqCisqCURJUkVDVE9SWSBfV0lMTF8gQ0FVU0UgUFJPQkxFTVMgV0hFTiBUSEUgRFJJVkVSIElTIFVTRUQgT1IJICAgKgorKglDT01QSUxFRC4JCQkJCQkJICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUbyBjb25maWd1cmUgdGhlIGRyaXZlciwgcnVuICJtYWtlIGNvbmZpZyIgaW4gdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5CisoL3Vzci9zcmMvbGludXgpLiBBbnN3ZXIgInkiIG9yICJtIiB0byB0aGUgcXVlc3Rpb24gYWJvdXQgU291bmQgY2FyZCBzdXBwb3J0CisoYWZ0ZXIgdGhlIHF1ZXN0aW9ucyBhYm91dCBtb3VzZSwgQ0QtUk9NLCBmdGFwZSwgZXRjLiBzdXBwb3J0KS4gIFF1ZXN0aW9ucworYWJvdXQgb3B0aW9ucyBmb3Igc291bmQgd2lsbCB0aGVuIGJlIGFza2VkLgorCitBZnRlciBjb25maWd1cmluZyB0aGUga2VybmVsIGFuZCBzb3VuZCBkcml2ZXIgYW5kIGNvbXBpbGUgdGhlIGtlcm5lbCAKK2ZvbGxvd2luZyBpbnN0cnVjdGlvbnMgaW4gdGhlIGtlcm5lbCBSRUFETUUuCisKK1RoZSBzb3VuZCBkcml2ZXIgY29uZmlndXJhdGlvbiBkaWFsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU291bmQgY29uZmlndXJhdGlvbiBzdGFydHMgYnkgbWFraW5nIHNvbWUgeWVzL25vIHF1ZXN0aW9ucy4gQmUgY2FyZWZ1bAord2hlbiBhbnN3ZXJpbmcgdG8gdGhlc2UgcXVlc3Rpb25zIHNpbmNlIGFuc3dlcmluZyB5IHRvIGEgcXVlc3Rpb24gbWF5CitwcmV2ZW50IHNvbWUgbGF0ZXIgb25lcyBmcm9tIGJlaW5nIGFza2VkLiBGb3IgZXhhbXBsZSBkb24ndCBhbnN3ZXIgeSB0bwordGhlIGZpcnN0IHF1ZXN0aW9uIChQQVMxNikgaWYgeW91IGRvbid0IHJlYWxseSBoYXZlIGEgUEFTMTYuIERvbid0IGVuYWJsZQorbW9yZSBjYXJkcyB0aGFuIHlvdSByZWFsbHkgbmVlZCBzaW5jZSB0aGV5IGp1c3QgY29uc3VtZSBtZW1vcnkuIEFsc28KK3NvbWUgZHJpdmVycyAobGlrZSBNUFU0MDEpIG1heSBjb25mbGljdCB3aXRoIHlvdXIgU0NTSSBjb250cm9sbGVyIGFuZAorcHJldmVudCBrZXJuZWwgZnJvbSBib290aW5nLiBJZiB5b3UgY2FyZCB3YXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkCitjYXJkcyAoYWJvdmUpLCBwbGVhc2UgbG9vayBhdCB0aGUgY2FyZCBzcGVjaWZpYyBjb25maWcgaW5zdHJ1Y3Rpb25zCisobGF0ZXIgaW4gdGhpcyBmaWxlKSBiZWZvcmUgc3RhcnRpbmcgdG8gY29uZmlndXJlLiBTb21lIGNhcmRzIG11c3QgYmUKK2NvbmZpZ3VyZWQgaW4gd2F5IHdoaWNoIGlzIG5vdCBvYnZpb3VzLgorCitTbyBoZXJlIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZpZyBkaWFsb2cuIEFuc3dlciAneScgb3IgJ24nIHRvIHRoZXNlCitxdWVzdGlvbnMuIFRoZSBkZWZhdWx0IGFuc3dlciBpcyBzaG93biBzbyB0aGF0ICh5L24pIG1lYW5zICd5JyBieSBkZWZhdWx0IGFuZAorKG4veSkgbWVhbnMgJ24nLiBUbyB1c2UgdGhlIGRlZmF1bHQgdmFsdWUsIGp1c3QgaGl0IEVOVEVSLiBCdXQgYmUgY2FyZWZ1bAorc2luY2UgdXNpbmcgdGhlIGRlZmF1bHQgX2RvZXNuJ3RfIGd1YXJhbnRlZSBhbnl0aGluZy4KKworTm90ZSBhbHNvIHRoYXQgYWxsIHF1ZXN0aW9ucyBtYXkgbm90IGJlIGFza2VkLiBUaGUgY29uZmlndXJhdGlvbiBwcm9ncmFtCittYXkgZGlzYWJsZSBzb21lIHF1ZXN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGVhcmxpZXIgY2hvaWNlcy4gSXQgbWF5IGFsc28KK3NlbGVjdCBzb21lIG9wdGlvbnMgYXV0b21hdGljYWxseSBhcyB3ZWxsLgorCisgICJQcm9BdWRpb1NwZWN0cnVtIDE2IHN1cHBvcnQiLAorCS0gQW5zd2VyICd5J19PTkxZXyBpZiB5b3UgaGF2ZSBhIFBybyBBdWRpbyBTcGVjdHJ1bSBfMTZfLAorCSAgUHJvIEF1ZGlvIFN0dWRpbyAxNiBvciBMb2dpdGVjaCBTb3VuZE1hbiAxNiAoYmUgc3VyZSB0aGF0CisJICB5b3UgcmVhZCB0aGUgYWJvdmUgbGlzdCBjb3JyZWN0bHkpLiBEb24ndCBhbnN3ZXIgJ3knIGlmIHlvdQorCSAgaGF2ZSBzb21lIG90aGVyIGNhcmQgbWFkZSBieSBNZWRpYSBWaXNpb24gb3IgTG9naXRlY2ggc2luY2UgdGhleQorCSAgYXJlIG5vdCBQQVMxNiBjb21wYXRpYmxlLgorCSAgTk9URSEgU2luY2UgMy41LWJldGExMCB5b3UgbmVlZCB0byBlbmFibGUgU0Igc3VwcG9ydCAobmV4dCBxdWVzdGlvbikKKwkgIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU0IgZW11bGF0aW9uIG9mIFBBUzE2LiBJdCdzIGFsc28gcG9zc2libGUgdG8KKyAgIAkgIHRoZSBlbXVsYXRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGEgdHJ1ZSBTQiBjYXJkIHRvZ2V0aGVyIHdpdGggUEFTMTYKKwkgICh0aGVyZSBpcyBhbm90aGVyIHF1ZXN0aW9uIGFib3V0IHRoaXMgdGhhdCBpcyBhc2tlZCBsYXRlcikuCisgICJTb3VuZCBCbGFzdGVyIHN1cHBvcnQiLAorCS0gQW5zd2VyICd5JyBpZiB5b3UgaGF2ZSBhbiBvcmlnaW5hbCBTQiBjYXJkIG1hZGUgYnkgQ3JlYXRpdmUgTGFicworCSAgb3IgYSBmdWxsIDEwMCUgaGFyZHdhcmUgY29tcGF0aWJsZSBjbG9uZSAobGlrZSBUaHVuZGVyYm9hcmQgb3IKKwkgIFNNIEdhbWVzKS4gSWYgeW91ciBjYXJkIHdhcyBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2FyZHMgKGFib3ZlKSwKKwkgIHBsZWFzZSBsb29rIGF0IHRoZSBjYXJkIHNwZWNpZmljIGluc3RydWN0aW9ucyBsYXRlciBpbiB0aGlzIGZpbGUKKwkgIGJlZm9yZSBhbnN3ZXJpbmcgdGhpcyBxdWVzdGlvbi4gRm9yIGFuIHVua25vd24gY2FyZCB5b3UgbWF5IGFuc3dlciAKKwkgICd5JyBpZiB0aGUgY2FyZCBjbGFpbXMgdG8gYmUgU0IgY29tcGF0aWJsZS4KKwkgRW5hYmxlIHRoaXMgb3B0aW9uIGFsc28gd2l0aCBQQVMxNiAoY2hhbmdlZCBzaW5jZSB2My41LWJldGE5KS4KKworCSBEb24ndCBlbmFibGUgU0IgaWYgeW91IGhhdmUgYSBNQUQxNiBvciBNb3phcnQgY29tcGF0aWJsZSBjYXJkLgorCisgICJHZW5lcmljIE9QTDIvT1BMMyBGTSBzeW50aGVzaXplciBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91ciBjYXJkIGhhcyBhIEZNIGNoaXAgbWFkZSBieSBZYW1haGEgKE9QTDIvT1BMMy9PUEw0KS4KKwkgIEFuc3dlcmluZyAneScgaXMgdXN1YWxseSBhIHNhZmUgYW5kIHJlY29tbWVuZGVkIGNob2ljZS4gSG93ZXZlciBzb21lCisJICBjYXJkcyBtYXkgaGF2ZSBzb2Z0d2FyZSAoVFNSKSBGTSBlbXVsYXRpb24uIEVuYWJsaW5nIEZNIHN1cHBvcnQKKwkgIHdpdGggdGhlc2UgY2FyZHMgbWF5IGNhdXNlIHRyb3VibGUuIEhvd2V2ZXIgSSBkb24ndCBjdXJyZW50bHkga25vdworCSAgc3VjaCBjYXJkcy4KKyAgIkdyYXZpcyBVbHRyYXNvdW5kIHN1cHBvcnQiLAorCS0gQW5zd2VyICd5JyBpZiB5b3UgaGF2ZSBHVVMgb3IgR1VTIE1BWC4gQW5zd2VyICduJyBpZiB5b3UgZG9uJ3QKKwkgIGhhdmUgR1VTIHNpbmNlIHRoZSBHVVMgZHJpdmVyIGNvbnN1bWVzIG11Y2ggbWVtb3J5LgorCSAgQ3VycmVudGx5IEkgZG9uJ3QgaGF2ZSBleHBlcmllbmNlcyB3aXRoIHRoZSBHVVMgQUNFIHNvIEkgZG9uJ3QKKwkgIGtub3cgd2hhdCB0byBhbnN3ZXIgd2l0aCBpdC4KKyAgIk1QVS00MDEgc3VwcG9ydCAoTk9UIGZvciBTQjE2KSIsCisJLSBCZSBjYXJlZnVsIHdpdGggdGhpcyBxdWVzdGlvbi4gVGhlIE1QVTQwMSBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkCisJICBieSBhbG1vc3QgYW55IHNvdW5kIGNhcmQgdG9kYXkuIEhvd2V2ZXIgc29tZSBuYXRpdmVseSBzdXBwb3J0ZWQgY2FyZHMKKwkgIGhhdmUgdGhlaXIgb3duIGRyaXZlciBmb3IgTVBVNDAxLiBFbmFibGluZyB0aGUgTVBVNDAxIG9wdGlvbiB3aXRoCisJICB0aGVzZSBjYXJkcyB3aWxsIGNhdXNlIGEgY29uZmxpY3QuIEFsc28gZW5hYmxpbmcgTVBVNDAxIG9uIGEgc3lzdGVtCisJICB0aGF0IGRvZXNuJ3QgcmVhbGx5IGhhdmUgYSBNUFU0MDEgY291bGQgY2F1c2Ugc29tZSB0cm91YmxlLiBJZiB5b3VyCisJICBjYXJkIHdhcyBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2FyZHMgKGFib3ZlKSwgcGxlYXNlIGxvb2sgYXQKKwkgIHRoZSBjYXJkIHNwZWNpZmljIGluc3RydWN0aW9ucyBsYXRlciBpbiB0aGlzIGZpbGUuCisKKwkgIEluIE1PU1QgY2FzZXMgdGhpcyBNUFU0MDEgZHJpdmVyIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCAidHJ1ZSIKKwkgIE1JREktb25seSBNUFU0MDEgcHJvZmVzc2lvbmFsIGNhcmRzLiBJbiBtb3N0IG90aGVyIGNhc2VzIHRoZXJlCisJICBpcyBhbm90aGVyIHdheSB0byBnZXQgdGhlIE1QVTQwMSBjb21wYXRpYmxlIGludGVyZmFjZSBvZiBhCisJICBzb3VuZCBjYXJkIHRvIHdvcmsuCisJICBTdXBwb3J0IGZvciB0aGUgTVBVNDAxIGNvbXBhdGlibGUgTUlESSBwb3J0IG9mIFNCMTYsIEVTUzE2ODgKKwkgIGFuZCBNViBKYXp6MTYgY2FyZHMgaXMgaW5jbHVkZWQgaW4gdGhlIFNCIGRyaXZlci4gVXNlIGl0IGluc3RlYWQKKwkgIG9mIHRoaXMgc2VwYXJhdGUgTVBVNDAxIGRyaXZlciB3aXRoIHRoZXNlIGNhcmRzLiBBcyB3ZWxsIAorCSAgU291bmRzY2FwZSwgUFNTIGFuZCBNYXVpIGRyaXZlcnMgaW5jbHVkZSB0aGVpciBvd24gTVBVNDAxCisJICBvcHRpb25zLgorCisJICBJdCdzIHNhZmUgdG8gYW5zd2VyICd5JyBpZiB5b3UgaGF2ZSBhIHRydWUgTVBVNDAxIE1JREkgaW50ZXJmYWNlCisJICBjYXJkLiAKKyAgIjY4NTAgVUFSVCBNaWRpIHN1cHBvcnQiLAorCS0gSXQncyBzYWZlIHRvIGFuc3dlciAnbicgdG8gdGhpcyBxdWVzdGlvbiBpbiBhbGwgY2FzZXMuIFRoZSA2ODUwCisJICBVQVJUIGludGVyZmFjZSBpcyBzbyByYXJlbHkgdXNlZC4KKyAgIlBTUyAoRUNITy1BREkyMTExKSBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgb25seSBpZiB5b3UgaGF2ZSBPcmNoaWQgU1czMiwgQ2FyZGluYWwgRFNQMTYgb3Igc29tZQorCSAgb3RoZXIgY2FyZCBiYXNlZCBvbiB0aGUgUFNTIGNoaXBzZXQgKEFEMTg0OCBjb2RlYyArIEFEU1AtMjExNQorCSAgRFNQIGNoaXAgKyBFY2hvIEVTQzYxNCBBU0lDIENISVApLgorICAiMTYgYml0IHNhbXBsaW5nIG9wdGlvbiBvZiBHVVMgKF9OT1RfIEdVUyBNQVgpIiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSAxNiBiaXQgc2FtcGxpbmcgZGF1Z2h0ZXJjYXJkCisJICB0byB5b3VyIEdVUy4gQW5zd2VyICduJyBpZiB5b3UgaGF2ZSBHVVMgTUFYLiBFbmFibGluZyB0aGlzIG9wdGlvbgorCSAgZGlzYWJsZXMgR1VTIE1BWCBzdXBwb3J0LgorICAiR1VTIE1BWCBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgb25seSBpZiB5b3UgaGF2ZSBhIEdVUyBNQVguCisgICJNaWNyb3NvZnQgU291bmQgU3lzdGVtIHN1cHBvcnQiLAorCS0gQWdhaW4gdGhpbmsgY2FyZWZ1bGx5IGJlZm9yZSBhbnN3ZXJpbmcgJ3knIHRvIHRoaXMgcXVlc3Rpb24uIEl0J3MKKwkgIHNhZmUgdG8gYW5zd2VyICd5JyBpbiBjYXNlIHlvdSBoYXZlIHRoZSBvcmlnaW5hbCBXaW5kb3dzIFNvdW5kIAorCSAgU3lzdGVtIGNhcmQgbWFkZSBieSBNaWNyb3NvZnQgb3IgQXp0ZWNoIFNHIDE2IFBybyAob3IgTlgxNiBQcm8pLgorCSAgQWxzbyB5b3UgbWF5IGFuc3dlciAneScgaW4gY2FzZSB5b3VyIGNhcmQgd2FzIG5vdCBsaXN0ZWQgZWFybGllcgorCSAgaW4gdGhpcyBmaWxlLiBGb3IgY2FyZHMgaGF2aW5nIG5hdGl2ZSBzdXBwb3J0IGluIHRoZSBkcml2ZXIsIGNvbnN1bHQKKwkgIHRoZSBjYXJkIHNwZWNpZmljIGluc3RydWN0aW9ucyBsYXRlciBpbiB0aGlzIGZpbGUuIFNvbWUgZHJpdmVycworCSAgaGF2ZSB0aGVpciBvd24gTVNTIHN1cHBvcnQgYW5kIGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgYQorCSAgY29uZmxpY3QuIAorCSAgTm90ZSEgVGhlIE1TUyBkcml2ZXIgcGVybWl0cyBjb25maWd1cmluZyB0d28gRE1BIGNoYW5uZWxzLiBUaGlzIGlzIGEKKwkgICJub25zdGFuZGFyZCIgZmVhdHVyZSBhbmQgd29ya3Mgb25seSB3aXRoIHZlcnkgZmV3IGNhcmRzIChpZiBhbnkpLgorCSAgSW4gbW9zdCBjYXNlcyB0aGUgc2Vjb25kIERNQSBjaGFubmVsIHNob3VsZCBiZSBkaXNhYmxlZCBvciBzZXQgdG8KKwkgIHRoZSBzYW1lIGNoYW5uZWwgdGhhbiB0aGUgZmlyc3Qgb25lLiBUcnlpbmcgdG8gY29uZmlndXJlIHR3byBzZXBhcmF0ZQorCSAgY2hhbm5lbHMgd2l0aCBjYXJkcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhpcyBmZWF0dXJlIHdpbGwgcHJldmVudAorCSAgYXVkaW8gKGF0IGxlYXN0IHJlY29yZGluZykgZnJvbSB3b3JraW5nLgorICAiRW5zb25pcSBTb3VuZHNjYXBlIHN1cHBvcnQiLAorCS0gQW5zd2VyICd5JyBpZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQgYmFzZWQgb24gdGhlIEVuc29uaXEgU291bmRTY2FwZQorCSAgY2hpcHNldC4gU3VjaCBjYXJkcyBhcmUgYmVpbmcgbWFudWZhY3R1cmVkIGF0IGxlYXN0IGJ5IEVuc29uaXEsCisJICBTcGVhIGFuZCBSZXZlYWwgKG5vdGUgdGhhdCBSZXZlYWwgbWFrZXMgb3RoZXIgY2FyZHMgYWxzbykuICBUaGUgb2xkZXN0CisJICBjYXJkcyBtYWRlIGJ5IFNwZWEgZG9uJ3Qgd29yayBwcm9wZXJseSB3aXRoIExpbnV4LiAKKwkgIFNvdW5kc2NhcGUgUG5QIGFzIHdlbGwgYXMgRW5zb25pcSBWSVZPIHdvcmsgb25seSB3aXRoIHRoZSBjb21tZXJjaWFsCisJICBPU1MvTGludXggdmVyc2lvbi4KKyAgIk1lZGlhVHJpeCBBdWRpb1RyaXggUHJvIHN1cHBvcnQiLAorCS0gQW5zd2VyICd5JyBpZiB5b3UgaGF2ZSB0aGUgQXVkaW9Ucml4IFByby4KKyAgIlN1cHBvcnQgZm9yIE1BRDE2IGFuZC9vciBNb3phcnQgYmFzZWQgY2FyZHMiLAorCS0gQW5zd2VyIHkgaWYgeW91ciBjYXJkIGhhcyBhIE1vemFydCAoT0FLIE9USS02MDEpIG9yIE1BRDE2CisJICAoT1BUaSA4MkM5MjgsIDgyQzkyOSwgODJDOTI0LzgyQzkyNSBvciA4MkM5MzApIGF1ZGlvIGludGVyZmFjZSBjaGlwLiAKKwkgIFRoZXNlIGNoaXBzIGFyZQorCSAgY3VycmVudGx5IHF1aXRlIGNvbW1vbiBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgbWFueSBuby1uYW1lIGNhcmRzCisJICBoYXZlIG9uZSBvZiB0aGVtLiBJbiBhZGRpdGlvbiB0aGUgTUFEMTYgY2hpcCBpcyB1c2VkIGluIHNvbWUKKwkgIGNhcmRzIG1hZGUgYnkga25vd24gbWFudWZhY3R1cmVycyBzdWNoIGFzIFR1cnRsZSBCZWFjaCAoVHJvcGV6KSwKKwkgIFJldmVhbCAoc29tZSBtb2RlbHMpIGFuZCBEaWFtb25kIChzb21lIHJlY2VudCBtb2RlbHMpLgorCSAgTm90ZSBPUFRpIDgyQzkyNCBhbmQgODJDOTI1IGFyZSBNQUQxNiBjb21wYXRpYmxlIG9ubHkgaW4gbm9uIFBuUAorCSAgbW9kZSAoanVtcGVyIHNlbGVjdGFibGUgb24gbWFueSBjYXJkcykuCisgICJTdXBwb3J0IGZvciBUQiBNYXVpIgorCS0gVGhpcyBlbmFibGVzIFRCIE1hdWkgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIFdvcmtzIHdpdGggVEIgTWF1aQorCWFuZCBUQiBUcm9wZXogKG1heSBub3Qgd29yayB3aXRoIFRyb3BleiBQbHVzKS4KKworCitUaGVuIHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gYXNrcyBzb21lIHkvbiBxdWVzdGlvbnMgYWJvdXQgdGhlIGhpZ2hlcgorbGV2ZWwgc2VydmljZXMuIEl0J3MgcmVjb21tZW5kZWQgdG8gYW5zd2VyICd5JyB0byBlYWNoIG9mIHRoZXNlIHF1ZXN0aW9ucy4KK0Fuc3dlciAnbicgb25seSBpZiB5b3Uga25vdyB5b3Ugd2lsbCBub3QgbmVlZCB0aGUgb3B0aW9uLgorCisgICJNSURJIGludGVyZmFjZSBzdXBwb3J0IiwKKwktIEFuc3dlcmluZyAnbicgZGlzYWJsZXMgL2Rldi9taWRpIyMgZGV2aWNlcyBhbmQgYWNjZXNzIHRvIGFueQorCSAgTUlESSBwb3J0cyB1c2luZyAvZGV2L3NlcXVlbmNlciBhbmQgL2Rldi9tdXNpYy4gVGhpcyBvcHRpb24KKwkgIGFsc28gYWZmZWN0cyBhbnkgTVBVNDAxIGFuZC9vciBHZW5lcmFsIE1JREkgY29tcGF0aWJsZSBkZXZpY2VzLgorICAiRk0gc3ludGhlc2l6ZXIgKFlNMzgxMi9PUEwtMykgc3VwcG9ydCIsCisJLSBBbnN3ZXIgJ3knIGhlcmUuCisgICIvZGV2L3NlcXVlbmNlciBzdXBwb3J0IiwKKwktIEFuc3dlcmluZyAnbicgZGlzYWJsZXMgL2Rldi9zZXF1ZW5jZXIgYW5kIC9kZXYvbXVzaWMuCisKK0VudGVyaW5nIHRoZSBJL08sIElSUSBhbmQgRE1BIGNvbmZpZyBwYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciB0aGUgYWJvdmUgcXVlc3Rpb25zIHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gcHJvbXB0cyBmb3IgdGhlCitjYXJkIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIFVzdWFsbHkganVzdCBhIHNldCBvZgorSS9PIGFkZHJlc3MsIElSUSBhbmQgRE1BIG51bWJlcnMgYXJlIGFza2VkLiBXaXRoIHNvbWUgY2FyZHMgdGhlIHByb2dyYW0KK2Fza3MgZm9yIHNvbWUgZmlsZXMgdG8gYmUgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNhcmQuIEZvciBleGFtcGxlCittYW55IGNhcmRzIGhhdmUgYSBEU1AgY2hpcCBvciBtaWNyb3Byb2Nlc3NvciB3aGljaCBtdXN0IGJlIGluaXRpYWxpemVkIGJ5Citkb3dubG9hZGluZyBhIHByb2dyYW0gKG1pY3JvY29kZSkgZmlsZSB0byB0aGUgY2FyZC4KKworSW5zdHJ1Y3Rpb25zIGZvciBhbnN3ZXJpbmcgdGhlc2UgcXVlc3Rpb25zIGFyZSBnaXZlbiBpbiB0aGUgbmV4dCBzZWN0aW9uLgorCisKK0NhcmQgc3BlY2lmaWMgaW5mb3JtYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGdpdmVzIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGFib3V0IGNvbmZpZ3VyaW5nIHNvbWUgY2FyZHMuCitQbGVhc2UgcmVmZXIgbWFudWFsIG9mIHlvdXIgY2FyZCBmb3IgdmFsaWQgSS9PLCBJUlEgYW5kIERNQSBudW1iZXJzLiBVc2luZwordGhlIHNhbWUgc2V0dGluZ3Mgd2l0aCBET1MvV2luZG93cyBhbmQgTGludXggaXMgcmVjb21tZW5kZWQuIFVzaW5nCitkaWZmZXJlbnQgdmFsdWVzIGNvdWxkIGNhdXNlIHNvbWUgcHJvYmxlbXMgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbgorZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zLgorCitTb3VuZCBCbGFzdGVycyAodGhlIG9yaWdpbmFsIG9uZXMgYnkgQ3JlYXRpdmUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URSEgQ2hlY2sgaWYgeW91IGhhdmUgYSBQblAgU291bmQgQmxhc3RlciAoY2FyZHMgc29sZCBhZnRlciBzdW1tZXIgMTk5NQorICAgICAgYXJlIGFsbW9zdCBjZXJ0YWlubHkgUG5QIG9uZXMpLiBXaXRoIFBuUCBjYXJkcyB5b3Ugc2hvdWxkIHVzZSBpc2FwbnB0b29scworICAgICAgdG8gYWN0aXZhdGUgdGhlbSAoc2VlIGFib3ZlKS4KKworSXQncyBwb3NzaWJsZSB0byBjb25maWd1cmUgdGhlc2UgY2FyZHMgdG8gdXNlIGRpZmZlcmVudCBJL08sIElSUSBhbmQKK0RNQSBzZXR0aW5ncy4gU2luY2UgdGhlIHBvc3NpYmxlL2RlZmF1bHQgc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdmFyaW91cworbW9kZWxzLCB5b3UgaGF2ZSB0byBjb25zdWx0IG1hbnVhbCBvZiB5b3VyIGNhcmQgZm9yIHRoZSBwcm9wZXIgb25lcy4gSXQncworYSBnb29kIGlkZWEgdG8gdXNlIHRoZSBzYW1lIHZhbHVlcyB0aGFuIHdpdGggRE9TL1dpbmRvd3MuIFdpdGggU0IgYW5kIFNCIFBybworaXQncyB0aGUgb25seSBjaG9pY2UuIFNCMTYgaGFzIHNvZnR3YXJlIHNlbGVjdGFibGUgSVJRIGFuZCBETUEgY2hhbm5lbHMgYnV0Cit1c2luZyBkaWZmZXJlbnQgdmFsdWVzIHdpdGggRE9TIGFuZCBMaW51eCBpcyBsaWtlbHkgdG8gY2F1c2UgdHJvdWJsZXMuIFRoZQorRE9TIGRyaXZlciBpcyBub3QgYWJsZSB0byByZXNldCB0aGUgY2FyZCBwcm9wZXJseSBhZnRlciB3YXJtIGJvb3QgZnJvbSBMaW51eAoraWYgTGludXggaGFzIHVzZWQgZGlmZmVyZW50IElSUSBvciBETUEgdmFsdWVzLgorCitUaGUgb3JpZ2luYWwgKHN0ZWFtKSBTb3VuZCBCbGFzdGVyICh2ZXJzaW9ucyAxLnggYW5kIDIueCkgdXNlIGFsd2F5cworRE1BMS4gVGhlcmUgaXMgbm8gd2F5IHRvIGNoYW5nZSBpdC4KKworVGhlIFNCMTYgbmVlZHMgdHdvIERNQSBjaGFubmVscy4gQSA4IGJpdCBvbmUgKDEgb3IgMykgaXMgcmVxdWlyZWQgZm9yCis4IGJpdCBvcGVyYXRpb24gYW5kIGEgMTYgYml0IG9uZSAoNSwgNiBvciA3KSBmb3IgdGhlIDE2IGJpdCBtb2RlLiBJbiB0aGVvcnkKK2l0J3MgcG9zc2libGUgdG8gdXNlIGp1c3Qgb25lICg4IGJpdCkgRE1BIGNoYW5uZWwgYnkgYW5zd2VyaW5nIHRoZSA4IGJpdAorb25lIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbSBhc2tzIGZvciB0aGUgMTYgYml0IG9uZS4gVGhpcyBtYXkgd29yaworaW4gc29tZSBzeXN0ZW1zIGJ1dCBpcyBsaWtlbHkgdG8gY2F1c2UgdGVycmlibGUgbm9pc2Ugb24gc29tZSBvdGhlciBzeXN0ZW1zLgorCitJdCdzIHBvc3NpYmxlIHRvIHVzZSB0d28gU0IxNi8zMi82NCBhdCB0aGUgc2FtZSB0aW1lLiBUbyBkbyB0aGlzIHlvdSBzaG91bGQKK2ZpcnN0IGNvbmZpZ3VyZSBPU1MvRnJlZSBmb3Igb25lIGNhcmQuIFRoZW4gZWRpdCBsb2NhbC5oIG1hbnVhbGx5IGFuZCBkZWZpbmUKK1NCMl9CQVNFLCBTQjJfSVJRLCBTQjJfRE1BIGFuZCBTQjJfRE1BMiBmb3IgdGhlIHNlY29uZCBvbmUuIFlvdSBjYW4ndCBnZXQKK3RoZSBPUEwzLCBNSURJIGFuZCBFTVU4MDAwIGRldmljZXMgb2YgdGhlIHNlY29uZCBjYXJkIHRvIHdvcmsuIElmIHlvdSBhcmUKK2dvaW5nIHRvIHVzZSB0d28gUG5QIFNvdW5kIEJsYXN0ZXJzLCBlbnN1cmUgdGhhdCB0aGV5IGFyZSBvZiBkaWZmZXJlbnQgbW9kZWwKK2FuZCBoYXZlIGRpZmZlcmVudCBQblAgSURzLiBUaGVyZSBpcyBubyB3YXkgdG8gZ2V0IHR3byBjYXJkcyB3aXRoIHRoZSBzYW1lCitjYXJkIElEIGFuZCBzZXJpYWwgbnVtYmVyIHRvIHdvcmsuIFRoZSBlYXNpZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRyeWluZyAKK2lmIGlzYXBucHRvb2xzIGNhbiBzZWUgYm90aCBjYXJkcyBvciBqdXN0IG9uZS4KKworTk9URSEJRG9uJ3QgZW5hYmxlIHRoZSBTTSBHYW1lcyBvcHRpb24gKGFza2VkIGJ5IHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0pCisJaWYgeW91IGFyZSBub3QgMTAxJSBzdXJlIHRoYXQgeW91ciBjYXJkIGlzIGEgTG9naXRlY2ggU291bmRtYW4gR2FtZXMKKwkobm90IGEgU00gV2F2ZSBvciBTTTE2KS4KKworU0IgQ2xvbmVzCistLS0tLS0tLS0KKworRmlyc3Qgb2YgYWxsOiBUaGVyZSBhcmUgbm8gU0IxNiBjbG9uZXMuIFRoZXJlIGFyZSBTQiBQcm8gY2xvbmVzIHdpdGggYQorMTYgYml0IG1vZGUgd2hpY2ggaXMgbm90IFNCMTYgY29tcGF0aWJsZS4gVGhlIG1vc3QgbGlrZWx5IGFsdGVybmF0aXZlIGlzIHRoYXQKK3RoZSAxNiBiaXQgbW9kZSBtZWFucyBNU1MvV1NTLgorCitUaGVyZSBhcmUganVzdCBhIGZldyBmdWxseSAxMDAlIGhhcmR3YXJlIFNCIG9yIFNCIFBybyBjb21wYXRpYmxlIGNhcmRzLgorSSBrbm93IGp1c3QgVGh1bmRlcmJvYXJkIGFuZCBTTSBHYW1lcy4gT3RoZXIgY2FyZHMgcmVxdWlyZSBzb21lIGtpbmQgb2YKK2hhcmR3YXJlIGluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGV5IGJlY29tZSBTQiBjb21wYXRpYmxlLiBDaGVjayBpZiB5b3VyIGNhcmQKK3dhcyBsaXN0ZWQgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUuIEluIHRoaXMgY2FzZSB5b3Ugc2hvdWxkIGZvbGxvdworaW5zdHJ1Y3Rpb25zIGZvciB5b3VyIGNhcmQgbGF0ZXIgaW4gdGhpcyBmaWxlLgorCitGb3Igb3RoZXIgbm90IGZ1bGx5IFNCIGNsb25lcyB5b3UgbWF5IHRyeSBpbml0aWFsaXphdGlvbiB1c2luZyBET1MgaW4KK3RoZSBmb2xsb3dpbmcgd2F5OgorCisJLSBCb290IERPUyBzbyB0aGF0IHRoZSBjYXJkIHNwZWNpZmljIGRyaXZlciBnZXRzIHJ1bi4KKwktIEhpdCBjdHJsLWFsdC1kZWwgKG9yIHVzZSBsb2FkbGluKSB0byBib290IExpbnV4LiBEb24ndAorCSAgc3dpdGNoIG9mZiBwb3dlciBvciBwcmVzcyB0aGUgcmVzZXQgYnV0dG9uLgorCS0gSWYgeW91IHVzZSB0aGUgc2FtZSBJL08sIElSUSBhbmQgRE1BIHNldHRpbmdzIGluIExpbnV4LCB0aGUKKwkgIGNhcmQgc2hvdWxkIHdvcmsuCisKK0lmIHlvdXIgY2FyZCBpcyBib3RoIFNCIGFuZCBNU1MgY29tcGF0aWJsZSwgSSByZWNvbW1lbmQgdXNpbmcgdGhlIE1TUyBtb2RlLgorTW9zdCBjYXJkcyBvZiB0aGlzIGtpbmQgYXJlIG5vdCBhYmxlIHRvIHdvcmsgaW4gdGhlIFNCIGFuZCB0aGUgTVNTIG1vZGUgCitzaW11bHRhbmVvdXNseS4gVXNpbmcgdGhlIE1TUyBtb2RlIHByb3ZpZGVzIDE2IGJpdCByZWNvcmRpbmcgYW5kIHBsYXliYWNrLgorCitQcm9BdWRpb1NwZWN0cnVtIDE2IGFuZCBjb21wYXRpYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUEFTMTYgaGFzIGEgU0IgZW11bGF0aW9uIGNoaXAgd2hpY2ggY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgbmF0aXZlCisoMTYgYml0KSBtb2RlIG9mIHRoZSBjYXJkLiBUbyBlbmFibGUgdGhpcyBlbXVsYXRpb24geW91IHNob3VsZCBjb25maWd1cmUgCit0aGUgZHJpdmVyIHRvIGhhdmUgU0Igc3VwcG9ydCB0b28gKHRoaXMgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSB2ZXJzaW9uCiszLjUtYmV0YTkgb2YgdGhpcyBkcml2ZXIpLgorCitXaXRoIGN1cnJlbnQgZHJpdmVyIHZlcnNpb25zIGl0J3MgYWxzbyBwb3NzaWJsZSB0byB1c2UgUEFTMTYgdG9nZXRoZXIgd2l0aCAKK2Fub3RoZXIgU0IgY29tcGF0aWJsZSBjYXJkLiBJbiB0aGlzIGNhc2UgeW91IHNob3VsZCBjb25maWd1cmUgU0Igc3VwcG9ydAorZm9yIHRoZSBvdGhlciBjYXJkIGFuZCB0byBkaXNhYmxlIHRoZSBTQiBlbXVsYXRpb24gb2YgUEFTMTYgKHRoZXJlIGlzIGEKK3NlcGFyYXRlIHF1ZXN0aW9ucyBhYm91dCB0aGlzKS4KKworV2l0aCBQQVMxNiB5b3UgY2FuIHVzZSB0d28gYXVkaW8gZGV2aWNlIGZpbGVzIGF0IHRoZSBzYW1lIHRpbWUuIC9kZXYvZHNwIChhbmQKKy9kZXYvYXVkaW8pIGlzIGNvbm5lY3RlZCB0byB0aGUgOC8xNiBiaXQgbmF0aXZlIGNvZGVjIGFuZCB0aGUgL2Rldi9kc3AxIChhbmQKKy9kZXYvYXVkaW8xKSBpcyBjb25uZWN0ZWQgdG8gdGhlIFNCIGVtdWxhdGlvbiAoOCBiaXQgbW9ubyBvbmx5KS4KKworR3JhdmlzIFVsdHJhc291bmQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBtYW55IGRpZmZlcmVudCByZXZpc2lvbnMgb2YgdGhlIFVsdHJhc291bmQgY2FyZCAoR1VTKS4gVGhlCitlYXJsaWVzdCBvbmVzIChwcmUgMy43KSBkb24ndCBoYXZlIGEgaGFyZHdhcmUgbWl4ZXIuIFdpdGggdGhlc2UgY2FyZHMKK3RoZSBkcml2ZXIgdXNlcyBhIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3Igc3ludGggYW5kIHBjbSBwbGF5YmFja3MuIEl0J3MKK2Fsc28gcG9zc2libGUgdG8gc3dpdGNoIHNvbWUgb2YgdGhlIGlucHV0cyAobGluZSBpbiwgbWljKSBvZmYgYnkgc2V0dGluZworbWl4ZXIgdm9sdW1lIG9mIHRoZSBjaGFubmVsIGxldmVsIGJlbG93IDEwJS4gRm9yIHJlY29yZGluZyB5b3UgaGF2ZQordG8gc2VsZWN0IHRoZSBjaGFubmVsIGFzIGEgcmVjb3JkaW5nIHNvdXJjZSBhbmQgdG8gdXNlIHZvbHVtZSBhYm92ZSAxMCUuCisKK0dVUyAzLjcgaGFzIGEgaGFyZHdhcmUgbWl4ZXIuCisKK0dVUyBNQVggYW5kIHRoZSAxNiBiaXQgc2FtcGxpbmcgZGF1Z2h0ZXJjYXJkIGhhdmUgYSBDUzQyMzEgY29kZWMgY2hpcCB3aGljaCAKK2Fsc28gY29udGFpbnMgYSBtaXhlci4KKworQ29uZmlndXJpbmcgR1VTIGlzIHNpbXBsZS4gSnVzdCBlbmFibGUgdGhlIEdVUyBzdXBwb3J0IGFuZCBHVVMgTUFYIG9yCit0aGUgMTYgYml0IGRhdWdodGVyY2FyZCBpZiB5b3UgaGF2ZSB0aGVtLiBOb3RlIHRoYXQgZW5hYmxpbmcgdGhlIGRhdWdodGVyCitjYXJkIGRpc2FibGVzIEdVUyBNQVggZHJpdmVyLgorCitOT1RFIGZvciBvd25lcnMgb2YgdGhlIDE2IGJpdCBkYXVnaHRlcmNhcmQ6IEJ5IGRlZmF1bHQgdGhlIGRhdWdodGVyY2FyZAordXNlcyAvZGV2L2RzcCAoYW5kIC9kZXYvYXVkaW8pLiBDb21tYW5kICJsbiAtc2YgL2Rldi9kc3AxIC9kZXYvZHNwIgorc2VsZWN0cyB0aGUgZGF1Z2h0ZXIgY2FyZCBhcyB0aGUgZGVmYXVsdCBkZXZpY2UuCisKK1dpdGgganVzdCB0aGUgc3RhbmRhcmQgR1VTIGVuYWJsZWQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbSBwcm9tcHRzCitmb3IgdGhlIEkvTywgSVJRIGFuZCBETUEgbnVtYmVycyBmb3IgdGhlIGNhcmQuIFVzZSB0aGUgc2FtZSB2YWx1ZXMgdGhhbgord2l0aCBET1MuCisKK1dpdGggdGhlIGRhdWdodGVyIGNhcmQgb3B0aW9uIGVuYWJsZWQgeW91IHdpbGwgYmUgcHJvbXB0ZWQgZm9yIHRoZSBJL08sCitJUlEgYW5kIERNQSBudW1iZXJzIGZvciB0aGUgZGF1Z2h0ZXIgY2FyZC4gWW91IGhhdmUgdG8gdXNlIGRpZmZlcmVudCBJL08KK2FuZCBETUEgdmFsdWVzIHRoYW4gZm9yIHRoZSBzdGFuZGFyZCBHVVMuIFRoZSBkYXVnaHRlciBjYXJkIHBlcm1pdHMKK3NpbXVsdGFuZW91cyByZWNvcmRpbmcgYW5kIHBsYXliYWNrLiBVc2UgL2Rldi9kc3AgKHRoZSBkYXVnaHRlcmNhcmQpIGZvcgorcmVjb3JkaW5nIGFuZCAvZGV2L2RzcDEgKEdVUyBHRjEpIGZvciBwbGF5YmFjay4KKworR1VTIE1BWCB1c2VzIHRoZSBzYW1lIEkvTyBhZGRyZXNzIGFuZCBJUlEgc2V0dGluZ3MgdGhhbiB0aGUgb3JpZ2luYWwgR1VTCisoR1VTIE1BWCA9IEdVUyArIGEgQ1M0MjMxIGNvZGVjKS4gSW4gYWRkaXRpb24gYW4gZXh0cmEgRE1BIGNoYW5uZWwgbWF5IGJlIHVzZWQuCitVc2luZyB0d28gRE1BIGNoYW5uZWxzIHBlcm1pdHMgc2ltdWx0YW5lb3VzIHBsYXliYWNrIHVzaW5nIHR3byBkZXZpY2VzCisoZGV2L2RzcDAgYW5kIC9kZXYvZHNwMSkuIFRoZSBzZWNvbmQgRE1BIGNoYW5uZWwgaXMgcmVxdWlyZWQgZm9yCitmdWxsIGR1cGxleCBhdWRpby4KK1RvIGVuYWJsZSB0aGUgc2Vjb25kIERNQSBjaGFubmVscywgZ2l2ZSBhIHZhbGlkIERNQSBjaGFubmVsIHdoZW4gdGhlIGNvbmZpZworcHJvZ3JhbSBhc2tzIGZvciB0aGUgR1VTIE1BWCBETUEgKGVudGVyaW5nIC0xIGRpc2FibGVzIHRoZSBzZWNvbmQgRE1BKS4KK1VzaW5nIDE2IGJpdCBETUEgY2hhbm5lbHMgKDUsNiBvciA3KSBpcyByZWNvbW1lbmRlZC4KKworSWYgeW91IGhhdmUgcHJvYmxlbXMgaW4gcmVjb3JkaW5nIHdpdGggR1VTIE1BWCwgeW91IGNvdWxkIHRyeSB0byB1c2UKK2p1c3Qgb25lIDggYml0IERNQSBjaGFubmVsLiBSZWNvcmRpbmcgd2lsbCBub3Qgd29yayB3aXRoIG9uZSBETUEKK2NoYW5uZWwgaWYgaXQncyBhIDE2IGJpdCBvbmUuCisKK01pY3JvcGhvbmUgaW5wdXQgb2YgR1VTIE1BWCBpcyBjb25uZWN0ZWQgdG8gbWl4ZXIgaW4gbGl0dGxlIGJpdCBub25zdGFuZGFyZAord2F5LiBUaGVyZSBpcyBhY3R1YWxseSB0d28gbWljcm9waG9uZSB2b2x1bWUgY29udHJvbHMuIE5vcm1hbCAibWljIiBjb250cm9scworb25seSByZWNvcmRpbmcgbGV2ZWwuIE1peGVyIGNvbnRyb2wgInNwZWFrZXIiIGlzIHVzZWQgdG8gY29udHJvbCB2b2x1bWUgb2YKK21pY3JvcGhvbmUgc2lnbmFsIGNvbm5lY3RlZCBkaXJlY3RseSB0byBsaW5lL3NwZWFrZXIgb3V0LiBTbyBqdXN0IGRlY3JlYXNlCit2b2x1bWUgb2YgInNwZWFrZXIiIGlmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggbWljcm9waG9uZSBmZWVkYmFjay4KKworR1VTIEFDRSB3b3JrcyB0b28gYnV0IGFueSBhdHRlbXB0IHRvIHJlY29yZCBvciB0byB1c2UgdGhlIE1JREkgcG9ydAord2lsbCBmYWlsLgorCitHVVMgUG5QICh3aXRoIFJBTSkgaXMgcGFydGlhbGx5IHN1cHBvcnRlZCBidXQgaXQgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgdXNpbmcKK0RPUyBvciBpc2FwbnB0b29scyBiZWZvcmUgc3RhcnRpbmcgdGhlIGRyaXZlci4KKworTVBVNDAxIGFuZCBXaW5kb3dzIFNvdW5kIFN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZ2Fpbi4gRG9uJ3QgZW5hYmxlIHRoZXNlIG9wdGlvbnMgaW4gY2FzZSB5b3VyIGNhcmQgaXMgbGlzdGVkCitzb21ld2hlcmUgZWxzZSBpbiB0aGlzIGZpbGUuCisKK0NvbmZpZ3VyaW5nIHRoZXNlIGNhcmRzIGlzIG9idmlvdXMgKG9yIGl0IHNob3VsZCBiZSkuIFdpdGggTVNTCit5b3Ugc2hvdWxkIHByb2JhYmx5IGVuYWJsZSB0aGUgT1BMMyBzeW50aCBhbHNvIHNpbmNlCittb3N0IE1TUyBjb21wYXRpYmxlIGNhcmRzIGhhdmUgaXQuIEhvd2V2ZXIgY2hlY2sgdGhhdCB0aGlzIGlzIHRydWUKK2JlZm9yZSBlbmFibGluZyBPUEwzLgorCitTb3VuZCBkcml2ZXIgc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSBNUFU0MDEgY29tcGF0aWJsZSBjYXJkcyBhdCB0aGUgc2FtZSB0aW1lCitidXQgdGhlIGNvbmZpZyBwcm9ncmFtIGFza3MgY29uZmlnIGluZm8gZm9yIGp1c3QgdGhlIGZpcnN0IG9mIHRoZW0uCitBZGRpbmcgdGhlIHNlY29uZCBvciB0aGlyZCBNUFUgaW50ZXJmYWNlcyBtdXN0IGJlIGRvbmUgbWFudWFsbHkgYnkKK2VkaXRpbmcgc291bmQvbG9jYWwuaCAoYWZ0ZXIgcnVubmluZyB0aGUgY29uZmlnIHByb2dyYW0pLiBBZGQgZGVmaW5lcyBmb3IKK01QVTJfQkFTRSAmIE1QVTJfSVJRIChhbmQgTVBVM19CQVNFICYgTVBVM19JUlEpIHRvIHRoZSBmaWxlLgorCitDQVVUSU9OIQorCitUaGUgZGVmYXVsdCBJL08gYmFzZSBvZiBBZGFwdGVjIEFIQS0xNTQyIFNDU0kgY29udHJvbGxlciBpcyAweDMzMCB3aGljaAoraXMgYWxzbyB0aGUgZGVmYXVsdCBvZiB0aGUgTVBVNDAxIGRyaXZlci4gRG9uJ3QgY29uZmlndXJlIHRoZSBzb3VuZCBkcml2ZXIgdG8KK3VzZSAweDMzMCBhcyB0aGUgTVBVNDAxIGJhc2UgaWYgeW91IGhhdmUgYSBBSEExNTQyLiBUaGUga2VybmVsIHdpbGwgbm90IGJvb3QKK2lmIHlvdSBtYWtlIHRoaXMgbWlzdGFrZS4KKworUFNTCistLS0KKworRXZlbiB0aGUgUFNTIGNhcmRzIGFyZSBjb21wYXRpYmxlIHdpdGggU0IsIE1TUyBhbmQgTVBVNDAxLCB5b3UgbXVzdCBub3QKK2VuYWJsZSB0aGVzZSBvcHRpb25zIHdoZW4gY29uZmlndXJpbmcgdGhlIGRyaXZlci4gVGhlIGNvbmZpZ3VyYXRpb24KK3Byb2dyYW0gaGFuZGxlcyB0aGVzZSBvcHRpb25zIGl0c2VsZi4gKFlvdSBtYXkgdXNlIHRoZSBTQiwgTVBVIGFuZCBNU1Mgb3B0aW9ucwordG9nZXRoZXIgd2l0aCBQU1MgaWYgeW91IGhhdmUgYW5vdGhlciBjYXJkIG9uIHRoZSBzeXN0ZW0pLgorCitUaGUgUFNTIGRyaXZlciBlbmFibGVzIE1TUyBhbmQgTVBVNDAxIG1vZGVzIG9mIHRoZSBjYXJkLiBTQiBpcyBub3QgZW5hYmxlZCAKK3NpbmNlIGl0IGRvZXNuJ3Qgd29yayBjb25jdXJyZW50bHkgd2l0aCBNU1MuIFRoZSBkcml2ZXIgbG9hZHMgYWxzbyBhCitEU1AgYWxnb3JpdGhtIHdoaWNoIGlzIHVzZWQgdG8gZm9yIHRoZSBnZW5lcmFsIE1JREkgZW11bGF0aW9uLiBUaGUKK2FsZ29yaXRobSBmaWxlICgubGQpIGlzIHJlYWQgYnkgdGhlIGNvbmZpZyBwcm9ncmFtIGFuZCB3cml0dGVuIHRvIGEKK2ZpbGUgaW5jbHVkZWQgd2hlbiB0aGUgcHNzLmMgaXMgY29tcGlsZWQuIEZvciB0aGlzIHJlYXNvbiB0aGUgY29uZmlnCitwcm9ncmFtIGFza3MgaWYgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhlIGZpbGUuIFVzZSB0aGUgZ2VubWlkaS5sZCBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoZSBET1MvV2luZG93cyBkcml2ZXJzIG9mIHRoZSBjYXJkIChkb24ndCB1c2UgdGhlIG10MzIubGQpLgorV2l0aCBzb21lIGNhcmRzIHRoZSBmaWxlIGlzIGNhbGxlZCAnc3ludGgubGQnLiBZb3UgbXVzdCBoYXZlIGFjY2VzcyB0bwordGhlIGZpbGUgd2hlbiBjb25maWd1cmluZyB0aGUgZHJpdmVyLiBUaGUgZWFzaWVzdCB3YXkgaXMgdG8gbW91bnQgdGhlIERPUworcGFydGl0aW9uIGNvbnRhaW5pbmcgdGhlIGZpbGUgd2l0aCBMaW51eC4gCisKK0l0J3MgcG9zc2libGUgdG8gbG9hZCB5b3VyIG93biBEU1AgYWxnb3JpdGhtcyBhbmQgcnVuIHRoZW0gd2l0aCB0aGUgY2FyZC4KK0xvb2sgYXQgdGhlIGRpcmVjdG9yeSBwc3NfdGVzdCBvZiBzbmQtdXRpbC0zLjAudGFyLmd6IGZvciBtb3JlIGluZm8uCisKK0F1ZGlvVHJpeCBQcm8KKy0tLS0tLS0tLS0tLS0KKworWW91IGhhdmUgdG8gZW5hYmxlIHRoZSBPUEwzIGFuZCBTQiAobm90IFNCIFBybyBvciBTQjE2KSBkcml2ZXJzIGluIGFkZGl0aW9uCit0byB0aGUgbmF0aXZlIEF1ZGlvVHJpeCBkcml2ZXIuIERvbid0IGVuYWJsZSBNU1Mgb3IgTVBVIGRyaXZlcnMuCisKK0NvbmZpZ3VyaW5nIEFUUCBpcyBsaXR0bGUgYml0IHRyaWNreSBzaW5jZSBpdCB1c2VzIHNvIG1hbnkgSS9PLCBJUlEgYW5kCitETUEgbnVtYmVycy4gVXNpbmcgdGhlIHNhbWUgdmFsdWVzIHRoYW4gd2l0aCBET1MvV2luIGlzIGEgZ29vZCBpZGVhLiBEb24ndAorYXR0ZW1wdCB0byB1c2UgdGhlIHNhbWUgSVJRIG9yIERNQSBjaGFubmVscyB0d2ljZS4KKworVGhlIFNCIG1vZGUgb2YgQVRQIGlzIGltcGxlbWVudGVkIHNvIHRoZSBBVFAgZHJpdmVyIGp1c3QgZW5hYmxlcyBTQgoraW4gdGhlIHByb3BlciBhZGRyZXNzLiBUaGUgU0IgZHJpdmVyIGhhbmRsZXMgdGhlIHJlc3QuIFlvdSBoYXZlIHRvIGNvbmZpZ3VyZQorYm90aCB0aGUgU0IgZHJpdmVyIGFuZCB0aGUgU0IgbW9kZSBvZiBBVFAgdG8gdXNlIHRoZSBzYW1lIElSUSwgRE1BIGFuZCBJL08KK3NldHRpbmdzLgorCitBbHNvIHRoZSBBVFAgaGFzIGEgbWljcm9jb250cm9sbGVyIGZvciB0aGUgR2VuZXJhbCBNSURJIGVtdWxhdGlvbiAoT1BMNCkuCitGb3IgdGhpcyByZWFzb24gdGhlIGRyaXZlciBhc2tzIGZvciB0aGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyB0aGUKK21pY3JvY29kZSAoVFJYUFJPLkhFWCkuIFRoaXMgZmlsZSBpcyB1c3VhbGx5IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeQord2hlcmUgdGhlIERPUyBkcml2ZXJzIHdlcmUgaW5zdGFsbGVkLiBZb3UgbXVzdCBoYXZlIGFjY2VzcyB0byB0aGlzIGZpbGUKK3doZW4gY29uZmlndXJpbmcgdGhlIGRyaXZlci4gCisKK0lmIHlvdSBoYXZlIHRoZSBlZmZlY3RzIGRhdWdodGVyY2FyZCwgaXQgbXVzdCBiZSBpbml0aWFsaXplZCBieSBydW5uaW5nCit0aGUgc2V0ZnggcHJvZ3JhbSBvZiBzbmQtdXRpbC0zLjAudGFyLmd6IHBhY2thZ2UuIFRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQKK3doZW4gdXNpbmcgdGhlIChmdXR1cmUpIGJpbmFyeSBkaXN0cmlidXRpb24gdmVyc2lvbiBvZiB0aGUgZHJpdmVyLgorCitFbnNvbmlxIFNvdW5kU2NhcGUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFIQlUaGUgbmV3IFBuUCBTb3VuZFNjYXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBTb3VuZHNjYXBlIGNvbXBhdGlibGUKKwljYXJkcyBtYWRlIGJ5IFJldmVhbCBkb24ndCB3b3JrIHdpdGggTGludXguIFRoZXkgdXNlIG9sZGVyIHJldmlzaW9uCisJb2YgdGhlIFNvdW5kc2NhcGUgY2hpcHNldCB3aGljaCBpcyBub3QgZnVsbHkgY29tcGF0aWJsZSB3aXRoCisJbmV3ZXIgY2FyZHMgbWFkZSBieSBFbnNvbmlxLgorCitUaGUgU291bmRTY2FwZSBkcml2ZXIgaGFuZGxlcyBpbml0aWFsaXphdGlvbiBvZiBNU1MgYW5kIE1QVSBzdXBwb3J0cworaXRzZWxmIHNvIHlvdSBkb24ndCBuZWVkIHRvIGVuYWJsZSBvdGhlciBkcml2ZXJzIHRoYW4gU291bmRTY2FwZQorKGVuYWJsZSBhbHNvIHRoZSAvZGV2L2RzcCwgL2Rldi9zZXF1ZW5jZXIgYW5kIE1JREkgc3VwcG9ydHMpLgorCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCishISEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhISEhCishISEhISBOT1RFISBCZWZvcmUgdmVyc2lvbiAzLjUtYmV0YTYgdGhlcmUgV0VSRSB0d28gc2V0cyBvZiBhdWRpbyAJISEhIQorISEhISEgICAgICAgZGV2aWNlIGZpbGVzICgvZGV2L2RzcDAgYW5kIC9kZXYvZHNwMSkuIFRoZSBmaXJzdCBvbmUgV0FTICAgISEhIQorISEhISEJICAgIHVzZWQgb25seSBmb3IgY2FyZCBpbml0aWFsaXphdGlvbiBhbmQgdGhlIHNlY29uZCBmb3IgYXVkaW8gICEhISEKKyEhISEhCSAgICBwdXJwb3Nlcy4gSXQgV0FTIHJlcXVpcmVkIHRvIGNoYW5nZSAvZGV2L2RzcCAoYSBzeW1saW5rKSB0byAhISEhCishISEhIQkgICAgcG9pbnQgdG8gL2Rldi9kc3AxLgkJCQkJCSEhISEKKyEhISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhISEKKyEhISEhCSAgICBUaGlzIGlzIG5vdCByZXF1aXJlZCB3aXRoIE9TUyB2ZXJzaW9ucyAzLjUtYmV0YTYgYW5kIGxhdGVyCSEhISEKKyEhISEhCSAgICBzaW5jZSB0aGVyZSBpcyBub3cganVzdCBvbmUgYXVkaW8gZGV2aWNlIGZpbGUuIFBsZWFzZSAJISEhIQorISEhISEJICAgIGNoYW5nZSAvZGV2L2RzcCB0byBwb2ludCBiYWNrIHRvIC9kZXYvZHNwMCBpZiB5b3UgYXJlCSEhISEKKyEhISEhCSAgICB1cGdyYWRpbmcgZnJvbSBhbiBlYXJsaWVyIGRyaXZlciB2ZXJzaW9uIHVzaW5nCQkhISEhCishISEhIQkgICAgKGNkIC9kZXY7cm0gZHNwO2xuIC1zIGRzcDAgZHNwKS4JCQkJISEhIQorISEhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISEhIQorISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCitUaGUgY29uZmlndXJhdGlvbiBwcm9ncmFtIGFza3Mgb25lIERNQSBjaGFubmVsIGFuZCB0d28gaW50ZXJydXB0cy4gT25lIElSUQorYW5kIG9uZSBETUEgaXMgdXNlZCBieSB0aGUgTVNTIGNvZGVjLiBUaGUgc2Vjb25kIElSUSBpcyByZXF1aXJlZCBmb3IgdGhlCitNUFU0MDEgbW9kZSAoeW91IGhhdmUgdG8gdXNlIGRpZmZlcmVudCBJUlFzIGZvciBib3RoIHB1cnBvc2VzKS4KK1RoZXJlIHdlcmUgZWFybGllciB0d28gRE1BIGNoYW5uZWxzIGZvciBTb3VuZFNjYXBlIGJ1dCB0aGUgY3VycmVudCBkcml2ZXIKK3ZlcnNpb24gcmVxdWlyZXMganVzdCBvbmUuCisKK1RoZSBTb3VuZFNjYXBlIGNhcmQgaGFzIGEgTW90b3JvbGEgbWljcm9jb250cm9sbGVyIHdoaWNoIG11c3QgaW5pdGlhbGl6ZWQKK19hZnRlcl8gYm9vdCAodGhlIGRyaXZlciBkb2Vzbid0IGluaXRpYWxpemUgaXQgZHVyaW5nIGJvb3QpLgorVGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgYnkgcnVubmluZyB0aGUgJ3NzaW5pdCcgcHJvZ3JhbSB3aGljaCBpcworZGlzdHJpYnV0ZWQgaW4gdGhlIHNuZC11dGlsLTMuMC50YXIuZ3ogcGFja2FnZS4gWW91IGhhdmUgdG8gZWRpdCB0d28KK2RlZmluZXMgaW4gdGhlIHNzaW5pdC5jIGFuZCB0aGVuIGNvbXBpbGUgdGhlIHByb2dyYW0uIFlvdSBtYXkgcnVuIHNzaW5pdCAKK21hbnVhbGx5IChhZnRlciBlYWNoIGJvb3QpIG9yIGFkZCBpdCB0byAvZXRjL3JjLmQvcmMubG9jYWwuCisKK1RoZSBzc2luaXQgcHJvZ3JhbSBuZWVkcyB0aGUgbWljcm9jb2RlIGZpbGUgdGhhdCBjb21lcyB3aXRoIHRoZSBET1MvV2luZG93cworZHJpdmVyIG9mIHRoZSBjYXJkLiBZb3Ugd2lsbCBuZWVkIHRvIHVzZSB2ZXJzaW9uIDEuMzAuMDAgb3IgbGF0ZXIKK29mIHRoZSBtaWNyb2NvZGUgZmlsZSAoc25kc2NhcGUuY28wIG9yIHNuZHNjYXBlLmNvMSBkZXBlbmRpbmcgb24KK3lvdXIgY2FyZCBtb2RlbCkuIFRIRSBPTEQgc25kc2NhcGUuY29kIFdJTEwgTk9UIFdPUksuIElUIFdJTEwgSEFORyBZT1VSCitNQUNISU5FLiBUaGUgb25seSB3YXkgdG8gZ2V0IHRoZSBuZXcgbWljcm9jb2RlIGZpbGUgaXMgdG8gZG93bmxvYWQKK2FuZCBpbnN0YWxsIHRoZSBET1MvV2luZG93cyBkcml2ZXIgZnJvbSBmdHA6Ly9mdHAuZW5zb25pcS5jb20vcHViLgorCitUaGVuIHlvdSBoYXZlIHRvIHNlbGVjdCB0aGUgcHJvcGVyIG1pY3JvY29kZSBmaWxlIHRvIHVzZTogc291bmRzY2FwZS5jbzAKK2lzIHRoZSByaWdodCBvbmUgZm9yIG1vc3QgY2FyZHMgYW5kIHNuZHNjYXBlLmNvMSBpcyBmb3IgZmV3IChvbGRlcikgY2FyZHMKK21hZGUgYnkgUmV2ZWFsIGFuZC9vciBTcGVhLiBUaGUgZHJpdmVyIGhhcyBjYXBhYmlsaXR5IHRvIGRldGVjdCB0aGUgY2FyZAordmVyc2lvbiBkdXJpbmcgYm9vdC4gTG9vayBhdCB0aGUgYm9vdCBsb2cgbWVzc2FnZXMgaW4gL3Zhci9hZG0vbWVzc2FnZXMKK2FuZCBsb2NhdGUgdGhlIHNvdW5kIGRyaXZlciBpbml0aWFsaXphdGlvbiBtZXNzYWdlIGZvciB0aGUgU291bmRTY2FwZQorY2FyZC4gSWYgdGhlIGRyaXZlciBkaXNwbGF5cyBzdHJpbmcgPEVuc29uaXEgU291bmRzY2FwZSAob2xkKT4sIHlvdSBoYXZlCithbiBvbGQgY2FyZCBhbmQgeW91IHdpbGwgbmVlZCB0byB1c2Ugc25kc2NhcGUuY28xLiBGb3Igb3RoZXIgY2FyZHMgdXNlCitzb3VuZHNjYXBlLmNvMC4gTmV3IFNvdW5kc2NhcGUgcmV2aXNpb25zIHN1Y2ggYXMgRWxpdGUgYW5kIFBuUCB1c2UKK2NvZGUgZmlsZXMgd2l0aCBoaWdoZXIgbnVtYmVycyAoLmNvMiwgLmNvMywgZXRjLikuCisKK05PVEUhCUVuc29uaXEgU291bmRzY2FwZSBWSVZPIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggb3RoZXIgU291bmRzY2FwZSBjYXJkcy4KKwlDdXJyZW50bHkgaXQncyBwb3NzaWJsZSB0byB1c2UgaXQgaW4gTGludXggb25seSB3aXRoIE9TUy9MaW51eAorCWRyaXZlcnMuCisKK0NoZWNrIC92YXIvYWRtL21lc3NhZ2VzIGFmdGVyIHJ1bm5pbmcgc3Npbml0LiBUaGUgZHJpdmVyIHByaW50cwordGhlIGJvYXJkIHZlcnNpb24gYWZ0ZXIgZG93bmxvYWRpbmcgdGhlIG1pY3JvY29kZSBmaWxlLiBUaGF0IHZlcnNpb24KK251bWJlciBtdXN0IG1hdGNoIHRoZSBudW1iZXIgaW4gdGhlIG5hbWUgb2YgdGhlIG1pY3JvY29kZSBmaWxlIChleHRlbnNpb24pLgorCitSdW5uaW5nIHNzaW5pdCB3aXRoIGEgd3JvbmcgdmVyc2lvbiBvZiB0aGUgc25kc2NhcGUuY28/IGZpbGUgaXMgbm90CitkYW5nZXJvdXMgYXMgbG9uZyBhcyB5b3UgZG9uJ3QgdHJ5IHRvIHVzZSBhIGZpbGUgY2FsbGVkIHNuZHNjYXBlLmNvZC4KK0lmIHlvdSBoYXZlIGluaXRpYWxpemVkIHRoZSBjYXJkIHVzaW5nIGEgd3JvbmcgbWljcm9jb2RlIGZpbGUgKHNvdW5kcworYXJlIHRlcnJpYmxlKSwganVzdCBtb2RpZnkgc3Npbml0LmMgdG8gdXNlIGFub3RoZXIgbWljcm9jb2RlIGZpbGUgYW5kIHRyeQorYWdhaW4uIEl0J3MgcG9zc2libGUgdG8gdXNlIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiBzbmRzY2FwZS5jb1swMV0gYnV0IGl0CittYXkgc291bmQgd2VpcmQuCisKK01BRDE2IChQcm8pIGFuZCBNb3phcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IG5lZWQgdG8gZW5hYmxlIGp1c3QgdGhlIE1BRDE2IC9Nb3phcnQgc3VwcG9ydCB3aGVuIGNvbmZpZ3VyaW5nCit0aGUgZHJpdmVyLiBfRG9uJ3RfIGVuYWJsZSBTQiwgTVBVNDAxIG9yIE1TUy4gSG93ZXZlciB5b3Ugd2lsbCBuZWVkIHRoZQorL2Rldi9hdWRpbywgL2Rldi9zZXF1ZW5jZXIgYW5kIE1JREkgc3VwcG9ydHMuCisKK01vemFydCBhbmQgT1BUaSA4MkM5MjggKHRoZSBvcmlnaW5hbCBNQUQxNikgY2hpcHMgZG9uJ3Qgc3VwcG9ydAorTVBVNDAxIG1vZGUgc28gZW50ZXIganVzdCAwIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbSBhc2tzIHRoZQorTVBVL01JREkgSS9PIGJhc2UuIFRoZSBNQUQxNiBQcm8gKE9QVGkgODJDOTI5KSBhbmQgODJDOTMwIGNoaXBzIGhhdmUgTVBVNDAxCittb2RlLgorCitUQiBUcm9wZXogaXMgYmFzZWQgb24gdGhlIDgyQzkyOSBjaGlwLiBJdCBoYXMgdHdvIE1JREkgcG9ydHMuCitUaGUgb25lIGNvbm5lY3RlZCB0byB0aGUgTUFEMTYgY2hpcCBpcyB0aGUgc2Vjb25kIG9uZSAodGhlcmUgaXMgYSBzZWNvbmQKK01JREkgY29ubmVjdG9yL3BpbnMgc29tZXdoZXJlPz8pLiBJZiB5b3UgaGF2ZSBub3QgY29ubmVjdGVkIHRoZSBzZWNvbmQgTUlESQorcG9ydCwganVzdCBkaXNhYmxlIHRoZSBNSURJIHBvcnQgb2YgTUFEMTYuIFRoZSAnTWF1aScgY29tcGF0aWJsZSBzeW50aCBvZgorVHJvcGV6IGlzIGp1bXBlciBjb25maWd1cmFibGUgYW5kIG5vdCBjb25uZWN0ZWQgdG8gdGhlIE1BRDE2IGNoaXAgKHRoZQorTWF1aSBkcml2ZXIgY2FuIGJlIHVzZWQgd2l0aCBpdCkuCisKK1NvbWUgTUFEMTYgYmFzZWQgY2FyZHMgbWF5IGNhdXNlIGZlZWRiYWNrLCB3aGlzdGxlIG9yIHRlcnJpYmxlIG5vaXNlIGlmIHRoZQorbGluZTMgbWl4ZXIgY2hhbm5lbCBpcyB0dXJuZWQgdG9vIGhpZ2guIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIFNodXR0bGUKK1NvdW5kIFN5c3RlbS4gQ3VycmVudCBkcml2ZXIgdmVyc2lvbnMgc2V0IHZvbHVtZSBvZiBsaW5lMyBsb3cgZW5vdWdoIHNvCit0aGlzIHNob3VsZCBub3QgYmUgYSBwcm9ibGVtLgorCitJZiB5b3UgaGF2ZSBhIE1BRDE2IGNhcmQgd2hpY2ggaGF2ZSBhbiBPUEw0IChGTSArIFdhdmUgdGFibGUpIHN5bnRoZXNpemVyCitjaGlwIChfbm90XyBhbiBPUEwzKSwgeW91IGhhdmUgdG8gYXBwZW5kIGEgbGluZSBjb250YWluaW5nICNkZWZpbmUgTUFEMTZfT1BMNAordG8gdGhlIGZpbGUgbGludXgvZHJpdmVycy9zb3VuZC9sb2NhbC5oIChhZnRlciBydW5uaW5nIG1ha2UgY29uZmlnKS4KKworTUFEMTYgY2FyZHMgaGF2aW5nIGEgQ1M0MjMxIGNvZGVjIHN1cHBvcnQgZnVsbCBkdXBsZXggbW9kZS4gVGhpcyBtb2RlCitjYW4gYmUgZW5hYmxlZCBieSBjb25maWd1cmluZyB0aGUgY2FyZCB0byB1c2UgdHdvIERNQSBjaGFubmVscy4gUG9zc2libGUKK0RNQSBjaGFubmVsIHBhaXJzIGFyZTogMCYxLCAxJjAgYW5kIDMmMC4KKworTk9URSEgQ2FyZHMgaGF2aW5nIGFuIE9QVGkgODJDOTI0LzgyQzkyNSBjaGlwIHdvcmsgd2l0aCBPU1MvRnJlZSBvbmx5IGluCitub24tUG5QIG1vZGUgKHVzdWFsbHkganVtcGVyIHNlbGVjdGFibGUpLiBUaGUgUG5QIG1vZGUgaXMgc3VwcG9ydGVkIG9ubHkKK2J5IE9TUy9MaW51eC4KKworTVYgSmF6eiAoUHJvU29uaWMpCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEphenoxNiBkcml2ZXIgaXMganVzdCBhIGhhY2sgbWFkZSB0byB0aGUgU0IgUHJvIGRyaXZlci4gSG93ZXZlciBpdCB3b3JrcworZmFpcmx5IHdlbGwuIFlvdSBoYXZlIHRvIGVuYWJsZSBTQiwgU0IgUHJvIChfbm90XyBTQjE2KSBhbmQgTVBVNDAxIHN1cHBvcnRzCit3aGVuIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIuIFRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gYXNrcyBsYXRlciBpZiB5b3UKK3dhbnQgc3VwcG9ydCBmb3IgTVYgSmF6ejE2IGJhc2VkIGNhcmRzIChhZnRlciBhc2tpbmcgU0IgYmFzZSBhZGRyZXNzKS4gQW5zd2VyCisneScgaGVyZSBhbmQgdGhlIGRyaXZlciBhc2tzIHRoZSBzZWNvbmQgKDE2IGJpdCkgRE1BIGNoYW5uZWwuCisKK1RoZSBKYXp6MTYgZHJpdmVyIHVzZXMgdGhlIE1QVTQwMSBkcml2ZXIgaW4gYSB3YXkgd2hpY2ggd2lsbCBjYXVzZQorcHJvYmxlbXMgaWYgeW91IGhhdmUgYW5vdGhlciBNUFU0MDEgY29tcGF0aWJsZSBjYXJkLiBJbiB0aGlzIGNhc2UgeW91IG11c3QKK2dpdmUgYWRkcmVzcyBvZiB0aGUgSmF6ejE2IGJhc2VkIE1QVTQwMSBpbnRlcmZhY2Ugd2hlbiB0aGUgY29uZmlnCitwcm9ncmFtIHByb21wdHMgZm9yIHRoZSBNUFU0MDEgaW5mb3JtYXRpb24uIFRoZW4gbG9vayBhdCB0aGUgTVBVNDAxCitzcGVjaWZpYyBzZWN0aW9uIGZvciBpbnN0cnVjdGlvbnMgYWJvdXQgY29uZmlndXJpbmcgbW9yZSB0aGFuIG9uZSBNUFU0MDEgY2FyZHMuCisKK0xvZ2l0ZWNoIFNvdW5kbWFuIFdhdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVhZCB0aGUgYWJvdmUgTVYgSmF6eiBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgZmlyc3QuCisKK1RoZSBMb2dpdGVjaCBTb3VuZE1hbiBXYXZlIChkb24ndCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgU00xNiBvciBTTSBHYW1lcykgaXMKK2EgTVYgSmF6eiBiYXNlZCBjYXJkIHdoaWNoIGhhcyBhbiBhZGRpdGlvbmFsIE9QTDQgYmFzZWQgd2F2ZSB0YWJsZQorc3ludGhlc2l6ZXIuIFRoZSBPUEw0IGNoaXAgaXMgaGFuZGxlZCBieSBhbiBvbiBib2FyZCBtaWNyb2NvbnRyb2xsZXIKK3doaWNoIG11c3QgYmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QuIFRoZSBjb25maWcgcHJvZ3JhbSBhc2tzIGlmCit5b3UgaGF2ZSBhIFNNIFdhdmUgaW1tZWRpYXRlbHkgYWZ0ZXIgYXNraW5nIHRoZSBzZWNvbmQgRE1BIGNoYW5uZWwgb2YgamF6ejE2LgorSWYgeW91IGFuc3dlciAneScsIHRoZSBjb25maWcgcHJvZ3JhbSB3aWxsIGFzayBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcKK2NvZGUgdG8gYmUgbG9hZGVkIHRvIHRoZSBtaWNyb2NvbnRyb2xsZXIuIFRoZSBmaWxlIGlzIHVzdWFsbHkgY2FsbGVkCitNSURJMDAwMS5CSU4gYW5kIGl0J3MgbG9jYXRlZCBpbiB0aGUgRE9TL1dpbmRvd3MgZHJpdmVyIGRpcmVjdG9yeS4gVGhlIGZpbGUKK21heSBhbHNvIGJlIGNhbGxlZCBhcyBUU1VOQU1JLkJJTiBvciBzb21ldGhpbmcgZWxzZSAob2xkZXIgY2FyZHM/KS4KKworVGhlIE9QTDQgc3ludGggd2lsbCBiZSBpbmFjY2Vzc2libGUgd2l0aG91dCBsb2FkaW5nIHRoZSBtaWNyb2NvbnRyb2xsZXIgY29kZS4KKworQWxzbyByZW1lbWJlciB0byBlbmFibGUgU0IgTVBVNDAxIHN1cHBvcnQgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBPUEw0IG1vZGUuCisoRG9uJ3QgZW5hYmxlIHRoZSAnbm9ybWFsJyBNUFU0MDEgZGV2aWNlIGFzIHdpdGggc29tZSBlYXJsaWVyIGRyaXZlcgordmVyc2lvbnMgKHByZSAzLjUtYWxwaGE4KSkuCisKK05PVEUhCURvbid0IGFuc3dlciAneScgd2hlbiB0aGUgZHJpdmVyIGFza3MgYWJvdXQgU00gR2FtZXMgc3VwcG9ydAorCSh0aGUgbmV4dCBxdWVzdGlvbiBhZnRlciB0aGUgTUlESTAwMDEuQklOIG5hbWUpLiBIb3dldmVyCisJYW5zd2VyaW5nICd5JyBkb2Vzbid0IGNhdXNlIGRhbWFnZSB5b3VyIGNvbXB1dGVyIHNvIGRvbid0IHBhbmljLiAKKworU291bmQgR2FsYXhpZXMKKy0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBTb3VuZCBHYWxheHkgY2FyZHMgbWFkZSBieSBBenRlY2guIFRoZSA4IGJpdAorb25lcyBhcmUgZnVsbHkgU0Igb3IgU0IgUHJvIGNvbXBhdGlibGUgYW5kIHRoZXJlIHNob3VsZCBiZSBubyBwcm9ibGVtcword2l0aCB0aGVtLiAKKworVGhlIG9sZGVyIDE2IGJpdCBjYXJkcyAoU0cgUHJvMTYsIFNHIE5YIFBybzE2LCBOb3ZhIGFuZCBMeXJhKSBoYXZlCithbiBFRVBST00gY2hpcCBmb3Igc3RvcmluZyB0aGUgY29uZmlndXJhdGlvbiBkYXRhLiBUaGVyZSBpcyBhIG1pY3JvY29udHJvbGxlcgord2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGNhcmQgdG8gbWF0Y2ggdGhlIEVFUFJPTSBzZXR0aW5ncyB3aGVuIHRoZSBtYWNoaW5lCitpcyBwb3dlcmVkIG9uLiBUaGVzZSBjYXJkcyBhY3R1YWxseSBiZWhhdmUganVzdCBsaWtlIHRoZXkgaGF2ZSBqdW1wZXJzCitmb3IgYWxsIG9mIHRoZSBzZXR0aW5ncy4gQ29uZmlndXJlIGRyaXZlciBmb3IgTVNTLCBNUFUsIFNCL1NCIFBybyAgYW5kIE9QTDMgCitzdXBwb3J0cyB3aXRoIHRoZXNlIGNhcmRzLiAKKworVGhlcmUgYXJlIHNvbWUgbmV3IFNvdW5kIEdhbGF4aWVzIGluIHRoZSBtYXJrZXQuIEkgaGF2ZSBubyBleHBlcmllbmNlIHdpdGgKK3RoZW0gc28gcmVhZCB0aGUgY2FyZCdzIG1hbnVhbCBjYXJlZnVsbHkuCisKK0VTUyBFUzE2ODggYW5kIEVTNjg4ICdBdWRpb0RyaXZlJyBiYXNlZCBjYXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvcnQgZm9yIHRoZXNlIHR3byBFU1MgY2hpcHMgaXMgZW1iZWRkZWQgaW4gdGhlIFNCIGRyaXZlci4KK0NvbmZpZ3VyZSB0aGVzZSBjYXJkcyBqdXN0IGxpa2UgU0IuIEVuYWJsZSB0aGUgJ1NCIE1QVTQwMSBNSURJIHBvcnQnCitpZiB5b3Ugd2FudCB0byB1c2UgTUlESSBmZWF0dXJlcyBvZiBFUzE2ODguIEVTNjg4IGRvZXNuJ3QgaGF2ZSBNUFUgbW9kZQorc28geW91IGRvbid0IG5lZWQgdG8gZW5hYmxlIGl0ICh0aGUgZHJpdmVyIHVzZXMgbm9ybWFsIFNCIE1JREkgYXV0b21hdGljYWxseQord2l0aCBFUzY4OCkuCisKK05PVEUhIEVTUyBjYXJkcyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBNU1MvV1NTIHNvIGRvbid0IHdvcnJ5IGlmIE1TUyBzdXBwb3J0CitvZiBPU1MgZG9lc24ndCB3b3JrIHdpdGggaXQuCisKK1RoZXJlIGFyZSBzb21lIEVTMTY4OC82ODggYmFzZWQgc291bmQgY2FyZHMgYW5kIChwYXJ0aWN1bGFybHkpIG1vdGhlcmJvYXJkcword2hpY2ggdXNlIHNvZnR3YXJlIGNvbmZpZ3VyYWJsZSBJL08gcG9ydCByZWxvY2F0aW9uIGZlYXR1cmUgb2YgdGhlIGNoaXAuCitUaGlzIEVTUyBwcm9wcmlldGFyeSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBvbmx5IGJ5IE9TUy9MaW51eC4KKworVGhlcmUgYXJlIEVTMTY4OCBiYXNlZCBjYXJkcyB3aGljaCB1c2UgZGlmZmVyZW50IGludGVycnVwdCBwaW4gYXNzaWdubWVudCB0aGFuCityZWNvbW1lbmRlZCBieSBFU1MgKDUsIDcsIDkvMiBhbmQgMTApLiBJbiB0aGlzIGNhc2UgYWxsIElSUXMgZG9uJ3Qgd29yay4KK0F0IGxlYXN0IGEgY2FyZCBjYWxsZWQgKFBlYXJsPykgSHlwZXJzb3VuZCAxNiBzdXBwb3J0cyBJUlEgMTUgYnV0IGl0IGRvZXNuJ3QKK3dvcmsuCisKK0VTMTg2OCBpcyBhIFBuUCBjaGlwIHdoaWNoIGlzIChzdXBwb3NlZCB0byBiZSkgY29tcGF0aWJsZSB3aXRoIEVTUzE2ODgKK3Byb2JhYmx5IHdvcmtzIHdpdGggT1NTL0ZyZWUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdXNpbmcgaXNhcG5wdG9vbHMuCisKK1JldmVhbCBjYXJkcworLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBjYXJkcyBtYWRlL21hcmtldGVkIGJ5IFJldmVhbC4gU29tZSBvZiB0aGVtCithcmUgY29tcGF0aWJsZSB3aXRoIFNvdW5kU2NhcGUgYW5kIHNvbWUgdXNlIHRoZSBNQUQxNiBjaGlwLiBZb3UgbWF5IGhhdmUKK3RvIGxvb2sgYXQgdGhlIGNhcmQgYW5kIHRyeSB0byBpZGVudGlmeSBpdHMgb3JpZ2luLgorCitEaWFtb25kCistLS0tLS0tCisKK1RoZSBvbGRlc3QgKFNpZXJyYSBBcmlhIGJhc2VkKSBzb3VuZCBjYXJkcyBtYWRlIGJ5IERpYW1vbmQgYXJlIG5vdCBzdXBwb3J0ZWQKKyh0aGV5IG1heSB3b3JrIGlmIHRoZSBjYXJkIGlzIGluaXRpYWxpemVkIHVzaW5nIERPUykuIFRoZSByZWNlbnQgKExYPykKK21vZGVscyBhcmUgYmFzZWQgb24gdGhlIE1BRDE2IGNoaXAgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuCisKK0F1ZGlvIEV4Y2VsIERTUDE2CistLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0IGZvciB0aGlzIGNhcmQgaXMgY3VycmVudGx5IG5vdCBmdW5jdGlvbmFsLiBBIG5ldyBkcml2ZXIgZm9yIGl0CitzaG91bGQgYmUgYXZhaWxhYmxlIGxhdGVyIHRoaXMgeWVhci4KKworUENNQ0lBIGNhcmRzCistLS0tLS0tLS0tLS0KKworU29ycnksIGNhbid0IGhlbHAuIFNvbWUgY2FyZHMgbWF5IHdvcmsgYW5kIHNvbWUgZG9uJ3QuCisKK1RJIFRNNDAwME0gbm90ZWJvb2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBjb21wdXRlcnMgaGF2ZSBhIGJ1aWx0IGluIHNvdW5kIHN1cHBvcnQgYmFzZWQgb24gdGhlIEphenogY2hpcHNldC4KK0xvb2sgYXQgdGhlIGluc3RydWN0aW9ucyBmb3IgTVYgSmF6eiAoYWJvdmUpLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUKK3RoYXQgdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIG1vdXNlIHBvcnQgYW5kIHNvdW5kIGF0IGxlYXN0IG9uCitzb21lIFRNIG1vZGVscy4gRG9uJ3QgZW5hYmxlIHRoZSAiQyZUIDgyQzcxMCBtb3VzZSBwb3J0IHN1cHBvcnQiIHdoZW4KK2NvbmZpZ3VyaW5nIExpbnV4LiBIYXZpbmcgaXQgZW5hYmxlZCBpcyBsaWtlbHkgdG8gY2F1c2UgbXlzdGVyaW91cyBwcm9ibGVtcworYW5kIGtlcm5lbCBmYWlsdXJlcyB3aGVuIHNvdW5kIGlzIHVzZWQuCisKK21pcm9TT1VORAorLS0tLS0tLS0tCisKK1RoZSBtaXJvU09VTkQgUENNMS1wcm8sIFBDTTEyIGFuZCBQQ00yMCByYWRpbyBoYXMgYmVlbiB1c2VkCitzdWNjZXNzZnVsbHkuIFRoZXNlIGNhcmRzIGFyZSBiYXNlZCBvbiB0aGUgTUFEMTYsIE9QTDQsIGFuZCBDUzQyMzFBIGNoaXBzCithbmQgZXZlcnl0aGluZyBzYWlkIGluIHRoZSBzZWN0aW9uIGFib3V0IE1BRDE2IGNhcmRzIGFwcGxpZXMgaGVyZSwKK3Rvby4gVGhlIG9ubHkgbWFqb3IgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBQQ014eCBhbmQgb3RoZXIgTUFEMTYgY2FyZHMKK2lzIHRoYXQgaW5zdGVhZCBvZiB0aGUgbWl4ZXIgaW4gdGhlIENTNDIzMSBjb2RlYyBhIHNlcGFyYXRlIG1peGVyCitjb250cm9sbGVkIGJ5IGFuIG9uLWJvYXJkIDgwQzMyIG1pY3JvY29udHJvbGxlciBpcyB1c2VkLiBDb250cm9sIG9mCit0aGUgbWl4ZXIgdGFrZXMgcGxhY2UgdmlhIHRoZSBBQ0kgKG1pcm8ncyBhdWRpbyBjb250cm9sIGludGVyZmFjZSkKK3Byb3RvY29sIHRoYXQgaXMgaW1wbGVtZW50ZWQgaW4gYSBzZXBhcmF0ZSBsb3dsZXZlbCBkcml2ZXIuIE1ha2Ugc3VyZQoreW91IGNvbXBpbGUgdGhpcyBBQ0kgZHJpdmVyIHRvZ2V0aGVyIHdpdGggdGhlIG5vcm1hbCBNQUQxNiBzdXBwb3J0Cit3aGVuIHlvdSB1c2UgYSBtaXJvU09VTkQgUENNeHggY2FyZC4gVGhlIEFDSSBtaXhlciBpcyBjb250cm9sbGVkIGJ5CisvZGV2L21peGVyIGFuZCB0aGUgQ1M0MjMxIG1peGVyIGJ5IC9kZXYvbWl4ZXIxIChkZXBlbmRzIG9uIGxvYWQKK3RpbWUpLiBPbmx5IGluIHNwZWNpYWwgY2FzZXMgeW91IHdhbnQgdG8gY2hhbmdlIHNvbWV0aGluZyByZWd1bGFybHkgb24KK3RoZSBDUzQyMzEgbWl4ZXIuCisKK1RoZSBtaXJvU09VTkQgUENNMTIgYW5kIFBDTTIwIHJhZGlvIGlzIGNhcGFibGUgb2YgZnVsbCBkdXBsZXgKK29wZXJhdGlvbiAoc2ltdWx0YW5lb3VzIFBDTSByZXBsYXkgYW5kIHJlY29yZGluZyksIHdoaWNoIGFsbG93cyB5b3UgdG8KK2ltcGxlbWVudCBuaWNlIHJlYWwtdGltZSBzaWduYWwgcHJvY2Vzc2luZyBhdWRpbyBlZmZlY3Qgc29mdHdhcmUgYW5kCituZXR3b3JrIHRlbGVwaG9uZXMuIFRoZSBBQ0kgbWl4ZXIgaGFzIHRvIGJlIHN3aXRjaGVkIGludG8gdGhlICJzb2xvIgorbW9kZSBmb3IgZHVwbGV4IG9wZXJhdGlvbiBpbiBvcmRlciB0byBhdm9pZCBmZWVkYmFjayBjYXVzZWQgYnkgdGhlCittaXhlciAoaW5wdXQgaGVhcnMgb3V0cHV0IHNpZ25hbCkuIFlvdSBjYW4gZGUtL2FjdGl2YXRlIHRoaXMgbW9kZQordGhyb3VnaCB0b2dnbGVpbmcgdGhlIHJlY29yZCBidXR0b24gZm9yIHRoZSB3YXZlIGNvbnRyb2xsZXIgd2l0aCBhbgorT1NTLW1peGVyLgorCitUaGUgUENNMjAgY29udGFpbnMgYSByYWRpbyB0dW5lciwgd2hpY2ggaXMgYWxzbyBjb250cm9sbGVkIGJ5CitBQ0kuIFRoaXMgcmFkaW8gdHVuZXIgaXMgc3VwcG9ydGVkIGJ5IHRoZSBBQ0kgZHJpdmVyIHRvZ2V0aGVyIHdpdGggdGhlCittaXJvcGNtMjAubyBtb2R1bGUuIEFsc28gdGhlIDctYmFuZCBlcXVhbGl6ZXIgaXMgaW50ZWdyYXRlZAorKGxpbWl0ZWQgYnkgdGhlIE9TUy1kZXNpZ24pLiBEZXZlbG9wZW1lbnQgaGFzIHN0YXJ0ZWQgYW5kIG1heWJlCitmaW5pc2hlZCBmb3IgdGhlIFJEUyBkZWNvZGVyIG9uIHRoaXMgY2FyZCwgdG9vLiBZb3Ugd2lsbCBiZSBhYmxlIHRvCityZWFkIFJhZGlvVGV4dCwgdGhlIFByb2dyYW1tZSBTZXJ2aWNlIG5hbWUsIFByb2dyYW1tZSBUWXBlIGFuZAorb3RoZXJzLiBFdmVuIHRoZSB2NGwgcmFkaW8gbW9kdWxlIGJlbmVmaXRzIGZyb20gaXQgd2l0aCBhIHJlZmluZWQKK3N0cmVuZ3RoIHZhbHVlLiBTZWUgYWNpLltjaF0gYW5kIG1pcm9wY20yMCouW2NoXSBmb3IgbW9yZSBkZXRhaWxzLgorCitUaGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBoYXZlIHdvcmtlZCBmaW5lIGZvciB0aGUgUENNMTIKK2luIE1hcmt1cyBLdWhuJ3Mgc3lzdGVtLCBtYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IHdvcmssIHRvbzoKK0NPTkZJR19NQUQxNl9CQVNFPTB4NTMwLCBDT05GSUdfTUFEMTZfSVJRPTExLCBDT05GSUdfTUFEMTZfRE1BPTMsIAorQ09ORklHX01BRDE2X0RNQTI9MCwgQ09ORklHX01BRDE2X01QVV9CQVNFPTB4MzMwLCBDT05GSUdfTUFEMTZfTVBVX0lSUT0xMCwKK0RTUF9CVUZGU0laRT02NTUzNiwgU0VMRUNURURfU09VTkRfT1BUSU9OUz0weDAwMjgxMDAwLgorCitCYXMgdmFuIGRlciBMaW5kZW4gaXMgdXNpbmcgaGlzIFBDTTEtcHJvIHdpdGggYSBjb25maWd1cmF0aW9uIHRoYXQKK2RpZmZlcnMgaW46IENPTkZJR19NQUQxNl9JUlE9NywgQ09ORklHX01BRDE2X0RNQT0xLCBDT05GSUdfTUFEMTZfTVBVX0lSUT05CisKK0NvbXBhcSBEZXNrcHJvIFhMCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYnVpbHRpbiBzb3VuZCBoYXJkd2FyZSBvZiBDb21wYXEgRGVza3BybyBYTCBpcyBub3cgc3VwcG9ydGVkLiAKK1lvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyIHdpdGggTVNTIGFuZCBPUEwzIHN1cHBvcnRzIGVuYWJsZWQuCitJbiBhZGRpdGlvbiB5b3UgbmVlZCB0byBtYW51YWxseSBlZGl0IGxpbnV4L2RyaXZlcnMvc291bmQvbG9jYWwuaCBhbmQKK3RvIGFkZCBhIGxpbmUgY29udGFpbmluZyAiI2RlZmluZSBERVNLUFJPWEwiIGlmIHlvdSB1c2VkIAorbWFrZSBtZW51Y29uZmlnL3hjb25maWcuCisKK090aGVycz8KKy0tLS0tLS0KKworU2luY2UgdGhlcmUgYXJlIHNvIG1hbnkgZGlmZmVyZW50IHNvdW5kIGNhcmRzLCBpdCdzIGxpa2VseSB0aGF0IEkgaGF2ZSAKK2ZvcmdvdHRlbiB0byBtZW50aW9uIG1hbnkgb2YgdGhlbS4gUGxlYXNlIGluZm9ybSBtZSBpZiB5b3Uga25vdyB5ZXQgYW5vdGhlcgorY2FyZCB3aGljaCB3b3JrcyB3aXRoIExpbnV4LCBwbGVhc2UgaW5mb3JtIG1lIChvciBpcyBhbnlib2R5IGVsc2UKK3dpbGxpbmcgdG8gbWFpbnRhaW4gYSBkYXRhYmFzZSBvZiBzdXBwb3J0ZWQgY2FyZHMgKGp1c3QgbGlrZSBpbiBYRjg2KT8pLgorCitDYXJkcyBub3Qgc3VwcG9ydGVkIHlldAorPT09PT09PT09PT09PT09PT09PT09PT0KKworUGxlYXNlIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIHNvdW5kIGRyaXZlciB5b3UgYXJlIHVzaW5nIGJlZm9yZSAKK2NvbXBsYWluaW5nIHRoYXQgeW91ciBjYXJkIGlzIG5vdCBzdXBwb3J0ZWQuIEl0J3MgcG9zc2libGUgeW91IGFyZSAKK3VzaW5nIGEgZHJpdmVyIHZlcnNpb24gd2hpY2ggd2FzIHJlbGVhc2VkIG1vbnRocyBiZWZvcmUgeW91ciBjYXJkIHdhcworaW50cm9kdWNlZC4KKworRmlyc3Qgb2YgYWxsLCB0aGVyZSBpcyBhbiBlYXN5IHdheSB0byBtYWtlIG1vc3Qgc291bmQgY2FyZHMgd29yayB3aXRoIExpbnV4LgorSnVzdCB1c2UgdGhlIERPUyBiYXNlZCBkcml2ZXIgdG8gaW5pdGlhbGl6ZSB0aGUgY2FyZCB0byBhIGtub3duIHN0YXRlLCB0aGVuIHVzZQorbG9hZGxpbi5leGUgdG8gYm9vdCBMaW51eC4gSWYgTGludXggaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHNhbWUgSS9PLCBJUlEgYW5kCitETUEgbnVtYmVycyBhcyBET1MsIHRoZSBjYXJkIGNvdWxkIHdvcmsuCisoY3RybC1hbHQtZGVsIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIGxvYWRsaW4uZXhlIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aAorbmV3IG1vdGhlcmJvYXJkcykuIFRoaXMgbWV0aG9kIHdvcmtzIGFsc28gd2l0aCBhbGwvbW9zdCBQblAgc291bmQgY2FyZHMuCisKK0Rvbid0IGdldCBmb29sZWQgd2l0aCBTQiBjb21wYXRpYmlsaXR5LiBNb3N0IGNhcmRzIGFyZSBjb21wYXRpYmxlIHdpdGgKK1NCIGJ1dCB0aGF0IG1heSByZXF1aXJlIGEgVFNSIHdoaWNoIGlzIG5vdCBwb3NzaWJsZSB3aXRoIExpbnV4LiBJZgordGhlIGNhcmQgaXMgY29tcGF0aWJsZSB3aXRoIE1TUywgaXQncyBhIGJldHRlciBjaG9pY2UuIFNvbWUgY2FyZHMKK2Rvbid0IHdvcmsgaW4gdGhlIFNCIGFuZCBNU1MgbW9kZXMgYXQgdGhlIHNhbWUgdGltZS4KKworVGhlbiB0aGVyZSBhcmUgY2FyZHMgd2hpY2ggYXJlIG5vIGxvbmdlciBtYW51ZmFjdHVyZWQgYW5kL29yIHdoaWNoCithcmUgcmVsYXRpdmVseSByYXJlbHkgdXNlZCAoc3VjaCBhcyB0aGUgOCBiaXQgUHJvQXVkaW9TcGVjdHJ1bQorbW9kZWxzKS4gSXQncyBleHRyZW1lbHkgdW5saWtlbHkgdGhhdCBzdWNoIGNhcmRzIGV2ZXIgZ2V0IHN1cHBvcnRlZC4KK0FkZGluZyBzdXBwb3J0IGZvciBhIG5ldyBjYXJkIHJlcXVpcmVzIG11Y2ggd29yayBhbmQgaW5jcmVhc2VzIHRpbWUKK3JlcXVpcmVkIGluIG1haW50YWluaW5nIHRoZSBkcml2ZXIgKHNvbWUgY2hhbmdlcyBuZWVkIHRvIGJlIGRvbmUKK3RvIGFsbCBsb3cgbGV2ZWwgZHJpdmVycyBhbmQgYmUgdGVzdGVkIHRvbywgbWF5YmUgd2l0aCBtdWx0aXBsZQorb3BlcmF0aW5nIHN5c3RlbXMpLiBGb3IgdGhpcyByZWFzb24gSSBoYXZlIG1hZGUgYSBkZWNpc2lvbiB0byBub3Qgc3VwcG9ydAorb2Jzb2xldGUgY2FyZHMuIEl0J3MgcG9zc2libGUgdGhhdCBzb21lb25lIGVsc2UgbWFrZXMgYSBzZXBhcmF0ZWx5IAorZGlzdHJpYnV0ZWQgZHJpdmVyIChkaWZmcykgZm9yIHRoZSBjYXJkLiAKKworV3JpdGluZyBhIGRyaXZlciBmb3IgYSBuZXcgY2FyZCBpcyBub3QgcG9zc2libGUgaWYgdGhlcmUgYXJlIG5vIAorcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGFib3V0IHRoZSBjYXJkLiBJZiB5b3UgZG9uJ3QKK2ZpbmQgeW91ciBuZXcgY2FyZCBmcm9tIHRoaXMgZmlsZSwgbG9vayBmcm9tIHRoZSBob21lIHBhZ2UgCisoaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zc2ZyZWUpLiBUaGVuIHBsZWFzZSBjb250YWN0CittYW51ZmFjdHVyZXIgb2YgdGhlIGNhcmQgYW5kIGFzayBpZiB0aGV5IGhhdmUgKG9yIGFyZSB3aWxsaW5nIHRvKQorcmVsZWFzZWQgdGVjaG5pY2FsIGRldGFpbHMgb2YgdGhlIGNhcmQuIERvIHRoaXMgYmVmb3JlIGNvbnRhY3RpbmcgbWUuIEkKK2NhbiBvbmx5IGFuc3dlciAnbm8nIGlmIHRoZXJlIGFyZSBubyBwcm9ncmFtbWluZyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuCisKK0kgaGF2ZSBtYWRlIGRlY2lzaW9uIHRvIG5vdCBhY2NlcHQgY29kZSBiYXNlZCBvbiByZXZlcnNlIGVuZ2luZWVyaW5nCit0byB0aGUgZHJpdmVyLiBUaGVyZSBhcmUgdGhyZWUgbWFpbiByZWFzb25zOiBGaXJzdCBJIGRvbid0IHdhbnQgdG8gYnJlYWsKK3JlbGF0aW9uc2hpcHMgdG8gc291bmQgY2FyZCBtYW51ZmFjdHVyZXJzLiBUaGUgc2Vjb25kIHJlYXNvbiBpcyB0aGF0CittYWludGFpbmluZyBhbmQgc3VwcG9ydGluZyBhIGRyaXZlciB3aXRob3V0IGFueSBzcGVjcyB3aWxsIGJlIGEgcGFpbi4KK1RoZSB0aGlyZCByZWFzb24gaXMgdGhhdCBjb21wYW5pZXMgaGF2ZSBmcmVlZG9tIHRvIHJlZnVzZSBzZWxsaW5nIHRoZWlyCitwcm9kdWN0cyB0byBvdGhlciB0aGFuIFdpbmRvd3MgdXNlcnMuCisKK1NvbWUgY29tcGFuaWVzIGRvbid0IGdpdmUgbG93IGxldmVsIHRlY2huaWNhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGVpcgorcHJvZHVjdHMgdG8gcHVibGljIG9yIGF0IGxlYXN0IHRoZWlyIHJlcXVpcmUgc2lnbmluZyBhIE5EQS4gSXQncyBub3QKK3Bvc3NpYmxlIHRvIGltcGxlbWVudCBhIGZyZWV3YXJlIGRyaXZlciBmb3IgdGhlbS4gSG93ZXZlciBpdCdzIHBvc3NpYmxlCit0aGF0IHN1cHBvcnQgZm9yIHN1Y2ggY2FyZHMgYmVjb21lIGF2YWlsYWJsZSBpbiB0aGUgY29tbWVyY2lhbCB2ZXJzaW9uCitvZiB0aGlzIGRyaXZlciAoc2VlIGh0dHA6Ly93d3cuNEZyb250LXRlY2guY29tL29zcy5odG1sIGZvciBtb3JlIGluZm8pLgorCitUaGVyZSBhcmUgc29tZSBjb21tb24gYXVkaW8gY2hpcHNldHMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuIEZvciBleGFtcGxlCitTaWVycmEgQXJpYSBhbmQgSUJNIE13YXZlLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgYXJjaGl0ZWN0dXJlcworZ2V0IHNvbWUgc3VwcG9ydCBpbiBmdXR1cmUgYnV0IEkgY2FuJ3QgbWFrZSBhbnkgcHJvbWlzZXMuIEp1c3QgbG9vaworYXQgdGhlIGhvbWUgcGFnZSAoaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zc2ZyZWUvbmV3X2NhcmRzLmh0bWwpCitmb3IgbGF0ZXN0IGluZm8uCisKK0luZm9ybWF0aW9uIGFib3V0IHVuc3VwcG9ydGVkIHNvdW5kIGNhcmRzIGFuZCBjaGlwc2V0cyBpcyB3ZWxjb21lIGFzIHdlbGwKK2FzIGZyZWUgY29waWVzIG9mIHNvdW5kIGNhcmRzLCBTREtzIGFuZCBvcGVyYXRpbmcgc3lzdGVtcy4KKworSWYgeW91IGhhdmUgYW55IGNvcnJlY3Rpb25zIGFuZC9vciBjb21tZW50cywgcGxlYXNlIGNvbnRhY3QgbWUuCisKK0hhbm51IFNhdm9sYWluZW4KK2hhbm51QG9wZW5zb3VuZC5jb20KKworUGVyc29uYWwgaG9tZSBwYWdlOgkgICBodHRwOi8vd3d3LmNvbXB1c29uaWMuZmkvfmhhbm51Citob21lIHBhZ2Ugb2YgT1NTL0ZyZWU6IGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlCisKK2hvbWUgcGFnZSBvZiBjb21tZXJjaWFsIE9TUworKE9wZW4gU291bmQgU3lzdGVtKSBkcml2ZXJzOiBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzLmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5hd2UgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuYXdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMDU0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuYXdlCkBAIC0wLDAgKzEsMjE4IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJQVdFMzIgU291bmQgRHJpdmVyIGZvciBMaW51eCAvIEZyZWVCU0QKKwkJdmVyc2lvbiAwLjQuMzsgTm92LiAxLCAxOTk4CisKKwlUYWthc2hpIEl3YWkgPGl3YWlAd3cudW5pLWVybGFuZ2VuLmRlPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIEdFTkVSQUwgTk9URVMKKworVGhpcyBpcyBhIHNvdW5kIGRyaXZlciBleHRlbnNpb24gZm9yIFNvdW5kQmxhc3RlciBBV0UzMiBhbmQgb3RoZXIKK2NvbXBhdGlibGUgY2FyZHMgKEFXRTMyLVBuUCwgU0IzMiwgU0IzMi1QblAsIEFXRTY0ICYgZXRjKSB0byBlbmFibGUKK3RoZSB3YXZlIHN5bnRoIG9wZXJhdGlvbnMuICBUaGUgZHJpdmVyIGlzIHByb3ZpZGVkIGZvciBMaW51eCAxLjIueAorYW5kIDIuWzAxMl0ueCBrZXJuZWxzLCBhcyB3ZWxsIGFzIEZyZWVCU0QsIG9uIEludGVsIHg4NiBhbmQgREVDCitBbHBoYSBzeXN0ZW1zLgorCitUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiBieSBUYWthc2hpIEl3YWkgPGl3YWlAd3cudW5pLWVybGFuZ2VuLmRlPiwKK2FuZCBwcm92aWRlZCAiYXMgaXMiLiAgVGhlIG9yaWdpbmFsIHNvdXJjZSAoYXdlZHJ2LTAuNC4zLnRhci5neikgYW5kCitiaW5hcnkgcGFja2FnZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgZm9sbG93aW5nIFVSTDoKKwlodHRwOi8vYmFoYW11dC5tbS50LnUtdG9reW8uYWMuanAvfml3YWkvYXdlZHJ2LworTm90ZSB0aGF0IHNpbmNlIHRoZSBhdXRob3IgaXMgYXBhcnQgZnJvbSB0aGlzIHdlYiBzaXRlLCB0aGUgdXBkYXRlIGlzCitub3QgZnJlcXVlbnQgbm93LgorCisKKyogTk9URSBUTyBMSU5VWCBVU0VSUworCitUbyBlbmFibGUgdGhpcyBkcml2ZXIgb24gbGludXgtMi5bMDFdLngga2VybmVscywgeW91IG5lZWQgdHVybiBvbiAKKyJBV0UzMiBzeW50aCIgb3B0aW9ucyBpbiBzb3VuZCBtZW51IHdoZW4gY29uZmlndXJlIHlvdXIgbGludXgga2VybmVsCithbmQgbW9kdWxlcy4gIFRoZSBwcmVjaXNlIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgaXMgZGVzY3JpYmVkIGluIHRoZQorQVdFNjQtTWluaS1IT1dUTyBhbmQgbGludXgta2VybmVsL0RvY3VtZXRhdGlvbi9zb3VuZC9BV0UzMi4KKworSWYgeW91J3JlIHVzaW5nIFBuUCBjYXJkcywgdGhlIGNhcmQgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgbG9hZGluZwordGhlIHNvdW5kIGRyaXZlci4gIFRoZXJlJ3JlIHNldmVyYWwgb3B0aW9ucyB0byBkbyB0aGlzOgorICAgIC0gSW5pdGlhbGl6ZSB0aGUgY2FyZCB2aWEgSVNBIFBuUCB0b29scywgYW5kIGxvYWQgdGhlIHNvdW5kIG1vZHVsZS4KKyAgICAtIEluaXRpYWxpemUgdGhlIGNhcmQgb24gRE9TLCBhbmQgbG9hZCBsaW51eCBieSBsb2FkbGluLmV4ZQorICAgIC0gVXNlIFBuUCBrZXJuZWwgZHJpdmVyIChmb3IgTGludXgtMi54LngpCitUaGUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb24gZm9yIHRoZSBzb2x1dGlvbiB1c2luZyBpc2FwbnAgdG9vbHMgaXMgZm91bmQKK2luIG1hbnkgZG9jdW1lbnRzIGxpa2UgYWJvdmUuICBBIGJyaWVmIGluc3RydWN0aW9uIGlzIGFsc28gaW5jbHVkZWQgaW4KK3RoZSBpbnN0YWxsYXRpb24gZG9jdW1lbnQgb2YgdGhpcyBwYWNrYWdlLgorRm9yIFBuUCBkcml2ZXIgcHJvamVjdCwgcGxlYXNlIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgVVJMOgorCWh0dHA6Ly93d3ctamNyLmxtaC5veC5hYy51ay9+cG5wLworCisKKyogVVNJTkcgVEhFIERSSVZFUgorCitUaGUgYXdlZHJ2IGhhcyBzZXZlcmFsIGRpZmZlcmVudCBwbGF5aW5nIG1vZGVzIHRvIHJlYWxpemUgZWFzeSBjaGFubmVsIAorYWxsb2NhdGlvbiBmb3IgTUlESSBzb25ncy4gIFRvIGhlYXIgdGhlIGV4YWN0IHNvdW5kIHF1YWxpdHksIHlvdSBuZWVkCit0byBvYnRhaW4gdGhlIGV4dGVuZGVkIHNlcXVlbmNlciBwcm9ncmFtLCBkcnZtaWRpIG9yIHBsYXltaWRpLTIuNS4KKworRm9yIHBsYXlpbmcgTUlESSBmaWxlcywgeW91ICpNVVNUKiBsb2FkIHRoZSBzb3VuZGZvbnQgZmlsZSBvbiB0aGUKK2RyaXZlciBwcmV2aW91c2x5IGJ5IHNmeGxvYWQgdXRpbGl0eS4gIE90aGVyd2lzZSB5b3UnbGwgaGVyZSBubyBzb3VuZHMgCithdCBhbGwhICBBbGwgdGhlIHV0aWxpdGllcyBhbmQgZHJpdmVyIHNvdXJjZSBwYWNrYWdlcyBhcmUgZm91bmQgaW4gdGhlCithYm92ZSBVUkwuICBUaGUgc2Z4bG9hZCBwcm9ncmFtIGlzIGluY2x1ZGVkIGluIHRoZSBwYWNrYWdlCithd2VzZngtMC40LjMudGd6LiAgQmluYXJ5IHBhY2thZ2VzIGFyZSBhdmFpbGFibGUgdGhlcmUsIHRvby4gIFNlZSB0aGUKK2luc3RydWN0aW9uIGluIGVhY2ggcGFja2FnZSBmb3IgaW5zdGFsbGF0aW9uLgorCitMb2FkaW5nIGEgc291bmRmb250IGZpbGUgaXMgdmVyeSBzaW1wbGUuICBKdXN0IGV4ZWN1dGUgdGhlIGNvbW1hbmQKKworCSUgc2Z4bG9hZCBzeW50aGdtLnNiaworCitUaGVuLCBzZnhsb2FkIHRyYW5zZmVycyB0aGUgZmlsZSAic3ludGhnbS5zYmsiIHRvIHRoZSBkcml2ZXIuCitCb3RoIFNGMSBhbmQgU0YyIGZvcm1hdHMgYXJlIGFjY2VwdGVkLgorCitOb3cgeW91IGNhbiBoZWFyIG1pZGkgbXVzaWNzIGJ5IGEgbWlkaSBwbGF5ZXIuCisKKwklIGRydm1pZGkgZm9vLm1pZAorCitJZiB5b3UgcnVuIE1JREkgcGxheWVyIGFmdGVyIE1PRCBwbGF5ZXIsIHlvdSBuZWVkIHRvIGxvYWQgc291bmRmb250CitmaWxlcyBhZ2Fpbiwgc2luY2UgTU9EIHBsYXllciBwcm9ncmFtcyBjbGVhciB0aGUgcHJldmlvdXMgbG9hZGVkCitzYW1wbGVzIGJ5IHRoZWlyIG93biBkYXRhLgorCitJZiB5b3UgaGF2ZSBvbmx5IDUxMmtiIG9uIHRoZSBzb3VuZCBjYXJkLCBJIHJlY29tbWVuZCB0byB1c2UgZHluYW1pYworc2FtcGxlIGxvYWRpbmcgdmlhIC1MIG9wdGlvbiBvZiBkcnZtaWRpLiAgMk1CIEdNL0dTIHNvdW5kZm9udCBmaWxlIGlzCithdmFpbGFibGUgaW4gbW9zdCBtaWRpIGZpbGVzLgorCisJJSBzZnhsb2FkIHN5bnRoZ20KKwklIGRydm1pZGkgLUwgMm1iZ21ncyBmb28ubWlkCisKK1RoaXMgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZSAoYmVsaWV2ZSBtZSkhICBGb3IgbW9yZSBkZXRhaWxzLCBwbGVhc2UKK3JlZmVyIHRvIHRoZSBGQVEgbGlzdCB3aGljaCBpcyBhdmFpbGFibGUgb24gdGhlIFVSTCBhYm92ZS4KKworVGhlIGN1cnJlbnQgY2hvcnVzLCByZXZlcmIgYW5kIGVxdWFsaXplciBzdGF0dXMgY2FuIGJlIGNoYW5nZWQgYnkKK2F3ZXNldCB1dGlsaXR5IHByb2dyYW0gKGluY2x1ZGVkIGluIGF3ZXNmeCBwYWNrYWdlKS4gIE5vdGUgdGhhdAorc29tZSBhd2VkcnYtbmF0aXZlIHByb2dyYW1zIChsaWtlIGRydm1pZGkgYW5kIHhtcCkgd2lsbCBjaGFuZ2UgdGhlCitjdXJyZW50IHNldHRpbmdzIGJ5IHRoZW1zZWx2ZXMuICBUaGUgYXdlc2V0IHByb2dyYW0gaXMgZWZmZWN0aXZlCitvbmx5IGZvciBvdGhlciBwcm9ncmFtcyBsaWtlIHBsYXltaWRpLgorCitFbmpveS4KKworCisqIENPTVBJTEUgRkxBR1MKKworQ29tcGlsZSBjb25kaXRpb25zIGFyZSBkZWZpbmVkIGluIGF3ZV9jb25maWcuaC4KKworW0NvbXBhdGliaWxpdHkgQ29uZGl0aW9uc10KK1RoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIGRlZmluZWQgYXV0b21hdGljYWxseSB3aGVuIHVzaW5nIGluc3RhbGxhdGlvbgorc2hlbGwgc2NyaXB0LgorCistIEFXRV9NT0RVTEVfU1VQUE9SVAorICAgIGluZGljYXRlcyB5b3VyIExpbnV4IGtlcm5lbCBzdXBwb3J0cyBtb2R1bGUgZm9yIGVhY2ggc291bmQgY2FyZAorICAgIChpbiByZWNlbnQgMi4xIG9yIDIuMiBrZXJuZWxzIGFuZCB1bm9mZmljaWFsIHBhdGNoZWQgMi4wIGtlcm5lbHMKKyAgICBhcyBkaXN0cmlidXRlZCBpbiB0aGUgUkg1LjAgcGFja2FnZSkuCisgICAgVGhpcyBmbGFnIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHdoZW4geW91J3JlIHVzaW5nIDIuMS54IGtlcm5lbHMuCisgICAgWW91IGNhbiBwYXNzIHRoZSBiYXNlIGFkZHJlc3MgYW5kIG1lbW9yeSBzaXplIHZpYSB0aGUgZm9sbG93aW5nCisgICAgbW9kdWxlIG9wdGlvbnMsCisJaW8gPSBiYXNlIEkvTyBwb3J0IGFkZHJlc3MgKGVnLiAweDYyMCkKKwltZW1zaXplID0gRFJBTSBzaXplIGluIGtpbG9ieXRlcyAoZWcuIDUxMikKKyAgICBBcyBkZWZhdWx0LCBBV0UgZHJpdmVyIHByb2JlcyB0aGVzZSB2YWx1ZXMgYXV0b21hdGljYWxseS4KKworCitbSGFyZHdhcmUgQ29uZGl0aW9uc10KK1lvdSBET04nVCBoYXZlIHRvIGRlZmluZSB0aGUgZm9sbG93aW5nIHR3byB2YWx1ZXMuCitEZWZpbmUgdGhlbSBvbmx5IHdoZW4gdGhlIGRyaXZlciBjb3VsZG4ndCBkZXRlY3QgdGhlIGNhcmQgcHJvcGVybHkuCisKKy0gQVdFX0RFRkFVTFRfQkFTRV9BRERSCQkoZGVmYXVsdDogbm90IGRlZmluZWQpCisgICAgc3BlY2lmaWVzIHRoZSBiYXNlIHBvcnQgYWRkcmVzcyBvZiB5b3VyIEFXRTMyIGNhcmQuCisgICAgMCBtZWFucyB0byBhdXRvZGV0ZWN0IHRoZSBhZGRyZXNzLgorCistIEFXRV9ERUZBVUxUX01FTV9TSVpFCQkoZGVmYXVsdDogbm90IGRlZmluZWQpCisgICAgc3BlY2lmaWVzIHRoZSBtZW1vcnkgc2l6ZSBvZiB5b3VyIEFXRTMyIGNhcmQgaW4ga2lsb2J5dGVzLgorICAgIC0xIG1lYW5zIHRvIGF1dG9kZXRlY3QgaXRzIHNpemUuCisgICAgCisKK1tTYW1wbGUgVGFibGUgU2l6ZV0KK0Zyb20gdmVyLjAuNC4wLCBzYW1wbGUgdGFibGVzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKGV4Y2VwdAorTGludXgtMS4yLnggc3lzdGVtKSwgc28geW91IG5lZWQgTk9UIHRvIHRvdWNoIHRoZXNlIHBhcmFtZXRlcnMuCitMaW51eC0xLjIueCB1c2VycyBtYXkgbmVlZCB0byBpbmNyZWFzZSB0aGVzZSB2YWx1ZXMgdG8gYXBwcm9wcmlhdGUgc2l6ZSAKK2lmIHRoZSBzb3VuZCBjYXJkIGlzIGVxdWlwcGVkIHdpdGggbW9yZSBEUkFNLgorCistIEFXRV9NQVhfU0ZfTElTVFMsIEFXRV9NQVhfU0FNUExFUywgQVdFX01BWF9JTkZPUworCisKK1tPdGhlciBDb25kaXRpb25zXQorCistIEFXRV9BTFdBWVNfSU5JVF9GTQkJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorICAgIGluZGljYXRlcyB0aGUgQVdFIGRyaXZlciBhbHdheXMgaW5pdGlhbGl6ZSBGTSBwYXNzdGhyb3VnaCBldmVuCisgICAgd2l0aG91dCBEUkFNIG9uIGJvYXJkLiAgRW11ODAwMCBjaGlwIGhhcyBhIHJlc3RyaWN0aW9uIGZvciBwbGF5aW5nCisgICAgc2FtcGxlcyBvbiBEUkFNIHRoYXQgYXQgbGVhc3QgdHdvIGNoYW5uZWxzIG11c3QgYmUgb2NjdXBpZWQgYXMKKyAgICBwYXNzdGhyb3VnaCBjaGFubmVscy4gCisKKy0gQVdFX0RFQlVHX09OCQkJKGRlZmF1bHQ6IGRlZmluZWQpCisgICAgdHVybnMgb24gZGVidWdnaW5nIG1lc3NhZ2VzIGlmIGRlZmluZWQuCisKKy0gQVdFX0hBU19HVVNfQ09NUEFUSUJJTElUWQkoZGVmYXVsdDogZGVmaW5lZCkKKyAgICBFbmFibGVzIEdVUyBjb21wYXRpYmlsaXR5IG1vZGUgaWYgZGVmaW5lZCwgcmVhZGluZyBHVVMgcGF0Y2hlcyBhbmQgCisgICAgR1VTIGNvbnRyb2wgY29tbWFuZHMuICBEZWZpbmUgdGhpcyBvcHRpb24gdG8gdXNlIEdNT0Qgb3Igb3RoZXIKKyAgICBHVVMgbW9kdWxlIHBsYXllcnMuCisKKy0gQ09ORklHX0FXRTMyX01JRElFTVUJCShkZWZhdWx0OiBkZWZpbmVkKQorICAgIEFkZHMgYSBNSURJIGVtdWxhdGlvbiBkZXZpY2UgYnkgRW11ODAwMCB3YXZldGFibGUuICBUaGUgZW11bGF0aW9uCisgICAgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCBhcyBhbiBleHRlcm5hbCBNSURJLCBhbmQgc2VuZHMgdGhlIE1JREkKKyAgICBjb250cm9sIGNvZGVzIGRpcmVjdGx5LiAgWEcgYW5kIEdTIHN5c2V4L05SUE4gYXJlIGFjY2VwdGVkLgorICAgIE5vIE1JREkgaW5wdXQgaXMgc3VwcG9ydGVkLgorCistIENPTkZJR19BV0UzMl9NSVhFUgkJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorICAgIEFkZHMgYSBtaXhlciBkZXZpY2UgZm9yIEFXRTMyIGJhc3MvdHJlYmxlIGVxdWFsaXplciBjb250cm9sLgorICAgIFlvdSBjYW4gYWNjZXNzIHRoaXMgZGV2aWNlIHVzaW5nIC9kZXYvbWl4ZXI/PyAodXN1YWxseSBtaXhlcjAxKS4KKworLSBBV0VfVVNFX05FV19WT0xVTUVfQ0FMQwkoZGVmYXVsdDogZGVmaW5lZCkKKyAgICBVc2UgdGhlIG5ldyBtZXRob2QgdG8gY2FsY3VsYXRlIHRoZSB2b2x1bWUgY2hhbmdlIGFzIGNvbXBhdGlibGUKKyAgICB3aXRoIERPUy9XaW4gZHJpdmVycy4gIFRoaXMgb3B0aW9uIGNhbiBiZSB0b2dnbGVkIHZpYSBhd2VzZXQKKyAgICBwcm9ncmFtLCBvciBkcnZtaWRpIHBsYXllci4KKworLSBBV0VfQ0hFQ0tfVlRBUkdFVAkJKGRlZmF1bHQ6IGRlZmluZWQpCisgICAgQ2hlY2sgdGhlIGN1cnJlbnQgdm9sdW1lIHRhcmdldCB2YWx1ZSB3aGVuIHNlYXJjaGluZyBmb3IgYW4KKyAgICBlbXB0eSBjaGFubmVsIHRvIGFsbG9jYXRlIGEgbmV3IHZvaWNlLiAgVGhpcyBpcyBleHBlcmltZW50YWxseQorICAgIGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbi4gIChwcm9iYWJseSwgdGhpcyBvcHRpb24gZG9lc24ndAorICAgIGFmZmVjdCB0aGUgc291bmQgcXVhbGl0eSBzZXZlcmVseS4uLikKKworLSBBV0VfQUxMT1dfU0FNUExFX1NIQVJJTkcJKGRlZmF1bHQ6IGRlZmluZWQpCisgICBBbGxvdyBzYW1wbGUgc2hhcmluZyBmb3IgZGlmZmVyZW50bHkgbG9hZGVkIHBhdGNoZXMuCisgICBUaGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IHRvZ2V0aGVyIHdpdGggYXdlc2Z4LTAuNC4zcDMuCisgICBOb3RlIHRoYXQgdGhpcyBpcyBzdGlsbCBhbiBleHBlcmltZW50YWwgb3B0aW9uLgorCistIERFRl9GTV9DSE9SVVNfREVQVEgJCShkZWZhdWx0OiAweDEwKQorICAgIFRoZSBkZWZhdWx0IHN0cmVuZ3RoIHRvIGJlIHNlbnQgdG8gdGhlIGNob3J1cyBlZmZlY3QgZW5naW5lLgorICAgIEZyb20gMCB0byAweGZmLiAgTGFyZ2VyIG51bWJlcnMgbWF5IG9mdGVuIGNhdXNlIHdlaXJkIHNvdW5kcy4KKworLSBERUZfRk1fUkVWRVJCX0RFUFRICQkoZGVmYXVsdDogMHgxMCkKKyAgICBUaGUgZGVmYXVsdCBzdHJlbmd0aCB0byBiZSBzZW50IHRvIHRoZSByZXZlcmIgZWZmZWN0IGVuZ2luZS4KKyAgICBGcm9tIDAgdG8gMHhmZi4gIExhcmdlciBudW1iZXJzIG1heSBvZnRlbiBjYXVzZSB3ZWlyZCBzb3VuZHMuCisKKworKiBBQ0tOT1dMRURHTUVOVFMKKworVGhhbmtzIHRvIFdpdG9sZCBKYWNoaW1jenlrICh3aXRla0B4ZmFjdG9yLndwaS5lZHUpIGZvciBtdWNoIGFkdmljZQorb24gcHJvZ3JhbW1pbmcgb2YgQVdFMzIuICBNdWNoIGNvZGUgaXMgYnJvdWdodCBmcm9tIGhpcyBBV0UzMi1uYXRpdmUgCitNT0QgcGxheWVyLCBBTE1QLgorVGhlIHBvcnQgb2YgYXdlZHJ2IHRvIEZyZWVCU0QgaXMgZG9uZSBieSBSYW5kYWxsIEhvcHBlcgorKHJoaEBjdC5waWNrZXIuY29tKS4KK1RoZSBuZXcgdm9sdW1lIGNhbGN1bGF0aW9uIHJvdXRpbmUgd2FzIGRlcml2ZWQgZnJvbSBNYXJrIFdlYXZlcidzCitBRElQIGNvbXBhdGlibGUgcm91dGluZXMuCitJIGFsc28gdGhhbmsgbGludXgtYXdlLW1sIG1lbWJlcnMgZm9yIHRoZWlyIGVmZm9ydHMKK3RvIHJlYm9vdCB0aGVpciBzeXN0ZW0gbWFueSB0aW1lcyA6LSkKKworCisqIFRPRE8nUworCistIENvbXBsZXRlIERPUy9XaW4gY29tcGF0aWJpbGl0eQorLSBEU1AtbGlrZSBvdXRwdXQKKworCisqIENPUFlSSUdIVAorCitDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCBUYWthc2hpIEl3YWkKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5tb2R1bGVzIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLm1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5MWQ3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5tb2R1bGVzCkBAIC0wLDAgKzEsMTA2IEBACitCdWlsZGluZyBhIG1vZHVsYXIgc291bmQgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgY3VycmVudCBhcyBvZiBsaW51eC0yLjEuODUuIENoZWNrIHRoZSBvdGhlcgorcmVhZG1lIGZpbGVzLCBlc3BlY2lhbGx5IFJFQURNRS5PU1MsIGZvciBpbmZvcm1hdGlvbiBub3Qgc3BlY2lmaWMgdG8KK21ha2luZyBzb3VuZCBtb2R1bGFyLgorCisgIEZpcnN0LCBjb25maWd1cmUgeW91ciBrZXJuZWwuIFRoaXMgaXMgYW4gaWRlYSBvZiB3aGF0IHlvdSBzaG91bGQgYmUKK3NldHRpbmcgaW4gdGhlIHNvdW5kIHNlY3Rpb246CisKKzxNPiBTb3VuZCBjYXJkIHN1cHBvcnQgCisKKzxNPiAxMDAlIFNvdW5kIEJsYXN0ZXIgY29tcGF0aWJsZXMgKFNCMTYvMzIvNjQsIEVTUywgSmF6ejE2KSBzdXBwb3J0IAorCisgIEkgaGF2ZSBTb3VuZEJsYXN0ZXIuIFNlbGVjdCB5b3VyIGNhcmQgZnJvbSB0aGUgbGlzdC4KKworPE0+IEdlbmVyaWMgT1BMMi9PUEwzIEZNIHN5bnRoZXNpemVyIHN1cHBvcnQgCis8TT4gRk0gc3ludGhlc2l6ZXIgKFlNMzgxMi9PUEwtMykgc3VwcG9ydCAKKworICBJZiB5b3UgZG9uJ3Qgc2V0IHRoZXNlLCB5b3Ugd2lsbCBwcm9iYWJseSBmaW5kIHlvdSBjYW4gcGxheSAud2F2IGZpbGVzCitidXQgbm90IC5taWRpLiBBcyB0aGUgaGVscCBmb3IgdGhlbSBzYXlzLCBzZXQgdGhlbSB1bmxlc3MgeW91IGtub3cgeW91cgorY2FyZCBkb2VzIG5vdCB1c2Ugb25lIG9mIHRoZXNlIGNoaXBzIGZvciBGTSBzdXBwb3J0LgorCisgIE9uY2UgeW91IGFyZSBjb25maWd1cmVkLCBtYWtlIHpsaWxvLCBtb2R1bGVzLCBtb2R1bGVzX2luc3RhbGw7IHJlYm9vdC4KK05vdGUgdGhhdCBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IG9yIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBzb3VuZCBpbiB0aGUKK2RyaXZlcnMvc291bmQgZGlyLiBOb3cgb25lIHNpbXBseSBjb25maWd1cmVzIGFuZCBtYWtlcyBvbmUncyBrZXJuZWwgYW5kCittb2R1bGVzIGluIHRoZSB1c3VhbCB3YXkuCisKKyBUaGVuLCBhZGQgdG8geW91ciAvZXRjL21vZHByb2JlLmNvbmYgc29tZXRoaW5nIGxpa2U6CisKK2FsaWFzIGNoYXItbWFqb3ItMTQtKiBzYgoraW5zdGFsbCBzYiAvc2Jpbi9tb2Rwcm9iZSAtaSBzYiAmJiAvc2Jpbi9tb2Rwcm9iZSBhZGxpYl9jYXJkCitvcHRpb25zIHNiIGlvPTB4MjIwIGlycT03IGRtYT0xIGRtYTE2PTUgbXB1X2lvPTB4MzMwCitvcHRpb25zIGFkbGliX2NhcmQgaW89MHgzODggICAgICMgRk0gc3ludGhlc2l6ZXIKKworIEFsdGVybmF0aXZlbHksIGlmIHlvdSBoYXZlIGNvbXBpbGVkIGluIGtlcm5lbCBsZXZlbCBJU0FQblAgc3VwcG9ydDoKKworYWxpYXMgY2hhci1tYWpvci0xNCBzYgorcG9zdC1pbnN0YWxsIHNiIC9zYmluL21vZHByb2JlICItayIgImFkbGliX2NhcmQiCitvcHRpb25zIGFkbGliX2NhcmQgaW89MHgzODgKKworICBUaGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCB0aGUgc291bmQgZHJpdmVyIGFuZCBhbGwgbmVjZXNzYXJ5IGJpdHMgYW5kCitwaWVjZXMgYXV0b2xvYWQgb24gZGVtYW5kLCBhc3N1bWluZyB5b3UgdXNlIGtlcm5lbGQgKGEgc291bmQgY2hvaWNlKSBhbmQKK2F1dG9jbGVhbiB3aGVuIG5vdCBpbiB1c2UuIEFsc28sIG9wdGlvbnMgZm9yIHRoZSBkZXZpY2UgZHJpdmVycyBhcmUKK3NldC4gVGhleSB3aWxsIG5vdCB3b3JrIHdpdGhvdXQgdGhlbS4gQ2hhbmdlIGFzIGFwcHJvcHJpYXRlIGZvciB5b3VyIGNhcmQuCitJZiB5b3UgYXJlIG5vdCB5ZXQgdXNpbmcgdGhlIHZlcnkgY29vbCBrZXJuZWxkLCB5b3Ugd2lsbCBoYXZlIHRvICJtb2Rwcm9iZQorLWsgc2IiIHlvdXJzZWxmIHRvIGdldCB0aGluZ3MgZ29pbmcuIEV2ZW50dWFsbHkgdGhpbmdzIG1heSBiZSBmaXhlZCBzbwordGhhdCB0aGlzIGtsdWRnZXJ5IGlzIG5vdCBuZWNlc3Nhcnk7IGZvciB0aGUgdGltZSBiZWluZywgaXQgc2VlbXMgdG8gd29yaword2VsbC4KKworICBSZXBsYWNlICdzYicgd2l0aCB0aGUgZHJpdmVyIGZvciB5b3VyIGNhcmQsIGFuZCBnaXZlIGl0IHRoZSByaWdodAorb3B0aW9ucy4gVG8gZmluZCB0aGUgZmlsZW5hbWUgb2YgdGhlIGRyaXZlciwgbG9vayBpbgorL2xpYi9tb2R1bGVzLzxrZXJuZWwtdmVyc2lvbj4vbWlzYy4gTWluZSBsb29rcyBsaWtlOgorCithZGxpYl9jYXJkLm8gIyBUaGlzIGlzIHRoZSBnZW5lcmljIE9QTHggZHJpdmVyCitvcGwzLm8gIyBUaGUgT1BMMyBkcml2ZXIKK3NiLm8gIyA8PFRoZSBTb3VuZEJsYXN0ZXIgZHJpdmVyLiBZb3VycyBtYXkgZGlmZmVyLj4+Citzb3VuZC5vICMgVGhlIHNvdW5kIGRyaXZlcgordWFydDQwMS5vICMgVXNlZCBieSBzYiwgbWF5YmUgb3RoZXIgY2FyZHMKKworIFdoaWNoZXZlciBjYXJkIHlvdSBoYXZlLCB0cnkgZmVlZGluZyBpdCB0aGUgb3B0aW9ucyB0aGF0IHdvdWxkIGJlIHRoZQorZGVmYXVsdCBpZiB5b3Ugd2VyZSBtYWtpbmcgdGhlIGRyaXZlciB3aXJlZCwgbm90IGFzIG1vZHVsZXMuIFlvdSBjYW4KK2xvb2sgYXQgZnVuY3Rpb24gcmVmZXJyZWQgdG8gYnkgbW9kdWxlX2luaXQoKSBmb3IgdGhlIGNhcmQgdG8gc2VlIHdoYXQKK2FyZ3MgYXJlIGV4cGVjdGVkLgorCisgTm90ZSB0aGF0IGF0IHByZXNlbnQgdGhlcmUgaXMgbm8gd2F5IHRvIGNvbmZpZ3VyZSB0aGUgaW8sIGlycSBhbmQgb3RoZXIKK3BhcmFtZXRlcnMgZm9yIHRoZSBtb2R1bGFyIGRyaXZlcnMgYXMgb25lIGRvZXMgZm9yIHRoZSB3aXJlZCBkcml2ZXJzLi4gT25lCituZWVkcyB0byBwYXNzIHRoZSBtb2R1bGVzIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMsIGVpdGhlcgord2l0aCAvZXRjL21vZHByb2JlLmNvbmYgb3Igd2l0aCBjb21tYW5kLWxpbmUgYXJncyB0byBtb2Rwcm9iZSwgZS5nLgorCittb2Rwcm9iZSBzYiBpbz0weDIyMCBpcnE9NyBkbWE9MSBkbWExNj01IG1wdV9pbz0weDMzMAorbW9kcHJvYmUgYWRsaWJfY2FyZCBpbz0weDM4OAorCisgcmVjb21tZW5kIHVzaW5nIC9ldGMvbW9kcHJvYmUuY29uZi4KKworUGVyc2lzdGVudCBETUEgQnVmZmVyczoKKworVGhlIHNvdW5kIG1vZHVsZXMgbm9ybWFsbHkgYWxsb2NhdGUgRE1BIGJ1ZmZlcnMgZHVyaW5nIG9wZW4oKSBhbmQKK2RlYWxsb2NhdGUgdGhlbSBkdXJpbmcgY2xvc2UoKS4gTGludXggY2FuIG9mdGVuIGhhdmUgcHJvYmxlbXMgYWxsb2NhdGluZworRE1BIGJ1ZmZlcnMgZm9yIElTQSBjYXJkcyBvbiBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiAxNk1CIFJBTS4gVGhpcyBpcworYmVjYXVzZSBJU0EgRE1BIGJ1ZmZlcnMgbXVzdCBleGlzdCBiZWxvdyB0aGUgMTZNQiBib3VuZGFyeSBhbmQgaXQgaXMgcXVpdGUKK3Bvc3NpYmxlIHRoYXQgd2UgY2FuJ3QgZmluZCBhIGxhcmdlIGVub3VnaCBmcmVlIGJsb2NrIGluIHRoaXMgcmVnaW9uIGFmdGVyCit0aGUgbWFjaGluZSBoYXMgYmVlbiBydW5uaW5nIGZvciBhbnkgYW1vdW50IG9mIHRpbWUuIFRoZSB3YXkgdG8gYXZvaWQgdGhpcworcHJvYmxlbSBpcyB0byBhbGxvY2F0ZSB0aGUgRE1BIGJ1ZmZlcnMgZHVyaW5nIG1vZHVsZSBsb2FkIGFuZCBkZWFsbG9jYXRlCit0aGVtIHdoZW4gdGhlIG1vZHVsZSBpcyB1bmxvYWRlZC4gRm9yIHRoaXMgdG8gYmUgZWZmZWN0aXZlIHdlIG5lZWQgdG8gbG9hZAordGhlIHNvdW5kIG1vZHVsZXMgcmlnaHQgYWZ0ZXIgdGhlIGtlcm5lbCBib290cywgZWl0aGVyIG1hbnVhbGx5IG9yIGJ5IGFuCitpbml0IHNjcmlwdCwgYW5kIGtlZXAgdGhlbSBhcm91bmQgdW50aWwgd2Ugc2h1dCBkb3duLiBUaGlzIGlzIGEgbGl0dGxlCit3YXN0ZWZ1bCBvZiBSQU0sIGJ1dCBpdCBndWFyYW50ZWVzIHRoYXQgc291bmQgYWx3YXlzIHdvcmtzLgorCitUbyBtYWtlIHRoZSBzb3VuZCBkcml2ZXIgdXNlIHBlcnNpc3RlbnQgRE1BIGJ1ZmZlcnMgd2UgbmVlZCB0byBwYXNzIHRoZQorc291bmQubyBtb2R1bGUgYSAiZG1hYnVmPTEiIGNvbW1hbmQtbGluZSBhcmd1bWVudC4gVGhpcyBpcyBub3JtYWxseSBkb25lCitpbiAvZXRjL21vZHByb2JlLmNvbmYgbGlrZSBzbzoKKworb3B0aW9ucyBzb3VuZAkJZG1hYnVmPTEKKworSWYgeW91IGhhdmUgMTZNQiBvciBsZXNzIFJBTSBvciBhIFBDSSBzb3VuZCBjYXJkLCB0aGlzIGlzIHdhc3RlZnVsIGFuZAordW5uZWNlc3NhcnkuIEl0IGlzIHBvc3NpYmxlIHRoYXQgbWFjaGluZSB3aXRoIDE2TUIgb3IgbGVzcyBSQU0gd2lsbCBmaW5kCit0aGlzIG9wdGlvbiB1c2VmdWwsIGJ1dCBpZiB5b3VyIG1hY2hpbmUgaXMgc28gbWVtb3J5LXN0YXJ2ZWQgdGhhdCBpdAorY2Fubm90IGZpbmQgYSA2NEsgYmxvY2sgZnJlZSwgeW91IHdpbGwgYmUgd2FzdGluZyBldmVuIG1vcmUgUkFNIGJ5IGtlZXBpbmcKK3RoZSBzb3VuZCBtb2R1bGVzIGxvYWRlZCBhbmQgdGhlIERNQSBidWZmZXJzIGFsbG9jYXRlZCB3aGVuIHRoZXkgYXJlIG5vdAorbmVlZGVkLiBUaGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIHVwZ3JhZGUgeW91ciBSQU0uIEJ1dCB5b3UgZG8gYWxzbyBoYXZlCit0aGlzIGltcHJvcGVyIHNvbHV0aW9uIGFzIHdlbGwuIFVzZSBpdCB3aXNlbHkuCisKKyAgSSdtIGFmcmFpZCBJIGtub3cgbm90aGluZyBhYm91dCBhbnl0aGluZyBidXQgbXkgc2V0dXAsIGJlaW5nIG1vcmUgb2YgYQordGV4dC1tb2RlIGd1eSBhbnl3YXkuIElmIHlvdSBoYXZlIG9wdGlvbnMgZm9yIG90aGVyIGNhcmRzIG9yIG90aGVyIGhlbHBmdWwKK2hpbnRzLCBzZW5kIHRoZW0gdG8gbWUsIEppbSBCcmF5LCBqYkBhczIyMC5vcmcsIGh0dHA6Ly9hczIyMC5vcmcvamIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUueW1mc2IgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUueW1mc2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4YTdkMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS55bWZzYgpAQCAtMCwwICsxLDEwNyBAQAorTGVnYWN5IGF1ZGlvIGRyaXZlciBmb3IgWU1GN3h4IFBDSSBjYXJkcy4KKworCitGSVJTVCBPRiBBTEwKKz09PT09PT09PT09PQorCisgIFRoaXMgY29kZSByZWZlcmVuY2VzIFlBTUFIQSdzIHNhbXBsZSBjb2RlcyBhbmQgZGF0YSBzaGVldHMuCisgIEkgcmVzcGVjdCBhbmQgdGhhbmsgZm9yIGFsbCBwZW9wbGUgdGhleSBtYWRlIG9wZW4gdGhlIGluZm9ybWF0aW9ucworICBhYm91dCBZTUY3eHggY2FyZHMuCisKKyAgQW5kIHRoaXMgY29kZXMgaGVhdmlseSBiYXNlZCBvbiBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+J3MKKyAgb2xkIFZJQSA4MkN4eHggZHJpdmVyICh2aWE4MmN4eHguYykuIEkgYWxzbyByZXNwZWN0IGhpbS4KKworCitESVNDTElNRVIKKz09PT09PT09PQorCisgVGhpcyBkcml2ZXIgaXMgY3VycmVudGx5IGF0IGVhcmx5IEFMUEhBIHN0YWdlLiBJdCBtYXkgY2F1c2Ugc2VyaW91cworIGRhbWFnZSB0byB5b3VyIGNvbXB1dGVyIHdoZW4gdXNlZC4KKyBQTEVBU0UgVVNFIElUIEFUIFlPVVIgT1dOIFJJU0suCisKKworQUJPVVQgVEhJUyBEUklWRVIKKz09PT09PT09PT09PT09PT09CisKKyAgVGhpcyBjb2RlIGVuYWJsZXMgeW91IHRvIHVzZSB5b3VyIFlNRjcyNFtBLUZdLCBZTUY3NDBbQS1DXSwgWU1GNzQ0LCBZTUY3NTQKKyBjYXJkcy4gV2hlbiBlbmFibGVkLCB5b3VyIGNhcmQgYWN0cyBhcyAiU291bmRCbGFzdGVyIFBybyIgY29tcGF0aWJsZSBjYXJkLgorIEl0IGNhbiBvbmx5IHBsYXkgMjIuMDVrSHogLyA4Yml0IC8gU3RlcmVvIHNhbXBsZXMsIGNvbnRyb2wgZXh0ZXJuYWwgTUlESQorIHBvcnQuCisgSWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgY2FyZCBhcyByZWNlbnQgIjE2LWJpdCIgY2FyZCwgeW91IHNob3VsZCB1c2UKKyBBbHNhIG9yIE9TUy9MaW51eCBkcml2ZXIuIE9mIGNvdXJzZSB5b3UgY2FuIHdyaXRlIG5hdGl2ZSBQQ0kgZHJpdmVyIGZvcgorIHlvdXIgY2FyZHMgOikKKworCitVU0FHRQorPT09PT0KKworICMgbW9kcHJvYmUgeW1mc2IgKG9wdGlvbnMpCisKKworT1BUSU9OUyBGT1IgTU9EVUxFCis9PT09PT09PT09PT09PT09PT0KKworICBpbyAgICAgICAgICAgOiBTQiBiYXNlIGFkZHJlc3MgICAgICgweDIyMCwgMHgyNDAsIDB4MjYwLCAweDI4MCkKKyAgc3ludGhfaW8gICAgIDogT1BMMyBiYXNlIGFkZHJlc3MgICAoMHgzODgsIDB4Mzk4LCAweDNhMCwgMHgzYTgpCisgIGRtYSAgICAgICAgICA6IERNQSBudW1iZXIgICAgICAgICAgKDAsMSwzKQorICBtYXN0ZXJfdm9sdW1lOiBBQyc5NyBQQ00gb3V0IFZvbCAgICgwLTEwMCkKKyAgc3BkaWZfb3V0ICAgIDogU1BESUYtb3V0IGZsYWcgICAgICAoMDpkaXNhYmxlIDE6ZW5hYmxlKQorCisgVGhlc2Ugb3B0aW9ucyB3aWxsIGNoYW5nZSBpbiBmdXR1cmUuLi4KKworCitGUkVRVUVOQ1kKKz09PT09PT09PQorCisgIFdoZW4gcGxheWluZyBzb3VuZHMgdmlhIHRoaXMgZHJpdmVyLCB5b3Ugd2lsbCBoZWFyIGl0cyBwaXRjaCBpcyBzbGlnaHRseQorIGxvd2VyIHRoYW4gb3JpZ2luYWwgc291bmRzLiBTaW5jZSB0aGlzIGRyaXZlciByZWNvZ25pemVzIHlvdXIgY2FyZCBhY3RzCisgd2l0aCAyMS43MzlrSHogc2FtcGxlIHJhdGVzIHJhdGhlciB0aGFuIDIyLjA1MGtIeiAoSSB0aGluayBpdCBtdXN0IGJlCisgaGFyZHdhcmUgcmVzdHJpY3Rpb24pLiBTbyBtYW55IHBsYXllcnMgYmVjb21lIHRvbmUgZGVhZm5lc3MuCisgVG8gcHJldmVudCB0aGlzLCB5b3Ugc2hvdWxkIGV4cHJlc3Mgc29tZSBvcHRpb25zIHRvIHlvdXIgc291bmQgcGxheWVyCisgdGhhdCBzcGVjaWZ5IGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4gRm9yIGV4YW1wbGUsIHRvIHBsYXkgeW91ciBNUDMgZmlsZQorIGNvcnJlY3RseSB3aXRoIG1wZzEyMywgc3BlY2lmeSB0aGUgZnJlcXVlbmN5IGxpa2UgZm9sbG93aW5nOgorCisgICUgIG1wZzEyMyAtciAyMTczOSBmb28ubXAzCisKKworU1BESUYgT1VUCis9PT09PT09PT0KKworICBXaXRoIGluc3RhbGxpbmcgbW9kdWxlcyB3aXRoIG9wdGlvbiAnc3BkaWZfb3V0PTEnLCB5b3UgY2FuIGVuam95IHlvdXIKKyBzb3VuZHMgZnJvbSBTUERJRi1vdXQgb2YgeW91ciBjYXJkIChpZiBpdCBoYWQpLgorIEl0cyBGcyBpcyBmaXhlZCB0byA0OGtIeiAoSXQgbmV2ZXIgbWVhbnMgdGhlIHNhbXBsZSBmcmVxdWVuY3kgYmVjb21lIAorIHVwIHRvIDQ4a0h6LiBBbGwgc291bmRzIHZpYSBTUERJRi1vdXQgYWxzbyAyMmtIeiBzYW1wbGVzKS4gU28geW91cgorIGRpZ2l0YWwtaW4gY2FwYWJsZSBjb21wb25lbnRzIGhhcyB0byBiZSBhYmxlIHRvIGhhbmRsZSA0OGtIeiBGcy4KKworCitDT1BZSU5HCis9PT09PT09CisKKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCitUT0RPCis9PT09CisgKiBzdXBwb3J0IGZvciBtdWx0aXBsZSBjYXJkcworICAgKHNldCB0aGUgZGlmZmVyZW50IFNCX0lPLE1QVV9JTyxPUExfSU8gZm9yIGVhY2ggY2FyZHMpCisKKyAqIHN1cHBvcnQgZm9yIE9QTCAoZG1mbSkgOiBUaGVyZSB3aWxsIGJlIG5vIHJlcXVpcmVtZW50cy4uLiA6LTwKKworCitBVVRIT1IKKz09PT09PQorCisgRGFpc3VrZSBOYWdhbm8gPGJyZWV6ZS5uYWdhbm9AbmlmdHkubmUuanA+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1NvdW5kUHJvIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvU291bmRQcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0ZGIxZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1NvdW5kUHJvCkBAIC0wLDAgKzEsMTA1IEBACitEb2N1bWVudGF0aW9uIGZvciB0aGUgU291bmRQcm8gQ01JODMzMCBleHRlbnNpb25zIGluIHRoZSBXU1MgZHJpdmVyIChhZDE4NDgubykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoIEJlIHN1cmUgdG8gcmVhZCBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DTUk4MzMwIHRvbyApCisKK0lvbiBCYWR1bGVzY3UsIGlvbnV0QGNzLmNvbHVtYmlhLmVkdQorRmVicnVhcnkgMjQsIDE5OTkKKworKGRlcml2ZWQgZnJvbSB0aGUgT1BMMy1TQTIgZG9jdW1lbnRhdGlvbiBieSBTY290dCBNdXJyYXkpCisKK1RoZSBTb3VuZFBybyBDTUk4MzMwIChJU0EpIGlzIGEgY2hpcCB1c3VhbGx5IGZvdW5kIG9uIHNvbWUgVGFpd2FuZXNlCittb3RoZXJib2FyZHMuICBUaGUgb2ZmaWNpYWwgbmFtZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyBDTUk4MzMwLCBTb3VuZFBybworaXMgdGhlIG5pY2tuYW1lIGFuZCB0aGUgYmlnIGluc2NyaXB0aW9uIG9uIHRoZSBjaGlwIGl0c2VsZi4KKworVGhlIGNoaXAgZW11bGF0ZXMgYSBXU1MgYXMgd2VsbCBhcyBhIFNCMTYsIGJ1dCBpdCBoYXMgY2VydGFpbiBkaWZmZXJlbmNlcworaW4gdGhlIG1peGVyIHNlY3Rpb24gd2hpY2ggcmVxdWlyZSBzZXBhcmF0ZSBzdXBwb3J0LiBJdCBhbHNvIGVtdWxhdGVzIGFuCitNUFU0MDEgYW5kIGFuIE9QTDMgc3ludGhlc2l6ZXIsIHNvIHlvdSBwcm9iYWJseSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0Citmb3IgdGhlc2UsIHRvby4KKworVGhlIGNoaXAgaWRlbnRpZmllcyBpdHNlbGYgYXMgYW4gQUQxODQ4LCBidXQgaXRzIG1peGVyIGlzIHNpZ25pZmljYW50bHkKK21vcmUgYWR2YW5jZWQgdGhhbiB0aGUgb3JpZ2luYWwgQUQxODQ4IG9uZS4gSWYgeW91ciBzeXN0ZW0gd29ya3Mgd2l0aAorZWl0aGVyIFdTUyBvciBTQjE2IGFuZCB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcyB3aXRoIHNvbWUgbWl4ZXIgY29udHJvbHMKKyhubyBDRCBhdWRpbywgbm8gbGluZS1pbiwgZXRjKSwgeW91IG1pZ2h0IHdhbnQgdG8gZ2l2ZSB0aGlzIGRyaXZlciBhIHRyeS4KK0RldGVjdGlvbiBzaG91bGQgd29yaywgYnV0IGl0IGhhc24ndCBiZWVuIHdpZGVseSB0ZXN0ZWQsIHNvIGl0IG1pZ2h0IHN0aWxsCittaXMtaWRlbnRpZnkgdGhlIGNoaXAuIFlvdSBjYW4gc3RpbGwgZm9yY2Ugc291bmRwcm89MSBpbiB0aGUgbW9kcHJvYmUKK3BhcmFtZXRlcnMgZm9yIGFkMTg0OC4gUGxlYXNlIGxldCBtZSBrbm93IGlmIGl0IGhhcHBlbnMgdG8geW91LCBzbyBJIGNhbgorYWRqdXN0IHRoZSBkZXRlY3Rpb24gcm91dGluZS4KKworVGhlIGNoaXAgaXMgY2FwYWJsZSBvZiBkb2luZyBmdWxsLWR1cGxleCwgYnV0IHNpbmNlIHRoZSBkcml2ZXIgc2VlcyBpdCBhcyBhbgorQUQxODQ4LCBpdCBjYW5ub3QgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcy4gIE1vcmVvdmVyLCB0aGUgZnVsbC1kdXBsZXggbW9kZSBpcworbm90IGFjaGlldmFibGUgdGhyb3VnaCB0aGUgV1NTIGludGVyZmFjZSwgYi9jIGl0IG5lZWRzIGEgZG1hMTYgbGluZSB3aGljaCBpcworYXNzaWduZWQgb25seSB0byB0aGUgU0IxNiBzdWJkZXZpY2UgKHdpdGggaXNhcG5wKS4gV2luZG93cyBkb2N1bWVudGF0aW9uCitzYXlzIHRoZSB1c2VyIG11c3QgdXNlIFdTUyBQbGF5YmFjayBhbmQgU0IxNiBSZWNvcmRpbmcgZm9yIGZ1bGwtZHVwbGV4LCBzbworaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gZG8gdGhlIHNhbWUgdGhpbmcgdW5kZXIgTGludXguIFlvdSBjYW4gdHJ5IGxvYWRpbmcKK3VwIGJvdGggYWQxODQ4IGFuZCBzYiB0aGVuIHVzZSBvbmUgZm9yIHBsYXliYWNrIGFuZCB0aGUgb3RoZXIgZm9yCityZWNvcmRpbmcuIEkgZG9uJ3Qga25vdyBpZiB0aGlzIHdvcmtzLCBiL2MgSSBoYXZlbid0IHRlc3RlZCBpdC4gQW55d2F5LCBpZgoreW91IHRyeSBpdCwgYmUgdmVyeSBjYXJlZnVsOiB0aGUgU0IxNiBtaXhlciAqbW9zdGx5KiB3b3JrcywgYnV0IGNlcnRhaW4KK3NldHRpbmdzIGNhbiBoYXZlIHVuZXhwZWN0ZWQgZWZmZWN0cy4gVXNlIHRoZSBXU1MgbWl4ZXIgZm9yIGJlc3QgcmVzdWx0cy4KKworVGhlcmUgaXMgYWxzbyBhIFBDSSBTb3VuZFBybyBjaGlwLiBJIGhhdmUgbm90IHNlZW4gdGhpcyBjaGlwLCBzbyBJIGhhdmUKK25vIGlkZWEgaWYgdGhlIGRyaXZlciB3aWxsIHdvcmsgd2l0aCBpdC4gSSBzdXNwZWN0IGl0IHdvbid0LgorCitBcyB3aXRoIFBuUCBjYXJkcywgc29tZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkLiAgVGhlcmUgYXJlIHR3byB3YXlzCitvZiBkb2luZyB0aGlzLiAgVGhlIG1vc3QgY29tbW9uIGlzIHRvIHVzZSB0aGUgaXNhcG5wdG9vbHMgcGFja2FnZSB0bworaW5pdGlhbGl6ZSB0aGUgY2FyZCwgYW5kIHVzZSB0aGUga2VybmVsIG1vZHVsZSBmb3JtIG9mIHRoZSBzb3VuZAorc3Vic3lzdGVtIGFuZCBzb3VuZCBkcml2ZXJzLiAgQWx0ZXJuYXRpdmVseSwgc29tZSBCSU9TJ3MgYWxsb3cgbWFudWFsCitjb25maWd1cmF0aW9uIG9mIGluc3RhbGxlZCBQblAgZGV2aWNlcyBpbiBhIEJJT1MgbWVudSwgd2hpY2ggc2hvdWxkCithbGxvdyB1c2luZyB0aGUgbm9uLW1vZHVsYXIgc291bmQgZHJpdmVycywgaS5lLiBidWlsdCBpbnRvIHRoZSBrZXJuZWwuCitTaW5jZSBpbiB0aGlzIGxhdHRlciBjYXNlIHlvdSBjYW5ub3QgdXNlIG1vZHVsZSBwYXJhbWV0ZXJzLCB5b3Ugd2lsbAoraGF2ZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNvdW5kUHJvIGF0IGNvbXBpbGUgdGltZS4KKworVGhlIElSUSBhbmQgRE1BIHZhbHVlcyBjYW4gYmUgYW55IHRoYXQgYXJlIGNvbnNpZGVyZWQgYWNjZXB0YWJsZSBmb3IgYQorV1NTLiAgQXNzdW1pbmcgeW91J3ZlIGdvdCBpc2FwbnAgYWxsIGhhcHB5LCB0aGVuIHlvdSBzaG91bGQgYmUgYWJsZSB0bworZG8gc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyAod2hpY2ggKm11c3QqIG1hdGNoIHRoZSBpc2FwbnAvQklPUworY29uZmlndXJhdGlvbik6CisKK21vZHByb2JlIGFkMTg0OCBpbz0weDUzMCBpcnE9MTEgZG1hPTAgc291bmRwcm89MQorLWFuZCBtYXliZS0KK21vZHByb2JlIHNiIGlvPTB4MjIwIGlycT01IGRtYT0xIGRtYTE2PTUKKworLXRoZW4tCittb2Rwcm9iZSBtcHU0MDEgaW89MHgzMzAgaXJxPTkKK21vZHByb2JlIG9wbDMgaW89MHgzODgKKworSWYgYWxsIGdvZXMgd2VsbCBhbmQgeW91IHNlZSBubyBlcnJvciBtZXNzYWdlcywgeW91IHNob3VsZCBiZSBhYmxlIHRvCitzdGFydCB1c2luZyB0aGUgc291bmQgY2FwYWJpbGl0aWVzIG9mIHlvdXIgc3lzdGVtLiAgSWYgeW91IGdldCBhbgorZXJyb3IgbWVzc2FnZSB3aGlsZSB0cnlpbmcgdG8gaW5zZXJ0IHRoZSBtb2R1bGUocyksIHRoZW4gbWFrZQorc3VyZSB0aGF0IHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlvdXMgYXJndW1lbnRzIG1hdGNoIHdoYXQgeW91IHNwZWNpZmllZAoraW4geW91ciBpc2FwbnAgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgdGhhdCB0aGVyZSBpcyBubyBjb25mbGljdCB3aXRoCithbm90aGVyIGRldmljZSBmb3IgYW4gSS9PIHBvcnQgb3IgaW50ZXJydXB0LiAgQ2hlY2tpbmcgdGhlIGNvbnRlbnRzIG9mCisvcHJvYy9pb3BvcnRzIGFuZCAvcHJvYy9pbnRlcnJ1cHRzIGNhbiBiZSB1c2VmdWwgdG8gc2VlIGlmIHlvdSdyZQorYnV0dGluZyBoZWFkcyB3aXRoIGFub3RoZXIgZGV2aWNlLgorCitJZiB5b3UgZG8gbm90IHNlZSB0aGUgY2hpcHNldCB2ZXJzaW9uIG1lc3NhZ2UsIGFuZCBub25lIG9mIHRoZSBvdGhlcgorbWVzc2FnZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGxvZyBhcmUgaGVscGZ1bCwgdHJ5IGFkZGluZyAnZGVidWc9MScKK3RvIHRoZSBhZDE4NDggcGFyYW1ldGVycywgZW1haWwgbWUgdGhlIHN5c2xvZyByZXN1bHRzIGFuZCBJJ2xsIGRvCitteSBiZXN0IHRvIGhlbHAuIAorCitMYXN0bHksIGlmIHlvdSdyZSB1c2luZyBtb2R1bGVzIGFuZCB3YW50IHRvIHNldCB1cCBhdXRvbWF0aWMgbW9kdWxlCitsb2FkaW5nIHdpdGgga21vZCwgdGhlIGtlcm5lbCBtb2R1bGUgbG9hZGVyLCBoZXJlIGlzIHRoZSBzZWN0aW9uIEkKK2N1cnJlbnRseSB1c2UgaW4gbXkgY29uZi5tb2R1bGVzIGZpbGU6CisKKyMgU291bmQKK3Bvc3QtaW5zdGFsbCBzb3VuZCBtb2Rwcm9iZSAtayBhZDE4NDg7IG1vZHByb2JlIC1rIG1wdTQwMTsgbW9kcHJvYmUgLWsgb3BsMworb3B0aW9ucyBhZDE4NDggaW89MHg1MzAgaXJxPTExIGRtYT0wCitvcHRpb25zIHNiIGlvPTB4MjIwIGlycT01IGRtYT0xIGRtYTE2PTUKK29wdGlvbnMgbXB1NDAxIGlvPTB4MzMwIGlycT05CitvcHRpb25zIG9wbDMgaW89MHgzODgKKworVGhlIGFib3ZlIGVuc3VyZXMgdGhhdCBhZDE4NDggd2lsbCBiZSBsb2FkZWQgd2hlbmV2ZXIgdGhlIHNvdW5kIHN5c3RlbQoraXMgYmVpbmcgdXNlZC4KKworR29vZCBsdWNrLgorCitJb24KKworTk9UIFJFQUxMWSBURVNURUQ6CistIHJlY29yZGluZworLSByZWNvcmRpbmcgZGV2aWNlIHNlbGVjdGlvbgorLSBmdWxsLWR1cGxleAorCitUT0RPOgorLSBpbXBsZW1lbnQgbWl4ZXIgc3VwcG9ydCBmb3Igc3Vycm91bmQsIGxvdWQsIGRpZ2l0YWwgQ0Qgc3dpdGNoZXMuCistIGNvbWUgdXAgd2l0aCBhIHNjaGVtZSB3aGljaCBhbGxvd3MgcmVjb3JkaW5nIHZvbHVtZXMgZm9yIGVhY2ggc3ViZGV2aWNlLgorVGhpcyBpcyBhIG1ham9yIE9TUyBBUEkgY2hhbmdlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvU291bmRibGFzdGVyIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvU291bmRibGFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODhkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Tb3VuZGJsYXN0ZXIKQEAgLTAsMCArMSw1MyBAQAorbW9kcHJvYmUgc291bmQKK2luc21vZCB1YXJ0NDAxCitpbnNtb2Qgc2IgLi4uCisKK1RoaXMgbG9hZHMgdGhlIGRyaXZlciBmb3IgdGhlIFNvdW5kIEJsYXN0ZXIgYW5kIGFzc29ydGVkIGNsb25lcy4gQ2FyZHMgdGhhdAorYXJlIGNvdmVyZWQgYnkgb3RoZXIgZHJpdmVycyBzaG91bGQgbm90IGJlIHVzaW5nIHRoaXMgZHJpdmVyLgorCitUaGUgU291bmQgQmxhc3RlciBtb2R1bGUgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMKKworaW8JCUkvTyBhZGRyZXNzIG9mIHRoZSBTb3VuZCBCbGFzdGVyIGNoaXAgKDB4MjIwLDB4MjQwLDB4MjYwLDB4MjgwKQoraXJxCQlJUlEgb2YgdGhlIFNvdW5kIEJsYXN0ZXIgY2hpcCAoNSw3LDksMTApCitkbWEJCTgtYml0IERNQSBjaGFubmVsIGZvciB0aGUgU291bmQgQmxhc3RlciAoMCwxLDMpCitkbWExNgkJMTYtYml0IERNQSBjaGFubmVsIGZvciBTQjE2IGFuZCBlcXVpdmFsZW50IGNhcmRzICg1LDYsNykKK21wdV9pbwkJSS9PIGZvciBNUFUgY2hpcCBpZiBwcmVzZW50ICgweDMwMCwweDMzMCkKKworc21fZ2FtZXM9MQlTZXQgaWYgeW91IGhhdmUgYSBMb2dpdGVjaCBzb3VuZG1hbiBnYW1lcworYWNlcj0xCQlTZXQgdGhpcyB0byBkZXRlY3QgY2FyZHMgaW4gc29tZSBBQ0VSIG5vdGVib29rcworbXdhdmVfYnVnPTEJU2V0IGlmIHlvdSBhcmUgdHJ5aW5nIHRvIHVzZSB0aGlzIGRyaXZlciB3aXRoIG13YXZlIChzZWUgb24pCit0eXBlCQlVc2UgdGhpcyB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgY2FyZCB0eXBlCisKK1RoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGFyZSB0YWtlbiBpZiBJU0FQblAgc3VwcG9ydCBpcyBjb21waWxlZCBpbgorCitpc2FwbnA9MAlTZXQgdGhpcyB0byBkaXNhYmxlIElTQVBuUCBkZXRlY3Rpb24gKHVzZSBpbz0weFhYWCBldGMuIGFib3ZlKQorbXVsdGlwbGU9MAlTZXQgdG8gZGlzYWJsZSBkZXRlY3Rpb24gb2YgbXVsdGlwbGUgU291bmRibGFzdGVyIGNhcmRzLgorCQlDb25zaWRlciBpdCBhIGJ1ZyBpZiB0aGlzIG9wdGlvbiBpcyBuZWVkZWQsIGFuZCBzZW5kIGluIGEKKwkJcmVwb3J0LgorcG5wbGVnYWN5PTEJU2V0IHRoaXMgdG8gYmUgYWJsZSB0byB1c2UgYSBQblAgY2FyZChzKSBhbG9uZyB3aXRoIGEgc2luZ2xlCisJCW5vbi1QblAgKGxlZ2FjeSkgY2FyZC4gIEFib3ZlIG9wdGlvbnMgZm9yIGlvLCBpcnEsIGV0Yy4gYXJlCisJCW5lZWRlZCwgYW5kIHdpbGwgYXBwbHkgb25seSB0byB0aGUgbGVnYWN5IGNhcmQuCityZXZlcnNlPTEJUmV2ZXJzZXMgdGhlIG9yZGVyIG9mIHRoZSBzZWFyY2ggaW4gdGhlIFBuUCB0YWJsZS4KK3VhcnQ0MDE9MQlTZXQgdG8gZW5hYmxlIGRldGVjdGlvbiBvZiBtcHUgZGV2aWNlcyBvbiBzb21lIGNsb25lcy4KK2lzYXBucGp1bXA9bglKdW1wcyB0byBzbG90IG4gaW4gdGhlIGRyaXZlcidzIFBuUCB0YWJsZS4gVXNlIHRoZSBzb3VyY2UsCisJCUx1a2UuCisKK1lvdSBtYXkgd2VsbCB3YW50IHRvIGxvYWQgdGhlIG9wbDMgZHJpdmVyIGZvciBzeW50aCBtdXNpYyBvbiBtb3N0IFNCIGFuZAorY2xvbmUgU0IgZGV2aWNlcworCitpbnNtb2Qgb3BsMyBpbz0weDM4OAorCitVc2luZyBNd2F2ZQorCitUbyBtYWtlIHRoaXMgZHJpdmVyIHdvcmsgd2l0aCBNd2F2ZSB5b3UgbXVzdCBzZXQgbXdhdmVfYnVnLiBZb3UgYWxzbyBuZWVkCit0byB3YXJtIGJvb3QgZnJvbSBET1MvV2luZG93cyB3aXRoIHRoZSByZXF1aXJlZCBmaXJtd2FyZSBsb2FkZWQgdW5kZXIgdGhpcworT1MuIElCTSBhcmUgYmVpbmcgZGlmZmljdWx0IGFib3V0IGRvY3VtZW50aW5nIGhvdyB0byBsb2FkIHRoaXMgZmlybXdhcmUuCisKK0F2YW5jZSBMb2dpYyBBTFMwMDcKKworVGhpcyBjYXJkIGlzIHN1cHBvcnRlZDsgc2VlIHRoZSBzZXBhcmF0ZSBmaWxlIEFMUzAwNyBmb3IgZnVsbCBkZXRhaWxzLgorCitBdmFuY2UgTG9naWMgQUxTMTAwCisKK1RoaXMgY2FyZCBpcyBzdXBwb3J0ZWQ7IHNldHVwIHNob3VsZCBiZSBhcyBmb3IgYSBzdGFuZGFyZCBTb3VuZCBCbGFzdGVyIDE2LgorVGhlIGRyaXZlciB3aWxsIGlkZW50aWZ5IHRoZSBhdWRpbyBkZXZpY2UgYXMgYSAiU291bmQgQmxhc3RlciAxNiAoQUxTLTEwMCkiLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvVHJvcGV6KyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1Ryb3BleisKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzYTZiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1Ryb3BleisKQEAgLTAsMCArMSwyNiBAQAorRnJvbTogUGF1bCBCYXJ0b24tRGF2aXMgPHBiZEBvcC5uZXQ+CisKK0hlcmUgaXMgdGhlIGNvbmZpZ3VyYXRpb24gSSB1c2Ugd2l0aCBhIFRyb3BleisgYW5kIG15IG1vZHVsYXIKK2RyaXZlcjoKKworICBhbGlhcyBjaGFyLW1ham9yLTE0IHdhdmVmcm9udAorICBhbGlhcyBzeW50aDAgd2F2ZWZyb250CisgIGFsaWFzIG1peGVyMCBjczQyMzIKKyAgYWxpYXMgYXVkaW8wIGNzNDIzMgorICBwcmUtaW5zdGFsbCB3YXZlZnJvbnQgbW9kcHJvYmUgIi1rIiAiY3M0MjMyIgorICBwb3N0LWluc3RhbGwgd2F2ZWZyb250IG1vZHByb2JlICItayIgIm9wbDMiCisgIG9wdGlvbnMgd2F2ZWZyb250IGlvPTB4MjAwIGlycT05CisgIG9wdGlvbnMgY3M0MjMyIHN5bnRoaXJxPTkgc3ludGhpbz0weDIwMCBpbz0weDUzMCBpcnE9NSBkbWE9MSBkbWEyPTAKKyAgb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CisKK1RoaW5ncyB0byBub3RlOiAKKworICAgICAgIHRoZSB3YXZlZnJvbnQgb3B0aW9ucyAiaW8iIGFuZCAiaXJxIiAqKipNVVNUKioqIG1hdGNoIHRoZSAic3ludGhpbyIKKyAgICAgICBhbmQgInN5bnRoaXJxIiBjczQyMzIgb3B0aW9ucy4KKworICAgICAgIHlvdSBjYW4gZG8gd2l0aG91dCB0aGUgb3BsMyBtb2R1bGUgaWYgeW91IGRvbid0CisgICAgICAgd2FudCB0byB1c2UgdGhlIE9QTC9bMzRdIHN5bnRoIG9uIHRoZSBzb3VuZGNhcmQKKworICAgICAgIHRoZSBvcGwzIGlvIHBhcmFtZXRlciBpcyBjb252ZW50aW9uYWxseSBub3QgYWRqdXN0YWJsZS4KKworUGxlYXNlIHNlZSBkcml2ZXJzL3NvdW5kL1JFQURNRS53YXZlZnJvbnQgZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1ZJQS1jaGlwc2V0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvVklBLWNoaXBzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4NjUyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1ZJQS1jaGlwc2V0CkBAIC0wLDAgKzEsNDMgQEAKK1J1bm5pbmcgc291bmQgY2FyZHMgb24gVklBIGNoaXBzZXRzCisKK28JVGhlcmUgYXJlIHByb2JsZW1zIHdpdGggVklBIGNoaXBzZXRzIGFuZCBzb3VuZCBjYXJkcyB0aGF0IGFwcGVhciB0bworCWxvY2sgdGhlIGhhcmR3YXJlIHNvbGlkbHkuIFRlc3QgcHJvZ3JhbXMgdW5kZXIgRE9TIGhhdmUgdmVyaWZpZWQgdGhlCisJcHJvYmxlbSBleGlzdHMgb24gYXQgbGVhc3Qgc29tZSAoYnV0IGFwcGFyZW50bHkgbm90IGFsbCkgVklBIGJvYXJkcworCitvCVZJQSBoYXZlIHNvIGZhciBmYWlsZWQgdG8gYm90aGVyIHRvIGFuc3dlciBzdXBwb3J0IG1haWwgb24gdGhlIHN1YmplY3QKKwlzbyBpZiB5b3UgYXJlIGEgVklBIGVuZ2luZWVyIGZlZWxpbmcgYWdncmlldmVkIGFzIHlvdSByZWFkIHRoaXMgCisJZG9jdW1lbnQgZ28gY2hhc2UgeW91ciBvd24gcGVvcGxlLiBJZiB0aGVyZSBpcyBhIHdvcmthcm91bmQgcGxlYXNlCisJbGV0IHVzIGtub3cgc28gd2UgY2FuIGltcGxlbWVudCBpdC4KKworCitDZXJ0YWluIHBhdHRlcm5zIG9mIElTQSBETUEgYWNjZXNzIHVzZWQgZm9yIG1vc3QgUEMgc291bmQgY2FyZHMgY2F1c2UgdGhlCitWSUEgY2hpcHNldHMgdG8gbG9jayB1cC4gRnJvbSB0aGUgY29sbGVjdGVkIHJlcG9ydHMgdGhpcyBhcHBlYXJzIHRvIGNvdmVyIGEKK3dpZGUgcmFuZ2Ugb2YgYm9hcmRzLiBTb21lIGFsc28gbG9jayB1cCB3aXRoIHNvdW5kIGNhcmRzIHVuZGVyIFdpbiogYXMgd2VsbC4KKworTGludXggaW1wbGVtZW50cyBhIHdvcmthcm91bmQgcHJvdmlkaW5nIHlvdXIgY2hpcHNldCBpcyBQQ0kgYW5kIHlvdSBjb21waWxlZAord2l0aCBQQ0kgUXVpcmtzIGVuYWJsZWQuIElmIHNvIHlvdSB3aWxsIHNlZSBhIG1lc3NhZ2UKKwkiQWN0aXZhdGluZyBJU0EgRE1BIGJ1ZyB3b3JrYXJvdW5kcyIKKworZHVyaW5nIGJvb3RpbmcuIElmIHlvdSBoYXZlIGEgVklBIFBDSSBjaGlwc2V0IHRoYXQgaGFuZ3Mgd2hlbiB5b3UgdXNlIHRoZQorc291bmQgYW5kIGlzIG5vdCBnZW5lcmF0aW5nIHRoaXMgbWVzc2FnZSBldmVuIHdpdGggUENJIHF1aXJrcyBlbmFibGVkCitwbGVhc2UgcmVwb3J0IHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgbGludXgta2VybmVsIGxpc3QgKHNlZSBSRVBPUlRJTkctQlVHUykuCisKK0lmIHlvdSBhcmUgb25lIG9mIHRoZSB0aW55IG51bWJlciBvZiB1bmZvcnR1bmF0ZXMgd2l0aCBhIDQ4NiBJU0EvVkxCIFZJQQorY2hpcHNldCBib2FyZCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIHRvIGJ1aWxkIGEgc3BlY2lhbCBrZXJuZWwgZm9yCit5b3VyIGJvYXJkCisKKwllZGl0IGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvZG1hLmgKKworY2hhbmdlCisKKyNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgCSgwKQorCit0bworCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5IAkoMSkKKworYW5kIHJlYnVpbGQgYSBrZXJuZWwgd2l0aG91dCBQQ0kgcXVpcmsgc3VwcG9ydC4KKworCitPdGhlciB0aGFuIHRoaXMgcGFydGljdWxhciBnbGl0Y2ggdGhlIFZJQSBbTV1WUCogY2hpcHNldHMgYXBwZWFyIHRvIHdvcmsKK3BlcmZlY3RseSB3aXRoIExpbnV4LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvVklCUkExNiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1ZJQlJBMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhNWE0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1ZJQlJBMTYKQEAgLTAsMCArMSw4MCBAQAorU291bmQgQmxhc3RlciAxNlggVmlicmEgYWRkZW5kdW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitieSBNYXJpdXMgSWxpb2FlYSA8bWFyaXVzaUBwcm90di5ybz4KKyAgIFN0ZWZhbiBMYXVkYXQgIDxzdGVmYW5AYXNpdC5ybz4KKworU2F0IE1hciA2IDIzOjU1OjI3IEVFVCAxOTk5CisKKwkJCUhlbGxvIGFnYWluLAorCQorCVBsYXlpbmcgd2l0aCBhIFNCIFZpYnJhIDE2eCBzb3VuZGNhcmQgd2UgZm91bmQgaXQgdmVyeSBkaWZmaWN1bHQKK3RvIHNldHVwIGJlY2F1c2UgdGhlIGtlcm5lbCByZXBvcnRlZCBhIGxvdCBvZiBETUEgZXJyb3JzIGFuZCB3b3VsZG4ndAorc2ltcGx5IHBsYXkgYW55IHNvdW5kLgorCUEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0aGF0IHRoZSB2aWJyYTE2eCBjaGlwIGZ1bGwtZHVwbGV4IGZhY2lsaXR5CitpcyBuZWl0aGVyIHN0aWxsIGV4cGxvaXRlZCBieSB0aGUgc2IgZHJpdmVyIGZvdW5kIGluIHRoZSBsaW51eCBrZXJuZWwgCisodHJpZWQgaXQgd2l0aCBhIDIuMi4yLWFjNyksIG5vciBpbiB0aGUgY29tbWVyY2lhbCBPU1MgcGFja2FnZSAoaXQgcmVwb3J0cworaXQgYXMgaGFsZi1kdXBsZXggc291bmRjYXJkKS4gT2gsIEkgYWxtb3N0IGZvcmdvdCwgdGhlIFJlZEhhdCBzbmRjb25maWcKK2ZhaWxlZCBkZXRlY3RpbmcgaXQgOykKKwlTbywgdGhlIGJpZyBwcm9ibGVtIHN0aWxsIHJlbWFpbnMsIGJlY2F1c2UgdGhlIHNiIG1vZHVsZSB3YW50cyBhCis4LWJpdCBhbmQgYSAxNi1iaXQgZG1hLCB3aGljaCB3ZSBjb3VsZCBub3QgYWxsb2NhdGUgZm9yIHZpYnJhLi4uIGl0IHN1cHBvcnRzCitvbmx5IHR3byA4LWJpdCBkbWEgY2hhbm5lbHMsIHRoZSBzZWNvbmQgb25lIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBtb2R1bGUKK2FzIGEgMTYgYml0IGNoYW5uZWwsIHRoZSBrZXJuZWwgd2lsbCB5aWVsZCBhYm91dCB0aGF0IGJ1dCBldmVyeXRoaW5nIHdpbGwKK2JlIG9rYXksIHRydXN0IHVzLiAKKwlUaGUgb25seSBpbmNvbnZlbmllbnQgeW91IG1heSBmaW5kIGlzIHRoYXQgeW91IHdpbGwgaGF2ZQorc29tZSBzb3VuZCBwbGF5aW5nIGppdHRlcnMgaWYgeW91IGhhdmUgSEREIGRtYSBzdXBwb3J0IGVuYWJsZWQgLSBidXQgdGhpcword2lsbCBoYXBwZW4gd2l0aCBhbG1vc3QgYWxsIHNvdW5kY2FyZHMuLi4KKworCUEgZnVsbHkgd29ya2luZyBpc2FwbnAuY29uZiBpcyBqdXN0IGhlcmU6CisKKzxzbmlwIGhlcmU+CisKKyhSRUFEUE9SVCAweDAyMDMpCisoSVNPTEFURSBQUkVTRVJWRSkKKyhJREVOVElGWSAqKQorKFZFUkJPU0lUWSAyKQorKENPTkZMSUNUIChJTyBGQVRBTCkoSVJRIEZBVEFMKShETUEgRkFUQUwpKE1FTSBGQVRBTCkpICMgb3IgV0FSTklORworIyBTQiAxNiBhbmQgT1BMMyBkZXZpY2VzCisoQ09ORklHVVJFIENUTDAwZjAvLTEgKExEIDAKKyhJTlQgMCAoSVJRIDUgKE1PREUgK0UpKSkKKyhETUEgMCAoQ0hBTk5FTCAxKSkKKyhETUEgMSAoQ0hBTk5FTCAzKSkKKyhJTyAwIChTSVpFIDE2KSAoQkFTRSAweDAyMjApKQorKElPIDIgKFNJWkUgNCkgKEJBU0UgMHgwMzg4KSkKKyhOQU1FICJDVEwwMGYwLy0xWzBde0F1ZGlvICAgICAgICAgICAgICAgfSIpCisoQUNUIFkpCispKQorCisjIEpveXN0aWNrIGRldmljZSAtIG9ubHkgaWYgeW91IG5lZWQgaXQgOi0vCisKKyhDT05GSUdVUkUgQ1RMMDBmMC8tMSAoTEQgMQorKElPIDAgKFNJWkUgMSkgKEJBU0UgMHgwMjAwKSkKKyhOQU1FICJDVEwwMGYwLy0xWzFde0dhbWUgICAgICAgICAgICAgICAgfSIpCisoQUNUIFkpCispKQorKFdBSVRGT1JLRVkpCisKKzxlbmQgb2Ygc25pcHBpbmc+CisKKwlTbywgYWZ0ZXIgYSBnb29kIGtlcm5lbCBtb2R1bGVzIGNvbXBpbGF0aW9uIGFuZCBhICdkZXBtb2QgLWEga2VybmVsX3ZlcicKK3lvdSBtYXkgd2FudCB0bzoKKworbW9kcHJvYmUgc2IgaW89MHgyMjAgaXJxPTUgZG1hPTEgZG1hMTY9MworCisJT3IsIHRha2UgdGhlIGhhcmQgd2F5OgorCittb2Rwcm9iZSBzb3VuZGNvcmUKK21vZHByb2JlIHNvdW5kCittb2Rwcm9iZSB1YXJ0NDAxCittb2Rwcm9iZSBzYiBpbz0weDIyMCBpcnE9NSBkbWE9MSBkbWExNj0zCisjIGRvIHlvdSBuZWVkIE1JREk/Cittb2Rwcm9iZSBvcGwzPTB4Mzg4CisKKwlKdXN0IGluIGNhc2UsIHRoZSBrZXJuZWwgc291bmQgc3VwcG9ydCBzaG91bGQgYmU6CisKK0NPTkZJR19TT1VORD1tCitDT05GSUdfU09VTkRfT1NTPW0KK0NPTkZJR19TT1VORF9TQj1tCisJCisJRW5qb3kgeW91ciBuZXcgbm9pc3kgTGludXggYm94ISA7KQorCQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9XYXZlQXJ0aXN0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvV2F2ZUFydGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGYzNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvV2F2ZUFydGlzdApAQCAtMCwwICsxLDE3MCBAQAorCisgKHRoZSBmb2xsb3dpbmcgaXMgZnJvbSB0aGUgYXJtbGludXggQ1ZTKQorCisgV2F2ZUFydGlzdCBtaXhlciBhbmQgdm9sdW1lIGxldmVscyBjYW4gYmUgYWNjZXNzZWQgdmlhIHRoZXNlIGNvbW1hbmRzOgorCisgIG5uMzAJcmVhZCByZWdpc3RlcnMgbm4sIHdoZXJlIG5uID0gMDAgLSAwOSBmb3IgbWl4ZXIgc2V0dGluZ3MKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMGEgLSAxMyBmb3IgY2hhbm5lbCB2b2x1bWVzCisgIG1tMzEJd3JpdGUgdGhlIHZvbHVtZSBzZXR0aW5nIGluIHBhaXJzLCB3aGVyZSBtbSA9IChubiAtIDEwKSAvIDIKKyAgcnIzMgl3cml0ZSB0aGUgbWl4ZXIgc2V0dGluZ3MgaW4gcGFpcnMsIHdoZXJlIHJyID0gbm4vMgorICB4eDMzCXJlc2V0IGFsbCBzZXR0aW5ncyB0byBkZWZhdWx0CisgIDB5MzQJc2VsZWN0IG1vbm8gc291cmNlLCB5PTAgPSBsZWZ0LCB5PTEgPSByaWdodAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cworIG5uICAxNSAgMTQgMTMgMTIgMTEgICAxMCAgICA5ICAgICA4ICAgICA3ICAgIDYgICAgIDUgICAgIDQgICAgIDMgICAgIDIgICAgIDEgICAgIDAKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDAwIHwgMCB8IDAgIDAgIDEgIDEgfCBsZWZ0IGxpbmUgbWl4ZXIgZ2FpbiAgICAgICB8IGxlZnQgYXV4MSBtaXhlciBnYWluICAgICAgICB8bG11dGV8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwMSB8IDAgfCAwICAxICAwICAxIHwgbGVmdCBhdXgyIG1peGVyIGdhaW4gICAgICAgfCByaWdodCAyIGxlZnQgbWljIGdhaW4gICAgICAgfG1tdXRlfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDIgfCAwIHwgMCAgMSAgMSAgMSB8IGxlZnQgbWljIG1peGVyIGdhaW4gICAgICAgIHwgbGVmdCBtaWMgIHwgbGVmdCBtaXhlciBnYWluIHxkaXRoIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDAzIHwgMCB8IDEgIDAgIDAgIDEgfCBsZWZ0IG1peGVyIGlucHV0IHNlbGVjdCAgICAgICAgICAgICAgICB8bHJmZyB8IGxlZnQgQURDIGdhaW4gICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwNCB8IDAgfCAxICAwICAxICAxIHwgcmlnaHQgbGluZSBtaXhlciBnYWluICAgICAgfCByaWdodCBhdXgxIG1peGVyIGdhaW4gICAgICAgfHJtdXRlfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDUgfCAwIHwgMSAgMSAgMCAgMSB8IHJpZ2h0IGF1eDIgbWl4ZXIgZ2FpbiAgICAgIHwgbGVmdCAyIHJpZ2h0IG1pYyBnYWluICAgICAgIHx0ZXN0IHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDA2IHwgMCB8IDEgIDEgIDEgIDEgfCByaWdodCBtaWMgbWl4ZXIgZ2FpbiAgICAgICB8IHJpZ2h0IG1pYyB8cmlnaHQgbWl4ZXIgZ2FpbiB8cmJ5cHN8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwNyB8IDEgfCAwICAwICAwICAxIHwgcmlnaHQgbWl4ZXIgc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgfHJyZmcgfCByaWdodCBBREMgZ2FpbiAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDggfCAxIHwgMCAgMCAgMSAgMSB8IG1vbm8gbWl4ZXIgZ2FpbiAgICAgICAgICAgIHxyaWdodCBBREMgbXV4IHNlbHxsZWZ0IEFEQyBtdXggc2VsIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDA5IHwgMSB8IDAgIDEgIDAgIDEgfGxvb3BifGxlZnQgbGlub3V0fGxvb3B8QURDY2h8VHhGY2h8T2ZmQ0R8dGVzdCB8bG9vcGJ8bG9vcGJ8b3NhbXB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwYSB8IDAgfCBsZWZ0IFBDTSBjaGFubmVsIHZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMGIgfCAwIHwgcmlnaHQgUENNIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDBjIHwgMCB8IGxlZnQgRk0gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwZCB8IDAgfCByaWdodCBGTSBjaGFubmVsIHZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMGUgfCAwIHwgbGVmdCB3YXZldGFibGUgY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDBmIHwgMCB8IHJpZ2h0IHdhdmV0YWJsZSBjaGFubmVsIHZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAxMCB8IDAgfCBsZWZ0IFBDTSBleHBhbnNpb24gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMTEgfCAwIHwgcmlnaHQgUENNIGV4cGFuc2lvbiBjaGFubmVsIHZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDEyIHwgMCB8IGxlZnQgRk0gZXhwYW5zaW9uIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAxMyB8IDAgfCByaWdodCBGTSBleHBhbnNpb24gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisKKyBsbXV0ZTogbGVmdCBtdXRlCisgbW11dGU6IG1vbm8gbXV0ZQorIGRpdGg6IGRpdGhkcworIGxyZmc6Cisgcm11dGU6IHJpZ2h0IG11dGUKKyByYnlwczogcmlnaHQgYnlwYXNzCisgcnJmZzoKKyBBRENjaDoKKyBUeEZjaDoKKyBPZmZDRDoKKyBvc2FtcDoKKworIEFuZCB0aGUgZm9sbG93aW5nIGRpYWdyYW0gaXMgZGVyaXZlZCBmcm9tIHRoZSBkZXNjcmlwdGlvbiBpbiB0aGUgQ1ZTIGFyY2hpdmU6CisKKyBNSUMgTCAobW91dGhwaWVjZSkKKyAgICstLS0tLS0rCisgLS0+UHJlQW1wPi1cCisgICArLS1eLS0tKyB8CisgICAgICB8ICAgICB8CisgICAgcjJiNC01ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0rCisgICAgICAgLy0tLS0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+NSAgICAgICB8CisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAgICAgfCAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+NCAgICAgICB8CisgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAgICAgfCB8IC8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+MyAxb2Y1ICB8ICArLS0tKworICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbXV4ICAgPi0tPkFNUD4tLT4gQURDIEwKKyAgICAgICB8IHwgfCAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4yICAgICAgIHwgICstXi0rCisgICAgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwKKyBMaW5lICB8IHwgfCB8ICstLS0tKyAgKy0tLS0tLSsgICstLS0rICAvLS0tLT4xICAgICAgIHwgIHIzYjMtMAorIC0tLS0tLS0tLS0tLSotPm11dGU+LS0+IEdhaW4gPi0tPiAgIHwgIHwgICAgfCAgICAgICAgfAorICBMICAgIHwgfCB8ICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIHwgICotPjAgICAgICAgfAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICAgKy0tLV4tLS0tKworIEF1eDIgIHwgfCB8ICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIHwgICAgICAgIHwKKyAtLS0tLS0tLS0tKi0tLT5tdXRlPi0tPiBHYWluID4tLT4gTSB8ICB8ICAgICByOGIwLTIKKyAgTCAgICB8IHwgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICB8CisgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgXC0tLS0tLVwKKyBBdXgxICB8IHwgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorIC0tLS0tLS0tKi0tLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBJIHwgICAgICAgICB8CisgIEwgICAgfCAgICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgICAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICstLS0rICB8CisgICAgICAgKi0tLS0tLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IFggPi0tPkFNUD4tLSoKKyAgICAgICB8ICAgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICArLV4tKyAgfAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgfCAgICB8CisgICAgICAgfCAgICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgcjJiMS0zIHwgIAorICAgICAgIHwgLy0tLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBFIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCB8IC8tLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IFIgfCAgICAgICAgIHwKKyAgICAgICB8IHwgfCAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICB8ICAgcjliOC05CisgICAgICAgfCB8IHwgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwgICAgIHwKKyAgICAgICB8IHwgfCAvLT5tdXRlPi0tPiBHYWluID4tLT4gICB8ICAgICAgICAgfCArLS0tdi0tLSsKKyAgICAgICB8IHwgfCB8ICstLS0tKyAgKy0tLS0tLSsgICstLS0rICAgICAgIC8tKi0+MCAgICAgIHwKKyBEQUMgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgIHwKKyAtLS0tLS0tLS0tLS0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+PyAgICAgIHwgICstLS0tKworICBMICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIE11eCAgPi0tPm11dGU+LS0+IEwgb3V0cHV0CisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8tPj8gICAgICB8ICArLS1eLSsKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8ICAgICAgIHwgICAgIHwKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8tLS0tLS0tLS0+PyAgICAgIHwgICByMGIwCisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHwgKy0tLS0tLS0rCisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHwKKyBNb25vICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgfCArLS0tLS0tLSsKKyAtLS0tLS0tLS0tKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIFwtLS0+ICAgICAgIHwgICstLS0tKworICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8IHwgIE1peCAgPi0tPm11dGU+LS0+IE1vbm8gb3V0cHV0CisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICotPiAgICAgICB8ICArLS1eLSsKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCArLS0tLS0tLSsgICAgIHwKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICByMWIwCisgREFDICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKy0tLS0tLS0rCisgLS0tLS0tLS0tLS0tKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLS0tLS0tLS0tPjEgICAgICB8ICArLS0tLSsKKyAgUiAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICBNdXggID4tLT5tdXRlPi0tPiBSIG91dHB1dAorICAgICAgIHwgfCB8IHwgKy0tLS0rICArLS0tLS0tKyAgKy0tLSsgICAgICAgICAqLT4wICAgICAgfCAgKy0tXi0rCisgICAgICAgfCB8IHwgXC0+bXV0ZT4tLT4gR2FpbiA+LS0+ICAgfCAgICAgICAgIHwgKy0tLV4tLS0rICAgICB8CisgICAgICAgfCB8IHwgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwgICAgIHwgICAgICAgcjViMAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICB8ICAgcjZiMAorICAgICAgIHwgfCB8ICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCB8IFwtLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IE0gfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8ICotLS0tLT5tdXRlPi0tPiBHYWluID4tLT4gSSB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICArLS0tKyAgfAorICAgICAgIFwtLS0tLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBYID4tLT5BTVA+LS0qCisgICAgICAgICB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgKy1eLSsgIHwKKyAgICAgIC8tLS8gICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgIHwgICAgfAorIEF1eDEgfCAgICAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIHI2YjEtMyB8CisgLS0tLS0tLSotLS0tLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IEUgfCAgICAgICAgIHwKKyAgUiAgIHwgfCAgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICB8CisgQXV4MiB8IHwgICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgLy0tLS0tLS8KKyAtLS0tLS0tLS0qLS0tLT5tdXRlPi0tPiBHYWluID4tLT4gUiB8ICB8CisgIFIgICB8IHwgfCAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgfAorICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICAgKy0tLS0tLS0tKworIExpbmUgfCB8IHwgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIHwgICotPjAgICAgICAgfAorIC0tLS0tLS0tLS0tKi0tPm11dGU+LS0+IEdhaW4gPi0tPiAgIHwgIHwgICAgfCAgICAgICAgfAorICBSICAgfCB8IHwgfCAgKy0tLS0rICArLS0tLS0tKyAgKy0tLSsgIFwtLS0tPjEgICAgICAgfAorICAgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgfCB8IHwgXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjIgICAgICAgfCAgKy0tLSsKKyAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE11eCAgID4tLT5BTVA+LS0+IEFEQyBSCisgICAgICB8IHwgXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+MyAgICAgICB8ICArLV4tKworICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICB8CisgICAgICB8IFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+NCAgICAgICB8ICByN2IzLTAKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKyAgICAgIFwtLS0tLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT41ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS1eLS0tLSsKKyAgICByNmI0LTUgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHI4YjMtNQorICAgKy0tdi0tLSsgfAorIC0tPlByZUFtcD4tLworICAgKy0tLS0tLSsKKyBNSUMgUiAoZWxlY3RyZXQgbWljKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvV2F2ZWZyb250IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvV2F2ZWZyb250Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjU3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9XYXZlZnJvbnQKQEAgLTAsMCArMSwzMzkgQEAKKwkgICAgIEFuIE9TUy9GcmVlIERyaXZlciBmb3IgV2F2ZUZyb250IHNvdW5kY2FyZHMKKwkgICAgICAgKFR1cnRsZSBCZWFjaCBNYXVpLCBUcm9wZXosIFRyb3BleiBQbHVzKQorCisJCSAgICAgUGF1bCBCYXJ0b24tRGF2aXMsIEp1bHkgMTk5OAorCisJCQkgIFZFUlNJT04gMC4yLjUKKworRHJpdmVyIFN0YXR1cworLS0tLS0tLS0tLS0tLQorCitSZXF1aXJlczogS2VybmVsIDIuMS4xMDYgb3IgbGF0ZXIgKHRoZSBkcml2ZXIgaXMgaW5jbHVkZWQgd2l0aCBrZXJuZWxzCisyLjEuMTA5IGFuZCBhYm92ZSkKKwkgIAorQXMgb2YgNy8yMi8xOTk4LCB0aGlzIGRyaXZlciBpcyBjdXJyZW50bHkgaW4gKkJFVEEqIHN0YXRlLiBUaGlzIG1lYW5zCit0aGF0IGl0IGNvbXBpbGVzIGFuZCBydW5zLCBhbmQgdGhhdCBJIHVzZSBpdCBvbiBteSBzeXN0ZW0gKExpbnV4CisyLjEuMTA2KSB3aXRoIHNvbWUgcmVhc29uYWJseSBkZW1hbmRpbmcgYXBwbGljYXRpb25zIGFuZCB1c2VzLiAgSQorYmVsaWV2ZSB0aGUgY29kZSBpcyBhcHByb2FjaGluZyBhbiBpbml0aWFsICJmaW5pc2hlZCIgc3RhdGUgdGhhdAorcHJvdmlkZXMgYnVnLWZyZWUgc3VwcG9ydCBmb3IgdGhlIFRyb3BleiBQbHVzLgorCitQbGVhc2Ugbm90ZSB0aGF0IHRvIGRhdGUsIHRoZSBkcml2ZXIgaGFzIE9OTFkgYmVlbiB0ZXN0ZWQgb24gYSBUcm9wZXoKK1BsdXMuIEkgd291bGQgdmVyeSBtdWNoIGxpa2UgdG8gaGVhciAoYW5kIGhlbHAgb3V0KSBwZW9wbGUgd2l0aCBUcm9wZXoKK2FuZCBNYXVpIGNhcmRzLCBzaW5jZSBJIHRoaW5rIHRoZSBkcml2ZXIgY2FuIHN1cHBvcnQgdGhvc2UgY2FyZHMgYXMKK3dlbGwuIAorCitGaW5hbGx5LCB0aGUgZHJpdmVyIGhhcyBub3QgYmVlbiB0ZXN0ZWQgKG9yIGV2ZW4gY29tcGlsZWQpIGFzIGEgc3RhdGljCisobm9uLW1vZHVsYXIpIHBhcnQgb2YgdGhlIGtlcm5lbC4gQWxhbiBDb3gncyBnb29kIHdvcmsgaW4gbW9kdWxhcml6aW5nCitPU1MvRnJlZSBmb3IgTGludXggbWFrZXMgdGhpcyByYXRoZXIgdW5uZWNlc3NhcnkuCisKK1NvbWUgUXVlc3Rpb25zCistLS0tLS0tLS0tLS0tLQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiswKSBXaGF0IGRvZXMgdGhpcyBkcml2ZXIgZG8gdGhhdCB0aGUgbWF1aSBkcml2ZXIgZGlkIG5vdCA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyogY2FuIGZ1bGx5IGluaXRpYWxpemUgYSBXYXZlRnJvbnQgY2FyZCBmcm9tIGNvbGQgYm9vdCAtIG5vIERPUyAKKyAgICAgICAgICB1dGlsaXRpZXMgbmVlZGVkCisqIHdvcmtpbmcgcGF0Y2gvc2FtcGxlL3Byb2dyYW0gbG9hZGluZyBhbmQgdW5sb2FkaW5nICh0aGUgbWF1aQorICAgICAgZHJpdmVyIGRpZG4ndCBkb2N1bWVudCBob3cgdG8gbWFrZSB0aGlzIHdvcmssIGFuZCBhc3N1bWVkCisgICAgICB1c2VyLWxldmVsIHByZXBhcmF0aW9uIG9mIHRoZSBwYXRjaCBkYXRhIGZvciB3cml0aW5nCisgICAgICB0byB0aGUgYm9hcmQuIGljay4pCisqIGZ1bGwgdXNlci1sZXZlbCBhY2Nlc3MgdG8gYWxsIFdhdmVGcm9udCBjb21tYW5kcworKiBmb3IgdGhlIFRyb3BleiBQbHVzLCAocHJpbWl0aXZlKSBjb250cm9sIG9mIHRoZSBZU1MyMjUgRlggcHJvY2Vzc29yCisqIFZpcnR1YWwgTUlESSBtb2RlIHN1cHBvcnRlZCAtIDIgTUlESSBkZXZpY2VzIGFjY2Vzc2libGUgdmlhIHRoZQorICAgICAgICAgIFdhdmVGcm9udCdzIE1QVTQwMS9VQVJUIGVtdWxhdGlvbi4gT25lCisJICBhY2Nlc3NlcyB0aGUgV2F2ZUZyb250IHN5bnRoLCB0aGUgb3RoZXIgYWNjZXNzZXMgdGhlCisJICBleHRlcm5hbCBNSURJIGNvbm5lY3Rvci4gRnVsbCBNSURJIHJlYWQvd3JpdGUgc2VtYW50aWNzCisJICBmb3IgYm90aCBkZXZpY2VzLgorKiBPU1MtY29tcGxpYW50IC9kZXYvc2VxdWVuY2VyIGludGVyZmFjZSBmb3IgdGhlIFdhdmVGcm9udCBzeW50aCwKKwkgIGluY2x1ZGluZyBuYXRpdmUgYW5kIEdVUy1mb3JtYXQgcGF0Y2ggZG93bmxvYWRpbmcuCisqIHNlbWktaW50ZWxsaWdlbnQgcGF0Y2ggbWFuYWdlbWVudCAocHJvdG90eXBpY2FsIGF0IHRoaXMgcG9pbnQpCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzEpIFdoYXQgdG8gZG8gYWJvdXQgTUlESSBpbnRlcmZhY2VzID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIFRyb3BleiBQbHVzIChhbmQgcGVyaGFwcyBvdGhlciBXRiBjYXJkcykgY2FuIGluIHRoZW9yeSBzdXBwb3J0IHVwCit0byAyIHBoeXNpY2FsIE1JREkgaW50ZXJmYWNlcy4gT25lIG9mIHRoZXNlIGlzIGNvbm5lY3RlZCB0byB0aGUKK0lDUzIxMTUgY2hpcCAodGhlIFdhdmVGcm9udCBzeW50aCBpdHNlbGYpIGFuZCBpcyBjb250cm9sbGVkIGJ5CitNUFUvVUFSVC00MDEgZW11bGF0aW9uIGNvZGUgcnVubmluZyBhcyBwYXJ0IG9mIHRoZSBXYXZlRnJvbnQgT1MuICBUaGUKK290aGVyIGlzIGNvbnRyb2xsZWQgYnkgdGhlIENTNDIzMiBjaGlwIHByZXNlbnQgb24gdGhlIGJvYXJkLiBIb3dldmVyLAorcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBDUzQyMzIgY29ubmVjdG9yIGlzIGRpZmZpY3VsdCwgYW5kIGl0IGlzCit1bmxpa2VseSAodGhvdWdoIG5vdCBpbXBvc3NpYmxlKSB0aGF0IHlvdSB3aWxsIHdhbnQgdG8gdXNlIGl0LgorCitBbiBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyIGludHJvZHVjZWQgYW4gYWRkaXRpb25hbCBrZXJuZWwgY29uZmlnCit2YXJpYWJsZSB3aGljaCBjb250cm9sbGVkIHdoZXRoZXIgb3Igbm90IHRoZSBDUzQyMzIgTUlESSBpbnRlcmZhY2Ugd2FzCitjb25maWd1cmVkLiBCZWNhdXNlIG9mIEFsYW4gQ294J3Mgd29yayBvbiBtb2R1bGFyaXppbmcgdGhlIHNvdW5kCitkcml2ZXJzLCBhbmQgbm93IGJhY2twb3J0aW5nIHRoZW0gdG8gMi4wLjM0IGtlcm5lbHMsIHRoZXJlIHNlZW1zIHRvIGJlCitsaXR0bGUgcmVhc29uIHRvIHN1cHBvcnQgInN0YXRpYyIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIGFuZCBzbyB0aGlzCitoYXMgYmVlbiBhYmFuZG9uZWQgaW4gZmF2b3Igb2YgKm9ubHkqIG1vZHVsZSBwYXJhbWV0ZXJzLiBTcGVjaWZ5aW5nCisibXB1aW8iIGFuZCAibXB1aXJxIiBmb3IgdGhlIGNzNDIzMiBwYXJhbWV0ZXIgd2lsbCByZXN1bHQgaW4gdGhlCitDUzQyMzIgTUlESSBpbnRlcmZhY2UgYmVpbmcgY29uZmlndXJlZDsgbGVhdmluZyB0aGVtIHVuc3BlY2lmaWVkIHdpbGwKK2xlYXZlIGl0IHVuY29uZmlndXJlZCAoYW5kIHRodXMgdW51c2FibGUpLgorCitCVFcsIEkgaGF2ZSBoZWFyZCBmcm9tIG9uZSBUcm9wZXorIHVzZXIgdGhhdCB0aGUgQ1M0MjMyIGludGVyZmFjZSBpcworbW9yZSByZWxpYWJsZSB0aGFuIHRoZSBJQ1MyMTE1IG9uZS4gSSBoYXZlIGhhZCBubyBwcm9ibGVtcyB3aXRoIHRoZQorbGF0dGVyLCBhbmQgSSBkb24ndCBoYXZlIHRoZSByaWdodCBjYWJsZSB0byB0ZXN0IHRoZSBmb3JtZXIgb25lCitvdXQuIFJlcG9ydHMgd2VsY29tZS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorMikgV2h5IGRvZXMgbGluZSBYWFggb2YgdGhlIGNvZGUgbG9vayBsaWtlIHRoaXMgLi4uLiA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0VpdGhlciBiZWNhdXNlIGl0J3Mgbm90IGZpbmlzaGVkIHlldCwgb3IgYmVjYXVzZSB5b3UncmUgYSBiZXR0ZXIgY29kZXIKK3RoYW4gSSBhbSwgb3IgYmVjYXVzZSB5b3UgZG9uJ3QgdW5kZXJzdGFuZCBzb21lIGFzcGVjdCBvZiBob3cgdGhlIGNhcmQKK29yIHRoZSBjb2RlIHdvcmtzLiAKKworSSBhYnNvbHV0ZWx5IHdlbGNvbWUgY29tbWVudHMsIGNyaXRpY2lzbXMgYW5kIHN1Z2dlc3Rpb25zIGFib3V0IHRoZQorZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZHJpdmVyLiAKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorMykgV2hhdCBmaWxlcyBhcmUgaW5jbHVkZWQgPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBkcml2ZXJzL3NvdW5kL1JFQURNRS53YXZlZnJvbnQgICAgICAgLS0gdGhpcyBmaWxlCisKKyAgIGRyaXZlcnMvc291bmQvd2F2ZWZyb250LnBhdGNoCS0tIHBhdGNoZXMgZm9yIHRoZSAyLjEuMTA2IHNvdW5kIGRyaXZlcnMKKwkJCQkJICAgbmVlZGVkIHRvIG1ha2UgdGhlIHJlc3Qgb2YgdGhpcyB3b3JrCisJCQkJICAgICAgICAgICBETyBOT1QgVVNFIElGIFlPVSdWRSBBUFBMSUVEIFRIRU0gCisJCQkJCSAgIEJFRk9SRSwgT1IgSEFWRSAyLjEuMTA5IE9SIEFCT1ZFCisKKyAgIGRyaXZlcnMvc291bmQvd2F2ZnJvbnQuYyAgICAgICAgICAgICAtLSB0aGUgZHJpdmVyCisgICBkcml2ZXJzL3NvdW5kL3lzMjI1LmggICAgICAgICAgICAgICAgLS0gZGF0YSBkZWNsYXJhdGlvbnMgZm9yIEZYIGNvbmZpZworICAgZHJpdmVycy9zb3VuZC95czIyNS5jICAgICAgICAgICAgICAgIC0tIGRhdGEgZGVmaW5pdGlvbnMgZm9yIEZYIGNvbmZpZworICAgZHJpdmVycy9zb3VuZC93Zl9taWRpLmMgICAgICAgICAgICAgIC0tIHRoZSAidWFydDQwMSIgZHJpdmVyIAorICAgCQkJCSAgICAgICAgICAgICAgdG8gc3VwcG9ydCB2aXJ0dWFsIE1JREkgbW9kZS4KKyAgIGluY2x1ZGUvd2F2ZWZyb250LmggICAgICAgICAgICAgICAgICAtLSB0aGUgaGVhZGVyIGZpbGUKKyAgIERvY3VtZW50YXRpb24vc291bmQvb3NzL1Ryb3BleisgICAgICAgICAgLS0gc2hvcnQgZG9jcyBvbiBjb25maWd1cmF0aW9uCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzQpIEhvdyBkbyBJIGNvbXBpbGUvaW5zdGFsbC91c2UgaXQgPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitQQVJUIE9ORTogaW5zdGFsbCB0aGUgc291cmNlIGNvZGUgaW50byB5b3VyIHNvdW5kIGRyaXZlciBkaXJlY3RvcnkKKworICBjZCA8dG9wLW9mLXlvdXItMi4xLjEwNi1jb2RlLWJhc2UtZS5nLi0vdXNyL3NyYy9saW51eD4KKyAgdGFyIC16eHZmIDx3aGVyZS15b3UtcHV0L3dhdmVmcm9udC50YXIuZ3o+CisKK1BBUlQgVFdPOiBhcHBseSB0aGUgcGF0Y2hlcworCisgICAgIERPIFRISVMgT05MWSBJRiBZT1UgSEFWRSBBIEtFUk5FTCBWRVJTSU9OIEJFTE9XIDIuMS4xMDkKKyAgICAgQU5EIEhBVkUgTk9UIEFMUkVBRFkgSU5TVEFMTEVEIFRIRSBQQVRDSChFUykuCisKKyAgY2QgZHJpdmVycy9zb3VuZAorICBwYXRjaCA8IHdhdmVmcm9udC5wYXRjaAorCitQQVJUIFRIUkVFOiBjb25maWd1cmUgeW91ciBrZXJuZWwKKworICBjZCA8dG9wIG9mIHlvdXIga2VybmVsIHRyZWU+CisgIG1ha2UgeGNvbmZpZyAob3Igd2hpY2hldmVyIGNvbmZpZyBvcHRpb24geW91IHVzZSkKKworICAgICAgICAgLSBjaG9vc2UgWUVTIGZvciBTb3VuZCBTdXBwb3J0CSAgICAgIAorICAgICAgICAgLSBjaG9vc2UgTU9EVUxFIChNKSBmb3IgT1NTIFNvdW5kIE1vZHVsZXMKKyAgICAgICAgIC0gY2hvb3NlIE1PRFVMRShNKSB0byBZTTM4MTIvT1BMMyBzdXBwb3J0CisJIC0gY2hvb3NlIE1PRFVMRShNKSBmb3IgV2F2ZUZyb250IHN1cHBvcnQKKwkgLSBjaG9vc2UgTU9EVUxFKE0pIGZvciBDUzQyMzIgc3VwcG9ydAorCisJIC0gY2hvb3NlICJOIiBmb3IgZXZlcnl0aGluZyBlbHNlICh1bmxlc3MgeW91IGhhdmUgb3RoZXIKKwkgICAgICBzb3VuZGNhcmRzIHlvdSB3YW50IHN1cHBvcnQgZm9yKQorCisKKyAgIG1ha2UgYm9vdAorICAgLgorICAgLgorICAgLgorICAgPHdoYXRldmVyIHlvdSBub3JtYWxseSBkbyBmb3IgYSBrZXJuZWwgaW5zdGFsbD4KKyAgIG1ha2UgbW9kdWxlcworICAgLgorICAgLgorICAgLgorICAgbWFrZSBtb2R1bGVzX2luc3RhbGwKKworSGVyZSdzIG15IGF1dG9jb25mLmggU09VTkQgc2VjdGlvbjoKKworLyoKKyAqIFNvdW5kCisgKi8KKyNkZWZpbmUgQ09ORklHX1NPVU5EIDEKKyN1bmRlZiAgQ09ORklHX1NPVU5EX09TUworI2RlZmluZSBDT05GSUdfU09VTkRfT1NTX01PRFVMRSAxCisjdW5kZWYgIENPTkZJR19TT1VORF9QQVMKKyN1bmRlZiAgQ09ORklHX1NPVU5EX1NCCisjdW5kZWYgIENPTkZJR19TT1VORF9BRExJQgorI3VuZGVmICBDT05GSUdfU09VTkRfR1VTCisjdW5kZWYgIENPTkZJR19TT1VORF9NUFU0MDEKKyN1bmRlZiAgQ09ORklHX1NPVU5EX1BTUworI3VuZGVmICBDT05GSUdfU09VTkRfTVNTCisjdW5kZWYgIENPTkZJR19TT1VORF9TU0NBUEUKKyN1bmRlZiAgQ09ORklHX1NPVU5EX1RSSVgKKyN1bmRlZiAgQ09ORklHX1NPVU5EX01BRDE2CisjdW5kZWYgIENPTkZJR19TT1VORF9XQVZFRlJPTlQKKyNkZWZpbmUgQ09ORklHX1NPVU5EX1dBVkVGUk9OVF9NT0RVTEUgMQorI3VuZGVmICBDT05GSUdfU09VTkRfQ1M0MjMyCisjZGVmaW5lIENPTkZJR19TT1VORF9DUzQyMzJfTU9EVUxFIDEKKyN1bmRlZiAgQ09ORklHX1NPVU5EX01BVUkKKyN1bmRlZiAgQ09ORklHX1NPVU5EX1NHQUxBWFkKKyN1bmRlZiAgQ09ORklHX1NPVU5EX09QTDNTQTEKKyN1bmRlZiAgQ09ORklHX1NPVU5EX1NPRlRPU1MKKyN1bmRlZiAgQ09ORklHX1NPVU5EX1lNMzgxMgorI2RlZmluZSBDT05GSUdfU09VTkRfWU0zODEyX01PRFVMRSAxCisjdW5kZWYgIENPTkZJR19TT1VORF9WTUlESQorI3VuZGVmICBDT05GSUdfU09VTkRfVUFSVDY4NTAKKy8qCisgKiBBZGRpdGlvbmFsIGxvdyBsZXZlbCBzb3VuZCBkcml2ZXJzCisgKi8KKyN1bmRlZiAgQ09ORklHX0xPV0xFVkVMX1NPVU5ECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorNikgSG93IGRvIEkgY29uZmlndXJlIG15IGNhcmQgPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1lvdSBuZWVkIHRvIGVkaXQgL2V0Yy9tb2Rwcm9iZS5jb25mLiBIZXJlJ3MgbWluZSAoZWRpdGVkIHRvIHNob3cgdGhlCityZWxldmFudCBkZXRhaWxzKToKKworICAjIFNvdW5kIHN5c3RlbQorICBhbGlhcyBjaGFyLW1ham9yLTE0LSogd2F2ZWZyb250CisgIGFsaWFzIHN5bnRoMCB3YXZlZnJvbnQKKyAgYWxpYXMgbWl4ZXIwIGNzNDIzMgorICBhbGlhcyBhdWRpbzAgY3M0MjMyCisgIGluc3RhbGwgd2F2ZWZyb250IC9zYmluL21vZHByb2JlIGNzNDIzMiAmJiAvc2Jpbi9tb2Rwcm9iZSAtaSB3YXZlZnJvbnQgJiYgL3NiaW4vbW9kcHJvYmUgb3BsMworICBvcHRpb25zIHdhdmVmcm9udCBpbz0weDIwMCBpcnE9OQorICBvcHRpb25zIGNzNDIzMiBzeW50aGlycT05IHN5bnRoaW89MHgyMDAgaW89MHg1MzAgaXJxPTUgZG1hPTEgZG1hMj0wCisgIG9wdGlvbnMgb3BsMyBpbz0weDM4OAorCitUaGluZ3MgdG8gbm90ZTogCisKKyAgICAgICB0aGUgd2F2ZWZyb250IG9wdGlvbnMgImlvIiBhbmQgImlycSIgKioqTVVTVCoqKiBtYXRjaCB0aGUgInN5bnRoaW8iCisgICAgICAgYW5kICJzeW50aGlycSIgY3M0MjMyIG9wdGlvbnMuCisKKyAgICAgICB5b3UgY2FuIGRvIHdpdGhvdXQgdGhlIG9wbDMgbW9kdWxlIGlmIHlvdSBkb24ndAorICAgICAgIHdhbnQgdG8gdXNlIHRoZSBPUEwvWzM0XSBGTSBzeW50aCBvbiB0aGUgc291bmRjYXJkCisKKyAgICAgICB0aGUgb3BsMyBpbyBwYXJhbWV0ZXIgaXMgY29udmVudGlvbmFsbHkgbm90IGFkanVzdGFibGUuCisgICAgICAgSW4gdGhlb3J5LCBhbnkgbm90LWluLXVzZSBJTyBwb3J0IGFkZHJlc3Mgd291bGQgd29yaywgYnV0CisgICAgICAganVzdCB1c2UgMHgzODggYW5kIHN0aWNrIHdpdGggdGhlIGNyb3dkLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis3KSBXaGF0IGFib3V0IGZpcm13YXJlID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVHVydGxlIEJlYWNoIGhhdmUgbm90IGdpdmVuIG1lIHBlcm1pc3Npb24gdG8gZGlzdHJpYnV0ZSB0aGVpciBmaXJtd2FyZQorZm9yIHRoZSBJQ1MyMTE1LiBIb3dldmVyLCBpZiB5b3UgaGF2ZSBhIFdhdmVGcm9udCBjYXJkLCB0aGVuIHlvdQorYWxtb3N0IGNlcnRhaW5seSBoYXZlIHRoZSBmaXJtd2FyZSwgYW5kIGlmIG5vdCwgaXRzIGZyZWVseSBhdmFpbGFibGUKK29uIHRoZWlyIHdlYnNpdGUsIGF0OgorCisgICBodHRwOi8vd3d3LnRiZWFjaC5jb20vdGJzL2Rvd25sb2Fkcy9zY2FyZHNkb3duLmh0bSN0cm9wZXpwbHVzIAorCitUaGUgZmlsZSBpcyBjYWxsZWQgV0ZPUzIwMDEuTU9UIChmb3IgdGhlIFRyb3BleispLgorCitUaGlzIGRyaXZlciwgaG93ZXZlciwgZG9lc24ndCB1c2UgdGhlIHB1cmUgZmlybXdhcmUgYXMgZGlzdHJpYnV0ZWQsCitidXQgaW5zdGVhZCByZWxpZXMgb24gYSBzb21ld2hhdCBwcm9jZXNzZWQgZm9ybSBvZiBpdC4gWW91IGNhbgorZ2VuZXJhdGUgdGhpcyB2ZXJ5IGVhc2lseS4gRm9sbG93aW5nIGFuIGlkZWEgZnJvbSBBbmRyZXcgVmVsaWF0aCdzCitQaW5uYWNsZSBkcml2ZXIsIHRoZSBmb2xsb3dpbmcgZmxleCBwcm9ncmFtIHdpbGwgZ2VuZXJhdGUgdGhlCitwcm9jZXNzZWQgdmVyc2lvbjoKKworLS0tLSBjdXQgaGVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislb3B0aW9uIG1haW4KKyUlCiteU1syOF0uKlxyJCBwcmludGYgKCIlYyUuKnMiLCB5eWxlbmctMSx5eWxlbmctMSx5eXRleHQpOworPDxFT0Y+PiB7IGZwdXRjICgnXDAnLCBzdGRvdXQpOyByZXR1cm47IH0KK1xuIHt9IAorLiAge30KKy0tLS0gY3V0IGhlcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgaXQsIHB1dCB0aGUgYWJvdmUgaW4gZmlsZSAoc2F5LCB3cy5sKSBjb21waWxlIGl0IGxpa2UgdGhpczoKKworICAgICAgc2hlbGw+IGZsZXggLW93cy5jIHdzLmwKKyAgICAgIHNoZWxsPiBjYyAtbyB3cyB3cy5jCisgICAgICAKK2FuZCB0aGVuIHVzZSBpdCBsaWtlIHRoaXM6CisKKyAgICB3cyA8IG15LWNvcHktb2YtdGhlLW9zd2YubW90LWZpbGUgPiAvZXRjL3NvdW5kL3dhdmVmcm9udC5vcworCitJZiB5b3UgcHV0IGl0IHNvbWV3aGVyZSBlbHNlLCB5b3UnbGwgYWx3YXlzIGhhdmUgdG8gdXNlIHRoZSB3Zl9vc3BhdGgKK21vZHVsZSBwYXJhbWV0ZXIgKHNlZSBiZWxvdykgb3IgYWx0ZXIgdGhlIHNvdXJjZSBjb2RlLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis3KSBIb3cgZG8gSSBnZXQgaXQgd29ya2luZyA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK09wdGlvbmFsbHksIHlvdSBjYW4gcmVib290IHdpdGggdGhlICJuZXciIGtlcm5lbCAoZXZlbiB0aG91Z2ggdGhlIG9ubHkKK2NoYW5nZXMgaGF2ZSByZWFsbHkgYmVlbiBtYWRlIHRvIGEgbW9kdWxlKS4KKworVGhlbiwgYXMgcm9vdCBkbzoKKworICAgICBtb2Rwcm9iZSB3YXZlZnJvbnQKKworWW91IHNob3VsZCBnZXQgc29tZXRoaW5nIGxpa2UgdGhpcyBpbiAvdmFyL2xvZy9tZXNzYWdlczoKKworICAgIFdhdmVGcm9udDogZmlybXdhcmUgMS4yMCBhbHJlYWR5IGxvYWRlZC4KKworb3IgCisKKyAgICBXYXZlRnJvbnQ6IG5vIHJlc3BvbnNlIHRvIGZpcm13YXJlIHByb2JlLCBhc3N1bWUgcmF3LgorCit0aGVuOgorCisgICAgV2F2ZUZyb250OiB3YWl0aW5nIGZvciBtZW1vcnkgY29uZmlndXJhdGlvbiAuLi4KKyAgICBXYXZlRnJvbnQ6IGhhcmR3YXJlIHZlcnNpb24gMS42NAorICAgIFdhdmVGcm9udDogYXZhaWxhYmxlIERSQU0gODE5MWsKKyAgICBXYXZlRnJvbnQ6IDMzMiBzYW1wbGVzIHVzZWQgKDI2NiByZWFsLCAxMyBhbGlhc2VzLCA1MyBtdWx0aSksIDE4MCBlbXB0eQorICAgIFdhdmVGcm9udDogMTI4IHByb2dyYW1zIHNsb3RzIGluIHVzZQorICAgIFdhdmVGcm9udDogMjU2IHBhdGNoIHNsb3RzIGZpbGxlZCwgMTQyIGluIHVzZQorCitUaGUgd2hvbGUgcHJvY2VzcyB0YWtlcyBhYm91dCAxNiBzZWNvbmRzLCB0aGUgbG9uZ2VzdCB3YWl0cyBiZWluZworYWZ0ZXIgcmVwb3J0aW5nIHRoZSBoYXJkd2FyZSB2ZXJzaW9uIChkdXJpbmcgdGhlIGZpcm13YXJlIGRvd25sb2FkKSwKK2FuZCBhZnRlciByZXBvcnRpbmcgcHJvZ3JhbSBzdGF0dXMgKGR1cmluZyBwYXRjaCBzdGF0dXMgaW5xdWlyeSkuICBJdHMKK3Nob3J0ZXIgKGFib3V0IDEwIHNlY3MpIGlmIHRoZSBmaXJtd2FyZSBpcyBhbHJlYWR5IGxvYWRlZCAoaS5lLiBvbmx5Cit3YXJtIHJlYm9vdHMgc2luY2UgdGhlIGxhc3QgZmlybXdhcmUgbG9hZCkuCisKK1RoZSAiYXZhaWxhYmxlIERSQU0iIGxpbmUgd2lsbCB2YXJ5IGRlcGVuZGluZyBvbiBob3cgbXVjaCBhZGRlZCBSQU0KK3lvdXIgY2FyZCBoYXMuIE1pbmUgaGFzIDhNQi4KKworVG8gY2hlY2sgYmFzaWNhbGx5IGZ1bmN0aW9uYWxpdHksIHVzZSBwbGF5KDEpIG9yIHNwbGF5KDEpIHRvIHNlbmQgYQorLldBViBvciBvdGhlciBhdWRpbyBmaWxlIHRocm91Z2ggdGhlIGF1ZGlvIHBvcnRpb24uIFRoZW4gdXNlIHBsYXltaWRpCit0byBwbGF5IGEgR2VuZXJhbCBNSURJIGZpbGUuIFRyeSB0aGUgIi1EIDAiIHRvIGhlYXIgdGhlCitkaWZmZXJlbmNlIGJldHdlZW4gc2VuZGluZyBNSURJIHRvIHRoZSBXYXZlRnJvbnQgYW5kIHVzaW5nIHRoZSBPUEwvMywKK3doaWNoIGlzIHRoZSBkZWZhdWx0IChJIHRoaW5rIC4uLikuIElmIHlvdSBoYXZlIGFuIGV4dGVybmFsIHN5bnRoKHMpCitob29rZWQgdG8gdGhlIHNvdW5kY2FyZCwgeW91IGNhbiB1c2UgIi1lIiB0byByb3V0ZSB0byB0aGUKK2V4dGVybmFsIHN5bnRoKHMpIChpbiB0aGVvcnksIC1EIDEgc2hvdWxkIHdvcmsgYXMgd2VsbCwgYnV0IEkgdGhpbmsKK3RoZXJlIGlzIGEgYnVnIGluIHBsYXltaWRpIHdoaWNoIHByZXZlbnRzIHRoaXMgZnJvbSBkb2luZyB3aGF0IGl0CitzaG91bGQpLiAKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOCkgV2hhdCBhcmUgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworSXRzIGJlc3QgdG8gcmVhZCB3YXZlZnJvbnQuYyBmb3IgdGhpcywgYnV0IGhlcmUgaXMgYSBzdW1tYXJ5OgorCitpbnRlZ2VyczogCisJICB3Zl9yYXcgIC0gaWYgc2V0LCBpZ25vcmUgYXBwYXJlbnQgcHJlc2VuY2Ugb2YgZmlybXdhcmUKKwkJICAgIGxvYWRlZCBvbnRvIHRoZSBJQ1MyMTE1LCByZXNldCB0aGUgd2hvbGUKKwkJICAgIGJvYXJkLCBhbmQgaW5pdGlhbGl6ZSBpdCBmcm9tIHNjcmF0Y2guIChkZWZhdWx0ID0gMCkKKworICAgICAgICAgIGZ4X3JhdyAgLSBpZiBzZXQsIGFsd2F5cyBpbml0aWFsaXplIHRoZSBZU1MyMjUgcHJvY2Vzc29yCisJCSAgICBvbiB0aGUgVHJvcGV6IHBsdXMuIChkZWZhdWx0ID0gMSkKKworICAgICAgICAgIDwgVGhlIG5leHQgNCBhcmUgYmFzaWNhbGx5IGZvciBrZXJuZWwgaGFja2VycyB0byBhbGxvdworCSAgICB0d2Vha2luZyB0aGUgZHJpdmVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiA+CQkgICAgCisKKyAgICAgICAgICB3YWl0X3VzZWNzICAgICAgICAtICBsb29wIHRpbWVyIHVzZWQgd2hlbiB3YWl0aW5nIGZvcgorCQkJICAgICAgIHN0YXR1cyBjb25kaXRpb25zIG9uIHRoZSBib2FyZC4gCisJCQkgICAgICAgVGhlIGRlZmF1bHQgaXMgMTUwLgorCisgICAgICAgICAgZGVidWdfZGVmYXVsdCAgICAtIGRlYnVnZ2luZyBmbGFncy4gU2VlIHNvdW5kL3dhdmVmcm9udC5oCisJCQkgICAgIGZvciBXRl9ERUJVR18qIHZhbHVlcy4gRGVmYXVsdCBpcyB6ZXJvLgorCQkJICAgICBTZXR0aW5nIHRoaXMgYWxsb3dzIHlvdSB0byBkZWJ1ZyB0aGUKKwkJCSAgICAgZHJpdmVyIGR1cmluZyBtb2R1bGUgaW5zdGFsbGF0aW9uLgorc3RyaW5nczoKKwkgIG9zcGF0aCAtIHBhdGggdG8gZ2V0IHRvIHRoZSBwcmUtcHJvY2Vzc2VkIE9TIGZpcm13YXJlLgorCQkgICAgKGRlZmF1bHQ6IC9ldGMvc291bmQvd2F2ZWZyb250Lm9zKQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis5KSBXaG8gc2hvdWxkIEkgY29udGFjdCBpZiBJIGhhdmUgcHJvYmxlbXM/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0p1c3QgbWU6IFBhdWwgQmFydG9uLURhdmlzIDxwYmRAb3AubmV0PgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2J0YXVkaW8gYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9idGF1ZGlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjkzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9idGF1ZGlvCkBAIC0wLDAgKzEsOTIgQEAKKworSW50cm8KKz09PT09CisKK3Blb3BsZSBzdGFydCBidWdnaW5nIG1lIGFib3V0IHRoaXMgd2l0aCBxdWVzdGlvbnMsIGxvb2tzIGxpa2UgSQorc2hvdWxkIHdyaXRlIHVwIHNvbWUgZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBiZWFzdC4gIFRoYXQgd2F5IEkKK2Rvbid0IGhhdmUgdG8gYW5zd2VyIHRoYXQgbXVjaCBtYWlscyBJIGhvcGUuICBZZXMsIEknbSBsYXp5Li4uCisKKworWW91IG1pZ2h0IGhhdmUgbm90aWNlZCB0aGF0IHRoZSBidDg3OCBncmFiYmVyIGNhcmRzIGhhdmUgYWN0dWFsbHkKK190d29fIFBDSSBmdW5jdGlvbnM6CisKKyQgbHNwY2kKK1sgLi4uIF0KKzAwOjBhLjAgTXVsdGltZWRpYSB2aWRlbyBjb250cm9sbGVyOiBCcm9va3RyZWUgQ29ycG9yYXRpb24gQnQ4NzggKHJldiAwMikKKzAwOjBhLjEgTXVsdGltZWRpYSBjb250cm9sbGVyOiBCcm9va3RyZWUgQ29ycG9yYXRpb24gQnQ4NzggKHJldiAwMikKK1sgLi4uIF0KKworVGhlIGZpcnN0IGRvZXMgdmlkZW8sIGl0IGlzIGJhY2t3YXJkIGNvbXBhdGlibGUgdG8gdGhlIGJ0ODQ4LiAgVGhlIHNlY29uZAorZG9lcyBhdWRpby4gIGJ0YXVkaW8gaXMgYSBkcml2ZXIgZm9yIHRoZSBzZWNvbmQgZnVuY3Rpb24uICBJdCdzIGEgc291bmQKK2RyaXZlciB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcmVjb3JkaW5nIHNvdW5kIChhbmQgX29ubHlfIHJlY29yZGluZywgbm8KK3BsYXliYWNrKS4gIEFzIG1vc3QgVFYgY2FyZHMgY29tZSB3aXRoIGEgc2hvcnQgY2FibGUgd2hpY2ggY2FuIGJlIHBsdWdnZWQKK2ludG8geW91ciBzb3VuZCBjYXJkJ3MgbGluZS1pbiB5b3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0aGlzIGRyaXZlciBpZiBhbGwKK3lvdSB3YW50IHRvIGRvIGlzIGp1c3Qgd2F0Y2hpbmcgVFYuLi4KKworCitEcml2ZXIgU3RhdHVzCis9PT09PT09PT09PT09CisKK1N0aWxsIHNvbWV3aGF0IGV4cGVyaW1lbnRhbC4gIFRoZSBkcml2ZXIgc2hvdWxkIHdvcmsgc3RhYmxlLCBpLmUuIGl0CitzaG91bGQnbnQgY3Jhc2ggeW91ciBib3guICBJdCBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZCwgaGF2ZSBidWdzLAorbm90IGJlaW5nIGZ1bGx5IE9TUyBBUEkgY29tcGlsYW50LCAuLi4KKworTGF0ZXN0IHZlcnNpb25zIGFyZSBhdmFpbGFibGUgZnJvbSBodHRwOi8vYnl0ZXNleC5vcmcvYnR0di8sIHRoZQorZHJpdmVyIGlzIGluIHRoZSBidHR2IHRhcmJhbGwuICBLZXJuZWwgcGF0Y2hlcyBtaWdodCBiZSBhdmFpbGFibGUgdG9vLAoraGF2ZSBhIGxvb2sgYXQgaHR0cDovL2J5dGVzZXgub3JnL2J0dHYvbGlzdGluZy5odG1sLgorCitUaGUgY2hpcCBrbm93cyB0d28gZGlmZmVyZW50IG1vZGVzLiAgYnRhdWRpbyByZWdpc3RlcnMgdHdvIGRzcAorZGV2aWNlcywgb25lIGZvciBlYWNoIG1vZGUuICBUaGV5IGNhbiBub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLgorCisKK0RpZ2l0YWwgYXVkaW8gbW9kZQorPT09PT09PT09PT09PT09PT09CisKK1RoZSBjaGlwIGdpdmVzIHlvdSAxNiBiaXQgc3RlcmVvIHNvdW5kLiAgVGhlIHNhbXBsZSByYXRlIGRlcGVuZHMgb24KK3RoZSBleHRlcm5hbCBzb3VyY2Ugd2hpY2ggZmVlZHMgdGhlIGJ0ODc4IHdpdGggZGlnaXRhbCBzb3VuZCB2aWEgSTJTCitpbnRlcmZhY2UuICBUaGVyZSBpcyBhIGluc21vZCBvcHRpb24gKHJhdGUpIHRvIHRlbGwgdGhlIGRyaXZlciB3aGljaAorc2FtcGxlIHJhdGUgdGhlIGhhcmR3YXJlIHVzZXMgKDMyMDAwIGlzIHRoZSBkZWZhdWx0KS4KKworT25lIHBvc3NpYmxlIHNvdXJjZSBmb3IgZGlnaXRhbCBzb3VuZCBpcyB0aGUgbXNwMzR4eCBhdWRpbyBwcm9jZXNzb3IKK2NoaXAgd2hpY2ggcHJvdmlkZXMgZGlnaXRhbCBzb3VuZCB2aWEgSTJTIHdpdGggMzIga0h6IHNhbXBsZSByYXRlLiAgTXkKK0hhdXBwYXVnZSBib2FyZCB3b3JrcyB0aGlzIHdheS4KKworVGhlIE9zcHJleS0yMDAgcmVwb3J0bHkgZ2l2ZXMgeW91IGRpZ2l0YWwgc291bmQgd2l0aCA0NDEwMCBIeiBzYW1wbGUKK3JhdGUuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgeW91IGdldCBubyBzb3VuZCBhdCBhbGwuCisKKworYW5hbG9nIG1vZGUgKEEvRCkKKz09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gdGVsbCB0aGUgZHJpdmVyIHRvIHVzZSB0aGlzIG1vZGUgd2l0aCB0aGUgaW5zbW9kIG9wdGlvbiAiYW5hbG9nPTEiLgorVGhlIGNoaXAgaGFzIHRocmVlIGFuYWxvZyBpbnB1dHMuICBDb25zZXF1ZW50bHkgeW91J2xsIGdldCBhIG1peGVyIGRldmljZQordG8gY29udHJvbCB0aGVzZS4KKworVGhlIGFuYWxvZyBtb2RlIHN1cHBvcnRzIG1vbm8gb25seS4gIEJvdGggOCArIDE2IGJpdC4gIEJvdGggYXJlIF9zaWduZWRfCitpbnQsIHdoaWNoIGlzIHVuY29tbW9uIGZvciB0aGUgOCBiaXQgY2FzZS4gIFNhbXBsZSByYXRlIHJhbmdlIGlzIDExOSBrSHoKK3RvIDQ0OCBrSHouICBZZXMsIHRoZSBudW1iZXIgb2YgZGlnaXRzIGlzIGNvcnJlY3QuICBUaGUgZHJpdmVyIHN1cHBvcnRzCitkb3duc2FtcGxpbmcgYnkgcG93ZXJzIG9mIHR3bywgc28geW91IGNhbiBhc2sgZm9yIG1vcmUgdXN1YWwgc2FtcGxlIHJhdGVzCitsaWtlIDQ0IGtIeiB0b28uCisKK1dpdGggbXkgSGF1cHBhdWdlIEkgZ2V0IG5vaXN5IHNvdW5kIG9uIHRoZSBzZWNvbmQgaW5wdXQgKG1hcHBlZCB0byBsaW5lMgorYnkgdGhlIG1peGVyIGRldmljZSkuICBPdGhlcnMgZ2V0IGEgdXNlYWJsZSBzaWduYWwgb24gbGluZTEuCisKKworc29tZSBleGFtcGxlcworPT09PT09PT09PT09PQorCisqIHJlYWQgYXVkaW8gZGF0YSBmcm9tIGJ0YXVkaW8gKGRzcDIpLCBzZW5kIHRvIGVzMTczMCAoZHNwLGRzcDEpOgorICAkIHNveCAtdyAtciAzMjAwMCAtdCBvc3Nkc3AgL2Rldi9kc3AyIC10IG9zc2RzcCAvZGV2L2RzcAorCisqIHJlYWQgYXVkaW8gZGF0YSBmcm9tIGJ0YXVkaW8sIHNlbmQgdG8gZXNvdW5kIGRhZW1vbiAod2hpY2ggbWlnaHQgYmUKKyAgcnVubmluZyBvbiBhbm90aGVyIGhvc3QpOgorICAkIHNveCAtYyAyIC13IC1yIDMyMDAwIC10IG9zc2RzcCAvZGV2L2RzcDIgLXQgc3cgLSB8IGVzZGNhdCAtciAzMjAwMAorICAkIHNveCAtYyAxIC13IC1yIDMyMDAwIC10IG9zc2RzcCAvZGV2L2RzcDIgLXQgc3cgLSB8IGVzZGNhdCAtbSAtciAzMjAwMAorCisKK0hhdmUgZnVuLAorCisgIEdlcmQKKworLS0gCitHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9jczQ2eHggYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9jczQ2eHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkNmNmOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2NzNDZ4eApAQCAtMCwwICsxLDEzOCBAQAorCitEb2N1bWVudGF0aW9uIGZvciB0aGUgQ2lycnVzIExvZ2ljL0NyeXN0YWwgU291bmRGdXNpb24gY3M0Nnh4L2NzNDI4MCBhdWRpbyAKK2NvbnRyb2xsZXIgY2hpcHMgKDIwMDEvMDUvMTEpCisKK1RoZSBjczQ2eHggYXVkaW8gZHJpdmVyIHN1cHBvcnRzIHRoZSBEU1AgbGluZSBvZiBDaXJydXMgY29udHJvbGxlcnMuIAorU3BlY2lmaWNhbGx5LCB0aGUgY3M0NjEwLCBjczQ2MTIsIGNzNDYxNCwgY3M0NjIyLCBjczQ2MjQsIGNzNDYzMCBhbmQgdGhlIGNzNDI4MAorcHJvZHVjdHMuICBUaGlzIGRyaXZlciB1c2VzIHRoZSBnZW5lcmljIGFjOTdfY29kZWMgZHJpdmVyIGZvciBBQzk3IGNvZGVjCitzdXBwb3J0LiAgCisKKworRmVhdHVyZXM6CisKK0Z1bGwgRHVwbGV4IFBsYXliYWNrL0NhcHR1cmUgc3VwcG9ydGVkIGZyb20gOGstNDhrLgorMTZCaXQgU2lnbmVkIExFICYgOEJpdCBVbnNpZ25lZCwgd2l0aCBNb25vIG9yIFN0ZXJlbyBzdXBwb3J0ZWQuCisKK0FQTS9QTSAtIDIuMi54IFBNIGlzIGVuYWJsZWQgYW5kIGZ1bmN0aW9uYWwuIEFQTSBjYW4gYWxzbworYmUgZW5hYmxlZCBmb3IgMi40LnggYnkgbW9kaWZ5aW5nIHRoZSBDUzQ2WFhfQUNQSV9TVVBQT1JUIG1hY3JvCitkZWZpbml0aW9uLgorCitETUEgcGxheWJhY2sgYnVmZmVyIHNpemUgaXMgY29uZmlndXJhYmxlIGZyb20gMTZrIChkZWZhdWx0b3JkZXI9MikgdXAgdG8gMk1lZyAKKyhkZWZhdWx0b3JkZXI9MTEpLiAgRE1BIGNhcHR1cmUgYnVmZmVyIHNpemUgaXMgZml4ZWQgYXQgYSBzaW5nbGUgNGsgcGFnZSBhcwordHdvIDJrIGZyYWdtZW50cy4KKworTU1BUCBzZWVtcyB0byB3b3JrIHdlbGwgd2l0aCBRdWFrZUlJSSwgYW5kIHRlc3QgWE1NUyBwbHVnaW4uCisKK015dGgyIHdvcmtzLCBidXQgdGhlIHBvbGxpbmcgbG9naWMgaXMgbm90IGZ1bGx5IGNvcnJlY3QsIGJ1dCBpcyBmdW5jdGlvbmFsLgorCitUaGUgMi40LjQtYWM2IGdhbWVwb3J0IGNvZGUgaW4gdGhlIGNzNDYxeCBqb3lzdGljayBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIAord2l0aCBhIE1pY3Jvc29mdCBTaWRld2luZGVyIGpveXN0aWNrIChjczQ2MXgubyBhbmQgc2lkZXdpbmRlci5vKS4gIFRoaXMgCithdWRpbyBkcml2ZXIgbXVzdCBiZSBsb2FkZWQgcHJpb3IgdG8gdGhlIGpveXN0aWNrIGRyaXZlciB0byBlbmFibGUgdGhlCitEU1AgdGFzayBpbWFnZSBzdXBwb3J0aW5nIHRoZSBqb3lzdGljayBkZXZpY2UuCisKKworTGltaXRhdGlvbnM6CisKK1NQRElGIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCitQcmltYXJ5IGNvZGVjIHN1cHBvcnQgb25seS4gIE5vIHNlY29uZGFyeSBjb2RlYyBzdXBwb3J0IGlzIGltcGxlbWVudGVkLgorCisKKworTk9URVM6CisKK0hlcmN1bGVzIEdhbWUgVGhlYXRyZSBYUCAtIHRoZSBFR1BJTzIgcGluIGNvbnRyb2xzIHRoZSBleHRlcm5hbCBBbXAsCithbmQgaGFzIGJlZW4gdGVzdGVkLgorTW9kdWxlIHBhcmFtZXRlciBoZXJjdWxlc19lZ3Bpb19kaXNhYmxlIHNldCB0byAxLCB3aWxsIGZvcmNlIGEgMCB0byBFR1BJT0RSCit0byBkaXNhYmxlIHRoZSBleHRlcm5hbCBhbXBsaWZpZXIuCisKK1ZUQiBTYW50YSBDcnV6IC0gdGhlIEdQSU83L0dQSU84IG9uIHRoZSBTZWNvbmRhcnkgQ29kZWMgY29udHJvbAordGhlIGV4dGVybmFsIGFtcGxpZmllciBmb3IgdGhlICJiYWNrIiBzcGVha2Vycywgc2luY2Ugd2UgZG8gbm90CitzdXBwb3J0IHRoZSBzZWNvbmRhcnkgY29kZWMgdGhlbiB0aGlzIGV4dGVybmFsIGFtcCBpcyBub3QKK3R1cm5lZCBvbi4gIFRoZSBwcmltYXJ5IGNvZGVjIGV4dGVybmFsIGFtcGxpZmllciBpcyBzdXBwb3J0ZWQgYnV0Citub3RlIHRoYXQgdGhlIEFDOTcgRUFQRCBiaXQgaXMgaW52ZXJ0ZWQgbG9naWMgKGFtcF92b3lldHJhKCkpLgorCitETUEgYnVmZmVyIHNpemUgLSB0aGVyZSBhcmUgaXNzdWVzIHdpdGggbWFueSBvZiB0aGUgTGludXggYXBwbGljYXRpb25zCitjb25jZXJuaW5nIHRoZSBvcHRpbWFsIGJ1ZmZlciBzaXplLiAgU2V2ZXJhbCBhcHBsaWNhdGlvbnMgcmVxdWVzdCBhIAorY2VydGFpbiBmcmFnbWVudCBzaXplIGFuZCBudW1iZXIgYW5kIHRoZW4gZG8gbm90IHZlcmlmeSB0aGF0IHRoZSBkcml2ZXIKK2hhcyB0aGUgYWJpbGl0eSB0byBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbi4gIAorU05EQ1RMX0RTUF9TRVRGUkFHTUVOVCBpb2N0bCBpcyB1c2VkIHRvIHJlcXVlc3QgYSBmcmFnbWVudCBzaXplIGFuZAorbnVtYmVyIG9mIGZyYWdtZW50cy4gIFNvbWUgYXBwbGljYXRpb25zIGV4aXQgaWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQKK29uIHRoaXMgcGFydGljdWxhciBpb2N0bC4gVGhlcmVmb3JlLCBpbiBhbGlnbm1lbnQgd2l0aCB0aGUgb3RoZXIgT1NTIGF1ZGlvIAorZHJpdmVycywgbm8gZXJyb3IgaXMgcmV0dXJuZWQgd2hlbiBhIFNFVEZSQUdzIElPQ1RMIGlzIHJlY2VpdmVkLCBidXQgdGhlIAordmFsdWVzIHBhc3NlZCBmcm9tIHRoZSBhcHAgYXJlIG5vdCB1c2VkIGluIGFueSBidWZmZXIgY2FsY3VsYXRpb24gCisob3NzZnJhZ3NoaWZ0L29zc21heGZyYWdzIGFyZSBub3QgdXNlZCkuCitVc2UgdGhlICJkZWZhdWx0b3JkZXI9TiIgbW9kdWxlIHBhcmFtZXRlciB0byBjaGFuZ2UgdGhlIGJ1ZmZlciBzaXplIGlmCit5b3UgaGF2ZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHJlcXVpcmVzIGEgc3BlY2lmaWMgbnVtYmVyIG9mIGZyYWdtZW50cworb3IgYSBzcGVjaWZpYyBidWZmZXIgc2l6ZSAoc2VlIGJlbG93KS4KKworRGVidWcgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0KK1RoZXJlIGlzIGFuIGlvY3RsIGRlYnVnIGludGVyZmFjZSB0byBhbGxvdyBydW50aW1lIG1vZGlmaWNhdGlvbiBvZiB0aGUgCitkZWJ1ZyBwcmludCBsZXZlbHMuICBUaGlzIGRlYnVnIGludGVyZmFjZSBjb2RlIGNhbiBiZSBkaXNhYmxlZCBmcm9tIHRoZSAKK2NvbXBpbGF0aW9uIHByb2Nlc3Mgd2l0aCBjb21tZW50aW5nIHRoZSBmb2xsb3dpbmcgZGVmaW5lOgorI2RlZmluZSBDU0RFQlVHX0lOVEVSRkFDRSAxCitUaGVyZSBpcyBhbHNvIGEgZGVidWcgcHJpbnQgbWV0aG9kb2xneSB0byBzZWxlY3QgcHJpbnRmIHN0YXRlbWVudHMgZnJvbQorZGlmZmVyZW50IGFyZWFzIG9mIHRoZSBkcml2ZXIuICBBIGRlYnVnIHByaW50IGxldmVsIGlzIGFsc28gdXNlZCB0byBhbGxvdworYWRkaXRpb25hbCBwcmludGZzIHRvIGJlIGFjdGl2ZS4gIENvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgbGluZSBpbiB0aGUKK2RyaXZlciB0byBkaXNhYmxlIGNvbXBpbGF0aW9uIG9mIHRoZSBDU19EQkdPVVQgcHJpbnQgc3RhdGVtZW50czoKKyNkZWZpbmUgQ1NERUJVRyAxCisgCitQbGVhc2Ugc2VlIHRoZSBkZWZpbml0aW9ucyBmb3IgY3NfZGVidWdsZXZlbCBhbmQgY3NfZGVidWdtYXNrIGZvciBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiBvbiB0aGUgZGVidWcgbGV2ZWxzIGFuZCBzZWN0aW9ucy4KKworVGhlcmUgaXMgYWxzbyBhIGNzZGJnIGV4ZWN1dGFibGUgdG8gYWxsb3cgcnVudGltZSBtYW5pcHVsYXRpb24gb2YgdGhlc2UgCitwYXJhbWV0ZXJzLiAgZm9yIGEgY29weSBlbWFpbDogdHdvbGxlckBjcnlzdGFsLmNpcnJ1cy5jb20KKworCisKK01PRFVMRV9QQVJNUyBkZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNT0RVTEVfUEFSTShkZWZhdWx0b3JkZXIsICJpIik7CitkZWZhdWx0b3JkZXI9Tgord2hlcmUgTiBpcyBhIHZhbHVlIGZyb20gMSB0byAxMgorVGhlIGJ1ZmZlciBvcmRlciBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBkbWEgYnVmZmVyIGZvciB0aGUgZHJpdmVyLgordW5kZXIgTGludXgsIGEgc21hbGxlciBidWZmZXIgYWxsb3dzIG1vcmUgcmVzcG9uc2l2ZW5lc3MgZnJvbSBtYW55IG9mIHRoZSAKK2FwcGxpY2F0aW9ucyAoZS5nLiBnYW1lcykuICBBIGxhcmdlciBidWZmZXIgYWxsb3dzIHNvbWUgb2YgdGhlIGFwcHMgKGVzb3VuZCkgCit0byBub3QgdW5kZXJydW4gdGhlIGRtYSBidWZmZXIgYXMgZWFzaWx5LiAgQXMgZGVmYXVsdCwgdXNlIDMyayAob3JkZXI9MykKK3JhdGhlciB0aGFuIDY0ayBhcyBzb21lIG9mIHRoZSBnYW1lcyB3b3JrIG1vcmUgcmVzcG9uc2l2ZWx5LgorKDJeTikgKiBQQUdFX1NJWkUgPSBhbGxvY2F0ZWQgYnVmZmVyIHNpemUKKworTU9EVUxFX1BBUk0oY3NfZGVidWdsZXZlbCwgImkiKTsKK01PRFVMRV9QQVJNKGNzX2RlYnVnbWFzaywgImkiKTsKK2NzX2RlYnVnbGV2ZWw9TgorY3NfZGVidWdtYXNrPTB4TU1NTU1NTU0KK3doZXJlIE4gaXMgYSB2YWx1ZSBmcm9tIDAgKG5vIGRlYnVnIHByaW50ZnMpLCB0byA5IChtYXhpbXVtKQorMHhNTU1NTU1NTSBpcyBhIGRlYnVnIG1hc2sgY29ycmVzcG9uZGluZyB0byB0aGUgQ1NfeHh4IGJpdHMgKHNlZSBkcml2ZXIgc291cmNlKS4KKworTU9EVUxFX1BBUk0oaGVyY3VsZXNfZWdwaW9fZGlzYWJsZSwgImkiKTsKK2hlcmN1bGVzX2VncGlvX2Rpc2FibGU9Tgord2hlcmUgTiBpcyBhIDAgKGVuYWJsZSBlZ3BpbyksIG9yIGEgMSAoZGlzYWJsZSBlZ3BpbyBzdXBwb3J0KQorCitNT0RVTEVfUEFSTShpbml0ZGVsYXksICJpIik7Citpbml0ZGVsYXk9TgorVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWlsbGVzY29uZCBkZWxheSBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uCitjb2RlIHByaW9yIHRvIHBvd2VyaW5nIHVwIHRoZSBQTEwuICBPbiBsYXB0b3BzIHRoaXMgdmFsdWUgY2FuIGJlIHVzZWQgdG8KK2Fzc2lzdCB3aXRoIGVycm9ycyBvbiByZXN1bWUsIG1vc3RseSB3aXRoIElCTSBsYXB0b3BzLiAgQmFzaWNhbGx5LCBpZiB0aGUgCitzeXN0ZW0gaXMgYm9vdGVkIHVuZGVyIGJhdHRlcnkgcG93ZXIgdGhlbiB0aGUgbWRlbGF5KCkvdWRlbGF5KCkgZnVuY3Rpb25zIGZhaWwgdG8gCitwcm9wZXJseSBkZWxheSB0aGUgcmVxdWlyZWQgdGltZS4gIEFsc28sIGlmIHRoZSBzeXN0ZW0gaXMgYm9vdGVkIHVuZGVyIEFDIHBvd2VyCithbmQgdGhlbiB0aGUgcG93ZXIgcmVtb3ZlZCwgdGhlIG1kZWxheSgpL3VkZWxheSgpIGZ1bmN0aW9ucyB3aWxsIG5vdCBkZWxheSBwcm9wZXJseS4KKyAKK01PRFVMRV9QQVJNKHBvd2VyZG93biwgImkiKTsKK3Bvd2VyZG93bj1OCit3aGVyZSBOIGlzIDAgKGRpc2FibGUgYW55IHBvd2VyZG93biBvZiB0aGUgaW50ZXJuYWwgYmxvY2tzKSBvciAxIChlbmFibGUgcG93ZXJkb3duKQorCisKK01PRFVMRV9QQVJNKGV4dGVybmFsX2FtcCwgImkiKTsKK2V4dGVybmFsX2FtcD0xCitpZiBOIGlzIHNldCB0byAxLCB0aGVuIGZvcmNlIGVuYWJsaW5nIHRoZSBFQVBEIHN1cHBvcnQgaW4gdGhlIHByaW1hcnkgQUM5NyBjb2RlYy4KK292ZXJyaWRlIHRoZSBkZXRlY3Rpb24gbG9naWMgYW5kIGZvcmNlIHRoZSBleHRlcm5hbCBhbXAgYml0IGluIHRoZSBBQzk3IDB4MjYgcmVnaXN0ZXIKK3RvIGJlIHJlc2V0ICgwKS4gIEVBUEQgc2hvdWxkIGJlIDAgZm9yIHBvd2VydXAsIGFuZCAxIGZvciBwb3dlcmRvd24uICBUaGUgVlRCIFNhbnRhIENydXoKK2NhcmQgaGFzIGludmVydGVkIGxvZ2ljLCBzbyB0aGVyZSBpcyBhIHNwZWNpYWwgZnVuY3Rpb24gZm9yIHRoZXNlIGNhcmRzLgorCitNT0RVTEVfUEFSTSh0aGlua3BhZCwgImkiKTsKK3RoaW5rcGFkPTEKK2lmIE4gaXMgc2V0IHRvIDEsIHRoZW4gZm9yY2UgZW5hYmxpbmcgdGhlIGNsa3J1biBmdW5jdGlvbmFsaXR5LgorQ3VycmVudGx5LCB3aGVuIHRoZSBwYXJ0IGlzIGJlaW5nIHVzZWQsIHRoZW4gY2xrcnVuIGlzIGRpc2FibGVkIGZvciB0aGUgZW50aXJlIHN5c3RlbSwKK2J1dCByZS1lbmFibGVkIHdoZW4gdGhlIGRyaXZlciBpcyByZWxlYXNlZCBvciB0aGVyZSBpcyBubyBvdXRzdGFuZGluZyBvcGVuIGNvdW50LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9lczEzNzAgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9lczEzNzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzOGIxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MApAQCAtMCwwICsxLDcwIEBACisvcHJvYy9zb3VuZCwgL2Rldi9zbmRzdGF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9wcm9jL3NvdW5kIGFuZCAvZGV2L3NuZHN0YXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKK2RyaXZlci4gVG8gZmluZCBvdXQgd2hldGhlciB0aGUgZHJpdmVyIHN1Y2NlZWRlZCBsb2FkaW5nLAorY2hlY2sgdGhlIGtlcm5lbCBsb2cgKGRtZXNnKS4KKworCitBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMuCitBTGF3IGlzIHRoZSBkZWZhdWx0IG1vZGUgd2hlbiBvcGVuaW5nIGEgc291bmQgZGV2aWNlCit1c2luZyBPU1MvRnJlZS4gVGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2Ygc3VwcG9ydCBpcwordGhhdCB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmb3JtYXRzLCBhbmQgYWRkaW5nCitjb252ZXJzaW9uIHJvdXRpbmVzIHRvIHRoZSBrZXJuZWwgd291bGQgbGVhZCB0byB2ZXJ5IHVnbHkKK2NvZGUgaW4gdGhlIHByZXNlbmNlIG9mIHRoZSBtbWFwIGludGVyZmFjZSB0byB0aGUgZHJpdmVyLgorQW5kIHNpbmNlIHhxdWFrZSB1c2VzIG1tYXAsIG1tYXAgaXMgY29uc2lkZXJlZCBpbXBvcnRhbnQgOi0pCithbmQgbm8gc2FuZSBhcHBsaWNhdGlvbiB1c2VzIEFMYXcvdUxhdyB0aGVzZSBkYXlzIGFueXdheS4KK0luIHNob3J0LCBwbGF5aW5nIGEgU3VuIC5hdSBmaWxlIGFzIGZvbGxvd3M6CisKK2NhdCBteV9maWxlLmF1ID4gL2Rldi9kc3AKKworZG9lcyBub3Qgd29yay4gSW5zdGVhZCwgeW91IG1heSB1c2UgdGhlIHBsYXkgc2NyaXB0IGZyb20KK0NocmlzIEJhZ3dlbGwncyBzb3gtMTIuMTQgcGFja2FnZSAoYXZhaWxhYmxlIGZyb20gdGhlIFVSTAorYmVsb3cpIHRvIHBsYXkgbWFueSBkaWZmZXJlbnQgYXVkaW8gZmlsZSBmb3JtYXRzLgorVGhlIHNjcmlwdCBhdXRvbWF0aWNhbGx5IGRldGVybWluZXMgdGhlIGF1ZGlvIGZvcm1hdAorYW5kIGRvZXMgZG8gYXVkaW8gY29udmVyc2lvbnMgaWYgbmVjZXNzYXJ5LgoraHR0cDovL2hvbWUuc3ByeW5ldC5jb20vc3ByeW5ldC9jYmFnd2VsbC9wcm9qZWN0cy5odG1sCisKKworQmxvY2tpbmcgdnMuIG5vbmJsb2NraW5nIElPCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVW5saWtlIE9TUy9GcmVlIHRoaXMgZHJpdmVyIGhvbm91cnMgdGhlIE9fTk9OQkxPQ0sgZmlsZSBmbGFnCitub3Qgb25seSBkdXJpbmcgb3BlbiwgYnV0IGFsc28gZHVyaW5nIHJlYWQgYW5kIHdyaXRlLgorVGhpcyBpcyBhbiBlZmZvcnQgdG8gbWFrZSB0aGUgc291bmQgZHJpdmVyIGludGVyZmFjZSBtb3JlCityZWd1bGFyLiBUaW1pZGl0eSBoYXMgcHJvYmxlbXMgd2l0aCB0aGlzOyBhIHBhdGNoCitpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmlmZS5lZS5ldGh6LmNoL35zYWlsZXIvbGludXgvcGNpYXVkaW8uaHRtbC4KKyhUaW1pZGl0eSBwYXRjaGVkIHdpbGwgYWxzbyBydW4gb24gT1NTL0ZyZWUpLgorCisKK01JREkgVUFSVAorLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgYSBzaW1wbGUgTUlESSBVQVJUIGludGVyZmFjZSwgd2l0aAorbm8gaW9jdGwncyBzdXBwb3J0ZWQuCisKKworTUlESSBzeW50aGVzaXplcgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNvdW5kY2FyZCBkb2VzIG5vdCBoYXZlIGFueSBoYXJkd2FyZSBNSURJIHN5bnRoZXNpemVyOworTUlESSBzeW50aGVzaXMgaGFzIHRvIGJlIGRvbmUgaW4gc29mdHdhcmUuIFRvIGFsbG93IHRoaXMKK3RoZSBkcml2ZXIvc291bmRjYXJkIHN1cHBvcnRzIHR3byBQQ00gKC9kZXYvZHNwKSBpbnRlcmZhY2VzLgorVGhlIHNlY29uZCBvbmUgZ29lcyB0byB0aGUgbWl4ZXIgInN5bnRoIiBzZXR0aW5nIGFuZCBzdXBwb3J0cworb25seSBhIGxpbWl0ZWQgc2V0IG9mIHNhbXBsaW5nIHJhdGVzICg0NDEwMCwgMjIwNTAsIDExMDI1LCA1NTEyKS4KK0J5IHNldHRpbmcgbGluZW91dCB0byAxIG9uIHRoZSBkcml2ZXIgY29tbWFuZCBsaW5lCisoZWcuIGluc21vZCBlczEzNzAgbGluZW91dD0xKSBpdCBpcyBldmVuIHBvc3NpYmxlIG9uIHNvbWUKK2NhcmRzIHRvIGNvbnZlcnQgdGhlIExJTkVJTiBqYWNrIGludG8gYSBzZWNvbmQgTElORU9VVCBqYWNrLCB0aHVzCittYWtpbmcgaXQgcG9zc2libGUgdG8gb3V0cHV0IGZvdXIgaW5kZXBlbmRlbnQgYXVkaW8gY2hhbm5lbHMhCisKK1RoZXJlIGlzIGEgZnJlZWx5IGF2YWlsYWJsZSBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgYWxsb3dzCitNSURJIGZpbGUgcGxheWJhY2sgb24gdGhpcyBzb3VuZGNhcmQgY2FsbGVkIFRpbWlkaXR5LgorU2VlIGh0dHA6Ly93d3cuY2dzLmZpL350dC90aW1pZGl0eS8uCisKKworCitUaG9tYXMgU2FpbGVyCit0LnNhaWxlckBhbHVtbmkuZXRoei5jaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvZXMxMzcxIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvZXMxMzcxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTUxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9lczEzNzEKQEAgLTAsMCArMSw2NCBAQAorL3Byb2Mvc291bmQsIC9kZXYvc25kc3RhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvcHJvYy9zb3VuZCBhbmQgL2Rldi9zbmRzdGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCitkcml2ZXIuIFRvIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGRyaXZlciBzdWNjZWVkZWQgbG9hZGluZywKK2NoZWNrIHRoZSBrZXJuZWwgbG9nIChkbWVzZykuCisKKworQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzLgorQUxhdyBpcyB0aGUgZGVmYXVsdCBtb2RlIHdoZW4gb3BlbmluZyBhIHNvdW5kIGRldmljZQordXNpbmcgT1NTL0ZyZWUuIFRoZSByZWFzb24gZm9yIHRoZSBsYWNrIG9mIHN1cHBvcnQgaXMKK3RoYXQgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UgZm9ybWF0cywgYW5kIGFkZGluZworY29udmVyc2lvbiByb3V0aW5lcyB0byB0aGUga2VybmVsIHdvdWxkIGxlYWQgdG8gdmVyeSB1Z2x5Citjb2RlIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgbW1hcCBpbnRlcmZhY2UgdG8gdGhlIGRyaXZlci4KK0FuZCBzaW5jZSB4cXVha2UgdXNlcyBtbWFwLCBtbWFwIGlzIGNvbnNpZGVyZWQgaW1wb3J0YW50IDotKQorYW5kIG5vIHNhbmUgYXBwbGljYXRpb24gdXNlcyBBTGF3L3VMYXcgdGhlc2UgZGF5cyBhbnl3YXkuCitJbiBzaG9ydCwgcGxheWluZyBhIFN1biAuYXUgZmlsZSBhcyBmb2xsb3dzOgorCitjYXQgbXlfZmlsZS5hdSA+IC9kZXYvZHNwCisKK2RvZXMgbm90IHdvcmsuIEluc3RlYWQsIHlvdSBtYXkgdXNlIHRoZSBwbGF5IHNjcmlwdCBmcm9tCitDaHJpcyBCYWd3ZWxsJ3Mgc294LTEyLjE0IHBhY2thZ2UgKGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzb3VuZGNhcmQgZG9lcyBub3QgaGF2ZSBhbnkgaGFyZHdhcmUgTUlESSBzeW50aGVzaXplcjsKK01JREkgc3ludGhlc2lzIGhhcyB0byBiZSBkb25lIGluIHNvZnR3YXJlLiBUbyBhbGxvdyB0aGlzCit0aGUgZHJpdmVyL3NvdW5kY2FyZCBzdXBwb3J0cyB0d28gUENNICgvZGV2L2RzcCkgaW50ZXJmYWNlcy4KKworVGhlcmUgaXMgYSBmcmVlbHkgYXZhaWxhYmxlIHNvZnR3YXJlIHBhY2thZ2UgdGhhdCBhbGxvd3MKK01JREkgZmlsZSBwbGF5YmFjayBvbiB0aGlzIHNvdW5kY2FyZCBjYWxsZWQgVGltaWRpdHkuCitTZWUgaHR0cDovL3d3dy5jZ3MuZmkvfnR0L3RpbWlkaXR5Ly4KKworCisKK1Rob21hcyBTYWlsZXIKK3Quc2FpbGVyQGFsdW1uaS5ldGh6LmNoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9td2F2ZSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL213YXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODMzNGJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvbXdhdmUKQEAgLTAsMCArMSwxODUgQEAKKwlIb3cgdG8gdHJ5IHRvIHN1cnZpdmUgYW4gSUJNIE13YXZlIHVuZGVyIExpbnV4IFNCIGRyaXZlcnMKKworCisrCUlCTSBoYXZlIG5vdyByZWxlYXNlZCBkb2N1bWVudGF0aW9uIG9mIHNvcnRzIGFuZCBUb3JzdGVuIGlzIGJ1c3kKKwl0cnlpbmcgdG8gbWFrZSB0aGUgTXdhdmUgd29yay4gVGhpcyBpcyBub3QgaG93ZXZlciBhIHRyaXZpYWwgdGFzay4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPSywgZmlyc3QgdGhpbmcgLSB0aGUgSVJRIHByb2JsZW0gSVMgYSBwcm9ibGVtLCB3aGV0aGVyIHRoZSB0ZXN0IGlzIGJ5cGFzc2VkIG9yCitub3QuICBJdCBpcyBOT1QgYSBMaW51eCBwcm9ibGVtLCBidXQgYW4gTVdBVkUgcHJvYmxlbSB0aGF0IGlzIGZpeGVkIHdpdGggdGhlCitsYXRlc3QgTVdBVkUgcGF0Y2hlcy4gU28sIGluIG90aGVyIHdvcmRzLCBkb24ndCBieXBhc3MgdGhlIHRlc3QgZm9yIE1XQVZFUyEKKworSSBoYXZlIFdpbmRvd3MgOTUgb24gL2Rldi9oZGExLCBzd2FwIG9uIC9kZXYvaGRhMiwgYW5kIFJlZCBIYXQgNSBvbiAvZGV2L2hkYTMuCisKK1RoZSBzdGVwcywgdGhlbjoKKworICAgIEJvb3QgdG8gTGludXguIAorICAgIE1vdW50IFdpbmRvd3MgOTUgZmlsZSBzeXN0ZW0gKGFzc3VtZSBtb3VudCBwb2ludCA9IC9kb3M5NSkuCisgICAgbWtkaXIgL2Rvczk1L2xpbnV4CisgICAgbWtkaXIgL2Rvczk1L2xpbnV4L2Jvb3QKKyAgICBta2RpciAvZG9zOTUvbGludXgvYm9vdC9wYXJtcworCisgICAgQ29weSB0aGUga2VybmVsLCBhbnkgaW5pdHJkIGltYWdlLCBhbmQgbG9hZGxpbiB0byAvZG9zOTUvbGludXgvYm9vdC8uCisKKyAgICBSZWJvb3QgdG8gV2luZG93cyA5NS4KKworICAgIEVkaXQgQzovbXNkb3Muc3lzIGFuZCBhZGQgb3IgY2hhbmdlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgTG9nbz0wCisgICAgICAgIEJvb3RHVUk9MAorCisgICAgTm90ZSB0aGF0IG1zZG9zLnN5cyBpcyBhIHRleHQgZmlsZSBidXQgaXQgbmVlZHMgdG8gYmUgbWFkZSAndW5oaWRkZW4nLAorICAgIHJlYWRhYmxlIGFuZCB3cml0YWJsZSBiZWZvcmUgaXQgY2FuIGJlIGVkaXRlZC4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aAorICAgIERPUycgImF0dHJpYiIgY29tbWFuZC4KKworICAgIEVkaXQgY29uZmlnLnN5cyB0byBoYXZlIG11bHRpcGxlIGNvbmZpZyBtZW51cy4gSSBoYXZlIG9uZSBmb3Igd2luZG93cyA5NSBhbmQKKyAgICBmaXZlIGZvciBMaW51eCwgbGlrZSB0aGlzOgorLS0tLS0tLS0tLS0tCitbbWVudV0KK21lbnVpdGVtPVc5NSwgV2luZG93cyA5NQorbWVudWl0ZW09TElOVFAsIExpbnV4IC0gVGhpbmtQYWQKK21lbnVpdGVtPUxJTlRQMywgTGludXggLSBUaGlua1BhZCBDb25zb2xlCittZW51aXRlbT1MSU5ET0MsIExpbnV4IC0gRG9ja2VkCittZW51aXRlbT1MSU5ET0MzLCBMaW51eCAtIERvY2tlZCBDb25zb2xlCittZW51aXRlbT1MSU4xLCBMaW51eCAtIFNpbmdsZSBVc2VyIE1vZGUKK1JFTSBtZW51ZGVmYXVsdD1XOTUsMTAKKworW1c5NV0KKworW0xJTlRQXQorCitbTElORE9DXQorCitbTElOVFAzXQorCitbTElORE9DM10KKworW0xJTjFdCisKK1tDT01NT05dCitGSUxFUz0zMAorUkVNIFBsZWFzZSByZWFkIFJFQURNRS5UWFQgaW4gQzpcTVdXIHN1YmRpcmVjdG9yeSBiZWZvcmUgY2hhbmdpbmcgdGhlIERPUz0gc3RhdGVtZW50LgorRE9TPUhJR0gsVU1CCitERVZJQ0U9QzpcTVdXXE1BTkFHRVJcTVdENTA0MzAuRVhFCitTSEVMTD1jOlxjb21tYW5kLmNvbSAvZToyMDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbXBvcnRhbnQgdGhpbmdzIGFyZSB0aGUgU0hFTEwgYW5kIERFVklDRSBzdGF0ZW1lbnRzLgorCisgICAgVGhlbiBjaGFuZ2UgYXV0b2V4ZWMuYmF0LiBCYXNpY2FsbHkgZXZlcnl0aGluZyBpbiB0aGVyZSBvcmlnaW5hbGx5IHNob3VsZCBiZQorICAgIGRvbmUgT05MWSB3aGVuIFdpbmRvd3MgOTUgaXMgYm9vdGVkLiBUaGVuIHlvdSBhZGQgbmV3IHRoaW5ncyBzcGVjaWZpY2FsbHkKKyAgICBmb3IgTGludXguICBNaW5lIGlzIGFzIGZvbGxvd3MKKworLS0tLS0tLS0tLS0tLS0tCitARUNITyBPRkYKK2lmICIlQ09ORklHJSIgPT0gIlc5NSIgZ290byBXOTUKKworUkVNCitSRU0gTGludXggc3R1ZmYKK1JFTQorU0VUIE1XUEFUSD1DOlxNV1dcRExMO0M6XE1XV1xNV0dBTUVTO0M6XE1XV1xEU1AKK1NFVCBCTEFTVEVSPUEyMjAgSTUgRDEKK1NFVCBNV1JPT1Q9QzpcTVdXCitTRVQgTElCUEFUSD1DOlxNV1dcRExMCitTRVQgUEFUSD1DOlxXSU5ET1dTO0M6XE1XV1xETEw7CitDQUxMIE1XQVZFIFNUQVJUIE5PU0hPVworYzpcbGludXhcYm9vdFxsb2FkbGluLmV4ZSBAYzpcbGludXhcYm9vdFxwYXJtc1wlQ09ORklHJS5wYXIKKworOlc5NQorUkVNCitSRU0gV2luZG93cyA5NSBzdHVmZgorUkVNCitjOlx0b29sa2l0XGd1YXJkCitTRVQgTVNJTlBVVD1DOlxNU0lOUFVUCitTRVQgTVdQQVRIPUM6XE1XV1xETEw7QzpcTVdXXE1XR0FNRVM7QzpcTVdXXERTUAorUkVNIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBieSBET1MgZ2FtZXMgdG8gcmVjb2duaXplIFNvdW5kIEJsYXN0ZXIgaGFyZHdhcmUuCitSRU0gSWYgaGFyZHdhcmUgc2V0dGluZ3MgYXJlIGNoYW5nZWQsIHBsZWFzZSBjaGFuZ2UgdGhpcyBsaW5lIGFzIHdlbGwuCitSRU0gU2VlIHRoZSBNd2F2ZSBSRUFETUUgZmlsZSBmb3IgaW5zdHJ1Y3Rpb25zLgorU0VUIEJMQVNURVI9QTIyMCBJNSBEMQorU0VUIE1XUk9PVD1DOlxNV1cKK1NFVCBMSUJQQVRIPUM6XE1XV1xETEwKK1NFVCBQQVRIPUM6XFdJTkRPV1M7QzpcV0lORE9XU1xDT01NQU5EO0U6XE9SQVdJTjk1XEJJTjtmOlxtc2RldlxiaW47ZTpcdjMwXGJpbi5kYmc7djpcZGV2dFx2MzBcYmluO2M6XEphdmFTREtcQmluO0M6XE1XV1xETEw7CitTRVQgSU5DTFVERT1mOlxNU0RFVlxJTkNMVURFO0Y6XE1TREVWXE1GQ1xJTkNMVURFCitTRVQgTElCPUY6XE1TREVWXExJQjtGOlxNU0RFVlxNRkNcTElCCit3aW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyBidWlsZCBhIGZpbGUgaW4gYzpcbGludXhcYm9vdFxwYXJtcyBmb3IgZWFjaCBMaW51eCBjb25maWcgdGhhdCB5b3UgaGF2ZS4KKworRm9yIGV4YW1wbGUsIG15IExJTkRPQzMgY29uZmlnIGlzIGZvciBhIGRvY2tlZCBUaGlua3BhZCBhdCBydW5sZXZlbCAzIHdpdGggbm8KK2luaXRyZCBpbWFnZSwgYW5kIGhhcyBhIHBhcmFtZXRlciBmaWxlIG5hbWVkIExJTkRPQzMuUEFSIGluIGM6XGxpbnV4XGJvb3RccGFybXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgTE9BRExJTiBAcGFyYW1fZmlsZSBpbWFnZT1vdGhlcl9pbWFnZSByb290PS9kZXYvb3RoZXIKKyMKKyMJTGludXggQ29uc29sZSBpbiBkb2NraW5nIHN0YXRpb24KKyMKK2M6XGxpbnV4XGJvb3RcekltYWdlLmtybiAgICAgICAgIyBGaXJzdCB2YWx1ZSBtdXN0IGJlIGZpbGVuYW1lIG9mIExpbnV4IGtlcm5lbC4KK3Jvb3Q9L2Rldi9oZGEzICAgICAgICAgICAgICAgICAgIyBkZXZpY2Ugd2hpY2ggZ2V0cyBtb3VudGVkIGFzIHJvb3QgRlMKK3JvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPdGhlciBrZXJuZWwgYXJndW1lbnRzIGdvIGhlcmUuCithcG09b2ZmCitkb2M9eWVzCiszCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZG9jPXllcyBwYXJhbWV0ZXIgaXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdXNlZCBieSBteSBpbml0IHNjcmlwdHMsIG5vdAorYSBrZXJuZWwgYXJndW1lbnQuCisKK0hvd2V2ZXIsIHRoZSBhcG09b2ZmIHBhcmFtZXRlciBJUyBhIGtlcm5lbCBhcmd1bWVudCEgIEFQTSwgYXQgbGVhc3QgaW4gbXkgc2V0dXAsCitjYXVzZXMgdGhlIGtlcm5lbCB0byBjcmFzaCB3aGVuIGxvYWRlZCB2aWEgbG9hZGxpbiAoYnV0IE5PVCB3aGVuIGxvYWRlZCB2aWEKK0xJTE8pLiBUaGUgQVBNIHN0dWZmIENPVUxEIGJlIGZvcmNlZCBvdXQgb2YgdGhlIGtlcm5lbCB2aWEgdGhlIGtlcm5lbCBjb21waWxlCitvcHRpb25zLiBJbnN0ZWFkLCBJIGdvdCBhbiB1bm9mZmljaWFsIHBhdGNoIHRvIHRoZSBBUE0gZHJpdmVycyB0aGF0IGFsbG93cyB0aGVtCit0byBiZSBkeW5hbWljYWxseSBkZWFjdGl2YXRlZCB2aWEga2VybmVsIGFyZ3VtZW50cy4gV2hhdGV2ZXIgeW91IGNob3NlIHRvCitkb2N1bWVudCwgQVBNLCBpdCBzZWVtcywgTVVTVCBiZSBvZmYgZm9yIHNldHVwcyBsaWtlIG1pbmUuCisKK05vdyBtYWtlIHN1cmUgQzpcTVdXXE1XQ09ORklHLlJFRiBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tOYXRpdmVET1NdCitEZWZhdWx0PVNCMS41CitTQklucHV0U291cmNlPUNECitTWU5USD1GTQorUVNvdW5kPU9GRgorUmV2ZXJiPU9GRgorQ2hvcnVzPU9GRgorUmV2ZXJiRGVwdGg9NQorQ2hvcnVzRGVwdGg9NQorU0JJbnB1dFZvbHVtZT01CitTQk1haW5Wb2x1bWU9MTAKK1NCV2F2ZVZvbHVtZT0xMAorU0JTeW50aFZvbHVtZT0xMAorV2F2ZVRhYmxlVm9sdW1lPTEwCitBdWRpb1Bvd2VyRHJpdmVyPU9OCisKK1tGYXN0Q0ZHXQorU2hvdz1ObworSGlkZU9wdGlvbj1PZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09SIHRoZSBEZWZhdWx0PSBsaW5lIENPVUxEIGJlCisKK0RlZmF1bHQ9U0JQUk8KKworUmVib290IHRvIFdpbmRvd3MgOTUgYW5kIGNob29zZSBMaW51eC4gV2hlbiBib290ZWQsIHVzZSBzbmRjb25maWcgdG8gY29uZmlndXJlCit0aGUgc291bmQgbW9kdWxlcyBhbmQgdm9pbOAgLSBUaGlua1BhZCBzb3VuZCB3aXRoIExpbnV4LgorCitOb3cgdGhlIGdvdGNoYXMgLSB5b3UgY2FuIGVpdGhlciBoYXZlIENEIHNvdW5kIE9SIE1peGVycyBidXQgbm90IGJvdGguIFRoYXQncyBhCitwcm9ibGVtIHdpdGggdGhlIFNCMS41IChDRCBzb3VuZCkgb3IgU0JQUk8gKE1peGVycykgc2V0dGluZ3MuIE5vIG9uZSBrbm93cyB3aHkKK3RoaXMgaXMhCisKK0ZvciBzb21lIHJlYXNvbiBNUEVHMyBmaWxlcywgd2hlbiBwbGF5ZWQgdGhyb3VnaCBtcGcxMjMsIHNvdW5kIGxpa2UgdGhleQorYXJlIHBsYXlpbmcgYXQgMS84dGggc3BlZWQgLSBub3QgdmVyeSB1c2VmdWwhICBJZiB5b3UgaGF2ZSBBTlkgaW5zaWdodAorb24gd2h5IHRoaXMgc2Vjb25kIHRoaW5nIG1pZ2h0IGJlIGhhcHBlbmluZywgSSB3b3VsZCBiZSBncmF0ZWZ1bC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBfLyAgICAgIF8vXy9fL18vCisgICBfL18vICBfL18vICAgICBfLworICBfLyBfL18vIF8vXy9fL18vICAgICAgTWFydGluIEpvaG4gQmFydGxldHQKKyBfLyAgXy8gIF8vICAgICBfLyAgICAgIChtYXJ0aW5Abml0cmFtLmRlbW9uLmNvLnVrKQorXy8gICAgICBfL18vXy9fLworICAgICAgIF8vCitfLyAgICBfLworIF8vXy8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ybWU5Nnh4IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvcm1lOTZ4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q3YjdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvcm1lOTZ4eApAQCAtMCwwICsxLDc2NyBAQAorQmV0YSByZWxlYXNlIG9mIHRoZSBybWU5Nnh4IChkcml2ZXIgZm9yIFJNRSA5NlhYIGNhcmRzIGxpa2UgdGhlIAorIkhhbW1lcmZhbGwiIGFuZCB0aGUgIkhhbW1lcmZhbGwgbGlnaHQiKSAKKworSW1wb3J0YW50OiBUaGUgZHJpdmVyIG1vZHVsZSBoYXMgdG8gYmUgaW5zdGFsbGVkIG9uIGEgZnJlc2hseSByZWJvb3RlZCBzeXN0ZW0sIAorb3RoZXJ3aXNlIHRoZSBkcml2ZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gYWNxdWlyZSBpdHMgYnVmZmVycy4KKworZmVhdHVyZXM6CisKKyAtIE9TUyBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKGkuZS4gcnVucyB3aXRoIHN0YW5kYXJkIE9TUyBzb3VuZHNvZnR3YXJlKSAKKyAtIE9TUy9NdWx0aWNoYW5uZWwgaW50ZXJmYWNlIChPU1MgbXVsdGljaGFubmVsIGlzIGRvbmUgYnkganVzdCBhcXVpcmluZworICAgbW9yZSB0aGFuIDIgY2hhbm5lbHMpLiBUaGUgZHJpdmVyIGRvZXMgbm90IHVzZSBtb3JlIHRoYW4gb25lIGRldmljZSAKKyAgICggeWV0IC4uIHRoaXMgZmVhdHVyZSBtYXkgYmUgaW1wbGVtZW50ZWQgbGF0ZXIgKSAKKyAtIG1vcmUgdGhhbiBvbmUgUk1FIGNhcmQgc3VwcG9ydGVkCisKK1RoZSBkcml2ZXIgdXNlcyBhIHNwZWNpZmljIG11bHRpY2hhbm5lbCBpbnRlcmZhY2UsIHdoaWNoIEkgd2lsbCBkb2N1bWVudAord2hlbiB0aGUgZHJpdmVyIGdldHMgc3RhYmxlLiAodGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluZXMgaW4gcm1lOTZ4eC5oLAord2hpY2ggYWRkcyBibG9ja2VkIG11bHRpY2hhbm5lbCBmb3JtYXRzIGkuZSBpbnN0ZWFkIG9mIAorbHJscmxybHIgLS0+IGxsbGxycnJyICBldGMuCisKK1VzZSB0aGUgInJtZWN0cmwiIHByb2dyYW1tIHRvIGxvb2sgYXQgdGhlIHN0YXR1cyBvZiB0aGUgY2FyZCAuLiAKK29yIHVzZSB4cm1lY3RybCwgYSBHVUkgaW50ZXJmYWNlIGZvciB0aGUgY3RybCBwcm9ncmFtLgorCitXaGF0IHlvdSBjYW4gZG8gd2l0aCB0aGUgcm1lY3RybCBwcm9ncmFtIGlzIHRvIHNldCB0aGUgc3RlcmVvIGRldmljZSBmb3IKK09TUyBlbXVsYXRpb24gKGUuZy4gaWYgeW91IHVzZSBTUERJRiBvdXQpLgorCitZb3UgZG86CisKKy4vY3RybCBvZmZzZXQgMjQgMjQKKword2hpY2ggbWFrZXMgdGhlIHN0ZXJlbyBkZXZpY2UgdXNlIGNoYW5uZWxzIDI1IGFuZCAyNi4KKworR3VlbnRlciBHZWlnZXIgPGdlaWdlckBlcHkuY28uYXQ+CisKK2NvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGF0dGFjaGVkIHNvdXJjZSBjb2RlIGludG8gcm1lY3RybC5jCithbmQgdGhlICBzZWNvbmQgcGFydCBpbnRvIHhybWVjdHJsIChvciBnZXQgdGhlIHByb2dyYW0gZnJvbQoraHR0cDovL2dpZ2UueGR2Lm9yZy9wYWdlcy9zb2Z0L3BhZ2VzL3JtZSkKKwordG8gY29tcGlsZTogZ2NjIC1vIHJtZWN0cmwgcm1lY3RybC5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc25pcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJybWU5Nnh4LmgiCisKKy8qCisgIHJlbWN0cmwuYworICAoQykgMjAwMCBHdWVudGVyIEdlaWdlciA8Z2VpZ2VyQGRlYmlhbi5vcmc+CisgIEhQMjAwMjAyMDEgLSBIZWlrbyBQdXJuaGFnZW4gPHB1cm5oYWdlQHRudC51bmktaGFubm92ZXIuZGU+CisqLworCisvKiAjIGRlZmluZSBERVZJQ0VfTkFNRSAiL2Rldi9taXhlciIgKi8KKyMgZGVmaW5lIERFVklDRV9OQU1FICIvZGV2L21peGVyMSIKKworCit2b2lkIHVzYWdlKHZvaWQpCit7CisgICAgIGZwcmludGYoc3RkZXJyLCJ1c2FnZTogcm1lY3RybCBbL2Rldi9taXhlcjxuPl0gW2NvbW1hbmQgW29wdGlvbnNdXVxuXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIndoZXJlIGNvbW1hbmQgaXMgb25lIG9mOlxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIGhlbHAgICAgICAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgc2hvdyBzdGF0dXMgYml0c1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIGNvbnRyb2wgICAgICAgICAgICAgICAgICAgIHNob3cgY29udHJvbCBiaXRzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgbWl4ICAgICAgICAgICAgICAgICAgICAgICAgc2hvdyBtaXhlci9vZmZzZXQgc3RhdHVzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgbWFzdGVyIDxuPiAgICAgICAgICAgICAgICAgc2V0IHN5bmMgbWFzdGVyXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgcHJvIDxuPiAgICAgICAgICAgICAgICAgICAgc2V0IHNwZGlmIG91dCBwcm9cbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwiICBlbXBoYXNpcyA8bj4gICAgICAgICAgICAgICBzZXQgc3BkaWYgb3V0IGVtcGhhc2lzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgZG9sYnkgPG4+ICAgICAgICAgICAgICAgICAgc2V0IHNwZGlmIG91dCBubyBhdWRpb1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIG9wdG91dCA8bj4gICAgICAgICAgICAgICAgIHNldCBzcGRpZiBvdXQgb3B0aWNhbFxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIHdvcmRjbG9jayA8bj4gICAgICAgICAgICAgIHNldCBzeW5jIHdvcmRjbG9ja1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIHNwZGlmaW4gPG4+ICAgICAgICAgICAgICAgIHNldCBzcGRpZiBpbiAoMD1vcHRpY2FsLDE9Y29heCwyPWludGVybilcbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwiICBzeW5jcmVmIDxuPiAgICAgICAgICAgICAgICBzZXQgc3luYyBzb3VyY2UgKDA9QURBVDEsMT1BREFUMiwyPUFEQVQzLDM9U1BESUYpXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgYWRhdDFjZCA8bj4gICAgICAgICAgICAgICAgc2V0IEFEQVQxIG9uIGludGVybmFsIENEXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgb2Zmc2V0IDxkZXZucj4gPGluPiA8b3V0PiAgc2V0IGRldiAoMC4uMykgb2Zmc2V0ICgwLi4yNSlcbiIpOworICAgICBleGl0KC0xKTsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgICBpbnQgY2FyZHM7CisgICAgIGludCByZXQ7CisgICAgIGludCBpOworICAgICBkb3VibGUgZnQ7CisgICAgIGludCBmZCwgZmR3cjsKKyAgICAgaW50IHBhcmFtLG9yaWc7CisgICAgIHJtZV9zdGF0dXNfdCBzdGF0OworICAgICBybWVfY3RybF90IGN0cmw7CisgICAgIGNoYXIgKmRldmljZTsKKyAgICAgaW50IGFyZ2lkeDsKKworICAgICBpZiAoYXJnYyA8IDIpCisJICB1c2FnZSgpOworCisgICAgIGlmICgqYXJndlsxXT09Jy8nKSB7CisJICBkZXZpY2UgPSBhcmd2WzFdOworCSAgYXJnaWR4ID0gMjsKKyAgICAgfQorICAgICBlbHNlIHsKKwkgIGRldmljZSA9IERFVklDRV9OQU1FOworCSAgYXJnaWR4ID0gMTsKKyAgICAgfQorCisgICAgIGZwcmludGYoc3Rkb3V0LCJtaXhlciBkZXZpY2UgJXNcbiIsZGV2aWNlKTsKKyAgICAgaWYgKChmZCA9IG9wZW4oZGV2aWNlLE9fUkRPTkxZKSkgPCAwKSB7CisJICBmcHJpbnRmKHN0ZG91dCwib3BlbmluZyBkZXZpY2UgZmFpbGVkXG4iKTsKKwkgIGV4aXQoLTEpOworICAgICB9CisKKyAgICAgaWYgKChmZHdyID0gb3BlbihkZXZpY2UsT19XUk9OTFkpKSA8IDApIHsKKwkgIGZwcmludGYoc3Rkb3V0LCJvcGVuaW5nIGRldmljZSBmYWlsZWRcbiIpOworCSAgZXhpdCgtMSk7CisgICAgIH0KKworICAgICBpZiAoYXJnYyA8IGFyZ2lkeCsxKQorCSAgdXNhZ2UoKTsKKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sImhlbHAiKSkKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCItaCIpKQorICAgICAgICB1c2FnZSgpOworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIi0taGVscCIpKQorICAgICAgICB1c2FnZSgpOworCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwic3RhdHVzIikpIHsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUyLCZzdGF0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LmlycSAlZFxuIixzdGF0LmlycSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5sb2NrbWFzayAlZFxuIixzdGF0LmxvY2ttYXNrKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LnNyNDggJWRcbiIsc3RhdC5zcjQ4KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LndjbG9jayAlZFxuIixzdGF0LndjbG9jayk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5idWZwb2ludCAlZFxuIixzdGF0LmJ1ZnBvaW50KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LnN5bmNtYXNrICVkXG4iLHN0YXQuc3luY21hc2spOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQuZG91Ymxlc3BlZWQgJWRcbiIsc3RhdC5kb3VibGVzcGVlZCk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC50Y19idXN5ICVkXG4iLHN0YXQudGNfYnVzeSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC50Y19vdXQgJWRcbiIsc3RhdC50Y19vdXQpOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQuY3J5c3RhbHJhdGUgJWQgKDA9NjRrIDM9OTZrIDQ9ODguMmsgNT00OGsgNj00NC4xayA3PTMyaylcbiIsc3RhdC5jcnlzdGFscmF0ZSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5zcGRpZl9lcnJvciAlZFxuIixzdGF0LnNwZGlmX2Vycm9yKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LmJ1ZmlkICVkXG4iLHN0YXQuYnVmaWQpOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQudGNfdmFsaWQgJWRcbiIsc3RhdC50Y192YWxpZCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiY29udHJvbCIpKSB7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5zdGFydCAlZFxuIixjdHJsLnN0YXJ0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmxhdGVuY3kgJWQgKDA9NjQgLi4gNz04MTkyKVxuIixjdHJsLmxhdGVuY3kpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwubWFzdGVyICVkXG4iLGN0cmwubWFzdGVyKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmllICVkXG4iLGN0cmwuaWUpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3I0OCAlZFxuIixjdHJsLnNyNDgpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BhcmUgJWRcbiIsY3RybC5zcGFyZSk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5kb3VibGVzcGVlZCAlZFxuIixjdHJsLmRvdWJsZXNwZWVkKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnBybyAlZFxuIixjdHJsLnBybyk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5lbXBoYXNpcyAlZFxuIixjdHJsLmVtcGhhc2lzKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmRvbGJ5ICVkXG4iLGN0cmwuZG9sYnkpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwub3B0X291dCAlZFxuIixjdHJsLm9wdF9vdXQpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwud29yZGNsb2NrICVkXG4iLGN0cmwud29yZGNsb2NrKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX2luICVkICgwPW9wdGljYWwsMT1jb2F4LDI9aW50ZXJuKVxuIixjdHJsLnNwZGlmX2luKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnN5bmNfcmVmICVkICgwPUFEQVQxLDE9QURBVDIsMj1BREFUMywzPVNQRElGKVxuIixjdHJsLnN5bmNfcmVmKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX3Jlc2V0ICVkXG4iLGN0cmwuc3BkaWZfcmVzZXQpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BkaWZfc2VsZWN0ICVkXG4iLGN0cmwuc3BkaWZfc2VsZWN0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX2Nsb2NrICVkXG4iLGN0cmwuc3BkaWZfY2xvY2spOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BkaWZfd3JpdGUgJWRcbiIsY3RybC5zcGRpZl93cml0ZSk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5hZGF0MV9jZCAlZFxuIixjdHJsLmFkYXQxX2NkKTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCJtaXgiKSkgeworCSAgcm1lX21peGVyIG1peDsKKwkgIGludCBpOworCisJICBmb3IgKGk9MDsgaTw0OyBpKyspIHsKKwkgICAgICAgbWl4LmRldm5yID0gaTsKKwkgICAgICAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTEsJm1peCk7CisJICAgICAgIGlmIChtaXguZGV2bnIgPT0gaSkgeworCQkgICAgZnByaW50ZihzdGRvdXQsImRldm5yICVkXG4iLG1peC5kZXZucik7CisJCSAgICBmcHJpbnRmKHN0ZG91dCwibWl4Lmlfb2Zmc2V0ICUyZCAoMC0yNSlcbiIsbWl4Lmlfb2Zmc2V0KTsKKwkJICAgIGZwcmludGYoc3Rkb3V0LCJtaXgub19vZmZzZXQgJTJkICgwLTI1KVxuIixtaXgub19vZmZzZXQpOworCSAgICAgICB9CisJICB9CisJICBleGl0ICgwKTsKKyAgICAgfQorCisvKiB0aGUgY29udHJvbCBmbGFncyAqLworCisgICAgIGlmIChhcmdjIDwgYXJnaWR4KzIpCisJICB1c2FnZSgpOworCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwibWFzdGVyIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50ZigibWFzdGVyID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwubWFzdGVyID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwicHJvIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50ZigicHJvID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwucHJvID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiZW1waGFzaXMiKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJlbXBoYXNpcyA9ICVkXG4iLHZhbCk7CisJICBjdHJsLmVtcGhhc2lzID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiZG9sYnkiKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJkb2xieSA9ICVkXG4iLHZhbCk7CisJICBjdHJsLmRvbGJ5ID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwib3B0b3V0IikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50Zigib3B0b3V0ID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwub3B0X291dCA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIndvcmRjbG9jayIpKSB7CisJICBpbnQgdmFsID0gYXRvaShhcmd2W2FyZ2lkeCsxXSk7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBwcmludGYoIndvcmRjbG9jayA9ICVkXG4iLHZhbCk7CisJICBjdHJsLndvcmRjbG9jayA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sInNwZGlmaW4iKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJzcGRpZmluID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwuc3BkaWZfaW4gPSB2YWw7CisJICBpb2N0bChmZHdyLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCJzeW5jcmVmIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50Zigic3luY3JlZiA9ICVkXG4iLHZhbCk7CisJICBjdHJsLnN5bmNfcmVmID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiYWRhdDFjZCIpKSB7CisJICBpbnQgdmFsID0gYXRvaShhcmd2W2FyZ2lkeCsxXSk7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBwcmludGYoImFkYXQxY2QgPSAlZFxuIix2YWwpOworCSAgY3RybC5hZGF0MV9jZCA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworLyogc2V0dGluZyBvZmZzZXQgKi8KKworICAgICBpZiAoYXJnYyA8IGFyZ2lkeCs0KQorCSAgdXNhZ2UoKTsKKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIm9mZnNldCIpKSB7CisJICBybWVfbWl4ZXIgbWl4OworCisJICBtaXguZGV2bnIgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKworCSAgbWl4Lmlfb2Zmc2V0ID0gYXRvaShhcmd2W2FyZ2lkeCsyXSk7CisJICBtaXgub19vZmZzZXQgPSBhdG9pKGFyZ3ZbYXJnaWR4KzNdKTsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTEsJm1peCk7CisJICBmcHJpbnRmKHN0ZG91dCwiZGV2bnIgJWRcbiIsbWl4LmRldm5yKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJtaXguaV9vZmZzZXQgdG8gJWRcbiIsbWl4Lmlfb2Zmc2V0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJtaXgub19vZmZzZXQgdG8gJWRcbiIsbWl4Lm9fb2Zmc2V0KTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgdXNhZ2UoKTsKKyAgICAgZXhpdCAoMCk7IC8qIHRvIGF2b2lkIHdhcm5pbmcgKi8KK30KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDxzbmlwPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvdXNyL2Jpbi93aXNoCisKKyMgeHJtZWN0cmwKKyMgKEMpIDIwMDAgR3VlbnRlciBHZWlnZXIgPGdlaWdlckBkZWJpYW4ub3JnPgorIyBIUDIwMDIwMjAxIC0gSGVpa28gUHVybmhhZ2VuIDxwdXJuaGFnZUB0bnQudW5pLWhhbm5vdmVyLmRlPgorCisjc2V0IGRlZmF1bHRzICItcmVsaWVmIHJpZGdlZCIKK3NldCBDVFJMUFJPRyAiLi9ybWVjdHJsIgoraWYgeyRhcmdjfSB7CisgICAgc2V0IENUUkxQUk9HICIkQ1RSTFBST0cgJGFyZ3YiCit9CitwdXRzICJDVFJMUFJPRyAkQ1RSTFBST0ciCisKK2ZyYW1lIC5idXR0cworYnV0dG9uIC5idXR0cy5leGl0IC10ZXh0ICJFeGl0IiAtY29tbWFuZCAiZXhpdCIgLXJlbGllZiByaWRnZQorI2J1dHRvbiAuYnV0dHMuc3RhdGUgLXRleHQgIlN0YXRlIiAtY29tbWFuZCAiZ2V0X2FsbCIKKworcGFjayAuYnV0dHMuZXhpdCAtc2lkZSBsZWZ0CitwYWNrIC5idXR0cyAtc2lkZSBib3R0b20KKworCisjCisjIFNUQVRVUworIworCitmcmFtZSAuc3RhdHVzCisKKyMgU2FtcGxpbmcgUmF0ZQorCitmcmFtZSAuc3RhdHVzLnNyCitsYWJlbCAuc3RhdHVzLnNyLnRleHQgLXRleHQgIlNhbXBsaW5nIFJhdGUiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5zdGF0dXMuc3IuNDQxIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjQ0LjEga0h6IiAtd2lkdGggMTAgLWFuY2hvciBudyAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDQ0MTAwIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuc3RhdHVzLnNyLjQ4MCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI0OCBrSHoiIC13aWR0aCAxMCAtYW5jaG9yIG53IC12YXJpYWJsZSBzcmF0ZSAtdmFsdWUgNDgwMDAgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5zdGF0dXMuc3IuODgyIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjg4LjIga0h6IiAtd2lkdGggMTAgLWFuY2hvciBudyAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDg4MjAwIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuc3RhdHVzLnNyLjk2MCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI5NiBrSHoiIC13aWR0aCAxMCAtYW5jaG9yIG53ICAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDk2MDAwIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5zci50ZXh0IC5zdGF0dXMuc3IuNDQxIC5zdGF0dXMuc3IuNDgwIC5zdGF0dXMuc3IuODgyIC5zdGF0dXMuc3IuOTYwIC1zaWRlIHRvcCAtcGFkeCAzCisKKyMgTG9jaworCitmcmFtZSAuc3RhdHVzLmxvY2sKK2xhYmVsIC5zdGF0dXMubG9jay50ZXh0IC10ZXh0ICJMb2NrIiAtanVzdGlmeSBsZWZ0CitjaGVja2J1dHRvbiAuc3RhdHVzLmxvY2suYWRhdDEgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSBhZGF0bG9jazEgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMubG9jay5hZGF0MiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJBREFUMiIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIGFkYXRsb2NrMiAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5sb2NrLmFkYXQzIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIkFEQVQzIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgYWRhdGxvY2szIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5sb2NrLnRleHQgLnN0YXR1cy5sb2NrLmFkYXQxIC5zdGF0dXMubG9jay5hZGF0MiAuc3RhdHVzLmxvY2suYWRhdDMgLXNpZGUgdG9wIC1wYWR4IDMgCisKKyMgU3luYworCitmcmFtZSAuc3RhdHVzLnN5bmMKK2xhYmVsIC5zdGF0dXMuc3luYy50ZXh0IC10ZXh0ICJTeW5jIiAtanVzdGlmeSBsZWZ0CitjaGVja2J1dHRvbiAuc3RhdHVzLnN5bmMuYWRhdDEgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSBhZGF0c3luYzEgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMuc3luYy5hZGF0MiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJBREFUMiIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIGFkYXRzeW5jMiAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5zeW5jLmFkYXQzIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIkFEQVQzIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgYWRhdHN5bmMzIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5zeW5jLnRleHQgLnN0YXR1cy5zeW5jLmFkYXQxIC5zdGF0dXMuc3luYy5hZGF0MiAuc3RhdHVzLnN5bmMuYWRhdDMgLXNpZGUgdG9wIC1wYWR4IDMgCisKKyMgVGltZWNvZGUKKworZnJhbWUgLnN0YXR1cy50YworbGFiZWwgLnN0YXR1cy50Yy50ZXh0IC10ZXh0ICJUaW1lY29kZSIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLnN0YXR1cy50Yy5idXN5IC1zZWxlY3Rjb2xvciByZWQgLXRleHQgImJ1c3kiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSB0Y2J1c3kgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMudGMub3V0IC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIm91dCIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIHRjb3V0IC1mb250IHRpbWVzCitjaGVja2J1dHRvbiAuc3RhdHVzLnRjLnZhbGlkIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgInZhbGlkIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgdGN2YWxpZCAtZm9udCB0aW1lcworCitwYWNrIC5zdGF0dXMudGMudGV4dCAuc3RhdHVzLnRjLmJ1c3kgLnN0YXR1cy50Yy5vdXQgLnN0YXR1cy50Yy52YWxpZCAtc2lkZSB0b3AgLXBhZHggMyAKKworIyBTUERJRiBJbgorCitmcmFtZSAuc3RhdHVzLnNwZGlmCitsYWJlbCAuc3RhdHVzLnNwZGlmLnRleHQgLXRleHQgIlNQRElGIEluIiAtanVzdGlmeSBsZWZ0CitsYWJlbCAuc3RhdHVzLnNwZGlmLnNyIC10ZXh0ICItLS4tIGtIeiIgLWFuY2hvciBuIC13aWR0aCAxMCAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5zcGRpZi5lcnJvciAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJJbnB1dCBMb2NrIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgc3BkaWZlcnIgLWZvbnQgdGltZXMKKworcGFjayAuc3RhdHVzLnNwZGlmLnRleHQgLnN0YXR1cy5zcGRpZi5zciAuc3RhdHVzLnNwZGlmLmVycm9yIC1zaWRlIHRvcCAtcGFkeCAzIAorCitwYWNrIC5zdGF0dXMuc3IgLnN0YXR1cy5sb2NrIC5zdGF0dXMuc3luYyAuc3RhdHVzLnRjIC5zdGF0dXMuc3BkaWYgLXNpZGUgbGVmdCAtZmlsbCB4IC1hbmNob3IgbiAtZXhwYW5kIDEKKworCisjCisjIENPTlRST0wgCisjCisKK3Byb2Mgc2V0cHJvZiB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwcHJvZgorICAgIGV4ZWMgJENUUkxQUk9HIHBybyAkc3Bwcm9mCit9CisKK3Byb2Mgc2V0ZW1waCB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwZW1waAorICAgIGV4ZWMgJENUUkxQUk9HIGVtcGhhc2lzICRzcGVtcGgKK30KKworcHJvYyBzZXRub2F1ZCB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwbm9hdWQKKyAgICBleGVjICRDVFJMUFJPRyBkb2xieSAkc3Bub2F1ZAorfQorCitwcm9jIHNldG9wdGljYWwge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBzcG9wdGljYWwKKyAgICBleGVjICRDVFJMUFJPRyBvcHRvdXQgJHNwb3B0aWNhbAorfQorCitwcm9jIHNldHNwZGlmaW4ge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBzcGRpZmluCisgICAgZXhlYyAkQ1RSTFBST0cgc3BkaWZpbiBbZXhwciAkc3BkaWZpbiAtIDFdCit9CisKK3Byb2Mgc2V0c3luY3NvdXJjZSB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHN5bmNzb3VyY2UKKyAgICBleGVjICRDVFJMUFJPRyBzeW5jcmVmIFtleHByICRzeW5jc291cmNlIC0xXQorfQorCisKK3Byb2Mgc2V0bWFzdGVyIHt9IHsKKyAgICBnbG9iYWwgQ1RSTFBST0cKKyAgICBnbG9iYWwgbWFzdGVyCisgICAgZXhlYyAkQ1RSTFBST0cgbWFzdGVyICRtYXN0ZXIKK30KKworcHJvYyBzZXR3b3JkY2xvY2sge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCB3b3JkY2xvY2sKKyAgICBleGVjICRDVFJMUFJPRyB3b3JkY2xvY2sgJHdvcmRjbG9jaworfQorCitwcm9jIHNldGFkYXQxY2Qge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBhZGF0MWNkCisgICAgZXhlYyAkQ1RSTFBST0cgYWRhdDFjZCAkYWRhdDFjZAorfQorCisKK2ZyYW1lIC5jb250cm9sCisKKyMgU1BESUYgSW4gJiBTUERJRiBPdXQKKworCitmcmFtZSAuY29udHJvbC5zcGRpZgorCitmcmFtZSAuY29udHJvbC5zcGRpZi5pbgorbGFiZWwgLmNvbnRyb2wuc3BkaWYuaW4udGV4dCAtdGV4dCAiU1BESUYgSW4iIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLnNwZGlmLmluLmlucHV0MSAtdGV4dCAiT3B0aWNhbCIgLWFuY2hvciBudyAtd2lkdGggMTMgLXZhcmlhYmxlIHNwZGlmaW4gLXZhbHVlIDEgLWNvbW1hbmQgc2V0c3BkaWZpbiAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworcmFkaW9idXR0b24gLmNvbnRyb2wuc3BkaWYuaW4uaW5wdXQyIC10ZXh0ICJDb2F4aWFsIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3BkaWZpbiAtdmFsdWUgMiAtY29tbWFuZCBzZXRzcGRpZmluIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuY29udHJvbC5zcGRpZi5pbi5pbnB1dDMgLXRleHQgIkludGVybiAiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcGRpZmluIC1jb21tYW5kIHNldHNwZGlmaW4gLXZhbHVlIDMgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKKworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYuaW4uYWRhdDFjZCAtdGV4dCAiQURBVDEgSW50ZXJuIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgYWRhdDFjZCAtY29tbWFuZCBzZXRhZGF0MWNkIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuc3BkaWYuaW4udGV4dCAuY29udHJvbC5zcGRpZi5pbi5pbnB1dDEgLmNvbnRyb2wuc3BkaWYuaW4uaW5wdXQyIC5jb250cm9sLnNwZGlmLmluLmlucHV0MyAuY29udHJvbC5zcGRpZi5pbi5hZGF0MWNkCisKK2xhYmVsIC5jb250cm9sLnNwZGlmLnNwYWNlCisKK2ZyYW1lIC5jb250cm9sLnNwZGlmLm91dAorbGFiZWwgLmNvbnRyb2wuc3BkaWYub3V0LnRleHQgLXRleHQgIlNQRElGIE91dCIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0LnBybyAtdGV4dCAiUHJvZmVzc2lvbmFsIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3Bwcm9mIC1jb21tYW5kIHNldHByb2YgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5jb250cm9sLnNwZGlmLm91dC5lbXBoYXNpcyAtdGV4dCAiRW1waGFzaXMiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcGVtcGggLWNvbW1hbmQgc2V0ZW1waCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0LmRvbGJ5IC10ZXh0ICJOb0F1ZGlvIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3Bub2F1ZCAtY29tbWFuZCBzZXRub2F1ZCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0Lm9wdG91dCAtdGV4dCAiT3B0aWNhbCBPdXQiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcG9wdGljYWwgLWNvbW1hbmQgc2V0b3B0aWNhbCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworCitwYWNrIC5jb250cm9sLnNwZGlmLm91dC5vcHRvdXQgLmNvbnRyb2wuc3BkaWYub3V0LmRvbGJ5IC5jb250cm9sLnNwZGlmLm91dC5lbXBoYXNpcyAuY29udHJvbC5zcGRpZi5vdXQucHJvIC5jb250cm9sLnNwZGlmLm91dC50ZXh0IC1zaWRlIGJvdHRvbQorCitwYWNrIC5jb250cm9sLnNwZGlmLmluIC5jb250cm9sLnNwZGlmLnNwYWNlIC5jb250cm9sLnNwZGlmLm91dCAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCisjIFN5bmMgTW9kZSAmIFN5bmMgU291cmNlCisKK2ZyYW1lIC5jb250cm9sLnN5bmMKK2ZyYW1lIC5jb250cm9sLnN5bmMubW9kZQorbGFiZWwgLmNvbnRyb2wuc3luYy5tb2RlLnRleHQgLXRleHQgIlN5bmMgTW9kZSIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLmNvbnRyb2wuc3luYy5tb2RlLm1hc3RlciAtdGV4dCAiTWFzdGVyIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgbWFzdGVyIC1jb21tYW5kIHNldG1hc3RlciAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3luYy5tb2RlLndjIC10ZXh0ICJXb3JkY2xvY2siIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSB3b3JkY2xvY2sgLWNvbW1hbmQgc2V0d29yZGNsb2NrIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuc3luYy5tb2RlLnRleHQgLmNvbnRyb2wuc3luYy5tb2RlLm1hc3RlciAuY29udHJvbC5zeW5jLm1vZGUud2MKKworbGFiZWwgLmNvbnRyb2wuc3luYy5zcGFjZQorCitmcmFtZSAuY29udHJvbC5zeW5jLnNyYworbGFiZWwgLmNvbnRyb2wuc3luYy5zcmMudGV4dCAtdGV4dCAiU3luYyBTb3VyY2UiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MSAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC12YWx1ZSAxIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MiAtdGV4dCAiQURBVDIiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC12YWx1ZSAyIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MyAtdGV4dCAiQURBVDMiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXZhbHVlIDMgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0NCAtdGV4dCAiU1BESUYiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXZhbHVlIDQgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5zeW5jLnNyYy5pbnB1dDQgLmNvbnRyb2wuc3luYy5zcmMuaW5wdXQzIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MiAuY29udHJvbC5zeW5jLnNyYy5pbnB1dDEgLmNvbnRyb2wuc3luYy5zcmMudGV4dCAtc2lkZSBib3R0b20KKworcGFjayAuY29udHJvbC5zeW5jLm1vZGUgLmNvbnRyb2wuc3luYy5zcGFjZSAuY29udHJvbC5zeW5jLnNyYyAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCitsYWJlbCAuY29udHJvbC5zcGFjZSAtdGV4dCAiIiAtd2lkdGggMTAKKworIyBCdWZmZXIgU2l6ZQorCitmcmFtZSAuY29udHJvbC5idWYKK2xhYmVsIC5jb250cm9sLmJ1Zi50ZXh0IC10ZXh0ICJCdWZmZXIgU2l6ZSAoTGF0ZW5jeSkiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iMSAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI2NCAoMS41IG1zKSIgLXdpZHRoIDEzIC1hbmNob3IgbncgLXZhcmlhYmxlIHNzcmF0ZSAtdmFsdWUgMSAtZm9udCB0aW1lcworcmFkaW9idXR0b24gLmNvbnRyb2wuYnVmLmIyIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjEyOCAoMyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDIgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iMyAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIyNTYgKDYgbXMpIiAtd2lkdGggMTMgLWFuY2hvciBudyAtdmFyaWFibGUgc3NyYXRlIC12YWx1ZSAzIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuY29udHJvbC5idWYuYjQgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiNTEyICgxMiBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDQgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNSAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIxMDI0ICgyMyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIyMDQ4ICg0NiBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDYgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNyAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI0MDk2ICg5MyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDcgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iOCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI4MTkyICgxODYgbXMpIiAtd2lkdGggMTMgLWFuY2hvciBudyAtdmFyaWFibGUgc3NyYXRlIC12YWx1ZSA4IC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuYnVmLnRleHQgLmNvbnRyb2wuYnVmLmIxIC5jb250cm9sLmJ1Zi5iMiAuY29udHJvbC5idWYuYjMgLmNvbnRyb2wuYnVmLmI0IC5jb250cm9sLmJ1Zi5iNSAuY29udHJvbC5idWYuYjYgLmNvbnRyb2wuYnVmLmI3IC5jb250cm9sLmJ1Zi5iOCAtc2lkZSB0b3AgLXBhZHggMyAKKworIyBPZmZzZXQKKworZnJhbWUgLmNvbnRyb2wub2Zmc2V0CisKK2ZyYW1lIC5jb250cm9sLm9mZnNldC5pbgorbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLnRleHQgLXRleHQgIk9mZnNldCBJbiIgLWp1c3RpZnkgbGVmdAorbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLm9mZjAgLXRleHQgImRldlwjMDogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKK2xhYmVsIC5jb250cm9sLm9mZnNldC5pbi5vZmYxIC10ZXh0ICJkZXZcIzE6IC0iIC1hbmNob3IgbncgLXdpZHRoIDEwIC1mb250IHRpbWVzCitsYWJlbCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiAtdGV4dCAiZGV2XCMyOiAtIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtZm9udCB0aW1lcworbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLm9mZjMgLXRleHQgImRldlwjMzogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5vZmZzZXQuaW4udGV4dCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMSAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMworCitsYWJlbCAuY29udHJvbC5vZmZzZXQuc3BhY2UKKworZnJhbWUgLmNvbnRyb2wub2Zmc2V0Lm91dAorbGFiZWwgLmNvbnRyb2wub2Zmc2V0Lm91dC50ZXh0IC10ZXh0ICJPZmZzZXQgT3V0IiAtanVzdGlmeSBsZWZ0CitsYWJlbCAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgLXRleHQgImRldlwjMDogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKK2xhYmVsIC5jb250cm9sLm9mZnNldC5vdXQub2ZmMSAtdGV4dCAiZGV2XCMxOiAtIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtZm9udCB0aW1lcworbGFiZWwgLmNvbnRyb2wub2Zmc2V0Lm91dC5vZmYyIC10ZXh0ICJkZXZcIzI6IC0iIC1hbmNob3IgbncgLXdpZHRoIDEwIC1mb250IHRpbWVzCitsYWJlbCAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgLXRleHQgImRldlwjMzogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgLmNvbnRyb2wub2Zmc2V0Lm91dC5vZmYyIC5jb250cm9sLm9mZnNldC5vdXQub2ZmMSAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgLmNvbnRyb2wub2Zmc2V0Lm91dC50ZXh0IC1zaWRlIGJvdHRvbQorCitwYWNrIC5jb250cm9sLm9mZnNldC5pbiAuY29udHJvbC5vZmZzZXQuc3BhY2UgLmNvbnRyb2wub2Zmc2V0Lm91dCAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCisKK3BhY2sgLmNvbnRyb2wuc3BkaWYgLmNvbnRyb2wuc3luYyAuY29udHJvbC5zcGFjZSAuY29udHJvbC5idWYgLmNvbnRyb2wub2Zmc2V0IC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtYW5jaG9yIG4gLWV4cGFuZCAxCisKKworbGFiZWwgLnN0YXR1c3RleHQgLXRleHQgU3RhdHVzIC1qdXN0aWZ5IGNlbnRlciAtcmVsaWVmIHJpZGdlCitsYWJlbCAuY29udHJvbHRleHQgLXRleHQgQ29udHJvbCAtanVzdGlmeSBjZW50ZXIgLXJlbGllZiByaWRnZQorCitsYWJlbCAuc3RhdHVzc3BhY2UKK2xhYmVsIC5jb250cm9sc3BhY2UKKworcGFjayAuc3RhdHVzdGV4dCAuc3RhdHVzIC5zdGF0dXNzcGFjZSAuY29udHJvbHRleHQgLmNvbnRyb2wgLmNvbnRyb2xzcGFjZSAtc2lkZSB0b3AgLWFuY2hvciBudyAtZmlsbCBib3RoIC1leHBhbmQgMQorCisKK3Byb2MgZ2V0X2JpdCB7b3V0cHV0IHNzdHJ9IHsKKyAgICBzZXQgaWR4MSBbc3RyaW5nIGxhc3QgW2NvbmNhdCAkc3N0ciAxXSAkb3V0cHV0XQorICAgIHNldCBpZHgxIFtleHByICRpZHgxICE9IC0xXQorICAgIHJldHVybiAkaWR4MQorfQorCitwcm9jIGdldF92YWwge291dHB1dCBzc3RyfSB7CisgICAgc2V0IHZhbCBbc3RyaW5nIHdvcmRlbmQgJG91dHB1dCBbc3RyaW5nIGxhc3QgJHNzdHIgJG91dHB1dF1dIAorICAgIHNldCB2YWwgW3N0cmluZyByYW5nZSAkb3V0cHV0ICR2YWwgW2V4cHIgJHZhbCsxXV0KKyAgICByZXR1cm4gJHZhbAorfQorCitwcm9jIGdldF92YWwyIHtvdXRwdXQgc3N0cn0geworICAgIHNldCB2YWwgW3N0cmluZyB3b3JkZW5kICRvdXRwdXQgW3N0cmluZyBmaXJzdCAkc3N0ciAkb3V0cHV0XV0gCisgICAgc2V0IHZhbCBbc3RyaW5nIHJhbmdlICRvdXRwdXQgJHZhbCBbZXhwciAkdmFsKzJdXQorICAgIHJldHVybiAkdmFsCit9CisKK3Byb2MgZ2V0X2NvbnRyb2wge30geworICAgIGdsb2JhbCBzcHByb2YKKyAgICBnbG9iYWwgc3BlbXBoCisgICAgZ2xvYmFsIHNwbm9hdWQKKyAgICBnbG9iYWwgc3BvcHRpY2FsCisgICAgZ2xvYmFsIHNwZGlmaW4KKyAgICBnbG9iYWwgc3NyYXRlCisgICAgZ2xvYmFsIG1hc3RlcgorICAgIGdsb2JhbCB3b3JkY2xvY2sKKyAgICBnbG9iYWwgc3luY3NvdXJjZQorICAgIGdsb2JhbCBDVFJMUFJPRworCisgICAgc2V0IGYgW29wZW4gInwgJENUUkxQUk9HIGNvbnRyb2wiIHIrXQorICAgIHNldCBvb28gW3JlYWQgJGYgMTAwMF0KKyAgICBjbG9zZSAkZgorIyAgICBwdXRzICRvb28KKworICAgIHNldCBzcHByb2YgWyBnZXRfYml0ICRvb28gInBybyJdCisgICAgc2V0IHNwZW1waCBbIGdldF9iaXQgJG9vbyAiZW1waGFzaXMiXQorICAgIHNldCBzcG5vYXVkIFsgZ2V0X2JpdCAkb29vICJkb2xieSJdCisgICAgc2V0IHNwb3B0aWNhbCBbIGdldF9iaXQgJG9vbyAib3B0X291dCJdCisgICAgc2V0IHNwZGlmaW4gWyBleHByIFsgZ2V0X3ZhbCAkb29vICJzcGRpZl9pbiJdICsgMV0KKyAgICBzZXQgc3NyYXRlIFsgZXhwciBbIGdldF92YWwgJG9vbyAibGF0ZW5jeSJdICsgMV0KKyAgICBzZXQgbWFzdGVyIFsgZXhwciBbIGdldF92YWwgJG9vbyAibWFzdGVyIl1dCisgICAgc2V0IHdvcmRjbG9jayBbIGV4cHIgWyBnZXRfdmFsICRvb28gIndvcmRjbG9jayJdXQorICAgIHNldCBzeW5jc291cmNlIFsgZXhwciBbIGdldF92YWwgJG9vbyAic3luY19yZWYiXSArIDFdCit9CisKK3Byb2MgZ2V0X3N0YXR1cyB7fSB7CisgICAgZ2xvYmFsIHNyYXRlCisgICAgZ2xvYmFsIGN0cmxjb20KKworICAgIGdsb2JhbCBhZGF0bG9jazEKKyAgICBnbG9iYWwgYWRhdGxvY2syCisgICAgZ2xvYmFsIGFkYXRsb2NrMworCisgICAgZ2xvYmFsIGFkYXRzeW5jMQorICAgIGdsb2JhbCBhZGF0c3luYzIKKyAgICBnbG9iYWwgYWRhdHN5bmMzCisKKyAgICBnbG9iYWwgdGNidXN5CisgICAgZ2xvYmFsIHRjb3V0CisgICAgZ2xvYmFsIHRjdmFsaWQKKworICAgIGdsb2JhbCBzcGRpZmVycgorICAgIGdsb2JhbCBjcnlzdGFsCisgICAgZ2xvYmFsIC5zdGF0dXMuc3BkaWYudGV4dAorICAgIGdsb2JhbCBDVFJMUFJPRworCisKKyAgICBzZXQgZiBbb3BlbiAifCAkQ1RSTFBST0cgc3RhdHVzIiByK10KKyAgICBzZXQgb29vIFtyZWFkICRmIDEwMDBdCisgICAgY2xvc2UgJGYKKyMgICAgcHV0cyAkb29vCisKKyMgc2FtcGxlcmF0ZQorCisgICAgc2V0IGlkeDEgW3N0cmluZyBsYXN0ICJzcjQ4IDEiICRvb29dCisgICAgc2V0IGlkeDIgW3N0cmluZyBsYXN0ICJkb3VibGVzcGVlZCAxIiAkb29vXQorICAgIGlmIHskaWR4MSA+PSAwfSB7CisJc2V0IGZhY3QxIDQ4MDAwCisgICAgfSBlbHNlIHsKKwlzZXQgZmFjdDEgNDQxMDAKKyAgICB9CisKKyAgICBpZiB7JGlkeDIgPj0gMH0geworCXNldCBmYWN0MiAyCisgICAgfSBlbHNlIHsKKwlzZXQgZmFjdDIgMQorICAgIH0KKyAgICBzZXQgc3JhdGUgW2V4cHIgJGZhY3QxICogJGZhY3QyXQorIyAgIEFEQVQgbG9jaworCisgICAgc2V0IHZhbCBbZ2V0X3ZhbCAkb29vIGxvY2ttYXNrXQorICAgIHNldCBhZGF0bG9jazEgMAorICAgIHNldCBhZGF0bG9jazIgMAorICAgIHNldCBhZGF0bG9jazMgMAorICAgIGlmIHtbZXhwciAkdmFsICYgMV19IHsKKyAgICAgICBzZXQgYWRhdGxvY2szIDEKKyAgICB9CisgICAgaWYge1tleHByICR2YWwgJiAyXX0geworICAgICAgIHNldCBhZGF0bG9jazIgMQorICAgIH0KKyAgICBpZiB7W2V4cHIgJHZhbCAmIDRdfSB7CisgICAgICAgc2V0IGFkYXRsb2NrMSAxCisgICAgfQorCisjICBBREFUIHN5bmMKKyAgICBzZXQgdmFsIFtnZXRfdmFsICRvb28gc3luY21hc2tdCisgICAgc2V0IGFkYXRzeW5jMSAwCisgICAgc2V0IGFkYXRzeW5jMiAwCisgICAgc2V0IGFkYXRzeW5jMyAwCisKKyAgICBpZiB7W2V4cHIgJHZhbCAmIDFdfSB7CisgICAgICAgc2V0IGFkYXRzeW5jMyAxCisgICAgfQorICAgIGlmIHtbZXhwciAkdmFsICYgMl19IHsKKyAgICAgICBzZXQgYWRhdHN5bmMyIDEKKyAgICB9CisgICAgaWYge1tleHByICR2YWwgJiA0XX0geworICAgICAgIHNldCBhZGF0c3luYzEgMQorICAgIH0KKworIyBUQyBidXN5CisKKyAgICBzZXQgdGNidXN5IFtnZXRfYml0ICRvb28gImJ1c3kiXQorICAgIHNldCB0Y291dCBbZ2V0X2JpdCAkb29vICJvdXQiXQorICAgIHNldCB0Y3ZhbGlkIFtnZXRfYml0ICRvb28gInZhbGlkIl0KKyAgICBzZXQgc3BkaWZlcnIgW2V4cHIgW2dldF9iaXQgJG9vbyAic3BkaWZfZXJyb3IiXSA9PSAwXQorCisjICAwMDA9NjRrSHosIDEwMD04OC4ya0h6LCAwMTE9OTZrSHoKKyMgIDExMT0zMmtIeiwgMTEwPTQ0LjFrSHosIDEwMT00OGtIegorCisgICAgc2V0IHZhbCBbZ2V0X3ZhbCAkb29vIGNyeXN0YWxyYXRlXQorCisgICAgc2V0IGNyeXN0YWwgIi0tLi0ga0h6IgorICAgIGlmIHskdmFsID09IDB9IHsKKyAgICAgICAgc2V0IGNyeXN0YWwgIjY0IGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gNH0geworICAgICAgICBzZXQgY3J5c3RhbCAiODguMiBrSHoiCisgICAgfQorICAgIGlmIHskdmFsID09IDN9IHsKKyAgICAgICAgc2V0IGNyeXN0YWwgIjk2IGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gN30geworICAgICAgICBzZXQgY3J5c3RhbCAiMzIga0h6IgorICAgIH0KKyAgICBpZiB7JHZhbCA9PSA2fSB7CisgICAgICAgIHNldCBjcnlzdGFsICI0NC4xIGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gNX0geworICAgICAgICBzZXQgY3J5c3RhbCAiNDgga0h6IgorICAgIH0KKyAgICAuc3RhdHVzLnNwZGlmLnNyIGNvbmZpZ3VyZSAtdGV4dCAkY3J5c3RhbAorfQorCitwcm9jIGdldF9vZmZzZXQge30geworICAgIGdsb2JhbCBpbm9mZnNldAorICAgIGdsb2JhbCBvdXRvZmZzZXQKKyAgICBnbG9iYWwgQ1RSTFBST0cKKworICAgIHNldCBmIFtvcGVuICJ8ICRDVFJMUFJPRyBtaXgiIHIrXQorICAgIHNldCBvb28gW3JlYWQgJGYgMTAwMF0KKyAgICBjbG9zZSAkZgorIyAgICBwdXRzICRvb28KKworICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMCBjb25maWd1cmUgLXRleHQgImRldlwjMDogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMSBjb25maWd1cmUgLXRleHQgImRldlwjMTogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiBjb25maWd1cmUgLXRleHQgImRldlwjMjogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMyBjb25maWd1cmUgLXRleHQgImRldlwjMzogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6IC0iCisgICAgfQorfQorCisKK3Byb2MgZ2V0X2FsbCB7fSB7CitnZXRfc3RhdHVzCitnZXRfY29udHJvbAorZ2V0X29mZnNldAorfQorCisjIG1haW4KK3doaWxlIHsxfSB7CisgIGFmdGVyIDIwMAorICBnZXRfYWxsCisgIHVwZGF0ZQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29sbzEgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9zb2xvMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjUzZDQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29sbzEKQEAgLTAsMCArMSw3MCBAQAorUmVjb3JkaW5nCistLS0tLS0tLS0KKworUmVjb3JkaW5nIGRvZXMgbm90IHdvcmsgb24gdGhlIGF1dGhvcidzIGNhcmQsIGJ1dCB0aGVyZQoraXMgYXQgbGVhc3Qgb25lIHJlcG9ydCBvZiBpdCB3b3JraW5nIG9uIGxhdGVyIHNpbGljb24uCitUaGUgY2hpcCBiZWhhdmVzIGRpZmZlcmVudGx5IHRoYW4gZGVzY3JpYmVkIGluIHRoZSBkYXRhIHNoZWV0LAorbGlrZWx5IGR1ZSB0byBhIGNoaXAgYnVnLiBXb3JraW5nIGFyb3VuZCB0aGlzIHdvdWxkIHJlcXVpcmUKK3RoZSBoZWxwIG9mIEVTUyAoZm9yIGV4YW1wbGUgYnkgcHVibGlzaGluZyBhbiBlcnJhdGEgc2hlZXQpLAorYnV0IEVTUyBoYXMgbm90IGRvbmUgc28gc28gZmFyLgorCitBbHNvLCB0aGUgY2hpcCBvbmx5IHN1cHBvcnRzIDI0IGJpdCBhZGRyZXNzZXMgZm9yIHJlY29yZGluZywKK3doaWNoIG1lYW5zIGl0IGNhbm5vdCB3b3JrIG9uIHNvbWUgQWxwaGEgbWFpbmJvYXJkcy4KKworCisvcHJvYy9zb3VuZCwgL2Rldi9zbmRzdGF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9wcm9jL3NvdW5kIGFuZCAvZGV2L3NuZHN0YXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKK2RyaXZlci4gVG8gZmluZCBvdXQgd2hldGhlciB0aGUgZHJpdmVyIHN1Y2NlZWRlZCBsb2FkaW5nLAorY2hlY2sgdGhlIGtlcm5lbCBsb2cgKGRtZXNnKS4KKworCitBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMuCitBTGF3IGlzIHRoZSBkZWZhdWx0IG1vZGUgd2hlbiBvcGVuaW5nIGEgc291bmQgZGV2aWNlCit1c2luZyBPU1MvRnJlZS4gVGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2Ygc3VwcG9ydCBpcwordGhhdCB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmb3JtYXRzLCBhbmQgYWRkaW5nCitjb252ZXJzaW9uIHJvdXRpbmVzIHRvIHRoZSBrZXJuZWwgd291bGQgbGVhZCB0byB2ZXJ5IHVnbHkKK2NvZGUgaW4gdGhlIHByZXNlbmNlIG9mIHRoZSBtbWFwIGludGVyZmFjZSB0byB0aGUgZHJpdmVyLgorQW5kIHNpbmNlIHhxdWFrZSB1c2VzIG1tYXAsIG1tYXAgaXMgY29uc2lkZXJlZCBpbXBvcnRhbnQgOi0pCithbmQgbm8gc2FuZSBhcHBsaWNhdGlvbiB1c2VzIEFMYXcvdUxhdyB0aGVzZSBkYXlzIGFueXdheS4KK0luIHNob3J0LCBwbGF5aW5nIGEgU3VuIC5hdSBmaWxlIGFzIGZvbGxvd3M6CisKK2NhdCBteV9maWxlLmF1ID4gL2Rldi9kc3AKKworZG9lcyBub3Qgd29yay4gSW5zdGVhZCwgeW91IG1heSB1c2UgdGhlIHBsYXkgc2NyaXB0IGZyb20KK0NocmlzIEJhZ3dlbGwncyBzb3gtMTIuMTQgcGFja2FnZSAob3IgbGF0ZXIsIGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQgaGFzIGFuIE9QTCBjb21wYXRpYmxlIEZNIHN5bnRoZXNpemVyLgorCitUaG9tYXMgU2FpbGVyCit0LnNhaWxlckBhbHVtbmkuZXRoei5jaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29uaWN2aWJlcyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbmljdmliZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkZWUyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbmljdmliZXMKQEAgLTAsMCArMSw4MSBAQAorL3Byb2Mvc291bmQsIC9kZXYvc25kc3RhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvcHJvYy9zb3VuZCBhbmQgL2Rldi9zbmRzdGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCitkcml2ZXIuIFRvIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGRyaXZlciBzdWNjZWVkZWQgbG9hZGluZywKK2NoZWNrIHRoZSBrZXJuZWwgbG9nIChkbWVzZykuCisKKworQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzLgorQUxhdyBpcyB0aGUgZGVmYXVsdCBtb2RlIHdoZW4gb3BlbmluZyBhIHNvdW5kIGRldmljZQordXNpbmcgT1NTL0ZyZWUuIFRoZSByZWFzb24gZm9yIHRoZSBsYWNrIG9mIHN1cHBvcnQgaXMKK3RoYXQgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UgZm9ybWF0cywgYW5kIGFkZGluZworY29udmVyc2lvbiByb3V0aW5lcyB0byB0aGUga2VybmVsIHdvdWxkIGxlYWQgdG8gdmVyeSB1Z2x5Citjb2RlIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgbW1hcCBpbnRlcmZhY2UgdG8gdGhlIGRyaXZlci4KK0FuZCBzaW5jZSB4cXVha2UgdXNlcyBtbWFwLCBtbWFwIGlzIGNvbnNpZGVyZWQgaW1wb3J0YW50IDotKQorYW5kIG5vIHNhbmUgYXBwbGljYXRpb24gdXNlcyBBTGF3L3VMYXcgdGhlc2UgZGF5cyBhbnl3YXkuCitJbiBzaG9ydCwgcGxheWluZyBhIFN1biAuYXUgZmlsZSBhcyBmb2xsb3dzOgorCitjYXQgbXlfZmlsZS5hdSA+IC9kZXYvZHNwCisKK2RvZXMgbm90IHdvcmsuIEluc3RlYWQsIHlvdSBtYXkgdXNlIHRoZSBwbGF5IHNjcmlwdCBmcm9tCitDaHJpcyBCYWd3ZWxsJ3Mgc294LTEyLjE0IHBhY2thZ2UgKGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQgYm90aCBoYXMgYW4gT1BMIGNvbXBhdGlibGUgRk0gc3ludGhlc2l6ZXIgYXMgd2VsbCBhcworYSB3YXZldGFibGUgc3ludGhlc2l6ZXIuCisKK0kgaGF2ZW4ndCBtYW5hZ2VkIHNvIGZhciB0byBnZXQgdGhlIE9QTCBzeW50aCBydW5uaW5nLgorCitVc2luZyB0aGUgd2F2ZXRhYmxlIHN5bnRoZXNpemVyIHJlcXVpcmVzIGFsbG9jYXRpbmcKKzEtNE1CIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnksIHdoaWNoIGlzbid0IHBvc3NpYmxlCitjdXJyZW50bHkgb24gTGludXggd2l0aG91dCB1Z2x5IGhhY2tzIGxpa2UgdGhlIGJpZ3BoeXNhcmVhCitwYXRjaC4gVGhlcmVmb3JlLCB0aGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCB3YXZldGFibGUKK3N5bnRoZXNpcy4KKworCitObyBzdXBwb3J0IGZyb20gUzMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGRvIG5vdCBnZXQgYW55IHN1cHBvcnQgZnJvbSBTMy4gVGhlcmVmb3JlLCB0aGUgZHJpdmVyCitzdGlsbCBoYXMgbWFueSBwcm9ibGVtcy4gRm9yIGV4YW1wbGUsIGFsdGhvdWdoIHRoZSBtYW51YWwKK3N0YXRlcyB0aGF0IHRoZSBjaGlwIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2FtcGxlCitidWZmZXIgYW55d2hlcmUgaW4gMzJiaXQgYWRkcmVzcyBzcGFjZSwgSSBoYXZlbid0IG1hbmFnZWQgdG8KK2dldCBpdCB3b3JraW5nIHdpdGggYnVmZmVycyBhYm92ZSAxNk0uIFRoZXJlZm9yZSwgdGhlIGNhcmQKK2hhcyB0aGUgc2FtZSBkaXNhZHZhbnRhZ2VzIGFzIElTQSBzb3VuZGNhcmRzLgorCitHaXZlbiB0aGF0IHRoZSBjYXJkIGlzIGFsc28gdmVyeSBub2lzeSwgYW5kIGlmIHlvdSBoYXZlbid0CithbHJlYWR5IGJvdWdodCBpdCwgeW91IHNob3VsZCBzdHJvbmdseSBvcHQgZm9yIG9uZSBvZiB0aGUKK2NvbXBhcmF0aXZlbHkgcHJpY2VkIEVuc29uaXEgcHJvZHVjdHMuCisKKworVGhvbWFzIFNhaWxlcgordC5zYWlsZXJAYWx1bW5pLmV0aHouY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3VsdHJhc291bmQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy91bHRyYXNvdW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyY2Q1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy91bHRyYXNvdW5kCkBAIC0wLDAgKzEsMzAgQEAKK21vZHByb2JlIHNvdW5kCitpbnNtb2QgYWQxODQ4CitpbnNtb2QgZ3VzIGlvPSogaXJxPSogZG1hPSogLi4uCisKK1RoaXMgbG9hZHMgdGhlIGRyaXZlciBmb3IgdGhlIEdyYXZpcyBVbHRyYXNvdW5kIGZhbWlseSBvZiBzb3VuZCBjYXJkcy4KKworVGhlIGd1cyBtb2R1bGUgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMKKworaW8JCUkvTyBhZGRyZXNzIG9mIHRoZSBVbHRyYXNvdW5kIGNhcmQgKGVnLiBpbz0weDIyMCkKK2lycQkJSVJRIG9mIHRoZSBTb3VuZCBCbGFzdGVyIGNhcmQgCitkbWEgICAgIAlETUEgY2hhbm5lbCBmb3IgdGhlIFNvdW5kIEJsYXN0ZXIKK2RtYTE2ICAgCTJuZCBETUEgY2hhbm5lbCwgb25seSBuZWVkZWQgZm9yIGZ1bGwgZHVwbGV4IG9wZXJhdGlvbgordHlwZQkJMSBmb3IgUG5QIGNhcmQKK2d1czE2CQkxIGZvciB1c2luZyAxNiBiaXQgc2FtcGxpbmcgZGF1Z2h0ZXIgYm9hcmQKK25vX3dhdmVfZG1hCVNldCB0byBkaXNhYmxlIERNQSB1c2FnZSBmb3Igd2F2ZXRhYmxlIChzZWUgbm90ZSkKK2RiMTYJCT8/PworCisKK25vX3dhdmVfZG1hIG9wdGlvbgorCitUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byBhIHZhbHVlIG9mIDAsIHdoaWNoIGFsbG93cyB0aGUgVWx0cmFzb3VuZCB3YXZldGFibGUKK0RTUCB0byB1c2UgRE1BIGZvciBmb3IgcGxheWJhY2sgYW5kIGRvd25sb2FkaW5nIHNhbXBsZXMuIFRoaXMgaXMgdGhlIHNhbWUKK2FzIHRoZSBvbGQgYmVoYXZpb3VyLiBJZiBzZXQgdG8gMSwgbm8gRE1BIGlzIG5lZWRlZCBmb3IgZG93bmxvYWRpbmcgc2FtcGxlcywKK2FuZCBhbGxvd3Mgb3duZXJzIG9mIGEgR1VTIE1BWCB0byBtYWtlIHVzZSBvZiBzaW11bHRhbmVvdXMgZGlnaXRhbCBhdWRpbworKC9kZXYvZHNwKSwgTUlESSwgYW5kIHdhdmV0YWJsZSBwbGF5YmFjay4KKworCitJZiB5b3UgaGF2ZSBwcm9ibGVtcyBpbiByZWNvcmRpbmcgd2l0aCBHVVMgTUFYLCB5b3UgY291bGQgdHJ5IHRvIHVzZQoranVzdCBvbmUgOCBiaXQgRE1BIGNoYW5uZWwuIFJlY29yZGluZyB3aWxsIG5vdCB3b3JrIHdpdGggb25lIERNQQorY2hhbm5lbCBpZiBpdCdzIGEgMTYgYml0IG9uZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3Z3c25kIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvdndzbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlYTBhMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3Z3c25kCkBAIC0wLDAgKzEsMjkzIEBACit2d3NuZCAtIFNvdW5kIGRyaXZlciBmb3IgdGhlIFNpbGljb24gR3JhcGhpY3MgMzIwIGFuZCA1NDAgVmlzdWFsCitXb3Jrc3RhdGlvbnMnIG9uYm9hcmQgYXVkaW8uCisKK0NvcHlyaWdodCAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKworQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBNYXJjaCAxOTk5LCB0aGVyZSBhcmUgdHdvIG1vZGVscyBvZgorVmlzdWFsIFdvcmtzdGF0aW9uLCB0aGUgMzIwIGFuZCB0aGUgNTQwLiAgVGhpcyBkb2N1bWVudCBvbmx5IGRlc2NyaWJlcwordGhvc2UgbW9kZWxzLiAgRnV0dXJlIFZpc3VhbCBXb3Jrc3RhdGlvbiBtb2RlbHMgbWF5IGhhdmUgZGlmZmVyZW50Citzb3VuZCBjYXBhYmlsaXRpZXMsIGFuZCB0aGlzIGRyaXZlciB3aWxsIHByb2JhYmx5IG5vdCB3b3JrIG9uIHRob3NlCitib3hlcy4KKworVGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiBoYXMgYW4gQW5hbG9nIERldmljZXMgQUQxODQzICJTb3VuZENvbW0iIGF1ZGlvCitjb2RlYyBjaGlwLiAgVGhlIEFEMTg0MyBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBDb2JhbHQgSS9PIEFTSUMsIGFsc28KK2tub3duIGFzIExpdGhpdW0uICBUaGlzIGRyaXZlciBwcm9ncmFtcyBib3RoIGJvdGggY2hpcHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUVVJQ0sgQ09ORklHVVJBVElPTgorCisJIyBpbnNtb2Qgc291bmRjb3JlCisJIyBpbnNtb2QgdndzbmQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJL08gQ09OTkVDVElPTlMKKworT24gdGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiwgb25seSB0aHJlZSBvZiB0aGUgQUQxODQzIGlucHV0cyBhcmUgaG9va2VkCit1cC4gIFRoZSBhbmFsb2cgbGluZSBpbiBqYWNrcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBBRDE4NDMncyBBVVgxCitpbnB1dC4gIFRoZSBDRCBhdWRpbyBsaW5lcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBBRDE4NDMncyBBVVgyIGlucHV0LgorVGhlIG1pY3JvcGhvbmUgamFjayBpcyBjb25uZWN0ZWQgdG8gdGhlIEFEMTg0MydzIE1JQyBpbnB1dC4gIFRoZSBtaWMKK2phY2sgaXMgbW9ubywgYnV0IHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkIHRvIGJvdGggdGhlIGxlZnQgYW5kIHJpZ2h0CitNSUMgaW5wdXRzLiAgWW91IGNhbiByZWNvcmQgaW4gc3RlcmVvIGZyb20gdGhlIG1pYyBpbnB1dCwgYnV0IHlvdSB3aWxsCitnZXQgdGhlIHNhbWUgc2lnbmFsIG9uIGJvdGggY2hhbm5lbHMgKHdpdGhpbiB0aGUgbGltaXRzIG9mIEEvRAorYWNjdXJhY3kpLiAgRnVsbCBzY2FsZSBvbiB0aGUgTGluZSBpbnB1dCBpcyArLy0gMi4wIFYuICBGdWxsIHNjYWxlIG9uCit0aGUgTUlDIGlucHV0IGlzIDIwIGRCIGxlc3MsIG9yICsvLSAwLjIgVi4KKworVGhlIEFEMTg0MydzIExPVVQxIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgTGluZSBPdXQgamFja3MuICBUaGUKK0FEMTg0MydzIEhQT1VUIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgc3BlYWtlci9oZWFkcGhvbmUgamFjay4KK0xPVVQyIGlzIG5vdCBjb25uZWN0ZWQuICBMaW5lIG91dCdzIG1heGltdW0gbGV2ZWwgaXMgKy8tIDIuMCBWIHBlYWsgdG8KK3BlYWsuICBUaGUgc3BlYWtlci9oZWFkcGhvbmUgb3V0J3MgbWF4aW11bSBpcyArLy0gNC4wIFYgcGVhayB0byBwZWFrLgorCitUaGUgQUQxODQzJ3MgUENNIGlucHV0IGNoYW5uZWwgYW5kIG9uZSBvZiBpdHMgb3V0cHV0IGNoYW5uZWxzIChEQUMxKQorYXJlIGNvbm5lY3RlZCB0byBMaXRoaXVtLiAgVGhlIG90aGVyIG91dHB1dCBjaGFubmVsIChEQUMyKSBpcyBub3QKK2Nvbm5lY3RlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDQVBBQklMSVRJRVMKKworVGhlIEFEMTg0MyBoYXMgUENNIGlucHV0IGFuZCBvdXRwdXQgKFB1bHNlIENvZGUgTW9kdWxhdGlvbiwgYWxzbyBrbm93bgorYXMgd2F2ZXRhYmxlKS4gIFBDTSBpbnB1dCBhbmQgb3V0cHV0IGNhbiBiZSBtb25vIG9yIHN0ZXJlbyBpbiBhbnkgb2YKK2ZvdXIgZm9ybWF0cy4gIFRoZSBmb3JtYXRzIGFyZSAxNiBiaXQgc2lnbmVkIGFuZCA4IGJpdCB1bnNpZ25lZCwKK3UtTGF3LCBhbmQgQS1MYXcgZm9ybWF0LiAgQW55IHNhbXBsZSByYXRlIGZyb20gNCBLSHogdG8gNDkgS0h6IGlzCithdmFpbGFibGUsIGluIDEgSHogaW5jcmVtZW50cy4KKworVGhlIEFEMTg0MyBpbmNsdWRlcyBhbiBhbmFsb2cgbWl4ZXIgdGhhdCBjYW4gbWl4IGFsbCB0aHJlZSBpbnB1dAorc2lnbmFscyAobGluZSwgbWljIGFuZCBDRCkgaW50byB0aGUgYW5hbG9nIG91dHB1dHMuICBUaGUgbWl4ZXIgaGFzIGEKK3NlcGFyYXRlIGdhaW4gY29udHJvbCBhbmQgbXV0ZSBzd2l0Y2ggZm9yIGVhY2ggaW5wdXQuCisKK1RoZXJlIGFyZSB0d28gb3V0cHV0cywgbGluZSBvdXQgYW5kIHNwZWFrZXIvaGVhZHBob25lIG91dC4gIFRoZXkKK2Fsd2F5cyBwcm9kdWNlIHRoZSBzYW1lIHNpZ25hbCwgYW5kIHRoZSBzcGVha2VyIGFsd2F5cyBoYXMgMyBkQiBtb3JlCitnYWluIHRoYW4gdGhlIGxpbmUgb3V0LiAgVGhlIHNwZWFrZXIvaGVhZHBob25lIG91dHB1dCBjYW4gYmUgbXV0ZWQsCitidXQgdGhpcyBkcml2ZXIgZG9lcyBub3QgZXhwb3J0IHRoYXQgZnVuY3Rpb24uCisKK1RoZSBoYXJkd2FyZSBjYW4gc3luYyBhdWRpbyB0byB0aGUgdmlkZW8gY2xvY2ssIGJ1dCB0aGlzIGRyaXZlciBkb2VzCitub3QgaGF2ZSBhIHdheSB0byBzcGVjaWZ5IHN5bmNpbmcgdG8gdmlkZW8uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUFJPR1JBTU1JTkcKKworVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSBBUEkgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuICBBbHNvIHNlZSB0aGUKK09wZW4gU291bmQgUHJvZ3JhbW1pbmcgR3VpZGUgYXQgaHR0cDovL3d3dy5vcGVuc291bmQuY29tL3BndWlkZS8gLgorVGhpcyBzZWN0aW9uIGFzc3VtZXMgZmFtaWxpYXJpdHkgd2l0aCB0aGF0IGRvY3VtZW50LgorCitUaGUgZHJpdmVyIGhhcyB0d28gaW50ZXJmYWNlcywgYW4gSS9PIGludGVyZmFjZSBhbmQgYSBtaXhlciBpbnRlcmZhY2UuCitUaGVyZSBpcyBubyBNSURJIG9yIHNlcXVlbmNlciBjYXBhYmlsaXR5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BST0dSQU1NSU5HIFBDTSBJL08KKworVGhlIEkvTyBpbnRlcmZhY2UgaXMgdXN1YWxseSBhY2Nlc3NlZCBhcyAvZGV2L2F1ZGlvIG9yIC9kZXYvZHNwLgorVXNpbmcgdGhlIHN0YW5kYXJkIE9wZW4gU291bmQgU3lzdGVtIChPU1MpIGlvY3RsIGNhbGxzLCB0aGUgc2FtcGxlCityYXRlLCBudW1iZXIgb2YgY2hhbm5lbHMsIGFuZCBzYW1wbGUgZm9ybWF0IG1heSBiZSBzZXQgd2l0aGluIHRoZQorbGltaXRhdGlvbnMgZGVzY3JpYmVkIGFib3ZlLiAgVGhlIGRyaXZlciBzdXBwb3J0cyB0cmlnZ2VyaW5nLiAgSXQgYWxzbworc3VwcG9ydHMgZ2V0dGluZyB0aGUgaW5wdXQgYW5kIG91dHB1dCBwb2ludGVycyB3aXRoIG9uZS1zYW1wbGUKK2FjY3VyYWN5LgorCitUaGUgU05EQ1RMX0RTUF9HRVRDQVAgaW9jdGwgcmV0dXJucyB0aGVzZSBjYXBhYmlsaXRpZXMuCisKKwlEU1BfQ0FQX0RVUExFWCAtIGRyaXZlciBzdXBwb3J0cyBmdWxsIGR1cGxleC4KKworCURTUF9DQVBfVFJJR0dFUiAtIGRyaXZlciBzdXBwb3J0cyB0cmlnZ2VyaW5nLgorCisJRFNQX0NBUF9SRUFMVElNRSAtIHZhbHVlcyByZXR1cm5lZCBieSBTTkRDVExfRFNQX0dFVElQVFIKKwlhbmQgU05EQ1RMX0RTUF9HRVRPUFRSIGFyZSBhY2N1cmF0ZSB0byBhIGZldyBzYW1wbGVzLgorCitNZW1vcnkgbWFwcGluZyAobW1hcCkgaXMgbm90IGltcGxlbWVudGVkLgorCitUaGUgZHJpdmVyIHBlcm1pdHMgc3ViZGl2aWRlZCBmcmFnbWVudCBzaXplcyBmcm9tIDY0IHRvIDQwOTYgYnl0ZXMuCitUaGUgbnVtYmVyIG9mIGZyYWdtZW50cyBjYW4gYmUgYW55dGhpbmcgZnJvbSAzIGZyYWdtZW50cyB0byBob3dldmVyCittYW55IGZyYWdtZW50cyBmaXQgaW50byAxMjQga2lsb2J5dGVzLiAgSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8KK2RldGVybWluZSBob3cgZmV3L3NtYWxsIGZyYWdtZW50cyBjYW4gYmUgdXNlZCB3aXRob3V0IGludHJvZHVjaW5nCitnbGl0Y2hlcyB3aXRoIGEgZ2l2ZW4gd29ya2xvYWQuICBMaW51eCBpcyBub3QgcmVhbHRpbWUsIHNvIHdlIGNhbid0Citwcm9taXNlIGFueXRoaW5nLiAgKHNpZ2guLi4pCisKK1doZW4gdGhpcyBkcml2ZXIgaXMgc3dpdGNoZWQgaW50byBvciBvdXQgb2YgbXUtTGF3IG9yIEEtTGF3IG1vZGUgb24KK291dHB1dCwgaXQgbWF5IHByb2R1Y2UgYW4gYXVkaWJsZSBjbGljay4gIFRoaXMgaXMgdW5hdm9pZGFibGUuICBUbworcHJldmVudCBjbGlja2luZywgdXNlIHNpZ25lZCAxNi1iaXQgbW9kZSBpbnN0ZWFkLCBhbmQgY29udmVydCBmcm9tCittdS1MYXcgb3IgQS1MYXcgZm9ybWF0IGluIHNvZnR3YXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BST0dSQU1NSU5HIFRIRSBNSVhFUiBJTlRFUkZBQ0UKKworVGhlIG1peGVyIGludGVyZmFjZSBpcyB1c3VhbGx5IGFjY2Vzc2VkIGFzIC9kZXYvbWl4ZXIuICBJdCBpcyBhY2Nlc3NlZAordGhyb3VnaCBpb2N0bHMuICBUaGUgbWl4ZXIgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBjb250cm9sIGdhaW4gb3IKK211dGUgc2V2ZXJhbCBhdWRpbyBzaWduYWwgcGF0aHMsIGFuZCBhbHNvIGFsbG93cyBzZWxlY3Rpb24gb2YgdGhlCityZWNvcmRpbmcgc291cmNlLgorCitFYWNoIG9mIHRoZSBjb25zdGFudHMgZGVzY3JpYmVkIGhlcmUgY2FuIGJlIHJlYWQgdXNpbmcgdGhlCitNSVhFUl9SRUFEKFNPVU5EX01JWEVSX3h4eCkgaW9jdGwuICBUaG9zZSB0aGF0IGFyZSBub3QgcmVhZC1vbmx5IGNhbgorYWxzbyBiZSB3cml0dGVuIHVzaW5nIHRoZSBNSVhFUl9XUklURShTT1VORF9NSVhFUl94eHgpIGlvY3RsLiAgSW4gbW9zdAorY2FzZXMsIDxzeXMvc291bmRjYXJkLmg+IGRlZmluZXMgY29uc3RhbnRzIFNPVU5EX01JWEVSX1JFQURfeHh4IGFuZAorU09VTkRfTUlYRVJfV1JJVEVfeHh4IHdoaWNoIHdvcmsganVzdCBhcyB3ZWxsLgorCitTT1VORF9NSVhFUl9DQVBTCVJlYWQtb25seQorCitUaGlzIGlzIGEgbWFzayBvZiBvcHRpb25hbCBkcml2ZXIgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGltcGxlbWVudGVkLgorVGhpcyBkcml2ZXIncyBvbmx5IGNhcGFiaWxpdHkgaXMgU09VTkRfQ0FQX0VYQ0xfSU5QVVQsIHdoaWNoIG1lYW5zCit0aGF0IG9ubHkgb25lIHJlY29yZGluZyBzb3VyY2UgY2FuIGJlIGFjdGl2ZSBhdCBhIHRpbWUuCisKK1NPVU5EX01JWEVSX0RFVk1BU0sJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIHRoZSBzb3VuZCBjaGFubmVscy4gIFRoaXMgZHJpdmVyJ3MgY2hhbm5lbHMgYXJlIFBDTSwKK0xJTkUsIE1JQywgQ0QsIGFuZCBSRUNMRVYuCisKK1NPVU5EX01JWEVSX1NURVJFT0RFVlMJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIHdoaWNoIHNvdW5kIGNoYW5uZWxzIGFyZSBjYXBhYmxlIG9mIHN0ZXJlby4gIEFsbAorY2hhbm5lbHMgYXJlIGNhcGFibGUgb2Ygc3RlcmVvLiAgKEJ1dCBzZWUgY2F2ZWF0IG9uIE1JQyBpbnB1dCBpbiBJL08KK0NPTk5FQ1RJT05TIHNlY3Rpb24gYWJvdmUpLgorCitTT1VORF9NSVhFUl9PVVRNQVNLCVJlYWQtb25seQorCitUaGlzIGlzIGEgbWFzayBvZiBjaGFubmVscyB0aGF0IHJvdXRlIGlucHV0cyB0aHJvdWdoIHRvIG91dHB1dHMuCitUaG9zZSBhcmUgTElORSwgTUlDLCBhbmQgQ0QuCisKK1NPVU5EX01JWEVSX1JFQ01BU0sJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHJlY29yZGluZyBzb3VyY2VzLiAgVGhvc2UgYXJlCitQQ00sIExJTkUsIE1JQywgQ0QuCisKK1NPVU5EX01JWEVSX1BDTQkJRGVmYXVsdDogMHg1NzU3ICgwIGRCKQorCitUaGlzIGlzIHRoZSBnYWluIGNvbnRyb2wgZm9yIFBDTSBvdXRwdXQuICBUaGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbAorZ2FpbiBhcmUgY29udHJvbGxlZCBpbmRlcGVuZGVudGx5LiAgVGhpcyBnYWluIGNvbnRyb2wgaGFzIDY0IGxldmVscywKK3doaWNoIHJhbmdlIGZyb20gLTgyLjUgZEIgdG8gKzEyLjAgZEIgaW4gMS41IGRCIHN0ZXBzLiAgVGhvc2UgNjQKK2xldmVscyBhcmUgbWFwcGVkIG9udG8gMTAwIGxldmVscyBhdCB0aGUgaW9jdGwsIHNlZSBiZWxvdy4KKworU09VTkRfTUlYRVJfTElORQlEZWZhdWx0OiAweDRhNGEgKDAgZEIpCisKK1RoaXMgaXMgdGhlIGdhaW4gY29udHJvbCBmb3IgbWl4aW5nIHRoZSBMaW5lIEluIHNvdXJjZSBpbnRvIHRoZQorb3V0cHV0cy4gIFRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVsIGdhaW4gYXJlIGNvbnRyb2xsZWQKK2luZGVwZW5kZW50bHkuICBUaGlzIGdhaW4gY29udHJvbCBoYXMgMzIgbGV2ZWxzLCB3aGljaCByYW5nZSBmcm9tCistMzQuNSBkQiB0byArMTIuMCBkQiBpbiAxLjUgZEIgc3RlcHMuICBUaG9zZSAzMiBsZXZlbHMgYXJlIG1hcHBlZCBvbnRvCisxMDAgbGV2ZWxzIGF0IHRoZSBpb2N0bCwgc2VlIGJlbG93LgorCitTT1VORF9NSVhFUl9NSUMJCURlZmF1bHQ6IDB4NGE0YSAoMCBkQikKKworVGhpcyBpcyB0aGUgZ2FpbiBjb250cm9sIGZvciBtaXhpbmcgdGhlIE1JQyBzb3VyY2UgaW50byB0aGUgb3V0cHV0cy4KK1RoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVsIGdhaW4gYXJlIGNvbnRyb2xsZWQgaW5kZXBlbmRlbnRseS4gIFRoaXMKK2dhaW4gY29udHJvbCBoYXMgMzIgbGV2ZWxzLCB3aGljaCByYW5nZSBmcm9tIC0zNC41IGRCIHRvICsxMi4wIGRCIGluCisxLjUgZEIgc3RlcHMuICBUaG9zZSAzMiBsZXZlbHMgYXJlIG1hcHBlZCBvbnRvIDEwMCBsZXZlbHMgYXQgdGhlCitpb2N0bCwgc2VlIGJlbG93LgorCitTT1VORF9NSVhFUl9DRAkJRGVmYXVsdDogMHg0YTRhICgwIGRCKQorCitUaGlzIGlzIHRoZSBnYWluIGNvbnRyb2wgZm9yIG1peGluZyB0aGUgQ0QgYXVkaW8gc291cmNlIGludG8gdGhlCitvdXRwdXRzLiAgVGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWwgZ2FpbiBhcmUgY29udHJvbGxlZAoraW5kZXBlbmRlbnRseS4gIFRoaXMgZ2FpbiBjb250cm9sIGhhcyAzMiBsZXZlbHMsIHdoaWNoIHJhbmdlIGZyb20KKy0zNC41IGRCIHRvICsxMi4wIGRCIGluIDEuNSBkQiBzdGVwcy4gIFRob3NlIDMyIGxldmVscyBhcmUgbWFwcGVkIG9udG8KKzEwMCBsZXZlbHMgYXQgdGhlIGlvY3RsLCBzZWUgYmVsb3cuCisKK1NPVU5EX01JWEVSX1JFQ0xFVgkgRGVmYXVsdDogMCAoMCBkQikKKworVGhpcyBpcyB0aGUgZ2FpbiBjb250cm9sIGZvciBQQ00gaW5wdXQgKFJFQ29yZGluZyBMRVZlbCkuICBUaGUgbGVmdAorYW5kIHJpZ2h0IGNoYW5uZWwgZ2FpbiBhcmUgY29udHJvbGxlZCBpbmRlcGVuZGVudGx5LiAgVGhpcyBnYWluCitjb250cm9sIGhhcyAxNiBsZXZlbHMsIHdoaWNoIHJhbmdlIGZyb20gMCBkQiB0byArMjIuNSBkQiBpbiAxLjUgZEIKK3N0ZXBzLiAgVGhvc2UgMTYgbGV2ZWxzIGFyZSBtYXBwZWQgb250byAxMDAgbGV2ZWxzIGF0IHRoZSBpb2N0bCwgc2VlCitiZWxvdy4KKworU09VTkRfTUlYRVJfUkVDU1JDCSBEZWZhdWx0OiBTT1VORF9NQVNLX0xJTkUKKworVGhpcyBpcyBhIG1hc2sgb2YgY3VycmVudGx5IHNlbGVjdGVkIFBDTSBpbnB1dCBzb3VyY2VzIChSRUNvcmRpbmcKK1NvdVJDZXMpLiAgQmVjYXVzZSB0aGUgQUQxODQzIGNhbiBvbmx5IGhhdmUgYSBzaW5nbGUgcmVjb3JkaW5nIHNvdXJjZQorYXQgYSB0aW1lLCBvbmx5IG9uZSBiaXQgYXQgYSB0aW1lIGNhbiBiZSBzZXQgaW4gdGhpcyBtYXNrLiAgVGhlCithbGxvd2FibGUgdmFsdWVzIGFyZSBTT1VORF9NQVNLX1BDTSwgU09VTkRfTUFTS19MSU5FLCBTT1VORF9NQVNLX01JQywKK29yIFNPVU5EX01BU0tfQ0QuICBTZWxlY3RpbmcgU09VTkRfTUFTS19QQ00gc2V0cyB1cCBpbnRlcm5hbAorcmVzYW1wbGluZyB3aGljaCBpcyB1c2VmdWwgZm9yIGxvb3BiYWNrIHRlc3RpbmcgYW5kIGZvciBoYXJkd2FyZQorc2FtcGxlIHJhdGUgY29udmVyc2lvbi4gIEJ1dCBzb2Z0d2FyZSBzYW1wbGUgcmF0ZSBjb252ZXJzaW9uIGlzCitwcm9iYWJseSBmYXN0ZXIsIHNvIEkgZG9uJ3Qga25vdyBob3cgdXNlZnVsIHRoYXQgaXMuCisKK1NPVU5EX01JWEVSX09VVFNSQwlERUZBVUxUOiBTT1VORF9NQVNLX0xJTkV8U09VTkRfTUFTS19NSUN8U09VTkRfTUFTS19DRAorCitUaGlzIGlzIGEgbWFzayBvZiBzb3VyY2VzIHRoYXQgYXJlIGN1cnJlbnRseSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK291dHB1dHMuICBUaG9zZSBzb3VyY2VzIHdob3NlIGJpdHMgYXJlIG5vdCBzZXQgYXJlIG11dGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0dBSU4gQ09OVFJPTAorCitUaGVyZSBhcmUgZml2ZSBnYWluIGNvbnRyb2xzIGxpc3RlZCBhYm92ZS4gIEVhY2ggaGFzIDE2LCAzMiwgb3IgNjQKK3N0ZXBzLiAgRWFjaCBjb250cm9sIGhhcyAxLjUgZEIgb2YgZ2FpbiBwZXIgc3RlcC4gIEVhY2ggY29udHJvbCBpcworc3RlcmVvLgorCitUaGUgT1NTIGRlZmluZXMgdGhlIGFyZ3VtZW50IHRvIGEgY2hhbm5lbCBnYWluIGlvY3RsIGFzIGhhdmluZyB0d28KK2NvbXBvbmVudHMsIGxlZnQgYW5kIHJpZ2h0LCBlYWNoIG9mIHdoaWNoIHJhbmdlcyBmcm9tIDAgdG8gMTAwLiAgVGhlCit0d28gY29tcG9uZW50cyBhcmUgcGFja2VkIGludG8gdGhlIHNhbWUgd29yZCwgd2l0aCB0aGUgbGVmdCBzaWRlIGdhaW4KK2luIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlLCBhbmQgdGhlIHJpZ2h0IHNpZGUgZ2FpbiBpbiB0aGUgc2Vjb25kCitsZWFzdCBzaWduaWZpY2FudCBieXRlLiAgSW4gQywgd2Ugd291bGQgc2F5IHRoaXMuCisKKwkjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKwkuLi4KKworCSAJYXNzZXJ0KGxlZnRnYWluID49IDAgJiYgbGVmdGdhaW4gPD0gMTAwKTsKKwkJYXNzZXJ0KHJpZ2h0Z2FpbiA+PSAwICYmIHJpZ2h0Z2FpbiA8PSAxMDApOworCQlhcmcgPSBsZWZ0Z2FpbiB8IHJpZ2h0Z2FpbiA8PCA4OworCitTbyBlYWNoIE9TUyBnYWluIGNvbnRyb2wgaGFzIDEwMSBzdGVwcy4gIEJ1dCB0aGUgaGFyZHdhcmUgaGFzIDE2LCAzMiwKK29yIDY0IHN0ZXBzLiAgVGhlIGhhcmR3YXJlIHN0ZXBzIGFyZSBzcHJlYWQgYWNyb3NzIHRoZSAxMDEgT1NTIHN0ZXBzCituZWFybHkgZXZlbmx5LiAgVGhlIGNvbnZlcnNpb24gZm9ybXVsYXMgYXJlIGxpa2UgdGhpcywgZ2l2ZW4gTiBlcXVhbHMKKzE2LCAzMiwgb3IgNjQuCisKKwlpbnQgcm91bmQgPSBOLzIgLSAxOworCU9TU19nYWluX3N0ZXBzID0gKGh3X2dhaW5fc3RlcHMgKiAxMDAgKyByb3VuZCkgLyAoTiAtIDEpOworCWh3X2dhaW5fc3RlcHMgPSAoT1NTX2dhaW5fc3RlcHMgKiAoTiAtIDEpICsgcm91bmQpIC8gMTAwOworCitIZXJlIGlzIGEgc25pcHBldCBvZiBDIGNvZGUgdGhhdCB3aWxsIHJldHVybiB0aGUgbGVmdCBhbmQgcmlnaHQgZ2Fpbgorb2YgYW55IGNoYW5uZWwgaW4gZEIuICBQYXNzIGl0IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBnYWluX2Rlc2NfdAorc3RydWN0dXJlcyB0byBhY2Nlc3MgYW55IG9mIHRoZSBmaXZlIGNoYW5uZWxzJyBnYWlucy4KKworCXR5cGVkZWYgc3RydWN0IGdhaW5fZGVzYyB7CisJCWZsb2F0IG1pbl9nYWluOworCQlmbG9hdCBnYWluX3N0ZXA7CisJCWludCBuYml0czsKKwkJaW50IGNoYW47CisJfSBnYWluX2Rlc2NfdDsKKworCWNvbnN0IGdhaW5fZGVzY190IGdhaW5fcGNtICAgID0geyAtODIuNSwgMS41LCA2LCBTT1VORF9NSVhFUl9QQ00gICAgfTsKKwljb25zdCBnYWluX2Rlc2NfdCBnYWluX2xpbmUgICA9IHsgLTM0LjUsIDEuNSwgNSwgU09VTkRfTUlYRVJfTElORSAgIH07CisJY29uc3QgZ2Fpbl9kZXNjX3QgZ2Fpbl9taWMgICAgPSB7IC0zNC41LCAxLjUsIDUsIFNPVU5EX01JWEVSX01JQyAgICB9OworCWNvbnN0IGdhaW5fZGVzY190IGdhaW5fY2QgICAgID0geyAtMzQuNSwgMS41LCA1LCBTT1VORF9NSVhFUl9DRCAgICAgfTsKKwljb25zdCBnYWluX2Rlc2NfdCBnYWluX3JlY2xldiA9IHsgICAwLjAsIDEuNSwgNCwgU09VTkRfTUlYRVJfUkVDTEVWIH07CisKKwlpbnQgZ2V0X2dhaW5fZEIoaW50IGZkLCBjb25zdCBnYWluX2Rlc2NfdCAqZ3AsCisJCQlmbG9hdCAqbGVmdCwgZmxvYXQgKnJpZ2h0KQorCXsKKwkJaW50IHdvcmQ7CisJCWludCBsZywgcmc7CisJCWludCBtYXNrID0gKDEgPDwgZ3AtPm5iaXRzKSAtIDE7CisKKwkJaWYgKGlvY3RsKGZkLCBNSVhFUl9SRUFEKGdwLT5jaGFuKSwgJndvcmQpICE9IDApCisJCQlyZXR1cm4gLTE7CS8qIGZhaWwgKi8KKwkJbGcgPSB3b3JkICYgMHhGRjsKKwkJcmcgPSB3b3JkID4+IDggJiAweEZGOworCQlsZyA9IChsZyAqIG1hc2sgKyBtYXNrIC8gMikgLyAxMDA7CisJCXJnID0gKHJnICogbWFzayArIG1hc2sgLyAyKSAvIDEwMDsKKwkJKmxlZnQgPSBncC0+bWluX2dhaW4gKyBncC0+Z2Fpbl9zdGVwICogbGc7CisJCSpyaWdodCA9IGdwLT5taW5fZ2FpbiArIGdwLT5nYWluX3N0ZXAgKiByZzsKKwkJcmV0dXJuIDA7CisJfQkKKworQW5kIGhlcmUgaXMgdGhlIGNvcnJlc3BvbmRpbmcgcm91dGluZSB0byBzZXQgYSBjaGFubmVsJ3MgZ2FpbiBpbiBkQi4KKworCWludCBzZXRfZ2Fpbl9kQihpbnQgZmQsIGNvbnN0IGdhaW5fZGVzY190ICpncCwgZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpCisJeworCQlmbG9hdCBtYXhfZ2FpbiA9CisJCQlncC0+bWluX2dhaW4gKyAoMSA8PCBncC0+bmJpdHMpICogZ3AtPmdhaW5fc3RlcDsKKwkJZmxvYXQgcm91bmQgPSBncC0+Z2Fpbl9zdGVwIC8gMjsKKwkJaW50IG1hc2sgPSAoMSA8PCBncC0+bmJpdHMpIC0gMTsKKwkJaW50IHdvcmQ7CisJCWludCBsZywgcmc7CisKKwkJaWYgKGxlZnQgPCBncC0+bWluX2dhaW4gfHwgcmlnaHQgPCBncC0+bWluX2dhaW4pCisJCQlyZXR1cm4gRUlOVkFMOworCQlsZyA9IChsZWZ0IC0gZ3AtPm1pbl9nYWluICsgcm91bmQpIC8gZ3AtPmdhaW5fc3RlcDsKKwkJcmcgPSAocmlnaHQgLSBncC0+bWluX2dhaW4gKyByb3VuZCkgLyBncC0+Z2Fpbl9zdGVwOworCQlpZiAobGcgPj0gKDEgPDwgZ3AtPm5iaXRzKSB8fCByZyA+PSAoMSA8PCBncC0+bmJpdHMpKQorCQkJcmV0dXJuIEVJTlZBTDsKKwkJbGcgPSAoMTAwICogbGcgKyBtYXNrIC8gMikgLyBtYXNrOworCQlyZyA9ICgxMDAgKiByZyArIG1hc2sgLyAyKSAvIG1hc2s7CisJCXdvcmQgPSBsZyB8IHJnIDw8IDg7CisKKwkJcmV0dXJuIGlvY3RsKGZkLCBNSVhFUl9XUklURShncC0+Y2hhbiksICZ3b3JkKTsKKwl9CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BhcmMvUkVBRE1FLTIuNSBiL0RvY3VtZW50YXRpb24vc3BhcmMvUkVBRE1FLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDZmZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGFyYy9SRUFETUUtMi41CkBAIC0wLDAgKzEsNDYgQEAKK0JURklYVVAKKy0tLS0tLS0KKworVG8gYnVpbGQgbmV3IGtlcm5lbHMgeW91IGhhdmUgdG8gaXNzdWUgIm1ha2UgaW1hZ2UiLiBUaGUgcmVhZHkga2VybmVsCitpbiBFTEYgZm9ybWF0IGlzIHBsYWNlZCBpbiBhcmNoL3NwYXJjL2Jvb3QvaW1hZ2UuIEV4cGxhbmF0aW9uIGlzIGJlbG93LgorCitCVEZJWFVQIGlzIGEgdW5pcXVlIGZlYXR1cmUgb2YgTGludXgvc3BhcmMgYW1vbmcgb3RoZXIgYXJjaGl0ZWN0dXJlcywKK2RldmVsb3BlZCBieSBKYWt1YiBKZWxpbmVrIChJIHRoaW5rLi4uIE9idmlvdXNseSBEYXZpZCBTLiBNaWxsZXIgdG9vaworcGFydCwgdG9vKS4gSXQgYWxsb3dzIHRvIGJvb3QgdGhlIHNhbWUga2VybmVsIGF0IGRpZmZlcmVudCAKK3N1Yi1hcmNoaXRlY3R1cmVzLCBzdWNoIGFzIHN1bjRjLCBzdW40bSwgc3VuNGQsIHdoZXJlIFN1bk9TIHVzZXMKK2RpZmZlcmVudCBrZXJuZWxzLiBUaGlzIGZlYXR1cmUgaXMgY29udmluaWVudCBmb3IgcGVvcGxlIHdobyB5b3UgbW92ZQorZGlza3MgYmV0d2VlbiBib3hlcyBhbmQgZm9yIGRpc3RydXRpb24gYnVpbGRlcnMuCisKK1RvIGZ1bmN0aW9uLCBCVEZJWFVQIG11c3QgbGluayB0aGUga2VybmVsICJpbiB0aGUgZHJhZnQiIGZpcnN0LAorYW5hbHl6ZSB0aGUgcmVzdWx0LCB3cml0ZSBhIHNwZWNpYWwgc3R1YiBjb2RlIGJhc2VkIG9uIHRoYXQsIGFuZAorYnVpbGQgdGhlIGZpbmFsIGtlcm5lbCB3aXRoIHRoZSBzdHViIChidGZpeC5vKS4KKworS2FpIEdlcm1hc2NoZXdza2kgaW1wcm92ZWQgdGhlIGJ1aWxkIHN5c3RlbSBvZiB0aGUga2VybmVsIGluIHRoZSAyLjUgc2VyaWVzCitzaWduaWZpY2FudGx5LiBVbmZvcnR1bmF0ZWx5LCB0aGUgdHJhZGl0aW9uYWwgd2F5IG9mIHJ1bm5pbmcgdGhlIGRyYWZ0CitsaW5raW5nIGZyb20gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIE1ha2VmaWxlIGJlZm9yZSB0aGUgYWN0dWFsIGxpbmtpbmcKK2J5IGdlbmVyaWMgTWFrZWZpbGUgaXMgbmVhcmx5IGltcG9zc2libGUgdG8gc3VwcG9ydCBwcm9wZXJseSBpbiB0aGUKK25ldyBidWlsZCBzeXN0ZW0uIFRoZXJlZm9yZSwgdGhlIHdheSB3ZSBpbnRlZ3JhdGUgQlRGSVhVUCB3aXRoIHRoZQorYnVpbGQgc3lzdGVtIHdhcyBjaGFuZ2VkIGluIDIuNS40MC4gTm93LCBnZW5lcmljIE1ha2VmaWxlIHBlcmZvcm1zCit0aGUgZHJhZnQgbGlua2luZyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gZmlsZSB2bWxpbnV4LiBBcmNoaXRlY3R1cmUKK3NwZWNpZmljIHBvc3QtcHJvY2Vzc2luZyBpbnZva2VzIEJURklYVVAgbWFjaGluZXJ5IGFuZCBmaW5hbCBsaW5raW5nCitpbiB0aGUgc2FtZSB3YXkgYXMgb3RoZXIgYXJjaGl0ZWN0dXJlcyBkbyBib290c3RyYXBzLgorCitJbXBsaWNhdGlvbnMgb2YgdGhhdCBjaGFuZ2UgYXJlIGFzIGZvbGxvd3MuCisKKzEuIEhhY2tlcnMgbXVzdCB0eXBlICJtYWtlIGltYWdlIiBub3csIGluc3RlYWQgb2YganVzdCAibWFrZSIsIGluIHRoZSBzYW1lCisgICB3YXkgYXMgczM5MCBwZW9wbGUgZG8gbm93LiBJdCBpcyBhbmFsb2dvdXMgdG8gIm1ha2UgYnpJbWFnZSIgb24gaTM4Ni4KKyAgIFRoaXMgZG9lcyBOT1QgYWZmZWN0IHNwYXJjNjQsIHlvdSBjb250aW51ZSB0byB1c2UgIm1ha2UiIHRvIGJ1aWxkIHNwYXJjNjQKKyAgIGtlcm5lbHMuCisKKzIuIHZtbGludXggaXMgbm90IHRoZSBmaW5hbCBrZXJuZWwsIHNvIFJQTSBidWlsZGVycyBoYXZlIHRvIGFkanVzdAorICAgdGhlaXIgc3BlYyBmaWxlcyAoaWYgdGhleSBkZWxpdmVyZWQgdm1saW51eCBmb3IgZGVidWdnaW5nKS4KKyAgIFN5c3RlbS5tYXAgZ2VuZXJhdGVkIGZvciB2bWxpbnV4IGlzIHN0aWxsIHZhbGlkLgorCiszLiBTY3JpcHRzIHRoYXQgcHJvZHVjZSBhLm91dCBpbWFnZXMgaGF2ZSB0byBiZSBjaGFuZ2VkLiBGaXJzdCwgaWYgdGhleQorICAgaW52b2tlIG1ha2UsIHRoZXkgaGF2ZSB0byB1c2UgIm1ha2UgaW1hZ2UiLiBTZWNvbmQsIHRoZXkgaGF2ZSB0byBwaWNrIHVwCisgICB0aGUgbmV3IGtlcm5lbCBpbiBhcmNoL3NwYXJjL2Jvb3QvaW1hZ2UgaW5zdGVhZCBvZiB2bWxpbnV4LgorCis0LiBTaW5jZSB3ZSBhcmUgY29tcGxpYW50IHdpdGggS2FpJ3MgYnVpbGQgc3lzdGVtIG5vdywgbWFrZSAtaiBpcyBwZXJtaXR0ZWQuCisKKy0tIFBldGUgWmFpdGNldgoremFpdGNldkB5YWhvby5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BhcmMvc2J1c19kcml2ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vc3BhcmMvc2J1c19kcml2ZXJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzYxOTVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGFyYy9zYnVzX2RyaXZlcnMudHh0CkBAIC0wLDAgKzEsMjcyIEBACisKKwkJV3JpdGluZyBTQlVTIERyaXZlcnMKKworCSAgICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisKKwlUaGUgU0JVUyBkcml2ZXIgaW50ZXJmYWNlcyBvZiB0aGUgTGludXgga2VybmVsIGhhdmUgYmVlbgorcmV2YW1wZWQgY29tcGxldGVseSBmb3IgMi40LnggZm9yIHNldmVyYWwgcmVhc29ucy4gIEZvcmVtb3N0IHdlcmUKK3BlcmZvcm1hbmNlIGFuZCBjb21wbGV4aXR5IGNvbmNlcm5zLiAgVGhpcyBkb2N1bWVudCBkZXRhaWxzIHRoZXNlCituZXcgaW50ZXJmYWNlcyBhbmQgaG93IHRoZXkgYXJlIHVzZWQgdG8gd3JpdGUgYW4gU0JVUyBkZXZpY2UgZHJpdmVyLgorCisJU0JVUyBkcml2ZXJzIG5lZWQgdG8gaW5jbHVkZSA8YXNtL3NidXMuaD4gdG8gZ2V0IGFjY2VzcwordG8gZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGRlc2NyaWJlZCBoZXJlLgorCisJCVByb2JpbmcgYW5kIERldGVjdGlvbgorCisJRWFjaCBTQlVTIGRldmljZSBpbnNpZGUgdGhlIG1hY2hpbmUgaXMgZGVzY3JpYmVkIGJ5IGEKK3N0cnVjdHVyZSBjYWxsZWQgInN0cnVjdCBzYnVzX2RldiIuICBMaWtld2lzZSwgZWFjaCBTQlVTIGJ1cworZm91bmQgaW4gdGhlIHN5c3RlbSBpcyBkZXNjcmliZWQgYnkgYSAic3RydWN0IHNidXNfYnVzIi4gIEZvcgorZWFjaCBTQlVTIGJ1cywgdGhlIGRldmljZXMgdW5kZXJuZWF0aCBhcmUgaHVuZyBpbiBhIHRyZWUtbGlrZQorZmFzaGlvbiBvZmYgb2YgdGhlIGJ1cyBzdHJ1Y3R1cmUuCisKKwlUaGUgU0JVUyBkZXZpY2Ugc3RydWN0dXJlIGNvbnRhaW5zIGVub3VnaCBpbmZvcm1hdGlvbgorZm9yIHlvdSB0byBpbXBsZW1lbnQgeW91ciBkZXZpY2UgcHJvYmluZyBhbGdvcml0aG0gYW5kIG9idGFpbgordGhlIGJpdHMgbmVjZXNzYXJ5IHRvIHJ1biB5b3VyIGRldmljZS4gIFRoZSBtb3N0IGNvbW1vbmx5Cit1c2VkIG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUsIGFuZCB0aGVpciB0eXBpY2FsIHVzYWdlLAord2lsbCBiZSBkZXRhaWxlZCBiZWxvdy4KKworCUhlcmUgaXMgaG93IHByb2JpbmcgaXMgcGVyZm9ybWVkIGJ5IGFuIFNCVVMgZHJpdmVyCit1bmRlciBMaW51eDoKKworCXN0YXRpYyB2b2lkIGluaXRfb25lX215ZGV2aWNlKHN0cnVjdCBzYnVzX2RldiAqc2RldikKKwl7CisJCS4uLgorCX0KKworCXN0YXRpYyBpbnQgbXlkZXZpY2VfbWF0Y2goc3RydWN0IHNidXNfZGV2ICpzZGV2KQorCXsKKwkJaWYgKHNvbWVfY3JpdGVyaWEoc2RldikpCisJCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RhdGljIHZvaWQgbXlkZXZpY2VfcHJvYmUodm9pZCkKKwl7CisJCXN0cnVjdCBzYnVzX2J1cyAqc2J1czsKKwkJc3RydWN0IHNidXNfZGV2ICpzZGV2OworCisJCWZvcl9lYWNoX3NidXMoc2J1cykgeworCQkJZm9yX2VhY2hfc2J1c2RldihzZGV2LCBzYnVzKSB7CisJCQkJaWYgKG15ZGV2aWNlX21hdGNoKHNkZXYpKQorCQkJCQlpbml0X29uZV9teWRldmljZShzZGV2KTsKKwkJCX0KKwkJfQorCX0KKworCUFsbCB0aGlzIGRvZXMgaXMgd2FsayB0aHJvdWdoIGFsbCBTQlVTIGRldmljZXMgaW4gdGhlCitzeXN0ZW0sIGNoZWNrcyBlYWNoIHRvIHNlZSBpZiBpdCBpcyBvZiB0aGUgdHlwZSB3aGljaAoreW91ciBkcml2ZXIgaXMgd3JpdHRlbiBmb3IsIGFuZCBpZiBzbyBpdCBjYWxscyB0aGUgaW5pdAorcm91dGluZSB0byBhdHRhY2ggdGhlIGRldmljZSBhbmQgcHJlcGFyZSB0byBkcml2ZSBpdC4KKworCSJpbml0X29uZV9teWRldmljZSIgbWlnaHQgZG8gdGhpbmdzIGxpa2UgYWxsb2NhdGUgc29mdHdhcmUKK3N0YXRlIHN0cnVjdHVyZXMsIG1hcCBpbiBJL08gcmVnaXN0ZXJzLCBwbGFjZSB0aGUgaGFyZHdhcmUKK2ludG8gYW4gaW5pdGlhbGl6ZWQgc3RhdGUsIGV0Yy4KKworCQlNYXBwaW5nIGFuZCBBY2Nlc3NpbmcgSS9PIFJlZ2lzdGVycworCisJRWFjaCBTQlVTIGRldmljZSBzdHJ1Y3R1cmUgY29udGFpbnMgYW4gYXJyYXkgb2YgZGVzY3JpcHRvcnMKK3doaWNoIGRlc2NyaWJlIGVhY2ggcmVnaXN0ZXIgc2V0LiBXZSBhYnVzZSBzdHJ1Y3QgcmVzb3VyY2UgZm9yIHRoYXQuCitUaGV5IGVhY2ggY29ycmVzcG9uZCB0byB0aGUgInJlZyIgcHJvcGVydGllcyBwcm92aWRlZCBieSB0aGUgT0JQIGZpcm13YXJlLgorCisJQmVmb3JlIHlvdSBjYW4gYWNjZXNzIHlvdXIgZGV2aWNlJ3MgcmVnaXN0ZXJzIHlvdSBtdXN0IG1hcAordGhlbS4gIEFuZCBsYXRlciBpZiB5b3Ugd2lzaCB0byBzaHV0ZG93biB5b3VyIGRyaXZlciAoZm9yIG1vZHVsZQordW5sb2FkIG9yIHNpbWlsYXIpIHlvdSBtdXN0IHVubWFwIHRoZW0uICBZb3UgbXVzdCB0cmVhdCB0aGVtIGFzCithIHJlc291cmNlLCB3aGljaCB5b3UgYWxsb2NhdGUgKG1hcCkgYmVmb3JlIHVzaW5nIGFuZCBmcmVlIHVwCisodW5tYXApIHdoZW4geW91IGFyZSBkb25lIHdpdGggaXQuCisKKwlUaGUgbWFwcGluZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gYW4gb3BhcXVlIHZhbHVlCit0eXBlZCBhcyBhbiAidW5zaWduZWQgbG9uZyIuICBUaGlzIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUKK29mIHRoZSBtYXBwaW5nIGludGVyZmFjZSwgYW5kIHRoZSBhcmd1bWVudHMgdG8gdGhlIHVubWFwcGluZworaW50ZXJmYWNlLiAgTGV0J3Mgc2F5IHlvdSB3YW50IHRvIG1hcCB0aGUgZmlyc3Qgc2V0IG9mIHJlZ2lzdGVycy4KK1BlcmhhcHMgcGFydCBvZiB5b3VyIGRyaXZlciBzb2Z0d2FyZSBzdGF0ZSBzdHJ1Y3R1cmUgbG9va3MgbGlrZToKKworCXN0cnVjdCBteWRldmljZSB7CisJCXVuc2lnbmVkIGxvbmcgY29udHJvbF9yZWdzOworCSAgIC4uLgorCQlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXY7CisJICAgLi4uCisJfTsKKworCUF0IGluaXRpYWxpemF0aW9uIHRpbWUgeW91IHRoZW4gdXNlIHRoZSBzYnVzX2lvcmVtYXAKK2ludGVyZmFjZSB0byBtYXAgaW4geW91ciByZWdpc3RlcnMsIGxpa2Ugc286CisKKwlzdGF0aWMgdm9pZCBpbml0X29uZV9teWRldmljZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYpCisJeworCQlzdHJ1Y3QgbXlkZXZpY2UgKm1wOworCQkuLi4KKworCQltcC0+Y29udHJvbF9yZWdzID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgMCwKKwkJCQkJQ09OVFJPTF9SRUdTX1NJWkUsICJteWRldmljZSByZWdzIik7CisJCWlmICghbXAtPmNvbnRyb2xfcmVncykgeworCQkJLyogRmFpbHVyZSwgY2xlYW51cCBhbmQgcmV0dXJuLiAqLworCQl9CisJfQorCisJU2Vjb25kIGFyZ3VtZW50IHRvIHNidXNfaW9yZW1hcCBpcyBhbiBvZmZzZXQgZm9yCitjcmFua3kgZGV2aWNlcyB3aXRoIGJyb2tlbiBPQlAgUFJPTS4gVGhlIHNidXNfaW9yZW1hcCB1c2VzIG9ubHkKK2Egc3RhcnQgYWRkcmVzcyBhbmQgZmxhZ3MgZnJvbSB0aGUgcmVzb3VyY2Ugc3RydWN0dXJlLgorVGhlcmVmb3JlIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGUgc2FtZSByZXNvdXJjZSB0byBtYXAKK3NldmVyYWwgc2V0cyBvZiByZWdpc3RlcnMgb3IgZXZlbiB0byBmYWJyaWNhdGUgYSByZXNvdXJjZQorc3RydWN0dXJlIGlmIGRyaXZlciBnZXRzIHBoeXNpY2FsIGFkZHJlc3MgZnJvbSBzb21lIHByaXZhdGUgcGxhY2UuCitUaGlzIHByYWN0aWNlIGlzIGRpc2NvdXJhZ2VkIHRob3VnaC4gVXNlIHdoYXRldmVyIE9CUCBQUk9NCitwcm92aWRlZCB0byB5b3UuCisKKwlBbmQgaGVyZSBpcyBob3cgeW91IG1pZ2h0IHVubWFwIHRoZXNlIHJlZ2lzdGVycyBsYXRlciBhdAorZHJpdmVyIHNodXRkb3duIG9yIG1vZHVsZSB1bmxvYWQgdGltZSwgdXNpbmcgdGhlIHNidXNfaW91bm1hcAoraW50ZXJmYWNlOgorCisJc3RhdGljIHZvaWQgbXlkZXZpY2VfdW5tYXBfcmVncyhzdHJ1Y3QgbXlkZXZpY2UgKm1wKQorCXsKKwkJc2J1c19pb3VubWFwKG1wLT5jb250cm9sX3JlZ3MsIENPTlRST0xfUkVHU19TSVpFKTsKKwl9CisKKwlGaW5hbGx5LCB0byBhY3R1YWxseSBhY2Nlc3MgeW91ciByZWdpc3RlcnMgdGhlcmUgYXJlIDYKK2ludGVyZmFjZSByb3V0aW5lcyBhdCB5b3VyIGRpc3Bvc2FsLiAgQWNjZXNzZXMgYXJlIGJ5dGUgKDggYml0KSwKK3dvcmQgKDE2IGJpdCksIG9yIGxvbmd3b3JkICgzMiBiaXQpIHNpemVkLiAgSGVyZSB0aGV5IGFyZToKKworCXU4IHNidXNfcmVhZGIodW5zaWduZWQgbG9uZyByZWcpCQkvKiByZWFkIGJ5dGUgKi8KKwl1MTYgc2J1c19yZWFkdyh1bnNpZ25lZCBsb25nIHJlZykJCS8qIHJlYWQgd29yZCAqLworCXUzMiBzYnVzX3JlYWRsKHVuc2lnbmVkIGxvbmcgcmVnKQkJLyogcmVhZCBsb25nd29yZCAqLworCXZvaWQgc2J1c193cml0ZWIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcmVnKQkvKiB3cml0ZSBieXRlICovCisJdm9pZCBzYnVzX3dyaXRldyh1MTYgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcmVnKQkvKiB3cml0ZSB3b3JkICovCisJdm9pZCBzYnVzX3dyaXRlbCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcmVnKQkvKiB3cml0ZSBsb25nd29yZCAqLworCisJU28sIGxldCdzIHNheSB5b3VyIGRldmljZSBoYXMgYSBjb250cm9sIHJlZ2lzdGVyIG9mIHNvbWUgc29ydAorYXQgb2Zmc2V0IHplcm8uICBUaGUgZm9sbG93aW5nIG1pZ2h0IGltcGxlbWVudCByZXNldHRpbmcgeW91ciBkZXZpY2U6CisKKwkjZGVmaW5lIENPTlRST0wJCTB4MDBVTAorCisJI2RlZmluZSBDT05UUk9MX1JFU0VUCTB4MDAwMDAwMDEJLyogUmVzZXQgaGFyZHdhcmUgKi8KKworCXN0YXRpYyB2b2lkIG15ZGV2aWNlX3Jlc2V0KHN0cnVjdCBteWRldmljZSAqbXApCisJeworCQlzYnVzX3dyaXRlbChDT05UUk9MX1JFU0VULCBtcC0+cmVncyArIENPTlRST0wpOworCX0KKworCU9yIHBlcmhhcHMgdGhlcmUgaXMgYSBkYXRhIHBvcnQgcmVnaXN0ZXIgYXQgYW4gb2Zmc2V0IG9mCisxNiBieXRlcyB3aGljaCBhbGxvd3MgeW91IHRvIHJlYWQgYnl0ZXMgZnJvbSBhIGZpZm8gaW4gdGhlIGRldmljZToKKworCSNkZWZpbmUgREFUQQkJMHgxMFVMCisKKwlzdGF0aWMgdTggbXlkZXZpY2VfZ2V0X2J5dGUoc3RydWN0IG15ZGV2aWNlICptcCkKKwl7CisJCXJldHVybiBzYnVzX3JlYWRiKG1wLT5yZWdzICsgREFUQSk7CisJfQorCisJSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgY2x1ZWZ1bCByZWFkZXJzIG1heSBoYXZlCitub3RpY2VkIHRoYXQgdGhlc2UgaW50ZXJmYWNlcyBtaW1pY2sgdGhlIFBDSSBpbnRlcmZhY2VzIG9mIHRoZQorTGludXgga2VybmVsLiAgVGhpcyB3YXMgbm90IGJ5IGFjY2lkZW50LgorCisJV0FSTklORzoKKworCQlETyBOT1QgdHJ5IHRvIHRyZWF0IHRoZXNlIG9wYXF1ZSByZWdpc3RlciBtYXBwaW5nCisJCXZhbHVlcyBhcyBhIG1lbW9yeSBtYXBwZWQgcG9pbnRlciB0byBzb21lIHN0cnVjdHVyZQorCQl3aGljaCB5b3UgY2FuIGRlcmVmZXJlbmNlLgorCisJCUl0IG1heSBiZSBtZW1vcnkgbWFwcGVkLCBpdCBtYXkgbm90IGJlLiAgSW4gZmFjdCBpdAorCQljb3VsZCBiZSBhIHBoeXNpY2FsIGFkZHJlc3MsIG9yIGl0IGNvdWxkIGJlIHRoZSB0aW1lCisJCW9mIGRheSB4b3InZCB3aXRoIDB4ZGVhZGJlZWYuICA6LSkKKworCQlXaGF0ZXZlciBpdCBpcywgaXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBUaGUKKwkJaW50ZXJmYWNlIHdhcyBkb25lIHRoaXMgd2F5IHRvIHNoaWVsZCB0aGUgZHJpdmVyCisJCWF1dGhvciBmcm9tIHN1Y2ggY29tcGxleGl0aWVzLgorCisJCQlEb2luZyBEVk1BCisKKwlTQlVTIGRldmljZXMgY2FuIHBlcmZvcm0gRE1BIHRyYW5zYWN0aW9ucyBpbiBhIHdheSBzaW1pbGFyCit0byBQQ0kgYnV0IGRpc3NpbWlsYXIgdG8gSVNBLCBlLmcuIERNQSBtYXN0ZXJzIHN1cHBseSBhZGRyZXNzLgorSW4gY29udHJhc3QgdG8gUENJLCBob3dldmVyLCB0aGF0IGFkZHJlc3MgKGEgYnVzIGFkZHJlc3MpIGlzCit0cmFuc2xhdGVkIGJ5IElPTU1VIGJlZm9yZSBhIG1lbW9yeSBhY2Nlc3MgaXMgcGVyZm9ybWVkIGFuZCB0aGVyZWZvcmUKK2l0IGlzIHZpcnR1YWwuIFN1biBjYWxscyB0aGlzIHByb2NlZHVyZSBEVk1BLgorCisJTGludXggc3VwcG9ydHMgdHdvIHN0eWxlcyBvZiB1c2luZyBTQlVTIERWTUE6ICJjb25zaXN0ZW50IG1lbW9yeSIKK2FuZCAic3RyZWFtaW5nIERWTUEiLiBDUFUgdmlldyBvZiBjb25zaXN0ZW50IG1lbW9yeSBjaHVuayBpcywgd2VsbCwKK2NvbnNpc3RlbnQgd2l0aCBhIHZpZXcgb2YgYSBkZXZpY2UuIFRoaW5rIG9mIGl0IGFzIGFuIHVuY2FjaGVkIG1lbW9yeS4KK1R5cGljYWxseSB0aGlzIHdheSBvZiBkb2luZyBEVk1BIGlzIG5vdCB2ZXJ5IGZhc3QgYW5kIGRyaXZlcnMgdXNlIGl0Cittb3N0bHkgZm9yIGNvbnRyb2wgYmxvY2tzIG9yIHF1ZXVlcy4gT24gc29tZSBDUFVzIHdlIGNhbm5vdCBmbHVzaCBvcgoraW52YWxpZGF0ZSBpbmRpdmlkdWFsIHBhZ2VzIG9yIGNhY2hlIGxpbmVzIGFuZCBkb2luZyBleHBsaWNpdCBmbHVzaGluZworb3ZlciBldmVyIGxpdHRsZSBieXRlIGluIGV2ZXJ5IGNvbnRyb2wgYmxvY2sgd291bGQgYmUgd2FzdGVmdWwuCisKK1N0cmVhbWluZyBEVk1BIGlzIGEgcHJlZmVycmVkIHdheSB0byB0cmFuc2ZlciBsYXJnZSBhbW91bnRzIG9mIGRhdGEuCitUaGlzIHByb2Nlc3Mgd29ya3MgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisxLiBhIENQVSBzdG9wcyBhY2Nlc3NpbmcgYSBjZXJ0YWluIHBhcnQgb2YgbWVtb3J5LAorICAgZmx1c2hlcyBpdHMgY2FjaGVzIGNvdmVyaW5nIHRoYXQgbWVtb3J5OworMi4gYSBkZXZpY2UgZG9lcyBEVk1BIGFjY2Vzc2VzLCB0aGVuIHBvc3RzIGFuIGludGVycnVwdDsKKzMuIENQVSBpbnZhbGlkYXRlcyBpdHMgY2FjaGVzIGFuZCBzdGFydHMgdG8gYWNjZXNzIHRoZSBtZW1vcnkuCisKK0Egc2luZ2xlIHN0cmVhbWluZyBEVk1BIG9wZXJhdGlvbiBjYW4gdG91Y2ggc2V2ZXJhbCBkaXNjb250aWd1b3VzCityZWdpb25zIG9mIGEgdmlydHVhbCBidXMgYWRkcmVzcyBzcGFjZS4gVGhpcyBpcyBjYWxsZWQgYSBzY2F0dGVyLWdhdGhlcgorRFZNQS4KKworW1RCRDogV2h5IGRvIG5vdCB3ZSBuZWl0aGVyIFNvbGFyaXMgYXR0ZW1wdCB0byBtYXAgZGlzam9pbnQgcGFnZXMKK2ludG8gYSBzaW5nbGUgdmlydHVhbCBjaHVuayB3aXRoIHRoZSBoZWxwIG9mIElPTU1VLCBzbyB0aGF0IG5vbiBTRworRFZNQSBtYXN0ZXJzIHdvdWxkIGRvIFNHPyBJdCdkIGJlIHZlcnkgaGVscGZ1bCBmb3IgUkFJRC5dCisKKwlJbiBvcmRlciB0byBwZXJmb3JtIGEgY29uc2lzdGVudCBEVk1BIGEgZHJpdmVyIGRvZXMgc29tZXRoaW5nCitsaWtlIHRoZSBmb2xsb3dpbmc6CisKKwljaGFyICptZW07CQkvKiBBZGRyZXNzIGluIHRoZSBDUFUgc3BhY2UgKi8KKwl1MzIgYnVzYTsJCS8qIEFkZHJlc3MgaW4gdGhlIFNCdXMgc3BhY2UgKi8KKworCW1lbSA9IChjaGFyICopIHNidXNfYWxsb2NfY29uc2lzdGVudChzZGV2LCBNWU1FTVNJWkUsICZidXNhKTsKKworCVRoZW4gbWVtIGlzIHVzZWQgd2hlbiBDUFUgYWNjZXNzZXMgdGhpcyBtZW1vcnkgYW5kIHUzMgoraXMgZmVkIHRvIHRoZSBkZXZpY2Ugc28gdGhhdCBpdCBjYW4gZG8gRFZNQS4gVGhpcyBpcyB0eXBpY2FsbHkKK2RvbmUgd2l0aCBhbiBzYnVzX3dyaXRlbCgpIGludG8gc29tZSBkZXZpY2UgcmVnaXN0ZXIuCisKKwlEbyBub3QgZm9yZ2V0IHRvIGZyZWUgdGhlIERWTUEgcmVzb3VyY2VzIG9uY2UgeW91IGFyZSBkb25lOgorCisJc2J1c19mcmVlX2NvbnNpc3RlbnQoc2RldiwgTVlNRU1TSVpFLCBtZW0sIGJ1c2EpOworCisJU3RyZWFtaW5nIERWTUEgaXMgbW9yZSBpbnRlcmVzdGluZy4gRmlyc3QgeW91IGFsbG9jYXRlIHNvbWUKK21lbW9yeSBzdWl0YWJsZSBmb3IgaXQgb3IgcGluIGRvd24gc29tZSB1c2VyIHBhZ2VzLiBUaGVuIGl0IGFsbCB3b3JrcworbGlrZSB0aGlzOgorCisJY2hhciAqbWVtID0gYXJndW1lbjE7CisJdW5zaWduZWQgaW50IHNpemUgPSBhcmd1bWVudDI7CisJdTMyIGJ1c2E7CQkvKiBBZGRyZXNzIGluIHRoZSBTQnVzIHNwYWNlICovCisKKwkqbWVtID0gMTsJCS8qIENQVSBjYW4gYWNjZXNzICovCisJYnVzYSA9IHNidXNfbWFwX3NpbmdsZShzZGV2LCBtZW0sIHNpemUpOworCWlmIChidXNhID09IDApIC4uLi4uLi4KKworCS8qIFRlbGwgdGhlIGRldmljZSB0byB1c2UgYnVzYSBoZXJlICovCisJLyogQ1BVIGNhbm5vdCBhY2Nlc3MgdGhlIG1lbW9yeSB3aXRob3V0IHNidXNfZG1hX3N5bmNfc2luZ2xlKCkgKi8KKworCXNidXNfdW5tYXBfc2luZ2xlKHNkZXYsIGJ1c2EsIHNpemUpOworCWlmICgqbWVtID09IDApIC4uLi4JLyogQ1BVIGNhbiBhY2Nlc3MgYWdhaW4gKi8KKworCUl0IGlzIHBvc3NpYmxlIHRvIHJldGFpbiBtYXBwaW5ncyBhbmQgYXNrIHRoZSBkZXZpY2UgdG8KK2FjY2VzcyBkYXRhIGFnYWluIGFuZCBhZ2FpbiB3aXRob3V0IGNhbGxpbmcgc2J1c191bm1hcF9zaW5nbGUuCitIb3dldmVyLCBDUFUgY2FjaGVzIG11c3QgYmUgaW52YWxpZGF0ZWQgd2l0aCBzYnVzX2RtYV9zeW5jX3NpbmdsZQorYmVmb3JlIHN1Y2ggYWNjZXNzLgorCitbVEJEIGJ1dCB3aGF0IGFib3V0IHdyaXRlYmFjayBjYWNoZXMgaGVyZS4uLiBkbyB3ZSBoYXZlIGFueT9dCisKKwlUaGVyZSBpcyBhbiBlcXVpdmFsZW50IHNldCBvZiBmdW5jdGlvbnMgZG9pbmcgdGhlIHNhbWUgdGhpbmcKK29ubHkgd2l0aCBzZXZlcmFsIG1lbW9yeSBzZWdtZW50cyBhdCBvbmNlIGZvciBkZXZpY2VzIGNhcGFibGUgb2YKK3NjYXR0ZXItZ2F0aGVyIHRyYW5zZmVycy4gVXNlIHRoZSBTb3VyY2UsIEx1a2UuCisKKwkJCUV4YW1wbGVzCisKKwlkcml2ZXJzL25ldC9zdW5obWUuYworCVRoaXMgaXMgYSBjb21wbGljYXRlZCBkcml2ZXIgd2hpY2ggaWxsdXN0cmF0ZXMgbWFueSBjb25jZXB0cworZGlzY3Vzc2VkIGFib3ZlIGFuZCBwbHVzIGl0IGhhbmRsZXMgYm90aCBQQ0kgYW5kIFNCVVMgYm9hcmRzLgorCisJZHJpdmVycy9zY3NpL2VzcC5jCisJQ2hlY2sgaXQgb3V0IGZvciBzY2F0dGVyLWdhdGhlciBEVk1BLgorCisJZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKKwlBIG5vbi1EVk1BIGRldmljZS4KKworCWRyaXZlcnMvbmV0L3N1bmxhbmNlLmMKKwlMYW5jZSBkcml2ZXIgYWJ1c2VzIGNvbnNpc3RlbnQgbWFwcGluZ3MgZm9yIGRhdGEgdHJhbnNmZXIuCitJdCBpcyBhIG5pZnR5IHRyaWNrIHdoaWNoIHdlIGRvIG5vdCBwYXJ0aWN1bGFybHkgcmVjb21tZW5kLi4uCitKdXN0IGNoZWNrIGl0IG91dCBhbmQga25vdyB0aGF0IGl0J3MgbGVnYWwuCisKKwkJCUJhZCBleGFtcGxlcywgZG8gTk9UIHVzZQorCisJZHJpdmVycy92aWRlby9jZ3NpeC5jCisJVGhpcyBvbmUgdXNlcyByZXN1bHQgb2Ygc2J1c19pb3JlbWFwIGFzIGlmIGl0IGlzIGFuIGFkZHJlc3MuCitUaGlzIGRvZXMgTk9UIHdvcmsgb24gc3BhcmM2NCBhbmQgdGhlcmVmb3JlIGlzIGJyb2tlbi4gV2Ugd2lsbAorY29udmVydCBpdCBhdCBhIGxhdGVyIGRhdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwYXJzZS50eHQgYi9Eb2N1bWVudGF0aW9uL3NwYXJzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3ODQxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3BhcnNlLnR4dApAQCAtMCwwICsxLDcyIEBACitDb3B5cmlnaHQgMjAwNCBMaW51cyBUb3J2YWxkcworQ29weXJpZ2h0IDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorCitVc2luZyBzcGFyc2UgZm9yIHR5cGVjaGVja2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworIl9fYml0d2lzZSIgaXMgYSB0eXBlIGF0dHJpYnV0ZSwgc28geW91IGhhdmUgdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgICAgICB0eXBlZGVmIGludCBfX2JpdHdpc2UgcG1fcmVxdWVzdF90OworCisgICAgICAgIGVudW0gcG1fcmVxdWVzdCB7CisgICAgICAgICAgICAgICAgUE1fU1VTUEVORCA9IChfX2ZvcmNlIHBtX3JlcXVlc3RfdCkgMSwKKyAgICAgICAgICAgICAgICBQTV9SRVNVTUUgPSAoX19mb3JjZSBwbV9yZXF1ZXN0X3QpIDIKKyAgICAgICAgfTsKKword2hpY2ggbWFrZXMgUE1fU1VTUEVORCBhbmQgUE1fUkVTVU1FICJiaXR3aXNlIiBpbnRlZ2VycyAodGhlICJfX2ZvcmNlIiBpcwordGhlcmUgYmVjYXVzZSBzcGFyc2Ugd2lsbCBjb21wbGFpbiBhYm91dCBjYXN0aW5nIHRvL2Zyb20gYSBiaXR3aXNlIHR5cGUsCitidXQgaW4gdGhpcyBjYXNlIHdlIHJlYWxseSBfZG9fIHdhbnQgdG8gZm9yY2UgdGhlIGNvbnZlcnNpb24pLiBBbmQgYmVjYXVzZQordGhlIGVudW0gdmFsdWVzIGFyZSBhbGwgdGhlIHNhbWUgdHlwZSwgbm93ICJlbnVtIHBtX3JlcXVlc3QiIHdpbGwgYmUgdGhhdAordHlwZSB0b28uCisKK0FuZCB3aXRoIGdjYywgYWxsIHRoZSBfX2JpdHdpc2UvX19mb3JjZSBzdHVmZiBnb2VzIGF3YXksIGFuZCBpdCBhbGwgZW5kcwordXAgbG9va2luZyBqdXN0IGxpa2UgaW50ZWdlcnMgdG8gZ2NjLgorCitRdWl0ZSBmcmFua2x5LCB5b3UgZG9uJ3QgbmVlZCB0aGUgZW51bSB0aGVyZS4gVGhlIGFib3ZlIGFsbCByZWFsbHkganVzdAorYm9pbHMgZG93biB0byBvbmUgc3BlY2lhbCAiaW50IF9fYml0d2lzZSIgdHlwZS4KKworU28gdGhlIHNpbXBsZXIgd2F5IGlzIHRvIGp1c3QgZG8KKworICAgICAgICB0eXBlZGVmIGludCBfX2JpdHdpc2UgcG1fcmVxdWVzdF90OworCisgICAgICAgICNkZWZpbmUgUE1fU1VTUEVORCAoKF9fZm9yY2UgcG1fcmVxdWVzdF90KSAxKQorICAgICAgICAjZGVmaW5lIFBNX1JFU1VNRSAoKF9fZm9yY2UgcG1fcmVxdWVzdF90KSAyKQorCithbmQgeW91IG5vdyBoYXZlIGFsbCB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIGZvciBzdHJpY3QgdHlwZWNoZWNraW5nLgorCitPbmUgc21hbGwgbm90ZTogdGhlIGNvbnN0YW50IGludGVnZXIgIjAiIGlzIHNwZWNpYWwuIFlvdSBjYW4gdXNlIGEKK2NvbnN0YW50IHplcm8gYXMgYSBiaXR3aXNlIGludGVnZXIgdHlwZSB3aXRob3V0IHNwYXJzZSBldmVyIGNvbXBsYWluaW5nLgorVGhpcyBpcyBiZWNhdXNlICJiaXR3aXNlIiAoYXMgdGhlIG5hbWUgaW1wbGllcykgd2FzIGRlc2lnbmVkIGZvciBtYWtpbmcKK3N1cmUgdGhhdCBiaXR3aXNlIHR5cGVzIGRvbid0IGdldCBtaXhlZCB1cCAobGl0dGxlLWVuZGlhbiB2cyBiaWctZW5kaWFuCit2cyBjcHUtZW5kaWFuIHZzIHdoYXRldmVyKSwgYW5kIHRoZXJlIHRoZSBjb25zdGFudCAiMCIgcmVhbGx5IF9pc18KK3NwZWNpYWwuCisKK01vZGlmeSB0b3AtbGV2ZWwgTWFrZWZpbGUgdG8gc2F5CisKK0NIRUNLICAgICAgICAgICA9IHNwYXJzZSAtV2JpdHdpc2UKKworb3IgeW91IGRvbid0IGdldCBhbnkgY2hlY2tpbmcgYXQgYWxsLgorCisKK1doZXJlIHRvIGdldCBzcGFyc2UKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworV2l0aCBCSywgeW91IGNhbiBqdXN0IGdldCBpdCBmcm9tCisKKyAgICAgICAgYms6Ly9zcGFyc2UuYmtiaXRzLm5ldC9zcGFyc2UKKworYW5kIERhdmVKIGhhcyB0YXItYmFsbHMgYXQKKworCWh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvcHJvamVjdHMvYml0a2VlcGVyL3NwYXJzZS8KKworCitPbmNlIHlvdSBoYXZlIGl0LCBqdXN0IGRvCisKKyAgICAgICAgbWFrZQorICAgICAgICBtYWtlIGluc3RhbGwKKworYXMgeW91ciByZWd1bGFyIHVzZXIsIGFuZCBpdCB3aWxsIGluc3RhbGwgc3BhcnNlIGluIHlvdXIgfi9iaW4gZGlyZWN0b3J5LgorQWZ0ZXIgdGhhdCwgZG9pbmcgYSBrZXJuZWwgbWFrZSB3aXRoICJtYWtlIEM9MSIgd2lsbCBydW4gc3BhcnNlIG9uIGFsbCB0aGUKK0MgZmlsZXMgdGhhdCBnZXQgcmVjb21waWxlZCwgb3Igd2l0aCAibWFrZSBDPTIiIHdpbGwgcnVuIHNwYXJzZSBvbiB0aGUKK2ZpbGVzIHdoZXRoZXIgdGhleSBuZWVkIHRvIGJlIHJlY29tcGlsZWQgb3Igbm90IChpZSB0aGUgbGF0dGVyIGlzIGZhc3Qgd2F5Cit0byBjaGVjayB0aGUgd2hvbGUgdHJlZSBpZiB5b3UgaGF2ZSBhbHJlYWR5IGJ1aWx0IGl0KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BlY2lhbGl4LnR4dCBiL0RvY3VtZW50YXRpb24vc3BlY2lhbGl4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTRiNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGVjaWFsaXgudHh0CkBAIC0wLDAgKzEsMzg1IEBACisKKyAgICAgIHNwZWNpYWxpeC50eHQgIC0tIHNwZWNpYWxpeCBJTzgrIG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyIHJlYWRtZS4KKworCisKKyAgICAgIENvcHlyaWdodCAoQykgMTk5NyAgUm9nZXIgV29sZmYgKFIuRS5Xb2xmZkBCaXRXaXphcmQubmwpCisKKyAgICAgIFNwZWNpYWxpeCBwYXlzIGZvciB0aGUgZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQgb2YgdGhpcyBkcml2ZXIuCisgICAgICBQbGVhc2UgRE8gY29udGFjdCBpbzgtbGludXhAc3BlY2lhbGl4LmNvLnVrIGlmIHlvdSByZXF1aXJlCisgICAgICBzdXBwb3J0LgorCisgICAgICBUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcGVkIGluIHRoZSBCaXRXaXphcmQgbGludXggZGV2aWNlCisgICAgICBkcml2ZXIgc2VydmljZS4gSWYgeW91IHJlcXVpcmUgYSBsaW51eCBkZXZpY2UgZHJpdmVyIGZvciB5b3VyCisgICAgICBwcm9kdWN0LCBwbGVhc2UgY29udGFjdCBkZXZpY2VzQEJpdFdpemFyZC5ubCBmb3IgYSBxdW90ZS4KKworICAgICAgVGhpcyBjb2RlIGlzIGZpcm1seSBiYXNlZCBvbiB0aGUgcmlzY29tLzggc2VyaWFsIGRyaXZlciwKKyAgICAgIHdyaXR0ZW4gYnkgRG1pdHJ5IEdvcm9kY2hhbmluLiBUaGUgc3BlY2lhbGl4IElPOCsgY2FyZAorICAgICAgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gd2FzIG9idGFpbmVkIGZyb20gdGhlIENMLUNEMTg2NSBEYXRhCisgICAgICBCb29rLCBhbmQgU3BlY2lhbGl4IGRvY3VtZW50IG51bWJlciA2MjAwMDU5OiBJTzgrIEhhcmR3YXJlCisgICAgICBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24sIGF1Z21lbnRlZCBieSBkb2N1bWVudCBudW1iZXIgNjIwMDA4ODoKKyAgICAgIE1lcmFrIEhhcmR3YXJlIEZ1bmN0aW9uYWwgU3BlY2lmaWNhdGlvbi4gKElPOCsvUENJIGlzIGFsc28gCisgICAgICBjYWxsZWQgTWVyYWspCisKKworICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICAgICAgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksCisgICAgICBVU0EuCisKKworSW50cm8KKz09PT09CisKKyAKK1RoaXMgZmlsZSBjb250YWlucyBzb21lIHJhbmRvbSBpbmZvcm1hdGlvbiwgdGhhdCBJIGxpa2UgdG8gaGF2ZSBvbmxpbmUKK2luc3RlYWQgb2YgaW4gYSBtYW51YWwgdGhhdCBjYW4gZ2V0IGxvc3QuIEV2ZXIgbWlzcGxhY2UgeW91ciBMaW51eAora2VybmVsIHNvdXJjZXM/ICBBbmQgdGhlIG1hbnVhbCBvZiBvbmUgb2YgdGhlIGJvYXJkcyBpbiB5b3VyIGNvbXB1dGVyPworCisKK0FkZHJlc3NlcyBhbmQgaW50ZXJydXB0cworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZHJlc3MgZGlwIHN3aXRjaCBzZXR0aW5nczoKK1RoZSBkaXAgc3dpdGNoIHNldHMgYml0cyAyLTkgb2YgdGhlIElPIGFkZHJlc3MuIAorCisgICAgICAgOSA4IDcgNiA1IDQgMyAyIAorICAgICArLS0tLS0tLS0tLS0tLS0tLS0rCisgICAwIHwgWCAgIFggWCBYIFggWCBYIHwKKyAgICAgfCAgICAgICAgICAgICAgICAgfCAgICA9ICAgSW9CYXNlID0gMHgxMDAgCisgICAxIHwgICBYICAgICAgICAgICAgIHwKKyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAtLS0tLS0gUlMyMzIgY29ubmVjdG9ycyAtLS0tPgorICAgICAgICAgCisgICAgICAgICB8ICAgIHwgICAgfAorICAgICAgIGVkZ2UgY29ubmVjdG9yCisgICAgICAgICB8ICAgIHwgICAgfAorICAgICAgICAgViAgICBWICAgIFYKKworQmFzZSBhZGRyZXNzIDB4MTAwIGNhdXNlZCBhIGNvbmZsaWN0IGluIG9uZSBvZiBteSBjb21wdXRlcnMgb25jZS4gIEkKK2hhdmVuJ3QgdGhlIGZvZ2dpZXN0IHdoeS4gTXkgU3BlY2lhbGl4IGNhcmQgaXMgbm93IGF0IDB4MTgwLiAgTXkKK290aGVyIGNvbXB1dGVyIHJ1bnMganVzdCBmaW5lIHdpdGggdGhlIFNwZWNpYWxpeCBjYXJkIGF0IDB4MTAwLi4uLgorVGhlIGNhcmQgb2NjdXBpZXMgNCBhZGRyZXNzZXMsIGJ1dCBhY3R1YWxseSBvbmx5IHR3byBhcmUgcmVhbGx5IHVzZWQuCisKK1RoZSBQQ0kgdmVyc2lvbiBkb2Vzbid0IGhhdmUgYW55IGRpcCBzd2l0Y2hlcy4gVGhlIEJJT1MgYXNzaWducworYW4gSU8gYWRkcmVzcy4gCisKK1RoZSBkcml2ZXIgbm93IHN0aWxsIGF1dG9wcm9iZXMgYXQgMHgxMDAsIDB4MTgwLCAweDI1MCBhbmQgMHgyNjAuICBJZgordGhhdCBjYXVzZXMgdHJvdWJsZSBmb3IgeW91LCBwbGVhc2UgcmVwb3J0IHRoYXQuIEknbGwgcmVtb3ZlCithdXRvcHJvYmluZyB0aGVuLgorCitUaGUgZHJpdmVyIHdpbGwgdGVsbCB0aGUgY2FyZCB3aGF0IElSUSB0byB1c2UsIHNvIHlvdSBkb24ndCBoYXZlIHRvCitjaGFuZ2UgYW55IGp1bXBlcnMgdG8gY2hhbmdlIHRoZSBJUlEuIEp1c3QgdXNlIGEgY29tbWFuZCBsaW5lCithcmd1bWVudCAoaXJxPXh4KSB0byB0aGUgaW5zbW9kIHByb2dyYW0gdG8gc2V0IHRoZSBpbnRlcnJ1cHQuCisKK1RoZSBCSU9TIGFzc2lnbnMgdGhlIElSUSBvbiB0aGUgUENJIHZlcnNpb24uIFlvdSBoYXZlIG5vIHNheSBpbiB3aGF0CitJUlEgdG8gdXNlIGluIHRoYXQgY2FzZS4gCisKK0lmIHlvdXIgc3BlY2lhbGl4IGNhcmRzIGFyZSBub3QgYXQgdGhlIGRlZmF1bHQgbG9jYXRpb25zLCB5b3UgY2FuIHVzZQordGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgYXJndW1lbnQgInNwZWNpYWxpeD1pbzAsaXJxMCxpbzEsaXJxMS4uLiIuCitIZXJlICJpbzAiIGlzIHRoZSBpbyBhZGRyZXNzIGZvciB0aGUgZmlyc3QgY2FyZCwgYW5kICJpcnEwIiBpcyB0aGUKK2lycSBsaW5lIHRoYXQgdGhlIGZpcnN0IGNhcmQgc2hvdWxkIHVzZS4gQW5kIHNvIG9uLiAKKworRXhhbXBsZXMuIAorCitZb3UgdXNlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgYW5kIGhhdmUgdGhyZWUgY2FyZHMgYXQgMHgxMDAsIDB4MjUwCithbmQgMHgxODAuIEFuZCBzb21lIHdheSBvciBhbm90aGVyIHlvdSB3YW50IHRoZW0gZGV0ZWN0ZWQgaW4gdGhhdAorb3JkZXIuIE1vcmVvdmVyIGlycSAxMiBpcyB0YWtlbiAoZS5nLiBieSB5b3VyIFBTLzIgbW91c2UpLgorCisgIGluc21vZCBzcGVjaWFsaXgubyBpb2Jhc2U9MHgxMDAsMHgyNTAsMHgxODAgaXJxPTksMTEsMTUKKworVGhlIHNhbWUgdGhyZWUgY2FyZHMsIGJ1dCBub3cgaW4gdGhlIGtlcm5lbCB3b3VsZCByZXF1aXJlIHlvdSB0bworYWRkIAorCisgICBzcGVjaWFsaXg9MHgxMDAsOSwweDI1MCwxMSwweDE4MCwxNQorCit0byB0aGUgY29tbWFuZCBsaW5lLiBUaGlzIHdvdWxkIGJlY29tZSAKKworICAgYXBwZW5kPSJzcGVjaWFsaXg9MHgxMDAsOSwweDI1MCwxMSwweDE4MCwxNSIgCisKK2luIHlvdXIgL2V0Yy9saWxvLmNvbmYgZmlsZSBpZiB5b3UgdXNlIGxpbG8uIAorCitUaGUgU3BlY2lhbGl4IGRyaXZlciBpcyBzbGlnaHRseSBvZGQ6IEl0IGFsbG93cyB5b3UgdG8gaGF2ZSB0aGUgc2Vjb25kCitvciB0aGlyZCBjYXJkIGRldGVjdGVkIHdpdGhvdXQgaGF2aW5nIGEgZmlyc3QgY2FyZC4gVGhpcyBoYXMKK2FkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMuIEEgc2xvdCB0aGF0IGlzbid0IGZpbGxlZCBieSBhbiBJU0EgY2FyZCwKK21pZ2h0IGJlIGZpbGxlZCBpZiBhIFBDSSBjYXJkIGlzIGRldGVjdGVkLiBUaHVzIGlmIHlvdSBoYXZlIGFuIElTQQorY2FyZCBhdCAweDI1MCBhbmQgYSBQQ0kgY2FyZCwgeW91IHdvdWxkIGdldDoKKworc3gwOiBzcGVjaWFsaXggSU84KyBCb2FyZCBhdCAweDEwMCBub3QgZm91bmQuCitzeDE6IHNwZWNpYWxpeCBJTzgrIEJvYXJkIGF0IDB4MTgwIG5vdCBmb3VuZC4KK3N4Mjogc3BlY2lhbGl4IElPOCsgYm9hcmQgZGV0ZWN0ZWQgYXQgMHgyNTAsIElSUSAxMiwgQ0QxODY1IFJldi4gQi4KK3N4Mzogc3BlY2lhbGl4IElPOCsgQm9hcmQgYXQgMHgyNjAgbm90IGZvdW5kLgorc3gwOiBzcGVjaWFsaXggSU84KyBib2FyZCBkZXRlY3RlZCBhdCAweGQ4MDAsIElSUSA5LCBDRDE4NjUgUmV2LiBCLgorCitUaGlzIHdvdWxkIGhhcHBlbiBpZiB5b3UgZG9uJ3QgZ2l2ZSBhbnkgcHJvYmUgaGludHMgdG8gdGhlIGRyaXZlci4gCitJZiB5b3Ugd291bGQgc3BlY2lmeToKKworICAgc3BlY2lhbGl4PTB4MjUwLDExCisKK3lvdSdkIGdldCB0aGUgZm9sbG93aW5nIG1lc3NhZ2VzOgorCitzeDA6IHNwZWNpYWxpeCBJTzgrIGJvYXJkIGRldGVjdGVkIGF0IDB4MjUwLCBJUlEgMTEsIENEMTg2NSBSZXYuIEIuCitzeDE6IHNwZWNpYWxpeCBJTzgrIGJvYXJkIGRldGVjdGVkIGF0IDB4ZDgwMCwgSVJRIDksIENEMTg2NSBSZXYuIEIuCisKK0lTQSBwcm9iaW5nIGlzIGFib3J0ZWQgYWZ0ZXIgdGhlIElPIGFkZHJlc3MgeW91IGdhdmUgaXMgZXhoYXVzdGVkLCBhbmQKK3RoZSBQQ0kgY2FyZCBpcyBub3cgZGV0ZWN0ZWQgYXMgdGhlIHNlY29uZCBjYXJkLiBUaGUgSVNBIGNhcmQgaXMgbm93CithbHNvIGZvcmNlZCB0byBJUlExMS4uLi4KKworCitCYXVkIHJhdGVzCis9PT09PT09PT09CisKK1RoZSByZXYgMS4yIGFuZCBiZWxvdyBib2FyZHMgdXNlIGEgQ0wtQ0QxODY0LiBUaGVzZSBjaGlwcyBjYW4gb25seSAKK2RvIDY0a2JpdC4gVGhlIHJldiAxLjMgYW5kIG5ld2VyIGJvYXJkcyB1c2UgYSBDTC1DRDE4NjUuIFRoZXNlIGNoaXBzCithcmUgb2ZmaWNpYWxseSBjYXBhYmxlIG9mIDExNWsyLgorCitUaGUgU3BlY2lhbGl4IGNhcmQgdXNlcyBhIDI1TUh6IGNyeXN0YWwgKGluIHRpbWVzIHR3byBtb2RlLCB3aGljaCBpbgorZmFjdCBpcyBhIGRpdmlkZWQgYnkgdHdvIG1vZGUpLiBUaGlzIGlzIG5vdCBlbm91Z2ggdG8gcmVhY2ggdGhlIHJhdGVkCisxMTVrMiBvbiBhbGwgcG9ydHMgYXQgdGhlIHNhbWUgdGltZS4gV2l0aCB0aGlzIGNsb2NrIHJhdGUgeW91IGNhbiBvbmx5CitkbyAzNyUgb2YgdGhpcyByYXRlLiBUaGlzIG1lYW5zIHRoYXQgYXQgMTE1azIgb24gYWxsIHBvcnRzIHlvdSBhcmUKK2dvaW5nIHRvIGxvc2UgY2hhcmFjdGVycyAoVGhlIGNoaXAgY2Fubm90IGhhbmRsZSB0aGF0IG1hbnkgaW5jb21pbmcKK2JpdHMgYXQgdGhpcyBjbG9jayByYXRlLikgKFllcywgeW91IHJlYWQgdGhhdCBjb3JyZWN0bHk6IHRoZXJlIGlzIGEKK2xpbWl0IHRvIHRoZSBudW1iZXIgb2YgLT1iaXRzPS0gcGVyIHNlY29uZCB0aGF0IHRoZSBjaGlwIGNhbiBoYW5kbGUuKQorCitJZiB5b3UgbmVhciB0aGUgImxpbWl0IiB5b3Ugd2lsbCBmaXJzdCBzdGFydCB0byBzZWUgYSBncmFjZWZ1bAorZGVncmFkYXRpb24gaW4gdGhhdCB0aGUgY2hpcCBjYW5ub3Qga2VlcCB0aGUgdHJhbnNtaXR0ZXIgYnVzeSBhdCBhbGwKK3RpbWVzLiBIb3dldmVyIHdpdGggYSBjZW50cmFsIGNsb2NrIHRoaXMgc2xvdywgeW91IGNhbiBhbHNvIGdldCBpdCB0bworbWlzcyBpbmNvbWluZyBjaGFyYWN0ZXJzLiBUaGUgZHJpdmVyIHdpbGwgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2Ugd2hlbgoreW91IGFyZSBvdXRzaWRlIHRoZSBvZmZpY2lhbCBzcGVjcy4gVGhlIG1lc3NhZ2VzIHVzdWFsbHkgc2hvdyB1cCBpbgordGhlIGZpbGUgL3Zhci9sb2cvbWVzc2FnZXMgLgorCitUaGUgc3BlY2lhbGl4IGNhcmQgY2Fubm90IHJlbGlhYmx5IGRvIDExNWsyLiBJZiB5b3UgdXNlIGl0LCB5b3UgaGF2ZQordG8gZG8gImV4dGVuc2l2ZSB0ZXN0aW5nIiAoKikgdG8gdmVyaWZ5IGlmIGl0IGFjdHVhbGx5IHdvcmtzLgorCitXaGVuICJtZ2V0dHkiIGNvbW11bmljYXRlcyB3aXRoIG15IG1vZGVtIGF0IDExNWsyIGl0IHJlcG9ydHM6Citnb3Q6ICsrK1swZF1BVFEwVjFIMFswZF1bMGRdWzhhXU9bY2JdWzBkXVs4YV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eIF5eXl4gICAgXl5eXiAKKworVGhlIHRocmVlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSAiXl5eIiB1bmRlciB0aGVtIGhhdmUgc3VmZmVyZWQgYQorYml0IGVycm9yIGluIHRoZSBoaWdoZXN0IGJpdC4gSW4gY29uY2x1c2lvbjogSSd2ZSB0ZXN0ZWQgaXQsIGFuZCBmb3VuZAordGhhdCBpdCBzaW1wbHkgRE9FU04nVCB3b3JrIGZvciBtZS4gSSBhbHNvIHN1c3BlY3QgdGhhdCB0aGlzIGlzIGFsc28KK2NhdXNlZCBieSB0aGUgYmF1ZCByYXRlIGJlaW5nIGp1c3QgYSBsaXR0bGUgYml0IG91dCBvZiB0dW5lLiAKKworSSB1cGdyYWRlZCB0aGUgY3J5c3RhbCB0byA2Nk1oeiBvbiBvbmUgb2YgbXkgU3BlY2lhbGl4IGNhcmRzLiBXb3JrcworZ3JlYXQhIENvbnRhY3QgbWUgZm9yIGRldGFpbHMuIChWb2lkcyB3YXJyYW50eSwgcmVxdWlyZXMgYSBzdGVhZHkgaGFuZAorYW5kIG1vcmUgc3VjaCByZXN0cmljdGlvbnMuLi4uKQorCisKKygqKSBDaXJydXMgbG9naWMgQ0QxODY0IGRhdGFib29rLCBwYWdlIDQwLgorCisKK0NhYmxlcyBmb3IgdGhlIFNwZWNpYWxpeCBJTzgrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcGlub3V0IG9mIHRoZSBjb25uZWN0b3JzIG9uIHRoZSBJTzgrIGlzOgorCisgICAgIHBpbiAgICBzaG9ydCAgICBkaXJlY3Rpb24gICAgbG9uZyBuYW1lCisgICAgICAgICAgICBuYW1lCisgICAgUGluIDEgICBEQ0QgICAgICBpbnB1dCAgICAgICAgRGF0YSBDYXJyaWVyIERldGVjdAorICAgIFBpbiAyICAgUlhEICAgICAgaW5wdXQgICAgICAgIFJlY2VpdmUKKyAgICBQaW4gMyAgIERUUi9SVFMgIG91dHB1dCAgICAgICBEYXRhIFRlcm1pbmFsIFJlYWR5L1JlYWR5IFRvIFNlbmQKKyAgICBQaW4gNCAgIEdORCAgICAgIC0gICAgICAgICAgICBHcm91bmQKKyAgICBQaW4gNSAgIFRYRCAgICAgIG91dHB1dCAgICAgICBUcmFuc21pdAorICAgIFBpbiA2ICAgQ1RTICAgICAgaW5wdXQgICAgICAgIENsZWFyIFRvIFNlbmQKKyAgICAgICAgCisgICAgCisgICAgICAgICAgICAgLS0gNiAgNSAgNCAgMyAgMiAgMSAtLQorICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICArLS0tLS0gICAgICAgICAgLS0tLS0rCisgICAgICAgICAgICAgICAgICB8X19fX19fX19fX3wKKyAgICAgICAgICAgICAgICAgICAgICBjbGlwCisgICAgCisgICAgRnJvbnQgdmlldyBvZiBhbiBSSjEyIGNvbm5lY3Rvci4gQ2FibGUgbW92ZXMgImludG8iIHRoZSBwYXBlci4KKyAgICAodGhlIHBsdWcgaXMgcmVhZHkgdG8gcGx1ZyBpbnRvIHlvdXIgbW91dGggdGhpcyB3YXkuLi4pCisKKyAgICAKKyAgICBOVUxMIGNhYmxlLiBJIGRvbid0IGtub3cgd2hvIGlzIGdvaW5nIHRvIHVzZSB0aGVzZSBleGNlcHQgZm9yCisgICAgdGVzdGluZyBwdXJwb3NlcywgYnV0IEkgdGVzdGVkIHRoZSBjYXJkcyB3aXRoIHRoaXMgY2FibGUuIChJdCAKKyAgICB0b29rIHF1aXRlIGEgd2hpbGUgdG8gZmlndXJlIG91dCwgc28gSSdtIG5vdCBnb2luZyB0byBkZWxldGUKKyAgICBpdC4gU28gdGhlcmUhIDotKQorICAgIAorICAgIAorICAgIFRoaXMgZW5kIGdvZXMgICAgICAgICAgICAgICBUaGlzIGVuZCBuZWVkcworICAgIHN0cmFpZ2h0IGludG8gdGhlICAgICAgICAgICBzb21lIHR3aXN0cyBpbgorICAgIFJKMTIgcGx1Zy4gICAgICAgICAgICAgICAgICB0aGUgd2lyaW5nLgorICAgICAgIElPOCsgUkoxMiAgICAgICAgICAgICAgICAgICBJTzgrIFJKMTIKKyAgICAgICAgMSAgRENEICAgICAgIHdoaXRlICAgICAgICAgIC0KKyAgICAgICAgLSAgICAgICAgICAgICAtICAgICAgICAgICAgIDEgRENECisgICAgICAgIDIgIFJYRCAgICAgICBibGFjayAgICAgICAgICA1IFRYRAorICAgICAgICAzICBEVFIvUlRTICAgcmVkICAgICAgICAgICAgNiBDVFMKKyAgICAgICAgNCAgR05EICAgICAgIGdyZWVuICAgICAgICAgIDQgR05ECisgICAgICAgIDUgIFRYRCAgICAgICB5ZWxsb3cgICAgICAgICAyIFJYRAorICAgICAgICA2ICBDVFMgICAgICAgYmx1ZSAgICAgICAgICAgMyBEVFIvUlRTCisgICAgCisKKyAgICBTYW1lIE5VTEwgY2FibGUsIGJ1dCBub3cgc29ydGVkIG9uIHRoZSBzZWNvbmQgY29sdW1uLgorIAorICAgICAgICAxICBEQ0QgICAgICAgd2hpdGUgICAgICAgICAgLQorICAgICAgICAtICAgICAgICAgICAgIC0gICAgICAgICAgICAgMSBEQ0QKKyAgICAgICAgNSAgVFhEICAgICAgIHllbGxvdyAgICAgICAgIDIgUlhECisgICAgICAgIDYgIENUUyAgICAgICBibHVlICAgICAgICAgICAzIERUUi9SVFMKKyAgICAgICAgNCAgR05EICAgICAgIGdyZWVuICAgICAgICAgIDQgR05ECisgICAgICAgIDIgIFJYRCAgICAgICBibGFjayAgICAgICAgICA1IFRYRAorICAgICAgICAzICBEVFIvUlRTICAgcmVkICAgICAgICAgICAgNiBDVFMKKyAgICAKKyAgICAKKyAgICAKKyAgICBUaGlzIGlzIGEgbW9kZW0gY2FibGUgdXNhYmxlIGZvciBoYXJkd2FyZSBoYW5kc2hha2luZzoKKyAgICAgICAgUkoxMiAgICAgICAgICAgICAgICAgICAgICAgIERCMjUgICAgICAgICAgIERCOQorICAgICAgICAxICAgRENEICAgICAgd2hpdGUgICAgICAgICAgOCBEQ0QgICAgICAgICAgMSBEQ0QKKyAgICAgICAgMiAgIFJYRCAgICAgIGJsYWNrICAgICAgICAgIDMgUlhEICAgICAgICAgIDIgUlhECisgICAgICAgIDMgICBEVFIvUlRTICByZWQgICAgICAgICAgICA0IFJUUyAgICAgICAgICA3IFJUUworICAgICAgICA0ICAgR05EICAgICAgZ3JlZW4gICAgICAgICAgNyBHTkQgICAgICAgICAgNSBHTkQKKyAgICAgICAgNSAgIFRYRCAgICAgIHllbGxvdyAgICAgICAgIDIgVFhEICAgICAgICAgIDMgVFhECisgICAgICAgIDYgICBDVFMgICAgICBibHVlICAgICAgICAgICA1IENUUyAgICAgICAgICA4IENUUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tICAgNiBEU1IgICAgICAgICAgNiBEU1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLSAgMjAgRFRSICAgICAgICAgIDQgRFRSCisKKyAgICBUaGlzIGlzIGEgbW9kZW0gY2FibGUgdXNhYmxlIGZvciBzb2Z0d2FyZSBoYW5kc2hha2luZzoKKyAgICBJdCBhbGxvd3MgeW91IHRvIHJlc2V0IHRoZSBtb2RlbSB1c2luZyB0aGUgRFRSIGlvY3Rscy4KKyAgICBJIChSRVcpIGhhdmUgbmV2ZXIgdGVzdGVkIHRoaXMsICJidXQgeHh4eHh4eHh4eHh4eAorICAgIHNheXMgdGhhdCBpdCB3b3Jrcy4iIElmIHlvdSB0ZXN0IHRoaXMsIHBsZWFzZQorICAgIHRlbGwgbWUgYW5kIEknbGwgZmlsbCBpbiB5b3VyIG5hbWUgb24gdGhlIHh4eCdzLgorCisgICAgICAgIFJKMTIgICAgICAgICAgICAgICAgICAgICAgICBEQjI1ICAgICAgICAgICBEQjkKKyAgICAgICAgMSAgIERDRCAgICAgIHdoaXRlICAgICAgICAgIDggRENEICAgICAgICAgIDEgRENECisgICAgICAgIDIgICBSWEQgICAgICBibGFjayAgICAgICAgICAzIFJYRCAgICAgICAgICAyIFJYRAorICAgICAgICAzICAgRFRSL1JUUyAgcmVkICAgICAgICAgICAyMCBEVFIgICAgICAgICAgNCBEVFIKKyAgICAgICAgNCAgIEdORCAgICAgIGdyZWVuICAgICAgICAgIDcgR05EICAgICAgICAgIDUgR05ECisgICAgICAgIDUgICBUWEQgICAgICB5ZWxsb3cgICAgICAgICAyIFRYRCAgICAgICAgICAzIFRYRAorICAgICAgICA2ICAgQ1RTICAgICAgYmx1ZSAgICAgICAgICAgNSBDVFMgICAgICAgICAgOCBDVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLSAgIDYgRFNSICAgICAgICAgIDYgRFNSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0gICA0IFJUUyAgICAgICAgICA3IFJUUworCisgICBJIGJvdWdodCBhIDYgd2lyZSBmbGF0IGNhYmxlLiBJdCB3YXMgY29sb3JlZCBhcyBpbmRpY2F0ZWQuCisgICBDaGVjayB0aGF0IHlvdXJzIGlzIHRoZSBzYW1lIGJlZm9yZSB5b3UgdHJ1c3QgbWUgb24gdGhpcy4KKyAgIAorIAorSGFyZHdhcmUgaGFuZHNoYWtpbmcgaXNzdWVzLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuIFRoZSBkZWZhdWx0CisoIlNwZWNpYWxpeCBEVFIvUlRTIHBpbiBpcyBSVFMiIGlzIG9mZikgdGhlIHBpbiBiZWhhdmVzIGFzIERUUiB3aGVuCitoYXJkd2FyZSBoYW5kc2hha2luZyBpcyBvZmYuIEl0IGJlaGF2ZXMgYXMgdGhlIFJUUyBoYXJkd2FyZQoraGFuZHNoYWtpbmcgc2lnbmFsIHdoZW4gaGFyZHdhcmUgaGFuZHNoYWtpbmcgaXMgc2VsZWN0ZWQuCisKK1doZW4geW91IHVzZSB0aGlzLCB5b3UgaGF2ZSB0byB1c2UgdGhlIGFwcHJvcHJpYXRlIGNhYmxlLiBUaGUKK2NhYmxlIHdpbGwgZWl0aGVyIGJlIGNvbXBhdGlibGUgd2l0aCBoYXJkd2FyZSBoYW5kc2hha2luZyBvciB3aXRoCitzb2Z0d2FyZSBoYW5kc2hha2luZy4gU28gc3dpdGNoaW5nIG9uIHRoZSBmbHkgaXMgbm90IHJlYWxseSBhbgorb3B0aW9uLgorCitJIGFjdHVhbGx5IHByZWZlciB0byB1c2UgdGhlICJTcGVjaWFsaXggRFRSL1JUUyBwaW4gaXMgUlRTIiBvcHRpb24uCitUaGlzIG1ha2VzIHRoZSBEVFIvUlRTIHBpbiBhbHdheXMgYW4gUlRTIHBpbiwgYW5kIGlvY3RscyB0bworY2hhbmdlIERUUiBhcmUgYWx3YXlzIGlnbm9yZWQuIEkgaGF2ZSBhIGNhYmxlIHRoYXQgaXMgY29uZmlndXJlZAorZm9yIHRoaXMuIAorCisKK1BvcnRzIGFuZCBkZXZpY2VzCis9PT09PT09PT09PT09PT09PQorCitQb3J0IDAgaXMgdGhlIG9uZSBmdXJ0aGVzdCBmcm9tIHRoZSBjYXJkLWVkZ2UgY29ubmVjdG9yLgorCitEZXZpY2VzOgorCitZb3Ugc2hvdWxkIG1ha2UgdGhlIGRldmljZXMgYXMgZm9sbG93czoKKworYmFzaAorY2QgL2RldgorZm9yIGkgaW4gIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgXAorICAgICAgICAgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKK2RvCisgIGVjaG8gLW4gIiRpICIKKyAgbWtub2QgL2Rldi90dHlXJGkgYyA3NSAkaQorICBta25vZCAvZGV2L2N1dyRpIGMgNzYgJGkKK2RvbmUKK2VjaG8gIiIKKworSWYgeW91ciBzeXN0ZW0gZG9lc24ndCBjb21lIHdpdGggdGhlc2UgZGV2aWNlcyBwcmVpbnN0YWxsZWQsIGJ1ZyB5b3VyCitsaW51eC12ZW5kb3IgYWJvdXQgdGhpcy4gVGhleSBoYXZlIGhhZCBhbXBsZSB0aW1lIHRvIGdldCB0aGlzCitpbXBsZW1lbnRlZCBieSBub3cuCisKK1lvdSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gNCBib2FyZHMgaW4gb25lIGNvbXB1dGVyLiBUaGUgY2FyZCBvbmx5CitzdXBwb3J0cyA0IGRpZmZlcmVudCBpbnRlcnJ1cHRzLiBJZiB5b3UgcmVhbGx5IHdhbnQgdGhpcywgY29udGFjdCBtZQorYWJvdXQgdGhpcyBhbmQgSSdsbCBnaXZlIHlvdSBhIGZldyB0aXBzIChyZXF1aXJlcyBzb2xkZXJpbmcgaXJvbikuLi4uCisKK0lmIHlvdSBoYXZlIGVub3VnaCBQQ0kgc2xvdHMsIHlvdSBjYW4gcHJvYmFibHkgdXNlIG1vcmUgdGhhbiA0IFBDSQordmVyc2lvbnMgb2YgdGhlIGNhcmQgdGhvdWdoLi4uLiAKKworVGhlIFBDSSB2ZXJzaW9uIG9mIHRoZSBjYXJkIGNhbm5vdCBhZGhlcmUgdG8gdGhlIG1lY2hhbmljYWwgcGFydCBvZgordGhlIFBDSSBzcGVjIGJlY2F1c2UgdGhlIDggc2VyaWFsIGNvbm5lY3RvcnMgYXJlIHNpbXBseSB0b28gbGFyZ2UuIElmCitpdCBkb2Vzbid0IGZpdCBpbiB5b3VyIGNvbXB1dGVyLCBicmluZyBiYWNrIHRoZSBjYXJkLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgRml4ZWQgYnVncyBhbmQgcmVzdHJpY3Rpb25zOgorICAgICAgIC0gRHVyaW5nIGluaXRpYWxpemF0aW9uLCBpbnRlcnJ1cHRzIGFyZSBibGluZGx5IHR1cm5lZCBvbi4KKyAgICAgICAgICAgIEhhdmluZyBhIHNoYWRvdyB2YXJpYWJsZSB3b3VsZCBjYXVzZSBhbiBleHRyYSBtZW1vcnkKKyAgICAgICAgICAgIGFjY2VzcyBvbiBldmVyeSBJTyBpbnN0cnVjdGlvbi4gCisgICAgICAgLSBUaGUgaW50ZXJydXB0IChvbiB0aGUgY2FyZCkgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gd2UKKyAgICAgICAgIGRvbid0IGFsbG9jYXRlIHRoZSBMaW51eCBlbmQgb2YgdGhlIGludGVycnVwdC4gVGhpcyBhbGxvd3MgCisgICAgICAgICBhIGRpZmZlcmVudCBkcml2ZXIvY2FyZCB0byB1c2UgaXQgd2hpbGUgYWxsIHBvcnRzIGFyZSBub3QgaW4KKyAgICAgICAgIHVzZS4uLi4uIChhIGxhIHN0YW5kYXJkIHNlcmlhbCBwb3J0KQorICAgICAgID09IEFuIGV4dHJhIF9vZmYgdmFyaWFudCBvZiB0aGUgc3hfaW4gYW5kIHN4X291dCBtYWNyb3MgYXJlCisgICAgICAgICAgbm93IGF2YWlsYWJsZS4gVGhleSBkb24ndCBzZXQgdGhlIGludGVycnVwdCBlbmFibGUgYml0LgorICAgICAgICAgIFRoZXNlIGFyZSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gTm9ybWFsIG9wZXJhdGlvbiB1c2VzCisgICAgICAgICAgdGhlIG9sZCB2YXJpYW50IHdoaWNoIGVuYWJsZXMgdGhlIGludGVycnVwdCBsaW5lLgorICAgICAgIC0gUlRTL0RUUiBpc3N1ZSBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gCisgICAgICAgICBzcGVjaWFsaXgnIHNwZWMuCisgICAgICAgICAgICBJIGtpbmQgb2YgbGlrZSB0aGUgImRldGVybWluaXNtIiBvZiB0aGUgY3VycmVudCAKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLiBDb21waWxlIHRpbWUgZmxhZz8KKyAgICAgICA9PSBPay4gQ29tcGlsZSB0aW1lIGZsYWchIERlZmF1bHQgaXMgaG93IFNwZWNpYWxpeCBsaWtlcyBpdC4KKyAgICAgICA9PSBOb3cgYSBjb25maWcgdGltZSBmbGFnISBHZXRzIHNhdmVkIGluIHlvdXIgY29uZmlnIGZpbGUuIE5lYXQhCisgICAgICAgLSBDYW4geW91IHNldCB0aGUgSU8gYWRkcmVzcyBmcm9tIHRoZSBsaWxvIGNvbW1hbmQgbGluZT8KKyAgICAgICAgICAgIElmIHlvdSBuZWVkIHRoaXMsIGJ1ZyBtZSBhYm91dCBpdCwgSSdsbCBtYWtlIGl0LiAKKyAgICAgICA9PSBIYWghIE5vIGJ1Z2dpbmcgbmVlZGVkLiBGaXhlZCEgOi0pCisgICAgICAgLSBDaXJydXMgbG9naWMgaGFzbid0IGdvdHRlbiBiYWNrIHRvIG1lIHlldCB3aHkgdGhlIENEMTg2NSBjYW4KKyAgICAgICAgICAgIGFuZCB0aGUgQ0QxODY0IGNhbid0IGRvIDExNWsyLiBJIHN1c3BlY3QgdGhhdCB0aGlzIGlzCisgICAgICAgICAgICBiZWNhdXNlIHRoZSBDRDE4NjQgaXMgbm90IHJhdGVkIGZvciAzM01IeiBvcGVyYXRpb24uCisgICAgICAgICAgICBUaGVyZWZvcmUgdGhlIENEMTg2NCB2ZXJzaW9ucyBvZiB0aGUgY2FyZCBjYW4ndCBkbyAxMTVrMiBvbiAKKyAgICAgICAgICAgIGFsbCBwb3J0cyBqdXN0IGxpa2UgdGhlIENEMTg2NSB2ZXJzaW9ucy4gVGhlIGRyaXZlciBkb2VzCisgICAgICAgICAgICBub3QgYmxvY2sgMTE1azIgb24gQ0QxODY0IGNhcmRzLiAKKyAgICAgICAgPT0gSSBjYWxsZWQgdGhlIENpcnJ1cyBMb2dpYyByZXByZXNlbnRhdGl2ZSBoZXJlIGluIEhvbGxhbmQuCisgICAgICAgICAgIFRoZSBDRDE4NjQgZGF0YWJvb2sgaXMgaWRlbnRpY2FsIHRvIHRoZSBDRDE4NjUgZGF0YWJvb2ssIAorICAgICAgICAgICBleGNlcHQgZm9yIGFuIGV4dHJhIHdhcm5pbmcgYXQgdGhlIGVuZC4gU2ltaWxhciBCaXQgZXJyb3JzCisgICAgICAgICAgIGhhdmUgYmVlbiBvYnNlcnZlZCBpbiB0ZXN0aW5nIGF0IDExNWsyIG9uIGJvdGggYW4gMTg2NSBhbmQKKyAgICAgICAgICAgYSAxODY0IGNoaXAuIEkgc2VlIG5vIHJlYXNvbiB3aHkgSSB3b3VsZCBwcm9oaWJpdCAxMTVrMiBvbgorICAgICAgICAgICAxODY0IGNoaXBzIGFuZCBub3QgZG8gaXQgb24gMTg2NSBjaGlwcy4gQWN0dWFsbHkgdGhlcmUgaXMKKyAgICAgICAgICAgcmVhc29uIHRvIHByb2hpYml0IGl0IG9uIEJPVEggY2hpcHMuIEkgcHJpbnQgYSB3YXJuaW5nLgorICAgICAgICAgICBJZiB5b3UgdXNlIDExNWsyLCB5b3UncmUgb24geW91ciBvd24uIAorICAgICAgIC0gQSBzcGlreSBDRCBtYXkgc2VuZCBzcHVyaW91cyBIVVBzLiBBbHNvIGluIENMT0NBTD8/PworICAgICAgICAgLS0gQSBmaXggZm9yIHRoaXMgdHVybmVkIG91dCB0byBiZSBjb3VudGVyIHByb2R1Y3RpdmUuIAorICAgICAgICAgICAgRGlmZmVyZW50IGZpeD8gQ3VycmVudCBiZWhhdmlvdXIgaXMgYWNjZXB0YWJsZT8KKyAgICAgICAgIC0tIE1heWJlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QuIElmIGFueWJvZHkKKyAgICAgICAgICAgIGdldHMgYml0dGVuIGJ5IHRoaXMsIHBsZWFzZSByZXBvcnQsIGFuZCBpdCB3aWxsIGdldCBmaXhlZC4KKworICAgICAgICAgLS0gVGVzdGluZyByZXZlYWxlZCB0aGF0IHdoZW4gaW4gQ0xPQ0FMLCB0aGUgcHJvYmxlbSBkb2Vzbid0CisgICAgICAgICAgICBvY2N1ci4gQXMgd2FybmVkIGZvciBpbiB0aGUgQ0QxODY1IG1hbnVhbCwgdGhlIGNoaXAgbWF5CisgICAgICAgICAgICBzZW5kIG1vZGVtIGludHIncyBvbiBhIHNwaWtlLiBXZSBjb3VsZCBmaWx0ZXIgdGhvc2Ugb3V0LAorICAgICAgICAgICAgYnV0IHRoYXQgd291bGQgYmUgYSBjbHVkZ2UgYW55d2F5IChZb3UnZCBzdGlsbCByaXNrIGdldHRpbmcKKyAgICAgICAgICAgIGEgc3B1cmlvdXMgSFVQIHdoZW4gdHdvIHNwaWtlcyBvY2N1ci4pLi4uLi4KKyAKKworCisgIEJ1Z3MgJiByZXN0cmljdGlvbnM6CisgICAgICAgLSBUaGlzIGlzIGEgZGlmZmljdWx0IGNhcmQgdG8gYXV0b3Byb2JlLgorICAgICAgICAgICAgWW91IGhhdmUgdG8gV1JJVEUgdG8gdGhlIGFkZHJlc3MgcmVnaXN0ZXIgdG8gZXZlbiAKKyAgICAgICAgICAgIHJlYWQtcHJvYmUgYSBDRDE4NnggcmVnaXN0ZXIuIERpc2FibGUgYXV0b2RldGVjdGlvbj8KKyAgICAgICAgIC0tIFNwZWNpYWxpeDogYW55IHN1Z2dlc3Rpb25zPworICAgICAgIC0gQXJiaXRyYXJ5IGJhdWQgcmF0ZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIAorICAgICAgICAgICAgSWYgeW91IG5lZWQgdGhpcywgYnVnIG1lIGFib3V0IGl0LiAKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQgYi9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxMjI5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3BpbmxvY2tzLnR4dApAQCAtMCwwICsxLDIxMiBAQAorVVBEQVRFIE1hcmNoIDIxIDIwMDUgQW1pdCBHdWQgPGd1ZEBldGgubmV0PgorCitNYWNyb3MgU1BJTl9MT0NLX1VOTE9DS0VEIGFuZCBSV19MT0NLX1VOTE9DS0VEIGFyZSBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCityZW1vdmVkIHNvb24uIFNvIGZvciBhbnkgbmV3IGNvZGUgZHluYW1pYyBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgdXNlZDoKKworICAgc3BpbmxvY2tfdCB4eHhfbG9jazsKKyAgIHJ3bG9ja190IHh4eF9yd19sb2NrOworCisgICBzdGF0aWMgaW50IF9faW5pdCB4eHhfaW5pdCh2b2lkKQorICAgeworICAgCXNwaW5fbG9ja19pbml0KCZ4eHhfbG9jayk7CisJcndfbG9ja19pbml0KCZ4eHhfcndfbG9jayk7CisJLi4uCisgICB9CisKKyAgIG1vZHVsZV9pbml0KHh4eF9pbml0KTsKKworUmVhc29ucyBmb3IgZGVwcmVjYXRpb24KKyAgLSBpdCBodXJ0cyBhdXRvbWF0aWMgbG9jayB2YWxpZGF0b3JzCisgIC0gaXQgYmVjb21lcyBpbnRydXNpdmUgZm9yIHRoZSByZWFsdGltZSBwcmVlbXB0aW9uIHBhdGNoZXMKKworRm9sbG93aW5nIGRpc2N1c3Npb24gaXMgc3RpbGwgdmFsaWQsIGhvd2V2ZXIsIHdpdGggdGhlIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24KK29mIHNwaW5sb2NrcyBpbnN0ZWFkIG9mIHN0YXRpYy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gRnJpLCAyIEphbiAxOTk4LCBEb3VnIExlZGZvcmQgd3JvdGU6Cis+IAorPiBJJ20gd29ya2luZyBvbiBtYWtpbmcgdGhlIGFpYzd4eHggZHJpdmVyIG1vcmUgU01QIGZyaWVuZGx5IChhcyB3ZWxsIGFzCis+IGltcG9ydGluZyB0aGUgbGF0ZXN0IEZyZWVCU0Qgc2VxdWVuY2VyIGNvZGUgdG8gaGF2ZSA3ODk1IHN1cHBvcnQpIGFuZCB3YW50ZWQKKz4gdG8gZ2V0IHNvbWUgaW5mbyBmcm9tIHlvdS4gIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSB0aGUgdmFyaW91cyByb3V0aW5lcworPiBTTVAgc2FmZSBhcyB3ZWxsIGFzIFVQIHNhZmUgZHVyaW5nIGludGVycnVwdHMgYW5kIG90aGVyIG1hbmlwdWxhdGluZworPiByb3V0aW5lcy4gIFNvIGZhciwgSSd2ZSBhZGRlZCBhIHNwaW5fbG9jayB2YXJpYWJsZSB0byB0aGluZ3MgbGlrZSBteSBxdWV1ZQorPiBzdHJ1Y3RzLiAgTm93LCBmcm9tIHdoYXQgSSByZWNhbGwsIHRoZXJlIGFyZSBzb21lIHNwaW4gbG9jayBmdW5jdGlvbnMgSSBjYW4KKz4gdXNlIHRvIGxvY2sgdGhlc2Ugc3BpbiBsb2NrcyBmcm9tIG90aGVyIHVzZSBhcyBvcHBvc2VkIHRvIGEgKG5hc3R5KQorPiBzYXZlX2ZsYWdzKCk7IGNsaSgpOyBzdHVmZjsgcmVzdG9yZV9mbGFncygpOyBjb25zdHJ1Y3QuICBXaGVyZSBkbyBJIGZpbmQKKz4gdGhlc2Ugcm91dGluZXMgYW5kIGdvIGFib3V0IG1ha2luZyB1c2Ugb2YgdGhlbT8gIERvIHRoZXkgb25seSBsb2NrIG9uIGEKKz4gcGVyLXByb2Nlc3NvciBiYXNpcyBvciBjYW4gdGhleSBhbHNvIGxvY2sgc2F5IGFuIGludGVycnVwdCByb3V0aW5lIGZyb20KKz4gbXVja2luZyB3aXRoIGEgcXVldWUgaWYgdGhlIHF1ZXVlIHJvdXRpbmUgd2FzIG1hbmlwdWxhdGluZyBpdCB3aGVuIHRoZQorPiBpbnRlcnJ1cHQgb2NjdXJyZWQsIG9yIHNob3VsZCBJIHN0aWxsIHVzZSBhIGNsaSgpOyBiYXNlZCBjb25zdHJ1Y3Qgb24gdGhhdAorPiBvbmU/CisKK1NlZSA8YXNtL3NwaW5sb2NrLmg+LiBUaGUgYmFzaWMgdmVyc2lvbiBpczoKKworICAgc3BpbmxvY2tfdCB4eHhfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ4eHhfbG9jaywgZmxhZ3MpOworCS4uLiBjcml0aWNhbCBzZWN0aW9uIGhlcmUgLi4KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4eHhfbG9jaywgZmxhZ3MpOworCithbmQgdGhlIGFib3ZlIGlzIGFsd2F5cyBzYWZlLiBJdCB3aWxsIGRpc2FibGUgaW50ZXJydXB0cyBfbG9jYWxseV8sIGJ1dCB0aGUKK3NwaW5sb2NrIGl0c2VsZiB3aWxsIGd1YXJhbnRlZSB0aGUgZ2xvYmFsIGxvY2ssIHNvIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQKK3RoZXJlIGlzIG9ubHkgb25lIHRocmVhZC1vZi1jb250cm9sIHdpdGhpbiB0aGUgcmVnaW9uKHMpIHByb3RlY3RlZCBieSB0aGF0Citsb2NrLiAKKworTm90ZSB0aGF0IGl0IHdvcmtzIHdlbGwgZXZlbiB1bmRlciBVUCAtIHRoZSBhYm92ZSBzZXF1ZW5jZSB1bmRlciBVUAorZXNzZW50aWFsbHkgaXMganVzdCB0aGUgc2FtZSBhcyBkb2luZyBhCisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOworCSAuLi4gY3JpdGljYWwgc2VjdGlvbiAuLi4KKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworc28gdGhlIGNvZGUgZG9lcyBfbm90XyBuZWVkIHRvIHdvcnJ5IGFib3V0IFVQIHZzIFNNUCBpc3N1ZXM6IHRoZSBzcGlubG9ja3MKK3dvcmsgY29ycmVjdGx5IHVuZGVyIGJvdGggKGFuZCBzcGlubG9ja3MgYXJlIGFjdHVhbGx5IG1vcmUgZWZmaWNpZW50IG9uCithcmNoaXRlY3R1cmVzIHRoYXQgYWxsb3cgZG9pbmcgdGhlICJzYXZlX2ZsYWdzICsgY2xpIiBpbiBvbmUgZ28gYmVjYXVzZSBJCitkb24ndCBleHBvcnQgdGhhdCBpbnRlcmZhY2Ugbm9ybWFsbHkpLgorCitOT1RFIE5PVEUgTk9URSEgVGhlIHJlYXNvbiB0aGUgc3BpbmxvY2sgaXMgc28gbXVjaCBmYXN0ZXIgdGhhbiBhIGdsb2JhbAoraW50ZXJydXB0IGxvY2sgdW5kZXIgU01QIGlzIGV4YWN0bHkgYmVjYXVzZSBpdCBkaXNhYmxlcyBpbnRlcnJ1cHRzIG9ubHkgb24KK3RoZSBsb2NhbCBDUFUuIFRoZSBzcGluLWxvY2sgaXMgc2FmZSBvbmx5IHdoZW4geW91IF9hbHNvXyB1c2UgdGhlIGxvY2sKK2l0c2VsZiB0byBkbyBsb2NraW5nIGFjcm9zcyBDUFUncywgd2hpY2ggaW1wbGllcyB0aGF0IEVWRVJZVEhJTkcgdGhhdAordG91Y2hlcyBhIHNoYXJlZCB2YXJpYWJsZSBoYXMgdG8gYWdyZWUgYWJvdXQgdGhlIHNwaW5sb2NrIHRoZXkgd2FudCB0bwordXNlLgorCitUaGUgYWJvdmUgaXMgdXN1YWxseSBwcmV0dHkgc2ltcGxlICh5b3UgdXN1YWxseSBuZWVkIGFuZCB3YW50IG9ubHkgb25lCitzcGlubG9jayBmb3IgbW9zdCB0aGluZ3MgLSB1c2luZyBtb3JlIHRoYW4gb25lIHNwaW5sb2NrIGNhbiBtYWtlIHRoaW5ncyBhCitsb3QgbW9yZSBjb21wbGV4IGFuZCBldmVuIHNsb3dlciBhbmQgaXMgdXN1YWxseSB3b3J0aCBpdCBvbmx5IGZvcgorc2VxdWVuY2VzIHRoYXQgeW91IF9rbm93XyBuZWVkIHRvIGJlIHNwbGl0IHVwOiBhdm9pZCBpdCBhdCBhbGwgY29zdCBpZiB5b3UKK2FyZW4ndCBzdXJlKS4gSE9XRVZFUiwgaXQgX2RvZXNfIG1lYW4gdGhhdCBpZiB5b3UgaGF2ZSBzb21lIGNvZGUgdGhhdCBkb2VzCisKKwljbGkoKTsKKwkuLiBjcml0aWNhbCBzZWN0aW9uIC4uCisJc3RpKCk7CisKK2FuZCBhbm90aGVyIHNlcXVlbmNlIHRoYXQgZG9lcworCisJc3Bpbl9sb2NrX2lycXNhdmUoZmxhZ3MpOworCS4uIGNyaXRpY2FsIHNlY3Rpb24gLi4KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKKwordGhlbiB0aGV5IGFyZSBOT1QgbXV0dWFsbHkgZXhjbHVzaXZlLCBhbmQgdGhlIGNyaXRpY2FsIHJlZ2lvbnMgY2FuIGhhcHBlbgorYXQgdGhlIHNhbWUgdGltZSBvbiB0d28gZGlmZmVyZW50IENQVSdzLiBUaGF0J3MgZmluZSBwZXIgc2UsIGJ1dCB0aGUKK2NyaXRpY2FsIHJlZ2lvbnMgaGFkIGJldHRlciBiZSBjcml0aWNhbCBmb3IgZGlmZmVyZW50IHRoaW5ncyAoaWUgdGhleQorY2FuJ3Qgc3RvbXAgb24gZWFjaCBvdGhlcikuIAorCitUaGUgYWJvdmUgaXMgYSBwcm9ibGVtIG1haW5seSBpZiB5b3UgZW5kIHVwIG1peGluZyBjb2RlIC0gZm9yIGV4YW1wbGUgdGhlCityb3V0aW5lcyBpbiBsbF9yd19ibG9jaygpIHRlbmQgdG8gdXNlIGNsaS9zdGkgdG8gcHJvdGVjdCB0aGUgYXRvbWljaXR5IG9mCit0aGVpciBhY3Rpb25zLCBhbmQgaWYgYSBkcml2ZXIgdXNlcyBzcGlubG9ja3MgaW5zdGVhZCB0aGVuIHlvdSBzaG91bGQKK3RoaW5rIGFib3V0IGlzc3VlcyBsaWtlIHRoZSBhYm92ZS4uCisKK1RoaXMgaXMgcmVhbGx5IHRoZSBvbmx5IHJlYWxseSBoYXJkIHBhcnQgYWJvdXQgc3BpbmxvY2tzOiBvbmNlIHlvdSBzdGFydAordXNpbmcgc3BpbmxvY2tzIHRoZXkgdGVuZCB0byBleHBhbmQgdG8gYXJlYXMgeW91IG1pZ2h0IG5vdCBoYXZlIG5vdGljZWQKK2JlZm9yZSwgYmVjYXVzZSB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIHNwaW5sb2NrcyBjb3JyZWN0bHkgcHJvdGVjdCB0aGUKK3NoYXJlZCBkYXRhIHN0cnVjdHVyZXMgX2V2ZXJ5d2hlcmVfIHRoZXkgYXJlIHVzZWQuIFRoZSBzcGlubG9ja3MgYXJlIG1vc3QKK2Vhc2lseSBhZGRlZCB0byBwbGFjZXMgdGhhdCBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiBvdGhlciBjb2RlIChpZQoraW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5vYm9keSBlbHNlIGV2ZXIgdG91Y2hlcywgZm9yCitleGFtcGxlKS4gCisKKy0tLS0KKworTGVzc29uIDI6IHJlYWRlci13cml0ZXIgc3BpbmxvY2tzLgorCitJZiB5b3VyIGRhdGEgYWNjZXNzZXMgaGF2ZSBhIHZlcnkgbmF0dXJhbCBwYXR0ZXJuIHdoZXJlIHlvdSB1c3VhbGx5IHRlbmQKK3RvIG1vc3RseSByZWFkIGZyb20gdGhlIHNoYXJlZCB2YXJpYWJsZXMsIHRoZSByZWFkZXItd3JpdGVyIGxvY2tzCisocndfbG9jaykgdmVyc2lvbnMgb2YgdGhlIHNwaW5sb2NrcyBhcmUgb2Z0ZW4gbmljZXIuIFRoZXkgYWxsb3cgbXVsdGlwbGUKK3JlYWRlcnMgdG8gYmUgaW4gdGhlIHNhbWUgY3JpdGljYWwgcmVnaW9uIGF0IG9uY2UsIGJ1dCBpZiBzb21lYm9keSB3YW50cwordG8gY2hhbmdlIHRoZSB2YXJpYWJsZXMgaXQgaGFzIHRvIGdldCBhbiBleGNsdXNpdmUgd3JpdGUgbG9jay4gVGhlCityb3V0aW5lcyBsb29rIHRoZSBzYW1lIGFzIGFib3ZlOgorCisgICByd2xvY2tfdCB4eHhfbG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQ7CisKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmeHh4X2xvY2ssIGZsYWdzKTsKKwkuLiBjcml0aWNhbCBzZWN0aW9uIHRoYXQgb25seSByZWFkcyB0aGUgaW5mbyAuLi4KKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ4eHhfbG9jaywgZmxhZ3MpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZ4eHhfbG9jaywgZmxhZ3MpOworCS4uIHJlYWQgYW5kIHdyaXRlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGluZm8gLi4uCisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnh4eF9sb2NrLCBmbGFncyk7CisKK1RoZSBhYm92ZSBraW5kIG9mIGxvY2sgaXMgdXNlZnVsIGZvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBsaWtlIGxpbmtlZAorbGlzdHMgZXRjLCBlc3BlY2lhbGx5IHdoZW4geW91IGtub3cgdGhhdCBtb3N0IG9mIHRoZSB3b3JrIGlzIHRvIGp1c3QKK3RyYXZlcnNlIHRoZSBsaXN0IHNlYXJjaGluZyBmb3IgZW50cmllcyB3aXRob3V0IGNoYW5naW5nIHRoZSBsaXN0IGl0c2VsZiwKK2ZvciBleGFtcGxlLiBUaGVuIHlvdSBjYW4gdXNlIHRoZSByZWFkIGxvY2sgZm9yIHRoYXQga2luZCBvZiBsaXN0Cit0cmF2ZXJzYWwsIHdoaWNoIGFsbG93cyBtYW55IGNvbmN1cnJlbnQgcmVhZGVycy4gQW55dGhpbmcgdGhhdCBfY2hhbmdlc18KK3RoZSBsaXN0IHdpbGwgaGF2ZSB0byBnZXQgdGhlIHdyaXRlIGxvY2suIAorCitOb3RlOiB5b3UgY2Fubm90ICJ1cGdyYWRlIiBhIHJlYWQtbG9jayB0byBhIHdyaXRlLWxvY2ssIHNvIGlmIHlvdSBhdCBfYW55XwordGltZSBuZWVkIHRvIGRvIGFueSBjaGFuZ2VzIChldmVuIGlmIHlvdSBkb24ndCBkbyBpdCBldmVyeSB0aW1lKSwgeW91IGhhdmUKK3RvIGdldCB0aGUgd3JpdGUtbG9jayBhdCB0aGUgdmVyeSBiZWdpbm5pbmcuIEkgY291bGQgZmFpcmx5IGVhc2lseSBhZGQgYQorcHJpbWl0aXZlIHRvIGNyZWF0ZSBhICJ1cGdyYWRlYWJsZSIgcmVhZC1sb2NrLCBidXQgaXQgaGFzbid0IGJlZW4gYW4gaXNzdWUKK3lldC4gVGVsbCBtZSBpZiB5b3UnZCB3YW50IG9uZS4gCisKKy0tLS0KKworTGVzc29uIDM6IHNwaW5sb2NrcyByZXZpc2l0ZWQuCisKK1RoZSBzaW5nbGUgc3Bpbi1sb2NrIHByaW1pdGl2ZXMgYWJvdmUgYXJlIGJ5IG5vIG1lYW5zIHRoZSBvbmx5IG9uZXMuIFRoZXkKK2FyZSB0aGUgbW9zdCBzYWZlIG9uZXMsIGFuZCB0aGUgb25lcyB0aGF0IHdvcmsgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMsCitidXQgcGFydGx5IF9iZWNhdXNlXyB0aGV5IGFyZSBzYWZlIHRoZXkgYXJlIGFsc28gZmFpcmx5IHNsb3cuIFRoZXkgYXJlCittdWNoIGZhc3RlciB0aGFuIGEgZ2VuZXJpYyBnbG9iYWwgY2xpL3N0aSBwYWlyLCBidXQgc2xvd2VyIHRoYW4gdGhleSdkCituZWVkIHRvIGJlLCBiZWNhdXNlIHRoZXkgZG8gaGF2ZSB0byBkaXNhYmxlIGludGVycnVwdHMgKHdoaWNoIGlzIGp1c3QgYQorc2luZ2xlIGluc3RydWN0aW9uIG9uIGEgeDg2LCBidXQgaXQncyBhbiBleHBlbnNpdmUgb25lIC0gYW5kIG9uIG90aGVyCithcmNoaXRlY3R1cmVzIGl0IGNhbiBiZSB3b3JzZSkuCisKK0lmIHlvdSBoYXZlIGEgY2FzZSB3aGVyZSB5b3UgaGF2ZSB0byBwcm90ZWN0IGEgZGF0YSBzdHJ1Y3R1cmUgYWNyb3NzCitzZXZlcmFsIENQVSdzIGFuZCB5b3Ugd2FudCB0byB1c2Ugc3BpbmxvY2tzIHlvdSBjYW4gcG90ZW50aWFsbHkgdXNlCitjaGVhcGVyIHZlcnNpb25zIG9mIHRoZSBzcGlubG9ja3MuIElGRiB5b3Uga25vdyB0aGF0IHRoZSBzcGlubG9ja3MgYXJlCituZXZlciB1c2VkIGluIGludGVycnVwdCBoYW5kbGVycywgeW91IGNhbiB1c2UgdGhlIG5vbi1pcnEgdmVyc2lvbnM6CisKKwlzcGluX2xvY2soJmxvY2spOworCS4uLgorCXNwaW5fdW5sb2NrKCZsb2NrKTsKKworKGFuZCB0aGUgZXF1aXZhbGVudCByZWFkLXdyaXRlIHZlcnNpb25zIHRvbywgb2YgY291cnNlKS4gVGhlIHNwaW5sb2NrIHdpbGwKK2d1YXJhbnRlZSB0aGUgc2FtZSBraW5kIG9mIGV4Y2x1c2l2ZSBhY2Nlc3MsIGFuZCBpdCB3aWxsIGJlIG11Y2ggZmFzdGVyLiAKK1RoaXMgaXMgdXNlZnVsIGlmIHlvdSBrbm93IHRoYXQgdGhlIGRhdGEgaW4gcXVlc3Rpb24gaXMgb25seSBldmVyCittYW5pcHVsYXRlZCBmcm9tIGEgInByb2Nlc3MgY29udGV4dCIsIGllIG5vIGludGVycnVwdHMgaW52b2x2ZWQuIAorCitUaGUgcmVhc29ucyB5b3UgbXVzdG4ndCB1c2UgdGhlc2UgdmVyc2lvbnMgaWYgeW91IGhhdmUgaW50ZXJydXB0cyB0aGF0CitwbGF5IHdpdGggdGhlIHNwaW5sb2NrIGlzIHRoYXQgeW91IGNhbiBnZXQgZGVhZGxvY2tzOgorCisJc3Bpbl9sb2NrKCZsb2NrKTsKKwkuLi4KKwkJPC0gaW50ZXJydXB0IGNvbWVzIGluOgorCQkJc3Bpbl9sb2NrKCZsb2NrKTsKKword2hlcmUgYW4gaW50ZXJydXB0IHRyaWVzIHRvIGxvY2sgYW4gYWxyZWFkeSBsb2NrZWQgdmFyaWFibGUuIFRoaXMgaXMgb2sgaWYKK3RoZSBvdGhlciBpbnRlcnJ1cHQgaGFwcGVucyBvbiBhbm90aGVyIENQVSwgYnV0IGl0IGlzIF9ub3RfIG9rIGlmIHRoZQoraW50ZXJydXB0IGhhcHBlbnMgb24gdGhlIHNhbWUgQ1BVIHRoYXQgYWxyZWFkeSBob2xkcyB0aGUgbG9jaywgYmVjYXVzZSB0aGUKK2xvY2sgd2lsbCBvYnZpb3VzbHkgbmV2ZXIgYmUgcmVsZWFzZWQgKGJlY2F1c2UgdGhlIGludGVycnVwdCBpcyB3YWl0aW5nCitmb3IgdGhlIGxvY2ssIGFuZCB0aGUgbG9jay1ob2xkZXIgaXMgaW50ZXJydXB0ZWQgYnkgdGhlIGludGVycnVwdCBhbmQgd2lsbAorbm90IGNvbnRpbnVlIHVudGlsIHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gcHJvY2Vzc2VkKS4gCisKKyhUaGlzIGlzIGFsc28gdGhlIHJlYXNvbiB3aHkgdGhlIGlycS12ZXJzaW9ucyBvZiB0aGUgc3BpbmxvY2tzIG9ubHkgbmVlZAordG8gZGlzYWJsZSB0aGUgX2xvY2FsXyBpbnRlcnJ1cHRzIC0gaXQncyBvayB0byB1c2Ugc3BpbmxvY2tzIGluIGludGVycnVwdHMKK29uIG90aGVyIENQVSdzLCBiZWNhdXNlIGFuIGludGVycnVwdCBvbiBhbm90aGVyIENQVSBkb2Vzbid0IGludGVycnVwdCB0aGUKK0NQVSB0aGF0IGhvbGRzIHRoZSBsb2NrLCBzbyB0aGUgbG9jay1ob2xkZXIgY2FuIGNvbnRpbnVlIGFuZCBldmVudHVhbGx5CityZWxlYXNlcyB0aGUgbG9jaykuIAorCitOb3RlIHRoYXQgeW91IGNhbiBiZSBjbGV2ZXIgd2l0aCByZWFkLXdyaXRlIGxvY2tzIGFuZCBpbnRlcnJ1cHRzLiBGb3IKK2V4YW1wbGUsIGlmIHlvdSBrbm93IHRoYXQgdGhlIGludGVycnVwdCBvbmx5IGV2ZXIgZ2V0cyBhIHJlYWQtbG9jaywgdGhlbgoreW91IGNhbiB1c2UgYSBub24taXJxIHZlcnNpb24gb2YgcmVhZCBsb2NrcyBldmVyeXdoZXJlIC0gYmVjYXVzZSB0aGV5Citkb24ndCBibG9jayBvbiBlYWNoIG90aGVyIChhbmQgdGh1cyB0aGVyZSBpcyBubyBkZWFkLWxvY2sgd3J0IGludGVycnVwdHMuIAorQnV0IHdoZW4geW91IGRvIHRoZSB3cml0ZS1sb2NrLCB5b3UgaGF2ZSB0byB1c2UgdGhlIGlycS1zYWZlIHZlcnNpb24uIAorCitGb3IgYW4gZXhhbXBsZSBvZiBiZWluZyBjbGV2ZXIgd2l0aCBydy1sb2Nrcywgc2VlIHRoZSAid2FpdHF1ZXVlX2xvY2siIAoraGFuZGxpbmcgaW4ga2VybmVsL3NjaGVkLmMgLSBub3RoaW5nIGV2ZXIgX2NoYW5nZXNfIGEgd2FpdC1xdWV1ZSBmcm9tCit3aXRoaW4gYW4gaW50ZXJydXB0LCB0aGV5IG9ubHkgcmVhZCB0aGUgcXVldWUgaW4gb3JkZXIgdG8ga25vdyB3aG9tIHRvCit3YWtlIHVwLiBTbyByZWFkLWxvY2tzIGFyZSBzYWZlICh3aGljaCBpcyBnb29kOiB0aGV5IGFyZSB2ZXJ5IGNvbW1vbgoraW5kZWVkKSwgd2hpbGUgd3JpdGUtbG9ja3MgbmVlZCB0byBwcm90ZWN0IHRoZW1zZWx2ZXMgYWdhaW5zdCBpbnRlcnJ1cHRzLgorCisJCUxpbnVzCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfYXBpX25vbnNlbnNlLnR4dCBiL0RvY3VtZW50YXRpb24vc3RhYmxlX2FwaV9ub25zZW5zZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlYTEzODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N0YWJsZV9hcGlfbm9uc2Vuc2UudHh0CkBAIC0wLDAgKzEsMTkzIEBACitUaGUgTGludXggS2VybmVsIERyaXZlciBJbnRlcmZhY2UKKyhhbGwgb2YgeW91ciBxdWVzdGlvbnMgYW5zd2VyZWQgYW5kIHRoZW4gc29tZSkKKworR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKworVGhpcyBpcyBiZWluZyB3cml0dGVuIHRvIHRyeSB0byBleHBsYWluIHdoeSBMaW51eCBkb2VzIG5vdCBoYXZlIGEgYmluYXJ5CitrZXJuZWwgaW50ZXJmYWNlLCBub3IgZG9lcyBpdCBoYXZlIGEgc3RhYmxlIGtlcm5lbCBpbnRlcmZhY2UuICBQbGVhc2UKK3JlYWxpemUgdGhhdCB0aGlzIGFydGljbGUgZGVzY3JpYmVzIHRoZSBfaW4ga2VybmVsXyBpbnRlcmZhY2VzLCBub3QgdGhlCitrZXJuZWwgdG8gdXNlcnNwYWNlIGludGVyZmFjZXMuICBUaGUga2VybmVsIHRvIHVzZXJzcGFjZSBpbnRlcmZhY2UgaXMKK3RoZSBvbmUgdGhhdCBhcHBsaWNhdGlvbiBwcm9ncmFtcyB1c2UsIHRoZSBzeXNjYWxsIGludGVyZmFjZS4gIFRoYXQKK2ludGVyZmFjZSBpcyBfdmVyeV8gc3RhYmxlIG92ZXIgdGltZSwgYW5kIHdpbGwgbm90IGJyZWFrLiAgSSBoYXZlIG9sZAorcHJvZ3JhbXMgdGhhdCB3ZXJlIGJ1aWx0IG9uIGEgcHJlIDAuOXNvbWV0aGluZyBrZXJuZWwgdGhhdCBzdGlsbCB3b3JrCitqdXN0IGZpbmUgb24gdGhlIGxhdGVzdCAyLjYga2VybmVsIHJlbGVhc2UuICBUaGlzIGludGVyZmFjZSBpcyB0aGUgb25lCit0aGF0IHVzZXJzIGFuZCBhcHBsaWNhdGlvbiBwcm9ncmFtbWVycyBjYW4gY291bnQgb24gYmVpbmcgc3RhYmxlLgorCisKK0V4ZWN1dGl2ZSBTdW1tYXJ5CistLS0tLS0tLS0tLS0tLS0tLQorWW91IHRoaW5rIHlvdSB3YW50IGEgc3RhYmxlIGtlcm5lbCBpbnRlcmZhY2UsIGJ1dCB5b3UgcmVhbGx5IGRvIG5vdCwgYW5kCit5b3UgZG9uJ3QgZXZlbiBrbm93IGl0LiAgV2hhdCB5b3Ugd2FudCBpcyBhIHN0YWJsZSBydW5uaW5nIGRyaXZlciwgYW5kCit5b3UgZ2V0IHRoYXQgb25seSBpZiB5b3VyIGRyaXZlciBpcyBpbiB0aGUgbWFpbiBrZXJuZWwgdHJlZS4gIFlvdSBhbHNvCitnZXQgbG90cyBvZiBvdGhlciBnb29kIGJlbmVmaXRzIGlmIHlvdXIgZHJpdmVyIGlzIGluIHRoZSBtYWluIGtlcm5lbAordHJlZSwgYWxsIG9mIHdoaWNoIGhhcyBtYWRlIExpbnV4IGludG8gc3VjaCBhIHN0cm9uZywgc3RhYmxlLCBhbmQgbWF0dXJlCitvcGVyYXRpbmcgc3lzdGVtIHdoaWNoIGlzIHRoZSByZWFzb24geW91IGFyZSB1c2luZyBpdCBpbiB0aGUgZmlyc3QKK3BsYWNlLgorCisKK0ludHJvCistLS0tLQorCitJdCdzIG9ubHkgdGhlIG9kZCBwZXJzb24gd2hvIHdhbnRzIHRvIHdyaXRlIGEga2VybmVsIGRyaXZlciB0aGF0IG5lZWRzCit0byB3b3JyeSBhYm91dCB0aGUgaW4ta2VybmVsIGludGVyZmFjZXMgY2hhbmdpbmcuICBGb3IgdGhlIG1ham9yaXR5IG9mCit0aGUgd29ybGQsIHRoZXkgbmVpdGhlciBzZWUgdGhpcyBpbnRlcmZhY2UsIG5vciBkbyB0aGV5IGNhcmUgYWJvdXQgaXQgYXQKK2FsbC4KKworRmlyc3Qgb2ZmLCBJJ20gbm90IGdvaW5nIHRvIGFkZHJlc3MgX2FueV8gbGVnYWwgaXNzdWVzIGFib3V0IGNsb3NlZAorc291cmNlLCBoaWRkZW4gc291cmNlLCBiaW5hcnkgYmxvYnMsIHNvdXJjZSB3cmFwcGVycywgb3IgYW55IG90aGVyIHRlcm0KK3RoYXQgZGVzY3JpYmVzIGtlcm5lbCBkcml2ZXJzIHRoYXQgZG8gbm90IGhhdmUgdGhlaXIgc291cmNlIGNvZGUKK3JlbGVhc2VkIHVuZGVyIHRoZSBHUEwuICBQbGVhc2UgY29uc3VsdCBhIGxhd3llciBpZiB5b3UgaGF2ZSBhbnkgbGVnYWwKK3F1ZXN0aW9ucywgSSdtIGEgcHJvZ3JhbW1lciBhbmQgaGVuY2UsIEknbSBqdXN0IGdvaW5nIHRvIGJlIGRlc2NyaWJpbmcKK3RoZSB0ZWNobmljYWwgaXNzdWVzIGhlcmUgKG5vdCB0byBtYWtlIGxpZ2h0IG9mIHRoZSBsZWdhbCBpc3N1ZXMsIHRoZXkKK2FyZSByZWFsLCBhbmQgeW91IGRvIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlbSBhdCBhbGwgdGltZXMuKQorCitTbywgdGhlcmUgYXJlIHR3byBtYWluIHRvcGljcyBoZXJlLCBiaW5hcnkga2VybmVsIGludGVyZmFjZXMgYW5kIHN0YWJsZQora2VybmVsIHNvdXJjZSBpbnRlcmZhY2VzLiAgVGhleSBib3RoIGRlcGVuZCBvbiBlYWNoIG90aGVyLCBidXQgd2Ugd2lsbAorZGlzY3VzcyB0aGUgYmluYXJ5IHN0dWZmIGZpcnN0IHRvIGdldCBpdCBvdXQgb2YgdGhlIHdheS4KKworCitCaW5hcnkgS2VybmVsIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Fzc3VtaW5nIHRoYXQgd2UgaGFkIGEgc3RhYmxlIGtlcm5lbCBzb3VyY2UgaW50ZXJmYWNlIGZvciB0aGUga2VybmVsLCBhCitiaW5hcnkgaW50ZXJmYWNlIHdvdWxkIG5hdHVyYWxseSBoYXBwZW4gdG9vLCByaWdodD8gIFdyb25nLiAgUGxlYXNlCitjb25zaWRlciB0aGUgZm9sbG93aW5nIGZhY3RzIGFib3V0IHRoZSBMaW51eCBrZXJuZWw6CisgIC0gRGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBDIGNvbXBpbGVyIHlvdSB1c2UsIGRpZmZlcmVudCBrZXJuZWwKKyAgICBkYXRhIHN0cnVjdHVyZXMgd2lsbCBjb250YWluIGRpZmZlcmVudCBhbGlnbm1lbnQgb2Ygc3RydWN0dXJlcywgYW5kCisgICAgcG9zc2libHkgaW5jbHVkZSBkaWZmZXJlbnQgZnVuY3Rpb25zIGluIGRpZmZlcmVudCB3YXlzIChwdXR0aW5nCisgICAgZnVuY3Rpb25zIGlubGluZSBvciBub3QuKSAgVGhlIGluZGl2aWR1YWwgZnVuY3Rpb24gb3JnYW5pemF0aW9uCisgICAgaXNuJ3QgdGhhdCBpbXBvcnRhbnQsIGJ1dCB0aGUgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlIHBhZGRpbmcgaXMKKyAgICB2ZXJ5IGltcG9ydGFudC4KKyAgLSBEZXBlbmRpbmcgb24gd2hhdCBrZXJuZWwgYnVpbGQgb3B0aW9ucyB5b3Ugc2VsZWN0LCBhIHdpZGUgcmFuZ2Ugb2YKKyAgICBkaWZmZXJlbnQgdGhpbmdzIGNhbiBiZSBhc3N1bWVkIGJ5IHRoZSBrZXJuZWw6CisgICAgICAtIGRpZmZlcmVudCBzdHJ1Y3R1cmVzIGNhbiBjb250YWluIGRpZmZlcmVudCBmaWVsZHMKKyAgICAgIC0gU29tZSBmdW5jdGlvbnMgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBhdCBhbGwsIChpLmUuIHNvbWUgbG9ja3MKKwljb21waWxlIGF3YXkgdG8gbm90aGluZyBmb3Igbm9uLVNNUCBidWlsZHMuKQorICAgICAgLSBQYXJhbWV0ZXIgcGFzc2luZyBvZiB2YXJpYWJsZXMgZnJvbSBmdW5jdGlvbiB0byBmdW5jdGlvbiBjYW4gYmUKKwlkb25lIGluIGRpZmZlcmVudCB3YXlzICh0aGUgQ09ORklHX1JFR1BBUk0gb3B0aW9uIGNvbnRyb2xzCisJdGhpcy4pCisgICAgICAtIE1lbW9yeSB3aXRoaW4gdGhlIGtlcm5lbCBjYW4gYmUgYWxpZ25lZCBpbiBkaWZmZXJlbnQgd2F5cywKKwlkZXBlbmRpbmcgb24gdGhlIGJ1aWxkIG9wdGlvbnMuCisgIC0gTGludXggcnVucyBvbiBhIHdpZGUgcmFuZ2Ugb2YgZGlmZmVyZW50IHByb2Nlc3NvciBhcmNoaXRlY3R1cmVzLgorICAgIFRoZXJlIGlzIG5vIHdheSB0aGF0IGJpbmFyeSBkcml2ZXJzIGZyb20gb25lIGFyY2hpdGVjdHVyZSB3aWxsIHJ1bgorICAgIG9uIGFub3RoZXIgYXJjaGl0ZWN0dXJlIHByb3Blcmx5LgorCitOb3cgYSBudW1iZXIgb2YgdGhlc2UgaXNzdWVzIGNhbiBiZSBhZGRyZXNzZWQgYnkgc2ltcGx5IGNvbXBpbGluZyB5b3VyCittb2R1bGUgZm9yIHRoZSBleGFjdCBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiwgdXNpbmcgdGhlIHNhbWUgZXhhY3QKK0MgY29tcGlsZXIgdGhhdCB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRoLiAgVGhpcyBpcyBzdWZmaWNpZW50IGlmIHlvdQord2FudCB0byBwcm92aWRlIGEgbW9kdWxlIGZvciBhIHNwZWNpZmljIHJlbGVhc2UgdmVyc2lvbiBvZiBhIHNwZWNpZmljCitMaW51eCBkaXN0cmlidXRpb24uICBCdXQgbXVsdGlwbHkgdGhhdCBzaW5nbGUgYnVpbGQgYnkgdGhlIG51bWJlciBvZgorZGlmZmVyZW50IExpbnV4IGRpc3RyaWJ1dGlvbnMgYW5kIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IHN1cHBvcnRlZAorcmVsZWFzZXMgb2YgdGhlIExpbnV4IGRpc3RyaWJ1dGlvbiBhbmQgeW91IHF1aWNrbHkgaGF2ZSBhIG5pZ2h0bWFyZSBvZgorZGlmZmVyZW50IGJ1aWxkIG9wdGlvbnMgb24gZGlmZmVyZW50IHJlbGVhc2VzLiAgQWxzbyByZWFsaXplIHRoYXQgZWFjaAorTGludXggZGlzdHJpYnV0aW9uIHJlbGVhc2UgY29udGFpbnMgYSBudW1iZXIgb2YgZGlmZmVyZW50IGtlcm5lbHMsIGFsbAordHVuZWQgdG8gZGlmZmVyZW50IGhhcmR3YXJlIHR5cGVzIChkaWZmZXJlbnQgcHJvY2Vzc29yIHR5cGVzIGFuZAorZGlmZmVyZW50IG9wdGlvbnMpLCBzbyBmb3IgZXZlbiBhIHNpbmdsZSByZWxlYXNlIHlvdSB3aWxsIG5lZWQgdG8gY3JlYXRlCittdWx0aXBsZSB2ZXJzaW9ucyBvZiB5b3VyIG1vZHVsZS4KKworVHJ1c3QgbWUsIHlvdSB3aWxsIGdvIGluc2FuZSBvdmVyIHRpbWUgaWYgeW91IHRyeSB0byBzdXBwb3J0IHRoaXMga2luZAorb2YgcmVsZWFzZSwgSSBsZWFybmVkIHRoaXMgdGhlIGhhcmQgd2F5IGEgbG9uZyB0aW1lIGFnby4uLgorCisKK1N0YWJsZSBLZXJuZWwgU291cmNlIEludGVyZmFjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIG11Y2ggbW9yZSAidm9sYXRpbGUiIHRvcGljIGlmIHlvdSB0YWxrIHRvIHBlb3BsZSB3aG8gdHJ5IHRvCitrZWVwIGEgTGludXgga2VybmVsIGRyaXZlciB0aGF0IGlzIG5vdCBpbiB0aGUgbWFpbiBrZXJuZWwgdHJlZSB1cCB0bworZGF0ZSBvdmVyIHRpbWUuCisKK0xpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBpcyBjb250aW51b3VzIGFuZCBhdCBhIHJhcGlkIHBhY2UsIG5ldmVyCitzdG9wcGluZyB0byBzbG93IGRvd24uICBBcyBzdWNoLCB0aGUga2VybmVsIGRldmVsb3BlcnMgZmluZCBidWdzIGluCitjdXJyZW50IGludGVyZmFjZXMsIG9yIGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaW5ncy4gIElmIHRoZXkgZG8KK3RoYXQsIHRoZXkgdGhlbiBmaXggdGhlIGN1cnJlbnQgaW50ZXJmYWNlcyB0byB3b3JrIGJldHRlci4gIFdoZW4gdGhleSBkbworc28sIGZ1bmN0aW9uIG5hbWVzIG1heSBjaGFuZ2UsIHN0cnVjdHVyZXMgbWF5IGdyb3cgb3Igc2hyaW5rLCBhbmQKK2Z1bmN0aW9uIHBhcmFtZXRlcnMgbWF5IGJlIHJld29ya2VkLiAgSWYgdGhpcyBoYXBwZW5zLCBhbGwgb2YgdGhlCitpbnN0YW5jZXMgb2Ygd2hlcmUgdGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCBhcmUgZml4ZWQgdXAKK2F0IHRoZSBzYW1lIHRpbWUsIGVuc3VyaW5nIHRoYXQgZXZlcnl0aGluZyBjb250aW51ZXMgdG8gd29yayBwcm9wZXJseS4KKworQXMgYSBzcGVjaWZpYyBleGFtcGxlcyBvZiB0aGlzLCB0aGUgaW4ta2VybmVsIFVTQiBpbnRlcmZhY2VzIGhhdmUKK3VuZGVyZ29uZSBhdCBsZWFzdCB0aHJlZSBkaWZmZXJlbnQgcmV3b3JrcyBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGlzCitzdWJzeXN0ZW0uICBUaGVzZSByZXdvcmtzIHdlcmUgZG9uZSB0byBhZGRyZXNzIGEgbnVtYmVyIG9mIGRpZmZlcmVudAoraXNzdWVzOgorICAtIEEgY2hhbmdlIGZyb20gYSBzeW5jaHJvbm91cyBtb2RlbCBvZiBkYXRhIHN0cmVhbXMgdG8gYW4gYXN5bmNocm9ub3VzCisgICAgb25lLiAgVGhpcyByZWR1Y2VkIHRoZSBjb21wbGV4aXR5IG9mIGEgbnVtYmVyIG9mIGRyaXZlcnMgYW5kCisgICAgaW5jcmVhc2VkIHRoZSB0aHJvdWdocHV0IG9mIGFsbCBVU0IgZHJpdmVycyBzdWNoIHRoYXQgd2UgYXJlIG5vdworICAgIHJ1bm5pbmcgYWxtb3N0IGFsbCBVU0IgZGV2aWNlcyBhdCB0aGVpciBtYXhpbXVtIHNwZWVkIHBvc3NpYmxlLgorICAtIEEgY2hhbmdlIHdhcyBtYWRlIGluIHRoZSB3YXkgZGF0YSBwYWNrZXRzIHdlcmUgYWxsb2NhdGVkIGZyb20gdGhlCisgICAgVVNCIGNvcmUgYnkgVVNCIGRyaXZlcnMgc28gdGhhdCBhbGwgZHJpdmVycyBub3cgbmVlZGVkIHRvIHByb3ZpZGUKKyAgICBtb3JlIGluZm9ybWF0aW9uIHRvIHRoZSBVU0IgY29yZSB0byBmaXggYSBudW1iZXIgb2YgZG9jdW1lbnRlZAorICAgIGRlYWRsb2Nrcy4KKworVGhpcyBpcyBpbiBzdGFyayBjb250cmFzdCB0byBhIG51bWJlciBvZiBjbG9zZWQgc291cmNlIG9wZXJhdGluZyBzeXN0ZW1zCit3aGljaCBoYXZlIGhhZCB0byBtYWludGFpbiB0aGVpciBvbGRlciBVU0IgaW50ZXJmYWNlcyBvdmVyIHRpbWUuICBUaGlzCitwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgbmV3IGRldmVsb3BlcnMgdG8gYWNjaWRlbnRhbGx5IHVzZSB0aGUgb2xkCitpbnRlcmZhY2VzIGFuZCBkbyB0aGluZ3MgaW4gaW1wcm9wZXIgd2F5cywgY2F1c2luZyB0aGUgc3RhYmlsaXR5IG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSB0byBzdWZmZXIuCisKK0luIGJvdGggb2YgdGhlc2UgaW5zdGFuY2VzLCBhbGwgZGV2ZWxvcGVycyBhZ3JlZWQgdGhhdCB0aGVzZSB3ZXJlCitpbXBvcnRhbnQgY2hhbmdlcyB0aGF0IG5lZWRlZCB0byBiZSBtYWRlLCBhbmQgdGhleSB3ZXJlIG1hZGUsIHdpdGgKK3JlbGF0aXZlbHkgbGl0dGxlIHBhaW4uICBJZiBMaW51eCBoYWQgdG8gZW5zdXJlIHRoYXQgaXQgcHJlc2VydmUgYQorc3RhYmxlIHNvdXJjZSBpbnRlcmZhY2UsIGEgbmV3IGludGVyZmFjZSB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCwgYW5kCit0aGUgb2xkZXIsIGJyb2tlbiBvbmUgd291bGQgaGF2ZSBoYWQgdG8gYmUgbWFpbnRhaW5lZCBvdmVyIHRpbWUsIGxlYWRpbmcKK3RvIGV4dHJhIHdvcmsgZm9yIHRoZSBVU0IgZGV2ZWxvcGVycy4gIFNpbmNlIGFsbCBMaW51eCBVU0IgZGV2ZWxvcGVycyBkbwordGhlaXIgd29yayBvbiB0aGVpciBvd24gdGltZSwgYXNraW5nIHByb2dyYW1tZXJzIHRvIGRvIGV4dHJhIHdvcmsgZm9yIG5vCitnYWluLCBmb3IgZnJlZSwgaXMgbm90IGEgcG9zc2liaWxpdHkuCisKK1NlY3VyaXR5IGlzc3VlcyBhcmUgYWxzbyBhIHZlcnkgaW1wb3J0YW50IGZvciBMaW51eC4gIFdoZW4gYQorc2VjdXJpdHkgaXNzdWUgaXMgZm91bmQsIGl0IGlzIGZpeGVkIGluIGEgdmVyeSBzaG9ydCBhbW91bnQgb2YgdGltZS4gIEEKK251bWJlciBvZiB0aW1lcyB0aGlzIGhhcyBjYXVzZWQgaW50ZXJuYWwga2VybmVsIGludGVyZmFjZXMgdG8gYmUKK3Jld29ya2VkIHRvIHByZXZlbnQgdGhlIHNlY3VyaXR5IHByb2JsZW0gZnJvbSBvY2N1cnJpbmcuICBXaGVuIHRoaXMKK2hhcHBlbnMsIGFsbCBkcml2ZXJzIHRoYXQgdXNlIHRoZSBpbnRlcmZhY2VzIHdlcmUgYWxzbyBmaXhlZCBhdCB0aGUKK3NhbWUgdGltZSwgZW5zdXJpbmcgdGhhdCB0aGUgc2VjdXJpdHkgcHJvYmxlbSB3YXMgZml4ZWQgYW5kIGNvdWxkIG5vdAorY29tZSBiYWNrIGF0IHNvbWUgZnV0dXJlIHRpbWUgYWNjaWRlbnRhbGx5LiAgSWYgdGhlIGludGVybmFsIGludGVyZmFjZXMKK3dlcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlLCBmaXhpbmcgdGhpcyBraW5kIG9mIHNlY3VyaXR5IHByb2JsZW0gYW5kCitpbnN1cmluZyB0aGF0IGl0IGNvdWxkIG5vdCBoYXBwZW4gYWdhaW4gd291bGQgbm90IGJlIHBvc3NpYmxlLgorCitLZXJuZWwgaW50ZXJmYWNlcyBhcmUgY2xlYW5lZCB1cCBvdmVyIHRpbWUuICBJZiB0aGVyZSBpcyBubyBvbmUgdXNpbmcgYQorY3VycmVudCBpbnRlcmZhY2UsIGl0IGlzIGRlbGV0ZWQuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUga2VybmVsIHJlbWFpbnMKK2FzIHNtYWxsIGFzIHBvc3NpYmxlLCBhbmQgdGhhdCBhbGwgcG90ZW50aWFsIGludGVyZmFjZXMgYXJlIHRlc3RlZCBhcword2VsbCBhcyB0aGV5IGNhbiBiZSAodW51c2VkIGludGVyZmFjZXMgYXJlIHByZXR0eSBtdWNoIGltcG9zc2libGUgdG8KK3Rlc3QgZm9yIHZhbGlkaXR5LikKKworCitXaGF0IHRvIGRvCistLS0tLS0tLS0tCisKK1NvLCBpZiB5b3UgaGF2ZSBhIExpbnV4IGtlcm5lbCBkcml2ZXIgdGhhdCBpcyBub3QgaW4gdGhlIG1haW4ga2VybmVsCit0cmVlLCB3aGF0IGFyZSB5b3UsIGEgZGV2ZWxvcGVyLCBzdXBwb3NlZCB0byBkbz8gIFJlbGVhc2luZyBhIGJpbmFyeQorZHJpdmVyIGZvciBldmVyeSBkaWZmZXJlbnQga2VybmVsIHZlcnNpb24gZm9yIGV2ZXJ5IGRpc3RyaWJ1dGlvbiBpcyBhCituaWdodG1hcmUsIGFuZCB0cnlpbmcgdG8ga2VlcCB1cCB3aXRoIGFuIGV2ZXIgY2hhbmdpbmcga2VybmVsIGludGVyZmFjZQoraXMgYWxzbyBhIHJvdWdoIGpvYi4KKworU2ltcGxlLCBnZXQgeW91ciBrZXJuZWwgZHJpdmVyIGludG8gdGhlIG1haW4ga2VybmVsIHRyZWUgKHJlbWVtYmVyIHdlCithcmUgdGFsa2luZyBhYm91dCBHUEwgcmVsZWFzZWQgZHJpdmVycyBoZXJlLCBpZiB5b3VyIGNvZGUgZG9lc24ndCBmYWxsCit1bmRlciB0aGlzIGNhdGVnb3J5LCBnb29kIGx1Y2ssIHlvdSBhcmUgb24geW91ciBvd24gaGVyZSwgeW91IGxlZWNoCis8aW5zZXJ0IGxpbmsgdG8gbGVlY2ggY29tbWVudCBmcm9tIEFuZHJldyBhbmQgTGludXMgaGVyZT4uKSAgSWYgeW91cgorZHJpdmVyIGlzIGluIHRoZSB0cmVlLCBhbmQgYSBrZXJuZWwgaW50ZXJmYWNlIGNoYW5nZXMsIGl0IHdpbGwgYmUgZml4ZWQKK3VwIGJ5IHRoZSBwZXJzb24gd2hvIGRpZCB0aGUga2VybmVsIGNoYW5nZSBpbiB0aGUgZmlyc3QgcGxhY2UuICBUaGlzCitlbnN1cmVzIHRoYXQgeW91ciBkcml2ZXIgaXMgYWx3YXlzIGJ1aWxkYWJsZSwgYW5kIHdvcmtzIG92ZXIgdGltZSwgd2l0aAordmVyeSBsaXR0bGUgZWZmb3J0IG9uIHlvdXIgcGFydC4KKworVGhlIHZlcnkgZ29vZCBzaWRlIGVmZmVjdHMgb2YgaGF2aW5nIHlvdXIgZHJpdmVyIGluIHRoZSBtYWluIGtlcm5lbCB0cmVlCithcmU6CisgIC0gVGhlIHF1YWxpdHkgb2YgdGhlIGRyaXZlciB3aWxsIHJpc2UgYXMgdGhlIG1haW50ZW5hbmNlIGNvc3RzICh0byB0aGUKKyAgICBvcmlnaW5hbCBkZXZlbG9wZXIpIHdpbGwgZGVjcmVhc2UuCisgIC0gT3RoZXIgZGV2ZWxvcGVycyB3aWxsIGFkZCBmZWF0dXJlcyB0byB5b3VyIGRyaXZlci4KKyAgLSBPdGhlciBwZW9wbGUgd2lsbCBmaW5kIGFuZCBmaXggYnVncyBpbiB5b3VyIGRyaXZlci4KKyAgLSBPdGhlciBwZW9wbGUgd2lsbCBmaW5kIHR1bmluZyBvcHBvcnR1bml0aWVzIGluIHlvdXIgZHJpdmVyLgorICAtIE90aGVyIHBlb3BsZSB3aWxsIHVwZGF0ZSB0aGUgZHJpdmVyIGZvciB5b3Ugd2hlbiBleHRlcm5hbCBpbnRlcmZhY2UKKyAgICBjaGFuZ2VzIHJlcXVpcmUgaXQuCisgIC0gVGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IGdldHMgc2hpcHBlZCBpbiBhbGwgTGludXggZGlzdHJpYnV0aW9ucworICAgIHdpdGhvdXQgaGF2aW5nIHRvIGFzayB0aGUgZGlzdHJvcyB0byBhZGQgaXQuCisgICAgCitBcyBMaW51eCBzdXBwb3J0cyBhIGxhcmdlciBudW1iZXIgb2YgZGlmZmVyZW50IGRldmljZXMgIm91dCBvZiB0aGUgYm94IgordGhhbiBhbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbSwgYW5kIGl0IHN1cHBvcnRzIHRoZXNlIGRldmljZXMgb24gbW9yZQorZGlmZmVyZW50IHByb2Nlc3NvciBhcmNoaXRlY3R1cmVzIHRoYW4gYW55IG90aGVyIG9wZXJhdGluZyBzeXN0ZW0sIHRoaXMKK3Byb3ZlbiB0eXBlIG9mIGRldmVsb3BtZW50IG1vZGVsIG11c3QgYmUgZG9pbmcgc29tZXRoaW5nIHJpZ2h0IDopCisKKworCistLS0tLS0KKworVGhhbmtzIHRvIFJhbmR5IER1bmxhcCwgQW5kcmV3IE1vcnRvbiwgRGF2aWQgQnJvd25lbGwsIEhhbm5hIExpbmRlciwKK1JvYmVydCBMb3ZlLCBhbmQgTmlzaGFudGggQXJhdmFtdWRhbiBmb3IgdGhlaXIgcmV2aWV3IGFuZCBjb21tZW50cyBvbgorZWFybHkgZHJhZnRzIG9mIHRoaXMgcGFwZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N0YWxsaW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc3RhbGxpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDkwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N0YWxsaW9uLnR4dApAQCAtMCwwICsxLDM5MiBAQAorKiBOT1RFIC0gVGhpcyBpcyBhbiB1bm1haW50YWluZWQgZHJpdmVyLiAgTGFudHJvbml4LCB3aGljaCBib3VnaHQgU3RhbGxpb24KK3RlY2hub2xvZ2llcywgaXMgbm90IGFjdGl2ZSBpbiBkcml2ZXIgbWFpbnRlbmFuY2UsIGFuZCB0aGV5IGhhdmUgbm8gaW5mb3JtYXRpb24KK29uIHdoZW4gb3IgaWYgdGhleSB3aWxsIGhhdmUgYSAyLjYgZHJpdmVyLgorCitKYW1lcyBOZWxzb24gPGphbWVzNDc2NUBnbWFpbC5jb20+IC0gMTItMTItMjAwNAorCitTdGFsbGlvbiBNdWx0aXBvcnQgU2VyaWFsIERyaXZlciBSZWFkbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSwgIFN0YWxsaW9uIFRlY2hub2xvZ2llcy4KKworVmVyc2lvbjogICA1LjUuMQorRGF0ZTogICAgICAyOE1BUjk5CisKKworCisxLiBJTlRST0RVQ1RJT04KKworVGhlcmUgYXJlIHR3byBkcml2ZXJzIHRoYXQgd29yayB3aXRoIHRoZSBkaWZmZXJlbnQgZmFtaWxpZXMgb2YgU3RhbGxpb24KK211bHRpcG9ydCBzZXJpYWwgYm9hcmRzLiBPbmUgaXMgZm9yIHRoZSBTdGFsbGlvbiBzbWFydCBib2FyZHMgLSB0aGF0IGlzCitFYXN5SU8sIEVhc3lDb25uZWN0aW9uIDgvMzIgYW5kIEVhc3lDb25uZWN0aW9uIDgvNjQtUENJLCB0aGUgb3RoZXIgZm9yCit0aGUgdHJ1ZSBTdGFsbGlvbiBpbnRlbGxpZ2VudCBtdWx0aXBvcnQgYm9hcmRzIC0gRWFzeUNvbm5lY3Rpb24gOC82NAorKElTQSwgRUlTQSwgTUNBKSwgRWFzeUNvbm5lY3Rpb24vUkEtUENJLCBPTmJvYXJkIGFuZCBCcnVtYnkuCisKK0lmIHlvdSBhcmUgdXNpbmcgYW55IG9mIHRoZSBTdGFsbGlvbiBpbnRlbGxpZ2VudCBtdWx0aXBvcnQgYm9hcmRzIChCcnVtYnksCitPTmJvYXJkLCBFYXN5Q29ubmVjdGlvbiA4LzY0IChJU0EsIEVJU0EsIE1DQSksIEVhc3lDb25uZWN0aW9uL1JBLVBDSSkgd2l0aAorTGludXggeW91IHdpbGwgbmVlZCB0byBnZXQgdGhlIGRyaXZlciB1dGlsaXR5IHBhY2thZ2UuICBUaGlzIGNvbnRhaW5zIGEKK2Zpcm13YXJlIGxvYWRlciBhbmQgdGhlIGZpcm13YXJlIGltYWdlcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgZGV2aWNlcyBvcGVyYXRlLgorCitUaGUgU3RhbGxpb24gVGVjaG5vbG9naWVzIGZ0cCBzaXRlLCBmdHAuc3RhbGxpb24uY29tLCB3aWxsIGFsd2F5cyBoYXZlCit0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciB1dGlsaXR5IHBhY2thZ2UuCisKK2Z0cDovL2Z0cC5zdGFsbGlvbi5jb20vZHJpdmVycy9hdGE1L0xpbnV4L2F0YS1saW51eC01NTAudGFyLmd6CisKK0FzIG9mIHRoZSBwcmludGluZyBvZiB0aGlzIGRvY3VtZW50IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyCit1dGlsaXR5IHBhY2thZ2UgaXMgNS41LjAuIElmIGEgbGF0ZXIgdmVyc2lvbiBpcyBub3cgYXZhaWxhYmxlIHRoZW4geW91CitzaG91bGQgdXNlIHRoZSBsYXRlc3QgdmVyc2lvbi4KKworSWYgeW91IGFyZSB1c2luZyB0aGUgRWFzeUlPLCBFYXN5Q29ubmVjdGlvbiA4LzMyIG9yIEVhc3lDb25uZWN0aW9uIDgvNjQtUENJCitib2FyZHMgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0aGlzIHBhY2thZ2UsIGFsdGhvdWdoIGl0IGRvZXMgaGF2ZSBhIHNlcmlhbCBzdGF0cworZGlzcGxheSBwcm9ncmFtLgorCitJZiB5b3UgcmVxdWlyZSBESVAgc3dpdGNoIHNldHRpbmdzLCBFSVNBIG9yIE1DQSBjb25maWd1cmF0aW9uIGZpbGVzLCBvciBhbnkKK290aGVyIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gU3RhbGxpb24gYm9hcmRzIHRoZW4gaGF2ZSBhIGxvb2sgYXQgU3RhbGxpb24ncword2ViIHBhZ2VzIGF0IGh0dHA6Ly93d3cuc3RhbGxpb24uY29tLgorCisKKworMi4gSU5TVEFMTEFUSU9OCisKK1RoZSBkcml2ZXJzIGNhbiBiZSB1c2VkIGFzIGxvYWRhYmxlIG1vZHVsZXMgb3IgY29tcGlsZWQgaW50byB0aGUga2VybmVsLgorWW91IGNhbiBjaG9vc2Ugd2hpY2ggd2hlbiBkb2luZyBhICJjb25maWciIG9uIHRoZSBrZXJuZWwuCisKK0FsbCBJU0EsIEVJU0EgYW5kIE1DQSBib2FyZHMgdGhhdCB5b3Ugd2FudCB0byB1c2UgbmVlZCB0byBiZSBjb25maWd1cmVkIGludG8KK3RoZSBkcml2ZXIocykuIEFsbCBQQ0kgYm9hcmRzIHdpbGwgYmUgYXV0b21hdGljYWxseSBkZXRlY3RlZCB3aGVuIHlvdSBsb2FkCit0aGUgZHJpdmVyIC0gc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBlbnRlcmVkIGludG8gdGhlIGRyaXZlcihzKQorY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIE5vdGUgdGhhdCBrZXJuZWwgUENJIHN1cHBvcnQgaXMgcmVxdWlyZWQgdG8gdXNlIFBDSQorYm9hcmRzLgorCitUaGVyZSBhcmUgdHdvIG1ldGhvZHMgb2YgY29uZmlndXJpbmcgSVNBLCBFSVNBIGFuZCBNQ0EgYm9hcmRzIGludG8gdGhlIGRyaXZlcnMuCitJZiB1c2luZyB0aGUgZHJpdmVyIGFzIGEgbG9hZGFibGUgbW9kdWxlIHRoZW4gdGhlIHNpbXBsZXN0IG1ldGhvZCBpcyB0byBwYXNzCit0aGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYXMgbW9kdWxlIGFyZ3VtZW50cy4gVGhlIG90aGVyIG1ldGhvZCBpcyB0byBtb2RpZnkKK3RoZSBkcml2ZXIgc291cmNlIHRvIGFkZCBjb25maWd1cmF0aW9uIGxpbmVzIGZvciBlYWNoIGJvYXJkIGluIHVzZS4KKworSWYgeW91IGhhdmUgcHJlLWJ1aWx0IFN0YWxsaW9uIGRyaXZlciBtb2R1bGVzIHRoZW4gdGhlIG1vZHVsZSBhcmd1bWVudAorY29uZmlndXJhdGlvbiBtZXRob2Qgc2hvdWxkIGJlIHVzZWQuIEEgbG90IG9mIExpbnV4IGRpc3RyaWJ1dGlvbnMgY29tZSB3aXRoCitwcmUtYnVpbHQgZHJpdmVyIG1vZHVsZXMgaW4gL2xpYi9tb2R1bGVzL1guWS5aL21pc2MgZm9yIHRoZSBrZXJuZWwgaW4gdXNlLgorVGhhdCBtYWtlcyB0aGluZ3MgcHJldHR5IHNpbXBsZSB0byBnZXQgZ29pbmcuCisKKworMi4xIE1PRFVMRSBEUklWRVIgQ09ORklHVVJBVElPTjoKKworVGhlIHNpbXBsZXN0IGNvbmZpZ3VyYXRpb24gZm9yIG1vZHVsZXMgaXMgdG8gdXNlIHRoZSBtb2R1bGUgbG9hZCBhcmd1bWVudHMKK3RvIGNvbmZpZ3VyZSBhbnkgSVNBLCBFSVNBIG9yIE1DQSBib2FyZHMuIFBDSSBib2FyZHMgYXJlIGF1dG9tYXRpY2FsbHkKK2RldGVjdGVkLCBzbyBkbyBub3QgbmVlZCBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGF0IGFsbC4KKworSWYgdXNpbmcgRWFzeUlPLCBFYXN5Q29ubmVjdGlvbiA4LzMyIElTQSBvciBNQ0EsIG9yIEVhc3lDb25uZWN0aW9uIDgvNjMtUENJCitib2FyZHMgdGhlbiB1c2UgdGhlICJzdGFsbGlvbiIgZHJpdmVyIG1vZHVsZSwgT3RoZXJ3aXNlIGlmIHlvdSBhcmUgdXNpbmcKK2FuIEVhc3lDb25uZWN0aW9uIDgvNjQgSVNBLCBFSVNBIG9yIE1DQSwgRWFzeUNvbm5lY3Rpb24vUkEtUENJLCBPTmJvYXJkLAorQnJ1bWJ5IG9yIG9yaWdpbmFsIFN0YWxsaW9uIGJvYXJkIHRoZW4gdXNlIHRoZSAiaXN0YWxsaW9uIiBkcml2ZXIgbW9kdWxlLgorCitUeXBpY2FsbHkgdG8gbG9hZCB1cCB0aGUgc21hcnQgYm9hcmQgZHJpdmVyIHVzZToKKworICAgIG1vZHByb2JlIHN0YWxsaW9uCisKK1RoaXMgd2lsbCBsb2FkIHRoZSBFYXN5SU8gYW5kIEVhc3lDb25uZWN0aW9uIDgvMzIgZHJpdmVyLiBJdCB3aWxsIG91dHB1dCBhCittZXNzYWdlIHRvIHNheSB0aGF0IGl0IGxvYWRlZCBhbmQgcHJpbnQgdGhlIGRyaXZlciB2ZXJzaW9uIG51bWJlci4gSXQgd2lsbAorYWxzbyBwcmludCBvdXQgd2hldGhlciBpdCBmb3VuZCB0aGUgY29uZmlndXJlZCBib2FyZHMgb3Igbm90LiBUaGVzZSBtZXNzYWdlcworbWF5IG5vdCBhcHBlYXIgb24gdGhlIGNvbnNvbGUsIGJ1dCB0eXBpY2FsbHkgYXJlIGFsd2F5cyBsb2dnZWQgdG8KKy92YXIvYWRtL21lc3NhZ2VzIG9yIC92YXIvbG9nL3N5c2xvZyBmaWxlcyAtIGRlcGVuZGluZyBvbiBob3cgdGhlIGtsb2dkIGFuZAorc3lzbG9nZCBkYWVtb25zIGFyZSBzZXR1cCBvbiB5b3VyIHN5c3RlbS4KKworVG8gbG9hZCB0aGUgaW50ZWxsaWdlbnQgYm9hcmQgZHJpdmVyIHVzZToKKworICAgIG1vZHByb2JlIGlzdGFsbGlvbgorCitJdCB3aWxsIG91dHB1dCBzaW1pbGFyIG1lc3NhZ2VzIHRvIHRoZSBzbWFydCBib2FyZCBkcml2ZXIuCisKK0lmIG5vdCB1c2luZyBhbiBhdXRvLWRldGVjdGFibGUgYm9hcmQgdHlwZSAodGhhdCBpcyBhIFBDSSBib2FyZCkgdGhlbiB5b3UKK3dpbGwgYWxzbyBuZWVkIHRvIHN1cHBseSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIHRoZSBtb2Rwcm9iZSBjb21tYW5kCit3aGVuIGxvYWRpbmcgdGhlIGRyaXZlci4gVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGUgY29uZmlndXJhdGlvbiBhcmd1bWVudCBpcworCisgICAgYm9hcmQ/PTxuYW1lPlssPGlvYWRkcj5bLDxhZGRyPl1bLDxpcnE+XV0KKword2hlcmU6CisKKyAgICBib2FyZD8gIC0tIHNwZWNpZmllcyB0aGUgYXJiaXRyYXJ5IGJvYXJkIG51bWJlciBvZiB0aGlzIGJvYXJkLAorICAgICAgICAgICAgICAgY2FuIGJlIGluIHRoZSByYW5nZSAwIHRvIDMuCisKKyAgICBuYW1lICAgIC0tIHRleHR1YWwgbmFtZSBvZiB0aGlzIGJvYXJkLiBUaGUgYm9hcmQgbmFtZSBpcyB0aGUgY29tbW9uCisgICAgICAgICAgICAgICBib2FyZCBuYW1lLCBvciBhbnkgInNob3J0ZW5lZCIgdmVyc2lvbiBvZiB0aGF0LiBUaGUgYm9hcmQKKyAgICAgICAgICAgICAgIHR5cGUgbnVtYmVyIG1heSBhbHNvIGJlIHVzZWQgaGVyZS4KKworICAgIGlvYWRkciAgLS0gc3BlY2lmaWVzIHRoZSBJL08gYWRkcmVzcyBvZiB0aGlzIGJvYXJkLiBUaGlzIGFyZ3VtZW50IGlzCisgICAgICAgICAgICAgICBvcHRpb25hbCwgYnV0IHNob3VsZCBnZW5lcmFsbHkgYmUgc3BlY2lmaWVkLgorCisgICAgYWRkciAgICAtLSBvcHRpb25hbCBzZWNvbmQgYWRkcmVzcyBhcmd1bWVudC4gU29tZSBib2FyZCB0eXBlcyByZXF1aXJlCisgICAgICAgICAgICAgICBhIHNlY29uZCBJL08gYWRkcmVzcywgc29tZSByZXF1aXJlIGEgbWVtb3J5IGFkZHJlc3MuIFRoZQorICAgICAgICAgICAgICAgZXhhY3QgbWVhbmluZyBvZiB0aGlzIGFyZ3VtZW50IGRlcGVuZHMgb24gdGhlIGJvYXJkIHR5cGUuCisKKyAgICBpcnEgICAgIC0tIG9wdGlvbmFsIElSUSBsaW5lIHVzZWQgYnkgdGhpcyBib2FyZC4KKworVXAgdG8gNCBib2FyZCBjb25maWd1cmF0aW9uIGFyZ3VtZW50cyBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZSBsb2FkIGxpbmUuCitIZXJlIGlzIHNvbWUgZXhhbXBsZXM6CisKKyAgICBtb2Rwcm9iZSBzdGFsbGlvbiBib2FyZDA9ZWFzeWlvLDB4MmEwLDUKKworVGhpcyBjb25maWd1cmVzIGFuIEVhc3lJTyBib2FyZCBhcyBib2FyZCAwIGF0IEkvTyBhZGRyZXNzIDB4MmEwIGFuZCBJUlEgNS4KKworICAgIG1vZHByb2JlIGlzdGFsbGlvbiBib2FyZDM9ZWM4LzY0LDB4MmMwLDB4Y2MwMDAKKworVGhpcyBjb25maWd1cmVzIGFuIEVhc3lDb25uZWN0aW9uIDgvNjQgSVNBIGFzIGJvYXJkIDMgYXQgSS9PIGFkZHJlc3MgMHgyYzAgYXQKK21lbW9yeSBhZGRyZXNzIDB4Y2MwMDAuCisKKyAgICBtb2Rwcm9iZSBzdGFsbGlvbiBib2FyZDE9ZWM4LzMyLWF0LDB4MmEwLDB4MjgwLDEwCisKK1RoaXMgY29uZmlndXJlcyBhbiBFYXN5Q29ubmVjdGlvbiA4LzMyIElTQSBib2FyZCBhdCBwcmltYXJ5IEkvTyBhZGRyZXNzIDB4MmEwLAorc2Vjb25kYXJ5IGFkZHJlc3MgMHgyODAgYW5kIElSUSAxMC4KKworWW91IHdpbGwgcHJvYmFibHkgd2FudCB0byBlbnRlciB0aGlzIG1vZHVsZSBsb2FkIGFuZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCitpbnRvIHlvdXIgc3lzdGVtIHN0YXJ0dXAgc2NyaXB0cyBzbyB0aGF0IHRoZSBkcml2ZXJzIGFyZSBsb2FkZWQgYW5kIGNvbmZpZ3VyZWQKK29uIGVhY2ggc3lzdGVtIGJvb3QuIFR5cGljYWxseSB0aGUgc3RhcnQgdXAgc2NyaXB0IHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlCisvZXRjL21vZHByb2JlLmNvbmYuCisKKworMi4yIFNUQVRJQyBEUklWRVIgQ09ORklHVVJBVElPTjoKKworRm9yIHN0YXRpYyBkcml2ZXIgY29uZmlndXJhdGlvbiB5b3UgbmVlZCB0byBtb2RpZnkgdGhlIGRyaXZlciBzb3VyY2UgY29kZS4KK0VudGVyaW5nIElTQSwgRUlTQSBhbmQgTUNBIGJvYXJkcyBpbnRvIHRoZSBkcml2ZXIocykgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKK2ludm9sdmVzIGVkaXRpbmcgdGhlIGRyaXZlcihzKSBzb3VyY2UgZmlsZS4gSXQncyBwcmV0dHkgZWFzeSBpZiB5b3UgZm9sbG93Cit0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93LiBCb3RoIGRyaXZlcnMgY2FuIHN1cHBvcnQgdXAgdG8gNCBib2FyZHMuIFRoZSBzbWFydAorY2FyZCBkcml2ZXIgKHRoZSBzdGFsbGlvbi5jIGRyaXZlcikgc3VwcG9ydHMgYW55IGNvbWJpbmF0aW9uIG9mIEVhc3lJTyBhbmQKK0Vhc3lDb25uZWN0aW9uIDgvMzIgYm9hcmRzICh1cCB0byBhIHRvdGFsIG9mIDQpLiBUaGUgaW50ZWxsaWdlbnQgZHJpdmVyCitzdXBwb3J0cyBhbnkgY29tYmluYXRpb24gb2YgT05ib2FyZHMsIEJydW1ieXMsIFN0YWxsaW9ucyBhbmQgRWFzeUNvbm5lY3Rpb24KKzgvNjQgKElTQSBhbmQgRUlTQSkgYm9hcmRzICh1cCB0byBhIHRvdGFsIG9mIDQpLgorCitUbyBzZXQgdXAgdGhlIGRyaXZlcihzKSBmb3IgdGhlIGJvYXJkcyB0aGF0IHlvdSB3YW50IHRvIHVzZSB5b3UgbmVlZCB0bworZWRpdCB0aGUgYXBwcm9wcmlhdGUgZHJpdmVyIGZpbGUgYW5kIGFkZCBjb25maWd1cmF0aW9uIGVudHJpZXMuCisKK0lmIHVzaW5nIEVhc3lJTyBvciBFYXN5Q29ubmVjdGlvbiA4LzMyIElTQSBvciBNQ0EgYm9hcmRzLAorICAgSW4gZHJpdmVycy9jaGFyL3N0YWxsaW9uLmM6CisgICAgICAtIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN0bF9icmRjb25mIGFycmF5IChvZiBzdHJ1Y3R1cmVzKQorICAgICAgICBuZWFyIHRoZSB0b3Agb2YgdGhlIGZpbGUKKyAgICAgIC0gbW9kaWZ5IHRoaXMgdG8gbWF0Y2ggdGhlIGJvYXJkcyB5b3UgYXJlIGdvaW5nIHRvIGluc3RhbGwKKwkodGhlIGNvbW1lbnRzIGJlZm9yZSB0aGlzIHN0cnVjdHVyZSBzaG91bGQgaGVscCkKKyAgICAgIC0gc2F2ZSBhbmQgZXhpdAorCitJZiB1c2luZyBPTmJvYXJkLCBCcnVtYnksIFN0YWxsaW9uIG9yIEVhc3lDb25uZWN0aW9uIDgvNjQgKElTQSBvciBFSVNBKQorYm9hcmRzLAorICAgSW4gZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jOgorICAgICAgLSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzdGxpX2JyZGNvbmYgYXJyYXkgKG9mIHN0cnVjdHVyZXMpCisgICAgICAgIG5lYXIgdGhlIHRvcCBvZiB0aGUgZmlsZQorICAgICAgLSBtb2RpZnkgdGhpcyB0byBtYXRjaCB0aGUgYm9hcmRzIHlvdSBhcmUgZ29pbmcgdG8gaW5zdGFsbAorCSh0aGUgY29tbWVudHMgYmVmb3JlIHRoaXMgc3RydWN0dXJlIHNob3VsZCBoZWxwKQorICAgICAgLSBzYXZlIGFuZCBleGl0CisKK09uY2UgeW91IGhhdmUgc2V0IHVwIHRoZSBib2FyZCBjb25maWd1cmF0aW9ucyB0aGVuIHlvdSBhcmUgcmVhZHkgdG8gYnVpbGQKK3RoZSBrZXJuZWwgb3IgbW9kdWxlcy4KKworV2hlbiB0aGUgbmV3IGtlcm5lbCBpcyBib290ZWQsIG9yIHRoZSBsb2FkYWJsZSBtb2R1bGUgbG9hZGVkIHRoZW4gdGhlCitkcml2ZXIgd2lsbCBlbWl0IHNvbWUga2VybmVsIHRyYWNlIG1lc3NhZ2VzIGFib3V0IHdoZXRoZXIgdGhlIGNvbmZpZ3VyZWQKK2JvYXJkcyB3ZXJlIGRldGVjdGVkIG9yIG5vdC4gRGVwZW5kaW5nIG9uIGhvdyB5b3VyIHN5c3RlbSBsb2dnZXIgaXMgc2V0Cit1cCB0aGVzZSBtYXkgY29tZSBvdXQgb24gdGhlIGNvbnNvbGUsIG9yIGp1c3QgYmUgbG9nZ2VkIHRvCisvdmFyL2FkbS9tZXNzYWdlcyBvciAvdmFyL2xvZy9zeXNsb2cuIFlvdSBzaG91bGQgY2hlY2sgdGhlIG1lc3NhZ2VzIHRvCitjb25maXJtIHRoYXQgYWxsIGlzIHdlbGwuCisKKworMi4zIFNIQVJJTkcgSU5URVJSVVBUUworCitJdCBpcyBwb3NzaWJsZSB0byBzaGFyZSBpbnRlcnJ1cHRzIGJldHdlZW4gbXVsdGlwbGUgRWFzeUlPIGFuZAorRWFzeUNvbm5lY3Rpb24gOC8zMiBib2FyZHMgaW4gYW4gRUlTQSBzeXN0ZW0uIFRvIGRvIHRoaXMgeW91IG11c3QgYmUgdXNpbmcKK3N0YXRpYyBkcml2ZXIgY29uZmlndXJhdGlvbiwgbW9kaWZ5aW5nIHRoZSBkcml2ZXIgc291cmNlIGNvZGUgdG8gYWRkIGRyaXZlcgorY29uZmlndXJhdGlvbi4gVGhlbiBhIGNvdXBsZSBvZiBleHRyYSB0aGluZ3MgYXJlIHJlcXVpcmVkOgorCisxLiBXaGVuIGVudGVyaW5nIHRoZSBib2FyZCByZXNvdXJjZXMgaW50byB0aGUgc3RhbGxpb24uYyBmaWxlIHlvdSBuZWVkIHRvCisgICBtYXJrIHRoZSBib2FyZHMgYXMgdXNpbmcgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIERvIHRoaXMgYnkgcmVwbGFjaW5nCisgICB0aGUgIjAiIGVudHJ5IGF0IGZpZWxkIHBvc2l0aW9uIDYgKHRoZSBsYXN0IGZpZWxkKSBpbiB0aGUgYm9hcmQKKyAgIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHdpdGggYSAiMSIuIChUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzCisgICB0aGUgYm9hcmQgdHlwZSwgSS9PIGxvY2F0aW9ucywgZXRjLiBmb3IgZWFjaCBib2FyZCkuIEFsbCBib2FyZHMgdGhhdCBhcmUKKyAgIHNoYXJpbmcgYW4gaW50ZXJydXB0IG11c3QgYmUgc2V0IHRoaXMgd2F5LCBhbmQgZWFjaCBib2FyZCBzaG91bGQgaGF2ZSB0aGUKKyAgIHNhbWUgaW50ZXJydXB0IG51bWJlciBzcGVjaWZpZWQgaGVyZSBhcyB3ZWxsLiBOb3cgYnVpbGQgdGhlIG1vZHVsZSBvcgorICAga2VybmVsIGFzIHlvdSB3b3VsZCBub3JtYWxseS4KKworMi4gV2hlbiBwaHlzaWNhbGx5IGluc3RhbGxpbmcgdGhlIGJvYXJkcyBpbnRvIHRoZSBzeXN0ZW0geW91IG11c3QgZW50ZXIKKyAgIHRoZSBzeXN0ZW0gRUlTQSBjb25maWd1cmF0aW9uIHV0aWxpdHkuIFlvdSB3aWxsIG5lZWQgdG8gaW5zdGFsbCB0aGUgRUlTQQorICAgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgKmFsbCogdGhlIEVhc3lJTyBhbmQgRWFzeUNvbm5lY3Rpb24gOC8zMiBib2FyZHMKKyAgIHRoYXQgYXJlIHNoYXJpbmcgaW50ZXJydXB0cy4gVGhlIFN0YWxsaW9uIEVhc3lJTyBhbmQgRWFzeUNvbm5lY3Rpb24gOC8zMgorICAgRUlTQSBjb25maWd1cmF0aW9uIGZpbGVzIHJlcXVpcmVkIGFyZSBzdXBwbGllZCBieSBTdGFsbGlvbiBUZWNobm9sb2dpZXMKKyAgIG9uIHRoZSBFQVNZIFV0aWxpdGllcyBmbG9wcHkgZGlza2V0dGUgKHVzdWFsbHkgc3VwcGxpZWQgaW4gdGhlIGJveCB3aXRoCisgICB0aGUgYm9hcmQgd2hlbiBwdXJjaGFzZWQuIElmIG5vdCwgeW91IGNhbiBwaWNrIGl0IHVwIGZyb20gU3RhbGxpb24ncyBGVFAKKyAgIHNpdGUsIGZ0cC5zdGFsbGlvbi5jb20pLiBZb3Ugd2lsbCBuZWVkIHRvIGVkaXQgdGhlIGJvYXJkIHJlc291cmNlcyB0bworICAgY2hvb3NlIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLCBhbmQgbWFrZSBzdXJlIHRvIHNldCBlYWNoIGJvYXJkJ3MKKyAgIGludGVycnVwdCB0byB0aGUgc2FtZSBJUlEgbnVtYmVyLgorCitZb3UgbXVzdCBjb21wbGV0ZSBib3RoIHRoZSBhYm92ZSBzdGVwcyBmb3IgdGhpcyB0byB3b3JrLiBXaGVuIHlvdSByZWJvb3QKK29yIGxvYWQgdGhlIGRyaXZlciB5b3VyIEVhc3lJTyBhbmQgRWFzeUNvbm5lY3Rpb24gOC8zMiBib2FyZHMgd2lsbCBiZQorc2hhcmluZyBpbnRlcnJ1cHRzLgorCisKKzIuNCBVU0lORyBISUdIIFNIQVJFRCBNRU1PUlkKKworVGhlIEVhc3lDb25uZWN0aW9uIDgvNjQtRUksIE9OYm9hcmQgYW5kIFN0YWxsaW9uIGJvYXJkcyBhcmUgY2FwYWJsZSBvZgordXNpbmcgc2hhcmVkIG1lbW9yeSBhZGRyZXNzZXMgYWJvdmUgdGhlIHVzdWFsIDY0MEsgLSAxTWIgcmFuZ2UuIFRoZSBPTmJvYXJkCitJU0EgYW5kIHRoZSBTdGFsbGlvbiBib2FyZHMgY2FuIGJlIHByb2dyYW1tZWQgdG8gdXNlIG1lbW9yeSBhZGRyZXNzZXMgdXAgdG8KKzE2TWIgKHRoZSBJU0EgYnVzIGFkZHJlc3NpbmcgbGltaXQpLCBhbmQgdGhlIEVhc3lDb25uZWN0aW9uIDgvNjQtRUkgYW5kCitPTmJvYXJkL0UgY2FuIGJlIHByb2dyYW1tZWQgZm9yIG1lbW9yeSBhZGRyZXNzZXMgdXAgdG8gNEdiICh0aGUgRUlTQSBidXMKK2FkZHJlc3NpbmcgbGltaXQpLgorCitUaGUgaGlnaGVyIHRoYW4gMU1iIG1lbW9yeSBhZGRyZXNzZXMgYXJlIGZ1bGx5IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KK0p1c3QgZW50ZXIgdGhlIGFkZHJlc3MgYXMgeW91IG5vcm1hbGx5IHdvdWxkIGZvciBhIGxvd2VyIHRoYW4gMU1iIGFkZHJlc3MKKyhpbiB0aGUgZHJpdmVyJ3MgYm9hcmQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUpLgorCisKKworMi41IFRST1VCTEUgU0hPT1RJTkcKKworSWYgYSBib2FyZCBpcyBub3QgZm91bmQgYnkgdGhlIGRyaXZlciBidXQgaXMgYWN0dWFsbHkgaW4gdGhlIHN5c3RlbSB0aGVuIHRoZQorbW9zdCBsaWtlbHkgcHJvYmxlbSBpcyB0aGF0IHRoZSBJL08gYWRkcmVzcyBpcyB3cm9uZy4gQ2hhbmdlIHRoZSBtb2R1bGUgbG9hZAorYXJndW1lbnQgZm9yIHRoZSBsb2FkYWJsZSBtb2R1bGUgZm9ybS4gT3IgY2hhbmdlIGl0IGluIHRoZSBkcml2ZXIgc3RhbGxpb24uYworb3IgaXN0YWxsaW9uLmMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgYW5kIHJlYnVpbGQgdGhlIGtlcm5lbCBvciBtb2R1bGVzLCBvcgorY2hhbmdlIGl0IG9uIHRoZSBib2FyZC4KKworT24gRWFzeUlPIGFuZCBFYXN5Q29ubmVjdGlvbiA4LzMyIGJvYXJkcyB0aGUgSVJRIGlzIHNvZnR3YXJlIHByb2dyYW1tYWJsZSwgc28KK2lmIHRoZXJlIGlzIGEgY29uZmxpY3QgeW91IG1heSBuZWVkIHRvIGNoYW5nZSB0aGUgSVJRIHVzZWQgZm9yIGEgYm9hcmQuIFRoZXJlCithcmUgbm8gaW50ZXJydXB0cyB0byB3b3JyeSBhYm91dCBmb3IgT05ib2FyZCwgQnJ1bWJ5IG9yIEVhc3lDb25uZWN0aW9uIDgvNjQKKyhJU0EsIEVJU0EgYW5kIE1DQSkgYm9hcmRzLiBUaGUgbWVtb3J5IHJlZ2lvbiBvbiBFYXN5Q29ubmVjdGlvbiA4LzY0IGFuZAorT05ib2FyZCBib2FyZHMgaXMgc29mdHdhcmUgcHJvZ3JhbW1hYmxlLCBidXQgbm90IG9uIHRoZSBCcnVtYnkgYm9hcmRzLgorCisKKworMy4gVVNJTkcgVEhFIERSSVZFUlMKKworMy4xIElOVEVMTElHRU5UIERSSVZFUiBPUEVSQVRJT04KKworVGhlIGludGVsbGlnZW50IGJvYXJkcyBhbHNvIG5lZWQgdG8gaGF2ZSB0aGVpciAiZmlybXdhcmUiIGNvZGUgZG93bmxvYWRlZAordG8gdGhlbS4gVGhpcyBpcyBkb25lIHZpYSBhIHVzZXIgbGV2ZWwgYXBwbGljYXRpb24gc3VwcGxpZWQgaW4gdGhlIGRyaXZlcgordXRpbGl0eSBwYWNrYWdlIGNhbGxlZCAic3RsbG9hZCIuIENvbXBpbGUgdGhpcyBwcm9ncmFtIHdoZXJldmVyIHlvdSBkcm9wcGVkCit0aGUgcGFja2FnZSBmaWxlcywgYnkgdHlwaW5nICJtYWtlIi4gSW4gaXRzIHNpbXBsZXN0IGZvcm0geW91IGNhbiB0aGVuIHR5cGUKKworICAgIC4vc3RsbG9hZCAtaSBjZGsuc3lzCisKK2luIHRoaXMgZGlyZWN0b3J5IGFuZCB0aGF0IHdpbGwgZG93bmxvYWQgYm9hcmQgMCAoYXNzdW1pbmcgYm9hcmQgMCBpcyBhbgorRWFzeUNvbm5lY3Rpb24gOC82NCBvciBFYXN5Q29ubmVjdGlvbi9SQSBib2FyZCkuIFRvIGRvd25sb2FkIHRvIGFuCitPTmJvYXJkLCBCcnVtYnkgb3IgU3RhbGxpb24gZG86CisKKyAgICAuL3N0bGxvYWQgLWkgMjY4MS5zeXMKKworTm9ybWFsbHkgeW91IHdvdWxkIHdhbnQgYWxsIGJvYXJkcyB0byBiZSBkb3dubG9hZGVkIGFzIHBhcnQgb2YgdGhlIHN0YW5kYXJkCitzeXN0ZW0gc3RhcnR1cC4gVG8gYWNoaWV2ZSB0aGlzLCBhZGQgb25lIG9mIHRoZSBsaW5lcyBhYm92ZSBpbnRvIHRoZQorL2V0Yy9yYy5kL3JjLlMgb3IgL2V0Yy9yYy5kL3JjLnNlcmlhbCBmaWxlLiBUbyBkb3dubG9hZCBlYWNoIGJvYXJkIGp1c3QgYWRkCit0aGUgIi1iIDxicmQtbnVtYmVyPiIgb3B0aW9uIHRvIHRoZSBsaW5lLiBZb3Ugd2lsbCBuZWVkIHRvIGRvd25sb2FkIGNvZGUgZm9yCitldmVyeSBib2FyZC4gWW91IHNob3VsZCBwcm9iYWJseSBtb3ZlIHRoZSBzdGxsb2FkIHByb2dyYW0gaW50byBhIHN5c3RlbQorZGlyZWN0b3J5LCBzdWNoIGFzIC91c3Ivc2Jpbi4gQWxzbywgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGNkay5zeXMgaW1hZ2UKK2ZpbGUgaW4gdGhlIHN0bGxvYWQgZG93bi1sb2FkZXIgaXMgL3Vzci9saWIvc3RhbGxpb24uIENyZWF0ZSB0aGF0IGRpcmVjdG9yeQorYW5kIHB1dCB0aGUgY2RrLnN5cyBhbmQgMjY4MS5zeXMgZmlsZXMgaW4gaXQuIChJdCdzIGEgY29udmVuaWVudCBwbGFjZSB0byBwdXQKK3RoZW0gYW55d2F5KS4gQXMgYW4gZXhhbXBsZSB5b3VyIC9ldGMvcmMuZC9yYy5TIGZpbGUgbWlnaHQgaGF2ZSB0aGUKK2ZvbGxvd2luZyBsaW5lcyBhZGRlZCB0byBpdCAoaWYgeW91IGhhZCAzIGJvYXJkcyk6CisKKyAgICAvdXNyL3NiaW4vc3RsbG9hZCAtYiAwIC1pIC91c3IvbGliL3N0YWxsaW9uL2Nkay5zeXMKKyAgICAvdXNyL3NiaW4vc3RsbG9hZCAtYiAxIC1pIC91c3IvbGliL3N0YWxsaW9uLzI2ODEuc3lzCisgICAgL3Vzci9zYmluL3N0bGxvYWQgLWIgMiAtaSAvdXNyL2xpYi9zdGFsbGlvbi8yNjgxLnN5cworCitUaGUgaW1hZ2UgZmlsZXMgY2RrLnN5cyBhbmQgMjY4MS5zeXMgYXJlIHNwZWNpZmljIHRvIHRoZSBib2FyZCB0eXBlcy4gVGhlCitjZGsuc3lzIHdpbGwgb25seSBmdW5jdGlvbiBjb3JyZWN0bHkgb24gYW4gRWFzeUNvbm5lY3Rpb24gOC82NCBib2FyZC4gU2ltaWxhcmx5Cit0aGUgMjY4MS5zeXMgaW1hZ2UgZmlsbCBvbmx5IG9wZXJhdGUgb24gT05ib2FyZCwgQnJ1bWJ5IGFuZCBTdGFsbGlvbiBib2FyZHMuCitJZiB5b3UgbG9hZCB0aGUgd3JvbmcgaW1hZ2UgZmlsZSBpbnRvIGEgYm9hcmQgaXQgd2lsbCBmYWlsIHRvIHN0YXJ0IHVwLCBhbmQKK29mIGNvdXJzZSB0aGUgcG9ydHMgd2lsbCBub3QgYmUgb3BlcmF0aW9uYWwhCisKK0lmIHlvdSBhcmUgdXNpbmcgdGhlIG1vZHVsYXJpemVkIHZlcnNpb24gb2YgdGhlIGRyaXZlciB5b3UgbWlnaHQgd2FudCB0byBwdXQKK3RoZSBtb2Rwcm9iZSBjYWxscyBpbiB0aGUgc3RhcnR1cCBzY3JpcHQgYXMgd2VsbCAoYmVmb3JlIHRoZSBkb3dubG9hZCBsaW5lcworb2J2aW91c2x5KS4KKworCiszLjIgVVNJTkcgVEhFIFNFUklBTCBQT1JUUworCitPbmNlIHRoZSBkcml2ZXIgaXMgaW5zdGFsbGVkIHlvdSB3aWxsIG5lZWQgdG8gc2V0dXAgc29tZSBkZXZpY2Ugbm9kZXMgdG8KK2FjY2VzcyB0aGUgc2VyaWFsIHBvcnRzLiBUaGUgc2ltcGxlc3QgbWV0aG9kIGlzIHRvIHVzZSB0aGUgL2Rldi9NQUtFREVWIHByb2dyYW0uCitJdCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGRldmljZSBlbnRyaWVzIGZvciBTdGFsbGlvbiBib2FyZHMuIFRoaXMgd2lsbAorY3JlYXRlIHRoZSBub3JtYWwgc2VyaWFsIHBvcnQgZGV2aWNlcyBhcyAvZGV2L3R0eUUjIHdoZXJlIyBpcyB0aGUgcG9ydCBudW1iZXIKK3N0YXJ0aW5nIGZyb20gMC4gQSBiYW5rIG9mIDY0IG1pbm9yIGRldmljZSBudW1iZXJzIGlzIGFsbG9jYXRlZCB0byBlYWNoIGJvYXJkLAorc28gdGhlIGZpcnN0IHBvcnQgb24gdGhlIHNlY29uZCBib2FyZCBpcyBwb3J0IDY0LGV0Yy4gQSBzZXQgb2YgY2FsbG91dCB0eXBlCitkZXZpY2VzIG1heSBhbHNvIGJlIGNyZWF0ZWQuIFRoZXkgYXJlIGNyZWF0ZWQgYXMgdGhlIGRldmljZXMgL2Rldi9jdWUjIHdoZXJlICMKK2lzIHRoZSBzYW1lIGFzIGZvciB0aGUgdHR5RSBkZXZpY2VzLgorCitGb3IgdGhlIG1vc3QgcGFydCB0aGUgU3RhbGxpb24gZHJpdmVyIHRyaWVzIHRvIGVtdWxhdGUgdGhlIHN0YW5kYXJkIFBDIHN5c3RlbQorQ09NIHBvcnRzIGFuZCB0aGUgc3RhbmRhcmQgTGludXggc2VyaWFsIGRyaXZlci4gVGhlIGlkZWEgaXMgdGhhdCB5b3Ugc2hvdWxkCitiZSBhYmxlIHRvIHVzZSBTdGFsbGlvbiBib2FyZCBwb3J0cyBhbmQgQ09NIHBvcnRzIGludGVyY2hhbmdlYWJseSB3aXRob3V0Cittb2RpZnlpbmcgYW55dGhpbmcgYnV0IHRoZSBkZXZpY2UgbmFtZS4gQW55dGhpbmcgdGhhdCBkb2Vzbid0IHdvcmsgbGlrZSB0aGF0CitzaG91bGQgYmUgY29uc2lkZXJlZCBhIGJ1ZyBpbiB0aGlzIGRyaXZlciEKKworSWYgeW91IGxvb2sgYXQgdGhlIGRyaXZlciBjb2RlIHlvdSB3aWxsIG5vdGljZSB0aGF0IGl0IGlzIGZhaXJseSBjbG9zZWx5CitiYXNlZCBvbiB0aGUgTGludXggc2VyaWFsIGRyaXZlciAobGludXgvZHJpdmVycy9jaGFyL3NlcmlhbC5jKS4gVGhpcyBpcworaW50ZW50aW9uYWwsIG9idmlvdXNseSB0aGlzIGlzIHRoZSBlYXNpZXN0IHdheSB0byBlbXVsYXRlIGl0cyBiZWhhdmlvciEKKworU2luY2UgdGhpcyBkcml2ZXIgdHJpZXMgdG8gZW11bGF0ZSB0aGUgc3RhbmRhcmQgc2VyaWFsIHBvcnRzIGFzIG11Y2ggYXMKK3Bvc3NpYmxlLCBtb3N0IHN5c3RlbSB1dGlsaXRpZXMgc2hvdWxkIHdvcmsgYXMgdGhleSBkbyBmb3IgdGhlIHN0YW5kYXJkCitDT00gcG9ydHMuIE1vc3QgaW1wb3J0YW50bHkgInN0dHkiIHdvcmtzIGFzIGV4cGVjdGVkIGFuZCAic2V0c2VyaWFsIiBjYW4KK2Fsc28gYmUgdXNlZCAoZXhjZXB0aW5nIHRoZSBhYmlsaXR5IHRvIGF1dG8tY29uZmlndXJlIHRoZSBJL08gYW5kIElSUQorYWRkcmVzc2VzIG9mIGJvYXJkcykuIEhpZ2hlciBiYXVkIHJhdGVzIGFyZSBzdXBwb3J0ZWQgaW4gdGhlIHVzdWFsIGZhc2hpb24KK3Rocm91Z2ggc2V0c2VyaWFsIG9yIHVzaW5nIHRoZSBDQkFVREVYIGV4dGVuc2lvbnMuIE5vdGUgdGhhdCB0aGUgRWFzeUlPIGFuZAorRWFzeUNvbm5lY3Rpb24gKGFsbCB0eXBlcykgc3VwcG9ydCBhdCBsZWFzdCA1NzYwMCBhbmQgMTE1MjAwIGJhdWQuIFRoZSBuZXdlcgorRWFzeUNvbm5lY3Rpb24gWFAgbW9kdWxlcyBhbmQgbmV3IEVhc3lJTyBib2FyZHMgc3VwcG9ydCAyMzA0MDAgYW5kIDQ2MDgwMAorYmF1ZCBhcyB3ZWxsLiBUaGUgb2xkZXIgYm9hcmRzIGluY2x1ZGluZyBPTmJvYXJkIGFuZCBCcnVtYnkgc3VwcG9ydCBhCittYXhpbXVtIGJhdWQgcmF0ZSBvZiAzODQwMC4KKworSWYgeW91IGFyZSB1bmZhbWlsaWFyIHdpdGggaG93IHRvIHVzZSBzZXJpYWwgcG9ydHMsIHRoZW4gZ2V0IHRoZSBTZXJpYWwtSE9XVE8KK2J5IEdyZWcgSGFua2lucy4gSXQgd2lsbCBleHBsYWluIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8ga25vdyEKKworCisKKzQuIE5PVEVTCisKK1lvdSBjYW4gdXNlIGJvdGggZHJpdmVycyBhdCBvbmNlIGlmIHlvdSBoYXZlIGEgbWl4IG9mIGJvYXJkIHR5cGVzIGluc3RhbGxlZAoraW4gYSBzeXN0ZW0uIEhvd2V2ZXIgdG8gZG8gdGhpcyB5b3Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUgbWFqb3IgbnVtYmVycwordXNlZCBieSBvbmUgb2YgdGhlIGRyaXZlcnMuIEN1cnJlbnRseSBib3RoIGRyaXZlcnMgdXNlIG1ham9yIG51bWJlcnMgMjQsIDI1CithbmQgMjggZm9yIHRoZWlyIGRldmljZXMuIENoYW5nZSBvbmUgZHJpdmVyIHRvIHVzZSBzb21lIG90aGVyIG1ham9yIG51bWJlcnMsCithbmQgdGhlbiBtb2RpZnkgdGhlIG1rZGV2bm9kcyBzY3JpcHQgdG8gbWFrZSBkZXZpY2Ugbm9kZXMgYmFzZWQgb24gdGhvc2UgbmV3CittYWpvciBudW1iZXJzLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGNoYW5nZSB0aGUgaXN0YWxsaW9uLmMgZHJpdmVyIHRvIHVzZQorbWFqb3IgbnVtYmVycyA2MCwgNjEgYW5kIDYyLiBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gY3JlYXRlIGRldmljZSBub2RlcyB3aXRoCitkaWZmZXJlbnQgbmFtZXMgZm9yIHRoZSBwb3J0cywgZm9yIGV4YW1wbGUgdHR5RiMgYW5kIGN1ZiMuCisKK1RoZSBvcmlnaW5hbCBTdGFsbGlvbiBib2FyZCBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IFN0YWxsaW9uIFRlY2hub2xvZ2llcy4KK0FsdGhvdWdoIGl0IGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgaXN0YWxsaW9uIGRyaXZlci4KKworRmluZGluZyBhIGZyZWUgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgcmFuZ2UgY2FuIGJlIGEgcHJvYmxlbS4gVGhlIG9sZGVyCitib2FyZHMgbGlrZSB0aGUgU3RhbGxpb24gYW5kIE9OYm9hcmQgbmVlZCBsYXJnZSBhcmVhcyAoNjRLIG9yIGV2ZW4gMTI4SyksIHNvCit0aGV5IGNhbiBiZSB2ZXJ5IGRpZmZpY3VsdCB0byBnZXQgaW50byBhIHN5c3RlbS4gSWYgeW91IGhhdmUgMTYgTWIgb2YgUkFNCit0aGVuIHlvdSBoYXZlIG5vIGNob2ljZSBidXQgdG8gcHV0IHRoZW0gc29tZXdoZXJlIGluIHRoZSA2NDBLIC0+IDFNYiByYW5nZS4KK09OYm9hcmRzIHJlcXVpcmUgNjRLLCBzbyB0eXBpY2FsbHkgMHhkMDAwMCBpcyBnb29kLCBvciAweGUwMDAwIG9uIHNvbWUKK3N5c3RlbXMuIElmIHlvdSBoYXZlIGFuIG9yaWdpbmFsIFN0YWxsaW9uIGJvYXJkLCAiVjQuMCIgb3IgUmV2Lk8sIHRoZW4geW91CituZWVkIGEgNjRLIG1lbW9yeSBhZGRyZXNzIHNwYWNlLCBzbyBhZ2FpbiAweGQwMDAwIGFuZCAweGUwMDAwIGFyZSBnb29kLgorT2xkZXIgU3RhbGxpb24gYm9hcmRzIGFyZSBhIG11Y2ggYmlnZ2VyIHByb2JsZW0uIFRoZXkgbmVlZCAxMjhLIG9mIGFkZHJlc3MKK3NwYWNlIGFuZCBtdXN0IGJlIG9uIGEgMTI4SyBib3VuZGFyeS4gSWYgeW91IGRvbid0IGhhdmUgYSBWR0EgY2FyZCB0aGVuCisweGMwMDAwIG1pZ2h0IGJlIHVzYWJsZSAtIHRoZXJlIGlzIHJlYWxseSBubyBvdGhlciBwbGFjZSB5b3UgY2FuIHB1dCB0aGVtCitiZWxvdyAxTWIuCisKK0JvdGggdGhlIE9OYm9hcmQgYW5kIG9sZCBTdGFsbGlvbiBib2FyZHMgY2FuIHVzZSBoaWdoZXIgbWVtb3J5IGFkZHJlc3NlcyBhcword2VsbCwgYnV0IHlvdSBtdXN0IGhhdmUgbGVzcyB0aGFuIDE2TWIgb2YgUkFNIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0uIFVzdWFsCitoaWdoIG1lbW9yeSBhZGRyZXNzZXMgdXNlZCBpbmNsdWRlIDB4ZWMwMDAwIGFuZCAweGYwMDAwMC4KKworVGhlIEJydW1ieSBib2FyZHMgb25seSByZXF1aXJlIDE2S2Igb2YgYWRkcmVzcyBzcGFjZSwgc28geW91IGNhbiB1c3VhbGx5CitzcXVlZXplIHRoZW0gaW4gc29tZXdoZXJlLiBDb21tb24gYWRkcmVzc2VzIGFyZSAweGM4MDAwLCAweGNjMDAwLCBvciBpbgordGhlIDB4ZDAwMDAgcmFuZ2UuIEVhc3lDb25uZWN0aW9uIDgvNjQgYm9hcmRzIGFyZSBldmVuIGJldHRlciwgdGhleSBvbmx5CityZXF1aXJlIDRLYiBvZiBhZGRyZXNzIHNwYWNlLCBhZ2FpbiB1c3VhbGx5IDB4YzgwMDAsIDB4Y2MwMDAgb3IgMHhkMDAwMAorYXJlIGdvb2QuCisKK0lmIHlvdSBhcmUgdXNpbmcgYW4gRWFzeUNvbm5lY3Rpb24gOC82NC1FSSBvciBPTmJvYXJkL0UgdGhlbiB1c3VhbGx5IHRoZQorMHhkMDAwMCBvciAweGUwMDAwIHJhbmdlcyBhcmUgdGhlIGJlc3Qgb3B0aW9ucyBiZWxvdyAxTWIuIElmIG5laXRoZXIgb2YKK3RoZW0gY2FuIGJlIHVzZWQgdGhlbiB0aGUgaGlnaCBtZW1vcnkgc3VwcG9ydCB0byB1c2UgdGhlIHJlYWxseSBoaWdoIGFkZHJlc3MKK3JhbmdlcyBpcyB0aGUgYmVzdCBvcHRpb24uIFR5cGljYWxseSB0aGUgMkdiIHJhbmdlIGlzIGNvbnZlbmllbnQgZm9yIHRoZW0sCithbmQgZ2V0cyB0aGVtIHdlbGwgb3V0IG9mIHRoZSB3YXkuCisKK1RoZSBwb3J0cyBvZiB0aGUgRWFzeUlPLThNIGJvYXJkIGRvIG5vdCBoYXZlIERDRCBvciBEVFIgc2lnbmFscy4gU28gdGhlc2UKK3BvcnRzIGNhbm5vdCBiZSB1c2VkIGFzIHJlYWwgbW9kZW0gZGV2aWNlcy4gR2VuZXJhbGx5LCB3aGVuIHVzaW5nIHRoZXNlCitwb3J0cyB5b3Ugc2hvdWxkIG9ubHkgdXNlIHRoZSBjdWVYIGRldmljZXMuCisKK1RoZSBkcml2ZXIgdXRpbGl0eSBwYWNrYWdlIGNvbnRhaW5zIGEgY291cGxlIG9mIHZlcnkgdXNlZnVsIHByb2dyYW1zLiBPbmUgCitpcyBhIHNlcmlhbCBwb3J0IHN0YXRpc3RpY3MgY29sbGVjdGlvbiBhbmQgZGlzcGxheSBwcm9ncmFtIC0gdmVyeSBoYW5keQorZm9yIHNvbHZpbmcgc2VyaWFsIHBvcnQgcHJvYmxlbXMuIFRoZSBvdGhlciBpcyBhbiBleHRlbmRlZCBvcHRpb24gc2V0dGluZworcHJvZ3JhbSB0aGF0IHdvcmtzIHdpdGggdGhlIGludGVsbGlnZW50IGJvYXJkcy4KKworCisKKzUuIERJU0NMQUlNRVIKKworVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGRvY3VtZW50IGlzIGJlbGlldmVkIHRvIGJlIGFjY3VyYXRlIGFuZAorcmVsaWFibGUuIEhvd2V2ZXIsIG5vIHJlc3BvbnNpYmlsaXR5IGlzIGFzc3VtZWQgYnkgU3RhbGxpb24gVGVjaG5vbG9naWVzCitQdHkuIEx0ZC4gZm9yIGl0cyB1c2UsIG5vciBhbnkgaW5mcmluZ2VtZW50cyBvZiBwYXRlbnRzIG9yIG90aGVyIHJpZ2h0cworb2YgdGhpcmQgcGFydGllcyByZXN1bHRpbmcgZnJvbSBpdHMgdXNlLiBTdGFsbGlvbiBUZWNobm9sb2dpZXMgcmVzZXJ2ZXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhlIGRlc2lnbiBvZiBpdHMgcHJvZHVjdHMgYW5kIHdpbGwgZW5kZWF2b3VyIHRvIGNoYW5nZQordGhlIGluZm9ybWF0aW9uIGluIG1hbnVhbHMgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGFjY29yZGluZ2x5LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N2Z2EudHh0IGIvRG9jdW1lbnRhdGlvbi9zdmdhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDY2ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zdmdhLnR4dApAQCAtMCwwICsxLDI3NiBAQAorCQkgICAgICAgVmlkZW8gTW9kZSBTZWxlY3Rpb24gU3VwcG9ydCAyLjEzCisJCSAgICAoYykgMTk5NS0tMTk5OSBNYXJ0aW4gTWFyZXMsIDxtakB1Y3cuY3o+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBJbnRybworfn5+fn5+fn4KKyAgIFRoaXMgc21hbGwgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSAiVmlkZW8gTW9kZSBTZWxlY3Rpb24iIGZlYXR1cmUgd2hpY2gKK2FsbG93cyB0aGUgdXNlIG9mIHZhcmlvdXMgc3BlY2lhbCB2aWRlbyBtb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIHZpZGVvIEJJT1MuIER1ZQordG8gdXNhZ2Ugb2YgdGhlIEJJT1MsIHRoZSBzZWxlY3Rpb24gaXMgbGltaXRlZCB0byBib290IHRpbWUgKGJlZm9yZSB0aGUKK2tlcm5lbCBkZWNvbXByZXNzaW9uIHN0YXJ0cykgYW5kIHdvcmtzIG9ubHkgb24gODBYODYgbWFjaGluZXMuCisKKyAgICoqICBTaG9ydCBpbnRybyBmb3IgdGhlIGltcGF0aWVudDogSnVzdCB1c2UgdmdhPWFzayBmb3IgdGhlIGZpcnN0IHRpbWUsCisgICAqKiAgZW50ZXIgYHNjYW4nIG9uIHRoZSB2aWRlbyBtb2RlIHByb21wdCwgcGljayB0aGUgbW9kZSB5b3Ugd2FudCB0byB1c2UsCisgICAqKiAgcmVtZW1iZXIgaXRzIG1vZGUgSUQgKHRoZSBmb3VyLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlcikgYW5kIHRoZW4KKyAgICoqICBzZXQgdGhlIHZnYSBwYXJhbWV0ZXIgdG8gdGhpcyBudW1iZXIgKGNvbnZlcnRlZCB0byBkZWNpbWFsIGZpcnN0KS4KKworICAgVGhlIHZpZGVvIG1vZGUgdG8gYmUgdXNlZCBpcyBzZWxlY3RlZCBieSBhIGtlcm5lbCBwYXJhbWV0ZXIgd2hpY2ggY2FuIGJlCitzcGVjaWZpZWQgaW4gdGhlIGtlcm5lbCBNYWtlZmlsZSAodGhlIFNWR0FfTU9ERT0uLi4gbGluZSkgb3IgYnkgdGhlICJ2Z2E9Li4uIgorb3B0aW9uIG9mIExJTE8gKG9yIHNvbWUgb3RoZXIgYm9vdCBsb2FkZXIgeW91IHVzZSkgb3IgYnkgdGhlICJ2aWRtb2RlIiB1dGlsaXR5CisocHJlc2VudCBpbiBzdGFuZGFyZCBMaW51eCB1dGlsaXR5IHBhY2thZ2VzKS4gWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB2YWx1ZXMKK29mIHRoaXMgcGFyYW1ldGVyOgorCisgICBOT1JNQUxfVkdBIC0gU3RhbmRhcmQgODB4MjUgbW9kZSBhdmFpbGFibGUgb24gYWxsIGRpc3BsYXkgYWRhcHRlcnMuCisKKyAgIEVYVEVOREVEX1ZHQQktIFN0YW5kYXJkIDgtcGl4ZWwgZm9udCBtb2RlOiA4MHg0MyBvbiBFR0EsIDgweDUwIG9uIFZHQS4KKworICAgQVNLX1ZHQSAtIERpc3BsYXkgYSB2aWRlbyBtb2RlIG1lbnUgdXBvbiBzdGFydHVwIChzZWUgYmVsb3cpLgorCisgICAwLi4zNSAtIE1lbnUgaXRlbSBudW1iZXIgKHdoZW4geW91IGhhdmUgdXNlZCB0aGUgbWVudSB0byB2aWV3IHRoZSBsaXN0IG9mCisgICAgICBtb2RlcyBhdmFpbGFibGUgb24geW91ciBhZGFwdGVyLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG1lbnUgaXRlbSB5b3Ugd2FudAorICAgICAgdG8gdXNlKS4gMC4uOSBjb3JyZXNwb25kIHRvICIwIi4uIjkiLCAxMC4uMzUgdG8gImEiLi4ieiIuIFdhcm5pbmc6IHRoZQorICAgICAgbW9kZSBsaXN0IGRpc3BsYXllZCBtYXkgdmFyeSBhcyB0aGUga2VybmVsIHZlcnNpb24gY2hhbmdlcywgYmVjYXVzZSB0aGUKKyAgICAgIG1vZGVzIGFyZSBsaXN0ZWQgaW4gYSAiZmlyc3QgZGV0ZWN0ZWQgLS0gZmlyc3QgZGlzcGxheWVkIiBtYW5uZXIuIEl0J3MKKyAgICAgIGJldHRlciB0byB1c2UgYWJzb2x1dGUgbW9kZSBudW1iZXJzIGluc3RlYWQuCisKKyAgIDB4Li4uLiAtIEhleGFkZWNpbWFsIHZpZGVvIG1vZGUgSUQgKGFsc28gZGlzcGxheWVkIG9uIHRoZSBtZW51LCBzZWUgYmVsb3cKKyAgICAgIGZvciBleGFjdCBtZWFuaW5nIG9mIHRoZSBJRCkuIFdhcm5pbmc6IHJkZXYgYW5kIExJTE8gZG9uJ3Qgc3VwcG9ydAorICAgICAgaGV4YWRlY2ltYWwgbnVtYmVycyAtLSB5b3UgaGF2ZSB0byBjb252ZXJ0IGl0IHRvIGRlY2ltYWwgbWFudWFsbHkuCisKKzIuIE1lbnUKK35+fn5+fn4KKyAgIFRoZSBBU0tfVkdBIG1vZGUgY2F1c2VzIHRoZSBrZXJuZWwgdG8gb2ZmZXIgYSB2aWRlbyBtb2RlIG1lbnUgdXBvbgorYm9vdHVwLiBJdCBkaXNwbGF5cyBhICJQcmVzcyA8UkVUVVJOPiB0byBzZWUgdmlkZW8gbW9kZXMgYXZhaWxhYmxlLCA8U1BBQ0U+Cit0byBjb250aW51ZSBvciB3YWl0IDMwIHNlY3MiIG1lc3NhZ2UuIElmIHlvdSBwcmVzcyA8UkVUVVJOPiwgeW91IGVudGVyIHRoZQorbWVudSwgaWYgeW91IHByZXNzIDxTUEFDRT4gb3Igd2FpdCAzMCBzZWNvbmRzLCB0aGUga2VybmVsIHdpbGwgYm9vdCB1cCBpbgordGhlIHN0YW5kYXJkIDgweDI1IG1vZGUuCisKKyAgIFRoZSBtZW51IGxvb2tzIGxpa2U6CisKK1ZpZGVvIGFkYXB0ZXI6IDxuYW1lLW9mLWRldGVjdGVkLXZpZGVvLWFkYXB0ZXI+CitNb2RlOiAgICBDT0xTeFJPV1M6CiswICAwRjAwICA4MHgyNQorMSAgMEYwMSAgODB4NTAKKzIgIDBGMDIgIDgweDQzCiszICAwRjAzICA4MHgyNgorLi4uLgorRW50ZXIgbW9kZSBudW1iZXIgb3IgYHNjYW4nOiA8Zmxhc2hpbmctY3Vyc29yLWhlcmU+CisKKyAgIDxuYW1lLW9mLWRldGVjdGVkLXZpZGVvLWFkYXB0ZXI+IHRlbGxzIHdoYXQgdmlkZW8gYWRhcHRlciBkaWQgTGludXggZGV0ZWN0CistLSBpdCdzIGVpdGhlciBhIGdlbmVyaWMgYWRhcHRlciBuYW1lIChNREEsIENHQSwgSEdDLCBFR0EsIFZHQSwgVkVTQSBWR0EgW2EgVkdBCit3aXRoIFZFU0EtY29tcGxpYW50IEJJT1NdKSBvciBhIGNoaXBzZXQgbmFtZSAoZS5nLiwgVHJpZGVudCkuIERpcmVjdCBkZXRlY3Rpb24KK29mIGNoaXBzZXRzIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdCAoc2VlIENPTkZJR19WSURFT19TVkdBIGluIGNoYXB0ZXIgNCB0byBzZWUKK2hvdyB0byBlbmFibGUgaXQgaWYgeW91IHJlYWxseSB3YW50KSBhcyBpdCdzIGluaGVyZW50bHkgdW5yZWxpYWJsZSBkdWUgdG8KK2Fic29sdXRlbHkgaW5zYW5lIFBDIGRlc2lnbi4KKworICAgIjAgIDBGMDAgIDgweDI1IiBtZWFucyB0aGF0IHRoZSBmaXJzdCBtZW51IGl0ZW0gKHRoZSBtZW51IGl0ZW1zIGFyZSBudW1iZXJlZAorZnJvbSAiMCIgdG8gIjkiIGFuZCBmcm9tICJhIiB0byAieiIpIGlzIGEgODB4MjUgbW9kZSB3aXRoIElEPTB4MGYwMCAoc2VlIHRoZQorbmV4dCBzZWN0aW9uIGZvciBhIGRlc2NyaXB0aW9uIG9mIG1vZGUgSURzKS4KKworICAgPGZsYXNoaW5nLWN1cnNvci1oZXJlPiBlbmNvdXJhZ2VzIHlvdSB0byBlbnRlciB0aGUgaXRlbSBudW1iZXIgb3IgbW9kZSBJRAoreW91IHdpc2ggdG8gc2V0IGFuZCBwcmVzcyA8UkVUVVJOPi4gSWYgdGhlIGNvbXB1dGVyIGNvbXBsYWlucyBzb21ldGhpbmcgYWJvdXQKKyJVbmtub3duIG1vZGUgSUQiLCBpdCBpcyB0cnlpbmcgdG8gdGVsbCB5b3UgdGhhdCBpdCBpc24ndCBwb3NzaWJsZSB0byBzZXQgc3VjaAorYSBtb2RlLiBJdCdzIGFsc28gcG9zc2libGUgdG8gcHJlc3Mgb25seSA8UkVUVVJOPiB3aGljaCBsZWF2ZXMgdGhlIGN1cnJlbnQgbW9kZS4KKworICAgVGhlIG1vZGUgbGlzdCB1c3VhbGx5IGNvbnRhaW5zIGEgZmV3IGJhc2ljIG1vZGVzIGFuZCBzb21lIFZFU0EgbW9kZXMuICBJbgorY2FzZSB5b3VyIGNoaXBzZXQgaGFzIGJlZW4gZGV0ZWN0ZWQsIHNvbWUgY2hpcHNldC1zcGVjaWZpYyBtb2RlcyBhcmUgc2hvd24gYXMKK3dlbGwgKHNvbWUgb2YgdGhlc2UgbWlnaHQgYmUgbWlzc2luZyBvciB1bnVzYWJsZSBvbiB5b3VyIG1hY2hpbmUgYXMgZGlmZmVyZW50CitCSU9TZXMgYXJlIG9mdGVuIHNoaXBwZWQgd2l0aCB0aGUgc2FtZSBjYXJkIGFuZCB0aGUgbW9kZSBudW1iZXJzIGRlcGVuZCBwdXJlbHkKK29uIHRoZSBWR0EgQklPUykuCisKKyAgIFRoZSBtb2RlcyBkaXNwbGF5ZWQgb24gdGhlIG1lbnUgYXJlIHBhcnRpYWxseSBzb3J0ZWQ6IFRoZSBsaXN0IHN0YXJ0cyB3aXRoCit0aGUgc3RhbmRhcmQgbW9kZXMgKDgweDI1IGFuZCA4MHg1MCkgZm9sbG93ZWQgYnkgInNwZWNpYWwiIG1vZGVzICg4MHgyOCBhbmQKKzgweDQzKSwgbG9jYWwgbW9kZXMgKGlmIHRoZSBsb2NhbCBtb2RlcyBmZWF0dXJlIGlzIGVuYWJsZWQpLCBWRVNBIG1vZGVzIGFuZAorZmluYWxseSBTVkdBIG1vZGVzIGZvciB0aGUgYXV0by1kZXRlY3RlZCBhZGFwdGVyLgorCisgICBJZiB5b3UgYXJlIG5vdCBoYXBweSB3aXRoIHRoZSBtb2RlIGxpc3Qgb2ZmZXJlZCAoZS5nLiwgaWYgeW91IHRoaW5rIHlvdXIgY2FyZAoraXMgYWJsZSB0byBkbyBtb3JlKSwgeW91IGNhbiBlbnRlciAic2NhbiIgaW5zdGVhZCBvZiBpdGVtIG51bWJlciAvIG1vZGUgSUQuICBUaGUKK3Byb2dyYW0gd2lsbCB0cnkgdG8gYXNrIHRoZSBCSU9TIGZvciBhbGwgcG9zc2libGUgdmlkZW8gbW9kZSBudW1iZXJzIGFuZCB0ZXN0Cit3aGF0IGhhcHBlbnMgdGhlbi4gVGhlIHNjcmVlbiB3aWxsIGJlIHByb2JhYmx5IGZsYXNoaW5nIHdpbGRseSBmb3Igc29tZSB0aW1lIGFuZAorc3RyYW5nZSBub2lzZXMgd2lsbCBiZSBoZWFyZCBmcm9tIGluc2lkZSB0aGUgbW9uaXRvciBhbmQgc28gb24gYW5kIHRoZW4sIHJlYWxseQorYWxsIGNvbnNpc3RlbnQgdmlkZW8gbW9kZXMgc3VwcG9ydGVkIGJ5IHlvdXIgQklPUyB3aWxsIGFwcGVhciAocGx1cyBtYXliZSBzb21lCitgZ2hvc3QgbW9kZXMnKS4gSWYgeW91IGFyZSBhZnJhaWQgdGhpcyBjb3VsZCBkYW1hZ2UgeW91ciBtb25pdG9yLCBkb24ndCB1c2UgdGhpcworZnVuY3Rpb24uCisKKyAgIEFmdGVyIHNjYW5uaW5nLCB0aGUgbW9kZSBvcmRlcmluZyBpcyBhIGJpdCBkaWZmZXJlbnQ6IHRoZSBhdXRvLWRldGVjdGVkIFNWR0EKK21vZGVzIGFyZSBub3QgbGlzdGVkIGF0IGFsbCBhbmQgdGhlIG1vZGVzIHJldmVhbGVkIGJ5IGBzY2FuJyBhcmUgc2hvd24gYmVmb3JlCithbGwgVkVTQSBtb2Rlcy4KKworMy4gTW9kZSBJRHMKK35+fn5+fn5+fn5+CisgICBCZWNhdXNlIG9mIHRoZSBjb21wbGV4aXR5IG9mIGFsbCB0aGUgdmlkZW8gc3R1ZmYsIHRoZSB2aWRlbyBtb2RlIElEcwordXNlZCBoZXJlIGFyZSBhbHNvIGEgYml0IGNvbXBsZXguIEEgdmlkZW8gbW9kZSBJRCBpcyBhIDE2LWJpdCBudW1iZXIgdXN1YWxseQorZXhwcmVzc2VkIGluIGEgaGV4YWRlY2ltYWwgbm90YXRpb24gKHN0YXJ0aW5nIHdpdGggIjB4IikuIFlvdSBjYW4gc2V0IGEgbW9kZQorYnkgZW50ZXJpbmcgaXRzIG1vZGUgZGlyZWN0bHkgaWYgeW91IGtub3cgaXQgZXZlbiBpZiBpdCBpc24ndCBzaG93biBvbiB0aGUgbWVudS4KKworVGhlIElEIG51bWJlcnMgY2FuIGJlIGRpdmlkZWQgdG8gdGhyZWUgcmVnaW9uczoKKworICAgMHgwMDAwIHRvIDB4MDBmZiAtIG1lbnUgaXRlbSByZWZlcmVuY2VzLiAweDAwMDAgaXMgdGhlIGZpcnN0IGl0ZW0uIERvbid0IHVzZQorCW91dHNpZGUgdGhlIG1lbnUgYXMgdGhpcyBjYW4gY2hhbmdlIGZyb20gYm9vdCB0byBib290IChlc3BlY2lhbGx5IGlmIHlvdQorCWhhdmUgdXNlZCB0aGUgYHNjYW4nIGZlYXR1cmUpLgorCisgICAweDAxMDAgdG8gMHgwMTdmIC0gc3RhbmRhcmQgQklPUyBtb2Rlcy4gVGhlIElEIGlzIGEgQklPUyB2aWRlbyBtb2RlIG51bWJlcgorCShhcyBwcmVzZW50ZWQgdG8gSU5UIDEwLCBmdW5jdGlvbiAwMCkgaW5jcmVhc2VkIGJ5IDB4MDEwMC4KKworICAgMHgwMjAwIHRvIDB4MDhmZiAtIFZFU0EgQklPUyBtb2Rlcy4gVGhlIElEIGlzIGEgVkVTQSBtb2RlIElEIGluY3JlYXNlZCBieQorCTB4MDEwMC4gQWxsIFZFU0EgbW9kZXMgc2hvdWxkIGJlIGF1dG9kZXRlY3RlZCBhbmQgc2hvd24gb24gdGhlIG1lbnUuCisKKyAgIDB4MDkwMCB0byAweDA5ZmYgLSBWaWRlbzcgc3BlY2lhbCBtb2Rlcy4gU2V0IGJ5IGNhbGxpbmcgSU5UIDB4MTAsIEFYPTB4NmYwNS4KKwkoVXN1YWxseSA5NDA9ODB4NDMsIDk0MT0xMzJ4MjUsIDk0Mj0xMzJ4NDQsIDk0Mz04MHg2MCwgOTQ0PTEwMHg2MCwKKwk5NDU9MTMyeDI4IGZvciB0aGUgc3RhbmRhcmQgVmlkZW83IEJJT1MpCisKKyAgIDB4MGYwMCB0byAweDBmZmYgLSBzcGVjaWFsIG1vZGVzICh0aGV5IGFyZSBzZXQgYnkgdmFyaW91cyB0cmlja3MgLS0gdXN1YWxseQorCWJ5IG1vZGlmeWluZyBvbmUgb2YgdGhlIHN0YW5kYXJkIG1vZGVzKS4gQ3VycmVudGx5IGF2YWlsYWJsZToKKwkweDBmMDAJc3RhbmRhcmQgODB4MjUsIGRvbid0IHJlc2V0IG1vZGUgaWYgYWxyZWFkeSBzZXQgKD1GRkZGKQorCTB4MGYwMQlzdGFuZGFyZCB3aXRoIDgtcG9pbnQgZm9udDogODB4NDMgb24gRUdBLCA4MHg1MCBvbiBWR0EKKwkweDBmMDIJVkdBIDgweDQzIChWR0Egc3dpdGNoZWQgdG8gMzUwIHNjYW5saW5lcyB3aXRoIGEgOC1wb2ludCBmb250KQorCTB4MGYwMwlWR0EgODB4MjggKHN0YW5kYXJkIFZHQSBzY2FucywgYnV0IDE0LXBvaW50IGZvbnQpCisJMHgwZjA0CWxlYXZlIGN1cnJlbnQgdmlkZW8gbW9kZQorCTB4MGYwNQlWR0EgODB4MzAgKDQ4MCBzY2FucywgMTYtcG9pbnQgZm9udCkKKwkweDBmMDYJVkdBIDgweDM0ICg0ODAgc2NhbnMsIDE0LXBvaW50IGZvbnQpCisJMHgwZjA3CVZHQSA4MHg2MCAoNDgwIHNjYW5zLCA4LXBvaW50IGZvbnQpCisJMHgwZjA4CUdyYXBoaWNzIGhhY2sgKHNlZSB0aGUgQ09ORklHX1ZJREVPX0hBQ0sgcGFyYWdyYXBoIGJlbG93KQorCisgICAweDEwMDAgdG8gMHg3ZmZmIC0gbW9kZXMgc3BlY2lmaWVkIGJ5IHJlc29sdXRpb24uIFRoZSBjb2RlIGhhcyBhICIweFJSQ0MiCisJZm9ybSB3aGVyZSBSUiBpcyBhIG51bWJlciBvZiByb3dzIGFuZCBDQyBpcyBhIG51bWJlciBvZiBjb2x1bW5zLgorCUUuZy4sIDB4MTk1MCBjb3JyZXNwb25kcyB0byBhIDgweDI1IG1vZGUsIDB4MmI4NCB0byAxMzJ4NDMgZXRjLgorCVRoaXMgaXMgdGhlIG9ubHkgZnVsbHkgcG9ydGFibGUgd2F5IHRvIHJlZmVyIHRvIGEgbm9uLXN0YW5kYXJkIG1vZGUsCisJYnV0IGl0IHJlbGllcyBvbiB0aGUgbW9kZSBiZWluZyBmb3VuZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBtZW51CisJKHJlbWVtYmVyIHRoYXQgbW9kZSBzY2FubmluZyBpcyBub3QgZG9uZSBhdXRvbWF0aWNhbGx5KS4KKworICAgMHhmZjAwIHRvIDB4ZmZmZiAtIGFsaWFzZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CisJMHhmZmZmCWVxdWl2YWxlbnQgdG8gMHgwZjAwIChzdGFuZGFyZCA4MHgyNSkKKwkweGZmZmUJZXF1aXZhbGVudCB0byAweDBmMDEgKEVHQSA4MHg0MyBvciBWR0EgODB4NTApCisKKyAgIElmIHlvdSBhZGQgMHg4MDAwIHRvIHRoZSBtb2RlIElELCB0aGUgcHJvZ3JhbSB3aWxsIHRyeSB0byByZWNhbGN1bGF0ZQordmVydGljYWwgZGlzcGxheSB0aW1pbmcgYWNjb3JkaW5nIHRvIG1vZGUgcGFyYW1ldGVycywgd2hpY2ggY2FuIGJlIHVzZWQgdG8KK2VsaW1pbmF0ZSBzb21lIGFubm95aW5nIGJ1Z3Mgb2YgY2VydGFpbiBWR0EgQklPU2VzICh1c3VhbGx5IHRob3NlIHVzZWQgZm9yCitjYXJkcyB3aXRoIFMzIGNoaXBzZXRzIGFuZCBvbGQgQ2lycnVzIExvZ2ljIEJJT1NlcykgLS0gbWFpbmx5IGV4dHJhIGxpbmVzIGF0IHRoZQorZW5kIG9mIHRoZSBkaXNwbGF5LgorCis0LiBPcHRpb25zCit+fn5+fn5+fn5+CisgICBTb21lIG9wdGlvbnMgY2FuIGJlIHNldCBpbiB0aGUgc291cmNlIHRleHQgKGluIGFyY2gvaTM4Ni9ib290L3ZpZGVvLlMpLgorQWxsIG9mIHRoZW0gYXJlIHNpbXBsZSAjZGVmaW5lJ3MgLS0gY2hhbmdlIHRoZW0gdG8gI3VuZGVmJ3Mgd2hlbiB5b3Ugd2FudCB0bworc3dpdGNoIHRoZW0gb2ZmLiBDdXJyZW50bHkgc3VwcG9ydGVkOgorCisgICBDT05GSUdfVklERU9fU1ZHQSAtIGVuYWJsZXMgYXV0b2RldGVjdGlvbiBvZiBTVkdBIGNhcmRzLiBUaGlzIGlzIHN3aXRjaGVkCitvZmYgYnkgZGVmYXVsdCBhcyBpdCdzIGEgYml0IHVucmVsaWFibGUgZHVlIHRvIHRlcnJpYmx5IGJhZCBQQyBkZXNpZ24uIElmIHlvdQorcmVhbGx5IHdhbnQgdG8gaGF2ZSB0aGUgYWRhcHRlciBhdXRvZGV0ZWN0ZWQgKG1heWJlIGluIGNhc2UgdGhlIGBzY2FuJyBmZWF0dXJlCitkb2Vzbid0IHdvcmsgb24geW91ciBtYWNoaW5lKSwgc3dpdGNoIHRoaXMgb24gYW5kIGRvbid0IGNyeSBpZiB0aGUgcmVzdWx0cworYXJlIG5vdCBjb21wbGV0ZWx5IHNhbmUuIEluIGNhc2UgeW91IHJlYWxseSBuZWVkIHRoaXMgZmVhdHVyZSwgcGxlYXNlIGRyb3AgbWUKK2EgbWFpbCBhcyBJIHRoaW5rIG9mIHJlbW92aW5nIGl0IHNvbWUgZGF5LgorCisgICBDT05GSUdfVklERU9fVkVTQSAtIGVuYWJsZXMgYXV0b2RldGVjdGlvbiBvZiBWRVNBIG1vZGVzLiBJZiBpdCBkb2Vzbid0IHdvcmsKK29uIHlvdXIgbWFjaGluZSAob3IgZGlzcGxheXMgYSAiRXJyb3I6IFNjYW5uaW5nIG9mIFZFU0EgbW9kZXMgZmFpbGVkIiBtZXNzYWdlKSwKK3lvdSBjYW4gc3dpdGNoIGl0IG9mZiBhbmQgcmVwb3J0IGFzIGEgYnVnLgorCisgICBDT05GSUdfVklERU9fQ09NUEFDVCAtIGVuYWJsZXMgY29tcGFjdGluZyBvZiB0aGUgdmlkZW8gbW9kZSBsaXN0LiBJZiB0aGVyZQorYXJlIG1vcmUgbW9kZXMgd2l0aCB0aGUgc2FtZSBzY3JlZW4gc2l6ZSwgb25seSB0aGUgZmlyc3Qgb25lIGlzIGtlcHQgKHNlZSBhYm92ZQorZm9yIG1vcmUgaW5mbyBvbiBtb2RlIG9yZGVyaW5nKS4gSG93ZXZlciwgaW4gdmVyeSBzdHJhbmdlIGNhc2VzIGl0J3MgcG9zc2libGUKK3RoYXQgdGhlIGZpcnN0ICJ2ZXJzaW9uIiBvZiB0aGUgbW9kZSBkb2Vzbid0IHdvcmsgYWx0aG91Z2ggc29tZSBvZiB0aGUgb3RoZXJzCitkbyAtLSBpbiB0aGlzIGNhc2UgdHVybiB0aGlzIHN3aXRjaCBvZmYgdG8gc2VlIHRoZSByZXN0LgorCisgICBDT05GSUdfVklERU9fUkVUQUlOIC0gZW5hYmxlcyByZXRhaW5pbmcgb2Ygc2NyZWVuIGNvbnRlbnRzIHdoZW4gc3dpdGNoaW5nCit2aWRlbyBtb2Rlcy4gV29ya3Mgb25seSB3aXRoIHNvbWUgYm9vdCBsb2FkZXJzIHdoaWNoIGxlYXZlIGVub3VnaCByb29tIGZvciB0aGUKK2J1ZmZlci4gKElmIHlvdSBoYXZlIG9sZCBMSUxPLCB5b3UgY2FuIGFkanVzdCBoZWFwX2VuZF9wdHIgYW5kIGxvYWRmbGFncworaW4gc2V0dXAuUywgYnV0IGl0J3MgYmV0dGVyIHRvIHVwZ3JhZGUgdGhlIGJvb3QgbG9hZGVyLi4uKQorCisgICBDT05GSUdfVklERU9fTE9DQUwgLSBlbmFibGVzIGluY2x1c2lvbiBvZiAibG9jYWwgbW9kZXMiIGluIHRoZSBsaXN0LiBUaGUKK2xvY2FsIG1vZGVzIGFyZSBhZGRlZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3Qgbm90IGRlcGVuZGluZworb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gVGhlIGxvY2FsIG1vZGVzIGFyZSBsaXN0ZWQgaW4gdGhlIHNvdXJjZSB0ZXh0IGFmdGVyCit0aGUgImxvY2FsX21vZGVfdGFibGU6IiBsaW5lLiBUaGUgY29tbWVudCBiZWZvcmUgdGhpcyBsaW5lIGRlc2NyaWJlcyB0aGUgZm9ybWF0CitvZiB0aGUgdGFibGUgKHdoaWNoIGFsc28gaW5jbHVkZXMgYSB2aWRlbyBjYXJkIG5hbWUgdG8gYmUgZGlzcGxheWVkIG9uIHRoZQordG9wIG9mIHRoZSBtZW51KS4KKworICAgQ09ORklHX1ZJREVPXzQwMF9IQUNLIC0gZm9yY2Ugc2V0dGluZyBvZiA0MDAgc2NhbiBsaW5lcyBmb3Igc3RhbmRhcmQgVkdBCittb2Rlcy4gVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBjZXJ0YWluIGJ1Z2d5IEJJT1NlcyB3aGljaCBkcmF3Citzb21lIHVzZWxlc3MgbG9nbyB1c2luZyBmb250IGRvd25sb2FkIGFuZCB0aGVuIGZhaWwgdG8gcmVzZXQgdGhlIGNvcnJlY3QgbW9kZS4KK0Rvbid0IHVzZSB1bmxlc3MgbmVlZGVkIGFzIGl0IGZvcmNlcyByZXNldHRpbmcgdGhlIHZpZGVvIGNhcmQuCisKKyAgIENPTkZJR19WSURFT19HRlhfSEFDSyAtIGluY2x1ZGVzIHNwZWNpYWwgaGFjayBmb3Igc2V0dGluZyBvZiBncmFwaGljcyBtb2RlcwordG8gYmUgdXNlZCBsYXRlciBieSBzcGVjaWFsIGRyaXZlcnMgKGUuZy4sIDgwMHg2MDAgb24gSUJNIFRoaW5rUGFkIC0tIHNlZQorZnRwOi8vZnRwLnBoeXMua2Vpby5hYy5qcC9wdWIvWEZyZWU4Ni84MDB4NjAwL1hGODZDb25maWdzL1hGODZDb25maWcuSUJNX1RQNTYwKS4KK0FsbG93cyB0byBzZXQgX2FueV8gQklPUyBtb2RlIGluY2x1ZGluZyBncmFwaGljIG9uZXMgYW5kIGZvcmNpbmcgc3BlY2lmaWMKK3RleHQgc2NyZWVuIHJlc29sdXRpb24gaW5zdGVhZCBvZiBwZWVraW5nIGl0IGZyb20gQklPUyB2YXJpYWJsZXMuIERvbid0IHVzZQordW5sZXNzIHlvdSB0aGluayB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gVG8gYWN0aXZhdGUgdGhpcyBzZXR1cCwgdXNlCittb2RlIG51bWJlciAweDBmMDggKHNlZSBzZWN0aW9uIDMpLgorCis1LiBTdGlsbCBkb2Vzbid0IHdvcms/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgICBXaGVuIHRoZSBtb2RlIGRldGVjdGlvbiBkb2Vzbid0IHdvcmsgKGUuZy4sIHRoZSBtb2RlIGxpc3QgaXMgaW5jb3JyZWN0IG9yCit0aGUgbWFjaGluZSBoYW5ncyBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgdGhlIG1lbnUpLCB0cnkgdG8gc3dpdGNoIG9mZiBzb21lIG9mCit0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpc3RlZCBpbiBzZWN0aW9uIDQuIElmIGl0IGZhaWxzLCB5b3UgY2FuIHN0aWxsIHVzZQoreW91ciBrZXJuZWwgd2l0aCB0aGUgdmlkZW8gbW9kZSBzZXQgZGlyZWN0bHkgdmlhIHRoZSBrZXJuZWwgcGFyYW1ldGVyLgorCisgICBJbiBlaXRoZXIgY2FzZSwgcGxlYXNlIHNlbmQgbWUgYSBidWcgcmVwb3J0IGNvbnRhaW5pbmcgd2hhdCBfZXhhY3RseV8KK2hhcHBlbnMgYW5kIGhvdyBkbyB0aGUgY29uZmlndXJhdGlvbiBzd2l0Y2hlcyBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZiB0aGUgYnVnLgorCisgICBJZiB5b3Ugc3RhcnQgTGludXggZnJvbSBNJC1ET1MsIHlvdSBtaWdodCBhbHNvIHVzZSBzb21lIERPUyB0b29scyBmb3IKK3ZpZGVvIG1vZGUgc2V0dGluZy4gSW4gdGhpcyBjYXNlLCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSAweDBmMDQgbW9kZSAoImxlYXZlCitjdXJyZW50IHNldHRpbmdzIikgdG8gTGludXgsIGJlY2F1c2UgaWYgeW91IGRvbid0IGFuZCB5b3UgdXNlIGFueSBub24tc3RhbmRhcmQKK21vZGUsIExpbnV4IHdpbGwgc3dpdGNoIHRvIDgweDI1IGF1dG9tYXRpY2FsbHkuCisKKyAgIElmIHlvdSBzZXQgc29tZSBleHRlbmRlZCBtb2RlIGFuZCB0aGVyZSdzIG9uZSBvciBtb3JlIGV4dHJhIGxpbmVzIG9uIHRoZQorYm90dG9tIG9mIHRoZSBkaXNwbGF5IGNvbnRhaW5pbmcgYWxyZWFkeSBzY3JvbGxlZC1vdXQgdGV4dCwgeW91ciBWR0EgQklPUworY29udGFpbnMgdGhlIG1vc3QgY29tbW9uIHZpZGVvIEJJT1MgYnVnIGNhbGxlZCAiaW5jb3JyZWN0IHZlcnRpY2FsIGRpc3BsYXkKK2VuZCBzZXR0aW5nIi4gQWRkaW5nIDB4ODAwMCB0byB0aGUgbW9kZSBJRCBtaWdodCBmaXggdGhlIHByb2JsZW0uIFVuZm9ydHVuYXRlbHksCit0aGlzIG11c3QgYmUgZG9uZSBtYW51YWxseSAtLSBubyBhdXRvZGV0ZWN0aW9uIG1lY2hhbmlzbXMgYXJlIGF2YWlsYWJsZS4KKworICAgSWYgeW91IGhhdmUgYSBWR0EgY2FyZCBhbmQgeW91ciBkaXNwbGF5IHN0aWxsIGxvb2tzIGFzIG9uIEVHQSwgeW91ciBCSU9TCitpcyBwcm9iYWJseSBicm9rZW4gYW5kIHlvdSBuZWVkIHRvIHNldCB0aGUgQ09ORklHX1ZJREVPXzQwMF9IQUNLIHN3aXRjaCB0bworZm9yY2Ugc2V0dGluZyBvZiB0aGUgY29ycmVjdCBtb2RlLgorCis2LiBIaXN0b3J5Cit+fn5+fn5+fn5+CisxLjAgKD8/LU5vdi05NSkJRmlyc3QgdmVyc2lvbiBzdXBwb3J0aW5nIGFsbCBhZGFwdGVycyBzdXBwb3J0ZWQgYnkgdGhlIG9sZAorCQlzZXR1cC5TICsgQ2lycnVzIExvZ2ljIDU0WFguIFByZXNlbnQgaW4gc29tZSAxLjMuND8ga2VybmVscworCQlhbmQgdGhlbiByZW1vdmVkIGR1ZSB0byBpbnN0YWJpbGl0eSBvbiBzb21lIG1hY2hpbmVzLgorMi4wICgyOC1KYW4tOTYpCVJld3JpdHRlbiBmcm9tIHNjcmF0Y2guIENpcnJ1cyBMb2dpYyA2NFhYIHN1cHBvcnQgYWRkZWQsIGFsbW9zdAorCQlldmVyeXRoaW5nIGlzIGNvbmZpZ3VyYWJsZSwgdGhlIFZFU0Egc3VwcG9ydCBzaG91bGQgYmUgbXVjaCBtb3JlCisJCXN0YWJsZSwgZXhwbGljaXQgbW9kZSBudW1iZXJpbmcgYWxsb3dlZCwgInNjYW4iIGltcGxlbWVudGVkIGV0Yy4KKzIuMSAoMzAtSmFuLTk2KSBWRVNBIG1vZGVzIG1vdmVkIHRvIDB4MjAwLTB4M2ZmLiBNb2RlIHNlbGVjdGlvbiBieSByZXNvbHV0aW9uCisJCXN1cHBvcnRlZC4gRmV3IGJ1Z3MgZml4ZWQuIFZFU0EgbW9kZXMgYXJlIGxpc3RlZCBwcmlvciB0bworCQltb2RlcyBzdXBwbGllZCBieSBTVkdBIGF1dG9kZXRlY3Rpb24gYXMgdGhleSBhcmUgbW9yZSByZWxpYWJsZS4KKwkJQ0xHRCBhdXRvZGV0ZWN0IHdvcmtzIGJldHRlci4gRG9lc24ndCBkZXBlbmQgb24gODB4MjUgYmVpbmcKKwkJYWN0aXZlIHdoZW4gc3RhcnRlZC4gU2Nhbm5pbmcgZml4ZWQuIDgweDQzIChhbnkgVkdBKSBhZGRlZC4KKwkJQ29kZSBjbGVhbmVkIHVwLgorMi4yICgwMS1GZWItOTYpCUVHQSA4MHg0MyBmaXhlZC4gVkVTQSBleHRlbmRlZCB0byAweDIwMC0weDRmZiAobm9uLXN0YW5kYXJkIDAyWFgKKwkJVkVTQSBtb2RlcyB3b3JrIG5vdykuIERpc3BsYXkgZW5kIGJ1ZyB3b3JrYXJvdW5kIHN1cHBvcnRlZC4KKwkJU3BlY2lhbCBtb2RlcyByZW51bWJlcmVkIHRvIGFsbG93IGFkZGluZyBvZiB0aGUgInJlY2FsY3VsYXRlIgorCQlmbGFnLCAweGZmZmYgYW5kIDB4ZmZmZSBiZWNhbWUgYWxpYXNlcyBpbnN0ZWFkIG9mIHJlYWwgSURzLgorCQlTY3JlZW4gY29udGVudHMgcmV0YWluZWQgZHVyaW5nIG1vZGUgY2hhbmdlcy4KKzIuMyAoMTUtTWFyLTk2KQlDaGFuZ2VkIHRvIHdvcmsgd2l0aCAxLjMuNzQga2VybmVsLgorMi40ICgxOC1NYXItOTYpCUFkZGVkIHBhdGNoZXMgYnkgSGFucyBMZXJtZW4gZml4aW5nIGEgbWVtb3J5IG92ZXJ3cml0ZSBwcm9ibGVtCisJCXdpdGggc29tZSBib290IGxvYWRlcnMuIE1lbW9yeSBtYW5hZ2VtZW50IHJld3JpdHRlbiB0byByZWZsZWN0CisJCXRoZXNlIGNoYW5nZXMuIFVuZm9ydHVuYXRlbHksIHNjcmVlbiBjb250ZW50cyByZXRhaW5pbmcgd29ya3MKKwkJb25seSB3aXRoIHNvbWUgbG9hZGVycyBub3cuCisJCUFkZGVkIGEgVHNlbmcgMTMyeDYwIG1vZGUuCisyLjUgKDE5LU1hci05NikJRml4ZWQgYSBWRVNBIG1vZGUgc2Nhbm5pbmcgYnVnIGludHJvZHVjZWQgaW4gMi40LgorMi42ICgyNS1NYXItOTYpCVNvbWUgVkVTQSBCSU9TIGVycm9ycyBub3QgcmVwb3J0ZWQgLS0gaXQgZml4ZXMgZXJyb3IgcmVwb3J0cyBvbgorCQlzZXZlcmFsIGNhcmRzIHdpdGggYnJva2VuIFZFU0EgY29kZSAoZS5nLiwgQVRJIFZHQSkuCisyLjcgKDA5LUFwci05NikJLSBBY2NlcHRlZCBhbGwgVkVTQSBtb2RlcyBpbiByYW5nZSAweDEwMCB0byAweDdmZiwgYmVjYXVzZSBzb21lCisJCSAgY2FyZHMgdXNlIHZlcnkgc3RyYW5nZSBtb2RlIG51bWJlcnMuCisJCS0gQWRkZWQgUmVhbHRlayBWR0EgbW9kZXMgKHRoYW5rcyB0byBHb256YWxvIFRvcm5hcmlhKS4KKwkJLSBIYXJkd2FyZSB0ZXN0aW5nIG9yZGVyIHNsaWdodGx5IGNoYW5nZWQsIHRlc3RzIGJhc2VkIG9uIFJPTQorCQkgIGNvbnRlbnRzIGRvbmUgYXMgZmlyc3QuCisJCS0gQWRkZWQgc3VwcG9ydCBmb3Igc3BlY2lhbCBWaWRlbzcgbW9kZSBzd2l0Y2hpbmcgZnVuY3Rpb25zCisJCSAgKHRoYW5rcyB0byBUb20gVmFuZGVyIEFhKS4KKwkJLSBBZGRlZCA0ODAtc2NhbmxpbmUgbW9kZXMgKGVzcGVjaWFsbHkgdXNlZnVsIGZvciBub3RlYm9va3MsCisJCSAgb3JpZ2luYWwgdmVyc2lvbiB3cml0dGVuIGJ5IGhoYW5lbWFhQGNzLnJ1dS5ubCwgcGF0Y2hlZCBieQorCQkgIEplZmYgQ2h1YSwgcmV3cml0dGVuIGJ5IG1lKS4KKwkJLSBTY3JlZW4gc3RvcmUvcmVzdG9yZSBmaXhlZC4KKzIuOCAoMTQtQXByLTk2KQktIFByZXZpb3VzIHJlbGVhc2Ugd2FzIG5vdCBjb21waWxhYmxlIHdpdGhvdXQgQ09ORklHX1ZJREVPX1NWR0EuCisJCS0gQmV0dGVyIHJlY29nbml0aW9uIG9mIHRleHQgbW9kZXMgZHVyaW5nIG1vZGUgc2Nhbi4KKzIuOSAoMTItTWF5LTk2KQktIElnbm9yZWQgVkVTQSBtb2RlcyAweDgwIC0gMHhmZiAobW9yZSBWRVNBIEJJT1MgYnVncyEpCisyLjEwICgxMS1Ob3YtOTYpLSBUaGUgd2hvbGUgdGhpbmcgbWFkZSBvcHRpb25hbC4KKwkJLSBBZGRlZCB0aGUgQ09ORklHX1ZJREVPXzQwMF9IQUNLIHN3aXRjaC4KKwkJLSBBZGRlZCB0aGUgQ09ORklHX1ZJREVPX0dGWF9IQUNLIHN3aXRjaC4KKwkJLSBDb2RlIGNsZWFudXAuCisyLjExICgwMy1NYXktOTcpLSBZZXQgYW5vdGhlciBjbGVhbnVwLCBub3cgaW5jbHVkaW5nIGFsc28gdGhlIGRvY3VtZW50YXRpb24uCisJCS0gRGlyZWN0IHRlc3Rpbmcgb2YgU1ZHQSBhZGFwdGVycyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQsIGBzY2FuJworCQkgIG9mZmVyZWQgZXhwbGljaXRseSBvbiB0aGUgcHJvbXB0IGxpbmUuCisJCS0gUmVtb3ZlZCB0aGUgZG9jIHNlY3Rpb24gZGVzY3JpYmluZyBhZGRpbmcgb2YgbmV3IHByb2JpbmcKKwkJICBmdW5jdGlvbnMgYXMgSSB0cnkgdG8gZ2V0IHJpZCBvZiBfYWxsXyBoYXJkd2FyZSBwcm9iaW5nIGhlcmUuCisyLjEyICgyNS1NYXktOTgpLSBBZGRlZCBzdXBwb3J0IGZvciBWRVNBIGZyYW1lIGJ1ZmZlciBncmFwaGljcy4KKzIuMTMgKDE0LU1heS05OSktIE1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N4LnR4dCBiL0RvY3VtZW50YXRpb24vc3gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNGVmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N4LnR4dApAQCAtMCwwICsxLDI5NCBAQAorCisgICAgICBzeC50eHQgIC0tIHNwZWNpYWxpeCBTWC9TSSBtdWx0aXBvcnQgc2VyaWFsIGRyaXZlciByZWFkbWUuCisKKworCisgICAgICBDb3B5cmlnaHQgKEMpIDE5OTcgIFJvZ2VyIFdvbGZmIChSLkUuV29sZmZAQml0V2l6YXJkLm5sKQorCisgICAgICBTcGVjaWFsaXggcGF5cyBmb3IgdGhlIGRldmVsb3BtZW50IGFuZCBzdXBwb3J0IG9mIHRoaXMgZHJpdmVyLgorICAgICAgUGxlYXNlIERPIGNvbnRhY3Qgc3VwcG9ydEBzcGVjaWFsaXguY28udWsgaWYgeW91IHJlcXVpcmUKKyAgICAgIHN1cHBvcnQuCisKKyAgICAgIFRoaXMgZHJpdmVyIHdhcyBkZXZlbG9wZWQgaW4gdGhlIEJpdFdpemFyZCBsaW51eCBkZXZpY2UKKyAgICAgIGRyaXZlciBzZXJ2aWNlLiBJZiB5b3UgcmVxdWlyZSBhIGxpbnV4IGRldmljZSBkcml2ZXIgZm9yIHlvdXIKKyAgICAgIHByb2R1Y3QsIHBsZWFzZSBjb250YWN0IGRldmljZXNAQml0V2l6YXJkLm5sIGZvciBhIHF1b3RlLgorCisgICAgICAoSGlzdG9yeSkKKyAgICAgIFRoZXJlIHVzZWQgdG8gYmUgYW4gU0kgZHJpdmVyIGJ5IFNpbW9uIEFsbGFuLiBUaGlzIGlzIGEgY29tcGxldGUgCisgICAgICByZXdyaXRlICBmcm9tIHNjcmF0Y2guIEp1c3QgYSBmZXcgbGluZXMtb2YtY29kZSBoYXZlIGJlZW4gc25hdGNoZWQuCisKKyAgICAgIChTb3VyY2VzKQorICAgICAgU3BlY2lhbGl4IGRvY3VtZW50IG51bWJlciA2MjEwMDI4OiBTWCBIb3N0IENhcmQgYW5kIERvd25sb2FkIENvZGUKKyAgICAgIFNvZnR3YXJlIEZ1bmN0aW9uYWwgU3BlY2lmaWNhdGlvbi4KKworICAgICAgKENvcHlpbmcpCisgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgICBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwKKyAgICAgIFVTQS4KKyAgICAgIAorICAgICAgKEFkZGVuZHVtKQorICAgICAgSSdkIGFwcHJlY2lhdGUgaXQgdGhhdCBpZiB5b3UgaGF2ZSBmaXhlcywgdGhhdCB5b3Ugc2VuZCB0aGVtCisgICAgICB0byBtZSBmaXJzdC4gCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworVGhpcyBmaWxlIGNvbnRhaW5zIHNvbWUgcmFuZG9tIGluZm9ybWF0aW9uLCB0aGF0IEkgbGlrZSB0byBoYXZlIG9ubGluZQoraW5zdGVhZCBvZiBpbiBhIG1hbnVhbCB0aGF0IGNhbiBnZXQgbG9zdC4gRXZlciBtaXNwbGFjZSB5b3VyIExpbnV4CitrZXJuZWwgc291cmNlcz8gIEFuZCB0aGUgbWFudWFsIG9mIG9uZSBvZiB0aGUgYm9hcmRzIGluIHlvdXIgY29tcHV0ZXI/CisKKworVGhlb3J5IG9mIG9wZXJhdGlvbgorPT09PT09PT09PT09PT09PT09PQorCitBbiBpbXBvcnRhbnQgdGhpbmcgdG8ga25vdyBpcyB0aGF0IHRoZSBkcml2ZXIgaXRzZWxmIGRvZXNuJ3QgaGF2ZSB0aGUKK2Zpcm13YXJlIGZvciB0aGUgY2FyZC4gVGhpcyBtZWFucyB0aGF0IHlvdSBuZWVkIHRoZSBzZXBhcmF0ZSBwYWNrYWdlCisic3hfZmlybXdhcmUiLiBGb3Igbm93IHlvdSBjYW4gZ2V0IHRoZSBzb3VyY2UgYXQKKworCWZ0cDovL2Z0cC5iaXR3aXphcmQubmwvc3BlY2lhbGl4L3N4X2Zpcm13YXJlXzx2ZXJzaW9uPi50Z3oKKworVGhlIGZpcm13YXJlIGxvYWQgbmVlZHMgYSAibWlzYyIgZGV2aWNlLCBzbyB5b3UnbGwgbmVlZCB0byBlbmFibGUgdGhlCisiU3VwcG9ydCBmb3IgdXNlciBtaXNjIGRldmljZSBtb2R1bGVzIiBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLgorVGhlIG1pc2MgZGV2aWNlIG5lZWRzIHRvIGJlIGNhbGxlZCAiL2Rldi9zcGVjaWFsaXhfc3hjdGwiLiBJdCBuZWVkcworbWlzYyBtYWpvciAxMCwgYW5kIG1pbm9yIG51bWJlciAxNjcgKGFzc2lnbmVkIGJ5IEhQQSkuIFRoZSBzZWN0aW9uCitvbiBjcmVhdGluZyBkZXZpY2UgZmlsZXMgYmVsb3cgYWxzbyBjcmVhdGVzIHRoaXMgZGV2aWNlLiAKKworQWZ0ZXIgbG9hZGluZyB0aGUgc3gubyBtb2R1bGUgaW50byB5b3VyIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIHJlcG9ydAordGhlIG51bWJlciBvZiBjYXJkcyBkZXRlY3RlZCwgYnV0IGJlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGFueQorZmlybXdhcmUsIGl0IHdpbGwgbm90IGJlIGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcG9ydHMuIE9ubHkKK3doZW4geW91IHRoZW4gcnVuICJzeF9maXJtd2FyZSIgd2lsbCB0aGUgZmlybXdhcmUgYmUgZG93bmxvYWRlZCBhbmQKK3RoZSByZXN0IG9mIHRoZSBkcml2ZXIgaW5pdGlhbGl6ZWQuIEF0IHRoYXQgdGltZSB0aGUgc3hfZmlybXdhcmUKK3Byb2dyYW0gd2lsbCByZXBvcnQgdGhlIG51bWJlciBvZiBwb3J0cyBpbnN0YWxsZWQuCisKK0luIGNvbnRyYXN0IHdpdGggbWFueSBvdGhlciBtdWx0aSBwb3J0IHNlcmlhbCBjYXJkcywgc29tZSBvZiB0aGUgZGF0YQorc3RydWN0dXJlcyBhcmUgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgY2FyZCBrbm93cyB0aGUgbnVtYmVyIG9mIHBvcnRzCit0aGF0IGFyZSBjb25uZWN0ZWQuIFRoaXMgbWVhbnMgd2Ugd29uJ3Qgd2FzdGUgbWVtb3J5IGZvciAxMjAgcG9ydAorZGVzY3JpcHRvciBzdHJ1Y3R1cmVzIHdoZW4geW91IG9ubHkgaGF2ZSA4IHBvcnRzLiBJZiB5b3UgZXhwZXJpZW5jZQorcHJvYmxlbXMgZHVlIHRvIHRoaXMsIHBsZWFzZSByZXBvcnQgdGhlbTogSSBoYXZlbid0IHNlZW4gYW55LgorCisKK0ludGVycnVwdHMKKz09PT09PT09PT0KKworQSBtdWx0aSBwb3J0IHNlcmlhbCBjYXJkLCB3b3VsZCBnZW5lcmF0ZSBhIGhvcnJlbmRvdXMgYW1vdW50IG9mCitpbnRlcnJ1cHRzIGlmIGl0IHdvdWxkIGludGVycnVwdCB0aGUgQ1BVIGZvciBldmVyeSByZWNlaXZlZAorY2hhcmFjdGVyLiBFdmVuIG1vcmUgdGhhbiAxMCB5ZWFycyBhZ28sIHRoZSB0cmljayBub3QgdG8gdXNlCitpbnRlcnJ1cHRzIGJ1dCB0byBwb2xsIHRoZSBzZXJpYWwgY2FyZHMgd2FzIGludmVudGVkLgorCitUaGUgU1ggY2FyZCBhbGxvdyB1cyB0byBkbyB0aGlzIHR3byB3YXlzLiBGaXJzdCB0aGUgY2FyZCBsaW1pdHMgaXRzCitvd24gaW50ZXJydXB0IHJhdGUgdG8gYSByYXRlIHRoYXQgd29uJ3Qgb3ZlcndoZWxtIHRoZSBDUFUuIFNlY29uZGx5LAord2UgY291bGQgZm9yZ2V0IGFib3V0IHRoZSBjYXJkcyBpbnRlcnJ1cHQgY29tcGxldGVseSBhbmQgdXNlIHRoZQoraW50ZXJuYWwgdGltZXIgZm9yIHRoaXMgcHVycG9zZS4KKworUG9sbGluZyB0aGUgY2FyZCBjYW4gdGFrZSB1cCB0byBhIGZldyBwZXJjZW50IG9mIHlvdXIgQ1BVLiBVc2luZyB0aGUKK2ludGVycnVwdHMgd291bGQgYmUgYmV0dGVyIGlmIHlvdSBoYXZlIG1vc3Qgb2YgdGhlIHBvcnRzIGlkbGUuIFVzaW5nCit0aW1lci1iYXNlZCBwb2xsaW5nIGlzIGJldHRlciBpZiB5b3VyIGNhcmQgYWxtb3N0IGFsd2F5cyBoYXMgd29yayB0bworZG8uIFlvdSBzYXZlIHRoZSBzZXBhcmF0ZSBpbnRlcnJ1cHQgaW4gdGhhdCBjYXNlLgorCitJbiBhbnkgY2FzZSwgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGFsbCB0aGF0IG11Y2guIAorCitUaGUgbW9zdCBjb21tb24gcHJvYmxlbSB3aXRoIGludGVycnVwdHMgaXMgdGhhdCBmb3IgSVNBIGNhcmRzIGluIGEgUENJCitzeXN0ZW0gdGhlIEJJT1MgaGFzIHRvIGJlIHRvbGQgdG8gY29uZmlndXJlIHRoYXQgaW50ZXJydXB0IGFzICJsZWdhY3kKK0lTQSIuIE90aGVyd2lzZSB0aGUgY2FyZCBjYW4gcHVsbCBvbiB0aGUgaW50ZXJydXB0IGxpbmUgYWxsIGl0IHdhbnRzCitidXQgdGhlIENQVSB3b24ndCBzZWUgdGhpcy4KKworSWYgeW91IGNhbid0IGdldCB0aGUgaW50ZXJydXB0IHRvIHdvcmssIHJlbWVtYmVyIHRoYXQgcG9sbGluZyBtb2RlIGlzCittb3JlIGVmZmljaWVudCAocHJvdmlkZWQgeW91IGFjdHVhbGx5IHVzZSB0aGUgY2FyZCBpbnRlbnNpdmVseSkuCisKKworQWxsb3dlZCBDb25maWd1cmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PQorCitTb21lIGNvbmZpZ3VyYXRpb25zIGFyZSBkaXNhbGxvd2VkLiBFdmVuIHRob3VnaCBhdCBhIGdsYW5jZSB0aGV5IG1pZ2h0CitzZWVtIHRvIHdvcmssIHRoZXkgYXJlIGtub3duIHRvIGxvY2t1cCB0aGUgYnVzIGJldHdlZW4gdGhlIGhvc3QgY2FyZAorYW5kIHRoZSBkZXZpY2UgY29uY2VudHJhdG9ycy4gWW91IHNob3VsZCByZXNwZWN0IHRoZSBkcml2ZXJzIGRlY2lzaW9uCitub3QgdG8gc3VwcG9ydCBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHRoZXJlIGZvciBhIHJlYXNvbi4KKworV2FybmluZzogU2VyaW91c2x5IHRlY2huaWNhbCBzdHVmZiBhaGVhZC4gRXhlY3V0aXZlIHN1bW1hcnk6IERvbid0IHVzZQorU1ggY2FyZHMgZXhjZXB0IGNvbmZpZ3VyZWQgYXQgYSA2NGsgYm91bmRhcnkuIFNraXAgdGhlIG5leHQgcGFyYWdyYXBoLgorCitUaGUgU1ggY2FyZHMgY2FuIHRoZW9yZXRpY2FsbHkgYmUgcGxhY2VkIGF0IGEgMzJrIGJvdW5kYXJ5LiBTbyBmb3IKK2luc3RhbmNlIHlvdSBjYW4gcHV0IGFuIFNYIGNhcmQgYXQgMHhjODAwMC0weGQ3ZmZmLiBUaGlzIGlzIG5vdCBhCisicmVjb21tZW5kZWQgY29uZmlndXJhdGlvbiIuIElTQSBjYXJkcyBoYXZlIHRvIHRlbGwgdGhlIGJ1cyBjb250cm9sbGVyCitob3cgdGhleSBsaWtlIHRoZWlyIHRpbWluZy4gRHVlIHRvIHRpbWluZyBpc3N1ZXMgdGhleSBoYXZlIHRvIGRvIHRoaXMKK2Jhc2VkIG9uIHdoaWNoIDY0ayB3aW5kb3cgdGhlIGFkZHJlc3MgZmFsbHMgaW50by4gVGhpcyBtZWFucyB0aGF0IHRoZQorMzJrIHdpbmRvdyBiZWxvdyBhbmQgYWJvdmUgdGhlIFNYIGNhcmQgaGF2ZSB0byB1c2UgZXhhY3RseSB0aGUgc2FtZQordGltaW5nIGFzIHRoZSBTWCBjYXJkLiBUaGF0IHJlcG9ydGVkbHkgd29ya3MgZm9yIG90aGVyIFNYIGNhcmRzLiBCdXQKK3lvdSdyZSBzdGlsbCBsZWZ0IHdpdGggdHdvIHVzZWxlc3MgMzJrIHdpbmRvd3MgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQKK2J5IGFueWJvZHkgZWxzZS4KKworCitDb25maWd1cmluZyB0aGUgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09CisKK1BDSSBjYXJkcyBhcmUgYWx3YXlzIGRldGVjdGVkLiBUaGUgZHJpdmVyIGF1dG8tcHJvYmVzIGZvciBJU0EgY2FyZHMgYXQKK3NvbWUgc2Vuc2libGUgYWRkcmVzc2VzLiBQbGVhc2UgcmVwb3J0IGlmIHRoZSBhdXRvLXByb2JlIGNhdXNlcyB0cm91YmxlCitpbiB5b3VyIHN5c3RlbSwgb3Igd2hlbiBhIGNhcmQgaXNuJ3QgZGV0ZWN0ZWQuCisKK0knbSBhZnJhaWQgSSBoYXZlbid0IGltcGxlbWVudGVkICJrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMiIHlldC4KK1RoaXMgbWVhbnMgdGhhdCBpZiB0aGUgZGVmYXVsdCBkb2Vzbid0IHdvcmsgZm9yIHlvdSwgeW91IHNob3VsZG4ndCB1c2UKK3RoZSBjb21waWxlZC1pbnRvLXRoZS1rZXJuZWwgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiBVc2UgYSBtb2R1bGUKK2luc3RlYWQuICBJZiB5b3UgY29udmluY2UgbWUgdGhhdCB5b3UgbmVlZCB0aGlzLCBJJ2xsIG1ha2UgaXQgZm9yCit5b3UuIERlYWw/CisKK0knbSBhZnJhaWQgdGhhdCB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgYXJlIGEgYml0IGNsdW1zeS4gSWYgeW91IGhhdmUgYQorYmV0dGVyIGlkZWEsIHBsZWFzZSB0ZWxsIG1lLgorCitZb3UgY2FuIHNwZWNpZnkgc2V2ZXJhbCBwYXJhbWV0ZXJzOgorCisJc3hfcG9sbDogbnVtYmVyIG9mIGppZmZpZXMgYmV0d2VlbiB0aW1lci1iYXNlZCBwb2xscy4KKworCQlTZXQgdGhpcyB0byAiMCIgdG8gZGlzYWJsZSB0aW1lciBiYXNlZCBwb2xscy4gCisgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gb2YgY2FyZHMgd2l0aG91dCBhIHdvcmtpbmcgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgd2lsbCBmYWlsLgorCisJCVNldCB0aGlzIHRvICIxIiBpZiB5b3Ugd2FudCBhIHBvbGxpbmcgZHJpdmVyLiAKKwkJKG9uIEludGVsOiAxMDAgcG9sbHMgcGVyIHNlY29uZCkuIElmIHlvdSBkb24ndCB1c2UKKyAgICAgICAgICAgICAgICBmYXN0IGJhdWQgcmF0ZXMsIHlvdSBtaWdodCBjb25zaWRlciBhIHZhbHVlIGxpa2UgIjUiLiAKKyAgICAgICAgICAgICAgICAoSWYgeW91IGRvbid0IGtub3cgaG93IHRvIGRvIHRoZSBtYXRoLCB1c2UgMSkuCisKKwlzeF9zbG93cG9sbDogTnVtYmVyIG9mIGppZmZpZXMgYmV0d2VlbiB0aW1lci1iYXNlZCBwb2xscy4gCisgCQlTZXQgdGhpcyB0byAiMTAwIiB0byBwb2xsIG9uY2UgYSBzZWNvbmQuIAorCQlUaGlzIHNob3VsZCBnZXQgdGhlIGNhcmQgb3V0IG9mIGEgc3RhbGwgaWYgdGhlIGRyaXZlcgorICAgICAgICAgICAgICAgIGV2ZXIgbWlzc2VzIGFuIGludGVycnVwdC4gSSd2ZSBuZXZlciBzZWVuIHRoaXMgaGFwcGVuLAorICAgICAgICAgICAgICAgIGFuZCBpZiBpdCBkb2VzLCB0aGF0J3MgYSBidWcuIFRlbGwgbWUuIAorCisJc3hfbWF4aW50czogTnVtYmVyIG9mIGludGVycnVwdHMgdG8gcmVxdWVzdCBmcm9tIHRoZSBjYXJkLiAKKwkJVGhlIGNhcmQgbm9ybWFsbHkgbGltaXRzIGludGVycnVwdHMgdG8gYWJvdXQgMTAwIHBlcgorCQlzZWNvbmQgdG8gb2ZmbG9hZCB0aGUgaG9zdCBDUFUuIFlvdSBjYW4gaW5jcmVhc2UgdGhpcworCQludW1iZXIgdG8gcmVkdWNlIGxhdGVuY3kgb24gdGhlIGNhcmQgYSBsaXR0bGUuCisJCU5vdGUgdGhhdCBpZiB5b3UgZ2l2ZSBhIHZlcnkgaGlnaCBudW1iZXIgeW91IGNhbiBvdmVybG9hZAorCQl5b3VyIENQVSBhcyB3ZWxsIGFzIHRoZSBDUFUgb24gdGhlIGhvc3QgY2FyZC4gVGhpcyBzZXR0aW5nIAorCQlpcyBpbmFjY3VyYXRlIGFuZCBub3QgcmVjb21tZW5kZWQgZm9yIFNJIGNhcmRzIChCdXQgaXQgCisJCXdvcmtzKS4gCisKKwlzeF9pcnFtYXNrOiBUaGUgbWFzayBvZiBhbGxvd2FibGUgSVJRcyB0byB1c2UuIEkgc3VnZ2VzdCB5b3Ugc2V0IAorCQl0aGlzIHRvIDAgKGRpc2FibGUgSVJRcyBhbGwgdG9nZXRoZXIpIGFuZCB1c2UgcG9sbGluZyBpZiAKKwkJdGhlIGFzc2lnbm1lbnQgb2YgSVJRcyBiZWNvbWVzIHByb2JsZW1hdGljLiBUaGlzIGlzIGRlZmluZWQKKwkJYXMgdGhlIHN1bSBvZiAoMSA8PCBpcnEpICdzIHRoYXQgeW91IHdhbnQgdG8gYWxsb3cuIFNvIAorCQlzeF9pcnFtYXNrIG9mIDggKDEgPDwgMykgc3BlY2lmaWVzIHRoYXQgb25seSBpcnEgMyBtYXkKKwkJYmUgdXNlZCBieSB0aGUgU1ggZHJpdmVyLiBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRvIHRoZSAKKwkJZHJpdmVyOiAiRWl0aGVyIGlycSAxMSBvciAxMiBpcyBvayBmb3IgeW91IHRvIHVzZSIsIHRoZW4KKwkJc3BlY2lmeSAoMSA8PCAxMSkgfCAoMSA8PCAxMikgPSAweDE4MDAgLiAKKworCXN4X2RlYnVnOiBZb3UgY2FuIGVuYWJsZSBkaWZmZXJlbnQgc29ydHMgb2YgZGVidWcgdHJhY2VzIHdpdGggdGhpcy4gCisJCUF0ICItMSIgYWxsIGRlYnVnZ2luZyB0cmFjZXMgYXJlIGFjdGl2ZS4gWW91J2xsIGdldCBzZXZlcmFsCisJCXRpbWVzIG1vcmUgZGVidWdnaW5nIG91dHB1dCB0aGFuIHlvdSdsbCBnZXQgY2hhcmFjdGVycyAKKwkJdHJhbnNtaXR0ZWQuIAorCisKK0JhdWQgcmF0ZXMKKz09PT09PT09PT0KKworVGhlb3JldGljYWxseSBuZXcgU1hEQ3Mgc2hvdWxkIGJlIGNhcGFibGUgb2YgbW9yZSB0aGFuIDQ2MGsKK2JhdWQuIEhvd2V2ZXIgdGhlIGxpbmUgZHJpdmVycyB1c3VhbGx5IGdpdmUgdXAgYmVmb3JlIHRoYXQuICBBbHNvIHRoZQorQ1BVIG9uIHRoZSBjYXJkIG1heSBub3QgYmUgYWJsZSB0byBoYW5kbGUgOCBjaGFubmVscyBnb2luZyBhdCBmdWxsCitibGFzdCBhdCB0aGF0IHNwZWVkLiBNb3Jlb3ZlciwgdGhlIGJ1ZmZlcnMgYXJlIG5vdCBsYXJnZSBlbm91Z2ggdG8KK2FsbG93IG9wZXJhdGlvbiB3aXRoIDEwMCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQuIFlvdSdsbCBoYXZlIHRvIHJlYWxpemUKK3RoYXQgdGhlIGNhcmQgaGFzIGEgMjU2IGJ5dGUgYnVmZmVyLCBzbyB5b3UnbGwgaGF2ZSB0byBpbmNyZWFzZSB0aGUKK251bWJlciBvZiBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgaWYgeW91IGhhdmUgbW9yZSB0aGFuIDI1NioxMDAgYnl0ZXMKK3BlciBzZWNvbmQgdG8gdHJhbnNtaXQuICBJZiB5b3UgZG8gYW55IHBlcmZvcm1hbmNlIHRlc3RpbmcgaW4gdGhpcworYXJlYSwgSSdkIGJlIGdsYWQgdG8gaGVhciBmcm9tIHlvdS4uLgorCisoUHNzdCBMaW51eCB1c2Vycy4uLi4uIEkgdGhpbmsgdGhlIExpbnV4IGRyaXZlciBpcyBtb3JlIGVmZmljaWVudCB0aGFuCit0aGUgZHJpdmVyIGZvciBvdGhlciBPU2VzLiBJZiB5b3UgY2FuIGFuZCB3YW50IHRvIGJlbmNobWFyayB0aGVtCithZ2FpbnN0IGVhY2ggb3RoZXIsIGJlIG15IGd1ZXN0LCBhbmQgcmVwb3J0IHlvdXIgZmluZGluZ3MuLi4uLi4gOi0pCisKKworUG9ydHMgYW5kIGRldmljZXMKKz09PT09PT09PT09PT09PT09CisKK1BvcnQgMCBpcyB0aGUgdG9wIGNvbm5lY3RvciBvbiB0aGUgbW9kdWxlIGNsb3Nlc3QgdG8gdGhlIGhvc3QKK2NhcmQuIE9oLCB0aGUgcG9ydHMgb24gdGhlIFNYRENzIGFuZCBUQXMgYXJlIGxhYmVsbGVkIGZyb20gMSB0byA4CitpbnN0ZWFkIG9mIGZyb20gMCB0byA3LCBhcyB0aGV5IGFyZSBudW1iZXJlZCBieSBsaW51eC4gSSdtIHN0dWJib3JuIGluCit0aGlzOiBJIGtub3cgZm9yIHN1cmUgdGhhdCBJIHdvdWxkbid0IGJlIGFibGUgdG8gY2FsY3VsYXRlIHdoaWNoIHBvcnQKK2lzIHdoaWNoIGFueW1vcmUgaWYgSSB3b3VsZCBjaGFuZ2UgdGhhdC4uLi4KKworCitEZXZpY2VzOgorCitZb3Ugc2hvdWxkIG1ha2UgdGhlIGRldmljZSBmaWxlcyBhcyBmb2xsb3dzOgorCisjIS9iaW4vc2gKKyMgKEkgcmVjb21tZW5kIHRoYXQgeW91IGN1dC1hbmQtcGFzdGUgdGhpcyBpbnRvIGEgZmlsZSBhbmQgcnVuIHRoYXQpCitjZCAvZGV2Cit0PTAKK21rbm9kIHNwZWNpYWxpeF9zeGN0bCBjIDEwIDE2Nword2hpbGUgWyAkdCAtbHQgNjQgXQorICBkbyAKKyAgZWNobyAtbiAiJHQgIgorICBta25vZCB0dHlYJHQgYyAzMiAkdAorICBta25vZCBjdXgkdCAgYyAzMyAkdAorICB0PWBleHByICR0ICsgMWAKK2RvbmUKK2VjaG8gIiIKK3JtIC9ldGMvcHNkZXZ0YWIKK3BzID4gL2Rldi9udWxsCisKKworVGhpcyBjcmVhdGVzIDY0IGRldmljZXMuIElmIHlvdSBoYXZlIG1vcmUsIGluY3JlYXNlIHRoZSBjb25zdGFudCBvbgordGhlIGxpbmUgd2l0aCAid2hpbGUiLiBUaGUgZGV2aWNlcyBzdGFydCBhdCAwLCBhcyBpcyBjdXN0b21hcnkgb24KK0xpbnV4LiBTcGVjaWFsaXggc2VlbXMgdG8gbGlrZSBzdGFydGluZyB0aGUgbnVtYmVyaW5nIGF0IDEuIAorCitJZiB5b3VyIHN5c3RlbSBkb2Vzbid0IGNvbWUgd2l0aCB0aGVzZSBkZXZpY2VzIHByZS1pbnN0YWxsZWQsIGJ1ZyB5b3VyCitsaW51eC12ZW5kb3IgYWJvdXQgdGhpcy4gVGhleSBzaG91bGQgaGF2ZSB0aGVzZSBkZXZpY2VzCisicHJlLWluc3RhbGxlZCIgYmVmb3JlIHRoZSBuZXcgbWlsbGVubml1bS4gVGhlICJwcyIgc3R1ZmYgYXQgdGhlIGVuZAoraXMgdG8gInRlbGwiIHBzIHRoYXQgdGhlIG5ldyBkZXZpY2VzIGV4aXN0LgorCitPZmZpY2lhbGx5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYXJkcyBwZXIgY29tcHV0ZXIgaXMgNC4gVGhpcyBkcml2ZXIKK2hvd2V2ZXIgc3VwcG9ydHMgYXMgbWFueSBjYXJkcyBpbiBvbmUgbWFjaGluZSBhcyB5b3Ugd2FudC4gWW91J2xsIHJ1bgorb3V0IG9mIGludGVycnVwdHMgYWZ0ZXIgYSBmZXcsIGJ1dCB5b3UgY2FuIHN3aXRjaCB0byBwb2xsZWQgb3BlcmF0aW9uCit0aGVuLiBBdCBhYm91dCAyNTYgcG9ydHMgKE1vcmUgdGhhbiA4IGNhcmRzKSwgd2UgcnVuIG91dCBvZiBtaW5vcgorZGV2aWNlIG51bWJlcnMuIFNvcnJ5LiBJIHN1Z2dlc3QgeW91IGJ1eSBhIHNlY29uZCBjb21wdXRlci4uLi4gKE9yCitzd2l0Y2ggdG8gUklPKS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworICBGaXhlZCBidWdzIGFuZCByZXN0cmljdGlvbnM6CisJLSBIYW5ndXAgcHJvY2Vzc2luZy4gIAorCSAgLS0gRG9uZS4KKworCS0gdGhlIHdyaXRlIHBhdGggaW4gZ2VuZXJpY19zZXJpYWwgKGxvY2t1cCAvIG9vcHMpLiAKKwkgIC0tIERvbmUgKFVnbHk6IG5vdCB0aGUgd2F5IEkgd2FudCBpdC4gQ29waWVkIGZyb20gc2VyaWFsLmMpLgorCisgICAgICAgIC0gd3JpdGUgYnVmZmVyIGlzbid0IGZsdXNoZWQgYXQgY2xvc2UuCisJICAtLSBEb25lLiBJIHN0aWxsIHNlZW0gdG8gbG9zZSBhIGZldyBjaGFycyBhdCBjbG9zZS4gCisJICAgICBTb3JyeS4gSSB0aGluayB0aGF0IHRoaXMgaXMgYSBmaXJtd2FyZSBpc3N1ZS4gKC0+IFNwZWNpYWxpeCkKKworCS0gZHJhaW4gaGFyZHdhcmUgYmVmb3JlICBjaGFuZ2luZyB0ZXJtaW9zCisJLSBDaGFuZ2UgZGVidWcgb24gdGhlIGZseS4gCisJLSBJU0EgZnJlZSBpcnEgLTEuIChubyBmaXJtd2FyZSBsb2FkZWQpLgorCS0gYWRkaW5nIGM4MDAwIGFzIGEgcHJvYmUgYWRkcmVzcy4gQWRkZWQgd2FybmluZy4gCisJLSBBZGQgYSBSQU10ZXN0IGZvciB0aGUgUkFNIG9uIHRoZSBjYXJkLmMKKyAgICAgICAgLSBDcmFzaCB3aGVuIG9wZW5pbmcgYSBwb3J0ICJ3YXkiIG9mIHRoZSBudW1iZXIgb2YgYWxsb3dlZCBwb3J0cy4gCisgICAgICAgICAgKGZvciBleGFtcGxlIG9wZW5pbmcgcG9ydCA2MCB3aGVuIHRoZXJlIGFyZSBvbmx5IDI0IHBvcnRzIGF0dGFjaGVkKQorCS0gU29tZXRpbWVzIHRoZSB1c2UtY291bnQgc3RyYXlzIGEgYml0LiBBZnRlciBhIGZldyBob3VycyBvZgorICAgICAgICAgIHRlc3RpbmcgdGhlIHVzZSBjb3VudCBpcyBzb21ldGltZXMgIjMiLiBJZiB5b3UgYXJlIG5vdCBsaWtlCisgICAgICAgICAgbWUgYW5kIGNhbiByZW1lbWJlciB3aGF0IHlvdSBkaWQgdG8gZ2V0IGl0IHRoYXQgd2F5LCBJJ2QKKyAgICAgICAgICBhcHByZWNpYXRlIGFuIEVtYWlsLiBQb3NzaWJseSBmaXhlZC4gVGVsbCBtZSBpZiBhbnlvbmUgc3RpbGwKKyAgICAgICAgICBzZWVzIHRoaXMuCisJLSBUQXMgZG9uJ3Qgd29yayByaWdodCBpZiB5b3UgZG9uJ3QgY29ubmVjdCBhbGwgdGhlIG1vZGVtIGNvbnRyb2wKKwkgIHNpZ25hbHMuIFNYRENzIGRvLiBUMjI1IGZpcm13YXJlIHByb2JsZW0gLT4gU3BlY2lhbGl4LiAKKwkgIChNb3N0bHkgZml4ZWQgbm93LCBJIHRoaW5rLiBUZWxsIG1lIGlmIHlvdSBlbmNvdW50ZXIgdGhpcyEpCisKKyAgQnVncyAmIHJlc3RyaWN0aW9uczoKKworCS0gQXJiaXRyYXJ5IGJhdWQgcmF0ZXMuIFJlcXVpcmVzIGZpcm13YXJlIHVwZGF0ZS4gKC0+IFNwZWNpYWxpeCkKKworCS0gTG93IGxhdGVuY3kgKG1vc3RseSBmaXJtd2FyZSwgLT4gU3BlY2lhbGl4KQorCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMzMwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9SRUFETUUKQEAgLTAsMCArMSw3NSBAQAorRG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzLwkJa2VybmVsIHZlcnNpb24gMi4yLjEwCisJKGMpIDE5OTgsIDE5OTksICBSaWsgdmFuIFJpZWwgPHJpZWxAbmwubGludXgub3JnPgorCisnV2h5JywgSSBoZWFyIHlvdSBhc2ssICd3b3VsZCBhbnlvbmUgZXZlbiBfd2FudF8gZG9jdW1lbnRhdGlvbgorZm9yIHRoZW0gc3lzY3RsIGZpbGVzPyBJZiBhbnlib2R5IHJlYWxseSBuZWVkcyBpdCwgaXQncyBhbGwgaW4KK3RoZSBzb3VyY2UuLi4nCisKK1dlbGwsIHRoaXMgZG9jdW1lbnRhdGlvbiBpcyB3cml0dGVuIGJlY2F1c2Ugc29tZSBwZW9wbGUgZWl0aGVyCitkb24ndCBrbm93IHRoZXkgbmVlZCB0byB0d2VhayBzb21ldGhpbmcsIG9yIGJlY2F1c2UgdGhleSBkb24ndAoraGF2ZSB0aGUgdGltZSBvciBrbm93bGVkZ2UgdG8gcmVhZCB0aGUgc291cmNlIGNvZGUuCisKK0Z1cnRoZXJtb3JlLCB0aGUgcHJvZ3JhbW1lcnMgd2hvIGJ1aWx0IHN5c2N0bCBoYXZlIGJ1aWx0IGl0IHRvCitiZSBhY3R1YWxseSB1c2VkLCBub3QganVzdCBmb3IgdGhlIGZ1biBvZiBwcm9ncmFtbWluZyBpdCA6LSkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTGVnYWwgYmx1cmI6CisKK0FzIHVzdWFsLCB0aGVyZSBhcmUgdHdvIG1haW4gdGhpbmdzIHRvIGNvbnNpZGVyOgorMS4geW91IGdldCB3aGF0IHlvdSBwYXkgZm9yCisyLiBpdCdzIGZyZWUKKworVGhlIGNvbnNlcXVlbmNlcyBhcmUgdGhhdCBJIHdvbid0IGd1YXJhbnRlZSB0aGUgY29ycmVjdG5lc3Mgb2YKK3RoaXMgZG9jdW1lbnQsIGFuZCBpZiB5b3UgY29tZSB0byBtZSBjb21wbGFpbmluZyBhYm91dCBob3cgeW91CitzY3Jld2VkIHVwIHlvdXIgc3lzdGVtIGJlY2F1c2Ugb2Ygd3JvbmcgZG9jdW1lbnRhdGlvbiwgSSB3b24ndAorZmVlbCBzb3JyeSBmb3IgeW91LiBJIG1pZ2h0IGV2ZW4gbGF1Z2ggYXQgeW91Li4uCisKK0J1dCBvZiBjb3Vyc2UsIGlmIHlvdSBfZG9fIG1hbmFnZSB0byBzY3JldyB1cCB5b3VyIHN5c3RlbSB1c2luZworb25seSB0aGUgc3lzY3RsIG9wdGlvbnMgdXNlZCBpbiB0aGlzIGZpbGUsIEknZCBsaWtlIHRvIGhlYXIgb2YKK2l0LiBOb3Qgb25seSB0byBoYXZlIGEgZ3JlYXQgbGF1Z2gsIGJ1dCBhbHNvIHRvIG1ha2Ugc3VyZSB0aGF0Cit5b3UncmUgdGhlIGxhc3QgUlRGTWluZyBwZXJzb24gdG8gc2NyZXcgdXAuCisKK0luIHNob3J0LCBlLW1haWwgeW91ciBzdWdnZXN0aW9ucywgY29ycmVjdGlvbnMgYW5kIC8gb3IgaG9ycm9yCitzdG9yaWVzIHRvOiA8cmllbEBubC5saW51eC5vcmc+CisKK1JpayB2YW4gUmllbC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50cm9kdWN0aW9uOgorCitTeXNjdGwgaXMgYSBtZWFucyBvZiBjb25maWd1cmluZyBjZXJ0YWluIGFzcGVjdHMgb2YgdGhlIGtlcm5lbAorYXQgcnVuLXRpbWUsIGFuZCB0aGUgL3Byb2Mvc3lzLyBkaXJlY3RvcnkgaXMgdGhlcmUgc28gdGhhdCB5b3UKK2Rvbid0IGV2ZW4gbmVlZCBzcGVjaWFsIHRvb2xzIHRvIGRvIGl0IQorSW4gZmFjdCwgdGhlcmUgYXJlIG9ubHkgZm91ciB0aGluZ3MgbmVlZGVkIHRvIHVzZSB0aGVzZSBjb25maWcKK2ZhY2lsaXRpZXM6CistIGEgcnVubmluZyBMaW51eCBzeXN0ZW0KKy0gcm9vdCBhY2Nlc3MKKy0gY29tbW9uIHNlbnNlICh0aGlzIGlzIGVzcGVjaWFsbHkgaGFyZCB0byBjb21lIGJ5IHRoZXNlIGRheXMpCistIGtub3dsZWRnZSBvZiB3aGF0IGFsbCB0aG9zZSB2YWx1ZXMgbWVhbgorCitBcyBhIHF1aWNrICdscyAvcHJvYy9zeXMnIHdpbGwgc2hvdywgdGhlIGRpcmVjdG9yeSBjb25zaXN0cyBvZgorc2V2ZXJhbCAoYXJjaC1kZXBlbmRlbnQ/KSBzdWJkaXJzLiBFYWNoIHN1YmRpciBpcyBtYWlubHkgYWJvdXQKK29uZSBwYXJ0IG9mIHRoZSBrZXJuZWwsIHNvIHlvdSBjYW4gZG8gY29uZmlndXJhdGlvbiBvbiBhIHBpZWNlCitieSBwaWVjZSBiYXNpcywgb3IganVzdCBzb21lICd0aGVtYXRpYyBmcm9iYmluZycuCisKK1RoZSBzdWJkaXJzIGFyZSBhYm91dDoKK2FiaS8JCWV4ZWN1dGlvbiBkb21haW5zICYgcGVyc29uYWxpdGllcworZGVidWcvCQk8ZW1wdHk+CitkZXYvCQlkZXZpY2Ugc3BlY2lmaWMgaW5mb3JtYXRpb24gKGVnIGRldi9jZHJvbS9pbmZvKQorZnMvCQlzcGVjaWZpYyBmaWxlc3lzdGVtcworCQlmaWxlaGFuZGxlLCBpbm9kZSwgZGVudHJ5IGFuZCBxdW90YSB0dW5pbmcKKwkJYmluZm10X21pc2MgPERvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0Pgora2VybmVsLwkJZ2xvYmFsIGtlcm5lbCBpbmZvIC8gdHVuaW5nCisJCW1pc2NlbGxhbmVvdXMgc3R1ZmYKK25ldC8JCW5ldHdvcmtpbmcgc3R1ZmYsIGZvciBkb2N1bWVudGF0aW9uIGxvb2sgaW46CisJCTxEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvPgorcHJvYy8JCTxlbXB0eT4KK3N1bnJwYy8JCVNVTiBSZW1vdGUgUHJvY2VkdXJlIENhbGwgKE5GUykKK3ZtLwkJbWVtb3J5IG1hbmFnZW1lbnQgdHVuaW5nCisJCWJ1ZmZlciBhbmQgY2FjaGUgbWFuYWdlbWVudAorCitUaGVzZSBhcmUgdGhlIHN1YmRpcnMgSSBoYXZlIG9uIG15IHN5c3RlbS4gVGhlcmUgbWlnaHQgYmUgbW9yZQorb3Igb3RoZXIgc3ViZGlycyBpbiBhbm90aGVyIHNldHVwLiBJZiB5b3Ugc2VlIGFub3RoZXIgZGlyLCBJJ2QKK3JlYWxseSBsaWtlIHRvIGhlYXIgYWJvdXQgaXQgOi0pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9hYmkudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvYWJpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y0ZWJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvYWJpLnR4dApAQCAtMCwwICsxLDU0IEBACitEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvYWJpLyoga2VybmVsIHZlcnNpb24gMi42LjAudGVzdDIKKwkoYykgMjAwMywgIEZhYmlhbiBGcmVkZXJpY2sgPGZmcmVkZXJpY2tAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitGb3IgZ2VuZXJhbCBpbmZvIDogUkVBRE1FLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHBhdGggaXMgYmluYXJ5IGVtdWxhdGlvbiByZWxldmFudCBha2EgcGVyc29uYWxpdHkgdHlwZXMgYWthIGFiaS4KK1doZW4gYSBwcm9jZXNzIGlzIGV4ZWN1dGVkLCBpdCdzIGxpbmtlZCB0byBhbiBleGVjX2RvbWFpbiB3aG9zZQorcGVyc29uYWxpdHkgaXMgZGVmaW5lZCB1c2luZyB2YWx1ZXMgYXZhaWxhYmxlIGZyb20gL3Byb2Mvc3lzL2FiaS4KK1lvdSBjYW4gZmluZCBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgYWJpIGluIGluY2x1ZGUvbGludXgvcGVyc29uYWxpdHkuaC4KKworSGVyZSBhcmUgdGhlIGZpbGVzIGZlYXR1cmluZyBpbiAyLjYga2VybmVsIDoKKworLSBkZWZoYW5kbGVyX2NvZmYKKy0gZGVmaGFuZGxlcl9lbGYKKy0gZGVmaGFuZGxlcl9sY2FsbDcKKy0gZGVmaGFuZGxlcl9saWJjc28KKy0gZmFrZV91dHNuYW1lCistIHRyYWNlCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkZWZoYW5kbGVyX2NvZmY6CitkZWZpbmVkIHZhbHVlIDoKK1BFUl9TQ09TVlIzCisweDAwMDMgfCBTVElDS1lfVElNRU9VVFMgfCBXSE9MRV9TRUNPTkRTIHwgU0hPUlRfSU5PREUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RlZmhhbmRsZXJfZWxmOgorZGVmaW5lZCB2YWx1ZSA6CitQRVJfTElOVVgKKzAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RlZmhhbmRsZXJfbGNhbGw3OgorZGVmaW5lZCB2YWx1ZSA6CitQRVJfU1ZSNAorMHgwMDAxIHwgU1RJQ0tZX1RJTUVPVVRTIHwgTU1BUF9QQUdFX1pFUk8sCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkZWZoYW5kbGVyX2xpYnNjbzoKK2RlZmluZWQgdmFsdWU6CitQRVJfU1ZSNAorMHgwMDAxIHwgU1RJQ0tZX1RJTUVPVVRTIHwgTU1BUF9QQUdFX1pFUk8sCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitmYWtlX3V0c25hbWU6CitVbnVzZWQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3RyYWNlOgorVW51c2VkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9mcy50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9mcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2MmM2MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2ZzLnR4dApAQCAtMCwwICsxLDE1MCBAQAorRG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL2ZzLyoJa2VybmVsIHZlcnNpb24gMi4yLjEwCisJKGMpIDE5OTgsIDE5OTksICBSaWsgdmFuIFJpZWwgPHJpZWxAbmwubGludXgub3JnPgorCitGb3IgZ2VuZXJhbCBpbmZvIGFuZCBsZWdhbCBibHVyYiwgcGxlYXNlIGxvb2sgaW4gUkVBRE1FLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgY29udGFpbnMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHN5c2N0bCBmaWxlcyBpbgorL3Byb2Mvc3lzL2ZzLyBhbmQgaXMgdmFsaWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMi4KKworVGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGNhbiBiZSB1c2VkIHRvIHR1bmUgYW5kIG1vbml0b3IKK21pc2NlbGxhbmVvdXMgYW5kIGdlbmVyYWwgdGhpbmdzIGluIHRoZSBvcGVyYXRpb24gb2YgdGhlIExpbnV4CitrZXJuZWwuIFNpbmNlIHNvbWUgb2YgdGhlIGZpbGVzIF9jYW5fIGJlIHVzZWQgdG8gc2NyZXcgdXAgeW91cgorc3lzdGVtLCBpdCBpcyBhZHZpc2FibGUgdG8gcmVhZCBib3RoIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZQorYmVmb3JlIGFjdHVhbGx5IG1ha2luZyBhZGp1c3RtZW50cy4KKworQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL2ZzOgorLSBkZW50cnktc3RhdGUKKy0gZHF1b3QtbWF4CistIGRxdW90LW5yCistIGZpbGUtbWF4CistIGZpbGUtbnIKKy0gaW5vZGUtbWF4CistIGlub2RlLW5yCistIGlub2RlLXN0YXRlCistIG92ZXJmbG93dWlkCistIG92ZXJmbG93Z2lkCistIHN1cGVyLW1heAorLSBzdXBlci1ucgorCitEb2N1bWVudGF0aW9uIGZvciB0aGUgZmlsZXMgaW4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIGlzCitpbiBEb2N1bWVudGF0aW9uL2JpbmZtdF9taXNjLnR4dC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGVudHJ5LXN0YXRlOgorCitGcm9tIGxpbnV4L2ZzL2RlbnRyeS5jOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0cnVjdCB7CisgICAgICAgIGludCBucl9kZW50cnk7CisgICAgICAgIGludCBucl91bnVzZWQ7CisgICAgICAgIGludCBhZ2VfbGltaXQ7ICAgICAgICAgLyogYWdlIGluIHNlY29uZHMgKi8KKyAgICAgICAgaW50IHdhbnRfcGFnZXM7ICAgICAgICAvKiBwYWdlcyByZXF1ZXN0ZWQgYnkgc3lzdGVtICovCisgICAgICAgIGludCBkdW1teVsyXTsKK30gZGVudHJ5X3N0YXQgPSB7MCwgMCwgNDUsIDAsfTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitEZW50cmllcyBhcmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCwgYW5kCitucl9kZW50cnkgc2VlbXMgdG8gYmUgMCBhbGwgdGhlIHRpbWUuIEhlbmNlIGl0J3Mgc2FmZSB0bworYXNzdW1lIHRoYXQgb25seSBucl91bnVzZWQsIGFnZV9saW1pdCBhbmQgd2FudF9wYWdlcyBhcmUKK3VzZWQuIE5yX3VudXNlZCBzZWVtcyB0byBiZSBleGFjdGx5IHdoYXQgaXRzIG5hbWUgc2F5cy4KK0FnZV9saW1pdCBpcyB0aGUgYWdlIGluIHNlY29uZHMgYWZ0ZXIgd2hpY2ggZGNhY2hlIGVudHJpZXMKK2NhbiBiZSByZWNsYWltZWQgd2hlbiBtZW1vcnkgaXMgc2hvcnQgYW5kIHdhbnRfcGFnZXMgaXMKK25vbnplcm8gd2hlbiBzaHJpbmtfZGNhY2hlX3BhZ2VzKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCB0aGUKK2RjYWNoZSBpc24ndCBwcnVuZWQgeWV0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkcXVvdC1tYXggJiBkcXVvdC1ucjoKKworVGhlIGZpbGUgZHF1b3QtbWF4IHNob3dzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZWQgZGlzaworcXVvdGEgZW50cmllcy4KKworVGhlIGZpbGUgZHF1b3QtbnIgc2hvd3MgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgZGlzayBxdW90YQorZW50cmllcyBhbmQgdGhlIG51bWJlciBvZiBmcmVlIGRpc2sgcXVvdGEgZW50cmllcy4KKworSWYgdGhlIG51bWJlciBvZiBmcmVlIGNhY2hlZCBkaXNrIHF1b3RhcyBpcyB2ZXJ5IGxvdyBhbmQKK3lvdSBoYXZlIHNvbWUgYXdlc29tZSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHN5c3RlbSB1c2VycywKK3lvdSBtaWdodCB3YW50IHRvIHJhaXNlIHRoZSBsaW1pdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZmlsZS1tYXggJiBmaWxlLW5yOgorCitUaGUga2VybmVsIGFsbG9jYXRlcyBmaWxlIGhhbmRsZXMgZHluYW1pY2FsbHksIGJ1dCBhcyB5ZXQgaXQKK2RvZXNuJ3QgZnJlZSB0aGVtIGFnYWluLgorCitUaGUgdmFsdWUgaW4gZmlsZS1tYXggZGVub3RlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZS0KK2hhbmRsZXMgdGhhdCB0aGUgTGludXgga2VybmVsIHdpbGwgYWxsb2NhdGUuIFdoZW4geW91IGdldCBsb3RzCitvZiBlcnJvciBtZXNzYWdlcyBhYm91dCBydW5uaW5nIG91dCBvZiBmaWxlIGhhbmRsZXMsIHlvdSBtaWdodAord2FudCB0byBpbmNyZWFzZSB0aGlzIGxpbWl0LgorCitUaGUgdGhyZWUgdmFsdWVzIGluIGZpbGUtbnIgZGVub3RlIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkCitmaWxlIGhhbmRsZXMsIHRoZSBudW1iZXIgb2YgdW51c2VkIGZpbGUgaGFuZGxlcyBhbmQgdGhlIG1heGltdW0KK251bWJlciBvZiBmaWxlIGhhbmRsZXMuIFdoZW4gdGhlIGFsbG9jYXRlZCBmaWxlIGhhbmRsZXMgY29tZQorY2xvc2UgdG8gdGhlIG1heGltdW0sIGJ1dCB0aGUgbnVtYmVyIG9mIHVudXNlZCBmaWxlIGhhbmRsZXMgaXMKK3NpZ25pZmljYW50bHkgZ3JlYXRlciB0aGFuIDAsIHlvdSd2ZSBlbmNvdW50ZXJlZCBhIHBlYWsgaW4geW91ciAKK3VzYWdlIG9mIGZpbGUgaGFuZGxlcyBhbmQgeW91IGRvbid0IG5lZWQgdG8gaW5jcmVhc2UgdGhlIG1heGltdW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2lub2RlLW1heCwgaW5vZGUtbnIgJiBpbm9kZS1zdGF0ZToKKworQXMgd2l0aCBmaWxlIGhhbmRsZXMsIHRoZSBrZXJuZWwgYWxsb2NhdGVzIHRoZSBpbm9kZSBzdHJ1Y3R1cmVzCitkeW5hbWljYWxseSwgYnV0IGNhbid0IGZyZWUgdGhlbSB5ZXQuCisKK1RoZSB2YWx1ZSBpbiBpbm9kZS1tYXggZGVub3RlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5vZGUKK2hhbmRsZXJzLiBUaGlzIHZhbHVlIHNob3VsZCBiZSAzLTQgdGltZXMgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlCitpbiBmaWxlLW1heCwgc2luY2Ugc3RkaW4sIHN0ZG91dCBhbmQgbmV0d29yayBzb2NrZXRzIGFsc28KK25lZWQgYW4gaW5vZGUgc3RydWN0IHRvIGhhbmRsZSB0aGVtLiBXaGVuIHlvdSByZWd1bGFybHkgcnVuCitvdXQgb2YgaW5vZGVzLCB5b3UgbmVlZCB0byBpbmNyZWFzZSB0aGlzIHZhbHVlLgorCitUaGUgZmlsZSBpbm9kZS1uciBjb250YWlucyB0aGUgZmlyc3QgdHdvIGl0ZW1zIGZyb20KK2lub2RlLXN0YXRlLCBzbyB3ZSdsbCBza2lwIHRvIHRoYXQgZmlsZS4uLgorCitJbm9kZS1zdGF0ZSBjb250YWlucyB0aHJlZSBhY3R1YWwgbnVtYmVycyBhbmQgZm91ciBkdW1taWVzLgorVGhlIGFjdHVhbCBudW1iZXJzIGFyZSwgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSwgbnJfaW5vZGVzLAorbnJfZnJlZV9pbm9kZXMgYW5kIHByZXNocmluay4KKworTnJfaW5vZGVzIHN0YW5kcyBmb3IgdGhlIG51bWJlciBvZiBpbm9kZXMgdGhlIHN5c3RlbSBoYXMKK2FsbG9jYXRlZCwgdGhpcyBjYW4gYmUgc2xpZ2h0bHkgbW9yZSB0aGFuIGlub2RlLW1heCBiZWNhdXNlCitMaW51eCBhbGxvY2F0ZXMgdGhlbSBvbmUgcGFnZWZ1bCBhdCBhIHRpbWUuCisKK05yX2ZyZWVfaW5vZGVzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBmcmVlIGlub2RlcyAoPykgYW5kCitwcmVzaHJpbmsgaXMgbm9uemVybyB3aGVuIHRoZSBucl9pbm9kZXMgPiBpbm9kZS1tYXggYW5kIHRoZQorc3lzdGVtIG5lZWRzIHRvIHBydW5lIHRoZSBpbm9kZSBsaXN0IGluc3RlYWQgb2YgYWxsb2NhdGluZworbW9yZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworb3ZlcmZsb3dnaWQgJiBvdmVyZmxvd3VpZDoKKworU29tZSBmaWxlc3lzdGVtcyBvbmx5IHN1cHBvcnQgMTYtYml0IFVJRHMgYW5kIEdJRHMsIGFsdGhvdWdoIGluIExpbnV4CitVSURzIGFuZCBHSURzIGFyZSAzMiBiaXRzLiBXaGVuIG9uZSBvZiB0aGVzZSBmaWxlc3lzdGVtcyBpcyBtb3VudGVkCit3aXRoIHdyaXRlcyBlbmFibGVkLCBhbnkgVUlEIG9yIEdJRCB0aGF0IHdvdWxkIGV4Y2VlZCA2NTUzNSBpcyB0cmFuc2xhdGVkCit0byBhIGZpeGVkIHZhbHVlIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIGRpc2suCisKK1RoZXNlIHN5c2N0bHMgYWxsb3cgeW91IHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGZpeGVkIFVJRCBhbmQgR0lELgorVGhlIGRlZmF1bHQgaXMgNjU1MzQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N1cGVyLW1heCAmIHN1cGVyLW5yOgorCitUaGVzZSBudW1iZXJzIGNvbnRyb2wgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN1cGVyYmxvY2tzLCBhbmQKK3RodXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1vdW50ZWQgZmlsZXN5c3RlbXMgdGhlIGtlcm5lbAorY2FuIGhhdmUuIFlvdSBvbmx5IG5lZWQgdG8gaW5jcmVhc2Ugc3VwZXItbWF4IGlmIHlvdSBuZWVkIHRvCittb3VudCBtb3JlIGZpbGVzeXN0ZW1zIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgaW4gc3VwZXItbWF4CithbGxvd3MgeW91IHRvLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCithaW8tbnIgJiBhaW8tbWF4LW5yOgorCithaW8tbnIgc2hvd3MgdGhlIGN1cnJlbnQgc3lzdGVtLXdpZGUgbnVtYmVyIG9mIGFzeW5jaHJvbm91cyBpbworcmVxdWVzdHMuICBhaW8tbWF4LW5yIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBtYXhpbXVtIHZhbHVlCithaW8tbnIgY2FuIGdyb3cgdG8uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTE1OTE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtMCwwICsxLDMxNCBAQAorRG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL2tlcm5lbC8qCWtlcm5lbCB2ZXJzaW9uIDIuMi4xMAorCShjKSAxOTk4LCAxOTk5LCAgUmlrIHZhbiBSaWVsIDxyaWVsQG5sLmxpbnV4Lm9yZz4KKworRm9yIGdlbmVyYWwgaW5mbyBhbmQgbGVnYWwgYmx1cmIsIHBsZWFzZSBsb29rIGluIFJFQURNRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzeXNjdGwgZmlsZXMgaW4KKy9wcm9jL3N5cy9rZXJuZWwvIGFuZCBpcyB2YWxpZCBmb3IgTGludXgga2VybmVsIHZlcnNpb24gMi4yLgorCitUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSBhbmQgbW9uaXRvcgorbWlzY2VsbGFuZW91cyBhbmQgZ2VuZXJhbCB0aGluZ3MgaW4gdGhlIG9wZXJhdGlvbiBvZiB0aGUgTGludXgKK2tlcm5lbC4gU2luY2Ugc29tZSBvZiB0aGUgZmlsZXMgX2Nhbl8gYmUgdXNlZCB0byBzY3JldyB1cCB5b3VyCitzeXN0ZW0sIGl0IGlzIGFkdmlzYWJsZSB0byByZWFkIGJvdGggZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlCitiZWZvcmUgYWN0dWFsbHkgbWFraW5nIGFkanVzdG1lbnRzLgorCitDdXJyZW50bHksIHRoZXNlIGZpbGVzIG1pZ2h0IChkZXBlbmRpbmcgb24geW91ciBjb25maWd1cmF0aW9uKQorc2hvdyB1cCBpbiAvcHJvYy9zeXMva2VybmVsOgorLSBhY2N0CistIGNvcmVfcGF0dGVybgorLSBjb3JlX3VzZXNfcGlkCistIGN0cmwtYWx0LWRlbAorLSBkZW50cnktc3RhdGUKKy0gZG9tYWlubmFtZQorLSBob3N0bmFtZQorLSBob3RwbHVnCistIGphdmEtYXBwbGV0dmlld2VyICAgICAgICAgICBbIGJpbmZtdF9qYXZhLCBvYnNvbGV0ZSBdCistIGphdmEtaW50ZXJwcmV0ZXIgICAgICAgICAgICBbIGJpbmZtdF9qYXZhLCBvYnNvbGV0ZSBdCistIGwyY3IgICAgICAgICAgICAgICAgICAgICAgICBbIFBQQyBvbmx5IF0KKy0gbW9kcHJvYmUgICAgICAgICAgICAgICAgICAgID09PiBEb2N1bWVudGF0aW9uL2ttb2QudHh0CistIG1zZ21heAorLSBtc2dtbmIKKy0gbXNnbW5pCistIG9zcmVsZWFzZQorLSBvc3R5cGUKKy0gb3ZlcmZsb3dnaWQKKy0gb3ZlcmZsb3d1aWQKKy0gcGFuaWMKKy0gcGlkX21heAorLSBwb3dlcnNhdmUtbmFwICAgICAgICAgICAgICAgWyBQUEMgb25seSBdCistIHByaW50aworLSByZWFsLXJvb3QtZGV2ICAgICAgICAgICAgICAgPT0+IERvY3VtZW50YXRpb24vaW5pdHJkLnR4dAorLSByZWJvb3QtY21kICAgICAgICAgICAgICAgICAgWyBTUEFSQyBvbmx5IF0KKy0gcnRzaWctbWF4CistIHJ0c2lnLW5yCistIHNlbQorLSBzZy1iaWctYnVmZiAgICAgICAgICAgICAgICAgWyBnZW5lcmljIFNDU0kgZGV2aWNlIChzZykgXQorLSBzaG1hbGwKKy0gc2htbWF4ICAgICAgICAgICAgICAgICAgICAgIFsgc3lzdiBpcGMgXQorLSBzaG1tbmkKKy0gc3RvcC1hICAgICAgICAgICAgICAgICAgICAgIFsgU1BBUkMgb25seSBdCistIHN5c3JxICAgICAgICAgICAgICAgICAgICAgICA9PT4gRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKKy0gdGFpbnRlZAorLSB0aHJlYWRzLW1heAorLSB2ZXJzaW9uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2FjY3Q6CisKK2hpZ2h3YXRlciBsb3d3YXRlciBmcmVxdWVuY3kKKworSWYgQlNELXN0eWxlIHByb2Nlc3MgYWNjb3VudGluZyBpcyBlbmFibGVkIHRoZXNlIHZhbHVlcyBjb250cm9sCitpdHMgYmVoYXZpb3VyLiBJZiBmcmVlIHNwYWNlIG9uIGZpbGVzeXN0ZW0gd2hlcmUgdGhlIGxvZyBsaXZlcworZ29lcyBiZWxvdyA8bG93d2F0ZXI+JSBhY2NvdW50aW5nIHN1c3BlbmRzLiBJZiBmcmVlIHNwYWNlIGdldHMKK2Fib3ZlIDxoaWdod2F0ZXI+JSBhY2NvdW50aW5nIHJlc3VtZXMuIDxGcmVxdWVuY3k+IGRldGVybWluZXMKK2hvdyBvZnRlbiBkbyB3ZSBjaGVjayB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgKHZhbHVlIGlzIGluCitzZWNvbmRzKS4gRGVmYXVsdDoKKzQgMiAzMAorVGhhdCBpcywgc3VzcGVuZCBhY2NvdW50aW5nIGlmIHRoZXJlIGxlZnQgPD0gMiUgZnJlZTsgcmVzdW1lIGl0CitpZiB3ZSBnb3QgPj00JTsgY29uc2lkZXIgaW5mb3JtYXRpb24gYWJvdXQgYW1vdW50IG9mIGZyZWUgc3BhY2UKK3ZhbGlkIGZvciAzMCBzZWNvbmRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjb3JlX3BhdHRlcm46CisKK2NvcmVfcGF0dGVybiBpcyB1c2VkIHRvIHNwZWNpZnkgYSBjb3JlIGR1bXBmaWxlIHBhdHRlcm4gbmFtZS4KKy4gbWF4IGxlbmd0aCA2NCBjaGFyYWN0ZXJzOyBkZWZhdWx0IHZhbHVlIGlzICJjb3JlIgorLiBjb3JlX3BhdHRlcm4gaXMgdXNlZCBhcyBhIHBhdHRlcm4gdGVtcGxhdGUgZm9yIHRoZSBvdXRwdXQgZmlsZW5hbWU7CisgIGNlcnRhaW4gc3RyaW5nIHBhdHRlcm5zIChiZWdpbm5pbmcgd2l0aCAnJScpIGFyZSBzdWJzdGl0dXRlZCB3aXRoCisgIHRoZWlyIGFjdHVhbCB2YWx1ZXMuCisuIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBjb3JlX3VzZXNfcGlkOgorCUlmIGNvcmVfcGF0dGVybiBkb2VzIG5vdCBpbmNsdWRlICIlcCIgKGRlZmF1bHQgZG9lcyBub3QpCisJYW5kIGNvcmVfdXNlc19waWQgaXMgc2V0LCB0aGVuIC5QSUQgd2lsbCBiZSBhcHBlbmRlZCB0bworCXRoZSBmaWxlbmFtZS4KKy4gY29yZW5hbWUgZm9ybWF0IHNwZWNpZmllcnM6CisJJTxOVUw+CSclJyBpcyBkcm9wcGVkCisJJSUJb3V0cHV0IG9uZSAnJScKKwklcAlwaWQKKwkldQl1aWQKKwklZwlnaWQKKwklcwlzaWduYWwgbnVtYmVyCisJJXQJVU5JWCB0aW1lIG9mIGR1bXAKKwklaAlob3N0bmFtZQorCSVlCWV4ZWN1dGFibGUgZmlsZW5hbWUKKwklPE9USEVSPiBib3RoIGFyZSBkcm9wcGVkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NvcmVfdXNlc19waWQ6CisKK1RoZSBkZWZhdWx0IGNvcmVkdW1wIGZpbGVuYW1lIGlzICJjb3JlIi4gIEJ5IHNldHRpbmcKK2NvcmVfdXNlc19waWQgdG8gMSwgdGhlIGNvcmVkdW1wIGZpbGVuYW1lIGJlY29tZXMgY29yZS5QSUQuCitJZiBjb3JlX3BhdHRlcm4gZG9lcyBub3QgaW5jbHVkZSAiJXAiIChkZWZhdWx0IGRvZXMgbm90KQorYW5kIGNvcmVfdXNlc19waWQgaXMgc2V0LCB0aGVuIC5QSUQgd2lsbCBiZSBhcHBlbmRlZCB0bwordGhlIGZpbGVuYW1lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjdHJsLWFsdC1kZWw6CisKK1doZW4gdGhlIHZhbHVlIGluIHRoaXMgZmlsZSBpcyAwLCBjdHJsLWFsdC1kZWwgaXMgdHJhcHBlZCBhbmQKK3NlbnQgdG8gdGhlIGluaXQoMSkgcHJvZ3JhbSB0byBoYW5kbGUgYSBncmFjZWZ1bCByZXN0YXJ0LgorV2hlbiwgaG93ZXZlciwgdGhlIHZhbHVlIGlzID4gMCwgTGludXgncyByZWFjdGlvbiB0byBhIFZ1bGNhbgorTmVydmUgUGluY2ggKHRtKSB3aWxsIGJlIGFuIGltbWVkaWF0ZSByZWJvb3QsIHdpdGhvdXQgZXZlbgorc3luY2luZyBpdHMgZGlydHkgYnVmZmVycy4KKworTm90ZTogd2hlbiBhIHByb2dyYW0gKGxpa2UgZG9zZW11KSBoYXMgdGhlIGtleWJvYXJkIGluICdyYXcnCittb2RlLCB0aGUgY3RybC1hbHQtZGVsIGlzIGludGVyY2VwdGVkIGJ5IHRoZSBwcm9ncmFtIGJlZm9yZSBpdAorZXZlciByZWFjaGVzIHRoZSBrZXJuZWwgdHR5IGxheWVyLCBhbmQgaXQncyB1cCB0byB0aGUgcHJvZ3JhbQordG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZG9tYWlubmFtZSAmIGhvc3RuYW1lOgorCitUaGVzZSBmaWxlcyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIE5JUy9ZUCBkb21haW5uYW1lIGFuZCB0aGUKK2hvc3RuYW1lIG9mIHlvdXIgYm94IGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZSBjb21tYW5kcworZG9tYWlubmFtZSBhbmQgaG9zdG5hbWUsIGkuZS46CisjIGVjaG8gImRhcmtzdGFyIiA+IC9wcm9jL3N5cy9rZXJuZWwvaG9zdG5hbWUKKyMgZWNobyAibXlkb21haW4iID4gL3Byb2Mvc3lzL2tlcm5lbC9kb21haW5uYW1lCitoYXMgdGhlIHNhbWUgZWZmZWN0IGFzCisjIGhvc3RuYW1lICJkYXJrc3RhciIKKyMgZG9tYWlubmFtZSAibXlkb21haW4iCisKK05vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIGNsYXNzaWMgZGFya3N0YXIuZnJvcC5vcmcgaGFzIHRoZQoraG9zdG5hbWUgImRhcmtzdGFyIiBhbmQgRE5TIChJbnRlcm5ldCBEb21haW4gTmFtZSBTZXJ2ZXIpCitkb21haW5uYW1lICJmcm9wLm9yZyIsIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBOSVMgKE5ldHdvcmsKK0luZm9ybWF0aW9uIFNlcnZpY2UpIG9yIFlQIChZZWxsb3cgUGFnZXMpIGRvbWFpbm5hbWUuIFRoZXNlIHR3bworZG9tYWluIG5hbWVzIGFyZSBpbiBnZW5lcmFsIGRpZmZlcmVudC4gRm9yIGEgZGV0YWlsZWQgZGlzY3Vzc2lvbgorc2VlIHRoZSBob3N0bmFtZSgxKSBtYW4gcGFnZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworaG90cGx1ZzoKKworUGF0aCBmb3IgdGhlIGhvdHBsdWcgcG9saWN5IGFnZW50LgorRGVmYXVsdCB2YWx1ZSBpcyAiL3NiaW4vaG90cGx1ZyIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2wyY3I6IChQUEMgb25seSkKKworVGhpcyBmbGFnIGNvbnRyb2xzIHRoZSBMMiBjYWNoZSBvZiBHMyBwcm9jZXNzb3IgYm9hcmRzLiBJZgorMCwgdGhlIGNhY2hlIGlzIGRpc2FibGVkLiBFbmFibGVkIGlmIG5vbnplcm8uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK29zcmVsZWFzZSwgb3N0eXBlICYgdmVyc2lvbjoKKworIyBjYXQgb3NyZWxlYXNlCisyLjEuODgKKyMgY2F0IG9zdHlwZQorTGludXgKKyMgY2F0IHZlcnNpb24KKyM1IFdlZCBGZWIgMjUgMjE6NDk6MjQgTUVUIDE5OTgKKworVGhlIGZpbGVzIG9zcmVsZWFzZSBhbmQgb3N0eXBlIHNob3VsZCBiZSBjbGVhciBlbm91Z2guIFZlcnNpb24KK25lZWRzIGEgbGl0dGxlIG1vcmUgY2xhcmlmaWNhdGlvbiBob3dldmVyLiBUaGUgJyM1JyBtZWFucyB0aGF0Cit0aGlzIGlzIHRoZSBmaWZ0aCBrZXJuZWwgYnVpbHQgZnJvbSB0aGlzIHNvdXJjZSBiYXNlIGFuZCB0aGUKK2RhdGUgYmVoaW5kIGl0IGluZGljYXRlcyB0aGUgdGltZSB0aGUga2VybmVsIHdhcyBidWlsdC4KK1RoZSBvbmx5IHdheSB0byB0dW5lIHRoZXNlIHZhbHVlcyBpcyB0byByZWJ1aWxkIHRoZSBrZXJuZWwgOi0pCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK292ZXJmbG93Z2lkICYgb3ZlcmZsb3d1aWQ6CisKK2lmIHlvdXIgYXJjaGl0ZWN0dXJlIGRpZCBub3QgYWx3YXlzIHN1cHBvcnQgMzItYml0IFVJRHMgKGkuZS4gYXJtLCBpMzg2LAorbTY4aywgc2gsIGFuZCBzcGFyYzMyKSwgYSBmaXhlZCBVSUQgYW5kIEdJRCB3aWxsIGJlIHJldHVybmVkIHRvCithcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIG9sZCAxNi1iaXQgVUlEL0dJRCBzeXN0ZW0gY2FsbHMsIGlmIHRoZSBhY3R1YWwKK1VJRCBvciBHSUQgd291bGQgZXhjZWVkIDY1NTM1LgorCitUaGVzZSBzeXNjdGxzIGFsbG93IHlvdSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBmaXhlZCBVSUQgYW5kIEdJRC4KK1RoZSBkZWZhdWx0IGlzIDY1NTM0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwYW5pYzoKKworVGhlIHZhbHVlIGluIHRoaXMgZmlsZSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGUKK2tlcm5lbCB3YWl0cyBiZWZvcmUgcmVib290aW5nIG9uIGEgcGFuaWMuIFdoZW4geW91IHVzZSB0aGUKK3NvZnR3YXJlIHdhdGNoZG9nLCB0aGUgcmVjb21tZW5kZWQgc2V0dGluZyBpcyA2MC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGFuaWNfb25fb29wczoKKworQ29udHJvbHMgdGhlIGtlcm5lbCdzIGJlaGF2aW91ciB3aGVuIGFuIG9vcHMgb3IgQlVHIGlzIGVuY291bnRlcmVkLgorCiswOiB0cnkgdG8gY29udGludWUgb3BlcmF0aW9uCisKKzE6IGRlbGF5IGEgZmV3IHNlY29uZHMgKHRvIGdpdmUga2xvZ2QgdGltZSB0byByZWNvcmQgdGhlIG9vcHMgb3V0cHV0KSBhbmQKKyAgIHRoZW4gcGFuaWMuICBJZiB0aGUgYHBhbmljJyBzeXNjdGwgaXMgYWxzbyBub24temVybyB0aGVuIHRoZSBtYWNoaW5lIHdpbGwKKyAgIGJlIHJlYm9vdGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwaWRfbWF4OgorCitQSUQgYWxsb2NhdGlvbiB3cmFwIHZhbHVlLiAgV2hlbiB0aGUga2VucmVsJ3MgbmV4dCBQSUQgdmFsdWUKK3JlYWNoZXMgdGhpcyB2YWx1ZSwgaXQgd3JhcHMgYmFjayB0byBhIG1pbmltdW0gUElEIHZhbHVlLgorUElEcyBvZiB2YWx1ZSBwaWRfbWF4IG9yIGxhcmdlciBhcmUgbm90IGFsbG9jYXRlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcG93ZXJzYXZlLW5hcDogKFBQQyBvbmx5KQorCitJZiBzZXQsIExpbnV4LVBQQyB3aWxsIHVzZSB0aGUgJ25hcCcgbW9kZSBvZiBwb3dlcnNhdmluZywKK290aGVyd2lzZSB0aGUgJ2RvemUnIG1vZGUgd2lsbCBiZSB1c2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwcmludGs6CisKK1RoZSBmb3VyIHZhbHVlcyBpbiBwcmludGsgZGVub3RlOiBjb25zb2xlX2xvZ2xldmVsLAorZGVmYXVsdF9tZXNzYWdlX2xvZ2xldmVsLCBtaW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWwgYW5kCitkZWZhdWx0X2NvbnNvbGVfbG9nbGV2ZWwgcmVzcGVjdGl2ZWx5LgorCitUaGVzZSB2YWx1ZXMgaW5mbHVlbmNlIHByaW50aygpIGJlaGF2aW9yIHdoZW4gcHJpbnRpbmcgb3IKK2xvZ2dpbmcgZXJyb3IgbWVzc2FnZXMuIFNlZSAnbWFuIDIgc3lzbG9nJyBmb3IgbW9yZSBpbmZvIG9uCit0aGUgZGlmZmVyZW50IGxvZ2xldmVscy4KKworLSBjb25zb2xlX2xvZ2xldmVsOiBtZXNzYWdlcyB3aXRoIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4KKyAgdGhpcyB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUKKy0gZGVmYXVsdF9tZXNzYWdlX2xldmVsOiBtZXNzYWdlcyB3aXRob3V0IGFuIGV4cGxpY2l0IHByaW9yaXR5CisgIHdpbGwgYmUgcHJpbnRlZCB3aXRoIHRoaXMgcHJpb3JpdHkKKy0gbWluaW11bV9jb25zb2xlX2xvZ2xldmVsOiBtaW5pbXVtIChoaWdoZXN0KSB2YWx1ZSB0byB3aGljaAorICBjb25zb2xlX2xvZ2xldmVsIGNhbiBiZSBzZXQKKy0gZGVmYXVsdF9jb25zb2xlX2xvZ2xldmVsOiBkZWZhdWx0IHZhbHVlIGZvciBjb25zb2xlX2xvZ2xldmVsCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3ByaW50a19yYXRlbGltaXQ6CisKK1NvbWUgd2FybmluZyBtZXNzYWdlcyBhcmUgcmF0ZSBsaW1pdGVkLiBwcmludGtfcmF0ZWxpbWl0IHNwZWNpZmllcwordGhlIG1pbmltdW0gbGVuZ3RoIG9mIHRpbWUgYmV0d2VlbiB0aGVzZSBtZXNzYWdlcyAoaW4gamlmZmllcyksIGJ5CitkZWZhdWx0IHdlIGFsbG93IG9uZSBldmVyeSA1IHNlY29uZHMuCisKK0EgdmFsdWUgb2YgMCB3aWxsIGRpc2FibGUgcmF0ZSBsaW1pdGluZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcHJpbnRrX3JhdGVsaW1pdF9idXJzdDoKKworV2hpbGUgbG9uZyB0ZXJtIHdlIGVuZm9yY2Ugb25lIG1lc3NhZ2UgcGVyIHByaW50a19yYXRlbGltaXQKK3NlY29uZHMsIHdlIGRvIGFsbG93IGEgYnVyc3Qgb2YgbWVzc2FnZXMgdG8gcGFzcyB0aHJvdWdoLgorcHJpbnRrX3JhdGVsaW1pdF9idXJzdCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBtZXNzYWdlcyB3ZSBjYW4KK3NlbmQgYmVmb3JlIHJhdGVsaW1pdGluZyBraWNrcyBpbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcmVib290LWNtZDogKFNwYXJjIG9ubHkpCisKKz8/PyBUaGlzIHNlZW1zIHRvIGJlIGEgd2F5IHRvIGdpdmUgYW4gYXJndW1lbnQgdG8gdGhlIFNwYXJjCitST00vRmxhc2ggYm9vdCBsb2FkZXIuIE1heWJlIHRvIHRlbGwgaXQgd2hhdCB0byBkbyBhZnRlcgorcmVib290aW5nLiA/Pz8KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcnRzaWctbWF4ICYgcnRzaWctbnI6CisKK1RoZSBmaWxlIHJ0c2lnLW1heCBjYW4gYmUgdXNlZCB0byB0dW5lIHRoZSBtYXhpbXVtIG51bWJlcgorb2YgUE9TSVggcmVhbHRpbWUgKHF1ZXVlZCkgc2lnbmFscyB0aGF0IGNhbiBiZSBvdXRzdGFuZGluZworaW4gdGhlIHN5c3RlbS4KKworcnRzaWctbnIgc2hvd3MgdGhlIG51bWJlciBvZiBSVCBzaWduYWxzIGN1cnJlbnRseSBxdWV1ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3NnLWJpZy1idWZmOgorCitUaGlzIGZpbGUgc2hvd3MgdGhlIHNpemUgb2YgdGhlIGdlbmVyaWMgU0NTSSAoc2cpIGJ1ZmZlci4KK1lvdSBjYW4ndCB0dW5lIGl0IGp1c3QgeWV0LCBidXQgeW91IGNvdWxkIGNoYW5nZSBpdCBvbgorY29tcGlsZSB0aW1lIGJ5IGVkaXRpbmcgaW5jbHVkZS9zY3NpL3NnLmggYW5kIGNoYW5naW5nCit0aGUgdmFsdWUgb2YgU0dfQklHX0JVRkYuCisKK1RoZXJlIHNob3VsZG4ndCBiZSBhbnkgcmVhc29uIHRvIGNoYW5nZSB0aGlzIHZhbHVlLiBJZgoreW91IGNhbiBjb21lIHVwIHdpdGggb25lLCB5b3UgcHJvYmFibHkga25vdyB3aGF0IHlvdQorYXJlIGRvaW5nIGFueXdheSA6KQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzaG1tYXg6IAorCitUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IGFuZCBzZXQgdGhlIHJ1biB0aW1lIGxpbWl0CitvbiB0aGUgbWF4aW11bSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgc2l6ZSB0aGF0IGNhbiBiZSBjcmVhdGVkLgorU2hhcmVkIG1lbW9yeSBzZWdtZW50cyB1cCB0byAxR2IgYXJlIG5vdyBzdXBwb3J0ZWQgaW4gdGhlIAora2VybmVsLiAgVGhpcyB2YWx1ZSBkZWZhdWx0cyB0byBTSE1NQVguCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3RhaW50ZWQ6IAorCitOb24temVybyBpZiB0aGUga2VybmVsIGhhcyBiZWVuIHRhaW50ZWQuICBOdW1lcmljIHZhbHVlcywgd2hpY2gKK2NhbiBiZSBPUmVkIHRvZ2V0aGVyOgorCisgIDEgLSBBIG1vZHVsZSB3aXRoIGEgbm9uLUdQTCBsaWNlbnNlIGhhcyBiZWVuIGxvYWRlZCwgdGhpcworICAgICAgaW5jbHVkZXMgbW9kdWxlcyB3aXRoIG5vIGxpY2Vuc2UuCisgICAgICBTZXQgYnkgbW9kdXRpbHMgPj0gMi40LjkgYW5kIG1vZHVsZS1pbml0LXRvb2xzLgorICAyIC0gQSBtb2R1bGUgd2FzIGZvcmNlIGxvYWRlZCBieSBpbnNtb2QgLWYuCisgICAgICBTZXQgYnkgbW9kdXRpbHMgPj0gMi40LjkgYW5kIG1vZHVsZS1pbml0LXRvb2xzLgorICA0IC0gVW5zYWZlIFNNUCBwcm9jZXNzb3JzOiBTTVAgd2l0aCBDUFVzIG5vdCBkZXNpZ25lZCBmb3IgU01QLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9zdW5ycGMudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvc3VucnBjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFlY2FjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvc3VucnBjLnR4dApAQCAtMCwwICsxLDIwIEBACitEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvc3VucnBjLyoJa2VybmVsIHZlcnNpb24gMi4yLjEwCisJKGMpIDE5OTgsIDE5OTksICBSaWsgdmFuIFJpZWwgPHJpZWxAbmwubGludXgub3JnPgorCitGb3IgZ2VuZXJhbCBpbmZvIGFuZCBsZWdhbCBibHVyYiwgcGxlYXNlIGxvb2sgaW4gUkVBRE1FLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzeXNjdGwgZmlsZXMgaW4KKy9wcm9jL3N5cy9zdW5ycGMgYW5kIGlzIHZhbGlkIGZvciBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjIuCisKK1RoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBjYW4gYmUgdXNlZCB0byAocmUpc2V0IHRoZSBkZWJ1ZworZmxhZ3Mgb2YgdGhlIFNVTiBSZW1vdGUgUHJvY2VkdXJlIENhbGwgKFJQQykgc3Vic3lzdGVtIGluCit0aGUgTGludXgga2VybmVsLiBUaGlzIHN0dWZmIGlzIHVzZWQgZm9yIE5GUywgS05GU0QgYW5kCittYXliZSBhIGZldyBvdGhlciB0aGluZ3MgYXMgd2VsbC4KKworVGhlIGZpbGVzIGluIHRoZXJlIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGRlYnVnZ2luZyBmbGFnczoKK3JwY19kZWJ1ZywgbmZzX2RlYnVnLCBuZnNkX2RlYnVnIGFuZCBubG1fZGVidWcuCisKK1RoZXNlIGZsYWdzIGFyZSBmb3Iga2VybmVsIGhhY2tlcnMgb25seS4gWW91IHNob3VsZCByZWFkIHRoZQorc291cmNlIGNvZGUgaW4gbmV0L3N1bnJwYy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxYWFlMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dApAQCAtMCwwICsxLDEwNCBAQAorRG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL3ZtLyoJa2VybmVsIHZlcnNpb24gMi4yLjEwCisJKGMpIDE5OTgsIDE5OTksICBSaWsgdmFuIFJpZWwgPHJpZWxAbmwubGludXgub3JnPgorCitGb3IgZ2VuZXJhbCBpbmZvIGFuZCBsZWdhbCBibHVyYiwgcGxlYXNlIGxvb2sgaW4gUkVBRE1FLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzeXNjdGwgZmlsZXMgaW4KKy9wcm9jL3N5cy92bSBhbmQgaXMgdmFsaWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMi4KKworVGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGNhbiBiZSB1c2VkIHRvIHR1bmUgdGhlIG9wZXJhdGlvbgorb2YgdGhlIHZpcnR1YWwgbWVtb3J5IChWTSkgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kCit0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLgorCitEZWZhdWx0IHZhbHVlcyBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIG1vc3Qgb2YgdGhlc2UKK2ZpbGVzIGNhbiBiZSBmb3VuZCBpbiBtbS9zd2FwLmMuCisKK0N1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bToKKy0gb3ZlcmNvbW1pdF9tZW1vcnkKKy0gcGFnZS1jbHVzdGVyCistIGRpcnR5X3JhdGlvCistIGRpcnR5X2JhY2tncm91bmRfcmF0aW8KKy0gZGlydHlfZXhwaXJlX2NlbnRpc2VjcworLSBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCistIG1heF9tYXBfY291bnQKKy0gbWluX2ZyZWVfa2J5dGVzCistIGxhcHRvcF9tb2RlCistIGJsb2NrX2R1bXAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGlydHlfcmF0aW8sIGRpcnR5X2JhY2tncm91bmRfcmF0aW8sIGRpcnR5X2V4cGlyZV9jZW50aXNlY3MsCitkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzLCB2ZnNfY2FjaGVfcHJlc3N1cmUsIGxhcHRvcF9tb2RlLAorYmxvY2tfZHVtcCwgc3dhcF90b2tlbl90aW1lb3V0OgorCitTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitvdmVyY29tbWl0X21lbW9yeToKKworVGhpcyB2YWx1ZSBjb250YWlucyBhIGZsYWcgdGhhdCBlbmFibGVzIG1lbW9yeSBvdmVyY29tbWl0bWVudC4KKworV2hlbiB0aGlzIGZsYWcgaXMgMCwgdGhlIGtlcm5lbCBhdHRlbXB0cyB0byBlc3RpbWF0ZSB0aGUgYW1vdW50CitvZiBmcmVlIG1lbW9yeSBsZWZ0IHdoZW4gdXNlcnNwYWNlIHJlcXVlc3RzIG1vcmUgbWVtb3J5LgorCitXaGVuIHRoaXMgZmxhZyBpcyAxLCB0aGUga2VybmVsIHByZXRlbmRzIHRoZXJlIGlzIGFsd2F5cyBlbm91Z2gKK21lbW9yeSB1bnRpbCBpdCBhY3R1YWxseSBydW5zIG91dC4KKworV2hlbiB0aGlzIGZsYWcgaXMgMiwgdGhlIGtlcm5lbCB1c2VzIGEgIm5ldmVyIG92ZXJjb21taXQiCitwb2xpY3kgdGhhdCBhdHRlbXB0cyB0byBwcmV2ZW50IGFueSBvdmVyY29tbWl0IG9mIG1lbW9yeS4gIAorCitUaGlzIGZlYXR1cmUgY2FuIGJlIHZlcnkgdXNlZnVsIGJlY2F1c2UgdGhlcmUgYXJlIGEgbG90IG9mCitwcm9ncmFtcyB0aGF0IG1hbGxvYygpIGh1Z2UgYW1vdW50cyBvZiBtZW1vcnkgImp1c3QtaW4tY2FzZSIKK2FuZCBkb24ndCB1c2UgbXVjaCBvZiBpdC4KKworVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKworU2VlIERvY3VtZW50YXRpb24vdm0vb3ZlcmNvbW1pdC1hY2NvdW50aW5nIGFuZAorc2VjdXJpdHkvY29tbW9uY2FwLmM6OmNhcF92bV9lbm91Z2hfbWVtb3J5KCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK292ZXJjb21taXRfcmF0aW86CisKK1doZW4gb3ZlcmNvbW1pdF9tZW1vcnkgaXMgc2V0IHRvIDIsIHRoZSBjb21taXR0ZWQgYWRkcmVzcworc3BhY2UgaXMgbm90IHBlcm1pdHRlZCB0byBleGNlZWQgc3dhcCBwbHVzIHRoaXMgcGVyY2VudGFnZQorb2YgcGh5c2ljYWwgUkFNLiAgU2VlIGFib3ZlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwYWdlLWNsdXN0ZXI6CisKK1RoZSBMaW51eCBWTSBzdWJzeXN0ZW0gYXZvaWRzIGV4Y2Vzc2l2ZSBkaXNrIHNlZWtzIGJ5IHJlYWRpbmcKK211bHRpcGxlIHBhZ2VzIG9uIGEgcGFnZSBmYXVsdC4gVGhlIG51bWJlciBvZiBwYWdlcyBpdCByZWFkcworaXMgZGVwZW5kZW50IG9uIHRoZSBhbW91bnQgb2YgbWVtb3J5IGluIHlvdXIgbWFjaGluZS4KKworVGhlIG51bWJlciBvZiBwYWdlcyB0aGUga2VybmVsIHJlYWRzIGluIGF0IG9uY2UgaXMgZXF1YWwgdG8KKzIgXiBwYWdlLWNsdXN0ZXIuIFZhbHVlcyBhYm92ZSAyIF4gNSBkb24ndCBtYWtlIG11Y2ggc2Vuc2UKK2ZvciBzd2FwIGJlY2F1c2Ugd2Ugb25seSBjbHVzdGVyIHN3YXAgZGF0YSBpbiAzMi1wYWdlIGdyb3Vwcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworbWF4X21hcF9jb3VudDoKKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgbWFwIGFyZWFzIGEgcHJvY2VzcworbWF5IGhhdmUuIE1lbW9yeSBtYXAgYXJlYXMgYXJlIHVzZWQgYXMgYSBzaWRlLWVmZmVjdCBvZiBjYWxsaW5nCittYWxsb2MsIGRpcmVjdGx5IGJ5IG1tYXAgYW5kIG1wcm90ZWN0LCBhbmQgYWxzbyB3aGVuIGxvYWRpbmcgc2hhcmVkCitsaWJyYXJpZXMuCisKK1doaWxlIG1vc3QgYXBwbGljYXRpb25zIG5lZWQgbGVzcyB0aGFuIGEgdGhvdXNhbmQgbWFwcywgY2VydGFpbgorcHJvZ3JhbXMsIHBhcnRpY3VsYXJseSBtYWxsb2MgZGVidWdnZXJzLCBtYXkgY29uc3VtZSBsb3RzIG9mIHRoZW0sCitlLmcuLCB1cCB0byBvbmUgb3IgdHdvIG1hcHMgcGVyIGFsbG9jYXRpb24uCisKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDY1NTM2LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCittaW5fZnJlZV9rYnl0ZXM6CisKK1RoaXMgaXMgdXNlZCB0byBmb3JjZSB0aGUgTGludXggVk0gdG8ga2VlcCBhIG1pbmltdW0gbnVtYmVyIAorb2Yga2lsb2J5dGVzIGZyZWUuICBUaGUgVk0gdXNlcyB0aGlzIG51bWJlciB0byBjb21wdXRlIGEgcGFnZXNfbWluCit2YWx1ZSBmb3IgZWFjaCBsb3dtZW0gem9uZSBpbiB0aGUgc3lzdGVtLiAgRWFjaCBsb3dtZW0gem9uZSBnZXRzIAorYSBudW1iZXIgb2YgcmVzZXJ2ZWQgZnJlZSBwYWdlcyBiYXNlZCBwcm9wb3J0aW9uYWxseSBvbiBpdHMgc2l6ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzcnEudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4YzJlMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CkBAIC0wLDAgKzEsMjEzIEBACitMaW51eCBNYWdpYyBTeXN0ZW0gUmVxdWVzdCBLZXkgSGFja3MKK0RvY3VtZW50YXRpb24gZm9yIHN5c3JxLmMgdmVyc2lvbiAxLjE1CitMYXN0IHVwZGF0ZTogJERhdGU6IDIwMDEvMDEvMjggMTA6MTU6NTkgJAorCisqICBXaGF0IGlzIHRoZSBtYWdpYyBTeXNScSBrZXk/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJdCBpcyBhICdtYWdpY2FsJyBrZXkgY29tYm8geW91IGNhbiBoaXQgd2hpY2ggdGhlIGtlcm5lbCB3aWxsIHJlc3BvbmQgdG8KK3JlZ2FyZGxlc3Mgb2Ygd2hhdGV2ZXIgZWxzZSBpdCBpcyBkb2luZywgdW5sZXNzIGl0IGlzIGNvbXBsZXRlbHkgbG9ja2VkIHVwLgorCisqICBIb3cgZG8gSSBlbmFibGUgdGhlIG1hZ2ljIFN5c1JxIGtleT8KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorWW91IG5lZWQgdG8gc2F5ICJ5ZXMiIHRvICdNYWdpYyBTeXNScSBrZXkgKENPTkZJR19NQUdJQ19TWVNSUSknIHdoZW4KK2NvbmZpZ3VyaW5nIHRoZSBrZXJuZWwuIFdoZW4gcnVubmluZyBhIGtlcm5lbCB3aXRoIFN5c1JxIGNvbXBpbGVkIGluLAorL3Byb2Mvc3lzL2tlcm5lbC9zeXNycSBjb250cm9scyB0aGUgZnVuY3Rpb25zIGFsbG93ZWQgdG8gYmUgaW52b2tlZCB2aWEKK3RoZSBTeXNScSBrZXkuIEJ5IGRlZmF1bHQgdGhlIGZpbGUgY29udGFpbnMgMSB3aGljaCBtZWFucyB0aGF0IGV2ZXJ5Citwb3NzaWJsZSBTeXNScSByZXF1ZXN0IGlzIGFsbG93ZWQgKGluIG9sZGVyIHZlcnNpb25zIFN5c1JxIHdhcyBkaXNhYmxlZAorYnkgZGVmYXVsdCwgYW5kIHlvdSB3ZXJlIHJlcXVpcmVkIHRvIHNwZWNpZmljYWxseSBlbmFibGUgaXQgYXQgcnVuLXRpbWUKK2J1dCB0aGlzIGlzIG5vdCB0aGUgY2FzZSBhbnkgbW9yZSkuIEhlcmUgaXMgdGhlIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzCitpbiAvcHJvYy9zeXMva2VybmVsL3N5c3JxOgorICAgMCAtIGRpc2FibGUgc3lzcnEgY29tcGxldGVseQorICAgMSAtIGVuYWJsZSBhbGwgZnVuY3Rpb25zIG9mIHN5c3JxCisgID4xIC0gYml0bWFzayBvZiBhbGxvd2VkIHN5c3JxIGZ1bmN0aW9ucyAoc2VlIGJlbG93IGZvciBkZXRhaWxlZCBmdW5jdGlvbgorICAgICAgIGRlc2NyaXB0aW9uKToKKyAgICAgICAgICAyIC0gZW5hYmxlIGNvbnRyb2wgb2YgY29uc29sZSBsb2dnaW5nIGxldmVsCisgICAgICAgICAgNCAtIGVuYWJsZSBjb250cm9sIG9mIGtleWJvYXJkIChTQUssIHVucmF3KQorICAgICAgICAgIDggLSBlbmFibGUgZGVidWdnaW5nIGR1bXBzIG9mIHByb2Nlc3NlcyBldGMuCisgICAgICAgICAxNiAtIGVuYWJsZSBzeW5jIGNvbW1hbmQKKyAgICAgICAgIDMyIC0gZW5hYmxlIHJlbW91bnQgcmVhZC1vbmx5CisgICAgICAgICA2NCAtIGVuYWJsZSBzaWduYWxsaW5nIG9mIHByb2Nlc3NlcyAodGVybSwga2lsbCwgb29tLWtpbGwpCisgICAgICAgIDEyOCAtIGFsbG93IHJlYm9vdC9wb3dlcm9mZgorICAgICAgICAyNTYgLSBhbGxvdyBuaWNpbmcgb2YgYWxsIFJUIHRhc2tzCisKK1lvdSBjYW4gc2V0IHRoZSB2YWx1ZSBpbiB0aGUgZmlsZSBieSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgZWNobyAibnVtYmVyIiA+L3Byb2Mvc3lzL2tlcm5lbC9zeXNycQorCitOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIC9wcm9jL3N5cy9rZXJuZWwvc3lzcnEgaW5mbHVlbmNlcyBvbmx5IHRoZSBpbnZvY2F0aW9uCit2aWEgYSBrZXlib2FyZC4gSW52b2NhdGlvbiBvZiBhbnkgb3BlcmF0aW9uIHZpYSAvcHJvYy9zeXNycS10cmlnZ2VyIGlzIGFsd2F5cworYWxsb3dlZC4KKworKiAgSG93IGRvIEkgdXNlIHRoZSBtYWdpYyBTeXNScSBrZXk/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK09uIHg4NiAgIC0gWW91IHByZXNzIHRoZSBrZXkgY29tYm8gJ0FMVC1TeXNScS08Y29tbWFuZCBrZXk+Jy4gTm90ZSAtIFNvbWUKKyAgICAgICAgICAga2V5Ym9hcmRzIG1heSBub3QgaGF2ZSBhIGtleSBsYWJlbGVkICdTeXNScScuIFRoZSAnU3lzUnEnIGtleSBpcworICAgICAgICAgICBhbHNvIGtub3duIGFzIHRoZSAnUHJpbnQgU2NyZWVuJyBrZXkuIEFsc28gc29tZSBrZXlib2FyZHMgY2Fubm90CisJICAgaGFuZGxlIHNvIG1hbnkga2V5cyBiZWluZyBwcmVzc2VkIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHlvdSBtaWdodAorCSAgIGhhdmUgYmV0dGVyIGx1Y2sgd2l0aCAicHJlc3MgQWx0IiwgInByZXNzIFN5c1JxIiwgInJlbGVhc2UgQWx0IiwKKwkgICAicHJlc3MgPGNvbW1hbmQga2V5PiIsIHJlbGVhc2UgZXZlcnl0aGluZy4KKworT24gU1BBUkMgLSBZb3UgcHJlc3MgJ0FMVC1TVE9QLTxjb21tYW5kIGtleT4nLCBJIGJlbGlldmUuCisKK09uIHRoZSBzZXJpYWwgY29uc29sZSAoUEMgc3R5bGUgc3RhbmRhcmQgc2VyaWFsIHBvcnRzIG9ubHkpIC0KKyAgICAgICAgICAgWW91IHNlbmQgYSBCUkVBSywgdGhlbiB3aXRoaW4gNSBzZWNvbmRzIGEgY29tbWFuZCBrZXkuIFNlbmRpbmcKKyAgICAgICAgICAgQlJFQUsgdHdpY2UgaXMgaW50ZXJwcmV0ZWQgYXMgYSBub3JtYWwgQlJFQUsuCisKK09uIFBvd2VyUEMgLSBQcmVzcyAnQUxUIC0gUHJpbnQgU2NyZWVuIChvciBGMTMpIC0gPGNvbW1hbmQga2V5PiwgIAorICAgICAgICAgICAgIFByaW50IFNjcmVlbiAob3IgRjEzKSAtIDxjb21tYW5kIGtleT4gbWF5IHN1ZmZpY2UuCisKK09uIG90aGVyIC0gSWYgeW91IGtub3cgb2YgdGhlIGtleSBjb21ib3MgZm9yIG90aGVyIGFyY2hpdGVjdHVyZXMsIHBsZWFzZQorICAgICAgICAgICBsZXQgbWUga25vdyBzbyBJIGNhbiBhZGQgdGhlbSB0byB0aGlzIHNlY3Rpb24uCisKK09uIGFsbCAtICB3cml0ZSBhIGNoYXJhY3RlciB0byAvcHJvYy9zeXNycS10cmlnZ2VyLiAgZWc6CisKKwkJZWNobyB0ID4gL3Byb2Mvc3lzcnEtdHJpZ2dlcgorCisqICBXaGF0IGFyZSB0aGUgJ2NvbW1hbmQnIGtleXM/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisncicgICAgIC0gVHVybnMgb2ZmIGtleWJvYXJkIHJhdyBtb2RlIGFuZCBzZXRzIGl0IHRvIFhMQVRFLgorCisnaycgICAgIC0gU2VjdXJlIEFjY2VzcyBLZXkgKFNBSykgS2lsbHMgYWxsIHByb2dyYW1zIG9uIHRoZSBjdXJyZW50IHZpcnR1YWwKKyAgICAgICAgICBjb25zb2xlLiBOT1RFOiBTZWUgaW1wb3J0YW50IGNvbW1lbnRzIGJlbG93IGluIFNBSyBzZWN0aW9uLgorCisnYicgICAgIC0gV2lsbCBpbW1lZGlhdGVseSByZWJvb3QgdGhlIHN5c3RlbSB3aXRob3V0IHN5bmNpbmcgb3IgdW5tb3VudGluZworICAgICAgICAgIHlvdXIgZGlza3MuCisKKydvJyAgICAgLSBXaWxsIHNodXQgeW91ciBzeXN0ZW0gb2ZmIChpZiBjb25maWd1cmVkIGFuZCBzdXBwb3J0ZWQpLgorCisncycgICAgIC0gV2lsbCBhdHRlbXB0IHRvIHN5bmMgYWxsIG1vdW50ZWQgZmlsZXN5c3RlbXMuCisKKyd1JyAgICAgLSBXaWxsIGF0dGVtcHQgdG8gcmVtb3VudCBhbGwgbW91bnRlZCBmaWxlc3lzdGVtcyByZWFkLW9ubHkuCisKKydwJyAgICAgLSBXaWxsIGR1bXAgdGhlIGN1cnJlbnQgcmVnaXN0ZXJzIGFuZCBmbGFncyB0byB5b3VyIGNvbnNvbGUuCisKKyd0JyAgICAgLSBXaWxsIGR1bXAgYSBsaXN0IG9mIGN1cnJlbnQgdGFza3MgYW5kIHRoZWlyIGluZm9ybWF0aW9uIHRvIHlvdXIKKyAgICAgICAgICBjb25zb2xlLgorCisnbScgICAgIC0gV2lsbCBkdW1wIGN1cnJlbnQgbWVtb3J5IGluZm8gdG8geW91ciBjb25zb2xlLgorCisndicJLSBEdW1wcyBWb3lhZ2VyIFNNUCBwcm9jZXNzb3IgaW5mbyB0byB5b3VyIGNvbnNvbGUuCisKKycwJy0nOScgLSBTZXRzIHRoZSBjb25zb2xlIGxvZyBsZXZlbCwgY29udHJvbGxpbmcgd2hpY2gga2VybmVsIG1lc3NhZ2VzCisgICAgICAgICAgd2lsbCBiZSBwcmludGVkIHRvIHlvdXIgY29uc29sZS4gKCcwJywgZm9yIGV4YW1wbGUgd291bGQgbWFrZQorICAgICAgICAgIGl0IHNvIHRoYXQgb25seSBlbWVyZ2VuY3kgbWVzc2FnZXMgbGlrZSBQQU5JQ3Mgb3IgT09QU2VzIHdvdWxkCisgICAgICAgICAgbWFrZSBpdCB0byB5b3VyIGNvbnNvbGUuKQorCisnZicJLSBXaWxsIGNhbGwgb29tX2tpbGwgdG8ga2lsbCBhIG1lbW9yeSBob2cgcHJvY2VzcworCisnZScgICAgIC0gU2VuZCBhIFNJR1RFUk0gdG8gYWxsIHByb2Nlc3NlcywgZXhjZXB0IGZvciBpbml0LgorCisnaScgICAgIC0gU2VuZCBhIFNJR0tJTEwgdG8gYWxsIHByb2Nlc3NlcywgZXhjZXB0IGZvciBpbml0LgorCisnbCcgICAgIC0gU2VuZCBhIFNJR0tJTEwgdG8gYWxsIHByb2Nlc3NlcywgSU5DTFVESU5HIGluaXQuIChZb3VyIHN5c3RlbQorICAgICAgICAgIHdpbGwgYmUgbm9uLWZ1bmN0aW9uYWwgYWZ0ZXIgdGhpcy4pCisKKydoJyAgICAgLSBXaWxsIGRpc3BsYXkgaGVscCAoIGFjdHVhbGx5IGFueSBvdGhlciBrZXkgdGhhbiB0aG9zZSBsaXN0ZWQKKyAgICAgICAgICBhYm92ZSB3aWxsIGRpc3BsYXkgaGVscC4gYnV0ICdoJyBpcyBlYXN5IHRvIHJlbWVtYmVyIDotKQorCisqICBPa2F5LCBzbyB3aGF0IGNhbiBJIHVzZSB0aGVtIGZvcj8KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorV2VsbCwgdW4nUidhdyBpcyB2ZXJ5IGhhbmR5IHdoZW4geW91ciBYIHNlcnZlciBvciBhIHN2Z2FsaWIgcHJvZ3JhbSBjcmFzaGVzLgorCitzYSdLJyAoU2VjdXJlIEFjY2VzcyBLZXkpIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGJlIHN1cmUgdGhlcmUgYXJlIG5vCit0cm9qYW4gcHJvZ3JhbSBpcyBydW5uaW5nIGF0IGNvbnNvbGUgYW5kIHdoaWNoIGNvdWxkIGdyYWIgeW91ciBwYXNzd29yZAord2hlbiB5b3Ugd291bGQgdHJ5IHRvIGxvZ2luLiBJdCB3aWxsIGtpbGwgYWxsIHByb2dyYW1zIG9uIGdpdmVuIGNvbnNvbGUKK2FuZCB0aHVzIGxldHRpbmcgeW91IG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2dpbiBwcm9tcHQgeW91IHNlZSBpcyBhY3R1YWxseQordGhlIG9uZSBmcm9tIGluaXQsIG5vdCBzb21lIHRyb2phbiBwcm9ncmFtLgorSU1QT1JUQU5UOkluIGl0cyB0cnVlIGZvcm0gaXQgaXMgbm90IGEgdHJ1ZSBTQUsgbGlrZSB0aGUgb25lIGluICAgOklNUE9SVEFOVAorSU1QT1JUQU5UOmMyIGNvbXBsaWFudCBzeXN0ZW1zLCBhbmQgaXQgc2hvdWxkIGJlIG1pc3Rvb2sgYXMgc3VjaC4gOklNUE9SVEFOVAorICAgICAgIEl0IHNlZW1zIG90aGVyIGZpbmQgaXQgdXNlZnVsIGFzIChTeXN0ZW0gQXR0ZW50aW9uIEtleSkgd2hpY2ggaXMKK3VzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGV4aXQgYSBwcm9ncmFtIHRoYXQgd2lsbCBub3QgbGV0IHlvdSBzd2l0Y2ggY29uc29sZXMuCisoRm9yIGV4YW1wbGUsIFggb3IgYSBzdmdhbGliIHByb2dyYW0uKQorCityZSdCJ29vdCBpcyBnb29kIHdoZW4geW91J3JlIHVuYWJsZSB0byBzaHV0IGRvd24uIEJ1dCB5b3Ugc2hvdWxkIGFsc28gJ1MneW5jCithbmQgJ1UnbW91bnQgZmlyc3QuCisKKydTJ3luYyBpcyBncmVhdCB3aGVuIHlvdXIgc3lzdGVtIGlzIGxvY2tlZCB1cCwgaXQgYWxsb3dzIHlvdSB0byBzeW5jIHlvdXIKK2Rpc2tzIGFuZCB3aWxsIGNlcnRhaW5seSBsZXNzZW4gdGhlIGNoYW5jZSBvZiBkYXRhIGxvc3MgYW5kIGZzY2tpbmcuIE5vdGUKK3RoYXQgdGhlIHN5bmMgaGFzbid0IHRha2VuIHBsYWNlIHVudGlsIHlvdSBzZWUgdGhlICJPSyIgYW5kICJEb25lIiBhcHBlYXIKK29uIHRoZSBzY3JlZW4uIChJZiB0aGUga2VybmVsIGlzIHJlYWxseSBpbiBzdHJpZmUsIHlvdSBtYXkgbm90IGV2ZXIgZ2V0IHRoZQorT0sgb3IgRG9uZSBtZXNzYWdlLi4uKQorCisnVSdtb3VudCBpcyBiYXNpY2FsbHkgdXNlZnVsIGluIHRoZSBzYW1lIHdheXMgYXMgJ1MneW5jLiBJIGdlbmVyYWxseSAnUyd5bmMsCisnVSdtb3VudCwgdGhlbiByZSdCJ29vdCB3aGVuIG15IHN5c3RlbSBsb2Nrcy4gSXQncyBzYXZlZCBtZSBtYW55IGEgZnNjay4KK0FnYWluLCB0aGUgdW5tb3VudCAocmVtb3VudCByZWFkLW9ubHkpIGhhc24ndCB0YWtlbiBwbGFjZSB1bnRpbCB5b3Ugc2VlIHRoZQorIk9LIiBhbmQgIkRvbmUiIG1lc3NhZ2UgYXBwZWFyIG9uIHRoZSBzY3JlZW4uCisKK1RoZSBsb2dsZXZlbCcwJy0nOScgaXMgdXNlZnVsIHdoZW4geW91ciBjb25zb2xlIGlzIGJlaW5nIGZsb29kZWQgd2l0aAora2VybmVsIG1lc3NhZ2VzIHlvdSBkbyBub3Qgd2FudCB0byBzZWUuIFNldHRpbmcgJzAnIHdpbGwgcHJldmVudCBhbGwgYnV0Cit0aGUgbW9zdCB1cmdlbnQga2VybmVsIG1lc3NhZ2VzIGZyb20gcmVhY2hpbmcgeW91ciBjb25zb2xlLiAoVGhleSB3aWxsCitzdGlsbCBiZSBsb2dnZWQgaWYgc3lzbG9nZC9rbG9nZCBhcmUgYWxpdmUsIHRob3VnaC4pCisKK3QnRSdybSBhbmQgaydJJ2xsIGFyZSB1c2VmdWwgaWYgeW91IGhhdmUgc29tZSBzb3J0IG9mIHJ1bmF3YXkgcHJvY2VzcyB5b3UKK2FyZSB1bmFibGUgdG8ga2lsbCBhbnkgb3RoZXIgd2F5LCBlc3BlY2lhbGx5IGlmIGl0J3Mgc3Bhd25pbmcgb3RoZXIKK3Byb2Nlc3Nlcy4KKworKiAgU29tZXRpbWVzIFN5c1JxIHNlZW1zIHRvIGdldCAnc3R1Y2snIGFmdGVyIHVzaW5nIGl0LCB3aGF0IGNhbiBJIGRvPworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhhdCBoYXBwZW5zIHRvIG1lLCBhbHNvLiBJJ3ZlIGZvdW5kIHRoYXQgdGFwcGluZyBzaGlmdCwgYWx0LCBhbmQgY29udHJvbAorb24gYm90aCBzaWRlcyBvZiB0aGUga2V5Ym9hcmQsIGFuZCBoaXR0aW5nIGFuIGludmFsaWQgc3lzcnEgc2VxdWVuY2UgYWdhaW4KK3dpbGwgZml4IHRoZSBwcm9ibGVtLiAoaWUsIHNvbWV0aGluZyBsaWtlIGFsdC1zeXNycS16KS4gU3dpdGNoaW5nIHRvIGFub3RoZXIKK3ZpcnR1YWwgY29uc29sZSAoQUxUK0ZuKSBhbmQgdGhlbiBiYWNrIGFnYWluIHNob3VsZCBhbHNvIGhlbHAuCisKKyogIEkgaGl0IFN5c1JxLCBidXQgbm90aGluZyBzZWVtcyB0byBoYXBwZW4sIHdoYXQncyB3cm9uZz8KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZXJlIGFyZSBzb21lIGtleWJvYXJkcyB0aGF0IHNlbmQgZGlmZmVyZW50IHNjYW5jb2RlcyBmb3IgU3lzUnEgdGhhbiB0aGUKK3ByZS1kZWZpbmVkIDB4NTQuIFNvIGlmIFN5c1JxIGRvZXNuJ3Qgd29yayBvdXQgb2YgdGhlIGJveCBmb3IgYSBjZXJ0YWluCitrZXlib2FyZCwgcnVuICdzaG93a2V5IC1zJyB0byBmaW5kIG91dCB0aGUgcHJvcGVyIHNjYW5jb2RlIHNlcXVlbmNlLiBUaGVuCit1c2UgJ3NldGtleWNvZGVzIDxzZXF1ZW5jZT4gODQnIHRvIGRlZmluZSB0aGlzIHNlcXVlbmNlIHRvIHRoZSB1c3VhbCBTeXNScQorY29kZSAoODQgaXMgZGVjaW1hbCBmb3IgMHg1NCkuIEl0J3MgcHJvYmFibHkgYmVzdCB0byBwdXQgdGhpcyBjb21tYW5kIGluIGEKK2Jvb3Qgc2NyaXB0LiBPaCwgYW5kIGJ5IHRoZSB3YXksIHlvdSBleGl0ICdzaG93a2V5JyBieSBub3QgdHlwaW5nIGFueXRoaW5nCitmb3IgdGVuIHNlY29uZHMuCisKKyogIEkgd2FudCB0byBhZGQgU3lzUlEga2V5IGV2ZW50cyB0byBhIG1vZHVsZSwgaG93IGRvZXMgaXQgd29yaz8KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0luIG9yZGVyIHRvIHJlZ2lzdGVyIGEgYmFzaWMgZnVuY3Rpb24gd2l0aCB0aGUgdGFibGUsIHlvdSBtdXN0IGZpcnN0IGluY2x1ZGUKK3RoZSBoZWFkZXIgJ2luY2x1ZGUvbGludXgvc3lzcnEuaCcsIHRoaXMgd2lsbCBkZWZpbmUgZXZlcnl0aGluZyBlbHNlIHlvdSBuZWVkLgorTmV4dCwgeW91IG11c3QgY3JlYXRlIGEgc3lzcnFfa2V5X29wIHN0cnVjdCwgYW5kIHBvcHVsYXRlIGl0IHdpdGggQSkgdGhlIGtleQoraGFuZGxlciBmdW5jdGlvbiB5b3Ugd2lsbCB1c2UsIEIpIGEgaGVscF9tc2cgc3RyaW5nLCB0aGF0IHdpbGwgcHJpbnQgd2hlbiBTeXNSUQorcHJpbnRzIGhlbHAsIGFuZCBDKSBhbiBhY3Rpb25fbXNnIHN0cmluZywgdGhhdCB3aWxsIHByaW50IHJpZ2h0IGJlZm9yZSB5b3VyCitoYW5kbGVyIGlzIGNhbGxlZC4gWW91ciBoYW5kbGVyIG11c3QgY29uZm9ybSB0byB0aGUgcHJvdG95cGUgaW4gJ3N5c3JxLmgnLgorCitBZnRlciB0aGUgc3lzcnFfa2V5X29wIGlzIGNyZWF0ZWQsIHlvdSBjYW4gY2FsbCB0aGUgbWFjcm8gCityZWdpc3Rlcl9zeXNycV9rZXkoaW50IGtleSwgc3RydWN0IHN5c3JxX2tleV9vcCAqb3BfcCkgdGhhdCBpcyBkZWZpbmVkIGluCitzeXNycS5oLCB0aGlzIHdpbGwgcmVnaXN0ZXIgdGhlIG9wZXJhdGlvbiBwb2ludGVkIHRvIGJ5ICdvcF9wJyBhdCB0YWJsZQora2V5ICdrZXknLCBpZiB0aGF0IHNsb3QgaW4gdGhlIHRhYmxlIGlzIGJsYW5rLiBBdCBtb2R1bGUgdW5sb2FkIHRpbWUsIHlvdSBtdXN0CitjYWxsIHRoZSBtYWNybyB1bnJlZ2lzdGVyX3N5c3JxX2tleShpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcF9wKSwgd2hpY2gKK3dpbGwgcmVtb3ZlIHRoZSBrZXkgb3AgcG9pbnRlZCB0byBieSAnb3BfcCcgZnJvbSB0aGUga2V5ICdrZXknLCBpZiBhbmQgb25seSBpZgoraXQgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgaW4gdGhhdCBzbG90LiBUaGlzIGlzIGluIGNhc2UgdGhlIHNsb3QgaGFzIGJlZW4KK292ZXJ3cml0dGVuIHNpbmNlIHlvdSByZWdpc3RlcmVkIGl0LgorCitUaGUgTWFnaWMgU3lzUlEgc3lzdGVtIHdvcmtzIGJ5IHJlZ2lzdGVyaW5nIGtleSBvcGVyYXRpb25zIGFnYWluc3QgYSBrZXkgb3AKK2xvb2t1cCB0YWJsZSwgd2hpY2ggaXMgZGVmaW5lZCBpbiAnZHJpdmVycy9jaGFyL3N5c3JxLmMnLiBUaGlzIGtleSB0YWJsZSBoYXMKK2EgbnVtYmVyIG9mIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCBpbnRvIGl0IGF0IGNvbXBpbGUgdGltZSwgYnV0IGlzIG11dGFibGUsCithbmQgNCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciBpbnRlcmZhY2UgdG8gaXQ6IF9fc3lzcnFfbG9ja190YWJsZSwKK19fc3lzcnFfdW5sb2NrX3RhYmxlLCBfX3N5c3JxX2dldF9rZXlfb3AsIGFuZCBfX3N5c3JxX3B1dF9rZXlfb3AuIFRoZQorZnVuY3Rpb25zIF9fc3lzcnFfc3dhcF9rZXlfb3BzIGFuZCBfX3N5c3JxX3N3YXBfa2V5X29wc19ub2xvY2sgYXJlIGRlZmluZWQKK2luIHRoZSBoZWFkZXIgaXRzZWxmLCBhbmQgdGhlIFJFR0lTVEVSIGFuZCBVTlJFR0lTVEVSIG1hY3JvcyBhcmUgYnVpbHQgZnJvbQordGhlc2UuIE1vcmUgY29tcGxleCAoYW5kIGRhbmdlcm91cyEpIG1hbmlwdWxhdGlvbnMgb2YgdGhlIHRhYmxlIGFyZSBwb3NzaWJsZQordXNpbmcgdGhlc2UgZnVuY3Rpb25zLCBidXQgeW91IG11c3QgYmUgY2FyZWZ1bCB0byBhbHdheXMgbG9jayB0aGUgdGFibGUgYmVmb3JlCit5b3UgcmVhZCBvciB3cml0ZSBmcm9tIGl0LCBhbmQgdG8gdW5sb2NrIGl0IGFnYWluIHdoZW4geW91IGFyZSBkb25lLiAoQW5kIG9mCitjb3Vyc2UsIHRvIG5ldmVyIGV2ZXIgbGVhdmUgYW4gaW52YWxpZCBwb2ludGVyIGluIHRoZSB0YWJsZSkuIE51bGwgcG9pbnRlcnMgaW4KK3RoZSB0YWJsZSBhcmUgYWx3YXlzIHNhZmUgOikKKworSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBmZWVsIHRoZSBuZWVkIHRvIGNhbGwgdGhlIGhhbmRsZV9zeXNycSBmdW5jdGlvbiBmcm9tCit3aXRoaW4gYSBmdW5jdGlvbiBjYWxsZWQgYnkgaGFuZGxlX3N5c3JxLCB5b3UgbXVzdCBiZSBhd2FyZSB0aGF0IHlvdSBhcmUgaW4KK2EgbG9jayAoeW91IGFyZSBhbHNvIGluIGFuIGludGVycnVwdCBoYW5kbGVyLCB3aGljaCBtZWFucyBkb24ndCBzbGVlcCEpLCBzbworeW91IG11c3QgY2FsbCBfX2hhbmRsZV9zeXNycV9ub2xvY2sgaW5zdGVhZC4KKworKiAgSSBoYXZlIG1vcmUgcXVlc3Rpb25zLCB3aG8gY2FuIEkgYXNrPworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorWW91IG1heSBmZWVsIGZyZWUgdG8gc2VuZCBlbWFpbCB0byBteXJkcmFhbEBkZWF0aHNkb29yLmNvbSwgYW5kIEkgd2lsbAorcmVzcG9uZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorIC1NeXJkcmFhbAorCitBbmQgSSdsbCBhbnN3ZXIgYW55IHF1ZXN0aW9ucyBhYm91dCB0aGUgcmVnaXN0cmF0aW9uIHN5c3RlbSB5b3UgZ290LCBhbHNvCityZXNwb25kaW5nIGFzIHNvb24gYXMgcG9zc2libGUuCisgLUNydXRjaGVyCisKKyogIENyZWRpdHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1dyaXR0ZW4gYnkgTXlkcmFhbCA8bXlyZHJhYWxAZGVhdGhzZG9vci5jb20+CitVcGRhdGVkIGJ5IEFkYW0gU3VsbWlja2kgPGFkYW1AY2Zhci51bWQuZWR1PgorVXBkYXRlZCBieSBKZXJlbXkgTS4gRG9sYW4gPGptZEB0dXJib2dlZWsub3JnPiAyMDAxLzAxLzI4IDEwOjE1OjU5CitBZGRlZCB0byBieSBDcnV0Y2hlciBEdW5uYXZhbnQgPGNydXRjaGVyK2tlcm5lbEBkYXRhc3RhY2tzLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVsZXBob255L2l4ai50eHQgYi9Eb2N1bWVudGF0aW9uL3RlbGVwaG9ueS9peGoudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMTAyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlbGVwaG9ueS9peGoudHh0CkBAIC0wLDAgKzEsNDA2IEBACitMaW51eCBRdWlja25ldC1Ecml2ZXJzLUhvd3RvCitRdWlja25ldCBUZWNobm9sb2dpZXMsIEluYy4gKHd3dy5xdWlja25ldC5uZXQpCitWZXJzaW9uIDAuMy40ICBEZWNlbWJlciAxOCwgMTk5OQorCisxLjAgIEludHJvZHVjdGlvbgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZmlyc3QgR1BMIHJlbGVhc2UgdmVyc2lvbiBvZiB0aGUgTGludXgKK2RyaXZlciBmb3IgdGhlIFF1aWNrbmV0IEludGVybmV0IFBob25lSkFDSyBhbmQgSW50ZXJuZXQgTGluZUpBQ0sKK2NhcmRzLiAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBjYXJkcyBpcyBhdmFpbGFibGUgYXQKK3d3dy5xdWlja25ldC5uZXQuICBUaGUgZHJpdmVyIHZlcnNpb24gZGlzY3Vzc2VkIGluIHRoaXMgZG9jdW1lbnQgaXMKKzAuMy40LgorCitUaGVzZSBjYXJkcyBvZmZlciBuaWNlIHRlbGNvIHN0eWxlIGludGVyZmFjZXMgdG8gdXNlIHlvdXIgc3RhbmRhcmQKK3RlbGVwaG9uZS9rZXkgc3lzdGVtL1BCWCBhcyB0aGUgdXNlciBpbnRlcmZhY2UgZm9yIFZvSVAgYXBwbGljYXRpb25zLgorVGhlIEludGVybmV0IExpbmVKQUNLIGFsc28gb2ZmZXJzIFBTVE4gY29ubmVjdGl2aXR5IGZvciBhIHNpbmdsZSBsaW5lCitJbnRlcm5ldCB0byBQU1ROIGdhdGV3YXkuICBPZiBjb3Vyc2UsIHlvdSBjYW4gYWRkIG1vcmUgdGhhbiBvbmUgY2FyZAordG8gYSBzeXN0ZW0gdG8gb2J0YWluIG11bHRpLWxpbmUgZnVuY3Rpb25hbGl0eS4gIEF0IHRoaXMgdGltZSwgdGhlCitkcml2ZXIgc3VwcG9ydHMgdGhlIFBPVFMgcG9ydCBvbiBib3RoIHRoZSBJbnRlcm5ldCBQaG9uZUpBQ0sgYW5kIHRoZQorSW50ZXJuZXQgTGluZUpBQ0ssIGJ1dCB0aGUgUFNUTiBwb3J0IG9uIHRoZSBsYXR0ZXIgY2FyZCBpcyBub3QgeWV0CitzdXBwb3J0ZWQuCisKK1RoaXMgZG9jdW1lbnQsIGFuZCB0aGUgZHJpdmVycyBmb3IgdGhlIGNhcmRzLCBhcmUgaW50ZW5kZWQgZm9yIGEKK2xpbWl0ZWQgYXVkaWVuY2UgdGhhdCBpbmNsdWRlcyB0ZWNobmljYWxseSBjYXBhYmxlIHByb2dyYW1tZXJzIHdobword291bGQgbGlrZSB0byBleHBlcmltZW50IHdpdGggUXVpY2tuZXQgY2FyZHMuICBUaGUgZHJpdmVycyBhcmUKK2NvbnNpZGVyZWQgaW4gQUxQSEEgc3RhdHVzIGFuZCBhcmUgbm90IHlldCBjb25zaWRlcmVkIHN0YWJsZSBlbm91Z2gKK2ZvciBnZW5lcmFsLCB3aWRlc3ByZWFkIHVzZSBpbiBhbiB1bmxpbWl0ZWQgYXVkaWVuY2UuCisKK1RoYXQncyB3b3J0aCBzYXlpbmcgYWdhaW46CisKK1RIRSBMSU5VWCBEUklWRVJTIEZPUiBRVUlDS05FVCBDQVJEUyBBUkUgUFJFU0VOVExZIElOIEEgQUxQSEEgU1RBVEUKK0FORCBTSE9VTEQgTk9UIEJFIENPTlNJREVSRUQgQVMgUkVBRFkgRk9SIE5PUk1BTCBXSURFU1BSRUFEIFVTRS4KKworVGhleSBhcmUgcmVsZWFzZWQgZWFybHkgaW4gdGhlIHNwaXJpdCBvZiBJbnRlcm5ldCBkZXZlbG9wbWVudCBhbmQgdG8KK21ha2UgdGhpcyB0ZWNobm9sb2d5IGF2YWlsYWJsZSB0byBpbm5vdmF0b3JzIHdobyB3b3VsZCBiZW5lZml0IGZyb20KK2Vhcmx5IGV4cG9zdXJlLgorCitXaGVuIHdlIHByb21vdGUgdGhlIGRldmljZSBkcml2ZXIgdG8gImJldGEiIGxldmVsIGl0IHdpbGwgYmUKK2NvbnNpZGVyZWQgcmVhZHkgZm9yIG5vbi1wcm9ncmFtbWVyLCBub24tdGVjaG5pY2FsIHVzZXJzLiAgVW50aWwgdGhlbiwKK3BsZWFzZSBiZSBhd2FyZSB0aGF0IHRoZXNlIGRyaXZlcnMgbWF5IG5vdCBiZSBzdGFibGUgYW5kIG1heSBhZmZlY3QKK3RoZSBwZXJmb3JtYW5jZSBvZiB5b3VyIHN5c3RlbS4KKworCisxLjEgTGF0ZXN0IEFkZGl0aW9ucy9JbXByb3ZlbWVudHMKKworVGhlIDAuMy40IHZlcnNpb24gb2YgdGhlIGRyaXZlciBpcyB0aGUgZmlyc3QgR1BMIHJlbGVhc2UuICBTZXZlcmFsCitmZWF0dXJlcyBoYWQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBwcmlvciBiaW5hcnkgb25seSBtb2R1bGUsIG1vc3RseQorZm9yIHJlYXNvbnMgb2YgSW50ZWxsZWN0dWFsIFByb3BlcnR5IHJpZ2h0cy4gIFdlIGNhbid0IHJlbGVhc2UKK2luZm9ybWF0aW9uIHRoYXQgaXMgbm90IG91cnMgLSBzbyBjZXJ0YWluIGFzcGVjdHMgb2YgdGhlIGRyaXZlciBoYWQgdG8KK2JlIHJlbW92ZWQgdG8gcHJvdGVjdCB0aGUgcmlnaHRzIG9mIG90aGVycy4gIAorCitTcGVjaWZpY2FsbHksIHZlcnkgb2xkIEludGVybmV0IFBob25lSkFDSyBjYXJkcyBoYXZlIG5vbi1zdGFuZGFyZAorRy43MjMuMSBjb2RlY3MgKGR1ZSB0byB0aGUgZWFybHkgbmF0dXJlIG9mIHRoZSBEU1BzIGluIHRob3NlIGRheXMpLgorVGhlIGF1dG8tY29udmVyc2lvbiBjb2RlIHRvIGJyaW5nIHRob3NlIGNhcmRzIGludG8gY29tcGxpYW5jZSB3aXRoCit0b2RheXMgc3RhbmRhcmRzIGlzIGF2YWlsYWJsZSBhcyBhIGJpbmFyeSBvbmx5IG1vZHVsZSB0byB0aG9zZSBwZW9wbGUKK25lZWRpbmcgaXQuICBJZiB5b3UgYm91Z2h0IHlvdXIgY2FyZCBhZnRlciAxOTk3IG9yIHNvLCB5b3UgYXJlIE9LIC0KK2l0J3Mgb25seSB0aGUgdmVyeSBvbGQgY2FyZHMgdGhhdCBhcmUgYWZmZWN0ZWQuCisKK0Fsc28sIHRoZSBjb2RlIHRvIGRvd25sb2FkIEcuNzI4L0cuNzI5L0cuNzI5YSBjb2RlY3MgdG8gdGhlIERTUCBpcworYXZhaWxhYmxlIGFzIGEgYmluYXJ5IG9ubHkgbW9kdWxlIGFzIHdlbGwuICBUaGlzIElQIGlzIG5vdCBvdXJzIHRvCityZWxlYXNlLiAgCisKK0hvb2tzIGFyZSBidWlsdCBpbnRvIHRoZSBHUEwgZHJpdmVyIHRvIGFsbG93IGl0IHRvIHdvcmsgd2l0aCBvdGhlcgorY29tcGFuaW9uIG1vZHVsZXMgdGhhdCBhcmUgY29tcGxldGVseSBzZXBhcmF0ZSBmcm9tIHRoaXMgbW9kdWxlLgorCisxLjIgQ29weXJpZ2h0LCBUcmFkZW1hcmtzLCBEaXNjbGFpbWVyLCAmIENyZWRpdHMgCisKK0NvcHlyaWdodAorCitDb3B5cmlnaHQgKGMpIDE5OTkgUXVpY2tuZXQgVGVjaG5vbG9naWVzLCBJbmMuICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQKK3RvIGZyZWVseSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgZG9jdW1lbnQgcHJvdmlkZWQgeW91IHByZXNlcnZlIGl0CitpbiBpdHMgb3JpZ2luYWwgZm9ybS4gRm9yIGNvcnJlY3Rpb25zIGFuZCBtaW5vciBjaGFuZ2VzIGNvbnRhY3QgdGhlCittYWludGFpbmVyIGF0IGxpbnV4QHF1aWNrbmV0Lm5ldC4KKworVHJhZGVtYXJrcworCitJbnRlcm5ldCBQaG9uZUpBQ0sgYW5kIEludGVybmV0IExpbmVKQUNLIGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YKK1F1aWNrbmV0IFRlY2hub2xvZ2llcywgSW5jLgorCitEaXNjbGFpbWVyCisKK011Y2ggb2YgdGhlIGluZm8gaW4gdGhpcyBIT1dUTyBpcyBlYXJseSBpbmZvcm1hdGlvbiByZWxlYXNlZCBieQorUXVpY2tuZXQgVGVjaG5vbG9naWVzLCBJbmMuIGZvciB0aGUgZXhwcmVzcyBwdXJwb3NlIG9mIGFsbG93aW5nIGVhcmx5Cit0ZXN0aW5nIGFuZCB1c2Ugb2YgdGhlIExpbnV4IGRyaXZlcnMgZGV2ZWxvcGVkIGZvciB0aGVpciBwcm9kdWN0cy4KK1doaWxlIGV2ZXJ5IGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBiZSB0aG9yb3VnaCwgY29tcGxldGUgYW5kCithY2N1cmF0ZSwgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlIG1heSBiZSB1bnJlbGlhYmxlIGFuZCB0aGVyZQorYXJlIGxpa2VseSBhIG51bWJlciBvZiBlcnJvcnMgaW4gdGhpcyBkb2N1bWVudC4gUGxlYXNlIGxldCB0aGUKK21haW50YWluZXIga25vdyBhYm91dCB0aGVtLiBTaW5jZSB0aGlzIGlzIGZyZWUgZG9jdW1lbnRhdGlvbiwgaXQKK3Nob3VsZCBiZSBvYnZpb3VzIHRoYXQgbmVpdGhlciBJIG5vciBwcmV2aW91cyBhdXRob3JzIGNhbiBiZSBoZWxkCitsZWdhbGx5IHJlc3BvbnNpYmxlIGZvciBhbnkgZXJyb3JzLgorCitDcmVkaXRzCisKK1RoaXMgSE9XVE8gd2FzIHdyaXR0ZW4gYnk6CisKKwlHcmVnIEhlcmxlaW4gPGdoZXJsZWluQHF1aWNrbmV0Lm5ldD4KKwlFZCBPa2Vyc29uIDxlb2tlcnNvbkBxdWlja25ldC5uZXQ+IAorCisxLjMgIEZ1dHVyZSBQbGFuczogWW91IENhbiBIZWxwIAorCitQbGVhc2UgbGV0IHRoZSBtYWludGFpbmVyIGtub3cgb2YgYW55IGVycm9ycyBpbiBmYWN0cywgb3BpbmlvbnMsCitsb2dpYywgc3BlbGxpbmcsIGdyYW1tYXIsIGNsYXJpdHksIGxpbmtzLCBldGMuICBCdXQgZmlyc3QsIGlmIHRoZSBkYXRlCitpcyBvdmVyIGEgbW9udGggb2xkLCBjaGVjayB0byBzZWUgdGhhdCB5b3UgaGF2ZSB0aGUgbGF0ZXN0Cit2ZXJzaW9uLiBQbGVhc2Ugc2VuZCBhbnkgaW5mbyB0aGF0IHlvdSB0aGluayBiZWxvbmdzIGluIHRoaXMgZG9jdW1lbnQuCisKK1lvdSBjYW4gYWxzbyBjb250cmlidXRlIGNvZGUgYW5kL29yIGJ1Zy1maXhlcyBmb3IgdGhlIHNhbXBsZQorYXBwbGljYXRpb25zLgorCisKKzEuNCAgV2hlcmUgdG8gZ2V0IHRoaW5ncworCitZb3UgY2FuIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciBmcm9tOgorCitodHRwOi8vd3d3LnF1aWNrbmV0Lm5ldC9kZXZlbG9wLmh0bQorCitZb3UgY2FuIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IGZyb206CisKK2h0dHA6Ly93d3cucXVpY2tuZXQubmV0L2RldmVsb3AuaHRtCisKKworMS41ICBNYWlsaW5nIExpc3QKKworUXVpY2tuZXQgb3BlcmF0ZXMgYSBtYWlsaW5nIGxpc3QgdG8gcHJvdmlkZSBhIHB1YmxpYyBmb3J1bSBvbiB1c2luZwordGhlc2UgZHJpdmVycy4KKworVG8gc3Vic2NyaWJlIHRvIHRoZSBsaW51eC1zZGsgbWFpbGluZyBsaXN0LCBzZW5kIGFuIGVtYWlsIHRvOgorCisgICBtYWpvcmRvbW9AbGludXgucXVpY2tuZXQubmV0CisKK0luIHRoZSBib2R5IG9mIHRoZSBlbWFpbCwgdHlwZToKKworICAgc3Vic2NyaWJlIGxpbnV4LXNkayA8eW91ci1lbWFpbC1hZGRyZXNzPgorCitQbGVhc2UgZGVsZXRlIGFueSBzaWduYXR1cmUgYmxvY2sgdGhhdCB5b3Ugd291bGQgbm9ybWFsbHkgYWRkIHRvIHRoZQorYm90dG9tIG9mIHlvdXIgZW1haWwgLSBpdCB0ZW5kcyB0byBjb25mdXNlIG1ham9yZG9tby4KKworVG8gc2VuZCBtYWlsIHRvIHRoZSBsaXN0LCBhZGRyZXNzIHlvdXIgbWFpbCB0byAKKworICAgbGludXgtc2RrQGxpbnV4LnF1aWNrbmV0Lm5ldAorCitZb3VyIG1lc3NhZ2Ugd2lsbCBnbyBvdXQgdG8gZXZlcnlvbmUgb24gdGhlIGxpc3QuCisKK1RvIHVuc3Vic2NyaWJlIHRvIHRoZSBsaW51eC1zZGsgbWFpbGluZyBsaXN0LCBzZW5kIGFuIGVtYWlsIHRvOgorCisgICBtYWpvcmRvbW9AbGludXgucXVpY2tuZXQubmV0CisKK0luIHRoZSBib2R5IG9mIHRoZSBlbWFpbCwgdHlwZToKKworICAgdW5zdWJzY3JpYmUgbGludXgtc2RrIDx5b3VyLWVtYWlsLWFkZHJlc3M+CisKKworCisyLjAgIFJlcXVpcmVtZW50cworCisyLjEgIFF1aWNrbmV0IENhcmQocykKKworWW91IHdpbGwgbmVlZCBhdCBsZWFzdCBvbmUgSW50ZXJuZXQgUGhvbmVKQUNLIG9yIEludGVybmV0IExpbmVKQUNLCitjYXJkcy4gIFRoZXNlIGFyZSBJU0Egb3IgUENJIGJ1cyBkZXZpY2VzIHRoYXQgdXNlIFBsdWctbi1QbGF5IGZvcgorY29uZmlndXJhdGlvbiwgYW5kIHVzZSBubyBJUlFzLiAgVGhlIGRyaXZlciB3aWxsIHN1cHBvcnQgdXAgdG8gMTYKK2NhcmRzIGluIGFueSBvbmUgc3lzdGVtLCBvZiBhbnkgbWl4IGJldHdlZW4gdGhlIHR3byB0eXBlcy4KKworTm90ZSB0aGF0IHlvdSB3aWxsIG5lZWQgdHdvIGNhcmRzIHRvIGRvIGFueSB1c2VmdWwgdGVzdGluZyBhbG9uZSwgc2luY2UKK3lvdSB3aWxsIG5lZWQgYSBjYXJkIG9uIGJvdGggZW5kcyBvZiB0aGUgY29ubmVjdGlvbi4gIE9mIGNvdXJzZSwgaWYKK3lvdSBhcmUgZG9pbmcgY29sbGFib3JhdGl2ZSB3b3JrLCBwZXJoYXBzIHlvdXIgZnJpZW5kcyBvciBjb3dvcmtlcnMKK2hhdmUgY2FyZHMgdG9vLiAgSWYgbm90LCB3ZSdsbCBnbGFkbHkgc2VsbCB0aGVtIHNvbWUhCisKKworMi4yICBJU0FQTlAKKworU2luY2UgdGhlIFF1aWNrbmV0IGNhcmRzIGFyZSBQbHVnLW4tUGxheSBkZXZpY2VzLCB5b3Ugd2lsbCBuZWVkIHRoZQoraXNhcG5wIHRvb2xzIHBhY2thZ2UgdG8gY29uZmlndXJlIHRoZSBjYXJkcywgb3IgeW91IGNhbiB1c2UgdGhlIGlzYXBucAorbW9kdWxlIHRvIGF1dG9jb25maWd1cmUgdGhlbS4gIFRoZSBmb3JtZXIgcGFja2FnZSBwcm9iYWJseSBjYW1lIHdpdGgKK3lvdXIgTGludXggZGlzdHJpYnV0aW9uLiAgRG9jdW1lbnRhdGlvbiBvbiB0aGlzIHBhY2thZ2UgaXMgYXZhaWxhYmxlCitvbmxpbmUgYXQ6CisKK2h0dHA6Ly9tYWlsZXIud2l3aS51bmktbWFyYnVyZy5kZS9saW51eC9MRFAvSE9XVE8vUGx1Zy1hbmQtUGxheS1IT1dUTy5odG1sCisKK1RoZSBpc2FwbnAgYXV0b2NvbmZpZ3VyYXRpb24gaXMgYXZhaWxhYmxlIG9uIHRoZSBRdWlja25ldCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3d3dy5xdWlja25ldC5uZXQvZGV2ZWxvcC5odG0KKwordGhvdWdoIGl0IG1heSBiZSBpbiB0aGUga2VybmVsIGJ5IHRoZSB0aW1lIHlvdSByZWFkIHRoaXMuCisKKworMy4wICBDYXJkIENvbmZpZ3VyYXRpb24gCisKK0lmIHlvdSBkaWQgbm90IGdldCB5b3VyIGRyaXZlcnMgYXMgcGFydCBvZiB0aGUgbGludXgga2VybmVsLCBkbyB0aGUKK2ZvbGxvd2luZyB0byBpbnN0YWxsIHRoZW06CisKKyAgIGEuICB1bnRhciB0aGUgZGlzdHJpYnV0aW9uIGZpbGUuICBXZSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICB0YXIgLXh2emYgaXhqLTAueC54LnRnegorCitUaGlzIGNyZWF0ZXMgYSBzdWJkaXJlY3RvcnkgaG9sZGluZyBhbGwgdGhlIG5lY2Vzc2FyeSBmaWxlcy4gIEdvIHRvIHRoYXQKK3N1YmRpcmVjdG9yeS4KKworICAgYi4gIHJ1biB0aGUgIml4al9kZXZfY3JlYXRlIiBzY3JpcHQgdG8gcmVtb3ZlIGFueSBzdHJheSBkZXZpY2UKK2ZpbGVzIGxlZnQgaW4gdGhlIC9kZXYgZGlyZWN0b3J5LCBhbmQgdG8gY3JlYXRlIHRoZSBuZXcgb2ZmaWNpYWxseQorZGVzaWduYXRlZCBkZXZpY2UgZmlsZXMuICBOb3RlIHRoYXQgdGhlIG9sZCBkZXZpY2VzIHdlcmUgY2FsbGVkIAorL2Rldi9peGosIGFuZCB0aGUgbmV3IG1ldGhvZCB1c2VzIC9kZXYvcGhvbmUuICAKKworICAgYy4gIHR5cGUgIm1ha2U7bWFrZSBpbnN0YWxsIiAtIHRoaXMgd2lsbCBjb21waWxlIGFuZCBpbnN0YWxsIHRoZQorbW9kdWxlLgorCisgICBkLiAgdHlwZSAiZGVwbW9kIC1hdiIgdG8gcmVidWlsZCBhbGwgeW91ciBrZXJuZWwgdmVyc2lvbiBkZXBlbmRlbmNpZXMuCisKKyAgIGUuICBpZiB5b3UgYXJlIHVzaW5nIHRoZSBpc2FwbnAgbW9kdWxlIHRvIGNvbmZpZ3VyZSB0aGUgY2FyZHMKKyAgICAgICBhdXRvbWF0aWNhbGx5LCB0aGVuIHNraXAgdG8gc3RlcCBmLiAgT3RoZXJ3aXNlLCBlbnN1cmUgdGhhdCB5b3UKKyAgICAgICBoYXZlIHJ1biB0aGUgaXNhcG5wIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSB0byBwcm9wZXJseSBjb25maWd1cmUKKyAgICAgICB0aGUgY2FyZHMuCisKKyAgICAgICBlMS4gVGhlIEludGVybmV0IFBob25lSkFDSyBoYXMgb25lIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdGhhdAorICAgICAgICAgICByZXF1aXJlcyAxNiBJTyBwb3J0cy4gIFRoZSBJbnRlcm5ldCBMaW5lSkFDSyBjYXJkIGhhcyB0d28KKyAgICAgICAgICAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYW5kIGlzYXBucCByZXBvcnRzIHRoYXQgSU8gMAorICAgICAgICAgICByZXF1aXJlcyAxNiBJTyBwb3J0cyBhbmQgSU8gMSByZXF1aXJlcyA4LiAgVGhlIFF1aWNrbmV0CisgICAgICAgICAgIGRyaXZlciBhc3N1bWVzIHRoYXQgdGhlc2UgcmVnaXN0ZXJzIGFyZSBjb25maWd1cmVkIHRvIGJlCisgICAgICAgICAgIGNvbnRpZ3VvdXMsIGkuZS4gaWYgSU8gMCBpcyBzZXQgdG8gMHgzNDAgdGhlbiBJTyAxIHNob3VsZAorICAgICAgICAgICBiZSBzZXQgdG8gMHgzNTAuCisKKyAgICAgICAgICAgTWFrZSBzdXJlIHRoYXQgbm9uZSBvZiB0aGUgY2FyZHMgb3ZlcmxhcCBpZiB5b3UgaGF2ZQorICAgICAgICAgICBtdWx0aXBsZSBjYXJkcyBpbiB0aGUgc3lzdGVtLgorCisgICAgICAgICAgIElmIHlvdSBhcmUgbmV3IHRvIHRoZSBpc2FwbnAgdG9vbHMsIHlvdSBjYW4ganVtcHN0YXJ0CisgICAgICAgICAgIHlvdXJzZWxmIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgIGUyLiAgZ28gdG8gdGhlIC9ldGMgZGlyZWN0b3J5IGFuZCBydW4gcG5wZHVtcCB0byBnZXQgYSBibGFuaworICAgICAgICAgICBpc2FwbnAuY29uZiBmaWxlLgorCisJICAgCXBucGR1bXAgPiAvZXRjL2lzYXBucC5jb25mCisKKyAgICAgIGUzLiAgZWRpdCB0aGUgL2V0Yy9pc2FwbnAuY29uZiBmaWxlIHRvIHNldCB0aGUgSU8gd2FybmluZ3MgYW5kCisgICAgICAgICAgIHRoZSByZWdpc3RlciBJTyBhZGRyZXNzZXMuIFRoZSBJTyB3YXJuaW5ncyBtZWFucyB0aGF0IHlvdQorICAgICAgICAgICBzaG91bGQgZmluZCB0aGUgbGluZSBpbiB0aGUgZmlsZSB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKworCSAgIChDT05GTElDVCAoSU8gRkFUQUwpKElSUSBGQVRBTCkoRE1BIEZBVEFMKShNRU0gRkFUQUwpKSAjIG9yIFdBUk5JTkcKKworCSAgIGFuZCB5b3Ugc2hvdWxkIGVkaXQgdGhlIGxpbmUgdG8gbG9vayBsaWtlIHRoaXM6CisKKwkgICAoQ09ORkxJQ1QgKElPIFdBUk5JTkcpKElSUSBGQVRBTCkoRE1BIEZBVEFMKShNRU0gRkFUQUwpKSAjCisJICAgb3IgV0FSTklORworCisgICAgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gc2V0IHRoZSBJTyBwb3J0IGFkZHJlc3Nlcy4gIFRoZSBpc3N1ZQorICAgICAgICAgICBoZXJlIGlzIHRoYXQgaXNhcG5wIGRvZXMgbm90IGlkZW50aWZ5IGFsbCBvZiB0aGUgcG9ydHMgb3V0CisgICAgICAgICAgIHRoZXJlLiAgU3BlY2lmaWNhbGx5IGFueSBkZXZpY2UgdGhhdCBkb2VzIG5vdCBoYXZlIGEgZHJpdmVyCisgICAgICAgICAgIG9yIG1vZHVsZSBsb2FkZWQgYnkgTGludXggd2lsbCBub3QgYmUgcmVnaXN0ZXJlZC4gIFRoaXMKKyAgICAgICAgICAgaW5jbHVkZXMgb2xkZXIgc291bmQgY2FyZHMgYW5kIG5ldHdvcmsgY2FyZHMuICBXZSBoYXZlCisgICAgICAgICAgIGZvdW5kIHRoYXQgdGhlIElPIHBvcnQgMHgzMDAgaXMgb2Z0ZW4gdXNlZCBldmVuIHRob3VnaAorICAgICAgICAgICBpc2FwbnAgY2xhaW1zIHRoYXQgbm8tb25lIGlzIHVzaW5nIHRob3NlIHBvcnRzLiAgV2UKKyAgICAgICAgICAgcmVjb21tZW5kIHRoYXQgZm9yIGEgc2luZ2xlIGNhcmQgaW5zdGFsbGF0aW9uIHRoYXQgcG9ydAorICAgICAgICAgICAweDM0MCAoYW5kIDB4MzUwKSBiZSB1c2VkLiAgVGhlIElPIHBvcnQgbGluZSBzaG91bGQgY2hhbmdlCisgICAgICAgICAgIGZyb20gdGhpczoKKworCSAgIChJTyAwIChTSVpFIDE2KSAoQkFTRSAweDAzMDApIChDSEVDSykpCisKKwkgICB0byB0aGlzOgorCisJICAgKElPIDAgKFNJWkUgMTYpIChCQVNFIDB4MDM0MCkgKQorCisgICAgICAgZTQuICBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBRdWlja25ldCBjYXJkcywgbWFrZSBzdXJlIHRoYXQgeW91IGRvCisgICAgICAgICAgICBub3QgaGF2ZSBhbnkgb3ZlcmxhcHMuICBCZSBlc3BlY2lhbGx5IGNhcmVmdWwgaWYgeW91IGFyZQorICAgICAgICAgICAgbWl4aW5nIEludGVybmV0IFBob25lSkFDSyBhbmQgSW50ZXJuZXQgTGluZUpBQ0sgY2FyZHMgaW4KKyAgICAgICAgICAgIHRoZSBzYW1lIHN5c3RlbS4gIEluIHRoZXNlIGNhc2VzIHdlIHJlY29tbWVuZCBtb3ZpbmcgdGhlCisgICAgICAgICAgICBJTyBwb3J0IGFkZHJlc3NlcyB0byB0aGUgMHg0MDAgYmxvY2suICBQbGVhc2Ugbm90ZSB0aGF0IG9uCisgICAgICAgICAgICBhIGZldyBtYWNoaW5lcyB0aGUgMHg0MDAgc2VyaWVzIGFyZSB1c2VkLiAgRmVlbCBmcmVlIHRvCisgICAgICAgICAgICBleHBlcmltZW50IHdpdGggb3RoZXIgYWRkcmVzc2VzLiAgT3VyIGNhcmRzIGhhdmUgYmVlbgorICAgICAgICAgICAgcHJvdmVuIHRvIHdvcmsgdXNpbmcgSU8gYWRkcmVzc2VzIG9mIHVwIHRvIDB4RkYwLgorCisgICAgICAgZTUuICB0aGUgbGFzdCBzdGVwIGlzIHRvIHVuY29tbWVudCB0aGUgYWN0aXZhdGlvbiBsaW5lIHNvIHRoZQorICAgICAgICAgICAgZHJpdmVycyB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9ydC4gIFRoaXMgbWVhbnMgdGhlCisgICAgICAgICAgICBsaW5lIChpbW1lZGlhdGVseSBiZWxvdykgdGhlIElPIGxpbmUgc2hvdWxkIGdvIGZyb20gdGhpczoKKworICAgICAgICAgICAgIyAoQUNUIFkpCisKKyAgICAgICAgICAgIHRvIHRoaXM6CisKKwkgICAgKEFDVCBZKQorCisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGZpbmlzaGVkIGVkaXRpbmcgdGhlIGlzYXBucC5jb25mIGZpbGUgeW91CisgICAgICAgICAgICBtdXN0IHN1Ym1pdCBpdCBpbnRvIHRoZSBwbnAgZHJpdmVyY29uZmlndXJlIHRoZSBjYXJkcy4KKyAgICAgICAgICAgIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKwkgICAgaXNhcG5wIGlzYXBucC5jb25mCisKKwkgICAgSWYgdGhpcyB3b3JrcyB5b3Ugc2hvdWxkIHNlZSBhIGxpbmUgdGhhdCBpZGVudGlmaWVzIHRoZQorICAgICAgICAgICAgUXVpY2tuZXQgZGV2aWNlLCB0aGUgSU8gcG9ydChzKSBjaG9zZW4sIGFuZCBhIG1lc3NhZ2UKKyAgICAgICAgICAgICJFbmFibGVkIE9LIi4KKworICAgZi4gIGlmIHlvdSBhcmUgbG9hZGluZyB0aGUgbW9kdWxlIGJ5IGhhbmQsIHVzZSBpbnNtb2QuICBBbiBleGFtcGxlCitvZiB0aGlzIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCisJaW5zbW9kIHBob25lZGV2CisJaW5zbW9kIGl4aiBkc3Bpbz0weDMyMCwweDMxMCB4aW89MCwweDMzMAorCitUaGVuIHZlcmlmeSB0aGUgbW9kdWxlIGxvYWRlZCBieSBydW5uaW5nIGxzbW9kLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBhCittb2R1bGUgdGhhdCBtYXRjaGVzIHlvdXIga2VybmVsIHZlcnNpb24sIHlvdSBtYXkgbmVlZCB0byAiZm9yY2UiIHRoZQorbG9hZCB1c2luZyB0aGUgLWYgb3B0aW9uIGluIHRoZSBpbnNtb2QgY29tbWFuZC4KKworCWluc21vZCBwaG9uZWRldgorCWluc21vZCAtZiBpeGogZHNwaW89MHgzMjAsMHgzMTAgeGlvPTAsMHgzMzAKKworCitJZiB5b3UgYXJlIHVzaW5nIGlzYXBucCB0byBhdXRvY29uZmlndXJlIHlvdXIgY2FyZCwgdGhlbiB5b3UgZG8gTk9UCituZWVkIGFueSBvZiB0aGUgYWJvdmUsIHRob3VnaCB5b3UgbmVlZCB0byB1c2UgZGVwbW9kIHRvIGxvYWQgdGhlCitkcml2ZXIsIGxpa2UgdGhpczoKKworCWRlcG1vZCBpeGoKKword2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIG5lZWRlZCBkcml2ZXJzIGdldHRpbmcgbG9hZGVkIGF1dG9tYXRpY2FsbHkuCisKKyAgIGcuICBpZiB5b3UgYXJlIHBsYW5uaW5nIG9uIHVzaW5nIGtlcm5lbGQgdG8gYXV0b21hdGljYWxseSBsb2FkIHRoZSAKK21vZHVsZSBmb3IgeW91LCB0aGVuIHlvdSBuZWVkIHRvIGVkaXQgL2V0Yy9jb25mLm1vZHVsZXMgYW5kIGFkZCB0aGUgCitmb2xsb3dpbmcgbGluZXM6CisKKwlvcHRpb25zIGl4aiBkc3Bpbz0weDM0MCB4aW89MHgzMzAgaXhqZGVidWc9MAorCitJZiB5b3UgZG8gdGhpcywgdGhlbiB3aGVuIHlvdSBleGVjdXRlIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUKK21vZHVsZSBrZXJuZWxkIHdpbGwgbG9hZCB0aGUgbW9kdWxlIGZvciB5b3UuICBOb3RlIHRoYXQgdG8gZG8gdGhpcywKK3lvdSBuZWVkIHRvIGhhdmUgeW91ciBrZXJuZWwgc2V0IHRvIHN1cHBvcnQga2VybmVsZC4gIFlvdSBjYW4gY2hlY2sKK2ZvciB0aGlzIGJ5IGxvb2tpbmcgYXQgL3Vzci9zcmMvbGludXgvLmNvbmZpZyBhbmQgeW91IHNob3VsZCBzZWUgdGhpczoKKworCSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKwkjCisJPHNuaXA+CisJQ09ORklHX0tNT0Q9eQorCisgIGguICBpZiB5b3Ugd2FudCBub24tcm9vdCB1c2VycyB0byBiZSBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIHRvIHRoZSAKK2l4aiBkZXZpY2VzICh0aGlzIGlzIGEgZ29vZCBpZGVhISkgeW91IHNob3VsZCBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgIC0gZGVjaWRlIHVwb24gYSBncm91cCBuYW1lIHRvIHVzZSBhbmQgY3JlYXRlIHRoYXQgZ3JvdXAgaWYgCisgICAgICAgbmVlZGVkLiAgQWRkIHRoZSB1c2VyIG5hbWVzIHRvIHRoYXQgZ3JvdXAgdGhhdCB5b3Ugd2lzaCB0byAKKyAgICAgICBoYXZlIGFjY2VzcyB0byB0aGUgZGV2aWNlLiAgRm9yIGV4YW1wbGUsIHdlIHR5cGljYWxseSB3aWxsCisgICAgICAgY3JlYXRlIGEgZ3JvdXAgbmFtZWQgIml4aiIgaW4gL2V0Yy9ncm91cCBhbmQgYWRkIGFsbCB1c2VycworICAgICAgIHRvIHRoYXQgZ3JvdXAgdGhhdCB3ZSB3YW50IHRvIHJ1biBzb2Z0d2FyZSB0aGF0IGNhbiB1c2UgdGhlIAorICAgICAgIGl4alggZGV2aWNlcy4KKworICAgICAtIGNoYW5nZSB0aGUgcGVybWlzc2lvbnMgb24gdGhlIGRldmljZSBmaWxlcywgbGlrZSB0aGlzOgorCQorICAgICAgIGNoZ3JwIGl4aiAvZGV2L2l4aioJCisgICAgICAgY2htb2QgNjYwIC9kZXYvaXhqKgorCQorT25jZSB0aGlzIGlzIGRvbmUsIHRoZW4gbm9uLXJvb3QgdXNlcnMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIHRoZQorZGV2aWNlcy4gIElmIHlvdSBoYXZlIGVuYWJsZWQgYXV0b2xvYWRpbmcgb2YgbW9kdWxlcywgdGhlbiB0aGUgdXNlcgorc2hvdWxkIGJlIGFibGUgdG8gb3BlbiB0aGUgZGV2aWNlIGFuZCBoYXZlIHRoZSBtb2R1bGUgbG9hZGVkCithdXRvbWF0aWNhbGx5IGZvciB0aGVtLgorCisKKzQuMCBEcml2ZXIgSW5zdGFsbGF0aW9uIHByb2JsZW1zLgorCitXZSBoYXZlIHRlc3RlZCB0aGVzZSBkcml2ZXJzIG9uIHRoZSAyLjIuOSwgMi4yLjEwLCAyLjIuMTIsIGFuZCAyLjIuMTMga2VybmVscworYW5kIGluIGFsbCBjYXNlcyBoYXZlIGV2ZW50dWFsbHkgYmVlbiBhYmxlIHRvIGdldCB0aGUgZHJpdmVycyB0byBsb2FkIGFuZCAKK3J1bi4gIFdlIGhhdmUgZm91bmQgZm91ciB0eXBlcyBvZiBwcm9ibGVtcyB0aGF0IHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4KK1RoZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zIGFyZToKKworICBhLiBBIHN0ZXAgd2FzIG1pc3NlZCBpbiB0aGUgaW5zdGFsbGF0aW9uLiAgR28gYmFjayBhbmQgdXNlIHNlY3Rpb24gMworYXMgYSBjaGVja2xpc3QuICBNYW55IHBlb3BsZSBtaXNzIHJ1bm5pbmcgdGhlIGl4al9kZXZfY3JlYXRlIHNjcmlwdCBhbmQgdGh1cworbmV2ZXIgbG9hZCB0aGUgZGV2aWNlIG5hbWVzIGludG8gdGhlIGZpbGVzeXN0ZW0uCisKKyAgYi4gVGhlIGtlcm5lbCBpcyBpbmNvbnNpc3RlbnRseSBsaW5rZWQuICBXZSBoYXZlIGZvdW5kIHRoaXMgcHJvYmxlbSBpbgordGhlIE91dCBPZiB0aGUgQm94IGluc3RhbGxhdGlvbiBvZiBzZXZlcmFsIGRpc3RyaWJ1dGlvbnMuICBUaGUgc3ltcHRvbXMgCithcmUgdGhhdCBuZWl0aGVyIGRyaXZlciB3aWxsIGxvYWQsIGFuZCB0aGF0IHRoZSB1bmtub3duIHN5bWJvbHMgaW5jbHVkZSAiamlmZnkiCithbmQgImttYWxsb2MiLiAgVGhlIHNvbHV0aW9uIGlzIHRvIHJlY29tcGlsZSBib3RoIHRoZSBrZXJuZWwgYW5kIHRoZQorbW9kdWxlcy4gIFRoZSBjb21tYW5kIHN0cmluZyBmb3IgdGhlIGZpbmFsIGNvbXBpbGUgbG9va3MgbGlrZSB0aGlzOgorCisgICAgSW4gdGhlIGtlcm5lbCBkaXJlY3Rvcnk6CisgICAgMS4gIGNwIC5jb25maWcgL3RtcAorICAgIDIuICBtYWtlIG1ycHJvcGVyCisgICAgMy4gIGNwIC90bXAvLmNvbmZpZyAuCisgICAgNC4JbWFrZSBjbGVhbjttYWtlIGJ6SW1hZ2U7bWFrZSBtb2R1bGVzO21ha2UgbW9kdWxlc19pbnN0YWxsCisKK1RoaXMgcmVidWlsZHMgYm90aCB0aGUga2VybmVsIGFuZCBhbGwgdGhlIG1vZHVsZXMgYW5kIG1ha2VzIHN1cmUgdGhleSBhbGwgCitoYXZlIHRoZSBzYW1lIGxpbmthZ2VzLiAgVGhpcyBnZW5lcmFsbHkgc29sdmVzIHRoZSBwcm9ibGVtIG9uY2UgdGhlIG5ldyAKK2tlcm5lbCBpcyBpbnN0YWxsZWQgYW5kIHRoZSBzeXN0ZW0gcmVib290ZWQuCisKKyAgYy4gVGhlIGtlcm5lbCBoYXMgYmVlbiBwYXRjaGVkLCB0aGVuIHVucGF0Y2hlZC4gIFRoaXMgaGFwcGVucyB3aGVuCitzb21lb25lIGRlY2lkZXMgdG8gdXNlIGFuIGVhcmxpZXIga2VybmVsIGFmdGVyIHRoZXkgbG9hZCBhIGxhdGVyIGtlcm5lbC4KK1RoZSBzeW1wdG9tcyBhcmUgcHJvY2VlZGluZyB0aHJvdWdoIGFsbCB0aHJlZSBhYm92ZSBzdGVwcyBhbmQgc3RpbGwgbm90CitiZWluZyBhYmxlIHRvIGxvYWQgdGhlIGRyaXZlci4gIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgdGhlIGdlbmVyYXRlZAoraGVhZGVyIGZpbGVzIGFyZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSBrZXJuZWwgaXRzZWxmLiAgVGhlIHNvbHV0aW9uIGlzCit0byByZWNvbXBpbGUgKGFnYWluKSB1c2luZyAibWFrZSBtcnByb3BlciIuICBUaGlzIHdpbGwgcmVtb3ZlIGFuZCB0aGVuCityZWdlbmVyYXRlIGFsbCB0aGUgbmVjZXNzYXJ5IGhlYWRlciBmaWxlcy4gIE9uY2UgdGhpcyBpcyBkb25lLCB0aGVuIHlvdSAKK25lZWQgdG8gaW5zdGFsbCBhbmQgcmVib290IHRoZSBrZXJuZWwuICBXZSBoYXZlIG5vdCBzZWVuIGFueSBwcm9ibGVtCitsb2FkaW5nIG9uZSBvZiBvdXIgZHJpdmVycyBhZnRlciB0aGlzIHRyZWF0bWVudC4KKworNS4wICBLbm93biBMaW1pdGF0aW9ucworCitXZSBjYW5ub3QgY3VycmVudGx5IHBsYXkgImRpYWwtdG9uZSIgYW5kIGxpc3RlbiBmb3IgRFRNRiBkaWdpdHMgYXQgdGhlCitzYW1lIHRpbWUgdXNpbmcgdGhlIElTQSBQaG9uZUpBQ0suICBUaGlzIGlzIGEgYnVnIGluIHRoZSA4MDIwIERTUCBjaGlwCit1c2VkIG9uIHRoYXQgcHJvZHVjdC4gIEFsbCBvdGhlciBRdWlja25ldCBwcm9kdWN0cyBmdW5jdGlvbiBub3JtYWxseQoraW4gdGhpcyByZWdhcmQuICBXZSBoYXZlIGEgd29yay1hcm91bmQsIGJ1dCBpdCdzIG5vdCBkb25lIHlldC4gIFVudGlsCit0aGVuLCBpZiB5b3Ugd2FudCBkaWFsLXRvbmUsIHlvdSBjYW4gYWx3YXlzIHBsYXkgYSByZWNvcmRlZCBkaWFsLXRvbmUKK3NvdW5kIGludG8gdGhlIGF1ZGlvIHVudGlsIHlvdSBoYXZlIGdhdGhlcmVkIHRoZSBEVE1GIGRpZ2l0cy4KKworCisKKworCisKKworCisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RpbWVfaW50ZXJwb2xhdG9ycy50eHQgYi9Eb2N1bWVudGF0aW9uL3RpbWVfaW50ZXJwb2xhdG9ycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNiNjA4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGltZV9pbnRlcnBvbGF0b3JzLnR4dApAQCAtMCwwICsxLDQxIEBACitUaW1lIEludGVycG9sYXRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaW1lIGludGVycG9sYXRvcnMgYXJlIGEgYmFzZSBvZiB0aW1lIGNhbGN1bGF0aW9uIGJldHdlZW4gdGltZXIgdGlja3MgYW5kCithbGxvdyBhbiBhY2N1cmF0ZSBkZXRlcm1pbmF0aW9uIG9mIHRpbWUgZG93biB0byB0aGUgYWNjdXJhY3kgb2YgdGhlIHRpbWUKK3NvdXJjZSBpbiBuYW5vc2Vjb25kcy4KKworVGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlIHR5cGljYWxseSBwcm92aWRlcyBnZXR0aW1lb2ZkYXkgYW5kCitzZXR0aW1lb2ZkYXkgdW5kZXIgTGludXguIFRoZSB0aW1lIGludGVycG9sYXRvciBwcm92aWRlcyBib3RoIGlmIGFuIGFyY2gKK2RlZmluZXMgQ09ORklHX1RJTUVfSU5URVJQT0xBVElPTi4gVGhlIGFyY2ggc3RpbGwgbXVzdCBzZXQgdXAgdGltZXIgdGljaworb3BlcmF0aW9ucyBhbmQgY2FsbCB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9ucyB0byBhZHZhbmNlIHRoZSBjbG9jay4KKworV2l0aCB0aGUgdGltZSBpbnRlcnBvbGF0b3IgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGV4aXN0cyBmb3IgdGltZQoraW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRpY2tzLiBUaGUgcHJvdmlkZWQgbG9naWMgaXMgaGlnaGx5IHNjYWxhYmxlCithbmQgaGFzIGJlZW4gdGVzdGVkIGluIFNNUCBzaXR1YXRpb25zIG9mIHVwIHRvIDUxMiBDUFVzLgorCitJZiBDT05GSUdfVElNRV9JTlRFUlBPTEFUSU9OIGlzIGRlZmluZWQgdGhlbiB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUKKyhvciB0aGUgZGV2aWNlIGRyaXZlcnMgLSBsaWtlIEhQRVQpIG1heSByZWdpc3RlciB0aW1lIGludGVycG9sYXRvcnMuCitUaGVzZSBhcmUgdHlwaWNhbGx5IGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisKK3N0YXRpYyBzdHJ1Y3QgdGltZV9pbnRlcnBvbGF0b3IgbXlfaW50ZXJwb2xhdG9yIHsKKwkuZnJlcXVlbmN5ID0gTVlfRlJFUVVFTkNZLAorCS5zb3VyY2UgPSBUSU1FX1NPVVJDRV9NTUlPMzIsCisJLnNoaWZ0ID0gOCwJCS8qIHNjYWxpbmcgZm9yIGhpZ2hlciBhY2N1cmFjeSAqLworCS5kcmlmdCA9IC0xLAkJLyogVW5rbm93biBkcmlmdCAqLworCS5qaXR0ZXIgPSAwCQkvKiB0aW1lIHNvdXJjZSBpcyBzdGFibGUgKi8KK307CisKK3ZvaWQgdGltZV9pbml0KHZvaWQpCit7CisJLi4uLgorCS8qIEluaXRpYWxpemF0aW9uIG9mIHRoZSB0aW1lciAqLgorCW15X2ludGVycG9sYXRvci5hZGRyZXNzID0gJm15X3RpbWVyOworCXJlZ2lzdGVyX3RpbWVfaW50ZXJwb2xhdG9yKCZteV9pbnRlcnBvbGF0b3IpOworCS4uLi4KK30KKworRm9yIG1vcmUgZGV0YWlscyBzZWUgaW5jbHVkZS9saW51eC90aW1leC5oIGFuZCBrZXJuZWwvdGltZXIuYy4KKworQ2hyaXN0b3BoIExhbWV0ZXIgPGNocmlzdG9waEBsYW1ldGVyLmNvbT4sIE9jdG9iZXIgMzEsIDIwMDQKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aXBhci50eHQgYi9Eb2N1bWVudGF0aW9uL3RpcGFyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzEzM2JhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90aXBhci50eHQKQEAgLTAsMCArMSw5MyBAQAorCisJCVBhcmFsbGVsIGxpbmsgY2FibGUgZm9yIFRleGFzIEluc3RydW1lbnRzIGhhbmRoZWxkcworCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitBdXRob3I6IFJvbWFpbiBMaWV2aW4KK0hvbWVwYWdlOiBodHRwOi8vbHBnLnRpY2FsYy5vcmcvcHJqX3RpZGV2L2luZGV4Lmh0bWwKKworCitJTlRST0RVQ1RJT046CisKK1RoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSB2ZXJ5IGNvbW1vbiBob21lLW1hZGUgcGFyYWxsZWwgbGluayBjYWJsZSwgYSBjYWJsZSAKK2Rlc2lnbmVkIGZvciBjb25uZWN0aW5nIFRJOHgvOXggZ3JhcGhpbmcgY2FsY3VsYXRvcnMgKGhhbmRoZWxkcykgdG8gYSBjb21wdXRlcgorb3Igd29ya3N0YXRpb24gKEFscGhhLCBTcGFyYykuIEdpdmVuIHRoYXQgZHJpdmVyIGlzIGJ1aWx0IG9uIHBhcnBvcnQsIHRoZSAKK3BhcmFsbGVsIHBvcnQgYWJzdHJhY3Rpb24gbGF5ZXIsIHRoaXMgZHJpdmVyIGlzIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudC4KKworSXQgY2FuIGFsc28gYmUgdXNlZCB3aXRoIGFub3RoZXIgZGV2aWNlIHBsdWdnZWQgb24gdGhlIHNhbWUgcG9ydCAoc3VjaCBhcyBhCitaSVAgZHJpdmUpLiBJIGhhdmUgYSAxMDBNQiBaSVAgYW5kIGJvdGggb2YgdGhlbSB3b3JrIGZpbmUhCisKK0lmIHlvdSBuZWVkIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSB2aXNpdCB0aGUgJ1RJIGRyaXZlcnMnIGhvbWVwYWdlIGF0IHRoZSBVUkwKK2Fib3ZlLgorCitXSEFUIFlPVSBORUVEOgorCitBIFRJIGNhbGN1bGF0b3IgYW5kIGEgcHJvZ3JhbSBjYXBhYmxlIG9mIGNvbW11bmljYXRpbmcgd2l0aCB5b3VyIGNhbGN1bGF0b3IuCisKK1RpTFAgd2lsbCB3b3JrIGZvciBzdXJlIChzaW5jZSBJIGFtIGl0cyBkZXZlbG9wZXIhKS4geWFsOTIgbWF5IGJlIGFibGUgdG8gdXNlCitpdCBieSBjaGFuZ2luZyB0aWRldiBmb3IgdGlwYXIgKG1heSByZXF1aXJlIHNvbWUgaGFja2luZy4uLikuCisKK0hPVyBUTyBVU0UgSVQ6CisKK1lvdSBtdXN0IGhhdmUgZmlyc3QgY29tcGlsZWQgcGFycG9ydCBzdXBwb3J0IChDT05GSUdfUEFSUE9SVF9ERVYpOiBlaXRoZXIgCitjb21waWxlZCBpbiB5b3VyIGtlcm5lbCwgZWl0aGVyIGFzIGEgbW9kdWxlLiAKKworTmV4dCwgKGFzIHJvb3QpOgorCisgICAgICAgbW9kcHJvYmUgcGFycG9ydAorICAgICAgIG1vZHByb2JlIHRpcGFyCisKK0lmIGl0IGlzIG5vdCBhbHJlYWR5IHRoZXJlIChpdCB1c3VhbGx5IGlzKSwgY3JlYXRlIHRoZSBkZXZpY2U6CisKKyAgICAgICBta25vZCAvZGV2L3RpcGFyMCBjIDExNSAwCisgICAgICAgbWtub2QgL2Rldi90aXBhcjEgYyAxMTUgMQorICAgICAgIG1rbm9kIC9kZXYvdGlwYXIyIGMgMTE1IDIKKworWW91IHdpbGwgaGF2ZSB0byBzZXQgcGVybWlzc2lvbnMgb24gdGhpcyBkZXZpY2UgdG8gYWxsb3cgeW91IHRvIHJlYWQvd3JpdGUKK2Zyb20gaXQ6CisKKyAgICAgICBjaG1vZCA2NjYgL2Rldi90aXBhclswLi4yXQorICAgICAgIAorTm93IHlvdSBhcmUgcmVhZHkgdG8gcnVuIGEgbGlua2luZyBwcm9ncmFtIHN1Y2ggYXMgVGlMUC4gQmUgc3VyZSB0byBjb25maWd1cmUgCitpdCBwcm9wZXJseSAoUlRGTSkuCisgICAgICAgCitNT0RVTEUgUEFSQU1FVEVSUzoKKworICBZb3UgY2FuIHNldCB0aGVzZSB3aXRoOiAgbW9kcHJvYmUgdGlwYXIgTkFNRT1WQUxVRQorICBUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIHNldCB0aGVzZSBvbiBhIHBlci1jYWJsZSBiYXNpcy4KKworICBOQU1FOiB0aW1lb3V0CisgIFRZUEU6IGludGVnZXIKKyAgREVGQVVMVDogMTUKKyAgREVTQzogVGltZW91dCB2YWx1ZSBpbiB0ZW50aCBvZiBzZWNvbmRzLiBJZiBubyBkYXRhIGlzIGF2YWlsYWJsZSBvbmNlIHRoaXMgCisJdGltZSBoYXMgZXhwaXJlZCB0aGVuIHRoZSBkcml2ZXIgd2lsbCByZXR1cm4gd2l0aCBhIHRpbWVvdXQgZXJyb3IuCisKKyAgTkFNRTogZGVsYXkKKyAgVFlQRTogaW50ZWdlcgorICBERUZBVUxUOiAxMAorICBERVNDOiBJbnRlci1iaXQgZGVsYXkgaW4gbWljcm8tc2Vjb25kcy4gQSBsb3dlciB2YWx1ZSBnaXZlcyBhbiBoaWdoZXIgZGF0YQorCXJhdGUgYnV0IG1ha2VzIHRyYW5zbWlzc2lvbiBsZXNzIHJlbGlhYmxlLgorCitUaGVzZSBwYXJhbWV0ZXJzIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1biB0aW1lIGJ5IGFueSBwcm9ncmFtIHZpYSBpb2N0bCgyKSBjYWxscyAKK2FzIGxpc3RlZCBpbiAuL2luY2x1ZGUvbGludXgvdGljYWJsZS5oLgorCitSYXRoZXIgdGhhbiB3cml0ZSA1MCBwYWdlcyBkZXNjcmliaW5nIHRoZSBpb2N0bCgpIGFuZCBzbyBvbiwgaXQgaXMKK3BlcmhhcHMgbW9yZSB1c2VmdWwgeW91IGxvb2sgYXQgdGljYWJsZXMgbGlicmFyeSAoZGV2X2xpbmsuYykgdGhhdCBkZW1vbnN0cmF0ZXMKK2hvdyB0byB1c2UgdGhlbSwgYW5kIGRlbW9uc3RyYXRlcyB0aGUgZmVhdHVyZXMgb2YgdGhlIGRyaXZlci4gVGhpcyBpcworcHJvYmFibHkgYSBsb3QgbW9yZSB1c2VmdWwgdG8gcGVvcGxlIGludGVyZXN0ZWQgaW4gd3JpdGluZyBhcHBsaWNhdGlvbnMKK3RoYXQgd2lsbCBiZSB1c2luZyB0aGlzIGRyaXZlci4KKworUVVJUktTL0JVR1M6CisKK05vbmUuCisKK0hPVyBUTyBDT05UQUNUIFVTOgorCitZb3UgY2FuIGVtYWlsIG1lIGF0IHJvbXNAbHBnLnRpY2FsYy5vcmcuIFBsZWFzZSBwcmVmaXggdGhlIHN1YmplY3QgbGluZQord2l0aCAiVElQQVI6ICIgc28gdGhhdCBJIGFtIGNlcnRhaW4gdG8gbm90aWNlIHlvdXIgbWVzc2FnZS4KK1lvdSBjYW4gYWxzbyBtYWlsIEpCIGF0IGpiQGpibGFjaGUub3JnLiBIZSBwYWNrYWdlZCB0aGVzZSBkcml2ZXJzIGZvciBEZWJpYW4uCisKK0NSRURJVFM6CisKK1RoZSBjb2RlIGlzIGJhc2VkIG9uIHRpZGV2LmMgJiBwYXJwb3J0LmMuCitUaGUgZHJpdmVyIGhhcyBiZWVuIGRldmVsb3BlZCBpbmRlcGVuZGVudGx5IG9mIFRleGFzIEluc3RydW1lbnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90dHkudHh0IGIvRG9jdW1lbnRhdGlvbi90dHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NThjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3R0eS50eHQKQEAgLTAsMCArMSwxOTggQEAKKworCQkJVGhlIExvY2tyb25vbWljb24KKworWW91ciBndWlkZSB0byB0aGUgYW5jaWVudCBhbmQgdHdpc3RlZCBsb2NraW5nIHBvbGljaWVzIG9mIHRoZSB0dHkgbGF5ZXIgYW5kCit0aGUgd2FycGVkIGxvZ2ljIGJlaGluZCB0aGVtLiBCZXdhcmUgYWxsIHllIHdobyByZWFkIG9uLgorCitGSVhNRTogc3RpbGwgbmVlZCB0byB3b3JrIG91dCB0aGUgZnVsbCBzZXQgb2YgQktMIGFzc3VtcHRpb25zIGFuZCBkb2N1bWVudAordGhlbSBzbyB0aGV5IGNhbiBldmVudHVhbGx5IGJlIGtpbGxlZCBvZmYuCisKKworTGluZSBEaXNjaXBsaW5lCistLS0tLS0tLS0tLS0tLS0KKworTGluZSBkaXNjaXBsaW5lcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHR0eV9yZWdpc3Rlcl9sZGlzYygpIHBhc3NpbmcgdGhlCitkaXNjaXBsaW5lIG51bWJlciBhbmQgdGhlIGxkaXNjIHN0cnVjdHVyZS4gQXQgdGhlIHBvaW50IG9mIHJlZ2lzdHJhdGlvbiB0aGUgCitkaXNjaXBsaW5lIG11c3QgYmUgcmVhZHkgdG8gdXNlIGFuZCBpdCBpcyBwb3NzaWJsZSBpdCB3aWxsIGdldCB1c2VkIGJlZm9yZQordGhlIGNhbGwgcmV0dXJucyBzdWNjZXNzLiBJZiB0aGUgY2FsbCByZXR1cm5zIGFuIGVycm9yIHRoZW4gaXQgd29uJ3QgZ2V0CitjYWxsZWQuIERvIG5vdCByZS11c2UgbGRpc2MgbnVtYmVycyBhcyB0aGV5IGFyZSBwYXJ0IG9mIHRoZSB1c2Vyc3BhY2UgQUJJCithbmQgd3JpdGluZyBvdmVyIGFuIGV4aXN0aW5nIGxkaXNjIHdpbGwgY2F1c2UgZGVtb25zIHRvIGVhdCB5b3VyIGNvbXB1dGVyLgorQWZ0ZXIgdGhlIHJldHVybiB0aGUgbGRpc2MgZGF0YSBoYXMgYmVlbiBjb3BpZWQgc28geW91IG1heSBmcmVlIHlvdXIgb3duIAorY29weSBvZiB0aGUgc3RydWN0dXJlLiBZb3UgbXVzdCBub3QgcmUtcmVnaXN0ZXIgb3ZlciB0aGUgdG9wIG9mIHRoZSBsaW5lCitkaXNjaXBsaW5lIGV2ZW4gd2l0aCB0aGUgc2FtZSBkYXRhIG9yIHlvdXIgY29tcHV0ZXIgYWdhaW4gd2lsbCBiZSBlYXRlbiBieQorZGVtb25zLgorCitJbiBvcmRlciB0byByZW1vdmUgYSBsaW5lIGRpc2NpcGxpbmUgY2FsbCB0dHlfcmVnaXN0ZXJfbGRpc2MgcGFzc2luZyBOVUxMLgorSW4gYW5jaWVudCB0aW1lcyB0aGlzIGFsd2F5cyB3b3JrZWQuIEluIG1vZGVybiB0aW1lcyB0aGUgZnVuY3Rpb24gd2lsbAorcmV0dXJuIC1FQlVTWSBpZiB0aGUgbGRpc2MgaXMgY3VycmVudGx5IGluIHVzZS4gU2luY2UgdGhlIGxkaXNjIHJlZmVyZW5jaW5nCitjb2RlIG1hbmFnZXMgdGhlIG1vZHVsZSBjb3VudHMgdGhpcyBzaG91bGQgbm90IHVzdWFsbHkgYmUgYSBjb25jZXJuLgorCitIZWVkIHRoaXMgd2FybmluZzogdGhlIHJlZmVyZW5jZSBjb3VudCBmaWVsZCBvZiB0aGUgcmVnaXN0ZXJlZCBjb3BpZXMgb2YgdGhlCit0dHlfbGRpc2Mgc3RydWN0dXJlIGluIHRoZSBsZGlzYyB0YWJsZSBjb3VudHMgdGhlIG51bWJlciBvZiBsaW5lcyB1c2luZyB0aGlzCitkaXNjaXBsaW5lLiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB0dHlfbGRpc2Mgc3RydWN0dXJlIHdpdGhpbiBhIHR0eSAKK2NvdW50cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB1c2VycyBvZiB0aGUgbGRpc2MgYXQgdGhpcyBpbnN0YW50LiBJbiBlZmZlY3QgaXQKK2NvdW50cyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgb2YgZXhlY3V0aW9uIHdpdGhpbiBhbiBsZGlzYyBtZXRob2QgKHBsdXMgdGhvc2UKK2Fib3V0IHRvIGVudGVyIGFuZCBleGl0IGFsdGhvdWdoIHRoaXMgZGV0YWlsIG1hdHRlcnMgbm90KS4KKworTGluZSBEaXNjaXBsaW5lIE1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RUWSBzaWRlIGludGVyZmFjZXM6CisKK2Nsb3NlKCkJCS0JVGhpcyBpcyBjYWxsZWQgb24gYSB0ZXJtaW5hbCB3aGVuIHRoZSBsaW5lCisJCQlkaXNjaXBsaW5lIGlzIGJlaW5nIHVucGx1Z2dlZC4gQXQgdGhlIHBvaW50IG9mCisJCQlleGVjdXRpb24gbm8gZnVydGhlciB1c2VycyB3aWxsIGVudGVyIHRoZQorCQkJbGRpc2MgY29kZSBmb3IgdGhpcyB0dHkuIENhbiBzbGVlcC4KKworb3BlbigpCQktCUNhbGxlZCB3aGVuIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgYXR0YWNoZWQgdG8KKwkJCXRoZSB0ZXJtaW5hbC4gTm8gb3RoZXIgY2FsbCBpbnRvIHRoZSBsaW5lCisJCQlkaXNjaXBsaW5lIGZvciB0aGlzIHR0eSB3aWxsIG9jY3VyIHVudGlsIGl0CisJCQljb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LiBDYW4gc2xlZXAuCisKK3dyaXRlKCkJCS0JQSBwcm9jZXNzIGlzIHdyaXRpbmcgZGF0YSB0aHJvdWdoIHRoZSBsaW5lCisJCQlkaXNjaXBsaW5lLiAgTXVsdGlwbGUgd3JpdGUgY2FsbHMgYXJlIHNlcmlhbGl6ZWQKKwkJCWJ5IHRoZSB0dHkgbGF5ZXIgZm9yIHRoZSBsZGlzYy4gIE1heSBzbGVlcC4gCisKK2ZsdXNoX2J1ZmZlcigpCS0JTWF5IGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgYmV0d2VlbiBvcGVuIGFuZCBjbG9zZS4KKworY2hhcnNfaW5fYnVmZmVyKCkgLQlSZXBvcnQgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyLgorCitzZXRfdGVybWlvcygpCS0JQ2FsbGVkIG9uIHRlcm1pb3Mgc3RydWN0dXJlIGNoYW5nZXMuIFRoZSBjYWxsZXIKKwkJCXBhc3NlcyB0aGUgb2xkIHRlcm1pb3MgZGF0YSBhbmQgdGhlIGN1cnJlbnQgZGF0YQorCQkJaXMgaW4gdGhlIHR0eS4gQ2FsbGVkIHVuZGVyIHRoZSB0ZXJtaW9zIHNlbWFwaG9yZSBzbworCQkJYWxsb3dlZCB0byBzbGVlcC4gU2VyaWFsaXplZCBhZ2FpbnN0IGl0c2VsZiBvbmx5LgorCityZWFkKCkJCS0JTW92ZSBkYXRhIGZyb20gdGhlIGxpbmUgZGlzY2lwbGluZSB0byB0aGUgdXNlci4KKwkJCU11bHRpcGxlIHJlYWQgY2FsbHMgbWF5IG9jY3VyIGluIHBhcmFsbGVsIGFuZCB0aGUKKwkJCWxkaXNjIG11c3QgZGVhbCB3aXRoIHNlcmlhbGl6YXRpb24gaXNzdWVzLiBNYXkgCisJCQlzbGVlcC4KKworcG9sbCgpCQktCUNoZWNrIHRoZSBzdGF0dXMgZm9yIHRoZSBwb2xsL3NlbGVjdCBjYWxscy4gTXVsdGlwbGUKKwkJCXBvbGwgY2FsbHMgbWF5IG9jY3VyIGluIHBhcmFsbGVsLiBNYXkgc2xlZXAuCisKK2lvY3RsKCkJCS0JQ2FsbGVkIHdoZW4gYW4gaW9jdGwgaXMgaGFuZGVkIHRvIHRoZSB0dHkgbGF5ZXIKKwkJCXRoYXQgbWlnaHQgYmUgZm9yIHRoZSBsZGlzYy4gTXVsdGlwbGUgaW9jdGwgY2FsbHMKKwkJCW1heSBvY2N1ciBpbiBwYXJhbGxlbC4gTWF5IHNsZWVwLiAKKworRHJpdmVyIFNpZGUgSW50ZXJmYWNlczoKKworcmVjZWl2ZV9idWYoKQktCUhhbmQgYnVmZmVycyBvZiBieXRlcyBmcm9tIHRoZSBkcml2ZXIgdG8gdGhlIGxkaXNjCisJCQlmb3IgcHJvY2Vzc2luZy4gU2VtYW50aWNzIGN1cnJlbnRseSByYXRoZXIKKwkJCW15c3RlcmlvdXMgOCgKKworcmVjZWl2ZV9yb29tKCkJLQlDYW4gYmUgY2FsbGVkIGJ5IHRoZSBkcml2ZXIgbGF5ZXIgYXQgYW55IHRpbWUgd2hlbgorCQkJdGhlIGxkaXNjIGlzIG9wZW5lZC4gVGhlIGxkaXNjIG11c3QgYmUgYWJsZSB0bworCQkJaGFuZGxlIHRoZSByZXBvcnRlZCBhbW91bnQgb2YgZGF0YSBhdCB0aGF0IGluc3RhbnQuCisJCQlTeW5jaHJvbml6YXRpb24gYmV0d2VlbiBhY3RpdmUgcmVjZWl2ZV9idWYgYW5kCisJCQlyZWNlaXZlX3Jvb20gY2FsbHMgaXMgZG93biB0byB0aGUgZHJpdmVyIG5vdCB0aGUKKwkJCWxkaXNjLiBNdXN0IG5vdCBzbGVlcC4KKword3JpdGVfd2FrZXVwKCkJLQlNYXkgYmUgY2FsbGVkIGF0IGFueSBwb2ludCBiZXR3ZWVuIG9wZW4gYW5kIGNsb3NlLgorCQkJVGhlIFRUWV9ET19XUklURV9XQUtFVVAgZmxhZyBpbmRpY2F0ZXMgaWYgYSBjYWxsCisJCQlpcyBuZWVkZWQgYnV0IGFsd2F5cyByYWNlcyB2ZXJzdXMgY2FsbHMuIFRodXMgdGhlCisJCQlsZGlzYyBtdXN0IGJlIGNhcmVmdWwgYWJvdXQgc2V0dGluZyBvcmRlciBhbmQgdG8KKwkJCWhhbmRsZSB1bmV4cGVjdGVkIGNhbGxzLiBNdXN0IG5vdCBzbGVlcC4KKworCQkJVGhlIGRyaXZlciBpcyBmb3JiaWRkZW4gZnJvbSBjYWxsaW5nIHRoaXMgZGlyZWN0bHkKKwkJCWZyb20gdGhlIC0+d3JpdGUgY2FsbCBmcm9tIHRoZSBsZGlzYyBhcyB0aGUgbGRpc2MKKwkJCWlzIHBlcm1pdHRlZCB0byBjYWxsIHRoZSBkcml2ZXIgd3JpdGUgbWV0aG9kIGZyb20KKwkJCXRoaXMgZnVuY3Rpb24uIEluIHN1Y2ggYSBzaXR1YXRpb24gZGVmZXIgaXQuCisKKworTG9ja2luZworCitDYWxsZXJzIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUgZnVuY3Rpb25zIGZyb20gdGhlIHR0eSBsYXllciBhcmUgcmVxdWlyZWQgdG8KK3Rha2UgbGluZSBkaXNjaXBsaW5lIGxvY2tzLiBUaGUgc2FtZSBpcyB0cnVlIG9mIGNhbGxzIGZyb20gdGhlIGRyaXZlciBzaWRlCitidXQgbm90IHlldCBlbmZvcmNlZC4KKworVGhyZWUgY2FsbHMgYXJlIG5vdyBwcm92aWRlZAorCisJbGRpc2MgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisKK3Rha2VzIGEgaGFuZGxlIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUgaW4gdGhlIHR0eSBhbmQgcmV0dXJucyBpdC4gSWYgbm8gbGRpc2MKK2lzIGN1cnJlbnRseSBhdHRhY2hlZCBvciB0aGUgbGRpc2MgaXMgYmVpbmcgY2xvc2VkIGFuZCByZS1vcGVuZWQgYXQgdGhpcworcG9pbnQgdGhlbiBOVUxMIGlzIHJldHVybmVkLiBXaGlsZSB0aGlzIGhhbmRsZSBpcyBoZWxkIHRoZSBsZGlzYyB3aWxsIG5vdAorY2hhbmdlIG9yIGdvIGF3YXkuCisKKwl0dHlfbGRpc2NfZGVyZWYobGRpc2MpCisKK1JldHVybnMgdGhlIGxkaXNjIHJlZmVyZW5jZSBhbmQgYWxsb3dzIHRoZSBsZGlzYyB0byBiZSBjbG9zZWQuIFJldHVybmluZyB0aGUKK3JlZmVyZW5jZSB0YWtlcyBhd2F5IHlvdXIgcmlnaHQgdG8gY2FsbCB0aGUgbGRpc2MgZnVuY3Rpb25zIHVudGlsIHlvdSB0YWtlCithIG5ldyByZWZlcmVuY2UuCisKKwlsZGlzYyA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOworCitQZXJmb3JtcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0dHlfbGRpc2NfcmVmIGV4Y2VwdCB0aGF0IGl0IHdpbGwgd2FpdCBmb3IgYW4KK2xkaXNjIGNoYW5nZSB0byBjb21wbGV0ZSBhbmQgdGhlbiByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIG5ldyBsZGlzYy4gCisKK1doaWxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc2xpZ2h0bHkgc2xvd2VyIHRoYW4gdGhlIG9sZCBjb2RlIHRoZXkgc2hvdWxkIGhhdmUKK21pbmltYWwgaW1wYWN0IGFzIG1vc3QgcmVjZWl2ZSBsb2dpYyB1c2VzIHRoZSBmbGlwIGJ1ZmZlcnMgYW5kIHRoZXkgb25seQorbmVlZCB0byB0YWtlIGEgcmVmZXJlbmNlIHdoZW4gdGhleSBwdXNoIGJpdHMgdXAgdGhyb3VnaCB0aGUgZHJpdmVyLgorCitBIGNhdXRpb246IFRoZSBsZGlzYy0+b3BlbigpLCBsZGlzYy0+Y2xvc2UoKSBhbmQgZHJpdmVyLT5zZXRfbGRpc2MgCitmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIHRoZSBsZGlzYyB1bmF2YWlsYWJsZS4gVGh1cyB0dHlfbGRpc2NfcmVmIHdpbGwKK2ZhaWwgaW4gdGhpcyBzaXR1YXRpb24gaWYgdXNlZCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBMZGlzYyBhbmQgZHJpdmVyCitjb2RlIGNhbGxpbmcgaXRzIG93biBmdW5jdGlvbnMgbXVzdCBiZSBjYXJlZnVsIGluIHRoaXMgY2FzZS4gCisKKworRHJpdmVyIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLQorCitvcGVuKCkJCS0JQ2FsbGVkIHdoZW4gYSBkZXZpY2UgaXMgb3BlbmVkLiBNYXkgc2xlZXAKKworY2xvc2UoKQkJLQlDYWxsZWQgd2hlbiBhIGRldmljZSBpcyBjbG9zZWQuIEF0IHRoZSBwb2ludCBvZgorCQkJcmV0dXJuIGZyb20gdGhpcyBjYWxsIHRoZSBkcml2ZXIgbXVzdCBtYWtlIG5vIAorCQkJZnVydGhlciBsZGlzYyBjYWxscyBvZiBhbnkga2luZC4gTWF5IHNsZWVwCisKK3dyaXRlKCkJCS0JQ2FsbGVkIHRvIHdyaXRlIGJ5dGVzIHRvIHRoZSBkZXZpY2UuIE1heSBub3QKKwkJCXNsZWVwLiBNYXkgb2NjdXIgaW4gcGFyYWxsZWwgaW4gc3BlY2lhbCBjYXNlcy4gCisJCQlCZWNhdXNlIHRoaXMgaW5jbHVkZXMgcGFuaWMgcGF0aHMgZHJpdmVycyBnZW5lcmFsbHkKKwkJCXNob3VsZG4ndCB0cnkgYW5kIGRvIGNsZXZlciBsb2NraW5nIGhlcmUuCisKK3B1dF9jaGFyKCkJLQlTdHVmZiBhIHNpbmdsZSBjaGFyYWN0ZXIgb250byB0aGUgcXVldWUuIFRoZQorCQkJZHJpdmVyIGlzIGd1YXJhbnRlZWQgZm9sbG93aW5nIHVwIGNhbGxzIHRvCisJCQlmbHVzaF9jaGFycy4KKworZmx1c2hfY2hhcnMoKQktCUFzayB0aGUga2VybmVsIHRvIHdyaXRlIHB1dF9jaGFyIHF1ZXVlCisKK3dyaXRlX3Jvb20oKQktCVJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGh0IGNhbiBiZSBzdHVmZmVkCisJCQlpbnRvIHRoZSBwb3J0IGJ1ZmZlcnMgd2l0aG91dCBvdmVyZmxvdyAob3IgbGVzcykuCisJCQlUaGUgbGRpc2MgaXMgcmVzcG9uc2libGUgZm9yIGJlaW5nIGludGVsbGlnZW50CisgCQkJYWJvdXQgbXVsdGktdGhyZWFkaW5nIG9mIHdyaXRlX3Jvb20vd3JpdGUgY2FsbHMKKworaW9jdGwoKQkJLQlDYWxsZWQgd2hlbiBhbiBpb2N0bCBtYXkgYmUgZm9yIHRoZSBkcml2ZXIKKworc2V0X3Rlcm1pb3MoKQktCUNhbGxlZCBvbiB0ZXJtaW9zIGNoYW5nZSwgc2VyaWFsaXplZCBhZ2FpbnN0CisJCQlpdHNlbGYgYnkgYSBzZW1hcGhvcmUuIE1heSBzbGVlcC4KKworc2V0X2xkaXNjKCkJLQlOb3RpZmllciBmb3IgZGlzY2lwbGluZSBjaGFuZ2UuIEF0IHRoZSBwb2ludCB0aGlzIAorCQkJaXMgZG9uZSB0aGUgZGlzY2lwbGluZSBpcyBub3QgeWV0IHVzYWJsZS4gQ2FuIG5vdworCQkJc2xlZXAgKEkgdGhpbmspCisKK3Rocm90dGxlKCkJLQlDYWxsZWQgYnkgdGhlIGxkaXNjIHRvIGFzayB0aGUgZHJpdmVyIHRvIGRvIGZsb3cKKwkJCWNvbnRyb2wuICBTZXJpYWxpemF0aW9uIGluY2x1ZGluZyB3aXRoIHVudGhyb3R0bGUKKwkJCWlzIHRoZSBqb2Igb2YgdGhlIGxkaXNjIGxheWVyLgorCit1bnRocm90dGxlKCkJLQlDYWxsZWQgYnkgdGhlIGxkaXNjIHRvIGFzayB0aGUgZHJpdmVyIHRvIHN0b3AgZmxvdworCQkJY29udHJvbC4KKworc3RvcCgpCQktCUxkaXNjIG5vdGlmaWVyIHRvIHRoZSBkcml2ZXIgdG8gc3RvcCBvdXRwdXQuIEFzIHdpdGgKKwkJCXRocm90dGxlIHRoZSBzZXJpYWxpemF0aW9ucyB3aXRoIHN0YXJ0KCkgYXJlIGRvd24KKwkJCXRvIHRoZSBsZGlzYyBsYXllci4KKworc3RhcnQoKQkJLQlMZGlzYyBub3RpZmllciB0byB0aGUgZHJpdmVyIHRvIHN0YXJ0IG91dHB1dC4KKworaGFuZ3VwKCkJLQlBc2sgdGhlIHR0eSBkcml2ZXIgdG8gY2F1c2UgYSBoYW5ndXAgaW5pdGlhdGVkCisJCQlmcm9tIHRoZSBob3N0IHNpZGUuIFtDYW4gc2xlZXAgPz9dCisKK2JyZWFrX2N0bCgpCS0JU2VuZCBSUzIzMiBicmVhay4gQ2FuIHNsZWVwLiBDYW4gZ2V0IGNhbGxlZCBpbgorCQkJcGFyYWxsZWwsIGRyaXZlciBtdXN0IHNlcmlhbGl6ZSAoZm9yIG5vdyksIGFuZAorCQkJd2l0aCB3cml0ZSBjYWxscy4KKword2FpdF91bnRpbF9zZW50KCkgLQlXYWl0IGZvciBjaGFyYWN0ZXJzIHRvIGV4aXQgdGhlIGhhcmR3YXJlIHF1ZXVlCisJCQlvZiB0aGUgZHJpdmVyLiBDYW4gc2xlZXAKKworc2VuZF94Y2hhcigpCSAgLQlTZW5kIFhPTi9YT0ZGIGFuZCBpZiBwb3NzaWJsZSBqdW1wIHRoZSBxdWV1ZSB3aXRoCisJCQlpdCBpbiBvcmRlciB0byBnZXQgZmFzdCBmbG93IGNvbnRyb2wgcmVzcG9uc2VzLgorCQkJQ2Fubm90IHNsZWVwID8/CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdW1sL1VzZXJNb2RlTGludXgtSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi91bWwvVXNlck1vZGVMaW51eC1IT1dUTy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3YjY1NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdW1sL1VzZXJNb2RlTGludXgtSE9XVE8udHh0CkBAIC0wLDAgKzEsNDY4NiBAQAorICBVc2VyIE1vZGUgTGludXggSE9XVE8KKyAgVXNlciBNb2RlIExpbnV4IENvcmUgVGVhbQorICBNb24gTm92IDE4IDE0OjE2OjE2IEVTVCAyMDAyCisKKyAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHVzZSBhbmQgYWJ1c2Ugb2YgSmVmZiBEaWtlJ3MgVXNlciBNb2RlCisgIExpbnV4OiBhIHBvcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBhcyBhIG5vcm1hbCBJbnRlbCBMaW51eCBwcm9jZXNzLgorICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgVGFibGUgb2YgQ29udGVudHMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgMS4gSW50cm9kdWN0aW9uCisKKyAgICAgMS4xIEhvdyBpcyBVc2VyIE1vZGUgTGludXggRGlmZmVyZW50PworICAgICAxLjIgV2h5IFdvdWxkIEkgV2FudCBVc2VyIE1vZGUgTGludXg/CisKKyAgMi4gQ29tcGlsaW5nIHRoZSBrZXJuZWwgYW5kIG1vZHVsZXMKKworICAgICAyLjEgQ29tcGlsaW5nIHRoZSBrZXJuZWwKKyAgICAgMi4yIENvbXBpbGluZyBhbmQgaW5zdGFsbGluZyBrZXJuZWwgbW9kdWxlcworICAgICAyLjMgQ29tcGlsaW5nIGFuZCBpbnN0YWxsaW5nIHVtbF91dGlsaXRpZXMKKworICAzLiBSdW5uaW5nIFVNTCBhbmQgbG9nZ2luZyBpbgorCisgICAgIDMuMSBSdW5uaW5nIFVNTAorICAgICAzLjIgTG9nZ2luZyBpbgorICAgICAzLjMgRXhhbXBsZXMKKworICA0LiBVTUwgb24gMkcvMkcgaG9zdHMKKworICAgICA0LjEgSW50cm9kdWN0aW9uCisgICAgIDQuMiBUaGUgcHJvYmxlbQorICAgICA0LjMgVGhlIHNvbHV0aW9uCisKKyAgNS4gU2V0dGluZyB1cCBzZXJpYWwgbGluZXMgYW5kIGNvbnNvbGVzCisKKyAgICAgNS4xIFNwZWNpZnlpbmcgdGhlIGRldmljZQorICAgICA1LjIgU3BlY2lmeWluZyB0aGUgY2hhbm5lbAorICAgICA1LjMgRXhhbXBsZXMKKworICA2LiBTZXR0aW5nIHVwIHRoZSBuZXR3b3JrCisKKyAgICAgNi4xIEdlbmVyYWwgc2V0dXAKKyAgICAgNi4yIFVzZXJzcGFjZSBkYWVtb25zCisgICAgIDYuMyBTcGVjaWZ5aW5nIGV0aGVybmV0IGFkZHJlc3NlcworICAgICA2LjQgVU1MIGludGVyZmFjZSBzZXR1cAorICAgICA2LjUgTXVsdGljYXN0CisgICAgIDYuNiBUVU4vVEFQIHdpdGggdGhlIHVtbF9uZXQgaGVscGVyCisgICAgIDYuNyBUVU4vVEFQIHdpdGggYSBwcmVjb25maWd1cmVkIHRhcCBkZXZpY2UKKyAgICAgNi44IEV0aGVydGFwCisgICAgIDYuOSBUaGUgc3dpdGNoIGRhZW1vbgorICAgICA2LjEwIFNsaXAKKyAgICAgNi4xMSBTbGlycAorICAgICA2LjEyIHBjYXAKKyAgICAgNi4xMyBTZXR0aW5nIHVwIHRoZSBob3N0IHlvdXJzZWxmCisKKyAgNy4gU2hhcmluZyBGaWxlc3lzdGVtcyBiZXR3ZWVuIFZpcnR1YWwgTWFjaGluZXMKKworICAgICA3LjEgQSB3YXJuaW5nCisgICAgIDcuMiBVc2luZyBsYXllcmVkIGJsb2NrIGRldmljZXMKKyAgICAgNy4zIE5vdGUhCisgICAgIDcuNCBBbm90aGVyIHdhcm5pbmcKKyAgICAgNy41IHVtbF9tb28gOiBNZXJnaW5nIGEgQ09XIGZpbGUgd2l0aCBpdHMgYmFja2luZyBmaWxlCisKKyAgOC4gQ3JlYXRpbmcgZmlsZXN5c3RlbXMKKworICAgICA4LjEgQ3JlYXRlIHRoZSBmaWxlc3lzdGVtIGZpbGUKKyAgICAgOC4yIEFzc2lnbiB0aGUgZmlsZSB0byBhIFVNTCBkZXZpY2UKKyAgICAgOC4zIENyZWF0aW5nIGFuZCBtb3VudGluZyB0aGUgZmlsZXN5c3RlbQorCisgIDkuIEhvc3QgZmlsZSBhY2Nlc3MKKworICAgICA5LjEgVXNpbmcgaG9zdGZzCisgICAgIDkuMiBob3N0ZnMgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICA5LjMgQnVpbGRpbmcgaG9zdGZzCisKKyAgMTAuIFRoZSBNYW5hZ2VtZW50IENvbnNvbGUKKyAgICAgMTAuMSB2ZXJzaW9uCisgICAgIDEwLjIgaGFsdCBhbmQgcmVib290CisgICAgIDEwLjMgY29uZmlnCisgICAgIDEwLjQgcmVtb3ZlCisgICAgIDEwLjUgc3lzcnEKKyAgICAgMTAuNiBoZWxwCisgICAgIDEwLjcgY2FkCisgICAgIDEwLjggc3RvcAorICAgICAxMC45IGdvCisKKyAgMTEuIEtlcm5lbCBkZWJ1Z2dpbmcKKworICAgICAxMS4xIFN0YXJ0aW5nIHRoZSBrZXJuZWwgdW5kZXIgZ2RiCisgICAgIDExLjIgRXhhbWluaW5nIHNsZWVwaW5nIHByb2Nlc3NlcworICAgICAxMS4zIFJ1bm5pbmcgZGRkIG9uIFVNTAorICAgICAxMS40IERlYnVnZ2luZyBtb2R1bGVzCisgICAgIDExLjUgQXR0YWNoaW5nIGdkYiB0byB0aGUga2VybmVsCisgICAgIDExLjYgVXNpbmcgYWx0ZXJuYXRlIGRlYnVnZ2VycworCisgIDEyLiBLZXJuZWwgZGVidWdnaW5nIGV4YW1wbGVzCisKKyAgICAgMTIuMSBUaGUgY2FzZSBvZiB0aGUgaHVuZyBmc2NrCisgICAgIDEyLjIgRXBpc29kZSAyOiBUaGUgY2FzZSBvZiB0aGUgaHVuZyBmc2NrCisKKyAgMTMuIFdoYXQgdG8gZG8gd2hlbiBVTUwgZG9lc24ndCB3b3JrCisKKyAgICAgMTMuMSBTdHJhbmdlIGNvbXBpbGF0aW9uIGVycm9ycyB3aGVuIHlvdSBidWlsZCBmcm9tIHNvdXJjZQorICAgICAxMy4yIFVNTCBoYW5ncyBvbiBib290IGFmdGVyIG1vdW50aW5nIGRldmZzCisgICAgIDEzLjMgQSB2YXJpZXR5IG9mIHBhbmljcyBhbmQgaGFuZ3Mgd2l0aCAvdG1wIG9uIGEgcmVpc2VyZnMgIGZpbGVzeXN0ZW0KKyAgICAgMTMuNCBUaGUgY29tcGlsZSBmYWlscyB3aXRoIGVycm9ycyBhYm91dCBjb25mbGljdGluZyB0eXBlcyBmb3IgJ29wZW4nLCAnZHVwJywgYW5kICd3YWl0cGlkJworICAgICAxMy41IFVNTCBkb2Vzbid0IHdvcmsgd2hlbiAvdG1wIGlzIGFuIE5GUyBmaWxlc3lzdGVtCisgICAgIDEzLjYgVU1MIGhhbmdzIG9uIGJvb3Qgd2hlbiBjb21waWxlZCB3aXRoIGdwcm9mIHN1cHBvcnQKKyAgICAgMTMuNyBzeXNsb2dkIGRpZXMgd2l0aCBhIFNJR1RFUk0gb24gc3RhcnR1cAorICAgICAxMy44IFRVTi9UQVAgbmV0d29ya2luZyBkb2Vzbid0IHdvcmsgb24gYSAyLjQgaG9zdAorICAgICAxMy45IFlvdSBjYW4gbmV0d29yayB0byB0aGUgaG9zdCBidXQgbm90IHRvIG90aGVyIG1hY2hpbmVzIG9uIHRoZSBuZXQKKyAgICAgMTMuMTAgSSBoYXZlIG5vIHJvb3QgYW5kIEkgd2FudCB0byBzY3JlYW0KKyAgICAgMTMuMTEgVU1MIGJ1aWxkIGNvbmZsaWN0IGJldHdlZW4gcHRyYWNlLmggYW5kIHVjb250ZXh0LmgKKyAgICAgMTMuMTIgVGhlIFVNTCBCb2dvTWlwcyBpcyBleGFjdGx5IGhhbGYgdGhlIGhvc3QncyBCb2dvTWlwcworICAgICAxMy4xMyBXaGVuIHlvdSBydW4gVU1MLCBpdCBpbW1lZGlhdGVseSBzZWdmYXVsdHMKKyAgICAgMTMuMTQgeHRlcm1zIGFwcGVhciwgdGhlbiBpbW1lZGlhdGVseSBkaXNhcHBlYXIKKyAgICAgMTMuMTUgQW55IG90aGVyIHBhbmljLCBoYW5nLCBvciBzdHJhbmdlIGJlaGF2aW9yCisKKyAgMTQuIERpYWdub3NpbmcgUHJvYmxlbXMKKworICAgICAxNC4xIENhc2UgMSA6IE5vcm1hbCBrZXJuZWwgcGFuaWNzCisgICAgIDE0LjIgQ2FzZSAyIDogVHJhY2luZyB0aHJlYWQgcGFuaWNzCisgICAgIDE0LjMgQ2FzZSAzIDogVHJhY2luZyB0aHJlYWQgcGFuaWNzIGNhdXNlZCBieSBvdGhlciB0aHJlYWRzCisgICAgIDE0LjQgQ2FzZSA0IDogSGFuZ3MKKworICAxNS4gVGhhbmtzCisKKyAgICAgMTUuMSBDb2RlIGFuZCBEb2N1bWVudGF0aW9uCisgICAgIDE1LjIgRmx1c2hpbmcgb3V0IGJ1Z3MKKyAgICAgMTUuMyBCdWdsZXRzIGFuZCBjbGVhbi11cHMKKyAgICAgMTUuNCBDYXNlIFN0dWRpZXMKKyAgICAgMTUuNSBPdGhlciBjb250cmlidXRpb25zCisKKworICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgMQgxLgguICBJCEluCG50CHRyCHJvCG9kCGR1CHVjCGN0CHRpCGlvCG9uCG4KKworICBXZWxjb21lIHRvIFVzZXIgTW9kZSBMaW51eC4gIEl0J3MgZ29pbmcgdG8gYmUgZnVuLgorCisKKworICAxCDEuCC4xCDEuCC4gIEgISG8Ib3cIdyBpCGlzCHMgVQhVcwhzZQhlcghyIE0ITW8Ib2QIZGUIZSBMCExpCGluCG51CHV4CHggRAhEaQhpZghmZghmZQhlcghyZQhlbghudAh0Pwg/CisKKyAgTm9ybWFsbHksIHRoZSBMaW51eCBLZXJuZWwgdGFsa3Mgc3RyYWlnaHQgdG8geW91ciBoYXJkd2FyZSAodmlkZW8KKyAgY2FyZCwga2V5Ym9hcmQsIGhhcmQgZHJpdmVzLCBldGMpLCBhbmQgYW55IHByb2dyYW1zIHdoaWNoIHJ1biBhc2sgdGhlCisgIGtlcm5lbCB0byBvcGVyYXRlIHRoZSBoYXJkd2FyZSwgbGlrZSBzbzoKKworCisKKyAgICAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tKworICAgICAgICAgfCBQcm9jZXNzIDEgfCBQcm9jZXNzIDIgfCAuLi58CisgICAgICAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLSsKKyAgICAgICAgIHwgICAgICAgTGludXggS2VybmVsICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgICAgICAgSGFyZHdhcmUgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKKworCisgIFRoZSBVc2VyIE1vZGUgTGludXggS2VybmVsIGlzIGRpZmZlcmVudDsgaW5zdGVhZCBvZiB0YWxraW5nIHRvIHRoZQorICBoYXJkd2FyZSwgaXQgdGFsa3MgdG8gYSBgcmVhbCcgTGludXgga2VybmVsIChjYWxsZWQgdGhlIGBob3N0IGtlcm5lbCcKKyAgZnJvbSBub3cgb24pLCBsaWtlIGFueSBvdGhlciBwcm9ncmFtLiAgUHJvZ3JhbXMgY2FuIHRoZW4gcnVuIGluc2lkZQorICBVc2VyLU1vZGUgTGludXggYXMgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgdW5kZXIgYSBub3JtYWwga2VybmVsLCBsaWtlCisgIHNvOgorCisKKworICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICB8IFByb2Nlc3MgMiB8IC4uLnwKKyAgICAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCBQcm9jZXNzIDEgfCBVc2VyLU1vZGUgTGludXh8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgTGludXggS2VybmVsICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8ICAgICAgICAgSGFyZHdhcmUgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKKworCisKKyAgMQgxLgguMggyLgguICBXCFdoCGh5CHkgVwhXbwhvdQh1bAhsZAhkIEkISSBXCFdhCGFuCG50CHQgVQhVcwhzZQhlcghyIE0ITW8Ib2QIZGUIZSBMCExpCGluCG51CHV4CHg/CD8KKworCisgIDEuIElmIFVzZXIgTW9kZSBMaW51eCBjcmFzaGVzLCB5b3VyIGhvc3Qga2VybmVsIGlzIHN0aWxsIGZpbmUuCisKKyAgMi4gWW91IGNhbiBydW4gYSB1c2VybW9kZSBrZXJuZWwgYXMgYSBub24tcm9vdCB1c2VyLgorCisgIDMuIFlvdSBjYW4gZGVidWcgdGhlIFVzZXIgTW9kZSBMaW51eCBsaWtlIGFueSBub3JtYWwgcHJvY2Vzcy4KKworICA0LiBZb3UgY2FuIHJ1biBncHJvZiAocHJvZmlsaW5nKSBhbmQgZ2NvdiAoY292ZXJhZ2UgdGVzdGluZykuCisKKyAgNS4gWW91IGNhbiBwbGF5IHdpdGggeW91ciBrZXJuZWwgd2l0aG91dCBicmVha2luZyB0aGluZ3MuCisKKyAgNi4gWW91IGNhbiB1c2UgaXQgYXMgYSBzYW5kYm94IGZvciB0ZXN0aW5nIG5ldyBhcHBzLgorCisgIDcuIFlvdSBjYW4gdHJ5IG5ldyBkZXZlbG9wbWVudCBrZXJuZWxzIHNhZmVseS4KKworICA4LiBZb3UgY2FuIHJ1biBkaWZmZXJlbnQgZGlzdHJpYnV0aW9ucyBzaW11bHRhbmVvdXNseS4KKworICA5LiBJdCdzIGV4dHJlbWVseSBmdW4uCisKKworCisKKworICAyCDIuCC4gIEMIQ28Ib20IbXAIcGkIaWwIbGkIaW4IbmcIZyB0CHRoCGhlCGUgawhrZQhlcghybghuZQhlbAhsIGEIYW4IbmQIZCBtCG1vCG9kCGR1CHVsCGxlCGVzCHMKKworCisKKworICAyCDIuCC4xCDEuCC4gIEMIQ28Ib20IbXAIcGkIaWwIbGkIaW4IbmcIZyB0CHRoCGhlCGUgawhrZQhlcghybghuZQhlbAhsCisKKworICBDb21waWxpbmcgdGhlIHVzZXIgbW9kZSBrZXJuZWwgaXMganVzdCBsaWtlIGNvbXBpbGluZyBhbnkgb3RoZXIKKyAga2VybmVsLiAgTGV0J3MgZ28gdGhyb3VnaCB0aGUgc3RlcHMsIHVzaW5nIDIuNC4wLXByZXJlbGVhc2UgKGN1cnJlbnQKKyAgYXMgb2YgdGhpcyB3cml0aW5nKSBhcyBhbiBleGFtcGxlOgorCisKKyAgMS4gRG93bmxvYWQgdGhlIGxhdGVzdCBVTUwgcGF0Y2ggZnJvbQorCisgICAgIHRoZSBkb3dubG9hZCBwYWdlIDxodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC9kbC0KKyAgICAgc2YuaHRtbD4KKworICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBmaWxlIGlzIHVtbC1wYXRjaC0yLjQuMC1wcmVyZWxlYXNlLmJ6Mi4KKworCisgIDIuIERvd25sb2FkIHRoZSBtYXRjaGluZyBrZXJuZWwgZnJvbSB5b3VyIGZhdm91cml0ZSBrZXJuZWwgbWlycm9yLAorICAgICBzdWNoIGFzOgorCisgICAgIGZ0cDovL2Z0cC5jYS5rZXJuZWwub3JnL3B1Yi9rZXJuZWwvdjIuNC9saW51eC0yLjQuMC1wcmVyZWxlYXNlLnRhci5iejIKKyAgICAgPGZ0cDovL2Z0cC5jYS5rZXJuZWwub3JnL3B1Yi9rZXJuZWwvdjIuNC9saW51eC0yLjQuMC1wcmVyZWxlYXNlLnRhci5iejI+CisgICAgIC4KKworCisgIDMuIE1ha2UgYSBkaXJlY3RvcnkgYW5kIHVucGFjayB0aGUga2VybmVsIGludG8gaXQuCisKKworCisgICAgICAgaG9zdCUKKyAgICAgICBta2RpciB+L3VtbAorCisKKworCisKKworICAgICAgIGhvc3QlCisgICAgICAgY2Qgfi91bWwKKworCisKKworCisKKyAgICAgICBob3N0JQorICAgICAgIHRhciAteHp2ZiBsaW51eC0yLjQuMC1wcmVyZWxlYXNlLnRhci5iejIKKworCisKKworCisKKyAgNC4gQXBwbHkgdGhlIHBhdGNoIHVzaW5nCisKKworCisgICAgICAgaG9zdCUKKyAgICAgICBjZCB+L3VtbC9saW51eAorCisKKworICAgICAgIGhvc3QlCisgICAgICAgYnpjYXQgdW1sLXBhdGNoLTIuNC4wLXByZXJlbGVhc2UuYnoyIHwgcGF0Y2ggLXAxCisKKworCisKKworCisgIDUuIFJ1biB5b3VyIGZhdm9yaXRlIGNvbmZpZzsgYG1ha2UgeGNvbmZpZyBBUkNIPXVtJyBpcyB0aGUgbW9zdAorICAgICBjb252ZW5pZW50LiAgYG1ha2UgY29uZmlnIEFSQ0g9dW0nIGFuZCAnbWFrZSBtZW51Y29uZmlnIEFSQ0g9dW0nCisgICAgIHdpbGwgd29yayBhcyB3ZWxsLiAgVGhlIGRlZmF1bHRzIHdpbGwgZ2l2ZSB5b3UgYSB1c2VmdWwga2VybmVsLiAgSWYKKyAgICAgeW91IHdhbnQgdG8gY2hhbmdlIHNvbWV0aGluZywgZ28gYWhlYWQsIGl0IHByb2JhYmx5IHdvbid0IGh1cnQKKyAgICAgYW55dGhpbmcuCisKKworICAgICBOb3RlOiAgSWYgdGhlIGhvc3QgaXMgY29uZmlndXJlZCB3aXRoIGEgMkcvMkcgYWRkcmVzcyBzcGFjZSBzcGxpdAorICAgICByYXRoZXIgdGhhbiB0aGUgdXN1YWwgM0cvMUcgc3BsaXQsIHRoZW4gdGhlIHBhY2thZ2VkIFVNTCBiaW5hcmllcworICAgICB3aWxsIG5vdCBydW4uICBUaGV5IHdpbGwgaW1tZWRpYXRlbHkgc2VnZmF1bHQuICBTZWUgYGBVTUwgb24gMkcvMkcKKyAgICAgaG9zdHMnJyAgZm9yIHRoZSBzY29vcCBvbiBydW5uaW5nIFVNTCBvbiB5b3VyIHN5c3RlbS4KKworCisKKyAgNi4gRmluaXNoIHdpdGggYG1ha2UgbGludXggQVJDSD11bSc6IHRoZSByZXN1bHQgaXMgYSBmaWxlIGNhbGxlZAorICAgICBgbGludXgnIGluIHRoZSB0b3AgZGlyZWN0b3J5IG9mIHlvdXIgc291cmNlIHRyZWUuCisKKyAgTWFrZSBzdXJlIHRoYXQgeW91IGRvbid0IGJ1aWxkIHRoaXMga2VybmVsIGluIC91c3Ivc3JjL2xpbnV4LiAgT24gc29tZQorICBkaXN0cmlidXRpb25zLCAvdXNyL2luY2x1ZGUvYXNtIGlzIGEgbGluayBpbnRvIHRoaXMgcG9vbC4gIFRoZSB1c2VyLQorICBtb2RlIGJ1aWxkIGNoYW5nZXMgdGhlIG90aGVyIGVuZCBvZiB0aGF0IGxpbmssIGFuZCB0aGluZ3MgdGhhdCBpbmNsdWRlCisgIDxhc20vYW55dGhpbmcuaD4gc3RvcCBjb21waWxpbmcuCisKKyAgVGhlIHNvdXJjZXMgYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gY3ZzIGF0IHRoZSBwcm9qZWN0J3MgY3ZzIHBhZ2UsCisgIHdoaWNoIGhhcyBkaXJlY3Rpb25zIG9uIGdldHRpbmcgdGhlIHNvdXJjZXMuIFlvdSBjYW4gYWxzbyBicm93c2UgdGhlCisgIENWUyBwb29sIGZyb20gdGhlcmUuCisKKyAgSWYgeW91IGdldCB0aGUgQ1ZTIHNvdXJjZXMsIHlvdSB3aWxsIGhhdmUgdG8gY2hlY2sgdGhlbSBvdXQgaW50byBhbgorICBlbXB0eSBkaXJlY3RvcnkuIFlvdSB3aWxsIHRoZW4gaGF2ZSB0byBjb3B5IGVhY2ggZmlsZSBpbnRvIHRoZQorICBjb3JyZXNwb25kaW5nIGRpcmVjdG9yeSBpbiB0aGUgYXBwcm9wcmlhdGUga2VybmVsIHBvb2wuCisKKyAgSWYgeW91IGRvbid0IGhhdmUgdGhlIGxhdGVzdCBrZXJuZWwgcG9vbCwgeW91IGNhbiBnZXQgdGhlCisgIGNvcnJlc3BvbmRpbmcgdXNlci1tb2RlIHNvdXJjZXMgd2l0aAorCisKKyAgICAgICBob3N0JSBjdnMgY28gLXIgdl8yXzNfeCBsaW51eAorCisKKworCisgIHdoZXJlICd4JyBpcyB0aGUgdmVyc2lvbiBpbiB5b3VyIHBvb2wuIE5vdGUgdGhhdCB5b3Ugd2lsbCBub3QgZ2V0IHRoZQorICBidWcgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyB0aGF0IGhhdmUgZ29uZSBpbnRvIHN1YnNlcXVlbnQgcmVsZWFzZXMuCisKKworICBJZiB5b3UgYnVpbGQgeW91ciBvd24ga2VybmVsLCBhbmQgd2FudCB0byBib290IGl0IGZyb20gb25lIG9mIHRoZQorICBmaWxlc3lzdGVtcyBkaXN0cmlidXRlZCBmcm9tIHRoaXMgc2l0ZSwgdGhlbiwgaW4gbmVhcmx5IGFsbCBjYXNlcywKKyAgZGV2ZnMgbXVzdCBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYW5kIG1vdW50ZWQgYXQgYm9vdCB0aW1lLiAgVGhlCisgIGV4Y2VwdGlvbiBpcyB0aGUgU3VTRSBmaWxlc3lzdGVtLiAgRm9yIHRoaXMsIGRldmZzIG11c3QgZWl0aGVyIG5vdCBiZQorICBpbiB0aGUga2VybmVsIGF0IGFsbCwgb3IgImRldmZzPW5vbW91bnQiIG11c3QgYmUgb24gdGhlIGtlcm5lbCBjb21tYW5kCisgIGxpbmUuICBBbnkgZGlzYWdyZWVtZW50IGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdGhlIGZpbGVzeXN0ZW0gYmVpbmcKKyAgYm9vdGVkIGFib3V0IHdoZXRoZXIgZGV2ZnMgaXMgYmVpbmcgdXNlZCB3aWxsIHJlc3VsdCBpbiB0aGUgYm9vdAorICBnZXR0aW5nIG5vIGZ1cnRoZXIgdGhhbiBzaW5nbGUtdXNlciBtb2RlLgorCisKKyAgSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIGRldmZzLCB5b3UgY2FuIHJlbW92ZSB0aGUgbmVlZCBmb3IgaXQgZnJvbSBhCisgIGZpbGVzeXN0ZW0gYnkgY29weWluZyAvZGV2IGZyb20gc29tZXBsYWNlLCBtYWtpbmcgYSBidW5jaCBvZiAvZGV2L3ViZAorICBkZXZpY2VzOgorCisKKyAgVU1MIyBmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDc7IGRvIG1rbm9kIHViZCRpIGIgOTggJGk7IGRvbmUKKworCisKKworICBhbmQgY2hhbmdpbmcgL2V0Yy9mc3RhYiBhbmQgL2V0Yy9pbml0dGFiIHRvIHJlZmVyIHRvIHRoZSBub24tZGV2ZnMKKyAgZGV2aWNlcy4KKworCisKKyAgMggyLgguMggyLgguICBDCENvCG9tCG1wCHBpCGlsCGxpCGluCG5nCGcgYQhhbghuZAhkIGkIaW4IbnMIc3QIdGEIYWwIbGwIbGkIaW4IbmcIZyBrCGtlCGVyCHJuCG5lCGVsCGwgbQhtbwhvZAhkdQh1bAhsZQhlcwhzCisKKyAgVU1MIG1vZHVsZXMgYXJlIGJ1aWx0IGluIHRoZSBzYW1lIHdheSBhcyB0aGUgbmF0aXZlIGtlcm5lbCAod2l0aCB0aGUKKyAgZXhjZXB0aW9uIG9mIHRoZSAnQVJDSD11bScgdGhhdCB5b3UgYWx3YXlzIG5lZWQgZm9yIFVNTCk6CisKKworICAgICAgIGhvc3QlIG1ha2UgbW9kdWxlcyBBUkNIPXVtCisKKworCisKKyAgQW55IG1vZHVsZXMgdGhhdCB5b3Ugd2FudCB0byBsb2FkIGludG8gdGhpcyBrZXJuZWwgbmVlZCB0byBiZSBidWlsdCBpbgorICB0aGUgdXNlci1tb2RlIHBvb2wuICBNb2R1bGVzIGZyb20gdGhlIG5hdGl2ZSBrZXJuZWwgd29uJ3Qgd29yay4KKworICBZb3UgY2FuIGluc3RhbGwgdGhlbSBieSB1c2luZyBmdHAgb3Igc29tZXRoaW5nIHRvIGNvcHkgdGhlbSBpbnRvIHRoZQorICB2aXJ0dWFsIG1hY2hpbmUgYW5kIGRyb3BwaW5nIHRoZW0gaW50byAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC4KKworICBZb3UgY2FuIGFsc28gZ2V0IHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyB0byBpbnN0YWxsIHRoZW0gYXMgZm9sbG93czoKKworICAxLiB3aXRoIHRoZSBrZXJuZWwgbm90IGJvb3RlZCwgbW91bnQgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiB0aGUgdG9wCisgICAgIGxldmVsIG9mIHRoZSBrZXJuZWwgcG9vbDoKKworCisgICAgICAgaG9zdCUgbW91bnQgcm9vdF9mcyBtbnQgLW8gbG9vcAorCisKKworCisKKworICAyLiBydW4KKworCisgICAgICAgaG9zdCUKKyAgICAgICBtYWtlIG1vZHVsZXNfaW5zdGFsbCBJTlNUQUxMX01PRF9QQVRIPWBwd2RgL21udCBBUkNIPXVtCisKKworCisKKworCisgIDMuIHVubW91bnQgdGhlIGZpbGVzeXN0ZW0KKworCisgICAgICAgaG9zdCUgdW1vdW50IG1udAorCisKKworCisKKworICA0LiBib290IHRoZSBrZXJuZWwgb24gaXQKKworCisgIFdoZW4gdGhlIHN5c3RlbSBpcyBib290ZWQsIHlvdSBjYW4gdXNlIGluc21vZCBhcyB1c3VhbCB0byBnZXQgdGhlCisgIG1vZHVsZXMgaW50byB0aGUga2VybmVsLiAgQSBudW1iZXIgb2YgdGhpbmdzIGhhdmUgYmVlbiBsb2FkZWQgaW50byBVTUwKKyAgYXMgbW9kdWxlcywgZXNwZWNpYWxseSBmaWxlc3lzdGVtcyBhbmQgbmV0d29yayBwcm90b2NvbHMgYW5kIGZpbHRlcnMsCisgIHNvIG1vc3Qgc3ltYm9scyB3aGljaCBuZWVkIHRvIGJlIGV4cG9ydGVkIHByb2JhYmx5IGFscmVhZHkgYXJlLgorICBIb3dldmVyLCBpZiB5b3UgZG8gZmluZCBzeW1ib2xzIHRoYXQgbmVlZCBleHBvcnRpbmcsIGxldCAgdXMKKyAgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0L2NvbnRhY3RzLmh0bWw+ICBrbm93LCBhbmQKKyAgdGhleSdsbCBiZSAidGFrZW4gY2FyZSBvZiIuCisKKworCisgIDIIMi4ILjMIMy4ILiAgQwhDbwhvbQhtcAhwaQhpbAhsaQhpbghuZwhnIGEIYW4IbmQIZCBpCGluCG5zCHN0CHRhCGFsCGxsCGxpCGluCG5nCGcgdQh1bQhtbAhsXwhfdQh1dAh0aQhpbAhsaQhpdAh0aQhpZQhlcwhzCisKKyAgTWFueSBmZWF0dXJlcyBvZiB0aGUgVU1MIGtlcm5lbCByZXF1aXJlIGEgdXNlci1zcGFjZSBoZWxwZXIgcHJvZ3JhbSwKKyAgc28gYSB1bWxfdXRpbGl0aWVzIHBhY2thZ2UgaXMgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBrZXJuZWwKKyAgcGF0Y2ggd2hpY2ggcHJvdmlkZXMgdGhlc2UgaGVscGVycy4gSW5jbHVkZWQgd2l0aGluIHRoaXMgaXM6CisKKyAgKwhvICBwb3J0LWhlbHBlciAtIFVzZWQgYnkgY29uc29sZXMgd2hpY2ggY29ubmVjdCB0byB4dGVybXMgb3IgcG9ydHMKKworICArCG8gIHR1bmN0bCAtIENvbmZpZ3VyYXRpb24gdG9vbCB0byBjcmVhdGUgYW5kIGRlbGV0ZSB0YXAgZGV2aWNlcworCisgICsIbyAgdW1sX25ldCAtIFNldHVpZCBiaW5hcnkgZm9yIGF1dG9tYXRpYyB0YXAgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKworICArCG8gIHVtbF9zd2l0Y2ggLSBVc2VyLXNwYWNlIHZpcnR1YWwgc3dpdGNoIHJlcXVpcmVkIGZvciBkYWVtb24KKyAgICAgdHJhbnNwb3J0CisKKyAgICAgVGhlIHVtbF91dGlsaXRpZXMgdHJlZSBpcyBjb21waWxlZCB3aXRoOgorCisKKyAgICAgICBob3N0IworICAgICAgIG1ha2UgJiYgbWFrZSBpbnN0YWxsCisKKworCisKKyAgTm90ZSB0aGF0IFVNTCBrZXJuZWwgcGF0Y2hlcyBtYXkgcmVxdWlyZSBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlCisgIHVtbF91dGlsaXRpZXMgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZG9uJ3Qga2VlcCB1cCB3aXRoIHRoZSBtYWlsaW5nCisgIGxpc3RzLCBlbnN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgbGF0ZXN0IHJlbGVhc2Ugb2YgdW1sX3V0aWxpdGllcyBpZiB5b3UKKyAgYXJlIGV4cGVyaWVuY2luZyBwcm9ibGVtcyB3aXRoIHlvdXIgVU1MIGtlcm5lbCwgcGFydGljdWxhcmx5IHdoZW4KKyAgZGVhbGluZyB3aXRoIGNvbnNvbGVzIG9yIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyB0byB0aGUgaGVscGVyIHByb2dyYW1zCisKKworCisKKworCisKKworICAzCDMuCC4gIFIIUnUIdW4Ibm4IbmkIaW4IbmcIZyBVCFVNCE1MCEwgYQhhbghuZAhkIGwIbG8Ib2cIZ2cIZ2kIaW4IbmcIZyBpCGluCG4KKworCisKKyAgMwgzLgguMQgxLgguICBSCFJ1CHVuCG5uCG5pCGluCG5nCGcgVQhVTQhNTAhMCisKKyAgSXQgcnVucyBvbiAyLjIuMTUgb3IgbGF0ZXIsIGFuZCBhbGwgMi40IGtlcm5lbHMuCisKKworICBCb290aW5nIFVNTCBpcyBzdHJhaWdodGZvcndhcmQuICBTaW1wbHkgcnVuICdsaW51eCc6IGl0IHdpbGwgdHJ5IHRvCisgIG1vdW50IHRoZSBmaWxlIGByb290X2ZzJyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBZb3UgZG8gbm90IG5lZWQgdG8KKyAgcnVuIGl0IGFzIHJvb3QuICBJZiB5b3VyIHJvb3QgZmlsZXN5c3RlbSBpcyBub3QgbmFtZWQgYHJvb3RfZnMnLCB0aGVuCisgIHlvdSBuZWVkIHRvIHB1dCBhIGB1YmQwPXJvb3RfZnNfd2hhdGV2ZXInIHN3aXRjaCBvbiB0aGUgbGludXggY29tbWFuZAorICBsaW5lLgorCisKKyAgWW91IHdpbGwgbmVlZCBhIGZpbGVzeXN0ZW0gdG8gYm9vdCBVTUwgZnJvbS4gIFRoZXJlIGFyZSBhIG51bWJlcgorICBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGZyb20gIGhlcmUgIDxodHRwOi8vdXNlci1tb2RlLQorICBsaW51eC5zb3VyY2Vmb3JnZS5uZXQvZGwtc2YuaHRtbD4gLiAgVGhlcmUgYXJlIGFsc28gIHNldmVyYWwgdG9vbHMKKyAgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0L2ZzX21ha2luZy5odG1sPiAgd2hpY2ggY2FuIGJlCisgIHVzZWQgdG8gZ2VuZXJhdGUgVU1MLWNvbXBhdGlibGUgZmlsZXN5c3RlbSBpbWFnZXMgZnJvbSBtZWRpYS4KKyAgVGhlIGtlcm5lbCB3aWxsIGJvb3QgdXAgYW5kIHByZXNlbnQgeW91IHdpdGggYSBsb2dpbiBwcm9tcHQuCisKKworICBOb3RlOiAgSWYgdGhlIGhvc3QgaXMgY29uZmlndXJlZCB3aXRoIGEgMkcvMkcgYWRkcmVzcyBzcGFjZSBzcGxpdAorICByYXRoZXIgdGhhbiB0aGUgdXN1YWwgM0cvMUcgc3BsaXQsIHRoZW4gdGhlIHBhY2thZ2VkIFVNTCBiaW5hcmllcyB3aWxsCisgIG5vdCBydW4uICBUaGV5IHdpbGwgaW1tZWRpYXRlbHkgc2VnZmF1bHQuICBTZWUgYGBVTUwgb24gMkcvMkcgaG9zdHMnJworICBmb3IgdGhlIHNjb29wIG9uIHJ1bm5pbmcgVU1MIG9uIHlvdXIgc3lzdGVtLgorCisKKworICAzCDMuCC4yCDIuCC4gIEwITG8Ib2cIZ2cIZ2kIaW4IbmcIZyBpCGluCG4KKworCisKKyAgVGhlIHByZXBhY2thZ2VkIGZpbGVzeXN0ZW1zIGhhdmUgYSByb290IGFjY291bnQgd2l0aCBwYXNzd29yZCAncm9vdCcKKyAgYW5kIGEgdXNlciBhY2NvdW50IHdpdGggcGFzc3dvcmQgJ3VzZXInLiAgVGhlIGxvZ2luIGJhbm5lciB3aWxsCisgIGdlbmVyYWxseSB0ZWxsIHlvdSBob3cgdG8gbG9nIGluLiAgU28sIHlvdSBsb2cgaW4gYW5kIHlvdSB3aWxsIGZpbmQKKyAgeW91cnNlbGYgaW5zaWRlIGEgbGl0dGxlIHZpcnR1YWwgbWFjaGluZS4gT3VyIGZpbGVzeXN0ZW1zIGhhdmUgYQorICB2YXJpZXR5IG9mIGNvbW1hbmRzIGFuZCB1dGlsaXRpZXMgaW5zdGFsbGVkIChhbmQgaXQgaXMgZmFpcmx5IGVhc3kgdG8KKyAgYWRkIG1vcmUpLCBzbyB5b3Ugd2lsbCBoYXZlIGEgbG90IG9mIHRvb2xzIHdpdGggd2hpY2ggdG8gcG9rZSBhcm91bmQKKyAgdGhlIHN5c3RlbS4KKworICBUaGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3RoZXIgd2F5cyB0byBsb2cgaW46CisKKyAgKwhvICBPbiBhIHZpcnR1YWwgY29uc29sZQorCisKKworICAgICBFYWNoIHZpcnR1YWwgY29uc29sZSB0aGF0IGlzIGNvbmZpZ3VyZWQgKGkuZS4gdGhlIGRldmljZSBleGlzdHMgaW4KKyAgICAgL2RldiBhbmQgL2V0Yy9pbml0dGFiIHJ1bnMgYSBnZXR0eSBvbiBpdCkgd2lsbCBjb21lIHVwIGluIGl0cyBvd24KKyAgICAgeHRlcm0uICBJZiB5b3UgZ2V0IHRpcmVkIG9mIHRoZSB4dGVybXMsIHJlYWQgYGBTZXR0aW5nIHVwIHNlcmlhbAorICAgICBsaW5lcyBhbmQgY29uc29sZXMnJyAgdG8gc2VlIGhvdyB0byBhdHRhY2ggdGhlIGNvbnNvbGVzIHRvCisgICAgIHNvbWV0aGluZyBlbHNlLCBsaWtlIGhvc3QgcHR5cy4KKworCisKKyAgKwhvICBPdmVyIHRoZSBzZXJpYWwgbGluZQorCisKKyAgICAgSW4gdGhlIGJvb3Qgb3V0cHV0LCBmaW5kIGEgbGluZSB0aGF0IGxvb2tzIGxpa2U6CisKKworCisgICAgICAgc2VyaWFsIGxpbmUgMCBhc3NpZ25lZCBwdHkgL2Rldi9wdHlwMQorCisKKworCisgIEF0dGFjaCB5b3VyIGZhdm9yaXRlIHRlcm1pbmFsIHByb2dyYW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgdHR5LiAgSS5lLgorICBmb3IgbWluaWNvbSwgdGhlIGNvbW1hbmQgd291bGQgYmUKKworCisgICAgICAgaG9zdCUgbWluaWNvbSAtbyAtcCAvZGV2L3R0eXAxCisKKworCisKKworCisgICsIbyAgT3ZlciB0aGUgbmV0CisKKworICAgICBJZiB0aGUgbmV0d29yayBpcyBydW5uaW5nLCB0aGVuIHlvdSBjYW4gdGVsbmV0IHRvIHRoZSB2aXJ0dWFsCisgICAgIG1hY2hpbmUgYW5kIGxvZyBpbiB0byBpdC4gIFNlZSBgYFNldHRpbmcgdXAgdGhlIG5ldHdvcmsnJyAgdG8gbGVhcm4KKyAgICAgYWJvdXQgc2V0dGluZyB1cCBhIHZpcnR1YWwgbmV0d29yay4KKworICBXaGVuIHlvdSdyZSBkb25lIHVzaW5nIGl0LCBydW4gaGFsdCwgYW5kIHRoZSBrZXJuZWwgd2lsbCBicmluZyBpdHNlbGYKKyAgZG93biBhbmQgdGhlIHByb2Nlc3Mgd2lsbCBleGl0LgorCisKKyAgMwgzLgguMwgzLgguICBFCEV4CHhhCGFtCG1wCHBsCGxlCGVzCHMKKworICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIFVNTCBpbiBhY3Rpb246CisKKyAgKwhvICBBIGxvZ2luIHNlc3Npb24gPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0L2xvZ2luLmh0bWw+CisKKyAgKwhvICBBIHZpcnR1YWwgbmV0d29yayA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvbmV0Lmh0bWw+CisKKworCisKKworCisKKyAgNAg0LgguICBVCFVNCE1MCEwgbwhvbghuIDIIMkcIRy8ILzIIMkcIRyBoCGhvCG9zCHN0CHRzCHMKKworCisKKworICA0CDQuCC4xCDEuCC4gIEkISW4IbnQIdHIIcm8Ib2QIZHUIdWMIY3QIdGkIaW8Ib24IbgorCisKKyAgTW9zdCBMaW51eCBtYWNoaW5lcyBhcmUgY29uZmlndXJlZCBzbyB0aGF0IHRoZSBrZXJuZWwgb2NjdXBpZXMgdGhlCisgIHVwcGVyIDFHICgweGMwMDAwMDAwIC0gMHhmZmZmZmZmZikgb2YgdGhlIDRHIGFkZHJlc3Mgc3BhY2UgYW5kCisgIHByb2Nlc3NlcyB1c2UgdGhlIGxvd2VyIDNHICgweDAwMDAwMDAwIC0gMHhiZmZmZmZmZikuICBIb3dldmVyLCBzb21lCisgIG1hY2hpbmUgYXJlIGNvbmZpZ3VyZWQgd2l0aCBhIDJHLzJHIHNwbGl0LCB3aXRoIHRoZSBrZXJuZWwgb2NjdXB5aW5nCisgIHRoZSB1cHBlciAyRyAoMHg4MDAwMDAwMCAtIDB4ZmZmZmZmZmYpIGFuZCBwcm9jZXNzZXMgdXNpbmcgdGhlIGxvd2VyCisgIDJHICgweDAwMDAwMDAwIC0gMHg3ZmZmZmZmZikuCisKKworCisKKyAgNAg0LgguMggyLgguICBUCFRoCGhlCGUgcAhwcghybwhvYghibAhsZQhlbQhtCisKKworICBUaGUgcHJlYnVpbHQgVU1MIGJpbmFyaWVzIG9uIHRoaXMgc2l0ZSB3aWxsIG5vdCBydW4gb24gMkcvMkcgaG9zdHMKKyAgYmVjYXVzZSBVTUwgb2NjdXBpZXMgdGhlIHVwcGVyIC41RyBvZiB0aGUgM0cgcHJvY2VzcyBhZGRyZXNzIHNwYWNlCisgICgweGEwMDAwMDAwIC0gMHhiZmZmZmZmZikuICBPYnZpb3VzbHksIG9uIDJHLzJHIGhvc3RzLCB0aGlzIGlzIHJpZ2h0CisgIGluIHRoZSBtaWRkbGUgb2YgdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLCBzbyBVTUwgd29uJ3QgZXZlbiBsb2FkIC0gaXQKKyAgd2lsbCBpbW1lZGlhdGVseSBzZWdmYXVsdC4KKworCisKKworICA0CDQuCC4zCDMuCC4gIFQIVGgIaGUIZSBzCHNvCG9sCGx1CHV0CHRpCGlvCG9uCG4KKworCisgIFRoZSBmaXggZm9yIHRoaXMgaXMgdG8gcmVidWlsZCBVTUwgZnJvbSBzb3VyY2UgYWZ0ZXIgZW5hYmxpbmcKKyAgQ09ORklHX0hPU1RfMkdfMkcgKHVuZGVyICdHZW5lcmFsIFNldHVwJykuICBUaGlzIHdpbGwgY2F1c2UgVU1MIHRvCisgIGxvYWQgaXRzZWxmIGluIHRoZSB0b3AgLjVHIG9mIHRoYXQgc21hbGxlciBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UsCisgIHdoZXJlIGl0IHdpbGwgcnVuIGZpbmUuICBTZWUgYGBDb21waWxpbmcgdGhlIGtlcm5lbCBhbmQgbW9kdWxlcycnICBpZgorICB5b3UgbmVlZCBoZWxwIGJ1aWxkaW5nIFVNTCBmcm9tIHNvdXJjZS4KKworCisKKworCisKKworCisKKworICA1CDUuCC4gIFMIU2UIZXQIdHQIdGkIaW4IbmcIZyB1CHVwCHAgcwhzZQhlcghyaQhpYQhhbAhsIGwIbGkIaW4IbmUIZXMIcyBhCGFuCG5kCGQgYwhjbwhvbghucwhzbwhvbAhsZQhlcwhzCisKKworICBJdCBpcyBwb3NzaWJsZSB0byBhdHRhY2ggVU1MIHNlcmlhbCBsaW5lcyBhbmQgY29uc29sZXMgdG8gbWFueSB0eXBlcworICBvZiBob3N0IEkvTyBjaGFubmVscyBieSBzcGVjaWZ5aW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZS4KKworCisgIFlvdSBjYW4gYXR0YWNoIHRoZW0gdG8gaG9zdCBwdHlzLCB0dHlzLCBmaWxlIGRlc2NyaXB0b3JzLCBhbmQgcG9ydHMuCisgIFRoaXMgYWxsb3dzIHlvdSB0byBkbyB0aGluZ3MgbGlrZQorCisgICsIbyAgaGF2ZSBhIFVNTCBjb25zb2xlIGFwcGVhciBvbiBhbiB1bnVzZWQgaG9zdCBjb25zb2xlLAorCisgICsIbyAgaG9vayB0d28gdmlydHVhbCBtYWNoaW5lcyB0b2dldGhlciBieSBoYXZpbmcgb25lIGF0dGFjaCB0byBhIHB0eQorICAgICBhbmQgaGF2aW5nIHRoZSBvdGhlciBhdHRhY2ggdG8gdGhlIGNvcnJlc3BvbmRpbmcgdHR5CisKKyAgKwhvICBtYWtlIGEgdmlydHVhbCBtYWNoaW5lIGFjY2Vzc2libGUgZnJvbSB0aGUgbmV0IGJ5IGF0dGFjaGluZyBhCisgICAgIGNvbnNvbGUgdG8gYSBwb3J0IG9uIHRoZSBob3N0LgorCisKKyAgVGhlIGdlbmVyYWwgZm9ybWF0IG9mIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIGRldmljZT1jaGFubmVsLgorCisKKworICA1CDUuCC4xCDEuCC4gIFMIU3AIcGUIZWMIY2kIaWYIZnkIeWkIaW4IbmcIZyB0CHRoCGhlCGUgZAhkZQhldgh2aQhpYwhjZQhlCisKKyAgRGV2aWNlcyBhcmUgc3BlY2lmaWVkIHdpdGggImNvbiIgb3IgInNzbCIgKGNvbnNvbGUgb3Igc2VyaWFsIGxpbmUsCisgIHJlc3BlY3RpdmVseSksIG9wdGlvbmFsbHkgd2l0aCBhIGRldmljZSBudW1iZXIgaWYgeW91IGFyZSB0YWxraW5nCisgIGFib3V0IGEgc3BlY2lmaWMgZGV2aWNlLgorCisKKyAgVXNpbmcganVzdCAiY29uIiBvciAic3NsIiBkZXNjcmliZXMgYWxsIG9mIHRoZSBjb25zb2xlcyBvciBzZXJpYWwKKyAgbGluZXMuICBJZiB5b3Ugd2FudCB0byB0YWxrIGFib3V0IGNvbnNvbGUgIzMgb3Igc2VyaWFsIGxpbmUgIzEwLCB0aGV5CisgIHdvdWxkIGJlICJjb24zIiBhbmQgInNzbDEwIiwgcmVzcGVjdGl2ZWx5LgorCisKKyAgQSBzcGVjaWZpYyBkZXZpY2UgbmFtZSB3aWxsIG92ZXJyaWRlIGEgbGVzcyBnZW5lcmFsICJjb249IiBvciAic3NsPSIuCisgIFNvLCBmb3IgZXhhbXBsZSwgeW91IGNhbiBhc3NpZ24gYSBwdHkgdG8gZWFjaCBvZiB0aGUgc2VyaWFsIGxpbmVzCisgIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IHR3byBsaWtlIHRoaXM6CisKKworICAgICAgICBzc2w9cHR5IHNzbDA9dHR5Oi9kZXYvdHR5MCBzc2wxPXR0eTovZGV2L3R0eTEKKworCisKKworICBUaGUgc3BlY2lmaWNpdHkgb2YgdGhlIGRldmljZSBuYW1lIGlzIGFsbCB0aGF0IG1hdHRlcnM7IG9yZGVyIG9uIHRoZQorICBjb21tYW5kIGxpbmUgaXMgaXJyZWxldmFudC4KKworCisKKyAgNQg1LgguMggyLgguICBTCFNwCHBlCGVjCGNpCGlmCGZ5CHlpCGluCG5nCGcgdAh0aAhoZQhlIGMIY2gIaGEIYW4Ibm4IbmUIZWwIbAorCisgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgdHlwZXMgb2YgY2hhbm5lbHMgdG8gYXR0YWNoIGEgVU1MCisgIGRldmljZSB0bywgZWFjaCB3aXRoIGEgZGlmZmVyZW50IHdheSBvZiBzcGVjaWZ5aW5nIGV4YWN0bHkgd2hhdCB0bworICBhdHRhY2ggdG8uCisKKyAgKwhvICBwc2V1ZG8tdGVybWluYWxzIC0gZGV2aWNlPXB0eSBwdHMgdGVybWluYWxzIC0gZGV2aWNlPXB0cworCisKKyAgICAgVGhpcyB3aWxsIGNhdXNlIFVNTCB0byBhbGxvY2F0ZSBhIGZyZWUgaG9zdCBwc2V1ZG8tdGVybWluYWwgZm9yIHRoZQorICAgICBkZXZpY2UuICBUaGUgdGVybWluYWwgdGhhdCBpdCBnb3Qgd2lsbCBiZSBhbm5vdW5jZWQgaW4gdGhlIGJvb3QKKyAgICAgbG9nLiAgWW91IGFjY2VzcyBpdCBieSBhdHRhY2hpbmcgYSB0ZXJtaW5hbCBwcm9ncmFtIHRvIHRoZQorICAgICBjb3JyZXNwb25kaW5nIHR0eToKKworICArCG8gIHNjcmVlbiAvZGV2L3B0cy9uCisKKyAgKwhvICBzY3JlZW4gL2Rldi90dHl4eAorCisgICsIbyAgbWluaWNvbSAtbyAtcCAvZGV2L3R0eXh4IC0gbWluaWNvbSBzZWVtcyBub3QgYWJsZSB0byBoYW5kbGUgcHRzCisgICAgIGRldmljZXMKKworICArCG8gIGtlcm1pdCAtIHN0YXJ0IGl0IHVwLCAnb3BlbicgdGhlIGRldmljZSwgdGhlbiAnY29ubmVjdCcKKworCisKKworCisgICsIbyAgdGVybWluYWxzIC0gZGV2aWNlPXR0eTp0dHkgZGV2aWNlIGZpbGUKKworCisgICAgIFRoaXMgd2lsbCBtYWtlIFVNTCBhdHRhY2ggdGhlIGRldmljZSB0byB0aGUgc3BlY2lmaWVkIHR0eSAoaS5lCisKKworICAgICAgICBjb24xPXR0eTovZGV2L3R0eTMKKworCisKKworICB3aWxsIGF0dGFjaCBVTUwncyBjb25zb2xlIDEgdG8gdGhlIGhvc3QncyAvZGV2L3R0eTMpLiAgSWYgdGhlIHR0eSB0aGF0CisgIHlvdSBzcGVjaWZ5IGlzIHRoZSBzbGF2ZSBlbmQgb2YgYSB0dHkvcHR5IHBhaXIsIHNvbWV0aGluZyBlbHNlIG11c3QKKyAgaGF2ZSBhbHJlYWR5IG9wZW5lZCB0aGUgY29ycmVzcG9uZGluZyBwdHkgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yay4KKworCisKKworCisgICsIbyAgeHRlcm1zIC0gZGV2aWNlPXh0ZXJtCisKKworICAgICBVTUwgd2lsbCBydW4gYW4geHRlcm0gYW5kIHRoZSBkZXZpY2Ugd2lsbCBiZSBhdHRhY2hlZCB0byBpdC4KKworCisKKworCisgICsIbyAgUG9ydCAtIGRldmljZT1wb3J0OnBvcnQgbnVtYmVyCisKKworICAgICBUaGlzIHdpbGwgYXR0YWNoIHRoZSBVTUwgZGV2aWNlcyB0byB0aGUgc3BlY2lmaWVkIGhvc3QgcG9ydC4KKyAgICAgQXR0YWNoaW5nIGNvbnNvbGUgMSB0byB0aGUgaG9zdCdzIHBvcnQgOTAwMCB3b3VsZCBiZSBkb25lIGxpa2UKKyAgICAgdGhpczoKKworCisgICAgICAgIGNvbjE9cG9ydDo5MDAwCisKKworCisKKyAgQXR0YWNoaW5nIGFsbCB0aGUgc2VyaWFsIGxpbmVzIHRvIHRoYXQgcG9ydCB3b3VsZCBiZSBkb25lIHNpbWlsYXJseToKKworCisgICAgICAgIHNzbD1wb3J0OjkwMDAKKworCisKKworICBZb3UgYWNjZXNzIHRoZXNlIGRldmljZXMgYnkgdGVsbmV0dGluZyB0byB0aGF0IHBvcnQuICBFYWNoIGFjdGl2ZSB0ZWwtCisgIG5ldCBzZXNzaW9uIGdldHMgYSBkaWZmZXJlbnQgZGV2aWNlLiAgSWYgdGhlcmUgYXJlIG1vcmUgdGVsbmV0cyB0byBhCisgIHBvcnQgdGhhbiBVTUwgZGV2aWNlcyBhdHRhY2hlZCB0byBpdCwgdGhlbiB0aGUgZXh0cmEgdGVsbmV0IHNlc3Npb25zCisgIHdpbGwgYmxvY2sgdW50aWwgYW4gZXhpc3RpbmcgdGVsbmV0IGRldGFjaGVzLCBvciB1bnRpbCBhbm90aGVyIGRldmljZQorICBiZWNvbWVzIGFjdGl2ZSAoaS5lLiBieSBiZWluZyBhY3RpdmF0ZWQgaW4gL2V0Yy9pbml0dGFiKS4KKworICBUaGlzIGNoYW5uZWwgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCB5b3UgY2FuIGJvdGggYXR0YWNoIG11bHRpcGxlIFVNTAorICBkZXZpY2VzIHRvIGl0IGFuZCBrbm93IGhvdyB0byBhY2Nlc3MgdGhlbSB3aXRob3V0IHJlYWRpbmcgdGhlIFVNTCBib290CisgIGxvZy4gIEl0IGlzIGFsc28gdW5pcXVlIGluIGFsbG93aW5nIGFjY2VzcyB0byBhIFVNTCBmcm9tIHJlbW90ZQorICBtYWNoaW5lcyB3aXRob3V0IHJlcXVpcmluZyB0aGF0IHRoZSBVTUwgYmUgbmV0d29ya2VkLiAgVGhpcyBjb3VsZCBiZQorICB1c2VmdWwgaW4gYWxsb3dpbmcgcHVibGljIGFjY2VzcyB0byBVTUxzIGJlY2F1c2UgdGhleSB3b3VsZCBiZQorICBhY2Nlc3NpYmxlIGZyb20gdGhlIG5ldCwgYnV0IHdvdWxkbid0IG5lZWQgYW55IGtpbmQgb2YgbmV0d29yaworICBmaWx0ZXJpbmcgb3IgYWNjZXNzIGNvbnRyb2wgYmVjYXVzZSB0aGV5IHdvdWxkIGhhdmUgbm8gbmV0d29yayBhY2Nlc3MuCisKKworICBJZiB5b3UgYXR0YWNoIHRoZSBtYWluIGNvbnNvbGUgdG8gYSBwb3J0YWwsIHRoZW4gdGhlIFVNTCBib290IHdpbGwKKyAgYXBwZWFyIHRvIGhhbmcuICBJbiByZWFsaXR5LCBpdCdzIHdhaXRpbmcgZm9yIGEgdGVsbmV0IHRvIGNvbm5lY3QsIGF0CisgIHdoaWNoIHBvaW50IHRoZSBib290IHdpbGwgcHJvY2VlZC4KKworCisKKworCisgICsIbyAgYWxyZWFkeS1leGlzdGluZyBmaWxlIGRlc2NyaXB0b3JzIC0gZGV2aWNlPWZpbGUgZGVzY3JpcHRvcgorCisKKyAgICAgSWYgeW91IHNldCB1cCBhIGZpbGUgZGVzY3JpcHRvciBvbiB0aGUgVU1MIGNvbW1hbmQgbGluZSwgeW91IGNhbgorICAgICBhdHRhY2ggYSBVTUwgZGV2aWNlIHRvIGl0LiAgVGhpcyBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgdG8gcHV0IHRoZQorICAgICBtYWluIGNvbnNvbGUgYmFjayBvbiBzdGRpbiBhbmQgc3Rkb3V0IGFmdGVyIGFzc2lnbmluZyBhbGwgdGhlIG90aGVyCisgICAgIGNvbnNvbGVzIHRvIHNvbWV0aGluZyBlbHNlOgorCisKKyAgICAgICAgY29uMD1mZDowLGZkOjEgY29uPXB0cworCisKKworCisKKworCisKKyAgKwhvICBOb3RoaW5nIC0gZGV2aWNlPW51bGwKKworCisgICAgIFRoaXMgYWxsb3dzIHRoZSBkZXZpY2UgdG8gYmUgb3BlbmVkLCBpbiBjb250cmFzdCB0byAnbm9uZScsIGJ1dAorICAgICByZWFkcyB3aWxsIGJsb2NrLCBhbmQgd3JpdGVzIHdpbGwgc3VjY2VlZCBhbmQgdGhlIGRhdGEgd2lsbCBiZQorICAgICB0aHJvd24gb3V0LgorCisKKworCisKKyAgKwhvICBOb25lIC0gZGV2aWNlPW5vbmUKKworCisgICAgIFRoaXMgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZGlzYXBwZWFyLiAgSWYgeW91IGFyZSB1c2luZyBkZXZmcywgdGhlCisgICAgIGRldmljZSB3aWxsIG5vdCBhcHBlYXIgaW4gL2Rldi4gIElmIG5vdCwgdGhlbiBhdHRlbXB0cyB0byBvcGVuIGl0CisgICAgIHdpbGwgcmV0dXJuIC1FTk9ERVYuCisKKworCisgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGRpZmZlcmVudCBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWxzIGZvciBhIGRldmljZQorICBieSBwdXR0aW5nIGEgY29tbWEgYmV0d2VlbiB0aGVtOgorCisKKyAgICAgICAgc3NsMz10dHk6L2Rldi90dHkyLHh0ZXJtCisKKworCisKKyAgd2lsbCBjYXVzZSBzZXJpYWwgbGluZSAzIHRvIGFjY2VwdCBpbnB1dCBvbiB0aGUgaG9zdCdzIC9kZXYvdHR5MyBhbmQKKyAgZGlzcGxheSBvdXRwdXQgb24gYW4geHRlcm0uICBUaGF0J3MgYSBzaWxseSBleGFtcGxlIC0gdGhlIG1vc3QgY29tbW9uCisgIHVzZSBvZiB0aGlzIHN5bnRheCBpcyB0byByZWF0dGFjaCB0aGUgbWFpbiBjb25zb2xlIHRvIHN0ZGluIGFuZCBzdGRvdXQKKyAgYXMgc2hvd24gYWJvdmUuCisKKworICBJZiB5b3UgZGVjaWRlIHRvIG1vdmUgdGhlIG1haW4gY29uc29sZSBhd2F5IGZyb20gc3RkaW4vc3Rkb3V0LCB0aGUKKyAgaW5pdGlhbCBib290IG91dHB1dCB3aWxsIGFwcGVhciBpbiB0aGUgdGVybWluYWwgdGhhdCB5b3UncmUgcnVubmluZworICBVTUwgaW4uICBIb3dldmVyLCBvbmNlIHRoZSBjb25zb2xlIGRyaXZlciBoYXMgYmVlbiBvZmZpY2lhbGx5CisgIGluaXRpYWxpemVkLCB0aGVuIHRoZSBib290IG91dHB1dCB3aWxsIHN0YXJ0IGFwcGVhcmluZyB3aGVyZXZlciB5b3UKKyAgc3BlY2lmaWVkIHRoYXQgY29uc29sZSAwIHNob3VsZCBiZS4gIFRoYXQgZGV2aWNlIHdpbGwgcmVjZWl2ZSBhbGwKKyAgc3Vic2VxdWVudCBvdXRwdXQuCisKKworCisgIDUINS4ILjMIMy4ILiAgRQhFeAh4YQhhbQhtcAhwbAhsZQhlcwhzCisKKyAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGludGVyZXN0aW5nIHRoaW5ncyB5b3UgY2FuIGRvIHdpdGggdGhpcworICBjYXBhYmlsaXR5LgorCisKKyAgRmlyc3QsIHRoaXMgaXMgaG93IHlvdSBnZXQgcmlkIG9mIHRob3NlIGJsZWVkaW5nIGNvbnNvbGUgeHRlcm1zIGJ5CisgIGF0dGFjaGluZyB0aGVtIHRvIGhvc3QgcHR5czoKKworCisgICAgICAgIGNvbj1wdHkgY29uMD1mZDowLGZkOjEKKworCisKKworICBUaGlzIHdpbGwgbWFrZSBhIFVNTCBjb25zb2xlIHRha2Ugb3ZlciBhbiB1bnVzZWQgaG9zdCB2aXJ0dWFsIGNvbnNvbGUsCisgIHNvIHRoYXQgd2hlbiB5b3Ugc3dpdGNoIHRvIGl0LCB5b3Ugd2lsbCBzZWUgdGhlIFVNTCBsb2dpbiBwcm9tcHQKKyAgcmF0aGVyIHRoYW4gdGhlIGhvc3QgbG9naW4gcHJvbXB0OgorCisKKyAgICAgICAgY29uMT10dHk6L2Rldi90dHk2CisKKworCisKKyAgWW91IGNhbiBhdHRhY2ggdHdvIHZpcnR1YWwgbWFjaGluZXMgdG9nZXRoZXIgd2l0aCB3aGF0IGFtb3VudHMgdG8gYQorICBzZXJpYWwgbGluZSBhcyBmb2xsb3dzOgorCisgIFJ1biBvbmUgVU1MIHdpdGggYSBzZXJpYWwgbGluZSBhdHRhY2hlZCB0byBhIHB0eSAtCisKKworICAgICAgICBzc2wxPXB0eQorCisKKworCisgIExvb2sgYXQgdGhlIGJvb3QgbG9nIHRvIHNlZSB3aGF0IHB0eSBpdCBnb3QgKHRoaXMgZXhhbXBsZSB3aWxsIGFzc3VtZQorICB0aGF0IGl0IGdvdCAvZGV2L3B0eXAxKS4KKworICBCb290IHRoZSBvdGhlciBVTUwgd2l0aCBhIHNlcmlhbCBsaW5lIGF0dGFjaGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgIHR0eSAtCisKKworICAgICAgICBzc2wxPXR0eTovZGV2L3R0eXAxCisKKworCisKKyAgTG9nIGluLCBtYWtlIHN1cmUgdGhhdCBpdCBoYXMgbm8gZ2V0dHkgb24gdGhhdCBzZXJpYWwgbGluZSwgYXR0YWNoIGEKKyAgdGVybWluYWwgcHJvZ3JhbSBsaWtlIG1pbmljb20gdG8gaXQsIGFuZCB5b3Ugc2hvdWxkIHNlZSB0aGUgbG9naW4KKyAgcHJvbXB0IG9mIHRoZSBvdGhlciB2aXJ0dWFsIG1hY2hpbmUuCisKKworICA2CDYuCC4gIFMIU2UIZXQIdHQIdGkIaW4IbmcIZyB1CHVwCHAgdAh0aAhoZQhlIG4IbmUIZXQIdHcId28Ib3IIcmsIaworCisKKworICBUaGlzIHBhZ2UgZGVzY3JpYmVzIGhvdyB0byBzZXQgdXAgdGhlIHZhcmlvdXMgdHJhbnNwb3J0cyBhbmQgdG8KKyAgcHJvdmlkZSBhIFVNTCBpbnN0YW5jZSB3aXRoIG5ldHdvcmsgYWNjZXNzIHRvIHRoZSBob3N0LCBvdGhlciBtYWNoaW5lcworICBvbiB0aGUgbG9jYWwgbmV0LCBhbmQgdGhlIHJlc3Qgb2YgdGhlIG5ldC4KKworCisgIEFzIG9mIDIuNC41LCBVTUwgbmV0d29ya2luZyBoYXMgYmVlbiBjb21wbGV0ZWx5IHJlZG9uZSB0byBtYWtlIGl0IG11Y2gKKyAgZWFzaWVyIHRvIHNldCB1cCwgZml4IGJ1Z3MsIGFuZCBhZGQgbmV3IGZlYXR1cmVzLgorCisKKyAgVGhlcmUgaXMgYSBuZXcgaGVscGVyLCB1bWxfbmV0LCB3aGljaCBkb2VzIHRoZSBob3N0IHNldHVwIHRoYXQKKyAgcmVxdWlyZXMgcm9vdCBwcml2aWxlZ2VzLgorCisKKyAgVGhlcmUgYXJlIGN1cnJlbnRseSBmaXZlIHRyYW5zcG9ydCB0eXBlcyBhdmFpbGFibGUgZm9yIGEgVU1MIHZpcnR1YWwKKyAgbWFjaGluZSB0byBleGNoYW5nZSBwYWNrZXRzIHdpdGggb3RoZXIgaG9zdHM6CisKKyAgKwhvICBldGhlcnRhcAorCisgICsIbyAgVFVOL1RBUAorCisgICsIbyAgTXVsdGljYXN0CisKKyAgKwhvICBhIHN3aXRjaCBkYWVtb24KKworICArCG8gIHNsaXAKKworICArCG8gIHNsaXJwCisKKyAgKwhvICBwY2FwCisKKyAgICAgVGhlIFRVTi9UQVAsIGV0aGVydGFwLCBzbGlwLCBhbmQgc2xpcnAgdHJhbnNwb3J0cyBhbGxvdyBhIFVNTAorICAgICBpbnN0YW5jZSB0byBleGNoYW5nZSBwYWNrZXRzIHdpdGggdGhlIGhvc3QuICBUaGV5IG1heSBiZSBkaXJlY3RlZAorICAgICB0byB0aGUgaG9zdCBvciB0aGUgaG9zdCBtYXkganVzdCBhY3QgYXMgYSByb3V0ZXIgdG8gcHJvdmlkZSBhY2Nlc3MKKyAgICAgdG8gb3RoZXIgcGh5c2ljYWwgb3IgdmlydHVhbCBtYWNoaW5lcy4KKworCisgIFRoZSBwY2FwIHRyYW5zcG9ydCBpcyBhIHN5bnRoZXRpYyByZWFkLW9ubHkgaW50ZXJmYWNlLCB1c2luZyB0aGUKKyAgbGlicGNhcCBiaW5hcnkgdG8gY29sbGVjdCBwYWNrZXRzIGZyb20gaW50ZXJmYWNlcyBvbiB0aGUgaG9zdCBhbmQKKyAgZmlsdGVyIHRoZW0uICBUaGlzIGlzIHVzZWZ1bCBmb3IgYnVpbGRpbmcgcHJlY29uZmlndXJlZCB0cmFmZmljCisgIG1vbml0b3JzIG9yIHNuaWZmZXJzLgorCisKKyAgVGhlIGRhZW1vbiBhbmQgbXVsdGljYXN0IHRyYW5zcG9ydHMgcHJvdmlkZSBhIGNvbXBsZXRlbHkgdmlydHVhbAorICBuZXR3b3JrIHRvIG90aGVyIHZpcnR1YWwgbWFjaGluZXMuICBUaGlzIG5ldHdvcmsgaXMgY29tcGxldGVseQorICBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgcGh5c2ljYWwgbmV0d29yayB1bmxlc3Mgb25lIG9mIHRoZSB2aXJ0dWFsCisgIG1hY2hpbmVzIG9uIGl0IGlzIGFjdGluZyBhcyBhIGdhdGV3YXkuCisKKworICBXaXRoIHNvIG1hbnkgaG9zdCB0cmFuc3BvcnRzLCB3aGljaCBvbmUgc2hvdWxkIHlvdSB1c2U/ICBIZXJlJ3Mgd2hlbgorICB5b3Ugc2hvdWxkIHVzZSBlYWNoIG9uZToKKworICArCG8gIGV0aGVydGFwIC0gaWYgeW91IHdhbnQgYWNjZXNzIHRvIHRoZSBob3N0IG5ldHdvcmtpbmcgYW5kIGl0IGlzCisgICAgIHJ1bm5pbmcgMi4yCisKKyAgKwhvICBUVU4vVEFQIC0gaWYgeW91IHdhbnQgYWNjZXNzIHRvIHRoZSBob3N0IG5ldHdvcmtpbmcgYW5kIGl0IGlzCisgICAgIHJ1bm5pbmcgMi40LiAgQWxzbywgdGhlIFRVTi9UQVAgdHJhbnNwb3J0IGlzIGFibGUgdG8gdXNlIGEKKyAgICAgcHJlY29uZmlndXJlZCBkZXZpY2UsIGFsbG93aW5nIGl0IHRvIGF2b2lkIHVzaW5nIHRoZSBzZXR1aWQgdW1sX25ldAorICAgICBoZWxwZXIsIHdoaWNoIGlzIGEgc2VjdXJpdHkgYWR2YW50YWdlLgorCisgICsIbyAgTXVsdGljYXN0IC0gaWYgeW91IHdhbnQgYSBwdXJlbHkgdmlydHVhbCBuZXR3b3JrIGFuZCB5b3UgZG9uJ3Qgd2FudAorICAgICB0byBzZXQgdXAgYW55dGhpbmcgYnV0IHRoZSBVTUwKKworICArCG8gIGEgc3dpdGNoIGRhZW1vbiAtIGlmIHlvdSB3YW50IGEgcHVyZWx5IHZpcnR1YWwgbmV0d29yayBhbmQgeW91CisgICAgIGRvbid0IG1pbmQgcnVubmluZyB0aGUgZGFlbW9uIGluIG9yZGVyIHRvIGdldCBzb21ld2hhdCBiZXR0ZXIKKyAgICAgcGVyZm9ybWFuY2UKKworICArCG8gIHNsaXAgLSB0aGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiB0byBydW4gdGhlIHNsaXAgYmFja2VuZCB1bmxlc3MKKyAgICAgZXRoZXJ0YXAgYW5kIFRVTi9UQVAgYXJlIGp1c3Qgbm90IGF2YWlsYWJsZSBmb3Igc29tZSByZWFzb24KKworICArCG8gIHNsaXJwIC0gaWYgeW91IGRvbid0IGhhdmUgcm9vdCBhY2Nlc3Mgb24gdGhlIGhvc3QgdG8gc2V0dXAKKyAgICAgbmV0d29ya2luZywgb3IgaWYgeW91IGRvbid0IHdhbnQgdG8gYWxsb2NhdGUgYW4gSVAgdG8geW91ciBVTUwKKworICArCG8gIHBjYXAgLSBub3QgbXVjaCB1c2UgZm9yIGFjdHVhbCBuZXR3b3JrIGNvbm5lY3Rpdml0eSwgYnV0IGdyZWF0IGZvcgorICAgICBtb25pdG9yaW5nIHRyYWZmaWMgb24gdGhlIGhvc3QKKworICAgICBFdGhlcnRhcCBpcyBhdmFpbGFibGUgb24gMi40IGFuZCB3b3JrcyBmaW5lLiAgVFVOL1RBUCBpcyBwcmVmZXJyZWQKKyAgICAgdG8gaXQgYmVjYXVzZSBpdCBoYXMgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCBldGhlcnRhcCBpcyBvZmZpY2lhbGx5CisgICAgIGNvbnNpZGVyZWQgb2Jzb2xldGUgaW4gMi40LiAgQWxzbywgdGhlIHJvb3QgaGVscGVyIG9ubHkgbmVlZHMgdG8KKyAgICAgcnVuIG9jY2FzaW9uYWxseSBmb3IgVFVOL1RBUCwgcmF0aGVyIHRoYW4gaGFuZGxpbmcgZXZlcnkgcGFja2V0LCBhcworICAgICBpdCBkb2VzIHdpdGggZXRoZXJ0YXAuICBUaGlzIGlzIGEgc2xpZ2h0IHNlY3VyaXR5IGFkdmFudGFnZSBzaW5jZQorICAgICBpdCBwcm92aWRlcyBmZXdlciBvcHBvcnR1bml0aWVzIGZvciBhIG5hc3R5IFVNTCB1c2VyIHRvIHNvbWVob3cKKyAgICAgZXhwbG9pdCB0aGUgaGVscGVyJ3Mgcm9vdCBwcml2aWxlZ2VzLgorCisKKyAgNgg2LgguMQgxLgguICBHCEdlCGVuCG5lCGVyCHJhCGFsCGwgcwhzZQhldAh0dQh1cAhwCisKKyAgRmlyc3QsIHlvdSBtdXN0IGhhdmUgdGhlIHZpcnR1YWwgbmV0d29yayBlbmFibGVkIGluIHlvdXIgVU1MLiAgSWYgYXJlCisgIHJ1bm5pbmcgYSBwcmVidWlsdCBrZXJuZWwgZnJvbSB0aGlzIHNpdGUsIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeQorICBlbmFibGVkLiAgSWYgeW91IGJ1aWxkIHRoZSBrZXJuZWwgeW91cnNlbGYsIHVuZGVyIHRoZSAiTmV0d29yayBkZXZpY2UKKyAgc3VwcG9ydCIgbWVudSwgZW5hYmxlICJOZXR3b3JrIGRldmljZSBzdXBwb3J0IiwgYW5kIHRoZW4gdGhlIHRocmVlCisgIHRyYW5zcG9ydHMuCisKKworICBUaGUgbmV4dCBzdGVwIGlzIHRvIHByb3ZpZGUgYSBuZXR3b3JrIGRldmljZSB0byB0aGUgdmlydHVhbCBtYWNoaW5lLgorICBUaGlzIGlzIGRvbmUgYnkgZGVzY3JpYmluZyBpdCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKworICBUaGUgZ2VuZXJhbCBmb3JtYXQgaXMKKworCisgICAgICAgZXRoIDxuPiA9IDx0cmFuc3BvcnQ+ICwgPHRyYW5zcG9ydCBhcmdzPgorCisKKworCisgIEZvciBleGFtcGxlLCBhIHZpcnR1YWwgZXRoZXJuZXQgZGV2aWNlIG1heSBiZSBhdHRhY2hlZCB0byBhIGhvc3QKKyAgZXRoZXJ0YXAgZGV2aWNlIGFzIGZvbGxvd3M6CisKKworICAgICAgIGV0aDA9ZXRoZXJ0YXAsdGFwMCxmZTpmZDowOjA6MDoxLDE5Mi4xNjguMC4yNTQKKworCisKKworICBUaGlzIHNldHMgdXAgZXRoMCBpbnNpZGUgdGhlIHZpcnR1YWwgbWFjaGluZSB0byBhdHRhY2ggaXRzZWxmIHRvIHRoZQorICBob3N0IC9kZXYvdGFwMCwgYXNzaWducyBpdCBhbiBldGhlcm5ldCBhZGRyZXNzLCBhbmQgYXNzaWducyB0aGUgaG9zdAorICB0YXAwIGludGVyZmFjZSBhbiBJUCBhZGRyZXNzLgorCisKKworICBOb3RlIHRoYXQgdGhlIElQIGFkZHJlc3MgeW91IGFzc2lnbiB0byB0aGUgaG9zdCBlbmQgb2YgdGhlIHRhcCBkZXZpY2UKKyAgbXVzdCBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgSVAgeW91IGFzc2lnbiB0byB0aGUgZXRoIGRldmljZSBpbnNpZGUgVU1MLgorICBJZiB5b3UgYXJlIHNob3J0IG9uIElQcyBhbmQgZG9uJ3Qgd2FudCB0byBjb21zdW1lIHR3byBwZXIgVU1MLCB0aGVuCisgIHlvdSBjYW4gcmV1c2UgdGhlIGhvc3QncyBldGggSVAgYWRkcmVzcyBmb3IgdGhlIGhvc3QgZW5kcyBvZiB0aGUgdGFwCisgIGRldmljZXMuICBJbnRlcm5hbGx5LCB0aGUgVU1McyBtdXN0IHN0aWxsIGdldCB1bmlxdWUgSVBzIGZvciB0aGVpciBldGgKKyAgZGV2aWNlcy4gIFlvdSBjYW4gYWxzbyBnaXZlIHRoZSBVTUxzIG5vbi1yb3V0YWJsZSBJUHMgKDE5Mi4xNjgueC54IG9yCisgIDEwLngueC54KSBhbmQgaGF2ZSB0aGUgaG9zdCBtYXNxdWVyYWRlIHRoZW0uICBUaGlzIHdpbGwgbGV0IG91dGdvaW5nCisgIGNvbm5lY3Rpb25zIHdvcmssIGJ1dCBpbmNvbWluZyBjb25uZWN0aW9ucyB3b24ndCB3aXRob3V0IG1vcmUgd29yaywKKyAgc3VjaCBhcyBwb3J0IGZvcndhcmRpbmcgZnJvbSB0aGUgaG9zdC4KKyAgQWxzbyBub3RlIHRoYXQgd2hlbiB5b3UgY29uZmlndXJlIHRoZSBob3N0IHNpZGUgb2YgYW4gaW50ZXJmYWNlLCBpdCBpcworICBvbmx5IGFjdGluZyBhcyBhIGdhdGV3YXkuICBJdCB3aWxsIHJlc3BvbmQgdG8gcGluZ3Mgc2VudCB0byBpdAorICBsb2NhbGx5LCBidXQgaXMgbm90IHVzZWZ1bCB0byBkbyB0aGF0IHNpbmNlIGl0J3MgYSBob3N0IGludGVyZmFjZS4KKyAgWW91IGFyZSBub3QgdGFsa2luZyB0byB0aGUgVU1MIHdoZW4geW91IHBpbmcgdGhhdCBpbnRlcmZhY2UgYW5kIGdldCBhCisgIHJlc3BvbnNlLgorCisKKyAgWW91IGNhbiBhbHNvIGFkZCBkZXZpY2VzIHRvIGEgVU1MIGFuZCByZW1vdmUgdGhlbSBhdCBydW50aW1lLiAgU2VlIHRoZQorICBgYFRoZSBNYW5hZ2VtZW50IENvbnNvbGUnJyAgcGFnZSBmb3IgZGV0YWlscy4KKworCisgIFRoZSBzZWN0aW9ucyBiZWxvdyBkZXNjcmliZSB0aGlzIGluIG1vcmUgZGV0YWlsLgorCisKKyAgT25jZSB5b3UndmUgZGVjaWRlZCBob3cgeW91J3JlIGdvaW5nIHRvIHNldCB1cCB0aGUgZGV2aWNlcywgeW91IGJvb3QKKyAgVU1MLCBsb2cgaW4sIGNvbmZpZ3VyZSB0aGUgVU1MIHNpZGUgb2YgdGhlIGRldmljZXMsIGFuZCBzZXQgdXAgcm91dGVzCisgIHRvIHRoZSBvdXRzaWRlIHdvcmxkLiAgQXQgdGhhdCBwb2ludCwgeW91IHdpbGwgYmUgYWJsZSB0byB0YWxrIHRvIGFueQorICBvdGhlciBtYWNoaW5lcywgcGh5c2ljYWwgb3IgdmlydHVhbCwgb24gdGhlIG5ldC4KKworCisgIElmIGlmY29uZmlnIGluc2lkZSBVTUwgZmFpbHMgYW5kIHRoZSBuZXR3b3JrIHJlZnVzZXMgdG8gY29tZSB1cCwgcnVuCisgIHRlbGwgeW91IHdoYXQgd2VudCB3cm9uZy4KKworCisKKyAgNgg2LgguMggyLgguICBVCFVzCHNlCGVyCHJzCHNwCHBhCGFjCGNlCGUgZAhkYQhhZQhlbQhtbwhvbghucwhzCisKKyAgWW91IHdpbGwgbGlrZWx5IG5lZWQgdGhlIHNldHVpZCBoZWxwZXIsIG9yIHRoZSBzd2l0Y2ggZGFlbW9uLCBvciBib3RoLgorICBUaGV5IGFyZSBib3RoIGluc3RhbGxlZCB3aXRoIHRoZSBSUE0gYW5kIGRlYiwgc28gaWYgeW91J3ZlIGluc3RhbGxlZAorICBlaXRoZXIsIHlvdSBjYW4gc2tpcCB0aGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24uCisKKworICBJZiBub3QsIHRoZW4geW91IG5lZWQgdG8gY2hlY2sgdGhlbSBvdXQgb2YgQ1ZTLCBidWlsZCB0aGVtLCBhbmQKKyAgaW5zdGFsbCB0aGVtLiAgVGhlIGhlbHBlciBpcyB1bWxfbmV0LCBpbiBDVlMgL3Rvb2xzL3VtbF9uZXQsIGFuZCB0aGUKKyAgZGFlbW9uIGlzIHVtbF9zd2l0Y2gsIGluIENWUyAvdG9vbHMvdW1sX3JvdXRlci4gIFRoZXkgYXJlIGJvdGggYnVpbHQKKyAgd2l0aCBhIHBsYWluICdtYWtlJy4gIEJvdGggbmVlZCB0byBiZSBpbnN0YWxsZWQgaW4gYSBkaXJlY3RvcnkgdGhhdCdzCisgIGluIHlvdXIgcGF0aCAtIC91c3IvYmluIGlzIHJlY29tbWVuZC4gIE9uIHRvcCBvZiB0aGF0LCB1bWxfbmV0IG5lZWRzCisgIHRvIGJlIHNldHVpZCByb290LgorCisKKworICA2CDYuCC4zCDMuCC4gIFMIU3AIcGUIZWMIY2kIaWYIZnkIeWkIaW4IbmcIZyBlCGV0CHRoCGhlCGVyCHJuCG5lCGV0CHQgYQhhZAhkZAhkcghyZQhlcwhzcwhzZQhlcwhzCisKKyAgQmVsb3csIHlvdSB3aWxsIHNlZSB0aGF0IHRoZSBUVU4vVEFQLCBldGhlcnRhcCwgYW5kIGRhZW1vbiBpbnRlcmZhY2VzCisgIGFsbG93IHlvdSB0byBzcGVjaWZ5IGhhcmR3YXJlIGFkZHJlc3NlcyBmb3IgdGhlIHZpcnR1YWwgZXRoZXJuZXQKKyAgZGV2aWNlcy4gIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBuZWNlc3NhcnkuICBJZiB5b3UgZG9uJ3QgaGF2ZSBhCisgIHNwZWNpZmljIHJlYXNvbiB0byBkbyBpdCwgeW91IHByb2JhYmx5IHNob3VsZG4ndC4gIElmIG9uZSBpcyBub3QKKyAgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBkcml2ZXIgd2lsbCBhc3NpZ24gb25lIGJhc2VkIG9uIHRoZQorICBkZXZpY2UgSVAgYWRkcmVzcy4gIEl0IHdpbGwgcHJvdmlkZSB0aGUgYWRkcmVzcyBmZTpmZDpubjpubjpubjpubgorICB3aGVyZSBubi5ubi5ubi5ubiBpcyB0aGUgZGV2aWNlIElQIGFkZHJlc3MuICBUaGlzIGlzIG5lYXJseSBhbHdheXMKKyAgc3VmZmljaWVudCB0byBndWFyYW50ZWUgYSB1bmlxdWUgaGFyZHdhcmUgYWRkcmVzcyBmb3IgdGhlIGRldmljZS4gIEEKKyAgY291cGxlIG9mIGV4Y2VwdGlvbnMgYXJlOgorCisgICsIbyAgQW5vdGhlciBzZXQgb2YgdmlydHVhbCBldGhlcm5ldCBkZXZpY2VzIGFyZSBvbiB0aGUgc2FtZSBuZXR3b3JrIGFuZAorICAgICB0aGV5IGFyZSBhc3NpZ25lZCBoYXJkd2FyZSBhZGRyZXNzZXMgdXNpbmcgYSBkaWZmZXJlbnQgc2NoZW1lIHdoaWNoCisgICAgIG1heSBjb25mbGljdCB3aXRoIHRoZSBVTUwgSVAgYWRkcmVzcy1iYXNlZCBzY2hlbWUKKworICArCG8gIFlvdSBhcmVuJ3QgZ29pbmcgdG8gdXNlIHRoZSBkZXZpY2UgZm9yIElQIG5ldHdvcmtpbmcsIHNvIHlvdSBkb24ndAorICAgICBhc3NpZ24gdGhlIGRldmljZSBhbiBJUCBhZGRyZXNzCisKKyAgICAgSWYgeW91IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgdGhlIGhhcmR3YXJlIGFkZHJlc3MsIHlvdSBzaG91bGQgbWFrZQorICAgICBzdXJlIHRoYXQgdGhlIGRldmljZSBJUCBhZGRyZXNzIGlzIGtub3duIGJlZm9yZSB0aGUgaW50ZXJmYWNlIGlzCisgICAgIGJyb3VnaHQgdXAuICBTbywgaW5zaWRlIFVNTCwgdGhpcyB3aWxsIGd1YXJhbnRlZSB0aGF0OgorCisKKworICBVTUwjCisgIGlmY29uZmlnIGV0aDAgMTkyLjE2OC4wLjI1MCB1cAorCisKKworCisgIElmIHlvdSBkZWNpZGUgdG8gYXNzaWduIHRoZSBoYXJkd2FyZSBhZGRyZXNzIHlvdXJzZWxmLCBtYWtlIHN1cmUgdGhhdAorICB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYWRkcmVzcyBpcyBldmVuLiAgQWRkcmVzc2VzIHdpdGggYW4gb2RkIGZpcnN0CisgIGJ5dGUgYXJlIGJyb2FkY2FzdCBhZGRyZXNzZXMsIHdoaWNoIHlvdSBkb24ndCB3YW50IGFzc2lnbmVkIHRvIGEKKyAgZGV2aWNlLgorCisKKworICA2CDYuCC40CDQuCC4gIFUIVU0ITUwITCBpCGluCG50CHRlCGVyCHJmCGZhCGFjCGNlCGUgcwhzZQhldAh0dQh1cAhwCisKKyAgT25jZSB0aGUgbmV0d29yayBkZXZpY2VzIGhhdmUgYmVlbiBkZXNjcmliZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgeW91CisgIHNob3VsZCBib290IFVNTCBhbmQgbG9nIGluLgorCisKKyAgVGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIGJyaW5nIHRoZSBpbnRlcmZhY2UgdXA6CisKKworICAgICAgIFVNTCMgaWZjb25maWcgZXRobiBpcC1hZGRyZXNzIHVwCisKKworCisKKyAgWW91IHNob3VsZCBiZSBhYmxlIHRvIHBpbmcgdGhlIGhvc3QgYXQgdGhpcyBwb2ludC4KKworCisgIFRvIHJlYWNoIHRoZSByZXN0IG9mIHRoZSB3b3JsZCwgeW91IHNob3VsZCBzZXQgYSBkZWZhdWx0IHJvdXRlIHRvIHRoZQorICBob3N0OgorCisKKyAgICAgICBVTUwjIHJvdXRlIGFkZCBkZWZhdWx0IGd3IGhvc3QgaXAKKworCisKKworICBBZ2Fpbiwgd2l0aCBob3N0IGlwIG9mIDE5Mi4xNjguMC40OgorCisKKyAgICAgICBVTUwjIHJvdXRlIGFkZCBkZWZhdWx0IGd3IDE5Mi4xNjguMC40CisKKworCisKKyAgVGhpcyBwYWdlIHVzZWQgdG8gcmVjb21tZW5kIHNldHRpbmcgYSBuZXR3b3JrIHJvdXRlIHRvIHlvdXIgbG9jYWwgbmV0LgorICBUaGlzIGlzIHdyb25nLCBiZWNhdXNlIGl0IHdpbGwgY2F1c2UgVU1MIHRvIHRyeSB0byBmaWd1cmUgb3V0IGhhcmR3YXJlCisgIGFkZHJlc3NlcyBvZiB0aGUgbG9jYWwgbWFjaGluZXMgYnkgYXJwaW5nIG9uIHRoZSBpbnRlcmZhY2UgdG8gdGhlCisgIGhvc3QuICBTaW5jZSB0aGF0IGludGVyZmFjZSBpcyBiYXNpY2FsbHkgYSBzaW5nbGUgc3RyYW5kIG9mIGV0aGVybmV0CisgIHdpdGggdHdvIG5vZGVzIG9uIGl0IChVTUwgYW5kIHRoZSBob3N0KSBhbmQgYXJwIHJlcXVlc3RzIGRvbid0IGNyb3NzCisgIG5ldHdvcmtzLCB0aGV5IHdpbGwgZmFpbCB0byBlbGljaXQgYW55IHJlc3BvbnNlcy4gIFNvLCB3aGF0IHlvdSB3YW50CisgIGlzIGZvciBVTUwgdG8ganVzdCBibGluZGx5IHRocm93IGFsbCBwYWNrZXRzIGF0IHRoZSBob3N0IGFuZCBsZXQgaXQKKyAgZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhlbSwgd2hpY2ggaXMgd2hhdCBsZWF2aW5nIG91dCB0aGUgbmV0d29yaworICByb3V0ZSBhbmQgYWRkaW5nIHRoZSBkZWZhdWx0IHJvdXRlIGRvZXMuCisKKworICBOb3RlOiBJZiB5b3UgY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCBvdGhlciBob3N0cyBvbiB5b3VyIHBoeXNpY2FsCisgIGV0aGVybmV0LCBpdCdzIHByb2JhYmx5IGJlY2F1c2Ugb2YgYSBuZXR3b3JrIHJvdXRlIHRoYXQncworICBhdXRvbWF0aWNhbGx5IHNldCB1cC4gIElmIHlvdSBydW4gJ3JvdXRlIC1uJyBhbmQgc2VlIGEgcm91dGUgdGhhdAorICBsb29rcyBsaWtlIHRoaXM6CisKKworCisKKyAgRGVzdGluYXRpb24gICAgIEdhdGV3YXkgICAgICAgICBHZW5tYXNrICAgICAgICAgRmxhZ3MgTWV0cmljIFJlZiAgICBVc2UgSWZhY2UKKyAgMTkyLjE2OC4wLjAgICAgIDAuMC4wLjAgICAgICAgICAyNTUuMjU1LjI1NS4wICAgVSAgICAgMCAgICAgIDAgICAgICAwICAgZXRoMAorCisKKworCisgIHdpdGggYSBtYXNrIHRoYXQncyBub3QgMjU1LjI1NS4yNTUuMjU1LCB0aGVuIHJlcGxhY2UgaXQgd2l0aCBhIHJvdXRlCisgIHRvIHlvdXIgaG9zdDoKKworCisgICAgICAgVU1MIworICAgICAgIHJvdXRlIGRlbCAtbmV0IDE5Mi4xNjguMC4wIGRldiBldGgwIG5ldG1hc2sgMjU1LjI1NS4yNTUuMAorCisKKworCisKKworICAgICAgIFVNTCMKKyAgICAgICByb3V0ZSBhZGQgLWhvc3QgMTkyLjE2OC4wLjQgZGV2IGV0aDAKKworCisKKworICBUaGlzLCBwbHVzIHRoZSBkZWZhdWx0IHJvdXRlIHRvIHRoZSBob3N0LCB3aWxsIGFsbG93IFVNTCB0byBleGNoYW5nZQorICBwYWNrZXRzIHdpdGggYW55IG1hY2hpbmUgb24geW91ciBldGhlcm5ldC4KKworCisKKyAgNgg2LgguNQg1LgguICBNCE11CHVsCGx0CHRpCGljCGNhCGFzCHN0CHQKKworICBUaGUgc2ltcGxlc3Qgd2F5IHRvIHNldCB1cCBhIHZpcnR1YWwgbmV0d29yayBiZXR3ZWVuIG11bHRpcGxlIFVNTHMgaXMKKyAgdG8gdXNlIHRoZSBtY2FzdCB0cmFuc3BvcnQuICBUaGlzIHdhcyB3cml0dGVuIGJ5IEhhcmFsZCBXZWx0ZSBhbmQgaXMKKyAgcHJlc2VudCBpbiBVTUwgdmVyc2lvbiAyLjQuNS01dW0gYW5kIGxhdGVyLiAgWW91ciBzeXN0ZW0gbXVzdCBoYXZlCisgIG11bHRpY2FzdCBlbmFibGVkIGluIHRoZSBrZXJuZWwgYW5kIHRoZXJlIG11c3QgYmUgYSBtdWx0aWNhc3QtY2FwYWJsZQorICBuZXR3b3JrIGRldmljZSBvbiB0aGUgaG9zdC4gIE5vcm1hbGx5LCB0aGlzIGlzIGV0aDAsIGJ1dCBpZiB0aGVyZSBpcworICBubyBldGhlcm5ldCBjYXJkIG9uIHRoZSBob3N0LCB0aGVuIHlvdSB3aWxsIGxpa2VseSBnZXQgc3RyYW5nZSBlcnJvcgorICBtZXNzYWdlcyB3aGVuIHlvdSBicmluZyB0aGUgZGV2aWNlIHVwIGluc2lkZSBVTUwuCisKKworICBUbyB1c2UgaXQsIHJ1biB0d28gVU1McyB3aXRoCisKKworICAgICAgICBldGgwPW1jYXN0CisKKworCisKKyAgb24gdGhlaXIgY29tbWFuZCBsaW5lcy4gIExvZyBpbiwgY29uZmlndXJlIHRoZSBldGhlcm5ldCBkZXZpY2UgaW4gZWFjaAorICBtYWNoaW5lIHdpdGggZGlmZmVyZW50IElQIGFkZHJlc3NlczoKKworCisgICAgICAgVU1MMSMgaWZjb25maWcgZXRoMCAxOTIuMTY4LjAuMjU0CisKKworCisKKworCisgICAgICAgVU1MMiMgaWZjb25maWcgZXRoMCAxOTIuMTY4LjAuMjUzCisKKworCisKKyAgYW5kIHRoZXkgc2hvdWxkIGJlIGFibGUgdG8gdGFsayB0byBlYWNoIG90aGVyLgorCisgIFRoZSBmdWxsIHNldCBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgdGhpcyB0cmFuc3BvcnQgYXJlCisKKworCisgICAgICAgZXRobj1tY2FzdCxldGhlcm5ldCBhZGRyZXNzLG11bHRpY2FzdAorICAgICAgIGFkZHJlc3MsbXVsdGljYXN0IHBvcnQsdHRsCisKKworCisKKyAgSGFyYWxkJ3Mgb3JpZ2luYWwgUkVBRE1FIGlzIGhlcmUgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlLQorICBmb3JnZS5uZXQvdGV4dC9tY2FzdC50eHQ+ICBhbmQgZXhwbGFpbnMgdGhlc2UgaW4gZGV0YWlsLCBhcyB3ZWxsIGFzCisgIHNvbWUgb3RoZXIgaXNzdWVzLgorCisKKworICA2CDYuCC42CDYuCC4gIFQIVFUIVU4ITi8IL1QIVEEIQVAIUCB3CHdpCGl0CHRoCGggdAh0aAhoZQhlIHUIdW0IbWwIbF8IX24IbmUIZXQIdCBoCGhlCGVsCGxwCHBlCGVyCHIKKworICBUVU4vVEFQIGlzIHRoZSBwcmVmZXJyZWQgbWVjaGFuaXNtIG9uIDIuNCB0byBleGNoYW5nZSBwYWNrZXRzIHdpdGggdGhlCisgIGhvc3QuICBUaGUgVFVOL1RBUCBiYWNrZW5kIGhhcyBiZWVuIGluIFVNTCBzaW5jZSAyLjQuOS0zdW0uCisKKworICBUaGUgZWFzaWVzdCB3YXkgdG8gZ2V0IHVwIGFuZCBydW5uaW5nIGlzIHRvIGxldCB0aGUgc2V0dWlkIHVtbF9uZXQKKyAgaGVscGVyIGRvIHRoZSBob3N0IHNldHVwIGZvciB5b3UuICBUaGlzIGludm9sdmVzIGluc21vZC1pbmcgdGhlIHR1bi5vCisgIG1vZHVsZSBpZiBuZWNlc3NhcnksIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UsIGFuZCBzZXR0aW5nIHVwIElQCisgIGZvcndhcmRpbmcsIHJvdXRpbmcsIGFuZCBwcm94eSBhcnAuICBJZiB5b3UgYXJlIG5ldyB0byBVTUwgbmV0d29ya2luZywKKyAgZG8gdGhpcyBmaXJzdC4gIElmIHlvdSdyZSBjb25jZXJuZWQgYWJvdXQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZgorICB0aGUgc2V0dWlkIGhlbHBlciwgdXNlIGl0IHRvIGdldCB1cCBhbmQgcnVubmluZywgdGhlbiByZWFkIHRoZSBuZXh0CisgIHNlY3Rpb24gdG8gc2VlIGhvdyB0byBoYXZlIFVNTCB1c2UgYSBwcmVjb25maWd1cmVkIHRhcCBkZXZpY2UsIHdoaWNoCisgIGF2b2lkcyB0aGUgdXNlIG9mIHVtbF9uZXQuCisKKworICBJZiB5b3Ugc3BlY2lmeSBhbiBJUCBhZGRyZXNzIGZvciB0aGUgaG9zdCBzaWRlIG9mIHRoZSBkZXZpY2UsIHRoZQorICB1bWxfbmV0IGhlbHBlciB3aWxsIGRvIGFsbCBuZWNlc3Nhcnkgc2V0dXAgb24gdGhlIGhvc3QgLSB0aGUgb25seQorICByZXF1aXJlbWVudCBpcyB0aGF0IFRVTi9UQVAgYmUgYXZhaWxhYmxlLCBlaXRoZXIgYnVpbHQgaW4gdG8gdGhlIGhvc3QKKyAga2VybmVsIG9yIGFzIHRoZSB0dW4ubyBtb2R1bGUuCisKKyAgVGhlIGZvcm1hdCBvZiB0aGUgY29tbWFuZCBsaW5lIHN3aXRjaCB0byBhdHRhY2ggYSBkZXZpY2UgdG8gYSBUVU4vVEFQCisgIGRldmljZSBpcworCisKKyAgICAgICBldGggPG4+ID10dW50YXAsLCwgPElQIGFkZHJlc3M+CisKKworCisKKyAgRm9yIGV4YW1wbGUsIHRoaXMgYXJndW1lbnQgd2lsbCBhdHRhY2ggdGhlIFVNTCdzIGV0aDAgdG8gdGhlIG5leHQKKyAgYXZhaWxhYmxlIHRhcCBkZXZpY2UgYW5kIGFzc2lnbiBhbiBldGhlcm5ldCBhZGRyZXNzIHRvIGl0IGJhc2VkIG9uIGl0cworICBJUCBhZGRyZXNzCisKKworICAgICAgIGV0aDA9dHVudGFwLCwsMTkyLjE2OC4wLjI1NAorCisKKworCisKKworICBOb3RlIHRoYXQgdGhlIElQIGFkZHJlc3MgdGhhdCBtdXN0IGJlIHVzZWQgZm9yIHRoZSBldGggZGV2aWNlIGluc2lkZQorICBVTUwgaXMgZml4ZWQgYnkgdGhlIHJvdXRpbmcgYW5kIHByb3h5IGFycCB0aGF0IGlzIHNldCB1cCBvbiB0aGUKKyAgVFVOL1RBUCBkZXZpY2Ugb24gdGhlIGhvc3QuICBZb3UgY2FuIHVzZSBhIGRpZmZlcmVudCBvbmUsIGJ1dCBpdCB3b24ndAorICB3b3JrIGJlY2F1c2UgcmVwbHkgcGFja2V0cyB3b24ndCByZWFjaCB0aGUgVU1MLiAgVGhpcyBpcyBhIGZlYXR1cmUuCisgIEl0IHByZXZlbnRzIGEgbmFzdHkgVU1MIHVzZXIgZnJvbSBkb2luZyB0aGluZ3MgbGlrZSBzZXR0aW5nIHRoZSBVTUwgSVAKKyAgdG8gdGhlIHNhbWUgYXMgdGhlIG5ldHdvcmsncyBuYW1lc2VydmVyIG9yIG1haWwgc2VydmVyLgorCisKKyAgVGhlcmUgYXJlIGEgY291cGxlIHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoIHJ1bm5pbmcgdGhlIFRVTi9UQVAKKyAgdHJhbnNwb3J0IG9uIGEgMi40IGhvc3Qga2VybmVsCisKKyAgKwhvICBUVU4vVEFQIHNlZW1zIG5vdCB0byB3b3JrIG9uIDIuNC4zIGFuZCBlYXJsaWVyLiAgVXBncmFkZSB0aGUgaG9zdAorICAgICBrZXJuZWwgb3IgdXNlIHRoZSBldGhlcnRhcCB0cmFuc3BvcnQuCisKKyAgKwhvICBXaXRoIGFuIHVwZ3JhZGVkIGtlcm5lbCwgVFVOL1RBUCBtYXkgZmFpbCB3aXRoCisKKworICAgICAgIEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUKKworCisKKworICBUaGlzIGlzIGR1ZSB0byBhIGhlYWRlciBtaXNtYXRjaCBiZXR3ZWVuIHRoZSB1cGdyYWRlZCBrZXJuZWwgYW5kIHRoZQorICBrZXJuZWwgdGhhdCB3YXMgb3JpZ2luYWxseSBpbnN0YWxsZWQgb24gdGhlIG1hY2hpbmUuICBUaGUgZml4IGlzIHRvCisgIG1ha2Ugc3VyZSB0aGF0IC91c3Ivc3JjL2xpbnV4IHBvaW50cyB0byB0aGUgaGVhZGVycyBmb3IgdGhlIHJ1bm5pbmcKKyAga2VybmVsLgorCisgIFRoZXNlIHdlcmUgcG9pbnRlZCBvdXQgYnkgVGltIFJvYmluc29uIDx0aW1ybyBhdCB0cmtyIGRvdCBuZXQ+IGluCisgIDxodHRwOi8vd3d3Lmdlb2NyYXdsZXIuY29tL2xpc3RzLzMvU291cmNlRm9yZ2UvNTk3LzAvPiBuYW1lPSJ0aGlzIHVtbC0KKyAgdXNlciBwb3N0Ij4gLgorCisKKworICA2CDYuCC43CDcuCC4gIFQIVFUIVU4ITi8IL1QIVEEIQVAIUCB3CHdpCGl0CHRoCGggYQhhIHAIcHIIcmUIZWMIY28Ib24IbmYIZmkIaWcIZ3UIdXIIcmUIZWQIZCB0CHRhCGFwCHAgZAhkZQhldgh2aQhpYwhjZQhlCisKKyAgSWYgeW91IHByZWZlciBub3QgdG8gaGF2ZSBVTUwgdXNlIHVtbF9uZXQgKHdoaWNoIGlzIHNvbWV3aGF0CisgIGluc2VjdXJlKSwgd2l0aCBVTUwgMi40LjE3LTExLCB5b3UgY2FuIHNldCB1cCBhIFRVTi9UQVAgZGV2aWNlCisgIGJlZm9yZWhhbmQuICBUaGUgc2V0dXAgbmVlZHMgdG8gYmUgZG9uZSBhcyByb290LCBidXQgb25jZSB0aGF0J3MgZG9uZSwKKyAgdGhlcmUgaXMgbm8gbmVlZCBmb3Igcm9vdCBhc3Npc3RhbmNlLiAgU2V0dGluZyB1cCB0aGUgZGV2aWNlIGlzIGRvbmUKKyAgYXMgZm9sbG93czoKKworICArCG8gIENyZWF0ZSB0aGUgZGV2aWNlIHdpdGggdHVuY3RsIChhdmFpbGFibGUgZnJvbSB0aGUgVU1MIHV0aWxpdGllcworICAgICB0YXJiYWxsKQorCisKKworCisgICAgICAgaG9zdCMgIHR1bmN0bCAtdSB1aWQKKworCisKKworICB3aGVyZSB1aWQgaXMgdGhlIHVzZXIgaWQgb3IgdXNlcm5hbWUgdGhhdCBVTUwgd2lsbCBiZSBydW4gYXMuICBUaGlzCisgIHdpbGwgdGVsbCB5b3Ugd2hhdCBkZXZpY2Ugd2FzIGNyZWF0ZWQuCisKKyAgKwhvICBDb25maWd1cmUgdGhlIGRldmljZSBJUCAoY2hhbmdlIElQIGFkZHJlc3NlcyBhbmQgZGV2aWNlIG5hbWUgdG8KKyAgICAgc3VpdCkKKworCisKKworICAgICAgIGhvc3QjICBpZmNvbmZpZyB0YXAwIDE5Mi4xNjguMC4yNTQgdXAKKworCisKKworCisgICsIbyAgU2V0IHVwIHJvdXRpbmcgYW5kIGFycGluZyBpZiBkZXNpcmVkIC0gdGhpcyBpcyBteSByZWNpcGUsIHRoZXJlIGFyZQorICAgICBvdGhlciB3YXlzIG9mIGRvaW5nIHRoZSBzYW1lIHRoaW5nCisKKworICAgICAgIGhvc3QjCisgICAgICAgYmFzaCAtYyAnZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQnCisKKyAgICAgICBob3N0IworICAgICAgIHJvdXRlIGFkZCAtaG9zdCAxOTIuMTY4LjAuMjUzIGRldiB0YXAwCisKKworCisKKworCisgICAgICAgaG9zdCMKKyAgICAgICBiYXNoIC1jICdlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi90YXAwL3Byb3h5X2FycCcKKworCisKKworCisKKyAgICAgICBob3N0IworICAgICAgIGFycCAtRHMgMTkyLjE2OC4wLjI1MyBldGgwIHB1YgorCisKKworCisgIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgZG9uZSBldmVyeSB0aW1lIHRoZSBob3N0IGJvb3RzIC0gdGhpcyBjb25maWd1LQorICByYXRpb24gaXMgbm90IHN0b3JlZCBhY3Jvc3MgaG9zdCByZWJvb3RzLiAgU28sIGl0J3MgcHJvYmFibHkgYSBnb29kCisgIGlkZWEgdG8gc3RpY2sgaXQgaW4gYW4gcmMgZmlsZS4gIEFuIGV2ZW4gYmV0dGVyIGlkZWEgd291bGQgYmUgYSBsaXR0bGUKKyAgdXRpbGl0eSB3aGljaCByZWFkcyB0aGUgaW5mb3JtYXRpb24gZnJvbSBhIGNvbmZpZyBmaWxlIGFuZCBzZXRzIHVwCisgIGRldmljZXMgYXQgYm9vdCB0aW1lLgorCisgICsIbyAgUmF0aGVyIHRoYW4gdXNpbmcgdXAgdHdvIElQcyBhbmQgQVJQaW5nIGZvciBvbmUgb2YgdGhlbSwgeW91IGNhbgorICAgICBhbHNvIHByb3ZpZGUgZGlyZWN0IGFjY2VzcyB0byB5b3VyIExBTiBieSB0aGUgVU1MIGJ5IHVzaW5nIGEKKyAgICAgYnJpZGdlLgorCisKKyAgICAgICBob3N0IworICAgICAgIGJyY3RsIGFkZGJyIGJyMAorCisKKworCisKKworICAgICAgIGhvc3QjCisgICAgICAgaWZjb25maWcgZXRoMCAwLjAuMC4wIHByb21pc2MgdXAKKworCisKKworCisKKyAgICAgICBob3N0IworICAgICAgIGlmY29uZmlnIHRhcDAgMC4wLjAuMCBwcm9taXNjIHVwCisKKworCisKKworCisgICAgICAgaG9zdCMKKyAgICAgICBpZmNvbmZpZyBicjAgMTkyLjE2OC4wLjEgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHVwCisKKworCisKKworCisKKyAgaG9zdCMKKyAgYnJjdGwgc3RwIGJyMCBvZmYKKworCisKKworCisKKyAgICAgICBob3N0IworICAgICAgIGJyY3RsIHNldGZkIGJyMCAxCisKKworCisKKworCisgICAgICAgaG9zdCMKKyAgICAgICBicmN0bCBzZXRoZWxsbyBicjAgMQorCisKKworCisKKworICAgICAgIGhvc3QjCisgICAgICAgYnJjdGwgYWRkaWYgYnIwIGV0aDAKKworCisKKworCisKKyAgICAgICBob3N0IworICAgICAgIGJyY3RsIGFkZGlmIGJyMCB0YXAwCisKKworCisKKyAgTm90ZSB0aGF0ICdicjAnIHNob3VsZCBiZSBzZXR1cCB1c2luZyBpZmNvbmZpZyB3aXRoIHRoZSBleGlzdGluZyBJUAorICBhZGRyZXNzIG9mIGV0aDAsIGFzIGV0aDAgbm8gbG9uZ2VyIGhhcyBpdHMgb3duIElQLgorCisgICsIbworCisKKyAgICAgQWxzbywgdGhlIC9kZXYvbmV0L3R1biBkZXZpY2UgbXVzdCBiZSB3cml0YWJsZSBieSB0aGUgdXNlciBydW5uaW5nCisgICAgIFVNTCBpbiBvcmRlciBmb3IgdGhlIFVNTCB0byB1c2UgdGhlIGRldmljZSB0aGF0J3MgYmVlbiBjb25maWd1cmVkCisgICAgIGZvciBpdC4gIFRoZSBzaW1wbGVzdCB0aGluZyB0byBkbyBpcworCisKKyAgICAgICBob3N0IyAgY2htb2QgNjY2IC9kZXYvbmV0L3R1bgorCisKKworCisgIE1ha2luZyBpdCB3b3JsZC13cml0ZWFibGUgbG9va3MgYmFkLCBidXQgaXQgc2VlbXMgbm90IHRvIGJlCisgIGV4cGxvaXRhYmxlIGFzIGEgc2VjdXJpdHkgaG9sZS4gIEhvd2V2ZXIsIGl0IGRvZXMgYWxsb3cgYW55b25lIHRvIGNyZS0KKyAgYXRlIHVzZWxlc3MgdGFwIGRldmljZXMgKHVzZWxlc3MgYmVjYXVzZSB0aGV5IGNhbid0IGNvbmZpZ3VyZSB0aGVtKSwKKyAgd2hpY2ggaXMgYSBET1MgYXR0YWNrLiAgQSBzb21ld2hhdCBtb3JlIHNlY3VyZSBhbHRlcm5hdGl2ZSB3b3VsZCB0byBiZQorICB0byBjcmVhdGUgYSBncm91cCBjb250YWluaW5nIGFsbCB0aGUgdXNlcnMgd2hvIGhhdmUgcHJlY29uZmlndXJlZCB0YXAKKyAgZGV2aWNlcyBhbmQgY2hncnAgL2Rldi9uZXQvdHVuIHRvIHRoYXQgZ3JvdXAgd2l0aCBtb2RlIDY2NCBvciA2NjAuCisKKworICArCG8gIE9uY2UgdGhlIGRldmljZSBpcyBzZXQgdXAsIHJ1biBVTUwgd2l0aCAnZXRoMD10dW50YXAsZGV2aWNlIG5hbWUnCisgICAgIChpLmUuICdldGgwPXR1bnRhcCx0YXAwJykgb24gdGhlIGNvbW1hbmQgbGluZSAob3IgZG8gaXQgd2l0aCB0aGUKKyAgICAgbWNvbnNvbGUgY29uZmlnIGNvbW1hbmQpLgorCisgICsIbyAgQnJpbmcgdGhlIGV0aCBkZXZpY2UgdXAgaW4gVU1MIGFuZCB5b3UncmUgaW4gYnVzaW5lc3MuCisKKyAgICAgSWYgeW91IGRvbid0IHdhbnQgdGhhdCB0YXAgZGV2aWNlIGFueSBtb3JlLCB5b3UgY2FuIG1ha2UgaXQgbm9uLQorICAgICBwZXJzaXN0ZW50IHdpdGgKKworCisgICAgICAgaG9zdCMgIHR1bmN0bCAtZCB0YXAgZGV2aWNlCisKKworCisKKyAgRmluYWxseSwgdHVuY3RsIGhhcyBhIC1iIChmb3IgYnJpZWYgbW9kZSkgc3dpdGNoIHdoaWNoIGNhdXNlcyBpdCB0bworICBvdXRwdXQgb25seSB0aGUgbmFtZSBvZiB0aGUgdGFwIGRldmljZSBpdCBjcmVhdGVkLiAgVGhpcyBtYWtlcyBpdAorICBzdWl0YWJsZSBmb3IgY2FwdHVyZSBieSBhIHNjcmlwdDoKKworCisgICAgICAgaG9zdCMgIFRBUD1gdHVuY3RsIC11IDEwMDAgLWJgCisKKworCisKKworCisgIDYINi4ILjgIOC4ILiAgRQhFdAh0aAhoZQhlcghydAh0YQhhcAhwCisKKyAgRXRoZXJ0YXAgaXMgdGhlIGdlbmVyYWwgbWVjaGFuaXNtIG9uIDIuMiBmb3IgdXNlcnNwYWNlIHByb2Nlc3NlcyB0bworICBleGNoYW5nZSBwYWNrZXRzIHdpdGggdGhlIGtlcm5lbC4KKworCisKKyAgVG8gdXNlIHRoaXMgdHJhbnNwb3J0LCB5b3UgbmVlZCB0byBkZXNjcmliZSB0aGUgdmlydHVhbCBuZXR3b3JrIGRldmljZQorICBvbiB0aGUgVU1MIGNvbW1hbmQgbGluZS4gIFRoZSBnZW5lcmFsIGZvcm1hdCBmb3IgdGhpcyBpcworCisKKyAgICAgICBldGggPG4+ID1ldGhlcnRhcCwgPGRldmljZT4gLCA8ZXRoZXJuZXQgYWRkcmVzcz4gLCA8dGFwIElQIGFkZHJlc3M+CisKKworCisKKyAgU28sIHRoZSBwcmV2aW91cyBleGFtcGxlCisKKworICAgICAgIGV0aDA9ZXRoZXJ0YXAsdGFwMCxmZTpmZDowOjA6MDoxLDE5Mi4xNjguMC4yNTQKKworCisKKworICBhdHRhY2hlcyB0aGUgVU1MIGV0aDAgZGV2aWNlIHRvIHRoZSBob3N0IC9kZXYvdGFwMCwgYXNzaWducyBpdCB0aGUKKyAgZXRoZXJuZXQgYWRkcmVzcyBmZTpmZDowOjA6MDoxLCBhbmQgYXNzaWducyB0aGUgSVAgYWRkcmVzcworICAxOTIuMTY4LjAuMjU0IHRvIHRoZSB0YXAgZGV2aWNlLgorCisKKworICBUaGUgdGFwIGRldmljZSBpcyBtYW5kYXRvcnksIGJ1dCB0aGUgb3RoZXJzIGFyZSBvcHRpb25hbC4gIElmIHRoZQorICBldGhlcm5ldCBhZGRyZXNzIGlzIG9taXR0ZWQsIG9uZSB3aWxsIGJlIGFzc2lnbmVkIHRvIGl0LgorCisKKyAgVGhlIHByZXNlbmNlIG9mIHRoZSB0YXAgSVAgYWRkcmVzcyB3aWxsIGNhdXNlIHRoZSBoZWxwZXIgdG8gcnVuIGFuZCBkbworICB3aGF0ZXZlciBob3N0IHNldHVwIGlzIG5lZWRlZCB0byBhbGxvdyB0aGUgdmlydHVhbCBtYWNoaW5lIHRvCisgIGNvbW11bmljYXRlIHdpdGggdGhlIG91dHNpZGUgd29ybGQuICBJZiB5b3UncmUgbm90IHN1cmUgeW91IGtub3cgd2hhdAorICB5b3UncmUgZG9pbmcsIHRoaXMgaXMgdGhlIHdheSB0byBnby4KKworCisgIElmIGl0IGlzIGFic2VudCwgdGhlbiB5b3UgbXVzdCBjb25maWd1cmUgdGhlIHRhcCBkZXZpY2UgYW5kIHdoYXRldmVyCisgIGFycGluZyBhbmQgcm91dGluZyB5b3Ugd2lsbCBuZWVkIG9uIHRoZSBob3N0LiAgSG93ZXZlciwgZXZlbiBpbiB0aGlzCisgIGNhc2UsIHRoZSB1bWxfbmV0IGhlbHBlciBzdGlsbCBuZWVkcyB0byBiZSBpbiB5b3VyIHBhdGggYW5kIGl0IG11c3QgYmUKKyAgc2V0dWlkIHJvb3QgaWYgeW91J3JlIG5vdCBydW5uaW5nIFVNTCBhcyByb290LiAgVGhpcyBpcyBiZWNhdXNlIHRoZQorICB0YXAgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBTSUdJTywgd2hpY2ggVU1MIG5lZWRzIGluIG9yZGVyIHRvIHVzZQorICBzb21ldGhpbmcgYXMgYSBzb3VyY2Ugb2YgaW5wdXQuICBTbywgdGhlIGhlbHBlciBpcyB1c2VkIGFzIGEKKyAgY29udmVuaWVudCBhc3luY2hyb25vdXMgSU8gdGhyZWFkLgorCisgIElmIHlvdSdyZSB1c2luZyB0aGUgdW1sX25ldCBoZWxwZXIsIHlvdSBjYW4gaWdub3JlIHRoZSBmb2xsb3dpbmcgaG9zdAorICBzZXR1cCAtIHVtbF9uZXQgd2lsbCBkbyBpdCBmb3IgeW91LiAgWW91IGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgeW91CisgIGhhdmUgZXRoZXJ0YXAgYXZhaWxhYmxlLCBlaXRoZXIgYnVpbHQgaW4gdG8gdGhlIGhvc3Qga2VybmVsIG9yCisgIGF2YWlsYWJsZSBhcyBhIG1vZHVsZS4KKworCisgIElmIHlvdSB3YW50IHRvIHNldCB0aGluZ3MgdXAgeW91cnNlbGYsIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICBhcHByb3ByaWF0ZSAvZGV2IGVudHJ5IGV4aXN0cy4gIElmIGl0IGRvZXNuJ3QsIGJlY29tZSByb290IGFuZCBjcmVhdGUKKyAgaXQgYXMgZm9sbG93czoKKworCisgICAgICAgbWtub2QgL2Rldi90YXAgPG1pbm9yPiAgYyAzNiAgPG1pbm9yPiAgKyAxNgorCisKKworCisgIEZvciBleGFtcGxlLCB0aGlzIGlzIGhvdyB0byBjcmVhdGUgL2Rldi90YXAwOgorCisKKyAgICAgICBta25vZCAvZGV2L3RhcDAgYyAzNiAwICsgMTYKKworCisKKworICBZb3UgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBob3N0IGtlcm5lbCBoYXMgZXRoZXJ0YXAgc3VwcG9ydC4KKyAgSWYgZXRoZXJ0YXAgaXMgZW5hYmxlZCBhcyBhIG1vZHVsZSwgeW91IGFwcGFyZW50bHkgbmVlZCB0byBpbnNtb2QKKyAgZXRoZXJ0YXAgb25jZSBmb3IgZWFjaCBldGhlcnRhcCBkZXZpY2UgeW91IHdhbnQgdG8gZW5hYmxlLiAgU28sCisKKworICAgICAgIGhvc3QjCisgICAgICAgaW5zbW9kIGV0aGVydGFwCisKKworCisKKyAgd2lsbCBnaXZlIHlvdSB0aGUgdGFwMCBpbnRlcmZhY2UuICBUbyBnZXQgdGhlIHRhcDEgaW50ZXJmYWNlLCB5b3UgbmVlZAorICB0byBydW4KKworCisgICAgICAgaG9zdCMKKyAgICAgICBpbnNtb2QgZXRoZXJ0YXAgdW5pdD0xIC1vIGV0aGVydGFwMQorCisKKworCisKKworCisgIDYINi4ILjkIOS4ILiAgVAhUaAhoZQhlIHMIc3cId2kIaXQIdGMIY2gIaCBkCGRhCGFlCGVtCG1vCG9uCG4KKworICBOCE5vCG90CHRlCGU6IFRoaXMgaXMgdGhlIGRhZW1vbiBmb3JtZXJseSBrbm93biBhcyB1bWxfcm91dGVyLCBidXQgd2hpY2ggd2FzCisgIHJlbmFtZWQgc28gdGhlIG5ldHdvcmsgd2VlbmllcyBvZiB0aGUgd29ybGQgd291bGQgc3RvcCBncm93bGluZyBhdCBtZS4KKworCisgIFRoZSBzd2l0Y2ggZGFlbW9uLCB1bWxfc3dpdGNoLCBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgY3JlYXRpbmcgYQorICB0b3RhbGx5IHZpcnR1YWwgbmV0d29yay4gIEJ5IGRlZmF1bHQsIGl0IHByb3ZpZGVzIG5vIGNvbm5lY3Rpb24gdG8gdGhlCisgIGhvc3QgbmV0d29yayAoYnV0IHNlZSAtdGFwLCBiZWxvdykuCisKKworICBUaGUgZmlyc3QgdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgcnVuIHRoZSBkYWVtb24uICBSdW5uaW5nIGl0IHdpdGggbm8KKyAgYXJndW1lbnRzIHdpbGwgbWFrZSBpdCBsaXN0ZW4gb24gYSBkZWZhdWx0IHBhaXIgb2YgdW5peCBkb21haW4KKyAgc29ja2V0cy4KKworCisgIElmIHlvdSB3YW50IGl0IHRvIGxpc3RlbiBvbiBhIGRpZmZlcmVudCBwYWlyIG9mIHNvY2tldHMsIHVzZQorCisKKyAgICAgICAgLXVuaXggY29udHJvbCBzb2NrZXQgZGF0YSBzb2NrZXQKKworCisKKworCisgIElmIHlvdSB3YW50IGl0IHRvIGFjdCBhcyBhIGh1YiByYXRoZXIgdGhhbiBhIHN3aXRjaCwgdXNlCisKKworICAgICAgICAtaHViCisKKworCisKKworICBJZiB5b3Ugd2FudCB0aGUgc3dpdGNoIHRvIGJlIGNvbm5lY3RlZCB0byBob3N0IG5ldHdvcmtpbmcgKGFsbG93aW5nCisgIHRoZSB1bWxzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIG91dHNpZGUgd29ybGQgdGhyb3VnaCB0aGUgaG9zdCksIHVzZQorCisKKyAgICAgICAgLXRhcCB0YXAwCisKKworCisKKworICBOb3RlIHRoYXQgdGhlIHRhcCBkZXZpY2UgbXVzdCBiZSBwcmVjb25maWd1cmVkIChzZWUgIlRVTi9UQVAgd2l0aCBhCisgIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSIsIGFib3ZlKS4gIElmIHlvdSdyZSB1c2luZyBhIGRpZmZlcmVudCB0YXAKKyAgZGV2aWNlIHRoYW4gdGFwMCwgc3BlY2lmeSB0aGF0IGluc3RlYWQgb2YgdGFwMC4KKworCisgIHVtbF9zd2l0Y2ggY2FuIGJlIGJhY2tncm91bmRlZCBhcyBmb2xsb3dzCisKKworICAgICAgIGhvc3QlCisgICAgICAgdW1sX3N3aXRjaCBbIG9wdGlvbnMgXSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbAorCisKKworCisgIFRoZSByZWFzb24gaXQgZG9lc24ndCBiYWNrZ3JvdW5kIGJ5IGRlZmF1bHQgaXMgdGhhdCBpdCBsaXN0ZW5zIHRvCisgIHN0ZGluIGZvciBFT0YuICBXaGVuIGl0IHNlZXMgdGhhdCwgaXQgZXhpdHMuCisKKworICBUaGUgZ2VuZXJhbCBmb3JtYXQgb2YgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgc3dpdGNoIGlzCisKKworCisgICAgICAgZXRobj1kYWVtb24sZXRoZXJuZXQgYWRkcmVzcyxzb2NrZXQKKyAgICAgICB0eXBlLGNvbnRyb2wgc29ja2V0LGRhdGEgc29ja2V0CisKKworCisKKyAgWW91IGNhbiBsZWF2ZSBvZmYgZXZlcnl0aGluZyBleGNlcHQgdGhlICdkYWVtb24nLiAgWW91IG9ubHkgbmVlZCB0bworICBzcGVjaWZ5IHRoZSBldGhlcm5ldCBhZGRyZXNzIGlmIHRoZSBvbmUgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIGl0CisgIGlzbid0IGFjY2VwdGFibGUgZm9yIHNvbWUgcmVhc29uLiAgVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyBkZXNjcmliZQorICBob3cgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGFlbW9uLiAgWW91IHNob3VsZCBvbmx5IHNwZWNpZnkgdGhlbSBpZgorICB5b3UgdG9sZCB0aGUgZGFlbW9uIHRvIHVzZSBkaWZmZXJlbnQgc29ja2V0cyB0aGFuIHRoZSBkZWZhdWx0LiAgU28sIGlmCisgIHlvdSByYW4gdGhlIGRhZW1vbiB3aXRoIG5vIGFyZ3VtZW50cywgcnVubmluZyB0aGUgVU1MIG9uIHRoZSBzYW1lCisgIG1hY2hpbmUgd2l0aAorICAgICAgIGV0aDA9ZGFlbW9uCisKKworCisKKyAgd2lsbCBjYXVzZSB0aGUgZXRoMCBkcml2ZXIgdG8gYXR0YWNoIGl0c2VsZiB0byB0aGUgZGFlbW9uIGNvcnJlY3RseS4KKworCisKKyAgNgg2LgguMQgxMAgwLgguICBTCFNsCGxpCGlwCHAKKworICBTbGlwIGlzIGFub3RoZXIsIGxlc3MgZ2VuZXJhbCwgbWVjaGFuaXNtIGZvciBhIHByb2Nlc3MgdG8gY29tbXVuaWNhdGUKKyAgd2l0aCB0aGUgaG9zdCBuZXR3b3JraW5nLiAgSW4gY29udHJhc3QgdG8gdGhlIGV0aGVydGFwIGludGVyZmFjZSwKKyAgd2hpY2ggZXhjaGFuZ2VzIGV0aGVybmV0IGZyYW1lcyB3aXRoIHRoZSBob3N0IGFuZCBjYW4gYmUgdXNlZCB0bworICB0cmFuc3BvcnQgYW55IGhpZ2hlci1sZXZlbCBwcm90b2NvbCwgaXQgY2FuIG9ubHkgYmUgdXNlZCB0byB0cmFuc3BvcnQKKyAgSVAuCisKKworICBUaGUgZ2VuZXJhbCBmb3JtYXQgb2YgdGhlIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXMKKworCisKKyAgICAgICBldGhuPXNsaXAsc2xpcCBJUAorCisKKworCisgIFRoZSBzbGlwIElQIGFyZ3VtZW50IGlzIHRoZSBJUCBhZGRyZXNzIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUKKyAgaG9zdCBlbmQgb2YgdGhlIHNsaXAgZGV2aWNlLiAgSWYgaXQgaXMgc3BlY2lmaWVkLCB0aGUgaGVscGVyIHdpbGwgcnVuCisgIGFuZCB3aWxsIHNldCB1cCB0aGUgaG9zdCBzbyB0aGF0IHRoZSB2aXJ0dWFsIG1hY2hpbmUgY2FuIHJlYWNoIGl0IGFuZAorICB0aGUgcmVzdCBvZiB0aGUgbmV0d29yay4KKworCisgIFRoZXJlIGFyZSBzb21lIG9kZGl0aWVzIHdpdGggdGhpcyBpbnRlcmZhY2UgdGhhdCB5b3Ugc2hvdWxkIGJlIGF3YXJlCisgIG9mLiAgWW91IHNob3VsZCBvbmx5IHNwZWNpZnkgb25lIHNsaXAgZGV2aWNlIG9uIGEgZ2l2ZW4gdmlydHVhbAorICBtYWNoaW5lLCBhbmQgaXRzIG5hbWUgaW5zaWRlIFVNTCB3aWxsIGJlICd1bW4nLCBub3QgJ2V0aDAnIG9yIHdoYXRldmVyCisgIHlvdSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoZXNlIHByb2JsZW1zIHdpbGwgYmUgZml4ZWQgYXQKKyAgc29tZSBwb2ludC4KKworCisKKyAgNgg2LgguMQgxMQgxLgguICBTCFNsCGxpCGlyCHJwCHAKKworICBzbGlycCB1c2VzIGFuIGV4dGVybmFsIHByb2dyYW0sIHVzdWFsbHkgL3Vzci9iaW4vc2xpcnAsIHRvIHByb3ZpZGUgSVAKKyAgb25seSBuZXR3b3JraW5nIGNvbm5lY3Rpdml0eSB0aHJvdWdoIHRoZSBob3N0LiBUaGlzIGlzIHNpbWlsYXIgdG8gSVAKKyAgbWFzcXVlcmFkaW5nIHdpdGggYSBmaXJld2FsbCwgYWx0aG91Z2ggdGhlIHRyYW5zbGF0aW9uIGlzIHBlcmZvcm1lZCBpbgorICB1c2VyLXNwYWNlLCByYXRoZXIgdGhhbiBieSB0aGUga2VybmVsLiAgQXMgc2xpcnAgZG9lcyBub3Qgc2V0IHVwIGFueQorICBpbnRlcmZhY2VzIG9uIHRoZSBob3N0LCBvciBjaGFuZ2VzIHJvdXRpbmcsIHNsaXJwIGRvZXMgbm90IHJlcXVpcmUKKyAgcm9vdCBhY2Nlc3Mgb3Igc2V0dWlkIGJpbmFyaWVzIG9uIHRoZSBob3N0LgorCisKKyAgVGhlIGdlbmVyYWwgZm9ybWF0IG9mIHRoZSBjb21tYW5kIGxpbmUgc3dpdGNoIGZvciBzbGlycCBpczoKKworCisKKyAgICAgICBldGhuPXNsaXJwLGV0aGVybmV0IGFkZHJlc3Msc2xpcnAgcGF0aAorCisKKworCisgIFRoZSBldGhlcm5ldCBhZGRyZXNzIGlzIG9wdGlvbmFsLCBhcyBVTUwgd2lsbCBzZXQgdXAgdGhlIGludGVyZmFjZQorICB3aXRoIGFuIGV0aGVybmV0IGFkZHJlc3MgYmFzZWQgdXBvbiB0aGUgaW5pdGlhbCBJUCBhZGRyZXNzIG9mIHRoZQorICBpbnRlcmZhY2UuICBUaGUgc2xpcnAgcGF0aCBpcyBnZW5lcmFsbHkgL3Vzci9iaW4vc2xpcnAsIGFsdGhvdWdoIGl0CisgIHdpbGwgZGVwZW5kIG9uIGRpc3RyaWJ1dGlvbi4KKworCisgIFRoZSBzbGlycCBwcm9ncmFtIGNhbiBoYXZlIGEgbnVtYmVyIG9mIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBjb21tYW5kCisgIGxpbmUgYW5kIHdlIGNhbid0IGFkZCB0aGVtIHRvIHRoZSBVTUwgY29tbWFuZCBsaW5lLCBhcyB0aGV5IHdpbGwgYmUKKyAgcGFyc2VkIGluY29ycmVjdGx5LiAgSW5zdGVhZCwgYSB3cmFwcGVyIHNoZWxsIHNjcmlwdCBjYW4gYmUgd3JpdHRlbiBvcgorICB0aGUgb3B0aW9ucyBpbnNlcnRlZCBpbnRvIHRoZSAgLy5zbGlycHJjIGZpbGUuICBNb3JlIGluZm9ybWF0aW9uIG9uCisgIGFsbCBvZiB0aGUgc2xpcnAgb3B0aW9ucyBjYW4gYmUgZm91bmQgaW4gaXRzIG1hbiBwYWdlcy4KKworCisgIFRoZSBldGgwIGludGVyZmFjZSBvbiBVTUwgc2hvdWxkIGJlIHNldCB1cCB3aXRoIHRoZSBJUCAxMC4yLjAuMTUsCisgIGFsdGhvdWdoIHlvdSBjYW4gdXNlIGFueXRoaW5nIGFzIGxvbmcgYXMgaXQgaXMgbm90IHVzZWQgYnkgYSBuZXR3b3JrCisgIHlvdSB3aWxsIGJlIGNvbm5lY3RpbmcgdG8uIFRoZSBkZWZhdWx0IHJvdXRlIG9uIFVNTCBzaG91bGQgYmUgc2V0IHRvCisgIHVzZQorCisKKyAgICAgICBVTUwjCisgICAgICAgcm91dGUgYWRkIGRlZmF1bHQgZGV2IGV0aDAKKworCisKKworICBzbGlycCBwcm92aWRlcyBhIG51bWJlciBvZiB1c2VmdWwgSVAgYWRkcmVzc2VzIHdoaWNoIGNhbiBiZSB1c2VkIGJ5CisgIFVNTCwgc3VjaCBhcyAxMC4wLjIuMyB3aGljaCBpcyBhbiBhbGlhcyBmb3IgdGhlIEROUyBzZXJ2ZXIgc3BlY2lmaWVkCisgIGluIC9ldGMvcmVzb2x2LmNvbmYgb24gdGhlIGhvc3Qgb3IgdGhlIElQIGdpdmVuIGluIHRoZSAnZG5zJyBvcHRpb24KKyAgZm9yIHNsaXJwLgorCisKKyAgRXZlbiB3aXRoIGEgYmF1ZHJhdGUgc2V0dGluZyBoaWdoZXIgdGhhbiAxMTUyMDAsIHRoZSBzbGlycCBjb25uZWN0aW9uCisgIGlzIGxpbWl0ZWQgdG8gMTE1MjAwLiBJZiB5b3UgbmVlZCBpdCB0byBnbyBmYXN0ZXIsIHRoZSBzbGlycCBiaW5hcnkKKyAgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBGVUxMX0JPTFQgZGVmaW5lZCBpbiBjb25maWcuaC4KKworCisKKyAgNgg2LgguMQgxMggyLgguICBwCHBjCGNhCGFwCHAKKworICBUaGUgcGNhcCB0cmFuc3BvcnQgaXMgYXR0YWNoZWQgdG8gYSBVTUwgZXRoZXJuZXQgZGV2aWNlIG9uIHRoZSBjb21tYW5kCisgIGxpbmUgb3Igd2l0aCB1bWxfbWNvbnNvbGUgd2l0aCB0aGUgZm9sbG93aW5nIHN5bnRheDoKKworCisKKyAgICAgICBldGhuPXBjYXAsaG9zdCBpbnRlcmZhY2UsZmlsdGVyCisgICAgICAgZXhwcmVzc2lvbixvcHRpb24xLG9wdGlvbjIKKworCisKKworICBUaGUgZXhwcmVzc2lvbiBhbmQgb3B0aW9ucyBhcmUgb3B0aW9uYWwuCisKKworICBUaGUgaW50ZXJmYWNlIGlzIHdoYXRldmVyIG5ldHdvcmsgZGV2aWNlIG9uIHRoZSBob3N0IHlvdSB3YW50IHRvCisgIHNuaWZmLiAgVGhlIGV4cHJlc3Npb24gaXMgYSBwY2FwIGZpbHRlciBleHByZXNzaW9uLCB3aGljaCBpcyBhbHNvIHdoYXQKKyAgdGNwZHVtcCB1c2VzLCBzbyBpZiB5b3Uga25vdyBob3cgdG8gc3BlY2lmeSB0Y3BkdW1wIGZpbHRlcnMsIHlvdSB3aWxsCisgIHVzZSB0aGUgc2FtZSBleHByZXNzaW9ucyBoZXJlLiAgVGhlIG9wdGlvbnMgYXJlIHVwIHRvIHR3byBvZgorICAncHJvbWlzYycsIGNvbnRyb2wgd2hldGhlciBwY2FwIHB1dHMgdGhlIGhvc3QgaW50ZXJmYWNlIGludG8KKyAgcHJvbWlzY3VvdXMgbW9kZS4gJ29wdGltaXplJyBhbmQgJ25vb3B0aW1pemUnIGNvbnRyb2wgd2hldGhlciB0aGUgcGNhcAorICBleHByZXNzaW9uIG9wdGltaXplciBpcyB1c2VkLgorCisKKyAgRXhhbXBsZToKKworCisKKyAgICAgICBldGgwPXBjYXAsZXRoMCx0Y3AKKworICAgICAgIGV0aDE9cGNhcCxldGgwLCF0Y3AKKworCisKKyAgd2lsbCBjYXVzZSB0aGUgVU1MIGV0aDAgdG8gZW1pdCBhbGwgdGNwIHBhY2tldHMgb24gdGhlIGhvc3QgZXRoMCBhbmQKKyAgdGhlIFVNTCBldGgxIHRvIGVtaXQgYWxsIG5vbi10Y3AgcGFja2V0cyBvbiB0aGUgaG9zdCBldGgwLgorCisKKworICA2CDYuCC4xCDEzCDMuCC4gIFMIU2UIZXQIdHQIdGkIaW4IbmcIZyB1CHVwCHAgdAh0aAhoZQhlIGgIaG8Ib3MIc3QIdCB5CHlvCG91CHVyCHJzCHNlCGVsCGxmCGYKKworICBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhbiBhZGRyZXNzIGZvciB0aGUgaG9zdCBzaWRlIG9mIHRoZSBldGhlcnRhcCBvcgorICBzbGlwIGRldmljZSwgVU1MIHdvbid0IGRvIGFueSBzZXR1cCBvbiB0aGUgaG9zdC4gIFNvIHRoaXMgaXMgd2hhdCBpcworICBuZWVkZWQgdG8gZ2V0IHRoaW5ncyB3b3JraW5nICh0aGUgZXhhbXBsZXMgdXNlIGEgaG9zdC1zaWRlIElQIG9mCisgIDE5Mi4xNjguMC4yNTEgYW5kIGEgVU1MLXNpZGUgSVAgb2YgMTkyLjE2OC4wLjI1MCAtIGFkanVzdCB0byBzdWl0IHlvdXIKKyAgb3duIG5ldHdvcmspOgorCisgICsIbyAgVGhlIGRldmljZSBuZWVkcyB0byBiZSBjb25maWd1cmVkIHdpdGggaXRzIElQIGFkZHJlc3MuICBUYXAgZGV2aWNlcworICAgICBhcmUgYWxzbyBjb25maWd1cmVkIHdpdGggYW4gbXR1IG9mIDE0ODQuICBTbGlwIGRldmljZXMgYXJlCisgICAgIGNvbmZpZ3VyZWQgd2l0aCBhIHBvaW50LXRvLXBvaW50IGFkZHJlc3MgcG9pbnRpbmcgYXQgdGhlIFVNTCBpcAorICAgICBhZGRyZXNzLgorCisKKyAgICAgICBob3N0IyAgaWZjb25maWcgdGFwMCBhcnAgbXR1IDE0ODQgMTkyLjE2OC4wLjI1MSB1cAorCisKKworCisKKworICAgICAgIGhvc3QjCisgICAgICAgaWZjb25maWcgc2wwIDE5Mi4xNjguMC4yNTEgcG9pbnRvcG9pbnQgMTkyLjE2OC4wLjI1MCB1cAorCisKKworCisKKyAgKwhvICBJZiBhIHRhcCBkZXZpY2UgaXMgYmVpbmcgc2V0IHVwLCBhIHJvdXRlIGlzIHNldCB0byB0aGUgVU1MIElQLgorCisKKyAgICAgICBVTUwjIHJvdXRlIGFkZCAtaG9zdCAxOTIuMTY4LjAuMjUwIGd3IDE5Mi4xNjguMC4yNTEKKworCisKKworCisgICsIbyAgVG8gYWxsb3cgb3RoZXIgaG9zdHMgb24geW91ciBuZXR3b3JrIHRvIHNlZSB0aGUgdmlydHVhbCBtYWNoaW5lLAorICAgICBwcm94eSBhcnAgaXMgc2V0IHVwIGZvciBpdC4KKworCisgICAgICAgaG9zdCMgIGFycCAtRHMgMTkyLjE2OC4wLjI1MCBldGgwIHB1YgorCisKKworCisKKyAgKwhvICBGaW5hbGx5LCB0aGUgaG9zdCBpcyBzZXQgdXAgdG8gcm91dGUgcGFja2V0cy4KKworCisgICAgICAgaG9zdCMgIGVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkCisKKworCisKKworCisKKworCisKKyAgNwg3LgguICBTCFNoCGhhCGFyCHJpCGluCG5nCGcgRghGaQhpbAhsZQhlcwhzeQh5cwhzdAh0ZQhlbQhtcwhzIGIIYmUIZXQIdHcId2UIZWUIZW4IbiBWCFZpCGlyCHJ0CHR1CHVhCGFsCGwgTQhNYQhhYwhjaAhoaQhpbghuZQhlcwhzCisKKworCisKKyAgNwg3LgguMQgxLgguICBBCEEgdwh3YQhhcghybghuaQhpbghuZwhnCisKKyAgRG9uJ3QgYXR0ZW1wdCB0byBzaGFyZSBmaWxlc3lzdGVtcyBzaW1wbHkgYnkgYm9vdGluZyB0d28gVU1McyBmcm9tIHRoZQorICBzYW1lIGZpbGUuICBUaGF0J3MgdGhlIHNhbWUgdGhpbmcgYXMgYm9vdGluZyB0d28gcGh5c2ljYWwgbWFjaGluZXMKKyAgZnJvbSBhIHNoYXJlZCBkaXNrLiAgSXQgd2lsbCByZXN1bHQgaW4gZmlsZXN5c3RlbSBjb3JydXB0aW9uLgorCisKKworICA3CDcuCC4yCDIuCC4gIFUIVXMIc2kIaW4IbmcIZyBsCGxhCGF5CHllCGVyCHJlCGVkCGQgYghibAhsbwhvYwhjawhrIGQIZGUIZXYIdmkIaWMIY2UIZXMIcworCisgIFRoZSB3YXkgdG8gc2hhcmUgYSBmaWxlc3lzdGVtIGJldHdlZW4gdHdvIHZpcnR1YWwgbWFjaGluZXMgaXMgdG8gdXNlCisgIHRoZSBjb3B5LW9uLXdyaXRlIChDT1cpIGxheWVyaW5nIGNhcGFiaWxpdHkgb2YgdGhlIHViZCBibG9jayBkcml2ZXIuCisgIEFzIG9mIDIuNC42LTJ1bSwgdGhlIGRyaXZlciBzdXBwb3J0cyBsYXllcmluZyBhIHJlYWQtd3JpdGUgcHJpdmF0ZQorICBkZXZpY2Ugb3ZlciBhIHJlYWQtb25seSBzaGFyZWQgZGV2aWNlLiAgQSBtYWNoaW5lJ3Mgd3JpdGVzIGFyZSBzdG9yZWQKKyAgaW4gdGhlIHByaXZhdGUgZGV2aWNlLCB3aGlsZSByZWFkcyBjb21lIGZyb20gZWl0aGVyIGRldmljZSAtIHRoZQorICBwcml2YXRlIG9uZSBpZiB0aGUgcmVxdWVzdGVkIGJsb2NrIGlzIHZhbGlkIGluIGl0LCB0aGUgc2hhcmVkIG9uZSBpZgorICBub3QuICBVc2luZyB0aGlzIHNjaGVtZSwgdGhlIG1ham9yaXR5IG9mIGRhdGEgd2hpY2ggaXMgdW5jaGFuZ2VkIGlzCisgIHNoYXJlZCBiZXR3ZWVuIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdmlydHVhbCBtYWNoaW5lcywgZWFjaCBvZiB3aGljaAorICBoYXMgYSBtdWNoIHNtYWxsZXIgZmlsZSBjb250YWluaW5nIHRoZSBjaGFuZ2VzIHRoYXQgaXQgaGFzIG1hZGUuICBXaXRoCisgIGEgbGFyZ2UgbnVtYmVyIG9mIFVNTHMgYm9vdGluZyBmcm9tIGEgbGFyZ2Ugcm9vdCBmaWxlc3lzdGVtLCB0aGlzCisgIGxlYWRzIHRvIGEgaHVnZSBkaXNrIHNwYWNlIHNhdmluZy4gIEl0IHdpbGwgYWxzbyBoZWxwIHBlcmZvcm1hbmNlLAorICBzaW5jZSB0aGUgaG9zdCB3aWxsIGJlIGFibGUgdG8gY2FjaGUgdGhlIHNoYXJlZCBkYXRhIHVzaW5nIGEgbXVjaAorICBzbWFsbGVyIGFtb3VudCBvZiBtZW1vcnksIHNvIFVNTCBkaXNrIHJlcXVlc3RzIHdpbGwgYmUgc2VydmVkIGZyb20gdGhlCisgIGhvc3QncyBtZW1vcnkgcmF0aGVyIHRoYW4gaXRzIGRpc2tzLgorCisKKworCisgIFRvIGFkZCBhIGNvcHktb24td3JpdGUgbGF5ZXIgdG8gYW4gZXhpc3RpbmcgYmxvY2sgZGV2aWNlIGZpbGUsIHNpbXBseQorICBhZGQgdGhlIG5hbWUgb2YgdGhlIENPVyBmaWxlIHRvIHRoZSBhcHByb3ByaWF0ZSB1YmQgc3dpdGNoOgorCisKKyAgICAgICAgdWJkMD1yb290X2ZzX2Nvdyxyb290X2ZzX2RlYmlhbl8yMgorCisKKworCisgIHdoZXJlICdyb290X2ZzX2NvdycgaXMgdGhlIHByaXZhdGUgQ09XIGZpbGUgYW5kICdyb290X2ZzX2RlYmlhbl8yMicgaXMKKyAgdGhlIGV4aXN0aW5nIHNoYXJlZCBmaWxlc3lzdGVtLiAgVGhlIENPVyBmaWxlIG5lZWQgbm90IGV4aXN0LiAgSWYgaXQKKyAgZG9lc24ndCwgdGhlIGRyaXZlciB3aWxsIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBpdC4gIE9uY2UgdGhlIENPVyBmaWxlCisgIGhhcyBiZWVuIGluaXRpYWxpemVkLCBpdCBjYW4gYmUgdXNlZCBvbiBpdHMgb3duIG9uIHRoZSBjb21tYW5kIGxpbmU6CisKKworICAgICAgICB1YmQwPXJvb3RfZnNfY293CisKKworCisKKyAgVGhlIG5hbWUgb2YgdGhlIGJhY2tpbmcgZmlsZSBpcyBzdG9yZWQgaW4gdGhlIENPVyBmaWxlIGhlYWRlciwgc28gaXQKKyAgd291bGQgYmUgcmVkdW5kYW50IHRvIGNvbnRpbnVlIHNwZWNpZnlpbmcgaXQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworCisKKyAgNwg3LgguMwgzLgguICBOCE5vCG90CHRlCGUhCCEKKworICBXaGVuIGNoZWNraW5nIHRoZSBzaXplIG9mIHRoZSBDT1cgZmlsZSBpbiBvcmRlciB0byBzZWUgdGhlIGdvYnMgb2YKKyAgc3BhY2UgdGhhdCB5b3UncmUgc2F2aW5nLCBtYWtlIHN1cmUgeW91IHVzZSAnbHMgLWxzJyB0byBzZWUgdGhlIGFjdHVhbAorICBkaXNrIGNvbnN1bXB0aW9uIHJhdGhlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuICBUaGUgQ09XIGZpbGUgaXMKKyAgc3BhcnNlLCBzbyB0aGUgbGVuZ3RoIHdpbGwgYmUgdmVyeSBkaWZmZXJlbnQgZnJvbSB0aGUgZGlzayB1c2FnZS4KKyAgSGVyZSBpcyBhICdscyAtbCcgb2YgYSBDT1cgZmlsZSBhbmQgYmFja2luZyBmaWxlIGZyb20gb25lIGJvb3QgYW5kCisgIHNodXRkb3duOgorICAgICAgIGhvc3QlIGxzIC1sIGNvdy5kZWJpYW4gZGViaWFuMi4yCisgICAgICAgLXJ3LXItLXItLSAgICAxIGpkaWtlICAgIGpkaWtlICAgIDQ5MjUwNDA2NCBBdWcgIDYgMjE6MTYgY293LmRlYmlhbgorICAgICAgIC1yd3hydy1ydy0gICAgMSBqZGlrZSAgICBqZGlrZSAgICA1Mzc5MTk0ODggQXVnICA2IDIwOjQyIGRlYmlhbjIuMgorCisKKworCisgIERvZXNuJ3QgbG9vayBsaWtlIG11Y2ggc2F2ZWQgc3BhY2UsIGRvZXMgaXQ/ICBXZWxsLCBoZXJlJ3MgJ2xzIC1scyc6CisKKworICAgICAgIGhvc3QlIGxzIC1scyBjb3cuZGViaWFuIGRlYmlhbjIuMgorICAgICAgICAgIDg4MCAtcnctci0tci0tICAgIDEgamRpa2UgICAgamRpa2UgICAgNDkyNTA0MDY0IEF1ZyAgNiAyMToxNiBjb3cuZGViaWFuCisgICAgICAgNTI1ODMyIC1yd3hydy1ydy0gICAgMSBqZGlrZSAgICBqZGlrZSAgICA1Mzc5MTk0ODggQXVnICA2IDIwOjQyIGRlYmlhbjIuMgorCisKKworCisgIE5vdywgeW91IGNhbiBzZWUgdGhhdCB0aGUgQ09XIGZpbGUgaGFzIGxlc3MgdGhhbiBhIG1lZyBvZiBkaXNrLCByYXRoZXIKKyAgdGhhbiA0OTIgbWVnLgorCisKKworICA3CDcuCC40CDQuCC4gIEEIQW4Ibm8Ib3QIdGgIaGUIZXIIciB3CHdhCGFyCHJuCG5pCGluCG5nCGcKKworICBPbmNlIGEgZmlsZXN5c3RlbSBpcyBiZWluZyB1c2VkIGFzIGEgcmVhZG9ubHkgYmFja2luZyBmaWxlIGZvciBhIENPVworICBmaWxlLCBkbyBub3QgYm9vdCBkaXJlY3RseSBmcm9tIGl0IG9yIG1vZGlmeSBpdCBpbiBhbnkgd2F5LiAgRG9pbmcgc28KKyAgd2lsbCBpbnZhbGlkYXRlIGFueSBDT1cgZmlsZXMgdGhhdCBhcmUgdXNpbmcgaXQuICBUaGUgbXRpbWUgYW5kIHNpemUKKyAgb2YgdGhlIGJhY2tpbmcgZmlsZSBhcmUgc3RvcmVkIGluIHRoZSBDT1cgZmlsZSBoZWFkZXIgYXQgaXRzIGNyZWF0aW9uLAorICBhbmQgdGhleSBtdXN0IGNvbnRpbnVlIHRvIG1hdGNoLiAgSWYgdGhleSBkb24ndCwgdGhlIGRyaXZlciB3aWxsCisgIHJlZnVzZSB0byB1c2UgdGhlIENPVyBmaWxlLgorCisKKworCisgIElmIHlvdSBhdHRlbXB0IHRvIGV2YWRlIHRoaXMgcmVzdHJpY3Rpb24gYnkgY2hhbmdpbmcgZWl0aGVyIHRoZQorICBiYWNraW5nIGZpbGUgb3IgdGhlIENPVyBoZWFkZXIgYnkgaGFuZCwgeW91IHdpbGwgZ2V0IGEgY29ycnVwdGVkCisgIGZpbGVzeXN0ZW0uCisKKworCisKKyAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIG1lYW5zIHRoYXQgdXBncmFkaW5nIHRoZSBkaXN0cmlidXRpb24gaW4gYQorICBiYWNraW5nIGZpbGUgYW5kIGV4cGVjdGluZyB0aGF0IGFsbCBvZiB0aGUgQ09XIGZpbGVzIHVzaW5nIGl0IHdpbGwgc2VlCisgIHRoZSB1cGdyYWRlIHdpbGwgbm90IHdvcmsuCisKKworCisKKyAgNwg3LgguNQg1LgguICB1CHVtCG1sCGxfCF9tCG1vCG9vCG8gOgg6IE0ITWUIZXIIcmcIZ2kIaW4IbmcIZyBhCGEgQwhDTwhPVwhXIGYIZmkIaWwIbGUIZSB3CHdpCGl0CHRoCGggaQhpdAh0cwhzIGIIYmEIYWMIY2sIa2kIaW4IbmcIZyBmCGZpCGlsCGxlCGUKKworICBEZXBlbmRpbmcgb24gaG93IHlvdSB1c2UgVU1MIGFuZCBDT1cgZGV2aWNlcywgaXQgbWF5IGJlIGFkdmlzYWJsZSB0bworICBtZXJnZSB0aGUgY2hhbmdlcyBpbiB0aGUgQ09XIGZpbGUgaW50byB0aGUgYmFja2luZyBmaWxlIGV2ZXJ5IG9uY2UgaW4KKyAgYSB3aGlsZS4KKworCisKKworICBUaGUgdXRpbGl0eSB0aGF0IGRvZXMgdGhpcyBpcyB1bWxfbW9vLiAgSXRzIHVzYWdlIGlzCisKKworICAgICAgIGhvc3QlIHVtbF9tb28gQ09XIGZpbGUgbmV3IGJhY2tpbmcgZmlsZQorCisKKworCisgIFRoZXJlJ3Mgbm8gbmVlZCB0byBzcGVjaWZ5IHRoZSBiYWNraW5nIGZpbGUgc2luY2UgdGhhdCBpbmZvcm1hdGlvbiBpcworICBhbHJlYWR5IGluIHRoZSBDT1cgZmlsZSBoZWFkZXIuICBJZiB5b3UncmUgcGFyYW5vaWQsIGJvb3QgdGhlIG5ldworICBtZXJnZWQgZmlsZSwgYW5kIGlmIHlvdSdyZSBoYXBweSB3aXRoIGl0LCBtb3ZlIGl0IG92ZXIgdGhlIG9sZCBiYWNraW5nCisgIGZpbGUuCisKKworCisKKyAgdW1sX21vbyBjcmVhdGVzIGEgbmV3IGJhY2tpbmcgZmlsZSBieSBkZWZhdWx0IGFzIGEgc2FmZXR5IG1lYXN1cmUuICBJdAorICBhbHNvIGhhcyBhIGRlc3RydWN0aXZlIG1lcmdlIG9wdGlvbiB3aGljaCB3aWxsIG1lcmdlIHRoZSBDT1cgZmlsZQorICBkaXJlY3RseSBpbnRvIGl0cyBjdXJyZW50IGJhY2tpbmcgZmlsZS4gIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNhYmxlCisgIHdoZW4gdGhlIGJhY2tpbmcgZmlsZSBvbmx5IGhhcyBvbmUgQ09XIGZpbGUgYXNzb2NpYXRlZCB3aXRoIGl0LiAgSWYKKyAgdGhlcmUgYXJlIG11bHRpcGxlIENPV3MgYXNzb2NpYXRlZCB3aXRoIGEgYmFja2luZyBmaWxlLCBhIC1kIG1lcmdlIG9mCisgIG9uZSBvZiB0aGVtIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2YgdGhlIG90aGVycy4gIEhvd2V2ZXIsIGl0IGlzCisgIGNvbnZlbmllbnQgaWYgeW91J3JlIHNob3J0IG9mIGRpc2sgc3BhY2UsIGFuZCBpdCBzaG91bGQgYWxzbyBiZQorICBub3RpY2FibHkgZmFzdGVyIHRoYW4gYSBub24tZGVzdHJ1Y3RpdmUgbWVyZ2UuCisKKworCisKKyAgdW1sX21vbyBpcyBpbnN0YWxsZWQgd2l0aCB0aGUgVU1MIGRlYiBhbmQgUlBNLiAgSWYgeW91IGRpZG4ndCBpbnN0YWxsCisgIFVNTCBmcm9tIG9uZSBvZiB0aG9zZSBwYWNrYWdlcywgeW91IGNhbiBhbHNvIGdldCBpdCBmcm9tIHRoZSBVTUwKKyAgdXRpbGl0aWVzIDxodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC9kbC1zZi5odG1sI1VNTAorICB1dGlsaXRpZXM+ICB0YXIgZmlsZSBpbiB0b29scy9tb28uCisKKworCisKKworCisKKworICA4CDguCC4gIEMIQ3IIcmUIZWEIYXQIdGkIaW4IbmcIZyBmCGZpCGlsCGxlCGVzCHN5CHlzCHN0CHRlCGVtCG1zCHMKKworCisgIFlvdSBtYXkgd2FudCB0byBjcmVhdGUgYW5kIG1vdW50IG5ldyBVTUwgZmlsZXN5c3RlbXMsIGVpdGhlciBiZWNhdXNlCisgIHlvdXIgcm9vdCBmaWxlc3lzdGVtIGlzbid0IGxhcmdlIGVub3VnaCBvciBiZWNhdXNlIHlvdSB3YW50IHRvIHVzZSBhCisgIGZpbGVzeXN0ZW0gb3RoZXIgdGhhbiBleHQyLgorCisKKyAgVGhpcyB3YXMgd3JpdHRlbiBvbiB0aGUgb2NjYXNpb24gb2YgcmVpc2VyZnMgYmVpbmcgaW5jbHVkZWQgaW4gdGhlCisgIDIuNC4xIGtlcm5lbCBwb29sLCBhbmQgdGhlcmVmb3JlIHRoZSAyLjQuMSBVTUwsIHNvIHRoZSBleGFtcGxlcyB3aWxsCisgIHRhbGsgYWJvdXQgcmVpc2VyZnMuICBUaGlzIGluZm9ybWF0aW9uIGlzIGdlbmVyaWMsIGFuZCB0aGUgZXhhbXBsZXMKKyAgc2hvdWxkIGJlIGVhc3kgdG8gdHJhbnNsYXRlIHRvIHRoZSBmaWxlc3lzdGVtIG9mIHlvdXIgY2hvaWNlLgorCisKKyAgOAg4LgguMQgxLgguICBDCENyCHJlCGVhCGF0CHRlCGUgdAh0aAhoZQhlIGYIZmkIaWwIbGUIZXMIc3kIeXMIc3QIdGUIZW0IbSBmCGZpCGlsCGxlCGUKKworICBkZCBpcyB5b3VyIGZyaWVuZC4gIEFsbCB5b3UgbmVlZCB0byBkbyBpcyB0ZWxsIGRkIHRvIGNyZWF0ZSBhbiBlbXB0eQorICBmaWxlIG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplLiAgSSB1c3VhbGx5IG1ha2UgaXQgc3BhcnNlIHRvIHNhdmUgdGltZQorICBhbmQgdG8gYXZvaWQgYWxsb2NhdGluZyBkaXNrIHNwYWNlIHVudGlsIGl0J3MgYWN0dWFsbHkgdXNlZC4gIEZvcgorICBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBjcmVhdGUgYSBzcGFyc2UgMTAwIG1lZyBmaWxlIGZ1bGwKKyAgb2YgemVyb2VzLgorCisKKyAgICAgICBob3N0JQorICAgICAgIGRkIGlmPS9kZXYvemVybyBvZj1uZXdfZmlsZXN5c3RlbSBzZWVrPTEwMCBjb3VudD0xIGJzPTFNCisKKworCisKKworCisgIDgIOC4ILjIIMi4ILiAgQQhBcwhzcwhzaQhpZwhnbghuIHQIdGgIaGUIZSBmCGZpCGlsCGxlCGUgdAh0bwhvIGEIYSBVCFVNCE1MCEwgZAhkZQhldgh2aQhpYwhjZQhlCisKKyAgQWRkIGFuIGFyZ3VtZW50IGxpa2UgdGhlIGZvbGxvd2luZyB0byB0aGUgVU1MIGNvbW1hbmQgbGluZToKKworICB1YmQ0PW5ld19maWxlc3lzdGVtCisKKworCisKKyAgbWFraW5nIHN1cmUgdGhhdCB5b3UgdXNlIGFuIHVuYXNzaWduZWQgdWJkIGRldmljZSBudW1iZXIuCisKKworCisgIDgIOC4ILjMIMy4ILiAgQwhDcghyZQhlYQhhdAh0aQhpbghuZwhnIGEIYW4IbmQIZCBtCG1vCG91CHVuCG50CHRpCGluCG5nCGcgdAh0aAhoZQhlIGYIZmkIaWwIbGUIZXMIc3kIeXMIc3QIdGUIZW0IbQorCisgIE1ha2Ugc3VyZSB0aGF0IHRoZSBmaWxlc3lzdGVtIGlzIGF2YWlsYWJsZSwgZWl0aGVyIGJ5IGJlaW5nIGJ1aWx0IGludG8KKyAgdGhlIGtlcm5lbCwgb3IgYXZhaWxhYmxlIGFzIGEgbW9kdWxlLCB0aGVuIGJvb3QgdXAgVU1MIGFuZCBsb2cgaW4uICBJZgorICB0aGUgcm9vdCBmaWxlc3lzdGVtIGRvZXNuJ3QgaGF2ZSB0aGUgZmlsZXN5c3RlbSB1dGlsaXRpZXMgKG1rZnMsIGZzY2ssCisgIGV0YyksIHRoZW4gZ2V0IHRoZW0gaW50byBVTUwgYnkgd2F5IG9mIHRoZSBuZXQgb3IgaG9zdGZzLgorCisKKyAgTWFrZSB0aGUgbmV3IGZpbGVzeXN0ZW0gb24gdGhlIGRldmljZSBhc3NpZ25lZCB0byB0aGUgbmV3IGZpbGU6CisKKworICAgICAgIGhvc3QjICBta3JlaXNlcmZzIC9kZXYvdWJkLzQKKworCisgICAgICAgPC0tLS0tLS0tLS0tIE1LUkVJU0VSRlN2MiAtLS0tLS0tLS0tLT4KKworICAgICAgIFJlaXNlckZTIHZlcnNpb24gMy42LjI1CisgICAgICAgQmxvY2sgc2l6ZSA0MDk2IGJ5dGVzCisgICAgICAgQmxvY2sgY291bnQgMjU4NTYKKyAgICAgICBVc2VkIGJsb2NrcyA4MjEyCisgICAgICAgICAgICAgICBKb3VybmFsIC0gODE5MiBibG9ja3MgKDE4LTgyMDkpLCBqb3VybmFsIGhlYWRlciBpcyBpbiBibG9jayA4MjEwCisgICAgICAgICAgICAgICBCaXRtYXBzOiAxNworICAgICAgICAgICAgICAgUm9vdCBibG9jayA4MjExCisgICAgICAgSGFzaCBmdW5jdGlvbiAicjUiCisgICAgICAgQVRURU5USU9OOiBBTEwgREFUQSBXSUxMIEJFIExPU1QgT04gJy9kZXYvdWJkLzQnISAoeS9uKXkKKyAgICAgICBqb3VybmFsIHNpemUgODE5MiAoZnJvbSAxOCkKKyAgICAgICBJbml0aWFsaXppbmcgam91cm5hbCAtIDAlLi4uLjIwJS4uLi40MCUuLi4uNjAlLi4uLjgwJS4uLi4xMDAlCisgICAgICAgU3luY2luZy4uZG9uZS4KKworCisKKworICBOb3csIG1vdW50IGl0OgorCisKKyAgICAgICBVTUwjCisgICAgICAgbW91bnQgL2Rldi91YmQvNCAvbW50CisKKworCisKKyAgYW5kIHlvdSdyZSBpbiBidXNpbmVzcy4KKworCisKKworCisKKworCisKKyAgOQg5LgguICBICEhvCG9zCHN0CHQgZghmaQhpbAhsZQhlIGEIYWMIY2MIY2UIZXMIc3MIcworCisKKyAgSWYgeW91IHdhbnQgdG8gYWNjZXNzIGZpbGVzIG9uIHRoZSBob3N0IG1hY2hpbmUgZnJvbSBpbnNpZGUgVU1MLCB5b3UKKyAgY2FuIHRyZWF0IGl0IGFzIGEgc2VwYXJhdGUgbWFjaGluZSBhbmQgZWl0aGVyIG5mcyBtb3VudCBkaXJlY3RvcmllcworICBmcm9tIHRoZSBob3N0IG9yIGNvcHkgZmlsZXMgaW50byB0aGUgdmlydHVhbCBtYWNoaW5lIHdpdGggc2NwIG9yIHJjcC4KKyAgSG93ZXZlciwgc2luY2UgVU1MIGlzIHJ1bm5pbmcgb24gdGhlIHRoZSBob3N0LCBpdCBjYW4gYWNjZXNzIHRob3NlCisgIGZpbGVzIGp1c3QgbGlrZSBhbnkgb3RoZXIgcHJvY2VzcyBhbmQgbWFrZSB0aGVtIGF2YWlsYWJsZSBpbnNpZGUgdGhlCisgIHZpcnR1YWwgbWFjaGluZSB3aXRob3V0IG5lZWRpbmcgdG8gdXNlIHRoZSBuZXR3b3JrLgorCisKKyAgVGhpcyBpcyBub3cgcG9zc2libGUgd2l0aCB0aGUgaG9zdGZzIHZpcnR1YWwgZmlsZXN5c3RlbS4gIFdpdGggaXQsIHlvdQorICBjYW4gbW91bnQgYSBob3N0IGRpcmVjdG9yeSBpbnRvIHRoZSBVTUwgZmlsZXN5c3RlbSBhbmQgYWNjZXNzIHRoZQorICBmaWxlcyBjb250YWluZWQgaW4gaXQganVzdCBhcyB5b3Ugd291bGQgb24gdGhlIGhvc3QuCisKKworICA5CDkuCC4xCDEuCC4gIFUIVXMIc2kIaW4IbmcIZyBoCGhvCG9zCHN0CHRmCGZzCHMKKworICBUbyBiZWdpbiB3aXRoLCBtYWtlIHN1cmUgdGhhdCBob3N0ZnMgaXMgYXZhaWxhYmxlIGluc2lkZSB0aGUgdmlydHVhbAorICBtYWNoaW5lIHdpdGgKKworCisgICAgICAgVU1MIyBjYXQgL3Byb2MvZmlsZXN5c3RlbXMKKworCisKKyAgLiAgaG9zdGZzIHNob3VsZCBiZSBsaXN0ZWQuICBJZiBpdCdzIG5vdCwgZWl0aGVyIHJlYnVpbGQgdGhlIGtlcm5lbAorICB3aXRoIGhvc3RmcyBjb25maWd1cmVkIGludG8gaXQgb3IgbWFrZSBzdXJlIHRoYXQgaG9zdGZzIGlzIGJ1aWx0IGFzIGEKKyAgbW9kdWxlIGFuZCBhdmFpbGFibGUgaW5zaWRlIHRoZSB2aXJ0dWFsIG1hY2hpbmUsIGFuZCBpbnNtb2QgaXQuCisKKworICBOb3cgYWxsIHlvdSBuZWVkIHRvIGRvIGlzIHJ1biBtb3VudDoKKworCisgICAgICAgVU1MIyBtb3VudCBub25lIC9tbnQvaG9zdCAtdCBob3N0ZnMKKworCisKKworICB3aWxsIG1vdW50IHRoZSBob3N0J3MgLyBvbiB0aGUgdmlydHVhbCBtYWNoaW5lJ3MgL21udC9ob3N0LgorCisKKyAgSWYgeW91IGRvbid0IHdhbnQgdG8gbW91bnQgdGhlIGhvc3Qgcm9vdCBkaXJlY3RvcnksIHRoZW4geW91IGNhbgorICBzcGVjaWZ5IGEgc3ViZGlyZWN0b3J5IHRvIG1vdW50IHdpdGggdGhlIC1vIHN3aXRjaCB0byBtb3VudDoKKworCisgICAgICAgVU1MIyBtb3VudCBub25lIC9tbnQvaG9tZSAtdCBob3N0ZnMgLW8gL2hvbWUKKworCisKKworICB3aWxsIG1vdW50IHRoZSBob3N0cydzIC9ob21lIG9uIHRoZSB2aXJ0dWFsIG1hY2hpbmUncyAvbW50L2hvbWUuCisKKworCisgIDkIOS4ILjIIMi4ILiAgaAhobwhvcwhzdAh0ZghmcwhzIGEIYXMIcyB0CHRoCGhlCGUgcghybwhvbwhvdAh0IGYIZmkIaWwIbGUIZXMIc3kIeXMIc3QIdGUIZW0IbQorCisgIEl0J3MgcG9zc2libGUgdG8gYm9vdCBmcm9tIGEgZGlyZWN0b3J5IGhpZXJhcmNoeSBvbiB0aGUgaG9zdCB1c2luZworICBob3N0ZnMgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIHN0YW5kYXJkIGZpbGVzeXN0ZW0gaW4gYSBmaWxlLgorCisgIFRvIHN0YXJ0LCB5b3UgbmVlZCB0aGF0IGhpZXJhcmNoeS4gIFRoZSBlYXNpZXN0IHdheSBpcyB0byBsb29wIG1vdW50CisgIGFuIGV4aXN0aW5nIHJvb3RfZnMgZmlsZToKKworCisgICAgICAgaG9zdCMgIG1vdW50IHJvb3RfZnMgdW1sX3Jvb3RfZGlyIC1vIGxvb3AKKworCisKKworICBZb3UgbmVlZCB0byBjaGFuZ2UgdGhlIGZpbGVzeXN0ZW0gdHlwZSBvZiAvIGluIGV0Yy9mc3RhYiB0byBiZQorICAnaG9zdGZzJywgc28gdGhhdCBsaW5lIGxvb2tzIGxpa2UgdGhpczoKKworICAvZGV2L3ViZC8wICAgICAgIC8gICAgICAgIGhvc3RmcyAgICAgIGRlZmF1bHRzICAgICAgICAgIDEgICAxCisKKworCisKKyAgVGhlbiB5b3UgbmVlZCB0byBjaG93biB0byB5b3Vyc2VsZiBhbGwgdGhlIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5CisgIHRoYXQgYXJlIG93bmVkIGJ5IHJvb3QuICBUaGlzIHdvcmtlZCBmb3IgbWU6CisKKworICAgICAgIGhvc3QjICBmaW5kIC4gLXVpZCAwIC1leGVjIGNob3duIGpkaWtlIHt9IFw7CisKKworCisKKyAgTmV4dCwgbWFrZSBzdXJlIHRoYXQgeW91ciBVTUwga2VybmVsIGhhcyBob3N0ZnMgY29tcGlsZWQgaW4sIG5vdCBhcyBhCisgIG1vZHVsZS4gIFRoZW4gcnVuIFVNTCB3aXRoIHRoZSBib290IGRldmljZSBwb2ludGluZyBhdCB0aGF0IGRpcmVjdG9yeToKKworCisgICAgICAgIHViZDA9L3BhdGgvdG8vdW1sL3Jvb3QvZGlyZWN0b3J5CisKKworCisKKyAgVU1MIHNob3VsZCB0aGVuIGJvb3QgYXMgaXQgZG9lcyBub3JtYWxseS4KKworCisgIDkIOS4ILjMIMy4ILiAgQghCdQh1aQhpbAhsZAhkaQhpbghuZwhnIGgIaG8Ib3MIc3QIdGYIZnMIcworCisgIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGhvc3RmcyBiZWNhdXNlIGl0J3Mgbm90IGluIHlvdXIga2VybmVsLCB5b3UgaGF2ZQorICB0d28gY2hvaWNlczoKKworCisKKyAgKwhvICBDb21waWxpbmcgaG9zdGZzIGludG8gdGhlIGtlcm5lbDoKKworCisgICAgIFJlY29uZmlndXJlIHRoZSBrZXJuZWwgYW5kIHNldCB0aGUgJ0hvc3QgZmlsZXN5c3RlbScgb3B0aW9uIHVuZGVyCisKKworICArCG8gIENvbXBpbGluZyBob3N0ZnMgYXMgYSBtb2R1bGU6CisKKworICAgICBSZWNvbmZpZ3VyZSB0aGUga2VybmVsIGFuZCBzZXQgdGhlICdIb3N0IGZpbGVzeXN0ZW0nIG9wdGlvbiB1bmRlcgorICAgICBiZSBpbiBhcmNoL3VtL2ZzL2hvc3Rmcy9ob3N0ZnMuby4gIEluc3RhbGwgdGhhdCBpbgorICAgICAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9mcyBpbiB0aGUgdmlydHVhbCBtYWNoaW5lLCBib290IGl0IHVwLCBhbmQKKworCisgICAgICAgVU1MIyBpbnNtb2QgaG9zdGZzCisKKworCisKKworCisKKworCisKKworCisgIDEIMTAIMC4ILiAgVAhUaAhoZQhlIE0ITWEIYW4IbmEIYWcIZ2UIZW0IbWUIZW4IbnQIdCBDCENvCG9uCG5zCHNvCG9sCGxlCGUKKworCisKKyAgVGhlIFVNTCBtYW5hZ2VtZW50IGNvbnNvbGUgaXMgYSBsb3ctbGV2ZWwgaW50ZXJmYWNlIHRvIHRoZSBrZXJuZWwsCisgIHNvbWV3aGF0IGxpa2UgdGhlIGkzODYgU3lzUnEgaW50ZXJmYWNlLiAgU2luY2UgdGhlcmUgaXMgYSBmdWxsLWJsb3duCisgIG9wZXJhdGluZyBzeXN0ZW0gdW5kZXIgVU1MLCB0aGVyZSBpcyBtdWNoIGdyZWF0ZXIgZmxleGliaWxpdHkgcG9zc2libGUKKyAgdGhhbiB3aXRoIHRoZSBTeXNScSBtZWNoYW5pc20uCisKKworICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgdGhpbmdzIHlvdSBjYW4gZG8gd2l0aCB0aGUgbWNvbnNvbGUgaW50ZXJmYWNlOgorCisgICsIbyAgZ2V0IHRoZSBrZXJuZWwgdmVyc2lvbgorCisgICsIbyAgYWRkIGFuZCByZW1vdmUgZGV2aWNlcworCisgICsIbyAgaGFsdCBvciByZWJvb3QgdGhlIG1hY2hpbmUKKworICArCG8gIFNlbmQgU3lzUnEgY29tbWFuZHMKKworICArCG8gIFBhdXNlIGFuZCByZXN1bWUgdGhlIFVNTAorCisKKyAgWW91IG5lZWQgdGhlIG1jb25zb2xlIGNsaWVudCAodW1sX21jb25zb2xlKSB3aGljaCBpcyBwcmVzZW50IGluIENWUworICAoL3Rvb2xzL21jb25zb2xlKSBpbiAyLjQuNS05dW0gYW5kIGxhdGVyLCBhbmQgd2lsbCBiZSBpbiB0aGUgUlBNIGluCisgIDIuNC42LgorCisKKyAgWW91IGFsc28gbmVlZCBDT05GSUdfTUNPTlNPTEUgKHVuZGVyICdHZW5lcmFsIFNldHVwJykgZW5hYmxlZCBpbiBVTUwuCisgIFdoZW4geW91IGJvb3QgVU1MLCB5b3UnbGwgc2VlIGEgbGluZSBsaWtlOgorCisKKyAgICAgICBtY29uc29sZSBpbml0aWFsaXplZCBvbiAvaG9tZS9qZGlrZS8udW1sL3VtbE5KMzJ5TC9tY29uc29sZQorCisKKworCisgIElmIHlvdSBzcGVjaWZ5IGEgdW5pcXVlIG1hY2hpbmUgaWQgb25lIHRoZSBVTUwgY29tbWFuZCBsaW5lLCBpLmUuCisKKworICAgICAgICB1bWlkPWRlYmlhbgorCisKKworCisgIHlvdSdsbCBzZWUgdGhpcworCisKKyAgICAgICBtY29uc29sZSBpbml0aWFsaXplZCBvbiAvaG9tZS9qZGlrZS8udW1sL2RlYmlhbi9tY29uc29sZQorCisKKworCisgIFRoYXQgZmlsZSBpcyB0aGUgc29ja2V0IHRoYXQgdW1sX21jb25zb2xlIHdpbGwgdXNlIHRvIGNvbW11bmljYXRlIHdpdGgKKyAgVU1MLiAgUnVuIGl0IHdpdGggZWl0aGVyIHRoZSB1bWlkIG9yIHRoZSBmdWxsIHBhdGggYXMgaXRzIGFyZ3VtZW50OgorCisKKyAgICAgICBob3N0JSB1bWxfbWNvbnNvbGUgZGViaWFuCisKKworCisKKyAgb3IKKworCisgICAgICAgaG9zdCUgdW1sX21jb25zb2xlIC9ob21lL2pkaWtlLy51bWwvZGViaWFuL21jb25zb2xlCisKKworCisKKyAgWW91J2xsIGdldCBhIHByb21wdCwgYXQgd2hpY2ggeW91IGNhbiBydW4gb25lIG9mIHRoZXNlIGNvbW1hbmRzOgorCisgICsIbyAgdmVyc2lvbgorCisgICsIbyAgaGFsdAorCisgICsIbyAgcmVib290CisKKyAgKwhvICBjb25maWcKKworICArCG8gIHJlbW92ZQorCisgICsIbyAgc3lzcnEKKworICArCG8gIGhlbHAKKworICArCG8gIGNhZAorCisgICsIbyAgc3RvcAorCisgICsIbyAgZ28KKworCisgIDEIMTAIMC4ILjEIMS4ILiAgdgh2ZQhlcghycwhzaQhpbwhvbghuCisKKyAgVGhpcyB0YWtlcyBubyBhcmd1bWVudHMuICBJdCBwcmludHMgdGhlIFVNTCB2ZXJzaW9uLgorCisKKyAgICAgICAobWNvbnNvbGUpICB2ZXJzaW9uCisgICAgICAgT0sgTGludXggdXNlcm1vZGUgMi40LjUtOXVtICMxIFdlZCBKdW4gMjAgMjI6NDc6MDggRURUIDIwMDEgaTY4NgorCisKKworCisgIFRoZXJlIGFyZSBhIGNvdXBsZSBhY3R1YWwgdXNlcyBmb3IgdGhpcy4gIEl0J3MgYSBzaW1wbGUgbm8tb3Agd2hpY2gKKyAgY2FuIGJlIHVzZWQgdG8gY2hlY2sgdGhhdCBhIFVNTCBpcyBydW5uaW5nLiAgSXQncyBhbHNvIGEgd2F5IG9mCisgIHNlbmRpbmcgYW4gaW50ZXJydXB0IHRvIHRoZSBVTUwuICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwgb24gU01QCisgIGhvc3RzLCB3aGVyZSB0aGVyZSdzIGEgYnVnIHdoaWNoIGNhdXNlcyBzaWduYWxzIHRvIFVNTCB0byBiZSBsb3N0LAorICBvZnRlbiBjYXVzaW5nIGl0IHRvIGFwcGVhciB0byBoYW5nLiAgU2VuZGluZyBzdWNoIGEgVU1MIHRoZSBtY29uc29sZQorICB2ZXJzaW9uIGNvbW1hbmQgaXMgYSBnb29kIHdheSB0byAnd2FrZSBpdCB1cCcgYmVmb3JlIG5ldHdvcmtpbmcgaGFzCisgIGJlZW4gZW5hYmxlZCwgYXMgaXQgZG9lcyBub3QgZG8gYW55dGhpbmcgdG8gdGhlIGZ1bmN0aW9uIG9mIHRoZSBVTUwuCisKKworCisgIDEIMTAIMC4ILjIIMi4ILiAgaAhoYQhhbAhsdAh0IGEIYW4IbmQIZCByCHJlCGViCGJvCG9vCG90CHQKKworICBUaGVzZSB0YWtlIG5vIGFyZ3VtZW50cy4gIFRoZXkgc2h1dCB0aGUgbWFjaGluZSBkb3duIGltbWVkaWF0ZWx5LCB3aXRoCisgIG5vIHN5bmNpbmcgb2YgZGlza3MgYW5kIG5vIGNsZWFuIHNodXRkb3duIG9mIHVzZXJzcGFjZS4gIFNvLCB0aGV5IGFyZQorICBwcmV0dHkgY2xvc2UgdG8gY3Jhc2hpbmcgdGhlIG1hY2hpbmUuCisKKworICAgICAgIChtY29uc29sZSkgIGhhbHQKKyAgICAgICBPSworCisKKworCisKKworICAxCDEwCDAuCC4zCDMuCC4gIGMIY28Ib24IbmYIZmkIaWcIZworCisgICJjb25maWciIGFkZHMgYSBuZXcgZGV2aWNlIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUuICBDdXJyZW50bHkgdGhlIHViZAorICBhbmQgbmV0d29yayBkcml2ZXJzIHN1cHBvcnQgdGhpcy4gIEl0IHRha2VzIG9uZSBhcmd1bWVudCwgd2hpY2ggaXMgdGhlCisgIGRldmljZSB0byBhZGQsIHdpdGggdGhlIHNhbWUgc3ludGF4IGFzIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorCisKKworCisgIChtY29uc29sZSkKKyAgY29uZmlnIHViZDM9L2hvbWUvamRpa2UvaW5jb21pbmcvcm9vdHMvcm9vdF9mc19kZWJpYW4yMgorCisgIE9LCisgIChtY29uc29sZSkgIGNvbmZpZyBldGgxPW1jYXN0CisgIE9LCisKKworCisKKworCisgIDEIMTAIMC4ILjQINC4ILiAgcghyZQhlbQhtbwhvdgh2ZQhlCisKKyAgInJlbW92ZSIgZGVsZXRlcyBhIGRldmljZSBmcm9tIHRoZSBzeXN0ZW0uICBJdHMgYXJndW1lbnQgaXMganVzdCB0aGUKKyAgbmFtZSBvZiB0aGUgZGV2aWNlIHRvIGJlIHJlbW92ZWQuIFRoZSBkZXZpY2UgbXVzdCBiZSBpZGxlIGluIHdoYXRldmVyCisgIHNlbnNlIHRoZSBkcml2ZXIgY29uc2lkZXJzIG5lY2Vzc2FyeS4gIEluIHRoZSBjYXNlIG9mIHRoZSB1YmQgZHJpdmVyLAorICB0aGUgcmVtb3ZlZCBibG9jayBkZXZpY2UgbXVzdCBub3QgYmUgbW91bnRlZCwgc3dhcHBlZCBvbiwgb3Igb3RoZXJ3aXNlCisgIG9wZW4sIGFuZCBpbiB0aGUgY2FzZSBvZiB0aGUgbmV0d29yayBkcml2ZXIsIHRoZSBkZXZpY2UgbXVzdCBiZSBkb3duLgorCisKKyAgICAgICAobWNvbnNvbGUpICByZW1vdmUgdWJkMworICAgICAgIE9LCisgICAgICAgKG1jb25zb2xlKSAgcmVtb3ZlIGV0aDEKKyAgICAgICBPSworCisKKworCisKKworICAxCDEwCDAuCC41CDUuCC4gIHMIc3kIeXMIc3IIcnEIcQorCisgIFRoaXMgdGFrZXMgb25lIGFyZ3VtZW50LCB3aGljaCBpcyBhIHNpbmdsZSBsZXR0ZXIuICBJdCBjYWxscyB0aGUKKyAgZ2VuZXJpYyBrZXJuZWwncyBTeXNScSBkcml2ZXIsIHdoaWNoIGRvZXMgd2hhdGV2ZXIgaXMgY2FsbGVkIGZvciBieQorICB0aGF0IGFyZ3VtZW50LiAgU2VlIHRoZSBTeXNScSBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vc3lzcnEudHh0CisgIGluIHlvdXIgZmF2b3JpdGUga2VybmVsIHRyZWUgdG8gc2VlIHdoYXQgbGV0dGVycyBhcmUgdmFsaWQgYW5kIHdoYXQKKyAgdGhleSBkby4KKworCisKKyAgMQgxMAgwLgguNgg2LgguICBoCGhlCGVsCGxwCHAKKworICAiaGVscCIgcmV0dXJucyBhIHN0cmluZyBsaXN0aW5nIHRoZSB2YWxpZCBjb21tYW5kcyBhbmQgd2hhdCBlYWNoIG9uZQorICBkb2VzLgorCisKKworICAxCDEwCDAuCC43CDcuCC4gIGMIY2EIYWQIZAorCisgIFRoaXMgaW52b2tlcyB0aGUgQ3RsLUFsdC1EZWwgYWN0aW9uIG9uIGluaXQuICBXaGF0IGV4YWN0bHkgdGhpcyBlbmRzCisgIHVwIGRvaW5nIGlzIHVwIHRvIC9ldGMvaW5pdHRhYi4gIE5vcm1hbGx5LCBpdCByZWJvb3RzIHRoZSBtYWNoaW5lLgorICBXaXRoIFVNTCwgdGhpcyBpcyB1c3VhbGx5IG5vdCBkZXNpcmVkLCBzbyBpZiBhIGhhbHQgd291bGQgYmUgYmV0dGVyLAorICB0aGVuIGZpbmQgdGhlIHNlY3Rpb24gb2YgaW5pdHRhYiB0aGF0IGxvb2tzIGxpa2UgdGhpcworCisKKyAgICAgICAjIFdoYXQgdG8gZG8gd2hlbiBDVFJMLUFMVC1ERUwgaXMgcHJlc3NlZC4KKyAgICAgICBjYToxMjM0NTpjdHJsYWx0ZGVsOi9zYmluL3NodXRkb3duIC10MSAtYSAtciBub3cKKworCisKKworICBhbmQgY2hhbmdlIHRoZSBjb21tYW5kIHRvIGhhbHQuCisKKworCisgIDEIMTAIMC4ILjgIOC4ILiAgcwhzdAh0bwhvcAhwCisKKyAgVGhpcyBwdXRzIHRoZSBVTUwgaW4gYSBsb29wIHJlYWRpbmcgbWNvbnNvbGUgcmVxdWVzdHMgdW50aWwgYSAnZ28nCisgIG1jb25zb2xlIGNvbW1hbmQgaXMgcmVjZWl2ZWQuIFRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIG1ha2luZyBiYWNrdXBzCisgIG9mIFVNTCBmaWxlc3lzdGVtcywgYXMgdGhlIFVNTCBjYW4gYmUgc3RvcHBlZCwgdGhlbiBzeW5jZWQgdmlhICdzeXNycQorICBzJywgc28gdGhhdCBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gdG8gdGhlIGZpbGVzeXN0ZW0uIFlvdSBjYW4gdGhlbiBjb3B5CisgIHRoZSBmaWxlc3lzdGVtIGFuZCB0aGVuIHNlbmQgdGhlIFVNTCAnZ28nIHZpYSBtY29uc29sZS4KKworCisgIE5vdGUgdGhhdCBhIFVNTCBydW5uaW5nIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUgd2lsbCBoYXZlIHByb2JsZW1zCisgIGFmdGVyIHlvdSBzZW5kIHRoZSAnc3RvcCcgY29tbWFuZCwgYXMgb25seSBvbmUgQ1BVIHdpbGwgYmUgaGVsZCBpbiBhCisgIG1jb25zb2xlIGxvb3AgYW5kIGFsbCBvdGhlcnMgd2lsbCBjb250aW51ZSBhcyBub3JtYWwuICBUaGlzIGlzIGEgYnVnLAorICBhbmQgd2lsbCBiZSBmaXhlZC4KKworCisKKyAgMQgxMAgwLgguOQg5LgguICBnCGdvCG8KKworICBUaGlzIHJlc3VtZXMgYSBVTUwgYWZ0ZXIgYmVpbmcgcGF1c2VkIGJ5IGEgJ3N0b3AnIGNvbW1hbmQuIE5vdGUgdGhhdAorICB3aGVuIHRoZSBVTUwgaGFzIHJlc3VtZWQsIFRDUCBjb25uZWN0aW9ucyBtYXkgaGF2ZSB0aW1lZCBvdXQgYW5kIGlmCisgIHRoZSBVTUwgaXMgcGF1c2VkIGZvciBhIGxvbmcgcGVyaW9kIG9mIHRpbWUsIGNyb25kIG1pZ2h0IGdvIGEgbGl0dGxlCisgIGNyYXp5LCBydW5uaW5nIGFsbCB0aGUgam9icyBpdCBkaWRuJ3QgZG8gZWFybGllci4KKworCisKKworCisKKworCisgIDEIMTEIMS4ILiAgSwhLZQhlcghybghuZQhlbAhsIGQIZGUIZWIIYnUIdWcIZ2cIZ2kIaW4IbmcIZworCisKKyAgTghObwhvdAh0ZQhlOgg6IFRoZSBpbnRlcmZhY2UgdGhhdCBtYWtlcyBkZWJ1Z2dpbmcsIGFzIGRlc2NyaWJlZCBoZXJlLCBwb3NzaWJsZQorICBpcyBwcmVzZW50IGluIDIuNC4wLXRlc3Q2IGtlcm5lbHMgYW5kIGxhdGVyLgorCisKKyAgU2luY2UgdGhlIHVzZXItbW9kZSBrZXJuZWwgcnVucyBhcyBhIG5vcm1hbCBMaW51eCBwcm9jZXNzLCBpdCBpcworICBwb3NzaWJsZSB0byBkZWJ1ZyBpdCB3aXRoIGdkYiBhbG1vc3QgbGlrZSBhbnkgb3RoZXIgcHJvY2Vzcy4gIEl0IGlzCisgIHNsaWdodGx5IGRpZmZlcmVudCBiZWNhdXNlIHRoZSBrZXJuZWwncyB0aHJlYWRzIGFyZSBhbHJlYWR5IGJlaW5nCisgIHB0cmFjZWQgZm9yIHN5c3RlbSBjYWxsIGludGVyY2VwdGlvbiwgc28gZ2RiIGNhbid0IHB0cmFjZSB0aGVtLgorICBIb3dldmVyLCBhIG1lY2hhbmlzbSBoYXMgYmVlbiBhZGRlZCB0byB3b3JrIGFyb3VuZCB0aGF0IHByb2JsZW0uCisKKworICBJbiBvcmRlciB0byBkZWJ1ZyB0aGUga2VybmVsLCB5b3UgbmVlZCBidWlsZCBpdCBmcm9tIHNvdXJjZS4gIFNlZQorICBgYENvbXBpbGluZyB0aGUga2VybmVsIGFuZCBtb2R1bGVzJycgIGZvciBpbmZvcm1hdGlvbiBvbiBkb2luZyB0aGF0LgorICBNYWtlIHN1cmUgdGhhdCB5b3UgZW5hYmxlIENPTkZJR19ERUJVR1NZTSBhbmQgQ09ORklHX1BUX1BST1hZIGR1cmluZworICB0aGUgY29uZmlnLiAgVGhlc2Ugd2lsbCBjb21waWxlIHRoZSBrZXJuZWwgd2l0aCAtZywgYW5kIGVuYWJsZSB0aGUKKyAgcHRyYWNlIHByb3h5IHNvIHRoYXQgZ2RiIHdvcmtzIHdpdGggVU1MLCByZXNwZWN0aXZlbHkuCisKKworCisKKyAgMQgxMQgxLgguMQgxLgguICBTCFN0CHRhCGFyCHJ0CHRpCGluCG5nCGcgdAh0aAhoZQhlIGsIa2UIZXIIcm4IbmUIZWwIbCB1CHVuCG5kCGRlCGVyCHIgZwhnZAhkYghiCisKKyAgWW91IGNhbiBoYXZlIHRoZSBrZXJuZWwgcnVubmluZyB1bmRlciB0aGUgY29udHJvbCBvZiBnZGIgZnJvbSB0aGUKKyAgYmVnaW5uaW5nIGJ5IHB1dHRpbmcgJ2RlYnVnJyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgWW91IHdpbGwgZ2V0IGFuCisgIHh0ZXJtIHdpdGggZ2RiIHJ1bm5pbmcgaW5zaWRlIGl0LiAgVGhlIGtlcm5lbCB3aWxsIHNlbmQgc29tZSBjb21tYW5kcworICB0byBnZGIgd2hpY2ggd2lsbCBsZWF2ZSBpdCBzdG9wcGVkIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3RhcnRfa2VybmVsLgorICBBdCB0aGlzIHBvaW50LCB5b3UgY2FuIGdldCB0aGluZ3MgZ29pbmcgd2l0aCAnbmV4dCcsICdzdGVwJywgb3IKKyAgJ2NvbnQnLgorCisKKyAgVGhlcmUgaXMgYSB0cmFuc2NyaXB0IG9mIGEgZGVidWdnaW5nIHNlc3Npb24gIGhlcmUgPGRlYnVnLQorICBzZXNzaW9uLmh0bWw+ICwgd2l0aCBicmVha3BvaW50cyBiZWluZyBzZXQgaW4gdGhlIHNjaGVkdWxlciBhbmQgaW4gYW4KKyAgaW50ZXJydXB0IGhhbmRsZXIuCisgIDEIMTEIMS4ILjIIMi4ILiAgRQhFeAh4YQhhbQhtaQhpbghuaQhpbghuZwhnIHMIc2wIbGUIZWUIZXAIcGkIaW4IbmcIZyBwCHByCHJvCG9jCGNlCGVzCHNzCHNlCGVzCHMKKworICBOb3QgZXZlcnkgYnVnIGlzIGV2aWRlbnQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MuICBTb21ldGltZXMsCisgIHByb2Nlc3NlcyBoYW5nIGluIHRoZSBrZXJuZWwgd2hlbiB0aGV5IHNob3VsZG4ndCBiZWNhdXNlIHRoZXkndmUKKyAgZGVhZGxvY2tlZCBvbiBhIHNlbWFwaG9yZSBvciBzb21ldGhpbmcgc2ltaWxhci4gIEluIHRoaXMgY2FzZSwgd2hlbgorICB5b3UgXkMgZ2RiIGFuZCBnZXQgYSBiYWNrdHJhY2UsIHlvdSB3aWxsIHNlZSB0aGUgaWRsZSB0aHJlYWQsIHdoaWNoCisgIGlzbid0IHZlcnkgcmVsZXZhbnQuCisKKworICBXaGF0IHlvdSB3YW50IGlzIHRoZSBzdGFjayBvZiB3aGF0ZXZlciBwcm9jZXNzIGlzIHNsZWVwaW5nIHdoZW4gaXQKKyAgc2hvdWxkbid0IGJlLiAgWW91IG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwcm9jZXNzIHRoYXQgaXMsIHdoaWNoIGlzCisgIGdlbmVyYWxseSBmYWlybHkgZWFzeS4gIFRoZW4geW91IG5lZWQgdG8gZ2V0IGl0cyBob3N0IHByb2Nlc3MgaWQsCisgIHdoaWNoIHlvdSBjYW4gZG8gZWl0aGVyIGJ5IGxvb2tpbmcgYXQgcHMgb24gdGhlIGhvc3Qgb3IgYXQKKyAgdGFzay50aHJlYWQuZXh0ZXJuX3BpZCBpbiBnZGIuCisKKworICBOb3cgd2hhdCB5b3UgZG8gaXMgdGhpczoKKworICArCG8gIGRldGFjaCBmcm9tIHRoZSBjdXJyZW50IHRocmVhZAorCisKKyAgICAgICAoVU1MIGdkYikgIGRldAorCisKKworCisKKyAgKwhvICBhdHRhY2ggdG8gdGhlIHRocmVhZCB5b3UgYXJlIGludGVyZXN0ZWQgaW4KKworCisgICAgICAgKFVNTCBnZGIpICBhdHQgPGhvc3QgcGlkPgorCisKKworCisKKyAgKwhvICBsb29rIGF0IGl0cyBzdGFjayBhbmQgYW55dGhpbmcgZWxzZSBvZiBpbnRlcmVzdAorCisKKyAgICAgICAoVU1MIGdkYikgIGJ0CisKKworCisKKyAgTm90ZSB0aGF0IHlvdSBjYW4ndCBkbyBhbnl0aGluZyBhdCB0aGlzIHBvaW50IHRoYXQgcmVxdWlyZXMgdGhhdCBhCisgIHByb2Nlc3MgZXhlY3V0ZSwgZS5nLiBjYWxsaW5nIGEgZnVuY3Rpb24KKworICArCG8gIHdoZW4geW91J3JlIGRvbmUgbG9va2luZyBhdCB0aGF0IHByb2Nlc3MsIHJlYXR0YWNoIHRvIHRoZSBjdXJyZW50CisgICAgIHRocmVhZCBhbmQgY29udGludWUgaXQKKworCisgICAgICAgKFVNTCBnZGIpCisgICAgICAgYXR0IDEKKworCisKKworCisKKyAgICAgICAoVU1MIGdkYikKKyAgICAgICBjCisKKworCisKKyAgSGVyZSwgc3BlY2lmeWluZyBhbnkgcGlkIHdoaWNoIGlzIG5vdCB0aGUgcHJvY2VzcyBpZCBvZiBhIFVNTCB0aHJlYWQKKyAgd2lsbCBjYXVzZSBnZGIgdG8gcmVhdHRhY2ggdG8gdGhlIGN1cnJlbnQgdGhyZWFkLiAgSSBjb21tb25seSB1c2UgMSwKKyAgYnV0IGFueSBvdGhlciBpbnZhbGlkIHBpZCB3b3VsZCB3b3JrLgorCisKKworICAxCDExCDEuCC4zCDMuCC4gIFIIUnUIdW4Ibm4IbmkIaW4IbmcIZyBkCGRkCGRkCGQgbwhvbghuIFUIVU0ITUwITAorCisgIGRkZCB3b3JrcyBvbiBVTUwsIGJ1dCByZXF1aXJlcyBhIHNwZWNpYWwga2x1ZGdlLiAgVGhlIHByb2Nlc3MgZ29lcworICBsaWtlIHRoaXM6CisKKyAgKwhvICBTdGFydCBkZGQKKworCisgICAgICAgaG9zdCUgZGRkIGxpbnV4CisKKworCisKKworICArCG8gIFdpdGggcHMsIGdldCB0aGUgcGlkIG9mIHRoZSBnZGIgdGhhdCBkZGQgc3RhcnRlZC4gIFlvdSBjYW4gYXNrIHRoZQorICAgICBnZGIgdG8gdGVsbCB5b3UsIGJ1dCBmb3Igc29tZSByZWFzb24gdGhhdCBjb25mdXNlcyB0aGluZ3MgYW5kCisgICAgIGNhdXNlcyBhIGhhbmcuCisKKyAgKwhvICBydW4gVU1MIHdpdGggJ2RlYnVnPXBhcmVudCBnZGItcGlkPTxwaWQ+JyBhZGRlZCB0byB0aGUgY29tbWFuZCBsaW5lCisgICAgIC0gaXQgd2lsbCBqdXN0IHNpdCB0aGVyZSBhZnRlciB5b3UgaGl0IHJldHVybgorCisgICsIbyAgdHlwZSAnYXR0IDEnIHRvIHRoZSBkZGQgZ2RiIGFuZCB5b3Ugd2lsbCBzZWUgc29tZXRoaW5nIGxpa2UKKworCisgICAgICAgMHhhMDEzZGM1MSBpbiBfX2tpbGwgKCkKKworCisgICAgICAgKGdkYikKKworCisKKworCisgICsIbyAgQXQgdGhpcyBwb2ludCwgdHlwZSAnYycsIFVNTCB3aWxsIGJvb3QgdXAsIGFuZCB5b3UgY2FuIHVzZSBkZGQganVzdAorICAgICBhcyB5b3UgZG8gb24gYW55IG90aGVyIHByb2Nlc3MuCisKKworCisgIDEIMTEIMS4ILjQINC4ILiAgRAhEZQhlYghidQh1ZwhnZwhnaQhpbghuZwhnIG0IbW8Ib2QIZHUIdWwIbGUIZXMIcworCisgIGdkYiBoYXMgc3VwcG9ydCBmb3IgZGVidWdnaW5nIGNvZGUgd2hpY2ggaXMgZHluYW1pY2FsbHkgbG9hZGVkIGludG8KKyAgdGhlIHByb2Nlc3MuICBUaGlzIHN1cHBvcnQgaXMgd2hhdCBpcyBuZWVkZWQgdG8gZGVidWcga2VybmVsIG1vZHVsZXMKKyAgdW5kZXIgVU1MLgorCisKKyAgVXNpbmcgdGhhdCBzdXBwb3J0IGlzIHNvbWV3aGF0IGNvbXBsaWNhdGVkLiAgWW91IGhhdmUgdG8gdGVsbCBnZGIgd2hhdAorICBvYmplY3QgZmlsZSB5b3UganVzdCBsb2FkZWQgaW50byBVTUwgYW5kIHdoZXJlIGluIG1lbW9yeSBpdCBpcy4gIFRoZW4sCisgIGl0IGNhbiByZWFkIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBmaWd1cmUgb3V0IHdoZXJlIGFsbCB0aGUgc3ltYm9scyBhcmUKKyAgZnJvbSB0aGUgbG9hZCBhZGRyZXNzIHRoYXQgeW91IHByb3ZpZGVkLiAgSXQgZ2V0cyBtb3JlIGludGVyZXN0aW5nCisgIHdoZW4geW91IGxvYWQgdGhlIG1vZHVsZSBhZ2FpbiAoaS5lLiBhZnRlciBhbiBybW1vZCkuICBZb3UgaGF2ZSB0bworICB0ZWxsIGdkYiB0byBmb3JnZXQgYWJvdXQgYWxsIGl0cyBzeW1ib2xzLCBpbmNsdWRpbmcgdGhlIG1haW4gVU1MIG9uZXMKKyAgZm9yIHNvbWUgcmVhc29uLCB0aGVuIGxvYWQgdGhlbiBhbGwgYmFjayBpbiBhZ2Fpbi4KKworCisgIFRoZXJlJ3MgYW4gZWFzeSB3YXkgYW5kIGEgaGFyZCB3YXkgdG8gZG8gdGhpcy4gIFRoZSBlYXN5IHdheSBpcyB0byB1c2UKKyAgdGhlIHVtbGdkYiBleHBlY3Qgc2NyaXB0IHdyaXR0ZW4gYnkgQ2hhbmRhbiBLdWRpZ2UuICBJdCBiYXNpY2FsbHkKKyAgYXV0b21hdGVzIHRoZSBwcm9jZXNzIGZvciB5b3UuCisKKworICBGaXJzdCwgeW91IG11c3QgdGVsbCBpdCB3aGVyZSB5b3VyIG1vZHVsZXMgYXJlLiAgVGhlcmUgaXMgYSBsaXN0IGluCisgIHRoZSBzY3JpcHQgdGhhdCBsb29rcyBsaWtlIHRoaXM6CisgICAgICAgc2V0IE1PRFVMRV9QQVRIUyB7CisgICAgICAgImZhdCIgIi91c3Ivc3JjL3VtbC9saW51eC0yLjQuMTgvZnMvZmF0L2ZhdC5vIgorICAgICAgICJpc29mcyIgIi91c3Ivc3JjL3VtbC9saW51eC0yLjQuMTgvZnMvaXNvZnMvaXNvZnMubyIKKyAgICAgICAibWluaXgiICIvdXNyL3NyYy91bWwvbGludXgtMi40LjE4L2ZzL21pbml4L21pbml4Lm8iCisgICAgICAgfQorCisKKworCisgIFlvdSBjaGFuZ2UgdGhhdCB0byBsaXN0IHRoZSBuYW1lcyBhbmQgcGF0aHMgb2YgdGhlIG1vZHVsZXMgdGhhdCB5b3UKKyAgYXJlIGdvaW5nIHRvIGRlYnVnLiAgVGhlbiB5b3UgcnVuIGl0IGZyb20gdGhlIHRvcGxldmVsIGRpcmVjdG9yeSBvZgorICB5b3VyIFVNTCBwb29sIGFuZCBpdCBiYXNpY2FsbHkgdGVsbHMgeW91IHdoYXQgdG8gZG86CisKKworCisKKyAgICAgICAgICAgICAgICAgICAqKioqKioqKiBHREIgcGlkIGlzIDIxOTAzICoqKioqKioqCisgICAgICAgU3RhcnQgVU1MIGFzOiAuL2xpbnV4IDxrZXJuZWwgc3dpdGNoZXM+IGRlYnVnIGdkYi1waWQ9MjE5MDMKKworCisKKyAgICAgICBHTlUgZ2RiIDUuMHJoLTUgUmVkIEhhdCBMaW51eCA3LjEKKyAgICAgICBDb3B5cmlnaHQgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICBHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlCisgICAgICAgd2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVzIG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAgICAgICBUeXBlICJzaG93IGNvcHlpbmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4KKyAgICAgICBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5IiBmb3IgZGV0YWlscy4KKyAgICAgICBUaGlzIEdEQiB3YXMgY29uZmlndXJlZCBhcyAiaTM4Ni1yZWRoYXQtbGludXgiLi4uCisgICAgICAgKGdkYikgYiBzeXNfaW5pdF9tb2R1bGUKKyAgICAgICBCcmVha3BvaW50IDEgYXQgMHhhMDAxMTkyMzogZmlsZSBtb2R1bGUuYywgbGluZSAzNDkuCisgICAgICAgKGdkYikgYXR0IDEKKworCisKKworICBBZnRlciB5b3UgcnVuIFVNTCBhbmQgaXQgc2l0cyB0aGVyZSBkb2luZyBub3RoaW5nLCB5b3UgaGl0IHJldHVybiBhdAorICB0aGUgJ2F0dCAxJyBhbmQgY29udGludWUgaXQ6CisKKworICAgICAgIEF0dGFjaGluZyB0byBwcm9ncmFtOiAvaG9tZS9qZGlrZS9saW51eC8yLjQvdW0vLi9saW51eCwgcHJvY2VzcyAxCisgICAgICAgMHhhMDBmNDIyMSBpbiBfX2tpbGwgKCkKKyAgICAgICAoVU1MIGdkYikgIGMKKyAgICAgICBDb250aW51aW5nLgorCisKKworCisgIEF0IHRoaXMgcG9pbnQsIHlvdSBkZWJ1ZyBub3JtYWxseS4gIFdoZW4geW91IGluc21vZCBzb21ldGhpbmcsIHRoZQorICBleHBlY3QgbWFnaWMgd2lsbCBraWNrIGluIGFuZCB5b3UnbGwgc2VlIHNvbWV0aGluZyBsaWtlOgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICoqKiBNb2R1bGUgaG9zdGZzIGxvYWRlZCAqKioKKyAgQnJlYWtwb2ludCAxLCBzeXNfaW5pdF9tb2R1bGUgKG5hbWVfdXNlcj0weDgwNWFiYjAgImhvc3RmcyIsCisgICAgICBtb2RfdXNlcj0weDgwNzBlMDApIGF0IG1vZHVsZS5jOjM0OQorICAzNDkgICAgICAgICAgICAgY2hhciAqbmFtZSwgKm5fbmFtZSwgKm5hbWVfdG1wID0gTlVMTDsKKyAgKFVNTCBnZGIpICBmaW5pc2gKKyAgUnVuIHRpbGwgZXhpdCBmcm9tICMwICBzeXNfaW5pdF9tb2R1bGUgKG5hbWVfdXNlcj0weDgwNWFiYjAgImhvc3RmcyIsCisgICAgICBtb2RfdXNlcj0weDgwNzBlMDApIGF0IG1vZHVsZS5jOjM0OQorICAweGEwMGUyZTIzIGluIGV4ZWN1dGVfc3lzY2FsbCAocj0weGE4MTQwMjg0KSBhdCBzeXNjYWxsX2tlcm4uYzo0MTEKKyAgNDExICAgICAgICAgICAgIGVsc2UgcmVzID0gRVhFQ1VURV9TWVNDQUxMKHN5c2NhbGwsIHJlZ3MpOworICBWYWx1ZSByZXR1cm5lZCBpcyAkMSA9IDAKKyAgKFVNTCBnZGIpCisgIHAveCAoaW50KW1vZHVsZV9saXN0ICsgbW9kdWxlX2xpc3QtPnNpemVfb2Zfc3RydWN0CisKKyAgJDIgPSAweGE5MDIxMDU0CisgIChVTUwgZ2RiKSAgc3ltYm9sLWZpbGUgLi9saW51eAorICBMb2FkIG5ldyBzeW1ib2wgdGFibGUgZnJvbSAiLi9saW51eCI/ICh5IG9yIG4pIHkKKyAgUmVhZGluZyBzeW1ib2xzIGZyb20gLi9saW51eC4uLgorICBkb25lLgorICAoVU1MIGdkYikKKyAgYWRkLXN5bWJvbC1maWxlIC9ob21lL2pkaWtlL2xpbnV4LzIuNC91bS9hcmNoL3VtL2ZzL2hvc3Rmcy9ob3N0ZnMubyAweGE5MDIxMDU0CisKKyAgYWRkIHN5bWJvbCB0YWJsZSBmcm9tIGZpbGUgIi9ob21lL2pkaWtlL2xpbnV4LzIuNC91bS9hcmNoL3VtL2ZzL2hvc3Rmcy9ob3N0ZnMubyIgYXQKKyAgICAgICAgICAudGV4dF9hZGRyID0gMHhhOTAyMTA1NAorICAgKHkgb3IgbikgeQorCisgIFJlYWRpbmcgc3ltYm9scyBmcm9tIC9ob21lL2pkaWtlL2xpbnV4LzIuNC91bS9hcmNoL3VtL2ZzL2hvc3Rmcy9ob3N0ZnMuby4uLgorICBkb25lLgorICAoVU1MIGdkYikgIHAgKm1vZHVsZV9saXN0CisgICQxID0ge3NpemVfb2Zfc3RydWN0ID0gODQsIG5leHQgPSAweGEwMTc4NzIwLCBuYW1lID0gMHhhOTAyMmRlMCAiaG9zdGZzIiwKKyAgICBzaXplID0gOTAxNiwgdWMgPSB7dXNlY291bnQgPSB7Y291bnRlciA9IDB9LCBwYWQgPSAwfSwgZmxhZ3MgPSAxLAorICAgIG5zeW1zID0gNTcsIG5kZXBzID0gMCwgc3ltcyA9IDB4YTkwMjMxNzAsIGRlcHMgPSAweDAsIHJlZnMgPSAweDAsCisgICAgaW5pdCA9IDB4YTkwMjIxZjAgPGluaXRfaG9zdGZzPiwgY2xlYW51cCA9IDB4YTkwMjIyMmMgPGV4aXRfaG9zdGZzPiwKKyAgICBleF90YWJsZV9zdGFydCA9IDB4MCwgZXhfdGFibGVfZW5kID0gMHgwLCBwZXJzaXN0X3N0YXJ0ID0gMHgwLAorICAgIHBlcnNpc3RfZW5kID0gMHgwLCBjYW5fdW5sb2FkID0gMCwgcnVuc2l6ZSA9IDAsIGthbGxzeW1zX3N0YXJ0ID0gMHgwLAorICAgIGthbGxzeW1zX2VuZCA9IDB4MCwKKyAgICBhcmNoZGF0YV9zdGFydCA9IDB4MWI4NTUgPEFkZHJlc3MgMHgxYjg1NSBvdXQgb2YgYm91bmRzPiwKKyAgICBhcmNoZGF0YV9lbmQgPSAweGU1ODkwMDAwIDxBZGRyZXNzIDB4ZTU4OTAwMDAgb3V0IG9mIGJvdW5kcz4sCisgICAga2VybmVsX2RhdGEgPSAweGY2ODljMzVkIDxBZGRyZXNzIDB4ZjY4OWMzNWQgb3V0IG9mIGJvdW5kcz59CisgID4+IEZpbmlzaGVkIGxvYWRpbmcgc3ltYm9scyBmb3IgaG9zdGZzIC4uLgorCisKKworCisgIFRoYXQncyB0aGUgZWFzeSB3YXkuICBJdCdzIGhpZ2hseSByZWNvbW1lbmRlZC4gIFRoZSBoYXJkIHdheSBpcworICBkZXNjcmliZWQgYmVsb3cgaW4gY2FzZSB5b3UncmUgaW50ZXJlc3RlZCBpbiB3aGF0J3MgZ29pbmcgb24uCisKKworICBCb290IHRoZSBrZXJuZWwgdW5kZXIgdGhlIGRlYnVnZ2VyIGFuZCBsb2FkIHRoZSBtb2R1bGUgd2l0aCBpbnNtb2Qgb3IKKyAgbW9kcHJvYmUuICBXaXRoIGdkYiwgZG86CisKKworICAgICAgIChVTUwgZ2RiKSAgcCBtb2R1bGVfbGlzdAorCisKKworCisgIFRoaXMgaXMgYSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4gbG9hZGVkIGludG8gdGhlIGtlcm5lbCwgd2l0aAorICB0aGUgbW9zdCByZWNlbnRseSBsb2FkZWQgbW9kdWxlIGZpcnN0LiAgTm9ybWFsbHksIHRoZSBtb2R1bGUgeW91IHdhbnQKKyAgaXMgYXQgbW9kdWxlX2xpc3QuICBJZiBpdCdzIG5vdCwgd2FsayBkb3duIHRoZSBuZXh0IGxpbmtzLCBsb29raW5nIGF0CisgIHRoZSBuYW1lIGZpZWxkcyB1bnRpbCBmaW5kIHRoZSBtb2R1bGUgeW91IHdhbnQgdG8gZGVidWcuICBUYWtlIHRoZQorICBhZGRyZXNzIG9mIHRoYXQgc3RydWN0dXJlLCBhbmQgYWRkIG1vZHVsZS5zaXplX29mX3N0cnVjdCAod2hpY2ggaW4KKyAgMi40LjEwIGtlcm5lbHMgaXMgOTYgKDB4NjApKSB0byBpdC4gIEdkYiBjYW4gbWFrZSB0aGlzIGhhcmQgYWRkaXRpb24KKyAgZm9yIHlvdSA6LSk6CisKKworCisgIChVTUwgZ2RiKQorICBwcmludGYgIiUjeFxuIiwgKGludCltb2R1bGVfbGlzdCBtb2R1bGVfbGlzdC0+c2l6ZV9vZl9zdHJ1Y3QKKworCisKKworICBUaGUgb2Zmc2V0IGZyb20gdGhlIG1vZHVsZSBzdGFydCBvY2Nhc2lvbmFsbHkgY2hhbmdlcyAoYmVmb3JlIDIuNC4wLAorICBpdCB3YXMgbW9kdWxlLnNpemVfb2Zfc3RydWN0ICsgNCksIHNvIGl0J3MgYSBnb29kIGlkZWEgdG8gY2hlY2sgdGhlCisgIGluaXQgYW5kIGNsZWFudXAgYWRkcmVzc2VzIG9uY2UgaW4gYSB3aGlsZSwgYXMgZGVzY3JpYmUgYmVsb3cuICBOb3cKKyAgZG86CisKKworICAgICAgIChVTUwgZ2RiKQorICAgICAgIGFkZC1zeW1ib2wtZmlsZSAvcGF0aC90by9tb2R1bGUvb24vaG9zdCB0aGF0X2FkZHJlc3MKKworCisKKworICBUZWxsIGdkYiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXQsIGFuZCB5b3UncmUgaW4gYnVzaW5lc3MuCisKKworICBJZiB0aGVyZSdzIGFueSBkb3VidCB0aGF0IHlvdSBnb3QgdGhlIG9mZnNldCByaWdodCwgbGlrZSBicmVha3BvaW50cworICBhcHBlYXIgbm90IHRvIHdvcmssIG9yIHRoZXkncmUgYXBwZWFyaW5nIGluIHRoZSB3cm9uZyBwbGFjZSwgeW91IGNhbgorICBjaGVjayBpdCBieSBsb29raW5nIGF0IHRoZSBtb2R1bGUgc3RydWN0dXJlLiAgVGhlIGluaXQgYW5kIGNsZWFudXAKKyAgZmllbGRzIHNob3VsZCBsb29rIGxpa2U6CisKKworICAgICAgIGluaXQgPSAweDU4ODA2NmIwIDxpbml0X2hvc3Rmcz4sIGNsZWFudXAgPSAweDU4ODA2NmMwIDxleGl0X2hvc3Rmcz4KKworCisKKworICB3aXRoIG5vIG9mZnNldHMgb24gdGhlIHN5bWJvbCBuYW1lcy4gIElmIHRoZSBuYW1lcyBhcmUgcmlnaHQsIGJ1dCB0aGV5CisgIGFyZSBvZmZzZXQsIHRoZW4gdGhlIG9mZnNldCB0ZWxscyB5b3UgaG93IG11Y2ggeW91IG5lZWQgdG8gYWRkIHRvIHRoZQorICBhZGRyZXNzIHlvdSBnYXZlIHRvIGFkZC1zeW1ib2wtZmlsZS4KKworCisgIFdoZW4geW91IHdhbnQgdG8gbG9hZCBpbiBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUsIHlvdSBuZWVkIHRvIGdldAorICBnZGIgdG8gZm9yZ2V0IGFib3V0IHRoZSBvbGQgb25lLiAgVGhlIG9ubHkgd2F5IEkndmUgZm91bmQgdG8gZG8gdGhhdAorICBpcyB0byB0ZWxsIGdkYiB0byBmb3JnZXQgYWJvdXQgYWxsIHN5bWJvbHMgdGhhdCBpdCBrbm93cyBhYm91dDoKKworCisgICAgICAgKFVNTCBnZGIpICBzeW1ib2wtZmlsZQorCisKKworCisgIFRoZW4gcmVsb2FkIHRoZSBzeW1ib2xzIGZyb20gdGhlIGtlcm5lbCBiaW5hcnk6CisKKworICAgICAgIChVTUwgZ2RiKSAgc3ltYm9sLWZpbGUgL3BhdGgvdG8va2VybmVsCisKKworCisKKyAgYW5kIHJlcGVhdCB0aGUgcHJvY2VzcyBhYm92ZS4gIFlvdSdsbCBhbHNvIG5lZWQgdG8gcmUtZW5hYmxlIGJyZWFrLQorICBwb2ludHMuICBUaGV5IHdlcmUgZGlzYWJsZWQgd2hlbiB5b3UgZHVtcGVkIGFsbCB0aGUgc3ltYm9scyBiZWNhdXNlCisgIGdkYiBjb3VsZG4ndCBmaWd1cmUgb3V0IHdoZXJlIHRoZXkgc2hvdWxkIGdvLgorCisKKworICAxCDExCDEuCC41CDUuCC4gIEEIQXQIdHQIdGEIYWMIY2gIaGkIaW4IbmcIZyBnCGdkCGRiCGIgdAh0bwhvIHQIdGgIaGUIZSBrCGtlCGVyCHJuCG5lCGVsCGwKKworICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUga2VybmVsIHJ1bm5pbmcgdW5kZXIgZ2RiLCB5b3UgY2FuIGF0dGFjaCBnZGIgdG8KKyAgaXQgbGF0ZXIgYnkgc2VuZGluZyB0aGUgdHJhY2luZyB0aHJlYWQgYSBTSUdVU1IxLiAgVGhlIGZpcnN0IGxpbmUgb2YKKyAgdGhlIGNvbnNvbGUgb3V0cHV0IGlkZW50aWZpZXMgaXRzIHBpZDoKKyAgICAgICB0cmFjaW5nIHRocmVhZCBwaWQgPSAyMDA5MworCisKKworCisgIFdoZW4geW91IHNlbmQgaXQgdGhlIHNpZ25hbDoKKworCisgICAgICAgaG9zdCUga2lsbCAtVVNSMSAyMDA5MworCisKKworCisgIHlvdSB3aWxsIGdldCBhbiB4dGVybSB3aXRoIGdkYiBydW5uaW5nIGluIGl0LgorCisKKyAgSWYgeW91IGhhdmUgdGhlIG1jb25zb2xlIGNvbXBpbGVkIGludG8gVU1MLCB0aGVuIHRoZSBtY29uc29sZSBjbGllbnQKKyAgY2FuIGJlIHVzZWQgdG8gc3RhcnQgZ2RiOgorCisKKyAgICAgICAobWNvbnNvbGUpICAobWNvbnNvbGUpIGNvbmZpZyBnZGI9eHRlcm0KKworCisKKworICB3aWxsIGZpcmUgdXAgYW4geHRlcm0gd2l0aCBnZGIgcnVubmluZyBpbiBpdC4KKworCisKKyAgMQgxMQgxLgguNgg2LgguICBVCFVzCHNpCGluCG5nCGcgYQhhbAhsdAh0ZQhlcghybghuYQhhdAh0ZQhlIGQIZGUIZWIIYnUIdWcIZ2cIZ2UIZXIIcnMIcworCisgIFVNTCBoYXMgc3VwcG9ydCBmb3IgYXR0YWNoaW5nIHRvIGFuIGFscmVhZHkgcnVubmluZyBkZWJ1Z2dlciByYXRoZXIKKyAgdGhhbiBzdGFydGluZyBnZGIgaXRzZWxmLiAgVGhpcyBpcyBwcmVzZW50IGluIENWUyBhcyBvZiAxNyBBcHIgMjAwMS4KKyAgSSBzZW50IGl0IHRvIEFsYW4gZm9yIGluY2x1c2lvbiBpbiB0aGUgYWMgdHJlZSwgYW5kIGl0IHdpbGwgYmUgaW4gbXkKKyAgMi40LjQgcmVsZWFzZS4KKworCisgIFRoaXMgaXMgdXNlZnVsIHdoZW4gZ2RiIGlzIGEgc3VicHJvY2VzcyBvZiBzb21lIFVJLCBzdWNoIGFzIGVtYWNzIG9yCisgIGRkZC4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcnVuIGRlYnVnZ2VycyBvdGhlciB0aGFuIGdkYiBvbiBVTUwuCisgIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgdXNpbmcgc3RyYWNlIGFzIGFuIGFsdGVybmF0ZSBkZWJ1Z2dlci4KKworCisgIFRvIGRvIHRoaXMsIHlvdSBuZWVkIHRvIGdldCB0aGUgcGlkIG9mIHRoZSBkZWJ1Z2dlciBhbmQgcGFzcyBpdCBpbgorICB3aXRoIHRoZQorCisKKyAgSWYgeW91IGFyZSB1c2luZyBnZGIgdW5kZXIgc29tZSBVSSwgdGhlbiB0ZWxsIGl0IHRvICdhdHQgMScsIGFuZAorICB5b3UnbGwgZmluZCB5b3Vyc2VsZiBhdHRhY2hlZCB0byBVTUwuCisKKworICBJZiB5b3UgYXJlIHVzaW5nIHNvbWV0aGluZyBvdGhlciB0aGFuIGdkYiBhcyB5b3VyIGRlYnVnZ2VyLCB0aGVuCisgIHlvdSdsbCBuZWVkIHRvIGdldCBpdCB0byBkbyB0aGUgZXF1aXZhbGVudCBvZiAnYXR0IDEnIGlmIGl0IGRvZXNuJ3QgZG8KKyAgaXQgYXV0b21hdGljYWxseS4KKworCisgIEFuIGV4YW1wbGUgb2YgYW4gYWx0ZXJuYXRlIGRlYnVnZ2VyIGlzIHN0cmFjZS4gIFlvdSBjYW4gc3RyYWNlIHRoZQorICBhY3R1YWwga2VybmVsIGFzIGZvbGxvd3M6CisKKyAgKwhvICBSdW4gdGhlIGZvbGxvd2luZyBpbiBhIHNoZWxsCisKKworICAgICAgIGhvc3QlCisgICAgICAgc2ggLWMgJ2VjaG8gcGlkPSQkOyBlY2hvIC1uIGhpdCByZXR1cm47IHJlYWQgeDsgZXhlYyBzdHJhY2UgLXAgMSAtbyBzdHJhY2Uub3V0JworCisKKworICArCG8gIFJ1biBVTUwgd2l0aCAnZGVidWcnIGFuZCAnZ2RiLXBpZD08cGlkPicgd2l0aCB0aGUgcGlkIHByaW50ZWQgb3V0CisgICAgIGJ5IHRoZSBwcmV2aW91cyBjb21tYW5kCisKKyAgKwhvICBIaXQgcmV0dXJuIGluIHRoZSBzaGVsbCwgYW5kIFVNTCB3aWxsIHN0YXJ0IHJ1bm5pbmcsIGFuZCBzdHJhY2UKKyAgICAgb3V0cHV0IHdpbGwgc3RhcnQgYWNjdW11bGF0aW5nIGluIHRoZSBvdXRwdXQgZmlsZS4KKworICAgICBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBydW5uaW5nCisKKworICAgICAgIGhvc3QlIHN0cmFjZSAuL2xpbnV4CisKKworCisKKyAgVGhhdCB3aWxsIHN0cmFjZSBvbmx5IHRoZSBtYWluIFVNTCB0aHJlYWQsIHRoZSB0cmFjaW5nIHRocmVhZCwgd2hpY2gKKyAgZG9lc24ndCBkbyBhbnkgb2YgdGhlIGFjdHVhbCBrZXJuZWwgd29yay4gIEl0IGp1c3Qgb3ZlcnNlZXMgdGhlIHZpci0KKyAgdHVhbCBtYWNoaW5lLiAgSW4gY29udHJhc3QsIHVzaW5nIHN0cmFjZSBhcyBkZXNjcmliZWQgYWJvdmUgd2lsbCBzaG93CisgIHlvdSB0aGUgbG93LWxldmVsIGFjdGl2aXR5IG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuCisKKworCisKKworICAxCDEyCDIuCC4gIEsIS2UIZXIIcm4IbmUIZWwIbCBkCGRlCGViCGJ1CHVnCGdnCGdpCGluCG5nCGcgZQhleAh4YQhhbQhtcAhwbAhsZQhlcwhzCisKKyAgMQgxMggyLgguMQgxLgguICBUCFRoCGhlCGUgYwhjYQhhcwhzZQhlIG8Ib2YIZiB0CHRoCGhlCGUgaAhodQh1bghuZwhnIGYIZnMIc2MIY2sIaworCisgIFdoZW4gYm9vdGluZyB1cCB0aGUga2VybmVsLCBmc2NrIGZhaWxlZCwgYW5kIGRyb3BwZWQgbWUgaW50byBhIHNoZWxsCisgIHRvIGZpeCB0aGluZ3MgdXAuICBJIHJhbiBmc2NrIC15LCB3aGljaCBodW5nOgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIFNldHRpbmcgaG9zdG5hbWUgdW1sICAgICAgICAgICAgICAgICAgICBbIE9LIF0KKyAgQ2hlY2tpbmcgcm9vdCBmaWxlc3lzdGVtCisgIC9kZXYvZmhkMCB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkLCBjaGVjayBmb3JjZWQuCisgIEVycm9yIHJlYWRpbmcgYmxvY2sgODY4OTQgKEF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCkgd2hpbGUgcmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgMTk3ODAuCisKKyAgL2Rldi9maGQwOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLgorICAgICAgICAgIChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpCisgIFsgRkFJTEVEIF0KKworICAqKiogQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBmaWxlIHN5c3RlbSBjaGVjay4KKyAgKioqIERyb3BwaW5nIHlvdSB0byBhIHNoZWxsOyB0aGUgc3lzdGVtIHdpbGwgcmVib290CisgICoqKiB3aGVuIHlvdSBsZWF2ZSB0aGUgc2hlbGwuCisgIEdpdmUgcm9vdCBwYXNzd29yZCBmb3IgbWFpbnRlbmFuY2UKKyAgKG9yIHR5cGUgQ29udHJvbC1EIGZvciBub3JtYWwgc3RhcnR1cCk6CisKKyAgW3Jvb3RAdW1sIC9yb290XSMgZnNjayAteSAvZGV2L2ZoZDAKKyAgZnNjayAteSAvZGV2L2ZoZDAKKyAgUGFyYWxsZWxpemluZyBmc2NrIHZlcnNpb24gMS4xNCAoOS1KYW4tMTk5OSkKKyAgZTJmc2NrIDEuMTQsIDktSmFuLTE5OTkgZm9yIEVYVDIgRlMgMC41YiwgOTUvMDgvMDkKKyAgL2Rldi9maGQwIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMsIGNoZWNrIGZvcmNlZC4KKyAgUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCisgIEVycm9yIHJlYWRpbmcgYmxvY2sgODY4OTQgKEF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCkgd2hpbGUgcmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgMTk3ODAuICBJZ25vcmUgZXJyb3I/IHllcworCisgIElub2RlIDE5NzgwLCBpX2Jsb2NrcyBpcyAxNTQ4LCBzaG91bGQgYmUgNTQwLiAgRml4PyB5ZXMKKworICBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKKyAgRXJyb3IgcmVhZGluZyBibG9jayA0OTQwNSAoQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkKS4gIElnbm9yZSBlcnJvcj8geWVzCisKKyAgRGlyZWN0b3J5IGlub2RlIDExODU4LCBibG9jayAwLCBvZmZzZXQgMDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorICBTYWx2YWdlPyB5ZXMKKworICBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgMTE4NTguCisgIEZpeD8geWVzCisKKyAgTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAxMTg1OC4KKyAgRml4PyB5ZXMKKworCisKKworCisgIFRoZSBzdGFuZGFyZCBkcmlsbCBpbiB0aGlzIHNvcnQgb2Ygc2l0dWF0aW9uIGlzIHRvIGZpcmUgdXAgZ2RiIG9uIHRoZQorICBzaWduYWwgdGhyZWFkLCB3aGljaCwgaW4gdGhpcyBjYXNlLCB3YXMgcGlkIDE5MzUuICBJbiBhbm90aGVyIHdpbmRvdywKKyAgSSBydW4gZ2RiIGFuZCBhdHRhY2ggcGlkIDE5MzUuCisKKworCisKKyAgICAgICB+L2xpbnV4LzIuMy4yNi91bSAxMDE2OiBnZGIgbGludXgKKyAgICAgICBHTlUgZ2RiIDQuMTcuMC4xMSB3aXRoIExpbnV4IHN1cHBvcnQKKyAgICAgICBDb3B5cmlnaHQgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICBHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlCisgICAgICAgd2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVzIG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAgICAgICBUeXBlICJzaG93IGNvcHlpbmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4KKyAgICAgICBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5IiBmb3IgZGV0YWlscy4KKyAgICAgICBUaGlzIEdEQiB3YXMgY29uZmlndXJlZCBhcyAiaTM4Ni1yZWRoYXQtbGludXgiLi4uCisKKyAgICAgICAoZ2RiKSBhdHQgMTkzNQorICAgICAgIEF0dGFjaGluZyB0byBwcm9ncmFtIGAvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9saW51eCcsIFBpZCAxOTM1CisgICAgICAgMHgxMDA3NTZkOSBpbiBfX3dhaXQ0ICgpCisKKworCisKKworCisgIExldCdzIHNlZSB3aGF0J3MgY3VycmVudGx5IHJ1bm5pbmc6CisKKworCisgICAgICAgKGdkYikgcCBjdXJyZW50X3Rhc2sucGlkCisgICAgICAgJDEgPSAwCisKKworCisKKworICBJdCdzIHRoZSBpZGxlIHRocmVhZCwgd2hpY2ggbWVhbnMgdGhhdCBmc2NrIHdlbnQgdG8gc2xlZXAgZm9yIHNvbWUKKyAgcmVhc29uIGFuZCBuZXZlciB3b2tlIHVwLgorCisKKyAgTGV0J3MgZ3Vlc3MgdGhhdCB0aGUgbGFzdCBwcm9jZXNzIGluIHRoZSBwcm9jZXNzIGxpc3QgaXMgZnNjazoKKworCisKKyAgICAgICAoZ2RiKSBwIGN1cnJlbnRfdGFzay5wcmV2X3Rhc2suY29tbQorICAgICAgICQxMyA9ICJmc2NrLmV4dDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAiCisKKworCisKKworICBJdCBpcywgc28gbGV0J3Mgc2VlIHdoYXQgaXQgdGhpbmtzIGl0J3MgdXAgdG86CisKKworCisgICAgICAgKGdkYikgcCBjdXJyZW50X3Rhc2sucHJldl90YXNrLnRocmVhZAorICAgICAgICQxNCA9IHtleHRlcm5fcGlkID0gMTk4MCwgdHJhY2luZyA9IDAsIHdhbnRfdHJhY2luZyA9IDAsIGZvcmtpbmcgPSAwLAorICAgICAgICAga2VybmVsX3N0YWNrX3BhZ2UgPSAwLCBzaWduYWxfc3RhY2sgPSAxMzQyNjI3ODQwLCBzeXNjYWxsID0ge2lkID0gNCwgYXJncyA9IHsKKyAgICAgICAgICAgICAzLCAxMzQ5NzM0NDAsIDEwMjQsIDAsIDEwMjR9LCBoYXZlX3Jlc3VsdCA9IDAsIHJlc3VsdCA9IDUwNTkwNzIwfSwKKyAgICAgICAgIHJlcXVlc3QgPSB7b3AgPSAyLCB1ID0ge2V4ZWMgPSB7aXAgPSAxMzUwNDY3NTg0LCBzcCA9IDI5NTI3ODk0MjR9LCBmb3JrID0geworICAgICAgICAgICAgICAgcmVncyA9IHsxMzUwNDY3NTg0LCAyOTUyNzg5NDI0LCAwIDxyZXBlYXRzIDE1IHRpbWVzPn0sIHNpZ3N0YWNrID0gMCwKKyAgICAgICAgICAgICAgIHBpZCA9IDB9LCBzd2l0Y2hfdG8gPSAweDUwN2U4MDAwLCB0aHJlYWQgPSB7cHJvYyA9IDB4NTA3ZTgwMDAsCisgICAgICAgICAgICAgICBhcmcgPSAweGFmZmZmZGIwLCBmbGFncyA9IDAsIG5ld19waWQgPSAwfSwgaW5wdXRfcmVxdWVzdCA9IHsKKyAgICAgICAgICAgICAgIG9wID0gMTM1MDQ2NzU4NCwgZmQgPSAtMTM0MjE3Nzg3MiwgcHJvYyA9IDAsIHBpZCA9IDB9fX19CisKKworCisKKworICBUaGUgaW50ZXJlc3RpbmcgdGhpbmdzIGhlcmUgYXJlIHRoZSBmYWN0IHRoYXQgaXRzIC50aHJlYWQuc3lzY2FsbC5pZAorICBpcyBfX05SX3dyaXRlIChzZWUgdGhlIGJpZyBzd2l0Y2ggaW4gYXJjaC91bS9rZXJuZWwvc3lzY2FsbF9rZXJuLmMgb3IKKyAgdGhlIGRlZmluZXMgaW4gaW5jbHVkZS9hc20tdW0vYXJjaC91bmlzdGQuaCksIGFuZCB0aGF0IGl0IG5ldmVyCisgIHJldHVybmVkLiAgQWxzbywgaXRzIC5yZXF1ZXN0Lm9wIGlzIE9QX1NXSVRDSCAoc2VlCisgIGFyY2gvdW0vaW5jbHVkZS91c2VyX3V0aWwuaCkuICBUaGVzZSBtZWFuIHRoYXQgaXQgd2VudCBpbnRvIGEgd3JpdGUsCisgIGFuZCwgZm9yIHNvbWUgcmVhc29uLCBjYWxsZWQgc2NoZWR1bGUoKS4KKworCisgIFRoZSBmYWN0IHRoYXQgaXQgbmV2ZXIgcmV0dXJuZWQgZnJvbSB3cml0ZSBtZWFucyB0aGF0IGl0cyBzdGFjayBzaG91bGQKKyAgYmUgZmFpcmx5IGludGVyZXN0aW5nLiAgSXRzIHBpZCBpcyAxOTgwICgudGhyZWFkLmV4dGVybl9waWQpLiAgVGhhdAorICBwcm9jZXNzIGlzIGJlaW5nIHB0cmFjZWQgYnkgdGhlIHNpZ25hbCB0aHJlYWQsIHNvIGl0IG11c3QgYmUgZGV0YWNoZWQKKyAgYmVmb3JlIGdkYiBjYW4gYXR0YWNoIGl0OgorCisKKworCisKKworCisKKworCisgIChnZGIpIGNhbGwgZGV0YWNoKDE5ODApCisKKyAgUHJvZ3JhbSByZWNlaXZlZCBzaWduYWwgU0lHU0VHViwgU2VnbWVudGF0aW9uIGZhdWx0LgorICA8ZnVuY3Rpb24gY2FsbGVkIGZyb20gZ2RiPgorICBUaGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBzdG9wcGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLgorICBXaGVuIHRoZSBmdW5jdGlvbiAoZGV0YWNoKSBpcyBkb25lIGV4ZWN1dGluZywgR0RCIHdpbGwgc2lsZW50bHkKKyAgc3RvcCAoaW5zdGVhZCBvZiBjb250aW51aW5nIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGNvbnRhaW5pbmcKKyAgdGhlIGZ1bmN0aW9uIGNhbGwpLgorICAoZ2RiKSBjYWxsIGRldGFjaCgxOTgwKQorICAkMTUgPSAwCisKKworCisKKworICBUaGUgZmlyc3QgZGV0YWNoIHNlZ2ZhdWx0cyBmb3Igc29tZSByZWFzb24sIGFuZCB0aGUgc2Vjb25kIG9uZQorICBzdWNjZWVkcy4KKworCisgIE5vdyBJIGRldGFjaCBmcm9tIHRoZSBzaWduYWwgdGhyZWFkLCBhdHRhY2ggdG8gdGhlIGZzY2sgdGhyZWFkLCBhbmQKKyAgbG9vayBhdCBpdHMgc3RhY2s6CisKKworICAgICAgIChnZGIpIGRldAorICAgICAgIERldGFjaGluZyBmcm9tIHByb2dyYW06IC9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2xpbnV4IFBpZCAxOTM1CisgICAgICAgKGdkYikgYXR0IDE5ODAKKyAgICAgICBBdHRhY2hpbmcgdG8gcHJvZ3JhbSBgL2hvbWUvZGlrZS9saW51eC8yLjMuMjYvdW0vbGludXgnLCBQaWQgMTk4MAorICAgICAgIDB4MTAwNzA0NTEgaW4gX19raWxsICgpCisgICAgICAgKGdkYikgYnQKKyAgICAgICAjMCAgMHgxMDA3MDQ1MSBpbiBfX2tpbGwgKCkKKyAgICAgICAjMSAgMHgxMDA2OGNjZCBpbiB1c3IxX3BpZCAocGlkPTE5ODApIGF0IHByb2Nlc3MuYzozMAorICAgICAgICMyICAweDEwMDZhMDNmIGluIF9zd2l0Y2hfdG8gKHByZXY9MHg1MDA3MjAwMCwgbmV4dD0weDUwN2U4MDAwKQorICAgICAgICAgICBhdCBwcm9jZXNzX2tlcm4uYzoxNTYKKyAgICAgICAjMyAgMHgxMDA2YTA1MiBpbiBzd2l0Y2hfdG8gKHByZXY9MHg1MDA3MjAwMCwgbmV4dD0weDUwN2U4MDAwLCBsYXN0PTB4NTAwNzIwMDApCisgICAgICAgICAgIGF0IHByb2Nlc3Nfa2Vybi5jOjE2MQorICAgICAgICM0ICAweDEwMDAxZDEyIGluIHNjaGVkdWxlICgpIGF0IHNjaGVkLmM6Nzc3CisgICAgICAgIzUgIDB4MTAwNmE3NDQgaW4gX19kb3duIChzZW09MHg1MDdkMjQxYykgYXQgc2VtYXBob3JlLmM6NzEKKyAgICAgICAjNiAgMHgxMDA2YWExMCBpbiBfX2Rvd25fZmFpbGVkICgpIGF0IHNlbWFwaG9yZS5jOjE1NworICAgICAgICM3ICAweDEwMDZjNWQ4IGluIHNlZ3ZfaGFuZGxlciAoc2M9MHg1MDA2ZTk0MCkgYXQgdHJhcF91c2VyLmM6MTc0CisgICAgICAgIzggIDB4MTAwNmM1ZWMgaW4ga2Vybl9zZWd2X2hhbmRsZXIgKHNpZz0xMSkgYXQgdHJhcF91c2VyLmM6MTgyCisgICAgICAgIzkgIDxzaWduYWwgaGFuZGxlciBjYWxsZWQ+CisgICAgICAgIzEwIDB4MTAxNTU0MDQgaW4gZXJybm8gKCkKKyAgICAgICAjMTEgMHgxMDA2YzBhYSBpbiBzZWd2IChhZGRyZXNzPTEzNDIxNzkzMjgsIGlzX3dyaXRlPTIpIGF0IHRyYXBfa2Vybi5jOjUwCisgICAgICAgIzEyIDB4MTAwNmM1ZDggaW4gc2Vndl9oYW5kbGVyIChzYz0weDUwMDZlYWY4KSBhdCB0cmFwX3VzZXIuYzoxNzQKKyAgICAgICAjMTMgMHgxMDA2YzVlYyBpbiBrZXJuX3NlZ3ZfaGFuZGxlciAoc2lnPTExKSBhdCB0cmFwX3VzZXIuYzoxODIKKyAgICAgICAjMTQgPHNpZ25hbCBoYW5kbGVyIGNhbGxlZD4KKyAgICAgICAjMTUgMHhjMGZkIGluID8/ICgpCisgICAgICAgIzE2IDB4MTAwMTY2NDcgaW4gc3lzX3dyaXRlIChmZD0zLAorICAgICAgICAgICBidWY9MHg4MGI4ODAwIDxBZGRyZXNzIDB4ODBiODgwMCBvdXQgb2YgYm91bmRzPiwgY291bnQ9MTAyNCkKKyAgICAgICAgICAgYXQgcmVhZF93cml0ZS5jOjE1OQorICAgICAgICMxNyAweDEwMDZkNWIzIGluIGV4ZWN1dGVfc3lzY2FsbCAoc3lzY2FsbD00LCBhcmdzPTB4NTAwNmVmMDgpCisgICAgICAgICAgIGF0IHN5c2NhbGxfa2Vybi5jOjI1NAorICAgICAgICMxOCAweDEwMDZhZjg3IGluIHJlYWxseV9kb19zeXNjYWxsIChzaWc9MTIpIGF0IHN5c2NhbGxfdXNlci5jOjM1CisgICAgICAgIzE5IDxzaWduYWwgaGFuZGxlciBjYWxsZWQ+CisgICAgICAgIzIwIDB4NDAwZGM4YjAgaW4gPz8gKCkKKworCisKKworCisgIFRoZSBpbnRlcmVzdGluZyB0aGluZ3MgaGVyZSBhcmUgOgorCisgICsIbyAgVGhlcmUgYXJlIHR3byBzZWdmYXVsdHMgb24gdGhpcyBzdGFjayAoZnJhbWVzIDkgYW5kIDE0KQorCisgICsIbyAgVGhlIGZpcnN0IGZhdWx0aW5nIGFkZHJlc3MgKGZyYW1lIDExKSBpcyAweDUwMDAwODAwCisKKyAgKGdkYikgcCAodm9pZCAqKTEzNDIxNzkzMjgKKyAgJDE2ID0gKHZvaWQgKikgMHg1MDAwMDgwMAorCisKKworCisKKyAgVGhlIGluaXRpYWwgZmF1bHRpbmcgYWRkcmVzcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGlzIG9uIHRoZSBpZGxlCisgIHRocmVhZCdzIHN0YWNrLiAgSSBoYWQgYmVlbiBzZWVpbmcgdGhlIGlkbGUgdGhyZWFkIHNlZ2ZhdWx0IGZvciBubworICBhcHBhcmVudCByZWFzb24sIGFuZCB0aGUgY2F1c2UgbG9va2VkIGxpa2Ugc3RhY2sgY29ycnVwdGlvbi4gIEluIGhvcGVzCisgIG9mIGNhdGNoaW5nIHRoZSBjdWxwcml0IGluIHRoZSBhY3QsIEkgaGFkIHR1cm5lZCBvZmYgYWxsIHByb3RlY3Rpb25zCisgIHRvIHRoYXQgc3RhY2sgd2hpbGUgdGhlIGlkbGUgdGhyZWFkIHdhc24ndCBydW5uaW5nLiAgVGhpcyBhcHBhcmVudGx5CisgIHRyaXBwZWQgdGhhdCB0cmFwLgorCisKKyAgSG93ZXZlciwgdGhlIG1vcmUgaW1tZWRpYXRlIHByb2JsZW0gaXMgdGhhdCBzZWNvbmQgc2VnZmF1bHQgYW5kIEknbQorICBnb2luZyB0byBjb25jZW50cmF0ZSBvbiB0aGF0LiAgRmlyc3QsIEkgd2FudCB0byBzZWUgd2hlcmUgdGhlIGZhdWx0CisgIGhhcHBlbmVkLCBzbyBJIGhhdmUgdG8gZ28gbG9vayBhdCB0aGUgc2lnY29udGVudCBzdHJ1Y3QgaW4gZnJhbWUgODoKKworCisKKyAgICAgICAoZ2RiKSB1cAorICAgICAgICMxICAweDEwMDY4Y2NkIGluIHVzcjFfcGlkIChwaWQ9MTk4MCkgYXQgcHJvY2Vzcy5jOjMwCisgICAgICAgMzAgICAgICAgIGtpbGwocGlkLCBTSUdVU1IxKTsKKyAgICAgICAoZ2RiKQorICAgICAgICMyICAweDEwMDZhMDNmIGluIF9zd2l0Y2hfdG8gKHByZXY9MHg1MDA3MjAwMCwgbmV4dD0weDUwN2U4MDAwKQorICAgICAgICAgICBhdCBwcm9jZXNzX2tlcm4uYzoxNTYKKyAgICAgICAxNTYgICAgICAgdXNyMV9waWQoZ2V0cGlkKCkpOworICAgICAgIChnZGIpCisgICAgICAgIzMgIDB4MTAwNmEwNTIgaW4gc3dpdGNoX3RvIChwcmV2PTB4NTAwNzIwMDAsIG5leHQ9MHg1MDdlODAwMCwgbGFzdD0weDUwMDcyMDAwKQorICAgICAgICAgICBhdCBwcm9jZXNzX2tlcm4uYzoxNjEKKyAgICAgICAxNjEgICAgICAgX3N3aXRjaF90byhwcmV2LCBuZXh0KTsKKyAgICAgICAoZ2RiKQorICAgICAgICM0ICAweDEwMDAxZDEyIGluIHNjaGVkdWxlICgpIGF0IHNjaGVkLmM6Nzc3CisgICAgICAgNzc3ICAgICAgICAgICAgIHN3aXRjaF90byhwcmV2LCBuZXh0LCBwcmV2KTsKKyAgICAgICAoZ2RiKQorICAgICAgICM1ICAweDEwMDZhNzQ0IGluIF9fZG93biAoc2VtPTB4NTA3ZDI0MWMpIGF0IHNlbWFwaG9yZS5jOjcxCisgICAgICAgNzEgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKKyAgICAgICAoZ2RiKQorICAgICAgICM2ICAweDEwMDZhYTEwIGluIF9fZG93bl9mYWlsZWQgKCkgYXQgc2VtYXBob3JlLmM6MTU3CisgICAgICAgMTU3ICAgICB9CisgICAgICAgKGdkYikKKyAgICAgICAjNyAgMHgxMDA2YzVkOCBpbiBzZWd2X2hhbmRsZXIgKHNjPTB4NTAwNmU5NDApIGF0IHRyYXBfdXNlci5jOjE3NAorICAgICAgIDE3NCAgICAgICBzZWd2KHNjLT5jcjIsIHNjLT5lcnIgJiAyKTsKKyAgICAgICAoZ2RiKQorICAgICAgICM4ICAweDEwMDZjNWVjIGluIGtlcm5fc2Vndl9oYW5kbGVyIChzaWc9MTEpIGF0IHRyYXBfdXNlci5jOjE4MgorICAgICAgIDE4MiAgICAgICBzZWd2X2hhbmRsZXIoc2MpOworICAgICAgIChnZGIpIHAgKnNjCisgICAgICAgQ2Fubm90IGFjY2VzcyBtZW1vcnkgYXQgYWRkcmVzcyAweDAuCisKKworCisKKyAgVGhhdCdzIG5vdCB2ZXJ5IHVzZWZ1bCwgc28gSSdsbCB0cnkgYSBtb3JlIG1hbnVhbCBtZXRob2Q6CisKKworICAgICAgIChnZGIpIHAgKigoc3RydWN0IHNpZ2NvbnRleHQgKikgKCZzaWcgKyAxKSkKKyAgICAgICAkMTkgPSB7Z3MgPSAwLCBfX2dzaCA9IDAsIGZzID0gMCwgX19mc2ggPSAwLCBlcyA9IDQzLCBfX2VzaCA9IDAsIGRzID0gNDMsCisgICAgICAgICBfX2RzaCA9IDAsIGVkaSA9IDEzNDIxNzkzMjgsIGVzaSA9IDEzNTAzNzg1NDgsIGVicCA9IDEzNDI2MzA0NDAsCisgICAgICAgICBlc3AgPSAxMzQyNjMwNDIwLCBlYnggPSAxMzQ4MTUwNjI0LCBlZHggPSAxMjgwLCBlY3ggPSAwLCBlYXggPSAwLAorICAgICAgICAgdHJhcG5vID0gMTQsIGVyciA9IDQsIGVpcCA9IDI2ODQ4MDk0NSwgY3MgPSAzNSwgX19jc2ggPSAwLCBlZmxhZ3MgPSA2NjExOCwKKyAgICAgICAgIGVzcF9hdF9zaWduYWwgPSAxMzQyNjMwNDIwLCBzcyA9IDQzLCBfX3NzaCA9IDAsIGZwc3RhdGUgPSAweDAsIG9sZG1hc2sgPSAwLAorICAgICAgICAgY3IyID0gMTI4MH0KKworCisKKyAgVGhlIGlwIGlzIGluIGhhbmRsZV9tbV9mYXVsdDoKKworCisgICAgICAgKGdkYikgcCAodm9pZCAqKTI2ODQ4MDk0NQorICAgICAgICQyMCA9ICh2b2lkICopIDB4MTAwMGIxYjEKKyAgICAgICAoZ2RiKSBpIHN5bSAkMjAKKyAgICAgICBoYW5kbGVfbW1fZmF1bHQgKyA1NyBpbiBzZWN0aW9uIC50ZXh0CisKKworCisKKworICBTcGVjaWZpY2FsbHksIGl0J3MgaW4gcHRlX2FsbG9jOgorCisKKyAgICAgICAoZ2RiKSBpIGxpbmUgKiQyMAorICAgICAgIExpbmUgMTI0IG9mICIvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiCisgICAgICAgICAgc3RhcnRzIGF0IGFkZHJlc3MgMHgxMDAwYjFiMSA8aGFuZGxlX21tX2ZhdWx0KzU3PgorICAgICAgICAgIGFuZCBlbmRzIGF0IDB4MTAwMGIxYjcgPGhhbmRsZV9tbV9mYXVsdCs2Mz4uCisKKworCisKKworICBUbyBmaW5kIHdoZXJlIGluIGhhbmRsZV9tbV9mYXVsdCB0aGlzIGlzLCBJJ2xsIGp1bXAgZm9yd2FyZCBpbiB0aGUKKyAgY29kZSB1bnRpbCBJIHNlZSBhbiBhZGRyZXNzIGluIHRoYXQgcHJvY2VkdXJlOgorCisKKworICAgICAgIChnZGIpIGkgbGluZSAqMHgxMDAwYjFjMAorICAgICAgIExpbmUgMTI2IG9mICIvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiCisgICAgICAgICAgc3RhcnRzIGF0IGFkZHJlc3MgMHgxMDAwYjFiNyA8aGFuZGxlX21tX2ZhdWx0KzYzPgorICAgICAgICAgIGFuZCBlbmRzIGF0IDB4MTAwMGIxYzMgPGhhbmRsZV9tbV9mYXVsdCs3NT4uCisgICAgICAgKGdkYikgaSBsaW5lICoweDEwMDBiMWQwCisgICAgICAgTGluZSAxMzEgb2YgIi9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKKyAgICAgICAgICBzdGFydHMgYXQgYWRkcmVzcyAweDEwMDBiMWQwIDxoYW5kbGVfbW1fZmF1bHQrODg+CisgICAgICAgICAgYW5kIGVuZHMgYXQgMHgxMDAwYjFkYSA8aGFuZGxlX21tX2ZhdWx0Kzk4Pi4KKyAgICAgICAoZ2RiKSBpIGxpbmUgKjB4MTAwMGIxZTAKKyAgICAgICBMaW5lIDYxIG9mICIvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiCisgICAgICAgICAgc3RhcnRzIGF0IGFkZHJlc3MgMHgxMDAwYjFkYSA8aGFuZGxlX21tX2ZhdWx0Kzk4PgorICAgICAgICAgIGFuZCBlbmRzIGF0IDB4MTAwMGIxZTEgPGhhbmRsZV9tbV9mYXVsdCsxMDU+LgorICAgICAgIChnZGIpIGkgbGluZSAqMHgxMDAwYjFmMAorICAgICAgIExpbmUgMTM0IG9mICIvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiCisgICAgICAgICAgc3RhcnRzIGF0IGFkZHJlc3MgMHgxMDAwYjFmMCA8aGFuZGxlX21tX2ZhdWx0KzEyMD4KKyAgICAgICAgICBhbmQgZW5kcyBhdCAweDEwMDBiMjAwIDxoYW5kbGVfbW1fZmF1bHQrMTM2Pi4KKyAgICAgICAoZ2RiKSBpIGxpbmUgKjB4MTAwMGIyMDAKKyAgICAgICBMaW5lIDEzNSBvZiAiL2hvbWUvZGlrZS9saW51eC8yLjMuMjYvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oIgorICAgICAgICAgIHN0YXJ0cyBhdCBhZGRyZXNzIDB4MTAwMGIyMDAgPGhhbmRsZV9tbV9mYXVsdCsxMzY+CisgICAgICAgICAgYW5kIGVuZHMgYXQgMHgxMDAwYjIwOCA8aGFuZGxlX21tX2ZhdWx0KzE0ND4uCisgICAgICAgKGdkYikgaSBsaW5lICoweDEwMDBiMjEwCisgICAgICAgTGluZSAxMzkgb2YgIi9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKKyAgICAgICAgICBzdGFydHMgYXQgYWRkcmVzcyAweDEwMDBiMjEwIDxoYW5kbGVfbW1fZmF1bHQrMTUyPgorICAgICAgICAgIGFuZCBlbmRzIGF0IDB4MTAwMGIyMTkgPGhhbmRsZV9tbV9mYXVsdCsxNjE+LgorICAgICAgIChnZGIpIGkgbGluZSAqMHgxMDAwYjIyMAorICAgICAgIExpbmUgMTE2OCBvZiAibWVtb3J5LmMiIHN0YXJ0cyBhdCBhZGRyZXNzIDB4MTAwMGIyMWUgPGhhbmRsZV9tbV9mYXVsdCsxNjY+CisgICAgICAgICAgYW5kIGVuZHMgYXQgMHgxMDAwYjIyMiA8aGFuZGxlX21tX2ZhdWx0KzE3MD4uCisKKworCisKKworICBTb21ldGhpbmcgaXMgYXBwYXJlbnRseSB3cm9uZyB3aXRoIHRoZSBwYWdlIHRhYmxlcyBvciB2bWFfc3RydWN0cywgc28KKyAgbGV0cyBnbyBiYWNrIHRvIGZyYW1lIDExIGFuZCBoYXZlIGEgbG9vayBhdCB0aGVtOgorCisKKworICAjMTEgMHgxMDA2YzBhYSBpbiBzZWd2IChhZGRyZXNzPTEzNDIxNzkzMjgsIGlzX3dyaXRlPTIpIGF0IHRyYXBfa2Vybi5jOjUwCisgIDUwICAgICAgICBoYW5kbGVfbW1fZmF1bHQoY3VycmVudCwgdm1hLCBhZGRyZXNzLCBpc193cml0ZSk7CisgIChnZGIpIGNhbGwgcGdkX29mZnNldF9wcm9jKHZtYS0+dm1fbW0sIGFkZHJlc3MpCisgICQyMiA9IChwZ2RfdCAqKSAweDgwYTU0OGMKKworCisKKworCisgIFRoYXQncyBwcmV0dHkgYm9ndXMuICBQYWdlIHRhYmxlcyBhcmVuJ3Qgc3VwcG9zZWQgdG8gYmUgaW4gcHJvY2VzcworICB0ZXh0IG9yIGRhdGEgYXJlYXMuICBMZXQncyBzZWUgd2hhdCdzIGluIHRoZSB2bWE6CisKKworICAgICAgIChnZGIpIHAgKnZtYQorICAgICAgICQyMyA9IHt2bV9tbSA9IDB4NTA3ZDI0MzQsIHZtX3N0YXJ0ID0gMCwgdm1fZW5kID0gMTM0NTEyNjQwLAorICAgICAgICAgdm1fbmV4dCA9IDB4ODBhNGY4Yywgdm1fcGFnZV9wcm90ID0ge3BncHJvdCA9IDB9LCB2bV9mbGFncyA9IDMxMjAwLAorICAgICAgICAgdm1fYXZsX2hlaWdodCA9IDIwNTgsIHZtX2F2bF9sZWZ0ID0gMHg4MGE4Yzk0LCB2bV9hdmxfcmlnaHQgPSAweDgwZDEwMDAsCisgICAgICAgICB2bV9uZXh0X3NoYXJlID0gMHhhZmZmZmRiMCwgdm1fcHByZXZfc2hhcmUgPSAweGFmZmZmZTYzLAorICAgICAgICAgdm1fb3BzID0gMHhhZmZmZmU3YSwgdm1fcGdvZmYgPSAyOTUyNzg5NjI2LCB2bV9maWxlID0gMHhhZmZmZmZlYywKKyAgICAgICAgIHZtX3ByaXZhdGVfZGF0YSA9IDB4NjJ9CisgICAgICAgKGdkYikgcCAqdm1hLnZtX21tCisgICAgICAgJDI0ID0ge21tYXAgPSAweDUwN2QyNDM0LCBtbWFwX2F2bCA9IDB4MCwgbW1hcF9jYWNoZSA9IDB4ODA0ODAwMCwKKyAgICAgICAgIHBnZCA9IDB4ODBhNGY4YywgbW1fdXNlcnMgPSB7Y291bnRlciA9IDB9LCBtbV9jb3VudCA9IHtjb3VudGVyID0gMTM0OTA0Mjg4fSwKKyAgICAgICAgIG1hcF9jb3VudCA9IDEzNDkwOTA3NiwgbW1hcF9zZW0gPSB7Y291bnQgPSB7Y291bnRlciA9IDEzNTA3Mzc5Mn0sCisgICAgICAgICAgIHNsZWVwZXJzID0gLTEzNDIxNzc4NzIsIHdhaXQgPSB7bG9jayA9IDxvcHRpbWl6ZWQgb3V0IG9yIHplcm8gbGVuZ3RoPiwKKyAgICAgICAgICAgICB0YXNrX2xpc3QgPSB7bmV4dCA9IDB4YWZmZmZlNjMsIHByZXYgPSAweGFmZmZmZTdhfSwKKyAgICAgICAgICAgICBfX21hZ2ljID0gLTEzNDIxNzc2NzAsIF9fY3JlYXRvciA9IC0xMzQyMTc3MzAwfSwgX19tYWdpYyA9IDk4fSwKKyAgICAgICAgIHBhZ2VfdGFibGVfbG9jayA9IHt9LCBjb250ZXh0ID0gMTM4LCBzdGFydF9jb2RlID0gMCwgZW5kX2NvZGUgPSAwLAorICAgICAgICAgc3RhcnRfZGF0YSA9IDAsIGVuZF9kYXRhID0gMCwgc3RhcnRfYnJrID0gMCwgYnJrID0gMCwgc3RhcnRfc3RhY2sgPSAwLAorICAgICAgICAgYXJnX3N0YXJ0ID0gMCwgYXJnX2VuZCA9IDAsIGVudl9zdGFydCA9IDAsIGVudl9lbmQgPSAwLCByc3MgPSAxMzUwMzgxNTM2LAorICAgICAgICAgdG90YWxfdm0gPSAwLCBsb2NrZWRfdm0gPSAwLCBkZWZfZmxhZ3MgPSAwLCBjcHVfdm1fbWFzayA9IDAsIHN3YXBfY250ID0gMCwKKyAgICAgICAgIHN3YXBfYWRkcmVzcyA9IDAsIHNlZ21lbnRzID0gMHgwfQorCisKKworCisKKyAgVGhpcyBhbHNvIHByZXR0eSBib2d1cy4gIFdpdGggYWxsIG9mIHRoZSAweDgweHh4eHggYW5kIDB4YWZmZmZ4eHgKKyAgYWRkcmVzc2VzLCB0aGlzIGlzIGxvb2tpbmcgbGlrZSBhIHN0YWNrIHdhcyBwbG9ua2VkIGRvd24gb24gdG9wIG9mCisgIHRoZXNlIHN0cnVjdHVyZXMuICBNYXliZSBpdCdzIGEgc3RhY2sgb3ZlcmZsb3cgZnJvbSB0aGUgbmV4dCBwYWdlOgorCisKKworICAgICAgIChnZGIpIHAgdm1hCisgICAgICAgJDI1ID0gKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKSAweDUwN2QyNDM0CisKKworCisKKworICBUaGF0J3MgdG93YXJkcyB0aGUgbG93ZXIgcXVhcnRlciBvZiB0aGUgcGFnZSwgc28gdGhhdCB3b3VsZCBoYXZlIHRvCisgIGhhdmUgYmVlbiBwcmV0dHkgaGVhdnkgc3RhY2sgb3ZlcmZsb3c6CisKKworCisKKworCisKKworCisKKworCisKKworICAoZ2RiKSB4LzEwMHggJDI1CisgIDB4NTA3ZDI0MzQ6ICAgICAweDUwN2QyNDM0ICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDgwNDgwMDAgICAgICAweDA4MGE0ZjhjCisgIDB4NTA3ZDI0NDQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwODBhNzllMCAgICAgIDB4MDgwYThjOTQgICAgICAweDA4MGQxMDAwCisgIDB4NTA3ZDI0NTQ6ICAgICAweGFmZmZmZGIwICAgICAgMHhhZmZmZmU2MyAgICAgIDB4YWZmZmZlN2EgICAgICAweGFmZmZmZTdhCisgIDB4NTA3ZDI0NjQ6ICAgICAweGFmZmZmZmVjICAgICAgMHgwMDAwMDA2MiAgICAgIDB4MDAwMDAwOGEgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0NzQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0ODQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0OTQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4NTA3ZDJmZTAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0YTQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0YjQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0YzQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0ZDQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0ZTQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI0ZjQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1MDQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1MTQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1MjQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1MzQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4NTA3ZDI1ZGMgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1NDQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1NTQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1NjQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1NzQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1ODQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1OTQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1YTQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisgIDB4NTA3ZDI1YjQ6ICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwCisKKworCisKKworICBJdCdzIG5vdCBzdGFjayBvdmVyZmxvdy4gIFRoZSBvbmx5ICJzdGFjay1saWtlIiBwaWVjZSBvZiB0aGlzIGRhdGEgaXMKKyAgdGhlIHZtYV9zdHJ1Y3QgaXRzZWxmLgorCisKKyAgQXQgdGhpcyBwb2ludCwgSSBkb24ndCBzZWUgYW55IGF2ZW51ZXMgdG8gcHVyc3VlLCBzbyBJIGp1c3QgaGF2ZSB0bworICBhZG1pdCB0aGF0IEkgaGF2ZSBubyBpZGVhIHdoYXQncyBnb2luZyBvbi4gIFdoYXQgSSB3aWxsIGRvLCB0aG91Z2gsIGlzCisgIHN0aWNrIGEgdHJhcCBvbiB0aGUgc2VnZmF1bHQgaGFuZGxlciB3aGljaCB3aWxsIHN0b3AgaWYgaXQgc2VlcyBhbnkKKyAgd3JpdGVzIHRvIHRoZSBpZGxlIHRocmVhZCdzIHN0YWNrLiAgVGhhdCB3YXMgdGhlIHRoaW5nIHRoYXQgaGFwcGVuZWQKKyAgZmlyc3QsIGFuZCBpdCBtYXkgYmUgdGhhdCBpZiBJIGNhbiBjYXRjaCBpdCBpbW1lZGlhdGVseSwgd2hhdCdzIGdvaW5nCisgIG9uIHdpbGwgYmUgc29tZXdoYXQgY2xlYXJlci4KKworCisgIDEIMTIIMi4ILjIIMi4ILiAgRQhFcAhwaQhpcwhzbwhvZAhkZQhlIDIIMjoIOiBUCFRoCGhlCGUgYwhjYQhhcwhzZQhlIG8Ib2YIZiB0CHRoCGhlCGUgaAhodQh1bghuZwhnIGYIZnMIc2MIY2sIaworCisgIEFmdGVyIHNldHRpbmcgYSB0cmFwIGluIHRoZSBTRUdWIGhhbmRsZXIgZm9yIGFjY2Vzc2VzIHRvIHRoZSBzaWduYWwKKyAgdGhyZWFkJ3Mgc3RhY2ssIEkgcmVyYW4gdGhlIGtlcm5lbC4KKworCisgIGZzY2sgaHVuZyBhZ2FpbiwgdGhpcyB0aW1lIGJ5IGhpdHRpbmcgdGhlIHRyYXA6CisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgU2V0dGluZyBob3N0bmFtZSB1bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyBPSyBdCisgIENoZWNraW5nIHJvb3QgZmlsZXN5c3RlbQorICAvZGV2L2ZoZDAgY29udGFpbnMgYSBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycywgY2hlY2sgZm9yY2VkLgorICBFcnJvciByZWFkaW5nIGJsb2NrIDg2ODk0IChBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQpIHdoaWxlIHJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlIDE5NzgwLgorCisgIC9kZXYvZmhkMDogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS4KKyAgICAgICAgICAoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKQorICBbIEZBSUxFRCBdCisKKyAgKioqIEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgZmlsZSBzeXN0ZW0gY2hlY2suCisgICoqKiBEcm9wcGluZyB5b3UgdG8gYSBzaGVsbDsgdGhlIHN5c3RlbSB3aWxsIHJlYm9vdAorICAqKiogd2hlbiB5b3UgbGVhdmUgdGhlIHNoZWxsLgorICBHaXZlIHJvb3QgcGFzc3dvcmQgZm9yIG1haW50ZW5hbmNlCisgIChvciB0eXBlIENvbnRyb2wtRCBmb3Igbm9ybWFsIHN0YXJ0dXApOgorCisgIFtyb290QHVtbCAvcm9vdF0jIGZzY2sgLXkgL2Rldi9maGQwCisgIGZzY2sgLXkgL2Rldi9maGQwCisgIFBhcmFsbGVsaXppbmcgZnNjayB2ZXJzaW9uIDEuMTQgKDktSmFuLTE5OTkpCisgIGUyZnNjayAxLjE0LCA5LUphbi0xOTk5IGZvciBFWFQyIEZTIDAuNWIsIDk1LzA4LzA5CisgIC9kZXYvZmhkMCBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzLCBjaGVjayBmb3JjZWQuCisgIFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworICBFcnJvciByZWFkaW5nIGJsb2NrIDg2ODk0IChBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQpIHdoaWxlIHJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlIDE5NzgwLiAgSWdub3JlIGVycm9yPyB5ZXMKKworICBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKKyAgRXJyb3IgcmVhZGluZyBibG9jayA0OTQwNSAoQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkKS4gIElnbm9yZSBlcnJvcj8geWVzCisKKyAgRGlyZWN0b3J5IGlub2RlIDExODU4LCBibG9jayAwLCBvZmZzZXQgMDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorICBTYWx2YWdlPyB5ZXMKKworICBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgMTE4NTguCisgIEZpeD8geWVzCisKKyAgTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAxMTg1OC4KKyAgRml4PyB5ZXMKKworICBVbnRlc3RlZCAoNDEyNykgWzEwMGZlNDRjXTogdHJhcF9rZXJuLmMgbGluZSAzMQorCisKKworCisKKyAgSSBuZWVkIHRvIGdldCB0aGUgc2lnbmFsIHRocmVhZCB0byBkZXRhY2ggZnJvbSBwaWQgNDEyNyBzbyB0aGF0IEkgY2FuCisgIGF0dGFjaCB0byBpdCB3aXRoIGdkYi4gIFRoaXMgaXMgZG9uZSBieSBzZW5kaW5nIGl0IGEgU0lHVVNSMSwgd2hpY2ggaXMKKyAgY2F1Z2h0IGJ5IHRoZSBzaWduYWwgdGhyZWFkLCB3aGljaCBkZXRhY2hlcyB0aGUgcHJvY2VzczoKKworCisgICAgICAga2lsbCAtVVNSMSA0MTI3CisKKworCisKKworICBOb3cgSSBjYW4gcnVuIGdkYiBvbiBpdDoKKworCisKKworCisKKworCisKKworCisKKworICB+L2xpbnV4LzIuMy4yNi91bSAxMDM0OiBnZGIgbGludXgKKyAgR05VIGdkYiA0LjE3LjAuMTEgd2l0aCBMaW51eCBzdXBwb3J0CisgIENvcHlyaWdodCAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICBHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlCisgIHdlbGNvbWUgdG8gY2hhbmdlIGl0IGFuZC9vciBkaXN0cmlidXRlIGNvcGllcyBvZiBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCisgIFR5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgorICBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5IiBmb3IgZGV0YWlscy4KKyAgVGhpcyBHREIgd2FzIGNvbmZpZ3VyZWQgYXMgImkzODYtcmVkaGF0LWxpbnV4Ii4uLgorICAoZ2RiKSBhdHQgNDEyNworICBBdHRhY2hpbmcgdG8gcHJvZ3JhbSBgL2hvbWUvZGlrZS9saW51eC8yLjMuMjYvdW0vbGludXgnLCBQaWQgNDEyNworICAweDEwMDc1ODkxIGluIF9fbGliY19uYW5vc2xlZXAgKCkKKworCisKKworCisgIFRoZSBiYWNrdHJhY2Ugc2hvd3MgdGhhdCBpdCB3YXMgaW4gYSB3cml0ZSBhbmQgdGhhdCB0aGUgZmF1bHQgYWRkcmVzcworICAoYWRkcmVzcyBpbiBmcmFtZSAzKSBpcyAweDUwMDAwODAwLCB3aGljaCBpcyByaWdodCBpbiB0aGUgbWlkZGxlIG9mCisgIHRoZSBzaWduYWwgdGhyZWFkJ3Mgc3RhY2sgcGFnZToKKworCisgICAgICAgKGdkYikgYnQKKyAgICAgICAjMCAgMHgxMDA3NTg5MSBpbiBfX2xpYmNfbmFub3NsZWVwICgpCisgICAgICAgIzEgIDB4MTAwNzU4NGQgaW4gX19zbGVlcCAoc2Vjb25kcz0xMDAwMDAwKQorICAgICAgICAgICBhdCAuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zbGVlcC5jOjc4CisgICAgICAgIzIgIDB4MTAwNmNlOWEgaW4gc3RvcCAoKSBhdCB1c2VyX3V0aWwuYzoxOTEKKyAgICAgICAjMyAgMHgxMDA2YmY4OCBpbiBzZWd2IChhZGRyZXNzPTEzNDIxNzkzMjgsIGlzX3dyaXRlPTIpIGF0IHRyYXBfa2Vybi5jOjMxCisgICAgICAgIzQgIDB4MTAwNmM2MjggaW4gc2Vndl9oYW5kbGVyIChzYz0weDUwMDZlYWY4KSBhdCB0cmFwX3VzZXIuYzoxNzQKKyAgICAgICAjNSAgMHgxMDA2YzYzYyBpbiBrZXJuX3NlZ3ZfaGFuZGxlciAoc2lnPTExKSBhdCB0cmFwX3VzZXIuYzoxODIKKyAgICAgICAjNiAgPHNpZ25hbCBoYW5kbGVyIGNhbGxlZD4KKyAgICAgICAjNyAgMHhjMGZkIGluID8/ICgpCisgICAgICAgIzggIDB4MTAwMTY2NDcgaW4gc3lzX3dyaXRlIChmZD0zLCBidWY9MHg4MGI4ODAwICJSLiIsIGNvdW50PTEwMjQpCisgICAgICAgICAgIGF0IHJlYWRfd3JpdGUuYzoxNTkKKyAgICAgICAjOSAgMHgxMDA2ZDYwMyBpbiBleGVjdXRlX3N5c2NhbGwgKHN5c2NhbGw9NCwgYXJncz0weDUwMDZlZjA4KQorICAgICAgICAgICBhdCBzeXNjYWxsX2tlcm4uYzoyNTQKKyAgICAgICAjMTAgMHgxMDA2YWY4NyBpbiByZWFsbHlfZG9fc3lzY2FsbCAoc2lnPTEyKSBhdCBzeXNjYWxsX3VzZXIuYzozNQorICAgICAgICMxMSA8c2lnbmFsIGhhbmRsZXIgY2FsbGVkPgorICAgICAgICMxMiAweDQwMGRjOGIwIGluID8/ICgpCisgICAgICAgIzEzIDxzaWduYWwgaGFuZGxlciBjYWxsZWQ+CisgICAgICAgIzE0IDB4NDAwZGM4YjAgaW4gPz8gKCkKKyAgICAgICAjMTUgMHg4MDU0NWZkIGluID8/ICgpCisgICAgICAgIzE2IDB4ODA0ZGFhZSBpbiA/PyAoKQorICAgICAgICMxNyAweDgwNTQzMzQgaW4gPz8gKCkKKyAgICAgICAjMTggMHg4MDRkMjNlIGluID8/ICgpCisgICAgICAgIzE5IDB4ODA0OTYzMiBpbiA/PyAoKQorICAgICAgICMyMCAweDgwNDkxZDIgaW4gPz8gKCkKKyAgICAgICAjMjEgMHg4MDU5NmI1IGluID8/ICgpCisgICAgICAgKGdkYikgcCAodm9pZCAqKTEzNDIxNzkzMjgKKyAgICAgICAkMyA9ICh2b2lkICopIDB4NTAwMDA4MDAKKworCisKKworCisgIEdvaW5nIHVwIHRoZSBzdGFjayB0byB0aGUgc2Vndl9oYW5kbGVyIGZyYW1lIGFuZCBsb29raW5nIGF0IHdoZXJlIGluCisgIHRoZSBjb2RlIHRoZSBhY2Nlc3MgaGFwcGVuZWQgc2hvd3MgdGhhdCBpdCBoYXBwZW5lZCBuZWFyIGxpbmUgMTEwIG9mCisgIGJsb2NrX2Rldi5jOgorCisKKworCisKKworCisKKworICAoZ2RiKSB1cAorICAjMSAgMHgxMDA3NTg0ZCBpbiBfX3NsZWVwIChzZWNvbmRzPTEwMDAwMDApCisgICAgICBhdCAuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zbGVlcC5jOjc4CisgIC4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NsZWVwLmM6Nzg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkuCisgIChnZGIpCisgICMyICAweDEwMDZjZTlhIGluIHN0b3AgKCkgYXQgdXNlcl91dGlsLmM6MTkxCisgIDE5MSAgICAgICB3aGlsZSgxKSBzbGVlcCgxMDAwMDAwKTsKKyAgKGdkYikKKyAgIzMgIDB4MTAwNmJmODggaW4gc2VndiAoYWRkcmVzcz0xMzQyMTc5MzI4LCBpc193cml0ZT0yKSBhdCB0cmFwX2tlcm4uYzozMQorICAzMSAgICAgICAgICBLRVJOX1VOVEVTVEVEKCk7CisgIChnZGIpCisgICM0ICAweDEwMDZjNjI4IGluIHNlZ3ZfaGFuZGxlciAoc2M9MHg1MDA2ZWFmOCkgYXQgdHJhcF91c2VyLmM6MTc0CisgIDE3NCAgICAgICBzZWd2KHNjLT5jcjIsIHNjLT5lcnIgJiAyKTsKKyAgKGdkYikgcCAqc2MKKyAgJDEgPSB7Z3MgPSAwLCBfX2dzaCA9IDAsIGZzID0gMCwgX19mc2ggPSAwLCBlcyA9IDQzLCBfX2VzaCA9IDAsIGRzID0gNDMsCisgICAgX19kc2ggPSAwLCBlZGkgPSAxMzQyMTc5MzI4LCBlc2kgPSAxMzQ5NzM0NDAsIGVicCA9IDEzNDI2MzE0ODQsCisgICAgZXNwID0gMTM0MjYzMDg2NCwgZWJ4ID0gMjU2LCBlZHggPSAwLCBlY3ggPSAyNTYsIGVheCA9IDEwMjQsIHRyYXBubyA9IDE0LAorICAgIGVyciA9IDYsIGVpcCA9IDI2ODU1MDgzNCwgY3MgPSAzNSwgX19jc2ggPSAwLCBlZmxhZ3MgPSA2NjA3MCwKKyAgICBlc3BfYXRfc2lnbmFsID0gMTM0MjYzMDg2NCwgc3MgPSA0MywgX19zc2ggPSAwLCBmcHN0YXRlID0gMHgwLCBvbGRtYXNrID0gMCwKKyAgICBjcjIgPSAxMzQyMTc5MzI4fQorICAoZ2RiKSBwICh2b2lkICopMjY4NTUwODM0CisgICQyID0gKHZvaWQgKikgMHgxMDAxYzJiMgorICAoZ2RiKSBpIHN5bSAkMgorICBibG9ja193cml0ZSArIDEwOTAgaW4gc2VjdGlvbiAudGV4dAorICAoZ2RiKSBpIGxpbmUgKiQyCisgIExpbmUgMjA5IG9mICIvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9pbmNsdWRlL2FzbS9hcmNoL3N0cmluZy5oIgorICAgICBzdGFydHMgYXQgYWRkcmVzcyAweDEwMDFjMmExIDxibG9ja193cml0ZSsxMDczPgorICAgICBhbmQgZW5kcyBhdCAweDEwMDFjMmJmIDxibG9ja193cml0ZSsxMTAzPi4KKyAgKGdkYikgaSBsaW5lICoweDEwMDFjMmMwCisgIExpbmUgMTEwIG9mICJibG9ja19kZXYuYyIgc3RhcnRzIGF0IGFkZHJlc3MgMHgxMDAxYzJiZiA8YmxvY2tfd3JpdGUrMTEwMz4KKyAgICAgYW5kIGVuZHMgYXQgMHgxMDAxYzJlMyA8YmxvY2tfd3JpdGUrMTEzOT4uCisKKworCisKKworICBMb29raW5nIGF0IHRoZSBzb3VyY2Ugc2hvd3MgdGhhdCB0aGUgZmF1bHQgaGFwcGVuZWQgZHVyaW5nIGEgY2FsbCB0bworICBjb3B5X3RvX3VzZXIgdG8gY29weSB0aGUgZGF0YSBpbnRvIHRoZSBrZXJuZWw6CisKKworICAgICAgIDEwNyAgICAgICAgICAgICBjb3VudCAtPSBjaGFyczsKKyAgICAgICAxMDggICAgICAgICAgICAgY29weV9mcm9tX3VzZXIocCxidWYsY2hhcnMpOworICAgICAgIDEwOSAgICAgICAgICAgICBwICs9IGNoYXJzOworICAgICAgIDExMCAgICAgICAgICAgICBidWYgKz0gY2hhcnM7CisKKworCisKKworICBwIGlzIHRoZSBwb2ludGVyIHdoaWNoIG11c3QgY29udGFpbiAweDUwMDAwODAwLCBzaW5jZSBidWYgY29udGFpbnMKKyAgMHg4MGI4ODAwIChmcmFtZSA4IGFib3ZlKS4gIEl0IGlzIGRlZmluZWQgYXM6CisKKworICAgICAgICAgICAgICAgICAgICAgICBwID0gb2Zmc2V0ICsgYmgtPmJfZGF0YTsKKworCisKKworCisgIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYmggaXMsIGFuZCBpdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCBiaCBpcworICBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gbWFya19idWZmZXJfdXB0b2RhdGUgYW5kIG1hcmtfYnVmZmVyX2RpcnR5IGEKKyAgZmV3IGxpbmVzIGxhdGVyLCBzbyBJIGRvIGEgbGl0dGxlIGRpc2Fzc2VtYmx5OgorCisKKworCisgIChnZGIpIGRpc2FzIDB4MTAwMWMyYmYgMHgxMDAxYzJlMAorICBEdW1wIG9mIGFzc2VtYmxlciBjb2RlIGZyb20gMHgxMDAxYzJiZiB0byAweDEwMDFjMmQwOgorICAweDEwMDFjMmJmIDxibG9ja193cml0ZSsxMTAzPjogIGFkZGwgICAlZWF4LDB4YyglZWJwKQorICAweDEwMDFjMmMyIDxibG9ja193cml0ZSsxMTA2PjogIG1vdmwgICAweGZmZmZmZGQ0KCVlYnApLCVlZHgKKyAgMHgxMDAxYzJjOCA8YmxvY2tfd3JpdGUrMTExMj46ICBidHNsICAgJDB4MCwweDE4KCVlZHgpCisgIDB4MTAwMWMyY2QgPGJsb2NrX3dyaXRlKzExMTc+OiAgYnRzbCAgICQweDEsMHgxOCglZWR4KQorICAweDEwMDFjMmQyIDxibG9ja193cml0ZSsxMTIyPjogIHNiYmwgICAlZWN4LCVlY3gKKyAgMHgxMDAxYzJkNCA8YmxvY2tfd3JpdGUrMTEyND46ICB0ZXN0bCAgJWVjeCwlZWN4CisgIDB4MTAwMWMyZDYgPGJsb2NrX3dyaXRlKzExMjY+OiAgam5lICAgIDB4MTAwMWMyZTMgPGJsb2NrX3dyaXRlKzExMzk+CisgIDB4MTAwMWMyZDggPGJsb2NrX3dyaXRlKzExMjg+OiAgcHVzaGwgICQweDAKKyAgMHgxMDAxYzJkYSA8YmxvY2tfd3JpdGUrMTEzMD46ICBwdXNobCAgJWVkeAorICAweDEwMDFjMmRiIDxibG9ja193cml0ZSsxMTMxPjogIGNhbGwgICAweDEwMDE4MTljIDxfX21hcmtfYnVmZmVyX2RpcnR5PgorICBFbmQgb2YgYXNzZW1ibGVyIGR1bXAuCisKKworCisKKworICBBdCB0aGF0IHBvaW50LCBiaCBpcyBpbiAlZWR4IChhZGRyZXNzIDB4MTAwMWMyZGEpLCB3aGljaCBpcyBjYWxjdWxhdGVkCisgIGF0IDB4MTAwMWMyYzIgYXMgJWVicCArIDB4ZmZmZmZkZDQsIHNvIEkgZmlndXJlIGV4YWN0bHkgd2hhdCB0aGF0IGlzLAorICB0YWtpbmcgJWVicCBmcm9tIHRoZSBzaWdjb250ZXh0X3N0cnVjdCBhYm92ZToKKworCisgICAgICAgKGdkYikgcCAodm9pZCAqKTEzNDI2MzE0ODQKKyAgICAgICAkNSA9ICh2b2lkICopIDB4NTAwNmVlM2MKKyAgICAgICAoZ2RiKSBwIDB4NTAwNmVlM2MrMHhmZmZmZmRkNAorICAgICAgICQ2ID0gMTM0MjYzMDkyOAorICAgICAgIChnZGIpIHAgKHZvaWQgKikkNgorICAgICAgICQ3ID0gKHZvaWQgKikgMHg1MDA2ZWMxMAorICAgICAgIChnZGIpIHAgKigodm9pZCAqKikkNykKKyAgICAgICAkOCA9ICh2b2lkICopIDB4NTAxMDAyMDAKKworCisKKworCisgIE5vdywgSSBsb29rIGF0IHRoZSBzdHJ1Y3R1cmUgdG8gc2VlIHdoYXQncyBpbiBpdCwgYW5kIHBhcnRpY3VsYXJseSwKKyAgd2hhdCBpdHMgYl9kYXRhIGZpZWxkIGNvbnRhaW5zOgorCisKKyAgICAgICAoZ2RiKSBwICooKHN0cnVjdCBidWZmZXJfaGVhZCAqKTB4NTAxMDAyMDApCisgICAgICAgJDEzID0ge2JfbmV4dCA9IDB4NTAyODkzODAsIGJfYmxvY2tuciA9IDQ5NDA1LCBiX3NpemUgPSAxMDI0LCBiX2xpc3QgPSAwLAorICAgICAgICAgYl9kZXYgPSAxNTg3MiwgYl9jb3VudCA9IHtjb3VudGVyID0gMX0sIGJfcmRldiA9IDE1ODcyLCBiX3N0YXRlID0gMjQsCisgICAgICAgICBiX2ZsdXNodGltZSA9IDAsIGJfbmV4dF9mcmVlID0gMHg1MDEwMDFhMCwgYl9wcmV2X2ZyZWUgPSAweDUwMTAwMjYwLAorICAgICAgICAgYl90aGlzX3BhZ2UgPSAweDUwMTAwMWEwLCBiX3JlcW5leHQgPSAweDAsIGJfcHByZXYgPSAweDUwN2ZjZjU4LAorICAgICAgICAgYl9kYXRhID0gMHg1MDAwMDgwMCAiIiwgYl9wYWdlID0gMHg1MDAwNDAwMCwKKyAgICAgICAgIGJfZW5kX2lvID0gMHgxMDAxN2Y2MCA8ZW5kX2J1ZmZlcl9pb19zeW5jPiwgYl9kZXZfaWQgPSAweDAsCisgICAgICAgICBiX3JzZWN0b3IgPSA5ODgxMCwgYl93YWl0ID0ge2xvY2sgPSA8b3B0aW1pemVkIG91dCBvciB6ZXJvIGxlbmd0aD4sCisgICAgICAgICAgIHRhc2tfbGlzdCA9IHtuZXh0ID0gMHg1MDEwMDI0OCwgcHJldiA9IDB4NTAxMDAyNDh9LCBfX21hZ2ljID0gMTM0MzIyNjQ0OCwKKyAgICAgICAgICAgX19jcmVhdG9yID0gMH0sIGJfa2lvYnVmID0gMHgwfQorCisKKworCisKKyAgVGhlIGJfZGF0YSBmaWVsZCBpcyBpbmRlZWQgMHg1MDAwMDgwMCwgc28gdGhlIHF1ZXN0aW9uIGJlY29tZXMgaG93CisgIHRoYXQgaGFwcGVuZWQuICBUaGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIGxvb2tzIGZpbmUsIHNvIHRoaXMgcHJvYmFibHkKKyAgaXMgbm90IGEgY2FzZSBvZiBkYXRhIGNvcnJ1cHRpb24uICBJdCBoYXBwZW5lZCBvbiBwdXJwb3NlIHNvbWVob3cuCisKKworICBUaGUgYl9wYWdlIGZpZWxkIGlzIGEgcG9pbnRlciB0byB0aGUgcGFnZV9zdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZQorICAweDUwMDAwMDAwIHBhZ2UuICBMb29raW5nIGF0IGl0IHNob3dzIHRoZSBrZXJuZWwncyBpZGVhIG9mIHRoZSBzdGF0ZQorICBvZiB0aGF0IHBhZ2U6CisKKworCisgIChnZGIpIHAgKiQxMy5iX3BhZ2UKKyAgJDE3ID0ge2xpc3QgPSB7bmV4dCA9IDB4NTAwMDRhNWMsIHByZXYgPSAweDEwMGM1MTc0fSwgbWFwcGluZyA9IDB4MCwKKyAgICBpbmRleCA9IDAsIG5leHRfaGFzaCA9IDB4MCwgY291bnQgPSB7Y291bnRlciA9IDF9LCBmbGFncyA9IDEzMiwgbHJ1ID0geworICAgICAgbmV4dCA9IDB4NTAwMDg0NjAsIHByZXYgPSAweDUwMDE5MzUwfSwgd2FpdCA9IHsKKyAgICAgIGxvY2sgPSA8b3B0aW1pemVkIG91dCBvciB6ZXJvIGxlbmd0aD4sIHRhc2tfbGlzdCA9IHtuZXh0ID0gMHg1MDAwNDAyNCwKKyAgICAgICAgcHJldiA9IDB4NTAwMDQwMjR9LCBfX21hZ2ljID0gMTM0MjE5MzcwOCwgX19jcmVhdG9yID0gMH0sCisgICAgcHByZXZfaGFzaCA9IDB4MCwgYnVmZmVycyA9IDB4NTAxMDAyYzAsIHZpcnR1YWwgPSAxMzQyMTc3MjgwLAorICAgIHpvbmUgPSAweDEwMGM1MTYwfQorCisKKworCisKKyAgU29tZSBzYW5pdHktY2hlY2tpbmc6IHRoZSB2aXJ0dWFsIGZpZWxkIHNob3dzIHRoZSAidmlydHVhbCIgYWRkcmVzcyBvZgorICB0aGlzIHBhZ2UsIHdoaWNoIGluIHRoaXMga2VybmVsIGlzIHRoZSBzYW1lIGFzIGl0cyAicGh5c2ljYWwiIGFkZHJlc3MsCisgIGFuZCB0aGUgcGFnZV9zdHJ1Y3QgaXRzZWxmIHNob3VsZCBiZSBtZW1fbWFwWzBdLCBzaW5jZSBpdCByZXByZXNlbnRzCisgIHRoZSBmaXJzdCBwYWdlIG9mIG1lbW9yeToKKworCisKKyAgICAgICAoZ2RiKSBwICh2b2lkICopMTM0MjE3NzI4MAorICAgICAgICQxOCA9ICh2b2lkICopIDB4NTAwMDAwMDAKKyAgICAgICAoZ2RiKSBwIG1lbV9tYXAKKyAgICAgICAkMTkgPSAobWVtX21hcF90ICopIDB4NTAwMDQwMDAKKworCisKKworCisgIFRoZXNlIGNoZWNrIG91dCBmaW5lLgorCisKKyAgTm93IHRvIGNoZWNrIG91dCB0aGUgcGFnZV9zdHJ1Y3QgaXRzZWxmLiAgSW4gcGFydGljdWxhciwgdGhlIGZsYWdzCisgIGZpZWxkIHNob3dzIHdoZXRoZXIgdGhlIHBhZ2UgaXMgY29uc2lkZXJlZCBmcmVlIG9yIG5vdDoKKworCisgICAgICAgKGdkYikgcCAodm9pZCAqKTEzMgorICAgICAgICQyMSA9ICh2b2lkICopIDB4ODQKKworCisKKworCisgIFRoZSAicmVzZXJ2ZWQiIGJpdCBpcyB0aGUgaGlnaCBiaXQsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHNldCwgc28KKyAgdGhlIGtlcm5lbCBjb25zaWRlcnMgdGhlIHNpZ25hbCBzdGFjayBwYWdlIHRvIGJlIGZyZWUgYW5kIGF2YWlsYWJsZSB0bworICBiZSB1c2VkLgorCisKKyAgQXQgdGhpcyBwb2ludCwgSSBqdW1wIHRvIGNvbmNsdXNpb25zIGFuZCBzdGFydCBsb29raW5nIGF0IG15IGVhcmx5CisgIGJvb3QgY29kZSwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhhdCBwYWdlIGlzIHN1cHBvc2VkIHRvIGJlIHJlc2VydmVkLgorCisKKyAgSW4gbXkgc2V0dXBfYXJjaCBwcm9jZWR1cmUsIEkgaGF2ZSB0aGUgZm9sbG93aW5nIGNvZGUgd2hpY2ggbG9va3MganVzdAorICBmaW5lOgorCisKKworICAgICAgIGJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbShzdGFydF9wZm4sIGVuZF9wZm4gLSBzdGFydF9wZm4pOworICAgICAgIGZyZWVfYm9vdG1lbShfX3BhKGxvd19waHlzbWVtKSArIGJvb3RtYXBfc2l6ZSwgaGlnaF9waHlzbWVtIC0gbG93X3BoeXNtZW0pOworCisKKworCisKKyAgVHdvIHN0YWNrIHBhZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCwgYW5kIGxvd19waHlzbWVtIHBvaW50cyB0bworICB0aGUgdGhpcmQgcGFnZSwgd2hpY2ggaXMgdGhlIGJlZ2lubmluZyBvZiBmcmVlIG1lbW9yeS4KKyAgVGhlIGluaXRfYm9vdG1lbSBjYWxsIGRlY2xhcmVzIHRoZSBlbnRpcmUgbWVtb3J5IHRvIHRoZSBib290IG1lbW9yeQorICBtYW5hZ2VyLCB3aGljaCBtYXJrcyBpdCBhbGwgcmVzZXJ2ZWQuICBUaGUgZnJlZV9ib290bWVtIGNhbGwgZnJlZXMgdXAKKyAgYWxsIG9mIGl0LCBleGNlcHQgZm9yIHRoZSBmaXJzdCB0d28gcGFnZXMuICBUaGlzIGxvb2tzIGNvcnJlY3QgdG8gbWUuCisKKworICBTbywgSSBkZWNpZGUgdG8gc2VlIGluaXRfYm9vdG1lbSBydW4gYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG1hcmtpbmcKKyAgdGhvc2UgZmlyc3QgdHdvIHBhZ2VzIGFzIHJlc2VydmVkLiAgSSBuZXZlciBnZXQgdGhhdCBmYXIuCisKKworICBTdGVwcGluZyBpbnRvIGluaXRfYm9vdG1lbSwgYW5kIGxvb2tpbmcgYXQgYm9vdG1lbV9tYXAgYmVmb3JlIGxvb2tpbmcKKyAgYXQgd2hhdCBpdCBjb250YWlucyBzaG93cyB0aGUgZm9sbG93aW5nOgorCisKKworICAgICAgIChnZGIpIHAgYm9vdG1lbV9tYXAKKyAgICAgICAkMyA9ICh2b2lkICopIDB4NTAwMDAwMDAKKworCisKKworCisgIEFoYSEgIFRoZSBsaWdodCBkYXducy4gIFRoYXQgZmlyc3QgcGFnZSBpcyBkb2luZyBkb3VibGUgZHV0eSBhcyBhCisgIHN0YWNrIGFuZCBhcyB0aGUgYm9vdCBtZW1vcnkgbWFwLiAgVGhlIGxhc3QgdGhpbmcgdGhhdCB0aGUgYm9vdCBtZW1vcnkKKyAgbWFuYWdlciBkb2VzIGlzIHRvIGZyZWUgdGhlIHBhZ2VzIHVzZWQgYnkgaXRzIG1lbW9yeSBtYXAsIHNvIHRoaXMgcGFnZQorICBpcyBnZXR0aW5nIGZyZWVkIGV2ZW4gaXRzIG1hcmtlZCBhcyByZXNlcnZlZC4KKworCisgIFRoZSBmaXggd2FzIHRvIGluaXRpYWxpemUgdGhlIGJvb3QgbWVtb3J5IG1hbmFnZXIgYmVmb3JlIGFsbG9jYXRpbmcKKyAgdGhvc2UgdHdvIHN0YWNrIHBhZ2VzLCBhbmQgdGhlbiBhbGxvY2F0ZSB0aGVtIHRocm91Z2ggdGhlIGJvb3QgbWVtb3J5CisgIG1hbmFnZXIuICBBZnRlciBkb2luZyB0aGlzLCBhbmQgZml4aW5nIGEgY291cGxlIG9mIHN1YnNlcXVlbnQgYnVnbGV0cywKKyAgdGhlIHN0YWNrIGNvcnJ1cHRpb24gcHJvYmxlbSBkaXNhcHBlYXJlZC4KKworCisKKworCisgIDEIMTMIMy4ILiAgVwhXaAhoYQhhdAh0IHQIdG8IbyBkCGRvCG8gdwh3aAhoZQhlbghuIFUIVU0ITUwITCBkCGRvCG9lCGVzCHNuCG4nCCd0CHQgdwh3bwhvcghyawhrCisKKworCisKKyAgMQgxMwgzLgguMQgxLgguICBTCFN0CHRyCHJhCGFuCG5nCGdlCGUgYwhjbwhvbQhtcAhwaQhpbAhsYQhhdAh0aQhpbwhvbghuIGUIZXIIcnIIcm8Ib3IIcnMIcyB3CHdoCGhlCGVuCG4geQh5bwhvdQh1IGIIYnUIdWkIaWwIbGQIZCBmCGZyCHJvCG9tCG0gcwhzbwhvdQh1cghyYwhjZQhlCisKKyAgQXMgb2YgdGVzdDExLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSAiQVJDSD11bSIgaW4gdGhlIGVudmlyb25tZW50IG9yCisgIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZSBmb3IgYWxsIHN0ZXBzIGluIGJ1aWxkaW5nIFVNTCwgaW5jbHVkaW5nCisgIGNsZWFuLCBkaXN0Y2xlYW4sIG9yIG1ycHJvcGVyLCBjb25maWcsIG1lbnVjb25maWcsIG9yIHhjb25maWcsIGRlcCwKKyAgYW5kIGxpbnV4LiAgSWYgeW91IGZvcmdldCBmb3IgYW55IG9mIHRoZW0sIHRoZSBpMzg2IGJ1aWxkIHNlZW1zIHRvCisgIGNvbnRhbWluYXRlIHRoZSBVTUwgYnVpbGQuICBJZiB0aGlzIGhhcHBlbnMsIHN0YXJ0IGZyb20gc2NyYXRjaCB3aXRoCisKKworICAgICAgIGhvc3QlCisgICAgICAgbWFrZSBtcnByb3BlciBBUkNIPXVtCisKKworCisKKyAgYW5kIHJlcGVhdCB0aGUgYnVpbGQgcHJvY2VzcyB3aXRoIEFSQ0g9dW0gb24gYWxsIHRoZSBzdGVwcy4KKworCisgIFNlZSBgYENvbXBpbGluZyB0aGUga2VybmVsIGFuZCBtb2R1bGVzJycgIGZvciBtb3JlIGRldGFpbHMuCisKKworICBBbm90aGVyIGNhdXNlIG9mIHN0cmFuZ2UgY29tcGlsYXRpb24gZXJyb3JzIGlzIGJ1aWxkaW5nIFVNTCBpbgorICAvdXNyL3NyYy9saW51eC4gIElmIHlvdSBkbyB0aGlzLCB0aGUgZmlyc3QgdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMKKyAgY2xlYW4gdXAgdGhlIG1lc3MgeW91IG1hZGUuICBUaGUgL3Vzci9zcmMvbGludXgvYXNtIGxpbmsgd2lsbCBub3cKKyAgcG9pbnQgdG8gL3Vzci9zcmMvbGludXgvYXNtLXVtLiAgTWFrZSBpdCBwb2ludCBiYWNrIHRvCisgIC91c3Ivc3JjL2xpbnV4L2FzbS1pMzg2LiAgVGhlbiwgbW92ZSB5b3VyIFVNTCBwb29sIHNvbWVwbGFjZSBlbHNlIGFuZAorICBidWlsZCBpdCB0aGVyZS4gIEFsc28gc2VlIGJlbG93LCB3aGVyZSBhIG1vcmUgc3BlY2lmaWMgc2V0IG9mIHN5bXB0b21zCisgIGlzIGRlc2NyaWJlZC4KKworCisKKyAgMQgxMwgzLgguMggyLgguICBVCFVNCE1MCEwgaAhoYQhhbghuZwhncwhzIG8Ib24IbiBiCGJvCG9vCG90CHQgYQhhZghmdAh0ZQhlcghyIG0IbW8Ib3UIdW4IbnQIdGkIaW4IbmcIZyBkCGRlCGV2CHZmCGZzCHMKKworICBUaGUgYm9vdCBsb29rcyBsaWtlIHRoaXM6CisKKworICAgICAgIFZGUzogTW91bnRlZCByb290IChleHQyIGZpbGVzeXN0ZW0pIHJlYWRvbmx5LgorICAgICAgIE1vdW50ZWQgZGV2ZnMgb24gL2RldgorCisKKworCisgIFlvdSdyZSBwcm9iYWJseSBydW5uaW5nIGEgcmVjZW50IGRpc3RyaWJ1dGlvbiBvbiBhbiBvbGQgbWFjaGluZS4gIEkKKyAgc2F3IHRoaXMgd2l0aCB0aGUgUkg3LjEgZmlsZXN5c3RlbSBydW5uaW5nIG9uIGEgUGVudGl1bS4gIFRoZSBzaGFyZWQKKyAgbGlicmFyeSBsb2FkZXIsIGxkLnNvLCB3YXMgZXhlY3V0aW5nIGFuIGluc3RydWN0aW9uIChjbW92ZSkgd2hpY2ggdGhlCisgIFBlbnRpdW0gZGlkbid0IHN1cHBvcnQuICBUaGF0IGluc3RydWN0aW9uIHdhcyBhcHBhcmVudGx5IGFkZGVkIGxhdGVyLgorICBJZiB5b3UgcnVuIFVNTCB1bmRlciB0aGUgZGVidWdnZXIsIHlvdSdsbCBzZWUgdGhlIGhhbmcgY2F1c2VkIGJ5IG9uZQorICBpbnN0cnVjdGlvbiBjYXVzaW5nIGFuIGluZmluaXRlIFNJR0lMTCBzdHJlYW0uCisKKworICBUaGUgZml4IGlzIHRvIGJvb3QgVU1MIG9uIGFuIG9sZGVyIGZpbGVzeXN0ZW0uCisKKworCisgIDEIMTMIMy4ILjMIMy4ILiAgQQhBIHYIdmEIYXIIcmkIaWUIZXQIdHkIeSBvCG9mCGYgcAhwYQhhbghuaQhpYwhjcwhzIGEIYW4IbmQIZCBoCGhhCGFuCG5nCGdzCHMgdwh3aQhpdAh0aAhoIC8IL3QIdG0IbXAIcCBvCG9uCG4gYQhhIHIIcmUIZWkIaXMIc2UIZXIIcmYIZnMIcyAgZghmaQhpbAhsZQhlcwhzeQh5cwhzLQgtCisgIHQIdGUIZW0IbQorCisgIEkgc2F3IHRoaXMgb24gcmVpc2VyZnMgMy41LjIxIGFuZCBpdCBzZWVtcyB0byBiZSBmaXhlZCBpbiAzLjUuMjcuCisgIFBhbmljcyBwcmVjZWRlZCBieQorCisKKyAgICAgICBEZXRhY2hpbmcgcGlkIG5ubm4KKworCisKKyAgYXJlIGRpYWdub3N0aWMgb2YgdGhpcyBwcm9ibGVtLiAgVGhpcyBpcyBhIHJlaXNlcmZzIGJ1ZyB3aGljaCBjYXVzZXMgYQorICB0aHJlYWQgdG8gb2NjYXNpb25hbGx5IHJlYWQgc3RhbGUgZGF0YSBmcm9tIGEgbW1hcHBlZCBwYWdlIHNoYXJlZCB3aXRoCisgIGFub3RoZXIgdGhyZWFkLiAgVGhlIGZpeCBpcyB0byB1cGdyYWRlIHRoZSBmaWxlc3lzdGVtIG9yIHRvIGhhdmUgL3RtcAorICBiZSBhbiBleHQyIGZpbGVzeXN0ZW0uCisKKworCisgIDEIMTMIMy4ILjQINC4ILiAgVAhUaAhoZQhlIGMIY28Ib20IbXAIcGkIaWwIbGUIZSBmCGZhCGFpCGlsCGxzCHMgdwh3aQhpdAh0aAhoIGUIZXIIcnIIcm8Ib3IIcnMIcyBhCGFiCGJvCG91CHV0CHQgYwhjbwhvbghuZghmbAhsaQhpYwhjdAh0aQhpbghuZwhnIHQIdHkIeXAIcGUIZXMIcyBmCGZvCG9yCHIKKyAgJwgnbwhvcAhwZQhlbghuJwgnLAgsICcIJ2QIZHUIdXAIcCcIJywILCBhCGFuCG5kCGQgJwgndwh3YQhhaQhpdAh0cAhwaQhpZAhkJwgnCisKKyAgVGhpcyBoYXBwZW5zIHdoZW4geW91IGJ1aWxkIGluIC91c3Ivc3JjL2xpbnV4LiAgVGhlIFVNTCBidWlsZCBtYWtlcworICB0aGUgaW5jbHVkZS9hc20gbGluayBwb2ludCB0byBpbmNsdWRlL2FzbS11bS4gIC91c3IvaW5jbHVkZS9hc20gcG9pbnRzCisgIHRvIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYXNtLCBzbyB3aGVuIHRoYXQgbGluayBnZXRzIG1vdmVkLCBmaWxlcworICB3aGljaCBuZWVkIHRvIGluY2x1ZGUgdGhlIGFzbS1pMzg2IHZlcnNpb25zIG9mIGhlYWRlcnMgZ2V0IHRoZQorICBpbmNvbXBhdGlibGUgYXNtLXVtIHZlcnNpb25zLiAgVGhlIGZpeCBpcyB0byBtb3ZlIHRoZSBpbmNsdWRlL2FzbSBsaW5rCisgIGJhY2sgdG8gaW5jbHVkZS9hc20taTM4NiBhbmQgdG8gZG8gVU1MIGJ1aWxkcyBzb21lcGxhY2UgZWxzZS4KKworCisKKyAgMQgxMwgzLgguNQg1LgguICBVCFVNCE1MCEwgZAhkbwhvZQhlcwhzbghuJwgndAh0IHcId28Ib3IIcmsIayB3CHdoCGhlCGVuCG4gLwgvdAh0bQhtcAhwIGkIaXMIcyBhCGFuCG4gTghORghGUwhTIGYIZmkIaWwIbGUIZXMIc3kIeXMIc3QIdGUIZW0IbQorCisgIFRoaXMgc2VlbXMgdG8gYmUgYSBzaW1pbGFyIHNpdHVhdGlvbiB3aXRoIHRoZSByZXNpZXJmcyBwcm9ibGVtIGFib3ZlLgorICBTb21lIHZlcnNpb25zIG9mIE5GUyBzZWVtcyBub3QgdG8gaGFuZGxlIG1tYXAgY29ycmVjdGx5LCB3aGljaCBVTUwKKyAgZGVwZW5kcyBvbi4gIFRoZSB3b3JrYXJvdW5kIGlzIGhhdmUgL3RtcCBiZSBub24tTkZTIGRpcmVjdG9yeS4KKworCisgIDEIMTMIMy4ILjYINi4ILiAgVQhVTQhNTAhMIGgIaGEIYW4IbmcIZ3MIcyBvCG9uCG4gYghibwhvbwhvdAh0IHcId2gIaGUIZW4IbiBjCGNvCG9tCG1wCHBpCGlsCGxlCGVkCGQgdwh3aQhpdAh0aAhoIGcIZ3AIcHIIcm8Ib2YIZiBzCHN1CHVwCHBwCHBvCG9yCHJ0CHQKKworICBJZiB5b3UgYnVpbGQgVU1MIHdpdGggZ3Byb2Ygc3VwcG9ydCBhbmQsIGVhcmx5IGluIHRoZSBib290LCBpdCBkb2VzCisgIHRoaXMKKworCisgICAgICAga2VybmVsIEJVRyBhdCBwYWdlX2FsbG9jLmM6MTAwIQorCisKKworCisgIHlvdSBoYXZlIGEgYnVnZ3kgZ2NjLiAgWW91IGNhbiB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBieSByZW1vdmluZworICBVTV9GQVNUQ0FMTCBmcm9tIENGTEFHUyBpbiBhcmNoL3VtL01ha2VmaWxlLWkzODYuICBUaGlzIHdpbGwgb3BlbiB1cAorICBhbm90aGVyIGJ1ZywgYnV0IHRoYXQgb25lIGlzIGZhaXJseSBoYXJkIHRvIHJlcHJvZHVjZS4KKworCisKKyAgMQgxMwgzLgguNwg3LgguICBzCHN5CHlzCHNsCGxvCG9nCGdkCGQgZAhkaQhpZQhlcwhzIHcId2kIaXQIdGgIaCBhCGEgUwhTSQhJRwhHVAhURQhFUghSTQhNIG8Ib24IbiBzCHN0CHRhCGFyCHJ0CHR1CHVwCHAKKworICBUaGUgZXhhY3QgYm9vdCBlcnJvciBkZXBlbmRzIG9uIHRoZSBkaXN0cmlidXRpb24gdGhhdCB5b3UncmUgYm9vdGluZywKKyAgYnV0IERlYmlhbiBwcm9kdWNlcyB0aGlzOgorCisKKyAgICAgICAvZXRjL3JjMi5kL1MxMHN5c2tsb2dkOiBsaW5lIDQ5OiAgICA5MyBUZXJtaW5hdGVkCisgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9zeXNsb2dkIC0tICRTWVNMT0dECisKKworCisKKyAgVGhpcyBpcyBhIHN5c2xvZ2QgYnVnLiAgVGhlcmUncyBhIHJhY2UgYmV0d2VlbiBhIHBhcmVudCBwcm9jZXNzCisgIGluc3RhbGxpbmcgYSBzaWduYWwgaGFuZGxlciBhbmQgaXRzIGNoaWxkIHNlbmRpbmcgdGhlIHNpZ25hbC4gIFNlZQorICB0aGlzIHVtbC1kZXZlbCBwb3N0IDxodHRwOi8vd3d3Lmdlb2NyYXdsZXIuY29tL2xpc3RzLzMvU291cmNlLQorICBGb3JnZS83MDkvMC82NjEyODAxPiAgZm9yIHRoZSBkZXRhaWxzLgorCisKKworICAxCDEzCDMuCC44CDguCC4gIFQIVFUIVU4ITi8IL1QIVEEIQVAIUCBuCG5lCGV0CHR3CHdvCG9yCHJrCGtpCGluCG5nCGcgZAhkbwhvZQhlcwhzbghuJwgndAh0IHcId28Ib3IIcmsIayBvCG9uCG4gYQhhIDIIMi4ILjQINCBoCGhvCG9zCHN0CHQKKworICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgcHJvYmxlbXMgd2hpY2ggd2VyZQorICA8aHR0cDovL3d3dy5nZW9jcmF3bGVyLmNvbS9saXN0cy8zL1NvdXJjZUZvcmdlLzU5Ny8wLz4gbmFtZT0icG9pbnRlZAorICBvdXQiPiAgYnkgVGltIFJvYmluc29uIDx0aW1ybyBhdCB0cmtyIGRvdCBuZXQ+CisKKyAgKwhvICBJdCBkb2Vzbid0IHdvcmsgb24gaG9zdHMgcnVubmluZyAyLjQuNyAob3IgdGhlcmVhYm91dHMpIG9yIGVhcmxpZXIuCisgICAgIFRoZSBmaXggaXMgdG8gdXBncmFkZSB0byBzb21ldGhpbmcgbW9yZSByZWNlbnQgYW5kIHRoZW4gcmVhZCB0aGUKKyAgICAgbmV4dCBpdGVtLgorCisgICsIbyAgSWYgeW91IHNlZQorCisKKyAgICAgICBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlCisKKworCisgIHdoZW4geW91IGJyaW5nIHVwIHRoZSBkZXZpY2UgaW5zaWRlIFVNTCwgeW91IGhhdmUgYSBoZWFkZXIgbWlzbWF0Y2gKKyAgYmV0d2VlbiB0aGUgb3JpZ2luYWwga2VybmVsIGFuZCB0aGUgdXBncmFkZWQgb25lLiAgTWFrZSAvdXNyL3NyYy9saW51eAorICBwb2ludCBhdCB0aGUgbmV3IGhlYWRlcnMuICBUaGlzIHdpbGwgb25seSBiZSBhIHByb2JsZW0gaWYgeW91IGJ1aWxkCisgIHVtbF9uZXQgeW91cnNlbGYuCisKKworCisgIDEIMTMIMy4ILjkIOS4ILiAgWQhZbwhvdQh1IGMIY2EIYW4IbiBuCG5lCGV0CHR3CHdvCG9yCHJrCGsgdAh0bwhvIHQIdGgIaGUIZSBoCGhvCG9zCHN0CHQgYghidQh1dAh0IG4Ibm8Ib3QIdCB0CHRvCG8gbwhvdAh0aAhoZQhlcghyIG0IbWEIYWMIY2gIaGkIaW4IbmUIZXMIcyBvCG9uCG4gdAh0aAhoZQhlCisgIG4IbmUIZXQIdAorCisgIElmIHlvdSBjYW4gY29ubmVjdCB0byB0aGUgaG9zdCwgYW5kIHRoZSBob3N0IGNhbiBjb25uZWN0IHRvIFVNTCwgYnV0CisgIHlvdSBjYW4gbm90IGNvbm5lY3QgdG8gYW55IG90aGVyIG1hY2hpbmVzLCB0aGVuIHlvdSBtYXkgbmVlZCB0byBlbmFibGUKKyAgSVAgTWFzcXVlcmFkaW5nIG9uIHRoZSBob3N0LiAgVXN1YWxseSB0aGlzIGlzIG9ubHkgZXhwZXJpZW5jZWQgd2hlbgorICB1c2luZyBwcml2YXRlIElQIGFkZHJlc3NlcyAoMTkyLjE2OC54Lnggb3IgMTAueC54LngpIGZvciBob3N0L1VNTAorICBuZXR3b3JraW5nLCByYXRoZXIgdGhhbiB0aGUgcHVibGljIGFkZHJlc3Mgc3BhY2UgdGhhdCB5b3VyIGhvc3QgaXMKKyAgY29ubmVjdGVkIHRvLiAgVU1MIGRvZXMgbm90IGVuYWJsZSBJUCBNYXNxdWVyYWRpbmcsIHNvIHlvdSB3aWxsIG5lZWQKKyAgdG8gY3JlYXRlIGEgc3RhdGljIHJ1bGUgdG8gZW5hYmxlIGl0OgorCisKKyAgICAgICBob3N0JQorICAgICAgIGlwdGFibGVzIC10IG5hdCAtQSBQT1NUUk9VVElORyAtbyBldGgwIC1qIE1BU1FVRVJBREUKKworCisKKworICBSZXBsYWNlIGV0aDAgd2l0aCB0aGUgaW50ZXJmYWNlIHRoYXQgeW91IHVzZSB0byB0YWxrIHRvIHRoZSByZXN0IG9mCisgIHRoZSB3b3JsZC4KKworCisgIERvY3VtZW50YXRpb24gb24gSVAgTWFzcXVlcmFkaW5nLCBhbmQgU05BVCwgY2FuIGJlIGZvdW5kIGF0CisgIHd3dy5uZXRmaWx0ZXIub3JnICA8aHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnPiAuCisKKworICBJZiB5b3UgY2FuIHJlYWNoIHRoZSBsb2NhbCBuZXQsIGJ1dCBub3QgdGhlIG91dHNpZGUgSW50ZXJuZXQsIHRoZW4KKyAgdGhhdCBpcyB1c3VhbGx5IGEgcm91dGluZyBwcm9ibGVtLiAgVGhlIFVNTCBuZWVkcyBhIGRlZmF1bHQgcm91dGU6CisKKworICAgICAgIFVNTCMKKyAgICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyBnYXRld2F5IElQCisKKworCisKKyAgVGhlIGdhdGV3YXkgSVAgY2FuIGJlIGFueSBtYWNoaW5lIG9uIHRoZSBsb2NhbCBuZXQgdGhhdCBrbm93cyBob3cgdG8KKyAgcmVhY2ggdGhlIG91dHNpZGUgd29ybGQuICBVc3VhbGx5LCB0aGlzIGlzIHRoZSBob3N0IG9yIHRoZSBsb2NhbCBuZXQtCisgIHdvcmsncyBnYXRld2F5LgorCisKKyAgT2NjYXNpb25hbGx5LCB3ZSBoZWFyIGZyb20gc29tZW9uZSB3aG8gY2FuIHJlYWNoIHNvbWUgbWFjaGluZXMsIGJ1dAorICBub3Qgb3RoZXJzIG9uIHRoZSBzYW1lIG5ldCwgb3Igd2hvIGNhbiByZWFjaCBzb21lIHBvcnRzIG9uIG90aGVyCisgIG1hY2hpbmVzLCBidXQgbm90IG90aGVycy4gIFRoZXNlIGFyZSB1c3VhbGx5IGNhdXNlZCBieSBzdHJhbmdlCisgIGZpcmV3YWxsaW5nIHNvbWV3aGVyZSBiZXR3ZWVuIHRoZSBVTUwgYW5kIHRoZSBvdGhlciBib3guICBZb3UgdHJhY2sKKyAgdGhpcyBkb3duIGJ5IHJ1bm5pbmcgdGNwZHVtcCBvbiBldmVyeSBpbnRlcmZhY2UgdGhlIHBhY2tldHMgdHJhdmVsCisgIG92ZXIgYW5kIHNlZSB3aGVyZSB0aGV5IGRpc2FwcGVhci4gIFdoZW4geW91IGZpbmQgYSBtYWNoaW5lIHRoYXQgdGFrZXMKKyAgdGhlIHBhY2tldHMgaW4sIGJ1dCBkb2VzIG5vdCBzZW5kIHRoZW0gb253YXJkLCB0aGF0J3MgdGhlIGN1bHByaXQuCisKKworCisgIDEIMTMIMy4ILjEIMTAIMC4ILiAgSQhJIGgIaGEIYXYIdmUIZSBuCG5vCG8gcghybwhvbwhvdAh0IGEIYW4IbmQIZCBJCEkgdwh3YQhhbghudAh0IHQIdG8IbyBzCHNjCGNyCHJlCGVhCGFtCG0KKworICBUaGFua3MgdG8gQmlyZ2l0IFdhaGxpY2ggZm9yIHRlbGxpbmcgbWUgYWJvdXQgdGhpcyBzdHJhbmdlIG9uZS4gIEl0CisgIHR1cm5zIG91dCB0aGF0IHRoZXJlJ3MgYSBsaW1pdCBvZiBzaXggZW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIHRoZQorICBrZXJuZWwgY29tbWFuZCBsaW5lLiAgV2hlbiB0aGF0IGxpbWl0IGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQsIGFyZ3VtZW50CisgIHByb2Nlc3Npbmcgc3RvcHMsIHdoaWNoIG1lYW5zIHRoYXQgdGhlICdyb290PScgYXJndW1lbnQgdGhhdCBVTUwKKyAgdXN1YWxseSBhZGRzIGlzIG5vdCBzZWVuLiAgU28sIHRoZSBmaWxlc3lzdGVtIGhhcyBubyBpZGVhIHdoYXQgdGhlCisgIHJvb3QgZGV2aWNlIGlzLCBzbyBpdCBwYW5pY3MuCisKKworICBUaGUgZml4IGlzIHRvIHB1dCBsZXNzIHN0dWZmIG9uIHRoZSBjb21tYW5kIGxpbmUuICBHbG9tbWluZyBhbGwgeW91cgorICBzZXR1cCB2YXJpYWJsZXMgaW50byBvbmUgaXMgcHJvYmFibHkgdGhlIGJlc3Qgd2F5IHRvIGdvLgorCisKKworICAxCDEzCDMuCC4xCDExCDEuCC4gIFUIVU0ITUwITCBiCGJ1CHVpCGlsCGxkCGQgYwhjbwhvbghuZghmbAhsaQhpYwhjdAh0IGIIYmUIZXQIdHcId2UIZWUIZW4IbiBwCHB0CHRyCHJhCGFjCGNlCGUuCC5oCGggYQhhbghuZAhkIHUIdWMIY28Ib24IbnQIdGUIZXgIeHQIdC4ILmgIaAorCisgIE9uIHNvbWUgb2xkZXIgc3lzdGVtcywgL3Vzci9pbmNsdWRlL2FzbS9wdHJhY2UuaCBhbmQKKyAgL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIGRlZmluZSB0aGUgc2FtZSBuYW1lcy4gIFNvLCB3aGVuIHRoZXkncmUKKyAgaW5jbHVkZWQgdG9nZXRoZXIsIHRoZSBkZWZpbmVzIGZyb20gb25lIGNvbXBsZXRlbHkgbWVzcyB1cCB0aGUgcGFyc2luZworICBvZiB0aGUgb3RoZXIsIHByb2R1Y2luZyBlcnJvcnMgbGlrZToKKyAgICAgICAvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0Lmg6NDc6IHBhcnNlIGVycm9yIGJlZm9yZQorICAgICAgIGAxMCcKKworCisKKworICBwbHVzIGEgcGlsZSBvZiB3YXJuaW5ncy4KKworCisgIFRoaXMgaXMgYSBsaWJjIGJvdGNoLCB3aGljaCBoYXMgc2luY2UgYmVlbiBmaXhlZCwgYW5kIEkgZG9uJ3Qgc2VlIGFueQorICB3YXkgYXJvdW5kIGl0IGJlc2lkZXMgdXBncmFkaW5nLgorCisKKworICAxCDEzCDMuCC4xCDEyCDIuCC4gIFQIVGgIaGUIZSBVCFVNCE1MCEwgQghCbwhvZwhnbwhvTQhNaQhpcAhwcwhzIGkIaXMIcyBlCGV4CHhhCGFjCGN0CHRsCGx5CHkgaAhoYQhhbAhsZghmIHQIdGgIaGUIZSBoCGhvCG9zCHN0CHQnCCdzCHMgQghCbwhvZwhnbwhvTQhNaQhpcAhwcwhzCisKKyAgT24gaTM4NiBrZXJuZWxzLCB0aGVyZSBhcmUgdHdvIHdheXMgb2YgcnVubmluZyB0aGUgbG9vcCB0aGF0IGlzIHVzZWQKKyAgdG8gY2FsY3VsYXRlIHRoZSBCb2dvTWlwcyByYXRpbmcsIHVzaW5nIHRoZSBUU0MgaWYgaXQncyB0aGVyZSBvciB1c2luZworICBhIG9uZS1pbnN0cnVjdGlvbiBsb29wLiAgVGhlIFRTQyBwcm9kdWNlcyB0d2ljZSB0aGUgQm9nb01pcHMgYXMgdGhlCisgIGxvb3AuICBVTUwgdXNlcyB0aGUgbG9vcCwgc2luY2UgaXQgaGFzIG5vdGhpbmcgcmVzZW1ibGluZyBhIFRTQywgYW5kCisgIHdpbGwgZ2V0IGFsbW9zdCBleGFjdGx5IHRoZSBzYW1lIEJvZ29NaXBzIGFzIGEgaG9zdCB1c2luZyB0aGUgbG9vcC4KKyAgSG93ZXZlciwgb24gYSBob3N0IHdpdGggYSBUU0MsIGl0cyBCb2dvTWlwcyB3aWxsIGJlIGRvdWJsZSB0aGUgbG9vcAorICBCb2dvTWlwcywgYW5kIHRoZXJlZm9yZSBkb3VibGUgdGhlIFVNTCBCb2dvTWlwcy4KKworCisKKyAgMQgxMwgzLgguMQgxMwgzLgguICBXCFdoCGhlCGVuCG4geQh5bwhvdQh1IHIIcnUIdW4IbiBVCFVNCE1MCEwsCCwgaQhpdAh0IGkIaW0IbW0IbWUIZWQIZGkIaWEIYXQIdGUIZWwIbHkIeSBzCHNlCGVnCGdmCGZhCGF1CHVsCGx0CHRzCHMKKworICBJZiB0aGUgaG9zdCBpcyBjb25maWd1cmVkIHdpdGggdGhlIDJHLzJHIGFkZHJlc3Mgc3BhY2Ugc3BsaXQsIHRoYXQncworICB3aHkuICBTZWUgYGBVTUwgb24gMkcvMkcgaG9zdHMnJyAgZm9yIHRoZSBkZXRhaWxzIG9uIGdldHRpbmcgVU1MIHRvCisgIHJ1biBvbiB5b3VyIGhvc3QuCisKKworCisgIDEIMTMIMy4ILjEIMTQINC4ILiAgeAh4dAh0ZQhlcghybQhtcwhzIGEIYXAIcHAIcGUIZWEIYXIIciwILCB0CHRoCGhlCGVuCG4gaQhpbQhtbQhtZQhlZAhkaQhpYQhhdAh0ZQhlbAhseQh5IGQIZGkIaXMIc2EIYXAIcHAIcGUIZWEIYXIIcgorCisgIElmIHlvdSdyZSBydW5uaW5nIGFuIHVwIHRvIGRhdGUga2VybmVsIHdpdGggYW4gb2xkIHJlbGVhc2Ugb2YKKyAgdW1sX3V0aWxpdGllcywgdGhlIHBvcnQtaGVscGVyIHByb2dyYW0gd2lsbCBub3Qgd29yayBwcm9wZXJseSwgc28KKyAgeHRlcm1zIHdpbGwgZXhpdCBzdHJhaWdodCBhZnRlciB0aGV5IGFwcGVhci4gVGhlIHNvbHV0aW9uIGlzIHRvCisgIHVwZ3JhZGUgdG8gdGhlIGxhdGVzdCByZWxlYXNlIG9mIHVtbF91dGlsaXRpZXMuICBVc3VhbGx5IHRoaXMgcHJvYmxlbQorICBvY2N1cnMgd2hlbiB5b3UgaGF2ZSBpbnN0YWxsZWQgYSBwYWNrYWdlZCByZWxlYXNlIG9mIFVNTCB0aGVuIGNvbXBpbGVkCisgIHlvdXIgb3duIGRldmVsb3BtZW50IGtlcm5lbCB3aXRob3V0IHVwZ3JhZGluZyB0aGUgdW1sX3V0aWxpdGllcyBmcm9tCisgIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisKKworICAxCDEzCDMuCC4xCDE1CDUuCC4gIEEIQW4IbnkIeSBvCG90CHRoCGhlCGVyCHIgcAhwYQhhbghuaQhpYwhjLAgsIGgIaGEIYW4IbmcIZywILCBvCG9yCHIgcwhzdAh0cghyYQhhbghuZwhnZQhlIGIIYmUIZWgIaGEIYXYIdmkIaW8Ib3IIcgorCisgIElmIHlvdSdyZSBzZWVpbmcgdHJ1bHkgc3RyYW5nZSBiZWhhdmlvciwgc3VjaCBhcyBoYW5ncyBvciBwYW5pY3MgdGhhdAorICBoYXBwZW4gaW4gcmFuZG9tIHBsYWNlcywgb3IgeW91IHRyeSBydW5uaW5nIHRoZSBkZWJ1Z2dlciB0byBzZWUgd2hhdCdzCisgIGhhcHBlbmluZyBhbmQgaXQgYWN0cyBzdHJhbmdlbHksIHRoZW4gaXQgY291bGQgYmUgYSBwcm9ibGVtIGluIHRoZQorICBob3N0IGtlcm5lbC4gIElmIHlvdSdyZSBub3QgcnVubmluZyBhIHN0b2NrIExpbnVzIG9yIC1hYyBrZXJuZWwsIHRoZW4KKyAgdHJ5IHRoYXQuICBBbiBlYXJseSB2ZXJzaW9uIG9mIHRoZSBwcmVlbXB0aW9uIHBhdGNoIGFuZCBhIDIuNC4xMCBTdVNFCisgIGtlcm5lbCBoYXZlIGNhdXNlZCB2ZXJ5IHN0cmFuZ2UgcHJvYmxlbXMgaW4gVU1MLgorCisKKyAgT3RoZXJ3aXNlLCBsZXQgbWUga25vdyBhYm91dCBpdC4gIFNlbmQgYSBtZXNzYWdlIHRvIG9uZSBvZiB0aGUgVU1MCisgIG1haWxpbmcgbGlzdHMgLSBlaXRoZXIgdGhlIGRldmVsb3BlciBsaXN0IC0gdXNlci1tb2RlLWxpbnV4LWRldmVsIGF0CisgIGxpc3RzIGRvdCBzb3VyY2Vmb3JnZSBkb3QgbmV0IChzdWJzY3JpcHRpb24gaW5mbykgb3IgdGhlIHVzZXIgbGlzdCAtCisgIHVzZXItbW9kZS1saW51eC11c2VyIGF0IGxpc3RzIGRvdCBzb3VyY2Vmb3JnZSBkbyBuZXQgKHN1YnNjcmlwdGlvbgorICBpbmZvKSwgd2hpY2hldmVyIHlvdSBwcmVmZXIuICBEb24ndCBhc3N1bWUgdGhhdCBldmVyeW9uZSBrbm93cyBhYm91dAorICBpdCBhbmQgdGhhdCBhIGZpeCBpcyBpbW1pbmVudC4KKworCisgIElmIHlvdSB3YW50IHRvIGJlIHN1cGVyLWhlbHBmdWwsIHJlYWQgYGBEaWFnbm9zaW5nIFByb2JsZW1zJycgYW5kCisgIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGNvbnRhaW5lZCB0aGVyZWluLgorICAxCDE0CDQuCC4gIEQIRGkIaWEIYWcIZ24Ibm8Ib3MIc2kIaW4IbmcIZyBQCFByCHJvCG9iCGJsCGxlCGVtCG1zCHMKKworCisgIElmIHlvdSBnZXQgVU1MIHRvIGNyYXNoLCBoYW5nLCBvciBvdGhlcndpc2UgbWlzYmVoYXZlLCB5b3Ugc2hvdWxkCisgIHJlcG9ydCB0aGlzIG9uIG9uZSBvZiB0aGUgcHJvamVjdCBtYWlsaW5nIGxpc3RzLCBlaXRoZXIgdGhlIGRldmVsb3BlcgorICBsaXN0IC0gdXNlci1tb2RlLWxpbnV4LWRldmVsIGF0IGxpc3RzIGRvdCBzb3VyY2Vmb3JnZSBkb3QgbmV0CisgIChzdWJzY3JpcHRpb24gaW5mbykgb3IgdGhlIHVzZXIgbGlzdCAtIHVzZXItbW9kZS1saW51eC11c2VyIGF0IGxpc3RzCisgIGRvdCBzb3VyY2Vmb3JnZSBkb3QgbmV0IChzdWJzY3JpcHRpb24gaW5mbykuICBXaGVuIHlvdSBkbywgaXQgaXMKKyAgbGlrZWx5IHRoYXQgSSB3aWxsIHdhbnQgbW9yZSBpbmZvcm1hdGlvbi4gIFNvLCBpdCB3b3VsZCBiZSBoZWxwZnVsIHRvCisgIHJlYWQgdGhlIHN0dWZmIGJlbG93LCBkbyB3aGF0ZXZlciBpcyBhcHBsaWNhYmxlIGluIHlvdXIgY2FzZSwgYW5kCisgIHJlcG9ydCB0aGUgcmVzdWx0cyB0byB0aGUgbGlzdC4KKworCisgIEZvciBhbnkgZGlhZ25vc2lzLCB5b3UncmUgZ29pbmcgdG8gbmVlZCB0byBidWlsZCBhIGRlYnVnZ2luZyBrZXJuZWwuCisgIFRoZSBiaW5hcmllcyBmcm9tIHRoaXMgc2l0ZSBhcmVuJ3QgZGVidWdnYWJsZS4gIElmIHlvdSBoYXZlbid0IGRvbmUKKyAgdGhpcyBiZWZvcmUsIHJlYWQgYWJvdXQgYGBDb21waWxpbmcgdGhlIGtlcm5lbCBhbmQgbW9kdWxlcycnICBhbmQKKyAgYGBLZXJuZWwgZGVidWdnaW5nJycgIFVNTCBmaXJzdC4KKworCisgIDEIMTQINC4ILjEIMS4ILiAgQwhDYQhhcwhzZQhlIDEIMSA6CDogTghObwhvcghybQhtYQhhbAhsIGsIa2UIZXIIcm4IbmUIZWwIbCBwCHBhCGFuCG5pCGljCGNzCHMKKworICBUaGUgbW9zdCBjb21tb24gY2FzZSBpcyBmb3IgYSBub3JtYWwgdGhyZWFkIHRvIHBhbmljLiAgVG8gZGVidWcgdGhpcywKKyAgeW91IHdpbGwgbmVlZCB0byBydW4gaXQgdW5kZXIgdGhlIGRlYnVnZ2VyIChhZGQgJ2RlYnVnJyB0byB0aGUgY29tbWFuZAorICBsaW5lKS4gIEFuIHh0ZXJtIHdpbGwgc3RhcnQgdXAgd2l0aCBnZGIgcnVubmluZyBpbnNpZGUgaXQuICBDb250aW51ZQorICBpdCB3aGVuIGl0IHN0b3BzIGluIHN0YXJ0X2tlcm5lbCBhbmQgbWFrZSBpdCBjcmFzaC4gIE5vdyBeQyBnZGIgYW5kCisKKworICBJZiB0aGUgcGFuaWMgd2FzIGEgIktlcm5lbCBtb2RlIGZhdWx0IiwgdGhlbiB0aGVyZSB3aWxsIGJlIGEgc2VndgorICBmcmFtZSBvbiB0aGUgc3RhY2sgYW5kIEknbSBnb2luZyB0byB3YW50IHNvbWUgbW9yZSBpbmZvcm1hdGlvbi4gIFRoZQorICBzdGFjayBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKworICAgICAgIChVTUwgZ2RiKSAgYmFja3RyYWNlCisgICAgICAgIzAgIDB4MTAwOWJmNzYgaW4gX19zaWdwcm9jbWFzayAoaG93PTEsIHNldD0weDVmMzQ3OTQwLCBvc2V0PTB4MCkKKyAgICAgICAgICAgYXQgLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2lncHJvY21hc2suYzo0OQorICAgICAgICMxICAweDEwMDkxNDExIGluIGNoYW5nZV9zaWcgKHNpZ25hbD0xMCwgb249MSkgYXQgcHJvY2Vzcy5jOjIxOAorICAgICAgICMyICAweDEwMDk0Nzg1IGluIHRpbWVyX2hhbmRsZXIgKHNpZz0yNikgYXQgdGltZV9rZXJuLmM6MzIKKyAgICAgICAjMyAgMHgxMDA5YmYzOCBpbiBfX3Jlc3RvcmUgKCkKKyAgICAgICAgICAgYXQgLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zaWdhY3Rpb24uYzoxMjUKKyAgICAgICAjNCAgMHgxMDA5NTM0YyBpbiBzZWd2IChhZGRyZXNzPTgsIGlwPTI2ODg0OTE1OCwgaXNfd3JpdGU9MiwgaXNfdXNlcj0wKQorICAgICAgICAgICBhdCB0cmFwX2tlcm4uYzo2NgorICAgICAgICM1ICAweDEwMDk1YzA0IGluIHNlZ3ZfaGFuZGxlciAoc2lnPTExKSBhdCB0cmFwX3VzZXIuYzoyODUKKyAgICAgICAjNiAgMHgxMDA5YmYzOCBpbiBfX3Jlc3RvcmUgKCkKKworCisKKworICBJJ20gZ29pbmcgdG8gd2FudCB0byBzZWUgdGhlIHN5bWJvbCBhbmQgbGluZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHZhbHVlCisgIG9mIGlwIGluIHRoZSBzZWd2IGZyYW1lLiAgSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgZG8gdGhlIGZvbGxvd2luZzoKKworCisgICAgICAgKFVNTCBnZGIpICBpIHN5bSAyNjg4NDkxNTgKKworCisKKworICBhbmQKKworCisgICAgICAgKFVNTCBnZGIpICBpIGxpbmUgKjI2ODg0OTE1OAorCisKKworCisgIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhlIF9fcmVzdG9yZSBmcmFtZSByaWdodCBhYm92ZSB0aGUgc2Vndl9oYW4tCisgIGRsZXIgZnJhbWUgaXMgaGlkaW5nIHRoZSBmcmFtZSB0aGF0IGFjdHVhbGx5IHNlZ2ZhdWx0ZWQuICBTbywgSSBoYXZlCisgIHRvIGdldCB0aGF0IGluZm9ybWF0aW9uIGZyb20gdGhlIGZhdWx0aW5nIGlwLgorCisKKyAgMQgxNAg0LgguMggyLgguICBDCENhCGFzCHNlCGUgMggyIDoIOiBUCFRyCHJhCGFjCGNpCGluCG5nCGcgdAh0aAhocghyZQhlYQhhZAhkIHAIcGEIYW4IbmkIaWMIY3MIcworCisgIFRoZSBsZXNzIGNvbW1vbiBhbmQgbW9yZSBwYWluZnVsIGNhc2UgaXMgd2hlbiB0aGUgdHJhY2luZyB0aHJlYWQKKyAgcGFuaWNzLiAgSW4gdGhpcyBjYXNlLCB0aGUga2VybmVsIGRlYnVnZ2VyIHdpbGwgYmUgdXNlbGVzcyBiZWNhdXNlIGl0CisgIG5lZWRzIGEgaGVhbHRoeSB0cmFjaW5nIHRocmVhZCBpbiBvcmRlciB0byB3b3JrLiAgVGhlIGZpcnN0IHRoaW5nIHRvCisgIGRvIGlzIGdldCBhIGJhY2t0cmFjZSBmcm9tIHRoZSB0cmFjaW5nIHRocmVhZC4gIFRoaXMgaXMgZG9uZSBieQorICBmaWd1cmluZyBvdXQgd2hhdCBpdHMgcGlkIGlzLCBmaXJpbmcgdXAgZ2RiLCBhbmQgYXR0YWNoaW5nIGl0IHRvIHRoYXQKKyAgcGlkLiAgWW91IGNhbiBmaWd1cmUgb3V0IHRoZSB0cmFjaW5nIHRocmVhZCBwaWQgYnkgbG9va2luZyBhdCB0aGUKKyAgZmlyc3QgbGluZSBvZiB0aGUgY29uc29sZSBvdXRwdXQsIHdoaWNoIHdpbGwgbG9vayBsaWtlIHRoaXM6CisKKworICAgICAgIHRyYWNpbmcgdGhyZWFkIHBpZCA9IDE1ODUxCisKKworCisKKyAgb3IgYnkgcnVubmluZyBwcyBvbiB0aGUgaG9zdCBhbmQgZmluZGluZyB0aGUgbGluZSB0aGF0IGxvb2tzIGxpa2UKKyAgdGhpczoKKworCisgICAgICAgamRpa2UgMTU4NTEgNC41IDAuNCAxMzI1NjggMTEwNCBwdHMvMCBTIDIxOjM0IDA6MDUgLi9saW51eCBbKHRyYWNpbmcgdGhyZWFkKV0KKworCisKKworICBJZiB0aGUgcGFuaWMgd2FzICdzZWdmYXVsdCBpbiBzaWduYWxzJywgdGhlbiBmb2xsb3cgdGhlIGluc3RydWN0aW9ucworICBhYm92ZSBmb3IgY29sbGVjdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhlIHNlZyBmYXVsdC4KKworCisgIElmIHRoZSB0cmFjaW5nIHRocmVhZCBmbGFrZWQgb3V0IGFsbCBieSBpdHNlbGYsIHRoZW4gc2VuZCB0aGF0CisgIGJhY2t0cmFjZSBpbiBhbmQgd2FpdCBmb3Igb3VyIGNyYWNrIGRlYnVnZ2luZyB0ZWFtIHRvIGZpeCB0aGUgcHJvYmxlbS4KKworCisgIDEIMTQINC4ILjMIMy4ILiAgQwhDYQhhcwhzZQhlIDMIMyA6CDogVAhUcghyYQhhYwhjaQhpbghuZwhnIHQIdGgIaHIIcmUIZWEIYWQIZCBwCHBhCGFuCG5pCGljCGNzCHMgYwhjYQhhdQh1cwhzZQhlZAhkIGIIYnkIeSBvCG90CHRoCGhlCGVyCHIgdAh0aAhocghyZQhlYQhhZAhkcwhzCisKKyAgSG93ZXZlciwgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBtaXNiZWhhdmlvciBvZiBhbm90aGVyIHRocmVhZAorICBjYXVzZWQgdGhlIHByb2JsZW0uICBUaGUgbW9zdCBjb21tb24gcGFuaWMgb2YgdGhpcyB0eXBlIGlzOgorCisKKyAgICAgICB3YWl0X2Zvcl9zdG9wIGZhaWxlZCB0byB3YWl0IGZvciAgPHBpZD4gIHRvIHN0b3Agd2l0aCAgPHNpZ25hbCBudW1iZXI+CisKKworCisKKyAgSW4gdGhpcyBjYXNlLCB5b3UnbGwgbmVlZCB0byBnZXQgYSBiYWNrdHJhY2UgZnJvbSB0aGUgcHJvY2VzcyBtZW4tCisgIHRpb25lZCBpbiB0aGUgcGFuaWMsIHdoaWNoIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhlIGtlcm5lbAorICBkZWJ1Z2dlciBpcyBkZWZ1bmN0IGFuZCB3aXRob3V0IHNvbWUgZmFuY3kgZm9vdHdvcmssIGFub3RoZXIgZ2RiIGNhbid0CisgIGF0dGFjaCB0byBpdC4gIFNvLCB0aGlzIGlzIGhvdyB0aGUgZmFuY3kgZm9vdHdvcmsgZ29lczoKKworICBJbiBhIHNoZWxsOgorCisKKyAgICAgICBob3N0JSBraWxsIC1TVE9QIHBpZAorCisKKworCisgIFJ1biBnZGIgb24gdGhlIHRyYWNpbmcgdGhyZWFkIGFzIGRlc2NyaWJlZCBpbiBjYXNlIDIgYW5kIGRvOgorCisKKyAgICAgICAoaG9zdCBnZGIpICBjYWxsIGRldGFjaChwaWQpCisKKworICBJZiB5b3UgZ2V0IGEgc2VnZmF1bHQsIGRvIGl0IGFnYWluLiAgSXQgYWx3YXlzIHdvcmtzIHRoZSBzZWNvbmQgdGltZS4KKworICBEZXRhY2ggZnJvbSB0aGUgdHJhY2luZyB0aHJlYWQgYW5kIGF0dGFjaCB0byB0aGF0IG90aGVyIHRocmVhZDoKKworCisgICAgICAgKGhvc3QgZ2RiKSAgZGV0YWNoCisKKworCisKKworCisgICAgICAgKGhvc3QgZ2RiKSAgYXR0YWNoIHBpZAorCisKKworCisgIElmIGdkYiBoYW5ncyB3aGVuIGF0dGFjaGluZyB0byB0aGF0IHByb2Nlc3MsIGdvIGJhY2sgdG8gYSBzaGVsbCBhbmQKKyAgZG86CisKKworICAgICAgIGhvc3QlCisgICAgICAga2lsbCAtQ09OVCBwaWQKKworCisKKworICBBbmQgdGhlbiBnZXQgdGhlIGJhY2t0cmFjZToKKworCisgICAgICAgKGhvc3QgZ2RiKSAgYmFja3RyYWNlCisKKworCisKKworICAxCDE0CDQuCC40CDQuCC4gIEMIQ2EIYXMIc2UIZSA0CDQgOgg6IEgISGEIYW4IbmcIZ3MIcworCisgIEhhbmdzIHNlZW0gdG8gYmUgZmFpcmx5IHJhcmUsIGJ1dCB0aGV5IHNvbWV0aW1lcyBoYXBwZW4uICBXaGVuIGEgaGFuZworICBoYXBwZW5zLCB3ZSBuZWVkIGEgYmFja3RyYWNlIGZyb20gdGhlIG9mZmVuZGluZyBwcm9jZXNzLiAgUnVuIHRoZQorICBrZXJuZWwgZGVidWdnZXIgYXMgZGVzY3JpYmVkIGluIGNhc2UgMSBhbmQgZ2V0IGEgYmFja3RyYWNlLiAgSWYgdGhlCisgIGN1cnJlbnQgcHJvY2VzcyBpcyBub3QgdGhlIGlkbGUgdGhyZWFkLCB0aGVuIHNlbmQgaW4gdGhlIGJhY2t0cmFjZS4KKyAgWW91IGNhbiB0ZWxsIHRoYXQgaXQncyB0aGUgaWRsZSB0aHJlYWQgaWYgdGhlIHN0YWNrIGxvb2tzIGxpa2UgdGhpczoKKworCisgICAgICAgIzAgIDB4MTAwYjE0MDEgaW4gX19saWJjX25hbm9zbGVlcCAoKQorICAgICAgICMxICAweDEwMGEyODg1IGluIGlkbGVfc2xlZXAgKHNlY3M9MTApIGF0IHRpbWUuYzoxMjIKKyAgICAgICAjMiAgMHgxMDBhNTQ2ZiBpbiBkb19pZGxlICgpIGF0IHByb2Nlc3Nfa2Vybi5jOjQ0NQorICAgICAgICMzICAweDEwMGE1NTA4IGluIGNwdV9pZGxlICgpIGF0IHByb2Nlc3Nfa2Vybi5jOjQ3MQorICAgICAgICM0ICAweDEwMGVjMThmIGluIHN0YXJ0X2tlcm5lbCAoKSBhdCBpbml0L21haW4uYzo1OTIKKyAgICAgICAjNSAgMHgxMDBhM2UxMCBpbiBzdGFydF9rZXJuZWxfcHJvYyAodW51c2VkPTB4MCkgYXQgdW1fYXJjaC5jOjcxCisgICAgICAgIzYgIDB4MTAwYTM4M2YgaW4gc2lnbmFsX3RyYW1wIChhcmc9MHgxMDBhM2RkOCkgYXQgdHJhcF91c2VyLmM6NTAKKworCisKKworICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVuIHNvbWUgb3RoZXIgcHJvY2VzcyBpcyBhdCBmYXVsdCwgYW5kIHdlbnQgdG8KKyAgc2xlZXAgd2hlbiBpdCBzaG91bGRuJ3QgaGF2ZS4gIFJ1biBwcyBvbiB0aGUgaG9zdCBhbmQgZmlndXJlIG91dCB3aGljaAorICBwcm9jZXNzIHNob3VsZCBub3QgaGF2ZSBnb25lIHRvIHNsZWVwIGFuZCBzdGF5ZWQgYXNsZWVwLiAgVGhlbiBhdHRhY2gKKyAgdG8gaXQgd2l0aCBnZGIgYW5kIGdldCBhIGJhY2t0cmFjZSBhcyBkZXNjcmliZWQgaW4gY2FzZSAzLgorCisKKworCisKKworICAxCDE1CDUuCC4gIFQIVGgIaGEIYW4IbmsIa3MIcworCisKKyAgQSBudW1iZXIgb2YgcGVvcGxlIGhhdmUgaGVscGVkIHRoaXMgcHJvamVjdCBpbiB2YXJpb3VzIHdheXMsIGFuZCB0aGlzCisgIHBhZ2UgZ2l2ZXMgcmVjb2duaXRpb24gd2hlcmUgcmVjb2duaXRpb24gaXMgZHVlLgorCisKKyAgSWYgeW91J3JlIGxpc3RlZCBoZXJlIGFuZCB5b3Ugd291bGQgcHJlZmVyIGEgcmVhbCBsaW5rIG9uIHlvdXIgbmFtZSwKKyAgb3Igbm8gbGluayBhdCBhbGwsIGluc3RlYWQgb2YgdGhlIGRlc3BhbW1lZCBlbWFpbCBhZGRyZXNzIHBzZXVkby1saW5rLAorICBsZXQgbWUga25vdy4KKworCisgIElmIHlvdSdyZSBub3QgbGlzdGVkIGhlcmUgYW5kIHlvdSB0aGluayBtYXliZSB5b3Ugc2hvdWxkIGJlLCBwbGVhc2UKKyAgbGV0IG1lIGtub3cgdGhhdCBhcyB3ZWxsLiAgSSB0cnkgdG8gZ2V0IGV2ZXJ5b25lLCBidXQgc29tZXRpbWVzIG15CisgIGJvb2trZWVwaW5nIGxhcHNlcyBhbmQgSSBmb3JnZXQgYWJvdXQgY29udHJpYnV0aW9ucy4KKworCisgIDEIMTUINS4ILjEIMS4ILiAgQwhDbwhvZAhkZQhlIGEIYW4IbmQIZCBECERvCG9jCGN1CHVtCG1lCGVuCG50CHRhCGF0CHRpCGlvCG9uCG4KKworICBSdXN0eSBSdXNzZWxsIDxydXN0eSBhdCBsaW51eGNhcmUuY29tLmF1PiAgLQorCisgICsIbyAgd3JvdGUgdGhlICBIT1dUTyA8aHR0cDovL3VzZXItbW9kZS0KKyAgICAgbGludXguc291cmNlZm9yZ2UubmV0L1VzZXJNb2RlTGludXgtSE9XVE8uaHRtbD4KKworICArCG8gIHByb2RkZWQgbWUgaW50byBtYWtpbmcgdGhpcyBwcm9qZWN0IG9mZmljaWFsIGFuZCBwdXR0aW5nIGl0IG9uCisgICAgIFNvdXJjZUZvcmdlCisKKyAgKwhvICBjYW1lIHVwIHdpdGggdGhlIHdheSBjb29sIFVNTCBsb2dvIDxodHRwOi8vdXNlci1tb2RlLQorICAgICBsaW51eC5zb3VyY2Vmb3JnZS5uZXQvdW1sLXNtYWxsLnBuZz4KKworICArCG8gIHJlZGlkIHRoZSBjb25maWcgcHJvY2VzcworCisKKyAgUGV0ZXIgTW91bGRlciA8cmVpdGVyIGF0IG5ldHNwYWNlLm5ldC5hdT4gIC0gRml4ZWQgbXkgY29uZmlnIGFuZCBidWlsZAorICBwcm9jZXNzZXMsIGFuZCBhZGRlZCBzb21lIHVzZWZ1bCBjb2RlIHRvIHRoZSBibG9jayBkcml2ZXIKKworCisgIEJpbGwgU3RlYXJucyA8d3N0ZWFybnMgYXQgcG9ib3guY29tPiAgLQorCisgICsIbyAgSE9XVE8gdXBkYXRlcworCisgICsIbyAgbG90cyBvZiBidWcgcmVwb3J0cworCisgICsIbyAgbG90cyBvZiB0ZXN0aW5nCisKKyAgKwhvICBkZWRpY2F0ZWQgYSBib3ggKHVtbC5pc3RzLmRhcnRtb3V0aC5lZHUpIHRvIHN1cHBvcnQgVU1MIGRldmVsb3BtZW50CisKKyAgKwhvICB3cm90ZSB0aGUgbWtyb290ZnMgc2NyaXB0LCB3aGljaCBhbGxvd3MgYm9vdGFibGUgZmlsZXN5c3RlbXMgb2YKKyAgICAgUlBNLWJhc2VkIGRpc3RyaWJ1dGlvbnMgdG8gYmUgY3JhbmtlZCBvdXQKKworICArCG8gIGNyYW5rZWQgb3V0IGEgbGFyZ2UgbnVtYmVyIG9mIGZpbGVzeXN0ZW1zIHdpdGggc2FpZCBzY3JpcHQKKworCisgIEppbSBMZXUgPGpsZXUgYXQgbWluZHNwcmluZy5jb20+ICAtIFdyb3RlIHRoZSB2aXJ0dWFsIGV0aGVybmV0IGRyaXZlcgorICBhbmQgYXNzb2NpYXRlZCB1c2VybW9kZSB0b29scworCisgIExhcnMgQnJpbmtob2ZmIDxodHRwOi8vbGFycy5ub2NyZXcub3JnLz4gIC0gQ29udHJpYnV0ZWQgdGhlIHB0cmFjZQorICBwcm94eSBmcm9tIGhpcyBvd24gIHByb2plY3QgPGh0dHA6Ly9hMzg2Lm5vY3Jldy5vcmcvPiB0byBhbGxvdyBlYXNpZXIKKyAga2VybmVsIGRlYnVnZ2luZworCisKKyAgQW5kcmVhIEFyY2FuZ2VsaSA8YW5kcmVhIGF0IHN1c2UuZGU+ICAtIFJlZGlkIHNvbWUgb2YgdGhlIGVhcmx5IGJvb3QKKyAgY29kZSBzbyB0aGF0IGl0IHdvdWxkIHdvcmsgb24gbWFjaGluZXMgd2l0aCBMYXJnZSBGaWxlIFN1cHBvcnQKKworCisgIENocmlzIEVtZXJzb24gPGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+Y2VtZXJzb24vPiAgLSBEaWQKKyAgdGhlIGZpcnN0IFVNTCBwb3J0IHRvIExpbnV4L3BwYworCisKKyAgSGFyYWxkIFdlbHRlIDxsYWZvcmdlIGF0IGdudW1vbmtzLm9yZz4gIC0gV3JvdGUgdGhlIG11bHRpY2FzdAorICB0cmFuc3BvcnQgZm9yIHRoZSBuZXR3b3JrIGRyaXZlcgorCisKKyAgSm9yZ2VuIENlZGVybG9mIC0gQWRkZWQgc3BlY2lhbCBmaWxlIHN1cHBvcnQgdG8gaG9zdGZzCisKKworICBHcmVnIExvbm5vbiAgPGdsb25ub24gYXQgcmlkZ2VydW4gZG90IGNvbT4gIC0gQ2hhbmdlZCB0aGUgdWJkIGRyaXZlcgorICB0byBhbGxvdyBpdCB0byBsYXllciBhIENPVyBmaWxlIG9uIGEgc2hhcmVkIHJlYWQtb25seSBmaWxlc3lzdGVtIGFuZAorICB3cm90ZSB0aGUgaW9tZW0gZW11bGF0aW9uIHN1cHBvcnQKKworCisgIEhlbnJpayBOb3Jkc3Ryb20gPGh0dHA6Ly9oZW0ucGFzc2FnZW4uc2UvaG5vLz4gIC0gUHJvdmlkZWQgYSB2YXJpZXR5CisgIG9mIHBhdGNoZXMsIGZpeGVzLCBhbmQgY2x1ZXMKKworCisgIExlbm5lcnQgQnV5dGVuaGVrIC0gQ29udHJpYnV0ZWQgdmFyaW91cyBwYXRjaGVzLCBhIHJld3JpdGUgb2YgdGhlCisgIG5ldHdvcmsgZHJpdmVyLCB0aGUgZmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1jb25zb2xlIGRyaXZlciwgYW5kCisgIGRpZCB0aGUgYnVsayBvZiB0aGUgd29yayBuZWVkZWQgdG8gZ2V0IFNNUCB3b3JraW5nIGFnYWluLgorCisKKyAgWW9uIFVyaWFydGUgLSBGaXhlZCB0aGUgVFVOL1RBUCBuZXR3b3JrIGJhY2tlbmQgd2hpbGUgSSBzbGVwdC4KKworCisgIEFkYW0gSGVhdGggLSBNYWRlIGEgYnVuY2ggb2YgbmljZSBjbGVhbnVwcyB0byB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSwKKyAgcGx1cyB2YXJpb3VzIG90aGVyIHNtYWxsIHBhdGNoZXMuCisKKworICBNYXR0IFppbW1lcm1hbiAtIE1hdHQgdm9sdW50ZWVyZWQgdG8gYmUgdGhlIFVNTCBEZWJpYW4gbWFpbnRhaW5lciBhbmQKKyAgaXMgZG9pbmcgYSByZWFsIG5pY2Ugam9iIG9mIGl0LiAgSGUgYWxzbyBub3RpY2VkIGFuZCBmaXhlZCBhIG51bWJlciBvZgorICBhY3R1YWxseSBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgc2VjdXJpdHkgaG9sZXMgaW4gdW1sX25ldC4gIFBsdXMKKyAgdGhlIG9jY2FzaW9uYWwgcGF0Y2guICBJIGxpa2UgcGF0Y2hlcy4KKworCisgIEphbWVzIE1jTWVjaGFuIC0gSmFtZXMgc2VlbXMgdG8gaGF2ZSB0YWtlbiBvdmVyIG1haW50ZW5hbmNlIG9mIHRoZSB1YmQKKyAgZHJpdmVyIGFuZCBpcyBkb2luZyBhIG5pY2Ugam9iIG9mIGl0LgorCisKKyAgQ2hhbmRhbiBLdWRpZ2UgLSB3cm90ZSB0aGUgdW1sZ2RiIHNjcmlwdCB3aGljaCBhdXRvbWF0ZXMgdGhlIHJlbG9hZGluZworICBvZiBtb2R1bGUgc3ltYm9scy4KKworCisgIFN0ZXZlIFNjaG1pZHRrZSAtIHdyb3RlIHRoZSBVTUwgc2xpcnAgdHJhbnNwb3J0IGFuZCBob3N0YXVkaW8gZHJpdmVycywKKyAgZW5hYmxpbmcgVU1MIHByb2Nlc3NlcyB0byBhY2Nlc3MgYXVkaW8gZGV2aWNlcyBvbiB0aGUgaG9zdC4gSGUgYWxzbworICBzdWJtaXR0ZWQgcGF0Y2hlcyBmb3IgdGhlIHNsaXAgdHJhbnNwb3J0IGFuZCBsb3RzIG9mIG90aGVyIHRoaW5ncy4KKworCisgIERhdmlkIENvdWxzb24gPGh0dHA6Ly9kYXZpZGNvdWxzb24ubmV0PiAgLQorCisgICsIbyAgU2V0IHVwIHRoZSB1c2VybW9kZWxpbnV4Lm9yZyA8aHR0cDovL3VzZXJtb2RlbGludXgub3JnPiAgc2l0ZSwKKyAgICAgd2hpY2ggaXMgYSBncmVhdCB3YXkgb2Yga2VlcGluZyB0aGUgVU1MIHVzZXIgY29tbXVuaXR5IG9uIHRvcCBvZgorICAgICBVTUwgZ29pbmdzLW9uLgorCisgICsIbyAgU2l0ZSBkb2N1bWVudGF0aW9uIGFuZCB1cGRhdGVzCisKKyAgKwhvICBOaWZ0eSBsaXR0bGUgVU1MIG1hbmFnZW1lbnQgZGFlbW9uICBVTUxkCisgICAgIDxodHRwOi8vdW1sLm9wZW5jb25zdWx0YW5jeS5jb20vdW1sZC8+CisKKyAgKwhvICBMb3RzIG9mIHRlc3RpbmcgYW5kIGJ1ZyByZXBvcnRzCisKKworCisKKyAgMQgxNQg1LgguMggyLgguICBGCEZsCGx1CHVzCHNoCGhpCGluCG5nCGcgbwhvdQh1dAh0IGIIYnUIdWcIZ3MIcworCisKKworICArCG8gIFl1cmkgUHVkZ29yb2Rza3kKKworICArCG8gIEdlcmFsZCBCcml0dG9uCisKKyAgKwhvICBJYW4gV2Vocm1hbgorCisgICsIbyAgR29yZCBMYW1iCisKKyAgKwhvICBFdWdlbmUgS29vbnR6CisKKyAgKwhvICBKb2huIEguIEhhcnRtYW4KKworICArCG8gIEFuZGVycyBLYXJsc3NvbgorCisgICsIbyAgRGFuaWVsIFBoaWxsaXBzCisKKyAgKwhvICBKb2huIEZyZW1saW4KKworICArCG8gIFJhaW5lciBCdXJnc3RhbGxlcgorCisgICsIbyAgSmFtZXMgU3RldmVuc29uCisKKyAgKwhvICBNYXR0IENsYXkKKworICArCG8gIENsaWZmIEplZmZlcmllcworCisgICsIbyAgR2VvZmYgSG9mZgorCisgICsIbyAgTGVubmVydCBCdXl0ZW5oZWsKKworICArCG8gIEFsIFZpcm8KKworICArCG8gIEZyYW5rIEtsaW5nZW5ob2VmZXIKKworICArCG8gIExpdmlvIEJhbGRpbmkgU29hcmVzCisKKyAgKwhvICBKb24gQnVyZ2VzcworCisgICsIbyAgUGV0cnUgUGFsZXIKKworICArCG8gIFBhdWwKKworICArCG8gIENocmlzIFJlYWhhcmQKKworICArCG8gIFN2ZXJrZXIgTmlsc3NvbgorCisgICsIbyAgR29uZyBTdQorCisgICsIbyAgam9oYW4gdmVycmVwdAorCisgICsIbyAgQmpvcm4gRXJpa3Nzb24KKworICArCG8gIExvcmVuem8gQWxsZWdydWNjaQorCisgICsIbyAgTXVsaSBCZW4tWWVodWRhCisKKyAgKwhvICBEYXZpZCBNYW5zZmllbGQKKworICArCG8gIEhvd2FyZCBHb2ZmCisKKyAgKwhvICBNaWtlIEFuZGVyc29uCisKKyAgKwhvICBKb2huIEJ5cm5lCisKKyAgKwhvICBTYXBhbiBKLiBCYXRpYQorCisgICsIbyAgSXJpcyBIdWFuZworCisgICsIbyAgSmFuIEh1ZGVjCisKKyAgKwhvICBWb2x1c3BhCisKKworCisKKyAgMQgxNQg1LgguMwgzLgguICBCCEJ1CHVnCGdsCGxlCGV0CHRzCHMgYQhhbghuZAhkIGMIY2wIbGUIZWEIYW4Ibi0ILXUIdXAIcHMIcworCisKKworICArCG8gIERhdmUgWmFyenlja2kKKworICArCG8gIEFkYW0gTGF6dXIKKworICArCG8gIEJvcmlhIEZlaWdpbgorCisgICsIbyAgQnJpYW4gSi4gTXVycmVsbAorCisgICsIbyAgSlMKKworICArCG8gIFJvbWFuIFppcHBlbAorCisgICsIbyAgV2lsIENvb2xleQorCisgICsIbyAgQXllbGV0IFNoZW1lc2gKKworICArCG8gIFdpbGwgRHlzb24KKworICArCG8gIFN2ZXJrZXIgTmlsc3NvbgorCisgICsIbyAgZHZvcmFrCisKKyAgKwhvICB2Lm5hZ2Egc3Jpbml2YXMKKworICArCG8gIFNobG9taSBGaXNoCisKKyAgKwhvICBSb2dlciBCaW5ucworCisgICsIbyAgam9oYW4gdmVycmVwdAorCisgICsIbyAgTXJDaHVvaQorCisgICsIbyAgUGV0ZXIgQ2xldmUKKworICArCG8gIFZpbmNlbnQgR3VmZmVucworCisgICsIbyAgTmF0aGFuIFNjb3R0CisKKyAgKwhvICBQYXRyaWNrIENhdWxmaWVsZAorCisgICsIbyAgamJlYXJjZQorCisgICsIbyAgQ2F0YWxpbiBNYXJpbmFzCisKKyAgKwhvICBTaGFuZSBTcGVuY2VyCisKKyAgKwhvICBab3UgTWluCisKKworICArCG8gIFJ5YW4gQm9kZXIKKworICArCG8gIExvcmVuem8gQ29saXR0aQorCisgICsIbyAgR3dlbmRhbCBHcmlnbm91CisKKyAgKwhvICBBbmRyZScgQnJlaWxlcgorCisgICsIbyAgVHN1dG9tdSBZYXN1ZGEKKworCisKKyAgMQgxNQg1LgguNAg0LgguICBDCENhCGFzCHNlCGUgUwhTdAh0dQh1ZAhkaQhpZQhlcwhzCisKKworICArCG8gIEpvbiBXcmlnaHQKKworICArCG8gIFdpbGxpYW0gTWNFd2FuCisKKyAgKwhvICBNaWNoYWVsIFJpY2hhcmRzb24KKworCisKKyAgMQgxNQg1LgguNQg1LgguICBPCE90CHRoCGhlCGVyCHIgYwhjbwhvbghudAh0cghyaQhpYghidQh1dAh0aQhpbwhvbghucwhzCisKKworICBCaWxsIENhcnIgPEJpbGwuQ2FyciBhdCBjb21wYXEuY29tPiAgbWFkZSB0aGUgUmVkIEhhdCBta3Jvb3RmcyBzY3JpcHQKKyAgd29yayB3aXRoIFJIIDYuMi4KKworICBNaWNoYWVsIEplbm5pbmdzIDxtaWtlamVuIGF0IGhldmFuZXQuY29tPiAgc2VudCBpbiBzb21lIG1hdGVyaWFsIHdoaWNoCisgIGlzIG5vdyBncmFjaW5nIHRoZSB0b3Agb2YgdGhlICBpbmRleCAgcGFnZSA8aHR0cDovL3VzZXItbW9kZS0KKyAgbGludXguc291cmNlZm9yZ2UubmV0L2luZGV4Lmh0bWw+ICBvZiB0aGlzIHNpdGUuCisKKyAgU0dJIDxodHRwOi8vd3d3LnNnaS5jb20+ICAoYW5kIG1vcmUgc3BlY2lmaWNhbGx5IFJhbGYgQmFlY2hsZSA8cmFsZiBhdAorICB1bmkta29ibGVuei5kZT4gKSBnYXZlIG1lIGFuIGFjY291bnQgb24gb3NzLnNnaS5jb20KKyAgPGh0dHA6Ly93d3cub3NzLnNnaS5jb20+IC4gIFRoZSBiYW5kd2lkdGggdGhlcmUgbWFkZSBpdCBwb3NzaWJsZSB0bworICBwcm9kdWNlIG1vc3Qgb2YgdGhlIGZpbGVzeXN0ZW1zIGF2YWlsYWJsZSBvbiB0aGUgcHJvamVjdCBkb3dubG9hZAorICBwYWdlLgorCisgIExhdXJlbnQgQm9ubmF1ZCA8TGF1cmVudC5Cb25uYXVkIGF0IGlucGcuZnI+ICB0b29rIHRoZSBvbGQgZ3JvdHR5CisgIERlYmlhbiBmaWxlc3lzdGVtIHRoYXQgSSd2ZSBiZWVuIGRpc3RyaWJ1dGluZyBhbmQgdXBkYXRlZCBpdCB0byAyLjIuCisgIEl0IGlzIG5vdyBhdmFpbGFibGUgYnkgaXRzZWxmIGhlcmUuCisKKyAgUmlrIHZhbiBSaWVsIGdhdmUgbWUgc29tZSBmdHAgc3BhY2Ugb24gZnRwLm5sLmxpbnV4Lm9yZyBzbyBJIGNhbiBtYWtlCisgIHJlbGVhc2VzIGV2ZW4gd2hlbiBTb3VyY2Vmb3JnZSBpcyBicm9rZW4uCisKKyAgUm9kcmlnbyBkZSBDYXN0cm8gbG9va2VkIGF0IG15IGJyb2tlbiBwdGUgY29kZSBhbmQgdG9sZCBtZSB3aGF0IHdhcworICB3cm9uZyB3aXRoIGl0LCBsZXR0aW5nIG1lIGZpeCBhIGxvbmctc3RhbmRpbmcgKHNldmVyYWwgd2Vla3MpIGFuZAorICBzZXJpb3VzIHNldCBvZiBidWdzLgorCisgIENocmlzIFJlYWhhcmQgYnVpbHQgYSBzcGVjaWFsaXplZCByb290IGZpbGVzeXN0ZW0gZm9yIHJ1bm5pbmcgYSBETlMKKyAgc2VydmVyIGphaWxlZCBpbnNpZGUgVU1MLiAgSXQncyBhdmFpbGFibGUgZnJvbSB0aGUgZG93bmxvYWQKKyAgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0L2RsLXNmLmh0bWw+ICBwYWdlIGluIHRoZSBKYWlsCisgIEZpbGVzeXNlbXMgc2VjdGlvbi4KKworCisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdW5pY29kZS50eHQgYi9Eb2N1bWVudGF0aW9uL3VuaWNvZGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzNmODEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VuaWNvZGUudHh0CkBAIC0wLDAgKzEsMTc1IEBACisJCSBMYXN0IHVwZGF0ZTogMjAwNS0wMS0xNywgdmVyc2lvbiAxLjQKKworVGhpcyBmaWxlIGlzIG1haW50YWluZWQgYnkgSC4gUGV0ZXIgQW52aW4gPHVuaWNvZGVAbGFuYW5hLm9yZz4gYXMgcGFydAorb2YgdGhlIExpbnV4IEFzc2lnbmVkIE5hbWVzIEFuZCBOdW1iZXJzIEF1dGhvcml0eSAoTEFOQU5BKSBwcm9qZWN0LgorVGhlIGN1cnJlbnQgdmVyc2lvbiBjYW4gYmUgZm91bmQgYXQ6CisKKwkgICAgaHR0cDovL3d3dy5sYW5hbmEub3JnL2RvY3MvdW5pY29kZS91bmljb2RlLnR4dAorCisJCSAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIExpbnV4IGtlcm5lbCBjb2RlIGhhcyBiZWVuIHJld3JpdHRlbiB0byB1c2UgVW5pY29kZSB0byBtYXAKK2NoYXJhY3RlcnMgdG8gZm9udHMuICBCeSBkb3dubG9hZGluZyBhIHNpbmdsZSBVbmljb2RlLXRvLWZvbnQgdGFibGUsCitib3RoIHRoZSBlaWdodC1iaXQgY2hhcmFjdGVyIHNldHMgYW5kIFVURi04IG1vZGUgYXJlIGNoYW5nZWQgdG8gdXNlCit0aGUgZm9udCBhcyBpbmRpY2F0ZWQuCisKK1RoaXMgY2hhbmdlcyB0aGUgc2VtYW50aWNzIG9mIHRoZSBlaWdodC1iaXQgY2hhcmFjdGVyIHRhYmxlcyBzdWJ0bHkuCitUaGUgZm91ciBjaGFyYWN0ZXIgdGFibGVzIGFyZSBub3c6CisKK01hcCBzeW1ib2wJTWFwIG5hbWUJCQlFc2NhcGUgY29kZSAoRzApCisKK0xBVDFfTUFQCUxhdGluLTEgKElTTyA4ODU5LTEpCQlFU0MgKCBCCitHUkFGX01BUAlERUMgVlQxMDAgcHNldWRvZ3JhcGhpY3MJRVNDICggMAorSUJNUENfTUFQCUlCTSBjb2RlIHBhZ2UgNDM3CQlFU0MgKCBVCitVU0VSX01BUAlVc2VyIGRlZmluZWQJCQlFU0MgKCBLCisKK0luIHBhcnRpY3VsYXIsIEVTQyAoIFUgaXMgbm8gbG9uZ2VyICJzdHJhaWdodCB0byBmb250Iiwgc2luY2UgdGhlIGZvbnQKK21pZ2h0IGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRoYW4gdGhlIElCTSBjaGFyYWN0ZXIgc2V0LiAgVGhpcworcGVybWl0cyBmb3IgZXhhbXBsZSB0aGUgdXNlIG9mIGJsb2NrIGdyYXBoaWNzIGV2ZW4gd2l0aCBhIExhdGluLTEgZm9udAorbG9hZGVkLgorCitOb3RlIHRoYXQgYWx0aG91Z2ggdGhlc2UgY29kZXMgYXJlIHNpbWlsYXIgdG8gSVNPIDIwMjIsIG5laXRoZXIgdGhlCitjb2RlcyBub3IgdGhlaXIgdXNlcyBtYXRjaCBJU08gMjAyMjsgTGludXggaGFzIHR3byA4LWJpdCBjb2RlcyAoRzAgYW5kCitHMSksIHdoZXJlYXMgSVNPIDIwMjIgaGFzIGZvdXIgNy1iaXQgY29kZXMgKEcwLUczKS4KKworSW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBVbmljb2RlIHN0YW5kYXJkL0lTTyAxMDY0NiB0aGUgcmFuZ2UgVStGMDAwIHRvCitVK0Y4RkYgaGFzIGJlZW4gcmVzZXJ2ZWQgZm9yIE9TLXdpZGUgYWxsb2NhdGlvbiAodGhlIFVuaWNvZGUgU3RhbmRhcmQKK3JlZmVycyB0byB0aGlzIGFzIGEgIkNvcnBvcmF0ZSBab25lIiwgc2luY2UgdGhpcyBpcyBpbmFjY3VyYXRlIGZvcgorTGludXggd2UgY2FsbCBpdCB0aGUgIkxpbnV4IFpvbmUiKS4gIFUrRjAwMCB3YXMgcGlja2VkIGFzIHRoZSBzdGFydGluZworcG9pbnQgc2luY2UgaXQgbGV0cyB0aGUgZGlyZWN0LW1hcHBpbmcgYXJlYSBzdGFydCBvbiBhIGxhcmdlIHBvd2VyIG9mCit0d28gKGluIGNhc2UgMTAyNC0gb3IgMjA0OC1jaGFyYWN0ZXIgZm9udHMgZXZlciBiZWNvbWUgbmVjZXNzYXJ5KS4KK1RoaXMgbGVhdmVzIFUrRTAwMCB0byBVK0VGRkYgYXMgRW5kIFVzZXIgWm9uZS4KKworW3YxLjJdOiBUaGUgVW5pY29kZXMgcmFuZ2UgZnJvbSBVK0YwMDAgYW5kIHVwIHRvIFUrRjdGRiBoYXZlIGJlZW4KK2hhcmQtY29kZWQgdG8gbWFwIGRpcmVjdGx5IHRvIHRoZSBsb2FkZWQgZm9udCwgYnlwYXNzaW5nIHRoZQordHJhbnNsYXRpb24gdGFibGUuICBUaGUgdXNlci1kZWZpbmVkIG1hcCBub3cgZGVmYXVsdHMgdG8gVStGMDAwIHRvCitVK0YwRkYsIGVtdWxhdGluZyB0aGUgcHJldmlvdXMgYmVoYXZpb3VyLiAgSW4gcHJhY3RpY2UsIHRoaXMgcmFuZ2UKK21pZ2h0IGJlIHNob3J0ZXI7IGZvciBleGFtcGxlLCB2Z2Fjb24gY2FuIG9ubHkgaGFuZGxlIDI1Ni1jaGFyYWN0ZXIKKyhVK0YwMDAuLlUrRjBGRikgb3IgNTEyLWNoYXJhY3RlciAoVStGMDAwLi5VK0YxRkYpIGZvbnRzLgorCisKK0FjdHVhbCBjaGFyYWN0ZXJzIGFzc2lnbmVkIGluIHRoZSBMaW51eCBab25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIG5vdCBwcmVzZW50IGluIFVuaWNvZGUgMS4xLjQKK2hhdmUgYmVlbiBkZWZpbmVkOyB0aGVzZSBhcmUgdXNlZCBieSB0aGUgREVDIFZUIGdyYXBoaWNzIG1hcC4gIFt2MS4yXQorVEhJUyBVU0UgSVMgT0JTT0xFVEUgQU5EIFNIT1VMRCBOTyBMT05HRVIgQkUgVVNFRDsgUExFQVNFIFNFRSBCRUxPVy4KKworVStGODAwIERFQyBWVCBHUkFQSElDUyBIT1JJWk9OVEFMIExJTkUgU0NBTiAxCitVK0Y4MDEgREVDIFZUIEdSQVBISUNTIEhPUklaT05UQUwgTElORSBTQ0FOIDMKK1UrRjgwMyBERUMgVlQgR1JBUEhJQ1MgSE9SSVpPTlRBTCBMSU5FIFNDQU4gNworVStGODA0IERFQyBWVCBHUkFQSElDUyBIT1JJWk9OVEFMIExJTkUgU0NBTiA5CisKK1RoZSBERUMgVlQyMjAgdXNlcyBhIDZ4MTAgY2hhcmFjdGVyIG1hdHJpeCwgYW5kIHRoZXNlIGNoYXJhY3RlcnMgZm9ybQorYSBzbW9vdGggcHJvZ3Jlc3Npb24gaW4gdGhlIERFQyBWVCBncmFwaGljcyBjaGFyYWN0ZXIgc2V0LiAgSSBoYXZlCitvbWl0dGVkIHRoZSBzY2FuIDUgbGluZSwgc2luY2UgaXQgaXMgYWxzbyB1c2VkIGFzIGEgYmxvY2stZ3JhcGhpY3MKK2NoYXJhY3RlciwgYW5kIGhlbmNlIGhhcyBiZWVuIGNvZGVkIGFzIFUrMjUwMCBGT1JNUyBMSUdIVCBIT1JJWk9OVEFMLgorCitbdjEuM106IFRoZXNlIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG9mZmljaWFsbHkgYWRkZWQgdG8gVW5pY29kZSAzLjIuMDsKK3RoZXkgYXJlIGFkZGVkIGF0IFUrMjNCQSwgVSsyM0JCLCBVKzIzQkMsIFUrMjNCRC4gIExpbnV4IG5vdyB1c2VzIHRoZQorbmV3IHZhbHVlcy4KKworW3YxLjJdOiBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIGFkZGVkIHRvIHJlcHJlc2VudCBjb21tb24KK2tleWJvYXJkIHN5bWJvbHMgdGhhdCBhcmUgdW5saWtlbHkgdG8gZXZlciBiZSBhZGRlZCB0byBVbmljb2RlIHByb3Blcgorc2luY2UgdGhleSBhcmUgaG9ycmlibHkgdmVuZG9yLXNwZWNpZmljLiAgVGhpcywgb2YgY291cnNlLCBpcyBhbgorZXhjZWxsZW50IGV4YW1wbGUgb2YgaG9ycmlibGUgZGVzaWduLgorCitVK0Y4MTAgS0VZQk9BUkQgU1lNQk9MIEZMWUlORyBGTEFHCitVK0Y4MTEgS0VZQk9BUkQgU1lNQk9MIFBVTExET1dOIE1FTlUKK1UrRjgxMiBLRVlCT0FSRCBTWU1CT0wgT1BFTiBBUFBMRQorVStGODEzIEtFWUJPQVJEIFNZTUJPTCBTT0xJRCBBUFBMRQorCitLbGluZ29uIGxhbmd1YWdlIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiAxOTk2LCBMaW51eCB3YXMgdGhlIGZpcnN0IG9wZXJhdGluZyBzeXN0ZW0gaW4gdGhlIHdvcmxkIHRvIGFkZAorc3VwcG9ydCBmb3IgdGhlIGFydGlmaWNpYWwgbGFuZ3VhZ2UgS2xpbmdvbiwgY3JlYXRlZCBieSBNYXJjIE9rcmFuZAorZm9yIHRoZSAiU3RhciBUcmVrIiB0ZWxldmlzaW9uIHNlcmllcy4JVGhpcyBlbmNvZGluZyB3YXMgbGF0ZXIKK2Fkb3B0ZWQgYnkgdGhlIENvblNjcmlwdCBVbmljb2RlIFJlZ2lzdHJ5IGFuZCBwcm9wb3NlZCAoYnV0IHVsdGltYXRlbHkKK3JlamVjdGVkKSBmb3IgaW5jbHVzaW9uIGluIFVuaWNvZGUgUGxhbmUgMS4gIFRodXMsIGl0IHJlbWFpbnMgYXMgYQorTGludXgvQ1NVUiBwcml2YXRlIGFzc2lnbm1lbnQgaW4gdGhlIExpbnV4IFpvbmUuCisKK1RoaXMgZW5jb2RpbmcgaGFzIGJlZW4gZW5kb3JzZWQgYnkgdGhlIEtsaW5nb24gTGFuZ3VhZ2UgSW5zdGl0dXRlLgorRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnRhY3QgdGhlbSBhdDoKKworCWh0dHA6Ly93d3cua2xpLm9yZy8KKworU2luY2UgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgTGludXggQ1ogaGF2ZSBiZWVuIG1vcmUKK29mIHRoZSBkaW5nYmF0cy9zeW1ib2xzL2Zvcm1zIHR5cGUgYW5kIHRoaXMgaXMgYSBsYW5ndWFnZSwgSSBoYXZlCitsb2NhdGVkIGl0IGF0IHRoZSBlbmQsIG9uIGEgMTYtY2VsbCBib3VuZGFyeSBpbiBrZWVwaW5nIHdpdGggc3RhbmRhcmQKK1VuaWNvZGUgcHJhY3RpY2UuCisKK05PVEU6IFRoaXMgcmFuZ2UgaXMgbm93IG9mZmljaWFsbHkgbWFuYWdlZCBieSB0aGUgQ29uU2NyaXB0IFVuaWNvZGUKK1JlZ2lzdHJ5LiAgVGhlIG5vcm1hdGl2ZSByZWZlcmVuY2UgaXMgYXQ6CisKKwlodHRwOi8vd3d3LmV2ZXJ0eXBlLmNvbS9zdGFuZGFyZHMvY3N1ci9rbGluZ29uLmh0bWwKKworS2xpbmdvbiBoYXMgYW4gYWxwaGFiZXQgb2YgMjYgY2hhcmFjdGVycywgYSBwb3NpdGlvbmFsIG51bWVyaWMgd3JpdGluZworc3lzdGVtIHdpdGggMTAgZGlnaXRzLCBhbmQgaXMgd3JpdHRlbiBsZWZ0LXRvLXJpZ2h0LCB0b3AtdG8tYm90dG9tLgorCitTZXZlcmFsIGdseXBoIGZvcm1zIGZvciB0aGUgS2xpbmdvbiBhbHBoYWJldCBoYXZlIGJlZW4gcHJvcG9zZWQuCitIb3dldmVyLCBzaW5jZSB0aGUgc2V0IG9mIHN5bWJvbHMgYXBwZWFyIHRvIGJlIGNvbnNpc3RlbnQgdGhyb3VnaG91dCwKK3dpdGggb25seSB0aGUgYWN0dWFsIHNoYXBlcyBiZWluZyBkaWZmZXJlbnQsIGluIGtlZXBpbmcgd2l0aCBzdGFuZGFyZAorVW5pY29kZSBwcmFjdGljZSB0aGVzZSBkaWZmZXJlbmNlcyBhcmUgY29uc2lkZXJlZCBmb250IHZhcmlhbnRzLgorCitVK0Y4RDAJS0xJTkdPTiBMRVRURVIgQQorVStGOEQxCUtMSU5HT04gTEVUVEVSIEIKK1UrRjhEMglLTElOR09OIExFVFRFUiBDSAorVStGOEQzCUtMSU5HT04gTEVUVEVSIEQKK1UrRjhENAlLTElOR09OIExFVFRFUiBFCitVK0Y4RDUJS0xJTkdPTiBMRVRURVIgR0gKK1UrRjhENglLTElOR09OIExFVFRFUiBICitVK0Y4RDcJS0xJTkdPTiBMRVRURVIgSQorVStGOEQ4CUtMSU5HT04gTEVUVEVSIEoKK1UrRjhEOQlLTElOR09OIExFVFRFUiBMCitVK0Y4REEJS0xJTkdPTiBMRVRURVIgTQorVStGOERCCUtMSU5HT04gTEVUVEVSIE4KK1UrRjhEQwlLTElOR09OIExFVFRFUiBORworVStGOERECUtMSU5HT04gTEVUVEVSIE8KK1UrRjhERQlLTElOR09OIExFVFRFUiBQCitVK0Y4REYJS0xJTkdPTiBMRVRURVIgUQorCS0gV3JpdHRlbiA8cT4gaW4gc3RhbmRhcmQgT2tyYW5kIExhdGluIHRyYW5zbGl0ZXJhdGlvbgorVStGOEUwCUtMSU5HT04gTEVUVEVSIFFICisJLSBXcml0dGVuIDxRPiBpbiBzdGFuZGFyZCBPa3JhbmQgTGF0aW4gdHJhbnNsaXRlcmF0aW9uCitVK0Y4RTEJS0xJTkdPTiBMRVRURVIgUgorVStGOEUyCUtMSU5HT04gTEVUVEVSIFMKK1UrRjhFMwlLTElOR09OIExFVFRFUiBUCitVK0Y4RTQJS0xJTkdPTiBMRVRURVIgVExICitVK0Y4RTUJS0xJTkdPTiBMRVRURVIgVQorVStGOEU2CUtMSU5HT04gTEVUVEVSIFYKK1UrRjhFNwlLTElOR09OIExFVFRFUiBXCitVK0Y4RTgJS0xJTkdPTiBMRVRURVIgWQorVStGOEU5CUtMSU5HT04gTEVUVEVSIEdMT1RUQUwgU1RPUAorCitVK0Y4RjAJS0xJTkdPTiBESUdJVCBaRVJPCitVK0Y4RjEJS0xJTkdPTiBESUdJVCBPTkUKK1UrRjhGMglLTElOR09OIERJR0lUIFRXTworVStGOEYzCUtMSU5HT04gRElHSVQgVEhSRUUKK1UrRjhGNAlLTElOR09OIERJR0lUIEZPVVIKK1UrRjhGNQlLTElOR09OIERJR0lUIEZJVkUKK1UrRjhGNglLTElOR09OIERJR0lUIFNJWAorVStGOEY3CUtMSU5HT04gRElHSVQgU0VWRU4KK1UrRjhGOAlLTElOR09OIERJR0lUIEVJR0hUCitVK0Y4RjkJS0xJTkdPTiBESUdJVCBOSU5FCisKK1UrRjhGRAlLTElOR09OIENPTU1BCitVK0Y4RkUJS0xJTkdPTiBGVUxMIFNUT1AKK1UrRjhGRglLTElOR09OIFNZTUJPTCBGT1IgRU1QSVJFCisKK090aGVyIEZpY3Rpb25hbCBhbmQgQXJ0aWZpY2lhbCBTY3JpcHRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSB0aGUgYXNzaWdubWVudCBvZiB0aGUgS2xpbmdvbiBMaW51eCBVbmljb2RlIGJsb2NrLCBhIHJlZ2lzdHJ5IG9mCitmaWN0aW9uYWwgYW5kIGFydGlmaWNpYWwgc2NyaXB0cyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBieSBKb2huIENvd2FuCis8amNvd2FuQHJldXRlcnNoZWFsdGguY29tPiBhbmQgTWljaGFlbCBFdmVyc29uIDxldmVyc29uQGV2ZXJ0eXBlLmNvbT4uCitUaGUgQ29uU2NyaXB0IFVuaWNvZGUgUmVnaXN0cnkgaXMgYWNjZXNzaWJsZSBhdDoKKworCSAgaHR0cDovL3d3dy5ldmVydHlwZS5jb20vc3RhbmRhcmRzL2NzdXIvCisKK1RoZSByYW5nZXMgdXNlZCBmYWxsIGF0IHRoZSBsb3cgZW5kIG9mIHRoZSBFbmQgVXNlciBab25lIGFuZCBjYW4gaGVuY2UKK25vdCBiZSBub3JtYXRpdmVseSBhc3NpZ25lZCwgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgcGVvcGxlIHdobword2lzaCB0byBlbmNvZGUgZmljdGlvbmFsIHNjcmlwdHMgdXNlIHRoZXNlIGNvZGVzLCBpbiB0aGUgaW50ZXJlc3Qgb2YKK2ludGVyb3BlcmFiaWxpdHkuICBGb3IgS2xpbmdvbiwgQ1NVUiBoYXMgYWRvcHRlZCB0aGUgTGludXggZW5jb2RpbmcuCitUaGUgQ1NVUiBwZW9wbGUgYXJlIGRyaXZpbmcgYWRkaW5nIFRlbmd3YXIgYW5kIENpcnRoIGludG8gVW5pY29kZQorUGxhbmUgMTsgdGhlIGFkZGl0aW9uIG9mIEtsaW5nb24gdG8gVW5pY29kZSBQbGFuZSAxIGhhcyBiZWVuIHJlamVjdGVkCithbmQgc28gdGhlIGFib3ZlIGVuY29kaW5nIHJlbWFpbnMgb2ZmaWNpYWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9DUkVESVRTIGIvRG9jdW1lbnRhdGlvbi91c2IvQ1JFRElUUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWU3Zjg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvQ1JFRElUUwpAQCAtMCwwICsxLDE3NSBAQAorQ3JlZGl0cyBmb3IgdGhlIFNpbXBsZSBMaW51eCBVU0IgRHJpdmVyOgorCitUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoaXMgY29kZSAoaW4gYWxwaGFiZXRpY2FsCitvcmRlciBieSBsYXN0IG5hbWUpLiAgSSdtIHN1cmUgdGhpcyBsaXN0IHNob3VsZCBiZSBsb25nZXIsIGl0cworZGlmZmljdWx0IHRvIG1haW50YWluLCBhZGQgeW91cnNlbGYgd2l0aCBhIHBhdGNoIGlmIGRlc2lyZWQuCisKKyAgR2VvcmcgQWNoZXIgPGFjaGVyQGluZm9ybWF0aWsudHUtbXVlbmNoZW4uZGU+CisgIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorICBSYW5keSBEdW5sYXAgPHJhbmR5LmR1bmxhcEBpbnRlbC5jb20+CisgIEpvaGFubmVzIEVyZGZlbHQgPGpvaGFubmVzQGVyZGZlbHQuY29tPgorICBEZXRpIEZsaWVnbCA8ZGV0aUBmbGllZ2wuZGU+CisgIGhhbSA8aGFtQHVuc3VhdmUuY29tPgorICBCcmFkbGV5IE0gS2VyeWFuIDxrZXJ5YW5AYW5kcmV3LmNtdS5lZHU+CisgIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisgIFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKyAgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0Bjcy5hbnUuZWR1LmF1PgorICBQZXRrbyBNYW5sb2xvdiA8cGV0a2FuQGRjZS5iZz4KKyAgRGF2aWQgRS4gTmVsc29uIDxkbmVsc29uQGp1bXAubmV0PgorICBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICBCaWxsIFJ5ZGVyIDxicnlkZXJAc2dpLmNvbT4KKyAgVGhvbWFzIFNhaWxlciA8c2FpbGVyQGlmZS5lZS5ldGh6LmNoPgorICBHcmVnb3J5IFAuIFNtaXRoIDxncmVnQGVsZWN0cmljcmFpbi5jb20+CisgIExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKyAgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICA8S2F6dWtpLllhc3VtYXRzdUBmdWppeGVyb3guY28uanA+CisKK1NwZWNpYWwgdGhhbmtzIHRvOgorCisgIEluYWt5IFBlcmV6IEdvbnphbGV6IDxpbmFreUBwZWxvbmNoby5maXMudWNtLmVzPiBmb3Igc3RhcnRpbmcgdGhlCisgIExpbnV4IFVTQiBkcml2ZXIgZWZmb3J0IGFuZCB3cml0aW5nIG11Y2ggb2YgdGhlIGxhcmdlciB1dXNiZCBkcml2ZXIuCisgIE11Y2ggaGFzIGJlZW4gbGVhcm5lZCBmcm9tIHRoYXQgZWZmb3J0LgorCisgIFRoZSBOZXRCU0QgJiBGcmVlQlNEIFVTQiBkZXZlbG9wZXJzLiAgRm9yIGJlaW5nIG9uIHRoZSBMaW51eCBVU0IgbGlzdAorICBhbmQgb2ZmZXJpbmcgc3VnZ2VzdGlvbnMgYW5kIHNoYXJpbmcgaW1wbGVtZW50YXRpb24gZXhwZXJpZW5jZXMuCisKK0FkZGl0aW9uYWwgdGhhbmtzIHRvIHRoZSBmb2xsb3dpbmcgY29tcGFuaWVzIGFuZCBwZW9wbGUgZm9yIGRvbmF0aW9ucworb2YgaGFyZHdhcmUsIHN1cHBvcnQsIHRpbWUgYW5kIGRldmVsb3BtZW50ICh0aGlzIGlzIGZyb20gdGhlIG9yaWdpbmFsCitUSEFOS1MgZmlsZSBpbiBJbmFreSdzIGRyaXZlcik6CisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBjb3Jwb3JhdGlvbnMgaGF2ZSBoZWxwZWQgdXMgaW4gdGhlIGRldmVsb3BtZW50CisgICAgICAgIG9mIExpbnV4IFVTQiAvIFVVU0JEOgorCisJLSAzQ29tIEdtYkggZm9yIGRvbmF0aW5nIGEgSVNETiBQcm8gVEEgYW5kIHN1cHBvcnRpbmcgbWUKKwkgIGluIHRlY2huaWNhbCBxdWVzdGlvbnMgYW5kIHdpdGggdGVzdCBlcXVpcG1lbnQuIEknZCBuZXZlciAKKwkgIGV4cGVjdCBzdWNoIGEgZ3JlYXQgaGVscC4KKworICAgICAgICAtIFVTQVIgU3lzdGVtcyBwcm92aWRlZCB1cyB3aXRoIG9uZSBvZiB0aGVpciBleGNlbGxlbnQgVVNCCisgICAgICAgICAgRXZhbHVhdGlvbiBLaXRzLiBJdCBhbGxvd3MgdXMgdG8gdGVzdCB0aGUgTGludXgtVVNCIGRyaXZlcgorICAgICAgICAgIGZvciBjb21wbGlhbmNlIHdpdGggdGhlIGxhdGVzdCBVU0Igc3BlY2lmaWNhdGlvbi4gVVNBUgorICAgICAgICAgIFN5c3RlbXMgcmVjb2duaXplZCB0aGUgaW1wb3J0YW5jZSBvZiBhbiB1cC10by1kYXRlIG9wZW4KKyAgICAgICAgICBPcGVyYXRpbmcgU3lzdGVtIGFuZCBzdXBwb3J0cyB0aGlzIHByb2plY3Qgd2l0aAorICAgICAgICAgIEhhcmR3YXJlLiBUaGFua3MhLgorCisgICAgICAgIC0gVGhhbmtzIHRvIEludGVsIENvcnBvcmF0aW9uIGZvciB0aGVpciBwcmVjaW91cyBoZWxwLgorCisgICAgICAgIC0gV2UgdGVhbWVkIHVwIHdpdGggQ2hlcnJ5IHRvIG1ha2UgTGludXggdGhlIGZpcnN0IE9TIHdpdGgKKyAgICAgICAgICBidWlsdC1pbiBVU0Igc3VwcG9ydC4gQ2hlcnJ5IGlzIG9uZSBvZiB0aGUgYmlnZ2VzdCBrZXlib2FyZAorICAgICAgICAgIG1ha2VycyBpbiB0aGUgd29ybGQuCisKKyAgICAgICAgLSBDTUQgVGVjaG5vbG9neSwgSW5jLiBzcG9uc29yZWQgdXMga2luZGx5IGRvbmF0aW5nIGEgQ1NBLTY3MDAKKyAgICAgICAgICBQQ0ktdG8tVVNCIENvbnRyb2xsZXIgQm9hcmQgdG8gdGVzdCB0aGUgT0hDSSBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAtIER1ZSB0byB0aGVpciBzdXBwb3J0IHRvIHVzLCBLZXl0cm9uaWMgY2FuIGJlIHN1cmUgdGhhdCB0aGV5CisgICAgICAgICAgd2lsbCBzZWxsIGtleWJvYXJkcyB0byBzb21lIG9mIHRoZSAzIG1pbGxpb24gKGF0IGxlYXN0KQorICAgICAgICAgIExpbnV4IHVzZXJzLgorCisgICAgICAgIC0gTWFueSB0aGFua3MgdG8gaW5nIGL8cm8gaCBkb3JhbiBbaHR0cDovL3d3dy5pYmhkb3Jhbi5jb21dIQorICAgICAgICAgIEl0IHdhcyBhbG1vc3QgaW1wb3NzaWJsZSB0byBnZXQgYSBQQyBiYWNrcGxhdGUgVVNCIGNvbm5lY3RvcgorICAgICAgICAgIGZvciB0aGUgbW90aGVyYm9hcmQgaGVyZSBhdCBFdXJvcGUgKG1pbmUsIGhvbWUtbWFkZSwgd2FzCisgICAgICAgICAgcXVpdGUgbG91c3kgOikuIE5vdyBJIGtub3cgd2hlcmUgdG8gYWNxdWlyZSBuaWNlIFVTQiBzdHVmZiEKKworICAgICAgICAtIEdlbml1cyBHZXJtYW55IGRvbmF0ZWQgYSBVU0IgbW91c2UgdG8gdGVzdCB0aGUgbW91c2UgYm9vdAorICAgICAgICAgIHByb3RvY29sLiBUaGV5J3ZlIGFsc28gZG9uYXRlZCBhIEYtMjMgZGlnaXRhbCBqb3lzdGljayBhbmQgYQorICAgICAgICAgIE5ldE1vdXNlIFByby4gVGhhbmtzISAKKworICAgICAgICAtIEFWTSBHbWJIIEJlcmxpbiBpcyBzdXBwb3J0aW5nIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgTGludXgKKyAgICAgICAgICBVU0IgZHJpdmVyIGZvciB0aGUgQVZNIElTRE4gQ29udHJvbGxlciBCMSBVU0IuIEFWTSBpcyBhCisgICAgICAgICAgbGVhZGluZyBtYW51ZmFjdHVyZXIgZm9yIGFjdGl2ZSBhbmQgcGFzc2l2ZSBJU0ROIENvbnRyb2xsZXJzCisgICAgICAgICAgYW5kIENBUEkgMi4wLWJhc2VkIHNvZnR3YXJlLiBUaGUgYWN0aXZlIGRlc2lnbiBvZiB0aGUgQVZNIEIxCisgICAgICAgICAgaXMgb3BlbiBmb3IgYWxsIE9TIHBsYXRmb3JtcywgaW5jbHVkaW5nIExpbnV4LgorCisgICAgICAgIC0gVGhhbmtzIHRvIFktRSBEYXRhLCBJbmMuIGZvciBkb25hdGluZyB0aGVpciBGbGFzaEJ1c3Rlci1VCisgICAgICAgICAgVVNCIEZsb3BweSBEaXNrIERyaXZlLCBzbyB3ZSBjb3VsZCB0ZXN0IHRoZSBidWxrIHRyYW5zZmVyCisgICAgICAgICAgY29kZS4KKworICAgICAgICAtIE1hbnkgdGhhbmtzIHRvIExvZ2l0ZWNoIGZvciBjb250cmlidXRpbmcgYSB0aHJlZSBheGlzIFVTQgorICAgICAgICAgIG1vdXNlLiAKKworICAgICAgICAgIExvZ2l0ZWNoIGRlc2lnbnMsIG1hbnVmYWN0dXJlcyBhbmQgbWFya2V0cworICAgICAgICAgIEh1bWFuIEludGVyZmFjZSBEZXZpY2VzLCBoYXZpbmcgYSBsb25nIGhpc3RvcnkgYW5kCisgICAgICAgICAgZXhwZXJpZW5jZSBpbiBtYWtpbmcgZGV2aWNlcyBzdWNoIGFzIGtleWJvYXJkcywgbWljZSwKKyAgICAgICAgICB0cmFja2JhbGxzLCBjYW1lcmFzLCBsb3Vkc3BlYWtlcnMgYW5kIGNvbnRyb2wgZGV2aWNlcyBmb3IKKyAgICAgICAgICBnYW1pbmcgYW5kIHByb2Zlc3Npb25hbCB1c2UuCisKKyAgICAgICAgICBCZWluZyBhIHJlY29nbml6ZWQgdmVuZG9yIGFuZCBzZWxsZXIgZm9yIGFsbCB0aGVzZSBkZXZpY2VzLAorICAgICAgICAgIHRoZXkgaGF2ZSBkb25hdGVkIFVTQiBtaWNlLCBhIGpveXN0aWNrIGFuZCBhIHNjYW5uZXIsIGFzIGEKKyAgICAgICAgICB3YXkgdG8gYWNrbm93bGVkZ2UgdGhlIGltcG9ydGFuY2Ugb2YgTGludXggYW5kIHRvIGFsbG93CisgICAgICAgICAgTG9naXRlY2ggY3VzdG9tZXJzIHRvIGVuam95IHN1cHBvcnQgaW4gdGhlaXIgZmF2b3JpdGUKKyAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgYWxsIExpbnV4IHVzZXJzIHRvIHVzZSBMb2dpdGVjaCBhbmQKKyAgICAgICAgICBvdGhlciBVU0IgaGFyZHdhcmUuCisKKyAgICAgICAgICBMb2dpdGVjaCBpcyBvZmZpY2lhbCBzcG9uc29yIG9mIHRoZSBMaW51eCBDb25mZXJlbmNlIG9uCisgICAgICAgICAgRmViLiAxMXRoIDE5OTkgaW4gVmllbm5hLCB3aGVyZSB3ZSdsbCB3aWxsIHByZXNlbnQgdGhlCisgICAgICAgICAgY3VycmVudCBzdGF0ZSBvZiB0aGUgTGludXggVVNCIGVmZm9ydC4KKworICAgICAgICAtIENBVEMgaGFzIHByb3ZpZGVkIG1lYW5zIHRvIHVuY292ZXIgZGFyayBjb3JuZXJzIG9mIHRoZSBVSENJCisgICAgICAgICAgaW5uZXIgd29ya2luZ3Mgd2l0aCBhIFVTQiBJbnNwZWN0b3IuCisKKyAgICAgICAgLSBUaGFua3MgdG8gRW50cmVnYSBmb3IgcHJvdmlkaW5nIFBDSSB0byBVU0IgY2FyZHMsIGh1YnMgYW5kCisgICAgICAgICAgY29udmVydGVyIHByb2R1Y3RzIGZvciBkZXZlbG9wbWVudC4gCisKKwktIFRoYW5rcyB0byBDb25uZWN0VGVjaCBmb3IgcHJvdmlkaW5nIGEgV2hpdGVIRUFUIHVzYiB0bworCSAgc2VyaWFsIGNvbnZlcnRlciwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZGV2aWNlIHRvCisJICBhbGxvdyBhIGRyaXZlciB0byBiZSB3cml0dGVuLgorCisJLSBUaGFua3MgdG8gQURNdGVrIGZvciBwcm92aWRpbmcgUGVnYXN1cyBhbmQgUGVnYXN1cyBJSQorCSAgZXZhbHVhdGlvbiBib2FyZHMsIHNwZWNzIGFuZCB2YWx1YWJsZSBhZHZpY2VzIGR1cmluZworCSAgdGhlIGRyaXZlciBkZXZlbG9wbWVudC4KKwkKKyAgICAgICAgQW5kIHRoYW5rcyBnbyB0byAoaGV5ISBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyIDopCisKKyAgICAgICAgLSBPcmVuIFRpcm9zaCA8b3JlbnRpQGhpc2hvbWUubmV0PiwgZm9yIHN0YW5kaW5nIHNvIHBhdGllbnRseQorICAgICAgICAgIGFsbCBteSBkb3VidHMnYm91dCBVU0IgYW5kIGdpdmluZyBsb3RzIG9mIGNvb2wgaWRlYXMuCisKKyAgICAgICAgLSBKb2NoZW4gS2FycmVyIDxrYXJyZXJAd3BmZDI1LnBoeXNpay51bmktd3VlcnpidXJnLmRlPiwgZm9yCisgICAgICAgICAgcG9pbnRpbmcgb3V0IG1vcnRhbCBidWdzIGFuZCBnaXZpbmcgYWR2aWNlLgorCisgICAgICAgIC0gRWRtdW5kIEh1bWVtYmVyZ2VyIDxlZEBhdG5ldC5hdD4sIGZvciBpdCdzIGdyZWF0IHdvcmsgb24KKyAgICAgICAgICBwdWJsaWMgcmVsYXRpb25zaGlwcyBhbmQgZ2VuZXJhbCBtYW5hZ2VtZW50IHN0dWZmIGZvciB0aGUKKyAgICAgICAgICBMaW51eC1VU0IgZWZmb3J0LgorCisgICAgICAgIC0gQWxiZXJ0byBNZW5lZ2F6emkgPGZsYXNoQGZsYXNoLmlvbC5pdD4gaXMgc3RhcnRpbmcgdGhlCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFVVU0JELiBHbyBmb3IgaXQhCisKKyAgICAgICAgLSBSaWMgS2xhcmVuIDxpYV9yaWNAY3MudXR3ZW50ZS5ubD4gZm9yIGRvaW5nIG5pY2UKKyAgICAgICAgICBpbnRyb2R1Y3RvcnkgZG9jdW1lbnRzIChjb21wZXRpbmcgd2l0aCBBbGJlcnRvJ3MgOikuCisKKyAgICAgICAgLSBDaHJpc3RpYW4gR3JvZXNzbGVyIDxjcGdAYWxhZGRpbi5kZT4sIGZvciBpdCdzIGhlbHAgb24gdGhvc2UKKyAgICAgICAgICBpdGNoeSBiaXRzIC4uLiA6KQorCisgICAgICAgIC0gUGF1bCBNYWNLZXJyYXMgZm9yIHBvbGlzaGluZyBPSENJIGFuZCBwdXNoaW5nIG1lIGhhcmRlciBmb3IKKyAgICAgICAgICB0aGUgaU1hYyBzdXBwb3J0LCBnaXZpbmcgaW1wcm92ZW1lbnRzIGFuZCBlbmhhbmNlbWVudHMuCisKKyAgICAgICAgLSBGZXJuYW5kbyBIZXJyZXJhIDxmaGVycmVyYUBldXJpZWxlYy5ldHNpdC51cG0uZXM+IGhhcyB0YWtlbgorICAgICAgICAgIGNoYXJnZSBvZiBjb21wb3NpbmcsIG1haW50YWluaW5nIGFuZCBmZWVkaW5nIHRoZQorICAgICAgICAgIGxvbmctYXdhaXRlZCwgdW5pcXVlIGFuZCBtYXJ2ZWxvdXMgVVVTQkQgRkFRISBUYWRhYWFhISEhCisKKyAgICAgICAgLSBSYXNjYSBHbWVsY2ggPHRocm9uQGdteC5kZT4gaGFzIHJldml2ZWQgdGhlIHJhdyBkcml2ZXIgYW5kCisgICAgICAgICAgcG9pbnRlZCBidWdzLCBhcyB3ZWxsIGFzIHN0YXJ0ZWQgdGhlIHV1c2JkLXV0aWxzIHBhY2thZ2UuCisKKyAgICAgICAgLSBQZXRlciBEZXR0b3JpIDxkZXR0b3JpQG96eS5kZWMuY29tPiBpcyB1bmNvdmVyaW5nIGJ1Z3MgbGlrZQorICAgICAgICAgIGNyYXp5LCBhcyB3ZWxsIGFzIG1ha2luZyBjb29sIHN1Z2dlc3Rpb25zLCBncmVhdCA6KQorCisgICAgICAgIC0gQWxsIHRoZSBGcmVlIFNvZnR3YXJlIGFuZCBMaW51eCBjb21tdW5pdHksIHRoZSBGU0YgJiB0aGUgR05VCisgICAgICAgICAgcHJvamVjdCwgdGhlIE1JVCBYIGNvbnNvcnRpdW0sIHRoZSBUZVggcGVvcGxlIC4uLiBldmVyeW9uZSEKKyAgICAgICAgICBZb3Uga25vdyB3aG8geW91IGFyZSEKKworICAgICAgICAtIEJpZyB0aGFua3MgdG8gUmljaGFyZCBTdGFsbG1hbiBmb3IgY3JlYXRpbmcgRW1hY3MhCisKKyAgICAgICAgLSBUaGUgcGVvcGxlIGF0IHRoZSBsaW51eC11c2IgbWFpbGluZyBsaXN0LCBmb3IgcmVhZGluZyBzbworICAgICAgICAgIG1hbnkgbWVzc2FnZXMgOikgT2ssIG5vIG1vcmUga2lkZGluZzsgZm9yIGFsbCB5b3VyIGFkdmlzZXMhCisKKyAgICAgICAgLSBBbGwgdGhlIHBlb3BsZSBhdCB0aGUgVVNCIEltcGxlbWVudG9ycyBGb3J1bSBmb3IgdGhlaXIKKyAgICAgICAgICBoZWxwIGFuZCBhc3Npc3RhbmNlLgorCisgICAgICAgIC0gTmF0aGFuIE15ZXJzIDxuY21AY2FudHJpcC5vcmc+LCBmb3IgaGlzIGFkdmljZSEgKGhvcGUgeW91CisgICAgICAgICAgbGlrZWQgQ2liZWxlcycgcGFydHkpLgorCisgICAgICAgIC0gTGludXMgVG9ydmFsZHMsIGZvciBzdGFydGluZywgZGV2ZWxvcGluZyBhbmQgbWFuYWdpbmcgTGludXguCisKKyAgICAgICAgLSBNaWtlIFNtaXRoLCBDcmFpZyBLZWl0aGxleSwgVGhpZXJyeSBHaXJvbiBhbmQgSmFuZXQgU2NoYW5rCisgICAgICAgICAgZm9yIGNvbnZpbmNpbmcgbWUgVVNCIFN0YW5kYXJkIGh1YnMgYXJlIG5vdCB0aGF0IHN0YW5kYXJkCisgICAgICAgICAgYW5kIHRoYXQncyBnb29kIHRvIGFsbG93IGZvciB2ZW5kb3Igc3BlY2lmaWMgcXVpcmtzIG9uIHRoZQorICAgICAgICAgIHN0YW5kYXJkIGh1YiBkcml2ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvVVJCLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTliOTVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvVVJCLnR4dApAQCAtMCwwICsxLDI1MiBAQAorUmV2aXNlZDogMjAwMC1EZWMtMDUuCitBZ2FpbjogICAyMDAyLUp1bC0wNgorCisgICAgTk9URToKKworICAgIFRoZSBVU0Igc3Vic3lzdGVtIG5vdyBoYXMgYSBzdWJzdGFudGlhbCBzZWN0aW9uIGluICJUaGUgTGludXggS2VybmVsIEFQSSIKKyAgICBndWlkZSAoaW4gRG9jdW1lbnRhdGlvbi9Eb2NCb29rKSwgZ2VuZXJhdGVkIGZyb20gdGhlIGN1cnJlbnQgc291cmNlCisgICAgY29kZS4gIFRoaXMgcGFydGljdWxhciBkb2N1bWVudGF0aW9uIGZpbGUgaXNuJ3QgcGFydGljdWxhcmx5IGN1cnJlbnQgb3IKKyAgICBjb21wbGV0ZTsgZG9uJ3QgcmVseSBvbiBpdCBleGNlcHQgZm9yIGEgcXVpY2sgb3ZlcnZpZXcuCisKKworMS4xLiBCYXNpYyBjb25jZXB0IG9yICdXaGF0IGlzIGFuIFVSQj8nCisKK1RoZSBiYXNpYyBpZGVhIG9mIHRoZSBuZXcgZHJpdmVyIGlzIG1lc3NhZ2UgcGFzc2luZywgdGhlIG1lc3NhZ2UgaXRzZWxmIGlzIAorY2FsbGVkIFVTQiBSZXF1ZXN0IEJsb2NrLCBvciBVUkIgZm9yIHNob3J0LiAKKworLSBBbiBVUkIgY29uc2lzdHMgb2YgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uIHRvIGV4ZWN1dGUgYW55IFVTQiB0cmFuc2FjdGlvbiAKKyAgYW5kIGRlbGl2ZXIgdGhlIGRhdGEgYW5kIHN0YXR1cyBiYWNrLiAKKworLSBFeGVjdXRpb24gb2YgYW4gVVJCIGlzIGluaGVyZW50bHkgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiwgaS5lLiB0aGUgCisgIHVzYl9zdWJtaXRfdXJiKHVyYikgY2FsbCByZXR1cm5zIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGhhcyBzdWNjZXNzZnVsbHkgcXVldWVkIAorICB0aGUgcmVxdWVzdGVkIGFjdGlvbi4gCisKKy0gVHJhbnNmZXJzIGZvciBvbmUgVVJCIGNhbiBiZSBjYW5jZWxlZCB3aXRoIHVzYl91bmxpbmtfdXJiKHVyYikgYXQgYW55IHRpbWUuIAorCistIEVhY2ggVVJCIGhhcyBhIGNvbXBsZXRpb24gaGFuZGxlciwgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSBhY3Rpb24KKyAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBvciBjYW5jZWxlZC4gVGhlIFVSQiBhbHNvIGNvbnRhaW5zIGEKKyAgY29udGV4dC1wb2ludGVyIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuCisKKy0gRWFjaCBlbmRwb2ludCBmb3IgYSBkZXZpY2UgbG9naWNhbGx5IHN1cHBvcnRzIGEgcXVldWUgb2YgcmVxdWVzdHMuCisgIFlvdSBjYW4gZmlsbCB0aGF0IHF1ZXVlLCBzbyB0aGF0IHRoZSBVU0IgaGFyZHdhcmUgY2FuIHN0aWxsIHRyYW5zZmVyCisgIGRhdGEgdG8gYW4gZW5kcG9pbnQgd2hpbGUgeW91ciBkcml2ZXIgaGFuZGxlcyBjb21wbGV0aW9uIG9mIGFub3RoZXIuCisgIFRoaXMgbWF4aW1pemVzIHVzZSBvZiBVU0IgYmFuZHdpZHRoLCBhbmQgc3VwcG9ydHMgc2VhbWxlc3Mgc3RyZWFtaW5nCisgIG9mIGRhdGEgdG8gKG9yIGZyb20pIGRldmljZXMgd2hlbiB1c2luZyBwZXJpb2RpYyB0cmFuc2ZlciBtb2Rlcy4KKworCisxLjIuIFRoZSBVUkIgc3RydWN0dXJlCisKK1NvbWUgb2YgdGhlIGZpZWxkcyBpbiBhbiBVUkIgYXJlOgorCitzdHJ1Y3QgdXJiCit7CisvLyAoSU4pIGRldmljZSBhbmQgcGlwZSBzcGVjaWZ5IHRoZSBlbmRwb2ludCBxdWV1ZQorCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7ICAgICAgICAgLy8gcG9pbnRlciB0byBhc3NvY2lhdGVkIFVTQiBkZXZpY2UKKwl1bnNpZ25lZCBpbnQgcGlwZTsgICAgICAgICAgICAgIC8vIGVuZHBvaW50IGluZm9ybWF0aW9uCisKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfZmxhZ3M7ICAgIC8vIElTT19BU0FQLCBTSE9SVF9OT1RfT0ssIGV0Yy4KKworLy8gKElOKSBhbGwgdXJicyBuZWVkIGNvbXBsZXRpb24gcm91dGluZXMKKwl2b2lkICpjb250ZXh0OyAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgZm9yIGNvbXBsZXRpb24gcm91dGluZQorCXZvaWQgKCpjb21wbGV0ZSkoc3RydWN0IHVyYiAqKTsgLy8gcG9pbnRlciB0byBjb21wbGV0aW9uIHJvdXRpbmUKKworLy8gKE9VVCkgc3RhdHVzIGFmdGVyIGVhY2ggY29tcGxldGlvbgorCWludCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgc3RhdHVzCisKKy8vIChJTikgYnVmZmVyIHVzZWQgZm9yIGRhdGEgdHJhbnNmZXJzCisJdm9pZCAqdHJhbnNmZXJfYnVmZmVyOyAgICAgICAgICAvLyBhc3NvY2lhdGVkIGRhdGEgYnVmZmVyCisJaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7ICAgICAvLyBkYXRhIGJ1ZmZlciBsZW5ndGgKKwlpbnQgbnVtYmVyX29mX3BhY2tldHM7ICAgICAgICAgIC8vIHNpemUgb2YgaXNvX2ZyYW1lX2Rlc2MKKworLy8gKE9VVCkgc29tZXRpbWVzIG9ubHkgcGFydCBvZiBDVFJML0JVTEsvSU5UUiB0cmFuc2Zlcl9idWZmZXIgaXMgdXNlZAorCWludCBhY3R1YWxfbGVuZ3RoOyAgICAgICAgICAgICAgLy8gYWN0dWFsIGRhdGEgYnVmZmVyIGxlbmd0aAorCisvLyAoSU4pIHNldHVwIHN0YWdlIGZvciBDVFJMIChwYXNzIGEgc3RydWN0IHVzYl9jdHJscmVxdWVzdCkKKwl1bnNpZ25lZCBjaGFyKiBzZXR1cF9wYWNrZXQ7ICAgIC8vIHNldHVwIHBhY2tldCAoY29udHJvbCBvbmx5KQorCisvLyBPbmx5IGZvciBQRVJJT0RJQyB0cmFuc2ZlcnMgKElTTywgSU5URVJSVVBUKQorICAgIC8vIChJTi9PVVQpIHN0YXJ0X2ZyYW1lIGlzIHNldCB1bmxlc3MgSVNPX0FTQVAgaXNuJ3Qgc2V0CisJaW50IHN0YXJ0X2ZyYW1lOyAgICAgICAgICAgICAgICAvLyBzdGFydCBmcmFtZQorCWludCBpbnRlcnZhbDsgICAgICAgICAgICAgICAgICAgLy8gcG9sbGluZyBpbnRlcnZhbAorCisgICAgLy8gSVNPIG9ubHk6IHBhY2tldHMgYXJlIG9ubHkgImJlc3QgZWZmb3J0IjsgZWFjaCBjYW4gaGF2ZSBlcnJvcnMKKwlpbnQgZXJyb3JfY291bnQ7ICAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBlcnJvcnMKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciBpc29fZnJhbWVfZGVzY1swXTsKK307CisKK1lvdXIgZHJpdmVyIG11c3QgY3JlYXRlIHRoZSAicGlwZSIgdmFsdWUgdXNpbmcgdmFsdWVzIGZyb20gdGhlIGFwcHJvcHJpYXRlCitlbmRwb2ludCBkZXNjcmlwdG9yIGluIGFuIGludGVyZmFjZSB0aGF0IGl0J3MgY2xhaW1lZC4KKworCisxLjMuIEhvdyB0byBnZXQgYW4gVVJCPworCitVUkJzIGFyZSBhbGxvY2F0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNhbGwKKworCXN0cnVjdCB1cmIgKnVzYl9hbGxvY191cmIoaW50IGlzb2ZyYW1lcywgaW50IG1lbV9mbGFncykKKworUmV0dXJuIHZhbHVlIGlzIGEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIFVSQiwgMCBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KK1RoZSBwYXJhbWV0ZXIgaXNvZnJhbWVzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGZyYW1lcworeW91IHdhbnQgdG8gc2NoZWR1bGUuIEZvciBDVFJML0JVTEsvSU5ULCB1c2UgMC4gIFRoZSBtZW1fZmxhZ3MgcGFyYW1ldGVyCitob2xkcyBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncywgbGV0dGluZyB5b3UgY29udHJvbCAoYW1vbmcgb3RoZXIKK3RoaW5ncykgd2hldGhlciB0aGUgdW5kZXJseWluZyBjb2RlIG1heSBibG9jayBvciBub3QuCisKK1RvIGZyZWUgYW4gVVJCLCB1c2UKKworCXZvaWQgdXNiX2ZyZWVfdXJiKHN0cnVjdCB1cmIgKnVyYikKKworWW91IG1heSBub3QgZnJlZSBhbiB1cmIgdGhhdCB5b3UndmUgc3VibWl0dGVkLCBidXQgd2hpY2ggaGFzbid0IHlldCBiZWVuCityZXR1cm5lZCB0byB5b3UgaW4gYSBjb21wbGV0aW9uIGNhbGxiYWNrLgorCisKKzEuNC4gV2hhdCBoYXMgdG8gYmUgZmlsbGVkIGluPworCitEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdHJhbnNhY3Rpb24sIHRoZXJlIGFyZSBzb21lIGlubGluZSBmdW5jdGlvbnMgCitkZWZpbmVkIGluIDxsaW51eC91c2IuaD4gdG8gc2ltcGxpZnkgdGhlIGluaXRpYWxpemF0aW9uLCBzdWNoIGFzCitmaWxsX2NvbnRyb2xfdXJiKCkgYW5kIGZpbGxfYnVsa191cmIoKS4gIEluIGdlbmVyYWwsIHRoZXkgbmVlZCB0aGUgdXNiCitkZXZpY2UgcG9pbnRlciwgdGhlIHBpcGUgKHVzdWFsIGZvcm1hdCBmcm9tIHVzYi5oKSwgdGhlIHRyYW5zZmVyIGJ1ZmZlciwKK3RoZSBkZXNpcmVkIHRyYW5zZmVyIGxlbmd0aCwgdGhlIGNvbXBsZXRpb24gIGhhbmRsZXIsIGFuZCBpdHMgY29udGV4dC4gCitUYWtlIGEgbG9vayBhdCB0aGUgc29tZSBleGlzdGluZyBkcml2ZXJzIHRvIHNlZSBob3cgdGhleSdyZSB1c2VkLgorCitGbGFnczoKK0ZvciBJU08gdGhlcmUgYXJlIHR3byBzdGFydHVwIGJlaGF2aW9yczogU3BlY2lmaWVkIHN0YXJ0X2ZyYW1lIG9yIEFTQVAuCitGb3IgQVNBUCBzZXQgVVJCX0lTT19BU0FQIGluIHRyYW5zZmVyX2ZsYWdzLgorCitJZiBzaG9ydCBwYWNrZXRzIHNob3VsZCBOT1QgYmUgdG9sZXJhdGVkLCBzZXQgVVJCX1NIT1JUX05PVF9PSyBpbiAKK3RyYW5zZmVyX2ZsYWdzLgorCisKKzEuNS4gSG93IHRvIHN1Ym1pdCBhbiBVUkI/CisKK0p1c3QgY2FsbAorCisJaW50IHVzYl9zdWJtaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncykKKworVGhlIG1lbV9mbGFncyBwYXJhbWV0ZXIsIHN1Y2ggYXMgU0xBQl9BVE9NSUMsIGNvbnRyb2xzIG1lbW9yeSBhbGxvY2F0aW9uLAorc3VjaCBhcyB3aGV0aGVyIHRoZSBsb3dlciBsZXZlbHMgbWF5IGJsb2NrIHdoZW4gbWVtb3J5IGlzIHRpZ2h0LgorCitJdCBpbW1lZGlhdGVseSByZXR1cm5zLCBlaXRoZXIgd2l0aCBzdGF0dXMgMCAocmVxdWVzdCBxdWV1ZWQpIG9yIHNvbWUKK2Vycm9yIGNvZGUsIHVzdWFsbHkgY2F1c2VkIGJ5IHRoZSBmb2xsb3dpbmc6CisKKy0gT3V0IG9mIG1lbW9yeSAoLUVOT01FTSkKKy0gVW5wbHVnZ2VkIGRldmljZSAoLUVOT0RFVikKKy0gU3RhbGxlZCBlbmRwb2ludCAoLUVQSVBFKQorLSBUb28gbWFueSBxdWV1ZWQgSVNPIHRyYW5zZmVycyAoLUVBR0FJTikKKy0gVG9vIG1hbnkgcmVxdWVzdGVkIElTTyBmcmFtZXMgKC1FRkJJRykKKy0gSW52YWxpZCBJTlQgaW50ZXJ2YWwgKC1FSU5WQUwpCistIE1vcmUgdGhhbiBvbmUgcGFja2V0IGZvciBJTlQgKC1FSU5WQUwpCisKK0FmdGVyIHN1Ym1pc3Npb24sIHVyYi0+c3RhdHVzIGlzIC1FSU5QUk9HUkVTUzsgaG93ZXZlciwgeW91IHNob3VsZCBuZXZlcgorbG9vayBhdCB0aGF0IHZhbHVlIGV4Y2VwdCBpbiB5b3VyIGNvbXBsZXRpb24gY2FsbGJhY2suCisKK0ZvciBpc29jaHJvbm91cyBlbmRwb2ludHMsIHlvdXIgY29tcGxldGlvbiBoYW5kbGVycyBzaG91bGQgKHJlKXN1Ym1pdAorVVJCcyB0byB0aGUgc2FtZSBlbmRwb2ludCB3aXRoIHRoZSBJU09fQVNBUCBmbGFnLCB1c2luZyBtdWx0aS1idWZmZXJpbmcsCit0byBnZXQgc2VhbWxlc3MgSVNPIHN0cmVhbWluZy4KKworCisxLjYuIEhvdyB0byBjYW5jZWwgYW4gYWxyZWFkeSBydW5uaW5nIFVSQj8KKworRm9yIGFuIFVSQiB3aGljaCB5b3UndmUgc3VibWl0dGVkLCBidXQgd2hpY2ggaGFzbid0IGJlZW4gcmV0dXJuZWQgdG8KK3lvdXIgZHJpdmVyIGJ5IHRoZSBob3N0IGNvbnRyb2xsZXIsIGNhbGwKKworCWludCB1c2JfdW5saW5rX3VyYihzdHJ1Y3QgdXJiICp1cmIpCisKK0l0IHJlbW92ZXMgdGhlIHVyYiBmcm9tIHRoZSBpbnRlcm5hbCBsaXN0IGFuZCBmcmVlcyBhbGwgYWxsb2NhdGVkCitIVyBkZXNjcmlwdG9ycy4gVGhlIHN0YXR1cyBpcyBjaGFuZ2VkIHRvIHJlZmxlY3QgdW5saW5raW5nLiBBZnRlciAKK3VzYl91bmxpbmtfdXJiKCkgcmV0dXJucyB3aXRoIHRoYXQgc3RhdHVzIGNvZGUsIHlvdSBjYW4gZnJlZSB0aGUgVVJCCit3aXRoIHVzYl9mcmVlX3VyYigpLgorCitUaGVyZSBpcyBhbHNvIGFuIGFzeW5jaHJvbm91cyB1bmxpbmsgbW9kZS4gIFRvIHVzZSB0aGlzLCBzZXQgdGhlCit0aGUgVVJCX0FTWU5DX1VOTElOSyBmbGFnIGluIHVyYi0+dHJhbnNmZXIgZmxhZ3MgYmVmb3JlIGNhbGxpbmcKK3VzYl91bmxpbmtfdXJiKCkuICBXaGVuIHVzaW5nIGFzeW5jIHVubGlua2luZywgdGhlIFVSQiB3aWxsIG5vdAorbm9ybWFsbHkgYmUgdW5saW5rZWQgd2hlbiB1c2JfdW5saW5rX3VyYigpIHJldHVybnMuICBJbnN0ZWFkLCB3YWl0Citmb3IgdGhlIGNvbXBsZXRpb24gaGFuZGxlciB0byBiZSBjYWxsZWQuCisKKworMS43LiBXaGF0IGFib3V0IHRoZSBjb21wbGV0aW9uIGhhbmRsZXI/CisKK1RoZSBoYW5kbGVyIGlzIG9mIHRoZSBmb2xsb3dpbmcgdHlwZToKKworCXR5cGVkZWYgdm9pZCAoKnVzYl9jb21wbGV0ZV90KShzdHJ1Y3QgdXJiICopOworCitpLmUuIGl0IGdldHMganVzdCB0aGUgVVJCIHRoYXQgY2F1c2VkIHRoZSBjb21wbGV0aW9uIGNhbGwuCitJbiB0aGUgY29tcGxldGlvbiBoYW5kbGVyLCB5b3Ugc2hvdWxkIGhhdmUgYSBsb29rIGF0IHVyYi0+c3RhdHVzIHRvCitkZXRlY3QgYW55IFVTQiBlcnJvcnMuIFNpbmNlIHRoZSBjb250ZXh0IHBhcmFtZXRlciBpcyBpbmNsdWRlZCBpbiB0aGUgVVJCLAoreW91IGNhbiBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuIAorCitOb3RlIHRoYXQgZXZlbiB3aGVuIGFuIGVycm9yIChvciB1bmxpbmspIGlzIHJlcG9ydGVkLCBkYXRhIG1heSBoYXZlIGJlZW4KK3RyYW5zZmVycmVkLiAgVGhhdCdzIGJlY2F1c2UgVVNCIHRyYW5zZmVycyBhcmUgcGFja2V0aXplZDsgaXQgbWlnaHQgdGFrZQorc2l4dGVlbiBwYWNrZXRzIHRvIHRyYW5zZmVyIHlvdXIgMUtCeXRlIGJ1ZmZlciwgYW5kIHRlbiBvZiB0aGVtIG1pZ2h0CitoYXZlIHRyYW5zZmVycmVkIHN1Y2Nlc2Z1bGx5IGJlZm9yZSB0aGUgY29tcGxldGlvbiBpcyBjYWxsZWQuCisKKworTk9URTogICoqKioqIFdBUk5JTkcgKioqKioKK0Rvbid0IHVzZSB1cmItPmRldiBmaWVsZCBpbiB5b3VyIGNvbXBsZXRpb24gaGFuZGxlcjsgaXQncyBjbGVhcmVkCithcyBwYXJ0IG9mIGdpdmluZyB1cmJzIGJhY2sgdG8gZHJpdmVycy4gIChBZGRyZXNzaW5nIGFuIGlzc3VlIHdpdGgKK293bmVyc2hpcCBvZiBwZXJpb2RpYyBVUkJzLCB3aGljaCB3YXMgb3RoZXJ3aXNlIGFtYmlndW91cy4pIEluc3RlYWQsCit1c2UgdXJiLT5jb250ZXh0IHRvIGhvbGQgYWxsIHRoZSBkYXRhIHlvdXIgZHJpdmVyIG5lZWRzLgorCitOT1RFOiAgKioqKiogV0FSTklORyAqKioqKgorQWxzbywgTkVWRVIgU0xFRVAgSU4gQSBDT01QTEVUSU9OIEhBTkRMRVIuICBUaGVzZSBhcmUgbm9ybWFsbHkgY2FsbGVkCitkdXJpbmcgaGFyZHdhcmUgaW50ZXJydXB0IHByb2Nlc3NpbmcuICBJZiB5b3UgY2FuLCBkZWZlciBzdWJzdGFudGlhbAord29yayB0byBhIHRhc2tsZXQgKGJvdHRvbSBoYWxmKSB0byBrZWVwIHN5c3RlbSBsYXRlbmNpZXMgbG93LiAgWW91J2xsCitwcm9iYWJseSBuZWVkIHRvIHVzZSBzcGlubG9ja3MgdG8gcHJvdGVjdCBkYXRhIHN0cnVjdHVyZXMgeW91IG1hbmlwdWxhdGUKK2luIGNvbXBsZXRpb24gaGFuZGxlcnMuCisKKworMS44LiBIb3cgdG8gZG8gaXNvY2hyb25vdXMgKElTTykgdHJhbnNmZXJzPworCitGb3IgSVNPIHRyYW5zZmVycyB5b3UgaGF2ZSB0byBmaWxsIGEgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciBzdHJ1Y3R1cmUsCithbGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgVVJCIGJ5IHVzYl9hbGxvY191cmIobixtZW1fZmxhZ3MpLCBmb3IgZWFjaAorcGFja2V0IHlvdSB3YW50IHRvIHNjaGVkdWxlLiAgIFlvdSBhbHNvIGhhdmUgdG8gc2V0IHVyYi0+aW50ZXJ2YWwgdG8gc2F5Citob3cgb2Z0ZW4gdG8gbWFrZSB0cmFuc2ZlcnM7IGl0J3Mgb2Z0ZW4gb25lIHBlciBmcmFtZSAod2hpY2ggaXMgb25jZQorZXZlcnkgbWljcm9mcmFtZSBmb3IgaGlnaHNwZWVkIGRldmljZXMpLiAgVGhlIGFjdHVhbCBpbnRlcnZhbCB1c2VkIHdpbGwKK2JlIGEgcG93ZXIgb2YgdHdvIHRoYXQncyBubyBiaWdnZXIgdGhhbiB3aGF0IHlvdSBzcGVjaWZ5LgorCitUaGUgdXNiX3N1Ym1pdF91cmIoKSBjYWxsIG1vZGlmaWVzIHVyYi0+aW50ZXJ2YWwgdG8gdGhlIGltcGxlbWVudGVkIGludGVydmFsCit2YWx1ZSB0aGF0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcmVxdWVzdGVkIGludGVydmFsIHZhbHVlLiAgSWYKK0lTT19BU0FQIHNjaGVkdWxpbmcgaXMgdXNlZCwgdXJiLT5zdGFydF9mcmFtZSBpcyBhbHNvIHVwZGF0ZWQuCisKK0ZvciBlYWNoIGVudHJ5IHlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlIGRhdGEgb2Zmc2V0IGZvciB0aGlzIGZyYW1lIChiYXNlIGlzCit0cmFuc2Zlcl9idWZmZXIpLCBhbmQgdGhlIGxlbmd0aCB5b3Ugd2FudCB0byB3cml0ZS9leHBlY3QgdG8gcmVhZC4KK0FmdGVyIGNvbXBsZXRpb24sIGFjdHVhbF9sZW5ndGggY29udGFpbnMgdGhlIGFjdHVhbCB0cmFuc2ZlcnJlZCBsZW5ndGggYW5kIAorc3RhdHVzIGNvbnRhaW5zIHRoZSByZXN1bHRpbmcgc3RhdHVzIGZvciB0aGUgSVNPIHRyYW5zZmVyIGZvciB0aGlzIGZyYW1lLgorSXQgaXMgYWxsb3dlZCB0byBzcGVjaWZ5IGEgdmFyeWluZyBsZW5ndGggZnJvbSBmcmFtZSB0byBmcmFtZSAoZS5nLiBmb3IKK2F1ZGlvIHN5bmNocm9uaXNhdGlvbi9hZGFwdGl2ZSB0cmFuc2ZlciByYXRlcykuIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGxlbmd0aCAKKzAgdG8gb21pdCBvbmUgb3IgbW9yZSBmcmFtZXMgKHN0cmlwaW5nKS4KKworRm9yIHNjaGVkdWxpbmcgeW91IGNhbiBjaG9vc2UgeW91ciBvd24gc3RhcnQgZnJhbWUgb3IgSVNPX0FTQVAuIEFzIGV4cGxhaW5lZAorZWFybGllciwgaWYgeW91IGFsd2F5cyBrZWVwIGF0IGxlYXN0IG9uZSBVUkIgcXVldWVkIGFuZCB5b3VyIGNvbXBsZXRpb24KK2tlZXBzIChyZSlzdWJtaXR0aW5nIGEgbGF0ZXIgVVJCLCB5b3UnbGwgZ2V0IHNtb290aCBJU08gc3RyZWFtaW5nIChpZiB1c2IKK2JhbmR3aWR0aCB1dGlsaXphdGlvbiBhbGxvd3MpLgorCitJZiB5b3Ugc3BlY2lmeSB5b3VyIG93biBzdGFydCBmcmFtZSwgbWFrZSBzdXJlIGl0J3Mgc2V2ZXJhbCBmcmFtZXMgaW4gYWR2YW5jZQorb2YgdGhlIGN1cnJlbnQgZnJhbWUuICBZb3UgbWlnaHQgd2FudCB0aGlzIG1vZGVsIGlmIHlvdSdyZSBzeW5jaHJvbml6aW5nCitJU08gZGF0YSB3aXRoIHNvbWUgb3RoZXIgZXZlbnQgc3RyZWFtLgorCisKKzEuOS4gSG93IHRvIHN0YXJ0IGludGVycnVwdCAoSU5UKSB0cmFuc2ZlcnM/CisKK0ludGVycnVwdCB0cmFuc2ZlcnMsIGxpa2UgaXNvY2hyb25vdXMgdHJhbnNmZXJzLCBhcmUgcGVyaW9kaWMsIGFuZCBoYXBwZW4KK2luIGludGVydmFscyB0aGF0IGFyZSBwb3dlcnMgb2YgdHdvICgxLCAyLCA0IGV0YykgdW5pdHMuICBVbml0cyBhcmUgZnJhbWVzCitmb3IgZnVsbCBhbmQgbG93IHNwZWVkIGRldmljZXMsIGFuZCBtaWNyb2ZyYW1lcyBmb3IgaGlnaCBzcGVlZCBvbmVzLgorCitDdXJyZW50bHksIGFmdGVyIHlvdSBzdWJtaXQgb25lIGludGVycnVwdCBVUkIsIHRoYXQgdXJiIGlzIG93bmVkIGJ5IHRoZQoraG9zdCBjb250cm9sbGVyIGRyaXZlciB1bnRpbCB5b3UgY2FuY2VsIGl0IHdpdGggdXNiX3VubGlua191cmIoKS4gIFlvdQorbWF5IHVubGluayBpbnRlcnJ1cHQgdXJicyBpbiB0aGVpciBjb21wbGV0aW9uIGhhbmRsZXJzLCBpZiB5b3UgbmVlZCB0by4KKworQWZ0ZXIgYSB0cmFuc2ZlciBjb21wbGV0aW9uIGlzIGNhbGxlZCwgdGhlIFVSQiBpcyBhdXRvbWFnaWNhbGx5IHJlc3VibWl0dGVkLgorVEhJUyBCRUhBVklPUiBJUyBFWFBFQ1RFRCBUTyBCRSBSRU1PVkVEISEKKworSW50ZXJydXB0IHRyYW5zZmVycyBtYXkgb25seSBzZW5kIChvciByZWNlaXZlKSB0aGUgIm1heHBhY2tldCIgdmFsdWUgZm9yCit0aGUgZ2l2ZW4gaW50ZXJydXB0IGVuZHBvaW50OyBpZiB5b3UgbmVlZCBtb3JlIGRhdGEsIHlvdSB3aWxsIG5lZWQgdG8KK2NvcHkgdGhhdCBkYXRhIG91dCBvZiAob3IgaW50bykgYW5vdGhlciBidWZmZXIuICBTaW1pbGFybHksIHlvdSBjYW4ndAorcXVldWUgaW50ZXJydXB0IHRyYW5zZmVycy4KK1RIRVNFIFJFU1RSSUNUSU9OUyBBUkUgRVhQRUNURUQgVE8gQkUgUkVNT1ZFRCEhCisKK05vdGUgdGhhdCB0aGlzIGF1dG9tYWdpYyByZXN1Ym1pc3Npb24gbW9kZWwgZG9lcyBtYWtlIGl0IGF3a3dhcmQgdG8gdXNlCitpbnRlcnJ1cHQgT1VUIHRyYW5zZmVycy4gIFRoZSBwb3J0YWJsZSBzb2x1dGlvbiBpbnZvbHZlcyB1bmxpbmtpbmcgdGhvc2UKK09VVCB1cmJzIGFmdGVyIHRoZSBkYXRhIGlzIHRyYW5zZmVycmVkLCBhbmQgcGVyaGFwcyBzdWJtaXR0aW5nIGEgZmluYWwKK1VSQiBmb3IgYSBzaG9ydCBwYWNrZXQuCisKK1RoZSB1c2Jfc3VibWl0X3VyYigpIGNhbGwgbW9kaWZpZXMgdXJiLT5pbnRlcnZhbCB0byB0aGUgaW1wbGVtZW50ZWQgaW50ZXJ2YWwKK3ZhbHVlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgaW50ZXJ2YWwgdmFsdWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9hY20udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvYWNtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWY0NWVhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvYWNtLnR4dApAQCAtMCwwICsxLDEzOCBAQAorCQkJICBMaW51eCBBQ00gZHJpdmVyIHYwLjE2CisJCSAoYykgMTk5OSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorCQkJICAgICBTcG9uc29yZWQgYnkgU3VTRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiswLiBEaXNjbGFpbWVyCit+fn5+fn5+fn5+fn5+CisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKK21vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKK1RlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyAgU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5IGUtbWFpbAorLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEBzdXNlLmN6Piwgb3IgYnkgcGFwZXIgbWFpbDogVm9qdGVjaCBQYXZsaWssCitVY2l0ZWxza2EgMTU3NiwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworCisgIEZvciB5b3VyIGNvbnZlbmllbmNlLCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGlzIGluY2x1ZGVkCitpbiB0aGUgcGFja2FnZTogU2VlIHRoZSBmaWxlIENPUFlJTkcuCisKKzEuIFVzYWdlCit+fn5+fn5+fgorICBUaGUgZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGRyaXZlcnMgd29ya3Mgd2l0aCBVU0IgbW9kZW1zIGFuZCBVU0IgSVNETiB0ZXJtaW5hbAorYWRhcHRlcnMgdGhhdCBjb25mb3JtIHRvIHRoZSBVbml2ZXJzYWwgU2VyaWFsIEJ1cyBDb21tdW5pY2F0aW9uIERldmljZSBDbGFzcworQWJzdHJhY3QgQ29udHJvbCBNb2RlbCAoVVNCIENEQyBBQ00pIHNwZWNpZmljYXRpb24uCisKKyAgTWFueSBtb2RlbXMgZG8sIGhlcmUgaXMgYSBsaXN0IG9mIHRob3NlIEkga25vdyBvZjoKKworCTNDb20gT2ZmaWNlQ29ubmVjdCA1NmsKKwkzQ29tIFZvaWNlIEZheE1vZGVtIFBybworCTNDb20gU3BvcnRzdGVyCisJTXVsdGlUZWNoIE11bHRpTW9kZW0gNTZrCisJWm9vbSAyOTg2TCBGYXhNb2RlbQorCUNvbXBhcSA1NmsgRmF4TW9kZW0KKwlFTFNBIE1pY3JvbGluayA1NmsKKworICBJIGtub3cgb2Ygb25lIElTRE4gVEEgdGhhdCBkb2VzIHdvcmsgd2l0aCB0aGUgYWNtIGRyaXZlcjoKKworCTNDb20gVVNSIElTRE4gUHJvIFRBCisKKyAgVW5mb3J0dW5hdGVseSBtYW55IG1vZGVtcyBhbmQgbW9zdCBJU0ROIFRBcyB1c2UgcHJvcHJpZXRhcnkgaW50ZXJmYWNlcyBhbmQKK3RodXMgd29uJ3Qgd29yayB3aXRoIHRoaXMgZHJpdmVycy4gQ2hlY2sgZm9yIEFDTSBjb21wbGlhbmNlIGJlZm9yZSBidXlpbmcuCisKKyAgVGhlIGRyaXZlciAod2l0aCBkZXZmcykgY3JlYXRlcyB0aGVzZSBkZXZpY2VzIGluIC9kZXYvdXNiL2FjbToKKworCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgIDE2NiwgICAwIEFwciAgMSAxMDo0OSAwCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgMTY2LCAgIDEgQXByICAxIDEwOjQ5IDEKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAxNjYsICAgMiBBcHIgIDEgMTA6NDkgMgorCisgIEFuZCBzbyBvbiwgdXAgdG8gMzEsIHdpdGggdGhlIGxpbWl0IGJlaW5nIHBvc3NpYmxlIHRvIGNoYW5nZSBpbiBhY20uYyB0byB1cAordG8gMjU2LCBzbyB5b3UgY2FuIHVzZSB1cCB0byAyNTYgVVNCIG1vZGVtcyB3aXRoIG9uZSBjb21wdXRlciAoeW91J2xsIG5lZWQKK3RocmVlIFVTQiBjYXJkcyBmb3IgdGhhdCwgdGhvdWdoKS4KKworICBJZiB5b3UgZG9uJ3QgdXNlIGRldmZzLCB0aGVuIHlvdSBjYW4gY3JlYXRlIGRldmljZSBub2RlcyB3aXRoIHRoZSBzYW1lCittaW5vci9tYWpvciBudW1iZXJzIGFueXdoZXJlIHlvdSB3YW50LCBidXQgZWl0aGVyIHRoZSBhYm92ZSBsb2NhdGlvbiBvcgorL2Rldi91c2IvdHR5QUNNMCBpcyBwcmVmZXJyZWQuCisKKyAgVG8gdXNlIHRoZSBtb2RlbXMgeW91IG5lZWQgdGhlc2UgbW9kdWxlcyBsb2FkZWQ6CisKKwl1c2Jjb3JlLmtvCisJdWhjaS1oY2Qua28gb2hjaS1oY2Qua28gb3IgZWhjaS1oY2Qua28KKwljZGMtYWNtLmtvCisKKyAgQWZ0ZXIgdGhhdCwgdGhlIG1vZGVtW3NdIHNob3VsZCBiZSBhY2Nlc3NpYmxlLiBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlCittaW5pY29tLCBwcHAgYW5kIG1nZXR0eSB3aXRoIHRoZW0uCisKKzIuIFZlcmlmeWluZyB0aGF0IGl0IHdvcmtzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgZmlyc3Qgc3RlcCB3b3VsZCBiZSB0byBjaGVjayAvcHJvYy9idXMvdXNiL2RldmljZXMsIGl0IHNob3VsZCBsb29rCitsaWtlIHRoaXM6CisKK1Q6ICBCdXM9MDEgTGV2PTAwIFBybnQ9MDAgUG9ydD0wMCBDbnQ9MDAgRGV2Iz0gIDEgU3BkPTEyICBNeENoPSAyCitCOiAgQWxsb2M9ICAwLzkwMCB1cyAoIDAlKSwgI0ludD0gIDAsICNJc289ICAwCitEOiAgVmVyPSAxLjAwIENscz0wOShodWIgICkgU3ViPTAwIFByb3Q9MDAgTXhQUz0gOCAjQ2Zncz0gIDEKK1A6ICBWZW5kb3I9MDAwMCBQcm9kSUQ9MDAwMCBSZXY9IDAuMDAKK1M6ICBQcm9kdWN0PVVTQiBVSENJIFJvb3QgSHViCitTOiAgU2VyaWFsTnVtYmVyPTY4MDAKK0M6KiAjSWZzPSAxIENmZyM9IDEgQXRyPTQwIE14UHdyPSAgMG1BCitJOiAgSWYjPSAwIEFsdD0gMCAjRVBzPSAxIENscz0wOShodWIgICkgU3ViPTAwIFByb3Q9MDAgRHJpdmVyPWh1YgorRTogIEFkPTgxKEkpIEF0cj0wMyhJbnQuKSBNeFBTPSAgIDggSXZsPTI1NW1zCitUOiAgQnVzPTAxIExldj0wMSBQcm50PTAxIFBvcnQ9MDEgQ250PTAxIERldiM9ICAyIFNwZD0xMiAgTXhDaD0gMAorRDogIFZlcj0gMS4wMCBDbHM9MDIoY29tbS4pIFN1Yj0wMCBQcm90PTAwIE14UFM9IDggI0NmZ3M9ICAyCitQOiAgVmVuZG9yPTA0YzEgUHJvZElEPTAwOGYgUmV2PSAyLjA3CitTOiAgTWFudWZhY3R1cmVyPTNDb20gSW5jLgorUzogIFByb2R1Y3Q9M0NvbSBVLlMuIFJvYm90aWNzIFBybyBJU0ROIFRBCitTOiAgU2VyaWFsTnVtYmVyPVVGVDUzQTQ5QlZUNworQzogICNJZnM9IDEgQ2ZnIz0gMSBBdHI9NjAgTXhQd3I9ICAwbUEKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDMgQ2xzPWZmKHZlbmQuKSBTdWI9ZmYgUHJvdD1mZiBEcml2ZXI9YWNtCitFOiAgQWQ9ODUoSSkgQXRyPTAyKEJ1bGspIE14UFM9ICA2NCBJdmw9ICAwbXMKK0U6ICBBZD0wNChPKSBBdHI9MDIoQnVsaykgTXhQUz0gIDY0IEl2bD0gIDBtcworRTogIEFkPTgxKEkpIEF0cj0wMyhJbnQuKSBNeFBTPSAgMTYgSXZsPTEyOG1zCitDOiogI0lmcz0gMiBDZmcjPSAyIEF0cj02MCBNeFB3cj0gIDBtQQorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMSBDbHM9MDIoY29tbS4pIFN1Yj0wMiBQcm90PTAxIERyaXZlcj1hY20KK0U6ICBBZD04MShJKSBBdHI9MDMoSW50LikgTXhQUz0gIDE2IEl2bD0xMjhtcworSTogIElmIz0gMSBBbHQ9IDAgI0VQcz0gMiBDbHM9MGEoZGF0YSApIFN1Yj0wMCBQcm90PTAwIERyaXZlcj1hY20KK0U6ICBBZD04NShJKSBBdHI9MDIoQnVsaykgTXhQUz0gIDY0IEl2bD0gIDBtcworRTogIEFkPTA0KE8pIEF0cj0wMihCdWxrKSBNeFBTPSAgNjQgSXZsPSAgMG1zCisKK1RoZSBwcmVzZW5jZSBvZiB0aGVzZSB0aHJlZSBsaW5lcyAoYW5kIHRoZSBDbHM9ICdjb21tJyBhbmQgJ2RhdGEnIGNsYXNzZXMpCitpcyBpbXBvcnRhbnQsIGl0IG1lYW5zIGl0J3MgYW4gQUNNIGRldmljZS4gVGhlIERyaXZlcj1hY20gbWVhbnMgdGhlIGFjbQorZHJpdmVyIGlzIHVzZWQgZm9yIHRoZSBkZXZpY2UuIElmIHlvdSBzZWUgb25seSBDbHM9ZmYodmVuZC4pIHRoZW4geW91J3JlIG91dAorb2YgbHVjaywgeW91IGhhdmUgYSBkZXZpY2Ugd2l0aCB2ZW5kb3Igc3BlY2lmaWMtaW50ZXJmYWNlLgorCitEOiAgVmVyPSAxLjAwIENscz0wMihjb21tLikgU3ViPTAwIFByb3Q9MDAgTXhQUz0gOCAjQ2Zncz0gIDIKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDEgQ2xzPTAyKGNvbW0uKSBTdWI9MDIgUHJvdD0wMSBEcml2ZXI9YWNtCitJOiAgSWYjPSAxIEFsdD0gMCAjRVBzPSAyIENscz0wYShkYXRhICkgU3ViPTAwIFByb3Q9MDAgRHJpdmVyPWFjbQorCitJbiB0aGUgc3lzdGVtIGxvZyB5b3Ugc2hvdWxkIHNlZToKKwordXNiLmM6IFVTQiBuZXcgZGV2aWNlIGNvbm5lY3QsIGFzc2lnbmVkIGRldmljZSBudW1iZXIgMgordXNiLmM6IGttYWxsb2MgSUYgYzc2OTFmYTAsIG51bWlmIDEKK3VzYi5jOiBrbWFsbG9jIElGIGM3YjVmM2UwLCBudW1pZiAyCit1c2IuYzogc2tpcHBlZCA0IGNsYXNzL3ZlbmRvciBzcGVjaWZpYyBpbnRlcmZhY2UgZGVzY3JpcHRvcnMKK3VzYi5jOiBuZXcgZGV2aWNlIHN0cmluZ3M6IE1mcj0xLCBQcm9kdWN0PTIsIFNlcmlhbE51bWJlcj0zCit1c2IuYzogVVNCIGRldmljZSBudW1iZXIgMiBkZWZhdWx0IGxhbmd1YWdlIElEIDB4NDA5CitNYW51ZmFjdHVyZXI6IDNDb20gSW5jLgorUHJvZHVjdDogM0NvbSBVLlMuIFJvYm90aWNzIFBybyBJU0ROIFRBCitTZXJpYWxOdW1iZXI6IFVGVDUzQTQ5QlZUNworYWNtLmM6IHByb2JpbmcgY29uZmlnIDEKK2FjbS5jOiBwcm9iaW5nIGNvbmZpZyAyCit0dHlBQ00wOiBVU0IgQUNNIGRldmljZQorYWNtLmM6IGFjbV9jb250cm9sX21zZzogcnE6IDB4MjIgdmFsOiAweDAgbGVuOiAweDAgcmVzdWx0OiAwCithY20uYzogYWNtX2NvbnRyb2xfbXNnOiBycTogMHgyMCB2YWw6IDB4MCBsZW46IDB4NyByZXN1bHQ6IDcKK3VzYi5jOiBhY20gZHJpdmVyIGNsYWltZWQgaW50ZXJmYWNlIGM3YjVmM2UwCit1c2IuYzogYWNtIGRyaXZlciBjbGFpbWVkIGludGVyZmFjZSBjN2I1ZjNmOAordXNiLmM6IGFjbSBkcml2ZXIgY2xhaW1lZCBpbnRlcmZhY2UgYzc2OTFmYTAKKworSWYgYWxsIHRoaXMgc2VlbXMgdG8gYmUgT0ssIGZpcmUgdXAgbWluaWNvbSBhbmQgc2V0IGl0IHRvIHRhbGsgdG8gdGhlIHR0eUFDTQorZGV2aWNlIGFuZCB0cnkgdHlwaW5nICdhdCcuIElmIGl0IHJlc3BvbmRzIHdpdGggJ09LJywgdGhlbiBldmVyeXRoaW5nIGlzCit3b3JraW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvYXVlcnN3YWxkLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2F1ZXJzd2FsZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlNGQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2F1ZXJzd2FsZC50eHQKQEAgLTAsMCArMSwzMCBAQAorCQlBdWVyc3dhbGQgVVNCIGtlcm5lbCBkcml2ZXIKKwkJPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doYXQgaXMgaXQ/IFdoYXQgY2FuIEkgZG8gd2l0aCBpdD8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBhdWVyc3dhbGQgVVNCIGtlcm5lbCBkcml2ZXIgY29ubmVjdHMgeW91ciBsaW51eCAyLjQueAorc3lzdGVtIHRvIHRoZSBhdWVyc3dhbGQgdXNiLWVuYWJsZWQgZGV2aWNlcy4KKworVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBhdWVyc3dhbGQgdXNiIGRldmljZXM6CithKSBzbWFsbCBQQlggc3lzdGVtcyAoSVNETikKK2IpIENPTWZvcnQgc3lzdGVtIHRlbGVwaG9uZXMgKElTRE4pCisKK1RoZSBkcml2ZXIgaW5zdGFsbGF0aW9uIGNyZWF0ZXMgdGhlIGRldmljZXMKKy9kZXYvdXNiL2F1ZXIwLi4xNS4gVGhlc2UgZGV2aWNlcyBjYXJyeSBhIHZlbmRvci0KK3NwZWNpZmljIHByb3RvY29sLiBZb3UgbWF5IHJ1biBhbGwgYXVlcnN3YWxkIGphdmEKK3NvZnR3YXJlIG9uIGl0LiBUaGUgamF2YSBzb2Z0d2FyZSBuZWVkcyBhIG5hdGl2ZQorbGlicmFyeSAibGliQXVlclVzYkpOSU5hdGl2ZS5zbyIgaW5zdGFsbGVkIG9uCit5b3VyIHN5c3RlbS4gVGhpcyBsaWJyYXJ5IGlzIGF2YWlsYWJsZSBmcm9tCithdWVyc3dhbGQgYW5kIHNoaXBwZWQgYXMgcGFydCBvZiB0aGUgamF2YSBzb2Z0d2FyZS4KKworWW91IG1heSBjcmVhdGUgdGhlIGRldmljZXMgd2l0aDoKKwlta25vZCAtbSA2NjYgL2Rldi91c2IvYXVlcjAgYyAxODAgMTEyCisJLi4uCisJbWtub2QgLW0gNjY2IC9kZXYvdXNiL2F1ZXIxNSBjIDE4MCAxMjcKKworRnV0dXJlIHBsYW5zCis9PT09PT09PT09PT0KKy0gQ29ubmVjdGlvbiB0byBJU0RONExJTlVYICh0aGUgaGlzYXggaW50ZXJmYWNlKQorCitUaGUgbWFpbnRhaW5lciBvZiB0aGlzIGRyaXZlciBpcyB3b2xmZ2FuZ0Bpa3N3LW11ZWVzLmRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9ibHVldG9vdGgudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvYmx1ZXRvb3RoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzRmNWQzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvYmx1ZXRvb3RoLnR4dApAQCAtMCwwICsxLDQ0IEBACitJTlRST0RVQ1RJT04KKworICBUaGUgVVNCIEJsdWV0b290aCBkcml2ZXIgc3VwcG9ydHMgYW55IFVTQiBCbHVldG9vdGggZGV2aWNlLgorICBJdCBjdXJyZW50bHkgd29ya3Mgd2VsbCB3aXRoIHRoZSBMaW51eCBVU0IgQmx1ZXRvb3RoIHN0YWNrIGZyb20gQXhpcyAKKyAgKGF2YWlsYWJsZSBhdCBodHRwOi8vZGV2ZWxvcGVyLmF4aXMuY29tL3NvZnR3YXJlL2JsdWV0b290aC8gKSBhbmQgCisgIGhhcyBiZWVuIHJ1bW9yZWQgdG8gd29yayB3aXRoIG90aGVyIExpbnV4IFVTQiBCbHVldG9vdGggc3RhY2tzLgorCisKK0NPTkZJR1VSQVRJT04KKworICBDdXJyZW50bHkgdGhlIGRyaXZlciBjYW4gaGFuZGxlIHVwIHRvIDI1NiBkaWZmZXJlbnQgVVNCIEJsdWV0b290aCAKKyAgZGV2aWNlcyBhdCBvbmNlLiAKKworICBJZiB5b3UgYXJlIG5vdCB1c2luZyBkZXZmczoKKyAgICBUaGUgbWFqb3IgbnVtYmVyIHRoYXQgdGhlIGRyaXZlciB1c2VzIGlzIDIxNiBzbyB0byB1c2UgdGhlIGRyaXZlciwKKyAgICBjcmVhdGUgdGhlIGZvbGxvd2luZyBub2RlczoKKwlta25vZCAvZGV2L3R0eVVCMCBjIDIxNiAwCisJbWtub2QgL2Rldi90dHlVQjEgYyAyMTYgMQorCW1rbm9kIC9kZXYvdHR5VUIyIGMgMjE2IDIKKwlta25vZCAvZGV2L3R0eVVCMyBjIDIxNiAzCisJCS4KKwkJLgorCQkuCisJbWtub2QgL2Rldi90dHlVQjI1NCBjIDIxNiAyNTQKKwlta25vZCAvZGV2L3R0eVVCMjU1IGMgMjE2IDI1NQorCisgIElmIHlvdSBhcmUgdXNpbmcgZGV2ZnM6CisgICAgVGhlIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIHdpbGwgc2hvdyB1cCBhcworICAgIC9kZXYvdXNiL3R0dWIvezAsMSwuLi59CisKKyAgV2hlbiB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCBhbmQgcmVjb2duaXplZCBieSB0aGUgZHJpdmVyLCB0aGUgZHJpdmVyCisgIHdpbGwgcHJpbnQgdG8gdGhlIHN5c3RlbSBsb2csIHdoaWNoIG5vZGUgdGhlIGRldmljZSBoYXMgYmVlbiBib3VuZCB0by4KKworCitDT05UQUNUOgorCisgIElmIGFueW9uZSBoYXMgYW55IHByb2JsZW1zIHVzaW5nIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBtZSwgb3IgCisgIGpvaW4gdGhlIExpbnV4LVVTQiBtYWlsaW5nIGxpc3QgKGluZm9ybWF0aW9uIG9uIGpvaW5pbmcgdGhlIG1haWxpbmcgCisgIGxpc3QsIGFzIHdlbGwgYXMgYSBsaW5rIHRvIGl0cyBzZWFyY2hhYmxlIGFyY2hpdmUgaXMgYXQgCisgIGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy8gKQorCisKK0dyZWcgS3JvYWgtSGFydG1hbgorZ3JlZ0Brcm9haC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2RtYS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9kbWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODQ0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9kbWEudHh0CkBAIC0wLDAgKzEsMTE2IEBACitJbiBMaW51eCAyLjUga2VybmVscyAoYW5kIGxhdGVyKSwgVVNCIGRldmljZSBkcml2ZXJzIGhhdmUgYWRkaXRpb25hbCBjb250cm9sCitvdmVyIGhvdyBETUEgbWF5IGJlIHVzZWQgdG8gcGVyZm9ybSBJL08gb3BlcmF0aW9ucy4gIFRoZSBBUElzIGFyZSBkZXRhaWxlZAoraW4gdGhlIGtlcm5lbCB1c2IgcHJvZ3JhbW1pbmcgZ3VpZGUgKGtlcm5lbGRvYywgZnJvbSB0aGUgc291cmNlIGNvZGUpLgorCisKK0FQSSBPVkVSVklFVworCitUaGUgYmlnIHBpY3R1cmUgaXMgdGhhdCBVU0IgZHJpdmVycyBjYW4gY29udGludWUgdG8gaWdub3JlIG1vc3QgRE1BIGlzc3VlcywKK3Rob3VnaCB0aGV5IHN0aWxsIG11c3QgcHJvdmlkZSBETUEtcmVhZHkgYnVmZmVycyAoc2VlIERNQS1tYXBwaW5nLnR4dCkuCitUaGF0J3MgaG93IHRoZXkndmUgd29ya2VkIHRocm91Z2ggdGhlIDIuNCAoYW5kIGVhcmxpZXIpIGtlcm5lbHMuCisKK09SOiAgdGhleSBjYW4gbm93IGJlIERNQS1hd2FyZS4KKworLSBOZXcgY2FsbHMgZW5hYmxlIERNQS1hd2FyZSBkcml2ZXJzLCBsZXR0aW5nIHRoZW0gYWxsb2NhdGUgZG1hIGJ1ZmZlcnMgYW5kCisgIG1hbmFnZSBkbWEgbWFwcGluZ3MgZm9yIGV4aXN0aW5nIGRtYS1yZWFkeSBidWZmZXJzIChzZWUgYmVsb3cpLgorCistIFVSQnMgaGF2ZSBhbiBhZGRpdGlvbmFsICJ0cmFuc2Zlcl9kbWEiIGZpZWxkLCBhcyB3ZWxsIGFzIGEgdHJhbnNmZXJfZmxhZ3MKKyAgYml0IHNheWluZyBpZiBpdCdzIHZhbGlkLiAgKENvbnRyb2wgcmVxdWVzdHMgYWxzbyBoYXZlICJzZXR1cF9kbWEiIGFuZCBhCisgIGNvcnJlc3BvbmRpbmcgdHJhbnNmZXJfZmxhZ3MgYml0LikKKworLSAidXNiY29yZSIgd2lsbCBtYXAgdGhvc2UgRE1BIGFkZHJlc3NlcywgaWYgYSBETUEtYXdhcmUgZHJpdmVyIGRpZG4ndCBkbworICBpdCBmaXJzdCBhbmQgc2V0IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIG9yIFVSQl9OT19TRVRVUF9ETUFfTUFQLiAgSENEcworICBkb24ndCBtYW5hZ2UgZG1hIG1hcHBpbmdzIGZvciBVUkJzLgorCistIFRoZXJlJ3MgYSBuZXcgImdlbmVyaWMgRE1BIEFQSSIsIHBhcnRzIG9mIHdoaWNoIGFyZSB1c2FibGUgYnkgVVNCIGRldmljZQorICBkcml2ZXJzLiAgTmV2ZXIgdXNlIGRtYV9zZXRfbWFzaygpIG9uIGFueSBVU0IgaW50ZXJmYWNlIG9yIGRldmljZTsgdGhhdAorICB3b3VsZCBwb3RlbnRpYWxseSBicmVhayBhbGwgZGV2aWNlcyBzaGFyaW5nIHRoYXQgYnVzLgorCisKK0VMSU1JTkFUSU5HIENPUElFUworCitJdCdzIGdvb2QgdG8gYXZvaWQgbWFraW5nIENQVXMgY29weSBkYXRhIG5lZWRsZXNzbHkuICBUaGUgY29zdHMgY2FuIGFkZCB1cCwKK2FuZCBlZmZlY3RzIGxpa2UgY2FjaGUtdHJhc2hpbmcgY2FuIGltcG9zZSBzdWJ0bGUgcGVuYWx0aWVzLgorCistIFdoZW4geW91J3JlIGFsbG9jYXRpbmcgYSBidWZmZXIgZm9yIERNQSBwdXJwb3NlcyBhbnl3YXksIHVzZSB0aGUgYnVmZmVyCisgIHByaW1pdGl2ZXMuICBUaGluayBvZiB0aGVtIGFzIGttYWxsb2MgYW5kIGtmcmVlIHRoYXQgZ2l2ZSB5b3UgdGhlIHJpZ2h0CisgIGtpbmQgb2YgYWRkcmVzc2VzIHRvIHN0b3JlIGluIHVyYi0+dHJhbnNmZXJfYnVmZmVyIGFuZCB1cmItPnRyYW5zZmVyX2RtYSwKKyAgd2hpbGUgZ3VhcmFudGVlaW5nIHRoYXQgbm8gaGlkZGVuIGNvcGllcyB0aHJvdWdoIERNQSAiYm91bmNlIiBidWZmZXJzIHdpbGwKKyAgc2xvdyB0aGluZ3MgZG93bi4gIFlvdSdkIGFsc28gc2V0IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIGluCisgIHVyYi0+dHJhbnNmZXJfZmxhZ3M6CisKKwl2b2lkICp1c2JfYnVmZmVyX2FsbG9jIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJaW50IG1lbV9mbGFncywgZG1hX2FkZHJfdCAqZG1hKTsKKworCXZvaWQgdXNiX2J1ZmZlcl9mcmVlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJdm9pZCAqYWRkciwgZG1hX2FkZHJfdCBkbWEpOworCisgIEZvciBjb250cm9sIHRyYW5zZmVycyB5b3UgY2FuIHVzZSB0aGUgYnVmZmVyIHByaW1pdGl2ZXMgb3Igbm90IGZvciBlYWNoCisgIG9mIHRoZSB0cmFuc2ZlciBidWZmZXIgYW5kIHNldHVwIGJ1ZmZlciBpbmRlcGVuZGVudGx5LiAgU2V0IHRoZSBmbGFnIGJpdHMKKyAgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgYW5kIFVSQl9OT19TRVRVUF9ETUFfTUFQIHRvIGluZGljYXRlIHdoaWNoCisgIGJ1ZmZlcnMgeW91IGhhdmUgcHJlcGFyZWQuICBGb3Igbm9uLWNvbnRyb2wgdHJhbnNmZXJzIFVSQl9OT19TRVRVUF9ETUFfTUFQCisgIGlzIGlnbm9yZWQuCisKKyAgVGhlIG1lbW9yeSBidWZmZXIgcmV0dXJuZWQgaXMgImRtYS1jb2hlcmVudCI7IHNvbWV0aW1lcyB5b3UgbWlnaHQgbmVlZCB0bworICBmb3JjZSBhIGNvbnNpc3RlbnQgbWVtb3J5IGFjY2VzcyBvcmRlcmluZyBieSB1c2luZyBtZW1vcnkgYmFycmllcnMuICBJdCdzCisgIG5vdCB1c2luZyBhIHN0cmVhbWluZyBETUEgbWFwcGluZywgc28gaXQncyBnb29kIGZvciBzbWFsbCB0cmFuc2ZlcnMgb24KKyAgc3lzdGVtcyB3aGVyZSB0aGUgSS9PIHdvdWxkIG90aGVyd2lzZSB0aWUgdXAgYW4gSU9NTVUgbWFwcGluZy4gIChTZWUKKyAgRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQgZm9yIGRlZmluaXRpb25zIG9mICJjb2hlcmVudCIgYW5kICJzdHJlYW1pbmciCisgIERNQSBtYXBwaW5ncy4pCisKKyAgQXNraW5nIGZvciAxL050aCBvZiBhIHBhZ2UgKGFzIHdlbGwgYXMgYXNraW5nIGZvciBOIHBhZ2VzKSBpcyByZWFzb25hYmx5CisgIHNwYWNlLWVmZmljaWVudC4KKworLSBEZXZpY2VzIG9uIHNvbWUgRUhDSSBjb250cm9sbGVycyBjb3VsZCBoYW5kbGUgRE1BIHRvL2Zyb20gaGlnaCBtZW1vcnkuCisgIERyaXZlciBwcm9iZSgpIHJvdXRpbmVzIGNhbiBub3RpY2UgdGhpcyB1c2luZyBhIGdlbmVyaWMgRE1BIGNhbGwsIHRoZW4KKyAgdGVsbCBoaWdoZXIgbGV2ZWwgY29kZSAobmV0d29yaywgc2NzaSwgZXRjKSBhYm91dCBpdCBsaWtlIHRoaXM6CisKKwlpZiAoZG1hX3N1cHBvcnRlZCAoJmludGYtPmRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKSkKKwkJbmV0LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisKKyAgVGhhdCBjYW4gZWxpbWluYXRlIGRtYSBib3VuY2UgYnVmZmVyaW5nIG9mIHJlcXVlc3RzIHRoYXQgb3JpZ2luYXRlIChvcgorICB0ZXJtaW5hdGUpIGluIGhpZ2ggbWVtb3J5LCBpbiBjYXNlcyB3aGVyZSB0aGUgYnVmZmVycyBhcmVuJ3QgYWxsb2NhdGVkCisgIHdpdGggdXNiX2J1ZmZlcl9hbGxvYygpIGJ1dCBpbnN0ZWFkIGFyZSBkbWEtbWFwcGVkLgorCisKK1dPUktJTkcgV0lUSCBFWElTVElORyBCVUZGRVJTCisKK0V4aXN0aW5nIGJ1ZmZlcnMgYXJlbid0IHVzYWJsZSBmb3IgRE1BIHdpdGhvdXQgZmlyc3QgYmVpbmcgbWFwcGVkIGludG8gdGhlCitETUEgYWRkcmVzcyBzcGFjZSBvZiB0aGUgZGV2aWNlLgorCistIFdoZW4geW91J3JlIHVzaW5nIHNjYXR0ZXJsaXN0cywgeW91IGNhbiBtYXAgZXZlcnl0aGluZyBhdCBvbmNlLiAgT24gc29tZQorICBzeXN0ZW1zLCB0aGlzIGtpY2tzIGluIGFuIElPTU1VIGFuZCB0dXJucyB0aGUgc2NhdHRlcmxpc3RzIGludG8gc2luZ2xlCisgIERNQSB0cmFuc2FjdGlvbnM6CisKKwlpbnQgdXNiX2J1ZmZlcl9tYXBfc2cgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHBpcGUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cyk7CisKKwl2b2lkIHVzYl9idWZmZXJfZG1hc3luY19zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cyk7CisKKwl2b2lkIHVzYl9idWZmZXJfdW5tYXBfc2cgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHBpcGUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuX2h3X2VudHMpOworCisgIEl0J3MgcHJvYmFibHkgZWFzaWVyIHRvIHVzZSB0aGUgbmV3IHVzYl9zZ18qKCkgY2FsbHMsIHdoaWNoIGRvIHRoZSBETUEKKyAgbWFwcGluZyBhbmQgYXBwbHkgb3RoZXIgdHdlYWtzIHRvIG1ha2Ugc2NhdHRlcmxpc3QgaS9vIGJlIGZhc3QuCisKKy0gU29tZSBkcml2ZXJzIG1heSBwcmVmZXIgdG8gd29yayB3aXRoIHRoZSBtb2RlbCB0aGF0IHRoZXkncmUgbWFwcGluZyBsYXJnZQorICBidWZmZXJzLCBzeW5jaHJvbml6aW5nIHRoZWlyIHNhZmUgcmUtdXNlLiAgKElmIHRoZXJlJ3Mgbm8gcmUtdXNlLCB0aGVuIGxldAorICB1c2Jjb3JlIGRvIHRoZSBtYXAvdW5tYXAuKSAgTGFyZ2UgcGVyaW9kaWMgdHJhbnNmZXJzIG1ha2UgZ29vZCBleGFtcGxlcworICBoZXJlLCBzaW5jZSBpdCdzIGNoZWFwZXIgdG8ganVzdCBzeW5jaHJvbml6ZSB0aGUgYnVmZmVyIHRoYW4gdG8gdW5tYXAgaXQKKyAgZWFjaCB0aW1lIGFuIHVyYiBjb21wbGV0ZXMgYW5kIHRoZW4gcmUtbWFwIGl0IG9uIGR1cmluZyByZXN1Ym1pc3Npb24uCisKKyAgVGhlc2UgY2FsbHMgYWxsIHdvcmsgd2l0aCBpbml0aWFsaXplZCB1cmJzOiAgdXJiLT5kZXYsIHVyYi0+cGlwZSwKKyAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGFuZCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggbXVzdCBhbGwgYmUKKyAgdmFsaWQgd2hlbiB0aGVzZSBjYWxscyBhcmUgdXNlZCAodXJiLT5zZXR1cF9wYWNrZXQgbXVzdCBiZSB2YWxpZCB0b28KKyAgaWYgdXJiIGlzIGEgY29udHJvbCByZXF1ZXN0KToKKworCXN0cnVjdCB1cmIgKnVzYl9idWZmZXJfbWFwIChzdHJ1Y3QgdXJiICp1cmIpOworCisJdm9pZCB1c2JfYnVmZmVyX2RtYXN5bmMgKHN0cnVjdCB1cmIgKnVyYik7CisKKwl2b2lkIHVzYl9idWZmZXJfdW5tYXAgKHN0cnVjdCB1cmIgKnVyYik7CisKKyAgVGhlIGNhbGxzIG1hbmFnZSB1cmItPnRyYW5zZmVyX2RtYSBmb3IgeW91LCBhbmQgc2V0IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCisgIHNvIHRoYXQgdXNiY29yZSB3b24ndCBtYXAgb3IgdW5tYXAgdGhlIGJ1ZmZlci4gIFRoZSBzYW1lIGdvZXMgZm9yCisgIHVyYi0+c2V0dXBfZG1hIGFuZCBVUkJfTk9fU0VUVVBfRE1BX01BUCBmb3IgY29udHJvbCByZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2VoY2kudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvZWhjaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzNmI3ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2VoY2kudHh0CkBAIC0wLDAgKzEsMjEyIEBACisyNy1EZWMtMjAwMgorCitUaGUgRUhDSSBkcml2ZXIgaXMgdXNlZCB0byB0YWxrIHRvIGhpZ2ggc3BlZWQgVVNCIDIuMCBkZXZpY2VzIHVzaW5nCitVU0IgMi4wLWNhcGFibGUgaG9zdCBjb250cm9sbGVyIGhhcmR3YXJlLiAgVGhlIFVTQiAyLjAgc3RhbmRhcmQgaXMKK2NvbXBhdGlibGUgd2l0aCB0aGUgVVNCIDEuMSBzdGFuZGFyZC4gSXQgZGVmaW5lcyB0aHJlZSB0cmFuc2ZlciBzcGVlZHM6CisKKyAgICAtICJIaWdoIFNwZWVkIiA0ODAgTWJpdC9zZWMgKDYwIE1CeXRlL3NlYykKKyAgICAtICJGdWxsIFNwZWVkIiAxMiBNYml0L3NlYyAoMS41IE1CeXRlL3NlYykKKyAgICAtICJMb3cgU3BlZWQiIDEuNSBNYml0L3NlYworCitVU0IgMS4xIG9ubHkgYWRkcmVzc2VkIGZ1bGwgc3BlZWQgYW5kIGxvdyBzcGVlZC4gIEhpZ2ggc3BlZWQgZGV2aWNlcworY2FuIGJlIHVzZWQgb24gVVNCIDEuMSBzeXN0ZW1zLCBidXQgdGhleSBzbG93IGRvd24gdG8gVVNCIDEuMSBzcGVlZHMuIAorCitVU0IgMS4xIGRldmljZXMgbWF5IGFsc28gYmUgdXNlZCBvbiBVU0IgMi4wIHN5c3RlbXMuICBXaGVuIHBsdWdnZWQKK2ludG8gYW4gRUhDSSBjb250cm9sbGVyLCB0aGV5IGFyZSBnaXZlbiB0byBhIFVTQiAxLjEgImNvbXBhbmlvbiIKK2NvbnRyb2xsZXIsIHdoaWNoIGlzIGEgT0hDSSBvciBVSENJIGNvbnRyb2xsZXIgYXMgbm9ybWFsbHkgdXNlZCB3aXRoCitzdWNoIGRldmljZXMuICBXaGVuIFVTQiAxLjEgZGV2aWNlcyBwbHVnIGludG8gVVNCIDIuMCBodWJzLCB0aGV5CitpbnRlcmFjdCB3aXRoIHRoZSBFSENJIGNvbnRyb2xsZXIgdGhyb3VnaCBhICJUcmFuc2FjdGlvbiBUcmFuc2xhdG9yIgorKFRUKSBpbiB0aGUgaHViLCB3aGljaCB0dXJucyBsb3cgb3IgZnVsbCBzcGVlZCB0cmFuc2FjdGlvbnMgaW50bworaGlnaCBzcGVlZCAic3BsaXQgdHJhbnNhY3Rpb25zIiB0aGF0IGRvbid0IHdhc3RlIHRyYW5zZmVyIGJhbmR3aWR0aC4KKworQXQgdGhpcyB3cml0aW5nLCB0aGlzIGRyaXZlciBoYXMgYmVlbiBzZWVuIHRvIHdvcmsgd2l0aCBpbXBsZW1lbnRhdGlvbnMKK29mIEVIQ0kgZnJvbSAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKTogIEludGVsLCBORUMsIFBoaWxpcHMsIGFuZCBWSUEuCitPdGhlciBFSENJIGltcGxlbWVudGF0aW9ucyBhcmUgYmVjb21pbmcgYXZhaWxhYmxlIGZyb20gb3RoZXIgdmVuZG9yczsKK3lvdSBzaG91bGQgZXhwZWN0IHRoaXMgZHJpdmVyIHRvIHdvcmsgd2l0aCB0aGVtIHRvby4KKworV2hpbGUgdXNiLXN0b3JhZ2UgZGV2aWNlcyBoYXZlIGJlZW4gYXZhaWxhYmxlIHNpbmNlIG1pZC0yMDAxICh3b3JraW5nCitxdWl0ZSBzcGVlZGlseSBvbiB0aGUgMi40IHZlcnNpb24gb2YgdGhpcyBkcml2ZXIpLCBodWJzIGhhdmUgb25seQorYmVlbiBhdmFpbGFibGUgc2luY2UgbGF0ZSAyMDAxLCBhbmQgb3RoZXIga2luZHMgb2YgaGlnaCBzcGVlZCBkZXZpY2VzCithcHBlYXIgdG8gYmUgb24gaG9sZCB1bnRpbCBtb3JlIHN5c3RlbXMgY29tZSB3aXRoIFVTQiAyLjAgYnVpbHQtaW4uCitTdWNoIG5ldyBzeXN0ZW1zIGhhdmUgYmVlbiBhdmFpbGFibGUgc2luY2UgZWFybHkgMjAwMiwgYW5kIGJlY2FtZSBtdWNoCittb3JlIHR5cGljYWwgaW4gdGhlIHNlY29uZCBoYWxmIG9mIDIwMDIuCisKK05vdGUgdGhhdCBVU0IgMi4wIHN1cHBvcnQgaW52b2x2ZXMgbW9yZSB0aGFuIGp1c3QgRUhDSS4gIEl0IHJlcXVpcmVzCitvdGhlciBjaGFuZ2VzIHRvIHRoZSBMaW51eC1VU0IgY29yZSBBUElzLCBpbmNsdWRpbmcgdGhlIGh1YiBkcml2ZXIsCitidXQgdGhvc2UgY2hhbmdlcyBoYXZlbid0IG5lZWRlZCB0byByZWFsbHkgY2hhbmdlIHRoZSBiYXNpYyAidXNiY29yZSIKK0FQSXMgZXhwb3NlZCB0byBVU0IgZGV2aWNlIGRyaXZlcnMuCisKKy0gRGF2aWQgQnJvd25lbGwKKyAgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKworRlVOQ1RJT05BTElUWQorCitUaGlzIGRyaXZlciBpcyByZWd1bGFybHkgdGVzdGVkIG9uIHg4NiBoYXJkd2FyZSwgYW5kIGhhcyBhbHNvIGJlZW4KK3VzZWQgb24gUFBDIGhhcmR3YXJlIHNvIGJpZy9saXR0bGUgZW5kaWFubmVzcyBpc3N1ZXMgc2hvdWxkIGJlIGdvbmUuCitJdCdzIGJlbGlldmVkIHRvIGRvIGFsbCB0aGUgcmlnaHQgUENJIG1hZ2ljIHNvIHRoYXQgSS9PIHdvcmtzIGV2ZW4gb24KK3N5c3RlbXMgd2l0aCBpbnRlcmVzdGluZyBETUEgbWFwcGluZyBpc3N1ZXMuCisKK1RyYW5zZmVyIFR5cGVzCisKK0F0IHRoaXMgd3JpdGluZyB0aGUgZHJpdmVyIHNob3VsZCBjb21mb3J0YWJseSBoYW5kbGUgYWxsIGNvbnRyb2wsIGJ1bGssCithbmQgaW50ZXJydXB0IHRyYW5zZmVycywgaW5jbHVkaW5nIHJlcXVlc3RzIHRvIFVTQiAxLjEgZGV2aWNlcyB0aHJvdWdoCit0cmFuc2FjdGlvbiB0cmFuc2xhdG9ycyAoVFRzKSBpbiBVU0IgMi4wIGh1YnMuICBCdXQgeW91IG1heSBmaW5kIGJ1Z3MuCisKK0hpZ2ggU3BlZWQgSXNvY2hyb25vdXMgKElTTykgdHJhbnNmZXIgc3VwcG9ydCBpcyBhbHNvIGZ1bmN0aW9uYWwsIGJ1dAorYXQgdGhpcyB3cml0aW5nIG5vIExpbnV4IGRyaXZlcnMgaGF2ZSBiZWVuIHVzaW5nIHRoYXQgc3VwcG9ydC4KKworRnVsbCBTcGVlZCBJc29jaHJvbm91cyB0cmFuc2ZlciBzdXBwb3J0LCB0aHJvdWdoIHRyYW5zYWN0aW9uIHRyYW5zbGF0b3JzLAoraXMgbm90IHlldCBhdmFpbGFibGUuICBOb3RlIHRoYXQgc3BsaXQgdHJhbnNhY3Rpb24gc3VwcG9ydCBmb3IgSVNPCit0cmFuc2ZlcnMgY2FuJ3Qgc2hhcmUgbXVjaCBjb2RlIHdpdGggdGhlIGNvZGUgZm9yIGhpZ2ggc3BlZWQgSVNPIHRyYW5zZmVycywKK3NpbmNlIEVIQ0kgcmVwcmVzZW50cyB0aGVzZSB3aXRoIGEgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlLiAgU28gZm9yIG5vdywKK21vc3QgVVNCIGF1ZGlvIGFuZCB2aWRlbyBkZXZpY2VzIGNhbid0IGJlIGNvbm5lY3RlZCB0byBoaWdoIHNwZWVkIGJ1c2VzLgorCitEcml2ZXIgQmVoYXZpb3IKKworVHJhbnNmZXJzIG9mIGFsbCB0eXBlcyBjYW4gYmUgcXVldWVkLiAgVGhpcyBtZWFucyB0aGF0IGNvbnRyb2wgdHJhbnNmZXJzCitmcm9tIGEgZHJpdmVyIG9uIG9uZSBpbnRlcmZhY2UgKG9yIHRocm91Z2ggdXNiZnMpIHdvbid0IGludGVyZmVyZSB3aXRoCitvbmVzIGZyb20gYW5vdGhlciBkcml2ZXIsIGFuZCB0aGF0IGludGVycnVwdCB0cmFuc2ZlcnMgY2FuIHVzZSBwZXJpb2RzCitvZiBvbmUgZnJhbWUgd2l0aG91dCByaXNraW5nIGRhdGEgbG9zcyBkdWUgdG8gaW50ZXJydXB0IHByb2Nlc3NpbmcgY29zdHMuCisKK1RoZSBFSENJIHJvb3QgaHViIGNvZGUgaGFuZHMgb2ZmIFVTQiAxLjEgZGV2aWNlcyB0byBpdHMgY29tcGFuaW9uCitjb250cm9sbGVyLiAgVGhpcyBkcml2ZXIgZG9lc24ndCBuZWVkIHRvIGtub3cgYW55dGhpbmcgYWJvdXQgdGhvc2UKK2RyaXZlcnM7IGEgT0hDSSBvciBVSENJIGRyaXZlciB0aGF0IHdvcmtzIGFscmVhZHkgZG9lc24ndCBuZWVkIHRvIGNoYW5nZQoranVzdCBiZWNhdXNlIHRoZSBFSENJIGRyaXZlciBpcyBhbHNvIHByZXNlbnQuCisKK1RoZXJlIGFyZSBzb21lIGlzc3VlcyB3aXRoIHBvd2VyIG1hbmFnZW1lbnQ7IHN1c3BlbmQvcmVzdW1lIGRvZXNuJ3QKK2JlaGF2ZSBxdWl0ZSByaWdodCBhdCB0aGUgbW9tZW50LgorCitBbHNvLCBzb21lIHNob3J0Y3V0cyBoYXZlIGJlZW4gdGFrZW4gd2l0aCB0aGUgc2NoZWR1bGluZyBwZXJpb2RpYwordHJhbnNhY3Rpb25zIChpbnRlcnJ1cHQgYW5kIGlzb2Nocm9ub3VzIHRyYW5zZmVycykuICBUaGVzZSBwbGFjZSBzb21lCitsaW1pdHMgb24gdGhlIG51bWJlciBvZiBwZXJpb2RpYyB0cmFuc2FjdGlvbnMgdGhhdCBjYW4gYmUgc2NoZWR1bGVkLAorYW5kIHByZXZlbnQgdXNlIG9mIHBvbGxpbmcgaW50ZXJ2YWxzIG9mIGxlc3MgdGhhbiBvbmUgZnJhbWUuCisKKworVVNFIEJZCisKK0Fzc3VtaW5nIHlvdSBoYXZlIGFuIEVIQ0kgY29udHJvbGxlciAob24gYSBQQ0kgY2FyZCBvciBtb3RoZXJib2FyZCkKK2FuZCBoYXZlIGNvbXBpbGVkIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBsb2FkIHRoaXMgbGlrZToKKworICAgICMgbW9kcHJvYmUgZWhjaS1oY2QKKworYW5kIHJlbW92ZSBpdCBieToKKworICAgICMgcm1tb2QgZWhjaS1oY2QKKworWW91IHNob3VsZCBhbHNvIGhhdmUgYSBkcml2ZXIgZm9yIGEgImNvbXBhbmlvbiBjb250cm9sbGVyIiwgc3VjaCBhcworIm9oY2ktaGNkIiAgb3IgInVoY2ktaGNkIi4gIEluIGNhc2Ugb2YgYW55IHRyb3VibGUgd2l0aCB0aGUgRUhDSSBkcml2ZXIsCityZW1vdmUgaXRzIG1vZHVsZSBhbmQgdGhlbiB0aGUgZHJpdmVyIGZvciB0aGF0IGNvbXBhbmlvbiBjb250cm9sbGVyIHdpbGwKK3Rha2Ugb3ZlciAoYXQgbG93ZXIgc3BlZWQpIGFsbCB0aGUgZGV2aWNlcyB0aGF0IHdlcmUgcHJldmlvdXNseSBoYW5kbGVkCitieSB0aGUgRUhDSSBkcml2ZXIuCisKK01vZHVsZSBwYXJhbWV0ZXJzIChwYXNzIHRvICJtb2Rwcm9iZSIpIGluY2x1ZGU6CisKKyAgICBsb2cyX2lycV90aHJlc2ggKGRlZmF1bHQgMCk6CisJTG9nMiBvZiBkZWZhdWx0IGludGVycnVwdCBkZWxheSwgaW4gbWljcm9mcmFtZXMuICBUaGUgZGVmYXVsdAorCXZhbHVlIGlzIDAsIGluZGljYXRpbmcgMSBtaWNyb2ZyYW1lICgxMjUgdXNlYykuICBNYXhpbXVtIHZhbHVlCisJaXMgNiwgaW5kaWNhdGluZyAyXjYgPSA2NCBtaWNyb2ZyYW1lcy4gIFRoaXMgY29udHJvbHMgaG93IG9mdGVuCisJdGhlIEVIQ0kgY29udHJvbGxlciBjYW4gaXNzdWUgaW50ZXJydXB0cy4KKworSWYgeW91J3JlIHVzaW5nIHRoaXMgZHJpdmVyIG9uIGEgMi41IGtlcm5lbCwgYW5kIHlvdSd2ZSBlbmFibGVkIFVTQgorZGVidWdnaW5nIHN1cHBvcnQsIHlvdSdsbCBzZWUgdGhyZWUgZmlsZXMgaW4gdGhlICJzeXNmcyIgZGlyZWN0b3J5IGZvcgorYW55IEVIQ0kgY29udHJvbGxlcjoKKworCSJhc3luYyIgZHVtcHMgdGhlIGFzeW5jaHJvbm91cyBzY2hlZHVsZSwgdXNlZCBmb3IgY29udHJvbAorCQlhbmQgYnVsayB0cmFuc2ZlcnMuICBTaG93cyBlYWNoIGFjdGl2ZSBxaCBhbmQgdGhlIHF0ZHMKKwkJcGVuZGluZywgdXN1YWxseSBvbmUgcXRkIHBlciB1cmIuICAoTG9vayBhdCBpdCB3aXRoCisJCXVzYi1zdG9yYWdlIGRvaW5nIGRpc2sgSS9POyB3YXRjaCB0aGUgcmVxdWVzdCBxdWV1ZXMhKQorCSJwZXJpb2RpYyIgZHVtcHMgdGhlIHBlcmlvZGljIHNjaGVkdWxlLCB1c2VkIGZvciBpbnRlcnJ1cHQKKwkJYW5kIGlzb2Nocm9ub3VzIHRyYW5zZmVycy4gIERvZXNuJ3Qgc2hvdyBxdGRzLgorCSJyZWdpc3RlcnMiIHNob3cgY29udHJvbGxlciByZWdpc3RlciBzdGF0ZSwgYW5kCisKK1RoZSBjb250ZW50cyBvZiB0aG9zZSBmaWxlcyBjYW4gaGVscCBpZGVudGlmeSBkcml2ZXIgcHJvYmxlbXMuCisKKworRGV2aWNlIGRyaXZlcnMgc2hvdWxkbid0IGNhcmUgd2hldGhlciB0aGV5J3JlIHJ1bm5pbmcgb3ZlciBFSENJIG9yIG5vdCwKK2J1dCB0aGV5IG1heSB3YW50IHRvIGNoZWNrIGZvciAidXNiX2RldmljZS0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0giLgorSGlnaCBzcGVlZCBkZXZpY2VzIGNhbiBkbyB0aGluZ3MgdGhhdCBmdWxsIHNwZWVkIChvciBsb3cgc3BlZWQpIG9uZXMKK2Nhbid0LCBzdWNoIGFzICJoaWdoIGJhbmR3aWR0aCIgcGVyaW9kaWMgKGludGVycnVwdCBvciBJU08pIHRyYW5zZmVycy4KK0Fsc28sIHNvbWUgdmFsdWVzIGluIGRldmljZSBkZXNjcmlwdG9ycyAoc3VjaCBhcyBwb2xsaW5nIGludGVydmFscyBmb3IKK3BlcmlvZGljIHRyYW5zZmVycykgdXNlIGRpZmZlcmVudCBlbmNvZGluZ3Mgd2hlbiBvcGVyYXRpbmcgYXQgaGlnaCBzcGVlZC4KKworSG93ZXZlciwgZG8gbWFrZSBhIHBvaW50IG9mIHRlc3RpbmcgZGV2aWNlIGRyaXZlcnMgdGhyb3VnaCBVU0IgMi4wIGh1YnMuCitUaG9zZSBodWJzIHJlcG9ydCBzb21lIGZhaWx1cmVzLCBzdWNoIGFzIGRpc2Nvbm5lY3Rpb25zLCBkaWZmZXJlbnRseSB3aGVuCit0cmFuc2FjdGlvbiB0cmFuc2xhdG9ycyBhcmUgaW4gdXNlOyBzb21lIGRyaXZlcnMgaGF2ZSBiZWVuIHNlZW4gdG8gYmVoYXZlCitiYWRseSB3aGVuIHRoZXkgc2VlIGRpZmZlcmVudCBmYXVsdHMgdGhhbiBPSENJIG9yIFVIQ0kgcmVwb3J0LgorCisKK1BFUkZPUk1BTkNFCisKK1VTQiAyLjAgdGhyb3VnaHB1dCBpcyBnYXRlZCBieSB0d28gbWFpbiBmYWN0b3JzOiAgaG93IGZhc3QgdGhlIGhvc3QKK2NvbnRyb2xsZXIgY2FuIHByb2Nlc3MgcmVxdWVzdHMsIGFuZCBob3cgZmFzdCBkZXZpY2VzIGNhbiByZXNwb25kIHRvCit0aGVtLiAgVGhlIDQ4MCBNYml0L3NlYyAicmF3IHRyYW5zZmVyIHJhdGUiIGlzIG9iZXllZCBieSBhbGwgZGV2aWNlcywKK2J1dCBhZ2dyZWdhdGUgdGhyb3VnaHB1dCBpcyBhbHNvIGFmZmVjdGVkIGJ5IGlzc3VlcyBsaWtlIGRlbGF5cyBiZXR3ZWVuCitpbmRpdmlkdWFsIGhpZ2ggc3BlZWQgcGFja2V0cywgZHJpdmVyIGludGVsbGlnZW5jZSwgYW5kIG9mIGNvdXJzZSB0aGUKK292ZXJhbGwgc3lzdGVtIGxvYWQuICBMYXRlbmN5IGlzIGFsc28gYSBwZXJmb3JtYW5jZSBjb25jZXJuLgorCitCdWxrIHRyYW5zZmVycyBhcmUgbW9zdCBvZnRlbiB1c2VkIHdoZXJlIHRocm91Z2hwdXQgaXMgYW4gaXNzdWUuICBJdCdzCitnb29kIHRvIGtlZXAgaW4gbWluZCB0aGF0IGJ1bGsgdHJhbnNmZXJzIGFyZSBhbHdheXMgaW4gNTEyIGJ5dGUgcGFja2V0cywKK2FuZCBhdCBtb3N0IDEzIG9mIHRob3NlIGZpdCBpbnRvIG9uZSBVU0IgMi4wIG1pY3JvZnJhbWUuICBFaWdodCBVU0IgMi4wCittaWNyb2ZyYW1lcyBmaXQgaW4gYSBVU0IgMS4xIGZyYW1lOyBhIG1pY3JvZnJhbWUgaXMgMSBtc2VjLzggPSAxMjUgdXNlYy4KKworU28gbW9yZSB0aGFuIDUwIE1CeXRlL3NlYyBpcyBhdmFpbGFibGUgZm9yIGJ1bGsgdHJhbnNmZXJzLCB3aGVuIGJvdGgKK2hhcmR3YXJlIGFuZCBkZXZpY2UgZHJpdmVyIHNvZnR3YXJlIGFsbG93IGl0LiAgUGVyaW9kaWMgdHJhbnNmZXIgbW9kZXMKKyhpc29jaHJvbm91cyBhbmQgaW50ZXJydXB0KSBhbGxvdyB0aGUgbGFyZ2VyIHBhY2tldCBzaXplcyB3aGljaCBsZXQgeW91CithcHByb2FjaCB0aGUgcXVvdGVkIDQ4MCBNQml0L3NlYyB0cmFuc2ZlciByYXRlLgorCitIYXJkd2FyZSBQZXJmb3JtYW5jZQorCitBdCB0aGlzIHdyaXRpbmcsIGluZGl2aWR1YWwgVVNCIDIuMCBkZXZpY2VzIHRlbmQgdG8gbWF4IG91dCBhdCBhcm91bmQKKzIwIE1CeXRlL3NlYyB0cmFuc2ZlciByYXRlcy4gIFRoaXMgaXMgb2YgY291cnNlIHN1YmplY3QgdG8gY2hhbmdlOworYW5kIHNvbWUgZGV2aWNlcyBub3cgZ28gZmFzdGVyLCB3aGlsZSBvdGhlcnMgZ28gc2xvd2VyLgorCitUaGUgZmlyc3QgTkVDIGltcGxlbWVudGF0aW9uIG9mIEVIQ0kgc2VlbXMgdG8gaGF2ZSBhIGhhcmR3YXJlIGJvdHRsZW5lY2sKK2F0IGFyb3VuZCAyOCBNQnl0ZS9zZWMgYWdncmVnYXRlIHRyYW5zZmVyIHJhdGUuICBXaGlsZSB0aGlzIGlzIGNsZWFybHkKK2Vub3VnaCBmb3IgYSBzaW5nbGUgZGV2aWNlIGF0IDIwIE1CeXRlL3NlYywgcHV0dGluZyB0aHJlZSBzdWNoIGRldmljZXMKK29udG8gb25lIGJ1cyBkb2VzIG5vdCBnZXQgeW91IDYwIE1CeXRlL3NlYy4gIFRoZSBpc3N1ZSBhcHBlYXJzIHRvIGJlCit0aGF0IHRoZSBjb250cm9sbGVyIGhhcmR3YXJlIHdvbid0IGRvIGNvbmN1cnJlbnQgVVNCIGFuZCBQQ0kgYWNjZXNzLAorc28gdGhhdCBpdCdzIG9ubHkgdHJ5aW5nIHNpeCAob3IgbWF5YmUgc2V2ZW4pIFVTQiB0cmFuc2FjdGlvbnMgZWFjaAorbWljcm9mcmFtZSByYXRoZXIgdGhhbiB0aGlydGVlbi4gIChTZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB0cmFkZSBvZmYKK2ZvciBhIHByb2R1Y3QgdGhhdCBiZWF0IGFsbCB0aGUgb3RoZXJzIHRvIG1hcmtldCBieSBvdmVyIGEgeWVhciEpCisKK0l0J3MgZXhwZWN0ZWQgdGhhdCBuZXdlciBpbXBsZW1lbnRhdGlvbnMgd2lsbCBiZXR0ZXIgdGhpcywgdGhyb3dpbmcKK21vcmUgc2lsaWNvbiByZWFsIGVzdGF0ZSBhdCB0aGUgcHJvYmxlbSBzbyB0aGF0IG5ldyBtb3RoZXJib2FyZCBjaGlwCitzZXRzIHdpbGwgZ2V0IGNsb3NlciB0byB0aGF0IDYwIE1CeXRlL3NlYyB0YXJnZXQuICBUaGF0IGluY2x1ZGVzIGFuCit1cGRhdGVkIGltcGxlbWVudGF0aW9uIGZyb20gTkVDLCBhcyB3ZWxsIGFzIG90aGVyIHZlbmRvcnMnIHNpbGljb24uCisKK1RoZXJlJ3MgYSBtaW5pbXVtIGxhdGVuY3kgb2Ygb25lIG1pY3JvZnJhbWUgKDEyNSB1c2VjKSBmb3IgdGhlIGhvc3QKK3RvIHJlY2VpdmUgaW50ZXJydXB0cyBmcm9tIHRoZSBFSENJIGNvbnRyb2xsZXIgaW5kaWNhdGluZyBjb21wbGV0aW9uCitvZiByZXF1ZXN0cy4gIFRoYXQgbGF0ZW5jeSBpcyB0dW5hYmxlOyB0aGVyZSdzIGEgbW9kdWxlIG9wdGlvbi4gIEJ5CitkZWZhdWx0IGVoY2ktaGNkIGRyaXZlciB1c2VzIHRoZSBtaW5pbXVtIGxhdGVuY3ksIHdoaWNoIG1lYW5zIHRoYXQgaWYKK3lvdSBpc3N1ZSBhIGNvbnRyb2wgb3IgYnVsayByZXF1ZXN0IHlvdSBjYW4gb2Z0ZW4gZXhwZWN0IHRvIGxlYXJuIHRoYXQKK2l0IGNvbXBsZXRlZCBpbiBsZXNzIHRoYW4gMjUwIHVzZWMgKGRlcGVuZGluZyBvbiB0cmFuc2ZlciBzaXplKS4KKworU29mdHdhcmUgUGVyZm9ybWFuY2UKKworVG8gZ2V0IGV2ZW4gMjAgTUJ5dGUvc2VjIHRyYW5zZmVyIHJhdGVzLCBMaW51eC1VU0IgZGV2aWNlIGRyaXZlcnMgd2lsbAorbmVlZCB0byBrZWVwIHRoZSBFSENJIHF1ZXVlIGZ1bGwuICBUaGF0IG1lYW5zIGlzc3VpbmcgbGFyZ2UgcmVxdWVzdHMsCitvciB1c2luZyBidWxrIHF1ZXVpbmcgaWYgYSBzZXJpZXMgb2Ygc21hbGwgcmVxdWVzdHMgbmVlZHMgdG8gYmUgaXNzdWVkLgorV2hlbiBkcml2ZXJzIGRvbid0IGRvIHRoYXQsIHRoZWlyIHBlcmZvcm1hbmNlIHJlc3VsdHMgd2lsbCBzaG93IGl0LgorCitJbiB0eXBpY2FsIHNpdHVhdGlvbnMsIGEgdXNiX2J1bGtfbXNnKCkgbG9vcCB3cml0aW5nIG91dCA0IEtCIGNodW5rcyBpcworZ29pbmcgdG8gd2FzdGUgbW9yZSB0aGFuIGhhbGYgdGhlIFVTQiAyLjAgYmFuZHdpZHRoLiAgRGVsYXlzIGJldHdlZW4gdGhlCitJL08gY29tcGxldGlvbiBhbmQgdGhlIGRyaXZlciBpc3N1aW5nIHRoZSBuZXh0IHJlcXVlc3Qgd2lsbCB0YWtlIGxvbmdlcgordGhhbiB0aGUgSS9PLiAgSWYgdGhhdCBzYW1lIGxvb3AgdXNlZCAxNiBLQiBjaHVua3MsIGl0J2QgYmUgYmV0dGVyOyBhCitzZXF1ZW5jZSBvZiAxMjggS0IgY2h1bmtzIHdvdWxkIHdhc3RlIGEgbG90IGxlc3MuCisKK0J1dCByYXRoZXIgdGhhbiBkZXBlbmRpbmcgb24gc3VjaCBsYXJnZSBJL08gYnVmZmVycyB0byBtYWtlIHN5bmNocm9ub3VzCitJL08gYmUgZWZmaWNpZW50LCBpdCdzIGJldHRlciB0byBqdXN0IHF1ZXVlIHVwIHNldmVyYWwgKGJ1bGspIHJlcXVlc3RzCit0byB0aGUgSEMsIGFuZCB3YWl0IGZvciB0aGVtIGFsbCB0byBjb21wbGV0ZSAob3IgYmUgY2FuY2VsZWQgb24gZXJyb3IpLgorU3VjaCBVUkIgcXVldWluZyBzaG91bGQgd29yayB3aXRoIGFsbCB0aGUgVVNCIDEuMSBIQyBkcml2ZXJzIHRvby4KKworSW4gdGhlIExpbnV4IDIuNSBrZXJuZWxzLCBuZXcgdXNiX3NnXyooKSBhcGkgY2FsbHMgaGF2ZSBiZWVuIGRlZmluZWQ7IHRoZXkKK3F1ZXVlIGFsbCB0aGUgYnVmZmVycyBmcm9tIGEgc2NhdHRlcmxpc3QuICBUaGV5IGFsc28gdXNlIHNjYXR0ZXJsaXN0IERNQQorbWFwcGluZyAod2hpY2ggbWlnaHQgYXBwbHkgYW4gSU9NTVUpIGFuZCBJUlEgcmVkdWN0aW9uLCBhbGwgb2Ygd2hpY2ggd2lsbAoraGVscCBtYWtlIGhpZ2ggc3BlZWQgdHJhbnNmZXJzIHJ1biBhcyBmYXN0IGFzIHRoZXkgY2FuLgorCisKK1RCRDogIEludGVycnVwdCBhbmQgSVNPIHRyYW5zZmVyIHBlcmZvcm1hbmNlIGlzc3Vlcy4gIFRob3NlIHBlcmlvZGljCit0cmFuc2ZlcnMgYXJlIGZ1bGx5IHNjaGVkdWxlZCwgc28gdGhlIG1haW4gaXNzdWUgaXMgbGlrZWx5IHRvIGJlIGhvdwordG8gdHJpZ2dlciAiaGlnaCBiYW5kd2lkdGgiIG1vZGVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9lcnJvci1jb2Rlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9lcnJvci1jb2Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzNmYxNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dApAQCAtMCwwICsxLDE2NyBAQAorUmV2aXNlZDogMjAwNC1PY3QtMjEKKworVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBvZiAoaG9wZWZ1bGx5KSBhbGwgcG9zc2libGUgZXJyb3IgY29kZXMgKGFuZAordGhlaXIgaW50ZXJwcmV0YXRpb24pIHRoYXQgY2FuIGJlIHJldHVybmVkIGZyb20gdXNiY29yZS4KKworU29tZSBvZiB0aGVtIGFyZSByZXR1cm5lZCBieSB0aGUgSG9zdCBDb250cm9sbGVyIERyaXZlcnMgKEhDRHMpLCB3aGljaAorZGV2aWNlIGRyaXZlcnMgb25seSBzZWUgdGhyb3VnaCB1c2Jjb3JlLiAgQXMgYSBydWxlLCBhbGwgdGhlIEhDRHMgc2hvdWxkCitiZWhhdmUgdGhlIHNhbWUgZXhjZXB0IGZvciB0cmFuc2ZlciBzcGVlZCBkZXBlbmRlbnQgYmVoYXZpb3JzIGFuZCB0aGUKK3dheSBjZXJ0YWluIGZhdWx0cyBhcmUgcmVwb3J0ZWQuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdXNiX3N1Ym1pdF91cmIgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitOb24tVVNCLXNwZWNpZmljOgorCiswCQlVUkIgc3VibWlzc2lvbiB3ZW50IGZpbmUKKworLUVOT01FTQkJbm8gbWVtb3J5IGZvciBhbGxvY2F0aW9uIG9mIGludGVybmFsIHN0cnVjdHVyZXMJCisKK1VTQi1zcGVjaWZpYzoKKworLUVOT0RFVgkJc3BlY2lmaWVkIFVTQi1kZXZpY2Ugb3IgYnVzIGRvZXNuJ3QgZXhpc3QKKworLUVOT0VOVAkJc3BlY2lmaWVkIGludGVyZmFjZSBvciBlbmRwb2ludCBkb2VzIG5vdCBleGlzdCBvcgorCQlpcyBub3QgZW5hYmxlZAorCistRU5YSU8JCWhvc3QgY29udHJvbGxlciBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBxdWV1aW5nIG9mIHRoaXMgdHlwZQorCQlvZiB1cmIuICAodHJlYXQgYXMgYSBob3N0IGNvbnRyb2xsZXIgYnVnLikKKworLUVJTlZBTAkJYSkgSW52YWxpZCB0cmFuc2ZlciB0eXBlIHNwZWNpZmllZCAob3Igbm90IHN1cHBvcnRlZCkKKwkJYikgSW52YWxpZCBvciB1bnN1cHBvcnRlZCBwZXJpb2RpYyB0cmFuc2ZlciBpbnRlcnZhbAorCQljKSBJU086IGF0dGVtcHRlZCB0byBjaGFuZ2UgdHJhbnNmZXIgaW50ZXJ2YWwKKwkJZCkgSVNPOiBudW1iZXJfb2ZfcGFja2V0cyBpcyA8IDAKKwkJZSkgdmFyaW91cyBvdGhlciBjYXNlcworCistRUFHQUlOCQlhKSBzcGVjaWZpZWQgSVNPIHN0YXJ0IGZyYW1lIHRvbyBlYXJseQorCQliKSAodXNpbmcgSVNPLUFTQVApIHRvbyBtdWNoIHNjaGVkdWxlZCBmb3IgdGhlIGZ1dHVyZQorCQkgICB3YWl0IHNvbWUgdGltZSBhbmQgdHJ5IGFnYWluLgorCistRUZCSUcJCUhvc3QgY29udHJvbGxlciBkcml2ZXIgY2FuJ3Qgc2NoZWR1bGUgdGhhdCBtYW55IElTTyBmcmFtZXMuCisKKy1FUElQRQkJU3BlY2lmaWVkIGVuZHBvaW50IGlzIHN0YWxsZWQuICBGb3Igbm9uLWNvbnRyb2wgZW5kcG9pbnRzLAorCQlyZXNldCB0aGlzIHN0YXR1cyB3aXRoIHVzYl9jbGVhcl9oYWx0KCkuCisKKy1FTVNHU0laRQkoYSkgZW5kcG9pbnQgbWF4cGFja2V0IHNpemUgaXMgemVybzsgaXQgaXMgbm90IHVzYWJsZQorCQkgICAgaW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIGFsdHNldHRpbmcuCisJCShiKSBJU08gcGFja2V0IGlzIGJpZ2VyIHRoYW4gZW5kcG9pbnQgbWF4cGFja2V0CisJCShjKSByZXF1ZXN0ZWQgZGF0YSB0cmFuc2ZlciBzaXplIGlzIGludmFsaWQgKG5lZ2F0aXZlKQorCistRU5PU1BDCQlUaGlzIHJlcXVlc3Qgd291bGQgb3ZlcmNvbW1pdCB0aGUgdXNiIGJhbmR3aWR0aCByZXNlcnZlZAorCQlmb3IgcGVyaW9kaWMgdHJhbnNmZXJzIChpbnRlcnJ1cHQsIGlzb2Nocm9ub3VzKS4KKworLUVTSFVURE9XTglUaGUgZGV2aWNlIG9yIGhvc3QgY29udHJvbGxlciBoYXMgYmVlbiBkaXNhYmxlZCBkdWUgdG8gc29tZQorCQlwcm9ibGVtIHRoYXQgY291bGQgbm90IGJlIHdvcmtlZCBhcm91bmQuCisKKy1FUEVSTQkJU3VibWlzc2lvbiBmYWlsZWQgYmVjYXVzZSB1cmItPnJlamVjdCB3YXMgc2V0LgorCistRUhPU1RVTlJFQUNICVVSQiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZC4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICBFcnJvciBjb2RlcyByZXR1cm5lZCBieSBpbiB1cmItPnN0YXR1cyAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgb3IgaW4gaXNvX2ZyYW1lX2Rlc2Nbbl0uc3RhdHVzIChmb3IgSVNPKSAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitVU0IgZGV2aWNlIGRyaXZlcnMgbWF5IG9ubHkgdGVzdCB1cmIgc3RhdHVzIHZhbHVlcyBpbiBjb21wbGV0aW9uIGhhbmRsZXJzLgorVGhpcyBpcyBiZWNhdXNlIG90aGVyd2lzZSB0aGVyZSB3b3VsZCBiZSBhIHJhY2UgYmV0d2VlbiBIQ0RzIHVwZGF0aW5nCit0aGVzZSB2YWx1ZXMgb24gb25lIENQVSwgYW5kIGRldmljZSBkcml2ZXJzIHRlc3RpbmcgdGhlbSBvbiBhbm90aGVyIENQVS4KKworQSB0cmFuc2ZlcidzIGFjdHVhbF9sZW5ndGggbWF5IGJlIHBvc2l0aXZlIGV2ZW4gd2hlbiBhbiBlcnJvciBoYXMgYmVlbgorcmVwb3J0ZWQuICBUaGF0J3MgYmVjYXVzZSB0cmFuc2ZlcnMgb2Z0ZW4gaW52b2x2ZSBzZXZlcmFsIHBhY2tldHMsIHNvIHRoYXQKK29uZSBvciBtb3JlIHBhY2tldHMgY291bGQgZmluaXNoIGJlZm9yZSBhbiBlcnJvciBzdG9wcyBmdXJ0aGVyIGVuZHBvaW50IEkvTy4KKworCiswCQkJVHJhbnNmZXIgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQorCistRU5PRU5UCQkJVVJCIHdhcyBzeW5jaHJvbm91c2x5IHVubGlua2VkIGJ5IHVzYl91bmxpbmtfdXJiCisKKy1FSU5QUk9HUkVTUwkJVVJCIHN0aWxsIHBlbmRpbmcsIG5vIHJlc3VsdHMgeWV0CisJCQkoVGhhdCBpcywgaWYgZHJpdmVycyBzZWUgdGhpcyBpdCdzIGEgYnVnLikKKworLUVQUk9UTyAoKiwgKiopCQlhKSBiaXRzdHVmZiBlcnJvcgorCQkJYikgbm8gcmVzcG9uc2UgcGFja2V0IHJlY2VpdmVkIHdpdGhpbiB0aGUKKwkJCSAgIHByZXNjcmliZWQgYnVzIHR1cm4tYXJvdW5kIHRpbWUKKwkJCWMpIHVua25vd24gVVNCIGVycm9yIAorCistRUlMU0VRICgqLCAqKikJCWEpIENSQyBtaXNtYXRjaAorCQkJYikgbm8gcmVzcG9uc2UgcGFja2V0IHJlY2VpdmVkIHdpdGhpbiB0aGUKKwkJCSAgIHByZXNjcmliZWQgYnVzIHR1cm4tYXJvdW5kIHRpbWUKKwkJCWMpIHVua25vd24gVVNCIGVycm9yIAorCisJCQlOb3RlIHRoYXQgb2Z0ZW4gdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUgZG9lcyBub3QKKwkJCWRpc3Rpbmd1aXNoIGFtb25nIGNhc2VzIGEpLCBiKSwgYW5kIGMpLCBzbyBhCisJCQlkcml2ZXIgY2Fubm90IHRlbGwgd2hldGhlciB0aGVyZSB3YXMgYSBwcm90b2NvbAorCQkJZXJyb3IsIGEgZmFpbHVyZSB0byByZXNwb25kIChvZnRlbiBjYXVzZWQgYnkKKwkJCWRldmljZSBkaXNjb25uZWN0KSwgb3Igc29tZSBvdGhlciBmYXVsdC4KKworLUVUSU1FRE9VVCAoKiopCQlObyByZXNwb25zZSBwYWNrZXQgcmVjZWl2ZWQgd2l0aGluIHRoZSBwcmVzY3JpYmVkCisJCQlidXMgdHVybi1hcm91bmQgdGltZS4gIFRoaXMgZXJyb3IgbWF5IGluc3RlYWQgYmUKKwkJCXJlcG9ydGVkIGFzIC1FUFJPVE8gb3IgLUVJTFNFUS4KKworCQkJTm90ZSB0aGF0IHRoZSBzeW5jaHJvbm91cyBVU0IgbWVzc2FnZSBmdW5jdGlvbnMKKwkJCWFsc28gdXNlIHRoaXMgY29kZSB0byBpbmRpY2F0ZSB0aW1lb3V0IGV4cGlyZWQKKwkJCWJlZm9yZSB0aGUgdHJhbnNmZXIgY29tcGxldGVkLgorCistRVBJUEUgKCoqKQkJRW5kcG9pbnQgc3RhbGxlZC4gIEZvciBub24tY29udHJvbCBlbmRwb2ludHMsCisJCQlyZXNldCB0aGlzIHN0YXR1cyB3aXRoIHVzYl9jbGVhcl9oYWx0KCkuCisKKy1FQ09NTQkJCUR1cmluZyBhbiBJTiB0cmFuc2ZlciwgdGhlIGhvc3QgY29udHJvbGxlcgorCQkJcmVjZWl2ZWQgZGF0YSBmcm9tIGFuIGVuZHBvaW50IGZhc3RlciB0aGFuIGl0CisJCQljb3VsZCBiZSB3cml0dGVuIHRvIHN5c3RlbSBtZW1vcnkKKworLUVOT1NSCQkJRHVyaW5nIGFuIE9VVCB0cmFuc2ZlciwgdGhlIGhvc3QgY29udHJvbGxlcgorCQkJY291bGQgbm90IHJldHJpZXZlIGRhdGEgZnJvbSBzeXN0ZW0gbWVtb3J5IGZhc3QKKwkJCWVub3VnaCB0byBrZWVwIHVwIHdpdGggdGhlIFVTQiBkYXRhIHJhdGUKKworLUVPVkVSRkxPVyAoKikJCVRoZSBhbW91bnQgb2YgZGF0YSByZXR1cm5lZCBieSB0aGUgZW5kcG9pbnQgd2FzCisJCQlncmVhdGVyIHRoYW4gZWl0aGVyIHRoZSBtYXggcGFja2V0IHNpemUgb2YgdGhlCisJCQllbmRwb2ludCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBzaXplLiAgIkJhYmJsZSIuCisKKy1FUkVNT1RFSU8JCVRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgZW5kcG9pbnQgZGlkIG5vdCBmaWxsIHRoZQorCQkJc3BlY2lmaWVkIGJ1ZmZlciwgYW5kIFVSQl9TSE9SVF9OT1RfT0sgd2FzIHNldCBpbgorCQkJdXJiLT50cmFuc2Zlcl9mbGFncy4KKworLUVOT0RFVgkJCURldmljZSB3YXMgcmVtb3ZlZC4gIE9mdGVuIHByZWNlZGVkIGJ5IGEgYnVyc3Qgb2YKKwkJCW90aGVyIGVycm9ycywgc2luY2UgdGhlIGh1YiBkcml2ZXIgZG9lcyd0IGRldGVjdAorCQkJZGV2aWNlIHJlbW92YWwgZXZlbnRzIGltbWVkaWF0ZWx5LgorCistRVhERVYJCQlJU08gdHJhbnNmZXIgb25seSBwYXJ0aWFsbHkgY29tcGxldGVkCisJCQlsb29rIGF0IGluZGl2aWR1YWwgZnJhbWUgc3RhdHVzIGZvciBkZXRhaWxzCisKKy1FSU5WQUwJCQlJU08gbWFkbmVzcywgaWYgdGhpcyBoYXBwZW5zOiBMb2cgb2ZmIGFuZCBnbyBob21lCisKKy1FQ09OTlJFU0VUCQlVUkIgd2FzIGFzeW5jaHJvbm91c2x5IHVubGlua2VkIGJ5IHVzYl91bmxpbmtfdXJiCisKKy1FU0hVVERPV04JCVRoZSBkZXZpY2Ugb3IgaG9zdCBjb250cm9sbGVyIGhhcyBiZWVuIGRpc2FibGVkIGR1ZQorCQkJdG8gc29tZSBwcm9ibGVtIHRoYXQgY291bGQgbm90IGJlIHdvcmtlZCBhcm91bmQsCisJCQlzdWNoIGFzIGEgcGh5c2ljYWwgZGlzY29ubmVjdC4KKworCisoKikgRXJyb3IgY29kZXMgbGlrZSAtRVBST1RPLCAtRUlMU0VRIGFuZCAtRU9WRVJGTE9XIG5vcm1hbGx5IGluZGljYXRlCitoYXJkd2FyZSBwcm9ibGVtcyBzdWNoIGFzIGJhZCBkZXZpY2VzIChpbmNsdWRpbmcgZmlybXdhcmUpIG9yIGNhYmxlcy4KKworKCoqKSBUaGlzIGlzIGFsc28gb25lIG9mIHNldmVyYWwgY29kZXMgdGhhdCBkaWZmZXJlbnQga2luZHMgb2YgaG9zdAorY29udHJvbGxlciB1c2UgdG8gdG8gaW5kaWNhdGUgYSB0cmFuc2ZlciBoYXMgZmFpbGVkIGJlY2F1c2Ugb2YgZGV2aWNlCitkaXNjb25uZWN0LiAgSW4gdGhlIGludGVydmFsIGJlZm9yZSB0aGUgaHViIGRyaXZlciBzdGFydHMgZGlzY29ubmVjdAorcHJvY2Vzc2luZywgZGV2aWNlcyBtYXkgcmVjZWl2ZSBzdWNoIGZhdWx0IHJlcG9ydHMgZm9yIGV2ZXJ5IHJlcXVlc3QuCisKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgRXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdXNiY29yZS1mdW5jdGlvbnMgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgIChleHBlY3QgYWxzbyBvdGhlciBzdWJtaXQgYW5kIHRyYW5zZmVyIHN0YXR1cyBjb2RlcykgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCit1c2JfcmVnaXN0ZXIoKToKKy1FSU5WQUwJCQllcnJvciBkdXJpbmcgcmVnaXN0ZXJpbmcgbmV3IGRyaXZlcgorCit1c2JfZ2V0XyovdXNiX3NldF8qKCk6Cit1c2JfY29udHJvbF9tc2coKToKK3VzYl9idWxrX21zZygpOgorLUVUSU1FRE9VVAkJVGltZW91dCBleHBpcmVkIGJlZm9yZSB0aGUgdHJhbnNmZXIgY29tcGxldGVkLgorCQkJSW4gdGhlIGZ1dHVyZSB0aGlzIGNvZGUgbWF5IGNoYW5nZSB0byAtRVRJTUUsCisJCQl3aG9zZSBkZWZpbml0aW9uIGlzIGEgY2xvc2VyIG1hdGNoIHRvIHRoaXMgc29ydAorCQkJb2YgZXJyb3IuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2dhZGdldF9zZXJpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzhjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dApAQCAtMCwwICsxLDMzMiBAQAorCisgICAgICAgICAgICAgICAgIExpbnV4IEdhZGdldCBTZXJpYWwgRHJpdmVyIHYyLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLzIwLzIwMDQKKworCitMaWNlbnNlIGFuZCBEaXNjbGFpbWVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKK3RoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCitNQSAwMjExMS0xMzA3IFVTQS4KKworVGhpcyBkb2N1bWVudCBhbmQgdGhlIHRoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciBpdHNlbGYgYXJlCitDb3B5cmlnaHQgKEMpIDIwMDQgYnkgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkuCisKK0lmIHlvdSBoYXZlIHF1ZXN0aW9ucywgcHJvYmxlbXMsIG9yIHN1Z2dlc3Rpb25zIGZvciB0aGlzIGRyaXZlcgorcGxlYXNlIGNvbnRhY3QgQWwgQm9yY2hlcnMgYXQgYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tLgorCisKK1ByZXJlcXVpc2l0ZXMKKy0tLS0tLS0tLS0tLS0KK1ZlcnNpb25zIG9mIHRoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciBhcmUgYXZhaWxhYmxlIGZvciB0aGUKKzIuNCBMaW51eCBrZXJuZWxzLCBidXQgdGhpcyBkb2N1bWVudCBhc3N1bWVzIHlvdSBhcmUgdXNpbmcKK3ZlcnNpb24gMi4wIG9yIGxhdGVyIG9mIHRoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciBpbiBhIDIuNgorTGludXgga2VybmVsLgorCitUaGlzIGRvY3VtZW50IGFzc3VtZXMgdGhhdCB5b3UgYXJlIGZhbWlsaWFyIHdpdGggTGludXggYW5kCitXaW5kb3dzIGFuZCBrbm93IGhvdyB0byBjb25maWd1cmUgYW5kIGJ1aWxkIExpbnV4IGtlcm5lbHMsIHJ1bgorc3RhbmRhcmQgdXRpbGl0aWVzLCB1c2UgbWluaWNvbSBhbmQgSHlwZXJUZXJtaW5hbCwgYW5kIHdvcmsgd2l0aAorVVNCIGFuZCBzZXJpYWwgZGV2aWNlcy4gIEl0IGFsc28gYXNzdW1lcyB5b3UgY29uZmlndXJlIHRoZSBMaW51eAorZ2FkZ2V0IGFuZCB1c2IgZHJpdmVycyBhcyBtb2R1bGVzLgorCisKK092ZXJ2aWV3CistLS0tLS0tLQorVGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGlzIGEgTGludXggVVNCIGdhZGdldCBkcml2ZXIsIGEgVVNCIGRldmljZQorc2lkZSBkcml2ZXIuICBJdCBydW5zIG9uIGEgTGludXggc3lzdGVtIHRoYXQgaGFzIFVTQiBkZXZpY2Ugc2lkZQoraGFyZHdhcmU7IGZvciBleGFtcGxlLCBhIFBEQSwgYW4gZW1iZWRkZWQgTGludXggc3lzdGVtLCBvciBhIFBDCit3aXRoIGEgVVNCIGRldmVsb3BtZW50IGNhcmQuCisKK1RoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciB0YWxrcyBvdmVyIFVTQiB0byBlaXRoZXIgYSBDREMgQUNNIGRyaXZlcgorb3IgYSBnZW5lcmljIFVTQiBzZXJpYWwgZHJpdmVyIHJ1bm5pbmcgb24gYSBob3N0IFBDLgorCisgICBIb3N0CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB8IEhvc3QtU2lkZSAgIENEQyBBQ00gICAgICAgVVNCIEhvc3QgICB8CisgIHwgT3BlcmF0aW5nIHwgICBvciAgICAgICAgfCBDb250cm9sbGVyIHwgICBVU0IKKyAgfCBTeXN0ZW0gICAgfCBHZW5lcmljIFVTQiB8IERyaXZlciAgICAgfC0tLS0tLS0tCisgIHwgKExpbnV4IG9yIHwgU2VyaWFsICAgICAgfCBhbmQgICAgICAgIHwgICAgICAgIHwKKyAgfCBXaW5kb3dzKSAgICBEcml2ZXIgICAgICAgIFVTQiBTdGFjayAgfCAgICAgICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICBHYWRnZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgfAorICB8IEdhZGdldCAgICAgICAgICAgICAgICAgICBVU0IgUGVyaXBoLiB8ICAgICAgICB8CisgIHwgRGV2aWNlLVNpZGUgfCAgR2FkZ2V0ICB8IENvbnRyb2xsZXIgIHwgICAgICAgIHwKKyAgfCBMaW51eCAgICAgICB8ICBTZXJpYWwgIHwgRHJpdmVyICAgICAgfC0tLS0tLS0tCisgIHwgT3BlcmF0aW5nICAgfCAgRHJpdmVyICB8IGFuZCAgICAgICAgIHwKKyAgfCBTeXN0ZW0gICAgICAgICAgICAgICAgICAgVVNCIFN0YWNrICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gdGhlIGRldmljZS1zaWRlIExpbnV4IHN5c3RlbSwgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGxvb2tzCitsaWtlIGEgc2VyaWFsIGRldmljZS4KKworT24gdGhlIGhvc3Qtc2lkZSBzeXN0ZW0sIHRoZSBnYWRnZXQgc2VyaWFsIGRldmljZSBsb29rcyBsaWtlIGEKK0NEQyBBQ00gY29tcGxpYW50IGNsYXNzIGRldmljZSBvciBhIHNpbXBsZSB2ZW5kb3Igc3BlY2lmaWMgZGV2aWNlCit3aXRoIGJ1bGsgaW4gYW5kIGJ1bGsgb3V0IGVuZHBvaW50cywgYW5kIGl0IGlzIHRyZWF0ZWQgc2ltaWxhcmx5Cit0byBvdGhlciBzZXJpYWwgZGV2aWNlcy4KKworVGhlIGhvc3Qgc2lkZSBkcml2ZXIgY2FuIHBvdGVudGlhbGx5IGJlIGFueSBBQ00gY29tcGxpYW50IGRyaXZlcgorb3IgYW55IGRyaXZlciB0aGF0IGNhbiB0YWxrIHRvIGEgZGV2aWNlIHdpdGggYSBzaW1wbGUgYnVsayBpbi9vdXQKK2ludGVyZmFjZS4gIEdhZGdldCBzZXJpYWwgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlIExpbnV4IEFDTSBkcml2ZXIsCit0aGUgV2luZG93cyB1c2JzZXIuc3lzIEFDTSBkcml2ZXIsIGFuZCB0aGUgTGludXggVVNCIGdlbmVyaWMgc2VyaWFsCitkcml2ZXIuCisKK1dpdGggdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGFuZCB0aGUgaG9zdCBzaWRlIEFDTSBvciBnZW5lcmljCitzZXJpYWwgZHJpdmVyIHJ1bm5pbmcsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuCit0aGUgaG9zdCBhbmQgdGhlIGdhZGdldCBzaWRlIHN5c3RlbXMgYXMgaWYgdGhleSB3ZXJlIGNvbm5lY3RlZCBieSBhCitzZXJpYWwgY2FibGUuCisKK1RoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciBvbmx5IHByb3ZpZGVzIHNpbXBsZSB1bnJlbGlhYmxlIGRhdGEKK2NvbW11bmljYXRpb24uICBJdCBkb2VzIG5vdCB5ZXQgaGFuZGxlIGZsb3cgY29udHJvbCBvciBtYW55IG90aGVyCitmZWF0dXJlcyBvZiBub3JtYWwgc2VyaWFsIGRldmljZXMuCisKKworSW5zdGFsbGluZyB0aGUgR2FkZ2V0IFNlcmlhbCBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyB1c2UgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGUgTGludXggZ2FkZ2V0CitzaWRlIGtlcm5lbCBmb3IgIlN1cHBvcnQgZm9yIFVTQiBHYWRnZXRzIiwgZm9yIGEgIlVTQiBQZXJpcGhlcmFsCitDb250cm9sbGVyIiAoZm9yIGV4YW1wbGUsIG5ldDIyODApLCBhbmQgZm9yIHRoZSAiU2VyaWFsIEdhZGdldCIKK2RyaXZlci4gIEFsbCB0aGlzIGFyZSBsaXN0ZWQgdW5kZXIgIlVTQiBHYWRnZXQgU3VwcG9ydCIgd2hlbgorY29uZmlndXJpbmcgdGhlIGtlcm5lbC4gIFRoZW4gcmVidWlsZCBhbmQgaW5zdGFsbCB0aGUga2VybmVsIG9yCittb2R1bGVzLgorCitUaGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgdXNlcyBtYWpvciBudW1iZXIgMTI3LCBmb3Igbm93LiAgU28geW91Cit3aWxsIG5lZWQgdG8gY3JlYXRlIGEgZGV2aWNlIG5vZGUgZm9yIGl0LCBsaWtlIHRoaXM6CisKKyAgbWtub2QgL2Rldi90dHlnc2VyaWFsIGMgMTI3IDAKKworWW91IG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UuCisKK1RoZW4geW91IG11c3QgbG9hZCB0aGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIuICBUbyBsb2FkIGl0IGFzIGFuCitBQ00gZGV2aWNlLCBkbyB0aGlzOgorCisgIG1vZHByb2JlIGdfc2VyaWFsIHVzZV9hY209MQorCitUbyBsb2FkIGl0IGFzIGEgdmVuZG9yIHNwZWNpZmljIGJ1bGsgaW4vb3V0IGRldmljZSwgZG8gdGhpczoKKworICBtb2Rwcm9iZSBnX3NlcmlhbAorCitUaGlzIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIHVuZGVybHlpbmcgZ2FkZ2V0IHBlcmlwaGVyYWwKK2NvbnRyb2xsZXIgZHJpdmVyLiAgVGhpcyBtdXN0IGJlIGRvbmUgZWFjaCB0aW1lIHlvdSByZWJvb3QgdGhlIGdhZGdldAorc2lkZSBMaW51eCBzeXN0ZW0uICBZb3UgY2FuIGFkZCB0aGlzIHRvIHRoZSBzdGFydCB1cCBzY3JpcHRzLCBpZgorZGVzaXJlZC4KKworSWYgZ2FkZ2V0IHNlcmlhbCBpcyBsb2FkZWQgYXMgYW4gQUNNIGRldmljZSB5b3Ugd2lsbCB3YW50IHRvIHVzZQorZWl0aGVyIHRoZSBXaW5kb3dzIG9yIExpbnV4IEFDTSBkcml2ZXIgb24gdGhlIGhvc3Qgc2lkZS4gIElmIGdhZGdldAorc2VyaWFsIGlzIGxvYWRlZCBhcyBhIGJ1bGsgaW4vb3V0IGRldmljZSwgeW91IHdpbGwgd2FudCB0byB1c2UgdGhlCitMaW51eCBnZW5lcmljIHNlcmlhbCBkcml2ZXIgb24gdGhlIGhvc3Qgc2lkZS4gIEZvbGxvdyB0aGUgYXBwcm9wcmlhdGUKK2luc3RydWN0aW9ucyBiZWxvdyB0byBpbnN0YWxsIHRoZSBob3N0IHNpZGUgZHJpdmVyLgorCisKK0luc3RhbGxpbmcgdGhlIFdpbmRvd3MgSG9zdCBBQ00gRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gdXNlIHRoZSBXaW5kb3dzIEFDTSBkcml2ZXIgeW91IG11c3QgaGF2ZSB0aGUgZmlsZXMgImdzZXJpYWwuaW5mIgorYW5kICJ1c2JzZXIuc3lzIiB0b2dldGhlciBpbiBhIGZvbGRlciBvbiB0aGUgV2luZG93cyBtYWNoaW5lLgorCitUaGUgImdzZXJpYWwuaW5mIiBmaWxlIGlzIGdpdmVuIGhlcmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tIENVVCBIRVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tCitbVmVyc2lvbl0KK1NpZ25hdHVyZT0iJFdpbmRvd3MgTlQkIgorQ2xhc3M9UG9ydHMKK0NsYXNzR3VpZD17NEQzNkU5NzgtRTMyNS0xMUNFLUJGQzEtMDgwMDJCRTEwMzE4fQorUHJvdmlkZXI9JUxJTlVYJQorRHJpdmVyVmVyPTA4LzE3LzIwMDQsMC4wLjIuMAorOyBDb3B5cmlnaHQgKEMpIDIwMDQgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKworW01hbnVmYWN0dXJlcl0KKyVMSU5VWCU9R1NlcmlhbERldmljZUxpc3QKKworW0dTZXJpYWxEZXZpY2VMaXN0XQorJUdTRVJJQUwlPUdTZXJpYWxJbnN0YWxsLCBVU0JcVklEXzA1MjUmUElEX0E0QTcKKworW0Rlc3RpbmF0aW9uRGlyc10KK0RlZmF1bHREZXN0RGlyPTEwLFN5c3RlbTMyXERyaXZlcnMKKworW0dTZXJpYWxJbnN0YWxsXQorQ29weUZpbGVzPUdTZXJpYWxDb3B5RmlsZXMKK0FkZFJlZz1HU2VyaWFsQWRkUmVnCisKK1tHU2VyaWFsQ29weUZpbGVzXQordXNic2VyLnN5cworCitbR1NlcmlhbEFkZFJlZ10KK0hLUiwsRGV2TG9hZGVyLCwqbnRrZXJuCitIS1IsLE5UTVBEcml2ZXIsLHVzYnNlci5zeXMKK0hLUiwsRW51bVByb3BQYWdlczMyLCwiTXNQb3J0cy5kbGwsU2VyaWFsUG9ydFByb3BQYWdlUHJvdmlkZXIiCisKK1tHU2VyaWFsSW5zdGFsbC5TZXJ2aWNlc10KK0FkZFNlcnZpY2UgPSB1c2JzZXIsMHgwMDAyLEdTZXJpYWxTZXJ2aWNlCisKK1tHU2VyaWFsU2VydmljZV0KK0Rpc3BsYXlOYW1lID0gJUdTRVJJQUxfRElTUExBWV9OQU1FJQorU2VydmljZVR5cGUgPSAxICAgICAgICAgICAgICAgICAgOyBTRVJWSUNFX0tFUk5FTF9EUklWRVIKK1N0YXJ0VHlwZSA9IDMgICAgICAgICAgICAgICAgICAgIDsgU0VSVklDRV9ERU1BTkRfU1RBUlQKK0Vycm9yQ29udHJvbCA9IDEgICAgICAgICAgICAgICAgIDsgU0VSVklDRV9FUlJPUl9OT1JNQUwKK1NlcnZpY2VCaW5hcnkgPSAlMTAlXFN5c3RlbTMyXERyaXZlcnNcdXNic2VyLnN5cworTG9hZE9yZGVyR3JvdXAgPSBCYXNlCisKK1tTdHJpbmdzXQorTElOVVggPSAiTGludXgiCitHU0VSSUFMID0gIkdhZGdldCBTZXJpYWwiCitHU0VSSUFMX0RJU1BMQVlfTkFNRSA9ICJVU0IgR2FkZ2V0IFNlcmlhbCBEcml2ZXIiCistLS0tLS0tLS0tLS0tLS0tLS0tLSBDVVQgSEVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgInVzYnNlci5zeXMiIGZpbGUgY29tZXMgd2l0aCB2YXJpb3VzIHZlcnNpb25zIG9mIFdpbmRvd3MuCitGb3IgZXhhbXBsZSwgaXQgY2FuIGJlIGZvdW5kIG9uIFdpbmRvd3MgWFAgdHlwaWNhbGx5IGluCisKKyAgQzpcV0lORE9XU1xEcml2ZXIgQ2FjaGVcaTM4Nlxkcml2ZXIuY2FiCisKK09yIGl0IGNhbiBiZSBmb3VuZCBvbiB0aGUgV2luZG93cyA5OFNFIENEIGluIHRoZSAid2luOTgiIGZvbGRlcgoraW4gdGhlICJEUklWRVIxMS5DQUIiIHRocm91Z2ggIkRSSVZFUjIwLkNBQiIgY2FiIGZpbGVzLiAgWW91IHdpbGwKK25lZWQgdGhlIERPUyAiZXhwYW5kIiBwcm9ncmFtLCB0aGUgQ3lnd2luICJjYWJleHRyYWN0IiBwcm9ncmFtLCBvcgorYSBzaW1pbGFyIHByb2dyYW0gdG8gdW5wYWNrIHRoZXNlIGNhYiBmaWxlcyBhbmQgZXh0cmFjdCAidXNic2VyLnN5cyIuCisKK0ZvciBleGFtcGxlLCB0byBleHRyYWN0ICJ1c2JzZXIuc3lzIiBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorb24gV2luZG93cyBYUCwgb3BlbiBhIERPUyB3aW5kb3cgYW5kIHJ1biBhIGNvbW1hbmQgbGlrZQorCisgIGV4cGFuZCBDOlxXSU5ET1dTXERyaXZlcn4xXGkzODZcZHJpdmVyLmNhYiAtRjp1c2JzZXIuc3lzIC4KKworKFRoYW5rcyB0byBOaXNoYW50IEthbWF0IGZvciBwb2ludGluZyBvdXQgdGhpcyBET1MgY29tbWFuZC4pCisKK1doZW4gdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGlzIGxvYWRlZCBhbmQgdGhlIFVTQiBkZXZpY2UgY29ubmVjdGVkCit0byB0aGUgV2luZG93cyBob3N0IHdpdGggYSBVU0IgY2FibGUsIFdpbmRvd3Mgc2hvdWxkIHJlY29nbml6ZSB0aGUKK2dhZGdldCBzZXJpYWwgZGV2aWNlIGFuZCBhc2sgZm9yIGEgZHJpdmVyLiAgVGVsbCBXaW5kb3dzIHRvIGZpbmQgdGhlCitkcml2ZXIgaW4gdGhlIGZvbGRlciB0aGF0IGNvbnRhaW5zICJnc2VyaWFsLmluZiIgYW5kICJ1c2JzZXIuc3lzIi4KKworRm9yIGV4YW1wbGUsIG9uIFdpbmRvd3MgWFAsIHdoZW4gdGhlIGdhZGdldCBzZXJpYWwgZGV2aWNlIGlzIGZpcnN0CitwbHVnZ2VkIGluLCB0aGUgIkZvdW5kIE5ldyBIYXJkd2FyZSBXaXphcmQiIHN0YXJ0cyB1cC4gIFNlbGVjdAorIkluc3RhbGwgZnJvbSBhIGxpc3Qgb3Igc3BlY2lmaWMgbG9jYXRpb24gKEFkdmFuY2VkKSIsIHRoZW4gb24KK3RoZSBuZXh0IHNjcmVlbiBzZWxlY3QgIkluY2x1ZGUgdGhpcyBsb2NhdGlvbiBpbiB0aGUgc2VhcmNoIiBhbmQKK2VudGVyIHRoZSBwYXRoIG9yIGJyb3dzZSB0byB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgImdzZXJpYWwuaW5mIiBhbmQKKyJ1c2JzZXIuc3lzIi4gIFdpbmRvd3Mgd2lsbCBjb21wbGFpbiB0aGF0IHRoZSBHYWRnZXQgU2VyaWFsIGRyaXZlcgoraGFzIG5vdCBwYXNzZWQgV2luZG93cyBMb2dvIHRlc3RpbmcsIGJ1dCBzZWxlY3QgIkNvbnRpbnVlIGFueXdheSIKK2FuZCBmaW5pc2ggdGhlIGRyaXZlciBpbnN0YWxsYXRpb24uCisKK09uIFdpbmRvd3MgWFAsIGluIHRoZSAiRGV2aWNlIE1hbmFnZXIiICh1bmRlciAiQ29udHJvbCBQYW5lbCIsCisiU3lzdGVtIiwgIkhhcmR3YXJlIikgZXhwYW5kIHRoZSAiUG9ydHMgKENPTSAmIExQVCkiIGVudHJ5IGFuZCB5b3UKK3Nob3VsZCBzZWUgIkdhZGdldCBTZXJpYWwiIGxpc3RlZCBhcyB0aGUgZHJpdmVyIGZvciBvbmUgb2YgdGhlIENPTQorcG9ydHMuCisKK1RvIHVuaW5zdGFsbCB0aGUgV2luZG93cyBYUCBkcml2ZXIgZm9yICJHYWRnZXQgU2VyaWFsIiwgcmlnaHQgY2xpY2sKK29uIHRoZSAiR2FkZ2V0IFNlcmlhbCIgZW50cnkgaW4gdGhlICJEZXZpY2UgTWFuYWdlciIgYW5kIHNlbGVjdAorIlVuaW5zdGFsbCIuCisKKworSW5zdGFsbGluZyB0aGUgTGludXggSG9zdCBBQ00gRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHVzZSB0aGUgTGludXggQUNNIGRyaXZlciB5b3UgbXVzdCBjb25maWd1cmUgdGhlIExpbnV4IGhvc3Qgc2lkZQora2VybmVsIGZvciAiU3VwcG9ydCBmb3IgSG9zdC1zaWRlIFVTQiIgYW5kIGZvciAiVVNCIE1vZGVtIChDREMgQUNNKQorc3VwcG9ydCIuCisKK09uY2UgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGlzIGxvYWRlZCBhbmQgdGhlIFVTQiBkZXZpY2UgY29ubmVjdGVkCit0byB0aGUgTGludXggaG9zdCB3aXRoIGEgVVNCIGNhYmxlLCB0aGUgaG9zdCBzeXN0ZW0gc2hvdWxkIHJlY29nbml6ZQordGhlIGdhZGdldCBzZXJpYWwgZGV2aWNlLiAgRm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kCisKKyAgY2F0IC9wcm9jL2J1cy91c2IvZGV2aWNlcworCitzaG91bGQgc2hvdyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCitUOiAgQnVzPTAxIExldj0wMSBQcm50PTAxIFBvcnQ9MDEgQ250PTAyIERldiM9ICA1IFNwZD00ODAgTXhDaD0gMAorRDogIFZlcj0gMi4wMCBDbHM9MDIoY29tbS4pIFN1Yj0wMCBQcm90PTAwIE14UFM9NjQgI0NmZ3M9ICAxCitQOiAgVmVuZG9yPTA1MjUgUHJvZElEPWE0YTcgUmV2PSAyLjAxCitTOiAgTWFudWZhY3R1cmVyPUxpbnV4IDIuNi44LjEgd2l0aCBuZXQyMjgwCitTOiAgUHJvZHVjdD1HYWRnZXQgU2VyaWFsCitTOiAgU2VyaWFsTnVtYmVyPTAKK0M6KiAjSWZzPSAyIENmZyM9IDIgQXRyPWMwIE14UHdyPSAgMm1BCitJOiAgSWYjPSAwIEFsdD0gMCAjRVBzPSAxIENscz0wMihjb21tLikgU3ViPTAyIFByb3Q9MDEgRHJpdmVyPWFjbQorRTogIEFkPTgzKEkpIEF0cj0wMyhJbnQuKSBNeFBTPSAgIDggSXZsPTMybXMKK0k6ICBJZiM9IDEgQWx0PSAwICNFUHM9IDIgQ2xzPTBhKGRhdGEgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9YWNtCitFOiAgQWQ9ODEoSSkgQXRyPTAyKEJ1bGspIE14UFM9IDUxMiBJdmw9MG1zCitFOiAgQWQ9MDIoTykgQXRyPTAyKEJ1bGspIE14UFM9IDUxMiBJdmw9MG1zCisKK0lmIHRoZSBob3N0IHNpZGUgTGludXggc3lzdGVtIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHRoZSBBQ00gZHJpdmVyCitzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuICBUaGUgY29tbWFuZCAibHNtb2QiIHNob3VsZCBzaG93IHRoZQorImFjbSIgbW9kdWxlIGlzIGxvYWRlZC4KKworCitJbnN0YWxsaW5nIHRoZSBMaW51eCBIb3N0IEdlbmVyaWMgVVNCIFNlcmlhbCBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gdXNlIHRoZSBMaW51eCBnZW5lcmljIFVTQiBzZXJpYWwgZHJpdmVyIHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGUKK0xpbnV4IGhvc3Qgc2lkZSBrZXJuZWwgZm9yICJTdXBwb3J0IGZvciBIb3N0LXNpZGUgVVNCIiwgZm9yICJVU0IKK1NlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydCIsIGFuZCBmb3IgdGhlICJVU0IgR2VuZXJpYyBTZXJpYWwgRHJpdmVyIi4KKworT25jZSB0aGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgaXMgbG9hZGVkIGFuZCB0aGUgVVNCIGRldmljZSBjb25uZWN0ZWQKK3RvIHRoZSBMaW51eCBob3N0IHdpdGggYSBVU0IgY2FibGUsIHRoZSBob3N0IHN5c3RlbSBzaG91bGQgcmVjb2duaXplCit0aGUgZ2FkZ2V0IHNlcmlhbCBkZXZpY2UuICBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQKKworICBjYXQgL3Byb2MvYnVzL3VzYi9kZXZpY2VzCisKK3Nob3VsZCBzaG93IHNvbWV0aGluZyBsaWtlIHRoaXM6CisKK1Q6ICBCdXM9MDEgTGV2PTAxIFBybnQ9MDEgUG9ydD0wMSBDbnQ9MDIgRGV2Iz0gIDYgU3BkPTQ4MCBNeENoPSAwCitEOiAgVmVyPSAyLjAwIENscz1mZih2ZW5kLikgU3ViPTAwIFByb3Q9MDAgTXhQUz02NCAjQ2Zncz0gIDEKK1A6ICBWZW5kb3I9MDUyNSBQcm9kSUQ9YTRhNiBSZXY9IDIuMDEKK1M6ICBNYW51ZmFjdHVyZXI9TGludXggMi42LjguMSB3aXRoIG5ldDIyODAKK1M6ICBQcm9kdWN0PUdhZGdldCBTZXJpYWwKK1M6ICBTZXJpYWxOdW1iZXI9MAorQzoqICNJZnM9IDEgQ2ZnIz0gMSBBdHI9YzAgTXhQd3I9ICAybUEKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDIgQ2xzPTBhKGRhdGEgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9c2VyaWFsCitFOiAgQWQ9ODEoSSkgQXRyPTAyKEJ1bGspIE14UFM9IDUxMiBJdmw9MG1zCitFOiAgQWQ9MDIoTykgQXRyPTAyKEJ1bGspIE14UFM9IDUxMiBJdmw9MG1zCisKK1lvdSBtdXN0IGV4cGxpY2l0bHkgbG9hZCB0aGUgdXNic2VyaWFsIGRyaXZlciB3aXRoIHBhcmFtZXRlcnMgdG8KK2NvbmZpZ3VyZSBpdCB0byByZWNvZ25pemUgdGhlIGdhZGdldCBzZXJpYWwgZGV2aWNlLCBsaWtlIHRoaXM6CisKKyAgbW9kcHJvYmUgdXNic2VyaWFsIHZlbmRvcj0weDA1MjUgcHJvZHVjdD0weEE0QTYKKworSWYgZXZlcnl0aGluZyBpcyB3b3JraW5nLCB1c2JzZXJpYWwgd2lsbCBwcmludCBhIG1lc3NhZ2UgaW4gdGhlCitzeXN0ZW0gbG9nIHNheWluZyBzb21ldGhpbmcgbGlrZSAiR2FkZ2V0IFNlcmlhbCBjb252ZXJ0ZXIgbm93CithdHRhY2hlZCB0byB0dHlVU0IwIi4KKworCitUZXN0aW5nIHdpdGggTWluaWNvbSBvciBIeXBlclRlcm1pbmFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPbmNlIHRoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciBhbmQgdGhlIGhvc3QgZHJpdmVyIGFyZSBib3RoIGluc3RhbGxlZCwKK2FuZCBhIFVTQiBjYWJsZSBjb25uZWN0cyB0aGUgZ2FkZ2V0IGRldmljZSB0byB0aGUgaG9zdCwgeW91IHNob3VsZAorYmUgYWJsZSB0byBjb21tdW5pY2F0ZSBvdmVyIFVTQiBiZXR3ZWVuIHRoZSBnYWRnZXQgYW5kIGhvc3Qgc3lzdGVtcy4KK1lvdSBjYW4gdXNlIG1pbmljb20gb3IgSHlwZXJUZXJtaW5hbCB0byB0cnkgdGhpcyBvdXQuCisKK09uIHRoZSBnYWRnZXQgc2lkZSBydW4gIm1pbmljb20gLXMiIHRvIGNvbmZpZ3VyZSBhIG5ldyBtaW5pY29tCitzZXNzaW9uLiAgVW5kZXIgIlNlcmlhbCBwb3J0IHNldHVwIiBzZXQgIi9kZXYvdHR5Z3NlcmlhbCIgYXMgdGhlCisiU2VyaWFsIERldmljZSIuICBTZXQgYmF1ZCByYXRlLCBkYXRhIGJpdHMsIHBhcml0eSwgYW5kIHN0b3AgYml0cywKK3RvIDk2MDAsIDgsIG5vbmUsIGFuZCAxLS10aGVzZSBzZXR0aW5ncyBtb3N0bHkgZG8gbm90IG1hdHRlci4KK1VuZGVyICJNb2RlbSBhbmQgZGlhbGluZyIgZXJhc2UgYWxsIHRoZSBtb2RlbSBhbmQgZGlhbGluZyBzdHJpbmdzLgorCitPbiBhIExpbnV4IGhvc3QgcnVubmluZyB0aGUgQUNNIGRyaXZlciwgY29uZmlndXJlIG1pbmljb20gc2ltaWxhcmx5CitidXQgdXNlICIvZGV2L3R0eUFDTTAiIGFzIHRoZSAiU2VyaWFsIERldmljZSIuICAoSWYgeW91IGhhdmUgb3RoZXIKK0FDTSBkZXZpY2VzIGNvbm5lY3RlZCwgY2hhbmdlIHRoZSBkZXZpY2UgbmFtZSBhcHByb3ByaWF0ZWx5LikKKworT24gYSBMaW51eCBob3N0IHJ1bm5pbmcgdGhlIFVTQiBnZW5lcmljIHNlcmlhbCBkcml2ZXIsIGNvbmZpZ3VyZQorbWluaWNvbSBzaW1pbGFybHksIGJ1dCB1c2UgIi9kZXYvdHR5VVNCMCIgYXMgdGhlICJTZXJpYWwgRGV2aWNlIi4KKyhJZiB5b3UgaGF2ZSBvdGhlciBVU0Igc2VyaWFsIGRldmljZXMgY29ubmVjdGVkLCBjaGFuZ2UgdGhlIGRldmljZQorbmFtZSBhcHByb3ByaWF0ZWx5LikKKworT24gYSBXaW5kb3dzIGhvc3QgY29uZmlndXJlIGEgbmV3IEh5cGVyVGVybWluYWwgc2Vzc2lvbiB0byB1c2UgdGhlCitDT00gcG9ydCBhc3NpZ25lZCB0byBHYWRnZXQgU2VyaWFsLiAgVGhlICJQb3J0IFNldHRpbmdzIiB3aWxsIGJlCitzZXQgYXV0b21hdGljYWxseSB3aGVuIEh5cGVyVGVybWluYWwgY29ubmVjdHMgdG8gdGhlIGdhZGdldCBzZXJpYWwKK2RldmljZSwgc28geW91IGNhbiBsZWF2ZSB0aGVtIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZXMtLXRoZXNlCitzZXR0aW5ncyBtb3N0bHkgZG8gbm90IG1hdHRlci4KKworV2l0aCBtaW5pY29tIGNvbmZpZ3VyZWQgYW5kIHJ1bm5pbmcgb24gdGhlIGdhZGdldCBzaWRlIGFuZCB3aXRoCittaW5pY29tIG9yIEh5cGVyVGVybWluYWwgY29uZmlndXJlZCBhbmQgcnVubmluZyBvbiB0aGUgaG9zdCBzaWRlLAoreW91IHNob3VsZCBiZSBhYmxlIHRvIHNlbmQgZGF0YSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBnYWRnZXQKK3NpZGUgYW5kIGhvc3Qgc2lkZSBzeXN0ZW1zLiAgQW55dGhpbmcgeW91IHR5cGUgb24gdGhlIHRlcm1pbmFsCit3aW5kb3cgb24gdGhlIGdhZGdldCBzaWRlIHNob3VsZCBhcHBlYXIgaW4gdGhlIHRlcm1pbmFsIHdpbmRvdyBvbgordGhlIGhvc3Qgc2lkZSBhbmQgdmljZSB2ZXJzYS4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9oaWRkZXYudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvaGlkZGV2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDZmYjRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvaGlkZGV2LnR4dApAQCAtMCwwICsxLDIwNSBAQAorQ2FyZSBhbmQgZmVlZGluZyBvZiB5b3VyIEh1bWFuIEludGVyZmFjZSBEZXZpY2VzCisKK0lOVFJPRFVDVElPTgorCitJbiBhZGRpdGlvbiB0byB0aGUgbm9ybWFsIGlucHV0IHR5cGUgSElEIGRldmljZXMsIFVTQiBhbHNvIHVzZXMgdGhlCitodW1hbiBpbnRlcmZhY2UgZGV2aWNlIHByb3RvY29scyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5vdCByZWFsbHkgaHVtYW4KK2ludGVyZmFjZXMsIGJ1dCBoYXZlIHNpbWlsYXIgc29ydHMgb2YgY29tbXVuaWNhdGlvbiBuZWVkcy4gVGhlIHR3byBiaWcKK2V4YW1wbGVzIGZvciB0aGlzIGFyZSBwb3dlciBkZXZpY2VzIChlc3BlY2lhbGx5IHVuaW50ZXJydXB0YWJsZSBwb3dlcgorc3VwcGxpZXMpIGFuZCBtb25pdG9yIGNvbnRyb2wgb24gaGlnaGVyIGVuZCBtb25pdG9ycy4KKworVG8gc3VwcG9ydCB0aGVzZSBkaXNwYXJpdGUgcmVxdWlyZW1lbnRzLCB0aGUgTGludXggVVNCIHN5c3RlbSBwcm92aWRlcworSElEIGV2ZW50cyB0byB0d28gc2VwYXJhdGUgaW50ZXJmYWNlczoKKyogdGhlIGlucHV0IHN1YnN5c3RlbSwgd2hpY2ggY29udmVydHMgSElEIGV2ZW50cyBpbnRvIG5vcm1hbCBpbnB1dAorZGV2aWNlIGludGVyZmFjZXMgKHN1Y2ggYXMga2V5Ym9hcmQsIG1vdXNlIGFuZCBqb3lzdGljaykgYW5kIGEKK25vcm1hbGlzZWQgZXZlbnQgaW50ZXJmYWNlIC0gc2VlIERvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQudHh0CisqIHRoZSBoaWRkZXYgaW50ZXJmYWNlLCB3aGljaCBwcm92aWRlcyBmYWlybHkgcmF3IEhJRCBldmVudHMKKworVGhlIGRhdGEgZmxvdyBmb3IgYSBISUQgZXZlbnQgcHJvZHVjZWQgYnkgYSBkZXZpY2UgaXMgc29tZXRoaW5nIGxpa2UKK3RoZSBmb2xsb3dpbmcgOgorCisgdXNiLmMgLS0tPiBoaWQtY29yZS5jICAtLS0tPiBoaWQtaW5wdXQuYyAtLS0tPiBba2V5Ym9hcmQvbW91c2Uvam95c3RpY2svZXZlbnRdCisgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+IGhpZGRldi5jIC0tLS0+IFBPV0VSIC8gTU9OSVRPUiBDT05UUk9MIAorCitJbiBhZGRpdGlvbiwgb3RoZXIgc3Vic3lzdGVtcyAoYXBhcnQgZnJvbSBVU0IpIGNhbiBwb3RlbnRpYWxseSBmZWVkCitldmVudHMgaW50byB0aGUgaW5wdXQgc3Vic3lzdGVtLCBidXQgdGhlc2UgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIGhpZAorZGV2aWNlIGludGVyZmFjZS4KKworVVNJTkcgVEhFIEhJRCBERVZJQ0UgSU5URVJGQUNFCisKK1RoZSBoaWRkZXYgaW50ZXJmYWNlIGlzIGEgY2hhciBpbnRlcmZhY2UgdXNpbmcgdGhlIG5vcm1hbCBVU0IgbWFqb3IsCit3aXRoIHRoZSBtaW5vciBudW1iZXJzIHN0YXJ0aW5nIGF0IDk2IGFuZCBmaW5pc2hpbmcgYXQgMTExLiBUaGVyZWZvcmUsCit5b3UgbmVlZCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorbWtub2QgL2Rldi91c2IvaGlkZGV2MCBjIDE4MCA5NgorbWtub2QgL2Rldi91c2IvaGlkZGV2MSBjIDE4MCA5NworbWtub2QgL2Rldi91c2IvaGlkZGV2MiBjIDE4MCA5OAorbWtub2QgL2Rldi91c2IvaGlkZGV2MyBjIDE4MCA5OQorbWtub2QgL2Rldi91c2IvaGlkZGV2NCBjIDE4MCAxMDAKK21rbm9kIC9kZXYvdXNiL2hpZGRldjUgYyAxODAgMTAxCitta25vZCAvZGV2L3VzYi9oaWRkZXY2IGMgMTgwIDEwMgorbWtub2QgL2Rldi91c2IvaGlkZGV2NyBjIDE4MCAxMDMKK21rbm9kIC9kZXYvdXNiL2hpZGRldjggYyAxODAgMTA0Citta25vZCAvZGV2L3VzYi9oaWRkZXY5IGMgMTgwIDEwNQorbWtub2QgL2Rldi91c2IvaGlkZGV2MTAgYyAxODAgMTA2Citta25vZCAvZGV2L3VzYi9oaWRkZXYxMSBjIDE4MCAxMDcKK21rbm9kIC9kZXYvdXNiL2hpZGRldjEyIGMgMTgwIDEwOAorbWtub2QgL2Rldi91c2IvaGlkZGV2MTMgYyAxODAgMTA5Citta25vZCAvZGV2L3VzYi9oaWRkZXYxNCBjIDE4MCAxMTAKK21rbm9kIC9kZXYvdXNiL2hpZGRldjE1IGMgMTgwIDExMQorCitTbyB5b3UgcG9pbnQgeW91ciBoaWRkZXYgY29tcGxpYW50IHVzZXItc3BhY2UgcHJvZ3JhbSBhdCB0aGUgY29ycmVjdAoraW50ZXJmYWNlIGZvciB5b3VyIGRldmljZSwgYW5kIGl0IGFsbCBqdXN0IHdvcmtzLgorCitBc3N1bWluZyB0aGF0IHlvdSBoYXZlIGEgaGlkZGV2IGNvbXBsaWFudCB1c2VyLXNwYWNlIHByb2dyYW0sIG9mCitjb3Vyc2UuIElmIHlvdSBuZWVkIHRvIHdyaXRlIG9uZSwgcmVhZCBvbi4KKworCitUSEUgSElEREVWIEFQSQorVGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBISUQKK3NwZWNpZmljYXRpb24sIGZyZWVseSBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LnVzYi5vcmcsIGFuZAorY29udmVuaWVudGx5IGxpbmtlZCBvZiBodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcuCisKK1RoZSBoaWRkZXYgQVBJIHVzZXMgYSByZWFkKCkgaW50ZXJmYWNlLCBhbmQgYSBzZXQgb2YgaW9jdGwoKSBjYWxscy4KKworSElEIGRldmljZXMgZXhjaGFuZ2UgZGF0YSB3aXRoIHRoZSBob3N0IGNvbXB1dGVyIHVzaW5nIGRhdGEKK2J1bmRsZXMgY2FsbGVkICJyZXBvcnRzIi4gIEVhY2ggcmVwb3J0IGlzIGRpdmlkZWQgaW50byAiZmllbGRzIiwKK2VhY2ggb2Ygd2hpY2ggY2FuIGhhdmUgb25lIG9yIG1vcmUgInVzYWdlcyIuICBJbiB0aGUgaGlkLWNvcmUsCitlYWNoIG9uZSBvZiB0aGVzZSB1c2FnZXMgaGFzIGEgc2luZ2xlIHNpZ25lZCAzMiBiaXQgdmFsdWUuCisKK3JlYWQoKToKK1RoaXMgaXMgdGhlIGV2ZW50IGludGVyZmFjZS4gIFdoZW4gdGhlIEhJRCBkZXZpY2UncyBzdGF0ZSBjaGFuZ2VzLAoraXQgcGVyZm9ybXMgYW4gaW50ZXJydXB0IHRyYW5zZmVyIGNvbnRhaW5pbmcgYSByZXBvcnQgd2hpY2ggY29udGFpbnMKK3RoZSBjaGFuZ2VkIHZhbHVlLiAgVGhlIGhpZC1jb3JlLmMgbW9kdWxlIHBhcnNlcyB0aGUgcmVwb3J0LCBhbmQKK3JldHVybnMgdG8gaGlkZGV2LmMgdGhlIGluZGl2aWR1YWwgdXNhZ2VzIHRoYXQgaGF2ZSBjaGFuZ2VkIHdpdGhpbgordGhlIHJlcG9ydC4gIEluIGl0cyBiYXNpYyBtb2RlLCB0aGUgaGlkZGV2IHdpbGwgbWFrZSB0aGVzZSBpbmRpdmlkdWFsCit1c2FnZSBjaGFuZ2VzIGF2YWlsYWJsZSB0byB0aGUgcmVhZGVyIHVzaW5nIGEgc3RydWN0IGhpZGRldl9ldmVudDoKKworICAgICAgIHN0cnVjdCBoaWRkZXZfZXZlbnQgeworICAgICAgICAgICB1bnNpZ25lZCBoaWQ7CisgICAgICAgICAgIHNpZ25lZCBpbnQgdmFsdWU7CisgICAgICAgfTsKKworY29udGFpbmluZyB0aGUgSElEIHVzYWdlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGF0dXMgdGhhdCBjaGFuZ2VkLCBhbmQKK3RoZSB2YWx1ZSB0aGF0IGl0IHdhcyBjaGFuZ2VkIHRvLiBOb3RlIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBkZWZpbmVkCit3aXRoaW4gPGxpbnV4L2hpZGRldi5oPiwgYWxvbmcgd2l0aCBzb21lIG90aGVyIHVzZWZ1bCAjZGVmaW5lcyBhbmQKK3N0cnVjdHVyZXMuICBUaGUgSElEIHVzYWdlIGlkZW50aWZpZXIgaXMgYSBjb21wb3NpdGUgb2YgdGhlIEhJRCB1c2FnZQorcGFnZSBzaGlmdGVkIHRvIHRoZSAxNiBoaWdoIG9yZGVyIGJpdHMgT1JlZCB3aXRoIHRoZSB1c2FnZSBjb2RlLiAgVGhlCitiZWhhdmlvciBvZiB0aGUgcmVhZCgpIGZ1bmN0aW9uIGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGUgSElESU9DU0ZMQUcKK2lvY3RsKCkgZGVzY3JpYmVkIGJlbG93LgorCisKK2lvY3RsKCk6IAorVGhpcyBpcyB0aGUgY29udHJvbCBpbnRlcmZhY2UuIFRoZXJlIGFyZSBhIG51bWJlciBvZiBjb250cm9sczogCisKK0hJRElPQ0dWRVJTSU9OIC0gaW50IChyZWFkKQorR2V0cyB0aGUgdmVyc2lvbiBjb2RlIG91dCBvZiB0aGUgaGlkZGV2IGRyaXZlci4KKworSElESU9DQVBQTElDQVRJT04gLSAobm9uZSkKK1RoaXMgaW9jdGwgY2FsbCByZXR1cm5zIHRoZSBISUQgYXBwbGljYXRpb24gdXNhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZQoraGlkIGRldmljZS4gVGhlIHRoaXJkIGFyZ3VtZW50IHRvIGlvY3RsKCkgc3BlY2lmaWVzIHdoaWNoIGFwcGxpY2F0aW9uCitpbmRleCB0byBnZXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIGRldmljZSBoYXMgbW9yZSB0aGFuIG9uZQorYXBwbGljYXRpb24gY29sbGVjdGlvbi4gSWYgdGhlIGluZGV4IGlzIGludmFsaWQgKGdyZWF0ZXIgb3IgZXF1YWwgdG8KK3RoZSBudW1iZXIgb2YgYXBwbGljYXRpb24gY29sbGVjdGlvbnMgdGhpcyBkZXZpY2UgaGFzKSB0aGUgaW9jdGwKK3JldHVybnMgLTEuIFlvdSBjYW4gZmluZCBvdXQgYmVmb3JlaGFuZCBob3cgbWFueSBhcHBsaWNhdGlvbgorY29sbGVjdGlvbnMgdGhlIGRldmljZSBoYXMgZnJvbSB0aGUgbnVtX2FwcGxpY2F0aW9ucyBmaWVsZCBmcm9tIHRoZQoraGlkZGV2X2RldmluZm8gc3RydWN0dXJlLiAKKworSElESU9DR0NPTExFQ1RJT05JTkZPIC0gc3RydWN0IGhpZGRldl9jb2xsZWN0aW9uX2luZm8gKHJlYWQvd3JpdGUpCitUaGlzIHJldHVybnMgYSBzdXBlcnNldCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdmUsIHByb3ZpZGluZyBub3Qgb25seQorYXBwbGljYXRpb24gY29sbGVjdGlvbnMsIGJ1dCBhbGwgdGhlIGNvbGxlY3Rpb25zIHRoZSBkZXZpY2UgaGFzLiAgSXQKK2Fsc28gcmV0dXJucyB0aGUgbGV2ZWwgdGhlIGNvbGxlY3Rpb24gbGl2ZXMgaW4gdGhlIGhpZXJhcmNoeS4KK1RoZSB1c2VyIHBhc3NlcyBpbiBhIGhpZGRldl9jb2xsZWN0aW9uX2luZm8gc3RydWN0IHdpdGggdGhlIGluZGV4IAorZmllbGQgc2V0IHRvIHRoZSBpbmRleCB0aGF0IHNob3VsZCBiZSByZXR1cm5lZC4gIFRoZSBpb2N0bCBmaWxscyBpbiAKK3RoZSBvdGhlciBmaWVsZHMuICBJZiB0aGUgaW5kZXggaXMgbGFyZ2VyIHRoYW4gdGhlIGxhc3QgY29sbGVjdGlvbiAKK2luZGV4LCB0aGUgaW9jdGwgcmV0dXJucyAtMSBhbmQgc2V0cyBlcnJubyB0byAtRUlOVkFMLgorCitISURJT0NHREVWSU5GTyAtIHN0cnVjdCBoaWRkZXZfZGV2aW5mbyAocmVhZCkKK0dldHMgYSBoaWRkZXZfZGV2aW5mbyBzdHJ1Y3R1cmUgd2hpY2ggZGVzY3JpYmVzIHRoZSBkZXZpY2UuCisKK0hJRElPQ0dTVFJJTkcgLSBzdHJ1Y3Qgc3RydWN0IGhpZGRldl9zdHJpbmdfZGVzY3JpcHRvciAocmVhZC93cml0ZSkKK0dldHMgYSBzdHJpbmcgZGVzY3JpcHRvciBmcm9tIHRoZSBkZXZpY2UuIFRoZSBjYWxsZXIgbXVzdCBmaWxsIGluIHRoZQorImluZGV4IiBmaWVsZCB0byBpbmRpY2F0ZSB3aGljaCBkZXNjcmlwdG9yIHNob3VsZCBiZSByZXR1cm5lZC4KKworSElESU9DSU5JVFJFUE9SVCAtIChub25lKQorSW5zdHJ1Y3RzIHRoZSBrZXJuZWwgdG8gcmV0cmlldmUgYWxsIGlucHV0IGFuZCBmZWF0dXJlIHJlcG9ydCB2YWx1ZXMKK2Zyb20gdGhlIGRldmljZS4gQXQgdGhpcyBwb2ludCwgYWxsIHRoZSB1c2FnZSBzdHJ1Y3R1cmVzIHdpbGwgY29udGFpbgorY3VycmVudCB2YWx1ZXMgZm9yIHRoZSBkZXZpY2UsIGFuZCB3aWxsIG1haW50YWluIGl0IGFzIHRoZSBkZXZpY2UKK2NoYW5nZXMuICBOb3RlIHRoYXQgdGhlIHVzZSBvZiB0aGlzIGlvY3RsIGlzIHVubmVjZXNzYXJ5IGluIGdlbmVyYWwsCitzaW5jZSBsYXRlciBrZXJuZWxzIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZSB0aGUgcmVwb3J0cyBmcm9tIHRoZQorZGV2aWNlIGF0IGF0dGFjaCB0aW1lLgorCitISURJT0NHTkFNRSAtIHN0cmluZyAodmFyaWFibGUgbGVuZ3RoKQorR2V0cyB0aGUgZGV2aWNlIG5hbWUKKworSElESU9DR1JFUE9SVCAtIHN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8gKHdyaXRlKQorSW5zdHJ1Y3RzIHRoZSBrZXJuZWwgdG8gZ2V0IGEgZmVhdHVyZSBvciBpbnB1dCByZXBvcnQgZnJvbSB0aGUgZGV2aWNlLAoraW4gb3JkZXIgdG8gc2VsZWN0aXZlbHkgdXBkYXRlIHRoZSB1c2FnZSBzdHJ1Y3R1cmVzIChpbiBjb250cmFzdCB0bworSU5JVFJFUE9SVCkuCisKK0hJRElPQ1NSRVBPUlQgLSBzdHJ1Y3QgaGlkZGV2X3JlcG9ydF9pbmZvICh3cml0ZSkKK0luc3RydWN0cyB0aGUga2VybmVsIHRvIHNlbmQgYSByZXBvcnQgdG8gdGhlIGRldmljZS4gVGhpcyByZXBvcnQgY2FuCitiZSBmaWxsZWQgaW4gYnkgdGhlIHVzZXIgdGhyb3VnaCBISURJT0NTVVNBR0UgY2FsbHMgKGJlbG93KSB0byBmaWxsIGluCitpbmRpdmlkdWFsIHVzYWdlIHZhbHVlcyBpbiB0aGUgcmVwb3J0IGJlZm9yZSBzZW5kaW5nIHRoZSByZXBvcnQgaW4gZnVsbAordG8gdGhlIGRldmljZS4gCisKK0hJRElPQ0dSRVBPUlRJTkZPIC0gc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyAocmVhZC93cml0ZSkKK0ZpbGxzIGluIGEgaGlkZGV2X3JlcG9ydF9pbmZvIHN0cnVjdHVyZSBmb3IgdGhlIHVzZXIuIFRoZSByZXBvcnQgaXMKK2xvb2tlZCB1cCBieSB0eXBlIChpbnB1dCwgb3V0cHV0IG9yIGZlYXR1cmUpIGFuZCBpZCwgc28gdGhlc2UgZmllbGRzCittdXN0IGJlIGZpbGxlZCBpbiBieSB0aGUgdXNlci4gVGhlIElEIGNhbiBiZSBhYnNvbHV0ZSAtLSB0aGUgYWN0dWFsCityZXBvcnQgaWQgYXMgcmVwb3J0ZWQgYnkgdGhlIGRldmljZSAtLSBvciByZWxhdGl2ZSAtLQorSElEX1JFUE9SVF9JRF9GSVJTVCBmb3IgdGhlIGZpcnN0IHJlcG9ydCwgYW5kIChISURfUkVQT1JUX0lEX05FWFQgfAorcmVwb3J0X2lkKSBmb3IgdGhlIG5leHQgcmVwb3J0IGFmdGVyIHJlcG9ydF9pZC4gV2l0aG91dCBhLXByaW9yaQoraW5mb3JtYXRpb24gYWJvdXQgcmVwb3J0IGlkcywgdGhlIHJpZ2h0IHdheSB0byB1c2UgdGhpcyBpb2N0bCBpcyB0bwordXNlIHRoZSByZWxhdGl2ZSBJRHMgYWJvdmUgdG8gZW51bWVyYXRlIHRoZSB2YWxpZCBJRHMuIFRoZSBpb2N0bAorcmV0dXJucyBub24temVybyB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgbmV4dCBJRC4gVGhlIHJlYWwgcmVwb3J0IElEIGlzCitmaWxsZWQgaW50byB0aGUgcmV0dXJuZWQgaGlkZGV2X3JlcG9ydF9pbmZvIHN0cnVjdHVyZS4gCisKK0hJRElPQ0dGSUVMRElORk8gLSBzdHJ1Y3QgaGlkZGV2X2ZpZWxkX2luZm8gKHJlYWQvd3JpdGUpCitSZXR1cm5zIHRoZSBmaWVsZCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSByZXBvcnQgaW4gYQoraGlkZGV2X2ZpZWxkX2luZm8gc3RydWN0dXJlLiBUaGUgdXNlciBtdXN0IGZpbGwgaW4gcmVwb3J0X2lkIGFuZAorcmVwb3J0X3R5cGUgaW4gdGhpcyBzdHJ1Y3R1cmUsIGFzIGFib3ZlLiBUaGUgZmllbGRfaW5kZXggc2hvdWxkIGFsc28KK2JlIGZpbGxlZCBpbiwgd2hpY2ggc2hvdWxkIGJlIGEgbnVtYmVyIGZyb20gMCBhbmQgbWF4ZmllbGQtMSwgYXMKK3JldHVybmVkIGZyb20gYSBwcmV2aW91cyBISURJT0NHUkVQT1JUSU5GTyBjYWxsLiAKKworSElESU9DR1VDT0RFIC0gc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKHJlYWQvd3JpdGUpCitSZXR1cm5zIHRoZSB1c2FnZV9jb2RlIGluIGEgaGlkZGV2X3VzYWdlX3JlZiBzdHJ1Y3R1cmUsIGdpdmVuIHRoYXQKK2dpdmVuIGl0cyByZXBvcnQgdHlwZSwgcmVwb3J0IGlkLCBmaWVsZCBpbmRleCwgYW5kIGluZGV4IHdpdGhpbiB0aGUKK2ZpZWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZpbGxlZCBpbnRvIHRoZSBzdHJ1Y3R1cmUuCisKK0hJRElPQ0dVU0FHRSAtIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmIChyZWFkL3dyaXRlKQorUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB1c2FnZSBpbiBhIGhpZGRldl91c2FnZV9yZWYgc3RydWN0dXJlLiBUaGUKK3VzYWdlIHRvIGJlIHJldHJpZXZlZCBjYW4gYmUgc3BlY2lmaWVkIGFzIGFib3ZlLCBvciB0aGUgdXNlciBjYW4KK2Nob29zZSB0byBmaWxsIGluIHRoZSByZXBvcnRfdHlwZSBmaWVsZCBhbmQgc3BlY2lmeSB0aGUgcmVwb3J0X2lkIGFzCitISURfUkVQT1JUX0lEX1VOS05PV04uIEluIHRoaXMgY2FzZSwgdGhlIGhpZGRldl91c2FnZV9yZWYgd2lsbCBiZQorZmlsbGVkIGluIHdpdGggdGhlIHJlcG9ydCBhbmQgZmllbGQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMKK3VzYWdlIGlmIGl0IGlzIGZvdW5kLiAKKworSElESU9DU1VTQUdFIC0gc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKHdyaXRlKQorU2V0cyB0aGUgdmFsdWUgb2YgYSB1c2FnZSBpbiBhbiBvdXRwdXQgcmVwb3J0LiAgVGhlIHVzZXIgZmlsbHMgaW4KK3RoZSBoaWRkZXZfdXNhZ2VfcmVmIHN0cnVjdHVyZSBhcyBhYm92ZSwgYnV0IGFkZGl0aW9uYWxseSBmaWxscyBpbgordGhlIHZhbHVlIGZpZWxkLgorCitISURJT0dDT0xMRUNUSU9OSU5ERVggLSBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiAod3JpdGUpCitSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIGluZGV4IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHVzYWdlLiAgVGhpcworaW5kaWNhdGVzIHdoZXJlIGluIHRoZSBjb2xsZWN0aW9uIGhpZXJhcmNoeSB0aGlzIHVzYWdlIHNpdHMuCisKK0hJRElPQ0dGTEFHIC0gaW50IChyZWFkKQorSElESU9DU0ZMQUcgLSBpbnQgKHdyaXRlKQorVGhlc2Ugb3BlcmF0aW9ucyByZXNwZWN0aXZlbHkgaW5zcGVjdCBhbmQgcmVwbGFjZSB0aGUgbW9kZSBmbGFncwordGhhdCBpbmZsdWVuY2UgdGhlIHJlYWQoKSBjYWxsIGFib3ZlLiAgVGhlIGZsYWdzIGFyZSBhcyBmb2xsb3dzOgorCisgICAgSElEREVWX0ZMQUdfVVJFRiAtIHJlYWQoKSBjYWxscyB3aWxsIG5vdyByZXR1cm4gCisgICAgICAgIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmIGluc3RlYWQgb2Ygc3RydWN0IGhpZGRldl9ldmVudC4KKyAgICAgICAgVGhpcyBpcyBhIGxhcmdlciBzdHJ1Y3R1cmUsIGJ1dCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZQorICAgICAgICBkZXZpY2UgaGFzIG1vcmUgdGhhbiBvbmUgdXNhZ2UgaW4gaXRzIHJlcG9ydHMgd2l0aCB0aGUKKyAgICAgICAgc2FtZSB1c2FnZSBjb2RlLCB0aGlzIG1vZGUgc2VydmVzIHRvIHJlc29sdmUgc3VjaAorICAgICAgICBhbWJpZ3VpdHkuCisKKyAgICBISURERVZfRkxBR19SRVBPUlQgLSBUaGlzIGZsYWcgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbgorICAgICAgICB3aXRoIEhJRERFVl9GTEFHX1VSRUYuICBXaXRoIHRoaXMgZmxhZyBzZXQsIHdoZW4gdGhlIGRldmljZQorICAgICAgICBzZW5kcyBhIHJlcG9ydCwgYSBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiB3aWxsIGJlIHJldHVybmVkCisgICAgICAgIHRvIHJlYWQoKSBmaWxsZWQgaW4gd2l0aCB0aGUgcmVwb3J0X3R5cGUgYW5kIHJlcG9ydF9pZCwgYnV0IAorICAgICAgICB3aXRoIGZpZWxkX2luZGV4IHNldCB0byBGSUVMRF9JTkRFWF9OT05FLiAgVGhpcyBzZXJ2ZXMgYXMKKyAgICAgICAgYWRkaXRpb25hbCBub3RpZmljYXRpb24gd2hlbiB0aGUgZGV2aWNlIGhhcyBzZW50IGEgcmVwb3J0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvaG90cGx1Zy50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9ob3RwbHVnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMxNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvaG90cGx1Zy50eHQKQEAgLTAsMCArMSwxNDggQEAKK0xJTlVYIEhPVFBMVUdHSU5HCisKK0luIGhvdHBsdWdnYWJsZSBidXNzZXMgbGlrZSBVU0IgKGFuZCBDYXJkYnVzIFBDSSksIGVuZC11c2VycyBwbHVnIGRldmljZXMKK2ludG8gdGhlIGJ1cyB3aXRoIHBvd2VyIG9uLiAgSW4gbW9zdCBjYXNlcywgdXNlcnMgZXhwZWN0IHRoZSBkZXZpY2VzIHRvIGJlY29tZQoraW1tZWRpYXRlbHkgdXNhYmxlLiAgVGhhdCBtZWFucyB0aGUgc3lzdGVtIG11c3QgZG8gbWFueSB0aGluZ3MsIGluY2x1ZGluZzoKKworICAgIC0gRmluZCBhIGRyaXZlciB0aGF0IGNhbiBoYW5kbGUgdGhlIGRldmljZS4gIFRoYXQgbWF5IGludm9sdmUKKyAgICAgIGxvYWRpbmcgYSBrZXJuZWwgbW9kdWxlOyBuZXdlciBkcml2ZXJzIGNhbiB1c2UgbW9kdWxlLWluaXQtdG9vbHMKKyAgICAgIHRvIHB1Ymxpc2ggdGhlaXIgZGV2aWNlIChhbmQgY2xhc3MpIHN1cHBvcnQgdG8gdXNlciB1dGlsaXRpZXMuCisKKyAgICAtIEJpbmQgYSBkcml2ZXIgdG8gdGhhdCBkZXZpY2UuICBCdXMgZnJhbWV3b3JrcyBkbyB0aGF0IHVzaW5nIGEKKyAgICAgIGRldmljZSBkcml2ZXIncyBwcm9iZSgpIHJvdXRpbmUuCisgICAgCisgICAgLSBUZWxsIG90aGVyIHN1YnN5c3RlbXMgdG8gY29uZmlndXJlIHRoZSBuZXcgZGV2aWNlLiAgUHJpbnQKKyAgICAgIHF1ZXVlcyBtYXkgbmVlZCB0byBiZSBlbmFibGVkLCBuZXR3b3JrcyBicm91Z2h0IHVwLCBkaXNrCisgICAgICBwYXJ0aXRpb25zIG1vdW50ZWQsIGFuZCBzbyBvbi4gIEluIHNvbWUgY2FzZXMgdGhlc2Ugd2lsbAorICAgICAgYmUgZHJpdmVyLXNwZWNpZmljIGFjdGlvbnMuCisKK1RoaXMgaW52b2x2ZXMgYSBtaXggb2Yga2VybmVsIG1vZGUgYW5kIHVzZXIgbW9kZSBhY3Rpb25zLiAgTWFraW5nIGRldmljZXMKK2JlIGltbWVkaWF0ZWx5IHVzYWJsZSBtZWFucyB0aGF0IGFueSB1c2VyIG1vZGUgYWN0aW9ucyBjYW4ndCB3YWl0IGZvciBhbgorYWRtaW5pc3RyYXRvciB0byBkbyB0aGVtOiAgdGhlIGtlcm5lbCBtdXN0IHRyaWdnZXIgdGhlbSwgZWl0aGVyIHBhc3NpdmVseQorKHRyaWdnZXJpbmcgc29tZSBtb25pdG9yaW5nIGRhZW1vbiB0byBpbnZva2UgYSBoZWxwZXIgcHJvZ3JhbSkgb3IKK2FjdGl2ZWx5IChjYWxsaW5nIHN1Y2ggYSB1c2VyIG1vZGUgaGVscGVyIHByb2dyYW0gZGlyZWN0bHkpLgorCitUaG9zZSB0cmlnZ2VyZWQgYWN0aW9ucyBtdXN0IHN1cHBvcnQgYSBzeXN0ZW0ncyBhZG1pbmlzdHJhdGl2ZSBwb2xpY2llczsKK3N1Y2ggcHJvZ3JhbXMgYXJlIGNhbGxlZCAicG9saWN5IGFnZW50cyIgaGVyZS4gIFR5cGljYWxseSB0aGV5IGludm9sdmUKK3NoZWxsIHNjcmlwdHMgdGhhdCBkaXNwYXRjaCB0byBtb3JlIGZhbWlsaWFyIGFkbWluaXN0cmF0aW9uIHRvb2xzLgorCitCZWNhdXNlIHNvbWUgb2YgdGhvc2UgYWN0aW9ucyByZWx5IG9uIGluZm9ybWF0aW9uIGFib3V0IGRyaXZlcnMgKG1ldGFkYXRhKQordGhhdCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIG9ubHkgd2hlbiB0aGUgZHJpdmVycyBhcmUgZHluYW1pY2FsbHkgbGlua2VkLAoreW91IGdldCB0aGUgYmVzdCBob3RwbHVnZ2luZyB3aGVuIHlvdSBjb25maWd1cmUgYSBoaWdobHkgbW9kdWxhciBzeXN0ZW0uCisKKworS0VSTkVMIEhPVFBMVUcgSEVMUEVSICgvc2Jpbi9ob3RwbHVnKQorCitXaGVuIHlvdSBjb21waWxlIHdpdGggQ09ORklHX0hPVFBMVUcsIHlvdSBnZXQgYSBuZXcga2VybmVsIHBhcmFtZXRlcjoKKy9wcm9jL3N5cy9rZXJuZWwvaG90cGx1Zywgd2hpY2ggbm9ybWFsbHkgaG9sZHMgdGhlIHBhdGhuYW1lICIvc2Jpbi9ob3RwbHVnIi4KK1RoYXQgcGFyYW1ldGVyIG5hbWVzIGEgcHJvZ3JhbSB3aGljaCB0aGUga2VybmVsIG1heSBpbnZva2UgYXQgdmFyaW91cyB0aW1lcy4KKworVGhlIC9zYmluL2hvdHBsdWcgcHJvZ3JhbSBjYW4gYmUgaW52b2tlZCBieSBhbnkgc3Vic3lzdGVtIGFzIHBhcnQgb2YgaXRzCityZWFjdGlvbiB0byBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBmcm9tIGEgdGhyZWFkIGluIHRoYXQgc3Vic3lzdGVtLgorT25seSBvbmUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkOiB0aGUgbmFtZSBvZiBhIHN1YnN5c3RlbSBiZWluZyBub3RpZmllZCBvZgorc29tZSBrZXJuZWwgZXZlbnQuICBUaGF0IG5hbWUgaXMgdXNlZCBhcyB0aGUgZmlyc3Qga2V5IGZvciBmdXJ0aGVyIGV2ZW50CitkaXNwYXRjaDsgYW55IG90aGVyIGFyZ3VtZW50IGFuZCBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQgYnkKK3RoZSBzdWJzeXN0ZW0gbWFraW5nIHRoYXQgaW52b2NhdGlvbi4KKworSG90cGx1ZyBzb2Z0d2FyZSBhbmQgb3RoZXIgcmVzb3VyY2VzIGlzIGF2YWlsYWJsZSBhdDoKKworCWh0dHA6Ly9saW51eC1ob3RwbHVnLnNvdXJjZWZvcmdlLm5ldAorCitNYWlsaW5nIGxpc3QgaW5mb3JtYXRpb24gaXMgYWxzbyBhdmFpbGFibGUgYXQgdGhhdCBzaXRlLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworVVNCIFBPTElDWSBBR0VOVAorCitUaGUgVVNCIHN1YnN5c3RlbSBjdXJyZW50bHkgaW52b2tlcyAvc2Jpbi9ob3RwbHVnIHdoZW4gVVNCIGRldmljZXMKK2FyZSBhZGRlZCBvciByZW1vdmVkIGZyb20gc3lzdGVtLiAgVGhlIGludm9jYXRpb24gaXMgZG9uZSBieSB0aGUga2VybmVsCitodWIgZGFlbW9uIHRocmVhZCBba2h1YmRdLCBvciBlbHNlIGFzIHBhcnQgb2Ygcm9vdCBodWIgaW5pdGlhbGl6YXRpb24KKyhkb25lIGJ5IGluaXQsIG1vZHByb2JlLCBrYXBtZCwgZXRjKS4gIEl0cyBzaW5nbGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcgoraXMgdGhlIHN0cmluZyAidXNiIiwgYW5kIGl0IHBhc3NlcyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisKKyAgICBBQ1RJT04gLi4uICJhZGQiLCAicmVtb3ZlIgorICAgIFBST0RVQ1QgLi4uIFVTQiB2ZW5kb3IsIHByb2R1Y3QsIGFuZCB2ZXJzaW9uIGNvZGVzIChoZXgpCisgICAgVFlQRSAuLi4gZGV2aWNlIGNsYXNzIGNvZGVzIChkZWNpbWFsKQorICAgIElOVEVSRkFDRSAuLi4gaW50ZXJmYWNlIDAgY2xhc3MgY29kZXMgKGRlY2ltYWwpCisKK0lmICJ1c2JkZXZmcyIgaXMgY29uZmlndXJlZCwgREVWSUNFIGFuZCBERVZGUyBhcmUgYWxzbyBwYXNzZWQuICBERVZJQ0UgaXMKK3RoZSBwYXRobmFtZSBvZiB0aGUgZGV2aWNlLCBhbmQgaXMgdXNlZnVsIGZvciBkZXZpY2VzIHdpdGggbXVsdGlwbGUgYW5kL29yCithbHRlcm5hdGUgaW50ZXJmYWNlcyB0aGF0IGNvbXBsaWNhdGUgZHJpdmVyIHNlbGVjdGlvbi4gIEJ5IGRlc2lnbiwgVVNCCitob3RwbHVnZ2luZyBpcyBpbmRlcGVuZGVudCBvZiAidXNiZGV2ZnMiOiAgeW91IGNhbiBkbyBtb3N0IGVzc2VudGlhbCBwYXJ0cworb2YgVVNCIGRldmljZSBzZXR1cCB3aXRob3V0IHVzaW5nIHRoYXQgZmlsZXN5c3RlbSwgYW5kIHdpdGhvdXQgcnVubmluZyBhCit1c2VyIG1vZGUgZGFlbW9uIHRvIGRldGVjdCBjaGFuZ2VzIGluIHN5c3RlbSBjb25maWd1cmF0aW9uLgorCitDdXJyZW50bHkgYXZhaWxhYmxlIHBvbGljeSBhZ2VudCBpbXBsZW1lbnRhdGlvbnMgY2FuIGxvYWQgZHJpdmVycyBmb3IKK21vZHVsZXMsIGFuZCBjYW4gaW52b2tlIGRyaXZlci1zcGVjaWZpYyBzZXR1cCBzY3JpcHRzLiAgVGhlIG5ld2VzdCBvbmVzCitsZXZlcmFnZSBVU0IgbW9kdWxlLWluaXQtdG9vbHMgc3VwcG9ydC4gIExhdGVyIGFnZW50cyBtaWdodCB1bmxvYWQgZHJpdmVycy4KKworCitVU0IgTU9EVVRJTFMgU1VQUE9SVAorCitDdXJyZW50IHZlcnNpb25zIG9mIG1vZHVsZS1pbml0LXRvb2xzIHdpbGwgY3JlYXRlIGEgIm1vZHVsZXMudXNibWFwIiBmaWxlCit3aGljaCBjb250YWlucyB0aGUgZW50cmllcyBmcm9tIGVhY2ggZHJpdmVyJ3MgTU9EVUxFX0RFVklDRV9UQUJMRS4gIFN1Y2gKK2ZpbGVzIGNhbiBiZSB1c2VkIGJ5IHZhcmlvdXMgdXNlciBtb2RlIHBvbGljeSBhZ2VudHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUKK3JpZ2h0IGRyaXZlciBtb2R1bGVzIGdldCBsb2FkZWQsIGVpdGhlciBhdCBib290IHRpbWUgb3IgbGF0ZXIuIAorCitTZWUgPGxpbnV4L3VzYi5oPiBmb3IgZnVsbCBpbmZvcm1hdGlvbiBhYm91dCBzdWNoIHRhYmxlIGVudHJpZXM7IG9yIGxvb2sKK2F0IGV4aXN0aW5nIGRyaXZlcnMuICBFYWNoIHRhYmxlIGVudHJ5IGRlc2NyaWJlcyBvbmUgb3IgbW9yZSBjcml0ZXJpYSB0bworYmUgdXNlZCB3aGVuIG1hdGNoaW5nIGEgZHJpdmVyIHRvIGEgZGV2aWNlIG9yIGNsYXNzIG9mIGRldmljZXMuICBUaGUKK3NwZWNpZmljIGNyaXRlcmlhIGFyZSBpZGVudGlmaWVkIGJ5IGJpdHMgc2V0IGluICJtYXRjaF9mbGFncyIsIHBhaXJlZAord2l0aCBmaWVsZCB2YWx1ZXMuICBZb3UgY2FuIGNvbnN0cnVjdCB0aGUgY3JpdGVyaWEgZGlyZWN0bHksIG9yIHdpdGgKK21hY3JvcyBzdWNoIGFzIHRoZXNlLCBhbmQgdXNlIGRyaXZlcl9pbmZvIHRvIHN0b3JlIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICBVU0JfREVWSUNFICh2ZW5kb3JJZCwgcHJvZHVjdElkKQorCS4uLiBtYXRjaGluZyBkZXZpY2VzIHdpdGggc3BlY2lmaWVkIHZlbmRvciBhbmQgcHJvZHVjdCBpZHMKKyAgICBVU0JfREVWSUNFX1ZFUiAodmVuZG9ySWQsIHByb2R1Y3RJZCwgbG8sIGhpKQorCS4uLiBsaWtlIFVTQl9ERVZJQ0Ugd2l0aCBsbyA8PSBwcm9kdWN0dmVyc2lvbiA8PSBoaQorICAgIFVTQl9JTlRFUkZBQ0VfSU5GTyAoY2xhc3MsIHN1YmNsYXNzLCBwcm90b2NvbCkKKwkuLi4gbWF0Y2hpbmcgc3BlY2lmaWVkIGludGVyZmFjZSBjbGFzcyBpbmZvCisgICAgVVNCX0RFVklDRV9JTkZPIChjbGFzcywgc3ViY2xhc3MsIHByb3RvY29sKQorCS4uLiBtYXRjaGluZyBzcGVjaWZpZWQgZGV2aWNlIGNsYXNzIGluZm8KKworQSBzaG9ydCBleGFtcGxlLCBmb3IgYSBkcml2ZXIgdGhhdCBzdXBwb3J0cyBzZXZlcmFsIHNwZWNpZmljIFVTQiBkZXZpY2VzCithbmQgdGhlaXIgcXVpcmtzLCBtaWdodCBoYXZlIGEgTU9EVUxFX0RFVklDRV9UQUJMRSBsaWtlIHRoaXM6CisKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbXlkcml2ZXJfaWRfdGFibGUgPSB7CisJeyBVU0JfREVWSUNFICgweDk5OTksIDB4YWFhYSksIGRyaXZlcl9pbmZvOiBRVUlSS19YIH0sCisJeyBVU0JfREVWSUNFICgweGJiYmIsIDB4ODg4OCksIGRyaXZlcl9pbmZvOiBRVUlSS19ZfFFVSVJLX1ogfSwKKwkuLi4KKwl7IH0gLyogZW5kIHdpdGggYW4gYWxsLXplcm9lcyBlbnRyeSAqLworICAgIH0KKyAgICBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIG15ZHJpdmVyX2lkX3RhYmxlKTsKKworTW9zdCBVU0IgZGV2aWNlIGRyaXZlcnMgc2hvdWxkIHBhc3MgdGhlc2UgdGFibGVzIHRvIHRoZSBVU0Igc3Vic3lzdGVtIGFzCit3ZWxsIGFzIHRvIHRoZSBtb2R1bGUgbWFuYWdlbWVudCBzdWJzeXN0ZW0uICBOb3QgYWxsLCB0aG91Z2g6IHNvbWUgZHJpdmVyCitmcmFtZXdvcmtzIGNvbm5lY3QgdXNpbmcgaW50ZXJmYWNlcyBsYXllcmVkIG92ZXIgVVNCLCBhbmQgc28gdGhleSB3b24ndAorbmVlZCBzdWNoIGEgInN0cnVjdCB1c2JfZHJpdmVyIi4KKworRHJpdmVycyB0aGF0IGNvbm5lY3QgZGlyZWN0bHkgdG8gdGhlIFVTQiBzdWJzeXN0ZW0gc2hvdWxkIGJlIGRlY2xhcmVkCitzb21ldGhpbmcgbGlrZSB0aGlzOgorCisgICAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG15ZHJpdmVyID0geworCS5uYW1lCQk9ICJteWRyaXZlciIsCisJLmlkX3RhYmxlCT0gbXlkcml2ZXJfaWRfdGFibGUsCisJLnByb2JlCQk9IG15X3Byb2JlLAorCS5kaXNjb25uZWN0CT0gbXlfZGlzY29ubmVjdCwKKworCS8qCisJaWYgdXNpbmcgdGhlIHVzYiBjaGFyZGV2IGZyYW1ld29yazoKKwkgICAgLm1pbm9yCQk9IE1ZX1VTQl9NSU5PUl9TVEFSVCwKKwkgICAgLmZvcHMJCT0gbXlfZmlsZV9vcHMsCisJaWYgZXhwb3NpbmcgYW55IG9wZXJhdGlvbnMgdGhyb3VnaCB1c2JkZXZmczoKKwkgICAgLmlvY3RsCQk9IG15X2lvY3RsLAorCSovCisgICAgfQorCitXaGVuIHRoZSBVU0Igc3Vic3lzdGVtIGtub3dzIGFib3V0IGEgZHJpdmVyJ3MgZGV2aWNlIElEIHRhYmxlLCBpdCdzIHVzZWQgd2hlbgorY2hvb3NpbmcgZHJpdmVycyB0byBwcm9iZSgpLiAgVGhlIHRocmVhZCBkb2luZyBuZXcgZGV2aWNlIHByb2Nlc3NpbmcgY2hlY2tzCitkcml2ZXJzJyBkZXZpY2UgSUQgZW50cmllcyBmcm9tIHRoZSBNT0RVTEVfREVWSUNFX1RBQkxFIGFnYWluc3QgaW50ZXJmYWNlIGFuZAorZGV2aWNlIGRlc2NyaXB0b3JzIGZvciB0aGUgZGV2aWNlLiAgSXQgd2lsbCBvbmx5IGNhbGwgcHJvYmUoKSBpZiB0aGVyZSBpcyBhCittYXRjaCwgYW5kIHRoZSB0aGlyZCBhcmd1bWVudCB0byBwcm9iZSgpIHdpbGwgYmUgdGhlIGVudHJ5IHRoYXQgbWF0Y2hlZC4KKworSWYgeW91IGRvbid0IHByb3ZpZGUgYW4gaWRfdGFibGUgZm9yIHlvdXIgZHJpdmVyLCB0aGVuIHlvdXIgZHJpdmVyIG1heSBnZXQKK3Byb2JlZCBmb3IgZWFjaCBuZXcgZGV2aWNlOyB0aGUgdGhpcmQgcGFyYW1ldGVyIHRvIHByb2JlKCkgd2lsbCBiZSBudWxsLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2libWNhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmYyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0CkBAIC0wLDAgKzEsMzI0IEBACitSRUFETUUgZm9yIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIHRoZSBJQk0gIkMtSXQiIFVTQiB2aWRlbyBjYW1lcmEKKworSU5UUk9EVUNUSU9OOgorCitUaGlzIGRyaXZlciBkb2VzIG5vdCB1c2UgYWxsIGZlYXR1cmVzIGtub3duIHRvIGV4aXN0IGluCit0aGUgSUJNIGNhbWVyYS4gSG93ZXZlciBtb3N0IG9mIG5lZWRlZCBmZWF0dXJlcyB3b3JrIHdlbGwuCisKK1RoaXMgZHJpdmVyIHdhcyBkZXZlbG9wZWQgdXNpbmcgbG9ncyBvZiBvYnNlcnZlZCBVU0IgdHJhZmZpYword2hpY2ggd2FzIHByb2R1Y2VkIGJ5IHN0YW5kYXJkIFdpbmRvd3MgZHJpdmVyIChjLWl0OTguc3lzKS4KK0kgZGlkIG5vdCBoYXZlIGRhdGEgc2hlZXRzIGZyb20gWGlybGluay4KKworVmlkZW8gZm9ybWF0czoKKyAgICAgIDEyOHg5NiAgW21vZGVsIDFdCisgICAgICAxNzZ4MTQ0CisgICAgICAzMjB4MjQwIFttb2RlbCAyXQorICAgICAgMzUyeDI0MCBbbW9kZWwgMl0KKyAgICAgIDM1MngyODgKK0ZyYW1lIHJhdGU6IDMgLSAzMCBmcmFtZXMgcGVyIHNlY29uZCAoRlBTKQorRXh0ZXJuYWwgaW50ZXJmYWNlOiBVU0IKK0ludGVybmFsIGludGVyZmFjZTogVmlkZW8gRm9yIExpbnV4IChWNEwpCitTdXBwb3J0ZWQgY29udHJvbHM6CistIGJ5IFY0TDogQ29udHJhc3QsICBCcmlnaHRuZXNzLCBDb2xvciwgSHVlCistIGJ5IGRyaXZlciBvcHRpb25zOiBmcmFtZSByYXRlLCBsaWdodGluZyBjb25kaXRpb25zLCB2aWRlbyBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHBpY3R1cmUgc2V0dGluZ3MsIHNoYXJwbmVzcy4KKworU1VQUE9SVEVEIENBTUVSQVM6CisKK1hpcmxpbmsgIkMtSXQiIGNhbWVyYSwgYWxzbyBrbm93biBhcyAiSUJNIFBDIENhbWVyYSIuCitUaGUgZGV2aWNlIHVzZXMgcHJvcHJpZXRhcnkgQVNJQyAoYW5kIGNvbXByZXNzaW9uIG1ldGhvZCk7CitpdCBpcyBtYW51ZmFjdHVyZWQgYnkgWGlybGluay4gU2VlIGh0dHA6Ly93d3cueGlybGluay5jb20vCitodHRwOi8vd3d3LmlibXBjY2FtZXJhLmNvbSBvciBodHRwOi8vd3d3LmMtaXRub3cuY29tLyBmb3IKK2RldGFpbHMgYW5kIHBpY3R1cmVzLgorCitUaGlzIHZlcnkgY2hpcHNldCAoIlggQ2hpcCIsIGFzIG1hcmtlZCBhdCB0aGUgZmFjdG9yeSkKK2lzIHVzZWQgaW4gc2V2ZXJhbCBvdGhlciBjYW1lcmFzLCBhbmQgdGhleSBhcmUgc3VwcG9ydGVkCithcyB3ZWxsOgorCistIElCTSBOZXRDYW1lcmEKKy0gVmVvIFN0aW5ncmF5CisKK1RoZSBMaW51eCBkcml2ZXIgd2FzIGRldmVsb3BlZCB3aXRoIGNhbWVyYSB3aXRoIGZvbGxvd2luZworbW9kZWwgbnVtYmVyIChvciBGQ0MgSUQpOiBLU1gtWFZQNTEwLiBUaGlzIGNhbWVyYSBoYXMgdGhyZWUKK2ludGVyZmFjZXMsIGVhY2ggd2l0aCBvbmUgZW5kcG9pbnQgKGNvbnRyb2wsIGlzbywgaXNvKS4gVGhpcwordHlwZSBvZiBjYW1lcmFzIGlzIHJlZmVycmVkIHRvIGFzICJtb2RlbCAxIi4gVGhlc2UgY2FtZXJhcyBhcmUKK25vIGxvbmdlciBtYW51ZmFjdHVyZWQuCisKK1hpcmxpbmsgbm93IG1hbnVmYWN0dXJlcyBuZXcgY2FtZXJhcyB3aGljaCBhcmUgc29tZXdoYXQgZGlmZmVyZW50LgorSW4gcGFydGljdWxhciwgZm9sbG93aW5nIG1vZGVscyBbRkNDIElEXSBiZWxvbmcgdG8gdGhhdCBjYXRlZ29yeToKKworWFZQMzAwIFtLU1gtWDk5MDNdCitYVlA2MDAgW0tTWC1YOTkwMl0KK1hWUDYxMCBbS1NYLVg5OTAyXQorCisoc2VlIGh0dHA6Ly93d3cueGlybGluay5jb20vaWJtcGNjYW1lcmEvIGZvciB1cGRhdGVzLCB0aGV5IHJlZmVyCit0byB0aGVzZSBuZXcgY2FtZXJhcyBieSBXaW5kb3dzIGRyaXZlciBkYXRlZCAxMi0yNy05OSwgdjMwMDUgQkVUQSkKK1RoZXNlIGNhbWVyYXMgaGF2ZSB0d28gaW50ZXJmYWNlcywgb25lIGVuZHBvaW50IGluIGVhY2ggKGlzbywgYnVsaykuCitTdWNoIHR5cGUgb2YgY2FtZXJhcyBpcyByZWZlcnJlZCB0byBhcyAibW9kZWwgMiIuIFRoZXkgYXJlIHN1cHBvcnRlZAorKHdpdGggZXhjZXB0aW9uIG9mIDM1MngyODggbmF0aXZlIG1vZGUpLgorCitTb21lIElCTSBOZXRDYW1lcmFzIChNb2RlbCA0KSBhcmUgbWFkZSB0byBnZW5lcmF0ZSBvbmx5IGNvbXByZXNzZWQKK3ZpZGVvIHN0cmVhbXMuIFRoaXMgaXMgZ3JlYXQgZm9yIHBlcmZvcm1hbmNlLCBidXQgdW5mb3J0dW5hdGVseQorbm9ib2R5IGtub3dzIGhvdyB0byBkZWNvbXByZXNzIHRoZSBzdHJlYW0gOi0oIFRoZXJlZm9yZSwgdGhlc2UKK2NhbWVyYXMgYXJlICp1bnN1cHBvcnRlZCogYW5kIGlmIHlvdSB0cnkgdG8gdXNlIG9uZSBvZiB0aG9zZSwgYWxsCit5b3UgZ2V0IGlzIHJhbmRvbSBjb2xvcmVkIGhvcml6b250YWwgc3RyZWFrcywgbm90IHRoZSBpbWFnZSEKK0lmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSBjYW1lcmFzLCB5b3UgcHJvYmFibHkgc2hvdWxkIHJldHVybiBpdAordG8gdGhlIHN0b3JlIGFuZCBnZXQgc29tZXRoaW5nIHRoYXQgaXMgc3VwcG9ydGVkLgorCitUZWxsIG1lIG1vcmUgYWJvdXQgYWxsIHRoYXQgIm1vZGVsIiBidXNpbmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSSBqdXN0IGludmVudGVkIG1vZGVsIG51bWJlcnMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgZmxhdm9ycyBvZiB0aGUKK2hhcmR3YXJlL2Zpcm13YXJlIHRoYXQgd2VyZSBzb2xkLiBJdCB3YXMgdmVyeSBjb25mdXNpbmcgdG8gdXNlCiticmFuZCBuYW1lcyBvciBzb21lIG90aGVyIGludGVybmFsIG51bWJlcmluZyBzY2hlbWVzLiBTbyBJIGZvdW5kCitieSBleHBlcmltZW50YXRpb24gdGhhdCBhbGwgWGlybGluayBjaGlwc2V0cyBmYWxsIGludG8gZm91ciBiaWcKK2NsYXNzZXMsIGFuZCBJIGNhbGxlZCB0aGVtICJtb2RlbHMiLiBFYWNoIG1vZGVsIGlzIHByb2dyYW1tZWQgaW4KK2l0cyBvd24gd2F5LCBhbmQgZWFjaCBtb2RlbCBzZW5kcyBiYWNrIHRoZSB2aWRlbyBpbiBpdHMgb3duIHdheS4KKworUXVpcmtzIG9mIE1vZGVsIDIgY2FtZXJhczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9kZWwgMiBkb2VzIG5vdCBoYXZlIGhhcmR3YXJlIGNvbnRyYXN0IGNvbnRyb2wuIENvcnJlc3BvbmRpbmcgVjRMCitjb250cm9sIGlzIGltcGxlbWVudGVkIGluIHNvZnR3YXJlLCB3aGljaCBpcyBub3QgdmVyeSBuaWNlIHRvIHlvdXIKK0NQVSwgYnV0IGF0IGxlYXN0IGl0IHdvcmtzLgorCitUaGlzIGRyaXZlciBwcm92aWRlcyAzNTJ4Mjg4IG1vZGUgYnkgc3dpdGNoaW5nIHRoZSBjYW1lcmEgaW50bworcXVhc2ktMzUyeDI4OCBSR0IgbW9kZSAoODAwIEtiaXRzIHBlciBmcmFtZSkgZXNzZW50aWFsbHkgbGltaXRpbmcKK3RoaXMgbW9kZSB0byAxMCBmcmFtZXMgcGVyIHNlY29uZCBvciBsZXNzLCBpbiBpZGVhbCBjb25kaXRpb25zIG9uCit0aGUgYnVzIChVU0IgaXMgc2hhcmVkLCBhZnRlciBhbGwpLiBUaGUgZnJhbWUgcmF0ZQoraGFzIHRvIGJlIHByb2dyYW1tZWQgdmVyeSBjb25zZXJ2YXRpdmVseS4gQWRkaXRpb25hbCBjb25jZXJuIGlzIHRoYXQKK2ZyYW1lIHJhdGUgZGVwZW5kcyBvbiBicmlnaHRuZXNzIHNldHRpbmc7IHRoZXJlZm9yZSB0aGUgcGljdHVyZSBjYW4KK2JlIGdvb2QgYXQgb25lIGJyaWdodG5lc3MgYW5kIGJyb2tlbiBhdCBhbm90aGVyISBJIGRpZCBub3Qgd2FudCB0byBmaXgKK3RoZSBmcmFtZSByYXRlIGF0IHNsb3dlc3Qgc2V0dGluZywgYnV0IEkgaGFkIHRvIG1vdmUgaXQgcHJldHR5IG11Y2ggZG93bgordGhlIHNjYWxlIChzbyB0aGF0IGZyYW1lcmF0ZSBvcHRpb24gYmFyZWx5IG1hdHRlcnMpLiBJIGFsc28gbm90aWNlZCB0aGF0CitjYW1lcmEgYWZ0ZXIgZmlyc3QgcG93ZXJpbmcgdXAgcHJvZHVjZXMgZnJhbWVzIHNsaWdodGx5IGZhc3RlciB0aGFuIGR1cmluZworY29uc2VjdXRpdmUgdXNlcy4gQWxsIHRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgdXNlIDM1MngyODggKHdoaWNoIGlzCitkZWZhdWx0KSwgYmUgd2FybmVkIC0geW91IG1heSBlbmNvdW50ZXIgYnJva2VuIHBpY3R1cmUgb24gZmlyc3QgY29ubmVjdDsKK3RyeSB0byBhZGp1c3QgYnJpZ2h0bmVzcyAtIGJyaWdodGVyIGltYWdlIGlzIHNsb3dlciwgc28gVVNCIHdpbGwgYmUgYWJsZQordG8gc2VuZCBhbGwgZGF0YS4gSG93ZXZlciBpZiB5b3UgcmVndWxhcmx5IHVzZSBNb2RlbCAyIGNhbWVyYXMgeW91IG1heQorcHJlZmVyIDE3NngxNDQgd2hpY2ggbWFrZXMgcGVyZmVjdGx5IGdvb2QgSTQyMCwgd2l0aCBubyBzY2FsaW5nIGFuZAorbGVzc2VyIGRlbWFuZHMgb24gVVNCICgzMDAgS2JpdHMgcGVyIHNlY29uZCwgb3IgMjYgZnJhbWVzIHBlciBzZWNvbmQpLgorCitBbm90aGVyIHN0cmFuZ2UgZWZmZWN0IG9mIDM1MngyODggbW9kZSBpcyB0aGUgZmluZSB2ZXJ0aWNhbCBncmlkIHZpc2libGUKK29uIHNvbWUgY29sb3JlZCBzdXJmYWNlcy4gSSBhbSBzdXJlIGl0IGlzIGNhdXNlZCBieSBtZSBub3QgdW5kZXJzdGFuZGluZword2hhdCB0aGUgY2FtZXJhIGlzIHRyeWluZyB0byBzYXkuIEJsYW1lIHRyYWRlIHNlY3JldHMgZm9yIHRoYXQuCisKK1RoZSBjYW1lcmEgdGhhdCBJIGhhZCBhbHNvIGhhcyBhIGhhcmR3YXJlIHF1aXJrOiBpZiBkaXNjb25uZWN0ZWQsCitpdCBuZWVkcyBmZXcgbWludXRlcyB0byAicmVsYXgiIGJlZm9yZSBpdCBjYW4gYmUgcGx1Z2dlZCBpbiBhZ2FpbgorKHBvb3JseSBkZXNpZ25lZCBVU0IgcHJvY2Vzc29yIHJlc2V0IGNpcmN1aXQ/KQorCitbVmVvIFN0aW5ncmF5IHdpdGggUHJvZHVjdCBJRCAweDgwMEMgaXMgYWxzbyBNb2RlbCAyLCBidXQgSSBoYXZlbid0CitvYnNlcnZlZCB0aGlzIHBhcnRpY3VsYXIgZmxhdyBpbiBpdC5dCisKK01vZGVsIDIgY2FtZXJhIGNhbiBiZSBwcm9ncmFtbWVkIGZvciB2ZXJ5IGhpZ2ggc2Vuc2l0aXZpdHkgKGV2ZW4gc3RhcmxpZ2h0CittYXkgYmUgZW5vdWdoKSwgdGhpcyBtYWtlcyBpdCBjb252ZW5pZW50IGZvciB0aW5rZXJpbmcgd2l0aC4gVGhlIGRyaXZlcgorY29kZSBoYXMgZW5vdWdoIGNvbW1lbnRzIHRvIGhlbHAgYSBwcm9ncmFtbWVyIHRvIHR3ZWFrIHRoZSBjYW1lcmEKK2FzIHMvaGUgZmVlbHMgbmVjZXNzYXJ5LgorCitXSEFUIFlPVSBORUVEOgorCistIEEgc3VwcG9ydGVkIElCTSBQQyAoQy1pdCkgY2FtZXJhIChtb2RlbCAxIG9yIDIpCisKKy0gQSBMaW51eCBib3ggd2l0aCBVU0Igc3VwcG9ydCAoMi4zLzIuNDsgMi4yIHcvYmFja3BvcnQgbWF5IHdvcmspCisKKy0gQSBWaWRlbzRMaW51eCBjb21wYXRpYmxlIGZyYW1lIGdyYWJiZXIgcHJvZ3JhbSBzdWNoIGFzIHhhd3R2LgorICAKK0hPVyBUTyBDT01QSUxFIFRIRSBEUklWRVI6CisKK1lvdSBuZWVkIHRvIGNvbXBpbGUgdGhlIGRyaXZlciBvbmx5IGlmIHlvdSBhcmUgYSBkZXZlbG9wZXIKK29yIGlmIHlvdSB3YW50IHRvIG1ha2UgY2hhbmdlcyB0byB0aGUgY29kZS4gTW9zdCBkaXN0cmlidXRpb25zCitwcmVjb21waWxlIGFsbCBtb2R1bGVzLCBzbyB5b3UgY2FuIGdvIGRpcmVjdGx5IHRvIHRoZSBuZXh0CitzZWN0aW9uICJIT1cgVE8gVVNFIFRIRSBEUklWRVIiLgorCitUaGUgaWJtY2FtIGRyaXZlciB1c2VzIHVzYnZpZGVvIGhlbHBlciBsaWJyYXJ5IChtb2R1bGUpLAorc28gaWYgeW91IGFyZSBzdHVkeWluZyB0aGUgaWJtY2FtIGNvZGUgeW91IHdpbGwgYmUgbGVkIHRoZXJlLgorCitUaGUgZHJpdmVyIGl0c2VsZiBjb25zaXN0cyBvZiBvbmx5IG9uZSBmaWxlIGluIHVzYi8gZGlyZWN0b3J5OgoraWJtY2FtLmMuIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBpbnRvIHRoZSBMaW51eCBrZXJuZWwgYnVpbGQKK3Byb2Nlc3MgaWYgeW91IGNvbmZpZ3VyZSB0aGUga2VybmVsIGZvciBDT05GSUdfVVNCX0lCTUNBTS4KK1J1biAibWFrZSB4Y29uZmlnIiBhbmQgaW4gVVNCIHNlY3Rpb24geW91IHdpbGwgZmluZCB0aGUgSUJNCitjYW1lcmEgZHJpdmVyLiBTZWxlY3QgaXQsIHNhdmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHJlY29tcGlsZS4KKworSE9XIFRPIFVTRSBUSEUgRFJJVkVSOgorCitJIHJlY29tbWVuZCB0byBjb21waWxlIGRyaXZlciBhcyBhIG1vZHVsZS4gVGhpcyBnaXZlcyB5b3UgYW4KK2Vhc2llciBhY2Nlc3MgdG8gaXRzIGNvbmZpZ3VyYXRpb24uIFRoZSBjYW1lcmEgaGFzIG1hbnkgbW9yZQorc2V0dGluZ3MgdGhhbiBWNEwgY2FuIG9wZXJhdGUsIHNvIHNvbWUgc2V0dGluZ3MgYXJlIGRvbmUgdXNpbmcKK21vZHVsZSBvcHRpb25zLgorCitUbyBiZWdpbiB3aXRoLCBvbiBtb3N0IG1vZGVybiBMaW51eCBkaXN0cmlidXRpb25zIHRoZSBkcml2ZXIKK3dpbGwgYmUgYXV0b21hdGljYWxseSBsb2FkZWQgd2hlbmV2ZXIgeW91IHBsdWcgdGhlIHN1cHBvcnRlZAorY2FtZXJhIGluLiBUaGVyZWZvcmUsIHlvdSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBIb3dldmVyCitpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IHdpdGggc29tZSBtb2R1bGUgcGFyYW1ldGVycyB0aGVuCit5b3UgY2FuIGxvYWQgYW5kIHVubG9hZCB0aGUgZHJpdmVyIG1hbnVhbGx5LCB3aXRoIGNhbWVyYQorcGx1Z2dlZCBpbiBvciB1bnBsdWdnZWQuCisKK1R5cGljYWxseSBtb2R1bGUgaXMgaW5zdGFsbGVkIHdpdGggY29tbWFuZCAnbW9kcHJvYmUnLCBsaWtlIHRoaXM6CisKKyMgbW9kcHJvYmUgaWJtY2FtIGZyYW1lcmF0ZT0xCisKK0FsdGVybmF0aXZlbHkgeW91IGNhbiB1c2UgJ2luc21vZCcgaW4gc2ltaWxhciBmYXNoaW9uOgorCisjIGluc21vZCAvbGliL21vZHVsZXMvMi54LnkvdXNiL2libWNhbS5vIGZyYW1lcmF0ZT0xCisKK01vZHVsZSBjYW4gYmUgaW5zZXJ0ZWQgd2l0aCBjYW1lcmEgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZC4KKworVGhlIGRyaXZlciBjYW4gaGF2ZSBvcHRpb25zLCB0aG91Z2ggc29tZSBkZWZhdWx0cyBhcmUgcHJvdmlkZWQuCisKK0RyaXZlciBvcHRpb25zOiAoKiBpbmRpY2F0ZXMgdGhhdCBvcHRpb24gaXMgbW9kZWwtZGVwZW5kZW50KQorCitOYW1lICAgICAgICAgICAgVHlwZSAgICAgICAgICAgIFJhbmdlIFtkZWZhdWx0XSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0KK2RlYnVnICAgICAgICAgICBJbnRlZ2VyICAgICAgICAgMC05IFswXSAgICAgICAgIGRlYnVnPTEKK2ZsYWdzICAgICAgICAgICBJbnRlZ2VyICAgICAgICAgMC0weEZGIFswXSAgICAgIGZsYWdzPTB4MGQKK2ZyYW1lcmF0ZSAgICAgICBJbnRlZ2VyICAgICAgICAgMC02IFsyXSAgICAgICAgIGZyYW1lcmF0ZT0xCitodWVfY29ycmVjdGlvbiAgSW50ZWdlciAgICAgICAgIDAtMjU1IFsxMjhdICAgICBodWVfY29ycmVjdGlvbj0xMTUKK2luaXRfYnJpZ2h0bmVzcyBJbnRlZ2VyICAgICAgICAgMC0yNTUgWzEyOF0gICAgIGluaXRfYnJpZ2h0bmVzcz0xMDAKK2luaXRfY29udHJhc3QgICBJbnRlZ2VyICAgICAgICAgMC0yNTUgWzE5Ml0gICAgIGluaXRfY29udHJhc3Q9MjAwCitpbml0X2NvbG9yICAgICAgSW50ZWdlciAgICAgICAgIDAtMjU1IFsxMjhdICAgICBpbml0X2NvbG9yPTEzMAoraW5pdF9odWUgICAgICAgIEludGVnZXIgICAgICAgICAwLTI1NSBbMTI4XSAgICAgaW5pdF9odWU9MTE1CitsaWdodGluZyAgICAgICAgSW50ZWdlciAgICAgICAgIDAtMiogWzFdICAgICAgICBsaWdodGluZz0yCitzaGFycG5lc3MgICAgICAgSW50ZWdlciAgICAgICAgIDAtNiogWzRdICAgICAgICBzaGFycG5lc3M9Mworc2l6ZSAgICAgICAgICAgIEludGVnZXIgICAgICAgICAwLTIqIFsyXSAgICAgICAgc2l6ZT0xCisKK09wdGlvbnMgZm9yIE1vZGVsIDIgb25seToKKworTmFtZSAgICAgICAgICAgIFR5cGUgICAgICAgICAgICBSYW5nZSBbZGVmYXVsdF0gRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tCitpbml0X21vZGVsMl9yZyAgSW50ZWdlciAgICAgICAgIDAuLjI1NSBbMHg3MF0gICBpbml0X21vZGVsMl9yZz0xMjgKK2luaXRfbW9kZWwyX3JnMiBJbnRlZ2VyICAgICAgICAgMC4uMjU1IFsweDJmXSAgIGluaXRfbW9kZWwyX3JnMj01MAoraW5pdF9tb2RlbDJfc2F0IEludGVnZXIgICAgICAgICAwLi4yNTUgWzB4MzRdICAgaW5pdF9tb2RlbDJfc2F0PTY1Citpbml0X21vZGVsMl95YiAgSW50ZWdlciAgICAgICAgIDAuLjI1NSBbMHhhMF0gICBpbml0X21vZGVsMl95Yj0yMDAKKworZGVidWcgICAgICAgICAgIFlvdSBkb24ndCBuZWVkIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgYSBkZXZlbG9wZXIgdGhlbiB5b3Ugd2lsbCBzZWUgaW4gdGhlIGNvZGUKKyAgICAgICAgICAgICAgICB3aGF0IHZhbHVlcyBkbyB3aGF0LiAwPW9mZi4KKworZmxhZ3MgICAgICAgICAgIFRoaXMgaXMgYSBiaXQgbWFzaywgYW5kIHlvdSBjYW4gY29tYmluZSBhbnkgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgYml0cyB0byBwcm9kdWNlIHdoYXQgeW91IHdhbnQuIFVzdWFsbHkgeW91IGRvbid0IHdhbnQKKyAgICAgICAgICAgICAgICBhbnkgb2YgZXh0cmEgZmVhdHVyZXMgdGhpcyBvcHRpb24gcHJvdmlkZXM6CisKKyAgICAgICAgICAgICAgICBGTEFHU19SRVRSWV9WSURJT0NTWU5DICAxICBUaGlzIGJpdCBhbGxvd3MgdG8gcmV0cnkgZmFpbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklESU9DU1lOQyBpb2N0bHMgd2l0aG91dCBmYWlsaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbGwgd29yayB3aXRoIHhhd3R2LCB3aWxsIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggeHJlYWxwcm9kdWNlci4gRGVmYXVsdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZXQuCisgICAgICAgICAgICAgICAgRkxBR1NfTU9OT0NIUk9NRSAgICAgICAgMiAgQWN0aXZhdGVzIG1vbm9jaHJvbWUgKGIvdykgbW9kZS4KKyAgICAgICAgICAgICAgICBGTEFHU19ESVNQTEFZX0hJTlRTICAgICA0ICBTaG93cyBjb2xvcmVkIHBpeGVscyB3aGljaCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWMgbWVhbmluZyB0byBkZXZlbG9wZXJzLgorICAgICAgICAgICAgICAgIEZMQUdTX09WRVJMQVlfU1RBVFMgICAgIDggIFNob3dzIHRpbnkgbnVtYmVycyBvbiBzY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZnVsIG9ubHkgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICBGTEFHU19GT1JDRV9URVNUUEFUVEVSTiAxNiBTaG93cyBibHVlIHNjcmVlbiB3aXRoIG51bWJlcnMuCisgICAgICAgICAgICAgICAgRkxBR1NfU0VQQVJBVEVfRlJBTUVTICAgMzIgU2hvd3MgZWFjaCBmcmFtZSBzZXBhcmF0ZWx5LCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdhcyByZWNlaXZlZCBmcm9tIHRoZSBjYW1lcmEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCAobm90IHNldCkgaXMgdG8gbWl4IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZyBmcmFtZSBpbiB0byBjb21wZW5zYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG9jY2FzaW9uYWwgbG9zcyBvZiBJc29jIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBoaWdoIGZyYW1lIHJhdGVzLgorICAgICAgICAgICAgICAgIEZMQUdTX0NMRUFOX0ZSQU1FUyAgICAgIDY0IEZvcmNlcyAiY2xlYW51cCIgb2YgZWFjaCBmcmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yIHRvIHVzZTsgcmVsZXZhbnQgb25seSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQUdTX1NFUEFSQVRFX0ZSQU1FUyBpcyBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpcyBub3QgdG8gY2xlYW4gZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBsaXR0bGUgZmFzdGVyIGJ1dCBtYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlIGZsaWNrZXIgaWYgZnJhbWUgcmF0ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvbyBoaWdoIGFuZCBJc29jIGRhdGEgZ2V0cyBsb3N0LgorICAgICAgICAgICAgICAgIEZMQUdTX05PX0RFQ09ESU5HICAgICAgMTI4IFRoaXMgZmxhZyB0dXJucyB0aGUgdmlkZW8gc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlciBvZmYsIGFuZCBkdW1wcyB0aGUgcmF3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNvYyBkYXRhIGZyb20gdGhlIGNhbWVyYSBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlYWRpbmcgcHJvY2Vzcy4gVXNlZnVsIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVycywgYnV0IG5vdCB0byB1c2Vycy4KKworZnJhbWVyYXRlICAgICAgIFRoaXMgc2V0dGluZyBjb250cm9scyBmcmFtZSByYXRlIG9mIHRoZSBjYW1lcmEuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICBhbiBhcHByb3hpbWF0ZSBzZXR0aW5nIChpbiB0ZXJtcyBvZiAid29yc3QiIC4uLiAiYmVzdCIpCisgICAgICAgICAgICAgICAgYmVjYXVzZSBjYW1lcmEgY2hhbmdlcyBmcmFtZSByYXRlIGRlcGVuZGluZyBvbiBhbW91bnQKKyAgICAgICAgICAgICAgICBvZiBsaWdodCBhdmFpbGFibGUuIFNldHRpbmcgMCBpcyBzbG93ZXN0LCA2IGlzIGZhc3Rlc3QuCisgICAgICAgICAgICAgICAgQmV3YXJlIC0gZmFzdCBzZXR0aW5ncyBhcmUgdmVyeSBkZW1hbmRpbmcgYW5kIG1heSBub3QKKyAgICAgICAgICAgICAgICB3b3JrIHdlbGwgd2l0aCBhbGwgdmlkZW8gc2l6ZXMuIEJlIGNvbnNlcnZhdGl2ZS4KKworaHVlX2NvcnJlY3Rpb24gIFRoaXMgaGlnaGx5IG9wdGlvbmFsIHNldHRpbmcgYWxsb3dzIHRvIGFkanVzdCB0aGUKKyAgICAgICAgICAgICAgICBodWUgb2YgdGhlIGltYWdlIGluIGEgd2F5IHNsaWdodGx5IGRpZmZlcmVudCBmcm9tCisgICAgICAgICAgICAgICAgd2hhdCB1c3VhbCAiaHVlIiBjb250cm9sIGRvZXMuIEJvdGggY29udHJvbHMgYWZmZWN0CisgICAgICAgICAgICAgICAgWVVWIGNvbG9yc3BhY2U6IHJlZ3VsYXIgImh1ZSIgY29udHJvbCBhZGp1c3RzIG9ubHkKKyAgICAgICAgICAgICAgICBVIGNvbXBvbmVudCwgYW5kIHRoaXMgImh1ZV9jb3JyZWN0aW9uIiBvcHRpb24gc2ltaWxhcmx5CisgICAgICAgICAgICAgICAgYWRqdXN0cyBvbmx5IFYgY29tcG9uZW50LiBIb3dldmVyIHVzdWFsbHkgaXQgaXMgZW5vdWdoCisgICAgICAgICAgICAgICAgdG8gdHdlYWsgb25seSBVIG9yIFYgdG8gY29tcGVuc2F0ZSBmb3IgY29sb3JlZCBsaWdodCBvcgorICAgICAgICAgICAgICAgIGNvbG9yIHRlbXBlcmF0dXJlOyB0aGlzIG9wdGlvbiBzaW1wbHkgYWxsb3dzIG1vcmUKKyAgICAgICAgICAgICAgICBjb21wbGljYXRlZCBjb3JyZWN0aW9uIHdoZW4gYW5kIGlmIGl0IGlzIG5lY2Vzc2FyeS4KKworaW5pdF9icmlnaHRuZXNzIFRoZXNlIHNldHRpbmdzIHNwZWNpZnkgX2luaXRpYWxfIHZhbHVlcyB3aGljaCB3aWxsIGJlCitpbml0X2NvbnRyYXN0ICAgdXNlZCB0byBzZXQgdXAgdGhlIGNhbWVyYS4gSWYgeW91ciBWNEwgYXBwbGljYXRpb24gaGFzCitpbml0X2NvbG9yICAgICAgaXRzIG93biBjb250cm9scyB0byBhZGp1c3QgdGhlIHBpY3R1cmUgdGhlbiB0aGVzZQoraW5pdF9odWUgICAgICAgIGNvbnRyb2xzIHdpbGwgYmUgdXNlZCB0b28uIFRoZXNlIG9wdGlvbnMgYWxsb3cgeW91IHRvCisgICAgICAgICAgICAgICAgcHJlY29uZmlndXJlIHRoZSBjYW1lcmEgd2hlbiBpdCBnZXRzIGNvbm5lY3RlZCwgYmVmb3JlCisgICAgICAgICAgICAgICAgYW55IFY0TCBhcHBsaWNhdGlvbiBjb25uZWN0cyB0byBpdC4gR29vZCBmb3Igd2ViY2Ftcy4KKworaW5pdF9tb2RlbDJfcmcgIFRoZXNlIGluaXRpYWwgc2V0dGluZ3MgYWx0ZXIgY29sb3IgYmFsYW5jZSBvZiB0aGUKK2luaXRfbW9kZWwyX3JnMiBjYW1lcmEgb24gaGFyZHdhcmUgbGV2ZWwuIEFsbCBmb3VyIHNldHRpbmdzIG1heSBiZSB1c2VkCitpbml0X21vZGVsMl9zYXQgdG8gdHVuZSB0aGUgY2FtZXJhIHRvIHNwZWNpZmljIGxpZ2h0aW5nIGNvbmRpdGlvbnMuIFRoZXNlCitpbml0X21vZGVsMl95YiAgc2V0dGluZ3Mgb25seSBhcHBseSB0byBNb2RlbCAyIGNhbWVyYXMuCisKK2xpZ2h0aW5nICAgICAgICBUaGlzIG9wdGlvbiBzZWxlY3RzIG9uZSBvZiB0aHJlZSBoYXJkd2FyZS1kZWZpbmVkCisgICAgICAgICAgICAgICAgcGhvdG9zZW5zaXRpdml0eSBzZXR0aW5ncyBvZiB0aGUgY2FtZXJhLiAwPWJyaWdodCBsaWdodCwKKyAgICAgICAgICAgICAgICAxPU1lZGl1bSAoZGVmYXVsdCksIDI9TG93IGxpZ2h0LiBUaGlzIHNldHRpbmcgYWZmZWN0cworICAgICAgICAgICAgICAgIGZyYW1lIHJhdGU6IHRoZSBkaW1tZXIgdGhlIGxpZ2h0aW5nIHRoZSBsb3dlciB0aGUgZnJhbWUKKyAgICAgICAgICAgICAgICByYXRlIChiZWNhdXNlIGxvbmdlciBleHBvc2l0aW9uIHRpbWUgaXMgbmVlZGVkKS4gVGhlCisgICAgICAgICAgICAgICAgTW9kZWwgMiBjYW1lcmFzIGFsbG93IHZhbHVlcyBtb3JlIHRoYW4gMiBmb3IgdGhpcyBvcHRpb24sCisgICAgICAgICAgICAgICAgdGh1cyBlbmFibGluZyBleHRyZW1lbHkgaGlnaCBzZW5zaXRpdml0eSBhdCBjb3N0IG9mIGZyYW1lCisgICAgICAgICAgICAgICAgcmF0ZSwgY29sb3Igc2F0dXJhdGlvbiBhbmQgaW1hZ2luZyBzZW5zb3Igbm9pc2UuCisKK3NoYXJwbmVzcyAgICAgICBUaGlzIG9wdGlvbiBjb250cm9scyBzbW9vdGhpbmcgKG5vaXNlIHJlZHVjdGlvbikKKyAgICAgICAgICAgICAgICBtYWRlIGJ5IGNhbWVyYS4gU2V0dGluZyAwIGlzIG1vc3Qgc21vb3RoLCBzZXR0aW5nIDYKKyAgICAgICAgICAgICAgICBpcyBtb3N0IHNoYXJwLiBCZSBhd2FyZSB0aGF0IENNT1Mgc2Vuc29yIHVzZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgY2FtZXJhIGlzIHByZXR0eSBub2lzeSwgc28gaWYgeW91IGNob29zZSA2IHlvdSB3aWxsCisgICAgICAgICAgICAgICAgYmUgZ3JlZXRlZCB3aXRoICJzbm93eSIgaW1hZ2UuIERlZmF1bHQgaXMgNC4gTW9kZWwgMgorICAgICAgICAgICAgICAgIGNhbWVyYXMgZG8gbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgorCitzaXplICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGNob29zZXMgb25lIG9mIHNldmVyYWwgaW1hZ2Ugc2l6ZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuIENhbWVyYXMgbWF5IHN1cHBvcnQgbW9yZSwgYnV0CisgICAgICAgICAgICAgICAgaXQncyBkaWZmaWN1bHQgdG8gcmV2ZXJzZS1lbmdpbmVlciBhbGwgZm9ybWF0cy4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgdmlkZW8gc2l6ZXMgYXJlIHN1cHBvcnRlZDoKKworICAgICAgICAgICAgICAgIHNpemU9MCAgICAgMTI4eDk2ICAoTW9kZWwgMSBvbmx5KQorICAgICAgICAgICAgICAgIHNpemU9MSAgICAgMTYweDEyMAorICAgICAgICAgICAgICAgIHNpemU9MiAgICAgMTc2eDE0NAorICAgICAgICAgICAgICAgIHNpemU9MyAgICAgMzIweDI0MCAoTW9kZWwgMiBvbmx5KQorICAgICAgICAgICAgICAgIHNpemU9NCAgICAgMzUyeDI0MCAoTW9kZWwgMiBvbmx5KQorICAgICAgICAgICAgICAgIHNpemU9NSAgICAgMzUyeDI4OAorICAgICAgICAgICAgICAgIHNpemU9NiAgICAgNjQweDQ4MCAoTW9kZWwgMyBvbmx5KQorCisgICAgICAgICAgICAgICAgVGhlIDM1MngyODggaXMgdGhlIG5hdGl2ZSBzaXplIG9mIHRoZSBNb2RlbCAxIHNlbnNvcgorICAgICAgICAgICAgICAgIGFycmF5LCBzbyBpdCdzIHRoZSBiZXN0IHJlc29sdXRpb24gdGhlIGNhbWVyYSBjYW4KKyAgICAgICAgICAgICAgICB5aWVsZC4gVGhlIGJlc3QgcmVzb2x1dGlvbiBvZiBNb2RlbCAyIGlzIDE3NngxNDQsIGFuZAorICAgICAgICAgICAgICAgIGxhcmdlciBpbWFnZXMgYXJlIHByb2R1Y2VkIGJ5IHN0cmV0Y2hpbmcgdGhlIGJpdG1hcC4KKyAgICAgICAgICAgICAgICBNb2RlbCAzIGhhcyBzZW5zb3Igd2l0aCA2NDB4NDgwIGdyaWQsIGFuZCBpdCB3b3JrcyB0b28sCisgICAgICAgICAgICAgICAgYnV0IHRoZSBmcmFtZSByYXRlIHdpbGwgYmUgZXhjZXB0aW9uYWxseSBsb3cgKDEtMiBGUFMpOworICAgICAgICAgICAgICAgIGl0IG1heSBiZSBzdGlsbCBPSyBmb3Igc29tZSBhcHBsaWNhdGlvbnMsIGxpa2Ugc2VjdXJpdHkuCisgICAgICAgICAgICAgICAgQ2hvb3NlIHRoZSBpbWFnZSBzaXplIHlvdSBuZWVkLiBUaGUgc21hbGxlciBpbWFnZSBjYW4KKyAgICAgICAgICAgICAgICBzdXBwb3J0IGZhc3RlciBmcmFtZSByYXRlLiBEZWZhdWx0IGlzIDM1MngyODguCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB0aGUgVHJvdWJsZXNob290aW5nIEZBUSB2aXNpdCB0aGlzIFVSTDoKKworICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy9pYm1jYW0vCisKK1dIQVQgTkVFRFMgVE8gQkUgRE9ORToKKworLSBUaGUgYnV0dG9uIG9uIHRoZSBjYW1lcmEgaXMgbm90IHVzZWQuIEkgZG9uJ3Qga25vdyBob3cgdG8gZ2V0IHRvIGl0LgorICBJIGtub3cgbm93IGhvdyB0byByZWFkIGJ1dHRvbiBvbiBNb2RlbCAyLCBidXQgd2hhdCB0byBkbyB3aXRoIGl0PworCistIENhbWVyYSByZXBvcnRzIGl0cyBzdGF0dXMgYmFjayB0byB0aGUgZHJpdmVyOyBob3dldmVyIEkgZG9uJ3Qga25vdworICB3aGF0IHJldHVybmVkIGRhdGEgbWVhbnMuIElmIGNhbWVyYSBmYWlscyBhdCBzb21lIGluaXRpYWxpemF0aW9uCisgIHN0YWdlIHRoZW4gc29tZXRoaW5nIHNob3VsZCBiZSBkb25lLCBhbmQgSSBkb24ndCBkbyB0aGF0IGJlY2F1c2UKKyAgSSBkb24ndCBldmVuIGtub3cgdGhhdCBzb21lIGNvbW1hbmQgZmFpbGVkLiBUaGlzIGlzIG1vc3RseSBNb2RlbCAxCisgIGNvbmNlcm4gYmVjYXVzZSBNb2RlbCAyIHVzZXMgZGlmZmVyZW50IGNvbW1hbmRzIHdoaWNoIGRvIG5vdCByZXR1cm4KKyAgc3RhdHVzIChhbmQgc2VlbSB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHkgZXZlcnkgdGltZSkuCisKKy0gU29tZSBmbGF2b3JzIG9mIE1vZGVsIDQgTmV0Q2FtZXJhcyBwcm9kdWNlIG9ubHkgY29tcHJlc3NlZCB2aWRlbworICBzdHJlYW1zLCBhbmQgSSBkb24ndCBrbm93IGhvdyB0byBkZWNvZGUgdGhlbS4KKworQ1JFRElUUzoKKworVGhlIGNvZGUgaXMgYmFzZWQgaW4gbm8gc21hbGwgcGFydCBvbiB0aGUgQ1BpQSBkcml2ZXIgYnkgSm9oYW5uZXMgRXJkZmVsdCwKK1JhbmR5IER1bmxhcCwgYW5kIG90aGVycy4gQmlnIHRoYW5rcyB0byB0aGVtIGZvciB0aGVpciBwaW9uZWVyaW5nIHdvcmsgb24gdGhhdAorYW5kIHRoZSBVU0Igc3RhY2suCisKK0kgYWxzbyB0aGFuayBKb2huIExpZ2h0c2V5IGZvciBoaXMgZG9uYXRpb24gb2YgdGhlIFZlbyBTdGluZ3JheSBjYW1lcmEuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYgYi9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3MjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2xpbnV4LmluZgpAQCAtMCwwICsxLDIwMCBAQAorOyBNUy1XaW5kb3dzIGRyaXZlciBjb25maWcgbWF0Y2hpbmcgc29tZSBiYXNpYyBtb2RlcyBvZiB0aGUKKzsgTGludXgtVVNCIEV0aGVybmV0L1JORElTIGdhZGdldCBmaXJtd2FyZToKKzsKKzsgIC0gUk5ESVMgcGx1cyBDREMgRXRoZXJuZXQgLi4uIHRoaXMgbWF5IGJlIGZhbWlsaWFyIGFzIGEgRE9DU0lTCis7ICAgIGNhYmxlIG1vZGVtIHByb2ZpbGUsIGFuZCBzdXBwb3J0cyBtb3N0IG5vbi1NaWNyb3NvZnQgVVNCIGhvc3RzCis7Cis7ICAtIFJORElTIHBsdXMgQ0RDIFN1YnNldCAuLi4gdXNlZCBieSBoYXJkd2FyZSB0aGF0IGluY2FwYWJsZSBvZgorOyAgICBmdWxsIENEQyBFdGhlcm5ldCBzdXBwb3J0LgorOworOyBNaWNyb3NvZnQgb25seSBkaXJlY3RseSBzdXBwb3J0cyBSTkRJUyBkcml2ZXJzLCBhbmQgYnVuZGxlZCB0aGVtIGludG8gWFAuCis7IFRoZSBNaWNyb3NvZnQgIlJlbW90ZSBORElTIFVTQiBEcml2ZXIgS2l0IiBpcyBjdXJyZW50bHkgZm91bmQgYXQ6Cis7ICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3doZGMvaHdkZXYvcmVzb3VyY2VzL0hXc2VydmljZXMvcm5kaXMubXNweAorCisKK1tWZXJzaW9uXQorU2lnbmF0dXJlICAgICAgICAgICA9ICIkQ0hJQ0FHTyQiCitDbGFzcyAgICAgICAgICAgICAgID0gTmV0CitDbGFzc0dVSUQgICAgICAgICAgID0gezRkMzZlOTcyLWUzMjUtMTFjZS1iZmMxLTA4MDAyYmUxMDMxOH0KK1Byb3ZpZGVyICAgICAgICAgICAgPSAlTGludXglCitDb21wYXRpYmxlICAgICAgICAgID0gMQorTWlsbGVubml1bVByZWZlcnJlZCA9IC5NRQorRHJpdmVyVmVyICAgICAgICAgICA9IDAzLzMwLzIwMDQsMC4wLjAuMAorOyBjYXRhbG9nIGZpbGUgd291bGQgYmUgdXNlZCBieSBXSFFMCis7Q2F0YWxvZ0ZpbGUgICAgICAgICA9IExpbnV4LmNhdAorCitbTWFudWZhY3R1cmVyXQorJUxpbnV4JSAgICAgICAgICA9IExpbnV4RGV2aWNlcyxOVC41LjEKKworW0xpbnV4RGV2aWNlc10KKzsgTmV0Q2hpcCBJRHMsIHVzZWQgYnkgYm90aCBmaXJtd2FyZSBtb2RlcworJUxpbnV4RGV2aWNlJSAgICA9IFJORElTLCBVU0JcVklEXzA1MjUmUElEX2E0YTIKKworW0xpbnV4RGV2aWNlcy5OVC41LjFdCislTGludXhEZXZpY2UlICAgID0gUk5ESVMuTlQuNS4xLCBVU0JcVklEXzA1MjUmUElEX2E0YTIKKworW0NvbnRyb2xGbGFnc10KK0V4Y2x1ZGVGcm9tU2VsZWN0PSoKKworOyBXaW5kb3dzIDk4LCBXaW5kb3dzIDk4IFNlY29uZCBFZGl0aW9uIHNwZWNpZmljIHNlY3Rpb25zIC0tLS0tLS0tCisKK1tSTkRJU10KK0RldmljZUlEICAgICAgICA9IHVzYjgwMjMKK01heEluc3RhbmNlICAgICA9IDUxMgorRHJpdmVyVmVyICAgICAgICAgICA9IDAzLzMwLzIwMDQsMC4wLjAuMAorQWRkUmVnICAgICAgICAgID0gUk5ESVNfQWRkUmVnXzk4LCBSTkRJU19BZGRSZWdfQ29tbW9uCisKK1tSTkRJU19BZGRSZWdfOThdCitIS1IsICwgICAgICAgICAgICAgICBEZXZMb2FkZXIsICAgICAgICAwLCAqbmRpcworSEtSLCAsICAgICAgICAgICAgICAgRGV2aWNlVnhEcywgICAgICAgMCwgdXNiODAyMy5zeXMKK0hLUiwgTkRJUywgICAgICAgICAgIExvZ0RyaXZlck5hbWUsICAgIDAsICJ1c2I4MDIzIgorSEtSLCBORElTLCAgICAgICAgICAgTWFqb3JOZGlzVmVyc2lvbiwgMSwgNQorSEtSLCBORElTLCAgICAgICAgICAgTWlub3JOZGlzVmVyc2lvbiwgMSwgMAorSEtSLCBOZGlcSW50ZXJmYWNlcywgRGVmVXBwZXIsICAgICAgICAgMCwgIm5kaXMzLG5kaXM0LG5kaXM1IgorSEtSLCBOZGlcSW50ZXJmYWNlcywgRGVmTG93ZXIsICAgICAgICAgMCwgImV0aGVybmV0IgorSEtSLCBOZGlcSW50ZXJmYWNlcywgVXBwZXJSYW5nZSwgICAgICAgMCwgIm5kaXMzLG5kaXM0LG5kaXM1IgorSEtSLCBOZGlcSW50ZXJmYWNlcywgTG93ZXJSYW5nZSwgICAgICAgMCwgImV0aGVybmV0IgorSEtSLCBOZGlcSW5zdGFsbCwgICAgbmRpczMsICAgICAgICAgICAgMCwgIlJORElTX0luc3RhbGxfOTgiCitIS1IsIE5kaVxJbnN0YWxsLCAgICBuZGlzNCwgICAgICAgICAgICAwLCAiUk5ESVNfSW5zdGFsbF85OCIKK0hLUiwgTmRpXEluc3RhbGwsICAgIG5kaXM1LCAgICAgICAgICAgIDAsICJSTkRJU19JbnN0YWxsXzk4IgorSEtSLCBOZGksICAgICAgICAgICAgRGV2aWNlSWQsICAgICAgICAgMCwgIlVTQlxWSURfMDUyNSZQSURfYTRhMiIKKworW1JORElTX0luc3RhbGxfOThdCitDb3B5RmlsZXM9Uk5ESVNfQ29weUZpbGVzXzk4CisKK1tSTkRJU19Db3B5RmlsZXNfOThdCit1c2I4MDIzLnN5cywgdXNiODAyM3cuc3lzLCAsIDAgCitybmRpc21wLnN5cywgcm5kaXNtcHcuc3lzLCAsIDAgCisKKzsgV2luZG93cyBNaWxsZW5uaXVtIEVkaXRpb24gc3BlY2lmaWMgc2VjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1JORElTLk1FXQorRGV2aWNlSUQgICAgICAgID0gdXNiODAyMworTWF4SW5zdGFuY2UgICAgID0gNTEyCitEcml2ZXJWZXIgICAgICAgICAgID0gMDMvMzAvMjAwNCwwLjAuMC4wCitBZGRSZWcgICAgICAgICAgPSBSTkRJU19BZGRSZWdfTUUsIFJORElTX0FkZFJlZ19Db21tb24KK0NoYXJhY3RlcmlzdGljcyA9IDB4ODQgICA7IE5DRl9QSFlTSUNBTCArIE5DRl9IQVNfVUkKK0J1c1R5cGUgICAgICAgICA9IDE1CisKK1tSTkRJU19BZGRSZWdfTUVdCitIS1IsICwgICAgICAgICAgICAgICBEZXZMb2FkZXIsICAgICAgICAwLCAqbmRpcworSEtSLCAsICAgICAgICAgICAgICAgRGV2aWNlVnhEcywgICAgICAgMCwgdXNiODAyMy5zeXMKK0hLUiwgTkRJUywgICAgICAgICAgIExvZ0RyaXZlck5hbWUsICAgIDAsICJ1c2I4MDIzIgorSEtSLCBORElTLCAgICAgICAgICAgTWFqb3JOZGlzVmVyc2lvbiwgMSwgNQorSEtSLCBORElTLCAgICAgICAgICAgTWlub3JOZGlzVmVyc2lvbiwgMSwgMAorSEtSLCBOZGlcSW50ZXJmYWNlcywgRGVmVXBwZXIsICAgICAgICAgMCwgIm5kaXMzLG5kaXM0LG5kaXM1IgorSEtSLCBOZGlcSW50ZXJmYWNlcywgRGVmTG93ZXIsICAgICAgICAgMCwgImV0aGVybmV0IgorSEtSLCBOZGlcSW50ZXJmYWNlcywgVXBwZXJSYW5nZSwgICAgICAgMCwgIm5kaXMzLG5kaXM0LG5kaXM1IgorSEtSLCBOZGlcSW50ZXJmYWNlcywgTG93ZXJSYW5nZSwgICAgICAgMCwgImV0aGVybmV0IgorSEtSLCBOZGlcSW5zdGFsbCwgICAgbmRpczMsICAgICAgICAgICAgMCwgIlJORElTX0luc3RhbGxfTUUiCitIS1IsIE5kaVxJbnN0YWxsLCAgICBuZGlzNCwgICAgICAgICAgICAwLCAiUk5ESVNfSW5zdGFsbF9NRSIKK0hLUiwgTmRpXEluc3RhbGwsICAgIG5kaXM1LCAgICAgICAgICAgIDAsICJSTkRJU19JbnN0YWxsX01FIgorSEtSLCBOZGksICAgICAgICAgICAgRGV2aWNlSWQsICAgICAgICAgMCwgIlVTQlxWSURfMDUyNSZQSURfYTRhMiIKKworW1JORElTX0luc3RhbGxfTUVdCitDb3B5RmlsZXM9Uk5ESVNfQ29weUZpbGVzX01FCisKK1tSTkRJU19Db3B5RmlsZXNfTUVdCit1c2I4MDIzLnN5cywgdXNiODAyM20uc3lzLCAsIDAgCitybmRpc21wLnN5cywgcm5kaXNtcG0uc3lzLCAsIDAgCisKKzsgV2luZG93cyAyMDAwIHNwZWNpZmljIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbUk5ESVMuTlRdCitDaGFyYWN0ZXJpc3RpY3MgPSAweDg0ICAgOyBOQ0ZfUEhZU0lDQUwgKyBOQ0ZfSEFTX1VJCitCdXNUeXBlICAgICAgICAgPSAxNQorRHJpdmVyVmVyICAgICAgICAgICA9IDAzLzMwLzIwMDQsMC4wLjAuMAorQWRkUmVnICAgICAgICAgID0gUk5ESVNfQWRkUmVnX05ULCBSTkRJU19BZGRSZWdfQ29tbW9uCitDb3B5RmlsZXMgICAgICAgPSBSTkRJU19Db3B5RmlsZXNfTlQKKworW1JORElTLk5ULlNlcnZpY2VzXQorQWRkU2VydmljZSA9IFVTQl9STkRJUywgMiwgUk5ESVNfU2VydmljZUluc3RfTlQsIFJORElTX0V2ZW50TG9nCisKK1tSTkRJU19Db3B5RmlsZXNfTlRdCis7IG5vIHJlbmFtZSBvZiBmaWxlcyBvbiBXaW5kb3dzIDIwMDAsIHVzZSB0aGUgJ2snIG5hbWVzIGFzIGlzCit1c2I4MDIzay5zeXMsICwgLCAwIAorcm5kaXNtcGsuc3lzLCAsICwgMCAKKworW1JORElTX1NlcnZpY2VJbnN0X05UXQorRGlzcGxheU5hbWUgICAgID0gJVNlcnZpY2VEaXNwbGF5TmFtZSUKK1NlcnZpY2VUeXBlICAgICA9IDEgCitTdGFydFR5cGUgICAgICAgPSAzIAorRXJyb3JDb250cm9sICAgID0gMSAKK1NlcnZpY2VCaW5hcnkgICA9ICUxMiVcdXNiODAyM2suc3lzICAgIAorTG9hZE9yZGVyR3JvdXAgID0gTkRJUworQWRkUmVnICAgICAgICAgID0gUk5ESVNfV01JX0FkZFJlZ19OVAorCitbUk5ESVNfV01JX0FkZFJlZ19OVF0KK0hLUiwgLCBNb2ZJbWFnZVBhdGgsIDB4MDAwMjAwMDAsICJTeXN0ZW0zMlxkcml2ZXJzXHJuZGlzbXBrLnN5cyIKKworOyBXaW5kb3dzIFhQIHNwZWNpZmljIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tSTkRJUy5OVC41LjFdCitDaGFyYWN0ZXJpc3RpY3MgPSAweDg0ICAgOyBOQ0ZfUEhZU0lDQUwgKyBOQ0ZfSEFTX1VJCitCdXNUeXBlICAgICAgICAgPSAxNQorRHJpdmVyVmVyICAgICAgICAgICA9IDAzLzMwLzIwMDQsMC4wLjAuMAorQWRkUmVnICAgICAgICAgID0gUk5ESVNfQWRkUmVnX05ULCBSTkRJU19BZGRSZWdfQ29tbW9uCis7IG5vIGNvcHlmaWxlcyAtIHRoZSBmaWxlcyBhcmUgYWxyZWFkeSBpbiBwbGFjZQorCitbUk5ESVMuTlQuNS4xLlNlcnZpY2VzXQorQWRkU2VydmljZSAgICAgID0gVVNCX1JORElTLCAyLCBSTkRJU19TZXJ2aWNlSW5zdF81MSwgUk5ESVNfRXZlbnRMb2cKKworW1JORElTX1NlcnZpY2VJbnN0XzUxXQorRGlzcGxheU5hbWUgICAgID0gJVNlcnZpY2VEaXNwbGF5TmFtZSUKK1NlcnZpY2VUeXBlICAgICA9IDEgCitTdGFydFR5cGUgICAgICAgPSAzIAorRXJyb3JDb250cm9sICAgID0gMSAKK1NlcnZpY2VCaW5hcnkgICA9ICUxMiVcdXNiODAyMy5zeXMgICAgCitMb2FkT3JkZXJHcm91cCAgPSBORElTCitBZGRSZWcgICAgICAgICAgPSBSTkRJU19XTUlfQWRkUmVnXzUxCisKK1tSTkRJU19XTUlfQWRkUmVnXzUxXQorSEtSLCAsIE1vZkltYWdlUGF0aCwgMHgwMDAyMDAwMCwgIlN5c3RlbTMyXGRyaXZlcnNccm5kaXNtcC5zeXMiCisKKzsgV2luZG93cyAyMDAwIGFuZCBXaW5kb3dzIFhQIGNvbW1vbiBzZWN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbUk5ESVNfQWRkUmVnX05UXQorSEtSLCBOZGksICAgICAgICAgICAgICAgU2VydmljZSwgICAgICAgIDAsICJVU0JfUk5ESVMiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCAgICBVcHBlclJhbmdlLCAgICAgMCwgIm5kaXM1IiAKK0hLUiwgTmRpXEludGVyZmFjZXMsICAgIExvd2VyUmFuZ2UsICAgICAwLCAiZXRoZXJuZXQiCisKK1tSTkRJU19FdmVudExvZ10KK0FkZFJlZyA9IFJORElTX0V2ZW50TG9nX0FkZFJlZworCitbUk5ESVNfRXZlbnRMb2dfQWRkUmVnXQorSEtSLCAsIEV2ZW50TWVzc2FnZUZpbGUsIDB4MDAwMjAwMDAsICIlJVN5c3RlbVJvb3QlJVxTeXN0ZW0zMlxuZXRldmVudC5kbGwiCitIS1IsICwgVHlwZXNTdXBwb3J0ZWQsICAgMHgwMDAxMDAwMSwgNworCis7IENvbW1vbiBTZWN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tSTkRJU19BZGRSZWdfQ29tbW9uXQorSEtSLCBORElccGFyYW1zXE5ldHdvcmtBZGRyZXNzLCBQYXJhbURlc2MsICAwLCAlTmV0d29ya0FkZHJlc3MlCitIS1IsIE5ESVxwYXJhbXNcTmV0d29ya0FkZHJlc3MsIHR5cGUsICAgICAgIDAsICJlZGl0IgorSEtSLCBORElccGFyYW1zXE5ldHdvcmtBZGRyZXNzLCBMaW1pdFRleHQsICAwLCAiMTIiCitIS1IsIE5ESVxwYXJhbXNcTmV0d29ya0FkZHJlc3MsIFVwcGVyQ2FzZSwgIDAsICIxIgorSEtSLCBORElccGFyYW1zXE5ldHdvcmtBZGRyZXNzLCBkZWZhdWx0LCAgICAwLCAiICIKK0hLUiwgTkRJXHBhcmFtc1xOZXR3b3JrQWRkcmVzcywgb3B0aW9uYWwsICAgMCwgIjEiCisKK1tTb3VyY2VEaXNrc05hbWVzXQorMT0lU291cmNlRGlzayUsLDEKKworW1NvdXJjZURpc2tzRmlsZXNdCit1c2I4MDIzbS5zeXM9MQorcm5kaXNtcG0uc3lzPTEKK3VzYjgwMjN3LnN5cz0xCitybmRpc21wdy5zeXM9MQordXNiODAyM2suc3lzPTEKK3JuZGlzbXBrLnN5cz0xCisKK1tEZXN0aW5hdGlvbkRpcnNdCitSTkRJU19Db3B5RmlsZXNfOTggICAgPSAxMCwgc3lzdGVtMzIvZHJpdmVycworUk5ESVNfQ29weUZpbGVzX01FICAgID0gMTAsIHN5c3RlbTMyL2RyaXZlcnMKK1JORElTX0NvcHlGaWxlc19OVCAgICA9IDEyCisKK1tTdHJpbmdzXQorU2VydmljZURpc3BsYXlOYW1lICAgID0gIlVTQiBSZW1vdGUgTkRJUyBOZXR3b3JrIERldmljZSBEcml2ZXIiCitOZXR3b3JrQWRkcmVzcyAgICAgICAgPSAiTmV0d29yayBBZGRyZXNzIgorTGludXggICAgICAgICAgICAgICAgID0gIkxpbnV4IERldmVsb3BlciBDb21tdW5pdHkiCitMaW51eERldmljZSAgICAgICAgICAgPSAiTGludXggVVNCIEV0aGVybmV0L1JORElTIEdhZGdldCIKK1NvdXJjZURpc2sgICAgICAgICAgICA9ICJFdGhlcm5ldC9STkRJUyBHYWRnZXQgRHJpdmVyIEluc3RhbGwgRGlzayIKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvbXRvdWNodXNiLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL210b3VjaHVzYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4MDZiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL210b3VjaHVzYi50eHQKQEAgLTAsMCArMSw3NiBAQAorQ0hBTkdFUworCistIDAuMyAtIENyZWF0ZWQgYmFzZWQgb2ZmIG9mIHNjYW5uZXIgJiBJTlNUQUxMIGZyb20gdGhlIG9yaWdpbmFsIHRvdWNoc2NyZWVuCisgIGRyaXZlciBvbiBmcmVzaG1lYXQgKGh0dHA6Ly9mcmVzaG1lYXQubmV0L3Byb2plY3RzLzNtdG91Y2hzY3JlZW5kcml2ZXIpCistIEFtZW5kZWQgZm9yIGxpbnV4LTIuNC4xOCwgdGhlbiAyLjQuMTkKKworLSAwLjUgLSBDb21wbGV0ZSByZXdyaXRlIHVzaW5nIExpbnV4IElucHV0IGluIDIuNi4zCisgICBVbmZvcnR1bmF0ZWx5IG5vIGNhbGlicmF0aW9uIHN1cHBvcnQgYXQgdGhpcyB0aW1lCisKKy0gMS40IC0gTXVsdGlwbGUgY2hhbmdlcyB0byBzdXBwb3J0IHRoZSBFWElJIDUwMDBVQyBhbmQgaG91c2UgY2xlYW5pbmcKKyAgIENoYW5nZWQgcmVzZXQgZnJvbSBzdGFuZGFyZCBVU0IgZGV2IHJlc2V0IHRvIHZlbmRvciByZXNldAorICAgQ2hhbmdlZCBkYXRhIHNlbnQgdG8gaG9zdCBmcm9tIGNvbXBlbnNhdGVkIHRvIHJhdyBjb29yZGluYXRlcworICAgRWxpbWluYXRlZCB2ZW5kb3IvcHJvZHVjdCBtb2R1bGUgcGFyYW1zCisgICBQZXJmb3JtZWQgbXVsdGlwbGUgc3VjY2Vzc2Z1bGwgdGVzdHMgd2l0aCBhbiBFWElJLTUwMTBVQworCitTVVBQT1JURUQgSEFSRFdBUkU6CisKKyAgICAgICAgQWxsIGNvbnRyb2xsZXJzIGhhdmUgdGhlIFZlbmRvcjogMHgwNTk2ICYgUHJvZHVjdDogMHgwMDAxCisKKworICAgICAgICBDb250cm9sbGVyIERlc2NyaXB0aW9uICAgICAgICAgIFBhcnQgTnVtYmVyCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFVTQiBDYXBhY2l0aXZlIC0gUGVhcmwgQ2FzZSAgICAgMTQtMjA1ICAoRGlzY29udGludWVkKQorICAgICAgICBVU0IgQ2FwYWNpdGl2ZSAtIEJsYWNrIENhc2UgICAgIDE0LTEyNCAgKERpc2NvbnRpbnVlZCkKKyAgICAgICAgVVNCIENhcGFjaXRpdmUgLSBObyBDYXNlICAgICAgICAxNC0yMDYgIChEaXNjb250aW51ZWQpCisKKyAgICAgICAgVVNCIENhcGFjaXRpdmUgLSBQZWFybCBDYXNlICAgICBFWElJLTUwMTBVQworICAgICAgICBVU0IgQ2FwYWNpdGl2ZSAtIEJsYWNrIENhc2UgICAgIEVYSUktNTAzMFVDCisgICAgICAgIFVTQiBDYXBhY2l0aXZlIC0gTm8gQ2FzZSAgICAgICAgRVhJSS01MDUwVUMKKworRFJJVkVSIE5PVEVTOgorCitJbnN0YWxsYXRpb24gaXMgc2ltcGxlLCB5b3Ugb25seSBuZWVkIHRvIGFkZCBMaW51eCBJbnB1dCwgTGludXggVVNCLCBhbmQgdGhlIAorZHJpdmVyIHRvIHRoZSBrZXJuZWwuICBUaGUgZHJpdmVyIGNhbiBhbHNvIGJlIG9wdGlvbmFsbHkgYnVpbHQgYXMgYSBtb2R1bGUuCisKK1RoaXMgZHJpdmVyIGFwcGVhcnMgdG8gYmUgb25lIG9mIHBvc3NpYmxlIDIgTGludXggVVNCIElucHV0IFRvdWNoc2NyZWVuCitkcml2ZXJzLiAgQWx0aG91Z2ggM00gcHJvZHVjZXMgYSBiaW5hcnkgb25seSBkcml2ZXIgYXZhaWxhYmxlIGZvcgorZG93bmxvYWQsIEkgcGVyc2lzdCBpbiB1cGRhdGluZyB0aGlzIGRyaXZlciBzaW5jZSBJIHdvdWxkIGxpa2UgdG8gdXNlIHRoZQordG91Y2hzY3JlZW4gZm9yIGVtYmVkZGVkIGFwcHMgdXNpbmcgUVRFbWJlZGRlZCwgRGlyZWN0RkIsIGV0Yy4gU28gSSBmZWVsIHRoZQorbG9naWNhbCBjaG9pY2UgaXMgdG8gdXNlIExpbnV4IEltcHV0LgorCitDdXJyZW50bHkgdGhlcmUgaXMgbm8gd2F5IHRvIGNhbGlicmF0ZSB0aGUgZGV2aWNlIHZpYSB0aGlzIGRyaXZlci4gIEV2ZW4gaWYKK3RoZSBkZXZpY2UgY291bGQgYmUgY2FsaWJyYXRlZCwgdGhlIGRyaXZlciBwdWxscyB0byByYXcgY29vcmRpbmF0ZSBkYXRhIGZyb20KK3RoZSBjb250cm9sbGVyLiAgVGhpcyBtZWFucyBjYWxpYnJhdGlvbiBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoaW4gdGhlCit1c2Vyc3BhY2UuCisKK1RoZSBjb250cm9sbGVyIHNjcmVlbiByZXNvbHV0aW9uIGlzIG5vdyAwIHRvIDE2Mzg0IGZvciBib3RoIFggYW5kIFkgcmVwb3J0aW5nCit0aGUgcmF3IHRvdWNoIGRhdGEuICBUaGlzIGlzIHRoZSBzYW1lIGZvciB0aGUgb2xkIGFuZCBuZXcgY2FwYWNpdGl2ZSBVU0IKK2NvbnRyb2xsZXJzLgorCitQZXJoYXBzIGF0IHNvbWUgcG9pbnQgYW4gYWJzdHJhY3QgZnVuY3Rpb24gd2lsbCBiZSBwbGFjZWQgaW50byBldmRldiBzbyAKK2dlbmVyaWMgZnVuY3Rpb25zIGxpa2UgY2FsaWJyYXRpb25zLCByZXNldHMsIGFuZCB2ZW5kb3IgaW5mb3JtYXRpb24gY2FuIGJlIAorcmVxdWVzdGVkIGZyb20gdGhlIHVzZXJzcGFjZSAoQW5kIHRoZSBkcml2ZXJzIHdvdWxkIGhhbmRsZSB0aGUgdmVuZG9yIHNwZWNpZmljCit0YXNrcykuCisKK0FERElUSU9OQUwgSU5GT1JNQVRJT04vVVBEQVRFUy9YIENPTkZJR1VSQVRJT04gRVhBTVBMRToKKworaHR0cDovL2dyb29tbGFrZWxhYnMuY29tL2dyYW5kYW1wL2NvZGUvbWljcm90b3VjaC8KKworVE9ETzoKKworSW1wbGVtZW50IGEgY29udHJvbCB1cmIgYWdhaW4gdG8gaGFuZGxlIHJlcXVlc3RzIHRvIGFuZCBmcm9tIHRoZSBkZXZpY2UKK3N1Y2ggYXMgY2FsaWJyYXRpb24sIGV0YyBvbmNlL2lmIGl0IGJlY29tZXMgYXZhaWxhYmxlLgorCitESVNDTEFNRVI6CisKK0kgYW0gbm90IGEgTWljcm9Ub3VjaC8zTSBlbXBsb3llZSwgbm9yIGhhdmUgSSBldmVyIGJlZW4uICAzTSBkb2VzIG5vdCBzdXBwb3J0IAordGhpcyBkcml2ZXIhICBJZiB5b3Ugd2FudCB0b3VjaCBkcml2ZXJzIG9ubHkgc3VwcG9ydGVkIHdpdGhpbiBYLCBwbGVhc2UgZ28gdG86CisKK2h0dHA6Ly93d3cuM20uY29tLzNNVG91Y2hTeXN0ZW1zL2Rvd25sb2Fkcy8KKworVEhBTktTOgorCitBIGh1Z2UgdGhhbmsgeW91IHRvIDNNIFRvdWNoIFN5c3RlbXMgZm9yIHRoZSBFWElJLTUwMTBVQyBjb250cm9sbGVycyBmb3IKK3Rlc3RpbmchCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9vaGNpLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL29oY2kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MzIwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9vaGNpLnR4dApAQCAtMCwwICsxLDMyIEBACisyMy1BdWctMjAwMgorCitUaGUgIm9oY2ktaGNkIiBkcml2ZXIgaXMgYSBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlciAoSENEKSB0aGF0IGlzIGRlcml2ZWQKK2Zyb20gdGhlICJ1c2Itb2hjaSIgZHJpdmVyIGZyb20gdGhlIDIuNCBrZXJuZWwgc2VyaWVzLiAgVGhlICJ1c2Itb2hjaSIgY29kZQord2FzIHdyaXR0ZW4gcHJpbWFyaWx5IGJ5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4gYnV0IHdpdGgKK2NvbnRyaWJ1dGlvbnMgZnJvbSBtYW55IG90aGVycyAocmVhZCBpdHMgY29weXJpZ2h0L2xpY2VuY2luZyBoZWFkZXIpLgorCitJdCBzdXBwb3J0cyB0aGUgIk9wZW4gSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSIgKE9IQ0kpLCB3aGljaCBzdGFuZGFyZGl6ZXMKK2hhcmR3YXJlIHJlZ2lzdGVyIHByb3RvY29scyB1c2VkIHRvIHRhbGsgdG8gVVNCIDEuMSBob3N0IGNvbnRyb2xsZXJzLiAgQXMKK2NvbXBhcmVkIHRvIHRoZSBlYXJsaWVyICJVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSIgKFVIQ0kpIGZyb20KK0ludGVsLCBpdCBwdXNoZXMgbW9yZSBpbnRlbGxpZ2VuY2UgaW50byB0aGUgaGFyZHdhcmUuICBVU0IgMS4xIGNvbnRyb2xsZXJzCitmcm9tIHZlbmRvcnMgb3RoZXIgdGhhbiBJbnRlbCBhbmQgVklBIGdlbmVyYWxseSB1c2UgT0hDSS4KKworQ2hhbmdlcyBzaW5jZSB0aGUgMi40IGtlcm5lbCBpbmNsdWRlCisKKwktIGltcHJvdmVkIHJvYnVzdG5lc3M7IGJ1Z2ZpeGVzOyBhbmQgbGVzcyBvdmVyaGVhZAorCS0gc3VwcG9ydHMgdGhlIHVwZGF0ZWQgYW5kIHNpbXBsaWZpZWQgdXNiY29yZSBBUElzCisJLSBpbnRlcnJ1cHQgdHJhbnNmZXJzIGNhbiBiZSBsYXJnZXIsIGFuZCBjYW4gYmUgcXVldWVkCisJLSBsZXNzIGNvZGUsIGJ5IHVzaW5nIHRoZSB1cHBlciBsZXZlbCAiaGNkIiBmcmFtZXdvcmsKKwktIHN1cHBvcnRzIHNvbWUgbm9uLVBDSSBpbXBsZW1lbnRhdGlvbnMgb2YgT0hDSQorCS0gLi4uIG1vcmUKKworVGhlICJvaGNpLWhjZCIgZHJpdmVyIGhhbmRsZXMgYWxsIFVTQiAxLjEgdHJhbnNmZXIgdHlwZXMuICBUcmFuc2ZlcnMgb2YgYWxsCit0eXBlcyBjYW4gYmUgcXVldWVkLiAgVGhhdCB3YXMgYWxzbyB0cnVlIGluICJ1c2Itb2hjaSIsIGV4Y2VwdCBmb3IgaW50ZXJydXB0Cit0cmFuc2ZlcnMuICBQcmV2aW91c2x5LCB1c2luZyBwZXJpb2RzIG9mIG9uZSBmcmFtZSB3b3VsZCByaXNrIGRhdGEgbG9zcyBkdWUKK3RvIG92ZXJoZWFkIGluIElSUSBwcm9jZXNzaW5nLiAgV2hlbiBpbnRlcnJ1cHQgdHJhbnNmZXJzIGFyZSBxdWV1ZWQsIHRob3NlCityaXNrcyBjYW4gYmUgbWluaW1pemVkIGJ5IG1ha2luZyBzdXJlIHRoZSBoYXJkd2FyZSBhbHdheXMgaGFzIHRyYW5zZmVycyB0bword29yayBvbiB3aGlsZSB0aGUgT1MgaXMgZ2V0dGluZyBhcm91bmQgdG8gdGhlIHJlbGV2YW50IElSUSBwcm9jZXNzaW5nLgorCistIERhdmlkIEJyb3duZWxsCisgIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5NzRlYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL292NTExLnR4dApAQCAtMCwwICsxLDI4OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVhZG1lIGZvciBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciB0aGUgT21uaVZpc2lvbiBPVjUxMSBVU0IgdG8gY2FtZXJhIGJyaWRnZSBJQworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBdXRob3I6IE1hcmsgTWNDbGVsbGFuZAorSG9tZXBhZ2U6IGh0dHA6Ly9hbHBoYS5keW5kbnMub3JnL292NTExCisKK0lOVFJPRFVDVElPTjoKKworVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIE9WNTExLCBhIFVTQi1vbmx5IGNoaXAgdXNlZCBpbiBtYW55ICJ3ZWJjYW0iIGRldmljZXMuCitBbnkgY2FtZXJhIHVzaW5nIHRoZSBPVjUxMS9PVjUxMSsgYW5kIHRoZSBPVjY2MjAvT1Y3NjEwLzIwLzIwQUUgc2hvdWxkIHdvcmsuCitWaWRlbyBjYXB0dXJlIGRldmljZXMgdGhhdCB1c2UgdGhlIFBoaWxpcHMgU0FBNzExMUEgZGVjb2RlciBhbHNvIHdvcmsuIEl0IAorc3VwcG9ydHMgc3RyZWFtaW5nIGFuZCBjYXB0dXJlIG9mIGNvbG9yIG9yIG1vbm9jaHJvbWUgdmlkZW8gdmlhIHRoZSBWaWRlbzRMaW51eAorQVBJLiBNb3N0IFY0TCBhcHBzIGFyZSBjb21wYXRpYmxlIHdpdGggaXQuIE1vc3QgcmVzb2x1dGlvbnMgd2l0aCBhIHdpZHRoIGFuZAoraGVpZ2h0IHRoYXQgYXJlIGEgbXVsdGlwbGUgb2YgOCBhcmUgc3VwcG9ydGVkLgorCitJZiB5b3UgbmVlZCBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlzaXQgdGhlIE9WNTExIGhvbWVwYWdlIGF0IHRoZSBhYm92ZSBVUkwuCisKK1dIQVQgWU9VIE5FRUQ6CisKKy0gSWYgeW91IHdhbnQgdG8gaGVscCB3aXRoIHRoZSBkZXZlbG9wbWVudCwgZ2V0IHRoZSBjaGlwJ3Mgc3BlY2lmaWNhdGlvbiBkb2NzIGF0CisgIGh0dHA6Ly93d3cub3Z0LmNvbS9vbW5pdXNicC5odG1sCisKKy0gQSBWaWRlbzRMaW51eCBjb21wYXRpYmxlIGZyYW1lIGdyYWJiZXIgcHJvZ3JhbSAoSSByZWNvbW1lbmQgdmlkY2F0IGFuZCB4YXd0dikKKyAgICB2aWRjYXQgaXMgcGFydCBvZiB0aGUgdzNjYW0gcGFja2FnZTogIGh0dHA6Ly93d3cuaGRrLWJlcmxpbi5kZS9+cmFzY2EvdzNjYW0vCisgICAgeGF3dHYgaXMgYXZhaWxhYmxlIGF0OiAgaHR0cDovL3d3dy5pbi1iZXJsaW4uZGUvVXNlci9rcmF4ZWwveGF3dHYuaHRtbAorCitIT1cgVE8gVVNFIElUOgorCitOb3RlOiBUaGVzZSBhcmUgc2ltcGxpZmllZCBpbnN0cnVjdGlvbnMuIEZvciBjb21wbGV0ZSBpbnN0cnVjdGlvbnMgc2VlOgorCWh0dHA6Ly9hbHBoYS5keW5kbnMub3JnL292NTExL2luc3RhbGwuaHRtbAorCitZb3UgbXVzdCBoYXZlIGZpcnN0IGNvbXBpbGVkIFVTQiBzdXBwb3J0LCBzdXBwb3J0IGZvciB5b3VyIHNwZWNpZmljIFVTQiBob3N0Citjb250cm9sbGVyIChVSENJIG9yIE9IQ0kpLCBhbmQgVmlkZW80TGludXggc3VwcG9ydCBmb3IgeW91ciBrZXJuZWwgKEkgcmVjb21tZW5kCittYWtpbmcgdGhlbSBtb2R1bGVzLikgTWFrZSBzdXJlICJFbmZvcmNlIGJhbmR3aWR0aCBhbGxvY2F0aW9uIiBpcyBOT1QgZW5hYmxlZC4KKworTmV4dCwgKGFzIHJvb3QpOgorCisJbW9kcHJvYmUgdXNiY29yZQorCW1vZHByb2JlIHVzYi11aGNpICA8T1I+ICBtb2Rwcm9iZSB1c2Itb2hjaQorCW1vZHByb2JlIHZpZGVvZGV2CisJbW9kcHJvYmUgb3Y1MTEKKworSWYgaXQgaXMgbm90IGFscmVhZHkgdGhlcmUgKGl0IHVzdWFsbHkgaXMpLCBjcmVhdGUgdGhlIHZpZGVvIGRldmljZToKKworCW1rbm9kIC9kZXYvdmlkZW8wIGMgODEgMAorCitPcHRpb25hbGx5LCBzeW1saW5rIC9kZXYvdmlkZW8gdG8gL2Rldi92aWRlbzAKKworWW91IHdpbGwgaGF2ZSB0byBzZXQgcGVybWlzc2lvbnMgb24gdGhpcyBkZXZpY2UgdG8gYWxsb3cgeW91IHRvIHJlYWQvd3JpdGUKK2Zyb20gaXQ6CisKKwljaG1vZCA2NjYgL2Rldi92aWRlbworCWNobW9kIDY2NiAvZGV2L3ZpZGVvMCAoaWYgbmVjZXNzYXJ5KQorCQorTm93IHlvdSBhcmUgcmVhZHkgdG8gcnVuIGEgdmlkZW8gYXBwISBCb3RoIHZpZGNhdCBhbmQgeGF3dHYgd29yayB3ZWxsIGZvciBtZQorYXQgNjQweDQ4MC4KKwkKK1tVc2luZyB2aWRjYXQ6XQorCisJdmlkY2F0IC1zIDY0MHg0ODAgLXAgYyA+IHRlc3QuanBnCisJeHZpZXcgdGVzdC5qcGcKKwkKK1tVc2luZyB4YXd0djpdCisKK0Zyb20gdGhlIG1haW4geGF3dHYgZGlyZWN0b3J5OgorCisJbWFrZSBjbGVhbgorCS4vY29uZmlndXJlCisJbWFrZQorCW1ha2UgaW5zdGFsbAorCitOb3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIHJ1biB4YXd0di4gUmlnaHQgY2xpY2sgZm9yIHRoZSBvcHRpb25zIGRpYWxvZy4gCisKK01PRFVMRSBQQVJBTUVURVJTOgorCisgIFlvdSBjYW4gc2V0IHRoZXNlIHdpdGg6ICBpbnNtb2Qgb3Y1MTEgTkFNRT1WQUxVRQorICBUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIHNldCB0aGVzZSBvbiBhIHBlci1jYW1lcmEgYmFzaXMuCisKKyAgTkFNRTogYXV0b2JyaWdodAorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAxCisgIERFU0M6IEJyaWdodG5lc3MgaXMgbm9ybWFsbHkgdW5kZXIgYXV0b21hdGljIGNvbnRyb2wgYW5kIGNhbid0IGJlIHNldAorICAgICAgICBtYW51YWxseSBieSB0aGUgdmlkZW8gYXBwLiBTZXQgdG8gMCBmb3IgbWFudWFsIGNvbnRyb2wuCisKKyAgTkFNRTogYXV0b2dhaW4KKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMQorICBERVNDOiBBdXRvIEdhaW4gQ29udHJvbCBlbmFibGUuIFRoaXMgZmVhdHVyZSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgIE5BTUU6IGF1dG9leHAKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMQorICBERVNDOiBBdXRvIEV4cG9zdXJlIENvbnRyb2wgZW5hYmxlLiBUaGlzIGZlYXR1cmUgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKworICBOQU1FOiBkZWJ1ZworICBUWVBFOiBpbnRlZ2VyICgwLTYpCisgIERFRkFVTFQ6IDMKKyAgREVTQzogU2V0cyB0aGUgdGhyZXNob2xkIGZvciBwcmludGluZyBkZWJ1ZyBtZXNzYWdlcy4gVGhlIGhpZ2hlciB0aGUgdmFsdWUsCisgICAgICAgIHRoZSBtb3JlIGlzIHByaW50ZWQuIFRoZSBsZXZlbHMgYXJlIGN1bXVsYXRpdmUsIGFuZCBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAwPW5vIGRlYnVnIG1lc3NhZ2VzCisgICAgICAgICAgMT1pbml0L2RldGVjdGlvbi91bmxvYWQgYW5kIG90aGVyIHNpZ25pZmljYW50IG1lc3NhZ2VzCisgICAgICAgICAgMj1zb21lIHdhcm5pbmcgbWVzc2FnZXMKKyAgICAgICAgICAzPWNvbmZpZy9jb250cm9sIGZ1bmN0aW9uIGNhbGxzCisgICAgICAgICAgND1tb3N0IGZ1bmN0aW9uIGNhbGxzIGFuZCBkYXRhIHBhcnNpbmcgbWVzc2FnZXMKKyAgICAgICAgICA1PWhpZ2hseSByZXBldGl0aXZlIG1lc2dzCisKKyAgTkFNRTogc25hcHNob3QKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMAorICBERVNDOiBTZXQgdG8gMSB0byBlbmFibGUgc25hcHNob3QgbW9kZS4gcmVhZCgpL1ZJRElPQ1NZTkMgd2lsbCBibG9jayB1bnRpbAorCXRoZSBzbmFwc2hvdCBidXR0b24gaXMgcHJlc3NlZC4gTm90ZTogZW5hYmxpbmcgdGhpcyBtb2RlIGRpc2FibGVzCisJL3Byb2MvdmlkZW8vb3Y1MTEvPG1pbm9yIz4vYnV0dG9uCisKKyAgTkFNRTogY2FtcworICBUWVBFOiBpbnRlZ2VyICgxLTQgZm9yIE9WNTExLCAxLTMxIGZvciBPVjUxMSspCisgIERFRkFVTFQ6IDEKKyAgREVTQzogTnVtYmVyIG9mIGNhbWVyYXMgYWxsb3dlZCB0byBzdHJlYW0gc2ltdWx0YW5lb3VzbHkgb24gYSBzaW5nbGUgYnVzLgorICAgICAgICBWYWx1ZXMgaGlnaGVyIHRoYW4gMSByZWR1Y2UgdGhlIGRhdGEgcmF0ZSBvZiBlYWNoIGNhbWVyYSwgYWxsb3dpbmcgdHdvCisgICAgICAgIG9yIG1vcmUgdG8gYmUgdXNlZCBhdCBvbmNlLiBJZiB5b3UgaGF2ZSBhIGNvbXBsaWNhdGVkIHNldHVwIGludm9sdmluZworICAgICAgICBib3RoIE9WNTExIGFuZCBPVjUxMSsgY2FtZXJhcywgdHJpYWwtYW5kLWVycm9yIG1heSBiZSBuZWNlc3NhcnkgZm9yCisgICAgICAgIGZpbmRpbmcgdGhlIG9wdGltdW0gc2V0dGluZy4KKworICBOQU1FOiBjb21wcmVzcworICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwCisgIERFU0M6IFNldCB0aGlzIHRvIDEgdG8gdHVybiBvbiB0aGUgY2FtZXJhJ3MgY29tcHJlc3Npb24gZW5naW5lLiBUaGlzIGNhbgorICAgICAgICBwb3RlbnRpYWxseSBpbmNyZWFzZSB0aGUgZnJhbWUgcmF0ZSBhdCB0aGUgZXhwZW5zZSBvZiBxdWFsaXR5LCBpZiB5b3UKKyAgICAgICAgaGF2ZSBhIGZhc3QgQ1BVLiBZb3UgbXVzdCBsb2FkIHRoZSBwcm9wZXIgY29tcHJlc3Npb24gbW9kdWxlIGZvciB5b3VyCisgICAgICAgIGNhbWVyYSBiZWZvcmUgc3RhcnRpbmcgeW91ciBhcHBsaWNhdGlvbiAob3Y1MTFfZGVjb21wIG9yIG92NTE4X2RlY29tcCkuCisKKyAgTkFNRTogdGVzdHBhdAorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwCisgIERFU0M6IFRoaXMgY29uZmlndXJlcyB0aGUgY2FtZXJhJ3Mgc2Vuc29yIHRvIHRyYW5zbWl0IGEgY29sb3JlZCB0ZXN0LXBhdHRlcm4KKyAgICAgICAgaW5zdGVhZCBvZiBhbiBpbWFnZS4gVGhpcyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSB5ZXQuCisKKyAgTkFNRTogZHVtcHBpeAorICBUWVBFOiBpbnRlZ2VyICgwLTIpCisgIERFRkFVTFQ6IDAKKyAgREVTQzogRHVtcHMgcmF3IHBpeGVsIGRhdGEgYW5kIHNraXBzIHBvc3QtcHJvY2Vzc2luZyBhbmQgZm9ybWF0IGNvbnZlcnNpb24uCisJSXQgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBvbmx5LiBPcHRpb25zIGFyZToKKwkJMDogRGlzYWJsZSAoZGVmYXVsdCkKKwkJMTogRHVtcCByYXcgZGF0YSBmcm9tIGNhbWVyYSwgZXhjbHVkaW5nIGhlYWRlcnMgYW5kIHRyYWlsZXJzCisJCTI6IER1bXBzIGRhdGEgZXhhY3RseSBhcyByZWNlaXZlZCBmcm9tIGNhbWVyYQorCisgIE5BTUU6IGxlZAorICBUWVBFOiBpbnRlZ2VyICgwLTIpCisgIERFRkFVTFQ6IDEgKEFsd2F5cyBvbikKKyAgREVTQzogQ29udHJvbHMgd2hldGhlciB0aGUgTEVEICh0aGUgbGl0dGxlIGxpZ2h0KSBvbiB0aGUgZnJvbnQgb2YgdGhlIGNhbWVyYQorCWlzIGFsd2F5cyBvZmYgKDApLCBhbHdheXMgb24gKDEpLCBvciBvbmx5IG9uIHdoZW4gZHJpdmVyIGlzIG9wZW4gKDIpLgorCVRoaXMgaXMgbm90IHN1cHBvcnRlZCB3aXRoIHRoZSBPVjUxMSwgYW5kIG1pZ2h0IG9ubHkgd29yayB3aXRoIGNlcnRhaW4KKwljYW1lcmFzIChvbmVzIHRoYXQgYWN0dWFsbHkgaGF2ZSB0aGUgTEVEIHdpcmVkIHRvIHRoZSBjb250cm9sIHBpbiwgYW5kCisJbm90IGp1c3QgaGFyZC13aXJlZCB0byBiZSBvbiBhbGwgdGhlIHRpbWUpLgorCisgIE5BTUU6IGR1bXBfYnJpZGdlCisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAKKyAgREVTQzogRHVtcHMgdGhlIGJyaWRnZSAoT1Y1MTFbK10gb3IgT1Y1MThbK10pIHJlZ2lzdGVyIHZhbHVlcyB0byB0aGUgc3lzdGVtCisJbG9nLiBPbmx5IHVzZWZ1bCBmb3Igc2VyaW91cyBkZWJ1Z2dpbmcvZGV2ZWxvcG1lbnQgcHVycG9zZXMuCisKKyAgTkFNRTogZHVtcF9zZW5zb3IKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMAorICBERVNDOiBEdW1wcyB0aGUgc2Vuc29yIHJlZ2lzdGVyIHZhbHVlcyB0byB0aGUgc3lzdGVtIGxvZy4gT25seSB1c2VmdWwgZm9yCisJc2VyaW91cyBkZWJ1Z2dpbmcvZGV2ZWxvcG1lbnQgcHVycG9zZXMuCisKKyAgTkFNRTogcHJpbnRwaAorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwCisgIERFU0M6IFNldHRpbmcgdGhpcyB0byAxIHdpbGwgZHVtcCB0aGUgZmlyc3QgMTIgYnl0ZXMgb2YgZWFjaCBpc29jIGZyYW1lLiBUaGlzCisJaXMgb25seSB1c2VmdWwgaWYgeW91IGFyZSB0cnlpbmcgdG8gZGVidWcgcHJvYmxlbXMgd2l0aCB0aGUgaXNvYyBkYXRhCisJc3RyZWFtIChpLmUuOiBjYW1lcmEgaW5pdGlhbGl6ZXMsIGJ1dCB2aWRjYXQgaGFuZ3MgdW50aWwgQ3RybC1DKS4gQmUKKwl3YXJuZWQgdGhhdCB0aGlzIGR1bXBzIGEgbGFyZ2UgbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHlvdXIga2VybmVsIGxvZy4KKworICBOQU1FOiBwaHksIHBodXYsIHB2eSwgcHZ1diwgcWh5LCBxaHV2LCBxdnksIHF2dXYKKyAgVFlQRTogaW50ZWdlciAoMC02MyBmb3IgcGh5IGFuZCBwaHV2LCAwLTI1NSBmb3IgcmVzdCkKKyAgREVGQVVMVDogT1Y1MTEgZGVmYXVsdCB2YWx1ZXMKKyAgREVTQzogVGhlc2UgYXJlIHJlZ2lzdGVycyA3MGggLSA3N2ggb2YgdGhlIE9WNTExLCB3aGljaCBjb250cm9sIHRoZQorCXByZWRpY3Rpb24gcmFuZ2VzIGFuZCBxdWFudGl6YXRpb24gdGhyZXNob2xkcyBvZiB0aGUgY29tcHJlc3NvciwgZm9yCisJdGhlIFkgYW5kIFVWIGNoYW5uZWxzIGluIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBkaXJlY3Rpb25zLiBTZWUKKwl0aGUgT1Y1MTEgb3IgT1Y1MTErIGRhdGEgc2hlZXQgZm9yIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb25zLiBUaGVzZQorCW5vcm1hbGx5IGRvIG5vdCBuZWVkIHRvIGJlIGNoYW5nZWQuCisKKyAgTkFNRTogbGlnaHRmcmVxCisgIFRZUEU6IGludGVnZXIgKDAsIDUwLCBvciA2MCkKKyAgREVGQVVMVDogMCAodXNlIHNlbnNvciBkZWZhdWx0KQorICBERVNDOiBTZXRzIHRoZSBzZW5zb3IgdG8gbWF0Y2ggeW91ciBsaWdodGluZyBmcmVxdWVuY3kuIFRoaXMgY2FuIHJlZHVjZSB0aGUKKwlhcHBlYXJhbmNlIG9mICJiYW5kaW5nIiwgaS5lLiBob3Jpem9udGFsIGxpbmVzIG9yIHdhdmVzIG9mIGxpZ2h0IGFuZAorCWRhcmsgdGhhdCBhcmUgb2Z0ZW4gY2F1c2VkIGJ5IGFydGlmaWNpYWwgbGlnaHRpbmcuIFZhbGlkIHZhbHVlcyBhcmU6CisJCTAgLSBVc2UgZGVmYXVsdCAoZGVwZW5kcyBvbiBzZW5zb3IsIG1vc3QgbGlrZWx5IDYwIEh6KQorCQk1MCAtIEZvciBFdXJvcGVhbiBhbmQgQXNpYW4gNTAgSHogcG93ZXIKKwkJNjAgLSBGb3IgQW1lcmljYW4gNjAgSHogcG93ZXIKKworICBOQU1FOiBiYW5kaW5nZmlsdGVyCisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAgKG9mZikKKyAgREVTQzogRW5hYmxlcyB0aGUgc2Vuc29ytHMgYmFuZGluZyBmaWx0ZXIgZXhwb3N1cmUgYWxnb3JpdGhtLiBUaGlzIHJlZHVjZXMKKwlvciBzdGFiaWxpemVzIHRoZSAiYmFuZGluZyIgY2F1c2VkIGJ5IHNvbWUgYXJ0aWZpY2lhbCBsaWdodCBzb3VyY2VzCisJKGVzcGVjaWFsbHkgZmx1b3Jlc2NlbnQpLiBZb3UgbWlnaHQgaGF2ZSB0byBzZXQgbGlnaHRmcmVxIGNvcnJlY3RseSBmb3IKKwl0aGlzIHRvIHdvcmsgcmlnaHQuIEFzIGFuIGFkZGVkIGJvbnVzLCB0aGlzIHNvbWV0aW1lcyBtYWtlcyBpdAorCXBvc3NpYmxlIHRvIGNhcHR1cmUgeW91ciBtb25pdG9ytHMgb3V0cHV0LgorCisgIE5BTUU6IGZhc3RzZXQKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMCAob2ZmKQorICBERVNDOiBBbGxvd3MgcGljdHVyZSBzZXR0aW5ncyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIGNvbG9yLCBhbmQgaHVlKSB0byB0YWtlCisJZWZmZWN0IGltbWVkaWF0ZWx5LCBldmVuIGluIHRoZSBtaWRkbGUgb2YgYSBmcmFtZS4gVGhpcyByZWR1Y2VzIHRoZQorCXRpbWUgdG8gY2hhbmdlIHNldHRpbmdzLCBidXQgY2FuIHJ1aW4gZnJhbWVzIGR1cmluZyB0aGUgY2hhbmdlLiBPbmx5CisJYWZmZWN0cyBPbW5pVmlzaW9uIHNlbnNvcnMuCisKKyAgTkFNRTogZm9yY2VfcGFsZXR0ZQorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwIChvZmYpCisgIERFU0M6IEZvcmNlcyB0aGUgcGFsZXR0ZSAoY29sb3IgZm9ybWF0KSB0byBhIHNwZWNpZmljIHZhbHVlLiBJZiBhbgorCWFwcGxpY2F0aW9uIHJlcXVlc3RzIGEgZGlmZmVyZW50IHBhbGV0dGUsIGl0IHdpbGwgYmUgcmVqZWN0ZWQsIHRoZXJlYnkKKwlmb3JjaW5nIGl0IHRvIHRyeSBvdGhlcnMgdW50aWwgaXQgc3VjY2VlZHMuIFRoaXMgaXMgdXNlZnVsIGZvciBmb3JjaW5nCisJZ3JleXNjYWxlIG1vZGUgd2l0aCBhIGNvbG9yIGNhbWVyYSwgZm9yIGV4YW1wbGUuIFN1cHBvcnRlZCBtb2RlcyBhcmU6CisJCTAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQWxsb3dzIGFsbCB0aGUgZm9sbG93aW5nIGZvcm1hdHMpCisJCTEgICBWSURFT19QQUxFVFRFX0dSRVkgICAgICAoTGluZWFyIGdyZXlzY2FsZSkKKwkJMTAgIFZJREVPX1BBTEVUVEVfWVVWNDIwICAgIChZVVYgNDoyOjAgUGxhbmFyKQorCQkxNSAgVklERU9fUEFMRVRURV9ZVVY0MjBQICAgKFlVViA0OjI6MCBQbGFuYXIsIHNhbWUgYXMgMTApCisKKyAgTkFNRTogYmFja2xpZ2h0CisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAgKG9mZikKKyAgREVTQzogU2V0dGluZyB0aGlzIGZsYWcgY2hhbmdlcyB0aGUgZXhwb3N1cmUgYWxnb3JpdGhtIGZvciBPbW5pVmlzaW9uIHNlbnNvcnMKKwlzdWNoIHRoYXQgb2JqZWN0cyBpbiB0aGUgY2FtZXJhJ3MgdmlldyAoaS5lLiB5b3VyIGhlYWQpIGNhbiBiZSBjbGVhcmx5CisJc2VlbiB3aGVuIHRoZXkgYXJlIGlsbHVtaW5hdGVkIGZyb20gYmVoaW5kLiBJdCByZWR1Y2VzIG9yIGVsaW1pbmF0ZXMKKwl0aGUgc2Vuc29yJ3MgYXV0by1leHBvc3VyZSBmdW5jdGlvbiwgc28gaXQgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuCisJbmVlZGVkLiBBZGRpdGlvbmFsbHksIGl0IGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggdGhlIE9WNjYyMCBhbmQgT1Y3NjIwLgorCisgIE5BTUU6IHVuaXRfdmlkZW8KKyAgVFlQRTogVXAgdG8gMTYgY29tbWEtc2VwYXJhdGVkIGludGVnZXJzCisgIERFRkFVTFQ6IDAsMCwwLi4uIChhdXRvbWF0aWNhbGx5IGFzc2lnbiB0aGUgbmV4dCBhdmFpbGFibGUgbWlub3IocykpCisgIERFU0M6IFlvdSBjYW4gc3BlY2lmeSB1cCB0byAxNiBtaW5vciBudW1iZXJzIHRvIGJlIGFzc2lnbmVkIHRvIG92NTExIGRldmljZXMuCisJRm9yIGV4YW1wbGUsICJ1bml0X3ZpZGVvPTEsMyIgd2lsbCBtYWtlIHRoZSBkcml2ZXIgdXNlIC9kZXYvdmlkZW8xIGFuZAorCS9kZXYvdmlkZW8zIGZvciB0aGUgZmlyc3QgdHdvIGRldmljZXMgaXQgZGV0ZWN0cy4gQWRkaXRpb25hbCBkZXZpY2VzCisJd2lsbCBiZSBhc3NpZ25lZCBhdXRvbWF0aWNhbGx5IHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBhdmFpbGFibGUgZGV2aWNlCisJbm9kZSAoL2Rldi92aWRlbzAgaW4gdGhpcyBjYXNlKS4gTm90ZSB0aGF0IHlvdSBjYW5ub3Qgc3BlY2lmeSAwIGFzIGEKKwltaW5vciBudW1iZXIuIFRoaXMgZmVhdHVyZSByZXF1aXJlcyBrZXJuZWwgdmVyc2lvbiAyLjQuNSBvciBoaWdoZXIuCisKKyAgTkFNRTogcmVtb3ZlX3plcm9zCisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAgKGRvIG5vdCBza2lwIGFueSBpbmNvbWluZyBkYXRhKQorICBERVNDOiBTZXR0aW5nIHRoaXMgdG8gMSB3aWxsIHJlbW92ZSB6ZXJvLXBhZGRpbmcgZnJvbSBpbmNvbWluZyBkYXRhLiBUaGlzCisJd2lsbCBjb21wZW5zYXRlIGZvciB0aGUgYmxvY2tzIG9mIGNvcnJ1cHRpb24gdGhhdCBjYW4gYXBwZWFyIHdoZW4gdGhlCisJY2FtZXJhIGNhbm5vdCBrZWVwIHVwIHdpdGggdGhlIHNwZWVkIG9mIHRoZSBVU0IgYnVzIChlZy4gYXQgbG93IGZyYW1lCisJcmVzb2x1dGlvbnMpLiBUaGlzIGZlYXR1cmUgaXMgYWx3YXlzIGVuYWJsZWQgd2hlbiBjb21wcmVzc2lvbiBpcyBvbi4KKworICBOQU1FOiBtaXJyb3IKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMCAob2ZmKQorICBERVNDOiBTZXR0aW5nIHRoaXMgdG8gMSB3aWxsIHJldmVyc2UgKCJtaXJyb3IiKSB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5LiBUaGlzCisJbWlnaHQgYmUgbmVjZXNzYXJ5IGlmIHlvdXIgY2FtZXJhIGhhcyBhIGN1c3RvbSBsZW5zIGFzc2VtYmx5LiBUaGlzIGhhcworCW5vIGVmZmVjdCB3aXRoIHZpZGVvIGNhcHR1cmUgZGV2aWNlcy4KKworICBOQU1FOiBvdjUxOF9jb2xvcgorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwIChvZmYpCisgIERFU0M6IEVuYWJsZSBPVjUxOCBjb2xvciBzdXBwb3J0LiBUaGlzIGlzIG9mZiBieSBkZWZhdWx0IHNpbmNlIGl0IGRvZXNuJ3QKKwl3b3JrIG1vc3Qgb2YgdGhlIHRpbWUuIElmIHlvdSB3YW50IHRvIHRyeSBpdCwgeW91IG11c3QgYWxzbyBsb2FkCisJb3Y1MThfZGVjb21wIHdpdGggdGhlICJub3V2PTAiIHBhcmFtZXRlci4gSWYgeW91IGdldCBpbXByb3BlciBjb2xvcnMgb3IKKwlkaWFnb25hbCBsaW5lcyB0aHJvdWdoIHRoZSBpbWFnZSwgcmVzdGFydCB5b3VyIHZpZGVvIGFwcCBhbmQgdHJ5IGFnYWluLgorCVJlcGVhdCBhcyBuZWNlc3NhcnkuCisKK1dPUktJTkcgRkVBVFVSRVM6CisgbyBDb2xvciBzdHJlYW1pbmcvY2FwdHVyZSBhdCBtb3N0IHdpZHRocyBhbmQgaGVpZ2h0cyB0aGF0IGFyZSBtdWx0aXBsZXMgb2YgOC4KKyBvIE1vbm9jaHJvbWUgKHVzZSBmb3JjZV9wYWxldHRlPTEgdG8gZW5hYmxlKQorIG8gU2V0dGluZy9nZXR0aW5nIG9mIHNhdHVyYXRpb24sIGNvbnRyYXN0LCBicmlnaHRuZXNzLCBhbmQgaHVlIChvbmx5IHNvbWUgb2YKKyAgIHRoZW0gd29yayB0aGUgT1Y3NjIwIGFuZCBPVjc2MjBBRSkKKyBvIC9wcm9jIHN0YXR1cyByZXBvcnRpbmcKKyBvIFNBQTcxMTFBIHZpZGVvIGNhcHR1cmUgc3VwcG9ydCBhdCAzMjB4MjQwIGFuZCA2NDB4NDgwCisgbyBDb21wcmVzc2lvbiBzdXBwb3J0CisgbyBTTVAgY29tcGF0aWJpbGl0eQorCitIT1cgVE8gQ09OVEFDVCBNRToKKworWW91IGNhbiBlbWFpbCBtZSBhdCBtYXJrQGFscGhhLmR5bmRucy5vcmcgLiBQbGVhc2UgcHJlZml4IHRoZSBzdWJqZWN0IGxpbmUKK3dpdGggIk9WNTExOiAiIHNvIHRoYXQgSSBhbSBjZXJ0YWluIHRvIG5vdGljZSB5b3VyIG1lc3NhZ2UuCisKK0NSRURJVFM6CisKK1RoZSBjb2RlIGlzIGJhc2VkIGluIG5vIHNtYWxsIHBhcnQgb24gdGhlIENQaUEgZHJpdmVyIGJ5IEpvaGFubmVzIEVyZGZlbHQsCitSYW5keSBEdW5sYXAsIGFuZCBvdGhlcnMuIEJpZyB0aGFua3MgdG8gdGhlbSBmb3IgdGhlaXIgcGlvbmVlcmluZyB3b3JrIG9uIHRoYXQKK2FuZCB0aGUgVVNCIHN0YWNrLiBUaGFua3MgdG8gQnJldCBXYWxsYWNoIGZvciBnZXR0aW5nIGNhbWVyYSByZWcgSU8sIElTT0MsIGFuZAoraW1hZ2UgY2FwdHVyZSB3b3JraW5nLiBUaGFua3MgdG8gT3Jpb24gU2t5IExhd2xvciwgS2V2aW4gTW9vcmUsIGFuZCBDbGF1ZGlvCitNYXRzdW9rYSBmb3IgdGhlaXIgd29yayBhcyB3ZWxsLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9wcm9jX3VzYl9pbmZvLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3Byb2NfdXNiX2luZm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOWM3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9wcm9jX3VzYl9pbmZvLnR4dApAQCAtMCwwICsxLDM3MSBAQAorL3Byb2MvYnVzL3VzYiBmaWxlc3lzdGVtIG91dHB1dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKHZlcnNpb24gMjAwMy4wNS4zMCkKKworCitUaGUgdXNiZnMgZmlsZXN5c3RlbSBmb3IgVVNCIGRldmljZXMgaXMgdHJhZGl0aW9uYWxseSBtb3VudGVkIGF0CisvcHJvYy9idXMvdXNiLiAgSXQgcHJvdmlkZXMgdGhlIC9wcm9jL2J1cy91c2IvZGV2aWNlcyBmaWxlLCBhcyB3ZWxsIGFzCit0aGUgL3Byb2MvYnVzL3VzYi9CQkIvREREIGZpbGVzLgorCisKKyoqTk9URSoqOiBJZiAvcHJvYy9idXMvdXNiIGFwcGVhcnMgZW1wdHksIGFuZCBhIGhvc3QgY29udHJvbGxlcgorCSAgZHJpdmVyIGhhcyBiZWVuIGxpbmtlZCwgdGhlbiB5b3UgbmVlZCB0byBtb3VudCB0aGUKKwkgIGZpbGVzeXN0ZW0uICBJc3N1ZSB0aGUgY29tbWFuZCAoYXMgcm9vdCk6CisKKyAgICAgIG1vdW50IC10IHVzYmZzIG5vbmUgL3Byb2MvYnVzL3VzYgorCisJICBBbiBhbHRlcm5hdGl2ZSBhbmQgbW9yZSBwZXJtYW5lbnQgbWV0aG9kIHdvdWxkIGJlIHRvIGFkZAorCisgICAgICBub25lICAvcHJvYy9idXMvdXNiICB1c2JmcyAgZGVmYXVsdHMgIDAgIDAKKworCSAgdG8gL2V0Yy9mc3RhYi4gIFRoaXMgd2lsbCBtb3VudCB1c2JmcyBhdCBlYWNoIHJlYm9vdC4KKwkgIFlvdSBjYW4gdGhlbiBpc3N1ZSBgY2F0IC9wcm9jL2J1cy91c2IvZGV2aWNlc2AgdG8gZXh0cmFjdAorCSAgVVNCIGRldmljZSBpbmZvcm1hdGlvbiwgYW5kIHVzZXIgbW9kZSBkcml2ZXJzIGNhbiB1c2UgdXNiZnMgCisJICB0byBpbnRlcmFjdCB3aXRoIFVTQiBkZXZpY2VzLgorCisJICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW91bnQgb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdXNiZnMuCisJICBDb25zdWx0IHRoZSBzb3VyY2UgY29kZSAobGludXgvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jKSBmb3IKKwkgIGluZm9ybWF0aW9uIGFib3V0IHRob3NlIG9wdGlvbnMuCisKKyoqTk9URSoqOiBUaGUgZmlsZXN5c3RlbSBoYXMgYmVlbiByZW5hbWVkIGZyb20gInVzYmRldmZzIiB0bworCSAgInVzYmZzIiwgdG8gcmVkdWNlIGNvbmZ1c2lvbiB3aXRoICJkZXZmcyIuICBZb3UgbWF5CisJICBzdGlsbCBzZWUgcmVmZXJlbmNlcyB0byB0aGUgb2xkZXIgInVzYmRldmZzIiBuYW1lLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBtb3VudGluZyB0aGUgdXNiZnMgZmlsZSBzeXN0ZW0sIHNlZSB0aGUKKyJVU0IgRGV2aWNlIEZpbGVzeXN0ZW0iIHNlY3Rpb24gb2YgdGhlIFVTQiBHdWlkZS4gVGhlIGxhdGVzdCBjb3B5IAorb2YgdGhlIFVTQiBHdWlkZSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5saW51eC11c2Iub3JnLworCisKK1RIRSAvcHJvYy9idXMvdXNiL0JCQi9EREQgRklMRVM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRWFjaCBjb25uZWN0ZWQgVVNCIGRldmljZSBoYXMgb25lIGZpbGUuICBUaGUgQkJCIGluZGljYXRlcyB0aGUgYnVzCitudW1iZXIuICBUaGUgREREIGluZGljYXRlcyB0aGUgZGV2aWNlIGFkZHJlc3Mgb24gdGhhdCBidXMuICBCb3RoCitvZiB0aGVzZSBudW1iZXJzIGFyZSBhc3NpZ25lZCBzZXF1ZW50aWFsbHksIGFuZCBjYW4gYmUgcmV1c2VkLCBzbworeW91IGNhbid0IHJlbHkgb24gdGhlbSBmb3Igc3RhYmxlIGFjY2VzcyB0byBkZXZpY2VzLiAgRm9yIGV4YW1wbGUsCitpdCdzIHJlbGF0aXZlbHkgY29tbW9uIGZvciBkZXZpY2VzIHRvIHJlLWVudW1lcmF0ZSB3aGlsZSB0aGV5IGFyZQorc3RpbGwgY29ubmVjdGVkIChwZXJoYXBzIHNvbWVvbmUgam9zdGxlZCB0aGVpciBwb3dlciBzdXBwbHksIGh1YiwKK29yIFVTQiBjYWJsZSksIHNvIGEgZGV2aWNlIG1pZ2h0IGJlIDAwMi8wMjcgd2hlbiB5b3UgZmlyc3QgY29ubmVjdAoraXQgYW5kIDAwMi8wNDggc29tZXRpbWUgbGF0ZXIuCisKK1RoZXNlIGZpbGVzIGNhbiBiZSByZWFkIGFzIGJpbmFyeSBkYXRhLiAgVGhlIGJpbmFyeSBkYXRhIGNvbnNpc3RzCitvZiBmaXJzdCB0aGUgZGV2aWNlIGRlc2NyaXB0b3IsIHRoZW4gdGhlIGRlc2NyaXB0b3JzIGZvciBlYWNoCitjb25maWd1cmF0aW9uIG9mIHRoZSBkZXZpY2UuICBUaGF0IGluZm9ybWF0aW9uIGlzIGFsc28gc2hvd24gaW4KK3RleHQgZm9ybSBieSB0aGUgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIGZpbGUsIGRlc2NyaWJlZCBsYXRlci4KKworVGhlc2UgZmlsZXMgbWF5IGFsc28gYmUgdXNlZCB0byB3cml0ZSB1c2VyLWxldmVsIGRyaXZlcnMgZm9yIHRoZSBVU0IKK2RldmljZXMuICBZb3Ugd291bGQgb3BlbiB0aGUgL3Byb2MvYnVzL3VzYi9CQkIvREREIGZpbGUgcmVhZC93cml0ZSwKK3JlYWQgaXRzIGRlc2NyaXB0b3JzIHRvIG1ha2Ugc3VyZSBpdCdzIHRoZSBkZXZpY2UgeW91IGV4cGVjdCwgYW5kIHRoZW4KK2JpbmQgdG8gYW4gaW50ZXJmYWNlIChvciBwZXJoYXBzIHNldmVyYWwpIHVzaW5nIGFuIGlvY3RsIGNhbGwuICBZb3UKK3dvdWxkIGlzc3VlIG1vcmUgaW9jdGxzIHRvIHRoZSBkZXZpY2UgdG8gY29tbXVuaWNhdGUgdG8gaXQgdXNpbmcKK2NvbnRyb2wsIGJ1bGssIG9yIG90aGVyIGtpbmRzIG9mIFVTQiB0cmFuc2ZlcnMuICBUaGUgSU9DVExzIGFyZQorbGlzdGVkIGluIHRoZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+IGZpbGUsIGFuZCBhdCB0aGlzIHdyaXRpbmcgdGhlCitzb3VyY2UgY29kZSAobGludXgvZHJpdmVycy91c2IvZGV2aW8uYykgaXMgdGhlIHByaW1hcnkgcmVmZXJlbmNlCitmb3IgaG93IHRvIGFjY2VzcyBkZXZpY2VzIHRocm91Z2ggdGhvc2UgZmlsZXMuCisKK05vdGUgdGhhdCBzaW5jZSBieSBkZWZhdWx0IHRoZXNlIEJCQi9EREQgZmlsZXMgYXJlIHdyaXRhYmxlIG9ubHkgYnkKK3Jvb3QsIG9ubHkgcm9vdCBjYW4gd3JpdGUgc3VjaCB1c2VyIG1vZGUgZHJpdmVycy4gIFlvdSBjYW4gc2VsZWN0aXZlbHkKK2dyYW50IHJlYWQvd3JpdGUgcGVybWlzc2lvbnMgdG8gb3RoZXIgdXNlcnMgYnkgdXNpbmcgImNobW9kIi4gIEFsc28sCit1c2JmcyBtb3VudCBvcHRpb25zIHN1Y2ggYXMgImRldm1vZGU9MDY2NiIgbWF5IGJlIGhlbHBmdWwuCisKKworCitUSEUgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIEZJTEU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiAvcHJvYy9idXMvdXNiL2RldmljZXMsIGVhY2ggZGV2aWNlJ3Mgb3V0cHV0IGhhcyBtdWx0aXBsZQorbGluZXMgb2YgQVNDSUkgb3V0cHV0LgorSSBtYWRlIGl0IEFTQ0lJIGluc3RlYWQgb2YgYmluYXJ5IG9uIHB1cnBvc2UsIHNvIHRoYXQgc29tZW9uZQorY2FuIG9idGFpbiBzb21lIHVzZWZ1bCBkYXRhIGZyb20gaXQgd2l0aG91dCB0aGUgdXNlIG9mIGFuCithdXhpbGlhcnkgcHJvZ3JhbS4gIEhvd2V2ZXIsIHdpdGggYW4gYXV4aWxpYXJ5IHByb2dyYW0sIHRoZSBudW1iZXJzCitpbiB0aGUgZmlyc3QgNCBjb2x1bW5zIG9mIGVhY2ggIlQ6IiBsaW5lICh0b3BvbG9neSBpbmZvOgorTGV2LCBQcm50LCBQb3J0LCBDbnQpIGNhbiBiZSB1c2VkIHRvIGJ1aWxkIGEgVVNCIHRvcG9sb2d5IGRpYWdyYW0uCisKK0VhY2ggbGluZSBpcyB0YWdnZWQgd2l0aCBhIG9uZS1jaGFyYWN0ZXIgSUQgZm9yIHRoYXQgbGluZToKKworVCA9IFRvcG9sb2d5IChldGMuKQorQiA9IEJhbmR3aWR0aCAoYXBwbGllcyBvbmx5IHRvIFVTQiBob3N0IGNvbnRyb2xsZXJzLCB3aGljaCBhcmUKKyAgICB2aXJ0dWFsaXplZCBhcyByb290IGh1YnMpCitEID0gRGV2aWNlIGRlc2NyaXB0b3IgaW5mby4KK1AgPSBQcm9kdWN0IElEIGluZm8uIChmcm9tIERldmljZSBkZXNjcmlwdG9yLCBidXQgdGhleSB3b24ndCBmaXQKKyAgICB0b2dldGhlciBvbiBvbmUgbGluZSkKK1MgPSBTdHJpbmcgZGVzY3JpcHRvcnMuCitDID0gQ29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIGluZm8uICgqID0gYWN0aXZlIGNvbmZpZ3VyYXRpb24pCitJID0gSW50ZXJmYWNlIGRlc2NyaXB0b3IgaW5mby4KK0UgPSBFbmRwb2ludCBkZXNjcmlwdG9yIGluZm8uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy9wcm9jL2J1cy91c2IvZGV2aWNlcyBvdXRwdXQgZm9ybWF0OgorCitMZWdlbmQ6CisgIGQgPSBkZWNpbWFsIG51bWJlciAobWF5IGhhdmUgbGVhZGluZyBzcGFjZXMgb3IgMCdzKQorICB4ID0gaGV4YWRlY2ltYWwgbnVtYmVyIChtYXkgaGF2ZSBsZWFkaW5nIHNwYWNlcyBvciAwJ3MpCisgIHMgPSBzdHJpbmcKKworCitUb3BvbG9neSBpbmZvOgorCitUOiAgQnVzPWRkIExldj1kZCBQcm50PWRkIFBvcnQ9ZGQgQ250PWRkIERldiM9ZGRkIFNwZD1kZGQgTXhDaD1kZAorfCAgIHwgICAgICB8ICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICB8ICAgICAgICB8ICAgICAgIHxfX01heENoaWxkcmVuCit8ICAgfCAgICAgIHwgICAgICB8ICAgICAgIHwgICAgICAgfCAgICAgIHwgICAgICAgIHxfX0RldmljZSBTcGVlZCBpbiBNYnBzCit8ICAgfCAgICAgIHwgICAgICB8ICAgICAgIHwgICAgICAgfCAgICAgIHxfX0RldmljZU51bWJlcgorfCAgIHwgICAgICB8ICAgICAgfCAgICAgICB8ICAgICAgIHxfX0NvdW50IG9mIGRldmljZXMgYXQgdGhpcyBsZXZlbAorfCAgIHwgICAgICB8ICAgICAgfCAgICAgICB8X19Db25uZWN0b3IvUG9ydCBvbiBQYXJlbnQgZm9yIHRoaXMgZGV2aWNlCit8ICAgfCAgICAgIHwgICAgICB8X19QYXJlbnQgRGV2aWNlTnVtYmVyCit8ICAgfCAgICAgIHxfX0xldmVsIGluIHRvcG9sb2d5IGZvciB0aGlzIGJ1cworfCAgIHxfX0J1cyBudW1iZXIKK3xfX1RvcG9sb2d5IGluZm8gdGFnCisKKyAgICBTcGVlZCBtYXkgYmU6CisgICAgCTEuNQlNYml0L3MgZm9yIGxvdyBzcGVlZCBVU0IKKwkxMglNYml0L3MgZm9yIGZ1bGwgc3BlZWQgVVNCCisJNDgwCU1iaXQvcyBmb3IgaGlnaCBzcGVlZCBVU0IgKGFkZGVkIGZvciBVU0IgMi4wKQorCisKK0JhbmR3aWR0aCBpbmZvOgorQjogIEFsbG9jPWRkZC9kZGQgdXMgKHh4JSksICNJbnQ9ZGRkLCAjSXNvPWRkZAorfCAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8X19OdW1iZXIgb2YgaXNvY2hyb25vdXMgcmVxdWVzdHMKK3wgICB8ICAgICAgICAgICAgICAgICAgICAgICB8X19OdW1iZXIgb2YgaW50ZXJydXB0IHJlcXVlc3RzCit8ICAgfF9fVG90YWwgQmFuZHdpZHRoIGFsbG9jYXRlZCB0byB0aGlzIGJ1cworfF9fQmFuZHdpZHRoIGluZm8gdGFnCisKKyAgICBCYW5kd2lkdGggYWxsb2NhdGlvbiBpcyBhbiBhcHByb3hpbWF0aW9uIG9mIGhvdyBtdWNoIG9mIG9uZSBmcmFtZQorICAgIChtaWxsaXNlY29uZCkgaXMgaW4gdXNlLiAgSXQgcmVmbGVjdHMgb25seSBwZXJpb2RpYyB0cmFuc2ZlcnMsIHdoaWNoCisgICAgYXJlIHRoZSBvbmx5IHRyYW5zZmVycyB0aGF0IHJlc2VydmUgYmFuZHdpZHRoLiAgQ29udHJvbCBhbmQgYnVsaworICAgIHRyYW5zZmVycyB1c2UgYWxsIG90aGVyIGJhbmR3aWR0aCwgaW5jbHVkaW5nIHJlc2VydmVkIGJhbmR3aWR0aCB0aGF0CisgICAgaXMgbm90IHVzZWQgZm9yIHRyYW5zZmVycyAoc3VjaCBhcyBmb3Igc2hvcnQgcGFja2V0cykuCisgICAgCisgICAgVGhlIHBlcmNlbnRhZ2UgaXMgaG93IG11Y2ggb2YgdGhlICJyZXNlcnZlZCIgYmFuZHdpZHRoIGlzIHNjaGVkdWxlZCBieQorICAgIHRob3NlIHRyYW5zZmVycy4gIEZvciBhIGxvdyBvciBmdWxsIHNwZWVkIGJ1cyAobG9vc2VseSwgIlVTQiAxLjEiKSwKKyAgICA5MCUgb2YgdGhlIGJ1cyBiYW5kd2lkdGggaXMgcmVzZXJ2ZWQuICBGb3IgYSBoaWdoIHNwZWVkIGJ1cyAobG9vc2VseSwKKyAgICAiVVNCIDIuMCIpIDgwJSBpcyByZXNlcnZlZC4KKworCitEZXZpY2UgZGVzY3JpcHRvciBpbmZvICYgUHJvZHVjdCBJRCBpbmZvOgorCitEOiAgVmVyPXgueHggQ2xzPXh4KHMpIFN1Yj14eCBQcm90PXh4IE14UFM9ZGQgI0NmZ3M9ZGQKK1A6ICBWZW5kb3I9eHh4eCBQcm9kSUQ9eHh4eCBSZXY9eHgueHgKKword2hlcmUKK0Q6ICBWZXI9eC54eCBDbHM9eHgoc3Nzc3MpIFN1Yj14eCBQcm90PXh4IE14UFM9ZGQgI0NmZ3M9ZGQKK3wgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICB8ICAgICAgIHwgICAgICAgfF9fTnVtYmVyQ29uZmlndXJhdGlvbnMKK3wgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICB8ICAgICAgIHxfX01heFBhY2tldFNpemUgb2YgRGVmYXVsdCBFbmRwb2ludAorfCAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgIHxfX0RldmljZVByb3RvY29sCit8ICAgfCAgICAgICAgfCAgICAgICAgICAgICB8X19EZXZpY2VTdWJDbGFzcworfCAgIHwgICAgICAgIHxfX0RldmljZUNsYXNzCit8ICAgfF9fRGV2aWNlIFVTQiB2ZXJzaW9uCit8X19EZXZpY2UgaW5mbyB0YWcgIzEKKword2hlcmUKK1A6ICBWZW5kb3I9eHh4eCBQcm9kSUQ9eHh4eCBSZXY9eHgueHgKK3wgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8X19Qcm9kdWN0IHJldmlzaW9uIG51bWJlcgorfCAgIHwgICAgICAgICAgIHxfX1Byb2R1Y3QgSUQgY29kZQorfCAgIHxfX1ZlbmRvciBJRCBjb2RlCit8X19EZXZpY2UgaW5mbyB0YWcgIzIKKworCitTdHJpbmcgZGVzY3JpcHRvciBpbmZvOgorCitTOiAgTWFudWZhY3R1cmVyPXNzc3MKK3wgICB8X19NYW51ZmFjdHVyZXIgb2YgdGhpcyBkZXZpY2UgYXMgcmVhZCBmcm9tIHRoZSBkZXZpY2UuCit8ICAgICAgRm9yIFVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVycyAodmlydHVhbCByb290IGh1YnMpIHRoaXMgbWF5Cit8ICAgICAgYmUgb21pdHRlZCwgb3IgKGZvciBuZXdlciBkcml2ZXJzKSB3aWxsIGlkZW50aWZ5IHRoZSBrZXJuZWwKK3wgICAgICB2ZXJzaW9uIGFuZCB0aGUgZHJpdmVyIHdoaWNoIHByb3ZpZGVzIHRoaXMgaHViIGVtdWxhdGlvbi4KK3xfX1N0cmluZyBpbmZvIHRhZworCitTOiAgUHJvZHVjdD1zc3NzCit8ICAgfF9fUHJvZHVjdCBkZXNjcmlwdGlvbiBvZiB0aGlzIGRldmljZSBhcyByZWFkIGZyb20gdGhlIGRldmljZS4KK3wgICAgICBGb3Igb2xkZXIgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzICh2aXJ0dWFsIHJvb3QgaHVicykgdGhpcworfCAgICAgIGluZGljYXRlcyB0aGUgZHJpdmVyOyBmb3IgbmV3ZXIgb25lcywgaXQncyBhIHByb2R1Y3QgKGFuZCB2ZW5kb3IpCit8ICAgICAgZGVzY3JpcHRpb24gdGhhdCBvZnRlbiBjb21lcyBmcm9tIHRoZSBrZXJuZWwncyBQQ0kgSUQgZGF0YWJhc2UuCit8X19TdHJpbmcgaW5mbyB0YWcKKworUzogIFNlcmlhbE51bWJlcj1zc3NzCit8ICAgfF9fU2VyaWFsIE51bWJlciBvZiB0aGlzIGRldmljZSBhcyByZWFkIGZyb20gdGhlIGRldmljZS4KK3wgICAgICBGb3IgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzICh2aXJ0dWFsIHJvb3QgaHVicykgdGhpcyBpcworfCAgICAgIHNvbWUgdW5pcXVlIElELCBub3JtYWxseSBhIGJ1cyBJRCAoYWRkcmVzcyBvciBzbG90IG5hbWUpIHRoYXQKK3wgICAgICBjYW4ndCBiZSBzaGFyZWQgd2l0aCBhbnkgb3RoZXIgZGV2aWNlLgorfF9fU3RyaW5nIGluZm8gdGFnCisKKworCitDb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgaW5mbzoKKworQzoqICNJZnM9ZGQgQ2ZnIz1kZCBBdHI9eHggTVB3cj1kZGRtQQorfCB8IHwgICAgICAgfCAgICAgICB8ICAgICAgfF9fTWF4UG93ZXIgaW4gbUEKK3wgfCB8ICAgICAgIHwgICAgICAgfF9fQXR0cmlidXRlcworfCB8IHwgICAgICAgfF9fQ29uZmlndXJhdGlvTnVtYmVyCit8IHwgfF9fTnVtYmVyT2ZJbnRlcmZhY2VzCit8IHxfXyAiKiIgaW5kaWNhdGVzIHRoZSBhY3RpdmUgY29uZmlndXJhdGlvbiAob3RoZXJzIGFyZSAiICIpCit8X19Db25maWcgaW5mbyB0YWcKKyAgICAKKyAgICBVU0IgZGV2aWNlcyBtYXkgaGF2ZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucywgZWFjaCBvZiB3aGljaCBhY3QKKyAgICByYXRoZXIgZGlmZmVyZW50bHkuICBGb3IgZXhhbXBsZSwgYSBidXMtcG93ZXJlZCBjb25maWd1cmF0aW9uCisgICAgbWlnaHQgYmUgbXVjaCBsZXNzIGNhcGFibGUgdGhhbiBvbmUgdGhhdCBpcyBzZWxmLXBvd2VyZWQuICBPbmx5CisgICAgb25lIGRldmljZSBjb25maWd1cmF0aW9uIGNhbiBiZSBhY3RpdmUgYXQgYSB0aW1lOyBtb3N0IGRldmljZXMKKyAgICBoYXZlIG9ubHkgb25lIGNvbmZpZ3VyYXRpb24uCisKKyAgICBFYWNoIGNvbmZpZ3VyYXRpb24gY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgaW50ZXJmYWNlcy4gIEVhY2gKKyAgICBpbnRlcmZhY2Ugc2VydmVzIGEgZGlzdGluY3QgImZ1bmN0aW9uIiwgd2hpY2ggaXMgdHlwaWNhbGx5IGJvdW5kCisgICAgdG8gYSBkaWZmZXJlbnQgVVNCIGRldmljZSBkcml2ZXIuICBPbmUgY29tbW9uIGV4YW1wbGUgaXMgYSBVU0IKKyAgICBzcGVha2VyIHdpdGggYW4gYXVkaW8gaW50ZXJmYWNlIGZvciBwbGF5YmFjaywgYW5kIGEgSElEIGludGVyZmFjZQorICAgIGZvciB1c2Ugd2l0aCBzb2Z0d2FyZSB2b2x1bWUgY29udHJvbC4KKworCitJbnRlcmZhY2UgZGVzY3JpcHRvciBpbmZvIChjYW4gYmUgbXVsdGlwbGUgcGVyIENvbmZpZyk6CisKK0k6ICBJZiM9ZGQgQWx0PWRkICNFUHM9ZGQgQ2xzPXh4KHNzc3NzKSBTdWI9eHggUHJvdD14eCBEcml2ZXI9c3NzcworfCAgIHwgICAgICB8ICAgICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICB8ICAgICAgIHxfX0RyaXZlciBuYW1lCit8ICAgfCAgICAgIHwgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgIHwgICAgICAgICAgb3IgIihub25lKSIKK3wgICB8ICAgICAgfCAgICAgIHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgfF9fSW50ZXJmYWNlUHJvdG9jb2wKK3wgICB8ICAgICAgfCAgICAgIHwgICAgICAgfCAgICAgICAgICAgICB8X19JbnRlcmZhY2VTdWJDbGFzcworfCAgIHwgICAgICB8ICAgICAgfCAgICAgICB8X19JbnRlcmZhY2VDbGFzcworfCAgIHwgICAgICB8ICAgICAgfF9fTnVtYmVyT2ZFbmRwb2ludHMKK3wgICB8ICAgICAgfF9fQWx0ZXJuYXRlU2V0dGluZ051bWJlcgorfCAgIHxfX0ludGVyZmFjZU51bWJlcgorfF9fSW50ZXJmYWNlIGluZm8gdGFnCisKKyAgICBBIGdpdmVuIGludGVyZmFjZSBtYXkgaGF2ZSBvbmUgb3IgbW9yZSAiYWx0ZXJuYXRlIiBzZXR0aW5ncy4KKyAgICBGb3IgZXhhbXBsZSwgZGVmYXVsdCBzZXR0aW5ncyBtYXkgbm90IHVzZSBtb3JlIHRoYW4gYSBzbWFsbAorICAgIGFtb3VudCBvZiBwZXJpb2RpYyBiYW5kd2lkdGguICBUbyB1c2Ugc2lnbmlmaWNhbnQgZnJhY3Rpb25zCisgICAgb2YgYnVzIGJhbmR3aWR0aCwgZHJpdmVycyBtdXN0IHNlbGVjdCBhIG5vbi1kZWZhdWx0IGFsdHNldHRpbmcuCisgICAgCisgICAgT25seSBvbmUgc2V0dGluZyBmb3IgYW4gaW50ZXJmYWNlIG1heSBiZSBhY3RpdmUgYXQgYSB0aW1lLCBhbmQKKyAgICBvbmx5IG9uZSBkcml2ZXIgbWF5IGJpbmQgdG8gYW4gaW50ZXJmYWNlIGF0IGEgdGltZS4gIE1vc3QgZGV2aWNlcworICAgIGhhdmUgb25seSBvbmUgYWx0ZXJuYXRlIHNldHRpbmcgcGVyIGludGVyZmFjZS4KKworCitFbmRwb2ludCBkZXNjcmlwdG9yIGluZm8gKGNhbiBiZSBtdWx0aXBsZSBwZXIgSW50ZXJmYWNlKToKKworRTogIEFkPXh4KHMpIEF0cj14eChzc3NzKSBNeFBTPWRkZGQgSXZsPWRkZHNzCit8ICAgfCAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICB8X19JbnRlcnZhbCAobWF4KSBiZXR3ZWVuIHRyYW5zZmVycworfCAgIHwgICAgICAgIHwgICAgICAgICAgICB8X19FbmRwb2ludE1heFBhY2tldFNpemUKK3wgICB8ICAgICAgICB8X19BdHRyaWJ1dGVzKEVuZHBvaW50VHlwZSkKK3wgICB8X19FbmRwb2ludEFkZHJlc3MoST1JbixPPU91dCkKK3xfX0VuZHBvaW50IGluZm8gdGFnCisKKyAgICBUaGUgaW50ZXJ2YWwgaXMgbm9uemVybyBmb3IgYWxsIHBlcmlvZGljIChpbnRlcnJ1cHQgb3IgaXNvY2hyb25vdXMpCisgICAgZW5kcG9pbnRzLiAgRm9yIGhpZ2ggc3BlZWQgZW5kcG9pbnRzIHRoZSB0cmFuc2ZlciBpbnRlcnZhbCBtYXkgYmUKKyAgICBtZWFzdXJlZCBpbiBtaWNyb3NlY29uZHMgcmF0aGVyIHRoYW4gbWlsbGlzZWNvbmRzLgorCisgICAgRm9yIGhpZ2ggc3BlZWQgcGVyaW9kaWMgZW5kcG9pbnRzLCB0aGUgIk1heFBhY2tldFNpemUiIHJlZmxlY3RzCisgICAgdGhlIHBlci1taWNyb2ZyYW1lIGRhdGEgdHJhbnNmZXIgc2l6ZS4gIEZvciAiaGlnaCBiYW5kd2lkdGgiCisgICAgZW5kcG9pbnRzLCB0aGF0IGNhbiByZWZsZWN0IHR3byBvciB0aHJlZSBwYWNrZXRzIChmb3IgdXAgdG8KKyAgICAzS0J5dGVzIGV2ZXJ5IDEyNSB1c2VjKSBwZXIgZW5kcG9pbnQuCisKKyAgICBXaXRoIHRoZSBMaW51eC1VU0Igc3RhY2ssIHBlcmlvZGljIGJhbmR3aWR0aCByZXNlcnZhdGlvbnMgdXNlIHRoZQorICAgIHRyYW5zZmVyIGludGVydmFscyBhbmQgc2l6ZXMgcHJvdmlkZWQgYnkgVVJCcywgd2hpY2ggY2FuIGJlIGxlc3MKKyAgICB0aGFuIHRob3NlIGZvdW5kIGluIGVuZHBvaW50IGRlc2NyaXB0b3IuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitJZiBhIHVzZXIgb3Igc2NyaXB0IGlzIGludGVyZXN0ZWQgb25seSBpbiBUb3BvbG9neSBpbmZvLCBmb3IKK2V4YW1wbGUsIHVzZSBzb21ldGhpbmcgbGlrZSAiZ3JlcCBeVDogL3Byb2MvYnVzL3VzYi9kZXZpY2VzIgorZm9yIG9ubHkgdGhlIFRvcG9sb2d5IGxpbmVzLiAgQSBjb21tYW5kIGxpa2UKKyJncmVwIC1pIF5bdGRwXTogL3Byb2MvYnVzL3VzYi9kZXZpY2VzIiBjYW4gYmUgdXNlZCB0byBsaXN0Citvbmx5IHRoZSBsaW5lcyB0aGF0IGJlZ2luIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gc3F1YXJlIGJyYWNrZXRzLAord2hlcmUgdGhlIHZhbGlkIGNoYXJhY3RlcnMgYXJlIFREUENJRS4gIFdpdGggYSBzbGlnaHRseSBtb3JlIGFibGUKK3NjcmlwdCwgaXQgY2FuIGRpc3BsYXkgYW55IHNlbGVjdGVkIGxpbmVzIChmb3IgZXhhbXBsZSwgb25seSBULCBELAorYW5kIFAgbGluZXMpIGFuZCBjaGFuZ2UgdGhlaXIgb3V0cHV0IGZvcm1hdC4gIChUaGUgInByb2N1c2IiCitQZXJsIHNjcmlwdCBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgaWRlYS4gIEl0IHdpbGwgbGlzdCBvbmx5CitzZWxlY3RlZCBsaW5lcyBbc2VsZWN0ZWQgZnJvbSBUQkRQU0NJRV0gb3IgIkFsbCIgbGluZXMgZnJvbQorL3Byb2MvYnVzL3VzYi9kZXZpY2VzLikKKworVGhlIFRvcG9sb2d5IGxpbmVzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZ3JhcGhpYy9waWN0b3JpYWwKK29mIHRoZSBVU0IgZGV2aWNlcyBvbiBhIHN5c3RlbSdzIHJvb3QgaHViLiAgKFNlZSBtb3JlIGJlbG93CitvbiBob3cgdG8gZG8gdGhpcy4pCisKK1RoZSBJbnRlcmZhY2UgbGluZXMgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgZHJpdmVyIGlzCitiZWluZyB1c2VkIGZvciBlYWNoIGRldmljZS4KKworVGhlIENvbmZpZ3VyYXRpb24gbGluZXMgY291bGQgYmUgdXNlZCB0byBsaXN0IG1heGltdW0gcG93ZXIKKyhpbiBtaWxsaWFtcHMpIHRoYXQgYSBzeXN0ZW0ncyBVU0IgZGV2aWNlcyBhcmUgdXNpbmcuCitGb3IgZXhhbXBsZSwgImdyZXAgXkM6IC9wcm9jL2J1cy91c2IvZGV2aWNlcyIuCisKKworSGVyZSdzIGFuIGV4YW1wbGUsIGZyb20gYSBzeXN0ZW0gd2hpY2ggaGFzIGEgVUhDSSByb290IGh1YiwKK2FuIGV4dGVybmFsIGh1YiBjb25uZWN0ZWQgdG8gdGhlIHJvb3QgaHViLCBhbmQgYSBtb3VzZSBhbmQKK2Egc2VyaWFsIGNvbnZlcnRlciBjb25uZWN0ZWQgdG8gdGhlIGV4dGVybmFsIGh1Yi4KKworVDogIEJ1cz0wMCBMZXY9MDAgUHJudD0wMCBQb3J0PTAwIENudD0wMCBEZXYjPSAgMSBTcGQ9MTIgIE14Q2g9IDIKK0I6ICBBbGxvYz0gMjgvOTAwIHVzICggMyUpLCAjSW50PSAgMiwgI0lzbz0gIDAKK0Q6ICBWZXI9IDEuMDAgQ2xzPTA5KGh1YiAgKSBTdWI9MDAgUHJvdD0wMCBNeFBTPSA4ICNDZmdzPSAgMQorUDogIFZlbmRvcj0wMDAwIFByb2RJRD0wMDAwIFJldj0gMC4wMAorUzogIFByb2R1Y3Q9VVNCIFVIQ0kgUm9vdCBIdWIKK1M6ICBTZXJpYWxOdW1iZXI9ZGNlMAorQzoqICNJZnM9IDEgQ2ZnIz0gMSBBdHI9NDAgTXhQd3I9ICAwbUEKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDEgQ2xzPTA5KGh1YiAgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9aHViCitFOiAgQWQ9ODEoSSkgQXRyPTAzKEludC4pIE14UFM9ICAgOCBJdmw9MjU1bXMKK1Q6ICBCdXM9MDAgTGV2PTAxIFBybnQ9MDEgUG9ydD0wMCBDbnQ9MDEgRGV2Iz0gIDIgU3BkPTEyICBNeENoPSA0CitEOiAgVmVyPSAxLjAwIENscz0wOShodWIgICkgU3ViPTAwIFByb3Q9MDAgTXhQUz0gOCAjQ2Zncz0gIDEKK1A6ICBWZW5kb3I9MDQ1MSBQcm9kSUQ9MTQ0NiBSZXY9IDEuMDAKK0M6KiAjSWZzPSAxIENmZyM9IDEgQXRyPWUwIE14UHdyPTEwMG1BCitJOiAgSWYjPSAwIEFsdD0gMCAjRVBzPSAxIENscz0wOShodWIgICkgU3ViPTAwIFByb3Q9MDAgRHJpdmVyPWh1YgorRTogIEFkPTgxKEkpIEF0cj0wMyhJbnQuKSBNeFBTPSAgIDEgSXZsPTI1NW1zCitUOiAgQnVzPTAwIExldj0wMiBQcm50PTAyIFBvcnQ9MDAgQ250PTAxIERldiM9ICAzIFNwZD0xLjUgTXhDaD0gMAorRDogIFZlcj0gMS4wMCBDbHM9MDAoPmlmYyApIFN1Yj0wMCBQcm90PTAwIE14UFM9IDggI0NmZ3M9ICAxCitQOiAgVmVuZG9yPTA0YjQgUHJvZElEPTAwMDEgUmV2PSAwLjAwCitDOiogI0lmcz0gMSBDZmcjPSAxIEF0cj04MCBNeFB3cj0xMDBtQQorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMSBDbHM9MDMoSElEICApIFN1Yj0wMSBQcm90PTAyIERyaXZlcj1tb3VzZQorRTogIEFkPTgxKEkpIEF0cj0wMyhJbnQuKSBNeFBTPSAgIDMgSXZsPSAxMG1zCitUOiAgQnVzPTAwIExldj0wMiBQcm50PTAyIFBvcnQ9MDIgQ250PTAyIERldiM9ICA0IFNwZD0xMiAgTXhDaD0gMAorRDogIFZlcj0gMS4wMCBDbHM9MDAoPmlmYyApIFN1Yj0wMCBQcm90PTAwIE14UFM9IDggI0NmZ3M9ICAxCitQOiAgVmVuZG9yPTA1NjUgUHJvZElEPTAwMDEgUmV2PSAxLjA4CitTOiAgTWFudWZhY3R1cmVyPVBlcmFjb20gTmV0d29ya3MsIEluYy4KK1M6ICBQcm9kdWN0PVBlcmFjb20gVVNCIHRvIFNlcmlhbCBDb252ZXJ0ZXIKK0M6KiAjSWZzPSAxIENmZyM9IDEgQXRyPWEwIE14UHdyPTEwMG1BCitJOiAgSWYjPSAwIEFsdD0gMCAjRVBzPSAzIENscz0wMCg+aWZjICkgU3ViPTAwIFByb3Q9MDAgRHJpdmVyPXNlcmlhbAorRTogIEFkPTgxKEkpIEF0cj0wMihCdWxrKSBNeFBTPSAgNjQgSXZsPSAxNm1zCitFOiAgQWQ9MDEoTykgQXRyPTAyKEJ1bGspIE14UFM9ICAxNiBJdmw9IDE2bXMKK0U6ICBBZD04MihJKSBBdHI9MDMoSW50LikgTXhQUz0gICA4IEl2bD0gIDhtcworCisKK1NlbGVjdGluZyBvbmx5IHRoZSAiVDoiIGFuZCAiSToiIGxpbmVzIGZyb20gdGhpcyAoZm9yIGV4YW1wbGUsIGJ5IHVzaW5nCisicHJvY3VzYiB0aSIpLCB3ZSBoYXZlOgorCitUOiAgQnVzPTAwIExldj0wMCBQcm50PTAwIFBvcnQ9MDAgQ250PTAwIERldiM9ICAxIFNwZD0xMiAgTXhDaD0gMgorVDogIEJ1cz0wMCBMZXY9MDEgUHJudD0wMSBQb3J0PTAwIENudD0wMSBEZXYjPSAgMiBTcGQ9MTIgIE14Q2g9IDQKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDEgQ2xzPTA5KGh1YiAgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9aHViCitUOiAgQnVzPTAwIExldj0wMiBQcm50PTAyIFBvcnQ9MDAgQ250PTAxIERldiM9ICAzIFNwZD0xLjUgTXhDaD0gMAorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMSBDbHM9MDMoSElEICApIFN1Yj0wMSBQcm90PTAyIERyaXZlcj1tb3VzZQorVDogIEJ1cz0wMCBMZXY9MDIgUHJudD0wMiBQb3J0PTAyIENudD0wMiBEZXYjPSAgNCBTcGQ9MTIgIE14Q2g9IDAKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDMgQ2xzPTAwKD5pZmMgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9c2VyaWFsCisKKworUGh5c2ljYWxseSB0aGlzIGxvb2tzIGxpa2UgKG9yIGNvdWxkIGJlIGNvbnZlcnRlZCB0byk6CisKKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgIHwgIFBDL3Jvb3RfaHViICgxMil8ICAgRGV2IyA9IDEKKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKyAgIChubikgaXMgTWJwcy4KKyAgICBMZXZlbCAwICAgICAgICAgICB8ICBDTi4wICAgfCAgQ04uMSAgfCAgIFtDTiA9IGNvbm5lY3Rvci9wb3J0ICNdCisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLworICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgTGV2ZWwgMSAgIHwgRGV2IzI6IDQtcG9ydCBodWIgKDEyKXwKKyAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgIHxDTi4wIHxDTi4xIHxDTi4yIHxDTi4zIHwKKyAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICBcICAgICAgICAgICBcX19fX19fX19fX19fX19fX19fX18KKyAgICAgICAgICAgICAgICAgXF9fX19fICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIExldmVsIDIgICAgICB8IERldiMgMzogbW91c2UgKDEuNSl8ICAgICAgfCBEZXYjIDQ6IHNlcmlhbCAoMTIpfAorICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisKK09yLCBpbiBhIG1vcmUgdHJlZS1saWtlIHN0cnVjdHVyZSAocG9ydHMgW0Nvbm5lY3RvcnNdIHdpdGhvdXQKK2Nvbm5lY3Rpb25zIGNvdWxkIGJlIG9taXR0ZWQpOgorCitQQzogIERldiMgMSwgcm9vdCBodWIsIDIgcG9ydHMsIDEyIE1icHMKK3xfIENOLjA6ICBEZXYjIDIsIGh1YiwgNCBwb3J0cywgMTIgTWJwcworICAgICB8XyBDTi4wOiAgRGV2ICMzLCBtb3VzZSwgMS41IE1icHMKKyAgICAgfF8gQ04uMToKKyAgICAgfF8gQ04uMjogIERldiAjNCwgc2VyaWFsLCAxMiBNYnBzCisgICAgIHxfIENOLjM6Cit8XyBDTi4xOgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIyMgRU5EICMjIwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvcmlvLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3Jpby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhNzlhYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3Jpby50eHQKQEAgLTAsMCArMSwxMzggQEAKK0NvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBCcnVjZSBUZW5pc29uCitQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgRGF2aWQgTmVsc29uCitUaGFua3MgdG8gRGF2aWQgTmVsc29uIGZvciBndWlkYW5jZSBhbmQgdGhlIHVzYWdlIG9mIHRoZSBzY2FubmVyLnR4dAorYW5kIHNjYW5uZXIuYyBmaWxlcyB0byBtb2RlbCBvdXIgZHJpdmVyIGFuZCB0aGlzIGluZm9ybWF0aXZlIGZpbGUuCisKK01hci4gMiwgMjAwMAorCitDSEFOR0VTCisKKy0gSW5pdGlhbCBSZXZpc2lvbgorCisKK09WRVJWSUVXCisKK1RoaXMgUkVBRE1FIHdpbGwgYWRkcmVzcyBpc3N1ZXMgcmVnYXJkaW5nIGhvdyB0byBjb25maWd1cmUgdGhlIGtlcm5lbAordG8gYWNjZXNzIGEgUklPIDUwMCBtcDMgcGxheWVyLiAgCitCZWZvcmUgSSBleHBsYWluIGhvdyB0byB1c2UgdGhpcyB0byBhY2Nlc3MgdGhlIFJpbzUwMCBwbGVhc2UgYmUgd2FybmVkOgorCitXIEEgUiBOIEkgTiBHOgorLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHNvZnR3YXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50LiAgVGhlIGF1dGhvcnMKK2FyZSBpbiBubyB3YXkgcmVzcG9uc2libGUgZm9yIGFueSBkYW1hZ2UgdGhhdCBtYXkgb2NjdXIsIG5vIG1hdHRlciBob3cKK2luY29uc2VxdWVudGlhbC4KKworSXQgc2VlbXMgdGhhdCB0aGUgUmlvIGhhcyBhIHByb2JsZW0gd2hlbiBzZW5kaW5nIC5tcDMgd2l0aCBsb3cgYmF0dGVyaWVzLgorSSBzdWdnZXN0IHdoZW4gdGhlIGJhdHRlcmllcyBhcmUgbG93IGFuZCB3YW50IHRvIHRyYW5zZmVyIHN0dWZmIHRoYXQgeW91CityZXBsYWNlIGl0IHdpdGggYSBmcmVzaCBvbmUuIEluIG15IGNhc2UsIHdoYXQgaGFwcGVuZWQgaXMgSSBsb3N0IHR3byAxNmtiCitibG9ja3MgKHRoZXkgYXJlIG5vIGxvbmdlciB1c2FibGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gdG8gaXQpLiBCdXQgSSBkb24ndAora25vdyBpZiB0aGF0cyBub3JtYWwgb3Igbm90LiBJdCBjb3VsZCBzaW1wbHkgYmUgYSBwcm9ibGVtIHdpdGggdGhlIGZsYXNoIAorbWVtb3J5LgorCitJbiBhbiBleHRyZW1lIGNhc2UsIEkgbGVmdCBteSBSaW8gcGxheWluZyBvdmVybmlnaHQgYW5kIHRoZSBiYXR0ZXJpZXMgd29yZSAKK2Rvd24gdG8gbm90aGluZyBhbmQgYXBwZWFyIHRvIGhhdmUgY29ycnVwdGVkIHRoZSBmbGFzaCBtZW1vcnkuIE15IFJJTyAKK25lZWRlZCB0byBiZSByZXBsYWNlZCBhcyBhIHJlc3VsdC4gIERpYW1vbmQgdGVjaCBzdXBwb3J0IGlzIGF3YXJlIG9mIHRoZSAKK3Byb2JsZW0uICBEbyBOT1QgYWxsb3cgeW91ciBiYXR0ZXJpZXMgdG8gd2VhciBkb3duIHRvIG5vdGhpbmcgYmVmb3JlIAorY2hhbmdpbmcgdGhlbS4gIEl0IGFwcGVhcnMgUklPIDUwMCBmaXJtd2FyZSBkb2VzIG5vdCBoYW5kbGUgbG93IGJhdHRlcnkgCitwb3dlciB3ZWxsIGF0IGFsbC4gCisKK09uIHN5c3RlbXMgd2l0aCBPSENJIGNvbnRyb2xsZXJzLCB0aGUga2VybmVsIE9IQ0kgY29kZSBhcHBlYXJzIHRvIGhhdmUgCitwb3dlciBvbiBwcm9ibGVtcyB3aXRoIHNvbWUgY2hpcHNldHMuICBJZiB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcyAKK2Nvbm5lY3RpbmcgdG8geW91ciBSSU8gNTAwLCB0cnkgdHVybmluZyBpdCBvbiBmaXJzdCBhbmQgdGhlbiBwbHVnZ2luZyBpdCAKK2ludG8gdGhlIFVTQiBjYWJsZS4gIAorCitDb250YWN0IGluZm9ybWF0aW9uOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgVGhlIG1haW4gcGFnZSBmb3IgdGhlIHByb2plY3QgaXMgaG9zdGVkIGF0IHNvdXJjZWZvcmdlLm5ldCBpbiB0aGUgZm9sbG93aW5nCisgICBhZGRyZXNzOiBodHRwOi8vcmlvNTAwLnNvdXJjZWZvcmdlLm5ldCBZb3UgY2FuIGFsc28gZ28gdG8gdGhlIHNvdXJjZWZvcmdlCisgICBwcm9qZWN0IHBhZ2UgYXQ6IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC8/Z3JvdXBfaWQ9MTk0NCBUaGVyZSBpcyAKKyAgIGFsc28gYSBtYWlsaW5nIGxpc3Q6IHJpbzUwMC11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworQXV0aG9yczoKKy0tLS0tLS0KKworTW9zdCBvZiB0aGUgY29kZSB3YXMgd3JpdHRlbiBieSBDZXNhciBNaXF1ZWwgPG1pcXVlbEBkZi51YmEuYXI+LiBLZWl0aCAKK0NsYXl0b24gPGtjbGF5dG9uQGpwcy5uZXQ+IGlzIGluY2hhcmdlIG9mIHRoZSBQUEMgcG9ydCBhbmQgbWFraW5nIHN1cmUKK3RoaW5ncyB3b3JrIHRoZXJlLiBCcnVjZSBUZW5pc29uIDxidGVuaXNvbkBkaWJicy5uZXQ+IGlzIGFkZGluZyBzdXBwb3J0Citmb3IgLmZvbiBmaWxlcyBhbmQgYWxzbyBkb2VzIHRlc3RpbmcuIFRoZSBwcm9ncmFtIHdpbGwgbW9zdGx5IHN1cmUgYmUKK3JlLXdyaXR0ZW4gYW5kIFBldGUgSWt1c3ogYWxvbmcgd2l0aCB0aGUgcmVzdCB3aWxsIHJlLWRlc2lnbiBpdC4gSSB3b3VsZAorYWxzbyBsaWtlIHRvIHRoYW5rIFRyaSBOZ3V5ZW4gPHRtbl8zMDIyMDAwQGhvdG1haWwuY29tPiB3aG8gcHJvdmlkZWQgdXNlIAord2l0aCBzb21lIGltcG9ydGFudCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgUmlvLgorCitBRERJVElPTkFMIElORk9STUFUSU9OIGFuZCBVc2Vyc3BhY2UgdG9vbHMKKworaHR0cDovL3JpbzUwMC5zb3VyY2Vmb3JnZS5uZXQvCisKKworUkVRVUlSRU1FTlRTCisKK0EgaG9zdCB3aXRoIGEgVVNCIHBvcnQuICBJZGVhbGx5LCBlaXRoZXIgYSBVSENJIChJbnRlbCkgb3IgT0hDSQorKENvbXBhcSBhbmQgb3RoZXJzKSBoYXJkd2FyZSBwb3J0IHNob3VsZCB3b3JrLgorCitBIExpbnV4IGRldmVsb3BtZW50IGtlcm5lbCAoMi4zLngpIHdpdGggVVNCIHN1cHBvcnQgZW5hYmxlZCBvciBhCitiYWNrcG9ydGVkIHZlcnNpb24gdG8gbGludXgtMi4yLnguICBTZWUgaHR0cDovL3d3dy5saW51eC11c2Iub3JnIGZvcgorbW9yZSBpbmZvcm1hdGlvbiBvbiBhY2NvbXBsaXNoaW5nIHRoaXMuCisKK0EgTGludXgga2VybmVsIHdpdGggUklPIDUwMCBzdXBwb3J0IGVuYWJsZWQuCisKKydsc3BjaScgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIFVTQiBoYXJkd2FyZQorYXZhaWxhYmxlIGluIHlvdXIgbWFjaGluZS4KKworQ09ORklHVVJBVElPTgorCitVc2luZyBgbHNwY2kgLXZgLCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgVVNCIGhhcmR3YXJlIGF2YWlsYWJsZS4KKworICBJZiB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlOgorCisgICAgVVNCIENvbnRyb2xsZXI6IC4uLi4uLgorICAgIEZsYWdzOiAuLi4uLgorICAgIEkvTyBwb3J0cyBhdCAuLi4uCisKKyAgVGhlbiB5b3UgaGF2ZSBhIFVIQ0kgYmFzZWQgY29udHJvbGxlci4KKworICBJZiB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlOgorCisgICAgIFVTQiBDb250cm9sbGVyOiAuLi4uLgorICAgICBGbGFnczogLi4uLgorICAgICBNZW1vcnkgYXQgLi4uLi4KKworICBUaGVuIHlvdSBoYXZlIGEgT0hDSSBiYXNlZCBjb250cm9sbGVyLgorCitVc2luZyBgbWFrZSBtZW51Y29uZmlnYCBvciB5b3VyIHByZWZlcnJlZCBtZXRob2QgZm9yIGNvbmZpZ3VyaW5nIHRoZQora2VybmVsLCBzZWxlY3QgJ1N1cHBvcnQgZm9yIFVTQicsICdPSENJL1VIQ0knIGRlcGVuZGluZyBvbiB5b3VyCitoYXJkd2FyZSAoZGV0ZXJtaW5lZCBmcm9tIHRoZSBzdGVwcyBhYm92ZSksICdVU0IgRGlhbW9uZCBSaW81MDAgc3VwcG9ydCcsIGFuZAorJ1ByZWxpbWluYXJ5IFVTQiBkZXZpY2UgZmlsZXN5c3RlbScuICBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBtb2R1bGVzCisoeW91IG1heSBuZWVkIHRvIGV4ZWN1dGUgYGRlcG1vZCAtYWAgdG8gdXBkYXRlIHRoZSBtb2R1bGUKK2RlcGVuZGVuY2llcykuCisKK0FkZCBhIGRldmljZSBmb3IgdGhlIFVTQiByaW81MDA6CisgIGBta25vZCAvZGV2L3VzYi9yaW81MDAgYyAxODAgNjRgCisKK1NldCBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyBmb3IgL2Rldi91c2IvcmlvNTAwIChkb24ndCBmb3JnZXQgYWJvdXQKK2dyb3VwIGFuZCB3b3JsZCBwZXJtaXNzaW9ucykuICBCb3RoIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGFyZQorcmVxdWlyZWQgZm9yIHByb3BlciBvcGVyYXRpb24uCisKK0xvYWQgdGhlIGFwcHJvcHJpYXRlIG1vZHVsZXMgKGlmIGNvbXBpbGVkIGFzIG1vZHVsZXMpOgorCisgIE9IQ0k6CisgICAgbW9kcHJvYmUgdXNiY29yZQorICAgIG1vZHByb2JlIHVzYi1vaGNpCisgICAgbW9kcHJvYmUgcmlvNTAwCisKKyAgVUhDSToKKyAgICBtb2Rwcm9iZSB1c2Jjb3JlCisgICAgbW9kcHJvYmUgdXNiLXVoY2kgIChvciB1aGNpKQorICAgIG1vZHByb2JlIHJpbzUwMAorCitUaGF0J3MgaXQuICBUaGUgUmlvNTAwIFV0aWxzIGF0OiBodHRwOi8vcmlvNTAwLnNvdXJjZWZvcmdlLm5ldCBzaG91bGQKK2JlIGFibGUgdG8gYWNjZXNzIHRoZSByaW81MDAuCisKK0JVR1MKKworSWYgeW91IGVuY291bnRlciBhbnkgcHJvYmxlbXMgZmVlbCBmcmVlIHRvIGRyb3AgbWUgYW4gZW1haWwuCisKK0JydWNlIFRlbmlzb24KK2J0ZW5pc29uQGRpYmJzLm5ldAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9zZTQwMS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9zZTQwMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5ZDFjOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3NlNDAxLnR4dApAQCAtMCwwICsxLDU0IEBACitMaW51eCBkcml2ZXIgZm9yIFNFNDAxIGJhc2VkIFVTQiBjYW1lcmFzCisKK0NvcHlyaWdodCwgMjAwMSwgSmVyb2VuIFZyZWVrZW4KKworCitJTlRST0RVQ1RJT046CisKK1RoZSBTRTQwMSBjaGlwIGlzIHRoZSB1c2VkIGluIGxvdy1jb3N0IHVzYiB3ZWJjYW1zLgorSXQgaXMgcHJvZHVjZWQgYnkgRW5kcG9pbnRzIEluYy4gKHd3dy5lbmRwb2ludHMuY29tKS4KK0l0IGludGVyZmFjZXMgZGlyZWN0bHkgdG8gYSBjbW9zIGltYWdlIHNlbnNvciBhbmQgVVNCLiBUaGUgb25seSBvdGhlciBtYWpvcgorcGFydCBpbiBhIHNlNDAxIGJhc2VkIGNhbWVyYSBpcyBhIGRyYW0gY2hpcC4KKworVGhlIGZvbGxvd2luZyBjYW1lcmFzIGFyZSBrbm93biB0byB3b3JrIHdpdGggdGhpcyBkcml2ZXI6CisKK0FveCBzZTQwMSAobm9uLWJyYW5kZWQpIGNhbWVyYXMKK1BoaWxpcHMgUFZDVjY2NSBVU0IgVkdBIHdlYmNhbSAnVmVzdGEgRnVuJworS2Vuc2luZ3RvbiBWaWRlb0NBTSBQQyBDYW1lcmEgTW9kZWwgNjcwMTQKK0tlbnNpbmd0b24gVmlkZW9DQU0gUEMgQ2FtZXJhIE1vZGVsIDY3MDE1CitLZW5zaW5ndG9uIFZpZGVvQ0FNIFBDIENhbWVyYSBNb2RlbCA2NzAxNgorS2Vuc2luZ3RvbiBWaWRlb0NBTSBQQyBDYW1lcmEgTW9kZWwgNjcwMTcKKworCitXSEFUIFlPVSBORUVEOgorCistCVVTQiBzdXBwb3J0CistCVZJREVPNExJTlVYIHN1cHBvcnQKKworTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBVU0Igc3VwcG9ydCBmb3IgbGludXggY2FuIGJlIGZvdW5kIGF0OgoraHR0cDovL3d3dy5saW51eC11c2Iub3JnCisKKworTU9EVUxFIE9QVElPTlM6CisKK1doZW4gdGhlIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSB5b3UgY2FuIGFsc28gdXNlIHRoZSAnZmxpY2tlcmxlc3MnCitvcHRpb24uIFdpdGggaXQgZXhwb3N1cmUgaXMgbGltaXRlZCB0byB2YWx1ZXMgdGhhdCBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlCituZXQgZnJlcXVlbmN5LiBWYWxpZCBvcHRpb25zIGZvciB0aGlzIG9wdGlvbiBhcmUgMCwgNTAgYW5kIDYwLiAoMD1kaXNhYmxlLAorNTA9NTBoeiwgNjA9NjBoeikKKworCitLTk9XTiBQUk9CTEVNUzoKKworVGhlIGRyaXZlciB3b3JrcyBmaW5lIHdpdGggdGhlIHVzYi1vaGNpIGFuZCB1aGNpIGhvc3QgY29udHJvbGxlciBkcml2ZXJzLAordGhlIGRlZmF1bHQgc2V0dGluZ3MgYWxzbyB3b3JrIHdpdGggdXNiLXVoY2kuIEJ1dCBzZW5kaW5nIG1vcmUgdGhhbiBvbmUgYnVsawordHJhbnNmZXIgYXQgYSB0aW1lIHdpdGggdXNiLXVoY2kgZG9lc24ndCB3b3JrIHlldC4KK1VzZXJzIG9mIHVzYi1vaGNpIGFuZCB1aGNpIGNhbiBzYWZlbHkgZW5sYXJnZSBTRTQwMV9OVU1TQlVGIGluIHNlNDAxLmggaW4KK29yZGVyIHRvIGluY3JlYXNlIHRoZSB0aHJvdWdocHV0IChhbmQgdGh1cyBmcmFtZXJhdGUpLgorCisKK0hFTFA6CisKK1RoZSBsYXRlc3QgaW5mbyBvbiB0aGlzIGRyaXZlciBjYW4gYmUgZm91bmQgYXQ6CitodHRwOi8vd3d3LmNoZWxsby5ubC9+ai52cmVla2VuL3NlNDAxLworQW5kIHF1ZXN0aW9ucyB0byBtZSBjYW4gYmUgc2VuZCB0bzoKK3BlMXJ4cUBhbXNhdC5vcmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0IGIvRG9jdW1lbnRhdGlvbi91c2Ivc245YzEwMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y5YTExOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0CkBAIC0wLDAgKzEsNDgwIEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIgZm9yIExpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRG9jdW1lbnRhdGlvbiAtCisKKworSW5kZXgKKz09PT09CisxLiAgQ29weXJpZ2h0CisyLiAgRGlzY2xhaW1lcgorMy4gIExpY2Vuc2UKKzQuICBPdmVydmlldyBhbmQgZmVhdHVyZXMKKzUuICBNb2R1bGUgZGVwZW5kZW5jaWVzCis2LiAgTW9kdWxlIGxvYWRpbmcKKzcuICBNb2R1bGUgcGFyYW1ldGVycworOC4gIE9wdGlvbmFsIGRldmljZSBjb250cm9sIHRocm91Z2ggInN5c2ZzIgorOS4gIFN1cHBvcnRlZCBkZXZpY2VzCisxMC4gSG93IHRvIGFkZCBwbHVnLWluJ3MgZm9yIG5ldyBpbWFnZSBzZW5zb3JzCisxMS4gTm90ZXMgZm9yIFY0TDIgYXBwbGljYXRpb24gZGV2ZWxvcGVycworMTIuIFZpZGVvIGZyYW1lIGZvcm1hdHMKKzEzLiBDb250YWN0IGluZm9ybWF0aW9uCisxNC4gQ3JlZGl0cworCisKKzEuIENvcHlyaWdodAorPT09PT09PT09PT09CitDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+CisKKworMi4gRGlzY2xhaW1lcgorPT09PT09PT09PT09PQorU09OaVggaXMgYSB0cmFkZW1hcmsgb2YgU09OaVggVGVjaG5vbG9neSBDb21wYW55IExpbWl0ZWQsIGluYy4KK1RoaXMgc29mdHdhcmUgaXMgbm90IHNwb25zb3JlZCBvciBkZXZlbG9wZWQgYnkgU09OaVguCisKKworMy4gTGljZW5zZQorPT09PT09PT09PQorVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCis0LiBPdmVydmlldyBhbmQgZmVhdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBkcml2ZXIgYXR0ZW1wdHMgdG8gc3VwcG9ydCB0aGUgdmlkZW8gYW5kIGF1ZGlvIHN0cmVhbWluZyBjYXBhYmlsaXRpZXMgb2YKK3RoZSBkZXZpY2VzIG1vdW50aW5nIHRoZSBTT05pWCBTTjlDMTAxLCBTTjlDMTAyIGFuZCBTTjlDMTAzIFBDIENhbWVyYQorQ29udHJvbGxlcnMuCisKK0l0J3Mgd29ydGggdG8gbm90ZSB0aGF0IFNPTmlYIGhhcyBuZXZlciBjb2xsYWJvcmF0ZWQgd2l0aCB0aGUgYXV0aG9yIGR1cmluZyB0aGUKK2RldmVsb3BtZW50IG9mIHRoaXMgcHJvamVjdCwgZGVzcGl0ZSBzZXZlcmFsIHJlcXVlc3RzIGZvciBlbm91Z2ggZGV0YWlsZWQKK3NwZWNpZmljYXRpb25zIG9mIHRoZSByZWdpc3RlciB0YWJsZXMsIGNvbXByZXNzaW9uIGVuZ2luZSBhbmQgdmlkZW8gZGF0YSBmb3JtYXQKK29mIHRoZSBhYm92ZSBjaGlwcy4gTmV2ZXJ0aGVsZXNzLCB0aGVzZSBpbmZvcm1hdGlvbnMgYXJlIG5vIGxvbmdlciBuZWNlc3NhcnksCitiZWNvdXNlIGFsbCB0aGUgYXNwZWN0cyByZWxhdGVkIHRvIHRoZXNlIGNoaXBzIGFyZSBrbm93biBhbmQgaGF2ZSBiZWVuCitkZXNjcmliZWQgaW4gZGV0YWlsIGluIHRoaXMgZG9jdW1lbnRhdGlvbi4KKworVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIFZpZGVvNExpbnV4MiBhbmQgVVNCIGNvcmUgbW9kdWxlcy4gSXQgaGFzIGJlZW4KK2Rlc2lnbmVkIHRvIHJ1biBwcm9wZXJseSBvbiBTTVAgc3lzdGVtcyBhcyB3ZWxsLgorCitUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIFNOOUMxMHggZHJpdmVyIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIFVSTDoKK2h0dHA6Ly93d3cubGludXgtcHJvamVjdHMub3JnLworCitTb21lIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgZHJpdmVyIGFyZToKKworLSBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVmlkZW80TGludXgyIEFQSSAoc2VlIGFsc28gIk5vdGVzIGZvciBWNEwyCisgIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMiIHBhcmFncmFwaCk7CistIGF2YWlsYWJsZSBtbWFwIG9yIHJlYWQvcG9sbCBtZXRob2RzIGZvciB2aWRlbyBzdHJlYW1pbmcgdGhyb3VnaCBpc29jaHJvbm91cworICBkYXRhIHRyYW5zZmVyczsKKy0gYXV0b21hdGljIGRldGVjdGlvbiBvZiBpbWFnZSBzZW5zb3I7CistIHN1cHBvcnQgZm9yIGFueSB3aW5kb3cgcmVzb2x1dGlvbnMgYW5kIG9wdGlvbmFsIHBhbm5pbmcgd2l0aGluIHRoZSBtYXhpbXVtCisgIHBpeGVsIGFyZWEgb2YgaW1hZ2Ugc2Vuc29yOworLSBpbWFnZSBkb3duc2NhbGluZyB3aXRoIGFyYml0cmFyeSBzY2FsaW5nIGZhY3RvcnMgZnJvbSAxLCAyIGFuZCA0IGluIGJvdGgKKyAgZGlyZWN0aW9ucyAoc2VlICJOb3RlcyBmb3IgVjRMMiBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIiBwYXJhZ3JhcGgpOworLSB0d28gZGlmZmVyZW50IHZpZGVvIGZvcm1hdHMgZm9yIHVuY29tcHJlc3NlZCBvciBjb21wcmVzc2VkIGRhdGEgaW4gbG93IG9yCisgIGhpZ2ggY29tcHJlc3Npb24gcXVhbGl0eSAoc2VlIGFsc28gIk5vdGVzIGZvciBWNEwyIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMiCisgIGFuZCAiVmlkZW8gZnJhbWUgZm9ybWF0cyIgcGFyYWdyYXBocyk7CistIGZ1bGwgc3VwcG9ydCBmb3IgdGhlIGNhcGFiaWxpdGllcyBvZiBtYW55IG9mIHRoZSBwb3NzaWJsZSBpbWFnZSBzZW5zb3JzIHRoYXQKKyAgY2FuIGJlIGNvbm5lY3RlZCB0byB0aGUgU045QzEweCBicmlkZ2VzLCBpbmNsdWRpbmcsIGZvciBpc3RhbmNlLCByZWQsIGdyZWVuLAorICBibHVlIGFuZCBnbG9iYWwgZ2FpbiBhZGp1c3RtZW50cyBhbmQgZXhwb3N1cmUgKHNlZSAiU3VwcG9ydGVkIGRldmljZXMiCisgIHBhcmFncmFwaCBmb3IgZGV0YWlscyk7CistIHVzZSBvZiBkZWZhdWx0IGNvbG9yIHNldHRpbmdzIGZvciBzdW5saWdodCBjb25kaXRpb25zOworLSBkeW5hbWljIEkvTyBpbnRlcmZhY2UgZm9yIGJvdGggU045QzEweCBhbmQgaW1hZ2Ugc2Vuc29yIGNvbnRyb2wgYW5kCisgIG1vbml0b3JpbmcgKHNlZSAiT3B0aW9uYWwgZGV2aWNlIGNvbnRyb2wgdGhyb3VnaCAnc3lzZnMnIiBwYXJhZ3JhcGgpOworLSBkeW5hbWljIGRyaXZlciBjb250cm9sIHRoYW5rcyB0byB2YXJpb3VzIG1vZHVsZSBwYXJhbWV0ZXJzIChzZWUgIk1vZHVsZQorICBwYXJhbWV0ZXJzIiBwYXJhZ3JhcGgpOworLSB1cCB0byA2NCBjYW1lcmFzIGNhbiBiZSBoYW5kbGVkIGF0IHRoZSBzYW1lIHRpbWU7IHRoZXkgY2FuIGJlIGNvbm5lY3RlZCBhbmQKKyAgZGlzY29ubmVjdGVkIGZyb20gdGhlIGhvc3QgbWFueSB0aW1lcyB3aXRob3V0IHR1cm5pbmcgb2ZmIHRoZSBjb21wdXRlciwgaWYKKyAgeW91ciBzeXN0ZW0gc3VwcG9ydHMgaG90cGx1Z2dpbmc7CistIG5vIGtub3duIGJ1Z3MuCisKKworNS4gTW9kdWxlIGRlcGVuZGVuY2llcworPT09PT09PT09PT09PT09PT09PT09PQorRm9yIGl0IHRvIHdvcmsgcHJvcGVybHksIHRoZSBkcml2ZXIgbmVlZHMga2VybmVsIHN1cHBvcnQgZm9yIFZpZGVvNExpbnV4IGFuZAorVVNCLgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCBiZSBlbmFibGVkIGFuZAorY29ycmVzcG9uZGluZyBtb2R1bGVzIG11c3QgYmUgY29tcGlsZWQ6CisKKwkjIE11bHRpbWVkaWEgZGV2aWNlcworCSMKKwlDT05GSUdfVklERU9fREVWPW0KKworCSMgVVNCIHN1cHBvcnQKKwkjCisJQ09ORklHX1VTQj1tCisKK0luIGFkZGl0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGJlaW5nIHVzZWQsIHRoZSBtb2R1bGVzIGJlbG93IGFyZQorbmVjZXNzYXJ5OgorCisJIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKwkjCisJQ09ORklHX1VTQl9FSENJX0hDRD1tCisJQ09ORklHX1VTQl9VSENJX0hDRD1tCisJQ09ORklHX1VTQl9PSENJX0hDRD1tCisKK0FuZCBmaW5hbGx5OgorCisJIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCisJIworCUNPTkZJR19VU0JfU045QzEwMj1tCisKKworNi4gTW9kdWxlIGxvYWRpbmcKKz09PT09PT09PT09PT09PT09CitUbyB1c2UgdGhlIGRyaXZlciwgaXQgaXMgbmVjZXNzYXJ5IHRvIGxvYWQgdGhlICJzbjljMTAyIiBtb2R1bGUgaW50byBtZW1vcnkKK2FmdGVyIGV2ZXJ5IG90aGVyIG1vZHVsZSByZXF1aXJlZDogInZpZGVvZGV2IiwgInVzYmNvcmUiIGFuZCwgZGVwZW5kaW5nIG9uCit0aGUgVVNCIGhvc3QgY29udHJvbGxlciB5b3UgaGF2ZSwgImVoY2ktaGNkIiwgInVoY2ktaGNkIiBvciAib2hjaS1oY2QiLgorCitMb2FkaW5nIGNhbiBiZSBkb25lIGFzIHNob3duIGJlbG93OgorCisJW3Jvb3RAbG9jYWxob3N0IGhvbWVdIyBtb2Rwcm9iZSBzbjljMTAyCisKK0F0IHRoaXMgcG9pbnQgdGhlIGRldmljZXMgc2hvdWxkIGJlIHJlY29nbml6ZWQuIFlvdSBjYW4gaW52b2tlICJkbWVzZyIgdG8KK2FuYWx5emUga2VybmVsIG1lc3NhZ2VzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbG9hZGluZyBwcm9jZXNzIGhhcyBnb25lIHdlbGw6CisKKwlbdXNlckBsb2NhbGhvc3QgaG9tZV0kIGRtZXNnCisKKworNy4gTW9kdWxlIHBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09CitNb2R1bGUgcGFyYW1ldGVycyBhcmUgbGlzdGVkIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIHZpZGVvX25yCitUeXBlOiAgICAgICAgICAgaW50IGFycmF5IChtaW4gPSAwLCBtYXggPSA2NCkKK1N5bnRheDogICAgICAgICA8LTF8blssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgU3BlY2lmeSBWNEwyIG1pbm9yIG1vZGUgbnVtYmVyOgorICAgICAgICAgICAgICAgIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgIG4gPSB1c2UgbWlub3IgbnVtYmVyIG4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gNjQgY2FtZXJhcyB0aGlzIHdheS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICB2aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byB0aGUgc2Vjb25kCisgICAgICAgICAgICAgICAgcmVjb2duaXplZCBjYW1lcmEgYW5kIHVzZSBhdXRvIGZvciB0aGUgZmlyc3Qgb25lIGFuZCBmb3IgZXZlcnkKKyAgICAgICAgICAgICAgICBvdGhlciBjYW1lcmEuCitEZWZhdWx0OiAgICAgICAgLTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBmb3JjZV9tdW5tYXA7CitUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gNjQpCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgRm9yY2UgdGhlIGFwcGxpY2F0aW9uIHRvIHVubWFwIHByZXZpb3VzbHkgbWFwcGVkIGJ1ZmZlciBtZW1vcnkKKyAgICAgICAgICAgICAgICBiZWZvcmUgY2FsbGluZyBhbnkgVklESU9DX1NfQ1JPUCBvciBWSURJT0NfU19GTVQgaW9jdGwncy4gTm90CisgICAgICAgICAgICAgICAgYWxsIHRoZSBhcHBsaWNhdGlvbnMgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFRoaXMgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgZm9yIGVhY2ggZGV0ZWN0ZWQgY2FtZXJhLgorICAgICAgICAgICAgICAgIDAgPSBkbyBub3QgZm9yY2UgbWVtb3J5IHVubWFwcGluZyIKKyAgICAgICAgICAgICAgICAxID0gZm9yY2UgbWVtb3J5IHVubWFwcGluZyAoc2F2ZSBtZW1vcnkpIgorRGVmYXVsdDogICAgICAgIDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBkZWJ1ZworVHlwZTogICAgICAgICAgIGludAorU3ludGF4OiAgICAgICAgIDxuPiAKK0Rlc2NyaXB0aW9uOiAgICBEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbGV2ZWwsIGZyb20gMCB0byAzOgorICAgICAgICAgICAgICAgIDAgPSBub25lICh1c2UgY2FyZWZ1bGx5KQorICAgICAgICAgICAgICAgIDEgPSBjcml0aWNhbCBlcnJvcnMKKyAgICAgICAgICAgICAgICAyID0gc2lnbmlmaWNhbnQgaW5mb3JtYXRpb25zCisgICAgICAgICAgICAgICAgMyA9IG1vcmUgdmVyYm9zZSBtZXNzYWdlcworICAgICAgICAgICAgICAgIExldmVsIDMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIG9ubHksIHdoZW4gb25seSBvbmUgZGV2aWNlCisgICAgICAgICAgICAgICAgaXMgdXNlZC4gSXQgYWxzbyBzaG93cyBzb21lIG1vcmUgaW5mb3JtYXRpb25zIGFib3V0IHRoZQorICAgICAgICAgICAgICAgIGhhcmR3YXJlIGJlaW5nIGRldGVjdGVkLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBhdAorICAgICAgICAgICAgICAgIHJ1bnRpbWUgdGhhbmtzIHRvIHRoZSAvc3lzIGZpbGVzeXN0ZW0uCitEZWZhdWx0OiAgICAgICAgMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKzguIE9wdGlvbmFsIGRldmljZSBjb250cm9sIHRocm91Z2ggInN5c2ZzIiBbMV0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSXQgaXMgcG9zc2libGUgdG8gcmVhZCBhbmQgd3JpdGUgYm90aCB0aGUgU045QzEweCBhbmQgdGhlIGltYWdlIHNlbnNvcgorcmVnaXN0ZXJzIGJ5IHVzaW5nIHRoZSAic3lzZnMiIGZpbGVzeXN0ZW0gaW50ZXJmYWNlLgorCitFdmVyeSB0aW1lIGEgc3VwcG9ydGVkIGRldmljZSBpcyByZWNvZ25pemVkLCBhIHdyaXRlLW9ubHkgZmlsZSBuYW1lZCAiZ3JlZW4iIGlzCitjcmVhdGVkIGluIHRoZSAvc3lzL2NsYXNzL3ZpZGVvNGxpbnV4L3ZpZGVvWCBkaXJlY3RvcnkuIFlvdSBjYW4gc2V0IHRoZSBncmVlbgorY2hhbm5lbCdzIGdhaW4gYnkgd3JpdGluZyB0aGUgZGVzaXJlZCB2YWx1ZSB0byBpdC4gVGhlIHZhbHVlIG1heSByYW5nZSBmcm9tIDAKK3RvIDE1IGZvciBTTjlDMTAxIG9yIFNOOUMxMDIgYnJpZGdlcywgZnJvbSAwIHRvIDEyNyBmb3IgU045QzEwMyBicmlkZ2VzLgorU2ltaWxhcmx5LCBvbmx5IGZvciBTTjlDMTAzIGNvbnRyb2xsZXJzLCBibHVlIGFuZCByZWQgZ2FpbiBjb250cm9sIGZpbGVzIGFyZQorYXZhaWxhYmxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSwgZm9yIHdoaWNoIGFjY2VwdGVkIHZhbHVlcyBtYXkgcmFuZ2UgZnJvbSAwIHRvCisxMjcuCisKK1RoZXJlIGFyZSBvdGhlciBmb3VyIGVudHJpZXMgaW4gdGhlIGRpcmVjdG9yeSBhYm92ZSBmb3IgZWFjaCByZWdpc3RlcmVkIGNhbWVyYToKKyJyZWciLCAidmFsIiwgImkyY19yZWciIGFuZCAiaTJjX3ZhbCIuIFRoZSBmaXJzdCB0d28gZmlsZXMgY29udHJvbCB0aGUKK1NOOUMxMHggYnJpZGdlLCB3aGlsZSB0aGUgb3RoZXIgdHdvIGNvbnRyb2wgdGhlIHNlbnNvciBjaGlwLiAicmVnIiBhbmQKKyJpMmNfcmVnIiBob2xkIHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgcmVnaXN0ZXIgaW5kZXggd2hlcmUgdGhlIGZvbGxvd2luZworcmVhZGluZy93cml0aW5nIG9wZXJhdGlvbnMgYXJlIGFkZHJlc3NlZCBhdCB0aHJvdWdoICJ2YWwiIGFuZCAiaTJjX3ZhbCIuIFRoZWlyCit1c2UgaXMgbm90IGludGVuZGVkIGZvciBlbmQtdXNlcnMuIE5vdGUgdGhhdCAiaTJjX3JlZyIgYW5kICJpMmNfdmFsIiB3aWxsIG5vdAorYmUgY3JlYXRlZCBpZiB0aGUgc2Vuc29yIGRvZXMgbm90IGFjdHVhbGx5IHN1cHBvcnQgdGhlIHN0YW5kYXJkIEkyQyBwcm90b2NvbCBvcgoraXRzIHJlZ2lzdGVycyBhcmUgbm90IDgtYml0IGxvbmcuIEFsc28sIHJlbWVtYmVyIHRoYXQgeW91IG11c3QgYmUgbG9nZ2VkIGluIGFzCityb290IGJlZm9yZSB3cml0aW5nIHRvIHRoZW0uCisKK0FzIGFuIGV4YW1wbGUsIHN1cHBvc2Ugd2Ugd2VyZSB0byB3YW50IHRvIHJlYWQgdGhlIHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUKK3JlZ2lzdGVyIG51bWJlciAxIG9mIHRoZSBzZW5zb3IgcmVnaXN0ZXIgdGFibGUgLSB3aGljaCBpcyB1c3VhbGx5IHRoZSBwcm9kdWN0CitpZGVudGlmaWVyIC0gb2YgdGhlIGNhbWVyYSByZWdpc3RlcmVkIGFzICIvZGV2L3ZpZGVvMCI6CisKKwlbcm9vdEBsb2NhbGhvc3QgI10gY2QgL3N5cy9jbGFzcy92aWRlbzRsaW51eC92aWRlbzAKKwlbcm9vdEBsb2NhbGhvc3QgI10gZWNobyAxID4gaTJjX3JlZworCVtyb290QGxvY2FsaG9zdCAjXSBjYXQgaTJjX3ZhbAorCitOb3RlIHRoYXQgImNhdCIgd2lsbCBmYWlsIGlmIHNlbnNvciByZWdpc3RlcnMgY2Fubm90IGJlIHJlYWQuCisKK05vdyBsZXQncyBzZXQgdGhlIGdyZWVuIGdhaW4ncyByZWdpc3RlciBvZiB0aGUgU045QzEwMSBvciBTTjlDMTAyIGNoaXBzIHRvIDI6CisKKwlbcm9vdEBsb2NhbGhvc3QgI10gZWNobyAweDExID4gcmVnCisJW3Jvb3RAbG9jYWxob3N0ICNdIGVjaG8gMiA+IHZhbAorCitOb3RlIHRoYXQgdGhlIFNOOUMxMHggYWx3YXlzIHJldHVybnMgMCB3aGVuIHNvbWUgb2YgaXRzIHJlZ2lzdGVycyBhcmUgcmVhZC4KK1RvIGF2b2lkIHJhY2UgY29uZGl0aW9ucywgYWxsIHRoZSBJL08gYWNjZXNzZXMgdG8gdGhlIGFib3ZlIGZpbGVzIGFyZQorc2VyaWFsaXplZC4KKworVGhlIHN5c2ZzIGludGVyZmFjZSBhbHNvIHByb3ZpZGVzIHRoZSAiZnJhbWVfaGVhZGVyIiBlbnRyeSwgd2hpY2ggZXhwb3J0cyB0aGUKK2ZyYW1lIGhlYWRlciBvZiB0aGUgbW9zdCByZWNlbnQgcmVxdWVzdGVkIGFuZCBjYXB0dXJlZCB2aWRlbyBmcmFtZS4gVGhlIGhlYWRlcgoraXMgMTItYnl0ZXMgbG9uZyBhbmQgaXMgYXBwZW5kZWQgdG8gZXZlcnkgdmlkZW8gZnJhbWUgYnkgdGhlIFNOOUMxMHgKK2NvbnRyb2xsZXJzLiBBcyBhbiBleGFtcGxlLCB0aGlzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgYnkgdGhlIHVzZXIKK2FwcGxpY2F0aW9uIGZvciBpbXBsZW1lbnRpbmcgYXV0by1leHBvc3VyZSBmZWF0dXJlcyB2aWEgc29mdHdhcmUuIAorCitUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyB0aGUgZnJhbWUgaGVhZGVyOgorCitCeXRlICMgIFZhbHVlICAgICAgICAgRGVzY3JpcHRpb24KKy0tLS0tLSAgLS0tLS0gICAgICAgICAtLS0tLS0tLS0tLQorMHgwMCAgICAweEZGICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuLgorMHgwMSAgICAweEZGICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuLgorMHgwMiAgICAweDAwICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuLgorMHgwMyAgICAweEM0ICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuLgorMHgwNCAgICAweEM0ICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuLgorMHgwNSAgICAweDk2ICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuLgorMHgwNiAgICAweDAwIG9yIDB4MDEgIFVua25vd24gbWVhbmluZy4gVGhlIGV4YWN0IHZhbHVlIGRlcGVuZHMgb24gdGhlIGNoaXAuCisweDA3ICAgIDB4WFggICAgICAgICAgVmFyaWFibGUgdmFsdWUsIHdob3NlIGJpdHMgYXJlIGZmMDB1enpjLCB3aGVyZSBmZiBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgY291bnRlciwgdSBpcyB1bmtub3duLCB6eiBpcyBhIHNpemUgaW5kaWNhdG9yCisgICAgICAgICAgICAgICAgICAgICAgKDAwID0gVkdBLCAwMSA9IFNJRiwgMTAgPSBRU0lGKSBhbmQgYyBzdGFuZHMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgImNvbXByZXNzaW9uIGVuYWJsZWQiICgxID0geWVzLCAwID0gbm8pLgorMHgwOCAgICAweFhYICAgICAgICAgIEJyaWdodG5lc3Mgc3VtIGluc2lkZSBBdXRvLUV4cG9zdXJlIGFyZWEgKGxvdy1ieXRlKS4KKzB4MDkgICAgMHhYWCAgICAgICAgICBCcmlnaHRuZXNzIHN1bSBpbnNpZGUgQXV0by1FeHBvc3VyZSBhcmVhIChoaWdoLWJ5dGUpLgorICAgICAgICAgICAgICAgICAgICAgIEZvciBhIHB1cmUgd2hpdGUgaW1hZ2UsIHRoaXMgbnVtYmVyIHdpbGwgYmUgZXF1YWwgdG8gNTAwCisgICAgICAgICAgICAgICAgICAgICAgdGltZXMgdGhlIGFyZWEgb2YgdGhlIHNwZWNpZmllZCBBRSBhcmVhLiBGb3IgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgbm90IHB1cmUgd2hpdGUsIHRoZSB2YWx1ZSBzY2FsZXMgZG93biBhY2NvcmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICB0byByZWxhdGl2ZSB3aGl0ZW5lc3MuCisweDBBICAgIDB4WFggICAgICAgICAgQnJpZ2h0bmVzcyBzdW0gb3V0c2lkZSBBdXRvLUV4cG9zdXJlIGFyZWEgKGxvdy1ieXRlKS4KKzB4MEIgICAgMHhYWCAgICAgICAgICBCcmlnaHRuZXNzIHN1bSBvdXRzaWRlIEF1dG8tRXhwb3N1cmUgYXJlYSAoaGlnaC1ieXRlKS4KKyAgICAgICAgICAgICAgICAgICAgICBGb3IgYSBwdXJlIHdoaXRlIGltYWdlLCB0aGlzIG51bWJlciB3aWxsIGJlIGVxdWFsIHRvIDEyNQorICAgICAgICAgICAgICAgICAgICAgIHRpbWVzIHRoZSBhcmVhIG91dHNpZGUgb2YgdGhlIHNwZWNpZmllZCBBRSBhcmVhLiBGb3IKKyAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgdGhhdCBhcmUgbm90IHB1cmUgd2hpdGUsIHRoZSB2YWx1ZSBzY2FsZXMgZG93bgorICAgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZyB0byByZWxhdGl2ZSB3aGl0ZW5lc3MuCisKK1RoZSBBRSBhcmVhIChzeCwgc3ksIGV4LCBleSkgaW4gdGhlIGFjdGl2ZSB3aW5kb3cgY2FuIGJlIHNldCBieSBwcm9ncmFtbWluZyB0aGUKK3JlZ2lzdGVycyAweDFjLCAweDFkLCAweDFlIGFuZCAweDFmIG9mIHRoZSBTTjlDMTB4IGNvbnRyb2xsZXJzLCB3aGVyZSBvbmUgdW5pdAorY29ycmVzcG9uZHMgdG8gMzIgcGl4ZWxzLgorCitbMV0gVGhlIGZyYW1lIGhlYWRlciBoYXMgYmVlbiBkb2N1bWVudGVkIGJ5IEJlcnRyaWsgU2lra2VuLgorCisKKzkuIFN1cHBvcnRlZCBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PQorTm9uZSBvZiB0aGUgbmFtZXMgb2YgdGhlIGNvbXBhbmllcyBhcyB3ZWxsIGFzIHRoZWlyIHByb2R1Y3RzIHdpbGwgYmUgbWVudGlvbmVkCitoZXJlLiBUaGV5IGhhdmUgbmV2ZXIgY29sbGFib3JhdGVkIHdpdGggdGhlIGF1dGhvciwgc28gbm8gYWR2ZXJ0aXNpbmcuCisKK0Zyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgYSBkcml2ZXIsIHdoYXQgdW5hbWJpZ3VvdXNseSBpZGVudGlmeSBhIGRldmljZSBhcmUKK2l0cyB2ZW5kb3IgYW5kIHByb2R1Y3QgVVNCIGlkZW50aWZpZXJzLiBCZWxvdyBpcyBhIGxpc3Qgb2Yga25vd24gaWRlbnRpZmllcnMgb2YKK2RldmljZXMgbW91bnRpbmcgdGhlIFNOOUMxMHggUEMgY2FtZXJhIGNvbnRyb2xsZXJzOgorCitWZW5kb3IgSUQgIFByb2R1Y3QgSUQKKy0tLS0tLS0tLSAgLS0tLS0tLS0tLQorMHgwYzQ1ICAgICAweDYwMDEKKzB4MGM0NSAgICAgMHg2MDA1CisweDBjNDUgICAgIDB4NjAwOQorMHgwYzQ1ICAgICAweDYwMGQKKzB4MGM0NSAgICAgMHg2MDI0CisweDBjNDUgICAgIDB4NjAyNQorMHgwYzQ1ICAgICAweDYwMjgKKzB4MGM0NSAgICAgMHg2MDI5CisweDBjNDUgICAgIDB4NjAyYQorMHgwYzQ1ICAgICAweDYwMmIKKzB4MGM0NSAgICAgMHg2MDJjCisweDBjNDUgICAgIDB4NjAzMAorMHgwYzQ1ICAgICAweDYwODAKKzB4MGM0NSAgICAgMHg2MDgyCisweDBjNDUgICAgIDB4NjA4MworMHgwYzQ1ICAgICAweDYwODgKKzB4MGM0NSAgICAgMHg2MDhhCisweDBjNDUgICAgIDB4NjA4YgorMHgwYzQ1ICAgICAweDYwOGMKKzB4MGM0NSAgICAgMHg2MDhlCisweDBjNDUgICAgIDB4NjA4ZgorMHgwYzQ1ICAgICAweDYwYTAKKzB4MGM0NSAgICAgMHg2MGEyCisweDBjNDUgICAgIDB4NjBhMworMHgwYzQ1ICAgICAweDYwYTgKKzB4MGM0NSAgICAgMHg2MGFhCisweDBjNDUgICAgIDB4NjBhYgorMHgwYzQ1ICAgICAweDYwYWMKKzB4MGM0NSAgICAgMHg2MGFlCisweDBjNDUgICAgIDB4NjBhZgorMHgwYzQ1ICAgICAweDYwYjAKKzB4MGM0NSAgICAgMHg2MGIyCisweDBjNDUgICAgIDB4NjBiMworMHgwYzQ1ICAgICAweDYwYjgKKzB4MGM0NSAgICAgMHg2MGJhCisweDBjNDUgICAgIDB4NjBiYgorMHgwYzQ1ICAgICAweDYwYmMKKzB4MGM0NSAgICAgMHg2MGJlCisKK1RoZSBsaXN0IGFib3ZlIGRvZXMgbm90IGltcGx5IHRoYXQgYWxsIHRob3NlIGRldmljZXMgd29yayB3aXRoIHRoaXMgZHJpdmVyOiB1cAordW50aWwgbm93IG9ubHkgdGhlIG9uZXMgdGhhdCBtb3VudCB0aGUgZm9sbG93aW5nIGltYWdlIHNlbnNvcnMgYXJlIHN1cHBvcnRlZDsKK2tlcm5lbCBtZXNzYWdlcyB3aWxsIGFsd2F5cyB0ZWxsIHlvdSB3aGV0aGVyIHRoaXMgaXMgdGhlIGNhc2U6CisKK01vZGVsICAgICAgIE1hbnVmYWN0dXJlcgorLS0tLS0gICAgICAgLS0tLS0tLS0tLS0tCitIVjcxMzFEICAgICBIeW5peCBTZW1pY29uZHVjdG9yLCBJbmMuCitNSS0wMzQzICAgICBNaWNyb24gVGVjaG5vbG9neSwgSW5jLgorUEFTMTA2QiAgICAgUGl4QXJ0IEltYWdpbmcsIEluYy4KK1BBUzIwMkJDQiAgIFBpeEFydCBJbWFnaW5nLCBJbmMuCitUQVM1MTEwQzFCICBUYWl3YW4gQWR2YW5jZWQgU2Vuc29yIENvcnBvcmF0aW9uCitUQVM1MTMwRDFCICBUYWl3YW4gQWR2YW5jZWQgU2Vuc29yIENvcnBvcmF0aW9uCisKK0FsbCB0aGUgYXZhaWxhYmxlIGNvbnRyb2wgc2V0dGluZ3Mgb2YgZWFjaCBpbWFnZSBzZW5zb3IgYXJlIHN1cHBvcnRlZCB0aHJvdWdoCit0aGUgVjRMMiBpbnRlcmZhY2UuCisKK0RvbmF0aW9ucyBvZiBuZXcgbW9kZWxzIGZvciBmdXJ0aGVyIHRlc3RpbmcgYW5kIHN1cHBvcnQgd291bGQgYmUgbXVjaAorYXBwcmVjaWF0ZWQuIE5vbi1hdmFpbGFibGUgaGFyZHdhcmUgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBhdXRob3Igb2YgdGhpcworZHJpdmVyLgorCisKKzEwLiBIb3cgdG8gYWRkIHBsdWctaW4ncyBmb3IgbmV3IGltYWdlIHNlbnNvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0l0IHNob3VsZCBiZSBlYXN5IHRvIHdyaXRlIHBsdWctaW4ncyBmb3IgbmV3IHNlbnNvcnMgYnkgdXNpbmcgdGhlIHNtYWxsIEFQSQordGhhdCBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGlzIHB1cnBvc2UsIHdoaWNoIGlzIHByZXNlbnQgaW4gInNuOWMxMDJfc2Vuc29yLmgiCisoZG9jdW1lbnRhdGlvbiBpcyBpbmNsdWRlZCB0aGVyZSkuIEFzIGFuIGV4YW1wbGUsIGhhdmUgYSBsb29rIGF0IHRoZSBjb2RlIGluCisic245YzEwMl9wYXMxMDZiLmMiLCB3aGljaCB1c2VzIHRoZSBtZW50aW9uZWQgaW50ZXJmYWNlLgorCitBdCB0aGUgbW9tZW50LCBwb3NzaWJsZSB1bnN1cHBvcnRlZCBpbWFnZSBzZW5zb3JzIGFyZTogQ0lTLVZGMTAgKFZHQSksCitPVjc2MjAgKFZHQSksIE9WNzYzMCAoVkdBKS4KKworCisxMS4gTm90ZXMgZm9yIFY0TDIgYXBwbGljYXRpb24gZGV2ZWxvcGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgZHJpdmVyIGZvbGxvd3MgdGhlIFY0TDIgQVBJIHNwZWNpZmljYXRpb25zLiBJbiBwYXJ0aWN1bGFyLCBpdCBlbmZvcmNlcyB0d28KK3J1bGVzOgorCistIGV4YWN0bHkgb25lIEkvTyBtZXRob2QsIGVpdGhlciAibW1hcCIgb3IgInJlYWQiLCBpcyBhc3NvY2lhdGVkIHdpdGggZWFjaAorZmlsZSBkZXNjcmlwdG9yLiBPbmNlIGl0IGlzIHNlbGVjdGVkLCB0aGUgYXBwbGljYXRpb24gbXVzdCBjbG9zZSBhbmQgcmVvcGVuIHRoZQorZGV2aWNlIHRvIHN3aXRjaCB0byB0aGUgb3RoZXIgSS9PIG1ldGhvZDsKKworLSBhbHRob3VnaCBpdCBpcyBub3QgbWFuZGF0b3J5LCBwcmV2aW91c2x5IG1hcHBlZCBidWZmZXIgbWVtb3J5IHNob3VsZCBhbHdheXMKK2JlIHVubWFwcGVkIGJlZm9yZSBjYWxsaW5nIGFueSAiVklESU9DX1NfQ1JPUCIgb3IgIlZJRElPQ19TX0ZNVCIgaW9jdGwncy4KK1RoZSBzYW1lIG51bWJlciBvZiBidWZmZXJzIGFzIGJlZm9yZSB3aWxsIGJlIGFsbG9jYXRlZCBhZ2FpbiB0byBtYXRjaCB0aGUgc2l6ZQorb2YgdGhlIG5ldyB2aWRlbyBmcmFtZXMsIHNvIHlvdSBoYXZlIHRvIG1hcCB0aGUgYnVmZmVycyBhZ2FpbiBiZWZvcmUgYW55IEkvTworYXR0ZW1wdHMgb24gdGhlbS4KKworQ29uc2lzdGVudGx5IHdpdGggdGhlIGhhcmR3YXJlIGxpbWl0cywgdGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBpbWFnZQorZG93bnNjYWxpbmcgd2l0aCBhcmJpdHJhcnkgc2NhbGluZyBmYWN0b3JzIGZyb20gMSwgMiBhbmQgNCBpbiBib3RoIGRpcmVjdGlvbnMuCitIb3dldmVyLCB0aGUgVjRMMiBBUEkgc3BlY2lmaWNhdGlvbnMgZG9uJ3QgY29ycmVjdGx5IGRlZmluZSBob3cgdGhlIHNjYWxpbmcKK2ZhY3RvciBjYW4gYmUgY2hvc2VuIGFyYml0cmFyaWx5IGJ5IHRoZSAibmVnb3RpYXRpb24iIG9mIHRoZSAic291cmNlIiBhbmQKKyJ0YXJnZXQiIHJlY3RhbmdsZXMuIFRvIHdvcmsgYXJvdW5kIHRoaXMgZmxhdywgd2UgaGF2ZSBhZGRlZCB0aGUgY29udmVudGlvbgordGhhdCwgZHVyaW5nIHRoZSBuZWdvdGlhdGlvbiwgd2hlbmV2ZXIgdGhlICJWSURJT0NfU19DUk9QIiBpb2N0bCBpcyBpc3N1ZWQsIHRoZQorc2NhbGluZyBmYWN0b3IgaXMgcmVzdG9yZWQgdG8gMS4KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCB2aWRlbyBmb3JtYXRzOiB0aGUgZmlyc3Qgb25lIGlzIHRoZSAiOC1iaXQKK1NlcXVlbnRpYWwgQmF5ZXIiIGZvcm1hdCBhbmQgY2FuIGJlIHVzZWQgdG8gb2J0YWluIHVuY29tcHJlc3NlZCB2aWRlbyBkYXRhCitmcm9tIHRoZSBkZXZpY2UgdGhyb3VnaCB0aGUgY3VycmVudCBJL08gbWV0aG9kLCB3aGlsZSB0aGUgc2Vjb25kIG9uZSBwcm92aWRlcworInJhdyIgY29tcHJlc3NlZCB2aWRlbyBkYXRhICh3aXRob3V0IGZyYW1lIGhlYWRlcnMgbm90IHJlbGF0ZWQgdG8gdGhlCitjb21wcmVzc2VkIGRhdGEpLiBUaGUgY29tcHJlc3Npb24gcXVhbGl0eSBtYXkgdmFyeSBmcm9tIDAgdG8gMSBhbmQgY2FuIGJlCitzZWxlY3RlZCBvciBxdWVyaWVkIHRoYW5rcyB0byB0aGUgVklESU9DX1NfSlBFR0NPTVAgYW5kIFZJRElPQ19HX0pQRUdDT01QIFY0TDIKK2lvY3RsJ3MuIEZvciBtYXhpbXVtIGZsZXhpYmlsaXR5LCBib3RoIHRoZSBkZWZhdWx0IGFjdGl2ZSB2aWRlbyBmb3JtYXQgYW5kIHRoZQorZGVmYXVsdCBjb21wcmVzc2lvbiBxdWFsaXR5IGRlcGVuZCBvbiBob3cgdGhlIGltYWdlIHNlbnNvciBiZWluZyB1c2VkIGlzCitpbml0aWFsaXplZCAoYXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBBUEkgZm9yIHRoZSBpbWFnZSBzZW5zb3JzCitzdXBwbGllZCBieSB0aGlzIGRyaXZlcikuCisKKworMTIuIFZpZGVvIGZyYW1lIGZvcm1hdHMgWzFdCis9PT09PT09PT09PT09PT09PT09PT09PQorVGhlIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzIGNhbiBzZW5kIGltYWdlcyBpbiB0d28gcG9zc2libGUgdmlkZW8KK2Zvcm1hdHMgb3ZlciB0aGUgVVNCOiBlaXRoZXIgbmF0aXZlICJTZXF1ZW50aWFsIFJHQiBCYXllciIgb3IgSHVmZm1hbgorY29tcHJlc3NlZC4gVGhlIGxhdHRlciBpcyB1c2VkIHRvIGFjaGlldmUgaGlnaCBmcmFtZSByYXRlcy4gVGhlIGN1cnJlbnQgdmlkZW8KK2Zvcm1hdCBtYXkgYmUgc2VsZWN0ZWQgb3IgcXVlcmllZCBmcm9tIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGJ5IGNhbGxpbmcgdGhlCitWSURJT0NfU19GTVQgb3IgVklESU9DX0dfRk1UIGlvY3RsJ3MsIGFzIGRlc2NyaWJlZCBpbiB0aGUgVjRMMiBBUEkKK3NwZWNpZmljYXRpb25zLgorCitUaGUgbmFtZSAiU2VxdWVudGlhbCBCYXllciIgaW5kaWNhdGVzIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlIHJlZCwgZ3JlZW4gYW5kCitibHVlIHBpeGVscyBpbiBvbmUgdmlkZW8gZnJhbWUuIEVhY2ggcGl4ZWwgaXMgYXNzb2NpYXRlZCB3aXRoIGEgOC1iaXQgbG9uZwordmFsdWUgYW5kIGlzIGRpc3Bvc2VkIGluIG1lbW9yeSBhY2NvcmRpbmcgdG8gdGhlIHBhdHRlcm4gc2hvd24gYmVsb3c6CisKK0JbMF0gICBHWzFdICAgIEJbMl0gICAgR1szXSAgICAuLi4gICBCW20tMl0gICAgICAgICBHW20tMV0KK0dbbV0gICBSW20rMV0gIEdbbSsyXSAgUlttKzJdICAuLi4gICBHWzJtLTJdICAgICAgICBSWzJtLTFdIAorLi4uCisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlsobi0xKShtLTIpXSAgR1sobi0xKShtLTEpXQorLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdbbihtLTIpXSAgICAgIFJbbihtLTEpXQorCitUaGUgYWJvdmUgbWF0cml4IGFsc28gcmVwcmVzZW50cyB0aGUgc2VxdWVudGlhbCBvciBwcm9ncmVzc2l2ZSByZWFkLW91dCBtb2RlIG9mCit0aGUgKG4sIG0pIEJheWVyIGNvbG9yIGZpbHRlciBhcnJheSB1c2VkIGluIG1hbnkgQ0NEL0NNT1MgaW1hZ2Ugc2Vuc29ycy4KKworT25lIGNvbXByZXNzZWQgdmlkZW8gZnJhbWUgY29uc2lzdHMgb2YgYSBiaXRzdHJlYW0gdGhhdCBlbmNvZGVzIGZvciBldmVyeSBSLCBHLAorb3IgQiBwaXhlbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2YWx1ZSBvZiB0aGUgcGl4ZWwgaXRzZWxmIGFuZCBzb21lCityZWZlcmVuY2UgcGl4ZWwgdmFsdWUuIFBpeGVscyBhcmUgb3JnYW5pc2VkIGluIHRoZSBCYXllciBwYXR0ZXJuIGFuZCB0aGUgQmF5ZXIKK3N1Yi1waXhlbHMgYXJlIHRyYWNrZWQgaW5kaXZpZHVhbGx5IGFuZCBhbHRlcm5hdGluZ2x5LiBGb3IgZXhhbXBsZSwgaW4gdGhlCitmaXJzdCBsaW5lIHZhbHVlcyBmb3IgdGhlIEIgYW5kIEcxIHBpeGVscyBhcmUgYWx0ZXJuYXRpbmdseSBlbmNvZGVkLCB3aGlsZSBpbgordGhlIHNlY29uZCBsaW5lIHZhbHVlcyBmb3IgdGhlIEcyIGFuZCBSIHBpeGVscyBhcmUgYWx0ZXJuYXRpbmdseSBlbmNvZGVkLgorCitUaGUgcGl4ZWwgcmVmZXJlbmNlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgZm9sbG93czoKKy0gdGhlIDQgdG9wIGxlZnQgcGl4ZWxzIGFyZSBlbmNvZGVkIGluIHJhdyB1bmNvbXByZXNzZWQgOC1iaXQgZm9ybWF0OworLSB0aGUgdmFsdWUgaW4gdGhlIHRvcCB0d28gcm93cyBpcyB0aGUgdmFsdWUgb2YgdGhlIHBpeGVsIGxlZnQgb2YgdGhlIGN1cnJlbnQKKyAgcGl4ZWw7CistIHRoZSB2YWx1ZSBpbiB0aGUgbGVmdCBjb2x1bW4gaXMgdGhlIHZhbHVlIG9mIHRoZSBwaXhlbCBhYm92ZSB0aGUgY3VycmVudAorICBwaXhlbDsKKy0gZm9yIGFsbCBvdGhlciBwaXhlbHMsIHRoZSByZWZlcmVuY2UgdmFsdWUgaXMgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHZhbHVlIG9mIHRoZQorICBwaXhlbCBvbiB0aGUgbGVmdCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBwaXhlbCBhYm92ZSB0aGUgY3VycmVudCBwaXhlbDsKKy0gdGhlcmUgaXMgb25lIGNvZGUgaW4gdGhlIGJpdHN0cmVhbSB0aGF0IHNwZWNpZmllcyB0aGUgdmFsdWUgb2YgYSBwaXhlbAorICBkaXJlY3RseSAoaW4gNC1iaXQgcmVzb2x1dGlvbik7CistIHBpeGVsIHZhbHVlcyBuZWVkIHRvIGJlIGNsYW1wZWQgaW5zaWRlIHRoZSByYW5nZSBbMC4uMjU1XSBmb3IgcHJvcGVyCisgIGRlY29kaW5nLgorCitUaGUgYWxnb3JpdGhtIHB1cmVseSBkZXNjcmliZXMgdGhlIGNvbnZlcnNpb24gZnJvbSBjb21wcmVzc2VkIEJheWVyIGNvZGUgdXNlZAoraW4gdGhlIFNOOUMxMHggY2hpcHMgdG8gdW5jb21wcmVzc2VkIEJheWVyLiBBZGRpdGlvbmFsIHN0ZXBzIGFyZSByZXF1aXJlZCB0bworY29udmVydCB0aGlzIHRvIGEgY29sb3IgaW1hZ2UgKGkuZS4gYSBjb2xvciBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobSkuCisgCitUaGUgZm9sbG93aW5nIEh1ZmZtYW4gY29kZXMgaGF2ZSBiZWVuIGZvdW5kOgorMDogKzAgKHJlbGF0aXZlIHRvIHJlZmVyZW5jZSBwaXhlbCB2YWx1ZSkgCisxMDA6ICs0CisxMDE6IC00PworMTExMHh4eHg6IHNldCBhYnNvbHV0ZSB2YWx1ZSB0byB4eHh4LjAwMDAgCisxMTAxOiArMTEKKzExMTE6IC0xMQorMTEwMDE6ICsyMAorMTEwMDAwOiAtMjAKKzExMDAwMTogPz8/IC0gdGhlc2UgY29kZXMgYXJlIGFwcGFyZW50bHkgbm90IHVzZWQKKworWzFdIFRoZSBIdWZmbWFuIGNvbXByZXNzaW9uIGFsZ29yaXRobSBoYXMgYmVlbiByZXZlcnNlLWVuZ2luZWVyZWQgYW5kCisgICAgZG9jdW1lbnRlZCBieSBCZXJ0cmlrIFNpa2tlbi4KKworCisxMy4gQ29udGFjdCBpbmZvcm1hdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBhdXRob3IgbWF5IGJlIGNvbnRhY3RlZCBieSBlLW1haWwgYXQgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+LgorCitHUEcvUEdQIGVuY3J5cHRlZCBlLW1haWwncyBhcmUgYWNjZXB0ZWQuIFRoZSBHUEcga2V5IElEIG9mIHRoZSBhdXRob3IgaXMKKydGQ0U2MzVBNCc7IHRoZSBwdWJsaWMgMTAyNC1iaXQga2V5IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYW55IGtleXNlcnZlcjsKK3RoZSBmaW5nZXJwcmludCBpczogJzg4RTggRjMyRiA3MjQ0IDY4QkEgMzk1OCAgNUQ0MCA5OURBIDVEMkEgRkNFNiAzNUE0Jy4KKworCisxNC4gQ3JlZGl0cworPT09PT09PT09PT0KK01hbnkgdGhhbmtzIHRvIGZvbGxvd2luZyBwZXJzb25zIGZvciB0aGVpciBjb250cmlidXRlIChsaXN0ZWQgaW4gYWxwaGFiZXRpY2FsCitvcmRlcik6CisKKy0gTHVjYSBDYXBlbGxvIGZvciB0aGUgZG9uYXRpb24gb2YgYSB3ZWJjYW07CistIEpvYW8gUm9kcmlnbyBGdXphcm8sIEpvYW8gTGltaXJpbywgQ2xhdWRpbyBGaWxobyBhbmQgQ2FpbyBCZWdvdHRpIGZvciB0aGUKKyAgZG9uYXRpb24gb2YgYSB3ZWJjYW07CistIENhcmxvcyBFZHVhcmRvIE1lZGFnbGlhIER5b25pc2lvLCB3aG8gYWRkZWQgdGhlIHN1cHBvcnQgZm9yIHRoZSBQQVMyMDJCQ0IKKyAgaW1hZ2Ugc2Vuc29yOworLSBTdGVmYW5vIE1venppLCB3aG8gZG9uYXRlZCA0NSBFVTsKKy0gQmVydHJpayBTaWtrZW4sIHdobyByZXZlcnNlLWVuZ2luZWVyZWQgYW5kIGRvY3VtZW50ZWQgdGhlIEh1ZmZtYW4gY29tcHJlc3Npb24KKyAgYWxnb3JpdGhtIHVzZWQgaW4gdGhlIFNOOUMxMHggY29udHJvbGxlcnMgYW5kIGltcGxlbWVudGVkIHRoZSBmaXJzdCBkZWNvZGVyOworLSBNaXp1bm8gVGFrYWZ1bWkgZm9yIHRoZSBkb25hdGlvbiBvZiBhIHdlYmNhbTsKKy0gQW4gImFub255bW91cyIgZG9uYXRvciAod2hvIGRpZG4ndCB3YW50IGhpcyBuYW1lIHRvIGJlIHJldmVhbGVkKSBmb3IgdGhlCisgIGRvbmF0aW9uIG9mIGEgd2ViY2FtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Ivc3R2NjgwLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3N0djY4MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0ODA0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3N0djY4MC50eHQKQEAgLTAsMCArMSw1NSBAQAorTGludXggZHJpdmVyIGZvciBTVFYwNjgwIGJhc2VkIFVTQiBjYW1lcmFzCisKK0NvcHlyaWdodCwgMjAwMSwgS2V2aW4gU2lzc29uCisKKworSU5UUk9EVUNUSU9OOgorCitTVE1pY3JvZWxlY3Ryb25pY3MgcHJvZHVjZXMgdGhlIFNUVjA2ODBCIGNoaXAsIHdoaWNoIGNvbWVzIGluIHR3byAKK3R5cGVzLCAtMDAxIGFuZCAtMDAzLiBUaGUgLTAwMyB2ZXJzaW9uIGFsbG93cyB0aGUgcmVjb3JkaW5nIGFuZCBkb3dubG9hZGluZyAKK29mIHNvdW5kIGNsaXBzIGZyb20gdGhlIGNhbWVyYSwgYW5kIGFsbG93cyBhIGZsYXNoIGF0dGFjaG1lbnQuIE90aGVyd2lzZSwgCitpdCB1c2VzIHRoZSBzYW1lIGNvbW1hbmRzIGFzIHRoZSAtMDAxIHZlcnNpb24uIEJvdGggdmVyc2lvbnMgc3VwcG9ydCBhIAordmFyaWV0eSBvZiBTRFJBTSBzaXplcyBhbmQgc2Vuc29ycywgYWxsb3dpbmcgZm9yIGEgbWF4aW11bSBvZiAyNiBWR0Egb3IgMjAgCitDSUYgcGljdHVyZXMuIFRoZSBTVFYwNjgwIHN1cHBvcnRzIGVpdGhlciBhIHNlcmlhbCBvciBhIHVzYiBpbnRlcmZhY2UsIGFuZCAKK3ZpZGVvIGlzIHBvc3NpYmxlIHRocm91Z2ggdGhlIHVzYiBpbnRlcmZhY2UuCisKK1RoZSBmb2xsb3dpbmcgY2FtZXJhcyBhcmUga25vd24gdG8gd29yayB3aXRoIHRoaXMgZHJpdmVyLCBhbHRob3VnaCBhbnkgCitjYW1lcmEgd2l0aCBWZW5kb3IvUHJvZHVjdCBjb2RlcyBvZiAwNTUzLzAyMDIgc2hvdWxkIHdvcms6CisKK0FpcHRlayBQZW5jYW0gKHZhcmlvdXMgbW9kZWxzKQorTmlzaXMgUXVpY2tQaXggMgorUmFkaW8gU2hhY2sgJ0tpZCdzIGRpZ2l0YWwgY2FtZXJhJyAoIzYwLTEyMDcpCitBdCBsZWFzdCBvbmUgVHJ1c3QgU3B5Y2FtIG1vZGVsCitTZXZlcmFsIG90aGVyIEV1cm9wZWFuIGJyYW5kIG1vZGVscworCitXSEFUIFlPVSBORUVEOgorCistCVVTQiBzdXBwb3J0CistCVZJREVPNExJTlVYIHN1cHBvcnQKKworTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBVU0Igc3VwcG9ydCBmb3IgbGludXggY2FuIGJlIGZvdW5kIGF0OgoraHR0cDovL3d3dy5saW51eC11c2Iub3JnCisKKworTU9EVUxFIE9QVElPTlM6CisKK1doZW4gdGhlIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgeW91IGNhbiBzZXQgYSAic3dhcFJHQj0xIgorb3B0aW9uLCBpZiBuZWNlc3NhcnksIGZvciB0aG9zZSBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIGl0IAorKHN1Y2ggYXMgeGF3dHYpLiBIb3dldmVyLCB0aGUgZHJpdmVyIHNob3VsZCBkZXRlY3QgYW5kIHNldCB0aGlzIAorYXV0b21hdGljYWxseSwgc28gdGhpcyBvcHRpb24gc2hvdWxkIG5vdCBub3JtYWxseSBiZSB1c2VkLgorCisKK0tOT1dOIFBST0JMRU1TOgorCitUaGUgZHJpdmVyIHNlZW1zIHRvIHdvcmsgYmV0dGVyIHdpdGggdGhlIHVzYi1vaGNpIHRoYW4gdGhlIHVzYi11aGNpIGhvc3QgCitjb250cm9sbGVyIGRyaXZlci4gCisKK0hFTFA6CisKK1RoZSBsYXRlc3QgaW5mbyBvbiB0aGlzIGRyaXZlciBjYW4gYmUgZm91bmQgYXQ6CitodHRwOi8vcGVyc29uYWwuY2x0LmJlbGxzb3V0aC5uZXQvfmtqc2lzc29uIG9yIGF0CitodHRwOi8vc3R2MDY4MC11c2Iuc291cmNlZm9yZ2UubmV0CisKK0FueSBxdWVzdGlvbnMgdG8gbWUgY2FuIGJlIHNlbmQgdG86ICBranNpc3NvbkBiZWxsc291dGgubmV0CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvdWhjaS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91aGNpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1OTUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdWhjaS50eHQKQEAgLTAsMCArMSwxNjUgQEAKK1NwZWNpZmljYXRpb24gYW5kIEludGVybmFscyBmb3IgdGhlIE5ldyBVSENJIERyaXZlciAoV2hpdGVwYXBlci4uLikKKworCWJyb3VnaHQgdG8geW91IGJ5CisKKwlHZW9yZyBBY2hlciwgYWNoZXJAaW4udHVtLmRlIChleGVjdXRpdmUgc2xhdmUpIChiYXNlIGd1aXRhcikKKwlEZXRpIEZsaWVnbCwgZGV0aUBmbGllZ2wuZGUgKGV4ZWN1dGl2ZSBzbGF2ZSkgKGxlYWQgdm9pY2UpCisJVGhvbWFzIFNhaWxlciwgc2FpbGVyQGlmZS5lZS5ldGh6LmNoIChjaGllZiBjb25zdWx0YW50KSAoY2hlZXIgbGVhZGVyKQorIAorCSRJZDogUkVBRE1FLnVoY2ksdiAxLjEgMTk5OS8xMi8xNCAxNDowMzowMiBmbGllZ2wgRXhwICQKKworVGhpcyBkb2N1bWVudCBhbmQgdGhlIG5ldyB1aGNpIHNvdXJjZXMgY2FuIGJlIGZvdW5kIG9uCisJCWh0dHA6Ly9ob3Rzd2FwLmluLnR1bS5kZS91c2IKKworMS4gR2VuZXJhbCBpc3N1ZXMKKworMS4xIFdoeSBhIG5ldyBVSENJIGRyaXZlciwgd2UgYWxyZWFkeSBoYXZlIG9uZT8hPworCitDb3JyZWN0LCBidXQgaXRzIGludGVybmFsIHN0cnVjdHVyZSBnb3QgbW9yZSBhbmQgbW9yZSBtaXhlZCB1cCBieSB0aGUgKHN0aWxsCitvbmdvaW5nKSBlZmZvcnRzIHRvIGdldCBpc29jaHJvbm91cyB0cmFuc2ZlcnMgKElTTykgdG8gd29yay4KK1NpbmNlIHRoZXJlIGlzIGFuIGluY3JlYXNpbmcgbmVlZCBmb3IgcmVsaWFibGUgSVNPLXRyYW5zZmVycyAoZXNwZWNpYWxseSAKK2ZvciBVU0ItYXVkaW8gbmVlZGVkIGJ5IFRTIGFuZCBmb3IgYSBEQUItVVNCLVJlY2VpdmVyIGJ1aWxkIGJ5IEdBIGFuZCBERiksIAordGhpcyBzdGF0ZSB3YXMgYSBiaXQgdW5zYXRpc2Z5aW5nIGluIG91ciBvcGluaW9uLCBzbyB3ZSd2ZSBkZWNpZGVkIChiYXNlZAorb24ga25vd2xlZGdlIGFuZCBleHBlcmllbmNlcyB3aXRoIHRoZSBvbGQgVUhDSSBkcml2ZXIpIHRvIHN0YXJ0IAorZnJvbSBzY3JhdGNoIHdpdGggYSBuZXcgYXBwcm9hY2gsIG11Y2ggc2ltcGxlciBidXQgYXQgdGhlIHNhbWUgdGltZSBtb3JlIAorcG93ZXJmdWwuCitJdCBpcyBpbnNwaXJlZCBieSB0aGUgd2F5IFdpbjk4L1dpbjIwMDAgaGFuZGxlcyBVU0IgcmVxdWVzdHMgdmlhIFVSQnMsCitidXQgaXQncyBkZWZpbml0ZWx5IDEwMCUgZnJlZSBvZiBNUy1jb2RlIGFuZCBkb2Vzbid0IGNyYXNoIHdoaWxlIAordW5wbHVnZ2luZyBhbiB1c2VkIElTTy1kZXZpY2UgbGlrZSBXaW45OCA7LSkKK1NvbWUgY29kZSBmb3IgSFcgc2V0dXAgYW5kIHJvb3QgaHViIG1hbmFnZW1lbnQgd2FzIHRha2VuIGZyb20gdGhlIAorb3JpZ2luYWwgVUhDSSBkcml2ZXIsIGJ1dCBoZWF2aWx5IG1vZGlmaWVkIHRvIGZpdCBpbnRvIHRoZSBuZXcgY29kZS4KK1RoZSBpbnZlbnRpb24gb2YgdGhlIGJhc2ljIGNvbmNlcHQsIGFuZCBtYWpvciBjb2Rpbmcgd2VyZSBjb21wbGV0ZWQgaW4gdHdvIAorZGF5cyAoYW5kIG5pZ2h0cykgb24gdGhlIDE2dGggYW5kIDE3dGggb2YgT2N0b2JlciAxOTk5LCBub3cga25vd24gYXMgdGhlCitncmVhdCBVU0ItT2N0b2Jlci1SZXZvbHV0aW9uIHN0YXJ0ZWQgYnkgR0EsIERGLCBhbmQgVFMgOy0pCisKK1NpbmNlIHRoZSBjb25jZXB0IGlzIGluIG5vIHdheSBVSENJIGRlcGVuZGVudCwgd2UgaG9wZSB0aGF0IGl0IHdpbGwgYWxzbyBiZSAKK3RyYW5zZmVycmVkIHRvIHRoZSBPSENJLWRyaXZlciwgc28gYm90aCBkcml2ZXJzIHNoYXJlIGEgY29tbW9uIEFQSS4KKworMS4yLiBBZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzCisKKysgQWxsIFVTQiB0cmFuc2ZlciB0eXBlcyB3b3JrIG5vdyEKKysgQXN5bmNocm9ub3VzIG9wZXJhdGlvbgorKyBTaW1wbGUsIGJ1dCBwb3dlcmZ1bCBpbnRlcmZhY2UgKG9ubHkgdHdvIGNhbGxzIGZvciBzdGFydCBhbmQgY2FuY2VsKQorKyBFYXN5IG1pZ3JhdGlvbiB0byB0aGUgbmV3IEFQSSwgc2ltcGxpZmllZCBieSBhIGNvbXBhdGliaWxpdHkgQVBJCisrIFNpbXBsZSB1c2FnZSBvZiBJU08gdHJhbnNmZXJzCisrIEF1dG9tYXRpYyBsaW5raW5nIG9mIHJlcXVlc3RzCisrIElTTyB0cmFuc2ZlcnMgYWxsb3cgdmFyaWFibGUgbGVuZ3RoIGZvciBlYWNoIGZyYW1lIGFuZCBzdHJpcGluZworKyBObyBDUFUgZGVwZW5kZW50IGFuZCBub24tcG9ydGFibGUgYXRvbWljIG1lbW9yeSBhY2Nlc3MsIG5vIGFzbSgpLWlubGluZXMKKysgVGVzdGVkIG9uIHg4NiBhbmQgQWxwaGEKKworLSBSZXdyaXRpbmcgZm9yIElTTyB0cmFuc2ZlcnMgbmVlZGVkCisKKzEuMy4gSXMgdGhlcmUgc29tZSBjb21wYXRpYmlsaXR5IHRvIHRoZSBvbGQgQVBJPworCitZZXMsIGJ1dCBvbmx5IGZvciBjb250cm9sLCBidWxrIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLiBXZSd2ZSBpbXBsZW1lbnRlZCAKK3NvbWUgd3JhcHBlciBjYWxscyBmb3IgdGhlc2UgdHJhbnNmZXIgdHlwZXMuIFRoZSB1c2Jjb3JlIHdvcmtzIGZpbmUgd2l0aCAKK3RoZXNlIHdyYXBwZXJzLiBGb3IgSVNPIHRoZXJlJ3Mgbm8gY29tcGF0aWJpbGl0eSwgYmVjYXVzZSB0aGUgb2xkIElTTy1BUEkgCithbmQgaXRzIHNlbWFudGljcyB3ZXJlIHVubmVjZXNzYXJ5IGNvbXBsaWNhdGVkIGluIG91ciBvcGluaW9uLgorCisxLjQuIFdoYXQncyByZWFsbHkgd29ya2luZz8KKworQXMgc2FpZCBhYm92ZSwgQ1RSTCBhbmQgQlVMSyBhbHJlYWR5IHdvcmsgZmluZSBldmVuIHdpdGggdGhlIHdyYXBwZXJzLAorc28gbGVnYWN5IGNvZGUgd291bGRuJ3Qgbm90aWNlIHRoZSBjaGFuZ2UuCitSZWdhcmRpbmcgdG8gVGhvbWFzLCBJU08gdHJhbnNmZXJzIG5vdyBydW4gc3RhYmxlIHdpdGggVVNCIGF1ZGlvLgorSU5UIHRyYW5zZmVycyAoZS5nLiBtb3VzZSBkcml2ZXIpIHdvcmsgZmluZSwgdG9vLgorCisxLjUuIEFyZSB0aGVyZSBhbnkgYnVncz8KKworTm8gOy0pCitIbS4uLgorV2VsbCwgb2YgY291cnNlIHRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgZXh0ZW5zaXZlIHRlc3Rpbmcgb24gYWxsIGF2YWlsYWJsZQoraGFyZHdhcmUsIGJ1dCB3ZSBiZWxpZXZlIHRoYXQgYW55IGZpeGVzIHNob3VsZG4ndCBoYXJtIHRoZSBvdmVyYWxsIGNvbmNlcHQuCisKKzEuNi4gV2hhdCBzaG91bGQgYmUgZG9uZSBuZXh0PworCitBIGxhcmdlIHBhcnQgb2YgdGhlIHJlcXVlc3QgaGFuZGxpbmcgc2VlbXMgdG8gYmUgaWRlbnRpY2FsIGZvciBVSENJIGFuZCAKK09IQ0ksIHNvIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGV4dHJhY3QgdGhlIGNvbW1vbiBwYXJ0cyBhbmQgaGF2ZSBvbmx5IAordGhlIEhXIHNwZWNpZmljIHN0dWZmIGluIHVoY2kuYy4gRnVydGhlcm1vcmUsIGFsbCBvdGhlciBVU0IgZGV2aWNlIGRyaXZlcnMKK3Nob3VsZCBuZWVkIFVSQmlmaWNhdGlvbiwgaWYgdGhleSB1c2UgaXNvY2hyb25vdXMgb3IgaW50ZXJydXB0IHRyYW5zZmVycy4KK09uZSB0aGluZyBtaXNzaW5nIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIChhbmQgdGhlIG9sZCBVSENJIGRyaXZlcikgCitpcyBmYWlyIHF1ZXVlaW5nIGZvciBCVUxLIHRyYW5zZmVycy4gU2luY2UgdGhpcyB3b3VsZCBuZWVkIChpbiBwcmluY2lwbGUpIAordGhlIGFsdGVyYXRpb24gb2YgYWxyZWFkeSBjb25zdHJ1Y3RlZCBURCBjaGFpbnMgKHRvIHN3aXRjaCBmcm9tIGRlcHRoIHRvIAorYnJlYWR0aCBleGVjdXRpb24pLCBhbm90aGVyIHdheSBoYXMgdG8gYmUgZm91bmQuIE1heWJlIHNvbWUgc2ltcGxlIAoraGV1cmlzdGljcyB3b3JrIHdpdGggdGhlIHNhbWUgZWZmZWN0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMi4gSW50ZXJuYWwgc3RydWN0dXJlIGFuZCBtZWNoYW5pc21zCisKK1RvIGdldCBxdWlja2x5IGZhbWlsaWFyIHdpdGggdGhlIGludGVybmFsIHN0cnVjdHVyZXMsIGhlcmUncyBhIHNob3J0CitkZXNjcmlwdGlvbiBob3cgdGhlIG5ldyBVSENJIGRyaXZlciB3b3Jrcy4gSG93ZXZlciwgdGhlIHVsdGltYXRlIHNvdXJjZSBvZgordHJ1dGggaXMgb25seSB1aGNpLmMhCisKKzIuMS4gRGVzY3JpcHRvciBzdHJ1Y3R1cmUgKFFIcyBhbmQgVERzKQorCitEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZSBmb2xsb3dpbmcgc2tlbGV0b24gaXMgYWxsb2NhdGVkIGluIGluaXRfc2tlbDoKKworCSBmcmFtZXNwZWNpZmljICAgICAgICAgICB8ICAgICAgICAgICBjb21tb24gY2hhaW4gICAgIAorCitmcmFtZWxpc3RbXQorWyAgMCBdLS0tLS0+IFREIC0tPiBURCAtLS0tLS0tXAorWyAgMSBdLS0tLS0+IFREIC0tPiBURCAtLS0tLS0tLT4gVEQgLS0tLT4gUUggLS0tLS0tLT4gUUggLS0tLS0tLT4gUUggLS0tPiBOVUxMCisgIC4uLiAgICAgICAgVEQgLS0+IFREIC0tLS0tLS0vCitbMTAyM10tLS0tLT4gVEQgLS0+IFREIC0tLS0tLS8KKwkgICAgIAorCSAgICAgXl4gICAgIF5eICAgICAgICAgICBeXiAgICAgICBeXiAgICAgICAgICBeXiAgICAgICAgICBeXgorICAgMTAyNCBURHMgZm9yICAgNyBURHMgZm9yICAgIDEgVEQgZm9yICAgU3RhcnQgb2YgICAgU3RhcnQgb2YgICAgRW5kIENoYWluCisJICAgIElTTyAgSU5UICgyLTEyOG1zKSAxbXMtSU5UICAgIENUUkwgQ2hhaW4gIEJVTEsgQ2hhaW4KKworRm9yIGVhY2ggQ1RSTCBvciBCVUxLIHRyYW5zZmVyIGEgbmV3IFFIIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGNvbnRhaW5pbmcgZGF0YQordHJhbnNmZXJzIGFyZSBhcHBlbmRlZCBhcyAodmVydGljYWwpIFREcy4gQWZ0ZXIgYnVpbGRpbmcgdGhlIHdob2xlIFFIIHdpdGggaXRzCitkYW5nbGluZyBURHMsIHRoZSBRSCBpcyBpbnNlcnRlZCBiZWZvcmUgdGhlIEJVTEsgQ2hhaW4gUUggKGZvciBDVFJMKSBvcgorYmVmb3JlIHRoZSBFbmQgQ2hhaW4gUUggKGZvciBCVUxLKS4gU2luY2Ugb25seSB0aGUgUUgtPm5leHQgcG9pbnRlcnMgYXJlCithZmZlY3RlZCwgbm8gYXRvbWljIG1lbW9yeSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuIFRoZSB0aHJlZSBRSHMgaW4gdGhlCitjb21tb24gY2hhaW4gYXJlIG5ldmVyIGVxdWlwcGVkIHdpdGggVERzIQorCitGb3IgSVNPIG9yIElOVCwgdGhlIFREIGZvciBlYWNoIGZyYW1lIGlzIHNpbXBseSBpbnNlcnRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZQorSVNPL0lOVC1URC1jaGFpbiBmb3IgdGhlIGRlc2lyZWQgZnJhbWUuIFRoZSA3IHNrZWxldG9uIElOVC1URHMgYXJlIHNjYXR0ZXJlZAorYW1vbmcgdGhlIDEwMjQgZnJhbWVzIHNpbWlsYXIgdG8gdGhlIG9sZCBVSENJIGRyaXZlci4KKworRm9yIENUUkwvQlVMSy9JU08sIHRoZSBsYXN0IFREIGluIHRoZSB0cmFuc2ZlciBoYXMgdGhlIElPQy1iaXQgc2V0LiBGb3IgSU5ULAorZXZlcnkgVEQgKHRoZXJlIGlzIG9ubHkgb25lLi4uKSBoYXMgdGhlIElPQy1iaXQgc2V0LgorCitCZXNpZGVzIHRoZSBkYXRhIGZvciB0aGUgVUhDSSBjb250cm9sbGVyICgyIG9yIDQgMzJiaXQgd29yZHMpLCB0aGUgZGVzY3JpcHRvcnMKK2FyZSBkb3VibGUtbGlua2VkIHRocm91Z2ggdGhlIC52ZXJ0aWNhbCBhbmQgLmhvcml6b250YWwgZWxlbWVudHMgaW4gdGhlIAorU1cgZGF0YSBvZiB0aGUgZGVzY3JpcHRvciAodXNpbmcgdGhlIGRvdWJsZS1saW5rZWQgbGlzdCBzdHJ1Y3R1cmVzIGFuZCAKK29wZXJhdGlvbnMpLCBidXQgU1ctbGlua2luZyBvY2N1cnMgb25seSBpbiBjbG9zZWQgZG9tYWlucywgaS5lLiBmb3IgZWFjaCBvZgordGhlIDEwMjQgSVNPLWNoYWlucyBhbmQgdGhlIDggSU5ULWNoYWlucyB0aGVyZSBpcyBhIGNsb3NlZCBjeWNsZS4gVGhpcyAKK3NpbXBsaWZpZXMgYWxsIGluc2VydGlvbnMgYW5kIHVubGlua2luZyBvcGVyYXRpb25zIGFuZCBhdm9pZHMgY29zdGx5IAorYnVzX3RvX3ZpcnQoKS1jYWxscy4KKworMi4yLiBVUkIgc3RydWN0dXJlIGFuZCBsaW5raW5nIHRvIFFIL1REcworCitEdXJpbmcgYXNzZW1ibHkgb2YgdGhlIFFIIGFuZCBURHMgb2YgdGhlIHJlcXVlc3RlZCBhY3Rpb24sIHRoZXNlIGRlc2NyaXB0b3JzCithcmUgc3RvcmVkIGluIHVyYi0+dXJiX2xpc3QsIHNvIHRoZSBhbGxvY2F0ZWQgUUgvVEQgZGVzY3JpcHRvcnMgYXJlIGJvdW5kIHRvCit0aGlzIFVSQi4KK0lmIHRoZSBhc3NlbWJseSB3YXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIGRlc2NyaXB0b3JzIHdlcmUgYWRkZWQgdG8gdGhlIEhXIGNoYWluLAordGhlIGNvcnJlc3BvbmRpbmcgVVJCIGlzIGluc2VydGVkIGludG8gYSBnbG9iYWwgVVJCIGxpc3QgZm9yIHRoaXMgY29udHJvbGxlci4KK1RoaXMgbGlzdCBzdG9yZXMgYWxsIHBlbmRpbmcgVVJCcy4KKworMi4zLiBJbnRlcnJ1cHQgcHJvY2Vzc2luZworCitTaW5jZSBVSENJIHByb3ZpZGVzIG5vIG1lYW5zIHRvIGRpcmVjdGx5IGRldGVjdCBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zLCB0aGUKK2ZvbGxvd2luZyBpcyBkb25lIGluIGVhY2ggVUhDSSBpbnRlcnJ1cHQgKHVoY2lfaW50ZXJydXB0KCkpOgorCitGb3IgZWFjaCBVUkIgaW4gdGhlIHBlbmRpbmcgcXVldWUgKHByb2Nlc3NfdXJiKCkpLCB0aGUgQUNUSVZFLWZsYWcgb2YgdGhlIAorYXNzb2NpYXRlZCBURHMgYXJlIHByb2Nlc3NlZCAoZGVwZW5kaW5nIG9uIHRoZSB0cmFuc2ZlciB0eXBlIAorcHJvY2Vzc197dHJhbnNmZXJ8aW50ZXJydXB0fGlzb30oKSkuIElmIHRoZSBURHMgYXJlIG5vdCBhY3RpdmUgYW55bW9yZSwgCit0aGV5IGluZGljYXRlIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB0cmFuc2FjdGlvbiBhbmQgdGhlIHN0YXR1cyBpcyBjYWxjdWxhdGVkLiAKK0luYWN0aXZlIFFIL1REcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBIVyBjaGFpbiAoc2luY2UgdGhlIGhvc3QgY29udHJvbGxlcgorYWxyZWFkeSByZW1vdmVkIHRoZSBURHMgZnJvbSB0aGUgUUgsIG5vIGF0b21pYyBhY2Nlc3MgaXMgbmVlZGVkKSBhbmQgCitldmVudHVhbGx5IHRoZSBVUkIgaXMgbWFya2VkIGFzIGNvbXBsZXRlZCAoT0sgb3IgZXJyb3JzKSBhbmQgcmVtb3ZlZCBmcm9tIHRoZSAKK3BlbmRpbmcgcXVldWUuIFRoZW4gdGhlIG5leHQgbGlua2VkIFVSQiBpcyBzdWJtaXR0ZWQuIEFmdGVyIChvciBpbW1lZGlhdGVseSAKK2JlZm9yZSkgdGhhdCwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpcyBjYWxsZWQuCisKKzIuNC4gVW5saW5raW5nIFVSQnMKKworRmlyc3QsIGFsbCBRSC9URHMgc3RvcmVkIGluIHRoZSBVUkIgYXJlIHVubGlua2VkIGZyb20gdGhlIEhXIGNoYWluLiAKK1RvIGVuc3VyZSB0aGF0IHRoZSBob3N0IGNvbnRyb2xsZXIgcmVhbGx5IGxlZnQgYSB2ZXJ0aWNhbCBURCBjaGFpbiwgd2UgCit3YWl0IGZvciBvbmUgZnJhbWUuIEFmdGVyIHRoYXQsIHRoZSBURHMgYXJlIHBoeXNpY2FsbHkgZGVzdHJveWVkLgorCisyLjUuIFVSQiBsaW5raW5nIGFuZCB0aGUgY29uc2VxdWVuY2VzCisKK1NpbmNlIFVSQnMgY2FuIGJlIGxpbmtlZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3VibWl0X3VyYiBpcyBjYWxsZWQgaW4KK3RoZSBVSENJLWludGVycnVwdCwgYWxsIHdvcmsgYXNzb2NpYXRlZCB3aXRoIFVSQi9RSC9URCBhc3NlbWJseSBoYXMgdG8gYmUKK2ludGVycnVwdCBzYXZlLiBUaGlzIGZvcmNlcyBrbWFsbG9jIHRvIHVzZSBHRlBfQVRPTUlDIGluIHRoZSBpbnRlcnJ1cHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2ItaGVscC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2ItaGVscC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjMzI0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dApAQCAtMCwwICsxLDE5IEBACit1c2ItaGVscC50eHQKKzIwMDAtSnVseS0xMgorCitGb3IgVVNCIGhlbHAgb3RoZXIgdGhhbiB0aGUgcmVhZG1lIGZpbGVzIHRoYXQgYXJlIGxvY2F0ZWQgaW4KK0RvY3VtZW50YXRpb24vdXNiLyosIHNlZSB0aGUgZm9sbG93aW5nOgorCitMaW51eC1VU0IgcHJvamVjdDogIGh0dHA6Ly93d3cubGludXgtdXNiLm9yZworICBtaXJyb3JzIGF0ICAgICAgICBodHRwOi8vd3d3LnN1c2UuY3ovZGV2ZWxvcG1lbnQvbGludXgtdXNiLworICAgICAgICAgYW5kICAgICAgICBodHRwOi8vdXNiLmluLnR1bS5kZS9saW51eC11c2IvCisgICAgICAgICBhbmQgICAgICAgIGh0dHA6Ly9pdC5saW51eC11c2Iub3JnCitMaW51eCBVU0IgR3VpZGU6ICAgIGh0dHA6Ly9saW51eC11c2Iuc291cmNlZm9yZ2UubmV0CitMaW51eC1VU0IgZGV2aWNlIG92ZXJ2aWV3ICh3b3JraW5nIGRldmljZXMgYW5kIGRyaXZlcnMpOgorICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnFiaWsuY2gvdXNiL2RldmljZXMvCisgICAgCitUaGUgTGludXgtVVNCIG1haWxpbmcgbGlzdHMgYXJlOgorICBsaW51eC11c2ItdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgZm9yIGdlbmVyYWwgdXNlciBoZWxwCisgIGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgICBmb3IgZGV2ZWxvcGVyIGRpc2N1c3Npb25zCisKKyMjIwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDAxY2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQKQEAgLTAsMCArMSw0NzAgQEAKK0lOVFJPRFVDVElPTgorCisgIFRoZSBVU0Igc2VyaWFsIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgYSBudW1iZXIgb2YgZGlmZmVyZW50IFVTQiB0bworICBzZXJpYWwgY29udmVydGVyIHByb2R1Y3RzLCBhcyB3ZWxsIGFzIHNvbWUgZGV2aWNlcyB0aGF0IHVzZSBhIHNlcmlhbAorICBpbnRlcmZhY2UgZnJvbSB1c2Vyc3BhY2UgdG8gdGFsayB0byB0aGUgZGV2aWNlLgorCisgIFNlZSB0aGUgaW5kaXZpZHVhbCBwcm9kdWN0IHNlY3Rpb24gYmVsb3cgZm9yIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0CisgIHRoZSBkaWZmZXJlbnQgZGV2aWNlcy4KKworCitDT05GSUdVUkFUSU9OCisKKyAgQ3VycmVudGx5IHRoZSBkcml2ZXIgY2FuIGhhbmRsZSB1cCB0byAyNTYgZGlmZmVyZW50IHNlcmlhbCBpbnRlcmZhY2VzIGF0CisgIG9uZSB0aW1lLiAKKworICBJZiB5b3UgYXJlIG5vdCB1c2luZyBkZXZmczoKKyAgICBUaGUgbWFqb3IgbnVtYmVyIHRoYXQgdGhlIGRyaXZlciB1c2VzIGlzIDE4OCBzbyB0byB1c2UgdGhlIGRyaXZlciwKKyAgICBjcmVhdGUgdGhlIGZvbGxvd2luZyBub2RlczoKKwlta25vZCAvZGV2L3R0eVVTQjAgYyAxODggMAorCW1rbm9kIC9kZXYvdHR5VVNCMSBjIDE4OCAxCisJbWtub2QgL2Rldi90dHlVU0IyIGMgMTg4IDIKKwlta25vZCAvZGV2L3R0eVVTQjMgYyAxODggMworCQkuCisJCS4KKwkJLgorCW1rbm9kIC9kZXYvdHR5VVNCMjU0IGMgMTg4IDI1NAorCW1rbm9kIC9kZXYvdHR5VVNCMjU1IGMgMTg4IDI1NQorCisgIElmIHlvdSBhcmUgdXNpbmcgZGV2ZnM6CisgICAgVGhlIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIHdpbGwgc2hvdyB1cCBhcworICAgIC9kZXYvdXNiL3R0cy97MCwxLC4uLn0KKworICBXaGVuIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIGFuZCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHRoZSBkcml2ZXIKKyAgd2lsbCBwcmludCB0byB0aGUgc3lzdGVtIGxvZywgd2hpY2ggbm9kZShzKSB0aGUgZGV2aWNlIGhhcyBiZWVuIGJvdW5kCisgIHRvLgorICAKKworU1BFQ0lGSUMgREVWSUNFUyBTVVBQT1JURUQKKworCitDb25uZWN0VGVjaCBXaGl0ZUhFQVQgNCBwb3J0IGNvbnZlcnRlcgorCisgIENvbm5lY3RUZWNoIGhhcyBiZWVuIHZlcnkgZm9ydGhjb21pbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGVpcgorICBkZXZpY2UsIGluY2x1ZGluZyBwcm92aWRpbmcgYSB1bml0IHRvIHRlc3Qgd2l0aC4KKworICBUaGUgZHJpdmVyIGlzIG9mZmljaWFsbHkgc3VwcG9ydGVkIGJ5IENvbm5lY3QgVGVjaCBJbmMuCisgIGh0dHA6Ly93d3cuY29ubmVjdHRlY2guY29tCisKKyAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QKKyAgU3R1YXJ0IE1hY0RvbmFsZCBhdCBzdHVhcnRtQGNvbm5lY3R0ZWNoLmNvbQorCisKK0hhbmRTcHJpbmcgVmlzb3IsIFBhbG0gVVNCLCBhbmQgQ2xp6SBVU0IgZHJpdmVyCisKKyAgVGhpcyBkcml2ZXIgd29ya3Mgd2l0aCBhbGwgSGFuZFNwcmluZyBVU0IsIFBhbG0gVVNCLCBhbmQgU29ueSBDbGnpIFVTQgorICBkZXZpY2VzLgorCisgIE9ubHkgd2hlbiB0aGUgZGV2aWNlIHRyaWVzIHRvIGNvbm5lY3QgdG8gdGhlIGhvc3QsIHdpbGwgdGhlIGRldmljZSBzaG93CisgIHVwIHRvIHRoZSBob3N0IGFzIGEgdmFsaWQgVVNCIGRldmljZS4gV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBkZXZpY2UgaXMKKyAgcHJvcGVybHkgZW51bWVyYXRlZCwgYXNzaWduZWQgYSBwb3J0LCBhbmQgdGhlbiBjb21tdW5pY2F0aW9uIF9zaG91bGRfIGJlCisgIHBvc3NpYmxlLiBUaGUgZHJpdmVyIGNsZWFucyB1cCBwcm9wZXJseSB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCwgb3IKKyAgdGhlIGNvbm5lY3Rpb24gaXMgY2FuY2VsZWQgb24gdGhlIGRldmljZS4KKworICBOT1RFOgorICAgIFRoaXMgbWVhbnMgdGhhdCBpbiBvcmRlciB0byB0YWxrIHRvIHRoZSBkZXZpY2UsIHRoZSBzeW5jIGJ1dHRvbiBtdXN0IGJlCisgICAgcHJlc3NlZCBCRUZPUkUgdHJ5aW5nIHRvIGdldCBhbnkgcHJvZ3JhbSB0byBjb21tdW5pY2F0ZSB0byB0aGUgZGV2aWNlLgorICAgIFRoaXMgZ29lcyBhZ2FpbnN0IHRoZSBjdXJyZW50IGRvY3VtZW50YXRpb24gZm9yIHBpbG90LXhmZXIgYW5kIG90aGVyCisgICAgcGFja2FnZXMsIGJ1dCBpcyB0aGUgb25seSB3YXkgdGhhdCBpdCB3aWxsIHdvcmsgZHVlIHRvIHRoZSBoYXJkd2FyZQorICAgIGluIHRoZSBkZXZpY2UuCisgIAorICBXaGVuIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkLCB0cnkgdGFsa2luZyB0byBpdCBvbiB0aGUgc2Vjb25kIHBvcnQKKyAgKHRoaXMgaXMgdXN1YWxseSAvZGV2L3R0eVVTQjEgaWYgeW91IGRvIG5vdCBoYXZlIGFueSBvdGhlciB1c2Itc2VyaWFsCisgIGRldmljZXMgaW4gdGhlIHN5c3RlbS4pIFRoZSBzeXN0ZW0gbG9nIHNob3VsZCB0ZWxsIHlvdSB3aGljaCBwb3J0IGlzCisgIHRoZSBwb3J0IHRvIHVzZSBmb3IgdGhlIEhvdFN5bmMgdHJhbnNmZXIuIFRoZSAiR2VuZXJpYyIgcG9ydCBjYW4gYmUgdXNlZAorICBmb3Igb3RoZXIgZGV2aWNlIGNvbW11bmljYXRpb24sIHN1Y2ggYXMgYSBQUFAgbGluay4KKworICBGb3Igc29tZSBTb255IENsaekgZGV2aWNlcywgL2Rldi90dHlVU0IwIG11c3QgYmUgdXNlZCB0byB0YWxrIHRvIHRoZQorICBkZXZpY2UuICBUaGlzIGlzIHRydWUgZm9yIGFsbCBPUyB2ZXJzaW9uIDMuNSBkZXZpY2VzLCBhbmQgbW9zdCBkZXZpY2VzCisgIHRoYXQgaGF2ZSBoYWQgYSBmbGFzaCB1cGdyYWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgT1MuICBTZWUgdGhlCisgIGtlcm5lbCBzeXN0ZW0gbG9nIGZvciBpbmZvcm1hdGlvbiBvbiB3aGljaCBpcyB0aGUgY29ycmVjdCBwb3J0IHRvIHVzZS4KKworICBJZiBhZnRlciBwcmVzc2luZyB0aGUgc3luYyBidXR0b24sIG5vdGhpbmcgc2hvd3MgdXAgaW4gdGhlIHN5c3RlbSBsb2csCisgIHRyeSByZXNldHRpbmcgdGhlIGRldmljZSwgZmlyc3QgYSBob3QgcmVzZXQsIGFuZCB0aGVuIGEgY29sZCByZXNldCBpZgorICBuZWNlc3NhcnkuICBTb21lIGRldmljZXMgbmVlZCB0aGlzIGJlZm9yZSB0aGV5IGNhbiB0YWxrIHRvIHRoZSBVU0IgcG9ydAorICBwcm9wZXJseS4KKyAgCisgIERldmljZXMgdGhhdCBhcmUgbm90IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBjYW4gYmUgc3BlY2lmaWVkIHdpdGggbW9kdWxlCisgIHBhcmFtZXRlcnMuICBlLmcuIG1vZHByb2JlIHZpc29yIHZlbmRvcj0weDU0YyBwcm9kdWN0PTB4NjYKKyAgCisgIFRoZXJlIGlzIGEgd2VicGFnZSBhbmQgbWFpbGluZyBsaXN0cyBmb3IgdGhpcyBwb3J0aW9uIG9mIHRoZSBkcml2ZXIgYXQ6CisgIGh0dHA6Ly91c2J2aXNvci5zb3VyY2Vmb3JnZS5uZXQvCisKKyAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZworICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCisKKworUG9ja2V0UEMgUERBIERyaXZlcgorCisgIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gQ29tcGFxIGlQQVEsIEhQIEpvcm5hZGEsIENhc2lvIEVNNTAwCisgIGFuZCBvdGhlciBQREFzIHJ1bm5pbmcgV2luZG93cyBDRSAzLjAgb3IgUG9ja2V0UEMgMjAwMiB1c2luZyBhIFVTQgorICBjYWJsZS9jcmFkbGUuCisgIE1vc3QgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgQWN0aXZlU3luYyBhcmUgc3VwcG9ydGVkIG91dCBvZiB0aGUgYm94LgorICBGb3Igb3RoZXJzLCBwbGVhc2UgdXNlIG1vZHVsZSBwYXJhbWV0ZXJzIHRvIHNwZWNpZnkgdGhlIHByb2R1Y3QgYW5kIHZlbmRvcgorICBpZC4gZS5nLiBtb2Rwcm9iZSBpcGFxIHZlbmRvcj0weDNmMCBwcm9kdWN0PTB4MTEyNQorCisgIFRoZSBkcml2ZXIgcHJlc2VudHMgYSBzZXJpYWwgaW50ZXJmYWNlICh1c3VhbGx5IG9uIC9kZXYvdHR5VVNCMCkgb3ZlcgorICB3aGljaCBvbmUgbWF5IHJ1biBwcHAgYW5kIGVzdGFibGlzaCBhIFRDUC9JUCBsaW5rIHRvIHRoZSBQREEuIE9uY2UgdGhpcworICBpcyBkb25lLCB5b3UgY2FuIHRyYW5zZmVyIGZpbGVzLCBiYWNrdXAsIGRvd25sb2FkIGVtYWlsIGV0Yy4gVGhlIG1vc3QKKyAgc2lnbmlmaWNhbnQgYWR2YW50YWdlIG9mIHVzaW5nIFVTQiBpcyBzcGVlZCAtIEkgY2FuIGdldCA3MyB0byAxMTMKKyAga2J5dGVzL3NlYyBmb3IgZG93bmxvYWQvdXBsb2FkIHRvIG15IGlQQVEuCisKKyAgVGhpcyBkcml2ZXIgaXMgb25seSBvbmUgb2YgYSBzZXQgb2YgY29tcG9uZW50cyByZXF1aXJlZCB0byB1dGlsaXplCisgIHRoZSBVU0IgY29ubmVjdGlvbi4gUGxlYXNlIHZpc2l0IGh0dHA6Ly9zeW5jZS5zb3VyY2Vmb3JnZS5uZXQgd2hpY2gKKyAgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwYWNrYWdlcyBhbmQgYSBzaW1wbGUgc3RlcC1ieS1zdGVwIGhvd3RvLgorCisgIE9uY2UgY29ubmVjdGVkLCB5b3UgY2FuIHVzZSBXaW4gQ0UgcHJvZ3JhbXMgbGlrZSBmdHBWaWV3LCBQb2NrZXQgT3V0bG9vaworICBmcm9tIHRoZSBQREEgYW5kIHhjZXJkaXNwLCBzeW5jZSB1dGlsaXRpZXMgZnJvbSB0aGUgTGludXggc2lkZS4KKworICBUbyB1c2UgUG9ja2V0IElFLCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBnaXZlbiBhdAorICBodHRwOi8vd3d3LnRla2d1cnUuY28udWsvRU01MDAvdXNidG9uZXQuaHRtIHRvIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcKKyAgb24gV2luOTguIE9taXQgdGhlIHByb3h5IHNlcnZlciBwYXJ0OyBMaW51eCBpcyBxdWl0ZSBjYXBhYmxlIG9mIGZvcndhcmRpbmcKKyAgcGFja2V0cyB1bmxpa2UgV2luOTguIEFub3RoZXIgbW9kaWZpY2F0aW9uIGlzIHJlcXVpcmVkIGF0IGxlYXN0IGZvciB0aGUKKyAgaVBBUSAtIGRpc2FibGUgYXV0b3N5bmMgYnkgZ29pbmcgdG8gdGhlIFN0YXJ0L1NldHRpbmdzL0Nvbm5lY3Rpb25zIG1lbnUKKyAgYW5kIHVuY2hlY2tpbmcgdGhlICJBdXRvbWF0aWNhbGx5IHN5bmNocm9uaXplIC4uLiIgYm94LiBHbyB0bworICBTdGFydC9Qcm9ncmFtcy9Db25uZWN0aW9ucywgY29ubmVjdCB0aGUgY2FibGUgYW5kIHNlbGVjdCAidXNiZGlhbCIgKG9yCisgIHdoYXRldmVyIHlvdSBuYW1lZCB5b3VyIG5ldyBVU0IgY29ubmVjdGlvbikuIFlvdSBzaG91bGQgZmluYWxseSB3aW5kCisgIHVwIHdpdGggYSAiQ29ubmVjdGVkIHRvIHVzYmRpYWwiIHdpbmRvdyB3aXRoIHN0YXR1cyBzaG93biBhcyBjb25uZWN0ZWQuCisgIE5vdyBzdGFydCB1cCBQSUUgYW5kIGJyb3dzZSBhd2F5LgorCisgIElmIGl0IGRvZXNuJ3Qgd29yayBmb3Igc29tZSByZWFzb24sIGxvYWQgYm90aCB0aGUgdXNic2VyaWFsIGFuZCBpcGFxIG1vZHVsZQorICB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVyICJkZWJ1ZyIgc2V0IHRvIDEgYW5kIGV4YW1pbmUgdGhlIHN5c3RlbSBsb2cuCisgIFlvdSBjYW4gYWxzbyB0cnkgc29mdC1yZXNldHRpbmcgeW91ciBQREEgYmVmb3JlIGF0dGVtcHRpbmcgYSBjb25uZWN0aW9uLgorCisgIE90aGVyIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIHBvc3NpYmxlIGRlcGVuZGluZyBvbiB5b3VyIFBEQS4gQWNjb3JkaW5nIHRvCisgIFdlcyBDaWxsZGhhaXJlIDxiaWxseWJvYmpvZWhlbnJ5Ym9iQGhvdG1haWwuY29tPiwgd2l0aCB0aGUgVG9zaGliYSBFNTcwLAorICAuLi5pZiB5b3UgYm9vdCBpbnRvIHRoZSBib290bG9hZGVyIChob2xkIGRvd24gdGhlIHBvd2VyIHdoZW4gaGl0dGluZyB0aGUKKyAgcmVzZXQgYnV0dG9uLCBjb250aW51aW5nIHRvIGhvbGQgb250byB0aGUgcG93ZXIgdW50aWwgdGhlIGJvb3Rsb2FkZXIgc2NyZWVuCisgIGlzIGRpc3BsYXllZCksIHRoZW4gcHV0IGl0IGluIHRoZSBjcmFkbGUgd2l0aCB0aGUgaXBhcSBkcml2ZXIgbG9hZGVkLCBvcGVuCisgIGEgdGVybWluYWwgb24gL2Rldi90dHlVU0IwLCBpdCBnaXZlcyB5b3UgYSAiVVNCIFJlZmxhc2giIHRlcm1pbmFsLCB3aGljaCBjYW4KKyAgYmUgdXNlZCB0byBmbGFzaCB0aGUgUk9NLCBhcyB3ZWxsIGFzIHRoZSBtaWNyb1AgY29kZS4uICBzbyBtdWNoIGZvciBuZWVkaW5nCisgIFRvc2hpYmEncyAkMzUwIHNlcmlhbCBjYWJsZSBmb3IgZmxhc2hpbmchISA6RAorICBOT1RFOiBUaGlzIGhhcyBOT1QgYmVlbiB0ZXN0ZWQuIFVzZSBhdCB5b3VyIG93biByaXNrLgorIAorICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoZSBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdhbmVzaAorICBWYXJhZGFyYWphbiA8Z2FuZXNoQHZlcml0YXMuY29tPgorCisKK0tleXNwYW4gUERBIFNlcmlhbCBBZGFwdGVyCisKKyAgU2luZ2xlIHBvcnQgREItOSBzZXJpYWwgYWRhcHRlciwgcHVzaGVkIGFzIGEgUERBIGFkYXB0ZXIgZm9yIGlNYWNzIChtb3N0bHkKKyAgc29sZCBpbiBNYWNpbnRvc2ggY2F0YWxvZ3MsIGNvbWVzIGluIGEgdHJhbnNsdWNlbnQgd2hpdGUvZ3JlZW4gZG9uZ2xlKS4KKyAgRmFpcmx5IHNpbXBsZSBkZXZpY2UuIEZpcm13YXJlIGlzIGhvbWVicmV3LgorICBUaGlzIGRyaXZlciBhbHNvIHdvcmtzIGZvciB0aGUgWGlyY29tL0VudHJncmEgc2luZ2xlIHBvcnQgc2VyaWFsIGFkYXB0ZXIuCisKKyAgQ3VycmVudCBzdGF0dXM6CisgICBUaGluZ3MgdGhhdCB3b3JrOgorICAgICBiYXNpYyBpbnB1dC9vdXRwdXQgKHRlc3RlZCB3aXRoICdjdScpCisgICAgIGJsb2NraW5nIHdyaXRlIHdoZW4gc2VyaWFsIGxpbmUgY2FuJ3Qga2VlcCB1cAorICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzICh1cCB0byAxMTUyMDApCisgICAgIGdldHRpbmcvc2V0dGluZyBtb2RlbSBjb250cm9sIHBpbnMgKFRJT0NNe0dFVCxTRVQsQklTLEJJQ30pCisgICAgIHNlbmRpbmcgYnJlYWsgKGFsdGhvdWdoIGR1cmF0aW9uIGxvb2tzIHN1c3BlY3QpCisgICBUaGluZ3MgdGhhdCBkb24ndDoKKyAgICAgZGV2aWNlIHN0cmluZ3MgKGFzIGxvZ2dlZCBieSBrZXJuZWwpIGhhdmUgdHJhaWxpbmcgYmluYXJ5IGdhcmJhZ2UKKyAgICAgZGV2aWNlIElEIGlzbid0IHJpZ2h0LCBtaWdodCBjb2xsaWRlIHdpdGggb3RoZXIgS2V5c3BhbiBwcm9kdWN0cworICAgICBjaGFuZ2luZyBiYXVkIHJhdGVzIG91Z2h0IHRvIGZsdXNoIHR4L3J4IHRvIGF2b2lkIG1hbmdsZWQgaGFsZiBjaGFyYWN0ZXJzCisgICBCaWcgVGhpbmdzIG9uIHRoZSB0b2RvIGxpc3Q6CisgICAgIHBhcml0eSwgNyB2cyA4IGJpdHMgcGVyIGNoYXIsIDEgb3IgMiBzdG9wIGJpdHMKKyAgICAgSFcgZmxvdyBjb250cm9sCisgICAgIG5vdCBhbGwgb2YgdGhlIHN0YW5kYXJkIFVTQiBkZXNjcmlwdG9ycyBhcmUgaGFuZGxlZDogR2V0X1N0YXR1cywgU2V0X0ZlYXR1cmUKKyAgICAgT19OT05CTE9DSywgc2VsZWN0KCkKKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBCcmlhbgorICBXYXJuZXIgYXQgd2FybmVyQGxvdGhhci5jb20gCisKKworS2V5c3BhbiBVU0Etc2VyaWVzIFNlcmlhbCBBZGFwdGVycworCisgIFNpbmdsZSwgRHVhbCBhbmQgUXVhZCBwb3J0IGFkYXB0ZXJzIC0gZHJpdmVyIHVzZXMgS2V5c3BhbiBzdXBwbGllZCAKKyAgZmlybXdhcmUgYW5kIGlzIGJlaW5nIGRldmVsb3BlZCB3aXRoIHRoZWlyIHN1cHBvcnQuCisgIAorICBDdXJyZW50IHN0YXR1czoKKyAgICBUaGUgVVNBLTE4WCwgVVNBLTI4WCwgVVNBLTE5LCBVU0EtMTlXIGFuZCBVU0EtNDlXIGFyZSBzdXBwb3J0ZWQgYW5kCisgICAgaGF2ZSBiZWVuIHByZXR0eSB0aHJvdWdobHkgdGVzdGVkIGF0IHZhcmlvdXMgYmF1ZCByYXRlcyB3aXRoIDgtTi0xCisgICAgY2hhcmFjdGVyIHNldHRpbmdzLiAgT3RoZXIgY2hhcmFjdGVyIGxlbmd0aHMgYW5kIHBhcml0eSBzZXR1cHMgYXJlCisgICAgcHJlc2VudGx5IHVudGVzdGVkLgorCisgICAgVGhlIFVTQS0yOCBpc24ndCB5ZXQgc3VwcG9ydGVkIHRob3VnaCBkb2luZyBzbyBzaG91bGQgYmUgcHJldHR5CisgICAgc3RyYWlnaHRmb3J3YXJkLiAgQ29udGFjdCB0aGUgbWFpbnRhaW5lciBpZiB5b3UgcmVxdWlyZSB0aGlzCisgICAgZnVuY3Rpb25hbGl0eS4KKyAgCisgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0OgorICAgICAgICBodHRwOi8vbWlzYy5udS9odWdoL2tleXNwYW4uaHRtbAorICAgCisgIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEh1Z2gKKyAgQmxlbWluZ3MgYXQgaHVnaEBtaXNjLm51CisKKworRlRESSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyCisKKyAgVGhpcyBpcyBhIHNpbmdsZSBwb3J0IERCLTI1IHNlcmlhbCBhZGFwdGVyLiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKKyAgZGV2aWNlIGFuZCB0aGUgTGludXggZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKKwlodHRwOi8vcmVhbGl0eS5zZ2kuY29tL2JyeWRlcl93ZWxsaW5ndG9uL2Z0ZGlfc2lvLworCisgIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEJpbGwgUnlkZXIKKyAgYXQgYnJ5ZGVyQHNnaS5jb20KKworCitaeVhFTCBvbW5pLm5ldCBsY2QgcGx1cyBJU0ROIFRBCisKKyAgVGhpcyBpcyBhbiBJU0ROIFRBLiBQbGVhc2UgcmVwb3J0IGJvdGggc3VjY2Vzc2VzIGFuZCB0cm91YmxlcyB0bworICBhenVtbW9AdG93ZXJ0ZWNoLml0CisKKworQ3lwcmVzcyBNOCBDWTQ2MDEgRmFtaWx5IFNlcmlhbCBEcml2ZXIKKworICBUaGlzIGRyaXZlciB3YXMgaW4gbW9zdCBwYXJ0IGRldmVsb3BlZCBieSBOZWlsICJrb3lhbWEiIFdoZWxjaGVsLiAgSXQKKyAgaGFzIGJlZW4gaW1wcm92ZWQgc2luY2UgdGhhdCBwcmV2aW91cyBmb3JtIHRvIHN1cHBvcnQgZHluYW1pYyBzZXJpYWwKKyAgbGluZSBzZXR0aW5ncyBhbmQgaW1wcm92ZWQgbGluZSBoYW5kbGluZy4gIFRoZSBkcml2ZXIgaXMgZm9yIHRoZSBtb3N0CisgIHBhcnQgc3RhYmxlIGFuZCBoYXMgYmVlbiB0ZXN0ZWQgb24gYW4gc21wIG1hY2hpbmUuIChkdWFsIHAyKQorCisgICAgQ2hpcHNldHMgc3VwcG9ydGVkIHVuZGVyIENZNDYwMSBmYW1pbHk6CisJCisJCUNZN0M2MzcyMywgQ1k3QzYzNzQyLCBDWTdDNjM3NDMsIENZN0M2NDAxMworCisgICAgRGV2aWNlcyBzdXBwb3J0ZWQ6CisKKwkJLURlTG9ybWUncyBVU0IgRWFydGhtYXRlIChTaVJGIFN0YXIgSUkgbHAgYXJjaCkKKwkJLUN5cHJlc3MgSElELT5DT00gUlMyMzIgYWRhcHRlcgorCQorCQlOb3RlOiBDeXByZXNzIFNlbWljb25kdWN0b3IgY2xhaW1zIG5vIGFmZmlsaWF0aW9uIHdpdGggdGhlCisJCQl0aGUgaGlkLT5jb20gZGV2aWNlLgorCisJTW9zdCBkZXZpY2VzIHVzaW5nIGNoaXBzZXRzIHVuZGVyIHRoZSBDWTQ2MDEgZmFtaWx5IHNob3VsZAorICAgICB3b3JrIHdpdGggdGhlIGRyaXZlci4gIEFzIGxvbmcgYXMgdGhleSBzdGF5IHRydWUgdG8gdGhlIENZNDYwMQorICAgICB1c2JzZXJpYWwgc3BlY2lmaWNhdGlvbi4KKworICAgIFRlY2huaWNhbCBub3RlczoKKworICAgICAgICBUaGUgRWFydGhtYXRlIHN0YXJ0cyBvdXQgYXQgNDgwMCA4TjEgYnkgZGVmYXVsdC4uLiB0aGUgZHJpdmVyIHdpbGwKKwl1cG9uIHN0YXJ0IGluaXQgdG8gdGhpcyBzZXR0aW5nLiAgdXNic2VyaWFsIGNvcmUgcHJvdmlkZXMgdGhlIHJlc3QKKwlvZiB0aGUgdGVybWlvcyBzZXR0aW5ncywgYWxvbmcgd2l0aCBzb21lIGN1c3RvbSB0ZXJtaW9zIHNvIHRoYXQgdGhlCisJb3V0cHV0IGlzIGluIHByb3BlciBmb3JtYXQgYW5kIHBhcnNhYmxlLgorCQorCVRoZSBkZXZpY2UgY2FuIGJlIHB1dCBpbnRvIHNpcmYgbW9kZSBieSBpc3N1aW5nIE5NRUEgY29tbWFuZDoKKwkJJFBTUkYxMDAsPHByb3RvY29sPiw8YmF1ZD4sPGRhdGFiaXRzPiw8c3RvcGJpdHM+LDxwYXJpdHk+KkNIRUNLU1VNCisJCSRQU1JGMTAwLDAsOTYwMCw4LDEsMCowQworCisJCUl0IHNob3VsZCB0aGVuIGJlIHN1ZmZpY2llbnQgdG8gY2hhbmdlIHRoZSBwb3J0IHRlcm1pb3MgdG8gbWF0Y2ggdGhpcworCQl0byBiZWdpbiBjb21tdW5pY2F0aW5nLgorCisJQXMgZmFyIGFzIEkgY2FuIHRlbGwgaXQgc3VwcG9ydHMgcHJldHR5IG11Y2ggZXZlcnkgc2lyZiBjb21tYW5kIGFzCisJZG9jdW1lbnRlZCBvbmxpbmUgYXZhaWxhYmxlIHdpdGggZmlybXdhcmUgMi4zMSwgd2l0aCBzb21lIHVua25vd24KKwltZXNzYWdlIGlkcy4KKworCVRoZSBoaWQtPmNvbSBhZGFwdGVyIGNhbiBydW4gYXQgYSBtYXhpbXVtIGJhdWQgb2YgMTE1MjAwYnBzLiAgUGxlYXNlIG5vdGUKKwl0aGF0IHRoZSBkZXZpY2UgaGFzIHRyb3VibGUgb3IgaXMgaW5jYXBhYmxlIG9mIHJhaXNpbmcgbGluZSB2b2x0YWdlIHByb3Blcmx5LgorCUl0IHdpbGwgYmUgZmluZSB3aXRoIG51bGwgbW9kZW0gbGlua3MsIGFzIGxvbmcgYXMgeW91IGRvIG5vdCB0cnkgdG8gbGluayB0d28KKwl0b2dldGhlciB3aXRob3V0IGhhY2tpbmcgdGhlIGFkYXB0ZXIgdG8gc2V0IHRoZSBsaW5lIGhpZ2guCisKKwlUaGUgZHJpdmVyIGlzIHNtcCBzYWZlLiAgUGVyZm9ybWFuY2Ugd2l0aCB0aGUgZHJpdmVyIGlzIHJhdGhlciBsb3cgd2hlbiB1c2luZworCWl0IGZvciB0cmFuc2ZlcmluZyBmaWxlcy4gIFRoaXMgaXMgYmVpbmcgd29ya2VkIG9uLCBidXQgSSB3b3VsZCBiZSB3aWxsaW5nIHRvCisJYWNjZXB0IHBhdGNoZXMuICBBbiB1cmIgcXVldWUgb3IgcGFja2V0IGJ1ZmZlciB3b3VsZCBsaWtlbHkgZml0IHRoZSBiaWxsIGhlcmUuCisKKwlJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBwcm9ibGVtcywgcGF0Y2hlcywgZmVhdHVyZSByZXF1ZXN0cywgZXRjLiB5b3UgY2FuCisJY29udGFjdCBtZSBoZXJlIHZpYSBlbWFpbDoKKwkJCQkJZGlnbm9tZUBnbWFpbC5jb20KKwkJKHlvdXIgcHJvYmxlbXMvcGF0Y2hlcyBjYW4gYWx0ZXJuYXRlbHkgYmUgc3VibWl0dGVkIHRvIHVzYi1kZXZlbCkKKworCitEaWdpIEFjY2VsZVBvcnQgRHJpdmVyCisKKyAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIERpZ2kgQWNjZWxlUG9ydCBVU0IgMiBhbmQgNCBkZXZpY2VzLCAyIHBvcnQKKyAgKHBsdXMgYSBwYXJhbGxlbCBwb3J0KSBhbmQgNCBwb3J0IFVTQiBzZXJpYWwgY29udmVydGVycy4gIFRoZSBkcml2ZXIKKyAgZG9lcyBOT1QgeWV0IHN1cHBvcnQgdGhlIERpZ2kgQWNjZWxlUG9ydCBVU0IgOC4KKworICBUaGlzIGRyaXZlciB3b3JrcyB1bmRlciBTTVAgd2l0aCB0aGUgdXNiLXVoY2kgZHJpdmVyLiAgSXQgZG9lcyBub3QKKyAgd29yayB1bmRlciBTTVAgd2l0aCB0aGUgdWhjaSBkcml2ZXIuCisKKyAgVGhlIGRyaXZlciBpcyBnZW5lcmFsbHkgd29ya2luZywgdGhvdWdoIHdlIHN0aWxsIGhhdmUgYSBmZXcgbW9yZSBpb2N0bHMKKyAgdG8gaW1wbGVtZW50IGFuZCBmaW5hbCB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgdG8gZG8uICBUaGUgcGFyYWxsZWQgcG9ydAorICBvbiB0aGUgVVNCIDIgaXMgc3VwcG9ydGVkIGFzIGEgc2VyaWFsIHRvIHBhcmFsbGVsIGNvbnZlcnRlcjsgaW4gb3RoZXIKKyAgd29yZHMsIGl0IGFwcGVhcnMgYXMgYW5vdGhlciBVU0Igc2VyaWFsIHBvcnQgb24gTGludXgsIGV2ZW4gdGhvdWdoCisgIHBoeXNpY2FsbHkgaXQgaXMgcmVhbGx5IGEgcGFyYWxsZWwgcG9ydC4gIFRoZSBEaWdpIEFjY2VsZXBvcnQgVVNCIDgKKyAgaXMgbm90IHlldCBzdXBwb3J0ZWQuCisKKyAgUGxlYXNlIGNvbnRhY3QgUGV0ZXIgQmVyZ2VyIChwYmVyZ2VyQGJyaW1zb24uY29tKSBvciBBbCBCb3JjaGVycworICAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKSBmb3IgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcworICBkcml2ZXIuCisKKworQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMKKworICBTaW5nbGUgcG9ydCBEQi05L1BTLTIgc2VyaWFsIGFkYXB0ZXIgZnJvbSBCZWxraW4gd2l0aCBmaXJtd2FyZSBieSBlVEVLIExhYnMuCisgIFRoZSBQZXJhY29tIHNpbmdsZSBwb3J0IHNlcmlhbCBhZGFwdGVyIGFsc28gd29ya3Mgd2l0aCB0aGlzIGRyaXZlciwgYXMKKyAgd2VsbCBhcyB0aGUgR29IdWJzIGFkYXB0ZXIuCisKKyAgQ3VycmVudCBzdGF0dXM6CisgICAgVGhlIGZvbGxvd2luZyBoYXZlIGJlZW4gdGVzdGVkIGFuZCB3b3JrOgorICAgICAgQmF1ZCByYXRlICAgIDMwMC0yMzA0MDAgICAgICAgICAgICAgICAKKyAgICAgIERhdGEgYml0cyAgICA1LTgKKyAgICAgIFN0b3AgYml0cyAgICAxLTIKKyAgICAgIFBhcml0eSAgICAgICBOLEUsTyxNLFMKKyAgICAgIEhhbmRzaGFrZSAgICBOb25lLCBTb2Z0d2FyZSAoWE9OL1hPRkYpLCBIYXJkd2FyZSAoQ1RTUlRTLENUU0RUUikqCisgICAgICBCcmVhayAgICAgICAgU2V0IGFuZCBjbGVhcgorICAgICAgTGluZSBjb250cmwgIElucHV0L091dHB1dCBxdWVyeSBhbmQgY29udHJvbCAqKgorCisgICAgICAqICBIYXJkd2FyZSBpbnB1dCBmbG93IGNvbnRyb2wgaXMgb25seSBlbmFibGVkIGZvciBmaXJtd2FyZQorICAgICAgICAgbGV2ZWxzIGFib3ZlIDIuMDYuICBSZWFkIHNvdXJjZSBjb2RlIGNvbW1lbnRzIGRlc2NyaWJpbmcgQmVsa2luCisgICAgICAgICBmaXJtd2FyZSBlcnJhdGEuICBIYXJkd2FyZSBvdXRwdXQgZmxvdyBjb250cm9sIGlzIHdvcmtpbmcgZm9yIGFsbAorICAgICAgICAgZmlybXdhcmUgdmVyc2lvbnMuCisgICAgICAqKiBRdWVyaWVzIG9mIGlucHV0cyAoQ1RTLERTUixDRCxSSSkgc2hvdyB0aGUgbGFzdAorICAgICAgICAgcmVwb3J0ZWQgc3RhdGUuICBRdWVyaWVzIG9mIG91dHB1dHMgKERUUixSVFMpIHNob3cgdGhlIGxhc3QKKyAgICAgICAgIHJlcXVlc3RlZCBzdGF0ZSBhbmQgbWF5IG5vdCByZWZsZWN0IGN1cnJlbnQgc3RhdGUgYXMgc2V0IGJ5CisgICAgICAgICBhdXRvbWF0aWMgaGFyZHdhcmUgZmxvdyBjb250cm9sLgorCisgIFRPIERPIExpc3Q6CisgICAgLS0gQWRkIHRydWUgbW9kZW0gY29udG9sIGxpbmUgcXVlcnkgY2FwYWJpbGl0eS4gIEN1cnJlbnRseSB0cmFja3MgdGhlCisgICAgICAgc3RhdGVzIHJlcG9ydGVkIGJ5IHRoZSBpbnRlcnJ1cHQgYW5kIHRoZSBzdGF0ZXMgcmVxdWVzdGVkLgorICAgIC0tIEFkZCBlcnJvciByZXBvcnRpbmcgYmFjayB0byBhcHBsaWNhdGlvbiBmb3IgVUFSVCBlcnJvciBjb25kaXRpb25zLgorICAgIC0tIEFkZCBzdXBwb3J0IGZvciBmbHVzaCBpb2N0bHMuCisgICAgLS0gQWRkIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGlzIG1pc3NpbmcgOikKKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBXaWxsaWFtCisgIEdyZWF0aG91c2UgYXQgd2dyZWF0aG91c2VAc212YS5jb20KKworCitFbXBlZyBlbXBlZy1jYXIgTWFyayBJL0lJIERyaXZlcgorCisgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciB0byBwcm92aWRlIGNvbm5lY3Rpdml0eSBzdXBwb3J0IGZvciB0aGUKKyAgY2xpZW50IHN5bmNocm9uaXphdGlvbiB0b29scyBmb3IgYW4gRW1wZWcgZW1wZWctY2FyIG1wMyBwbGF5ZXIuCisKKyAgVGlwczoKKyAgICAqIERvbid0IGZvcmdldCB0byBjcmVhdGUgdGhlIGRldmljZSBub2RlcyBmb3IgdHR5VVNCezAsMSwyLC4uLn0KKyAgICAqIG1vZHByb2JlIGVtcGVnIChtb2Rwcm9iZSBpcyB5b3VyIGZyaWVuZCkKKyAgICAqIGVtcHRvb2wgLS11c2IgL2Rldi90dHlVU0IwIChvciB3aGF0ZXZlciB5b3UgbmFtZWQgeW91ciBkZXZpY2Ugbm9kZSkKKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBHYXJ5CisgIEJydWJha2VyIGF0IHhhdnllckBpeC5uZXRjb20uY29tCisKKworTUNUIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQWRhcHRlciBVMjMyCisKKyAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBNQ1QgVVNCLVJTMjMyIENvbnZlcnRlciAoMjUgcGluLCBNb2RlbCBOby4KKyAgVTIzMi1QMjUpIGZyb20gTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuICh0aGVyZSBpcyBhbHNvIGEgOSBwaW4KKyAgTW9kZWwgTm8uIFUyMzItUDkpLiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGV2aWNlIGNhbiBiZSBmb3VuZCBhdAorICB0aGUgbWFudWZhY3R1cmUncyB3ZWItc2l0ZTogaHR0cDovL3d3dy5tY3QuY29tLnR3LgorCisgIFRoZSBkcml2ZXIgaXMgZ2VuZXJhbGx5IHdvcmtpbmcsIHRob3VnaCBpdCBzdGlsbCBuZWVkcyBzb21lIG1vcmUgdGVzdGluZy4KKyAgSXQgaXMgZGVyaXZlZCBmcm9tIHRoZSBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMyBkcml2ZXIgYW5kIGl0cworICBUT0RPIGxpc3QgaXMgdmFsaWQgZm9yIHRoaXMgZHJpdmVyIGFzIHdlbGwuCisKKyAgVGhpcyBkcml2ZXIgaGFzIGFsc28gYmVlbiBmb3VuZCB0byB3b3JrIGZvciBvdGhlciBwcm9kdWN0cywgd2hpY2ggaGF2ZQorICB0aGUgc2FtZSBWZW5kb3IgSUQgYnV0IGRpZmZlcmVudCBQcm9kdWN0IElEcy4gU2l0ZWNvbSdzIFUyMzItUDI1IHNlcmlhbAorICBjb252ZXJ0ZXIgdXNlcyBQcm9kdWN0IElEIDB4MjMwIGFuZCBWZW5kb3IgSUQgMHg3MTEgYW5kIHdvcmtzIHdpdGggdGhpcworICBkcml2ZXIuIEFsc28sIEQtTGluaydzIERVLUgzU1AgVVNCIEJBWSBhbHNvIHdvcmtzIHdpdGggdGhpcyBkcml2ZXIuCisKKyAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgV29sZmdhbmcKKyAgR3JhbmRlZ2dlciBhdCB3b2xmZ2FuZ0BjZXMuY2gKKworCitJbnNpZGUgT3V0IE5ldHdvcmtzIEVkZ2Vwb3J0IERyaXZlcgorCisgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGFsbCBkZXZpY2VzIG1hZGUgYnkgSW5zaWRlIE91dCBOZXR3b3Jrcywgc3BlY2lmaWNhbGx5CisgIHRoZSBmb2xsb3dpbmcgbW9kZWxzOgorICAgICAgIEVkZ2Vwb3J0LzQKKyAgICAgICBSYXBpZHBvcnQvNAorICAgICAgIEVkZ2Vwb3J0LzR0CisgICAgICAgRWRnZXBvcnQvMgorICAgICAgIEVkZ2Vwb3J0LzRpCisgICAgICAgRWRnZXBvcnQvMmkKKyAgICAgICBFZGdlcG9ydC80MjEKKyAgICAgICBFZGdlcG9ydC8yMQorICAgICAgIEVkZ2Vwb3J0LzgKKyAgICAgICBFZGdlcG9ydC84IER1YWwKKyAgICAgICBFZGdlcG9ydC8yRDgKKyAgICAgICBFZGdlcG9ydC80RDgKKyAgICAgICBFZGdlcG9ydC84aQorICAgICAgIEVkZ2Vwb3J0LzIgRElOCisgICAgICAgRWRnZXBvcnQvNCBESU4KKyAgICAgICBFZGdlcG9ydC8xNiBEdWFsCisKKyAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZworICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCisKKworUkVJTkVSIFNDVCBjeWJlckphY2sgcGlucGFkL2UtY29tIFVTQiBjaGlwY2FyZCByZWFkZXIKKyAgIAorICBJbnRlcmZhY2UgdG8gSVNPIDc4MTYgY29tcGF0aWJsZSBjb250YWN0YmFzZWQgY2hpcGNhcmRzLCBlLmcuIEdTTSBTSU1zLgorICAKKyAgQ3VycmVudCBzdGF0dXM6CisgICAgVGhpcyBpcyB0aGUga2VybmVsIHBhcnQgb2YgdGhlIGRyaXZlciBmb3IgdGhpcyBVU0IgY2FyZCByZWFkZXIuCisgICAgVGhlcmUgaXMgYWxzbyBhIHVzZXIgcGFydCBmb3IgYSBDVC1BUEkgZHJpdmVyIGF2YWlsYWJsZS4gQSBzaXRlCisgICAgZm9yIGRvd25sb2FkaW5nIGlzIFRCQS4gRm9yIG5vdywgeW91IGNhbiByZXF1ZXN0IGl0IGZyb20gdGhlCisgICAgbWFpbnRhaW5lciAobGludXgtdXNiQHNpaS5saSkuCisKKyAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QKKyAgbGludXgtdXNiQHNpaS5saQorCisKK1Byb2xpZmljIFBMMjMwMyBEcml2ZXIKKworICBUaGlzIGRyaXZlciBzdXBwb3J0IGFueSBkZXZpY2UgdGhhdCBoYXMgdGhlIFBMMjMwMyBjaGlwIGZyb20gUHJvbGlmaWMKKyAgaW4gaXQuICBUaGlzIGluY2x1ZGVzIGEgbnVtYmVyIG9mIHNpbmdsZSBwb3J0IFVTQiB0byBzZXJpYWwKKyAgY29udmVydGVycyBhbmQgVVNCIEdQUyBkZXZpY2VzLiAgRGV2aWNlcyBmcm9tIEF0ZW4gKHRoZSBVQy0yMzIpIGFuZAorICBJTy1EYXRhIHdvcmsgd2l0aCB0aGlzIGRyaXZlci4KKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBHcmVnCisgIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KKyAgCisKK0tMNUtVU0IxMDUgY2hpcHNldCAvIFBhbG1Db25uZWN0IFVTQiBzaW5nbGUtcG9ydCBhZGFwdGVyCisgIAorQ3VycmVudCBzdGF0dXM6CisgIFRoZSBkcml2ZXIgd2FzIHB1dCB0b2dldGhlciBieSBsb29raW5nIGF0IHRoZSB1c2IgYnVzIHRyYW5zYWN0aW9ucworICBkb25lIGJ5IFBhbG0ncyBkcml2ZXIgdW5kZXIgV2luZG93cywgc28gYSBsb3Qgb2YgZnVuY3Rpb25hbGl0eSBpcworICBzdGlsbCBtaXNzaW5nLiAgTm90YWJseSwgc2VyaWFsIGlvY3RscyBhcmUgc29tZXRpbWVzIGZha2VkIG9yIG5vdCB5ZXQKKyAgaW1wbGVtZW50ZWQuICBTdXBwb3J0IGZvciBmaW5kaW5nIG91dCBhYm91dCBEU1IgYW5kIENUUyBsaW5lIHN0YXR1cyBpcworICBob3dldmVyIGltcGxlbWVudGVkICh0aG91Z2ggbm90IG5pY2VseSksIHNvIHlvdXIgZmF2b3JpdGUgYXV0b3BpbG90KDEpCisgIGFuZCBwaWxvdC1tYW5hZ2VyIC1kYWVtb24gY2FsbHMgd2lsbCB3b3JrLiAgQmF1ZCByYXRlcyB1cCB0byAxMTUyMDAKKyAgYXJlIHN1cHBvcnRlZCwgYnV0IGhhbmRzaGFraW5nIChzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaXMgbm90LCB3aGljaCBpcworICB3aHkgaXQgaXMgd2lzZSB0byBjdXQgZG93biBvbiB0aGUgcmF0ZSB1c2VkIGlzIHdpc2UgZm9yIGxhcmdlCisgIHRyYW5zZmVycyB1bnRpbCB0aGlzIGlzIHNldHRsZWQuCisgIAorT3B0aW9ucyBzdXBwb3J0ZWQ6CisgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIHlvdSBjYW4gcGFzcyB0aGUgZm9sbG93aW5nCisgIG9wdGlvbnMgdG8gaXQ6CisgIGRlYnVnCQkJLSBleHRyYSB2ZXJib3NlIGRlYnVnZ2luZyBpbmZvCisgIAkJCSAgKGRlZmF1bHQ6IDA7IG5vbnplcm8gZW5hYmxlcykKKyAgdXNlX2xvd2xhdGVuY3kJLSB1c2UgbG93X2xhdGVuY3kgZmxhZyB0byBzcGVlZCB1cCB0dHkgbGF5ZXIKKwkJCSAgd2hlbiByZWFkaW5nIGZyb20gZnJvbSB0aGUgZGV2aWNlLgorCQkJICAoZGVmYXVsdDogMDsgbm9uemVybyBlbmFibGVzKQorCisgIFNlZSBodHRwOi8vd3d3LnV1aGF1cy5kZS9saW51eC9wYWxtY29ubmVjdC5odG1sIGZvciB1cC10by1kYXRlCisgIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLgorCisKK0dlbmVyaWMgU2VyaWFsIGRyaXZlcgorCisgIElmIHlvdXIgZGV2aWNlIGlzIG5vdCBvbmUgb2YgdGhlIGFib3ZlIGxpc3RlZCBkZXZpY2VzLCBjb21wYXRpYmxlIHdpdGgKKyAgdGhlIGFib3ZlIG1vZGVscywgeW91IGNhbiB0cnkgb3V0IHRoZSAiZ2VuZXJpYyIgaW50ZXJmYWNlLiBUaGlzCisgIGludGVyZmFjZSBkb2VzIG5vdCBwcm92aWRlIGFueSB0eXBlIG9mIGNvbnRyb2wgbWVzc2FnZXMgc2VudCB0byB0aGUKKyAgZGV2aWNlLCBhbmQgZG9lcyBub3Qgc3VwcG9ydCBhbnkga2luZCBvZiBkZXZpY2UgZmxvdyBjb250cm9sLiBBbGwgdGhhdAorICBpcyByZXF1aXJlZCBvZiB5b3VyIGRldmljZSBpcyB0aGF0IGl0IGhhcyBhdCBsZWFzdCBvbmUgYnVsayBpbiBlbmRwb2ludCwKKyAgb3Igb25lIGJ1bGsgb3V0IGVuZHBvaW50LiAKKyAgCisgIFRvIGVuYWJsZSB0aGUgZ2VuZXJpYyBkcml2ZXIgdG8gcmVjb2duaXplIHlvdXIgZGV2aWNlLCBidWlsZCB0aGUgZHJpdmVyCisgIGFzIGEgbW9kdWxlIGFuZCBsb2FkIGl0IGJ5IHRoZSBmb2xsb3dpbmcgaW52b2NhdGlvbjoKKwlpbnNtb2QgdXNic2VyaWFsIHZlbmRvcj0weCMjIyMgcHJvZHVjdD0weCMjIyMKKyAgd2hlcmUgdGhlICMjIyMgaXMgcmVwbGFjZWQgd2l0aCB0aGUgaGV4IHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgZGV2aWNlJ3MKKyAgdmVuZG9yIGlkIGFuZCBwcm9kdWN0IGlkLgorCisgIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIE5ldENoaXAgVVNCCisgIGRldmVsb3BtZW50IGJvYXJkLCBwcm92aWRpbmcgYSB3YXkgdG8gZGV2ZWxvcCBVU0IgZmlybXdhcmUgd2l0aG91dAorICBoYXZpbmcgdG8gd3JpdGUgYSBjdXN0b20gZHJpdmVyLgorCisgIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdyZWcKKyAgS3JvYWgtSGFydG1hbiBhdCBncmVnQGtyb2FoLmNvbQorCisKK0NPTlRBQ1Q6CisKKyAgSWYgYW55b25lIGhhcyBhbnkgcHJvYmxlbXMgdXNpbmcgdGhlc2UgZHJpdmVycywgd2l0aCBhbnkgb2YgdGhlIGFib3ZlCisgIHNwZWNpZmllZCBwcm9kdWN0cywgcGxlYXNlIGNvbnRhY3QgdGhlIHNwZWNpZmljIGRyaXZlcidzIGF1dGhvciBsaXN0ZWQKKyAgYWJvdmUsIG9yIGpvaW4gdGhlIExpbnV4LVVTQiBtYWlsaW5nIGxpc3QgKGluZm9ybWF0aW9uIG9uIGpvaW5pbmcgdGhlCisgIG1haWxpbmcgbGlzdCwgYXMgd2VsbCBhcyBhIGxpbmsgdG8gaXRzIHNlYXJjaGFibGUgYXJjaGl2ZSBpcyBhdAorICBodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvICkKKworCitHcmVnIEtyb2FoLUhhcnRtYW4KK2dyZWdAa3JvYWguY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjg0MzFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dApAQCAtMCwwICsxLDE1NiBAQAorKiBJbnRyb2R1Y3Rpb24KKworVGhlIG5hbWUgInVzYm1vbiIgaW4gbG93ZXJjYXNlIHJlZmVycyB0byBhIGZhY2lsaXR5IGluIGtlcm5lbCB3aGljaCBpcwordXNlZCB0byBjb2xsZWN0IHRyYWNlcyBvZiBJL08gb24gdGhlIFVTQiBidXMuIFRoaXMgZnVuY3Rpb24gaXMgYW5hbG9nb3VzCit0byBhIHBhY2tldCBzb2NrZXQgdXNlZCBieSBuZXR3b3JrIG1vbml0b3JpbmcgdG9vbHMgc3VjaCBhcyB0Y3BkdW1wKDEpCitvciBFdGhlcmVhbC4gU2ltaWxhcmx5LCBpdCBpcyBleHBlY3RlZCB0aGF0IGEgdG9vbCBzdWNoIGFzIHVzYmR1bXAgb3IKK1VTQk1vbiAod2l0aCB1cHBlcmNhc2UgbGV0dGVycykgaXMgdXNlZCB0byBleGFtaW5lIHJhdyB0cmFjZXMgcHJvZHVjZWQKK2J5IHVzYm1vbi4KKworVGhlIHVzYm1vbiByZXBvcnRzIHJlcXVlc3RzIG1hZGUgYnkgcGVyaXBoZXJhbC1zcGVjaWZpYyBkcml2ZXJzIHRvIEhvc3QKK0NvbnRyb2xsZXIgRHJpdmVycyAoSENEKS4gU28sIGlmIEhDRCBpcyBidWdneSwgdGhlIHRyYWNlcyByZXBvcnRlZCBieQordXNibW9uIG1heSBub3QgY29ycmVzcG9uZCB0byBidXMgdHJhbnNhY3Rpb25zIHByZWNpc2VseS4gVGhpcyBpcyB0aGUgc2FtZQorc2l0dWF0aW9uIGFzIHdpdGggdGNwZHVtcC4KKworKiBIb3cgdG8gdXNlIHVzYm1vbiB0byBjb2xsZWN0IHJhdyB0ZXh0IHRyYWNlcworCitVbmxpa2UgdGhlIHBhY2tldCBzb2NrZXQsIHVzYm1vbiBoYXMgYW4gaW50ZXJmYWNlIHdoaWNoIHByb3ZpZGVzIHRyYWNlcworaW4gYSB0ZXh0IGZvcm1hdC4gVGhpcyBpcyB1c2VkIGZvciB0d28gcHVycG9zZXMuIEZpcnN0LCBpdCBzZXJ2ZXMgYXMgYQorY29tbW9uIHRyYWNlIGV4Y2hhbmdlIGZvcm1hdCBmb3IgdG9vbHMgd2hpbGUgbW9zdCBzb3BoaXN0aWNhdGVkIGZvcm1hdHMKK2FyZSBmaW5hbGl6ZWQuIFNlY29uZCwgaHVtYW5zIGNhbiByZWFkIGl0IGluIGNhc2UgdG9vbHMgYXJlIG5vdCBhdmFpbGFibGUuCisKK1RvIGNvbGxlY3QgYSByYXcgdGV4dCB0cmFjZSwgZXhlY3V0ZSBmb2xsb3dpbmcgc3RlcHMuCisKKzEuIFByZXBhcmUKKworTW91bnQgZGVidWdmcyAoaXQgaGFzIHRvIGJlIGVuYWJsZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbiksIGFuZAorbG9hZCB0aGUgdXNibW9uIG1vZHVsZSAoaWYgYnVpbHQgYXMgbW9kdWxlKS4gVGhlIHNlY29uZCBzdGVwIGlzIHNraXBwZWQKK2lmIHVzYm1vbiBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwuCisKKyMgbW91bnQgLXQgZGVidWdmcyBub25lX2RlYnVncyAvc3lzL2tlcm5lbC9kZWJ1ZworIyBtb2Rwcm9iZSB1c2Jtb24KKworVmVyaWZ5IHRoYXQgYnVzIHNvY2tldHMgYXJlIHByZXNlbnQuCisKK1tyb290QGxlbWJhcyB6YWl0Y2V2XSMgbHMgL3N5cy9rZXJuZWwvZGVidWcvdXNibW9uCisxcyAgMXQgIDJzICAydCAgM3MgIDN0ICA0cyAgNHQKK1tyb290QGxlbWJhcyB6YWl0Y2V2XSMKKworIyBscyAvc3lzL2tlcm5lbAorCisyLiBGaW5kIHdoaWNoIGJ1cyBjb25uZWN0cyB0byB0aGUgZGVzaXJlZCBkZXZpY2UKKworUnVuICJjYXQgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIiwgYW5kIGZpbmQgdGhlIFQtbGluZSB3aGljaCBjb3JyZXNwb25kcyB0bwordGhlIGRldmljZS4gVXN1YWxseSB5b3UgZG8gaXQgYnkgbG9va2luZyBmb3IgdGhlIHZlbmRvciBzdHJpbmcuIElmIHlvdSBoYXZlCittYW55IHNpbWlsYXIgZGV2aWNlcywgdW5wbHVnIG9uZSBhbmQgY29tcGFyZSB0d28gL3Byb2MvYnVzL3VzYi9kZXZpY2VzIG91dHB1dHMuCitUaGUgVC1saW5lIHdpbGwgaGF2ZSBhIGJ1cyBudW1iZXIuIEV4YW1wbGU6CisKK1Q6ICBCdXM9MDMgTGV2PTAxIFBybnQ9MDEgUG9ydD0wMCBDbnQ9MDEgRGV2Iz0gIDIgU3BkPTEyICBNeENoPSAwCitEOiAgVmVyPSAxLjEwIENscz0wMCg+aWZjICkgU3ViPTAwIFByb3Q9MDAgTXhQUz0gOCAjQ2Zncz0gIDEKK1A6ICBWZW5kb3I9MDU1NyBQcm9kSUQ9MjAwNCBSZXY9IDEuMDAKK1M6ICBNYW51ZmFjdHVyZXI9QVRFTgorUzogIFByb2R1Y3Q9VUMxMDBLTSBWMi4wMAorCitCdXM9MDMgbWVhbnMgaXQncyBidXMgMy4KKworMy4gU3RhcnQgJ2NhdCcKKworIyBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdXNibW9uLzN0ID4gL3RtcC8xLm1vbi5vdXQKKworVGhpcyBwcm9jZXNzIHdpbGwgYmUgcmVhZGluZyB1bnRpbCBraWxsZWQuIE5hdHVyYWxseSwgdGhlIG91dHB1dCBjYW4gYmUKK3JlZGlyZWN0ZWQgdG8gYSBkZXNpcmFibGUgbG9jYXRpb24uIFRoaXMgaXMgcHJlZmVycmVkLCBiZWNhdXNlIGl0IGlzIGdvaW5nCit0byBiZSBxdWl0ZSBsb25nLgorCis0LiBQZXJmb3JtIHRoZSBkZXNpcmVkIG9wZXJhdGlvbiBvbiB0aGUgVVNCIGJ1cworCitUaGlzIGlzIHdoZXJlIHlvdSBkbyBzb21ldGhpbmcgdGhhdCBjcmVhdGVzIHRoZSB0cmFmZmljOiBwbHVnIGluIGEgZmxhc2gga2V5LAorY29weSBmaWxlcywgY29udHJvbCBhIHdlYmNhbSwgZXRjLgorCis1LiBLaWxsIGNhdAorCitVc3VhbGx5IGl0J3MgZG9uZSB3aXRoIGEga2V5Ym9hcmQgaW50ZXJydXB0IChDb250cm9sLUMpLgorCitBdCB0aGlzIHBvaW50IHRoZSBvdXRwdXQgZmlsZSAoL3RtcC8xLm1vbi5vdXQgaW4gdGhpcyBleGFtcGxlKSBjYW4gYmUgc2F2ZWQsCitzZW50IGJ5IGUtbWFpbCwgb3IgaW5zcGVjdGVkIHdpdGggYSB0ZXh0IGVkaXRvci4gSW4gdGhlIGxhc3QgY2FzZSBtYWtlIHN1cmUKK3RoYXQgdGhlIGZpbGUgc2l6ZSBpcyBub3QgZXhjZXNzaXZlIGZvciB5b3VyIGZhdm91cml0ZSBlZGl0b3IuCisKKyogUmF3IHRleHQgZGF0YSBmb3JtYXQKKworVGhlICcwdCcgdHlwZSBkYXRhIGNvbnNpc3RzIG9mIGEgc3RyZWFtIG9mIGV2ZW50cywgc3VjaCBhcyBVUkIgc3VibWlzc2lvbiwKK1VSQiBjYWxsYmFjaywgc3VibWlzc2lvbiBlcnJvci4gRXZlcnkgZXZlbnQgaXMgYSB0ZXh0IGxpbmUsIHdoaWNoIGNvbnNpc3RzCitvZiB3aGl0ZXNwYWNlIHNlcGFyYXRlZCB3b3Jkcy4gVGhlIG51bWJlciBvZiBwb3NpdGlvbiBvZiB3b3JkcyBtYXkgZGVwZW5kCitvbiB0aGUgZXZlbnQgdHlwZSwgYnV0IHRoZXJlIGlzIGEgc2V0IG9mIHdvcmRzLCBjb21tb24gZm9yIGFsbCB0eXBlcy4KKworSGVyZSBpcyB0aGUgbGlzdCBvZiB3b3JkcywgZnJvbSBsZWZ0IHRvIHJpZ2h0OgorLSBVUkIgVGFnLiBUaGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgVVJCcyBpcyBub3JtYWxseSBhIGtlcm5lbCBtb2RlIGFkZHJlc3MKKyBvZiB0aGUgVVJCIHN0cnVjdHVyZSBpbiBoZXhhZGVjaW1hbC4KKy0gVGltZXN0YW1wIGluIG1pY3Jvc2Vjb25kcywgYSBkZWNpbWFsIG51bWJlci4gVGhlIHRpbWVzdGFtcCdzIHJlc29sdXRpb24KKyAgZGVwZW5kcyBvbiBhdmFpbGFibGUgY2xvY2ssIGFuZCBzbyBpdCBjYW4gYmUgbXVjaCB3b3JzZSB0aGFuIGEgbWljcm9zZWNvbmQKKyAgKGlmIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGppZmZpZXMsIGZvciBleGFtcGxlKS4KKy0gRXZlbnQgVHlwZS4gVGhpcyB0eXBlIHJlZmVycyB0byB0aGUgZm9ybWF0IG9mIHRoZSBldmVudCwgbm90IFVSQiB0eXBlLgorICBBdmFpbGFibGUgdHlwZXMgYXJlOiBTIC0gc3VibWlzc2lvbiwgQyAtIGNhbGxiYWNrLCBFIC0gc3VibWlzc2lvbiBlcnJvci4KKy0gIlBpcGUiLiBUaGUgcGlwZSBjb25jZXB0IGlzIGRlcHJlY2F0ZWQuIFRoaXMgaXMgYSBjb21wb3NpdGUgd29yZCwgdXNlZCB0bworICBiZSBkZXJpdmVkIGZyb20gaW5mb3JtYXRpb24gaW4gcGlwZXMuIEl0IGNvbnNpc3RzIG9mIHRocmVlIGZpZWxkcywgc2VwYXJhdGVkCisgIGJ5IGNvbG9uczogVVJCIHR5cGUgYW5kIGRpcmVjdGlvbiwgRGV2aWNlIGFkZHJlc3MsIEVuZHBvaW50IG51bWJlci4KKyAgVHlwZSBhbmQgZGlyZWN0aW9uIGFyZSBlbmNvZGVkIHdpdGggdHdvIGJ5dGVzIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgorICAgIENpIENvICAgQ29udHJvbCBpbnB1dCBhbmQgb3V0cHV0CisgICAgWmkgWm8gICBJc29jaHJvbm91cyBpbnB1dCBhbmQgb3V0cHV0CisgICAgSWkgSW8gICBJbnRlcnJ1cHQgaW5wdXQgYW5kIG91dHB1dAorICAgIEJpIEJvICAgQnVsayBpbnB1dCBhbmQgb3V0cHV0CisgIERldmljZSBhZGRyZXNzIGFuZCBFbmRwb2ludCBudW1iZXIgYXJlIGRlY2ltYWwgbnVtYmVycyB3aXRoIGxlYWRpbmcgemVyb2VzCisgIG9yIDMgYW5kIDIgcG9zaXRpb25zLCBjb3JyZXNwb25kaW5nbHkuCistIFVSQiBTdGF0dXMuIFRoaXMgZmllbGQgbWFrZXMgbm8gc2Vuc2UgZm9yIHN1Ym1pc3Npb25zLCBidXQgaXMgcHJlc2VudAorICB0byBoZWxwIHNjcmlwdHMgd2l0aCBwYXJzaW5nLiBJbiBlcnJvciBjYXNlLCBpdCBjb250YWlucyB0aGUgZXJyb3IgY29kZS4KKy0gRGF0YSBMZW5ndGguIFRoaXMgaXMgdGhlIGFjdHVhbCBsZW5ndGggaW4gdGhlIFVSQi4KKy0gRGF0YSB0YWcuIFRoZSB1c2Jtb24gbWF5IG5vdCBhbHdheXMgY2FwdHVyZSBkYXRhLCBldmVuIGlmIGxlbmd0aCBpcyBub256ZXJvLgorICBPbmx5IGlmIHRhZyBpcyAnPScsIHRoZSBkYXRhIHdvcmRzIGFyZSBwcmVzZW50LgorLSBEYXRhIHdvcmRzIGZvbGxvdywgaW4gYmlnIGVuZGlhbiBoZXhhZGVjaW1hbCBmb3JtYXQuIE5vdGljZSB0aGF0IHRoZXkgYXJlCisgIG5vdCBtYWNoaW5lIHdvcmRzLCBidXQgcmVhbGx5IGp1c3QgYSBieXRlIHN0cmVhbSBzcGxpdCBpbnRvIHdvcmRzIHRvIG1ha2UKKyAgaXQgZWFzaWVyIHRvIHJlYWQuIFRodXMsIHRoZSBsYXN0IHdvcmQgbWF5IGNvbnRhaW4gZnJvbSBvbmUgdG8gZm91ciBieXRlcy4KKyAgVGhlIGxlbmd0aCBvZiBjb2xsZWN0ZWQgZGF0YSBpcyBsaW1pdGVkIGFuZCBjYW4gYmUgbGVzcyB0aGFuIHRoZSBkYXRhIGxlbmd0aAorICByZXBvcnQgaW4gRGF0YSBMZW5ndGggd29yZC4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIGNvZGUgdG8gcmVhZCB0aGUgZGF0YSBzdHJlYW0gaW4gYSB3ZWxsIGtub3duIHByb2dyYW1taW5nCitsYW5ndWFnZToKKworY2xhc3MgUGFyc2VkTGluZSB7CisJaW50IGRhdGFfbGVuOwkJLyogQXZhaWxhYmxlIGxlbmd0aCBvZiBkYXRhICovCisJYnl0ZSBkYXRhW107CisKKwl2b2lkIHBhcnNlRGF0YShTdHJpbmdUb2tlbml6ZXIgc3QpIHsKKwkJaW50IGF2YWlsd29yZHMgPSBzdC5jb3VudFRva2VucygpOworCQlkYXRhID0gbmV3IGJ5dGVbYXZhaWx3b3JkcyAqIDRdOworCQlkYXRhX2xlbiA9IDA7CisJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCVN0cmluZyBkYXRhX3N0ciA9IHN0Lm5leHRUb2tlbigpOworCQkJaW50IGxlbiA9IGRhdGFfc3RyLmxlbmd0aCgpIC8gMjsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQkJZGF0YVtkYXRhX2xlbl0gPSBCeXRlLnBhcnNlQnl0ZSgKKwkJCQkgICAgZGF0YV9zdHIuc3Vic3RyaW5nKGkqMiwgaSoyICsgMiksCisJCQkJICAgIDE2KTsKKwkJCQlkYXRhX2xlbisrOworCQkJfQorCQl9CisJfQorfQorCitUaGlzIGZvcm1hdCBpcyBvYnZpb3VzbHkgZGVmaWNpZW50LiBGb3IgZXhhbXBsZSwgdGhlIHNldHVwIHBhY2tldCBmb3IgY29udHJvbAordHJhbnNmZXJzIGlzIG5vdCBkZWxpdmVyZWQuIFRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKworRXhhbXBsZXM6CisKK0FuIGlucHV0IGNvbnRyb2wgdHJhbnNmZXIgdG8gZ2V0IGEgcG9ydCBzdGF0dXM6CisKK2Q3NGZmOWEwIDI2NDAyODgxOTYgUyBDaTowMDE6MDAgLTExNSA0IDwKK2Q3NGZmOWEwIDI2NDAyODgyMDIgQyBDaTowMDE6MDAgMCA0ID0gMDEwMTAxMDAKKworQW4gb3V0cHV0IGJ1bGsgdHJhbnNmZXIgdG8gc2VuZCBhIFNDU0kgY29tbWFuZCAweDVFIGluIGEgMzEtYnl0ZSBCdWxrIHdyYXBwZXIKK3RvIGEgc3RvcmFnZSBkZXZpY2UgYXQgYWRkcmVzcyA1OgorCitkZDY1ZjBlOCA0MTI4Mzc5NzUyIFMgQm86MDA1OjAyIC0xMTUgMzEgPSA1NTUzNDI0MyA1ZTAwMDAwMCAwMDAwMDAwMCAwMDAwMDYwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAKK2RkNjVmMGU4IDQxMjgzNzk4MDggQyBCbzowMDU6MDIgMCAzMSA+CisKKyogUmF3IGJpbmFyeSBmb3JtYXQgYW5kIEFQSQorCitUQkQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3c5OTY4Y2YudHh0IGIvRG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNDc3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3c5OTY4Y2YudHh0CkBAIC0wLDAgKzEsNDgxIEBACisKKyAgICAgICAgICAgICAgICAgICBXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcCAKKyAgICAgICAgICAgICAgICAgICAgIERyaXZlciBmb3IgTGludXggMi42IChiYXNpYyB2ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIERvY3VtZW50YXRpb24gLQorCisKK0luZGV4Cis9PT09PQorMS4gIENvcHlyaWdodAorMi4gIERpc2NsYWltZXIKKzMuICBMaWNlbnNlCis0LiAgT3ZlcnZpZXcKKzUuICBTdXBwb3J0ZWQgZGV2aWNlcworNi4gIE1vZHVsZSBkZXBlbmRlbmNpZXMKKzcuICBNb2R1bGUgbG9hZGluZworOC4gIE1vZHVsZSBwYXJhbWF0ZXJzCis5LiAgQ29udGFjdCBpbmZvcm1hdGlvbgorMTAuIENyZWRpdHMKKworCisxLiBDb3B5cmlnaHQKKz09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PgorCisKKzIuIERpc2NsYWltZXIKKz09PT09PT09PT09PT0KK1dpbmJvbmQgaXMgYSB0cmFkZW1hcmsgb2YgV2luYm9uZCBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbi4KK1RoaXMgc29mdHdhcmUgaXMgbm90IHNwb25zb3JlZCBvciBkZXZlbG9wZWQgYnkgV2luYm9uZC4KKworCiszLiBMaWNlbnNlCis9PT09PT09PT09CitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKzQuIE92ZXJ2aWV3Cis9PT09PT09PT09PQorVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIHZpZGVvIHN0cmVhbWluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZXMgbW91bnRpbmcKK1dpbmJvbmQgVzk5NjdDRiBhbmQgV2luYm9uZCBXOTk2OENGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcHMuIE9WNjgxCitiYXNlZCBjYW1lcmFzIHNob3VsZCBiZSBzdXBwb3J0ZWQgYXMgd2VsbC4KKworVGhlIGRyaXZlciBpcyBkaXZpZGVkIGludG8gdHdvIG1vZHVsZXM6IHRoZSBiYXNpYyBvbmUsICJ3OTk2OGNmIiwgaXMgbmVlZGVkIGZvcgordGhlIHN1cHBvcnRlZCBkZXZpY2VzIHRvIHdvcms7IHRoZSBzZWNvbmQgb25lLCAidzk5NjhjZi12cHAiLCBpcyBhbiBvcHRpb25hbAorbW9kdWxlLCB3aGljaCBwcm92aWRlcyBzb21lIHVzZWZ1bCB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgZnVuY3Rpb25zIGxpa2UgdmlkZW8KK2RlY29kaW5nLCB1cC1zY2FsaW5nIGFuZCBjb2xvdXIgY29udmVyc2lvbnMuIE9uY2UgdGhlIGRyaXZlciBpcyBpbnN0YWxsZWQsCitldmVyeSB0aW1lIGFuIGFwcGxpY2F0aW9uIHRyaWVzIHRvIG9wZW4gYSByZWNvZ25pemVkIGRldmljZSwgInc5OTY4Y2YiIGNoZWNrcwordGhlIHByZXNlbmNlIG9mIHRoZSAidzk5NjhjZi12cHAiIG1vZHVsZSBhbmQgbG9hZHMgaXQgYXV0b21hdGljYWxseSBieSBkZWZhdWx0LgorCitQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgb2ZmaWNpYWwga2VybmVscyBkbyBub3QgaW5jbHVkZSB0aGUgc2Vjb25kIG1vZHVsZSBmb3IKK3BlcmZvcm1hbmNlIHB1cnBvc2VzLiBIb3dldmVyIGl0IGlzIGFsd2F5cyByZWNvbW1lbmRlZCB0byBkb3dubG9hZCBhbmQgaW5zdGFsbAordGhlIGxhdGVzdCBhbmQgY29tcGxldGUgcmVsZWFzZSBvZiB0aGUgZHJpdmVyLCByZXBsYWNpbmcgdGhlIGV4aXN0aW5nIG9uZSwgaWYKK3ByZXNlbnQ6IGl0IHdpbGwgYmUgc3RpbGwgZXZlbiBwb3NzaWJsZSBub3QgdG8gbG9hZCB0aGUgInc5OTY4Y2YtdnBwIiBtb2R1bGUgYXQKK2FsbCwgaWYgeW91IGV2ZXIgd2FudCB0by4gQW5vdGhlciBpbXBvcnRhbnQgbWlzc2luZyBmZWF0dXJlIG9mIHRoZSB2ZXJzaW9uIGluCit0aGUgb2ZmaWNpYWwgTGludXggMi40IGtlcm5lbHMgaXMgdGhlIHdyaXRlYWJsZSAvcHJvYyBmaWxlc3lzdGVtIGludGVyZmFjZS4KKworVGhlIGxhdGVzdCBhbmQgZnVsbC1mZWF0dXJlZCB2ZXJzaW9uIG9mIHRoZSBXOTk2Wzg3XUNGIGRyaXZlciBjYW4gYmUgZm91bmQgYXQ6CitodHRwOi8vd3d3LmxpbnV4LXByb2plY3RzLm9yZy4gUGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluCit0aGF0IHBhY2thZ2UsIGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIGl0LgorCitVcCB0byAzMiBjYW1lcmFzIGNhbiBiZSBoYW5kbGVkIGF0IHRoZSBzYW1lIHRpbWUuIFRoZXkgY2FuIGJlIGNvbm5lY3RlZCBhbmQKK2Rpc2Nvbm5lY3RlZCBmcm9tIHRoZSBob3N0IG1hbnkgdGltZXMgd2l0aG91dCB0dXJuaW5nIG9mZiB0aGUgY29tcHV0ZXIsIGlmCit5b3VyIHN5c3RlbSBzdXBwb3J0cyB0aGUgaG90cGx1ZyBmYWNpbGl0eS4KKworVG8gY2hhbmdlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBlYWNoIGNhbWVyYSwgbWFueSBwYXJhbWV0ZXJzIGNhbiBiZSBwYXNzZWQKK3Rocm91Z2ggY29tbWFuZCBsaW5lIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQgaW50byBtZW1vcnkuCisKK1RoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBWaWRlbzRMaW51eCwgVVNCIGFuZCBJMkMgY29yZSBtb2R1bGVzLiBJdCBoYXMgYmVlbgorZGVzaWduZWQgdG8gcnVuIHByb3Blcmx5IG9uIFNNUCBzeXN0ZW1zIGFzIHdlbGwuIEFuIGFkZGl0aW9uYWwgbW9kdWxlLAorIm92Y2FtY2hpcCIsIGlzIG1hbmRhdG9yeTsgaXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc29tZSBPbW5pVmlzaW9uIGltYWdlCitzZW5zb3JzIGNvbm5lY3RlZCB0byB0aGUgVzk5Nls4N11DRiBjaGlwczsgaWYgZm91bmQgaW4gdGhlIHN5c3RlbSwgdGhlIG1vZHVsZQord2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxvYWRlZCBieSBkZWZhdWx0IChwcm92aWRlZCB0aGF0IHRoZSBrZXJuZWwgaGFzIGJlZW4KK2NvbXBpbGVkIHdpdGggdGhlIGF1dG9tYXRpYyBtb2R1bGUgbG9hZGluZyBvcHRpb24pLgorCisKKzUuIFN1cHBvcnRlZCBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PQorQXQgdGhlIG1vbWVudCwga25vd24gVzk5Nls4N11DRiBhbmQgT1Y2ODEgYmFzZWQgZGV2aWNlcyBhcmU6CistIEFyb21hIERpZ2kgUGVuIFZHQSBEdWFsIE1vZGUgQURHLTUwMDAgKHVua25vd24gaW1hZ2Ugc2Vuc29yKQorLSBBVmVyTWVkaWEgQVZlclRWIFVTQiAoU0FBNzExMUEsIFBoaWxpcHMgRkkxMjE2TWsyIHR1bmVyLCBQVDIzMTNMIGF1ZGlvIGNoaXApCistIENyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28gKE9tbmlWaXNpb24gT1Y3NjEwIHNlbnNvcikKKy0gQ3JlYXRpdmUgTGFicyBWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyBQbHVzIChPbW5pVmlzaW9uIE9WNzYyMCBzZW5zb3IpCistIExlYm9uIExEQy0wMzVBICh1bmtub3duIGltYWdlIHNlbnNvcikKKy0gRXpvbmljcyBFWi04MDIgRVpNZWdhIENhbSAoT21uaVZpc2lvbiBPVjg2MTBDIHNlbnNvcikKKy0gT21uaVZpc2lvbiBPVjg2MTAtRURFIChPbW5pVmlzaW9uIE9WODYxMCBzZW5zb3IpCistIE9QQ09NIERpZ2kgUGVuIFZHQSBEdWFsIE1vZGUgUGVuIENhbWVyYSAodW5rbm93biBpbWFnZSBzZW5zb3IpCistIFByZXRlYyBEaWdpIFBlbi1JSSAoT21uaVZpc2lvbiBPVjc2MjAgc2Vuc29yKQorLSBQcmV0ZWMgRGlnaVBlbi00ODAgKE9tbmlWaXNpb24gT1Y4NjEwIHNlbnNvcikKKworSWYgeW91IGtub3cgYW55IG90aGVyIFc5OTZbODddQ0Ygb3IgT1Y2ODEgYmFzZWQgY2FtZXJhcywgcGxlYXNlIGNvbnRhY3QgbWUuCisKK1RoZSBsaXN0IGFib3ZlIGRvZXMgbm90IGltcGx5IHRoYXQgYWxsIHRob3NlIGRldmljZXMgd29yayB3aXRoIHRoaXMgZHJpdmVyOiB1cAordW50aWwgbm93IG9ubHkgd2ViY2FtcyB0aGF0IGhhdmUgYW4gaW1hZ2Ugc2Vuc29yIHN1cHBvcnRlZCBieSB0aGUgIm92Y2FtY2hpcCIKK21vZHVsZSB3b3JrLiBLZXJuZWwgbWVzc2FnZXMgd2lsbCBhbHdheXMgdGVsbCB5b3Ugd2hldGhlciB0aGlzIGlzIGNhc2UuCisKK1Bvc3NpYmxlIGV4dGVybmFsIG1pY3JvY29udHJvbGxlcnMgb2YgdGhvc2Ugd2ViY2FtcyBhcmUgbm90IHN1cHBvcnRlZDogdGhpcworbWVhbnMgdGhhdCBzdGlsbCBpbWFnZXMgY2Fubm90IGJlIGRvd25sb2FkZWQgZnJvbSB0aGUgZGV2aWNlIG1lbW9yeS4KKworRnVydGhlcm1vcmUsIGl0J3Mgd29ydGggdG8gbm90ZSB0aGF0IEkgd2FzIG9ubHkgYWJsZSB0byBydW4gdGVzdHMgb24gbXkKKyJDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvIi4gRG9uYXRpb25zIG9mIG90aGVyIG1vZGVscywgZm9yCithZGRpdGlvbmFsIHRlc3RpbmcgYW5kIGZ1bGwgc3VwcG9ydCwgd291bGQgYmUgbXVjaCBhcHByZWNpYXRlZC4KKworCis2LiBNb2R1bGUgZGVwZW5kZW5jaWVzCis9PT09PT09PT09PT09PT09PT09PT09CitGb3IgaXQgdG8gd29yayBwcm9wZXJseSwgdGhlIGRyaXZlciBuZWVkcyBrZXJuZWwgc3VwcG9ydCBmb3IgVmlkZW80TGludXgsIFVTQgorYW5kIEkyQywgYW5kIHRoZSAib3ZjYW1jaGlwIiBtb2R1bGUgZm9yIHRoZSBpbWFnZSBzZW5zb3IuIE1ha2Ugc3VyZSB5b3UgYXJlIG5vdAorYWN0dWFsbHkgdXNpbmcgYW55IGV4dGVybmFsICJvdmNhbWNoaXAiIG1vZHVsZSwgZ2l2ZW4gdGhhdCB0aGUgVzk5Nls4N11DRiAKK2RyaXZlciBkZXBlbmRzIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUgcHJlc2VudCBpbiB0aGUgb2ZmaWNpYWwga2VybmVscy4KKworVGhlIGZvbGxvd2luZyBvcHRpb25zIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgYmUgZW5hYmxlZCBhbmQKK2NvcnJlc3BvbmRpbmcgbW9kdWxlcyBtdXN0IGJlIGNvbXBpbGVkOgorCisJIyBNdWx0aW1lZGlhIGRldmljZXMKKwkjCisJQ09ORklHX1ZJREVPX0RFVj1tCisKKwkjIEkyQyBzdXBwb3J0CisJIworCUNPTkZJR19JMkM9bQorCitUaGUgSTJDIGNvcmUgbW9kdWxlIGNhbiBiZSBjb21waWxlZCBzdGF0aWNhbGx5IGluIHRoZSBrZXJuZWwgYXMgd2VsbC4KKworCSMgT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBzdXBwb3J0CisJIworCUNPTkZJR19WSURFT19PVkNBTUNISVA9bQorCisJIyBVU0Igc3VwcG9ydAorCSMKKwlDT05GSUdfVVNCPW0KKworSW4gYWRkaXRpb24sIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgYmVpbmcgdXNlZCwgb25seSBvbmUgb2YgdGhlIG1vZHVsZXMKK2JlbG93IGlzIG5lY2Vzc2FyeToKKworCSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisJIworCUNPTkZJR19VU0JfRUhDSV9IQ0Q9bQorCUNPTkZJR19VU0JfVUhDSV9IQ0Q9bQorCUNPTkZJR19VU0JfT0hDSV9IQ0Q9bQorCitBbmQgZmluYWxseToKKworCSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcworCSMKKwlDT05GSUdfVVNCX1c5OTY4Q0Y9bQorCisKKzcuIE1vZHVsZSBsb2FkaW5nCis9PT09PT09PT09PT09PT09PQorVG8gdXNlIHRoZSBkcml2ZXIsIGl0IGlzIG5lY2Vzc2FyeSB0byBsb2FkIHRoZSAidzk5NjhjZiIgbW9kdWxlIGludG8gbWVtb3J5CithZnRlciBldmVyeSBvdGhlciBtb2R1bGUgcmVxdWlyZWQuCisKK0xvYWRpbmcgY2FuIGJlIGRvbmUgdGhpcyB3YXksIGZyb20gcm9vdDoKKworCVtyb290QGxvY2FsaG9zdCBob21lXSMgbW9kcHJvYmUgdXNiY29yZQorCVtyb290QGxvY2FsaG9zdCBob21lXSMgbW9kcHJvYmUgaTJjLWNvcmUKKwlbcm9vdEBsb2NhbGhvc3QgaG9tZV0jIG1vZHByb2JlIHZpZGVvZGV2CisJW3Jvb3RAbG9jYWxob3N0IGhvbWVdIyBtb2Rwcm9iZSB3OTk2OGNmCisKK0F0IHRoaXMgcG9pbnQgdGhlIHBlcnRpbmVudCBkZXZpY2VzIHNob3VsZCBiZSByZWNvZ25pemVkOiAiZG1lc2ciIGNhbiBiZSB1c2VkCit0byBhbmFseXplIGtlcm5lbCBtZXNzYWdlczoKKworCVt1c2VyQGxvY2FsaG9zdCBob21lXSQgZG1lc2cKKworVGhlcmUgYXJlIGEgbG90IG9mIHBhcmFtZXRlcnMgdGhlIG1vZHVsZSBjYW4gdXNlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdAorc2V0dGluZ3MgZm9yIGVhY2ggZGV2aWNlLiBUbyBsaXN0IGV2ZXJ5IHBvc3NpYmxlIHBhcmFtZXRlciB3aXRoIGEgYnJpZWYKK2V4cGxhbmF0aW9uIGFib3V0IHRoZW0gYW5kIHdoaWNoIHN5bnRheCB0byB1c2UsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJ1biB0aGUKKyJtb2RpbmZvIiBjb21tYW5kOgorCisJW3Jvb3RAbG9jYWhvc3QgaG9tZV0jIG1vZGluZm8gdzk5NjhjZgorCisKKzguIE1vZHVsZSBwYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PQorTW9kdWxlIHBhcmFtZXRlcnMgYXJlIGxpc3RlZCBiZWxvdzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICAgb3Ztb2RfbG9hZAorVHlwZTogICAgICAgICAgICBib29sCitTeW50YXg6ICAgICAgICAgIDwwfDE+CitEZXNjcmlwdGlvbjogICAgIEF1dG9tYXRpYyAnb3ZjYW1jaGlwJyBtb2R1bGUgbG9hZGluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLgorICAgICAgICAgICAgICAgICBJZiBlbmFibGVkLCAnaW5zbW9kJyBzZWFyY2hlcyBmb3IgdGhlIHJlcXVpcmVkICdvdmNhbWNoaXAnCisgICAgICAgICAgICAgICAgIG1vZHVsZSBpbiB0aGUgc3lzdGVtLCBhY2NvcmRpbmcgdG8gaXRzIGNvbmZpZ3VyYXRpb24sIGFuZAorICAgICAgICAgICAgICAgICBsb2FkcyB0aGF0IG1vZHVsZSBhdXRvbWF0aWNhbGx5LiBUaGlzIGFjdGlvbiBpcyBwZXJmb3JtZWQgYXMKKyAgICAgICAgICAgICAgICAgb25jZSBzb29uIGFzIHRoZSAndzk5NjhjZicgbW9kdWxlIGlzIGxvYWRlZCBpbnRvIG1lbW9yeS4KK0RlZmF1bHQ6ICAgICAgICAgMQorTm90ZTogICAgICAgICAgICBUaGUga2VybmVsIG11c3QgYmUgY29tcGlsZWQgd2l0aCB0aGUgQ09ORklHX0tNT0Qgb3B0aW9uCisgICAgICAgICAgICAgICAgIGVuYWJsZWQgZm9yIHRoZSAnb3ZjYW1jaGlwJyBtb2R1bGUgdG8gYmUgbG9hZGVkIGFuZCBmb3IKKyAgICAgICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgdG8gYmUgcHJlc2VudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICB2cHBtb2RfbG9hZAorVHlwZTogICAgICAgICAgIGJvb2wKK1N5bnRheDogICAgICAgICA8MHwxPgorRGVzY3JpcHRpb246ICAgIEF1dG9tYXRpYyAndzk5NjhjZi12cHAnIG1vZHVsZSBsb2FkaW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgSWYgZW5hYmxlZCwgZXZlcnkgdGltZSBhbiBhcHBsaWNhdGlvbiBhdHRlbXB0cyB0byBvcGVuIGEKKyAgICAgICAgICAgICAgICBjYW1lcmEsICdpbnNtb2QnIHNlYXJjaGVzIGZvciB0aGUgdmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZQorICAgICAgICAgICAgICAgIGluIHRoZSBzeXN0ZW0gYW5kIGxvYWRzIGl0IGF1dG9tYXRpY2FsbHkgKGlmIHByZXNlbnQpLgorICAgICAgICAgICAgICAgIFRoZSBvcHRpb25hbCAndzk5NjhjZi12cHAnIG1vZHVsZSBhZGRzIGV4dHJhIGltYWdlIG1hbmlwdWxhdGlvbgorICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllcyB0byB0aGUgJ3c5OTY4Y2YnIG1vZHVsZSxsaWtlIHNvZnR3YXJlIHVwLXNjYWxpbmcsCisgICAgICAgICAgICAgICAgY29sb3VyIGNvbnZlcnNpb25zIGFuZCB2aWRlbyBkZWNvbXByZXNzaW9uIGZvciB2ZXJ5IGhpZ2ggZnJhbWUKKyAgICAgICAgICAgICAgICByYXRlcy4KK0RlZmF1bHQ6ICAgICAgICAxCitOb3RlOiAgICAgICAgICAgVGhlIGtlcm5lbCBtdXN0IGJlIGNvbXBpbGVkIHdpdGggdGhlIENPTkZJR19LTU9EIG9wdGlvbgorICAgICAgICAgICAgICAgIGVuYWJsZWQgZm9yIHRoZSAndzk5NjhjZi12cHAnIG1vZHVsZSB0byBiZSBsb2FkZWQgYW5kIGZvcgorICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIHRvIGJlIHByZXNlbnQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgc2ltY2FtcyAKK1R5cGU6ICAgICAgICAgICBpbnQgCitTeW50YXg6ICAgICAgICAgPG4+IAorRGVzY3JpcHRpb246ICAgIE51bWJlciBvZiBjYW1lcmFzIGFsbG93ZWQgdG8gc3RyZWFtIHNpbXVsdGFuZW91c2x5LgorICAgICAgICAgICAgICAgIG4gbWF5IHZhcnkgZnJvbSAwIHRvIDMyLgorRGVmYXVsdDogICAgICAgIDMyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgdmlkZW9fbnIKK1R5cGU6ICAgICAgICAgICBpbnQgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwtMXxuWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBTcGVjaWZ5IFY0TCBtaW5vciBtb2RlIG51bWJlci4KKyAgICAgICAgICAgICAgICAtMSA9IHVzZSBuZXh0IGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICBuID0gdXNlIG1pbm9yIG51bWJlciBuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IHVwIHRvIDMyIGNhbWVyYXMgdGhpcyB3YXkuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgdmlkZW9fbnI9LTEsMiwtMSB3b3VsZCBhc3NpZ24gbWlub3IgbnVtYmVyIDIgdG8gdGhlIHNlY29uZAorICAgICAgICAgICAgICAgIHJlY29nbml6ZWQgY2FtZXJhIGFuZCB1c2UgYXV0byBmb3IgdGhlIGZpcnN0IG9uZSBhbmQgZm9yIGV2ZXJ5CisgICAgICAgICAgICAgICAgb3RoZXIgY2FtZXJhLgorRGVmYXVsdDogICAgICAgIC0xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgcGFja2V0X3NpemUKK1R5cGU6ICAgICAgICAgICBpbnQgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDxuWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBTcGVjaWZ5IHRoZSBtYXhpbXVtIGRhdGEgcGF5bG9hZCBzaXplIGluIGJ5dGVzIGZvciBhbHRlcm5hdGUKKyAgICAgICAgICAgICAgICBzZXR0aW5ncywgZm9yIGVhY2ggZGV2aWNlLiBuIGlzIHNjYWxlZCBiZXR3ZWVuIDYzIGFuZCAxMDIzLgorRGVmYXVsdDogICAgICAgIDEwMjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBtYXhfYnVmZmVycworVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+CitEZXNjcmlwdGlvbjogICAgRm9yIGFkdmFuY2VkIHVzZXJzLgorICAgICAgICAgICAgICAgIFNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZpZGVvIGZyYW1lIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKKyAgICAgICAgICAgICAgICBmb3IgZWFjaCBkZXZpY2UsIGZyb20gMiB0byAzMi4KK0RlZmF1bHQ6ICAgICAgICAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgZG91YmxlX2J1ZmZlcgorVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorRGVzY3JpcHRpb246ICAgIEhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICBJdCBzaG91bGQgYmUgZW5hYmxlZCBpZiB5b3Ugd2FudCBzbW9vdGggdmlkZW8gb3V0cHV0OiBpZiB5b3UKKyAgICAgICAgICAgICAgICBvYnRhaW4gb3V0IG9mIHN5bmMuIHZpZGVvLCBkaXNhYmxlIGl0LCBvciB0cnkgdG8KKyAgICAgICAgICAgICAgICBkZWNyZWFzZSB0aGUgJ2Nsb2NrZGl2JyBtb2R1bGUgcGFyYW1ldGVyIHZhbHVlLgorRGVmYXVsdDogICAgICAgIDEgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBjbGFtcGluZworVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorRGVzY3JpcHRpb246ICAgIFZpZGVvIGRhdGEgY2xhbXBpbmc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4KK0RlZmF1bHQ6ICAgICAgICAwIGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgZmlsdGVyX3R5cGUKK1R5cGU6ICAgICAgICAgICBpbnQgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDF8MlssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgVmlkZW8gZmlsdGVyIHR5cGUuCisgICAgICAgICAgICAgICAgMCBub25lLCAxICgxLTItMSkgMy10YXAgZmlsdGVyLCAyICgyLTMtNi0zLTIpIDUtdGFwIGZpbHRlci4KKyAgICAgICAgICAgICAgICBUaGUgZmlsdGVyIGlzIHVzZWQgdG8gcmVkdWNlIG5vaXNlIGFuZCBhbGlhc2luZyBhcnRpZmFjdHMKKyAgICAgICAgICAgICAgICBwcm9kdWNlZCBieSB0aGUgQ0NEIG9yIENNT1MgaW1hZ2Ugc2Vuc29yLgorRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBsYXJnZXZpZXcKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBMYXJnZSB2aWV3OiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuCitEZWZhdWx0OiAgICAgICAgMSBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIHVwc2NhbGluZworVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorRGVzY3JpcHRpb246ICAgIFNvZnR3YXJlIHNjYWxpbmcgKGZvciBub24tY29tcHJlc3NlZCB2aWRlbyBvbmx5KToKKyAgICAgICAgICAgICAgICAwIGRpc2FibGVkLCAxIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgRGlzYWJsZSBpdCBpZiB5b3UgaGF2ZSBhIHNsb3cgQ1BVIG9yIHlvdSBkb24ndCBoYXZlIGVub3VnaAorICAgICAgICAgICAgICAgIG1lbW9yeS4KK0RlZmF1bHQ6ICAgICAgICAwIGZvciBldmVyeSBkZXZpY2UuCitOb3RlOiAgICAgICAgICAgSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvIDAuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgZGVjb21wcmVzc2lvbgorVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MXwyWywuLi5dPgorRGVzY3JpcHRpb246ICAgIFNvZnR3YXJlIHZpZGVvIGRlY29tcHJlc3Npb246CisgICAgICAgICAgICAgICAgMCA9IGRpc2FibGVzIGRlY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgKGRvZXNuJ3QgYWxsb3cgZm9ybWF0cyBuZWVkaW5nIGRlY29tcHJlc3Npb24pLgorICAgICAgICAgICAgICAgIDEgPSBmb3JjZXMgZGVjb21wcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICAoYWxsb3dzIGZvcm1hdHMgbmVlZGluZyBkZWNvbXByZXNzaW9uIG9ubHkpLgorICAgICAgICAgICAgICAgIDIgPSBhbGxvd3MgYW55IHBlcm1pdHRlZCBmb3JtYXRzLgorICAgICAgICAgICAgICAgIEZvcm1hdHMgc3VwcG9ydGluZyAoZGUpY29tcHJlc3NlZCB2aWRlbyBhcmUgWVVWNDIyUCBhbmQKKyAgICAgICAgICAgICAgICBZVVY0MjBQL1lVVjQyMCBpbiBhbnkgcmVzb2x1dGlvbnMgd2hlcmUgd2lkdGggYW5kIGhlaWdodCBhcmUKKyAgICAgICAgICAgICAgICBtdWx0aXBsZXMgb2YgMTYuCitEZWZhdWx0OiAgICAgICAgMiBmb3IgZXZlcnkgZGV2aWNlLgorTm90ZTogICAgICAgICAgIElmICd3OTk2OGNmLXZwcCcgaXMgbm90IHByZXNlbnQsIGZvcmNpbmcgZGVjb21wcmVzc2lvbiBpcyBub3QKKyAgICAgICAgICAgICAgICBhbGxvd2VkOyBpbiB0aGlzIGNhc2UgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvIDIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgZm9yY2VfcGFsZXR0ZQorVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8OXwxMHwxM3wxNXw4fDd8MXw2fDN8NHw1WywuLi5dPgorRGVzY3JpcHRpb246ICAgIEZvcmNlIHBpY3R1cmUgcGFsZXR0ZS4KKyAgICAgICAgICAgICAgICBJbiBvcmRlcjoKKyAgICAgICAgICAgICAgICAgMCA9IE9mZiAtIGFsbG93cyBhbnkgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzOgorICAgICAgICAgICAgICAgICA5ID0gVVlWWSAgICAxNiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZGlzYWJsZWQKKyAgICAgICAgICAgICAgICAxMCA9IFlVVjQyMCAgMTIgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAxMyA9IFlVVjQyMlAgMTYgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAxNSA9IFlVVjQyMFAgMTIgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgOCA9IFlVVlkgICAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkKKyAgICAgICAgICAgICAgICAgNyA9IFlVVjQyMiAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkKKyAgICAgICAgICAgICAgICAgMSA9IEdSRVkgICAgIDggYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkKKyAgICAgICAgICAgICAgICAgNiA9IFJHQjU1NSAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkKKyAgICAgICAgICAgICAgICAgMyA9IFJHQjU2NSAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkKKyAgICAgICAgICAgICAgICAgNCA9IFJHQjI0ICAgMjQgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkKKyAgICAgICAgICAgICAgICAgNSA9IFJHQjMyICAgMzIgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkKKyAgICAgICAgICAgICAgICBXaGVuIG5vdCAwLCB0aGlzIHBhcmFtZXRlciB3aWxsIG92ZXJyaWRlICdkZWNvbXByZXNzaW9uJy4KK0RlZmF1bHQ6ICAgICAgICAwIGZvciBldmVyeSBkZXZpY2UuIEluaXRpYWwgcGFsZXR0ZSBpcyA5IChVWVZZKS4KK05vdGU6ICAgICAgICAgICBJZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gOS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBmb3JjZV9yZ2IKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgorRGVzY3JpcHRpb246ICAgIFJlYWQgUkdCIHZpZGVvIGRhdGEgaW5zdGVhZCBvZiBCR1I6CisgICAgICAgICAgICAgICAgMSA9IHVzZSBSR0IgY29tcG9uZW50IG9yZGVyaW5nLgorICAgICAgICAgICAgICAgIDAgPSB1c2UgQkdSIGNvbXBvbmVudCBvcmRlcmluZy4KKyAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBoYXMgZWZmZWN0IHdoZW4gdXNpbmcgUkdCWCBwYWxldHRlcyBvbmx5LgorRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBhdXRvYnJpZ2h0CitUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KK0Rlc2NyaXB0aW9uOiAgICBJbWFnZSBzZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGJyaWdodG5lc3M6CisgICAgICAgICAgICAgICAgMCA9IG5vLCAxID0geWVzCitEZWZhdWx0OiAgICAgICAgMCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGF1dG9leHAKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgorRGVzY3JpcHRpb246ICAgIEltYWdlIHNlbnNvciBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgZXhwb3N1cmU6CisgICAgICAgICAgICAgICAgMCA9IG5vLCAxID0geWVzCitEZWZhdWx0OiAgICAgICAgMSBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGxpZ2h0ZnJlcQorVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDUwfDYwWywuLi5dPgorRGVzY3JpcHRpb246ICAgIExpZ2h0IGZyZXF1ZW5jeSBpbiBIejoKKyAgICAgICAgICAgICAgICA1MCBmb3IgRXVyb3BlYW4gYW5kIEFzaWFuIGxpZ2h0aW5nLCA2MCBmb3IgQW1lcmljYW4gbGlnaHRpbmcuCitEZWZhdWx0OiAgICAgICAgNTAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBiYW5kaW5nZmlsdGVyCitUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgQmFuZGluZyBmaWx0ZXIgdG8gcmVkdWNlIGVmZmVjdHMgb2YgZmx1b3Jlc2NlbnQgCisgICAgICAgICAgICAgICAgbGlnaHRpbmc6CisgICAgICAgICAgICAgICAgMCBkaXNhYmxlZCwgMSBlbmFibGVkLgorICAgICAgICAgICAgICAgIFRoaXMgZmlsdGVyIHRyaWVzIHRvIHJlZHVjZSB0aGUgcGF0dGVybiBvZiBob3Jpem9udGFsCisgICAgICAgICAgICAgICAgbGlnaHQvZGFyayBiYW5kcyBjYXVzZWQgYnkgc29tZSAodXN1YWxseSBmbHVvcmVzY2VudCkgbGlnaHRpbmcuCitEZWZhdWx0OiAgICAgICAgMCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGNsb2NrZGl2CitUeXBlOiAgICAgICAgICAgaW50IGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8LTF8blssLi4uXT4KK0Rlc2NyaXB0aW9uOiAgICBGb3JjZSBwaXhlbCBjbG9jayBkaXZpc29yIHRvIGEgc3BlY2lmaWMgdmFsdWUgKGZvciBleHBlcnRzKToKKyAgICAgICAgICAgICAgICBuIG1heSB2YXJ5IGZyb20gMCB0byAxMjcuCisgICAgICAgICAgICAgICAgLTEgZm9yIGF1dG9tYXRpYyB2YWx1ZS4KKyAgICAgICAgICAgICAgICBTZWUgYWxzbyB0aGUgJ2RvdWJsZV9idWZmZXInIG1vZHVsZSBwYXJhbWV0ZXIuCitEZWZhdWx0OiAgICAgICAgLTEgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBiYWNrbGlnaHQKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgorRGVzY3JpcHRpb246ICAgIE9iamVjdHMgYXJlIGxpdCBmcm9tIGJlaGluZDoKKyAgICAgICAgICAgICAgICAwID0gbm8sIDEgPSB5ZXMKK0RlZmF1bHQ6ICAgICAgICAwIGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgbWlycm9yCitUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4KK0Rlc2NyaXB0aW9uOiAgICBSZXZlcnNlIGltYWdlIGhvcml6b250YWxseToKKyAgICAgICAgICAgICAgICAwID0gbm8sIDEgPSB5ZXMKK0RlZmF1bHQ6ICAgICAgICAwIGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgbW9ub2Nocm9tZQorVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorRGVzY3JpcHRpb246ICAgIFRoZSBpbWFnZSBzZW5zb3IgaXMgbW9ub2Nocm9tZToKKyAgICAgICAgICAgICAgICAwID0gbm8sIDEgPSB5ZXMKK0RlZmF1bHQ6ICAgICAgICAwIGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgYnJpZ2h0bmVzcworVHlwZTogICAgICAgICAgIGxvbmcgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDxuWywuLi5dPgorRGVzY3JpcHRpb246ICAgIFNldCBwaWN0dXJlIGJyaWdodG5lc3MgKDAtNjU1MzUpLgorICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYgJ2F1dG9icmlnaHQnIGlzIGVuYWJsZWQuCitEZWZhdWx0OiAgICAgICAgMzEwMDAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBodWUKK1R5cGU6ICAgICAgICAgICBsb25nIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8blssLi4uXT4KK0Rlc2NyaXB0aW9uOiAgICBTZXQgcGljdHVyZSBodWUgKDAtNjU1MzUpLgorRGVmYXVsdDogICAgICAgIDMyNzY4IGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgY29sb3VyCitUeXBlOiAgICAgICAgICAgbG9uZyBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+CitEZXNjcmlwdGlvbjogICAgU2V0IHBpY3R1cmUgc2F0dXJhdGlvbiAoMC02NTUzNSkuCitEZWZhdWx0OiAgICAgICAgMzI3NjggZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBjb250cmFzdAorVHlwZTogICAgICAgICAgIGxvbmcgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDxuWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBTZXQgcGljdHVyZSBjb250cmFzdCAoMC02NTUzNSkuCitEZWZhdWx0OiAgICAgICAgNTAwMDAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICB3aGl0ZW5lc3MKK1R5cGU6ICAgICAgICAgICBsb25nIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8blssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgU2V0IHBpY3R1cmUgd2hpdGVuZXNzICgwLTY1NTM1KS4KK0RlZmF1bHQ6ICAgICAgICAzMjc2OCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGRlYnVnCitUeXBlOiAgICAgICAgICAgaW50CitTeW50YXg6ICAgICAgICAgPG4+IAorRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDY6CisgICAgICAgICAgICAgICAgMCA9IG5vbmUgKHVzZSBjYXJlZnVsbHkpCisgICAgICAgICAgICAgICAgMSA9IGNyaXRpY2FsIGVycm9ycworICAgICAgICAgICAgICAgIDIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMKKyAgICAgICAgICAgICAgICAzID0gY29uZmlndXJhdGlvbiBvciBnZW5lcmFsIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgNCA9IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgNSA9IGNhbGxlZCBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICA2ID0gZnVuY3Rpb24gaW50ZXJuYWxzCisgICAgICAgICAgICAgICAgTGV2ZWwgNSBhbmQgNiBhcmUgdXNlZnVsIGZvciB0ZXN0aW5nIG9ubHksIHdoZW4gb25seSBvbmUKKyAgICAgICAgICAgICAgICBkZXZpY2UgaXMgdXNlZC4KK0RlZmF1bHQ6ICAgICAgICAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgc3BlY2lmaWNfZGVidWcKK1R5cGU6ICAgICAgICAgICBib29sCitTeW50YXg6ICAgICAgICAgPDB8MT4KK0Rlc2NyaXB0aW9uOiAgICBFbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2FnZXM6CisgICAgICAgICAgICAgICAgMCA9IHByaW50IG1lc3NhZ2VzIGNvbmNlcm5pbmcgZXZlcnkgbGV2ZWwgPD0gJ2RlYnVnJyBsZXZlbC4KKyAgICAgICAgICAgICAgICAxID0gcHJpbnQgbWVzc2FnZXMgY29uY2VybmluZyB0aGUgbGV2ZWwgaW5kaWNhdGVkIGJ5ICdkZWJ1ZycuCitEZWZhdWx0OiAgICAgICAgMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKzkuIENvbnRhY3QgaW5mb3JtYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT0KK0kgbWF5IGJlIGNvbnRhY3RlZCBieSBlLW1haWwgYXQgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+LgorCitJIGNhbiBhY2NlcHQgR1BHL1BHUCBlbmNyeXB0ZWQgZS1tYWlsLiBNeSBHUEcga2V5IElEIGlzICdGQ0U2MzVBNCcuCitNeSBwdWJsaWMgMTAyNC1iaXQga2V5IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgeW91ciBrZXlzZXJ2ZXI7IHRoZSBmaW5nZXJwcmludAoraXM6ICc4OEU4IEYzMkYgNzI0NCA2OEJBIDM5NTggIDVENDAgOTlEQSA1RDJBIEZDRTYgMzVBNCcuCisKKworMTAuIENyZWRpdHMKKz09PT09PT09PT0KK1RoZSBkZXZlbG9wbWVudCB3b3VsZCBub3QgaGF2ZSBwcm9jZWVkIG11Y2ggZnVydGhlciB3aXRob3V0IGhhdmluZyBsb29rZWQgYXQKK3RoZSBzb3VyY2UgY29kZSBvZiBvdGhlciBkcml2ZXJzIGFuZCB3aXRob3V0IHRoZSBoZWxwIG9mIHNldmVyYWwgcGVyc29uczsgaW4KK3BhcnRpY3VsYXI6CisKKy0gdGhlIEkyQyBpbnRlcmZhY2UgdG8ga2VybmVsIGFuZCBoaWdoLWxldmVsIGltYWdlIHNlbnNvciBjb250cm9sIHJvdXRpbmVzIGhhdmUKKyAgYmVlbiB0YWtlbiBmcm9tIHRoZSBPVjUxMSBkcml2ZXIgYnkgTWFyayBNY0NsZWxsYW5kOworCistIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaGFzIGJlZW4gY29waWVkIGZyb20gdGhlIGJ0dHYgZHJpdmVyIGJ5IFJhbHBoIE1ldHpsZXIsCisgIE1hcmN1cyBNZXR6bGVyIGFuZCBHZXJkIEtub3JyOworCistIHRoZSBsb3ctbGV2ZWwgSTJDIHJlYWQgZnVuY3Rpb24gaGFzIGJlZW4gd3JpdHRlbiBieSBGcmVkZXJpYyBKb3VhdWx0OworCistIHRoZSBsb3ctbGV2ZWwgSTJDIGZhc3Qgd3JpdGUgZnVuY3Rpb24gaGFzIGJlZW4gd3JpdHRlbiBieSBQaW90ciBDemVyY3phay4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2Q4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCkBAIC0wLDAgKzEsMzk5IEBACis8SFRNTD48SEVBRD4KKzxUSVRMRT5WaWRlbzRMaW51eCBLZXJuZWwgQVBJIFJlZmVyZW5jZSB2MC4xOjE5OTkwNDMwPC9USVRMRT4KKzwvSEVBRD4KKzwhIFJldmlzaW9uIEhpc3Rvcnk6ID4KKzwhICAgNC8zMC8xOTk5IC0gRnJlZCBHbGVhc29uIChmcmVkZ0B3YXZhLmNvbSk+Cis8ISBEb2N1bWVudGVkIGV4dGVuc2lvbnMgZm9yIHRoZSBSYWRpbyBEYXRhIFN5c3RlbSAoUkRTKSBleHRlbnNpb25zID4KKzxCT0RZIGJnY29sb3I9IiNmZmZmZmYiPgorPEgzPkRldmljZXM8L0gzPgorVmlkZW80TGludXggcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBzZXRzIG9mIGRldmljZSBmaWxlcy4gVGhlc2UgbGl2ZSBvbiB0aGUKK2NoYXJhY3RlciBkZXZpY2UgZm9ybWVybHkga25vd24gYXMgIi9kZXYvYnR0diIuIC9kZXYvYnR0diBzaG91bGQgYmUgYQorc3ltbGluayB0byAvZGV2L3ZpZGVvMCBmb3IgbW9zdCBwZW9wbGUuIAorPFA+Cis8VEFCTEU+Cis8VFI+PFRIPkRldmljZSBOYW1lPC9USD48VEg+TWlub3IgUmFuZ2U8L1RIPjxUSD5GdW5jdGlvbjwvVEg+Cis8VFI+PFREPi9kZXYvdmlkZW88L1REPjxURD4wLTYzPC9URD48VEQ+VmlkZW8gQ2FwdHVyZSBJbnRlcmZhY2U8L1REPgorPFRSPjxURD4vZGV2L3JhZGlvPC9URD48VEQ+NjQtMTI3PC9URD48VEQ+QU0vRk0gUmFkaW8gRGV2aWNlczwvVEQ+Cis8VFI+PFREPi9kZXYvdnR4PC9URD48VEQ+MTkyLTIyMzwvVEQ+PFREPlRlbGV0ZXh0IEludGVyZmFjZSBDaGlwczwvVEQ+Cis8VFI+PFREPi9kZXYvdmJpPC9URD48VEQ+MjI0LTIzOTwvVEQ+PFREPlJhdyBWQkkgRGF0YSAoSW50ZXJjYXN0L3RlbGV0ZXh0KTwvVEQ+Cis8L1RBQkxFPgorPFA+CitWaWRlbzRMaW51eCBwcm9ncmFtcyBvcGVuIGFuZCBzY2FuIHRoZSBkZXZpY2VzIHRvIGZpbmQgd2hhdCB0aGV5IGFyZSBsb29raW5nCitmb3IuIENhcGFiaWxpdHkgcXVlcmllcyBkZWZpbmUgd2hhdCBlYWNoIGludGVyZmFjZSBzdXBwb3J0cy4gVGhlIAorZGVzY3JpYmVkIEFQSSBpcyBvbmx5IGRlZmluZWQgZm9yIHZpZGVvIGNhcHR1cmUgY2FyZHMuIFRoZSByZWxldmFudCBzdWJzZXQKK2FwcGxpZXMgdG8gcmFkaW8gY2FyZHMuIFRlbGV0ZXh0IGludGVyZmFjZXMgdGFsayB0aGUgZXhpc3RpbmcgVlRYIEFQSS4KKzxQPgorPEgzPkNhcGFiaWxpdHkgUXVlcnkgSW9jdGw8L0gzPgorVGhlIDxCPlZJRElPQ0dDQVA8L0I+IGlvY3RsIGNhbGwgaXMgdXNlZCB0byBvYnRhaW4gdGhlIGNhcGFiaWxpdHkKK2luZm9ybWF0aW9uIGZvciBhIHZpZGVvIGRldmljZS4gVGhlIDxiPnN0cnVjdCB2aWRlb19jYXBhYmlsaXR5PC9iPiBvYmplY3QKK3Bhc3NlZCB0byB0aGUgaW9jdGwgaXMgY29tcGxldGVkIGFuZCByZXR1cm5lZC4gSXQgY29udGFpbnMgdGhlIGZvbGxvd2luZworaW5mb3JtYXRpb24KKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5uYW1lWzMyXTwvYj48VEQ+Q2Fub25pY2FsIG5hbWUgZm9yIHRoaXMgaW50ZXJmYWNlPC9URD4KKzxUUj48VEQ+PGI+dHlwZTwvYj48VEQ+VHlwZSBvZiBpbnRlcmZhY2U8L1REPgorPFRSPjxURD48Yj5jaGFubmVsczwvYj48VEQ+TnVtYmVyIG9mIHJhZGlvL3R2IGNoYW5uZWxzIGlmIGFwcHJvcHJpYXRlPC9URD4KKzxUUj48VEQ+PGI+YXVkaW9zPC9iPjxURD5OdW1iZXIgb2YgYXVkaW8gZGV2aWNlcyBpZiBhcHByb3ByaWF0ZTwvVEQ+Cis8VFI+PFREPjxiPm1heHdpZHRoPC9iPjxURD5NYXhpbXVtIGNhcHR1cmUgd2lkdGggaW4gcGl4ZWxzPC9URD4KKzxUUj48VEQ+PGI+bWF4aGVpZ2h0PC9iPjxURD5NYXhpbXVtIGNhcHR1cmUgaGVpZ2h0IGluIHBpeGVsczwvVEQ+Cis8VFI+PFREPjxiPm1pbndpZHRoPC9iPjxURD5NaW5pbXVtIGNhcHR1cmUgd2lkdGggaW4gcGl4ZWxzPC9URD4KKzxUUj48VEQ+PGI+bWluaGVpZ2h0PC9iPjxURD5NaW5pbXVtIGNhcHR1cmUgaGVpZ2h0IGluIHBpeGVsczwvVEQ+Cis8L1RBQkxFPgorPFA+CitUaGUgdHlwZSBmaWVsZCBsaXN0cyB0aGUgY2FwYWJpbGl0eSBmbGFncyBmb3IgdGhlIGRldmljZS4gVGhlc2UgYXJlCithcyBmb2xsb3dzCis8UD4KKzxUQUJMRT4KKzxUUj48VEg+TmFtZTwvVEg+PFRIPkRlc2NyaXB0aW9uPC9USD4KKzxUUj48VEQ+PGI+VklEX1RZUEVfQ0FQVFVSRTwvYj48VEQ+Q2FuIGNhcHR1cmUgdG8gbWVtb3J5PC9URD4KKzxUUj48VEQ+PGI+VklEX1RZUEVfVFVORVI8L2I+PFREPkhhcyBhIHR1bmVyIG9mIHNvbWUgZm9ybTwvVEQ+Cis8VFI+PFREPjxiPlZJRF9UWVBFX1RFTEVURVhUPC9iPjxURD5IYXMgdGVsZXRleHQgY2FwYWJpbGl0eTwvVEQ+Cis8VFI+PFREPjxiPlZJRF9UWVBFX09WRVJMQVk8L2I+PFREPkNhbiBvdmVybGF5IGl0cyBpbWFnZSBvbnRvIHRoZSBmcmFtZSBidWZmZXI8L1REPgorPFRSPjxURD48Yj5WSURfVFlQRV9DSFJPTUFLRVk8L2I+PFREPk92ZXJsYXkgaXMgQ2hyb21ha2V5ZWQ8L1REPgorPFRSPjxURD48Yj5WSURfVFlQRV9DTElQUElORzwvYj48VEQ+T3ZlcmxheSBjbGlwcGluZyBpcyBzdXBwb3J0ZWQ8L1REPgorPFRSPjxURD48Yj5WSURfVFlQRV9GUkFNRVJBTTwvYj48VEQ+T3ZlcmxheSBvdmVyd3JpdGVzIGZyYW1lIGJ1ZmZlciBtZW1vcnk8L1REPgorPFRSPjxURD48Yj5WSURfVFlQRV9TQ0FMRVM8L2I+PFREPlRoZSBoYXJkd2FyZSBzdXBwb3J0cyBpbWFnZSBzY2FsaW5nPC9URD4KKzxUUj48VEQ+PGI+VklEX1RZUEVfTU9OT0NIUk9NRTwvYj48VEQ+SW1hZ2UgY2FwdHVyZSBpcyBncmV5IHNjYWxlIG9ubHk8L1REPgorPFRSPjxURD48Yj5WSURfVFlQRV9TVUJDQVBUVVJFPC9iPjxURD5DYXB0dXJlIGNhbiBiZSBvZiBvbmx5IHBhcnQgb2YgdGhlIGltYWdlPC9URD4KKzwvVEFCTEU+Cis8UD4KK1RoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemVzIGxpc3RlZCBmb3IgYSBjYXB0dXJlIGRldmljZSBkbyBub3QgaW1wbHkgYWxsCit0aGF0IGFsbCBoZWlnaHQvd2lkdGggcmF0aW9zIG9yIHNpemVzIHdpdGhpbiB0aGUgcmFuZ2UgYXJlIHBvc3NpYmxlLiBBCityZXF1ZXN0IHRvIHNldCBhIHNpemUgd2lsbCBiZSBob25vdXJlZCBieSB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgY2FwdHVyZQorc2l6ZSB3aG9zZSBjYXB0dXJlIGlzIG5vIGxhcmdlIHRoYW4gdGhlIHJlcXVlc3RlZCByZWN0YW5nbGUgaW4gZWl0aGVyCitkaXJlY3Rpb24uIEZvciBleGFtcGxlIHRoZSBxdWlja2NhbSBoYXMgMyBmaXhlZCBzZXR0aW5ncy4gCis8UD4KKzxIMz5GcmFtZSBCdWZmZXI8L0gzPgorQ2FwdHVyZSBjYXJkcyB0aGF0IGRyb3AgZGF0YSBkaXJlY3RseSBvbnRvIHRoZSBmcmFtZSBidWZmZXIgbXVzdCBiZSB0b2xkIHRoZQorYmFzZSBhZGRyZXNzIG9mIHRoZSBmcmFtZSBidWZmZXIsIGl0cyBzaXplIGFuZCBvcmdhbmlzYXRpb24uIFRoaXMgaXMgYSAKK3ByaXZpbGVnZWQgaW9jdGwgYW5kIG9uZSB0aGF0IGV2ZW50dWFsbHkgWCBpdHNlbGYgc2hvdWxkIHNldC4KKzxQPgorVGhlIDxiPlZJRElPQ1NGQlVGPC9iPiBpb2N0bCBzZXRzIHRoZSBmcmFtZSBidWZmZXIgcGFyYW1ldGVycyBmb3IgYSBjYXB0dXJlCitjYXJkLiBJZiB0aGUgY2FyZCBkb2VzIG5vdCBkbyBkaXJlY3Qgd3JpdGVzIHRvIHRoZSBmcmFtZSBidWZmZXIgdGhlbiB0aGlzCitpb2N0bCB3aWxsIGJlIHVuc3VwcG9ydGVkLiBUaGUgPGI+VklESU9DR0ZCVUY8L2I+IGlvY3RsIHJldHVybnMgdGhlCitjdXJyZW50bHkgdXNlZCBwYXJhbWV0ZXJzLiBUaGUgc3RydWN0dXJlIHVzZWQgaW4gYm90aCBjYXNlcyBpcyBhIAorPGI+c3RydWN0IHZpZGVvX2J1ZmZlcjwvYj4uCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+dm9pZCAqYmFzZTwvYj48L1REPjxURD5CYXNlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcjwvVEQ+Cis8VFI+PFREPjxiPmludCBoZWlnaHQ8L2I+PC9URD48VEQ+SGVpZ2h0IG9mIHRoZSBmcmFtZSBidWZmZXI8L1REPgorPFRSPjxURD48Yj5pbnQgd2lkdGg8L2I+PC9URD48VEQ+V2lkdGggb2YgdGhlIGZyYW1lIGJ1ZmZlcjwvVEQ+Cis8VFI+PFREPjxiPmludCBkZXB0aDwvYj48L1REPjxURD5EZXB0aCBvZiB0aGUgZnJhbWUgYnVmZmVyPC9URD4KKzxUUj48VEQ+PGI+aW50IGJ5dGVzcGVybGluZTwvYj48L1REPjxURD5OdW1iZXIgb2YgYnl0ZXMgb2YgbWVtb3J5IGJldHdlZW4gdGhlIHN0YXJ0IG9mIHR3byBhZGphY2VudCBsaW5lczwvVEQ+Cis8L1RBQkxFPgorPFA+CitOb3RlIHRoYXQgdGhlc2UgdmFsdWVzIHJlZmxlY3QgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZnJhbWUgYnVmZmVyLiAKK1RoZSB2aXNpYmxlIGFyZWEgbWF5IGJlIHNtYWxsZXIuIEluIGZhY3QgdW5kZXIgWEZyZWU4NiB0aGlzIGlzIGNvbW1vbmx5IHRoZQorY2FzZS4gWEZyZWU4NiBER0EgY2FuIHByb3ZpZGUgdGhlIHBhcmFtZXRlcnMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoaXMgaW9jdGwuCitTZXR0aW5nIHRoZSBiYXNlIGFkZHJlc3MgdG8gTlVMTCBpbmRpY2F0ZXMgdGhlcmUgaXMgbm8gcGh5c2ljYWwgZnJhbWUgYnVmZmVyCithY2Nlc3MuCis8UD4KKzxIMz5DYXB0dXJlIFdpbmRvd3M8L0gzPgorVGhlIGNhcHR1cmUgYXJlYSBpcyBkZXNjcmliZWQgYnkgYSA8Yj5zdHJ1Y3QgdmlkZW9fd2luZG93PC9iPi4gVGhpcyBkZWZpbmVzCithIGNhcHR1cmUgYXJlYSBhbmQgdGhlIGNsaXBwaW5nIGluZm9ybWF0aW9uIGlmIHJlbGV2YW50LiBUaGUgCis8Yj5WSURJT0NHV0lOPC9iPiBpb2N0bCByZWNvdmVycyB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgdGhlIAorPGI+VklESU9DU1dJTjwvYj4gc2V0cyBuZXcgdmFsdWVzLiBBIHN1Y2Nlc3NmdWwgY2FsbCB0byA8Yj5WSURJT0NTV0lOPC9iPiAKK2luZGljYXRlcyB0aGF0IGEgc3VpdGFibGUgc2V0IG9mIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIGNob3Nlbi4gVGhleSBkbyBub3QKK2luZGljYXRlIHRoYXQgZXhhY3RseSB3aGF0IHdhcyByZXF1ZXN0ZWQgd2FzIGdyYW50ZWQuIFRoZSBwcm9ncmFtIHNob3VsZAorY2FsbCA8Yj5WSURJT0NHV0lOPC9iPiB0byBjaGVjayBpZiB0aGUgbmVhcmVzdCBtYXRjaCB3YXMgc3VpdGFibGUuIFRoZQorPGI+c3RydWN0IHZpZGVvX3dpbmRvdzwvYj4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZHMuCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+eDwvYj48VEQ+VGhlIFggY28tb3JkaW5hdGUgc3BlY2lmaWVkIGluIFggd2luZG93cyBmb3JtYXQuPC9URD4KKzxUUj48VEQ+PGI+eTwvYj48VEQ+VGhlIFkgY28tb3JkaW5hdGUgc3BlY2lmaWVkIGluIFggd2luZG93cyBmb3JtYXQuPC9URD4KKzxUUj48VEQ+PGI+d2lkdGg8L2I+PFREPlRoZSB3aWR0aCBvZiB0aGUgaW1hZ2UgY2FwdHVyZS48L1REPgorPFRSPjxURD48Yj5oZWlnaHQ8L2I+PFREPlRoZSBoZWlnaHQgb2YgdGhlIGltYWdlIGNhcHR1cmUuPC9URD4KKzxUUj48VEQ+PGI+Y2hyb21ha2V5PC9iPjxURD5BIGhvc3Qgb3JkZXIgUkdCMzIgdmFsdWUgZm9yIHRoZSBjaHJvbWEga2V5LjwvVEQ+Cis8VFI+PFREPjxiPmZsYWdzPC9iPjxURD5BZGRpdGlvbmFsIGNhcHR1cmUgZmxhZ3MuPC9URD4KKzxUUj48VEQ+PGI+Y2xpcHM8L2I+PFREPkEgbGlzdCBvZiBjbGlwcGluZyByZWN0YW5nbGVzLiA8ZW0+KFNldCBvbmx5KTwvZW0+PC9URD4KKzxUUj48VEQ+PGI+Y2xpcGNvdW50PC9iPjxURD5UaGUgbnVtYmVyIG9mIGNsaXBwaW5nIHJlY3RhbmdsZXMuIDxlbT4oU2V0IG9ubHkpPC9lbT48L1REPgorPC9UQUJMRT4KKzxQPgorQ2xpcHBpbmcgcmVjdGFuZ2xlcyBhcmUgcGFzc2VkIGFzIGFuIGFycmF5LiBFYWNoIGNsaXAgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZworZmllbGRzIGF2YWlsYWJsZSB0byB0aGUgdXNlci4KKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj54PC9iPjwvVEQ+PFREPlggY28tb3JkaW5hdGUgb2YgcmVjdGFuZ2xlIHRvIHNraXA8L1REPgorPFRSPjxURD48Yj55PC9iPjwvVEQ+PFREPlkgY28tb3JkaW5hdGUgb2YgcmVjdGFuZ2xlIHRvIHNraXA8L1REPgorPFRSPjxURD48Yj53aWR0aDwvYj48L1REPjxURD5XaWR0aCBvZiByZWN0YW5nbGUgdG8gc2tpcDwvVEQ+Cis8VFI+PFREPjxiPmhlaWdodDwvYj48L1REPjxURD5IZWlnaHQgb2YgcmVjdGFuZ2xlIHRvIHNraXA8L1REPgorPC9UQUJMRT4KKzxQPgorTWVyZWx5IHNldHRpbmcgdGhlIHdpbmRvdyBkb2VzIG5vdCBlbmFibGUgY2FwdHVyaW5nLiBPdmVybGF5IGNhcHR1cmluZworKGkuZS4gUENJLVBDSSB0cmFuc2ZlciB0byB0aGUgZnJhbWUgYnVmZmVyIG9mIHRoZSB2aWRlbyBjYXJkKQoraXMgYWN0aXZhdGVkIGJ5IHBhc3NpbmcgdGhlIDxiPlZJRElPQ0NBUFRVUkU8L2I+IGlvY3RsIGEgdmFsdWUgb2YgMSwgYW5kCitkaXNhYmxlZCBieSBwYXNzaW5nIGl0IGEgdmFsdWUgb2YgMC4gCis8UD4KK1NvbWUgY2FwdHVyZSBkZXZpY2VzIGNhbiBjYXB0dXJlIGEgc3ViZmllbGQgb2YgdGhlIGltYWdlIHRoZXkgYWN0dWFsbHkgc2VlLgorVGhpcyBpcyBpbmRpY2F0ZWQgd2hlbiBWSURFT19UWVBFX1NVQkNBUFRVUkUgaXMgZGVmaW5lZC4KK1RoZSB2aWRlb19jYXB0dXJlIGRlc2NyaWJlcyB0aGUgdGltZSBhbmQgc3BlY2lhbCBzdWJmaWVsZHMgdG8gY2FwdHVyZS4KK1RoZSB2aWRlb19jYXB0dXJlIHN0cnVjdHVyZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkcy4KKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj54PC9iPjwvVEQ+PFREPlggY28tb3JkaW5hdGUgb2Ygc291cmNlIHJlY3RhbmdsZSB0byBncmFiPC9URD4KKzxUUj48VEQ+PGI+eTwvYj48L1REPjxURD5ZIGNvLW9yZGluYXRlIG9mIHNvdXJjZSByZWN0YW5nbGUgdG8gZ3JhYjwvVEQ+Cis8VFI+PFREPjxiPndpZHRoPC9iPjwvVEQ+PFREPldpZHRoIG9mIHNvdXJjZSByZWN0YW5nbGUgdG8gZ3JhYjwvVEQ+Cis8VFI+PFREPjxiPmhlaWdodDwvYj48L1REPjxURD5IZWlnaHQgb2Ygc291cmNlIHJlY3RhbmdsZSB0byBncmFiPC9URD4KKzxUUj48VEQ+PGI+ZGVjaW1hdGlvbjwvYj48L1REPjxURD5EZWNpbWF0aW9uIHRvIGFwcGx5PC9URD4KKzxUUj48VEQ+PGI+ZmxhZ3M8L2I+PC9URD48VEQ+RmxhZyBzZXR0aW5ncyBmb3IgZ3JhYmJpbmc8L1REPgorPC9UQUJMRT4KK1RoZSBhdmFpbGFibGUgZmxhZ3MgYXJlCis8UD4KKzxUQUJMRT4KKzxUUj48VEg+TmFtZTwvVEg+PFRIPkRlc2NyaXB0aW9uPC9USD4KKzxUUj48VEQ+PGI+VklERU9fQ0FQVFVSRV9PREQ8L2I+PFREPkNhcHR1cmUgb25seSBvZGQgZnJhbWVzPC9URD4KKzxUUj48VEQ+PGI+VklERU9fQ0FQVFVSRV9FVkVOPC9iPjxURD5DYXB0dXJlIG9ubHkgZXZlbiBmcmFtZXM8L1REPgorPC9UQUJMRT4KKzxQPgorPEgzPlZpZGVvIFNvdXJjZXM8L0gzPgorRWFjaCB2aWRlbzRsaW51eCB2aWRlbyBvciBhdWRpbyBkZXZpY2UgY2FwdHVyZXMgZnJvbSBvbmUgb3IgbW9yZSAKK3NvdXJjZSA8Yj5jaGFubmVsczwvYj4uIEVhY2ggY2hhbm5lbCBjYW4gYmUgcXVlcmllcyB3aXRoIHRoZSAKKzxiPlZESU9DR0NIQU48L2I+IGlvY3RsIGNhbGwuIEJlZm9yZSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uIHRoZSBjYWxsZXIKK211c3Qgc2V0IHRoZSBjaGFubmVsIGZpZWxkIHRvIHRoZSBjaGFubmVsIHRoYXQgaXMgYmVpbmcgcXVlcmllZC4gT24gcmV0dXJuCit0aGUgPGI+c3RydWN0IHZpZGVvX2NoYW5uZWw8L2I+IGlzIGZpbGxlZCBpbiB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZQorbmF0dXJlIG9mIHRoZSBjaGFubmVsIGl0c2VsZi4KKzxQPgorVGhlIDxiPlZJRElPQ1NDSEFOPC9iPiBpb2N0bCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBzd2l0Y2hlcyB0aGUKK2NhcHR1cmUgdG8gdGhpcyBpbnB1dC4gSXQgaXMgbm90IGRlZmluZWQgd2hldGhlciBwYXJhbWV0ZXJzIHN1Y2ggYXMgY29sb3VyCitzZXR0aW5ncyBvciB0dW5pbmcgYXJlIG1haW50YWluZWQgYWNyb3NzIGEgY2hhbm5lbCBzd2l0Y2guIFRoZSBjYWxsZXIgc2hvdWxkCittYWludGFpbiBzZXR0aW5ncyBhcyBkZXNpcmVkIGZvciBlYWNoIGNoYW5uZWwuIChUaGlzIGlzIHJlYXNvbmFibGUgYXMgCitkaWZmZXJlbnQgdmlkZW8gaW5wdXRzIG1heSBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzKS4KKzxQPgorVGhlIDxiPnN0cnVjdCB2aWRlb19jaGFubmVsPC9iPiBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+Y2hhbm5lbDwvYj48L1REPjxURD5UaGUgY2hhbm5lbCBudW1iZXI8L1REPgorPFRSPjxURD48Yj5uYW1lPC9iPjwvVEQ+PFREPlRoZSBpbnB1dCBuYW1lIC0gcHJlZmVyYWJseSByZWZsZWN0aW5nIHRoZSBsYWJlbAorb24gdGhlIGNhcmQgaW5wdXQgaXRzZWxmPC9URD4KKzxUUj48VEQ+PGI+dHVuZXJzPC9iPjwvVEQ+PFREPk51bWJlciBvZiB0dW5lcnMgZm9yIHRoaXMgaW5wdXQ8L1REPgorPFRSPjxURD48Yj5mbGFnczwvYj48L1REPjxURD5Qcm9wZXJ0aWVzIHRoZSB0dW5lciBoYXM8L1REPgorPFRSPjxURD48Yj50eXBlPC9iPjwvVEQ+PFREPklucHV0IHR5cGUgKGlmIGtub3duKTwvVEQ+Cis8VFI+PFREPjxiPm5vcm08L2I+PFREPlRoZSBub3JtIGZvciB0aGlzIGNoYW5uZWw8L1REPgorPC9UQUJMRT4KKzxQPgorVGhlIGZsYWdzIGRlZmluZWQgYXJlCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+VklERU9fVkNfVFVORVI8L2I+PFREPkNoYW5uZWwgaGFzIHR1bmVycy48L1REPgorPFRSPjxURD48Yj5WSURFT19WQ19BVURJTzwvYj48VEQ+Q2hhbm5lbCBoYXMgYXVkaW8uPC9URD4KKzxUUj48VEQ+PGI+VklERU9fVkNfTk9STTwvYj48VEQ+Q2hhbm5lbCBoYXMgbm9ybSBzZXR0aW5nLjwvVEQ+Cis8L1RBQkxFPgorPFA+CitUaGUgdHlwZXMgZGVmaW5lZCBhcmUKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5WSURFT19UWVBFX1RWPC9iPjxURD5UaGUgaW5wdXQgaXMgYSBUViBpbnB1dC48L1REPgorPFRSPjxURD48Yj5WSURFT19UWVBFX0NBTUVSQTwvYj48VEQ+VGhlIGlucHV0IGlzIGEgY2FtZXJhLjwvVEQ+Cis8L1RBQkxFPgorPFA+Cis8SDM+SW1hZ2UgUHJvcGVydGllczwvSDM+CitUaGUgaW1hZ2UgcHJvcGVydGllcyBvZiB0aGUgcGljdHVyZSBjYW4gYmUgcXVlcmllZCB3aXRoIHRoZSA8Yj5WSURJT0NHUElDVDwvYj4KK2lvY3RsIHdoaWNoIGZpbGxzIGluIGEgPGI+c3RydWN0IHZpZGVvX3BpY3R1cmU8L2I+LiBUaGUgPGI+VklESU9DU1BJQ1Q8L2I+IAoraW9jdGwgYWxsb3dzIHZhbHVlcyB0byBiZSBjaGFuZ2VkLiBBbGwgdmFsdWVzIGV4Y2VwdCBmb3IgdGhlIHBhbGV0dGUgdHlwZQorYXJlIHNjYWxlZCBiZXR3ZWVuIDAtNjU1MzUuIAorPFA+CitUaGUgPGI+c3RydWN0IHZpZGVvX3BpY3R1cmU8L2I+IGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+YnJpZ2h0bmVzczwvYj48VEQ+UGljdHVyZSBicmlnaHRuZXNzPC9URD4KKzxUUj48VEQ+PGI+aHVlPC9iPjxURD5QaWN0dXJlIGh1ZSAoY29sb3VyIG9ubHkpPC9URD4KKzxUUj48VEQ+PGI+Y29sb3VyPC9iPjxURD5QaWN0dXJlIGNvbG91ciAoY29sb3VyIG9ubHkpPC9URD4KKzxUUj48VEQ+PGI+Y29udHJhc3Q8L2I+PFREPlBpY3R1cmUgY29udHJhc3Q8L1REPgorPFRSPjxURD48Yj53aGl0ZW5lc3M8L2I+PFREPlRoZSB3aGl0ZW5lc3MgKGdyZXlzY2FsZSBvbmx5KTwvVEQ+Cis8VFI+PFREPjxiPmRlcHRoPC9iPjxURD5UaGUgY2FwdHVyZSBkZXB0aCAobWF5IG5lZWQgdG8gbWF0Y2ggdGhlIGZyYW1lIGJ1ZmZlciBkZXB0aCk8L1REPgorPFRSPjxURD48Yj5wYWxldHRlPC9iPjxURD5SZXBvcnRzIHRoZSBwYWxldHRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgaW1hZ2U8L1REPgorPC9UQUJMRT4KKzxQPgorVGhlIGZvbGxvd2luZyBwYWxldHRlcyBhcmUgZGVmaW5lZAorPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfR1JFWTwvYj48VEQ+TGluZWFyIGludGVuc2l0eSBncmV5IHNjYWxlICgyNTUgaXMgYnJpZ2h0ZXN0KS48L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX0hJMjQwPC9iPjxURD5UaGUgQlQ4NDggOGJpdCBjb2xvdXIgY3ViZS48L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX1JHQjU2NTwvYj48VEQ+UkdCNTY1IHBhY2tlZCBpbnRvIDE2IGJpdCB3b3Jkcy48L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX1JHQjU1NTwvYj48VEQ+UkdWNTU1IHBhY2tlZCBpbnRvIDE2IGJpdCB3b3JkcywgdG9wIGJpdCB1bmRlZmluZWQuPC9URD4KKzxUUj48VEQ+PGI+VklERU9fUEFMRVRURV9SR0IyNDwvYj48VEQ+UkdCODg4IHBhY2tlZCBpbnRvIDI0Yml0IHdvcmRzLjwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfUkdCMzI8L2I+PFREPlJHQjg4OCBwYWNrZWQgaW50byB0aGUgbG93IDMgYnl0ZXMgb2YgMzJiaXQgd29yZHMuIFRoZSB0b3AgOGJpdHMgYXJlIHVuZGVmaW5lZC48L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX1lVVjQyMjwvYj48VEQ+VmlkZW8gc3R5bGUgWVVWNDIyIC0gOGJpdHMgcGFja2VkIDRiaXRzIFkgMmJpdHMgVSAyYml0cyBWPC9URD4KKzxUUj48VEQ+PGI+VklERU9fUEFMRVRURV9ZVVlWPC9iPjxURD5EZXNjcmliZSBtZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfVVlWWTwvYj48VEQ+RGVzY3JpYmUgbWU8L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX1lVVjQyMDwvYj48VEQ+WVVWNDIwIGNhcHR1cmU8L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX1lVVjQxMTwvYj48VEQ+WVVWNDExIGNhcHR1cmU8L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX1JBVzwvYj48VEQ+UkFXIGNhcHR1cmUgKEJUODQ4KTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfWVVWNDIyUDwvYj48VEQ+WVVWIDQ6MjoyIFBsYW5hcjwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfWVVWNDExUDwvYj48VEQ+WVVWIDQ6MToxIFBsYW5hcjwvVEQ+Cis8L1RBQkxFPgorPFA+Cis8SDM+VHVuaW5nPC9IMz4KK0VhY2ggdmlkZW8gaW5wdXQgY2hhbm5lbCBjYW4gaGF2ZSBvbmUgb3IgbW9yZSB0dW5lcnMgYXNzb2NpYXRlZCB3aXRoIGl0LiBNYW55CitkZXZpY2VzIHdpbGwgbm90IGhhdmUgdHVuZXJzLiBUViBjYXJkcyBhbmQgcmFkaW8gY2FyZHMgd2lsbCBoYXZlIG9uZSBvciBtb3JlCit0dW5lcnMgYXR0YWNoZWQuCis8UD4KK1R1bmVycyBhcmUgZGVzY3JpYmVkIGJ5IGEgPGI+c3RydWN0IHZpZGVvX3R1bmVyPC9iPiB3aGljaCBjYW4gYmUgb2J0YWluZWQgYnkKK3RoZSA8Yj5WSURJT0NHVFVORVI8L2I+IGlvY3RsLiBGaWxsIGluIHRoZSB0dW5lciBudW1iZXIgaW4gdGhlIHN0cnVjdHVyZQordGhlbiBwYXNzIHRoZSBzdHJ1Y3R1cmUgdG8gdGhlIGlvY3RsIHRvIGhhdmUgdGhlIGRhdGEgZmlsbGVkIGluLiBUaGUgCit0dW5lciBjYW4gYmUgc3dpdGNoZWQgdXNpbmcgPGI+VklESU9DU1RVTkVSPC9iPiB3aGljaCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50CitnaXZpbmcgdGhlIHR1bmVyIHRvIHVzZS4gQSBzdHJ1Y3QgdHVuZXIgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+dHVuZXI8L2I+PFREPk51bWJlciBvZiB0aGUgdHVuZXI8L1REPgorPFRSPjxURD48Yj5uYW1lPC9iPjxURD5DYW5vbmljYWwgbmFtZSBmb3IgdGhpcyB0dW5lciAoZWcgRk0vQU0vVFYpPC9URD4KKzxUUj48VEQ+PGI+cmFuZ2Vsb3c8L2I+PFREPkxvd2VzdCB0dW5hYmxlIGZyZXF1ZW5jeTwvVEQ+Cis8VFI+PFREPjxiPnJhbmdlaGlnaDwvYj48VEQ+SGlnaGVzdCB0dW5hYmxlIGZyZXF1ZW5jeTwvVEQ+Cis8VFI+PFREPjxiPmZsYWdzPC9iPjxURD5GbGFncyBkZXNjcmliaW5nIHRoZSB0dW5lcjwvVEQ+Cis8VFI+PFREPjxiPm1vZGU8L2I+PFREPlRoZSB2aWRlbyBzaWduYWwgbW9kZSBpZiByZWxldmFudDwvVEQ+Cis8VFI+PFREPjxiPnNpZ25hbDwvYj48VEQ+U2lnbmFsIHN0cmVuZ3RoIGlmIGtub3duIC0gYmV0d2VlbiAwLTY1NTM1PC9URD4KKzwvVEFCTEU+Cis8UD4KK1RoZSBmb2xsb3dpbmcgZmxhZ3MgZXhpc3QKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5WSURFT19UVU5FUl9QQUw8L2I+PFREPlBBTCB0dW5pbmcgaXMgc3VwcG9ydGVkPC9URD4KKzxUUj48VEQ+PGI+VklERU9fVFVORVJfTlRTQzwvYj48VEQ+TlRTQyB0dW5pbmcgaXMgc3VwcG9ydGVkPC9URD4KKzxUUj48VEQ+PGI+VklERU9fVFVORVJfU0VDQU08L2I+PFREPlNFQ0FNIHR1bmluZyBpcyBzdXBwb3J0ZWQ8L1REPgorPFRSPjxURD48Yj5WSURFT19UVU5FUl9MT1c8L2I+PFREPkZyZXF1ZW5jeSBpcyBpbiBhIGxvd2VyIHJhbmdlPC9URD4KKzxUUj48VEQ+PGI+VklERU9fVFVORVJfTk9STTwvYj48VEQ+VGhlIG5vcm0gZm9yIHRoaXMgdHVuZXIgaXMgc2V0dGFibGU8L1REPgorPFRSPjxURD48Yj5WSURFT19UVU5FUl9TVEVSRU9fT048L2I+PFREPlRoZSB0dW5lciBpcyBzZWVpbmcgc3RlcmVvIGF1ZGlvPC9URD4KKzxUUj48VEQ+PGI+VklERU9fVFVORVJfUkRTX09OPC9iPjxURD5UaGUgdHVuZXIgaXMgc2VlaW5nIGEgUkRTIGRhdGFzdHJlYW08L1REPgorPFRSPjxURD48Yj5WSURFT19UVU5FUl9NQlNfT048L2I+PFREPlRoZSB0dW5lciBpcyBzZWVpbmcgYSBNQlMgZGF0YXN0cmVhbTwvVEQ+Cis8L1RBQkxFPgorPFA+CitUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBkZWZpbmVkCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+VklERU9fTU9ERV9QQUw8L2I+PFREPlRoZSB0dW5lciBpcyBpbiBQQUwgbW9kZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX01PREVfTlRTQzwvYj48VEQ+VGhlIHR1bmVyIGlzIGluIE5UU0MgbW9kZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX01PREVfU0VDQU08L2I+PFREPlRoZSB0dW5lciBpcyBpbiBTRUNBTSBtb2RlPC9URD4KKzxUUj48VEQ+PGI+VklERU9fTU9ERV9BVVRPPC9iPjxURD5UaGUgdHVuZXIgYXV0byBzd2l0Y2hlcywgb3IgbW9kZSBkb2VzIG5vdCBhcHBseTwvVEQ+Cis8L1RBQkxFPgorPFA+CitUdW5pbmcgZnJlcXVlbmNpZXMgYXJlIGFuIHVuc2lnbmVkIDMyYml0IHZhbHVlIGluIDEvMTZ0aCBNSHogb3IgaWYgdGhlCis8Yj5WSURFT19UVU5FUl9MT1c8L2I+IGZsYWcgaXMgc2V0IHRoZXkgYXJlIGluIDEvMTZ0aCBLSHouIFRoZSBjdXJyZW50CitmcmVxdWVuY3kgaXMgb2J0YWluZWQgYXMgYW4gdW5zaWduZWQgbG9uZyB2aWEgdGhlIDxiPlZJRElPQ0dGUkVRPC9iPiBpb2N0bCBhbmQKK3NldCBieSB0aGUgPGI+VklESU9DU0ZSRVE8L2I+IGlvY3RsLgorPFA+Cis8SDM+QXVkaW88L0gzPgorVFYgYW5kIFJhZGlvIGRldmljZXMgaGF2ZSBvbmUgb3IgbW9yZSBhdWRpbyBpbnB1dHMgdGhhdCBtYXkgYmUgc2VsZWN0ZWQuIAorVGhlIGF1ZGlvIHByb3BlcnRpZXMgYXJlIHF1ZXJpZWQgYnkgcGFzc2luZyBhIDxiPnN0cnVjdCB2aWRlb19hdWRpbzwvYj4gdG8gPGI+VklESU9DR0FVRElPPC9iPiBpb2N0bC4gVGhlCis8Yj5WSURJT0NTQVVESU88L2I+IGlvY3RsIHNldHMgYXVkaW8gcHJvcGVydGllcy4KKzxQPgorVGhlIHN0cnVjdHVyZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkcworPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPmF1ZGlvPC9iPjxURD5UaGUgY2hhbm5lbCBudW1iZXI8L1REPgorPFRSPjxURD48Yj52b2x1bWU8L2I+PFREPlRoZSB2b2x1bWUgbGV2ZWw8L1REPgorPFRSPjxURD48Yj5iYXNzPC9iPjxURD5UaGUgYmFzcyBsZXZlbDwvVEQ+Cis8VFI+PFREPjxiPnRyZWJsZTwvYj48VEQ+VGhlIHRyZWJsZSBsZXZlbDwvVEQ+Cis8VFI+PFREPjxiPmZsYWdzPC9iPjxURD5GbGFncyBkZXNjcmliaW5nIHRoZSBhdWRpbyBjaGFubmVsPC9URD4KKzxUUj48VEQ+PGI+bmFtZTwvYj48VEQ+Q2Fub25pY2FsIG5hbWUgZm9yIHRoZSBhdWRpbyBpbnB1dDwvVEQ+Cis8VFI+PFREPjxiPm1vZGU8L2I+PFREPlRoZSBtb2RlIHRoZSBhdWRpbyBpbnB1dCBpcyBpbjwvVEQ+Cis8VFI+PFREPjxiPmJhbGFuY2U8L2I+PFREPlRoZSBsZWZ0L3JpZ2h0IGJhbGFuY2U8L1REPgorPFRSPjxURD48Yj5zdGVwPC9iPjxURD5BY3R1YWwgc3RlcCB1c2VkIGJ5IHRoZSBoYXJkd2FyZTwvVEQ+Cis8L1RBQkxFPgorPFA+CitUaGUgZm9sbG93aW5nIGZsYWdzIGFyZSBkZWZpbmVkCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+VklERU9fQVVESU9fTVVURTwvYj48VEQ+VGhlIGF1ZGlvIGlzIG11dGVkPC9URD4KKzxUUj48VEQ+PGI+VklERU9fQVVESU9fTVVUQUJMRTwvYj48VEQ+QXVkaW8gbXV0aW5nIGlzIHN1cHBvcnRlZDwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX0FVRElPX1ZPTFVNRTwvYj48VEQ+VGhlIHZvbHVtZSBpcyBjb250cm9sbGFibGU8L1REPgorPFRSPjxURD48Yj5WSURFT19BVURJT19CQVNTPC9iPjxURD5UaGUgYmFzcyBpcyBjb250cm9sbGFibGU8L1REPgorPFRSPjxURD48Yj5WSURFT19BVURJT19UUkVCTEU8L2I+PFREPlRoZSB0cmVibGUgaXMgY29udHJvbGxhYmxlPC9URD4KKzxUUj48VEQ+PGI+VklERU9fQVVESU9fQkFMQU5DRTwvYj48VEQ+VGhlIGJhbGFuY2UgaXMgY29udHJvbGxhYmxlPC9URD4KKzwvVEFCTEU+Cis8UD4KK1RoZSBmb2xsb3dpbmcgZGVjb2RpbmcgbW9kZXMgYXJlIGRlZmluZWQKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5WSURFT19TT1VORF9NT05PPC9iPjxURD5Nb25vIHNpZ25hbDwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1NPVU5EX1NURVJFTzwvYj48VEQ+U3RlcmVvIHNpZ25hbCAoTklDQU0gZm9yIFRWKTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1NPVU5EX0xBTkcxPC9iPjxURD5FdXJvcGVhbiBUViBhbHRlcm5hdGUgbGFuZ3VhZ2UgMTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1NPVU5EX0xBTkcyPC9iPjxURD5FdXJvcGVhbiBUViBhbHRlcm5hdGUgbGFuZ3VhZ2UgMjwvVEQ+Cis8L1RBQkxFPgorPFA+Cis8SDM+UmVhZGluZyBJbWFnZXM8L0gzPgorRWFjaCBjYWxsIHRvIHRoZSA8Yj5yZWFkPC9iPiBzeXNjYWxsIHJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGltYWdlCitmcm9tIHRoZSBkZXZpY2UuIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gc2V0IGZvcm1hdCBhbmQgc2l6ZSAodXNpbmcKK3RoZSBWSURJT0NTUElDVCBhbmQgVklESU9DU1dJTiBpb2N0bHMpIGFuZCB0aGVuIHRvIHBhc3MgYSBzdWl0YWJsZQorc2l6ZSBidWZmZXIgYW5kIGxlbmd0aCB0byB0aGUgZnVuY3Rpb24uIE5vdCBhbGwgZGV2aWNlcyB3aWxsIHN1cHBvcnQKK3JlYWQgb3BlcmF0aW9ucy4KKzxQPgorQSBzZWNvbmQgd2F5IHRvIGhhbmRsZSBpbWFnZSBjYXB0dXJlIGlzIHZpYSB0aGUgbW1hcCBpbnRlcmZhY2UgaWYgc3VwcG9ydGVkLgorVG8gdXNlIHRoZSBtbWFwIGludGVyZmFjZSBhIHVzZXIgZmlyc3Qgc2V0cyB0aGUgZGVzaXJlZCBpbWFnZSBzaXplIGFuZCBkZXB0aAorcHJvcGVydGllcy4gTmV4dCB0aGUgVklESU9DR01CVUYgaW9jdGwgaXMgaXNzdWVkLiBUaGlzIHJlcG9ydHMgdGhlIHNpemUKK29mIGJ1ZmZlciB0byBtbWFwIGFuZCB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgYnVmZmVyIGZvciBlYWNoIGZyYW1lLiBUaGUKK251bWJlciBvZiBmcmFtZXMgc3VwcG9ydGVkIGlzIGRldmljZSBkZXBlbmRlbnQgYW5kIG1heSBvbmx5IGJlIG9uZS4gCis8UD4KK1RoZSB2aWRlb19tYnVmIHN0cnVjdHVyZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkcworPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPnNpemU8L2I+PFREPlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbWFwPC9URD4KKzxUUj48VEQ+PGI+ZnJhbWVzPC9iPjxURD5UaGUgbnVtYmVyIG9mIGZyYW1lczwvVEQ+Cis8VFI+PFREPjxiPm9mZnNldHM8L2I+PFREPlRoZSBvZmZzZXQgb2YgZWFjaCBmcmFtZTwvVEQ+Cis8L1RBQkxFPgorPFA+CitPbmNlIHRoZSBtbWFwIGhhcyBiZWVuIG1hZGUgdGhlIFZJRElPQ01DQVBUVVJFIGlvY3RsIHN0YXJ0cyB0aGUKK2NhcHR1cmUgdG8gYSBmcmFtZSB1c2luZyB0aGUgZm9ybWF0IGFuZCBpbWFnZSBzaXplIHNwZWNpZmllZCBpbiB0aGUKK3ZpZGVvX21tYXAgKHdoaWNoIHNob3VsZCBtYXRjaCBvciBiZSBiZWxvdyB0aGUgaW5pdGlhbCBxdWVyeSBzaXplKS4KK1doZW4gdGhlIFZJRElPQ01DQVBUVVJFIGlvY3RsIHJldHVybnMgdGhlIGZyYW1lIGlzIDxlbT5ub3Q8L2VtPgorY2FwdHVyZWQgeWV0LCB0aGUgZHJpdmVyIGp1c3QgaW5zdHJ1Y3RlZCB0aGUgaGFyZHdhcmUgdG8gc3RhcnQgdGhlCitjYXB0dXJlLiAgVGhlIGFwcGxpY2F0aW9uIGhhcyB0byB1c2UgdGhlIFZJRElPQ1NZTkMgaW9jdGwgdG8gd2FpdAordW50aWwgdGhlIGNhcHR1cmUgb2YgYSBmcmFtZSBpcyBmaW5pc2hlZC4gIFZJRElPQ1NZTkMgdGFrZXMgdGhlIGZyYW1lCitudW1iZXIgeW91IHdhbnQgdG8gd2FpdCBmb3IgYXMgYXJndW1lbnQuCis8cD4KK0l0IGlzIGFsbG93ZWQgdG8gY2FsbCBWSURJT0NNQ0FQVFVSRSBtdWx0aXBsZSB0aW1lcyAod2l0aCBkaWZmZXJlbnQKK2ZyYW1lIG51bWJlcnMgaW4gdmlkZW9fbW1hcC0+ZnJhbWUgb2YgY291cnNlKSBhbmQgdGh1cyBoYXZlIG11bHRpcGxlCitvdXRzdGFuZGluZyBjYXB0dXJlIHJlcXVlc3RzLiAgQSBzaW1wbGUgd2F5IGRvIHRvIGRvdWJsZS1idWZmZXJpbmcKK3VzaW5nIHRoaXMgZmVhdHVyZSBsb29rcyBsaWtlIHRoaXM6Cis8cHJlPgorLyogc2V0dXAgZXZlcnl0aGluZyAqLworVklESU9DTUNBUFRVUkUoMCkKK3doaWxlICh3aGF0ZXZlcikgeworICAgVklESU9DTUNBUFRVUkUoMSkKKyAgIFZJRElPQ1NZTkMoMCkKKyAgIC8qIHByb2Nlc3MgZnJhbWUgMCB3aGlsZSB0aGUgaGFyZHdhcmUgY2FwdHVyZXMgZnJhbWUgMSAqLworICAgVklESU9DTUNBUFRVUkUoMCkKKyAgIFZJRElPQ1NZTkMoMSkKKyAgIC8qIHByb2Nlc3MgZnJhbWUgMSB3aGlsZSB0aGUgaGFyZHdhcmUgY2FwdHVyZXMgZnJhbWUgMCAqLworfQorPC9wcmU+CitOb3RlIHRoYXQgeW91IGFyZSA8ZW0+bm90PC9lbT4gbGltaXRlZCB0byBvbmx5IHR3byBmcmFtZXMuICBUaGUgQVBJCithbGxvd3MgdXAgdG8gMzIgZnJhbWVzLCB0aGUgVklESU9DR01CVUYgaW9jdGwgcmV0dXJucyB0aGUgbnVtYmVyIG9mCitmcmFtZXMgdGhlIGRyaXZlciBncmFudGVkLiAgVGh1cyBpdCBpcyBwb3NzaWJsZSB0byBidWlsZCBkZWVwZXIgcXVldWVzCit0byBhdm9pZCBsb29zaW5nIGZyYW1lcyBvbiBsb2FkIHBlYWtzLgorPHA+CitXaGlsZSBjYXB0dXJpbmcgdG8gbWVtb3J5IHRoZSBkcml2ZXIgd2lsbCBtYWtlIGEgImJlc3QgZWZmb3J0IiBhdHRlbXB0Cit0byBjYXB0dXJlIHRvIHNjcmVlbiBhcyB3ZWxsIGlmIHJlcXVlc3RlZC4gVGhpcyBub3JtYWxseSBtZWFucyBhbGwKK2ZyYW1lcyB0aGF0ICJtaXNzIiBtZW1vcnkgbWFwcGVkIGNhcHR1cmUgd2lsbCBnbyB0byB0aGUgZGlzcGxheS4KKzxQPgorQSBmaW5hbCBpb2N0bCBleGlzdHMgdG8gYWxsb3cgYSBkZXZpY2UgdG8gb2J0YWluIHJlbGF0ZWQgZGV2aWNlcyBpZiBhCitkcml2ZXIgaGFzIG11bHRpcGxlIGNvbXBvbmVudHMgKGZvciBleGFtcGxlIHZpZGVvMCBtYXkgbm90IGJlIGFzc29jaWF0ZWQKK3dpdGggdmJpMCB3aGljaCB3b3VsZCBjYXVzZSBhbiBpbnRlcmNhc3QgZGlzcGxheSBwcm9ncmFtIHRvIG1ha2UgYSBiYWQKK21pc3Rha2UpLiBUaGUgVklESU9DR1VOSVQgaW9jdGwgcmVwb3J0cyB0aGUgdW5pdCBudW1iZXJzIG9mIHRoZSBhc3NvY2lhdGVkCitkZXZpY2VzIGlmIGFueSBleGlzdC4gVGhlIHZpZGVvX3VuaXQgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkcy4KKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj52aWRlbzwvYj48VEQ+VmlkZW8gY2FwdHVyZSBkZXZpY2U8L1REPgorPFRSPjxURD48Yj52Ymk8L2I+PFREPlZCSSBjYXB0dXJlIGRldmljZTwvVEQ+Cis8VFI+PFREPjxiPnJhZGlvPC9iPjxURD5SYWRpbyBkZXZpY2U8L1REPgorPFRSPjxURD48Yj5hdWRpbzwvYj48VEQ+QXVkaW8gbWl4ZXI8L1REPgorPFRSPjxURD48Yj50ZWxldGV4dDwvYj48VEQ+VGVsZXRleHQgZGV2aWNlPC9URD4KKzwvVEFCTEU+Cis8UD4KKzxIMz5SRFMgRGF0YXN0cmVhbXM8L0gzPgorRm9yIHJhZGlvIGRldmljZXMgdGhhdCBzdXBwb3J0IGl0LCBpdCBpcyBwb3NzaWJsZSB0byByZWNlaXZlIFJhZGlvIERhdGEKK1N5c3RlbSAoUkRTKSBkYXRhIGJ5IG1lYW5zIG9mIGEgcmVhZCgpIG9uIHRoZSBkZXZpY2UuICBUaGUgZGF0YSBpcyBwYWNrZWQgaW4KK2dyb3VwcyBvZiB0aHJlZSwgYXMgZm9sbG93czoKKzxUQUJMRT4KKzxUUj48VEQ+Rmlyc3QgT2N0ZXQ8L1REPjxURD5MZWFzdCBTaWduaWZpY2FudCBCeXRlIG9mIFJEUyBCbG9jazwvVEQ+PC9UUj4KKzxUUj48VEQ+U2Vjb25kIE9jdGV0PC9URD48VEQ+TW9zdCBTaWduaWZpY2FudCBCeXRlIG9mIFJEUyBCbG9jaworPFRSPjxURD5UaGlyZCBPY3RldDwvVEQ+PFREPkJpdCA3OjwvVEQ+PFREPkVycm9yIGJpdC4gIEluZGljYXRlcyB0aGF0CithbiB1bmNvcnJlY3RhYmxlIGVycm9yIG9jY3VycmVkIGR1cmluZyByZWNlcHRpb24gb2YgdGhpcyBibG9jay48L1REPjwvVFI+Cis8VFI+PFREPiZuYnNwOzwvVEQ+PFREPkJpdCA2OjwvVEQ+PFREPkNvcnJlY3RlZCBiaXQuICBJbmRpY2F0ZXMgdGhhdCAgCithbiBlcnJvciB3YXMgY29ycmVjdGVkIGZvciB0aGlzIGRhdGEgYmxvY2suPC9URD48L1RSPgorPFRSPjxURD4mbmJzcDs8L1REPjxURD5CaXRzIDUtMzo8L1REPjxURD5SZWNlaXZlZCBPZmZzZXQuICBJbmRpY2F0ZXMgdGhlICAKK29mZnNldCByZWNlaXZlZCBieSB0aGUgc3luYyBzeXN0ZW0uPC9URD48L1RSPgorPFRSPjxURD4mbmJzcDs8L1REPjxURD5CaXRzIDItMDo8L1REPjxURD5PZmZzZXQgTmFtZS4gIEluZGljYXRlcyB0aGUgIAorb2Zmc2V0IGFwcGxpZWQgdG8gdGhpcyBkYXRhLjwvVEQ+PC9UUj4KKzwvVEFCTEU+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2NzYxYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgpAQCAtMCwwICsxLDEyMSBAQAorY2FyZD0wIC0gICoqKiBVTktOT1dOL0dFTkVSSUMgKioqIAorY2FyZD0xIC0gTUlSTyBQQ1RWCitjYXJkPTIgLSBIYXVwcGF1Z2UgKGJ0ODQ4KQorY2FyZD0zIC0gU1RCLCBHYXRld2F5IFAvTiA2MDAwNjk5IChidDg0OCkKK2NhcmQ9NCAtIEludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkKK2NhcmQ9NSAtIERpYW1vbmQgRFRWMjAwMAorY2FyZD02IC0gQVZlck1lZGlhIFRWUGhvbmUKK2NhcmQ9NyAtIE1BVFJJWC1WaXNpb24gTVYtRGVsdGEKK2NhcmQ9OCAtIExpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2CitjYXJkPTkgLSBJTVMvSVhtaWNybyBUdXJib1RWCitjYXJkPTEwIC0gSGF1cHBhdWdlIChidDg3OCkKK2NhcmQ9MTEgLSBNSVJPIFBDVFYgcHJvCitjYXJkPTEyIC0gQURTIFRlY2hub2xvZ2llcyBDaGFubmVsIFN1cmZlciBUViAoYnQ4NDgpCitjYXJkPTEzIC0gQVZlck1lZGlhIFRWQ2FwdHVyZSA5OAorY2FyZD0xNCAtIEFpbXNsYWIgVmlkZW8gSGlnaHdheSBYdHJlbWUgKFZIWCkKK2NhcmQ9MTUgLSBab2x0cml4IFRWLU1heAorY2FyZD0xNiAtIFByb2xpbmsgUGl4ZWx2aWV3IFBsYXlUViAoYnQ4NzgpCitjYXJkPTE3IC0gTGVhZHRlayBXaW5WaWV3IDYwMQorY2FyZD0xOCAtIEFWRUMgSW50ZXJjYXB0dXJlCitjYXJkPTE5IC0gTGlmZXZpZXcgRmx5VmlkZW8gSUkgRVogL0ZseUtpdCBMUjM4IEJ0ODQ4IChjYXB0dXJlIG9ubHkpCitjYXJkPTIwIC0gQ0VJIFJhZmZsZXMgQ2FyZAorY2FyZD0yMSAtIExpZmV2aWV3IEZseVZpZGVvIDk4LyBMdWNreSBTdGFyIEltYWdlIFdvcmxkIENvbmZlcmVuY2VUViBMUjUwCitjYXJkPTIyIC0gQXNrZXkgQ1BIMDUwLyBQaG9lYmUgVHYgTWFzdGVyICsgRk0KK2NhcmQ9MjMgLSBNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzgKK2NhcmQ9MjQgLSBBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10KK2NhcmQ9MjUgLSBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgpLyBUZXJyYSBUVmFsdWUgVmVyc2lvbiAxLjAvIFZvYmlzIFRWLUJvb3N0YXIKK2NhcmQ9MjYgLSBIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkKK2NhcmQ9MjcgLSBMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAKK2NhcmQ9MjggLSBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMSAoYnQ4NzgpCitjYXJkPTI5IC0gSW1hZ2VuYXRpb24gUFhDMjAwCitjYXJkPTMwIC0gTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MAorY2FyZD0zMSAtIEZvcm1hYyBpUHJvVFYsIEZvcm1hYyBQcm9UViBJIChidDg0OCkKK2NhcmQ9MzIgLSBJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJCitjYXJkPTMzIC0gVGVycmF0ZWMgVGVycmFUVmFsdWUgVmVyc2lvbiBCdDg3OAorY2FyZD0zNCAtIExlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAKK2NhcmQ9MzUgLSBMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIC8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJCitjYXJkPTM2IC0gTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lcgorY2FyZD0zNyAtIFByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBwcm8KK2NhcmQ9MzggLSBBc2tleSBDUEgwNlggVFZpZXc5OQorY2FyZD0zOSAtIFBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUKK2NhcmQ9NDAgLSBTVEIgVFYgUENJIEZNLCBHYXRld2F5IFAvTiA2MDAwNzA0IChidDg3OCksIDNEZnggVm9vZG9vVFYgMTAwCitjYXJkPTQxIC0gQVZlck1lZGlhIFRWUGhvbmUgOTgKK2NhcmQ9NDIgLSBQcm9WaWRlbyBQVjk1MQorY2FyZD00MyAtIExpdHRsZSBPbkFpciBUVgorY2FyZD00NCAtIFNpZ21hIFRWSUktRk0KK2NhcmQ9NDUgLSBNQVRSSVgtVmlzaW9uIE1WLURlbHRhIDIKK2NhcmQ9NDYgLSBab2x0cml4IEdlbmllIFRWL0ZNCitjYXJkPTQ3IC0gVGVycmF0ZWMgVFYvUmFkaW8rCitjYXJkPTQ4IC0gQXNrZXkgQ1BIMDN4LyBEeW5hbGluayBNYWdpYyBUVmlldworY2FyZD00OSAtIElPREFUQSBHVi1CQ1RWMy9QQ0kKK2NhcmQ9NTAgLSBQcm9saW5rIFBWLUJUODc4UCs0RSAvIFBpeGVsVmlldyBQbGF5VFYgUEFLIC8gTGVuY28gTVhUVi05NTc4IENQCitjYXJkPTUxIC0gRWFnbGUgV2lyZWxlc3MgQ2Fwcmljb3JuMiAoYnQ4NzhBKQorY2FyZD01MiAtIFBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybworY2FyZD01MyAtIFR5cGhvb24gVFZpZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSBUViBTdGF0aW9uIFJEUworY2FyZD01NCAtIExpZmV2aWV3IEZseVZpZGVvIDIwMDAgL0ZseVZpZGVvIEEyLyBMaWZldGVjIExUIDk0MTUgVFYgW0xSOTBdCitjYXJkPTU1IC0gQXNrZXkgQ1BIMDMxLyBCRVNUQlVZIEVhc3kgVFYKK2NhcmQ9NTYgLSBMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAKK2NhcmQ9NTcgLSBHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KQorY2FyZD01OCAtIEFza2V5IENQSDA2MC8gUGhvZWJlIFRWIE1hc3RlciBPbmx5IChObyBGTSkKK2NhcmQ9NTkgLSBBc2tleSBDUEgwM3ggVFYgQ2FwdHVyZXIKK2NhcmQ9NjAgLSBNb2R1bGFyIFRlY2hub2xvZ3kgTU0xMDBQQ1RWCitjYXJkPTYxIC0gQUcgRWxlY3Ryb25pY3MgR01WMQorY2FyZD02MiAtIEFza2V5IENQSDA2MS8gQkVTVEJVWSBFYXN5IFRWIChidDg3OCkKK2NhcmQ9NjMgLSBBVEkgVFYtV29uZGVyCitjYXJkPTY0IC0gQVRJIFRWLVdvbmRlciBWRQorY2FyZD02NSAtIExpZmV2aWV3IEZseVZpZGVvIDIwMDBTIExSOTAKK2NhcmQ9NjYgLSBUZXJyYXRlYyBUVmFsdWVSYWRpbworY2FyZD02NyAtIElPREFUQSBHVi1CQ1RWNC9QQ0kKK2NhcmQ9NjggLSAzRGZ4IFZvb2Rvb1RWIEZNIChFdXJvKSwgVm9vZG9vVFYgMjAwIChVU0EpCitjYXJkPTY5IC0gQWN0aXZlIEltYWdpbmcgQUlNTVMKK2NhcmQ9NzAgLSBQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuNEMsOEUpCitjYXJkPTcxIC0gTGlmZXZpZXcgRmx5VmlkZW8gOThFWiAoY2FwdHVyZSBvbmx5KSBMUjUxCitjYXJkPTcyIC0gUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKzlCIChQbGF5VFYgUHJvIHJldi45QiBGTStOSUNBTSkKK2NhcmQ9NzMgLSBTZW5zb3JheSAzMTEKK2NhcmQ9NzQgLSBSZW1vdGVWaXNpb24gTVggKFJWNjA1KQorY2FyZD03NSAtIFBvd2VyY29sb3IgTVRWODc4LyBNVFY4NzhSLyBNVFY4NzhGCitjYXJkPTc2IC0gQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApCitjYXJkPTc3IC0gR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSBDYXJkIChCdDg3OCkKK2NhcmQ9NzggLSBKZXR3YXkgVFYvQ2FwdHVyZSBKVy1UVjg3OC1GQkssIEt3b3JsZCBLVy1UVjg3OFJGCitjYXJkPTc5IC0gRFNQIERlc2lnbiBUQ1ZJREVPCitjYXJkPTgwIC0gSGF1cHBhdWdlIFdpblRWIFBWUgorY2FyZD04MSAtIElPREFUQSBHVi1CQ1RWNS9QQ0kKK2NhcmQ9ODIgLSBPc3ByZXkgMTAwLzE1MCAoODc4KQorY2FyZD04MyAtIE9zcHJleSAxMDAvMTUwICg4NDgpCitjYXJkPTg0IC0gT3NwcmV5IDEwMSAoODQ4KQorY2FyZD04NSAtIE9zcHJleSAxMDEvMTUxCitjYXJkPTg2IC0gT3NwcmV5IDEwMS8xNTEgdy8gc3ZpZAorY2FyZD04NyAtIE9zcHJleSAyMDAvMjAxLzI1MC8yNTEKK2NhcmQ9ODggLSBPc3ByZXkgMjAwLzI1MAorY2FyZD04OSAtIE9zcHJleSAyMTAvMjIwCitjYXJkPTkwIC0gT3NwcmV5IDUwMAorY2FyZD05MSAtIE9zcHJleSA1NDAKK2NhcmQ9OTIgLSBPc3ByZXkgMjAwMAorY2FyZD05MyAtIElEUyBFYWdsZQorY2FyZD05NCAtIFBpbm5hY2xlIFBDVFYgU2F0CitjYXJkPTk1IC0gRm9ybWFjIFByb1RWIElJIChidDg3OCkKK2NhcmQ9OTYgLSBNYWNoVFYKK2NhcmQ9OTcgLSBFdXJlc3lzIFBpY29sbworY2FyZD05OCAtIFByb1ZpZGVvIFBWMTUwCitjYXJkPTk5IC0gQUQtVFZLNTAzCitjYXJkPTEwMCAtIEhlcmN1bGVzIFNtYXJ0IFRWIFN0ZXJlbworY2FyZD0xMDEgLSBQYWNlIFRWICYgUmFkaW8gQ2FyZAorY2FyZD0xMDIgLSBJVkMtMjAwCitjYXJkPTEwMyAtIEdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kKK2NhcmQ9MTA0IC0gTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUVgorY2FyZD0xMDUgLSBQcm9WaWRlbyBQVjE0MworY2FyZD0xMDYgLSBQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KQorY2FyZD0xMDcgLSBQSFlURUMgVkQtMDA5LVgxIENvbWJpIChidDg3OCkKK2NhcmQ9MTA4IC0gUEhZVEVDIFZELTAwOSBNaW5pRElOIChidDg3OCkKK2NhcmQ9MTA5IC0gUEhZVEVDIFZELTAwOSBDb21iaSAoYnQ4NzgpCitjYXJkPTExMCAtIElWQy0xMDAKK2NhcmQ9MTExIC0gSVZDLTEyMEcKK2NhcmQ9MTEyIC0gcGNIRFRWIEhELTIwMDAgVFYKK2NhcmQ9MTEzIC0gVHdpbmhhbiBEU1QgKyBjbG9uZXMKK2NhcmQ9MTE0IC0gV2luZmFzdCBWQzEwMAorY2FyZD0xMTUgLSBUZXBwcm8gVEVWLTU2MC9JbnRlclZpc2lvbiBJVi01NjAKK2NhcmQ9MTE2IC0gU0lNVVMgR1ZDMTEwMAorY2FyZD0xMTcgLSBOR1MgTkdTVFYrCitjYXJkPTExOCAtIExNTEJUNAorY2FyZD0xMTkgLSBUZWtyYW0gTTIwNSBQUk8KK2NhcmQ9MTIwIC0gQ29uY2VwdHJvbmljIENPTlRWRk1pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjODJmYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMCwwICsxLDM1IEBACisgIDAgLT4gVU5LTk9XTi9HRU5FUklDICAgICAgICAgICAgICAgICAgICAgICAgIAorICAxIC0+IFByb3RldXMgUHJvIFtwaGlsaXBzIHJlZmVyZW5jZSBkZXNpZ25dICAgWzExMzE6MjAwMSwxMTMxOjIwMDFdCisgIDIgLT4gTGlmZVZpZXcgRmx5VklERU8zMDAwICAgICAgICAgICAgICAgICAgICBbNTE2ODowMTM4LDRlNDI6MDEzOF0KKyAgMyAtPiBMaWZlVmlldyBGbHlWSURFTzIwMDAgICAgICAgICAgICAgICAgICAgIFs1MTY4OjAxMzhdCisgIDQgLT4gRU1QUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTEzMTo2NzUyXQorICA1IC0+IFNLTmV0IE1vbnN0ZXIgVFYgICAgICAgICAgICAgICAgICAgICAgICAgWzExMzE6NGU4NV0KKyAgNiAtPiBUZXZpb24gTUQgOTcxNyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIDcgLT4gS05DIE9uZSBUVi1TdGF0aW9uIFJEUyAvIFR5cGhvb24gVFYgVHVuZXIgUkRTIFsxMTMxOmZlMDEsMTg5NDpmZTAxXQorICA4IC0+IFRlcnJhdGVjIENpbmVyZ3kgNDAwIFRWICAgICAgICAgICAgICAgICAgWzE1M0I6MTE0Ml0KKyAgOSAtPiBNZWRpb24gNTA0NAorIDEwIC0+IEt3b3JsZC9LdXJvdXRvU2hpa291IFNBQTcxMzAtVFZQQ0kKKyAxMSAtPiBUZXJyYXRlYyBDaW5lcmd5IDYwMCBUViAgICAgICAgICAgICAgICAgIFsxNTNCOjExNDNdCisgMTIgLT4gTWVkaW9uIDcxMzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTZiZTowMDAzXQorIDEzIC0+IFR5cGhvb24gVFYrUmFkaW8gOTAwMzEKKyAxNCAtPiBFTFNBIEVYLVZJU0lPTiAzMDBUViAgICAgICAgICAgICAgICAgICAgIFsxMDQ4OjIyNmJdCisgMTUgLT4gRUxTQSBFWC1WSVNJT04gNTAwVFYgICAgICAgICAgICAgICAgICAgICBbMTA0ODoyMjZiXQorIDE2IC0+IEFTVVMgVFYtRk0gNzEzNCAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg0MiwxMDQzOjQ4MzAsMTA0Mzo0ODQwXQorIDE3IC0+IEFPUEVOIFZBMTAwMCBQT1dFUiAgICAgICAgICAgICAgICAgICAgICAgWzExMzE6NzEzM10KKyAxOCAtPiBCTUsgTVBFWCBObyBUdW5lcgorIDE5IC0+IENvbXBybyBWaWRlb01hdGUgVFYgICAgICAgICAgICAgICAgICAgICAgWzE4NWI6YzEwMF0KKyAyMCAtPiBNYXRyb3ggQ3Jvbm9zUGx1cyAgICAgICAgICAgICAgICAgICAgICAgIFsxMDJCOjQ4ZDBdCisgMjEgLT4gMTBNT09OUyBQQ0kgVFYgQ0FQVFVSRSBDQVJEICAgICAgICAgICAgICBbMTEzMToyMDAxXQorIDIyIC0+IE1lZGlvbiAyODE5LyBBdmVyTWVkaWEgTTE1NiAgICAgICAgICAgICAgWzE0NjE6YTcwYiwxNDYxOjIxMTVdCisgMjMgLT4gQk1LIE1QRVggVHVuZXIKKyAyNCAtPiBLTkMgT25lIFRWLVN0YXRpb24gRFZSICAgICAgICAgICAgICAgICAgIFsxODk0OmEwMDZdCisgMjUgLT4gQVNVUyBUVi1GTSA3MTMzICAgICAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODQzXQorIDI2IC0+IFBpbm5hY2xlIFBDVFYgU3RlcmVvIChzYWE3MTM0KSAgICAgICAgICAgWzExYmQ6MDAyYl0KKyAyNyAtPiBNYW5saSBNdWNoVFYgTS1UVjAwMgorIDI4IC0+IE1hbmxpIE11Y2hUViBNLVRWMDAxCisgMjkgLT4gTmFnYXNlIFNhbmd5byBUcmFuc0dlYXIgMzAwMFRWICAgICAgICAgICBbMTQ2MTowNTBjXQorIDMwIC0+IEVsaXRlZ3JvdXAgRUNTIFRWUDNYUCBGTTEyMTYgVHVuZXIgQ2FyZChQQUwtQkcsRk0pICBbMTAxOTo0Y2I0XQorIDMxIC0+IEVsaXRlZ3JvdXAgRUNTIFRWUDNYUCBGTTEyMzYgVHVuZXIgQ2FyZCAoTlRTQyxGTSkgWzEwMTk6NGNiNV0KKyAzMiAtPiBBVkFDUyBTbWFydFRWCisgMzMgLT4gQVZlck1lZGlhIERWRCBFWk1ha2VyICAgICAgICAgICAgICAgICAgICBbMTQ2MToxMGZmXQorIDM0IC0+IExpZmVWaWV3IEZseVRWIFBsYXRpbnVtMzMgbWluaSAgICAgICAgICAgWzUxNjg6MDIxMl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YmFmZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCkBAIC0wLDAgKzEsNDYgQEAKK3R1bmVyPTAgLSBUZW1pYyBQQUwgKDQwMDIgRkg1KQordHVuZXI9MSAtIFBoaWxpcHMgUEFMX0kgKEZJMTI0NiBhbmQgY29tcGF0aWJsZXMpCit0dW5lcj0yIC0gUGhpbGlwcyBOVFNDIChGSTEyMzYsRk0xMjM2IGFuZCBjb21wYXRpYmxlcykKK3R1bmVyPTMgLSBQaGlsaXBzIChTRUNBTStQQUxfQkcpIChGSTEyMTZNRiwgRk0xMjE2TUYsIEZSMTIxNk1GKQordHVuZXI9NCAtIE5vVHVuZXIKK3R1bmVyPTUgLSBQaGlsaXBzIFBBTF9CRyAoRkkxMjE2IGFuZCBjb21wYXRpYmxlcykKK3R1bmVyPTYgLSBUZW1pYyBOVFNDICg0MDMyIEZZNSkKK3R1bmVyPTcgLSBUZW1pYyBQQUxfSSAoNDA2MiBGWTUpCit0dW5lcj04IC0gVGVtaWMgTlRTQyAoNDAzNiBGWTUpCit0dW5lcj05IC0gQWxwcyBIU0JIMQordHVuZXI9MTAgLSBBbHBzIFRTQkUxCit0dW5lcj0xMSAtIEFscHMgVFNCQjUKK3R1bmVyPTEyIC0gQWxwcyBUU0JFNQordHVuZXI9MTMgLSBBbHBzIFRTQkM1Cit0dW5lcj0xNCAtIFRlbWljIFBBTF9CRyAoNDAwNkZINSkKK3R1bmVyPTE1IC0gQWxwcyBUU0NINgordHVuZXI9MTYgLSBUZW1pYyBQQUxfREsgKDQwMTYgRlk1KQordHVuZXI9MTcgLSBQaGlsaXBzIE5UU0NfTSAoTUsyKQordHVuZXI9MTggLSBUZW1pYyBQQUxfSSAoNDA2NiBGWTUpCit0dW5lcj0xOSAtIFRlbWljIFBBTCogYXV0byAoNDAwNiBGTjUpCit0dW5lcj0yMCAtIFRlbWljIFBBTF9CRyAoNDAwOSBGUjUpIG9yIFBBTF9JICg0MDY5IEZSNSkKK3R1bmVyPTIxIC0gVGVtaWMgTlRTQyAoNDAzOSBGUjUpCit0dW5lcj0yMiAtIFRlbWljIFBBTC9TRUNBTSBtdWx0aSAoNDA0NiBGTTUpCit0dW5lcj0yMyAtIFBoaWxpcHMgUEFMX0RLIChGSTEyNTYgYW5kIGNvbXBhdGlibGVzKQordHVuZXI9MjQgLSBQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRlExMjE2TUUpCit0dW5lcj0yNSAtIExHIFBBTF9JK0ZNIChUQVBDLUkwMDFEKQordHVuZXI9MjYgLSBMRyBQQUxfSSAoVEFQQy1JNzAxRCkKK3R1bmVyPTI3IC0gTEcgTlRTQytGTSAoVFBJOE5TUjAxRikKK3R1bmVyPTI4IC0gTEcgUEFMX0JHK0ZNIChUUEk4UFNCMDFEKQordHVuZXI9MjkgLSBMRyBQQUxfQkcgKFRQSThQU0IxMUQpCit0dW5lcj0zMCAtIFRlbWljIFBBTCogYXV0byArIEZNICg0MDA5IEZONSkKK3R1bmVyPTMxIC0gU0hBUlAgTlRTQ19KUCAoMlU1SkY1NTQwKQordHVuZXI9MzIgLSBTYW1zdW5nIFBBTCBUQ1BNOTA5MVBEMjcKK3R1bmVyPTMzIC0gTVQyMHh4IHVuaXZlcnNhbAordHVuZXI9MzQgLSBUZW1pYyBQQUxfQkcgKDQxMDYgRkg1KQordHVuZXI9MzUgLSBUZW1pYyBQQUxfREsvU0VDQU1fTCAoNDAxMiBGWTUpCit0dW5lcj0zNiAtIFRlbWljIE5UU0MgKDQxMzYgRlk1KQordHVuZXI9MzcgLSBMRyBQQUwgKG5ld2VyIFRBUEMgc2VyaWVzKQordHVuZXI9MzggLSBQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRk0xMjE2TUUgTUszKQordHVuZXI9MzkgLSBMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykKK3R1bmVyPTQwIC0gSElUQUNISSBWNy1KMTgwQVQKK3R1bmVyPTQxIC0gUGhpbGlwcyBQQUxfTUsgKEZJMTIxNiBNSykKK3R1bmVyPTQyIC0gUGhpbGlwcyAxMjM2RCBBVFNDL05UU0MgZGF1bCBpbgordHVuZXI9NDMgLSBQaGlsaXBzIE5UU0MgTUszIChGTTEyMzZNSzMgb3IgRk0xMjM2L0YpCit0dW5lcj00NCAtIFBoaWxpcHMgNCBpbiAxIChBVEkgVFYgV29uZGVyIFByby9Db25leGFudCkKK3R1bmVyPTQ1IC0gTWljcm90dW5lIDQwNDkgRk01CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NRY2FtLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MTVlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NRY2FtLnR4dApAQCAtMCwwICsxLDQxMiBAQAorYy1xY2FtIC0gQ29ubmVjdGl4IENvbG9yIFF1aWNrQ2FtIHZpZGVvNGxpbnV4IGtlcm5lbCBkcml2ZXIKKworQ29weXJpZ2h0IChDKSAxOTk5ICBEYXZlIEZvcnJlc3QgIDxkcmY1bkB2aXJnaW5pYS5lZHU+CisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VkIHVuZGVyIEdOVSBHUEwuCisKKzE5OTktMTItMDggRGF2ZSBGb3JyZXN0LCB3cml0dGVuIHdpdGgga2VybmVsIHZlcnNpb24gMi4yLjEyIGluIG1pbmQKKworCitUYWJsZSBvZiBDb250ZW50cworCisxLjAgSW50cm9kdWN0aW9uCisyLjAgQ29tcGlsYXRpb24sIEluc3RhbGxhdGlvbiwgYW5kIENvbmZpZ3VyYXRpb24KKzMuMCBUcm91Ymxlc2hvb3RpbmcKKzQuMCBGdXR1cmUgV29yayAvIGN1cnJlbnQgd29yayBhcm91bmRzCis5LjAgU2FtcGxlIFByb2dyYW0sIHY0bGdyYWIKKzEwLjAgT3RoZXIgSW5mb3JtYXRpb24KKworCisxLjAgSW50cm9kdWN0aW9uCisKKyAgVGhlIGZpbGUgLi4vZHJpdmVycy9jaGFyL2MtcWNhbS5jIGlzIGEgZGV2aWNlIGRyaXZlciBmb3IgdGhlCitMb2dpdGVjaCAobmVlIENvbm5lY3RpeCkgcGFyYWxsZWwgcG9ydCBpbnRlcmZhY2UgY29sb3IgQ0NEIGNhbWVyYS4KK1RoaXMgaXMgYSBmYWlybHkgaW5leHBlbnNpdmUgZGV2aWNlIGZvciBjYXB0dXJpbmcgaW1hZ2VzLiAgTG9naXRlY2gKK2RvZXMgbm90IGN1cnJlbnRseSBwcm92aWRlIGluZm9ybWF0aW9uIGZvciBkZXZlbG9wZXJzLCBidXQgbWFueSBwZW9wbGUKK2hhdmUgZW5naW5lZXJlZCBzZXZlcmFsIHNvbHV0aW9ucyBmb3Igbm9uLU1pY3Jvc29mdCB1c2Ugb2YgdGhlIENvbG9yCitRdWlja2NhbS4KKworMS4xIE1vdGl2YXRpb24KKworICBJIHNwZW50IGEgbnVtYmVyIG9mIGhvdXJzIHRyeWluZyB0byBnZXQgbXkgY2FtZXJhIHRvIHdvcmssIGFuZCBJCitob3BlIHRoaXMgZG9jdW1lbnQgc2F2ZXMgeW91IHNvbWUgdGltZS4gIE15IGNhbWVyYSB3aWxsIG5vdCB3b3JrIHdpdGgKK3RoZSAyLjIuMTMga2VybmVsIGFzIGRpc3RyaWJ1dGVkLCBidXQgd2l0aCBhIGZldyBwYXRjaGVzIHRvIHRoZQorbW9kdWxlLCBJIHdhcyBhYmxlIHRvIGdyYWIgc29tZSBmcmFtZXMuIFNlZSA0LjAsIEZ1dHVyZSBXb3JrLgorCisKKworMi4wIENvbXBpbGF0aW9uLCBJbnN0YWxsYXRpb24sIGFuZCBDb25maWd1cmF0aW9uCisKKyAgVGhlIGMtcWNhbSBkZXBlbmRzIG9uIHBhcmFsbGVsIHBvcnQgc3VwcG9ydCwgdmlkZW80bGludXgsIGFuZCB0aGUKK0NvbG9yIFF1aWNrY2FtLiAgSXQgaXMgYWxzbyBuaWNlIHRvIGhhdmUgdGhlIHBhcmFsbGVsIHBvcnQgcmVhZGJhY2sKK3N1cHBvcnQgZW5hYmxlZC4gSSBlbmFibGVkIHRoZXNlIGFzIG1vZHVsZXMgZHVyaW5nIHRoZSBrZXJuZWwKK2NvbmZpZ3VyYXRpb24uICBUaGUgYXBwcm9wcmlhdGUgZmxhZ3MgYXJlOgorCisgICAgQ09ORklHX1BSSU5URVIgICAgICAgTSAgICBmb3IgbHAubywgcGFycG9ydC5vIHBhcnBvcnRfcGMubyBtb2R1bGVzCisgICAgQ09ORklHX1BOUF9QQVJQT1JUICAgTSBmb3IgYXV0b3Byb2JlLm8gSUVFRTEyODQgcmVhZGJhY2sgbW9kdWxlCisgICAgQ09ORklHX1BSSU5URVJfUkVBREJBQ0sgTSBmb3IgcGFycG9ydF9wcm9iZS5vIElFRUUxMjg0IHJlYWRiYWNrIG1vZHVsZQorICAgIENPTkZJR19WSURFT19ERVYgICAgIE0gICAgZm9yIHZpZGVvZGV2Lm8gdmlkZW80bGludXggbW9kdWxlCisgICAgQ09ORklHX1ZJREVPX0NRQ0FNICAgTSAgICBmb3IgYy1xY2FtLm8gIENvbG9yIFF1aWNrY2FtIG1vZHVsZSAKKworICBXaXRoIHRoZXNlIGZsYWdzLCB0aGUga2VybmVsIHNob3VsZCBjb21waWxlIGFuZCBpbnN0YWxsIHRoZSBtb2R1bGVzLgorVG8gcmVjb3JkIGFuZCBtb25pdG9yIHRoZSBjb21waWxhdGlvbiwgSSB1c2U6CisKKyAobWFrZSB6bGlsbyA7IFwKKyAgbWFrZSBtb2R1bGVzOyBcCisgIG1ha2UgbW9kdWxlc19pbnN0YWxsIDsgCisgIGRlcG1vZCAtYSApICY+bG9nICYKKyBsZXNzIGxvZyAgIyB0aGVuIGEgY2FwaXRhbCAnRicgdG8gd2F0Y2ggdGhlIHByb2dyZXNzCisgIAorQnV0IHRoYXQgaXMgbXkgcGVyc29uYWwgcHJlZmVyZW5jZS4KKworMi4yIENvbmZpZ3VyYXRpb24KKyAKKyAgVGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgbW9kdWxlIGNvbmZpZ3VyYXRpb24gYW5kIGRldmljZQorY29uZmlndXJhdGlvbi4gIEkgbGlrZSBrbW9kIG9yIGtlcm5lbGQgcHJvY2VzcyB3aXRoIHRoZQorL2V0Yy9tb2Rwcm9iZS5jb25mIGZpbGUgc28gdGhlIG1vZHVsZXMgY2FuIGF1dG9tYXRpY2FsbHkgbG9hZC91bmxvYWQgYXMKK3RoZXkgYXJlIHVzZWQuICBUaGUgdmlkZW8gZGV2aWNlcyBjb3VsZCBhbHJlYWR5IGV4aXN0LCBiZSBnZW5lcmF0ZWQKK3VzaW5nIE1BS0VERVYsIG9yIG5lZWQgdG8gYmUgY3JlYXRlZC4gIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGV0YWlsCit0aGVzZSBwcm9jZWR1cmVzLgorCisKKzIuMSBNb2R1bGUgQ29uZmlndXJhdGlvbiAgCisKKyAgVXNpbmcgbW9kdWxlcyByZXF1aXJlcyBhIGJpdCBvZiB3b3JrIHRvIGluc3RhbGwgYW5kIHBhc3MgdGhlCitwYXJhbWV0ZXJzLiAgVW5kZXJzdGFuZCB0aGF0IGVudHJpZXMgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mIG9mOgorCisgICBhbGlhcyBwYXJwb3J0X2xvd2xldmVsIHBhcnBvcnRfcGMKKyAgIG9wdGlvbnMgcGFycG9ydF9wYyBpbz0weDM3OCBpcnE9bm9uZQorICAgYWxpYXMgY2hhci1tYWpvci04MSB2aWRlb2RldgorICAgYWxpYXMgY2hhci1tYWpvci04MS0wIGMtcWNhbQorCit3aWxsIGNhdXNlIHRoZSBrbW9kL21vZHByb2JlIHRvIGRvIGNlcnRhaW4gdGhpbmdzLiAgSWYgeW91IGFyZQordXNpbmcga21vZCwgdGhlbiBhIHJlcXVlc3QgZm9yIGEgJ2NoYXItbWFqb3ItODEtMCcgd2lsbCBjYXVzZQordGhlICdjLXFjYW0nIG1vZHVsZSB0byBsb2FkLiAgSWYgeW91IGhhdmUgb3RoZXIgdmlkZW8gc291cmNlcyB3aXRoCittb2R1bGVzLCB5b3UgbWlnaHQgd2FudCB0byBhc3NpZ24gdGhlIGRpZmZlcmVudCBtaW5vciBudW1iZXJzIHRvCitkaWZmZXJlbnQgbW9kdWxlcy4KKworMi4yIERldmljZSBDb25maWd1cmF0aW9uCisKKyAgQXQgdGhpcyBwb2ludCwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGV2aWNlIGZpbGVzIGV4aXN0LgorVmlkZW80bGludXggdXNlZCB0aGUgL2Rldi92aWRlbyogZmlsZXMsIGFuZCB3ZSB3YW50IHRvIGF0dGFjaCB0aGUKK1F1aWNrY2FtIHRvIG9uZSBvZiB0aGVzZS4KKworICAgbHMgLWxhZCAvZGV2L3ZpZGVvKiAgIyBzaG91bGQgcHJvZHVjZSBhIGxpc3Qgb2YgdGhlIHZpZGVvIGRldmljZXMKKworSWYgdGhlIHZpZGVvIGRldmljZXMgZG8gbm90IGV4aXN0LCB5b3UgY2FuIGNyZWF0ZSB0aGVtIHdpdGg6CisKKyAgc3UKKyAgY2QgL2RldgorICBmb3IgaWkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiA7IGRvCisgICAgbWtub2QgdmlkZW8kaWkgYyA4MSAkaWkgICAjIGNoYXItbWFqb3ItODEtWzAtMTZdCisgICAgY2hvd24gcm9vdC5yb290IHZpZGVvJGlpICAjIG93bmVkIGJ5IHJvb3QKKyAgICBjaG1vZCA2MDAgdmlkZW8kaWkgICAgICAgICMgcmVhZC93cml0YWJsZSBieSByb290IG9ubHkKKyAgZG9uZQorCisgIExvdHMgb2YgcGVvcGxlIGNvbm5lY3QgdmlkZW8wIHRvIHZpZGVvIGFuZCBidHR2LCBidXQgeW91IG1pZ2h0IHdhbnQKK3lvdXIgYy1xY2FtIHRvIG1lYW4gc29tZXRoaW5nIG1vcmU6CisKKyAgIGxuIC1zIHZpZGVvMCBjLXFjYW0gICMgbWFrZSAvZGV2L2MtcWNhbSBhIHdvcmtpbmcgZmlsZQorICAgbG4gLXMgYy1xY2FtIHZpZGVvICAgIyBtYWtlIC9kZXYvYy1xY2FtIHlvdXIgZGVmYXVsdCB2aWRlbyBzb3VyY2UKKworICBCdXQgdGhlc2UgYXJlIGNvbnZlbmllbmNlcy4gIFRoZSBpbXBvcnRhbnQgcGFydCBpcyB0byBtYWtlIHRoZSBwcm9wZXIKK3NwZWNpYWwgY2hhcmFjdGVyIGZpbGVzIHdpdGggdGhlIHJpZ2h0IG1ham9yIGFuZCBtaW5vciBudW1iZXJzLiAgQWxsCitvZiB0aGUgc3BlY2lhbCBkZXZpY2UgZmlsZXMgYXJlIGxpc3RlZCBpbiAuLi9kZXZpY2VzLnR4dC4gIElmIHlvdQord291bGQgbGlrZSB0aGUgYy1xY2FtIHJlYWRhYmxlIGJ5IG5vbi1yb290IHVzZXJzLCB5b3Ugd2lsbCBuZWVkIHRvCitjaGFuZ2UgdGhlIHBlcm1pc3Npb25zLgorCiszLjAgVHJvdWJsZXNob290aW5nCisKKyAgSWYgdGhlIHNhbXBsZSBwcm9ncmFtIGJlbG93LCB2NGxncmFiLCBnaXZlcyB5b3Ugb3V0cHV0IHRoZW4KK2V2ZXJ5dGhpbmcgaXMgd29ya2luZy4KKworICAgIHY0bGdyYWIgfCB3YyAjIHNob3VsZCBnaXZlIHlvdSBhIGNvdW50IG9mIGNoYXJhY3RlcnMKKworICBPdGhlcndpc2UsIHlvdSBoYXZlIHNvbWUgcHJvYmxlbS4KKworICBUaGUgYy1xY2FtIGlzIElFRUUxMjg0IGNvbXBhdGlibGUsIHNvIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHByb2MgZmlsZQorc3lzdGVtIChDT05GSUdfUFJPQ19GUyksIHRoZSBwYXJhbGxlbCBwcmludGVyIHN1cHBvcnQKKyhDT05GSUdfUFJJTlRFUiksIHRoZSBJRUVFIDEyODQgc3lzdGVtLChDT05GSUdfUFJJTlRFUl9SRUFEQkFDSyksIHlvdQorc2hvdWxkIGJlIGFibGUgdG8gcmVhZCBzb21lIGlkZW50aWZpY2F0aW9uIGZyb20geW91ciBxdWlja2NhbSB3aXRoCisKKyAgICAgICAgIG1vZHByb2JlIC12IHBhcnBvcnQKKyAgICAgICAgIG1vZHByb2JlIC12IHBhcnBvcnRfcHJvYmUKKyAgICAgICAgIGNhdCAvcHJvYy9wYXJwb3J0L1BPUlROVU1CRVIvYXV0b3Byb2JlCitSZXR1cm5zOgorICBDTEFTUzpNRURJQTsKKyAgTU9ERUw6Q29sb3IgUXVpY2tDYW0gMi4wOworICBNQU5VRkFDVFVSRVI6Q29ubmVjdGl4OworCisgIEEgZ29vZCByZXNwb25zZSB0byB0aGlzIGluZGljYXRlcyB0aGF0IHlvdXIgY29sb3IgcXVpY2tjYW0gaXMgYWxpdmUKK2FuZCB3ZWxsLiAgQSBjb21tb24gcHJvYmxlbSBpcyB0aGF0IHRoZSBjdXJyZW50IGRyaXZlciBkb2VzIG5vdAorcmVsaWFibHkgZGV0ZWN0IGEgYy1xY2FtLCBldmVuIHRob3VnaCBvbmUgaXMgYXR0YWNoZWQuICBJbiB0aGlzIGNhc2UsCisKKyAgICAgbW9kcHJvYmUgLXYgYy1xY2FtICAgICAKK29yCisgICAgIGluc21vZCAtdiBjLXFjYW0KKworICBSZXR1cm5zIGEgbWVzc2FnZSBzYXlpbmcgIkRldmljZSBvciByZXNvdXJjZSBidXN5IiAgRGV2ZWxvcG1lbnQgaXMKK2N1cnJlbnRseSB1bmRlcndheSwgYnV0IGEgd29ya2Fyb3VuZCBpcyB0byBwYXRjaCB0aGUgbW9kdWxlIHRvIHNraXAKK3RoZSBkZXRlY3Rpb24gY29kZSBhbmQgYXR0YWNoIHRvIGEgZGVmaW5lZCBwb3J0LiAgQ2hlY2sgdGhlCit2aWRlbzRsaW51eCBtYWlsaW5nIGxpc3QgYW5kIGFyY2hpdmUgZm9yIG1vcmUgY3VycmVudCBpbmZvcm1hdGlvbi4KKworMy4xIENoZWNrbGlzdDoKKworICBDYW4geW91IGdldCBhbiBpbWFnZT8KKyAgICAgICAgICAgIHY0bGdyYWIgPnFjYW0ucHBtIDsgd2MgcWNhbS5wcG0gOyB4diBxY2FtLnBwbQorCisgIElzIGEgd29ya2luZyBjLXFjYW0gY29ubmVjdGVkIHRvIHRoZSBwb3J0PyAKKyAgICAgICAgICAgIGdyZXAgXiAvcHJvYy9wYXJwb3J0Lz8vYXV0b3Byb2JlCisKKyAgRG8gdGhlIC9kZXYvdmlkZW8qIGZpbGVzIGV4aXN0PyAgCisgICAgICAgICAgICBscyAtbGFkIC9kZXYvdmlkZW8KKworICBJcyB0aGUgYy1xY2FtIG1vZHVsZSBsb2FkZWQ/ICAgICAKKyAgICAgICAgICAgIG1vZHByb2JlIC12IGMtcWNhbSA7IGxzbW9kCisKKyAgRG9lcyB0aGUgY2FtZXJhIHdvcmsgd2l0aCBhbHRlcm5hdGUgcHJvZ3JhbXM/IGNxY2FtLCBldGM/CisKKworCisKKzQuMCBGdXR1cmUgV29yayAvIGN1cnJlbnQgd29ya2Fyb3VuZHMKKworICBJdCBpcyBob3BlZCB0aGF0IHRoaXMgc2VjdGlvbiB3aWxsIHNvb24gYmVjb21lIG9ic29sZXRlLCBidXQgaWYgaXQKK2lzbid0LCB5b3UgbWlnaHQgdHJ5IHBhdGNoaW5nIHRoZSBjLXFjYW0gbW9kdWxlIHRvIGFkZCBhIHBhcnBvcnQ9eHh4CitvcHRpb24gYXMgaW4gdGhlIGJ3LXFjYW0gbW9kdWxlIHNvIHlvdSBjYW4gc3BlY2lmeSB0aGUgcGFyYWxsZWwgcG9ydDoKKworICAgICAgIGluc21vZCAtdiBjLXFjYW0gcGFycG9ydD0wICAKKworQW5kIGJ5cGFzcyB0aGUgZGV0ZWN0aW9uIGNvZGUsIHNlZSAuLi8uLi9kcml2ZXJzL2NoYXIvYy1xY2FtLmMgYW5kCitsb29rIGZvciB0aGUgJ3FjX2RldGVjdCcgY29kZSBhbmQgY2FsbC4KKworICBOb3RlIHRoYXQgdGhlcmUgaXMgd29yayBpbiBwcm9ncmVzcyB0byBjaGFuZ2UgdGhlIHZpZGVvNGxpbnV4IEFQSSwKK3RoaXMgd29yayBpcyBkb2N1bWVudGVkIGF0IHRoZSB2aWRlbzRsaW51eDIgc2l0ZSBsaXN0ZWQgYmVsb3cuCisKKworOS4wIC0tLSBBIHNhbXBsZSBwcm9ncmFtIHVzaW5nIHY0bGdyYWJiZXIsIAorCitUaGlzIHByb2dyYW0gaXMgYSBzaW1wbGUgaW1hZ2UgZ3JhYmJlciB0aGF0IHdpbGwgY29weSBhIGZyYW1lIGZyb20gdGhlCitmaXJzdCB2aWRlbyBkZXZpY2UsIC9kZXYvdmlkZW8wIHRvIHN0YW5kYXJkIG91dHB1dCBpbiBwb3J0YWJsZSBwaXhtYXAKK2Zvcm1hdCAoLnBwbSkgIFVzaW5nIHRoaXMgbGlrZTogJ3Y0bGdyYWIgfCBjb252ZXJ0IC0gYy1xY2FtLmpwZycKK3Byb2R1Y2VkIHRoaXMgcGljdHVyZSBvZiBtZSBhdCAKKyAgICBodHRwOi8vbXVnLnN5cy52aXJnaW5pYS5lZHUvfmRyZjVuL2V4dHJhcy9jLXFjYW0uanBnCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tIDg8IC0tLS0tLS0tLS0tLS0tLS0gODwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogU2ltcGxlIFZpZGVvNExpbnV4IGltYWdlIGdyYWJiZXIuICovCisvKgorICoJVmlkZW80TGludXggRHJpdmVyIFRlc3QvRXhhbXBsZSBGcmFtZWdyYWJiaW5nIFByb2dyYW0KKyAqCisgKglDb21waWxlIHdpdGg6CisgKgkJZ2NjIC1zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgdjRsZ3JhYi5jIC1vIHY0bGdyYWIKKyAqICAgICAgVXNlIGFzOgorICogICAgICAgICAgICAgIHY0bGdyYWIgPmltYWdlLnBwbQorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OC0wNS0wMywgUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4gIAorICogICAgICBDb3BpZWQgZnJvbSBodHRwOi8vd3d3LnRhemVuZGEuZGVtb24uY28udWsvcGhpbC92Z3JhYmJlci5jIAorICogICAgICB3aXRoIG1pbm9yIG1vZGlmaWNhdGlvbnMgKERhdmUgRm9ycmVzdCwgZHJmNW5AdmlyZ2luaWEuZWR1KS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorCisjZGVmaW5lIEZJTEUgIi9kZXYvdmlkZW8wIgorCisvKiBTdG9sZSB0aGlzIGZyb20gdHZzZXQuYyAqLworCisjZGVmaW5lIFJFQURfVklERU9fUElYRUwoYnVmLCBmb3JtYXQsIGRlcHRoLCByLCBnLCBiKSAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlcHRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHIpID0gKGcpID0gKGIpID0gKCpidWYrKyA8PCA4KTtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHIpID0gKGcpID0gKGIpID0gICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBzaG9ydCAqKSBidWYpOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBjYXNlIFZJREVPX1BBTEVUVEVfUkdCNTY1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRtcCA9ICoodW5zaWduZWQgc2hvcnQgKilidWY7ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyKSA9IHRtcCYweEY4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChnKSA9ICh0bXA8PDUpJjB4RkMwMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChiKSA9ICh0bXA8PDExKSYweEY4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBjYXNlIFZJREVPX1BBTEVUVEVfUkdCNTU1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyKSA9IChidWZbMF0mMHhGOCk8PDg7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChnKSA9ICgoYnVmWzBdIDw8IDUgfCBidWZbMV0gPj4gMykmMHhGOCk8PDg7ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChiKSA9ICgoYnVmWzFdIDw8IDIgKSAmIDB4RjgpPDw4OyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBjYXNlIFZJREVPX1BBTEVUVEVfUkdCMjQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyKSA9IGJ1ZlswXSA8PCA4OyAoZykgPSBidWZbMV0gPDwgODsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChiKSA9IGJ1ZlsyXSA8PCA4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvcm1hdCAlZCBub3QgeWV0IHN1cHBvcnRlZFxuIiwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCitpbnQgZ2V0X2JyaWdodG5lc3NfYWRqKHVuc2lnbmVkIGNoYXIgKmltYWdlLCBsb25nIHNpemUsIGludCAqYnJpZ2h0bmVzcykgeworICBsb25nIGksIHRvdCA9IDA7CisgIGZvciAoaT0wO2k8c2l6ZSozO2krKykKKyAgICB0b3QgKz0gaW1hZ2VbaV07CisgICpicmlnaHRuZXNzID0gKDEyOCAtIHRvdC8oc2l6ZSozKSkvMzsKKyAgcmV0dXJuICEoKHRvdC8oc2l6ZSozKSkgPj0gMTI2ICYmICh0b3QvKHNpemUqMykpIDw9IDEzMCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisgIGludCBmZCA9IG9wZW4oRklMRSwgT19SRE9OTFkpLCBmOworICBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSBjYXA7CisgIHN0cnVjdCB2aWRlb193aW5kb3cgd2luOworICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2cGljOworCisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKnNyYzsKKyAgaW50IGJwcCA9IDI0LCByLCBnLCBiOworICB1bnNpZ25lZCBpbnQgaSwgc3JjX2RlcHRoOworCisgIGlmIChmZCA8IDApIHsKKyAgICBwZXJyb3IoRklMRSk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmIChpb2N0bChmZCwgVklESU9DR0NBUCwgJmNhcCkgPCAwKSB7CisgICAgcGVycm9yKCJWSURJT0dDQVAiKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIigiIEZJTEUgIiBub3QgYSB2aWRlbzRsaW51eCBkZXZpY2U/KVxuIik7CisgICAgY2xvc2UoZmQpOworICAgIGV4aXQoMSk7CisgIH0KKworICBpZiAoaW9jdGwoZmQsIFZJRElPQ0dXSU4sICZ3aW4pIDwgMCkgeworICAgIHBlcnJvcigiVklESU9DR1dJTiIpOworICAgIGNsb3NlKGZkKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgaWYgKGlvY3RsKGZkLCBWSURJT0NHUElDVCwgJnZwaWMpIDwgMCkgeworICAgIHBlcnJvcigiVklESU9DR1BJQ1QiKTsKKyAgICBjbG9zZShmZCk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmIChjYXAudHlwZSAmIFZJRF9UWVBFX01PTk9DSFJPTUUpIHsKKyAgICB2cGljLmRlcHRoPTg7CisgICAgdnBpYy5wYWxldHRlPVZJREVPX1BBTEVUVEVfR1JFWTsgICAgLyogOGJpdCBncmV5ICovCisgICAgaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYykgPCAwKSB7CisgICAgICB2cGljLmRlcHRoPTY7CisgICAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKSA8IDApIHsKKyAgICAgICAgdnBpYy5kZXB0aD00OworICAgICAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKSA8IDApIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBmaW5kIGEgc3VwcG9ydGVkIGNhcHR1cmUgZm9ybWF0LlxuIik7CisgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgdnBpYy5kZXB0aD0yNDsKKyAgICB2cGljLnBhbGV0dGU9VklERU9fUEFMRVRURV9SR0IyNDsKKyAgICAKKyAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKSA8IDApIHsKKyAgICAgIHZwaWMucGFsZXR0ZT1WSURFT19QQUxFVFRFX1JHQjU2NTsKKyAgICAgIHZwaWMuZGVwdGg9MTY7CisgICAgICAKKyAgICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpPT0tMSkgeworICAgICAgICB2cGljLnBhbGV0dGU9VklERU9fUEFMRVRURV9SR0I1NTU7CisgICAgICAgIHZwaWMuZGVwdGg9MTU7CisgICAgICAgIAorICAgICAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKT09LTEpIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBmaW5kIGEgc3VwcG9ydGVkIGNhcHR1cmUgZm9ybWF0LlxuIik7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIAorICBidWZmZXIgPSBtYWxsb2Mod2luLndpZHRoICogd2luLmhlaWdodCAqIGJwcCk7CisgIGlmICghYnVmZmVyKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgZG8geworICAgIGludCBuZXdicmlnaHQ7CisgICAgcmVhZChmZCwgYnVmZmVyLCB3aW4ud2lkdGggKiB3aW4uaGVpZ2h0ICogYnBwKTsKKyAgICBmID0gZ2V0X2JyaWdodG5lc3NfYWRqKGJ1ZmZlciwgd2luLndpZHRoICogd2luLmhlaWdodCwgJm5ld2JyaWdodCk7CisgICAgaWYgKGYpIHsKKyAgICAgIHZwaWMuYnJpZ2h0bmVzcyArPSAobmV3YnJpZ2h0IDw8IDgpOworICAgICAgaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYyk9PS0xKSB7CisgICAgICAgIHBlcnJvcigiVklESU9TUElDVCIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0gd2hpbGUgKGYpOworCisgIGZwcmludGYoc3Rkb3V0LCAiUDZcbiVkICVkIDI1NVxuIiwgd2luLndpZHRoLCB3aW4uaGVpZ2h0KTsKKworICBzcmMgPSBidWZmZXI7CisKKyAgZm9yIChpID0gMDsgaSA8IHdpbi53aWR0aCAqIHdpbi5oZWlnaHQ7IGkrKykgeworICAgIFJFQURfVklERU9fUElYRUwoc3JjLCB2cGljLnBhbGV0dGUsIHNyY19kZXB0aCwgciwgZywgYik7CisgICAgZnB1dGMocj4+OCwgc3Rkb3V0KTsKKyAgICBmcHV0YyhnPj44LCBzdGRvdXQpOworICAgIGZwdXRjKGI+PjgsIHN0ZG91dCk7CisgIH0KKyAgICAKKyAgY2xvc2UoZmQpOworICByZXR1cm4gMDsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tIDg8IC0tLS0tLS0tLS0tLS0tLS0gODwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisxMC4wIC0tLSBPdGhlciBJbmZvcm1hdGlvbgorCitVc2UgdGhlIC4uLy4uL01haW50YWluZXJzIGZpbGUsIHBhcnRpY3VsYXJseSB0aGUgIFZJREVPIEZPUiBMSU5VWCBhbmQgUEFSQUxMRUwKK1BPUlQgU1VQUE9SVCBzZWN0aW9ucworCitUaGUgdmlkZW80bGludXggcGFnZToKKyAgaHR0cDovL3JvYWRydW5uZXIuc3dhbnNlYS5saW51eC5vcmcudWsvdjRsLnNodG1sCisKK1RoZSB2aWRlbzRsaW51eDIgcGFnZToKKyAgaHR0cDovL21pbGxlbm5pdW0uZGlhZHMuY29tL2JkaXJrcy92NGwyLmh0bQorCitTb21lIHdlYiBwYWdlcyBhYm91dCB0aGUgcXVpY2tjYW1zOgorICAgaHR0cDovL3d3dy5ka2Z6LWhlaWRlbGJlcmcuZGUvTWFjcm9tb2wvd2VkZW1hbm4vbWluaS1IT1dUTy1jcWNhbS5odG1sCisKKyAgIGh0dHA6Ly93d3cuY3J5bndyLmNvbS9xY3BjLyAgICAgICAgICAgIFF1aWNrQ2FtIFRoaXJkLVBhcnR5IERyaXZlcnMKKyAgIGh0dHA6Ly93d3cuY3J5bndyLmNvbS9xY3BjL3JlLmh0bWwgICAgIFNvbWUgUmV2ZXJzZSBFbmdpbmVlcmluZworICAgaHR0cDovL2NzZS51bmwuZWR1L35jbHVlbmluZy9ncWNhbS8gICAgdjRsIGNsaWVudAorICAgaHR0cDovL3Bob2Jvcy5pbGx0ZWwuZGVudmVyLmNvLnVzL3B1Yi9xY3JlYWQvIGRvZXNuJ3QgdXNlIHY0bAorICAgZnRwOi8vZnRwLmNzLnVubS5lZHUvcHViL2NocmlzL3F1aWNrY2FtLyAgIEhhcyBsb3RzIG9mIGRyaXZlcnMKKyAgIGh0dHA6Ly93d3cuY3MuZHVrZS5lZHUvfnJleW5vbGRzL3F1aWNrY2FtLyBIYXMgbG90cyBvZiBpbmZvcm1hdGlvbgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmNwaWEgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jcGlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NWU3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jcGlhCkBAIC0wLDAgKzEsMTkxIEBACitUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgQ1BpQSBQUEMyIGRyaXZlbiBwYXJhbGxlbCBjb25uZWN0ZWQKK0NhbWVyYS4gRm9yIGV4YW1wbGUgdGhlIENyZWF0aXZlIFdlYmNhbUlJIGlzIENQaUEgZHJpdmVuLgorCisgICApIFsxXVBldGVyIFByZWdsZXIsIExpbnogMjAwMCwgcHVibGlzaGVkIHVuZGVyIHRoZSBbMl1HTlUgR1BMCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVU0FHRToKKworR2VuZXJhbDoKKz09PT09PT09CisKKzEpIE1ha2Ugc3VyZSB5b3UgaGF2ZSBjcmVhdGVkIHRoZSB2aWRlbyBkZXZpY2VzICgvZGV2L3ZpZGVvKik6CisKKy0gaWYgeW91IGhhdmUgYSByZWNlbnQgTUFLRURFViBkbyBhICdjZCAvZGV2Oy4vTUFLRURFViB2aWRlbycKKy0gb3RoZXJ3aXNlIGRvIGE6CisKK2NkIC9kZXYKK21rbm9kIHZpZGVvMCBjIDgxIDAKK2xuIC1zIHZpZGVvMCB2aWRlbworCisyKSBDb21waWxlIHRoZSBrZXJuZWwgKHNlZSBiZWxvdyBmb3IgdGhlIGxpc3Qgb2Ygb3B0aW9ucyB0byB1c2UpLAorICAgY29uZmlndXJlIHlvdXIgcGFycG9ydCBhbmQgcmVib290LgorCiszKSBJZiBhbGwgd29ya2VkIHdlbGwgeW91IHNob3VsZCBnZXQgbWVzc2FnZXMgc2ltaWxhcgorICAgdG8gdGhlIGZvbGxvd2luZyAoeW91ciB2ZXJzaW9ucyBtYXkgYmUgZGlmZmVyZW50KSBvbiB0aGUgY29uc29sZToKKworVjRMLURyaXZlciBmb3IgVmlzaW9uIENQaUEgYmFzZWQgY2FtZXJhcyB2MC43LjQKK3BhcnBvcnQwOiByZWFkMiB0aW1lb3V0LgorcGFycG9ydDA6IE11bHRpbWVkaWEgZGV2aWNlLCBWTFNJIFZpc2lvbiBMdGQgUFBDMgorUGFyYWxsZWwgcG9ydCBkcml2ZXIgZm9yIFZpc2lvbiBDUGlBIGJhc2VkIGNhbWVyYQorICBDUElBIFZlcnNpb246IDEuMjAgKDIuMCkKKyAgQ1BJQSBQblAtSUQ6IDA1NTM6MDAwMjowMTAwCisgIFZQLVZlcnNpb246IDEuMCAwMTAwCisgIDEgY2FtZXJhKHMpIGZvdW5kCisKKworQXMgbW9kdWxlczoKKz09PT09PT09PT09CisKK01ha2Ugc3VyZSB5b3UgaGF2ZSBzZWxlY3RlZCB0aGUgZm9sbG93aW5nIGtlcm5lbCBvcHRpb25zICh5b3UgY2FuCitzZWxlY3QgYWxsIHN0dWZmIGFzIG1vZHVsZXMpOgorCitUaGUgY3BpYS1zdHVmZiBpcyBpbiB0aGUgc2VjdGlvbiAnQ2hhcmFjdGVyIGRldmljZXMgLT4gVmlkZW8gRm9yIExpbnV4Jy4KKworQ09ORklHX1BBUlBPUlQ9bQorQ09ORklHX1BBUlBPUlRfUEM9bQorQ09ORklHX1BBUlBPUlRfUENfRklGTz15CitDT05GSUdfUEFSUE9SVF8xMjg0PXkKK0NPTkZJR19WSURFT19ERVY9bQorQ09ORklHX1ZJREVPX0NQSUE9bQorQ09ORklHX1ZJREVPX0NQSUFfUFA9bQorCitGb3IgYXV0b2xvYWRpbmcgb2YgYWxsIHRob3NlIG1vZHVsZXMgeW91IG5lZWQgdG8gdGVsbCBtb2R1bGUtaW5pdC10b29scworc29tZSBzdHVmZi4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIG1vZHVsZS1pbml0LXRvb2xzIGNvbmZpZy1maWxlCisoZS5nLiAvZXRjL21vZHByb2JlLmNvbmYgb3Igd2hlcmV2ZXIgeW91ciBkaXN0cmlidXRpb24gZG9lcyBzdG9yZSB0aGF0CitzdHVmZik6CisKK29wdGlvbnMgcGFycG9ydF9wYyBpbz0weDM3OCBpcnE9NyBkbWE9MworYWxpYXMgY2hhci1tYWpvci04MSBjcGlhX3BwCisKK1RoZSBmaXJzdCBsaW5lIHRlbGxzIHRoZSBkbWEvaXJxIGNoYW5uZWxzIHRvIHVzZS4gVGhvc2UgX211c3RfIG1hdGNoCit0aGUgc2V0dGluZ3Mgb2YgeW91ciBCSU9TLiBEbyBOT1Qgc2ltcGx5IHVzZSB0aGUgdmFsdWVzIGFib3ZlLiAgU2VlCitEb2N1bWVudGF0aW9uL3BhcnBvcnQudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuIFRoZSBzZWNvbmQKK2xpbmUgYXNzb2NpYXRlcyB0aGUgdmlkZW8tZGV2aWNlIGZpbGUgd2l0aCB0aGUgZHJpdmVyLiBPZiBjYXVzZSB5b3UKK2NhbiBhbHNvIGxvYWQgdGhlIG1vZHVsZXMgb25jZSB1cG9uIGJvb3QgKHVzdWFsbHkgZG9uZSBpbiAvZXRjL21vZHVsZXMpLgorCitMaW5rZWQgaW50byB0aGUga2VybmVsOgorPT09PT09PT09PT09PT09PT09PT09PT0KKworTWFrZSBzdXJlIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBmb2xsb3dpbmcga2VybmVsIG9wdGlvbnMuIE5vdGUgdGhhdAoreW91IGNhbm5vdCBjb21waWxlIHRoZSBwYXJwb3J0LXN0dWZmIGFzIG1vZHVsZXMgYW5kIHRoZSBjcGlhLWRyaXZlcgorc3RhdGljYWxseSAodGhlIG90aGVyIHdheSByb3VuZCBpcyBva2F5IHRob3VnaCkuCisKK1RoZSBjcGlhLXN0dWZmIGlzIGluIHRoZSBzZWN0aW9uICdDaGFyYWN0ZXIgZGV2aWNlcyAtPiBWaWRlbyBGb3IgTGludXgnLgorCitDT05GSUdfUEFSUE9SVD15CitDT05GSUdfUEFSUE9SVF9QQz15CitDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorQ09ORklHX1ZJREVPX0RFVj15CitDT05GSUdfVklERU9fQ1BJQT15CitDT05GSUdfVklERU9fQ1BJQV9QUD15CisKK1RvIHVzZSBETUEvaXJxIHlvdSB3aWxsIG5lZWQgdG8gdGVsbCB0aGUga2VybmVsIHVwb24gYm9vdCB0aW1lIHRoZQoraGFyZHdhcmUgY29uZmlndXJhdGlvbiBvZiB0aGUgcGFycG9ydC4gWW91IGNhbiBnaXZlIHRoZSBib290LXBhcmFtZXRlcgorYXQgdGhlIExJTE8tcHJvbXB0IG9yIHNwZWNpZnkgaXQgaW4gbGlsby5jb25mLiBJIHVzZSB0aGUgZm9sbG93aW5nCithcHBlbmQtbGluZSBpbiBsaWxvLmNvbmY6CisKKyAgICAgICAgYXBwZW5kPSJwYXJwb3J0PTB4Mzc4LDcsMyIKKworU2VlIERvY3VtZW50YXRpb24vcGFycG9ydC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitjb25maWd1cmF0aW9uIG9mIHRoZSBwYXJwb3J0IGFuZCB0aGUgdmFsdWVzIGdpdmVuIGFib3ZlLiBEbyBub3Qgc2ltcGx5Cit1c2UgdGhlIHZhbHVlcyBnaXZlbiBhYm92ZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGRUFUVVJFUzoKKworLSBtbWFwL3JlYWQgdjRsLWludGVyZmFjZSAoYnV0IG5vIG92ZXJsYXkpCistIGltYWdlIGZvcm1hdHM6IENJRi9RQ0lGLCBTSUYvUVNJRiwgdmFyaW91cyBvdGhlcnMgdXNlZCBieSBpc2FiZWw7CisgIG5vdGU6IGFsbCBzaXplcyBleGNlcHQgQ0lGL1FDSUYgYXJlIGltcGxlbWVudGVkIGJ5IGNsaXBwaW5nLCBpLmUuCisgIHBpeGVscyBhcmUgbm90IHVwbG9hZGVkIGZyb20gdGhlIGNhbWVyYQorLSBwYWxldHRlczogVklERU9fUEFMRVRURV9HUkFZLCBWSURFT19QQUxFVFRFX1JHQjU2NSwgVklERU9fUEFMRVRURV9SR0I1NTUsCisgIFZJREVPX1BBTEVUVEVfUkdCMjQsIFZJREVPX1BBTEVUVEVfUkdCMzIsIFZJREVPX1BBTEVUVEVfWVVZViwKKyAgVklERU9fUEFMRVRURV9VWVZZLCBWSURFT19QQUxFVFRFX1lVVjQyMgorLSBzdGF0ZSBpbmZvcm1hdGlvbiAoY29sb3IgYmFsYW5jZSwgZXhwb3N1cmUsIC4uLikgaXMgcHJlc2VydmVkIGJldHdlZW4KKyAgZGV2aWNlIG9wZW5zCistIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciBjYW1lcmEgdmlhIHByb2MtaW50ZXJmYWNlIChfYWxsXyBjYW1lcmEgc2V0dGluZ3MgYXJlCisgIHN1cHBvcnRlZCksIHRoZXJlIGlzIGFsc28gYSBweXRob24tZ3RrIGFwcGxpY2F0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBbM10KKy0gd29ya3MgdW5kZXIgU01QIChidXQgdGhlIGRyaXZlciBpcyBjb21wbGV0ZWx5IHNlcmlhbGl6ZWQgYW5kIHN5bmNocm9ub3VzKQorICBzbyB5b3UgZ2V0IG5vIGJlbmVmaXQgZnJvbSBTTVAsIGJ1dCBhdCBsZWFzdCBpdCBkb2VzIG5vdCBjcmFzaCB5b3VyIGJveAorLSBtaWdodCB3b3JrIGZvciBub24tSW50ZWwgYXJjaGl0ZWN0dXJlLCBsZXQgdXMga25vdyBhYm91dCB0aGlzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVEVTVEVEIEFQUExJQ0FUSU9OUzoKKworLSBhIHNpbXBsZSB0ZXN0IGFwcGxpY2F0aW9uIGJhc2VkIG9uIFh0IGlzIGF2YWlsYWJsZSBhdCBbM10KKy0gYW5vdGhlciB0ZXN0LWFwcGxpY2F0aW9uIGJhc2VkIG9uIGdxY2FtLTAuNCAodXNlcyBHVEspCistIGdxY2FtLTAuNiBzaG91bGQgd29yaworLSB4YXd0di0zLnggKGFsc28gdGhlIHdlYmNhbSBzb2Z0d2FyZSkKKy0geGF3dHYtMi40NgorLSB3M2NhbSAoY2dpLWludGVyZmFjZSBhbmQgdmlkY2F0LCBlLmcuIHlvdSBtYXkgdHJ5IG91dCAndmlkY2F0ICB8eHYKKyAgLW1heHBlY3QgLXJvb3QgLXF1aXQgK25vcmVzZXRyb290IC1ybW9kZSA1IC0nKQorLSB2aWMsIHRoZSBNQk9ORSB2aWRlbyBjb25mZXJlbmNpbmcgdG9vbCAodmVyc2lvbiAyLjh1Y2w0LTEpCistIGlzYWJlbCAzUjRiZXRhIChiYXJlbHkgd29ya2luZywgYnV0IEFGQUlDVCBhbGwgdGhlIHByb2JsZW1zIGFyZSBvbgorICB0aGVpciBzaWRlKQorLSBjYW1zZXJ2LTAuNDAKKworU2VlIFszXSBmb3IgcG9pbnRlcnMgdG8gdjRsLWFwcGxpY2F0aW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitLTk9XTiBQUk9CTEVNUzoKKworLSBzb21lIGFwcGxpY2F0aW9ucyBkbyBub3QgaGFuZGxlIHRoZSBpbWFnZSBmb3JtYXQgY29ycmVjdGx5LCB5b3Ugd2lsbAorICBzZWUgc3RyYW5nZSBob3Jpem9udGFsIHN0cmlwZXMgaW5zdGVhZCBvZiBhIG5pY2UgcGljdHVyZSAtPiBtYWtlIHN1cmUKKyAgeW91ciBhcHBsaWNhdGlvbiBkb2VzIHVzZSBhIHN1cHBvcnRlZCBpbWFnZSBzaXplIG9yIHF1ZXJpZXMgdGhlIGRyaXZlcgorICBmb3IgdGhlIGFjdHVhbGx5IHVzZWQgc2l6ZSAocmVhc29uIGJlaGluZCB0aGlzOiB0aGUgY2FtZXJhIGNhbm5vdAorICBwcm92aWRlIGFueSBpbWFnZSBmb3JtYXQsIHNvIGlmIHNpemUgTnhNIGlzIHJlcXVlc3RlZCB0aGUgZHJpdmVyIHdpbGwKKyAgdXNlIGEgZm9ybWF0IHRvIHRoZSBjbG9zZXN0IGZpdHRpbmcgTjF4TTEsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm93CisgIHF1ZXJ5IGZvciB0aGlzIGdyYW50ZWQgc2l6ZSwgbW9zdCBhcHBsaWNhdGlvbnMgZG8gbm90KS4KKy0gYWxsIHRoZSB0b2RvIDspCistIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggbGlnaHQgYW5kIHRoZSBwaWN0dXJlIGlzIHRvbyBkYXJrIHRyeSB0bworICBhZGp1c3QgdGhlIFNldFNlbnNvckZQUyBzZXR0aW5nLCBhdXRvbWF0aWMgZnJhbWUgcmF0ZSBhZGp1c3RtZW50CisgIGhhcyBpdHMgcHJpY2UKKy0gZG8gbm90IHRyeSBvdXQgaXNhYmVsIDNSNGJldGEgKGJ1aWx0IDEzNSksIHlvdSB3aWxsIGJlIGRpc2FwcG9pbnRlZAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RPRE86CisKKy0gbXVsdGlwbGUgY2FtZXJhIHN1cHBvcnQgKHN0cnVjdCBjYW1lcmEgb3Igc29tZXRoaW5nKSAtIFRoaXMgc2hvdWxkIHdvcmssCisgIGJ1dCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgeWV0LgorLSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbmNlPworLSBTTVAtc2FmZSBhc3luY2hyb25vdXMgbW1hcCBpbnRlcmZhY2UKKy0gbmliYmxlIG1vZGUgZm9yIG9sZCBwYXJwb3J0IGludGVyZmFjZXMKKy0gc3RyZWFtaW5nIGNhcHR1cmUsIHRoaXMgc2hvdWxkIGdpdmUgYSBwZXJmb3JtYW5jZSBnYWluCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU1QTEVNRU5UQVRJT04gTk9URVM6CisKK1RoZSBjYW1lcmEgY2FuIGFjdCBpbiB0d28gbW9kZXMsIHN0cmVhbWluZyBvciBncmFiYmluZy4gUmlnaHQgbm93IGEKK3BvbGxpbmcgZ3JhYi1zY2hlbWUgaXMgdXNlZC4gTWF5YmUgaW50ZXJydXB0IGRyaXZlbiBzdHJlYW1pbmcgd2lsbCBiZQordXNlZCBmb3IgYSBhc3luY2hyb25vdXMgbW1hcCBpbnRlcmZhY2UgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiB0aGUKK2RyaXZlci4gVGhpcyBtaWdodCBnaXZlIGEgYmV0dGVyIGZyYW1lIHJhdGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVEhBTktTIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVyKToKKworLSBTY290dCBKLiBCZXJ0aW4gPHNiZXJ0aW5AbWluZHNwcmluZy5jb20+IGZvciBjbGVhbnVwcywgdGhlIHByb2MtZmlsZXN5c3RlbQorICBhbmQgbXVjaCBtb3JlCistIEhlbnJ5IEJydWNlIDx3aGJAdnZsLmNvLnVrPiBmb3IgcHJvdmlkaW5nIGRldmVsb3BlcnMgaW5mb3JtYXRpb24gYWJvdXQKKyAgdGhlIENQaUEgY2hpcCwgSSB3aXNoIGFsbCBjb21wYW5pZXMgd291bGQgdHJlYXQgTGludXggYXMgc2VyaW91c2x5CistIEthcm9seSBFcmRlaSA8S2Fyb2x5LkVyZGVpQHJpc2MudW5pLWxpbnouYWMuYXQ+IGFuZCBSSVNDLUxpbnogZm9yIGJlaW5nCisgIG15IGJvc3MgOykgcmVzcC4gbXkgZW1wbG95ZXIgYW5kIGZvciBwcm92aWRpbmcgbWUgdGhlIGhhcmR3YXJlIGFuZAorICBhbGxvdyBtZSB0byBkZXZvdGUgc29tZSB3b3JraW5nIHRpbWUgdG8gdGhpcyBwcm9qZWN0CistIE1hbnVlbCBKLiBQZXRpdCBkZSBHYWJyaWVsIDxtcGV0aXRAZGl0LnVwbS5lcz4gZm9yIHByb3ZpZGluZyBoZWxwCisgIHdpdGggSXNhYmVsIChodHRwOi8vaXNhYmVsLmRpdC51cG0uZXMvKQorLSBCYXMgSHVpc21hbiA8Ymh1aXNtQGNzLnV0d2VudGUubmw+IGZvciB3cml0aW5nIHRoZSBpbml0aWFsIHBhcnBvcnQgY29kZQorLSBKYXJsIFRvdGxhbmQgPEphcmwuVG90bGFuZEBiZGMubm8+IGZvciBzZXR0aW5nIHVwIHRoZSBtYWlsaW5nIGxpc3QgCisgIGFuZCBtYWludGFpbmluZyB0aGUgd2ViLXNlcnZlclszXQorLSBDaHJpcyBXaGl0ZWZvcmQgPENocmlzQGluZm9ybWludGVyYWN0aXZlLmNvbT4gZm9yIGZpeGVzIHJlbGF0ZWQgdG8gdGhlCisgIDEuMDIgZmlybXdhcmUKKy0gc3BlY2lhbCBrdWRvcyB0byBhbGwgdGhlIHRlc3RlciB3aG9zZSBtYWNoaW5lcyBjcmFzaGVkIGFuZC9vcgorICB3aWxsIGNyYXNoLiA6KQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JFRkVSRU5DRVMKKworICAgMS4gaHR0cDovL3d3dy5yaXNjLnVuaS1saW56LmFjLmF0L3Blb3BsZS9wcHJlZ2xlcgorICAgICAgbWFpbHRvOlBldGVyX1ByZWdsZXJAZW1haWwuY29tCisgICAyLiBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgdG9wIGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHRyZWUKKyAgIDMuIGh0dHA6Ly93ZWJjYW0uc291cmNlZm9yZ2UubmV0LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3g4OCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmN4ODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3YWI4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmN4ODgKQEAgLTAsMCArMSw2OSBAQAorCitjeDg4MDAgcmVsZWFzZSBub3RlcworPT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIHY0bDIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIGN4MjM4OHggY2hpcC4KKworCitjdXJyZW50IHN0YXR1cworPT09PT09PT09PT09PT0KKwordmlkZW8KKwktIEJhc2ljYWxseSB3b3Jrcy4KKwktIFNvbWUgbWlub3IgaW1hZ2UgcXVhbGl0eSBnbGl0Y2hlcy4KKwktIEZvciBub3cgb25seSBjYXB0dXJlLCBvdmVybGF5IHN1cHBvcnQgaXNuJ3QgY29tcGxldGVkIHlldC4KKworYXVkaW8KKwktIFRoZSBjaGlwIHNwZWNzIGZvciB0aGUgb24tY2hpcCBUViBzb3VuZCBkZWNvZGVyIGFyZSBuZXh0CisJICB0byB1c2VsZXNzIDotLworCS0gTmV2ZXJsZXNzIHRoZSBidWlsdGluIFRWIHNvdW5kIGRlY29kZXIgc3RhcnRzIHdvcmtpbmcgbm93LAorICAgICAgICAgIGF0IGxlYXN0IGZvciBQQUwtQkcuICBPdGhlciBUViBub3JtcyBuZWVkIG90aGVyIGNvZGUgLi4uCisgICAgICAgICAgRk9SIEFOWSBSRVBPUlRTIE9OIFRISVMgUExFQVNFIE1FTlRJT04gVEhFIFRWIE5PUk0gWU9VIEFSRQorICAgICAgICAgIFVTSU5HLgorCS0gTW9zdCB0dW5lciBjaGlwcyBkbyBwcm92aWRlIG1vbm8gc291bmQsIHdoaWNoIG1heSBvciBtYXkgbm90CisJICBiZSB1c2VhYmxlIGRlcGVuZGluZyBvbiB0aGUgYm9hcmQgZGVzaWduLiAgV2l0aCB0aGUgSGF1cHBhdWdlCisJICBjYXJkcyBpdCB3b3Jrcywgc28gdGhlcmUgaXMgbW9ubyBzb3VuZCBhdmFpbGFibGUgYXMgZmFsbGJhY2suCisJLSBhdWRpbyBkYXRhIGRtYSAoaS5lLiByZWNvcmRpbmcgd2l0aG91dCBsb29wYmFjayBjYWJsZSB0byB0aGUKKwkgIHNvdW5kIGNhcmQpIHNob3VsZCBiZSBwb3NzaWJsZSwgYnV0IHRoZXJlIGlzIG5vIGNvZGUgeWV0IC4uLgorCit2YmkKKwktIHNvbWUgY29kZSBwcmVzZW50LiAgRG9lc24ndCBjcmFzaCBhbnkgbW9yZSwgYnV0IGFsc28gZG9lc24ndAorCSAgd29yayB5ZXQgLi4uCisKKworaG93IHRvIGFkZCBzdXBwb3J0IGZvciBuZXcgY2FyZHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgbmVlZHMgc29tZSBjb25maWcgaW5mbyBmb3IgdGhlIFRWIGNhcmRzLiAgVGhpcyBzdHVmZiBpcyBpbgorY3g4OC1jYXJkcy5jLiAgSWYgdGhlIGRyaXZlciBkb2Vzbid0IHdvcmsgd2VsbCB5b3UgbGlrZWx5IG5lZWQgYSBuZXcKK2VudHJ5IGZvciB5b3VyIGNhcmQgaW4gdGhhdCBmaWxlLiAgQ2hlY2sgdGhlIGtlcm5lbCBsb2cgKHVzaW5nIGRtZXNnKQordG8gc2VlIHdoZW5ldmVyIHRoZSBkcml2ZXIga25vd3MgeW91ciBjYXJkIG9yIG5vdC4gIFRoZXJlIGlzIGEgbGluZQorbGlrZSB0aGlzIG9uZToKKworCWN4ODgwMFswXTogc3Vic3lzdGVtOiAwMDcwOjM0MDAsIGJvYXJkOiBIYXVwcGF1Z2UgV2luVFYgXAorCQkzNHh4eCBtb2RlbHMgW2NhcmQ9MSxhdXRvZGV0ZWN0ZWRdCisKK0lmIHlvdXIgY2FyZCBpcyBsaXN0ZWQgYXMgImJvYXJkOiBVTktOT1dOL0dFTkVSSUMiIGl0IGlzIHVua25vd24gdG8KK3RoZSBkcml2ZXIuICBXaGF0IHRvIGRvIHRoZW4/CisKKyAoMSkgVHJ5IHVwZ3JhZGluZyB0byB0aGUgbGF0ZXN0IHNuYXBzaG90LCBtYXliZSBpdCBoYXMgYmVlbiBhZGRlZAorICAgICBtZWFud2hpbGUuCisgKDIpIFlvdSBjYW4gdHJ5IHRvIGNyZWF0ZSBhIG5ldyBlbnRyeSB5b3Vyc2VsZiwgaGF2ZSBhIGxvb2sgYXQKKyAgICAgY3g4OC1jYXJkcy5jLiAgSWYgdGhhdCB3b3JrZWQsIG1haWwgbWUgeW91ciBjaGFuZ2VzIGFzIHVuaWZpZWQKKyAgICAgZGlmZiAoImRpZmYgLXUiKS4KKyAoMykgT3IgeW91IGNhbiBtYWlsIG1lIHRoZSBjb25maWcgaW5mb3JtYXRpb24uICBJIG5lZWQgYXQgbGVhc3QgdGhlCisgICAgIGZvbGxvd2luZyBpbmZvcm1hdGlvbnMgdG8gYWRkIHRoZSBjYXJkOgorCisgICAgICogdGhlIFBDSSBTdWJzeXN0ZW0gSUQgKCIwMDcwOjM0MDAiIGZyb20gdGhlIGxpbmUgYWJvdmUsCisgICAgICAgImxzcGNpIC12IiBvdXRwdXQgaXMgZmluZSB0b28pLgorICAgICAqIHRoZSB0dW5lciB0eXBlIHVzZWQgYnkgdGhlIGNhcmQuICBZb3UgY2FuIHRyeSB0byBmaW5kIG9uZSBieQorICAgICAgIHRyaWFsLWFuZC1lcnJvciB1c2luZyB0aGUgdHVuZXI9PG4+IGluc21vZCBvcHRpb24uICBJZiB5b3UKKyAgICAgICBrbm93IHdoaWNoIG9uZSB0aGUgY2FyZCBoYXMgeW91IGNhbiBhbHNvIGhhdmUgYSBsb29rIGF0IHRoZQorICAgICAgIGxpc3QgaW4gQ0FSRExJU1QudHVuZXIKKworSGF2ZSBmdW4sCisKKyAgR2VyZAorCistLSAKK0dlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmlyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNDdhOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmlyCkBAIC0wLDAgKzEsNzIgQEAKKworaW5mcmFyZWQgcmVtb3RlIGNvbnRyb2wgc3VwcG9ydCBpbiB2aWRlbzRsaW51eCBkcml2ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitiYXNpY3MKKy0tLS0tLQorCitDdXJyZW50IHZlcnNpb25zIHVzZSB0aGUgbGludXggaW5wdXQgbGF5ZXIgdG8gc3VwcG9ydCBpbmZyYXJlZAorcmVtb3RlIGNvbnRyb2xzLiAgSSBzdWdnZXN0IHRvIGRvd25sb2FkIG15IGlucHV0IGxheWVyIHRvb2xzCitmcm9tIGh0dHA6Ly9ieXRlc2V4Lm9yZy9zbmFwc2hvdC9pbnB1dC08ZGF0ZT4udGFyLmd6CisKK01vZHVsZXMgeW91IGhhdmUgdG8gbG9hZDoKKworICBzYWE3MTM0CXN0YXRpY2FsbHkgYnVpbHQgaW4sIGkuZS4ganVzdCB0aGUgZHJpdmVyIDopCisgIGJ0dHYJCWlyLWtiZC1ncGlvIG9yIGlyLWtiZC1pMmMgZGVwZW5kaW5nIG9uIHlvdXIKKwkJY2FyZC4KKworaXIta2JkLWdwaW8gYW5kIGlyLWtiZC1pMmMgZG9uJ3Qgc3VwcG9ydCBhbGwgY2FyZHMgbGlyYyBzdXBwb3J0cworKHlldCksIG1haW5seSBmb3IgdGhlIHJlYXNvbiB0aGF0IHRoZSBjb2RlIG9mIGxpcmNfaTJjIGFuZCBsaXJjX2dwaW8KK3dhcyB2ZXJ5IGNvbmZ1c2luZyBhbmQgSSBkZWNpZGVkIHRvIGJhc2ljYWxseSBzdGFydCBvdmVyIGZyb20gc2NyYXRjaC4KK0ZlZWwgZnJlZSB0byBjb250YWN0IG1lIGluIGNhc2Ugb2YgdHJvdWJsZS4gIE5vdGUgdGhhdCB0aGUgaXIta2JkLSoKK21vZHVsZXMgd29yayBvbiAyLjYueCBrZXJuZWxzIG9ubHkgdGhyb3VnaCAuLi4KKworCitob3cgaXQgd29ya3MKKy0tLS0tLS0tLS0tLQorCitUaGUgbW9kdWxlcyByZWdpc3RlciB0aGUgcmVtb3RlIGFzIGtleWJvYXJkIHdpdGhpbiB0aGUgbGludXggaW5wdXQKK2xheWVyLCBpLmUuIHlvdSdsbCBzZWUgdGhlIGtleXMgb2YgdGhlIHJlbW90ZSBhcyBub3JtYWwga2V5IHN0cm9rZXMKKyhpZiBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgZW5hYmxlZCkuCisKK1VzaW5nIHRoZSBldmVudCBkZXZpY2VzIChDT05GSUdfSU5QVVRfRVZERVYpIGl0IGlzIHBvc3NpYmxlIGZvcgorYXBwbGljYXRpb25zIHRvIGFjY2VzcyB0aGUgcmVtb3RlIHZpYSAvZGV2L2lucHV0L2V2ZW50PG4+IGRldmljZXMuCitZb3UgbWlnaHQgaGF2ZSB0byBjcmVhdGUgdGhlIHNwZWNpYWwgZmlsZXMgdXNpbmcgIi9zYmluL01BS0VERVYKK2lucHV0Ii4gIFRoZSBpbnB1dCBsYXllciB0b29scyBtZW50aW9uZWQgYWJvdmUgdXNlIHRoZSBldmVudCBkZXZpY2UuCisKK1RoZSBpbnB1dCBsYXllciB0b29scyBhcmUgbmljZSBmb3IgdHJvdWJsZSBzaG9vdGluZywgaS5lLiB0byBjaGVjaword2hlbmV2ZXIgdGhlIGlucHV0IGRldmljZSBpcyByZWFsbHkgcHJlc2VudCwgd2hpY2ggb2YgdGhlIGRldmljZXMgaXQKK2lzLCBjaGVjayB3aGVuZXZlciBwcmVzc2luZyBrZXlzIG9uIHRoZSByZW1vdGUgYWN0dWFsbHkgZ2VuZXJhdGVzCitldmVudHMgYW5kIHRoZSBsaWtlLiAgWW91IGNhbiBhbHNvIHVzZSB0aGUga2JkIHV0aWxpdHkgdG8gY2hhbmdlIHRoZQora2V5bWFwcyAoMi42Lngga2VybmVscyBvbmx5IHRocm91Z2gpLgorCisKK3VzaW5nIHdpdGggbGlyY2QKKz09PT09PT09PT09PT09PT0KKworVGhlIGN2cyB2ZXJzaW9uIG9mIHRoZSBsaXJjZCBkYWVtb24gc3VwcG9ydHMgcmVhZGluZyBldmVudHMgZnJvbSB0aGUKK2xpbnV4IGlucHV0IGxheWVyICh2aWEgZXZlbnQgZGV2aWNlKS4gIFRoZSBpbnB1dCBsYXllciB0b29scyB0YXJiYWxsCitjb21lcyB3aXRoIGEgbGlyY2QgY29uZmlnIGZpbGUuCisKKwordXNpbmcgd2l0aG91dCBsaXJjZAorPT09PT09PT09PT09PT09PT09PQorCitYRnJlZTg2IGxpa2VseSBjYW4gYmUgY29uZmlndXJlZCB0byByZWNvZ25pc2UgdGhlIHJlbW90ZSBrZXlzLiAgT25jZSBJCitzaW1wbHkgdHJpZWQgdG8gY29uZmlndXJlIG9uZSBvZiB0aGUgbXVsdGltZWRpYSBrZXlib2FyZHMgYXMgaW5wdXQKK2RldmljZSwgd2hpY2ggaGFkIHRoZSBlZmZlY3QgdGhhdCBYRnJlZTg2IHJlY29nbmlzZWQgc29tZSBvZiB0aGUga2V5cworb2YgbXkgcmVtb3RlIGNvbnRyb2wgYW5kIHBhc3NlZCB2b2x1bWUgdXAvZG93biBrZXkgcHJlc3NlcyBhcworWEY4NkF1ZGlvUmFpc2VWb2x1bWUgYW5kIFhGODZBdWRpb0xvd2VyVm9sdW1lIGtleSBldmVudHMgdG8gdGhlIFgxMQorY2xpZW50cy4KKworSXQgbGlrZWx5IGlzIHBvc3NpYmxlIHRvIG1ha2UgdGhhdCBmbHkgd2l0aCBhIG5pY2UgeGtiIGNvbmZpZyBmaWxlLAorSSBrbm93IG5leHQgdG8gbm90aGluZyBhYm91dCB0aGF0IHRocm91Z2guCisKKworSGF2ZSBmdW4sCisKKyAgR2VyZAorCistLQorR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnNhYTcxMzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0NDZjNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnNhYTcxMzQKQEAgLTAsMCArMSw3MyBAQAorCisKK1doYXQgaXMgaXQ/Cis9PT09PT09PT09PQorCitUaGlzIGlzIGEgdjRsMi9vc3MgZGV2aWNlIGRyaXZlciBmb3Igc2FhNzEzMC8zMy8zNC8zNSBiYXNlZCBjYXB0dXJlIC8gVFYKK2JvYXJkcy4gIFNlZSBodHRwOi8vd3d3LnNlbWljb25kdWN0b3JzLnBoaWxpcHMuY29tL3BpcC9zYWE3MTM0aGwgZm9yIGEKK2Rlc2NyaXB0aW9uLgorCisKK1N0YXR1cworPT09PT09CisKK0FsbW9zdCBldmVyeXRoaW5nIGlzIHdvcmtpbmcuICB2aWRlbywgc291bmQsIHR1bmVyLCByYWRpbywgbXBlZyB0cywgLi4uCisKK0FzIHdpdGggYnR0diwgY2FyZC1zcGVjaWZpYyB0d2Vha3MgYXJlIG5lZWRlZC4gIENoZWNrIENBUkRMSVNUIGZvciBhCitsaXN0IG9mIGtub3duIFRWIGNhcmRzIGFuZCBzYWE3MTM0LWNhcmRzLmMgZm9yIHRoZSBkcml2ZXJzIGNhcmQKK2NvbmZpZ3VyYXRpb24gaW5mby4KKworCitCdWlsZAorPT09PT0KKworUGljayB1cCB2aWRlb2RldiArIHY0bDIgcGF0Y2hlcyBmcm9tIGh0dHA6Ly9ieXRlc2V4Lm9yZy9wYXRjaGVzLy4KK0NvbmZpZ3VyZSwgYnVpbGQsIGluc3RhbGwgKyBib290IHRoZSBuZXcga2VybmVsLiAgWW91J2xsIG5lZWQgYXQgbGVhc3QKK3RoZXNlIGNvbmZpZyBvcHRpb25zOgorCisJQ09ORklHX0kyQz1tCisJQ09ORklHX1ZJREVPX0RFVj1tCisKK1R5cGUgIm1ha2UiIHRvIGJ1aWxkIHRoZSBkcml2ZXIgbm93LiAgIm1ha2UgaW5zdGFsbCIgaW5zdGFsbHMgdGhlCitkcml2ZXIuICAibW9kcHJvYmUgc2FhNzEzNCIgc2hvdWxkIGxvYWQgaXQuICBEZXBlbmRpbmcgb24gdGhlIGNhcmQgeW91CittaWdodCBoYXZlIHRvIHBhc3MgY2FyZD08bnI+IGFzIGluc21vZCBvcHRpb24sIGNoZWNrIENBUkRMSVNUIGZvcgordmFsaWQgY2hvaWNlcy4KKworCitDaGFuZ2VzIC8gRml4ZXMKKz09PT09PT09PT09PT09PQorCitQbGVhc2UgbWFpbCBtZSB1bmlmaWVkIGRpZmZzICgiZGlmZiAtdSIpIHdpdGggeW91ciBjaGFuZ2VzLCBhbmQgZG9uJ3QKK2ZvcmdldCB0byB0ZWxsIG1lIHdoYXQgaXQgY2hhbmdlcyAvIHdoaWNoIHByb2JsZW0gaXQgZml4ZXMgLyB3aGF0ZXZlcgoraXQgaXMgZ29vZCBmb3IgLi4uCisKKworS25vd24gUHJvYmxlbXMKKz09PT09PT09PT09PT09CisKKyogVGhlIHR1bmVyIGZvciB0aGUgZmx5dmlkZW9zIGlzbid0IGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYW5kIHRoZQorICBkZWZhdWx0IG1pZ2h0IG5vdCB3b3JrIGZvciB5b3UgZGVwZW5kaW5nIG9uIHdoaWNoIHZlcnNpb24geW91IGhhdmUuCisgIFRoZXJlIGlzIGEgdHVuZXI9IGluc21vZCBvcHRpb24gdG8gb3ZlcnJpZGUgdGhlIGRyaXZlcidzIGRlZmF1bHQuCisKK0NhcmQgVmFyaWF0aW9uczoKKz09PT09PT09PT09PT09PT0KKworQ2FyZHMgY2FuIHVzZSBlaXRoZXIgb2YgdGhlc2UgdHdvIGNyeXN0YWxzICh4dGFsKToKKyAtIDMyLjExIE1IeiAtPiAuYXVkaW9fY2xvY2s9MHgxODdkZTcKKyAtIDI0LjU3Nk1IeiAtPiAuYXVkaW9fY2xvY2s9MHgyMDAwMDAKKyh4dGFsICogLmF1ZGlvX2Nsb2NrID0gNTE1Mzk2MDApCisKKworQ3JlZGl0cworPT09PT09PQorCithbmRyZXcuc3RldmVuc0BwaGlsaXBzLmNvbSArIHdlcm5lci5sZWViQHBoaWxpcHMuY29tIGZvciBwcm92aWRpbmcKK3NhYTcxMzQgaGFyZHdhcmUgc3BlY3MgYW5kIHNhbXBsZSBib2FyZC4KKworCitIYXZlIGZ1biwKKworICBHZXJkCisKKy0tIAorR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0MjVjMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KQEAgLTAsMCArMSw1NTcgQEAKK0ZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdWJqZWN0OiB1bmlmaWVkIHpvcmFuIGRyaXZlciAoenIzNjB4Nywgem9yYW4sIGJ1eiwgZGMxMCgrKSwgZGMzMCgrKSwgbG1sMzMpCit3ZWJzaXRlOiBodHRwOi8vbWpwZWcuc291cmNlZm9yZ2UubmV0L2RyaXZlci16b3Jhbi8KKworMS4gV2hhdCBjYXJkcyBhcmUgc3VwcG9ydGVkCisxLjEgV2hhdCB0aGUgVFYgZGVjb2RlciBjYW4gZG8gYW4gd2hhdCBub3QKKzEuMiBXaGF0IHRoZSBUViBlbmNvZGVyIGNhbiBkbyBhbiB3aGF0IG5vdAorMi4gSG93IGRvIEkgZ2V0IHRoaXMgZGFtbiB0aGluZyB0byB3b3JrCiszLiBXaGF0IG1haW5ib2FyZCBzaG91bGQgSSB1c2UgKG9yIHdoeSBkb2Vzbid0IG15IGNhcmQgd29yaykKKzQuIFByb2dyYW1taW5nIGludGVyZmFjZQorNS4gQXBwbGljYXRpb25zCis2LiBDb25jZXJuaW5nIGJ1ZmZlciBzaXplcywgcXVhbGl0eSwgb3V0cHV0IHNpemUgZXRjLgorNy4gSXQgaGFuZ3MvY3Jhc2hlcy9mYWlscy93aGF0ZXZlcnMhIEhlbHAhCis4LiBNYWludGFpbmVycy9Db250YWN0aW5nCis5LiBMaWNlbnNlCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBXaGF0IGNhcmRzIGFyZSBzdXBwb3J0ZWQKKworSW9tZWdhIEJ1eiwgTGludXggTWVkaWEgTGFicyBMTUwzMy9MTUwzM1IxMCwgUGlubmFjbGUvTWlybworREMxMC9EQzEwKy9EQzMwL0RDMzArIGFuZCByZWxhdGVkIGJvYXJkcyAoYXZhaWxhYmxlIHVuZGVyIHZhcmlvdXMgbmFtZXMpLgorCitJb21lZ2EgQnV6OgorKiBab3JhbiB6cjM2MDY3IFBDSSBjb250cm9sbGVyCisqIFpvcmFuIHpyMzYwNjAgTUpQRUcgY29kZWMKKyogUGhpbGlwcyBzYWE3MTExIFRWIGRlY29kZXIKKyogUGhpbGlwcyBzYWE3MTg1IFRWIGVuY29kZXIKK0RyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKKyAgICAgICAgICAgICAgICB2aWRlb2NvZGVjLCBzYWE3MTExLCBzYWE3MTg1LCB6cjM2MDYwLCB6cjM2MDY3CitJbnB1dHMvb3V0cHV0czogQ29tcG9zaXRlIGFuZCBTLXZpZGVvCitOb3JtczogUEFMLCBTRUNBTSAoNzIweDU3NiBAIDI1IGZwcyksIE5UU0MgKDcyMHg0ODAgQCAyOS45NyBmcHMpCitDYXJkIG51bWJlcjogNworCitMaW51eCBNZWRpYSBMYWJzIExNTDMzOgorKiBab3JhbiB6cjM2MDY3IFBDSSBjb250cm9sbGVyCisqIFpvcmFuIHpyMzYwNjAgTUpQRUcgY29kZWMKKyogQnJvb2t0cmVlIGJ0ODE5IFRWIGRlY29kZXIKKyogQnJvb2t0cmVlIGJ0ODU2IFRWIGVuY29kZXIKK0RyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKKyAgICAgICAgICAgICAgICB2aWRlb2NvZGVjLCBidDgxOSwgYnQ4NTYsIHpyMzYwNjAsIHpyMzYwNjcKK0lucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUgYW5kIFMtdmlkZW8KK05vcm1zOiBQQUwgKDcyMHg1NzYgQCAyNSBmcHMpLCBOVFNDICg3MjB4NDgwIEAgMjkuOTcgZnBzKQorQ2FyZCBudW1iZXI6IDUKKworTGludXggTWVkaWEgTGFicyBMTUwzM1IxMDoKKyogWm9yYW4genIzNjA2NyBQQ0kgY29udHJvbGxlcgorKiBab3JhbiB6cjM2MDYwIE1KUEVHIGNvZGVjCisqIFBoaWxpcHMgc2FhNzExNCBUViBkZWNvZGVyCisqIEFuYWxvZyBEZXZpY2VzIGFkdjcxNzAgVFYgZW5jb2RlcgorRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAorICAgICAgICAgICAgICAgIHZpZGVvY29kZWMsIHNhYTcxMTQsIGFkdjcxNzAsIHpyMzYwNjAsIHpyMzYwNjcKK0lucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUgYW5kIFMtdmlkZW8KK05vcm1zOiBQQUwgKDcyMHg1NzYgQCAyNSBmcHMpLCBOVFNDICg3MjB4NDgwIEAgMjkuOTcgZnBzKQorQ2FyZCBudW1iZXI6IDYKKworUGlubmFjbGUvTWlybyBEQzEwKG5ldyk6CisqIFpvcmFuIHpyMzYwNTcgUENJIGNvbnRyb2xsZXIKKyogWm9yYW4genIzNjA2MCBNSlBFRyBjb2RlYworKiBQaGlsaXBzIHNhYTcxMTBhIFRWIGRlY29kZXIKKyogQW5hbG9nIERldmljZXMgYWR2NzE3NiBUViBlbmNvZGVyCitEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCisgICAgICAgICAgICAgICAgdmlkZW9jb2RlYywgc2FhNzExMCwgYWR2NzE3NSwgenIzNjA2MCwgenIzNjA2NworSW5wdXRzL291dHB1dHM6IENvbXBvc2l0ZSwgUy12aWRlbyBhbmQgSW50ZXJuYWwKK05vcm1zOiBQQUwsIFNFQ0FNICg3Njh4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNjQweDQ4MCBAIDI5Ljk3IGZwcykKK0NhcmQgbnVtYmVyOiAxCisKK1Bpbm5hY2xlL01pcm8gREMxMCs6CisqIFpvcmFuIHpyMzYwNjcgUENJIGNvbnRyb2xsZXIKKyogWm9yYW4genIzNjA2MCBNSlBFRyBjb2RlYworKiBQaGlsaXBzIHNhYTcxMTBhIFRWIGRlY29kZXIKKyogQW5hbG9nIERldmljZXMgYWR2NzE3NiBUViBlbmNvZGVyCitEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCisJCXZpZGVvY29kZWMsIHNhNzExMCwgYWR2NzE3NSwgenIzNjA2MCwgenIzNjA2NworSW5wdXRzL291dHB1dHM6IENvbXBvc2l0ZSwgUy12aWRlbyBhbmQgSW50ZXJuYWwKK05vcm1zOiBQQUwsIFNFQ0FNICg3Njh4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNjQweDQ4MCBAIDI5Ljk3IGZwcykKK0NhcmQgbnVtYmVyOiAyCisKK1Bpbm5hY2xlL01pcm8gREMxMChvbGQpOiAqCisqIFpvcmFuIHpyMzYwNTcgUENJIGNvbnRyb2xsZXIKKyogWm9yYW4genIzNjA1MCBNSlBFRyBjb2RlYworKiBab3JhbiB6cjM2MDE2IFZpZGVvIEZyb250IEVuZCBvciBGdWppIG1kMDIxMSBWaWRlbyBGcm9udCBFbmQgKGNsb25lPykKKyogTWljcm9uYXMgdnB4MzIyMGEgVFYgZGVjb2RlcgorKiBtc2UzMDAwIFRWIGVuY29kZXIgb3IgQW5hbG9nIERldmljZXMgYWR2NzE3NiBUViBlbmNvZGVyICoKK0RyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKKyAgICAgICAgICAgICAgICB2aWRlb2NvZGVjLCB2cHgzMjIwLCBtc2UzMDAwL2FkdjcxNzUsIHpyMzYwNTAsIHpyMzYwMTYsIHpyMzYwNjcKK0lucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUsIFMtdmlkZW8gYW5kIEludGVybmFsCitOb3JtczogUEFMLCBTRUNBTSAoNzY4eDU3NiBAIDI1IGZwcyksIE5UU0MgKDY0MHg0ODAgQCAyOS45NyBmcHMpCitDYXJkIG51bWJlcjogMAorCitQaW5uYWNsZS9NaXJvIERDMzA6ICoKKyogWm9yYW4genIzNjA1NyBQQ0kgY29udHJvbGxlcgorKiBab3JhbiB6cjM2MDUwIE1KUEVHIGNvZGVjCisqIFpvcmFuIHpyMzYwMTYgVmlkZW8gRnJvbnQgRW5kCisqIE1pY3JvbmFzIHZweDMyMjVkL3ZweDMyMjBhL3ZweDMyMTZiIFRWIGRlY29kZXIKKyogQW5hbG9nIERldmljZXMgYWR2NzE3NiBUViBlbmNvZGVyCitEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCisgICAgICAgICAgICAgICAgdmlkZW9jb2RlYywgdnB4MzIyMC92cHgzMjI0LCBhZHY3MTc1LCB6cjM2MDUwLCB6cjM2MDE2LCB6cjM2MDY3CitJbnB1dHMvb3V0cHV0czogQ29tcG9zaXRlLCBTLXZpZGVvIGFuZCBJbnRlcm5hbAorTm9ybXM6IFBBTCwgU0VDQU0gKDc2OHg1NzYgQCAyNSBmcHMpLCBOVFNDICg2NDB4NDgwIEAgMjkuOTcgZnBzKQorQ2FyZCBudW1iZXI6IDMKKworUGlubmFjbGUvTWlybyBEQzMwKzogKgorKiBab3JhbiB6cjM2MDY3IFBDSSBjb250cm9sbGVyCisqIFpvcmFuIHpyMzYwNTAgTUpQRUcgY29kZWMKKyogWm9yYW4genIzNjAxNiBWaWRlbyBGcm9udCBFbmQKKyogTWljcm9uYXMgdnB4MzIyNWQvdnB4MzIyMGEvdnB4MzIxNmIgVFYgZGVjb2RlcgorKiBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIKK0RyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKKwkJdmlkZW9jb2RlYywgdnB4MzIyMC92cHgzMjI0LCBhZHY3MTc1LCB6cjM2MDUwLCB6cjM2MDE1LCB6cjM2MDY3CitJbnB1dHMvb3V0cHV0czogQ29tcG9zaXRlLCBTLXZpZGVvIGFuZCBJbnRlcm5hbAorTm9ybXM6IFBBTCwgU0VDQU0gKDc2OHg1NzYgQCAyNSBmcHMpLCBOVFNDICg2NDB4NDgwIEAgMjkuOTcgZnBzKQorQ2FyZCBudW1iZXI6IDQKKworTm90ZTogTm8gbW9kdWxlIGZvciB0aGUgbXNlMzAwMCBpcyBhdmFpbGFibGUgeWV0CitOb3RlOiBObyBtb2R1bGUgZm9yIHRoZSB2cHgzMjI0IGlzIGF2YWlsYWJsZSB5ZXQKK05vdGU6IHVzZSBlbmNvZGVyPVggb3IgZGVjb2Rlcj1YIGZvciBub24tZGVmYXVsdCBpMmMgY2hpcHMgKHNlZSBpMmMtaWQuaCkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuMSBXaGF0IHRoZSBUViBkZWNvZGVyIGNhbiBkbyBhbiB3aGF0IG5vdAorCitUaGUgYmVzdCBrbm93IFRWIHN0YW5kYXJkcyBhcmUgTlRTQy9QQUwvU0VDQU0uIGJ1dCBmb3IgZGVjb2RpbmcgYSBmcmFtZSB0aGF0CitpbmZvcm1hdGlvbiBpcyBub3QgZW5vdWdoLiBUaGVyZSBhcmUgc2V2ZXJhbCBmb3JtYXRzIG9mIHRoZSBUViBzdGFuZGFyZHMuCitBbmQgbm90IGV2ZXJ5IFRWIGRlY29kZXIgaXMgYWJsZSB0byBoYW5kbGUgZXZlcnkgZm9ybWF0LiBBbHNvIHRoZSBldmVyeSAKK2NvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLiBUaGVyZSBhcmUgY3VycmVudGx5IDExIGRpZmZlcmVudCAKK3R2IGJyb2FkY2FzdCBmb3JtYXRzIGFsbCBhdmVyIHRoZSB3b3JsZC4gCisKK1RoZSBDQ0lSIGRlZmluZXMgcGFyYW1ldGVycyBuZWVkZWQgZm9yIGJyb2FkY2FzdGluZyB0aGUgc2lnbmFsLiAKK1RoZSBDQ0lSIGhhcyBkZWZpbmVkIGRpZmZlcmVudCBzdGFuZGFyZHM6IEEsQixELEUsRixHLEQsSCxJLEssSzEsTCxNLE4sLi4uCitUaGUgQ0NJUiBzYXlzIG5vdCBtdWNoIGFib3V0IGFib3V0IHRoZSBjb2xvcnN5c3RlbSB1c2VkICEhIQorQW5kIHRhbGtpbmcgYWJvdXQgYSBjb2xvcnN5c3RlbSBzYXlzIG5vdCB0byBtdWNoIGFib3V0IGhvdyBpdCBpcyBicm9hZGNhc3QuCisKK1RoZSBDQ0lSIHN0YW5kYXJkcyBBLEUsRiBhcmUgbm90IHVzZWQgYW55IG1vcmUuCisKK1doZW4geW91IHNwZWFrIGFib3V0IE5UU0MsIHlvdSB1c3VhbGx5IG1lYW4gdGhlIHN0YW5kYXJkOiBDQ0lSIC0gTSB1c2luZwordGhlIE5UU0MgY29sb3JzeXN0ZW0gd2hpY2ggaXMgdXNlZCBpbiB0aGUgVVNBLCBKYXBhbiwgTWV4aWNvLCBDYW5hZGEKK2FuZCBhIGZldyBvdGhlcnMuIAorCitXaGVuIHlvdSB0YWxrIGFib3V0IFBBTCwgeW91IHVzdWFsbHkgbWVhbjogQ0NJUiAtIEIvRyB1c2luZyB0aGUgUEFMCitjb2xvcnN5c3RlbSB3aGljaCBpcyB1c2VkIGluIG1hbnkgQ291bnRyaWVzLiAKKworV2hlbiB5b3UgdGFsayBhYm91dCBTRUNBTSwgeW91IG1lYW46IENDSVIgLSBMIHVzaW5nIHRoZSBTRUNBTSBDb2xvcnN5c3RlbSAKK3doaWNoIGlzIHVzZWQgaW4gRnJhbmNlLCBhbmQgYSBmZXcgb3RoZXJzLgorCitUaGVyZSB0aGUgb3RoZXIgdmVyc2lvbiBvZiBTRUNBTSwgQ0NJUiAtIEQvSyBpcyB1c2VkIGluIEJ1bGdhcmlhLCBDaGluYSwKK1Nsb3Zha2FpLCBIdW5nYXJ5LCBLb3JlYSAoUmVwLiksIFBvbGFuZCwgUnVtYW5pYSBhbmQgYSBvdGhlcnMuIAorCitUaGUgQ0NJUiAtIEggdXNlcyB0aGUgUEFMIGNvbG9yc3lzdGVtIChzb21ldGltZXMgU0VDQU0pIGFuZCBpcyB1c2VkIGluIAorRWd5cHQsIExpYnlhLCBTcmkgTGFua2EsIFN5cmFpbiBBcmFiLiBSZXAuCisKK1RoZSBDQ0lSIC0gSSB1c2VzIHRoZSBQQUwgY29sb3JzeXN0ZW0sIGFuZCBpcyB1c2VkIGluIEdyZWF0IEJyaXRhaW4sIEhvbmcgS29uZywKK0lyZWxhbmQsIE5pZ2VyaWEsIFNvdXRoIEFmcmljYS4KKworVGhlIENDSVIgLSBOIHVzZXMgdGhlIFBBTCBjb2xvcnN5c3RlbSBhbmQgUEFMIGZyYW1lIHNpemUgYnV0IHRoZSBOVFNDIGZyYW1lcmF0ZSwKK2FuZCBpcyB1c2VkIGluIEFyZ2VudGluaWEsIFVydWd1YXksIGFuIGEgZmV3IG90aGVycworCitXZSBkbyBub3QgdGFsayBhYm91dCBob3cgdGhlIGF1ZGlvIGlzIGJyb2FkY2FzdCAhCisKK0EgcmF0aGVyIGdvb2Qgc2l0ZXMgYWJvdXQgdGhlIFRWIHN0YW5kYXJkcyBhcmU6IAoraHR0cDovL3d3dy5zb255LmpwL1NlcnZpY2VBcmVhL1ZvbHRhZ2VfbWFwLworaHR0cDovL2luZm8uZWxlY3Ryb25pY3dlcmtzdGF0dC5kZS9iZXJlaWNoZS9mZXJuc2VodGVjaG5pay9mcmVxdWVuemVuX3VuZF9ub3JtZW4vRmVybnNlaG5vcm1lbi8KK2FuZCBodHRwOi8vd3d3LmNhYmwuY29tL3Jlc3RhdXJhbnQvY2hhbm5lbC5odG1sCisKK090aGVyIHdlaXJkIHRoaW5ncyBhcm91bmQ6IE5UU0MgNC40MyBpcyBhIG1vZGlmaWNhdGVkIE5UU0MsIHdoaWNoIGlzIG1haW5seQordXNlZCBpbiBQQUwgVkNSJ3MgdGhhdCBhcmUgYWJsZSB0byBwbGF5IGJhY2sgTlRTQy4gUEFMIDYwIHNlZW1zIHRvIGJlIHRoZSBzYW1lCithcyBOVFNDIDQuNDMgLiBUaGUgRGF0YXNoZWV0cyBhbHNvIHRhbGsgYWJvdXQgTlRTQyA0NCwgSXQgc2VlbXMgYXMgaWYgaXQgd291bGQgCitiZSB0aGUgc2FtZSBhcyBOVFNDIDQuNDMuIAorTlRTQyBDb21icyBzZWVtcyB0byBiZSBhIGRlY29kZXIgbW9kZSB3aGVyZSB0aGUgZGVjb2RlciB1c2VzIGEgY29tYiBmaWx0ZXIKK3RvIHNwbGl0IGNvbWEgYW5kIGx1bWEgaW5zdGVhZCBvZiBhIERlbGF5IGxpbmUuCisKK0J1dCBJIGRpZCBub3QgZGVmaWFudGx5IGZpbmQgb3V0IHdoYXQgTlRTQyBDb21iIGlzLgorCitQaGlsaXBzIHNhYTcxMTEgVFYgZGVjb2Rlcgord2FzIGludHJvZHVjZWQgaW4gMTk5NywgaXMgdXNlZCBpbiB0aGUgQlVaIGFuZCAKK2NhbiBoYW5kbGU6IFBBTCBCL0cvSC9JLCBQQUwgTiwgUEFMIE0sIE5UU0MgTSwgTlRTQyBOLCBOVFNDIDQuNDMgYW5kIFNFQ0FNIAorCitQaGlsaXBzIHNhYTcxMTBhIFRWIGRlY29kZXIKK3dhcyBpbnRyb2R1Y2VkIGluIDE5OTUsIGlzIHVzZWQgaW4gdGhlIFBpbm5hY2xlL01pcm8gREMxMChuZXcpLCBEQzEwKyBhbmQKK2NhbiBoYW5kbGU6IFBBTCBCL0csIE5UU0MgTSBhbmQgU0VDQU0gCisKK1BoaWxpcHMgc2FhNzExNCBUViBkZWNvZGVyCit3YXMgaW50cm9kdWNlZCBpbiAyMDAwLCBpcyB1c2VkIGluIHRoZSBMTUwzM1IxMCBhbmQgIAorY2FuIGhhbmRsZTogUEFMIEIvRy9EL0gvSS9OLCBQQUwgTiwgUEFMIE0sIE5UU0MgTSwgTlRTQyA0LjQzIGFuZCBTRUNBTQorCitCcm9va3RyZWUgYnQ4MTkgVFYgZGVjb2Rlcgord2FzIGludHJvZHVjZWQgaW4gMTk5NiwgYW5kIGlzIHVzZWQgaW4gdGhlIExNTDMzIGFuZAorY2FuIGhhbmRsZTogUEFMIEIvRC9HL0gvSSwgTlRTQyBNCisKK01pY3JvbmFzIHZweDMyMjBhIFRWIGRlY29kZXIKK3dhcyBpbnRyb2R1Y2VkIGluIDE5OTYsIGlzIHVzZWQgaW4gdGhlIERDMzAgYW5kIERDMzArIGFuZAorY2FuIGhhbmRsZTogUEFMIEIvRy9IL0ksIFBBTCBOLCBQQUwgTSwgTlRTQyBNLCBOVFNDIDQ0LCBQQUwgNjAsIFNFQ0FNLE5UU0MgQ29tYgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4yIFdoYXQgdGhlIFRWIGVuY29kZXIgY2FuIGRvIGFuIHdoYXQgbm90CisKK1RoZSBUViBlbmNvZGVyIGFyZSBkb2luZyB0aGUgInNhbWUiIGFzIHRoZSBkZWNvZGVyLCBidXQgaW4gdGhlIG9kZXIgZGlyZWN0aW9uLgorWW91IGZlZWQgdGhlbSBkaWdpdGFsIGRhdGEgYW5kIHRoZSBnZW5lcmF0ZSBhIENvbXBvc2l0ZSBvciBTVkhTIHNpZ25hbC4KK0ZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sb3JzeXN0ZW1zIGFuZCBUViBub3JtIHRha2UgYSBsb29rIGluIHRoZQorVFYgZGVjb2RlciBzZWN0aW9uLgorCitQaGlsaXBzIHNhYTcxODUgVFYgRW5jb2Rlcgord2FzIGludHJvZHVjZWQgaW4gMTk5NiwgaXMgdXNlZCBpbiB0aGUgQlVaCitjYW4gZ2VuZXJhdGU6IFBBTCBCL0csIE5UU0MgTQorCitCcm9va3RyZWUgYnQ4NTYgVFYgRW5jb2Rlcgord2FzIGludHJvZHVjZWQgaW4gMTk5NCwgaXMgdXNlZCBpbiB0aGUgTE1MMzMgCitjYW4gZ2VuZXJhdGU6IFBBTCBCL0QvRy9IL0kvTiwgUEFMIE0sIE5UU0MgTSwgUEFMLU4gKEFyZ2VudGluYSkKKworQW5hbG9nIERldmljZXMgYWR2NzE3MCBUViBFbmNvZGVyCit3YXMgaW50cm9kdWNlZCBpbiAyMDAwLCBpcyB1c2VkIGluIHRoZSBMTUwzMDBSMTAKK2NhbiBnZW5lcmF0ZTogUEFMIEIvRC9HL0gvSS9OLCBQQUwgTSwgTlRTQyBNLCBQQUwgNjAKKworQW5hbG9nIERldmljZXMgYWR2NzE3NSBUViBFbmNvZGVyCit3YXMgaW50cm9kdWNlZCBpbiAxOTk2LCBpcyB1c2VkIGluIHRoZSBEQzEwLCBEQzEwKywgREMxMCBvbGQsIERDMzAsIERDMzArCitjYW4gZ2VuZXJhdGU6IFBBTCBCL0QvRy9IL0kvTiwgUEFMIE0sIE5UU0MgTQorCitJVFQgbXNlMzAwMCBUViBlbmNvZGVyCit3YXMgaW50cm9kdWNlZCBpbiAxOTkxLCBpcyB1c2VkIGluIHRoZSBEQzEwIG9sZAorY2FuIGdlbmVyYXRlOiBQQUwgLCBOVFNDICwgU0VDQU0KKworVGhlIGFkdjcxN3gsIHNob3VsZCBiZSBhYmxlIHRvIHByb2R1Y2UgUEFMIE4uIEJ1dCB5b3UgZmluZCBub3RoaW5nIFBBTCBOIAorc3BlY2lmaWMgaW4gdGhlIHRoZSByZWdpc3RlcnMuIFNlZW0gdGhhdCB5b3UgaGF2ZSB0byByZXVzZSBhIG90aGVyIHN0YW5kYXJkCit0byBnZW5lcmF0ZSBQQUwgTiwgbWF5YmUgaXQgd291bGQgd29yayBpZiB5b3UgdXNlIHRoZSBQQUwgTSBzZXR0aW5ncy4gCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzIuIEhvdyBkbyBJIGdldCB0aGlzIGRhbW4gdGhpbmcgdG8gd29yaworCitMb2FkIHpyMzYwNjcuby4gSWYgaXQgY2FuJ3QgYXV0b2RldGVjdCB5b3VyIGNhcmQsIHVzZSB0aGUgY2FyZD1YIGluc21vZAorb3B0aW9uIHdpdGggWCBiZWluZyB0aGUgY2FyZCBudW1iZXIgYXMgZ2l2ZW4gaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCitUbyBoYXZlIG1vcmUgdGhhbiBvbmUgY2FyZCwgdXNlIGNhcmQ9WDFbLFgyWyxYMyxbWDRbLi5dXV1dCisKK1RvIGF1dG9tYXRlIHRoaXMsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgL2V0Yy9tb2Rwcm9iZS5jb25mOgorCitvcHRpb25zIHpyMzYwNjcgY2FyZD1YMVssWDJbLFgzWyxYNFsuLl1dXV0KK2FsaWFzIGNoYXItbWFqb3ItODEtMCB6cjM2MDY3CisKK09uZSB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0aGlzIGRvZXNuJ3QgbG9hZCB6cjM2MDY3Lm8gaXRzZWxmIHlldC4gSXQKK2p1c3QgYXV0b21hdGVzIGxvYWRpbmcuIElmIHlvdSBzdGFydCB1c2luZyB4YXd0diwgdGhlIGRldmljZSB3b24ndCBsb2FkIG9uCitzb21lIHN5c3RlbXMsIHNpbmNlIHlvdSdyZSB0cnlpbmcgdG8gbG9hZCBtb2R1bGVzIGFzIGEgdXNlciwgd2hpY2ggaXMgbm90CithbGxvd2VkICgicGVybWlzc2lvbiBkZW5pZWQiKS4gQSBxdWljayB3b3JrYXJvdW5kIGlzIHRvIGFkZCAnTG9hZCAidjRsIicgdG8KK1hGODZDb25maWctNCB3aGVuIHlvdSB1c2UgWCBieSBkZWZhdWx0LCBvciB0byBydW4gJ3Y0bC1jb25mIC1jIDxkZXZpY2U+JyBpbgorb25lIG9mIHlvdXIgc3RhcnR1cCBzY3JpcHRzIChub3JtYWxseSByYy5sb2NhbCkgaWYgeW91IGRvbid0IHVzZSBYLiBCb3RoCittYWtlIHN1cmUgdGhhdCB0aGUgbW9kdWxlcyBhcmUgbG9hZGVkIG9uIHN0YXJ0dXAsIHVuZGVyIHRoZSByb290IGFjY291bnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiszLiBXaGF0IG1haW5ib2FyZCBzaG91bGQgSSB1c2UgKG9yIHdoeSBkb2Vzbid0IG15IGNhcmQgd29yaykKKworPGluc2VydCBsb3VzeSBkaXNjbGFpbWVyIGhlcmU+LiBJbiBzaG9ydDogZ29vZD1TaVMvSW50ZWwsIGJhZD1WSUEuCisKK0V4cGVyaWVuY2UgdGVsbHMgdXMgdGhhdCBwZW9wbGUgd2l0aCBhIEJ1eiwgb24gYXZlcmFnZSwgaGF2ZSBtb3JlIHByb2JsZW1zCit0aGFuIHVzZXJzIHdpdGggYSBEQzEwKy9MTUwzMy4gQWxzbywgaXQgdGVsbHMgdXMgdGhhdCBwZW9wbGUgb3duaW5nIGEgVklBLQorYmFzZWQgbWFpbmJvYXJkIChrdFhYWCwgTVZQMykgaGF2ZSBtb3JlIHByb2JsZW1zIHRoYW4gdXNlcnMgd2l0aCBhIG1haW5ib2FyZAorYmFzZWQgb24gYSBkaWZmZXJlbnQgY2hpcHNldC4gSGVyZSdzIHNvbWUgbm90ZXMgZnJvbSBBbmRyZXcgU3RldmVuczoKKy0tCitIZXJlJ3MgbXkgZXhwZXJpZW5jZSBvZiB1c2luZyBMTUwzMyBhbmQgQnV6IG9uIHZhcmlvdXMgbW90aGVyYm9hcmRzOgorCitWSUEgTVZQMworCUZvcmdldCBpdC4gUG9pbnRsZXNzLiBEb2Vzbid0IHdvcmsuCitJbnRlbCA0MzBGWCAoUGVudGl1bSAyMDApIAorCUxNTDMzIHBlcmZlY3QsIEJ1eiB0b2xlcmFibGUgKDMgb3IgNCBmcmFtZXMgZHJvcHBlZCBwZXIgbW92aWUpCitJbnRlbCA0NDBCWCAoZWFybHkgc3RlcHBpbmcpCisJTE1MMzMgdG9sZXJhYmxlLiBCdXogc3RhcnRpbmcgdG8gZ2V0IGFubm95aW5nICg2LTEwIGZyYW1lcy9ob3VyKQorSW50ZWwgNDQwQlggKGxhdGUgc3RlcHBpbmcpCisJQnV6IHRvbGVyYWJsZSwgTE1MMyBhbG1vc3QgcGVyZmVjdCAob2NjYXNpb25hbCBzaW5nbGUgZnJhbWUgZHJvcHMpCitTaVM3MzUKKwlMTUwzMyBwZXJmZWN0LCBCdXogdG9sZXJhYmxlLgorVklBIEtUMTMzKCopCisJTE1MMzMgc3RhcnRpbmcgdG8gZ2V0IGFubm95aW5nLCBCdXogcG9vciBlbm91Z2ggdGhhdCBJIGhhdmUgdXAuCisKK0JvdGggNDQwQlggYm9hcmRzIHdlcmUgZHVhbCBDUFUgdmVyc2lvbnMuCistLQorQmVybmhhcmQgUHJhc2NoaW5nZXIgbGF0ZXIgYWRkZWQ6CistLQorQU1EIDc1MQorCUJ1eiBwZXJmZWN0LXRvbGVyYWJsZQorQU1EIDc2MAorCUJ1eiBwZXJmZWN0LXRvbGVyYWJsZQorLS0KK0luIGdlbmVyYWwsIHBlb3BsZSBvbiB0aGUgdXNlciBtYWlsaW5nbGlzdCB3b24ndCBnaXZlIHlvdSBtdWNoIG9mIGEgY2hhbmNlCitpZiB5b3UgaGF2ZSBhIFZJQS1iYXNlZCBtb3RoZXJib2FyZC4gVGhleSBtYXkgYmUgY2hlYXAsIGJ1dCBzb21ldGltZXMsIHlvdSdkCityYXRoZXIgd2FudCB0byBzcGVuZCBzb21lIG1vcmUgbW9uZXkgb24gYmV0dGVyIGJvYXJkcy4gSW4gZ2VuZXJhbCwgVklBCittYWluYm9hcmQncyBJREUvUENJIHBlcmZvcm1hbmNlIHdpbGwgYWxzbyBzdWNrIGJhZGx5IGNvbXBhcmVkIHRvIG90aGVycy4KK1lvdSdsbCBub3RpY2VkIHRoZSBEQzEwKy9EQzMwKyBhcmVuJ3QgbWVudGlvbmVkIGFueXdoZXJlIGluIHRoZSBvdmVydmlldy4KK0Jhc2ljYWxseSwgeW91IGNhbiBhc3N1bWUgdGhhdCBpZiB0aGUgQnV6IHdvcmtzLCB0aGUgTE1MMzMgd2lsbCB3b3JrIHRvby4gSWYKK3RoZSBMTUwzMyB3b3JrcywgdGhlIERDMTArL0RDMzArIHdpbGwgd29yayB0b28uIFRoZXkncmUgbW9zdCB0b2xlcmFudCB0bworZGlmZmVyZW50IG1haW5ib2FyZCBjaGlwc2V0cyBmcm9tIGFsbCBvZiB0aGUgc3VwcG9ydGVkIGNhcmRzLgorCitJZiB5b3UgZXhwZXJpZW5jZSB0aW1lb3V0cyBkdXJpbmcgY2FwdHVyZSwgYnV5IGEgYmV0dGVyIG1haW5ib2FyZCBvciBsb3dlcgordGhlIHF1YWxpdHkvYnVmZmVyc2l6ZSBkdXJpbmcgY2FwdHVyZSAoc2VlICdDb25jZXJuaW5nIGJ1ZmZlciBzaXplcywgcXVhbGl0eSwKK291dHB1dCBzaXplIGV0Yy4nKS4gSWYgaXQgaGFuZ3MsIHRoZXJlJ3MgbGl0dGxlIHdlIGNhbiBkbyBhcyBvZiBub3cuIENoZWNrCit5b3VyIElSUXMgYW5kIG1ha2Ugc3VyZSB0aGUgY2FyZCBoYXMgaXRzIG93biBpbnRlcnJ1cHRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNC4gUHJvZ3JhbW1pbmcgaW50ZXJmYWNlCisKK1RoaXMgZHJpdmVyIGNvbmZvcm1zIHRvIHZpZGVvNGxpbnV4IGFuZCB2aWRlbzRsaW51eDIsIGJvdGggY2FuIGJlIHVzZWQgdG8KK3VzZSB0aGUgZHJpdmVyLiBTaW5jZSB2aWRlbzRsaW51eCBkaWRuJ3QgcHJvdmlkZSBhZGVxdWF0ZSBjYWxscyB0byBmdWxseQordXNlIHRoZSBjYXJkcycgZmVhdHVyZXMsIHdlJ3ZlIGludHJvZHVjZWQgc2V2ZXJhbCBwcm9ncmFtbWluZyBleHRlbnNpb25zLAord2hpY2ggYXJlIGN1cnJlbnRseSBvZmZpY2lhbGx5IGFjY2VwdGVkIGluIHRoZSAyLjQueCBicmFuY2ggb2YgdGhlIGtlcm5lbC4KK1RoZXNlIGV4dGVuc2lvbnMgYXJlIGtub3duIGFzIHRoZSB2NGwvbWpwZWcgZXh0ZW5zaW9ucy4gU2VlIHpvcmFuLmggZm9yCitkZXRhaWxzIChzdHJ1Y3RzL2lvY3RscykuCisKK0luZm9ybWF0aW9uIC0gdmlkZW80bGludXg6CitodHRwOi8vcm9hZHJ1bm5lci5zd2Fuc2VhLmxpbnV4Lm9yZy51ay92NGxhcGkuc2h0bWwKK0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwKKy91c3IvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCisKK0luZm9ybWF0aW9uIC0gdmlkZW80bGludXgvbWpwZWcgZXh0ZW5zaW9uczoKKy4vem9yYW4uaAorKGFsc28gc2VlIGJlbG93KQorCitJbmZvcm1hdGlvbiAtIHZpZGVvNGxpbnV4MjoKK2h0dHA6Ly93d3cudGhlZGlya3Mub3JnL3Y0bDIvCisvdXNyL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKK2h0dHA6Ly93d3cuYnl0ZXNleC5vcmcvdjRsLworCitNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2aWRlbzRsaW51eC9tanBlZyBleHRlbnNpb25zLCBieSBTZXJndWVpCitNaXJpZG9ub3ZpIGFuZCBSYWluZXIgSm9oYW5uaToKKy0tCitUaGUgaW9jdGxzIGZvciB0aGF0IGludGVyZmFjZSBhcmUgYXMgZm9sbG93czoKKworQlVaSU9DX0dfUEFSQU1TCitCVVpJT0NfU19QQVJBTVMKKworR2V0IGFuZCBzZXQgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGJ1ei4gVGhlIHVzZXIgc2hvdWxkIGFsd2F5cyBkbyBhCitCVVpJT0NfR19QQVJBTVMgKHdpdGggYSBzdHJ1Y3QgYnV6X3BhcmFtcykgdG8gb2J0YWluIHRoZSBkZWZhdWx0CitzZXR0aW5ncywgY2hhbmdlIHdoYXQgaGUgbGlrZXMgYW5kIHRoZW4gbWFrZSBhIEJVWklPQ19TX1BBUkFNUyBjYWxsLgorCitCVVpJT0NfUkVRQlVGUworCitCZWZvcmUgYmVpbmcgYWJsZSB0byBjYXB0dXJlL3BsYXliYWNrLCB0aGUgdXNlciBoYXMgdG8gcmVxdWVzdAordGhlIGJ1ZmZlcnMgaGUgaXMgd2FudGluZyB0byB1c2UuIEZpbGwgdGhlIHN0cnVjdHVyZQorem9yYW5fcmVxdWVzdGJ1ZmZlcnMgd2l0aCB0aGUgc2l6ZSAocmVjb21tZW5kZWQ6IDI1NioxMDI0KSBhbmQKK3RoZSBudW1iZXIgKHJlY29tbWVuZGVkIDMyIHVwIHRvIDI1NikuIFRoZXJlIGFyZSBubyBzdWNoIHJlc3RyaWN0aW9ucworYXMgZm9yIHRoZSBWaWRlbyBmb3IgTGludXggYnVmZmVycywgeW91IHNob3VsZCBMRUFWRSBTVUZGSUNJRU5UCitNRU1PUlkgZm9yIHlvdXIgc3lzdGVtIGhvd2V2ZXIsIGVsc2Ugc3RyYW5nZSB0aGluZ3Mgd2lsbCBoYXBwZW4gLi4uLgorT24gcmV0dXJuLCB0aGUgem9yYW5fcmVxdWVzdGJ1ZmZlcnMgc3RydWN0dXJlIGNvbnRhaW5zIG51bWJlciBhbmQKK3NpemUgb2YgdGhlIGFjdHVhbGx5IGFsbG9jYXRlZCBidWZmZXJzLgorWW91IHNob3VsZCB1c2UgdGhlc2UgbnVtYmVycyBmb3IgZG9pbmcgYSBtbWFwIG9mIHRoZSBidWZmZXJzCitpbnRvIHRoZSB1c2VyIHNwYWNlLgorVGhlIEJVWklPQ19SRVFCVUZTIGlvY3RsIGFsc28gbWFrZXMgaXQgaGFwcGVuLCB0aGF0IHRoZSBuZXh0IG1tYXAKK21hcHMgdGhlIE1KUEVHIGJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBWNEwgYnVmZmVycy4KKworQlVaSU9DX1FCVUZfQ0FQVAorQlVaSU9DX1FCVUZfUExBWQorCitRdWV1ZSBhIGJ1ZmZlciBmb3IgY2FwdHVyZSBvciBwbGF5YmFjay4gVGhlIGZpcnN0IGNhbGwgYWxzbyBzdGFydHMKK3N0cmVhbWluZyBjYXB0dXJlLiBXaGVuIHN0cmVhbWluZyBjYXB0dXJlIGlzIGdvaW5nIG9uLCB5b3UgbWF5Citvbmx5IHF1ZXVlIGZ1cnRoZXIgYnVmZmVycyBvciBpc3N1ZSBzeW5jcyB1bnRpbCBzdHJlYW1pbmcKK2NhcHR1cmUgaXMgc3dpdGNoZWQgb2ZmIGFnYWluIHdpdGggYSBhcmd1bWVudCBvZiAtMSB0bworYSBCVVpJT0NfUUJVRl9DQVBUL0JVWklPQ19RQlVGX1BMQVkgaW9jdGwuCisKK0JVWklPQ19TWU5DCisKK0lzc3VlIHRoaXMgaW9jdGwgd2hlbiBhbGwgYnVmZmVycyBhcmUgcXVldWVkLiBUaGlzIGlvY3RsIHdpbGwKK2Jsb2NrIHVudGlsIHRoZSBmaXJzdCBidWZmZXIgYmVjb21lcyBmcmVlIGZvciBzYXZpbmcgaXRzCitkYXRhIHRvIGRpc2sgKGFmdGVyIEJVWklPQ19RQlVGX0NBUFQpIG9yIGZvciByZXVzZSAoYWZ0ZXIgQlVaSU9DX1FCVUZfUExBWSkuCisKK0JVWklPQ19HX1NUQVRVUworCitHZXQgdGhlIHN0YXR1cyBvZiB0aGUgaW5wdXQgbGluZXMgKHZpZGVvIHNvdXJjZSBjb25uZWN0ZWQvbm9ybSkuCisKK0ZvciBwcm9ncmFtbWluZyBleGFtcGxlLCBwbGVhc2UsIGxvb2sgYXQgbGF2cmVjLmMgYW5kIGxhdnBsYXkuYyBjb2RlIGluCitsYXZ0b29scy0xLjJwMiBwYWNrYWdlIChVUkw6IGh0dHA6Ly93d3cuY2ljZXNlLm14L35taXJzZXYvREMxMHBsdXMvKQorYW5kIHRoZSAnZXhhbXBsZXMnIGRpcmVjdG9yeSBpbiB0aGUgb3JpZ2luYWwgQnV6IGRyaXZlciBkaXN0cmlidXRpb24uCisKK0FkZGl0aW9uYWwgbm90ZXMgZm9yIHNvZnR3YXJlIGRldmVsb3BlcnM6CisKKyAgIFRoZSBkcml2ZXIgcmV0dXJucyBtYXh3aWR0aCBhbmQgbWF4aGVpZ2h0IHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvCisgICB0aGUgY3VycmVudCBUViBzdGFuZGFyZCAobm9ybSkuIFRoZXJlZm9yZSwgdGhlIHNvZnR3YXJlIHdoaWNoCisgICBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgZHJpdmVyIGFuZCAiYXNrcyIgZm9yIHRoZXNlIHBhcmFtZXRlcnMgc2hvdWxkCisgICBmaXJzdCBzZXQgdGhlIGNvcnJlY3Qgbm9ybS4gV2VsbCwgaXQgc2VlbXMgbG9naWNhbGx5IGNvcnJlY3Q6IFRWCisgICBzdGFuZGFyZCBpcyAibW9yZSBjb25zdGFudCIgZm9yIGN1cnJlbnQgY291bnRyeSB0aGFuIGdlb21ldHJ5CisgICBzZXR0aW5ncyBvZiBhIHZhcmlldHkgb2YgVFYgY2FwdHVyZSBjYXJkcyB3aGljaCBtYXkgd29yayBpbiBJVFUgb3IKKyAgIHNxdWFyZSBwaXhlbCBmb3JtYXQuIFJlbWVtYmVyIHRoYXQgdXNlcnMgbm93IGNhbiBsb2NrIHRoZSBub3JtIHRvCisgICBhdm9pZCBhbnkgYW1iaWd1aXR5LgorLS0KK1BsZWFzZSBub3RlIHRoYXQgbGF2cGxheS9sYXZyZWMgYXJlIGFsc28gaW5jbHVkZWQgaW4gdGhlIE1KUEVHLXRvb2xzCisoaHR0cDovL21qcGVnLnNmLm5ldC8pLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNS4gQXBwbGljYXRpb25zCisKK0FwcGxpY2F0aW9ucyBrbm93biB0byB3b3JrIHdpdGggdGhpcyBkcml2ZXI6CisKK1RWIHZpZXdpbmc6CisqIHhhd3R2CisqIGt3aW50dgorKiBwcm9iYWJseSBhbnkgVFYgYXBwbGljYXRpb24gdGhhdCBzdXBwb3J0cyB2aWRlbzRsaW51eCBvciB2aWRlbzRsaW51eDIuCisKK01KUEVHIGNhcHR1cmUvcGxheWJhY2s6CisqIG1qcGVndG9vbHMvbGF2dG9vbHMgKG9yIExpbnV4IFZpZGVvIFN0dWRpbykKKyogZ3N0cmVhbWVyCisqIG1wbGF5ZXIKKworR2VuZXJhbCByYXcgY2FwdHVyZToKKyogeGF3dHYKKyogZ3N0cmVhbWVyCisqIHByb2JhYmx5IGFueSBhcHBsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIHZpZGVvNGxpbnV4IG9yIHZpZGVvNGxpbnV4MgorCitWaWRlbyBlZGl0aW5nOgorKiBDaW5lbGVycmEKKyogTWFpbkFjdG9yCisqIG1qcGVndG9vbHMgKG9yIExpbnV4IFZpZGVvIFN0dWRpbykKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzYuIENvbmNlcm5pbmcgYnVmZmVyIHNpemVzLCBxdWFsaXR5LCBvdXRwdXQgc2l6ZSBldGMuCisKK1RoZSB6cjM2MDYwIGNhbiBkbyAxOjIgSlBFRyBjb21wcmVzc2lvbi4gVGhpcyBpcyByZWFsbHkgdGhlIHRoZW9yZXRpY2FsCittYXhpbXVtIHRoYXQgdGhlIGNoaXBzZXQgY2FuIHJlYWNoLiBUaGUgZHJpdmVyIGNhbiwgaG93ZXZlciwgbGltaXQgY29tcHJlc3Npb24KK3RvIGEgbWF4aW11bSAoc2l6ZSkgb2YgMTo0LiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgc29tZSBjYXJkcyAoZS5nLiBCdXopCitjYW4ndCBoYW5kbGUgMToyIGNvbXByZXNzaW9uIHdpdGhvdXQgc3RvcHBpbmcgY2FwdHVyZSBhZnRlciBvbmx5IGEgZmV3IG1pbnV0ZXMuCitXaXRoIDE6NCwgaXQnbGwgbW9zdGx5IHdvcmsuIElmIHlvdSBoYXZlIGEgQnV6LCB1c2UgJ2xvd19iaXRyYXRlPTEnIHRvIGdvIGludG8KKzE6NCBtYXguIGNvbXByZXNzaW9uIG1vZGUuCisKKzEwMCUgSlBFRyBxdWFsaXR5IGlzIHRodXMgMToyIGNvbXByZXNzaW9uIGluIHByYWN0aWNlLiBTbyBmb3IgYSBmdWxsIFBBTCBmcmFtZQorKHNpemUgNzIweDU3NikuIFRoZSBKUEVHIGZpZWxkcyBhcmUgc3RvcmVkIGluIFlVWTIgZm9ybWF0LCBzbyB0aGUgc2l6ZSBvZiB0aGUKK2ZpZWxkcyBhcmUgNzIweDI4OHgxNi8yIGJpdHMvZmllbGQgKDIgZmllbGRzL2ZyYW1lKSA9IDIwNzM2MCBieXRlcy9maWVsZCB4IDIgPQorNDE0NzIwIGJ5dGVzL2ZyYW1lIChhZGQgc29tZSBtb3JlIGJ5dGVzIGZvciBoZWFkZXJzIGFuZCBESFQgKGh1ZmZtYW4pL0RRVAorKHF1YW50aXphdGlvbikgdGFibGVzLCBhbmQgeW91J2xsIGdldCB0byBzb21ldGhpbmcgbGlrZSA1MTJrQiBwZXIgZnJhbWUgZm9yCisxOjIgY29tcHJlc3Npb24uIEZvciAxOjQgY29tcHJlc3Npb24sIHlvdSdkIGhhdmUgZnJhbWVzIG9mIGhhbGYgdGhpcyBzaXplLgorCitTb21lIGFkZGl0aW9uYWwgZXhwbGFuYXRpb24gYnkgTWFydGluIFNhbXVlbHNzb24sIHdoaWNoIGFsc28gZXhwbGFpbnMgdGhlCitpbXBvcnRhbmNlIG9mIGJ1ZmZlciBzaXplczoKKy0tCis+IEhtbSwgSSBkbyBub3QgdGhpbmsgaXQgaXMgcmVhbGx5IHRoYXQgd2F5LiBXaXRoIHRoZSBjdXJyZW50IChkb3dubG9hZGVkCis+IGF0IDE4OjAwIE1vbmRheSkgZHJpdmVyIEkgZ2V0IHRoYXQgb3V0cHV0IHNpemVzIGZvciAxMCBzZWM6Cis+IC1xIDUwIC1iIDEyOCA6IDI0LjI4My4zMzIgQnl0ZXMKKz4gLXEgNTAgLWIgMjU2IDogNDguNDQyLjM2OAorPiAtcSAyNSAtYiAxMjggOiAyNC42NTUuOTkyCis+IC1xIDI1IC1iIDI1NiA6IDI1Ljg1OS44MjAKKworSSB3b2tlIHVwLCBhbmQgY2FuJ3QgZ28gdG8gc2xlZXAgYWdhaW4uIEknbGwga2lsbCBzb21lIHRpbWUgZXhwbGFpbmluZyB3aHkgCit0aGlzIGRvZXNuJ3QgbG9vayBzdHJhbmdlIHRvIG1lLgorCitMZXQncyBkbyBzb21lIG1hdGggdXNpbmcgYSB3aWR0aCBvZiA3MDQgcGl4ZWxzLiBJJ20gbm90IHN1cmUgd2hldGhlciB0aGUgQnV6IAorYWN0dWFsbHkgdXNlIHRoYXQgbnVtYmVyIG9yIG5vdCwgYnV0IHRoYXQncyBub3QgdG9vIGltcG9ydGFudCByaWdodCBub3cuCisKKzcwNHgyODggcGl4ZWxzLCBvbmUgZmllbGQsIGlzIDIwMjc1MiBwaXhlbHMuIERpdmlkZWQgYnkgNjQgcGl4ZWxzIHBlciBibG9jazsgCiszMTY4IGJsb2NrcyBwZXIgZmllbGQuIEVhY2ggcGl4ZWwgY29uc2lzdCBvZiB0d28gYnl0ZXM7IDEyOCBieXRlcyBwZXIgYmxvY2s7IAorMTAyNCBiaXRzIHBlciBibG9jay4gMTAwJSBpbiB0aGUgbmV3IGRyaXZlciBtZWFuIDE6MiBjb21wcmVzc2lvbjsgdGhlIG1heGltdW0gCitvdXRwdXQgYmVjb21lcyA1MTIgYml0cyBwZXIgYmxvY2suIEFjdHVhbGx5IDUxMCwgYnV0IDUxMiBpcyBzaW1wbGVyIHRvIHVzZSAKK2ZvciBjYWxjdWxhdGlvbnMuCisKK0xldCdzIHNheSB0aGF0IHdlIHNwZWNpZnkgZDFxNTAuIFdlIHRodXMgd2FudCAyNTYgYml0cyBwZXIgYmxvY2s7IHRpbWVzIDMxNjggCitiZWNvbWVzIDgxMTAwOCBiaXRzOyAxMDEzNzYgYnl0ZXMgcGVyIGZpZWxkLiBXZSdyZSB0YWxraW5nIHJhdyBiaXRzIGFuZCBieXRlcyAKK2hlcmUsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IGZhbmN5IGNvcnJlY3Rpb25zIGZvciBiaXRzLXBlci1waXhlbCBvciBzdWNoIAordGhpbmdzLiAxMDEzNzYgYnl0ZXMgcGVyIGZpZWxkLgorCitkMSB2aWRlbyBjb250YWlucyB0d28gZmllbGRzIHBlciBmcmFtZS4gVGhvc2Ugc3VtIHVwIHRvIDIwMjc1MiBieXRlcyBwZXIgCitmcmFtZSwgYW5kIG9uZSBvZiB0aG9zZSBmcmFtZXMgZ29lcyBpbnRvIGVhY2ggYnVmZmVyLgorCitCdXQgd2FpdCBhIHNlY29uZCEgLWIxMjggZ2l2ZXMgMTI4a0IgYnVmZmVycyEgSXQncyBub3QgcG9zc2libGUgdG8gY3JhbSAKKzIwMjc1MiBieXRlcyBvZiBKUEVHIGRhdGEgaW50byAxMjhrQiEKKworVGhpcyBpcyB3aGF0IHRoZSBkcml2ZXIgbm90aWNlIGFuZCBhdXRvbWF0aWNhbGx5IGNvbXBlbnNhdGUgZm9yIGluIHlvdXIgCitleGFtcGxlcy4gTGV0J3MgZG8gc29tZSBtYXRoIHVzaW5nIHRoaXMgaW5mb3JtYXRpb246CisKKzEyOGtCIGlzIDEzMTA3MiBieXRlcy4gSW4gdGhpcyBidWZmZXIsIHdlIHdhbnQgdG8gc3RvcmUgdHdvIGZpZWxkcywgd2hpY2ggCitsZWF2ZXMgNjU1MzYgYnl0ZXMgZm9yIGVhY2ggZmllbGQuIFVzaW5nIDMxNjggYmxvY2tzIHBlciBmaWVsZCwgd2UgZ2V0IAorMjAuNjg2ODY4NjguLi4gYXZhaWxhYmxlIGJ5dGVzIHBlciBibG9jazsgMTY1IGJpdHMuIFdlIGNhbid0IGFsbG93IHRoZSAKK3JlcXVlc3QgZm9yIDI1NiBiaXRzIHBlciBibG9jayB3aGVuIHRoZXJlJ3Mgb25seSAxNjUgYml0cyBhdmFpbGFibGUhIFRoZSAtcTUwIAorb3B0aW9uIGlzIHNpbGVudGx5IG92ZXJyaWRkZW4sIGFuZCB0aGUgLWIxMjggb3B0aW9uIHRha2VzIHByZWNlZGVuY2UsIGxlYXZpbmcgCit1cyB3aXRoIHRoZSBlcXVpdmFsZW5jZSBvZiAtcTMyLgorCitUaGlzIGdpdmVzIHVzIGEgZGF0YSByYXRlIG9mIDE2NSBiaXRzIHBlciBibG9jaywgd2hpY2gsIHRpbWVzIDMxNjgsIHN1bXMgdXAgCit0byA2NTM0MCBieXRlcyBwZXIgZmllbGQsIG91dCBvZiB0aGUgYWxsb3dlZCA2NTUzNi4gVGhlIGN1cnJlbnQgZHJpdmVyIGhhcyAKK2Fub3RoZXIgbGV2ZWwgb2YgcmF0ZSBsaW1pdGluZzsgaXQgd29uJ3QgYWNjZXB0IC1xIHZhbHVlcyB0aGF0IGZpbGwgbW9yZSB0aGFuIAorNi84IG9mIHRoZSBzcGVjaWZpZWQgYnVmZmVycy4gKEknbSBub3Qgc3VyZSB3aHkuICJQbGF5aW5nIGl0IHNhZmUiIHNlZW0gdG8gYmUgCithIHNhZmUgYmV0LiBQZXJzb25hbGx5LCBJIHRoaW5rIEkgd291bGQgaGF2ZSBsb3dlcmVkIHJlcXVlc3RlZC1iaXRzLXBlci1ibG9jayAKK2J5IG9uZSwgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4pIFdlIGNhbid0IHVzZSAxNjUgYml0cyBwZXIgYmxvY2ssIGJ1dCBoYXZlIHRvIAorbG93ZXIgaXQgYWdhaW4sIHRvIDYvOCBvZiB0aGUgYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZTogV2UgZW5kIHVwIHdpdGggMTI0IGJpdHMgCitwZXIgYmxvY2ssIHRoZSBlcXVpdmFsZW5jZSBvZiAtcTI0LiBXaXRoIDEyOGtCIGJ1ZmZlcnMsIHlvdSBjYW4ndCB1c2UgZ3JlYXRlciAKK3RoYW4gLXEyNCBhdCAtZDEuIChBbmQgUEFMLCBhbmQgNzA0IHBpeGVscyB3aWR0aC4uLikKKworVGhlIHRoaXJkIGV4YW1wbGUgaXMgbGltaXRlZCB0byAtcTI0IHRocm91Z2ggdGhlIHNhbWUgcHJvY2Vzcy4gVGhlIHNlY29uZCAKK2V4YW1wbGUsIHVzaW5nIHZlcnkgc2ltaWxhciBjYWxjdWxhdGlvbnMsIGlzIGxpbWl0ZWQgdG8gLXE0OC4gVGhlIG9ubHkgCitleGFtcGxlIHRoYXQgYWN0dWFsbHkgZ3JhYiBhdCB0aGUgc3BlY2lmaWVkIC1xIHZhbHVlIGlzIHRoZSBsYXN0IG9uZSwgd2hpY2ggCitpcyBjbGVhcmx5IHZpc2libGUsIGxvb2tpbmcgYXQgdGhlIGZpbGUgc2l6ZS4KKy0tCisKK0NvbmNsdXNpb246IHRoZSBxdWFsaXR5IG9mIHRoZSByZXN1bHRpbmcgbW92aWUgZGVwZW5kcyBvbiBidWZmZXIgc2l6ZSwgcXVhbGl0eSwKK3doZXRoZXIgb3Igbm90IHlvdSB1c2UgJ2xvd19iaXRyYXRlPTEnIGFzIGluc21vZCBvcHRpb24gZm9yIHRoZSB6cjM2MDYwLmMKK21vZHVsZSB0byBkbyAxOjQgaW5zdGVhZCBvZiAxOjIgY29tcHJlc3Npb24sIGV0Yy4KKworSWYgeW91IGV4cGVyaWVuY2UgdGltZW91dHMsIGxvd2VyaW5nIHRoZSBxdWFsaXR5L2J1ZmZlcnNpemUgb3IgdXNpbmcKKydsb3dfYml0cmF0ZT0xIGFzIGluc21vZCBvcHRpb24gZm9yIHpyMzYwNjAubyBtaWdodCBhY3R1YWxseSBoZWxwLCBhcyBpcworcHJvdmVuIGJ5IHRoZSBCdXouCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis3LiBJdCBoYW5ncy9jcmFzaGVzL2ZhaWxzL3doYXRldmVycyEgSGVscCEKKworTWFrZSBzdXJlIHRoYXQgdGhlIGNhcmQgaGFzIGl0cyBvd24gaW50ZXJydXB0cyAoc2VlIC9wcm9jL2ludGVycnVwdHMpLCBjaGVjawordGhlIG91dHB1dCBvZiBkbWVzZyBhdCBoaWdoIHZlcmJvc2l0eSAobG9hZCB6cjM2MDY3Lm8gd2l0aCBkZWJ1Zz0yLAorbG9hZCBhbGwgb3RoZXIgbW9kdWxlcyB3aXRoIGRlYnVnPTEpLiBDaGVjayB0aGF0IHlvdXIgbWFpbmJvYXJkIGlzIGZhdm9yYWJsZQorKHNlZSBxdWVzdGlvbiAyKSBhbmQgaWYgbm90LCB0ZXN0IHRoZSBjYXJkIGluIGFub3RoZXIgY29tcHV0ZXIuIEFsc28gc2VlIHRoZQorbm90ZXMgZ2l2ZW4gaW4gcXVlc3Rpb24gMyBhbmQgdHJ5IGxvd2VyaW5nIHF1YWxpdHkvYnVmZmVyc2l6ZS9jYXB0dXJlc2l6ZQoraWYgcmVjb3JkaW5nIGZhaWxzIGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuCisKK0lmIGFsbCB0aGlzIGRvZXNuJ3QgaGVscCwgZ2l2ZSBhIGNsZWFyIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtIGluY2x1ZGluZworZGV0YWlsZWQgaGFyZHdhcmUgaW5mb3JtYXRpb24gKG1lbW9yeSticmFuZCwgbWFpbmJvYXJkK2NoaXBzZXQrYnJhbmQsIHdoaWNoCitNSlBFRyBjYXJkLCBwcm9jZXNzb3IsIG90aGVyIFBDSSBjYXJkcyB0aGF0IG1pZ2h0IGJlIG9mIGludGVyZXN0KSwgZ2l2ZSB0aGUKK3N5c3RlbSBQblAgaW5mb3JtYXRpb24gKC9wcm9jL2ludGVycnVwdHMsIC9wcm9jL2RtYSwgL3Byb2MvZGV2aWNlcyksIGFuZCBnaXZlCit0aGUga2VybmVsIHZlcnNpb24sIGRyaXZlciB2ZXJzaW9uLCBnbGliYyB2ZXJzaW9uLCBnY2MgdmVyc2lvbiBhbmQgYW55IG90aGVyCitpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IHBvc3NpYmx5IGJlIG9mIGludGVyZXN0LiBBbHNvIHByb3ZpZGUgdGhlIGRtZXNnIG91dHB1dAorYXQgaGlnaCB2ZXJib3NpdHkuIFNlZSAnQ29udGFjdGluZycgb24gaG93IHRvIGNvbnRhY3QgdGhlIGRldmVsb3BlcnMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis4LiBNYWludGFpbmVycy9Db250YWN0aW5nCisKK1RoZSBkcml2ZXIgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgTGF1cmVudCBQaW5jaGFydCBhbmQgUm9uYWxkIEJ1bHRqZQorKDxsYXVyZW50LnBpbmNoYXJ0QHNreW5ldC5iZT4gYW5kIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+KS4gRm9yIGJ1ZworcmVwb3J0cyBvciBxdWVzdGlvbnMsIHBsZWFzZSBjb250YWN0IHRoZSBtYWlsaW5nbGlzdCBpbnN0ZWFkIG9mIHRoZSBkZXZlbG9wZXJzCitpbmRpdmlkdWFsbHkuIEZvciB1c2VyIHF1ZXN0aW9ucyAoaS5lLiBidWcgcmVwb3J0cyBvciBob3ctdG8gcXVlc3Rpb25zKSwgc2VuZAorYW4gZW1haWwgdG8gPG1qcGVnLXVzZXJzQGxpc3RzLnNmLm5ldD4sIGZvciBkZXZlbG9wZXJzIChpLmUuIGlmIHlvdSB3YW50IHRvCitoZWxwIHByb2dyYW1taW5nKSwgc2VuZCBhbiBlbWFpbCB0byA8bWpwZWctZGV2ZWxvcGVyQGxpc3RzLnNmLm5ldD4uIFNlZQoraHR0cDovL3d3dy5zZi5uZXQvcHJvamVjdHMvbWpwZWcvIGZvciBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24uCisKK0ZvciBidWcgcmVwb3J0cywgYmUgc3VyZSB0byBpbmNsdWRlIGFsbCB0aGUgaW5mb3JtYXRpb24gYXMgZGVzY3JpYmVkIGluCit0aGUgc2VjdGlvbiAnSXQgaGFuZ3MvY3Jhc2hlcy9mYWlscy93aGF0ZXZlcnMhIEhlbHAhJy4gUGxlYXNlIG1ha2Ugc3VyZQoreW91J3JlIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiAoaHR0cDovL21qcGVnLnNmLm5ldC9kcml2ZXItem9yYW4vKS4KKworUHJldmlvdXMgbWFpbnRhaW5lcnMvZGV2ZWxvcGVycyBvZiB0aGlzIGRyaXZlciBpbmNsdWRlIFNlcmd1ZWkgTWlyaWRvbm92Cis8bWlyc2V2QGNpY2VzZS5teD4sIFdvbGZnYW5nIFNjaGVyciA8c2NoZXJyQG5ldDR5b3UubmV0PiwgRGF2ZSBQZXJrcworPGRwZXJrc0BpYm0ubmV0PiBhbmQgUmFpbmVyIEpvaGFubmkgPFJhaW5lckBKb2hhbm5pLmRlPi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzkuIExpY2Vuc2UKKworVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKK1NlZSBodHRwOi8vd3d3LmdudS5vcmcvIGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NPTlRSSUJVVE9SUyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DT05UUklCVVRPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmNDlkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DT05UUklCVVRPUlMKQEAgLTAsMCArMSwyNSBAQAorQ29udHJpYnV0b3JzIHRvIGJ0dHY6IAorCitNaWNoYWVsIENodSA8bW1jaHVAcG9ib3guY29tPgorICBBdmVyTWVkaWEgZml4IGFuZCBtb3JlIGZsZXhpYmxlIGNhcmQgcmVjb2duaXRpb24KKworQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAgVmlkZW80TGludXggaW50ZXJmYWNlIGFuZCAyLjEueCBrZXJuZWwgYWRhcHRhdGlvbgorCitDaHJpcyBLbGVpdHNjaAorICBIYXJkd2FyZSBJMkMKKyAgCitHZXJkIEtub3JyIDxrcmF4ZWxAY3MudHUtYmVybGluLmRlPiAKKyAgUmFkaW8gY2FyZCAoSVRUIHNvdW5kIHByb2Nlc3NvcikKKworYmlnZm9vdCA8YmlnZm9vdEBuZXQtd2F5Lm5ldD4KK1JhZ25hciBIb2psYW5kIEVzcGlub3NhIDxyYWduYXJAbWFjdWxhLm5ldD4KKyAgQ29uZmVyZW5jZVRWIGNhcmQKKworCisrIG1hbnkgbW9yZSAocGxlYXNlIG1haWwgbWUgaWYgeW91IGFyZSBtaXNzaW5nIGluIHRoaXMgbGlzdCBhbmQgd291bGQKKyAgICAgICAgICAgICBsaWtlIHRvIGJlIG1lbnRpb25lZCkKKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NhcmRzIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NhcmRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGM3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMKQEAgLTAsMCArMSw5NjQgQEAKKworR3VudGhlciBNYXllcidzIGJ0dHYgY2FyZCBnYWxsZXJ5IChncmFwaGljYWwgdmVyc2lvbiBvZiB0aGlzIHRleHQgZmlsZSA6LSkKK2lzIGF2YWlsYWJsZSBhdDogaHR0cDovL3d3dy5idHR2LWdhbGxlcnkuZGUvCisKKworU3VwcG9ydGVkIGNhcmRzOgorQnQ4NDgvQnQ4NDhhL0J0ODQ5L0J0ODc4L0J0ODc5IGNhcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIGNhcmRzIHdpdGggQnQ4NDgvQnQ4NDhhL0J0ODQ5L0J0ODc4L0J0ODc5IGFuZCBub3JtYWwKK0NvbXBvc2l0ZS9TLVZIUyBpbnB1dHMgYXJlIHN1cHBvcnRlZC4gIFRlbGV0ZXh0IGFuZCBJbnRlcmNhc3Qgc3VwcG9ydAorKFBBTCBvbmx5KSBmb3IgQUxMIGNhcmRzIHZpYSBWQkkgc2FtcGxlIGRlY29kaW5nIGluIHNvZnR3YXJlLgorCitTb21lIGNhcmRzIHdpdGggYWRkaXRpb25hbCBtdWx0aXBsZXhpbmcgb2YgaW5wdXRzIG9yIG90aGVyIGFkZGl0aW9uYWwKK2ZhbmN5IGNoaXBzIGFyZSBvbmx5IHBhcnRpYWxseSBzdXBwb3J0ZWQgKHVubGVzcyBzcGVjaWZpY2F0aW9ucyBieSB0aGUKK2NhcmQgbWFudWZhY3R1cmVyIGFyZSBnaXZlbikuICBXaGVuIGEgY2FyZCBpcyBsaXN0ZWQgaGVyZSBpdCBpc24ndAorbmVjZXNzYXJpbHkgZnVsbHkgc3VwcG9ydGVkLgorCitBbGwgb3RoZXIgY2FyZHMgb25seSBkaWZmZXIgYnkgYWRkaXRpb25hbCBjb21wb25lbnRzIGFzIHR1bmVycywgc291bmQKK2RlY29kZXJzLCBFRVBST01zLCB0ZWxldGV4dCBkZWNvZGVycyAuLi4KKworCitVbnN1cHBvcnRlZCBDYXJkczogCistLS0tLS0tLS0tLS0tLS0tLS0KKworQ2FyZHMgd2l0aCBab3JhbiAoWlIpIG9yIFBoaWxpcHMgKFNBQSkgb3IgSVNBIGFyZSBub3Qgc3VwcG9ydGVkIGJ5Cit0aGlzIGRyaXZlci4KKworCitNQVRSSVggVmlzaW9uCistLS0tLS0tLS0tLS0tCisKK01WLURlbHRhCistIEJ0ODQ4QQorLSA0IENvbXBvc2l0ZSBpbnB1dHMsIDEgUy1WSFMgaW5wdXQgKHNoYXJlZCB3aXRoIDR0aCBjb21wb3NpdGUpCistIEVFUFJPTQorCitodHRwOi8vd3d3Lm1hdHJpeC12aXNpb24uZGUvCisKK1RoaXMgY2FyZCBoYXMgbm8gdHVuZXIgYnV0IHN1cHBvcnRzIGFsbCA0IGNvbXBvc2l0ZSAoMSBzaGFyZWQgd2l0aCBhbgorUy1WSFMgaW5wdXQpIG9mIHRoZSBCdDg0OEEuCitWZXJ5IG5pY2UgY2FyZCBpZiB5b3Ugb25seSBoYXZlIHNhdGVsbGl0ZSBUViBidXQgc2V2ZXJhbCB0dW5lcnMgY29ubmVjdGVkCit0byB0aGUgY2FyZCB2aWEgY29tcG9zaXRlLgorCitNYW55IHRoYW5rcyB0byBNYXRyaXgtVmlzaW9uIGZvciBnaXZpbmcgdXMgMiBjYXJkcyBmb3IgZnJlZSB3aGljaCBtYWRlCitCdDg0OGEvQnQ4NDkgc2luZ2xlIGNyeXRhbCBvcGVyYXRpb24gc3VwcG9ydCBwb3NzaWJsZSEhIQorCisKKworTWlyby9QaW5uYWNsZSBQQ1RWCistLS0tLS0tLS0tLS0tLS0tLS0KKworLSBCdDg0OCAKKyAgc29tZSAoYWxsPz8pIGNvbWUgd2l0aCAyIGNyeXN0YWxzIGZvciBQQUwvU0VDQU0gYW5kIE5UU0MgCistIFBBTCwgU0VDQU0gb3IgTlRTQyBUViB0dW5lciAoUGhpbGlwcyBvciBURU1JQykKKy0gTVNQMzR4eCBzb3VuZCBkZWNvZGVyIG9uIGFkZCBvbiBib2FyZAorICBkZWNvZGVyIGlzIHN1cHBvcnRlZCBidXQgQUZBSUsgZG9lcyBub3QgeWV0IHdvcmsgCisgIChvdGhlciBzb3VuZCBNVVggc2V0dGluZyBpbiBHUElPIHBvcnQgbmVlZGVkPz8/IHNvbWVib2R5IHdobyBmaXhlZCB0aGlzPz8/KQorLSAxIHR1bmVyLCAxIGNvbXBvc2l0ZSBhbmQgMSBTLVZIUyBpbnB1dAorLSB0dW5lciB0eXBlIGlzIGF1dG9kZXRlY3RlZAorCitodHRwOi8vd3d3Lm1pcm8uZGUvCitodHRwOi8vd3d3Lm1pcm8uY29tLworCisKK01hbnkgdGhhbmtzIGZvciB0aGUgZnJlZSBjYXJkIHdoaWNoIG1hZGUgZmlyc3QgTlRTQyBzdXBwb3J0IHBvc3NpYmxlIGJhY2sKK2luIDE5OTchCisKKworSGF1cHBhdWdlIFdpbi9UViBwY2kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBtYW55IGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgSGF1cHBhdWdlIGNhcmRzIHdpdGggZGlmZmVyZW50IAordHVuZXJzIChUVitSYWRpbyAuLi4pLCB0ZWxldGV4dCBkZWNvZGVycy4KK05vdGUgdGhhdCBldmVuIGNhcmRzIHdpdGggc2FtZSBtb2RlbCBudW1iZXJzIGhhdmUgKGRlcGVuZGluZyBvbiB0aGUgcmV2aXNpb24pCitkaWZmZXJlbnQgY2hpcHMgb24gaXQuCisKKy0gQnQ4NDggKGFuZCBvdGhlcnMgYnV0IGFsd2F5cyBpbiAyIGNyeXN0YWwgb3BlcmF0aW9uPz8/KQorICBuZXdlciBjYXJkcyBoYXZlIGEgQnQ4NzgKKy0gUEFMLCBTRUNBTSwgTlRTQyBvciB0dW5lciB3aXRoIG9yIHdpdGhvdXQgUmFkaW8gc3VwcG9ydAorCitlLmcuOgorICBQQUw6IAorICBUREE1NzM3OiBWSEYsIGh5cGVyYmFuZCBhbmQgVUhGIG1peGVyL29zY2lsbGF0b3IgZm9yIFRWIGFuZCBWQ1IgMy1iYW5kIHR1bmVycworICBUU0E1NTIyOiAxLjQgR0h6IEkyQy1idXMgY29udHJvbGxlZCBzeW50aGVzaXplciwgSTJDIDB4YzItMHhjMworICAKKyAgTlRTQzoKKyAgVERBNTczMTogVkhGLCBoeXBlcmJhbmQgYW5kIFVIRiBtaXhlci9vc2NpbGxhdG9yIGZvciBUViBhbmQgVkNSIDMtYmFuZCB0dW5lcnMKKyAgVFNBNTUxODogbm8gZGF0YXNoZWV0IGF2YWlsYWJsZSBvbiBQaGlsaXBzIHNpdGUKKy0gUGhpbGlwcyBTQUE1MjQ2IG9yIFNBQTUyODQgKCBvciBubykgVGVsZXRleHQgZGVjb2RlciBjaGlwCQorICB3aXRoIGJ1ZmZlciBSQU0gKGUuZy4gV2luYm9uZCBXMjQyNTdBUy0zNTogMzJLeDggQ01PUyBzdGF0aWMgUkFNKQorICBTQUE1MjQ2IChJMkMgMHgyMikgaXMgc3VwcG9ydGVkCistIDI1NiBieXRlcyBFRVBST006IE1pY3JvY2hpcCAyNExDMDJCIG9yIFBoaWxpcHMgODU4MkUyWSAKKyAgd2l0aCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisgIEkyQyBhZGRyZXNzIDB4YTAgKDI0TEMwMkIgYWxzbyByZXNwb25kcyB0byAweGEyLTB4YWYpCistIDEgdHVuZXIsIDEgY29tcG9zaXRlIGFuZCAoZGVwZW5kaW5nIG9uIG1vZGVsKSAxIFMtVkhTIGlucHV0CistIDE0MDUyQjogbXV4IGZvciBzZWxlY3Rpb24gb2Ygc291bmQgc291cmNlCistIHNvdW5kIGRlY29kZXI6IFREQTk4MDAsIE1TUDM0eHggKHN0ZXJlbyBjYXJkcykgCisKKworQXNrZXkgQ1BILVNlcmllcworLS0tLS0tLS0tLS0tLS0tLQorRGV2ZWxvcGVkIGJ5IFRlbFNpZ25hbCg/KSwgT0VNZWQgYnkgbWFueSB2ZW5kb3JzIChUeXBob29uLCBBbnViaXMsIER5bmFsaW5rKQorCisgIENhcmQgc2VyaWVzOgorICAgIENQSDAxeDogQlQ4NDggY2FwdHVyZSBvbmx5CisgICAgQ1BIMDN4OiBCVDg0OAorICAgIENQSDA1eDogQlQ4Nzggd2l0aCBGTQorICAgIENQSDA2eDogQlQ4NzggKHcvbyBGTSkKKyAgICBDUEgwN3g6IEJUODc4IGNhcHR1cmUgb25seQorIAorICBUViBzdGFuZGFyZHM6CisgICAgIENQSDB4MDogTlRTQy1NL00KKyAgICAgQ1BIMHgxOiBQQUwtQi9HCisgICAgIENQSDB4MjogUEFMLUkvSQorICAgICBDUEgweDM6IFBBTC1EL0sKKyAgICAgQ1BIMHg0OiBTRUNBTS1ML0wgCisgICAgIENQSDB4NTogU0VDQU0tQi9HIAorICAgICBDUEgweDY6IFNFQ0FNLUQvSyAKKyAgICAgQ1BIMHg3OiBQQUwtTi9OIAorICAgICBDUEgweDg6IFBBTC1CL0ggCisgICAgIENQSDB4OTogUEFMLU0vTQorCisgIENQSDAzeCB3YXMgb2Z0ZW4gc29sZCBhcyAiVFYgY2FwdHVyZXIiLgorCisgIElkZW50aWZ5aW5nOgorICAxKSA4NzggY2FyZHMgY2FuIGJlIGlkZW50aWZpZWQgYnkgUENJIFN1YnN5c3RlbS1JRDoKKyAgICAgIDE0NGY6MzAwMCA9IENQSDA2eAorICAgICAgMTQ0RjozMDAyID0gQ1BIMDV4IHcvIEZNCisgICAgICAxNDRGOjMwMDUgPSBDUEgwNnhfTEMgKHcvbyByZW1vdGUgY29udHJvbCkKKyAgMSkgVGhlIGNhcmRzIGhhdmUgYSBzdGlja2VyIHdpdGggIkNQSCItbW9kZWwgb24gdGhlIGJhY2suCisgIDIpIFRoZXNlIGNhcmRzIGhhdmUgYSBudW1iZXIgcHJpbnRlZCBvbiB0aGUgUENCIGp1c3QgYWJvdmUgdGhlIHR1bmVyIG1ldGFsIGJveDoKKyAgICAgICI4MC1DUDIwMDAzMDAteCIgPSBDUEgwM1gKKyAgICAgICI4MC1DUDIwMDA1MDAteCIgPSBDUEgwNVgKKyAgICAgICI4MC1DUDIwMDA2MDAteCIgPSBDUEgwNlggLyBDUEgwNnhfTEMKKworICBBc2tleSBzZWxscyB0aGVzZSBjYXJkcyBhcyAiTWFnaWMgVFZpZXcgc2VyaWVzIiwgQnJhbmQgIk1hZ2ljWHByZXNzIi4KKyAgT3RoZXIgT0VNIG9mdGVuIGNhbGwgdGhlc2UgIlR2aWV3IiwgIlRWaWV3OTkiIG9yIGVsc2UuCisKK0xpZmV2aWV3IEZseXZpZGVvIFNlcmllczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhlIG5hbWluZyBvZiB0aGVzZSBzZXJpZXMgZGlmZmVycyBpbiB0aW1lIGFuZCBzcGFjZS4KKworICBJZGVudGlmeWluZzoKKyAgMSkgU29tZSBtb2RlbHMgY2FuIGJlIGlkZW50aWZpZWQgYnkgUENJIHN1YnN5c3RlbSBJRDoKKyAgICAgIDE4NTI6MTg1MiA9IEZseXZpZGVvIDk4IEZNCisgICAgICAxODUxOjE4NTAgPSBGbHl2aWRlbyA5OAorICAgICAgMTg1MToxODUxID0gRmx5dmlkZW8gOTggRVogKGNhcHR1cmUgb25seSkKKyAgMikgVGhlcmUgaXMgYSBwcmludCBvbiB0aGUgUENCOgorICAgICAgTFIyNSAgICAgICA9IEZseXZpZGVvIChab3JhbiBaUjM2MTIwLCBTQUE3MTEwQSkKKyAgICAgIExSMjYgUmV2Lk4gPSBGbHl2aWRlbyBJSSAoQnQ4NDgpCisgICAgICAgICAgIFJldi5PID0gRmx5dmlkZW8gSUkgKEJ0ODc4KQorICAgICAgTFIzNyBSZXYuQyA9IEZseXZpZGVvIEVaIChDYXB0dXJlIG9ubHksIFpSMzYxMjAgKyBTQUE3MTEwKQorICAgICAgTFIzOCBSZXYuQTE9IEZseXZpZGVvIElJIEVaIChCdDg0OCBjYXB0dXJlIG9ubHkpCisgICAgICBMUjUwIFJldi5RID0gRmx5dmlkZW8gOTggKHcvZWVwcm9tIGFuZCBQQ0kgc3Vic3lzdGVtIElEKQorICAgICAgICAgICBSZXYuVyA9IEZseXZpZGVvIDk4IChubyBlZXByb20pCisgICAgICBMUjUxIFJldi5FID0gRmx5dmlkZW8gOTggRVogKGNhcHR1cmUgb25seSkKKyAgICAgIExSOTAgICAgICAgPSBGbHl2aWRlbyAyMDAwIChCdDg3OCkKKwkJICAgRmx5dmlkZW8gMjAwMFMgKEJ0ODc4KSB3L1N0ZXJlbyBUViAoUGFja2FnZSBpbmNsLiBMUjkxIGRhdWdodGVyYm9hcmQpCisgICAgICBMUjkxICAgICAgID0gU3RlcmVvIGRhdWdodGVyIGNhcmQgZm9yIExSOTAKKyAgICAgIExSOTcgICAgICAgPSBGbHl2aWRlbyBEVkJTCisgICAgICBMUjk5IFJldi5FID0gTG93IHByb2ZpbGUgY2FyZCBmb3IgT0VNIGludGVncmF0aW9uIChvbmx5IGludGVybmFsIGF1ZGlvISkgYnQ4NzgKKyAgICAgIExSMTM2CSA9IEZseXZpZGVvIDIxMDAvMzEwMCAoTG93IHByb2ZpbGUsIFNBQTcxMzAvU0FBNzEzNCkKKyAgICAgIExSMTM3ICAgICAgPSBGbHl2aWRlbyBEVjIwMDAvRFYzMDAwIChTQUE3MTMwL1NBQTcxMzQgKyBJRUVFMTM5NCkKKyAgICAgIExSMTM4IFJldi5DPSBGbHl2aWRlbyAyMDAwIChTQUE3MTMwKQorCSAgICAgICAgb3IgRmx5dmlkZW8gMzAwMCAoU0FBNzEzNCkgdy9TdGVyZW8gVFYKKwkJICAgVGhlc2UgZXhpc3QgaW4gdmFyaWF0aW9ucyB3L0ZNIGFuZCB3L1JlbW90ZSBzb21ldGltZXMgZGVub3RlZAorCQkgICBieSBzdWZmaXhlcyAiRk0iIGFuZCAiUiIuCisgIDMpIFlvdSBoYXZlIGEgbGFwdG9wIChtaW5pUENJIGNhcmQpOgorICAgICAgUHJvZHVjdCAgICA9IEZseVRWIFBsYXRpbnVtIE1pbmkKKyAgICAgIE1vZGVsL0NoaXAgPSBMUjIxMi9zYWE3MTM1CisKKyAgICAgIExpZmV2aWV3LmNvbS50dyBzdGF0ZXMgKEZlYi4gMjAwMik6CisgICAgICAiVGhlIEZseVZpZGVvMjAwMCBhbmQgRmx5VmlkZW8yMDAwcyBwcm9kdWN0IG5hbWUgaGF2ZSByZW5hbWVkIHRvIEZseVZpZGVvOTguIgorICAgICAgVGhlaXIgQnQ4eDggY2FyZHMgYXJlIGxpc3RlZCBhcyBkaXNjb250aW51ZWQuCisgICAgICBGbHl2aWRlbyAyMDAwUyB3YXMgcHJvYmFibHkgc29sZCBhcyBGbHl2aWRlbyAzMDAwIGluIHNvbWUgY29udHJpZXMoRXVyb3BlPykuCisgICAgICBUaGUgbmV3IEZseXZpZGVvIDIwMDAvMzAwMCBhcmUgU0FBNzEzMC9TQUE3MTM0IGJhc2VkLiAKKworICAiRmx5dmlkZW8gSUkiIGhhZCBiZWVuIHRoZSBuYW1lIGZvciB0aGUgODQ4IGNhcmRzLCBub3dhZGF5cyAoaW4gR2VybWFueSkKKyAgdGhpcyBuYW1lIGlzIHJlLXVzZWQgZm9yIExSNTAgUmV2LlcuCisgIFRoZSBMaWZldmlldyB3ZWJzaXRlIG1lbnRpb25lZCBGbHl2aWRlbyBJSUkgYXQgc29tZSB0aW1lLCBidXQgc3VjaCBhIGNhcmQKKyAgaGFzIG5vdCB5ZXQgYmVlbiBzZWVuIChwZXJoYXBzIGl0IHdhcyB0aGUgZ2VybWFuIG5hbWUgZm9yIExSOTAgW3N0ZXJlb10pLgorICBUaGVzZSBjYXJkcyBhcmUgc29sZCBieSBtYW55IE9FTXMgdG9vLgorCisgIEZseVZpZGVvIEEyIChFbHRhIDg2ODApPSBMUjkwIFJldi5GICh3L1JlbW90ZSwgdy9vIEZNLCBzdGVyZW8gVFYgYnkgdGRhOTgyMSkge0dlcm1hbnl9CisgIExpZmV2aWV3IDMwMDAgKEVsdGEgODY4MSkgYXMgc29sZCBieSBQbHVzKEFwcmlsIDIwMDIpLCBHZXJtYW55ID0gTFIxMzggdy8gc2FhNzEzNAorCisKK1R5cGhvb24gVFYgY2FyZCBzZXJpZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGVzZSBjYW4gYmUgQ1BILCBGbHl2aWRlbywgUGl4ZWx2aWV3IG9yIEtOQzEgc2VyaWVzLgorICBUeXBob29uIGlzIHRoZSBicmFuZCBvZiBBbnViaXMuCisgIE1vZGVsIDUwNjgwIGdvdCByZS11c2VkLCBzb21lIG1vZGVsIG5vLiBoYWQgZGlmZmVyZW50IGNvbnRlbnRzIG92ZXIgdGltZS4KKworICBNb2RlbHM6CisgIDUwNjgwICJUViBUdW5lciBQQ0kgUGFsIEJHIihvbGQscmVkIHBhY2thZ2UpPWNhbiBiZSBDUEgwM3goYnQ4NDgpIG9yIENQSDA2eChidDg3OCkKKyAgNTA2ODAgIlRWIFR1bmVyIFBhbCBCRyIgKGJsdWUgcGFja2FnZSk9IFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYgOUIpCisgIDUwNjgxICJUViBUdW5lciBQQ0kgUGFsIEkiICh2YXJpYW50IG9mIDUwNjgwKQorICA1MDY4MiAiVFZpZXcgVFYvRk0gVHVuZXIgUGFsIEJHIiAgICAgICA9IEZseXZpZGVvIDk4Rk0gKExSNTAgUmV2LlEpCisgICAgICAgICBOb3RlOiBUaGUgcGFja2FnZSBoYXMgYSBwaWN0dXJlIG9mIENQSDA1eCAod2hpY2ggd291bGQgYmUgYSByZWFsIFRWaWV3KQorICA1MDY4MyAiVFYgVHVuZXIgUENJIFNFQ0FNIiAodmFyaWFudCBvZiA1MDY4MCkKKyAgNTA2ODQgIlRWIFR1bmVyIFBhbCBCRyIgICAgICAgICAgICAgICAgPSBQaXhlbHZpZXcgODc4VFYoUmV2LjNEKQorICA1MDY4NiAiVFYgVHVuZXIiICAgICAgICAgICAgICAgICAgICAgICA9IEtOQzEgVFYgU3RhdGlvbgorICA1MDY4NyAiVFYgVHVuZXIgc3RlcmVvIiAgICAgICAgICAgICAgICA9IEtOQzEgVFYgU3RhdGlvbiBwcm8KKyAgNTA2ODggIlRWIFR1bmVyIFJEUyIgKGJsYWNrIHBhY2thZ2UpICAgPSBLTkMxIFRWIFN0YXRpb24gUkRTCisgIDUwNjg5ICBUViBTQVQgRFZCLVMgQ0FSRCBDSSBQQ0kgKFNBQTcxNDZBSCwgU1UxMjc4PykgPSAiS05DMSBUViBTdGF0aW9uIERWQi1TIgorICA1MDY5MiAiVFYvRk0gVHVuZXIiIChzbWFsbCBQQ0IpCisgIDUwNjk0ICBUViBUVU5FUiBDQVJEIFJEUyAoUEhJTElQUyBDSElQU0VUIFNBQTcxMzRITCkKKyAgNTA2OTYgIFRWIFRVTkVSIFNURVJFTyAoUEhJTElQUyBDSElQU0VUIFNBQTcxMzRITCwgTUszTUUgVHVuZXIpCisgIDUwODA0ICBQQy1TQVQgVFYvQXVkaW8gS2FydGUgPSBUZWNobmktUEMtU2F0IChaT1JBTiAzNjEyMFBRQywgVHVuZXI6QWxwcykKKyAgNTA4NjYgIFRWSUVXIFNBVCBSRUNFSVZFUitBRFIKKyAgNTA4NjggIlRWL0ZNIFR1bmVyIFBhbCBJIiAodmFyaWFudCBvZiA1MDY4MikKKyAgNTA5OTkgIlRWL0ZNIFR1bmVyIFNlY2FtIiAodmFyaWFudCBvZiA1MDY4MikKKworCitHdWlsbGVtb3QKKy0tLS0tLS0tLQorICBNYXhpLVRWIFBDSSAoWlIzNjEyMCkKKyAgTWF4aSBUViBWaWRlbyAyID0gTFI1MCBSZXYuUSAoRkkxMjE2TUYsIFBBTCBCRytTRUNBTSkKKyAgTWF4aSBUViBWaWRlbyAzID0gQ1BIMDY0IChQQUwgQkcgKyBTRUNBTSkKKworTWVudG9yCistLS0tLS0KKyAgTWVudG9yIFRWIGNhcmQgKCI1NS04NzhUVi1VMSIpID0gUGl4ZWx2aWV3IDg3OFRWKFJldi4zRikgKHcvRk0gdy9SZW1vdGUpCisKK1Byb2xpbmsKKy0tLS0tLS0KKyAgIFRWIGNhcmRzOgorICAgUGl4ZWxWaWV3IFBsYXkgVFYgcHJvIC0gKE1vZGVsOiBQVi1CVDg3OFArIFJFViA4RSkKKyAgIFBpeGVsVmlldyBQbGF5IFRWIHBybyAtIChNb2RlbDogUFYtQlQ4NzhQKyBSRVYgOUQpCisgICBQaXhlbFZpZXcgUGxheSBUViBwcm8gLSAoTW9kZWw6IFBWLUJUODc4UCsgUkVWIDRDIC8gOEQgLyAxMEEgKQorICAgUGl4ZWxWaWV3IFBsYXkgVFYgLSAoTW9kZWw6IFBWLUJUODQ4UCspCisgICA4NzhUViAtIChNb2RlbDogUFYtQlQ4NzhUVikKKworICAgTXVsdGltZWRpYSBUViBwYWNrYWdlcyAoY2FyZCArIHNvZnR3YXJlIHBhY2spOgorICAgUGl4ZWxWaWV3IFBsYXkgVFYgVGhlYXRlciAtIChNb2RlbDogUFYtTTQyMDApID0gIFBpeGVsVmlldyBQbGF5IFRWIHBybyArIFNvZnR3YXJlCisgICBQaXhlbFZpZXcgUGxheSBUViBQQUsgLSAgICAgKE1vZGVsOiBQVi1CVDg3OFArIFJFViA0RSkKKyAgIFBpeGVsVmlldyBQbGF5IFRWL1ZDUiAtICAgICAoTW9kZWw6IFBWLU0zMjAwIFJFViA0QyAvIDhEIC8gMTBBICkgCisgICBQaXhlbFZpZXcgU3R1ZGlvIFBBSyAtICAgICAgKE1vZGVsOiAgICBNMjIwMCBSRVYgNEMgLyA4RCAvIDEwQSApCisgICBQaXhlbFZpZXcgUG93ZXJTdHVkaW8gUEFLIC0gKE1vZGVsOiBQVi1NMzYwMCBSRVYgNEUpCisgICBQaXhlbFZpZXcgRGlnaXRhbFZDUiBQQUsgLSAgKE1vZGVsOiBQVi1NMjQwMCBSRVYgNEMgLyA4RCAvIDEwQSApCisKKyAgIFBpeGVsVmlldyBQbGF5VFYgUEFLIElJIChUVi9GTSBjYXJkICsgdXNiIGNhbWVyYSkgIFBWLU0zODAwIAorICAgUGl4ZWxWaWV3IFBsYXlUViBYUCBQVi1NNDcwMCxQVi1NNDcwMCh3L0ZNKQorICAgUGl4ZWxWaWV3IFBsYXlUViBEVlIgUFYtTTQ2MDAgIHBhY2thZ2UgY29udGVudHM6UGl4ZWxWaWV3IFBsYXlUViBwcm8sIHdpbmR2ciAmIHZpZGVvTWFpbCBzL3cKKworICAgRnVydGhlciBDYXJkczoKKyAgIFBWLUJUODc4UCtyZXYuOUIgKFBsYXkgVFYgUHJvLCBvcHQuIHcvRk0gdy9OSUNBTSkKKyAgIFBWLUJUODc4UCtyZXYuMkYKKyAgIFBWLUJUODc4UCBSZXYuMUQgKGJ0ODc4LCBjYXB0dXJlIG9ubHkpCisKKyAgIFhDYXB0dXJlIFBWLUNYODgxUCAoY3gyMzg4MSkKKyAgIFBsYXlUViBIRCBQVi1DWDg4MVBMKywgUFYtQ1g4ODFQTCsody9GTSkgKGN4MjM4ODEpCisKKyAgIERUVjMwMDAgUFYtRFRWMzAwMFArIERWQi1TIENJID0gVHdpbmhhbiBWUC0xMDMwCisgICBEVFYyMDAwIERWQi1TID0gVHdpbmhhbiBWUC0xMDIwCisgICAKKyAgIFZpZGVvIENvbmZlcmVuY2luZzoKKyAgIFBpeGVsVmlldyBNZWV0aW5nIFBBSyAtIChNb2RlbDogUFYtQlQ4NzhQKQorICAgUGl4ZWxWaWV3IE1lZXRpbmcgUEFLIExpdGUgLSAoTW9kZWw6IFBWLUJUODc4UCkKKyAgIFBpeGVsVmlldyBNZWV0aW5nIFBBSyBwbHVzIC0gKE1vZGVsOiBQVi1CVDg3OFArcmV2IDRDLzhELzEwQSkKKyAgIFBpeGVsVmlldyBDYXB0dXJlIC0gKE1vZGVsOiBQVi1CVDg0OFApCisKKyAgIFBpeGVsVmlldyBQbGF5VFYgVVNCIHBybworICAgTW9kZWwgTm8uIFBWLU5UMTAwNCssIFBWLU5UMTAwNCsgKHcvRk0pID0gTlQxMDA0IFVTQiBkZWNvZGVyIGNoaXAgKyBTQUE3MTEzIHZpZGVvIGRlY29kZXIgY2hpcAorCitEeW5hbGluaworLS0tLS0tLS0KKyAgIFRoZXNlIGFyZSBDUEggc2VyaWVzLgorCitQaG9lYmVtaWNybworLS0tLS0tLS0tLS0KKyAgIFRWIE1hc3RlciAgICA9IENQSDAzMCBvciBDUEgwNjAKKyAgIFRWIE1hc3RlciBGTSA9IENQSDA1MAorCitHZW5pdXMvS3llCistLS0tLS0tLS0tCisgICBWaWRlbyBXb25kZXIvR2VuaXVzIEludGVybmV0IFZpZGVvIEtpdCA9IExSMzcgUmV2LkMKKyAgIFZpZGVvIFdvbmRlciBQcm8gSUkgKDg0OCBvciA4NzgpID0gTFIyNgorCitUZWtyYW0KKy0tLS0tLQorICAgVmlkZW9DYXAgQzIwNSAoQnQ4NDgpCisgICBWaWRlb0NhcCBDMjEwICh6cjM2MTIwICtQaGlsaXBzKQorICAgQ2FwdHVyZVRWIE0yMDAgKElTQSkKKyAgIENhcHR1cmVUViBNMjA1IChCdDg0OCkKKworTHVja3kgU3RhcgorLS0tLS0tLS0tLQorICAgSW1hZ2UgV29ybGQgQ29uZmVyZW5jZSBUViA9IExSNTAgUmV2LiBRCisKK0xlYWR0ZWsKKy0tLS0tLS0KKyAgIFdpblZpZXcgNjAxIChCdDg0OCkKKyAgIFdpblZpZXcgNjEwIChab3JhbikKKyAgIFdpbkZhc3QyMDAwCisgICBXaW5GYXN0MjAwMCBYUAorCitLTkMgT25lCistLS0tLS0tCisgICBUVi1TdGF0aW9uCisgICBUVi1TdGF0aW9uIFNFICgrU29mdHdhcmUgQnVuZGxlKQorICAgVFYtU3RhdGlvbiBwcm8gKCtUViBzdGVyZW8pCisgICBUVi1TdGF0aW9uIEZNICgrUmFkaW8pCisgICBUVi1TdGF0aW9uIFJEUyAoK1JEUykKKyAgIFRWIFN0YXRpb24gU0FUIChhbmFsb2cgc2F0ZWxsaXRlKQorICAgVFYtU3RhdGlvbiBEVkItUworCisgICBuZXdlciBDYXJkcyBoYXZlIHNhYTcxMzQsIGJ1dCBtb2RlbCBuYW1lIHN0YXllZCB0aGUgc2FtZT8KKworUHJvdmlkZW8gCistLS0tLS0tLQorICBQVjk1MSBvciBQVi05NTEgKGFsc28gYXJlIHNvbGQgYXM6CisgICBCb2VkZXIgVFYtRk0gVmlkZW8gQ2FwdHVyZSBDYXJkCisgICBUaXRhbm1lZGlhIFN1cGVydmlzaW9uIFRWLTI0MDAKKyAgIFByb3ZpZGVvIFBWOTUxIFRGCisgICAzRGVNb24gUFY5NTEKKyAgIE1lZGlhRm9ydGUgVFYtVmlzaW9uIFBWOTUxCisgICBZb2tvIFBWOTUxCisgICBWaXZhbmNvIFR1bmVyIENhcmQgUENJIEFydC4tTnIuOiA2ODQwNAorICApIG5vdyBuYW1lZCBQVi05NTFUCisKKyAgU3VydmVpbGxhbmNlIFNlcmllcworICBQVi0xNDEKKyAgUFYtMTQzCisgIFBWLTE0NworICBQVi0xNDggKGNhcHR1cmUgb25seSkKKyAgUFYtMTUwCisgIFBWLTE1MQorCisgIFRWLUZNIFR1bmVyIFNlcmllcworICBQVi05NTFURFYgKHR2IHR1bmVyICsgMTM5NCkKKyAgUFYtOTUxVC9URgorICBQVi05NTFQVC9URgorICBQVi05NTZUL1RGIExvdyBQcm9maWxlCisgIFBWLTkxMQorCitIaWdoc2NyZWVuCistLS0tLS0tLS0tCisgICBUViBLYXJ0ZSA9IExSNTAgUmV2LlMKKyAgIFRWLUJvb3N0YXIgPSBUZXJyYXRlYyBUZXJyYSBUVisgVmVyc2lvbiAxLjAgKEJ0ODQ4LCB0ZGE5ODIxKSAiY2ViMTA1LnBjYiIKKworWm9sdHJpeAorLS0tLS0tLQorICAgRmFjZSB0byBGYWNlIENhcHR1cmUgKEJ0ODQ4IGNhcHR1cmUgb25seSkgKFBDQiAiVlAtMjg0OCIpCisgICBGYWNlIFRvIEZhY2UgVFYgTUFYIChCdDg0OCkgKFBDQiAiVlAtODQ4MiBSZXYxLjMiKQorICAgR2VuaWUgVFYgKEJ0ODc4KSAoUENCICJWUC04NzkwIFJldiAyLjEiKQorICAgR2VuaWUgV29uZGVyIFBybworCitBVmVyTWVkaWEKKy0tLS0tLS0tLQorICAgQVZlciBGdW5UViBMaXRlIChJU0EsIEFWMzAwMSBjaGlwc2V0KSAgIk0xMDEuQyIKKyAgIEFWZXJUVgorICAgQVZlclRWIFN0ZXJlbworICAgQVZlclRWIFN0dWRpbyAody9GTSkKKyAgIEFWZXJNZWRpYSBUVjk4IHdpdGggUmVtb3RlIAorICAgQVZlck1lZGlhIFRWL0ZNOTggU3RlcmVvCisgICBBVmVyTWVkaWEgVFZDQU05OAorICAgVFZDYXB0dXJlIChCdDg0OCkKKyAgIFRWUGhvbmUgKEJ0ODQ4KQorICAgVFZDYXB0dXJlOTggKD0iQVZlck1lZGlhIFRWOTgiIGluIFVTQSkgKEJ0ODc4KQorICAgVFZQaG9uZTk4IChCdDg3OCwgdy9GTSkKKworICAgUENCICAgICAgUENJLUlEICAgICAgTW9kZWwtTmFtZSAgICAgIEVlcHJvbSAgVHVuZXIgIFNvdW5kICAgIENvdW50cnkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNMTAxLkMgICBJU0EgIQorICAgTTEwOC1CICAgICAgQnQ4NDggICAgICAgICAgICAgICAgICAgICAtLSAgICAgRlIxMjM2CQkgVVMgICAoMiksKDMpCisgICBNMUE4LUEgICAgICBCdDg0OCAgICBBVmVyIFRWLVBob25lICAgICAgICAgICBGTTEyMTYgIC0tCisgICBNMTY4LVQgICAxNDYxOjAwMDMgICBBVmVyVFYgU3R1ZGlvICAgNDg6MTcgICBGTTEyMTYgVERBOTg0MFQgIEQgICAgKDEpIHcvRk0gdy9SZW1vdGUKKyAgIE0xNjgtVSAgIDE0NjE6MDAwNCAgIFRWQ2FwdHVyZTk4ICAgICA0MDoxMSAgIEZJMTIxNiAgIC0tICAgICAgRCAgICB3L1JlbW90ZQorICAgTTE2OElJLUIgMTQ2MTowMDAzICAgTWVkaW9uIE1EOTU5MiAgIDQ4OjE2ICAgRk0xMjE2IFREQTk4NzNIICBEICAgIHcvRk0KKworICAgKDEpIERhdWdodGVyYm9hcmQgTUI2OC1BIHdpdGggVERBOTgyMFQgYW5kIFREQTk4NDBUCisgICAoMikgU29ueSBORTQxUyBzb2xkZXJlZCAoc3RlcmVvIHNvdW5kPykKKyAgICgzKSBEYXVnaHRlcmJvYXJkIE0xMTgtQSB3LyBwaWMgMTZjNTQgYW5kIDQgTUh6IHF1YXJ0egorIAorICAgVVMgc2l0ZSBoYXMgZGlmZmVyZW50IGRyaXZlcnMgZm9yIChhcyBvZiAwOS8yMDAyKToKKyAgIEVaIENhcHR1cmUvSW50ZXJDYW0gUENJIChCVC04NDggY2hpcCkKKyAgIEVaIENhcHR1cmUvSW50ZXJDYW0gUENJIChCVC04NzggY2hpcCkKKyAgIFRWLVBob25lIChCVC04NDggY2hpcCkKKyAgIFRWOTggKEJULTg0OCBjaGlwKQorICAgVFY5OCBXaXRoIFJlbW90ZSAoQlQtODQ4IGNoaXApCisgICBUVjk4IChCVC04NzggY2hpcCkKKyAgIFRWOTggV2l0aCBSZW1vdGUgKEJULTg3OCkKKyAgIFRWL0ZNOTggKEJULTg3OCBjaGlwKQorICAgQVZlclRWCisgICBBdmVyVFYgU3RlcmVvCisgICBBVmVyVFYgU3R1ZGlvCisKKyAgIERFIGhhdCBkaXZlcnNlIFRyZWliZXIgZnVlciBkaWVzZSBNb2RlbGxlIChTdGFuZCAwOS8yMDAyKToKKyAgIFRWUGhvbmUgKDg0OCkgbWl0IFBoaWxpcHMgdHVuZXIgRlIxMlg2ICh3LyBGTSByYWRpbykKKyAgIFRWUGhvbmUgKDg0OCkgbWl0IFBoaWxpcHMgdHVuZXIgRk0xMlg2ICh3LyBGTSByYWRpbykKKyAgIFRWQ2FwdHVyZSAoODQ4KSB3L1BoaWxpcHMgdHVuZXIgRkkxMlg2CisgICBUVkNhcHR1cmUgKDg0OCkgbm9uLVBoaWxpcHMgdHVuZXIKKyAgIFRWQ2FwdHVyZTk4IChCdDg3OCkKKyAgIFRWUGhvbmU5OCAoQnQ4NzgpCisgICBBVmVyVFYgdW5kIFRWQ2FwdHVyZTk4IHcvVkNSIChCdCA4NzgpCisgICBBVmVyVFZTdHVkaW8gdW5kIFRWUGhvbmU5OCB3L1ZDUiAoQnQ4NzgpCisgICBBVmVyVFYgR08gU2VyaWUgKEtlaW4gU1ZpZGVvIElucHV0KQorICAgQVZlclRWOTggKEJULTg3OCBjaGlwKQorICAgQVZlclRWOTggbWl0IEZlcm5iZWRpZW51bmcgKEJULTg3OCBjaGlwKQorICAgQVZlclRWL0ZNOTggKEJULTg3OCBjaGlwKQorCisgICBWRE9tYXRlICh3d3cuYXZlcm0uY29tLmNuKSA9IE0xNjhVID8KKworQWltc2xhYgorLS0tLS0tLQorICAgVmlkZW8gSGlnaHdheSBvciAiVmlkZW8gSGlnaHdheSBUUjIwMCIgKElTQSkKKyAgIFZpZGVvIEhpZ2h3YXkgWHRyZW1lIChha2EgIlZIWCIpIChCdDg0OCwgRk0gdy8gVEVBNTc1NykKKworSVhNaWNybyAoZm9ybWVyOiBJTVM9SW50ZWdyYXRlZCBNaWNybyBTb2x1dGlvbnMpCistLS0tLS0tCisgICBJWFRWIEJUODQ4ICg9VHVyYm9UVikKKyAgIElYVFYgQlQ4NzgKKyAgIElNUyBUdXJib1RWIChCdDg0OCkKKworTGlmZXRlYy9NZWRpb24vVGV2aW9uL0FsZGkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBMVDkzMDYvTUQ5MzA2ID0gQ1BIMDYxCisgICBMVDk0MTUvTUQ5NDE1ID0gTFI5MCBSZXYuRiBvciBSZXYuRworICAgICAgICAgIE1EOTU5MiA9IEF2ZXJtZWRpYSBUVnBob25lOTggKFBDSV9JRD0xNDYxOjAwMDMpLCBQQ0ItUmV2PU0xNjhJSS1CICh3L1REQTk4NzNIKQorICAgICAgICAgIE1EOTcxNyA9IEtOQyBPbmUgKFJldiBENCwgc2FhNzEzNCwgRk0xMjE2IE1LMiB0dW5lcikKKyAgICAgICAgICBNRDUwNDQgPSBLTkMgT25lIChSZXYgRDQsIHNhYTcxMzQsIEZNMTIxNk1FIE1LMyB0dW5lcikKKworTW9kdWxhciBUZWNobm9sb2dpZXMgKHd3dy5tb2R1bGFydGVjaC5jb20pIFVLCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE1NMTAwIFBDVFYgKEJ0ODQ4KQorICAgTU0yMDEgUENUViAoQnQ4NzgsIEJ0ODMyKSB3LyBRdWFydHpzaWdodCBjYW1lcmEKKyAgIE1NMjAyIFBDVFYgKEJ0ODc4LCBCdDgzMiwgdGRhOTg3NCkKKyAgIE1NMjA1IFBDVFYgKEJ0ODc4KQorICAgTU0yMTAgUENUViAoQnQ4NzgpIChHYWxheHkgVFYsIEdhbGF4eW1lZGlhID8pCisKK1RlcnJhdGVjCistLS0tLS0tLQorICAgVGVycmEgVFYrIFZlcnNpb24gMS4wIChCdDg0OCksICJjZWIxMDUuUENCIiBwcmludGVkIG9uIHRoZSBQQ0IsIFREQTk4MjEKKyAgIFRlcnJhIFRWKyBWZXJzaW9uIDEuMSAoQnQ4NzgpLCAiTFI3NCBSZXYuRSIgcHJpbnRlZCBvbiB0aGUgUENCLCBUREE5ODIxCisgICBUZXJyYSBUVmFsdWVSYWRpbywgICAgICAgICAgICAgIkxSMTAyIFJldi5DIiBwcmludGVkIG9uIHRoZSBQQ0IKKyAgIFRlcnJhIFRWL1JhZGlvKyBWZXJzaW9uIDEuMCwgICAiODAtQ1AyODMwMTAwLTAiIFRUVFYzIHByaW50ZWQgb24gdGhlIFBDQiwKKwkJCQkgICAgICJDUEgwMTAtRTgzIiBvbiB0aGUgYmFjaywgU0FBNjU4OFQsIFREQTk4NzNICisgICBUZXJyYSBUVmFsdWUgVmVyc2lvbiBCVDg3OCwgICAgIjgwLUNQMjgzMDExMC0wIFRUVFY0IiBwcmludGVkIG9uIHRoZSBQQ0IsIAorCQkJCSAgICAgIkNQSDAxMS1EODMiIG9uIGJhY2sKKyAgIFRlcnJhIFRWYWx1ZSBWZXJzaW9uIDEuMCAgICAgICAiY2ViMTA1LlBDQiIgKHJlYWxseSBpZGVudGljYWwgdG8gVGVycmEgVFYrIFZlcnNpb24gMS4wKQorICAgVGVycmEgVFZhbHVlIE5ldyBSZXZpc2lvbgkgICJMUjEwMiBSZWMuQyIKKyAgIFRlcnJhIEFjdGl2ZSBSYWRpbyBVcGdyYWRlICh0ZWE1NzU3aCwgc2FhNjU4OHQpCisKKyAgIExSNzQgaXMgYSBuZXdlciBQQ0IgcmV2aXNpb24gb2YgY2ViMTA1IChib3RoIGluY2wuIGNvbm5lY3RvciBmb3IgQWN0aXZlIFJhZGlvIFVwZ3JhZGUpCisKKyAgIENpbmVyZ3kgNDAwIChzYWE3MTM0KSwgIkU4NzcgMTEoUykiLCAiUE04MjAwOTJEIiBwcmludGVkIG9uIFBDQgorICAgQ2luZXJneSA2MDAgKHNhYTcxMzQpCisKK1RlY2huaXNhdAorLS0tLS0tLS0tCisgICBEaXNjb3MgQURSIFBDLUthcnRlIElTQSAobm8gVFYhKQorICAgRGlzY29zIEFEUiBQQy1LYXJ0ZSBQQ0kgKHByb2JhYmx5IG5vIFRWPykKKyAgIFRlY2huaS1QQy1TYXQgKFNhdC4gYW5hbG9nKQorICAgICAgICAgUmV2IDEuMiAoenIzNjEyMCwgdnB4MzIyMCwgc3R2MDAzMCwgc2FhNTI0NiwgQlNKRTMtNDk0QSkKKyAgIE1lZGlhZm9jdXMgSSAoenIzNjEyMC96cjM2MTI1LCBkcnAzNTEwLCBTYXQuIGFuYWxvZyArIEFEUiBSYWRpbykKKyAgIE1lZGlhZm9jdXMgSUkgKHNhYTcxNDYsIFNhdC4gYW5hbG9nKQorICAgICAgICAgU2F0QURSIFJldiAyLjEgKHNhYTcxNDZhLCBzYWE3MTEzaCwgc3R2MDA1NmEsIG1zcDM0MDBjLCBkcnAzNTEwYSwgQlNLRTMtMzA3QSkKKyAgIFNreVN0YXIgMSBEVkIgIChBVjcxMTApID0gVGVjaG5vdHJlbmQgUHJlbWl1bQorICAgU2t5U3RhciAyIERWQiAgKEIyQzIpICg9U2t5MlBDKQorCitTaWVtZW5zCistLS0tLS0tCisgICBNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCAoTVhCKSAoU0FBNzE0NiwgU0FBNzExMSkKKworU3RyYWRpcworLS0tLS0tLQorICAgU0RNMjc1LFNETTI1MCxTRE0wMjYsU0RNMDI1IChTQUE3MTQ2LCBJQk1NUEVHMik6IE1QRUcyIGRlY29kZXIgb25seQorCitQb3dlcmNvbG9yCistLS0tLS0tLS0tCisgICBNVFY4NzgKKyAgICAgICBQYWNrYWdlIGNvbWVzIHdpdGggZGlmZmVyZW50IGNvbnRlbnRzOgorICAgICAgIGEpIHBjYiAiTVRWODc4IiAoQ0FSRD03NSkKKyAgICAgICBiKSBQaXhlbHZpZXcgUmV2LiA0XworICAgTVRWODc4UiB3L1JlbW90ZSBDb250cm9sCisgICBNVFY4NzhGIHcvUmVtb3RlIENvbnRyb2wgdy9GTSByYWRpbworCitQaW5uYWNsZQorLS0tLS0tLS0KKyAgIE1pcm92aWRlbyBQQ1RWIChCdDg0OCkKKyAgIE1pcm92aWRlbyBQQ1RWIFNFIChCdDg0OCkKKyAgIE1pcm92aWRlbyBQQ1RWIFBybyAoQnQ4NDggKyBEYXVnaHRlcmJvYXJkIGZvciBUViBTdGVyZW8gYW5kIEZNKQorICAgU3R1ZGlvIFBDVFYgUmF2ZSAoQnQ4NDggVmVyc2lvbiA9IE1pcm92aWRlbyBQQ1RWKQorICAgU3R1ZGlvIFBDVFYgUmF2ZSAoQnQ4NzggcGFja2FnZSB3L28gaW5mcmFyZWQpCisgICBTdHVkaW8gUENUViAgICAgIChCdDg3OCkKKyAgIFN0dWRpbyBQQ1RWIFBybyAgKEJ0ODc4IHN0ZXJlbyB3LyBGTSkKKyAgIFBpbm5hY2xlIFBDVFYgICAgKEJ0ODc4LCBNVDIwMzIpCisgICBQaW5uYWNsZSBQQ1RWIFBybyAoQnQ4NzgsIE1UMjAzMikKKyAgIFBpbm5jYWxlIFBDVFYgU2F0IChidDg3OGEsIEhNMTgyMS8xMjIxKSBbIkNvbmV4YW50IENYMjQxMTAgd2l0aCBDWDI0MTA4IHR1bmVyLCBha2EgSE0xMjIxL0hNMTgxMSJdCisgICBQaW5uYWNsZSBQQ1RWIFNhdCBYRQorCisgICBNKEopUEVHIGNhcHR1cmUgYW5kIHBsYXliYWNrOgorICAgREMxKyAoSVNBKQorICAgREMxMCAgKHpyMzYwNTcsICAgICB6cjM2MDYwLCAgICAgIHNhYTcxMTAsIGFkdjcxNzYpCisgICBEQzEwKyAoenIzNjA2NywgICAgIHpyMzYwNjAsICAgICAgc2FhNzExMCwgYWR2NzE3NikKKyAgIERDMjAgIChxbDE2eDI0Yix6cjM2MDUwLCB6cjM2MDE2LCBzYWE3MTEwLCBzYWE3MTg3IC4uLikKKyAgIERDMzAgICh6cjM2MDU3LCB6cjM2MDUwLCB6cjM2MDE2LCB2cHgzMjIwLCBhZHY3MTc2LCBhZDE4NDMsIHRlYTY0MTUsIG1pcm8gRlNUOTdBMSkKKyAgIERDMzArICh6cjM2MDY3LCB6cjM2MDUwLCB6cjM2MDE2LCB2cHgzMjIwLCBhZHY3MTc2KQorICAgREM1MCAgKHpyMzYwNjcsIHpyMzYwNTAsIHpyMzYwMTYsIHNhYTcxMTIsIGFkdjcxNzYgKDIgcGNzLj8pLCBhZDE4NDMsIG1pcm8gRlNUOTdBMSwgTGF0dGljZSA/Pz8pCisKK0xlbmNvCistLS0tLQorICAgTVhSLTk1NjUgKD1UZWNobmlzYXQgTWVkaWFmb2N1cz8pCisgICBNWFItOTU3MSAoQnQ4NDgpICg9Q1BIMDMxPykKKyAgIE1YUi05NTc1CisgICBNWFItOTU3NyAoQnQ4NzgpICg9UHJvbGluayA4NzhUViBSZXYuM3gpCisgICBNWFRWLTk1NzhDUCAoQnQ4NzgpICg9IFByb2xpbmsgUFYtQlQ4NzhQKzRFKQorCitJb21lZ2EKKy0tLS0tLQorICAgQnV6ICh6cjM2MDY3LCB6cjM2MDYwLCBzYWE3MTExLCBzYWE3MTg1KQorCitMTUwKKy0tLQorICAgTE1MMzMgKHpyMzYwNjcsIHpyMzYwNjAsIGJ0ODE5LCBidDg1NikKKworR3JhbmR0ZWMKKy0tLS0tLS0tCisgICBHcmFuZCBWaWRlbyBDYXB0dXJlIChCdDg0OCkKKyAgIE11bHRpIENhcHR1cmUgQ2FyZCAgKEJ0ODc4KQorCitLb3V0ZWNoCistLS0tLS0tCisgICBLVy02MDYgKEJ0ODQ4KQorICAgS1ctNjA3IChCdDg0OCBjYXB0dXJlIG9ubHkpCisgICBLVy02MDZSU0YKKyAgIEtXLTYwN0EgKGNhcHR1cmUgb25seSkKKyAgIEtXLTYwOCAoWm9yYW4gY2FwdHVyZSBvbmx5KQorIAorSU9EQVRBIChqcCkKKy0tLS0tLQorICAgR1YtQkNUVi9QQ0kKKyAgIEdWLUJDVFYyL1BDSQorICAgR1YtQkNUVjMvUENJCisgICBHVi1CQ1RWNC9QQ0kKKyAgIEdWLVZDUC9QQ0kgKGNhcHR1cmUgb25seSkKKyAgIEdWLVZDUDIvUENJIChjYXB0dXJlIG9ubHkpCisKK0Nhbm9wdXMgKGpwKQorLS0tLS0tLQorICAgV2luRFZSCT0gS3dvcmxkICJLVy1UVkw4NzhSRiIKKword3d3LnNpZ21hY29tLmNvLmtyIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTaWdtYSBDeWJlciBUViBJSSAKKword3d3LnNhc2VtLmNvLmtyCistLS0tLS0tLS0tLS0tLS0KKyAgIExpdHRlIE9uQWlyIFRWCisKK2hhbWEgCistLS0tCisgICBUVi9SYWRpby1UdW5lciBDYXJkLCBQQ0kgKE1vZGVsIDQ0Njc3KSA9IENQSDA1MQorCitTaWdtYSBEZXNpZ25zCistLS0tLS0tLS0tLS0tCisgICBIb2xseXdvb2QgcGx1cyAoZW04MzAwLCBlbTkwMTAsIGFkdjcxNzUpLCAoUENCICJNMzQwLTEwIikgTVBFRyBEVkQgZGVjb2RlcgorCitGb3JtYWMKKy0tLS0tLQorICAgaVByb1RWIChDYXJkIGZvciBpTWFjIE1lenphbmluZSBzbG90LCBCdDg0OCtTQ1NJKQorICAgUHJvVFYgKEJ0ODQ4KQorICAgUHJvVFYgSUkgPSBQcm9UViBTdGVyZW8gKEJ0ODc4KSBbInN0ZXJlbyIgbWVhbnMgRk0gc3RlcmVvLCB0diBpcyBzdGlsbCBtb25vXQorCitBVEkKKy0tLQorICAgVFYtV29uZGVyCisgICBUVi1Xb25kZXIgVkUKKworRGlhbW9uZCBNdWx0aW1lZGlhCistLS0tLS0tLS0tLS0tLS0tLS0KKyAgIERUVjIwMDAgKEJ0ODQ4LCB0ZGE5ODc1KQorCitBb3BlbgorLS0tLS0KKyAgIFZBMTAwMCBQbHVzICh3LyBTdGVyZW8pCisgICBWQTEwMDAgTGl0ZQorICAgVkExMDAwICg9TFI5MCkKKworSW50ZWwKKy0tLS0tCisgICBTbWFydCBWaWRlbyBSZWNvcmRlciAoSVNBIGZ1bGwtbGVuZ3RoKQorICAgU21hcnQgVmlkZW8gUmVjb3JkZXIgcHJvIChJU0EgaGFsZi1sZW5ndGgpCisgICBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkgKEJ0ODQ4KQorCitTVEIKKy0tLQorICAgU1RCIEdhdGV3YXkgNjAwMDcwNCAoYnQ4NzgpCisgICBTVEIgR2F0ZXdheSA2MDAwNjk5IChidDg0OCkKKyAgIFNUQiBHYXRld2F5IDYwMDA0MDIgKGJ0ODQ4KQorICAgU1RCIFRWMTMwIFBDSQorCitWaWRlb2xvZ2ljCistLS0tLS0tLS0tCisgICBDYXB0aXZhdG9yIFByby9UViAoSVNBPykKKyAgIENhcHRpdmF0b3IgUENJL1ZDIChCdDg0OCBidW5kbGVkIHdpdGggY2FtZXJhKSAoY2FwdHVyZSBvbmx5KQorCitUZWNobm90cmVuZAorLS0tLS0tLS0tLS0tCisgICBUVC1TQVQgUENJIChQQ0IgIlNhdC1QQ0kgUmV2LjoxLjMuMSI7IHpyMzYxMjUsIHZweDMyMjVkLCBzdGMwMDU2YSwgVHVuZXI6QlNLRTYtMTU1QQorICAgVFQtRFZCLVNhdAorICAgIHJldmlzaW9ucyAxLjEsIDEuMywgMS41LCAxLjYgYW5kIDIuMQorICAgIFRoaXMgY2FyZCBpcyBzb2xkIGFzIE9FTSBmcm9tOgorCVNpZW1lbnMgRFZCLXMgQ2FyZAorCUhhdXBwYXVnZSBXaW5UViBEVkItUworCVRlY2huaXNhdCBTa3lTdGFyIDEgRFZCCisJR2FsYXhpcyBEVkIgU2F0CisgICAgTm93IHRoaXMgY2FyZCBpcyBjYWxsZWQgVFQtUENsaW5lIFByZW1pdW0gRmFtaWx5CisgICBUVC1CdWRnZXQgKHNhYTcxNDYsIGJzcnU2LTcwMWEpCisgICAgVGhpcyBjYXJkIGlzIHNvbGQgYXMgT0VNIGZyb206CisJSGF1cHBhdWdlIFdpblRWIE5vdmEKKwlTYXRlbGNvIFN0YW5kYXJkIFBDSSAoRFZCLVMpCisgICBUVC1EVkItQyBQQ0kKKworVGVsZXMKKy0tLS0tCisgICBEVkItcyAoUmV2LiAyLjIsIEJTUlYyLTMwMUEsIGRhdGEgb25seT8pCisKK1JlbW90ZSBWaXNpb24KKy0tLS0tLS0tLS0tLS0KKyAgIE1YIFJWNjA1IChCdDg0OCBjYXB0dXJlIG9ubHkpCisKK0JvZWRlcgorLS0tLS0tCisgICBQQyBDaGF0Q2FtIChNb2RlbCA2ODI1MikgKEJ0ODQ4IGNhcHR1cmUgb25seSkKKyAgIFR2L0ZtIENhcHR1cmUgQ2FyZCAgKE1vZGVsIDY4NDA0KSA9IFBWOTUxCisKK01lZGlhLVN1cmZlciAgKGVzYy1rYXRocmVpbi5kZSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFNhdC1TdXJmZXIgKElTQSkKKyAgIFNhdC1TdXJmZXIgUENJID0gVGVjaG5pLVBDLVNhdAorICAgQ2FibGUtU3VyZmVyIDEKKyAgIENhYmxlLVN1cmZlciAyCisgICBDYWJsZS1TdXJmZXIgUENJICh6cjM2MTIwKQorICAgQXVkaW8tU3VyZmVyIChJU0EgUmFkaW8gY2FyZCkKKworSmV0d2F5ICh3d3cuamV0d2F5LmNvbS50dykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBKVy1UViA4NzhNIAorICAgSlctVFYgODc4ICA9IEtXb3JsZCBLVy1UVjg3OFJGCisKK0dhbGF4aXMKKy0tLS0tLS0KKyAgIEdhbGF4aXMgRFZCIENhcmQgUyBDSQorICAgR2FsYXhpcyBEVkIgQ2FyZCBDIENJCisgICBHYWxheGlzIERWQiBDYXJkIFMKKyAgIEdhbGF4aXMgRFZCIENhcmQgQworICAgR2FsYXhpcyBwbHVnLmluIFMgW25ldWVyIE5hbWU6IEdhbGF4aXMgRFZCIENhcmQgUyBDSQorCitIYXVwcGF1Z2UKKy0tLS0tLS0tLQorICAgbWFueSBtYW55IFdpblRWIG1vZGVscyAuLi4KKyAgIFdpblRWIERWQnMgPSBUZWNobm90cmVuZCBQcmVtaXVtIDEuMworICAgV2luVFYgTk9WQSA9IFRlY2hub3RyZW5kIEJ1ZGdldCAxLjEgIlMtRFZCIERBVEEiCisgICBXaW5UViBOT1ZBLUNJICJTRFZCQUNJIgorICAgV2luVFYgTm92YSBVU0IgKD1UZWNobm90cmVuZCBVU0IgMS4wKQorICAgV2luVFYtTmV4dXMtcyAoPVRlY2hub3RyZW5kIFByZW1pdW0gMi4xIG9yIDIuMikKKyAgIFdpblRWIFBWUgorICAgV2luVFYgUFZSIDI1MAorICAgV2luVFYgUFZSIDQ1MAorCisgIFVTIG1vZGVscworICA5OTAgV2luVFYtUFZSLTM1MCAoMjQ5VVNEKSAoaVRWQzE1IGNoaXBzZXQgKyByYWRpbykKKyAgOTgwIFdpblRWLVBWUi0yNTAgKDE0OVVTRCkgKGlUVkMxNSBjaGlwc2V0KQorICA4ODAgV2luVFYtUFZSLVBDSSAoMTk5VVNEKSAoS0ZJUiBjaGlwc2V0ICsgYnQ4NzgpCisgIDg4MSBXaW5UVi1QVlItVVNCCisgIDE5MCBXaW5UVi1HTworICAxOTEgV2luVFYtR08tRk0KKyAgNDA0IFdpblRWCisgIDQwMSBXaW5UVi1yYWRpbworICA0OTUgV2luVFYtVGhlYXRlcgorICA2MDIgV2luVFYtVVNCCisgIDYyMSBXaW5UVi1VU0ItRk0KKyAgNjAwIFVTQi1MaXZlCisgIDY5OCBXaW5UVi1IRAorICA2OTcgV2luVFYtRAorICA1NjQgV2luVFYtTmV4dXMtUworCisgIERldXRzY2hlIE1vZGVsbGUKKyAgNjAzIFdpblRWIEdPCisgIDcxOSBXaW5UViBQcmltaW8tRk0KKyAgNzE4IFdpblRWIFBDSS1GTQorICA0OTcgV2luVFYgVGhlYXRlcgorICA1NjkgV2luVFYgVVNCCisgIDU2OCBXaW5UViBVU0ItRk0KKyAgODgyIFdpblRWIFBWUgorICA5ODEgV2luVFYgUFZSIDI1MAorICA4OTEgV2luVFYtUFZSLVVTQgorICA1NDEgV2luVFYgTm92YQorICA0ODggV2luVFYgTm92YS1DaQorICA1NjQgV2luVFYtTmV4dXMtcworICA3MjcgV2luVFYtRFZCLWMKKyAgNTQ1IENvbW1vbiBJbnRlcmZhY2UKKyAgODk4IFdpblRWLU5vdmEtVVNCCisKKyAgVUsgbW9kZWxzCisgIDYwNyBXaW5UViBHbworICA2OTMsNzkzIFdpblRWIFByaW1pbyBGTQorICA2NDcsNzQ3IFdpblRWIFBDSSBGTQorICA0OTggV2luVFYgVGhlYXRlcgorICA4ODMgV2luVFYgUFZSCisgIDg5MyBXaW5UViBQVlIgVVNCICAoRHVwbGljYXRlIGVudHJ5KQorICA1NjYgV2luVFYgVVNCIChVSykKKyAgNTczIFdpblRWIFVTQiBGTQorICA0MjkgSW1wYWN0IFZDQiAoYnQ4NDgpCisgIDYwMCBVU0IgTGl2ZSAoVmlkZW8tSW4gMXggQ29tcCwgMXhTVkhTKQorICA1NDIgV2luVFYgTm92YQorICA3MTcgV2luVFYgRFZCLVMKKyAgOTA5IE5vdmEtdCBQQ0kKKyAgODkzIE5vdmEtdCBVU0IgICAoRHVwbGljYXRlIGVudHJ5KQorICA4MDIgTXlUVgorICA4MDQgTXlWaWV3CisgIDgwOSBNeVZpZGVvCisgIDg3MiBNeVRWMkdvIEZNCisKKyAKKyAgNTQ2IFdpblRWIE5vdmEtUyBDSQorICA1NDMgV2luVFYgTm92YQorICA5MDcgTm92YS1TIFVTQgorICA5MDggTm92YS1UIFVTQgorICA3MTcgV2luVFYgTmV4dXMtUworICAxNTcgREVDMzAwMC1zIFN0YW5kYWxvbmUgKyBVU0IKKworICBTcGFpbgorICA2ODUgV2luVFYtR28KKyAgNjkwIFdpblRWLVByaW1pb0ZNCisgIDQxNiBXaW5UVi1QQ0kgTmljYW0gRXN0ZXJlbworICA2NzcgV2luVFYtUENJLUZNCisgIDY5OSBXaW5UVi1UaGVhdGVyCisgIDY4MyBXaW5UVi1VU0IKKyAgNjc4IFdpblRWLVVTQi1GTQorICA5ODMgV2luVFYtUFZSLTI1MAorICA4ODMgV2luVFYtUFZSLVBDSQorICA5OTMgV2luVFYtUFZSLTM1MAorICA4OTMgV2luVFYtUFZSLVVTQgorICA3MjggV2luVFYtRFZCLUMgUENJCisgIDgzMiBNeVRWMkdvCisgIDg2OSBNeVRWMkdvLUZNCisgIDgwNSBNeVZpZGVvIChVU0IpCisgIAorCitNYXRyaXgtVmlzaW9uCistLS0tLS0tLS0tLS0tCisgICBNQVRSSVgtVmlzaW9uIE1WLURlbHRhCisgICBNQVRSSVgtVmlzaW9uIE1WLURlbHRhIDIKKyAgIE1Wc2lnbWEtU0xDIChCdDg0OCkKKworQ29uY2VwdHJvbmljICgubmV0KQorLS0tLS0tLS0tLS0tCisgICBUVkNPTiBGTSwgIFRWIGNhcmQgdy8gRk0gPSBDUEgwNXgKKyAgIFRWQ09OID0gQ1BIMDZ4CisKK0Jlc3REYXRhCistLS0tLS0tLQorICAgSENDMTAwID0gVkNDMTAwcmV2MSArIGNhbWVyYQorICAgVkNDMTAwIHJldjEgKGJ0ODQ4KQorICAgVkNDMTAwIHJldjIgKGJ0ODc4KQorCitHYWxsYW50ICAod3d3LmdhbGxhbnRjb20uY29tKSB3d3cubWludG9uLmNvbS50dworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEludGVydmlzaW9uIElWLTUxMCAoY2FwdHVyZSBvbmx5IGJ0OHg4KQorICAgSW50ZXJ2aXNpb24gSVYtNTUwIChidDh4OCkKKyAgIEludGVydmlzaW9uIElWLTEwMCAoem9yYW4pCisgICBJbnRlcnZpc2lvbiBJVi0xMDAwIChidDh4OCkKKyAgIAorQXNvbmljICh3d3cuYXNvbmljLmNvbS5jbikgKHdlYnNpdGUgZG93bikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTa3lFeWUgdHYgODc4CisKK0hvb250ZWNoCistLS0tLS0tLQorICAgODc4VFYvRk0KKworVGVwcHJvICh3d3cuaXRjdGVwcHJvLmNvbS50dykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBJVEMgUENJVFYgKENhcmQgVmVyIDEuMCkgIlRlcHBybyBUVjEvVFZGTTEgQ2FyZCIKKyAgIElUQyBQQ0lUViAoQ2FyZCBWZXIgMi4wKQorICAgSVRDIFBDSVRWIChDYXJkIFZlciAzLjApID0gIlBWLUJUODc4UCsgKFJFVi45RCkiCisgICBJVEMgUENJVFYgKENhcmQgVmVyIDQuMCkKKyAgIFRFUFBSTyBJVi01NTAgKEZvciBCVDg0OCBNYWluIENoaXApCisgICBJVEMgRFNUVFYgKGJ0ODc4LCBzYXRlbGxpdGUpCisgICBJVEMgVmlkZW9NYWtlciAoc2FhNzE0NiwgU3RyZWFtTWFjaGluZSBzbTIxMTAsIHR2dHVuZXIpICJQVi1TTTIyMTBQKyAoUkVWOjFDKSIKKworS3dvcmxkICh3d3cua3dvcmxkLmNvbS50dykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFBDIFRWIFN0YXRpb24KKyAgIEtXT1JMRCBLVy1UVjg3OFIgIFRWIChubyByYWRpbykKKyAgIEtXT1JMRCBLVy1UVjg3OFJGIFRWICh3LyByYWRpbykKKworICAgS1dPUkxEIEtXLVRWTDg3OFJGIChsb3cgcHJvZmlsZSkKKworICAgS1dPUkxEIEtXLVRWNzEzWFJGIChzYWE3MTM0KQorCisKKyAgTVBFRyBUViBTdGF0aW9uIChzYW1lIGNhcmRzIGFzIGFib3ZlIHBsdXMgV2luRFZSIFNvZnR3YXJlIE1QRUcgZW4vZGVjb2RlcikKKyAgIEtXT1JMRCBLVy1UVjg3OFIgLVBybyAgIFRWIChubyBSYWRpbykKKyAgIEtXT1JMRCBLVy1UVjg3OFJGLVBybyAgIFRWICh3LyBSYWRpbykKKyAgIEtXT1JMRCBLVy1UVjg3OFIgLVVsdHJhIFRWIChubyBSYWRpbykKKyAgIEtXT1JMRCBLVy1UVjg3OFJGLVVsdHJhIFRWICh3LyBSYWRpbykKKworCisKK0pUVC8gSnVzdHkgQ29ycC5odHRwOi8vd3d3Lmp1c3R5LmNvLmpwLyAod3d3Lmp0dC5jb20uanAgd2Vic2l0ZSBkb3duKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBKVFQtMDIgKEpUVCBUVikgIlRWIHdhdGNobWF0ZSBwcm8iIChidDg0OCkgCisKK0FEUyB3d3cuYWRzdGVjaC5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENoYW5uZWwgU3VyZmVyIFRWICggQ0hYLTk1MCApIAorICAgQ2hhbm5lbCBTdXJmZXIgVFYrRk0gKCBDSFgtOTYwRk0gKQorCitBVkVDIHd3dy5wcm9jaGlwcy5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQVZFQyBJbnRlcmNhcHR1cmUgKGJ0ODQ4LCB0ZWE2MzIwKQorCitOb0JyYW5kCistLS0tLS0tCisgICBUViBFeGNlbCA9IEF1c3RyYWxpYW4gTmFtZSBmb3IgIlBWLUJUODc4UCsgOEUiIG9yICI4NzhUViBSZXYuM18iCisKK01hY2ggd3d3Lm1hY2hzcGVlZC5jb20KKy0tLS0KKyAgIE1hY2ggVFYgODc4CisKK0VsaW5lIHd3dy5lbGluZS1uZXQuY29tLworLS0tLS0KKyAgIEVsaW5lIFZpc2lvbiBUVk1hc3RlciAvIFRWTWFzdGVyIEZNIChFTFYtVFZNLyBFTFYtVFZNLUZNKSA9IExSMjYgIChidDg3OCkKKyAgIEVsaW5lIFZpc2lvbiBUVk1hc3Rlci0yMDAwIChFTFYtVFZNLTIwMDAsIEVMVi1UVk0tMjAwMC1GTSk9IExSMTM4IChzYWE3MTN4KQorCitTcGlyaXQgaHR0cDovL3d3dy5zcGlyaXRtb2RlbXMuY29tLmF1LworLS0tLS0tCisgICBTcGlyaXQgVFYgVHVuZXIvVmlkZW8gQ2FwdHVyZSBDYXJkIChidDg0OCkKKworQm9zZXIgd3d3LmJvc2VyLmNvbS50dworLS0tLS0KKyAgIEhTLTg3OCBNaW5pIFBDSSBDYXB0dXJlIEFkZC1vbiBDYXJkCisgICBIUy04NzkgTWluaSBQQ0kgM0QgQXVkaW8gYW5kIENhcHR1cmUgQWRkLW9uIENhcmQgKHcvIEVTMTkzOCBTb2xvLTEpCisKK1NhdGVsY28gd3d3LmNpdHljb20tZ21iaC5kZSwgd3d3LnNhdGVsY28uZGUKKy0tLS0tLS0KKyAgIFRWLUZNID1LTkMxIHNhYTcxMzQKKyAgIFN0YW5kYXJkIFBDSSAoRFZCLVMpID0gVGVjaG5vdHJlbmQgQnVkZ2V0CisgICBTdGFuZGFyZCBQQ0kgKERWQi1TKSB3LyBDSQorICAgU2F0ZWxjbyBIaWdoZW5kIFBDSSAoRFZCLVMpID0gVGVjaG5vdHJlbmQgUHJlbWl1bQorCisKK1NlbnNvcmF5IHd3dy5zZW5zb3JheS5jb20KKy0tLS0tLS0tCisgICBTZW5zb3JheSAzMTEgKFBDLzEwNCBidXMpCisgICBTZW5zb3JheSA2MTEgKFBDSSkKKworQ0VJIChDaGFydGVyZWQgRWxlY3Ryb25pY3MgSW5kdXN0cmllcyBQdGUgTHRkIFtDRUldIFtGQ0MgSUQgSEJZXSkKKy0tLQorICBUViBUdW5lciAgLSAgSEJZLTMzQS1SQUZGTEVTICBCcm9va3RyZWUgQnQ4NDhLUEYgKyBQaGlsaXBzCisgIFRWIFR1bmVyIE1HOTkxMCAgLSAgSEJZMzNBLVRWTyAgQ0VJICsgUGhpbGlwcyBTQUE3MTEwICsgT0tJIE01NDgyNjIgKyBTVCBTVFY4NDM4Q1YKKyAgUHJpbWV0aW1lIFRWIChJU0EpCisgICBhY3F1aXJlZCBieSBTaW5nYXBvcmUgVGVjaG5vbG9naWVzCisgICBub3cgb3BlcmF0aW5nIGFzIENoYXJ0ZXJlZCBTZW1pY29uZHVjdG9yIE1hbnVmYWN0dXJpbmcKKyAgIE1hbnVmYWN0dXJlciBvZiB2aWRlbyBjYXJkcyBpcyBsaXN0ZWQgYXM6CisgICBDb2dlbnQgRWxlY3Ryb25pY3MgSW5kdXN0cmllcyBbQ0VJXQorCitBSVRlY2gKKy0tLS0tLQorICAgV2F2ZXdhdGNoZXIgVFYgKElTQSkKKyAgIEFJVGVjaCBXYXZlV2F0Y2hlciBUVi1QQ0kgPSBjYW4gYmUgTFIyNiAoQnQ4NDgpIG9yIExSNTAgKEJUODc4KQorICAgV2F2ZVdhdGNoZXIgVFZSLTIwMiBUVi9GTSBSYWRpbyBDYXJkIChJU0EpCisKK01BWFJPTgorLS0tLS0tCisgICBNYXhyb24gTWF4VFYvRk0gUmFkaW8gKEtXLVRWODc4LUZOVCkgPSBLd29ybGQgb3IgSlctVFY4NzgtRkJLCisKK3d3dy5pZHMtaW1hZ2luZy5kZQorLS0tLS0tLS0tLS0tLS0tLS0tCisgICBGYWxjb24gU2VyaWVzIChjYXB0dXJlIG9ubHkpCisgSW4gVVNBOiBodHRwOi8vd3d3LnRoZWltYWdpbmdzb3VyY2UuY29tLworICAgREZHL0xDMQkKKword3d3LnNrbmV0LXdlYi5jby5qcAorLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgU0tuZXQgTW9uc3RlciBUViAoc2FhNzEzNCkKKworQS1NYXggd3d3LmFtYXhoay5jb20gKENvbG9ybWF4LCBBbWF4LCBOYXBhKQorLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQVBBQyBWaWV3Y29tcCA4NzgKKworQ3liZXJ0YWlubWVudAorLS0tLS0tLS0tLS0tLQorICAgQ3liZXJNYWlsIEFWIFZpZGVvIEVtYWlsIEtpdCB3LyBQQ0kgQ2FwdHVyZSBDYXJkIChjYXB0dXJlIG9ubHkpCisgICBDeWJlck1haWwgWHRyZW1lCisgIFRoZXNlIGFyZSBGbHl2aWRlbworCitWQ1IgKGh0dHA6Ly93d3cudmNyaW5jLmNvbS8pIAorLS0tCisgIFZpZGVvIENhdGNoZXIgMTYKKworVHdpbmhhbgorLS0tLS0tLQorICAgRFNUIENhcmQvRFNULUlQIChidDg3OCwgdHdpbmhhbiBhc2ljKSBWUC0xMDIwCisgICAgU29sZCBhczoKKyAgICAgS1dvcmxkIERWQlMgU2F0ZWxsaXRlIFRWLUNhcmQKKyAgICAgUG93ZXJjb2xvciBEU1RWIFNhdGVsbGl0ZSBUdW5lciBDYXJkCisgICAgIFByb2xpbmsgUGl4ZWx2aWV3IERUVjIwMDAKKyAgICAgUHJvdmlkZW8gUFYtOTExIERpZ2l0YWwgU2F0ZWxsaXRlIFRWIFR1bmVyIENhcmQgV2l0aCBDb21tb24gSW50ZXJmYWNlID8KKyAgIERTVC1DSSBDYXJkIChEVkIgU2F0ZWxsaXRlKSBWUC0xMDMwCisgICBEQ1QgQ2FyZCAoRFZCIGNhYmxlKQorCitNU0kKKy0tLQorICAgIE1TSSBUVkBueXdoZXJlIFR1bmVyIENhcmQgKE1TLTg4NzYpIChDWDIzODgxLzg4MykgTm90IEJ0ODc4IGNvbXBhdGlibGUuCisgICAgTVMtODQwMSBEVkItUworCitGb2N1cyB3d3cuZm9jdXNpbmZvLmNvbQorLS0tLS0KKyAgICBJblZpZGVvIFBDSSAoYnQ4NzgpCisKK1NkaXNpbGsgd3d3LnNkaXNpbGsuY29tLworLS0tLS0tLQorICAgIFNESSBTaWxrIDEwMAorICAgIFNESSBTaWxrIDIwMCBTREkgSW5wdXQgQ2FyZAorCit3d3cuZXVyZXN5cy5jb20KKyAgICBQSUNPTE8gc2VyaWVzIAorCitQTUMvUGFjZQord3d3LnBhY2Vjb20uY28udWsgd2Vic2l0ZSBjbG9zZWQKKworTWVyY3VyeSB3d3cua29iaWFuLmNvbSAoVUsgYW5kIEZSKQorICAgIExSNTAKKyAgICBMUjEzOFJCRy1SeCAgPT0gTFIxMzgKKworVEVDIHNvdW5kIChwYWNrYWdlIGFuZCBtYW51YWxzIGRvbid0IGhhdmUgYW55IG90aGVyIG1hbnVmYWN0dXJlciBpbmZvKSBUZWNTb3VuZAorICAgIFRob3VnaCBlZHVjYXRlZCBnb29nbGluZyBmb3VuZDogd3d3LnRlY2htYWtlcnMuY29tCisgICAgVFYtTWF0ZSA9IFpvbHRyaXggVlAtODQ4MgorCitMb3JlbnplbiB3d3cubG9yZW56ZW4uZGUKKy0tLS0tLS0tCisgICAgIFNMIERWQi1TIFBDSSA9IFRlY2hub3RyZW5kIEJ1ZGdldCBQQ0kgKHN1MTI3OCBvciBic3J1IHZlcnNpb24pCisKK09yaWdvICgudWspIHd3dy5vcmlnbzIwMDAuY29tCisgICAgIFBDIFRWIENhcmQgPSBMUjUwCisKK0kvTyBNYWdpYyB3d3cuaW9tYWdpYy5jb20KKy0tLS0tLS0tLQorICAgIFBDIFBWUiAtIERlc2t0b3AgVFYgUGVyc29uYWwgVmlkZW8gUmVjb3JkZXIgRFItUENUVjEwMCA9IFBpbm5hY2xlIFJPQjJELTUxMDA5NDY0IDQuMCArIEN5YmVybGluayBQb3dlclZDUiBJSQorCitBcm93YW5hCistLS0tLS0tCisgICAgVFYtS2FydGUgLyBQb3NvIFBvd2VyIFRWICg/KSA9IFpvbHRyaXggVlAtODQ4MiAoPykKKworaVRWQzE1IGJvYXJkczoKKy0tLS0tLS0tLS0tLS0KK2t1cm91dG9zaGlrb3UuY29tIElUVkMxNQoreXVhbi5jb20gTVBHMTYwIFBDSSBUViAoSW50ZXJuYWwgUENJIE1QRUcyIGVuY29kZXIgY2FyZCBwbHVzIFRWLXR1bmVyKQorCitBc3VzIHd3dy5hc3VzY29tLmNvbQorICAgQXN1cyBUViBUdW5lciBDYXJkIDg4MCBOVFNDIChsb3cgcHJvZmlsZSwgY3gyMzg4MCkKKyAgIEFzdXMgVFYgKHNhYTcxMzQpCisKK0hvb250ZWNoCistLS0tLS0tLQoraHR0cDovL3d3dy5ob29udGVjaC5jb20va29yZWFuL2Rvd25sb2FkL2Rvd25fZHJpdmVyX2xpc3QwMy5odG1sCisgICBIQVJUIFZpc2lvbiA4NDggKEgtQVJUIFZpc2lvbiA4NDgpCisgICBIQVJUIFZpc2lvbiA4NzggKEgtQXJ0IFZpc2lvbiA4NzgpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSUNzIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0lDcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjc0OTEzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0lDcwpAQCAtMCwwICsxLDM3IEBACithbGwgYm9hcmRzOgorCitCcm9va3RyZWUgQnQ4NDgvODQ4QS84NDkvODc4Lzg3OTogdmlkZW8gY2FwdHVyZSBjaGlwCisKKworCitNaXJvIFBDVFY6CisKK1BoaWxpcHMgb3IgVGVtaWMgVHVuZXIKKworCisKK0hhdXBwYXVnZSBXaW4vVFYgcGNpICh2ZXJzaW9uIDQwNSk6CisKK01pY3JvY2hpcCAyNExDMDJCIG9yCitQaGlsaXBzIDg1ODJFMlk6IDI1NiBCeXRlIEVFUFJPTSB3aXRoIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgSTJDIDB4YTAtMHhhMSwgKDI0TEMwMkIgYWxzbyByZXNwb25kcyB0byAweGEyLTB4YWYpCitQaGlsaXBzIFNBQTUyNDZBR1AvRTogVmlkZW90ZXh0IGRlY29kZXIgY2hpcCwgSTJDIDB4MjItMHgyMworVERBOTgwMDogc291bmQgZGVjb2RlcgorV2luYm9uZCBXMjQyNTdBUy0zNTogMzJLeDggQ01PUyBzdGF0aWMgUkFNIChWaWRlb3RleHQgYnVmZmVyIG1lbSkKKzE0MDUyQjogYW5hbG9nIHN3aXRjaCBmb3Igc2VsZWN0aW9uIG9mIHNvdW5kIHNvdXJjZQorCitQQUw6IAorVERBNTczNzogVkhGLCBoeXBlcmJhbmQgYW5kIFVIRiBtaXhlci9vc2NpbGxhdG9yIGZvciBUViBhbmQgVkNSIDMtYmFuZCB0dW5lcnMKK1RTQTU1MjI6IDEuNCBHSHogSTJDLWJ1cyBjb250cm9sbGVkIHN5bnRoZXNpemVyLCBJMkMgMHhjMi0weGMzCisKK05UU0M6CitUREE1NzMxOiBWSEYsIGh5cGVyYmFuZCBhbmQgVUhGIG1peGVyL29zY2lsbGF0b3IgZm9yIFRWIGFuZCBWQ1IgMy1iYW5kIHR1bmVycworVFNBNTUxODogbm8gZGF0YXNoZWV0IGF2YWlsYWJsZSBvbiBQaGlsaXBzIHNpdGUKKworCisKK1NUQiBUViBwY2k6CisKKz8/PworaWYgeW91IHdhbnQgYmV0dGVyIHN1cHBvcnQgZm9yIFNUQiBjYXJkcyBzZW5kIG1lIGluZm8hCitMb29rIGF0IHRoZSBib2FyZCEgV2hhdCBjaGlwcyBhcmUgb24gaXQ/CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiNWE1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKQEAgLTAsMCArMSwxNzMgQEAKKworTm90ZTogIm1vZGluZm8gPG1vZHVsZT4iIHByaW50cyB2YXJpb3VzIGluZm9ybWF0aW9ucyBhYm91dCBhIGtlcm5lbAorbW9kdWxlLCBhbW9uZyB0aGVtIGEgY29tcGxldGUgYW5kIHVwLXRvLWRhdGUgbGlzdCBvZiBpbnNtb2Qgb3B0aW9ucy4KK1RoaXMgbGlzdCB0ZW5kcyB0byBiZSBvdXRkYXRlZCBiZWNhdXNlIGl0IGlzIHVwZGF0ZWQgbWFudWFsbHkgLi4uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2J0dHYubworCXRoZSBidDg0OC84NzggKGdyYWJiZXIgY2hpcCkgZHJpdmVyCisKKwlpbnNtb2QgYXJnczoKKwkJY2FyZD1uCQljYXJkIHR5cGUsIHNlZSBDQVJETElTVCBmb3IgYSBsaXN0LgorCQl0dW5lcj1uCQl0dW5lciB0eXBlLCBzZWUgQ0FSRExJU1QgZm9yIGEgbGlzdC4KKwkJcmFkaW89MC8xCWNhcmQgc3VwcG9ydHMgcmFkaW8KKwkJcGxsPTAvMS8yCXBsbCBzZXR0aW5ncworCQkJMDogZG9uJ3QgdXNlIFBMTAorCQkJMTogMjggTUh6IGNyeXN0YWwgaW5zdGFsbGVkCisJCQkyOiAzNSBNSHogY3J5c3RhbCBpbnN0YWxsZWQKKworCQl0cml0b24xPTAvMSAgICAgZm9yIFRyaXRvbjEgKCtvdGhlcnMpIGNvbXBhdGliaWxpdHkKKwkJdnNmeD0wLzEJeWV0IGFub3RoZXIgY2hpcHNldCBidWcgY29tcGF0aWJpbGl0eSBiaXQKKwkJCQlzZWUgUkVBRE1FLnF1aXJrcyBmb3IgZGV0YWlscyBvbiB0aGVzZSB0d28uCisKKwkJYmlnZW5kaWFuPW4JU2V0IHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBnZnggZnJhbWVidWZmZXIuCisJCQkJRGVmYXVsdCBpcyBuYXRpdmUgZW5kaWFuLgorCQlmaWVsZG5yPTAvMQlDb3VudCBmaWVsZHMuICBTb21lIFRWIGRlc2NyYW1ibGluZyBzb2Z0d2FyZQorCQkJCW5lZWRzIHRoaXMsIGZvciBvdGhlcnMgaXQgb25seSBnZW5lcmF0ZXMKKwkJCQk1MCB1c2VsZXNzIElSUXMvc2VjLiAgZGVmYXVsdCBpcyAwIChvZmYpLgorCQlhdXRvbG9hZD0wLzEJYXV0b2xvYWQgaGVscGVyIG1vZHVsZXMgKHR1bmVyLCBhdWRpbykuCisJCQkJZGVmYXVsdCBpcyAxIChvbikuCisJCWJ0dHZfdmVyYm9zZT0wLzEvMiAgdmVyYm9zZSBsZXZlbCAoYXQgaW5zbW9kIHRpbWUsIHdoaWxlCisJCQkJbG9va2luZyBhdCB0aGUgaGFyZHdhcmUpLiAgZGVmYXVsdCBpcyAxLgorCQlidHR2X2RlYnVnPTAvMQlkZWJ1ZyBtZXNzYWdlcyAoZm9yIGNhcHR1cmUpLgorCQkJCWRlZmF1bHQgaXMgMCAob2ZmKS4KKwkJaXJxX2RlYnVnPTAvMQlpcnEgaGFuZGxlciBkZWJ1ZyBtZXNzYWdlcy4KKwkJCQlkZWZhdWx0IGlzIDAgKG9mZikuCisJCWdidWZmZXJzPTItMzIJbnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycyBmb3IgbW1hcCdlZCBjYXB0dXJlLgorCQkJCWRlZmF1bHQgaXMgNC4KKwkJZ2J1ZnNpemU9CXNpemUgb2YgY2FwdHVyZSBidWZmZXJzLiBkZWZhdWx0IGFuZAorCQkJCW1heGltdW0gdmFsdWUgaXMgMHgyMDgwMDAgKH4yTUIpCisJCW5vX292ZXJsYXk9MAlFbmFibGUgb3ZlcmxheSBvbiBicm9rZW4gaGFyZHdhcmUuICBUaGVyZQorCQkJCWFyZSBzb21lIGNoaXBzZXRzIChTSVMgZm9yIGV4YW1wbGUpIHdoaWNoCisJCQkJYXJlIGtub3duIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0aGUgUENJIERNQQorCQkJCXB1c2ggdXNlZCBieSBidHR2LiAgYnR0diB3aWxsIGRpc2FibGUgb3ZlcmxheQorCQkJCWJ5IGRlZmF1bHQgb24gdGhpcyBoYXJkd2FyZSB0byBhdm9pZCBjcmFzaGVzLgorCQkJCVdpdGggdGhpcyBpbnNtb2Qgb3B0aW9uIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcy4KKwkJYXV0b211dGU9MC8xCUF1dG9tYXRpY2FsbHkgbXV0ZXMgdGhlIHNvdW5kIGlmIHRoZXJlIGlzCisJCQkJbm8gVFYgc2lnbmFsLCBvbiBieSBkZWZhdWx0LiAgWW91IG1pZ2h0IHRyeQorCQkJCXRvIGRpc2FibGUgdGhpcyBpZiB5b3UgaGF2ZSBiYWQgaW5wdXQgc2lnbmFsCisJCQkJcXVhbGl0eSB3aGljaCBsZWFkaW5nIHRvIHVud2FudGVkIHNvdW5kCisJCQkJZHJvcG91dHMuCisJCWNocm9tYV9hZ2M9MC8xCUFHQyBvZiBjaHJvbWEgc2lnbmFsLCBvZmYgYnkgZGVmYXVsdC4KKwkJYWRjX2NydXNoPTAvMQlMdW1pbmFuY2UgQURDIGNydXNoLCBvbiBieSBkZWZhdWx0LgorCisJCWJ0dHZfZ3Bpbz0wLzEKKwkJZ3Bpb21hc2s9CisJCWF1ZGlvYWxsPQorCQlhdWRpb211eD0KKwkJCQlTZWUgU291bmQtRkFRIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorCisJcmVtYXAsIGNhcmQsIHJhZGlvIGFuZCBwbGwgYWNjZXB0IHVwIHRvIGZvdXIgY29tbWEtc2VwYXJhdGVkIGFyZ3VtZW50cworCShmb3IgbXVsdGlwbGUgYm9hcmRzKS4KKwordHVuZXIubworCVRoZSB0dW5lciBkcml2ZXIuICBZb3UgbmVlZCB0aGlzIHVubGVzcyB5b3Ugd2FudCB0byB1c2Ugb25seQorCXdpdGggYSBjYW1lcmEgb3IgZXh0ZXJuYWwgdHVuZXIgLi4uCisKKwlpbnNtb2QgYXJnczoKKwkJZGVidWc9MQkJcHJpbnQgc29tZSBkZWJ1ZyBpbmZvIHRvIHRoZSBzeXNsb2cKKwkJdHlwZT1uCQl0eXBlIG9mIHRoZSB0dW5lciBjaGlwLiBuIGFzIGZvbGxvd3M6CisJCQkJc2VlIENBUkRMSVNUIGZvciBhIGNvbXBsZXRlIGxpc3QuCisJCXBhbD1bYmRnaWxdCXNlbGVjdCBQQUwgdmFyaWFudCAodXNlZCBmb3Igc29tZSB0dW5lcnMKKwkJCQlvbmx5LCBpbXBvcnRhbnQgZm9yIHRoZSBhdWRpbyBjYXJyaWVyKS4KKwordHZtaXhlci5vCisJcmVnaXN0ZXJzIGEgbWl4ZXIgZGV2aWNlIGZvciB0aGUgVFYgY2FyZCdzIHZvbHVtZS9iYXNzL3RyZWJsZQorCWNvbnRyb2xzIChyZXF1aXJlcyBhIGkyYyBhdWRpbyBjb250cm9sIGNoaXAgbGlrZSB0aGUgbXNwMzQwMCkuCisKKwlpbnNtb2QgYXJnczoKKwkJZGVidWc9MQkJcHJpbnQgc29tZSBkZWJ1ZyBpbmZvIHRvIHRoZSBzeXNsb2cuCisJCWRldm5yPW4JCWFsbG9jYXRlIGRldmljZSAjbiAoMCA9PSAvZGV2L21peGVyLAorCQkJCTEgPSAvZGV2L21peGVyMSwgLi4uKSwgZGVmYXVsdCBpcyB0bworCQkJCXVzZSB0aGUgZmlyc3QgZnJlZSBvbmUuCisKK3R2YXVkaW8ubworCW5ldywgZXhwZXJpbWVudGFsIG1vZHVsZSB3aGljaCBpcyBzdXBwb3J0ZWQgdG8gcHJvdmlkZSBhIHNpbmdsZQorCWRyaXZlciBmb3IgYWxsIHNpbXBsZSBpMmMgYXVkaW8gY29udHJvbCBjaGlwcyAodGRhL3RlYSopLgorCisJaW5zbW9kIGFyZ3M6CisJCXRkYTg0MjUgID0gMQllbmFibGUvZGlzYWJsZSB0aGUgc3VwcG9ydCBmb3IgdGhlCisJCXRkYTk4NDAgID0gMQl2YXJpb3VzIGNoaXBzLgorCQl0ZGE5ODUwICA9IDEJVGhlIHRlYTYzMDAgY2FuJ3QgYmUgYXV0b2RldGVjdGVkIGFuZCBpcworCQl0ZGE5ODU1ICA9IDEJdGhlcmVmb3JlIG9mZiBieSBkZWZhdWx0LCBpZiB5b3UgaGF2ZQorCQl0ZGE5ODczICA9IDEJdGhpcyBvbmUgb24geW91ciBjYXJkIChTVEIgdXNlcyB0aGVzZSkKKwkJdGRhOTg3NGEgPSAxCXlvdSBoYXZlIHRvIGVuYWJsZSBpdCBleHBsaWNpdGx5LgorCQl0ZWE2MzAwICA9IDAJVGhlIHR3byB0ZGE5ODV4IGNoaXBzIHVzZSB0aGUgc2FtZSBpMmMKKwkJdGVhNjQyMCAgPSAxCWFkZHJlc3MgYW5kIGNhbid0IGJlIGRpc3R1cmdpc2hlZCBmcm9tCisJCXBpYzE2YzU0ID0gMQllYWNoIG90aGVyLCB5b3UgbWlnaHQgaGF2ZSB0byBkaXNhYmxlCisJCQkJdGhlIHdyb25nIG9uZS4KKwkJZGVidWcgPSAxCXByaW50IGRlYnVnIG1lc3NhZ2VzCisKKwlpbnNtb2QgYXJncyBmb3IgdGRhOTg3NGE6CisJCXRkYTk4NzRhX1NJRj0xLzIJc2VsZWN0IHNvdW5kIElGIGlucHV0IHBpbiAoMSBvciAyKQorCQkJCQkoZGVmYXVsdCBpcyBwaW4gMSkKKwkJdGRhOTg3NGFfQU1TRUw9MC8xCWF1dG8tbXV0ZSBzZWxlY3QgZm9yIE5JQ0FNIChkZWZhdWx0PTApCisJCQkJCVBsZWFzZSByZWFkIG5vdGUgMyBiZWxvdyEKKwkJdGRhOTg3NGFfU1REPW4JCXNlbGVjdCBUViBzb3VuZCBzdGFuZGFyZCAoMC4uOCk6CisJCQkJCTAgLSBBMiwgQi9HCisJCQkJCTEgLSBBMiwgTSAoS29yZWEpCisJCQkJCTIgLSBBMiwgRC9LICgxKQorCQkJCQkzIC0gQTIsIEQvSyAoMikKKwkJCQkJNCAtIEEyLCBEL0sgKDMpCisJCQkJCTUgLSBOSUNBTSwgSQorCQkJCQk2IC0gTklDQU0sIEIvRworCQkJCQk3IC0gTklDQU0sIEQvSyAoZGVmYXVsdCkKKwkJCQkJOCAtIE5JQ0FNLCBMCisKKwlOb3RlIDE6IHRkYTk4NzRhIHN1cHBvcnRzIGJvdGggdGRhOTg3NGggKG9sZCkgYW5kIHRkYTk4NzRhIChuZXcpIGNoaXBzLgorCU5vdGUgMjogdGRhOTg3NGgvYSBhbmQgdGRhOTg3NSAod2hpY2ggaXMgc3VwcG9ydGVkIHNlcGFyYXRlbHkgYnkKKwl0ZGE5ODc1Lm8pIHVzZSB0aGUgc2FtZSBpMmMgYWRkcmVzcyBzbyBib3RoIG1vZHVsZXMgc2hvdWxkIG5vdCBiZQorCXVzZWQgYXQgdGhlIHNhbWUgdGltZS4KKwlOb3RlIDM6IFVzaW5nIHRkYTk4NzRhX0FNU0VMIG9wdGlvbiBkZXBlbmRzIG9uIHlvdXIgVFYgY2FyZCBkZXNpZ24hCisJCUFNU0VMPTA6IGF1dG8tbXV0ZSB3aWxsIHN3aXRjaCBiZXR3ZWVuIE5JQ0FNIHNvdW5kCisJCQkgYW5kIHRoZSBzb3VuZCBvbiAxc3QgY2FycmllciAoaS5lLiBGTSBtb25vIG9yIEFNKS4KKwkJQU1TRUw9MTogYXV0by1tdXRlIHdpbGwgc3dpdGNoIGJldHdlZW4gTklDQU0gc291bmQKKwkJCSBhbmQgdGhlIGFuYWxvZyBtb25vIGlucHV0IChNT05PSU4gcGluKS4KKwlJZiB0ZGE5ODc0YSBkZWNvZGVyIG9uIHlvdXIgY2FyZCBoYXMgTU9OT0lOIHBpbiBub3QgY29ubmVjdGVkLCB0aGVuCisJdXNlIG9ubHkgdGRhOTg3NF9BTVNFTD0wIG9yIGRvbid0IHNwZWNpZnkgdGhpcyBvcHRpb24gYXQgYWxsLgorCUZvciBleGFtcGxlOgorCSAgY2FyZD02NSAoRmx5VmlkZW8gMjAwMFMpIC0gc2V0IEFNU0VMPTEgb3IgQU1TRUw9MAorCSAgY2FyZD03MiAoUHJvbGluayBQVi1CVDg3OFAgcmV2LjlCKSAtIHNldCBBTVNFTD0wIG9ubHkKKworbXNwMzQwMC5vCisJVGhlIGRyaXZlciBmb3IgdGhlIG1zcDM0eHggc291bmQgcHJvY2Vzc29yIGNoaXBzLiBJZiB5b3UgaGF2ZSBhCisJc3RlcmVvIGNhcmQsIHlvdSBwcm9iYWJseSB3YW50IHRvIGluc21vZCB0aGlzIG9uZS4KKworCWluc21vZCBhcmdzOgorCQlkZWJ1Zz0xLzIJcHJpbnQgc29tZSBkZWJ1ZyBpbmZvIHRvIHRoZSBzeXNsb2csCisJCQkJMiBpcyBtb3JlIHZlcmJvc2UuCisJCXNpbXBsZT0xCVVzZSB0aGUgInNob3J0IHByb2dyYW1taW5nIiBtZXRob2QuICBOZXdlcgorCQkJCW1zcDM0eHggdmVyc2lvbnMgc3VwcG9ydCB0aGlzLiAgWW91IG5lZWQgdGhpcworCQkJCWZvciBkYnggc3RlcmVvLiAgRGVmYXVsdCBpcyBvbiBpZiBzdXBwb3J0ZWQgYnkKKwkJCQl0aGUgY2hpcC4KKwkJb25jZT0xCQlEb24ndCBjaGVjayB0aGUgVFYtc3RhdGlvbnMgQXVkaW8gbW9kZQorCQkJCWV2ZXJ5IGZldyBzZWNvbmRzLCBidXQgb25seSBvbmNlIGFmdGVyCisJCQkJY2hhbm5lbCBzd2l0Y2hlcy4KKwkJYW1zb3VuZD0xCUF1ZGlvIGNhcnJpZXIgaXMgQU0vTklDQU0gYXQgNi41IE1oei4gIFRoaXMKKwkJCQlzaG91bGQgaW1wcm92ZSB0aGluZ3MgZm9yIGZyZW5jaCBwZW9wbGUsIHRoZQorCQkJCWNhcnJpZXIgYXV0b3NjYW4gc2VlbXMgdG8gd29yayB3aXRoIEZNIG9ubHkuLi4KKwordGVhNjMwMC5vIC0gT0JTT0xFVEUgKHVzZSB0dmF1ZGlvIGluc3RlYWQpCisJVGhlIGRyaXZlciBmb3IgdGhlIHRlYTYzMDAgZmFkZXIgY2hpcC4gIElmIHlvdSBoYXZlIGEgc3RlcmVvCisJY2FyZCBhbmQgdGhlIG1zcDM0MDAubyBkb2Vzbid0IHdvcmssIHlvdSBtaWdodCB3YW50IHRvIHRyeSB0aGlzCisJb25lLiAgVGhpcyBjaGlwIGlzIHNlZW4gb24gbW9zdCBTVEIgVFYvRk0gY2FyZHMgKHVzdWFsbHkgZnJvbQorCUdhdGV3YXkgT0VNIHNvbGQgc3VycGx1cyBvbiBhdWN0aW9uIHNpdGVzKS4KKworCWluc21vZCBhcmdzOgorCQlkZWJ1Zz0xCQlwcmludCBzb21lIGRlYnVnIGluZm8gdG8gdGhlIHN5c2xvZy4KKwordGRhODQyNS5vIC0gT0JTT0xFVEUgKHVzZSB0dmF1ZGlvIGluc3RlYWQpCisJVGhlIGRyaXZlciBmb3IgdGhlIHRkYTg0MjUgZmFkZXIgY2hpcC4gIFRoaXMgZHJpdmVyIHVzZWQgdG8gYmUKKwlwYXJ0IG9mIGJ0dHYuYywgc28gaWYgeW91ciBzb3VuZCB1c2VkIHRvIHdvcmsgYnV0IGRvZXMgbm90CisJYW55bW9yZSwgdHJ5IGxvYWRpbmcgdGhpcyBtb2R1bGUuCisKKwlpbnNtb2QgYXJnczoKKwkJZGVidWc9MQkJcHJpbnQgc29tZSBkZWJ1ZyBpbmZvIHRvIHRoZSBzeXNsb2cuCisKK3RkYTk4NXgubyAtIE9CU09MRVRFICh1c2UgdHZhdWRpbyBpbnN0ZWFkKQorCVRoZSBkcml2ZXIgZm9yIHRoZSB0ZGE5ODUwLzU1IGF1ZGlvIGNoaXBzLgorCisJaW5zbW9kIGFyZ3M6CisJCWRlYnVnPTEJCXByaW50IHNvbWUgZGVidWcgaW5mbyB0byB0aGUgc3lzbG9nLgorCQljaGlwPTk4NTAvOTg1NQlzZXQgdGhlIGNoaXAgdHlwZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9NQUtFREVWIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L01BS0VERVYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyOWJhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9NQUtFREVWCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9iYXNoCisKK2Z1bmN0aW9uIG1ha2VkZXYgKCkgeworCisJZm9yIGRldiBpbiAwIDEgMiAzOyBkbworCQllY2hvICIvZGV2LyQxJGRldjogY2hhciA4MSAkWyAkMiArICRkZXYgXSIKKwkJcm0gLWYgL2Rldi8kMSRkZXYKKwkJbWtub2QgL2Rldi8kMSRkZXYgYyA4MSAkWyAkMiArICRkZXYgXQorCQljaG1vZCA2NjYgL2Rldi8kMSRkZXYKKwlkb25lCisKKwkjIHN5bWxpbmsgZm9yIGRlZmF1bHQgZGV2aWNlCisJcm0gLWYgL2Rldi8kMQorCWxuIC1zIC9kZXYvJHsxfTAgL2Rldi8kMQorfQorCisjIHNlZSBodHRwOi8vcm9hZHJ1bm5lci5zd2Fuc2VhLnVrLmxpbnV4Lm9yZy92NGxhcGkuc2h0bWwKKworZWNobyAiKioqIG5ldyBkZXZpY2UgbmFtZXMgKioqIgorbWFrZWRldiB2aWRlbyAwCittYWtlZGV2IHJhZGlvIDY0CittYWtlZGV2IHZ0eCAxOTIKK21ha2VkZXYgdmJpIDIyNAorCisjZWNobyAiKioqIG9sZCBkZXZpY2UgbmFtZXMgKGZvciBjb21wYXRpYmlsaXR5IG9ubHkpICoqKiIKKyNtYWtlZGV2IGJ0dHYgMAorI21ha2VkZXYgYnR0di1mbSA2NAorI21ha2VkZXYgYnR0di12YmkgMjI0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvTW9kcHJvYmUuY29uZiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Nb2Rwcm9iZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZjE0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvTW9kcHJvYmUuY29uZgpAQCAtMCwwICsxLDExIEBACisjIGkyYworYWxpYXMgY2hhci1tYWpvci04OQlpMmMtZGV2CitvcHRpb25zIGkyYy1jb3JlCWkyY19kZWJ1Zz0xCitvcHRpb25zIGkyYy1hbGdvLWJpdAliaXRfdGVzdD0xCisKKyMgYnR0dgorYWxpYXMgY2hhci1tYWpvci04MQl2aWRlb2RldgorYWxpYXMgY2hhci1tYWpvci04MS0wCWJ0dHYKK29wdGlvbnMJYnR0dgkJY2FyZD0yIHJhZGlvPTEKK29wdGlvbnMJdHVuZXIJCWRlYnVnPTEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L01vZHVsZXMuY29uZiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Nb2R1bGVzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzZjE1OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Nb2R1bGVzLmNvbmYKQEAgLTAsMCArMSwxNCBAQAorIyBGb3IgbW9kZXJuIGtlcm5lbHMgKDIuNiBvciBhYm92ZSksIHRoaXMgYmVsb25ncyBpbiAvZXRjL21vZHByb2JlLmNvbmYKKyMgRm9yIGZvciAyLjQga2VybmVscyBvciBlYXJsaWVyLCB0aGlzIGJlbG9uZ3MgaW4gL2V0Yy9tb2R1bGVzLmNvbmYuCisKKyMgaTJjCithbGlhcyBjaGFyLW1ham9yLTg5CWkyYy1kZXYKK29wdGlvbnMgaTJjLWNvcmUJaTJjX2RlYnVnPTEKK29wdGlvbnMgaTJjLWFsZ28tYml0CWJpdF90ZXN0PTEKKworIyBidHR2CithbGlhcyBjaGFyLW1ham9yLTgxCXZpZGVvZGV2CithbGlhcyBjaGFyLW1ham9yLTgxLTAJYnR0dgorb3B0aW9ucwlidHR2CQljYXJkPTIgcmFkaW89MQorb3B0aW9ucwl0dW5lcgkJZGVidWc9MQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUFJPQkxFTVMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUFJPQkxFTVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzMWU5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9QUk9CTEVNUwpAQCAtMCwwICsxLDYyIEBACistIFN0YXJ0IGNhcHR1cmluZyBieSBwcmVzc2luZyAiYyIgb3IgYnkgc2VsZWN0aW5nIGl0IHZpYSBhIG1lbnUhCisKKy0gU3RhcnQgY2FwdHVyaW5nIGJ5IHByZXNzaW5nICJjIiBvciBieSBzZWxlY3RpbmcgaXQgdmlhIGEgbWVudSEhIQorCistIFRoZSBtZW1vcnkgb2Ygc29tZSBTMyBjYXJkcyBpcyBub3QgcmVjb2duaXplZCByaWdodDoKKyAgCisgIEZpcnN0IG9mIGFsbCwgaWYgeW91IGFyZSBub3QgdXNpbmcgWEZyZWUtMy4yIG9yIG5ld2VyLCB1cGdyYWRlIEFUIExFQVNUIHRvCisgIFhGcmVlLTMuMkEhIFRoaXMgc29sdmVkIHRoZSBwcm9ibGVtIGZvciBtb3N0IHBlb3BsZS4KKworICBTdGFydCB1cCBYMTEgbGlrZSB0aGlzOiAiWEY4Nl9TMyAtcHJvYmVvbmx5IiBhbmQgd3JpdGUgZG93biB3aGVyZSB0aGUKKyAgbGluZWFyIGZyYW1lIGJ1ZmZlciBpcy4KKyAgSWYgaXQgaXMgZGlmZmVyZW50IHRvIHRoZSBhZGRyZXNzIGZvdW5kIGJ5IGJ0dHYgaW5zdGFsbCBidHR2IGxpa2UgdGhpczoKKyAgImluc21vZCBidHR2IHZpZG1lbT0weGZiMCIKKyAgaWYgdGhlIGxpbmVhciBmcmFtZSBidWZmZXIgaXMgYXQgMHhmYjAwMDAwMCAoaS5lLiBvbWl0IHRoZSBsYXN0IDUgemVyb3MhKQorCisgIFNvbWUgUzMgY2FyZHMgZXZlbiB0YWtlIHVwIDY0TUIgb2YgbWVtb3J5IGJ1dCBvbmx5IHJlcG9ydCAzMk1CIHRvIHRoZSBCSU9TLgorICBJZiB0aGlzIDY0TUIgYXJlYSBvdmVybGFwcyB0aGUgSU8gbWVtb3J5IG9mIHRoZSBCdDg0OCB5b3UgYWxzbyBoYXZlIHRvCisgIHJlbWFwIHRoaXMuIEUuZy46IGluc21vZCBidHR2IHZpZG1lbT0weGZiMCByZW1hcD0weGZhMAorCisgIElmIHRoZSB2aWRlbyBtZW1vcnkgaXMgZm91bmQgYXQgdGhlIHJpZ2h0IHBsYWNlIGFuZCB0aGVyZSBhcmUgbm8gYWRkcmVzcworICBjb25mbGljdHMgYnV0IHN0aWxsIG5vIHBpY3R1cmUgKG9yIHRoZSBjb21wdXRlciBldmVuIGNyYXNoZXMpLAorICB0cnkgZGlzYWJsaW5nIGZlYXR1cmVzIG9mIHlvdXIgUENJIGNoaXBzZXQgaW4gdGhlIEJJT1Mgc2V0dXAuCisKKyAgRnJhbmsgS2FwYWhua2UgPGZyYW5rQGthcGFobmtlLnByaW1hLnJ1aHIuZGU+IGFsc28gcmVwb3J0ZWQgdGhhdCBwcm9ibGVtcworICB3aXRoIGhpcyBTMyA4Njggd2VudCBhd2F5IHdoZW4gaGUgdXBncmFkZWQgdG8gWEZyZWUgMy4yLgorCisKKy0gSSBzdGlsbCBvbmx5IGdldCBhIGJsYWNrIHBpY3R1cmUgd2l0aCBteSBTMyBjYXJkIQorCisgIEV2ZW4gd2l0aCBYRnJlZS0zLjJBIHNvbWUgcGVvcGxlIGhhdmUgcHJvYmxlbXMgd2l0aCB0aGVpciBTMyBjYXJkcworICAobW9zdGx5IHdpdGggVHJpbyA2NCBidXQgYWxzbyB3aXRoIHNvbWUgb3RoZXJzKQorICBHZXQgdGhlIGZyZWUgZGVtbyB2ZXJzaW9uIG9mIEFjY2VsZXJhdGVkIFggZnJvbSB3d3cueGluc2lkZS5jb20gYW5kIHRyeQorICBidHR2IHdpdGggaXQuIGJ0dHYgc2VlbXMgdG8gd29yayB3aXRoIG1vc3QgUzMgY2FyZHMgd2l0aCBBY2NlbGVyYXRlZCBYLgorICAKKyAgU2luY2UgSSBkbyBub3Qga25vdyBtdWNoIChiZXR0ZXIgbWFrZSB0aGF0IGFsbW9zdCBub3RoaW5nKSBhYm91dCBWR0EgY2FyZAorICBwcm9ncmFtbWluZyBJIGRvIG5vdCBrbm93IHRoZSByZWFzb24gZm9yIHRoaXMuCisgIExvb2tzIGxpa2UgWEZyZWUgZG9lcyBzb21ldGhpbmcgZGlmZmVyZW50IHdoZW4gc2V0dGluZyB1cCB0aGUgdmlkZW8gbWVtb3J5PworICBNYXliZSBzb21lYm9keSBjYW4gZW5saWdodGVuIG1lPyAgCisgIFdvdWxkIGJlIG5pY2UgaWYgc29tZWJvZHkgY291bGQgZ2V0IHRoaXMgdG8gd29yayB3aXRoIFhGcmVlIHNpbmNlIAorICBBY2NlbGVyYXRlZCBYIGNvc3RzIG1vcmUgdGhhbiBzb21lIG9mIHRoZSBncmFiYmVyIGNhcmRzIC4uLiAKKyAKKyAgQmV0dGVyIGxpbmVhciBmcmFtZSBidWZmZXIgc3VwcG9ydCBmb3IgUzMgY2FyZHMgd2lsbCBwcm9iYWJseSBiZSBpbgorICBYRnJlZSA0LjAuCisgIAorLSBHcmFiYmluZyBpcyBub3Qgc3dpdGNoZWQgb2ZmIHdoZW4gY2hhbmdpbmcgY29uc29sZXMgd2l0aCBYRnJlZS4KKyAgVGhhdCdzIGJlY2F1c2UgWEZyZWUgYW5kIHNvbWUgQWNjZWxlcmF0ZWRYIHZlcnNpb25zIGRvIG5vdCBzZW5kIHVubWFwCisgIGV2ZW50cy4KKworLSBTb21lIHBvcHVwIHdpbmRvd3MgKGUuZy4gb2YgdGhlIHdpbmRvdyBtYW5hZ2VyKSBhcmUgbm90IHJlZnJlc2hlZC4KKyAgCisgIERpc2FibGUgYmFja2luZyBzdG9yZSBieSBzdGFydGluZyBYIHdpdGggdGhlIG9wdGlvbiAiLWJzIgorCistIFdoZW4gdXNpbmcgMzIgYnBwIGluIFhGcmVlIG9yIDI0KzhicHAgbW9kZSBpbiBBY2NlbFggMy4xIHRoZSBzeXN0ZW0KKyAgY2FuIHNvbWV0aW1lcyBsb2NrIHVwIGlmIHlvdSB1c2UgbW9yZSB0aGFuIDEgYnQ4NDggY2FyZCBhdCB0aGUgc2FtZSB0aW1lLgorICBZb3Ugd2lsbCBhbHdheXMgZ2V0IHBpeGVsIGVycm9ycyB3aGVuIGUuZy4gdXNpbmcgbW9yZSB0aGFuIDEgY2FyZCBpbiBmdWxsCisgIHNjcmVlbiBtb2RlLiBNYXliZSB3ZSBuZWVkIHNvbWV0aGluZyBmYXN0ZXIgdGhhbiB0aGUgUENJIGJ1cyAuLi4KKworCistIFNvbWUgUzMgY2FyZHMgYW5kIHRoZSBNYXRyb3ggTXlzdGlxdWUgd2lsbCBwcm9kdWNlIHBpeGVsIGVycm9ycyB3aXRoCisgIGZ1bGwgcmVzb2x1dGlvbiBpbiAzMi1iaXQgbW9kZS4KKworLSBTb21lIHZpZGVvIGNhcmRzIGhhdmUgcHJvYmxlbXMgd2l0aCBBY2NlbGVyYXRlZCBYIDQuMQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyZjRjOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKQEAgLTAsMCArMSw5MCBAQAorCitSZWxlYXNlIG5vdGVzIGZvciBidHR2Cis9PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSdsbCBuZWVkIGF0IGxlYXN0IHRoZXNlIGNvbmZpZyBvcHRpb25zIGZvciBidHR2OgorCUNPTkZJR19JMkM9bQorCUNPTkZJR19JMkNfQUxHT0JJVD1tCisJQ09ORklHX1ZJREVPX0RFVj1tCisKK1RoZSBsYXRlc3QgYnR0diB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9ieXRlc2V4Lm9yZy9idHR2LworCisKK01ha2UgYnR0diB3b3JrIHdpdGggeW91ciBjYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKdXN0IHRyeSAibW9kcHJvYmUgYnR0diIgYW5kIHNlZSBpZiB0aGF0IHdvcmtzLgorCitJZiBpdCBkb2Vzbid0IGJ0dHYgbGlrZWx5IGNvdWxkIG5vdCBhdXRvZGV0ZWN0IHlvdXIgY2FyZCBhbmQgbmVlZHMgc29tZQoraW5zbW9kIG9wdGlvbnMuICBUaGUgbW9zdCBpbXBvcnRhbnQgaW5zbW9kIG9wdGlvbiBmb3IgYnR0diBpcyAiY2FyZD1uIgordG8gc2VsZWN0IHRoZSBjb3JyZWN0IGNhcmQgdHlwZS4gIElmIHlvdSBnZXQgdmlkZW8gYnV0IG5vIHNvdW5kIHlvdSd2ZQordmVyeSBsaWtlbHkgc3BlY2lmaWVkIHRoZSB3cm9uZyAob3Igbm8pIGNhcmQgdHlwZS4gIEEgbGlzdCBvZiBzdXBwb3J0ZWQKK2NhcmRzIGlzIGluIENBUkRMSVNULmJ0dHYKKworSWYgYnR0diB0YWtlcyB2ZXJ5IGxvbmcgdG8gbG9hZCAoaGFwcGVucyBzb21ldGltZXMgd2l0aCB0aGUgY2hlYXAKK2NhcmRzIHdoaWNoIGhhdmUgbm8gdHVuZXIpLCB0cnkgYWRkaW5nIHRoaXMgdG8geW91ciBtb2R1bGVzLmNvbmY6CisJb3B0aW9ucyBpMmMtYWxnby1iaXQgYml0X3Rlc3Q9MQorCitGb3IgdGhlIFdpblRWL1BWUiB5b3UgbmVlZCBvbmUgZmlybXdhcmUgZmlsZSBmcm9tIHRoZSBkcml2ZXIgQ0Q6CitoY3dhbWMucmJmLiAgVGhlIGZpbGUgaXMgaW4gdGhlIHB2cjQ1eHh4LmV4ZSBhcmNoaXZlIChzZWxmLWV4dHJhY3RpbmcKK3ppcCBmaWxlLCB1bnppcCBjYW4gdW5wYWNrIGl0KS4gIFB1dCBpdCBpbnRvIHRoZSAvZXRjL3B2ciBkaXJlY3Rvcnkgb3IKK3VzZSB0aGUgZmlybV9hbHRlcmE9PHBhdGg+IGluc21vZCBvcHRpb24gdG8gcG9pbnQgdGhlIGRyaXZlciB0byB0aGUKK2xvY2F0aW9uIG9mIHRoZSBmaWxlLgorCitJZiB5b3VyIGNhcmQgaXNuJ3QgbGlzdGVkIGluIENBUkRMSVNULmJ0dHYgb3IgaWYgeW91IGhhdmUgdHJvdWJsZSBtYWtpbmcKK2F1ZGlvIHdvcmssIHlvdSBzaG91bGQgcmVhZCB0aGUgU291bmQtRkFRLgorCisKK0F1dG9kZXRlY3RpbmcgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworYnR0diB1c2VzIHRoZSBQQ0kgU3Vic3lzdGVtIElEIHRvIGF1dG9kZXRlY3QgdGhlIGNhcmQgdHlwZS4gIGxzcGNpIGxpc3RzCit0aGUgU3Vic3lzdGVtIElEIGluIHRoZSBzZWNvbmQgbGluZSwgbG9va3MgbGlrZSB0aGlzOgorCiswMDowYS4wIE11bHRpbWVkaWEgdmlkZW8gY29udHJvbGxlcjogQnJvb2t0cmVlIENvcnBvcmF0aW9uIEJ0ODc4IChyZXYgMDIpCisgICAgICAgIFN1YnN5c3RlbTogSGF1cHBhdWdlIGNvbXB1dGVyIHdvcmtzIEluYy4gV2luVFYvR08KKyAgICAgICAgRmxhZ3M6IGJ1cyBtYXN0ZXIsIG1lZGl1bSBkZXZzZWwsIGxhdGVuY3kgMzIsIElSUSA1CisgICAgICAgIE1lbW9yeSBhdCBlMjAwMDAwMCAoMzItYml0LCBwcmVmZXRjaGFibGUpIFtzaXplPTRLXQorCitvbmx5IGJ0ODc4LWJhc2VkIGNhcmRzIGNhbiBoYXZlIGEgc3Vic3lzdGVtIElEICh3aGljaCBkb2VzIG5vdCBtZWFuCit0aGF0IGV2ZXJ5IGNhcmQgcmVhbGx5IGhhcyBvbmUpLiAgYnQ4NDggY2FyZHMgY2FuJ3QgaGF2ZSBhIFN1YnN5c3RlbQorSUQgYW5kIHRoZXJlZm9yZSBjYW4ndCBiZSBhdXRvZGV0ZWN0ZWQuICBUaGVyZSBpcyBhIGxpc3Qgd2l0aCB0aGUgSUQncworaW4gYnR0di1jYXJkcy5jIChpbiBjYXNlIHlvdSBhcmUgaW50cmVzdGVkIG9yIHdhbnQgdG8gbWFpbCBwYXRjaGVzCit3aXRoIHVwZGF0ZXMpLgorCisKK1N0aWxsIGRvZXNuJ3Qgd29yaz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSSBkbyBOT1QgaGF2ZSBhIGxhYiB3aXRoIDMwKyBkaWZmZXJlbnQgZ3JhYmJlciBib2FyZHMgYW5kIGEKK1BBTC9OVFNDL1NFQ0FNIHRlc3Qgc2lnbmFsIGdlbmVyYXRvciBhdCBob21lLCBzbyBJIG9mdGVuIGNhbid0CityZXByb2R1Y2UgeW91ciBwcm9ibGVtcy4gIFRoaXMgbWFrZXMgZGVidWdnaW5nIHZlcnkgZGlmZmljdWx0IGZvciBtZS4KK0lmIHlvdSBoYXZlIHNvbWUga25vd2xlZGdlIGFuZCBzcGFyZSB0aW1lLCBwbGVhc2UgdHJ5IHRvIGZpeCB0aGlzCit5b3Vyc2VsZiAocGF0Y2hlcyB2ZXJ5IHdlbGNvbWUgb2YgY291cnNlLi4uKSAgWW91IGtub3c6IFRoZSBsaW51eAorc2xvZ2FuIGlzICJEbyBpdCB5b3Vyc2VsZiIuCisKK1RoZXJlIGlzIGEgbWFpbGluZyBsaXN0OiB2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20uCitodHRwczovL2xpc3RtYW4ucmVkaGF0LmNvbS9tYWlsbWFuL2xpc3RpbmZvL3ZpZGVvNGxpbnV4LWxpc3QKKworSWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIHNvbWUgc3BlY2lmaWMgVFYgY2FyZCwgdHJ5IHRvIGFzayB0aGVyZQoraW5zdGVhZCBvZiBtYWlsaW5nIG1lIGRpcmVjdGx5LiAgVGhlIGNoYW5jZSB0aGF0IHNvbWVvbmUgd2l0aCB0aGUKK3NhbWUgY2FyZCBsaXN0ZW5zIHRoZXJlIGlzIG11Y2ggaGlnaGVyLi4uCisKK0ZvciBwcm9ibGVtcyB3aXRoIHNvdW5kOiAgVGhlcmUgYXJlIGFsb3Qgb2YgZGlmZmVyZW50IHN5c3RlbXMgdXNlZAorZm9yIFRWIHNvdW5kIGFsbCBvdmVyIHRoZSB3b3JsZC4gIEFuZCB0aGVyZSBhcmUgYWxzbyBkaWZmZXJlbnQgY2hpcHMKK3doaWNoIGRlY29kZSB0aGUgYXVkaW8gc2lnbmFsLiAgUmVwb3J0cyBhYm91dCBzb3VuZCBwcm9ibGVtcyAoInN0ZXJlbworZG9lcydudCB3b3JrIikgYXJlIHByZXR0eSB1c2VsZXNzIHVubGVzcyB5b3UgaW5jbHVkZSBzb21lIGRldGFpbHMKK2Fib3V0IHlvdXIgaGFyZHdhcmUgYW5kIHRoZSBUViBzb3VuZCBzY2hlbWUgdXNlZCBpbiB5b3VyIGNvdW50cnkgKG9yCithdCBsZWFzdCB0aGUgY291bnRyeSB5b3UgYXJlIGxpdmluZyBpbikuCisKKworRmluYWxseTogSWYgeW91IG1haWwgc29tZSBwYXRjaGVzIGZvciBidHR2IGFyb3VuZCB0aGUgd29ybGQgKHRvCitsaW51eC1rZXJuZWwvQWxhbi9MaW51cy8uLi4pLCBwbGVhc2UgQ2M6IG1lLgorCisKK0hhdmUgZnVuIHdpdGggYnR0diwKKworICBHZXJkCisKKy0tCitHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLldJTlZJRVcgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLldJTlZJRVcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxY2YyOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUuV0lOVklFVwpAQCAtMCwwICsxLDMzIEBACisKK1N1cHBvcnQgZm9yIHRoZSBMZWFkdGVrIFdpblZpZXcgNjAxIFRWL0ZNIGJ5IEpvbiBUb21icyA8am9uQGd0ZS5lc2kudXMuZXM+CisKK1RoaXMgY2FyZCBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgYWxsIHRoZSByZXN0IChCdDQ4NEEsIFBoaWxpcHMgdHVuZXIpLAordGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IHRoZXkgaGF2ZSBhdHRhY2hlZCBhIHByb2dyYW1tYWJsZSBhdHRlbnVhdG9yIHRvIDMKK0dQSU8gbGluZXMgaW4gb3JkZXIgdG8gZ2l2ZSBzb21lIHZvbHVtZSBjb250cm9sLiBUaGV5IGhhdmUgYWxzbyBzdHVjayBhbgoraW5mcmEtcmVkIHJlbW90ZSBjb250cm9sIGRlY29kZWQgb24gdGhlIGJvYXJkLCBJIHdpbGwgYWRkIHN1cHBvcnQgZm9yIHRoaXMKK3doZW4gSSBnZXQgdGltZSAoaXQgc2ltcGxlIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgZm9yIGVhY2gga2V5IHByZXNzLCB3aXRoCit0aGUga2V5IGNvZGUgaXMgcGxhY2VkIGluIHRoZSBHUElPIHBvcnQpLgorCitJIGRvbid0IHlldCBoYXZlIGFueSBhcHBsaWNhdGlvbiB0byB0ZXN0IHRoZSByYWRpbyBzdXBwb3J0LiBUaGUgdHVuZXIKK2ZyZXF1ZW5jeSBzZXR0aW5nIHNob3VsZCB3b3JrIGJ1dCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBhdWRpbyBtdWx0aXBsZXhlcgoraXMgd3JvbmcuIElmIGl0IGRvZXNuJ3Qgd29yaywgc2VuZCBtZSBlbWFpbC4KKworCistIE5vIFRoYW5rcyB0byBMZWFkdGVrIHRoZXkgcmVmdXNlZCB0byBhbnN3ZXIgYW55IHF1ZXN0aW9ucyBhYm91dCB0aGVpcgoraGFyZHdhcmUuIFRoZSBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgdmlzdWFsIGluc3BlY3Rpb24gb2YgdGhlIGNhcmQuIElmIHlvdQordXNlIHRoaXMgZHJpdmVyLCBzZW5kIGFuIGVtYWlsIGluc3VsdCB0byB0aGVtLCBhbmQgdGVsbCB0aGVtIHlvdSB3b24ndAorY29udGludWUgYnV5aW5nIHRoZWlyIGhhcmR3YXJlIHVubGVzcyB0aGV5IHN1cHBvcnQgTGludXguCisKKy0gTGl0dGxlIHRoYW5rcyB0byBQcmluY2V0b24gVGVjaG5vbG9neSBDb3JwIChodHRwOi8vd3d3LnByaW5jZXRvbi5jb20udHcpCit3aG8gbWFrZSB0aGUgYXVkaW8gYXR0ZW51YXRvci4gVGhlaXIgcHVibGljbHkgYXZhaWxhYmxlIGRhdGEtc2hlZXQgYXZhaWxhYmxlCitvbiB0aGVpciB3ZWIgc2l0ZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGNoaXAgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24hIEhpZGRlbgorb24gdGhlaXIgc2VydmVyIGFyZSB0aGUgZnVsbCBkYXRhLXNoZWV0cywgYnV0IGRvbid0IGFzayBob3cgSSBmb3VuZCBpdC4KKworVG8gdXNlIHRoZSBkcml2ZXIgSSB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zLCB0aGUgdHVuZXIgYW5kIHBsbCBzZXR0aW5ncyBtaWdodAorYmUgZGlmZmVyZW50IGluIHlvdXIgY291bnRyeQorCitpbnNtb2QgdmlkZW9kZXYKK2luc21vZCBpMmMgc2Nhbj0xIGkyY19kZWJ1Zz0wIHZlcmJvc2U9MAoraW5zbW9kIHR1bmVyIHR5cGU9MSBkZWJ1Zz0wCitpbnNtb2QgYnR0diAgcGxsPTEgcmFkaW89MSBjYXJkPTE3CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUuZnJlZXplIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5mcmVlemUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmOGQ0MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUuZnJlZXplCkBAIC0wLDAgKzEsNzQgQEAKKworSWYgdGhlIGJveCBmcmVlemVzIGhhcmQgd2l0aCBidHR2IC4uLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJdCBtaWdodCBiZSBhIGJ0dHYgZHJpdmVyIGJ1Zy4gIEl0IGFsc28gbWlnaHQgYmUgYmFkIGhhcmR3YXJlLiAgSXQgYWxzbworbWlnaHQgYmUgc29tZXRoaW5nIGVsc2UgLi4uCisKK0p1c3QgbWFpbGluZyBtZSAiYnR0diBmcmVlemVzIiBpc24ndCBnb2luZyB0byBoZWxwIG11Y2guICBUaGlzIFJFQURNRQoraGFzIGEgZmV3IGhpbnRzIGhvdyB5b3UgY2FuIGhlbHAgdG8gcGluIGRvd24gdGhlIHByb2JsZW0uCisKKworYnR0diBidWdzCistLS0tLS0tLS0KKworSWYgc29tZSB2ZXJzaW9uIHdvcmtzIGFuZCBhbm90aGVyIGRvZXNuJ3QgaXQgaXMgbGlrZWx5IHRvIGJlIGEgZHJpdmVyCitidWcuICBJdCBpcyB2ZXJ5IGhlbHBmdWwgaWYgeW91IGNhbiB0ZWxsIHdoZXJlIGV4YWN0bHkgaXQgYnJva2UKKyhpLmUuIHRoZSBsYXN0IHdvcmtpbmcgYW5kIHRoZSBmaXJzdCBicm9rZW4gdmVyc2lvbikuCisKK1dpdGggYSBoYXJkIGZyZWV6ZSB5b3UgcHJvYmFibHkgZG9lc24ndCBmaW5kIGFueXRoaW5nIGluIHRoZSBsb2dmaWxlcy4KK1RoZSBvbmx5IHdheSB0byBjYXB0dXJlIGFueSBrZXJuZWwgbWVzc2FnZXMgaXMgdG8gaG9vayB1cCBhIHNlcmlhbAorY29uc29sZSBhbmQgbGV0IHNvbWUgdGVybWluYWwgYXBwbGljYXRpb24gbG9nIHRoZSBtZXNzYWdlcy4gIC9tZSB1c2VzCitzY3JlZW4uICBTZWUgRG9jdW1lbnRhdGlvbi9zZXJpYWwtY29uc29sZS50eHQgZm9yIGRldGFpbHMgb24gc2V0dGluZwordXAgYSBzZXJpYWwgY29uc29sZS4KKworUmVhZCBEb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQgdG8gbGVhcm4gaG93IHRvIGdldCBhbnkgdXNlZnVsCitpbmZvcm1hdGlvbiBvdXQgb2YgYSByZWdpc3RlcitzdGFjayBkdW1wIHByaW50ZWQgYnkgdGhlIGtlcm5lbCBvbgorcHJvdGVjdGlvbiBmYXVsdHMgKHNvLWNhbGxlZCAia2VybmVsIG9vcHMiKS4KKworSWYgeW91IHJ1biBpbnRvIHNvbWUga2luZCBvZiBkZWFkbG9jaywgeW91IGNhbiB0cnkgdG8gZHVtcCBhIGNhbGwgdHJhY2UKK2ZvciBlYWNoIHByb2Nlc3MgdXNpbmcgc3lzcnEtdCAoc2VlIERvY3VtZW50YXRpb24vc3lzcnEudHh0KS4gIGtzeW1vb3BzCit3aWxsIHRyYW5zbGF0ZSB0aGVzZSBkdW1wcyBpbnRvIGtlcm5lbCBzeW1ib2xzIHRvby4gIFRoaXMgd2F5IGl0IGlzCitwb3NzaWJsZSB0byBmaWd1cmUgd2hlcmUgKmV4YWN0bHkqIHNvbWUgcHJvY2VzcyBpbiAiRCIgc3RhdGUgaXMgc3R1Y2suCisKK0kndmUgc2VlbiByZXBvcnRzIHRoYXQgYnR0diAwLjcueCBjcmFzaGVzIHdoZXJlYXMgMC44Lnggd29ya3Mgcm9jayBzb2xpZAorZm9yIHNvbWUgcGVvcGxlLiAgVGh1cyBwcm9iYWJseSBhIHNtYWxsIGJ1Z2xldCBsZWZ0IHNvbWV3aGVyZSBpbiBidHR2CiswLjcueC4gIEkgaGF2ZSBubyBpZGVhIHdoZXJlIGV4YWN0bHksIGl0IHdvcmtzIHN0YWJsZSBmb3IgbWUgYW5kIGFsb3Qgb2YKK290aGVyIHBlb3BsZS4gIEJ1dCBpbiBjYXNlIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhlIDAuNy54IHZlcnNpb25zIHlvdQorY2FuIGdpdmUgMC44LnggYSB0cnkgLi4uCisKKworaGFyZHdhcmUgYnVncworLS0tLS0tLS0tLS0tLQorCitTb21lIGhhcmR3YXJlIGNhbid0IGRlYWwgd2l0aCBQQ0ktUENJIHRyYW5zZmVycyAoaS5lLiBncmFiYmVyID0+IHZnYSkuCitTb21ldGltZXMgcHJvYmxlbXMgc2hvdyB1cCB3aXRoIGJ0dHYganVzdCBiZWNhdXNlIG9mIHRoZSBoaWdoIGxvYWQgb24KK3RoZSBQQ0kgYnVzLiBUaGUgYnQ4NDgvODc4IGNoaXBzIGhhdmUgYSBmZXcgd29ya2Fyb3VuZHMgZm9yIGtub3duCitpbmNvbXBhdGliaWxpdGllcywgc2VlIFJFQURNRS5xdWlya3MuCisKK1NvbWUgZm9sa3MgcmVwb3J0IHRoYXQgaW5jcmVhc2luZyB0aGUgcGNpIGxhdGVuY3kgaGVscHMgdG9vLAorYWx0aHJvdWdodCBJJ20gbm90IHN1cmUgd2hlbmV2ZXIgdGhpcyByZWFsbHkgZml4ZXMgdGhlIHByb2JsZW1zIG9yCitvbmx5IG1ha2VzIGl0IGxlc3MgbGlrZWx5IHRvIGhhcHBlbi4gIEJvdGggYnR0diBhbmQgYnRhdWRpbyBoYXZlIGEKK2luc21vZCBvcHRpb24gdG8gc2V0IHRoZSBQQ0kgbGF0ZW5jeSBvZiB0aGUgZGV2aWNlLgorCitTb21lIG1haW5ib2FyZCBoYXZlIHByb2JsZW1zIHRvIGRlYWwgY29ycmVjdGx5IHdpdGggbXVsdGlwbGUgZGV2aWNlcworZG9pbmcgRE1BIGF0IHRoZSBzYW1lIHRpbWUuICBidHR2ICsgaWRlIHNlZW1zIHRvIGNhdXNlIHRoaXMgc29tZXRpbWVzLAoraWYgdGhpcyBpcyB0aGUgY2FzZSB5b3UgbGlrZWx5IHNlZSBmcmVlemVzIG9ubHkgd2l0aCB2aWRlbyBhbmQgaGFyZCBkaXNrCithY2Nlc3MgYXQgdGhlIHNhbWUgdGltZS4gIFVwZGF0aW5nIHRoZSBJREUgZHJpdmVyIHRvIGdldCB0aGUgbGF0ZXN0IGFuZAorZ3JlYXRlc3Qgd29ya2Fyb3VuZHMgZm9yIGhhcmR3YXJlIGJ1Z3MgbWlnaHQgZml4IHRoZXNlIHByb2JsZW1zLgorCisKK290aGVyCistLS0tLQorCitJZiB5b3UgdXNlIHNvbWUgYmluYXJ5LW9ubHkgeXVuayAobGlrZSBudmlkaWEgbW9kdWxlKSB0cnkgdG8gcmVwcm9kdWNlCit0aGUgcHJvYmxlbSB3aXRob3V0LgorCitJUlEgc2hhcmluZyBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyBpbiBzb21lIGNhc2VzLiAgSXQgd29ya3MganVzdAorZmluZSBpbiB0aGVvcnkgYW5kIG1hbnkgY29uZmlndXJhdGlvbnMuICBOZXZlcmxlc3MgaXQgbWlnaHQgYmUgd29ydGggYQordHJ5IHRvIHNodWZmbGUgYXJvdW5kIHRoZSBQQ0kgY2FyZHMgdG8gZ2l2ZSBidHR2IGFub3RoZXIgSVJRIG9yIG1ha2UKK2l0IHNoYXJlIHRoZSBJUlEgd2l0aCBzb21lIG90aGVyIHBpZWNlIG9mIGhhcmR3YXJlLiAgSVJRIHNoYXJpbmcgd2l0aAorVkdBIGNhcmRzIHNlZW1zIHRvIGNhdXNlIHRyb3VibGUgc29tZXRpbWVzLiAgSSd2ZSBhbHNvIHNlZW4gZnVubnkKK2VmZmVjdHMgd2l0aCBidHR2IHNoYXJpbmcgdGhlIElSUSB3aXRoIHRoZSBBQ1BJIGJyaWRnZSAoYW5kCithcGNpLWVuYWJsZWQga2VybmVsKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5xdWlya3MgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLnF1aXJrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGVkYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5xdWlya3MKQEAgLTAsMCArMSw4MyBAQAorCitCZWxvdyBpcyB3aGF0IHRoZSBidDg3OCBkYXRhIGJvb2sgc2F5cyBhYm91dCB0aGUgUENJIGJ1ZyBjb21wYXRpYmlsaXR5Cittb2RlcyBvZiB0aGUgYnQ4NzggY2hpcC4KKworVGhlIHRyaXRvbjEgaW5zbW9kIG9wdGlvbiBzZXRzIHRoZSBFTl9UQkZYIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3Rlci4KK1RoZSB2c2Z4IGluc21vZCBvcHRpb24gZG9lcyB0aGUgc2FtZSBmb3IgRU5fVlNGWCBiaXQuICBJZiB5b3UgaGF2ZQorc3RhYmlsaXR5IHByb2JsZW1zIHlvdSBjYW4gdHJ5IGlmIG9uZSBvZiB0aGVzZSBvcHRpb25zIG1ha2VzIHlvdXIgYm94Cit3b3JrIHNvbGlkLgorCitkcml2ZXJzL3BjaS9xdWlya3MuYyBrbm93cyBhYm91dCB0aGVzZSBpc3N1ZXMsIHRoaXMgd2F5IHRoZXNlIGJpdHMgYXJlCitlbmFibGVkIGF1dG9tYWdpY2FsbHkgZm9yIGtub3duLWJ1Z2d5IGNoaXBzZXRzIChsb29rIGF0IHRoZSBrZXJuZWwKK21lc3NhZ2VzLCBidHR2IHRlbGxzIHlvdSkuCisKK0hUSCwKKworICBHZXJkCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY3V0IGhlcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm9ybWFsIFBDSSBNb2RlCistLS0tLS0tLS0tLS0tLS0KKworVGhlIFBDSSBSRVEgc2lnbmFsIGlzIHRoZSBsb2dpY2FsLW9yIG9mIHRoZSBpbmNvbWluZyBmdW5jdGlvbiByZXF1ZXN0cy4KK1RoZSBpbnRlci1uYWwgR05UWzA6MV0gc2lnbmFscyBhcmUgZ2F0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCBHTlQgYW5kCitkZW11bHRpcGxleGVkIGJ5IHRoZSBhdWRpbyByZXF1ZXN0IHNpZ25hbC4gVGh1cyB0aGUgYXJiaXRlciBkZWZhdWx0cyB0bwordGhlIHZpZGVvIGZ1bmN0aW9uIGF0IHBvd2VyLXVwIGFuZCBwYXJrcyB0aGVyZSBkdXJpbmcgbm8gcmVxdWVzdHMgZm9yCitidXMgYWNjZXNzLiBUaGlzIGlzIGRlc2lyYWJsZSBzaW5jZSB0aGUgdmlkZW8gd2lsbCByZXF1ZXN0IHRoZSBidXMgbW9yZQorb2Z0ZW4uIEhvd2V2ZXIsIHRoZSBhdWRpbyB3aWxsIGhhdmUgaGlnaGVzdCBidXMgYWNjZXNzIHByaW9yaXR5LiBUaHVzCit0aGUgYXVkaW8gd2lsbCBoYXZlIGZpcnN0IGFjY2VzcyB0byB0aGUgYnVzIGV2ZW4gd2hlbiBpc3N1aW5nIGEgcmVxdWVzdAorYWZ0ZXIgdGhlIHZpZGVvIHJlcXVlc3QgYnV0IGJlZm9yZSB0aGUgUENJIGV4dGVybmFsIGFyYml0ZXIgaGFzIGdyYW50ZWQKK2FjY2VzcyB0byB0aGUgQnQ4NzkuIE5laXRoZXIgZnVuY3Rpb24gY2FuIHByZWVtcHQgdGhlIG90aGVyIG9uY2Ugb24gdGhlCitidXMuIFRoZSBkdXJhdGlvbiB0byBlbXB0eSB0aGUgZW50aXJlIHZpZGVvIFBDSSBGSUZPIG9udG8gdGhlIFBDSSBidXMgaXMKK3Zlcnkgc2hvcnQgY29tcGFyZWQgdG8gdGhlIGJ1cyBhY2Nlc3MgbGF0ZW5jeSB0aGUgYXVkaW8gUENJIEZJRk8gY2FuCit0b2xlcmF0ZS4KKworCis0MzBGWCBDb21wYXRpYmlsaXR5IE1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHVzaW5nIHRoZSA0MzBGWCBQQ0ksIHRoZSBmb2xsb3dpbmcgcnVsZXMgd2lsbCBlbnN1cmUKK2NvbXBhdGliaWxpdHk6IAorCisgKDEpIERlYXNzZXJ0IFJFUSBhdCB0aGUgc2FtZSB0aW1lIGFzIGFzc2VydGluZyBGUkFNRS4gCisgKDIpIERvIG5vdCByZWFzc2VydCBSRVEgdG8gcmVxdWVzdCBhbm90aGVyIGJ1cyB0cmFuc2FjdGlvbiB1bnRpbCBhZnRlcgorICAgICBmaW5pc2gtaW5nIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4KKworU2luY2UgdGhlIGluZGl2aWR1YWwgYnVzIG1hc3RlcnMgZG8gbm90IGhhdmUgZGlyZWN0IGNvbnRyb2wgb2YgUkVRLCBhCitzaW1wbGUgbG9naWNhbC1vciBvZiB2aWRlbyBhbmQgYXVkaW8gcmVxdWVzdHMgd291bGQgdmlvbGF0ZSB0aGUgcnVsZXMuCitUaHVzLCBib3RoIHRoZSBhcmJpdGVyIGFuZCB0aGUgaW5pdGlhdG9yIGNvbnRhaW4gNDMwRlggY29tcGF0aWJpbGl0eQorbW9kZSBsb2dpYy4gVG8gZW5hYmxlIDQzMEZYIG1vZGUsIHNldCB0aGUgRU5fVEJGWCBiaXQgYXMgaW5kaWNhdGVkIGluCitEZXZpY2UgQ29udHJvbCBSZWdpc3RlciBvbiBwYWdlIDEwNC4KKworV2hlbiBFTl9UQkZYIGlzIGVuYWJsZWQsIHRoZSBhcmJpdGVyIGVuc3VyZXMgdGhhdCB0aGUgdHdvIGNvbXBhdGliaWxpdHkKK3J1bGVzIGFyZSBzYXRpc2ZpZWQuIEJlZm9yZSBHTlQgaXMgYXNzZXJ0ZWQgYnkgdGhlIFBDSSBhcmJpdGVyLCB0aGlzCitpbnRlcm5hbCBhcmJpdGVyIG1heSBzdGlsbCBsb2dpY2FsLW9yIHRoZSB0d28gcmVxdWVzdHMuIEhvd2V2ZXIsIG9uY2UKK3RoZSBHTlQgaXMgaXNzdWVkLCB0aGlzIGFyYml0ZXIgbXVzdCBsb2NrIGluIGl0cyBkZWNpc2lvbiBhbmQgbm93IHJvdXRlCitvbmx5IHRoZSBncmFudGVkIHJlcXVlc3QgdG8gdGhlIFJFUSBwaW4uIFRoZSBhcmJpdGVyIGRlY2lzaW9uIGxvY2sKK2hhcHBlbnMgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgRlJBTUUgYmVjYXVzZSBpdCBkb2VzIG5vdCBrbm93IHdoZW4KK0ZSQU1FIHdpbGwgYmUgYXNzZXJ0ZWQgKHR5cGljYWxseSAtIGVhY2ggaW5pdGlhdG9yIHdpbGwgYXNzZXJ0IEZSQU1FIG9uCit0aGUgY3ljbGUgZm9sbG93aW5nIEdOVCkuIFdoZW4gRlJBTUUgaXMgYXNzZXJ0ZWQsIGl0IGlzIHRoZSBpbml0aWF0b3IgcworcmVzcG9uc2liaWxpdHkgdG8gcmVtb3ZlIGl0cyByZXF1ZXN0IGF0IHRoZSBzYW1lIHRpbWUuIEl0IGlzIHRoZQorYXJiaXRlcnMgcmVzcG9uc2liaWxpdHkgdG8gYWxsb3cgdGhpcyByZXF1ZXN0IHRvIGZsb3cgdGhyb3VnaCB0byBSRVEgYW5kCitub3QgYWxsb3cgdGhlIG90aGVyIHJlcXVlc3QgdG8gaG9sZCBSRVEgYXNzZXJ0ZWQuIFRoZSBkZWNpc2lvbiBsb2NrIG1heQorYmUgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbjogZm9yIGV4YW1wbGUsIHdoZW4gdGhlIGJ1cyBpcworaWRsZSAoRlJBTUUgYW5kIElSRFkpLiBUaGUgYXJiaXRlciBkZWNpc2lvbiBtYXkgdGhlbiBjb250aW51ZQorYXN5bmNocm9ub3VzbHkgdW50aWwgR05UIGlzIGFnYWluIGFzc2VydGVkLgorCisKK0ludGVyZmFjaW5nIHdpdGggTm9uLVBDSSAyLjEgQ29tcGxpYW50IENvcmUgTG9naWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBzbWFsbCBwZXJjZW50YWdlIG9mIGNvcmUgbG9naWMgZGV2aWNlcyBtYXkgc3RhcnQgYSBidXMgdHJhbnNhY3Rpb24KK2R1cmluZyB0aGUgc2FtZSBjeWNsZSB0aGF0IEdOVCBpcyBkZS1hc3NlcnRlZC4gVGhpcyBpcyBub24gUENJIDIuMQorY29tcGxpYW50LiBUbyBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aGVuIHVzaW5nIFBDcyB3aXRoIHRoZXNlIFBDSQorY29udHJvbGxlcnMsIHRoZSBFTl9WU0ZYIGJpdCBtdXN0IGJlIGVuYWJsZWQgKHJlZmVyIHRvIERldmljZSBDb250cm9sCitSZWdpc3RlciBvbiBwYWdlIDEwNCkuIFdoZW4gaW4gdGhpcyBtb2RlLCB0aGUgYXJiaXRlciBkb2VzIG5vdCBwYXNzIEdOVAordG8gdGhlIGludGVybmFsIGZ1bmN0aW9ucyB1bmxlc3MgUkVRIGlzIGFzc2VydGVkLiBUaGlzIHByZXZlbnRzIGEgYnVzCit0cmFuc2FjdGlvbiBmcm9tIHN0YXJ0aW5nIHRoZSBzYW1lIGN5Y2xlIGFzIEdOVCBpcyBkZS1hc3NlcnRlZC4gVGhpcworYWxzbyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIG5vdCBiZWluZyBhYmxlIHRvIHRha2UgYWR2YW50YWdlIG9mIGJ1cworcGFya2luZywgdGh1cyBsb3dlcmluZyBhcmJpdHJhdGlvbiBwZXJmb3JtYW5jZS4gVGhlIEJ0ODc5IGRyaXZlcnMgbXVzdAorcXVlcnkgZm9yIHRoZXNlIG5vbi1jb21wbGlhbnQgZGV2aWNlcywgYW5kIHNldCB0aGUgRU5fVlNGWCBiaXQgb25seSBpZgorcmVxdWlyZWQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Tb3VuZC1GQVEgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU291bmQtRkFRCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzljMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU291bmQtRkFRCkBAIC0wLDAgKzEsMTQ4IEBACisKK2J0dHYgYW5kIHNvdW5kIG1pbmkgaG93dG8KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIGFsb3Qgb2YgZGlmZmVyZW50IGJ0ODQ4Lzg0OS84NzgvODc5IGJhc2VkIGJvYXJkcyBhdmFpbGFibGUuCitNYWtpbmcgdmlkZW8gd29yayBvZnRlbiBpcyBub3QgYSBiaWcgZGVhbCwgYmVjYXVzZSB0aGlzIGlzIGhhbmRsZWQKK2NvbXBsZXRlbHkgYnkgdGhlIGJ0OHh4IGNoaXAsIHdoaWNoIGlzIGNvbW1vbiBvbiBhbGwgYm9hcmRzLiAgQnV0Citzb3VuZCBpcyBoYW5kbGVkIGluIHNsaWdodGx5IGRpZmZlcmVudCB3YXlzIG9uIGVhY2ggYm9hcmQuCisKK1RvIGhhbmRsZSB0aGUgZ3JhYmJlciBib2FyZHMgY29ycmVjdGx5LCB0aGVyZSBpcyBhIGFycmF5IHR2Y2FyZHNbXSBpbgorYnR0di1jYXJkcy5jLCB3aGljaCBob2xkcyB0aGUgaW5mb3JtYXRpb25zIHJlcXVpcmVkIGZvciBlYWNoIGJvYXJkLgorU291bmQgd2lsbCB3b3JrIG9ubHksIGlmIHRoZSBjb3JyZWN0IGVudHJ5IGlzIHVzZWQgKGZvciB2aWRlbyBpdCBvZnRlbgorbWFrZXMgbm8gZGlmZmVyZW5jZSkuICBUaGUgYnR0diBkcml2ZXIgcHJpbnRzIGEgbGluZSB0byB0aGUga2VybmVsCitsb2csIHRlbGxpbmcgd2hpY2ggY2FyZCB0eXBlIGlzIHVzZWQuICBMaWtlIHRoaXMgb25lOgorCisJYnR0djA6IG1vZGVsOiBCVDg0OChIYXVwcGF1Z2Ugb2xkKSBbYXV0b2RldGVjdGVkXQorCitZb3Ugc2hvdWxkIHZlcmlmeSB0aGlzIGlzIGNvcnJlY3QuICBJZiBpdCBpc24ndCwgeW91IGhhdmUgdG8gcGFzcyB0aGUKK2NvcnJlY3QgYm9hcmQgdHlwZSBhcyBpbnNtb2QgYXJndW1lbnQsICJpbnNtb2QgYnR0diBjYXJkPTIiIGZvcgorZXhhbXBsZS4gIFRoZSBmaWxlIENBUkRMSVNUIGhhcyBhIGxpc3Qgb2YgdmFsaWQgYXJndW1lbnRzIGZvciBjYXJkLgorSWYgeW91ciBjYXJkIGlzbid0IGxpc3RlZCB0aGVyZSwgeW91IG1pZ2h0IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IKK25ldyBlbnRyaWVzIHdoaWNoIGFyZSBub3QgbGlzdGVkIHlldC4gIElmIHRoZXJlIGlzbid0IG9uZSBmb3IgeW91cgorY2FyZCwgeW91IGNhbiBjaGVjayBpZiBvbmUgb2YgdGhlIGV4aXN0aW5nIGVudHJpZXMgZG9lcyB3b3JrIGZvciB5b3UKKyhqdXN0IHRyaWFsIGFuZCBlcnJvci4uLikuCisKK1NvbWUgYm9hcmRzIGhhdmUgYW4gZXh0cmEgcHJvY2Vzc29yIGZvciBzb3VuZCB0byBkbyBzdGVyZW8gZGVjb2RpbmcKK2FuZCBvdGhlciBuaWNlIGZlYXR1cmVzLiAgVGhlIG1zcDM0eHggY2hpcHMgYXJlIHVzZWQgYnkgSGF1cHBhdWdlIGZvcgorZXhhbXBsZS4gIElmIHlvdXIgYm9hcmQgaGFzIG9uZSwgeW91IG1pZ2h0IGhhdmUgdG8gbG9hZCBhIGhlbHBlcgorbW9kdWxlIGxpa2UgbXNwMzQwMC5vIHRvIG1ha2Ugc291bmQgd29yay4gIElmIHRoZXJlIGlzbid0IG9uZSBmb3IgdGhlCitjaGlwIHVzZWQgb24geW91ciBib2FyZDogIEJhZCBsdWNrLiAgU3RhcnQgd3JpdGluZyBhIG5ldyBvbmUuICBXZWxsLAoreW91IG1pZ2h0IHdhbnQgdG8gY2hlY2sgdGhlIHZpZGVvNGxpbnV4IG1haWxpbmcgbGlzdCBhcmNoaXZlIGZpcnN0Li4uCisKK09mIGNvdXJzZSB5b3UgbmVlZCBhIGNvcnJlY3RseSBpbnN0YWxsZWQgc291bmRjYXJkIHVubGVzcyB5b3UgaGF2ZSB0aGUKK3NwZWFrZXJzIGNvbm5lY3RlZCBkaXJlY3RseSB0byB0aGUgZ3JhYmJlciBib2FyZC4gIEhpbnQ6IGNoZWNrIHRoZQorbWl4ZXIgc2V0dGluZ3MgdG9vLiAgQUxTQSBmb3IgZXhhbXBsZSBoYXMgZXZlcnl0aGluZyBtdXRlZCBieSBkZWZhdWx0LgorCisKK0hvdyBzb3VuZCB3b3JrcyBpbiBkZXRhaWwKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3RpbGwgZG9lc24ndCB3b3JrPyAgTG9va3MgbGlrZSBzb21lIGRyaXZlciBoYWNraW5nIGlzIHJlcXVpcmVkLgorQmVsb3cgaXMgYSBkby1pdC15b3Vyc2VsZiBkZXNjcmlwdGlvbiBmb3IgeW91LgorCitUaGUgYnQ4eHggY2hpcHMgaGF2ZSAzMiBnZW5lcmFsIHB1cnBvc2UgcGlucywgYW5kIHJlZ2lzdGVycyB0byBjb250cm9sCit0aGVzZSBwaW5zLiAgT25lIHJlZ2lzdGVyIGlzIHRoZSBvdXRwdXQgZW5hYmxlIHJlZ2lzdGVyCisoQlQ4NDhfR1BJT19PVVRfRU4pLCBpdCBzYXlzIHdoaWNoIHBpbnMgYXJlIGFjdGl2ZWx5IGRyaXZlbiBieSB0aGUKK2J0ODQ4IGNoaXAuICBBbm90aGVyIG9uZSBpcyB0aGUgZGF0YSByZWdpc3RlciAoQlQ4NDhfR1BJT19EQVRBKSwgd2hlcmUKK3lvdSBjYW4gZ2V0L3NldCB0aGUgc3RhdHVzIGlmIHRoZXNlIHBpbnMuICBUaGV5IGNhbiBiZSB1c2VkIGZvciBpbnB1dAorYW5kIG91dHB1dC4KKworTW9zdCBncmFiYmVyIGJvYXJkIHZlbmRvcnMgdXNlIHRoZXNlIHBpbnMgdG8gY29udHJvbCBhbiBleHRlcm5hbCBjaGlwCit3aGljaCBkb2VzIHRoZSBzb3VuZCByb3V0aW5nLiAgQnV0IGV2ZXJ5IGJvYXJkIGlzIGEgbGl0dGxlIGRpZmZlcmVudC4KK1RoZXNlIHBpbnMgYXJlIGFsc28gdXNlZCBieSBzb21lIGNvbXBhbmllcyB0byBkcml2ZSByZW1vdGUgY29udHJvbAorcmVjZWl2ZXIgY2hpcHMuICBTb21lIGJvYXJkcyB1c2UgdGhlIGkyYyBidXMgaW5zdGVhZCBvZiB0aGUgZ3BpbyBwaW5zCit0byBjb25uZWN0IHRoZSBtdXggY2hpcC4KKworQXMgbWVudGlvbmVkIGFib3ZlLCB0aGVyZSBpcyBhIGFycmF5IHdoaWNoIGhvbGRzIHRoZSByZXF1aXJlZAoraW5mb3JtYXRpb25zIGZvciBlYWNoIGtub3duIGJvYXJkLiAgWW91IGJhc2ljYWxseSBoYXZlIHRvIGNyZWF0ZSBhIG5ldworbGluZSBmb3IgeW91ciBib2FyZC4gIFRoZSBpbXBvcnRhbnQgZmllbGRzIGFyZSB0aGVzZSB0d286CisKK3N0cnVjdCB0dmNhcmQKK3sKKwlbIC4uLiBdCisgICAgICAgIHUzMiBncGlvbWFzazsKKyAgICAgICAgdTMyIGF1ZGlvbXV4WzZdOyAvKiBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCwgbXV0ZSwgc3RlcmVvICovCit9OworCitncGlvbWFzayBzcGVjaWZpZXMgd2hpY2ggcGlucyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBhdWRpbyBtdXggY2hpcC4KK1RoZSBjb3JyZXNwb25kaW5nIGJpdHMgaW4gdGhlIG91dHB1dCBlbmFibGUgcmVnaXN0ZXIKKyhCVDg0OF9HUElPX09VVF9FTikgd2lsbCBiZSBzZXQgYXMgdGhlc2UgcGlucyBtdXN0IGJlIGRyaXZlbiBieSB0aGUKK2J0ODQ4IGNoaXAuCisKK1RoZSBhdWRpb211eFtdIGFycmF5IGhvbGRzIHRoZSBkYXRhIHZhbHVlcyBmb3IgdGhlIGRpZmZlcmVudCBpbnB1dHMKKyhpLmUuIHdoaWNoIHBpbnMgbXVzdCBiZSBoaWdoL2xvdyBmb3IgdHVuZXIvbXV0ZS8uLi4pLiAgVGhpcyB3aWxsIGJlCit3cml0dGVuIHRvIHRoZSBkYXRhIHJlZ2lzdGVyIChCVDg0OF9HUElPX0RBVEEpIHRvIHN3aXRjaCB0aGUgYXVkaW8KK211eC4KKworCitXaGF0IHlvdSBoYXZlIHRvIGRvIGlzIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgdmFsdWVzIGZvciBncGlvbWFzayBhbmQKK3RoZSBhdWRpb211eCBhcnJheS4gIElmIHlvdSBoYXZlIFdpbmRvd3MgYW5kIHRoZSBkcml2ZXJzIGZvdXIgeW91cgorY2FyZCBpbnN0YWxsZWQsIHlvdSBtaWdodCB0byBjaGVjayBvdXQgaWYgeW91IGNhbiByZWFkIHRoZXNlIHJlZ2lzdGVycwordmFsdWVzIHVzZWQgYnkgdGhlIHdpbmRvd3MgZHJpdmVyLiAgQSB0b29sIHRvIGRvIHRoaXMgaXMgYXZhaWxhYmxlCitmcm9tIGZ0cDovL3RlbGVwcmVzZW5jZS5kbWVtLnN0cmF0aC5hYy51ay9wdWIvYnQ4NDgvd2ludXRpbCwgYnV0IGl0Citkb2VzJ250IHdvcmsgd2l0aCBidDg3OCBib2FyZHMgYWNjb3JkaW5nIHRvIHNvbWUgcmVwb3J0cyBJIHJlY2VpdmVkLgorQW5vdGhlciBvbmUgd2l0aCBidDg3OCBzdXBvcnQgaXMgYXZhaWxhYmxlIGZyb20KK2h0dHA6Ly9idHdpbmNhcC5zb3VyY2Vmb3JnZS5uZXQvRmlsZXMvYnRzcHkyLjAwLnppcAorCitZb3UgbWlnaHQgYWxzbyBkaWcgYXJvdW5kIGluIHRoZSAqLmluaSBmaWxlcyBvZiB0aGUgV2luZG93cyBhcHBsaWNhdGlvbnMuCitZb3UgY2FuIGhhdmUgYSBsb29rIGF0IHRoZSBib2FyZCB0byBzZWUgd2hpY2ggb2YgdGhlIGdwaW8gcGlucyBhcmUKK2Nvbm5lY3RlZCBhdCBhbGwgYW5kIHRoZW4gc3RhcnQgdHJpYWwtYW5kLWVycm9yIC4uLgorCisKK1N0YXJ0aW5nIHdpdGggcmVsZWFzZSAwLjcuNDEgYnR0diBoYXMgYSBudW1iZXIgb2YgaW5zbW9kIG9wdGlvbnMgdG8KK21ha2UgdGhlIGdwaW8gZGVidWdnaW5nIGVhc2llcjoKKworYnR0dl9ncGlvPTAvMQkJZW5hYmxlL2Rpc2FibGUgZ3BpbyBkZWJ1ZyBtZXNzYWdlcworZ3Bpb21hc2s9bgkJc2V0IHRoZSBncGlvbWFzayB2YWx1ZQorYXVkaW9tdXg9aSxqLC4uLglzZXQgdGhlIHZhbHVlcyBvZiB0aGUgYXVkaW9tdXggYXJyYXkKK2F1ZGlvYWxsPWEJCXNldCB0aGUgdmFsdWVzIG9mIHRoZSBhdWRpb211eCBhcnJheSAob25lCisJCQl2YWx1ZSBmb3IgYWxsIGFycmF5IGVsZW1lbnRzLCB1c2VmdWwgdG8gY2hlY2sKKwkJCW91dCB3aGljaCBlZmZlY3QgdGhlIHBhcnRpY3VsYXIgdmFsdWUgaGFzKS4KKworVGhlIG1lc3NhZ2VzIHByaW50ZWQgd2l0aCBidHR2X2dwaW89MSBsb29rIGxpa2UgdGhpczoKKworCWJ0dHYwOiBncGlvOiBlbj0wMDAwMDAyNywgb3V0PTAwMDAwMDI0IGluPTAwZmZmZmQ4IFthdWRpbzogb2ZmXQorCitlbiAgPQlvdXRwdXQgX2VuX2FibGUgcmVnaXN0ZXIgKEJUODQ4X0dQSU9fT1VUX0VOKQorb3V0ID0JX291dF9wdXQgYml0cyBvZiB0aGUgZGF0YSByZWdpc3RlciAoQlQ4NDhfR1BJT19EQVRBKSwKKwlpLmUuIEJUODQ4X0dQSU9fREFUQSAmIEJUODQ4X0dQSU9fT1VUX0VOCitpbiAgPSAJX2luX3B1dCBiaXRzIG9mIHRoZSBkYXRhIHJlZ2lzdGVyLAorCWkuZS4gQlQ4NDhfR1BJT19EQVRBICYgfkJUODQ4X0dQSU9fT1VUX0VOCisKKworCitPdGhlciBlbGVtZW50cyBvZiB0aGUgdHZjYXJkcyBhcnJheQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gbWFrZSBhIG5ldyBjYXJkIHdvcmsgeW91IG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvCitrbm93IHdoYXQgdGhlIG90aGVyIGVsZW1lbnRzIGluIHRoZSB0dmNhcmRzIGFycmF5IGFyZSBnb29kIGZvcjoKKwordmlkZW9faW5wdXRzICAgIC0gIyBvZiB2aWRlbyBpbnB1dHMgdGhlIGNhcmQgaGFzCithdWRpb19pbnB1dHMgICAgLSBoaXN0b3JpY2FsIGNydWZ0LCBub3QgdXNlZCBhbnkgbW9yZS4KK3R1bmVyICAgICAgICAgICAtIHdoaWNoIGlucHV0IGlzIHRoZSB0dW5lcgorc3ZocyAgICAgICAgICAgIC0gd2hpY2ggaW5wdXQgaXMgc3ZocyAoYWxsIG90aGVycyBhcmUgbGFiZWxlZCBjb21wb3NpdGUpCittdXhzZWwgICAgICAgICAgLSB2aWRlbyBtdXgsIGlucHV0LT5yZWdpc3RlcnZhbHVlIG1hcHBpbmcKK3BsbCAgICAgICAgICAgICAtIHNhbWUgYXMgcGxsPSBpbnNtb2Qgb3B0aW9uCit0dW5lcl90eXBlICAgICAgLSBzYW1lIGFzIHR1bmVyPSBpbnNtb2Qgb3B0aW9uCisqX21vZHVsZW5hbWUgICAgLSBoaW50IHdoZW5ldmVyIHNvbWUgY2FyZCBuZWVkcyB0aGlzIG9yIHRoYXQgYXVkaW8KKyAgICAgICAgICAgICAgICAgIG1vZHVsZSBsb2FkZWQgdG8gd29yayBwcm9wZXJseS4KK2hhc19yYWRpbwktIHdoZW5ldmVyIHRoaXMgVFYgY2FyZCBoYXMgYSByYWRpbyB0dW5lci4KK25vX21zcDM0eHgJLSAiMSIgZGlzYWJsZXMgbG9hZGluZyBvZiBtc3AzNDAwLm8gbW9kdWxlCitub190ZGE5ODc1CS0gIjEiIGRpc2FibGVzIGxvYWRpbmcgb2YgdGRhOTg3NS5vIG1vZHVsZSAKK25lZWRzX3R2YXVkaW8JLSBzZXQgdG8gIjEiIHRvIGxvYWQgdHZhdWRpby5vIG1vZHVsZSAKKworSWYgc29tZSBjb25maWcgaXRlbSBpcyBzcGVjaWZpZWQgYm90aCBmcm9tIHRoZSB0dmNhcmRzIGFycmF5IGFuZCBhcworaW5zbW9kIG9wdGlvbiwgdGhlIGluc21vZCBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZS4KKworCisKK0dvb2QgbHVjaywKKworICBHZXJkCisKKworUFM6IElmIHlvdSBoYXZlIGEgbmV3IHdvcmtpbmcgZW50cnksIG1haWwgaXQgdG8gbWUuCisKKy0tIAorR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NwZWNzIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NwZWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjllNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU3BlY3MKQEAgLTAsMCArMSwzIEBACitQaGlsaXBzCQlodHRwOi8vd3d3LlNlbWljb25kdWN0b3JzLkNPTS9waXAvCitDb25leGFudAlodHRwOi8vd3d3LmNvbmV4YW50LmNvbS90ZWNoaW5mby9kZWZhdWx0LmFzcAorTWljcm9uYXMJaHR0cDovL3d3dy5taWNyb25hcy5kZS9wYWdlcy9wcm9kdWN0X2RvY3VtZW50YXRpb24vaW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1RIQU5LUyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9USEFOS1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NTM5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9USEFOS1MKQEAgLTAsMCArMSwyNCBAQAorTWFueSB0aGFua3MgdG86CisKKy0gTWFya3VzIFNjaHJvZWRlciA8c2Nocm9lZG1AdW5pLWR1ZXNzZWxkb3JmLmRlPiBmb3IgaW5mb3JtYXRpb24gb24gdGhlIEJ0ODQ4IAorICBhbmQgdHVuZXIgcHJvZ3JhbW1pbmcgYW5kIGhpcyBjb250cm9sIHByb2dyYW0geHR2Yy4KKworLSBNYXJ0aW4gQnVjayA8bWFydGluLTIuYnVja0BzdHVkZW50LnVuaS11bG0uZGU+IGZvciBoaXMgZ3JlYXQgVmlkZW90ZXh0CisgIHBhY2thZ2UuCisKKy0gR2VyZCBLbm9yciA8a3JheGVsQGNzLnR1LWJlcmxpbi5kZT4gZm9yIHRoZSBNU1AzNDAwIHN1cHBvcnQgYW5kIHRoZSBtb2R1bGFyCisgIEkyQywgdHVuZXIsIC4uLiBzdXBwb3J0LgorCisKKy0gTUFUUklYIFZpc2lvbiBmb3IgZ2l2aW5nIHVzIDIgY2FyZHMgZm9yIGZyZWUsIHdoaWNoIG1hZGUgc3VwcG9ydCBvZgorICBzaW5nbGUgY3J5c3RhbCBvcGVyYXRpb24gcG9zc2libGUuCisKKy0gTUlSTyBmb3IgcHJvdmlkaW5nIGEgZnJlZSBQQ1RWIGNhcmQgYW5kIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICBjb21wb25lbnRzIG9uIHRoZWlyIGNhcmRzLiAoRS5nLiBob3cgdGhlIHR1bmVyIHR5cGUgaXMgZGV0ZWN0ZWQpCisgIFdpdGhvdXQgdGhlaXIgY2FyZCBJIGNvdWxkIG5vdCBoYXZlIGRlYnVnZ2VkIHRoZSBOVFNDIG1vZGUuCisJCistIEhhdXBwYXVnZSBmb3IgdGVsbGluZyBob3cgdGhlIHNvdW5kIGlucHV0IGlzIHNlbGVjdGVkIGFuZCB3aGF0IGNvbXBvbmVudHMKKyAgdGhleSBkbyBhbmQgd2lsbCB1c2Ugb24gdGhlaXIgcmFkaW8gY2FyZHMuCisgIEFsc28gbWFueSB0aGFua3MgZm9yIGZheGluZyBtZSB0aGUgRk0xMjE2IGRhdGEgc2hlZXQuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1R1bmVycyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9UdW5lcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4ZmJjNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9UdW5lcnMKQEAgLTAsMCArMSwxMTUgQEAKKzEpIFR1bmVyIFByb2dyYW1taW5nCis9PT09PT09PT09PT09PT09PT09PQorVGhlcmUgYXJlIHNvbWUgZmxhdm9ycyBvZiBUdW5lciBwcm9ncmFtbWluZyBBUElzLgorVGhlc2UgZGlmZmVyIG1haW5seSBieSB0aGUgYmFuZHN3aXRjaCBieXRlLgorCisgICAgTD0gTEdfQVBJICAgICAgIChWSEZfTE89MHgwMSwgVkhGX0hJPTB4MDIsIFVIRj0weDA4LCByYWRpbz0weDA0KQorICAgIFA9IFBISUxJUFNfQVBJICAoVkhGX0xPPTB4QTAsIFZIRl9IST0weDkwLCBVSEY9MHgzMCwgcmFkaW89MHgwNCkKKyAgICBUPSBURU1JQ19BUEkgICAgKFZIRl9MTz0weDAyLCBWSEZfSEk9MHgwNCwgVUhGPTB4MDEpCisgICAgQT0gQUxQU19BUEkgICAgIChWSEZfTE89MHgxNCwgVkhGX0hJPTB4MTIsIFVIRj0weDExKQorICAgIE09IFBISUxJUFNfTUszICAoVkhGX0xPPTB4MDEsIFZIRl9IST0weDAyLCBVSEY9MHgwNCwgcmFkaW89MHgxOSkKKworMikgVHVuZXIgTWFudWZhY3R1cmVycworPT09PT09PT09PT09PT09PT09PT09PQorCitTQU1TVU5HIFR1bmVyIGlkZW50aWZpY2F0aW9uOiAoZS5nLiBUQ1BNOTA5MVBEMjcpCisgIFRDUCBbQUJDSkxNTlFdIDkwWzg5XVsxMjVdIFtEUF0gW0FDRF0gMjcgW0FCQ0RdCisgW0FCQ0pMTU5RXToKKyAgIEE9IEJHK0RLCisgICBCPSBCRworICAgQz0gSStESworICAgSj0gTlRTQy1KYXBhbgorICAgTD0gU2VjYW0gTEwKKyAgIE09IEJHK0krREsKKyAgIE49IE5UU0MgCisgICBRPSBCRytJK0RLK0xMCisgWzg5XTogPworIFsxMjVdOgorICAgMjogTm8gRk0KKyAgIDU6IFdpdGggRk0KKyBbRFBdOgorICAgRD0gTlRTQworICAgUD0gUEFMCisgW0FDRF06CisgICBBPSBGLWNvbm5lY3RvcgorICAgQz0gUGhvbm8gY29ubmVjdG9yCisgICBEPSBEaW4gSmFjaworIFtBQkNEXToKKyAgIDMtd2lyZS9JMkMgdHVuaW5nLCAyLWJhbmQvMy1iYW5kCisKKyBUaGVzZSBUdW5lcnMgYXJlIFBISUxJUFNfQVBJIGNvbXBhdGlibGUuCisKK1BoaWxpcHMgVHVuZXIgaWRlbnRpZmljYXRpb246IChlLmcuIEZNMTIxNk1GKQorICBGW0lSTVFdMTJbMTM0NV02e01GfE1FfE1QfQorICBGW0lSTVFdOgorICAgRkkxMng2OiBUdW5lciBTZXJpZXMKKyAgIEZSMTJ4NjogVHVuZXIgKyBSYWRpbyBJRgorICAgRk0xMng2OiBUdW5lciArIEZNCisgICBGUTEyeDY6IHNwZWNpYWwKKyAgIEZNUjEyeDY6IHNwZWNpYWwKKyAgIFREMTV4eDogRGlnaXRhbCBUdW5lciBBVFNDCisgIDEyWzEzNDVdNjoKKyAgIDEyMTY6IFBBTCBCRworICAgMTIzNjogTlRTQworICAgMTI0NjogUEFMIEkKKyAgIDEyNTY6IFBhbCBESworICB7TUZ8TUV8TVB9CisgICBNRjogQkcgTEwgdy8gU2VjYW0gKE11bHRpIEZyYW5jZSkKKyAgIE1FOiBCRyBESyBJIExMICAgKE11bHRpIEV1cm9wZSkKKyAgIE1QOiBCRyBESyBJICAgICAgKE11bHRpIFBBTCkKKyAgIE1SOiBCRyBESyBNICg/KQorICAgTUc6IEJHIERLSSBNICg/KQorICBNSzIgc2VyaWVzIFBISUxJUFNfQVBJLCBtb3N0IHR1bmVycyBhcmUgY29tcGF0aWJsZSB0byB0aGlzIG9uZSAhCisgIE1LMyBzZXJpZXMgaW50cm9kdWNlZCBpbiAyMDAyIHcvIFBISUxJUFNfTUszX0FQSQorCitUZW1pYyBUdW5lciBpZGVudGlmaWNhdGlvbjogKC5lLmcgNDAwNkZINSkKKyAgIDRbMDFdWzAxMzZdWzI2OV1GW0hZTlJdNQorICAgIDQweDI6IFR1bmVyICg1Vi8zM1YpLCBURU1JQ19BUEkuCisgICAgNDB4NjogVHVuZXIgNVYKKyAgICA0MXh4OiBUdW5lciBjb21wYWN0CisgICAgNDB4OTogVHVuZXIrRk0gY29tcGFjdAorICAgWzAxMzZdCisgICAgeHgweDogUEFMIEJHCisgICAgeHgxeDogUGFsIERLLCBTZWNhbSBMTAorICAgIHh4M3g6IE5UU0MKKyAgICB4eDZ4OiBQQUwgSQorICAgRltIWU5SXTUKKyAgICBGSDU6IFBhbCBCRworICAgIEZZNTogb3RoZXJzCisgICAgRk41OiBtdWx0aXN0YW5kYXJkCisgICAgRlI1OiB3LyBGTSByYWRpbworICAgM1ggeHh4eDogb3JkZXIgbnVtYmVyIHdpdGggc3BlY2lmaWMgY29ubmVjdG9yCisgIE5vdGU6IE9ubHkgNDB4MiBzZXJpZXMgaGFzIFRFTUlDX0FQSSwgYWxsIG5ld2VyIHR1bmVycyBoYXZlIFBISUxJUFNfQVBJLgorCitMRyBJbm5vdGVrIFR1bmVyOgorICBUUEk4TlNSMTEgOiBOVFNDIEovTSAgICAoVFBJOE5TUjAxIHcvRk0pICAoUCwyMTAvNDk3KQorICBUUEk4UFNCMTEgOiBQQUwgQi9HICAgICAoVFBJOFBTQjAxIHcvRk0pICAoUCwxNzAvNDUwKQorICBUQVBDLUk3MDEgOiBQQUwgSSAgICAgICAoVEFQQy1JMDAxIHcvRk0pICAoUCwxNzAvNDUwKQorICBUUEk4UFNCMTIgOiBQQUwgRC9LK0IvRyAoVFBJOFBTQjAyIHcvRk0pICAoUCwxNzAvNDUwKQorICBUQVBDLUg3MDFQOiBOVFNDX0pQICAgICAoVEFQQy1IMDAxUCB3L0ZNKSAoTCwxNzAvNDUwKQorICBUQVBDLUc3MDFQOiBQQUwgQi9HICAgICAoVEFQQy1HMDAxUCB3L0ZNKSAoTCwxNzAvNDUwKQorICBUQVBDLVc3MDFQOiBQQUwgSSAgICAgICAoVEFQQy1XMDAxUCB3L0ZNKSAoTCwxNzAvNDUwKQorICBUQVBDLVE3MDNQOiBQQUwgRC9LICAgICAoVEFQQy1RMDAxUCB3L0ZNKSAoTCwxNzAvNDUwKQorICBUQVBDLVE3MDRQOiBQQUwgRC9LK0kgICAoTCwxNzAvNDUwKQorICBUQVBDLUc3MDJQOiBQQUwgRC9LK0IvRyAoTCwxNzAvNDUwKQorCisgIFRBREMtSDAwMkY6IE5UU0MgKEwsMTc1LzQxMD87IDItQiwgQy1XKzExLCBXKzEyLTY5KQorICBUQURDLU0yMDFEOiBQQUwgRC9LK0IvRytJIChMLDE0My80MjUpICAoc291bmQgY29udHJvbCBhdCBJMkMgYWRkcmVzcyAweGM4KQorICBUQURDLVQwMDNGOiBOVFNDIFRhaXdhbiAgKEwsMTc1LzQxMD87IDItQiwgQy1XKzExLCBXKzEyLTY5KQorICBTdWZmaXg6IAorICAgIFA9IFN0YW5kYXJkIHBob25vIGZlbWFsZSBzb2NrZXQKKyAgICBEPSBJRUMgZmVtYWxlIHNvY2tldAorICAgIEY9IEYtY29ubmVjdG9yCisKK090aGVyIFR1bmVyczoKK1RDTDIwMDJNQi0xIDogUEFMIEJHICsgREsgICAgICAgPVRVTkVSX0xHX1BBTF9ORVdfVEFQQworVENMMjAwMk1CLTFGOiBQQUwgQkcgKyBESyB3L0ZNICA9UEhJTElQU19QQUwKK1RDTDIwMDJNSS0yIDogUEFMIEkJCT0gPz8KKworQUxQUyBUdW5lcnM6CisgICBNb3N0IGFyZSBMR19BUEkgY29tcGF0aWJsZQorICAgVFNDSDYgaGFzIEFMUFNfQVBJIChUU0NINSA/KQorICAgVFNCRTEgaGFzIGV4dHJhIEFQSSAwNSwwMiwwOCBDb250cm9sX2J5dGU9MHhDQiBTb3VyY2U6KDEpCisKK0xpdC4KKygxKSBjb25leGFudDEwMDAyOWItUENJLURlY29kZXItQXBwbGljYXRpb25Ob3RlLnBkZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9tZXllLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbWV5ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzN2RhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbWV5ZS50eHQKQEAgLTAsMCArMSwxMzAgQEAKK1ZhaW8gUGljdHVyZWJvb2sgTW90aW9uIEV5ZSBDYW1lcmEgRHJpdmVyIFJlYWRtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KKwlDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGP0dmUgPHd3dy5hbGNvdmUuY29tPgorCUNvcHlyaWdodCAoQykgMjAwMCBBbmRyZXcgVHJpZGdlbGwgPHRyaWRnZUBzYW1iYS5vcmc+CisKK1RoaXMgZHJpdmVyIGVuYWJsZSB0aGUgdXNlIG9mIHZpZGVvNGxpbnV4IGNvbXBhdGlibGUgYXBwbGljYXRpb25zIHdpdGggdGhlCitNb3Rpb24gRXllIGNhbWVyYS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdGhlICJTb255IFZhaW8gUHJvZ3JhbW1hYmxlIEkvTworQ29udHJvbCBEZXZpY2UiIGRyaXZlciAod2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSAiQ2hhcmFjdGVyIGRyaXZlcnMiCitzZWN0aW9uIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB1dGlsaXR5KSB0byBiZSBjb21waWxlZCBhbmQgaW5zdGFsbGVkCisodXNpbmcgaXRzICJjYW1lcmE9MSIgcGFyYW1ldGVyKS4KKworSXQgY2FuIGRvIGF0IG1heGltdW0gMzAgZnBzIEAgMzIweDI0MCBvciAxNSBmcHMgQCA2NDB4NDgwLgorCitHcmFiYmluZyBpcyBzdXBwb3J0ZWQgaW4gcGFja2VkIFlVViBjb2xvcnNwYWNlIG9ubHkuCisKK01KUEVHIGhhcmR3YXJlIGdyYWJiaW5nIGlzIHN1cHBvcnRlZCB2aWEgYSBwcml2YXRlIEFQSSAoc2VlIGJlbG93KS4KKworSGFyZHdhcmUgc3VwcG9ydGVkOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgJ3NlY29uZCcgdmVyc2lvbiBvZiB0aGUgTW90aW9uRXllIGNhbWVyYSA6KQorCitUaGUgZmlyc3QgdmVyc2lvbiB3YXMgY29ubmVjdGVkIGRpcmVjdGx5IG9uIHRoZSB2aWRlbyBidXMgb2YgdGhlIE5lb21hZ2ljCit2aWRlbyBjYXJkIGFuZCBpcyB1bnN1cHBvcnRlZC4KKworVGhlIHNlY29uZCBvbmUsIG1hZGUgYnkgS2F3YXNha2kgU3RlZWwgaXMgZnVsbHkgc3VwcG9ydGVkIGJ5IHRoaXMKK2RyaXZlciAoUENJIHZlbmRvci9kZXZpY2UgaXMgMHgxMzZiLzB4ZmYwMSkKKworVGhlIHRoaXJkIG9uZSwgcHJlc2VudCBpbiByZWNlbnQgKG1vcmUgb3IgbGVzcyBsYXN0IHllYXIpIFBpY3R1cmVib29rcworKEMxTSogbW9kZWxzKSwgaXMgbm90IHN1cHBvcnRlZC4gVGhlIG1hbnVmYWN0dXJlciBoYXMgZ2l2ZW4gdGhlIHNwZWNzCit0byB0aGUgZGV2ZWxvcGVycyB1bmRlciBhIE5EQSAod2hpY2ggYWxsb3dzIHRoZSBkZXZlbG9tZW50IG9mIGEgR1BMCitkcml2ZXIgaG93ZXZlciksIGJ1dCB0aGluZ3MgYXJlIG5vdCBtb3ZpbmcgdmVyeSBmYXN0IChzZWUKK2h0dHA6Ly9yLWVuZ2luZS5zb3VyY2Vmb3JnZS5uZXQvKSAoUENJIHZlbmRvci9kZXZpY2UgaXMgMHgxMGNmLzB4MjAxMSkuCisKK1RoZXJlIGlzIGEgZm9ydGggbW9kZWwgY29ubmVjdGVkIG9uIHRoZSBVU0IgYnVzIGluIFRSMSogVmFpbyBsYXB0b3BzLgorVGhpcyBjYW1lcmEgaXMgbm90IHN1cHBvcnRlZCBhdCBhbGwgYnkgdGhlIGN1cnJlbnQgZHJpdmVyLCBpbiBmYWN0CitsaXR0bGUgaW5mb3JtYXRpb24gaWYgYW55IGlzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYW1lcmEKKyhVU0IgdmVuZG9yL2RldmljZSBpcyAweDA1NGMvMHgwMTA3KS4KKworRHJpdmVyIG9wdGlvbnM6CistLS0tLS0tLS0tLS0tLS0KKworU2V2ZXJhbCBvcHRpb25zIGNhbiBiZSBwYXNzZWQgdG8gdGhlIG1leWUgZHJpdmVyIHVzaW5nIHRoZSBzdGFuZGFyZAorbW9kdWxlIGFyZ3VtZW50IHN5bnRheCAoPHBhcmFtPj08dmFsdWU+IHdoZW4gcGFzc2luZyB0aGUgb3B0aW9uIHRvIHRoZQorbW9kdWxlIG9yIG1leWUuPHBhcmFtPj08dmFsdWU+IG9uIHRoZSBrZXJuZWwgYm9vdCBsaW5lIHdoZW4gbWV5ZSBpcworc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUga2VybmVsKS4gVGhvc2Ugb3B0aW9ucyBhcmU6CisKKwlmb3JjZXY0bDE6CWZvcmNlIHVzZSBvZiBWNEwxIEFQSSBpbnN0ZWFkIG9mIFY0TDIKKworCWdidWZmZXJzOgludW1iZXIgb2YgY2FwdHVyZSBidWZmZXJzLCBkZWZhdWx0IGlzIDIgKDMyIG1heCkKKworCWdidWZzaXplOglzaXplIG9mIGVhY2ggY2FwdHVyZSBidWZmZXIsIGRlZmF1bHQgaXMgNjE0NDAwCisKKwl2aWRlb19ucjoJdmlkZW8gZGV2aWNlIHRvIHJlZ2lzdGVyICgwID0gL2Rldi92aWRlbzAsIGV0YykKKworTW9kdWxlIHVzZToKKy0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCB0aGUgbWV5ZSBtb2R1bGUgb24gdXNlLCB5b3UgY2FuIHB1dCB0aG9zZSBsaW5lcworaW4geW91ciAvZXRjL21vZHByb2JlLmNvbmYgZmlsZToKKworCWFsaWFzIGNoYXItbWFqb3ItODEgdmlkZW9kZXYKKwlhbGlhcyBjaGFyLW1ham9yLTgxLTAgbWV5ZQorCW9wdGlvbnMgbWV5ZSBnYnVmZmVycz0zMgorCitVc2FnZToKKy0tLS0tLQorCisJeGF3dHYgPj0gMy40OSAoPGh0dHA6Ly9ieXRlc2V4Lm9yZy94YXd0di8+KQorCQlmb3IgZGlzcGxheSBhbmQgdW5jb21wcmVzc2VkIHZpZGVvIGNhcHR1cmU6CisKKwkJCXhhd3R2IC1jIC9kZXYvdmlkZW8wIC1nZW9tZXRyeSA2NDB4NDgwCisJCQkJb3IKKwkJCXhhd3R2IC1jIC9kZXYvdmlkZW8wIC1nZW9tZXRyeSAzMjB4MjQwCisKKwltb3Rpb25leWUgKDxodHRwOi8vcG9waWVzLm5ldC9tZXllLz4pCisJCWZvciBnZXR0aW5nIHBwbSBvciBqcGcgc25hcHNob3RzLCBtanBlZyB2aWRlbworCitQcml2YXRlIEFQSToKKy0tLS0tLS0tLS0tLQorCisJVGhlIGRyaXZlciBzdXBwb3J0cyBmcmFtZSBncmFiYmluZyB3aXRoIHRoZSB2aWRlbzRsaW51eCBBUEkKKwkoZWl0aGVyIHY0bDEgb3IgdjRsMiksIHNvIGFsbCB2aWRlbzRsaW51eCB0b29scyAobGlrZSB4YXd0dikKKwlzaG91bGQgd29yayB3aXRoIHRoaXMgZHJpdmVyLgorCisJQmVzaWRlcyB0aGUgdmlkZW80bGludXggaW50ZXJmYWNlLCB0aGUgZHJpdmVyIGhhcyBhIHByaXZhdGUgaW50ZXJmYWNlCisJZm9yIGFjY2Vzc2luZyB0aGUgTW90aW9uIEV5ZSBleHRlbmRlZCBwYXJhbWV0ZXJzIChjYW1lcmEgc2hhcnBuZXNzLAorCWFnYywgdmlkZW8gZnJhbWVyYXRlKSwgdGhlIHNoYXBzaG90IGFuZCB0aGUgTUpQRUcgY2FwdHVyZSBmYWNpbGl0aWVzLgorCisJVGhpcyBpbnRlcmZhY2UgY29uc2lzdHMgb2Ygc2V2ZXJhbCBpb2N0bHMgKHByb3RvdHlwZXMgYW5kIHN0cnVjdHVyZXMKKwljYW4gYmUgZm91bmQgaW4gaW5jbHVkZS9saW51eC9tZXllLmgpOgorCisJTUVZRUlPQ19HX1BBUkFNUworCU1FWUVJT0NfU19QQVJBTVMKKwkJR2V0IGFuZCBzZXQgdGhlIGV4dGVuZGVkIHBhcmFtZXRlcnMgb2YgdGhlIG1vdGlvbiBleWUgY2FtZXJhLgorCQlUaGUgdXNlciBzaG91bGQgYWx3YXlzIHF1ZXJ5IHRoZSBjdXJyZW50IHBhcmFtZXRlcnMgd2l0aAorCQlNRVlFSU9DX0dfUEFSQU1TLCBjaGFuZ2Ugd2hhdCBoZSBsaWtlcyBhbmQgdGhlbiBpc3N1ZSB0aGUKKwkJTUVZRUlPQ19TX1BBUkFNUyBjYWxsIChjaGVja2luZyBmb3IgLUVJTlZBTCkuIFRoZSBleHRlbmRlZAorCQlwYXJhbWV0ZXJzIGFyZSBkZXNjcmliZWQgYnkgdGhlIG1leWVfcGFyYW1zIHN0cnVjdHVyZS4KKworCisJTUVZRUlPQ19RQlVGX0NBUFQKKwkJUXVldWUgYSBidWZmZXIgZm9yIGNhcHR1cmUgKHRoZSBidWZmZXJzIG11c3QgaGF2ZSBiZWVuCisJCW9idGFpbmVkIHdpdGggYSBWSURJT0NHTUJVRiBjYWxsIGFuZCBtbWFwJ2VkIGJ5IHRoZQorCQlhcHBsaWNhdGlvbikuIFRoZSBhcmd1bWVudCB0byBNRVlFSU9DX1FCVUZfQ0FQVCBpcyB0aGUKKwkJYnVmZmVyIG51bWJlciB0byBxdWV1ZSAob3IgLTEgdG8gZW5kIGNhcHR1cmUpLiBUaGUgZmlyc3QKKwkJY2FsbCB0byBNRVlFSU9DX1FCVUZfQ0FQVCBzdGFydHMgdGhlIHN0cmVhbWluZyBjYXB0dXJlLgorCisJTUVZRUlPQ19TWU5DCisJCVRha2VzIGFzIGFuIGFyZ3VtZW50IHRoZSBidWZmZXIgbnVtYmVyIHlvdSB3YW50IHRvIHN5bmMuCisJCVRoaXMgaW9jdGwgYmxvY2tzIHVudGlsIHRoZSBidWZmZXIgaXMgZmlsbGVkIGFuZCByZWFkeQorCQlmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZS4gSXQgcmV0dXJucyB0aGUgYnVmZmVyIHNpemUuCisKKwlNRVlFSU9DX1NUSUxMQ0FQVAorCU1FWUVJT0NfU1RJTExKQ0FQVAorCQlUYWtlcyBhIHNuYXBzaG90IGluIGFuIHVuY29tcHJlc3NlZCBvciBjb21wcmVzc2VkIGpwZWcgZm9ybWF0LgorCQlUaGlzIGlvY3RsIGJsb2NrcyB1bnRpbCB0aGUgc25hcHNob3QgaXMgZG9uZSBhbmQgcmV0dXJucyAoZm9yCisJCWpwZWcgc25hcHNob3QpIHRoZSBzaXplIG9mIHRoZSBpbWFnZS4gVGhlIGltYWdlIGRhdGEgaXMKKwkJYXZhaWxhYmxlIGZyb20gdGhlIGZpcnN0IG1tYXAnZWQgYnVmZmVyLgorCisJTG9vayBhdCB0aGUgJ21vdGlvbmV5ZScgYXBwbGljYXRpb24gY29kZSBmb3IgYW4gYWN0dWFsIGV4YW1wbGUuCisKK0J1Z3MgLyBUb2RvOgorLS0tLS0tLS0tLS0tCisKKwktIHRoZSBkcml2ZXIgY291bGQgYmUgbXVjaCBjbGVhbmVkIHVwIGJ5IHJlbW92aW5nIHRoZSB2NGwxIHN1cHBvcnQuCisJICBIb3dldmVyLCB0aGlzIG1lYW5zIGFsbCB2NGwxLW9ubHkgYXBwbGljYXRpb25zIHdpbGwgc3RvcCB3b3JraW5nLgorCisJLSAnbW90aW9uZXllJyBzdGlsbCB1c2VzIHRoZSBtZXllIHByaXZhdGUgdjRsMSBBUEkgZXh0ZW5zaW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvcmFkaW90cmFjay50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3JhZGlvdHJhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzUzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3JhZGlvdHJhY2sudHh0CkBAIC0wLDAgKzEsMTQ3IEBACitOT1RFUyBPTiBSQURJT1RSQUNLIENBUkQgQ09OVFJPTAorYnkgU3RlcGhlbiBNLiBCZW5vaXQgKGJlbm9pdHNAc2VydmljZXByby5jb20pICBEZWMgMTQsIDE5OTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG9jdW1lbnQgdmVyc2lvbiAxLjAKKworQUNLTk9XTEVER01FTlRTCistLS0tLS0tLS0tLS0tLS0tCitUaGlzIGRvY3VtZW50IHdhcyBtYWRlIGJhc2VkIG9uICdDJyBjb2RlIGZvciBMaW51eCBmcm9tIEdpZGVvbiBsZSBHcmFuZ2UKKyhsZWdyYW5nQGFjdGl2ZS5jby56YSBvciBsZWdyYW5nQGNzLnN1bi5hYy56YSkgaW4gMTk5NCwgYW5kIGVsYWJvcmF0aW9ucyBmcm9tCitGcmFucyBCcmlua21hbiAoYnJpbmttYW5AZXNkLm5sKSBpbiAxOTk2LiAgVGhlIHJlc3VsdHMgcmVwb3J0ZWQgaGVyZSBhcmUgZnJvbQorZXhwZXJpbWVudHMgdGhhdCB0aGUgYXV0aG9yIHBlcmZvcm1lZCBvbiBoaXMgb3duIHNldHVwLCBzbyB5b3VyIG1pbGVhZ2UgbWF5Cit2YXJ5Li4uIEkgbWFrZSBubyBndWFyYW50ZWVzLCBjbGFpbXMgb3Igd2FycmFudGllcyB0byB0aGUgc3VpdGFiaWxpdHkgb3IKK3ZhbGlkaXR5IG9mIHRoaXMgaW5mb3JtYXRpb24uICBObyBvdGhlciBkb2N1bWVudGF0aW9uIG9uIHRoZSBBSU1TCitMYWIgKGh0dHA6Ly93d3cuYWltc2xhYi5jb20vKSBSYWRpb1RyYWNrIGNhcmQgd2FzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZQorYXV0aG9yLiAgVGhpcyBkb2N1bWVudCBpcyBvZmZlcmVkIGluIHRoZSBob3BlcyB0aGF0IGl0IG1pZ2h0IGhlbHAgdXNlcnMgd2hvCit3YW50IHRvIHVzZSB0aGUgUmFkaW9UcmFjayBjYXJkIGluIGFuIGVudmlyb25tZW50IG90aGVyIHRoYW4gTVMgV2luZG93cy4KKworV0hZIFRISVMgRE9DVU1FTlQ/CistLS0tLS0tLS0tLS0tLS0tLS0KK0kgaGF2ZSBhIFJhZGlvVHJhY2sgY2FyZCBmcm9tIGJhY2sgd2hlbiBJIHJhbiBhbiBNUy1XaW5kb3dzIHBsYXRmb3JtLiAgQWZ0ZXIKK2NvbnZlcnRpbmcgdG8gTGludXgsIEkgZm91bmQgR2lkZW9uIGxlIEdyYW5nZSdzIGNvbW1hbmQtbGluZSBzb2Z0d2FyZSBmb3IKK3J1bm5pbmcgdGhlIGNhcmQsIGFuZCBmb3VuZCB0aGF0IGl0IHdhcyBnb29kISAgRnJhbnMgQnJpbmttYW4gbWFkZSBhCitjb21mb3J0YWJsZSBYLXdpbmRvd3MgaW50ZXJmYWNlLCBhbmQgYWRkZWQgYSBzY2FubmluZyBmZWF0dXJlLiAgRm9yIGhhY2sKK3ZhbHVlLCBJIHdhbnRlZCB0byBzZWUgaWYgdGhlIHR1bmVyIGNvdWxkIGJlIHR1bmVkIGJleW9uZCB0aGUgdXN1YWwgRk0gcmFkaW8KK2Jyb2FkY2FzdCBiYW5kLCBzbyBJIGNvdWxkIHBpY2sgdXAgdGhlIGF1ZGlvIGNhcnJpZXJzIGZyb20gTm9ydGggQW1lcmljYW4KK2Jyb2FkY2FzdCBUViBjaGFubmVscywgc2l0dWF0ZWQganVzdCBiZWxvdyBhbmQgYWJvdmUgdGhlIDg3LjAtMTA5LjAgTUh6IHJhbmdlLgorSSBkaWQgbm90IGdldCBtdWNoIHN1Y2Nlc3MsIGJ1dCBJIGxlYXJuZWQgYWJvdXQgcHJvZ3JhbW1pbmcgaW9wb3J0cyB1bmRlcgorTGludXggYW5kIGdhaW5lZCBzb21lIGluc2lnaHRzIGFib3V0IHRoZSBoYXJkd2FyZSBkZXNpZ24gdXNlZCBmb3IgdGhlIGNhcmQuCisKK1NvLCB3aXRob3V0IGZ1cnRoZXIgZGVsYXksIGhlcmUgYXJlIHRoZSBkZXRhaWxzLgorCisKK1BIWVNJQ0FMIERFU0NSSVBUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIFJhZGlvVHJhY2sgY2FyZCBpcyBhbiBJU0EgOC1iaXQgRk0gcmFkaW8gY2FyZC4gIFRoZSByYWRpbyBmcmVxdWVuY3kgKFJGKQoraW5wdXQgaXMgc2ltcGx5IGFuIGFudGVubmEgbGVhZCwgYW5kIHRoZSBvdXRwdXQgaXMgYSBwb3dlciBhdWRpbyBzaWduYWwKK2F2YWlsYWJsZSB0aHJvdWdoIGEgbWluaWF0dXJlIHBob25lIHBsdWcuICBJdHMgUkYgZnJlcXVlbmNpZXMgb2Ygb3BlcmF0aW9uIGFyZQorbW9yZSBvciBsZXNzIGxpbWl0ZWQgZnJvbSA4Ny4wIHRvIDEwOS4wIE1IeiAodGhlIGNvbW1lcmNpYWwgRk0gYnJvYWRjYXN0CitiYW5kKS4gIEFsdGhvdWdoIHRoZSByZWdpc3RlcnMgY2FuIGJlIHByb2dyYW1tZWQgdG8gcmVxdWVzdCBmcmVxdWVuY2llcyBiZXlvbmQKK3RoZXNlIGxpbWl0cywgZXhwZXJpbWVudHMgZGlkIG5vdCBnaXZlIHByb21pc2luZyByZXN1bHRzLiAgVGhlIHZhcmlhYmxlCitmcmVxdWVuY3kgb3NjaWxsYXRvciAoVkZPKSB0aGF0IGRlbW9kdWxhdGVzIHRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IChJRikKK3NpZ25hbCBwcm9iYWJseSBoYXMgYSBzbWFsbCByYW5nZSBvZiB1c2VmdWwgZnJlcXVlbmNpZXMsIGFuZCB3cmFwcyBhcm91bmQgb3IKK2dldHMgY2xpcHBlZCBiZXlvbmQgdGhlIGxpbWl0cyBtZW50aW9uZWQgYWJvdmUuCisKKworQ09OVFJPTExJTkcgVEhFIENBUkQgV0lUSCBJT1BPUlQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgUmFkaW9UcmFjayAoYmFzZSkgaW9wb3J0IGlzIGNvbmZpZ3VyYWJsZSBmb3IgMHgzMGMgb3IgMHgyMGMuICBPbmx5IG9uZQoraW9wb3J0IHNlZW1zIHRvIGJlIGludm9sdmVkLiAgVGhlIGlvcG9ydCBkZWNvZGluZyBjaXJjdWl0cnkgbXVzdCBiZSBwcmV0dHkKK3NpbXBsZSwgYXMgaW5kaXZpZHVhbCBpb3BvcnQgYml0cyBhcmUgZGlyZWN0bHkgbWF0Y2hlZCB0byBzcGVjaWZpYyBmdW5jdGlvbnMKKyhvciBibG9ja3MpIG9mIHRoZSByYWRpbyBjYXJkLiAgVGhpcyB3YXksIG1hbnkgZnVuY3Rpb25zIGNhbiBiZSBjaGFuZ2VkIGluCitwYXJhbGxlbCB3aXRoIG9uZSB3cml0ZSB0byB0aGUgaW9wb3J0LiAgVGhlIG9ubHkgZmVlZGJhY2sgYXZhaWxhYmxlIHRocm91Z2gKK3RoZSBpb3BvcnRzIGFwcGVhcnMgdG8gYmUgdGhlICJTdGVyZW8gRGV0ZWN0IiBiaXQuCisKK1RoZSBiaXRzIG9mIHRoZSBpb3BvcnQgYXJlIGFycmFuZ2VkIGFzIGZvbGxvd3M6CisKKyAgTVNiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFNiCisrLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0rCit8IFZvbEEgfCBWb2xCIHwgPz8/PyB8IFN0ZXJlbyB8IFJhZGlvICB8IFR1bmVBIHwgVHVuZUIgICB8IFR1bmUgICB8Cit8ICAoKykgfCAgKC0pIHwgICAgICB8IERldGVjdCB8IEF1ZGlvICB8IChiaXQpIHwgKGxhdGNoKSB8IFVwZGF0ZSB8Cit8ICAgICAgfCAgICAgIHwgICAgICB8IEVuYWJsZSB8IEVuYWJsZSB8ICAgICAgIHwgICAgICAgICB8IEVuYWJsZSB8CisrLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0rCisKKworVm9sQSAuIFZvbEIgIFtBQi4uLi4uLl0KKy0tLS0tLS0tLS0tCiswIDAgOiBhdWRpbyBtdXRlCiswIDEgOiB2b2x1bWUgKyAgICAoc29tZSBkZWxheSByZXF1aXJlZCkKKzEgMCA6IHZvbHVtZSAtICAgIChzb21lIGRlbGF5IHJlcXVpcmVkKQorMSAxIDogc3RheSBhdCBwcmVzZW50IHZvbHVtZQorCitTdGVyZW8gRGV0ZWN0IEVuYWJsZSBbLi4uUy4uLi5dCistLS0tLS0tLS0tLS0tLS0tLS0tLQorMCA6IE5vIERldGVjdAorMSA6IERldGVjdAorCisgIFJlc3VsdHMgYXZhaWxhYmxlIGJ5IHJlYWRpbmcgaW9wb3J0ID42MCBtc2VjIGFmdGVyIGxhc3QgcG9ydCB3cml0ZS4KKyAgMHhmZiA9PT4gbm8gc3RlcmVvIGRldGVjdGVkLCAgMHhmZCA9PT4gc3RlcmVvIGRldGVjdGVkLgorCitSYWRpbyB0byBBdWRpbyAocGF0aCkgRW5hYmxlIFsuLi4uUi4uLl0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAgOiBEaXNhYmxlIHBhdGggKHNpbGVuY2UpCisxIDogRW5hYmxlIHBhdGggIChhdWRpbyBwcm9kdWNlZCkKKworVHVuZUEgLiBUdW5lQiBbLi4uLi5BQi5dCistLS0tLS0tLS0tLS0tCiswIDAgOiAiemVybyIgYml0IHBoYXNlIDEKKzAgMSA6ICJ6ZXJvIiBiaXQgcGhhc2UgMgorCisxIDAgOiAib25lIiBiaXQgcGhhc2UgMQorMSAxIDogIm9uZSIgYml0IHBoYXNlIDIKKworICAyNC1iaXQgY29kZSwgd2hlcmUgYml0cyA9IChmcmVxKjQwKSArIDEwNDg2MTg4LgorICBUaGUgTW9zdCBTaWduaWZpY2FudCAxMSBiaXRzIG11c3QgYmUgMTAxMCB4eHh4IDB4MCB0byBiZSB2YWxpZC4KKyAgVGhlIGJpdHMgYXJlIHNoaWZ0ZWQgaW4gTFNiIGZpcnN0LgorCitUdW5lIFVwZGF0ZSBFbmFibGUgWy4uLi4uLi5UXQorLS0tLS0tLS0tLS0tLS0tLS0tCiswIDogVHVuZXIgaGVsZCBjb25zdGFudAorMSA6IFR1bmVyIHVwZGF0aW5nIGluIHByb2dyZXNzCisKKworUFJPR1JBTU1JTkcgRVhBTVBMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitEZWZhdWx0OiAgICAgICAgQkFTRSA8LS0gMHhjOCAgKGN1cnJlbnQgdm9sdW1lLCBubyBzdGVyZW8gZGV0ZWN0LAorCQkJCXJhZGlvIGVuYWJsZSwgdHVuZXIgYWRqdXN0IGRpc2FibGUpCisKK0NhcmQgT2ZmOglCQVNFIDwtLSAweDAwICAoYXVkaW8gbXV0ZSwgbm8gc3RlcmVvIGRldGVjdCwKKwkJCQlyYWRpbyBkaXNhYmxlLCB0dW5lciBhZGp1c3QgZGlzYWJsZSkKKworQ2FyZCBPbjoJQkFTRSA8LS0gMHgwMCAgKHNlZSAiQ2FyZCBPZmYiLCBjbGVhcnMgYW55IHVuZmluaXNoZWQgYnVzaW5lc3MpCisJCUJBU0UgPC0tIDB4YzggIChzZWUgIkRlZmF1bHQiKQorCitWb2x1bWUgRG93bjogICAgQkFTRSA8LS0gMHg0OCAgKHZvbHVtZSBkb3duLCBubyBzdGVyZW8gZGV0ZWN0LAorCQkJCXJhZGlvIGVuYWJsZSwgdHVuZXIgYWRqdXN0IGRpc2FibGUpCisJCSogd2FpdCAxMCBtc2VjICoKKwkJQkFTRSA8LS0gMHhjOCAgKHNlZSAiRGVmYXVsdCIpCisKK1ZvbHVtZSBVcDogICAgICBCQVNFIDwtLSAweDg4ICAodm9sdW1lIHVwLCBubyBzdGVyZW8gZGV0ZWN0LAorCQkJCXJhZGlvIGVuYWJsZSwgdHVuZXIgYWRqdXN0IGRpc2FibGUpCisJCSogd2FpdCAxMCBtc2VjICoKKwkJQkFTRSA8LS0gMHhjOCAgKHNlZSAiRGVmYXVsdCIpCisKK0NoZWNrIFN0ZXJlbzogICBCQVNFIDwtLSAweGQ4ICAoY3VycmVudCB2b2x1bWUsIHN0ZXJlbyBkZXRlY3QsCisJCQkJcmFkaW8gZW5hYmxlLCB0dW5lciBhZGp1c3QgZGlzYWJsZSkKKwkJKiB3YWl0IDEwMCBtc2VjICoKKwkJeCA8LS0gQkFTRSAgICAgKHJlYWQgaW9wb3J0KQorCQlCQVNFIDwtLSAweGM4ICAoc2VlICJEZWZhdWx0IikKKworCQl4PTB4ZmYgPT0+ICJub3Qgc3RlcmVvIiwgeD0weGZkID09PiAic3RlcmVvIGRldGVjdGVkIgorCitTZXQgRnJlcXVlbmN5OiAgY29kZSA9IChmcmVxKjQwKSArIDEwNDg2MTg4CisgICAgICAgICAgICAgICAgZm9yZWFjaCBvZiB0aGUgMjQgYml0cyBpbiBjb2RlLAorICAgICAgICAgICAgICAgIChmcm9tIExlYXN0IHRvIE1vc3QgU2lnbmlmaWNhbnQpOgorICAgICAgICAgICAgICAgICAgdG8gd3JpdGUgYSAiemVybyIgYml0LAorICAgICAgICAgICAgICAgICAgICBCQVNFIDwtLSAweDAxICAoYXVkaW8gbXV0ZSwgbm8gc3RlcmVvIGRldGVjdCwgcmFkaW8KKwkJCQkgICAgZGlzYWJsZSwgInplcm8iIGJpdCBwaGFzZSAxLCB0dW5lciBhZGp1c3QpCisgICAgICAgICAgICAgICAgICAgIEJBU0UgPC0tIDB4MDMgIChhdWRpbyBtdXRlLCBubyBzdGVyZW8gZGV0ZWN0LCByYWRpbworCQkJCSAgICBkaXNhYmxlLCAiemVybyIgYml0IHBoYXNlIDIsIHR1bmVyIGFkanVzdCkKKyAgICAgICAgICAgICAgICAgIHRvIHdyaXRlIGEgIm9uZSIgYml0LAorICAgICAgICAgICAgICAgICAgICBCQVNFIDwtLSAweDA1ICAoYXVkaW8gbXV0ZSwgbm8gc3RlcmVvIGRldGVjdCwgcmFkaW8KKwkJCQkgICAgZGlzYWJsZSwgIm9uZSIgYml0IHBoYXNlIDEsIHR1bmVyIGFkanVzdCkKKyAgICAgICAgICAgICAgICAgICAgQkFTRSA8LS0gMHgwNyAgKGF1ZGlvIG11dGUsIG5vIHN0ZXJlbyBkZXRlY3QsIHJhZGlvCisJCQkJICAgIGRpc2FibGUsICJvbmUiIGJpdCBwaGFzZSAyLCB0dW5lciBhZGp1c3QpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjYudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2Ni50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhYzMzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjYudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1c5OTY2IENhbWVyYSBkcml2ZXIsIHdyaXR0ZW4gYnkgSmFrb2IgS2VtaSAoamFrb2Iua2VtaUB0ZWxpYS5jb20pCisKK0FmdGVyIGEgbG90IG9mIHdvcmsgaW4gc29mdGljZSAmIHdkYXNtLCByZWFkaW5nIC5wZGYtZmlsZXMgYW5kIHRpcmVzb21lCit0cmlhbC1hbmQtZXJyb3Igd29yayBJJ3ZlIGZpbmFsbHkgZ290IGV2ZXJ5dGhpbmcgdG8gd29yay4gSSBuZWVkZWQgdmlzaW9uIGZvciBhCityb2JvdGljcyBwcm9qZWN0IHNvIEkgYm9ycm93ZWQgdGhpcyBjYW1lcmEgZnJvbSBhIGZyaWVuZCBhbmQgc3RhcnRlZCBoYWNraW5nLgorQW55d2F5IEkndmUgY29udmVydGVkIG15IG9yaWdpbmFsIGNvZGUgZnJvbSB0aGUgQVZSIDhiaXQgUklTQyBDL0FTTSBjb2RlIGludG8KK2Egd29ya2luZyBMaW51eCBkcml2ZXIuCisKK1RvIGdldCBpdCB3b3JraW5nIHNpbXBseSBjb25maWd1cmUgeW91ciBrZXJuZWwgdG8gc3VwcG9ydAorcGFycG9ydCwgaWVlZTEyODQsIHZpZGVvNGxpbnV4IGFuZCB3OTk2NgorCitJZiB3OTk2NiBpcyBzdGF0aWNhbGx5IGxpbmtlZCBpdCB3aWxsIGFsd2F5cyBwZXJmb3JtIGFnZ3Jlc3NpdmUgcHJvYmluZyBmb3IKK3RoZSBjYW1lcmEuIElmIGJ1aWx0IGFzIGEgbW9kdWxlIHlvdSdsbCBoYXZlIG1vcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLgorCitPcHRpb25zOgorIG1vZHByb2JlIHc5OTY2Lm8gcGFyZGV2PXBhcnBvcnQwKG9yIHdoYXRldmVyKSBwYXJtb2RlPTAgKDA9YXV0bywgMT1lY3AsIDI9ZXBwKQordm9pbGEhCisKK3lvdSBjYW4gYWxzbyB0eXBlICdtb2RpbmZvIC1wIHc5OTY2Lm8nIGZvciBvcHRpb24gdXNhZ2UKKyhvciBjaGVja291dCB3OTk2Ni5jKQorCitUaGUgb25seSB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0aGUgaW1hZ2UgZm9ybWF0IGlzIGluIFktVS1ZLVYgZm9ybWF0Cit3aGVyZSBldmVyeSB0d28gcGl4ZWxzIHRha2UgNCBieXRlcy4gSW4gU0RMICh3d3cubGlic2RsLm9yZykgdGhpcyBmb3JtYXQKK2lzIGNhbGxlZCBWSURFT19QQUxFVFRFX1lVVjQyMiAoMTYgYnBwKS4KKworQSBtaW5pbWFsIHRlc3QgYXBwbGljYXRpb24gKHdpdGggc291cmNlKSBpcyBhdmFpbGFibGUgZnJvbToKKyAgaHR0cDovL2hlbS5meXJpc3RvcmcuY29tL21vZ3VsL3c5OTY2Lmh0bWwKKworVGhlIHNsb3cgZnJhbWVyYXRlIGlzIGR1ZSB0byBtaXNzaW5nIERNQSBFQ1AgcmVhZCBzdXBwb3J0IGluIHRoZSAKK3BhcnBvcnQgZHJpdmVycy4gSSBtaWdodCBhZGQgd29ya2luZyBFUFAgc3VwcG9ydCBsYXRlci4KKworR29vZCBsdWNrIQorICAgIC9KYWtvYiBLZW1pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzYxMjAudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2MTIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWY2YzUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2MTIwLnR4dApAQCAtMCwwICsxLDE1OSBAQAorRHJpdmVyIGZvciBUcnVzdCBDb21wdXRlciBQcm9kdWN0cyBGcmFtZWdyYWJiZXIsIHZlcnNpb24gMC42LjEKKy0tLS0tLSAtLS0gLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tICAtLS0tLS0tIC0gLSAtCisKKy0gWk9SQU4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXV0aG9yOiBQYXVsaW5lIE1pZGRlbGluayA8bWlkZGVsaW5AcG9seXdhcmUubmw+IAorICAgRGF0ZTogMTggU2VwdGVtYmVyIDE5OTkKK1ZlcnNpb246IDAuNi4xCisKKy0gRGVzY3JpcHRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZpZGVvNExpbnV4IGNvbXBhdGlibGUgZHJpdmVyIGZvciBhbiB1bmtub3duIGJyYW5kIGZyYW1lZ3JhYmJlcgorKFNvbGQgaW4gdGhlIE5ldGhlcmxhbmRzIGJ5IFRSVVNUIENvbXB1dGVyIFByb2R1Y3RzKSBhbmQgdmFyaW91cworb3RoZXIgem9yYW4genIzNjEyMCBiYXNlZCBmcmFtZWdyYWJiZXJzLgorCitUaGUgY2FyZCBjb250YWlucyBhIFpSMzYxMjAgTXVsdGltZWRpYSBQQ0kgSW50ZXJmYWNlIGFuZCBhIFBoaWxpcHMKK1NBQTcxMTAgT25lY2hpcCBGcm9udGVuZCB2aWRlb2RlY29kZXIuIFRoZXJlIGlzIGFsc28gYW4gRFNQIG9mCit3aGljaCBJIGhhdmUgZm9yZ290dGVuIHRoZSBudW1iZXIsIHNpbmNlIGkgd2lsbCBuZXZlciBnZXQgdGhhdCB0aGluZwordG8gd29yayB3aXRob3V0IHNwZWNzIGZyb20gdGhlIHZlbmRvciBpdHNlbGYuCisKK1RoZSBTQUE3MTF4IGFyZSBjYXBhYmxlIG9mIHByb2Nlc3NpbmcgNiBkaWZmZXJlbnQgdmlkZW8gaW5wdXRzLAorQ1ZCUzEuLjYgYW5kIFkxK0MxLCBZMitDMiwgWTMrQzMuIEFsbCBpbiA1MC82MEh6LCBOVFNDLCBQQUwgb3IKK1NFQ0FNIGFuZCBkZWxpdmVyaW5nIGEgWVVWIGRhdGFzdHJlYW0uICBPbiBteSBjYXJkIHRoZSBpbnB1dAorJ0NWQlMtMCcgY29ycmVzcG9uZHMgdG8gY2hhbm5lbCBDVkJTMiBhbmQgJ1MtVmlkZW8nIHRvIFkyK0MyLgorCitJIGhhdmUgc29tZSByZXBvcnRzIG9mIG90aGVyIGNhcmRzIHdvcmtpbmcgd2l0aCB0aGUgbWVudGlvbmVkCitjaGlwIHNldHMuIEZvciBhIGxpc3Qgb2Ygb3RoZXIgd29ya2luZyBjYXJkcyBwbGVhc2UgaGF2ZSBhIGxvb2sKK2F0IHRoZSBjYXJkcyBuYW1lZCBpbiB0aGUgdHZjYXJkcyBzdHJ1Y3QgaW4gdGhlIGJlZ2lubmluZyBvZgorenIzNjEyMC5jCisKK0FmdGVyIHNvbWUgdGVzdGluZywgSSBkaXNjb3ZlcmVkIHRoYXQgdGhlIGNhcmRkZXNpZ25lciBtZXNzZWQgdXAKK29uIHRoZSBJMkMgaW50ZXJmYWNlLiBUaGUgWm9yYW4gY2hpcCBpbmNsdWRlcyAyIGxpbmVzIFNEQSBhbmQgU0NMCit3aGljaCAocyloZSBjb25uZWN0ZWQgcmV2ZXJzZWx5LiBTbyB3ZSBoYXZlIHRvIGNsb2NrIG9uIHRoZSBTREEKK2FuZCByL3cgZGF0YSBvbiB0aGUgU0NMIHBpbi4gTGlmZSBpcyBmdW4uLi4gRWFjaCBjYXJkdHlwZSBub3cgaGFzCithIGJpdCB3aGljaCBzaWduaWZpZXMgaWYgeW91IGhhdmUgYSBjYXJkIHdpdGggdGhlIHNhbWUgZGVmaWNpZW5jeS4KKworT2gsIGZvciB0aGUgY29tcGxldGVuZXNzIG9mIHRoaXMgc3RvcnkgSSBtdXN0IG1lbnRpb24gdGhhdCBteQorY2FyZCBkZWxpdmVycyB0aGUgVlNZTkMgcHVsc2Ugb2YgdGhlIFNBQSBjaGlwIHRvIEdJUlExLCBub3QKK0dJUlEwIGFzIHNvbWUgb3RoZXIgY2FyZHMgaGF2ZS4gVGhpcyBpcyBhbHNvIGluY29ycG9yYXRlZCBpbgordGhlIGRyaXZlciBiZSBjbGVhcmluZy9zZXR0aW5nIHRoZSAndXNlaXJxMScgYml0IGluIHRoZSB0dmNhcmQKK2Rlc2NyaXB0aW9uLgorCitBbm90aGVyIHByb2JsZW1zIG9mIGNvbnRpbnVvdXMgY2FwdHVyaW5nIGRhdGEgd2l0aCBhIFpvcmFuIGNoaXAKK2lzIHNvbWV0aGluZyBuYXN0eSBpbnNpZGUgdGhlIGNoaXAuIEl0IGVmZmVjdGl2ZWx5IGhhbHZlcyB0aGUKK2ZwcyB3ZSBvdWdodCB0byBnZXQuLi4gSGVyZSBpcyB0aGUgc2NlbmFyaW86IGNhcHR1cmluZyBmcmFtZXMKK3RvIG1lbW9yeSBpcyBkb25lIGluIHRoZSBzby1jYWxsZWQgc25hcHNob3QgbW9kZS4gSW4gdGhpcyBtb2RlCit0aGUgWm9yYW4gc3RvcHMgYWZ0ZXIgY2FwdHVyaW5nIGEgZnJhbWUgd29ydGggb2YgZGF0YSBhbmQgd2FpdAordGlsbCB0aGUgYXBwbGljYXRpb24gc2V0IEdSQUIgYml0IHRvIGluZGljYXRlIHJlYWRpbmVzcyBmb3IgdGhlCituZXh0IGZyYW1lLiBBZnRlciBkZXRlY3RpbmcgYSBzZXQgYml0LCB0aGUgY2hpcCBuZWF0bHkgd2FpdHMKK3RpbGwgdGhlIHN0YXJ0IG9mIGEgZnJhbWUsIGNhcHR1cmVzIGl0IGFuZCBpdCBnb2VzIGJhY2sgdG8gb2ZmLgorU21hcnQgcHBsIHdpbGwgbm90aWNlIHRoZSBwcm9ibGVtIGhlcmUuIEl0cyB0aGUgd2FpdGluZyBvbiB0aGUKK19uZXh0XyBmcmFtZSBlYWNoIHRpbWUgd2Ugc2V0IHRoZSBHUkFCIGJpdC4uLiBPaCB3ZWxsLCAxMiw1IGZwcworaXMgc3RpbGwgcGxlbnR5IGZhc3QgZm9yIG1lLgorLS0gdXBkYXRlIDI4LzcvMTk5OSAtLQorRG9uJ3QgYmVsaWV2ZSBhIHdvcmQgSSBqdXN0IHNhaWQuLi4gUHJvb2YgaXMgdGhlIG91dHB1dAorb2YgYHN0cmVhbWVyIC10IDMwMCAtciAyNSAtZiBhdmkxNSAtbyAvZGV2L251bGxgCisJKystLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1CisJKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQorCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKKwkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1CisJKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQorCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKKwkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1CisJKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQorCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKKwkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1CisJKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQorCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0KKwlzeW5jZXI6IGRvbmUKKwl3cml0ZXI6IGRvbmUKKyhub3RlIHRoZSAvZGV2L251bGwgaXMgcHJ1ZGVudCBoZXJlLCBteSBzeXN0ZW0gaXMgbm90IGFibGUgdG8KKyBncmFiIC9hbmQvIHdyaXRlIDI1IGZwcyB0byBhIGZpbGUuLi4gZ2lmdHMgd2VsY29tZSA6KSApCitUaGUgdGVjaG5pY2FsIHJlYXNvbmluZyBmb2xsb3dzOiBUaGUgem9yYW4gY29tcGxldGVkIHRoZSBsYXN0CitmcmFtZSwgdGhlIFZTWU5DIGdvZXMgbG93LCBhbmQgR1JBQiBpcyBjbGVhcmVkLiBUaGUgaW50ZXJydXB0Cityb3V0aW5lIHN0YXJ0cyB0byB3b3JrIHNpbmNlIGl0cyBWU1lOQyBkcml2ZW4sIGFuZCBhZ2FpbgorYWN0aXZhdGVzIHRoZSBHUkFCIGJpdC4gQSBmZXcgbXMgbGF0ZXIgdGhlIFZTWU5DIChyZS0pcmlzZXMgYW5kCit0aGUgem9yYW4gc3RhcnRzIHRvIHdvcmsgb24gYSBuZXcgYW5kIGZyZXNobHkgYnJvYWRjYXN0ZWQgZnJhbWUuLi4uCisKK0ZvciBwb2ludGVycyBJIHVzZWQgdGhlIHNwZWNzIG9mIGJvdGggY2hpcHMuIEJlbG93IGFyZSB0aGUgVVJMczoKKwlodHRwOi8vd3d3LnpvcmFuLmNvbS9mdHAvZG93bmxvYWQvZGV2aWNlcy9wY2kvWlIzNjEyMC8zNjEyMGRhdGEucGRmCisJaHR0cDovL3d3dy11cy5zZW1pY29uZHVjdG9yLnBoaWxpcHMuY29tL2Fjcm9iYXQvZGF0YXNoZWV0cy9TQUFfNzExMF9BXzEucGRmCisKK1RoZSBkb2N1bWVudGF0aW9uIGhhcyB2ZXJ5IGxpdHRsZSBvbiBhYnNvbHV0ZSBudW1iZXJzIG9yIHRpbWluZ3MKK25lZWRlZCBmb3IgdGhlIHZhcmlvdXMgbW9kZXMvcmVzb2x1dGlvbnMsIGJ1dCB0aGVyZSBhcmUgb3RoZXIKK3Byb2dyYW1zIHlvdSBjYW4gYm9ycm93IHRob3NlIGZyb20uCisKKy0tLS0tLSBJbnN0YWxsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWFkIHRoZSBmaWxlIGNhbGxlZCBUT0RPLiAgTm90ZSBpdHMgbG9uZyBsaXN0IG9mIGxpbWl0YXRpb25zLgorCitCdWlsZCBhIGtlcm5lbCB3aXRoIFZJREVPNExJTlVYIGVuYWJsZWQuIEFjdGl2YXRlIHRoZQorQlQ4NDggZHJpdmVyOyB3ZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBoYXZlIG5lZWQgZm9yIHRoZQorb3RoZXIgbW9kdWxlcyAoaTJjIGFuZCB2aWRlb2RldikgaXQgZW5hYmxlcy4KKworVG8gaW5zdGFsbCB0aGlzIHNvZnR3YXJlLCBleHRyYWN0IGl0IGludG8gYSBzdWl0YWJsZSBkaXJlY3RvcnkuCitFeGFtaW5lIHRoZSBtYWtlZmlsZSBhbmQgY2hhbmdlIGFueXRoaW5nIHlvdSBkb24ndCBsaWtlLiAgVHlwZSAibWFrZSIuCisKK0FmdGVyIG1ha2luZyB0aGUgbW9kdWxlcyBjaGVjayBpZiB5b3UgaGF2ZSB0aGUgbXVjaCBuZWVkZWQKKy9kZXYvdmlkZW8gZGV2aWNlcy4gSWYgbm90LCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgNCBsaW5lczoKKwlta25vZCAvZGV2L3ZpZGVvIGMgODEgMAorCW1rbm9kIC9kZXYvdmlkZW8xIGMgODEgMQorCW1rbm9kIC9kZXYvdmlkZW8yIGMgODEgMgorCW1rbm9kIC9kZXYvdmlkZW8zIGMgODEgMworCW1rbm9kIC9kZXYvdmlkZW80IGMgODEgNAorCitBZnRlciBtYWtpbmcvY2hlY2tpbmcgdGhlIGRldmljZXMgZG86CisJbW9kcHJvYmUgaTJjCisJbW9kcHJvYmUgdmlkZW9kZXYKKwltb2Rwcm9iZSBzYWE3MTEwCShvcHRpb25hbCkKKwltb2Rwcm9iZSBzYWE3MTExCShvcHRpb25hbCkKKwltb2Rwcm9iZSB0dW5lcgkJKG9wdGlvbmFsKQorCWluc21vZCB6b3JhbiBjYXJkdHlwZT08bj4KKworPG4+IGlzIHRoZSBjYXJkdHlwZSBvZiB0aGUgY2FyZCB5b3UgaGF2ZS4gVGhlIGNhcmRudW1iZXIgY2FuCitiZSBmb3VuZCBpbiB0aGUgc291cmNlIG9mIHpyMzYxMjAuIExvb2sgZm9yIHR2Y2FyZHMuIElmIHlvdXIKK2NhcmQgaXMgbm90IHRoZXJlLCBwbGVhc2UgdHJ5IGlmIGFueSBvdGhlciBjYXJkIGdpdmVzIHNvbWUKK3Jlc3BvbnNlLCBhbmQgbWFpbCBtZSBpZiB5b3UgZ290IGEgd29ya2luZyB0dmNhcmQgYWRkaXRpb24uIAorCitQUy4gPFRWQ2FyZCBlZGl0b3JzIGJlaG9sZCEpCisgICAgRG9udCBmb3JnZXQgdG8gc2V0IHZpZGVvX2lucHV0IHRvIHRoZSBudW1iZXIgb2YgaW5wdXRzCisgICAgeW91IGRlZmluZWQgaW4gdGhlIHZpZGVvX211eCBwYXJ0IG9mIHRoZSB0dmNhcmQgZGVmaW5pdGlvbi4KKyAgICBJdHMgYSBjb21tb24gZXJyb3IgdG8gYWRkIGEgY2hhbm5lbCBidXQgbm90IGluY3JlbWVudGluZworICAgIHZpZGVvX2lucHV0IGFuZCBnZXR0aW5nIGFuZ3J5IHdpdGggbWUvdjRsL2xpbnV4L2xpbnVzIDooCisKK1lvdSBhcmUgbm93IHJlYWR5IHRvIHRlc3QgdGhlIGZyYW1lZ3JhYmJlciB3aXRoIHlvdXIgZmF2b3JpdGUKK3ZpZGVvNGxpbnV4IGNvbXBhdGlibGUgdG9vbAorCistLS0tLS0gQXBwbGljYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRldmljZSB3b3JrcyB3aXRoIGFsbCBWaWRlbzRMaW51eCBjb21wYXRpYmxlIGFwcGxpY2F0aW9ucywKK2dpdmVuIHRoZSBsaW1pdGF0aW9ucyBpbiB0aGUgVE9ETyBmaWxlLgorCistLS0tLS0gQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHVzZXMgdGhlIFY0TCBpbnRlcmZhY2UgYXMgb2Yga2VybmVsIHJlbGVhc2UgMi4xLjExNiwgYW5kIGluCitmYWN0IGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gYW55IGxvd2VyIHZlcnNpb24uICBUaGVyZSBhcmUgYSBjb3VwbGUKK29mIG1pbm9yIGRpZmZlcmVuY2VzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBhbW91bnQgb2YgZGF0YSByZXR1cm5lZAord2l0aCBlYWNoIGZyYW1lIHZhcmllcywgYW5kIG5vIGRvdWJ0IHRoZXJlIGFyZSBkaXNjcmVwYW5jaWVzIGR1ZSB0byBteQorbWlzdW5kZXJzdGFuZGluZyBvZiB0aGUgQVBJLiAgSSBpbnRlbmQgdG8gY29udmVydCB0aGlzIGRyaXZlciB0byB0aGUKK25ldyBWNEwyIEFQSSB3aGVuIGl0IGhhcyBzdGFiaWxpemVkIG1vcmUuCisKKy0tLS0tLSBDdXJyZW50IHN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgaXMgY2FwYWJsZSBvZiBvdmVybGF5aW5nIGEgdmlkZW8gaW1hZ2UgaW4gc2NyZWVuLCBhbmQKK2V2ZW4gY2FwYWJsZSBvZiBncmFiYmluZyBmcmFtZXMuIEl0IHVzZXMgdGhlIEJJR1BIWVNBUkVBIHBhdGNoCit0byBhbGxvY2F0ZSBsb3RzIG9mIGxhcmdlIG1lbW9yeSBibG9ja3Mgd2hlbiB0aXMgcGF0Y2ggaXMKK2ZvdW5kIGluIHRoZSBrZXJuZWwsIGJ1dCBpdCBkb2Vzbid0IG5lZWQgaXQuCitUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCwgd2hlbiBsb2FkaW5nIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUsCit0aGUgbW9kdWxlIG1heSB0ZWxsIHlvdSBpdCdzIG91dCBvZiBtZW1vcnksIGJ1dCAnZnJlZScgc2F5cworb3RoZXJ3aXNlLiBUaGUgcmVhc29uIGlzIHNpbXBsZTsgdGhlIG1vZHVsZXMgd2FudHMgaXRzIG1lbW9yeQorY29udGlndW91cywgbm90IGZyYWdtZW50ZWQsIGFuZCBhZnRlciBhIGxvbmcgdXB0aW1lIHRoZXJlCitwcm9iYWJseSBpc24ndCBhIGZyYWdtZW50IG9mIG1lbW9yeSBsYXJnZSBlbm91Z2guLi4KKworVGhlIGRyaXZlciB1c2VzIGEgZG91YmxlIGJ1ZmZlcmluZyBzY2hlbWUsIHdoaWNoIHNob3VsZCByZWFsbHkKK2JlIGFuIG4td2F5IGJ1ZmZlciwgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGFsbG9jYXRlZCBmcmFtZWJ1ZmZlcgorYW5kIHRoZSByZXF1ZXN0ZWQgZ3JhYi1zaXplL2Zvcm1hdC4KK1RoaXMgY3VycmVudCB2ZXJzaW9uIGFsc28gZml4ZXMgYSBkZWFkLWxvY2sgc2l0dWF0aW9uIGR1cmluZyBpcnEKK3RpbWUsIHdoaWNoIHJlYWxseSwgcmVhbGx5IGZyb3plIG15IHN5c3RlbS4uLiA6KQorCitHb29kIGx1Y2suCisgIFBhdWxpbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vYmFsYW5jZSBiL0RvY3VtZW50YXRpb24vdm0vYmFsYW5jZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNkMzFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9iYWxhbmNlCkBAIC0wLDAgKzEsOTMgQEAKK1N0YXJ0ZWQgSmFuIDIwMDAgYnkgS2Fub2ogU2FyY2FyIDxrYW5vakBzZ2kuY29tPgorCitNZW1vcnkgYmFsYW5jaW5nIGlzIG5lZWRlZCBmb3Igbm9uIF9fR0ZQX1dBSVQgYXMgd2VsbCBhcyBmb3Igbm9uCitfX0dGUF9JTyBhbGxvY2F0aW9ucy4KKworVGhlcmUgYXJlIHR3byByZWFzb25zIHRvIGJlIHJlcXVlc3Rpbmcgbm9uIF9fR0ZQX1dBSVQgYWxsb2NhdGlvbnM6Cit0aGUgY2FsbGVyIGNhbiBub3Qgc2xlZXAgKHR5cGljYWxseSBpbnRyIGNvbnRleHQpLCBvciBkb2VzIG5vdCB3YW50Cit0byBpbmN1ciBjb3N0IG92ZXJoZWFkcyBvZiBwYWdlIHN0ZWFsaW5nIGFuZCBwb3NzaWJsZSBzd2FwIGlvIGZvcgord2hhdGV2ZXIgcmVhc29ucy4KKworX19HRlBfSU8gYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgbWFkZSB0byBwcmV2ZW50IGZpbGUgc3lzdGVtIGRlYWRsb2Nrcy4KKworSW4gdGhlIGFic2VuY2Ugb2Ygbm9uIHNsZWVwYWJsZSBhbGxvY2F0aW9uIHJlcXVlc3RzLCBpdCBzZWVtcyBkZXRyaW1lbnRhbAordG8gYmUgZG9pbmcgYmFsYW5jaW5nLiBQYWdlIHJlY2xhbWF0aW9uIGNhbiBiZSBraWNrZWQgb2ZmIGxhemlseSwgdGhhdAoraXMsIG9ubHkgd2hlbiBuZWVkZWQgKGFrYSB6b25lIGZyZWUgbWVtb3J5IGlzIDApLCBpbnN0ZWFkIG9mIG1ha2luZyBpdAorYSBwcm9hY3RpdmUgcHJvY2Vzcy4KKworVGhhdCBiZWluZyBzYWlkLCB0aGUga2VybmVsIHNob3VsZCB0cnkgdG8gZnVsZmlsbCByZXF1ZXN0cyBmb3IgZGlyZWN0CittYXBwZWQgcGFnZXMgZnJvbSB0aGUgZGlyZWN0IG1hcHBlZCBwb29sLCBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayBvbgordGhlIGRtYSBwb29sLCBzbyBhcyB0byBrZWVwIHRoZSBkbWEgcG9vbCBmaWxsZWQgZm9yIGRtYSByZXF1ZXN0cyAoYXRvbWljCitvciBub3QpLiBBIHNpbWlsYXIgYXJndW1lbnQgYXBwbGllcyB0byBoaWdobWVtIGFuZCBkaXJlY3QgbWFwcGVkIHBhZ2VzLgorT1RPSCwgaWYgdGhlcmUgaXMgYSBsb3Qgb2YgZnJlZSBkbWEgcGFnZXMsIGl0IGlzIHByZWZlcmFibGUgdG8gc2F0aXNmeQorcmVndWxhciBtZW1vcnkgcmVxdWVzdHMgYnkgYWxsb2NhdGluZyBvbmUgZnJvbSB0aGUgZG1hIHBvb2wsIGluc3RlYWQKK29mIGluY3VycmluZyB0aGUgb3ZlcmhlYWQgb2YgcmVndWxhciB6b25lIGJhbGFuY2luZy4KKworSW4gMi4yLCBtZW1vcnkgYmFsYW5jaW5nL3BhZ2UgcmVjbGFtYXRpb24gd291bGQga2ljayBvZmYgb25seSB3aGVuIHRoZQorX3RvdGFsXyBudW1iZXIgb2YgZnJlZSBwYWdlcyBmZWxsIGJlbG93IDEvNjQgdGggb2YgdG90YWwgbWVtb3J5LiBXaXRoIHRoZQorcmlnaHQgcmF0aW8gb2YgZG1hIGFuZCByZWd1bGFyIG1lbW9yeSwgaXQgaXMgcXVpdGUgcG9zc2libGUgdGhhdCBiYWxhbmNpbmcKK3dvdWxkIG5vdCBiZSBkb25lIGV2ZW4gd2hlbiB0aGUgZG1hIHpvbmUgd2FzIGNvbXBsZXRlbHkgZW1wdHkuIDIuMiBoYXMKK2JlZW4gcnVubmluZyBwcm9kdWN0aW9uIG1hY2hpbmVzIG9mIHZhcnlpbmcgbWVtb3J5IHNpemVzLCBhbmQgc2VlbXMgdG8gYmUKK2RvaW5nIGZpbmUgZXZlbiB3aXRoIHRoZSBwcmVzZW5jZSBvZiB0aGlzIHByb2JsZW0uIEluIDIuMywgZHVlIHRvCitISUdITUVNLCB0aGlzIHByb2JsZW0gaXMgYWdncmF2YXRlZC4KKworSW4gMi4zLCB6b25lIGJhbGFuY2luZyBjYW4gYmUgZG9uZSBpbiBvbmUgb2YgdHdvIHdheXM6IGRlcGVuZGluZyBvbiB0aGUKK3pvbmUgc2l6ZSAoYW5kIHBvc3NpYmx5IG9mIHRoZSBzaXplIG9mIGxvd2VyIGNsYXNzIHpvbmVzKSwgd2UgY2FuIGRlY2lkZQorYXQgaW5pdCB0aW1lIGhvdyBtYW55IGZyZWUgcGFnZXMgd2Ugc2hvdWxkIGFpbSBmb3Igd2hpbGUgYmFsYW5jaW5nIGFueQorem9uZS4gVGhlIGdvb2QgcGFydCBpcywgd2hpbGUgYmFsYW5jaW5nLCB3ZSBkbyBub3QgbmVlZCB0byBsb29rIGF0IHNpemVzCitvZiBsb3dlciBjbGFzcyB6b25lcywgdGhlIGJhZCBwYXJ0IGlzLCB3ZSBtaWdodCBkbyB0b28gZnJlcXVlbnQgYmFsYW5jaW5nCitkdWUgdG8gaWdub3JpbmcgcG9zc2libHkgbG93ZXIgdXNhZ2UgaW4gdGhlIGxvd2VyIGNsYXNzIHpvbmVzLiBBbHNvLAord2l0aCBhIHNsaWdodCBjaGFuZ2UgaW4gdGhlIGFsbG9jYXRpb24gcm91dGluZSwgaXQgaXMgcG9zc2libGUgdG8gcmVkdWNlCit0aGUgbWVtY2xhc3MoKSBtYWNybyB0byBiZSBhIHNpbXBsZSBlcXVhbGl0eS4KKworQW5vdGhlciBwb3NzaWJsZSBzb2x1dGlvbiBpcyB0aGF0IHdlIGJhbGFuY2Ugb25seSB3aGVuIHRoZSBmcmVlIG1lbW9yeQorb2YgYSB6b25lIF9hbmRfIGFsbCBpdHMgbG93ZXIgY2xhc3Mgem9uZXMgZmFsbHMgYmVsb3cgMS82NHRoIG9mIHRoZQordG90YWwgbWVtb3J5IGluIHRoZSB6b25lIGFuZCBpdHMgbG93ZXIgY2xhc3Mgem9uZXMuIFRoaXMgZml4ZXMgdGhlIDIuMgorYmFsYW5jaW5nIHByb2JsZW0sIGFuZCBzdGF5cyBhcyBjbG9zZSB0byAyLjIgYmVoYXZpb3IgYXMgcG9zc2libGUuIEFsc28sCit0aGUgYmFsYW5jaW5nIGFsZ29yaXRobSB3b3JrcyB0aGUgc2FtZSB3YXkgb24gdGhlIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywKK3doaWNoIGhhdmUgZGlmZmVyZW50IG51bWJlcnMgYW5kIHR5cGVzIG9mIHpvbmVzLiBJZiB3ZSB3YW50ZWQgdG8gZ2V0CitmYW5jeSwgd2UgY291bGQgYXNzaWduIGRpZmZlcmVudCB3ZWlnaHRzIHRvIGZyZWUgcGFnZXMgaW4gZGlmZmVyZW50Cit6b25lcyBpbiB0aGUgZnV0dXJlLgorCitOb3RlIHRoYXQgaWYgdGhlIHNpemUgb2YgdGhlIHJlZ3VsYXIgem9uZSBpcyBodWdlIGNvbXBhcmVkIHRvIGRtYSB6b25lLAoraXQgYmVjb21lcyBsZXNzIHNpZ25pZmljYW50IHRvIGNvbnNpZGVyIHRoZSBmcmVlIGRtYSBwYWdlcyB3aGlsZQorZGVjaWRpbmcgd2hldGhlciB0byBiYWxhbmNlIHRoZSByZWd1bGFyIHpvbmUuIFRoZSBmaXJzdCBzb2x1dGlvbgorYmVjb21lcyBtb3JlIGF0dHJhY3RpdmUgdGhlbi4KKworVGhlIGFwcGVuZGVkIHBhdGNoIGltcGxlbWVudHMgdGhlIHNlY29uZCBzb2x1dGlvbi4gSXQgYWxzbyAiZml4ZXMiIHR3bworcHJvYmxlbXM6IGZpcnN0LCBrc3dhcGQgaXMgd29rZW4gdXAgYXMgaW4gMi4yIG9uIGxvdyBtZW1vcnkgY29uZGl0aW9ucworZm9yIG5vbi1zbGVlcGFibGUgYWxsb2NhdGlvbnMuIFNlY29uZCwgdGhlIEhJR0hNRU0gem9uZSBpcyBhbHNvIGJhbGFuY2VkLAorc28gYXMgdG8gZ2l2ZSBhIGZpZ2h0aW5nIGNoYW5jZSBmb3IgcmVwbGFjZV93aXRoX2hpZ2htZW0oKSB0byBnZXQgYQorSElHSE1FTSBwYWdlLCBhcyB3ZWxsIGFzIHRvIGVuc3VyZSB0aGF0IEhJR0hNRU0gYWxsb2NhdGlvbnMgZG8gbm90CitmYWxsIGJhY2sgaW50byByZWd1bGFyIHpvbmUuIFRoaXMgYWxzbyBtYWtlcyBzdXJlIHRoYXQgSElHSE1FTSBwYWdlcworYXJlIG5vdCBsZWFrZWQgKGZvciBleGFtcGxlLCBpbiBzaXR1YXRpb25zIHdoZXJlIGEgSElHSE1FTSBwYWdlIGlzIGluIAordGhlIHN3YXBjYWNoZSBidXQgaXMgbm90IGJlaW5nIHVzZWQgYnkgYW55b25lKQorCitrc3dhcGQgYWxzbyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSB6b25lcyBpdCBzaG91bGQgYmFsYW5jZS4ga3N3YXBkIGlzCitwcmltYXJpbHkgbmVlZGVkIGluIGEgc2l0dWF0aW9uIHdoZXJlIGJhbGFuY2luZyBjYW4gbm90IGJlIGRvbmUsIAorcHJvYmFibHkgYmVjYXVzZSBhbGwgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgY29taW5nIGZyb20gaW50ciBjb250ZXh0CithbmQgYWxsIHByb2Nlc3MgY29udGV4dHMgYXJlIHNsZWVwaW5nLiBGb3IgMi4zLCBrc3dhcGQgZG9lcyBub3QgcmVhbGx5CituZWVkIHRvIGJhbGFuY2UgdGhlIGhpZ2htZW0gem9uZSwgc2luY2UgaW50ciBjb250ZXh0IGRvZXMgbm90IHJlcXVlc3QKK2hpZ2htZW0gcGFnZXMuIGtzd2FwZCBsb29rcyBhdCB0aGUgem9uZV93YWtlX2tzd2FwZCBmaWVsZCBpbiB0aGUgem9uZQorc3RydWN0dXJlIHRvIGRlY2lkZSB3aGV0aGVyIGEgem9uZSBuZWVkcyBiYWxhbmNpbmcuCisKK1BhZ2Ugc3RlYWxpbmcgZnJvbSBwcm9jZXNzIG1lbW9yeSBhbmQgc2htIGlzIGRvbmUgaWYgc3RlYWxpbmcgdGhlIHBhZ2Ugd291bGQKK2FsbGV2aWF0ZSBtZW1vcnkgcHJlc3N1cmUgb24gYW55IHpvbmUgaW4gdGhlIHBhZ2UncyBub2RlIHRoYXQgaGFzIGZhbGxlbiBiZWxvdworaXRzIHdhdGVybWFyay4KKworcGFnZXNfbWluL3BhZ2VzX2xvdy9wYWdlc19oaWdoL2xvd19vbl9tZW1vcnkvem9uZV93YWtlX2tzd2FwZDogVGhlc2UgYXJlIAorcGVyLXpvbmUgZmllbGRzLCB1c2VkIHRvIGRldGVybWluZSB3aGVuIGEgem9uZSBuZWVkcyB0byBiZSBiYWxhbmNlZC4gV2hlbgordGhlIG51bWJlciBvZiBwYWdlcyBmYWxscyBiZWxvdyBwYWdlc19taW4sIHRoZSBoeXN0ZXJpYyBmaWVsZCBsb3dfb25fbWVtb3J5CitnZXRzIHNldC4gVGhpcyBzdGF5cyBzZXQgdGlsbCB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgYmVjb21lcyBwYWdlc19oaWdoLgorV2hlbiBsb3dfb25fbWVtb3J5IGlzIHNldCwgcGFnZSBhbGxvY2F0aW9uIHJlcXVlc3RzIHdpbGwgdHJ5IHRvIGZyZWUgc29tZQorcGFnZXMgaW4gdGhlIHpvbmUgKHByb3ZpZGluZyBHRlBfV0FJVCBpcyBzZXQgaW4gdGhlIHJlcXVlc3QpLiBPcnRob2dvbmFsCit0byB0aGlzLCBpcyB0aGUgZGVjaXNpb24gdG8gcG9rZSBrc3dhcGQgdG8gZnJlZSBzb21lIHpvbmUgcGFnZXMuIFRoYXQKK2RlY2lzaW9uIGlzIG5vdCBoeXN0ZXJlc2lzIGJhc2VkLCBhbmQgaXMgZG9uZSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZQorcGFnZXMgaXMgYmVsb3cgcGFnZXNfbG93OyBpbiB3aGljaCBjYXNlIHpvbmVfd2FrZV9rc3dhcGQgaXMgYWxzbyBzZXQuCisKKworKEdvb2QpIElkZWFzIHRoYXQgSSBoYXZlIGhlYXJkOgorMS4gRHluYW1pYyBleHBlcmllbmNlIHNob3VsZCBpbmZsdWVuY2UgYmFsYW5jaW5nOiBudW1iZXIgb2YgZmFpbGVkIHJlcXVlc3RzCitmb3IgYSB6b25lIGNhbiBiZSB0cmFja2VkIGFuZCBmZWQgaW50byB0aGUgYmFsYW5jaW5nIHNjaGVtZSAoamFsdm9AbWJheS5uZXQpCisyLiBJbXBsZW1lbnQgYSByZXBsYWNlX3dpdGhfaGlnaG1lbSgpLWxpa2UgcmVwbGFjZV93aXRoX3JlZ3VsYXIoKSB0byBwcmVzZXJ2ZQorZG1hIHBhZ2VzLiAobGtkQHRhbnRhbG9waGlsZS5kZW1vbi5jby51aykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5YmNkMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CkBAIC0wLDAgKzEsMjg0IEBACisKK1RoZSBpbnRlbnQgb2YgdGhpcyBmaWxlIGlzIHRvIGdpdmUgYSBicmllZiBzdW1tYXJ5IG9mIGh1Z2V0bGJwYWdlIHN1cHBvcnQgaW4KK3RoZSBMaW51eCBrZXJuZWwuICBUaGlzIHN1cHBvcnQgaXMgYnVpbHQgb24gdG9wIG9mIG11bHRpcGxlIHBhZ2Ugc2l6ZSBzdXBwb3J0Cit0aGF0IGlzIHByb3ZpZGVkIGJ5IG1vc3QgbW9kZXJuIGFyY2hpdGVjdHVyZXMuICBGb3IgZXhhbXBsZSwgaTM4NgorYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIDRLIGFuZCA0TSAoMk0gaW4gUEFFIG1vZGUpIHBhZ2Ugc2l6ZXMsIGlhNjQKK2FyY2hpdGVjdHVyZSBzdXBwb3J0cyBtdWx0aXBsZSBwYWdlIHNpemVzIDRLLCA4SywgNjRLLCAyNTZLLCAxTSwgNE0sIDE2TSwKKzI1Nk0gYW5kIHBwYzY0IHN1cHBvcnRzIDRLIGFuZCAxNk0uICBBIFRMQiBpcyBhIGNhY2hlIG9mIHZpcnR1YWwtdG8tcGh5c2ljYWwKK3RyYW5zbGF0aW9ucy4gIFR5cGljYWxseSB0aGlzIGlzIGEgdmVyeSBzY2FyY2UgcmVzb3VyY2Ugb24gcHJvY2Vzc29yLgorT3BlcmF0aW5nIHN5c3RlbXMgdHJ5IHRvIG1ha2UgYmVzdCB1c2Ugb2YgbGltaXRlZCBudW1iZXIgb2YgVExCIHJlc291cmNlcy4KK1RoaXMgb3B0aW1pemF0aW9uIGlzIG1vcmUgY3JpdGljYWwgbm93IGFzIGJpZ2dlciBhbmQgYmlnZ2VyIHBoeXNpY2FsIG1lbW9yaWVzCisoc2V2ZXJhbCBHQnMpIGFyZSBtb3JlIHJlYWRpbHkgYXZhaWxhYmxlLgorCitVc2VycyBjYW4gdXNlIHRoZSBodWdlIHBhZ2Ugc3VwcG9ydCBpbiBMaW51eCBrZXJuZWwgYnkgZWl0aGVyIHVzaW5nIHRoZSBtbWFwCitzeXN0ZW0gY2FsbCBvciBzdGFuZGFyZCBTWVN2IHNoYXJlZCBtZW1vcnkgc3lzdGVtIGNhbGxzIChzaG1nZXQsIHNobWF0KS4KKworRmlyc3QgdGhlIExpbnV4IGtlcm5lbCBuZWVkcyB0byBiZSBidWlsdCB3aXRoIENPTkZJR19IVUdFVExCX1BBR0UgKHByZXNlbnQKK3VuZGVyIFByb2Nlc3NvciB0eXBlcyBhbmQgZmVhdHVyZSkgIGFuZCBDT05GSUdfSFVHRVRMQkZTIChwcmVzZW50IHVuZGVyIGZpbGUKK3N5c3RlbSBvcHRpb24gb24gY29uZmlnIG1lbnUpIGNvbmZpZyBvcHRpb25zLgorCitUaGUga2VybmVsIGJ1aWx0IHdpdGggaHVnZXBhZ2Ugc3VwcG9ydCBzaG91bGQgc2hvdyB0aGUgbnVtYmVyIG9mIGNvbmZpZ3VyZWQKK2h1Z2VwYWdlcyBpbiB0aGUgc3lzdGVtIGJ5IHJ1bm5pbmcgdGhlICJjYXQgL3Byb2MvbWVtaW5mbyIgY29tbWFuZC4gIAorCisvcHJvYy9tZW1pbmZvIGFsc28gcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRvdGFsIG51bWJlciBvZiBodWdldGxiCitwYWdlcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuICBJdCBhbHNvIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorbnVtYmVyIG9mIGZyZWUgaHVnZXRsYiBwYWdlcyBhdCBhbnkgdGltZS4gIEl0IGFsc28gZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBjb25maWd1cmVkIGh1Z2VwYWdlIHNpemUgLSB0aGlzIGlzIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgcHJvcGVyCithbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIGFyZ3VtZW50cyB0byB0aGUgYWJvdmUgc3lzdGVtIGNhbGxzLgorCitUaGUgb3V0cHV0IG9mICJjYXQgL3Byb2MvbWVtaW5mbyIgd2lsbCBoYXZlIG91dHB1dCBsaWtlOgorCisuLi4uLgorSHVnZVBhZ2VzX1RvdGFsOiB4eHgKK0h1Z2VQYWdlc19GcmVlOiAgeXl5CitIdWdlcGFnZXNpemU6ICAgIHp6eiBLQgorCisvcHJvYy9maWxlc3lzdGVtcyBzaG91bGQgYWxzbyBzaG93IGEgZmlsZXN5c3RlbSBvZiB0eXBlICJodWdldGxiZnMiIGNvbmZpZ3VyZWQKK2luIHRoZSBrZXJuZWwuCisKKy9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMgaW5kaWNhdGVzIHRoZSBjdXJyZW50IG51bWJlciBvZiBjb25maWd1cmVkIGh1Z2V0bGIKK3BhZ2VzIGluIHRoZSBrZXJuZWwuICBTdXBlciB1c2VyIGNhbiBkeW5hbWljYWxseSByZXF1ZXN0IG1vcmUgKG9yIGZyZWUgc29tZQorcHJlLWNvbmZpZ3VyZWQpIGh1Z2VwYWdlcy4gCitUaGUgYWxsb2NhdGlvbiggb3IgZGVhbGxvY2F0aW9uKSBvZiBodWdldGxiIHBhZ2VzIGlzIHBvc2libGUgb25seSBpZiB0aGVyZSBhcmUKK2Vub3VnaCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgZnJlZSBwYWdlcyBpbiBzeXN0ZW0gKGZyZWVpbmcgb2YgaHVnZXBhZ2VzIGlzCitwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZSBlbm91Z2ggaHVnZXRsYiBwYWdlcyBmcmVlIHRoYXQgY2FuIGJlIHRyYW5zZmVyZWQgCitiYWNrIHRvIHJlZ3VsYXIgbWVtb3J5IHBvb2wpLgorCitQYWdlcyB0aGF0IGFyZSB1c2VkIGFzIGh1Z2V0bGIgcGFnZXMgYXJlIHJlc2VydmVkIGluc2lkZSB0aGUga2VybmVsIGFuZCBjYW4KK25vdCBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4gCisKK09uY2UgdGhlIGtlcm5lbCB3aXRoIEh1Z2V0bGIgcGFnZSBzdXBwb3J0IGlzIGJ1aWx0IGFuZCBydW5uaW5nLCBhIHVzZXIgY2FuCit1c2UgZWl0aGVyIHRoZSBtbWFwIHN5c3RlbSBjYWxsIG9yIHNoYXJlZCBtZW1vcnkgc3lzdGVtIGNhbGxzIHRvIHN0YXJ0IHVzaW5nCit0aGUgaHVnZSBwYWdlcy4gIEl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHByZWFsbG9jYXRlCitlbm91Z2ggbWVtb3J5IGZvciBodWdlIHBhZ2UgcHVycG9zZXMuICAKKworVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBkeW5hbWljYWxseSBhbGxvY2F0ZS9kZWFsbG9jYXRlIGh1Z2VwYWdlczoKKworCWVjaG8gMjAgPiAvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzCisKK1RoaXMgY29tbWFuZCB3aWxsIHRyeSB0byBjb25maWd1cmUgMjAgaHVnZXBhZ2VzIGluIHRoZSBzeXN0ZW0uICBUaGUgc3VjY2Vzcworb3IgZmFpbHVyZSBvZiBhbGxvY2F0aW9uIGRlcGVuZHMgb24gdGhlIGFtb3VudCBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMKK21lbW9yeSB0aGF0IGlzIHByZXNldCBpbiBzeXN0ZW0gYXQgdGhpcyB0aW1lLiAgU3lzdGVtIGFkbWluaXN0cmF0b3JzIG1heSB3YW50Cit0byBwdXQgdGhpcyBjb21tYW5kIGluIG9uZSBvZiB0aGUgbG9jYWwgcmMgaW5pdCBmaWxlLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUKK2tlcm5lbCB0byByZXF1ZXN0IGh1Z2UgcGFnZXMgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2VzcyAod2hlbiB0aGUgcG9zc2liaWxpdHkKK29mIGdldHRpbmcgcGh5c2ljYWwgY29udGlndW91cyBwYWdlcyBpcyBzdGlsbCB2ZXJ5IGhpZ2gpLgorCitJZiB0aGUgdXNlciBhcHBsaWNhdGlvbnMgYXJlIGdvaW5nIHRvIHJlcXVlc3QgaHVnZXBhZ2VzIHVzaW5nIG1tYXAgc3lzdGVtCitjYWxsLCB0aGVuIGl0IGlzIHJlcXVpcmVkIHRoYXQgc3lzdGVtIGFkbWluaXN0cmF0b3IgbW91bnQgYSBmaWxlIHN5c3RlbSBvZgordHlwZSBodWdldGxiZnM6CisKKwltb3VudCBub25lIC9tbnQvaHVnZSAtdCBodWdldGxiZnMgPHVpZD12YWx1ZT4gPGdpZD12YWx1ZT4gPG1vZGU9dmFsdWU+CisJCSA8c2l6ZT12YWx1ZT4gPG5yX2lub2Rlcz12YWx1ZT4KKworVGhpcyBjb21tYW5kIG1vdW50cyBhIChwc2V1ZG8pIGZpbGVzeXN0ZW0gb2YgdHlwZSBodWdldGxiZnMgb24gdGhlIGRpcmVjdG9yeQorL21udC9odWdlLiAgQW55IGZpbGVzIGNyZWF0ZWQgb24gL21udC9odWdlIHVzZXMgaHVnZXBhZ2VzLiAgVGhlIHVpZCBhbmQgZ2lkCitvcHRpb25zIHNldHMgdGhlIG93bmVyIGFuZCBncm91cCBvZiB0aGUgcm9vdCBvZiB0aGUgZmlsZSBzeXN0ZW0uICBCeSBkZWZhdWx0Cit0aGUgdWlkIGFuZCBnaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyBhcmUgdGFrZW4uICBUaGUgbW9kZSBvcHRpb24gc2V0cyB0aGUKK21vZGUgb2Ygcm9vdCBvZiBmaWxlIHN5c3RlbSB0byB2YWx1ZSAmIDA3NzcuICBUaGlzIHZhbHVlIGlzIGdpdmVuIGluIG9jdGFsLgorQnkgZGVmYXVsdCB0aGUgdmFsdWUgMDc1NSBpcyBwaWNrZWQuIFRoZSBzaXplIG9wdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHZhbHVlIG9mCittZW1vcnkgKGh1Z2UgcGFnZXMpIGFsbG93ZWQgZm9yIHRoYXQgZmlsZXN5c3RlbSAoL21udC9odWdlKS4gVGhlIHNpemUgaXMKK3JvdW5kZWQgZG93biB0byBIUEFHRV9TSVpFLiAgVGhlIG9wdGlvbiBucl9pbm9kZSBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZgoraW5vZGVzIHRoYXQgL21udC9odWdlIGNhbiB1c2UuICBJZiB0aGUgc2l6ZSBvciBucl9pbm9kZSBvcHRpb25zIGFyZSBub3QKK3Byb3ZpZGVkIG9uIGNvbW1hbmQgbGluZSB0aGVuIG5vIGxpbWl0cyBhcmUgc2V0LiAgRm9yIHNpemUgYW5kIG5yX2lub2Rlcworb3B0aW9ucywgeW91IGNhbiB1c2UgW0d8Z10vW018bV0vW0t8a10gdG8gcmVwcmVzZW50IGdpZ2EvbWVnYS9raWxvLiBGb3IgCitleGFtcGxlLCBzaXplPTJLIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIHNpemU9MjA0OC4gQW4gZXhhbXBsZSBpcyBnaXZlbiBhdCAKK3RoZSBlbmQgb2YgdGhpcyBkb2N1bWVudC4gCisKK3JlYWQgYW5kIHdyaXRlIHN5c3RlbSBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmaWxlcyB0aGF0IHJlc2lkZSBvbiBodWdldGxiCitmaWxlIHN5c3RlbXMuCisKK0EgcmVndWxhciBjaG93biwgY2hncnAgYW5kIGNobW9kIGNvbW1hbmRzICh3aXRoIHJpZ2h0IHBlcm1pc3Npb25zKSBjb3VsZCBiZQordXNlZCB0byBjaGFuZ2UgdGhlIGZpbGUgYXR0cmlidXRlcyBvbiBodWdldGxiZnMuCisKK0Fsc28sIGl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgbm8gc3VjaCBtb3VudCBjb21tYW5kIGlzIHJlcXVpcmVkIGlmIHRoZQorYXBwbGljYXRpb25zIGFyZSBnb2luZyB0byB1c2Ugb25seSBzaG1hdC9zaG1nZXQgc3lzdGVtIGNhbGxzLiAgVXNlcnMgd2hvCit3aXNoIHRvIHVzZSBodWdldGxiIHBhZ2UgdmlhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBzaG91bGQgYmUgYSBtZW1iZXIgb2YKK2Egc3VwcGxlbWVudGFyeSBncm91cCBhbmQgc3lzdGVtIGFkbWluIG5lZWRzIHRvIGNvbmZpZ3VyZSB0aGF0IGdpZCBpbnRvCisvcHJvYy9zeXMvdm0vaHVnZXRsYl9zaG1fZ3JvdXAuICBJdCBpcyBwb3NzaWJsZSBmb3Igc2FtZSBvciBkaWZmZXJlbnQKK2FwcGxpY2F0aW9ucyB0byB1c2UgYW55IGNvbWJpbmF0aW9uIG9mIG1tYXBzIGFuZCBzaG0qIGNhbGxzLiAgVGhvdWdoIHRoZQorbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwcy4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvKgorICogRXhhbXBsZSBvZiB1c2luZyBodWdlcGFnZSBtZW1vcnkgaW4gYSB1c2VyIGFwcGxpY2F0aW9uIHVzaW5nIFN5cyBWIHNoYXJlZAorICogbWVtb3J5IHN5c3RlbSBjYWxscy4gIEluIHRoaXMgZXhhbXBsZSB0aGUgYXBwIGlzIHJlcXVlc3RpbmcgMjU2TUIgb2YKKyAqIG1lbW9yeSB0aGF0IGlzIGJhY2tlZCBieSBodWdlIHBhZ2VzLiAgVGhlIGFwcGxpY2F0aW9uIHVzZXMgdGhlIGZsYWcKKyAqIFNITV9IVUdFVExCIGluIHRoZSBzaG1nZXQgc3lzdGVtIGNhbGwgdG8gaW5mb3JtIHRoZSBrZXJuZWwgdGhhdCBpdCBpcworICogcmVxdWVzdGluZyBodWdlcGFnZXMuCisgKgorICogRm9yIHRoZSBpYTY0IGFyY2hpdGVjdHVyZSwgdGhlIExpbnV4IGtlcm5lbCByZXNlcnZlcyBSZWdpb24gbnVtYmVyIDQgZm9yCisgKiBodWdlcGFnZXMuICBUaGF0IG1lYW5zIHRoZSBhZGRyZXNzZXMgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIG5lZWQKKyAqIHRvIGJlIHNwZWNpZmllZC4gIFNwZWNpZnlpbmcgYSBmaXhlZCBhZGRyZXNzIGlzIG5vdCByZXF1aXJlZCBvbiBwcGM2NCwKKyAqIGkzODYgb3IgeDg2XzY0LgorICoKKyAqIE5vdGU6IFRoZSBkZWZhdWx0IHNoYXJlZCBtZW1vcnkgbGltaXQgaXMgcXVpdGUgbG93IG9uIG1hbnkga2VybmVscywKKyAqIHlvdSBtYXkgbmVlZCB0byBpbmNyZWFzZSBpdCB2aWE6CisgKgorICogZWNobyAyNjg0MzU0NTYgPiAvcHJvYy9zeXMva2VybmVsL3NobW1heAorICoKKyAqIFRoaXMgd2lsbCBpbmNyZWFzZSB0aGUgbWF4aW11bSBzaXplIHBlciBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgdG8gMjU2TUIuCisgKiBUaGUgb3RoZXIgbGltaXQgdGhhdCB5b3Ugd2lsbCBoaXQgZXZlbnR1YWxseSBpcyBzaG1hbGwgd2hpY2ggaXMgdGhlCisgKiB0b3RhbCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBpbiBwYWdlcy4gVG8gc2V0IGl0IHRvIDE2R0Igb24gYSBzeXN0ZW0KKyAqIHdpdGggYSA0a0IgcGFnZXNpemUgZG86CisgKgorICogZWNobyA0MTk0MzA0ID4gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGwKKyAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2lwYy5oPgorI2luY2x1ZGUgPHN5cy9zaG0uaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaWZuZGVmIFNITV9IVUdFVExCCisjZGVmaW5lIFNITV9IVUdFVExCIDA0MDAwCisjZW5kaWYKKworI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNCkKKworI2RlZmluZSBkcHJpbnRmKHgpICBwcmludGYoeCkKKworLyogT25seSBpYTY0IHJlcXVpcmVzIHRoaXMgKi8KKyNpZmRlZiBfX2lhNjRfXworI2RlZmluZSBBRERSICh2b2lkICopKDB4ODAwMDAwMDAwMDAwMDAwMFVMKQorI2RlZmluZSBTSE1BVF9GTEFHUyAoU0hNX1JORCkKKyNlbHNlCisjZGVmaW5lIEFERFIgKHZvaWQgKikoMHgwVUwpCisjZGVmaW5lIFNITUFUX0ZMQUdTICgwKQorI2VuZGlmCisKK2ludCBtYWluKHZvaWQpCit7CisJaW50IHNobWlkOworCXVuc2lnbmVkIGxvbmcgaTsKKwljaGFyICpzaG1hZGRyOworCisJaWYgKChzaG1pZCA9IHNobWdldCgyLCBMRU5HVEgsCisJCQkgICAgU0hNX0hVR0VUTEIgfCBJUENfQ1JFQVQgfCBTSE1fUiB8IFNITV9XKSkgPCAwKSB7CisJCXBlcnJvcigic2htZ2V0Iik7CisJCWV4aXQoMSk7CisJfQorCXByaW50Zigic2htaWQ6IDB4JXhcbiIsIHNobWlkKTsKKworCXNobWFkZHIgPSBzaG1hdChzaG1pZCwgQUREUiwgU0hNQVRfRkxBR1MpOworCWlmIChzaG1hZGRyID09IChjaGFyICopLTEpIHsKKwkJcGVycm9yKCJTaGFyZWQgbWVtb3J5IGF0dGFjaCBmYWlsdXJlIik7CisJCXNobWN0bChzaG1pZCwgSVBDX1JNSUQsIE5VTEwpOworCQlleGl0KDIpOworCX0KKwlwcmludGYoInNobWFkZHI6ICVwXG4iLCBzaG1hZGRyKTsKKworCWRwcmludGYoIlN0YXJ0aW5nIHRoZSB3cml0ZXM6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgTEVOR1RIOyBpKyspIHsKKwkJc2htYWRkcltpXSA9IChjaGFyKShpKTsKKwkJaWYgKCEoaSAlICgxMDI0ICogMTAyNCkpKQorCQkJZHByaW50ZigiLiIpOworCX0KKwlkcHJpbnRmKCJcbiIpOworCisJZHByaW50ZigiU3RhcnRpbmcgdGhlIENoZWNrLi4uIik7CisJZm9yIChpID0gMDsgaSA8IExFTkdUSDsgaSsrKQorCQlpZiAoc2htYWRkcltpXSAhPSAoY2hhcilpKQorCQkJcHJpbnRmKCJcbkluZGV4ICVsdSBtaXNtYXRjaGVkXG4iLCBpKTsKKwlkcHJpbnRmKCJEb25lLlxuIik7CisKKwlpZiAoc2htZHQoKGNvbnN0IHZvaWQgKilzaG1hZGRyKSAhPSAwKSB7CisJCXBlcnJvcigiRGV0YWNoIGZhaWx1cmUiKTsKKwkJc2htY3RsKHNobWlkLCBJUENfUk1JRCwgTlVMTCk7CisJCWV4aXQoMyk7CisJfQorCisJc2htY3RsKHNobWlkLCBJUENfUk1JRCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvKgorICogRXhhbXBsZSBvZiB1c2luZyBodWdlcGFnZSBtZW1vcnkgaW4gYSB1c2VyIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBtbWFwCisgKiBzeXN0ZW0gY2FsbC4gIEJlZm9yZSBydW5uaW5nIHRoaXMgYXBwbGljYXRpb24sIG1ha2Ugc3VyZSB0aGF0IHRoZQorICogYWRtaW5pc3RyYXRvciBoYXMgbW91bnRlZCB0aGUgaHVnZXRsYmZzIGZpbGVzeXN0ZW0gKG9uIHNvbWUgZGlyZWN0b3J5CisgKiBsaWtlIC9tbnQpIHVzaW5nIHRoZSBjb21tYW5kIG1vdW50IC10IGh1Z2V0bGJmcyBub2RldiAvbW50LiBJbiB0aGlzCisgKiBleGFtcGxlLCB0aGUgYXBwIGlzIHJlcXVlc3RpbmcgbWVtb3J5IG9mIHNpemUgMjU2TUIgdGhhdCBpcyBiYWNrZWQgYnkKKyAqIGh1Z2UgcGFnZXMuCisgKgorICogRm9yIGlhNjQgYXJjaGl0ZWN0dXJlLCBMaW51eCBrZXJuZWwgcmVzZXJ2ZXMgUmVnaW9uIG51bWJlciA0IGZvciBodWdlcGFnZXMuCisgKiBUaGF0IG1lYW5zIHRoZSBhZGRyZXNzZXMgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIG5lZWQgdG8gYmUKKyAqIHNwZWNpZmllZC4gIFNwZWNpZnlpbmcgYSBmaXhlZCBhZGRyZXNzIGlzIG5vdCByZXF1aXJlZCBvbiBwcGM2NCwgaTM4NgorICogb3IgeDg2XzY0LgorICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNkZWZpbmUgRklMRV9OQU1FICIvbW50L2h1Z2VwYWdlZmlsZSIKKyNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCisjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCisKKy8qIE9ubHkgaWE2NCByZXF1aXJlcyB0aGlzICovCisjaWZkZWYgX19pYTY0X18KKyNkZWZpbmUgQUREUiAodm9pZCAqKSgweDgwMDAwMDAwMDAwMDAwMDBVTCkKKyNkZWZpbmUgRkxBR1MgKE1BUF9TSEFSRUQgfCBNQVBfRklYRUQpCisjZWxzZQorI2RlZmluZSBBRERSICh2b2lkICopKDB4MFVMKQorI2RlZmluZSBGTEFHUyAoTUFQX1NIQVJFRCkKKyNlbmRpZgorCit2b2lkIGNoZWNrX2J5dGVzKGNoYXIgKmFkZHIpCit7CisJcHJpbnRmKCJGaXJzdCBoZXggaXMgJXhcbiIsICooKHVuc2lnbmVkIGludCAqKWFkZHIpKTsKK30KKwordm9pZCB3cml0ZV9ieXRlcyhjaGFyICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykKKwkJKihhZGRyICsgaSkgPSAoY2hhcilpOworfQorCit2b2lkIHJlYWRfYnl0ZXMoY2hhciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwljaGVja19ieXRlcyhhZGRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgTEVOR1RIOyBpKyspCisJCWlmICgqKGFkZHIgKyBpKSAhPSAoY2hhcilpKSB7CisJCQlwcmludGYoIk1pc21hdGNoIGF0ICVsdVxuIiwgaSk7CisJCQlicmVhazsKKwkJfQorfQorCitpbnQgbWFpbih2b2lkKQoreworCXZvaWQgKmFkZHI7CisJaW50IGZkOworCisJZmQgPSBvcGVuKEZJTEVfTkFNRSwgT19DUkVBVCB8IE9fUkRXUiwgMDc1NSk7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IoIk9wZW4gZmFpbGVkIik7CisJCWV4aXQoMSk7CisJfQorCisJYWRkciA9IG1tYXAoQUREUiwgTEVOR1RILCBQUk9URUNUSU9OLCBGTEFHUywgZmQsIDApOworCWlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsKKwkJcGVycm9yKCJtbWFwIik7CisJCXVubGluayhGSUxFX05BTUUpOworCQlleGl0KDEpOworCX0KKworCXByaW50ZigiUmV0dXJuZWQgYWRkcmVzcyBpcyAlcFxuIiwgYWRkcik7CisJY2hlY2tfYnl0ZXMoYWRkcik7CisJd3JpdGVfYnl0ZXMoYWRkcik7CisJcmVhZF9ieXRlcyhhZGRyKTsKKworCW11bm1hcChhZGRyLCBMRU5HVEgpOworCWNsb3NlKGZkKTsKKwl1bmxpbmsoRklMRV9OQU1FKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9sb2NraW5nIGIvRG9jdW1lbnRhdGlvbi92bS9sb2NraW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZWYwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2xvY2tpbmcKQEAgLTAsMCArMSwxMzEgQEAKK1N0YXJ0ZWQgT2N0IDE5OTkgYnkgS2Fub2ogU2FyY2FyIDxrYW5vanNhcmNhckB5YWhvby5jb20+CisKK1RoZSBpbnRlbnQgb2YgdGhpcyBmaWxlIGlzIHRvIGhhdmUgYW4gdXB0b2RhdGUsIHJ1bm5pbmcgY29tbWVudGFyeSAKK2Zyb20gZGlmZmVyZW50IHBlb3BsZSBhYm91dCBob3cgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGlzIGRvbmUgCitpbiB0aGUgTGludXggdm0gY29kZS4KKworcGFnZV90YWJsZV9sb2NrICYgbW1hcF9zZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BhZ2Ugc3RlYWxlcnMgcGljayBwcm9jZXNzZXMgb3V0IG9mIHRoZSBwcm9jZXNzIHBvb2wgYW5kIHNjYW4gZm9yIAordGhlIGJlc3QgcHJvY2VzcyB0byBzdGVhbCBwYWdlcyBmcm9tLiBUbyBndWFyYW50ZWUgdGhlIGV4aXN0ZW5jZSAKK29mIHRoZSB2aWN0aW0gbW0sIGEgbW1fY291bnQgaW5jIGFuZCBhIG1tZHJvcCBhcmUgZG9uZSBpbiBzd2FwX291dCgpLgorUGFnZSBzdGVhbGVycyBob2xkIGtlcm5lbF9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCBhIGJ1bmNoIG9mIHJhY2VzLgorVGhlIHZtYSBsaXN0IG9mIHRoZSB2aWN0aW0gbW0gaXMgYWxzbyBzY2FubmVkIGJ5IHRoZSBzdGVhbGVyLCAKK2FuZCB0aGUgcGFnZV90YWJsZV9sb2NrIGlzIHVzZWQgdG8gcHJlc2VydmUgbGlzdCBzYW5pdHkgYWdhaW5zdCB0aGUKK3Byb2Nlc3MgYWRkaW5nL2RlbGV0aW5nIHRvIHRoZSBsaXN0LiBUaGlzIGFsc28gZ3VhcmFudGVlcyBleGlzdGVuY2UKK29mIHRoZSB2bWEuIFZtYSBleGlzdGVuY2UgaXMgbm90IGd1YXJhbnRlZWQgb25jZSB0cnlfdG9fc3dhcF9vdXQoKSAKK2Ryb3BzIHRoZSBwYWdlX3RhYmxlX2xvY2suIFRvIGd1YXJhbnRlZSB0aGUgZXhpc3RlbmNlIG9mIHRoZSB1bmRlcmx5aW5nIAorZmlsZSBzdHJ1Y3R1cmUsIGEgZ2V0X2ZpbGUgaXMgZG9uZSBiZWZvcmUgdGhlIHN3YXBvdXQoKSBtZXRob2QgaXMgCitpbnZva2VkLiBUaGUgcGFnZSBwYXNzZWQgaW50byBzd2Fwb3V0KCkgaXMgZ3VhcmFudGVlZCBub3QgdG8gYmUgcmV1c2VkCitmb3IgYSBkaWZmZXJlbnQgcHVycG9zZSBiZWNhdXNlIHRoZSBwYWdlIHJlZmVyZW5jZSBjb3VudCBkdWUgdG8gYmVpbmcKK3ByZXNlbnQgaW4gdGhlIHVzZXIncyBwdGUgaXMgbm90IHJlbGVhc2VkIHRpbGwgYWZ0ZXIgc3dhcG91dCgpIHJldHVybnMuCisKK0FueSBjb2RlIHRoYXQgbW9kaWZpZXMgdGhlIHZtbGlzdCwgb3IgdGhlIHZtX3N0YXJ0L3ZtX2VuZC8KK3ZtX2ZsYWdzOlZNX0xPQ0tFRC92bV9uZXh0IG9mIGFueSB2bWEgKmluIHRoZSBsaXN0KiBtdXN0IHByZXZlbnQgCitrc3dhcGQgZnJvbSBsb29raW5nIGF0IHRoZSBjaGFpbi4KKworVGhlIHJ1bGVzIGFyZToKKzEuIFRvIHNjYW4gdGhlIHZtbGlzdCAobG9vayBidXQgZG9uJ3QgdG91Y2gpIHlvdSBtdXN0IGhvbGQgdGhlCisgICBtbWFwX3NlbSB3aXRoIHJlYWQgYmlhcywgaS5lLiBkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSkKKzIuIFRvIG1vZGlmeSB0aGUgdm1saXN0IHlvdSBuZWVkIHRvIGhvbGQgdGhlIG1tYXBfc2VtIHdpdGgKKyAgIHJlYWQmd3JpdGUgYmlhcywgaS5lLiBkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pICAqQU5EKgorICAgeW91IG5lZWQgdG8gdGFrZSB0aGUgcGFnZV90YWJsZV9sb2NrLgorMy4gVGhlIHN3YXBwZXIgdGFrZXMgX2p1c3RfIHRoZSBwYWdlX3RhYmxlX2xvY2ssIHRoaXMgaXMgZG9uZQorICAgYmVjYXVzZSB0aGUgbW1hcF9zZW0gY2FuIGJlIGFuIGV4dHJlbWVseSBsb25nIGxpdmVkIGxvY2sKKyAgIGFuZCB0aGUgc3dhcHBlciBqdXN0IGNhbm5vdCBzbGVlcCBvbiB0aGF0LgorNC4gVGhlIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgaXMgZXhwYW5kX3N0YWNrLCB3aGljaCBqdXN0CisgICB0YWtlcyB0aGUgcmVhZCBsb2NrIGFuZCB0aGUgcGFnZV90YWJsZV9sb2NrLCB0aGlzIGlzIG9rCisgICBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVhbGx5IG1vZGlmeSBmaWVsZHMgYW55Ym9keSByZWxpZXMgb24uCis1LiBZb3UgbXVzdCBiZSBhYmxlIHRvIGd1YXJhbnRlZSB0aGF0IHdoaWxlIGhvbGRpbmcgcGFnZV90YWJsZV9sb2NrCisgICBvciBwYWdlX3RhYmxlX2xvY2sgb2YgbW0gQSwgeW91IHdpbGwgbm90IHRyeSB0byBnZXQgZWl0aGVyIGxvY2sKKyAgIGZvciBtbSBCLgorCitUaGUgY2F2ZWF0cyBhcmU6CisxLiBmaW5kX3ZtYSgpIG1ha2VzIHVzZSBvZiwgYW5kIHVwZGF0ZXMsIHRoZSBtbWFwX2NhY2hlIHBvaW50ZXIgaGludC4KK1RoZSB1cGRhdGUgb2YgbW1hcF9jYWNoZSBpcyByYWN5IChwYWdlIHN0ZWFsZXIgY2FuIHJhY2Ugd2l0aCBvdGhlciBjb2RlCit0aGF0IGludm9rZXMgZmluZF92bWEgd2l0aCBtbWFwX3NlbSBoZWxkKSwgYnV0IHRoYXQgaXMgb2theSwgc2luY2UgaXQgCitpcyBhIGhpbnQuIFRoaXMgY2FuIGJlIGZpeGVkLCBpZiBkZXNpcmVkLCBieSBoYXZpbmcgZmluZF92bWEgZ3JhYiB0aGUKK3BhZ2VfdGFibGVfbG9jay4KKworCitDb2RlIHRoYXQgYWRkL2RlbGV0ZSBlbGVtZW50cyBmcm9tIHRoZSB2bWxpc3QgY2hhaW4gYXJlCisxLiBjYWxsZXJzIG9mIGluc2VydF92bV9zdHJ1Y3QKKzIuIGNhbGxlcnMgb2YgbWVyZ2Vfc2VnbWVudHMKKzMuIGNhbGxlcnMgb2YgYXZsX3JlbW92ZQorCitDb2RlIHRoYXQgY2hhbmdlcyB2bV9zdGFydC92bV9lbmQvdm1fZmxhZ3M6Vk1fTE9DS0VEIG9mIHZtYSdzIG9uCit0aGUgbGlzdDoKKzEuIGV4cGFuZF9zdGFjaworMi4gbXByb3RlY3QKKzMuIG1sb2NrCis0LiBtcmVtYXAKKworSXQgaXMgYWR2aXNhYmxlIHRoYXQgY2hhbmdlcyB0byB2bV9zdGFydC92bV9lbmQgYmUgcHJvdGVjdGVkLCBhbHRob3VnaCAKK2luIHNvbWUgY2FzZXMgaXQgaXMgbm90IHJlYWxseSBuZWVkZWQuIEVnLCB2bV9zdGFydCBpcyBtb2RpZmllZCBieSAKK2V4cGFuZF9zdGFjaygpLCBpdCBpcyBoYXJkIHRvIGNvbWUgdXAgd2l0aCBhIGRlc3RydWN0aXZlIHNjZW5hcmlvIHdpdGhvdXQgCitoYXZpbmcgdGhlIHZtbGlzdCBwcm90ZWN0aW9uIGluIHRoaXMgY2FzZS4KKworVGhlIHBhZ2VfdGFibGVfbG9jayBuZXN0cyB3aXRoIHRoZSBpbm9kZSBpX21tYXBfbG9jayBhbmQgdGhlIGttZW0gY2FjaGUKK2Nfc3BpbmxvY2sgc3BpbmxvY2tzLiAgVGhpcyBpcyBva2F5LCBzaW5jZSB0aGUga21lbSBjb2RlIGFza3MgZm9yIHBhZ2VzIGFmdGVyCitkcm9wcGluZyBjX3NwaW5sb2NrLiAgVGhlIHBhZ2VfdGFibGVfbG9jayBhbHNvIG5lc3RzIHdpdGggcGFnZWNhY2hlX2xvY2sgYW5kCitwYWdlbWFwX2xydV9sb2NrIHNwaW5sb2NrcywgYW5kIG5vIGNvZGUgYXNrcyBmb3IgbWVtb3J5IHdpdGggdGhlc2UgbG9ja3MKK2hlbGQuCisKK1RoZSBwYWdlX3RhYmxlX2xvY2sgaXMgZ3JhYmJlZCB3aGlsZSBob2xkaW5nIHRoZSBrZXJuZWxfbG9jayBzcGlubmluZyBtb25pdG9yLgorCitUaGUgcGFnZV90YWJsZV9sb2NrIGlzIGEgc3BpbiBsb2NrLgorCitOb3RlOiBQVEwgY2FuIGFsc28gYmUgdXNlZCB0byBndWFyYW50ZWUgdGhhdCBubyBuZXcgY2xvbmVzIHVzaW5nIHRoZQorbW0gc3RhcnQgdXAgLi4uIHRoaXMgaXMgYSBsb29zZSBmb3JtIG9mIHN0YWJpbGl0eSBvbiBtbV91c2Vycy4gRm9yCitleGFtcGxlLCBpdCBpcyB1c2VkIGluIGNvcHlfbW0gdG8gcHJvdGVjdCBhZ2FpbnN0IGEgcmFjaW5nIHRsYl9nYXRoZXJfbW11CitzaW5nbGUgYWRkcmVzcyBzcGFjZSBvcHRpbWl6YXRpb24sIHNvIHRoYXQgdGhlIHphcF9wYWdlX3JhbmdlIChmcm9tCit2bXRydW5jYXRlKSBkb2VzIG5vdCBsb3NlIHNlbmRpbmcgaXBpJ3MgdG8gY2xvbmVkIHRocmVhZHMgdGhhdCBtaWdodCAKK2JlIHNwYXduZWQgdW5kZXJuZWF0aCBpdCBhbmQgZ28gdG8gdXNlciBtb2RlIHRvIGRyYWcgaW4gcHRlJ3MgaW50byB0bGJzLgorCitzd2FwX2xpc3RfbG9jay9zd2FwX2RldmljZV9sb2NrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgc3dhcCBkZXZpY2VzIGFyZSBjaGFpbmVkIGluIHByaW9yaXR5IG9yZGVyIGZyb20gdGhlICJzd2FwX2xpc3QiIGhlYWRlci4gCitUaGUgInN3YXBfbGlzdCIgaXMgdXNlZCBmb3IgdGhlIHJvdW5kLXJvYmluIHN3YXBoYW5kbGUgYWxsb2NhdGlvbiBzdHJhdGVneS4KK1RoZSAjZnJlZSBzd2FwaGFuZGxlcyBpcyBtYWludGFpbmVkIGluICJucl9zd2FwX3BhZ2VzIi4gVGhlc2UgdHdvIHRvZ2V0aGVyCithcmUgcHJvdGVjdGVkIGJ5IHRoZSBzd2FwX2xpc3RfbG9jay4gCisKK1RoZSBzd2FwX2RldmljZV9sb2NrLCB3aGljaCBpcyBwZXIgc3dhcCBkZXZpY2UsIHByb3RlY3RzIHRoZSByZWZlcmVuY2UgCitjb3VudHMgb24gdGhlIGNvcnJlc3BvbmRpbmcgc3dhcGhhbmRsZXMsIG1haW50YWluZWQgaW4gdGhlICJzd2FwX21hcCIKK2FycmF5LCBhbmQgdGhlICJoaWdoZXN0X2JpdCIgYW5kICJsb3dlc3RfYml0IiBmaWVsZHMuCisKK0JvdGggb2YgdGhlc2UgYXJlIHNwaW5sb2NrcywgYW5kIGFyZSBuZXZlciBhY3F1aXJlZCBmcm9tIGludHIgbGV2ZWwuIFRoZQorbG9ja2luZyBoaWVyYXJjaHkgaXMgc3dhcF9saXN0X2xvY2sgLT4gc3dhcF9kZXZpY2VfbG9jay4KKworVG8gcHJldmVudCByYWNlcyBiZXR3ZWVuIHN3YXAgc3BhY2UgZGVsZXRpb24gb3IgYXN5bmMgcmVhZGFoZWFkIHN3YXBpbnMKK2RlY2lkaW5nIHdoZXRoZXIgYSBzd2FwIGhhbmRsZSBpcyBiZWluZyB1c2VkLCBpZSB3b3J0aHkgb2YgYmVpbmcgcmVhZCBpbgorZnJvbSBkaXNrLCBhbmQgYW4gdW5tYXAgLT4gc3dhcF9mcmVlIG1ha2luZyB0aGUgaGFuZGxlIHVudXNlZCwgdGhlIHN3YXAKK2RlbGV0ZSBhbmQgcmVhZGFoZWFkIGNvZGUgZ3JhYnMgYSB0ZW1wIHJlZmVyZW5jZSBvbiB0aGUgc3dhcGhhbmRsZSB0bworcHJldmVudCB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gc3dhcF9kdXBsaWNhdGUgPC0gcmVhZF9zd2FwX2NhY2hlX2FzeW5jLgorCitTd2FwIGNhY2hlIGxvY2tpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLQorUGFnZXMgYXJlIGFkZGVkIGludG8gdGhlIHN3YXAgY2FjaGUgd2l0aCBrZXJuZWxfbG9jayBoZWxkLCB0byBtYWtlIHN1cmUKK3RoYXQgbXVsdGlwbGUgcGFnZXMgYXJlIG5vdCBiZWluZyBhZGRlZCAoYW5kIGhlbmNlIGxvc3QpIGJ5IGFzc29jaWF0aW5nCithbGwgb2YgdGhlbSB3aXRoIHRoZSBzYW1lIHN3YXBoYW5kbGUuCisKK1BhZ2VzIGFyZSBndWFyYW50ZWVkIG5vdCB0byBiZSByZW1vdmVkIGZyb20gdGhlIHNjYWNoZSBpZiB0aGUgcGFnZSBpcyAKKyJzaGFyZWQiOiBpZSwgb3RoZXIgcHJvY2Vzc2VzIGhvbGQgcmVmZXJlbmNlIG9uIHRoZSBwYWdlIG9yIHRoZSBhc3NvY2lhdGVkIAorc3dhcCBoYW5kbGUuIFRoZSBvbmx5IGNvZGUgdGhhdCBkb2VzIG5vdCBmb2xsb3cgdGhpcyBydWxlIGlzIHNocmlua19tbWFwLAord2hpY2ggZGVsZXRlcyBwYWdlcyBmcm9tIHRoZSBzd2FwIGNhY2hlIGlmIG5vIHByb2Nlc3MgaGFzIGEgcmVmZXJlbmNlIG9uIAordGhlIHBhZ2UgKG11bHRpcGxlIHByb2Nlc3NlcyBtaWdodCBoYXZlIHJlZmVyZW5jZXMgb24gdGhlIGNvcnJlc3BvbmRpbmcKK3N3YXAgaGFuZGxlIHRob3VnaCkuIGxvb2t1cF9zd2FwX2NhY2hlKCkgcmFjZXMgd2l0aCBzaHJpbmtfbW1hcCwgd2hlbgorZXN0YWJsaXNoaW5nIGEgcmVmZXJlbmNlIG9uIGEgc2NhY2hlIHBhZ2UsIHNvLCBpdCBtdXN0IGNoZWNrIHdoZXRoZXIgdGhlCitwYWdlIGl0IGxvY2F0ZWQgaXMgc3RpbGwgaW4gdGhlIHN3YXBjYWNoZSwgb3Igc2hyaW5rX21tYXAgZGVsZXRlZCBpdC4KKyhUaGlzIHJhY2UgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgc2hyaW5rX21tYXAgbG9va3MgYXQgdGhlIHBhZ2UgcmVmCitjb3VudCB3aXRoIHBhZ2VjYWNoZV9sb2NrLCBidXQgdGhlbiBkcm9wcyBwYWdlY2FjaGVfbG9jayBiZWZvcmUgZGVsZXRpbmcKK3RoZSBwYWdlIGZyb20gdGhlIHNjYWNoZSkuCisKK2RvX3dwX3BhZ2UgYW5kIGRvX3N3YXBfcGFnZSBoYXZlIE1QIHJhY2VzIGluIHRoZW0gd2hpbGUgdHJ5aW5nIHRvIGZpZ3VyZQorb3V0IHdoZXRoZXIgYSBwYWdlIGlzICJzaGFyZWQiLCBieSBsb29raW5nIGF0IHRoZSBwYWdlX2NvdW50ICsgc3dhcF9jb3VudC4KK1RvIHByZXNlcnZlIHRoZSBzdW0gb2YgdGhlIGNvdW50cywgdGhlIHBhZ2UgbG9jayBfbXVzdF8gYmUgYWNxdWlyZWQgYmVmb3JlCitjYWxsaW5nIGlzX3BhZ2Vfc2hhcmVkIChlbHNlIHByb2Nlc3NlcyBtaWdodCBzd2l0Y2ggdGhlaXIgc3dhcF9jb3VudCByZWZzCit0byB0aGUgcGFnZSBjb3VudCByZWZzLCBhZnRlciB0aGUgcGFnZSBjb3VudCByZWYgaGFzIGJlZW4gc25hcHNob3R0ZWQpLgorCitTd2FwIGRldmljZSBkZWxldGlvbiBjb2RlIGN1cnJlbnRseSBicmVha3MgYWxsIHRoZSBzY2FjaGUgYXNzdW1wdGlvbnMsCitzaW5jZSBpdCBncmFicyBuZWl0aGVyIG1tYXBfc2VtIG5vciBwYWdlX3RhYmxlX2xvY2suCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL251bWEgYi9Eb2N1bWVudGF0aW9uL3ZtL251bWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4ZGIxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0vbnVtYQpAQCAtMCwwICsxLDQxIEBACitTdGFydGVkIE5vdiAxOTk5IGJ5IEthbm9qIFNhcmNhciA8a2Fub2pAc2dpLmNvbT4KKworVGhlIGludGVudCBvZiB0aGlzIGZpbGUgaXMgdG8gaGF2ZSBhbiB1cHRvZGF0ZSwgcnVubmluZyBjb21tZW50YXJ5IAorZnJvbSBkaWZmZXJlbnQgcGVvcGxlIGFib3V0IE5VTUEgc3BlY2lmaWMgY29kZSBpbiB0aGUgTGludXggdm0uCisKK1doYXQgaXMgTlVNQT8gSXQgaXMgYW4gYXJjaGl0ZWN0dXJlIHdoZXJlIHRoZSBtZW1vcnkgYWNjZXNzIHRpbWVzCitmb3IgZGlmZmVyZW50IHJlZ2lvbnMgb2YgbWVtb3J5IGZyb20gYSBnaXZlbiBwcm9jZXNzb3IgdmFyaWVzCithY2NvcmRpbmcgdG8gdGhlICJkaXN0YW5jZSIgb2YgdGhlIG1lbW9yeSByZWdpb24gZnJvbSB0aGUgcHJvY2Vzc29yLgorRWFjaCByZWdpb24gb2YgbWVtb3J5IHRvIHdoaWNoIGFjY2VzcyB0aW1lcyBhcmUgdGhlIHNhbWUgZnJvbSBhbnkgCitjcHUsIGlzIGNhbGxlZCBhIG5vZGUuIE9uIHN1Y2ggYXJjaGl0ZWN0dXJlcywgaXQgaXMgYmVuZWZpY2lhbCBpZgordGhlIGtlcm5lbCB0cmllcyB0byBtaW5pbWl6ZSBpbnRlciBub2RlIGNvbW11bmljYXRpb25zLiBTY2hlbWVzCitmb3IgdGhpcyByYW5nZSBmcm9tIGtlcm5lbCB0ZXh0IGFuZCByZWFkLW9ubHkgZGF0YSByZXBsaWNhdGlvbgorYWNyb3NzIG5vZGVzLCBhbmQgdHJ5aW5nIHRvIGhvdXNlIGFsbCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQKK2tleSBjb21wb25lbnRzIG9mIHRoZSBrZXJuZWwgbmVlZCBvbiBtZW1vcnkgb24gdGhhdCBub2RlLgorCitDdXJyZW50bHksIGFsbCB0aGUgbnVtYSBzdXBwb3J0IGlzIHRvIHByb3ZpZGUgZWZmaWNpZW50IGhhbmRsaW5nCitvZiB3aWRlbHkgZGlzY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnksIHNvIGFyY2hpdGVjdHVyZXMgd2hpY2ggCithcmUgbm90IE5VTUEgYnV0IGNhbiBoYXZlIGh1Z2UgaG9sZXMgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UKK2NhbiB1c2UgdGhlIHNhbWUgY29kZS4gQWxsIHRoaXMgY29kZSBpcyBicmFja2V0ZWQgYnkgQ09ORklHX0RJU0NPTlRJR01FTS4KKworVGhlIGluaXRpYWwgcG9ydCBpbmNsdWRlcyBOVU1BaXppbmcgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIGNvZGUgYnkKK2VuY2Fwc3VsYXRpbmcgYWxsIHRoZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gaW50byBhIGJvb3RtZW1fZGF0YV90CitzdHJ1Y3R1cmUuIE5vZGUgc3BlY2lmaWMgY2FsbHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBhbGxvY2F0b3IuIAorSW4gdGhlb3J5LCBhbnkgcGxhdGZvcm0gd2hpY2ggdXNlcyB0aGUgYm9vdG1lbSBhbGxvY2F0b3Igc2hvdWxkIAorYmUgYWJsZSB0byB0byBwdXQgdGhlIGJvb3RtZW0gYW5kIG1lbV9tYXAgZGF0YSBzdHJ1Y3R1cmVzIGFueXdoZXJlCitpdCBkZWVtcyBiZXN0LgorCitFYWNoIG5vZGUncyBwYWdlIGFsbG9jYXRpb24gZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgYWxzbyBiZWVuIGVuY2Fwc3VsYXRlZAoraW50byBhIHBnX2RhdGFfdC4gVGhlIGJvb3RtZW1fZGF0YV90IGlzIGp1c3Qgb25lIHBhcnQgb2YgdGhpcy4gVG8gCittYWtlIHRoZSBjb2RlIGxvb2sgdW5pZm9ybSBiZXR3ZWVuIE5VTUEgYW5kIHJlZ3VsYXIgVU1BIHBsYXRmb3JtcywgCitVTUEgcGxhdGZvcm1zIGhhdmUgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBwZ19kYXRhX3QgdG9vIChjb250aWdfcGFnZV9kYXRhKS4KK0ZvciB0aGUgc2FrZSBvZiB1bmlmb3JtaXR5LCB0aGUgZnVuY3Rpb24gbnVtX29ubGluZV9ub2RlcygpIGlzIGFsc28gZGVmaW5lZAorZm9yIGFsbCBwbGF0Zm9ybXMuIEFzIHdlIHJ1biBiZW5jaG1hcmtzLCB3ZSBtaWdodCBkZWNpZGUgdG8gTlVNQWl6ZSAKK21vcmUgdmFyaWFibGVzIGxpa2UgbG93X29uX21lbW9yeSwgbnJfZnJlZV9wYWdlcyBldGMgaW50byB0aGUgcGdfZGF0YV90LgorCitUaGUgTlVNQSBhd2FyZSBwYWdlIGFsbG9jYXRpb24gY29kZSBjdXJyZW50bHkgdHJpZXMgdG8gYWxsb2NhdGUgcGFnZXMgCitmcm9tIGRpZmZlcmVudCBub2RlcyBpbiBhIHJvdW5kIHJvYmluIG1hbm5lci4gIFRoaXMgd2lsbCBiZSBjaGFuZ2VkIHRvIAorZG8gY29uY2VudHJhdGljIGNpcmNsZSBzZWFyY2gsIHN0YXJ0aW5nIGZyb20gY3VycmVudCBub2RlLCBvbmNlIHRoZSAKK05VTUEgcG9ydCBhY2hpZXZlcyBtb3JlIG1hdHVyaXR5LiBUaGUgY2FsbCBhbGxvY19wYWdlc19ub2RlIGhhcyBiZWVuIAorYWRkZWQsIHNvIHRoYXQgZHJpdmVycyBjYW4gbWFrZSB0aGUgY2FsbCBhbmQgbm90IHdvcnJ5IGFib3V0IHdoZXRoZXIgCitpdCBpcyBydW5uaW5nIG9uIGEgTlVNQSBvciBVTUEgcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL292ZXJjb21taXQtYWNjb3VudGluZyBiL0RvY3VtZW50YXRpb24vdm0vb3ZlcmNvbW1pdC1hY2NvdW50aW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYzdiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL292ZXJjb21taXQtYWNjb3VudGluZwpAQCAtMCwwICsxLDczIEBACitUaGUgTGludXgga2VybmVsIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb3ZlcmNvbW1pdCBoYW5kbGluZyBtb2RlcworCiswCS0JSGV1cmlzdGljIG92ZXJjb21taXQgaGFuZGxpbmcuIE9idmlvdXMgb3ZlcmNvbW1pdHMgb2YKKwkJYWRkcmVzcyBzcGFjZSBhcmUgcmVmdXNlZC4gVXNlZCBmb3IgYSB0eXBpY2FsIHN5c3RlbS4gSXQKKwkJZW5zdXJlcyBhIHNlcmlvdXNseSB3aWxkIGFsbG9jYXRpb24gZmFpbHMgd2hpbGUgYWxsb3dpbmcKKwkJb3ZlcmNvbW1pdCB0byByZWR1Y2Ugc3dhcCB1c2FnZS4gIHJvb3QgaXMgYWxsb3dlZCB0byAKKwkJYWxsb2NhdGUgc2xpZ2hseSBtb3JlIG1lbW9yeSBpbiB0aGlzIG1vZGUuIFRoaXMgaXMgdGhlIAorCQlkZWZhdWx0LgorCisxCS0JQWx3YXlzIG92ZXJjb21taXQuIEFwcHJvcHJpYXRlIGZvciBzb21lIHNjaWVudGlmaWMKKwkJYXBwbGljYXRpb25zLgorCisyCS0JRG9uJ3Qgb3ZlcmNvbW1pdC4gVGhlIHRvdGFsIGFkZHJlc3Mgc3BhY2UgY29tbWl0CisJCWZvciB0aGUgc3lzdGVtIGlzIG5vdCBwZXJtaXR0ZWQgdG8gZXhjZWVkIHN3YXAgKyBhCisJCWNvbmZpZ3VyYWJsZSBwZXJjZW50YWdlIChkZWZhdWx0IGlzIDUwKSBvZiBwaHlzaWNhbCBSQU0uCisJCURlcGVuZGluZyBvbiB0aGUgcGVyY2VudGFnZSB5b3UgdXNlLCBpbiBtb3N0IHNpdHVhdGlvbnMKKwkJdGhpcyBtZWFucyBhIHByb2Nlc3Mgd2lsbCBub3QgYmUga2lsbGVkIHdoaWxlIGFjY2Vzc2luZworCQlwYWdlcyBidXQgd2lsbCByZWNlaXZlIGVycm9ycyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBhcworCQlhcHByb3ByaWF0ZS4KKworVGhlIG92ZXJjb21taXQgcG9saWN5IGlzIHNldCB2aWEgdGhlIHN5c2N0bCBgdm0ub3ZlcmNvbW1pdF9tZW1vcnknLgorCitUaGUgb3ZlcmNvbW1pdCBwZXJjZW50YWdlIGlzIHNldCB2aWEgYHZtLm92ZXJjb21taXRfcmF0aW8nLgorCitUaGUgY3VycmVudCBvdmVyY29tbWl0IGxpbWl0IGFuZCBhbW91bnQgY29tbWl0dGVkIGFyZSB2aWV3YWJsZSBpbgorL3Byb2MvbWVtaW5mbyBhcyBDb21taXRMaW1pdCBhbmQgQ29tbWl0dGVkX0FTIHJlc3BlY3RpdmVseS4KKworR290Y2hhcworLS0tLS0tLQorCitUaGUgQyBsYW5ndWFnZSBzdGFjayBncm93dGggZG9lcyBhbiBpbXBsaWNpdCBtcmVtYXAuIElmIHlvdSB3YW50IGFic29sdXRlCitndWFyYW50ZWVzIGFuZCBydW4gY2xvc2UgdG8gdGhlIGVkZ2UgeW91IE1VU1QgbW1hcCB5b3VyIHN0YWNrIGZvciB0aGUgCitsYXJnZXN0IHNpemUgeW91IHRoaW5rIHlvdSB3aWxsIG5lZWQuIEZvciB0eXBpY2FsIHN0YWNrIHVzYWdlIHRoaXMgZG9lcworbm90IG1hdHRlciBtdWNoIGJ1dCBpdCdzIGEgY29ybmVyIGNhc2UgaWYgeW91IHJlYWxseSByZWFsbHkgY2FyZQorCitJbiBtb2RlIDIgdGhlIE1BUF9OT1JFU0VSVkUgZmxhZyBpcyBpZ25vcmVkLiAKKworCitIb3cgSXQgV29ya3MKKy0tLS0tLS0tLS0tLQorCitUaGUgb3ZlcmNvbW1pdCBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHJ1bGVzCisKK0ZvciBhIGZpbGUgYmFja2VkIG1hcAorCVNIQVJFRCBvciBSRUFELW9ubHkJLQkwIGNvc3QgKHRoZSBmaWxlIGlzIHRoZSBtYXAgbm90IHN3YXApCisJUFJJVkFURSBXUklUQUJMRQktCXNpemUgb2YgbWFwcGluZyBwZXIgaW5zdGFuY2UKKworRm9yIGFuIGFub255bW91cyBvciAvZGV2L3plcm8gbWFwCisJU0hBUkVECQkJLQlzaXplIG9mIG1hcHBpbmcKKwlQUklWQVRFIFJFQUQtb25seQktCTAgY29zdCAoYnV0IG9mIGxpdHRsZSB1c2UpCisJUFJJVkFURSBXUklUQUJMRQktCXNpemUgb2YgbWFwcGluZyBwZXIgaW5zdGFuY2UKKworQWRkaXRpb25hbCBhY2NvdW50aW5nCisJUGFnZXMgbWFkZSB3cml0YWJsZSBjb3BpZXMgYnkgbW1hcAorCXNobWZzIG1lbW9yeSBkcmF3biBmcm9tIHRoZSBzYW1lIHBvb2wKKworU3RhdHVzCistLS0tLS0KKworbwlXZSBhY2NvdW50IG1tYXAgbWVtb3J5IG1hcHBpbmdzCitvCVdlIGFjY291bnQgbXByb3RlY3QgY2hhbmdlcyBpbiBjb21taXQKK28JV2UgYWNjb3VudCBtcmVtYXAgY2hhbmdlcyBpbiBzaXplCitvCVdlIGFjY291bnQgYnJrCitvCVdlIGFjY291bnQgbXVubWFwCitvCVdlIHJlcG9ydCB0aGUgY29tbWl0IHN0YXR1cyBpbiAvcHJvYworbwlBY2NvdW50IGFuZCBjaGVjayBvbiBmb3JrCitvCVJldmlldyBzdGFjayBoYW5kbGluZy9idWlsZGluZyBvbiBleGVjCitvCVNITWZzIGFjY291bnRpbmcKK28JSW1wbGVtZW50IGFjdHVhbCBsaW1pdCBlbmZvcmNlbWVudAorCitUbyBEbworLS0tLS0KK28JQWNjb3VudCBwdHJhY2UgcGFnZXMgKHRoaXMgaXMgaGFyZCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm95YWdlci50eHQgYi9Eb2N1bWVudGF0aW9uL3ZveWFnZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NDlhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZveWFnZXIudHh0CkBAIC0wLDAgKzEsOTUgQEAKK1J1bm5pbmcgTGludXggb24gdGhlIFZveWFnZXIgQXJjaGl0ZWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb3IgZnVsbCBkZXRhaWxzIGFuZCBjdXJyZW50IHByb2plY3Qgc3RhdHVzLCBzZWUKKworaHR0cDovL3d3dy5oYW5zZW5wYXJ0bmVyc2hpcC5jb20vdm95YWdlcgorCitUaGUgdm95YWdlciBhcmNoaXRlY3R1cmUgd2FzIGRlc2lnbmVkIGJ5IE5DUiBpbiB0aGUgbWlkIDgwcyB0byBiZSBhCitmdWxseSBTTVAgY2FwYWJsZSBSQVMgY29tcHV0aW5nIGFyY2hpdGVjdHVyZSBidWlsdCBhcm91bmQgaW50ZWwncyA0ODYKK2NoaXAgc2V0LiAgVGhlIHZveWFnZXIgY2FtZSBpbiB0aHJlZSBsZXZlbHMgb2YgYXJjaGl0ZWN0dXJhbAorc29waGlzdGljYXRpb246IDMsNCBhbmQgNSAtLS0gMSBhbmQgMiBuZXZlciBtYWRlIGl0IG91dCBvZiBwcm90b3R5cGUuCitUaGUgbGludXggcGF0Y2hlcyBzdXBwb3J0IG9ubHkgdGhlIExldmVsIDUgdm95YWdlciBhcmNoaXRlY3R1cmUgKGFueQorbWFjaGluZSBjbGFzcyAzNDM1IGFuZCBhYm92ZSkuCisKK1RoZSBWb3lhZ2VyIEFyY2hpdGVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZveWFnZXIgbWFjaGluZXMgY29uc2lzdCBvZiBhIEJhc2Vib2FyZCB3aXRoIGEgMzg2IGRpYWdub3N0aWMKK3Byb2Nlc3NvciwgYSBQb3dlciBTdXBwbHkgSW50ZXJmYWNlIChQU0kpIGEgUHJpbWFyeSBhbmQgcG9zc2libHkKK1NlY29uZGFyeSBNaWNyb2NoYW5uZWwgYnVzIGFuZCBiZXR3ZWVuIDIgYW5kIDIwIHZveWFnZXIgc2xvdHMuICBUaGUKK3ZveWFnZXIgc2xvdHMgY2FuIGJlIHBvcHVsYXRlZCB3aXRoIG1lbW9yeSBhbmQgY3B1IGNhcmRzICh1cCB0byA0R0IKK21lbW9yeSBhbmQgZnJvbSAxIDQ4NiB0byAzMiBQZW50aXVtIFBybyBwcm9jZXNzb3JzKS4gIEludGVybmFsbHksIHRoZQordm95YWdlciBoYXMgYSBkdWFsIGFyYml0cmF0ZWQgc3lzdGVtIGJ1cyBhbmQgYSBjb25maWd1cmF0aW9uIGFuZCB0ZXN0CitidXMgKENBVCkuICBUaGUgdm95YWdlciBidXMgc3BlZWQgaXMgNDBNSHouICBUaGVyZWZvcmUgKHNpbmNlIGFsbAordm95YWdlciBjYXJkcyBhcmUgZHVhbCBwb3J0ZWQgZm9yIGVhY2ggc3lzdGVtIGJ1cykgdGhlIG1heGltdW0KK3RyYW5zZmVyIHJhdGUgaXMgMzIwTWIvcyBidXQgb25seSBpZiB5b3UgaGF2ZSB5b3VyIHNsb3QgY29uZmlndXJhdGlvbgordHVuZWQgKG9ubHkgbWVtb3J5IGNhcmRzIGNhbiBjb21tdW5pY2F0ZSB3aXRoIGJvdGggYnVzc2VzIGF0IG9uY2UsIENQVQorY2FyZHMgdXRpbGlzZSB0aGVtIG9uZSBhdCBhIHRpbWUpLgorCitWb3lhZ2VyIFNNUAorLS0tLS0tLS0tLS0KKworU2luY2Ugdm95YWdlciB3YXMgdGhlIGZpcnN0IGludGVsIGJhc2VkIFNNUCBzeXN0ZW0sIGl0IGlzIHNsaWdodGx5Cittb3JlIHByaW1pdGl2ZSB0aGFuIHRoZSBJbnRlbCBJTy1BUElDIGFwcHJvYWNoIHRvIFNNUC4gIFZveWFnZXIgYWxsb3dzCithcmJpdHJhcnkgaW50ZXJydXB0IHJvdXRpbmcgKGluY2x1ZGluZyBwcm9jZXNzb3IgYWZmaW5pdHkgcm91dGluZykgb2YKK2FsbCAxNiBQQyB0eXBlIGludGVycnVwdHMuICBIb3dldmVyIGl0IGRvZXMgdGhpcyBieSB1c2luZyBhIG1vZGlmaWVkCis1MjU5IG1hc3Rlci9zbGF2ZSBjaGlwIHNldCBpbnN0ZWFkIG9mIGFuIEFQSUMgYnVzLiAgQWRkaXRpb25hbGx5LAordm95YWdlciBzdXBwb3J0cyBDcm9zcyBQcm9jZXNzb3IgSW50ZXJydXB0cyAoQ1BJKSBlcXVpdmFsZW50IHRvIHRoZQorQVBJQyBJUElzLiAgVGhlcmUgYXJlIHR3byByb3V0ZWQgdm95YWdlciBpbnRlcnJ1cHQgbGluZXMgcHJvdmlkZWQgdG8KK2VhY2ggc2xvdC4KKworUHJvY2Vzc29yIENhcmRzCistLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29tZSBpbiBzaW5nbGUsIGR5YWRpYyBhbmQgcXVhZCBjb25maWd1cmF0aW9ucyAodGhlIHF1YWRzIGFyZQorcHJvYmxlbWF0aWMtLXNlZSBsYXRlcikuICBUaGUgbWF4aW11bSBjb25maWd1cmF0aW9uIGlzIDggcXVhZCBjYXJkcworZm9yIDMyIHdheSBTTVAuCisKK1F1YWQgUHJvY2Vzc29ycworLS0tLS0tLS0tLS0tLS0tCisKK0JlY2F1c2Ugdm95YWdlciBvbmx5IHN1cHBsaWVzIHR3byBpbnRlcnJ1cHQgbGluZXMgdG8gZWFjaCBQcm9jZXNzb3IKK2NhcmQsIHRoZSBRdWFkIHByb2Nlc3NvcnMgaGF2ZSB0byBiZSBjb25maWd1cmVkIChhbmQgQm9vdHN0cmFwcGVkKSBpbgorYXMgYSBwYWlyIG9mIE1hc3Rlci9TbGF2ZSBwcm9jZXNzb3JzLgorCitJbiBmYWN0LCBtb3N0IFF1YWQgY2FyZHMgb25seSBhY2NlcHQgb25lIFZJQyBpbnRlcnJ1cHQgbGluZSwgc28gdGhleQoraGF2ZSBvbmUgaW50ZXJydXB0IGhhbmRsaW5nIHByb2Nlc3NvciAoY2FsbGVkIHRoZSBWSUMgZXh0ZW5kZWQKK3Byb2Nlc3NvcikgYW5kIHRocmVlIG5vbi1pbnRlcnJ1cHQgaGFuZGxpbmcgcHJvY2Vzc29ycy4KKworQ3VycmVudCBTdGF0dXMKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBTeXN0ZW0gd2lsbCBib290IG9uIE1vbm8sIER5YWQgYW5kIFF1YWQgY2FyZHMuICBUaGVyZSB3YXMKK29yaWdpbmFsbHkgYSBRdWFkIGJvb3QgcHJvYmxlbSB3aGljaCBoYXMgYmVlbiBmaXhlZCBieSBwcm9wZXIgZ2R0CithbGlnbm1lbnQgaW4gdGhlIGluaXRpYWwgYm9vdCBsb2FkZXIuICBJZiB5b3Ugc3RpbGwgY2Fubm90IGdldCB5b3VyCit2b3lhZ2VyIHN5c3RlbSB0byBib290LCBlbWFpbCBtZSBhdDoKKworPEouRS5KLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20+CisKKworVGhlIFF1YWQgY2FyZHMgbm93IHN1cHBvcnQgdXNpbmcgdGhlIHNlcGFyYXRlIFF1YWQgQ1BJIHZlY3RvcnMgaW5zdGVhZAorb2YgZ29pbmcgdGhyb3VnaCB0aGUgVklDIG1haWxib3ggc3lzdGVtLgorCitUaGUgTGV2ZWwgNCBhcmNoaXRlY3R1cmUgKDM0MzAgYW5kIDMzNjAgTWFjaGluZXMpIHNob3VsZCBhbHNvIHdvcmsKK2ZpbmUuCisKK0R1bXAgU3dpdGNoCistLS0tLS0tLS0tLQorCitUaGUgdm95YWdlciBkdW1wIHN3aXRjaCBzZW5kcyBvdXQgYSBicm9hZGNhc3QgTk1JIHdoaWNoIHRoZSB2b3lhZ2VyCitjb2RlIGludGVyY2VwdHMgYW5kIGRvZXMgYSB0YXNrIGR1bXAuCisKK1Bvd2VyIFN3aXRjaAorLS0tLS0tLS0tLS0tCisKK1RoZSBmcm9udCBwYW5lbCBwb3dlciBzd2l0Y2ggaXMgaW50ZXJjZXB0ZWQgYnkgdGhlIGtlcm5lbCBhbmQgc2hvdWxkCitjYXVzZSBhIHN5c3RlbSBzaHV0ZG93biBhbmQgcG93ZXIgb2ZmLgorCitBIE5vdGUgQWJvdXQgTWl4ZWQgQ1BVIFN5c3RlbXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaW51eCBpc24ndCBkZXNpZ25lZCB0byBoYW5kbGUgbWl4ZWQgQ1BVIHN5c3RlbXMgdmVyeSB3ZWxsLiAgSW4gb3JkZXIKK3RvIGdldCBldmVyeXRoaW5nIGdvaW5nIHlvdSAqbXVzdCogbWFrZSBzdXJlIHRoYXQgeW91ciBsb3dlc3QKK2NhcGFiaWxpdHkgQ1BVIGlzIHVzZWQgZm9yIGJvb3RpbmcuICBBbHNvLCBtaXhpbmcgQ1BVIGNsYXNzZXMKKyhlLmcuIDQ4NiBhbmQgNTg2KSBpcyByZWFsbHkgbm90IGdvaW5nIHRvIHdvcmsgdmVyeSB3ZWxsIGF0IGFsbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdzEvdzEuZ2VuZXJpYyBiL0RvY3VtZW50YXRpb24vdzEvdzEuZ2VuZXJpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWNlMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi93MS93MS5nZW5lcmljCkBAIC0wLDAgKzEsMTkgQEAKK0FueSB3MSBkZXZpY2UgbXVzdCBiZSBjb25uZWN0ZWQgdG8gdzEgYnVzIG1hc3RlciBkZXZpY2UgLSBmb3IgZXhhbXBsZQorZHM5NDkwIHVzYiBkZXZpY2Ugb3IgdzEtb3Zlci1HUElPIG9yIFJTMjMyIGNvbnZlcnRlci4KK0RyaXZlciBmb3IgdzEgYnVzIG1hc3RlciBtdXN0IHByb3ZpZGUgc2V2ZXJhbCBmdW5jdGlvbnMoeW91IGNhbiBmaW5kCit0aGVtIGluIHN0cnVjdCB3MV9idXNfbWFzdGVyIGRlZmluaXRpb24gaW4gdzEuaCkgd2hpY2ggdGhlbiB3aWxsIGJlCitjYWxsZWQgYnkgdzEgY29yZSB0byBzZW5kIHZhcmlvdXMgY29tbWFuZHMgb3ZlciB3MSBidXMoYnkgZGVmYXVsdCBpdCBpcworcmVzZXQgYW5kIHNlYXJjaCBjb21tYW5kcykuIFdoZW4gc29tZSBkZXZpY2UgaXMgZm91bmQgb24gdGhlIGJ1cywgdzEgY29yZQorY2hlY2tzIGlmIGRyaXZlciBmb3IgaXQncyBmYW1pbHkgaXMgbG9hZGVkLgorSWYgZHJpdmVyIGlzIGxvYWRlZCB3MSBjb3JlIGNyZWF0ZXMgbmV3IHcxX3NsYXZlIG9iamVjdCBhbmQgcmVnaXN0ZXJzIGl0CitpbiB0aGUgc3lzdGVtKGNyZWF0ZXMgc29tZSBnZW5lcmljIHN5c2ZzIGZpbGVzKHN0cnVjdCB3MV9mYW1pbHlfb3BzIGluCit3MV9mYW1pbHkuaCksIG5vdGlmaWVzIGFueSByZWdpc3RlcmVkIGxpc3RlbmVyIGFuZCBzbyBvbi4uLikuCitJdCBpcyBkZXZpY2UgZHJpdmVyJ3MgYnVzaW5lc3MgdG8gcHJvdmlkZSBhbnkgY29tbXVuaWNhdGlvbiBtZXRob2QKK3Vwc3RyZWFtLgorRm9yIGV4YW1wbGUgdzFfdGhlcm0gZHJpdmVyKGRzMTg/MjAgdGhlcm1hbCBzZW5zb3IgZmFtaWx5IGRyaXZlcikKK3Byb3ZpZGVzIHRlbXBlcmF0dXJlIHJlYWRpbmcgZnVuY3Rpb24gd2hpY2ggaXMgYm91bmQgdG8gLT5yYmluKCkgbWV0aG9kCitvZiB0aGUgYWJvdmUgdzFfZmFtaWx5X29wcyBzdHJ1Y3R1cmUuCit3MV9zbWVtIC0gZHJpdmVyIGZvciBzaW1wbGUgNjRiaXQgbWVtb3J5IGNlbGwgcHJvdmlkZXMgSUQgcmVhZGluZworbWV0aG9kLgorCitZb3UgY2FuIGNhbGwgYWJvdmUgbWV0aG9kcyBieSByZWFkaW5nIGFwcHJvcHJpYXRlIHN5c2ZzIGZpbGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9wY3dkLXdhdGNoZG9nLnR4dCBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvcGN3ZC13YXRjaGRvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxODdhMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvcGN3ZC13YXRjaGRvZy50eHQKQEAgLTAsMCArMSwxMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgIEJlcmtzaGlyZSBQcm9kdWN0cyBQQyBXYXRjaGRvZyBDYXJkCisgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgSVNBIENhcmRzICBSZXZpc2lvbiBBIGFuZCBDCisgICAgICAgICAgIERvY3VtZW50YXRpb24gYW5kIERyaXZlciBieSBLZW4gSG9sbGlzIDxrZW5qaUBiaXRnYXRlLmNvbT4KKworIFRoZSBQQyBXYXRjaGRvZyBpcyBhIGNhcmQgdGhhdCBvZmZlcnMgdGhlIHNhbWUgdHlwZSBvZiBmdW5jdGlvbmFsaXR5IHRoYXQKKyB0aGUgV0RUIGNhcmQgZG9lcywgb25seSBpdCBkb2Vzbid0IHJlcXVpcmUgYW4gSVJRIHRvIHJ1bi4gIEZ1cnRoZXJtb3JlLAorIHRoZSBSZXZpc2lvbiBDIGNhcmQgYWxsb3dzIHlvdSB0byBtb25pdG9yIGFueSBJTyBQb3J0IHRvIGF1dG9tYXRpY2FsbHkKKyB0cmlnZ2VyIHRoZSBjYXJkIGludG8gYmVpbmcgcmVzZXQuICBUaGlzIHdheSB5b3UgY2FuIG1ha2UgdGhlIGNhcmQKKyBtb25pdG9yIGhhcmQgZHJpdmUgc3RhdHVzLCBvciBhbnl0aGluZyBlbHNlIHlvdSBuZWVkLgorCisgVGhlIFdhdGNoZG9nIERyaXZlciBoYXMgb25lIGJhc2ljIHJvbGU6IHRvIHRhbGsgdG8gdGhlIGNhcmQgYW5kIHNlbmQKKyBzaWduYWxzIHRvIGl0IHNvIGl0IGRvZXNuJ3QgcmVzZXQgeW91ciBjb21wdXRlciAuLi4gYXQgbGVhc3QgZHVyaW5nCisgbm9ybWFsIG9wZXJhdGlvbi4KKworIFRoZSBXYXRjaGRvZyBEcml2ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGZpbmQgeW91ciB3YXRjaGRvZyBjYXJkLCBhbmQgd2lsbAorIGF0dGFjaCBhIHJ1bm5pbmcgZHJpdmVyIGZvciB1c2Ugd2l0aCB0aGF0IGNhcmQuICBBZnRlciB0aGUgd2F0Y2hkb2cKKyBkcml2ZXJzIGhhdmUgaW5pdGlhbGl6ZWQsIHlvdSBjYW4gdGhlbiB0YWxrIHRvIHRoZSBjYXJkIHVzaW5nIHRoZSBQQworIFdhdGNoZG9nIHByb2dyYW0sIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9mdHAuYml0Z2F0ZS5jb20vcGN3ZC8uCisKKyBJIHN1Z2dlc3QgcHV0dGluZyBhICJ3YXRjaGRvZyAtZCIgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgYW4gZnNjaywgYW5kCisgYSAid2F0Y2hkb2cgLWUgLXQgMSIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiBhbiBmc2NrLiAgKFJlbWVtYmVyCisgdG8gcnVuIHRoZSBwcm9ncmFtIHdpdGggYW4gIiYiIHRvIHJ1biBpdCBpbiB0aGUgYmFja2dyb3VuZCEpCisKKyBJZiB5b3Ugd2FudCB0byB3cml0ZSBhIHByb2dyYW0gdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBQQyBXYXRjaGRvZworIGRyaXZlciwgc2ltcGx5IGRvIHRoZSBmb2xsb3dpbmc6CisKKy0tIFNuaXBwZXQgb2YgY29kZSAtLQorLyoKKyAqIFdhdGNoZG9nIERyaXZlciBUZXN0IFByb2dyYW0KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKworaW50IGZkOworCisvKgorICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgc2VuZHMgYW4gSU9DVEwgdG8gdGhlIGRyaXZlciwgd2hpY2ggaW4gdHVybiB0aWNrcworICogdGhlIFBDIFdhdGNoZG9nIGNhcmQgdG8gcmVzZXQgaXRzIGludGVybmFsIHRpbWVyIHNvIGl0IGRvZXNuJ3QgdHJpZ2dlcgorICogYSBjb21wdXRlciByZXNldC4KKyAqLwordm9pZCBrZWVwX2FsaXZlKHZvaWQpCit7CisgICAgaW50IGR1bW15OworCisgICAgaW9jdGwoZmQsIFdESU9DX0tFRVBBTElWRSwgJmR1bW15KTsKK30KKworLyoKKyAqIFRoZSBtYWluIHByb2dyYW0uICBSdW4gdGhlIHByb2dyYW0gd2l0aCAiLWQiIHRvIGRpc2FibGUgdGhlIGNhcmQsCisgKiBvciAiLWUiIHRvIGVuYWJsZSB0aGUgY2FyZC4KKyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBmZCA9IG9wZW4oIi9kZXYvd2F0Y2hkb2ciLCBPX1dST05MWSk7CisKKyAgICBpZiAoZmQgPT0gLTEpIHsKKwlmcHJpbnRmKHN0ZGVyciwgIldhdGNoZG9nIGRldmljZSBub3QgZW5hYmxlZC5cbiIpOworCWZmbHVzaChzdGRlcnIpOworCWV4aXQoLTEpOworICAgIH0KKworICAgIGlmIChhcmdjID4gMSkgeworCWlmICghc3RybmNhc2VjbXAoYXJndlsxXSwgIi1kIiwgMikpIHsKKwkgICAgaW9jdGwoZmQsIFdESU9DX1NFVE9QVElPTlMsIFdESU9TX0RJU0FCTEVDQVJEKTsKKwkgICAgZnByaW50ZihzdGRlcnIsICJXYXRjaGRvZyBjYXJkIGRpc2FibGVkLlxuIik7CisJICAgIGZmbHVzaChzdGRlcnIpOworCSAgICBleGl0KDApOworCX0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbMV0sICItZSIsIDIpKSB7CisJICAgIGlvY3RsKGZkLCBXRElPQ19TRVRPUFRJT05TLCBXRElPU19FTkFCTEVDQVJEKTsKKwkgICAgZnByaW50ZihzdGRlcnIsICJXYXRjaGRvZyBjYXJkIGVuYWJsZWQuXG4iKTsKKwkgICAgZmZsdXNoKHN0ZGVycik7CisJICAgIGV4aXQoMCk7CisJfSBlbHNlIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICItZCB0byBkaXNhYmxlLCAtZSB0byBlbmFibGUuXG4iKTsKKwkgICAgZnByaW50ZihzdGRlcnIsICJydW4gYnkgaXRzZWxmIHRvIHRpY2sgdGhlIGNhcmQuXG4iKTsKKwkgICAgZmZsdXNoKHN0ZGVycik7CisJICAgIGV4aXQoMCk7CisJfQorICAgIH0gZWxzZSB7CisJZnByaW50ZihzdGRlcnIsICJXYXRjaGRvZyBUaWNraW5nIEF3YXkhXG4iKTsKKwlmZmx1c2goc3RkZXJyKTsKKyAgICB9CisKKyAgICB3aGlsZSgxKSB7CisJa2VlcF9hbGl2ZSgpOworCXNsZWVwKDEpOworICAgIH0KK30KKy0tIEVuZCBzbmlwcGV0IC0tCisKKyBPdGhlciBJT0NUTCBmdW5jdGlvbnMgaW5jbHVkZToKKworCVdESU9DX0dFVFNVUFBPUlQKKwkJVGhpcyByZXR1cm5zIHRoZSBzdXBwb3J0IG9mIHRoZSBjYXJkIGl0c2VsZi4gIFRoaXMKKwkJcmV0dXJucyBpbiBzdHJ1Y3R1cmUgIlBDV0RTIiB3aGljaCByZXR1cm5zOgorCQkJb3B0aW9ucyA9IFdESU9TX1RFTVBQQU5JQworCQkJCSAgKFRoaXMgY2FyZCBzdXBwb3J0cyB0ZW1wZXJhdHVyZSkKKwkJCWZpcm13YXJlX3ZlcnNpb24gPSB4eHh4CisJCQkJICAoRmlybXdhcmUgdmVyc2lvbiBvZiB0aGUgY2FyZCkKKworCVdESU9DX0dFVFNUQVRVUworCQlUaGlzIHJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgY2FyZCwgd2l0aCB0aGUgYml0cyBvZgorCQlXRElPRl8qIGJpdHdpc2UtYW5kZWQgaW50byB0aGUgdmFsdWUuICAoVGhlIGNvbW1lbnRzCisJCWFyZSBpbiBsaW51eC9wY3dkLmgpCisKKwlXRElPQ19HRVRCT09UU1RBVFVTCisJCVRoaXMgcmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBjYXJkIHRoYXQgd2FzIHJlcG9ydGVkCisJCWF0IGJvb3R1cC4KKworCVdESU9DX0dFVFRFTVAKKwkJVGhpcyByZXR1cm5zIHRoZSB0ZW1wZXJhdHVyZSBvZiB0aGUgY2FyZC4gIChZb3UgY2FuIGFsc28KKwkJcmVhZCAvZGV2L3dhdGNoZG9nLCB3aGljaCBnaXZlcyBhIHRlbXBlcmF0dXJlIHVwZGF0ZQorCQlldmVyeSBzZWNvbmQuKQorCisJV0RJT0NfU0VUT1BUSU9OUworCQlUaGlzIGxldHMgeW91IHNldCB0aGUgb3B0aW9ucyBvZiB0aGUgY2FyZC4gIFlvdSBjYW4gZWl0aGVyCisJCWVuYWJsZSBvciBkaXNhYmxlIHRoZSBjYXJkIHRoaXMgd2F5LgorCisJV0RJT0NfS0VFUEFMSVZFCisJCVRoaXMgcGluZ3MgdGhlIGNhcmQgdG8gdGVsbCBpdCBub3QgdG8gcmVzZXQgeW91ciBjb21wdXRlci4KKworIEFuZCB0aGF0J3MgYWxsIHNoZSB3cm90ZSEKKworIC0tIEtlbiBIb2xsaXMKKyAgICAoa2VuamlAYml0Z2F0ZS5jb20pCisKKyhUaGlzIGRvY3VtZW50YXRpb24gbWF5IGJlIG91dCBvZiBkYXRlLiAgQ2hlY2sKKyBodHRwOi8vZnRwLmJpdGdhdGUuY29tL3Bjd2QvIGZvciB0aGUgYWJzb2x1dGUgbGF0ZXN0IGFkZGl0aW9ucy4pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzODhhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2ctYXBpLnR4dApAQCAtMCwwICsxLDM5OSBAQAorVGhlIExpbnV4IFdhdGNoZG9nIGRyaXZlciBBUEkuCisKK0NvcHlyaWdodCAyMDAyIENocmlzdGVyIFdlaW5nZWwgPHdpbmdlbEBuYW5vLXN5c3RlbS5jb20+CisKK1NvbWUgcGFydHMgb2YgdGhpcyBkb2N1bWVudCBhcmUgY29waWVkIHZlcmJhdGltIGZyb20gdGhlIHNiYzYweHh3ZHQKK2RyaXZlciB3aGljaCBpcyAoYykgQ29weXJpZ2h0IDIwMDAgSmFrb2IgT2VzdGVyZ2FhcmQgPGpha29iQG9zdGVuZmVsZC5kaz4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBMaW51eCAyLjQuMTgga2VybmVsLgorCitJbnRyb2R1Y3Rpb246CisKK0EgV2F0Y2hkb2cgVGltZXIgKFdEVCkgaXMgYSBoYXJkd2FyZSBjaXJjdWl0IHRoYXQgY2FuIHJlc2V0IHRoZQorY29tcHV0ZXIgc3lzdGVtIGluIGNhc2Ugb2YgYSBzb2Z0d2FyZSBmYXVsdC4gIFlvdSBwcm9iYWJseSBrbmV3IHRoYXQKK2FscmVhZHkuCisKK1VzdWFsbHkgYSB1c2Vyc3BhY2UgZGFlbW9uIHdpbGwgbm90aWZ5IHRoZSBrZXJuZWwgd2F0Y2hkb2cgZHJpdmVyIHZpYSB0aGUKKy9kZXYvd2F0Y2hkb2cgc3BlY2lhbCBkZXZpY2UgZmlsZSB0aGF0IHVzZXJzcGFjZSBpcyBzdGlsbCBhbGl2ZSwgYXQKK3JlZ3VsYXIgaW50ZXJ2YWxzLiAgV2hlbiBzdWNoIGEgbm90aWZpY2F0aW9uIG9jY3VycywgdGhlIGRyaXZlciB3aWxsCit1c3VhbGx5IHRlbGwgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlciwgYW5kCit0aGF0IHRoZSB3YXRjaGRvZyBzaG91bGQgd2FpdCBmb3IgeWV0IGFub3RoZXIgbGl0dGxlIHdoaWxlIHRvIHJlc2V0Cit0aGUgc3lzdGVtLiAgSWYgdXNlcnNwYWNlIGZhaWxzIChSQU0gZXJyb3IsIGtlcm5lbCBidWcsIHdoYXRldmVyKSwgdGhlCitub3RpZmljYXRpb25zIGNlYXNlIHRvIG9jY3VyLCBhbmQgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIHdpbGwgcmVzZXQgdGhlCitzeXN0ZW0gKGNhdXNpbmcgYSByZWJvb3QpIGFmdGVyIHRoZSB0aW1lb3V0IG9jY3Vycy4KKworVGhlIExpbnV4IHdhdGNoZG9nIEFQSSBpcyBhIHJhdGhlciBBRCBob2MgY29uc3RydWN0aW9uIGFuZCBkaWZmZXJlbnQKK2RyaXZlcnMgaW1wbGVtZW50IGRpZmZlcmVudCwgYW5kIHNvbWV0aW1lcyBpbmNvbXBhdGlibGUsIHBhcnRzIG9mIGl0LgorVGhpcyBmaWxlIGlzIGFuIGF0dGVtcHQgdG8gZG9jdW1lbnQgdGhlIGV4aXN0aW5nIHVzYWdlIGFuZCBhbGxvdworZnV0dXJlIGRyaXZlciB3cml0ZXJzIHRvIHVzZSBpdCBhcyBhIHJlZmVyZW5jZS4KKworVGhlIHNpbXBsZXN0IEFQSToKKworQWxsIGRyaXZlcnMgc3VwcG9ydCB0aGUgYmFzaWMgbW9kZSBvZiBvcGVyYXRpb24sIHdoZXJlIHRoZSB3YXRjaGRvZworYWN0aXZhdGVzIGFzIHNvb24gYXMgL2Rldi93YXRjaGRvZyBpcyBvcGVuZWQgYW5kIHdpbGwgcmVib290IHVubGVzcwordGhlIHdhdGNoZG9nIGlzIHBpbmdlZCB3aXRoaW4gYSBjZXJ0YWluIHRpbWUsIHRoaXMgdGltZSBpcyBjYWxsZWQgdGhlCit0aW1lb3V0IG9yIG1hcmdpbi4gIFRoZSBzaW1wbGVzdCB3YXkgdG8gcGluZyB0aGUgd2F0Y2hkb2cgaXMgdG8gd3JpdGUKK3NvbWUgZGF0YSB0byB0aGUgZGV2aWNlLiAgU28gYSB2ZXJ5IHNpbXBsZSB3YXRjaGRvZyBkYWVtb24gd291bGQgbG9vaworbGlrZSB0aGlzOgorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKSB7CisJaW50IGZkPW9wZW4oIi9kZXYvd2F0Y2hkb2ciLE9fV1JPTkxZKTsKKwlpZiAoZmQ9PS0xKSB7CisJCXBlcnJvcigid2F0Y2hkb2ciKTsKKwkJZXhpdCgxKTsKKwl9CisJd2hpbGUoMSkgeworCQl3cml0ZShmZCwgIlwwIiwgMSk7CisJCXNsZWVwKDEwKTsKKwl9Cit9CisKK0EgbW9yZSBhZHZhbmNlZCBkcml2ZXIgY291bGQgZm9yIGV4YW1wbGUgY2hlY2sgdGhhdCBhIEhUVFAgc2VydmVyIGlzCitzdGlsbCByZXNwb25kaW5nIGJlZm9yZSBkb2luZyB0aGUgd3JpdGUgY2FsbCB0byBwaW5nIHRoZSB3YXRjaGRvZy4KKworV2hlbiB0aGUgZGV2aWNlIGlzIGNsb3NlZCwgdGhlIHdhdGNoZG9nIGlzIGRpc2FibGVkLiAgVGhpcyBpcyBub3QKK2Fsd2F5cyBzdWNoIGEgZ29vZCBpZGVhLCBzaW5jZSBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgd2F0Y2hkb2cKK2RhZW1vbiBhbmQgaXQgY3Jhc2hlcyB0aGUgc3lzdGVtIHdpbGwgbm90IHJlYm9vdC4gIEJlY2F1c2Ugb2YgdGhpcywKK3NvbWUgb2YgdGhlIGRyaXZlcnMgc3VwcG9ydCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gIkRpc2FibGUgd2F0Y2hkb2cKK3NodXRkb3duIG9uIGNsb3NlIiwgQ09ORklHX1dBVENIRE9HX05PV0FZT1VULiAgSWYgaXQgaXMgc2V0IHRvIFkgd2hlbgorY29tcGlsaW5nIHRoZSBrZXJuZWwsIHRoZXJlIGlzIG5vIHdheSBvZiBkaXNhYmxpbmcgdGhlIHdhdGNoZG9nIG9uY2UKK2l0IGhhcyBiZWVuIHN0YXJ0ZWQuICBTbywgaWYgdGhlIHdhdGNoZG9nIGRhbWVvbiBjcmFzaGVzLCB0aGUgc3lzdGVtCit3aWxsIHJlYm9vdCBhZnRlciB0aGUgdGltZW91dCBoYXMgcGFzc2VkLgorCitTb21lIG90aGVyIGRyaXZlcnMgd2lsbCBub3QgZGlzYWJsZSB0aGUgd2F0Y2hkb2csIHVubGVzcyBhIHNwZWNpZmljCittYWdpYyBjaGFyYWN0ZXIgJ1YnIGhhcyBiZWVuIHNlbnQgL2Rldi93YXRjaGRvZyBqdXN0IGJlZm9yZSBjbG9zaW5nCit0aGUgZmlsZS4gIElmIHRoZSB1c2Vyc3BhY2UgZGFlbW9uIGNsb3NlcyB0aGUgZmlsZSB3aXRob3V0IHNlbmRpbmcKK3RoaXMgc3BlY2lhbCBjaGFyYWN0ZXIsIHRoZSBkcml2ZXIgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGFlbW9uIChhbmQKK3VzZXJzcGFjZSBpbiBnZW5lcmFsKSBkaWVkLCBhbmQgd2lsbCBzdG9wIHBpbmdpbmcgdGhlIHdhdGNoZG9nIHdpdGhvdXQKK2Rpc2FibGluZyBpdCBmaXJzdC4gIFRoaXMgd2lsbCB0aGVuIGNhdXNlIGEgcmVib290LgorCitUaGUgaW9jdGwgQVBJOgorCitBbGwgY29uZm9ybWluZyBkcml2ZXJzIGFsc28gc3VwcG9ydCBhbiBpb2N0bCBBUEkuCisKK1BpbmdpbmcgdGhlIHdhdGNoZG9nIHVzaW5nIGFuIGlvY3RsOgorCitBbGwgZHJpdmVycyB0aGF0IGhhdmUgYW4gaW9jdGwgaW50ZXJmYWNlIHN1cHBvcnQgYXQgbGVhc3Qgb25lIGlvY3RsLAorS0VFUEFMSVZFLiAgVGhpcyBpb2N0bCBkb2VzIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcgYXMgYSB3cml0ZSB0byB0aGUKK3dhdGNoZG9nIGRldmljZSwgc28gdGhlIG1haW4gbG9vcCBpbiB0aGUgYWJvdmUgcHJvZ3JhbSBjb3VsZCBiZQorcmVwbGFjZWQgd2l0aDoKKworCXdoaWxlICgxKSB7CisJCWlvY3RsKGZkLCBXRElPQ19LRUVQQUxJVkUsIDApOworCQlzbGVlcCgxMCk7CisJfQorCit0aGUgYXJndW1lbnQgdG8gdGhlIGlvY3RsIGlzIGlnbm9yZWQuCisKK1NldHRpbmcgYW5kIGdldHRpbmcgdGhlIHRpbWVvdXQ6CisKK0ZvciBzb21lIGRyaXZlcnMgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRoZSB3YXRjaGRvZyB0aW1lb3V0IG9uIHRoZQorZmx5IHdpdGggdGhlIFNFVFRJTUVPVVQgaW9jdGwsIHRob3NlIGRyaXZlcnMgaGF2ZSB0aGUgV0RJT0ZfU0VUVElNRU9VVAorZmxhZyBzZXQgaW4gdGhlaXIgb3B0aW9uIGZpZWxkLiAgVGhlIGFyZ3VtZW50IGlzIGFuIGludGVnZXIKK3JlcHJlc2VudGluZyB0aGUgdGltZW91dCBpbiBzZWNvbmRzLiAgVGhlIGRyaXZlciByZXR1cm5zIHRoZSByZWFsCit0aW1lb3V0IHVzZWQgaW4gdGhlIHNhbWUgdmFyaWFibGUsIGFuZCB0aGlzIHRpbWVvdXQgbWlnaHQgZGlmZmVyIGZyb20KK3RoZSByZXF1ZXN0ZWQgb25lIGR1ZSB0byBsaW1pdGF0aW9uIG9mIHRoZSBoYXJkd2FyZS4KKworICAgIGludCB0aW1lb3V0ID0gNDU7CisgICAgaW9jdGwoZmQsIFdESU9DX1NFVFRJTUVPVVQsICZ0aW1lb3V0KTsKKyAgICBwcmludGYoIlRoZSB0aW1lb3V0IHdhcyBzZXQgdG8gJWQgc2Vjb25kc1xuIiwgdGltZW91dCk7CisKK1RoaXMgZXhhbXBsZSBtaWdodCBhY3R1YWxseSBwcmludCAiVGhlIHRpbWVvdXQgd2FzIHNldCB0byA2MCBzZWNvbmRzIgoraWYgdGhlIGRldmljZSBoYXMgYSBncmFudWxhcml0eSBvZiBtaW51dGVzIGZvciBpdHMgdGltZW91dC4KKworU3RhcnRpbmcgd2l0aCB0aGUgTGludXggMi40LjE4IGtlcm5lbCwgaXQgaXMgcG9zc2libGUgdG8gcXVlcnkgdGhlCitjdXJyZW50IHRpbWVvdXQgdXNpbmcgdGhlIEdFVFRJTUVPVVQgaW9jdGwuCisKKyAgICBpb2N0bChmZCwgV0RJT0NfR0VUVElNRU9VVCwgJnRpbWVvdXQpOworICAgIHByaW50ZigiVGhlIHRpbWVvdXQgd2FzIGlzICVkIHNlY29uZHNcbiIsIHRpbWVvdXQpOworCitFbnZpbnJvbm1lbnRhbCBtb25pdG9yaW5nOgorCitBbGwgd2F0Y2hkb2cgZHJpdmVycyBhcmUgcmVxdWlyZWQgcmV0dXJuIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c3RlbSwKK3NvbWUgZG8gdGVtcGVyYXR1cmUsIGZhbiBhbmQgcG93ZXIgbGV2ZWwgbW9uaXRvcmluZywgc29tZSBjYW4gdGVsbCB5b3UKK3RoZSByZWFzb24gZm9yIHRoZSBsYXN0IHJlYm9vdCBvZiB0aGUgc3lzdGVtLiAgVGhlIEdFVFNVUFBPUlQgaW9jdGwgaXMKK2F2YWlsYWJsZSB0byBhc2sgd2hhdCB0aGUgZGV2aWNlIGNhbiBkbzoKKworCXN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50OworCWlvY3RsKGZkLCBXRElPQ19HRVRTVVBQT1JULCAmaWRlbnQpOworCit0aGUgZmllbGRzIHJldHVybmVkIGluIHRoZSBpZGVudCBzdHJ1Y3QgYXJlOgorCisgICAgICAgIGlkZW50aXR5CQlhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgd2F0Y2hkb2cgZHJpdmVyCisJZmlybXdhcmVfdmVyc2lvbgl0aGUgZmlybXdhcmUgdmVyc2lvbiBvZiB0aGUgY2FyZCBpZiBhdmFpbGFibGUKKwlvcHRpb25zCQkJYSBmbGFncyBkZXNjcmliaW5nIHdoYXQgdGhlIGRldmljZSBzdXBwb3J0cworCit0aGUgb3B0aW9ucyBmaWVsZCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIGJpdHMgc2V0LCBhbmQgZGVzY3JpYmVzIHdoYXQKK2tpbmQgb2YgaW5mb3JtYXRpb24gdGhhdCB0aGUgR0VUX1NUQVRVUyBhbmQgR0VUX0JPT1RfU1RBVFVTIGlvY3RscyBjYW4KK3JldHVybi4gICBbRklYTUUgLS0gSXMgdGhpcyBjb3JyZWN0P10KKworCVdESU9GX09WRVJIRUFUCQlSZXNldCBkdWUgdG8gQ1BVIG92ZXJoZWF0CisKK1RoZSBtYWNoaW5lIHdhcyBsYXN0IHJlYm9vdGVkIGJ5IHRoZSB3YXRjaGRvZyBiZWNhdXNlIHRoZSB0aGVybWFsIGxpbWl0IHdhcworZXhjZWVkZWQKKworCVdESU9GX0ZBTkZBVUxUCQlGYW4gZmFpbGVkCisKK0Egc3lzdGVtIGZhbiBtb25pdG9yZWQgYnkgdGhlIHdhdGNoZG9nIGNhcmQgaGFzIGZhaWxlZAorCisJV0RJT0ZfRVhURVJOMQkJRXh0ZXJuYWwgcmVsYXkgMQorCitFeHRlcm5hbCBtb25pdG9yaW5nIHJlbGF5L3NvdXJjZSAxIHdhcyB0cmlnZ2VyZWQuIENvbnRyb2xsZXJzIGludGVuZGVkIGZvcgorcmVhbCB3b3JsZCBhcHBsaWNhdGlvbnMgaW5jbHVkZSBleHRlcm5hbCBtb25pdG9yaW5nIHBpbnMgdGhhdCB3aWxsIHRyaWdnZXIKK2EgcmVzZXQuCisKKwlXRElPRl9FWFRFUk4yCQlFeHRlcm5hbCByZWxheSAyCisKK0V4dGVybmFsIG1vbml0b3JpbmcgcmVsYXkvc291cmNlIDIgd2FzIHRyaWdnZXJlZAorCisJV0RJT0ZfUE9XRVJVTkRFUglQb3dlciBiYWQvcG93ZXIgZmF1bHQKKworVGhlIG1hY2hpbmUgaXMgc2hvd2luZyBhbiB1bmRlcnZvbHRhZ2Ugc3RhdHVzCisKKwlXRElPRl9DQVJEUkVTRVQJCUNhcmQgcHJldmlvdXNseSByZXNldCB0aGUgQ1BVCisKK1RoZSBsYXN0IHJlYm9vdCB3YXMgY2F1c2VkIGJ5IHRoZSB3YXRjaGRvZyBjYXJkCisKKwlXRElPRl9QT1dFUk9WRVIJCVBvd2VyIG92ZXIgdm9sdGFnZQorCitUaGUgbWFjaGluZSBpcyBzaG93aW5nIGFuIG92ZXJ2b2x0YWdlIHN0YXR1cy4gTm90ZSB0aGF0IGlmIG9uZSBsZXZlbCBpcwordW5kZXIgYW5kIG9uZSBvdmVyIGJvdGggYml0cyB3aWxsIGJlIHNldCAtIHRoaXMgbWF5IHNlZW0gb2RkIGJ1dCBtYWtlcworc2Vuc2UuCisKKwlXRElPRl9LRUVQQUxJVkVQSU5HCUtlZXAgYWxpdmUgcGluZyByZXBseQorCitUaGUgd2F0Y2hkb2cgc2F3IGEga2VlcGFsaXZlIHBpbmcgc2luY2UgaXQgd2FzIGxhc3QgcXVlcmllZC4KKworCVdESU9GX1NFVFRJTUVPVVQJQ2FuIHNldC9nZXQgdGhlIHRpbWVvdXQKKworCitGb3IgdGhvc2UgZHJpdmVycyB0aGF0IHJldHVybiBhbnkgYml0cyBzZXQgaW4gdGhlIG9wdGlvbiBmaWVsZCwgdGhlCitHRVRTVEFUVVMgYW5kIEdFVEJPT1RTVEFUVVMgaW9jdGxzIGNhbiBiZSB1c2VkIHRvIGFzayBmb3IgdGhlIGN1cnJlbnQKK3N0YXR1cywgYW5kIHRoZSBzdGF0dXMgYXQgdGhlIGxhc3QgcmVib290LCByZXNwZWN0aXZlbHkuICAKKworICAgIGludCBmbGFnczsKKyAgICBpb2N0bChmZCwgV0RJT0NfR0VUU1RBVFVTLCAmZmxhZ3MpOworCisgICAgb3IKKworICAgIGlvY3RsKGZkLCBXRElPQ19HRVRCT09UU1RBVFVTLCAmZmxhZ3MpOworCitOb3RlIHRoYXQgbm90IGFsbCBkZXZpY2VzIHN1cHBvcnQgdGhlc2UgdHdvIGNhbGxzLCBhbmQgc29tZSBvbmx5CitzdXBwb3J0IHRoZSBHRVRCT09UU1RBVFVTIGNhbGwuCisKK1NvbWUgZHJpdmVycyBjYW4gbWVhc3VyZSB0aGUgdGVtcGVyYXR1cmUgdXNpbmcgdGhlIEdFVFRFTVAgaW9jdGwuICBUaGUKK3JldHVybmVkIHZhbHVlIGlzIHRoZSB0ZW1wZXJhdHVyZSBpbiBkZWdyZWVzIGZhcmVuaGVpdC4KKworICAgIGludCB0ZW1wZXJhdHVyZTsKKyAgICBpb2N0bChmZCwgV0RJT0NfR0VUVEVNUCwgJnRlbXBlcmF0dXJlKTsKKworRmluYWxseSB0aGUgU0VUT1BUSU9OUyBpb2N0bCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHNvbWUgYXNwZWN0cyBvZgordGhlIGNhcmRzIG9wZXJhdGlvbjsgcmlnaHQgbm93IHRoZSBwY3dkIGRyaXZlciBpcyB0aGUgb25seSBvbmUKK3N1cHBvcnRpbmcgdGhpc3MgaW9jdGwuCisKKyAgICBpbnQgb3B0aW9ucyA9IDA7CisgICAgaW9jdGwoZmQsIFdESU9DX1NFVE9QVElPTlMsIG9wdGlvbnMpOworCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKKworCVdESU9TX0RJU0FCTEVDQVJECVR1cm4gb2ZmIHRoZSB3YXRjaGRvZyB0aW1lcgorCVdESU9TX0VOQUJMRUNBUkQJVHVybiBvbiB0aGUgd2F0Y2hkb2cgdGltZXIKKwlXRElPU19URU1QUEFOSUMJCUtlcm5lbCBwYW5pYyBvbiB0ZW1wZXJhdHVyZSB0cmlwCisKK1tGSVhNRSAtLSBiZXR0ZXIgZXhwbGFuYXRpb25zXQorCitJbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGN1cnJlbnQgZHJpdmVycyBpbiB0aGUga2VybmVsIHRyZWU6CisKK0hlcmUgSSBoYXZlIHRyaWVkIHRvIHN1bW1hcml6ZSB3aGF0IHRoZSBkaWZmZXJlbnQgZHJpdmVycyBzdXBwb3J0IGFuZAord2hlcmUgdGhleSBkbyBzdHJhbmdlIHRoaW5ncyBjb21wYXJlZCB0byB0aGUgb3RoZXIgZHJpdmVycy4KKworYWNxdWlyZXdkdC5jIC0tIEFjcXVpcmUgU2luZ2xlIEJvYXJkIENvbXB1dGVyCisKKwlUaGlzIGRyaXZlciBoYXMgYSBoYXJkY29kZWQgdGltZW91dCBvZiAxIG1pbnV0ZQorCisJU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisKKwlHRVRTVVBQT1JUIHJldHVybnMgS0VFUEFMSVZFUElORy4gIEdFVFNUQVRVUyB3aWxsIHJldHVybiAxIGlmCisJdGhlIGRldmljZSBpcyBvcGVuLCAwIGlmIG5vdC4gIFtGSVhNRSAtLSBpc24ndCB0aGlzIHJhdGhlcgorCXNpbGx5PyAgVG8gYmUgYWJsZSB0byB1c2UgdGhlIGlvY3RsLCB0aGUgZGV2aWNlIG11c3QgYmUgb3BlbgorCWFuZCBzbyBHRVRTVEFUVVMgd2lsbCBhbHdheXMgcmV0dXJuIDFdLgorCithZHZhbnRlY2h3ZHQuYyAtLSBBZHZhbnRlY2ggU2luZ2xlIEJvYXJkIENvbXB1dGVyCisKKwlUaW1lb3V0IHRoYXQgZGVmYXVsdHMgdG8gNjAgc2Vjb25kcywgc3VwcG9ydHMgU0VUVElNRU9VVC4KKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX0tFRVBBTElWRVBJTkcgYW5kIFdESU9GX1NFVFRJTUVPVVQuCisJVGhlIEdFVFNUQVRVUyBjYWxsIHJldHVybnMgaWYgdGhlIGRldmljZSBpcyBvcGVuIG9yIG5vdC4KKwlbRklYTUUgLS0gc2lsbGluZXNzIGFnYWluP10KKwkKK2V1cm90ZWNod2R0LmMgLS0gRXVyb3RlY2ggQ1BVLTEyMjAvMTQxMAorCisJVGhlIHRpbWVvdXQgY2FuIGJlIHNldCB1c2luZyB0aGUgU0VUVElNRU9VVCBpb2N0bCBhbmQgZGVmYXVsdHMKKwl0byA2MCBzZWNvbmRzLgorCisJQWxzbyBoYXMgYSBtb2R1bGUgcGFyYW1ldGVyICJldiIsIGV2ZW50IHR5cGUgd2hpY2ggY29udHJvbHMKKwl3aGF0IHNob3VsZCBoYXBwZW4gb24gYSB0aW1lb3V0LCB0aGUgc3RyaW5nICJpbnQiIG9yIGFueXRoaW5nCisJZWxzZSB0aGF0IGNhdXNlcyBhIHJlYm9vdC4gIFtGSVhNRSAtLSBiZXR0ZXIgZGVzY3JpcHRpb25dCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCUdFVFNVUFBPUlQgcmV0dXJucyBDQVJEUkVTRVQgYW5kIFdESU9GX1NFVFRJTUVPVVQgYnV0CisJR0VUU1RBVFVTIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIEdFVEJPT1RTVEFUVVMganVzdCByZXR1cm5zIDAuCisKK2k4MTAtdGNvLmMgLS0gSW50ZWwgODEwIGNoaXBzZXQKKworCUFsc28gaGFzIHN1cHBvcnQgZm9yIGEgbG90IG9mIG90aGVyIGk4eDAgc3R1ZmYsIGJ1dCB0aGUKKwl3YXRjaGRvZyBpcyBvbmUgb2YgdGhlIHRoaW5ncy4KKworCVRoZSB0aW1lb3V0IGlzIHNldCB1c2luZyB0aGUgbW9kdWxlIHBhcmFtZXRlciAiaTgxMF9tYXJnaW4iLAorCXdoaWNoIGlzIGluIHN0ZXBzIG9mIDAuNiBzZWNvbmRzIHdoZXJlIDI8aTgxMF9tYXJnaW48NjQuICBUaGUKKwlkcml2ZXIgc3VwcG9ydHMgdGhlIFNFVFRJTUVPVVQgaW9jdGwuCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQuCisKKwlHRVRTVVBQT1JUIHJldHVybnMgV0RJT0ZfU0VUVElNRU9VVC4gIFRoZSBHRVRTVEFUVVMgY2FsbAorCXJldHVybnMgc29tZSBraW5kIG9mIHRpbWVyIHZhbHVlIHdoaWNoIGlzdCBub3QgY29tcGF0aWJsZSB3aXRoCisJdGhlIG90aGVyIGRyaXZlcnMuICBHRVRCT09UIHN0YXR1cyByZXR1cm5zIHNvbWUga2luZCBvZgorCWhhcmR3YXJlIHNwZWNpZmljIGJvb3Qgc3RhdHVzLiAgW0ZJWE1FIC0tIGRlc2NyaWJlIHRoaXNdCisKK2liNzAwd2R0LmMgLS0gSUI3MDAgU2luZ2xlIEJvYXJkIENvbXB1dGVyCisKKwlEZWZhdWx0IHRpbWVvdXQgb2YgMzAgc2Vjb25kcyBhbmQgdGhlIHRpbWVvdXQgaXMgc2V0dGFibGUKKwl1c2luZyB0aGUgU0VUVElNRU9VVCBpb2N0bC4gIE5vdGUgdGhhdCBvbmx5IGEgZmV3IHRpbWVvdXQKKwl2YWx1ZXMgYXJlIHN1cHBvcnRlZC4KKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX0tFRVBBTElWRVBJTkcgYW5kIFdESU9GX1NFVFRJTUVPVVQuCisJVGhlIEdFVFNUQVRVUyBjYWxsIHJldHVybnMgaWYgdGhlIGRldmljZSBpcyBvcGVuIG9yIG5vdC4KKwlbRklYTUUgLS0gc2lsbGluZXNzIGFnYWluP10KKworbWFjaHp3ZC5jIC0tIE1hY2haIFpGLUxvZ2ljCisKKwlIYXJkY29kZWQgdGltZW91dCBvZiAxMCBzZWNvbmRzCisKKwlIYXMgYSBtb2R1bGUgcGFyYW1ldGVyICJhY3Rpb24iIHRoYXQgY29udHJvbHMgd2hhdCBoYXBwZW5zCisJd2hlbiB0aGUgdGltZW91dCBydW5zIG91dCB3aGljaCBjYW4gYmUgMCA9IFJFU0VUIChkZWZhdWx0KSwgCisJMSA9IFNNSSwgMiA9IE5NSSwgMyA9IFNDSS4KKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBhbmQgdGhlIG1hZ2ljIGNoYXJhY3RlcgorCSdWJyBjbG9zZSBoYW5kbGluZy4KKworCUdFVFNVUFBPUlQgcmV0dXJucyBXRElPRl9LRUVQQUxJVkVQSU5HLCBhbmQgdGhlIEdFVFNUQVRVUyBjYWxsCisJcmV0dXJucyBpZiB0aGUgZGV2aWNlIGlzIG9wZW4gb3Igbm90LiAgW0ZJWE1FIC0tIHNpbGxpbmVzcworCWFnYWluP10KKworbWl4Y29td2QuYyAtLSBNaXhDb20gV2F0Y2hkb2cKKworCVtGSVhNRSAtLSBJJ20gdW5hYmxlIHRvIHRlbGwgd2hhdCB0aGUgdGltZW91dCBpc10KKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX0tFRVBBTElWRVBJTkcsIEdFVFNUQVRVUyByZXR1cm5zIGlmCisJdGhlIGRldmljZSBpcyBvcGVuZWQgb3Igbm90IFtGSVhNRSAtLSBJJ20gbm90IHJlYWxseSBzdXJlIGhvdworCXRoaXMgd29ya3MsIHRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgbWFnaWMgY29ubmVjdGVkIHRvCisJQ09ORklHX1dBVENIRE9HX05PV0FZT1VUXQorCitwY3dkLmMgLS0gQmVya3NoaXJlIFBDIFdhdGNoZG9nCisKKwlIYXJkY29kZWQgdGltZW91dCBvZiAxLjUgc2Vjb25kcworCisJU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisKKwlHRVRTVVBQT1JUIHJldHVybnMgV0RJT0ZfT1ZFUkhFQVR8V0RJT0ZfQ0FSRFJFU0VUIGFuZCBib3RoCisJR0VUU1RBVFVTIGFuZCBHRVRCT09UU1RBVFVTIHJldHVybiBzb21ldGhpbmcgdXNlZnVsLgorCisJVGhlIFNFVE9QVElPTlMgY2FsbCBjYW4gYmUgdXNlZCB0byBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNhcmQKKwlhbmQgdG8gYXNrIHRoZSBkcml2ZXIgdG8gY2FsbCBwYW5pYyBpZiB0aGUgc3lzdGVtIG92ZXJoZWF0cy4KKworc2JjNjB4eHdkdC5jIC0tIDYweHggU2luZ2xlIEJvYXJkIENvbXB1dGVyCisKKwlIYXJkY29kZWQgdGltZW91dCBvZiAxMCBzZWNvbmRzCisKKwlEb2VzIG5vdCBzdXBwb3J0IENPTkZJR19XQVRDSERPR19OT1dBWU9VVCwgYnV0IGhhcyB0aGUgbWFnaWMKKwljaGFyYWN0ZXIgJ1YnIGNsb3NlIGhhbmRsaW5nLgorCisJTm8gYml0cyBzZXQgaW4gR0VUU1VQUE9SVAorCitzY3gyMDAuYyAtLSBOYXRpb25hbCBTQ3gyMDAgQ1BVcworCisJTm90IGluIHRoZSBrZXJuZWwgeWV0LgorCisJVGhlIHRpbWVvdXQgaXMgc2V0IHVzaW5nIGEgbW9kdWxlIHBhcmFtZXRlciAibWFyZ2luIiB3aGljaAorCWRlZmF1bHRzIHRvIDYwIHNlY29uZHMuICBUaGUgdGltZW91dCBjYW4gYWxzbyBiZSBzZXQgdXNpbmcKKwlTRVRUSU1FT1VUIGFuZCByZWFkIHVzaW5nIEdFVFRJTUVPVVQuCisKKwlTdXBwb3J0cyBhIG1vZHVsZSBwYXJhbWV0ZXIgIm5vd2F5b3V0IiB0aGF0IGlzIGluaXRpYWxpemVkCisJd2l0aCB0aGUgdmFsdWUgb2YgQ09ORklHX1dBVENIRE9HX05PV0FZT1VULiAgQWxzbyBzdXBwb3J0cyB0aGUKKwltYWdpYyBjaGFyYWN0ZXIgJ1YnIGhhbmRsaW5nLgorCitzaHdkdC5jIC0tIFN1cGVySCAzLzQgcHJvY2Vzc29ycworCisJW0ZJWE1FIC0tIEknbSB1bmFibGUgdG8gdGVsbCB3aGF0IHRoZSB0aW1lb3V0IGlzXQorCisJU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisKKwlHRVRTVVBQT1JUIHJldHVybnMgV0RJT0ZfS0VFUEFMSVZFUElORywgYW5kIHRoZSBHRVRTVEFUVVMgY2FsbAorCXJldHVybnMgaWYgdGhlIGRldmljZSBpcyBvcGVuIG9yIG5vdC4gIFtGSVhNRSAtLSBzaWxsaW5lc3MKKwlhZ2Fpbj9dCisKK3NvZnRkb2cuYyAtLSBTb2Z0d2FyZSB3YXRjaGRvZworCisJVGhlIHRpbWVvdXQgaXMgc2V0IHdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIgInNvZnRfbWFyZ2luIgorCXdoaWNoIGRlZmF1bHRzIHRvIDYwIHNlY29uZHMsIHRoZSB0aW1lb3V0IGlzIGFsc28gc2V0dGFibGUKKwl1c2luZyB0aGUgU0VUVElNRU9VVCBpb2N0bC4KKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJV0RJT0ZfU0VUVElNRU9VVCBiaXQgc2V0IGluIEdFVFNVUFBPUlQKKwordzgzODc3Zl93ZHQuYyAtLSBXODM4NzdGIENvbXB1dGVyCisKKwlIYXJkY29kZWQgdGltZW91dCBvZiAzMCBzZWNvbmRzCisKKwlEb2VzIG5vdCBzdXBwb3J0IENPTkZJR19XQVRDSERPR19OT1dBWU9VVCwgYnV0IGhhcyB0aGUgbWFnaWMKKwljaGFyYWN0ZXIgJ1YnIGNsb3NlIGhhbmRsaW5nLgorCisJTm8gYml0cyBzZXQgaW4gR0VUU1VQUE9SVAorCit3ODM2MjdoZl93ZHQuYyAtLSB3ODM2MjdoZiB3YXRjaGRvZworCisJVGltZW91dCB0aGF0IGRlZmF1bHRzIHRvIDYwIHNlY29uZHMsIHN1cHBvcnRzIFNFVFRJTUVPVVQuCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCUdFVFNVUFBPUlQgcmV0dXJucyBXRElPRl9LRUVQQUxJVkVQSU5HIGFuZCBXRElPRl9TRVRUSU1FT1VULgorCVRoZSBHRVRTVEFUVVMgY2FsbCByZXR1cm5zIGlmIHRoZSBkZXZpY2UgaXMgb3BlbiBvciBub3QuCisKK3dkdC5jIC0tIElDUyBXRFQ1MDAvNTAxIElTQSBhbmQKK3dkdF9wY2kuYyAtLSBJQ1MgV0RUNTAwLzUwMSBQQ0kKKworCURlZmF1bHQgdGltZW91dCBvZiA2MCBzZWNvbmRzLiAgVGhlIHRpbWVvdXQgaXMgYWxzbyBzZXR0YWJsZQorICAgICAgICB1c2luZyB0aGUgU0VUVElNRU9VVCBpb2N0bC4KKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJR0VUU1VQUE9SVCByZXR1cm5zIHdpdGggYml0cyBzZXQgZGVwZW5kaW5nIG9uIHRoZSBhY3R1YWwKKwljYXJkLiBUaGUgV0RUNTAxIHN1cHBvcnRzIGEgbG90IG9mIGV4dGVybmFsIG1vbml0b3JpbmcsIHRoZQorCVdEVDUwMCBtdWNoIGxlc3MuCisKK3dkdDI4NS5jIC0tIEZvb3RicmlkZ2Ugd2F0Y2hkb2cKKworCVRoZSB0aW1lb3V0IGlzIHNldCB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVyICJzb2Z0X21hcmdpbiIKKwl3aGljaCBkZWZhdWx0cyB0byA2MCBzZWNvbmRzLiAgVGhlIHRpbWVvdXQgaXMgYWxzbyBzZXR0YWJsZQorCXVzaW5nIHRoZSBTRVRUSU1FT1VUIGlvY3RsLgorCisJRG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCVdESU9GX1NFVFRJTUVPVVQgYml0IHNldCBpbiBHRVRTVVBQT1JUCisKK3dkdDk3Ny5jIC0tIE5ldHdpbmRlciBXODM5NzdBRiBjaGlwCisKKwlIYXJkY29kZWQgdGltZW91dCBvZiAzIG1pbnV0ZXMKKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJRG9lcyBub3Qgc3VwcG9ydCBhbnkgaW9jdGxzIGF0IGFsbC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy50eHQgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZkYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy50eHQKQEAgLTAsMCArMSwxMTUgQEAKKwlXYXRjaGRvZyBUaW1lciBJbnRlcmZhY2VzIEZvciBUaGUgTGludXggT3BlcmF0aW5nIFN5c3RlbQorCisJCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisKKwkgICAgIEN1c3RvbSBMaW51eCBEcml2ZXIgQW5kIFByb2dyYW0gRGV2ZWxvcG1lbnQKKworCitUaGUgZm9sbG93aW5nIHdhdGNoZG9nIGRyaXZlcnMgYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZDoKKworCUlDUwlXRFQ1MDEtUAorCUlDUwlXRFQ1MDEtUCAobm8gZmFuIHRhY2hvbWV0ZXIpCisJSUNTCVdEVDUwMC1QCisJU29mdHdhcmUgT25seQorCVNBMTEwMCBJbnRlcm5hbCBXYXRjaGRvZworCUJlcmtzaGlyZSBQcm9kdWN0cyBQQyBXYXRjaGRvZyBSZXZpc2lvbiBBICYgQyAoYnkgS2VuIEhvbGxpcykKKworCitBbGwgc2l4IGludGVyZmFjZXMgcHJvdmlkZSAvZGV2L3dhdGNoZG9nLCB3aGljaCB3aGVuIG9wZW4gbXVzdCBiZSB3cml0dGVuCit0byB3aXRoaW4gYSB0aW1lb3V0IG9yIHRoZSBtYWNoaW5lIHdpbGwgcmVib290LiBFYWNoIHdyaXRlIGRlbGF5cyB0aGUgcmVib290Cit0aW1lIGFub3RoZXIgdGltZW91dC4gSW4gdGhlIGNhc2Ugb2YgdGhlIHNvZnR3YXJlIHdhdGNoZG9nIHRoZSBhYmlsaXR5IHRvIAorcmVib290IHdpbGwgZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgbWFjaGluZXMgYW5kIGludGVycnVwdHMuIFRoZSBoYXJkd2FyZQorYm9hcmRzIHBoeXNpY2FsbHkgcHVsbCB0aGUgbWFjaGluZSBkb3duIG9mZiB0aGVpciBvd24gb25ib2FyZCB0aW1lcnMgYW5kCit3aWxsIHJlYm9vdCBmcm9tIGFsbW9zdCBhbnl0aGluZy4KKworQSBzZWNvbmQgdGVtcGVyYXR1cmUgbW9uaXRvcmluZyBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlIG9uIHRoZSBXRFQ1MDFQIGNhcmRzCithbmQgc29tZSBCZXJrc2hpcmUgY2FyZHMuIFRoaXMgcHJvdmlkZXMgL2Rldi90ZW1wZXJhdHVyZS4gVGhpcyBpcyB0aGUgbWFjaGluZSAKK2ludGVybmFsIHRlbXBlcmF0dXJlIGluIGRlZ3JlZXMgRmFocmVuaGVpdC4gRWFjaCByZWFkIHJldHVybnMgYSBzaW5nbGUgYnl0ZSAKK2dpdmluZyB0aGUgdGVtcGVyYXR1cmUuCisKK1RoZSB0aGlyZCBpbnRlcmZhY2UgbG9ncyBrZXJuZWwgbWVzc2FnZXMgb24gYWRkaXRpb25hbCBhbGVydCBldmVudHMuCisKK0JvdGggc29mdHdhcmUgYW5kIGhhcmR3YXJlIHdhdGNoZG9nIGRyaXZlcnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc3RhbmRhcmQKK2tlcm5lbC4gSWYgeW91IGFyZSB1c2luZyB0aGUgc29mdHdhcmUgd2F0Y2hkb2csIHlvdSBwcm9iYWJseSBhbHNvIHdhbnQKK3RvIHVzZSAicGFuaWM9NjAiIGFzIGEgYm9vdCBhcmd1bWVudCBhcyB3ZWxsLgorCitUaGUgd2R0IGNhcmQgY2Fubm90IGJlIHNhZmVseSBwcm9iZWQgZm9yLiBJbnN0ZWFkIHlvdSBuZWVkIHRvIHBhc3MKK3dkdD1pb2FkZHIsaXJxIGFzIGEgYm9vdCBwYXJhbWV0ZXIgLSBlZyAid2R0PTB4MjQwLDExIi4KKworVGhlIFNBMTEwMCB3YXRjaGRvZyBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgInNhMTEwMF9tYXJnaW4iCitjb21tYW5kbGluZSBhcmd1bWVudCB3aGljaCBzcGVjaWZpZXMgdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgorCitUaGUgaTgxMCBUQ08gd2F0Y2hkb2cgbW9kdWxlcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSAiaTgxMF9tYXJnaW4iCitjb21tYW5kbGluZSBhcmd1bWVudCB3aGljaCBzcGVjaWZpZXMgdGhlIGNvdW50ZXIgaW5pdGlhbCB2YWx1ZS4gVGhlIGNvdW50ZXIKK2lzIGRlY3JlbWVudGVkIGV2ZXJ5IDAuNiBzZWNvbmRzIGFuZCBkZWZhdWx0IHRvIDUwICgzMCBzZWNvbmRzKS4gVmFsdWVzIGNhbgorcmFuZ2UgYmV0d2VlbiAzIGFuZCA2My4KKworVGhlIGk4MTAgVENPIHdhdGNoZG9nIGRyaXZlciBhbHNvIGltcGxlbWVudHMgdGhlIFdESU9DX0dFVFNUQVRVUyBhbmQKK1dESU9DX0dFVEJPT1RTVEFUVVMgaW9jdGwoKXMuIFdESU9DX0dFVFNUQVRVUyByZXR1cm5zIHRoZSBhY3R1YWwgY291bnRlciB2YWx1ZQorYW5kIFdESU9DX0dFVEJPT1RTVEFUVVMgcmV0dXJucyB0aGUgdmFsdWUgb2YgVENPMiBTdGF0dXMgUmVnaXN0ZXIgKHNlZSBJbnRlbCdzCitkb2N1bWVudGF0aW9uIGZvciB0aGUgODI4MDFBQSBhbmQgODI4MDFBQiBkYXRhc2hlZXQpLiAKKworRmVhdHVyZXMKKy0tLS0tLS0tCisJCVdEVDUwMVAJCVdEVDUwMFAJCVNvZnR3YXJlCUJlcmtzaGlyZQlpODEwIFRDTwlTQTExMDBXRAorUmVib290IFRpbWVyCSAgIFggICAgICAgICAgICAgICBYICAgICAgICAgICAgICAgIFgJCSAgICBYICAgICAgICAgICAgICAgWCAgICAgICAgICAgICAgIFgKK0V4dGVybmFsIFJlYm9vdAkgICBYCSAgICAgICAgICAgWCAgICAgICAgICAgICAgICBvCQkgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBYCitJL08gUG9ydCBNb25pdG9yICAgbwkJICAgbwkJICAgIG8JCSAgICBYICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8KK1RlbXBlcmF0dXJlCSAgIFgJCSAgIG8JCSAgICBvICAgICAgICAgICAgICAgWCAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvCitGYW4gU3BlZWQgICAgICAgICAgWAkJICAgbwkJICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8KK1Bvd2VyIFVuZGVyCSAgIFggICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8KK1Bvd2VyIE92ZXIgICAgICAgICBYICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvCitPdmVyaGVhdCAgICAgICAgICAgWCAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbworCitUaGUgZXh0ZXJuYWwgZXZlbnQgaW50ZXJmYWNlcyBvbiB0aGUgV0RUIGJvYXJkcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCitNaW5vciBudW1iZXJzIGFyZSBob3dldmVyIGFsbG9jYXRlZCBmb3IgaXQuCisKKworRXhhbXBsZSBXYXRjaGRvZyBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCit7CisJaW50IGZkPW9wZW4oIi9kZXYvd2F0Y2hkb2ciLE9fV1JPTkxZKTsKKwlpZihmZD09LTEpCisJeworCQlwZXJyb3IoIndhdGNoZG9nIik7CisJCWV4aXQoMSk7CisJfQorCXdoaWxlKDEpCisJeworCQl3cml0ZShmZCwiXDAiLDEpOworCQlmc3luYyhmZCk7CisJCXNsZWVwKDEwKTsKKwl9Cit9CisKKworQ29udGFjdCBJbmZvcm1hdGlvbgorCitQZW9wbGUga2VlcCBhc2tpbmcgYWJvdXQgdGhlIFdEVCB3YXRjaGRvZyB0aW1lciBoYXJkd2FyZTogVGhlIHBob25lIGNvbnRhY3RzCitmb3IgSW5kdXN0cmlhbCBDb21wdXRlciBTb3VyY2UgYXJlOgorIAorSW5kdXN0cmlhbCBDb21wdXRlciBTb3VyY2UKK2h0dHA6Ly93d3cuaW5kY29tcHNyYy5jb20KK0lDUyBBZHZlbnQsIFNhbiBEaWVnbworNjI2MCBTZXF1ZW5jZSBEci4KK1NhbiBEaWVnbywgQ0EgOTIxMjEtNDM3MQorUGhvbmUgKDg1OCkgNjc3LTA4NzcKK0ZBWDogKDg1OCkgNjc3LTA4OTUKKz4KK0lDUyBBZHZlbnQgRXVyb3BlLCBVSworT3ZpbmcgUm9hZAorQ2hpY2hlc3RlciwKK1dlc3QgU3Vzc2V4LAorUE8xOSA0RVQsIFVLCitQaG9uZTogMDAuNDQuMTI0My41MzM5MDAKKworCithbmQgcGxlYXNlIG1lbnRpb24gTGludXggd2hlbiBlbnF1aXJpbmcuCisKK0ZvciBmdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBQQ1dEIGNhcmRzIHNlZSB0aGUgcGN3ZC13YXRjaGRvZy50eHQgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGI2ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtMCwwICsxLDE4MCBAQAorQU1ENjQgc3BlY2lmaWMgYm9vdCBvcHRpb25zCisKK1RoZXJlIGFyZSBtYW55IG90aGVycyAodXN1YWxseSBkb2N1bWVudGVkIGluIGRyaXZlciBkb2N1bWVudGF0aW9uKSwgYnV0Citvbmx5IHRoZSBBTUQ2NCBzcGVjaWZpYyBvbmVzIGFyZSBsaXN0ZWQgaGVyZS4KKworTWFjaGluZSBjaGVjaworCisgICBtY2U9b2ZmIGRpc2FibGUgbWFjaGluZSBjaGVjaworCisgICBub21jZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBpMzg2KTogc2FtZSBhcyBtY2U9b2ZmCisKKyAgIEV2ZXJ5dGhpbmcgZWxzZSBpcyBpbiBzeXNmcyBub3cuCisKK0FQSUNzCisKKyAgIGFwaWMJCSBVc2UgSU8tQVBJQy4gRGVmYXVsdAorCisgICBub2FwaWMJIERvbid0IHVzZSB0aGUgSU8tQVBJQy4KKworICAgZGlzYWJsZWFwaWMJIERvbid0IHVzZSB0aGUgbG9jYWwgQVBJQworCisgICBub2xhcGljCSBEb24ndCB1c2UgdGhlIGxvY2FsIEFQSUMgKGFsaWFzIGZvciBpMzg2IGNvbXBhdGliaWxpdHkpCisKKyAgIHBpcnE9Li4uCSBTZWUgRG9jdW1lbnRhdGlvbi9pMzg2L0lPLUFQSUMudHh0CisKKyAgIG5vYXBpY3RpbWVyCSBEb24ndCBzZXQgdXAgdGhlIEFQSUMgdGltZXIKKworRWFybHkgQ29uc29sZQorCisgICBzeW50YXg6IGVhcmx5cHJpbnRrPXZnYQorICAgICAgICAgICBlYXJseXByaW50az1zZXJpYWxbLHR0eVNuWyxiYXVkcmF0ZV1dCisKKyAgIFRoZSBlYXJseSBjb25zb2xlIGlzIHVzZWZ1bCB3aGVuIHRoZSBrZXJuZWwgY3Jhc2hlcyBiZWZvcmUgdGhlCisgICBub3JtYWwgY29uc29sZSBpcyBpbml0aWFsaXplZC4gSXQgaXMgbm90IGVuYWJsZWQgYnkKKyAgIGRlZmF1bHQgYmVjYXVzZSBpdCBoYXMgc29tZSBjb3NtZXRpYyBwcm9ibGVtcy4KKyAgIEFwcGVuZCAsa2VlcCB0byBub3QgZGlzYWJsZSBpdCB3aGVuIHRoZSByZWFsIGNvbnNvbGUgdGFrZXMgb3Zlci4KKyAgIE9ubHkgdmdhIG9yIHNlcmlhbCBhdCBhIHRpbWUsIG5vdCBib3RoLgorICAgQ3VycmVudGx5IG9ubHkgdHR5UzAgYW5kIHR0eVMxIGFyZSBzdXBwb3J0ZWQuCisgICBJbnRlcmFjdGlvbiB3aXRoIHRoZSBzdGFuZGFyZCBzZXJpYWwgZHJpdmVyIGlzIG5vdCB2ZXJ5IGdvb2QuCisgICBUaGUgVkdBIG91dHB1dCBpcyBldmVudHVhbGx5IG92ZXJ3cml0dGVuIGJ5IHRoZSByZWFsIGNvbnNvbGUuCisKK1RpbWluZworCisgIG5vdHNjCisgIERvbid0IHVzZSB0aGUgQ1BVIHRpbWUgc3RhbXAgY291bnRlciB0byByZWFkIHRoZSB3YWxsIHRpbWUuCisgIFRoaXMgY2FuIGJlIHVzZWQgdG8gd29yayBhcm91bmQgdGltaW5nIHByb2JsZW1zIG9uIG11bHRpcHJvY2Vzc29yIHN5c3RlbXMKKyAgd2l0aCBub3QgcHJvcGVybHkgc3luY2hyb25pemVkIENQVXMuIE9ubHkgdXNlZnVsIHdpdGggYSBTTVAga2VybmVsCisKKyAgcmVwb3J0X2xvc3RfdGlja3MKKyAgUmVwb3J0IHdoZW4gdGltZXIgaW50ZXJydXB0cyBhcmUgbG9zdCBiZWNhdXNlIHNvbWUgY29kZSB0dXJuZWQgb2ZmCisgIGludGVycnVwdHMgZm9yIHRvbyBsb25nLgorCisgIG5taV93YXRjaGRvZz1OVU1CRVJbLHBhbmljXQorICBOVU1CRVIgY2FuIGJlOgorICAwIGRvbid0IHVzZSBhbiBOTUkgd2F0Y2hkb2cKKyAgMSB1c2UgdGhlIElPLUFQSUMgdGltZXIgZm9yIHRoZSBOTUkgd2F0Y2hkb2cKKyAgMiB1c2UgdGhlIGxvY2FsIEFQSUMgZm9yIHRoZSBOTUkgd2F0Y2hkb2cgdXNpbmcgYSBwZXJmb3JtYW5jZSBjb3VudGVyLiBOb3RlCisgIFRoaXMgd2lsbCB1c2Ugb25lIHBlcmZvcm1hbmNlIGNvdW50ZXIgYW5kIHRoZSBsb2NhbCBBUElDJ3MgcGVyZm9ybWFuY2UKKyAgdmVjdG9yLgorICBXaGVuIHBhbmljIGlzIHNwZWNpZmllZCBwYW5pYyB3aGVuIGFuIE5NSSB3YXRjaGRvZyB0aW1lb3V0IG9jY3Vycy4KKyAgVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgdXNlIGEgcGFuaWM9Li4uIHRpbWVvdXQgYW5kIG5lZWQgdGhlIGJveAorICBxdWlja2x5IHVwIGFnYWluLgorCisgIG5vaHBldAorICBEb24ndCB1c2UgdGhlIEhQRVQgdGltZXIuCisKK0lkbGUgbG9vcAorCisgIGlkbGU9cG9sbAorICBEb24ndCBkbyBwb3dlciBzYXZpbmcgaW4gdGhlIGlkbGUgbG9vcCB1c2luZyBITFQsIGJ1dCBwb2xsIGZvciByZXNjaGVkdWxpbmcKKyAgZXZlbnQuIFRoaXMgd2lsbCBtYWtlIHRoZSBDUFVzIGVhdCBhIGxvdCBtb3JlIHBvd2VyLCBidXQgbWF5IGJlIHVzZWZ1bAorICB0byBnZXQgc2xpZ2h0bHkgYmV0dGVyIHBlcmZvcm1hbmNlIGluIG11bHRpcHJvY2Vzc29yIGJlbmNobWFya3MuIEl0IGFsc28KKyAgbWFrZXMgc29tZSBwcm9maWxpbmcgdXNpbmcgcGVyZm9ybWFuY2UgY291bnRlcnMgbW9yZSBhY2N1cmF0ZS4KKworUmVib290aW5nCisKKyAgIHJlYm9vdD1iW2lvc10gfCB0W3JpcGxlXSB8IGtbYmRdIFssIFt3XWFybSB8IFtjXW9sZF0KKyAgIGJpb3MJICBVc2UgdGhlIENQVSByZWJvdG8gdmVjdG9yIGZvciB3YXJtIHJlc2V0CisgICB3YXJtICAgRG9uJ3Qgc2V0IHRoZSBjb2xkIHJlYm9vdCBmbGFnCisgICBjb2xkICAgU2V0IHRoZSBjb2xkIHJlYm9vdCBmbGFnCisgICB0cmlwbGUgRm9yY2UgYSB0cmlwbGUgZmF1bHQgKGluaXQpCisgICBrYmQgICAgVXNlIHRoZSBrZXlib2FyZCBjb250cm9sbGVyLiBjb2xkIHJlc2V0IChkZWZhdWx0KQorCisgICBVc2luZyB3YXJtIHJlc2V0IHdpbGwgYmUgbXVjaCBmYXN0ZXIgZXNwZWNpYWxseSBvbiBiaWcgbWVtb3J5CisgICBzeXN0ZW1zIGJlY2F1c2UgdGhlIEJJT1Mgd2lsbCBub3QgZ28gdGhyb3VnaCB0aGUgbWVtb3J5IGNoZWNrLgorICAgRGlzYWR2YW50YWdlIGlzIHRoYXQgbm90IGFsbCBoYXJkd2FyZSB3aWxsIGJlIGNvbXBsZXRlbHkgcmVpbml0aWFsaXplZAorICAgb24gcmVib290IHNvIHRoZXJlIG1heSBiZSBib290IHByb2JsZW1zIG9uIHNvbWUgc3lzdGVtcy4KKworICAgcmVib290PWZvcmNlCisKKyAgIERvbid0IHN0b3Agb3RoZXIgQ1BVcyBvbiByZWJvb3QuIFRoaXMgY2FuIG1ha2UgcmVib290IG1vcmUgcmVsaWFibGUKKyAgIGluIHNvbWUgY2FzZXMuCisKK05vbiBFeGVjdXRhYmxlIE1hcHBpbmdzCisKKyAgbm9leGVjPW9ufG9mZgorCisgIG9uICAgICAgRW5hYmxlKGRlZmF1bHQpCisgIG9mZiAgICAgRGlzYWJsZQorCitTTVAKKworICBub3NtcAlPbmx5IHVzZSBhIHNpbmdsZSBDUFUKKworICBtYXhjcHVzPU5VTUJFUiBvbmx5IHVzZSB1cHRvIE5VTUJFUiBDUFVzCisKKyAgY3B1bWFzaz1NQVNLICAgb25seSB1c2UgY3B1cyB3aXRoIGJpdHMgc2V0IGluIG1hc2sKKworTlVNQQorCisgIG51bWE9b2ZmCU9ubHkgc2V0IHVwIGEgc2luZ2xlIE5VTUEgbm9kZSBzcGFubmluZyBhbGwgbWVtb3J5LgorCisgIG51bWE9bm9hY3BpICAgRG9uJ3QgcGFyc2UgdGhlIFNSQVQgdGFibGUgZm9yIE5VTUEgc2V0dXAKKworICBudW1hPWZha2U9WCAgIEZha2UgWCBub2RlcyBhbmQgaWdub3JlIE5VTUEgc2V0dXAgb2YgdGhlIGFjdHVhbCBtYWNoaW5lLgorCitBQ1BJCisKKyAgYWNwaT1vZmYJRG9uJ3QgZW5hYmxlIEFDUEkKKyAgYWNwaT1odAlVc2UgQUNQSSBib290IHRhYmxlIHBhcnNpbmcsIGJ1dCBkb24ndCBlbmFibGUgQUNQSQorCQlpbnRlcnByZXRlcgorICBhY3BpPWZvcmNlCUZvcmNlIEFDUEkgb24gKGN1cnJlbnRseSBub3QgbmVlZGVkKQorCisgIGFjcGk9c3RyaWN0ICAgRGlzYWJsZSBvdXQgb2Ygc3BlYyBBQ1BJIHdvcmthcm91bmRzLgorCisgIGFjcGlfc2NpPXtlZGdlLGxldmVsLGhpZ2gsbG93fSAgU2V0IHVwIEFDUEkgU0NJIGludGVycnVwdC4KKworICBhY3BpPW5vaXJxCURvbid0IHJvdXRlIGludGVycnVwdHMKKworUENJCisKKyAgcGNpPW9mZglEb24ndCB1c2UgUENJCisgIHBjaT1jb25mMQlVc2UgY29uZjEgYWNjZXNzLgorICBwY2k9Y29uZjIJVXNlIGNvbmYyIGFjY2Vzcy4KKyAgcGNpPXJvbQlBc3NpZ24gUk9Ncy4KKyAgcGNpPWFzc2lnbi1idXNzZXMgICAgQXNzaWduIGJ1c3NlcworICBwY2k9aXJxbWFzaz1NQVNLCSAgICAgICBTZXQgUENJIGludGVycnVwdCBtYXNrIHRvIE1BU0sKKyAgcGNpPWxhc3RidXM9TlVNQkVSCSAgICAgICBTY2FuIHVwdG8gTlVNQkVSIGJ1c3Nlcywgbm8gbWF0dGVyIHdoYXQgdGhlIG1wdGFibGUgc2F5cy4KKyAgcGNpPW5vYWNwaQkJRG9uJ3QgdXNlIEFDUEkgdG8gc2V0IHVwIFBDSSBpbnRlcnJ1cHQgcm91dGluZy4KKworSU9NTVUKKworIGlvbW11PVtzaXplXVssbm9hZ3BdWyxvZmZdWyxmb3JjZV1bLG5vZm9yY2VdWyxsZWFrXVssbWVtYXBlcls9b3JkZXJdXVssbWVyZ2VdCisgICAgICAgICBbLGZvcmNlc2FjXVssZnVsbGZsdXNoXVssbm9tZXJnZV1bLG5vYXBlcnR1cmVdCisgICBzaXplICBzZXQgc2l6ZSBvZiBpb21tdSAoaW4gYnl0ZXMpCisgICBub2FncCBkb24ndCBpbml0aWFsaXplIHRoZSBBR1AgZHJpdmVyIGFuZCB1c2UgZnVsbCBhcGVydHVyZS4KKyAgIG9mZiAgIGRvbid0IHVzZSB0aGUgSU9NTVUKKyAgIGxlYWsgIHR1cm4gb24gc2ltcGxlIGlvbW11IGxlYWsgdHJhY2luZyAob25seSB3aGVuIENPTkZJR19JT01NVV9MRUFLIGlzIG9uKQorICAgbWVtYXBlcls9b3JkZXJdIGFsbG9jYXRlIGFuIG93biBhcGVydHVyZSBvdmVyIFJBTSB3aXRoIHNpemUgMzJNQl5vcmRlci4KKyAgIG5vZm9yY2UgZG9uJ3QgZm9yY2UgSU9NTVUgdXNhZ2UuIERlZmF1bHQuCisgICBmb3JjZSAgRm9yY2UgSU9NTVUuCisgICBtZXJnZSAgRG8gU0cgbWVyZ2luZy4gSW1wbGllcyBmb3JjZSAoZXhwZXJpbWVudGFsKQorICAgbm9tZXJnZSBEb24ndCBkbyBTRyBtZXJnaW5nLgorICAgZm9yY2VzYWMgRm9yIFNBQyBtb2RlIGZvciBtYXNrcyA8NDBiaXRzICAoZXhwZXJpbWVudGFsKQorICAgZnVsbGZsdXNoIEZsdXNoIElPTU1VIG9uIGVhY2ggYWxsb2NhdGlvbiAoZGVmYXVsdCkKKyAgIG5vZnVsbGZsdXNoIERvbid0IHVzZSBJT01NVSBmdWxsZmx1c2gKKyAgIGFsbG93ZWQgIG92ZXJ3cml0ZSBpb21tdSBvZmYgd29ya2Fyb3VuZHMgZm9yIHNwZWNpZmljIGNoaXBzZXRzLgorICAgc29mdAkgVXNlIHNvZnR3YXJlIGJvdW5jZSBidWZmZXJpbmcgKGRlZmF1bHQgZm9yIEludGVsIG1hY2hpbmVzKQorICAgbm9hcGVydHVyZSBEb24ndCB0b3VjaCB0aGUgYXBlcnR1cmUgZm9yIEFHUC4KKworICBzd2lvdGxiPXBhZ2VzWyxmb3JjZV0KKworICBwYWdlcyAgUHJlcmVzZXJ2ZSB0aGF0IG1hbnkgMTI4SyBwYWdlcyBmb3IgdGhlIHNvZnR3YXJlIElPIGJvdW5jZSBidWZmZXJpbmcuCisgIGZvcmNlICBGb3JjZSBhbGwgSU8gdGhyb3VnaCB0aGUgc29mdHdhcmUgVExCLgorCitEZWJ1Z2dpbmcKKworICBvb3BzPXBhbmljIEFsd2F5cyBwYW5pYyBvbiBvb3BzZXMuIERlZmF1bHQgaXMgdG8ganVzdCBraWxsIHRoZSBwcm9jZXNzLAorCSAgICAgYnV0IHRoZXJlIGlzIGEgc21hbGwgcHJvYmFiaWxpdHkgb2YgZGVhZGxvY2tpbmcgdGhlIG1hY2hpbmUuCisJICAgICBUaGlzIHdpbGwgYWxzbyBjYXVzZSBwYW5pY3Mgb24gbWFjaGluZSBjaGVjayBleGNlcHRpb25zLgorCSAgICAgVXNlZnVsIHRvZ2V0aGVyIHdpdGggcGFuaWM9MzAgdG8gdHJpZ2dlciBhIHJlYm9vdC4KKworICBrc3RhY2s9TiAgIFByaW50IHRoYXQgbWFueSB3b3JkcyBmcm9tIHRoZSBrZXJuZWwgc3RhY2sgaW4gb29wcyBkdW1wcy4KKworTWlzYworCisgIG5vcmVwbGFjZW1lbnQgIERvbid0IHJlcGxhY2UgaW5zdHJ1Y3Rpb25zIHdpdGggbW9yZSBhcHByb3BpYXRlIG9uZXMKKyAgCQkJCSBmb3IgdGhlIENQVS4gVGhpcyBtYXkgYmUgdXNlZnVsIG9uIGFzeW1tZXRyaWMgTVAgc3lzdGVtcworCQkJCSB3aGVyZSBzb21lIENQVSBoYXZlIGxlc3MgY2FwYWJpbGl0aWVzIHRoYW4gdGhlIG90aGVycy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvbW0udHh0IGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvbW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MmI3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9tbS50eHQKQEAgLTAsMCArMSwyNCBAQAorCis8cHJldmlvdXMgZGVzY3JpcHRpb24gb2Jzb2xldGUsIGRlbGV0ZWQ+CisKK1ZpcnR1YWwgbWVtb3J5IG1hcCB3aXRoIDQgbGV2ZWwgcGFnZSB0YWJsZXM6CisKKzAwMDAwMDAwMDAwMDAwMDAgLSAwMDAwN2ZmZmZmZmZmZmZmICg9NDdiaXRzKSB1c2VyIHNwYWNlLCBkaWZmZXJlbnQgcGVyIG1tCitob2xlIGNhdXNlZCBieSBbNDg6NjNdIHNpZ24gZXh0ZW5zaW9uCitmZmZmODAwMDAwMDAwMDAwIC0gZmZmZjgwZmZmZmZmZmZmZiAoPTQwYml0cykgZ3VhcmQgaG9sZQorZmZmZjgxMDAwMDAwMDAwMCAtIGZmZmZjMGZmZmZmZmZmZmYgKD00NmJpdHMpIGRpcmVjdCBtYXBwaW5nIG9mIHBoeXMuIG1lbW9yeQorZmZmZmMxMDAwMDAwMDAwMCAtIGZmZmZjMWZmZmZmZmZmZmYgKD00MGJpdHMpIGhvbGUKK2ZmZmZjMjAwMDAwMDAwMDAgLSBmZmZmZTFmZmZmZmZmZmZmICg9NDViaXRzKSB2bWFsbG9jL2lvcmVtYXAgc3BhY2UKKy4uLiB1bnVzZWQgaG9sZSAuLi4KK2ZmZmZmZmZmODAwMDAwMDAgLSBmZmZmZmZmZjgyODAwMDAwICg9NDBNQikgICBrZXJuZWwgdGV4dCBtYXBwaW5nLCBmcm9tIHBoeXMgMAorLi4uIHVudXNlZCBob2xlIC4uLgorZmZmZmZmZmY4ODAwMDAwMCAtIGZmZmZmZmZmZmZmMDAwMDAgKD0xOTE5TUIpIG1vZHVsZSBtYXBwaW5nIHNwYWNlCisKK3ZtYWxsb2Mgc3BhY2UgaXMgbGF6aWx5IHN5bmNocm9uaXplZCBpbnRvIHRoZSBkaWZmZXJlbnQgUE1MNCBwYWdlcyBvZgordGhlIHByb2Nlc3NlcyB1c2luZyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyLCB3aXRoIGluaXRfbGV2ZWw0X3BndCBhcworcmVmZXJlbmNlLgorCitDdXJyZW50IFg4Ni02NCBpbXBsZW1lbnRhdGlvbnMgb25seSBzdXBwb3J0IDQwIGJpdCBvZiBhZGRyZXNzIHNwYWNlLAorYnV0IHdlIHN1cHBvcnQgdXB0byA0NmJpdHMuIFRoaXMgZXhwYW5kcyBpbnRvIE1CWiBzcGFjZSBpbiB0aGUgcGFnZSB0YWJsZXMuCisKKy1BbmRpIEtsZWVuLCBKdWwgMjAwNApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94dGVybS1saW51eC54cG0gYi9Eb2N1bWVudGF0aW9uL3h0ZXJtLWxpbnV4LnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDY5YzFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi94dGVybS1saW51eC54cG0KQEAgLTAsMCArMSw2MSBAQAorLyogWFBNICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogICAgICAgVGhpcyBwaXhtYXAgd2FzIG1hZGUgYnkgVG9yc3RlbiBQb3VsaW4gLSAxOTk2IC0gdG9yc3RlbkBkaWt1LmRrICAgKiovCisvKiogICAgICAgSXQgd2FzIG1hZGUgYnkgY29tYmluaW5nIHh0ZXJtLWJsYW5rLnhwbSB3aXRoICAgICAgICAgICAgICAgICAgICAgKiovCisvKiogICAgICAgdGhlIHdvbmRlcmZ1bGx5IGN1dGUgTGludXggcGVuZ3VpbiBtYXNjb3QgYnkgTGFycnkgRXdpbmcuICAgICAgICAgKiovCisvKiogICAgICAgSSBoYWQgdG8gY2hhbmdlIExhcnJ5J3MgcGVuZ3VpbiBhIGxpdHRsZSB0byBtYWtlIGl0IGZpdC4gICAgICAgICAgKiovCisvKiogICAgICAgeHRlcm0tYmxhbmsueHBtIGNvbnRhaW5lZCB0aGUgZm9sbG93aW5nIGNvbW1lbnQ6ICAgICAgICAgICAgICAgICAgKiovCisvKiogICAgICAgVGhpcyBwaXhtYXAgaXMga2luZGx5IG9mZmVyZWQgYnkgSW9uIENpb25jYSAtIDE5OTIgLSAgICAgICAgICAgICAgKiovCisvKiogICAgICAgU3dpc3MgRmVkZXJhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisvKiogICAgICAgQ2VudHJhbCBDb21wdXRpbmcgU2VydmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY2hhciAqIGltYWdlX25hbWUgW10gPSB7CisvKiovCisiNjQgMzggOCAxIiwKKy8qKi8KKyIgCXMgbWFzawljIG5vbmUiLAorIi4JYyBncmF5NzAiLAorIlgJYyBncmF5ODUiLAorIm8JYyBncmF5NTAiLAorIk8JYyB5ZWxsb3ciLAorIisJYyBkYXJrb2xpdmVncmVlbiIsCisiQAljIHdoaXRlIiwKKyIjCWMgYmxhY2siLAorIiAgICAgICAgICAgICAgIyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAjIyMjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICMjIyMjIyMjIyMgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgICAgICAgICAiLAorIiAgICAgICAgICAgICMjIyMjIyMjIyMjICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYLiAgICAgICAgICAiLAorIiAgICAgICAgICAgICMjIyMjIyMjIyMjIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG9vICAgICAgICAiLAorIiAgICAgICAgICAgICNAQEAjQEBAIyMjIC5YWCsrKysrKysrKysrKysrKysrKysrKysrWFhYWG9vICAgICAgICAiLAorIiAgICAgICAgICAgICNAI0AjQCNAIyMjIC5YWCsrKysrKysrKysrKysrKysrKysrKysrK1hYWG9vbyAgICAgICAiLAorIiAgICAgICAgICAgICNAIyMjIyNAIyMjIC5YWCsrQEArQCsrQCtAQEBAKytAKysrKysrK1hYWG9vbyAgICAgICAiLAorIiAgICAgICAgICAgICMjI09PTyMjIyMjIy5YWCsrKysrKysrKysrKysrKysrKysrKysrK1hYWG9vb28gICAgICAiLAorIiAgICAgICAgICAgICMjT09PT09PIyMjIy5YWCsrQEBAQCtAQCtAQEArKysrKysrKysrK1hYWG9vb28gICAgICAiLAorIiAgICAgICAgICAgICNPI09PTyNPIyMjIy5YWCsrKysrKysrKysrKysrKysrKysrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgICAgICMjTyMjI09PIyMjIy5YWCsrQEBAQEBAQEBAQCtAQEBAQCsrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgICAgICMjI09PT09AIyMjIyNYWCsrKysrKysrKysrKysrKysrKysrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgICAgIyNAIyMjQEBAQCMjIyNYWCsrQEBAK0BAQEArQEArK0BAQCsrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgICAgI0BAQEBAQEBAQEAjIyMjWCsrKysrKysrKysrKysrKysrKysrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgICAjI0BAQEBAQEBAQEAjIyMjIysrQCsrKysrKysrKysrKysrKysrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgICMjI0BAQEBAQEBAQEAjIyMjIyMrKysrKysrKysrKysrKysrKysrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgIyMjI0BAQEBAQEBAQEBAIyMjIyMrQEBAQCtAK0BAQCtAKysrKysrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgIyMjQEBAQEBAQEBAQEBAIyMjIyMjKysrKysrKysrKysrKysrKysrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAgIyNAQEBAQEBAQEBAQEBAQCMjIyMjQCtAQEBAKysrKysrKysrKysrKysrK1hYWG9vb29vICAgICAiLAorIiAgICAgICAjIyNAQEBAQEBAQEBAQEBAQCMjIyMjIysrKysrKysrKysrKysrKysrKysrWFhYWG9vb28gICAgICAiLAorIiAgICAgICAjIyNAQEBAQEBAQEBAQEBAQCMjIyMjI1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG9vbyAgICAgICAiLAorIiAgICAgICMjI0BAQEBAQEBAQEBAQEBAQCMjIyMjI1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYb29vICAgICAgICAiLAorIiAgICAgICMjI0BAQEBAQEBAQEBAQEBAQEAjIyMjI29vb29vb29vb29vb29vb29vb29vb29vLi4ub28gICAgICAiLAorIiAgICAgICMjI0BAQEBAQEBAQEBAQEBAQCMjIyMjIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5vb28gICAgICAiLAorIiAgICAgI09PIyNAQEBAQEBAQEBAQEBAIyMjIyMjI29vb29vb29vb29vb29vb29vb29vb29vb29vb28gICAgICAiLAorIiAgICAgI09PTyMjQEBAQEBAQEBAQEAjT08jIyMjTyNYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG9vb28uLiAuLiAiLAorIiAgIyMjT09PT08jI0BAQEBAQEBAQEAjT09PI09PTyNYWFhYWFhYWFhYWFhYWCMjIyMjIyNYWG9vb28gIC4gIC4iLAorIiAjT09PT09PT08jIyNAQEBAQEBAQEAjT09PT09PTyNvb29vb29vb29vb29vb29vb29vb1hYWG9vbyAgICAgLiAiLAorIiAjT09PT09PT09PIyMjQEBAQEBAQEBAI09PT09PT08jI1hYWFhYWFhYWFhYWFhYWFhYb29vb28gICAgICAuICAiLAorIiAgI09PT09PT09PTyNAQEBAQEBAQCMjI09PT09PT09PTyNYWFhYWFhYWFhYWFhYWFhvbyAgICAgIG9vb29vbyAiLAorIiAgI09PT09PT09PTyNAQEBAQEBAIyMjI09PT09PT09PI0BAQEBAQEBAQEBAWFhYWFhvbyAgIG9vb29vLi4ubyAiLAorIiAjT09PT09PT09PT08jIyMjIyMjIyMjI09PT09PTyMjWFhYWFhYWFhYWFhYWFhYWG9vICAgb29YWFhvby4ubyAiLAorIiAgIyNPT09PT09PT08jIyMjIyMjIyMjI09PT08jI0BAQEBAQEBAQEBAQEBYWFhYb28gICAgb1hYWFhYLi5vICAiLAorIiAgICAgIyMjT09PTyMjIyAgICBvWFgjI09PTyNYWFhYWFhYWFhYWFhYWFhYWFhvbyAgICAgby4uLi4ub28gICAiLAorIiAgICAgICAgICMjIyMgICAgICBvb29vIyMjI29vb29vb29vb29vb29vb29vb29vICAgICAgb29vb29vbyAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vem9ycm8udHh0IGIvRG9jdW1lbnRhdGlvbi96b3Jyby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4MjlkMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vem9ycm8udHh0CkBAIC0wLDAgKzEsMTAyIEBACisJCVdyaXRpbmcgRGV2aWNlIERyaXZlcnMgZm9yIFpvcnJvIERldmljZXMKKwkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXcml0dGVuIGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+CitMYXN0IHJldmlzZWQ6IFNlcHRlbWJlciA1LCAyMDAzCisKKworMS4gSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0tLS0KKworVGhlIFpvcnJvIGJ1cyBpcyB0aGUgYnVzIHVzZWQgaW4gdGhlIEFtaWdhIGZhbWlseSBvZiBjb21wdXRlcnMuIFRoYW5rcyB0bworQXV0b0NvbmZpZyh0bSksIGl0J3MgMTAwJSBQbHVnLWFuZC1QbGF5LgorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIFpvcnJvIGJ1c3NlcywgWm9ycm8gSUkgYW5kIFpvcnJvIElJSToKKworICAtIFRoZSBab3JybyBJSSBhZGRyZXNzIHNwYWNlIGlzIDI0LWJpdCBhbmQgbGllcyB3aXRoaW4gdGhlIGZpcnN0IDE2IE1CIG9mIHRoZQorICAgIEFtaWdhJ3MgYWRkcmVzcyBtYXAuCisKKyAgLSBab3JybyBJSUkgaXMgYSAzMi1iaXQgZXh0ZW5zaW9uIG9mIFpvcnJvIElJLCB3aGljaCBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZQorICAgIHdpdGggWm9ycm8gSUkuIFRoZSBab3JybyBJSUkgYWRkcmVzcyBzcGFjZSBsaWVzIG91dHNpZGUgdGhlIGZpcnN0IDE2IE1CLgorCisKKzIuIFByb2JpbmcgZm9yIFpvcnJvIERldmljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWm9ycm8gZGV2aWNlcyBhcmUgZm91bmQgYnkgY2FsbGluZyBgem9ycm9fZmluZF9kZXZpY2UoKScsIHdoaWNoIHJldHVybnMgYQorcG9pbnRlciB0byB0aGUgYG5leHQnIFpvcnJvIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgWm9ycm8gSUQuIEEgcHJvYmUgbG9vcAorZm9yIHRoZSBib2FyZCB3aXRoIFpvcnJvIElEIGBaT1JST19QUk9EX3h4eCcgbG9va3MgbGlrZToKKworICAgIHN0cnVjdCB6b3Jyb19kZXYgKnogPSBOVUxMOworCisgICAgd2hpbGUgKCh6ID0gem9ycm9fZmluZF9kZXZpY2UoWk9SUk9fUFJPRF94eHgsIHopKSkgeworCWlmICghem9ycm9fcmVxdWVzdF9yZWdpb24oei0+cmVzb3VyY2Uuc3RhcnQrTVlfU1RBUlQsIE1ZX1NJWkUsCisJCQkJICAiTXkgZXhwbGFuYXRpb24iKSkKKwkuLi4KKyAgICB9CisKK2BaT1JST19XSUxEQ0FSRCcgYWN0cyBhcyBhIHdpbGRjYXJkIGFuZCBmaW5kcyBhbnkgWm9ycm8gZGV2aWNlLiBJZiB5b3VyIGRyaXZlcgorc3VwcG9ydHMgZGlmZmVyZW50IHR5cGVzIG9mIGJvYXJkcywgeW91IGNhbiB1c2UgYSBjb25zdHJ1Y3QgbGlrZToKKworICAgIHN0cnVjdCB6b3Jyb19kZXYgKnogPSBOVUxMOworCisgICAgd2hpbGUgKCh6ID0gem9ycm9fZmluZF9kZXZpY2UoWk9SUk9fV0lMRENBUkQsIHopKSkgeworCWlmICh6LT5pZCAhPSBaT1JST19QUk9EX3h4eDEgJiYgei0+aWQgIT0gWk9SUk9fUFJPRF94eHgyICYmIC4uLikKKwkgICAgY29udGludWU7CisJaWYgKCF6b3Jyb19yZXF1ZXN0X3JlZ2lvbih6LT5yZXNvdXJjZS5zdGFydCtNWV9TVEFSVCwgTVlfU0laRSwKKwkJCQkgICJNeSBleHBsYW5hdGlvbiIpKQorCS4uLgorICAgIH0KKworCiszLiBab3JybyBSZXNvdXJjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWZvcmUgeW91IGNhbiBhY2Nlc3MgYSBab3JybyBkZXZpY2UncyByZWdpc3RlcnMsIHlvdSBoYXZlIHRvIG1ha2Ugc3VyZSBpdCdzCitub3QgeWV0IGluIHVzZS4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBJL08gbWVtb3J5IHNwYWNlIHJlc291cmNlIG1hbmFnZW1lbnQKK2Z1bmN0aW9uczoKKworICAgIHJlcXVlc3RfbWVtX3JlZ2lvbigpCisgICAgcmVsZWFzZV9tZW1fcmVnaW9uKCkKKworU2hvcnRjdXRzIHRvIGNsYWltIHRoZSB3aG9sZSBkZXZpY2UncyBhZGRyZXNzIHNwYWNlIGFyZSBwcm92aWRlZCBhcyB3ZWxsOgorCisgICAgem9ycm9fcmVxdWVzdF9kZXZpY2UKKyAgICB6b3Jyb19yZWxlYXNlX2RldmljZQorCisKKzQuIEFjY2Vzc2luZyB0aGUgWm9ycm8gQWRkcmVzcyBTcGFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhZGRyZXNzIHJlZ2lvbnMgaW4gdGhlIFpvcnJvIGRldmljZSByZXNvdXJjZXMgYXJlIFpvcnJvIGJ1cyBhZGRyZXNzCityZWdpb25zLiBEdWUgdG8gdGhlIGlkZW50aXR5IGJ1cy1waHlzaWNhbCBhZGRyZXNzIG1hcHBpbmcgb24gdGhlIFpvcnJvIGJ1cywKK3RoZXkgYXJlIENQVSBwaHlzaWNhbCBhZGRyZXNzZXMgYXMgd2VsbC4KKworVGhlIHRyZWF0bWVudCBvZiB0aGVzZSByZWdpb25zIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgWm9ycm8gc3BhY2U6CisKKyAgLSBab3JybyBJSSBhZGRyZXNzIHNwYWNlIGlzIGFsd2F5cyBtYXBwZWQgYW5kIGRvZXMgbm90IGhhdmUgdG8gYmUgbWFwcGVkCisgICAgZXhwbGljaXRseSB1c2luZyB6X2lvcmVtYXAoKS4KKyAgICAKKyAgICBDb252ZXJzaW9uIGZyb20gYnVzL3BoeXNpY2FsIFpvcnJvIElJIGFkZHJlc3NlcyB0byBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMKKyAgICBhbmQgdmljZSB2ZXJzYSBpcyBkb25lIHVzaW5nOgorCisJdmlydF9hZGRyID0gWlRXT19WQUREUihidXNfYWRkcik7CisJYnVzX2FkZHIgPSBaVFdPX1BBRERSKHZpcnRfYWRkcik7CisKKyAgLSBab3JybyBJSUkgYWRkcmVzcyBzcGFjZSBtdXN0IGJlIG1hcHBlZCBleHBsaWNpdGx5IHVzaW5nIHpfaW9yZW1hcCgpIGZpcnN0CisgICAgYmVmb3JlIGl0IGNhbiBiZSBhY2Nlc3NlZDoKKyAKKwl2aXJ0X2FkZHIgPSB6X2lvcmVtYXAoYnVzX2FkZHIsIHNpemUpOworCS4uLgorCXpfaW91bm1hcCh2aXJ0X2FkZHIpOworCisKKzUuIFJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0KKworbGludXgvaW5jbHVkZS9saW51eC96b3Jyby5oCitsaW51eC9pbmNsdWRlL2FzbS17bTY4ayxwcGN9L3pvcnJvLmgKK2xpbnV4L2luY2x1ZGUvbGludXgvem9ycm9faWRzLmgKK2xpbnV4L2RyaXZlcnMvem9ycm8KKy9wcm9jL2J1cy96b3JybworCg==